Name: series-workflowx9thb Phase: Succeeded StartedAt: 2026-08-08 22:57:17 +0000 UTC FinishedAt: 2026-08-09 03:18:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx9thb[0] Phase: Succeeded StartedAt: 2026-08-08 22:57:17 +0000 UTC FinishedAt: 2026-08-08 23:38:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx9thb[0].run-triage Phase: Succeeded StartedAt: 2026-08-08 22:57:17 +0000 UTC FinishedAt: 2026-08-08 23:38:32 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "001b5d347d8ba39b2dccaefcc57967b18caec8fe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "L2TP", "L2TP_V3", "L2TP_ETH", "L2TP_IP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "001b5d347d8ba39b2dccaefcc57967b18caec8fe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "L2TP", "L2TP_V3", "L2TP_ETH", "L2TP_IP" ], "series_id": "4a5f0e22-8ff6-4e58-bcbe-b95c68a0fc7d" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "l2tp_tunnel_register", "l2tp_nl_cmd_session_create", "l2tp_xmit_skb" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": { "findings": [ "9b3d30fe-b87f-4b00-99a6-464f0a271312" ] } } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIzOjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0wyVFAmIzM0OywKICAgICYjMzQ7TDJUUF9WMyYjMzQ7LAogICAgJiMzNDtMMlRQX0VUSCYjMzQ7LAogICAgJiMzNDtMMlRQX0lQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bDJ0cF90dW5uZWxfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7bDJ0cF9ubF9jbWRfc2Vzc2lvbl9jcmVhdGUmIzM0OywKICAgICYjMzQ7bDJ0cF94bWl0X3NrYiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgY2FsY3VsYXRpb24gb2YgTDJUUCBwYWNrZXQgb3ZlcmhlYWQgYW5kIGhlYWRyb29tLCBjYWNoaW5nIHRoZSBMMyBvdmVyaGVhZCBpbiB0aGUgYGwydHBfdHVubmVsYCBzdHJ1Y3R1cmUgYW5kIHVzaW5nIGl0IHRvIGFjY3VyYXRlbHkgcmVxdWVzdCBoZWFkcm9vbSB2aWEgYHNrYl9jb3dfaGVhZGAgYW5kIHNldCBNVFUvbmVlZGVkX2hlYWRyb29tIGZvciB0aGUgZGV2aWNlLiBUaGVzZSBjaGFuZ2VzIHByaW1hcmlseSBhZmZlY3QgYnVmZmVyIHNpemUgY2FsY3VsYXRpb25zIGFuZCBoZWFkcm9vbSBhbGxvY2F0aW9uLiBJZiB0aGUgY2FsY3VsYXRpb25zIGFyZSBpbmNvcnJlY3QsIHRoZXkgY291bGQgbGVhZCB0byBvdXQtb2YtYm91bmRzIHdyaXRlcyAoaWYgaGVhZHJvb20gaXMgdG9vIHNtYWxsKSBvciBmdW5jdGlvbmFsIGlzc3VlcyAoaW5jb3JyZWN0IE1UVSksIGJvdGggb2Ygd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCB0ZXN0aW5nLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIG5vciBkb2VzIGl0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB0aGUgbmV0d29yayBvciB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIEwyVFAgaGVhZHJvb20gYW5kIG92ZXJoZWFkIGNhbGN1bGF0aW9ucywgbW9kaWZ5aW5nIE1UVSBhZGp1c3RtZW50IGFuZCBTS0IgaGVhZHJvb20gY2hlY2tzIGluIEwyVFAgY29yZSBhbmQgTDJUUCBFdGhlcm5ldCBwc2V1ZG93aXJlIGNvZGUuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBuZXR3b3JrIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIzOjM3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNGNlMGM2MzczYjNiYWI0ODE2ZjhjYTA0OWNlZmU0MzQ2Yzk3MDJmYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDggMjM6Mzc6MDggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2wydHAvbDJ0cF9jb3JlLmMgYi9uZXQvbDJ0cC9sMnRwX2NvcmUuY1xuaW5kZXggNDcxMmNjNDE4ODFhMy4uZjUyYmYzYjUzMjkwNyAxMDA2NDRcbi0tLSBhL25ldC9sMnRwL2wydHBfY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbDJ0cC9sMnRwX2NvcmUuY1xuQEAgLTEyMjcsMTggJiM0MzsxMjI3LDE2IEBAIHN0YXRpYyBpbnQgbDJ0cF94bWl0X2NvcmUoc3RydWN0IGwydHBfc2Vzc2lvbiAqc2Vzc2lvbiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zXG4gXHRzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbCA9IHNlc3Npb24tXHUwMDNldHVubmVsO1xuIFx0dW5zaWduZWQgaW50IGRhdGFfbGVuID0gc2tiLVx1MDAzZWxlbjtcbiBcdHN0cnVjdCBzb2NrICpzayA9IHR1bm5lbC1cdTAwM2Vzb2NrO1xuLVx0aW50IGhlYWRyb29tLCB1aGxlbiwgdWRwX2xlbjtcbiBcdGludCByZXQgPSBORVRfWE1JVF9TVUNDRVNTO1xuIFx0c3RydWN0IGluZXRfc29jayAqaW5ldDtcbiBcdHN0cnVjdCB1ZHBoZHIgKnVoO1xuJiM0MztcdGludCB1ZHBfbGVuO1xuIFxuIFx0LyogQ2hlY2sgdGhhdCB0aGVyZSYjMzk7cyBlbm91Z2ggaGVhZHJvb20gaW4gdGhlIHNrYiB0byBpbnNlcnQgSVAsXG4gXHQgKiBVRFAgYW5kIEwyVFAgaGVhZGVycy4gSWYgbm90IGVub3VnaCwgZXhwYW5kIGl0IHRvXG4gXHQgKiBtYWtlIHJvb20uIEFkanVzdCB0cnVlc2l6ZS5cbiBcdCAqL1xuLVx0dWhsZW4gPSAodHVubmVsLVx1MDAzZWVuY2FwID09IEwyVFBfRU5DQVBUWVBFX1VEUCkgPyBzaXplb2YoKnVoKSA6IDA7XG4tXHRoZWFkcm9vbSA9IE5FVF9TS0JfUEFEICYjNDM7IHNpemVvZihzdHJ1Y3QgaXBoZHIpICYjNDM7IHVobGVuICYjNDM7IHNlc3Npb24tXHUwMDNlaGRyX2xlbjtcbi1cdGlmIChza2JfY293X2hlYWQoc2tiLCBoZWFkcm9vbSkpIHtcbiYjNDM7XHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgbDJ0cF9zZXNzaW9uX3NrYl9oZWFkcm9vbShzZXNzaW9uLCB0dW5uZWwpKSkge1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0cmV0dXJuIE5FVF9YTUlUX0RST1A7XG4gXHR9XG5AQCAtMTI5MCw3ICYjNDM7MTI4OCw5IEBAIHN0YXRpYyBpbnQgbDJ0cF94bWl0X2NvcmUoc3RydWN0IGwydHBfc2Vzc2lvbiAqc2Vzc2lvbiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zXG4gXHRcdHVoID0gdWRwX2hkcihza2IpO1xuIFx0XHR1aC1cdTAwM2Vzb3VyY2UgPSBpbmV0LVx1MDAzZWluZXRfc3BvcnQ7XG4gXHRcdHVoLVx1MDAzZWRlc3QgPSBpbmV0LVx1MDAzZWluZXRfZHBvcnQ7XG4tXHRcdHVkcF9sZW4gPSB1aGxlbiAmIzQzOyBzZXNzaW9uLVx1MDAzZWhkcl9sZW4gJiM0MzsgZGF0YV9sZW47XG4mIzQzO1xuJiM0MztcdFx0dWRwX2xlbiA9IGwydHBfdHVubmVsX3VkcF9oZHJsZW4odHVubmVsKTtcbiYjNDM7XHRcdHVkcF9sZW4gJiM0Mzs9IHNlc3Npb24tXHUwMDNlaGRyX2xlbiAmIzQzOyBkYXRhX2xlbjtcbiBcdFx0aWYgKHVkcF9sZW4gXHUwMDNlIFUxNl9NQVgpIHtcbiBcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0XHRyZXQgPSBORVRfWE1JVF9EUk9QO1xuQEAgLTE2ODgsNiAmIzQzOzE2ODgsNyBAQCBpbnQgbDJ0cF90dW5uZWxfcmVnaXN0ZXIoc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwsIHN0cnVjdCBuZXQgKm5ldCxcbiBcdH1cbiBcbiBcdHNrLVx1MDAzZXNrX2FsbG9jYXRpb24gPSBHRlBfQVRPTUlDO1xuJiM0MztcdHR1bm5lbC1cdTAwM2VsM19vdmVyaGVhZCA9IGtlcm5lbF9zb2NrX2lwX292ZXJoZWFkKHNrKTtcbiBcdHJlbGVhc2Vfc29jayhzayk7XG4gXG4gXHRzb2NrX2hvbGQoc2spO1xuZGlmZiAtLWdpdCBhL25ldC9sMnRwL2wydHBfY29yZS5oIGIvbmV0L2wydHAvbDJ0cF9jb3JlLmhcbmluZGV4IGZmZDhjZWQzYTUxZmYuLjJjNDE4NzdiNmNlNTcgMTAwNjQ0XG4tLS0gYS9uZXQvbDJ0cC9sMnRwX2NvcmUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2wydHAvbDJ0cF9jb3JlLmhcbkBAIC0xNjcsNiAmIzQzOzE2Nyw3IEBAIHN0cnVjdCBsMnRwX3R1bm5lbCB7XG4gXHR1MzJcdFx0XHR0dW5uZWxfaWQ7XG4gXHR1MzJcdFx0XHRwZWVyX3R1bm5lbF9pZDtcbiBcdGludFx0XHRcdHZlcnNpb247XHQvKiAyPVx1MDAzZUwyVFB2MiwgMz1cdTAwM2VMMlRQdjMgKi9cbiYjNDM7XHRpbnRcdFx0XHRsM19vdmVyaGVhZDtcdC8qIElQIGhlYWRlciBvdmVyaGVhZCAqL1xuIFxuIFx0Y2hhclx0XHRcdG5hbWVbTDJUUF9UVU5ORUxfTkFNRV9NQVhdOyAvKiBmb3IgbG9nZ2luZyAqL1xuIFx0ZW51bSBsMnRwX2VuY2FwX3R5cGVcdGVuY2FwO1xuQEAgLTMzNCw2ICYjNDM7MzM1LDI1IEBAIHN0YXRpYyBpbmxpbmUgaW50IGwydHBfdjNfZW5zdXJlX29wdF9pbl9saW5lYXIoc3RydWN0IGwydHBfc2Vzc2lvbiAqc2Vzc2lvbiwgc3RyXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGwydHBfdHVubmVsX3VkcF9oZHJsZW4oc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gdHVubmVsLVx1MDAzZWVuY2FwID09IEwyVFBfRU5DQVBUWVBFX1VEUCA/XG4mIzQzO1x0XHRzaXplb2Yoc3RydWN0IHVkcGhkcikgOiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBsMnRwX3Nlc3Npb25fb3ZlcmhlYWQoc3RydWN0IGwydHBfc2Vzc2lvbiAqc2Vzc2lvbixcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGwydHBfdHVubmVsX3VkcF9oZHJsZW4odHVubmVsKSAmIzQzOyBzZXNzaW9uLVx1MDAzZWhkcl9sZW4gJiM0MztcbiYjNDM7XHRcdHR1bm5lbC1cdTAwM2VsM19vdmVyaGVhZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgbDJ0cF9zZXNzaW9uX3NrYl9oZWFkcm9vbShzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uLFxuJiM0MztcdFx0XHRcdFx0ICAgIHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIE5FVF9TS0JfUEFEICYjNDM7IGwydHBfc2Vzc2lvbl9vdmVyaGVhZChzZXNzaW9uLCB0dW5uZWwpO1xuJiM0Mzt9XG4mIzQzO1xuICNkZWZpbmUgTU9EVUxFX0FMSUFTX0wyVFBfUFdUWVBFKHR5cGUpIFxcXG4gXHRNT0RVTEVfQUxJQVMoXCYjMzQ7bmV0LWwydHAtdHlwZS1cJiMzNDsgX19zdHJpbmdpZnkodHlwZSkpXG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2wydHAvbDJ0cF9ldGguYyBiL25ldC9sMnRwL2wydHBfZXRoLmNcbmluZGV4IGE0OTU2ZWY5NTc0Y2MuLjY4N2NlMWM2ZGI5NDYgMTAwNjQ0XG4tLS0gYS9uZXQvbDJ0cC9sMnRwX2V0aC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbDJ0cC9sMnRwX2V0aC5jXG5AQCAtMTg4LDMxICYjNDM7MTg4LDE3IEBAIHN0YXRpYyB2b2lkIGwydHBfZXRoX2FkanVzdF9tdHUoc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwsXG4gXHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHVuc2lnbmVkIGludCBvdmVyaGVhZCA9IDA7XG4tXHR1MzIgbDNfb3ZlcmhlYWQgPSAwO1xuIFx0dTMyIG10dTtcbiBcbi1cdC8qIGlmIHRoZSBlbmNhcCBpcyBVRFAsIGFjY291bnQgZm9yIFVEUCBoZWFkZXIgc2l6ZSAqL1xuLVx0aWYgKHR1bm5lbC1cdTAwM2VlbmNhcCA9PSBMMlRQX0VOQ0FQVFlQRV9VRFApIHtcbi1cdFx0b3ZlcmhlYWQgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTtcbi1cdFx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSAmIzQzOz0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpO1xuLVx0fVxuLVxuLVx0bG9ja19zb2NrKHR1bm5lbC1cdTAwM2Vzb2NrKTtcbi1cdGwzX292ZXJoZWFkID0ga2VybmVsX3NvY2tfaXBfb3ZlcmhlYWQodHVubmVsLVx1MDAzZXNvY2spO1xuLVx0cmVsZWFzZV9zb2NrKHR1bm5lbC1cdTAwM2Vzb2NrKTtcbi1cbi1cdGlmIChsM19vdmVyaGVhZCA9PSAwKSB7XG4mIzQzO1x0aWYgKHR1bm5lbC1cdTAwM2VsM19vdmVyaGVhZCA9PSAwKSB7XG4gXHRcdC8qIEwzIE92ZXJoZWFkIGNvdWxkbiYjMzk7dCBiZSBpZGVudGlmaWVkLCB0aGlzIGNvdWxkIGJlXG4tXHRcdCAqIGJlY2F1c2UgdHVubmVsLVx1MDAzZXNvY2sgd2FzIE5VTEwgb3IgdGhlIHNvY2tldCYjMzk7c1xuLVx0XHQgKiBhZGRyZXNzIGZhbWlseSB3YXMgbm90IElQdjQgb3IgSVB2Nixcbi1cdFx0ICogZGV2IG10dSBzdGF5cyBhdCAxNTAwLlxuJiM0MztcdFx0ICogYmVjYXVzZSB0aGUgc29ja2V0JiMzOTtzIGFkZHJlc3MgZmFtaWx5IHdhcyBub3QgSVB2NFxuJiM0MztcdFx0ICogb3IgSVB2NiAtIGRldiBtdHUgc3RheXMgYXQgMTUwMC5cbiBcdFx0ICovXG4gXHRcdHJldHVybjtcbiBcdH1cbi1cdC8qIEFkanVzdCBNVFUsIGZhY3RvciBvdmVyaGVhZCAtIHVuZGVybGF5IEwzLCBvdmVybGF5IEwyIGhkclxuLVx0ICogVURQIG92ZXJoZWFkLCBpZiBhbnksIHdhcyBhbHJlYWR5IGZhY3RvcmVkIGluIGFib3ZlLlxuLVx0ICovXG4tXHRvdmVyaGVhZCAmIzQzOz0gc2Vzc2lvbi1cdTAwM2VoZHJfbGVuICYjNDM7IEVUSF9ITEVOICYjNDM7IGwzX292ZXJoZWFkO1xuJiM0MztcdC8qIENhbGN1bGF0ZSByZXF1aXJlZCBvdmVyaGVhZCAqL1xuJiM0MztcdG92ZXJoZWFkID0gRVRIX0hMRU4gJiM0MzsgbDJ0cF9zZXNzaW9uX292ZXJoZWFkKHNlc3Npb24sIHR1bm5lbCk7XG4gXG4gXHRtdHUgPSBsMnRwX3R1bm5lbF9kc3RfbXR1KHR1bm5lbCkgLSBvdmVyaGVhZDtcbiBcdGlmIChtdHUgXHUwMDNjIGRldi1cdTAwM2VtaW5fbXR1IHx8IG10dSBcdTAwM2UgZGV2LVx1MDAzZW1heF9tdHUpXG5AQCAtMjIwLDcgJiM0MzsyMDYsNyBAQCBzdGF0aWMgdm9pZCBsMnRwX2V0aF9hZGp1c3RfbXR1KHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsLFxuIFx0ZWxzZVxuIFx0XHRkZXYtXHUwMDNlbXR1ID0gbXR1O1xuIFxuLVx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSAmIzQzOz0gc2Vzc2lvbi1cdTAwM2VoZHJfbGVuO1xuJiM0MztcdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBsMnRwX3Nlc3Npb25fc2tiX2hlYWRyb29tKHNlc3Npb24sIHR1bm5lbCk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbDJ0cF9ldGhfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjM6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0wyVFAmIzM0OywKICAgICYjMzQ7TDJUUF9WMyYjMzQ7LAogICAgJiMzNDtMMlRQX0VUSCYjMzQ7LAogICAgJiMzNDtMMlRQX0lQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bDJ0cF90dW5uZWxfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7bDJ0cF9ubF9jbWRfc2Vzc2lvbl9jcmVhdGUmIzM0OywKICAgICYjMzQ7bDJ0cF94bWl0X3NrYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgTDJUUCBoZWFkcm9vbSBhbmQgb3ZlcmhlYWQgY2FsY3VsYXRpb25zLCBtb2RpZnlpbmcgTVRVIGFkanVzdG1lbnQgYW5kIFNLQiBoZWFkcm9vbSBjaGVja3MgaW4gTDJUUCBjb3JlIGFuZCBMMlRQIEV0aGVybmV0IHBzZXVkb3dpcmUgY29kZS4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0Y2UwYzYzNzNiM2JhYjQ4MTZmOGNhMDQ5Y2VmZTQzNDZjOTcwMmZhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgOCAyMzozNzowOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9sMnRwL2wydHBfY29yZS5jIGIvbmV0L2wydHAvbDJ0cF9jb3JlLmMKaW5kZXggNDcxMmNjNDE4ODFhMy4uZjUyYmYzYjUzMjkwNyAxMDA2NDQKLS0tIGEvbmV0L2wydHAvbDJ0cF9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2wydHAvbDJ0cF9jb3JlLmMKQEAgLTEyMjcsMTggJiM0MzsxMjI3LDE2IEBAIHN0YXRpYyBpbnQgbDJ0cF94bWl0X2NvcmUoc3RydWN0IGwydHBfc2Vzc2lvbiAqc2Vzc2lvbiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zCiAJc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwgPSBzZXNzaW9uLSZndDt0dW5uZWw7CiAJdW5zaWduZWQgaW50IGRhdGFfbGVuID0gc2tiLSZndDtsZW47CiAJc3RydWN0IHNvY2sgKnNrID0gdHVubmVsLSZndDtzb2NrOwotCWludCBoZWFkcm9vbSwgdWhsZW4sIHVkcF9sZW47CiAJaW50IHJldCA9IE5FVF9YTUlUX1NVQ0NFU1M7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldDsKIAlzdHJ1Y3QgdWRwaGRyICp1aDsKJiM0MzsJaW50IHVkcF9sZW47CiAKIAkvKiBDaGVjayB0aGF0IHRoZXJlJiMzOTtzIGVub3VnaCBoZWFkcm9vbSBpbiB0aGUgc2tiIHRvIGluc2VydCBJUCwKIAkgKiBVRFAgYW5kIEwyVFAgaGVhZGVycy4gSWYgbm90IGVub3VnaCwgZXhwYW5kIGl0IHRvCiAJICogbWFrZSByb29tLiBBZGp1c3QgdHJ1ZXNpemUuCiAJICovCi0JdWhsZW4gPSAodHVubmVsLSZndDtlbmNhcCA9PSBMMlRQX0VOQ0FQVFlQRV9VRFApID8gc2l6ZW9mKCp1aCkgOiAwOwotCWhlYWRyb29tID0gTkVUX1NLQl9QQUQgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcGhkcikgJiM0MzsgdWhsZW4gJiM0Mzsgc2Vzc2lvbi0mZ3Q7aGRyX2xlbjsKLQlpZiAoc2tiX2Nvd19oZWFkKHNrYiwgaGVhZHJvb20pKSB7CiYjNDM7CWlmIChza2JfY293X2hlYWQoc2tiLCBsMnRwX3Nlc3Npb25fc2tiX2hlYWRyb29tKHNlc3Npb24sIHR1bm5lbCkpKSB7CiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gTkVUX1hNSVRfRFJPUDsKIAl9CkBAIC0xMjkwLDcgJiM0MzsxMjg4LDkgQEAgc3RhdGljIGludCBsMnRwX3htaXRfY29yZShzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnMKIAkJdWggPSB1ZHBfaGRyKHNrYik7CiAJCXVoLSZndDtzb3VyY2UgPSBpbmV0LSZndDtpbmV0X3Nwb3J0OwogCQl1aC0mZ3Q7ZGVzdCA9IGluZXQtJmd0O2luZXRfZHBvcnQ7Ci0JCXVkcF9sZW4gPSB1aGxlbiAmIzQzOyBzZXNzaW9uLSZndDtoZHJfbGVuICYjNDM7IGRhdGFfbGVuOwomIzQzOwomIzQzOwkJdWRwX2xlbiA9IGwydHBfdHVubmVsX3VkcF9oZHJsZW4odHVubmVsKTsKJiM0MzsJCXVkcF9sZW4gJiM0Mzs9IHNlc3Npb24tJmd0O2hkcl9sZW4gJiM0MzsgZGF0YV9sZW47CiAJCWlmICh1ZHBfbGVuICZndDsgVTE2X01BWCkgewogCQkJa2ZyZWVfc2tiKHNrYik7CiAJCQlyZXQgPSBORVRfWE1JVF9EUk9QOwpAQCAtMTY4OCw2ICYjNDM7MTY4OCw3IEBAIGludCBsMnRwX3R1bm5lbF9yZWdpc3RlcihzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbCwgc3RydWN0IG5ldCAqbmV0LAogCX0KIAogCXNrLSZndDtza19hbGxvY2F0aW9uID0gR0ZQX0FUT01JQzsKJiM0MzsJdHVubmVsLSZndDtsM19vdmVyaGVhZCA9IGtlcm5lbF9zb2NrX2lwX292ZXJoZWFkKHNrKTsKIAlyZWxlYXNlX3NvY2soc2spOwogCiAJc29ja19ob2xkKHNrKTsKZGlmZiAtLWdpdCBhL25ldC9sMnRwL2wydHBfY29yZS5oIGIvbmV0L2wydHAvbDJ0cF9jb3JlLmgKaW5kZXggZmZkOGNlZDNhNTFmZi4uMmM0MTg3N2I2Y2U1NyAxMDA2NDQKLS0tIGEvbmV0L2wydHAvbDJ0cF9jb3JlLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2wydHAvbDJ0cF9jb3JlLmgKQEAgLTE2Nyw2ICYjNDM7MTY3LDcgQEAgc3RydWN0IGwydHBfdHVubmVsIHsKIAl1MzIJCQl0dW5uZWxfaWQ7CiAJdTMyCQkJcGVlcl90dW5uZWxfaWQ7CiAJaW50CQkJdmVyc2lvbjsJLyogMj0mZ3Q7TDJUUHYyLCAzPSZndDtMMlRQdjMgKi8KJiM0MzsJaW50CQkJbDNfb3ZlcmhlYWQ7CS8qIElQIGhlYWRlciBvdmVyaGVhZCAqLwogCiAJY2hhcgkJCW5hbWVbTDJUUF9UVU5ORUxfTkFNRV9NQVhdOyAvKiBmb3IgbG9nZ2luZyAqLwogCWVudW0gbDJ0cF9lbmNhcF90eXBlCWVuY2FwOwpAQCAtMzM0LDYgJiM0MzszMzUsMjUgQEAgc3RhdGljIGlubGluZSBpbnQgbDJ0cF92M19lbnN1cmVfb3B0X2luX2xpbmVhcihzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uLCBzdHIKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGwydHBfdHVubmVsX3VkcF9oZHJsZW4oc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwpCiYjNDM7ewomIzQzOwlyZXR1cm4gdHVubmVsLSZndDtlbmNhcCA9PSBMMlRQX0VOQ0FQVFlQRV9VRFAgPwomIzQzOwkJc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpIDogMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgbDJ0cF9zZXNzaW9uX292ZXJoZWFkKHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb24sCiYjNDM7CQkJCQlzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbCkKJiM0Mzt7CiYjNDM7CXJldHVybiBsMnRwX3R1bm5lbF91ZHBfaGRybGVuKHR1bm5lbCkgJiM0Mzsgc2Vzc2lvbi0mZ3Q7aGRyX2xlbiAmIzQzOwomIzQzOwkJdHVubmVsLSZndDtsM19vdmVyaGVhZDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgbDJ0cF9zZXNzaW9uX3NrYl9oZWFkcm9vbShzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uLAomIzQzOwkJCQkJICAgIHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsKQomIzQzO3sKJiM0MzsJcmV0dXJuIE5FVF9TS0JfUEFEICYjNDM7IGwydHBfc2Vzc2lvbl9vdmVyaGVhZChzZXNzaW9uLCB0dW5uZWwpOwomIzQzO30KJiM0MzsKICNkZWZpbmUgTU9EVUxFX0FMSUFTX0wyVFBfUFdUWVBFKHR5cGUpIFwKIAlNT0RVTEVfQUxJQVMoJiMzNDtuZXQtbDJ0cC10eXBlLSYjMzQ7IF9fc3RyaW5naWZ5KHR5cGUpKQogCmRpZmYgLS1naXQgYS9uZXQvbDJ0cC9sMnRwX2V0aC5jIGIvbmV0L2wydHAvbDJ0cF9ldGguYwppbmRleCBhNDk1NmVmOTU3NGNjLi42ODdjZTFjNmRiOTQ2IDEwMDY0NAotLS0gYS9uZXQvbDJ0cC9sMnRwX2V0aC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9sMnRwL2wydHBfZXRoLmMKQEAgLTE4OCwzMSAmIzQzOzE4OCwxNyBAQCBzdGF0aWMgdm9pZCBsMnRwX2V0aF9hZGp1c3RfbXR1KHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsLAogCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJdW5zaWduZWQgaW50IG92ZXJoZWFkID0gMDsKLQl1MzIgbDNfb3ZlcmhlYWQgPSAwOwogCXUzMiBtdHU7CiAKLQkvKiBpZiB0aGUgZW5jYXAgaXMgVURQLCBhY2NvdW50IGZvciBVRFAgaGVhZGVyIHNpemUgKi8KLQlpZiAodHVubmVsLSZndDtlbmNhcCA9PSBMMlRQX0VOQ0FQVFlQRV9VRFApIHsKLQkJb3ZlcmhlYWQgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKLQkJZGV2LSZndDtuZWVkZWRfaGVhZHJvb20gJiM0Mzs9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKLQl9Ci0KLQlsb2NrX3NvY2sodHVubmVsLSZndDtzb2NrKTsKLQlsM19vdmVyaGVhZCA9IGtlcm5lbF9zb2NrX2lwX292ZXJoZWFkKHR1bm5lbC0mZ3Q7c29jayk7Ci0JcmVsZWFzZV9zb2NrKHR1bm5lbC0mZ3Q7c29jayk7Ci0KLQlpZiAobDNfb3ZlcmhlYWQgPT0gMCkgewomIzQzOwlpZiAodHVubmVsLSZndDtsM19vdmVyaGVhZCA9PSAwKSB7CiAJCS8qIEwzIE92ZXJoZWFkIGNvdWxkbiYjMzk7dCBiZSBpZGVudGlmaWVkLCB0aGlzIGNvdWxkIGJlCi0JCSAqIGJlY2F1c2UgdHVubmVsLSZndDtzb2NrIHdhcyBOVUxMIG9yIHRoZSBzb2NrZXQmIzM5O3MKLQkJICogYWRkcmVzcyBmYW1pbHkgd2FzIG5vdCBJUHY0IG9yIElQdjYsCi0JCSAqIGRldiBtdHUgc3RheXMgYXQgMTUwMC4KJiM0MzsJCSAqIGJlY2F1c2UgdGhlIHNvY2tldCYjMzk7cyBhZGRyZXNzIGZhbWlseSB3YXMgbm90IElQdjQKJiM0MzsJCSAqIG9yIElQdjYgLSBkZXYgbXR1IHN0YXlzIGF0IDE1MDAuCiAJCSAqLwogCQlyZXR1cm47CiAJfQotCS8qIEFkanVzdCBNVFUsIGZhY3RvciBvdmVyaGVhZCAtIHVuZGVybGF5IEwzLCBvdmVybGF5IEwyIGhkcgotCSAqIFVEUCBvdmVyaGVhZCwgaWYgYW55LCB3YXMgYWxyZWFkeSBmYWN0b3JlZCBpbiBhYm92ZS4KLQkgKi8KLQlvdmVyaGVhZCAmIzQzOz0gc2Vzc2lvbi0mZ3Q7aGRyX2xlbiAmIzQzOyBFVEhfSExFTiAmIzQzOyBsM19vdmVyaGVhZDsKJiM0MzsJLyogQ2FsY3VsYXRlIHJlcXVpcmVkIG92ZXJoZWFkICovCiYjNDM7CW92ZXJoZWFkID0gRVRIX0hMRU4gJiM0MzsgbDJ0cF9zZXNzaW9uX292ZXJoZWFkKHNlc3Npb24sIHR1bm5lbCk7CiAKIAltdHUgPSBsMnRwX3R1bm5lbF9kc3RfbXR1KHR1bm5lbCkgLSBvdmVyaGVhZDsKIAlpZiAobXR1ICZsdDsgZGV2LSZndDttaW5fbXR1IHx8IG10dSAmZ3Q7IGRldi0mZ3Q7bWF4X210dSkKQEAgLTIyMCw3ICYjNDM7MjA2LDcgQEAgc3RhdGljIHZvaWQgbDJ0cF9ldGhfYWRqdXN0X210dShzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbCwKIAllbHNlCiAJCWRldi0mZ3Q7bXR1ID0gbXR1OwogCi0JZGV2LSZndDtuZWVkZWRfaGVhZHJvb20gJiM0Mzs9IHNlc3Npb24tJmd0O2hkcl9sZW47CiYjNDM7CWRldi0mZ3Q7bmVlZGVkX2hlYWRyb29tID0gbDJ0cF9zZXNzaW9uX3NrYl9oZWFkcm9vbShzZXNzaW9uLCB0dW5uZWwpOwogfQogCiBzdGF0aWMgaW50IGwydHBfZXRoX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzIxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTDJUUCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQmIzM5O3MgYSByZWZhY3RvcmluZyBlZmZvcnQgd2l0aGluIHRoZSBMMlRQIGNvZGUsIHNwZWNpZmljYWxseSBmb2N1c2VkIG9uIGhvdyBoZWFkcm9vbSBhbmQgb3ZlcmhlYWQgYXJlIGNhbGN1bGF0ZWQuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdG91Y2hpbmcgYG5ldC9sMnRwL2wydHBfY29yZS5jYCwgYGwydHBfY29yZS5oYCwgYW5kIGBsMnRwX2V0aC5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIHNjb3BlLiBUaGV5JiMzOTtyZSBpbnRyb2R1Y2luZyB0aGVzZSBuZXcgaGVscGVyczogYGwydHBfc2Vzc2lvbl9za2JfaGVhZHJvb21gLCBgbDJ0cF9zZXNzaW9uX292ZXJoZWFkYCwgYW5kIGBsMnRwX3R1bm5lbF91ZHBfaGRybGVuYC4gVGhhdCYjMzk7cyBhIHN0cm9uZyBpbmRpY2F0aW9uIG9mIGEgbW92ZSB0b3dhcmRzIG1vcmUgbW9kdWxhciBhbmQgcG90ZW50aWFsbHkgbW9yZSBhY2N1cmF0ZSBjYWxjdWxhdGlvbnMuIENhY2hpbmcgYGwzX292ZXJoZWFkYCBpbiBgc3RydWN0IGwydHBfdHVubmVsYCBkdXJpbmcgYGwydHBfdHVubmVsX3JlZ2lzdGVyYCBpcyBhIHNtYXJ0IG1vdmUg4oCTIHByZS1jYWxjdWxhdGluZyBhbmQgc3RvcmluZyBpdCB0byBhdm9pZCByZWR1bmRhbnQgY29tcHV0YXRpb25zIGxhdGVyIG9uIGlzIHNvbWV0aGluZyBJIHdvdWxkIGRvIHRvby4KClRoZSBtb2RpZmljYXRpb25zIHRvIGBsMnRwX2V0aF9hZGp1c3RfbXR1YCBhbmQgYGwydHBfeG1pdF9jb3JlYCBhcmUgd2hlcmUgdGhlIHJ1YmJlciBoaXRzIHRoZSByb2FkLiBUaGV5IGFyZSBjbGVhcmx5IGltcGxlbWVudGluZyB0aGVzZSBuZXcgZnVuY3Rpb25zLiBUaGUgYGwydHBfeG1pdF9jb3JlYCBjaGFuZ2UsIHNwZWNpZmljYWxseSB1c2luZyBgbDJ0cF9zZXNzaW9uX3NrYl9oZWFkcm9vbWAgZm9yIGBza2JfY293X2hlYWRgLCBpcyBpbnRlcmVzdGluZy4gVGhpcyBpbmRpY2F0ZXMgYSBmb2N1cyBvbiBtaW5pbWl6aW5nIG1lbW9yeSBjb3B5aW5nLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgcGVyZm9ybWFuY2UgaW4gYW55IG5ldHdvcmtpbmcgY29udGV4dC4KCkFscmlnaHQsIHRoZSBuZXh0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBxdWlja2x5IGRldGVybWluZSBpZiB0aGlzIGlzIHNvbWV0aGluZyB3b3J0aCBmdXp6aW5nLiBXZWxsLCBMMlRQIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLCBhbmQgaXQmIzM5O3MgYWJzb2x1dGVseSBhIHRhcmdldCB3b3J0aCBleHBsb3JpbmcuIExldCYjMzk7cyBzZWUuLi4gdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIGFyZSBgQ09ORklHX0wyVFBgLCBgQ09ORklHX0wyVFBfVjNgLCBhbmQgYENPTkZJR19MMlRQX0VUSGAsIHdoaWNoIEkgY2FuIGNoZWNrIHdpdGggYSBxdWljayBncmVwIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgYXR0YWNrIHN1cmZhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEwyVFAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbDJ0cC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9sMnRwL0tjb25maWctNS1cbm5ldC9sMnRwL0tjb25maWc6NjptZW51Y29uZmlnIEwyVFBcbm5ldC9sMnRwL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O0xheWVyIFR3byBUdW5uZWxpbmcgUHJvdG9jb2wgKEwyVFApXCYjMzQ7XG4tLVxubmV0L2wydHAvS2NvbmZpZy0zNS1cbm5ldC9sMnRwL0tjb25maWc6MzY6Y29uZmlnIEwyVFBfREVCVUdGU1xubmV0L2wydHAvS2NvbmZpZy0zNy1cdHRyaXN0YXRlIFwmIzM0O0wyVFAgZGVidWdmcyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2wydHAvS2NvbmZpZy00OC1cbm5ldC9sMnRwL0tjb25maWc6NDk6Y29uZmlnIEwyVFBfVjNcbm5ldC9sMnRwL0tjb25maWctNTAtXHRib29sIFwmIzM0O0wyVFB2MyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2wydHAvS2NvbmZpZy02OS1cbm5ldC9sMnRwL0tjb25maWc6NzA6Y29uZmlnIEwyVFBfSVBcbm5ldC9sMnRwL0tjb25maWctNzEtXHR0cmlzdGF0ZSBcJiMzNDtMMlRQIElQIGVuY2Fwc3VsYXRpb24gZm9yIEwyVFB2M1wmIzM0O1xuLS1cbm5ldC9sMnRwL0tjb25maWctODYtXG5uZXQvbDJ0cC9LY29uZmlnOjg3OmNvbmZpZyBMMlRQX0VUSFxubmV0L2wydHAvS2NvbmZpZy04OC1cdHRyaXN0YXRlIFwmIzM0O0wyVFAgZXRoZXJuZXQgcHNldWRvd2lyZSBzdXBwb3J0IGZvciBMMlRQdjNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Nzc0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBMMlRQIENvbmZpZ3VyYXRpb24gYW5kIEZ1bmN0aW9uIE1vZGlmaWNhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zOiBgTDJUUGAsIGBMMlRQX1YzYCwgYEwyVFBfSVBgLCBhbmQgYEwyVFBfRVRIYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWVuIGNoYW5nZWQsIHdoYXQgdGhlIGltcGFjdCBpcy4gVGhlIGxpc3RlZCBmdW5jdGlvbnMgYXJlIHdoZXJlIHRoZSBtb2RpZmljYXRpb25zIHNlZW0gdG8gcmVzaWRlLiBTcGVjaWZpY2FsbHksIEkgc2VlOiBgbDJ0cF94bWl0X2NvcmVgLCBgbDJ0cF90dW5uZWxfcmVnaXN0ZXJgLCBgbDJ0cF9ldGhfYWRqdXN0X210dWAsIGFuZCBgbDJ0cF9ldGhfY3JlYXRlYC4KCk5vdywgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgTDJUUCB3b3JrcywgYGwydHBfeG1pdF9jb3JlYCBpcyBsaWtlbHkgdGhlIGNvcmUgdHJhbnNtaXNzaW9uIGZ1bmN0aW9uLCBzbyB0aGF0JiMzOTtzIGRlZmluaXRlbHkgYSBrZXkgYXJlYSB0byBzY3J1dGluaXplLiBBbmQgYGwydHBfZXRoX2NyZWF0ZWAgYWxzbyBzb3VuZHMgbGlrZSBhIGNyaXRpY2FsIHBvaW50LiBUaGF0IG1pZ2h0IGhhdmUgdG8gZG8gd2l0aCBob3cgdGhlIEwyVFAgb3ZlciBFdGhlcm5ldCBpbnRlcmZhY2UgaXMgc2V0IHVwLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGZvY3VzaW5nIG9uIHRob3NlIHR3by4gVGhleSBsb29rIGxpa2UgdGhlIGJlc3Qgc3RhcnRpbmcgcG9pbnRzIHRvIGFzc2VzcyB0aGUgY2hhbmdlcyBhbmQgdGhlaXIgcmFtaWZpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsMnRwX3htaXRfY29yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9sMnRwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbDJ0cC9sMnRwX2NvcmUuYz0xMjA5PXN0YXRpYyBpbnQgbDJ0cF94bWl0X3F1ZXVlKHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZmxvd2kgKmZsKVxuLS1cbm5ldC9sMnRwL2wydHBfY29yZS5jLTEyMjQtXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYzoxMjI1OnN0YXRpYyBpbnQgbDJ0cF94bWl0X2NvcmUoc3RydWN0IGwydHBfc2Vzc2lvbiAqc2Vzc2lvbiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50ICpsZW4pXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xMjI2LXtcbi0tXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYz0xMzI4PWludCBsMnRwX3htaXRfc2tiKHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb24sIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTMzMi1cbm5ldC9sMnRwL2wydHBfY29yZS5jOjEzMzM6XHRyZXQgPSBsMnRwX3htaXRfY29yZShzZXNzaW9uLCBza2IsIFx1MDAyNmxlbik7XG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xMzM0LVx0aWYgKHJldCA9PSBORVRfWE1JVF9TVUNDRVNTKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ2MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBjb2RlIHNuaXBwZXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBMMlRQIFRyYW5zbWlzc2lvbiBQYXRoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgTDJUUCBwYWNrZXRzIGFyZSB0cmFuc21pdHRlZC4gSSYjMzk7dmUgbm90ZWQgdGhhdCBgbDJ0cF94bWl0X2NvcmVgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhhdCYjMzk7cyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZyDigJMgaXQgaW1wbGllcyB0aGlzIGZ1bmN0aW9uJiMzOTtzIHNjb3BlIGlzIGxpbWl0ZWQgdG8gdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gSXQmIzM5O3MgbGlrZWx5IGFuIGludGVybmFsIGhlbHBlciBmdW5jdGlvbi4gTm93LCB0aGUga2V5IGlzIHRoYXQgYGwydHBfeG1pdF9za2JgIGNhbGxzIGBsMnRwX3htaXRfY29yZWAuIFNvLCBgbDJ0cF94bWl0X3NrYmAgc2VlbXMgdG8gYmUgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHNlbmRpbmcgTDJUUCBkYXRhLCBhbmQgaXQmIzM5O3MgZGVsZWdhdGluZyB0aGUgYWN0dWFsIHdvcmsgdG8gdGhpcyBgbDJ0cF94bWl0X2NvcmVgIGZ1bmN0aW9uLiBNYWtlcyBzZW5zZTsgZ29vZCBzZXBhcmF0aW9uIG9mIGNvbmNlcm5zLgoKTmV4dCwgSSB0aGluayBpdCYjMzk7cyB3b3J0aCB0YWtpbmcgYSBjbG9zZXIgbG9vayBhdCBgbDJ0cF9ldGhfYWRqdXN0X210dWAgYW5kIGBsMnRwX2V0aF9jcmVhdGVgLiBUaG9zZSBzZWVtIGxpa2UgdGhleSYjMzk7cmUgcmVsYXRlZCB0byBFdGhlcm5ldCBzcGVjaWZpY2FsbHksIGdpdmVuIHRoZSBuYW1lLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgdHJhbnNtaXNzaW9uIHByb2Nlc3MuIFRoaXMgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBtYXBwaW5nIG91dCB0aGUgY3JpdGljYWwgZGF0YSBwYXRocyBhbmQgZnVuY3Rpb24gY2FsbHMgd2l0aGluIHRoaXMgcGFydGljdWxhciBMMlRQIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2wydHBfZXRoX2FkanVzdF9tdHUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbDJ0cC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2wydHAvbDJ0cF9ldGguYz0xNjY9c3RhdGljIHZvaWQgbDJ0cF9ldGhfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmFyZylcbi0tXG5uZXQvbDJ0cC9sMnRwX2V0aC5jLTE4NS1cbm5ldC9sMnRwL2wydHBfZXRoLmM6MTg2OnN0YXRpYyB2b2lkIGwydHBfZXRoX2FkanVzdF9tdHUoc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwsXG5uZXQvbDJ0cC9sMnRwX2V0aC5jLTE4Ny1cdFx0XHRcdHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb24sXG4tLVxubmV0L2wydHAvbDJ0cF9ldGguYz0yMTI9c3RhdGljIGludCBsMnRwX2V0aF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbCxcbi0tXG5uZXQvbDJ0cC9sMnRwX2V0aC5jLTI0OC1cdGRldi1cdTAwM2VtYXhfbXR1ID0gRVRIX01BWF9NVFU7XG5uZXQvbDJ0cC9sMnRwX2V0aC5jOjI0OTpcdGwydHBfZXRoX2FkanVzdF9tdHUodHVubmVsLCBzZXNzaW9uLCBkZXYpO1xubmV0L2wydHAvbDJ0cF9ldGguYy0yNTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA5OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6CgoqKkFuYWx5emluZyB0aGUgTDJUUC9FdGhlcm5ldCBNVFUgQWRqdXN0bWVudCoqCgpPa2F5LCBzbyBgbDJ0cF9ldGhfYWRqdXN0X210dWAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgc2NvcGUgYW5kIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgd2l0aGluIHRoZSBtb2R1bGUuIEdvb2QgdG8ga25vdy4gQW5kIGBsMnRwX2V0aF9jcmVhdGVgICpjYWxscyogaXQuIEhtbSwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gVGhlIE1UVSBhZGp1c3RtZW50IGlzIGhhcHBlbmluZyBkdXJpbmcgdGhlIGNyZWF0aW9uIG9mIGFuIEwyVFAvRXRoZXJuZXQgZW50aXR5LiBUaGF0IG1ha2VzIHNlbnNlLCBidXQgSSB3YW50IHRvIHVuZGVyc3RhbmQgKndoeSogdGhlIGFkanVzdG1lbnQgaXMgbmVlZGVkLCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBMMlRQIGFyY2hpdGVjdHVyZS4gTXkgbmV4dCBzdGVwIGlzIGNsZWFyIC0gSSBuZWVkIHRvIGp1bXAgaW50byBgbDJ0cF9ldGhfY3JlYXRlYCBhbmQgc2VlIGV4YWN0bHkgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoaW4gdGhhdCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bDJ0cF9ldGhfY3JlYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2wydHAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9sMnRwL2wydHBfZXRoLmM9MTg2PXN0YXRpYyB2b2lkIGwydHBfZXRoX2FkanVzdF9tdHUoc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwsXG4tLVxubmV0L2wydHAvbDJ0cF9ldGguYy0yMTEtXG5uZXQvbDJ0cC9sMnRwX2V0aC5jOjIxMjpzdGF0aWMgaW50IGwydHBfZXRoX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsLFxubmV0L2wydHAvbDJ0cF9ldGguYy0yMTMtXHRcdFx0ICAgdTMyIHNlc3Npb25faWQsIHUzMiBwZWVyX3Nlc3Npb25faWQsXG4tLVxubmV0L2wydHAvbDJ0cF9ldGguYz0zMDU9c3RhdGljIGNvbnN0IHN0cnVjdCBsMnRwX25sX2NtZF9vcHMgbDJ0cF9ldGhfbmxfY21kX29wcyA9IHtcbm5ldC9sMnRwL2wydHBfZXRoLmM6MzA2Olx0LnNlc3Npb25fY3JlYXRlXHQ9IGwydHBfZXRoX2NyZWF0ZSxcbm5ldC9sMnRwL2wydHBfZXRoLmMtMzA3LVx0LnNlc3Npb25fZGVsZXRlXHQ9IGwydHBfc2Vzc2lvbl9kZWxldGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIzOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2MTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIGdpdmVuIG15IGV4cGVydGlzZToKCioqRGlzc2VjdGluZyB0aGUgTDJUUCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbDJ0cF9ldGhfY3JlYXRlYCBmdW5jdGlvbi4gSXQmIzM5O3MgZGVjbGFyZWQgYXMgYHN0YXRpY2AsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGludGVybmFsIHRvIHRoaXMgcGFydGljdWxhciBzb3VyY2UgZmlsZS4gVGhhdCYjMzk7cyBmaW5lLCBub3RoaW5nIGluaGVyZW50bHkgd3Jvbmcgd2l0aCB0aGF0LiBCdXQgdGhlbiBJIHNlZSBpdCYjMzk7cyBhbHNvIGEgY2FsbGJhY2sgZm9yIHRoZSBgc2Vzc2lvbl9jcmVhdGVgIG9wZXJhdGlvbiB3aXRoaW4gYGwydHBfbmxfY21kX29wc2AuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGJlY2F1c2UgaXQgbWVhbnMgdGhpcyBsb2NhbCBmdW5jdGlvbiBpcyB0aGUgb25lIGhhbmRsaW5nIHRoZSBjcmVhdGlvbiBvZiBhIHNlc3Npb24gZnJvbSBhIG5ldGxpbmsgY29tbWFuZC4gVGhpcyBtaWdodCBiZSB3aGVyZSB0aGUgYWN0dWFsIEV0aGVybmV0IGludGVyZmFjZSBpcyBzZXQgdXAuIE9rYXksIHRoYXQgbWFrZXMgc2Vuc2UuCgpXYWl0IGEgbWludXRlLCBJIHNlZSB0aGF0IGBsMnRwX3R1bm5lbF9yZWdpc3RlcmAgaXMgZXhwb3J0ZWQuIFRoYXQmIzM5O3MgdGhlIHJlYWwga2V5IHRvIHRoaXMgd2hvbGUgcHV6emxlLiBXZSBjYW4gcmVnaXN0ZXIgbmV3IHR1bm5lbHMgdG8gdGhlIGludGVyZmFjZSB0aHJvdWdoIHRoaXMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2wydHBfdHVubmVsX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2wydHAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9sMnRwL2wydHBfY29yZS5jPTE2MTM9c3RhdGljIGludCBsMnRwX3ZhbGlkYXRlX3NvY2tldChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xNjQyLVxubmV0L2wydHAvbDJ0cF9jb3JlLmM6MTY0MzppbnQgbDJ0cF90dW5uZWxfcmVnaXN0ZXIoc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwsIHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9sMnRwL2wydHBfY29yZS5jLTE2NDQtXHRcdFx0IHN0cnVjdCBsMnRwX3R1bm5lbF9jZmcgKmNmZylcbi0tXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xNzIwLX1cbm5ldC9sMnRwL2wydHBfY29yZS5jOjE3MjE6RVhQT1JUX1NZTUJPTF9HUEwobDJ0cF90dW5uZWxfcmVnaXN0ZXIpO1xubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTcyMi1cbi0tXG5uZXQvbDJ0cC9sMnRwX2NvcmUuaD0yMzY9aW50IGwydHBfdHVubmVsX2NyZWF0ZShpbnQgZmQsIGludCB2ZXJzaW9uLCB1MzIgdHVubmVsX2lkLFxuLS1cbm5ldC9sMnRwL2wydHBfY29yZS5oLTIzOC1cdFx0ICAgICAgIHN0cnVjdCBsMnRwX3R1bm5lbCAqKnR1bm5lbHApO1xubmV0L2wydHAvbDJ0cF9jb3JlLmg6MjM5OmludCBsMnRwX3R1bm5lbF9yZWdpc3RlcihzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbCwgc3RydWN0IG5ldCAqbmV0LFxubmV0L2wydHAvbDJ0cF9jb3JlLmgtMjQwLVx0XHRcdCBzdHJ1Y3QgbDJ0cF90dW5uZWxfY2ZnICpjZmcpO1xuLS1cbm5ldC9sMnRwL2wydHBfbmV0bGluay5jPTE4NT1zdGF0aWMgaW50IGwydHBfbmxfY21kX3R1bm5lbF9jcmVhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYy0yNDUtXHRyZWZjb3VudF9pbmMoXHUwMDI2dHVubmVsLVx1MDAzZXJlZl9jb3VudCk7XG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYzoyNDY6XHRyZXQgPSBsMnRwX3R1bm5lbF9yZWdpc3Rlcih0dW5uZWwsIG5ldCwgXHUwMDI2Y2ZnKTtcbm5ldC9sMnRwL2wydHBfbmV0bGluay5jLTI0Ny1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5uZXQvbDJ0cC9sMnRwX3BwcC5jPTYyNz1zdGF0aWMgc3RydWN0IGwydHBfdHVubmVsICpwcHBvbDJ0cF90dW5uZWxfZ2V0KHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTY0Ny1cbm5ldC9sMnRwL2wydHBfcHBwLmM6NjQ4Olx0XHRcdC8qIFByZXZlbnQgbDJ0cF90dW5uZWxfcmVnaXN0ZXIoKSBmcm9tIHRyeWluZyB0byBzZXQgdXBcbm5ldC9sMnRwL2wydHBfcHBwLmMtNjQ5LVx0XHRcdCAqIGEga2VybmVsIHNvY2tldC5cbi0tXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTY2Mi1cdFx0XHRyZWZjb3VudF9pbmMoXHUwMDI2dHVubmVsLVx1MDAzZXJlZl9jb3VudCk7XG5uZXQvbDJ0cC9sMnRwX3BwcC5jOjY2MzpcdFx0XHRlcnJvciA9IGwydHBfdHVubmVsX3JlZ2lzdGVyKHR1bm5lbCwgbmV0LCBcdTAwMjZ0Y2ZnKTtcbm5ldC9sMnRwL2wydHBfcHBwLmMtNjY0LVx0XHRcdGlmIChlcnJvciBcdTAwM2MgMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjQ0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24sIGdpdmVuIG15IGV4cGVydGlzZToKCioqTDJUUCBNb2R1bGUgRm9jdXMgJmFtcDsgS2V5IEV4cG9ydCoqCgpBbHJpZ2h0LCBsb29raW5nIGF0IHRoaXMgY29kZSwgaXQgc2VlbXMgbGlrZSB3ZSYjMzk7dmUgemVyb2VkIGluIG9uIHRoZSBgbDJ0cF90dW5uZWxfcmVnaXN0ZXJgIGZ1bmN0aW9uIGFzIGEga2V5IGVsZW1lbnQuIFRoYXQmIzM5O3MgYSBzb2xpZCBjaG9pY2UgZm9yIGEgZm9jdXMgc3ltYm9sIOKAkyBpdCBsaWtlbHkgcmVwcmVzZW50cyB0aGUgY29yZSBtZWNoYW5pc20gZm9yIGVzdGFibGlzaGluZyBhbmQgbWFuYWdpbmcgTDJUUCB0dW5uZWwgaW5zdGFuY2VzIHdpdGhpbiB0aGUgc3lzdGVtLiBHb29kLiBXZSB1bmRlcnN0YW5kIHRoZSBzaWduaWZpY2FuY2Ugb2YgdGhpcy4KCkFuZCwgb2YgY291cnNlLCB0aGUgYGwydHBfeG1pdF9za2JgIGZ1bmN0aW9uIGlzIGV4cG9zZWQuIE1ha2VzIHNlbnNlLiBUaGF0JiMzOTtzIGFic29sdXRlbHkgY3JpdGljYWwuIEV4cG9ydGluZyB0aGlzIGluZGljYXRlcyBpdHMgaW1wb3J0YW5jZSBpbiB0aGUgYnJvYWRlciBuZXR3b3JraW5nIGFyY2hpdGVjdHVyZS4gSXQmIzM5O3MgbGlrZWx5IHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgdHJhbnNtaXR0aW5nIFNvY2tldCBCdWZmZXIgKFNLQikgZGF0YSBhY3Jvc3MgdGhlIEwyVFAgdHVubmVsIGludGVyZmFjZS4gVGhpcyBsaWtlbHkgZW5hYmxlcyBlbmNhcHN1bGF0aW9uIG9yIGRlY2Fwc3VsYXRpb24uIFRoaXMgbWVhbnMgaXQmIzM5O3MgYSB2aXRhbCBwYXJ0IG9mIHRoZSBkYXRhIGZsb3cgYW5kIHdpbGwsIHRoZXJlZm9yZSwgYmUgaGlnaGx5IHJlbGV2YW50IHRvIGFueSBhbmFseXNpcyBvZiBMMlRQIHBlcmZvcm1hbmNlLCBkZWJ1Z2dpbmcsIG9yIG9wdGltaXphdGlvbiBlZmZvcnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsMnRwX3htaXRfc2tiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2wydHAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9sMnRwL2wydHBfY29yZS5jPTEyMjU9c3RhdGljIGludCBsMnRwX3htaXRfY29yZShzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgKmxlbilcbi0tXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xMzI3LSAqL1xubmV0L2wydHAvbDJ0cF9jb3JlLmM6MTMyODppbnQgbDJ0cF94bWl0X3NrYihzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTMyOS17XG4tLVxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTM0NC19XG5uZXQvbDJ0cC9sMnRwX2NvcmUuYzoxMzQ1OkVYUE9SVF9TWU1CT0xfR1BMKGwydHBfeG1pdF9za2IpO1xubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTM0Ni1cbi0tXG5uZXQvbDJ0cC9sMnRwX2NvcmUuaD0yNjE9dm9pZCBsMnRwX3Nlc3Npb25fc2V0X2hlYWRlcl9sZW4oc3RydWN0IGwydHBfc2Vzc2lvbiAqc2Vzc2lvbiwgaW50IHZlcnNpb24sXG5uZXQvbDJ0cC9sMnRwX2NvcmUuaC0yNjItXHRcdFx0XHQgZW51bSBsMnRwX2VuY2FwX3R5cGUgZW5jYXApO1xubmV0L2wydHAvbDJ0cF9jb3JlLmg6MjYzOmludCBsMnRwX3htaXRfc2tiKHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb24sIHN0cnVjdCBza19idWZmICpza2IpO1xubmV0L2wydHAvbDJ0cF9jb3JlLmgtMjY0LVxuLS1cbm5ldC9sMnRwL2wydHBfZXRoLmM9NzA9c3RhdGljIG5ldGRldl90eF90IGwydHBfZXRoX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2wydHAvbDJ0cF9ldGguYy03NC1cdHVuc2lnbmVkIGludCBsZW4gPSBza2ItXHUwMDNlbGVuO1xubmV0L2wydHAvbDJ0cF9ldGguYzo3NTpcdGludCByZXQgPSBsMnRwX3htaXRfc2tiKHNlc3Npb24sIHNrYik7XG5uZXQvbDJ0cC9sMnRwX2V0aC5jLTc2LVxuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmM9MjUwPXN0YXRpYyBpbnQgcHBwb2wydHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLFxuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmMtMzAyLVx0bG9jYWxfYmhfZGlzYWJsZSgpO1xubmV0L2wydHAvbDJ0cF9wcHAuYzozMDM6XHRsMnRwX3htaXRfc2tiKHNlc3Npb24sIHNrYik7XG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTMwNC1cdGxvY2FsX2JoX2VuYWJsZSgpO1xuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmM9MzMwPXN0YXRpYyBpbnQgcHBwb2wydHBfeG1pdChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2wydHAvbDJ0cF9wcHAuYy0zNjEtXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG5uZXQvbDJ0cC9sMnRwX3BwcC5jOjM2MjpcdGwydHBfeG1pdF9za2Ioc2Vzc2lvbiwgc2tiKTtcbm5ldC9sMnRwL2wydHBfcHBwLmMtMzYzLVx0bG9jYWxfYmhfZW5hYmxlKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIzOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3MTIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJhY2luZyB0aGUgTmV0d29yayBQYXRoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgTDJUUCBwYWNrZXRzIGFyZSB0cmFuc21pdHRlZC4gSSBzZWUgYGwydHBfeG1pdF9za2JgIGlzIGFuIGV4cG9ydGVkIHN5bWJvbDsgdGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEl0IGNhbGxzIGBsMnRwX3htaXRfY29yZWAsIHNvIHRoYXQmIzM5O3MgdGhlIGNvcmUgdHJhbnNtaXNzaW9uIGxvZ2ljLiBOb3csIEkgc2VlIHRoaXMgZnVuY3Rpb24gYGwydHBfZXRoX2NyZWF0ZWAuIEl0JiMzOTtzIG1hcmtlZCBhcyBzdGF0aWMsIG1lYW5pbmcgaXQmIzM5O3Mgb25seSB2aXNpYmxlIHdpdGhpbiBpdHMgY29tcGlsYXRpb24gdW5pdCwgYnV0IHdhaXQuLi4gSSByZWNvZ25pemUgaXQ7IEl0JiMzOTtzIGNhbGxlZCBieSBgbDJ0cF9ubF9jbWRfb3BzLnNlc3Npb25fY3JlYXRlYCwgd2hpY2ggc2VlbXMgaW1wb3J0YW50LiBMZXQgbWUgY3Jvc3MtcmVmZXJlbmNlLCB0aGUgbmV0bGluayBjb21tYW5kIGFzc29jaWF0ZWQgd2l0aCBzZXNzaW9uIGNyZWF0aW9uIGlzIGBMMlRQX0NNRF9TRVNTSU9OX0NSRUFURWAuCgpPa2F5LCBJJiMzOTt2ZSBnb3QgaXQuIFRoZSBmdW5jdGlvbiBgbDJ0cF9ubF9jbWRfc2Vzc2lvbl9jcmVhdGVgIGhhbmRsZXMgdGhhdCBzcGVjaWZpYyBOZXRsaW5rIGNvbW1hbmQuIEFuZCAqdGhhdCogZnVuY3Rpb24sIHNwZWNpZmljYWxseSwgY2FsbHMgYGwydHBfZXRoX2NyZWF0ZWAgaWYgdGhlIHR1bm5lbCB0eXBlIGlzIGBMMlRQX1BXVFlQRV9FVEhgLiBPa2F5LCBzbyBgbDJ0cF9ldGhfY3JlYXRlYCBoYXMgYSBzcGVjaWZpYyBqb2IgaW4gZXRoZXJuZXQgdHVubmVsIHNldHVwLiBBaCwgYW5kIGp1c3QgdG8gY29uZmlybSwgYGwydHBfZXRoX2NyZWF0ZWAgaXMgYWN0dWFsbHkgZGVmaW5lZCBpbiBgbDJ0cF9ldGguY2AuCgpSaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzZXNzaW9uIGNyZWF0aW9uIHByb2Nlc3MgaW4gbW9yZSBkZXRhaWwuIExldCYjMzk7cyBkaWcgaW50byBgbDJ0cF9ubF9jbWRfc2Vzc2lvbl9jcmVhdGVgIHRvIHNlZSB3aGF0JiMzOTtzIHJlYWxseSBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2wydHBfbmxfY21kX3Nlc3Npb25fY3JlYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2wydHAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9sMnRwL2wydHBfbmV0bGluay5jPTQ5OT1zdGF0aWMgaW50IGwydHBfbmxfY21kX3R1bm5lbF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYy01MjctXG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYzo1Mjg6c3RhdGljIGludCBsMnRwX25sX2NtZF9zZXNzaW9uX2NyZWF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmMtNTI5LXtcbi0tXG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYz05MzU9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBsMnRwX25sX29wc1tdID0ge1xuLS1cbm5ldC9sMnRwL2wydHBfbmV0bGluay5jLTk2OS1cdFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmM6OTcwOlx0XHQuZG9pdCA9IGwydHBfbmxfY21kX3Nlc3Npb25fY3JlYXRlLFxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmMtOTcxLVx0XHQuZmxhZ3MgPSBHRU5MX1VOU19BRE1JTl9QRVJNLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTM5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdCBoZXJlLgoKKipBbmFseXppbmcgTDJUUCBNb2R1bGUgRm9jdXMgUG9pbnRzKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBMMlRQIGNvZGUsIGFuZCBpbW1lZGlhdGVseSB0d28gZnVuY3Rpb24gbmFtZXMganVtcCBvdXQgYXMgZ29vZCBmb2N1cyBwb2ludHMgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gU3BlY2lmaWNhbGx5LCBgbDJ0cF9ubF9jbWRfc2Vzc2lvbl9jcmVhdGVgIGFuZCBgbDJ0cF90dW5uZWxfcmVnaXN0ZXJgLiBUaG9zZSBzZWVtIGxpa2Uga2V5IGZ1bmN0aW9ucyBpbiB0aGUgc2V0dXAgYW5kIG1hbmFnZW1lbnQgb2YgdGhlc2UgdHVubmVscy4KCk5vdywgZ2xhbmNpbmcgYXQgdGhlIGNvbmZpZ3VyYXRpb25zLCBgTDJUUGAsIGBMMlRQX1YzYCwgYW5kIGBMMlRQX0VUSGAgYXJlIHRoZSBvbmVzIHRoYXQgc3RhbmQgb3V0IGFzIGltcG9ydGFudCBjb250ZXh0LCBhcyBJIHdvdWxkIGV4cGVjdC4KCkxldCBtZSB6ZXJvIGluIG9uIGBsMnRwX2V0aF9hZGp1c3RfbXR1YCB0byBzZWUgd2hlcmUgaXQgZ2V0cyBpbnZva2VkLiBBaCwgaXQgaXMgY2FsbGVkIHdpdGhpbiBgbDJ0cF9ldGhfY3JlYXRlYCwgd2hpY2ggc2VlbXMgbG9naWNhbCBnaXZlbiBpdHMgbmFtZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiBpdCYjMzk7cyBjYWxsZWQgYW55d2hlcmUgZWxzZS4gSXQgaXMgaW1wb3J0YW50IHRvIGtub3cgaWYgc29tZXRoaW5nIHRoYXQgc2VlbXMgc3BlY2lmaWMsIGlzIG1vcmUgZ2VuZXJhbCwgYXMgdGhhdCB3aWxsIGdpdmUgbWUgY2x1ZXMgYWJvdXQgdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUgbW9kdWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsMnRwX2V0aF9hZGp1c3RfbXR1JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2wydHAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9sMnRwL2wydHBfZXRoLmM9MTY2PXN0YXRpYyB2b2lkIGwydHBfZXRoX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICphcmcpXG4tLVxubmV0L2wydHAvbDJ0cF9ldGguYy0xODUtXG5uZXQvbDJ0cC9sMnRwX2V0aC5jOjE4NjpzdGF0aWMgdm9pZCBsMnRwX2V0aF9hZGp1c3RfbXR1KHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsLFxubmV0L2wydHAvbDJ0cF9ldGguYy0xODctXHRcdFx0XHRzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uLFxuLS1cbm5ldC9sMnRwL2wydHBfZXRoLmM9MjEyPXN0YXRpYyBpbnQgbDJ0cF9ldGhfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwsXG4tLVxubmV0L2wydHAvbDJ0cF9ldGguYy0yNDgtXHRkZXYtXHUwMDNlbWF4X210dSA9IEVUSF9NQVhfTVRVO1xubmV0L2wydHAvbDJ0cF9ldGguYzoyNDk6XHRsMnRwX2V0aF9hZGp1c3RfbXR1KHR1bm5lbCwgc2Vzc2lvbiwgZGV2KTtcbm5ldC9sMnRwL2wydHBfZXRoLmMtMjUwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE4NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEwyVFAgRXRoZXJuZXQgQ3JlYXRpb24gUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhlIEV0aGVybmV0IEwyVFAgY3JlYXRpb24gcHJvY2Vzcy4gSXQgbG9va3MgbGlrZSBgbDJ0cF9ldGhfY3JlYXRlYCBpcyB0aGUgb25seSBmdW5jdGlvbiB0aGF0IGNhbGxzIHRoZSByZWxldmFudCBjb2RlLiBBbmQgdGhhdCBmdW5jdGlvbiwgaW4gdHVybiwgaXMgaW52b2tlZCBieSBgbDJ0cF9ubF9jbWRfc2Vzc2lvbl9jcmVhdGVgLiBUaGVyZWZvcmUsIGBsMnRwX25sX2NtZF9zZXNzaW9uX2NyZWF0ZWAgc2VlbXMgbGlrZSB0aGUga2V5IHBvaW50IHRvIHN0YXJ0IGludmVzdGlnYXRpbmcuIEl0JiMzOTtzIHRoZSBjZW50cmFsIGNvbW1hbmQgZm9yIEV0aGVybmV0IEwyVFAgc2Vzc2lvbiBzZXR1cC4KCk5vdywgYXMgZm9yIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucywgSSYjMzk7bSB0aGlua2luZyBhYm91dDogYEwyVFBgLCBgTDJUUF9WM2AsIGBMMlRQX0VUSGAsIGFuZCBwb3NzaWJseSBgTDJUUF9JUGAuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgYG5ldC9sMnRwL0tjb25maWdgIGZpbGUsIHBhcnRpY3VsYXJseSBmb2N1c2luZyBvbiBgTDJUUF9FVEhgLCB0byBzZWUgaWYgaXRzIGFjdGl2YXRpb24gaGluZ2VzIG9uIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbnMuIFRoaXMgd2lsbCBwcm92aWRlIGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBwcmUtcmVxdWlzaXRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEwyVFBfRVRIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2wydHAvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbDJ0cC9LY29uZmlnPTcwPWNvbmZpZyBMMlRQX0lQXG4tLVxubmV0L2wydHAvS2NvbmZpZy04Ni1cbm5ldC9sMnRwL0tjb25maWc6ODc6Y29uZmlnIEwyVFBfRVRIXG5uZXQvbDJ0cC9LY29uZmlnLTg4LVx0dHJpc3RhdGUgXCYjMzQ7TDJUUCBldGhlcm5ldCBwc2V1ZG93aXJlIHN1cHBvcnQgZm9yIEwyVFB2M1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY1NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGBuZXQvbDJ0cC9LY29uZmlnYCBmaWxlIGFuZCB0aGUgYEwyVFBfRVRIYCBjb25maWd1cmF0aW9uIG9wdGlvbjoKCioqRGl2aW5nIGludG8gdGhlIEwyVFAgS2NvbmZpZyoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgbmV0L2wydHAvS2NvbmZpZ2AgZmlsZSwgcGFydGljdWxhcmx5IGFyb3VuZCB0aGUgYEwyVFBfRVRIYCBvcHRpb24uIEkga25vdyB0aGlzIGZpbGUgaXMgY3J1Y2lhbCBmb3IgY29uZmlndXJpbmcgdGhlIEwyVFAga2VybmVsIG1vZHVsZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgRXRoZXJuZXQtc3BlY2lmaWMgTDJUUCBmdW5jdGlvbmFsaXR5IGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBhdCBwbGF5LiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIHRoZSBkZXBlbmRlbmNpZXMsIHdoaWNoIG90aGVyIGZlYXR1cmVzIG9yIG1vZHVsZXMgdGhpcyBzZXR0aW5nIHJlbGllcyBvbiBvciB3aGljaCBvbmVzIHJlbHkgb24gaXQuIEkgYWxzbyBuZWVkIHRvIHVuZGVyc3RhbmQgYW55IGRlZmF1bHQgc2V0dGluZ3Mgb3IgZGVzY3JpcHRpb25zIHByb3ZpZGVkIGluIHRoZSBjb25maWd1cmF0aW9uLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZSBMMlRQIGltcGxlbWVudGF0aW9uLCBpdHMgY29ubmVjdGlvbiB0byB0aGUgb3ZlcmFsbCBuZXR3b3JrIHN0YWNrLCBhbmQgaG93IGBMMlRQX0VUSGAgZml0cyBpbnRvIHRoYXQgYXJjaGl0ZWN0dXJlLiBBcmUgdGhlcmUgYW55IHNwZWNpZmljIGRyaXZlcnMgb3IgaGFyZHdhcmUgcGxhdGZvcm1zIG1lbnRpb25lZCBpbiByZWxhdGlvbiB0byBFdGhlcm5ldCBzdXBwb3J0PyBUaGlzIGlzIG9mdGVuIHdoZXJlIHlvdSBmaW5kIGNsdWVzIGFib3V0IHRoZSBpbnRlbmRlZCB1c2UgY2FzZXMgYW5kIHBvdGVudGlhbCBsaW1pdGF0aW9ucy4gSSYjMzk7bSBsb29raW5nIGZvciBjbHVlcyBhYm91dCBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MsIHRvby4gQXJlIHRoZXJlIGFueSB3YXJuaW5ncywgc3VnZ2VzdGlvbnMsIG9yIGNvbW1lbnRzIGFib3V0IHNwZWNpZmljIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zPyBUaGlzIGFuYWx5c2lzIGlzIGltcG9ydGFudCBmb3IgYSBjb21wbGV0ZSBwaWN0dXJlLCBhcyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhbGwgdGhlIGZhY3RvcnMgaW52b2x2ZWQgaW4gZWZmZWN0aXZlbHkgY29uZmlndXJpbmcgYW5kIGRlcGxveWluZyBMMlRQIG92ZXIgRXRoZXJuZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2wydHAvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODA6XHRcdCAgd2hlbiBVRFAgZW5jYXBzdWxhdGlvbiBpcyBub3QgcmVxdWlyZWQuIFdoZW4gTDJUUCBpcyBjYXJyaWVkXG4gIDgxOlx0XHQgIGluIElQIHBhY2tldHMsIGl0IHVzZWQgSVAgcHJvdG9jb2wgbnVtYmVyIDExNSwgc28gdGhpcyBwb3J0XG4gIDgyOlx0XHQgIG11c3QgYmUgZW5hYmxlZCBpbiBmaXJld2FsbHMuXG4gIDgzOlx0XG4gIDg0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcbiAgODU6XHRcdCAgd2lsbCBiZSBjYWxsZWQgbDJ0cF9pcC5cbiAgODY6XHRcbiAgODc6XHRjb25maWcgTDJUUF9FVEhcbiAgODg6XHRcdHRyaXN0YXRlIFwmIzM0O0wyVFAgZXRoZXJuZXQgcHNldWRvd2lyZSBzdXBwb3J0IGZvciBMMlRQdjNcJiMzNDtcbiAgODk6XHRcdGRlcGVuZHMgb24gTDJUUF9WM1xuICA5MDpcdFx0aGVscFxuICA5MTpcdFx0ICBTdXBwb3J0IGZvciBjYXJyeWluZyByYXcgZXRoZXJuZXQgZnJhbWVzIG92ZXIgTDJUUHYzLlxuICA5MjpcdFxuICA5MzpcdFx0ICBGcm9tIFJGQyA0NzE5IFx1MDAzY2h0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzQ3MTkudHh0XHUwMDNlLlxuICA5NDpcdFxuICA5NTpcdFx0ICBUaGUgTGF5ZXIgMiBUdW5uZWxpbmcgUHJvdG9jb2wsIFZlcnNpb24gMyAoTDJUUHYzKSBjYW4gYmVcbiAgOTY6XHRcdCAgdXNlZCBhcyBhIGNvbnRyb2wgcHJvdG9jb2wgYW5kIGZvciBkYXRhIGVuY2Fwc3VsYXRpb24gdG8gc2V0XG4gIDk3Olx0XHQgIHVwIFBzZXVkb3dpcmVzIGZvciB0cmFuc3BvcnRpbmcgbGF5ZXIgMiBQYWNrZXQgRGF0YSBVbml0c1xuICA5ODpcdFx0ICBhY3Jvc3MgYW4gSVAgbmV0d29yayBbUkZDMzkzMV0uXG4gIDk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIzOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzI2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipMMlRQdjMgQ29uc2lkZXJhdGlvbnMqKgoKT2theSwgc28gdGhlIGNvcmUgaXNzdWUgaGluZ2VzIG9uIGBMMlRQX1YzYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgY3JpdGljYWwgYXJjaGl0ZWN0dXJhbCBkZWNpc2lvbnMgYXJlIGdvaW5nIHRvIGJlIG1hZGUuIEJ1dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgc3BlY2lmaWNhbGx5ICp3aHkqIGBMMlRQX1YzYCBpcyBiZWluZyBicm91Z2h0IHVwLiBJIG5lZWQgdG8gZGVsdmUgaW50byB0aGUgZGV0YWlscyBoZXJlLiBXaGF0IGlzIGl0IGFib3V0IHRoaXMgcGFydGljdWxhciBwcm90b2NvbCB0aGF0IHJlcXVpcmVzIGZ1cnRoZXIgZXZhbHVhdGlvbiBvciBpbnRlZ3JhdGlvbj8gQXJlIHdlIGxvb2tpbmcgYXQgdHJhbnNwb3J0LCBjb250cm9sIHBsYW5lLCBkYXRhIHBsYW5lLCBvciBhIGNvbWJpbmF0aW9uPyBUaGlzIGlzIHRoZSBjZW50cmFsIHBvaW50IHRvIGNvbnNpZGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9sMnRwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQwOlx0XHQgIFN1cHBvcnQgZm9yIGwydHAgZGlyZWN0b3J5IGluIGRlYnVnZnMgZmlsZXN5c3RlbS4gVGhpcyBtYXkgYmVcbiAgNDE6XHRcdCAgdXNlZCB0byBkdW1wIGludGVybmFsIHN0YXRlIG9mIHRoZSBsMnRwIGRyaXZlcnMgZm9yIHByb2JsZW1cbiAgNDI6XHRcdCAgYW5hbHlzaXMuXG4gIDQzOlx0XG4gIDQ0Olx0XHQgIElmIHVuc3VyZSwgc2F5ICYjMzk7WSYjMzk7LlxuICA0NTpcdFxuICA0NjpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlXG4gIDQ3Olx0XHQgIHdpbGwgYmUgY2FsbGVkIGwydHBfZGVidWdmcy5cbiAgNDg6XHRcbiAgNDk6XHRjb25maWcgTDJUUF9WM1xuICA1MDpcdFx0Ym9vbCBcJiMzNDtMMlRQdjMgc3VwcG9ydFwmIzM0O1xuICA1MTpcdFx0ZGVwZW5kcyBvbiBMMlRQXG4gIDUyOlx0XHRoZWxwXG4gIDUzOlx0XHQgIExheWVyIFR3byBUdW5uZWxpbmcgUHJvdG9jb2wgVmVyc2lvbiAzXG4gIDU0Olx0XG4gIDU1Olx0XHQgIEZyb20gUkZDIDM5MzEgXHUwMDNjaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMzkzMS50eHRcdTAwM2UuXG4gIDU2Olx0XG4gIDU3Olx0XHQgIFRoZSBMYXllciBUd28gVHVubmVsaW5nIFByb3RvY29sIChMMlRQKSBwcm92aWRlcyBhIGR5bmFtaWNcbiAgNTg6XHRcdCAgbWVjaGFuaXNtIGZvciB0dW5uZWxpbmcgTGF5ZXIgMiAoTDIpIFwmIzM0O2NpcmN1aXRzXCYjMzQ7IGFjcm9zcyBhXG4gIDU5Olx0XHQgIHBhY2tldC1vcmllbnRlZCBkYXRhIG5ldHdvcmsgKGUuZy4sIG92ZXIgSVApLiAgTDJUUCwgYXNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MjIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkwyVFAgSW5xdWlyeSAmYW1wOyBEZXBlbmRlbmN5KioKCkFscmlnaHQsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpcyBzaXR1YXRpb24sIGFuZCBpbW1lZGlhdGVseSBteSBtaW5kIGdvZXMgdG8gdGhlIExheWVyIDIgVHVubmVsaW5nIFByb3RvY29sLCBgTDJUUGAuIFRoZSBjb250ZXh0IGxpa2VseSBoaW5nZXMgb24gaXRzIHVzZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCByb2xlIGBMMlRQYCBwbGF5cyBoZXJlLiBXaGF0IGlzIHRoZSBwYXJ0aWN1bGFyIGFzcGVjdCBvZiBgTDJUUGAgdGhhdCYjMzk7cyByZWxldmFudD8gSXMgaXQgaXRzIHNlY3VyaXR5LCBpdHMgdHJhbnNwb3J0IG1lY2hhbmlzbSwgaXRzIGltcGxlbWVudGF0aW9uIHF1aXJrcz8gSSBuZWVkIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgaG93IGBMMlRQYCBjb21lcyBpbnRvIHBsYXkgdG8gZ2l2ZSBhIG1vcmUgY29uY2lzZSBzdW1tYXJ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9sMnRwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBMYXllciBUd28gVHVubmVsaW5nIFByb3RvY29sIChMMlRQKVxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRtZW51Y29uZmlnIEwyVFBcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O0xheWVyIFR3byBUdW5uZWxpbmcgUHJvdG9jb2wgKEwyVFApXCYjMzQ7XG4gICA4Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDk6XHRcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxuICAxMDpcdFx0aGVscFxuICAxMTpcdFx0ICBMYXllciBUd28gVHVubmVsaW5nIFByb3RvY29sXG4gIDEyOlx0XG4gIDEzOlx0XHQgIEZyb20gUkZDIDI2NjEgXHUwMDNjaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMjY2MS50eHRcdTAwM2UuXG4gIDE0Olx0XG4gIDE1Olx0XHQgIEwyVFAgZmFjaWxpdGF0ZXMgdGhlIHR1bm5lbGluZyBvZiBwYWNrZXRzIGFjcm9zcyBhblxuICAxNjpcdFx0ICBpbnRlcnZlbmluZyBuZXR3b3JrIGluIGEgd2F5IHRoYXQgaXMgYXMgdHJhbnNwYXJlbnQgYXNcbiAgMTc6XHRcdCAgcG9zc2libGUgdG8gYm90aCBlbmQtdXNlcnMgYW5kIGFwcGxpY2F0aW9ucy5cbiAgMTg6XHRcbiAgMTk6XHRcdCAgTDJUUCBpcyBvZnRlbiB1c2VkIHRvIHR1bm5lbCBQUFAgdHJhZmZpYyBvdmVyIElQXG4gIDIwOlx0XHQgIHR1bm5lbHMuIE9uZSBJUCB0dW5uZWwgbWF5IGNhcnJ5IHRob3VzYW5kcyBvZiBpbmRpdmlkdWFsIFBQUFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI5MAoJCQkJCQkJb3V0cHV0OiAxMzkKCQkJCQkJCXRob3VnaHRzOiAzNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTDJUUCBGdXp6aW5nIFRhcmdldCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaGluZ2VzIG9uIHRoZSBwcmVzZW5jZSBvZiBgSU5FVGAsIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgc3RhY2suIEdpdmVuIHRoYXQsIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBzZWVtIHRvIGJlIGBMMlRQYCwgYEwyVFBfVjNgLCBhbmQgYEwyVFBfRVRIYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGtleSBzeW1ib2xzLCBhbmQgdGhlIGluaXRpYWwgc3VzcGVjdHMgbG9vayBsaWtlIGBsMnRwX3R1bm5lbF9yZWdpc3RlcmAsIGBsMnRwX25sX2NtZF9zZXNzaW9uX2NyZWF0ZWAsIGFuZCwgY3J1Y2lhbGx5LCBgbDJ0cF94bWl0X3NrYmAuCgpOb3csIGlzIGBsMnRwX3htaXRfc2tiYCByZWFsbHkgdGhlIGJlc3QgZnVuY3Rpb24gdG8gZm9jdXMgb24/IEEgcXVpY2sgY2hlY2sgc2hvd3MgdGhhdCBpdCAqaXMqIGV4cG9ydGVkIGFuZCBjYWxsZWQgYnkgc2V2ZXJhbCBpbXBvcnRhbnQgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYGwydHBfZXRoX2Rldl94bWl0YCwgYHBwcG9sMnRwX3NlbmRtc2dgLCBhbmQgYHBwcG9sMnRwX3htaXRgLiBBaGEhIGBsMnRwX2V0aF9kZXZfeG1pdGAgaXMgdGhlIGBuZG9fc3RhcnRfeG1pdGAgZm9yIEwyVFAgZXRoZXJuZXQgZGV2aWNlcy4gVGhhdCYjMzk7cyBhIHN0cm9uZyBpbmRpY2F0b3IgdGhhdCBmdXp6aW5nIGBsMnRwX3htaXRfc2tiYCBpcyBhIHZhbGlkIGFuZCBwb3RlbnRpYWxseSBmcnVpdGZ1bCBhcHByb2FjaC4KCkkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBZZXMsIHRoZSBgTDJUUF9JUGAgY29uZmlnIGlzIGFsc28gY2xlYXJseSByZWxldmFudCBoZXJlLCBzaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIEwyVFAgb3ZlciBJUC4gTGV0JiMzOTtzIGluY2x1ZGUgdGhhdCBpbiB0aGUgbGlzdC4KCk9rYXksIGxldCBtZSBzdW1tYXJpemUgbXkgZmluZGluZ3MgZm9yIGNsYXJpdHkuCgoqICAgYFdvcnRoRnV6emluZ2A6IFRydWUuCiogICBgUmVhc29uaW5nYDogVGhpcyBwYXRjaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IHJlZmFjdG9ycyBMMlRQIGhlYWRyb29tIGFuZCBvdmVyaGVhZCBjYWxjdWxhdGlvbnMuIFRoaXMgaW52b2x2ZXMgY2hhbmdlcyB0byBNVFUgYWRqdXN0bWVudCBhbmQgU0tCIGhlYWRyb29tIGNoZWNrcyB3aXRoaW4gdGhlIEwyVFAgY29yZSBhbmQgdGhlIEwyVFAgRXRoZXJuZXQgcHNldWRvd2lyZSBjb2RlLiBUaGUgY2hhbmdlcyB0b3VjaCBjb3JlIG5ldHdvcmsgcGF0aHMsIHdoaWNoIGlzIGFsd2F5cyB3b3J0aCBhIGNsb3NlciBsb29rLgoqICAgYEZvY3VzU3ltYm9sc2A6IGBsMnRwX3R1bm5lbF9yZWdpc3RlcmAsIGBsMnRwX25sX2NtZF9zZXNzaW9uX2NyZWF0ZWAsIGBsMnRwX3htaXRfc2tiYC4KKiAgIGBFbmFibGVDb25maWdzYDogYEwyVFBgLCBgTDJUUF9WM2AsIGBMMlRQX0VUSGAsIGFuZCBgTDJUUF9JUGAuCgpUaGlzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0wyVFAmIzM0OywKICAgICYjMzQ7TDJUUF9WMyYjMzQ7LAogICAgJiMzNDtMMlRQX0VUSCYjMzQ7LAogICAgJiMzNDtMMlRQX0lQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bDJ0cF90dW5uZWxfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7bDJ0cF9ubF9jbWRfc2Vzc2lvbl9jcmVhdGUmIzM0OywKICAgICYjMzQ7bDJ0cF94bWl0X3NrYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgTDJUUCBoZWFkcm9vbSBhbmQgb3ZlcmhlYWQgY2FsY3VsYXRpb25zLCBtb2RpZnlpbmcgTVRVIGFkanVzdG1lbnQgYW5kIFNLQiBoZWFkcm9vbSBjaGVja3MgaW4gTDJUUCBjb3JlIGFuZCBMMlRQIEV0aGVybmV0IHBzZXVkb3dpcmUgY29kZS4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0wyVFAmIzM0OywKICAgICYjMzQ7TDJUUF9WMyYjMzQ7LAogICAgJiMzNDtMMlRQX0VUSCYjMzQ7LAogICAgJiMzNDtMMlRQX0lQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bDJ0cF90dW5uZWxfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7bDJ0cF9ubF9jbWRfc2Vzc2lvbl9jcmVhdGUmIzM0OywKICAgICYjMzQ7bDJ0cF94bWl0X3NrYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgTDJUUCBoZWFkcm9vbSBhbmQgb3ZlcmhlYWQgY2FsY3VsYXRpb25zLCBtb2RpZnlpbmcgTVRVIGFkanVzdG1lbnQgYW5kIFNLQiBoZWFkcm9vbSBjaGVja3MgaW4gTDJUUCBjb3JlIGFuZCBMMlRQIEV0aGVybmV0IHBzZXVkb3dpcmUgY29kZS4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIzOjM4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjM6Mzg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBjYWxjdWxhdGlvbiBvZiBMMlRQIHBhY2tldCBvdmVyaGVhZCBhbmQgaGVhZHJvb20sIGNhY2hpbmcgdGhlIEwzIG92ZXJoZWFkIGluIHRoZSBgbDJ0cF90dW5uZWxgIHN0cnVjdHVyZSBhbmQgdXNpbmcgaXQgdG8gYWNjdXJhdGVseSByZXF1ZXN0IGhlYWRyb29tIHZpYSBgc2tiX2Nvd19oZWFkYCBhbmQgc2V0IE1UVS9uZWVkZWRfaGVhZHJvb20gZm9yIHRoZSBkZXZpY2UuIFRoZXNlIGNoYW5nZXMgcHJpbWFyaWx5IGFmZmVjdCBidWZmZXIgc2l6ZSBjYWxjdWxhdGlvbnMgYW5kIGhlYWRyb29tIGFsbG9jYXRpb24uIElmIHRoZSBjYWxjdWxhdGlvbnMgYXJlIGluY29ycmVjdCwgdGhleSBjb3VsZCBsZWFkIHRvIG91dC1vZi1ib3VuZHMgd3JpdGVzIChpZiBoZWFkcm9vbSBpcyB0b28gc21hbGwpIG9yIGZ1bmN0aW9uYWwgaXNzdWVzIChpbmNvcnJlY3QgTVRVKSwgYm90aCBvZiB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHRlc3RpbmcuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSwgbm9yIGRvZXMgaXQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHRoZSBuZXR3b3JrIG9yIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0Y2UwYzYzNzNiM2JhYjQ4MTZmOGNhMDQ5Y2VmZTQzNDZjOTcwMmZhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgOCAyMzozNzowOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9sMnRwL2wydHBfY29yZS5jIGIvbmV0L2wydHAvbDJ0cF9jb3JlLmMKaW5kZXggNDcxMmNjNDE4ODFhMy4uZjUyYmYzYjUzMjkwNyAxMDA2NDQKLS0tIGEvbmV0L2wydHAvbDJ0cF9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2wydHAvbDJ0cF9jb3JlLmMKQEAgLTEyMjcsMTggJiM0MzsxMjI3LDE2IEBAIHN0YXRpYyBpbnQgbDJ0cF94bWl0X2NvcmUoc3RydWN0IGwydHBfc2Vzc2lvbiAqc2Vzc2lvbiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zCiAJc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwgPSBzZXNzaW9uLSZndDt0dW5uZWw7CiAJdW5zaWduZWQgaW50IGRhdGFfbGVuID0gc2tiLSZndDtsZW47CiAJc3RydWN0IHNvY2sgKnNrID0gdHVubmVsLSZndDtzb2NrOwotCWludCBoZWFkcm9vbSwgdWhsZW4sIHVkcF9sZW47CiAJaW50IHJldCA9IE5FVF9YTUlUX1NVQ0NFU1M7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldDsKIAlzdHJ1Y3QgdWRwaGRyICp1aDsKJiM0MzsJaW50IHVkcF9sZW47CiAKIAkvKiBDaGVjayB0aGF0IHRoZXJlJiMzOTtzIGVub3VnaCBoZWFkcm9vbSBpbiB0aGUgc2tiIHRvIGluc2VydCBJUCwKIAkgKiBVRFAgYW5kIEwyVFAgaGVhZGVycy4gSWYgbm90IGVub3VnaCwgZXhwYW5kIGl0IHRvCiAJICogbWFrZSByb29tLiBBZGp1c3QgdHJ1ZXNpemUuCiAJICovCi0JdWhsZW4gPSAodHVubmVsLSZndDtlbmNhcCA9PSBMMlRQX0VOQ0FQVFlQRV9VRFApID8gc2l6ZW9mKCp1aCkgOiAwOwotCWhlYWRyb29tID0gTkVUX1NLQl9QQUQgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcGhkcikgJiM0MzsgdWhsZW4gJiM0Mzsgc2Vzc2lvbi0mZ3Q7aGRyX2xlbjsKLQlpZiAoc2tiX2Nvd19oZWFkKHNrYiwgaGVhZHJvb20pKSB7CiYjNDM7CWlmIChza2JfY293X2hlYWQoc2tiLCBsMnRwX3Nlc3Npb25fc2tiX2hlYWRyb29tKHNlc3Npb24sIHR1bm5lbCkpKSB7CiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gTkVUX1hNSVRfRFJPUDsKIAl9CkBAIC0xMjkwLDcgJiM0MzsxMjg4LDkgQEAgc3RhdGljIGludCBsMnRwX3htaXRfY29yZShzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnMKIAkJdWggPSB1ZHBfaGRyKHNrYik7CiAJCXVoLSZndDtzb3VyY2UgPSBpbmV0LSZndDtpbmV0X3Nwb3J0OwogCQl1aC0mZ3Q7ZGVzdCA9IGluZXQtJmd0O2luZXRfZHBvcnQ7Ci0JCXVkcF9sZW4gPSB1aGxlbiAmIzQzOyBzZXNzaW9uLSZndDtoZHJfbGVuICYjNDM7IGRhdGFfbGVuOwomIzQzOwomIzQzOwkJdWRwX2xlbiA9IGwydHBfdHVubmVsX3VkcF9oZHJsZW4odHVubmVsKTsKJiM0MzsJCXVkcF9sZW4gJiM0Mzs9IHNlc3Npb24tJmd0O2hkcl9sZW4gJiM0MzsgZGF0YV9sZW47CiAJCWlmICh1ZHBfbGVuICZndDsgVTE2X01BWCkgewogCQkJa2ZyZWVfc2tiKHNrYik7CiAJCQlyZXQgPSBORVRfWE1JVF9EUk9QOwpAQCAtMTY4OCw2ICYjNDM7MTY4OCw3IEBAIGludCBsMnRwX3R1bm5lbF9yZWdpc3RlcihzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbCwgc3RydWN0IG5ldCAqbmV0LAogCX0KIAogCXNrLSZndDtza19hbGxvY2F0aW9uID0gR0ZQX0FUT01JQzsKJiM0MzsJdHVubmVsLSZndDtsM19vdmVyaGVhZCA9IGtlcm5lbF9zb2NrX2lwX292ZXJoZWFkKHNrKTsKIAlyZWxlYXNlX3NvY2soc2spOwogCiAJc29ja19ob2xkKHNrKTsKZGlmZiAtLWdpdCBhL25ldC9sMnRwL2wydHBfY29yZS5oIGIvbmV0L2wydHAvbDJ0cF9jb3JlLmgKaW5kZXggZmZkOGNlZDNhNTFmZi4uMmM0MTg3N2I2Y2U1NyAxMDA2NDQKLS0tIGEvbmV0L2wydHAvbDJ0cF9jb3JlLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2wydHAvbDJ0cF9jb3JlLmgKQEAgLTE2Nyw2ICYjNDM7MTY3LDcgQEAgc3RydWN0IGwydHBfdHVubmVsIHsKIAl1MzIJCQl0dW5uZWxfaWQ7CiAJdTMyCQkJcGVlcl90dW5uZWxfaWQ7CiAJaW50CQkJdmVyc2lvbjsJLyogMj0mZ3Q7TDJUUHYyLCAzPSZndDtMMlRQdjMgKi8KJiM0MzsJaW50CQkJbDNfb3ZlcmhlYWQ7CS8qIElQIGhlYWRlciBvdmVyaGVhZCAqLwogCiAJY2hhcgkJCW5hbWVbTDJUUF9UVU5ORUxfTkFNRV9NQVhdOyAvKiBmb3IgbG9nZ2luZyAqLwogCWVudW0gbDJ0cF9lbmNhcF90eXBlCWVuY2FwOwpAQCAtMzM0LDYgJiM0MzszMzUsMjUgQEAgc3RhdGljIGlubGluZSBpbnQgbDJ0cF92M19lbnN1cmVfb3B0X2luX2xpbmVhcihzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uLCBzdHIKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGwydHBfdHVubmVsX3VkcF9oZHJsZW4oc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwpCiYjNDM7ewomIzQzOwlyZXR1cm4gdHVubmVsLSZndDtlbmNhcCA9PSBMMlRQX0VOQ0FQVFlQRV9VRFAgPwomIzQzOwkJc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpIDogMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgbDJ0cF9zZXNzaW9uX292ZXJoZWFkKHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb24sCiYjNDM7CQkJCQlzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbCkKJiM0Mzt7CiYjNDM7CXJldHVybiBsMnRwX3R1bm5lbF91ZHBfaGRybGVuKHR1bm5lbCkgJiM0Mzsgc2Vzc2lvbi0mZ3Q7aGRyX2xlbiAmIzQzOwomIzQzOwkJdHVubmVsLSZndDtsM19vdmVyaGVhZDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgbDJ0cF9zZXNzaW9uX3NrYl9oZWFkcm9vbShzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uLAomIzQzOwkJCQkJICAgIHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsKQomIzQzO3sKJiM0MzsJcmV0dXJuIE5FVF9TS0JfUEFEICYjNDM7IGwydHBfc2Vzc2lvbl9vdmVyaGVhZChzZXNzaW9uLCB0dW5uZWwpOwomIzQzO30KJiM0MzsKICNkZWZpbmUgTU9EVUxFX0FMSUFTX0wyVFBfUFdUWVBFKHR5cGUpIFwKIAlNT0RVTEVfQUxJQVMoJiMzNDtuZXQtbDJ0cC10eXBlLSYjMzQ7IF9fc3RyaW5naWZ5KHR5cGUpKQogCmRpZmYgLS1naXQgYS9uZXQvbDJ0cC9sMnRwX2V0aC5jIGIvbmV0L2wydHAvbDJ0cF9ldGguYwppbmRleCBhNDk1NmVmOTU3NGNjLi42ODdjZTFjNmRiOTQ2IDEwMDY0NAotLS0gYS9uZXQvbDJ0cC9sMnRwX2V0aC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9sMnRwL2wydHBfZXRoLmMKQEAgLTE4OCwzMSAmIzQzOzE4OCwxNyBAQCBzdGF0aWMgdm9pZCBsMnRwX2V0aF9hZGp1c3RfbXR1KHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsLAogCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJdW5zaWduZWQgaW50IG92ZXJoZWFkID0gMDsKLQl1MzIgbDNfb3ZlcmhlYWQgPSAwOwogCXUzMiBtdHU7CiAKLQkvKiBpZiB0aGUgZW5jYXAgaXMgVURQLCBhY2NvdW50IGZvciBVRFAgaGVhZGVyIHNpemUgKi8KLQlpZiAodHVubmVsLSZndDtlbmNhcCA9PSBMMlRQX0VOQ0FQVFlQRV9VRFApIHsKLQkJb3ZlcmhlYWQgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKLQkJZGV2LSZndDtuZWVkZWRfaGVhZHJvb20gJiM0Mzs9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKLQl9Ci0KLQlsb2NrX3NvY2sodHVubmVsLSZndDtzb2NrKTsKLQlsM19vdmVyaGVhZCA9IGtlcm5lbF9zb2NrX2lwX292ZXJoZWFkKHR1bm5lbC0mZ3Q7c29jayk7Ci0JcmVsZWFzZV9zb2NrKHR1bm5lbC0mZ3Q7c29jayk7Ci0KLQlpZiAobDNfb3ZlcmhlYWQgPT0gMCkgewomIzQzOwlpZiAodHVubmVsLSZndDtsM19vdmVyaGVhZCA9PSAwKSB7CiAJCS8qIEwzIE92ZXJoZWFkIGNvdWxkbiYjMzk7dCBiZSBpZGVudGlmaWVkLCB0aGlzIGNvdWxkIGJlCi0JCSAqIGJlY2F1c2UgdHVubmVsLSZndDtzb2NrIHdhcyBOVUxMIG9yIHRoZSBzb2NrZXQmIzM5O3MKLQkJICogYWRkcmVzcyBmYW1pbHkgd2FzIG5vdCBJUHY0IG9yIElQdjYsCi0JCSAqIGRldiBtdHUgc3RheXMgYXQgMTUwMC4KJiM0MzsJCSAqIGJlY2F1c2UgdGhlIHNvY2tldCYjMzk7cyBhZGRyZXNzIGZhbWlseSB3YXMgbm90IElQdjQKJiM0MzsJCSAqIG9yIElQdjYgLSBkZXYgbXR1IHN0YXlzIGF0IDE1MDAuCiAJCSAqLwogCQlyZXR1cm47CiAJfQotCS8qIEFkanVzdCBNVFUsIGZhY3RvciBvdmVyaGVhZCAtIHVuZGVybGF5IEwzLCBvdmVybGF5IEwyIGhkcgotCSAqIFVEUCBvdmVyaGVhZCwgaWYgYW55LCB3YXMgYWxyZWFkeSBmYWN0b3JlZCBpbiBhYm92ZS4KLQkgKi8KLQlvdmVyaGVhZCAmIzQzOz0gc2Vzc2lvbi0mZ3Q7aGRyX2xlbiAmIzQzOyBFVEhfSExFTiAmIzQzOyBsM19vdmVyaGVhZDsKJiM0MzsJLyogQ2FsY3VsYXRlIHJlcXVpcmVkIG92ZXJoZWFkICovCiYjNDM7CW92ZXJoZWFkID0gRVRIX0hMRU4gJiM0MzsgbDJ0cF9zZXNzaW9uX292ZXJoZWFkKHNlc3Npb24sIHR1bm5lbCk7CiAKIAltdHUgPSBsMnRwX3R1bm5lbF9kc3RfbXR1KHR1bm5lbCkgLSBvdmVyaGVhZDsKIAlpZiAobXR1ICZsdDsgZGV2LSZndDttaW5fbXR1IHx8IG10dSAmZ3Q7IGRldi0mZ3Q7bWF4X210dSkKQEAgLTIyMCw3ICYjNDM7MjA2LDcgQEAgc3RhdGljIHZvaWQgbDJ0cF9ldGhfYWRqdXN0X210dShzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbCwKIAllbHNlCiAJCWRldi0mZ3Q7bXR1ID0gbXR1OwogCi0JZGV2LSZndDtuZWVkZWRfaGVhZHJvb20gJiM0Mzs9IHNlc3Npb24tJmd0O2hkcl9sZW47CiYjNDM7CWRldi0mZ3Q7bmVlZGVkX2hlYWRyb29tID0gbDJ0cF9zZXNzaW9uX3NrYl9oZWFkcm9vbShzZXNzaW9uLCB0dW5uZWwpOwogfQogCiBzdGF0aWMgaW50IGwydHBfZXRoX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcxOAoJCQkJCQkJb3V0cHV0OiAxODEKCQkJCQkJCXRob3VnaHRzOiAxMzU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IEwyVFAgT3ZlcmhlYWQgUmVmYWN0b3IqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggbW9kaWZ5aW5nIHRoZSBMMlRQIGNvZGUsIHNwZWNpZmljYWxseSBmb2N1c2VkIG9uIGhvdyBvdmVyaGVhZCBhbmQgaGVhZHJvb20gYXJlIGNhbGN1bGF0ZWQuIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzLCAmIzM0O0FyZSB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgaW50cm9kdWNlZCBoZXJlPyYjMzQ7LiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaW52b2x2ZXMgdGhlc2UgbmV3IGZ1bmN0aW9uczogYGwydHBfc2Vzc2lvbl9vdmVyaGVhZGAsIGBsMnRwX3Nlc3Npb25fc2tiX2hlYWRyb29tYCwgYW5kIGNhY2hpbmcgYGwzX292ZXJoZWFkYCBkdXJpbmcgdHVubmVsIHJlZ2lzdHJhdGlvbi4gSXQgc2VlbXMgdGhlIGludGVudGlvbiBpcyB0byBtYWtlIHRoZSBoZWFkcm9vbSBjYWxjdWxhdGlvbiBtb3JlIHByZWNpc2UsIHVzaW5nIGBsMnRwX3Nlc3Npb25fc2tiX2hlYWRyb29tYCB3aXRoIGBza2JfY293X2hlYWRgIGluIGBsMnRwX3htaXRfY29yZWAgYW5kIGFkanVzdGluZyB0aGUgTVRVIGNhbGN1bGF0aW9uIGluIGBsMnRwX2V0aF9hZGp1c3RfbXR1YC4KCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoZSBjYWxjdWxhdGlvbnMuIGBsM19vdmVyaGVhZGAgZ2V0cyBzdG9yZWQgaW4gYHR1bm5lbC0mZ3Q7bDNfb3ZlcmhlYWRgIHVzaW5nIGBrZXJuZWxfc29ja19pcF9vdmVyaGVhZChzaylgLiBUaGVuLCBgbDJ0cF9zZXNzaW9uX3NrYl9oZWFkcm9vbWAgYWRkcyBgTkVUX1NLQl9QQUQgJiM0MzsgbDJ0cF9zZXNzaW9uX292ZXJoZWFkKHNlc3Npb24sIHR1bm5lbClgLiAgQW5kIHRoYXQgYGwydHBfc2Vzc2lvbl9vdmVyaGVhZGAgYWRkcyB0aGUgVURQIGhlYWRlciBsZW5ndGggaWYgYXBwbGljYWJsZSwgdGhlIHNlc3Npb24gaGVhZGVyIGxlbmd0aCwgYW5kIHRoZSB0dW5uZWwmIzM5O3MgTDMgb3ZlcmhlYWQuCgpMb29raW5nIGF0IGBsMnRwX3htaXRfY29yZWAsIHRoZSBjb2RlIGhhcyBiZWVuIHVwZGF0ZWQgdG8gdXNlIHRoZSBuZXcgYGwydHBfc2Vzc2lvbl9za2JfaGVhZHJvb21gIGZ1bmN0aW9uLiBCZWZvcmUsIGl0IHdhcyBjYWxjdWxhdGluZyB0aGUgaGVhZHJvb20gZGlyZWN0bHksIGluY2x1ZGluZyB0aGUgSVAgaGVhZGVyIHNpemUuIE5vdywgaXQmIzM5O3MgdXNpbmcgdGhlIGNhY2hlZCBgbDNfb3ZlcmhlYWRgLiBNeSBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBpcyBjb25zaXN0ZW50LiBJdCYjMzk7cyBub3cgZXhwbGljaXRseSB1c2luZyBgdHVubmVsLSZndDtsM19vdmVyaGVhZGAsIHdoaWNoLCBhZ2FpbiwgaXMgdGhlIHJlc3VsdCBvZiBga2VybmVsX3NvY2tfaXBfb3ZlcmhlYWQoc2spYC4gVGhpcyBjb3VsZCByZXByZXNlbnQgSVB2NCBvciBJUHY2IG92ZXJoZWFkLCBzbyBpdCAqY291bGQqIGJlIGxhcmdlciBpbiB0aGUgSVB2NiBjYXNlLgoKU28sIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogRG9lcyB0aGlzIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uIGBza2JfY293X2hlYWRgIGlzIGp1c3QgYWxsb2NhdGluZyBtb3JlIHNwYWNlLiBJdCBkb2VzbiYjMzk7dCBpbml0aWFsaXplIGRhdGEsIHRoZSBuZXR3b3JrIHN0YWNrIGRvZXMgdGhhdCBsYXRlci4gVGhlIHBvdGVudGlhbCByaXNrcyBoZXJlIGFyZSBpbmNvcnJlY3QgaGVhZHJvb20gbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIGFjY2VzcyBvciwgd29yc2UsIGEgcGFuaWMg4oCTIGJ1dCBLQVNBTiBzaG91bGQgY2F0Y2ggdGhvc2UgaXNzdWVzLiBUaGlzIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIG5vciBkb2VzIGl0IGludHJvZHVjZSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMuIFRoZXJlJiMzOTtzIG5vdGhpbmcgaGVyZSB0aGF0JiMzOTtzIHJlYWRpbmcgdW5pbml0aWFsaXplZCBieXRlcyBmcm9tIGV4aXN0aW5nIGJ1ZmZlcnMgYmVjYXVzZSBvZiBhIGJvdW5kcyBpc3N1ZS4KCkEgZmluYWwgdGhvdWdodDogSXMgdGhlcmUgYW55IHNjZW5hcmlvIHdoZXJlIGBza2JfY293X2hlYWRgIGl0c2VsZiBjYW4gbGVhdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gdGhlIFNLQiB0aGF0IHdvdWxkIGdldCBzZW50PyBOby4gVGhlIGRhdGEgc2VjdGlvbiBvZiB0aGUgc2tiIGlzIGZpbGxlZCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBkYXRhIGxhdGVyLiBJZiBpdCAqZGlkKiBsZWF2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgS01TQU4gd291bGQgZmxhZyBpdC4gVGhpcyBwYXRjaCBpcyBqdXN0IGNoYW5naW5nIHRoZSAqYW1vdW50KiBvZiBoZWFkcm9vbSByZXF1ZXN0ZWQsIG5vdCBob3cgdGhlIGRhdGEgaXMgd3JpdHRlbi4KCkxldCYjMzk7cyByZXZpZXcgdGhlIGNoYW5nZXMgaW4gYGwydHBfZXRoX2FkanVzdF9tdHVgLiBJdCBsb29rcyBsaWtlIGl0IGlzIGp1c3QgcmVmYWN0b3JpbmcgdGhlIE1UVSBjYWxjdWxhdGlvbiB1c2luZyB0aGUgbmV3IGhlbHBlciBmdW5jdGlvbi4KCkkgZG9uJiMzOTt0IHNlZSBhbnkgS01TQU4tc3BlY2lmaWMgcmlza3MgaGVyZS4gVGhlIHBvdGVudGlhbCBidWdzIGFyZSBPT0IgYWNjZXNzZXMgb3IgaW5jb3JyZWN0IE1UVSBzaXplcywgd2hpY2ggS0FTQU4sIG9yIGZ1bmN0aW9uYWwgZmFpbHVyZSB3aWxsIGNhdGNoLgpDYW4gYGtlcm5lbF9zb2NrX2lwX292ZXJoZWFkYCByZXR1cm4gdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLCBpdCYjMzk7cyBqdXN0IHJldHVybmluZyBhIHNpemUuCklzIGB0dW5uZWwtJmd0O2wzX292ZXJoZWFkYCB1bmluaXRpYWxpemVkPyBObywgaXQgaXMgaW5pdGlhbGl6ZWQgd2hlbiByZWdpc3RlcmluZyB0aGUgdHVubmVsIHZpYSBgbDJ0cF90dW5uZWxfcmVnaXN0ZXJgLgoKYGBgYwoJc2stJmd0O3NrX2FsbG9jYXRpb24gPSBHRlBfQVRPTUlDOwoJdHVubmVsLSZndDtsM19vdmVyaGVhZCA9IGtlcm5lbF9zb2NrX2lwX292ZXJoZWFkKHNrKTsKCXJlbGVhc2Vfc29jayhzayk7CmBgYAoKU28sIE5lZWRzS01TQU4gc2hvdWxkIGJlIGZhbHNlIGhlcmUuCgpUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBjYWxjdWxhdGlvbiBvZiBMMlRQIHBhY2tldCBvdmVyaGVhZCBhbmQgaGVhZHJvb20sIGNhY2hpbmcgdGhlIEwzIG92ZXJoZWFkIGluIHRoZSBgbDJ0cF90dW5uZWxgIHN0cnVjdHVyZSBhbmQgdXNpbmcgaXQgdG8gYWNjdXJhdGVseSByZXF1ZXN0IGhlYWRyb29tIHZpYSBgc2tiX2Nvd19oZWFkYCBhbmQgc2V0IE1UVS9uZWVkZWRfaGVhZHJvb20gZm9yIHRoZSBkZXZpY2UuIFRoZXNlIGNoYW5nZXMgcHJpbWFyaWx5IGFmZmVjdCBidWZmZXIgc2l6ZSBjYWxjdWxhdGlvbnMgYW5kIGhlYWRyb29tIGFsbG9jYXRpb24uIElmIHRoZSBjYWxjdWxhdGlvbnMgYXJlIGluY29ycmVjdCwgdGhleSBjb3VsZCBsZWFkIHRvIG91dC1vZi1ib3VuZHMgd3JpdGVzIChpZiBoZWFkcm9vbSBpcyB0b28gc21hbGwpIG9yIGZ1bmN0aW9uYWwgaXNzdWVzIChpbmNvcnJlY3QgTVRVKSwgYm90aCBvZiB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHRlc3RpbmcuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSwgbm9yIGRvZXMgaXQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHRoZSBuZXR3b3JrIG9yIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGNhbGN1bGF0aW9uIG9mIEwyVFAgcGFja2V0IG92ZXJoZWFkIGFuZCBoZWFkcm9vbSwgY2FjaGluZyB0aGUgTDMgb3ZlcmhlYWQgaW4gdGhlIGBsMnRwX3R1bm5lbGAgc3RydWN0dXJlIGFuZCB1c2luZyBpdCB0byBhY2N1cmF0ZWx5IHJlcXVlc3QgaGVhZHJvb20gdmlhIGBza2JfY293X2hlYWRgIGFuZCBzZXQgTVRVL25lZWRlZF9oZWFkcm9vbSBmb3IgdGhlIGRldmljZS4gVGhlc2UgY2hhbmdlcyBwcmltYXJpbHkgYWZmZWN0IGJ1ZmZlciBzaXplIGNhbGN1bGF0aW9ucyBhbmQgaGVhZHJvb20gYWxsb2NhdGlvbi4gSWYgdGhlIGNhbGN1bGF0aW9ucyBhcmUgaW5jb3JyZWN0LCB0aGV5IGNvdWxkIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyB3cml0ZXMgKGlmIGhlYWRyb29tIGlzIHRvbyBzbWFsbCkgb3IgZnVuY3Rpb25hbCBpc3N1ZXMgKGluY29ycmVjdCBNVFUpLCBib3RoIG9mIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgdGVzdGluZy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLCBub3IgZG9lcyBpdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdGhlIG5ldHdvcmsgb3IgdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGNhbGN1bGF0aW9uIG9mIEwyVFAgcGFja2V0IG92ZXJoZWFkIGFuZCBoZWFkcm9vbSwgY2FjaGluZyB0aGUgTDMgb3ZlcmhlYWQgaW4gdGhlIGBsMnRwX3R1bm5lbGAgc3RydWN0dXJlIGFuZCB1c2luZyBpdCB0byBhY2N1cmF0ZWx5IHJlcXVlc3QgaGVhZHJvb20gdmlhIGBza2JfY293X2hlYWRgIGFuZCBzZXQgTVRVL25lZWRlZF9oZWFkcm9vbSBmb3IgdGhlIGRldmljZS4gVGhlc2UgY2hhbmdlcyBwcmltYXJpbHkgYWZmZWN0IGJ1ZmZlciBzaXplIGNhbGN1bGF0aW9ucyBhbmQgaGVhZHJvb20gYWxsb2NhdGlvbi4gSWYgdGhlIGNhbGN1bGF0aW9ucyBhcmUgaW5jb3JyZWN0LCB0aGV5IGNvdWxkIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyB3cml0ZXMgKGlmIGhlYWRyb29tIGlzIHRvbyBzbWFsbCkgb3IgZnVuY3Rpb25hbCBpc3N1ZXMgKGluY29ycmVjdCBNVFUpLCBib3RoIG9mIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgdGVzdGluZy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLCBub3IgZG9lcyBpdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdGhlIG5ldHdvcmsgb3IgdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIzOjM3OjA5Ljg5Nzk2NjE4NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNTg4NzY4MDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkwyVFBcIixcbiAgICBcIkwyVFBfVjNcIixcbiAgICBcIkwyVFBfRVRIXCIsXG4gICAgXCJMMlRQX0lQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibDJ0cF90dW5uZWxfcmVnaXN0ZXJcIixcbiAgICBcImwydHBfbmxfY21kX3Nlc3Npb25fY3JlYXRlXCIsXG4gICAgXCJsMnRwX3htaXRfc2tiXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGNhbGN1bGF0aW9uIG9mIEwyVFAgcGFja2V0IG92ZXJoZWFkIGFuZCBoZWFkcm9vbSwgY2FjaGluZyB0aGUgTDMgb3ZlcmhlYWQgaW4gdGhlIGBsMnRwX3R1bm5lbGAgc3RydWN0dXJlIGFuZCB1c2luZyBpdCB0byBhY2N1cmF0ZWx5IHJlcXVlc3QgaGVhZHJvb20gdmlhIGBza2JfY293X2hlYWRgIGFuZCBzZXQgTVRVL25lZWRlZF9oZWFkcm9vbSBmb3IgdGhlIGRldmljZS4gVGhlc2UgY2hhbmdlcyBwcmltYXJpbHkgYWZmZWN0IGJ1ZmZlciBzaXplIGNhbGN1bGF0aW9ucyBhbmQgaGVhZHJvb20gYWxsb2NhdGlvbi4gSWYgdGhlIGNhbGN1bGF0aW9ucyBhcmUgaW5jb3JyZWN0LCB0aGV5IGNvdWxkIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyB3cml0ZXMgKGlmIGhlYWRyb29tIGlzIHRvbyBzbWFsbCkgb3IgZnVuY3Rpb25hbCBpc3N1ZXMgKGluY29ycmVjdCBNVFUpLCBib3RoIG9mIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgdGVzdGluZy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLCBub3IgZG9lcyBpdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdGhlIG5ldHdvcmsgb3IgdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIEwyVFAgaGVhZHJvb20gYW5kIG92ZXJoZWFkIGNhbGN1bGF0aW9ucywgbW9kaWZ5aW5nIE1UVSBhZGp1c3RtZW50IGFuZCBTS0IgaGVhZHJvb20gY2hlY2tzIGluIEwyVFAgY29yZSBhbmQgTDJUUCBFdGhlcm5ldCBwc2V1ZG93aXJlIGNvZGUuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBuZXR3b3JrIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMzozNzowOS44OTc5Nzc3MDRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTEyNjUyNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0Y2UwYzYzNzNiM2JhYjQ4MTZmOGNhMDQ5Y2VmZTQzNDZjOTcwMmZhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDggMjM6Mzc6MDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2wydHAvbDJ0cF9jb3JlLmMgYi9uZXQvbDJ0cC9sMnRwX2NvcmUuY1xcbmluZGV4IDQ3MTJjYzQxODgxYTMuLmY1MmJmM2I1MzI5MDcgMTAwNjQ0XFxuLS0tIGEvbmV0L2wydHAvbDJ0cF9jb3JlLmNcXG4rKysgYi9uZXQvbDJ0cC9sMnRwX2NvcmUuY1xcbkBAIC0xMjI3LDE4ICsxMjI3LDE2IEBAIHN0YXRpYyBpbnQgbDJ0cF94bWl0X2NvcmUoc3RydWN0IGwydHBfc2Vzc2lvbiAqc2Vzc2lvbiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zXFxuIFxcdHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsID0gc2Vzc2lvbi1cXHUwMDNldHVubmVsO1xcbiBcXHR1bnNpZ25lZCBpbnQgZGF0YV9sZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4gXFx0c3RydWN0IHNvY2sgKnNrID0gdHVubmVsLVxcdTAwM2Vzb2NrO1xcbi1cXHRpbnQgaGVhZHJvb20sIHVobGVuLCB1ZHBfbGVuO1xcbiBcXHRpbnQgcmV0ID0gTkVUX1hNSVRfU1VDQ0VTUztcXG4gXFx0c3RydWN0IGluZXRfc29jayAqaW5ldDtcXG4gXFx0c3RydWN0IHVkcGhkciAqdWg7XFxuK1xcdGludCB1ZHBfbGVuO1xcbiBcXG4gXFx0LyogQ2hlY2sgdGhhdCB0aGVyZSdzIGVub3VnaCBoZWFkcm9vbSBpbiB0aGUgc2tiIHRvIGluc2VydCBJUCxcXG4gXFx0ICogVURQIGFuZCBMMlRQIGhlYWRlcnMuIElmIG5vdCBlbm91Z2gsIGV4cGFuZCBpdCB0b1xcbiBcXHQgKiBtYWtlIHJvb20uIEFkanVzdCB0cnVlc2l6ZS5cXG4gXFx0ICovXFxuLVxcdHVobGVuID0gKHR1bm5lbC1cXHUwMDNlZW5jYXAgPT0gTDJUUF9FTkNBUFRZUEVfVURQKSA/IHNpemVvZigqdWgpIDogMDtcXG4tXFx0aGVhZHJvb20gPSBORVRfU0tCX1BBRCArIHNpemVvZihzdHJ1Y3QgaXBoZHIpICsgdWhsZW4gKyBzZXNzaW9uLVxcdTAwM2VoZHJfbGVuO1xcbi1cXHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgaGVhZHJvb20pKSB7XFxuK1xcdGlmIChza2JfY293X2hlYWQoc2tiLCBsMnRwX3Nlc3Npb25fc2tiX2hlYWRyb29tKHNlc3Npb24sIHR1bm5lbCkpKSB7XFxuIFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiBcXHRcXHRyZXR1cm4gTkVUX1hNSVRfRFJPUDtcXG4gXFx0fVxcbkBAIC0xMjkwLDcgKzEyODgsOSBAQCBzdGF0aWMgaW50IGwydHBfeG1pdF9jb3JlKHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb24sIHN0cnVjdCBza19idWZmICpza2IsIHVuc1xcbiBcXHRcXHR1aCA9IHVkcF9oZHIoc2tiKTtcXG4gXFx0XFx0dWgtXFx1MDAzZXNvdXJjZSA9IGluZXQtXFx1MDAzZWluZXRfc3BvcnQ7XFxuIFxcdFxcdHVoLVxcdTAwM2VkZXN0ID0gaW5ldC1cXHUwMDNlaW5ldF9kcG9ydDtcXG4tXFx0XFx0dWRwX2xlbiA9IHVobGVuICsgc2Vzc2lvbi1cXHUwMDNlaGRyX2xlbiArIGRhdGFfbGVuO1xcbitcXG4rXFx0XFx0dWRwX2xlbiA9IGwydHBfdHVubmVsX3VkcF9oZHJsZW4odHVubmVsKTtcXG4rXFx0XFx0dWRwX2xlbiArPSBzZXNzaW9uLVxcdTAwM2VoZHJfbGVuICsgZGF0YV9sZW47XFxuIFxcdFxcdGlmICh1ZHBfbGVuIFxcdTAwM2UgVTE2X01BWCkge1xcbiBcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0XFx0XFx0cmV0ID0gTkVUX1hNSVRfRFJPUDtcXG5AQCAtMTY4OCw2ICsxNjg4LDcgQEAgaW50IGwydHBfdHVubmVsX3JlZ2lzdGVyKHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsLCBzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdH1cXG4gXFxuIFxcdHNrLVxcdTAwM2Vza19hbGxvY2F0aW9uID0gR0ZQX0FUT01JQztcXG4rXFx0dHVubmVsLVxcdTAwM2VsM19vdmVyaGVhZCA9IGtlcm5lbF9zb2NrX2lwX292ZXJoZWFkKHNrKTtcXG4gXFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4gXFxuIFxcdHNvY2tfaG9sZChzayk7XFxuZGlmZiAtLWdpdCBhL25ldC9sMnRwL2wydHBfY29yZS5oIGIvbmV0L2wydHAvbDJ0cF9jb3JlLmhcXG5pbmRleCBmZmQ4Y2VkM2E1MWZmLi4yYzQxODc3YjZjZTU3IDEwMDY0NFxcbi0tLSBhL25ldC9sMnRwL2wydHBfY29yZS5oXFxuKysrIGIvbmV0L2wydHAvbDJ0cF9jb3JlLmhcXG5AQCAtMTY3LDYgKzE2Nyw3IEBAIHN0cnVjdCBsMnRwX3R1bm5lbCB7XFxuIFxcdHUzMlxcdFxcdFxcdHR1bm5lbF9pZDtcXG4gXFx0dTMyXFx0XFx0XFx0cGVlcl90dW5uZWxfaWQ7XFxuIFxcdGludFxcdFxcdFxcdHZlcnNpb247XFx0LyogMj1cXHUwMDNlTDJUUHYyLCAzPVxcdTAwM2VMMlRQdjMgKi9cXG4rXFx0aW50XFx0XFx0XFx0bDNfb3ZlcmhlYWQ7XFx0LyogSVAgaGVhZGVyIG92ZXJoZWFkICovXFxuIFxcbiBcXHRjaGFyXFx0XFx0XFx0bmFtZVtMMlRQX1RVTk5FTF9OQU1FX01BWF07IC8qIGZvciBsb2dnaW5nICovXFxuIFxcdGVudW0gbDJ0cF9lbmNhcF90eXBlXFx0ZW5jYXA7XFxuQEAgLTMzNCw2ICszMzUsMjUgQEAgc3RhdGljIGlubGluZSBpbnQgbDJ0cF92M19lbnN1cmVfb3B0X2luX2xpbmVhcihzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uLCBzdHJcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgaW50IGwydHBfdHVubmVsX3VkcF9oZHJsZW4oc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwpXFxuK3tcXG4rXFx0cmV0dXJuIHR1bm5lbC1cXHUwMDNlZW5jYXAgPT0gTDJUUF9FTkNBUFRZUEVfVURQID9cXG4rXFx0XFx0c2l6ZW9mKHN0cnVjdCB1ZHBoZHIpIDogMDtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnQgbDJ0cF9zZXNzaW9uX292ZXJoZWFkKHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb24sXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsKVxcbit7XFxuK1xcdHJldHVybiBsMnRwX3R1bm5lbF91ZHBfaGRybGVuKHR1bm5lbCkgKyBzZXNzaW9uLVxcdTAwM2VoZHJfbGVuICtcXG4rXFx0XFx0dHVubmVsLVxcdTAwM2VsM19vdmVyaGVhZDtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnQgbDJ0cF9zZXNzaW9uX3NrYl9oZWFkcm9vbShzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwpXFxuK3tcXG4rXFx0cmV0dXJuIE5FVF9TS0JfUEFEICsgbDJ0cF9zZXNzaW9uX292ZXJoZWFkKHNlc3Npb24sIHR1bm5lbCk7XFxuK31cXG4rXFxuICNkZWZpbmUgTU9EVUxFX0FMSUFTX0wyVFBfUFdUWVBFKHR5cGUpIFxcXFxcXG4gXFx0TU9EVUxFX0FMSUFTKFxcXCJuZXQtbDJ0cC10eXBlLVxcXCIgX19zdHJpbmdpZnkodHlwZSkpXFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbDJ0cC9sMnRwX2V0aC5jIGIvbmV0L2wydHAvbDJ0cF9ldGguY1xcbmluZGV4IGE0OTU2ZWY5NTc0Y2MuLjY4N2NlMWM2ZGI5NDYgMTAwNjQ0XFxuLS0tIGEvbmV0L2wydHAvbDJ0cF9ldGguY1xcbisrKyBiL25ldC9sMnRwL2wydHBfZXRoLmNcXG5AQCAtMTg4LDMxICsxODgsMTcgQEAgc3RhdGljIHZvaWQgbDJ0cF9ldGhfYWRqdXN0X210dShzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbCxcXG4gXFx0XFx0XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4ge1xcbiBcXHR1bnNpZ25lZCBpbnQgb3ZlcmhlYWQgPSAwO1xcbi1cXHR1MzIgbDNfb3ZlcmhlYWQgPSAwO1xcbiBcXHR1MzIgbXR1O1xcbiBcXG4tXFx0LyogaWYgdGhlIGVuY2FwIGlzIFVEUCwgYWNjb3VudCBmb3IgVURQIGhlYWRlciBzaXplICovXFxuLVxcdGlmICh0dW5uZWwtXFx1MDAzZWVuY2FwID09IEwyVFBfRU5DQVBUWVBFX1VEUCkge1xcbi1cXHRcXHRvdmVyaGVhZCArPSBzaXplb2Yoc3RydWN0IHVkcGhkcik7XFxuLVxcdFxcdGRldi1cXHUwMDNlbmVlZGVkX2hlYWRyb29tICs9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTtcXG4tXFx0fVxcbi1cXG4tXFx0bG9ja19zb2NrKHR1bm5lbC1cXHUwMDNlc29jayk7XFxuLVxcdGwzX292ZXJoZWFkID0ga2VybmVsX3NvY2tfaXBfb3ZlcmhlYWQodHVubmVsLVxcdTAwM2Vzb2NrKTtcXG4tXFx0cmVsZWFzZV9zb2NrKHR1bm5lbC1cXHUwMDNlc29jayk7XFxuLVxcbi1cXHRpZiAobDNfb3ZlcmhlYWQgPT0gMCkge1xcbitcXHRpZiAodHVubmVsLVxcdTAwM2VsM19vdmVyaGVhZCA9PSAwKSB7XFxuIFxcdFxcdC8qIEwzIE92ZXJoZWFkIGNvdWxkbid0IGJlIGlkZW50aWZpZWQsIHRoaXMgY291bGQgYmVcXG4tXFx0XFx0ICogYmVjYXVzZSB0dW5uZWwtXFx1MDAzZXNvY2sgd2FzIE5VTEwgb3IgdGhlIHNvY2tldCdzXFxuLVxcdFxcdCAqIGFkZHJlc3MgZmFtaWx5IHdhcyBub3QgSVB2NCBvciBJUHY2LFxcbi1cXHRcXHQgKiBkZXYgbXR1IHN0YXlzIGF0IDE1MDAuXFxuK1xcdFxcdCAqIGJlY2F1c2UgdGhlIHNvY2tldCdzIGFkZHJlc3MgZmFtaWx5IHdhcyBub3QgSVB2NFxcbitcXHRcXHQgKiBvciBJUHY2IC0gZGV2IG10dSBzdGF5cyBhdCAxNTAwLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuLVxcdC8qIEFkanVzdCBNVFUsIGZhY3RvciBvdmVyaGVhZCAtIHVuZGVybGF5IEwzLCBvdmVybGF5IEwyIGhkclxcbi1cXHQgKiBVRFAgb3ZlcmhlYWQsIGlmIGFueSwgd2FzIGFscmVhZHkgZmFjdG9yZWQgaW4gYWJvdmUuXFxuLVxcdCAqL1xcbi1cXHRvdmVyaGVhZCArPSBzZXNzaW9uLVxcdTAwM2VoZHJfbGVuICsgRVRIX0hMRU4gKyBsM19vdmVyaGVhZDtcXG4rXFx0LyogQ2FsY3VsYXRlIHJlcXVpcmVkIG92ZXJoZWFkICovXFxuK1xcdG92ZXJoZWFkID0gRVRIX0hMRU4gKyBsMnRwX3Nlc3Npb25fb3ZlcmhlYWQoc2Vzc2lvbiwgdHVubmVsKTtcXG4gXFxuIFxcdG10dSA9IGwydHBfdHVubmVsX2RzdF9tdHUodHVubmVsKSAtIG92ZXJoZWFkO1xcbiBcXHRpZiAobXR1IFxcdTAwM2MgZGV2LVxcdTAwM2VtaW5fbXR1IHx8IG10dSBcXHUwMDNlIGRldi1cXHUwMDNlbWF4X210dSlcXG5AQCAtMjIwLDcgKzIwNiw3IEBAIHN0YXRpYyB2b2lkIGwydHBfZXRoX2FkanVzdF9tdHUoc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwsXFxuIFxcdGVsc2VcXG4gXFx0XFx0ZGV2LVxcdTAwM2VtdHUgPSBtdHU7XFxuIFxcbi1cXHRkZXYtXFx1MDAzZW5lZWRlZF9oZWFkcm9vbSArPSBzZXNzaW9uLVxcdTAwM2VoZHJfbGVuO1xcbitcXHRkZXYtXFx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IGwydHBfc2Vzc2lvbl9za2JfaGVhZHJvb20oc2Vzc2lvbiwgdHVubmVsKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBsMnRwX2V0aF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjM6Mzc6MTEuMzkwMDI2MjY1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTUzNDE3NjU4ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTDJUUFwiLFxuICAgIFwiTDJUUF9WM1wiLFxuICAgIFwiTDJUUF9FVEhcIixcbiAgICBcIkwyVFBfSVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsMnRwX3R1bm5lbF9yZWdpc3RlclwiLFxuICAgIFwibDJ0cF9ubF9jbWRfc2Vzc2lvbl9jcmVhdGVcIixcbiAgICBcImwydHBfeG1pdF9za2JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgTDJUUCBoZWFkcm9vbSBhbmQgb3ZlcmhlYWQgY2FsY3VsYXRpb25zLCBtb2RpZnlpbmcgTVRVIGFkanVzdG1lbnQgYW5kIFNLQiBoZWFkcm9vbSBjaGVja3MgaW4gTDJUUCBjb3JlIGFuZCBMMlRQIEV0aGVybmV0IHBzZXVkb3dpcmUgY29kZS4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRjZTBjNjM3M2IzYmFiNDgxNmY4Y2EwNDljZWZlNDM0NmM5NzAyZmFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyA4IDIzOjM3OjA4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2wydHAvbDJ0cF9jb3JlLmMgYi9uZXQvbDJ0cC9sMnRwX2NvcmUuY1xuaW5kZXggNDcxMmNjNDE4ODFhMy4uZjUyYmYzYjUzMjkwNyAxMDA2NDRcbi0tLSBhL25ldC9sMnRwL2wydHBfY29yZS5jXG4rKysgYi9uZXQvbDJ0cC9sMnRwX2NvcmUuY1xuQEAgLTEyMjcsMTggKzEyMjcsMTYgQEAgc3RhdGljIGludCBsMnRwX3htaXRfY29yZShzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNcbiBcdHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsID0gc2Vzc2lvbi1cdTAwM2V0dW5uZWw7XG4gXHR1bnNpZ25lZCBpbnQgZGF0YV9sZW4gPSBza2ItXHUwMDNlbGVuO1xuIFx0c3RydWN0IHNvY2sgKnNrID0gdHVubmVsLVx1MDAzZXNvY2s7XG4tXHRpbnQgaGVhZHJvb20sIHVobGVuLCB1ZHBfbGVuO1xuIFx0aW50IHJldCA9IE5FVF9YTUlUX1NVQ0NFU1M7XG4gXHRzdHJ1Y3QgaW5ldF9zb2NrICppbmV0O1xuIFx0c3RydWN0IHVkcGhkciAqdWg7XG4rXHRpbnQgdWRwX2xlbjtcbiBcbiBcdC8qIENoZWNrIHRoYXQgdGhlcmUncyBlbm91Z2ggaGVhZHJvb20gaW4gdGhlIHNrYiB0byBpbnNlcnQgSVAsXG4gXHQgKiBVRFAgYW5kIEwyVFAgaGVhZGVycy4gSWYgbm90IGVub3VnaCwgZXhwYW5kIGl0IHRvXG4gXHQgKiBtYWtlIHJvb20uIEFkanVzdCB0cnVlc2l6ZS5cbiBcdCAqL1xuLVx0dWhsZW4gPSAodHVubmVsLVx1MDAzZWVuY2FwID09IEwyVFBfRU5DQVBUWVBFX1VEUCkgPyBzaXplb2YoKnVoKSA6IDA7XG4tXHRoZWFkcm9vbSA9IE5FVF9TS0JfUEFEICsgc2l6ZW9mKHN0cnVjdCBpcGhkcikgKyB1aGxlbiArIHNlc3Npb24tXHUwMDNlaGRyX2xlbjtcbi1cdGlmIChza2JfY293X2hlYWQoc2tiLCBoZWFkcm9vbSkpIHtcbitcdGlmIChza2JfY293X2hlYWQoc2tiLCBsMnRwX3Nlc3Npb25fc2tiX2hlYWRyb29tKHNlc3Npb24sIHR1bm5lbCkpKSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRyZXR1cm4gTkVUX1hNSVRfRFJPUDtcbiBcdH1cbkBAIC0xMjkwLDcgKzEyODgsOSBAQCBzdGF0aWMgaW50IGwydHBfeG1pdF9jb3JlKHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb24sIHN0cnVjdCBza19idWZmICpza2IsIHVuc1xuIFx0XHR1aCA9IHVkcF9oZHIoc2tiKTtcbiBcdFx0dWgtXHUwMDNlc291cmNlID0gaW5ldC1cdTAwM2VpbmV0X3Nwb3J0O1xuIFx0XHR1aC1cdTAwM2VkZXN0ID0gaW5ldC1cdTAwM2VpbmV0X2Rwb3J0O1xuLVx0XHR1ZHBfbGVuID0gdWhsZW4gKyBzZXNzaW9uLVx1MDAzZWhkcl9sZW4gKyBkYXRhX2xlbjtcbitcbitcdFx0dWRwX2xlbiA9IGwydHBfdHVubmVsX3VkcF9oZHJsZW4odHVubmVsKTtcbitcdFx0dWRwX2xlbiArPSBzZXNzaW9uLVx1MDAzZWhkcl9sZW4gKyBkYXRhX2xlbjtcbiBcdFx0aWYgKHVkcF9sZW4gXHUwMDNlIFUxNl9NQVgpIHtcbiBcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0XHRyZXQgPSBORVRfWE1JVF9EUk9QO1xuQEAgLTE2ODgsNiArMTY4OCw3IEBAIGludCBsMnRwX3R1bm5lbF9yZWdpc3RlcihzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbCwgc3RydWN0IG5ldCAqbmV0LFxuIFx0fVxuIFxuIFx0c2stXHUwMDNlc2tfYWxsb2NhdGlvbiA9IEdGUF9BVE9NSUM7XG4rXHR0dW5uZWwtXHUwMDNlbDNfb3ZlcmhlYWQgPSBrZXJuZWxfc29ja19pcF9vdmVyaGVhZChzayk7XG4gXHRyZWxlYXNlX3NvY2soc2spO1xuIFxuIFx0c29ja19ob2xkKHNrKTtcbmRpZmYgLS1naXQgYS9uZXQvbDJ0cC9sMnRwX2NvcmUuaCBiL25ldC9sMnRwL2wydHBfY29yZS5oXG5pbmRleCBmZmQ4Y2VkM2E1MWZmLi4yYzQxODc3YjZjZTU3IDEwMDY0NFxuLS0tIGEvbmV0L2wydHAvbDJ0cF9jb3JlLmhcbisrKyBiL25ldC9sMnRwL2wydHBfY29yZS5oXG5AQCAtMTY3LDYgKzE2Nyw3IEBAIHN0cnVjdCBsMnRwX3R1bm5lbCB7XG4gXHR1MzJcdFx0XHR0dW5uZWxfaWQ7XG4gXHR1MzJcdFx0XHRwZWVyX3R1bm5lbF9pZDtcbiBcdGludFx0XHRcdHZlcnNpb247XHQvKiAyPVx1MDAzZUwyVFB2MiwgMz1cdTAwM2VMMlRQdjMgKi9cbitcdGludFx0XHRcdGwzX292ZXJoZWFkO1x0LyogSVAgaGVhZGVyIG92ZXJoZWFkICovXG4gXG4gXHRjaGFyXHRcdFx0bmFtZVtMMlRQX1RVTk5FTF9OQU1FX01BWF07IC8qIGZvciBsb2dnaW5nICovXG4gXHRlbnVtIGwydHBfZW5jYXBfdHlwZVx0ZW5jYXA7XG5AQCAtMzM0LDYgKzMzNSwyNSBAQCBzdGF0aWMgaW5saW5lIGludCBsMnRwX3YzX2Vuc3VyZV9vcHRfaW5fbGluZWFyKHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb24sIHN0clxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgaW50IGwydHBfdHVubmVsX3VkcF9oZHJsZW4oc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwpXG4re1xuK1x0cmV0dXJuIHR1bm5lbC1cdTAwM2VlbmNhcCA9PSBMMlRQX0VOQ0FQVFlQRV9VRFAgP1xuK1x0XHRzaXplb2Yoc3RydWN0IHVkcGhkcikgOiAwO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludCBsMnRwX3Nlc3Npb25fb3ZlcmhlYWQoc3RydWN0IGwydHBfc2Vzc2lvbiAqc2Vzc2lvbixcbitcdFx0XHRcdFx0c3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwpXG4re1xuK1x0cmV0dXJuIGwydHBfdHVubmVsX3VkcF9oZHJsZW4odHVubmVsKSArIHNlc3Npb24tXHUwMDNlaGRyX2xlbiArXG4rXHRcdHR1bm5lbC1cdTAwM2VsM19vdmVyaGVhZDtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgbDJ0cF9zZXNzaW9uX3NrYl9oZWFkcm9vbShzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uLFxuK1x0XHRcdFx0XHQgICAgc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwpXG4re1xuK1x0cmV0dXJuIE5FVF9TS0JfUEFEICsgbDJ0cF9zZXNzaW9uX292ZXJoZWFkKHNlc3Npb24sIHR1bm5lbCk7XG4rfVxuK1xuICNkZWZpbmUgTU9EVUxFX0FMSUFTX0wyVFBfUFdUWVBFKHR5cGUpIFxcXG4gXHRNT0RVTEVfQUxJQVMoXCJuZXQtbDJ0cC10eXBlLVwiIF9fc3RyaW5naWZ5KHR5cGUpKVxuIFxuZGlmZiAtLWdpdCBhL25ldC9sMnRwL2wydHBfZXRoLmMgYi9uZXQvbDJ0cC9sMnRwX2V0aC5jXG5pbmRleCBhNDk1NmVmOTU3NGNjLi42ODdjZTFjNmRiOTQ2IDEwMDY0NFxuLS0tIGEvbmV0L2wydHAvbDJ0cF9ldGguY1xuKysrIGIvbmV0L2wydHAvbDJ0cF9ldGguY1xuQEAgLTE4OCwzMSArMTg4LDE3IEBAIHN0YXRpYyB2b2lkIGwydHBfZXRoX2FkanVzdF9tdHUoc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwsXG4gXHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHVuc2lnbmVkIGludCBvdmVyaGVhZCA9IDA7XG4tXHR1MzIgbDNfb3ZlcmhlYWQgPSAwO1xuIFx0dTMyIG10dTtcbiBcbi1cdC8qIGlmIHRoZSBlbmNhcCBpcyBVRFAsIGFjY291bnQgZm9yIFVEUCBoZWFkZXIgc2l6ZSAqL1xuLVx0aWYgKHR1bm5lbC1cdTAwM2VlbmNhcCA9PSBMMlRQX0VOQ0FQVFlQRV9VRFApIHtcbi1cdFx0b3ZlcmhlYWQgKz0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpO1xuLVx0XHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tICs9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTtcbi1cdH1cbi1cbi1cdGxvY2tfc29jayh0dW5uZWwtXHUwMDNlc29jayk7XG4tXHRsM19vdmVyaGVhZCA9IGtlcm5lbF9zb2NrX2lwX292ZXJoZWFkKHR1bm5lbC1cdTAwM2Vzb2NrKTtcbi1cdHJlbGVhc2Vfc29jayh0dW5uZWwtXHUwMDNlc29jayk7XG4tXG4tXHRpZiAobDNfb3ZlcmhlYWQgPT0gMCkge1xuK1x0aWYgKHR1bm5lbC1cdTAwM2VsM19vdmVyaGVhZCA9PSAwKSB7XG4gXHRcdC8qIEwzIE92ZXJoZWFkIGNvdWxkbid0IGJlIGlkZW50aWZpZWQsIHRoaXMgY291bGQgYmVcbi1cdFx0ICogYmVjYXVzZSB0dW5uZWwtXHUwMDNlc29jayB3YXMgTlVMTCBvciB0aGUgc29ja2V0J3Ncbi1cdFx0ICogYWRkcmVzcyBmYW1pbHkgd2FzIG5vdCBJUHY0IG9yIElQdjYsXG4tXHRcdCAqIGRldiBtdHUgc3RheXMgYXQgMTUwMC5cbitcdFx0ICogYmVjYXVzZSB0aGUgc29ja2V0J3MgYWRkcmVzcyBmYW1pbHkgd2FzIG5vdCBJUHY0XG4rXHRcdCAqIG9yIElQdjYgLSBkZXYgbXR1IHN0YXlzIGF0IDE1MDAuXG4gXHRcdCAqL1xuIFx0XHRyZXR1cm47XG4gXHR9XG4tXHQvKiBBZGp1c3QgTVRVLCBmYWN0b3Igb3ZlcmhlYWQgLSB1bmRlcmxheSBMMywgb3ZlcmxheSBMMiBoZHJcbi1cdCAqIFVEUCBvdmVyaGVhZCwgaWYgYW55LCB3YXMgYWxyZWFkeSBmYWN0b3JlZCBpbiBhYm92ZS5cbi1cdCAqL1xuLVx0b3ZlcmhlYWQgKz0gc2Vzc2lvbi1cdTAwM2VoZHJfbGVuICsgRVRIX0hMRU4gKyBsM19vdmVyaGVhZDtcbitcdC8qIENhbGN1bGF0ZSByZXF1aXJlZCBvdmVyaGVhZCAqL1xuK1x0b3ZlcmhlYWQgPSBFVEhfSExFTiArIGwydHBfc2Vzc2lvbl9vdmVyaGVhZChzZXNzaW9uLCB0dW5uZWwpO1xuIFxuIFx0bXR1ID0gbDJ0cF90dW5uZWxfZHN0X210dSh0dW5uZWwpIC0gb3ZlcmhlYWQ7XG4gXHRpZiAobXR1IFx1MDAzYyBkZXYtXHUwMDNlbWluX210dSB8fCBtdHUgXHUwMDNlIGRldi1cdTAwM2VtYXhfbXR1KVxuQEAgLTIyMCw3ICsyMDYsNyBAQCBzdGF0aWMgdm9pZCBsMnRwX2V0aF9hZGp1c3RfbXR1KHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsLFxuIFx0ZWxzZVxuIFx0XHRkZXYtXHUwMDNlbXR1ID0gbXR1O1xuIFxuLVx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSArPSBzZXNzaW9uLVx1MDAzZWhkcl9sZW47XG4rXHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gbDJ0cF9zZXNzaW9uX3NrYl9oZWFkcm9vbShzZXNzaW9uLCB0dW5uZWwpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGwydHBfZXRoX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjM6Mzc6MTEuMzkwMDI3NjE1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk3NzcyNjM1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEwyVFAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCdzIGEgcmVmYWN0b3JpbmcgZWZmb3J0IHdpdGhpbiB0aGUgTDJUUCBjb2RlLCBzcGVjaWZpY2FsbHkgZm9jdXNlZCBvbiBob3cgaGVhZHJvb20gYW5kIG92ZXJoZWFkIGFyZSBjYWxjdWxhdGVkLiBJdCBsb29rcyBsaWtlIGl0J3MgdG91Y2hpbmcgYG5ldC9sMnRwL2wydHBfY29yZS5jYCwgYGwydHBfY29yZS5oYCwgYW5kIGBsMnRwX2V0aC5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIHNjb3BlLiBUaGV5J3JlIGludHJvZHVjaW5nIHRoZXNlIG5ldyBoZWxwZXJzOiBgbDJ0cF9zZXNzaW9uX3NrYl9oZWFkcm9vbWAsIGBsMnRwX3Nlc3Npb25fb3ZlcmhlYWRgLCBhbmQgYGwydHBfdHVubmVsX3VkcF9oZHJsZW5gLiBUaGF0J3MgYSBzdHJvbmcgaW5kaWNhdGlvbiBvZiBhIG1vdmUgdG93YXJkcyBtb3JlIG1vZHVsYXIgYW5kIHBvdGVudGlhbGx5IG1vcmUgYWNjdXJhdGUgY2FsY3VsYXRpb25zLiBDYWNoaW5nIGBsM19vdmVyaGVhZGAgaW4gYHN0cnVjdCBsMnRwX3R1bm5lbGAgZHVyaW5nIGBsMnRwX3R1bm5lbF9yZWdpc3RlcmAgaXMgYSBzbWFydCBtb3ZlIOKAkyBwcmUtY2FsY3VsYXRpbmcgYW5kIHN0b3JpbmcgaXQgdG8gYXZvaWQgcmVkdW5kYW50IGNvbXB1dGF0aW9ucyBsYXRlciBvbiBpcyBzb21ldGhpbmcgSSB3b3VsZCBkbyB0b28uXG5cblRoZSBtb2RpZmljYXRpb25zIHRvIGBsMnRwX2V0aF9hZGp1c3RfbXR1YCBhbmQgYGwydHBfeG1pdF9jb3JlYCBhcmUgd2hlcmUgdGhlIHJ1YmJlciBoaXRzIHRoZSByb2FkLiBUaGV5IGFyZSBjbGVhcmx5IGltcGxlbWVudGluZyB0aGVzZSBuZXcgZnVuY3Rpb25zLiBUaGUgYGwydHBfeG1pdF9jb3JlYCBjaGFuZ2UsIHNwZWNpZmljYWxseSB1c2luZyBgbDJ0cF9zZXNzaW9uX3NrYl9oZWFkcm9vbWAgZm9yIGBza2JfY293X2hlYWRgLCBpcyBpbnRlcmVzdGluZy4gVGhpcyBpbmRpY2F0ZXMgYSBmb2N1cyBvbiBtaW5pbWl6aW5nIG1lbW9yeSBjb3B5aW5nLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgcGVyZm9ybWFuY2UgaW4gYW55IG5ldHdvcmtpbmcgY29udGV4dC5cblxuQWxyaWdodCwgdGhlIG5leHQgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIHRoaXMgaXMgc29tZXRoaW5nIHdvcnRoIGZ1enppbmcuIFdlbGwsIEwyVFAgaXMgZGVmaW5pdGVseSByZWFjaGFibGUsIGFuZCBpdCdzIGFic29sdXRlbHkgYSB0YXJnZXQgd29ydGggZXhwbG9yaW5nLiBMZXQncyBzZWUuLi4gdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIGFyZSBgQ09ORklHX0wyVFBgLCBgQ09ORklHX0wyVFBfVjNgLCBhbmQgYENPTkZJR19MMlRQX0VUSGAsIHdoaWNoIEkgY2FuIGNoZWNrIHdpdGggYSBxdWljayBncmVwIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBhdHRhY2sgc3VyZmFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzcyMSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIzOjM3OjE3LjM2Nzc1NjIyNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODU3OTc3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTDJUUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbDJ0cC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9sMnRwL0tjb25maWctNS1cXG5uZXQvbDJ0cC9LY29uZmlnOjY6bWVudWNvbmZpZyBMMlRQXFxubmV0L2wydHAvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJMYXllciBUd28gVHVubmVsaW5nIFByb3RvY29sIChMMlRQKVxcXCJcXG4tLVxcbm5ldC9sMnRwL0tjb25maWctMzUtXFxubmV0L2wydHAvS2NvbmZpZzozNjpjb25maWcgTDJUUF9ERUJVR0ZTXFxubmV0L2wydHAvS2NvbmZpZy0zNy1cXHR0cmlzdGF0ZSBcXFwiTDJUUCBkZWJ1Z2ZzIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbDJ0cC9LY29uZmlnLTQ4LVxcbm5ldC9sMnRwL0tjb25maWc6NDk6Y29uZmlnIEwyVFBfVjNcXG5uZXQvbDJ0cC9LY29uZmlnLTUwLVxcdGJvb2wgXFxcIkwyVFB2MyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2wydHAvS2NvbmZpZy02OS1cXG5uZXQvbDJ0cC9LY29uZmlnOjcwOmNvbmZpZyBMMlRQX0lQXFxubmV0L2wydHAvS2NvbmZpZy03MS1cXHR0cmlzdGF0ZSBcXFwiTDJUUCBJUCBlbmNhcHN1bGF0aW9uIGZvciBMMlRQdjNcXFwiXFxuLS1cXG5uZXQvbDJ0cC9LY29uZmlnLTg2LVxcbm5ldC9sMnRwL0tjb25maWc6ODc6Y29uZmlnIEwyVFBfRVRIXFxubmV0L2wydHAvS2NvbmZpZy04OC1cXHR0cmlzdGF0ZSBcXFwiTDJUUCBldGhlcm5ldCBwc2V1ZG93aXJlIHN1cHBvcnQgZm9yIEwyVFB2M1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjM6Mzc6MTcuNDE2MzQxOTgxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUyNzY4NDM3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTDJUUCBDb25maWd1cmF0aW9uIGFuZCBGdW5jdGlvbiBNb2RpZmljYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnM6IGBMMlRQYCwgYEwyVFBfVjNgLCBgTDJUUF9JUGAsIGFuZCBgTDJUUF9FVEhgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYmVlbiBjaGFuZ2VkLCB3aGF0IHRoZSBpbXBhY3QgaXMuIFRoZSBsaXN0ZWQgZnVuY3Rpb25zIGFyZSB3aGVyZSB0aGUgbW9kaWZpY2F0aW9ucyBzZWVtIHRvIHJlc2lkZS4gU3BlY2lmaWNhbGx5LCBJIHNlZTogYGwydHBfeG1pdF9jb3JlYCwgYGwydHBfdHVubmVsX3JlZ2lzdGVyYCwgYGwydHBfZXRoX2FkanVzdF9tdHVgLCBhbmQgYGwydHBfZXRoX2NyZWF0ZWAuXG5cbk5vdywgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgTDJUUCB3b3JrcywgYGwydHBfeG1pdF9jb3JlYCBpcyBsaWtlbHkgdGhlIGNvcmUgdHJhbnNtaXNzaW9uIGZ1bmN0aW9uLCBzbyB0aGF0J3MgZGVmaW5pdGVseSBhIGtleSBhcmVhIHRvIHNjcnV0aW5pemUuIEFuZCBgbDJ0cF9ldGhfY3JlYXRlYCBhbHNvIHNvdW5kcyBsaWtlIGEgY3JpdGljYWwgcG9pbnQuIFRoYXQgbWlnaHQgaGF2ZSB0byBkbyB3aXRoIGhvdyB0aGUgTDJUUCBvdmVyIEV0aGVybmV0IGludGVyZmFjZSBpcyBzZXQgdXAuIEknbSBnb2luZyB0byBzdGFydCBieSBmb2N1c2luZyBvbiB0aG9zZSB0d28uIFRoZXkgbG9vayBsaWtlIHRoZSBiZXN0IHN0YXJ0aW5nIHBvaW50cyB0byBhc3Nlc3MgdGhlIGNoYW5nZXMgYW5kIHRoZWlyIHJhbWlmaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3NzQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjM6Mzc6MjAuOTQ0MDI4MzQ5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTM4NTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImwydHBfeG1pdF9jb3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9sMnRwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbDJ0cC9sMnRwX2NvcmUuYz0xMjA5PXN0YXRpYyBpbnQgbDJ0cF94bWl0X3F1ZXVlKHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZmxvd2kgKmZsKVxcbi0tXFxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTIyNC1cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYzoxMjI1OnN0YXRpYyBpbnQgbDJ0cF94bWl0X2NvcmUoc3RydWN0IGwydHBfc2Vzc2lvbiAqc2Vzc2lvbiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50ICpsZW4pXFxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTIyNi17XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYz0xMzI4PWludCBsMnRwX3htaXRfc2tiKHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb24sIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xMzMyLVxcbm5ldC9sMnRwL2wydHBfY29yZS5jOjEzMzM6XFx0cmV0ID0gbDJ0cF94bWl0X2NvcmUoc2Vzc2lvbiwgc2tiLCBcXHUwMDI2bGVuKTtcXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xMzM0LVxcdGlmIChyZXQgPT0gTkVUX1hNSVRfU1VDQ0VTUykge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMzozNzoyMC45ODg5NjkyMDZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzUxMjgyMjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGNvZGUgc25pcHBldDpcblxuKipEaXZpbmcgaW50byB0aGUgTDJUUCBUcmFuc21pc3Npb24gUGF0aCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBMMlRQIHBhY2tldHMgYXJlIHRyYW5zbWl0dGVkLiBJJ3ZlIG5vdGVkIHRoYXQgYGwydHBfeG1pdF9jb3JlYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoYXQncyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZyDigJMgaXQgaW1wbGllcyB0aGlzIGZ1bmN0aW9uJ3Mgc2NvcGUgaXMgbGltaXRlZCB0byB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LiBJdCdzIGxpa2VseSBhbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24uIE5vdywgdGhlIGtleSBpcyB0aGF0IGBsMnRwX3htaXRfc2tiYCBjYWxscyBgbDJ0cF94bWl0X2NvcmVgLiBTbywgYGwydHBfeG1pdF9za2JgIHNlZW1zIHRvIGJlIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBzZW5kaW5nIEwyVFAgZGF0YSwgYW5kIGl0J3MgZGVsZWdhdGluZyB0aGUgYWN0dWFsIHdvcmsgdG8gdGhpcyBgbDJ0cF94bWl0X2NvcmVgIGZ1bmN0aW9uLiBNYWtlcyBzZW5zZTsgZ29vZCBzZXBhcmF0aW9uIG9mIGNvbmNlcm5zLlxuXG5OZXh0LCBJIHRoaW5rIGl0J3Mgd29ydGggdGFraW5nIGEgY2xvc2VyIGxvb2sgYXQgYGwydHBfZXRoX2FkanVzdF9tdHVgIGFuZCBgbDJ0cF9ldGhfY3JlYXRlYC4gVGhvc2Ugc2VlbSBsaWtlIHRoZXkncmUgcmVsYXRlZCB0byBFdGhlcm5ldCBzcGVjaWZpY2FsbHksIGdpdmVuIHRoZSBuYW1lLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIHRoZSB0cmFuc21pc3Npb24gcHJvY2Vzcy4gVGhpcyBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIG1hcHBpbmcgb3V0IHRoZSBjcml0aWNhbCBkYXRhIHBhdGhzIGFuZCBmdW5jdGlvbiBjYWxscyB3aXRoaW4gdGhpcyBwYXJ0aWN1bGFyIEwyVFAgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NjIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMzozNzoyNC4zNDAyNTQyNjVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3NTYxOTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibDJ0cF9ldGhfYWRqdXN0X210dVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbDJ0cC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2wydHAvbDJ0cF9ldGguYz0xNjY9c3RhdGljIHZvaWQgbDJ0cF9ldGhfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmFyZylcXG4tLVxcbm5ldC9sMnRwL2wydHBfZXRoLmMtMTg1LVxcbm5ldC9sMnRwL2wydHBfZXRoLmM6MTg2OnN0YXRpYyB2b2lkIGwydHBfZXRoX2FkanVzdF9tdHUoc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwsXFxubmV0L2wydHAvbDJ0cF9ldGguYy0xODctXFx0XFx0XFx0XFx0c3RydWN0IGwydHBfc2Vzc2lvbiAqc2Vzc2lvbixcXG4tLVxcbm5ldC9sMnRwL2wydHBfZXRoLmM9MjEyPXN0YXRpYyBpbnQgbDJ0cF9ldGhfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwsXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2V0aC5jLTI0OC1cXHRkZXYtXFx1MDAzZW1heF9tdHUgPSBFVEhfTUFYX01UVTtcXG5uZXQvbDJ0cC9sMnRwX2V0aC5jOjI0OTpcXHRsMnRwX2V0aF9hZGp1c3RfbXR1KHR1bm5lbCwgc2Vzc2lvbiwgZGV2KTtcXG5uZXQvbDJ0cC9sMnRwX2V0aC5jLTI1MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjM6Mzc6MjQuMzg4MDEyNDYyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxMTI4MTkzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6XG5cbioqQW5hbHl6aW5nIHRoZSBMMlRQL0V0aGVybmV0IE1UVSBBZGp1c3RtZW50KipcblxuT2theSwgc28gYGwydHBfZXRoX2FkanVzdF9tdHVgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IHNjb3BlIGFuZCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIHdpdGhpbiB0aGUgbW9kdWxlLiBHb29kIHRvIGtub3cuIEFuZCBgbDJ0cF9ldGhfY3JlYXRlYCAqY2FsbHMqIGl0LiBIbW0sIHRoYXQncyBpbnRlcmVzdGluZy4gVGhlIE1UVSBhZGp1c3RtZW50IGlzIGhhcHBlbmluZyBkdXJpbmcgdGhlIGNyZWF0aW9uIG9mIGFuIEwyVFAvRXRoZXJuZXQgZW50aXR5LiBUaGF0IG1ha2VzIHNlbnNlLCBidXQgSSB3YW50IHRvIHVuZGVyc3RhbmQgKndoeSogdGhlIGFkanVzdG1lbnQgaXMgbmVlZGVkLCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBMMlRQIGFyY2hpdGVjdHVyZS4gTXkgbmV4dCBzdGVwIGlzIGNsZWFyIC0gSSBuZWVkIHRvIGp1bXAgaW50byBgbDJ0cF9ldGhfY3JlYXRlYCBhbmQgc2VlIGV4YWN0bHkgd2hhdCdzIGdvaW5nIG9uIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDk5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjM6Mzc6MjcuNjk5Mjk2ODI0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzA2NDE5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsMnRwX2V0aF9jcmVhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2wydHAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9sMnRwL2wydHBfZXRoLmM9MTg2PXN0YXRpYyB2b2lkIGwydHBfZXRoX2FkanVzdF9tdHUoc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwsXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2V0aC5jLTIxMS1cXG5uZXQvbDJ0cC9sMnRwX2V0aC5jOjIxMjpzdGF0aWMgaW50IGwydHBfZXRoX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsLFxcbm5ldC9sMnRwL2wydHBfZXRoLmMtMjEzLVxcdFxcdFxcdCAgIHUzMiBzZXNzaW9uX2lkLCB1MzIgcGVlcl9zZXNzaW9uX2lkLFxcbi0tXFxubmV0L2wydHAvbDJ0cF9ldGguYz0zMDU9c3RhdGljIGNvbnN0IHN0cnVjdCBsMnRwX25sX2NtZF9vcHMgbDJ0cF9ldGhfbmxfY21kX29wcyA9IHtcXG5uZXQvbDJ0cC9sMnRwX2V0aC5jOjMwNjpcXHQuc2Vzc2lvbl9jcmVhdGVcXHQ9IGwydHBfZXRoX2NyZWF0ZSxcXG5uZXQvbDJ0cC9sMnRwX2V0aC5jLTMwNy1cXHQuc2Vzc2lvbl9kZWxldGVcXHQ9IGwydHBfc2Vzc2lvbl9kZWxldGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIzOjM3OjI3Ljc0MjM2MzY3MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTQ5NDA1MTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqRGlzc2VjdGluZyB0aGUgTDJUUCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGwydHBfZXRoX2NyZWF0ZWAgZnVuY3Rpb24uIEl0J3MgZGVjbGFyZWQgYXMgYHN0YXRpY2AsIHdoaWNoIG1lYW5zIGl0J3MgaW50ZXJuYWwgdG8gdGhpcyBwYXJ0aWN1bGFyIHNvdXJjZSBmaWxlLiBUaGF0J3MgZmluZSwgbm90aGluZyBpbmhlcmVudGx5IHdyb25nIHdpdGggdGhhdC4gQnV0IHRoZW4gSSBzZWUgaXQncyBhbHNvIGEgY2FsbGJhY2sgZm9yIHRoZSBgc2Vzc2lvbl9jcmVhdGVgIG9wZXJhdGlvbiB3aXRoaW4gYGwydHBfbmxfY21kX29wc2AuIFRoYXQncyBpbnRlcmVzdGluZywgYmVjYXVzZSBpdCBtZWFucyB0aGlzIGxvY2FsIGZ1bmN0aW9uIGlzIHRoZSBvbmUgaGFuZGxpbmcgdGhlIGNyZWF0aW9uIG9mIGEgc2Vzc2lvbiBmcm9tIGEgbmV0bGluayBjb21tYW5kLiBUaGlzIG1pZ2h0IGJlIHdoZXJlIHRoZSBhY3R1YWwgRXRoZXJuZXQgaW50ZXJmYWNlIGlzIHNldCB1cC4gT2theSwgdGhhdCBtYWtlcyBzZW5zZS5cblxuV2FpdCBhIG1pbnV0ZSwgSSBzZWUgdGhhdCBgbDJ0cF90dW5uZWxfcmVnaXN0ZXJgIGlzIGV4cG9ydGVkLiBUaGF0J3MgdGhlIHJlYWwga2V5IHRvIHRoaXMgd2hvbGUgcHV6emxlLiBXZSBjYW4gcmVnaXN0ZXIgbmV3IHR1bm5lbHMgdG8gdGhlIGludGVyZmFjZSB0aHJvdWdoIHRoaXMgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2MTMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMzozNzozMC44OTE3NzExNjVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NzY0NDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImwydHBfdHVubmVsX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9sMnRwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbDJ0cC9sMnRwX2NvcmUuYz0xNjEzPXN0YXRpYyBpbnQgbDJ0cF92YWxpZGF0ZV9zb2NrZXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xNjQyLVxcbm5ldC9sMnRwL2wydHBfY29yZS5jOjE2NDM6aW50IGwydHBfdHVubmVsX3JlZ2lzdGVyKHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsLCBzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTY0NC1cXHRcXHRcXHQgc3RydWN0IGwydHBfdHVubmVsX2NmZyAqY2ZnKVxcbi0tXFxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTcyMC19XFxubmV0L2wydHAvbDJ0cF9jb3JlLmM6MTcyMTpFWFBPUlRfU1lNQk9MX0dQTChsMnRwX3R1bm5lbF9yZWdpc3Rlcik7XFxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTcyMi1cXG4tLVxcbm5ldC9sMnRwL2wydHBfY29yZS5oPTIzNj1pbnQgbDJ0cF90dW5uZWxfY3JlYXRlKGludCBmZCwgaW50IHZlcnNpb24sIHUzMiB0dW5uZWxfaWQsXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuaC0yMzgtXFx0XFx0ICAgICAgIHN0cnVjdCBsMnRwX3R1bm5lbCAqKnR1bm5lbHApO1xcbm5ldC9sMnRwL2wydHBfY29yZS5oOjIzOTppbnQgbDJ0cF90dW5uZWxfcmVnaXN0ZXIoc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwsIHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvbDJ0cC9sMnRwX2NvcmUuaC0yNDAtXFx0XFx0XFx0IHN0cnVjdCBsMnRwX3R1bm5lbF9jZmcgKmNmZyk7XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYz0xODU9c3RhdGljIGludCBsMnRwX25sX2NtZF90dW5uZWxfY3JlYXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYy0yNDUtXFx0cmVmY291bnRfaW5jKFxcdTAwMjZ0dW5uZWwtXFx1MDAzZXJlZl9jb3VudCk7XFxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmM6MjQ2OlxcdHJldCA9IGwydHBfdHVubmVsX3JlZ2lzdGVyKHR1bm5lbCwgbmV0LCBcXHUwMDI2Y2ZnKTtcXG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYy0yNDctXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbm5ldC9sMnRwL2wydHBfcHBwLmM9NjI3PXN0YXRpYyBzdHJ1Y3QgbDJ0cF90dW5uZWwgKnBwcG9sMnRwX3R1bm5lbF9nZXQoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L2wydHAvbDJ0cF9wcHAuYy02NDctXFxubmV0L2wydHAvbDJ0cF9wcHAuYzo2NDg6XFx0XFx0XFx0LyogUHJldmVudCBsMnRwX3R1bm5lbF9yZWdpc3RlcigpIGZyb20gdHJ5aW5nIHRvIHNldCB1cFxcbm5ldC9sMnRwL2wydHBfcHBwLmMtNjQ5LVxcdFxcdFxcdCAqIGEga2VybmVsIHNvY2tldC5cXG4tLVxcbm5ldC9sMnRwL2wydHBfcHBwLmMtNjYyLVxcdFxcdFxcdHJlZmNvdW50X2luYyhcXHUwMDI2dHVubmVsLVxcdTAwM2VyZWZfY291bnQpO1xcbm5ldC9sMnRwL2wydHBfcHBwLmM6NjYzOlxcdFxcdFxcdGVycm9yID0gbDJ0cF90dW5uZWxfcmVnaXN0ZXIodHVubmVsLCBuZXQsIFxcdTAwMjZ0Y2ZnKTtcXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTY2NC1cXHRcXHRcXHRpZiAoZXJyb3IgXFx1MDAzYyAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIzOjM3OjMwLjkzNjU0MDY0MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTM3MTg4MTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24sIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipMMlRQIE1vZHVsZSBGb2N1cyBcdTAwMjYgS2V5IEV4cG9ydCoqXG5cbkFscmlnaHQsIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBpdCBzZWVtcyBsaWtlIHdlJ3ZlIHplcm9lZCBpbiBvbiB0aGUgYGwydHBfdHVubmVsX3JlZ2lzdGVyYCBmdW5jdGlvbiBhcyBhIGtleSBlbGVtZW50LiBUaGF0J3MgYSBzb2xpZCBjaG9pY2UgZm9yIGEgZm9jdXMgc3ltYm9sIOKAkyBpdCBsaWtlbHkgcmVwcmVzZW50cyB0aGUgY29yZSBtZWNoYW5pc20gZm9yIGVzdGFibGlzaGluZyBhbmQgbWFuYWdpbmcgTDJUUCB0dW5uZWwgaW5zdGFuY2VzIHdpdGhpbiB0aGUgc3lzdGVtLiBHb29kLiBXZSB1bmRlcnN0YW5kIHRoZSBzaWduaWZpY2FuY2Ugb2YgdGhpcy5cblxuQW5kLCBvZiBjb3Vyc2UsIHRoZSBgbDJ0cF94bWl0X3NrYmAgZnVuY3Rpb24gaXMgZXhwb3NlZC4gTWFrZXMgc2Vuc2UuIFRoYXQncyBhYnNvbHV0ZWx5IGNyaXRpY2FsLiBFeHBvcnRpbmcgdGhpcyBpbmRpY2F0ZXMgaXRzIGltcG9ydGFuY2UgaW4gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBhcmNoaXRlY3R1cmUuIEl0J3MgbGlrZWx5IHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgdHJhbnNtaXR0aW5nIFNvY2tldCBCdWZmZXIgKFNLQikgZGF0YSBhY3Jvc3MgdGhlIEwyVFAgdHVubmVsIGludGVyZmFjZS4gVGhpcyBsaWtlbHkgZW5hYmxlcyBlbmNhcHN1bGF0aW9uIG9yIGRlY2Fwc3VsYXRpb24uIFRoaXMgbWVhbnMgaXQncyBhIHZpdGFsIHBhcnQgb2YgdGhlIGRhdGEgZmxvdyBhbmQgd2lsbCwgdGhlcmVmb3JlLCBiZSBoaWdobHkgcmVsZXZhbnQgdG8gYW55IGFuYWx5c2lzIG9mIEwyVFAgcGVyZm9ybWFuY2UsIGRlYnVnZ2luZywgb3Igb3B0aW1pemF0aW9uIGVmZm9ydHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2NDQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMzozNzozNC44NzM3MzEwMzNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDExMDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImwydHBfeG1pdF9za2JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2wydHAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9sMnRwL2wydHBfY29yZS5jPTEyMjU9c3RhdGljIGludCBsMnRwX3htaXRfY29yZShzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgKmxlbilcXG4tLVxcbm5ldC9sMnRwL2wydHBfY29yZS5jLTEzMjctICovXFxubmV0L2wydHAvbDJ0cF9jb3JlLmM6MTMyODppbnQgbDJ0cF94bWl0X3NrYihzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9sMnRwL2wydHBfY29yZS5jLTEzMjkte1xcbi0tXFxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTM0NC19XFxubmV0L2wydHAvbDJ0cF9jb3JlLmM6MTM0NTpFWFBPUlRfU1lNQk9MX0dQTChsMnRwX3htaXRfc2tiKTtcXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xMzQ2LVxcbi0tXFxubmV0L2wydHAvbDJ0cF9jb3JlLmg9MjYxPXZvaWQgbDJ0cF9zZXNzaW9uX3NldF9oZWFkZXJfbGVuKHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb24sIGludCB2ZXJzaW9uLFxcbm5ldC9sMnRwL2wydHBfY29yZS5oLTI2Mi1cXHRcXHRcXHRcXHQgZW51bSBsMnRwX2VuY2FwX3R5cGUgZW5jYXApO1xcbm5ldC9sMnRwL2wydHBfY29yZS5oOjI2MzppbnQgbDJ0cF94bWl0X3NrYihzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5uZXQvbDJ0cC9sMnRwX2NvcmUuaC0yNjQtXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2V0aC5jPTcwPXN0YXRpYyBuZXRkZXZfdHhfdCBsMnRwX2V0aF9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2wydHAvbDJ0cF9ldGguYy03NC1cXHR1bnNpZ25lZCBpbnQgbGVuID0gc2tiLVxcdTAwM2VsZW47XFxubmV0L2wydHAvbDJ0cF9ldGguYzo3NTpcXHRpbnQgcmV0ID0gbDJ0cF94bWl0X3NrYihzZXNzaW9uLCBza2IpO1xcbm5ldC9sMnRwL2wydHBfZXRoLmMtNzYtXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jPTI1MD1zdGF0aWMgaW50IHBwcG9sMnRwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcXG4tLVxcbm5ldC9sMnRwL2wydHBfcHBwLmMtMzAyLVxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG5uZXQvbDJ0cC9sMnRwX3BwcC5jOjMwMzpcXHRsMnRwX3htaXRfc2tiKHNlc3Npb24sIHNrYik7XFxubmV0L2wydHAvbDJ0cF9wcHAuYy0zMDQtXFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jPTMzMD1zdGF0aWMgaW50IHBwcG9sMnRwX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2wydHAvbDJ0cF9wcHAuYy0zNjEtXFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbm5ldC9sMnRwL2wydHBfcHBwLmM6MzYyOlxcdGwydHBfeG1pdF9za2Ioc2Vzc2lvbiwgc2tiKTtcXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTM2My1cXHRsb2NhbF9iaF9lbmFibGUoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjM6Mzc6MzQuOTIxNzQ2MzVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAxMzU0ODA2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipUcmFjaW5nIHRoZSBOZXR3b3JrIFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgTDJUUCBwYWNrZXRzIGFyZSB0cmFuc21pdHRlZC4gSSBzZWUgYGwydHBfeG1pdF9za2JgIGlzIGFuIGV4cG9ydGVkIHN5bWJvbDsgdGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gSXQgY2FsbHMgYGwydHBfeG1pdF9jb3JlYCwgc28gdGhhdCdzIHRoZSBjb3JlIHRyYW5zbWlzc2lvbiBsb2dpYy4gTm93LCBJIHNlZSB0aGlzIGZ1bmN0aW9uIGBsMnRwX2V0aF9jcmVhdGVgLiBJdCdzIG1hcmtlZCBhcyBzdGF0aWMsIG1lYW5pbmcgaXQncyBvbmx5IHZpc2libGUgd2l0aGluIGl0cyBjb21waWxhdGlvbiB1bml0LCBidXQgd2FpdC4uLiBJIHJlY29nbml6ZSBpdDsgSXQncyBjYWxsZWQgYnkgYGwydHBfbmxfY21kX29wcy5zZXNzaW9uX2NyZWF0ZWAsIHdoaWNoIHNlZW1zIGltcG9ydGFudC4gTGV0IG1lIGNyb3NzLXJlZmVyZW5jZSwgdGhlIG5ldGxpbmsgY29tbWFuZCBhc3NvY2lhdGVkIHdpdGggc2Vzc2lvbiBjcmVhdGlvbiBpcyBgTDJUUF9DTURfU0VTU0lPTl9DUkVBVEVgLlxuXG5Pa2F5LCBJJ3ZlIGdvdCBpdC4gVGhlIGZ1bmN0aW9uIGBsMnRwX25sX2NtZF9zZXNzaW9uX2NyZWF0ZWAgaGFuZGxlcyB0aGF0IHNwZWNpZmljIE5ldGxpbmsgY29tbWFuZC4gQW5kICp0aGF0KiBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5LCBjYWxscyBgbDJ0cF9ldGhfY3JlYXRlYCBpZiB0aGUgdHVubmVsIHR5cGUgaXMgYEwyVFBfUFdUWVBFX0VUSGAuIE9rYXksIHNvIGBsMnRwX2V0aF9jcmVhdGVgIGhhcyBhIHNwZWNpZmljIGpvYiBpbiBldGhlcm5ldCB0dW5uZWwgc2V0dXAuIEFoLCBhbmQganVzdCB0byBjb25maXJtLCBgbDJ0cF9ldGhfY3JlYXRlYCBpcyBhY3R1YWxseSBkZWZpbmVkIGluIGBsMnRwX2V0aC5jYC5cblxuUmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgc2Vzc2lvbiBjcmVhdGlvbiBwcm9jZXNzIGluIG1vcmUgZGV0YWlsLiBMZXQncyBkaWcgaW50byBgbDJ0cF9ubF9jbWRfc2Vzc2lvbl9jcmVhdGVgIHRvIHNlZSB3aGF0J3MgcmVhbGx5IGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODcxMiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMzozNzo0MC45MzUyOTc2ODNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NTYxNTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImwydHBfbmxfY21kX3Nlc3Npb25fY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9sMnRwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbDJ0cC9sMnRwX25ldGxpbmsuYz00OTk9c3RhdGljIGludCBsMnRwX25sX2NtZF90dW5uZWxfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYy01MjctXFxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmM6NTI4OnN0YXRpYyBpbnQgbDJ0cF9ubF9jbWRfc2Vzc2lvbl9jcmVhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYy01Mjkte1xcbi0tXFxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmM9OTM1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbDJ0cF9ubF9vcHNbXSA9IHtcXG4tLVxcbm5ldC9sMnRwL2wydHBfbmV0bGluay5jLTk2OS1cXHRcXHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXFxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmM6OTcwOlxcdFxcdC5kb2l0ID0gbDJ0cF9ubF9jbWRfc2Vzc2lvbl9jcmVhdGUsXFxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmMtOTcxLVxcdFxcdC5mbGFncyA9IEdFTkxfVU5TX0FETUlOX1BFUk0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIzOjM3OjQwLjk4Mzg2MzQ1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4ODA3MTYwNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCBoZXJlLlxuXG4qKkFuYWx5emluZyBMMlRQIE1vZHVsZSBGb2N1cyBQb2ludHMqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBMMlRQIGNvZGUsIGFuZCBpbW1lZGlhdGVseSB0d28gZnVuY3Rpb24gbmFtZXMganVtcCBvdXQgYXMgZ29vZCBmb2N1cyBwb2ludHMgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gU3BlY2lmaWNhbGx5LCBgbDJ0cF9ubF9jbWRfc2Vzc2lvbl9jcmVhdGVgIGFuZCBgbDJ0cF90dW5uZWxfcmVnaXN0ZXJgLiBUaG9zZSBzZWVtIGxpa2Uga2V5IGZ1bmN0aW9ucyBpbiB0aGUgc2V0dXAgYW5kIG1hbmFnZW1lbnQgb2YgdGhlc2UgdHVubmVscy5cblxuTm93LCBnbGFuY2luZyBhdCB0aGUgY29uZmlndXJhdGlvbnMsIGBMMlRQYCwgYEwyVFBfVjNgLCBhbmQgYEwyVFBfRVRIYCBhcmUgdGhlIG9uZXMgdGhhdCBzdGFuZCBvdXQgYXMgaW1wb3J0YW50IGNvbnRleHQsIGFzIEkgd291bGQgZXhwZWN0LlxuXG5MZXQgbWUgemVybyBpbiBvbiBgbDJ0cF9ldGhfYWRqdXN0X210dWAgdG8gc2VlIHdoZXJlIGl0IGdldHMgaW52b2tlZC4gQWgsIGl0IGlzIGNhbGxlZCB3aXRoaW4gYGwydHBfZXRoX2NyZWF0ZWAsIHdoaWNoIHNlZW1zIGxvZ2ljYWwgZ2l2ZW4gaXRzIG5hbWUuIEknbGwgbmVlZCB0byBjaGVjayBpZiBpdCdzIGNhbGxlZCBhbnl3aGVyZSBlbHNlLiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyBpZiBzb21ldGhpbmcgdGhhdCBzZWVtcyBzcGVjaWZpYywgaXMgbW9yZSBnZW5lcmFsLCBhcyB0aGF0IHdpbGwgZ2l2ZSBtZSBjbHVlcyBhYm91dCB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBtb2R1bGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1MzksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjM6Mzc6NDQuODY0NTgyMTY0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTIyMDk0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsMnRwX2V0aF9hZGp1c3RfbXR1XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9sMnRwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbDJ0cC9sMnRwX2V0aC5jPTE2Nj1zdGF0aWMgdm9pZCBsMnRwX2V0aF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqYXJnKVxcbi0tXFxubmV0L2wydHAvbDJ0cF9ldGguYy0xODUtXFxubmV0L2wydHAvbDJ0cF9ldGguYzoxODY6c3RhdGljIHZvaWQgbDJ0cF9ldGhfYWRqdXN0X210dShzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbCxcXG5uZXQvbDJ0cC9sMnRwX2V0aC5jLTE4Ny1cXHRcXHRcXHRcXHRzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uLFxcbi0tXFxubmV0L2wydHAvbDJ0cF9ldGguYz0yMTI9c3RhdGljIGludCBsMnRwX2V0aF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbCxcXG4tLVxcbm5ldC9sMnRwL2wydHBfZXRoLmMtMjQ4LVxcdGRldi1cXHUwMDNlbWF4X210dSA9IEVUSF9NQVhfTVRVO1xcbm5ldC9sMnRwL2wydHBfZXRoLmM6MjQ5OlxcdGwydHBfZXRoX2FkanVzdF9tdHUodHVubmVsLCBzZXNzaW9uLCBkZXYpO1xcbm5ldC9sMnRwL2wydHBfZXRoLmMtMjUwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMzozNzo0NC45MTM4MDg4MzFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU4MzU3MDU5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEwyVFAgRXRoZXJuZXQgQ3JlYXRpb24gUGF0aCoqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRoZSBFdGhlcm5ldCBMMlRQIGNyZWF0aW9uIHByb2Nlc3MuIEl0IGxvb2tzIGxpa2UgYGwydHBfZXRoX2NyZWF0ZWAgaXMgdGhlIG9ubHkgZnVuY3Rpb24gdGhhdCBjYWxscyB0aGUgcmVsZXZhbnQgY29kZS4gQW5kIHRoYXQgZnVuY3Rpb24sIGluIHR1cm4sIGlzIGludm9rZWQgYnkgYGwydHBfbmxfY21kX3Nlc3Npb25fY3JlYXRlYC4gVGhlcmVmb3JlLCBgbDJ0cF9ubF9jbWRfc2Vzc2lvbl9jcmVhdGVgIHNlZW1zIGxpa2UgdGhlIGtleSBwb2ludCB0byBzdGFydCBpbnZlc3RpZ2F0aW5nLiBJdCdzIHRoZSBjZW50cmFsIGNvbW1hbmQgZm9yIEV0aGVybmV0IEwyVFAgc2Vzc2lvbiBzZXR1cC5cblxuTm93LCBhcyBmb3IgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLCBJJ20gdGhpbmtpbmcgYWJvdXQ6IGBMMlRQYCwgYEwyVFBfVjNgLCBgTDJUUF9FVEhgLCBhbmQgcG9zc2libHkgYEwyVFBfSVBgLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGBuZXQvbDJ0cC9LY29uZmlnYCBmaWxlLCBwYXJ0aWN1bGFybHkgZm9jdXNpbmcgb24gYEwyVFBfRVRIYCwgdG8gc2VlIGlmIGl0cyBhY3RpdmF0aW9uIGhpbmdlcyBvbiBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIG9yIGNvbmZpZ3VyYXRpb25zLiBUaGlzIHdpbGwgcHJvdmlkZSBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgcHJlLXJlcXVpc2l0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTg3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIzOjM3OjQ5LjQ5NzM4MTMwOVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA5MzIzOTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEwyVFBfRVRIXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9sMnRwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2wydHAvS2NvbmZpZz03MD1jb25maWcgTDJUUF9JUFxcbi0tXFxubmV0L2wydHAvS2NvbmZpZy04Ni1cXG5uZXQvbDJ0cC9LY29uZmlnOjg3OmNvbmZpZyBMMlRQX0VUSFxcbm5ldC9sMnRwL0tjb25maWctODgtXFx0dHJpc3RhdGUgXFxcIkwyVFAgZXRoZXJuZXQgcHNldWRvd2lyZSBzdXBwb3J0IGZvciBMMlRQdjNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIzOjM3OjQ5LjU0ODMzNDk4NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDA4NDg3OTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgYG5ldC9sMnRwL0tjb25maWdgIGZpbGUgYW5kIHRoZSBgTDJUUF9FVEhgIGNvbmZpZ3VyYXRpb24gb3B0aW9uOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBMMlRQIEtjb25maWcqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIGBuZXQvbDJ0cC9LY29uZmlnYCBmaWxlLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRoZSBgTDJUUF9FVEhgIG9wdGlvbi4gSSBrbm93IHRoaXMgZmlsZSBpcyBjcnVjaWFsIGZvciBjb25maWd1cmluZyB0aGUgTDJUUCBrZXJuZWwgbW9kdWxlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBFdGhlcm5ldC1zcGVjaWZpYyBMMlRQIGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgYXJlIGF0IHBsYXkuIEknbSBnb2luZyB0byBsb29rIGZvciB0aGUgZGVwZW5kZW5jaWVzLCB3aGljaCBvdGhlciBmZWF0dXJlcyBvciBtb2R1bGVzIHRoaXMgc2V0dGluZyByZWxpZXMgb24gb3Igd2hpY2ggb25lcyByZWx5IG9uIGl0LiBJIGFsc28gbmVlZCB0byB1bmRlcnN0YW5kIGFueSBkZWZhdWx0IHNldHRpbmdzIG9yIGRlc2NyaXB0aW9ucyBwcm92aWRlZCBpbiB0aGUgY29uZmlndXJhdGlvbi4gSXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZSBMMlRQIGltcGxlbWVudGF0aW9uLCBpdHMgY29ubmVjdGlvbiB0byB0aGUgb3ZlcmFsbCBuZXR3b3JrIHN0YWNrLCBhbmQgaG93IGBMMlRQX0VUSGAgZml0cyBpbnRvIHRoYXQgYXJjaGl0ZWN0dXJlLiBBcmUgdGhlcmUgYW55IHNwZWNpZmljIGRyaXZlcnMgb3IgaGFyZHdhcmUgcGxhdGZvcm1zIG1lbnRpb25lZCBpbiByZWxhdGlvbiB0byBFdGhlcm5ldCBzdXBwb3J0PyBUaGlzIGlzIG9mdGVuIHdoZXJlIHlvdSBmaW5kIGNsdWVzIGFib3V0IHRoZSBpbnRlbmRlZCB1c2UgY2FzZXMgYW5kIHBvdGVudGlhbCBsaW1pdGF0aW9ucy4gSSdtIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcywgdG9vLiBBcmUgdGhlcmUgYW55IHdhcm5pbmdzLCBzdWdnZXN0aW9ucywgb3IgY29tbWVudHMgYWJvdXQgc3BlY2lmaWMgaGFyZHdhcmUgY29uZmlndXJhdGlvbnM/IFRoaXMgYW5hbHlzaXMgaXMgaW1wb3J0YW50IGZvciBhIGNvbXBsZXRlIHBpY3R1cmUsIGFzIEkgbmVlZCB0byB1bmRlcnN0YW5kIGFsbCB0aGUgZmFjdG9ycyBpbnZvbHZlZCBpbiBlZmZlY3RpdmVseSBjb25maWd1cmluZyBhbmQgZGVwbG95aW5nIEwyVFAgb3ZlciBFdGhlcm5ldC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2NTYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMzozNzo1Mi45NTY4Mzk4OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbDJ0cC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDgwOlxcdFxcdCAgd2hlbiBVRFAgZW5jYXBzdWxhdGlvbiBpcyBub3QgcmVxdWlyZWQuIFdoZW4gTDJUUCBpcyBjYXJyaWVkXFxuICA4MTpcXHRcXHQgIGluIElQIHBhY2tldHMsIGl0IHVzZWQgSVAgcHJvdG9jb2wgbnVtYmVyIDExNSwgc28gdGhpcyBwb3J0XFxuICA4MjpcXHRcXHQgIG11c3QgYmUgZW5hYmxlZCBpbiBmaXJld2FsbHMuXFxuICA4MzpcXHRcXG4gIDg0OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxcbiAgODU6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBsMnRwX2lwLlxcbiAgODY6XFx0XFxuICA4NzpcXHRjb25maWcgTDJUUF9FVEhcXG4gIDg4OlxcdFxcdHRyaXN0YXRlIFxcXCJMMlRQIGV0aGVybmV0IHBzZXVkb3dpcmUgc3VwcG9ydCBmb3IgTDJUUHYzXFxcIlxcbiAgODk6XFx0XFx0ZGVwZW5kcyBvbiBMMlRQX1YzXFxuICA5MDpcXHRcXHRoZWxwXFxuICA5MTpcXHRcXHQgIFN1cHBvcnQgZm9yIGNhcnJ5aW5nIHJhdyBldGhlcm5ldCBmcmFtZXMgb3ZlciBMMlRQdjMuXFxuICA5MjpcXHRcXG4gIDkzOlxcdFxcdCAgRnJvbSBSRkMgNDcxOSBcXHUwMDNjaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjNDcxOS50eHRcXHUwMDNlLlxcbiAgOTQ6XFx0XFxuICA5NTpcXHRcXHQgIFRoZSBMYXllciAyIFR1bm5lbGluZyBQcm90b2NvbCwgVmVyc2lvbiAzIChMMlRQdjMpIGNhbiBiZVxcbiAgOTY6XFx0XFx0ICB1c2VkIGFzIGEgY29udHJvbCBwcm90b2NvbCBhbmQgZm9yIGRhdGEgZW5jYXBzdWxhdGlvbiB0byBzZXRcXG4gIDk3OlxcdFxcdCAgdXAgUHNldWRvd2lyZXMgZm9yIHRyYW5zcG9ydGluZyBsYXllciAyIFBhY2tldCBEYXRhIFVuaXRzXFxuICA5ODpcXHRcXHQgIGFjcm9zcyBhbiBJUCBuZXR3b3JrIFtSRkMzOTMxXS5cXG4gIDk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMzozNzo1Mi45NTY4OTk3N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTM5NDk4NjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkwyVFB2MyBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIHNvIHRoZSBjb3JlIGlzc3VlIGhpbmdlcyBvbiBgTDJUUF9WM2AuIFRoYXQncyB3aGVyZSB0aGUgY3JpdGljYWwgYXJjaGl0ZWN0dXJhbCBkZWNpc2lvbnMgYXJlIGdvaW5nIHRvIGJlIG1hZGUuIEJ1dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgc3BlY2lmaWNhbGx5ICp3aHkqIGBMMlRQX1YzYCBpcyBiZWluZyBicm91Z2h0IHVwLiBJIG5lZWQgdG8gZGVsdmUgaW50byB0aGUgZGV0YWlscyBoZXJlLiBXaGF0IGlzIGl0IGFib3V0IHRoaXMgcGFydGljdWxhciBwcm90b2NvbCB0aGF0IHJlcXVpcmVzIGZ1cnRoZXIgZXZhbHVhdGlvbiBvciBpbnRlZ3JhdGlvbj8gQXJlIHdlIGxvb2tpbmcgYXQgdHJhbnNwb3J0LCBjb250cm9sIHBsYW5lLCBkYXRhIHBsYW5lLCBvciBhIGNvbWJpbmF0aW9uPyBUaGlzIGlzIHRoZSBjZW50cmFsIHBvaW50IHRvIGNvbnNpZGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTMyNiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjM6Mzc6NTUuODk2NDAxMjA3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9sMnRwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDA6XFx0XFx0ICBTdXBwb3J0IGZvciBsMnRwIGRpcmVjdG9yeSBpbiBkZWJ1Z2ZzIGZpbGVzeXN0ZW0uIFRoaXMgbWF5IGJlXFxuICA0MTpcXHRcXHQgIHVzZWQgdG8gZHVtcCBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgbDJ0cCBkcml2ZXJzIGZvciBwcm9ibGVtXFxuICA0MjpcXHRcXHQgIGFuYWx5c2lzLlxcbiAgNDM6XFx0XFxuICA0NDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5ICdZJy5cXG4gIDQ1OlxcdFxcbiAgNDY6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlXFxuICA0NzpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIGwydHBfZGVidWdmcy5cXG4gIDQ4OlxcdFxcbiAgNDk6XFx0Y29uZmlnIEwyVFBfVjNcXG4gIDUwOlxcdFxcdGJvb2wgXFxcIkwyVFB2MyBzdXBwb3J0XFxcIlxcbiAgNTE6XFx0XFx0ZGVwZW5kcyBvbiBMMlRQXFxuICA1MjpcXHRcXHRoZWxwXFxuICA1MzpcXHRcXHQgIExheWVyIFR3byBUdW5uZWxpbmcgUHJvdG9jb2wgVmVyc2lvbiAzXFxuICA1NDpcXHRcXG4gIDU1OlxcdFxcdCAgRnJvbSBSRkMgMzkzMSBcXHUwMDNjaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMzkzMS50eHRcXHUwMDNlLlxcbiAgNTY6XFx0XFxuICA1NzpcXHRcXHQgIFRoZSBMYXllciBUd28gVHVubmVsaW5nIFByb3RvY29sIChMMlRQKSBwcm92aWRlcyBhIGR5bmFtaWNcXG4gIDU4OlxcdFxcdCAgbWVjaGFuaXNtIGZvciB0dW5uZWxpbmcgTGF5ZXIgMiAoTDIpIFxcXCJjaXJjdWl0c1xcXCIgYWNyb3NzIGFcXG4gIDU5OlxcdFxcdCAgcGFja2V0LW9yaWVudGVkIGRhdGEgbmV0d29yayAoZS5nLiwgb3ZlciBJUCkuICBMMlRQLCBhc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMzozNzo1NS44OTY0NjkxNzdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQwNTk0NzM4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd24sIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkwyVFAgSW5xdWlyeSBcdTAwMjYgRGVwZW5kZW5jeSoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZyBhYm91dCB0aGlzIHNpdHVhdGlvbiwgYW5kIGltbWVkaWF0ZWx5IG15IG1pbmQgZ29lcyB0byB0aGUgTGF5ZXIgMiBUdW5uZWxpbmcgUHJvdG9jb2wsIGBMMlRQYC4gVGhlIGNvbnRleHQgbGlrZWx5IGhpbmdlcyBvbiBpdHMgdXNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHJvbGUgYEwyVFBgIHBsYXlzIGhlcmUuIFdoYXQgaXMgdGhlIHBhcnRpY3VsYXIgYXNwZWN0IG9mIGBMMlRQYCB0aGF0J3MgcmVsZXZhbnQ/IElzIGl0IGl0cyBzZWN1cml0eSwgaXRzIHRyYW5zcG9ydCBtZWNoYW5pc20sIGl0cyBpbXBsZW1lbnRhdGlvbiBxdWlya3M/IEkgbmVlZCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGhvdyBgTDJUUGAgY29tZXMgaW50byBwbGF5IHRvIGdpdmUgYSBtb3JlIGNvbmNpc2Ugc3VtbWFyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4MjIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIzOjM3OjU5LjMwMjQxODkxMVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjU2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbDJ0cC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIExheWVyIFR3byBUdW5uZWxpbmcgUHJvdG9jb2wgKEwyVFApXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgTDJUUFxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIkxheWVyIFR3byBUdW5uZWxpbmcgUHJvdG9jb2wgKEwyVFApXFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgOTpcXHRcXHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgTGF5ZXIgVHdvIFR1bm5lbGluZyBQcm90b2NvbFxcbiAgMTI6XFx0XFxuICAxMzpcXHRcXHQgIEZyb20gUkZDIDI2NjEgXFx1MDAzY2h0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzI2NjEudHh0XFx1MDAzZS5cXG4gIDE0OlxcdFxcbiAgMTU6XFx0XFx0ICBMMlRQIGZhY2lsaXRhdGVzIHRoZSB0dW5uZWxpbmcgb2YgcGFja2V0cyBhY3Jvc3MgYW5cXG4gIDE2OlxcdFxcdCAgaW50ZXJ2ZW5pbmcgbmV0d29yayBpbiBhIHdheSB0aGF0IGlzIGFzIHRyYW5zcGFyZW50IGFzXFxuICAxNzpcXHRcXHQgIHBvc3NpYmxlIHRvIGJvdGggZW5kLXVzZXJzIGFuZCBhcHBsaWNhdGlvbnMuXFxuICAxODpcXHRcXG4gIDE5OlxcdFxcdCAgTDJUUCBpcyBvZnRlbiB1c2VkIHRvIHR1bm5lbCBQUFAgdHJhZmZpYyBvdmVyIElQXFxuICAyMDpcXHRcXHQgIHR1bm5lbHMuIE9uZSBJUCB0dW5uZWwgbWF5IGNhcnJ5IHRob3VzYW5kcyBvZiBpbmRpdmlkdWFsIFBQUFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMzozNzo1OS4zMDI0ODY4MTFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM0ODMzNjcxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBMMlRQIEZ1enppbmcgVGFyZ2V0KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaGluZ2VzIG9uIHRoZSBwcmVzZW5jZSBvZiBgSU5FVGAsIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgc3RhY2suIEdpdmVuIHRoYXQsIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBzZWVtIHRvIGJlIGBMMlRQYCwgYEwyVFBfVjNgLCBhbmQgYEwyVFBfRVRIYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGtleSBzeW1ib2xzLCBhbmQgdGhlIGluaXRpYWwgc3VzcGVjdHMgbG9vayBsaWtlIGBsMnRwX3R1bm5lbF9yZWdpc3RlcmAsIGBsMnRwX25sX2NtZF9zZXNzaW9uX2NyZWF0ZWAsIGFuZCwgY3J1Y2lhbGx5LCBgbDJ0cF94bWl0X3NrYmAuXG5cbk5vdywgaXMgYGwydHBfeG1pdF9za2JgIHJlYWxseSB0aGUgYmVzdCBmdW5jdGlvbiB0byBmb2N1cyBvbj8gQSBxdWljayBjaGVjayBzaG93cyB0aGF0IGl0ICppcyogZXhwb3J0ZWQgYW5kIGNhbGxlZCBieSBzZXZlcmFsIGltcG9ydGFudCBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBgbDJ0cF9ldGhfZGV2X3htaXRgLCBgcHBwb2wydHBfc2VuZG1zZ2AsIGFuZCBgcHBwb2wydHBfeG1pdGAuIEFoYSEgYGwydHBfZXRoX2Rldl94bWl0YCBpcyB0aGUgYG5kb19zdGFydF94bWl0YCBmb3IgTDJUUCBldGhlcm5ldCBkZXZpY2VzLiBUaGF0J3MgYSBzdHJvbmcgaW5kaWNhdG9yIHRoYXQgZnV6emluZyBgbDJ0cF94bWl0X3NrYmAgaXMgYSB2YWxpZCBhbmQgcG90ZW50aWFsbHkgZnJ1aXRmdWwgYXBwcm9hY2guXG5cbkkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFllcywgdGhlIGBMMlRQX0lQYCBjb25maWcgaXMgYWxzbyBjbGVhcmx5IHJlbGV2YW50IGhlcmUsIHNpbmNlIHdlJ3JlIGRlYWxpbmcgd2l0aCBMMlRQIG92ZXIgSVAuIExldCdzIGluY2x1ZGUgdGhhdCBpbiB0aGUgbGlzdC5cblxuT2theSwgbGV0IG1lIHN1bW1hcml6ZSBteSBmaW5kaW5ncyBmb3IgY2xhcml0eS5cblxuKiAgIGBXb3J0aEZ1enppbmdgOiBUcnVlLlxuKiAgIGBSZWFzb25pbmdgOiBUaGlzIHBhdGNoIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQgcmVmYWN0b3JzIEwyVFAgaGVhZHJvb20gYW5kIG92ZXJoZWFkIGNhbGN1bGF0aW9ucy4gVGhpcyBpbnZvbHZlcyBjaGFuZ2VzIHRvIE1UVSBhZGp1c3RtZW50IGFuZCBTS0IgaGVhZHJvb20gY2hlY2tzIHdpdGhpbiB0aGUgTDJUUCBjb3JlIGFuZCB0aGUgTDJUUCBFdGhlcm5ldCBwc2V1ZG93aXJlIGNvZGUuIFRoZSBjaGFuZ2VzIHRvdWNoIGNvcmUgbmV0d29yayBwYXRocywgd2hpY2ggaXMgYWx3YXlzIHdvcnRoIGEgY2xvc2VyIGxvb2suXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBsMnRwX3R1bm5lbF9yZWdpc3RlcmAsIGBsMnRwX25sX2NtZF9zZXNzaW9uX2NyZWF0ZWAsIGBsMnRwX3htaXRfc2tiYC5cbiogICBgRW5hYmxlQ29uZmlnc2A6IGBMMlRQYCwgYEwyVFBfVjNgLCBgTDJUUF9FVEhgLCBhbmQgYEwyVFBfSVBgLlxuXG5UaGlzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyOTAsIk91dHB1dFRva2VucyI6MTM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjM6Mzg6MDYuNjUwODQ2MTM3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA5NDI5ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkwyVFBcIixcbiAgICBcIkwyVFBfVjNcIixcbiAgICBcIkwyVFBfRVRIXCIsXG4gICAgXCJMMlRQX0lQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibDJ0cF90dW5uZWxfcmVnaXN0ZXJcIixcbiAgICBcImwydHBfbmxfY21kX3Nlc3Npb25fY3JlYXRlXCIsXG4gICAgXCJsMnRwX3htaXRfc2tiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIEwyVFAgaGVhZHJvb20gYW5kIG92ZXJoZWFkIGNhbGN1bGF0aW9ucywgbW9kaWZ5aW5nIE1UVSBhZGp1c3RtZW50IGFuZCBTS0IgaGVhZHJvb20gY2hlY2tzIGluIEwyVFAgY29yZSBhbmQgTDJUUCBFdGhlcm5ldCBwc2V1ZG93aXJlIGNvZGUuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBuZXR3b3JrIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkwyVFBcIixcbiAgICBcIkwyVFBfVjNcIixcbiAgICBcIkwyVFBfRVRIXCIsXG4gICAgXCJMMlRQX0lQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibDJ0cF90dW5uZWxfcmVnaXN0ZXJcIixcbiAgICBcImwydHBfbmxfY21kX3Nlc3Npb25fY3JlYXRlXCIsXG4gICAgXCJsMnRwX3htaXRfc2tiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIEwyVFAgaGVhZHJvb20gYW5kIG92ZXJoZWFkIGNhbGN1bGF0aW9ucywgbW9kaWZ5aW5nIE1UVSBhZGp1c3RtZW50IGFuZCBTS0IgaGVhZHJvb20gY2hlY2tzIGluIEwyVFAgY29yZSBhbmQgTDJUUCBFdGhlcm5ldCBwc2V1ZG93aXJlIGNvZGUuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBuZXR3b3JrIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMzozODowNi43MzE3OTU5OTFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzU0OTI1NjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjM6Mzg6MDYuNzMyMzA2NjYxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE0NzU0NDEwNDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGNhbGN1bGF0aW9uIG9mIEwyVFAgcGFja2V0IG92ZXJoZWFkIGFuZCBoZWFkcm9vbSwgY2FjaGluZyB0aGUgTDMgb3ZlcmhlYWQgaW4gdGhlIGBsMnRwX3R1bm5lbGAgc3RydWN0dXJlIGFuZCB1c2luZyBpdCB0byBhY2N1cmF0ZWx5IHJlcXVlc3QgaGVhZHJvb20gdmlhIGBza2JfY293X2hlYWRgIGFuZCBzZXQgTVRVL25lZWRlZF9oZWFkcm9vbSBmb3IgdGhlIGRldmljZS4gVGhlc2UgY2hhbmdlcyBwcmltYXJpbHkgYWZmZWN0IGJ1ZmZlciBzaXplIGNhbGN1bGF0aW9ucyBhbmQgaGVhZHJvb20gYWxsb2NhdGlvbi4gSWYgdGhlIGNhbGN1bGF0aW9ucyBhcmUgaW5jb3JyZWN0LCB0aGV5IGNvdWxkIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyB3cml0ZXMgKGlmIGhlYWRyb29tIGlzIHRvbyBzbWFsbCkgb3IgZnVuY3Rpb25hbCBpc3N1ZXMgKGluY29ycmVjdCBNVFUpLCBib3RoIG9mIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgdGVzdGluZy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLCBub3IgZG9lcyBpdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdGhlIG5ldHdvcmsgb3IgdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGNlMGM2MzczYjNiYWI0ODE2ZjhjYTA0OWNlZmU0MzQ2Yzk3MDJmYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDggMjM6Mzc6MDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbDJ0cC9sMnRwX2NvcmUuYyBiL25ldC9sMnRwL2wydHBfY29yZS5jXG5pbmRleCA0NzEyY2M0MTg4MWEzLi5mNTJiZjNiNTMyOTA3IDEwMDY0NFxuLS0tIGEvbmV0L2wydHAvbDJ0cF9jb3JlLmNcbisrKyBiL25ldC9sMnRwL2wydHBfY29yZS5jXG5AQCAtMTIyNywxOCArMTIyNywxNiBAQCBzdGF0aWMgaW50IGwydHBfeG1pdF9jb3JlKHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb24sIHN0cnVjdCBza19idWZmICpza2IsIHVuc1xuIFx0c3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwgPSBzZXNzaW9uLVx1MDAzZXR1bm5lbDtcbiBcdHVuc2lnbmVkIGludCBkYXRhX2xlbiA9IHNrYi1cdTAwM2VsZW47XG4gXHRzdHJ1Y3Qgc29jayAqc2sgPSB0dW5uZWwtXHUwMDNlc29jaztcbi1cdGludCBoZWFkcm9vbSwgdWhsZW4sIHVkcF9sZW47XG4gXHRpbnQgcmV0ID0gTkVUX1hNSVRfU1VDQ0VTUztcbiBcdHN0cnVjdCBpbmV0X3NvY2sgKmluZXQ7XG4gXHRzdHJ1Y3QgdWRwaGRyICp1aDtcbitcdGludCB1ZHBfbGVuO1xuIFxuIFx0LyogQ2hlY2sgdGhhdCB0aGVyZSdzIGVub3VnaCBoZWFkcm9vbSBpbiB0aGUgc2tiIHRvIGluc2VydCBJUCxcbiBcdCAqIFVEUCBhbmQgTDJUUCBoZWFkZXJzLiBJZiBub3QgZW5vdWdoLCBleHBhbmQgaXQgdG9cbiBcdCAqIG1ha2Ugcm9vbS4gQWRqdXN0IHRydWVzaXplLlxuIFx0ICovXG4tXHR1aGxlbiA9ICh0dW5uZWwtXHUwMDNlZW5jYXAgPT0gTDJUUF9FTkNBUFRZUEVfVURQKSA/IHNpemVvZigqdWgpIDogMDtcbi1cdGhlYWRyb29tID0gTkVUX1NLQl9QQUQgKyBzaXplb2Yoc3RydWN0IGlwaGRyKSArIHVobGVuICsgc2Vzc2lvbi1cdTAwM2VoZHJfbGVuO1xuLVx0aWYgKHNrYl9jb3dfaGVhZChza2IsIGhlYWRyb29tKSkge1xuK1x0aWYgKHNrYl9jb3dfaGVhZChza2IsIGwydHBfc2Vzc2lvbl9za2JfaGVhZHJvb20oc2Vzc2lvbiwgdHVubmVsKSkpIHtcbiBcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdHJldHVybiBORVRfWE1JVF9EUk9QO1xuIFx0fVxuQEAgLTEyOTAsNyArMTI4OCw5IEBAIHN0YXRpYyBpbnQgbDJ0cF94bWl0X2NvcmUoc3RydWN0IGwydHBfc2Vzc2lvbiAqc2Vzc2lvbiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zXG4gXHRcdHVoID0gdWRwX2hkcihza2IpO1xuIFx0XHR1aC1cdTAwM2Vzb3VyY2UgPSBpbmV0LVx1MDAzZWluZXRfc3BvcnQ7XG4gXHRcdHVoLVx1MDAzZWRlc3QgPSBpbmV0LVx1MDAzZWluZXRfZHBvcnQ7XG4tXHRcdHVkcF9sZW4gPSB1aGxlbiArIHNlc3Npb24tXHUwMDNlaGRyX2xlbiArIGRhdGFfbGVuO1xuK1xuK1x0XHR1ZHBfbGVuID0gbDJ0cF90dW5uZWxfdWRwX2hkcmxlbih0dW5uZWwpO1xuK1x0XHR1ZHBfbGVuICs9IHNlc3Npb24tXHUwMDNlaGRyX2xlbiArIGRhdGFfbGVuO1xuIFx0XHRpZiAodWRwX2xlbiBcdTAwM2UgVTE2X01BWCkge1xuIFx0XHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRcdHJldCA9IE5FVF9YTUlUX0RST1A7XG5AQCAtMTY4OCw2ICsxNjg4LDcgQEAgaW50IGwydHBfdHVubmVsX3JlZ2lzdGVyKHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsLCBzdHJ1Y3QgbmV0ICpuZXQsXG4gXHR9XG4gXG4gXHRzay1cdTAwM2Vza19hbGxvY2F0aW9uID0gR0ZQX0FUT01JQztcbitcdHR1bm5lbC1cdTAwM2VsM19vdmVyaGVhZCA9IGtlcm5lbF9zb2NrX2lwX292ZXJoZWFkKHNrKTtcbiBcdHJlbGVhc2Vfc29jayhzayk7XG4gXG4gXHRzb2NrX2hvbGQoc2spO1xuZGlmZiAtLWdpdCBhL25ldC9sMnRwL2wydHBfY29yZS5oIGIvbmV0L2wydHAvbDJ0cF9jb3JlLmhcbmluZGV4IGZmZDhjZWQzYTUxZmYuLjJjNDE4NzdiNmNlNTcgMTAwNjQ0XG4tLS0gYS9uZXQvbDJ0cC9sMnRwX2NvcmUuaFxuKysrIGIvbmV0L2wydHAvbDJ0cF9jb3JlLmhcbkBAIC0xNjcsNiArMTY3LDcgQEAgc3RydWN0IGwydHBfdHVubmVsIHtcbiBcdHUzMlx0XHRcdHR1bm5lbF9pZDtcbiBcdHUzMlx0XHRcdHBlZXJfdHVubmVsX2lkO1xuIFx0aW50XHRcdFx0dmVyc2lvbjtcdC8qIDI9XHUwMDNlTDJUUHYyLCAzPVx1MDAzZUwyVFB2MyAqL1xuK1x0aW50XHRcdFx0bDNfb3ZlcmhlYWQ7XHQvKiBJUCBoZWFkZXIgb3ZlcmhlYWQgKi9cbiBcbiBcdGNoYXJcdFx0XHRuYW1lW0wyVFBfVFVOTkVMX05BTUVfTUFYXTsgLyogZm9yIGxvZ2dpbmcgKi9cbiBcdGVudW0gbDJ0cF9lbmNhcF90eXBlXHRlbmNhcDtcbkBAIC0zMzQsNiArMzM1LDI1IEBAIHN0YXRpYyBpbmxpbmUgaW50IGwydHBfdjNfZW5zdXJlX29wdF9pbl9saW5lYXIoc3RydWN0IGwydHBfc2Vzc2lvbiAqc2Vzc2lvbiwgc3RyXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBpbnQgbDJ0cF90dW5uZWxfdWRwX2hkcmxlbihzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbClcbit7XG4rXHRyZXR1cm4gdHVubmVsLVx1MDAzZWVuY2FwID09IEwyVFBfRU5DQVBUWVBFX1VEUCA/XG4rXHRcdHNpemVvZihzdHJ1Y3QgdWRwaGRyKSA6IDA7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IGwydHBfc2Vzc2lvbl9vdmVyaGVhZChzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbClcbit7XG4rXHRyZXR1cm4gbDJ0cF90dW5uZWxfdWRwX2hkcmxlbih0dW5uZWwpICsgc2Vzc2lvbi1cdTAwM2VoZHJfbGVuICtcbitcdFx0dHVubmVsLVx1MDAzZWwzX292ZXJoZWFkO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludCBsMnRwX3Nlc3Npb25fc2tiX2hlYWRyb29tKHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb24sXG4rXHRcdFx0XHRcdCAgICBzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbClcbit7XG4rXHRyZXR1cm4gTkVUX1NLQl9QQUQgKyBsMnRwX3Nlc3Npb25fb3ZlcmhlYWQoc2Vzc2lvbiwgdHVubmVsKTtcbit9XG4rXG4gI2RlZmluZSBNT0RVTEVfQUxJQVNfTDJUUF9QV1RZUEUodHlwZSkgXFxcbiBcdE1PRFVMRV9BTElBUyhcIm5ldC1sMnRwLXR5cGUtXCIgX19zdHJpbmdpZnkodHlwZSkpXG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2wydHAvbDJ0cF9ldGguYyBiL25ldC9sMnRwL2wydHBfZXRoLmNcbmluZGV4IGE0OTU2ZWY5NTc0Y2MuLjY4N2NlMWM2ZGI5NDYgMTAwNjQ0XG4tLS0gYS9uZXQvbDJ0cC9sMnRwX2V0aC5jXG4rKysgYi9uZXQvbDJ0cC9sMnRwX2V0aC5jXG5AQCAtMTg4LDMxICsxODgsMTcgQEAgc3RhdGljIHZvaWQgbDJ0cF9ldGhfYWRqdXN0X210dShzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbCxcbiBcdFx0XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0dW5zaWduZWQgaW50IG92ZXJoZWFkID0gMDtcbi1cdHUzMiBsM19vdmVyaGVhZCA9IDA7XG4gXHR1MzIgbXR1O1xuIFxuLVx0LyogaWYgdGhlIGVuY2FwIGlzIFVEUCwgYWNjb3VudCBmb3IgVURQIGhlYWRlciBzaXplICovXG4tXHRpZiAodHVubmVsLVx1MDAzZWVuY2FwID09IEwyVFBfRU5DQVBUWVBFX1VEUCkge1xuLVx0XHRvdmVyaGVhZCArPSBzaXplb2Yoc3RydWN0IHVkcGhkcik7XG4tXHRcdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20gKz0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpO1xuLVx0fVxuLVxuLVx0bG9ja19zb2NrKHR1bm5lbC1cdTAwM2Vzb2NrKTtcbi1cdGwzX292ZXJoZWFkID0ga2VybmVsX3NvY2tfaXBfb3ZlcmhlYWQodHVubmVsLVx1MDAzZXNvY2spO1xuLVx0cmVsZWFzZV9zb2NrKHR1bm5lbC1cdTAwM2Vzb2NrKTtcbi1cbi1cdGlmIChsM19vdmVyaGVhZCA9PSAwKSB7XG4rXHRpZiAodHVubmVsLVx1MDAzZWwzX292ZXJoZWFkID09IDApIHtcbiBcdFx0LyogTDMgT3ZlcmhlYWQgY291bGRuJ3QgYmUgaWRlbnRpZmllZCwgdGhpcyBjb3VsZCBiZVxuLVx0XHQgKiBiZWNhdXNlIHR1bm5lbC1cdTAwM2Vzb2NrIHdhcyBOVUxMIG9yIHRoZSBzb2NrZXQnc1xuLVx0XHQgKiBhZGRyZXNzIGZhbWlseSB3YXMgbm90IElQdjQgb3IgSVB2Nixcbi1cdFx0ICogZGV2IG10dSBzdGF5cyBhdCAxNTAwLlxuK1x0XHQgKiBiZWNhdXNlIHRoZSBzb2NrZXQncyBhZGRyZXNzIGZhbWlseSB3YXMgbm90IElQdjRcbitcdFx0ICogb3IgSVB2NiAtIGRldiBtdHUgc3RheXMgYXQgMTUwMC5cbiBcdFx0ICovXG4gXHRcdHJldHVybjtcbiBcdH1cbi1cdC8qIEFkanVzdCBNVFUsIGZhY3RvciBvdmVyaGVhZCAtIHVuZGVybGF5IEwzLCBvdmVybGF5IEwyIGhkclxuLVx0ICogVURQIG92ZXJoZWFkLCBpZiBhbnksIHdhcyBhbHJlYWR5IGZhY3RvcmVkIGluIGFib3ZlLlxuLVx0ICovXG4tXHRvdmVyaGVhZCArPSBzZXNzaW9uLVx1MDAzZWhkcl9sZW4gKyBFVEhfSExFTiArIGwzX292ZXJoZWFkO1xuK1x0LyogQ2FsY3VsYXRlIHJlcXVpcmVkIG92ZXJoZWFkICovXG4rXHRvdmVyaGVhZCA9IEVUSF9ITEVOICsgbDJ0cF9zZXNzaW9uX292ZXJoZWFkKHNlc3Npb24sIHR1bm5lbCk7XG4gXG4gXHRtdHUgPSBsMnRwX3R1bm5lbF9kc3RfbXR1KHR1bm5lbCkgLSBvdmVyaGVhZDtcbiBcdGlmIChtdHUgXHUwMDNjIGRldi1cdTAwM2VtaW5fbXR1IHx8IG10dSBcdTAwM2UgZGV2LVx1MDAzZW1heF9tdHUpXG5AQCAtMjIwLDcgKzIwNiw3IEBAIHN0YXRpYyB2b2lkIGwydHBfZXRoX2FkanVzdF9tdHUoc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwsXG4gXHRlbHNlXG4gXHRcdGRldi1cdTAwM2VtdHUgPSBtdHU7XG4gXG4tXHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tICs9IHNlc3Npb24tXHUwMDNlaGRyX2xlbjtcbitcdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBsMnRwX3Nlc3Npb25fc2tiX2hlYWRyb29tKHNlc3Npb24sIHR1bm5lbCk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbDJ0cF9ldGhfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMzozODowNi43MzIzMDczOTFaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ3NTQzODA3MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogTDJUUCBPdmVyaGVhZCBSZWZhY3RvcioqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggbW9kaWZ5aW5nIHRoZSBMMlRQIGNvZGUsIHNwZWNpZmljYWxseSBmb2N1c2VkIG9uIGhvdyBvdmVyaGVhZCBhbmQgaGVhZHJvb20gYXJlIGNhbGN1bGF0ZWQuIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzLCBcIkFyZSB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgaW50cm9kdWNlZCBoZXJlP1wiLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaW52b2x2ZXMgdGhlc2UgbmV3IGZ1bmN0aW9uczogYGwydHBfc2Vzc2lvbl9vdmVyaGVhZGAsIGBsMnRwX3Nlc3Npb25fc2tiX2hlYWRyb29tYCwgYW5kIGNhY2hpbmcgYGwzX292ZXJoZWFkYCBkdXJpbmcgdHVubmVsIHJlZ2lzdHJhdGlvbi4gSXQgc2VlbXMgdGhlIGludGVudGlvbiBpcyB0byBtYWtlIHRoZSBoZWFkcm9vbSBjYWxjdWxhdGlvbiBtb3JlIHByZWNpc2UsIHVzaW5nIGBsMnRwX3Nlc3Npb25fc2tiX2hlYWRyb29tYCB3aXRoIGBza2JfY293X2hlYWRgIGluIGBsMnRwX3htaXRfY29yZWAgYW5kIGFkanVzdGluZyB0aGUgTVRVIGNhbGN1bGF0aW9uIGluIGBsMnRwX2V0aF9hZGp1c3RfbXR1YC5cblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgZG93biB0aGUgY2FsY3VsYXRpb25zLiBgbDNfb3ZlcmhlYWRgIGdldHMgc3RvcmVkIGluIGB0dW5uZWwtXHUwMDNlbDNfb3ZlcmhlYWRgIHVzaW5nIGBrZXJuZWxfc29ja19pcF9vdmVyaGVhZChzaylgLiBUaGVuLCBgbDJ0cF9zZXNzaW9uX3NrYl9oZWFkcm9vbWAgYWRkcyBgTkVUX1NLQl9QQUQgKyBsMnRwX3Nlc3Npb25fb3ZlcmhlYWQoc2Vzc2lvbiwgdHVubmVsKWAuICBBbmQgdGhhdCBgbDJ0cF9zZXNzaW9uX292ZXJoZWFkYCBhZGRzIHRoZSBVRFAgaGVhZGVyIGxlbmd0aCBpZiBhcHBsaWNhYmxlLCB0aGUgc2Vzc2lvbiBoZWFkZXIgbGVuZ3RoLCBhbmQgdGhlIHR1bm5lbCdzIEwzIG92ZXJoZWFkLlxuXG5Mb29raW5nIGF0IGBsMnRwX3htaXRfY29yZWAsIHRoZSBjb2RlIGhhcyBiZWVuIHVwZGF0ZWQgdG8gdXNlIHRoZSBuZXcgYGwydHBfc2Vzc2lvbl9za2JfaGVhZHJvb21gIGZ1bmN0aW9uLiBCZWZvcmUsIGl0IHdhcyBjYWxjdWxhdGluZyB0aGUgaGVhZHJvb20gZGlyZWN0bHksIGluY2x1ZGluZyB0aGUgSVAgaGVhZGVyIHNpemUuIE5vdywgaXQncyB1c2luZyB0aGUgY2FjaGVkIGBsM19vdmVyaGVhZGAuIE15IGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIGlzIGNvbnNpc3RlbnQuIEl0J3Mgbm93IGV4cGxpY2l0bHkgdXNpbmcgYHR1bm5lbC1cdTAwM2VsM19vdmVyaGVhZGAsIHdoaWNoLCBhZ2FpbiwgaXMgdGhlIHJlc3VsdCBvZiBga2VybmVsX3NvY2tfaXBfb3ZlcmhlYWQoc2spYC4gVGhpcyBjb3VsZCByZXByZXNlbnQgSVB2NCBvciBJUHY2IG92ZXJoZWFkLCBzbyBpdCAqY291bGQqIGJlIGxhcmdlciBpbiB0aGUgSVB2NiBjYXNlLlxuXG5TbywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBEb2VzIHRoaXMgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gYHNrYl9jb3dfaGVhZGAgaXMganVzdCBhbGxvY2F0aW5nIG1vcmUgc3BhY2UuIEl0IGRvZXNuJ3QgaW5pdGlhbGl6ZSBkYXRhLCB0aGUgbmV0d29yayBzdGFjayBkb2VzIHRoYXQgbGF0ZXIuIFRoZSBwb3RlbnRpYWwgcmlza3MgaGVyZSBhcmUgaW5jb3JyZWN0IGhlYWRyb29tIGxlYWRpbmcgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IsIHdvcnNlLCBhIHBhbmljIOKAkyBidXQgS0FTQU4gc2hvdWxkIGNhdGNoIHRob3NlIGlzc3Vlcy4gVGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIG5vciBkb2VzIGl0IGludHJvZHVjZSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMuIFRoZXJlJ3Mgbm90aGluZyBoZXJlIHRoYXQncyByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgZnJvbSBleGlzdGluZyBidWZmZXJzIGJlY2F1c2Ugb2YgYSBib3VuZHMgaXNzdWUuXG5cbkEgZmluYWwgdGhvdWdodDogSXMgdGhlcmUgYW55IHNjZW5hcmlvIHdoZXJlIGBza2JfY293X2hlYWRgIGl0c2VsZiBjYW4gbGVhdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gdGhlIFNLQiB0aGF0IHdvdWxkIGdldCBzZW50PyBOby4gVGhlIGRhdGEgc2VjdGlvbiBvZiB0aGUgc2tiIGlzIGZpbGxlZCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBkYXRhIGxhdGVyLiBJZiBpdCAqZGlkKiBsZWF2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgS01TQU4gd291bGQgZmxhZyBpdC4gVGhpcyBwYXRjaCBpcyBqdXN0IGNoYW5naW5nIHRoZSAqYW1vdW50KiBvZiBoZWFkcm9vbSByZXF1ZXN0ZWQsIG5vdCBob3cgdGhlIGRhdGEgaXMgd3JpdHRlbi5cblxuTGV0J3MgcmV2aWV3IHRoZSBjaGFuZ2VzIGluIGBsMnRwX2V0aF9hZGp1c3RfbXR1YC4gSXQgbG9va3MgbGlrZSBpdCBpcyBqdXN0IHJlZmFjdG9yaW5nIHRoZSBNVFUgY2FsY3VsYXRpb24gdXNpbmcgdGhlIG5ldyBoZWxwZXIgZnVuY3Rpb24uXG5cbkkgZG9uJ3Qgc2VlIGFueSBLTVNBTi1zcGVjaWZpYyByaXNrcyBoZXJlLiBUaGUgcG90ZW50aWFsIGJ1Z3MgYXJlIE9PQiBhY2Nlc3NlcyBvciBpbmNvcnJlY3QgTVRVIHNpemVzLCB3aGljaCBLQVNBTiwgb3IgZnVuY3Rpb25hbCBmYWlsdXJlIHdpbGwgY2F0Y2guXG5DYW4gYGtlcm5lbF9zb2NrX2lwX292ZXJoZWFkYCByZXR1cm4gdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLCBpdCdzIGp1c3QgcmV0dXJuaW5nIGEgc2l6ZS5cbklzIGB0dW5uZWwtXHUwMDNlbDNfb3ZlcmhlYWRgIHVuaW5pdGlhbGl6ZWQ/IE5vLCBpdCBpcyBpbml0aWFsaXplZCB3aGVuIHJlZ2lzdGVyaW5nIHRoZSB0dW5uZWwgdmlhIGBsMnRwX3R1bm5lbF9yZWdpc3RlcmAuXG5cbmBgYGNcblx0c2stXHUwMDNlc2tfYWxsb2NhdGlvbiA9IEdGUF9BVE9NSUM7XG5cdHR1bm5lbC1cdTAwM2VsM19vdmVyaGVhZCA9IGtlcm5lbF9zb2NrX2lwX292ZXJoZWFkKHNrKTtcblx0cmVsZWFzZV9zb2NrKHNrKTtcbmBgYFxuXG5TbywgTmVlZHNLTVNBTiBzaG91bGQgYmUgZmFsc2UgaGVyZS5cblxuVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgY2FsY3VsYXRpb24gb2YgTDJUUCBwYWNrZXQgb3ZlcmhlYWQgYW5kIGhlYWRyb29tLCBjYWNoaW5nIHRoZSBMMyBvdmVyaGVhZCBpbiB0aGUgYGwydHBfdHVubmVsYCBzdHJ1Y3R1cmUgYW5kIHVzaW5nIGl0IHRvIGFjY3VyYXRlbHkgcmVxdWVzdCBoZWFkcm9vbSB2aWEgYHNrYl9jb3dfaGVhZGAgYW5kIHNldCBNVFUvbmVlZGVkX2hlYWRyb29tIGZvciB0aGUgZGV2aWNlLiBUaGVzZSBjaGFuZ2VzIHByaW1hcmlseSBhZmZlY3QgYnVmZmVyIHNpemUgY2FsY3VsYXRpb25zIGFuZCBoZWFkcm9vbSBhbGxvY2F0aW9uLiBJZiB0aGUgY2FsY3VsYXRpb25zIGFyZSBpbmNvcnJlY3QsIHRoZXkgY291bGQgbGVhZCB0byBvdXQtb2YtYm91bmRzIHdyaXRlcyAoaWYgaGVhZHJvb20gaXMgdG9vIHNtYWxsKSBvciBmdW5jdGlvbmFsIGlzc3VlcyAoaW5jb3JyZWN0IE1UVSksIGJvdGggb2Ygd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCB0ZXN0aW5nLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIG5vciBkb2VzIGl0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB0aGUgbmV0d29yayBvciB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzcxOCwiT3V0cHV0VG9rZW5zIjoxODEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzU1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjM6Mzg6MjEuNDg2NjkyMTY4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGNhbGN1bGF0aW9uIG9mIEwyVFAgcGFja2V0IG92ZXJoZWFkIGFuZCBoZWFkcm9vbSwgY2FjaGluZyB0aGUgTDMgb3ZlcmhlYWQgaW4gdGhlIGBsMnRwX3R1bm5lbGAgc3RydWN0dXJlIGFuZCB1c2luZyBpdCB0byBhY2N1cmF0ZWx5IHJlcXVlc3QgaGVhZHJvb20gdmlhIGBza2JfY293X2hlYWRgIGFuZCBzZXQgTVRVL25lZWRlZF9oZWFkcm9vbSBmb3IgdGhlIGRldmljZS4gVGhlc2UgY2hhbmdlcyBwcmltYXJpbHkgYWZmZWN0IGJ1ZmZlciBzaXplIGNhbGN1bGF0aW9ucyBhbmQgaGVhZHJvb20gYWxsb2NhdGlvbi4gSWYgdGhlIGNhbGN1bGF0aW9ucyBhcmUgaW5jb3JyZWN0LCB0aGV5IGNvdWxkIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyB3cml0ZXMgKGlmIGhlYWRyb29tIGlzIHRvbyBzbWFsbCkgb3IgZnVuY3Rpb25hbCBpc3N1ZXMgKGluY29ycmVjdCBNVFUpLCBib3RoIG9mIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgdGVzdGluZy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLCBub3IgZG9lcyBpdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdGhlIG5ldHdvcmsgb3IgdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBjYWxjdWxhdGlvbiBvZiBMMlRQIHBhY2tldCBvdmVyaGVhZCBhbmQgaGVhZHJvb20sIGNhY2hpbmcgdGhlIEwzIG92ZXJoZWFkIGluIHRoZSBgbDJ0cF90dW5uZWxgIHN0cnVjdHVyZSBhbmQgdXNpbmcgaXQgdG8gYWNjdXJhdGVseSByZXF1ZXN0IGhlYWRyb29tIHZpYSBgc2tiX2Nvd19oZWFkYCBhbmQgc2V0IE1UVS9uZWVkZWRfaGVhZHJvb20gZm9yIHRoZSBkZXZpY2UuIFRoZXNlIGNoYW5nZXMgcHJpbWFyaWx5IGFmZmVjdCBidWZmZXIgc2l6ZSBjYWxjdWxhdGlvbnMgYW5kIGhlYWRyb29tIGFsbG9jYXRpb24uIElmIHRoZSBjYWxjdWxhdGlvbnMgYXJlIGluY29ycmVjdCwgdGhleSBjb3VsZCBsZWFkIHRvIG91dC1vZi1ib3VuZHMgd3JpdGVzIChpZiBoZWFkcm9vbSBpcyB0b28gc21hbGwpIG9yIGZ1bmN0aW9uYWwgaXNzdWVzIChpbmNvcnJlY3QgTVRVKSwgYm90aCBvZiB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHRlc3RpbmcuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSwgbm9yIGRvZXMgaXQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHRoZSBuZXR3b3JrIG9yIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowx9thb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-08 22:57:17 +0000 UTC FinishedAt: 2026-08-08 23:38:22 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "001b5d347d8ba39b2dccaefcc57967b18caec8fe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "L2TP", "L2TP_V3", "L2TP_ETH", "L2TP_IP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "001b5d347d8ba39b2dccaefcc57967b18caec8fe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "L2TP", "L2TP_V3", "L2TP_ETH", "L2TP_IP" ], "series_id": "4a5f0e22-8ff6-4e58-bcbe-b95c68a0fc7d" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "l2tp_tunnel_register", "l2tp_nl_cmd_session_create", "l2tp_xmit_skb" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": { "findings": [ "9b3d30fe-b87f-4b00-99a6-464f0a271312" ] } } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIzOjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0wyVFAmIzM0OywKICAgICYjMzQ7TDJUUF9WMyYjMzQ7LAogICAgJiMzNDtMMlRQX0VUSCYjMzQ7LAogICAgJiMzNDtMMlRQX0lQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bDJ0cF90dW5uZWxfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7bDJ0cF9ubF9jbWRfc2Vzc2lvbl9jcmVhdGUmIzM0OywKICAgICYjMzQ7bDJ0cF94bWl0X3NrYiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgY2FsY3VsYXRpb24gb2YgTDJUUCBwYWNrZXQgb3ZlcmhlYWQgYW5kIGhlYWRyb29tLCBjYWNoaW5nIHRoZSBMMyBvdmVyaGVhZCBpbiB0aGUgYGwydHBfdHVubmVsYCBzdHJ1Y3R1cmUgYW5kIHVzaW5nIGl0IHRvIGFjY3VyYXRlbHkgcmVxdWVzdCBoZWFkcm9vbSB2aWEgYHNrYl9jb3dfaGVhZGAgYW5kIHNldCBNVFUvbmVlZGVkX2hlYWRyb29tIGZvciB0aGUgZGV2aWNlLiBUaGVzZSBjaGFuZ2VzIHByaW1hcmlseSBhZmZlY3QgYnVmZmVyIHNpemUgY2FsY3VsYXRpb25zIGFuZCBoZWFkcm9vbSBhbGxvY2F0aW9uLiBJZiB0aGUgY2FsY3VsYXRpb25zIGFyZSBpbmNvcnJlY3QsIHRoZXkgY291bGQgbGVhZCB0byBvdXQtb2YtYm91bmRzIHdyaXRlcyAoaWYgaGVhZHJvb20gaXMgdG9vIHNtYWxsKSBvciBmdW5jdGlvbmFsIGlzc3VlcyAoaW5jb3JyZWN0IE1UVSksIGJvdGggb2Ygd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCB0ZXN0aW5nLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIG5vciBkb2VzIGl0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB0aGUgbmV0d29yayBvciB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIEwyVFAgaGVhZHJvb20gYW5kIG92ZXJoZWFkIGNhbGN1bGF0aW9ucywgbW9kaWZ5aW5nIE1UVSBhZGp1c3RtZW50IGFuZCBTS0IgaGVhZHJvb20gY2hlY2tzIGluIEwyVFAgY29yZSBhbmQgTDJUUCBFdGhlcm5ldCBwc2V1ZG93aXJlIGNvZGUuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBuZXR3b3JrIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIzOjM3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNGNlMGM2MzczYjNiYWI0ODE2ZjhjYTA0OWNlZmU0MzQ2Yzk3MDJmYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDggMjM6Mzc6MDggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2wydHAvbDJ0cF9jb3JlLmMgYi9uZXQvbDJ0cC9sMnRwX2NvcmUuY1xuaW5kZXggNDcxMmNjNDE4ODFhMy4uZjUyYmYzYjUzMjkwNyAxMDA2NDRcbi0tLSBhL25ldC9sMnRwL2wydHBfY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbDJ0cC9sMnRwX2NvcmUuY1xuQEAgLTEyMjcsMTggJiM0MzsxMjI3LDE2IEBAIHN0YXRpYyBpbnQgbDJ0cF94bWl0X2NvcmUoc3RydWN0IGwydHBfc2Vzc2lvbiAqc2Vzc2lvbiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zXG4gXHRzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbCA9IHNlc3Npb24tXHUwMDNldHVubmVsO1xuIFx0dW5zaWduZWQgaW50IGRhdGFfbGVuID0gc2tiLVx1MDAzZWxlbjtcbiBcdHN0cnVjdCBzb2NrICpzayA9IHR1bm5lbC1cdTAwM2Vzb2NrO1xuLVx0aW50IGhlYWRyb29tLCB1aGxlbiwgdWRwX2xlbjtcbiBcdGludCByZXQgPSBORVRfWE1JVF9TVUNDRVNTO1xuIFx0c3RydWN0IGluZXRfc29jayAqaW5ldDtcbiBcdHN0cnVjdCB1ZHBoZHIgKnVoO1xuJiM0MztcdGludCB1ZHBfbGVuO1xuIFxuIFx0LyogQ2hlY2sgdGhhdCB0aGVyZSYjMzk7cyBlbm91Z2ggaGVhZHJvb20gaW4gdGhlIHNrYiB0byBpbnNlcnQgSVAsXG4gXHQgKiBVRFAgYW5kIEwyVFAgaGVhZGVycy4gSWYgbm90IGVub3VnaCwgZXhwYW5kIGl0IHRvXG4gXHQgKiBtYWtlIHJvb20uIEFkanVzdCB0cnVlc2l6ZS5cbiBcdCAqL1xuLVx0dWhsZW4gPSAodHVubmVsLVx1MDAzZWVuY2FwID09IEwyVFBfRU5DQVBUWVBFX1VEUCkgPyBzaXplb2YoKnVoKSA6IDA7XG4tXHRoZWFkcm9vbSA9IE5FVF9TS0JfUEFEICYjNDM7IHNpemVvZihzdHJ1Y3QgaXBoZHIpICYjNDM7IHVobGVuICYjNDM7IHNlc3Npb24tXHUwMDNlaGRyX2xlbjtcbi1cdGlmIChza2JfY293X2hlYWQoc2tiLCBoZWFkcm9vbSkpIHtcbiYjNDM7XHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgbDJ0cF9zZXNzaW9uX3NrYl9oZWFkcm9vbShzZXNzaW9uLCB0dW5uZWwpKSkge1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0cmV0dXJuIE5FVF9YTUlUX0RST1A7XG4gXHR9XG5AQCAtMTI5MCw3ICYjNDM7MTI4OCw5IEBAIHN0YXRpYyBpbnQgbDJ0cF94bWl0X2NvcmUoc3RydWN0IGwydHBfc2Vzc2lvbiAqc2Vzc2lvbiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zXG4gXHRcdHVoID0gdWRwX2hkcihza2IpO1xuIFx0XHR1aC1cdTAwM2Vzb3VyY2UgPSBpbmV0LVx1MDAzZWluZXRfc3BvcnQ7XG4gXHRcdHVoLVx1MDAzZWRlc3QgPSBpbmV0LVx1MDAzZWluZXRfZHBvcnQ7XG4tXHRcdHVkcF9sZW4gPSB1aGxlbiAmIzQzOyBzZXNzaW9uLVx1MDAzZWhkcl9sZW4gJiM0MzsgZGF0YV9sZW47XG4mIzQzO1xuJiM0MztcdFx0dWRwX2xlbiA9IGwydHBfdHVubmVsX3VkcF9oZHJsZW4odHVubmVsKTtcbiYjNDM7XHRcdHVkcF9sZW4gJiM0Mzs9IHNlc3Npb24tXHUwMDNlaGRyX2xlbiAmIzQzOyBkYXRhX2xlbjtcbiBcdFx0aWYgKHVkcF9sZW4gXHUwMDNlIFUxNl9NQVgpIHtcbiBcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0XHRyZXQgPSBORVRfWE1JVF9EUk9QO1xuQEAgLTE2ODgsNiAmIzQzOzE2ODgsNyBAQCBpbnQgbDJ0cF90dW5uZWxfcmVnaXN0ZXIoc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwsIHN0cnVjdCBuZXQgKm5ldCxcbiBcdH1cbiBcbiBcdHNrLVx1MDAzZXNrX2FsbG9jYXRpb24gPSBHRlBfQVRPTUlDO1xuJiM0MztcdHR1bm5lbC1cdTAwM2VsM19vdmVyaGVhZCA9IGtlcm5lbF9zb2NrX2lwX292ZXJoZWFkKHNrKTtcbiBcdHJlbGVhc2Vfc29jayhzayk7XG4gXG4gXHRzb2NrX2hvbGQoc2spO1xuZGlmZiAtLWdpdCBhL25ldC9sMnRwL2wydHBfY29yZS5oIGIvbmV0L2wydHAvbDJ0cF9jb3JlLmhcbmluZGV4IGZmZDhjZWQzYTUxZmYuLjJjNDE4NzdiNmNlNTcgMTAwNjQ0XG4tLS0gYS9uZXQvbDJ0cC9sMnRwX2NvcmUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2wydHAvbDJ0cF9jb3JlLmhcbkBAIC0xNjcsNiAmIzQzOzE2Nyw3IEBAIHN0cnVjdCBsMnRwX3R1bm5lbCB7XG4gXHR1MzJcdFx0XHR0dW5uZWxfaWQ7XG4gXHR1MzJcdFx0XHRwZWVyX3R1bm5lbF9pZDtcbiBcdGludFx0XHRcdHZlcnNpb247XHQvKiAyPVx1MDAzZUwyVFB2MiwgMz1cdTAwM2VMMlRQdjMgKi9cbiYjNDM7XHRpbnRcdFx0XHRsM19vdmVyaGVhZDtcdC8qIElQIGhlYWRlciBvdmVyaGVhZCAqL1xuIFxuIFx0Y2hhclx0XHRcdG5hbWVbTDJUUF9UVU5ORUxfTkFNRV9NQVhdOyAvKiBmb3IgbG9nZ2luZyAqL1xuIFx0ZW51bSBsMnRwX2VuY2FwX3R5cGVcdGVuY2FwO1xuQEAgLTMzNCw2ICYjNDM7MzM1LDI1IEBAIHN0YXRpYyBpbmxpbmUgaW50IGwydHBfdjNfZW5zdXJlX29wdF9pbl9saW5lYXIoc3RydWN0IGwydHBfc2Vzc2lvbiAqc2Vzc2lvbiwgc3RyXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGwydHBfdHVubmVsX3VkcF9oZHJsZW4oc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gdHVubmVsLVx1MDAzZWVuY2FwID09IEwyVFBfRU5DQVBUWVBFX1VEUCA/XG4mIzQzO1x0XHRzaXplb2Yoc3RydWN0IHVkcGhkcikgOiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBsMnRwX3Nlc3Npb25fb3ZlcmhlYWQoc3RydWN0IGwydHBfc2Vzc2lvbiAqc2Vzc2lvbixcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGwydHBfdHVubmVsX3VkcF9oZHJsZW4odHVubmVsKSAmIzQzOyBzZXNzaW9uLVx1MDAzZWhkcl9sZW4gJiM0MztcbiYjNDM7XHRcdHR1bm5lbC1cdTAwM2VsM19vdmVyaGVhZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgbDJ0cF9zZXNzaW9uX3NrYl9oZWFkcm9vbShzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uLFxuJiM0MztcdFx0XHRcdFx0ICAgIHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIE5FVF9TS0JfUEFEICYjNDM7IGwydHBfc2Vzc2lvbl9vdmVyaGVhZChzZXNzaW9uLCB0dW5uZWwpO1xuJiM0Mzt9XG4mIzQzO1xuICNkZWZpbmUgTU9EVUxFX0FMSUFTX0wyVFBfUFdUWVBFKHR5cGUpIFxcXG4gXHRNT0RVTEVfQUxJQVMoXCYjMzQ7bmV0LWwydHAtdHlwZS1cJiMzNDsgX19zdHJpbmdpZnkodHlwZSkpXG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2wydHAvbDJ0cF9ldGguYyBiL25ldC9sMnRwL2wydHBfZXRoLmNcbmluZGV4IGE0OTU2ZWY5NTc0Y2MuLjY4N2NlMWM2ZGI5NDYgMTAwNjQ0XG4tLS0gYS9uZXQvbDJ0cC9sMnRwX2V0aC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbDJ0cC9sMnRwX2V0aC5jXG5AQCAtMTg4LDMxICYjNDM7MTg4LDE3IEBAIHN0YXRpYyB2b2lkIGwydHBfZXRoX2FkanVzdF9tdHUoc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwsXG4gXHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHVuc2lnbmVkIGludCBvdmVyaGVhZCA9IDA7XG4tXHR1MzIgbDNfb3ZlcmhlYWQgPSAwO1xuIFx0dTMyIG10dTtcbiBcbi1cdC8qIGlmIHRoZSBlbmNhcCBpcyBVRFAsIGFjY291bnQgZm9yIFVEUCBoZWFkZXIgc2l6ZSAqL1xuLVx0aWYgKHR1bm5lbC1cdTAwM2VlbmNhcCA9PSBMMlRQX0VOQ0FQVFlQRV9VRFApIHtcbi1cdFx0b3ZlcmhlYWQgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTtcbi1cdFx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSAmIzQzOz0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpO1xuLVx0fVxuLVxuLVx0bG9ja19zb2NrKHR1bm5lbC1cdTAwM2Vzb2NrKTtcbi1cdGwzX292ZXJoZWFkID0ga2VybmVsX3NvY2tfaXBfb3ZlcmhlYWQodHVubmVsLVx1MDAzZXNvY2spO1xuLVx0cmVsZWFzZV9zb2NrKHR1bm5lbC1cdTAwM2Vzb2NrKTtcbi1cbi1cdGlmIChsM19vdmVyaGVhZCA9PSAwKSB7XG4mIzQzO1x0aWYgKHR1bm5lbC1cdTAwM2VsM19vdmVyaGVhZCA9PSAwKSB7XG4gXHRcdC8qIEwzIE92ZXJoZWFkIGNvdWxkbiYjMzk7dCBiZSBpZGVudGlmaWVkLCB0aGlzIGNvdWxkIGJlXG4tXHRcdCAqIGJlY2F1c2UgdHVubmVsLVx1MDAzZXNvY2sgd2FzIE5VTEwgb3IgdGhlIHNvY2tldCYjMzk7c1xuLVx0XHQgKiBhZGRyZXNzIGZhbWlseSB3YXMgbm90IElQdjQgb3IgSVB2Nixcbi1cdFx0ICogZGV2IG10dSBzdGF5cyBhdCAxNTAwLlxuJiM0MztcdFx0ICogYmVjYXVzZSB0aGUgc29ja2V0JiMzOTtzIGFkZHJlc3MgZmFtaWx5IHdhcyBub3QgSVB2NFxuJiM0MztcdFx0ICogb3IgSVB2NiAtIGRldiBtdHUgc3RheXMgYXQgMTUwMC5cbiBcdFx0ICovXG4gXHRcdHJldHVybjtcbiBcdH1cbi1cdC8qIEFkanVzdCBNVFUsIGZhY3RvciBvdmVyaGVhZCAtIHVuZGVybGF5IEwzLCBvdmVybGF5IEwyIGhkclxuLVx0ICogVURQIG92ZXJoZWFkLCBpZiBhbnksIHdhcyBhbHJlYWR5IGZhY3RvcmVkIGluIGFib3ZlLlxuLVx0ICovXG4tXHRvdmVyaGVhZCAmIzQzOz0gc2Vzc2lvbi1cdTAwM2VoZHJfbGVuICYjNDM7IEVUSF9ITEVOICYjNDM7IGwzX292ZXJoZWFkO1xuJiM0MztcdC8qIENhbGN1bGF0ZSByZXF1aXJlZCBvdmVyaGVhZCAqL1xuJiM0MztcdG92ZXJoZWFkID0gRVRIX0hMRU4gJiM0MzsgbDJ0cF9zZXNzaW9uX292ZXJoZWFkKHNlc3Npb24sIHR1bm5lbCk7XG4gXG4gXHRtdHUgPSBsMnRwX3R1bm5lbF9kc3RfbXR1KHR1bm5lbCkgLSBvdmVyaGVhZDtcbiBcdGlmIChtdHUgXHUwMDNjIGRldi1cdTAwM2VtaW5fbXR1IHx8IG10dSBcdTAwM2UgZGV2LVx1MDAzZW1heF9tdHUpXG5AQCAtMjIwLDcgJiM0MzsyMDYsNyBAQCBzdGF0aWMgdm9pZCBsMnRwX2V0aF9hZGp1c3RfbXR1KHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsLFxuIFx0ZWxzZVxuIFx0XHRkZXYtXHUwMDNlbXR1ID0gbXR1O1xuIFxuLVx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSAmIzQzOz0gc2Vzc2lvbi1cdTAwM2VoZHJfbGVuO1xuJiM0MztcdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBsMnRwX3Nlc3Npb25fc2tiX2hlYWRyb29tKHNlc3Npb24sIHR1bm5lbCk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbDJ0cF9ldGhfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjM6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0wyVFAmIzM0OywKICAgICYjMzQ7TDJUUF9WMyYjMzQ7LAogICAgJiMzNDtMMlRQX0VUSCYjMzQ7LAogICAgJiMzNDtMMlRQX0lQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bDJ0cF90dW5uZWxfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7bDJ0cF9ubF9jbWRfc2Vzc2lvbl9jcmVhdGUmIzM0OywKICAgICYjMzQ7bDJ0cF94bWl0X3NrYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgTDJUUCBoZWFkcm9vbSBhbmQgb3ZlcmhlYWQgY2FsY3VsYXRpb25zLCBtb2RpZnlpbmcgTVRVIGFkanVzdG1lbnQgYW5kIFNLQiBoZWFkcm9vbSBjaGVja3MgaW4gTDJUUCBjb3JlIGFuZCBMMlRQIEV0aGVybmV0IHBzZXVkb3dpcmUgY29kZS4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0Y2UwYzYzNzNiM2JhYjQ4MTZmOGNhMDQ5Y2VmZTQzNDZjOTcwMmZhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgOCAyMzozNzowOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9sMnRwL2wydHBfY29yZS5jIGIvbmV0L2wydHAvbDJ0cF9jb3JlLmMKaW5kZXggNDcxMmNjNDE4ODFhMy4uZjUyYmYzYjUzMjkwNyAxMDA2NDQKLS0tIGEvbmV0L2wydHAvbDJ0cF9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2wydHAvbDJ0cF9jb3JlLmMKQEAgLTEyMjcsMTggJiM0MzsxMjI3LDE2IEBAIHN0YXRpYyBpbnQgbDJ0cF94bWl0X2NvcmUoc3RydWN0IGwydHBfc2Vzc2lvbiAqc2Vzc2lvbiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zCiAJc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwgPSBzZXNzaW9uLSZndDt0dW5uZWw7CiAJdW5zaWduZWQgaW50IGRhdGFfbGVuID0gc2tiLSZndDtsZW47CiAJc3RydWN0IHNvY2sgKnNrID0gdHVubmVsLSZndDtzb2NrOwotCWludCBoZWFkcm9vbSwgdWhsZW4sIHVkcF9sZW47CiAJaW50IHJldCA9IE5FVF9YTUlUX1NVQ0NFU1M7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldDsKIAlzdHJ1Y3QgdWRwaGRyICp1aDsKJiM0MzsJaW50IHVkcF9sZW47CiAKIAkvKiBDaGVjayB0aGF0IHRoZXJlJiMzOTtzIGVub3VnaCBoZWFkcm9vbSBpbiB0aGUgc2tiIHRvIGluc2VydCBJUCwKIAkgKiBVRFAgYW5kIEwyVFAgaGVhZGVycy4gSWYgbm90IGVub3VnaCwgZXhwYW5kIGl0IHRvCiAJICogbWFrZSByb29tLiBBZGp1c3QgdHJ1ZXNpemUuCiAJICovCi0JdWhsZW4gPSAodHVubmVsLSZndDtlbmNhcCA9PSBMMlRQX0VOQ0FQVFlQRV9VRFApID8gc2l6ZW9mKCp1aCkgOiAwOwotCWhlYWRyb29tID0gTkVUX1NLQl9QQUQgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcGhkcikgJiM0MzsgdWhsZW4gJiM0Mzsgc2Vzc2lvbi0mZ3Q7aGRyX2xlbjsKLQlpZiAoc2tiX2Nvd19oZWFkKHNrYiwgaGVhZHJvb20pKSB7CiYjNDM7CWlmIChza2JfY293X2hlYWQoc2tiLCBsMnRwX3Nlc3Npb25fc2tiX2hlYWRyb29tKHNlc3Npb24sIHR1bm5lbCkpKSB7CiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gTkVUX1hNSVRfRFJPUDsKIAl9CkBAIC0xMjkwLDcgJiM0MzsxMjg4LDkgQEAgc3RhdGljIGludCBsMnRwX3htaXRfY29yZShzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnMKIAkJdWggPSB1ZHBfaGRyKHNrYik7CiAJCXVoLSZndDtzb3VyY2UgPSBpbmV0LSZndDtpbmV0X3Nwb3J0OwogCQl1aC0mZ3Q7ZGVzdCA9IGluZXQtJmd0O2luZXRfZHBvcnQ7Ci0JCXVkcF9sZW4gPSB1aGxlbiAmIzQzOyBzZXNzaW9uLSZndDtoZHJfbGVuICYjNDM7IGRhdGFfbGVuOwomIzQzOwomIzQzOwkJdWRwX2xlbiA9IGwydHBfdHVubmVsX3VkcF9oZHJsZW4odHVubmVsKTsKJiM0MzsJCXVkcF9sZW4gJiM0Mzs9IHNlc3Npb24tJmd0O2hkcl9sZW4gJiM0MzsgZGF0YV9sZW47CiAJCWlmICh1ZHBfbGVuICZndDsgVTE2X01BWCkgewogCQkJa2ZyZWVfc2tiKHNrYik7CiAJCQlyZXQgPSBORVRfWE1JVF9EUk9QOwpAQCAtMTY4OCw2ICYjNDM7MTY4OCw3IEBAIGludCBsMnRwX3R1bm5lbF9yZWdpc3RlcihzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbCwgc3RydWN0IG5ldCAqbmV0LAogCX0KIAogCXNrLSZndDtza19hbGxvY2F0aW9uID0gR0ZQX0FUT01JQzsKJiM0MzsJdHVubmVsLSZndDtsM19vdmVyaGVhZCA9IGtlcm5lbF9zb2NrX2lwX292ZXJoZWFkKHNrKTsKIAlyZWxlYXNlX3NvY2soc2spOwogCiAJc29ja19ob2xkKHNrKTsKZGlmZiAtLWdpdCBhL25ldC9sMnRwL2wydHBfY29yZS5oIGIvbmV0L2wydHAvbDJ0cF9jb3JlLmgKaW5kZXggZmZkOGNlZDNhNTFmZi4uMmM0MTg3N2I2Y2U1NyAxMDA2NDQKLS0tIGEvbmV0L2wydHAvbDJ0cF9jb3JlLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2wydHAvbDJ0cF9jb3JlLmgKQEAgLTE2Nyw2ICYjNDM7MTY3LDcgQEAgc3RydWN0IGwydHBfdHVubmVsIHsKIAl1MzIJCQl0dW5uZWxfaWQ7CiAJdTMyCQkJcGVlcl90dW5uZWxfaWQ7CiAJaW50CQkJdmVyc2lvbjsJLyogMj0mZ3Q7TDJUUHYyLCAzPSZndDtMMlRQdjMgKi8KJiM0MzsJaW50CQkJbDNfb3ZlcmhlYWQ7CS8qIElQIGhlYWRlciBvdmVyaGVhZCAqLwogCiAJY2hhcgkJCW5hbWVbTDJUUF9UVU5ORUxfTkFNRV9NQVhdOyAvKiBmb3IgbG9nZ2luZyAqLwogCWVudW0gbDJ0cF9lbmNhcF90eXBlCWVuY2FwOwpAQCAtMzM0LDYgJiM0MzszMzUsMjUgQEAgc3RhdGljIGlubGluZSBpbnQgbDJ0cF92M19lbnN1cmVfb3B0X2luX2xpbmVhcihzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uLCBzdHIKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGwydHBfdHVubmVsX3VkcF9oZHJsZW4oc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwpCiYjNDM7ewomIzQzOwlyZXR1cm4gdHVubmVsLSZndDtlbmNhcCA9PSBMMlRQX0VOQ0FQVFlQRV9VRFAgPwomIzQzOwkJc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpIDogMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgbDJ0cF9zZXNzaW9uX292ZXJoZWFkKHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb24sCiYjNDM7CQkJCQlzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbCkKJiM0Mzt7CiYjNDM7CXJldHVybiBsMnRwX3R1bm5lbF91ZHBfaGRybGVuKHR1bm5lbCkgJiM0Mzsgc2Vzc2lvbi0mZ3Q7aGRyX2xlbiAmIzQzOwomIzQzOwkJdHVubmVsLSZndDtsM19vdmVyaGVhZDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgbDJ0cF9zZXNzaW9uX3NrYl9oZWFkcm9vbShzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uLAomIzQzOwkJCQkJICAgIHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsKQomIzQzO3sKJiM0MzsJcmV0dXJuIE5FVF9TS0JfUEFEICYjNDM7IGwydHBfc2Vzc2lvbl9vdmVyaGVhZChzZXNzaW9uLCB0dW5uZWwpOwomIzQzO30KJiM0MzsKICNkZWZpbmUgTU9EVUxFX0FMSUFTX0wyVFBfUFdUWVBFKHR5cGUpIFwKIAlNT0RVTEVfQUxJQVMoJiMzNDtuZXQtbDJ0cC10eXBlLSYjMzQ7IF9fc3RyaW5naWZ5KHR5cGUpKQogCmRpZmYgLS1naXQgYS9uZXQvbDJ0cC9sMnRwX2V0aC5jIGIvbmV0L2wydHAvbDJ0cF9ldGguYwppbmRleCBhNDk1NmVmOTU3NGNjLi42ODdjZTFjNmRiOTQ2IDEwMDY0NAotLS0gYS9uZXQvbDJ0cC9sMnRwX2V0aC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9sMnRwL2wydHBfZXRoLmMKQEAgLTE4OCwzMSAmIzQzOzE4OCwxNyBAQCBzdGF0aWMgdm9pZCBsMnRwX2V0aF9hZGp1c3RfbXR1KHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsLAogCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJdW5zaWduZWQgaW50IG92ZXJoZWFkID0gMDsKLQl1MzIgbDNfb3ZlcmhlYWQgPSAwOwogCXUzMiBtdHU7CiAKLQkvKiBpZiB0aGUgZW5jYXAgaXMgVURQLCBhY2NvdW50IGZvciBVRFAgaGVhZGVyIHNpemUgKi8KLQlpZiAodHVubmVsLSZndDtlbmNhcCA9PSBMMlRQX0VOQ0FQVFlQRV9VRFApIHsKLQkJb3ZlcmhlYWQgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKLQkJZGV2LSZndDtuZWVkZWRfaGVhZHJvb20gJiM0Mzs9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKLQl9Ci0KLQlsb2NrX3NvY2sodHVubmVsLSZndDtzb2NrKTsKLQlsM19vdmVyaGVhZCA9IGtlcm5lbF9zb2NrX2lwX292ZXJoZWFkKHR1bm5lbC0mZ3Q7c29jayk7Ci0JcmVsZWFzZV9zb2NrKHR1bm5lbC0mZ3Q7c29jayk7Ci0KLQlpZiAobDNfb3ZlcmhlYWQgPT0gMCkgewomIzQzOwlpZiAodHVubmVsLSZndDtsM19vdmVyaGVhZCA9PSAwKSB7CiAJCS8qIEwzIE92ZXJoZWFkIGNvdWxkbiYjMzk7dCBiZSBpZGVudGlmaWVkLCB0aGlzIGNvdWxkIGJlCi0JCSAqIGJlY2F1c2UgdHVubmVsLSZndDtzb2NrIHdhcyBOVUxMIG9yIHRoZSBzb2NrZXQmIzM5O3MKLQkJICogYWRkcmVzcyBmYW1pbHkgd2FzIG5vdCBJUHY0IG9yIElQdjYsCi0JCSAqIGRldiBtdHUgc3RheXMgYXQgMTUwMC4KJiM0MzsJCSAqIGJlY2F1c2UgdGhlIHNvY2tldCYjMzk7cyBhZGRyZXNzIGZhbWlseSB3YXMgbm90IElQdjQKJiM0MzsJCSAqIG9yIElQdjYgLSBkZXYgbXR1IHN0YXlzIGF0IDE1MDAuCiAJCSAqLwogCQlyZXR1cm47CiAJfQotCS8qIEFkanVzdCBNVFUsIGZhY3RvciBvdmVyaGVhZCAtIHVuZGVybGF5IEwzLCBvdmVybGF5IEwyIGhkcgotCSAqIFVEUCBvdmVyaGVhZCwgaWYgYW55LCB3YXMgYWxyZWFkeSBmYWN0b3JlZCBpbiBhYm92ZS4KLQkgKi8KLQlvdmVyaGVhZCAmIzQzOz0gc2Vzc2lvbi0mZ3Q7aGRyX2xlbiAmIzQzOyBFVEhfSExFTiAmIzQzOyBsM19vdmVyaGVhZDsKJiM0MzsJLyogQ2FsY3VsYXRlIHJlcXVpcmVkIG92ZXJoZWFkICovCiYjNDM7CW92ZXJoZWFkID0gRVRIX0hMRU4gJiM0MzsgbDJ0cF9zZXNzaW9uX292ZXJoZWFkKHNlc3Npb24sIHR1bm5lbCk7CiAKIAltdHUgPSBsMnRwX3R1bm5lbF9kc3RfbXR1KHR1bm5lbCkgLSBvdmVyaGVhZDsKIAlpZiAobXR1ICZsdDsgZGV2LSZndDttaW5fbXR1IHx8IG10dSAmZ3Q7IGRldi0mZ3Q7bWF4X210dSkKQEAgLTIyMCw3ICYjNDM7MjA2LDcgQEAgc3RhdGljIHZvaWQgbDJ0cF9ldGhfYWRqdXN0X210dShzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbCwKIAllbHNlCiAJCWRldi0mZ3Q7bXR1ID0gbXR1OwogCi0JZGV2LSZndDtuZWVkZWRfaGVhZHJvb20gJiM0Mzs9IHNlc3Npb24tJmd0O2hkcl9sZW47CiYjNDM7CWRldi0mZ3Q7bmVlZGVkX2hlYWRyb29tID0gbDJ0cF9zZXNzaW9uX3NrYl9oZWFkcm9vbShzZXNzaW9uLCB0dW5uZWwpOwogfQogCiBzdGF0aWMgaW50IGwydHBfZXRoX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzIxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTDJUUCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQmIzM5O3MgYSByZWZhY3RvcmluZyBlZmZvcnQgd2l0aGluIHRoZSBMMlRQIGNvZGUsIHNwZWNpZmljYWxseSBmb2N1c2VkIG9uIGhvdyBoZWFkcm9vbSBhbmQgb3ZlcmhlYWQgYXJlIGNhbGN1bGF0ZWQuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdG91Y2hpbmcgYG5ldC9sMnRwL2wydHBfY29yZS5jYCwgYGwydHBfY29yZS5oYCwgYW5kIGBsMnRwX2V0aC5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIHNjb3BlLiBUaGV5JiMzOTtyZSBpbnRyb2R1Y2luZyB0aGVzZSBuZXcgaGVscGVyczogYGwydHBfc2Vzc2lvbl9za2JfaGVhZHJvb21gLCBgbDJ0cF9zZXNzaW9uX292ZXJoZWFkYCwgYW5kIGBsMnRwX3R1bm5lbF91ZHBfaGRybGVuYC4gVGhhdCYjMzk7cyBhIHN0cm9uZyBpbmRpY2F0aW9uIG9mIGEgbW92ZSB0b3dhcmRzIG1vcmUgbW9kdWxhciBhbmQgcG90ZW50aWFsbHkgbW9yZSBhY2N1cmF0ZSBjYWxjdWxhdGlvbnMuIENhY2hpbmcgYGwzX292ZXJoZWFkYCBpbiBgc3RydWN0IGwydHBfdHVubmVsYCBkdXJpbmcgYGwydHBfdHVubmVsX3JlZ2lzdGVyYCBpcyBhIHNtYXJ0IG1vdmUg4oCTIHByZS1jYWxjdWxhdGluZyBhbmQgc3RvcmluZyBpdCB0byBhdm9pZCByZWR1bmRhbnQgY29tcHV0YXRpb25zIGxhdGVyIG9uIGlzIHNvbWV0aGluZyBJIHdvdWxkIGRvIHRvby4KClRoZSBtb2RpZmljYXRpb25zIHRvIGBsMnRwX2V0aF9hZGp1c3RfbXR1YCBhbmQgYGwydHBfeG1pdF9jb3JlYCBhcmUgd2hlcmUgdGhlIHJ1YmJlciBoaXRzIHRoZSByb2FkLiBUaGV5IGFyZSBjbGVhcmx5IGltcGxlbWVudGluZyB0aGVzZSBuZXcgZnVuY3Rpb25zLiBUaGUgYGwydHBfeG1pdF9jb3JlYCBjaGFuZ2UsIHNwZWNpZmljYWxseSB1c2luZyBgbDJ0cF9zZXNzaW9uX3NrYl9oZWFkcm9vbWAgZm9yIGBza2JfY293X2hlYWRgLCBpcyBpbnRlcmVzdGluZy4gVGhpcyBpbmRpY2F0ZXMgYSBmb2N1cyBvbiBtaW5pbWl6aW5nIG1lbW9yeSBjb3B5aW5nLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgcGVyZm9ybWFuY2UgaW4gYW55IG5ldHdvcmtpbmcgY29udGV4dC4KCkFscmlnaHQsIHRoZSBuZXh0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBxdWlja2x5IGRldGVybWluZSBpZiB0aGlzIGlzIHNvbWV0aGluZyB3b3J0aCBmdXp6aW5nLiBXZWxsLCBMMlRQIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLCBhbmQgaXQmIzM5O3MgYWJzb2x1dGVseSBhIHRhcmdldCB3b3J0aCBleHBsb3JpbmcuIExldCYjMzk7cyBzZWUuLi4gdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIGFyZSBgQ09ORklHX0wyVFBgLCBgQ09ORklHX0wyVFBfVjNgLCBhbmQgYENPTkZJR19MMlRQX0VUSGAsIHdoaWNoIEkgY2FuIGNoZWNrIHdpdGggYSBxdWljayBncmVwIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgYXR0YWNrIHN1cmZhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEwyVFAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbDJ0cC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9sMnRwL0tjb25maWctNS1cbm5ldC9sMnRwL0tjb25maWc6NjptZW51Y29uZmlnIEwyVFBcbm5ldC9sMnRwL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O0xheWVyIFR3byBUdW5uZWxpbmcgUHJvdG9jb2wgKEwyVFApXCYjMzQ7XG4tLVxubmV0L2wydHAvS2NvbmZpZy0zNS1cbm5ldC9sMnRwL0tjb25maWc6MzY6Y29uZmlnIEwyVFBfREVCVUdGU1xubmV0L2wydHAvS2NvbmZpZy0zNy1cdHRyaXN0YXRlIFwmIzM0O0wyVFAgZGVidWdmcyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2wydHAvS2NvbmZpZy00OC1cbm5ldC9sMnRwL0tjb25maWc6NDk6Y29uZmlnIEwyVFBfVjNcbm5ldC9sMnRwL0tjb25maWctNTAtXHRib29sIFwmIzM0O0wyVFB2MyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2wydHAvS2NvbmZpZy02OS1cbm5ldC9sMnRwL0tjb25maWc6NzA6Y29uZmlnIEwyVFBfSVBcbm5ldC9sMnRwL0tjb25maWctNzEtXHR0cmlzdGF0ZSBcJiMzNDtMMlRQIElQIGVuY2Fwc3VsYXRpb24gZm9yIEwyVFB2M1wmIzM0O1xuLS1cbm5ldC9sMnRwL0tjb25maWctODYtXG5uZXQvbDJ0cC9LY29uZmlnOjg3OmNvbmZpZyBMMlRQX0VUSFxubmV0L2wydHAvS2NvbmZpZy04OC1cdHRyaXN0YXRlIFwmIzM0O0wyVFAgZXRoZXJuZXQgcHNldWRvd2lyZSBzdXBwb3J0IGZvciBMMlRQdjNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Nzc0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBMMlRQIENvbmZpZ3VyYXRpb24gYW5kIEZ1bmN0aW9uIE1vZGlmaWNhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zOiBgTDJUUGAsIGBMMlRQX1YzYCwgYEwyVFBfSVBgLCBhbmQgYEwyVFBfRVRIYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWVuIGNoYW5nZWQsIHdoYXQgdGhlIGltcGFjdCBpcy4gVGhlIGxpc3RlZCBmdW5jdGlvbnMgYXJlIHdoZXJlIHRoZSBtb2RpZmljYXRpb25zIHNlZW0gdG8gcmVzaWRlLiBTcGVjaWZpY2FsbHksIEkgc2VlOiBgbDJ0cF94bWl0X2NvcmVgLCBgbDJ0cF90dW5uZWxfcmVnaXN0ZXJgLCBgbDJ0cF9ldGhfYWRqdXN0X210dWAsIGFuZCBgbDJ0cF9ldGhfY3JlYXRlYC4KCk5vdywgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgTDJUUCB3b3JrcywgYGwydHBfeG1pdF9jb3JlYCBpcyBsaWtlbHkgdGhlIGNvcmUgdHJhbnNtaXNzaW9uIGZ1bmN0aW9uLCBzbyB0aGF0JiMzOTtzIGRlZmluaXRlbHkgYSBrZXkgYXJlYSB0byBzY3J1dGluaXplLiBBbmQgYGwydHBfZXRoX2NyZWF0ZWAgYWxzbyBzb3VuZHMgbGlrZSBhIGNyaXRpY2FsIHBvaW50LiBUaGF0IG1pZ2h0IGhhdmUgdG8gZG8gd2l0aCBob3cgdGhlIEwyVFAgb3ZlciBFdGhlcm5ldCBpbnRlcmZhY2UgaXMgc2V0IHVwLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGZvY3VzaW5nIG9uIHRob3NlIHR3by4gVGhleSBsb29rIGxpa2UgdGhlIGJlc3Qgc3RhcnRpbmcgcG9pbnRzIHRvIGFzc2VzcyB0aGUgY2hhbmdlcyBhbmQgdGhlaXIgcmFtaWZpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsMnRwX3htaXRfY29yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9sMnRwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbDJ0cC9sMnRwX2NvcmUuYz0xMjA5PXN0YXRpYyBpbnQgbDJ0cF94bWl0X3F1ZXVlKHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZmxvd2kgKmZsKVxuLS1cbm5ldC9sMnRwL2wydHBfY29yZS5jLTEyMjQtXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYzoxMjI1OnN0YXRpYyBpbnQgbDJ0cF94bWl0X2NvcmUoc3RydWN0IGwydHBfc2Vzc2lvbiAqc2Vzc2lvbiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50ICpsZW4pXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xMjI2LXtcbi0tXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYz0xMzI4PWludCBsMnRwX3htaXRfc2tiKHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb24sIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTMzMi1cbm5ldC9sMnRwL2wydHBfY29yZS5jOjEzMzM6XHRyZXQgPSBsMnRwX3htaXRfY29yZShzZXNzaW9uLCBza2IsIFx1MDAyNmxlbik7XG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xMzM0LVx0aWYgKHJldCA9PSBORVRfWE1JVF9TVUNDRVNTKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ2MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBjb2RlIHNuaXBwZXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBMMlRQIFRyYW5zbWlzc2lvbiBQYXRoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgTDJUUCBwYWNrZXRzIGFyZSB0cmFuc21pdHRlZC4gSSYjMzk7dmUgbm90ZWQgdGhhdCBgbDJ0cF94bWl0X2NvcmVgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhhdCYjMzk7cyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZyDigJMgaXQgaW1wbGllcyB0aGlzIGZ1bmN0aW9uJiMzOTtzIHNjb3BlIGlzIGxpbWl0ZWQgdG8gdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gSXQmIzM5O3MgbGlrZWx5IGFuIGludGVybmFsIGhlbHBlciBmdW5jdGlvbi4gTm93LCB0aGUga2V5IGlzIHRoYXQgYGwydHBfeG1pdF9za2JgIGNhbGxzIGBsMnRwX3htaXRfY29yZWAuIFNvLCBgbDJ0cF94bWl0X3NrYmAgc2VlbXMgdG8gYmUgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHNlbmRpbmcgTDJUUCBkYXRhLCBhbmQgaXQmIzM5O3MgZGVsZWdhdGluZyB0aGUgYWN0dWFsIHdvcmsgdG8gdGhpcyBgbDJ0cF94bWl0X2NvcmVgIGZ1bmN0aW9uLiBNYWtlcyBzZW5zZTsgZ29vZCBzZXBhcmF0aW9uIG9mIGNvbmNlcm5zLgoKTmV4dCwgSSB0aGluayBpdCYjMzk7cyB3b3J0aCB0YWtpbmcgYSBjbG9zZXIgbG9vayBhdCBgbDJ0cF9ldGhfYWRqdXN0X210dWAgYW5kIGBsMnRwX2V0aF9jcmVhdGVgLiBUaG9zZSBzZWVtIGxpa2UgdGhleSYjMzk7cmUgcmVsYXRlZCB0byBFdGhlcm5ldCBzcGVjaWZpY2FsbHksIGdpdmVuIHRoZSBuYW1lLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgdHJhbnNtaXNzaW9uIHByb2Nlc3MuIFRoaXMgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBtYXBwaW5nIG91dCB0aGUgY3JpdGljYWwgZGF0YSBwYXRocyBhbmQgZnVuY3Rpb24gY2FsbHMgd2l0aGluIHRoaXMgcGFydGljdWxhciBMMlRQIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2wydHBfZXRoX2FkanVzdF9tdHUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbDJ0cC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2wydHAvbDJ0cF9ldGguYz0xNjY9c3RhdGljIHZvaWQgbDJ0cF9ldGhfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmFyZylcbi0tXG5uZXQvbDJ0cC9sMnRwX2V0aC5jLTE4NS1cbm5ldC9sMnRwL2wydHBfZXRoLmM6MTg2OnN0YXRpYyB2b2lkIGwydHBfZXRoX2FkanVzdF9tdHUoc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwsXG5uZXQvbDJ0cC9sMnRwX2V0aC5jLTE4Ny1cdFx0XHRcdHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb24sXG4tLVxubmV0L2wydHAvbDJ0cF9ldGguYz0yMTI9c3RhdGljIGludCBsMnRwX2V0aF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbCxcbi0tXG5uZXQvbDJ0cC9sMnRwX2V0aC5jLTI0OC1cdGRldi1cdTAwM2VtYXhfbXR1ID0gRVRIX01BWF9NVFU7XG5uZXQvbDJ0cC9sMnRwX2V0aC5jOjI0OTpcdGwydHBfZXRoX2FkanVzdF9tdHUodHVubmVsLCBzZXNzaW9uLCBkZXYpO1xubmV0L2wydHAvbDJ0cF9ldGguYy0yNTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA5OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6CgoqKkFuYWx5emluZyB0aGUgTDJUUC9FdGhlcm5ldCBNVFUgQWRqdXN0bWVudCoqCgpPa2F5LCBzbyBgbDJ0cF9ldGhfYWRqdXN0X210dWAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgc2NvcGUgYW5kIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgd2l0aGluIHRoZSBtb2R1bGUuIEdvb2QgdG8ga25vdy4gQW5kIGBsMnRwX2V0aF9jcmVhdGVgICpjYWxscyogaXQuIEhtbSwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gVGhlIE1UVSBhZGp1c3RtZW50IGlzIGhhcHBlbmluZyBkdXJpbmcgdGhlIGNyZWF0aW9uIG9mIGFuIEwyVFAvRXRoZXJuZXQgZW50aXR5LiBUaGF0IG1ha2VzIHNlbnNlLCBidXQgSSB3YW50IHRvIHVuZGVyc3RhbmQgKndoeSogdGhlIGFkanVzdG1lbnQgaXMgbmVlZGVkLCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBMMlRQIGFyY2hpdGVjdHVyZS4gTXkgbmV4dCBzdGVwIGlzIGNsZWFyIC0gSSBuZWVkIHRvIGp1bXAgaW50byBgbDJ0cF9ldGhfY3JlYXRlYCBhbmQgc2VlIGV4YWN0bHkgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoaW4gdGhhdCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bDJ0cF9ldGhfY3JlYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2wydHAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9sMnRwL2wydHBfZXRoLmM9MTg2PXN0YXRpYyB2b2lkIGwydHBfZXRoX2FkanVzdF9tdHUoc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwsXG4tLVxubmV0L2wydHAvbDJ0cF9ldGguYy0yMTEtXG5uZXQvbDJ0cC9sMnRwX2V0aC5jOjIxMjpzdGF0aWMgaW50IGwydHBfZXRoX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsLFxubmV0L2wydHAvbDJ0cF9ldGguYy0yMTMtXHRcdFx0ICAgdTMyIHNlc3Npb25faWQsIHUzMiBwZWVyX3Nlc3Npb25faWQsXG4tLVxubmV0L2wydHAvbDJ0cF9ldGguYz0zMDU9c3RhdGljIGNvbnN0IHN0cnVjdCBsMnRwX25sX2NtZF9vcHMgbDJ0cF9ldGhfbmxfY21kX29wcyA9IHtcbm5ldC9sMnRwL2wydHBfZXRoLmM6MzA2Olx0LnNlc3Npb25fY3JlYXRlXHQ9IGwydHBfZXRoX2NyZWF0ZSxcbm5ldC9sMnRwL2wydHBfZXRoLmMtMzA3LVx0LnNlc3Npb25fZGVsZXRlXHQ9IGwydHBfc2Vzc2lvbl9kZWxldGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIzOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2MTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIGdpdmVuIG15IGV4cGVydGlzZToKCioqRGlzc2VjdGluZyB0aGUgTDJUUCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbDJ0cF9ldGhfY3JlYXRlYCBmdW5jdGlvbi4gSXQmIzM5O3MgZGVjbGFyZWQgYXMgYHN0YXRpY2AsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGludGVybmFsIHRvIHRoaXMgcGFydGljdWxhciBzb3VyY2UgZmlsZS4gVGhhdCYjMzk7cyBmaW5lLCBub3RoaW5nIGluaGVyZW50bHkgd3Jvbmcgd2l0aCB0aGF0LiBCdXQgdGhlbiBJIHNlZSBpdCYjMzk7cyBhbHNvIGEgY2FsbGJhY2sgZm9yIHRoZSBgc2Vzc2lvbl9jcmVhdGVgIG9wZXJhdGlvbiB3aXRoaW4gYGwydHBfbmxfY21kX29wc2AuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGJlY2F1c2UgaXQgbWVhbnMgdGhpcyBsb2NhbCBmdW5jdGlvbiBpcyB0aGUgb25lIGhhbmRsaW5nIHRoZSBjcmVhdGlvbiBvZiBhIHNlc3Npb24gZnJvbSBhIG5ldGxpbmsgY29tbWFuZC4gVGhpcyBtaWdodCBiZSB3aGVyZSB0aGUgYWN0dWFsIEV0aGVybmV0IGludGVyZmFjZSBpcyBzZXQgdXAuIE9rYXksIHRoYXQgbWFrZXMgc2Vuc2UuCgpXYWl0IGEgbWludXRlLCBJIHNlZSB0aGF0IGBsMnRwX3R1bm5lbF9yZWdpc3RlcmAgaXMgZXhwb3J0ZWQuIFRoYXQmIzM5O3MgdGhlIHJlYWwga2V5IHRvIHRoaXMgd2hvbGUgcHV6emxlLiBXZSBjYW4gcmVnaXN0ZXIgbmV3IHR1bm5lbHMgdG8gdGhlIGludGVyZmFjZSB0aHJvdWdoIHRoaXMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2wydHBfdHVubmVsX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2wydHAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9sMnRwL2wydHBfY29yZS5jPTE2MTM9c3RhdGljIGludCBsMnRwX3ZhbGlkYXRlX3NvY2tldChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xNjQyLVxubmV0L2wydHAvbDJ0cF9jb3JlLmM6MTY0MzppbnQgbDJ0cF90dW5uZWxfcmVnaXN0ZXIoc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwsIHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9sMnRwL2wydHBfY29yZS5jLTE2NDQtXHRcdFx0IHN0cnVjdCBsMnRwX3R1bm5lbF9jZmcgKmNmZylcbi0tXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xNzIwLX1cbm5ldC9sMnRwL2wydHBfY29yZS5jOjE3MjE6RVhQT1JUX1NZTUJPTF9HUEwobDJ0cF90dW5uZWxfcmVnaXN0ZXIpO1xubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTcyMi1cbi0tXG5uZXQvbDJ0cC9sMnRwX2NvcmUuaD0yMzY9aW50IGwydHBfdHVubmVsX2NyZWF0ZShpbnQgZmQsIGludCB2ZXJzaW9uLCB1MzIgdHVubmVsX2lkLFxuLS1cbm5ldC9sMnRwL2wydHBfY29yZS5oLTIzOC1cdFx0ICAgICAgIHN0cnVjdCBsMnRwX3R1bm5lbCAqKnR1bm5lbHApO1xubmV0L2wydHAvbDJ0cF9jb3JlLmg6MjM5OmludCBsMnRwX3R1bm5lbF9yZWdpc3RlcihzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbCwgc3RydWN0IG5ldCAqbmV0LFxubmV0L2wydHAvbDJ0cF9jb3JlLmgtMjQwLVx0XHRcdCBzdHJ1Y3QgbDJ0cF90dW5uZWxfY2ZnICpjZmcpO1xuLS1cbm5ldC9sMnRwL2wydHBfbmV0bGluay5jPTE4NT1zdGF0aWMgaW50IGwydHBfbmxfY21kX3R1bm5lbF9jcmVhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYy0yNDUtXHRyZWZjb3VudF9pbmMoXHUwMDI2dHVubmVsLVx1MDAzZXJlZl9jb3VudCk7XG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYzoyNDY6XHRyZXQgPSBsMnRwX3R1bm5lbF9yZWdpc3Rlcih0dW5uZWwsIG5ldCwgXHUwMDI2Y2ZnKTtcbm5ldC9sMnRwL2wydHBfbmV0bGluay5jLTI0Ny1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5uZXQvbDJ0cC9sMnRwX3BwcC5jPTYyNz1zdGF0aWMgc3RydWN0IGwydHBfdHVubmVsICpwcHBvbDJ0cF90dW5uZWxfZ2V0KHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTY0Ny1cbm5ldC9sMnRwL2wydHBfcHBwLmM6NjQ4Olx0XHRcdC8qIFByZXZlbnQgbDJ0cF90dW5uZWxfcmVnaXN0ZXIoKSBmcm9tIHRyeWluZyB0byBzZXQgdXBcbm5ldC9sMnRwL2wydHBfcHBwLmMtNjQ5LVx0XHRcdCAqIGEga2VybmVsIHNvY2tldC5cbi0tXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTY2Mi1cdFx0XHRyZWZjb3VudF9pbmMoXHUwMDI2dHVubmVsLVx1MDAzZXJlZl9jb3VudCk7XG5uZXQvbDJ0cC9sMnRwX3BwcC5jOjY2MzpcdFx0XHRlcnJvciA9IGwydHBfdHVubmVsX3JlZ2lzdGVyKHR1bm5lbCwgbmV0LCBcdTAwMjZ0Y2ZnKTtcbm5ldC9sMnRwL2wydHBfcHBwLmMtNjY0LVx0XHRcdGlmIChlcnJvciBcdTAwM2MgMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjQ0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24sIGdpdmVuIG15IGV4cGVydGlzZToKCioqTDJUUCBNb2R1bGUgRm9jdXMgJmFtcDsgS2V5IEV4cG9ydCoqCgpBbHJpZ2h0LCBsb29raW5nIGF0IHRoaXMgY29kZSwgaXQgc2VlbXMgbGlrZSB3ZSYjMzk7dmUgemVyb2VkIGluIG9uIHRoZSBgbDJ0cF90dW5uZWxfcmVnaXN0ZXJgIGZ1bmN0aW9uIGFzIGEga2V5IGVsZW1lbnQuIFRoYXQmIzM5O3MgYSBzb2xpZCBjaG9pY2UgZm9yIGEgZm9jdXMgc3ltYm9sIOKAkyBpdCBsaWtlbHkgcmVwcmVzZW50cyB0aGUgY29yZSBtZWNoYW5pc20gZm9yIGVzdGFibGlzaGluZyBhbmQgbWFuYWdpbmcgTDJUUCB0dW5uZWwgaW5zdGFuY2VzIHdpdGhpbiB0aGUgc3lzdGVtLiBHb29kLiBXZSB1bmRlcnN0YW5kIHRoZSBzaWduaWZpY2FuY2Ugb2YgdGhpcy4KCkFuZCwgb2YgY291cnNlLCB0aGUgYGwydHBfeG1pdF9za2JgIGZ1bmN0aW9uIGlzIGV4cG9zZWQuIE1ha2VzIHNlbnNlLiBUaGF0JiMzOTtzIGFic29sdXRlbHkgY3JpdGljYWwuIEV4cG9ydGluZyB0aGlzIGluZGljYXRlcyBpdHMgaW1wb3J0YW5jZSBpbiB0aGUgYnJvYWRlciBuZXR3b3JraW5nIGFyY2hpdGVjdHVyZS4gSXQmIzM5O3MgbGlrZWx5IHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgdHJhbnNtaXR0aW5nIFNvY2tldCBCdWZmZXIgKFNLQikgZGF0YSBhY3Jvc3MgdGhlIEwyVFAgdHVubmVsIGludGVyZmFjZS4gVGhpcyBsaWtlbHkgZW5hYmxlcyBlbmNhcHN1bGF0aW9uIG9yIGRlY2Fwc3VsYXRpb24uIFRoaXMgbWVhbnMgaXQmIzM5O3MgYSB2aXRhbCBwYXJ0IG9mIHRoZSBkYXRhIGZsb3cgYW5kIHdpbGwsIHRoZXJlZm9yZSwgYmUgaGlnaGx5IHJlbGV2YW50IHRvIGFueSBhbmFseXNpcyBvZiBMMlRQIHBlcmZvcm1hbmNlLCBkZWJ1Z2dpbmcsIG9yIG9wdGltaXphdGlvbiBlZmZvcnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsMnRwX3htaXRfc2tiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2wydHAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9sMnRwL2wydHBfY29yZS5jPTEyMjU9c3RhdGljIGludCBsMnRwX3htaXRfY29yZShzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgKmxlbilcbi0tXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xMzI3LSAqL1xubmV0L2wydHAvbDJ0cF9jb3JlLmM6MTMyODppbnQgbDJ0cF94bWl0X3NrYihzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTMyOS17XG4tLVxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTM0NC19XG5uZXQvbDJ0cC9sMnRwX2NvcmUuYzoxMzQ1OkVYUE9SVF9TWU1CT0xfR1BMKGwydHBfeG1pdF9za2IpO1xubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTM0Ni1cbi0tXG5uZXQvbDJ0cC9sMnRwX2NvcmUuaD0yNjE9dm9pZCBsMnRwX3Nlc3Npb25fc2V0X2hlYWRlcl9sZW4oc3RydWN0IGwydHBfc2Vzc2lvbiAqc2Vzc2lvbiwgaW50IHZlcnNpb24sXG5uZXQvbDJ0cC9sMnRwX2NvcmUuaC0yNjItXHRcdFx0XHQgZW51bSBsMnRwX2VuY2FwX3R5cGUgZW5jYXApO1xubmV0L2wydHAvbDJ0cF9jb3JlLmg6MjYzOmludCBsMnRwX3htaXRfc2tiKHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb24sIHN0cnVjdCBza19idWZmICpza2IpO1xubmV0L2wydHAvbDJ0cF9jb3JlLmgtMjY0LVxuLS1cbm5ldC9sMnRwL2wydHBfZXRoLmM9NzA9c3RhdGljIG5ldGRldl90eF90IGwydHBfZXRoX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2wydHAvbDJ0cF9ldGguYy03NC1cdHVuc2lnbmVkIGludCBsZW4gPSBza2ItXHUwMDNlbGVuO1xubmV0L2wydHAvbDJ0cF9ldGguYzo3NTpcdGludCByZXQgPSBsMnRwX3htaXRfc2tiKHNlc3Npb24sIHNrYik7XG5uZXQvbDJ0cC9sMnRwX2V0aC5jLTc2LVxuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmM9MjUwPXN0YXRpYyBpbnQgcHBwb2wydHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLFxuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmMtMzAyLVx0bG9jYWxfYmhfZGlzYWJsZSgpO1xubmV0L2wydHAvbDJ0cF9wcHAuYzozMDM6XHRsMnRwX3htaXRfc2tiKHNlc3Npb24sIHNrYik7XG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTMwNC1cdGxvY2FsX2JoX2VuYWJsZSgpO1xuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmM9MzMwPXN0YXRpYyBpbnQgcHBwb2wydHBfeG1pdChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2wydHAvbDJ0cF9wcHAuYy0zNjEtXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG5uZXQvbDJ0cC9sMnRwX3BwcC5jOjM2MjpcdGwydHBfeG1pdF9za2Ioc2Vzc2lvbiwgc2tiKTtcbm5ldC9sMnRwL2wydHBfcHBwLmMtMzYzLVx0bG9jYWxfYmhfZW5hYmxlKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIzOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3MTIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJhY2luZyB0aGUgTmV0d29yayBQYXRoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgTDJUUCBwYWNrZXRzIGFyZSB0cmFuc21pdHRlZC4gSSBzZWUgYGwydHBfeG1pdF9za2JgIGlzIGFuIGV4cG9ydGVkIHN5bWJvbDsgdGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEl0IGNhbGxzIGBsMnRwX3htaXRfY29yZWAsIHNvIHRoYXQmIzM5O3MgdGhlIGNvcmUgdHJhbnNtaXNzaW9uIGxvZ2ljLiBOb3csIEkgc2VlIHRoaXMgZnVuY3Rpb24gYGwydHBfZXRoX2NyZWF0ZWAuIEl0JiMzOTtzIG1hcmtlZCBhcyBzdGF0aWMsIG1lYW5pbmcgaXQmIzM5O3Mgb25seSB2aXNpYmxlIHdpdGhpbiBpdHMgY29tcGlsYXRpb24gdW5pdCwgYnV0IHdhaXQuLi4gSSByZWNvZ25pemUgaXQ7IEl0JiMzOTtzIGNhbGxlZCBieSBgbDJ0cF9ubF9jbWRfb3BzLnNlc3Npb25fY3JlYXRlYCwgd2hpY2ggc2VlbXMgaW1wb3J0YW50LiBMZXQgbWUgY3Jvc3MtcmVmZXJlbmNlLCB0aGUgbmV0bGluayBjb21tYW5kIGFzc29jaWF0ZWQgd2l0aCBzZXNzaW9uIGNyZWF0aW9uIGlzIGBMMlRQX0NNRF9TRVNTSU9OX0NSRUFURWAuCgpPa2F5LCBJJiMzOTt2ZSBnb3QgaXQuIFRoZSBmdW5jdGlvbiBgbDJ0cF9ubF9jbWRfc2Vzc2lvbl9jcmVhdGVgIGhhbmRsZXMgdGhhdCBzcGVjaWZpYyBOZXRsaW5rIGNvbW1hbmQuIEFuZCAqdGhhdCogZnVuY3Rpb24sIHNwZWNpZmljYWxseSwgY2FsbHMgYGwydHBfZXRoX2NyZWF0ZWAgaWYgdGhlIHR1bm5lbCB0eXBlIGlzIGBMMlRQX1BXVFlQRV9FVEhgLiBPa2F5LCBzbyBgbDJ0cF9ldGhfY3JlYXRlYCBoYXMgYSBzcGVjaWZpYyBqb2IgaW4gZXRoZXJuZXQgdHVubmVsIHNldHVwLiBBaCwgYW5kIGp1c3QgdG8gY29uZmlybSwgYGwydHBfZXRoX2NyZWF0ZWAgaXMgYWN0dWFsbHkgZGVmaW5lZCBpbiBgbDJ0cF9ldGguY2AuCgpSaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzZXNzaW9uIGNyZWF0aW9uIHByb2Nlc3MgaW4gbW9yZSBkZXRhaWwuIExldCYjMzk7cyBkaWcgaW50byBgbDJ0cF9ubF9jbWRfc2Vzc2lvbl9jcmVhdGVgIHRvIHNlZSB3aGF0JiMzOTtzIHJlYWxseSBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2wydHBfbmxfY21kX3Nlc3Npb25fY3JlYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2wydHAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9sMnRwL2wydHBfbmV0bGluay5jPTQ5OT1zdGF0aWMgaW50IGwydHBfbmxfY21kX3R1bm5lbF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYy01MjctXG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYzo1Mjg6c3RhdGljIGludCBsMnRwX25sX2NtZF9zZXNzaW9uX2NyZWF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmMtNTI5LXtcbi0tXG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYz05MzU9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NtYWxsX29wcyBsMnRwX25sX29wc1tdID0ge1xuLS1cbm5ldC9sMnRwL2wydHBfbmV0bGluay5jLTk2OS1cdFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmM6OTcwOlx0XHQuZG9pdCA9IGwydHBfbmxfY21kX3Nlc3Npb25fY3JlYXRlLFxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmMtOTcxLVx0XHQuZmxhZ3MgPSBHRU5MX1VOU19BRE1JTl9QRVJNLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTM5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdCBoZXJlLgoKKipBbmFseXppbmcgTDJUUCBNb2R1bGUgRm9jdXMgUG9pbnRzKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBMMlRQIGNvZGUsIGFuZCBpbW1lZGlhdGVseSB0d28gZnVuY3Rpb24gbmFtZXMganVtcCBvdXQgYXMgZ29vZCBmb2N1cyBwb2ludHMgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gU3BlY2lmaWNhbGx5LCBgbDJ0cF9ubF9jbWRfc2Vzc2lvbl9jcmVhdGVgIGFuZCBgbDJ0cF90dW5uZWxfcmVnaXN0ZXJgLiBUaG9zZSBzZWVtIGxpa2Uga2V5IGZ1bmN0aW9ucyBpbiB0aGUgc2V0dXAgYW5kIG1hbmFnZW1lbnQgb2YgdGhlc2UgdHVubmVscy4KCk5vdywgZ2xhbmNpbmcgYXQgdGhlIGNvbmZpZ3VyYXRpb25zLCBgTDJUUGAsIGBMMlRQX1YzYCwgYW5kIGBMMlRQX0VUSGAgYXJlIHRoZSBvbmVzIHRoYXQgc3RhbmQgb3V0IGFzIGltcG9ydGFudCBjb250ZXh0LCBhcyBJIHdvdWxkIGV4cGVjdC4KCkxldCBtZSB6ZXJvIGluIG9uIGBsMnRwX2V0aF9hZGp1c3RfbXR1YCB0byBzZWUgd2hlcmUgaXQgZ2V0cyBpbnZva2VkLiBBaCwgaXQgaXMgY2FsbGVkIHdpdGhpbiBgbDJ0cF9ldGhfY3JlYXRlYCwgd2hpY2ggc2VlbXMgbG9naWNhbCBnaXZlbiBpdHMgbmFtZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiBpdCYjMzk7cyBjYWxsZWQgYW55d2hlcmUgZWxzZS4gSXQgaXMgaW1wb3J0YW50IHRvIGtub3cgaWYgc29tZXRoaW5nIHRoYXQgc2VlbXMgc3BlY2lmaWMsIGlzIG1vcmUgZ2VuZXJhbCwgYXMgdGhhdCB3aWxsIGdpdmUgbWUgY2x1ZXMgYWJvdXQgdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUgbW9kdWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsMnRwX2V0aF9hZGp1c3RfbXR1JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2wydHAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9sMnRwL2wydHBfZXRoLmM9MTY2PXN0YXRpYyB2b2lkIGwydHBfZXRoX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICphcmcpXG4tLVxubmV0L2wydHAvbDJ0cF9ldGguYy0xODUtXG5uZXQvbDJ0cC9sMnRwX2V0aC5jOjE4NjpzdGF0aWMgdm9pZCBsMnRwX2V0aF9hZGp1c3RfbXR1KHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsLFxubmV0L2wydHAvbDJ0cF9ldGguYy0xODctXHRcdFx0XHRzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uLFxuLS1cbm5ldC9sMnRwL2wydHBfZXRoLmM9MjEyPXN0YXRpYyBpbnQgbDJ0cF9ldGhfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwsXG4tLVxubmV0L2wydHAvbDJ0cF9ldGguYy0yNDgtXHRkZXYtXHUwMDNlbWF4X210dSA9IEVUSF9NQVhfTVRVO1xubmV0L2wydHAvbDJ0cF9ldGguYzoyNDk6XHRsMnRwX2V0aF9hZGp1c3RfbXR1KHR1bm5lbCwgc2Vzc2lvbiwgZGV2KTtcbm5ldC9sMnRwL2wydHBfZXRoLmMtMjUwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE4NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEwyVFAgRXRoZXJuZXQgQ3JlYXRpb24gUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhlIEV0aGVybmV0IEwyVFAgY3JlYXRpb24gcHJvY2Vzcy4gSXQgbG9va3MgbGlrZSBgbDJ0cF9ldGhfY3JlYXRlYCBpcyB0aGUgb25seSBmdW5jdGlvbiB0aGF0IGNhbGxzIHRoZSByZWxldmFudCBjb2RlLiBBbmQgdGhhdCBmdW5jdGlvbiwgaW4gdHVybiwgaXMgaW52b2tlZCBieSBgbDJ0cF9ubF9jbWRfc2Vzc2lvbl9jcmVhdGVgLiBUaGVyZWZvcmUsIGBsMnRwX25sX2NtZF9zZXNzaW9uX2NyZWF0ZWAgc2VlbXMgbGlrZSB0aGUga2V5IHBvaW50IHRvIHN0YXJ0IGludmVzdGlnYXRpbmcuIEl0JiMzOTtzIHRoZSBjZW50cmFsIGNvbW1hbmQgZm9yIEV0aGVybmV0IEwyVFAgc2Vzc2lvbiBzZXR1cC4KCk5vdywgYXMgZm9yIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucywgSSYjMzk7bSB0aGlua2luZyBhYm91dDogYEwyVFBgLCBgTDJUUF9WM2AsIGBMMlRQX0VUSGAsIGFuZCBwb3NzaWJseSBgTDJUUF9JUGAuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgYG5ldC9sMnRwL0tjb25maWdgIGZpbGUsIHBhcnRpY3VsYXJseSBmb2N1c2luZyBvbiBgTDJUUF9FVEhgLCB0byBzZWUgaWYgaXRzIGFjdGl2YXRpb24gaGluZ2VzIG9uIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbnMuIFRoaXMgd2lsbCBwcm92aWRlIGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBwcmUtcmVxdWlzaXRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEwyVFBfRVRIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2wydHAvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbDJ0cC9LY29uZmlnPTcwPWNvbmZpZyBMMlRQX0lQXG4tLVxubmV0L2wydHAvS2NvbmZpZy04Ni1cbm5ldC9sMnRwL0tjb25maWc6ODc6Y29uZmlnIEwyVFBfRVRIXG5uZXQvbDJ0cC9LY29uZmlnLTg4LVx0dHJpc3RhdGUgXCYjMzQ7TDJUUCBldGhlcm5ldCBwc2V1ZG93aXJlIHN1cHBvcnQgZm9yIEwyVFB2M1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY1NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGBuZXQvbDJ0cC9LY29uZmlnYCBmaWxlIGFuZCB0aGUgYEwyVFBfRVRIYCBjb25maWd1cmF0aW9uIG9wdGlvbjoKCioqRGl2aW5nIGludG8gdGhlIEwyVFAgS2NvbmZpZyoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgbmV0L2wydHAvS2NvbmZpZ2AgZmlsZSwgcGFydGljdWxhcmx5IGFyb3VuZCB0aGUgYEwyVFBfRVRIYCBvcHRpb24uIEkga25vdyB0aGlzIGZpbGUgaXMgY3J1Y2lhbCBmb3IgY29uZmlndXJpbmcgdGhlIEwyVFAga2VybmVsIG1vZHVsZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgRXRoZXJuZXQtc3BlY2lmaWMgTDJUUCBmdW5jdGlvbmFsaXR5IGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGFyZSBhdCBwbGF5LiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIHRoZSBkZXBlbmRlbmNpZXMsIHdoaWNoIG90aGVyIGZlYXR1cmVzIG9yIG1vZHVsZXMgdGhpcyBzZXR0aW5nIHJlbGllcyBvbiBvciB3aGljaCBvbmVzIHJlbHkgb24gaXQuIEkgYWxzbyBuZWVkIHRvIHVuZGVyc3RhbmQgYW55IGRlZmF1bHQgc2V0dGluZ3Mgb3IgZGVzY3JpcHRpb25zIHByb3ZpZGVkIGluIHRoZSBjb25maWd1cmF0aW9uLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZSBMMlRQIGltcGxlbWVudGF0aW9uLCBpdHMgY29ubmVjdGlvbiB0byB0aGUgb3ZlcmFsbCBuZXR3b3JrIHN0YWNrLCBhbmQgaG93IGBMMlRQX0VUSGAgZml0cyBpbnRvIHRoYXQgYXJjaGl0ZWN0dXJlLiBBcmUgdGhlcmUgYW55IHNwZWNpZmljIGRyaXZlcnMgb3IgaGFyZHdhcmUgcGxhdGZvcm1zIG1lbnRpb25lZCBpbiByZWxhdGlvbiB0byBFdGhlcm5ldCBzdXBwb3J0PyBUaGlzIGlzIG9mdGVuIHdoZXJlIHlvdSBmaW5kIGNsdWVzIGFib3V0IHRoZSBpbnRlbmRlZCB1c2UgY2FzZXMgYW5kIHBvdGVudGlhbCBsaW1pdGF0aW9ucy4gSSYjMzk7bSBsb29raW5nIGZvciBjbHVlcyBhYm91dCBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MsIHRvby4gQXJlIHRoZXJlIGFueSB3YXJuaW5ncywgc3VnZ2VzdGlvbnMsIG9yIGNvbW1lbnRzIGFib3V0IHNwZWNpZmljIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zPyBUaGlzIGFuYWx5c2lzIGlzIGltcG9ydGFudCBmb3IgYSBjb21wbGV0ZSBwaWN0dXJlLCBhcyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhbGwgdGhlIGZhY3RvcnMgaW52b2x2ZWQgaW4gZWZmZWN0aXZlbHkgY29uZmlndXJpbmcgYW5kIGRlcGxveWluZyBMMlRQIG92ZXIgRXRoZXJuZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2wydHAvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODA6XHRcdCAgd2hlbiBVRFAgZW5jYXBzdWxhdGlvbiBpcyBub3QgcmVxdWlyZWQuIFdoZW4gTDJUUCBpcyBjYXJyaWVkXG4gIDgxOlx0XHQgIGluIElQIHBhY2tldHMsIGl0IHVzZWQgSVAgcHJvdG9jb2wgbnVtYmVyIDExNSwgc28gdGhpcyBwb3J0XG4gIDgyOlx0XHQgIG11c3QgYmUgZW5hYmxlZCBpbiBmaXJld2FsbHMuXG4gIDgzOlx0XG4gIDg0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcbiAgODU6XHRcdCAgd2lsbCBiZSBjYWxsZWQgbDJ0cF9pcC5cbiAgODY6XHRcbiAgODc6XHRjb25maWcgTDJUUF9FVEhcbiAgODg6XHRcdHRyaXN0YXRlIFwmIzM0O0wyVFAgZXRoZXJuZXQgcHNldWRvd2lyZSBzdXBwb3J0IGZvciBMMlRQdjNcJiMzNDtcbiAgODk6XHRcdGRlcGVuZHMgb24gTDJUUF9WM1xuICA5MDpcdFx0aGVscFxuICA5MTpcdFx0ICBTdXBwb3J0IGZvciBjYXJyeWluZyByYXcgZXRoZXJuZXQgZnJhbWVzIG92ZXIgTDJUUHYzLlxuICA5MjpcdFxuICA5MzpcdFx0ICBGcm9tIFJGQyA0NzE5IFx1MDAzY2h0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzQ3MTkudHh0XHUwMDNlLlxuICA5NDpcdFxuICA5NTpcdFx0ICBUaGUgTGF5ZXIgMiBUdW5uZWxpbmcgUHJvdG9jb2wsIFZlcnNpb24gMyAoTDJUUHYzKSBjYW4gYmVcbiAgOTY6XHRcdCAgdXNlZCBhcyBhIGNvbnRyb2wgcHJvdG9jb2wgYW5kIGZvciBkYXRhIGVuY2Fwc3VsYXRpb24gdG8gc2V0XG4gIDk3Olx0XHQgIHVwIFBzZXVkb3dpcmVzIGZvciB0cmFuc3BvcnRpbmcgbGF5ZXIgMiBQYWNrZXQgRGF0YSBVbml0c1xuICA5ODpcdFx0ICBhY3Jvc3MgYW4gSVAgbmV0d29yayBbUkZDMzkzMV0uXG4gIDk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIzOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzI2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipMMlRQdjMgQ29uc2lkZXJhdGlvbnMqKgoKT2theSwgc28gdGhlIGNvcmUgaXNzdWUgaGluZ2VzIG9uIGBMMlRQX1YzYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgY3JpdGljYWwgYXJjaGl0ZWN0dXJhbCBkZWNpc2lvbnMgYXJlIGdvaW5nIHRvIGJlIG1hZGUuIEJ1dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgc3BlY2lmaWNhbGx5ICp3aHkqIGBMMlRQX1YzYCBpcyBiZWluZyBicm91Z2h0IHVwLiBJIG5lZWQgdG8gZGVsdmUgaW50byB0aGUgZGV0YWlscyBoZXJlLiBXaGF0IGlzIGl0IGFib3V0IHRoaXMgcGFydGljdWxhciBwcm90b2NvbCB0aGF0IHJlcXVpcmVzIGZ1cnRoZXIgZXZhbHVhdGlvbiBvciBpbnRlZ3JhdGlvbj8gQXJlIHdlIGxvb2tpbmcgYXQgdHJhbnNwb3J0LCBjb250cm9sIHBsYW5lLCBkYXRhIHBsYW5lLCBvciBhIGNvbWJpbmF0aW9uPyBUaGlzIGlzIHRoZSBjZW50cmFsIHBvaW50IHRvIGNvbnNpZGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9sMnRwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQwOlx0XHQgIFN1cHBvcnQgZm9yIGwydHAgZGlyZWN0b3J5IGluIGRlYnVnZnMgZmlsZXN5c3RlbS4gVGhpcyBtYXkgYmVcbiAgNDE6XHRcdCAgdXNlZCB0byBkdW1wIGludGVybmFsIHN0YXRlIG9mIHRoZSBsMnRwIGRyaXZlcnMgZm9yIHByb2JsZW1cbiAgNDI6XHRcdCAgYW5hbHlzaXMuXG4gIDQzOlx0XG4gIDQ0Olx0XHQgIElmIHVuc3VyZSwgc2F5ICYjMzk7WSYjMzk7LlxuICA0NTpcdFxuICA0NjpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlXG4gIDQ3Olx0XHQgIHdpbGwgYmUgY2FsbGVkIGwydHBfZGVidWdmcy5cbiAgNDg6XHRcbiAgNDk6XHRjb25maWcgTDJUUF9WM1xuICA1MDpcdFx0Ym9vbCBcJiMzNDtMMlRQdjMgc3VwcG9ydFwmIzM0O1xuICA1MTpcdFx0ZGVwZW5kcyBvbiBMMlRQXG4gIDUyOlx0XHRoZWxwXG4gIDUzOlx0XHQgIExheWVyIFR3byBUdW5uZWxpbmcgUHJvdG9jb2wgVmVyc2lvbiAzXG4gIDU0Olx0XG4gIDU1Olx0XHQgIEZyb20gUkZDIDM5MzEgXHUwMDNjaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMzkzMS50eHRcdTAwM2UuXG4gIDU2Olx0XG4gIDU3Olx0XHQgIFRoZSBMYXllciBUd28gVHVubmVsaW5nIFByb3RvY29sIChMMlRQKSBwcm92aWRlcyBhIGR5bmFtaWNcbiAgNTg6XHRcdCAgbWVjaGFuaXNtIGZvciB0dW5uZWxpbmcgTGF5ZXIgMiAoTDIpIFwmIzM0O2NpcmN1aXRzXCYjMzQ7IGFjcm9zcyBhXG4gIDU5Olx0XHQgIHBhY2tldC1vcmllbnRlZCBkYXRhIG5ldHdvcmsgKGUuZy4sIG92ZXIgSVApLiAgTDJUUCwgYXNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MjIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6CgoqKkwyVFAgSW5xdWlyeSAmYW1wOyBEZXBlbmRlbmN5KioKCkFscmlnaHQsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpcyBzaXR1YXRpb24sIGFuZCBpbW1lZGlhdGVseSBteSBtaW5kIGdvZXMgdG8gdGhlIExheWVyIDIgVHVubmVsaW5nIFByb3RvY29sLCBgTDJUUGAuIFRoZSBjb250ZXh0IGxpa2VseSBoaW5nZXMgb24gaXRzIHVzZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCByb2xlIGBMMlRQYCBwbGF5cyBoZXJlLiBXaGF0IGlzIHRoZSBwYXJ0aWN1bGFyIGFzcGVjdCBvZiBgTDJUUGAgdGhhdCYjMzk7cyByZWxldmFudD8gSXMgaXQgaXRzIHNlY3VyaXR5LCBpdHMgdHJhbnNwb3J0IG1lY2hhbmlzbSwgaXRzIGltcGxlbWVudGF0aW9uIHF1aXJrcz8gSSBuZWVkIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgaG93IGBMMlRQYCBjb21lcyBpbnRvIHBsYXkgdG8gZ2l2ZSBhIG1vcmUgY29uY2lzZSBzdW1tYXJ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9sMnRwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBMYXllciBUd28gVHVubmVsaW5nIFByb3RvY29sIChMMlRQKVxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRtZW51Y29uZmlnIEwyVFBcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O0xheWVyIFR3byBUdW5uZWxpbmcgUHJvdG9jb2wgKEwyVFApXCYjMzQ7XG4gICA4Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDk6XHRcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxuICAxMDpcdFx0aGVscFxuICAxMTpcdFx0ICBMYXllciBUd28gVHVubmVsaW5nIFByb3RvY29sXG4gIDEyOlx0XG4gIDEzOlx0XHQgIEZyb20gUkZDIDI2NjEgXHUwMDNjaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMjY2MS50eHRcdTAwM2UuXG4gIDE0Olx0XG4gIDE1Olx0XHQgIEwyVFAgZmFjaWxpdGF0ZXMgdGhlIHR1bm5lbGluZyBvZiBwYWNrZXRzIGFjcm9zcyBhblxuICAxNjpcdFx0ICBpbnRlcnZlbmluZyBuZXR3b3JrIGluIGEgd2F5IHRoYXQgaXMgYXMgdHJhbnNwYXJlbnQgYXNcbiAgMTc6XHRcdCAgcG9zc2libGUgdG8gYm90aCBlbmQtdXNlcnMgYW5kIGFwcGxpY2F0aW9ucy5cbiAgMTg6XHRcbiAgMTk6XHRcdCAgTDJUUCBpcyBvZnRlbiB1c2VkIHRvIHR1bm5lbCBQUFAgdHJhZmZpYyBvdmVyIElQXG4gIDIwOlx0XHQgIHR1bm5lbHMuIE9uZSBJUCB0dW5uZWwgbWF5IGNhcnJ5IHRob3VzYW5kcyBvZiBpbmRpdmlkdWFsIFBQUFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI5MAoJCQkJCQkJb3V0cHV0OiAxMzkKCQkJCQkJCXRob3VnaHRzOiAzNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTDJUUCBGdXp6aW5nIFRhcmdldCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaGluZ2VzIG9uIHRoZSBwcmVzZW5jZSBvZiBgSU5FVGAsIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgc3RhY2suIEdpdmVuIHRoYXQsIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBzZWVtIHRvIGJlIGBMMlRQYCwgYEwyVFBfVjNgLCBhbmQgYEwyVFBfRVRIYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGtleSBzeW1ib2xzLCBhbmQgdGhlIGluaXRpYWwgc3VzcGVjdHMgbG9vayBsaWtlIGBsMnRwX3R1bm5lbF9yZWdpc3RlcmAsIGBsMnRwX25sX2NtZF9zZXNzaW9uX2NyZWF0ZWAsIGFuZCwgY3J1Y2lhbGx5LCBgbDJ0cF94bWl0X3NrYmAuCgpOb3csIGlzIGBsMnRwX3htaXRfc2tiYCByZWFsbHkgdGhlIGJlc3QgZnVuY3Rpb24gdG8gZm9jdXMgb24/IEEgcXVpY2sgY2hlY2sgc2hvd3MgdGhhdCBpdCAqaXMqIGV4cG9ydGVkIGFuZCBjYWxsZWQgYnkgc2V2ZXJhbCBpbXBvcnRhbnQgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYGwydHBfZXRoX2Rldl94bWl0YCwgYHBwcG9sMnRwX3NlbmRtc2dgLCBhbmQgYHBwcG9sMnRwX3htaXRgLiBBaGEhIGBsMnRwX2V0aF9kZXZfeG1pdGAgaXMgdGhlIGBuZG9fc3RhcnRfeG1pdGAgZm9yIEwyVFAgZXRoZXJuZXQgZGV2aWNlcy4gVGhhdCYjMzk7cyBhIHN0cm9uZyBpbmRpY2F0b3IgdGhhdCBmdXp6aW5nIGBsMnRwX3htaXRfc2tiYCBpcyBhIHZhbGlkIGFuZCBwb3RlbnRpYWxseSBmcnVpdGZ1bCBhcHByb2FjaC4KCkkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBZZXMsIHRoZSBgTDJUUF9JUGAgY29uZmlnIGlzIGFsc28gY2xlYXJseSByZWxldmFudCBoZXJlLCBzaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIEwyVFAgb3ZlciBJUC4gTGV0JiMzOTtzIGluY2x1ZGUgdGhhdCBpbiB0aGUgbGlzdC4KCk9rYXksIGxldCBtZSBzdW1tYXJpemUgbXkgZmluZGluZ3MgZm9yIGNsYXJpdHkuCgoqICAgYFdvcnRoRnV6emluZ2A6IFRydWUuCiogICBgUmVhc29uaW5nYDogVGhpcyBwYXRjaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IHJlZmFjdG9ycyBMMlRQIGhlYWRyb29tIGFuZCBvdmVyaGVhZCBjYWxjdWxhdGlvbnMuIFRoaXMgaW52b2x2ZXMgY2hhbmdlcyB0byBNVFUgYWRqdXN0bWVudCBhbmQgU0tCIGhlYWRyb29tIGNoZWNrcyB3aXRoaW4gdGhlIEwyVFAgY29yZSBhbmQgdGhlIEwyVFAgRXRoZXJuZXQgcHNldWRvd2lyZSBjb2RlLiBUaGUgY2hhbmdlcyB0b3VjaCBjb3JlIG5ldHdvcmsgcGF0aHMsIHdoaWNoIGlzIGFsd2F5cyB3b3J0aCBhIGNsb3NlciBsb29rLgoqICAgYEZvY3VzU3ltYm9sc2A6IGBsMnRwX3R1bm5lbF9yZWdpc3RlcmAsIGBsMnRwX25sX2NtZF9zZXNzaW9uX2NyZWF0ZWAsIGBsMnRwX3htaXRfc2tiYC4KKiAgIGBFbmFibGVDb25maWdzYDogYEwyVFBgLCBgTDJUUF9WM2AsIGBMMlRQX0VUSGAsIGFuZCBgTDJUUF9JUGAuCgpUaGlzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0wyVFAmIzM0OywKICAgICYjMzQ7TDJUUF9WMyYjMzQ7LAogICAgJiMzNDtMMlRQX0VUSCYjMzQ7LAogICAgJiMzNDtMMlRQX0lQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bDJ0cF90dW5uZWxfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7bDJ0cF9ubF9jbWRfc2Vzc2lvbl9jcmVhdGUmIzM0OywKICAgICYjMzQ7bDJ0cF94bWl0X3NrYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgTDJUUCBoZWFkcm9vbSBhbmQgb3ZlcmhlYWQgY2FsY3VsYXRpb25zLCBtb2RpZnlpbmcgTVRVIGFkanVzdG1lbnQgYW5kIFNLQiBoZWFkcm9vbSBjaGVja3MgaW4gTDJUUCBjb3JlIGFuZCBMMlRQIEV0aGVybmV0IHBzZXVkb3dpcmUgY29kZS4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0wyVFAmIzM0OywKICAgICYjMzQ7TDJUUF9WMyYjMzQ7LAogICAgJiMzNDtMMlRQX0VUSCYjMzQ7LAogICAgJiMzNDtMMlRQX0lQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bDJ0cF90dW5uZWxfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7bDJ0cF9ubF9jbWRfc2Vzc2lvbl9jcmVhdGUmIzM0OywKICAgICYjMzQ7bDJ0cF94bWl0X3NrYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgTDJUUCBoZWFkcm9vbSBhbmQgb3ZlcmhlYWQgY2FsY3VsYXRpb25zLCBtb2RpZnlpbmcgTVRVIGFkanVzdG1lbnQgYW5kIFNLQiBoZWFkcm9vbSBjaGVja3MgaW4gTDJUUCBjb3JlIGFuZCBMMlRQIEV0aGVybmV0IHBzZXVkb3dpcmUgY29kZS4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDIzOjM4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjM6Mzg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBjYWxjdWxhdGlvbiBvZiBMMlRQIHBhY2tldCBvdmVyaGVhZCBhbmQgaGVhZHJvb20sIGNhY2hpbmcgdGhlIEwzIG92ZXJoZWFkIGluIHRoZSBgbDJ0cF90dW5uZWxgIHN0cnVjdHVyZSBhbmQgdXNpbmcgaXQgdG8gYWNjdXJhdGVseSByZXF1ZXN0IGhlYWRyb29tIHZpYSBgc2tiX2Nvd19oZWFkYCBhbmQgc2V0IE1UVS9uZWVkZWRfaGVhZHJvb20gZm9yIHRoZSBkZXZpY2UuIFRoZXNlIGNoYW5nZXMgcHJpbWFyaWx5IGFmZmVjdCBidWZmZXIgc2l6ZSBjYWxjdWxhdGlvbnMgYW5kIGhlYWRyb29tIGFsbG9jYXRpb24uIElmIHRoZSBjYWxjdWxhdGlvbnMgYXJlIGluY29ycmVjdCwgdGhleSBjb3VsZCBsZWFkIHRvIG91dC1vZi1ib3VuZHMgd3JpdGVzIChpZiBoZWFkcm9vbSBpcyB0b28gc21hbGwpIG9yIGZ1bmN0aW9uYWwgaXNzdWVzIChpbmNvcnJlY3QgTVRVKSwgYm90aCBvZiB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHRlc3RpbmcuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSwgbm9yIGRvZXMgaXQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHRoZSBuZXR3b3JrIG9yIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0Y2UwYzYzNzNiM2JhYjQ4MTZmOGNhMDQ5Y2VmZTQzNDZjOTcwMmZhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgOCAyMzozNzowOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9sMnRwL2wydHBfY29yZS5jIGIvbmV0L2wydHAvbDJ0cF9jb3JlLmMKaW5kZXggNDcxMmNjNDE4ODFhMy4uZjUyYmYzYjUzMjkwNyAxMDA2NDQKLS0tIGEvbmV0L2wydHAvbDJ0cF9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2wydHAvbDJ0cF9jb3JlLmMKQEAgLTEyMjcsMTggJiM0MzsxMjI3LDE2IEBAIHN0YXRpYyBpbnQgbDJ0cF94bWl0X2NvcmUoc3RydWN0IGwydHBfc2Vzc2lvbiAqc2Vzc2lvbiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zCiAJc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwgPSBzZXNzaW9uLSZndDt0dW5uZWw7CiAJdW5zaWduZWQgaW50IGRhdGFfbGVuID0gc2tiLSZndDtsZW47CiAJc3RydWN0IHNvY2sgKnNrID0gdHVubmVsLSZndDtzb2NrOwotCWludCBoZWFkcm9vbSwgdWhsZW4sIHVkcF9sZW47CiAJaW50IHJldCA9IE5FVF9YTUlUX1NVQ0NFU1M7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldDsKIAlzdHJ1Y3QgdWRwaGRyICp1aDsKJiM0MzsJaW50IHVkcF9sZW47CiAKIAkvKiBDaGVjayB0aGF0IHRoZXJlJiMzOTtzIGVub3VnaCBoZWFkcm9vbSBpbiB0aGUgc2tiIHRvIGluc2VydCBJUCwKIAkgKiBVRFAgYW5kIEwyVFAgaGVhZGVycy4gSWYgbm90IGVub3VnaCwgZXhwYW5kIGl0IHRvCiAJICogbWFrZSByb29tLiBBZGp1c3QgdHJ1ZXNpemUuCiAJICovCi0JdWhsZW4gPSAodHVubmVsLSZndDtlbmNhcCA9PSBMMlRQX0VOQ0FQVFlQRV9VRFApID8gc2l6ZW9mKCp1aCkgOiAwOwotCWhlYWRyb29tID0gTkVUX1NLQl9QQUQgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcGhkcikgJiM0MzsgdWhsZW4gJiM0Mzsgc2Vzc2lvbi0mZ3Q7aGRyX2xlbjsKLQlpZiAoc2tiX2Nvd19oZWFkKHNrYiwgaGVhZHJvb20pKSB7CiYjNDM7CWlmIChza2JfY293X2hlYWQoc2tiLCBsMnRwX3Nlc3Npb25fc2tiX2hlYWRyb29tKHNlc3Npb24sIHR1bm5lbCkpKSB7CiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gTkVUX1hNSVRfRFJPUDsKIAl9CkBAIC0xMjkwLDcgJiM0MzsxMjg4LDkgQEAgc3RhdGljIGludCBsMnRwX3htaXRfY29yZShzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnMKIAkJdWggPSB1ZHBfaGRyKHNrYik7CiAJCXVoLSZndDtzb3VyY2UgPSBpbmV0LSZndDtpbmV0X3Nwb3J0OwogCQl1aC0mZ3Q7ZGVzdCA9IGluZXQtJmd0O2luZXRfZHBvcnQ7Ci0JCXVkcF9sZW4gPSB1aGxlbiAmIzQzOyBzZXNzaW9uLSZndDtoZHJfbGVuICYjNDM7IGRhdGFfbGVuOwomIzQzOwomIzQzOwkJdWRwX2xlbiA9IGwydHBfdHVubmVsX3VkcF9oZHJsZW4odHVubmVsKTsKJiM0MzsJCXVkcF9sZW4gJiM0Mzs9IHNlc3Npb24tJmd0O2hkcl9sZW4gJiM0MzsgZGF0YV9sZW47CiAJCWlmICh1ZHBfbGVuICZndDsgVTE2X01BWCkgewogCQkJa2ZyZWVfc2tiKHNrYik7CiAJCQlyZXQgPSBORVRfWE1JVF9EUk9QOwpAQCAtMTY4OCw2ICYjNDM7MTY4OCw3IEBAIGludCBsMnRwX3R1bm5lbF9yZWdpc3RlcihzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbCwgc3RydWN0IG5ldCAqbmV0LAogCX0KIAogCXNrLSZndDtza19hbGxvY2F0aW9uID0gR0ZQX0FUT01JQzsKJiM0MzsJdHVubmVsLSZndDtsM19vdmVyaGVhZCA9IGtlcm5lbF9zb2NrX2lwX292ZXJoZWFkKHNrKTsKIAlyZWxlYXNlX3NvY2soc2spOwogCiAJc29ja19ob2xkKHNrKTsKZGlmZiAtLWdpdCBhL25ldC9sMnRwL2wydHBfY29yZS5oIGIvbmV0L2wydHAvbDJ0cF9jb3JlLmgKaW5kZXggZmZkOGNlZDNhNTFmZi4uMmM0MTg3N2I2Y2U1NyAxMDA2NDQKLS0tIGEvbmV0L2wydHAvbDJ0cF9jb3JlLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2wydHAvbDJ0cF9jb3JlLmgKQEAgLTE2Nyw2ICYjNDM7MTY3LDcgQEAgc3RydWN0IGwydHBfdHVubmVsIHsKIAl1MzIJCQl0dW5uZWxfaWQ7CiAJdTMyCQkJcGVlcl90dW5uZWxfaWQ7CiAJaW50CQkJdmVyc2lvbjsJLyogMj0mZ3Q7TDJUUHYyLCAzPSZndDtMMlRQdjMgKi8KJiM0MzsJaW50CQkJbDNfb3ZlcmhlYWQ7CS8qIElQIGhlYWRlciBvdmVyaGVhZCAqLwogCiAJY2hhcgkJCW5hbWVbTDJUUF9UVU5ORUxfTkFNRV9NQVhdOyAvKiBmb3IgbG9nZ2luZyAqLwogCWVudW0gbDJ0cF9lbmNhcF90eXBlCWVuY2FwOwpAQCAtMzM0LDYgJiM0MzszMzUsMjUgQEAgc3RhdGljIGlubGluZSBpbnQgbDJ0cF92M19lbnN1cmVfb3B0X2luX2xpbmVhcihzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uLCBzdHIKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGwydHBfdHVubmVsX3VkcF9oZHJsZW4oc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwpCiYjNDM7ewomIzQzOwlyZXR1cm4gdHVubmVsLSZndDtlbmNhcCA9PSBMMlRQX0VOQ0FQVFlQRV9VRFAgPwomIzQzOwkJc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpIDogMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgbDJ0cF9zZXNzaW9uX292ZXJoZWFkKHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb24sCiYjNDM7CQkJCQlzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbCkKJiM0Mzt7CiYjNDM7CXJldHVybiBsMnRwX3R1bm5lbF91ZHBfaGRybGVuKHR1bm5lbCkgJiM0Mzsgc2Vzc2lvbi0mZ3Q7aGRyX2xlbiAmIzQzOwomIzQzOwkJdHVubmVsLSZndDtsM19vdmVyaGVhZDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgbDJ0cF9zZXNzaW9uX3NrYl9oZWFkcm9vbShzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uLAomIzQzOwkJCQkJICAgIHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsKQomIzQzO3sKJiM0MzsJcmV0dXJuIE5FVF9TS0JfUEFEICYjNDM7IGwydHBfc2Vzc2lvbl9vdmVyaGVhZChzZXNzaW9uLCB0dW5uZWwpOwomIzQzO30KJiM0MzsKICNkZWZpbmUgTU9EVUxFX0FMSUFTX0wyVFBfUFdUWVBFKHR5cGUpIFwKIAlNT0RVTEVfQUxJQVMoJiMzNDtuZXQtbDJ0cC10eXBlLSYjMzQ7IF9fc3RyaW5naWZ5KHR5cGUpKQogCmRpZmYgLS1naXQgYS9uZXQvbDJ0cC9sMnRwX2V0aC5jIGIvbmV0L2wydHAvbDJ0cF9ldGguYwppbmRleCBhNDk1NmVmOTU3NGNjLi42ODdjZTFjNmRiOTQ2IDEwMDY0NAotLS0gYS9uZXQvbDJ0cC9sMnRwX2V0aC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9sMnRwL2wydHBfZXRoLmMKQEAgLTE4OCwzMSAmIzQzOzE4OCwxNyBAQCBzdGF0aWMgdm9pZCBsMnRwX2V0aF9hZGp1c3RfbXR1KHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsLAogCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJdW5zaWduZWQgaW50IG92ZXJoZWFkID0gMDsKLQl1MzIgbDNfb3ZlcmhlYWQgPSAwOwogCXUzMiBtdHU7CiAKLQkvKiBpZiB0aGUgZW5jYXAgaXMgVURQLCBhY2NvdW50IGZvciBVRFAgaGVhZGVyIHNpemUgKi8KLQlpZiAodHVubmVsLSZndDtlbmNhcCA9PSBMMlRQX0VOQ0FQVFlQRV9VRFApIHsKLQkJb3ZlcmhlYWQgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKLQkJZGV2LSZndDtuZWVkZWRfaGVhZHJvb20gJiM0Mzs9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKLQl9Ci0KLQlsb2NrX3NvY2sodHVubmVsLSZndDtzb2NrKTsKLQlsM19vdmVyaGVhZCA9IGtlcm5lbF9zb2NrX2lwX292ZXJoZWFkKHR1bm5lbC0mZ3Q7c29jayk7Ci0JcmVsZWFzZV9zb2NrKHR1bm5lbC0mZ3Q7c29jayk7Ci0KLQlpZiAobDNfb3ZlcmhlYWQgPT0gMCkgewomIzQzOwlpZiAodHVubmVsLSZndDtsM19vdmVyaGVhZCA9PSAwKSB7CiAJCS8qIEwzIE92ZXJoZWFkIGNvdWxkbiYjMzk7dCBiZSBpZGVudGlmaWVkLCB0aGlzIGNvdWxkIGJlCi0JCSAqIGJlY2F1c2UgdHVubmVsLSZndDtzb2NrIHdhcyBOVUxMIG9yIHRoZSBzb2NrZXQmIzM5O3MKLQkJICogYWRkcmVzcyBmYW1pbHkgd2FzIG5vdCBJUHY0IG9yIElQdjYsCi0JCSAqIGRldiBtdHUgc3RheXMgYXQgMTUwMC4KJiM0MzsJCSAqIGJlY2F1c2UgdGhlIHNvY2tldCYjMzk7cyBhZGRyZXNzIGZhbWlseSB3YXMgbm90IElQdjQKJiM0MzsJCSAqIG9yIElQdjYgLSBkZXYgbXR1IHN0YXlzIGF0IDE1MDAuCiAJCSAqLwogCQlyZXR1cm47CiAJfQotCS8qIEFkanVzdCBNVFUsIGZhY3RvciBvdmVyaGVhZCAtIHVuZGVybGF5IEwzLCBvdmVybGF5IEwyIGhkcgotCSAqIFVEUCBvdmVyaGVhZCwgaWYgYW55LCB3YXMgYWxyZWFkeSBmYWN0b3JlZCBpbiBhYm92ZS4KLQkgKi8KLQlvdmVyaGVhZCAmIzQzOz0gc2Vzc2lvbi0mZ3Q7aGRyX2xlbiAmIzQzOyBFVEhfSExFTiAmIzQzOyBsM19vdmVyaGVhZDsKJiM0MzsJLyogQ2FsY3VsYXRlIHJlcXVpcmVkIG92ZXJoZWFkICovCiYjNDM7CW92ZXJoZWFkID0gRVRIX0hMRU4gJiM0MzsgbDJ0cF9zZXNzaW9uX292ZXJoZWFkKHNlc3Npb24sIHR1bm5lbCk7CiAKIAltdHUgPSBsMnRwX3R1bm5lbF9kc3RfbXR1KHR1bm5lbCkgLSBvdmVyaGVhZDsKIAlpZiAobXR1ICZsdDsgZGV2LSZndDttaW5fbXR1IHx8IG10dSAmZ3Q7IGRldi0mZ3Q7bWF4X210dSkKQEAgLTIyMCw3ICYjNDM7MjA2LDcgQEAgc3RhdGljIHZvaWQgbDJ0cF9ldGhfYWRqdXN0X210dShzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbCwKIAllbHNlCiAJCWRldi0mZ3Q7bXR1ID0gbXR1OwogCi0JZGV2LSZndDtuZWVkZWRfaGVhZHJvb20gJiM0Mzs9IHNlc3Npb24tJmd0O2hkcl9sZW47CiYjNDM7CWRldi0mZ3Q7bmVlZGVkX2hlYWRyb29tID0gbDJ0cF9zZXNzaW9uX3NrYl9oZWFkcm9vbShzZXNzaW9uLCB0dW5uZWwpOwogfQogCiBzdGF0aWMgaW50IGwydHBfZXRoX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMjM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcxOAoJCQkJCQkJb3V0cHV0OiAxODEKCQkJCQkJCXRob3VnaHRzOiAxMzU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IEwyVFAgT3ZlcmhlYWQgUmVmYWN0b3IqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggbW9kaWZ5aW5nIHRoZSBMMlRQIGNvZGUsIHNwZWNpZmljYWxseSBmb2N1c2VkIG9uIGhvdyBvdmVyaGVhZCBhbmQgaGVhZHJvb20gYXJlIGNhbGN1bGF0ZWQuIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzLCAmIzM0O0FyZSB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgaW50cm9kdWNlZCBoZXJlPyYjMzQ7LiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaW52b2x2ZXMgdGhlc2UgbmV3IGZ1bmN0aW9uczogYGwydHBfc2Vzc2lvbl9vdmVyaGVhZGAsIGBsMnRwX3Nlc3Npb25fc2tiX2hlYWRyb29tYCwgYW5kIGNhY2hpbmcgYGwzX292ZXJoZWFkYCBkdXJpbmcgdHVubmVsIHJlZ2lzdHJhdGlvbi4gSXQgc2VlbXMgdGhlIGludGVudGlvbiBpcyB0byBtYWtlIHRoZSBoZWFkcm9vbSBjYWxjdWxhdGlvbiBtb3JlIHByZWNpc2UsIHVzaW5nIGBsMnRwX3Nlc3Npb25fc2tiX2hlYWRyb29tYCB3aXRoIGBza2JfY293X2hlYWRgIGluIGBsMnRwX3htaXRfY29yZWAgYW5kIGFkanVzdGluZyB0aGUgTVRVIGNhbGN1bGF0aW9uIGluIGBsMnRwX2V0aF9hZGp1c3RfbXR1YC4KCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoZSBjYWxjdWxhdGlvbnMuIGBsM19vdmVyaGVhZGAgZ2V0cyBzdG9yZWQgaW4gYHR1bm5lbC0mZ3Q7bDNfb3ZlcmhlYWRgIHVzaW5nIGBrZXJuZWxfc29ja19pcF9vdmVyaGVhZChzaylgLiBUaGVuLCBgbDJ0cF9zZXNzaW9uX3NrYl9oZWFkcm9vbWAgYWRkcyBgTkVUX1NLQl9QQUQgJiM0MzsgbDJ0cF9zZXNzaW9uX292ZXJoZWFkKHNlc3Npb24sIHR1bm5lbClgLiAgQW5kIHRoYXQgYGwydHBfc2Vzc2lvbl9vdmVyaGVhZGAgYWRkcyB0aGUgVURQIGhlYWRlciBsZW5ndGggaWYgYXBwbGljYWJsZSwgdGhlIHNlc3Npb24gaGVhZGVyIGxlbmd0aCwgYW5kIHRoZSB0dW5uZWwmIzM5O3MgTDMgb3ZlcmhlYWQuCgpMb29raW5nIGF0IGBsMnRwX3htaXRfY29yZWAsIHRoZSBjb2RlIGhhcyBiZWVuIHVwZGF0ZWQgdG8gdXNlIHRoZSBuZXcgYGwydHBfc2Vzc2lvbl9za2JfaGVhZHJvb21gIGZ1bmN0aW9uLiBCZWZvcmUsIGl0IHdhcyBjYWxjdWxhdGluZyB0aGUgaGVhZHJvb20gZGlyZWN0bHksIGluY2x1ZGluZyB0aGUgSVAgaGVhZGVyIHNpemUuIE5vdywgaXQmIzM5O3MgdXNpbmcgdGhlIGNhY2hlZCBgbDNfb3ZlcmhlYWRgLiBNeSBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBpcyBjb25zaXN0ZW50LiBJdCYjMzk7cyBub3cgZXhwbGljaXRseSB1c2luZyBgdHVubmVsLSZndDtsM19vdmVyaGVhZGAsIHdoaWNoLCBhZ2FpbiwgaXMgdGhlIHJlc3VsdCBvZiBga2VybmVsX3NvY2tfaXBfb3ZlcmhlYWQoc2spYC4gVGhpcyBjb3VsZCByZXByZXNlbnQgSVB2NCBvciBJUHY2IG92ZXJoZWFkLCBzbyBpdCAqY291bGQqIGJlIGxhcmdlciBpbiB0aGUgSVB2NiBjYXNlLgoKU28sIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogRG9lcyB0aGlzIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uIGBza2JfY293X2hlYWRgIGlzIGp1c3QgYWxsb2NhdGluZyBtb3JlIHNwYWNlLiBJdCBkb2VzbiYjMzk7dCBpbml0aWFsaXplIGRhdGEsIHRoZSBuZXR3b3JrIHN0YWNrIGRvZXMgdGhhdCBsYXRlci4gVGhlIHBvdGVudGlhbCByaXNrcyBoZXJlIGFyZSBpbmNvcnJlY3QgaGVhZHJvb20gbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIGFjY2VzcyBvciwgd29yc2UsIGEgcGFuaWMg4oCTIGJ1dCBLQVNBTiBzaG91bGQgY2F0Y2ggdGhvc2UgaXNzdWVzLiBUaGlzIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIG5vciBkb2VzIGl0IGludHJvZHVjZSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMuIFRoZXJlJiMzOTtzIG5vdGhpbmcgaGVyZSB0aGF0JiMzOTtzIHJlYWRpbmcgdW5pbml0aWFsaXplZCBieXRlcyBmcm9tIGV4aXN0aW5nIGJ1ZmZlcnMgYmVjYXVzZSBvZiBhIGJvdW5kcyBpc3N1ZS4KCkEgZmluYWwgdGhvdWdodDogSXMgdGhlcmUgYW55IHNjZW5hcmlvIHdoZXJlIGBza2JfY293X2hlYWRgIGl0c2VsZiBjYW4gbGVhdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gdGhlIFNLQiB0aGF0IHdvdWxkIGdldCBzZW50PyBOby4gVGhlIGRhdGEgc2VjdGlvbiBvZiB0aGUgc2tiIGlzIGZpbGxlZCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBkYXRhIGxhdGVyLiBJZiBpdCAqZGlkKiBsZWF2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgS01TQU4gd291bGQgZmxhZyBpdC4gVGhpcyBwYXRjaCBpcyBqdXN0IGNoYW5naW5nIHRoZSAqYW1vdW50KiBvZiBoZWFkcm9vbSByZXF1ZXN0ZWQsIG5vdCBob3cgdGhlIGRhdGEgaXMgd3JpdHRlbi4KCkxldCYjMzk7cyByZXZpZXcgdGhlIGNoYW5nZXMgaW4gYGwydHBfZXRoX2FkanVzdF9tdHVgLiBJdCBsb29rcyBsaWtlIGl0IGlzIGp1c3QgcmVmYWN0b3JpbmcgdGhlIE1UVSBjYWxjdWxhdGlvbiB1c2luZyB0aGUgbmV3IGhlbHBlciBmdW5jdGlvbi4KCkkgZG9uJiMzOTt0IHNlZSBhbnkgS01TQU4tc3BlY2lmaWMgcmlza3MgaGVyZS4gVGhlIHBvdGVudGlhbCBidWdzIGFyZSBPT0IgYWNjZXNzZXMgb3IgaW5jb3JyZWN0IE1UVSBzaXplcywgd2hpY2ggS0FTQU4sIG9yIGZ1bmN0aW9uYWwgZmFpbHVyZSB3aWxsIGNhdGNoLgpDYW4gYGtlcm5lbF9zb2NrX2lwX292ZXJoZWFkYCByZXR1cm4gdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLCBpdCYjMzk7cyBqdXN0IHJldHVybmluZyBhIHNpemUuCklzIGB0dW5uZWwtJmd0O2wzX292ZXJoZWFkYCB1bmluaXRpYWxpemVkPyBObywgaXQgaXMgaW5pdGlhbGl6ZWQgd2hlbiByZWdpc3RlcmluZyB0aGUgdHVubmVsIHZpYSBgbDJ0cF90dW5uZWxfcmVnaXN0ZXJgLgoKYGBgYwoJc2stJmd0O3NrX2FsbG9jYXRpb24gPSBHRlBfQVRPTUlDOwoJdHVubmVsLSZndDtsM19vdmVyaGVhZCA9IGtlcm5lbF9zb2NrX2lwX292ZXJoZWFkKHNrKTsKCXJlbGVhc2Vfc29jayhzayk7CmBgYAoKU28sIE5lZWRzS01TQU4gc2hvdWxkIGJlIGZhbHNlIGhlcmUuCgpUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBjYWxjdWxhdGlvbiBvZiBMMlRQIHBhY2tldCBvdmVyaGVhZCBhbmQgaGVhZHJvb20sIGNhY2hpbmcgdGhlIEwzIG92ZXJoZWFkIGluIHRoZSBgbDJ0cF90dW5uZWxgIHN0cnVjdHVyZSBhbmQgdXNpbmcgaXQgdG8gYWNjdXJhdGVseSByZXF1ZXN0IGhlYWRyb29tIHZpYSBgc2tiX2Nvd19oZWFkYCBhbmQgc2V0IE1UVS9uZWVkZWRfaGVhZHJvb20gZm9yIHRoZSBkZXZpY2UuIFRoZXNlIGNoYW5nZXMgcHJpbWFyaWx5IGFmZmVjdCBidWZmZXIgc2l6ZSBjYWxjdWxhdGlvbnMgYW5kIGhlYWRyb29tIGFsbG9jYXRpb24uIElmIHRoZSBjYWxjdWxhdGlvbnMgYXJlIGluY29ycmVjdCwgdGhleSBjb3VsZCBsZWFkIHRvIG91dC1vZi1ib3VuZHMgd3JpdGVzIChpZiBoZWFkcm9vbSBpcyB0b28gc21hbGwpIG9yIGZ1bmN0aW9uYWwgaXNzdWVzIChpbmNvcnJlY3QgTVRVKSwgYm90aCBvZiB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHRlc3RpbmcuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSwgbm9yIGRvZXMgaXQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHRoZSBuZXR3b3JrIG9yIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAyMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGNhbGN1bGF0aW9uIG9mIEwyVFAgcGFja2V0IG92ZXJoZWFkIGFuZCBoZWFkcm9vbSwgY2FjaGluZyB0aGUgTDMgb3ZlcmhlYWQgaW4gdGhlIGBsMnRwX3R1bm5lbGAgc3RydWN0dXJlIGFuZCB1c2luZyBpdCB0byBhY2N1cmF0ZWx5IHJlcXVlc3QgaGVhZHJvb20gdmlhIGBza2JfY293X2hlYWRgIGFuZCBzZXQgTVRVL25lZWRlZF9oZWFkcm9vbSBmb3IgdGhlIGRldmljZS4gVGhlc2UgY2hhbmdlcyBwcmltYXJpbHkgYWZmZWN0IGJ1ZmZlciBzaXplIGNhbGN1bGF0aW9ucyBhbmQgaGVhZHJvb20gYWxsb2NhdGlvbi4gSWYgdGhlIGNhbGN1bGF0aW9ucyBhcmUgaW5jb3JyZWN0LCB0aGV5IGNvdWxkIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyB3cml0ZXMgKGlmIGhlYWRyb29tIGlzIHRvbyBzbWFsbCkgb3IgZnVuY3Rpb25hbCBpc3N1ZXMgKGluY29ycmVjdCBNVFUpLCBib3RoIG9mIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgdGVzdGluZy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLCBub3IgZG9lcyBpdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdGhlIG5ldHdvcmsgb3IgdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGNhbGN1bGF0aW9uIG9mIEwyVFAgcGFja2V0IG92ZXJoZWFkIGFuZCBoZWFkcm9vbSwgY2FjaGluZyB0aGUgTDMgb3ZlcmhlYWQgaW4gdGhlIGBsMnRwX3R1bm5lbGAgc3RydWN0dXJlIGFuZCB1c2luZyBpdCB0byBhY2N1cmF0ZWx5IHJlcXVlc3QgaGVhZHJvb20gdmlhIGBza2JfY293X2hlYWRgIGFuZCBzZXQgTVRVL25lZWRlZF9oZWFkcm9vbSBmb3IgdGhlIGRldmljZS4gVGhlc2UgY2hhbmdlcyBwcmltYXJpbHkgYWZmZWN0IGJ1ZmZlciBzaXplIGNhbGN1bGF0aW9ucyBhbmQgaGVhZHJvb20gYWxsb2NhdGlvbi4gSWYgdGhlIGNhbGN1bGF0aW9ucyBhcmUgaW5jb3JyZWN0LCB0aGV5IGNvdWxkIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyB3cml0ZXMgKGlmIGhlYWRyb29tIGlzIHRvbyBzbWFsbCkgb3IgZnVuY3Rpb25hbCBpc3N1ZXMgKGluY29ycmVjdCBNVFUpLCBib3RoIG9mIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgdGVzdGluZy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLCBub3IgZG9lcyBpdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdGhlIG5ldHdvcmsgb3IgdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIzOjM3OjA5Ljg5Nzk2NjE4NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNTg4NzY4MDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkwyVFBcIixcbiAgICBcIkwyVFBfVjNcIixcbiAgICBcIkwyVFBfRVRIXCIsXG4gICAgXCJMMlRQX0lQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibDJ0cF90dW5uZWxfcmVnaXN0ZXJcIixcbiAgICBcImwydHBfbmxfY21kX3Nlc3Npb25fY3JlYXRlXCIsXG4gICAgXCJsMnRwX3htaXRfc2tiXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGNhbGN1bGF0aW9uIG9mIEwyVFAgcGFja2V0IG92ZXJoZWFkIGFuZCBoZWFkcm9vbSwgY2FjaGluZyB0aGUgTDMgb3ZlcmhlYWQgaW4gdGhlIGBsMnRwX3R1bm5lbGAgc3RydWN0dXJlIGFuZCB1c2luZyBpdCB0byBhY2N1cmF0ZWx5IHJlcXVlc3QgaGVhZHJvb20gdmlhIGBza2JfY293X2hlYWRgIGFuZCBzZXQgTVRVL25lZWRlZF9oZWFkcm9vbSBmb3IgdGhlIGRldmljZS4gVGhlc2UgY2hhbmdlcyBwcmltYXJpbHkgYWZmZWN0IGJ1ZmZlciBzaXplIGNhbGN1bGF0aW9ucyBhbmQgaGVhZHJvb20gYWxsb2NhdGlvbi4gSWYgdGhlIGNhbGN1bGF0aW9ucyBhcmUgaW5jb3JyZWN0LCB0aGV5IGNvdWxkIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyB3cml0ZXMgKGlmIGhlYWRyb29tIGlzIHRvbyBzbWFsbCkgb3IgZnVuY3Rpb25hbCBpc3N1ZXMgKGluY29ycmVjdCBNVFUpLCBib3RoIG9mIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgdGVzdGluZy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLCBub3IgZG9lcyBpdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdGhlIG5ldHdvcmsgb3IgdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIEwyVFAgaGVhZHJvb20gYW5kIG92ZXJoZWFkIGNhbGN1bGF0aW9ucywgbW9kaWZ5aW5nIE1UVSBhZGp1c3RtZW50IGFuZCBTS0IgaGVhZHJvb20gY2hlY2tzIGluIEwyVFAgY29yZSBhbmQgTDJUUCBFdGhlcm5ldCBwc2V1ZG93aXJlIGNvZGUuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBuZXR3b3JrIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMzozNzowOS44OTc5Nzc3MDRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTEyNjUyNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0Y2UwYzYzNzNiM2JhYjQ4MTZmOGNhMDQ5Y2VmZTQzNDZjOTcwMmZhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDggMjM6Mzc6MDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2wydHAvbDJ0cF9jb3JlLmMgYi9uZXQvbDJ0cC9sMnRwX2NvcmUuY1xcbmluZGV4IDQ3MTJjYzQxODgxYTMuLmY1MmJmM2I1MzI5MDcgMTAwNjQ0XFxuLS0tIGEvbmV0L2wydHAvbDJ0cF9jb3JlLmNcXG4rKysgYi9uZXQvbDJ0cC9sMnRwX2NvcmUuY1xcbkBAIC0xMjI3LDE4ICsxMjI3LDE2IEBAIHN0YXRpYyBpbnQgbDJ0cF94bWl0X2NvcmUoc3RydWN0IGwydHBfc2Vzc2lvbiAqc2Vzc2lvbiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zXFxuIFxcdHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsID0gc2Vzc2lvbi1cXHUwMDNldHVubmVsO1xcbiBcXHR1bnNpZ25lZCBpbnQgZGF0YV9sZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4gXFx0c3RydWN0IHNvY2sgKnNrID0gdHVubmVsLVxcdTAwM2Vzb2NrO1xcbi1cXHRpbnQgaGVhZHJvb20sIHVobGVuLCB1ZHBfbGVuO1xcbiBcXHRpbnQgcmV0ID0gTkVUX1hNSVRfU1VDQ0VTUztcXG4gXFx0c3RydWN0IGluZXRfc29jayAqaW5ldDtcXG4gXFx0c3RydWN0IHVkcGhkciAqdWg7XFxuK1xcdGludCB1ZHBfbGVuO1xcbiBcXG4gXFx0LyogQ2hlY2sgdGhhdCB0aGVyZSdzIGVub3VnaCBoZWFkcm9vbSBpbiB0aGUgc2tiIHRvIGluc2VydCBJUCxcXG4gXFx0ICogVURQIGFuZCBMMlRQIGhlYWRlcnMuIElmIG5vdCBlbm91Z2gsIGV4cGFuZCBpdCB0b1xcbiBcXHQgKiBtYWtlIHJvb20uIEFkanVzdCB0cnVlc2l6ZS5cXG4gXFx0ICovXFxuLVxcdHVobGVuID0gKHR1bm5lbC1cXHUwMDNlZW5jYXAgPT0gTDJUUF9FTkNBUFRZUEVfVURQKSA/IHNpemVvZigqdWgpIDogMDtcXG4tXFx0aGVhZHJvb20gPSBORVRfU0tCX1BBRCArIHNpemVvZihzdHJ1Y3QgaXBoZHIpICsgdWhsZW4gKyBzZXNzaW9uLVxcdTAwM2VoZHJfbGVuO1xcbi1cXHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgaGVhZHJvb20pKSB7XFxuK1xcdGlmIChza2JfY293X2hlYWQoc2tiLCBsMnRwX3Nlc3Npb25fc2tiX2hlYWRyb29tKHNlc3Npb24sIHR1bm5lbCkpKSB7XFxuIFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiBcXHRcXHRyZXR1cm4gTkVUX1hNSVRfRFJPUDtcXG4gXFx0fVxcbkBAIC0xMjkwLDcgKzEyODgsOSBAQCBzdGF0aWMgaW50IGwydHBfeG1pdF9jb3JlKHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb24sIHN0cnVjdCBza19idWZmICpza2IsIHVuc1xcbiBcXHRcXHR1aCA9IHVkcF9oZHIoc2tiKTtcXG4gXFx0XFx0dWgtXFx1MDAzZXNvdXJjZSA9IGluZXQtXFx1MDAzZWluZXRfc3BvcnQ7XFxuIFxcdFxcdHVoLVxcdTAwM2VkZXN0ID0gaW5ldC1cXHUwMDNlaW5ldF9kcG9ydDtcXG4tXFx0XFx0dWRwX2xlbiA9IHVobGVuICsgc2Vzc2lvbi1cXHUwMDNlaGRyX2xlbiArIGRhdGFfbGVuO1xcbitcXG4rXFx0XFx0dWRwX2xlbiA9IGwydHBfdHVubmVsX3VkcF9oZHJsZW4odHVubmVsKTtcXG4rXFx0XFx0dWRwX2xlbiArPSBzZXNzaW9uLVxcdTAwM2VoZHJfbGVuICsgZGF0YV9sZW47XFxuIFxcdFxcdGlmICh1ZHBfbGVuIFxcdTAwM2UgVTE2X01BWCkge1xcbiBcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0XFx0XFx0cmV0ID0gTkVUX1hNSVRfRFJPUDtcXG5AQCAtMTY4OCw2ICsxNjg4LDcgQEAgaW50IGwydHBfdHVubmVsX3JlZ2lzdGVyKHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsLCBzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdH1cXG4gXFxuIFxcdHNrLVxcdTAwM2Vza19hbGxvY2F0aW9uID0gR0ZQX0FUT01JQztcXG4rXFx0dHVubmVsLVxcdTAwM2VsM19vdmVyaGVhZCA9IGtlcm5lbF9zb2NrX2lwX292ZXJoZWFkKHNrKTtcXG4gXFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4gXFxuIFxcdHNvY2tfaG9sZChzayk7XFxuZGlmZiAtLWdpdCBhL25ldC9sMnRwL2wydHBfY29yZS5oIGIvbmV0L2wydHAvbDJ0cF9jb3JlLmhcXG5pbmRleCBmZmQ4Y2VkM2E1MWZmLi4yYzQxODc3YjZjZTU3IDEwMDY0NFxcbi0tLSBhL25ldC9sMnRwL2wydHBfY29yZS5oXFxuKysrIGIvbmV0L2wydHAvbDJ0cF9jb3JlLmhcXG5AQCAtMTY3LDYgKzE2Nyw3IEBAIHN0cnVjdCBsMnRwX3R1bm5lbCB7XFxuIFxcdHUzMlxcdFxcdFxcdHR1bm5lbF9pZDtcXG4gXFx0dTMyXFx0XFx0XFx0cGVlcl90dW5uZWxfaWQ7XFxuIFxcdGludFxcdFxcdFxcdHZlcnNpb247XFx0LyogMj1cXHUwMDNlTDJUUHYyLCAzPVxcdTAwM2VMMlRQdjMgKi9cXG4rXFx0aW50XFx0XFx0XFx0bDNfb3ZlcmhlYWQ7XFx0LyogSVAgaGVhZGVyIG92ZXJoZWFkICovXFxuIFxcbiBcXHRjaGFyXFx0XFx0XFx0bmFtZVtMMlRQX1RVTk5FTF9OQU1FX01BWF07IC8qIGZvciBsb2dnaW5nICovXFxuIFxcdGVudW0gbDJ0cF9lbmNhcF90eXBlXFx0ZW5jYXA7XFxuQEAgLTMzNCw2ICszMzUsMjUgQEAgc3RhdGljIGlubGluZSBpbnQgbDJ0cF92M19lbnN1cmVfb3B0X2luX2xpbmVhcihzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uLCBzdHJcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgaW50IGwydHBfdHVubmVsX3VkcF9oZHJsZW4oc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwpXFxuK3tcXG4rXFx0cmV0dXJuIHR1bm5lbC1cXHUwMDNlZW5jYXAgPT0gTDJUUF9FTkNBUFRZUEVfVURQID9cXG4rXFx0XFx0c2l6ZW9mKHN0cnVjdCB1ZHBoZHIpIDogMDtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnQgbDJ0cF9zZXNzaW9uX292ZXJoZWFkKHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb24sXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsKVxcbit7XFxuK1xcdHJldHVybiBsMnRwX3R1bm5lbF91ZHBfaGRybGVuKHR1bm5lbCkgKyBzZXNzaW9uLVxcdTAwM2VoZHJfbGVuICtcXG4rXFx0XFx0dHVubmVsLVxcdTAwM2VsM19vdmVyaGVhZDtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnQgbDJ0cF9zZXNzaW9uX3NrYl9oZWFkcm9vbShzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwpXFxuK3tcXG4rXFx0cmV0dXJuIE5FVF9TS0JfUEFEICsgbDJ0cF9zZXNzaW9uX292ZXJoZWFkKHNlc3Npb24sIHR1bm5lbCk7XFxuK31cXG4rXFxuICNkZWZpbmUgTU9EVUxFX0FMSUFTX0wyVFBfUFdUWVBFKHR5cGUpIFxcXFxcXG4gXFx0TU9EVUxFX0FMSUFTKFxcXCJuZXQtbDJ0cC10eXBlLVxcXCIgX19zdHJpbmdpZnkodHlwZSkpXFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbDJ0cC9sMnRwX2V0aC5jIGIvbmV0L2wydHAvbDJ0cF9ldGguY1xcbmluZGV4IGE0OTU2ZWY5NTc0Y2MuLjY4N2NlMWM2ZGI5NDYgMTAwNjQ0XFxuLS0tIGEvbmV0L2wydHAvbDJ0cF9ldGguY1xcbisrKyBiL25ldC9sMnRwL2wydHBfZXRoLmNcXG5AQCAtMTg4LDMxICsxODgsMTcgQEAgc3RhdGljIHZvaWQgbDJ0cF9ldGhfYWRqdXN0X210dShzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbCxcXG4gXFx0XFx0XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4ge1xcbiBcXHR1bnNpZ25lZCBpbnQgb3ZlcmhlYWQgPSAwO1xcbi1cXHR1MzIgbDNfb3ZlcmhlYWQgPSAwO1xcbiBcXHR1MzIgbXR1O1xcbiBcXG4tXFx0LyogaWYgdGhlIGVuY2FwIGlzIFVEUCwgYWNjb3VudCBmb3IgVURQIGhlYWRlciBzaXplICovXFxuLVxcdGlmICh0dW5uZWwtXFx1MDAzZWVuY2FwID09IEwyVFBfRU5DQVBUWVBFX1VEUCkge1xcbi1cXHRcXHRvdmVyaGVhZCArPSBzaXplb2Yoc3RydWN0IHVkcGhkcik7XFxuLVxcdFxcdGRldi1cXHUwMDNlbmVlZGVkX2hlYWRyb29tICs9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTtcXG4tXFx0fVxcbi1cXG4tXFx0bG9ja19zb2NrKHR1bm5lbC1cXHUwMDNlc29jayk7XFxuLVxcdGwzX292ZXJoZWFkID0ga2VybmVsX3NvY2tfaXBfb3ZlcmhlYWQodHVubmVsLVxcdTAwM2Vzb2NrKTtcXG4tXFx0cmVsZWFzZV9zb2NrKHR1bm5lbC1cXHUwMDNlc29jayk7XFxuLVxcbi1cXHRpZiAobDNfb3ZlcmhlYWQgPT0gMCkge1xcbitcXHRpZiAodHVubmVsLVxcdTAwM2VsM19vdmVyaGVhZCA9PSAwKSB7XFxuIFxcdFxcdC8qIEwzIE92ZXJoZWFkIGNvdWxkbid0IGJlIGlkZW50aWZpZWQsIHRoaXMgY291bGQgYmVcXG4tXFx0XFx0ICogYmVjYXVzZSB0dW5uZWwtXFx1MDAzZXNvY2sgd2FzIE5VTEwgb3IgdGhlIHNvY2tldCdzXFxuLVxcdFxcdCAqIGFkZHJlc3MgZmFtaWx5IHdhcyBub3QgSVB2NCBvciBJUHY2LFxcbi1cXHRcXHQgKiBkZXYgbXR1IHN0YXlzIGF0IDE1MDAuXFxuK1xcdFxcdCAqIGJlY2F1c2UgdGhlIHNvY2tldCdzIGFkZHJlc3MgZmFtaWx5IHdhcyBub3QgSVB2NFxcbitcXHRcXHQgKiBvciBJUHY2IC0gZGV2IG10dSBzdGF5cyBhdCAxNTAwLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuLVxcdC8qIEFkanVzdCBNVFUsIGZhY3RvciBvdmVyaGVhZCAtIHVuZGVybGF5IEwzLCBvdmVybGF5IEwyIGhkclxcbi1cXHQgKiBVRFAgb3ZlcmhlYWQsIGlmIGFueSwgd2FzIGFscmVhZHkgZmFjdG9yZWQgaW4gYWJvdmUuXFxuLVxcdCAqL1xcbi1cXHRvdmVyaGVhZCArPSBzZXNzaW9uLVxcdTAwM2VoZHJfbGVuICsgRVRIX0hMRU4gKyBsM19vdmVyaGVhZDtcXG4rXFx0LyogQ2FsY3VsYXRlIHJlcXVpcmVkIG92ZXJoZWFkICovXFxuK1xcdG92ZXJoZWFkID0gRVRIX0hMRU4gKyBsMnRwX3Nlc3Npb25fb3ZlcmhlYWQoc2Vzc2lvbiwgdHVubmVsKTtcXG4gXFxuIFxcdG10dSA9IGwydHBfdHVubmVsX2RzdF9tdHUodHVubmVsKSAtIG92ZXJoZWFkO1xcbiBcXHRpZiAobXR1IFxcdTAwM2MgZGV2LVxcdTAwM2VtaW5fbXR1IHx8IG10dSBcXHUwMDNlIGRldi1cXHUwMDNlbWF4X210dSlcXG5AQCAtMjIwLDcgKzIwNiw3IEBAIHN0YXRpYyB2b2lkIGwydHBfZXRoX2FkanVzdF9tdHUoc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwsXFxuIFxcdGVsc2VcXG4gXFx0XFx0ZGV2LVxcdTAwM2VtdHUgPSBtdHU7XFxuIFxcbi1cXHRkZXYtXFx1MDAzZW5lZWRlZF9oZWFkcm9vbSArPSBzZXNzaW9uLVxcdTAwM2VoZHJfbGVuO1xcbitcXHRkZXYtXFx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IGwydHBfc2Vzc2lvbl9za2JfaGVhZHJvb20oc2Vzc2lvbiwgdHVubmVsKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBsMnRwX2V0aF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjM6Mzc6MTEuMzkwMDI2MjY1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTUzNDE3NjU4ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTDJUUFwiLFxuICAgIFwiTDJUUF9WM1wiLFxuICAgIFwiTDJUUF9FVEhcIixcbiAgICBcIkwyVFBfSVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsMnRwX3R1bm5lbF9yZWdpc3RlclwiLFxuICAgIFwibDJ0cF9ubF9jbWRfc2Vzc2lvbl9jcmVhdGVcIixcbiAgICBcImwydHBfeG1pdF9za2JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgTDJUUCBoZWFkcm9vbSBhbmQgb3ZlcmhlYWQgY2FsY3VsYXRpb25zLCBtb2RpZnlpbmcgTVRVIGFkanVzdG1lbnQgYW5kIFNLQiBoZWFkcm9vbSBjaGVja3MgaW4gTDJUUCBjb3JlIGFuZCBMMlRQIEV0aGVybmV0IHBzZXVkb3dpcmUgY29kZS4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmsgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRjZTBjNjM3M2IzYmFiNDgxNmY4Y2EwNDljZWZlNDM0NmM5NzAyZmFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyA4IDIzOjM3OjA4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2wydHAvbDJ0cF9jb3JlLmMgYi9uZXQvbDJ0cC9sMnRwX2NvcmUuY1xuaW5kZXggNDcxMmNjNDE4ODFhMy4uZjUyYmYzYjUzMjkwNyAxMDA2NDRcbi0tLSBhL25ldC9sMnRwL2wydHBfY29yZS5jXG4rKysgYi9uZXQvbDJ0cC9sMnRwX2NvcmUuY1xuQEAgLTEyMjcsMTggKzEyMjcsMTYgQEAgc3RhdGljIGludCBsMnRwX3htaXRfY29yZShzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNcbiBcdHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsID0gc2Vzc2lvbi1cdTAwM2V0dW5uZWw7XG4gXHR1bnNpZ25lZCBpbnQgZGF0YV9sZW4gPSBza2ItXHUwMDNlbGVuO1xuIFx0c3RydWN0IHNvY2sgKnNrID0gdHVubmVsLVx1MDAzZXNvY2s7XG4tXHRpbnQgaGVhZHJvb20sIHVobGVuLCB1ZHBfbGVuO1xuIFx0aW50IHJldCA9IE5FVF9YTUlUX1NVQ0NFU1M7XG4gXHRzdHJ1Y3QgaW5ldF9zb2NrICppbmV0O1xuIFx0c3RydWN0IHVkcGhkciAqdWg7XG4rXHRpbnQgdWRwX2xlbjtcbiBcbiBcdC8qIENoZWNrIHRoYXQgdGhlcmUncyBlbm91Z2ggaGVhZHJvb20gaW4gdGhlIHNrYiB0byBpbnNlcnQgSVAsXG4gXHQgKiBVRFAgYW5kIEwyVFAgaGVhZGVycy4gSWYgbm90IGVub3VnaCwgZXhwYW5kIGl0IHRvXG4gXHQgKiBtYWtlIHJvb20uIEFkanVzdCB0cnVlc2l6ZS5cbiBcdCAqL1xuLVx0dWhsZW4gPSAodHVubmVsLVx1MDAzZWVuY2FwID09IEwyVFBfRU5DQVBUWVBFX1VEUCkgPyBzaXplb2YoKnVoKSA6IDA7XG4tXHRoZWFkcm9vbSA9IE5FVF9TS0JfUEFEICsgc2l6ZW9mKHN0cnVjdCBpcGhkcikgKyB1aGxlbiArIHNlc3Npb24tXHUwMDNlaGRyX2xlbjtcbi1cdGlmIChza2JfY293X2hlYWQoc2tiLCBoZWFkcm9vbSkpIHtcbitcdGlmIChza2JfY293X2hlYWQoc2tiLCBsMnRwX3Nlc3Npb25fc2tiX2hlYWRyb29tKHNlc3Npb24sIHR1bm5lbCkpKSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRyZXR1cm4gTkVUX1hNSVRfRFJPUDtcbiBcdH1cbkBAIC0xMjkwLDcgKzEyODgsOSBAQCBzdGF0aWMgaW50IGwydHBfeG1pdF9jb3JlKHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb24sIHN0cnVjdCBza19idWZmICpza2IsIHVuc1xuIFx0XHR1aCA9IHVkcF9oZHIoc2tiKTtcbiBcdFx0dWgtXHUwMDNlc291cmNlID0gaW5ldC1cdTAwM2VpbmV0X3Nwb3J0O1xuIFx0XHR1aC1cdTAwM2VkZXN0ID0gaW5ldC1cdTAwM2VpbmV0X2Rwb3J0O1xuLVx0XHR1ZHBfbGVuID0gdWhsZW4gKyBzZXNzaW9uLVx1MDAzZWhkcl9sZW4gKyBkYXRhX2xlbjtcbitcbitcdFx0dWRwX2xlbiA9IGwydHBfdHVubmVsX3VkcF9oZHJsZW4odHVubmVsKTtcbitcdFx0dWRwX2xlbiArPSBzZXNzaW9uLVx1MDAzZWhkcl9sZW4gKyBkYXRhX2xlbjtcbiBcdFx0aWYgKHVkcF9sZW4gXHUwMDNlIFUxNl9NQVgpIHtcbiBcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0XHRyZXQgPSBORVRfWE1JVF9EUk9QO1xuQEAgLTE2ODgsNiArMTY4OCw3IEBAIGludCBsMnRwX3R1bm5lbF9yZWdpc3RlcihzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbCwgc3RydWN0IG5ldCAqbmV0LFxuIFx0fVxuIFxuIFx0c2stXHUwMDNlc2tfYWxsb2NhdGlvbiA9IEdGUF9BVE9NSUM7XG4rXHR0dW5uZWwtXHUwMDNlbDNfb3ZlcmhlYWQgPSBrZXJuZWxfc29ja19pcF9vdmVyaGVhZChzayk7XG4gXHRyZWxlYXNlX3NvY2soc2spO1xuIFxuIFx0c29ja19ob2xkKHNrKTtcbmRpZmYgLS1naXQgYS9uZXQvbDJ0cC9sMnRwX2NvcmUuaCBiL25ldC9sMnRwL2wydHBfY29yZS5oXG5pbmRleCBmZmQ4Y2VkM2E1MWZmLi4yYzQxODc3YjZjZTU3IDEwMDY0NFxuLS0tIGEvbmV0L2wydHAvbDJ0cF9jb3JlLmhcbisrKyBiL25ldC9sMnRwL2wydHBfY29yZS5oXG5AQCAtMTY3LDYgKzE2Nyw3IEBAIHN0cnVjdCBsMnRwX3R1bm5lbCB7XG4gXHR1MzJcdFx0XHR0dW5uZWxfaWQ7XG4gXHR1MzJcdFx0XHRwZWVyX3R1bm5lbF9pZDtcbiBcdGludFx0XHRcdHZlcnNpb247XHQvKiAyPVx1MDAzZUwyVFB2MiwgMz1cdTAwM2VMMlRQdjMgKi9cbitcdGludFx0XHRcdGwzX292ZXJoZWFkO1x0LyogSVAgaGVhZGVyIG92ZXJoZWFkICovXG4gXG4gXHRjaGFyXHRcdFx0bmFtZVtMMlRQX1RVTk5FTF9OQU1FX01BWF07IC8qIGZvciBsb2dnaW5nICovXG4gXHRlbnVtIGwydHBfZW5jYXBfdHlwZVx0ZW5jYXA7XG5AQCAtMzM0LDYgKzMzNSwyNSBAQCBzdGF0aWMgaW5saW5lIGludCBsMnRwX3YzX2Vuc3VyZV9vcHRfaW5fbGluZWFyKHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb24sIHN0clxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgaW50IGwydHBfdHVubmVsX3VkcF9oZHJsZW4oc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwpXG4re1xuK1x0cmV0dXJuIHR1bm5lbC1cdTAwM2VlbmNhcCA9PSBMMlRQX0VOQ0FQVFlQRV9VRFAgP1xuK1x0XHRzaXplb2Yoc3RydWN0IHVkcGhkcikgOiAwO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludCBsMnRwX3Nlc3Npb25fb3ZlcmhlYWQoc3RydWN0IGwydHBfc2Vzc2lvbiAqc2Vzc2lvbixcbitcdFx0XHRcdFx0c3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwpXG4re1xuK1x0cmV0dXJuIGwydHBfdHVubmVsX3VkcF9oZHJsZW4odHVubmVsKSArIHNlc3Npb24tXHUwMDNlaGRyX2xlbiArXG4rXHRcdHR1bm5lbC1cdTAwM2VsM19vdmVyaGVhZDtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgbDJ0cF9zZXNzaW9uX3NrYl9oZWFkcm9vbShzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uLFxuK1x0XHRcdFx0XHQgICAgc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwpXG4re1xuK1x0cmV0dXJuIE5FVF9TS0JfUEFEICsgbDJ0cF9zZXNzaW9uX292ZXJoZWFkKHNlc3Npb24sIHR1bm5lbCk7XG4rfVxuK1xuICNkZWZpbmUgTU9EVUxFX0FMSUFTX0wyVFBfUFdUWVBFKHR5cGUpIFxcXG4gXHRNT0RVTEVfQUxJQVMoXCJuZXQtbDJ0cC10eXBlLVwiIF9fc3RyaW5naWZ5KHR5cGUpKVxuIFxuZGlmZiAtLWdpdCBhL25ldC9sMnRwL2wydHBfZXRoLmMgYi9uZXQvbDJ0cC9sMnRwX2V0aC5jXG5pbmRleCBhNDk1NmVmOTU3NGNjLi42ODdjZTFjNmRiOTQ2IDEwMDY0NFxuLS0tIGEvbmV0L2wydHAvbDJ0cF9ldGguY1xuKysrIGIvbmV0L2wydHAvbDJ0cF9ldGguY1xuQEAgLTE4OCwzMSArMTg4LDE3IEBAIHN0YXRpYyB2b2lkIGwydHBfZXRoX2FkanVzdF9tdHUoc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwsXG4gXHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHVuc2lnbmVkIGludCBvdmVyaGVhZCA9IDA7XG4tXHR1MzIgbDNfb3ZlcmhlYWQgPSAwO1xuIFx0dTMyIG10dTtcbiBcbi1cdC8qIGlmIHRoZSBlbmNhcCBpcyBVRFAsIGFjY291bnQgZm9yIFVEUCBoZWFkZXIgc2l6ZSAqL1xuLVx0aWYgKHR1bm5lbC1cdTAwM2VlbmNhcCA9PSBMMlRQX0VOQ0FQVFlQRV9VRFApIHtcbi1cdFx0b3ZlcmhlYWQgKz0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpO1xuLVx0XHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tICs9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTtcbi1cdH1cbi1cbi1cdGxvY2tfc29jayh0dW5uZWwtXHUwMDNlc29jayk7XG4tXHRsM19vdmVyaGVhZCA9IGtlcm5lbF9zb2NrX2lwX292ZXJoZWFkKHR1bm5lbC1cdTAwM2Vzb2NrKTtcbi1cdHJlbGVhc2Vfc29jayh0dW5uZWwtXHUwMDNlc29jayk7XG4tXG4tXHRpZiAobDNfb3ZlcmhlYWQgPT0gMCkge1xuK1x0aWYgKHR1bm5lbC1cdTAwM2VsM19vdmVyaGVhZCA9PSAwKSB7XG4gXHRcdC8qIEwzIE92ZXJoZWFkIGNvdWxkbid0IGJlIGlkZW50aWZpZWQsIHRoaXMgY291bGQgYmVcbi1cdFx0ICogYmVjYXVzZSB0dW5uZWwtXHUwMDNlc29jayB3YXMgTlVMTCBvciB0aGUgc29ja2V0J3Ncbi1cdFx0ICogYWRkcmVzcyBmYW1pbHkgd2FzIG5vdCBJUHY0IG9yIElQdjYsXG4tXHRcdCAqIGRldiBtdHUgc3RheXMgYXQgMTUwMC5cbitcdFx0ICogYmVjYXVzZSB0aGUgc29ja2V0J3MgYWRkcmVzcyBmYW1pbHkgd2FzIG5vdCBJUHY0XG4rXHRcdCAqIG9yIElQdjYgLSBkZXYgbXR1IHN0YXlzIGF0IDE1MDAuXG4gXHRcdCAqL1xuIFx0XHRyZXR1cm47XG4gXHR9XG4tXHQvKiBBZGp1c3QgTVRVLCBmYWN0b3Igb3ZlcmhlYWQgLSB1bmRlcmxheSBMMywgb3ZlcmxheSBMMiBoZHJcbi1cdCAqIFVEUCBvdmVyaGVhZCwgaWYgYW55LCB3YXMgYWxyZWFkeSBmYWN0b3JlZCBpbiBhYm92ZS5cbi1cdCAqL1xuLVx0b3ZlcmhlYWQgKz0gc2Vzc2lvbi1cdTAwM2VoZHJfbGVuICsgRVRIX0hMRU4gKyBsM19vdmVyaGVhZDtcbitcdC8qIENhbGN1bGF0ZSByZXF1aXJlZCBvdmVyaGVhZCAqL1xuK1x0b3ZlcmhlYWQgPSBFVEhfSExFTiArIGwydHBfc2Vzc2lvbl9vdmVyaGVhZChzZXNzaW9uLCB0dW5uZWwpO1xuIFxuIFx0bXR1ID0gbDJ0cF90dW5uZWxfZHN0X210dSh0dW5uZWwpIC0gb3ZlcmhlYWQ7XG4gXHRpZiAobXR1IFx1MDAzYyBkZXYtXHUwMDNlbWluX210dSB8fCBtdHUgXHUwMDNlIGRldi1cdTAwM2VtYXhfbXR1KVxuQEAgLTIyMCw3ICsyMDYsNyBAQCBzdGF0aWMgdm9pZCBsMnRwX2V0aF9hZGp1c3RfbXR1KHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsLFxuIFx0ZWxzZVxuIFx0XHRkZXYtXHUwMDNlbXR1ID0gbXR1O1xuIFxuLVx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSArPSBzZXNzaW9uLVx1MDAzZWhkcl9sZW47XG4rXHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gbDJ0cF9zZXNzaW9uX3NrYl9oZWFkcm9vbShzZXNzaW9uLCB0dW5uZWwpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGwydHBfZXRoX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjM6Mzc6MTEuMzkwMDI3NjE1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk3NzcyNjM1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEwyVFAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCdzIGEgcmVmYWN0b3JpbmcgZWZmb3J0IHdpdGhpbiB0aGUgTDJUUCBjb2RlLCBzcGVjaWZpY2FsbHkgZm9jdXNlZCBvbiBob3cgaGVhZHJvb20gYW5kIG92ZXJoZWFkIGFyZSBjYWxjdWxhdGVkLiBJdCBsb29rcyBsaWtlIGl0J3MgdG91Y2hpbmcgYG5ldC9sMnRwL2wydHBfY29yZS5jYCwgYGwydHBfY29yZS5oYCwgYW5kIGBsMnRwX2V0aC5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIHNjb3BlLiBUaGV5J3JlIGludHJvZHVjaW5nIHRoZXNlIG5ldyBoZWxwZXJzOiBgbDJ0cF9zZXNzaW9uX3NrYl9oZWFkcm9vbWAsIGBsMnRwX3Nlc3Npb25fb3ZlcmhlYWRgLCBhbmQgYGwydHBfdHVubmVsX3VkcF9oZHJsZW5gLiBUaGF0J3MgYSBzdHJvbmcgaW5kaWNhdGlvbiBvZiBhIG1vdmUgdG93YXJkcyBtb3JlIG1vZHVsYXIgYW5kIHBvdGVudGlhbGx5IG1vcmUgYWNjdXJhdGUgY2FsY3VsYXRpb25zLiBDYWNoaW5nIGBsM19vdmVyaGVhZGAgaW4gYHN0cnVjdCBsMnRwX3R1bm5lbGAgZHVyaW5nIGBsMnRwX3R1bm5lbF9yZWdpc3RlcmAgaXMgYSBzbWFydCBtb3ZlIOKAkyBwcmUtY2FsY3VsYXRpbmcgYW5kIHN0b3JpbmcgaXQgdG8gYXZvaWQgcmVkdW5kYW50IGNvbXB1dGF0aW9ucyBsYXRlciBvbiBpcyBzb21ldGhpbmcgSSB3b3VsZCBkbyB0b28uXG5cblRoZSBtb2RpZmljYXRpb25zIHRvIGBsMnRwX2V0aF9hZGp1c3RfbXR1YCBhbmQgYGwydHBfeG1pdF9jb3JlYCBhcmUgd2hlcmUgdGhlIHJ1YmJlciBoaXRzIHRoZSByb2FkLiBUaGV5IGFyZSBjbGVhcmx5IGltcGxlbWVudGluZyB0aGVzZSBuZXcgZnVuY3Rpb25zLiBUaGUgYGwydHBfeG1pdF9jb3JlYCBjaGFuZ2UsIHNwZWNpZmljYWxseSB1c2luZyBgbDJ0cF9zZXNzaW9uX3NrYl9oZWFkcm9vbWAgZm9yIGBza2JfY293X2hlYWRgLCBpcyBpbnRlcmVzdGluZy4gVGhpcyBpbmRpY2F0ZXMgYSBmb2N1cyBvbiBtaW5pbWl6aW5nIG1lbW9yeSBjb3B5aW5nLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgcGVyZm9ybWFuY2UgaW4gYW55IG5ldHdvcmtpbmcgY29udGV4dC5cblxuQWxyaWdodCwgdGhlIG5leHQgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIHRoaXMgaXMgc29tZXRoaW5nIHdvcnRoIGZ1enppbmcuIFdlbGwsIEwyVFAgaXMgZGVmaW5pdGVseSByZWFjaGFibGUsIGFuZCBpdCdzIGFic29sdXRlbHkgYSB0YXJnZXQgd29ydGggZXhwbG9yaW5nLiBMZXQncyBzZWUuLi4gdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIGFyZSBgQ09ORklHX0wyVFBgLCBgQ09ORklHX0wyVFBfVjNgLCBhbmQgYENPTkZJR19MMlRQX0VUSGAsIHdoaWNoIEkgY2FuIGNoZWNrIHdpdGggYSBxdWljayBncmVwIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBhdHRhY2sgc3VyZmFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzcyMSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIzOjM3OjE3LjM2Nzc1NjIyNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODU3OTc3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTDJUUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbDJ0cC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9sMnRwL0tjb25maWctNS1cXG5uZXQvbDJ0cC9LY29uZmlnOjY6bWVudWNvbmZpZyBMMlRQXFxubmV0L2wydHAvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJMYXllciBUd28gVHVubmVsaW5nIFByb3RvY29sIChMMlRQKVxcXCJcXG4tLVxcbm5ldC9sMnRwL0tjb25maWctMzUtXFxubmV0L2wydHAvS2NvbmZpZzozNjpjb25maWcgTDJUUF9ERUJVR0ZTXFxubmV0L2wydHAvS2NvbmZpZy0zNy1cXHR0cmlzdGF0ZSBcXFwiTDJUUCBkZWJ1Z2ZzIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbDJ0cC9LY29uZmlnLTQ4LVxcbm5ldC9sMnRwL0tjb25maWc6NDk6Y29uZmlnIEwyVFBfVjNcXG5uZXQvbDJ0cC9LY29uZmlnLTUwLVxcdGJvb2wgXFxcIkwyVFB2MyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2wydHAvS2NvbmZpZy02OS1cXG5uZXQvbDJ0cC9LY29uZmlnOjcwOmNvbmZpZyBMMlRQX0lQXFxubmV0L2wydHAvS2NvbmZpZy03MS1cXHR0cmlzdGF0ZSBcXFwiTDJUUCBJUCBlbmNhcHN1bGF0aW9uIGZvciBMMlRQdjNcXFwiXFxuLS1cXG5uZXQvbDJ0cC9LY29uZmlnLTg2LVxcbm5ldC9sMnRwL0tjb25maWc6ODc6Y29uZmlnIEwyVFBfRVRIXFxubmV0L2wydHAvS2NvbmZpZy04OC1cXHR0cmlzdGF0ZSBcXFwiTDJUUCBldGhlcm5ldCBwc2V1ZG93aXJlIHN1cHBvcnQgZm9yIEwyVFB2M1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjM6Mzc6MTcuNDE2MzQxOTgxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUyNzY4NDM3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTDJUUCBDb25maWd1cmF0aW9uIGFuZCBGdW5jdGlvbiBNb2RpZmljYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnM6IGBMMlRQYCwgYEwyVFBfVjNgLCBgTDJUUF9JUGAsIGFuZCBgTDJUUF9FVEhgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYmVlbiBjaGFuZ2VkLCB3aGF0IHRoZSBpbXBhY3QgaXMuIFRoZSBsaXN0ZWQgZnVuY3Rpb25zIGFyZSB3aGVyZSB0aGUgbW9kaWZpY2F0aW9ucyBzZWVtIHRvIHJlc2lkZS4gU3BlY2lmaWNhbGx5LCBJIHNlZTogYGwydHBfeG1pdF9jb3JlYCwgYGwydHBfdHVubmVsX3JlZ2lzdGVyYCwgYGwydHBfZXRoX2FkanVzdF9tdHVgLCBhbmQgYGwydHBfZXRoX2NyZWF0ZWAuXG5cbk5vdywgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgTDJUUCB3b3JrcywgYGwydHBfeG1pdF9jb3JlYCBpcyBsaWtlbHkgdGhlIGNvcmUgdHJhbnNtaXNzaW9uIGZ1bmN0aW9uLCBzbyB0aGF0J3MgZGVmaW5pdGVseSBhIGtleSBhcmVhIHRvIHNjcnV0aW5pemUuIEFuZCBgbDJ0cF9ldGhfY3JlYXRlYCBhbHNvIHNvdW5kcyBsaWtlIGEgY3JpdGljYWwgcG9pbnQuIFRoYXQgbWlnaHQgaGF2ZSB0byBkbyB3aXRoIGhvdyB0aGUgTDJUUCBvdmVyIEV0aGVybmV0IGludGVyZmFjZSBpcyBzZXQgdXAuIEknbSBnb2luZyB0byBzdGFydCBieSBmb2N1c2luZyBvbiB0aG9zZSB0d28uIFRoZXkgbG9vayBsaWtlIHRoZSBiZXN0IHN0YXJ0aW5nIHBvaW50cyB0byBhc3Nlc3MgdGhlIGNoYW5nZXMgYW5kIHRoZWlyIHJhbWlmaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3NzQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjM6Mzc6MjAuOTQ0MDI4MzQ5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTM4NTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImwydHBfeG1pdF9jb3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9sMnRwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbDJ0cC9sMnRwX2NvcmUuYz0xMjA5PXN0YXRpYyBpbnQgbDJ0cF94bWl0X3F1ZXVlKHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZmxvd2kgKmZsKVxcbi0tXFxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTIyNC1cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYzoxMjI1OnN0YXRpYyBpbnQgbDJ0cF94bWl0X2NvcmUoc3RydWN0IGwydHBfc2Vzc2lvbiAqc2Vzc2lvbiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50ICpsZW4pXFxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTIyNi17XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYz0xMzI4PWludCBsMnRwX3htaXRfc2tiKHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb24sIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xMzMyLVxcbm5ldC9sMnRwL2wydHBfY29yZS5jOjEzMzM6XFx0cmV0ID0gbDJ0cF94bWl0X2NvcmUoc2Vzc2lvbiwgc2tiLCBcXHUwMDI2bGVuKTtcXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xMzM0LVxcdGlmIChyZXQgPT0gTkVUX1hNSVRfU1VDQ0VTUykge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMzozNzoyMC45ODg5NjkyMDZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzUxMjgyMjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGNvZGUgc25pcHBldDpcblxuKipEaXZpbmcgaW50byB0aGUgTDJUUCBUcmFuc21pc3Npb24gUGF0aCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBMMlRQIHBhY2tldHMgYXJlIHRyYW5zbWl0dGVkLiBJJ3ZlIG5vdGVkIHRoYXQgYGwydHBfeG1pdF9jb3JlYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoYXQncyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZyDigJMgaXQgaW1wbGllcyB0aGlzIGZ1bmN0aW9uJ3Mgc2NvcGUgaXMgbGltaXRlZCB0byB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LiBJdCdzIGxpa2VseSBhbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24uIE5vdywgdGhlIGtleSBpcyB0aGF0IGBsMnRwX3htaXRfc2tiYCBjYWxscyBgbDJ0cF94bWl0X2NvcmVgLiBTbywgYGwydHBfeG1pdF9za2JgIHNlZW1zIHRvIGJlIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBzZW5kaW5nIEwyVFAgZGF0YSwgYW5kIGl0J3MgZGVsZWdhdGluZyB0aGUgYWN0dWFsIHdvcmsgdG8gdGhpcyBgbDJ0cF94bWl0X2NvcmVgIGZ1bmN0aW9uLiBNYWtlcyBzZW5zZTsgZ29vZCBzZXBhcmF0aW9uIG9mIGNvbmNlcm5zLlxuXG5OZXh0LCBJIHRoaW5rIGl0J3Mgd29ydGggdGFraW5nIGEgY2xvc2VyIGxvb2sgYXQgYGwydHBfZXRoX2FkanVzdF9tdHVgIGFuZCBgbDJ0cF9ldGhfY3JlYXRlYC4gVGhvc2Ugc2VlbSBsaWtlIHRoZXkncmUgcmVsYXRlZCB0byBFdGhlcm5ldCBzcGVjaWZpY2FsbHksIGdpdmVuIHRoZSBuYW1lLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIHRoZSB0cmFuc21pc3Npb24gcHJvY2Vzcy4gVGhpcyBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIG1hcHBpbmcgb3V0IHRoZSBjcml0aWNhbCBkYXRhIHBhdGhzIGFuZCBmdW5jdGlvbiBjYWxscyB3aXRoaW4gdGhpcyBwYXJ0aWN1bGFyIEwyVFAgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NjIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMzozNzoyNC4zNDAyNTQyNjVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3NTYxOTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibDJ0cF9ldGhfYWRqdXN0X210dVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbDJ0cC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2wydHAvbDJ0cF9ldGguYz0xNjY9c3RhdGljIHZvaWQgbDJ0cF9ldGhfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmFyZylcXG4tLVxcbm5ldC9sMnRwL2wydHBfZXRoLmMtMTg1LVxcbm5ldC9sMnRwL2wydHBfZXRoLmM6MTg2OnN0YXRpYyB2b2lkIGwydHBfZXRoX2FkanVzdF9tdHUoc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwsXFxubmV0L2wydHAvbDJ0cF9ldGguYy0xODctXFx0XFx0XFx0XFx0c3RydWN0IGwydHBfc2Vzc2lvbiAqc2Vzc2lvbixcXG4tLVxcbm5ldC9sMnRwL2wydHBfZXRoLmM9MjEyPXN0YXRpYyBpbnQgbDJ0cF9ldGhfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwsXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2V0aC5jLTI0OC1cXHRkZXYtXFx1MDAzZW1heF9tdHUgPSBFVEhfTUFYX01UVTtcXG5uZXQvbDJ0cC9sMnRwX2V0aC5jOjI0OTpcXHRsMnRwX2V0aF9hZGp1c3RfbXR1KHR1bm5lbCwgc2Vzc2lvbiwgZGV2KTtcXG5uZXQvbDJ0cC9sMnRwX2V0aC5jLTI1MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjM6Mzc6MjQuMzg4MDEyNDYyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxMTI4MTkzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6XG5cbioqQW5hbHl6aW5nIHRoZSBMMlRQL0V0aGVybmV0IE1UVSBBZGp1c3RtZW50KipcblxuT2theSwgc28gYGwydHBfZXRoX2FkanVzdF9tdHVgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IHNjb3BlIGFuZCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIHdpdGhpbiB0aGUgbW9kdWxlLiBHb29kIHRvIGtub3cuIEFuZCBgbDJ0cF9ldGhfY3JlYXRlYCAqY2FsbHMqIGl0LiBIbW0sIHRoYXQncyBpbnRlcmVzdGluZy4gVGhlIE1UVSBhZGp1c3RtZW50IGlzIGhhcHBlbmluZyBkdXJpbmcgdGhlIGNyZWF0aW9uIG9mIGFuIEwyVFAvRXRoZXJuZXQgZW50aXR5LiBUaGF0IG1ha2VzIHNlbnNlLCBidXQgSSB3YW50IHRvIHVuZGVyc3RhbmQgKndoeSogdGhlIGFkanVzdG1lbnQgaXMgbmVlZGVkLCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBMMlRQIGFyY2hpdGVjdHVyZS4gTXkgbmV4dCBzdGVwIGlzIGNsZWFyIC0gSSBuZWVkIHRvIGp1bXAgaW50byBgbDJ0cF9ldGhfY3JlYXRlYCBhbmQgc2VlIGV4YWN0bHkgd2hhdCdzIGdvaW5nIG9uIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDk5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjM6Mzc6MjcuNjk5Mjk2ODI0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzA2NDE5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsMnRwX2V0aF9jcmVhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2wydHAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9sMnRwL2wydHBfZXRoLmM9MTg2PXN0YXRpYyB2b2lkIGwydHBfZXRoX2FkanVzdF9tdHUoc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwsXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2V0aC5jLTIxMS1cXG5uZXQvbDJ0cC9sMnRwX2V0aC5jOjIxMjpzdGF0aWMgaW50IGwydHBfZXRoX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsLFxcbm5ldC9sMnRwL2wydHBfZXRoLmMtMjEzLVxcdFxcdFxcdCAgIHUzMiBzZXNzaW9uX2lkLCB1MzIgcGVlcl9zZXNzaW9uX2lkLFxcbi0tXFxubmV0L2wydHAvbDJ0cF9ldGguYz0zMDU9c3RhdGljIGNvbnN0IHN0cnVjdCBsMnRwX25sX2NtZF9vcHMgbDJ0cF9ldGhfbmxfY21kX29wcyA9IHtcXG5uZXQvbDJ0cC9sMnRwX2V0aC5jOjMwNjpcXHQuc2Vzc2lvbl9jcmVhdGVcXHQ9IGwydHBfZXRoX2NyZWF0ZSxcXG5uZXQvbDJ0cC9sMnRwX2V0aC5jLTMwNy1cXHQuc2Vzc2lvbl9kZWxldGVcXHQ9IGwydHBfc2Vzc2lvbl9kZWxldGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIzOjM3OjI3Ljc0MjM2MzY3MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTQ5NDA1MTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqRGlzc2VjdGluZyB0aGUgTDJUUCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGwydHBfZXRoX2NyZWF0ZWAgZnVuY3Rpb24uIEl0J3MgZGVjbGFyZWQgYXMgYHN0YXRpY2AsIHdoaWNoIG1lYW5zIGl0J3MgaW50ZXJuYWwgdG8gdGhpcyBwYXJ0aWN1bGFyIHNvdXJjZSBmaWxlLiBUaGF0J3MgZmluZSwgbm90aGluZyBpbmhlcmVudGx5IHdyb25nIHdpdGggdGhhdC4gQnV0IHRoZW4gSSBzZWUgaXQncyBhbHNvIGEgY2FsbGJhY2sgZm9yIHRoZSBgc2Vzc2lvbl9jcmVhdGVgIG9wZXJhdGlvbiB3aXRoaW4gYGwydHBfbmxfY21kX29wc2AuIFRoYXQncyBpbnRlcmVzdGluZywgYmVjYXVzZSBpdCBtZWFucyB0aGlzIGxvY2FsIGZ1bmN0aW9uIGlzIHRoZSBvbmUgaGFuZGxpbmcgdGhlIGNyZWF0aW9uIG9mIGEgc2Vzc2lvbiBmcm9tIGEgbmV0bGluayBjb21tYW5kLiBUaGlzIG1pZ2h0IGJlIHdoZXJlIHRoZSBhY3R1YWwgRXRoZXJuZXQgaW50ZXJmYWNlIGlzIHNldCB1cC4gT2theSwgdGhhdCBtYWtlcyBzZW5zZS5cblxuV2FpdCBhIG1pbnV0ZSwgSSBzZWUgdGhhdCBgbDJ0cF90dW5uZWxfcmVnaXN0ZXJgIGlzIGV4cG9ydGVkLiBUaGF0J3MgdGhlIHJlYWwga2V5IHRvIHRoaXMgd2hvbGUgcHV6emxlLiBXZSBjYW4gcmVnaXN0ZXIgbmV3IHR1bm5lbHMgdG8gdGhlIGludGVyZmFjZSB0aHJvdWdoIHRoaXMgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2MTMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMzozNzozMC44OTE3NzExNjVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NzY0NDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImwydHBfdHVubmVsX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9sMnRwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbDJ0cC9sMnRwX2NvcmUuYz0xNjEzPXN0YXRpYyBpbnQgbDJ0cF92YWxpZGF0ZV9zb2NrZXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xNjQyLVxcbm5ldC9sMnRwL2wydHBfY29yZS5jOjE2NDM6aW50IGwydHBfdHVubmVsX3JlZ2lzdGVyKHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsLCBzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTY0NC1cXHRcXHRcXHQgc3RydWN0IGwydHBfdHVubmVsX2NmZyAqY2ZnKVxcbi0tXFxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTcyMC19XFxubmV0L2wydHAvbDJ0cF9jb3JlLmM6MTcyMTpFWFBPUlRfU1lNQk9MX0dQTChsMnRwX3R1bm5lbF9yZWdpc3Rlcik7XFxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTcyMi1cXG4tLVxcbm5ldC9sMnRwL2wydHBfY29yZS5oPTIzNj1pbnQgbDJ0cF90dW5uZWxfY3JlYXRlKGludCBmZCwgaW50IHZlcnNpb24sIHUzMiB0dW5uZWxfaWQsXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuaC0yMzgtXFx0XFx0ICAgICAgIHN0cnVjdCBsMnRwX3R1bm5lbCAqKnR1bm5lbHApO1xcbm5ldC9sMnRwL2wydHBfY29yZS5oOjIzOTppbnQgbDJ0cF90dW5uZWxfcmVnaXN0ZXIoc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwsIHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvbDJ0cC9sMnRwX2NvcmUuaC0yNDAtXFx0XFx0XFx0IHN0cnVjdCBsMnRwX3R1bm5lbF9jZmcgKmNmZyk7XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYz0xODU9c3RhdGljIGludCBsMnRwX25sX2NtZF90dW5uZWxfY3JlYXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYy0yNDUtXFx0cmVmY291bnRfaW5jKFxcdTAwMjZ0dW5uZWwtXFx1MDAzZXJlZl9jb3VudCk7XFxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmM6MjQ2OlxcdHJldCA9IGwydHBfdHVubmVsX3JlZ2lzdGVyKHR1bm5lbCwgbmV0LCBcXHUwMDI2Y2ZnKTtcXG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYy0yNDctXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbm5ldC9sMnRwL2wydHBfcHBwLmM9NjI3PXN0YXRpYyBzdHJ1Y3QgbDJ0cF90dW5uZWwgKnBwcG9sMnRwX3R1bm5lbF9nZXQoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L2wydHAvbDJ0cF9wcHAuYy02NDctXFxubmV0L2wydHAvbDJ0cF9wcHAuYzo2NDg6XFx0XFx0XFx0LyogUHJldmVudCBsMnRwX3R1bm5lbF9yZWdpc3RlcigpIGZyb20gdHJ5aW5nIHRvIHNldCB1cFxcbm5ldC9sMnRwL2wydHBfcHBwLmMtNjQ5LVxcdFxcdFxcdCAqIGEga2VybmVsIHNvY2tldC5cXG4tLVxcbm5ldC9sMnRwL2wydHBfcHBwLmMtNjYyLVxcdFxcdFxcdHJlZmNvdW50X2luYyhcXHUwMDI2dHVubmVsLVxcdTAwM2VyZWZfY291bnQpO1xcbm5ldC9sMnRwL2wydHBfcHBwLmM6NjYzOlxcdFxcdFxcdGVycm9yID0gbDJ0cF90dW5uZWxfcmVnaXN0ZXIodHVubmVsLCBuZXQsIFxcdTAwMjZ0Y2ZnKTtcXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTY2NC1cXHRcXHRcXHRpZiAoZXJyb3IgXFx1MDAzYyAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIzOjM3OjMwLjkzNjU0MDY0MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTM3MTg4MTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24sIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipMMlRQIE1vZHVsZSBGb2N1cyBcdTAwMjYgS2V5IEV4cG9ydCoqXG5cbkFscmlnaHQsIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBpdCBzZWVtcyBsaWtlIHdlJ3ZlIHplcm9lZCBpbiBvbiB0aGUgYGwydHBfdHVubmVsX3JlZ2lzdGVyYCBmdW5jdGlvbiBhcyBhIGtleSBlbGVtZW50LiBUaGF0J3MgYSBzb2xpZCBjaG9pY2UgZm9yIGEgZm9jdXMgc3ltYm9sIOKAkyBpdCBsaWtlbHkgcmVwcmVzZW50cyB0aGUgY29yZSBtZWNoYW5pc20gZm9yIGVzdGFibGlzaGluZyBhbmQgbWFuYWdpbmcgTDJUUCB0dW5uZWwgaW5zdGFuY2VzIHdpdGhpbiB0aGUgc3lzdGVtLiBHb29kLiBXZSB1bmRlcnN0YW5kIHRoZSBzaWduaWZpY2FuY2Ugb2YgdGhpcy5cblxuQW5kLCBvZiBjb3Vyc2UsIHRoZSBgbDJ0cF94bWl0X3NrYmAgZnVuY3Rpb24gaXMgZXhwb3NlZC4gTWFrZXMgc2Vuc2UuIFRoYXQncyBhYnNvbHV0ZWx5IGNyaXRpY2FsLiBFeHBvcnRpbmcgdGhpcyBpbmRpY2F0ZXMgaXRzIGltcG9ydGFuY2UgaW4gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBhcmNoaXRlY3R1cmUuIEl0J3MgbGlrZWx5IHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgdHJhbnNtaXR0aW5nIFNvY2tldCBCdWZmZXIgKFNLQikgZGF0YSBhY3Jvc3MgdGhlIEwyVFAgdHVubmVsIGludGVyZmFjZS4gVGhpcyBsaWtlbHkgZW5hYmxlcyBlbmNhcHN1bGF0aW9uIG9yIGRlY2Fwc3VsYXRpb24uIFRoaXMgbWVhbnMgaXQncyBhIHZpdGFsIHBhcnQgb2YgdGhlIGRhdGEgZmxvdyBhbmQgd2lsbCwgdGhlcmVmb3JlLCBiZSBoaWdobHkgcmVsZXZhbnQgdG8gYW55IGFuYWx5c2lzIG9mIEwyVFAgcGVyZm9ybWFuY2UsIGRlYnVnZ2luZywgb3Igb3B0aW1pemF0aW9uIGVmZm9ydHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2NDQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMzozNzozNC44NzM3MzEwMzNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDExMDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImwydHBfeG1pdF9za2JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2wydHAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9sMnRwL2wydHBfY29yZS5jPTEyMjU9c3RhdGljIGludCBsMnRwX3htaXRfY29yZShzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgKmxlbilcXG4tLVxcbm5ldC9sMnRwL2wydHBfY29yZS5jLTEzMjctICovXFxubmV0L2wydHAvbDJ0cF9jb3JlLmM6MTMyODppbnQgbDJ0cF94bWl0X3NrYihzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9sMnRwL2wydHBfY29yZS5jLTEzMjkte1xcbi0tXFxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTM0NC19XFxubmV0L2wydHAvbDJ0cF9jb3JlLmM6MTM0NTpFWFBPUlRfU1lNQk9MX0dQTChsMnRwX3htaXRfc2tiKTtcXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xMzQ2LVxcbi0tXFxubmV0L2wydHAvbDJ0cF9jb3JlLmg9MjYxPXZvaWQgbDJ0cF9zZXNzaW9uX3NldF9oZWFkZXJfbGVuKHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb24sIGludCB2ZXJzaW9uLFxcbm5ldC9sMnRwL2wydHBfY29yZS5oLTI2Mi1cXHRcXHRcXHRcXHQgZW51bSBsMnRwX2VuY2FwX3R5cGUgZW5jYXApO1xcbm5ldC9sMnRwL2wydHBfY29yZS5oOjI2MzppbnQgbDJ0cF94bWl0X3NrYihzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5uZXQvbDJ0cC9sMnRwX2NvcmUuaC0yNjQtXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2V0aC5jPTcwPXN0YXRpYyBuZXRkZXZfdHhfdCBsMnRwX2V0aF9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2wydHAvbDJ0cF9ldGguYy03NC1cXHR1bnNpZ25lZCBpbnQgbGVuID0gc2tiLVxcdTAwM2VsZW47XFxubmV0L2wydHAvbDJ0cF9ldGguYzo3NTpcXHRpbnQgcmV0ID0gbDJ0cF94bWl0X3NrYihzZXNzaW9uLCBza2IpO1xcbm5ldC9sMnRwL2wydHBfZXRoLmMtNzYtXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jPTI1MD1zdGF0aWMgaW50IHBwcG9sMnRwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcXG4tLVxcbm5ldC9sMnRwL2wydHBfcHBwLmMtMzAyLVxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG5uZXQvbDJ0cC9sMnRwX3BwcC5jOjMwMzpcXHRsMnRwX3htaXRfc2tiKHNlc3Npb24sIHNrYik7XFxubmV0L2wydHAvbDJ0cF9wcHAuYy0zMDQtXFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jPTMzMD1zdGF0aWMgaW50IHBwcG9sMnRwX3htaXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2wydHAvbDJ0cF9wcHAuYy0zNjEtXFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbm5ldC9sMnRwL2wydHBfcHBwLmM6MzYyOlxcdGwydHBfeG1pdF9za2Ioc2Vzc2lvbiwgc2tiKTtcXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTM2My1cXHRsb2NhbF9iaF9lbmFibGUoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjM6Mzc6MzQuOTIxNzQ2MzVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAxMzU0ODA2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipUcmFjaW5nIHRoZSBOZXR3b3JrIFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgTDJUUCBwYWNrZXRzIGFyZSB0cmFuc21pdHRlZC4gSSBzZWUgYGwydHBfeG1pdF9za2JgIGlzIGFuIGV4cG9ydGVkIHN5bWJvbDsgdGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gSXQgY2FsbHMgYGwydHBfeG1pdF9jb3JlYCwgc28gdGhhdCdzIHRoZSBjb3JlIHRyYW5zbWlzc2lvbiBsb2dpYy4gTm93LCBJIHNlZSB0aGlzIGZ1bmN0aW9uIGBsMnRwX2V0aF9jcmVhdGVgLiBJdCdzIG1hcmtlZCBhcyBzdGF0aWMsIG1lYW5pbmcgaXQncyBvbmx5IHZpc2libGUgd2l0aGluIGl0cyBjb21waWxhdGlvbiB1bml0LCBidXQgd2FpdC4uLiBJIHJlY29nbml6ZSBpdDsgSXQncyBjYWxsZWQgYnkgYGwydHBfbmxfY21kX29wcy5zZXNzaW9uX2NyZWF0ZWAsIHdoaWNoIHNlZW1zIGltcG9ydGFudC4gTGV0IG1lIGNyb3NzLXJlZmVyZW5jZSwgdGhlIG5ldGxpbmsgY29tbWFuZCBhc3NvY2lhdGVkIHdpdGggc2Vzc2lvbiBjcmVhdGlvbiBpcyBgTDJUUF9DTURfU0VTU0lPTl9DUkVBVEVgLlxuXG5Pa2F5LCBJJ3ZlIGdvdCBpdC4gVGhlIGZ1bmN0aW9uIGBsMnRwX25sX2NtZF9zZXNzaW9uX2NyZWF0ZWAgaGFuZGxlcyB0aGF0IHNwZWNpZmljIE5ldGxpbmsgY29tbWFuZC4gQW5kICp0aGF0KiBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5LCBjYWxscyBgbDJ0cF9ldGhfY3JlYXRlYCBpZiB0aGUgdHVubmVsIHR5cGUgaXMgYEwyVFBfUFdUWVBFX0VUSGAuIE9rYXksIHNvIGBsMnRwX2V0aF9jcmVhdGVgIGhhcyBhIHNwZWNpZmljIGpvYiBpbiBldGhlcm5ldCB0dW5uZWwgc2V0dXAuIEFoLCBhbmQganVzdCB0byBjb25maXJtLCBgbDJ0cF9ldGhfY3JlYXRlYCBpcyBhY3R1YWxseSBkZWZpbmVkIGluIGBsMnRwX2V0aC5jYC5cblxuUmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgc2Vzc2lvbiBjcmVhdGlvbiBwcm9jZXNzIGluIG1vcmUgZGV0YWlsLiBMZXQncyBkaWcgaW50byBgbDJ0cF9ubF9jbWRfc2Vzc2lvbl9jcmVhdGVgIHRvIHNlZSB3aGF0J3MgcmVhbGx5IGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODcxMiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMzozNzo0MC45MzUyOTc2ODNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NTYxNTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImwydHBfbmxfY21kX3Nlc3Npb25fY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9sMnRwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbDJ0cC9sMnRwX25ldGxpbmsuYz00OTk9c3RhdGljIGludCBsMnRwX25sX2NtZF90dW5uZWxfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYy01MjctXFxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmM6NTI4OnN0YXRpYyBpbnQgbDJ0cF9ubF9jbWRfc2Vzc2lvbl9jcmVhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYy01Mjkte1xcbi0tXFxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmM9OTM1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbDJ0cF9ubF9vcHNbXSA9IHtcXG4tLVxcbm5ldC9sMnRwL2wydHBfbmV0bGluay5jLTk2OS1cXHRcXHQudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsXFxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmM6OTcwOlxcdFxcdC5kb2l0ID0gbDJ0cF9ubF9jbWRfc2Vzc2lvbl9jcmVhdGUsXFxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmMtOTcxLVxcdFxcdC5mbGFncyA9IEdFTkxfVU5TX0FETUlOX1BFUk0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIzOjM3OjQwLjk4Mzg2MzQ1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4ODA3MTYwNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCBoZXJlLlxuXG4qKkFuYWx5emluZyBMMlRQIE1vZHVsZSBGb2N1cyBQb2ludHMqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBMMlRQIGNvZGUsIGFuZCBpbW1lZGlhdGVseSB0d28gZnVuY3Rpb24gbmFtZXMganVtcCBvdXQgYXMgZ29vZCBmb2N1cyBwb2ludHMgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gU3BlY2lmaWNhbGx5LCBgbDJ0cF9ubF9jbWRfc2Vzc2lvbl9jcmVhdGVgIGFuZCBgbDJ0cF90dW5uZWxfcmVnaXN0ZXJgLiBUaG9zZSBzZWVtIGxpa2Uga2V5IGZ1bmN0aW9ucyBpbiB0aGUgc2V0dXAgYW5kIG1hbmFnZW1lbnQgb2YgdGhlc2UgdHVubmVscy5cblxuTm93LCBnbGFuY2luZyBhdCB0aGUgY29uZmlndXJhdGlvbnMsIGBMMlRQYCwgYEwyVFBfVjNgLCBhbmQgYEwyVFBfRVRIYCBhcmUgdGhlIG9uZXMgdGhhdCBzdGFuZCBvdXQgYXMgaW1wb3J0YW50IGNvbnRleHQsIGFzIEkgd291bGQgZXhwZWN0LlxuXG5MZXQgbWUgemVybyBpbiBvbiBgbDJ0cF9ldGhfYWRqdXN0X210dWAgdG8gc2VlIHdoZXJlIGl0IGdldHMgaW52b2tlZC4gQWgsIGl0IGlzIGNhbGxlZCB3aXRoaW4gYGwydHBfZXRoX2NyZWF0ZWAsIHdoaWNoIHNlZW1zIGxvZ2ljYWwgZ2l2ZW4gaXRzIG5hbWUuIEknbGwgbmVlZCB0byBjaGVjayBpZiBpdCdzIGNhbGxlZCBhbnl3aGVyZSBlbHNlLiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyBpZiBzb21ldGhpbmcgdGhhdCBzZWVtcyBzcGVjaWZpYywgaXMgbW9yZSBnZW5lcmFsLCBhcyB0aGF0IHdpbGwgZ2l2ZSBtZSBjbHVlcyBhYm91dCB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBtb2R1bGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1MzksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjM6Mzc6NDQuODY0NTgyMTY0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTIyMDk0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsMnRwX2V0aF9hZGp1c3RfbXR1XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9sMnRwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbDJ0cC9sMnRwX2V0aC5jPTE2Nj1zdGF0aWMgdm9pZCBsMnRwX2V0aF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqYXJnKVxcbi0tXFxubmV0L2wydHAvbDJ0cF9ldGguYy0xODUtXFxubmV0L2wydHAvbDJ0cF9ldGguYzoxODY6c3RhdGljIHZvaWQgbDJ0cF9ldGhfYWRqdXN0X210dShzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbCxcXG5uZXQvbDJ0cC9sMnRwX2V0aC5jLTE4Ny1cXHRcXHRcXHRcXHRzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uLFxcbi0tXFxubmV0L2wydHAvbDJ0cF9ldGguYz0yMTI9c3RhdGljIGludCBsMnRwX2V0aF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbCxcXG4tLVxcbm5ldC9sMnRwL2wydHBfZXRoLmMtMjQ4LVxcdGRldi1cXHUwMDNlbWF4X210dSA9IEVUSF9NQVhfTVRVO1xcbm5ldC9sMnRwL2wydHBfZXRoLmM6MjQ5OlxcdGwydHBfZXRoX2FkanVzdF9tdHUodHVubmVsLCBzZXNzaW9uLCBkZXYpO1xcbm5ldC9sMnRwL2wydHBfZXRoLmMtMjUwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMzozNzo0NC45MTM4MDg4MzFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU4MzU3MDU5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEwyVFAgRXRoZXJuZXQgQ3JlYXRpb24gUGF0aCoqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRoZSBFdGhlcm5ldCBMMlRQIGNyZWF0aW9uIHByb2Nlc3MuIEl0IGxvb2tzIGxpa2UgYGwydHBfZXRoX2NyZWF0ZWAgaXMgdGhlIG9ubHkgZnVuY3Rpb24gdGhhdCBjYWxscyB0aGUgcmVsZXZhbnQgY29kZS4gQW5kIHRoYXQgZnVuY3Rpb24sIGluIHR1cm4sIGlzIGludm9rZWQgYnkgYGwydHBfbmxfY21kX3Nlc3Npb25fY3JlYXRlYC4gVGhlcmVmb3JlLCBgbDJ0cF9ubF9jbWRfc2Vzc2lvbl9jcmVhdGVgIHNlZW1zIGxpa2UgdGhlIGtleSBwb2ludCB0byBzdGFydCBpbnZlc3RpZ2F0aW5nLiBJdCdzIHRoZSBjZW50cmFsIGNvbW1hbmQgZm9yIEV0aGVybmV0IEwyVFAgc2Vzc2lvbiBzZXR1cC5cblxuTm93LCBhcyBmb3IgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLCBJJ20gdGhpbmtpbmcgYWJvdXQ6IGBMMlRQYCwgYEwyVFBfVjNgLCBgTDJUUF9FVEhgLCBhbmQgcG9zc2libHkgYEwyVFBfSVBgLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGBuZXQvbDJ0cC9LY29uZmlnYCBmaWxlLCBwYXJ0aWN1bGFybHkgZm9jdXNpbmcgb24gYEwyVFBfRVRIYCwgdG8gc2VlIGlmIGl0cyBhY3RpdmF0aW9uIGhpbmdlcyBvbiBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIG9yIGNvbmZpZ3VyYXRpb25zLiBUaGlzIHdpbGwgcHJvdmlkZSBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgcHJlLXJlcXVpc2l0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTg3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIzOjM3OjQ5LjQ5NzM4MTMwOVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA5MzIzOTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEwyVFBfRVRIXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9sMnRwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2wydHAvS2NvbmZpZz03MD1jb25maWcgTDJUUF9JUFxcbi0tXFxubmV0L2wydHAvS2NvbmZpZy04Ni1cXG5uZXQvbDJ0cC9LY29uZmlnOjg3OmNvbmZpZyBMMlRQX0VUSFxcbm5ldC9sMnRwL0tjb25maWctODgtXFx0dHJpc3RhdGUgXFxcIkwyVFAgZXRoZXJuZXQgcHNldWRvd2lyZSBzdXBwb3J0IGZvciBMMlRQdjNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIzOjM3OjQ5LjU0ODMzNDk4NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDA4NDg3OTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgYG5ldC9sMnRwL0tjb25maWdgIGZpbGUgYW5kIHRoZSBgTDJUUF9FVEhgIGNvbmZpZ3VyYXRpb24gb3B0aW9uOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBMMlRQIEtjb25maWcqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIGBuZXQvbDJ0cC9LY29uZmlnYCBmaWxlLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRoZSBgTDJUUF9FVEhgIG9wdGlvbi4gSSBrbm93IHRoaXMgZmlsZSBpcyBjcnVjaWFsIGZvciBjb25maWd1cmluZyB0aGUgTDJUUCBrZXJuZWwgbW9kdWxlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBFdGhlcm5ldC1zcGVjaWZpYyBMMlRQIGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgYXJlIGF0IHBsYXkuIEknbSBnb2luZyB0byBsb29rIGZvciB0aGUgZGVwZW5kZW5jaWVzLCB3aGljaCBvdGhlciBmZWF0dXJlcyBvciBtb2R1bGVzIHRoaXMgc2V0dGluZyByZWxpZXMgb24gb3Igd2hpY2ggb25lcyByZWx5IG9uIGl0LiBJIGFsc28gbmVlZCB0byB1bmRlcnN0YW5kIGFueSBkZWZhdWx0IHNldHRpbmdzIG9yIGRlc2NyaXB0aW9ucyBwcm92aWRlZCBpbiB0aGUgY29uZmlndXJhdGlvbi4gSXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZSBMMlRQIGltcGxlbWVudGF0aW9uLCBpdHMgY29ubmVjdGlvbiB0byB0aGUgb3ZlcmFsbCBuZXR3b3JrIHN0YWNrLCBhbmQgaG93IGBMMlRQX0VUSGAgZml0cyBpbnRvIHRoYXQgYXJjaGl0ZWN0dXJlLiBBcmUgdGhlcmUgYW55IHNwZWNpZmljIGRyaXZlcnMgb3IgaGFyZHdhcmUgcGxhdGZvcm1zIG1lbnRpb25lZCBpbiByZWxhdGlvbiB0byBFdGhlcm5ldCBzdXBwb3J0PyBUaGlzIGlzIG9mdGVuIHdoZXJlIHlvdSBmaW5kIGNsdWVzIGFib3V0IHRoZSBpbnRlbmRlZCB1c2UgY2FzZXMgYW5kIHBvdGVudGlhbCBsaW1pdGF0aW9ucy4gSSdtIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcywgdG9vLiBBcmUgdGhlcmUgYW55IHdhcm5pbmdzLCBzdWdnZXN0aW9ucywgb3IgY29tbWVudHMgYWJvdXQgc3BlY2lmaWMgaGFyZHdhcmUgY29uZmlndXJhdGlvbnM/IFRoaXMgYW5hbHlzaXMgaXMgaW1wb3J0YW50IGZvciBhIGNvbXBsZXRlIHBpY3R1cmUsIGFzIEkgbmVlZCB0byB1bmRlcnN0YW5kIGFsbCB0aGUgZmFjdG9ycyBpbnZvbHZlZCBpbiBlZmZlY3RpdmVseSBjb25maWd1cmluZyBhbmQgZGVwbG95aW5nIEwyVFAgb3ZlciBFdGhlcm5ldC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2NTYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMzozNzo1Mi45NTY4Mzk4OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbDJ0cC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDgwOlxcdFxcdCAgd2hlbiBVRFAgZW5jYXBzdWxhdGlvbiBpcyBub3QgcmVxdWlyZWQuIFdoZW4gTDJUUCBpcyBjYXJyaWVkXFxuICA4MTpcXHRcXHQgIGluIElQIHBhY2tldHMsIGl0IHVzZWQgSVAgcHJvdG9jb2wgbnVtYmVyIDExNSwgc28gdGhpcyBwb3J0XFxuICA4MjpcXHRcXHQgIG11c3QgYmUgZW5hYmxlZCBpbiBmaXJld2FsbHMuXFxuICA4MzpcXHRcXG4gIDg0OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxcbiAgODU6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBsMnRwX2lwLlxcbiAgODY6XFx0XFxuICA4NzpcXHRjb25maWcgTDJUUF9FVEhcXG4gIDg4OlxcdFxcdHRyaXN0YXRlIFxcXCJMMlRQIGV0aGVybmV0IHBzZXVkb3dpcmUgc3VwcG9ydCBmb3IgTDJUUHYzXFxcIlxcbiAgODk6XFx0XFx0ZGVwZW5kcyBvbiBMMlRQX1YzXFxuICA5MDpcXHRcXHRoZWxwXFxuICA5MTpcXHRcXHQgIFN1cHBvcnQgZm9yIGNhcnJ5aW5nIHJhdyBldGhlcm5ldCBmcmFtZXMgb3ZlciBMMlRQdjMuXFxuICA5MjpcXHRcXG4gIDkzOlxcdFxcdCAgRnJvbSBSRkMgNDcxOSBcXHUwMDNjaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjNDcxOS50eHRcXHUwMDNlLlxcbiAgOTQ6XFx0XFxuICA5NTpcXHRcXHQgIFRoZSBMYXllciAyIFR1bm5lbGluZyBQcm90b2NvbCwgVmVyc2lvbiAzIChMMlRQdjMpIGNhbiBiZVxcbiAgOTY6XFx0XFx0ICB1c2VkIGFzIGEgY29udHJvbCBwcm90b2NvbCBhbmQgZm9yIGRhdGEgZW5jYXBzdWxhdGlvbiB0byBzZXRcXG4gIDk3OlxcdFxcdCAgdXAgUHNldWRvd2lyZXMgZm9yIHRyYW5zcG9ydGluZyBsYXllciAyIFBhY2tldCBEYXRhIFVuaXRzXFxuICA5ODpcXHRcXHQgIGFjcm9zcyBhbiBJUCBuZXR3b3JrIFtSRkMzOTMxXS5cXG4gIDk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMzozNzo1Mi45NTY4OTk3N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTM5NDk4NjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkwyVFB2MyBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIHNvIHRoZSBjb3JlIGlzc3VlIGhpbmdlcyBvbiBgTDJUUF9WM2AuIFRoYXQncyB3aGVyZSB0aGUgY3JpdGljYWwgYXJjaGl0ZWN0dXJhbCBkZWNpc2lvbnMgYXJlIGdvaW5nIHRvIGJlIG1hZGUuIEJ1dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgc3BlY2lmaWNhbGx5ICp3aHkqIGBMMlRQX1YzYCBpcyBiZWluZyBicm91Z2h0IHVwLiBJIG5lZWQgdG8gZGVsdmUgaW50byB0aGUgZGV0YWlscyBoZXJlLiBXaGF0IGlzIGl0IGFib3V0IHRoaXMgcGFydGljdWxhciBwcm90b2NvbCB0aGF0IHJlcXVpcmVzIGZ1cnRoZXIgZXZhbHVhdGlvbiBvciBpbnRlZ3JhdGlvbj8gQXJlIHdlIGxvb2tpbmcgYXQgdHJhbnNwb3J0LCBjb250cm9sIHBsYW5lLCBkYXRhIHBsYW5lLCBvciBhIGNvbWJpbmF0aW9uPyBUaGlzIGlzIHRoZSBjZW50cmFsIHBvaW50IHRvIGNvbnNpZGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTMyNiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjM6Mzc6NTUuODk2NDAxMjA3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9sMnRwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDA6XFx0XFx0ICBTdXBwb3J0IGZvciBsMnRwIGRpcmVjdG9yeSBpbiBkZWJ1Z2ZzIGZpbGVzeXN0ZW0uIFRoaXMgbWF5IGJlXFxuICA0MTpcXHRcXHQgIHVzZWQgdG8gZHVtcCBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgbDJ0cCBkcml2ZXJzIGZvciBwcm9ibGVtXFxuICA0MjpcXHRcXHQgIGFuYWx5c2lzLlxcbiAgNDM6XFx0XFxuICA0NDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5ICdZJy5cXG4gIDQ1OlxcdFxcbiAgNDY6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlXFxuICA0NzpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIGwydHBfZGVidWdmcy5cXG4gIDQ4OlxcdFxcbiAgNDk6XFx0Y29uZmlnIEwyVFBfVjNcXG4gIDUwOlxcdFxcdGJvb2wgXFxcIkwyVFB2MyBzdXBwb3J0XFxcIlxcbiAgNTE6XFx0XFx0ZGVwZW5kcyBvbiBMMlRQXFxuICA1MjpcXHRcXHRoZWxwXFxuICA1MzpcXHRcXHQgIExheWVyIFR3byBUdW5uZWxpbmcgUHJvdG9jb2wgVmVyc2lvbiAzXFxuICA1NDpcXHRcXG4gIDU1OlxcdFxcdCAgRnJvbSBSRkMgMzkzMSBcXHUwMDNjaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMzkzMS50eHRcXHUwMDNlLlxcbiAgNTY6XFx0XFxuICA1NzpcXHRcXHQgIFRoZSBMYXllciBUd28gVHVubmVsaW5nIFByb3RvY29sIChMMlRQKSBwcm92aWRlcyBhIGR5bmFtaWNcXG4gIDU4OlxcdFxcdCAgbWVjaGFuaXNtIGZvciB0dW5uZWxpbmcgTGF5ZXIgMiAoTDIpIFxcXCJjaXJjdWl0c1xcXCIgYWNyb3NzIGFcXG4gIDU5OlxcdFxcdCAgcGFja2V0LW9yaWVudGVkIGRhdGEgbmV0d29yayAoZS5nLiwgb3ZlciBJUCkuICBMMlRQLCBhc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMzozNzo1NS44OTY0NjkxNzdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQwNTk0NzM4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd24sIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkwyVFAgSW5xdWlyeSBcdTAwMjYgRGVwZW5kZW5jeSoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZyBhYm91dCB0aGlzIHNpdHVhdGlvbiwgYW5kIGltbWVkaWF0ZWx5IG15IG1pbmQgZ29lcyB0byB0aGUgTGF5ZXIgMiBUdW5uZWxpbmcgUHJvdG9jb2wsIGBMMlRQYC4gVGhlIGNvbnRleHQgbGlrZWx5IGhpbmdlcyBvbiBpdHMgdXNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHJvbGUgYEwyVFBgIHBsYXlzIGhlcmUuIFdoYXQgaXMgdGhlIHBhcnRpY3VsYXIgYXNwZWN0IG9mIGBMMlRQYCB0aGF0J3MgcmVsZXZhbnQ/IElzIGl0IGl0cyBzZWN1cml0eSwgaXRzIHRyYW5zcG9ydCBtZWNoYW5pc20sIGl0cyBpbXBsZW1lbnRhdGlvbiBxdWlya3M/IEkgbmVlZCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGhvdyBgTDJUUGAgY29tZXMgaW50byBwbGF5IHRvIGdpdmUgYSBtb3JlIGNvbmNpc2Ugc3VtbWFyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4MjIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDIzOjM3OjU5LjMwMjQxODkxMVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjU2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbDJ0cC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIExheWVyIFR3byBUdW5uZWxpbmcgUHJvdG9jb2wgKEwyVFApXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgTDJUUFxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIkxheWVyIFR3byBUdW5uZWxpbmcgUHJvdG9jb2wgKEwyVFApXFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgOTpcXHRcXHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgTGF5ZXIgVHdvIFR1bm5lbGluZyBQcm90b2NvbFxcbiAgMTI6XFx0XFxuICAxMzpcXHRcXHQgIEZyb20gUkZDIDI2NjEgXFx1MDAzY2h0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzI2NjEudHh0XFx1MDAzZS5cXG4gIDE0OlxcdFxcbiAgMTU6XFx0XFx0ICBMMlRQIGZhY2lsaXRhdGVzIHRoZSB0dW5uZWxpbmcgb2YgcGFja2V0cyBhY3Jvc3MgYW5cXG4gIDE2OlxcdFxcdCAgaW50ZXJ2ZW5pbmcgbmV0d29yayBpbiBhIHdheSB0aGF0IGlzIGFzIHRyYW5zcGFyZW50IGFzXFxuICAxNzpcXHRcXHQgIHBvc3NpYmxlIHRvIGJvdGggZW5kLXVzZXJzIGFuZCBhcHBsaWNhdGlvbnMuXFxuICAxODpcXHRcXG4gIDE5OlxcdFxcdCAgTDJUUCBpcyBvZnRlbiB1c2VkIHRvIHR1bm5lbCBQUFAgdHJhZmZpYyBvdmVyIElQXFxuICAyMDpcXHRcXHQgIHR1bm5lbHMuIE9uZSBJUCB0dW5uZWwgbWF5IGNhcnJ5IHRob3VzYW5kcyBvZiBpbmRpdmlkdWFsIFBQUFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMzozNzo1OS4zMDI0ODY4MTFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM0ODMzNjcxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBMMlRQIEZ1enppbmcgVGFyZ2V0KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaGluZ2VzIG9uIHRoZSBwcmVzZW5jZSBvZiBgSU5FVGAsIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgc3RhY2suIEdpdmVuIHRoYXQsIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBzZWVtIHRvIGJlIGBMMlRQYCwgYEwyVFBfVjNgLCBhbmQgYEwyVFBfRVRIYC4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGtleSBzeW1ib2xzLCBhbmQgdGhlIGluaXRpYWwgc3VzcGVjdHMgbG9vayBsaWtlIGBsMnRwX3R1bm5lbF9yZWdpc3RlcmAsIGBsMnRwX25sX2NtZF9zZXNzaW9uX2NyZWF0ZWAsIGFuZCwgY3J1Y2lhbGx5LCBgbDJ0cF94bWl0X3NrYmAuXG5cbk5vdywgaXMgYGwydHBfeG1pdF9za2JgIHJlYWxseSB0aGUgYmVzdCBmdW5jdGlvbiB0byBmb2N1cyBvbj8gQSBxdWljayBjaGVjayBzaG93cyB0aGF0IGl0ICppcyogZXhwb3J0ZWQgYW5kIGNhbGxlZCBieSBzZXZlcmFsIGltcG9ydGFudCBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBgbDJ0cF9ldGhfZGV2X3htaXRgLCBgcHBwb2wydHBfc2VuZG1zZ2AsIGFuZCBgcHBwb2wydHBfeG1pdGAuIEFoYSEgYGwydHBfZXRoX2Rldl94bWl0YCBpcyB0aGUgYG5kb19zdGFydF94bWl0YCBmb3IgTDJUUCBldGhlcm5ldCBkZXZpY2VzLiBUaGF0J3MgYSBzdHJvbmcgaW5kaWNhdG9yIHRoYXQgZnV6emluZyBgbDJ0cF94bWl0X3NrYmAgaXMgYSB2YWxpZCBhbmQgcG90ZW50aWFsbHkgZnJ1aXRmdWwgYXBwcm9hY2guXG5cbkkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFllcywgdGhlIGBMMlRQX0lQYCBjb25maWcgaXMgYWxzbyBjbGVhcmx5IHJlbGV2YW50IGhlcmUsIHNpbmNlIHdlJ3JlIGRlYWxpbmcgd2l0aCBMMlRQIG92ZXIgSVAuIExldCdzIGluY2x1ZGUgdGhhdCBpbiB0aGUgbGlzdC5cblxuT2theSwgbGV0IG1lIHN1bW1hcml6ZSBteSBmaW5kaW5ncyBmb3IgY2xhcml0eS5cblxuKiAgIGBXb3J0aEZ1enppbmdgOiBUcnVlLlxuKiAgIGBSZWFzb25pbmdgOiBUaGlzIHBhdGNoIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQgcmVmYWN0b3JzIEwyVFAgaGVhZHJvb20gYW5kIG92ZXJoZWFkIGNhbGN1bGF0aW9ucy4gVGhpcyBpbnZvbHZlcyBjaGFuZ2VzIHRvIE1UVSBhZGp1c3RtZW50IGFuZCBTS0IgaGVhZHJvb20gY2hlY2tzIHdpdGhpbiB0aGUgTDJUUCBjb3JlIGFuZCB0aGUgTDJUUCBFdGhlcm5ldCBwc2V1ZG93aXJlIGNvZGUuIFRoZSBjaGFuZ2VzIHRvdWNoIGNvcmUgbmV0d29yayBwYXRocywgd2hpY2ggaXMgYWx3YXlzIHdvcnRoIGEgY2xvc2VyIGxvb2suXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBsMnRwX3R1bm5lbF9yZWdpc3RlcmAsIGBsMnRwX25sX2NtZF9zZXNzaW9uX2NyZWF0ZWAsIGBsMnRwX3htaXRfc2tiYC5cbiogICBgRW5hYmxlQ29uZmlnc2A6IGBMMlRQYCwgYEwyVFBfVjNgLCBgTDJUUF9FVEhgLCBhbmQgYEwyVFBfSVBgLlxuXG5UaGlzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyOTAsIk91dHB1dFRva2VucyI6MTM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjM6Mzg6MDYuNjUwODQ2MTM3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA5NDI5ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkwyVFBcIixcbiAgICBcIkwyVFBfVjNcIixcbiAgICBcIkwyVFBfRVRIXCIsXG4gICAgXCJMMlRQX0lQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibDJ0cF90dW5uZWxfcmVnaXN0ZXJcIixcbiAgICBcImwydHBfbmxfY21kX3Nlc3Npb25fY3JlYXRlXCIsXG4gICAgXCJsMnRwX3htaXRfc2tiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIEwyVFAgaGVhZHJvb20gYW5kIG92ZXJoZWFkIGNhbGN1bGF0aW9ucywgbW9kaWZ5aW5nIE1UVSBhZGp1c3RtZW50IGFuZCBTS0IgaGVhZHJvb20gY2hlY2tzIGluIEwyVFAgY29yZSBhbmQgTDJUUCBFdGhlcm5ldCBwc2V1ZG93aXJlIGNvZGUuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBuZXR3b3JrIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkwyVFBcIixcbiAgICBcIkwyVFBfVjNcIixcbiAgICBcIkwyVFBfRVRIXCIsXG4gICAgXCJMMlRQX0lQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibDJ0cF90dW5uZWxfcmVnaXN0ZXJcIixcbiAgICBcImwydHBfbmxfY21kX3Nlc3Npb25fY3JlYXRlXCIsXG4gICAgXCJsMnRwX3htaXRfc2tiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIEwyVFAgaGVhZHJvb20gYW5kIG92ZXJoZWFkIGNhbGN1bGF0aW9ucywgbW9kaWZ5aW5nIE1UVSBhZGp1c3RtZW50IGFuZCBTS0IgaGVhZHJvb20gY2hlY2tzIGluIEwyVFAgY29yZSBhbmQgTDJUUCBFdGhlcm5ldCBwc2V1ZG93aXJlIGNvZGUuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBuZXR3b3JrIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMzozODowNi43MzE3OTU5OTFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzU0OTI1NjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjM6Mzg6MDYuNzMyMzA2NjYxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE0NzU0NDEwNDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGNhbGN1bGF0aW9uIG9mIEwyVFAgcGFja2V0IG92ZXJoZWFkIGFuZCBoZWFkcm9vbSwgY2FjaGluZyB0aGUgTDMgb3ZlcmhlYWQgaW4gdGhlIGBsMnRwX3R1bm5lbGAgc3RydWN0dXJlIGFuZCB1c2luZyBpdCB0byBhY2N1cmF0ZWx5IHJlcXVlc3QgaGVhZHJvb20gdmlhIGBza2JfY293X2hlYWRgIGFuZCBzZXQgTVRVL25lZWRlZF9oZWFkcm9vbSBmb3IgdGhlIGRldmljZS4gVGhlc2UgY2hhbmdlcyBwcmltYXJpbHkgYWZmZWN0IGJ1ZmZlciBzaXplIGNhbGN1bGF0aW9ucyBhbmQgaGVhZHJvb20gYWxsb2NhdGlvbi4gSWYgdGhlIGNhbGN1bGF0aW9ucyBhcmUgaW5jb3JyZWN0LCB0aGV5IGNvdWxkIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyB3cml0ZXMgKGlmIGhlYWRyb29tIGlzIHRvbyBzbWFsbCkgb3IgZnVuY3Rpb25hbCBpc3N1ZXMgKGluY29ycmVjdCBNVFUpLCBib3RoIG9mIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgdGVzdGluZy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLCBub3IgZG9lcyBpdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdGhlIG5ldHdvcmsgb3IgdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGNlMGM2MzczYjNiYWI0ODE2ZjhjYTA0OWNlZmU0MzQ2Yzk3MDJmYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDggMjM6Mzc6MDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbDJ0cC9sMnRwX2NvcmUuYyBiL25ldC9sMnRwL2wydHBfY29yZS5jXG5pbmRleCA0NzEyY2M0MTg4MWEzLi5mNTJiZjNiNTMyOTA3IDEwMDY0NFxuLS0tIGEvbmV0L2wydHAvbDJ0cF9jb3JlLmNcbisrKyBiL25ldC9sMnRwL2wydHBfY29yZS5jXG5AQCAtMTIyNywxOCArMTIyNywxNiBAQCBzdGF0aWMgaW50IGwydHBfeG1pdF9jb3JlKHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb24sIHN0cnVjdCBza19idWZmICpza2IsIHVuc1xuIFx0c3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwgPSBzZXNzaW9uLVx1MDAzZXR1bm5lbDtcbiBcdHVuc2lnbmVkIGludCBkYXRhX2xlbiA9IHNrYi1cdTAwM2VsZW47XG4gXHRzdHJ1Y3Qgc29jayAqc2sgPSB0dW5uZWwtXHUwMDNlc29jaztcbi1cdGludCBoZWFkcm9vbSwgdWhsZW4sIHVkcF9sZW47XG4gXHRpbnQgcmV0ID0gTkVUX1hNSVRfU1VDQ0VTUztcbiBcdHN0cnVjdCBpbmV0X3NvY2sgKmluZXQ7XG4gXHRzdHJ1Y3QgdWRwaGRyICp1aDtcbitcdGludCB1ZHBfbGVuO1xuIFxuIFx0LyogQ2hlY2sgdGhhdCB0aGVyZSdzIGVub3VnaCBoZWFkcm9vbSBpbiB0aGUgc2tiIHRvIGluc2VydCBJUCxcbiBcdCAqIFVEUCBhbmQgTDJUUCBoZWFkZXJzLiBJZiBub3QgZW5vdWdoLCBleHBhbmQgaXQgdG9cbiBcdCAqIG1ha2Ugcm9vbS4gQWRqdXN0IHRydWVzaXplLlxuIFx0ICovXG4tXHR1aGxlbiA9ICh0dW5uZWwtXHUwMDNlZW5jYXAgPT0gTDJUUF9FTkNBUFRZUEVfVURQKSA/IHNpemVvZigqdWgpIDogMDtcbi1cdGhlYWRyb29tID0gTkVUX1NLQl9QQUQgKyBzaXplb2Yoc3RydWN0IGlwaGRyKSArIHVobGVuICsgc2Vzc2lvbi1cdTAwM2VoZHJfbGVuO1xuLVx0aWYgKHNrYl9jb3dfaGVhZChza2IsIGhlYWRyb29tKSkge1xuK1x0aWYgKHNrYl9jb3dfaGVhZChza2IsIGwydHBfc2Vzc2lvbl9za2JfaGVhZHJvb20oc2Vzc2lvbiwgdHVubmVsKSkpIHtcbiBcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdHJldHVybiBORVRfWE1JVF9EUk9QO1xuIFx0fVxuQEAgLTEyOTAsNyArMTI4OCw5IEBAIHN0YXRpYyBpbnQgbDJ0cF94bWl0X2NvcmUoc3RydWN0IGwydHBfc2Vzc2lvbiAqc2Vzc2lvbiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zXG4gXHRcdHVoID0gdWRwX2hkcihza2IpO1xuIFx0XHR1aC1cdTAwM2Vzb3VyY2UgPSBpbmV0LVx1MDAzZWluZXRfc3BvcnQ7XG4gXHRcdHVoLVx1MDAzZWRlc3QgPSBpbmV0LVx1MDAzZWluZXRfZHBvcnQ7XG4tXHRcdHVkcF9sZW4gPSB1aGxlbiArIHNlc3Npb24tXHUwMDNlaGRyX2xlbiArIGRhdGFfbGVuO1xuK1xuK1x0XHR1ZHBfbGVuID0gbDJ0cF90dW5uZWxfdWRwX2hkcmxlbih0dW5uZWwpO1xuK1x0XHR1ZHBfbGVuICs9IHNlc3Npb24tXHUwMDNlaGRyX2xlbiArIGRhdGFfbGVuO1xuIFx0XHRpZiAodWRwX2xlbiBcdTAwM2UgVTE2X01BWCkge1xuIFx0XHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRcdHJldCA9IE5FVF9YTUlUX0RST1A7XG5AQCAtMTY4OCw2ICsxNjg4LDcgQEAgaW50IGwydHBfdHVubmVsX3JlZ2lzdGVyKHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsLCBzdHJ1Y3QgbmV0ICpuZXQsXG4gXHR9XG4gXG4gXHRzay1cdTAwM2Vza19hbGxvY2F0aW9uID0gR0ZQX0FUT01JQztcbitcdHR1bm5lbC1cdTAwM2VsM19vdmVyaGVhZCA9IGtlcm5lbF9zb2NrX2lwX292ZXJoZWFkKHNrKTtcbiBcdHJlbGVhc2Vfc29jayhzayk7XG4gXG4gXHRzb2NrX2hvbGQoc2spO1xuZGlmZiAtLWdpdCBhL25ldC9sMnRwL2wydHBfY29yZS5oIGIvbmV0L2wydHAvbDJ0cF9jb3JlLmhcbmluZGV4IGZmZDhjZWQzYTUxZmYuLjJjNDE4NzdiNmNlNTcgMTAwNjQ0XG4tLS0gYS9uZXQvbDJ0cC9sMnRwX2NvcmUuaFxuKysrIGIvbmV0L2wydHAvbDJ0cF9jb3JlLmhcbkBAIC0xNjcsNiArMTY3LDcgQEAgc3RydWN0IGwydHBfdHVubmVsIHtcbiBcdHUzMlx0XHRcdHR1bm5lbF9pZDtcbiBcdHUzMlx0XHRcdHBlZXJfdHVubmVsX2lkO1xuIFx0aW50XHRcdFx0dmVyc2lvbjtcdC8qIDI9XHUwMDNlTDJUUHYyLCAzPVx1MDAzZUwyVFB2MyAqL1xuK1x0aW50XHRcdFx0bDNfb3ZlcmhlYWQ7XHQvKiBJUCBoZWFkZXIgb3ZlcmhlYWQgKi9cbiBcbiBcdGNoYXJcdFx0XHRuYW1lW0wyVFBfVFVOTkVMX05BTUVfTUFYXTsgLyogZm9yIGxvZ2dpbmcgKi9cbiBcdGVudW0gbDJ0cF9lbmNhcF90eXBlXHRlbmNhcDtcbkBAIC0zMzQsNiArMzM1LDI1IEBAIHN0YXRpYyBpbmxpbmUgaW50IGwydHBfdjNfZW5zdXJlX29wdF9pbl9saW5lYXIoc3RydWN0IGwydHBfc2Vzc2lvbiAqc2Vzc2lvbiwgc3RyXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBpbnQgbDJ0cF90dW5uZWxfdWRwX2hkcmxlbihzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbClcbit7XG4rXHRyZXR1cm4gdHVubmVsLVx1MDAzZWVuY2FwID09IEwyVFBfRU5DQVBUWVBFX1VEUCA/XG4rXHRcdHNpemVvZihzdHJ1Y3QgdWRwaGRyKSA6IDA7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IGwydHBfc2Vzc2lvbl9vdmVyaGVhZChzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbClcbit7XG4rXHRyZXR1cm4gbDJ0cF90dW5uZWxfdWRwX2hkcmxlbih0dW5uZWwpICsgc2Vzc2lvbi1cdTAwM2VoZHJfbGVuICtcbitcdFx0dHVubmVsLVx1MDAzZWwzX292ZXJoZWFkO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludCBsMnRwX3Nlc3Npb25fc2tiX2hlYWRyb29tKHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb24sXG4rXHRcdFx0XHRcdCAgICBzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbClcbit7XG4rXHRyZXR1cm4gTkVUX1NLQl9QQUQgKyBsMnRwX3Nlc3Npb25fb3ZlcmhlYWQoc2Vzc2lvbiwgdHVubmVsKTtcbit9XG4rXG4gI2RlZmluZSBNT0RVTEVfQUxJQVNfTDJUUF9QV1RZUEUodHlwZSkgXFxcbiBcdE1PRFVMRV9BTElBUyhcIm5ldC1sMnRwLXR5cGUtXCIgX19zdHJpbmdpZnkodHlwZSkpXG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2wydHAvbDJ0cF9ldGguYyBiL25ldC9sMnRwL2wydHBfZXRoLmNcbmluZGV4IGE0OTU2ZWY5NTc0Y2MuLjY4N2NlMWM2ZGI5NDYgMTAwNjQ0XG4tLS0gYS9uZXQvbDJ0cC9sMnRwX2V0aC5jXG4rKysgYi9uZXQvbDJ0cC9sMnRwX2V0aC5jXG5AQCAtMTg4LDMxICsxODgsMTcgQEAgc3RhdGljIHZvaWQgbDJ0cF9ldGhfYWRqdXN0X210dShzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbCxcbiBcdFx0XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0dW5zaWduZWQgaW50IG92ZXJoZWFkID0gMDtcbi1cdHUzMiBsM19vdmVyaGVhZCA9IDA7XG4gXHR1MzIgbXR1O1xuIFxuLVx0LyogaWYgdGhlIGVuY2FwIGlzIFVEUCwgYWNjb3VudCBmb3IgVURQIGhlYWRlciBzaXplICovXG4tXHRpZiAodHVubmVsLVx1MDAzZWVuY2FwID09IEwyVFBfRU5DQVBUWVBFX1VEUCkge1xuLVx0XHRvdmVyaGVhZCArPSBzaXplb2Yoc3RydWN0IHVkcGhkcik7XG4tXHRcdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20gKz0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpO1xuLVx0fVxuLVxuLVx0bG9ja19zb2NrKHR1bm5lbC1cdTAwM2Vzb2NrKTtcbi1cdGwzX292ZXJoZWFkID0ga2VybmVsX3NvY2tfaXBfb3ZlcmhlYWQodHVubmVsLVx1MDAzZXNvY2spO1xuLVx0cmVsZWFzZV9zb2NrKHR1bm5lbC1cdTAwM2Vzb2NrKTtcbi1cbi1cdGlmIChsM19vdmVyaGVhZCA9PSAwKSB7XG4rXHRpZiAodHVubmVsLVx1MDAzZWwzX292ZXJoZWFkID09IDApIHtcbiBcdFx0LyogTDMgT3ZlcmhlYWQgY291bGRuJ3QgYmUgaWRlbnRpZmllZCwgdGhpcyBjb3VsZCBiZVxuLVx0XHQgKiBiZWNhdXNlIHR1bm5lbC1cdTAwM2Vzb2NrIHdhcyBOVUxMIG9yIHRoZSBzb2NrZXQnc1xuLVx0XHQgKiBhZGRyZXNzIGZhbWlseSB3YXMgbm90IElQdjQgb3IgSVB2Nixcbi1cdFx0ICogZGV2IG10dSBzdGF5cyBhdCAxNTAwLlxuK1x0XHQgKiBiZWNhdXNlIHRoZSBzb2NrZXQncyBhZGRyZXNzIGZhbWlseSB3YXMgbm90IElQdjRcbitcdFx0ICogb3IgSVB2NiAtIGRldiBtdHUgc3RheXMgYXQgMTUwMC5cbiBcdFx0ICovXG4gXHRcdHJldHVybjtcbiBcdH1cbi1cdC8qIEFkanVzdCBNVFUsIGZhY3RvciBvdmVyaGVhZCAtIHVuZGVybGF5IEwzLCBvdmVybGF5IEwyIGhkclxuLVx0ICogVURQIG92ZXJoZWFkLCBpZiBhbnksIHdhcyBhbHJlYWR5IGZhY3RvcmVkIGluIGFib3ZlLlxuLVx0ICovXG4tXHRvdmVyaGVhZCArPSBzZXNzaW9uLVx1MDAzZWhkcl9sZW4gKyBFVEhfSExFTiArIGwzX292ZXJoZWFkO1xuK1x0LyogQ2FsY3VsYXRlIHJlcXVpcmVkIG92ZXJoZWFkICovXG4rXHRvdmVyaGVhZCA9IEVUSF9ITEVOICsgbDJ0cF9zZXNzaW9uX292ZXJoZWFkKHNlc3Npb24sIHR1bm5lbCk7XG4gXG4gXHRtdHUgPSBsMnRwX3R1bm5lbF9kc3RfbXR1KHR1bm5lbCkgLSBvdmVyaGVhZDtcbiBcdGlmIChtdHUgXHUwMDNjIGRldi1cdTAwM2VtaW5fbXR1IHx8IG10dSBcdTAwM2UgZGV2LVx1MDAzZW1heF9tdHUpXG5AQCAtMjIwLDcgKzIwNiw3IEBAIHN0YXRpYyB2b2lkIGwydHBfZXRoX2FkanVzdF9tdHUoc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwsXG4gXHRlbHNlXG4gXHRcdGRldi1cdTAwM2VtdHUgPSBtdHU7XG4gXG4tXHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tICs9IHNlc3Npb24tXHUwMDNlaGRyX2xlbjtcbitcdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBsMnRwX3Nlc3Npb25fc2tiX2hlYWRyb29tKHNlc3Npb24sIHR1bm5lbCk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbDJ0cF9ldGhfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQyMzozODowNi43MzIzMDczOTFaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ3NTQzODA3MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogTDJUUCBPdmVyaGVhZCBSZWZhY3RvcioqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggbW9kaWZ5aW5nIHRoZSBMMlRQIGNvZGUsIHNwZWNpZmljYWxseSBmb2N1c2VkIG9uIGhvdyBvdmVyaGVhZCBhbmQgaGVhZHJvb20gYXJlIGNhbGN1bGF0ZWQuIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzLCBcIkFyZSB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgaW50cm9kdWNlZCBoZXJlP1wiLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaW52b2x2ZXMgdGhlc2UgbmV3IGZ1bmN0aW9uczogYGwydHBfc2Vzc2lvbl9vdmVyaGVhZGAsIGBsMnRwX3Nlc3Npb25fc2tiX2hlYWRyb29tYCwgYW5kIGNhY2hpbmcgYGwzX292ZXJoZWFkYCBkdXJpbmcgdHVubmVsIHJlZ2lzdHJhdGlvbi4gSXQgc2VlbXMgdGhlIGludGVudGlvbiBpcyB0byBtYWtlIHRoZSBoZWFkcm9vbSBjYWxjdWxhdGlvbiBtb3JlIHByZWNpc2UsIHVzaW5nIGBsMnRwX3Nlc3Npb25fc2tiX2hlYWRyb29tYCB3aXRoIGBza2JfY293X2hlYWRgIGluIGBsMnRwX3htaXRfY29yZWAgYW5kIGFkanVzdGluZyB0aGUgTVRVIGNhbGN1bGF0aW9uIGluIGBsMnRwX2V0aF9hZGp1c3RfbXR1YC5cblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgZG93biB0aGUgY2FsY3VsYXRpb25zLiBgbDNfb3ZlcmhlYWRgIGdldHMgc3RvcmVkIGluIGB0dW5uZWwtXHUwMDNlbDNfb3ZlcmhlYWRgIHVzaW5nIGBrZXJuZWxfc29ja19pcF9vdmVyaGVhZChzaylgLiBUaGVuLCBgbDJ0cF9zZXNzaW9uX3NrYl9oZWFkcm9vbWAgYWRkcyBgTkVUX1NLQl9QQUQgKyBsMnRwX3Nlc3Npb25fb3ZlcmhlYWQoc2Vzc2lvbiwgdHVubmVsKWAuICBBbmQgdGhhdCBgbDJ0cF9zZXNzaW9uX292ZXJoZWFkYCBhZGRzIHRoZSBVRFAgaGVhZGVyIGxlbmd0aCBpZiBhcHBsaWNhYmxlLCB0aGUgc2Vzc2lvbiBoZWFkZXIgbGVuZ3RoLCBhbmQgdGhlIHR1bm5lbCdzIEwzIG92ZXJoZWFkLlxuXG5Mb29raW5nIGF0IGBsMnRwX3htaXRfY29yZWAsIHRoZSBjb2RlIGhhcyBiZWVuIHVwZGF0ZWQgdG8gdXNlIHRoZSBuZXcgYGwydHBfc2Vzc2lvbl9za2JfaGVhZHJvb21gIGZ1bmN0aW9uLiBCZWZvcmUsIGl0IHdhcyBjYWxjdWxhdGluZyB0aGUgaGVhZHJvb20gZGlyZWN0bHksIGluY2x1ZGluZyB0aGUgSVAgaGVhZGVyIHNpemUuIE5vdywgaXQncyB1c2luZyB0aGUgY2FjaGVkIGBsM19vdmVyaGVhZGAuIE15IGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIGlzIGNvbnNpc3RlbnQuIEl0J3Mgbm93IGV4cGxpY2l0bHkgdXNpbmcgYHR1bm5lbC1cdTAwM2VsM19vdmVyaGVhZGAsIHdoaWNoLCBhZ2FpbiwgaXMgdGhlIHJlc3VsdCBvZiBga2VybmVsX3NvY2tfaXBfb3ZlcmhlYWQoc2spYC4gVGhpcyBjb3VsZCByZXByZXNlbnQgSVB2NCBvciBJUHY2IG92ZXJoZWFkLCBzbyBpdCAqY291bGQqIGJlIGxhcmdlciBpbiB0aGUgSVB2NiBjYXNlLlxuXG5TbywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBEb2VzIHRoaXMgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gYHNrYl9jb3dfaGVhZGAgaXMganVzdCBhbGxvY2F0aW5nIG1vcmUgc3BhY2UuIEl0IGRvZXNuJ3QgaW5pdGlhbGl6ZSBkYXRhLCB0aGUgbmV0d29yayBzdGFjayBkb2VzIHRoYXQgbGF0ZXIuIFRoZSBwb3RlbnRpYWwgcmlza3MgaGVyZSBhcmUgaW5jb3JyZWN0IGhlYWRyb29tIGxlYWRpbmcgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IsIHdvcnNlLCBhIHBhbmljIOKAkyBidXQgS0FTQU4gc2hvdWxkIGNhdGNoIHRob3NlIGlzc3Vlcy4gVGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIG5vciBkb2VzIGl0IGludHJvZHVjZSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMuIFRoZXJlJ3Mgbm90aGluZyBoZXJlIHRoYXQncyByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgZnJvbSBleGlzdGluZyBidWZmZXJzIGJlY2F1c2Ugb2YgYSBib3VuZHMgaXNzdWUuXG5cbkEgZmluYWwgdGhvdWdodDogSXMgdGhlcmUgYW55IHNjZW5hcmlvIHdoZXJlIGBza2JfY293X2hlYWRgIGl0c2VsZiBjYW4gbGVhdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gdGhlIFNLQiB0aGF0IHdvdWxkIGdldCBzZW50PyBOby4gVGhlIGRhdGEgc2VjdGlvbiBvZiB0aGUgc2tiIGlzIGZpbGxlZCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBkYXRhIGxhdGVyLiBJZiBpdCAqZGlkKiBsZWF2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgS01TQU4gd291bGQgZmxhZyBpdC4gVGhpcyBwYXRjaCBpcyBqdXN0IGNoYW5naW5nIHRoZSAqYW1vdW50KiBvZiBoZWFkcm9vbSByZXF1ZXN0ZWQsIG5vdCBob3cgdGhlIGRhdGEgaXMgd3JpdHRlbi5cblxuTGV0J3MgcmV2aWV3IHRoZSBjaGFuZ2VzIGluIGBsMnRwX2V0aF9hZGp1c3RfbXR1YC4gSXQgbG9va3MgbGlrZSBpdCBpcyBqdXN0IHJlZmFjdG9yaW5nIHRoZSBNVFUgY2FsY3VsYXRpb24gdXNpbmcgdGhlIG5ldyBoZWxwZXIgZnVuY3Rpb24uXG5cbkkgZG9uJ3Qgc2VlIGFueSBLTVNBTi1zcGVjaWZpYyByaXNrcyBoZXJlLiBUaGUgcG90ZW50aWFsIGJ1Z3MgYXJlIE9PQiBhY2Nlc3NlcyBvciBpbmNvcnJlY3QgTVRVIHNpemVzLCB3aGljaCBLQVNBTiwgb3IgZnVuY3Rpb25hbCBmYWlsdXJlIHdpbGwgY2F0Y2guXG5DYW4gYGtlcm5lbF9zb2NrX2lwX292ZXJoZWFkYCByZXR1cm4gdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLCBpdCdzIGp1c3QgcmV0dXJuaW5nIGEgc2l6ZS5cbklzIGB0dW5uZWwtXHUwMDNlbDNfb3ZlcmhlYWRgIHVuaW5pdGlhbGl6ZWQ/IE5vLCBpdCBpcyBpbml0aWFsaXplZCB3aGVuIHJlZ2lzdGVyaW5nIHRoZSB0dW5uZWwgdmlhIGBsMnRwX3R1bm5lbF9yZWdpc3RlcmAuXG5cbmBgYGNcblx0c2stXHUwMDNlc2tfYWxsb2NhdGlvbiA9IEdGUF9BVE9NSUM7XG5cdHR1bm5lbC1cdTAwM2VsM19vdmVyaGVhZCA9IGtlcm5lbF9zb2NrX2lwX292ZXJoZWFkKHNrKTtcblx0cmVsZWFzZV9zb2NrKHNrKTtcbmBgYFxuXG5TbywgTmVlZHNLTVNBTiBzaG91bGQgYmUgZmFsc2UgaGVyZS5cblxuVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgY2FsY3VsYXRpb24gb2YgTDJUUCBwYWNrZXQgb3ZlcmhlYWQgYW5kIGhlYWRyb29tLCBjYWNoaW5nIHRoZSBMMyBvdmVyaGVhZCBpbiB0aGUgYGwydHBfdHVubmVsYCBzdHJ1Y3R1cmUgYW5kIHVzaW5nIGl0IHRvIGFjY3VyYXRlbHkgcmVxdWVzdCBoZWFkcm9vbSB2aWEgYHNrYl9jb3dfaGVhZGAgYW5kIHNldCBNVFUvbmVlZGVkX2hlYWRyb29tIGZvciB0aGUgZGV2aWNlLiBUaGVzZSBjaGFuZ2VzIHByaW1hcmlseSBhZmZlY3QgYnVmZmVyIHNpemUgY2FsY3VsYXRpb25zIGFuZCBoZWFkcm9vbSBhbGxvY2F0aW9uLiBJZiB0aGUgY2FsY3VsYXRpb25zIGFyZSBpbmNvcnJlY3QsIHRoZXkgY291bGQgbGVhZCB0byBvdXQtb2YtYm91bmRzIHdyaXRlcyAoaWYgaGVhZHJvb20gaXMgdG9vIHNtYWxsKSBvciBmdW5jdGlvbmFsIGlzc3VlcyAoaW5jb3JyZWN0IE1UVSksIGJvdGggb2Ygd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCB0ZXN0aW5nLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIG5vciBkb2VzIGl0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB0aGUgbmV0d29yayBvciB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzcxOCwiT3V0cHV0VG9rZW5zIjoxODEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzU1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMjM6Mzg6MjEuNDg2NjkyMTY4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGNhbGN1bGF0aW9uIG9mIEwyVFAgcGFja2V0IG92ZXJoZWFkIGFuZCBoZWFkcm9vbSwgY2FjaGluZyB0aGUgTDMgb3ZlcmhlYWQgaW4gdGhlIGBsMnRwX3R1bm5lbGAgc3RydWN0dXJlIGFuZCB1c2luZyBpdCB0byBhY2N1cmF0ZWx5IHJlcXVlc3QgaGVhZHJvb20gdmlhIGBza2JfY293X2hlYWRgIGFuZCBzZXQgTVRVL25lZWRlZF9oZWFkcm9vbSBmb3IgdGhlIGRldmljZS4gVGhlc2UgY2hhbmdlcyBwcmltYXJpbHkgYWZmZWN0IGJ1ZmZlciBzaXplIGNhbGN1bGF0aW9ucyBhbmQgaGVhZHJvb20gYWxsb2NhdGlvbi4gSWYgdGhlIGNhbGN1bGF0aW9ucyBhcmUgaW5jb3JyZWN0LCB0aGV5IGNvdWxkIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyB3cml0ZXMgKGlmIGhlYWRyb29tIGlzIHRvbyBzbWFsbCkgb3IgZnVuY3Rpb25hbCBpc3N1ZXMgKGluY29ycmVjdCBNVFUpLCBib3RoIG9mIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgdGVzdGluZy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLCBub3IgZG9lcyBpdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdGhlIG5ldHdvcmsgb3IgdXNlcnNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBjYWxjdWxhdGlvbiBvZiBMMlRQIHBhY2tldCBvdmVyaGVhZCBhbmQgaGVhZHJvb20sIGNhY2hpbmcgdGhlIEwzIG92ZXJoZWFkIGluIHRoZSBgbDJ0cF90dW5uZWxgIHN0cnVjdHVyZSBhbmQgdXNpbmcgaXQgdG8gYWNjdXJhdGVseSByZXF1ZXN0IGhlYWRyb29tIHZpYSBgc2tiX2Nvd19oZWFkYCBhbmQgc2V0IE1UVS9uZWVkZWRfaGVhZHJvb20gZm9yIHRoZSBkZXZpY2UuIFRoZXNlIGNoYW5nZXMgcHJpbWFyaWx5IGFmZmVjdCBidWZmZXIgc2l6ZSBjYWxjdWxhdGlvbnMgYW5kIGhlYWRyb29tIGFsbG9jYXRpb24uIElmIHRoZSBjYWxjdWxhdGlvbnMgYXJlIGluY29ycmVjdCwgdGhleSBjb3VsZCBsZWFkIHRvIG91dC1vZi1ib3VuZHMgd3JpdGVzIChpZiBoZWFkcm9vbSBpcyB0b28gc21hbGwpIG9yIGZ1bmN0aW9uYWwgaXNzdWVzIChpbmNvcnJlY3QgTVRVKSwgYm90aCBvZiB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHRlc3RpbmcuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSwgbm9yIGRvZXMgaXQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHRoZSBuZXR3b3JrIG9yIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowx9thb[1] Phase: Succeeded StartedAt: 2026-08-08 23:38:32 +0000 UTC FinishedAt: 2026-08-08 23:38:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx9thb[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-08 23:38:32 +0000 UTC FinishedAt: 2026-08-08 23:38:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx9thb[2] Phase: Succeeded StartedAt: 2026-08-08 23:38:32 +0000 UTC FinishedAt: 2026-08-09 03:18:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx9thb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_tunnel_register","l2tp_nl_cmd_session_create","l2tp_xmit_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"4a5f0e22-8ff6-4e58-bcbe-b95c68a0fc7d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["9b3d30fe-b87f-4b00-99a6-464f0a271312"]},track:KASAN) Phase: Succeeded StartedAt: 2026-08-08 23:38:32 +0000 UTC FinishedAt: 2026-08-09 03:18:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_tunnel_register","l2tp_nl_cmd_session_create","l2tp_xmit_skb"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"4a5f0e22-8ff6-4e58-bcbe-b95c68a0fc7d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":{"findings":["9b3d30fe-b87f-4b00-99a6-464f0a271312"]},"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowx9thb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_tunnel_register","l2tp_nl_cmd_session_create","l2tp_xmit_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"4a5f0e22-8ff6-4e58-bcbe-b95c68a0fc7d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["9b3d30fe-b87f-4b00-99a6-464f0a271312"]},track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-08 23:38:32 +0000 UTC FinishedAt: 2026-08-08 23:38:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx9thb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_tunnel_register","l2tp_nl_cmd_session_create","l2tp_xmit_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"4a5f0e22-8ff6-4e58-bcbe-b95c68a0fc7d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["9b3d30fe-b87f-4b00-99a6-464f0a271312"]},track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-08 23:38:32 +0000 UTC FinishedAt: 2026-08-08 23:38:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflowx9thb/series-workflowx9thb-convert-artifact-1657399416/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx9thb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_tunnel_register","l2tp_nl_cmd_session_create","l2tp_xmit_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"4a5f0e22-8ff6-4e58-bcbe-b95c68a0fc7d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["9b3d30fe-b87f-4b00-99a6-464f0a271312"]},track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-08 23:38:42 +0000 UTC FinishedAt: 2026-08-08 23:55:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx9thb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_tunnel_register","l2tp_nl_cmd_session_create","l2tp_xmit_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"4a5f0e22-8ff6-4e58-bcbe-b95c68a0fc7d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["9b3d30fe-b87f-4b00-99a6-464f0a271312"]},track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-08 23:38:42 +0000 UTC FinishedAt: 2026-08-08 23:55:20 +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:*6ebbf627-a0b6-4c41-9e0a-5f385827c45b,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-workflowx9thb/series-workflowx9thb-convert-artifact-1657399416/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": "872c087c-67ab-4112-9ed3-6533c0eb0d19", "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-workflowx9thb/series-workflowx9thb-build-action-994028846/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx9thb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_tunnel_register","l2tp_nl_cmd_session_create","l2tp_xmit_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"4a5f0e22-8ff6-4e58-bcbe-b95c68a0fc7d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["9b3d30fe-b87f-4b00-99a6-464f0a271312"]},track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-08 23:38:42 +0000 UTC FinishedAt: 2026-08-08 23:55:10 +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:*6ebbf627-a0b6-4c41-9e0a-5f385827c45b,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-workflowx9thb/series-workflowx9thb-convert-artifact-1657399416/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": "872c087c-67ab-4112-9ed3-6533c0eb0d19", "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-workflowx9thb/series-workflowx9thb-build-action-994028846/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx9thb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_tunnel_register","l2tp_nl_cmd_session_create","l2tp_xmit_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"4a5f0e22-8ff6-4e58-bcbe-b95c68a0fc7d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["9b3d30fe-b87f-4b00-99a6-464f0a271312"]},track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-08 23:55:20 +0000 UTC FinishedAt: 2026-08-08 23:55:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx9thb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_tunnel_register","l2tp_nl_cmd_session_create","l2tp_xmit_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"4a5f0e22-8ff6-4e58-bcbe-b95c68a0fc7d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["9b3d30fe-b87f-4b00-99a6-464f0a271312"]},track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-08 23:55:20 +0000 UTC FinishedAt: 2026-08-08 23:55:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx9thb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_tunnel_register","l2tp_nl_cmd_session_create","l2tp_xmit_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"4a5f0e22-8ff6-4e58-bcbe-b95c68a0fc7d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["9b3d30fe-b87f-4b00-99a6-464f0a271312"]},track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-08 23:55:20 +0000 UTC FinishedAt: 2026-08-08 23:55:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx9thb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_tunnel_register","l2tp_nl_cmd_session_create","l2tp_xmit_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"4a5f0e22-8ff6-4e58-bcbe-b95c68a0fc7d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["9b3d30fe-b87f-4b00-99a6-464f0a271312"]},track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-08 23:55:20 +0000 UTC FinishedAt: 2026-08-08 23:55:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"4a5f0e22-8ff6-4e58-bcbe-b95c68a0fc7d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflowx9thb/series-workflowx9thb-convert-artifact-2984182751/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx9thb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_tunnel_register","l2tp_nl_cmd_session_create","l2tp_xmit_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"4a5f0e22-8ff6-4e58-bcbe-b95c68a0fc7d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["9b3d30fe-b87f-4b00-99a6-464f0a271312"]},track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-08 23:55:31 +0000 UTC FinishedAt: 2026-08-08 23:57:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx9thb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_tunnel_register","l2tp_nl_cmd_session_create","l2tp_xmit_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"4a5f0e22-8ff6-4e58-bcbe-b95c68a0fc7d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["9b3d30fe-b87f-4b00-99a6-464f0a271312"]},track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-08 23:55:31 +0000 UTC FinishedAt: 2026-08-08 23:57:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*872c087c-67ab-4112-9ed3-6533c0eb0d19,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-workflowx9thb/series-workflowx9thb-build-action-994028846/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-workflowx9thb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_tunnel_register","l2tp_nl_cmd_session_create","l2tp_xmit_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"4a5f0e22-8ff6-4e58-bcbe-b95c68a0fc7d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["9b3d30fe-b87f-4b00-99a6-464f0a271312"]},track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-08 23:57:40 +0000 UTC FinishedAt: 2026-08-08 23:57:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx9thb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_tunnel_register","l2tp_nl_cmd_session_create","l2tp_xmit_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"4a5f0e22-8ff6-4e58-bcbe-b95c68a0fc7d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["9b3d30fe-b87f-4b00-99a6-464f0a271312"]},track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-08 23:57:40 +0000 UTC FinishedAt: 2026-08-08 23:57:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx9thb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_tunnel_register","l2tp_nl_cmd_session_create","l2tp_xmit_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"4a5f0e22-8ff6-4e58-bcbe-b95c68a0fc7d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["9b3d30fe-b87f-4b00-99a6-464f0a271312"]},track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-08 23:57:40 +0000 UTC FinishedAt: 2026-08-09 00:14:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx9thb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_tunnel_register","l2tp_nl_cmd_session_create","l2tp_xmit_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"4a5f0e22-8ff6-4e58-bcbe-b95c68a0fc7d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["9b3d30fe-b87f-4b00-99a6-464f0a271312"]},track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-08 23:57:40 +0000 UTC FinishedAt: 2026-08-09 00:14:12 +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:*6ebbf627-a0b6-4c41-9e0a-5f385827c45b,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-workflowx9thb/series-workflowx9thb-convert-artifact-2984182751/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": "e5d93b3b-5bc9-4008-af09-f1a09bc8464f", "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-workflowx9thb/series-workflowx9thb-build-action-28283251/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx9thb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_tunnel_register","l2tp_nl_cmd_session_create","l2tp_xmit_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"4a5f0e22-8ff6-4e58-bcbe-b95c68a0fc7d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["9b3d30fe-b87f-4b00-99a6-464f0a271312"]},track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-08 23:57:40 +0000 UTC FinishedAt: 2026-08-09 00:14:02 +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:*6ebbf627-a0b6-4c41-9e0a-5f385827c45b,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-workflowx9thb/series-workflowx9thb-convert-artifact-2984182751/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": "e5d93b3b-5bc9-4008-af09-f1a09bc8464f", "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-workflowx9thb/series-workflowx9thb-build-action-28283251/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx9thb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_tunnel_register","l2tp_nl_cmd_session_create","l2tp_xmit_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"4a5f0e22-8ff6-4e58-bcbe-b95c68a0fc7d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["9b3d30fe-b87f-4b00-99a6-464f0a271312"]},track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-09 00:14:12 +0000 UTC FinishedAt: 2026-08-09 00:14:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx9thb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_tunnel_register","l2tp_nl_cmd_session_create","l2tp_xmit_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"4a5f0e22-8ff6-4e58-bcbe-b95c68a0fc7d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["9b3d30fe-b87f-4b00-99a6-464f0a271312"]},track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-09 00:14:12 +0000 UTC FinishedAt: 2026-08-09 00:14:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx9thb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_tunnel_register","l2tp_nl_cmd_session_create","l2tp_xmit_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"4a5f0e22-8ff6-4e58-bcbe-b95c68a0fc7d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["9b3d30fe-b87f-4b00-99a6-464f0a271312"]},track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-09 00:14:12 +0000 UTC FinishedAt: 2026-08-09 00:16:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx9thb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_tunnel_register","l2tp_nl_cmd_session_create","l2tp_xmit_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"4a5f0e22-8ff6-4e58-bcbe-b95c68a0fc7d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["9b3d30fe-b87f-4b00-99a6-464f0a271312"]},track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-09 00:14:12 +0000 UTC FinishedAt: 2026-08-09 00:16:06 +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:*e5d93b3b-5bc9-4008-af09-f1a09bc8464f,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-workflowx9thb/series-workflowx9thb-build-action-28283251/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-workflowx9thb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_tunnel_register","l2tp_nl_cmd_session_create","l2tp_xmit_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"4a5f0e22-8ff6-4e58-bcbe-b95c68a0fc7d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["9b3d30fe-b87f-4b00-99a6-464f0a271312"]},track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-09 00:16:16 +0000 UTC FinishedAt: 2026-08-09 03:18:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx9thb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_tunnel_register","l2tp_nl_cmd_session_create","l2tp_xmit_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"4a5f0e22-8ff6-4e58-bcbe-b95c68a0fc7d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["9b3d30fe-b87f-4b00-99a6-464f0a271312"]},track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-09 00:16:16 +0000 UTC FinishedAt: 2026-08-09 03:18:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_tunnel_register","l2tp_nl_cmd_session_create","l2tp_xmit_skb"],"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:*872c087c-67ab-4112-9ed3-6533c0eb0d19,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e5d93b3b-5bc9-4008-af09-f1a09bc8464f,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-workflowx9thb/series-workflowx9thb-build-action-994028846/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-workflowx9thb/series-workflowx9thb-build-action-28283251/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowx9thb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_tunnel_register","l2tp_nl_cmd_session_create","l2tp_xmit_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"4a5f0e22-8ff6-4e58-bcbe-b95c68a0fc7d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["9b3d30fe-b87f-4b00-99a6-464f0a271312"]},track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-09 00:16:16 +0000 UTC FinishedAt: 2026-08-09 00:16:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx9thb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_tunnel_register","l2tp_nl_cmd_session_create","l2tp_xmit_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"4a5f0e22-8ff6-4e58-bcbe-b95c68a0fc7d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["9b3d30fe-b87f-4b00-99a6-464f0a271312"]},track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-09 00:16:16 +0000 UTC FinishedAt: 2026-08-09 00:16:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_tunnel_register","l2tp_nl_cmd_session_create","l2tp_xmit_skb"],"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-workflowx9thb/series-workflowx9thb-convert-artifact-3807297272/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx9thb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_tunnel_register","l2tp_nl_cmd_session_create","l2tp_xmit_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"4a5f0e22-8ff6-4e58-bcbe-b95c68a0fc7d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["9b3d30fe-b87f-4b00-99a6-464f0a271312"]},track:KASAN)[10].run-retest Phase: Succeeded StartedAt: 2026-08-09 00:16:16 +0000 UTC FinishedAt: 2026-08-09 00:33:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:retest-data,Default:nil,Value:*{"findings":["9b3d30fe-b87f-4b00-99a6-464f0a271312"]},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*872c087c-67ab-4112-9ed3-6533c0eb0d19,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e5d93b3b-5bc9-4008-af09-f1a09bc8464f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,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-workflowx9thb/series-workflowx9thb-build-action-994028846/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-workflowx9thb/series-workflowx9thb-build-action-28283251/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowx9thb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_tunnel_register","l2tp_nl_cmd_session_create","l2tp_xmit_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"4a5f0e22-8ff6-4e58-bcbe-b95c68a0fc7d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["9b3d30fe-b87f-4b00-99a6-464f0a271312"]},track:KASAN)[10].run-retest[0] Phase: Succeeded StartedAt: 2026-08-09 00:16:16 +0000 UTC FinishedAt: 2026-08-09 00:16:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx9thb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_tunnel_register","l2tp_nl_cmd_session_create","l2tp_xmit_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"4a5f0e22-8ff6-4e58-bcbe-b95c68a0fc7d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["9b3d30fe-b87f-4b00-99a6-464f0a271312"]},track:KASAN)[10].run-retest[0].save-retest-task Phase: Succeeded StartedAt: 2026-08-09 00:16:16 +0000 UTC FinishedAt: 2026-08-09 00:16:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"findings":["9b3d30fe-b87f-4b00-99a6-464f0a271312"]},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-workflowx9thb/series-workflowx9thb-convert-artifact-1847158963/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx9thb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_tunnel_register","l2tp_nl_cmd_session_create","l2tp_xmit_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"4a5f0e22-8ff6-4e58-bcbe-b95c68a0fc7d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["9b3d30fe-b87f-4b00-99a6-464f0a271312"]},track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-09 00:16:16 +0000 UTC FinishedAt: 2026-08-09 00:16:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx9thb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_tunnel_register","l2tp_nl_cmd_session_create","l2tp_xmit_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"4a5f0e22-8ff6-4e58-bcbe-b95c68a0fc7d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["9b3d30fe-b87f-4b00-99a6-464f0a271312"]},track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-09 00:16:16 +0000 UTC FinishedAt: 2026-08-09 00:16:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx9thb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_tunnel_register","l2tp_nl_cmd_session_create","l2tp_xmit_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"4a5f0e22-8ff6-4e58-bcbe-b95c68a0fc7d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["9b3d30fe-b87f-4b00-99a6-464f0a271312"]},track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-09 00:16:26 +0000 UTC FinishedAt: 2026-08-09 03:18:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx9thb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_tunnel_register","l2tp_nl_cmd_session_create","l2tp_xmit_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"4a5f0e22-8ff6-4e58-bcbe-b95c68a0fc7d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["9b3d30fe-b87f-4b00-99a6-464f0a271312"]},track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-09 00:16:26 +0000 UTC FinishedAt: 2026-08-09 03:18:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*872c087c-67ab-4112-9ed3-6533c0eb0d19,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e5d93b3b-5bc9-4008-af09-f1a09bc8464f,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-workflowx9thb/series-workflowx9thb-build-action-994028846/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-workflowx9thb/series-workflowx9thb-build-action-28283251/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-workflowx9thb/series-workflowx9thb-convert-artifact-3807297272/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,} --------- Name: series-workflowx9thb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_tunnel_register","l2tp_nl_cmd_session_create","l2tp_xmit_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"4a5f0e22-8ff6-4e58-bcbe-b95c68a0fc7d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["9b3d30fe-b87f-4b00-99a6-464f0a271312"]},track:KASAN)[10].run-retest[1] Phase: Succeeded StartedAt: 2026-08-09 00:16:27 +0000 UTC FinishedAt: 2026-08-09 00:33:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx9thb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_tunnel_register","l2tp_nl_cmd_session_create","l2tp_xmit_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_V3","L2TP_ETH","L2TP_IP"],"series_id":"4a5f0e22-8ff6-4e58-bcbe-b95c68a0fc7d","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:{"findings":["9b3d30fe-b87f-4b00-99a6-464f0a271312"]},track:KASAN)[10].run-retest[1].retest Phase: Succeeded StartedAt: 2026-08-09 00:16:27 +0000 UTC FinishedAt: 2026-08-09 00:33:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*872c087c-67ab-4112-9ed3-6533c0eb0d19,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e5d93b3b-5bc9-4008-af09-f1a09bc8464f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Previous reproducers,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-workflowx9thb/series-workflowx9thb-build-action-994028846/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-workflowx9thb/series-workflowx9thb-build-action-28283251/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:retest-task,Path:/data/retest.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-workflowx9thb/series-workflowx9thb-convert-artifact-1847158963/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,}