Name: series-workflowbd4mc Phase: Succeeded StartedAt: 2026-06-26 18:19:24 +0000 UTC FinishedAt: 2026-06-26 22:30:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd4mc[0] Phase: Succeeded StartedAt: 2026-06-26 18:19:24 +0000 UTC FinishedAt: 2026-06-26 18:30:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd4mc[0].run-triage Phase: Succeeded StartedAt: 2026-06-26 18:19:24 +0000 UTC FinishedAt: 2026-06-26 18:30:47 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "805185b7c7a1069e407b6f7b3bc98e44d415f484", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VSOCKETS", "VIRTIO_VSOCKETS", "VHOST_VSOCK", "VSOCKETS_LOOPBACK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "805185b7c7a1069e407b6f7b3bc98e44d415f484", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VSOCKETS", "VIRTIO_VSOCKETS", "VHOST_VSOCK", "VSOCKETS_LOOPBACK" ], "series_id": "9259d32f-e8b8-4ab6-b09d-8722e35e65dc" }, "track": "KASAN", "fuzz": { "focus": [ "kvm", "net" ], "focus_symbols": [ "virtio_transport_collapse_rx_queue", "virtio_transport_collapse_size", "virtio_transport_can_collapse" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZTT0NLRVRTJiMzNDssCiAgICAmIzM0O1ZJUlRJT19WU09DS0VUUyYjMzQ7LAogICAgJiMzNDtWSE9TVF9WU09DSyYjMzQ7LAogICAgJiMzNDtWU09DS0VUU19MT09QQkFDSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZpcnRpb190cmFuc3BvcnRfY29sbGFwc2VfcnhfcXVldWUmIzM0OywKICAgICYjMzQ7dmlydGlvX3RyYW5zcG9ydF9jb2xsYXBzZV9zaXplJiMzNDssCiAgICAmIzM0O3ZpcnRpb190cmFuc3BvcnRfY2FuX2NvbGxhcHNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbWVjaGFuaXNtIHRvIGNvbGxhcHNlIHNtYWxsIHBhY2tldHMgaW4gdGhlIHZpcnRpbyB2c29jayByZWNlaXZlIHF1ZXVlIHRvIHByZXZlbnQgY29ubmVjdGlvbiByZXNldHMgdW5kZXIgbWVtb3J5IHByZXNzdXJlLiBJdCBtb2RpZmllcyBjb3JlIHZzb2NrIHZpcnRpbyB0cmFuc3BvcnQgbG9naWMgd2hpY2ggaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3bHkgYWRkZWQgY29sbGFwc2UgZnVuY3Rpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjI5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZmE1ODk5ZmVkYWZkYzdiZWE4YjAyM2ExYWU2MzQwNGI0MzAyODg4OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVuIDI2IDE4OjI5OjM0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYyBiL25ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uY1xuaW5kZXggMDk0NzUwMDcxNjViMzYuLjMwNGVhNDI0OTk1ZDRkIDEwMDY0NFxuLS0tIGEvbmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNcbkBAIC00MjAsNiAmIzQzOzQyMCwxMzcgQEAgc3RhdGljIGludCB2aXJ0aW9fdHJhbnNwb3J0X3NlbmRfcGt0X2luZm8oc3RydWN0IHZzb2NrX3NvY2sgKnZzayxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCB2aXJ0aW9fdHJhbnNwb3J0X2Nhbl9jb2xsYXBzZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiM0MztcdFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdC8qIHNrYnMgdGhhdCBhcmUgcGFydGlhbGx5IGNvbnN1bWVkLCBtYXJrIGEgU0VRUEFDS0VUIG1lc3NhZ2UgYm91bmRhcnksXG4mIzQzO1x0ICogb3IgYXJlIGFscmVhZHkgbGFyZ2UgZW5vdWdoIHNob3VsZCBub3QgYmUgY29sbGFwc2VkOiB0aGV5IGVpdGhlclxuJiM0MztcdCAqIG5lZWQgc3BlY2lhbCBhY2NvdW50aW5nLCBjYXJyeSBwcm90b2NvbCBzdGF0ZSwgb3IgYWxyZWFkeSBoYXZlIGFcbiYjNDM7XHQgKiBnb29kIGRhdGEtdG8tb3ZlcmhlYWQgcmF0aW8uXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKFZJUlRJT19WU09DS19TS0JfQ0Ioc2tiKS1cdTAwM2VvZmZzZXQpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0aWYgKGxlMzJfdG9fY3B1KHZpcnRpb192c29ja19oZHIoc2tiKS1cdTAwM2VmbGFncykgXHUwMDI2IFZJUlRJT19WU09DS19TRVFfRU9NKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzZT0gc2l6ZSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogSXRlcmF0ZSB0aHJvdWdoIHRoZSBwYWNrZXRzIGluIHRoZSBxdWV1ZSBzdGFydGluZyBmcm9tIHRoZSBjdXJyZW50IHNrYiB0b1xuJiM0MzsgKiBjb3VudCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdlIGNhbiBjb2xsYXBzZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnRcbiYjNDM7dmlydGlvX3RyYW5zcG9ydF9jb2xsYXBzZV9zaXplKHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpxdWV1ZSxcbiYjNDM7XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBtYXhfc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCB0YXJnZXQgPSBza2ItXHUwMDNlbGVuIC0gVklSVElPX1ZTT0NLX1NLQl9DQihza2IpLVx1MDAzZW9mZnNldDtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKChza2IgPSBza2JfcGVla19uZXh0KHNrYiwgcXVldWUpKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgdmlydGlvX3RyYW5zcG9ydF9jYW5fY29sbGFwc2Uoc2tiLCBtYXhfc2l6ZSkpIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBsZW4gPSBza2ItXHUwMDNlbGVuIC0gVklSVElPX1ZTT0NLX1NLQl9DQihza2IpLVx1MDAzZW9mZnNldDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobGVuIFx1MDAzZSBtYXhfc2l6ZSAtIHRhcmdldClcbiYjNDM7XHRcdFx0cmV0dXJuIHRhcmdldDtcbiYjNDM7XG4mIzQzO1x0XHR0YXJnZXQgJiM0Mzs9IGxlbjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiB0YXJnZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIENhbGxlZCB1bmRlciBsb2NrX3NvY2sgd2hlbiBza2Igb3ZlcmhlYWQgZXhjZWVkcyB0aGUgYnVkZ2V0LiAqL1xuJiM0MztzdGF0aWMgdm9pZCB2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3J4X3F1ZXVlKHN0cnVjdCB2aXJ0aW9fdnNvY2tfc29jayAqdnZzKVxuJiM0Mzt7XG4mIzQzO1x0LyogVXNlIHRoZSBzYW1lIGxpbmVhciBhbGxvY2F0aW9uIHRocmVzaG9sZCBhcyB2aXJ0aW9fdnNvY2tfYWxsb2Nfc2tiKClcbiYjNDM7XHQgKiB0byBhdm9pZCBhZGRpbmcgcHJlc3N1cmUgb24gdGhlIHBhZ2UgYWxsb2NhdG9yLlxuJiM0MztcdCAqL1xuJiM0MztcdHVuc2lnbmVkIGludCBjb2xsYXBzZV9tYXggPSBTS0JfTUFYX09SREVSKFZJUlRJT19WU09DS19TS0JfSEVBRFJPT00sXG4mIzQzO1x0XHRcdFx0XHRcdCAgUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpO1xuJiM0MztcdHN0cnVjdCBza19idWZmICpza2IsICpuZXh0X3NrYiwgKm5ld19za2IgPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBza19idWZmX2hlYWQgbmV3X3F1ZXVlO1xuJiM0MztcbiYjNDM7XHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2bmV3X3F1ZXVlKTtcbiYjNDM7XG4mIzQzO1x0c2tiX3F1ZXVlX3dhbGtfc2FmZShcdTAwMjZ2dnMtXHUwMDNlcnhfcXVldWUsIHNrYiwgbmV4dF9za2IpIHtcbiYjNDM7XHRcdHN0cnVjdCB2aXJ0aW9fdnNvY2tfaGRyICpoZHIgPSB2aXJ0aW9fdnNvY2tfaGRyKHNrYik7XG4mIzQzO1x0XHR1MzIgc3JjX29mZiA9IFZJUlRJT19WU09DS19TS0JfQ0Ioc2tiKS1cdTAwM2VvZmZzZXQ7XG4mIzQzO1x0XHR1MzIgc3JjX2xlbiA9IHNrYi1cdTAwM2VsZW4gLSBzcmNfb2ZmO1xuJiM0MztcdFx0Ym9vbCBrZWVwID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCF2aXJ0aW9fdHJhbnNwb3J0X2Nhbl9jb2xsYXBzZShza2IsIGNvbGxhcHNlX21heCkpIHtcbiYjNDM7XHRcdFx0LyogRmluYWxpemUgcGVuZGluZyBjb2xsYXBzZWQgc2tiIHRvIHByZXNlcnZlIHBhY2tldFxuJiM0MztcdFx0XHQgKiBvcmRlcmluZy5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGlmIChuZXdfc2tiKSB7XG4mIzQzO1x0XHRcdFx0X19za2JfcXVldWVfdGFpbChcdTAwMjZuZXdfcXVldWUsIG5ld19za2IpO1xuJiM0MztcdFx0XHRcdG5ld19za2IgPSBOVUxMO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGtlZXAgPSB0cnVlO1xuJiM0MztcdFx0XHRnb3RvIG5leHQ7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0LyogRmluYWxpemUgaWYgdGhpcyBwYWNrZXQgd29uJiMzOTt0IGZpdCBpbiB0aGUgcmVtYWluaW5nIHRhaWxyb29tLFxuJiM0MztcdFx0ICogc28gd2UgY2FuIGFsbG9jYXRlIGEgcmlnaHQtc2l6ZWQgbmV3X3NrYi5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKG5ld19za2IgXHUwMDI2XHUwMDI2IHNyY19sZW4gXHUwMDNlIHNrYl90YWlscm9vbShuZXdfc2tiKSkge1xuJiM0MztcdFx0XHRfX3NrYl9xdWV1ZV90YWlsKFx1MDAyNm5ld19xdWV1ZSwgbmV3X3NrYik7XG4mIzQzO1x0XHRcdG5ld19za2IgPSBOVUxMO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmICghbmV3X3NrYikge1xuJiM0MztcdFx0XHR1bnNpZ25lZCBpbnQgYWxsb2Nfc2l6ZTtcbiYjNDM7XG4mIzQzO1x0XHRcdGFsbG9jX3NpemUgPSB2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3NpemUoc2tiLCBcdTAwMjZ2dnMtXHUwMDNlcnhfcXVldWUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHQgICAgY29sbGFwc2VfbWF4KTtcbiYjNDM7XG4mIzQzO1x0XHRcdC8qIE9ubHkgdGhpcyBza2ImIzM5O3MgZGF0YSBpcyBlbGlnaWJsZSwgbm90aGluZyB0byBtZXJnZVxuJiM0MztcdFx0XHQgKiB3aXRoLiBLZWVwIGFzLWlzLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aWYgKGFsbG9jX3NpemUgXHUwMDNjPSBzcmNfbGVuKSB7XG4mIzQzO1x0XHRcdFx0a2VlcCA9IHRydWU7XG4mIzQzO1x0XHRcdFx0Z290byBuZXh0O1xuJiM0MztcdFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0XHRuZXdfc2tiID0gdmlydGlvX3Zzb2NrX2FsbG9jX2xpbmVhcl9za2IoYWxsb2Nfc2l6ZSAmIzQzO1xuJiM0MztcdFx0XHRcdFx0VklSVElPX1ZTT0NLX1NLQl9IRUFEUk9PTSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0XHRcdGlmICghbmV3X3NrYilcbiYjNDM7XHRcdFx0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0XHRcdG1lbWNweSh2aXJ0aW9fdnNvY2tfaGRyKG5ld19za2IpLCBoZHIsXG4mIzQzO1x0XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IHZpcnRpb192c29ja19oZHIpKTtcbiYjNDM7XHRcdFx0dmlydGlvX3Zzb2NrX2hkcihuZXdfc2tiKS1cdTAwM2VsZW4gPSAwO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdC8qIENhbm5vdCBmYWlsIHNpbmNlIHNyY19vZmYvc3JjX2xlbiBhcmUgd2l0aGluIGJvdW5kcywgYnV0IGlmXG4mIzQzO1x0XHQgKiBpdCBkb2VzLCBkaXNjYXJkIG5ld19za2IgdG8gYXZvaWQgcXVldWluZyBjb3JydXB0ZWQgZGF0YS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKFdBUk5fT05fT05DRShza2JfY29weV9iaXRzKHNrYiwgc3JjX29mZixcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBza2JfcHV0KG5ld19za2IsIHNyY19sZW4pLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHNyY19sZW4pKSkge1xuJiM0MztcdFx0XHRrZnJlZV9za2IobmV3X3NrYik7XG4mIzQzO1x0XHRcdG5ld19za2IgPSBOVUxMO1xuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRsZTMyX2FkZF9jcHUoXHUwMDI2dmlydGlvX3Zzb2NrX2hkcihuZXdfc2tiKS1cdTAwM2VsZW4sIHNyY19sZW4pO1xuJiM0MztcdFx0dmlydGlvX3Zzb2NrX2hkcihuZXdfc2tiKS1cdTAwM2VmbGFncyB8PSBoZHItXHUwMDNlZmxhZ3M7XG4mIzQzO1xuJiM0MztuZXh0OlxuJiM0MztcdFx0X19za2JfdW5saW5rKHNrYiwgXHUwMDI2dnZzLVx1MDAzZXJ4X3F1ZXVlKTtcbiYjNDM7XHRcdGlmIChrZWVwKVxuJiM0MztcdFx0XHRfX3NrYl9xdWV1ZV90YWlsKFx1MDAyNm5ld19xdWV1ZSwgc2tiKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbiYjNDM7XHR9XG4mIzQzO291dDpcbiYjNDM7XHRpZiAobmV3X3NrYilcbiYjNDM7XHRcdF9fc2tiX3F1ZXVlX3RhaWwoXHUwMDI2bmV3X3F1ZXVlLCBuZXdfc2tiKTtcbiYjNDM7XG4mIzQzO1x0c2tiX3F1ZXVlX3NwbGljZShcdTAwMjZuZXdfcXVldWUsIFx1MDAyNnZ2cy1cdTAwM2VyeF9xdWV1ZSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGJvb2wgdmlydGlvX3RyYW5zcG9ydF9pbmNfcnhfcGt0KHN0cnVjdCB2aXJ0aW9fdnNvY2tfc29jayAqdnZzLFxuIFx0XHRcdFx0XHR1MzIgbGVuKVxuIHtcbkBAIC0xMzYzLDggJiM0MzsxNDk0LDIxIEBAIHZpcnRpb190cmFuc3BvcnRfcmVjdl9lbnF1ZXVlKHN0cnVjdCB2c29ja19zb2NrICp2c2ssXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2dnZzLVx1MDAzZXJ4X2xvY2spO1xuIFxuIFx0Y2FuX2VucXVldWUgPSB2aXJ0aW9fdHJhbnNwb3J0X2luY19yeF9wa3QodnZzLCBsZW4pO1xuLVx0aWYgKCFjYW5fZW5xdWV1ZSlcbi1cdFx0Z290byBvdXQ7XG4mIzQzO1x0aWYgKCFjYW5fZW5xdWV1ZSkge1xuJiM0MztcdFx0LyogVHJ5IHRvIGNvbGxhcHNlIHRoZSByZWNlaXZlIHF1ZXVlIHRvIHJlZHVjZSBza2Igb3ZlcmhlYWQgYW5kXG4mIzQzO1x0XHQgKiBtYWtlIHJvb20gZm9yIHRoaXMgcGFja2V0LlxuJiM0MztcdFx0ICogVW5sb2NrIHJ4X2xvY2sgc2luY2UgdGhlIGNvbGxhcHNlIG1heSBzbGVlcCBvciwgaW4gYW55IGNhc2UsXG4mIzQzO1x0XHQgKiB0YWtlIHNvbWUgdGltZSB0byBjb2xsYXBzZSB0aGUgc2ticywgYnV0IHRoaXMgaXMgc2FmZSwgc2luY2VcbiYjNDM7XHRcdCAqIHNrX2xvY2sgaXMgaGVsZCBieSBjYWxsZXIgc28gbm8gb25lIGVsc2UgY2FuIGVucXVldWUgb3JcbiYjNDM7XHRcdCAqIGRlcXVldWUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnZ2cy1cdTAwM2VyeF9sb2NrKTtcbiYjNDM7XHRcdHZpcnRpb190cmFuc3BvcnRfY29sbGFwc2VfcnhfcXVldWUodnZzKTtcbiYjNDM7XHRcdHNwaW5fbG9ja19iaChcdTAwMjZ2dnMtXHUwMDNlcnhfbG9jayk7XG4mIzQzO1x0XHRjYW5fZW5xdWV1ZSA9IHZpcnRpb190cmFuc3BvcnRfaW5jX3J4X3BrdCh2dnMsIGxlbik7XG4mIzQzO1x0XHRpZiAoIWNhbl9lbnF1ZXVlKVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4gXG4gXHRpZiAobGUzMl90b19jcHUoaGRyLVx1MDAzZWZsYWdzKSBcdTAwMjYgVklSVElPX1ZTT0NLX1NFUV9FT00pXG4gXHRcdHZ2cy1cdTAwM2Vtc2dfY291bnQmIzQzOyYjNDM7O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3RpbmcvdnNvY2svdnNvY2tfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy92c29jay92c29ja190ZXN0LmNcbmluZGV4IDc2YmUwZTRhN2YwZWU2Li5iNGZmOWY5NDY1NjViOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3RpbmcvdnNvY2svdnNvY2tfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3Zzb2NrL3Zzb2NrX3Rlc3QuY1xuQEAgLTIzNDcsNiAmIzQzOzIzNDcsODggQEAgc3RhdGljIHZvaWQgdGVzdF9zdHJlYW1fdHhfY3JlZGl0X2JvdW5kc19zZXJ2ZXIoY29uc3Qgc3RydWN0IHRlc3Rfb3B0cyAqb3B0cylcbiBcdGNsb3NlKGZkKTtcbiB9XG4gXG4mIzQzOy8qIFRlc3QgdGhhdCBtYW55IHNtYWxsIHBhY2tldHMgZG9uJiMzOTt0IGNhdXNlIGEgY29ubmVjdGlvbiByZXNldCB1bmRlciBwcmVzc3VyZVxuJiM0MzsgKiBhbmQgdGhhdCBkYXRhIGludGVncml0eSBpcyBwcmVzZXJ2ZWQuICBQYWNrZXQgc2l6ZXMgdmFyeSByYW5kb21seSBiZXR3ZWVuXG4mIzQzOyAqIDEyOSBhbmQgNTEyIGJ5dGVzLCBhYm92ZSBHT09EX0NPUFlfTEVOICgxMjgpIHRvIGJ5cGFzcyBpbi1wbGFjZSBjb2FsZXNjaW5nXG4mIzQzOyAqIGluIHJlY3ZfZW5xdWV1ZSwgZm9yY2luZyBlYWNoIG9uZSBpbnRvIGl0cyBvd24gc2tiLiAgV2l0aG91dCByZWNlaXZlIHF1ZXVlXG4mIzQzOyAqIGNvbGxhcHNpbmcsIHRoZSBwZXItc2tiIG92ZXJoZWFkIGV2ZW50dWFsbHkgZXhjZWVkcyBidWZfYWxsb2MgYW5kIHRoZVxuJiM0MzsgKiBjb25uZWN0aW9uIGlzIHJlc2V0LlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBDT0xMQVBTRV9QS1RfTUlOIDEyOVxuJiM0MzsjZGVmaW5lIENPTExBUFNFX1BLVF9NQVggNTEyXG4mIzQzOyNkZWZpbmUgQ09MTEFQU0VfVE9UQUwgKDIgKiAxMDI0ICogMTAyNClcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3Rfc3RyZWFtX2NvbGxhcHNlX2NsaWVudChjb25zdCBzdHJ1Y3QgdGVzdF9vcHRzICpvcHRzKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgY2hhciAqZGF0YTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGhhc2g7XG4mIzQzO1x0c2l6ZV90IG9mZnNldCA9IDA7XG4mIzQzO1x0aW50IGksIGZkO1xuJiM0MztcbiYjNDM7XHRkYXRhID0gbWFsbG9jKENPTExBUFNFX1RPVEFMKTtcbiYjNDM7XHRpZiAoIWRhdGEpIHtcbiYjNDM7XHRcdHBlcnJvcihcJiMzNDttYWxsb2NcJiMzNDspO1xuJiM0MztcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ09MTEFQU0VfVE9UQUw7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0ZGF0YVtpXSA9IHJhbmQoKSBcdTAwMjYgMHhmZjtcbiYjNDM7XG4mIzQzO1x0ZmQgPSB2c29ja19zdHJlYW1fY29ubmVjdChvcHRzLVx1MDAzZXBlZXJfY2lkLCBvcHRzLVx1MDAzZXBlZXJfcG9ydCk7XG4mIzQzO1x0aWYgKGZkIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRwZXJyb3IoXCYjMzQ7Y29ubmVjdFwmIzM0Oyk7XG4mIzQzO1x0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR3aGlsZSAob2Zmc2V0IFx1MDAzYyBDT0xMQVBTRV9UT1RBTCkge1xuJiM0MztcdFx0c2l6ZV90IHBrdF9zaXplID0gQ09MTEFQU0VfUEtUX01JTiAmIzQzO1xuJiM0MztcdFx0XHRyYW5kKCkgJSAoQ09MTEFQU0VfUEtUX01BWCAtIENPTExBUFNFX1BLVF9NSU4gJiM0MzsgMSk7XG4mIzQzO1xuJiM0MztcdFx0cGt0X3NpemUgPSBtaW4ocGt0X3NpemUsIENPTExBUFNFX1RPVEFMIC0gb2Zmc2V0KTtcbiYjNDM7XG4mIzQzO1x0XHRzZW5kX2J1ZihmZCwgZGF0YSAmIzQzOyBvZmZzZXQsIHBrdF9zaXplLCAwLCBwa3Rfc2l6ZSk7XG4mIzQzO1x0XHRvZmZzZXQgJiM0Mzs9IHBrdF9zaXplO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aGFzaCA9IGhhc2hfZGpiMihkYXRhLCBDT0xMQVBTRV9UT1RBTCk7XG4mIzQzO1x0Y29udHJvbF93cml0ZXVsb25nKGhhc2gpO1xuJiM0MztcbiYjNDM7XHRmcmVlKGRhdGEpO1xuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9zdHJlYW1fY29sbGFwc2Vfc2VydmVyKGNvbnN0IHN0cnVjdCB0ZXN0X29wdHMgKm9wdHMpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGhhc2gsIHJlbW90ZV9oYXNoO1xuJiM0MztcdHVuc2lnbmVkIGNoYXIgKmRhdGE7XG4mIzQzO1x0aW50IGZkO1xuJiM0MztcbiYjNDM7XHRkYXRhID0gbWFsbG9jKENPTExBUFNFX1RPVEFMKTtcbiYjNDM7XHRpZiAoIWRhdGEpIHtcbiYjNDM7XHRcdHBlcnJvcihcJiMzNDttYWxsb2NcJiMzNDspO1xuJiM0MztcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZmQgPSB2c29ja19zdHJlYW1fYWNjZXB0KFZNQUREUl9DSURfQU5ZLCBvcHRzLVx1MDAzZXBlZXJfcG9ydCwgTlVMTCk7XG4mIzQzO1x0aWYgKGZkIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRwZXJyb3IoXCYjMzQ7YWNjZXB0XCYjMzQ7KTtcbiYjNDM7XHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJlY3ZfYnVmKGZkLCBkYXRhLCBDT0xMQVBTRV9UT1RBTCwgMCwgQ09MTEFQU0VfVE9UQUwpO1xuJiM0MztcbiYjNDM7XHRoYXNoID0gaGFzaF9kamIyKGRhdGEsIENPTExBUFNFX1RPVEFMKTtcbiYjNDM7XHRyZW1vdGVfaGFzaCA9IGNvbnRyb2xfcmVhZHVsb25nKCk7XG4mIzQzO1x0aWYgKGhhc2ggIT0gcmVtb3RlX2hhc2gpIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtoYXNoIG1pc21hdGNoOiBsb2NhbCAlbHUgcmVtb3RlICVsdVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0aGFzaCwgcmVtb3RlX2hhc2gpO1xuJiM0MztcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZnJlZShkYXRhKTtcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCB0ZXN0X2Nhc2UgdGVzdF9jYXNlc1tdID0ge1xuIFx0e1xuIFx0XHQubmFtZSA9IFwmIzM0O1NPQ0tfU1RSRUFNIGNvbm5lY3Rpb24gcmVzZXRcJiMzNDssXG5AQCAtMjU0Niw2ICYjNDM7MjYyOCwxMSBAQCBzdGF0aWMgc3RydWN0IHRlc3RfY2FzZSB0ZXN0X2Nhc2VzW10gPSB7XG4gXHRcdC5ydW5fY2xpZW50ID0gdGVzdF9zdHJlYW1fbXNnX3BlZWtfY2xpZW50LFxuIFx0XHQucnVuX3NlcnZlciA9IHRlc3Rfc3RyZWFtX3BlZWtfYWZ0ZXJfcmVjdl9zZXJ2ZXIsXG4gXHR9LFxuJiM0MztcdHtcbiYjNDM7XHRcdC5uYW1lID0gXCYjMzQ7U09DS19TVFJFQU0gc21hbGwgcGFja2V0cyBiYWNrcHJlc3N1cmVcJiMzNDssXG4mIzQzO1x0XHQucnVuX2NsaWVudCA9IHRlc3Rfc3RyZWFtX2NvbGxhcHNlX2NsaWVudCxcbiYjNDM7XHRcdC5ydW5fc2VydmVyID0gdGVzdF9zdHJlYW1fY29sbGFwc2Vfc2VydmVyLFxuJiM0MztcdH0sXG4gXHR7fSxcbiB9O1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjI5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZTT0NLRVRTJiMzNDssCiAgICAmIzM0O1ZJUlRJT19WU09DS0VUUyYjMzQ7LAogICAgJiMzNDtWSE9TVF9WU09DSyYjMzQ7LAogICAgJiMzNDtWU09DS0VUU19MT09QQkFDSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZpcnRpb190cmFuc3BvcnRfY29sbGFwc2VfcnhfcXVldWUmIzM0OywKICAgICYjMzQ7dmlydGlvX3RyYW5zcG9ydF9jb2xsYXBzZV9zaXplJiMzNDssCiAgICAmIzM0O3ZpcnRpb190cmFuc3BvcnRfY2FuX2NvbGxhcHNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbWVjaGFuaXNtIHRvIGNvbGxhcHNlIHNtYWxsIHBhY2tldHMgaW4gdGhlIHZpcnRpbyB2c29jayByZWNlaXZlIHF1ZXVlIHRvIHByZXZlbnQgY29ubmVjdGlvbiByZXNldHMgdW5kZXIgbWVtb3J5IHByZXNzdXJlLiBJdCBtb2RpZmllcyBjb3JlIHZzb2NrIHZpcnRpbyB0cmFuc3BvcnQgbG9naWMgd2hpY2ggaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3bHkgYWRkZWQgY29sbGFwc2UgZnVuY3Rpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmYTU4OTlmZWRhZmRjN2JlYThiMDIzYTFhZTYzNDA0YjQzMDI4ODg4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdW4gMjYgMTg6Mjk6MzQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMgYi9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMKaW5kZXggMDk0NzUwMDcxNjViMzYuLjMwNGVhNDI0OTk1ZDRkIDEwMDY0NAotLS0gYS9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jCkBAIC00MjAsNiAmIzQzOzQyMCwxMzcgQEAgc3RhdGljIGludCB2aXJ0aW9fdHJhbnNwb3J0X3NlbmRfcGt0X2luZm8oc3RydWN0IHZzb2NrX3NvY2sgKnZzaywKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7c3RhdGljIGJvb2wgdmlydGlvX3RyYW5zcG9ydF9jYW5fY29sbGFwc2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkJCSAgdW5zaWduZWQgaW50IHNpemUpCiYjNDM7ewomIzQzOwkvKiBza2JzIHRoYXQgYXJlIHBhcnRpYWxseSBjb25zdW1lZCwgbWFyayBhIFNFUVBBQ0tFVCBtZXNzYWdlIGJvdW5kYXJ5LAomIzQzOwkgKiBvciBhcmUgYWxyZWFkeSBsYXJnZSBlbm91Z2ggc2hvdWxkIG5vdCBiZSBjb2xsYXBzZWQ6IHRoZXkgZWl0aGVyCiYjNDM7CSAqIG5lZWQgc3BlY2lhbCBhY2NvdW50aW5nLCBjYXJyeSBwcm90b2NvbCBzdGF0ZSwgb3IgYWxyZWFkeSBoYXZlIGEKJiM0MzsJICogZ29vZCBkYXRhLXRvLW92ZXJoZWFkIHJhdGlvLgomIzQzOwkgKi8KJiM0MzsJaWYgKFZJUlRJT19WU09DS19TS0JfQ0Ioc2tiKS0mZ3Q7b2Zmc2V0KQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwlpZiAobGUzMl90b19jcHUodmlydGlvX3Zzb2NrX2hkcihza2IpLSZndDtmbGFncykgJmFtcDsgVklSVElPX1ZTT0NLX1NFUV9FT00pCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CWlmIChza2ItJmd0O2xlbiAmZ3Q7PSBzaXplKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogSXRlcmF0ZSB0aHJvdWdoIHRoZSBwYWNrZXRzIGluIHRoZSBxdWV1ZSBzdGFydGluZyBmcm9tIHRoZSBjdXJyZW50IHNrYiB0bwomIzQzOyAqIGNvdW50IHRoZSBudW1iZXIgb2YgYnl0ZXMgd2UgY2FuIGNvbGxhcHNlLgomIzQzOyAqLwomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQKJiM0Mzt2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3NpemUoc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkgICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqcXVldWUsCiYjNDM7CQkJICAgICAgIHVuc2lnbmVkIGludCBtYXhfc2l6ZSkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCB0YXJnZXQgPSBza2ItJmd0O2xlbiAtIFZJUlRJT19WU09DS19TS0JfQ0Ioc2tiKS0mZ3Q7b2Zmc2V0OwomIzQzOwomIzQzOwl3aGlsZSAoKHNrYiA9IHNrYl9wZWVrX25leHQoc2tiLCBxdWV1ZSkpICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIHZpcnRpb190cmFuc3BvcnRfY2FuX2NvbGxhcHNlKHNrYiwgbWF4X3NpemUpKSB7CiYjNDM7CQl1bnNpZ25lZCBpbnQgbGVuID0gc2tiLSZndDtsZW4gLSBWSVJUSU9fVlNPQ0tfU0tCX0NCKHNrYiktJmd0O29mZnNldDsKJiM0MzsKJiM0MzsJCWlmIChsZW4gJmd0OyBtYXhfc2l6ZSAtIHRhcmdldCkKJiM0MzsJCQlyZXR1cm4gdGFyZ2V0OwomIzQzOwomIzQzOwkJdGFyZ2V0ICYjNDM7PSBsZW47CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHRhcmdldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQ2FsbGVkIHVuZGVyIGxvY2tfc29jayB3aGVuIHNrYiBvdmVyaGVhZCBleGNlZWRzIHRoZSBidWRnZXQuICovCiYjNDM7c3RhdGljIHZvaWQgdmlydGlvX3RyYW5zcG9ydF9jb2xsYXBzZV9yeF9xdWV1ZShzdHJ1Y3QgdmlydGlvX3Zzb2NrX3NvY2sgKnZ2cykKJiM0Mzt7CiYjNDM7CS8qIFVzZSB0aGUgc2FtZSBsaW5lYXIgYWxsb2NhdGlvbiB0aHJlc2hvbGQgYXMgdmlydGlvX3Zzb2NrX2FsbG9jX3NrYigpCiYjNDM7CSAqIHRvIGF2b2lkIGFkZGluZyBwcmVzc3VyZSBvbiB0aGUgcGFnZSBhbGxvY2F0b3IuCiYjNDM7CSAqLwomIzQzOwl1bnNpZ25lZCBpbnQgY29sbGFwc2VfbWF4ID0gU0tCX01BWF9PUkRFUihWSVJUSU9fVlNPQ0tfU0tCX0hFQURST09NLAomIzQzOwkJCQkJCSAgUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpOwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqbmV4dF9za2IsICpuZXdfc2tiID0gTlVMTDsKJiM0MzsJc3RydWN0IHNrX2J1ZmZfaGVhZCBuZXdfcXVldWU7CiYjNDM7CiYjNDM7CV9fc2tiX3F1ZXVlX2hlYWRfaW5pdCgmYW1wO25ld19xdWV1ZSk7CiYjNDM7CiYjNDM7CXNrYl9xdWV1ZV93YWxrX3NhZmUoJmFtcDt2dnMtJmd0O3J4X3F1ZXVlLCBza2IsIG5leHRfc2tiKSB7CiYjNDM7CQlzdHJ1Y3QgdmlydGlvX3Zzb2NrX2hkciAqaGRyID0gdmlydGlvX3Zzb2NrX2hkcihza2IpOwomIzQzOwkJdTMyIHNyY19vZmYgPSBWSVJUSU9fVlNPQ0tfU0tCX0NCKHNrYiktJmd0O29mZnNldDsKJiM0MzsJCXUzMiBzcmNfbGVuID0gc2tiLSZndDtsZW4gLSBzcmNfb2ZmOwomIzQzOwkJYm9vbCBrZWVwID0gZmFsc2U7CiYjNDM7CiYjNDM7CQlpZiAoIXZpcnRpb190cmFuc3BvcnRfY2FuX2NvbGxhcHNlKHNrYiwgY29sbGFwc2VfbWF4KSkgewomIzQzOwkJCS8qIEZpbmFsaXplIHBlbmRpbmcgY29sbGFwc2VkIHNrYiB0byBwcmVzZXJ2ZSBwYWNrZXQKJiM0MzsJCQkgKiBvcmRlcmluZy4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAobmV3X3NrYikgewomIzQzOwkJCQlfX3NrYl9xdWV1ZV90YWlsKCZhbXA7bmV3X3F1ZXVlLCBuZXdfc2tiKTsKJiM0MzsJCQkJbmV3X3NrYiA9IE5VTEw7CiYjNDM7CQkJfQomIzQzOwkJCWtlZXAgPSB0cnVlOwomIzQzOwkJCWdvdG8gbmV4dDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCS8qIEZpbmFsaXplIGlmIHRoaXMgcGFja2V0IHdvbiYjMzk7dCBmaXQgaW4gdGhlIHJlbWFpbmluZyB0YWlscm9vbSwKJiM0MzsJCSAqIHNvIHdlIGNhbiBhbGxvY2F0ZSBhIHJpZ2h0LXNpemVkIG5ld19za2IuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChuZXdfc2tiICZhbXA7JmFtcDsgc3JjX2xlbiAmZ3Q7IHNrYl90YWlscm9vbShuZXdfc2tiKSkgewomIzQzOwkJCV9fc2tiX3F1ZXVlX3RhaWwoJmFtcDtuZXdfcXVldWUsIG5ld19za2IpOwomIzQzOwkJCW5ld19za2IgPSBOVUxMOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKCFuZXdfc2tiKSB7CiYjNDM7CQkJdW5zaWduZWQgaW50IGFsbG9jX3NpemU7CiYjNDM7CiYjNDM7CQkJYWxsb2Nfc2l6ZSA9IHZpcnRpb190cmFuc3BvcnRfY29sbGFwc2Vfc2l6ZShza2IsICZhbXA7dnZzLSZndDtyeF9xdWV1ZSwKJiM0MzsJCQkJCQkJCSAgICBjb2xsYXBzZV9tYXgpOwomIzQzOwomIzQzOwkJCS8qIE9ubHkgdGhpcyBza2ImIzM5O3MgZGF0YSBpcyBlbGlnaWJsZSwgbm90aGluZyB0byBtZXJnZQomIzQzOwkJCSAqIHdpdGguIEtlZXAgYXMtaXMuCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKGFsbG9jX3NpemUgJmx0Oz0gc3JjX2xlbikgewomIzQzOwkJCQlrZWVwID0gdHJ1ZTsKJiM0MzsJCQkJZ290byBuZXh0OwomIzQzOwkJCX0KJiM0MzsKJiM0MzsJCQluZXdfc2tiID0gdmlydGlvX3Zzb2NrX2FsbG9jX2xpbmVhcl9za2IoYWxsb2Nfc2l6ZSAmIzQzOwomIzQzOwkJCQkJVklSVElPX1ZTT0NLX1NLQl9IRUFEUk9PTSwgR0ZQX0tFUk5FTCk7CiYjNDM7CQkJaWYgKCFuZXdfc2tiKQomIzQzOwkJCQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJCQltZW1jcHkodmlydGlvX3Zzb2NrX2hkcihuZXdfc2tiKSwgaGRyLAomIzQzOwkJCSAgICAgICBzaXplb2Yoc3RydWN0IHZpcnRpb192c29ja19oZHIpKTsKJiM0MzsJCQl2aXJ0aW9fdnNvY2tfaGRyKG5ld19za2IpLSZndDtsZW4gPSAwOwomIzQzOwkJfQomIzQzOwomIzQzOwkJLyogQ2Fubm90IGZhaWwgc2luY2Ugc3JjX29mZi9zcmNfbGVuIGFyZSB3aXRoaW4gYm91bmRzLCBidXQgaWYKJiM0MzsJCSAqIGl0IGRvZXMsIGRpc2NhcmQgbmV3X3NrYiB0byBhdm9pZCBxdWV1aW5nIGNvcnJ1cHRlZCBkYXRhLgomIzQzOwkJICovCiYjNDM7CQlpZiAoV0FSTl9PTl9PTkNFKHNrYl9jb3B5X2JpdHMoc2tiLCBzcmNfb2ZmLAomIzQzOwkJCQkJICAgICAgIHNrYl9wdXQobmV3X3NrYiwgc3JjX2xlbiksCiYjNDM7CQkJCQkgICAgICAgc3JjX2xlbikpKSB7CiYjNDM7CQkJa2ZyZWVfc2tiKG5ld19za2IpOwomIzQzOwkJCW5ld19za2IgPSBOVUxMOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQomIzQzOwomIzQzOwkJbGUzMl9hZGRfY3B1KCZhbXA7dmlydGlvX3Zzb2NrX2hkcihuZXdfc2tiKS0mZ3Q7bGVuLCBzcmNfbGVuKTsKJiM0MzsJCXZpcnRpb192c29ja19oZHIobmV3X3NrYiktJmd0O2ZsYWdzIHw9IGhkci0mZ3Q7ZmxhZ3M7CiYjNDM7CiYjNDM7bmV4dDoKJiM0MzsJCV9fc2tiX3VubGluayhza2IsICZhbXA7dnZzLSZndDtyeF9xdWV1ZSk7CiYjNDM7CQlpZiAoa2VlcCkKJiM0MzsJCQlfX3NrYl9xdWV1ZV90YWlsKCZhbXA7bmV3X3F1ZXVlLCBza2IpOwomIzQzOwkJZWxzZQomIzQzOwkJCWNvbnN1bWVfc2tiKHNrYik7CiYjNDM7CX0KJiM0MztvdXQ6CiYjNDM7CWlmIChuZXdfc2tiKQomIzQzOwkJX19za2JfcXVldWVfdGFpbCgmYW1wO25ld19xdWV1ZSwgbmV3X3NrYik7CiYjNDM7CiYjNDM7CXNrYl9xdWV1ZV9zcGxpY2UoJmFtcDtuZXdfcXVldWUsICZhbXA7dnZzLSZndDtyeF9xdWV1ZSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGJvb2wgdmlydGlvX3RyYW5zcG9ydF9pbmNfcnhfcGt0KHN0cnVjdCB2aXJ0aW9fdnNvY2tfc29jayAqdnZzLAogCQkJCQl1MzIgbGVuKQogewpAQCAtMTM2Myw4ICYjNDM7MTQ5NCwyMSBAQCB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfZW5xdWV1ZShzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLAogCXNwaW5fbG9ja19iaCgmYW1wO3Z2cy0mZ3Q7cnhfbG9jayk7CiAKIAljYW5fZW5xdWV1ZSA9IHZpcnRpb190cmFuc3BvcnRfaW5jX3J4X3BrdCh2dnMsIGxlbik7Ci0JaWYgKCFjYW5fZW5xdWV1ZSkKLQkJZ290byBvdXQ7CiYjNDM7CWlmICghY2FuX2VucXVldWUpIHsKJiM0MzsJCS8qIFRyeSB0byBjb2xsYXBzZSB0aGUgcmVjZWl2ZSBxdWV1ZSB0byByZWR1Y2Ugc2tiIG92ZXJoZWFkIGFuZAomIzQzOwkJICogbWFrZSByb29tIGZvciB0aGlzIHBhY2tldC4KJiM0MzsJCSAqIFVubG9jayByeF9sb2NrIHNpbmNlIHRoZSBjb2xsYXBzZSBtYXkgc2xlZXAgb3IsIGluIGFueSBjYXNlLAomIzQzOwkJICogdGFrZSBzb21lIHRpbWUgdG8gY29sbGFwc2UgdGhlIHNrYnMsIGJ1dCB0aGlzIGlzIHNhZmUsIHNpbmNlCiYjNDM7CQkgKiBza19sb2NrIGlzIGhlbGQgYnkgY2FsbGVyIHNvIG5vIG9uZSBlbHNlIGNhbiBlbnF1ZXVlIG9yCiYjNDM7CQkgKiBkZXF1ZXVlLgomIzQzOwkJICovCiYjNDM7CQlzcGluX3VubG9ja19iaCgmYW1wO3Z2cy0mZ3Q7cnhfbG9jayk7CiYjNDM7CQl2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3J4X3F1ZXVlKHZ2cyk7CiYjNDM7CQlzcGluX2xvY2tfYmgoJmFtcDt2dnMtJmd0O3J4X2xvY2spOwomIzQzOwkJY2FuX2VucXVldWUgPSB2aXJ0aW9fdHJhbnNwb3J0X2luY19yeF9wa3QodnZzLCBsZW4pOwomIzQzOwkJaWYgKCFjYW5fZW5xdWV1ZSkKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJfQogCiAJaWYgKGxlMzJfdG9fY3B1KGhkci0mZ3Q7ZmxhZ3MpICZhbXA7IFZJUlRJT19WU09DS19TRVFfRU9NKQogCQl2dnMtJmd0O21zZ19jb3VudCYjNDM7JiM0Mzs7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3Zzb2NrL3Zzb2NrX3Rlc3QuYyBiL3Rvb2xzL3Rlc3RpbmcvdnNvY2svdnNvY2tfdGVzdC5jCmluZGV4IDc2YmUwZTRhN2YwZWU2Li5iNGZmOWY5NDY1NjViOCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy92c29jay92c29ja190ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy92c29jay92c29ja190ZXN0LmMKQEAgLTIzNDcsNiAmIzQzOzIzNDcsODggQEAgc3RhdGljIHZvaWQgdGVzdF9zdHJlYW1fdHhfY3JlZGl0X2JvdW5kc19zZXJ2ZXIoY29uc3Qgc3RydWN0IHRlc3Rfb3B0cyAqb3B0cykKIAljbG9zZShmZCk7CiB9CiAKJiM0MzsvKiBUZXN0IHRoYXQgbWFueSBzbWFsbCBwYWNrZXRzIGRvbiYjMzk7dCBjYXVzZSBhIGNvbm5lY3Rpb24gcmVzZXQgdW5kZXIgcHJlc3N1cmUKJiM0MzsgKiBhbmQgdGhhdCBkYXRhIGludGVncml0eSBpcyBwcmVzZXJ2ZWQuICBQYWNrZXQgc2l6ZXMgdmFyeSByYW5kb21seSBiZXR3ZWVuCiYjNDM7ICogMTI5IGFuZCA1MTIgYnl0ZXMsIGFib3ZlIEdPT0RfQ09QWV9MRU4gKDEyOCkgdG8gYnlwYXNzIGluLXBsYWNlIGNvYWxlc2NpbmcKJiM0MzsgKiBpbiByZWN2X2VucXVldWUsIGZvcmNpbmcgZWFjaCBvbmUgaW50byBpdHMgb3duIHNrYi4gIFdpdGhvdXQgcmVjZWl2ZSBxdWV1ZQomIzQzOyAqIGNvbGxhcHNpbmcsIHRoZSBwZXItc2tiIG92ZXJoZWFkIGV2ZW50dWFsbHkgZXhjZWVkcyBidWZfYWxsb2MgYW5kIHRoZQomIzQzOyAqIGNvbm5lY3Rpb24gaXMgcmVzZXQuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBDT0xMQVBTRV9QS1RfTUlOIDEyOQomIzQzOyNkZWZpbmUgQ09MTEFQU0VfUEtUX01BWCA1MTIKJiM0MzsjZGVmaW5lIENPTExBUFNFX1RPVEFMICgyICogMTAyNCAqIDEwMjQpCiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9zdHJlYW1fY29sbGFwc2VfY2xpZW50KGNvbnN0IHN0cnVjdCB0ZXN0X29wdHMgKm9wdHMpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBjaGFyICpkYXRhOwomIzQzOwl1bnNpZ25lZCBsb25nIGhhc2g7CiYjNDM7CXNpemVfdCBvZmZzZXQgPSAwOwomIzQzOwlpbnQgaSwgZmQ7CiYjNDM7CiYjNDM7CWRhdGEgPSBtYWxsb2MoQ09MTEFQU0VfVE9UQUwpOwomIzQzOwlpZiAoIWRhdGEpIHsKJiM0MzsJCXBlcnJvcigmIzM0O21hbGxvYyYjMzQ7KTsKJiM0MzsJCWV4aXQoRVhJVF9GQUlMVVJFKTsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQ09MTEFQU0VfVE9UQUw7IGkmIzQzOyYjNDM7KQomIzQzOwkJZGF0YVtpXSA9IHJhbmQoKSAmYW1wOyAweGZmOwomIzQzOwomIzQzOwlmZCA9IHZzb2NrX3N0cmVhbV9jb25uZWN0KG9wdHMtJmd0O3BlZXJfY2lkLCBvcHRzLSZndDtwZWVyX3BvcnQpOwomIzQzOwlpZiAoZmQgJmx0OyAwKSB7CiYjNDM7CQlwZXJyb3IoJiMzNDtjb25uZWN0JiMzNDspOwomIzQzOwkJZXhpdChFWElUX0ZBSUxVUkUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXdoaWxlIChvZmZzZXQgJmx0OyBDT0xMQVBTRV9UT1RBTCkgewomIzQzOwkJc2l6ZV90IHBrdF9zaXplID0gQ09MTEFQU0VfUEtUX01JTiAmIzQzOwomIzQzOwkJCXJhbmQoKSAlIChDT0xMQVBTRV9QS1RfTUFYIC0gQ09MTEFQU0VfUEtUX01JTiAmIzQzOyAxKTsKJiM0MzsKJiM0MzsJCXBrdF9zaXplID0gbWluKHBrdF9zaXplLCBDT0xMQVBTRV9UT1RBTCAtIG9mZnNldCk7CiYjNDM7CiYjNDM7CQlzZW5kX2J1ZihmZCwgZGF0YSAmIzQzOyBvZmZzZXQsIHBrdF9zaXplLCAwLCBwa3Rfc2l6ZSk7CiYjNDM7CQlvZmZzZXQgJiM0Mzs9IHBrdF9zaXplOwomIzQzOwl9CiYjNDM7CiYjNDM7CWhhc2ggPSBoYXNoX2RqYjIoZGF0YSwgQ09MTEFQU0VfVE9UQUwpOwomIzQzOwljb250cm9sX3dyaXRldWxvbmcoaGFzaCk7CiYjNDM7CiYjNDM7CWZyZWUoZGF0YSk7CiYjNDM7CWNsb3NlKGZkKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9zdHJlYW1fY29sbGFwc2Vfc2VydmVyKGNvbnN0IHN0cnVjdCB0ZXN0X29wdHMgKm9wdHMpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGhhc2gsIHJlbW90ZV9oYXNoOwomIzQzOwl1bnNpZ25lZCBjaGFyICpkYXRhOwomIzQzOwlpbnQgZmQ7CiYjNDM7CiYjNDM7CWRhdGEgPSBtYWxsb2MoQ09MTEFQU0VfVE9UQUwpOwomIzQzOwlpZiAoIWRhdGEpIHsKJiM0MzsJCXBlcnJvcigmIzM0O21hbGxvYyYjMzQ7KTsKJiM0MzsJCWV4aXQoRVhJVF9GQUlMVVJFKTsKJiM0MzsJfQomIzQzOwomIzQzOwlmZCA9IHZzb2NrX3N0cmVhbV9hY2NlcHQoVk1BRERSX0NJRF9BTlksIG9wdHMtJmd0O3BlZXJfcG9ydCwgTlVMTCk7CiYjNDM7CWlmIChmZCAmbHQ7IDApIHsKJiM0MzsJCXBlcnJvcigmIzM0O2FjY2VwdCYjMzQ7KTsKJiM0MzsJCWV4aXQoRVhJVF9GQUlMVVJFKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZWN2X2J1ZihmZCwgZGF0YSwgQ09MTEFQU0VfVE9UQUwsIDAsIENPTExBUFNFX1RPVEFMKTsKJiM0MzsKJiM0MzsJaGFzaCA9IGhhc2hfZGpiMihkYXRhLCBDT0xMQVBTRV9UT1RBTCk7CiYjNDM7CXJlbW90ZV9oYXNoID0gY29udHJvbF9yZWFkdWxvbmcoKTsKJiM0MzsJaWYgKGhhc2ggIT0gcmVtb3RlX2hhc2gpIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O2hhc2ggbWlzbWF0Y2g6IGxvY2FsICVsdSByZW1vdGUgJWx1XG4mIzM0OywKJiM0MzsJCQloYXNoLCByZW1vdGVfaGFzaCk7CiYjNDM7CQlleGl0KEVYSVRfRkFJTFVSRSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZnJlZShkYXRhKTsKJiM0MzsJY2xvc2UoZmQpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgdGVzdF9jYXNlIHRlc3RfY2FzZXNbXSA9IHsKIAl7CiAJCS5uYW1lID0gJiMzNDtTT0NLX1NUUkVBTSBjb25uZWN0aW9uIHJlc2V0JiMzNDssCkBAIC0yNTQ2LDYgJiM0MzsyNjI4LDExIEBAIHN0YXRpYyBzdHJ1Y3QgdGVzdF9jYXNlIHRlc3RfY2FzZXNbXSA9IHsKIAkJLnJ1bl9jbGllbnQgPSB0ZXN0X3N0cmVhbV9tc2dfcGVla19jbGllbnQsCiAJCS5ydW5fc2VydmVyID0gdGVzdF9zdHJlYW1fcGVla19hZnRlcl9yZWN2X3NlcnZlciwKIAl9LAomIzQzOwl7CiYjNDM7CQkubmFtZSA9ICYjMzQ7U09DS19TVFJFQU0gc21hbGwgcGFja2V0cyBiYWNrcHJlc3N1cmUmIzM0OywKJiM0MzsJCS5ydW5fY2xpZW50ID0gdGVzdF9zdHJlYW1fY29sbGFwc2VfY2xpZW50LAomIzQzOwkJLnJ1bl9zZXJ2ZXIgPSB0ZXN0X3N0cmVhbV9jb2xsYXBzZV9zZXJ2ZXIsCiYjNDM7CX0sCiAJe30sCiB9OwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3ODkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWc29jayBWaXJ0aW8gVHJhbnNwb3J0IENvbGxhcHNlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBtYWtpbmcgY2hhbmdlcyB0byBgbmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jYC4gSXQmIzM5O3MgaW50cm9kdWNpbmcgYSBmZXcgbmV3IGZ1bmN0aW9uczogYHZpcnRpb190cmFuc3BvcnRfY29sbGFwc2VfcnhfcXVldWVgLCBgdmlydGlvX3RyYW5zcG9ydF9jb2xsYXBzZV9zaXplYCwgYW5kIGB2aXJ0aW9fdHJhbnNwb3J0X2Nhbl9jb2xsYXBzZWAuIEZyb20gd2hhdCBJIGNhbiB0ZWxsLCBpdCBsb29rcyBsaWtlIGB2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3J4X3F1ZXVlYCBpcyBiZWluZyBjYWxsZWQgd2l0aGluIGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfZW5xdWV1ZWAsIHNwZWNpZmljYWxseSB3aGVuIGB2aXJ0aW9fdHJhbnNwb3J0X2luY19yeF9wa3RgIHJldHVybnMgZmFsc2UuIFRoaXMgaXMgcHJldHR5IHNpZ25pZmljYW50OyBpdCYjMzk7cyByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhlIHZzb2NrIHZpcnRpbyB0cmFuc3BvcnQgbG9naWMsIG1hbmFnaW5nIHRoZSByZWNlaXZlIHF1ZXVlIGFuZCBvcHRpbWl6aW5nIGl0IGJ5IGNvbGxhcHNpbmcgU0tCcyB0byByZWR1Y2Ugb3ZlcmhlYWQuIEZ1bmN0aW9uYWxseSwgdGhpcyBsb29rcyBsaWtlIGEgZ29vZCBjaGFuZ2UuIE15IHNwaWRleS1zZW5zZSBpcyB0ZWxsaW5nIG1lIHRoaXMgaXMgZGVmaW5pdGVseSBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBXZSYjMzk7cmUgZGlyZWN0bHkgbWFuaXB1bGF0aW5nIHRoZSByZWNlaXZlIHBhdGggaW4gYSBjcml0aWNhbCBhcmVhLgoKTm93LCBsZXQmIzM5O3MgZmlndXJlIG91dCB3aGF0IENPTkZJRyBvcHRpb25zIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkuIFRoZSBjb2RlIGl0c2VsZiBpcyBpbiBgbmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jYCwgc28gSSYjMzk7bGwgY2hlY2sgZWl0aGVyIGBuZXQvdm13X3Zzb2NrL01ha2VmaWxlYCBvciBgbmV0L3Ztd192c29jay9LY29uZmlnYCB0byBzZWUgd2hpY2ggY29uZmlndXJhdGlvbiBrbm9icyBjb250cm9sIGl0LiBGaW5kaW5nIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyB3aWxsIGJlIGtleSB0byBjcmVhdGluZyBhIHJlcHJvZHVjaWJsZSB0ZXN0IGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrL01ha2VmaWxlPTU9b2JqLSQoQ09ORklHX1ZJUlRJT19WU09DS0VUUykgJiM0Mzs9IHZtd192c29ja192aXJ0aW9fdHJhbnNwb3J0Lm9cbm5ldC92bXdfdnNvY2svTWFrZWZpbGU6NjpvYmotJChDT05GSUdfVklSVElPX1ZTT0NLRVRTX0NPTU1PTikgJiM0Mzs9IHZtd192c29ja192aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5vXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlLTctb2JqLSQoQ09ORklHX0hZUEVSVl9WU09DS0VUUykgJiM0Mzs9IGh2X3NvY2sub1xuLS1cbm5ldC92bXdfdnNvY2svTWFrZWZpbGU9MTg9dm13X3Zzb2NrX3ZpcnRpb190cmFuc3BvcnQteSAmIzQzOz0gdmlydGlvX3RyYW5zcG9ydC5vXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlLTE5LVxubmV0L3Ztd192c29jay9NYWtlZmlsZToyMDp2bXdfdnNvY2tfdmlydGlvX3RyYW5zcG9ydF9jb21tb24teSAmIzQzOz0gdmlydGlvX3RyYW5zcG9ydF9jb21tb24ub1xubmV0L3Ztd192c29jay9NYWtlZmlsZS0yMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxODoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTY3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKlVuZGVyc3RhbmRpbmcgdGhlIFZpcnRpbyB2c29jayBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBgQ09ORklHX1ZJUlRJT19WU09DS0VUU19DT01NT05gIGlzIHRoZSBjb3JlIHBpZWNlIGhlcmUsIHRoZSBmb3VuZGF0aW9uLiBCdXQgaXQmIzM5O3Mgbm90IHVzdWFsbHkgZGlyZWN0bHkgc2VsZWN0ZWQsIGl0JiMzOTtzIHR5cGljYWxseSBicm91Z2h0IGluIHRyYW5zaXRpdmVseSB0aHJvdWdoIGVpdGhlciBgQ09ORklHX1ZJUlRJT19WU09DS0VUU2Agb3IgYENPTkZJR19WSE9TVF9WU09DS2AuIE1ha2VzIHNlbnNlLCB0aGUgY29tbW9uIHN0dWZmIGlzIGEgZGVwZW5kZW5jeS4gTm93LCB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoZXNlIGRlcGVuZGVuY2llcyBhcmUgZGVmaW5lZCBhbmQgd2hhdCB0aGUgb3B0aW9ucyBhcmUsIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgYG5ldC92bXdfdnNvY2svS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBsb2dpYyBsaXZlcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1ZJUlRJT19WU09DS0VUUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrL0tjb25maWc9Mjk9Y29uZmlnIFZTT0NLRVRTX0xPT1BCQUNLXG4tLVxubmV0L3Ztd192c29jay9LY29uZmlnLTMyLVx0ZGVmYXVsdCB5XG5uZXQvdm13X3Zzb2NrL0tjb25maWc6MzM6XHRzZWxlY3QgVklSVElPX1ZTT0NLRVRTX0NPTU1PTlxubmV0L3Ztd192c29jay9LY29uZmlnLTM0LVx0aGVscFxuLS1cbm5ldC92bXdfdnNvY2svS2NvbmZpZz00MT1jb25maWcgVk1XQVJFX1ZNQ0lfVlNPQ0tFVFNcbi0tXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNTItXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6NTM6Y29uZmlnIFZJUlRJT19WU09DS0VUU1xubmV0L3Ztd192c29jay9LY29uZmlnLTU0LVx0dHJpc3RhdGUgXCYjMzQ7dmlydGlvIHRyYW5zcG9ydCBmb3IgVmlydHVhbCBTb2NrZXRzXCYjMzQ7XG5uZXQvdm13X3Zzb2NrL0tjb25maWctNTUtXHRkZXBlbmRzIG9uIFZTT0NLRVRTIFx1MDAyNlx1MDAyNiBWSVJUSU9cbm5ldC92bXdfdnNvY2svS2NvbmZpZzo1NjpcdHNlbGVjdCBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNTctXHRoZWxwXG4tLVxubmV0L3Ztd192c29jay9LY29uZmlnLTY1LVxubmV0L3Ztd192c29jay9LY29uZmlnOjY2OmNvbmZpZyBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNjctXHR0cmlzdGF0ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxNDEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llczogVmlydGlvIHZzLiB2aG9zdF92c29jayoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnMgaW50ZXJyZWxhdGUuIEkgc2VlIHRoYXQgZW5hYmxpbmcgYENPTkZJR19WSVJUSU9fVlNPQ0tFVFNgIGFuZCBgQ09ORklHX1ZTT0NLRVRTX0xPT1BCQUNLYCAqYm90aCogcHVsbCBpbiBgQ09ORklHX1ZJUlRJT19WU09DS0VUU19DT01NT05gLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGl0IHN1Z2dlc3RzIHRoZXJlJiMzOTtzIHNvbWUgY29yZSwgc2hhcmVkIGluZnJhc3RydWN0dXJlIHRoZXkgYm90aCByZWx5IG9uIGZvciBWaXJ0SU8tYmFzZWQgdnNvY2sgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIGtlZXAgdGhhdCBkZXBlbmRlbmN5IGluIG1pbmQgd2hlbiBkZWJ1Z2dpbmcgb3IgY29uZmlndXJpbmcgdnNvY2suIEl0JiMzOTtzIGdvb2QgdG8gc2VlIHRoYXQga2luZCBvZiBmYWN0b3JlZCBhcHByb2FjaDsgbWluaW1pemVzIGNvZGUgZHVwbGljYXRpb24gYW5kIGltcHJvdmVzIG1haW50YWluYWJpbGl0eS4KCk5vdywgSSBhbHNvIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSBvZiBob3cgdnNvY2sgaXMgdXNlZCwgc28gbGV0JiMzOTtzIGNyb3NzLXJlZmVyZW5jZSB0aGUgYGRyaXZlcnMvdmhvc3QvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYFZIT1NUX1ZTT0NLYCBvcHRpb24uIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBtaWdodCBjb3ZlciB0aGUgdmhvc3QtYmFzZWQgdmlydHVhbCBzb2NrZXRzLCBwb3RlbnRpYWxseSBmb3IgcGFyYXZpcnR1YWxpemVkIGd1ZXN0cy4gVW5kZXJzdGFuZGluZyB0aGF0IGNvbm5lY3Rpb24gaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGRpZmZlcmVudCBvcHRpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB2aXJ0aW8tYmFzZWQgdnNvY2sgaW1wbGVtZW50YXRpb24gYW5kIHRoZSB2aG9zdC1iYXNlZCBpbXBsZW1lbnRhdGlvbi4gSXQgaGVscHMgdG8gaGF2ZSBhIGhhbmRsZSBvbiAqYWxsKiB0aGUgdnNvY2sgb3B0aW9ucy4gSXQmIzM5O3MgYWJvdXQgcHV0dGluZyB0b2dldGhlciBhbGwgdGhlIHB1enpsZSBwaWVjZXMgdG8gc2VlIGhvdyB0aGlzIGFsbCBjb25uZWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxODoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvS2NvbmZpZz01Nj1jb25maWcgVkhPU1RfVlNPQ0tcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNTktXHRzZWxlY3QgVkhPU1RcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo2MDpcdHNlbGVjdCBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNjEtXHRkZWZhdWx0IG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxODoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjMxCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFZTb2NrIFJYIFF1ZXVlIENvbGxhcHNlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBWU29jayBjb25maWd1cmF0aW9uczogYENPTkZJR19WSVJUSU9fVlNPQ0tFVFNgLCBgQ09ORklHX1ZIT1NUX1ZTT0NLYCwgYW5kIGBDT05GSUdfVlNPQ0tFVFNfTE9PUEJBQ0tgLiBJJiMzOTtsbCBtYWtlIHN1cmUgdGhvc2UgYXJlIGVuYWJsZWQsIGFsb25nIHdpdGggYFZJUlRJT19WU09DS0VUU2AsIGBWSE9TVF9WU09DS2AsIGFuZCBgVlNPQ0tFVFNfTE9PUEJBQ0tgIHRoZW1zZWx2ZXMsIGFzIHRoZXkmIzM5O3JlIGNsZWFybHkgaW1wb3J0YW50LgoKTm93LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3M6IGZpbmRpbmcgdGhlIGNydWNpYWwgc3ltYm9scyB0byB1bmRlcnN0YW5kLiBUaGUgbmV3IGZ1bmN0aW9ucyBhcmUgYHZpcnRpb190cmFuc3BvcnRfY2FuX2NvbGxhcHNlYCwgYHZpcnRpb190cmFuc3BvcnRfY29sbGFwc2Vfc2l6ZWAsIGFuZCBgdmlydGlvX3RyYW5zcG9ydF9jb2xsYXBzZV9yeF9xdWV1ZWAuIFRoZSBleGlzdGluZyBmdW5jdGlvbiBtb2RpZmllZCBpcyBgdmlydGlvX3RyYW5zcG9ydF9yZWN2X2VucXVldWVgLgoKU2luY2UgYHZpcnRpb190cmFuc3BvcnRfcmVjdl9lbnF1ZXVlYCBpcyBhIGhvdC1wYXRoIGZ1bmN0aW9uLCBjYWxsZWQgb24gKmV2ZXJ5KiBwYWNrZXQgZW5xdWV1ZWQsIHRoYXQgdGVsbHMgbWUgdGhlIGNvbGxhcHNlIGZ1bmN0aW9ucyBhcmUgaW52b2tlZCB3aGVuIGEgdGhyZXNob2xkIGlzIG1ldC4gU3BlY2lmaWNhbGx5LCB3aGVuIGB2aXJ0aW9fdHJhbnNwb3J0X2luY19yeF9wa3RgIHJldHVybnMgZmFsc2UsIHdoaWNoIHN1Z2dlc3RzIHRoZSBSWCBxdWV1ZSBvdmVyaGVhZCBoYXMgZXhjZWVkZWQgaXRzIGFsbG93ZWQgYnVkZ2V0LiBUaGF0IG1lYW5zIGB2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3J4X3F1ZXVlYCBpcyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZm9jdXNlZCBhbmFseXNpcy4gV2hpbGUgYHZpcnRpb190cmFuc3BvcnRfY2FuX2NvbGxhcHNlYCBhbmQgYHZpcnRpb190cmFuc3BvcnRfY29sbGFwc2Vfc2l6ZWAgYXJlIHN0YXRpYyBhbmQgcG90ZW50aWFsbHkgaW5saW5lZCwgdGhleSBhcmUgc3RpbGwgaW1wb3J0YW50IGFuZCBhcmUgd29ydGggbm90aW5nIHRvby4KCkxldCBtZSBjb25maXJtIGlmIG15IGh1bmNoIGlzIGNvcnJlY3QgYWJvdXQgdGhvc2UgZmlyc3QgdHdvIGJlaW5nIHN0YXRpYy4gKkNoZWNrcyBDb2RlLi4uKiBZZXAsIHRoZXkgYXJlLgoKYGBgYwpzdGF0aWMgYm9vbCB2aXJ0aW9fdHJhbnNwb3J0X2Nhbl9jb2xsYXBzZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAoJCQkJCSAgdW5zaWduZWQgaW50IHNpemUpCnN0YXRpYyB1bnNpZ25lZCBpbnQKdmlydGlvX3RyYW5zcG9ydF9jb2xsYXBzZV9zaXplKHN0cnVjdCBza19idWZmICpza2IsCgkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpxdWV1ZSwKCQkJICAgICAgIHVuc2lnbmVkIGludCBtYXhfc2l6ZSkKc3RhdGljIHZvaWQgdmlydGlvX3RyYW5zcG9ydF9jb2xsYXBzZV9yeF9xdWV1ZShzdHJ1Y3QgdmlydGlvX3Zzb2NrX3NvY2sgKnZ2cykKYGBgCgpTbywgdGhlIGZvY3VzIHN5bWJvbHMgYXJlIGRlZmluaXRlbHk6IGB2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3J4X3F1ZXVlYCwgYHZpcnRpb190cmFuc3BvcnRfY29sbGFwc2Vfc2l6ZWAsIGFuZCBgdmlydGlvX3RyYW5zcG9ydF9jYW5fY29sbGFwc2VgLgoKTGV0JiMzOTtzIHF1aWNrbHkgdmVyaWZ5IHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBhbGwgZGVmaW5lZCB3aXRoaW4gYG5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZpcnRpb190cmFuc3BvcnRfY29sbGFwc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jPTQ0Mz1zdGF0aWMgdW5zaWduZWQgaW50XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6NDQ0OnZpcnRpb190cmFuc3BvcnRfY29sbGFwc2Vfc2l6ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTQ0NS1cdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqcXVldWUsXG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTQ2My0vKiBDYWxsZWQgdW5kZXIgbG9ja19zb2NrIHdoZW4gc2tiIG92ZXJoZWFkIGV4Y2VlZHMgdGhlIGJ1ZGdldC4gKi9cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzo0NjQ6c3RhdGljIHZvaWQgdmlydGlvX3RyYW5zcG9ydF9jb2xsYXBzZV9yeF9xdWV1ZShzdHJ1Y3QgdmlydGlvX3Zzb2NrX3NvY2sgKnZ2cylcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy00NjUte1xuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy01MDQtXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6NTA1Olx0XHRcdGFsbG9jX3NpemUgPSB2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3NpemUoc2tiLCBcdTAwMjZ2dnMtXHUwMDNlcnhfcXVldWUsXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtNTA2LVx0XHRcdFx0XHRcdFx0XHQgICAgY29sbGFwc2VfbWF4KTtcbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM9MTQ4Mz12aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfZW5xdWV1ZShzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLFxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xNTA1LVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZ2dnMtXHUwMDNlcnhfbG9jayk7XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTUwNjpcdFx0dmlydGlvX3RyYW5zcG9ydF9jb2xsYXBzZV9yeF9xdWV1ZSh2dnMpO1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE1MDctXHRcdHNwaW5fbG9ja19iaChcdTAwMjZ2dnMtXHUwMDNlcnhfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwODMKCQkJCQkJCW91dHB1dDogMTQ5CgkJCQkJCQl0aG91Z2h0czogMjE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFZpcnRpbyBWU29jayBDb2xsYXBzZSBQYXRjaCoqCgpPa2F5LCB0aGUgbmV3IGNvbGxhcHNlIGZ1bmN0aW9ucyBhcmUgZGVmaW5pdGVseSBwcmVzZW50LiBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gaW5jbHVkZSBgdmlydGlvX3RyYW5zcG9ydF9jb2xsYXBzZV9yeF9xdWV1ZWAsIGB2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3NpemVgLCBhbmQgYHZpcnRpb190cmFuc3BvcnRfY2FuX2NvbGxhcHNlYCBpbiBteSBhbmFseXNpcy4gVGhpcyBzZWVtcyBsaWtlIHRoZSBrZXkgYXJlYSB0byB0YXJnZXQuCgpMb29raW5nIGF0IHRoZSBjb25maWdzLCBJIHNlZSB0aGF0IHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgdGhlIGNvcmUgdnNvY2sgdmlydGlvIHRyYW5zcG9ydCBsb2dpYywgd2hpY2ggaXMgZ29vZCDigJMgaXQmIzM5O3MgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLCBhcyBzdGF0ZWQuIExldCBtZSBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3MuIEkga25vdyBJIG5lZWQgYFZJUlRJT19WU09DS0VUU2AsIGBWSE9TVF9WU09DS2AsIGFuZCBgVlNPQ0tFVFNfTE9PUEJBQ0tgLiBBbmQsIGNoZWNraW5nLCB5ZXMsIGBWU09DS0VUU2AgaXMgdGhlIGJhc2UgY29uZmlnLCBgVklSVElPX1ZTT0NLRVRTX0NPTU1PTmAgaXMgdGhlIG1vZHVsZSwgc28gYWxsIHRob3NlIGZsYWdzIGFyZSBhcHByb3ByaWF0ZSBhbmQgdGhlIGNvcnJlY3QgYmFzZS4gR29vZC4KClRoZSBkZXNjcmlwdGlvbiBpcyBjbGVhcjogdGhlIGludGVudGlvbiBpcyB0byBhZGRyZXNzIGNvbm5lY3Rpb24gcmVzZXRzIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSBieSBjb2xsYXBzaW5nIHNtYWxsIHBhY2tldHMgaW4gdGhlIHJlY2VpdmUgcXVldWUuIFRoaXMgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIGEgZ29vZCBvcHRpbWl6YXRpb24gc3RyYXRlZ3kuIFRoZSBuZXdseSBhZGRlZCBmdW5jdGlvbnMgYXJlIHdoZXJlIEkmIzM5O2xsIGNvbmNlbnRyYXRlIG15IGZ1enppbmcgZWZmb3J0cy4KCkFscmlnaHQsIEkmIzM5O20gcmVhZHkgdG8gY2FsbCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTg6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZTT0NLRVRTJiMzNDssCiAgICAmIzM0O1ZJUlRJT19WU09DS0VUUyYjMzQ7LAogICAgJiMzNDtWSE9TVF9WU09DSyYjMzQ7LAogICAgJiMzNDtWU09DS0VUU19MT09QQkFDSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZpcnRpb190cmFuc3BvcnRfY29sbGFwc2VfcnhfcXVldWUmIzM0OywKICAgICYjMzQ7dmlydGlvX3RyYW5zcG9ydF9jb2xsYXBzZV9zaXplJiMzNDssCiAgICAmIzM0O3ZpcnRpb190cmFuc3BvcnRfY2FuX2NvbGxhcHNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbWVjaGFuaXNtIHRvIGNvbGxhcHNlIHNtYWxsIHBhY2tldHMgaW4gdGhlIHZpcnRpbyB2c29jayByZWNlaXZlIHF1ZXVlIHRvIHByZXZlbnQgY29ubmVjdGlvbiByZXNldHMgdW5kZXIgbWVtb3J5IHByZXNzdXJlLiBJdCBtb2RpZmllcyBjb3JlIHZzb2NrIHZpcnRpbyB0cmFuc3BvcnQgbG9naWMgd2hpY2ggaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3bHkgYWRkZWQgY29sbGFwc2UgZnVuY3Rpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWU09DS0VUUyYjMzQ7LAogICAgJiMzNDtWSVJUSU9fVlNPQ0tFVFMmIzM0OywKICAgICYjMzQ7VkhPU1RfVlNPQ0smIzM0OywKICAgICYjMzQ7VlNPQ0tFVFNfTE9PUEJBQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3J4X3F1ZXVlJiMzNDssCiAgICAmIzM0O3ZpcnRpb190cmFuc3BvcnRfY29sbGFwc2Vfc2l6ZSYjMzQ7LAogICAgJiMzNDt2aXJ0aW9fdHJhbnNwb3J0X2Nhbl9jb2xsYXBzZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG1lY2hhbmlzbSB0byBjb2xsYXBzZSBzbWFsbCBwYWNrZXRzIGluIHRoZSB2aXJ0aW8gdnNvY2sgcmVjZWl2ZSBxdWV1ZSB0byBwcmV2ZW50IGNvbm5lY3Rpb24gcmVzZXRzIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4gSXQgbW9kaWZpZXMgY29yZSB2c29jayB2aXJ0aW8gdHJhbnNwb3J0IGxvZ2ljIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbC4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ld2x5IGFkZGVkIGNvbGxhcHNlIGZ1bmN0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjI5OjM2LjE2MzczODcxNVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4Nzk0NzM3MzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZTT0NLRVRTXCIsXG4gICAgXCJWSVJUSU9fVlNPQ0tFVFNcIixcbiAgICBcIlZIT1NUX1ZTT0NLXCIsXG4gICAgXCJWU09DS0VUU19MT09QQkFDS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZpcnRpb190cmFuc3BvcnRfY29sbGFwc2VfcnhfcXVldWVcIixcbiAgICBcInZpcnRpb190cmFuc3BvcnRfY29sbGFwc2Vfc2l6ZVwiLFxuICAgIFwidmlydGlvX3RyYW5zcG9ydF9jYW5fY29sbGFwc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG1lY2hhbmlzbSB0byBjb2xsYXBzZSBzbWFsbCBwYWNrZXRzIGluIHRoZSB2aXJ0aW8gdnNvY2sgcmVjZWl2ZSBxdWV1ZSB0byBwcmV2ZW50IGNvbm5lY3Rpb24gcmVzZXRzIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4gSXQgbW9kaWZpZXMgY29yZSB2c29jayB2aXJ0aW8gdHJhbnNwb3J0IGxvZ2ljIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbC4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ld2x5IGFkZGVkIGNvbGxhcHNlIGZ1bmN0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6Mjk6MzYuMTYzNzcyNTU1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTU0MDUxMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmYTU4OTlmZWRhZmRjN2JlYThiMDIzYTFhZTYzNDA0YjQzMDI4ODg4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVuIDI2IDE4OjI5OjM0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYyBiL25ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uY1xcbmluZGV4IDA5NDc1MDA3MTY1YjM2Li4zMDRlYTQyNDk5NWQ0ZCAxMDA2NDRcXG4tLS0gYS9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNcXG4rKysgYi9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNcXG5AQCAtNDIwLDYgKzQyMCwxMzcgQEAgc3RhdGljIGludCB2aXJ0aW9fdHJhbnNwb3J0X3NlbmRfcGt0X2luZm8oc3RydWN0IHZzb2NrX3NvY2sgKnZzayxcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgdmlydGlvX3RyYW5zcG9ydF9jYW5fY29sbGFwc2Uoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgc2l6ZSlcXG4re1xcbitcXHQvKiBza2JzIHRoYXQgYXJlIHBhcnRpYWxseSBjb25zdW1lZCwgbWFyayBhIFNFUVBBQ0tFVCBtZXNzYWdlIGJvdW5kYXJ5LFxcbitcXHQgKiBvciBhcmUgYWxyZWFkeSBsYXJnZSBlbm91Z2ggc2hvdWxkIG5vdCBiZSBjb2xsYXBzZWQ6IHRoZXkgZWl0aGVyXFxuK1xcdCAqIG5lZWQgc3BlY2lhbCBhY2NvdW50aW5nLCBjYXJyeSBwcm90b2NvbCBzdGF0ZSwgb3IgYWxyZWFkeSBoYXZlIGFcXG4rXFx0ICogZ29vZCBkYXRhLXRvLW92ZXJoZWFkIHJhdGlvLlxcbitcXHQgKi9cXG4rXFx0aWYgKFZJUlRJT19WU09DS19TS0JfQ0Ioc2tiKS1cXHUwMDNlb2Zmc2V0KVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdGlmIChsZTMyX3RvX2NwdSh2aXJ0aW9fdnNvY2tfaGRyKHNrYiktXFx1MDAzZWZsYWdzKSBcXHUwMDI2IFZJUlRJT19WU09DS19TRVFfRU9NKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDNlPSBzaXplKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbisvKiBJdGVyYXRlIHRocm91Z2ggdGhlIHBhY2tldHMgaW4gdGhlIHF1ZXVlIHN0YXJ0aW5nIGZyb20gdGhlIGN1cnJlbnQgc2tiIHRvXFxuKyAqIGNvdW50IHRoZSBudW1iZXIgb2YgYnl0ZXMgd2UgY2FuIGNvbGxhcHNlLlxcbisgKi9cXG4rc3RhdGljIHVuc2lnbmVkIGludFxcbit2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3NpemUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmX2hlYWQgKnF1ZXVlLFxcbitcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IG1heF9zaXplKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCB0YXJnZXQgPSBza2ItXFx1MDAzZWxlbiAtIFZJUlRJT19WU09DS19TS0JfQ0Ioc2tiKS1cXHUwMDNlb2Zmc2V0O1xcbitcXG4rXFx0d2hpbGUgKChza2IgPSBza2JfcGVla19uZXh0KHNrYiwgcXVldWUpKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgdmlydGlvX3RyYW5zcG9ydF9jYW5fY29sbGFwc2Uoc2tiLCBtYXhfc2l6ZSkpIHtcXG4rXFx0XFx0dW5zaWduZWQgaW50IGxlbiA9IHNrYi1cXHUwMDNlbGVuIC0gVklSVElPX1ZTT0NLX1NLQl9DQihza2IpLVxcdTAwM2VvZmZzZXQ7XFxuK1xcbitcXHRcXHRpZiAobGVuIFxcdTAwM2UgbWF4X3NpemUgLSB0YXJnZXQpXFxuK1xcdFxcdFxcdHJldHVybiB0YXJnZXQ7XFxuK1xcbitcXHRcXHR0YXJnZXQgKz0gbGVuO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gdGFyZ2V0O1xcbit9XFxuK1xcbisvKiBDYWxsZWQgdW5kZXIgbG9ja19zb2NrIHdoZW4gc2tiIG92ZXJoZWFkIGV4Y2VlZHMgdGhlIGJ1ZGdldC4gKi9cXG4rc3RhdGljIHZvaWQgdmlydGlvX3RyYW5zcG9ydF9jb2xsYXBzZV9yeF9xdWV1ZShzdHJ1Y3QgdmlydGlvX3Zzb2NrX3NvY2sgKnZ2cylcXG4re1xcbitcXHQvKiBVc2UgdGhlIHNhbWUgbGluZWFyIGFsbG9jYXRpb24gdGhyZXNob2xkIGFzIHZpcnRpb192c29ja19hbGxvY19za2IoKVxcbitcXHQgKiB0byBhdm9pZCBhZGRpbmcgcHJlc3N1cmUgb24gdGhlIHBhZ2UgYWxsb2NhdG9yLlxcbitcXHQgKi9cXG4rXFx0dW5zaWduZWQgaW50IGNvbGxhcHNlX21heCA9IFNLQl9NQVhfT1JERVIoVklSVElPX1ZTT0NLX1NLQl9IRUFEUk9PTSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUik7XFxuK1xcdHN0cnVjdCBza19idWZmICpza2IsICpuZXh0X3NrYiwgKm5ld19za2IgPSBOVUxMO1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIG5ld19xdWV1ZTtcXG4rXFxuK1xcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2bmV3X3F1ZXVlKTtcXG4rXFxuK1xcdHNrYl9xdWV1ZV93YWxrX3NhZmUoXFx1MDAyNnZ2cy1cXHUwMDNlcnhfcXVldWUsIHNrYiwgbmV4dF9za2IpIHtcXG4rXFx0XFx0c3RydWN0IHZpcnRpb192c29ja19oZHIgKmhkciA9IHZpcnRpb192c29ja19oZHIoc2tiKTtcXG4rXFx0XFx0dTMyIHNyY19vZmYgPSBWSVJUSU9fVlNPQ0tfU0tCX0NCKHNrYiktXFx1MDAzZW9mZnNldDtcXG4rXFx0XFx0dTMyIHNyY19sZW4gPSBza2ItXFx1MDAzZWxlbiAtIHNyY19vZmY7XFxuK1xcdFxcdGJvb2wga2VlcCA9IGZhbHNlO1xcbitcXG4rXFx0XFx0aWYgKCF2aXJ0aW9fdHJhbnNwb3J0X2Nhbl9jb2xsYXBzZShza2IsIGNvbGxhcHNlX21heCkpIHtcXG4rXFx0XFx0XFx0LyogRmluYWxpemUgcGVuZGluZyBjb2xsYXBzZWQgc2tiIHRvIHByZXNlcnZlIHBhY2tldFxcbitcXHRcXHRcXHQgKiBvcmRlcmluZy5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGlmIChuZXdfc2tiKSB7XFxuK1xcdFxcdFxcdFxcdF9fc2tiX3F1ZXVlX3RhaWwoXFx1MDAyNm5ld19xdWV1ZSwgbmV3X3NrYik7XFxuK1xcdFxcdFxcdFxcdG5ld19za2IgPSBOVUxMO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGtlZXAgPSB0cnVlO1xcbitcXHRcXHRcXHRnb3RvIG5leHQ7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIEZpbmFsaXplIGlmIHRoaXMgcGFja2V0IHdvbid0IGZpdCBpbiB0aGUgcmVtYWluaW5nIHRhaWxyb29tLFxcbitcXHRcXHQgKiBzbyB3ZSBjYW4gYWxsb2NhdGUgYSByaWdodC1zaXplZCBuZXdfc2tiLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKG5ld19za2IgXFx1MDAyNlxcdTAwMjYgc3JjX2xlbiBcXHUwMDNlIHNrYl90YWlscm9vbShuZXdfc2tiKSkge1xcbitcXHRcXHRcXHRfX3NrYl9xdWV1ZV90YWlsKFxcdTAwMjZuZXdfcXVldWUsIG5ld19za2IpO1xcbitcXHRcXHRcXHRuZXdfc2tiID0gTlVMTDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKCFuZXdfc2tiKSB7XFxuK1xcdFxcdFxcdHVuc2lnbmVkIGludCBhbGxvY19zaXplO1xcbitcXG4rXFx0XFx0XFx0YWxsb2Nfc2l6ZSA9IHZpcnRpb190cmFuc3BvcnRfY29sbGFwc2Vfc2l6ZShza2IsIFxcdTAwMjZ2dnMtXFx1MDAzZXJ4X3F1ZXVlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgY29sbGFwc2VfbWF4KTtcXG4rXFxuK1xcdFxcdFxcdC8qIE9ubHkgdGhpcyBza2IncyBkYXRhIGlzIGVsaWdpYmxlLCBub3RoaW5nIHRvIG1lcmdlXFxuK1xcdFxcdFxcdCAqIHdpdGguIEtlZXAgYXMtaXMuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRpZiAoYWxsb2Nfc2l6ZSBcXHUwMDNjPSBzcmNfbGVuKSB7XFxuK1xcdFxcdFxcdFxcdGtlZXAgPSB0cnVlO1xcbitcXHRcXHRcXHRcXHRnb3RvIG5leHQ7XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdG5ld19za2IgPSB2aXJ0aW9fdnNvY2tfYWxsb2NfbGluZWFyX3NrYihhbGxvY19zaXplICtcXG4rXFx0XFx0XFx0XFx0XFx0VklSVElPX1ZTT0NLX1NLQl9IRUFEUk9PTSwgR0ZQX0tFUk5FTCk7XFxuK1xcdFxcdFxcdGlmICghbmV3X3NrYilcXG4rXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRcXHRcXHRtZW1jcHkodmlydGlvX3Zzb2NrX2hkcihuZXdfc2tiKSwgaGRyLFxcbitcXHRcXHRcXHQgICAgICAgc2l6ZW9mKHN0cnVjdCB2aXJ0aW9fdnNvY2tfaGRyKSk7XFxuK1xcdFxcdFxcdHZpcnRpb192c29ja19oZHIobmV3X3NrYiktXFx1MDAzZWxlbiA9IDA7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIENhbm5vdCBmYWlsIHNpbmNlIHNyY19vZmYvc3JjX2xlbiBhcmUgd2l0aGluIGJvdW5kcywgYnV0IGlmXFxuK1xcdFxcdCAqIGl0IGRvZXMsIGRpc2NhcmQgbmV3X3NrYiB0byBhdm9pZCBxdWV1aW5nIGNvcnJ1cHRlZCBkYXRhLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKFdBUk5fT05fT05DRShza2JfY29weV9iaXRzKHNrYiwgc3JjX29mZixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHNrYl9wdXQobmV3X3NrYiwgc3JjX2xlbiksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBzcmNfbGVuKSkpIHtcXG4rXFx0XFx0XFx0a2ZyZWVfc2tiKG5ld19za2IpO1xcbitcXHRcXHRcXHRuZXdfc2tiID0gTlVMTDtcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGxlMzJfYWRkX2NwdShcXHUwMDI2dmlydGlvX3Zzb2NrX2hkcihuZXdfc2tiKS1cXHUwMDNlbGVuLCBzcmNfbGVuKTtcXG4rXFx0XFx0dmlydGlvX3Zzb2NrX2hkcihuZXdfc2tiKS1cXHUwMDNlZmxhZ3MgfD0gaGRyLVxcdTAwM2VmbGFncztcXG4rXFxuK25leHQ6XFxuK1xcdFxcdF9fc2tiX3VubGluayhza2IsIFxcdTAwMjZ2dnMtXFx1MDAzZXJ4X3F1ZXVlKTtcXG4rXFx0XFx0aWYgKGtlZXApXFxuK1xcdFxcdFxcdF9fc2tiX3F1ZXVlX3RhaWwoXFx1MDAyNm5ld19xdWV1ZSwgc2tiKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRjb25zdW1lX3NrYihza2IpO1xcbitcXHR9XFxuK291dDpcXG4rXFx0aWYgKG5ld19za2IpXFxuK1xcdFxcdF9fc2tiX3F1ZXVlX3RhaWwoXFx1MDAyNm5ld19xdWV1ZSwgbmV3X3NrYik7XFxuK1xcbitcXHRza2JfcXVldWVfc3BsaWNlKFxcdTAwMjZuZXdfcXVldWUsIFxcdTAwMjZ2dnMtXFx1MDAzZXJ4X3F1ZXVlKTtcXG4rfVxcbitcXG4gc3RhdGljIGJvb2wgdmlydGlvX3RyYW5zcG9ydF9pbmNfcnhfcGt0KHN0cnVjdCB2aXJ0aW9fdnNvY2tfc29jayAqdnZzLFxcbiBcXHRcXHRcXHRcXHRcXHR1MzIgbGVuKVxcbiB7XFxuQEAgLTEzNjMsOCArMTQ5NCwyMSBAQCB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfZW5xdWV1ZShzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLFxcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnZ2cy1cXHUwMDNlcnhfbG9jayk7XFxuIFxcbiBcXHRjYW5fZW5xdWV1ZSA9IHZpcnRpb190cmFuc3BvcnRfaW5jX3J4X3BrdCh2dnMsIGxlbik7XFxuLVxcdGlmICghY2FuX2VucXVldWUpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoIWNhbl9lbnF1ZXVlKSB7XFxuK1xcdFxcdC8qIFRyeSB0byBjb2xsYXBzZSB0aGUgcmVjZWl2ZSBxdWV1ZSB0byByZWR1Y2Ugc2tiIG92ZXJoZWFkIGFuZFxcbitcXHRcXHQgKiBtYWtlIHJvb20gZm9yIHRoaXMgcGFja2V0LlxcbitcXHRcXHQgKiBVbmxvY2sgcnhfbG9jayBzaW5jZSB0aGUgY29sbGFwc2UgbWF5IHNsZWVwIG9yLCBpbiBhbnkgY2FzZSxcXG4rXFx0XFx0ICogdGFrZSBzb21lIHRpbWUgdG8gY29sbGFwc2UgdGhlIHNrYnMsIGJ1dCB0aGlzIGlzIHNhZmUsIHNpbmNlXFxuK1xcdFxcdCAqIHNrX2xvY2sgaXMgaGVsZCBieSBjYWxsZXIgc28gbm8gb25lIGVsc2UgY2FuIGVucXVldWUgb3JcXG4rXFx0XFx0ICogZGVxdWV1ZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ2dnMtXFx1MDAzZXJ4X2xvY2spO1xcbitcXHRcXHR2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3J4X3F1ZXVlKHZ2cyk7XFxuK1xcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2dnZzLVxcdTAwM2VyeF9sb2NrKTtcXG4rXFx0XFx0Y2FuX2VucXVldWUgPSB2aXJ0aW9fdHJhbnNwb3J0X2luY19yeF9wa3QodnZzLCBsZW4pO1xcbitcXHRcXHRpZiAoIWNhbl9lbnF1ZXVlKVxcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbiBcXG4gXFx0aWYgKGxlMzJfdG9fY3B1KGhkci1cXHUwMDNlZmxhZ3MpIFxcdTAwMjYgVklSVElPX1ZTT0NLX1NFUV9FT00pXFxuIFxcdFxcdHZ2cy1cXHUwMDNlbXNnX2NvdW50Kys7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3RpbmcvdnNvY2svdnNvY2tfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy92c29jay92c29ja190ZXN0LmNcXG5pbmRleCA3NmJlMGU0YTdmMGVlNi4uYjRmZjlmOTQ2NTY1YjggMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy92c29jay92c29ja190ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3Zzb2NrL3Zzb2NrX3Rlc3QuY1xcbkBAIC0yMzQ3LDYgKzIzNDcsODggQEAgc3RhdGljIHZvaWQgdGVzdF9zdHJlYW1fdHhfY3JlZGl0X2JvdW5kc19zZXJ2ZXIoY29uc3Qgc3RydWN0IHRlc3Rfb3B0cyAqb3B0cylcXG4gXFx0Y2xvc2UoZmQpO1xcbiB9XFxuIFxcbisvKiBUZXN0IHRoYXQgbWFueSBzbWFsbCBwYWNrZXRzIGRvbid0IGNhdXNlIGEgY29ubmVjdGlvbiByZXNldCB1bmRlciBwcmVzc3VyZVxcbisgKiBhbmQgdGhhdCBkYXRhIGludGVncml0eSBpcyBwcmVzZXJ2ZWQuICBQYWNrZXQgc2l6ZXMgdmFyeSByYW5kb21seSBiZXR3ZWVuXFxuKyAqIDEyOSBhbmQgNTEyIGJ5dGVzLCBhYm92ZSBHT09EX0NPUFlfTEVOICgxMjgpIHRvIGJ5cGFzcyBpbi1wbGFjZSBjb2FsZXNjaW5nXFxuKyAqIGluIHJlY3ZfZW5xdWV1ZSwgZm9yY2luZyBlYWNoIG9uZSBpbnRvIGl0cyBvd24gc2tiLiAgV2l0aG91dCByZWNlaXZlIHF1ZXVlXFxuKyAqIGNvbGxhcHNpbmcsIHRoZSBwZXItc2tiIG92ZXJoZWFkIGV2ZW50dWFsbHkgZXhjZWVkcyBidWZfYWxsb2MgYW5kIHRoZVxcbisgKiBjb25uZWN0aW9uIGlzIHJlc2V0LlxcbisgKi9cXG4rI2RlZmluZSBDT0xMQVBTRV9QS1RfTUlOIDEyOVxcbisjZGVmaW5lIENPTExBUFNFX1BLVF9NQVggNTEyXFxuKyNkZWZpbmUgQ09MTEFQU0VfVE9UQUwgKDIgKiAxMDI0ICogMTAyNClcXG4rXFxuK3N0YXRpYyB2b2lkIHRlc3Rfc3RyZWFtX2NvbGxhcHNlX2NsaWVudChjb25zdCBzdHJ1Y3QgdGVzdF9vcHRzICpvcHRzKVxcbit7XFxuK1xcdHVuc2lnbmVkIGNoYXIgKmRhdGE7XFxuK1xcdHVuc2lnbmVkIGxvbmcgaGFzaDtcXG4rXFx0c2l6ZV90IG9mZnNldCA9IDA7XFxuK1xcdGludCBpLCBmZDtcXG4rXFxuK1xcdGRhdGEgPSBtYWxsb2MoQ09MTEFQU0VfVE9UQUwpO1xcbitcXHRpZiAoIWRhdGEpIHtcXG4rXFx0XFx0cGVycm9yKFxcXCJtYWxsb2NcXFwiKTtcXG4rXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQ09MTEFQU0VfVE9UQUw7IGkrKylcXG4rXFx0XFx0ZGF0YVtpXSA9IHJhbmQoKSBcXHUwMDI2IDB4ZmY7XFxuK1xcbitcXHRmZCA9IHZzb2NrX3N0cmVhbV9jb25uZWN0KG9wdHMtXFx1MDAzZXBlZXJfY2lkLCBvcHRzLVxcdTAwM2VwZWVyX3BvcnQpO1xcbitcXHRpZiAoZmQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHBlcnJvcihcXFwiY29ubmVjdFxcXCIpO1xcbitcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuK1xcdH1cXG4rXFxuK1xcdHdoaWxlIChvZmZzZXQgXFx1MDAzYyBDT0xMQVBTRV9UT1RBTCkge1xcbitcXHRcXHRzaXplX3QgcGt0X3NpemUgPSBDT0xMQVBTRV9QS1RfTUlOICtcXG4rXFx0XFx0XFx0cmFuZCgpICUgKENPTExBUFNFX1BLVF9NQVggLSBDT0xMQVBTRV9QS1RfTUlOICsgMSk7XFxuK1xcbitcXHRcXHRwa3Rfc2l6ZSA9IG1pbihwa3Rfc2l6ZSwgQ09MTEFQU0VfVE9UQUwgLSBvZmZzZXQpO1xcbitcXG4rXFx0XFx0c2VuZF9idWYoZmQsIGRhdGEgKyBvZmZzZXQsIHBrdF9zaXplLCAwLCBwa3Rfc2l6ZSk7XFxuK1xcdFxcdG9mZnNldCArPSBwa3Rfc2l6ZTtcXG4rXFx0fVxcbitcXG4rXFx0aGFzaCA9IGhhc2hfZGpiMihkYXRhLCBDT0xMQVBTRV9UT1RBTCk7XFxuK1xcdGNvbnRyb2xfd3JpdGV1bG9uZyhoYXNoKTtcXG4rXFxuK1xcdGZyZWUoZGF0YSk7XFxuK1xcdGNsb3NlKGZkKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9zdHJlYW1fY29sbGFwc2Vfc2VydmVyKGNvbnN0IHN0cnVjdCB0ZXN0X29wdHMgKm9wdHMpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBoYXNoLCByZW1vdGVfaGFzaDtcXG4rXFx0dW5zaWduZWQgY2hhciAqZGF0YTtcXG4rXFx0aW50IGZkO1xcbitcXG4rXFx0ZGF0YSA9IG1hbGxvYyhDT0xMQVBTRV9UT1RBTCk7XFxuK1xcdGlmICghZGF0YSkge1xcbitcXHRcXHRwZXJyb3IoXFxcIm1hbGxvY1xcXCIpO1xcbitcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuK1xcdH1cXG4rXFxuK1xcdGZkID0gdnNvY2tfc3RyZWFtX2FjY2VwdChWTUFERFJfQ0lEX0FOWSwgb3B0cy1cXHUwMDNlcGVlcl9wb3J0LCBOVUxMKTtcXG4rXFx0aWYgKGZkIFxcdTAwM2MgMCkge1xcbitcXHRcXHRwZXJyb3IoXFxcImFjY2VwdFxcXCIpO1xcbitcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJlY3ZfYnVmKGZkLCBkYXRhLCBDT0xMQVBTRV9UT1RBTCwgMCwgQ09MTEFQU0VfVE9UQUwpO1xcbitcXG4rXFx0aGFzaCA9IGhhc2hfZGpiMihkYXRhLCBDT0xMQVBTRV9UT1RBTCk7XFxuK1xcdHJlbW90ZV9oYXNoID0gY29udHJvbF9yZWFkdWxvbmcoKTtcXG4rXFx0aWYgKGhhc2ggIT0gcmVtb3RlX2hhc2gpIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJoYXNoIG1pc21hdGNoOiBsb2NhbCAlbHUgcmVtb3RlICVsdVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0aGFzaCwgcmVtb3RlX2hhc2gpO1xcbitcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuK1xcdH1cXG4rXFxuK1xcdGZyZWUoZGF0YSk7XFxuK1xcdGNsb3NlKGZkKTtcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCB0ZXN0X2Nhc2UgdGVzdF9jYXNlc1tdID0ge1xcbiBcXHR7XFxuIFxcdFxcdC5uYW1lID0gXFxcIlNPQ0tfU1RSRUFNIGNvbm5lY3Rpb24gcmVzZXRcXFwiLFxcbkBAIC0yNTQ2LDYgKzI2MjgsMTEgQEAgc3RhdGljIHN0cnVjdCB0ZXN0X2Nhc2UgdGVzdF9jYXNlc1tdID0ge1xcbiBcXHRcXHQucnVuX2NsaWVudCA9IHRlc3Rfc3RyZWFtX21zZ19wZWVrX2NsaWVudCxcXG4gXFx0XFx0LnJ1bl9zZXJ2ZXIgPSB0ZXN0X3N0cmVhbV9wZWVrX2FmdGVyX3JlY3Zfc2VydmVyLFxcbiBcXHR9LFxcbitcXHR7XFxuK1xcdFxcdC5uYW1lID0gXFxcIlNPQ0tfU1RSRUFNIHNtYWxsIHBhY2tldHMgYmFja3ByZXNzdXJlXFxcIixcXG4rXFx0XFx0LnJ1bl9jbGllbnQgPSB0ZXN0X3N0cmVhbV9jb2xsYXBzZV9jbGllbnQsXFxuK1xcdFxcdC5ydW5fc2VydmVyID0gdGVzdF9zdHJlYW1fY29sbGFwc2Vfc2VydmVyLFxcbitcXHR9LFxcbiBcXHR7fSxcXG4gfTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjI5OjM2Ljc1OTg2NzNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MTk4NTk3MjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZTT0NLRVRTXCIsXG4gICAgXCJWSVJUSU9fVlNPQ0tFVFNcIixcbiAgICBcIlZIT1NUX1ZTT0NLXCIsXG4gICAgXCJWU09DS0VUU19MT09QQkFDS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZpcnRpb190cmFuc3BvcnRfY29sbGFwc2VfcnhfcXVldWVcIixcbiAgICBcInZpcnRpb190cmFuc3BvcnRfY29sbGFwc2Vfc2l6ZVwiLFxuICAgIFwidmlydGlvX3RyYW5zcG9ydF9jYW5fY29sbGFwc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG1lY2hhbmlzbSB0byBjb2xsYXBzZSBzbWFsbCBwYWNrZXRzIGluIHRoZSB2aXJ0aW8gdnNvY2sgcmVjZWl2ZSBxdWV1ZSB0byBwcmV2ZW50IGNvbm5lY3Rpb24gcmVzZXRzIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4gSXQgbW9kaWZpZXMgY29yZSB2c29jayB2aXJ0aW8gdHJhbnNwb3J0IGxvZ2ljIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbC4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ld2x5IGFkZGVkIGNvbGxhcHNlIGZ1bmN0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmYTU4OTlmZWRhZmRjN2JlYThiMDIzYTFhZTYzNDA0YjQzMDI4ODg4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdW4gMjYgMTg6Mjk6MzQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMgYi9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNcbmluZGV4IDA5NDc1MDA3MTY1YjM2Li4zMDRlYTQyNDk5NWQ0ZCAxMDA2NDRcbi0tLSBhL25ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uY1xuKysrIGIvbmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jXG5AQCAtNDIwLDYgKzQyMCwxMzcgQEAgc3RhdGljIGludCB2aXJ0aW9fdHJhbnNwb3J0X3NlbmRfcGt0X2luZm8oc3RydWN0IHZzb2NrX3NvY2sgKnZzayxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBib29sIHZpcnRpb190cmFuc3BvcnRfY2FuX2NvbGxhcHNlKHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHRcdCAgdW5zaWduZWQgaW50IHNpemUpXG4re1xuK1x0Lyogc2ticyB0aGF0IGFyZSBwYXJ0aWFsbHkgY29uc3VtZWQsIG1hcmsgYSBTRVFQQUNLRVQgbWVzc2FnZSBib3VuZGFyeSxcbitcdCAqIG9yIGFyZSBhbHJlYWR5IGxhcmdlIGVub3VnaCBzaG91bGQgbm90IGJlIGNvbGxhcHNlZDogdGhleSBlaXRoZXJcbitcdCAqIG5lZWQgc3BlY2lhbCBhY2NvdW50aW5nLCBjYXJyeSBwcm90b2NvbCBzdGF0ZSwgb3IgYWxyZWFkeSBoYXZlIGFcbitcdCAqIGdvb2QgZGF0YS10by1vdmVyaGVhZCByYXRpby5cbitcdCAqL1xuK1x0aWYgKFZJUlRJT19WU09DS19TS0JfQ0Ioc2tiKS1cdTAwM2VvZmZzZXQpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGlmIChsZTMyX3RvX2NwdSh2aXJ0aW9fdnNvY2tfaGRyKHNrYiktXHUwMDNlZmxhZ3MpIFx1MDAyNiBWSVJUSU9fVlNPQ0tfU0VRX0VPTSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNlPSBzaXplKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rLyogSXRlcmF0ZSB0aHJvdWdoIHRoZSBwYWNrZXRzIGluIHRoZSBxdWV1ZSBzdGFydGluZyBmcm9tIHRoZSBjdXJyZW50IHNrYiB0b1xuKyAqIGNvdW50IHRoZSBudW1iZXIgb2YgYnl0ZXMgd2UgY2FuIGNvbGxhcHNlLlxuKyAqL1xuK3N0YXRpYyB1bnNpZ25lZCBpbnRcbit2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3NpemUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqcXVldWUsXG4rXHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBtYXhfc2l6ZSlcbit7XG4rXHR1bnNpZ25lZCBpbnQgdGFyZ2V0ID0gc2tiLVx1MDAzZWxlbiAtIFZJUlRJT19WU09DS19TS0JfQ0Ioc2tiKS1cdTAwM2VvZmZzZXQ7XG4rXG4rXHR3aGlsZSAoKHNrYiA9IHNrYl9wZWVrX25leHQoc2tiLCBxdWV1ZSkpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIHZpcnRpb190cmFuc3BvcnRfY2FuX2NvbGxhcHNlKHNrYiwgbWF4X3NpemUpKSB7XG4rXHRcdHVuc2lnbmVkIGludCBsZW4gPSBza2ItXHUwMDNlbGVuIC0gVklSVElPX1ZTT0NLX1NLQl9DQihza2IpLVx1MDAzZW9mZnNldDtcbitcbitcdFx0aWYgKGxlbiBcdTAwM2UgbWF4X3NpemUgLSB0YXJnZXQpXG4rXHRcdFx0cmV0dXJuIHRhcmdldDtcbitcbitcdFx0dGFyZ2V0ICs9IGxlbjtcbitcdH1cbitcbitcdHJldHVybiB0YXJnZXQ7XG4rfVxuK1xuKy8qIENhbGxlZCB1bmRlciBsb2NrX3NvY2sgd2hlbiBza2Igb3ZlcmhlYWQgZXhjZWVkcyB0aGUgYnVkZ2V0LiAqL1xuK3N0YXRpYyB2b2lkIHZpcnRpb190cmFuc3BvcnRfY29sbGFwc2VfcnhfcXVldWUoc3RydWN0IHZpcnRpb192c29ja19zb2NrICp2dnMpXG4re1xuK1x0LyogVXNlIHRoZSBzYW1lIGxpbmVhciBhbGxvY2F0aW9uIHRocmVzaG9sZCBhcyB2aXJ0aW9fdnNvY2tfYWxsb2Nfc2tiKClcbitcdCAqIHRvIGF2b2lkIGFkZGluZyBwcmVzc3VyZSBvbiB0aGUgcGFnZSBhbGxvY2F0b3IuXG4rXHQgKi9cbitcdHVuc2lnbmVkIGludCBjb2xsYXBzZV9tYXggPSBTS0JfTUFYX09SREVSKFZJUlRJT19WU09DS19TS0JfSEVBRFJPT00sXG4rXHRcdFx0XHRcdFx0ICBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUik7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqbmV4dF9za2IsICpuZXdfc2tiID0gTlVMTDtcbitcdHN0cnVjdCBza19idWZmX2hlYWQgbmV3X3F1ZXVlO1xuK1xuK1x0X19za2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNm5ld19xdWV1ZSk7XG4rXG4rXHRza2JfcXVldWVfd2Fsa19zYWZlKFx1MDAyNnZ2cy1cdTAwM2VyeF9xdWV1ZSwgc2tiLCBuZXh0X3NrYikge1xuK1x0XHRzdHJ1Y3QgdmlydGlvX3Zzb2NrX2hkciAqaGRyID0gdmlydGlvX3Zzb2NrX2hkcihza2IpO1xuK1x0XHR1MzIgc3JjX29mZiA9IFZJUlRJT19WU09DS19TS0JfQ0Ioc2tiKS1cdTAwM2VvZmZzZXQ7XG4rXHRcdHUzMiBzcmNfbGVuID0gc2tiLVx1MDAzZWxlbiAtIHNyY19vZmY7XG4rXHRcdGJvb2wga2VlcCA9IGZhbHNlO1xuK1xuK1x0XHRpZiAoIXZpcnRpb190cmFuc3BvcnRfY2FuX2NvbGxhcHNlKHNrYiwgY29sbGFwc2VfbWF4KSkge1xuK1x0XHRcdC8qIEZpbmFsaXplIHBlbmRpbmcgY29sbGFwc2VkIHNrYiB0byBwcmVzZXJ2ZSBwYWNrZXRcbitcdFx0XHQgKiBvcmRlcmluZy5cbitcdFx0XHQgKi9cbitcdFx0XHRpZiAobmV3X3NrYikge1xuK1x0XHRcdFx0X19za2JfcXVldWVfdGFpbChcdTAwMjZuZXdfcXVldWUsIG5ld19za2IpO1xuK1x0XHRcdFx0bmV3X3NrYiA9IE5VTEw7XG4rXHRcdFx0fVxuK1x0XHRcdGtlZXAgPSB0cnVlO1xuK1x0XHRcdGdvdG8gbmV4dDtcbitcdFx0fVxuK1xuK1x0XHQvKiBGaW5hbGl6ZSBpZiB0aGlzIHBhY2tldCB3b24ndCBmaXQgaW4gdGhlIHJlbWFpbmluZyB0YWlscm9vbSxcbitcdFx0ICogc28gd2UgY2FuIGFsbG9jYXRlIGEgcmlnaHQtc2l6ZWQgbmV3X3NrYi5cbitcdFx0ICovXG4rXHRcdGlmIChuZXdfc2tiIFx1MDAyNlx1MDAyNiBzcmNfbGVuIFx1MDAzZSBza2JfdGFpbHJvb20obmV3X3NrYikpIHtcbitcdFx0XHRfX3NrYl9xdWV1ZV90YWlsKFx1MDAyNm5ld19xdWV1ZSwgbmV3X3NrYik7XG4rXHRcdFx0bmV3X3NrYiA9IE5VTEw7XG4rXHRcdH1cbitcbitcdFx0aWYgKCFuZXdfc2tiKSB7XG4rXHRcdFx0dW5zaWduZWQgaW50IGFsbG9jX3NpemU7XG4rXG4rXHRcdFx0YWxsb2Nfc2l6ZSA9IHZpcnRpb190cmFuc3BvcnRfY29sbGFwc2Vfc2l6ZShza2IsIFx1MDAyNnZ2cy1cdTAwM2VyeF9xdWV1ZSxcbitcdFx0XHRcdFx0XHRcdFx0ICAgIGNvbGxhcHNlX21heCk7XG4rXG4rXHRcdFx0LyogT25seSB0aGlzIHNrYidzIGRhdGEgaXMgZWxpZ2libGUsIG5vdGhpbmcgdG8gbWVyZ2VcbitcdFx0XHQgKiB3aXRoLiBLZWVwIGFzLWlzLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmIChhbGxvY19zaXplIFx1MDAzYz0gc3JjX2xlbikge1xuK1x0XHRcdFx0a2VlcCA9IHRydWU7XG4rXHRcdFx0XHRnb3RvIG5leHQ7XG4rXHRcdFx0fVxuK1xuK1x0XHRcdG5ld19za2IgPSB2aXJ0aW9fdnNvY2tfYWxsb2NfbGluZWFyX3NrYihhbGxvY19zaXplICtcbitcdFx0XHRcdFx0VklSVElPX1ZTT0NLX1NLQl9IRUFEUk9PTSwgR0ZQX0tFUk5FTCk7XG4rXHRcdFx0aWYgKCFuZXdfc2tiKVxuK1x0XHRcdFx0Z290byBvdXQ7XG4rXG4rXHRcdFx0bWVtY3B5KHZpcnRpb192c29ja19oZHIobmV3X3NrYiksIGhkcixcbitcdFx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCB2aXJ0aW9fdnNvY2tfaGRyKSk7XG4rXHRcdFx0dmlydGlvX3Zzb2NrX2hkcihuZXdfc2tiKS1cdTAwM2VsZW4gPSAwO1xuK1x0XHR9XG4rXG4rXHRcdC8qIENhbm5vdCBmYWlsIHNpbmNlIHNyY19vZmYvc3JjX2xlbiBhcmUgd2l0aGluIGJvdW5kcywgYnV0IGlmXG4rXHRcdCAqIGl0IGRvZXMsIGRpc2NhcmQgbmV3X3NrYiB0byBhdm9pZCBxdWV1aW5nIGNvcnJ1cHRlZCBkYXRhLlxuK1x0XHQgKi9cbitcdFx0aWYgKFdBUk5fT05fT05DRShza2JfY29weV9iaXRzKHNrYiwgc3JjX29mZixcbitcdFx0XHRcdFx0ICAgICAgIHNrYl9wdXQobmV3X3NrYiwgc3JjX2xlbiksXG4rXHRcdFx0XHRcdCAgICAgICBzcmNfbGVuKSkpIHtcbitcdFx0XHRrZnJlZV9za2IobmV3X3NrYik7XG4rXHRcdFx0bmV3X3NrYiA9IE5VTEw7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcbitcdFx0bGUzMl9hZGRfY3B1KFx1MDAyNnZpcnRpb192c29ja19oZHIobmV3X3NrYiktXHUwMDNlbGVuLCBzcmNfbGVuKTtcbitcdFx0dmlydGlvX3Zzb2NrX2hkcihuZXdfc2tiKS1cdTAwM2VmbGFncyB8PSBoZHItXHUwMDNlZmxhZ3M7XG4rXG4rbmV4dDpcbitcdFx0X19za2JfdW5saW5rKHNrYiwgXHUwMDI2dnZzLVx1MDAzZXJ4X3F1ZXVlKTtcbitcdFx0aWYgKGtlZXApXG4rXHRcdFx0X19za2JfcXVldWVfdGFpbChcdTAwMjZuZXdfcXVldWUsIHNrYik7XG4rXHRcdGVsc2VcbitcdFx0XHRjb25zdW1lX3NrYihza2IpO1xuK1x0fVxuK291dDpcbitcdGlmIChuZXdfc2tiKVxuK1x0XHRfX3NrYl9xdWV1ZV90YWlsKFx1MDAyNm5ld19xdWV1ZSwgbmV3X3NrYik7XG4rXG4rXHRza2JfcXVldWVfc3BsaWNlKFx1MDAyNm5ld19xdWV1ZSwgXHUwMDI2dnZzLVx1MDAzZXJ4X3F1ZXVlKTtcbit9XG4rXG4gc3RhdGljIGJvb2wgdmlydGlvX3RyYW5zcG9ydF9pbmNfcnhfcGt0KHN0cnVjdCB2aXJ0aW9fdnNvY2tfc29jayAqdnZzLFxuIFx0XHRcdFx0XHR1MzIgbGVuKVxuIHtcbkBAIC0xMzYzLDggKzE0OTQsMjEgQEAgdmlydGlvX3RyYW5zcG9ydF9yZWN2X2VucXVldWUoc3RydWN0IHZzb2NrX3NvY2sgKnZzayxcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZ2dnMtXHUwMDNlcnhfbG9jayk7XG4gXG4gXHRjYW5fZW5xdWV1ZSA9IHZpcnRpb190cmFuc3BvcnRfaW5jX3J4X3BrdCh2dnMsIGxlbik7XG4tXHRpZiAoIWNhbl9lbnF1ZXVlKVxuLVx0XHRnb3RvIG91dDtcbitcdGlmICghY2FuX2VucXVldWUpIHtcbitcdFx0LyogVHJ5IHRvIGNvbGxhcHNlIHRoZSByZWNlaXZlIHF1ZXVlIHRvIHJlZHVjZSBza2Igb3ZlcmhlYWQgYW5kXG4rXHRcdCAqIG1ha2Ugcm9vbSBmb3IgdGhpcyBwYWNrZXQuXG4rXHRcdCAqIFVubG9jayByeF9sb2NrIHNpbmNlIHRoZSBjb2xsYXBzZSBtYXkgc2xlZXAgb3IsIGluIGFueSBjYXNlLFxuK1x0XHQgKiB0YWtlIHNvbWUgdGltZSB0byBjb2xsYXBzZSB0aGUgc2ticywgYnV0IHRoaXMgaXMgc2FmZSwgc2luY2VcbitcdFx0ICogc2tfbG9jayBpcyBoZWxkIGJ5IGNhbGxlciBzbyBubyBvbmUgZWxzZSBjYW4gZW5xdWV1ZSBvclxuK1x0XHQgKiBkZXF1ZXVlLlxuK1x0XHQgKi9cbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dnZzLVx1MDAzZXJ4X2xvY2spO1xuK1x0XHR2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3J4X3F1ZXVlKHZ2cyk7XG4rXHRcdHNwaW5fbG9ja19iaChcdTAwMjZ2dnMtXHUwMDNlcnhfbG9jayk7XG4rXHRcdGNhbl9lbnF1ZXVlID0gdmlydGlvX3RyYW5zcG9ydF9pbmNfcnhfcGt0KHZ2cywgbGVuKTtcbitcdFx0aWYgKCFjYW5fZW5xdWV1ZSlcbitcdFx0XHRnb3RvIG91dDtcbitcdH1cbiBcbiBcdGlmIChsZTMyX3RvX2NwdShoZHItXHUwMDNlZmxhZ3MpIFx1MDAyNiBWSVJUSU9fVlNPQ0tfU0VRX0VPTSlcbiBcdFx0dnZzLVx1MDAzZW1zZ19jb3VudCsrO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3RpbmcvdnNvY2svdnNvY2tfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy92c29jay92c29ja190ZXN0LmNcbmluZGV4IDc2YmUwZTRhN2YwZWU2Li5iNGZmOWY5NDY1NjViOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3RpbmcvdnNvY2svdnNvY2tfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3Zzb2NrL3Zzb2NrX3Rlc3QuY1xuQEAgLTIzNDcsNiArMjM0Nyw4OCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3N0cmVhbV90eF9jcmVkaXRfYm91bmRzX3NlcnZlcihjb25zdCBzdHJ1Y3QgdGVzdF9vcHRzICpvcHRzKVxuIFx0Y2xvc2UoZmQpO1xuIH1cbiBcbisvKiBUZXN0IHRoYXQgbWFueSBzbWFsbCBwYWNrZXRzIGRvbid0IGNhdXNlIGEgY29ubmVjdGlvbiByZXNldCB1bmRlciBwcmVzc3VyZVxuKyAqIGFuZCB0aGF0IGRhdGEgaW50ZWdyaXR5IGlzIHByZXNlcnZlZC4gIFBhY2tldCBzaXplcyB2YXJ5IHJhbmRvbWx5IGJldHdlZW5cbisgKiAxMjkgYW5kIDUxMiBieXRlcywgYWJvdmUgR09PRF9DT1BZX0xFTiAoMTI4KSB0byBieXBhc3MgaW4tcGxhY2UgY29hbGVzY2luZ1xuKyAqIGluIHJlY3ZfZW5xdWV1ZSwgZm9yY2luZyBlYWNoIG9uZSBpbnRvIGl0cyBvd24gc2tiLiAgV2l0aG91dCByZWNlaXZlIHF1ZXVlXG4rICogY29sbGFwc2luZywgdGhlIHBlci1za2Igb3ZlcmhlYWQgZXZlbnR1YWxseSBleGNlZWRzIGJ1Zl9hbGxvYyBhbmQgdGhlXG4rICogY29ubmVjdGlvbiBpcyByZXNldC5cbisgKi9cbisjZGVmaW5lIENPTExBUFNFX1BLVF9NSU4gMTI5XG4rI2RlZmluZSBDT0xMQVBTRV9QS1RfTUFYIDUxMlxuKyNkZWZpbmUgQ09MTEFQU0VfVE9UQUwgKDIgKiAxMDI0ICogMTAyNClcbitcbitzdGF0aWMgdm9pZCB0ZXN0X3N0cmVhbV9jb2xsYXBzZV9jbGllbnQoY29uc3Qgc3RydWN0IHRlc3Rfb3B0cyAqb3B0cylcbit7XG4rXHR1bnNpZ25lZCBjaGFyICpkYXRhO1xuK1x0dW5zaWduZWQgbG9uZyBoYXNoO1xuK1x0c2l6ZV90IG9mZnNldCA9IDA7XG4rXHRpbnQgaSwgZmQ7XG4rXG4rXHRkYXRhID0gbWFsbG9jKENPTExBUFNFX1RPVEFMKTtcbitcdGlmICghZGF0YSkge1xuK1x0XHRwZXJyb3IoXCJtYWxsb2NcIik7XG4rXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbitcdH1cbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIENPTExBUFNFX1RPVEFMOyBpKyspXG4rXHRcdGRhdGFbaV0gPSByYW5kKCkgXHUwMDI2IDB4ZmY7XG4rXG4rXHRmZCA9IHZzb2NrX3N0cmVhbV9jb25uZWN0KG9wdHMtXHUwMDNlcGVlcl9jaWQsIG9wdHMtXHUwMDNlcGVlcl9wb3J0KTtcbitcdGlmIChmZCBcdTAwM2MgMCkge1xuK1x0XHRwZXJyb3IoXCJjb25uZWN0XCIpO1xuK1x0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4rXHR9XG4rXG4rXHR3aGlsZSAob2Zmc2V0IFx1MDAzYyBDT0xMQVBTRV9UT1RBTCkge1xuK1x0XHRzaXplX3QgcGt0X3NpemUgPSBDT0xMQVBTRV9QS1RfTUlOICtcbitcdFx0XHRyYW5kKCkgJSAoQ09MTEFQU0VfUEtUX01BWCAtIENPTExBUFNFX1BLVF9NSU4gKyAxKTtcbitcbitcdFx0cGt0X3NpemUgPSBtaW4ocGt0X3NpemUsIENPTExBUFNFX1RPVEFMIC0gb2Zmc2V0KTtcbitcbitcdFx0c2VuZF9idWYoZmQsIGRhdGEgKyBvZmZzZXQsIHBrdF9zaXplLCAwLCBwa3Rfc2l6ZSk7XG4rXHRcdG9mZnNldCArPSBwa3Rfc2l6ZTtcbitcdH1cbitcbitcdGhhc2ggPSBoYXNoX2RqYjIoZGF0YSwgQ09MTEFQU0VfVE9UQUwpO1xuK1x0Y29udHJvbF93cml0ZXVsb25nKGhhc2gpO1xuK1xuK1x0ZnJlZShkYXRhKTtcbitcdGNsb3NlKGZkKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9zdHJlYW1fY29sbGFwc2Vfc2VydmVyKGNvbnN0IHN0cnVjdCB0ZXN0X29wdHMgKm9wdHMpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBoYXNoLCByZW1vdGVfaGFzaDtcbitcdHVuc2lnbmVkIGNoYXIgKmRhdGE7XG4rXHRpbnQgZmQ7XG4rXG4rXHRkYXRhID0gbWFsbG9jKENPTExBUFNFX1RPVEFMKTtcbitcdGlmICghZGF0YSkge1xuK1x0XHRwZXJyb3IoXCJtYWxsb2NcIik7XG4rXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbitcdH1cbitcbitcdGZkID0gdnNvY2tfc3RyZWFtX2FjY2VwdChWTUFERFJfQ0lEX0FOWSwgb3B0cy1cdTAwM2VwZWVyX3BvcnQsIE5VTEwpO1xuK1x0aWYgKGZkIFx1MDAzYyAwKSB7XG4rXHRcdHBlcnJvcihcImFjY2VwdFwiKTtcbitcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuK1x0fVxuK1xuK1x0cmVjdl9idWYoZmQsIGRhdGEsIENPTExBUFNFX1RPVEFMLCAwLCBDT0xMQVBTRV9UT1RBTCk7XG4rXG4rXHRoYXNoID0gaGFzaF9kamIyKGRhdGEsIENPTExBUFNFX1RPVEFMKTtcbitcdHJlbW90ZV9oYXNoID0gY29udHJvbF9yZWFkdWxvbmcoKTtcbitcdGlmIChoYXNoICE9IHJlbW90ZV9oYXNoKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcImhhc2ggbWlzbWF0Y2g6IGxvY2FsICVsdSByZW1vdGUgJWx1XFxuXCIsXG4rXHRcdFx0aGFzaCwgcmVtb3RlX2hhc2gpO1xuK1x0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4rXHR9XG4rXG4rXHRmcmVlKGRhdGEpO1xuK1x0Y2xvc2UoZmQpO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IHRlc3RfY2FzZSB0ZXN0X2Nhc2VzW10gPSB7XG4gXHR7XG4gXHRcdC5uYW1lID0gXCJTT0NLX1NUUkVBTSBjb25uZWN0aW9uIHJlc2V0XCIsXG5AQCAtMjU0Niw2ICsyNjI4LDExIEBAIHN0YXRpYyBzdHJ1Y3QgdGVzdF9jYXNlIHRlc3RfY2FzZXNbXSA9IHtcbiBcdFx0LnJ1bl9jbGllbnQgPSB0ZXN0X3N0cmVhbV9tc2dfcGVla19jbGllbnQsXG4gXHRcdC5ydW5fc2VydmVyID0gdGVzdF9zdHJlYW1fcGVla19hZnRlcl9yZWN2X3NlcnZlcixcbiBcdH0sXG4rXHR7XG4rXHRcdC5uYW1lID0gXCJTT0NLX1NUUkVBTSBzbWFsbCBwYWNrZXRzIGJhY2twcmVzc3VyZVwiLFxuK1x0XHQucnVuX2NsaWVudCA9IHRlc3Rfc3RyZWFtX2NvbGxhcHNlX2NsaWVudCxcbitcdFx0LnJ1bl9zZXJ2ZXIgPSB0ZXN0X3N0cmVhbV9jb2xsYXBzZV9zZXJ2ZXIsXG4rXHR9LFxuIFx0e30sXG4gfTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjI5OjM2Ljc1OTg2ODc3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE5MDU0NDQxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZzb2NrIFZpcnRpbyBUcmFuc3BvcnQgQ29sbGFwc2UgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCdzIG1ha2luZyBjaGFuZ2VzIHRvIGBuZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNgLiBJdCdzIGludHJvZHVjaW5nIGEgZmV3IG5ldyBmdW5jdGlvbnM6IGB2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3J4X3F1ZXVlYCwgYHZpcnRpb190cmFuc3BvcnRfY29sbGFwc2Vfc2l6ZWAsIGFuZCBgdmlydGlvX3RyYW5zcG9ydF9jYW5fY29sbGFwc2VgLiBGcm9tIHdoYXQgSSBjYW4gdGVsbCwgaXQgbG9va3MgbGlrZSBgdmlydGlvX3RyYW5zcG9ydF9jb2xsYXBzZV9yeF9xdWV1ZWAgaXMgYmVpbmcgY2FsbGVkIHdpdGhpbiBgdmlydGlvX3RyYW5zcG9ydF9yZWN2X2VucXVldWVgLCBzcGVjaWZpY2FsbHkgd2hlbiBgdmlydGlvX3RyYW5zcG9ydF9pbmNfcnhfcGt0YCByZXR1cm5zIGZhbHNlLiBUaGlzIGlzIHByZXR0eSBzaWduaWZpY2FudDsgaXQncyByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhlIHZzb2NrIHZpcnRpbyB0cmFuc3BvcnQgbG9naWMsIG1hbmFnaW5nIHRoZSByZWNlaXZlIHF1ZXVlIGFuZCBvcHRpbWl6aW5nIGl0IGJ5IGNvbGxhcHNpbmcgU0tCcyB0byByZWR1Y2Ugb3ZlcmhlYWQuIEZ1bmN0aW9uYWxseSwgdGhpcyBsb29rcyBsaWtlIGEgZ29vZCBjaGFuZ2UuIE15IHNwaWRleS1zZW5zZSBpcyB0ZWxsaW5nIG1lIHRoaXMgaXMgZGVmaW5pdGVseSBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBXZSdyZSBkaXJlY3RseSBtYW5pcHVsYXRpbmcgdGhlIHJlY2VpdmUgcGF0aCBpbiBhIGNyaXRpY2FsIGFyZWEuXG5cbk5vdywgbGV0J3MgZmlndXJlIG91dCB3aGF0IENPTkZJRyBvcHRpb25zIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkuIFRoZSBjb2RlIGl0c2VsZiBpcyBpbiBgbmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jYCwgc28gSSdsbCBjaGVjayBlaXRoZXIgYG5ldC92bXdfdnNvY2svTWFrZWZpbGVgIG9yIGBuZXQvdm13X3Zzb2NrL0tjb25maWdgIHRvIHNlZSB3aGljaCBjb25maWd1cmF0aW9uIGtub2JzIGNvbnRyb2wgaXQuIEZpbmRpbmcgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIHdpbGwgYmUga2V5IHRvIGNyZWF0aW5nIGEgcmVwcm9kdWNpYmxlIHRlc3QgZW52aXJvbm1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3ODksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxODoyOTo0MS45NTA0MTU1NDZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE1OTcyOTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZpcnRpb190cmFuc3BvcnRfY29tbW9uLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Ztd192c29jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Ztd192c29jay9NYWtlZmlsZT01PW9iai0kKENPTkZJR19WSVJUSU9fVlNPQ0tFVFMpICs9IHZtd192c29ja192aXJ0aW9fdHJhbnNwb3J0Lm9cXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX1ZJUlRJT19WU09DS0VUU19DT01NT04pICs9IHZtd192c29ja192aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5vXFxubmV0L3Ztd192c29jay9NYWtlZmlsZS03LW9iai0kKENPTkZJR19IWVBFUlZfVlNPQ0tFVFMpICs9IGh2X3NvY2sub1xcbi0tXFxubmV0L3Ztd192c29jay9NYWtlZmlsZT0xOD12bXdfdnNvY2tfdmlydGlvX3RyYW5zcG9ydC15ICs9IHZpcnRpb190cmFuc3BvcnQub1xcbm5ldC92bXdfdnNvY2svTWFrZWZpbGUtMTktXFxubmV0L3Ztd192c29jay9NYWtlZmlsZToyMDp2bXdfdnNvY2tfdmlydGlvX3RyYW5zcG9ydF9jb21tb24teSArPSB2aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5vXFxubmV0L3Ztd192c29jay9NYWtlZmlsZS0yMS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6Mjk6NDIuMzY2Mzk1MTE1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI2Mjg5MTc1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKlVuZGVyc3RhbmRpbmcgdGhlIFZpcnRpbyB2c29jayBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIGBDT05GSUdfVklSVElPX1ZTT0NLRVRTX0NPTU1PTmAgaXMgdGhlIGNvcmUgcGllY2UgaGVyZSwgdGhlIGZvdW5kYXRpb24uIEJ1dCBpdCdzIG5vdCB1c3VhbGx5IGRpcmVjdGx5IHNlbGVjdGVkLCBpdCdzIHR5cGljYWxseSBicm91Z2h0IGluIHRyYW5zaXRpdmVseSB0aHJvdWdoIGVpdGhlciBgQ09ORklHX1ZJUlRJT19WU09DS0VUU2Agb3IgYENPTkZJR19WSE9TVF9WU09DS2AuIE1ha2VzIHNlbnNlLCB0aGUgY29tbW9uIHN0dWZmIGlzIGEgZGVwZW5kZW5jeS4gTm93LCB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoZXNlIGRlcGVuZGVuY2llcyBhcmUgZGVmaW5lZCBhbmQgd2hhdCB0aGUgb3B0aW9ucyBhcmUsIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgYG5ldC92bXdfdnNvY2svS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHdoZXJlIHRoZSBjb25maWd1cmF0aW9uIGxvZ2ljIGxpdmVzLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTY3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6Mjk6NDUuNjI5Mjg4ODYxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NzUzNTE1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJWSVJUSU9fVlNPQ0tFVFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Ztd192c29jay9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC92bXdfdnNvY2svS2NvbmZpZz0yOT1jb25maWcgVlNPQ0tFVFNfTE9PUEJBQ0tcXG4tLVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZy0zMi1cXHRkZWZhdWx0IHlcXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6MzM6XFx0c2VsZWN0IFZJUlRJT19WU09DS0VUU19DT01NT05cXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMzQtXFx0aGVscFxcbi0tXFxubmV0L3Ztd192c29jay9LY29uZmlnPTQxPWNvbmZpZyBWTVdBUkVfVk1DSV9WU09DS0VUU1xcbi0tXFxubmV0L3Ztd192c29jay9LY29uZmlnLTUyLVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZzo1Mzpjb25maWcgVklSVElPX1ZTT0NLRVRTXFxubmV0L3Ztd192c29jay9LY29uZmlnLTU0LVxcdHRyaXN0YXRlIFxcXCJ2aXJ0aW8gdHJhbnNwb3J0IGZvciBWaXJ0dWFsIFNvY2tldHNcXFwiXFxubmV0L3Ztd192c29jay9LY29uZmlnLTU1LVxcdGRlcGVuZHMgb24gVlNPQ0tFVFMgXFx1MDAyNlxcdTAwMjYgVklSVElPXFxubmV0L3Ztd192c29jay9LY29uZmlnOjU2OlxcdHNlbGVjdCBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXFxubmV0L3Ztd192c29jay9LY29uZmlnLTU3LVxcdGhlbHBcXG4tLVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZy02NS1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6NjY6Y29uZmlnIFZJUlRJT19WU09DS0VUU19DT01NT05cXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNjctXFx0dHJpc3RhdGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6Mjk6NDUuOTA2ODI4ODQ0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA4MTgxODA2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llczogVmlydGlvIHZzLiB2aG9zdF92c29jayoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhlc2Uga2VybmVsIGNvbmZpZ3VyYXRpb25zIGludGVycmVsYXRlLiBJIHNlZSB0aGF0IGVuYWJsaW5nIGBDT05GSUdfVklSVElPX1ZTT0NLRVRTYCBhbmQgYENPTkZJR19WU09DS0VUU19MT09QQkFDS2AgKmJvdGgqIHB1bGwgaW4gYENPTkZJR19WSVJUSU9fVlNPQ0tFVFNfQ09NTU9OYC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyBpdCBzdWdnZXN0cyB0aGVyZSdzIHNvbWUgY29yZSwgc2hhcmVkIGluZnJhc3RydWN0dXJlIHRoZXkgYm90aCByZWx5IG9uIGZvciBWaXJ0SU8tYmFzZWQgdnNvY2sgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIGtlZXAgdGhhdCBkZXBlbmRlbmN5IGluIG1pbmQgd2hlbiBkZWJ1Z2dpbmcgb3IgY29uZmlndXJpbmcgdnNvY2suIEl0J3MgZ29vZCB0byBzZWUgdGhhdCBraW5kIG9mIGZhY3RvcmVkIGFwcHJvYWNoOyBtaW5pbWl6ZXMgY29kZSBkdXBsaWNhdGlvbiBhbmQgaW1wcm92ZXMgbWFpbnRhaW5hYmlsaXR5LlxuXG5Ob3csIEkgYWxzbyB3YW50IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUgb2YgaG93IHZzb2NrIGlzIHVzZWQsIHNvIGxldCdzIGNyb3NzLXJlZmVyZW5jZSB0aGUgYGRyaXZlcnMvdmhvc3QvS2NvbmZpZ2AgZmlsZS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBgVkhPU1RfVlNPQ0tgIG9wdGlvbi4gSSdtIGFzc3VtaW5nIHRoYXQgbWlnaHQgY292ZXIgdGhlIHZob3N0LWJhc2VkIHZpcnR1YWwgc29ja2V0cywgcG90ZW50aWFsbHkgZm9yIHBhcmF2aXJ0dWFsaXplZCBndWVzdHMuIFVuZGVyc3RhbmRpbmcgdGhhdCBjb25uZWN0aW9uIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBkaWZmZXJlbnQgb3B0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdmlydGlvLWJhc2VkIHZzb2NrIGltcGxlbWVudGF0aW9uIGFuZCB0aGUgdmhvc3QtYmFzZWQgaW1wbGVtZW50YXRpb24uIEl0IGhlbHBzIHRvIGhhdmUgYSBoYW5kbGUgb24gKmFsbCogdGhlIHZzb2NrIG9wdGlvbnMuIEl0J3MgYWJvdXQgcHV0dGluZyB0b2dldGhlciBhbGwgdGhlIHB1enpsZSBwaWVjZXMgdG8gc2VlIGhvdyB0aGlzIGFsbCBjb25uZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE0MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjI5OjQ5Ljk4ODY0ODg5OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc0MDg5NTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlZJUlRJT19WU09DS0VUU19DT01NT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvS2NvbmZpZz01Nj1jb25maWcgVkhPU1RfVlNPQ0tcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy01OS1cXHRzZWxlY3QgVkhPU1RcXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NjA6XFx0c2VsZWN0IFZJUlRJT19WU09DS0VUU19DT01NT05cXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNjEtXFx0ZGVmYXVsdCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjI5OjUxLjQ2Mjc0MzY3MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczNDA3NzM1MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVlNvY2sgUlggUXVldWUgQ29sbGFwc2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBWU29jayBjb25maWd1cmF0aW9uczogYENPTkZJR19WSVJUSU9fVlNPQ0tFVFNgLCBgQ09ORklHX1ZIT1NUX1ZTT0NLYCwgYW5kIGBDT05GSUdfVlNPQ0tFVFNfTE9PUEJBQ0tgLiBJJ2xsIG1ha2Ugc3VyZSB0aG9zZSBhcmUgZW5hYmxlZCwgYWxvbmcgd2l0aCBgVklSVElPX1ZTT0NLRVRTYCwgYFZIT1NUX1ZTT0NLYCwgYW5kIGBWU09DS0VUU19MT09QQkFDS2AgdGhlbXNlbHZlcywgYXMgdGhleSdyZSBjbGVhcmx5IGltcG9ydGFudC5cblxuTm93LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrczogZmluZGluZyB0aGUgY3J1Y2lhbCBzeW1ib2xzIHRvIHVuZGVyc3RhbmQuIFRoZSBuZXcgZnVuY3Rpb25zIGFyZSBgdmlydGlvX3RyYW5zcG9ydF9jYW5fY29sbGFwc2VgLCBgdmlydGlvX3RyYW5zcG9ydF9jb2xsYXBzZV9zaXplYCwgYW5kIGB2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3J4X3F1ZXVlYC4gVGhlIGV4aXN0aW5nIGZ1bmN0aW9uIG1vZGlmaWVkIGlzIGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfZW5xdWV1ZWAuXG5cblNpbmNlIGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfZW5xdWV1ZWAgaXMgYSBob3QtcGF0aCBmdW5jdGlvbiwgY2FsbGVkIG9uICpldmVyeSogcGFja2V0IGVucXVldWVkLCB0aGF0IHRlbGxzIG1lIHRoZSBjb2xsYXBzZSBmdW5jdGlvbnMgYXJlIGludm9rZWQgd2hlbiBhIHRocmVzaG9sZCBpcyBtZXQuIFNwZWNpZmljYWxseSwgd2hlbiBgdmlydGlvX3RyYW5zcG9ydF9pbmNfcnhfcGt0YCByZXR1cm5zIGZhbHNlLCB3aGljaCBzdWdnZXN0cyB0aGUgUlggcXVldWUgb3ZlcmhlYWQgaGFzIGV4Y2VlZGVkIGl0cyBhbGxvd2VkIGJ1ZGdldC4gVGhhdCBtZWFucyBgdmlydGlvX3RyYW5zcG9ydF9jb2xsYXBzZV9yeF9xdWV1ZWAgaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZvY3VzZWQgYW5hbHlzaXMuIFdoaWxlIGB2aXJ0aW9fdHJhbnNwb3J0X2Nhbl9jb2xsYXBzZWAgYW5kIGB2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3NpemVgIGFyZSBzdGF0aWMgYW5kIHBvdGVudGlhbGx5IGlubGluZWQsIHRoZXkgYXJlIHN0aWxsIGltcG9ydGFudCBhbmQgYXJlIHdvcnRoIG5vdGluZyB0b28uXG5cbkxldCBtZSBjb25maXJtIGlmIG15IGh1bmNoIGlzIGNvcnJlY3QgYWJvdXQgdGhvc2UgZmlyc3QgdHdvIGJlaW5nIHN0YXRpYy4gKkNoZWNrcyBDb2RlLi4uKiBZZXAsIHRoZXkgYXJlLlxuXG5gYGBjXG5zdGF0aWMgYm9vbCB2aXJ0aW9fdHJhbnNwb3J0X2Nhbl9jb2xsYXBzZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuXHRcdFx0XHRcdCAgdW5zaWduZWQgaW50IHNpemUpXG5zdGF0aWMgdW5zaWduZWQgaW50XG52aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3NpemUoc3RydWN0IHNrX2J1ZmYgKnNrYixcblx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpxdWV1ZSxcblx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbWF4X3NpemUpXG5zdGF0aWMgdm9pZCB2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3J4X3F1ZXVlKHN0cnVjdCB2aXJ0aW9fdnNvY2tfc29jayAqdnZzKVxuYGBgXG5cblNvLCB0aGUgZm9jdXMgc3ltYm9scyBhcmUgZGVmaW5pdGVseTogYHZpcnRpb190cmFuc3BvcnRfY29sbGFwc2VfcnhfcXVldWVgLCBgdmlydGlvX3RyYW5zcG9ydF9jb2xsYXBzZV9zaXplYCwgYW5kIGB2aXJ0aW9fdHJhbnNwb3J0X2Nhbl9jb2xsYXBzZWAuXG5cbkxldCdzIHF1aWNrbHkgdmVyaWZ5IHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBhbGwgZGVmaW5lZCB3aXRoaW4gYG5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2MzEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6Mjk6NTguODAzNTM3NzEyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTkwMTQ5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmlydGlvX3RyYW5zcG9ydF9jb2xsYXBzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jPTQ0Mz1zdGF0aWMgdW5zaWduZWQgaW50XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjQ0NDp2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3NpemUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtNDQ1LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpxdWV1ZSxcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy00NjMtLyogQ2FsbGVkIHVuZGVyIGxvY2tfc29jayB3aGVuIHNrYiBvdmVyaGVhZCBleGNlZWRzIHRoZSBidWRnZXQuICovXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjQ2NDpzdGF0aWMgdm9pZCB2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3J4X3F1ZXVlKHN0cnVjdCB2aXJ0aW9fdnNvY2tfc29jayAqdnZzKVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy00NjUte1xcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTUwNC1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6NTA1OlxcdFxcdFxcdGFsbG9jX3NpemUgPSB2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3NpemUoc2tiLCBcXHUwMDI2dnZzLVxcdTAwM2VyeF9xdWV1ZSxcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtNTA2LVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBjb2xsYXBzZV9tYXgpO1xcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jPTE0ODM9dmlydGlvX3RyYW5zcG9ydF9yZWN2X2VucXVldWUoc3RydWN0IHZzb2NrX3NvY2sgKnZzayxcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xNTA1LVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ2dnMtXFx1MDAzZXJ4X2xvY2spO1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoxNTA2OlxcdFxcdHZpcnRpb190cmFuc3BvcnRfY29sbGFwc2VfcnhfcXVldWUodnZzKTtcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTUwNy1cXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnZ2cy1cXHUwMDNlcnhfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjI5OjU5LjIwMjU2NDc3MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Njc0OTYyNDIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFZpcnRpbyBWU29jayBDb2xsYXBzZSBQYXRjaCoqXG5cbk9rYXksIHRoZSBuZXcgY29sbGFwc2UgZnVuY3Rpb25zIGFyZSBkZWZpbml0ZWx5IHByZXNlbnQuIEknbGwgbWFrZSBzdXJlIHRvIGluY2x1ZGUgYHZpcnRpb190cmFuc3BvcnRfY29sbGFwc2VfcnhfcXVldWVgLCBgdmlydGlvX3RyYW5zcG9ydF9jb2xsYXBzZV9zaXplYCwgYW5kIGB2aXJ0aW9fdHJhbnNwb3J0X2Nhbl9jb2xsYXBzZWAgaW4gbXkgYW5hbHlzaXMuIFRoaXMgc2VlbXMgbGlrZSB0aGUga2V5IGFyZWEgdG8gdGFyZ2V0LlxuXG5Mb29raW5nIGF0IHRoZSBjb25maWdzLCBJIHNlZSB0aGF0IHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgdGhlIGNvcmUgdnNvY2sgdmlydGlvIHRyYW5zcG9ydCBsb2dpYywgd2hpY2ggaXMgZ29vZCDigJMgaXQncyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwsIGFzIHN0YXRlZC4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgY29uZmlncy4gSSBrbm93IEkgbmVlZCBgVklSVElPX1ZTT0NLRVRTYCwgYFZIT1NUX1ZTT0NLYCwgYW5kIGBWU09DS0VUU19MT09QQkFDS2AuIEFuZCwgY2hlY2tpbmcsIHllcywgYFZTT0NLRVRTYCBpcyB0aGUgYmFzZSBjb25maWcsIGBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OYCBpcyB0aGUgbW9kdWxlLCBzbyBhbGwgdGhvc2UgZmxhZ3MgYXJlIGFwcHJvcHJpYXRlIGFuZCB0aGUgY29ycmVjdCBiYXNlLiBHb29kLlxuXG5UaGUgZGVzY3JpcHRpb24gaXMgY2xlYXI6IHRoZSBpbnRlbnRpb24gaXMgdG8gYWRkcmVzcyBjb25uZWN0aW9uIHJlc2V0cyB1bmRlciBtZW1vcnkgcHJlc3N1cmUgYnkgY29sbGFwc2luZyBzbWFsbCBwYWNrZXRzIGluIHRoZSByZWNlaXZlIHF1ZXVlLiBUaGlzIG1ha2VzIHNlbnNlOyBpdCdzIGEgZ29vZCBvcHRpbWl6YXRpb24gc3RyYXRlZ3kuIFRoZSBuZXdseSBhZGRlZCBmdW5jdGlvbnMgYXJlIHdoZXJlIEknbGwgY29uY2VudHJhdGUgbXkgZnV6emluZyBlZmZvcnRzLlxuXG5BbHJpZ2h0LCBJJ20gcmVhZHkgdG8gY2FsbCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA4MywiT3V0cHV0VG9rZW5zIjoxNDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6MzA6MDQuODc3NTI5NjI1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA5MzA1ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZTT0NLRVRTXCIsXG4gICAgXCJWSVJUSU9fVlNPQ0tFVFNcIixcbiAgICBcIlZIT1NUX1ZTT0NLXCIsXG4gICAgXCJWU09DS0VUU19MT09QQkFDS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZpcnRpb190cmFuc3BvcnRfY29sbGFwc2VfcnhfcXVldWVcIixcbiAgICBcInZpcnRpb190cmFuc3BvcnRfY29sbGFwc2Vfc2l6ZVwiLFxuICAgIFwidmlydGlvX3RyYW5zcG9ydF9jYW5fY29sbGFwc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG1lY2hhbmlzbSB0byBjb2xsYXBzZSBzbWFsbCBwYWNrZXRzIGluIHRoZSB2aXJ0aW8gdnNvY2sgcmVjZWl2ZSBxdWV1ZSB0byBwcmV2ZW50IGNvbm5lY3Rpb24gcmVzZXRzIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4gSXQgbW9kaWZpZXMgY29yZSB2c29jayB2aXJ0aW8gdHJhbnNwb3J0IGxvZ2ljIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbC4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ld2x5IGFkZGVkIGNvbGxhcHNlIGZ1bmN0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWU09DS0VUU1wiLFxuICAgIFwiVklSVElPX1ZTT0NLRVRTXCIsXG4gICAgXCJWSE9TVF9WU09DS1wiLFxuICAgIFwiVlNPQ0tFVFNfTE9PUEJBQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3J4X3F1ZXVlXCIsXG4gICAgXCJ2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3NpemVcIixcbiAgICBcInZpcnRpb190cmFuc3BvcnRfY2FuX2NvbGxhcHNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBtZWNoYW5pc20gdG8gY29sbGFwc2Ugc21hbGwgcGFja2V0cyBpbiB0aGUgdmlydGlvIHZzb2NrIHJlY2VpdmUgcXVldWUgdG8gcHJldmVudCBjb25uZWN0aW9uIHJlc2V0cyB1bmRlciBtZW1vcnkgcHJlc3N1cmUuIEl0IG1vZGlmaWVzIGNvcmUgdnNvY2sgdmlydGlvIHRyYW5zcG9ydCBsb2dpYyB3aGljaCBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXdseSBhZGRlZCBjb2xsYXBzZSBmdW5jdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowbd4mc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-26 18:19:24 +0000 UTC FinishedAt: 2026-06-26 18:30:06 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "805185b7c7a1069e407b6f7b3bc98e44d415f484", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VSOCKETS", "VIRTIO_VSOCKETS", "VHOST_VSOCK", "VSOCKETS_LOOPBACK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "805185b7c7a1069e407b6f7b3bc98e44d415f484", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VSOCKETS", "VIRTIO_VSOCKETS", "VHOST_VSOCK", "VSOCKETS_LOOPBACK" ], "series_id": "9259d32f-e8b8-4ab6-b09d-8722e35e65dc" }, "track": "KASAN", "fuzz": { "focus": [ "kvm", "net" ], "focus_symbols": [ "virtio_transport_collapse_rx_queue", "virtio_transport_collapse_size", "virtio_transport_can_collapse" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZTT0NLRVRTJiMzNDssCiAgICAmIzM0O1ZJUlRJT19WU09DS0VUUyYjMzQ7LAogICAgJiMzNDtWSE9TVF9WU09DSyYjMzQ7LAogICAgJiMzNDtWU09DS0VUU19MT09QQkFDSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZpcnRpb190cmFuc3BvcnRfY29sbGFwc2VfcnhfcXVldWUmIzM0OywKICAgICYjMzQ7dmlydGlvX3RyYW5zcG9ydF9jb2xsYXBzZV9zaXplJiMzNDssCiAgICAmIzM0O3ZpcnRpb190cmFuc3BvcnRfY2FuX2NvbGxhcHNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbWVjaGFuaXNtIHRvIGNvbGxhcHNlIHNtYWxsIHBhY2tldHMgaW4gdGhlIHZpcnRpbyB2c29jayByZWNlaXZlIHF1ZXVlIHRvIHByZXZlbnQgY29ubmVjdGlvbiByZXNldHMgdW5kZXIgbWVtb3J5IHByZXNzdXJlLiBJdCBtb2RpZmllcyBjb3JlIHZzb2NrIHZpcnRpbyB0cmFuc3BvcnQgbG9naWMgd2hpY2ggaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3bHkgYWRkZWQgY29sbGFwc2UgZnVuY3Rpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjI5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZmE1ODk5ZmVkYWZkYzdiZWE4YjAyM2ExYWU2MzQwNGI0MzAyODg4OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVuIDI2IDE4OjI5OjM0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYyBiL25ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uY1xuaW5kZXggMDk0NzUwMDcxNjViMzYuLjMwNGVhNDI0OTk1ZDRkIDEwMDY0NFxuLS0tIGEvbmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNcbkBAIC00MjAsNiAmIzQzOzQyMCwxMzcgQEAgc3RhdGljIGludCB2aXJ0aW9fdHJhbnNwb3J0X3NlbmRfcGt0X2luZm8oc3RydWN0IHZzb2NrX3NvY2sgKnZzayxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCB2aXJ0aW9fdHJhbnNwb3J0X2Nhbl9jb2xsYXBzZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiM0MztcdFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdC8qIHNrYnMgdGhhdCBhcmUgcGFydGlhbGx5IGNvbnN1bWVkLCBtYXJrIGEgU0VRUEFDS0VUIG1lc3NhZ2UgYm91bmRhcnksXG4mIzQzO1x0ICogb3IgYXJlIGFscmVhZHkgbGFyZ2UgZW5vdWdoIHNob3VsZCBub3QgYmUgY29sbGFwc2VkOiB0aGV5IGVpdGhlclxuJiM0MztcdCAqIG5lZWQgc3BlY2lhbCBhY2NvdW50aW5nLCBjYXJyeSBwcm90b2NvbCBzdGF0ZSwgb3IgYWxyZWFkeSBoYXZlIGFcbiYjNDM7XHQgKiBnb29kIGRhdGEtdG8tb3ZlcmhlYWQgcmF0aW8uXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKFZJUlRJT19WU09DS19TS0JfQ0Ioc2tiKS1cdTAwM2VvZmZzZXQpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0aWYgKGxlMzJfdG9fY3B1KHZpcnRpb192c29ja19oZHIoc2tiKS1cdTAwM2VmbGFncykgXHUwMDI2IFZJUlRJT19WU09DS19TRVFfRU9NKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzZT0gc2l6ZSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogSXRlcmF0ZSB0aHJvdWdoIHRoZSBwYWNrZXRzIGluIHRoZSBxdWV1ZSBzdGFydGluZyBmcm9tIHRoZSBjdXJyZW50IHNrYiB0b1xuJiM0MzsgKiBjb3VudCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdlIGNhbiBjb2xsYXBzZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnRcbiYjNDM7dmlydGlvX3RyYW5zcG9ydF9jb2xsYXBzZV9zaXplKHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpxdWV1ZSxcbiYjNDM7XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBtYXhfc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCB0YXJnZXQgPSBza2ItXHUwMDNlbGVuIC0gVklSVElPX1ZTT0NLX1NLQl9DQihza2IpLVx1MDAzZW9mZnNldDtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKChza2IgPSBza2JfcGVla19uZXh0KHNrYiwgcXVldWUpKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgdmlydGlvX3RyYW5zcG9ydF9jYW5fY29sbGFwc2Uoc2tiLCBtYXhfc2l6ZSkpIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBsZW4gPSBza2ItXHUwMDNlbGVuIC0gVklSVElPX1ZTT0NLX1NLQl9DQihza2IpLVx1MDAzZW9mZnNldDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobGVuIFx1MDAzZSBtYXhfc2l6ZSAtIHRhcmdldClcbiYjNDM7XHRcdFx0cmV0dXJuIHRhcmdldDtcbiYjNDM7XG4mIzQzO1x0XHR0YXJnZXQgJiM0Mzs9IGxlbjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiB0YXJnZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIENhbGxlZCB1bmRlciBsb2NrX3NvY2sgd2hlbiBza2Igb3ZlcmhlYWQgZXhjZWVkcyB0aGUgYnVkZ2V0LiAqL1xuJiM0MztzdGF0aWMgdm9pZCB2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3J4X3F1ZXVlKHN0cnVjdCB2aXJ0aW9fdnNvY2tfc29jayAqdnZzKVxuJiM0Mzt7XG4mIzQzO1x0LyogVXNlIHRoZSBzYW1lIGxpbmVhciBhbGxvY2F0aW9uIHRocmVzaG9sZCBhcyB2aXJ0aW9fdnNvY2tfYWxsb2Nfc2tiKClcbiYjNDM7XHQgKiB0byBhdm9pZCBhZGRpbmcgcHJlc3N1cmUgb24gdGhlIHBhZ2UgYWxsb2NhdG9yLlxuJiM0MztcdCAqL1xuJiM0MztcdHVuc2lnbmVkIGludCBjb2xsYXBzZV9tYXggPSBTS0JfTUFYX09SREVSKFZJUlRJT19WU09DS19TS0JfSEVBRFJPT00sXG4mIzQzO1x0XHRcdFx0XHRcdCAgUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpO1xuJiM0MztcdHN0cnVjdCBza19idWZmICpza2IsICpuZXh0X3NrYiwgKm5ld19za2IgPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBza19idWZmX2hlYWQgbmV3X3F1ZXVlO1xuJiM0MztcbiYjNDM7XHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2bmV3X3F1ZXVlKTtcbiYjNDM7XG4mIzQzO1x0c2tiX3F1ZXVlX3dhbGtfc2FmZShcdTAwMjZ2dnMtXHUwMDNlcnhfcXVldWUsIHNrYiwgbmV4dF9za2IpIHtcbiYjNDM7XHRcdHN0cnVjdCB2aXJ0aW9fdnNvY2tfaGRyICpoZHIgPSB2aXJ0aW9fdnNvY2tfaGRyKHNrYik7XG4mIzQzO1x0XHR1MzIgc3JjX29mZiA9IFZJUlRJT19WU09DS19TS0JfQ0Ioc2tiKS1cdTAwM2VvZmZzZXQ7XG4mIzQzO1x0XHR1MzIgc3JjX2xlbiA9IHNrYi1cdTAwM2VsZW4gLSBzcmNfb2ZmO1xuJiM0MztcdFx0Ym9vbCBrZWVwID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCF2aXJ0aW9fdHJhbnNwb3J0X2Nhbl9jb2xsYXBzZShza2IsIGNvbGxhcHNlX21heCkpIHtcbiYjNDM7XHRcdFx0LyogRmluYWxpemUgcGVuZGluZyBjb2xsYXBzZWQgc2tiIHRvIHByZXNlcnZlIHBhY2tldFxuJiM0MztcdFx0XHQgKiBvcmRlcmluZy5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGlmIChuZXdfc2tiKSB7XG4mIzQzO1x0XHRcdFx0X19za2JfcXVldWVfdGFpbChcdTAwMjZuZXdfcXVldWUsIG5ld19za2IpO1xuJiM0MztcdFx0XHRcdG5ld19za2IgPSBOVUxMO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGtlZXAgPSB0cnVlO1xuJiM0MztcdFx0XHRnb3RvIG5leHQ7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0LyogRmluYWxpemUgaWYgdGhpcyBwYWNrZXQgd29uJiMzOTt0IGZpdCBpbiB0aGUgcmVtYWluaW5nIHRhaWxyb29tLFxuJiM0MztcdFx0ICogc28gd2UgY2FuIGFsbG9jYXRlIGEgcmlnaHQtc2l6ZWQgbmV3X3NrYi5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKG5ld19za2IgXHUwMDI2XHUwMDI2IHNyY19sZW4gXHUwMDNlIHNrYl90YWlscm9vbShuZXdfc2tiKSkge1xuJiM0MztcdFx0XHRfX3NrYl9xdWV1ZV90YWlsKFx1MDAyNm5ld19xdWV1ZSwgbmV3X3NrYik7XG4mIzQzO1x0XHRcdG5ld19za2IgPSBOVUxMO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmICghbmV3X3NrYikge1xuJiM0MztcdFx0XHR1bnNpZ25lZCBpbnQgYWxsb2Nfc2l6ZTtcbiYjNDM7XG4mIzQzO1x0XHRcdGFsbG9jX3NpemUgPSB2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3NpemUoc2tiLCBcdTAwMjZ2dnMtXHUwMDNlcnhfcXVldWUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHQgICAgY29sbGFwc2VfbWF4KTtcbiYjNDM7XG4mIzQzO1x0XHRcdC8qIE9ubHkgdGhpcyBza2ImIzM5O3MgZGF0YSBpcyBlbGlnaWJsZSwgbm90aGluZyB0byBtZXJnZVxuJiM0MztcdFx0XHQgKiB3aXRoLiBLZWVwIGFzLWlzLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aWYgKGFsbG9jX3NpemUgXHUwMDNjPSBzcmNfbGVuKSB7XG4mIzQzO1x0XHRcdFx0a2VlcCA9IHRydWU7XG4mIzQzO1x0XHRcdFx0Z290byBuZXh0O1xuJiM0MztcdFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0XHRuZXdfc2tiID0gdmlydGlvX3Zzb2NrX2FsbG9jX2xpbmVhcl9za2IoYWxsb2Nfc2l6ZSAmIzQzO1xuJiM0MztcdFx0XHRcdFx0VklSVElPX1ZTT0NLX1NLQl9IRUFEUk9PTSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0XHRcdGlmICghbmV3X3NrYilcbiYjNDM7XHRcdFx0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0XHRcdG1lbWNweSh2aXJ0aW9fdnNvY2tfaGRyKG5ld19za2IpLCBoZHIsXG4mIzQzO1x0XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IHZpcnRpb192c29ja19oZHIpKTtcbiYjNDM7XHRcdFx0dmlydGlvX3Zzb2NrX2hkcihuZXdfc2tiKS1cdTAwM2VsZW4gPSAwO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdC8qIENhbm5vdCBmYWlsIHNpbmNlIHNyY19vZmYvc3JjX2xlbiBhcmUgd2l0aGluIGJvdW5kcywgYnV0IGlmXG4mIzQzO1x0XHQgKiBpdCBkb2VzLCBkaXNjYXJkIG5ld19za2IgdG8gYXZvaWQgcXVldWluZyBjb3JydXB0ZWQgZGF0YS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKFdBUk5fT05fT05DRShza2JfY29weV9iaXRzKHNrYiwgc3JjX29mZixcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBza2JfcHV0KG5ld19za2IsIHNyY19sZW4pLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHNyY19sZW4pKSkge1xuJiM0MztcdFx0XHRrZnJlZV9za2IobmV3X3NrYik7XG4mIzQzO1x0XHRcdG5ld19za2IgPSBOVUxMO1xuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRsZTMyX2FkZF9jcHUoXHUwMDI2dmlydGlvX3Zzb2NrX2hkcihuZXdfc2tiKS1cdTAwM2VsZW4sIHNyY19sZW4pO1xuJiM0MztcdFx0dmlydGlvX3Zzb2NrX2hkcihuZXdfc2tiKS1cdTAwM2VmbGFncyB8PSBoZHItXHUwMDNlZmxhZ3M7XG4mIzQzO1xuJiM0MztuZXh0OlxuJiM0MztcdFx0X19za2JfdW5saW5rKHNrYiwgXHUwMDI2dnZzLVx1MDAzZXJ4X3F1ZXVlKTtcbiYjNDM7XHRcdGlmIChrZWVwKVxuJiM0MztcdFx0XHRfX3NrYl9xdWV1ZV90YWlsKFx1MDAyNm5ld19xdWV1ZSwgc2tiKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbiYjNDM7XHR9XG4mIzQzO291dDpcbiYjNDM7XHRpZiAobmV3X3NrYilcbiYjNDM7XHRcdF9fc2tiX3F1ZXVlX3RhaWwoXHUwMDI2bmV3X3F1ZXVlLCBuZXdfc2tiKTtcbiYjNDM7XG4mIzQzO1x0c2tiX3F1ZXVlX3NwbGljZShcdTAwMjZuZXdfcXVldWUsIFx1MDAyNnZ2cy1cdTAwM2VyeF9xdWV1ZSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGJvb2wgdmlydGlvX3RyYW5zcG9ydF9pbmNfcnhfcGt0KHN0cnVjdCB2aXJ0aW9fdnNvY2tfc29jayAqdnZzLFxuIFx0XHRcdFx0XHR1MzIgbGVuKVxuIHtcbkBAIC0xMzYzLDggJiM0MzsxNDk0LDIxIEBAIHZpcnRpb190cmFuc3BvcnRfcmVjdl9lbnF1ZXVlKHN0cnVjdCB2c29ja19zb2NrICp2c2ssXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2dnZzLVx1MDAzZXJ4X2xvY2spO1xuIFxuIFx0Y2FuX2VucXVldWUgPSB2aXJ0aW9fdHJhbnNwb3J0X2luY19yeF9wa3QodnZzLCBsZW4pO1xuLVx0aWYgKCFjYW5fZW5xdWV1ZSlcbi1cdFx0Z290byBvdXQ7XG4mIzQzO1x0aWYgKCFjYW5fZW5xdWV1ZSkge1xuJiM0MztcdFx0LyogVHJ5IHRvIGNvbGxhcHNlIHRoZSByZWNlaXZlIHF1ZXVlIHRvIHJlZHVjZSBza2Igb3ZlcmhlYWQgYW5kXG4mIzQzO1x0XHQgKiBtYWtlIHJvb20gZm9yIHRoaXMgcGFja2V0LlxuJiM0MztcdFx0ICogVW5sb2NrIHJ4X2xvY2sgc2luY2UgdGhlIGNvbGxhcHNlIG1heSBzbGVlcCBvciwgaW4gYW55IGNhc2UsXG4mIzQzO1x0XHQgKiB0YWtlIHNvbWUgdGltZSB0byBjb2xsYXBzZSB0aGUgc2ticywgYnV0IHRoaXMgaXMgc2FmZSwgc2luY2VcbiYjNDM7XHRcdCAqIHNrX2xvY2sgaXMgaGVsZCBieSBjYWxsZXIgc28gbm8gb25lIGVsc2UgY2FuIGVucXVldWUgb3JcbiYjNDM7XHRcdCAqIGRlcXVldWUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnZ2cy1cdTAwM2VyeF9sb2NrKTtcbiYjNDM7XHRcdHZpcnRpb190cmFuc3BvcnRfY29sbGFwc2VfcnhfcXVldWUodnZzKTtcbiYjNDM7XHRcdHNwaW5fbG9ja19iaChcdTAwMjZ2dnMtXHUwMDNlcnhfbG9jayk7XG4mIzQzO1x0XHRjYW5fZW5xdWV1ZSA9IHZpcnRpb190cmFuc3BvcnRfaW5jX3J4X3BrdCh2dnMsIGxlbik7XG4mIzQzO1x0XHRpZiAoIWNhbl9lbnF1ZXVlKVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4gXG4gXHRpZiAobGUzMl90b19jcHUoaGRyLVx1MDAzZWZsYWdzKSBcdTAwMjYgVklSVElPX1ZTT0NLX1NFUV9FT00pXG4gXHRcdHZ2cy1cdTAwM2Vtc2dfY291bnQmIzQzOyYjNDM7O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3RpbmcvdnNvY2svdnNvY2tfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy92c29jay92c29ja190ZXN0LmNcbmluZGV4IDc2YmUwZTRhN2YwZWU2Li5iNGZmOWY5NDY1NjViOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3RpbmcvdnNvY2svdnNvY2tfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3Zzb2NrL3Zzb2NrX3Rlc3QuY1xuQEAgLTIzNDcsNiAmIzQzOzIzNDcsODggQEAgc3RhdGljIHZvaWQgdGVzdF9zdHJlYW1fdHhfY3JlZGl0X2JvdW5kc19zZXJ2ZXIoY29uc3Qgc3RydWN0IHRlc3Rfb3B0cyAqb3B0cylcbiBcdGNsb3NlKGZkKTtcbiB9XG4gXG4mIzQzOy8qIFRlc3QgdGhhdCBtYW55IHNtYWxsIHBhY2tldHMgZG9uJiMzOTt0IGNhdXNlIGEgY29ubmVjdGlvbiByZXNldCB1bmRlciBwcmVzc3VyZVxuJiM0MzsgKiBhbmQgdGhhdCBkYXRhIGludGVncml0eSBpcyBwcmVzZXJ2ZWQuICBQYWNrZXQgc2l6ZXMgdmFyeSByYW5kb21seSBiZXR3ZWVuXG4mIzQzOyAqIDEyOSBhbmQgNTEyIGJ5dGVzLCBhYm92ZSBHT09EX0NPUFlfTEVOICgxMjgpIHRvIGJ5cGFzcyBpbi1wbGFjZSBjb2FsZXNjaW5nXG4mIzQzOyAqIGluIHJlY3ZfZW5xdWV1ZSwgZm9yY2luZyBlYWNoIG9uZSBpbnRvIGl0cyBvd24gc2tiLiAgV2l0aG91dCByZWNlaXZlIHF1ZXVlXG4mIzQzOyAqIGNvbGxhcHNpbmcsIHRoZSBwZXItc2tiIG92ZXJoZWFkIGV2ZW50dWFsbHkgZXhjZWVkcyBidWZfYWxsb2MgYW5kIHRoZVxuJiM0MzsgKiBjb25uZWN0aW9uIGlzIHJlc2V0LlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBDT0xMQVBTRV9QS1RfTUlOIDEyOVxuJiM0MzsjZGVmaW5lIENPTExBUFNFX1BLVF9NQVggNTEyXG4mIzQzOyNkZWZpbmUgQ09MTEFQU0VfVE9UQUwgKDIgKiAxMDI0ICogMTAyNClcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHRlc3Rfc3RyZWFtX2NvbGxhcHNlX2NsaWVudChjb25zdCBzdHJ1Y3QgdGVzdF9vcHRzICpvcHRzKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgY2hhciAqZGF0YTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGhhc2g7XG4mIzQzO1x0c2l6ZV90IG9mZnNldCA9IDA7XG4mIzQzO1x0aW50IGksIGZkO1xuJiM0MztcbiYjNDM7XHRkYXRhID0gbWFsbG9jKENPTExBUFNFX1RPVEFMKTtcbiYjNDM7XHRpZiAoIWRhdGEpIHtcbiYjNDM7XHRcdHBlcnJvcihcJiMzNDttYWxsb2NcJiMzNDspO1xuJiM0MztcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQ09MTEFQU0VfVE9UQUw7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0ZGF0YVtpXSA9IHJhbmQoKSBcdTAwMjYgMHhmZjtcbiYjNDM7XG4mIzQzO1x0ZmQgPSB2c29ja19zdHJlYW1fY29ubmVjdChvcHRzLVx1MDAzZXBlZXJfY2lkLCBvcHRzLVx1MDAzZXBlZXJfcG9ydCk7XG4mIzQzO1x0aWYgKGZkIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRwZXJyb3IoXCYjMzQ7Y29ubmVjdFwmIzM0Oyk7XG4mIzQzO1x0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR3aGlsZSAob2Zmc2V0IFx1MDAzYyBDT0xMQVBTRV9UT1RBTCkge1xuJiM0MztcdFx0c2l6ZV90IHBrdF9zaXplID0gQ09MTEFQU0VfUEtUX01JTiAmIzQzO1xuJiM0MztcdFx0XHRyYW5kKCkgJSAoQ09MTEFQU0VfUEtUX01BWCAtIENPTExBUFNFX1BLVF9NSU4gJiM0MzsgMSk7XG4mIzQzO1xuJiM0MztcdFx0cGt0X3NpemUgPSBtaW4ocGt0X3NpemUsIENPTExBUFNFX1RPVEFMIC0gb2Zmc2V0KTtcbiYjNDM7XG4mIzQzO1x0XHRzZW5kX2J1ZihmZCwgZGF0YSAmIzQzOyBvZmZzZXQsIHBrdF9zaXplLCAwLCBwa3Rfc2l6ZSk7XG4mIzQzO1x0XHRvZmZzZXQgJiM0Mzs9IHBrdF9zaXplO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aGFzaCA9IGhhc2hfZGpiMihkYXRhLCBDT0xMQVBTRV9UT1RBTCk7XG4mIzQzO1x0Y29udHJvbF93cml0ZXVsb25nKGhhc2gpO1xuJiM0MztcbiYjNDM7XHRmcmVlKGRhdGEpO1xuJiM0MztcdGNsb3NlKGZkKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgdGVzdF9zdHJlYW1fY29sbGFwc2Vfc2VydmVyKGNvbnN0IHN0cnVjdCB0ZXN0X29wdHMgKm9wdHMpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGhhc2gsIHJlbW90ZV9oYXNoO1xuJiM0MztcdHVuc2lnbmVkIGNoYXIgKmRhdGE7XG4mIzQzO1x0aW50IGZkO1xuJiM0MztcbiYjNDM7XHRkYXRhID0gbWFsbG9jKENPTExBUFNFX1RPVEFMKTtcbiYjNDM7XHRpZiAoIWRhdGEpIHtcbiYjNDM7XHRcdHBlcnJvcihcJiMzNDttYWxsb2NcJiMzNDspO1xuJiM0MztcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZmQgPSB2c29ja19zdHJlYW1fYWNjZXB0KFZNQUREUl9DSURfQU5ZLCBvcHRzLVx1MDAzZXBlZXJfcG9ydCwgTlVMTCk7XG4mIzQzO1x0aWYgKGZkIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRwZXJyb3IoXCYjMzQ7YWNjZXB0XCYjMzQ7KTtcbiYjNDM7XHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJlY3ZfYnVmKGZkLCBkYXRhLCBDT0xMQVBTRV9UT1RBTCwgMCwgQ09MTEFQU0VfVE9UQUwpO1xuJiM0MztcbiYjNDM7XHRoYXNoID0gaGFzaF9kamIyKGRhdGEsIENPTExBUFNFX1RPVEFMKTtcbiYjNDM7XHRyZW1vdGVfaGFzaCA9IGNvbnRyb2xfcmVhZHVsb25nKCk7XG4mIzQzO1x0aWYgKGhhc2ggIT0gcmVtb3RlX2hhc2gpIHtcbiYjNDM7XHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtoYXNoIG1pc21hdGNoOiBsb2NhbCAlbHUgcmVtb3RlICVsdVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0aGFzaCwgcmVtb3RlX2hhc2gpO1xuJiM0MztcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZnJlZShkYXRhKTtcbiYjNDM7XHRjbG9zZShmZCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCB0ZXN0X2Nhc2UgdGVzdF9jYXNlc1tdID0ge1xuIFx0e1xuIFx0XHQubmFtZSA9IFwmIzM0O1NPQ0tfU1RSRUFNIGNvbm5lY3Rpb24gcmVzZXRcJiMzNDssXG5AQCAtMjU0Niw2ICYjNDM7MjYyOCwxMSBAQCBzdGF0aWMgc3RydWN0IHRlc3RfY2FzZSB0ZXN0X2Nhc2VzW10gPSB7XG4gXHRcdC5ydW5fY2xpZW50ID0gdGVzdF9zdHJlYW1fbXNnX3BlZWtfY2xpZW50LFxuIFx0XHQucnVuX3NlcnZlciA9IHRlc3Rfc3RyZWFtX3BlZWtfYWZ0ZXJfcmVjdl9zZXJ2ZXIsXG4gXHR9LFxuJiM0MztcdHtcbiYjNDM7XHRcdC5uYW1lID0gXCYjMzQ7U09DS19TVFJFQU0gc21hbGwgcGFja2V0cyBiYWNrcHJlc3N1cmVcJiMzNDssXG4mIzQzO1x0XHQucnVuX2NsaWVudCA9IHRlc3Rfc3RyZWFtX2NvbGxhcHNlX2NsaWVudCxcbiYjNDM7XHRcdC5ydW5fc2VydmVyID0gdGVzdF9zdHJlYW1fY29sbGFwc2Vfc2VydmVyLFxuJiM0MztcdH0sXG4gXHR7fSxcbiB9O1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjI5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZTT0NLRVRTJiMzNDssCiAgICAmIzM0O1ZJUlRJT19WU09DS0VUUyYjMzQ7LAogICAgJiMzNDtWSE9TVF9WU09DSyYjMzQ7LAogICAgJiMzNDtWU09DS0VUU19MT09QQkFDSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZpcnRpb190cmFuc3BvcnRfY29sbGFwc2VfcnhfcXVldWUmIzM0OywKICAgICYjMzQ7dmlydGlvX3RyYW5zcG9ydF9jb2xsYXBzZV9zaXplJiMzNDssCiAgICAmIzM0O3ZpcnRpb190cmFuc3BvcnRfY2FuX2NvbGxhcHNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbWVjaGFuaXNtIHRvIGNvbGxhcHNlIHNtYWxsIHBhY2tldHMgaW4gdGhlIHZpcnRpbyB2c29jayByZWNlaXZlIHF1ZXVlIHRvIHByZXZlbnQgY29ubmVjdGlvbiByZXNldHMgdW5kZXIgbWVtb3J5IHByZXNzdXJlLiBJdCBtb2RpZmllcyBjb3JlIHZzb2NrIHZpcnRpbyB0cmFuc3BvcnQgbG9naWMgd2hpY2ggaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3bHkgYWRkZWQgY29sbGFwc2UgZnVuY3Rpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmYTU4OTlmZWRhZmRjN2JlYThiMDIzYTFhZTYzNDA0YjQzMDI4ODg4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdW4gMjYgMTg6Mjk6MzQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMgYi9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMKaW5kZXggMDk0NzUwMDcxNjViMzYuLjMwNGVhNDI0OTk1ZDRkIDEwMDY0NAotLS0gYS9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jCkBAIC00MjAsNiAmIzQzOzQyMCwxMzcgQEAgc3RhdGljIGludCB2aXJ0aW9fdHJhbnNwb3J0X3NlbmRfcGt0X2luZm8oc3RydWN0IHZzb2NrX3NvY2sgKnZzaywKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7c3RhdGljIGJvb2wgdmlydGlvX3RyYW5zcG9ydF9jYW5fY29sbGFwc2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkJCSAgdW5zaWduZWQgaW50IHNpemUpCiYjNDM7ewomIzQzOwkvKiBza2JzIHRoYXQgYXJlIHBhcnRpYWxseSBjb25zdW1lZCwgbWFyayBhIFNFUVBBQ0tFVCBtZXNzYWdlIGJvdW5kYXJ5LAomIzQzOwkgKiBvciBhcmUgYWxyZWFkeSBsYXJnZSBlbm91Z2ggc2hvdWxkIG5vdCBiZSBjb2xsYXBzZWQ6IHRoZXkgZWl0aGVyCiYjNDM7CSAqIG5lZWQgc3BlY2lhbCBhY2NvdW50aW5nLCBjYXJyeSBwcm90b2NvbCBzdGF0ZSwgb3IgYWxyZWFkeSBoYXZlIGEKJiM0MzsJICogZ29vZCBkYXRhLXRvLW92ZXJoZWFkIHJhdGlvLgomIzQzOwkgKi8KJiM0MzsJaWYgKFZJUlRJT19WU09DS19TS0JfQ0Ioc2tiKS0mZ3Q7b2Zmc2V0KQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwlpZiAobGUzMl90b19jcHUodmlydGlvX3Zzb2NrX2hkcihza2IpLSZndDtmbGFncykgJmFtcDsgVklSVElPX1ZTT0NLX1NFUV9FT00pCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CWlmIChza2ItJmd0O2xlbiAmZ3Q7PSBzaXplKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogSXRlcmF0ZSB0aHJvdWdoIHRoZSBwYWNrZXRzIGluIHRoZSBxdWV1ZSBzdGFydGluZyBmcm9tIHRoZSBjdXJyZW50IHNrYiB0bwomIzQzOyAqIGNvdW50IHRoZSBudW1iZXIgb2YgYnl0ZXMgd2UgY2FuIGNvbGxhcHNlLgomIzQzOyAqLwomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQKJiM0Mzt2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3NpemUoc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkgICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqcXVldWUsCiYjNDM7CQkJICAgICAgIHVuc2lnbmVkIGludCBtYXhfc2l6ZSkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCB0YXJnZXQgPSBza2ItJmd0O2xlbiAtIFZJUlRJT19WU09DS19TS0JfQ0Ioc2tiKS0mZ3Q7b2Zmc2V0OwomIzQzOwomIzQzOwl3aGlsZSAoKHNrYiA9IHNrYl9wZWVrX25leHQoc2tiLCBxdWV1ZSkpICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIHZpcnRpb190cmFuc3BvcnRfY2FuX2NvbGxhcHNlKHNrYiwgbWF4X3NpemUpKSB7CiYjNDM7CQl1bnNpZ25lZCBpbnQgbGVuID0gc2tiLSZndDtsZW4gLSBWSVJUSU9fVlNPQ0tfU0tCX0NCKHNrYiktJmd0O29mZnNldDsKJiM0MzsKJiM0MzsJCWlmIChsZW4gJmd0OyBtYXhfc2l6ZSAtIHRhcmdldCkKJiM0MzsJCQlyZXR1cm4gdGFyZ2V0OwomIzQzOwomIzQzOwkJdGFyZ2V0ICYjNDM7PSBsZW47CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHRhcmdldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQ2FsbGVkIHVuZGVyIGxvY2tfc29jayB3aGVuIHNrYiBvdmVyaGVhZCBleGNlZWRzIHRoZSBidWRnZXQuICovCiYjNDM7c3RhdGljIHZvaWQgdmlydGlvX3RyYW5zcG9ydF9jb2xsYXBzZV9yeF9xdWV1ZShzdHJ1Y3QgdmlydGlvX3Zzb2NrX3NvY2sgKnZ2cykKJiM0Mzt7CiYjNDM7CS8qIFVzZSB0aGUgc2FtZSBsaW5lYXIgYWxsb2NhdGlvbiB0aHJlc2hvbGQgYXMgdmlydGlvX3Zzb2NrX2FsbG9jX3NrYigpCiYjNDM7CSAqIHRvIGF2b2lkIGFkZGluZyBwcmVzc3VyZSBvbiB0aGUgcGFnZSBhbGxvY2F0b3IuCiYjNDM7CSAqLwomIzQzOwl1bnNpZ25lZCBpbnQgY29sbGFwc2VfbWF4ID0gU0tCX01BWF9PUkRFUihWSVJUSU9fVlNPQ0tfU0tCX0hFQURST09NLAomIzQzOwkJCQkJCSAgUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpOwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqbmV4dF9za2IsICpuZXdfc2tiID0gTlVMTDsKJiM0MzsJc3RydWN0IHNrX2J1ZmZfaGVhZCBuZXdfcXVldWU7CiYjNDM7CiYjNDM7CV9fc2tiX3F1ZXVlX2hlYWRfaW5pdCgmYW1wO25ld19xdWV1ZSk7CiYjNDM7CiYjNDM7CXNrYl9xdWV1ZV93YWxrX3NhZmUoJmFtcDt2dnMtJmd0O3J4X3F1ZXVlLCBza2IsIG5leHRfc2tiKSB7CiYjNDM7CQlzdHJ1Y3QgdmlydGlvX3Zzb2NrX2hkciAqaGRyID0gdmlydGlvX3Zzb2NrX2hkcihza2IpOwomIzQzOwkJdTMyIHNyY19vZmYgPSBWSVJUSU9fVlNPQ0tfU0tCX0NCKHNrYiktJmd0O29mZnNldDsKJiM0MzsJCXUzMiBzcmNfbGVuID0gc2tiLSZndDtsZW4gLSBzcmNfb2ZmOwomIzQzOwkJYm9vbCBrZWVwID0gZmFsc2U7CiYjNDM7CiYjNDM7CQlpZiAoIXZpcnRpb190cmFuc3BvcnRfY2FuX2NvbGxhcHNlKHNrYiwgY29sbGFwc2VfbWF4KSkgewomIzQzOwkJCS8qIEZpbmFsaXplIHBlbmRpbmcgY29sbGFwc2VkIHNrYiB0byBwcmVzZXJ2ZSBwYWNrZXQKJiM0MzsJCQkgKiBvcmRlcmluZy4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAobmV3X3NrYikgewomIzQzOwkJCQlfX3NrYl9xdWV1ZV90YWlsKCZhbXA7bmV3X3F1ZXVlLCBuZXdfc2tiKTsKJiM0MzsJCQkJbmV3X3NrYiA9IE5VTEw7CiYjNDM7CQkJfQomIzQzOwkJCWtlZXAgPSB0cnVlOwomIzQzOwkJCWdvdG8gbmV4dDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCS8qIEZpbmFsaXplIGlmIHRoaXMgcGFja2V0IHdvbiYjMzk7dCBmaXQgaW4gdGhlIHJlbWFpbmluZyB0YWlscm9vbSwKJiM0MzsJCSAqIHNvIHdlIGNhbiBhbGxvY2F0ZSBhIHJpZ2h0LXNpemVkIG5ld19za2IuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChuZXdfc2tiICZhbXA7JmFtcDsgc3JjX2xlbiAmZ3Q7IHNrYl90YWlscm9vbShuZXdfc2tiKSkgewomIzQzOwkJCV9fc2tiX3F1ZXVlX3RhaWwoJmFtcDtuZXdfcXVldWUsIG5ld19za2IpOwomIzQzOwkJCW5ld19za2IgPSBOVUxMOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKCFuZXdfc2tiKSB7CiYjNDM7CQkJdW5zaWduZWQgaW50IGFsbG9jX3NpemU7CiYjNDM7CiYjNDM7CQkJYWxsb2Nfc2l6ZSA9IHZpcnRpb190cmFuc3BvcnRfY29sbGFwc2Vfc2l6ZShza2IsICZhbXA7dnZzLSZndDtyeF9xdWV1ZSwKJiM0MzsJCQkJCQkJCSAgICBjb2xsYXBzZV9tYXgpOwomIzQzOwomIzQzOwkJCS8qIE9ubHkgdGhpcyBza2ImIzM5O3MgZGF0YSBpcyBlbGlnaWJsZSwgbm90aGluZyB0byBtZXJnZQomIzQzOwkJCSAqIHdpdGguIEtlZXAgYXMtaXMuCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKGFsbG9jX3NpemUgJmx0Oz0gc3JjX2xlbikgewomIzQzOwkJCQlrZWVwID0gdHJ1ZTsKJiM0MzsJCQkJZ290byBuZXh0OwomIzQzOwkJCX0KJiM0MzsKJiM0MzsJCQluZXdfc2tiID0gdmlydGlvX3Zzb2NrX2FsbG9jX2xpbmVhcl9za2IoYWxsb2Nfc2l6ZSAmIzQzOwomIzQzOwkJCQkJVklSVElPX1ZTT0NLX1NLQl9IRUFEUk9PTSwgR0ZQX0tFUk5FTCk7CiYjNDM7CQkJaWYgKCFuZXdfc2tiKQomIzQzOwkJCQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJCQltZW1jcHkodmlydGlvX3Zzb2NrX2hkcihuZXdfc2tiKSwgaGRyLAomIzQzOwkJCSAgICAgICBzaXplb2Yoc3RydWN0IHZpcnRpb192c29ja19oZHIpKTsKJiM0MzsJCQl2aXJ0aW9fdnNvY2tfaGRyKG5ld19za2IpLSZndDtsZW4gPSAwOwomIzQzOwkJfQomIzQzOwomIzQzOwkJLyogQ2Fubm90IGZhaWwgc2luY2Ugc3JjX29mZi9zcmNfbGVuIGFyZSB3aXRoaW4gYm91bmRzLCBidXQgaWYKJiM0MzsJCSAqIGl0IGRvZXMsIGRpc2NhcmQgbmV3X3NrYiB0byBhdm9pZCBxdWV1aW5nIGNvcnJ1cHRlZCBkYXRhLgomIzQzOwkJICovCiYjNDM7CQlpZiAoV0FSTl9PTl9PTkNFKHNrYl9jb3B5X2JpdHMoc2tiLCBzcmNfb2ZmLAomIzQzOwkJCQkJICAgICAgIHNrYl9wdXQobmV3X3NrYiwgc3JjX2xlbiksCiYjNDM7CQkJCQkgICAgICAgc3JjX2xlbikpKSB7CiYjNDM7CQkJa2ZyZWVfc2tiKG5ld19za2IpOwomIzQzOwkJCW5ld19za2IgPSBOVUxMOwomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwkJfQomIzQzOwomIzQzOwkJbGUzMl9hZGRfY3B1KCZhbXA7dmlydGlvX3Zzb2NrX2hkcihuZXdfc2tiKS0mZ3Q7bGVuLCBzcmNfbGVuKTsKJiM0MzsJCXZpcnRpb192c29ja19oZHIobmV3X3NrYiktJmd0O2ZsYWdzIHw9IGhkci0mZ3Q7ZmxhZ3M7CiYjNDM7CiYjNDM7bmV4dDoKJiM0MzsJCV9fc2tiX3VubGluayhza2IsICZhbXA7dnZzLSZndDtyeF9xdWV1ZSk7CiYjNDM7CQlpZiAoa2VlcCkKJiM0MzsJCQlfX3NrYl9xdWV1ZV90YWlsKCZhbXA7bmV3X3F1ZXVlLCBza2IpOwomIzQzOwkJZWxzZQomIzQzOwkJCWNvbnN1bWVfc2tiKHNrYik7CiYjNDM7CX0KJiM0MztvdXQ6CiYjNDM7CWlmIChuZXdfc2tiKQomIzQzOwkJX19za2JfcXVldWVfdGFpbCgmYW1wO25ld19xdWV1ZSwgbmV3X3NrYik7CiYjNDM7CiYjNDM7CXNrYl9xdWV1ZV9zcGxpY2UoJmFtcDtuZXdfcXVldWUsICZhbXA7dnZzLSZndDtyeF9xdWV1ZSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGJvb2wgdmlydGlvX3RyYW5zcG9ydF9pbmNfcnhfcGt0KHN0cnVjdCB2aXJ0aW9fdnNvY2tfc29jayAqdnZzLAogCQkJCQl1MzIgbGVuKQogewpAQCAtMTM2Myw4ICYjNDM7MTQ5NCwyMSBAQCB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfZW5xdWV1ZShzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLAogCXNwaW5fbG9ja19iaCgmYW1wO3Z2cy0mZ3Q7cnhfbG9jayk7CiAKIAljYW5fZW5xdWV1ZSA9IHZpcnRpb190cmFuc3BvcnRfaW5jX3J4X3BrdCh2dnMsIGxlbik7Ci0JaWYgKCFjYW5fZW5xdWV1ZSkKLQkJZ290byBvdXQ7CiYjNDM7CWlmICghY2FuX2VucXVldWUpIHsKJiM0MzsJCS8qIFRyeSB0byBjb2xsYXBzZSB0aGUgcmVjZWl2ZSBxdWV1ZSB0byByZWR1Y2Ugc2tiIG92ZXJoZWFkIGFuZAomIzQzOwkJICogbWFrZSByb29tIGZvciB0aGlzIHBhY2tldC4KJiM0MzsJCSAqIFVubG9jayByeF9sb2NrIHNpbmNlIHRoZSBjb2xsYXBzZSBtYXkgc2xlZXAgb3IsIGluIGFueSBjYXNlLAomIzQzOwkJICogdGFrZSBzb21lIHRpbWUgdG8gY29sbGFwc2UgdGhlIHNrYnMsIGJ1dCB0aGlzIGlzIHNhZmUsIHNpbmNlCiYjNDM7CQkgKiBza19sb2NrIGlzIGhlbGQgYnkgY2FsbGVyIHNvIG5vIG9uZSBlbHNlIGNhbiBlbnF1ZXVlIG9yCiYjNDM7CQkgKiBkZXF1ZXVlLgomIzQzOwkJICovCiYjNDM7CQlzcGluX3VubG9ja19iaCgmYW1wO3Z2cy0mZ3Q7cnhfbG9jayk7CiYjNDM7CQl2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3J4X3F1ZXVlKHZ2cyk7CiYjNDM7CQlzcGluX2xvY2tfYmgoJmFtcDt2dnMtJmd0O3J4X2xvY2spOwomIzQzOwkJY2FuX2VucXVldWUgPSB2aXJ0aW9fdHJhbnNwb3J0X2luY19yeF9wa3QodnZzLCBsZW4pOwomIzQzOwkJaWYgKCFjYW5fZW5xdWV1ZSkKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsJfQogCiAJaWYgKGxlMzJfdG9fY3B1KGhkci0mZ3Q7ZmxhZ3MpICZhbXA7IFZJUlRJT19WU09DS19TRVFfRU9NKQogCQl2dnMtJmd0O21zZ19jb3VudCYjNDM7JiM0Mzs7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3Zzb2NrL3Zzb2NrX3Rlc3QuYyBiL3Rvb2xzL3Rlc3RpbmcvdnNvY2svdnNvY2tfdGVzdC5jCmluZGV4IDc2YmUwZTRhN2YwZWU2Li5iNGZmOWY5NDY1NjViOCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy92c29jay92c29ja190ZXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy92c29jay92c29ja190ZXN0LmMKQEAgLTIzNDcsNiAmIzQzOzIzNDcsODggQEAgc3RhdGljIHZvaWQgdGVzdF9zdHJlYW1fdHhfY3JlZGl0X2JvdW5kc19zZXJ2ZXIoY29uc3Qgc3RydWN0IHRlc3Rfb3B0cyAqb3B0cykKIAljbG9zZShmZCk7CiB9CiAKJiM0MzsvKiBUZXN0IHRoYXQgbWFueSBzbWFsbCBwYWNrZXRzIGRvbiYjMzk7dCBjYXVzZSBhIGNvbm5lY3Rpb24gcmVzZXQgdW5kZXIgcHJlc3N1cmUKJiM0MzsgKiBhbmQgdGhhdCBkYXRhIGludGVncml0eSBpcyBwcmVzZXJ2ZWQuICBQYWNrZXQgc2l6ZXMgdmFyeSByYW5kb21seSBiZXR3ZWVuCiYjNDM7ICogMTI5IGFuZCA1MTIgYnl0ZXMsIGFib3ZlIEdPT0RfQ09QWV9MRU4gKDEyOCkgdG8gYnlwYXNzIGluLXBsYWNlIGNvYWxlc2NpbmcKJiM0MzsgKiBpbiByZWN2X2VucXVldWUsIGZvcmNpbmcgZWFjaCBvbmUgaW50byBpdHMgb3duIHNrYi4gIFdpdGhvdXQgcmVjZWl2ZSBxdWV1ZQomIzQzOyAqIGNvbGxhcHNpbmcsIHRoZSBwZXItc2tiIG92ZXJoZWFkIGV2ZW50dWFsbHkgZXhjZWVkcyBidWZfYWxsb2MgYW5kIHRoZQomIzQzOyAqIGNvbm5lY3Rpb24gaXMgcmVzZXQuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBDT0xMQVBTRV9QS1RfTUlOIDEyOQomIzQzOyNkZWZpbmUgQ09MTEFQU0VfUEtUX01BWCA1MTIKJiM0MzsjZGVmaW5lIENPTExBUFNFX1RPVEFMICgyICogMTAyNCAqIDEwMjQpCiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9zdHJlYW1fY29sbGFwc2VfY2xpZW50KGNvbnN0IHN0cnVjdCB0ZXN0X29wdHMgKm9wdHMpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBjaGFyICpkYXRhOwomIzQzOwl1bnNpZ25lZCBsb25nIGhhc2g7CiYjNDM7CXNpemVfdCBvZmZzZXQgPSAwOwomIzQzOwlpbnQgaSwgZmQ7CiYjNDM7CiYjNDM7CWRhdGEgPSBtYWxsb2MoQ09MTEFQU0VfVE9UQUwpOwomIzQzOwlpZiAoIWRhdGEpIHsKJiM0MzsJCXBlcnJvcigmIzM0O21hbGxvYyYjMzQ7KTsKJiM0MzsJCWV4aXQoRVhJVF9GQUlMVVJFKTsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQ09MTEFQU0VfVE9UQUw7IGkmIzQzOyYjNDM7KQomIzQzOwkJZGF0YVtpXSA9IHJhbmQoKSAmYW1wOyAweGZmOwomIzQzOwomIzQzOwlmZCA9IHZzb2NrX3N0cmVhbV9jb25uZWN0KG9wdHMtJmd0O3BlZXJfY2lkLCBvcHRzLSZndDtwZWVyX3BvcnQpOwomIzQzOwlpZiAoZmQgJmx0OyAwKSB7CiYjNDM7CQlwZXJyb3IoJiMzNDtjb25uZWN0JiMzNDspOwomIzQzOwkJZXhpdChFWElUX0ZBSUxVUkUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXdoaWxlIChvZmZzZXQgJmx0OyBDT0xMQVBTRV9UT1RBTCkgewomIzQzOwkJc2l6ZV90IHBrdF9zaXplID0gQ09MTEFQU0VfUEtUX01JTiAmIzQzOwomIzQzOwkJCXJhbmQoKSAlIChDT0xMQVBTRV9QS1RfTUFYIC0gQ09MTEFQU0VfUEtUX01JTiAmIzQzOyAxKTsKJiM0MzsKJiM0MzsJCXBrdF9zaXplID0gbWluKHBrdF9zaXplLCBDT0xMQVBTRV9UT1RBTCAtIG9mZnNldCk7CiYjNDM7CiYjNDM7CQlzZW5kX2J1ZihmZCwgZGF0YSAmIzQzOyBvZmZzZXQsIHBrdF9zaXplLCAwLCBwa3Rfc2l6ZSk7CiYjNDM7CQlvZmZzZXQgJiM0Mzs9IHBrdF9zaXplOwomIzQzOwl9CiYjNDM7CiYjNDM7CWhhc2ggPSBoYXNoX2RqYjIoZGF0YSwgQ09MTEFQU0VfVE9UQUwpOwomIzQzOwljb250cm9sX3dyaXRldWxvbmcoaGFzaCk7CiYjNDM7CiYjNDM7CWZyZWUoZGF0YSk7CiYjNDM7CWNsb3NlKGZkKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgdGVzdF9zdHJlYW1fY29sbGFwc2Vfc2VydmVyKGNvbnN0IHN0cnVjdCB0ZXN0X29wdHMgKm9wdHMpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGhhc2gsIHJlbW90ZV9oYXNoOwomIzQzOwl1bnNpZ25lZCBjaGFyICpkYXRhOwomIzQzOwlpbnQgZmQ7CiYjNDM7CiYjNDM7CWRhdGEgPSBtYWxsb2MoQ09MTEFQU0VfVE9UQUwpOwomIzQzOwlpZiAoIWRhdGEpIHsKJiM0MzsJCXBlcnJvcigmIzM0O21hbGxvYyYjMzQ7KTsKJiM0MzsJCWV4aXQoRVhJVF9GQUlMVVJFKTsKJiM0MzsJfQomIzQzOwomIzQzOwlmZCA9IHZzb2NrX3N0cmVhbV9hY2NlcHQoVk1BRERSX0NJRF9BTlksIG9wdHMtJmd0O3BlZXJfcG9ydCwgTlVMTCk7CiYjNDM7CWlmIChmZCAmbHQ7IDApIHsKJiM0MzsJCXBlcnJvcigmIzM0O2FjY2VwdCYjMzQ7KTsKJiM0MzsJCWV4aXQoRVhJVF9GQUlMVVJFKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZWN2X2J1ZihmZCwgZGF0YSwgQ09MTEFQU0VfVE9UQUwsIDAsIENPTExBUFNFX1RPVEFMKTsKJiM0MzsKJiM0MzsJaGFzaCA9IGhhc2hfZGpiMihkYXRhLCBDT0xMQVBTRV9UT1RBTCk7CiYjNDM7CXJlbW90ZV9oYXNoID0gY29udHJvbF9yZWFkdWxvbmcoKTsKJiM0MzsJaWYgKGhhc2ggIT0gcmVtb3RlX2hhc2gpIHsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O2hhc2ggbWlzbWF0Y2g6IGxvY2FsICVsdSByZW1vdGUgJWx1XG4mIzM0OywKJiM0MzsJCQloYXNoLCByZW1vdGVfaGFzaCk7CiYjNDM7CQlleGl0KEVYSVRfRkFJTFVSRSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZnJlZShkYXRhKTsKJiM0MzsJY2xvc2UoZmQpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgdGVzdF9jYXNlIHRlc3RfY2FzZXNbXSA9IHsKIAl7CiAJCS5uYW1lID0gJiMzNDtTT0NLX1NUUkVBTSBjb25uZWN0aW9uIHJlc2V0JiMzNDssCkBAIC0yNTQ2LDYgJiM0MzsyNjI4LDExIEBAIHN0YXRpYyBzdHJ1Y3QgdGVzdF9jYXNlIHRlc3RfY2FzZXNbXSA9IHsKIAkJLnJ1bl9jbGllbnQgPSB0ZXN0X3N0cmVhbV9tc2dfcGVla19jbGllbnQsCiAJCS5ydW5fc2VydmVyID0gdGVzdF9zdHJlYW1fcGVla19hZnRlcl9yZWN2X3NlcnZlciwKIAl9LAomIzQzOwl7CiYjNDM7CQkubmFtZSA9ICYjMzQ7U09DS19TVFJFQU0gc21hbGwgcGFja2V0cyBiYWNrcHJlc3N1cmUmIzM0OywKJiM0MzsJCS5ydW5fY2xpZW50ID0gdGVzdF9zdHJlYW1fY29sbGFwc2VfY2xpZW50LAomIzQzOwkJLnJ1bl9zZXJ2ZXIgPSB0ZXN0X3N0cmVhbV9jb2xsYXBzZV9zZXJ2ZXIsCiYjNDM7CX0sCiAJe30sCiB9OwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3ODkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWc29jayBWaXJ0aW8gVHJhbnNwb3J0IENvbGxhcHNlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBtYWtpbmcgY2hhbmdlcyB0byBgbmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jYC4gSXQmIzM5O3MgaW50cm9kdWNpbmcgYSBmZXcgbmV3IGZ1bmN0aW9uczogYHZpcnRpb190cmFuc3BvcnRfY29sbGFwc2VfcnhfcXVldWVgLCBgdmlydGlvX3RyYW5zcG9ydF9jb2xsYXBzZV9zaXplYCwgYW5kIGB2aXJ0aW9fdHJhbnNwb3J0X2Nhbl9jb2xsYXBzZWAuIEZyb20gd2hhdCBJIGNhbiB0ZWxsLCBpdCBsb29rcyBsaWtlIGB2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3J4X3F1ZXVlYCBpcyBiZWluZyBjYWxsZWQgd2l0aGluIGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfZW5xdWV1ZWAsIHNwZWNpZmljYWxseSB3aGVuIGB2aXJ0aW9fdHJhbnNwb3J0X2luY19yeF9wa3RgIHJldHVybnMgZmFsc2UuIFRoaXMgaXMgcHJldHR5IHNpZ25pZmljYW50OyBpdCYjMzk7cyByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhlIHZzb2NrIHZpcnRpbyB0cmFuc3BvcnQgbG9naWMsIG1hbmFnaW5nIHRoZSByZWNlaXZlIHF1ZXVlIGFuZCBvcHRpbWl6aW5nIGl0IGJ5IGNvbGxhcHNpbmcgU0tCcyB0byByZWR1Y2Ugb3ZlcmhlYWQuIEZ1bmN0aW9uYWxseSwgdGhpcyBsb29rcyBsaWtlIGEgZ29vZCBjaGFuZ2UuIE15IHNwaWRleS1zZW5zZSBpcyB0ZWxsaW5nIG1lIHRoaXMgaXMgZGVmaW5pdGVseSBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBXZSYjMzk7cmUgZGlyZWN0bHkgbWFuaXB1bGF0aW5nIHRoZSByZWNlaXZlIHBhdGggaW4gYSBjcml0aWNhbCBhcmVhLgoKTm93LCBsZXQmIzM5O3MgZmlndXJlIG91dCB3aGF0IENPTkZJRyBvcHRpb25zIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkuIFRoZSBjb2RlIGl0c2VsZiBpcyBpbiBgbmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jYCwgc28gSSYjMzk7bGwgY2hlY2sgZWl0aGVyIGBuZXQvdm13X3Zzb2NrL01ha2VmaWxlYCBvciBgbmV0L3Ztd192c29jay9LY29uZmlnYCB0byBzZWUgd2hpY2ggY29uZmlndXJhdGlvbiBrbm9icyBjb250cm9sIGl0LiBGaW5kaW5nIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyB3aWxsIGJlIGtleSB0byBjcmVhdGluZyBhIHJlcHJvZHVjaWJsZSB0ZXN0IGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrL01ha2VmaWxlPTU9b2JqLSQoQ09ORklHX1ZJUlRJT19WU09DS0VUUykgJiM0Mzs9IHZtd192c29ja192aXJ0aW9fdHJhbnNwb3J0Lm9cbm5ldC92bXdfdnNvY2svTWFrZWZpbGU6NjpvYmotJChDT05GSUdfVklSVElPX1ZTT0NLRVRTX0NPTU1PTikgJiM0Mzs9IHZtd192c29ja192aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5vXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlLTctb2JqLSQoQ09ORklHX0hZUEVSVl9WU09DS0VUUykgJiM0Mzs9IGh2X3NvY2sub1xuLS1cbm5ldC92bXdfdnNvY2svTWFrZWZpbGU9MTg9dm13X3Zzb2NrX3ZpcnRpb190cmFuc3BvcnQteSAmIzQzOz0gdmlydGlvX3RyYW5zcG9ydC5vXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlLTE5LVxubmV0L3Ztd192c29jay9NYWtlZmlsZToyMDp2bXdfdnNvY2tfdmlydGlvX3RyYW5zcG9ydF9jb21tb24teSAmIzQzOz0gdmlydGlvX3RyYW5zcG9ydF9jb21tb24ub1xubmV0L3Ztd192c29jay9NYWtlZmlsZS0yMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxODoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTY3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKlVuZGVyc3RhbmRpbmcgdGhlIFZpcnRpbyB2c29jayBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBgQ09ORklHX1ZJUlRJT19WU09DS0VUU19DT01NT05gIGlzIHRoZSBjb3JlIHBpZWNlIGhlcmUsIHRoZSBmb3VuZGF0aW9uLiBCdXQgaXQmIzM5O3Mgbm90IHVzdWFsbHkgZGlyZWN0bHkgc2VsZWN0ZWQsIGl0JiMzOTtzIHR5cGljYWxseSBicm91Z2h0IGluIHRyYW5zaXRpdmVseSB0aHJvdWdoIGVpdGhlciBgQ09ORklHX1ZJUlRJT19WU09DS0VUU2Agb3IgYENPTkZJR19WSE9TVF9WU09DS2AuIE1ha2VzIHNlbnNlLCB0aGUgY29tbW9uIHN0dWZmIGlzIGEgZGVwZW5kZW5jeS4gTm93LCB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoZXNlIGRlcGVuZGVuY2llcyBhcmUgZGVmaW5lZCBhbmQgd2hhdCB0aGUgb3B0aW9ucyBhcmUsIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgYG5ldC92bXdfdnNvY2svS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBsb2dpYyBsaXZlcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1ZJUlRJT19WU09DS0VUUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrL0tjb25maWc9Mjk9Y29uZmlnIFZTT0NLRVRTX0xPT1BCQUNLXG4tLVxubmV0L3Ztd192c29jay9LY29uZmlnLTMyLVx0ZGVmYXVsdCB5XG5uZXQvdm13X3Zzb2NrL0tjb25maWc6MzM6XHRzZWxlY3QgVklSVElPX1ZTT0NLRVRTX0NPTU1PTlxubmV0L3Ztd192c29jay9LY29uZmlnLTM0LVx0aGVscFxuLS1cbm5ldC92bXdfdnNvY2svS2NvbmZpZz00MT1jb25maWcgVk1XQVJFX1ZNQ0lfVlNPQ0tFVFNcbi0tXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNTItXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6NTM6Y29uZmlnIFZJUlRJT19WU09DS0VUU1xubmV0L3Ztd192c29jay9LY29uZmlnLTU0LVx0dHJpc3RhdGUgXCYjMzQ7dmlydGlvIHRyYW5zcG9ydCBmb3IgVmlydHVhbCBTb2NrZXRzXCYjMzQ7XG5uZXQvdm13X3Zzb2NrL0tjb25maWctNTUtXHRkZXBlbmRzIG9uIFZTT0NLRVRTIFx1MDAyNlx1MDAyNiBWSVJUSU9cbm5ldC92bXdfdnNvY2svS2NvbmZpZzo1NjpcdHNlbGVjdCBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNTctXHRoZWxwXG4tLVxubmV0L3Ztd192c29jay9LY29uZmlnLTY1LVxubmV0L3Ztd192c29jay9LY29uZmlnOjY2OmNvbmZpZyBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNjctXHR0cmlzdGF0ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxNDEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llczogVmlydGlvIHZzLiB2aG9zdF92c29jayoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnMgaW50ZXJyZWxhdGUuIEkgc2VlIHRoYXQgZW5hYmxpbmcgYENPTkZJR19WSVJUSU9fVlNPQ0tFVFNgIGFuZCBgQ09ORklHX1ZTT0NLRVRTX0xPT1BCQUNLYCAqYm90aCogcHVsbCBpbiBgQ09ORklHX1ZJUlRJT19WU09DS0VUU19DT01NT05gLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGl0IHN1Z2dlc3RzIHRoZXJlJiMzOTtzIHNvbWUgY29yZSwgc2hhcmVkIGluZnJhc3RydWN0dXJlIHRoZXkgYm90aCByZWx5IG9uIGZvciBWaXJ0SU8tYmFzZWQgdnNvY2sgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIGtlZXAgdGhhdCBkZXBlbmRlbmN5IGluIG1pbmQgd2hlbiBkZWJ1Z2dpbmcgb3IgY29uZmlndXJpbmcgdnNvY2suIEl0JiMzOTtzIGdvb2QgdG8gc2VlIHRoYXQga2luZCBvZiBmYWN0b3JlZCBhcHByb2FjaDsgbWluaW1pemVzIGNvZGUgZHVwbGljYXRpb24gYW5kIGltcHJvdmVzIG1haW50YWluYWJpbGl0eS4KCk5vdywgSSBhbHNvIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSBvZiBob3cgdnNvY2sgaXMgdXNlZCwgc28gbGV0JiMzOTtzIGNyb3NzLXJlZmVyZW5jZSB0aGUgYGRyaXZlcnMvdmhvc3QvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYFZIT1NUX1ZTT0NLYCBvcHRpb24uIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBtaWdodCBjb3ZlciB0aGUgdmhvc3QtYmFzZWQgdmlydHVhbCBzb2NrZXRzLCBwb3RlbnRpYWxseSBmb3IgcGFyYXZpcnR1YWxpemVkIGd1ZXN0cy4gVW5kZXJzdGFuZGluZyB0aGF0IGNvbm5lY3Rpb24gaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGRpZmZlcmVudCBvcHRpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB2aXJ0aW8tYmFzZWQgdnNvY2sgaW1wbGVtZW50YXRpb24gYW5kIHRoZSB2aG9zdC1iYXNlZCBpbXBsZW1lbnRhdGlvbi4gSXQgaGVscHMgdG8gaGF2ZSBhIGhhbmRsZSBvbiAqYWxsKiB0aGUgdnNvY2sgb3B0aW9ucy4gSXQmIzM5O3MgYWJvdXQgcHV0dGluZyB0b2dldGhlciBhbGwgdGhlIHB1enpsZSBwaWVjZXMgdG8gc2VlIGhvdyB0aGlzIGFsbCBjb25uZWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxODoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvS2NvbmZpZz01Nj1jb25maWcgVkhPU1RfVlNPQ0tcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNTktXHRzZWxlY3QgVkhPU1RcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo2MDpcdHNlbGVjdCBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNjEtXHRkZWZhdWx0IG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxODoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjMxCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFZTb2NrIFJYIFF1ZXVlIENvbGxhcHNlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBWU29jayBjb25maWd1cmF0aW9uczogYENPTkZJR19WSVJUSU9fVlNPQ0tFVFNgLCBgQ09ORklHX1ZIT1NUX1ZTT0NLYCwgYW5kIGBDT05GSUdfVlNPQ0tFVFNfTE9PUEJBQ0tgLiBJJiMzOTtsbCBtYWtlIHN1cmUgdGhvc2UgYXJlIGVuYWJsZWQsIGFsb25nIHdpdGggYFZJUlRJT19WU09DS0VUU2AsIGBWSE9TVF9WU09DS2AsIGFuZCBgVlNPQ0tFVFNfTE9PUEJBQ0tgIHRoZW1zZWx2ZXMsIGFzIHRoZXkmIzM5O3JlIGNsZWFybHkgaW1wb3J0YW50LgoKTm93LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3M6IGZpbmRpbmcgdGhlIGNydWNpYWwgc3ltYm9scyB0byB1bmRlcnN0YW5kLiBUaGUgbmV3IGZ1bmN0aW9ucyBhcmUgYHZpcnRpb190cmFuc3BvcnRfY2FuX2NvbGxhcHNlYCwgYHZpcnRpb190cmFuc3BvcnRfY29sbGFwc2Vfc2l6ZWAsIGFuZCBgdmlydGlvX3RyYW5zcG9ydF9jb2xsYXBzZV9yeF9xdWV1ZWAuIFRoZSBleGlzdGluZyBmdW5jdGlvbiBtb2RpZmllZCBpcyBgdmlydGlvX3RyYW5zcG9ydF9yZWN2X2VucXVldWVgLgoKU2luY2UgYHZpcnRpb190cmFuc3BvcnRfcmVjdl9lbnF1ZXVlYCBpcyBhIGhvdC1wYXRoIGZ1bmN0aW9uLCBjYWxsZWQgb24gKmV2ZXJ5KiBwYWNrZXQgZW5xdWV1ZWQsIHRoYXQgdGVsbHMgbWUgdGhlIGNvbGxhcHNlIGZ1bmN0aW9ucyBhcmUgaW52b2tlZCB3aGVuIGEgdGhyZXNob2xkIGlzIG1ldC4gU3BlY2lmaWNhbGx5LCB3aGVuIGB2aXJ0aW9fdHJhbnNwb3J0X2luY19yeF9wa3RgIHJldHVybnMgZmFsc2UsIHdoaWNoIHN1Z2dlc3RzIHRoZSBSWCBxdWV1ZSBvdmVyaGVhZCBoYXMgZXhjZWVkZWQgaXRzIGFsbG93ZWQgYnVkZ2V0LiBUaGF0IG1lYW5zIGB2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3J4X3F1ZXVlYCBpcyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZm9jdXNlZCBhbmFseXNpcy4gV2hpbGUgYHZpcnRpb190cmFuc3BvcnRfY2FuX2NvbGxhcHNlYCBhbmQgYHZpcnRpb190cmFuc3BvcnRfY29sbGFwc2Vfc2l6ZWAgYXJlIHN0YXRpYyBhbmQgcG90ZW50aWFsbHkgaW5saW5lZCwgdGhleSBhcmUgc3RpbGwgaW1wb3J0YW50IGFuZCBhcmUgd29ydGggbm90aW5nIHRvby4KCkxldCBtZSBjb25maXJtIGlmIG15IGh1bmNoIGlzIGNvcnJlY3QgYWJvdXQgdGhvc2UgZmlyc3QgdHdvIGJlaW5nIHN0YXRpYy4gKkNoZWNrcyBDb2RlLi4uKiBZZXAsIHRoZXkgYXJlLgoKYGBgYwpzdGF0aWMgYm9vbCB2aXJ0aW9fdHJhbnNwb3J0X2Nhbl9jb2xsYXBzZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAoJCQkJCSAgdW5zaWduZWQgaW50IHNpemUpCnN0YXRpYyB1bnNpZ25lZCBpbnQKdmlydGlvX3RyYW5zcG9ydF9jb2xsYXBzZV9zaXplKHN0cnVjdCBza19idWZmICpza2IsCgkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpxdWV1ZSwKCQkJICAgICAgIHVuc2lnbmVkIGludCBtYXhfc2l6ZSkKc3RhdGljIHZvaWQgdmlydGlvX3RyYW5zcG9ydF9jb2xsYXBzZV9yeF9xdWV1ZShzdHJ1Y3QgdmlydGlvX3Zzb2NrX3NvY2sgKnZ2cykKYGBgCgpTbywgdGhlIGZvY3VzIHN5bWJvbHMgYXJlIGRlZmluaXRlbHk6IGB2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3J4X3F1ZXVlYCwgYHZpcnRpb190cmFuc3BvcnRfY29sbGFwc2Vfc2l6ZWAsIGFuZCBgdmlydGlvX3RyYW5zcG9ydF9jYW5fY29sbGFwc2VgLgoKTGV0JiMzOTtzIHF1aWNrbHkgdmVyaWZ5IHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBhbGwgZGVmaW5lZCB3aXRoaW4gYG5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZpcnRpb190cmFuc3BvcnRfY29sbGFwc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jPTQ0Mz1zdGF0aWMgdW5zaWduZWQgaW50XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6NDQ0OnZpcnRpb190cmFuc3BvcnRfY29sbGFwc2Vfc2l6ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTQ0NS1cdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqcXVldWUsXG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTQ2My0vKiBDYWxsZWQgdW5kZXIgbG9ja19zb2NrIHdoZW4gc2tiIG92ZXJoZWFkIGV4Y2VlZHMgdGhlIGJ1ZGdldC4gKi9cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzo0NjQ6c3RhdGljIHZvaWQgdmlydGlvX3RyYW5zcG9ydF9jb2xsYXBzZV9yeF9xdWV1ZShzdHJ1Y3QgdmlydGlvX3Zzb2NrX3NvY2sgKnZ2cylcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy00NjUte1xuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy01MDQtXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6NTA1Olx0XHRcdGFsbG9jX3NpemUgPSB2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3NpemUoc2tiLCBcdTAwMjZ2dnMtXHUwMDNlcnhfcXVldWUsXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtNTA2LVx0XHRcdFx0XHRcdFx0XHQgICAgY29sbGFwc2VfbWF4KTtcbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM9MTQ4Mz12aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfZW5xdWV1ZShzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLFxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xNTA1LVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZ2dnMtXHUwMDNlcnhfbG9jayk7XG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTUwNjpcdFx0dmlydGlvX3RyYW5zcG9ydF9jb2xsYXBzZV9yeF9xdWV1ZSh2dnMpO1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE1MDctXHRcdHNwaW5fbG9ja19iaChcdTAwMjZ2dnMtXHUwMDNlcnhfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwODMKCQkJCQkJCW91dHB1dDogMTQ5CgkJCQkJCQl0aG91Z2h0czogMjE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFZpcnRpbyBWU29jayBDb2xsYXBzZSBQYXRjaCoqCgpPa2F5LCB0aGUgbmV3IGNvbGxhcHNlIGZ1bmN0aW9ucyBhcmUgZGVmaW5pdGVseSBwcmVzZW50LiBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gaW5jbHVkZSBgdmlydGlvX3RyYW5zcG9ydF9jb2xsYXBzZV9yeF9xdWV1ZWAsIGB2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3NpemVgLCBhbmQgYHZpcnRpb190cmFuc3BvcnRfY2FuX2NvbGxhcHNlYCBpbiBteSBhbmFseXNpcy4gVGhpcyBzZWVtcyBsaWtlIHRoZSBrZXkgYXJlYSB0byB0YXJnZXQuCgpMb29raW5nIGF0IHRoZSBjb25maWdzLCBJIHNlZSB0aGF0IHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgdGhlIGNvcmUgdnNvY2sgdmlydGlvIHRyYW5zcG9ydCBsb2dpYywgd2hpY2ggaXMgZ29vZCDigJMgaXQmIzM5O3MgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLCBhcyBzdGF0ZWQuIExldCBtZSBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3MuIEkga25vdyBJIG5lZWQgYFZJUlRJT19WU09DS0VUU2AsIGBWSE9TVF9WU09DS2AsIGFuZCBgVlNPQ0tFVFNfTE9PUEJBQ0tgLiBBbmQsIGNoZWNraW5nLCB5ZXMsIGBWU09DS0VUU2AgaXMgdGhlIGJhc2UgY29uZmlnLCBgVklSVElPX1ZTT0NLRVRTX0NPTU1PTmAgaXMgdGhlIG1vZHVsZSwgc28gYWxsIHRob3NlIGZsYWdzIGFyZSBhcHByb3ByaWF0ZSBhbmQgdGhlIGNvcnJlY3QgYmFzZS4gR29vZC4KClRoZSBkZXNjcmlwdGlvbiBpcyBjbGVhcjogdGhlIGludGVudGlvbiBpcyB0byBhZGRyZXNzIGNvbm5lY3Rpb24gcmVzZXRzIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSBieSBjb2xsYXBzaW5nIHNtYWxsIHBhY2tldHMgaW4gdGhlIHJlY2VpdmUgcXVldWUuIFRoaXMgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIGEgZ29vZCBvcHRpbWl6YXRpb24gc3RyYXRlZ3kuIFRoZSBuZXdseSBhZGRlZCBmdW5jdGlvbnMgYXJlIHdoZXJlIEkmIzM5O2xsIGNvbmNlbnRyYXRlIG15IGZ1enppbmcgZWZmb3J0cy4KCkFscmlnaHQsIEkmIzM5O20gcmVhZHkgdG8gY2FsbCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTg6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZTT0NLRVRTJiMzNDssCiAgICAmIzM0O1ZJUlRJT19WU09DS0VUUyYjMzQ7LAogICAgJiMzNDtWSE9TVF9WU09DSyYjMzQ7LAogICAgJiMzNDtWU09DS0VUU19MT09QQkFDSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZpcnRpb190cmFuc3BvcnRfY29sbGFwc2VfcnhfcXVldWUmIzM0OywKICAgICYjMzQ7dmlydGlvX3RyYW5zcG9ydF9jb2xsYXBzZV9zaXplJiMzNDssCiAgICAmIzM0O3ZpcnRpb190cmFuc3BvcnRfY2FuX2NvbGxhcHNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbWVjaGFuaXNtIHRvIGNvbGxhcHNlIHNtYWxsIHBhY2tldHMgaW4gdGhlIHZpcnRpbyB2c29jayByZWNlaXZlIHF1ZXVlIHRvIHByZXZlbnQgY29ubmVjdGlvbiByZXNldHMgdW5kZXIgbWVtb3J5IHByZXNzdXJlLiBJdCBtb2RpZmllcyBjb3JlIHZzb2NrIHZpcnRpbyB0cmFuc3BvcnQgbG9naWMgd2hpY2ggaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV3bHkgYWRkZWQgY29sbGFwc2UgZnVuY3Rpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWU09DS0VUUyYjMzQ7LAogICAgJiMzNDtWSVJUSU9fVlNPQ0tFVFMmIzM0OywKICAgICYjMzQ7VkhPU1RfVlNPQ0smIzM0OywKICAgICYjMzQ7VlNPQ0tFVFNfTE9PUEJBQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3J4X3F1ZXVlJiMzNDssCiAgICAmIzM0O3ZpcnRpb190cmFuc3BvcnRfY29sbGFwc2Vfc2l6ZSYjMzQ7LAogICAgJiMzNDt2aXJ0aW9fdHJhbnNwb3J0X2Nhbl9jb2xsYXBzZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG1lY2hhbmlzbSB0byBjb2xsYXBzZSBzbWFsbCBwYWNrZXRzIGluIHRoZSB2aXJ0aW8gdnNvY2sgcmVjZWl2ZSBxdWV1ZSB0byBwcmV2ZW50IGNvbm5lY3Rpb24gcmVzZXRzIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4gSXQgbW9kaWZpZXMgY29yZSB2c29jayB2aXJ0aW8gdHJhbnNwb3J0IGxvZ2ljIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbC4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ld2x5IGFkZGVkIGNvbGxhcHNlIGZ1bmN0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjI5OjM2LjE2MzczODcxNVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4Nzk0NzM3MzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZTT0NLRVRTXCIsXG4gICAgXCJWSVJUSU9fVlNPQ0tFVFNcIixcbiAgICBcIlZIT1NUX1ZTT0NLXCIsXG4gICAgXCJWU09DS0VUU19MT09QQkFDS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZpcnRpb190cmFuc3BvcnRfY29sbGFwc2VfcnhfcXVldWVcIixcbiAgICBcInZpcnRpb190cmFuc3BvcnRfY29sbGFwc2Vfc2l6ZVwiLFxuICAgIFwidmlydGlvX3RyYW5zcG9ydF9jYW5fY29sbGFwc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG1lY2hhbmlzbSB0byBjb2xsYXBzZSBzbWFsbCBwYWNrZXRzIGluIHRoZSB2aXJ0aW8gdnNvY2sgcmVjZWl2ZSBxdWV1ZSB0byBwcmV2ZW50IGNvbm5lY3Rpb24gcmVzZXRzIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4gSXQgbW9kaWZpZXMgY29yZSB2c29jayB2aXJ0aW8gdHJhbnNwb3J0IGxvZ2ljIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbC4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ld2x5IGFkZGVkIGNvbGxhcHNlIGZ1bmN0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6Mjk6MzYuMTYzNzcyNTU1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTU0MDUxMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmYTU4OTlmZWRhZmRjN2JlYThiMDIzYTFhZTYzNDA0YjQzMDI4ODg4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVuIDI2IDE4OjI5OjM0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYyBiL25ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uY1xcbmluZGV4IDA5NDc1MDA3MTY1YjM2Li4zMDRlYTQyNDk5NWQ0ZCAxMDA2NDRcXG4tLS0gYS9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNcXG4rKysgYi9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNcXG5AQCAtNDIwLDYgKzQyMCwxMzcgQEAgc3RhdGljIGludCB2aXJ0aW9fdHJhbnNwb3J0X3NlbmRfcGt0X2luZm8oc3RydWN0IHZzb2NrX3NvY2sgKnZzayxcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgdmlydGlvX3RyYW5zcG9ydF9jYW5fY29sbGFwc2Uoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgc2l6ZSlcXG4re1xcbitcXHQvKiBza2JzIHRoYXQgYXJlIHBhcnRpYWxseSBjb25zdW1lZCwgbWFyayBhIFNFUVBBQ0tFVCBtZXNzYWdlIGJvdW5kYXJ5LFxcbitcXHQgKiBvciBhcmUgYWxyZWFkeSBsYXJnZSBlbm91Z2ggc2hvdWxkIG5vdCBiZSBjb2xsYXBzZWQ6IHRoZXkgZWl0aGVyXFxuK1xcdCAqIG5lZWQgc3BlY2lhbCBhY2NvdW50aW5nLCBjYXJyeSBwcm90b2NvbCBzdGF0ZSwgb3IgYWxyZWFkeSBoYXZlIGFcXG4rXFx0ICogZ29vZCBkYXRhLXRvLW92ZXJoZWFkIHJhdGlvLlxcbitcXHQgKi9cXG4rXFx0aWYgKFZJUlRJT19WU09DS19TS0JfQ0Ioc2tiKS1cXHUwMDNlb2Zmc2V0KVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdGlmIChsZTMyX3RvX2NwdSh2aXJ0aW9fdnNvY2tfaGRyKHNrYiktXFx1MDAzZWZsYWdzKSBcXHUwMDI2IFZJUlRJT19WU09DS19TRVFfRU9NKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDNlPSBzaXplKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbisvKiBJdGVyYXRlIHRocm91Z2ggdGhlIHBhY2tldHMgaW4gdGhlIHF1ZXVlIHN0YXJ0aW5nIGZyb20gdGhlIGN1cnJlbnQgc2tiIHRvXFxuKyAqIGNvdW50IHRoZSBudW1iZXIgb2YgYnl0ZXMgd2UgY2FuIGNvbGxhcHNlLlxcbisgKi9cXG4rc3RhdGljIHVuc2lnbmVkIGludFxcbit2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3NpemUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmX2hlYWQgKnF1ZXVlLFxcbitcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IG1heF9zaXplKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCB0YXJnZXQgPSBza2ItXFx1MDAzZWxlbiAtIFZJUlRJT19WU09DS19TS0JfQ0Ioc2tiKS1cXHUwMDNlb2Zmc2V0O1xcbitcXG4rXFx0d2hpbGUgKChza2IgPSBza2JfcGVla19uZXh0KHNrYiwgcXVldWUpKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgdmlydGlvX3RyYW5zcG9ydF9jYW5fY29sbGFwc2Uoc2tiLCBtYXhfc2l6ZSkpIHtcXG4rXFx0XFx0dW5zaWduZWQgaW50IGxlbiA9IHNrYi1cXHUwMDNlbGVuIC0gVklSVElPX1ZTT0NLX1NLQl9DQihza2IpLVxcdTAwM2VvZmZzZXQ7XFxuK1xcbitcXHRcXHRpZiAobGVuIFxcdTAwM2UgbWF4X3NpemUgLSB0YXJnZXQpXFxuK1xcdFxcdFxcdHJldHVybiB0YXJnZXQ7XFxuK1xcbitcXHRcXHR0YXJnZXQgKz0gbGVuO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gdGFyZ2V0O1xcbit9XFxuK1xcbisvKiBDYWxsZWQgdW5kZXIgbG9ja19zb2NrIHdoZW4gc2tiIG92ZXJoZWFkIGV4Y2VlZHMgdGhlIGJ1ZGdldC4gKi9cXG4rc3RhdGljIHZvaWQgdmlydGlvX3RyYW5zcG9ydF9jb2xsYXBzZV9yeF9xdWV1ZShzdHJ1Y3QgdmlydGlvX3Zzb2NrX3NvY2sgKnZ2cylcXG4re1xcbitcXHQvKiBVc2UgdGhlIHNhbWUgbGluZWFyIGFsbG9jYXRpb24gdGhyZXNob2xkIGFzIHZpcnRpb192c29ja19hbGxvY19za2IoKVxcbitcXHQgKiB0byBhdm9pZCBhZGRpbmcgcHJlc3N1cmUgb24gdGhlIHBhZ2UgYWxsb2NhdG9yLlxcbitcXHQgKi9cXG4rXFx0dW5zaWduZWQgaW50IGNvbGxhcHNlX21heCA9IFNLQl9NQVhfT1JERVIoVklSVElPX1ZTT0NLX1NLQl9IRUFEUk9PTSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUik7XFxuK1xcdHN0cnVjdCBza19idWZmICpza2IsICpuZXh0X3NrYiwgKm5ld19za2IgPSBOVUxMO1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIG5ld19xdWV1ZTtcXG4rXFxuK1xcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2bmV3X3F1ZXVlKTtcXG4rXFxuK1xcdHNrYl9xdWV1ZV93YWxrX3NhZmUoXFx1MDAyNnZ2cy1cXHUwMDNlcnhfcXVldWUsIHNrYiwgbmV4dF9za2IpIHtcXG4rXFx0XFx0c3RydWN0IHZpcnRpb192c29ja19oZHIgKmhkciA9IHZpcnRpb192c29ja19oZHIoc2tiKTtcXG4rXFx0XFx0dTMyIHNyY19vZmYgPSBWSVJUSU9fVlNPQ0tfU0tCX0NCKHNrYiktXFx1MDAzZW9mZnNldDtcXG4rXFx0XFx0dTMyIHNyY19sZW4gPSBza2ItXFx1MDAzZWxlbiAtIHNyY19vZmY7XFxuK1xcdFxcdGJvb2wga2VlcCA9IGZhbHNlO1xcbitcXG4rXFx0XFx0aWYgKCF2aXJ0aW9fdHJhbnNwb3J0X2Nhbl9jb2xsYXBzZShza2IsIGNvbGxhcHNlX21heCkpIHtcXG4rXFx0XFx0XFx0LyogRmluYWxpemUgcGVuZGluZyBjb2xsYXBzZWQgc2tiIHRvIHByZXNlcnZlIHBhY2tldFxcbitcXHRcXHRcXHQgKiBvcmRlcmluZy5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGlmIChuZXdfc2tiKSB7XFxuK1xcdFxcdFxcdFxcdF9fc2tiX3F1ZXVlX3RhaWwoXFx1MDAyNm5ld19xdWV1ZSwgbmV3X3NrYik7XFxuK1xcdFxcdFxcdFxcdG5ld19za2IgPSBOVUxMO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGtlZXAgPSB0cnVlO1xcbitcXHRcXHRcXHRnb3RvIG5leHQ7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIEZpbmFsaXplIGlmIHRoaXMgcGFja2V0IHdvbid0IGZpdCBpbiB0aGUgcmVtYWluaW5nIHRhaWxyb29tLFxcbitcXHRcXHQgKiBzbyB3ZSBjYW4gYWxsb2NhdGUgYSByaWdodC1zaXplZCBuZXdfc2tiLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKG5ld19za2IgXFx1MDAyNlxcdTAwMjYgc3JjX2xlbiBcXHUwMDNlIHNrYl90YWlscm9vbShuZXdfc2tiKSkge1xcbitcXHRcXHRcXHRfX3NrYl9xdWV1ZV90YWlsKFxcdTAwMjZuZXdfcXVldWUsIG5ld19za2IpO1xcbitcXHRcXHRcXHRuZXdfc2tiID0gTlVMTDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKCFuZXdfc2tiKSB7XFxuK1xcdFxcdFxcdHVuc2lnbmVkIGludCBhbGxvY19zaXplO1xcbitcXG4rXFx0XFx0XFx0YWxsb2Nfc2l6ZSA9IHZpcnRpb190cmFuc3BvcnRfY29sbGFwc2Vfc2l6ZShza2IsIFxcdTAwMjZ2dnMtXFx1MDAzZXJ4X3F1ZXVlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgY29sbGFwc2VfbWF4KTtcXG4rXFxuK1xcdFxcdFxcdC8qIE9ubHkgdGhpcyBza2IncyBkYXRhIGlzIGVsaWdpYmxlLCBub3RoaW5nIHRvIG1lcmdlXFxuK1xcdFxcdFxcdCAqIHdpdGguIEtlZXAgYXMtaXMuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRpZiAoYWxsb2Nfc2l6ZSBcXHUwMDNjPSBzcmNfbGVuKSB7XFxuK1xcdFxcdFxcdFxcdGtlZXAgPSB0cnVlO1xcbitcXHRcXHRcXHRcXHRnb3RvIG5leHQ7XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdG5ld19za2IgPSB2aXJ0aW9fdnNvY2tfYWxsb2NfbGluZWFyX3NrYihhbGxvY19zaXplICtcXG4rXFx0XFx0XFx0XFx0XFx0VklSVElPX1ZTT0NLX1NLQl9IRUFEUk9PTSwgR0ZQX0tFUk5FTCk7XFxuK1xcdFxcdFxcdGlmICghbmV3X3NrYilcXG4rXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRcXHRcXHRtZW1jcHkodmlydGlvX3Zzb2NrX2hkcihuZXdfc2tiKSwgaGRyLFxcbitcXHRcXHRcXHQgICAgICAgc2l6ZW9mKHN0cnVjdCB2aXJ0aW9fdnNvY2tfaGRyKSk7XFxuK1xcdFxcdFxcdHZpcnRpb192c29ja19oZHIobmV3X3NrYiktXFx1MDAzZWxlbiA9IDA7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIENhbm5vdCBmYWlsIHNpbmNlIHNyY19vZmYvc3JjX2xlbiBhcmUgd2l0aGluIGJvdW5kcywgYnV0IGlmXFxuK1xcdFxcdCAqIGl0IGRvZXMsIGRpc2NhcmQgbmV3X3NrYiB0byBhdm9pZCBxdWV1aW5nIGNvcnJ1cHRlZCBkYXRhLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKFdBUk5fT05fT05DRShza2JfY29weV9iaXRzKHNrYiwgc3JjX29mZixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHNrYl9wdXQobmV3X3NrYiwgc3JjX2xlbiksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBzcmNfbGVuKSkpIHtcXG4rXFx0XFx0XFx0a2ZyZWVfc2tiKG5ld19za2IpO1xcbitcXHRcXHRcXHRuZXdfc2tiID0gTlVMTDtcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGxlMzJfYWRkX2NwdShcXHUwMDI2dmlydGlvX3Zzb2NrX2hkcihuZXdfc2tiKS1cXHUwMDNlbGVuLCBzcmNfbGVuKTtcXG4rXFx0XFx0dmlydGlvX3Zzb2NrX2hkcihuZXdfc2tiKS1cXHUwMDNlZmxhZ3MgfD0gaGRyLVxcdTAwM2VmbGFncztcXG4rXFxuK25leHQ6XFxuK1xcdFxcdF9fc2tiX3VubGluayhza2IsIFxcdTAwMjZ2dnMtXFx1MDAzZXJ4X3F1ZXVlKTtcXG4rXFx0XFx0aWYgKGtlZXApXFxuK1xcdFxcdFxcdF9fc2tiX3F1ZXVlX3RhaWwoXFx1MDAyNm5ld19xdWV1ZSwgc2tiKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRjb25zdW1lX3NrYihza2IpO1xcbitcXHR9XFxuK291dDpcXG4rXFx0aWYgKG5ld19za2IpXFxuK1xcdFxcdF9fc2tiX3F1ZXVlX3RhaWwoXFx1MDAyNm5ld19xdWV1ZSwgbmV3X3NrYik7XFxuK1xcbitcXHRza2JfcXVldWVfc3BsaWNlKFxcdTAwMjZuZXdfcXVldWUsIFxcdTAwMjZ2dnMtXFx1MDAzZXJ4X3F1ZXVlKTtcXG4rfVxcbitcXG4gc3RhdGljIGJvb2wgdmlydGlvX3RyYW5zcG9ydF9pbmNfcnhfcGt0KHN0cnVjdCB2aXJ0aW9fdnNvY2tfc29jayAqdnZzLFxcbiBcXHRcXHRcXHRcXHRcXHR1MzIgbGVuKVxcbiB7XFxuQEAgLTEzNjMsOCArMTQ5NCwyMSBAQCB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfZW5xdWV1ZShzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLFxcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnZ2cy1cXHUwMDNlcnhfbG9jayk7XFxuIFxcbiBcXHRjYW5fZW5xdWV1ZSA9IHZpcnRpb190cmFuc3BvcnRfaW5jX3J4X3BrdCh2dnMsIGxlbik7XFxuLVxcdGlmICghY2FuX2VucXVldWUpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoIWNhbl9lbnF1ZXVlKSB7XFxuK1xcdFxcdC8qIFRyeSB0byBjb2xsYXBzZSB0aGUgcmVjZWl2ZSBxdWV1ZSB0byByZWR1Y2Ugc2tiIG92ZXJoZWFkIGFuZFxcbitcXHRcXHQgKiBtYWtlIHJvb20gZm9yIHRoaXMgcGFja2V0LlxcbitcXHRcXHQgKiBVbmxvY2sgcnhfbG9jayBzaW5jZSB0aGUgY29sbGFwc2UgbWF5IHNsZWVwIG9yLCBpbiBhbnkgY2FzZSxcXG4rXFx0XFx0ICogdGFrZSBzb21lIHRpbWUgdG8gY29sbGFwc2UgdGhlIHNrYnMsIGJ1dCB0aGlzIGlzIHNhZmUsIHNpbmNlXFxuK1xcdFxcdCAqIHNrX2xvY2sgaXMgaGVsZCBieSBjYWxsZXIgc28gbm8gb25lIGVsc2UgY2FuIGVucXVldWUgb3JcXG4rXFx0XFx0ICogZGVxdWV1ZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ2dnMtXFx1MDAzZXJ4X2xvY2spO1xcbitcXHRcXHR2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3J4X3F1ZXVlKHZ2cyk7XFxuK1xcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2dnZzLVxcdTAwM2VyeF9sb2NrKTtcXG4rXFx0XFx0Y2FuX2VucXVldWUgPSB2aXJ0aW9fdHJhbnNwb3J0X2luY19yeF9wa3QodnZzLCBsZW4pO1xcbitcXHRcXHRpZiAoIWNhbl9lbnF1ZXVlKVxcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbiBcXG4gXFx0aWYgKGxlMzJfdG9fY3B1KGhkci1cXHUwMDNlZmxhZ3MpIFxcdTAwMjYgVklSVElPX1ZTT0NLX1NFUV9FT00pXFxuIFxcdFxcdHZ2cy1cXHUwMDNlbXNnX2NvdW50Kys7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3RpbmcvdnNvY2svdnNvY2tfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy92c29jay92c29ja190ZXN0LmNcXG5pbmRleCA3NmJlMGU0YTdmMGVlNi4uYjRmZjlmOTQ2NTY1YjggMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy92c29jay92c29ja190ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3Zzb2NrL3Zzb2NrX3Rlc3QuY1xcbkBAIC0yMzQ3LDYgKzIzNDcsODggQEAgc3RhdGljIHZvaWQgdGVzdF9zdHJlYW1fdHhfY3JlZGl0X2JvdW5kc19zZXJ2ZXIoY29uc3Qgc3RydWN0IHRlc3Rfb3B0cyAqb3B0cylcXG4gXFx0Y2xvc2UoZmQpO1xcbiB9XFxuIFxcbisvKiBUZXN0IHRoYXQgbWFueSBzbWFsbCBwYWNrZXRzIGRvbid0IGNhdXNlIGEgY29ubmVjdGlvbiByZXNldCB1bmRlciBwcmVzc3VyZVxcbisgKiBhbmQgdGhhdCBkYXRhIGludGVncml0eSBpcyBwcmVzZXJ2ZWQuICBQYWNrZXQgc2l6ZXMgdmFyeSByYW5kb21seSBiZXR3ZWVuXFxuKyAqIDEyOSBhbmQgNTEyIGJ5dGVzLCBhYm92ZSBHT09EX0NPUFlfTEVOICgxMjgpIHRvIGJ5cGFzcyBpbi1wbGFjZSBjb2FsZXNjaW5nXFxuKyAqIGluIHJlY3ZfZW5xdWV1ZSwgZm9yY2luZyBlYWNoIG9uZSBpbnRvIGl0cyBvd24gc2tiLiAgV2l0aG91dCByZWNlaXZlIHF1ZXVlXFxuKyAqIGNvbGxhcHNpbmcsIHRoZSBwZXItc2tiIG92ZXJoZWFkIGV2ZW50dWFsbHkgZXhjZWVkcyBidWZfYWxsb2MgYW5kIHRoZVxcbisgKiBjb25uZWN0aW9uIGlzIHJlc2V0LlxcbisgKi9cXG4rI2RlZmluZSBDT0xMQVBTRV9QS1RfTUlOIDEyOVxcbisjZGVmaW5lIENPTExBUFNFX1BLVF9NQVggNTEyXFxuKyNkZWZpbmUgQ09MTEFQU0VfVE9UQUwgKDIgKiAxMDI0ICogMTAyNClcXG4rXFxuK3N0YXRpYyB2b2lkIHRlc3Rfc3RyZWFtX2NvbGxhcHNlX2NsaWVudChjb25zdCBzdHJ1Y3QgdGVzdF9vcHRzICpvcHRzKVxcbit7XFxuK1xcdHVuc2lnbmVkIGNoYXIgKmRhdGE7XFxuK1xcdHVuc2lnbmVkIGxvbmcgaGFzaDtcXG4rXFx0c2l6ZV90IG9mZnNldCA9IDA7XFxuK1xcdGludCBpLCBmZDtcXG4rXFxuK1xcdGRhdGEgPSBtYWxsb2MoQ09MTEFQU0VfVE9UQUwpO1xcbitcXHRpZiAoIWRhdGEpIHtcXG4rXFx0XFx0cGVycm9yKFxcXCJtYWxsb2NcXFwiKTtcXG4rXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQ09MTEFQU0VfVE9UQUw7IGkrKylcXG4rXFx0XFx0ZGF0YVtpXSA9IHJhbmQoKSBcXHUwMDI2IDB4ZmY7XFxuK1xcbitcXHRmZCA9IHZzb2NrX3N0cmVhbV9jb25uZWN0KG9wdHMtXFx1MDAzZXBlZXJfY2lkLCBvcHRzLVxcdTAwM2VwZWVyX3BvcnQpO1xcbitcXHRpZiAoZmQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHBlcnJvcihcXFwiY29ubmVjdFxcXCIpO1xcbitcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuK1xcdH1cXG4rXFxuK1xcdHdoaWxlIChvZmZzZXQgXFx1MDAzYyBDT0xMQVBTRV9UT1RBTCkge1xcbitcXHRcXHRzaXplX3QgcGt0X3NpemUgPSBDT0xMQVBTRV9QS1RfTUlOICtcXG4rXFx0XFx0XFx0cmFuZCgpICUgKENPTExBUFNFX1BLVF9NQVggLSBDT0xMQVBTRV9QS1RfTUlOICsgMSk7XFxuK1xcbitcXHRcXHRwa3Rfc2l6ZSA9IG1pbihwa3Rfc2l6ZSwgQ09MTEFQU0VfVE9UQUwgLSBvZmZzZXQpO1xcbitcXG4rXFx0XFx0c2VuZF9idWYoZmQsIGRhdGEgKyBvZmZzZXQsIHBrdF9zaXplLCAwLCBwa3Rfc2l6ZSk7XFxuK1xcdFxcdG9mZnNldCArPSBwa3Rfc2l6ZTtcXG4rXFx0fVxcbitcXG4rXFx0aGFzaCA9IGhhc2hfZGpiMihkYXRhLCBDT0xMQVBTRV9UT1RBTCk7XFxuK1xcdGNvbnRyb2xfd3JpdGV1bG9uZyhoYXNoKTtcXG4rXFxuK1xcdGZyZWUoZGF0YSk7XFxuK1xcdGNsb3NlKGZkKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdGVzdF9zdHJlYW1fY29sbGFwc2Vfc2VydmVyKGNvbnN0IHN0cnVjdCB0ZXN0X29wdHMgKm9wdHMpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBoYXNoLCByZW1vdGVfaGFzaDtcXG4rXFx0dW5zaWduZWQgY2hhciAqZGF0YTtcXG4rXFx0aW50IGZkO1xcbitcXG4rXFx0ZGF0YSA9IG1hbGxvYyhDT0xMQVBTRV9UT1RBTCk7XFxuK1xcdGlmICghZGF0YSkge1xcbitcXHRcXHRwZXJyb3IoXFxcIm1hbGxvY1xcXCIpO1xcbitcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuK1xcdH1cXG4rXFxuK1xcdGZkID0gdnNvY2tfc3RyZWFtX2FjY2VwdChWTUFERFJfQ0lEX0FOWSwgb3B0cy1cXHUwMDNlcGVlcl9wb3J0LCBOVUxMKTtcXG4rXFx0aWYgKGZkIFxcdTAwM2MgMCkge1xcbitcXHRcXHRwZXJyb3IoXFxcImFjY2VwdFxcXCIpO1xcbitcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJlY3ZfYnVmKGZkLCBkYXRhLCBDT0xMQVBTRV9UT1RBTCwgMCwgQ09MTEFQU0VfVE9UQUwpO1xcbitcXG4rXFx0aGFzaCA9IGhhc2hfZGpiMihkYXRhLCBDT0xMQVBTRV9UT1RBTCk7XFxuK1xcdHJlbW90ZV9oYXNoID0gY29udHJvbF9yZWFkdWxvbmcoKTtcXG4rXFx0aWYgKGhhc2ggIT0gcmVtb3RlX2hhc2gpIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJoYXNoIG1pc21hdGNoOiBsb2NhbCAlbHUgcmVtb3RlICVsdVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0aGFzaCwgcmVtb3RlX2hhc2gpO1xcbitcXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuK1xcdH1cXG4rXFxuK1xcdGZyZWUoZGF0YSk7XFxuK1xcdGNsb3NlKGZkKTtcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCB0ZXN0X2Nhc2UgdGVzdF9jYXNlc1tdID0ge1xcbiBcXHR7XFxuIFxcdFxcdC5uYW1lID0gXFxcIlNPQ0tfU1RSRUFNIGNvbm5lY3Rpb24gcmVzZXRcXFwiLFxcbkBAIC0yNTQ2LDYgKzI2MjgsMTEgQEAgc3RhdGljIHN0cnVjdCB0ZXN0X2Nhc2UgdGVzdF9jYXNlc1tdID0ge1xcbiBcXHRcXHQucnVuX2NsaWVudCA9IHRlc3Rfc3RyZWFtX21zZ19wZWVrX2NsaWVudCxcXG4gXFx0XFx0LnJ1bl9zZXJ2ZXIgPSB0ZXN0X3N0cmVhbV9wZWVrX2FmdGVyX3JlY3Zfc2VydmVyLFxcbiBcXHR9LFxcbitcXHR7XFxuK1xcdFxcdC5uYW1lID0gXFxcIlNPQ0tfU1RSRUFNIHNtYWxsIHBhY2tldHMgYmFja3ByZXNzdXJlXFxcIixcXG4rXFx0XFx0LnJ1bl9jbGllbnQgPSB0ZXN0X3N0cmVhbV9jb2xsYXBzZV9jbGllbnQsXFxuK1xcdFxcdC5ydW5fc2VydmVyID0gdGVzdF9zdHJlYW1fY29sbGFwc2Vfc2VydmVyLFxcbitcXHR9LFxcbiBcXHR7fSxcXG4gfTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjI5OjM2Ljc1OTg2NzNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MTk4NTk3MjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZTT0NLRVRTXCIsXG4gICAgXCJWSVJUSU9fVlNPQ0tFVFNcIixcbiAgICBcIlZIT1NUX1ZTT0NLXCIsXG4gICAgXCJWU09DS0VUU19MT09QQkFDS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZpcnRpb190cmFuc3BvcnRfY29sbGFwc2VfcnhfcXVldWVcIixcbiAgICBcInZpcnRpb190cmFuc3BvcnRfY29sbGFwc2Vfc2l6ZVwiLFxuICAgIFwidmlydGlvX3RyYW5zcG9ydF9jYW5fY29sbGFwc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG1lY2hhbmlzbSB0byBjb2xsYXBzZSBzbWFsbCBwYWNrZXRzIGluIHRoZSB2aXJ0aW8gdnNvY2sgcmVjZWl2ZSBxdWV1ZSB0byBwcmV2ZW50IGNvbm5lY3Rpb24gcmVzZXRzIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4gSXQgbW9kaWZpZXMgY29yZSB2c29jayB2aXJ0aW8gdHJhbnNwb3J0IGxvZ2ljIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbC4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ld2x5IGFkZGVkIGNvbGxhcHNlIGZ1bmN0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmYTU4OTlmZWRhZmRjN2JlYThiMDIzYTFhZTYzNDA0YjQzMDI4ODg4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdW4gMjYgMTg6Mjk6MzQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMgYi9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNcbmluZGV4IDA5NDc1MDA3MTY1YjM2Li4zMDRlYTQyNDk5NWQ0ZCAxMDA2NDRcbi0tLSBhL25ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uY1xuKysrIGIvbmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jXG5AQCAtNDIwLDYgKzQyMCwxMzcgQEAgc3RhdGljIGludCB2aXJ0aW9fdHJhbnNwb3J0X3NlbmRfcGt0X2luZm8oc3RydWN0IHZzb2NrX3NvY2sgKnZzayxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBib29sIHZpcnRpb190cmFuc3BvcnRfY2FuX2NvbGxhcHNlKHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHRcdCAgdW5zaWduZWQgaW50IHNpemUpXG4re1xuK1x0Lyogc2ticyB0aGF0IGFyZSBwYXJ0aWFsbHkgY29uc3VtZWQsIG1hcmsgYSBTRVFQQUNLRVQgbWVzc2FnZSBib3VuZGFyeSxcbitcdCAqIG9yIGFyZSBhbHJlYWR5IGxhcmdlIGVub3VnaCBzaG91bGQgbm90IGJlIGNvbGxhcHNlZDogdGhleSBlaXRoZXJcbitcdCAqIG5lZWQgc3BlY2lhbCBhY2NvdW50aW5nLCBjYXJyeSBwcm90b2NvbCBzdGF0ZSwgb3IgYWxyZWFkeSBoYXZlIGFcbitcdCAqIGdvb2QgZGF0YS10by1vdmVyaGVhZCByYXRpby5cbitcdCAqL1xuK1x0aWYgKFZJUlRJT19WU09DS19TS0JfQ0Ioc2tiKS1cdTAwM2VvZmZzZXQpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGlmIChsZTMyX3RvX2NwdSh2aXJ0aW9fdnNvY2tfaGRyKHNrYiktXHUwMDNlZmxhZ3MpIFx1MDAyNiBWSVJUSU9fVlNPQ0tfU0VRX0VPTSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNlPSBzaXplKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rLyogSXRlcmF0ZSB0aHJvdWdoIHRoZSBwYWNrZXRzIGluIHRoZSBxdWV1ZSBzdGFydGluZyBmcm9tIHRoZSBjdXJyZW50IHNrYiB0b1xuKyAqIGNvdW50IHRoZSBudW1iZXIgb2YgYnl0ZXMgd2UgY2FuIGNvbGxhcHNlLlxuKyAqL1xuK3N0YXRpYyB1bnNpZ25lZCBpbnRcbit2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3NpemUoc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqcXVldWUsXG4rXHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBtYXhfc2l6ZSlcbit7XG4rXHR1bnNpZ25lZCBpbnQgdGFyZ2V0ID0gc2tiLVx1MDAzZWxlbiAtIFZJUlRJT19WU09DS19TS0JfQ0Ioc2tiKS1cdTAwM2VvZmZzZXQ7XG4rXG4rXHR3aGlsZSAoKHNrYiA9IHNrYl9wZWVrX25leHQoc2tiLCBxdWV1ZSkpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAgIHZpcnRpb190cmFuc3BvcnRfY2FuX2NvbGxhcHNlKHNrYiwgbWF4X3NpemUpKSB7XG4rXHRcdHVuc2lnbmVkIGludCBsZW4gPSBza2ItXHUwMDNlbGVuIC0gVklSVElPX1ZTT0NLX1NLQl9DQihza2IpLVx1MDAzZW9mZnNldDtcbitcbitcdFx0aWYgKGxlbiBcdTAwM2UgbWF4X3NpemUgLSB0YXJnZXQpXG4rXHRcdFx0cmV0dXJuIHRhcmdldDtcbitcbitcdFx0dGFyZ2V0ICs9IGxlbjtcbitcdH1cbitcbitcdHJldHVybiB0YXJnZXQ7XG4rfVxuK1xuKy8qIENhbGxlZCB1bmRlciBsb2NrX3NvY2sgd2hlbiBza2Igb3ZlcmhlYWQgZXhjZWVkcyB0aGUgYnVkZ2V0LiAqL1xuK3N0YXRpYyB2b2lkIHZpcnRpb190cmFuc3BvcnRfY29sbGFwc2VfcnhfcXVldWUoc3RydWN0IHZpcnRpb192c29ja19zb2NrICp2dnMpXG4re1xuK1x0LyogVXNlIHRoZSBzYW1lIGxpbmVhciBhbGxvY2F0aW9uIHRocmVzaG9sZCBhcyB2aXJ0aW9fdnNvY2tfYWxsb2Nfc2tiKClcbitcdCAqIHRvIGF2b2lkIGFkZGluZyBwcmVzc3VyZSBvbiB0aGUgcGFnZSBhbGxvY2F0b3IuXG4rXHQgKi9cbitcdHVuc2lnbmVkIGludCBjb2xsYXBzZV9tYXggPSBTS0JfTUFYX09SREVSKFZJUlRJT19WU09DS19TS0JfSEVBRFJPT00sXG4rXHRcdFx0XHRcdFx0ICBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUik7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqbmV4dF9za2IsICpuZXdfc2tiID0gTlVMTDtcbitcdHN0cnVjdCBza19idWZmX2hlYWQgbmV3X3F1ZXVlO1xuK1xuK1x0X19za2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNm5ld19xdWV1ZSk7XG4rXG4rXHRza2JfcXVldWVfd2Fsa19zYWZlKFx1MDAyNnZ2cy1cdTAwM2VyeF9xdWV1ZSwgc2tiLCBuZXh0X3NrYikge1xuK1x0XHRzdHJ1Y3QgdmlydGlvX3Zzb2NrX2hkciAqaGRyID0gdmlydGlvX3Zzb2NrX2hkcihza2IpO1xuK1x0XHR1MzIgc3JjX29mZiA9IFZJUlRJT19WU09DS19TS0JfQ0Ioc2tiKS1cdTAwM2VvZmZzZXQ7XG4rXHRcdHUzMiBzcmNfbGVuID0gc2tiLVx1MDAzZWxlbiAtIHNyY19vZmY7XG4rXHRcdGJvb2wga2VlcCA9IGZhbHNlO1xuK1xuK1x0XHRpZiAoIXZpcnRpb190cmFuc3BvcnRfY2FuX2NvbGxhcHNlKHNrYiwgY29sbGFwc2VfbWF4KSkge1xuK1x0XHRcdC8qIEZpbmFsaXplIHBlbmRpbmcgY29sbGFwc2VkIHNrYiB0byBwcmVzZXJ2ZSBwYWNrZXRcbitcdFx0XHQgKiBvcmRlcmluZy5cbitcdFx0XHQgKi9cbitcdFx0XHRpZiAobmV3X3NrYikge1xuK1x0XHRcdFx0X19za2JfcXVldWVfdGFpbChcdTAwMjZuZXdfcXVldWUsIG5ld19za2IpO1xuK1x0XHRcdFx0bmV3X3NrYiA9IE5VTEw7XG4rXHRcdFx0fVxuK1x0XHRcdGtlZXAgPSB0cnVlO1xuK1x0XHRcdGdvdG8gbmV4dDtcbitcdFx0fVxuK1xuK1x0XHQvKiBGaW5hbGl6ZSBpZiB0aGlzIHBhY2tldCB3b24ndCBmaXQgaW4gdGhlIHJlbWFpbmluZyB0YWlscm9vbSxcbitcdFx0ICogc28gd2UgY2FuIGFsbG9jYXRlIGEgcmlnaHQtc2l6ZWQgbmV3X3NrYi5cbitcdFx0ICovXG4rXHRcdGlmIChuZXdfc2tiIFx1MDAyNlx1MDAyNiBzcmNfbGVuIFx1MDAzZSBza2JfdGFpbHJvb20obmV3X3NrYikpIHtcbitcdFx0XHRfX3NrYl9xdWV1ZV90YWlsKFx1MDAyNm5ld19xdWV1ZSwgbmV3X3NrYik7XG4rXHRcdFx0bmV3X3NrYiA9IE5VTEw7XG4rXHRcdH1cbitcbitcdFx0aWYgKCFuZXdfc2tiKSB7XG4rXHRcdFx0dW5zaWduZWQgaW50IGFsbG9jX3NpemU7XG4rXG4rXHRcdFx0YWxsb2Nfc2l6ZSA9IHZpcnRpb190cmFuc3BvcnRfY29sbGFwc2Vfc2l6ZShza2IsIFx1MDAyNnZ2cy1cdTAwM2VyeF9xdWV1ZSxcbitcdFx0XHRcdFx0XHRcdFx0ICAgIGNvbGxhcHNlX21heCk7XG4rXG4rXHRcdFx0LyogT25seSB0aGlzIHNrYidzIGRhdGEgaXMgZWxpZ2libGUsIG5vdGhpbmcgdG8gbWVyZ2VcbitcdFx0XHQgKiB3aXRoLiBLZWVwIGFzLWlzLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmIChhbGxvY19zaXplIFx1MDAzYz0gc3JjX2xlbikge1xuK1x0XHRcdFx0a2VlcCA9IHRydWU7XG4rXHRcdFx0XHRnb3RvIG5leHQ7XG4rXHRcdFx0fVxuK1xuK1x0XHRcdG5ld19za2IgPSB2aXJ0aW9fdnNvY2tfYWxsb2NfbGluZWFyX3NrYihhbGxvY19zaXplICtcbitcdFx0XHRcdFx0VklSVElPX1ZTT0NLX1NLQl9IRUFEUk9PTSwgR0ZQX0tFUk5FTCk7XG4rXHRcdFx0aWYgKCFuZXdfc2tiKVxuK1x0XHRcdFx0Z290byBvdXQ7XG4rXG4rXHRcdFx0bWVtY3B5KHZpcnRpb192c29ja19oZHIobmV3X3NrYiksIGhkcixcbitcdFx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCB2aXJ0aW9fdnNvY2tfaGRyKSk7XG4rXHRcdFx0dmlydGlvX3Zzb2NrX2hkcihuZXdfc2tiKS1cdTAwM2VsZW4gPSAwO1xuK1x0XHR9XG4rXG4rXHRcdC8qIENhbm5vdCBmYWlsIHNpbmNlIHNyY19vZmYvc3JjX2xlbiBhcmUgd2l0aGluIGJvdW5kcywgYnV0IGlmXG4rXHRcdCAqIGl0IGRvZXMsIGRpc2NhcmQgbmV3X3NrYiB0byBhdm9pZCBxdWV1aW5nIGNvcnJ1cHRlZCBkYXRhLlxuK1x0XHQgKi9cbitcdFx0aWYgKFdBUk5fT05fT05DRShza2JfY29weV9iaXRzKHNrYiwgc3JjX29mZixcbitcdFx0XHRcdFx0ICAgICAgIHNrYl9wdXQobmV3X3NrYiwgc3JjX2xlbiksXG4rXHRcdFx0XHRcdCAgICAgICBzcmNfbGVuKSkpIHtcbitcdFx0XHRrZnJlZV9za2IobmV3X3NrYik7XG4rXHRcdFx0bmV3X3NrYiA9IE5VTEw7XG4rXHRcdFx0Z290byBvdXQ7XG4rXHRcdH1cbitcbitcdFx0bGUzMl9hZGRfY3B1KFx1MDAyNnZpcnRpb192c29ja19oZHIobmV3X3NrYiktXHUwMDNlbGVuLCBzcmNfbGVuKTtcbitcdFx0dmlydGlvX3Zzb2NrX2hkcihuZXdfc2tiKS1cdTAwM2VmbGFncyB8PSBoZHItXHUwMDNlZmxhZ3M7XG4rXG4rbmV4dDpcbitcdFx0X19za2JfdW5saW5rKHNrYiwgXHUwMDI2dnZzLVx1MDAzZXJ4X3F1ZXVlKTtcbitcdFx0aWYgKGtlZXApXG4rXHRcdFx0X19za2JfcXVldWVfdGFpbChcdTAwMjZuZXdfcXVldWUsIHNrYik7XG4rXHRcdGVsc2VcbitcdFx0XHRjb25zdW1lX3NrYihza2IpO1xuK1x0fVxuK291dDpcbitcdGlmIChuZXdfc2tiKVxuK1x0XHRfX3NrYl9xdWV1ZV90YWlsKFx1MDAyNm5ld19xdWV1ZSwgbmV3X3NrYik7XG4rXG4rXHRza2JfcXVldWVfc3BsaWNlKFx1MDAyNm5ld19xdWV1ZSwgXHUwMDI2dnZzLVx1MDAzZXJ4X3F1ZXVlKTtcbit9XG4rXG4gc3RhdGljIGJvb2wgdmlydGlvX3RyYW5zcG9ydF9pbmNfcnhfcGt0KHN0cnVjdCB2aXJ0aW9fdnNvY2tfc29jayAqdnZzLFxuIFx0XHRcdFx0XHR1MzIgbGVuKVxuIHtcbkBAIC0xMzYzLDggKzE0OTQsMjEgQEAgdmlydGlvX3RyYW5zcG9ydF9yZWN2X2VucXVldWUoc3RydWN0IHZzb2NrX3NvY2sgKnZzayxcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZ2dnMtXHUwMDNlcnhfbG9jayk7XG4gXG4gXHRjYW5fZW5xdWV1ZSA9IHZpcnRpb190cmFuc3BvcnRfaW5jX3J4X3BrdCh2dnMsIGxlbik7XG4tXHRpZiAoIWNhbl9lbnF1ZXVlKVxuLVx0XHRnb3RvIG91dDtcbitcdGlmICghY2FuX2VucXVldWUpIHtcbitcdFx0LyogVHJ5IHRvIGNvbGxhcHNlIHRoZSByZWNlaXZlIHF1ZXVlIHRvIHJlZHVjZSBza2Igb3ZlcmhlYWQgYW5kXG4rXHRcdCAqIG1ha2Ugcm9vbSBmb3IgdGhpcyBwYWNrZXQuXG4rXHRcdCAqIFVubG9jayByeF9sb2NrIHNpbmNlIHRoZSBjb2xsYXBzZSBtYXkgc2xlZXAgb3IsIGluIGFueSBjYXNlLFxuK1x0XHQgKiB0YWtlIHNvbWUgdGltZSB0byBjb2xsYXBzZSB0aGUgc2ticywgYnV0IHRoaXMgaXMgc2FmZSwgc2luY2VcbitcdFx0ICogc2tfbG9jayBpcyBoZWxkIGJ5IGNhbGxlciBzbyBubyBvbmUgZWxzZSBjYW4gZW5xdWV1ZSBvclxuK1x0XHQgKiBkZXF1ZXVlLlxuK1x0XHQgKi9cbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dnZzLVx1MDAzZXJ4X2xvY2spO1xuK1x0XHR2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3J4X3F1ZXVlKHZ2cyk7XG4rXHRcdHNwaW5fbG9ja19iaChcdTAwMjZ2dnMtXHUwMDNlcnhfbG9jayk7XG4rXHRcdGNhbl9lbnF1ZXVlID0gdmlydGlvX3RyYW5zcG9ydF9pbmNfcnhfcGt0KHZ2cywgbGVuKTtcbitcdFx0aWYgKCFjYW5fZW5xdWV1ZSlcbitcdFx0XHRnb3RvIG91dDtcbitcdH1cbiBcbiBcdGlmIChsZTMyX3RvX2NwdShoZHItXHUwMDNlZmxhZ3MpIFx1MDAyNiBWSVJUSU9fVlNPQ0tfU0VRX0VPTSlcbiBcdFx0dnZzLVx1MDAzZW1zZ19jb3VudCsrO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3RpbmcvdnNvY2svdnNvY2tfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy92c29jay92c29ja190ZXN0LmNcbmluZGV4IDc2YmUwZTRhN2YwZWU2Li5iNGZmOWY5NDY1NjViOCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3RpbmcvdnNvY2svdnNvY2tfdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3Zzb2NrL3Zzb2NrX3Rlc3QuY1xuQEAgLTIzNDcsNiArMjM0Nyw4OCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3N0cmVhbV90eF9jcmVkaXRfYm91bmRzX3NlcnZlcihjb25zdCBzdHJ1Y3QgdGVzdF9vcHRzICpvcHRzKVxuIFx0Y2xvc2UoZmQpO1xuIH1cbiBcbisvKiBUZXN0IHRoYXQgbWFueSBzbWFsbCBwYWNrZXRzIGRvbid0IGNhdXNlIGEgY29ubmVjdGlvbiByZXNldCB1bmRlciBwcmVzc3VyZVxuKyAqIGFuZCB0aGF0IGRhdGEgaW50ZWdyaXR5IGlzIHByZXNlcnZlZC4gIFBhY2tldCBzaXplcyB2YXJ5IHJhbmRvbWx5IGJldHdlZW5cbisgKiAxMjkgYW5kIDUxMiBieXRlcywgYWJvdmUgR09PRF9DT1BZX0xFTiAoMTI4KSB0byBieXBhc3MgaW4tcGxhY2UgY29hbGVzY2luZ1xuKyAqIGluIHJlY3ZfZW5xdWV1ZSwgZm9yY2luZyBlYWNoIG9uZSBpbnRvIGl0cyBvd24gc2tiLiAgV2l0aG91dCByZWNlaXZlIHF1ZXVlXG4rICogY29sbGFwc2luZywgdGhlIHBlci1za2Igb3ZlcmhlYWQgZXZlbnR1YWxseSBleGNlZWRzIGJ1Zl9hbGxvYyBhbmQgdGhlXG4rICogY29ubmVjdGlvbiBpcyByZXNldC5cbisgKi9cbisjZGVmaW5lIENPTExBUFNFX1BLVF9NSU4gMTI5XG4rI2RlZmluZSBDT0xMQVBTRV9QS1RfTUFYIDUxMlxuKyNkZWZpbmUgQ09MTEFQU0VfVE9UQUwgKDIgKiAxMDI0ICogMTAyNClcbitcbitzdGF0aWMgdm9pZCB0ZXN0X3N0cmVhbV9jb2xsYXBzZV9jbGllbnQoY29uc3Qgc3RydWN0IHRlc3Rfb3B0cyAqb3B0cylcbit7XG4rXHR1bnNpZ25lZCBjaGFyICpkYXRhO1xuK1x0dW5zaWduZWQgbG9uZyBoYXNoO1xuK1x0c2l6ZV90IG9mZnNldCA9IDA7XG4rXHRpbnQgaSwgZmQ7XG4rXG4rXHRkYXRhID0gbWFsbG9jKENPTExBUFNFX1RPVEFMKTtcbitcdGlmICghZGF0YSkge1xuK1x0XHRwZXJyb3IoXCJtYWxsb2NcIik7XG4rXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbitcdH1cbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIENPTExBUFNFX1RPVEFMOyBpKyspXG4rXHRcdGRhdGFbaV0gPSByYW5kKCkgXHUwMDI2IDB4ZmY7XG4rXG4rXHRmZCA9IHZzb2NrX3N0cmVhbV9jb25uZWN0KG9wdHMtXHUwMDNlcGVlcl9jaWQsIG9wdHMtXHUwMDNlcGVlcl9wb3J0KTtcbitcdGlmIChmZCBcdTAwM2MgMCkge1xuK1x0XHRwZXJyb3IoXCJjb25uZWN0XCIpO1xuK1x0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4rXHR9XG4rXG4rXHR3aGlsZSAob2Zmc2V0IFx1MDAzYyBDT0xMQVBTRV9UT1RBTCkge1xuK1x0XHRzaXplX3QgcGt0X3NpemUgPSBDT0xMQVBTRV9QS1RfTUlOICtcbitcdFx0XHRyYW5kKCkgJSAoQ09MTEFQU0VfUEtUX01BWCAtIENPTExBUFNFX1BLVF9NSU4gKyAxKTtcbitcbitcdFx0cGt0X3NpemUgPSBtaW4ocGt0X3NpemUsIENPTExBUFNFX1RPVEFMIC0gb2Zmc2V0KTtcbitcbitcdFx0c2VuZF9idWYoZmQsIGRhdGEgKyBvZmZzZXQsIHBrdF9zaXplLCAwLCBwa3Rfc2l6ZSk7XG4rXHRcdG9mZnNldCArPSBwa3Rfc2l6ZTtcbitcdH1cbitcbitcdGhhc2ggPSBoYXNoX2RqYjIoZGF0YSwgQ09MTEFQU0VfVE9UQUwpO1xuK1x0Y29udHJvbF93cml0ZXVsb25nKGhhc2gpO1xuK1xuK1x0ZnJlZShkYXRhKTtcbitcdGNsb3NlKGZkKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgdGVzdF9zdHJlYW1fY29sbGFwc2Vfc2VydmVyKGNvbnN0IHN0cnVjdCB0ZXN0X29wdHMgKm9wdHMpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBoYXNoLCByZW1vdGVfaGFzaDtcbitcdHVuc2lnbmVkIGNoYXIgKmRhdGE7XG4rXHRpbnQgZmQ7XG4rXG4rXHRkYXRhID0gbWFsbG9jKENPTExBUFNFX1RPVEFMKTtcbitcdGlmICghZGF0YSkge1xuK1x0XHRwZXJyb3IoXCJtYWxsb2NcIik7XG4rXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbitcdH1cbitcbitcdGZkID0gdnNvY2tfc3RyZWFtX2FjY2VwdChWTUFERFJfQ0lEX0FOWSwgb3B0cy1cdTAwM2VwZWVyX3BvcnQsIE5VTEwpO1xuK1x0aWYgKGZkIFx1MDAzYyAwKSB7XG4rXHRcdHBlcnJvcihcImFjY2VwdFwiKTtcbitcdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuK1x0fVxuK1xuK1x0cmVjdl9idWYoZmQsIGRhdGEsIENPTExBUFNFX1RPVEFMLCAwLCBDT0xMQVBTRV9UT1RBTCk7XG4rXG4rXHRoYXNoID0gaGFzaF9kamIyKGRhdGEsIENPTExBUFNFX1RPVEFMKTtcbitcdHJlbW90ZV9oYXNoID0gY29udHJvbF9yZWFkdWxvbmcoKTtcbitcdGlmIChoYXNoICE9IHJlbW90ZV9oYXNoKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcImhhc2ggbWlzbWF0Y2g6IGxvY2FsICVsdSByZW1vdGUgJWx1XFxuXCIsXG4rXHRcdFx0aGFzaCwgcmVtb3RlX2hhc2gpO1xuK1x0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4rXHR9XG4rXG4rXHRmcmVlKGRhdGEpO1xuK1x0Y2xvc2UoZmQpO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IHRlc3RfY2FzZSB0ZXN0X2Nhc2VzW10gPSB7XG4gXHR7XG4gXHRcdC5uYW1lID0gXCJTT0NLX1NUUkVBTSBjb25uZWN0aW9uIHJlc2V0XCIsXG5AQCAtMjU0Niw2ICsyNjI4LDExIEBAIHN0YXRpYyBzdHJ1Y3QgdGVzdF9jYXNlIHRlc3RfY2FzZXNbXSA9IHtcbiBcdFx0LnJ1bl9jbGllbnQgPSB0ZXN0X3N0cmVhbV9tc2dfcGVla19jbGllbnQsXG4gXHRcdC5ydW5fc2VydmVyID0gdGVzdF9zdHJlYW1fcGVla19hZnRlcl9yZWN2X3NlcnZlcixcbiBcdH0sXG4rXHR7XG4rXHRcdC5uYW1lID0gXCJTT0NLX1NUUkVBTSBzbWFsbCBwYWNrZXRzIGJhY2twcmVzc3VyZVwiLFxuK1x0XHQucnVuX2NsaWVudCA9IHRlc3Rfc3RyZWFtX2NvbGxhcHNlX2NsaWVudCxcbitcdFx0LnJ1bl9zZXJ2ZXIgPSB0ZXN0X3N0cmVhbV9jb2xsYXBzZV9zZXJ2ZXIsXG4rXHR9LFxuIFx0e30sXG4gfTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjI5OjM2Ljc1OTg2ODc3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE5MDU0NDQxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZzb2NrIFZpcnRpbyBUcmFuc3BvcnQgQ29sbGFwc2UgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCdzIG1ha2luZyBjaGFuZ2VzIHRvIGBuZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNgLiBJdCdzIGludHJvZHVjaW5nIGEgZmV3IG5ldyBmdW5jdGlvbnM6IGB2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3J4X3F1ZXVlYCwgYHZpcnRpb190cmFuc3BvcnRfY29sbGFwc2Vfc2l6ZWAsIGFuZCBgdmlydGlvX3RyYW5zcG9ydF9jYW5fY29sbGFwc2VgLiBGcm9tIHdoYXQgSSBjYW4gdGVsbCwgaXQgbG9va3MgbGlrZSBgdmlydGlvX3RyYW5zcG9ydF9jb2xsYXBzZV9yeF9xdWV1ZWAgaXMgYmVpbmcgY2FsbGVkIHdpdGhpbiBgdmlydGlvX3RyYW5zcG9ydF9yZWN2X2VucXVldWVgLCBzcGVjaWZpY2FsbHkgd2hlbiBgdmlydGlvX3RyYW5zcG9ydF9pbmNfcnhfcGt0YCByZXR1cm5zIGZhbHNlLiBUaGlzIGlzIHByZXR0eSBzaWduaWZpY2FudDsgaXQncyByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhlIHZzb2NrIHZpcnRpbyB0cmFuc3BvcnQgbG9naWMsIG1hbmFnaW5nIHRoZSByZWNlaXZlIHF1ZXVlIGFuZCBvcHRpbWl6aW5nIGl0IGJ5IGNvbGxhcHNpbmcgU0tCcyB0byByZWR1Y2Ugb3ZlcmhlYWQuIEZ1bmN0aW9uYWxseSwgdGhpcyBsb29rcyBsaWtlIGEgZ29vZCBjaGFuZ2UuIE15IHNwaWRleS1zZW5zZSBpcyB0ZWxsaW5nIG1lIHRoaXMgaXMgZGVmaW5pdGVseSBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBXZSdyZSBkaXJlY3RseSBtYW5pcHVsYXRpbmcgdGhlIHJlY2VpdmUgcGF0aCBpbiBhIGNyaXRpY2FsIGFyZWEuXG5cbk5vdywgbGV0J3MgZmlndXJlIG91dCB3aGF0IENPTkZJRyBvcHRpb25zIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkuIFRoZSBjb2RlIGl0c2VsZiBpcyBpbiBgbmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jYCwgc28gSSdsbCBjaGVjayBlaXRoZXIgYG5ldC92bXdfdnNvY2svTWFrZWZpbGVgIG9yIGBuZXQvdm13X3Zzb2NrL0tjb25maWdgIHRvIHNlZSB3aGljaCBjb25maWd1cmF0aW9uIGtub2JzIGNvbnRyb2wgaXQuIEZpbmRpbmcgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIHdpbGwgYmUga2V5IHRvIGNyZWF0aW5nIGEgcmVwcm9kdWNpYmxlIHRlc3QgZW52aXJvbm1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3ODksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQxODoyOTo0MS45NTA0MTU1NDZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE1OTcyOTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZpcnRpb190cmFuc3BvcnRfY29tbW9uLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Ztd192c29jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Ztd192c29jay9NYWtlZmlsZT01PW9iai0kKENPTkZJR19WSVJUSU9fVlNPQ0tFVFMpICs9IHZtd192c29ja192aXJ0aW9fdHJhbnNwb3J0Lm9cXG5uZXQvdm13X3Zzb2NrL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX1ZJUlRJT19WU09DS0VUU19DT01NT04pICs9IHZtd192c29ja192aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5vXFxubmV0L3Ztd192c29jay9NYWtlZmlsZS03LW9iai0kKENPTkZJR19IWVBFUlZfVlNPQ0tFVFMpICs9IGh2X3NvY2sub1xcbi0tXFxubmV0L3Ztd192c29jay9NYWtlZmlsZT0xOD12bXdfdnNvY2tfdmlydGlvX3RyYW5zcG9ydC15ICs9IHZpcnRpb190cmFuc3BvcnQub1xcbm5ldC92bXdfdnNvY2svTWFrZWZpbGUtMTktXFxubmV0L3Ztd192c29jay9NYWtlZmlsZToyMDp2bXdfdnNvY2tfdmlydGlvX3RyYW5zcG9ydF9jb21tb24teSArPSB2aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5vXFxubmV0L3Ztd192c29jay9NYWtlZmlsZS0yMS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6Mjk6NDIuMzY2Mzk1MTE1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI2Mjg5MTc1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKlVuZGVyc3RhbmRpbmcgdGhlIFZpcnRpbyB2c29jayBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIGBDT05GSUdfVklSVElPX1ZTT0NLRVRTX0NPTU1PTmAgaXMgdGhlIGNvcmUgcGllY2UgaGVyZSwgdGhlIGZvdW5kYXRpb24uIEJ1dCBpdCdzIG5vdCB1c3VhbGx5IGRpcmVjdGx5IHNlbGVjdGVkLCBpdCdzIHR5cGljYWxseSBicm91Z2h0IGluIHRyYW5zaXRpdmVseSB0aHJvdWdoIGVpdGhlciBgQ09ORklHX1ZJUlRJT19WU09DS0VUU2Agb3IgYENPTkZJR19WSE9TVF9WU09DS2AuIE1ha2VzIHNlbnNlLCB0aGUgY29tbW9uIHN0dWZmIGlzIGEgZGVwZW5kZW5jeS4gTm93LCB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoZXNlIGRlcGVuZGVuY2llcyBhcmUgZGVmaW5lZCBhbmQgd2hhdCB0aGUgb3B0aW9ucyBhcmUsIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgYG5ldC92bXdfdnNvY2svS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHdoZXJlIHRoZSBjb25maWd1cmF0aW9uIGxvZ2ljIGxpdmVzLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTY3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6Mjk6NDUuNjI5Mjg4ODYxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NzUzNTE1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJWSVJUSU9fVlNPQ0tFVFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Ztd192c29jay9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC92bXdfdnNvY2svS2NvbmZpZz0yOT1jb25maWcgVlNPQ0tFVFNfTE9PUEJBQ0tcXG4tLVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZy0zMi1cXHRkZWZhdWx0IHlcXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6MzM6XFx0c2VsZWN0IFZJUlRJT19WU09DS0VUU19DT01NT05cXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMzQtXFx0aGVscFxcbi0tXFxubmV0L3Ztd192c29jay9LY29uZmlnPTQxPWNvbmZpZyBWTVdBUkVfVk1DSV9WU09DS0VUU1xcbi0tXFxubmV0L3Ztd192c29jay9LY29uZmlnLTUyLVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZzo1Mzpjb25maWcgVklSVElPX1ZTT0NLRVRTXFxubmV0L3Ztd192c29jay9LY29uZmlnLTU0LVxcdHRyaXN0YXRlIFxcXCJ2aXJ0aW8gdHJhbnNwb3J0IGZvciBWaXJ0dWFsIFNvY2tldHNcXFwiXFxubmV0L3Ztd192c29jay9LY29uZmlnLTU1LVxcdGRlcGVuZHMgb24gVlNPQ0tFVFMgXFx1MDAyNlxcdTAwMjYgVklSVElPXFxubmV0L3Ztd192c29jay9LY29uZmlnOjU2OlxcdHNlbGVjdCBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXFxubmV0L3Ztd192c29jay9LY29uZmlnLTU3LVxcdGhlbHBcXG4tLVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZy02NS1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6NjY6Y29uZmlnIFZJUlRJT19WU09DS0VUU19DT01NT05cXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNjctXFx0dHJpc3RhdGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6Mjk6NDUuOTA2ODI4ODQ0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA4MTgxODA2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llczogVmlydGlvIHZzLiB2aG9zdF92c29jayoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhlc2Uga2VybmVsIGNvbmZpZ3VyYXRpb25zIGludGVycmVsYXRlLiBJIHNlZSB0aGF0IGVuYWJsaW5nIGBDT05GSUdfVklSVElPX1ZTT0NLRVRTYCBhbmQgYENPTkZJR19WU09DS0VUU19MT09QQkFDS2AgKmJvdGgqIHB1bGwgaW4gYENPTkZJR19WSVJUSU9fVlNPQ0tFVFNfQ09NTU9OYC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyBpdCBzdWdnZXN0cyB0aGVyZSdzIHNvbWUgY29yZSwgc2hhcmVkIGluZnJhc3RydWN0dXJlIHRoZXkgYm90aCByZWx5IG9uIGZvciBWaXJ0SU8tYmFzZWQgdnNvY2sgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIGtlZXAgdGhhdCBkZXBlbmRlbmN5IGluIG1pbmQgd2hlbiBkZWJ1Z2dpbmcgb3IgY29uZmlndXJpbmcgdnNvY2suIEl0J3MgZ29vZCB0byBzZWUgdGhhdCBraW5kIG9mIGZhY3RvcmVkIGFwcHJvYWNoOyBtaW5pbWl6ZXMgY29kZSBkdXBsaWNhdGlvbiBhbmQgaW1wcm92ZXMgbWFpbnRhaW5hYmlsaXR5LlxuXG5Ob3csIEkgYWxzbyB3YW50IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUgb2YgaG93IHZzb2NrIGlzIHVzZWQsIHNvIGxldCdzIGNyb3NzLXJlZmVyZW5jZSB0aGUgYGRyaXZlcnMvdmhvc3QvS2NvbmZpZ2AgZmlsZS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBgVkhPU1RfVlNPQ0tgIG9wdGlvbi4gSSdtIGFzc3VtaW5nIHRoYXQgbWlnaHQgY292ZXIgdGhlIHZob3N0LWJhc2VkIHZpcnR1YWwgc29ja2V0cywgcG90ZW50aWFsbHkgZm9yIHBhcmF2aXJ0dWFsaXplZCBndWVzdHMuIFVuZGVyc3RhbmRpbmcgdGhhdCBjb25uZWN0aW9uIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBkaWZmZXJlbnQgb3B0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdmlydGlvLWJhc2VkIHZzb2NrIGltcGxlbWVudGF0aW9uIGFuZCB0aGUgdmhvc3QtYmFzZWQgaW1wbGVtZW50YXRpb24uIEl0IGhlbHBzIHRvIGhhdmUgYSBoYW5kbGUgb24gKmFsbCogdGhlIHZzb2NrIG9wdGlvbnMuIEl0J3MgYWJvdXQgcHV0dGluZyB0b2dldGhlciBhbGwgdGhlIHB1enpsZSBwaWVjZXMgdG8gc2VlIGhvdyB0aGlzIGFsbCBjb25uZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE0MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjI5OjQ5Ljk4ODY0ODg5OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc0MDg5NTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlZJUlRJT19WU09DS0VUU19DT01NT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvS2NvbmZpZz01Nj1jb25maWcgVkhPU1RfVlNPQ0tcXG4tLVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy01OS1cXHRzZWxlY3QgVkhPU1RcXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NjA6XFx0c2VsZWN0IFZJUlRJT19WU09DS0VUU19DT01NT05cXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNjEtXFx0ZGVmYXVsdCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjI5OjUxLjQ2Mjc0MzY3MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczNDA3NzM1MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVlNvY2sgUlggUXVldWUgQ29sbGFwc2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBWU29jayBjb25maWd1cmF0aW9uczogYENPTkZJR19WSVJUSU9fVlNPQ0tFVFNgLCBgQ09ORklHX1ZIT1NUX1ZTT0NLYCwgYW5kIGBDT05GSUdfVlNPQ0tFVFNfTE9PUEJBQ0tgLiBJJ2xsIG1ha2Ugc3VyZSB0aG9zZSBhcmUgZW5hYmxlZCwgYWxvbmcgd2l0aCBgVklSVElPX1ZTT0NLRVRTYCwgYFZIT1NUX1ZTT0NLYCwgYW5kIGBWU09DS0VUU19MT09QQkFDS2AgdGhlbXNlbHZlcywgYXMgdGhleSdyZSBjbGVhcmx5IGltcG9ydGFudC5cblxuTm93LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrczogZmluZGluZyB0aGUgY3J1Y2lhbCBzeW1ib2xzIHRvIHVuZGVyc3RhbmQuIFRoZSBuZXcgZnVuY3Rpb25zIGFyZSBgdmlydGlvX3RyYW5zcG9ydF9jYW5fY29sbGFwc2VgLCBgdmlydGlvX3RyYW5zcG9ydF9jb2xsYXBzZV9zaXplYCwgYW5kIGB2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3J4X3F1ZXVlYC4gVGhlIGV4aXN0aW5nIGZ1bmN0aW9uIG1vZGlmaWVkIGlzIGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfZW5xdWV1ZWAuXG5cblNpbmNlIGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfZW5xdWV1ZWAgaXMgYSBob3QtcGF0aCBmdW5jdGlvbiwgY2FsbGVkIG9uICpldmVyeSogcGFja2V0IGVucXVldWVkLCB0aGF0IHRlbGxzIG1lIHRoZSBjb2xsYXBzZSBmdW5jdGlvbnMgYXJlIGludm9rZWQgd2hlbiBhIHRocmVzaG9sZCBpcyBtZXQuIFNwZWNpZmljYWxseSwgd2hlbiBgdmlydGlvX3RyYW5zcG9ydF9pbmNfcnhfcGt0YCByZXR1cm5zIGZhbHNlLCB3aGljaCBzdWdnZXN0cyB0aGUgUlggcXVldWUgb3ZlcmhlYWQgaGFzIGV4Y2VlZGVkIGl0cyBhbGxvd2VkIGJ1ZGdldC4gVGhhdCBtZWFucyBgdmlydGlvX3RyYW5zcG9ydF9jb2xsYXBzZV9yeF9xdWV1ZWAgaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZvY3VzZWQgYW5hbHlzaXMuIFdoaWxlIGB2aXJ0aW9fdHJhbnNwb3J0X2Nhbl9jb2xsYXBzZWAgYW5kIGB2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3NpemVgIGFyZSBzdGF0aWMgYW5kIHBvdGVudGlhbGx5IGlubGluZWQsIHRoZXkgYXJlIHN0aWxsIGltcG9ydGFudCBhbmQgYXJlIHdvcnRoIG5vdGluZyB0b28uXG5cbkxldCBtZSBjb25maXJtIGlmIG15IGh1bmNoIGlzIGNvcnJlY3QgYWJvdXQgdGhvc2UgZmlyc3QgdHdvIGJlaW5nIHN0YXRpYy4gKkNoZWNrcyBDb2RlLi4uKiBZZXAsIHRoZXkgYXJlLlxuXG5gYGBjXG5zdGF0aWMgYm9vbCB2aXJ0aW9fdHJhbnNwb3J0X2Nhbl9jb2xsYXBzZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuXHRcdFx0XHRcdCAgdW5zaWduZWQgaW50IHNpemUpXG5zdGF0aWMgdW5zaWduZWQgaW50XG52aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3NpemUoc3RydWN0IHNrX2J1ZmYgKnNrYixcblx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpxdWV1ZSxcblx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbWF4X3NpemUpXG5zdGF0aWMgdm9pZCB2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3J4X3F1ZXVlKHN0cnVjdCB2aXJ0aW9fdnNvY2tfc29jayAqdnZzKVxuYGBgXG5cblNvLCB0aGUgZm9jdXMgc3ltYm9scyBhcmUgZGVmaW5pdGVseTogYHZpcnRpb190cmFuc3BvcnRfY29sbGFwc2VfcnhfcXVldWVgLCBgdmlydGlvX3RyYW5zcG9ydF9jb2xsYXBzZV9zaXplYCwgYW5kIGB2aXJ0aW9fdHJhbnNwb3J0X2Nhbl9jb2xsYXBzZWAuXG5cbkxldCdzIHF1aWNrbHkgdmVyaWZ5IHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBhbGwgZGVmaW5lZCB3aXRoaW4gYG5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2MzEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6Mjk6NTguODAzNTM3NzEyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTkwMTQ5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmlydGlvX3RyYW5zcG9ydF9jb2xsYXBzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jPTQ0Mz1zdGF0aWMgdW5zaWduZWQgaW50XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjQ0NDp2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3NpemUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtNDQ1LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpxdWV1ZSxcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy00NjMtLyogQ2FsbGVkIHVuZGVyIGxvY2tfc29jayB3aGVuIHNrYiBvdmVyaGVhZCBleGNlZWRzIHRoZSBidWRnZXQuICovXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjQ2NDpzdGF0aWMgdm9pZCB2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3J4X3F1ZXVlKHN0cnVjdCB2aXJ0aW9fdnNvY2tfc29jayAqdnZzKVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy00NjUte1xcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTUwNC1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6NTA1OlxcdFxcdFxcdGFsbG9jX3NpemUgPSB2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3NpemUoc2tiLCBcXHUwMDI2dnZzLVxcdTAwM2VyeF9xdWV1ZSxcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtNTA2LVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBjb2xsYXBzZV9tYXgpO1xcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jPTE0ODM9dmlydGlvX3RyYW5zcG9ydF9yZWN2X2VucXVldWUoc3RydWN0IHZzb2NrX3NvY2sgKnZzayxcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xNTA1LVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ2dnMtXFx1MDAzZXJ4X2xvY2spO1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoxNTA2OlxcdFxcdHZpcnRpb190cmFuc3BvcnRfY29sbGFwc2VfcnhfcXVldWUodnZzKTtcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTUwNy1cXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnZ2cy1cXHUwMDNlcnhfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjI5OjU5LjIwMjU2NDc3MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Njc0OTYyNDIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFZpcnRpbyBWU29jayBDb2xsYXBzZSBQYXRjaCoqXG5cbk9rYXksIHRoZSBuZXcgY29sbGFwc2UgZnVuY3Rpb25zIGFyZSBkZWZpbml0ZWx5IHByZXNlbnQuIEknbGwgbWFrZSBzdXJlIHRvIGluY2x1ZGUgYHZpcnRpb190cmFuc3BvcnRfY29sbGFwc2VfcnhfcXVldWVgLCBgdmlydGlvX3RyYW5zcG9ydF9jb2xsYXBzZV9zaXplYCwgYW5kIGB2aXJ0aW9fdHJhbnNwb3J0X2Nhbl9jb2xsYXBzZWAgaW4gbXkgYW5hbHlzaXMuIFRoaXMgc2VlbXMgbGlrZSB0aGUga2V5IGFyZWEgdG8gdGFyZ2V0LlxuXG5Mb29raW5nIGF0IHRoZSBjb25maWdzLCBJIHNlZSB0aGF0IHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgdGhlIGNvcmUgdnNvY2sgdmlydGlvIHRyYW5zcG9ydCBsb2dpYywgd2hpY2ggaXMgZ29vZCDigJMgaXQncyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwsIGFzIHN0YXRlZC4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgY29uZmlncy4gSSBrbm93IEkgbmVlZCBgVklSVElPX1ZTT0NLRVRTYCwgYFZIT1NUX1ZTT0NLYCwgYW5kIGBWU09DS0VUU19MT09QQkFDS2AuIEFuZCwgY2hlY2tpbmcsIHllcywgYFZTT0NLRVRTYCBpcyB0aGUgYmFzZSBjb25maWcsIGBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OYCBpcyB0aGUgbW9kdWxlLCBzbyBhbGwgdGhvc2UgZmxhZ3MgYXJlIGFwcHJvcHJpYXRlIGFuZCB0aGUgY29ycmVjdCBiYXNlLiBHb29kLlxuXG5UaGUgZGVzY3JpcHRpb24gaXMgY2xlYXI6IHRoZSBpbnRlbnRpb24gaXMgdG8gYWRkcmVzcyBjb25uZWN0aW9uIHJlc2V0cyB1bmRlciBtZW1vcnkgcHJlc3N1cmUgYnkgY29sbGFwc2luZyBzbWFsbCBwYWNrZXRzIGluIHRoZSByZWNlaXZlIHF1ZXVlLiBUaGlzIG1ha2VzIHNlbnNlOyBpdCdzIGEgZ29vZCBvcHRpbWl6YXRpb24gc3RyYXRlZ3kuIFRoZSBuZXdseSBhZGRlZCBmdW5jdGlvbnMgYXJlIHdoZXJlIEknbGwgY29uY2VudHJhdGUgbXkgZnV6emluZyBlZmZvcnRzLlxuXG5BbHJpZ2h0LCBJJ20gcmVhZHkgdG8gY2FsbCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA4MywiT3V0cHV0VG9rZW5zIjoxNDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6MzA6MDQuODc3NTI5NjI1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA5MzA1ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZTT0NLRVRTXCIsXG4gICAgXCJWSVJUSU9fVlNPQ0tFVFNcIixcbiAgICBcIlZIT1NUX1ZTT0NLXCIsXG4gICAgXCJWU09DS0VUU19MT09QQkFDS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZpcnRpb190cmFuc3BvcnRfY29sbGFwc2VfcnhfcXVldWVcIixcbiAgICBcInZpcnRpb190cmFuc3BvcnRfY29sbGFwc2Vfc2l6ZVwiLFxuICAgIFwidmlydGlvX3RyYW5zcG9ydF9jYW5fY29sbGFwc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG1lY2hhbmlzbSB0byBjb2xsYXBzZSBzbWFsbCBwYWNrZXRzIGluIHRoZSB2aXJ0aW8gdnNvY2sgcmVjZWl2ZSBxdWV1ZSB0byBwcmV2ZW50IGNvbm5lY3Rpb24gcmVzZXRzIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4gSXQgbW9kaWZpZXMgY29yZSB2c29jayB2aXJ0aW8gdHJhbnNwb3J0IGxvZ2ljIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbC4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ld2x5IGFkZGVkIGNvbGxhcHNlIGZ1bmN0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWU09DS0VUU1wiLFxuICAgIFwiVklSVElPX1ZTT0NLRVRTXCIsXG4gICAgXCJWSE9TVF9WU09DS1wiLFxuICAgIFwiVlNPQ0tFVFNfTE9PUEJBQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3J4X3F1ZXVlXCIsXG4gICAgXCJ2aXJ0aW9fdHJhbnNwb3J0X2NvbGxhcHNlX3NpemVcIixcbiAgICBcInZpcnRpb190cmFuc3BvcnRfY2FuX2NvbGxhcHNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBtZWNoYW5pc20gdG8gY29sbGFwc2Ugc21hbGwgcGFja2V0cyBpbiB0aGUgdmlydGlvIHZzb2NrIHJlY2VpdmUgcXVldWUgdG8gcHJldmVudCBjb25uZWN0aW9uIHJlc2V0cyB1bmRlciBtZW1vcnkgcHJlc3N1cmUuIEl0IG1vZGlmaWVzIGNvcmUgdnNvY2sgdmlydGlvIHRyYW5zcG9ydCBsb2dpYyB3aGljaCBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXdseSBhZGRlZCBjb2xsYXBzZSBmdW5jdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowbd4mc[1] Phase: Succeeded StartedAt: 2026-06-26 18:30:47 +0000 UTC FinishedAt: 2026-06-26 18:30:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd4mc[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-26 18:30:47 +0000 UTC FinishedAt: 2026-06-26 18:30:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd4mc[2] Phase: Succeeded StartedAt: 2026-06-26 18:30:47 +0000 UTC FinishedAt: 2026-06-26 22:30:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd4mc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_collapse_rx_queue","virtio_transport_collapse_size","virtio_transport_can_collapse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"9259d32f-e8b8-4ab6-b09d-8722e35e65dc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-26 18:30:47 +0000 UTC FinishedAt: 2026-06-26 22:30:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_collapse_rx_queue","virtio_transport_collapse_size","virtio_transport_can_collapse"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"9259d32f-e8b8-4ab6-b09d-8722e35e65dc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowbd4mc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_collapse_rx_queue","virtio_transport_collapse_size","virtio_transport_can_collapse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"9259d32f-e8b8-4ab6-b09d-8722e35e65dc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-26 18:30:47 +0000 UTC FinishedAt: 2026-06-26 18:31:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd4mc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_collapse_rx_queue","virtio_transport_collapse_size","virtio_transport_can_collapse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"9259d32f-e8b8-4ab6-b09d-8722e35e65dc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-26 18:30:47 +0000 UTC FinishedAt: 2026-06-26 18:30:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowbd4mc/series-workflowbd4mc-convert-artifact-627793212/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbd4mc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_collapse_rx_queue","virtio_transport_collapse_size","virtio_transport_can_collapse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"9259d32f-e8b8-4ab6-b09d-8722e35e65dc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-26 18:31:07 +0000 UTC FinishedAt: 2026-06-26 18:56:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd4mc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_collapse_rx_queue","virtio_transport_collapse_size","virtio_transport_can_collapse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"9259d32f-e8b8-4ab6-b09d-8722e35e65dc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-26 18:31:07 +0000 UTC FinishedAt: 2026-06-26 18:56:38 +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:*c0d03a0c-4aeb-4d2f-8c45-56419dc85314,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-workflowbd4mc/series-workflowbd4mc-convert-artifact-627793212/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": "58dc87de-3b4e-4f03-b53e-5966174d10df", "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-workflowbd4mc/series-workflowbd4mc-build-action-2972708458/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbd4mc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_collapse_rx_queue","virtio_transport_collapse_size","virtio_transport_can_collapse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"9259d32f-e8b8-4ab6-b09d-8722e35e65dc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-26 18:31:07 +0000 UTC FinishedAt: 2026-06-26 18:56:28 +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:*c0d03a0c-4aeb-4d2f-8c45-56419dc85314,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-workflowbd4mc/series-workflowbd4mc-convert-artifact-627793212/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": "58dc87de-3b4e-4f03-b53e-5966174d10df", "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-workflowbd4mc/series-workflowbd4mc-build-action-2972708458/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbd4mc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_collapse_rx_queue","virtio_transport_collapse_size","virtio_transport_can_collapse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"9259d32f-e8b8-4ab6-b09d-8722e35e65dc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-26 18:56:38 +0000 UTC FinishedAt: 2026-06-26 18:56:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd4mc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_collapse_rx_queue","virtio_transport_collapse_size","virtio_transport_can_collapse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"9259d32f-e8b8-4ab6-b09d-8722e35e65dc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-26 18:56:38 +0000 UTC FinishedAt: 2026-06-26 18:56:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd4mc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_collapse_rx_queue","virtio_transport_collapse_size","virtio_transport_can_collapse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"9259d32f-e8b8-4ab6-b09d-8722e35e65dc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-26 18:56:38 +0000 UTC FinishedAt: 2026-06-26 18:56:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd4mc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_collapse_rx_queue","virtio_transport_collapse_size","virtio_transport_can_collapse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"9259d32f-e8b8-4ab6-b09d-8722e35e65dc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-26 18:56:38 +0000 UTC FinishedAt: 2026-06-26 18:56:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"9259d32f-e8b8-4ab6-b09d-8722e35e65dc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowbd4mc/series-workflowbd4mc-convert-artifact-1025380731/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbd4mc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_collapse_rx_queue","virtio_transport_collapse_size","virtio_transport_can_collapse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"9259d32f-e8b8-4ab6-b09d-8722e35e65dc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-26 18:56:48 +0000 UTC FinishedAt: 2026-06-26 18:59:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd4mc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_collapse_rx_queue","virtio_transport_collapse_size","virtio_transport_can_collapse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"9259d32f-e8b8-4ab6-b09d-8722e35e65dc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-26 18:56:48 +0000 UTC FinishedAt: 2026-06-26 18:58:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*58dc87de-3b4e-4f03-b53e-5966174d10df,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-workflowbd4mc/series-workflowbd4mc-build-action-2972708458/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-workflowbd4mc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_collapse_rx_queue","virtio_transport_collapse_size","virtio_transport_can_collapse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"9259d32f-e8b8-4ab6-b09d-8722e35e65dc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-26 18:59:01 +0000 UTC FinishedAt: 2026-06-26 18:59:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd4mc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_collapse_rx_queue","virtio_transport_collapse_size","virtio_transport_can_collapse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"9259d32f-e8b8-4ab6-b09d-8722e35e65dc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-26 18:59:01 +0000 UTC FinishedAt: 2026-06-26 18:59:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd4mc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_collapse_rx_queue","virtio_transport_collapse_size","virtio_transport_can_collapse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"9259d32f-e8b8-4ab6-b09d-8722e35e65dc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-26 18:59:01 +0000 UTC FinishedAt: 2026-06-26 19:25:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd4mc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_collapse_rx_queue","virtio_transport_collapse_size","virtio_transport_can_collapse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"9259d32f-e8b8-4ab6-b09d-8722e35e65dc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-26 18:59:01 +0000 UTC FinishedAt: 2026-06-26 19:25:26 +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:*c0d03a0c-4aeb-4d2f-8c45-56419dc85314,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-workflowbd4mc/series-workflowbd4mc-convert-artifact-1025380731/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": "ebe3ef07-da69-4191-a90c-a21d17589180", "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-workflowbd4mc/series-workflowbd4mc-build-action-2807858591/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbd4mc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_collapse_rx_queue","virtio_transport_collapse_size","virtio_transport_can_collapse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"9259d32f-e8b8-4ab6-b09d-8722e35e65dc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-26 18:59:01 +0000 UTC FinishedAt: 2026-06-26 19:25:16 +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:*c0d03a0c-4aeb-4d2f-8c45-56419dc85314,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-workflowbd4mc/series-workflowbd4mc-convert-artifact-1025380731/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": "ebe3ef07-da69-4191-a90c-a21d17589180", "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-workflowbd4mc/series-workflowbd4mc-build-action-2807858591/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbd4mc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_collapse_rx_queue","virtio_transport_collapse_size","virtio_transport_can_collapse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"9259d32f-e8b8-4ab6-b09d-8722e35e65dc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-26 19:25:26 +0000 UTC FinishedAt: 2026-06-26 19:25:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd4mc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_collapse_rx_queue","virtio_transport_collapse_size","virtio_transport_can_collapse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"9259d32f-e8b8-4ab6-b09d-8722e35e65dc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-26 19:25:26 +0000 UTC FinishedAt: 2026-06-26 19:25:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd4mc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_collapse_rx_queue","virtio_transport_collapse_size","virtio_transport_can_collapse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"9259d32f-e8b8-4ab6-b09d-8722e35e65dc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-26 19:25:26 +0000 UTC FinishedAt: 2026-06-26 19:27:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd4mc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_collapse_rx_queue","virtio_transport_collapse_size","virtio_transport_can_collapse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"9259d32f-e8b8-4ab6-b09d-8722e35e65dc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-26 19:25:26 +0000 UTC FinishedAt: 2026-06-26 19:27:19 +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:*ebe3ef07-da69-4191-a90c-a21d17589180,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-workflowbd4mc/series-workflowbd4mc-build-action-2807858591/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-workflowbd4mc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_collapse_rx_queue","virtio_transport_collapse_size","virtio_transport_can_collapse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"9259d32f-e8b8-4ab6-b09d-8722e35e65dc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-26 19:27:28 +0000 UTC FinishedAt: 2026-06-26 22:30:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd4mc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_collapse_rx_queue","virtio_transport_collapse_size","virtio_transport_can_collapse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"9259d32f-e8b8-4ab6-b09d-8722e35e65dc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-26 19:27:28 +0000 UTC FinishedAt: 2026-06-26 22:30:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_collapse_rx_queue","virtio_transport_collapse_size","virtio_transport_can_collapse"],"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:*58dc87de-3b4e-4f03-b53e-5966174d10df,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ebe3ef07-da69-4191-a90c-a21d17589180,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-workflowbd4mc/series-workflowbd4mc-build-action-2972708458/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-workflowbd4mc/series-workflowbd4mc-build-action-2807858591/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowbd4mc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_collapse_rx_queue","virtio_transport_collapse_size","virtio_transport_can_collapse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"9259d32f-e8b8-4ab6-b09d-8722e35e65dc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-26 19:27:28 +0000 UTC FinishedAt: 2026-06-26 19:27:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd4mc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_collapse_rx_queue","virtio_transport_collapse_size","virtio_transport_can_collapse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"9259d32f-e8b8-4ab6-b09d-8722e35e65dc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-26 19:27:28 +0000 UTC FinishedAt: 2026-06-26 19:27:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_collapse_rx_queue","virtio_transport_collapse_size","virtio_transport_can_collapse"],"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-workflowbd4mc/series-workflowbd4mc-convert-artifact-1183361396/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbd4mc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_collapse_rx_queue","virtio_transport_collapse_size","virtio_transport_can_collapse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"9259d32f-e8b8-4ab6-b09d-8722e35e65dc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-26 19:27:28 +0000 UTC FinishedAt: 2026-06-26 19:27:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd4mc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_collapse_rx_queue","virtio_transport_collapse_size","virtio_transport_can_collapse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"9259d32f-e8b8-4ab6-b09d-8722e35e65dc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-26 19:27:28 +0000 UTC FinishedAt: 2026-06-26 19:27:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd4mc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_collapse_rx_queue","virtio_transport_collapse_size","virtio_transport_can_collapse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"9259d32f-e8b8-4ab6-b09d-8722e35e65dc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-26 19:27:28 +0000 UTC FinishedAt: 2026-06-26 19:27:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd4mc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_collapse_rx_queue","virtio_transport_collapse_size","virtio_transport_can_collapse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"9259d32f-e8b8-4ab6-b09d-8722e35e65dc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-26 19:27:38 +0000 UTC FinishedAt: 2026-06-26 22:30:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbd4mc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_collapse_rx_queue","virtio_transport_collapse_size","virtio_transport_can_collapse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VHOST_VSOCK","VSOCKETS_LOOPBACK"],"series_id":"9259d32f-e8b8-4ab6-b09d-8722e35e65dc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-26 19:27:38 +0000 UTC FinishedAt: 2026-06-26 22:29:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*58dc87de-3b4e-4f03-b53e-5966174d10df,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ebe3ef07-da69-4191-a90c-a21d17589180,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-workflowbd4mc/series-workflowbd4mc-build-action-2972708458/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-workflowbd4mc/series-workflowbd4mc-build-action-2807858591/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-workflowbd4mc/series-workflowbd4mc-convert-artifact-1183361396/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,}