Name: series-workflowdfmnb Phase: Succeeded StartedAt: 2026-07-16 07:36:32 +0000 UTC FinishedAt: 2026-07-16 09:48:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfmnb[0] Phase: Succeeded StartedAt: 2026-07-16 07:36:32 +0000 UTC FinishedAt: 2026-07-16 07:46:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfmnb[0].run-triage Phase: Succeeded StartedAt: 2026-07-16 07:36:32 +0000 UTC FinishedAt: 2026-07-16 07:46:32 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_VDPA", "VDPA", "VDPA_SIM", "VDPA_SIM_NET", "VDPA_SIM_BLOCK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_VDPA", "VDPA", "VDPA_SIM", "VDPA_SIM_NET", "VDPA_SIM_BLOCK" ], "series_id": "ff4a72f9-93fe-49b7-9969-a8a478c02610" }, "track": "KASAN", "fuzz": { "focus": [ "kvm", "net" ], "focus_symbols": [ "vhost_vdpa_process_iotlb_msg" ], "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+CgkJCTx0ZD4yMDI2LzA3LzE2IDA3OjQ0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX1ZEUEEmIzM0OywKICAgICYjMzQ7VkRQQSYjMzQ7LAogICAgJiMzNDtWRFBBX1NJTSYjMzQ7LAogICAgJiMzNDtWRFBBX1NJTV9ORVQmIzM0OywKICAgICYjMzQ7VkRQQV9TSU1fQkxPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiBWSE9TVF9JT1RMQl9CQVRDSF9FTkQgaW4gdmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZy4gSXQgY2hhbmdlcyB0aGUgY29udHJvbCBmbG93IHN1Y2ggdGhhdCBpZiBvcHMtXHUwMDNlc2V0X21hcCBpcyBleGVjdXRlZCwgdGhlIGZ1bmN0aW9uIGJyZWFrcyBvdXQgb2YgdGhlIHN3aXRjaCBzdGF0ZW1lbnQgYmVmb3JlIHNldHRpbmcgdi1cdTAwM2Vpbl9iYXRjaCA9IGZhbHNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IHZEUEEgSU9UTEIgYmF0Y2hlcyBhcmUgcHJvY2Vzc2VkIGFuZCBjb3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIGluY29ycmVjdCBiYXRjaCBzdGF0ZSBtYW5hZ2VtZW50LiBJdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHZob3N0IGlvY3Rscy9jaGFyYWN0ZXIgZGV2aWNlIHdyaXRlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwNzo0NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGVkM2JjNDUwYWZiMWUyNDc3ZGI4MGQ0ZDAyNTlmMDFhZmI5MjNkOWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAxNiAwNzo0NDozNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3ZkcGEuYyBiL2RyaXZlcnMvdmhvc3QvdmRwYS5jXG5pbmRleCBhYzU1Mjc1ZmEwZDBhZS4uOTA4Y2EzODNiMTUyMmEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Zob3N0L3ZkcGEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92aG9zdC92ZHBhLmNcbkBAIC0xMjkyLDggJiM0MzsxMjkyLDEwIEBAIHN0YXRpYyBpbnQgdmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHUzMiBhc2lkLFxuIFx0XHR2LVx1MDAzZWluX2JhdGNoID0gdHJ1ZTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFZIT1NUX0lPVExCX0JBVENIX0VORDpcbi1cdFx0aWYgKHYtXHUwMDNlaW5fYmF0Y2ggXHUwMDI2XHUwMDI2IG9wcy1cdTAwM2VzZXRfbWFwKVxuLVx0XHRcdG9wcy1cdTAwM2VzZXRfbWFwKHZkcGEsIGFzaWQsIGlvdGxiKTtcbiYjNDM7XHRcdGlmICh2LVx1MDAzZWluX2JhdGNoIFx1MDAyNlx1MDAyNiBvcHMtXHUwMDNlc2V0X21hcCkge1xuJiM0MztcdFx0XHRyID0gb3BzLVx1MDAzZXNldF9tYXAodmRwYSwgYXNpZCwgaW90bGIpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiBcdFx0di1cdTAwM2Vpbl9iYXRjaCA9IGZhbHNlO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDc6NDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkhPU1RfVkRQQSYjMzQ7LAogICAgJiMzNDtWRFBBJiMzNDssCiAgICAmIzM0O1ZEUEFfU0lNJiMzNDssCiAgICAmIzM0O1ZEUEFfU0lNX05FVCYjMzQ7LAogICAgJiMzNDtWRFBBX1NJTV9CTE9DSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl9tc2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhhbmRsaW5nIG9mIFZIT1NUX0lPVExCX0JBVENIX0VORCBpbiB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnLiBJdCBjaGFuZ2VzIHRoZSBjb250cm9sIGZsb3cgc3VjaCB0aGF0IGlmIG9wcy1cdTAwM2VzZXRfbWFwIGlzIGV4ZWN1dGVkLCB0aGUgZnVuY3Rpb24gYnJlYWtzIG91dCBvZiB0aGUgc3dpdGNoIHN0YXRlbWVudCBiZWZvcmUgc2V0dGluZyB2LVx1MDAzZWluX2JhdGNoID0gZmFsc2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgdkRQQSBJT1RMQiBiYXRjaGVzIGFyZSBwcm9jZXNzZWQgYW5kIGNvdWxkIHBvdGVudGlhbGx5IGxlYWQgdG8gaW5jb3JyZWN0IGJhdGNoIHN0YXRlIG1hbmFnZW1lbnQuIEl0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdmhvc3QgaW9jdGxzL2NoYXJhY3RlciBkZXZpY2Ugd3JpdGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlZDNiYzQ1MGFmYjFlMjQ3N2RiODBkNGQwMjU5ZjAxYWZiOTIzZDliCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMTYgMDc6NDQ6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3ZkcGEuYyBiL2RyaXZlcnMvdmhvc3QvdmRwYS5jCmluZGV4IGFjNTUyNzVmYTBkMGFlLi45MDhjYTM4M2IxNTIyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC92ZHBhLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92aG9zdC92ZHBhLmMKQEAgLTEyOTIsOCAmIzQzOzEyOTIsMTAgQEAgc3RhdGljIGludCB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgdTMyIGFzaWQsCiAJCXYtJmd0O2luX2JhdGNoID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBWSE9TVF9JT1RMQl9CQVRDSF9FTkQ6Ci0JCWlmICh2LSZndDtpbl9iYXRjaCAmYW1wOyZhbXA7IG9wcy0mZ3Q7c2V0X21hcCkKLQkJCW9wcy0mZ3Q7c2V0X21hcCh2ZHBhLCBhc2lkLCBpb3RsYik7CiYjNDM7CQlpZiAodi0mZ3Q7aW5fYmF0Y2ggJmFtcDsmYW1wOyBvcHMtJmd0O3NldF9tYXApIHsKJiM0MzsJCQlyID0gb3BzLSZndDtzZXRfbWFwKHZkcGEsIGFzaWQsIGlvdGxiKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KIAkJdi0mZ3Q7aW5fYmF0Y2ggPSBmYWxzZTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDc6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBWRFBBIElPVExCIEJhdGNoIEVuZCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGRyaXZlcnMvdmhvc3QvdmRwYS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgdmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZ2AgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGlzIGluIGhvdyB0aGUgYFZIT1NUX0lPVExCX0JBVENIX0VORGAgY2FzZSBpcyBoYW5kbGVkLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBjb2RlICpiZWZvcmUqIHRoZSBwYXRjaCBzaW1wbHkgY2hlY2tzIGlmIHdlJiMzOTtyZSBpbiBhIGJhdGNoIGFuZCBpZiBhIGBzZXRfbWFwYCBvcGVyYXRpb24gaXMgZGVmaW5lZC4gSWYgc28sIGl0IGNhbGxzIGl0IGFuZCB0aGVuICphbHdheXMqIHNldHMgYHYtJmd0O2luX2JhdGNoYCB0byBgZmFsc2VgLiBTaW1wbGUuCgpOb3csICphZnRlciogdGhlIHBhdGNoLCBpdCBzZWVtcyBsaWtlIHdlJiMzOTt2ZSBpbnRyb2R1Y2VkIGEgc3VidGxlIGJ1dCBzaWduaWZpY2FudCBkaWZmZXJlbmNlLiBJZiB3ZSYjMzk7cmUgaW4gYSBiYXRjaCBhbmQgYG9wcy0mZ3Q7c2V0X21hcGAgZXhpc3RzLCB3ZSBub3cgY2FsbCBgb3BzLSZndDtzZXRfbWFwYCwgKmJ1dCogd2UgdGhlbiAqaW1tZWRpYXRlbHkgYnJlYWsqIG91dCBvZiB0aGUgYHN3aXRjaGAgc3RhdGVtZW50ISBXYWl0IGEgc2Vjb25kLi4uIHRoYXQgYGJyZWFrO2AgbWVhbnMgYHYtJmd0O2luX2JhdGNoYCBpcyBvbmx5IHNldCB0byBgZmFsc2VgICppZiogdGhlIGBvcHMtJmd0O3NldF9tYXBgIGlzICpub3QqIGNhbGxlZC4gSG1tLgoKVGhpcyBtZWFucyB0aGF0IGlmIHdlIGNhbGwgYG9wcy0mZ3Q7c2V0X21hcGAgKHdoaWNoIHByZXN1bWFibHkgZG9lcyB0aGUgSU9UTEIgbWFwcGluZyksIHdlJiMzOTtyZSAqbm90KiByZXNldHRpbmcgdGhlIGBpbl9iYXRjaGAgZmxhZy4gU28gaWYgYG9wcy0mZ3Q7c2V0X21hcGAgaXMgdHJ1ZSwgdGhlIHN0YXRlIHdpbGwgYmUgbGVmdCBgdHJ1ZWAuIE9rLCBzbyB3ZSYjMzk7cmUgc2tpcHBpbmcgYHYtJmd0O2luX2JhdGNoID0gZmFsc2U7YCBpZiBgb3BzLSZndDtzZXRfbWFwYCByZXR1cm5zIHN1Y2Nlc3NmdWxseSwgb3IgYXQgYWxsLiBUaGUgcmV0dXJuIG9mIHRoZSBvcGVyYXRpb24gaXMgc3RvcmVkIGluIHRoZSB2YXJpYWJsZSBgcmAgdG8gYmUgcHJvY2Vzc2VkLgoKUmlnaHQsIHNvIHRoYXQmIzM5O3MgYSBwcmV0dHkgY3JpdGljYWwgY2hhbmdlLiBUaGlzIGhhcyBpbXBsaWNhdGlvbnMgb24gdGhlIHN0YXRlIG1hY2hpbmUgdGhhdCB0aGlzIGZ1bmN0aW9uIGltcGxlbWVudHMuIFNvIGl0JiMzOTtzIHByb2JhYmx5IGJlc3QgdG8gY2hlY2sgdGhlIGNvZGUgYXJvdW5kIGB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnYCwgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGhlcmUsIGJlY2F1c2UgdGhpcyBsb29rcyB0byBwb3RlbnRpYWxseSBpbnRyb2R1Y2UgYSBidWcuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IGZ1bmN0aW9uICphY3R1YWxseSogZG9lcy4gVGltZSB0byBkaXZlIGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwNzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdmRwYS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjgwOlx0XHRcdGdvdG8gdW5sb2NrO1xuMTI4MTpcdFx0fVxuMTI4MjpcdFxuMTI4MzpcdFx0c3dpdGNoIChtc2ctXHUwMDNldHlwZSkge1xuMTI4NDpcdFx0Y2FzZSBWSE9TVF9JT1RMQl9VUERBVEU6XG4xMjg1Olx0XHRcdHIgPSB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfdXBkYXRlKHYsIGlvdGxiLCBtc2cpO1xuMTI4NjpcdFx0XHRicmVhaztcbjEyODc6XHRcdGNhc2UgVkhPU1RfSU9UTEJfSU5WQUxJREFURTpcbjEyODg6XHRcdFx0dmhvc3RfdmRwYV91bm1hcCh2LCBpb3RsYiwgbXNnLVx1MDAzZWlvdmEsIG1zZy1cdTAwM2VzaXplKTtcbjEyODk6XHRcdFx0YnJlYWs7XG4xMjkwOlx0XHRjYXNlIFZIT1NUX0lPVExCX0JBVENIX0JFR0lOOlxuMTI5MTpcdFx0XHR2LVx1MDAzZWJhdGNoX2FzaWQgPSBhc2lkO1xuMTI5MjpcdFx0XHR2LVx1MDAzZWluX2JhdGNoID0gdHJ1ZTtcbjEyOTM6XHRcdFx0YnJlYWs7XG4xMjk0Olx0XHRjYXNlIFZIT1NUX0lPVExCX0JBVENIX0VORDpcbjEyOTU6XHRcdFx0aWYgKHYtXHUwMDNlaW5fYmF0Y2ggXHUwMDI2XHUwMDI2IG9wcy1cdTAwM2VzZXRfbWFwKSB7XG4xMjk2Olx0XHRcdFx0ciA9IG9wcy1cdTAwM2VzZXRfbWFwKHZkcGEsIGFzaWQsIGlvdGxiKTtcbjEyOTc6XHRcdFx0XHRicmVhaztcbjEyOTg6XHRcdFx0fVxuMTI5OTpcdFx0XHR2LVx1MDAzZWluX2JhdGNoID0gZmFsc2U7XG4xMzAwOlx0XHRcdGJyZWFrO1xuMTMwMTpcdFx0ZGVmYXVsdDpcbjEzMDI6XHRcdFx0ciA9IC1FSU5WQUw7XG4xMzAzOlx0XHRcdGJyZWFrO1xuMTMwNDpcdFx0fVxuMTMwNTpcdHVubG9jazpcbjEzMDY6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXYtXHUwMDNlbXV0ZXgpO1xuMTMwNzpcdFxuMTMwODpcdFx0cmV0dXJuIHI7XG4xMzA5Olx0fVxuMTMxMDpcdFxuMTMxMTpcdHN0YXRpYyBzc2l6ZV90IHZob3N0X3ZkcGFfY2hyX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLFxuMTMxMjpcdFx0XHRcdFx0XHQgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuMTMxMzpcdHtcbjEzMTQ6XHRcdHN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi1cdTAwM2VraV9maWxwO1xuMTMxNTpcdFx0c3RydWN0IHZob3N0X3ZkcGEgKnYgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbjEzMTY6XHRcdHN0cnVjdCB2aG9zdF9kZXYgKmRldiA9IFx1MDAyNnYtXHUwMDNldmRldjtcbjEzMTc6XHRcbjEzMTg6XHRcdHJldHVybiB2aG9zdF9jaHJfd3JpdGVfaXRlcihkZXYsIGZyb20pO1xuMTMxOTpcdH1cbjEzMjA6XHRcbjEzMjE6XHRzdGF0aWMgaW50IHZob3N0X3ZkcGFfYWxsb2NfZG9tYWluKHN0cnVjdCB2aG9zdF92ZHBhICp2KVxuMTMyMjpcdHtcbjEzMjM6XHRcdHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYSA9IHYtXHUwMDNldmRwYTtcbjEzMjQ6XHRcdGNvbnN0IHN0cnVjdCB2ZHBhX2NvbmZpZ19vcHMgKm9wcyA9IHZkcGEtXHUwMDNlY29uZmlnO1xuMTMyNTpcdFx0dW5pb24gdmlydGlvX21hcCBtYXAgPSB2ZHBhX2dldF9tYXAodmRwYSk7XG4xMzI2Olx0XHRzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2ID0gbWFwLmRtYV9kZXY7XG4xMzI3Olx0XHRpbnQgcmV0O1xuMTMyODpcdFxuMTMyOTpcdFx0LyogRGV2aWNlIHdhbnQgdG8gZG8gRE1BIGJ5IGl0c2VsZiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA3OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MDMKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA0OTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEJ1ZyBpbiBgdmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZ2AqKgoKT2theSwgaG9sZCBvbi4gVGhpcyBzZWVtcyBsaWtlIGEgc3VidGxlIGlzc3VlLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBWSE9TVF9JT1RMQl9CQVRDSF9FTkRgIGNhc2UgaW4gdGhpcyBmdW5jdGlvbiwgYW5kIHNvbWV0aGluZyYjMzk7cyBub3Qgc2l0dGluZyByaWdodC4gSWYgdGhlIGJhdGNoIGZsYWcsIGB2LSZndDtpbl9iYXRjaGAsIGlzIHRydWUgYW5kIGBvcHMtJmd0O3NldF9tYXBgIGlzIHZhbGlkLCB0aGUgY29kZSBub3cgY2FsbHMgYG9wcy0mZ3Q7c2V0X21hcGAsIGFzc2lnbnMgaXRzIHJldHVybiB2YWx1ZSB0byBgcmAsICphbmQgdGhlbiBpbW1lZGlhdGVseSBicmVha3MqIGZyb20gdGhlIGBzd2l0Y2hgIHN0YXRlbWVudC4KCk15IGNvbmNlcm4gaXMgdGhhdCBpZiBgb3BzLSZndDtzZXRfbWFwYCBpcyBleGVjdXRlZCwgdGhlIGB2LSZndDtpbl9iYXRjaCA9IGZhbHNlO2AgbGluZSBpcyBza2lwcGVkLiBUaGlzIG1lYW5zIGB2LSZndDtpbl9iYXRjaGAgKnJlbWFpbnMqIHRydWUsIHdoaWNoIHNlZW1zIHdyb25nLiBXYWl0IGEgbWludXRlLiBFdmVuIGlmIGBvcHMtJmd0O3NldF9tYXBgIGZhaWxzLCBpdCByZXR1cm5zIGByYCwgYnV0IGB2LSZndDtpbl9iYXRjaGAgc3RpbGwgd29uJiMzOTt0IGJlIGZhbHNlLiBJcyB0aGlzIGludGVudGlvbmFsPyBJcyB0aGlzIGEgYnVnIGZpeD8gCgpUaGUgb3JpZ2luYWwgY29kZSBzaW1wbHkgY2FsbGVkIHRoZSBmdW5jdGlvbiwgd2hpbGUgdGhlIHVwZGF0ZWQgY29kZSBhc3NpZ25zIHRoZSByZXR1cm4gdG8gYHJgIGFuZCBicmVha3MuIEkmIzM5O20gc3RhcnRpbmcgdG8gc3VzcGVjdCB0aGlzIGlzIGEgYnVnLCBvciwgaWYgbm90LCBpdCBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UuCgpJIGRvbiYjMzk7dCBoYXZlIHRoZSBvcmlnaW5hbCBjb21taXQgbWVzc2FnZSwgdW5mb3J0dW5hdGVseSwganVzdCB0aGUgZGlmZi4gUmVhZGluZyB0aGUgZGlmZiBhZ2FpbiBjb25maXJtcyB0aGlzIGJlaGF2aW9yLiBJZiB0aGUgY29uZGl0aW9uIGB2LSZndDtpbl9iYXRjaCAmYW1wOyZhbXA7IG9wcy0mZ3Q7c2V0X21hcGAgaXMgbWV0LCB0aGUgbmV3IGNvZGUgY2FsbHMgYG9wcy0mZ3Q7c2V0X21hcGAsIGFzc2lnbnMgYHJgLCBhbmQgYGJyZWFrYHMuIFRoZXJlZm9yZSwgYHYtJmd0O2luX2JhdGNoYCBpcyAqbm90KiBzZXQgdG8gZmFsc2UuIFRoaXMgaXMgYSBwb3RlbnRpYWwgYnVnIG9yIGEgc3VidGxlIGNoYW5nZSBpbiB0aGUgaW50ZW5kZWQgYmVoYXZpb3IuCgpJJiMzOTttIHRoaW5raW5nLCBzaG91bGRuJiMzOTt0IGB2LSZndDtpbl9iYXRjaCA9IGZhbHNlO2AgYmUgZXhlY3V0ZWQgcmVnYXJkbGVzcyBvZiB0aGUgYG9wcy0mZ3Q7c2V0X21hcGAgZXhlY3V0aW9uIHBhdGg/IFRoZSBgYnJlYWtgIGlzIGNhdXNpbmcgdGhlIGNvbmRpdGlvbmFsIGFzc2lnbm1lbnQgdG8gYmUgc2tpcHBlZC4KCkkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBkaWcgZGVlcGVyLCBtYXliZSBjaGVjayB3aGVyZSB0aGlzIGZ1bmN0aW9uIGB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnYCBpcyBjYWxsZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJdCYjMzk7cyBsaWtlbHkgcmVhY2hhYmxlIHZpYSBgdmhvc3RfdmRwYV9jaHJfd3JpdGVfaXRlcmAsIGJ1dCBJIHdpbGwgY29uZmlybSB0aGF0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0IGJlZm9yZSBJIGNhbiBjb25maWRlbnRseSBzYXkgd2hldGhlciB0aGlzIGlzIGEgYnVnLCBhIGZpeCwgb3IgYW4gaW50ZW50aW9uYWwgbW9kaWZpY2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA3OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl9tc2cmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92ZHBhLmM9MTIyMD1zdGF0aWMgaW50IHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl91cGRhdGUoc3RydWN0IHZob3N0X3ZkcGEgKnYsXG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTI0Mi1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjEyNDM6c3RhdGljIGludCB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgdTMyIGFzaWQsXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xMjQ0LVx0XHRcdFx0XHRzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICptc2cpXG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmM9MTQwNj1zdGF0aWMgaW50IHZob3N0X3ZkcGFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZXApXG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTQzNy1cdHZob3N0X2Rldl9pbml0KGRldiwgdnFzLCBudnFzLCAwLCAwLCAwLCBmYWxzZSxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjE0Mzg6XHRcdCAgICAgICB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnKTtcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE0MzktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDc6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY5OQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipEaXZpbmcgaW50byB0aGUgdmhvc3QtdmRwYSBJT1RMQiBNZXNzYWdlIEhhbmRsaW5nKioKClJpZ2h0LCBzbyBgdmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZ2AgaGFzIGJlZW4gZmxhZ2dlZCBhcyBhIGNhbGxiYWNrIGZ1bmN0aW9uLCBhbmQgaXQmIzM5O3MgZ2V0dGluZyBwYXNzZWQgaW50byBgdmhvc3RfZGV2X2luaXRgLiBJIGltbWVkaWF0ZWx5IHNlZSB0aGUgY29ubmVjdGlvbiDigJMgdGhpcyBmdW5jdGlvbiBpcyBvYnZpb3VzbHkgZ29pbmcgdG8gaGFuZGxlIHRob3NlIElPVExCIG1lc3NhZ2VzLiBBbmQgd2hlcmUgYXJlIHRob3NlIElPVExCIG1lc3NhZ2VzIGNvbWluZyBmcm9tPyBDbGVhcmx5LCB0aGV5JiMzOTtyZSBpbml0aWF0ZWQgYnkgdXNlcnNwYWNlLCBlaXRoZXIgdGhyb3VnaCB0aGUgc3RhbmRhcmQgdmhvc3QgaW9jdGxzLCBvciBwb3RlbnRpYWxseSB0aHJvdWdoIGRpcmVjdCB3cml0ZXMgdG8gdGhlIHZob3N0IGNoYXJhY3RlciBkZXZpY2UuIEl0JiMzOTtzIHRoZSBjbGFzc2ljIHVzZXJzcGFjZS1rZXJuZWwgaW50ZXJhY3Rpb24gcGF0aHdheS4gVGltZSB0byBqdW1wIG92ZXIgdG8gYGRyaXZlcnMvdmhvc3Qvdmhvc3QuY2AgYW5kIHRha2UgYSBnb29kIGxvb2sgYXQgYHZob3N0X2Rldl9pbml0YC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBzZXR1cCBpcyBoYXBwZW5pbmcsIGFuZCB3aGVyZSB0aGlzIGNhbGxiYWNrIGlzIGdvaW5nIHRvIGJlIGhvb2tlZCB1cC4gVW5kZXJzdGFuZGluZyB0aGlzIGluaXRpYWxpemF0aW9uIHByb2Nlc3Mgd2lsbCBiZSBrZXkgdG8gdHJhY2luZyB0aGUgZW50aXJlIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDc6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3RfZGV2X2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9uZXQuYz0xMzM2PXN0YXRpYyBpbnQgdmhvc3RfbmV0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy0xMzg3LVx0fVxuZHJpdmVycy92aG9zdC9uZXQuYzoxMzg4Olx0dmhvc3RfZGV2X2luaXQoZGV2LCB2cXMsIFZIT1NUX05FVF9WUV9NQVgsXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEzODktXHRcdCAgICAgICBVSU9fTUFYSU9WICYjNDM7IFZIT1NUX05FVF9CQVRDSCxcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0yMjcxPXN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIzMjQtXHR9XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyMzI1Olx0dmhvc3RfZGV2X2luaXQoXHUwMDI2dnMtXHUwMDNlZGV2LCB2cXMsIG52cXMsIFVJT19NQVhJT1YsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMzI2LVx0XHQgICAgICAgVkhPU1RfU0NTSV9XRUlHSFQsIDAsIHRydWUsIE5VTEwpO1xuLS1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jPTExMT1zdGF0aWMgaW50IHZob3N0X3Rlc3Rfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcbi0tXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0xMjctXHRuLVx1MDAzZXZxc1tWSE9TVF9URVNUX1ZRXS5oYW5kbGVfa2ljayA9IGhhbmRsZV92cV9raWNrO1xuZHJpdmVycy92aG9zdC90ZXN0LmM6MTI4Olx0dmhvc3RfZGV2X2luaXQoZGV2LCB2cXMsIFZIT1NUX1RFU1RfVlFfTUFYLCBVSU9fTUFYSU9WLFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMTI5LVx0XHQgICAgICAgVkhPU1RfVEVTVF9QS1RfV0VJR0hULCBWSE9TVF9URVNUX1dFSUdIVCwgdHJ1ZSwgTlVMTCk7XG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmM9MTQwNj1zdGF0aWMgaW50IHZob3N0X3ZkcGFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZXApXG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTQzNi1cdH1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjE0Mzc6XHR2aG9zdF9kZXZfaW5pdChkZXYsIHZxcywgbnZxcywgMCwgMCwgMCwgZmFsc2UsXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNDM4LVx0XHQgICAgICAgdmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZyk7XG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jPTU3ND1zdGF0aWMgc2l6ZV90IHZob3N0X2dldF9kZXNjX3NpemUoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTU3OS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzo1ODA6dm9pZCB2aG9zdF9kZXZfaW5pdChzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtNTgxLVx0XHQgICAgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqKnZxcywgaW50IG52cXMsXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTYyMi19XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6NjIzOkVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2Rldl9pbml0KTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy02MjQtXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5oPTIwOT1ib29sIHZob3N0X2V4Y2VlZHNfd2VpZ2h0KHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCBpbnQgcGt0cywgaW50IHRvdGFsX2xlbik7XG5kcml2ZXJzL3Zob3N0L3Zob3N0Lmg6MjEwOnZvaWQgdmhvc3RfZGV2X2luaXQoc3RydWN0IHZob3N0X2RldiAqLCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICoqdnFzLFxuZHJpdmVycy92aG9zdC92aG9zdC5oLTIxMS1cdFx0ICAgIGludCBudnFzLCBpbnQgaW92X2xpbWl0LCBpbnQgd2VpZ2h0LCBpbnQgYnl0ZV93ZWlnaHQsXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jPTY5OD1zdGF0aWMgaW50IHZob3N0X3Zzb2NrX2Rldl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03MzAtXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NzMxOlx0dmhvc3RfZGV2X2luaXQoXHUwMDI2dnNvY2stXHUwMDNlZGV2LCB2cXMsIEFSUkFZX1NJWkUodnNvY2stXHUwMDNldnFzKSxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03MzItXHRcdCAgICAgICBVSU9fTUFYSU9WLCBWSE9TVF9WU09DS19QS1RfV0VJR0hULFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA3OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5OTcKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnYCBpcyBpbmRlZWQgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLiBNeSBndXQgc2F5cyB0aGlzIGlzIGEgd29ydGh3aGlsZSB0YXJnZXQgZm9yIGZ1enppbmcuIEl0JiMzOTtzIHRvdWNoaW5nIGNvcmUgbG9naWMgd2l0aGluIHRoZSBgdmhvc3RfdmRwYWAgZnJhbWV3b3JrLCBhbmQgdGhhdCBhbHdheXMgcmFpc2VzIGEgZmxhZyBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgaG93IGRvIEkgZ28gYWJvdXQgYWN0dWFsbHkgZnV6emluZyB0aGlzPyBXaGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBkbyBJIG5lZWQgdG8gZW5hYmxlIHRvIGdldCBpdCBydW5uaW5nIGluIGEgc3VpdGFibGUgZW52aXJvbm1lbnQ/IEkgc2hvdWxkIHByb2JhYmx5IHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgZHJpdmVycy92aG9zdC9LY29uZmlnYCBvciBgZHJpdmVycy92aG9zdC9NYWtlZmlsZWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgZW5hYmxlcyBgdmRwYS5jYCBpbiB0aGUgZmlyc3QgcGxhY2UuIE9uY2UgSSBoYXZlIHRob3NlIGRldGFpbHMsIEkgY2FuIGdldCB0byB3b3JrIG9uIHNldHRpbmcgdXAgYSBmdXp6aW5nIGhhcm5lc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA3OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZkcGFcXC5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmRwYS9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbmRyaXZlcnMvdmRwYS9NYWtlZmlsZToyOm9iai0kKENPTkZJR19WRFBBKSAmIzQzOz0gdmRwYS5vXG5kcml2ZXJzL3ZkcGEvTWFrZWZpbGUtMy1vYmotJChDT05GSUdfVkRQQV9TSU0pICYjNDM7PSB2ZHBhX3NpbS9cbi0tXG5kcml2ZXJzL3ZkcGEvYWxpYmFiYS9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbmRyaXZlcnMvdmRwYS9hbGliYWJhL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX0FMSUJBQkFfRU5JX1ZEUEEpICYjNDM7PSBlbmlfdmRwYS5vXG5kcml2ZXJzL3ZkcGEvYWxpYmFiYS9NYWtlZmlsZS0zLVxuLS1cbmRyaXZlcnMvdmRwYS9tbHg1L01ha2VmaWxlPTE9c3ViZGlyLWNjZmxhZ3MteSAmIzQzOz0gLUkkKHNyY3RyZWUpL2RyaXZlcnMvdmRwYS9tbHg1L2NvcmVcbmRyaXZlcnMvdmRwYS9tbHg1L01ha2VmaWxlLTItXG5kcml2ZXJzL3ZkcGEvbWx4NS9NYWtlZmlsZTozOm9iai0kKENPTkZJR19NTFg1X1ZEUEFfTkVUKSAmIzQzOz0gbWx4NV92ZHBhLm9cbmRyaXZlcnMvdmRwYS9tbHg1L01ha2VmaWxlLTQtbWx4NV92ZHBhLSQoQ09ORklHX01MWDVfVkRQQV9ORVQpICYjNDM7PSBuZXQvbWx4NV92bmV0Lm8gY29yZS9yZXNvdXJjZXMubyBjb3JlL21yLm8gbmV0L2RlYnVnLm9cbi0tXG5kcml2ZXJzL3ZkcGEvb2N0ZW9uX2VwL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuZHJpdmVycy92ZHBhL29jdGVvbl9lcC9NYWtlZmlsZToyOm9iai0kKENPTkZJR19PQ1RFT05FUF9WRFBBKSAmIzQzOz0gb2N0ZXBfdmRwYS5vXG5kcml2ZXJzL3ZkcGEvb2N0ZW9uX2VwL01ha2VmaWxlLTMtb2N0ZXBfdmRwYS0kKENPTkZJR19PQ1RFT05FUF9WRFBBKSAmIzQzOz0gb2N0ZXBfdmRwYV9tYWluLm9cbi0tXG5kcml2ZXJzL3ZkcGEvcGRzL01ha2VmaWxlLTMtXG5kcml2ZXJzL3ZkcGEvcGRzL01ha2VmaWxlOjQ6b2JqLSQoQ09ORklHX1BEU19WRFBBKSA6PSBwZHNfdmRwYS5vXG5kcml2ZXJzL3ZkcGEvcGRzL01ha2VmaWxlLTUtXG4tLVxuZHJpdmVycy92ZHBhL3Bkcy9jbWRzLmM9Mzg9aW50IHBkc192ZHBhX2NtZF9yZXNldChzdHJ1Y3QgcGRzX3ZkcGFfZGV2aWNlICpwZHN2KVxuLS1cbmRyaXZlcnMvdmRwYS9wZHMvY21kcy5jLTQyLVx0dW5pb24gcGRzX2NvcmVfYWRtaW5xX2NtZCBjbWQgPSB7XG5kcml2ZXJzL3ZkcGEvcGRzL2NtZHMuYzo0MzpcdFx0LnZkcGEub3Bjb2RlID0gUERTX1ZEUEFfQ01EX1JFU0VULFxuZHJpdmVycy92ZHBhL3Bkcy9jbWRzLmMtNDQtXHRcdC52ZHBhLnZkcGFfaW5kZXggPSBwZHN2LVx1MDAzZXZkcGFfaW5kZXgsXG4tLVxuZHJpdmVycy92ZHBhL3NvbGlkcnVuL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuZHJpdmVycy92ZHBhL3NvbGlkcnVuL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX1NORVRfVkRQQSkgJiM0Mzs9IHNuZXRfdmRwYS5vXG5kcml2ZXJzL3ZkcGEvc29saWRydW4vTWFrZWZpbGUtMy1zbmV0X3ZkcGEtJChDT05GSUdfU05FVF9WRFBBKSAmIzQzOz0gc25ldF9tYWluLm9cbi0tXG5kcml2ZXJzL3ZkcGEvdmlydGlvX3BjaS9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbmRyaXZlcnMvdmRwYS92aXJ0aW9fcGNpL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX1ZQX1ZEUEEpICYjNDM7PSB2cF92ZHBhLm9cbi0tXG5kcml2ZXJzL3Zob3N0L01ha2VmaWxlPTExPW9iai0kKENPTkZJR19WSE9TVF9SSU5HKSAmIzQzOz0gdnJpbmdoLm9cbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGUtMTItXG5kcml2ZXJzL3Zob3N0L01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19WSE9TVF9WRFBBKSAmIzQzOz0gdmhvc3RfdmRwYS5vXG5kcml2ZXJzL3Zob3N0L01ha2VmaWxlOjE0OnZob3N0X3ZkcGEteSA6PSB2ZHBhLm9cbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGUtMTUtXG4tLVxuZHJpdmVycy92aXJ0aW8vTWFrZWZpbGU9MTI9b2JqLSQoQ09ORklHX1ZJUlRJT19JTlBVVCkgJiM0Mzs9IHZpcnRpb19pbnB1dC5vXG5kcml2ZXJzL3ZpcnRpby9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfVklSVElPX1ZEUEEpICYjNDM7PSB2aXJ0aW9fdmRwYS5vXG5kcml2ZXJzL3ZpcnRpby9NYWtlZmlsZS0xNC1vYmotJChDT05GSUdfVklSVElPX01FTSkgJiM0Mzs9IHZpcnRpb19tZW0ub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwNzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjQwCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBWSE9TVF9WRFBBYCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHRoZSBjdXJyZW50IGZvY3VzIGlzIG9uIHRoZSBgVkhPU1RfVkRQQWAgY29uZmlndXJhdGlvbiBzZXR0aW5nLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiBgVkhPU1RfVkRQQWAgcmVsaWVzIG9uIGFueSBvdGhlciBmbGFncywgbW9kdWxlcywgb3IgZmVhdHVyZXMgd2l0aGluIHRoZSBzeXN0ZW0uIElzIGl0IGEgc3RhbmRhbG9uZSBmZWF0dXJlIG9yIGRvZXMgaXQgcmVseSBvbiBhIHNwZWNpZmljIGhhcmR3YXJlIHBsYXRmb3JtIG9yIG90aGVyIHByZS1yZXF1aXNpdGVzPyBJIG5lZWQgdG8ga25vdyB3aGVyZSBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlIHRvIGZ1bGx5IGdyYXNwIGl0cyBpbXBsaWNhdGlvbnMuIERldGVybWluaW5nIGl0cyBkZXBlbmRlbmNpZXMgaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyBpdCBjb21wbGV0ZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwNzo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkhPU1RfVkRQQSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L0tjb25maWc9NTY9Y29uZmlnIFZIT1NUX1ZTT0NLXG4tLVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTY5LVxuZHJpdmVycy92aG9zdC9LY29uZmlnOjcwOmNvbmZpZyBWSE9TVF9WRFBBXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNzEtXHR0cmlzdGF0ZSBcJiMzNDtWaG9zdCBkcml2ZXIgZm9yIHZEUEEtYmFzZWQgYmFja2VuZFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwNzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTIwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSB2aG9zdCBLY29uZmlnKioKCk9rYXksIGxldCYjMzk7cyB6ZXJvIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgdmhvc3QgZHJpdmVyIGJldHRlci4gVGltZSB0byBwdWxsIHVwIGBkcml2ZXJzL3Zob3N0L0tjb25maWdgIGFuZCwgc3BlY2lmaWNhbGx5LCBJJiMzOTttIGhlYWRpbmcgdG93YXJkcyBsaW5lIDcwLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgYXJlYSB3aWxsIGxpa2VseSBjb250YWluIHRoZSBjb3JlIHNldHRpbmdzIEkmIzM5O20gaW50ZXJlc3RlZCBpbiwgbWF5YmUgdGhlIGhpZ2gtbGV2ZWwgZW5hYmxlIGZsYWdzIG9yIHNvbWUgZnVuZGFtZW50YWwgZGVwZW5kZW5jaWVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaGlkZGVuIGluIHRoYXQgcGFydCBvZiB0aGUgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDc6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDY1Olx0XHR2aXJ0aW9fdHJhbnNwb3J0LmtvIGRyaXZlciBsb2FkZWQgdG8gdXNlIHRoZSB2aXJ0aW8tdnNvY2sgZGV2aWNlLlxuICA2NjpcdFxuICA2NzpcdFx0VG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZFxuICA2ODpcdFx0dmhvc3RfdnNvY2suXG4gIDY5Olx0XG4gIDcwOlx0Y29uZmlnIFZIT1NUX1ZEUEFcbiAgNzE6XHRcdHRyaXN0YXRlIFwmIzM0O1Zob3N0IGRyaXZlciBmb3IgdkRQQS1iYXNlZCBiYWNrZW5kXCYjMzQ7XG4gIDcyOlx0XHRkZXBlbmRzIG9uIEVWRU5URkRcbiAgNzM6XHRcdHNlbGVjdCBWSE9TVFxuICA3NDpcdFx0c2VsZWN0IElSUV9CWVBBU1NfTUFOQUdFUlxuICA3NTpcdFx0ZGVwZW5kcyBvbiBWRFBBXG4gIDc2Olx0XHRoZWxwXG4gIDc3Olx0XHQgIFRoaXMga2VybmVsIG1vZHVsZSBjYW4gYmUgbG9hZGVkIGluIGhvc3Qga2VybmVsIHRvIGFjY2VsZXJhdGVcbiAgNzg6XHRcdCAgZ3Vlc3QgdmlydGlvIGRldmljZXMgd2l0aCB0aGUgdkRQQS1iYXNlZCBiYWNrZW5kcy5cbiAgNzk6XHRcbiAgODA6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuICA4MTpcdFx0ICB3aWxsIGJlIGNhbGxlZCB2aG9zdF92ZHBhLlxuICA4MjpcdFxuICA4MzpcdGNvbmZpZyBWSE9TVF9DUk9TU19FTkRJQU5fTEVHQUNZXG4gIDg0Olx0XHRib29sIFwmIzM0O0Nyb3NzLWVuZGlhbiBzdXBwb3J0IGZvciB2aG9zdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwNzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTgxCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBDb251bmRydW0qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgSSBuZWVkIHRvIG1ha2Ugc29tZSBjb25maWd1cmF0aW9uIGRlY2lzaW9ucy4gSXQmIzM5O3MgY2xlYXIgdGhhdCBgVkhPU1RfVkRQQWAgcmVsaWVzIG9uIGBWRFBBYC4gTG9naWNhbGx5LCBJIHNob3VsZCBlbmFibGUgYm90aCBvZiB0aG9zZSwgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gQnV0IHRoZW4gbXkgbWluZCBkcmlmdHMgLSB3aGF0IGFib3V0IGBWRFBBX1NJTWA/IE5vdywgdGhhdCBoYXMgcG90ZW50aWFsLiBTcGVjaWZpY2FsbHksIGZvciBmdXp6aW5nIHZEUEEuIEkgY2FuIHNlZSB0aGUgdmFsdWUgb2YgdGVzdGluZyB3aXRob3V0IG5lY2Vzc2FyaWx5IGhhdmluZyB0aGUgaGFyZHdhcmUgaW4gcGxhY2UuIEkgc2hvdWxkIHByb2JhYmx5IGhhdmUgYSBsb29rIGF0IHRoZSBgZHJpdmVycy92ZHBhL0tjb25maWdgIGZpbGUgdG8gZ2V0IGEgY2xlYXJlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbXBsaWNhdGlvbnMgb2YgZWFjaCBzZXR0aW5nLCBhbmQgaG93IHRoZXkgaW50ZXJhY3QuIEdvdHRhIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwNzo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkRQQSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZkcGEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy92ZHBhL0tjb25maWc6MjptZW51Y29uZmlnIFZEUEFcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDt2RFBBIGRyaXZlcnNcJiMzNDtcbi0tXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZz0xMD1pZiBWRFBBXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0xMS1cbmRyaXZlcnMvdmRwYS9LY29uZmlnOjEyOmNvbmZpZyBWRFBBX1NJTVxuZHJpdmVycy92ZHBhL0tjb25maWctMTMtXHR0cmlzdGF0ZSBcJiMzNDt2RFBBIGRldmljZSBzaW11bGF0b3IgY29yZVwmIzM0O1xuLS1cbmRyaXZlcnMvdmRwYS9LY29uZmlnLTIwLVxuZHJpdmVycy92ZHBhL0tjb25maWc6MjE6Y29uZmlnIFZEUEFfU0lNX05FVFxuZHJpdmVycy92ZHBhL0tjb25maWctMjItXHR0cmlzdGF0ZSBcJiMzNDt2RFBBIHNpbXVsYXRvciBmb3IgbmV0d29ya2luZyBkZXZpY2VcJiMzNDtcbi0tXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0yNy1cbmRyaXZlcnMvdmRwYS9LY29uZmlnOjI4OmNvbmZpZyBWRFBBX1NJTV9CTE9DS1xuZHJpdmVycy92ZHBhL0tjb25maWctMjktXHR0cmlzdGF0ZSBcJiMzNDt2RFBBIHNpbXVsYXRvciBmb3IgYmxvY2sgZGV2aWNlXCYjMzQ7XG4tLVxuZHJpdmVycy92ZHBhL0tjb25maWctMzQtXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZzozNTpjb25maWcgVkRQQV9VU0VSXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0zNi1cdHRyaXN0YXRlIFwmIzM0O1ZEVVNFICh2RFBBIERldmljZSBpbiBVc2Vyc3BhY2UpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDc6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUzMwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDUwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaCBpbiB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnKioKCk9rYXksIGxldCYjMzk7cyBzZWUsIEkmIzM5O20gZ29pbmcgdG8gZW5hYmxlIHRoZXNlIFZEUEEgZmVhdHVyZXM6IGBWRFBBYCwgYFZIT1NUX1ZEUEFgLCBgVkRQQV9TSU1gLCBgVkRQQV9TSU1fTkVUYCwgYFZEUEFfU0lNX0JMT0NLYCwgYW5kIGBWRFBBX1VTRVJgLiBCdXQsIHJlYWxpc3RpY2FsbHksIGBWSE9TVF9WRFBBYCBpcyB0aGUgbWFpbiBvbmUgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGhlcmUuIFRoZSBwYXRjaCBJJiMzOTttIGxvb2tpbmcgYXQgbW9kaWZpZXMgYHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl9tc2dgLCBzbyB0aGF0JiMzOTtzIHRoZSBrZXkgZnVuY3Rpb24gdG8gZm9jdXMgb24uCgpBbHJpZ2h0LCB3aGF0JiMzOTtzIGNoYW5nZWQgaW4gdGhhdCBmdW5jdGlvbj8gTGV0IG1lIHNlZS4uLiBoZXJlJiMzOTtzIHRoZSBjb2RlOgoKYGBgYwogCWNhc2UgVkhPU1RfSU9UTEJfQkFUQ0hfRU5EOgotCQlpZiAodi0mZ3Q7aW5fYmF0Y2ggJmFtcDsmYW1wOyBvcHMtJmd0O3NldF9tYXApCi0JCQlvcHMtJmd0O3NldF9tYXAodmRwYSwgYXNpZCwgaW90bGIpOwomIzQzOwkJaWYgKHYtJmd0O2luX2JhdGNoICZhbXA7JmFtcDsgb3BzLSZndDtzZXRfbWFwKSB7CiYjNDM7CQkJciA9IG9wcy0mZ3Q7c2V0X21hcCh2ZHBhLCBhc2lkLCBpb3RsYik7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiAJCXYtJmd0O2luX2JhdGNoID0gZmFsc2U7CiAJCWJyZWFrOwpgYGAKCkl0IHNlZW1zIGxpa2UgYSBidWcgZml4IG9yIGEgc3VidGxlIGZlYXR1cmUgZW5oYW5jZW1lbnQgd2l0aGluIHRoZSBgVkhPU1RfSU9UTEJfQkFUQ0hfRU5EYCBjYXNlLiBOb3csIEkgc2VlIHRoZSBrZXkgY2hhbmdlOiB0aGUgYG9wcy0mZ3Q7c2V0X21hcGAgY2FsbCBpcyB3cmFwcGVkIGluIGEgYmxvY2ssIGFuZCB0aGUgYGJyZWFrYCBzdGF0ZW1lbnQgaXMgKmluc2lkZSogdGhhdCBibG9jay4KCkhvbGQgb24uLi4gaWYgYG9wcy0mZ3Q7c2V0X21hcGAgaXMgZXhlY3V0ZWQsIHRoZW4gdGhlIGZ1bmN0aW9uIGJyZWFrcyAqYmVmb3JlKiBgdi0mZ3Q7aW5fYmF0Y2hgIGlzIHNldCB0byBmYWxzZSEgVGhhdCYjMzk7cy4uLiBwcm9ibGVtYXRpYy4gSWYgYHIgPSBvcHMtJmd0O3NldF9tYXAodmRwYSwgYXNpZCwgaW90bGIpOyBicmVhaztgIGlzIGV4ZWN1dGVkLCB0aGUgYHYtJmd0O2luX2JhdGNoID0gZmFsc2VgIGxpbmUgaXMgc2tpcHBlZC4gVGhpcyBpcyBhbG1vc3QgY2VydGFpbmx5IGFuIGVycm9yLgoKV2h5IHdvdWxkIHRoZSBiYXRjaCBpbmRpY2F0b3IgKnJlbWFpbiogdHJ1ZSBhZnRlciB0aGUgYG9wcy0mZ3Q7c2V0X21hcGAgY2FsbCBpZiBpdCByZXR1cm5zPyBJZiBgb3BzLSZndDtzZXRfbWFwYCBpcyBjYWxsZWQsIGl0IG1lYW5zIHRoZSBiYXRjaCBpcyBlbmRpbmcsIGFuZCB0aGUgbWFwIGlzIHNldCwgc28gYHYtJmd0O2luX2JhdGNoYCBzaG91bGQgYmUgc2V0IHRvIGZhbHNlLiBJcyBgb3BzLSZndDtzZXRfbWFwYCBhc3luY2hyb25vdXM/IE5vLCBpdCByZXR1cm5zIGFuIGludGVnZXIuIExldCBtZSBjaGVjay4uLiBpZiBgb3BzLSZndDtzZXRfbWFwYCBmYWlscywgaXQgcmV0dXJucyBhIG5vbi16ZXJvIHZhbHVlLCB3aGljaCBpcyB0aGVuIHJldHVybmVkIGJ5IGB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnYC4gQnV0IGlmIGl0IHN1Y2NlZWRzLCBpdCByZXR1cm5zIDAuIFN0aWxsLCBgdi0mZ3Q7aW5fYmF0Y2hgIGlzIG5vdCBiZWluZyByZXNldCB0byBmYWxzZSEKCk9rYXksIEkgc2VlIHRoZSBpbXBsaWNhdGlvbi4gSWYgYHYtJmd0O2luX2JhdGNoYCByZW1haW5zIHRydWUsIHRoZSBuZXh0IGBWSE9TVF9JT1RMQl9VUERBVEVgIG1lc3NhZ2Ugd2lsbCBiZSBpbmNvcnJlY3RseSB0cmVhdGVkIGFzIHBhcnQgb2YgdGhlIHNhbWUgKmVuZGVkKiBiYXRjaC4gVGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgYnVnLiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgYHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl91cGRhdGVgIGZ1bmN0aW9uIHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aGlzIGB2LSZndDtpbl9iYXRjaGAgZmxhZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDc6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3ZkcGEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTIyMDpcdHN0YXRpYyBpbnQgdmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX3VwZGF0ZShzdHJ1Y3Qgdmhvc3RfdmRwYSAqdixcbjEyMjE6XHRcdFx0XHRcdFx0ICAgc3RydWN0IHZob3N0X2lvdGxiICppb3RsYixcbjEyMjI6XHRcdFx0XHRcdFx0ICAgc3RydWN0IHZob3N0X2lvdGxiX21zZyAqbXNnKVxuMTIyMzpcdHtcbjEyMjQ6XHRcdHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYSA9IHYtXHUwMDNldmRwYTtcbjEyMjU6XHRcbjEyMjY6XHRcdGlmIChtc2ctXHUwMDNlaW92YSBcdTAwM2Mgdi1cdTAwM2VyYW5nZS5maXJzdCB8fCAhbXNnLVx1MDAzZXNpemUgfHxcbjEyMjc6XHRcdCAgICBtc2ctXHUwMDNlaW92YSBcdTAwM2UgVTY0X01BWCAtIG1zZy1cdTAwM2VzaXplICYjNDM7IDEgfHxcbjEyMjg6XHRcdCAgICBtc2ctXHUwMDNlaW92YSAmIzQzOyBtc2ctXHUwMDNlc2l6ZSAtIDEgXHUwMDNlIHYtXHUwMDNlcmFuZ2UubGFzdClcbjEyMjk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMjMwOlx0XG4xMjMxOlx0XHRpZiAodmhvc3RfaW90bGJfaXRyZWVfZmlyc3QoaW90bGIsIG1zZy1cdTAwM2Vpb3ZhLFxuMTIzMjpcdFx0XHRcdFx0ICAgIG1zZy1cdTAwM2Vpb3ZhICYjNDM7IG1zZy1cdTAwM2VzaXplIC0gMSkpXG4xMjMzOlx0XHRcdHJldHVybiAtRUVYSVNUO1xuMTIzNDpcdFxuMTIzNTpcdFx0aWYgKHZkcGEtXHUwMDNldXNlX3ZhKVxuMTIzNjpcdFx0XHRyZXR1cm4gdmhvc3RfdmRwYV92YV9tYXAodiwgaW90bGIsIG1zZy1cdTAwM2Vpb3ZhLCBtc2ctXHUwMDNlc2l6ZSxcbjEyMzc6XHRcdFx0XHRcdFx0IG1zZy1cdTAwM2V1YWRkciwgbXNnLVx1MDAzZXBlcm0pO1xuMTIzODpcdFxuMTIzOTpcdFx0cmV0dXJuIHZob3N0X3ZkcGFfcGFfbWFwKHYsIGlvdGxiLCBtc2ctXHUwMDNlaW92YSwgbXNnLVx1MDAzZXNpemUsIG1zZy1cdTAwM2V1YWRkcixcbjEyNDA6XHRcdFx0XHRcdCBtc2ctXHUwMDNlcGVybSk7XG4xMjQxOlx0fVxuMTI0MjpcdFxuMTI0MzpcdHN0YXRpYyBpbnQgdmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHUzMiBhc2lkLFxuMTI0NDpcdFx0XHRcdFx0XHRzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICptc2cpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA3OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTk1CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipNZW1vcnkgTGFuZSB3aXRoIHZob3N0X3ZkcGEqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSYjMzk7bSBjaGFzaW5nIGEgcG90ZW50aWFsIGlzc3VlIHJlbGF0ZWQgdG8gdmlydHVhbCBkZXZpY2UgcGFzc3Rocm91Z2ggYW5kIGhvdyB3ZSBoYW5kbGUgbWVtb3J5IG1hcHBpbmdzIHdpdGhpbiB0aGUgdmhvc3QgY29udGV4dCwgc3BlY2lmaWNhbGx5IGZvciB2RFBBIGRldmljZXMuIE15IGluaXRpYWwgYXNzdW1wdGlvbiB3YXMgdGhhdCBgdi0mZ3Q7aW5fYmF0Y2hgIHdhcyBvbmx5IHJlbGV2YW50IGR1cmluZyB0aGUgaW5pdGlhbCBzZXR1cCBvciB0ZWFyLWRvd24uIEJ1dCBub3cgSSYjMzk7bSBxdWVzdGlvbmluZyB0aGF0LiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIGlmIHRoZSBgdi0mZ3Q7aW5fYmF0Y2hgIGZsYWcgaXMgYWN0dWFsbHkgKnVzZWQqIHdpdGhpbiBlaXRoZXIgdGhlIGB2aG9zdF92ZHBhX3BhX21hcGAgb3IgdGhlIGB2aG9zdF92ZHBhX3ZhX21hcGAgZnVuY3Rpb25zLiBUaGlzIGRldGFpbCBpcyBjcml0aWNhbCBmb3IgZW5zdXJpbmcgb3VyIG1lbW9yeSBtYXBwaW5nIGxvZ2ljIGlzIHJvYnVzdCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3JzLCBlc3BlY2lhbGx5IGR1cmluZyBiYXRjaCBvcGVyYXRpb25zLiBNeSBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBmbGFnIGluZmx1ZW5jZXMgdGhlIHdheSBwaHlzaWNhbCBhZGRyZXNzZXMgKFBBKSBvciB2aXJ0dWFsIGFkZHJlc3NlcyAoVkEpIGFyZSB0cmFuc2xhdGVkLCBvciBpZiB0aGUgc3lzdGVtIG1pc3Rha2VubHkgdXNlcyBzdGFsZSBiYXRjaCBpbmZvcm1hdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjYWxsIHN0YWNrIGFuZCBkYXRhIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA3OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luX2JhdGNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvZXh0NC5yc3Q9MTQxPVdoZW4gbW91bnRpbmcgYW4gZXh0NCBmaWxlc3lzdGVtLCB0aGUgZm9sbG93aW5nIG9wdGlvbiBhcmUgYWNjZXB0ZWQ6XG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9leHQ0LnJzdC0zMDQtXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2V4dDQucnN0OjMwNTogIG1pbl9iYXRjaF90aW1lPXVzZWNcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvZXh0NC5yc3QtMzA2LSAgICAgICAgVGhpcyBwYXJhbWV0ZXIgc2V0cyB0aGUgY29tbWl0IHRpbWUgKGFzIGRlc2NyaWJlZCBhYm92ZSkgdG8gYmUgYXQgbGVhc3RcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvZXh0NC5yc3Q6MzA3OiAgICAgICAgbWluX2JhdGNoX3RpbWUuICBJdCBkZWZhdWx0cyB0byB6ZXJvIG1pY3Jvc2Vjb25kcy4gIEluY3JlYXNpbmcgdGhpc1xuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9leHQ0LnJzdC0zMDgtICAgICAgICBwYXJhbWV0ZXIgbWF5IGltcHJvdmUgdGhlIHRocm91Z2hwdXQgb2YgbXVsdGktdGhyZWFkZWQsIHN5bmNocm9ub3VzXG4tLVxuZHJpdmVycy9kbWEvaWR4ZC9pcnEuYz0yMjI9c3RhdGljIHZvaWQgaWR4ZF9ldmxfZmF1bHRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9kbWEvaWR4ZC9pcnEuYy0yMzgtXHRjYXNlIERTQV9DT01QX0NSQV9YTEFUOlxuZHJpdmVycy9kbWEvaWR4ZC9pcnEuYzoyMzk6XHRcdGlmIChlbnRyeV9oZWFkLVx1MDAzZWJhdGNoIFx1MDAyNlx1MDAyNiBlbnRyeV9oZWFkLVx1MDAzZWZpcnN0X2Vycl9pbl9iYXRjaClcbmRyaXZlcnMvZG1hL2lkeGQvaXJxLmMtMjQwLVx0XHRcdGV2bC1cdTAwM2ViYXRjaF9mYWlsW2VudHJ5X2hlYWQtXHUwMDNlYmF0Y2hfaWRdID0gZmFsc2U7XG4tLVxuZHJpdmVycy9kbWEvaWR4ZC9yZWdpc3RlcnMuaD02MTU9c3RydWN0IF9fZXZsX2VudHJ5IHtcbi0tXG5kcml2ZXJzL2RtYS9pZHhkL3JlZ2lzdGVycy5oLTY0My1cdFx0XHR1MTYgcmNyOjE7XG5kcml2ZXJzL2RtYS9pZHhkL3JlZ2lzdGVycy5oOjY0NDpcdFx0XHR1MTYgZmlyc3RfZXJyX2luX2JhdGNoOjE7XG5kcml2ZXJzL2RtYS9pZHhkL3JlZ2lzdGVycy5oLTY0NS1cdFx0XHR1MTYgcnN2ZDRfMjo5O1xuLS1cbmRyaXZlcnMvbWQvZG0tdmRvL2Jsb2NrLW1hcC5oPTQ5PXN0cnVjdCB2ZG9fcGFnZV9jYWNoZSB7XG4tLVxuZHJpdmVycy9tZC9kbS12ZG8vYmxvY2stbWFwLmgtNTQtXHQvKiBudW1iZXIgb2YgcGFnZXMgdG8gd3JpdGUgaW4gdGhlIGN1cnJlbnQgYmF0Y2ggKi9cbmRyaXZlcnMvbWQvZG0tdmRvL2Jsb2NrLW1hcC5oOjU1Olx0cGFnZV9jb3VudF90IHBhZ2VzX2luX2JhdGNoO1xuZHJpdmVycy9tZC9kbS12ZG8vYmxvY2stbWFwLmgtNTYtXHQvKiBXaGV0aGVyIHRoZSBWRE8gaXMgZG9pbmcgYSByZWFkLW9ubHkgcmVidWlsZCAqL1xuLS1cbmRyaXZlcnMvbWQvZG0tdmRvL2RhdGEtdmlvLmg9MTEwPXN0cnVjdCBjb21wcmVzc2lvbl9zdGF0ZSB7XG4tLVxuZHJpdmVycy9tZC9kbS12ZG8vZGF0YS12aW8uaC0xMzAtXHQvKiBBIGxpbmsgaW4gdGhlIGNoYWluIG9mIGRhdGFfdmlvcyB3aGljaCBoYXZlIGJlZW4gcGFja2VkIHRvZ2V0aGVyICovXG5kcml2ZXJzL21kL2RtLXZkby9kYXRhLXZpby5oOjEzMTpcdHN0cnVjdCBkYXRhX3ZpbyAqbmV4dF9pbl9iYXRjaDtcbmRyaXZlcnMvbWQvZG0tdmRvL2RhdGEtdmlvLmgtMTMyLVxuLS1cbmRyaXZlcnMvbWQvZG0tdmRvL3BhY2tlci5jPTI3ND1zdGF0aWMgdm9pZCBmaW5pc2hfY29tcHJlc3NlZF93cml0ZShzdHJ1Y3QgdmRvX2NvbXBsZXRpb24gKmNvbXBsZXRpb24pXG4tLVxuZHJpdmVycy9tZC9kbS12ZG8vcGFja2VyLmMtMjg0LVx0ICovXG5kcml2ZXJzL21kL2RtLXZkby9wYWNrZXIuYzoyODU6XHRmb3IgKGNsaWVudCA9IGFnZW50LVx1MDAzZWNvbXByZXNzaW9uLm5leHRfaW5fYmF0Y2g7IGNsaWVudCAhPSBOVUxMOyBjbGllbnQgPSBuZXh0KSB7XG5kcml2ZXJzL21kL2RtLXZkby9wYWNrZXIuYzoyODY6XHRcdG5leHQgPSBjbGllbnQtXHUwMDNlY29tcHJlc3Npb24ubmV4dF9pbl9iYXRjaDtcbmRyaXZlcnMvbWQvZG0tdmRvL3BhY2tlci5jLTI4Ny1cdFx0cmVsZWFzZV9jb21wcmVzc2VkX3dyaXRlX3dhaXRlcihjbGllbnQsIFx1MDAyNmFnZW50LVx1MDAzZWFsbG9jYXRpb24pO1xuLS1cbmRyaXZlcnMvbWQvZG0tdmRvL3BhY2tlci5jPTI5ND1zdGF0aWMgdm9pZCBoYW5kbGVfY29tcHJlc3NlZF93cml0ZV9lcnJvcihzdHJ1Y3QgdmRvX2NvbXBsZXRpb24gKmNvbXBsZXRpb24pXG4tLVxuZHJpdmVycy9tZC9kbS12ZG8vcGFja2VyLmMtMzA2LVxuZHJpdmVycy9tZC9kbS12ZG8vcGFja2VyLmM6MzA3Olx0Zm9yIChjbGllbnQgPSBhZ2VudC1cdTAwM2Vjb21wcmVzc2lvbi5uZXh0X2luX2JhdGNoOyBjbGllbnQgIT0gTlVMTDsgY2xpZW50ID0gbmV4dCkge1xuZHJpdmVycy9tZC9kbS12ZG8vcGFja2VyLmM6MzA4Olx0XHRuZXh0ID0gY2xpZW50LVx1MDAzZWNvbXByZXNzaW9uLm5leHRfaW5fYmF0Y2g7XG5kcml2ZXJzL21kL2RtLXZkby9wYWNrZXIuYy0zMDktXHRcdHdyaXRlX2RhdGFfdmlvKGNsaWVudCk7XG4tLVxuZHJpdmVycy9tZC9kbS12ZG8vcGFja2VyLmM9Mzg5PXN0YXRpYyBibG9ja19zaXplX3QgX19tdXN0X2NoZWNrIHBhY2tfZnJhZ21lbnQoc3RydWN0IGNvbXByZXNzaW9uX3N0YXRlICpjb21wcmVzc2lvbixcbi0tXG5kcml2ZXJzL21kL2RtLXZkby9wYWNrZXIuYy0zOTYtXG5kcml2ZXJzL21kL2RtLXZkby9wYWNrZXIuYzozOTc6XHR0b19wYWNrLVx1MDAzZW5leHRfaW5fYmF0Y2ggPSBjb21wcmVzc2lvbi1cdTAwM2VuZXh0X2luX2JhdGNoO1xuZHJpdmVycy9tZC9kbS12ZG8vcGFja2VyLmM6Mzk4Olx0Y29tcHJlc3Npb24tXHUwMDNlbmV4dF9pbl9iYXRjaCA9IGRhdGFfdmlvO1xuZHJpdmVycy9tZC9kbS12ZG8vcGFja2VyLmMtMzk5LVx0dG9fcGFjay1cdTAwM2VzbG90ID0gc2xvdDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2h0dC5oPTE2Nz1lbnVtIGh0dF9kYXRhX3R4X2V4dF90aWQge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvaHR0LmgtMTgyLSAqICAgICAgICAgICAgICAgICAgKEhMIGhvc3RzIG1hbmFnZSBxdWV1ZXMgb24gdGhlIGhvc3QgKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9odHQuaDoxODM6ICogICAgICAgbW9yZV9pbl9iYXRjaDogb25seSBmb3IgSEwgaG9zdHMuIGluZGljYXRlcyBpZiBtb3JlIHBhY2tldHMgYXJlXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2h0dC5oLTE4NC0gKiAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nLiB0aGlzIGFsbG93cyB0YXJnZXQgdG8gd2FpdCBhbmQgYWdncmVnYXRlXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9mdy9hcGkvbG9jYXRpb24uaD0xNzUwPWVudW0gaXdsX3RvZl9yZXNwb25zZV9zdGF0dXMge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZncvYXBpL2xvY2F0aW9uLmgtMTc2MS0gKlx0XHUwMDI2ZW51bSBpd2xfdG9mX3Jlc3BvbnNlX3N0YXR1cy5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZncvYXBpL2xvY2F0aW9uLmg6MTc2MjogKiBAbGFzdF9pbl9iYXRjaDogcmVwcm90IHBvbGljeSAod2hlbiBub3QgYWxsIHJlc3BvbnNlcyBhcmUgdXBsb2FkZWQgYXQgb25jZSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZncvYXBpL2xvY2F0aW9uLmgtMTc2My0gKiBAbnVtX29mX2FwczogTnVtYmVyIG9mIEFQcyB0byBtZWFzdXJlIChlcnJvciBpZiBcdTAwM2UgSVdMX1RPRl9NQVhfQVBTKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZncvYXBpL2xvY2F0aW9uLmg9MTc2Nj1zdHJ1Y3QgaXdsX3RvZl9yYW5nZV9yc3BfbnRmeV92NSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9mdy9hcGkvbG9jYXRpb24uaC0xNzY4LVx0dTggcmVxdWVzdF9zdGF0dXM7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2Z3L2FwaS9sb2NhdGlvbi5oOjE3Njk6XHR1OCBsYXN0X2luX2JhdGNoO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9mdy9hcGkvbG9jYXRpb24uaC0xNzcwLVx0dTggbnVtX29mX2Fwcztcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9mdG0taW5pdGlhdG9yLmM9MzM0PXZvaWQgaXdsX21sZF9oYW5kbGVfZnRtX3Jlc3Bfbm90aWYoc3RydWN0IGl3bF9tbGQgKm1sZCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9mdG0taW5pdGlhdG9yLmMtMzM3LVx0c3RydWN0IGl3bF90b2ZfcmFuZ2VfcnNwX250ZnkgKmZ3X3Jlc3AgPSAodm9pZCAqKXBrdC1cdTAwM2VkYXRhO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvZnRtLWluaXRpYXRvci5jOjMzODpcdHU4IG51bV9vZl9hcHMsIGxhc3RfaW5fYmF0Y2g7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9mdG0taW5pdGlhdG9yLmMtMzM5LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2Z0bS1pbml0aWF0b3IuYy0zNDgtXHRudW1fb2ZfYXBzID0gZndfcmVzcC1cdTAwM2VudW1fb2ZfYXBzO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvZnRtLWluaXRpYXRvci5jOjM0OTpcdGxhc3RfaW5fYmF0Y2ggPSBmd19yZXNwLVx1MDAzZWxhc3RfcmVwb3J0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvZnRtLWluaXRpYXRvci5jLTM1MC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9mdG0taW5pdGlhdG9yLmMtNDI4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvZnRtLWluaXRpYXRvci5jOjQyOTpcdGlmIChsYXN0X2luX2JhdGNoKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9mdG0taW5pdGlhdG9yLmMtNDMwLVx0XHRjZmc4MDIxMV9wbXNyX2NvbXBsZXRlKG1sZC1cdTAwM2VmdG1faW5pdGlhdG9yLnJlcV93ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL2Z0bS1pbml0aWF0b3IuYz0xMjY4PXZvaWQgaXdsX212bV9mdG1fcmFuZ2VfcmVzcChzdHJ1Y3QgaXdsX212bSAqbXZtLCBzdHJ1Y3QgaXdsX3J4X2NtZF9idWZmZXIgKnJ4Yilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9mdG0taW5pdGlhdG9yLmMtMTI3OC1cdFx0XHRcdCAgSVdMX1VDT0RFX1RMVl9BUElfRlRNX05FV19SQU5HRV9SRVEpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vZnRtLWluaXRpYXRvci5jOjEyNzk6XHR1OCBudW1fb2ZfYXBzLCBsYXN0X2luX2JhdGNoO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vZnRtLWluaXRpYXRvci5jLTEyODAtXHR1OCBub3RpZl92ZXIgPSBpd2xfbXZtX2Z0bV9nZXRfcmFuZ2VfcmVzcF92ZXIobXZtKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9mdG0taW5pdGlhdG9yLmMtMTI5Ni1cdFx0bnVtX29mX2FwcyA9IGZ3X3Jlc3BfdjgtXHUwMDNlbnVtX29mX2FwcztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL2Z0bS1pbml0aWF0b3IuYzoxMjk3Olx0XHRsYXN0X2luX2JhdGNoID0gZndfcmVzcF92OC1cdTAwM2VsYXN0X3JlcG9ydDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL2Z0bS1pbml0aWF0b3IuYy0xMjk4LVx0fSBlbHNlIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9mdG0taW5pdGlhdG9yLmMtMTMwMy1cdFx0bnVtX29mX2FwcyA9IGZ3X3Jlc3BfdjUtXHUwMDNlbnVtX29mX2FwcztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL2Z0bS1pbml0aWF0b3IuYzoxMzA0Olx0XHRsYXN0X2luX2JhdGNoID0gZndfcmVzcF92NS1cdTAwM2VsYXN0X2luX2JhdGNoO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vZnRtLWluaXRpYXRvci5jLTEzMDUtXHR9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vZnRtLWluaXRpYXRvci5jLTE0MDUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9mdG0taW5pdGlhdG9yLmM6MTQwNjpcdGlmIChsYXN0X2luX2JhdGNoKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9mdG0taW5pdGlhdG9yLmMtMTQwNy1cdFx0Y2ZnODAyMTFfcG1zcl9jb21wbGV0ZShtdm0tXHUwMDNlZnRtX2luaXRpYXRvci5yZXFfd2Rldixcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTYyOD1zdGF0aWMgaW50IG52bWV0X3RyeV9zZW5kX2RhdGFfcGR1KHN0cnVjdCBudm1ldF90Y3BfY21kICpjbWQpXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy02NTQtXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjY1NTpzdGF0aWMgaW50IG52bWV0X3RyeV9zZW5kX2RhdGEoc3RydWN0IG52bWV0X3RjcF9jbWQgKmNtZCwgYm9vbCBsYXN0X2luX2JhdGNoKVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy02NTYte1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtNjY3LVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYzo2Njg6XHRcdGlmICgoIWxhc3RfaW5fYmF0Y2ggXHUwMDI2XHUwMDI2IGNtZC1cdTAwM2VxdWV1ZS1cdTAwM2VzZW5kX2xpc3RfbGVuKSB8fFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy02NjktXHRcdCAgICBjbWQtXHUwMDNld2J5dGVzX2RvbmUgJiM0MzsgbGVmdCBcdTAwM2MgY21kLVx1MDAzZXJlcS50cmFuc2Zlcl9sZW4gfHxcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTcwOD1zdGF0aWMgaW50IG52bWV0X3RyeV9zZW5kX3Jlc3BvbnNlKHN0cnVjdCBudm1ldF90Y3BfY21kICpjbWQsXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjcwOTpcdFx0Ym9vbCBsYXN0X2luX2JhdGNoKVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy03MTAte1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtNzE2LVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYzo3MTc6XHRpZiAoIWxhc3RfaW5fYmF0Y2ggXHUwMDI2XHUwMDI2IGNtZC1cdTAwM2VxdWV1ZS1cdTAwM2VzZW5kX2xpc3RfbGVuKVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy03MTgtXHRcdG1zZy5tc2dfZmxhZ3MgfD0gTVNHX01PUkU7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy03MzgtXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjczOTpzdGF0aWMgaW50IG52bWV0X3RyeV9zZW5kX3IydChzdHJ1Y3QgbnZtZXRfdGNwX2NtZCAqY21kLCBib29sIGxhc3RfaW5fYmF0Y2gpXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTc0MC17XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy03NDYtXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjc0NzpcdGlmICghbGFzdF9pbl9iYXRjaCBcdTAwMjZcdTAwMjYgY21kLVx1MDAzZXF1ZXVlLVx1MDAzZXNlbmRfbGlzdF9sZW4pXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTc0OC1cdFx0bXNnLm1zZ19mbGFncyB8PSBNU0dfTU9SRTtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTc2Ni1cbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM6NzY3OnN0YXRpYyBpbnQgbnZtZXRfdHJ5X3NlbmRfZGRnc3Qoc3RydWN0IG52bWV0X3RjcF9jbWQgKmNtZCwgYm9vbCBsYXN0X2luX2JhdGNoKVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy03Njgte1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtNzc3LVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYzo3Nzg6XHRpZiAoIWxhc3RfaW5fYmF0Y2ggXHUwMDI2XHUwMDI2IGNtZC1cdTAwM2VxdWV1ZS1cdTAwM2VzZW5kX2xpc3RfbGVuKVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy03NzktXHRcdG1zZy5tc2dfZmxhZ3MgfD0gTVNHX01PUkU7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYz04MDI9c3RhdGljIGludCBudm1ldF90Y3BfdHJ5X3NlbmRfb25lKHN0cnVjdCBudm1ldF90Y3BfcXVldWUgKnF1ZXVlLFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYzo4MDM6XHRcdGJvb2wgbGFzdF9pbl9iYXRjaClcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtODA0LXtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTgyMC1cdGlmIChjbWQtXHUwMDNlc3RhdGUgPT0gTlZNRVRfVENQX1NFTkRfREFUQSkge1xuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYzo4MjE6XHRcdHJldCA9IG52bWV0X3RyeV9zZW5kX2RhdGEoY21kLCBsYXN0X2luX2JhdGNoKTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtODIyLVx0XHRpZiAocmV0IFx1MDAzYz0gMClcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTgyNi1cdGlmIChjbWQtXHUwMDNlc3RhdGUgPT0gTlZNRVRfVENQX1NFTkRfRERHU1QpIHtcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM6ODI3Olx0XHRyZXQgPSBudm1ldF90cnlfc2VuZF9kZGdzdChjbWQsIGxhc3RfaW5fYmF0Y2gpO1xuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy04MjgtXHRcdGlmIChyZXQgXHUwMDNjPSAwKVxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtODMyLVx0aWYgKGNtZC1cdTAwM2VzdGF0ZSA9PSBOVk1FVF9UQ1BfU0VORF9SMlQpIHtcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM6ODMzOlx0XHRyZXQgPSBudm1ldF90cnlfc2VuZF9yMnQoY21kLCBsYXN0X2luX2JhdGNoKTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtODM0LVx0XHRpZiAocmV0IFx1MDAzYz0gMClcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTgzOC1cdGlmIChjbWQtXHUwMDNlc3RhdGUgPT0gTlZNRVRfVENQX1NFTkRfUkVTUE9OU0UpXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjgzOTpcdFx0cmV0ID0gbnZtZXRfdHJ5X3NlbmRfcmVzcG9uc2UoY21kLCBsYXN0X2luX2JhdGNoKTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtODQwLVxuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTQ1PXN0cnVjdCB2aG9zdF92ZHBhIHtcbi0tXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy01OC1cdHN0cnVjdCBldmVudGZkX2N0eCAqY29uZmlnX2N0eDtcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjU5Olx0aW50IGluX2JhdGNoO1xuZHJpdmVycy92aG9zdC92ZHBhLmMtNjAtXHRzdHJ1Y3QgdmRwYV9pb3ZhX3JhbmdlIHJhbmdlO1xuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTI0NT1zdGF0aWMgaW50IHZob3N0X3ZkcGFfcmVzZXQoc3RydWN0IHZob3N0X3ZkcGEgKnYpXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0yNDYte1xuZHJpdmVycy92aG9zdC92ZHBhLmM6MjQ3Olx0di1cdTAwM2Vpbl9iYXRjaCA9IDA7XG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0yNDgtXHRyZXR1cm4gX2NvbXBhdF92ZHBhX3Jlc2V0KHYpO1xuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTk5Mj1zdGF0aWMgaW50IHZob3N0X3ZkcGFfbWFwKHN0cnVjdCB2aG9zdF92ZHBhICp2LCBzdHJ1Y3Qgdmhvc3RfaW90bGIgKmlvdGxiLFxuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTEwMDgtXHR9IGVsc2UgaWYgKG9wcy1cdTAwM2VzZXRfbWFwKSB7XG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzoxMDA5Olx0XHRpZiAoIXYtXHUwMDNlaW5fYmF0Y2gpXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xMDEwLVx0XHRcdHIgPSBvcHMtXHUwMDNlc2V0X21hcCh2ZHBhLCBhc2lkLCBpb3RsYik7XG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmM9MTAyNz1zdGF0aWMgdm9pZCB2aG9zdF92ZHBhX3VubWFwKHN0cnVjdCB2aG9zdF92ZHBhICp2LFxuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTEwMzctXHRpZiAob3BzLVx1MDAzZXNldF9tYXApIHtcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjEwMzg6XHRcdGlmICghdi1cdTAwM2Vpbl9iYXRjaClcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTEwMzktXHRcdFx0b3BzLVx1MDAzZXNldF9tYXAodmRwYSwgYXNpZCwgaW90bGIpO1xuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTEyNDM9c3RhdGljIGludCB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgdTMyIGFzaWQsXG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTI3MS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjEyNzI6XHRpZiAoKHYtXHUwMDNlaW5fYmF0Y2ggXHUwMDI2XHUwMDI2IHYtXHUwMDNlYmF0Y2hfYXNpZCAhPSBhc2lkKSB8fCAhaW90bGIpIHtcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjEyNzM6XHRcdGlmICh2LVx1MDAzZWluX2JhdGNoIFx1MDAyNlx1MDAyNiB2LVx1MDAzZWJhdGNoX2FzaWQgIT0gYXNpZCkge1xuZHJpdmVycy92aG9zdC92ZHBhLmMtMTI3NC1cdFx0XHRkZXZfaW5mbyhcdTAwMjZ2LVx1MDAzZWRldiwgXCYjMzQ7YmF0Y2ggaWQgJWQgYXNpZCAlZFxcblwmIzM0Oyxcbi0tXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xMjkxLVx0XHR2LVx1MDAzZWJhdGNoX2FzaWQgPSBhc2lkO1xuZHJpdmVycy92aG9zdC92ZHBhLmM6MTI5MjpcdFx0di1cdTAwM2Vpbl9iYXRjaCA9IHRydWU7XG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xMjkzLVx0XHRicmVhaztcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTEyOTQtXHRjYXNlIFZIT1NUX0lPVExCX0JBVENIX0VORDpcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjEyOTU6XHRcdGlmICh2LVx1MDAzZWluX2JhdGNoIFx1MDAyNlx1MDAyNiBvcHMtXHUwMDNlc2V0X21hcCkge1xuZHJpdmVycy92aG9zdC92ZHBhLmMtMTI5Ni1cdFx0XHRyID0gb3BzLVx1MDAzZXNldF9tYXAodmRwYSwgYXNpZCwgaW90bGIpO1xuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTEyOTgtXHRcdH1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjEyOTk6XHRcdHYtXHUwMDNlaW5fYmF0Y2ggPSBmYWxzZTtcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTEzMDAtXHRcdGJyZWFrO1xuLS1cbmZzL2V4dDQvZXh0NC5oPTE1ODY9c3RydWN0IGV4dDRfc2JfaW5mbyB7XG4tLVxuZnMvZXh0NC9leHQ0LmgtMTY0Ni1cdHUzMiBzX21heF9iYXRjaF90aW1lO1xuZnMvZXh0NC9leHQ0Lmg6MTY0NzpcdHUzMiBzX21pbl9iYXRjaF90aW1lO1xuZnMvZXh0NC9leHQ0LmgtMTY0OC1cdHN0cnVjdCBmaWxlICpzX2pvdXJuYWxfYmRldl9maWxlO1xuLS1cbmZzL2V4dDQvc3VwZXIuYz0xNjkyPWVudW0ge1xuLS1cbmZzL2V4dDQvc3VwZXIuYy0xNjk3LVx0T3B0X2F1dG9fZGFfYWxsb2MsIE9wdF9ub2F1dG9fZGFfYWxsb2MsIE9wdF9ub2xvYWQsXG5mcy9leHQ0L3N1cGVyLmM6MTY5ODpcdE9wdF9jb21taXQsIE9wdF9taW5fYmF0Y2hfdGltZSwgT3B0X21heF9iYXRjaF90aW1lLCBPcHRfam91cm5hbF9kZXYsXG5mcy9leHQ0L3N1cGVyLmMtMTY5OS1cdE9wdF9qb3VybmFsX3BhdGgsIE9wdF9qb3VybmFsX2NoZWNrc3VtLCBPcHRfam91cm5hbF9hc3luY19jb21taXQsXG4tLVxuZnMvZXh0NC9zdXBlci5jPTE3NjI9c3RhdGljIGNvbnN0IHN0cnVjdCBmc19wYXJhbWV0ZXJfc3BlYyBleHQ0X3BhcmFtX3NwZWNzW10gPSB7XG4tLVxuZnMvZXh0NC9zdXBlci5jLTE3ODMtXHRmc3BhcmFtX3UzMlx0KFwmIzM0O2NvbW1pdFwmIzM0OyxcdFx0T3B0X2NvbW1pdCksXG5mcy9leHQ0L3N1cGVyLmM6MTc4NDpcdGZzcGFyYW1fdTMyXHQoXCYjMzQ7bWluX2JhdGNoX3RpbWVcJiMzNDssXHRPcHRfbWluX2JhdGNoX3RpbWUpLFxuZnMvZXh0NC9zdXBlci5jLTE3ODUtXHRmc3BhcmFtX3UzMlx0KFwmIzM0O21heF9iYXRjaF90aW1lXCYjMzQ7LFx0T3B0X21heF9iYXRjaF90aW1lKSxcbi0tXG5mcy9leHQ0L3N1cGVyLmM9MTk2ND1leHQ0X3NiX3JlYWRfZW5jb2RpbmcoY29uc3Qgc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy0xOTg0LSNkZWZpbmUgRVhUNF9TUEVDX3NfbWF4X2JhdGNoX3RpbWVcdFx0KDEgXHUwMDNjXHUwMDNjICA4KVxuZnMvZXh0NC9zdXBlci5jOjE5ODU6I2RlZmluZSBFWFQ0X1NQRUNfc19taW5fYmF0Y2hfdGltZVx0XHQoMSBcdTAwM2NcdTAwM2MgIDkpXG5mcy9leHQ0L3N1cGVyLmMtMTk4Ni0jZGVmaW5lIEVYVDRfU1BFQ19zX2lub2RlX3JlYWRhaGVhZF9ibGtzXHQoMSBcdTAwM2NcdTAwM2MgMTApXG4tLVxuZnMvZXh0NC9zdXBlci5jPTE5OTc9c3RydWN0IGV4dDRfZnNfY29udGV4dCB7XG4tLVxuZnMvZXh0NC9zdXBlci5jLTIwMjEtXHR1MzJcdFx0c19tYXhfYmF0Y2hfdGltZTtcbmZzL2V4dDQvc3VwZXIuYzoyMDIyOlx0dTMyXHRcdHNfbWluX2JhdGNoX3RpbWU7XG5mcy9leHQ0L3N1cGVyLmMtMjAyMy1cdGt1aWRfdFx0XHRzX3Jlc3VpZDtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9MjE3MT1zdGF0aWMgaW50IGV4dDRfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSlcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMjI3OS1cdFx0cmV0dXJuIDA7XG5mcy9leHQ0L3N1cGVyLmM6MjI4MDpcdGNhc2UgT3B0X21pbl9iYXRjaF90aW1lOlxuZnMvZXh0NC9zdXBlci5jOjIyODE6XHRcdGN0eC1cdTAwM2VzX21pbl9iYXRjaF90aW1lID0gcmVzdWx0LnVpbnRfMzI7XG5mcy9leHQ0L3N1cGVyLmM6MjI4MjpcdFx0Y3R4LVx1MDAzZXNwZWMgfD0gRVhUNF9TUEVDX3NfbWluX2JhdGNoX3RpbWU7XG5mcy9leHQ0L3N1cGVyLmMtMjI4My1cdFx0cmV0dXJuIDA7XG4tLVxuZnMvZXh0NC9zdXBlci5jPTI4NTU9c3RhdGljIHZvaWQgZXh0NF9hcHBseV9vcHRpb25zKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMjg3MC1cdEFQUExZKHNfbWF4X2JhdGNoX3RpbWUpO1xuZnMvZXh0NC9zdXBlci5jOjI4NzE6XHRBUFBMWShzX21pbl9iYXRjaF90aW1lKTtcbmZzL2V4dDQvc3VwZXIuYy0yODcyLVx0QVBQTFkoc193YW50X2V4dHJhX2lzaXplKTtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9Mjk2NT1zdGF0aWMgaW50IF9leHQ0X3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMzAyMy1cdFx0U0VRX09QVFNfUFJJTlQoXCYjMzQ7Y29tbWl0PSVsdVwmIzM0Oywgc2JpLVx1MDAzZXNfY29tbWl0X2ludGVydmFsIC8gSFopO1xuZnMvZXh0NC9zdXBlci5jOjMwMjQ6XHRpZiAobm9kZWZzIHx8IHNiaS1cdTAwM2VzX21pbl9iYXRjaF90aW1lICE9IEVYVDRfREVGX01JTl9CQVRDSF9USU1FKVxuZnMvZXh0NC9zdXBlci5jOjMwMjU6XHRcdFNFUV9PUFRTX1BSSU5UKFwmIzM0O21pbl9iYXRjaF90aW1lPSV1XCYjMzQ7LCBzYmktXHUwMDNlc19taW5fYmF0Y2hfdGltZSk7XG5mcy9leHQ0L3N1cGVyLmMtMzAyNi1cdGlmIChub2RlZnMgfHwgc2JpLVx1MDAzZXNfbWF4X2JhdGNoX3RpbWUgIT0gRVhUNF9ERUZfTUFYX0JBVENIX1RJTUUpXG4tLVxuZnMvZXh0NC9zdXBlci5jPTUzMzg9c3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTUzNzMtXHRzYmktXHUwMDNlc19jb21taXRfaW50ZXJ2YWwgPSBKQkQyX0RFRkFVTFRfTUFYX0NPTU1JVF9BR0UgKiBIWjtcbmZzL2V4dDQvc3VwZXIuYzo1Mzc0Olx0c2JpLVx1MDAzZXNfbWluX2JhdGNoX3RpbWUgPSBFWFQ0X0RFRl9NSU5fQkFUQ0hfVElNRTtcbmZzL2V4dDQvc3VwZXIuYy01Mzc1LVx0c2JpLVx1MDAzZXNfbWF4X2JhdGNoX3RpbWUgPSBFWFQ0X0RFRl9NQVhfQkFUQ0hfVElNRTtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9NTg2OD1zdGF0aWMgdm9pZCBleHQ0X2luaXRfam91cm5hbF9wYXJhbXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgam91cm5hbF90ICpqb3VybmFsKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy01ODcyLVx0am91cm5hbC1cdTAwM2VqX2NvbW1pdF9pbnRlcnZhbCA9IHNiaS1cdTAwM2VzX2NvbW1pdF9pbnRlcnZhbDtcbmZzL2V4dDQvc3VwZXIuYzo1ODczOlx0am91cm5hbC1cdTAwM2VqX21pbl9iYXRjaF90aW1lID0gc2JpLVx1MDAzZXNfbWluX2JhdGNoX3RpbWU7XG5mcy9leHQ0L3N1cGVyLmMtNTg3NC1cdGpvdXJuYWwtXHUwMDNlal9tYXhfYmF0Y2hfdGltZSA9IHNiaS1cdTAwM2VzX21heF9iYXRjaF90aW1lO1xuLS1cbmZzL2V4dDQvc3VwZXIuYz02NTQ1PXN0cnVjdCBleHQ0X21vdW50X29wdGlvbnMge1xuLS1cbmZzL2V4dDQvc3VwZXIuYy02NTUwLVx0dW5zaWduZWQgbG9uZyBzX2NvbW1pdF9pbnRlcnZhbDtcbmZzL2V4dDQvc3VwZXIuYzo2NTUxOlx0dTMyIHNfbWluX2JhdGNoX3RpbWUsIHNfbWF4X2JhdGNoX3RpbWU7XG5mcy9leHQ0L3N1cGVyLmMtNjU1Mi0jaWZkZWYgQ09ORklHX1FVT1RBXG4tLVxuZnMvZXh0NC9zdXBlci5jPTY1NTg9c3RhdGljIGludCBfX2V4dDRfcmVtb3VudChzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTY1ODEtXHRvbGRfb3B0cy5zX2NvbW1pdF9pbnRlcnZhbCA9IHNiaS1cdTAwM2VzX2NvbW1pdF9pbnRlcnZhbDtcbmZzL2V4dDQvc3VwZXIuYzo2NTgyOlx0b2xkX29wdHMuc19taW5fYmF0Y2hfdGltZSA9IHNiaS1cdTAwM2VzX21pbl9iYXRjaF90aW1lO1xuZnMvZXh0NC9zdXBlci5jLTY1ODMtXHRvbGRfb3B0cy5zX21heF9iYXRjaF90aW1lID0gc2JpLVx1MDAzZXNfbWF4X2JhdGNoX3RpbWU7XG4tLVxuZnMvZXh0NC9zdXBlci5jLTY4NjMtXHRzYmktXHUwMDNlc19jb21taXRfaW50ZXJ2YWwgPSBvbGRfb3B0cy5zX2NvbW1pdF9pbnRlcnZhbDtcbmZzL2V4dDQvc3VwZXIuYzo2ODY0Olx0c2JpLVx1MDAzZXNfbWluX2JhdGNoX3RpbWUgPSBvbGRfb3B0cy5zX21pbl9iYXRjaF90aW1lO1xuZnMvZXh0NC9zdXBlci5jLTY4NjUtXHRzYmktXHUwMDNlc19tYXhfYmF0Y2hfdGltZSA9IG9sZF9vcHRzLnNfbWF4X2JhdGNoX3RpbWU7XG4tLVxuZnMvamJkMi9qb3VybmFsLmM9MTUxOD1zdGF0aWMgam91cm5hbF90ICpqb3VybmFsX2luaXRfY29tbW9uKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXG4tLVxuZnMvamJkMi9qb3VybmFsLmMtMTU1Ni1cdGpvdXJuYWwtXHUwMDNlal9jb21taXRfaW50ZXJ2YWwgPSAoSFogKiBKQkQyX0RFRkFVTFRfTUFYX0NPTU1JVF9BR0UpO1xuZnMvamJkMi9qb3VybmFsLmM6MTU1NzpcdGpvdXJuYWwtXHUwMDNlal9taW5fYmF0Y2hfdGltZSA9IDA7XG5mcy9qYmQyL2pvdXJuYWwuYy0xNTU4LVx0am91cm5hbC1cdTAwM2VqX21heF9iYXRjaF90aW1lID0gMTUwMDA7IC8qIDE1bXMgKi9cbi0tXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmM9MTg4OD1pbnQgamJkMl9qb3VybmFsX3N0b3AoaGFuZGxlX3QgKmhhbmRsZSlcbi0tXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmMtMTk2OC1cdFx0Y29tbWl0X3RpbWUgPSBtYXhfdCh1NjQsIGNvbW1pdF90aW1lLFxuZnMvamJkMi90cmFuc2FjdGlvbi5jOjE5Njk6XHRcdFx0XHQgICAgMTAwMCpqb3VybmFsLVx1MDAzZWpfbWluX2JhdGNoX3RpbWUpO1xuZnMvamJkMi90cmFuc2FjdGlvbi5jLTE5NzAtXHRcdGNvbW1pdF90aW1lID0gbWluX3QodTY0LCBjb21taXRfdGltZSxcbi0tXG5pbmNsdWRlL2xpbnV4L2piZDIuaD03NjM9c3RydWN0IGpvdXJuYWxfc1xuLS1cbmluY2x1ZGUvbGludXgvamJkMi5oLTExODAtXHQvKipcbmluY2x1ZGUvbGludXgvamJkMi5oOjExODE6XHQgKiBAal9taW5fYmF0Y2hfdGltZTpcbmluY2x1ZGUvbGludXgvamJkMi5oLTExODItXHQgKlxuLS1cbmluY2x1ZGUvbGludXgvamJkMi5oLTExODUtXHQgKi9cbmluY2x1ZGUvbGludXgvamJkMi5oOjExODY6XHR1MzJcdFx0XHRqX21pbl9iYXRjaF90aW1lO1xuaW5jbHVkZS9saW51eC9qYmQyLmgtMTE4Ny1cbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTMyPXVuaW9uIGJwZl9pdGVyX2xpbmtfaW5mbyB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTY0OS0gKlx0XHRUd28gb3BhcXVlIHZhbHVlcyBhcmUgdXNlZCB0byBtYW5hZ2UgYmF0Y2ggb3BlcmF0aW9ucyxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDo2NTA6ICpcdFx0KmluX2JhdGNoKiBhbmQgKm91dF9iYXRjaCouIEluaXRpYWxseSwgKmluX2JhdGNoKiBtdXN0IGJlIHNldFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTY1MS0gKlx0XHR0byBOVUxMIHRvIGJlZ2luIHRoZSBiYXRjaGVkIG9wZXJhdGlvbi4gQWZ0ZXIgZWFjaCBzdWJzZXF1ZW50XG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNjUyLSAqXHRcdCoqQlBGX01BUF9MT09LVVBfQkFUQ0gqKiwgdGhlIGNhbGxlciBzaG91bGQgcGFzcyB0aGUgcmVzdWx0YW50XG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NjUzOiAqXHRcdCpvdXRfYmF0Y2gqIGFzIHRoZSAqaW5fYmF0Y2gqIGZvciB0aGUgbmV4dCBvcGVyYXRpb24gdG9cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDo2NTQ6ICpcdFx0Y29udGludWUgaXRlcmF0aW9uIGZyb20gdGhlIGN1cnJlbnQgcG9pbnQuIEJvdGggKmluX2JhdGNoKiBhbmRcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC02NTUtICpcdFx0Km91dF9iYXRjaCogbXVzdCBwb2ludCB0byBtZW1vcnkgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYSBrZXksXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTcxNy0gKlx0XHRFYWNoIGVsZW1lbnQgc3BlY2lmaWVkIGluICprZXlzKiBpcyBzZXF1ZW50aWFsbHkgdXBkYXRlZCB0byB0aGVcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDo3MTg6ICpcdFx0dmFsdWUgaW4gdGhlIGNvcnJlc3BvbmRpbmcgaW5kZXggaW4gKnZhbHVlcyouIFRoZSAqaW5fYmF0Y2gqXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNzE5LSAqXHRcdGFuZCAqb3V0X2JhdGNoKiBwYXJhbWV0ZXJzIGFyZSBpZ25vcmVkIGFuZCBzaG91bGQgYmUgemVyb2VkLlxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC03NjYtICpcdFx0RWFjaCBlbGVtZW50IHNwZWNpZmllZCBpbiAqa2V5cyogaXMgc2VxdWVudGlhbGx5IGRlbGV0ZWQuIFRoZVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjc2NzogKlx0XHQqaW5fYmF0Y2gqLCAqb3V0X2JhdGNoKiwgYW5kICp2YWx1ZXMqIHBhcmFtZXRlcnMgYXJlIGlnbm9yZWRcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC03NjgtICpcdFx0YW5kIHNob3VsZCBiZSB6ZXJvZWQuXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTE1Mjc9dW5pb24gYnBmX2F0dHIge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xNTkxLVx0c3RydWN0IHsgLyogc3RydWN0IHVzZWQgYnkgQlBGX01BUF8qX0JBVENIIGNvbW1hbmRzICovXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTU5MjpcdFx0X19hbGlnbmVkX3U2NFx0aW5fYmF0Y2g7XHQvKiBzdGFydCBiYXRjaCxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xNTkzLVx0XHRcdFx0XHRcdCAqIE5VTEwgdG8gc3RhcnQgZnJvbSBiZWdpbm5pbmdcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0xNzczPV9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xNzgyLVx0dm9pZCBfX3VzZXIgKnVrZXlzID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXHUwMDNlYmF0Y2gua2V5cyk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoxNzgzOlx0dm9pZCBfX3VzZXIgKnViYXRjaCA9IHU2NF90b191c2VyX3B0cihhdHRyLVx1MDAzZWJhdGNoLmluX2JhdGNoKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTE3ODQtXHR1MzIgYmF0Y2gsIG1heF9jb3VudCwgc2l6ZSwgYnVja2V0X3NpemUsIG1hcF9pZDtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMjQ1PXN0YXRpYyBpbnQgX19yaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMjUyLVx0dm9pZCBfX3VzZXIgKnVrZXlzID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXHUwMDNlYmF0Y2gua2V5cyk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMjUzOlx0dm9pZCBfX3VzZXIgKnViYXRjaCA9IHU2NF90b191c2VyX3B0cihhdHRyLVx1MDAzZWJhdGNoLmluX2JhdGNoKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyNTQtXHR2b2lkICpjdXJzb3IgPSBOVUxMLCAqa2V5cyA9IE5VTEwsICp2YWx1ZXMgPSBOVUxMLCAqZHN0X2tleSwgKmRzdF92YWw7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjEyMD1pbnQgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjEyNC1cdHZvaWQgX191c2VyICp1b2JhdGNoID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXHUwMDNlYmF0Y2gub3V0X2JhdGNoKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjIxMjU6XHR2b2lkIF9fdXNlciAqdWJhdGNoID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXHUwMDNlYmF0Y2guaW5fYmF0Y2gpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMjEyNi1cdHZvaWQgX191c2VyICp2YWx1ZXMgPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cdTAwM2ViYXRjaC52YWx1ZXMpO1xuLS1cbm1tL21lbW9yeS5jPTIzOTI9c3RhdGljIGludCBpbnNlcnRfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL21lbW9yeS5jLTI0MTItXG5tbS9tZW1vcnkuYzoyNDEzOnN0YXRpYyBpbnQgaW5zZXJ0X3BhZ2VfaW5fYmF0Y2hfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwdGVfdCAqcHRlLFxubW0vbWVtb3J5LmMtMjQxNC1cdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBwYWdlICpwYWdlLCBwZ3Byb3RfdCBwcm90KVxuLS1cbm1tL21lbW9yeS5jPTI0Mjc9c3RhdGljIGludCBpbnNlcnRfcGFnZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9tZW1vcnkuYy0yNDYxLVx0XHRmb3IgKHB0ZSA9IHN0YXJ0X3B0ZTsgcHRlX2lkeCBcdTAwM2MgYmF0Y2hfc2l6ZTsgJiM0MzsmIzQzO3B0ZSwgJiM0MzsmIzQzO3B0ZV9pZHgpIHtcbm1tL21lbW9yeS5jOjI0NjI6XHRcdFx0aW50IGVyciA9IGluc2VydF9wYWdlX2luX2JhdGNoX2xvY2tlZCh2bWEsIHB0ZSxcbm1tL21lbW9yeS5jLTI0NjMtXHRcdFx0XHRhZGRyLCBwYWdlc1tjdXJyX3BhZ2VfaWR4XSwgcHJvdCk7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTI1NjQ9Ym9vbCBkZWNheV9wY3BfaGlnaChzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBlcl9jcHVfcGFnZXMgKnBjcClcbm1tL3BhZ2VfYWxsb2MuYy0yNTY1LXtcbm1tL3BhZ2VfYWxsb2MuYzoyNTY2Olx0aW50IGhpZ2hfbWluLCB0b19kcmFpbiwgdG9fZHJhaW5fYmF0Y2hlZCwgYmF0Y2g7XG5tbS9wYWdlX2FsbG9jLmMtMjU2Ny1cdGJvb2wgdG9kbyA9IGZhbHNlO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYy0yNTg0LVx0d2hpbGUgKHRvX2RyYWluIFx1MDAzZSAwKSB7XG5tbS9wYWdlX2FsbG9jLmM6MjU4NTpcdFx0dG9fZHJhaW5fYmF0Y2hlZCA9IG1pbih0b19kcmFpbiwgYmF0Y2gpO1xubW0vcGFnZV9hbGxvYy5jLTI1ODYtXHRcdHBjcF9zcGluX2xvY2tfbm9waW4ocGNwKTtcbm1tL3BhZ2VfYWxsb2MuYzoyNTg3Olx0XHRmcmVlX3BjcHBhZ2VzX2J1bGsoem9uZSwgdG9fZHJhaW5fYmF0Y2hlZCwgcGNwLCAwKTtcbm1tL3BhZ2VfYWxsb2MuYy0yNTg4LVx0XHRwY3Bfc3Bpbl91bmxvY2tfbm9waW4ocGNwKTtcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMjU5MC1cbm1tL3BhZ2VfYWxsb2MuYzoyNTkxOlx0XHR0b19kcmFpbiAtPSB0b19kcmFpbl9iYXRjaGVkO1xubW0vcGFnZV9hbGxvYy5jLTI1OTItXHR9XG4tLVxubW0vc2x1Yi5jPTI4NTE9c3RhdGljIHZvaWQgX19rbWVtX2NhY2hlX2ZyZWVfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKTtcbi0tXG5tbS9zbHViLmMtMjg2My0gKi9cbm1tL3NsdWIuYzoyODY0OnN0YXRpYyB1bnNpZ25lZCBpbnQgX19zaGVhZl9mbHVzaF9tYWluX2JhdGNoKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxubW0vc2x1Yi5jLTI4NjUte1xuLS1cbm1tL3NsdWIuYz0yODkyPXN0YXRpYyB2b2lkIHNoZWFmX2ZsdXNoX21haW4oc3RydWN0IGttZW1fY2FjaGUgKnMpXG4tLVxubW0vc2x1Yi5jLTI4OTgtXG5tbS9zbHViLmM6Mjg5OTpcdFx0cmVtYWluaW5nID0gX19zaGVhZl9mbHVzaF9tYWluX2JhdGNoKHMpO1xubW0vc2x1Yi5jLTI5MDAtXG4tLVxubW0vc2x1Yi5jPTI5MDc9c3RhdGljIGJvb2wgc2hlYWZfdHJ5X2ZsdXNoX21haW4oc3RydWN0IGttZW1fY2FjaGUgKnMpXG4tLVxubW0vc2x1Yi5jLTI5MTYtXHRcdHJldCA9IHRydWU7XG5tbS9zbHViLmM6MjkxNzpcdFx0cmVtYWluaW5nID0gX19zaGVhZl9mbHVzaF9tYWluX2JhdGNoKHMpO1xubW0vc2x1Yi5jLTI5MTgtXG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTEzMj11bmlvbiBicGZfaXRlcl9saW5rX2luZm8ge1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC02NDktICpcdFx0VHdvIG9wYXF1ZSB2YWx1ZXMgYXJlIHVzZWQgdG8gbWFuYWdlIGJhdGNoIG9wZXJhdGlvbnMsXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NjUwOiAqXHRcdCppbl9iYXRjaCogYW5kICpvdXRfYmF0Y2gqLiBJbml0aWFsbHksICppbl9iYXRjaCogbXVzdCBiZSBzZXRcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC02NTEtICpcdFx0dG8gTlVMTCB0byBiZWdpbiB0aGUgYmF0Y2hlZCBvcGVyYXRpb24uIEFmdGVyIGVhY2ggc3Vic2VxdWVudFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTY1Mi0gKlx0XHQqKkJQRl9NQVBfTE9PS1VQX0JBVENIKiosIHRoZSBjYWxsZXIgc2hvdWxkIHBhc3MgdGhlIHJlc3VsdGFudFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjY1MzogKlx0XHQqb3V0X2JhdGNoKiBhcyB0aGUgKmluX2JhdGNoKiBmb3IgdGhlIG5leHQgb3BlcmF0aW9uIHRvXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NjU0OiAqXHRcdGNvbnRpbnVlIGl0ZXJhdGlvbiBmcm9tIHRoZSBjdXJyZW50IHBvaW50LiBCb3RoICppbl9iYXRjaCogYW5kXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNjU1LSAqXHRcdCpvdXRfYmF0Y2gqIG11c3QgcG9pbnQgdG8gbWVtb3J5IGxhcmdlIGVub3VnaCB0byBob2xkIGEga2V5LFxuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC03MTctICpcdFx0RWFjaCBlbGVtZW50IHNwZWNpZmllZCBpbiAqa2V5cyogaXMgc2VxdWVudGlhbGx5IHVwZGF0ZWQgdG8gdGhlXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NzE4OiAqXHRcdHZhbHVlIGluIHRoZSBjb3JyZXNwb25kaW5nIGluZGV4IGluICp2YWx1ZXMqLiBUaGUgKmluX2JhdGNoKlxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTcxOS0gKlx0XHRhbmQgKm91dF9iYXRjaCogcGFyYW1ldGVycyBhcmUgaWdub3JlZCBhbmQgc2hvdWxkIGJlIHplcm9lZC5cbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNzY2LSAqXHRcdEVhY2ggZWxlbWVudCBzcGVjaWZpZWQgaW4gKmtleXMqIGlzIHNlcXVlbnRpYWxseSBkZWxldGVkLiBUaGVcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDo3Njc6ICpcdFx0KmluX2JhdGNoKiwgKm91dF9iYXRjaCosIGFuZCAqdmFsdWVzKiBwYXJhbWV0ZXJzIGFyZSBpZ25vcmVkXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNzY4LSAqXHRcdGFuZCBzaG91bGQgYmUgemVyb2VkLlxuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xNTI3PXVuaW9uIGJwZl9hdHRyIHtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTU5MS1cdHN0cnVjdCB7IC8qIHN0cnVjdCB1c2VkIGJ5IEJQRl9NQVBfKl9CQVRDSCBjb21tYW5kcyAqL1xudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjE1OTI6XHRcdF9fYWxpZ25lZF91NjRcdGluX2JhdGNoO1x0Lyogc3RhcnQgYmF0Y2gsXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTU5My1cdFx0XHRcdFx0XHQgKiBOVUxMIHRvIHN0YXJ0IGZyb20gYmVnaW5uaW5nXG4tLVxudG9vbHMvbGliL2JwZi9icGYuYz01Njg9aW50IGJwZl9tYXBfZnJlZXplKGludCBmZClcbi0tXG50b29scy9saWIvYnBmL2JwZi5jLTU4MC1cbnRvb2xzL2xpYi9icGYvYnBmLmM6NTgxOnN0YXRpYyBpbnQgYnBmX21hcF9iYXRjaF9jb21tb24oaW50IGNtZCwgaW50IGZkLCB2b2lkICAqaW5fYmF0Y2gsXG50b29scy9saWIvYnBmL2JwZi5jLTU4Mi1cdFx0XHRcdHZvaWQgKm91dF9iYXRjaCwgdm9pZCAqa2V5cywgdm9pZCAqdmFsdWVzLFxuLS1cbnRvb2xzL2xpYi9icGYvYnBmLmMtNTk0LVx0YXR0ci5iYXRjaC5tYXBfZmQgPSBmZDtcbnRvb2xzL2xpYi9icGYvYnBmLmM6NTk1Olx0YXR0ci5iYXRjaC5pbl9iYXRjaCA9IHB0cl90b191NjQoaW5fYmF0Y2gpO1xudG9vbHMvbGliL2JwZi9icGYuYy01OTYtXHRhdHRyLmJhdGNoLm91dF9iYXRjaCA9IHB0cl90b191NjQob3V0X2JhdGNoKTtcbi0tXG50b29scy9saWIvYnBmL2JwZi5jPTYwOT1pbnQgYnBmX21hcF9kZWxldGVfYmF0Y2goaW50IGZkLCBjb25zdCB2b2lkICprZXlzLCBfX3UzMiAqY291bnQsXG4tLVxudG9vbHMvbGliL2JwZi9icGYuYy02MTUtXG50b29scy9saWIvYnBmL2JwZi5jOjYxNjppbnQgYnBmX21hcF9sb29rdXBfYmF0Y2goaW50IGZkLCB2b2lkICppbl9iYXRjaCwgdm9pZCAqb3V0X2JhdGNoLCB2b2lkICprZXlzLFxudG9vbHMvbGliL2JwZi9icGYuYy02MTctXHRcdFx0IHZvaWQgKnZhbHVlcywgX191MzIgKmNvdW50LFxuLS1cbnRvb2xzL2xpYi9icGYvYnBmLmMtNjE5LXtcbnRvb2xzL2xpYi9icGYvYnBmLmM6NjIwOlx0cmV0dXJuIGJwZl9tYXBfYmF0Y2hfY29tbW9uKEJQRl9NQVBfTE9PS1VQX0JBVENILCBmZCwgaW5fYmF0Y2gsXG50b29scy9saWIvYnBmL2JwZi5jLTYyMS1cdFx0XHRcdCAgICBvdXRfYmF0Y2gsIGtleXMsIHZhbHVlcywgY291bnQsIG9wdHMpO1xuLS1cbnRvb2xzL2xpYi9icGYvYnBmLmMtNjIzLVxudG9vbHMvbGliL2JwZi9icGYuYzo2MjQ6aW50IGJwZl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goaW50IGZkLCB2b2lkICppbl9iYXRjaCwgdm9pZCAqb3V0X2JhdGNoLFxudG9vbHMvbGliL2JwZi9icGYuYy02MjUtXHRcdFx0XHQgICAgdm9pZCAqa2V5cywgdm9pZCAqdmFsdWVzLCBfX3UzMiAqY291bnQsXG4tLVxudG9vbHMvbGliL2JwZi9icGYuYy02MjgtXHRyZXR1cm4gYnBmX21hcF9iYXRjaF9jb21tb24oQlBGX01BUF9MT09LVVBfQU5EX0RFTEVURV9CQVRDSCxcbnRvb2xzL2xpYi9icGYvYnBmLmM6NjI5Olx0XHRcdFx0ICAgIGZkLCBpbl9iYXRjaCwgb3V0X2JhdGNoLCBrZXlzLCB2YWx1ZXMsXG50b29scy9saWIvYnBmL2JwZi5jLTYzMC1cdFx0XHRcdCAgICBjb3VudCwgb3B0cyk7XG4tLVxudG9vbHMvbGliL2JwZi9icGYuaD0yMDc9TElCQlBGX0FQSSBpbnQgYnBmX21hcF9kZWxldGVfYmF0Y2goaW50IGZkLCBjb25zdCB2b2lkICprZXlzLFxuLS1cbnRvb2xzL2xpYi9icGYvYnBmLmgtMjEzLSAqXG50b29scy9saWIvYnBmL2JwZi5oOjIxNDogKiBUaGUgcGFyYW1ldGVyICppbl9iYXRjaCogaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIGJhdGNoIHRvXG50b29scy9saWIvYnBmL2JwZi5oOjIxNTogKiByZWFkLiAqb3V0X2JhdGNoKiBpcyBhbiBvdXRwdXQgcGFyYW1ldGVyIHRoYXQgc2hvdWxkIGJlIHBhc3NlZCBhcyAqaW5fYmF0Y2gqXG50b29scy9saWIvYnBmL2JwZi5oLTIxNi0gKiB0byBzdWJzZXF1ZW50IGNhbGxzIHRvICoqYnBmX21hcF9sb29rdXBfYmF0Y2goKSoqLiBOVUxMIGNhbiBiZSBwYXNzZWQgZm9yXG50b29scy9saWIvYnBmL2JwZi5oOjIxNzogKiAqaW5fYmF0Y2gqIHRvIGluZGljYXRlIHRoYXQgdGhlIGJhdGNoZWQgbG9va3VwIHN0YXJ0cyBmcm9tIHRoZSBiZWdpbm5pbmcgb2ZcbnRvb2xzL2xpYi9icGYvYnBmLmg6MjE4OiAqIHRoZSBtYXAuIEJvdGggKmluX2JhdGNoKiBhbmQgKm91dF9iYXRjaCogbXVzdCBwb2ludCB0byBtZW1vcnkgbGFyZ2UgZW5vdWdoIHRvXG50b29scy9saWIvYnBmL2JwZi5oLTIxOS0gKiBob2xkIGEgc2luZ2xlIGtleSwgZXhjZXB0IGZvciBtYXBzIG9mIHR5cGUgKipCUEZfTUFQX1RZUEVfe0hBU0gsIFBFUkNQVV9IQVNILFxuLS1cbnRvb2xzL2xpYi9icGYvYnBmLmgtMjI4LSAqIEBwYXJhbSBmZCBCUEYgbWFwIGZpbGUgZGVzY3JpcHRvclxudG9vbHMvbGliL2JwZi9icGYuaDoyMjk6ICogQHBhcmFtIGluX2JhdGNoIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IGVsZW1lbnQgaW4gYmF0Y2ggdG8gcmVhZCwgY2FuIHBhc3MgTlVMTCB0b1xudG9vbHMvbGliL2JwZi9icGYuaC0yMzAtICogaW5kaWNhdGUgdGhhdCB0aGUgYmF0Y2hlZCBsb29rdXAgc3RhcnRzIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgbWFwLlxudG9vbHMvbGliL2JwZi9icGYuaDoyMzE6ICogQHBhcmFtIG91dF9iYXRjaCBvdXRwdXQgcGFyYW1ldGVyIHRoYXQgc2hvdWxkIGJlIHBhc3NlZCB0byBuZXh0IGNhbGwgYXMgKmluX2JhdGNoKlxudG9vbHMvbGliL2JwZi9icGYuaC0yMzItICogQHBhcmFtIGtleXMgcG9pbnRlciB0byBhbiBhcnJheSBsYXJnZSBlbm91Z2ggZm9yICpjb3VudCoga2V5c1xuLS1cbnRvb2xzL2xpYi9icGYvYnBmLmgtMjQzLSAqL1xudG9vbHMvbGliL2JwZi9icGYuaDoyNDQ6TElCQlBGX0FQSSBpbnQgYnBmX21hcF9sb29rdXBfYmF0Y2goaW50IGZkLCB2b2lkICppbl9iYXRjaCwgdm9pZCAqb3V0X2JhdGNoLFxudG9vbHMvbGliL2JwZi9icGYuaC0yNDUtXHRcdFx0XHQgICAgdm9pZCAqa2V5cywgdm9pZCAqdmFsdWVzLCBfX3UzMiAqY291bnQsXG4tLVxudG9vbHMvbGliL2JwZi9icGYuaC0yNTItICogQHBhcmFtIGZkIEJQRiBtYXAgZmlsZSBkZXNjcmlwdG9yXG50b29scy9saWIvYnBmL2JwZi5oOjI1MzogKiBAcGFyYW0gaW5fYmF0Y2ggYWRkcmVzcyBvZiB0aGUgZmlyc3QgZWxlbWVudCBpbiBiYXRjaCB0byByZWFkLCBjYW4gcGFzcyBOVUxMIHRvXG50b29scy9saWIvYnBmL2JwZi5oLTI1NC0gKiBnZXQgYWRkcmVzcyBvZiB0aGUgZmlyc3QgZWxlbWVudCBpbiAqb3V0X2JhdGNoKi4gSWYgbm90IE5VTEwsIG11c3QgYmUgbGFyZ2Vcbi0tXG50b29scy9saWIvYnBmL2JwZi5oLTI1Ny0gKiBvZiBrZXkgc2l6ZS5cbnRvb2xzL2xpYi9icGYvYnBmLmg6MjU4OiAqIEBwYXJhbSBvdXRfYmF0Y2ggb3V0cHV0IHBhcmFtZXRlciB0aGF0IHNob3VsZCBiZSBwYXNzZWQgdG8gbmV4dCBjYWxsIGFzICppbl9iYXRjaCpcbnRvb2xzL2xpYi9icGYvYnBmLmgtMjU5LSAqIEBwYXJhbSBrZXlzIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgKmNvdW50KiBrZXlzXG4tLVxudG9vbHMvbGliL2JwZi9icGYuaC0yNzItICovXG50b29scy9saWIvYnBmL2JwZi5oOjI3MzpMSUJCUEZfQVBJIGludCBicGZfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKGludCBmZCwgdm9pZCAqaW5fYmF0Y2gsXG50b29scy9saWIvYnBmL2JwZi5oLTI3NC1cdFx0XHRcdFx0dm9pZCAqb3V0X2JhdGNoLCB2b2lkICprZXlzLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9tYXBfdGVzdHMvbWFwX3BlcmNwdV9zdGF0cy5jPTYzPXN0YXRpYyB2b2lkIGRlbGV0ZV9hbmRfbG9va3VwX2JhdGNoKGludCBtYXBfZmQsIHZvaWQgKmtleXMsIF9fdTMyIGNvdW50KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9tYXBfdGVzdHMvbWFwX3BlcmNwdV9zdGF0cy5jLTY1LVx0c3RhdGljIF9fdTggdmFsdWVzWyg4IFx1MDAzY1x1MDAzYyAxMCkgKiBNQVhfRU5UUklFU107XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbWFwX3Rlc3RzL21hcF9wZXJjcHVfc3RhdHMuYzo2NjpcdHZvaWQgKmluX2JhdGNoID0gTlVMTCwgKm91dF9iYXRjaDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9tYXBfdGVzdHMvbWFwX3BlcmNwdV9zdGF0cy5jLTY3LVx0X191MzIgc2F2ZV9jb3VudCA9IGNvdW50O1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9tYXBfdGVzdHMvbWFwX3BlcmNwdV9zdGF0cy5jLTcwLVx0cmV0ID0gYnBmX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXBfZmQsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbWFwX3Rlc3RzL21hcF9wZXJjcHVfc3RhdHMuYzo3MTpcdFx0XHRcdFx0ICAgICAgXHUwMDI2aW5fYmF0Y2gsIFx1MDAyNm91dF9iYXRjaCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9tYXBfdGVzdHMvbWFwX3BlcmNwdV9zdGF0cy5jLTcyLVx0XHRcdFx0XHQgICAgICBrZXlzLCB2YWx1ZXMsIFx1MDAyNmNvdW50LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwNzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTgxMgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDExMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBCdWdzIGluIFZob3N0LVZEUEEgSU9UTEIgQmF0Y2hpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGB2aG9zdF92ZHBhYCBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIElPVExCIGJhdGNoaW5nIGxvZ2ljLiBJdCBsb29rcyBsaWtlIGB2LSZndDtpbl9iYXRjaGAgaXMgdGhlIGtleSBmbGFnIGhlcmUsIHVzZWQgaW4gYHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl9tc2dgLCBgdmhvc3RfdmRwYV9tYXBgLCBhbmQgYHZob3N0X3ZkcGFfdW5tYXBgLiBJIHNlZSB0aGF0IGlmIGB2LSZndDtpbl9iYXRjaGAgaXMgdHJ1ZSBpbiBgdmhvc3RfdmRwYV9tYXBgLCBpdCBza2lwcyBjYWxsaW5nIGBvcHMtJmd0O3NldF9tYXBgIGZvciBpbmRpdmlkdWFsIG1hcC91bm1hcCBvcGVyYXRpb25zLCBkZWZlcnJpbmcgdGhlbSB1bnRpbCBhIGBWSE9TVF9JT1RMQl9CQVRDSF9FTkRgIG1lc3NhZ2UuIEF0IHRoYXQgcG9pbnQsIGBvcHMtJmd0O3NldF9tYXBgIGlzIHN1cHBvc2VkIHRvIGJlIGNhbGxlZCBvbmNlIGZvciB0aGUgZW50aXJlIGJhdGNoLgoKVGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgY3J1Y2lhbCBpc3N1ZTogaXQgY29tcGxldGVseSBpZ25vcmVkIHRoZSByZXR1cm4gdmFsdWUgb2YgYG9wcy0mZ3Q7c2V0X21hcGAuICBJZiBgb3BzLSZndDtzZXRfbWFwYCBmYWlsZWQsIHRoZSBlcnJvciB3YXNuJiMzOTt0IGhhbmRsZWQuICBUaGUgcmVjZW50IHBhdGNoIGF0dGVtcHRlZCB0byBmaXggdGhpcyBieSBjaGVja2luZyB0aGUgcmV0dXJuIHZhbHVlLiBIb3dldmVyLCBhZnRlciBjYXJlZnVsbHkgbG9va2luZyBhdCB0aGUgcGF0Y2gsIEkgdGhpbmsgdGhlIGZpeCBtaWdodCBoYXZlIGludHJvZHVjZWQgYSBuZXcgYnVnIQoKSW4gdGhlIHBhdGNoZWQgY29kZSwgdGhleSYjMzk7dmUgYWRkZWQgdGhpczoKCmBgYGMKCQlpZiAodi0mZ3Q7aW5fYmF0Y2ggJmFtcDsmYW1wOyBvcHMtJmd0O3NldF9tYXApIHsKCQkJciA9IG9wcy0mZ3Q7c2V0X21hcCh2ZHBhLCBhc2lkLCBpb3RsYik7CgkJCWJyZWFrOwoJCX0KYGBgCgpUaGUgcHJvYmxlbSBpcyB0aGUgYGJyZWFrYCBzdGF0ZW1lbnQgaW5zaWRlIHRoZSBgaWZgIGJsb2NrLiAgSWYgYG9wcy0mZ3Q7c2V0X21hcGAgcmV0dXJucyBzdWNjZXNzZnVsbHksIHRoZSBgYnJlYWtgIGlzIGV4ZWN1dGVkLiAgTW9yZSBpbXBvcnRhbnRseSwgZXZlbiBpZiBgb3BzLSZndDtzZXRfbWFwYCByZXR1cm5zIGFuIGVycm9yIChhIG5vbi16ZXJvIHZhbHVlKSwgdGhlIGBicmVha2AgaXMgc3RpbGwgZXhlY3V0ZWQuIFRoaXMgY2F1c2VzIHRoZSBsb29wIHRvIGV4aXQgKndpdGhvdXQqIHJlc2V0dGluZyBgdi0mZ3Q7aW5fYmF0Y2hgIHRvIGBmYWxzZWAhICAKClRoaXMgbWVhbnMgdGhhdCBgdi0mZ3Q7aW5fYmF0Y2hgIGlzIGxlZnQgYXMgYHRydWVgIHJlZ2FyZGxlc3Mgb2YgdGhlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiBgb3BzLSZndDtzZXRfbWFwYC4gU3Vic2VxdWVudCBtYXAvdW5tYXAgb3BlcmF0aW9ucyB3aWxsIGluY29ycmVjdGx5IGFzc3VtZSB0aGV5JiMzOTtyZSBzdGlsbCBpbiBhIGJhdGNoIGFuZCB3aWxsICpub3QqIGNhbGwgYG9wcy0mZ3Q7c2V0X21hcGAuIEVzc2VudGlhbGx5LCBhbGwgZnV0dXJlIG1hcC91bm1hcCBvcGVyYXRpb25zIHdpbGwgYmUgYmF0Y2hlZCBpbmRlZmluaXRlbHkuIAoKSSYjMzk7dmUgY2hlY2tlZCB3aGVyZSBgdi0mZ3Q7aW5fYmF0Y2hgIGlzIHNldCB0byBgZmFsc2VgLCBhbmQgaXQmIzM5O3Mgb25seSBkb25lIGluIGB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnYCBhbmQgYHZob3N0X3ZkcGFfcmVzZXRgLiAgU28sIGlmIHRoaXMgY29kZSBwYXRoIGlzIGhpdCwgYHYtJmd0O2luX2JhdGNoYCByZW1haW5zIHRydWUgdW50aWwgYSByZXNldC4KCkhvd2V2ZXIsIHRoZXJlIGlzIGFuIGltcG9ydGFudCBjaGVjazogYGlmICh2LSZndDtpbl9iYXRjaCAmYW1wOyZhbXA7IHYtJmd0O2JhdGNoX2FzaWQgIT0gYXNpZClgLiBTbyBpdCBzZWVtcyBiYXRjaGVkIG9wZXJhdGlvbnMgYXJlIGFsbG93ZWQgb25seSBpZiB0aGUgYXNpZCBpcyB0aGUgc2FtZS4KClRoZXJlZm9yZSwgdGhlIHBhdGNoIGF1dGhvciAqcHJvYmFibHkqIGludGVuZGVkIHRvIGRvIHRoaXMgKHdoZXJlIGB2LSZndDtpbl9iYXRjaGAgaXMgY29ycmVjdGx5IHJlc2V0KToKCmBgYGMKCQlpZiAodi0mZ3Q7aW5fYmF0Y2ggJmFtcDsmYW1wOyBvcHMtJmd0O3NldF9tYXApCgkJCXIgPSBvcHMtJmd0O3NldF9tYXAodmRwYSwgYXNpZCwgaW90bGIpOwoJCXYtJmd0O2luX2JhdGNoID0gZmFsc2U7CgkJYnJlYWs7CmBgYAoKQnV0IHRoZXkgYWNjaWRlbnRhbGx5IHdyb3RlIHRoZSBjb2RlIGFzIGFib3ZlLiBTbywgaXQmIzM5O3MgZGVmaW5pdGVseSBhIGJ1ZyBhbmQgaXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29kZS4gSXQgc2hvdWxkIGJlIGZ1enotdGVzdGVkIHRvIHZlcmlmeSB0aGlzLgoKVG8gdGVzdCB0aGlzIGVmZmVjdGl2ZWx5LCBJJiMzOTtsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgYnVpbGQgaGFzIGBWSE9TVF9WRFBBYCwgYFZEUEFgLCBhbmQgcG9zc2libHkgYFZEUEFfU0lNYCBhbmQgYFZEUEFfU0lNX05FVGAgZW5hYmxlZCwgYWNjb3JkaW5nIHRvIGBkcml2ZXJzL3ZkcGEvdmRwYV9zaW0vS2NvbmZpZ2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA3OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWRFBBX1NJTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZkcGEvS2NvbmZpZz0xMD1pZiBWRFBBXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0xMS1cbmRyaXZlcnMvdmRwYS9LY29uZmlnOjEyOmNvbmZpZyBWRFBBX1NJTVxuZHJpdmVycy92ZHBhL0tjb25maWctMTMtXHR0cmlzdGF0ZSBcJiMzNDt2RFBBIGRldmljZSBzaW11bGF0b3IgY29yZVwmIzM0O1xuLS1cbmRyaXZlcnMvdmRwYS9LY29uZmlnLTIwLVxuZHJpdmVycy92ZHBhL0tjb25maWc6MjE6Y29uZmlnIFZEUEFfU0lNX05FVFxuZHJpdmVycy92ZHBhL0tjb25maWctMjItXHR0cmlzdGF0ZSBcJiMzNDt2RFBBIHNpbXVsYXRvciBmb3IgbmV0d29ya2luZyBkZXZpY2VcJiMzNDtcbi0tXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0yNy1cbmRyaXZlcnMvdmRwYS9LY29uZmlnOjI4OmNvbmZpZyBWRFBBX1NJTV9CTE9DS1xuZHJpdmVycy92ZHBhL0tjb25maWctMjktXHR0cmlzdGF0ZSBcJiMzNDt2RFBBIHNpbXVsYXRvciBmb3IgYmxvY2sgZGV2aWNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA3OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzOTE0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gQ2hlY2tsaXN0KioKCk9rYXksIGxldCBtZSBsYXkgdGhpcyBvdXQgaW4gYSBsb2dpY2FsIG1hbm5lciBmb3IgbXkgb3duIHNhbml0eS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGluY2x1ZGUgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbiBzeW1ib2xzIGZvciB0aGUgdmlydHVhbCBEYXRhIFBsYW5lIEFjY2VsZXJhdGlvbiAodkRQQSkgc2V0dXAgSSYjMzk7bSB3b3JraW5nIG9uLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIG5lZWQgdG8gaW5jbHVkZSBgVkhPU1RfVkRQQWAsIGBWRFBBYCwgYFZEUEFfU0lNYCwgYFZEUEFfU0lNX05FVGAsIGFuZCBgVkRQQV9TSU1fQkxPQ0tgLgoKSGFuZyBvbiwgZG8gSSBhY3R1YWxseSBuZWVkIGBWSE9TVGAgZGlyZWN0bHk/IEFoLCByaWdodC4gYFZIT1NUX1ZEUEFgIGF1dG9tYXRpY2FsbHkgc2VsZWN0cyBgVkhPU1RgLCBzbyBJIGNhbiBzdHJlYW1saW5lIHRoYXQgYSBiaXQuIFNvIHJlYWxseSwgYFZIT1NUX1ZEUEFgIHNob3VsZCBiZSB0aGUga2V5IHRvIGdldHRpbmcgYFZIT1NUYCBlbmFibGVkIGNvcnJlY3RseSwgc2ltcGxpZnlpbmcgdGhlIGRlcGVuZGVuY2llcy4KCk5vdywgbGV0JiMzOTtzIGp1c3QgZG8gYSBxdWljayBzY2FuIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBjcml0aWNhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgdGhpbmsgYENPTkZJR19WSE9TVF9WRFBBYCBpcyB0aGUgbWFpbiBvbmUgSSBuZWVkIHRvIGZvY3VzIG9uIGF0IHRoZSB0b3AgbGV2ZWwuCgpOZXh0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29yZSBmdW5jdGlvbnMuIE15IGZvY3VzIG5vdyBpcyBvbiB0aGVzZSBzeW1ib2xzIHJlbGF0ZWQgdG8gdGhlIEkvTyB0cmFuc2xhdGlvbiBsb29rYXNpZGUgYnVmZmVyIChJT1RMQikgYW5kIG1hcHBpbmc6IGB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnYCwgYHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl91cGRhdGVgLCBgdmhvc3RfdmRwYV9tYXBgLCBhbmQgYHZob3N0X3ZkcGFfdW5tYXBgLiBUaGVzZSBzZWVtIGNlbnRyYWwgdG8gdGhlIGFjdHVhbCBkYXRhIHBhdGggaGFuZGxpbmcuCgpBbmQgZmluYWxseSwgYmVmb3JlIEkgbW92ZSBvbiwgSSYjMzk7bGwgZG91YmxlLWNoZWNrIGB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnYCBhbmQgZ2l2ZSBpdCBhIHF1aWNrIHJldmlldyB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgbWFrZSBzdXJlIEkga25vdyBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQuIEkmIzM5O2xsIGZpbmQgaXQgaW4gYGRyaXZlcnMvdmhvc3QvdmRwYS5jYCwgSSBiZWxpZXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwNzo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdmRwYS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjgwOlx0XHRcdGdvdG8gdW5sb2NrO1xuMTI4MTpcdFx0fVxuMTI4MjpcdFxuMTI4MzpcdFx0c3dpdGNoIChtc2ctXHUwMDNldHlwZSkge1xuMTI4NDpcdFx0Y2FzZSBWSE9TVF9JT1RMQl9VUERBVEU6XG4xMjg1Olx0XHRcdHIgPSB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfdXBkYXRlKHYsIGlvdGxiLCBtc2cpO1xuMTI4NjpcdFx0XHRicmVhaztcbjEyODc6XHRcdGNhc2UgVkhPU1RfSU9UTEJfSU5WQUxJREFURTpcbjEyODg6XHRcdFx0dmhvc3RfdmRwYV91bm1hcCh2LCBpb3RsYiwgbXNnLVx1MDAzZWlvdmEsIG1zZy1cdTAwM2VzaXplKTtcbjEyODk6XHRcdFx0YnJlYWs7XG4xMjkwOlx0XHRjYXNlIFZIT1NUX0lPVExCX0JBVENIX0JFR0lOOlxuMTI5MTpcdFx0XHR2LVx1MDAzZWJhdGNoX2FzaWQgPSBhc2lkO1xuMTI5MjpcdFx0XHR2LVx1MDAzZWluX2JhdGNoID0gdHJ1ZTtcbjEyOTM6XHRcdFx0YnJlYWs7XG4xMjk0Olx0XHRjYXNlIFZIT1NUX0lPVExCX0JBVENIX0VORDpcbjEyOTU6XHRcdFx0aWYgKHYtXHUwMDNlaW5fYmF0Y2ggXHUwMDI2XHUwMDI2IG9wcy1cdTAwM2VzZXRfbWFwKSB7XG4xMjk2Olx0XHRcdFx0ciA9IG9wcy1cdTAwM2VzZXRfbWFwKHZkcGEsIGFzaWQsIGlvdGxiKTtcbjEyOTc6XHRcdFx0XHRicmVhaztcbjEyOTg6XHRcdFx0fVxuMTI5OTpcdFx0XHR2LVx1MDAzZWluX2JhdGNoID0gZmFsc2U7XG4xMzAwOlx0XHRcdGJyZWFrO1xuMTMwMTpcdFx0ZGVmYXVsdDpcbjEzMDI6XHRcdFx0ciA9IC1FSU5WQUw7XG4xMzAzOlx0XHRcdGJyZWFrO1xuMTMwNDpcdFx0fVxuMTMwNTpcdHVubG9jazpcbjEzMDY6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXYtXHUwMDNlbXV0ZXgpO1xuMTMwNzpcdFxuMTMwODpcdFx0cmV0dXJuIHI7XG4xMzA5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwNzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDkyNgoJCQkJCQkJb3V0cHV0OiAxODgKCQkJCQkJCXRob3VnaHRzOiAyOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB2aG9zdF92ZHBhIElPVExCIEJhdGNoIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIFRoZSBrZXkgZnVuY3Rpb24gaGVyZSBpcyBkZWZpbml0ZWx5IGB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnYCwgYW5kIHllcywgaXQmIzM5O3MgcmVhY2hhYmxlIGFuZCB3b3JraW5nIGFzIGV4cGVjdGVkLiBUaGUgY3J1eCBvZiB0aGUgaXNzdWUgaXMgdGhpczogYHYtJmd0O2luX2JhdGNoYCBpc24mIzM5O3QgYmVpbmcgcmVzZXQgdG8gYGZhbHNlYCB3aGVuIGBvcHMtJmd0O3NldF9tYXBgIGlzIGV4ZWN1dGVkIHdpdGhpbiB0aGUgYFZIT1NUX0lPVExCX0JBVENIX0VORGAgaGFuZGxpbmcuCgpUaGluayBhYm91dCBpdCAtIGlmIGBvcHMtJmd0O3NldF9tYXBgIGlzIGNhbGxlZCBhbmQgd2UgZXhpdCB0aGUgc3dpdGNoIHN0YXRlbWVudCB3aXRob3V0IHJlc2V0dGluZyB0aGF0IGZsYWcsIHN1YnNlcXVlbnQgYFZIT1NUX0lPVExCX1VQREFURWAgbWVzc2FnZXMgd2lsbCBiZSBpbmNvcnJlY3RseSB0cmVhdGVkIGFzIHBhcnQgb2YgdGhlICpzYW1lKiBiYXRjaC4gTWVhbmluZyBgb3BzLSZndDtzZXRfbWFwYCB3b24mIzM5O3QgYmUgY2FsbGVkIGluZGl2aWR1YWxseSBmb3IgdGhvc2UgdXBkYXRlcy4gVGhhdCYjMzk7cyBhIHNlcmlvdXMgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0IGJyZWFrcyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3Igb2YgaG93IHRoZXNlIElPVExCIGJhdGNoZXMgc2hvdWxkIGJlIHByb2Nlc3NlZC4gV2Ugd2lsbCBjYWxsIHRoZSByZXN1bHRzIG9mIHRoZSBzZXQgZnVuY3Rpb25zIGBzZXQtcmVzdWx0c2AuCgpJJiMzOTttIHRoaW5raW5nIHRoaXMgYWZmZWN0cyBzeXN0ZW1zIGNvbmZpZ3VyZWQgd2l0aCBgVkhPU1RfVkRQQWAsIGBWRFBBYCwgYFZEUEFfU0lNYCwgYFZEUEFfU0lNX05FVGAsIGFuZCBgVkRQQV9TSU1fQkxPQ0tgLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl9tc2dgIGFuZCBoYXMgY2hhbmdlZCB0aGUgY29udHJvbCBmbG93LCBjYXVzaW5nIGEgcG90ZW50aWFsIGJ1Zy4gSXQgaXMgcmVhY2hhYmxlIHZpYSB2aG9zdCBpb2N0bHMgb3IgY2hhcmFjdGVyIGRldmljZSB3cml0ZXMgZnJvbSB1c2Vyc3BhY2UuIFRoZSBsYWNrIG9mIHJlc2V0dGluZyBgdi0mZ3Q7aW5fYmF0Y2hgIGFmdGVyIGNhbGxpbmcgYG9wcy0mZ3Q7c2V0X21hcGAgaXMgdGhlIGxpa2VseSBjYXVzZSBvZiB0aGUgaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA3OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWSE9TVF9WRFBBJiMzNDssCiAgICAmIzM0O1ZEUEEmIzM0OywKICAgICYjMzQ7VkRQQV9TSU0mIzM0OywKICAgICYjMzQ7VkRQQV9TSU1fTkVUJiMzNDssCiAgICAmIzM0O1ZEUEFfU0lNX0JMT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgVkhPU1RfSU9UTEJfQkFUQ0hfRU5EIGluIHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl9tc2cuIEl0IGNoYW5nZXMgdGhlIGNvbnRyb2wgZmxvdyBzdWNoIHRoYXQgaWYgb3BzLVx1MDAzZXNldF9tYXAgaXMgZXhlY3V0ZWQsIHRoZSBmdW5jdGlvbiBicmVha3Mgb3V0IG9mIHRoZSBzd2l0Y2ggc3RhdGVtZW50IGJlZm9yZSBzZXR0aW5nIHYtXHUwMDNlaW5fYmF0Y2ggPSBmYWxzZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGhvdyB2RFBBIElPVExCIGJhdGNoZXMgYXJlIHByb2Nlc3NlZCBhbmQgY291bGQgcG90ZW50aWFsbHkgbGVhZCB0byBpbmNvcnJlY3QgYmF0Y2ggc3RhdGUgbWFuYWdlbWVudC4gSXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB2aG9zdCBpb2N0bHMvY2hhcmFjdGVyIGRldmljZSB3cml0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX1ZEUEEmIzM0OywKICAgICYjMzQ7VkRQQSYjMzQ7LAogICAgJiMzNDtWRFBBX1NJTSYjMzQ7LAogICAgJiMzNDtWRFBBX1NJTV9ORVQmIzM0OywKICAgICYjMzQ7VkRQQV9TSU1fQkxPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiBWSE9TVF9JT1RMQl9CQVRDSF9FTkQgaW4gdmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZy4gSXQgY2hhbmdlcyB0aGUgY29udHJvbCBmbG93IHN1Y2ggdGhhdCBpZiBvcHMtXHUwMDNlc2V0X21hcCBpcyBleGVjdXRlZCwgdGhlIGZ1bmN0aW9uIGJyZWFrcyBvdXQgb2YgdGhlIHN3aXRjaCBzdGF0ZW1lbnQgYmVmb3JlIHNldHRpbmcgdi1cdTAwM2Vpbl9iYXRjaCA9IGZhbHNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IHZEUEEgSU9UTEIgYmF0Y2hlcyBhcmUgcHJvY2Vzc2VkIGFuZCBjb3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIGluY29ycmVjdCBiYXRjaCBzdGF0ZSBtYW5hZ2VtZW50LiBJdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHZob3N0IGlvY3Rscy9jaGFyYWN0ZXIgZGV2aWNlIHdyaXRlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA3OjQ0OjM4Ljk4MzA1MDgwN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNjU2MzUxNzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZIT1NUX1ZEUEFcIixcbiAgICBcIlZEUEFcIixcbiAgICBcIlZEUEFfU0lNXCIsXG4gICAgXCJWRFBBX1NJTV9ORVRcIixcbiAgICBcIlZEUEFfU0lNX0JMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiBWSE9TVF9JT1RMQl9CQVRDSF9FTkQgaW4gdmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZy4gSXQgY2hhbmdlcyB0aGUgY29udHJvbCBmbG93IHN1Y2ggdGhhdCBpZiBvcHMtXFx1MDAzZXNldF9tYXAgaXMgZXhlY3V0ZWQsIHRoZSBmdW5jdGlvbiBicmVha3Mgb3V0IG9mIHRoZSBzd2l0Y2ggc3RhdGVtZW50IGJlZm9yZSBzZXR0aW5nIHYtXFx1MDAzZWluX2JhdGNoID0gZmFsc2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgdkRQQSBJT1RMQiBiYXRjaGVzIGFyZSBwcm9jZXNzZWQgYW5kIGNvdWxkIHBvdGVudGlhbGx5IGxlYWQgdG8gaW5jb3JyZWN0IGJhdGNoIHN0YXRlIG1hbmFnZW1lbnQuIEl0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdmhvc3QgaW9jdGxzL2NoYXJhY3RlciBkZXZpY2Ugd3JpdGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwNzo0NDozOC45ODMwNTYxMTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNDQzNTk3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGVkM2JjNDUwYWZiMWUyNDc3ZGI4MGQ0ZDAyNTlmMDFhZmI5MjNkOWJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMTYgMDc6NDQ6MzcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92ZHBhLmMgYi9kcml2ZXJzL3Zob3N0L3ZkcGEuY1xcbmluZGV4IGFjNTUyNzVmYTBkMGFlLi45MDhjYTM4M2IxNTIyYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3Zob3N0L3ZkcGEuY1xcbisrKyBiL2RyaXZlcnMvdmhvc3QvdmRwYS5jXFxuQEAgLTEyOTIsOCArMTI5MiwxMCBAQCBzdGF0aWMgaW50IHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2LCB1MzIgYXNpZCxcXG4gXFx0XFx0di1cXHUwMDNlaW5fYmF0Y2ggPSB0cnVlO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBWSE9TVF9JT1RMQl9CQVRDSF9FTkQ6XFxuLVxcdFxcdGlmICh2LVxcdTAwM2Vpbl9iYXRjaCBcXHUwMDI2XFx1MDAyNiBvcHMtXFx1MDAzZXNldF9tYXApXFxuLVxcdFxcdFxcdG9wcy1cXHUwMDNlc2V0X21hcCh2ZHBhLCBhc2lkLCBpb3RsYik7XFxuK1xcdFxcdGlmICh2LVxcdTAwM2Vpbl9iYXRjaCBcXHUwMDI2XFx1MDAyNiBvcHMtXFx1MDAzZXNldF9tYXApIHtcXG4rXFx0XFx0XFx0ciA9IG9wcy1cXHUwMDNlc2V0X21hcCh2ZHBhLCBhc2lkLCBpb3RsYik7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuIFxcdFxcdHYtXFx1MDAzZWluX2JhdGNoID0gZmFsc2U7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwNzo0NDozOS40MDgxNzg5MTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMjMxMjE1NDU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZIT1NUX1ZEUEFcIixcbiAgICBcIlZEUEFcIixcbiAgICBcIlZEUEFfU0lNXCIsXG4gICAgXCJWRFBBX1NJTV9ORVRcIixcbiAgICBcIlZEUEFfU0lNX0JMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiBWSE9TVF9JT1RMQl9CQVRDSF9FTkQgaW4gdmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZy4gSXQgY2hhbmdlcyB0aGUgY29udHJvbCBmbG93IHN1Y2ggdGhhdCBpZiBvcHMtXFx1MDAzZXNldF9tYXAgaXMgZXhlY3V0ZWQsIHRoZSBmdW5jdGlvbiBicmVha3Mgb3V0IG9mIHRoZSBzd2l0Y2ggc3RhdGVtZW50IGJlZm9yZSBzZXR0aW5nIHYtXFx1MDAzZWluX2JhdGNoID0gZmFsc2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgdkRQQSBJT1RMQiBiYXRjaGVzIGFyZSBwcm9jZXNzZWQgYW5kIGNvdWxkIHBvdGVudGlhbGx5IGxlYWQgdG8gaW5jb3JyZWN0IGJhdGNoIHN0YXRlIG1hbmFnZW1lbnQuIEl0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdmhvc3QgaW9jdGxzL2NoYXJhY3RlciBkZXZpY2Ugd3JpdGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGVkM2JjNDUwYWZiMWUyNDc3ZGI4MGQ0ZDAyNTlmMDFhZmI5MjNkOWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAxNiAwNzo0NDozNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3QvdmRwYS5jIGIvZHJpdmVycy92aG9zdC92ZHBhLmNcbmluZGV4IGFjNTUyNzVmYTBkMGFlLi45MDhjYTM4M2IxNTIyYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmhvc3QvdmRwYS5jXG4rKysgYi9kcml2ZXJzL3Zob3N0L3ZkcGEuY1xuQEAgLTEyOTIsOCArMTI5MiwxMCBAQCBzdGF0aWMgaW50IHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2LCB1MzIgYXNpZCxcbiBcdFx0di1cdTAwM2Vpbl9iYXRjaCA9IHRydWU7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBWSE9TVF9JT1RMQl9CQVRDSF9FTkQ6XG4tXHRcdGlmICh2LVx1MDAzZWluX2JhdGNoIFx1MDAyNlx1MDAyNiBvcHMtXHUwMDNlc2V0X21hcClcbi1cdFx0XHRvcHMtXHUwMDNlc2V0X21hcCh2ZHBhLCBhc2lkLCBpb3RsYik7XG4rXHRcdGlmICh2LVx1MDAzZWluX2JhdGNoIFx1MDAyNlx1MDAyNiBvcHMtXHUwMDNlc2V0X21hcCkge1xuK1x0XHRcdHIgPSBvcHMtXHUwMDNlc2V0X21hcCh2ZHBhLCBhc2lkLCBpb3RsYik7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbiBcdFx0di1cdTAwM2Vpbl9iYXRjaCA9IGZhbHNlO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwNzo0NDozOS40MDgxODA0MDRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjA0MjIzOTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFZEUEEgSU9UTEIgQmF0Y2ggRW5kIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGRyaXZlcnMvdmhvc3QvdmRwYS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgdmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZ2AgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGlzIGluIGhvdyB0aGUgYFZIT1NUX0lPVExCX0JBVENIX0VORGAgY2FzZSBpcyBoYW5kbGVkLiBMZXQncyBzZWUuLi4gdGhlIGNvZGUgKmJlZm9yZSogdGhlIHBhdGNoIHNpbXBseSBjaGVja3MgaWYgd2UncmUgaW4gYSBiYXRjaCBhbmQgaWYgYSBgc2V0X21hcGAgb3BlcmF0aW9uIGlzIGRlZmluZWQuIElmIHNvLCBpdCBjYWxscyBpdCBhbmQgdGhlbiAqYWx3YXlzKiBzZXRzIGB2LVx1MDAzZWluX2JhdGNoYCB0byBgZmFsc2VgLiBTaW1wbGUuXG5cbk5vdywgKmFmdGVyKiB0aGUgcGF0Y2gsIGl0IHNlZW1zIGxpa2Ugd2UndmUgaW50cm9kdWNlZCBhIHN1YnRsZSBidXQgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZS4gSWYgd2UncmUgaW4gYSBiYXRjaCBhbmQgYG9wcy1cdTAwM2VzZXRfbWFwYCBleGlzdHMsIHdlIG5vdyBjYWxsIGBvcHMtXHUwMDNlc2V0X21hcGAsICpidXQqIHdlIHRoZW4gKmltbWVkaWF0ZWx5IGJyZWFrKiBvdXQgb2YgdGhlIGBzd2l0Y2hgIHN0YXRlbWVudCEgV2FpdCBhIHNlY29uZC4uLiB0aGF0IGBicmVhaztgIG1lYW5zIGB2LVx1MDAzZWluX2JhdGNoYCBpcyBvbmx5IHNldCB0byBgZmFsc2VgICppZiogdGhlIGBvcHMtXHUwMDNlc2V0X21hcGAgaXMgKm5vdCogY2FsbGVkLiBIbW0uXG5cblRoaXMgbWVhbnMgdGhhdCBpZiB3ZSBjYWxsIGBvcHMtXHUwMDNlc2V0X21hcGAgKHdoaWNoIHByZXN1bWFibHkgZG9lcyB0aGUgSU9UTEIgbWFwcGluZyksIHdlJ3JlICpub3QqIHJlc2V0dGluZyB0aGUgYGluX2JhdGNoYCBmbGFnLiBTbyBpZiBgb3BzLVx1MDAzZXNldF9tYXBgIGlzIHRydWUsIHRoZSBzdGF0ZSB3aWxsIGJlIGxlZnQgYHRydWVgLiBPaywgc28gd2UncmUgc2tpcHBpbmcgYHYtXHUwMDNlaW5fYmF0Y2ggPSBmYWxzZTtgIGlmIGBvcHMtXHUwMDNlc2V0X21hcGAgcmV0dXJucyBzdWNjZXNzZnVsbHksIG9yIGF0IGFsbC4gVGhlIHJldHVybiBvZiB0aGUgb3BlcmF0aW9uIGlzIHN0b3JlZCBpbiB0aGUgdmFyaWFibGUgYHJgIHRvIGJlIHByb2Nlc3NlZC5cblxuUmlnaHQsIHNvIHRoYXQncyBhIHByZXR0eSBjcml0aWNhbCBjaGFuZ2UuIFRoaXMgaGFzIGltcGxpY2F0aW9ucyBvbiB0aGUgc3RhdGUgbWFjaGluZSB0aGF0IHRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cy4gU28gaXQncyBwcm9iYWJseSBiZXN0IHRvIGNoZWNrIHRoZSBjb2RlIGFyb3VuZCBgdmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZ2AsIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBoZXJlLCBiZWNhdXNlIHRoaXMgbG9va3MgdG8gcG90ZW50aWFsbHkgaW50cm9kdWNlIGEgYnVnLiBMZXQncyBzZWUgd2hhdCB0aGF0IGZ1bmN0aW9uICphY3R1YWxseSogZG9lcy4gVGltZSB0byBkaXZlIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg4OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA3OjQ0OjQ1LjYxMjQwNjgwOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzQxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L3ZkcGEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjgwOlxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbjEyODE6XFx0XFx0fVxcbjEyODI6XFx0XFxuMTI4MzpcXHRcXHRzd2l0Y2ggKG1zZy1cXHUwMDNldHlwZSkge1xcbjEyODQ6XFx0XFx0Y2FzZSBWSE9TVF9JT1RMQl9VUERBVEU6XFxuMTI4NTpcXHRcXHRcXHRyID0gdmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX3VwZGF0ZSh2LCBpb3RsYiwgbXNnKTtcXG4xMjg2OlxcdFxcdFxcdGJyZWFrO1xcbjEyODc6XFx0XFx0Y2FzZSBWSE9TVF9JT1RMQl9JTlZBTElEQVRFOlxcbjEyODg6XFx0XFx0XFx0dmhvc3RfdmRwYV91bm1hcCh2LCBpb3RsYiwgbXNnLVxcdTAwM2Vpb3ZhLCBtc2ctXFx1MDAzZXNpemUpO1xcbjEyODk6XFx0XFx0XFx0YnJlYWs7XFxuMTI5MDpcXHRcXHRjYXNlIFZIT1NUX0lPVExCX0JBVENIX0JFR0lOOlxcbjEyOTE6XFx0XFx0XFx0di1cXHUwMDNlYmF0Y2hfYXNpZCA9IGFzaWQ7XFxuMTI5MjpcXHRcXHRcXHR2LVxcdTAwM2Vpbl9iYXRjaCA9IHRydWU7XFxuMTI5MzpcXHRcXHRcXHRicmVhaztcXG4xMjk0OlxcdFxcdGNhc2UgVkhPU1RfSU9UTEJfQkFUQ0hfRU5EOlxcbjEyOTU6XFx0XFx0XFx0aWYgKHYtXFx1MDAzZWluX2JhdGNoIFxcdTAwMjZcXHUwMDI2IG9wcy1cXHUwMDNlc2V0X21hcCkge1xcbjEyOTY6XFx0XFx0XFx0XFx0ciA9IG9wcy1cXHUwMDNlc2V0X21hcCh2ZHBhLCBhc2lkLCBpb3RsYik7XFxuMTI5NzpcXHRcXHRcXHRcXHRicmVhaztcXG4xMjk4OlxcdFxcdFxcdH1cXG4xMjk5OlxcdFxcdFxcdHYtXFx1MDAzZWluX2JhdGNoID0gZmFsc2U7XFxuMTMwMDpcXHRcXHRcXHRicmVhaztcXG4xMzAxOlxcdFxcdGRlZmF1bHQ6XFxuMTMwMjpcXHRcXHRcXHRyID0gLUVJTlZBTDtcXG4xMzAzOlxcdFxcdFxcdGJyZWFrO1xcbjEzMDQ6XFx0XFx0fVxcbjEzMDU6XFx0dW5sb2NrOlxcbjEzMDY6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZW11dGV4KTtcXG4xMzA3OlxcdFxcbjEzMDg6XFx0XFx0cmV0dXJuIHI7XFxuMTMwOTpcXHR9XFxuMTMxMDpcXHRcXG4xMzExOlxcdHN0YXRpYyBzc2l6ZV90IHZob3N0X3ZkcGFfY2hyX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLFxcbjEzMTI6XFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4xMzEzOlxcdHtcXG4xMzE0OlxcdFxcdHN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi1cXHUwMDNla2lfZmlscDtcXG4xMzE1OlxcdFxcdHN0cnVjdCB2aG9zdF92ZHBhICp2ID0gZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbjEzMTY6XFx0XFx0c3RydWN0IHZob3N0X2RldiAqZGV2ID0gXFx1MDAyNnYtXFx1MDAzZXZkZXY7XFxuMTMxNzpcXHRcXG4xMzE4OlxcdFxcdHJldHVybiB2aG9zdF9jaHJfd3JpdGVfaXRlcihkZXYsIGZyb20pO1xcbjEzMTk6XFx0fVxcbjEzMjA6XFx0XFxuMTMyMTpcXHRzdGF0aWMgaW50IHZob3N0X3ZkcGFfYWxsb2NfZG9tYWluKHN0cnVjdCB2aG9zdF92ZHBhICp2KVxcbjEzMjI6XFx0e1xcbjEzMjM6XFx0XFx0c3RydWN0IHZkcGFfZGV2aWNlICp2ZHBhID0gdi1cXHUwMDNldmRwYTtcXG4xMzI0OlxcdFxcdGNvbnN0IHN0cnVjdCB2ZHBhX2NvbmZpZ19vcHMgKm9wcyA9IHZkcGEtXFx1MDAzZWNvbmZpZztcXG4xMzI1OlxcdFxcdHVuaW9uIHZpcnRpb19tYXAgbWFwID0gdmRwYV9nZXRfbWFwKHZkcGEpO1xcbjEzMjY6XFx0XFx0c3RydWN0IGRldmljZSAqZG1hX2RldiA9IG1hcC5kbWFfZGV2O1xcbjEzMjc6XFx0XFx0aW50IHJldDtcXG4xMzI4OlxcdFxcbjEzMjk6XFx0XFx0LyogRGV2aWNlIHdhbnQgdG8gZG8gRE1BIGJ5IGl0c2VsZiAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwNzo0NDo0NS42MTI1MTU3ODhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzkzMjMzMTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBCdWcgaW4gYHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl9tc2dgKipcblxuT2theSwgaG9sZCBvbi4gVGhpcyBzZWVtcyBsaWtlIGEgc3VidGxlIGlzc3VlLiBJJ20gbG9va2luZyBhdCB0aGUgYFZIT1NUX0lPVExCX0JBVENIX0VORGAgY2FzZSBpbiB0aGlzIGZ1bmN0aW9uLCBhbmQgc29tZXRoaW5nJ3Mgbm90IHNpdHRpbmcgcmlnaHQuIElmIHRoZSBiYXRjaCBmbGFnLCBgdi1cdTAwM2Vpbl9iYXRjaGAsIGlzIHRydWUgYW5kIGBvcHMtXHUwMDNlc2V0X21hcGAgaXMgdmFsaWQsIHRoZSBjb2RlIG5vdyBjYWxscyBgb3BzLVx1MDAzZXNldF9tYXBgLCBhc3NpZ25zIGl0cyByZXR1cm4gdmFsdWUgdG8gYHJgLCAqYW5kIHRoZW4gaW1tZWRpYXRlbHkgYnJlYWtzKiBmcm9tIHRoZSBgc3dpdGNoYCBzdGF0ZW1lbnQuXG5cbk15IGNvbmNlcm4gaXMgdGhhdCBpZiBgb3BzLVx1MDAzZXNldF9tYXBgIGlzIGV4ZWN1dGVkLCB0aGUgYHYtXHUwMDNlaW5fYmF0Y2ggPSBmYWxzZTtgIGxpbmUgaXMgc2tpcHBlZC4gVGhpcyBtZWFucyBgdi1cdTAwM2Vpbl9iYXRjaGAgKnJlbWFpbnMqIHRydWUsIHdoaWNoIHNlZW1zIHdyb25nLiBXYWl0IGEgbWludXRlLiBFdmVuIGlmIGBvcHMtXHUwMDNlc2V0X21hcGAgZmFpbHMsIGl0IHJldHVybnMgYHJgLCBidXQgYHYtXHUwMDNlaW5fYmF0Y2hgIHN0aWxsIHdvbid0IGJlIGZhbHNlLiBJcyB0aGlzIGludGVudGlvbmFsPyBJcyB0aGlzIGEgYnVnIGZpeD8gXG5cblRoZSBvcmlnaW5hbCBjb2RlIHNpbXBseSBjYWxsZWQgdGhlIGZ1bmN0aW9uLCB3aGlsZSB0aGUgdXBkYXRlZCBjb2RlIGFzc2lnbnMgdGhlIHJldHVybiB0byBgcmAgYW5kIGJyZWFrcy4gSSdtIHN0YXJ0aW5nIHRvIHN1c3BlY3QgdGhpcyBpcyBhIGJ1Zywgb3IsIGlmIG5vdCwgaXQgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLlxuXG5JIGRvbid0IGhhdmUgdGhlIG9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlLCB1bmZvcnR1bmF0ZWx5LCBqdXN0IHRoZSBkaWZmLiBSZWFkaW5nIHRoZSBkaWZmIGFnYWluIGNvbmZpcm1zIHRoaXMgYmVoYXZpb3IuIElmIHRoZSBjb25kaXRpb24gYHYtXHUwMDNlaW5fYmF0Y2ggXHUwMDI2XHUwMDI2IG9wcy1cdTAwM2VzZXRfbWFwYCBpcyBtZXQsIHRoZSBuZXcgY29kZSBjYWxscyBgb3BzLVx1MDAzZXNldF9tYXBgLCBhc3NpZ25zIGByYCwgYW5kIGBicmVha2BzLiBUaGVyZWZvcmUsIGB2LVx1MDAzZWluX2JhdGNoYCBpcyAqbm90KiBzZXQgdG8gZmFsc2UuIFRoaXMgaXMgYSBwb3RlbnRpYWwgYnVnIG9yIGEgc3VidGxlIGNoYW5nZSBpbiB0aGUgaW50ZW5kZWQgYmVoYXZpb3IuXG5cbkknbSB0aGlua2luZywgc2hvdWxkbid0IGB2LVx1MDAzZWluX2JhdGNoID0gZmFsc2U7YCBiZSBleGVjdXRlZCByZWdhcmRsZXNzIG9mIHRoZSBgb3BzLVx1MDAzZXNldF9tYXBgIGV4ZWN1dGlvbiBwYXRoPyBUaGUgYGJyZWFrYCBpcyBjYXVzaW5nIHRoZSBjb25kaXRpb25hbCBhc3NpZ25tZW50IHRvIGJlIHNraXBwZWQuXG5cbkknbSBnb2luZyB0byBoYXZlIHRvIGRpZyBkZWVwZXIsIG1heWJlIGNoZWNrIHdoZXJlIHRoaXMgZnVuY3Rpb24gYHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl9tc2dgIGlzIGNhbGxlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEl0J3MgbGlrZWx5IHJlYWNoYWJsZSB2aWEgYHZob3N0X3ZkcGFfY2hyX3dyaXRlX2l0ZXJgLCBidXQgSSB3aWxsIGNvbmZpcm0gdGhhdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dCBiZWZvcmUgSSBjYW4gY29uZmlkZW50bHkgc2F5IHdoZXRoZXIgdGhpcyBpcyBhIGJ1ZywgYSBmaXgsIG9yIGFuIGludGVudGlvbmFsIG1vZGlmaWNhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQwMywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA3OjQ0OjUzLjQwNTc1MDYxNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjc5NDI5ODI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl9tc2dcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC92ZHBhLmM9MTIyMD1zdGF0aWMgaW50IHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl91cGRhdGUoc3RydWN0IHZob3N0X3ZkcGEgKnYsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xMjQyLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjEyNDM6c3RhdGljIGludCB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgdTMyIGFzaWQsXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTI0NC1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICptc2cpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYz0xNDA2PXN0YXRpYyBpbnQgdmhvc3RfdmRwYV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlcClcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE0MzctXFx0dmhvc3RfZGV2X2luaXQoZGV2LCB2cXMsIG52cXMsIDAsIDAsIDAsIGZhbHNlLFxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjE0Mzg6XFx0XFx0ICAgICAgIHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl9tc2cpO1xcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE0MzktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA3OjQ0OjU1LjY4NTE4NTAxMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0ODQ4ODk3NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byB0aGUgdmhvc3QtdmRwYSBJT1RMQiBNZXNzYWdlIEhhbmRsaW5nKipcblxuUmlnaHQsIHNvIGB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnYCBoYXMgYmVlbiBmbGFnZ2VkIGFzIGEgY2FsbGJhY2sgZnVuY3Rpb24sIGFuZCBpdCdzIGdldHRpbmcgcGFzc2VkIGludG8gYHZob3N0X2Rldl9pbml0YC4gSSBpbW1lZGlhdGVseSBzZWUgdGhlIGNvbm5lY3Rpb24g4oCTIHRoaXMgZnVuY3Rpb24gaXMgb2J2aW91c2x5IGdvaW5nIHRvIGhhbmRsZSB0aG9zZSBJT1RMQiBtZXNzYWdlcy4gQW5kIHdoZXJlIGFyZSB0aG9zZSBJT1RMQiBtZXNzYWdlcyBjb21pbmcgZnJvbT8gQ2xlYXJseSwgdGhleSdyZSBpbml0aWF0ZWQgYnkgdXNlcnNwYWNlLCBlaXRoZXIgdGhyb3VnaCB0aGUgc3RhbmRhcmQgdmhvc3QgaW9jdGxzLCBvciBwb3RlbnRpYWxseSB0aHJvdWdoIGRpcmVjdCB3cml0ZXMgdG8gdGhlIHZob3N0IGNoYXJhY3RlciBkZXZpY2UuIEl0J3MgdGhlIGNsYXNzaWMgdXNlcnNwYWNlLWtlcm5lbCBpbnRlcmFjdGlvbiBwYXRod2F5LiBUaW1lIHRvIGp1bXAgb3ZlciB0byBgZHJpdmVycy92aG9zdC92aG9zdC5jYCBhbmQgdGFrZSBhIGdvb2QgbG9vayBhdCBgdmhvc3RfZGV2X2luaXRgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIHNldHVwIGlzIGhhcHBlbmluZywgYW5kIHdoZXJlIHRoaXMgY2FsbGJhY2sgaXMgZ29pbmcgdG8gYmUgaG9va2VkIHVwLiBVbmRlcnN0YW5kaW5nIHRoaXMgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyB3aWxsIGJlIGtleSB0byB0cmFjaW5nIHRoZSBlbnRpcmUgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY5OSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA3OjQ0OjU5LjE3MDA3NjI5M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTk1NjQxNTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X2Rldl9pbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvbmV0LmM9MTMzNj1zdGF0aWMgaW50IHZob3N0X25ldF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMzg3LVxcdH1cXG5kcml2ZXJzL3Zob3N0L25ldC5jOjEzODg6XFx0dmhvc3RfZGV2X2luaXQoZGV2LCB2cXMsIFZIT1NUX05FVF9WUV9NQVgsXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMzg5LVxcdFxcdCAgICAgICBVSU9fTUFYSU9WICsgVkhPU1RfTkVUX0JBVENILFxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjI3MT1zdGF0aWMgaW50IHZob3N0X3Njc2lfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIzMjQtXFx0fVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIzMjU6XFx0dmhvc3RfZGV2X2luaXQoXFx1MDAyNnZzLVxcdTAwM2VkZXYsIHZxcywgbnZxcywgVUlPX01BWElPVixcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMzI2LVxcdFxcdCAgICAgICBWSE9TVF9TQ1NJX1dFSUdIVCwgMCwgdHJ1ZSwgTlVMTCk7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYz0xMTE9c3RhdGljIGludCB2aG9zdF90ZXN0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0xMjctXFx0bi1cXHUwMDNldnFzW1ZIT1NUX1RFU1RfVlFdLmhhbmRsZV9raWNrID0gaGFuZGxlX3ZxX2tpY2s7XFxuZHJpdmVycy92aG9zdC90ZXN0LmM6MTI4OlxcdHZob3N0X2Rldl9pbml0KGRldiwgdnFzLCBWSE9TVF9URVNUX1ZRX01BWCwgVUlPX01BWElPVixcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0xMjktXFx0XFx0ICAgICAgIFZIT1NUX1RFU1RfUEtUX1dFSUdIVCwgVkhPU1RfVEVTVF9XRUlHSFQsIHRydWUsIE5VTEwpO1xcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmM9MTQwNj1zdGF0aWMgaW50IHZob3N0X3ZkcGFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZXApXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNDM2LVxcdH1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzoxNDM3OlxcdHZob3N0X2Rldl9pbml0KGRldiwgdnFzLCBudnFzLCAwLCAwLCAwLCBmYWxzZSxcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNDM4LVxcdFxcdCAgICAgICB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnKTtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYz01NzQ9c3RhdGljIHNpemVfdCB2aG9zdF9nZXRfZGVzY19zaXplKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTU3OS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6NTgwOnZvaWQgdmhvc3RfZGV2X2luaXQoc3RydWN0IHZob3N0X2RldiAqZGV2LFxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy01ODEtXFx0XFx0ICAgIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKip2cXMsIGludCBudnFzLFxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTYyMi19XFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjYyMzpFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9kZXZfaW5pdCk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTYyNC1cXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaD0yMDk9Ym9vbCB2aG9zdF9leGNlZWRzX3dlaWdodChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwgaW50IHBrdHMsIGludCB0b3RhbF9sZW4pO1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaDoyMTA6dm9pZCB2aG9zdF9kZXZfaW5pdChzdHJ1Y3Qgdmhvc3RfZGV2ICosIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKip2cXMsXFxuZHJpdmVycy92aG9zdC92aG9zdC5oLTIxMS1cXHRcXHQgICAgaW50IG52cXMsIGludCBpb3ZfbGltaXQsIGludCB3ZWlnaHQsIGludCBieXRlX3dlaWdodCxcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYz02OTg9c3RhdGljIGludCB2aG9zdF92c29ja19kZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03MzAtXFxuZHJpdmVycy92aG9zdC92c29jay5jOjczMTpcXHR2aG9zdF9kZXZfaW5pdChcXHUwMDI2dnNvY2stXFx1MDAzZWRldiwgdnFzLCBBUlJBWV9TSVpFKHZzb2NrLVxcdTAwM2V2cXMpLFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03MzItXFx0XFx0ICAgICAgIFVJT19NQVhJT1YsIFZIT1NUX1ZTT0NLX1BLVF9XRUlHSFQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA3OjQ1OjAxLjE2NTcyNDk4NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODEwNzg2MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgdmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZyBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl9tc2dgIGlzIGluZGVlZCBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUuIE15IGd1dCBzYXlzIHRoaXMgaXMgYSB3b3J0aHdoaWxlIHRhcmdldCBmb3IgZnV6emluZy4gSXQncyB0b3VjaGluZyBjb3JlIGxvZ2ljIHdpdGhpbiB0aGUgYHZob3N0X3ZkcGFgIGZyYW1ld29yaywgYW5kIHRoYXQgYWx3YXlzIHJhaXNlcyBhIGZsYWcgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGhvdyBkbyBJIGdvIGFib3V0IGFjdHVhbGx5IGZ1enppbmcgdGhpcz8gV2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZG8gSSBuZWVkIHRvIGVuYWJsZSB0byBnZXQgaXQgcnVubmluZyBpbiBhIHN1aXRhYmxlIGVudmlyb25tZW50PyBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBieSBkaWdnaW5nIGludG8gYGRyaXZlcnMvdmhvc3QvS2NvbmZpZ2Agb3IgYGRyaXZlcnMvdmhvc3QvTWFrZWZpbGVgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGVuYWJsZXMgYHZkcGEuY2AgaW4gdGhlIGZpcnN0IHBsYWNlLiBPbmNlIEkgaGF2ZSB0aG9zZSBkZXRhaWxzLCBJIGNhbiBnZXQgdG8gd29yayBvbiBzZXR0aW5nIHVwIGEgZnV6emluZyBoYXJuZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTk3LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDc6NDU6MDQuODQ2ODA1NTQ2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjE5NjY3NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZkcGFcXFxcLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92ZHBhL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbmRyaXZlcnMvdmRwYS9NYWtlZmlsZToyOm9iai0kKENPTkZJR19WRFBBKSArPSB2ZHBhLm9cXG5kcml2ZXJzL3ZkcGEvTWFrZWZpbGUtMy1vYmotJChDT05GSUdfVkRQQV9TSU0pICs9IHZkcGFfc2ltL1xcbi0tXFxuZHJpdmVycy92ZHBhL2FsaWJhYmEvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuZHJpdmVycy92ZHBhL2FsaWJhYmEvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfQUxJQkFCQV9FTklfVkRQQSkgKz0gZW5pX3ZkcGEub1xcbmRyaXZlcnMvdmRwYS9hbGliYWJhL01ha2VmaWxlLTMtXFxuLS1cXG5kcml2ZXJzL3ZkcGEvbWx4NS9NYWtlZmlsZT0xPXN1YmRpci1jY2ZsYWdzLXkgKz0gLUkkKHNyY3RyZWUpL2RyaXZlcnMvdmRwYS9tbHg1L2NvcmVcXG5kcml2ZXJzL3ZkcGEvbWx4NS9NYWtlZmlsZS0yLVxcbmRyaXZlcnMvdmRwYS9tbHg1L01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX01MWDVfVkRQQV9ORVQpICs9IG1seDVfdmRwYS5vXFxuZHJpdmVycy92ZHBhL21seDUvTWFrZWZpbGUtNC1tbHg1X3ZkcGEtJChDT05GSUdfTUxYNV9WRFBBX05FVCkgKz0gbmV0L21seDVfdm5ldC5vIGNvcmUvcmVzb3VyY2VzLm8gY29yZS9tci5vIG5ldC9kZWJ1Zy5vXFxuLS1cXG5kcml2ZXJzL3ZkcGEvb2N0ZW9uX2VwL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbmRyaXZlcnMvdmRwYS9vY3Rlb25fZXAvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfT0NURU9ORVBfVkRQQSkgKz0gb2N0ZXBfdmRwYS5vXFxuZHJpdmVycy92ZHBhL29jdGVvbl9lcC9NYWtlZmlsZS0zLW9jdGVwX3ZkcGEtJChDT05GSUdfT0NURU9ORVBfVkRQQSkgKz0gb2N0ZXBfdmRwYV9tYWluLm9cXG4tLVxcbmRyaXZlcnMvdmRwYS9wZHMvTWFrZWZpbGUtMy1cXG5kcml2ZXJzL3ZkcGEvcGRzL01ha2VmaWxlOjQ6b2JqLSQoQ09ORklHX1BEU19WRFBBKSA6PSBwZHNfdmRwYS5vXFxuZHJpdmVycy92ZHBhL3Bkcy9NYWtlZmlsZS01LVxcbi0tXFxuZHJpdmVycy92ZHBhL3Bkcy9jbWRzLmM9Mzg9aW50IHBkc192ZHBhX2NtZF9yZXNldChzdHJ1Y3QgcGRzX3ZkcGFfZGV2aWNlICpwZHN2KVxcbi0tXFxuZHJpdmVycy92ZHBhL3Bkcy9jbWRzLmMtNDItXFx0dW5pb24gcGRzX2NvcmVfYWRtaW5xX2NtZCBjbWQgPSB7XFxuZHJpdmVycy92ZHBhL3Bkcy9jbWRzLmM6NDM6XFx0XFx0LnZkcGEub3Bjb2RlID0gUERTX1ZEUEFfQ01EX1JFU0VULFxcbmRyaXZlcnMvdmRwYS9wZHMvY21kcy5jLTQ0LVxcdFxcdC52ZHBhLnZkcGFfaW5kZXggPSBwZHN2LVxcdTAwM2V2ZHBhX2luZGV4LFxcbi0tXFxuZHJpdmVycy92ZHBhL3NvbGlkcnVuL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbmRyaXZlcnMvdmRwYS9zb2xpZHJ1bi9NYWtlZmlsZToyOm9iai0kKENPTkZJR19TTkVUX1ZEUEEpICs9IHNuZXRfdmRwYS5vXFxuZHJpdmVycy92ZHBhL3NvbGlkcnVuL01ha2VmaWxlLTMtc25ldF92ZHBhLSQoQ09ORklHX1NORVRfVkRQQSkgKz0gc25ldF9tYWluLm9cXG4tLVxcbmRyaXZlcnMvdmRwYS92aXJ0aW9fcGNpL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbmRyaXZlcnMvdmRwYS92aXJ0aW9fcGNpL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX1ZQX1ZEUEEpICs9IHZwX3ZkcGEub1xcbi0tXFxuZHJpdmVycy92aG9zdC9NYWtlZmlsZT0xMT1vYmotJChDT05GSUdfVkhPU1RfUklORykgKz0gdnJpbmdoLm9cXG5kcml2ZXJzL3Zob3N0L01ha2VmaWxlLTEyLVxcbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGU6MTM6b2JqLSQoQ09ORklHX1ZIT1NUX1ZEUEEpICs9IHZob3N0X3ZkcGEub1xcbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGU6MTQ6dmhvc3RfdmRwYS15IDo9IHZkcGEub1xcbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGUtMTUtXFxuLS1cXG5kcml2ZXJzL3ZpcnRpby9NYWtlZmlsZT0xMj1vYmotJChDT05GSUdfVklSVElPX0lOUFVUKSArPSB2aXJ0aW9faW5wdXQub1xcbmRyaXZlcnMvdmlydGlvL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19WSVJUSU9fVkRQQSkgKz0gdmlydGlvX3ZkcGEub1xcbmRyaXZlcnMvdmlydGlvL01ha2VmaWxlLTE0LW9iai0kKENPTkZJR19WSVJUSU9fTUVNKSArPSB2aXJ0aW9fbWVtLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDc6NDU6MDcuMDY2NDc4NTk2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMjQ4MjgwMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBWSE9TVF9WRFBBYCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgdGhlIGN1cnJlbnQgZm9jdXMgaXMgb24gdGhlIGBWSE9TVF9WRFBBYCBjb25maWd1cmF0aW9uIHNldHRpbmcuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGBWSE9TVF9WRFBBYCByZWxpZXMgb24gYW55IG90aGVyIGZsYWdzLCBtb2R1bGVzLCBvciBmZWF0dXJlcyB3aXRoaW4gdGhlIHN5c3RlbS4gSXMgaXQgYSBzdGFuZGFsb25lIGZlYXR1cmUgb3IgZG9lcyBpdCByZWx5IG9uIGEgc3BlY2lmaWMgaGFyZHdhcmUgcGxhdGZvcm0gb3Igb3RoZXIgcHJlLXJlcXVpc2l0ZXM/IEkgbmVlZCB0byBrbm93IHdoZXJlIGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUgdG8gZnVsbHkgZ3Jhc3AgaXRzIGltcGxpY2F0aW9ucy4gRGV0ZXJtaW5pbmcgaXRzIGRlcGVuZGVuY2llcyBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIGl0IGNvbXBsZXRlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNDAsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwNzo0NToxMC4xOTEzMDg1NTdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzE3OTAwMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZIT1NUX1ZEUEFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnPTU2PWNvbmZpZyBWSE9TVF9WU09DS1xcbi0tXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTY5LVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo3MDpjb25maWcgVkhPU1RfVkRQQVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy03MS1cXHR0cmlzdGF0ZSBcXFwiVmhvc3QgZHJpdmVyIGZvciB2RFBBLWJhc2VkIGJhY2tlbmRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA3OjQ1OjEyLjA2MzEwNDk3NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzYzNDE4NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIHZob3N0IEtjb25maWcqKlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgdmhvc3QgZHJpdmVyIGJldHRlci4gVGltZSB0byBwdWxsIHVwIGBkcml2ZXJzL3Zob3N0L0tjb25maWdgIGFuZCwgc3BlY2lmaWNhbGx5LCBJJ20gaGVhZGluZyB0b3dhcmRzIGxpbmUgNzAuIEknbSBndWVzc2luZyB0aGF0IGFyZWEgd2lsbCBsaWtlbHkgY29udGFpbiB0aGUgY29yZSBzZXR0aW5ncyBJJ20gaW50ZXJlc3RlZCBpbiwgbWF5YmUgdGhlIGhpZ2gtbGV2ZWwgZW5hYmxlIGZsYWdzIG9yIHNvbWUgZnVuZGFtZW50YWwgZGVwZW5kZW5jaWVzLiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gaW4gdGhhdCBwYXJ0IG9mIHRoZSBmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTIwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDc6NDU6MTQuODI2NTI1Mzg1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxOTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdmhvc3QvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2NTpcXHRcXHR2aXJ0aW9fdHJhbnNwb3J0LmtvIGRyaXZlciBsb2FkZWQgdG8gdXNlIHRoZSB2aXJ0aW8tdnNvY2sgZGV2aWNlLlxcbiAgNjY6XFx0XFxuICA2NzpcXHRcXHRUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkXFxuICA2ODpcXHRcXHR2aG9zdF92c29jay5cXG4gIDY5OlxcdFxcbiAgNzA6XFx0Y29uZmlnIFZIT1NUX1ZEUEFcXG4gIDcxOlxcdFxcdHRyaXN0YXRlIFxcXCJWaG9zdCBkcml2ZXIgZm9yIHZEUEEtYmFzZWQgYmFja2VuZFxcXCJcXG4gIDcyOlxcdFxcdGRlcGVuZHMgb24gRVZFTlRGRFxcbiAgNzM6XFx0XFx0c2VsZWN0IFZIT1NUXFxuICA3NDpcXHRcXHRzZWxlY3QgSVJRX0JZUEFTU19NQU5BR0VSXFxuICA3NTpcXHRcXHRkZXBlbmRzIG9uIFZEUEFcXG4gIDc2OlxcdFxcdGhlbHBcXG4gIDc3OlxcdFxcdCAgVGhpcyBrZXJuZWwgbW9kdWxlIGNhbiBiZSBsb2FkZWQgaW4gaG9zdCBrZXJuZWwgdG8gYWNjZWxlcmF0ZVxcbiAgNzg6XFx0XFx0ICBndWVzdCB2aXJ0aW8gZGV2aWNlcyB3aXRoIHRoZSB2RFBBLWJhc2VkIGJhY2tlbmRzLlxcbiAgNzk6XFx0XFxuICA4MDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gIDgxOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgdmhvc3RfdmRwYS5cXG4gIDgyOlxcdFxcbiAgODM6XFx0Y29uZmlnIFZIT1NUX0NST1NTX0VORElBTl9MRUdBQ1lcXG4gIDg0OlxcdFxcdGJvb2wgXFxcIkNyb3NzLWVuZGlhbiBzdXBwb3J0IGZvciB2aG9zdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDc6NDU6MTQuODI2NTg4NDU1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4ODc3MzczMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBDb251bmRydW0qKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIEkgbmVlZCB0byBtYWtlIHNvbWUgY29uZmlndXJhdGlvbiBkZWNpc2lvbnMuIEl0J3MgY2xlYXIgdGhhdCBgVkhPU1RfVkRQQWAgcmVsaWVzIG9uIGBWRFBBYC4gTG9naWNhbGx5LCBJIHNob3VsZCBlbmFibGUgYm90aCBvZiB0aG9zZSwgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gQnV0IHRoZW4gbXkgbWluZCBkcmlmdHMgLSB3aGF0IGFib3V0IGBWRFBBX1NJTWA/IE5vdywgdGhhdCBoYXMgcG90ZW50aWFsLiBTcGVjaWZpY2FsbHksIGZvciBmdXp6aW5nIHZEUEEuIEkgY2FuIHNlZSB0aGUgdmFsdWUgb2YgdGVzdGluZyB3aXRob3V0IG5lY2Vzc2FyaWx5IGhhdmluZyB0aGUgaGFyZHdhcmUgaW4gcGxhY2UuIEkgc2hvdWxkIHByb2JhYmx5IGhhdmUgYSBsb29rIGF0IHRoZSBgZHJpdmVycy92ZHBhL0tjb25maWdgIGZpbGUgdG8gZ2V0IGEgY2xlYXJlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbXBsaWNhdGlvbnMgb2YgZWFjaCBzZXR0aW5nLCBhbmQgaG93IHRoZXkgaW50ZXJhY3QuIEdvdHRhIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5ODEsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA3OjQ1OjE3LjcxNDMyNzQzOVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2NTczMDMxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkRQQVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZkcGEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnOjI6bWVudWNvbmZpZyBWRFBBXFxuZHJpdmVycy92ZHBhL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwidkRQQSBkcml2ZXJzXFxcIlxcbi0tXFxuZHJpdmVycy92ZHBhL0tjb25maWc9MTA9aWYgVkRQQVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTExLVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnOjEyOmNvbmZpZyBWRFBBX1NJTVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTEzLVxcdHRyaXN0YXRlIFxcXCJ2RFBBIGRldmljZSBzaW11bGF0b3IgY29yZVxcXCJcXG4tLVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTIwLVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnOjIxOmNvbmZpZyBWRFBBX1NJTV9ORVRcXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0yMi1cXHR0cmlzdGF0ZSBcXFwidkRQQSBzaW11bGF0b3IgZm9yIG5ldHdvcmtpbmcgZGV2aWNlXFxcIlxcbi0tXFxuZHJpdmVycy92ZHBhL0tjb25maWctMjctXFxuZHJpdmVycy92ZHBhL0tjb25maWc6Mjg6Y29uZmlnIFZEUEFfU0lNX0JMT0NLXFxuZHJpdmVycy92ZHBhL0tjb25maWctMjktXFx0dHJpc3RhdGUgXFxcInZEUEEgc2ltdWxhdG9yIGZvciBibG9jayBkZXZpY2VcXFwiXFxuLS1cXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0zNC1cXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZzozNTpjb25maWcgVkRQQV9VU0VSXFxuZHJpdmVycy92ZHBhL0tjb25maWctMzYtXFx0dHJpc3RhdGUgXFxcIlZEVVNFICh2RFBBIERldmljZSBpbiBVc2Vyc3BhY2UpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA3OjQ1OjE5LjY4MDA2NjU3MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NzA4NDQ4MDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoIGluIHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl9tc2cqKlxuXG5Pa2F5LCBsZXQncyBzZWUsIEknbSBnb2luZyB0byBlbmFibGUgdGhlc2UgVkRQQSBmZWF0dXJlczogYFZEUEFgLCBgVkhPU1RfVkRQQWAsIGBWRFBBX1NJTWAsIGBWRFBBX1NJTV9ORVRgLCBgVkRQQV9TSU1fQkxPQ0tgLCBhbmQgYFZEUEFfVVNFUmAuIEJ1dCwgcmVhbGlzdGljYWxseSwgYFZIT1NUX1ZEUEFgIGlzIHRoZSBtYWluIG9uZSBJJ20gaW50ZXJlc3RlZCBpbiBoZXJlLiBUaGUgcGF0Y2ggSSdtIGxvb2tpbmcgYXQgbW9kaWZpZXMgYHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl9tc2dgLCBzbyB0aGF0J3MgdGhlIGtleSBmdW5jdGlvbiB0byBmb2N1cyBvbi5cblxuQWxyaWdodCwgd2hhdCdzIGNoYW5nZWQgaW4gdGhhdCBmdW5jdGlvbj8gTGV0IG1lIHNlZS4uLiBoZXJlJ3MgdGhlIGNvZGU6XG5cbmBgYGNcbiBcdGNhc2UgVkhPU1RfSU9UTEJfQkFUQ0hfRU5EOlxuLVx0XHRpZiAodi1cdTAwM2Vpbl9iYXRjaCBcdTAwMjZcdTAwMjYgb3BzLVx1MDAzZXNldF9tYXApXG4tXHRcdFx0b3BzLVx1MDAzZXNldF9tYXAodmRwYSwgYXNpZCwgaW90bGIpO1xuK1x0XHRpZiAodi1cdTAwM2Vpbl9iYXRjaCBcdTAwMjZcdTAwMjYgb3BzLVx1MDAzZXNldF9tYXApIHtcbitcdFx0XHRyID0gb3BzLVx1MDAzZXNldF9tYXAodmRwYSwgYXNpZCwgaW90bGIpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4gXHRcdHYtXHUwMDNlaW5fYmF0Y2ggPSBmYWxzZTtcbiBcdFx0YnJlYWs7XG5gYGBcblxuSXQgc2VlbXMgbGlrZSBhIGJ1ZyBmaXggb3IgYSBzdWJ0bGUgZmVhdHVyZSBlbmhhbmNlbWVudCB3aXRoaW4gdGhlIGBWSE9TVF9JT1RMQl9CQVRDSF9FTkRgIGNhc2UuIE5vdywgSSBzZWUgdGhlIGtleSBjaGFuZ2U6IHRoZSBgb3BzLVx1MDAzZXNldF9tYXBgIGNhbGwgaXMgd3JhcHBlZCBpbiBhIGJsb2NrLCBhbmQgdGhlIGBicmVha2Agc3RhdGVtZW50IGlzICppbnNpZGUqIHRoYXQgYmxvY2suXG5cbkhvbGQgb24uLi4gaWYgYG9wcy1cdTAwM2VzZXRfbWFwYCBpcyBleGVjdXRlZCwgdGhlbiB0aGUgZnVuY3Rpb24gYnJlYWtzICpiZWZvcmUqIGB2LVx1MDAzZWluX2JhdGNoYCBpcyBzZXQgdG8gZmFsc2UhIFRoYXQncy4uLiBwcm9ibGVtYXRpYy4gSWYgYHIgPSBvcHMtXHUwMDNlc2V0X21hcCh2ZHBhLCBhc2lkLCBpb3RsYik7IGJyZWFrO2AgaXMgZXhlY3V0ZWQsIHRoZSBgdi1cdTAwM2Vpbl9iYXRjaCA9IGZhbHNlYCBsaW5lIGlzIHNraXBwZWQuIFRoaXMgaXMgYWxtb3N0IGNlcnRhaW5seSBhbiBlcnJvci5cblxuV2h5IHdvdWxkIHRoZSBiYXRjaCBpbmRpY2F0b3IgKnJlbWFpbiogdHJ1ZSBhZnRlciB0aGUgYG9wcy1cdTAwM2VzZXRfbWFwYCBjYWxsIGlmIGl0IHJldHVybnM/IElmIGBvcHMtXHUwMDNlc2V0X21hcGAgaXMgY2FsbGVkLCBpdCBtZWFucyB0aGUgYmF0Y2ggaXMgZW5kaW5nLCBhbmQgdGhlIG1hcCBpcyBzZXQsIHNvIGB2LVx1MDAzZWluX2JhdGNoYCBzaG91bGQgYmUgc2V0IHRvIGZhbHNlLiBJcyBgb3BzLVx1MDAzZXNldF9tYXBgIGFzeW5jaHJvbm91cz8gTm8sIGl0IHJldHVybnMgYW4gaW50ZWdlci4gTGV0IG1lIGNoZWNrLi4uIGlmIGBvcHMtXHUwMDNlc2V0X21hcGAgZmFpbHMsIGl0IHJldHVybnMgYSBub24temVybyB2YWx1ZSwgd2hpY2ggaXMgdGhlbiByZXR1cm5lZCBieSBgdmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZ2AuIEJ1dCBpZiBpdCBzdWNjZWVkcywgaXQgcmV0dXJucyAwLiBTdGlsbCwgYHYtXHUwMDNlaW5fYmF0Y2hgIGlzIG5vdCBiZWluZyByZXNldCB0byBmYWxzZSFcblxuT2theSwgSSBzZWUgdGhlIGltcGxpY2F0aW9uLiBJZiBgdi1cdTAwM2Vpbl9iYXRjaGAgcmVtYWlucyB0cnVlLCB0aGUgbmV4dCBgVkhPU1RfSU9UTEJfVVBEQVRFYCBtZXNzYWdlIHdpbGwgYmUgaW5jb3JyZWN0bHkgdHJlYXRlZCBhcyBwYXJ0IG9mIHRoZSBzYW1lICplbmRlZCogYmF0Y2guIFRoYXQncyBkZWZpbml0ZWx5IGEgYnVnLiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgYHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl91cGRhdGVgIGZ1bmN0aW9uIHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aGlzIGB2LVx1MDAzZWluX2JhdGNoYCBmbGFnLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTMzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA3OjQ1OjI4LjM4ODUxNjUzMVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC92ZHBhLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIyMCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIyMDpcXHRzdGF0aWMgaW50IHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl91cGRhdGUoc3RydWN0IHZob3N0X3ZkcGEgKnYsXFxuMTIyMTpcXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgdmhvc3RfaW90bGIgKmlvdGxiLFxcbjEyMjI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHZob3N0X2lvdGxiX21zZyAqbXNnKVxcbjEyMjM6XFx0e1xcbjEyMjQ6XFx0XFx0c3RydWN0IHZkcGFfZGV2aWNlICp2ZHBhID0gdi1cXHUwMDNldmRwYTtcXG4xMjI1OlxcdFxcbjEyMjY6XFx0XFx0aWYgKG1zZy1cXHUwMDNlaW92YSBcXHUwMDNjIHYtXFx1MDAzZXJhbmdlLmZpcnN0IHx8ICFtc2ctXFx1MDAzZXNpemUgfHxcXG4xMjI3OlxcdFxcdCAgICBtc2ctXFx1MDAzZWlvdmEgXFx1MDAzZSBVNjRfTUFYIC0gbXNnLVxcdTAwM2VzaXplICsgMSB8fFxcbjEyMjg6XFx0XFx0ICAgIG1zZy1cXHUwMDNlaW92YSArIG1zZy1cXHUwMDNlc2l6ZSAtIDEgXFx1MDAzZSB2LVxcdTAwM2VyYW5nZS5sYXN0KVxcbjEyMjk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTIzMDpcXHRcXG4xMjMxOlxcdFxcdGlmICh2aG9zdF9pb3RsYl9pdHJlZV9maXJzdChpb3RsYiwgbXNnLVxcdTAwM2Vpb3ZhLFxcbjEyMzI6XFx0XFx0XFx0XFx0XFx0ICAgIG1zZy1cXHUwMDNlaW92YSArIG1zZy1cXHUwMDNlc2l6ZSAtIDEpKVxcbjEyMzM6XFx0XFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuMTIzNDpcXHRcXG4xMjM1OlxcdFxcdGlmICh2ZHBhLVxcdTAwM2V1c2VfdmEpXFxuMTIzNjpcXHRcXHRcXHRyZXR1cm4gdmhvc3RfdmRwYV92YV9tYXAodiwgaW90bGIsIG1zZy1cXHUwMDNlaW92YSwgbXNnLVxcdTAwM2VzaXplLFxcbjEyMzc6XFx0XFx0XFx0XFx0XFx0XFx0IG1zZy1cXHUwMDNldWFkZHIsIG1zZy1cXHUwMDNlcGVybSk7XFxuMTIzODpcXHRcXG4xMjM5OlxcdFxcdHJldHVybiB2aG9zdF92ZHBhX3BhX21hcCh2LCBpb3RsYiwgbXNnLVxcdTAwM2Vpb3ZhLCBtc2ctXFx1MDAzZXNpemUsIG1zZy1cXHUwMDNldWFkZHIsXFxuMTI0MDpcXHRcXHRcXHRcXHRcXHQgbXNnLVxcdTAwM2VwZXJtKTtcXG4xMjQxOlxcdH1cXG4xMjQyOlxcdFxcbjEyNDM6XFx0c3RhdGljIGludCB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgdTMyIGFzaWQsXFxuMTI0NDpcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICptc2cpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA3OjQ1OjI4LjM4ODY1NzU3MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzk1MTMzMzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKk1lbW9yeSBMYW5lIHdpdGggdmhvc3RfdmRwYSoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEknbSBjaGFzaW5nIGEgcG90ZW50aWFsIGlzc3VlIHJlbGF0ZWQgdG8gdmlydHVhbCBkZXZpY2UgcGFzc3Rocm91Z2ggYW5kIGhvdyB3ZSBoYW5kbGUgbWVtb3J5IG1hcHBpbmdzIHdpdGhpbiB0aGUgdmhvc3QgY29udGV4dCwgc3BlY2lmaWNhbGx5IGZvciB2RFBBIGRldmljZXMuIE15IGluaXRpYWwgYXNzdW1wdGlvbiB3YXMgdGhhdCBgdi1cdTAwM2Vpbl9iYXRjaGAgd2FzIG9ubHkgcmVsZXZhbnQgZHVyaW5nIHRoZSBpbml0aWFsIHNldHVwIG9yIHRlYXItZG93bi4gQnV0IG5vdyBJJ20gcXVlc3Rpb25pbmcgdGhhdC4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBpZiB0aGUgYHYtXHUwMDNlaW5fYmF0Y2hgIGZsYWcgaXMgYWN0dWFsbHkgKnVzZWQqIHdpdGhpbiBlaXRoZXIgdGhlIGB2aG9zdF92ZHBhX3BhX21hcGAgb3IgdGhlIGB2aG9zdF92ZHBhX3ZhX21hcGAgZnVuY3Rpb25zLiBUaGlzIGRldGFpbCBpcyBjcml0aWNhbCBmb3IgZW5zdXJpbmcgb3VyIG1lbW9yeSBtYXBwaW5nIGxvZ2ljIGlzIHJvYnVzdCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvcnMsIGVzcGVjaWFsbHkgZHVyaW5nIGJhdGNoIG9wZXJhdGlvbnMuIE15IGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIGZsYWcgaW5mbHVlbmNlcyB0aGUgd2F5IHBoeXNpY2FsIGFkZHJlc3NlcyAoUEEpIG9yIHZpcnR1YWwgYWRkcmVzc2VzIChWQSkgYXJlIHRyYW5zbGF0ZWQsIG9yIGlmIHRoZSBzeXN0ZW0gbWlzdGFrZW5seSB1c2VzIHN0YWxlIGJhdGNoIGluZm9ybWF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNhbGwgc3RhY2sgYW5kIGRhdGEgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxOTUsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA3OjQ1OjMxLjc4Mzc5MzAxN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyOTM5MDM2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbl9iYXRjaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2V4dDQucnN0PTE0MT1XaGVuIG1vdW50aW5nIGFuIGV4dDQgZmlsZXN5c3RlbSwgdGhlIGZvbGxvd2luZyBvcHRpb24gYXJlIGFjY2VwdGVkOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9leHQ0LnJzdC0zMDQtXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9leHQ0LnJzdDozMDU6ICBtaW5fYmF0Y2hfdGltZT11c2VjXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9leHQ0LnJzdC0zMDYtICAgICAgICBUaGlzIHBhcmFtZXRlciBzZXRzIHRoZSBjb21taXQgdGltZSAoYXMgZGVzY3JpYmVkIGFib3ZlKSB0byBiZSBhdCBsZWFzdFxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvZXh0NC5yc3Q6MzA3OiAgICAgICAgbWluX2JhdGNoX3RpbWUuICBJdCBkZWZhdWx0cyB0byB6ZXJvIG1pY3Jvc2Vjb25kcy4gIEluY3JlYXNpbmcgdGhpc1xcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvZXh0NC5yc3QtMzA4LSAgICAgICAgcGFyYW1ldGVyIG1heSBpbXByb3ZlIHRoZSB0aHJvdWdocHV0IG9mIG11bHRpLXRocmVhZGVkLCBzeW5jaHJvbm91c1xcbi0tXFxuZHJpdmVycy9kbWEvaWR4ZC9pcnEuYz0yMjI9c3RhdGljIHZvaWQgaWR4ZF9ldmxfZmF1bHRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL2RtYS9pZHhkL2lycS5jLTIzOC1cXHRjYXNlIERTQV9DT01QX0NSQV9YTEFUOlxcbmRyaXZlcnMvZG1hL2lkeGQvaXJxLmM6MjM5OlxcdFxcdGlmIChlbnRyeV9oZWFkLVxcdTAwM2ViYXRjaCBcXHUwMDI2XFx1MDAyNiBlbnRyeV9oZWFkLVxcdTAwM2VmaXJzdF9lcnJfaW5fYmF0Y2gpXFxuZHJpdmVycy9kbWEvaWR4ZC9pcnEuYy0yNDAtXFx0XFx0XFx0ZXZsLVxcdTAwM2ViYXRjaF9mYWlsW2VudHJ5X2hlYWQtXFx1MDAzZWJhdGNoX2lkXSA9IGZhbHNlO1xcbi0tXFxuZHJpdmVycy9kbWEvaWR4ZC9yZWdpc3RlcnMuaD02MTU9c3RydWN0IF9fZXZsX2VudHJ5IHtcXG4tLVxcbmRyaXZlcnMvZG1hL2lkeGQvcmVnaXN0ZXJzLmgtNjQzLVxcdFxcdFxcdHUxNiByY3I6MTtcXG5kcml2ZXJzL2RtYS9pZHhkL3JlZ2lzdGVycy5oOjY0NDpcXHRcXHRcXHR1MTYgZmlyc3RfZXJyX2luX2JhdGNoOjE7XFxuZHJpdmVycy9kbWEvaWR4ZC9yZWdpc3RlcnMuaC02NDUtXFx0XFx0XFx0dTE2IHJzdmQ0XzI6OTtcXG4tLVxcbmRyaXZlcnMvbWQvZG0tdmRvL2Jsb2NrLW1hcC5oPTQ5PXN0cnVjdCB2ZG9fcGFnZV9jYWNoZSB7XFxuLS1cXG5kcml2ZXJzL21kL2RtLXZkby9ibG9jay1tYXAuaC01NC1cXHQvKiBudW1iZXIgb2YgcGFnZXMgdG8gd3JpdGUgaW4gdGhlIGN1cnJlbnQgYmF0Y2ggKi9cXG5kcml2ZXJzL21kL2RtLXZkby9ibG9jay1tYXAuaDo1NTpcXHRwYWdlX2NvdW50X3QgcGFnZXNfaW5fYmF0Y2g7XFxuZHJpdmVycy9tZC9kbS12ZG8vYmxvY2stbWFwLmgtNTYtXFx0LyogV2hldGhlciB0aGUgVkRPIGlzIGRvaW5nIGEgcmVhZC1vbmx5IHJlYnVpbGQgKi9cXG4tLVxcbmRyaXZlcnMvbWQvZG0tdmRvL2RhdGEtdmlvLmg9MTEwPXN0cnVjdCBjb21wcmVzc2lvbl9zdGF0ZSB7XFxuLS1cXG5kcml2ZXJzL21kL2RtLXZkby9kYXRhLXZpby5oLTEzMC1cXHQvKiBBIGxpbmsgaW4gdGhlIGNoYWluIG9mIGRhdGFfdmlvcyB3aGljaCBoYXZlIGJlZW4gcGFja2VkIHRvZ2V0aGVyICovXFxuZHJpdmVycy9tZC9kbS12ZG8vZGF0YS12aW8uaDoxMzE6XFx0c3RydWN0IGRhdGFfdmlvICpuZXh0X2luX2JhdGNoO1xcbmRyaXZlcnMvbWQvZG0tdmRvL2RhdGEtdmlvLmgtMTMyLVxcbi0tXFxuZHJpdmVycy9tZC9kbS12ZG8vcGFja2VyLmM9Mjc0PXN0YXRpYyB2b2lkIGZpbmlzaF9jb21wcmVzc2VkX3dyaXRlKHN0cnVjdCB2ZG9fY29tcGxldGlvbiAqY29tcGxldGlvbilcXG4tLVxcbmRyaXZlcnMvbWQvZG0tdmRvL3BhY2tlci5jLTI4NC1cXHQgKi9cXG5kcml2ZXJzL21kL2RtLXZkby9wYWNrZXIuYzoyODU6XFx0Zm9yIChjbGllbnQgPSBhZ2VudC1cXHUwMDNlY29tcHJlc3Npb24ubmV4dF9pbl9iYXRjaDsgY2xpZW50ICE9IE5VTEw7IGNsaWVudCA9IG5leHQpIHtcXG5kcml2ZXJzL21kL2RtLXZkby9wYWNrZXIuYzoyODY6XFx0XFx0bmV4dCA9IGNsaWVudC1cXHUwMDNlY29tcHJlc3Npb24ubmV4dF9pbl9iYXRjaDtcXG5kcml2ZXJzL21kL2RtLXZkby9wYWNrZXIuYy0yODctXFx0XFx0cmVsZWFzZV9jb21wcmVzc2VkX3dyaXRlX3dhaXRlcihjbGllbnQsIFxcdTAwMjZhZ2VudC1cXHUwMDNlYWxsb2NhdGlvbik7XFxuLS1cXG5kcml2ZXJzL21kL2RtLXZkby9wYWNrZXIuYz0yOTQ9c3RhdGljIHZvaWQgaGFuZGxlX2NvbXByZXNzZWRfd3JpdGVfZXJyb3Ioc3RydWN0IHZkb19jb21wbGV0aW9uICpjb21wbGV0aW9uKVxcbi0tXFxuZHJpdmVycy9tZC9kbS12ZG8vcGFja2VyLmMtMzA2LVxcbmRyaXZlcnMvbWQvZG0tdmRvL3BhY2tlci5jOjMwNzpcXHRmb3IgKGNsaWVudCA9IGFnZW50LVxcdTAwM2Vjb21wcmVzc2lvbi5uZXh0X2luX2JhdGNoOyBjbGllbnQgIT0gTlVMTDsgY2xpZW50ID0gbmV4dCkge1xcbmRyaXZlcnMvbWQvZG0tdmRvL3BhY2tlci5jOjMwODpcXHRcXHRuZXh0ID0gY2xpZW50LVxcdTAwM2Vjb21wcmVzc2lvbi5uZXh0X2luX2JhdGNoO1xcbmRyaXZlcnMvbWQvZG0tdmRvL3BhY2tlci5jLTMwOS1cXHRcXHR3cml0ZV9kYXRhX3ZpbyhjbGllbnQpO1xcbi0tXFxuZHJpdmVycy9tZC9kbS12ZG8vcGFja2VyLmM9Mzg5PXN0YXRpYyBibG9ja19zaXplX3QgX19tdXN0X2NoZWNrIHBhY2tfZnJhZ21lbnQoc3RydWN0IGNvbXByZXNzaW9uX3N0YXRlICpjb21wcmVzc2lvbixcXG4tLVxcbmRyaXZlcnMvbWQvZG0tdmRvL3BhY2tlci5jLTM5Ni1cXG5kcml2ZXJzL21kL2RtLXZkby9wYWNrZXIuYzozOTc6XFx0dG9fcGFjay1cXHUwMDNlbmV4dF9pbl9iYXRjaCA9IGNvbXByZXNzaW9uLVxcdTAwM2VuZXh0X2luX2JhdGNoO1xcbmRyaXZlcnMvbWQvZG0tdmRvL3BhY2tlci5jOjM5ODpcXHRjb21wcmVzc2lvbi1cXHUwMDNlbmV4dF9pbl9iYXRjaCA9IGRhdGFfdmlvO1xcbmRyaXZlcnMvbWQvZG0tdmRvL3BhY2tlci5jLTM5OS1cXHR0b19wYWNrLVxcdTAwM2VzbG90ID0gc2xvdDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvaHR0Lmg9MTY3PWVudW0gaHR0X2RhdGFfdHhfZXh0X3RpZCB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2h0dC5oLTE4Mi0gKiAgICAgICAgICAgICAgICAgIChITCBob3N0cyBtYW5hZ2UgcXVldWVzIG9uIHRoZSBob3N0IClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2h0dC5oOjE4MzogKiAgICAgICBtb3JlX2luX2JhdGNoOiBvbmx5IGZvciBITCBob3N0cy4gaW5kaWNhdGVzIGlmIG1vcmUgcGFja2V0cyBhcmVcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2h0dC5oLTE4NC0gKiAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nLiB0aGlzIGFsbG93cyB0YXJnZXQgdG8gd2FpdCBhbmQgYWdncmVnYXRlXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2Z3L2FwaS9sb2NhdGlvbi5oPTE3NTA9ZW51bSBpd2xfdG9mX3Jlc3BvbnNlX3N0YXR1cyB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2Z3L2FwaS9sb2NhdGlvbi5oLTE3NjEtICpcXHRcXHUwMDI2ZW51bSBpd2xfdG9mX3Jlc3BvbnNlX3N0YXR1cy5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2Z3L2FwaS9sb2NhdGlvbi5oOjE3NjI6ICogQGxhc3RfaW5fYmF0Y2g6IHJlcHJvdCBwb2xpY3kgKHdoZW4gbm90IGFsbCByZXNwb25zZXMgYXJlIHVwbG9hZGVkIGF0IG9uY2UpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9mdy9hcGkvbG9jYXRpb24uaC0xNzYzLSAqIEBudW1fb2ZfYXBzOiBOdW1iZXIgb2YgQVBzIHRvIG1lYXN1cmUgKGVycm9yIGlmIFxcdTAwM2UgSVdMX1RPRl9NQVhfQVBTKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9mdy9hcGkvbG9jYXRpb24uaD0xNzY2PXN0cnVjdCBpd2xfdG9mX3JhbmdlX3JzcF9udGZ5X3Y1IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZncvYXBpL2xvY2F0aW9uLmgtMTc2OC1cXHR1OCByZXF1ZXN0X3N0YXR1cztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2Z3L2FwaS9sb2NhdGlvbi5oOjE3Njk6XFx0dTggbGFzdF9pbl9iYXRjaDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2Z3L2FwaS9sb2NhdGlvbi5oLTE3NzAtXFx0dTggbnVtX29mX2FwcztcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2Z0bS1pbml0aWF0b3IuYz0zMzQ9dm9pZCBpd2xfbWxkX2hhbmRsZV9mdG1fcmVzcF9ub3RpZihzdHJ1Y3QgaXdsX21sZCAqbWxkLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvZnRtLWluaXRpYXRvci5jLTMzNy1cXHRzdHJ1Y3QgaXdsX3RvZl9yYW5nZV9yc3BfbnRmeSAqZndfcmVzcCA9ICh2b2lkICopcGt0LVxcdTAwM2VkYXRhO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2Z0bS1pbml0aWF0b3IuYzozMzg6XFx0dTggbnVtX29mX2FwcywgbGFzdF9pbl9iYXRjaDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9mdG0taW5pdGlhdG9yLmMtMzM5LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvZnRtLWluaXRpYXRvci5jLTM0OC1cXHRudW1fb2ZfYXBzID0gZndfcmVzcC1cXHUwMDNlbnVtX29mX2FwcztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9mdG0taW5pdGlhdG9yLmM6MzQ5OlxcdGxhc3RfaW5fYmF0Y2ggPSBmd19yZXNwLVxcdTAwM2VsYXN0X3JlcG9ydDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9mdG0taW5pdGlhdG9yLmMtMzUwLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvZnRtLWluaXRpYXRvci5jLTQyOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9mdG0taW5pdGlhdG9yLmM6NDI5OlxcdGlmIChsYXN0X2luX2JhdGNoKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvZnRtLWluaXRpYXRvci5jLTQzMC1cXHRcXHRjZmc4MDIxMV9wbXNyX2NvbXBsZXRlKG1sZC1cXHUwMDNlZnRtX2luaXRpYXRvci5yZXFfd2RldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL2Z0bS1pbml0aWF0b3IuYz0xMjY4PXZvaWQgaXdsX212bV9mdG1fcmFuZ2VfcmVzcChzdHJ1Y3QgaXdsX212bSAqbXZtLCBzdHJ1Y3QgaXdsX3J4X2NtZF9idWZmZXIgKnJ4YilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL2Z0bS1pbml0aWF0b3IuYy0xMjc4LVxcdFxcdFxcdFxcdCAgSVdMX1VDT0RFX1RMVl9BUElfRlRNX05FV19SQU5HRV9SRVEpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL2Z0bS1pbml0aWF0b3IuYzoxMjc5OlxcdHU4IG51bV9vZl9hcHMsIGxhc3RfaW5fYmF0Y2g7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vZnRtLWluaXRpYXRvci5jLTEyODAtXFx0dTggbm90aWZfdmVyID0gaXdsX212bV9mdG1fZ2V0X3JhbmdlX3Jlc3BfdmVyKG12bSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9mdG0taW5pdGlhdG9yLmMtMTI5Ni1cXHRcXHRudW1fb2ZfYXBzID0gZndfcmVzcF92OC1cXHUwMDNlbnVtX29mX2FwcztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9mdG0taW5pdGlhdG9yLmM6MTI5NzpcXHRcXHRsYXN0X2luX2JhdGNoID0gZndfcmVzcF92OC1cXHUwMDNlbGFzdF9yZXBvcnQ7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vZnRtLWluaXRpYXRvci5jLTEyOTgtXFx0fSBlbHNlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL2Z0bS1pbml0aWF0b3IuYy0xMzAzLVxcdFxcdG51bV9vZl9hcHMgPSBmd19yZXNwX3Y1LVxcdTAwM2VudW1fb2ZfYXBzO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL2Z0bS1pbml0aWF0b3IuYzoxMzA0OlxcdFxcdGxhc3RfaW5fYmF0Y2ggPSBmd19yZXNwX3Y1LVxcdTAwM2VsYXN0X2luX2JhdGNoO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL2Z0bS1pbml0aWF0b3IuYy0xMzA1LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL2Z0bS1pbml0aWF0b3IuYy0xNDA1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL2Z0bS1pbml0aWF0b3IuYzoxNDA2OlxcdGlmIChsYXN0X2luX2JhdGNoKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vZnRtLWluaXRpYXRvci5jLTE0MDctXFx0XFx0Y2ZnODAyMTFfcG1zcl9jb21wbGV0ZShtdm0tXFx1MDAzZWZ0bV9pbml0aWF0b3IucmVxX3dkZXYsXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTYyOD1zdGF0aWMgaW50IG52bWV0X3RyeV9zZW5kX2RhdGFfcGR1KHN0cnVjdCBudm1ldF90Y3BfY21kICpjbWQpXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTY1NC1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjY1NTpzdGF0aWMgaW50IG52bWV0X3RyeV9zZW5kX2RhdGEoc3RydWN0IG52bWV0X3RjcF9jbWQgKmNtZCwgYm9vbCBsYXN0X2luX2JhdGNoKVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtNjU2LXtcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtNjY3LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM6NjY4OlxcdFxcdGlmICgoIWxhc3RfaW5fYmF0Y2ggXFx1MDAyNlxcdTAwMjYgY21kLVxcdTAwM2VxdWV1ZS1cXHUwMDNlc2VuZF9saXN0X2xlbikgfHxcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTY2OS1cXHRcXHQgICAgY21kLVxcdTAwM2V3Ynl0ZXNfZG9uZSArIGxlZnQgXFx1MDAzYyBjbWQtXFx1MDAzZXJlcS50cmFuc2Zlcl9sZW4gfHxcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM9NzA4PXN0YXRpYyBpbnQgbnZtZXRfdHJ5X3NlbmRfcmVzcG9uc2Uoc3RydWN0IG52bWV0X3RjcF9jbWQgKmNtZCxcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjcwOTpcXHRcXHRib29sIGxhc3RfaW5fYmF0Y2gpXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy03MTAte1xcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy03MTYtXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYzo3MTc6XFx0aWYgKCFsYXN0X2luX2JhdGNoIFxcdTAwMjZcXHUwMDI2IGNtZC1cXHUwMDNlcXVldWUtXFx1MDAzZXNlbmRfbGlzdF9sZW4pXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy03MTgtXFx0XFx0bXNnLm1zZ19mbGFncyB8PSBNU0dfTU9SRTtcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtNzM4LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM6NzM5OnN0YXRpYyBpbnQgbnZtZXRfdHJ5X3NlbmRfcjJ0KHN0cnVjdCBudm1ldF90Y3BfY21kICpjbWQsIGJvb2wgbGFzdF9pbl9iYXRjaClcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTc0MC17XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTc0Ni1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjc0NzpcXHRpZiAoIWxhc3RfaW5fYmF0Y2ggXFx1MDAyNlxcdTAwMjYgY21kLVxcdTAwM2VxdWV1ZS1cXHUwMDNlc2VuZF9saXN0X2xlbilcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTc0OC1cXHRcXHRtc2cubXNnX2ZsYWdzIHw9IE1TR19NT1JFO1xcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy03NjYtXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYzo3Njc6c3RhdGljIGludCBudm1ldF90cnlfc2VuZF9kZGdzdChzdHJ1Y3QgbnZtZXRfdGNwX2NtZCAqY21kLCBib29sIGxhc3RfaW5fYmF0Y2gpXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy03Njgte1xcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy03NzctXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYzo3Nzg6XFx0aWYgKCFsYXN0X2luX2JhdGNoIFxcdTAwMjZcXHUwMDI2IGNtZC1cXHUwMDNlcXVldWUtXFx1MDAzZXNlbmRfbGlzdF9sZW4pXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy03NzktXFx0XFx0bXNnLm1zZ19mbGFncyB8PSBNU0dfTU9SRTtcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM9ODAyPXN0YXRpYyBpbnQgbnZtZXRfdGNwX3RyeV9zZW5kX29uZShzdHJ1Y3QgbnZtZXRfdGNwX3F1ZXVlICpxdWV1ZSxcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjgwMzpcXHRcXHRib29sIGxhc3RfaW5fYmF0Y2gpXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy04MDQte1xcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy04MjAtXFx0aWYgKGNtZC1cXHUwMDNlc3RhdGUgPT0gTlZNRVRfVENQX1NFTkRfREFUQSkge1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM6ODIxOlxcdFxcdHJldCA9IG52bWV0X3RyeV9zZW5kX2RhdGEoY21kLCBsYXN0X2luX2JhdGNoKTtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTgyMi1cXHRcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTgyNi1cXHRpZiAoY21kLVxcdTAwM2VzdGF0ZSA9PSBOVk1FVF9UQ1BfU0VORF9EREdTVCkge1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM6ODI3OlxcdFxcdHJldCA9IG52bWV0X3RyeV9zZW5kX2RkZ3N0KGNtZCwgbGFzdF9pbl9iYXRjaCk7XFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy04MjgtXFx0XFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy04MzItXFx0aWYgKGNtZC1cXHUwMDNlc3RhdGUgPT0gTlZNRVRfVENQX1NFTkRfUjJUKSB7XFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYzo4MzM6XFx0XFx0cmV0ID0gbnZtZXRfdHJ5X3NlbmRfcjJ0KGNtZCwgbGFzdF9pbl9iYXRjaCk7XFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy04MzQtXFx0XFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy04MzgtXFx0aWYgKGNtZC1cXHUwMDNlc3RhdGUgPT0gTlZNRVRfVENQX1NFTkRfUkVTUE9OU0UpXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYzo4Mzk6XFx0XFx0cmV0ID0gbnZtZXRfdHJ5X3NlbmRfcmVzcG9uc2UoY21kLCBsYXN0X2luX2JhdGNoKTtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTg0MC1cXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTQ1PXN0cnVjdCB2aG9zdF92ZHBhIHtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTU4LVxcdHN0cnVjdCBldmVudGZkX2N0eCAqY29uZmlnX2N0eDtcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzo1OTpcXHRpbnQgaW5fYmF0Y2g7XFxuZHJpdmVycy92aG9zdC92ZHBhLmMtNjAtXFx0c3RydWN0IHZkcGFfaW92YV9yYW5nZSByYW5nZTtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTI0NT1zdGF0aWMgaW50IHZob3N0X3ZkcGFfcmVzZXQoc3RydWN0IHZob3N0X3ZkcGEgKnYpXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtMjQ2LXtcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzoyNDc6XFx0di1cXHUwMDNlaW5fYmF0Y2ggPSAwO1xcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTI0OC1cXHRyZXR1cm4gX2NvbXBhdF92ZHBhX3Jlc2V0KHYpO1xcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmM9OTkyPXN0YXRpYyBpbnQgdmhvc3RfdmRwYV9tYXAoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHN0cnVjdCB2aG9zdF9pb3RsYiAqaW90bGIsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xMDA4LVxcdH0gZWxzZSBpZiAob3BzLVxcdTAwM2VzZXRfbWFwKSB7XFxuZHJpdmVycy92aG9zdC92ZHBhLmM6MTAwOTpcXHRcXHRpZiAoIXYtXFx1MDAzZWluX2JhdGNoKVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTEwMTAtXFx0XFx0XFx0ciA9IG9wcy1cXHUwMDNlc2V0X21hcCh2ZHBhLCBhc2lkLCBpb3RsYik7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYz0xMDI3PXN0YXRpYyB2b2lkIHZob3N0X3ZkcGFfdW5tYXAoc3RydWN0IHZob3N0X3ZkcGEgKnYsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xMDM3LVxcdGlmIChvcHMtXFx1MDAzZXNldF9tYXApIHtcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzoxMDM4OlxcdFxcdGlmICghdi1cXHUwMDNlaW5fYmF0Y2gpXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTAzOS1cXHRcXHRcXHRvcHMtXFx1MDAzZXNldF9tYXAodmRwYSwgYXNpZCwgaW90bGIpO1xcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmM9MTI0Mz1zdGF0aWMgaW50IHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2LCB1MzIgYXNpZCxcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTEyNzEtXFxuZHJpdmVycy92aG9zdC92ZHBhLmM6MTI3MjpcXHRpZiAoKHYtXFx1MDAzZWluX2JhdGNoIFxcdTAwMjZcXHUwMDI2IHYtXFx1MDAzZWJhdGNoX2FzaWQgIT0gYXNpZCkgfHwgIWlvdGxiKSB7XFxuZHJpdmVycy92aG9zdC92ZHBhLmM6MTI3MzpcXHRcXHRpZiAodi1cXHUwMDNlaW5fYmF0Y2ggXFx1MDAyNlxcdTAwMjYgdi1cXHUwMDNlYmF0Y2hfYXNpZCAhPSBhc2lkKSB7XFxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTI3NC1cXHRcXHRcXHRkZXZfaW5mbyhcXHUwMDI2di1cXHUwMDNlZGV2LCBcXFwiYmF0Y2ggaWQgJWQgYXNpZCAlZFxcXFxuXFxcIixcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTEyOTEtXFx0XFx0di1cXHUwMDNlYmF0Y2hfYXNpZCA9IGFzaWQ7XFxuZHJpdmVycy92aG9zdC92ZHBhLmM6MTI5MjpcXHRcXHR2LVxcdTAwM2Vpbl9iYXRjaCA9IHRydWU7XFxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTI5My1cXHRcXHRicmVhaztcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xMjk0LVxcdGNhc2UgVkhPU1RfSU9UTEJfQkFUQ0hfRU5EOlxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjEyOTU6XFx0XFx0aWYgKHYtXFx1MDAzZWluX2JhdGNoIFxcdTAwMjZcXHUwMDI2IG9wcy1cXHUwMDNlc2V0X21hcCkge1xcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTEyOTYtXFx0XFx0XFx0ciA9IG9wcy1cXHUwMDNlc2V0X21hcCh2ZHBhLCBhc2lkLCBpb3RsYik7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xMjk4LVxcdFxcdH1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzoxMjk5OlxcdFxcdHYtXFx1MDAzZWluX2JhdGNoID0gZmFsc2U7XFxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTMwMC1cXHRcXHRicmVhaztcXG4tLVxcbmZzL2V4dDQvZXh0NC5oPTE1ODY9c3RydWN0IGV4dDRfc2JfaW5mbyB7XFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0xNjQ2LVxcdHUzMiBzX21heF9iYXRjaF90aW1lO1xcbmZzL2V4dDQvZXh0NC5oOjE2NDc6XFx0dTMyIHNfbWluX2JhdGNoX3RpbWU7XFxuZnMvZXh0NC9leHQ0LmgtMTY0OC1cXHRzdHJ1Y3QgZmlsZSAqc19qb3VybmFsX2JkZXZfZmlsZTtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz0xNjkyPWVudW0ge1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTE2OTctXFx0T3B0X2F1dG9fZGFfYWxsb2MsIE9wdF9ub2F1dG9fZGFfYWxsb2MsIE9wdF9ub2xvYWQsXFxuZnMvZXh0NC9zdXBlci5jOjE2OTg6XFx0T3B0X2NvbW1pdCwgT3B0X21pbl9iYXRjaF90aW1lLCBPcHRfbWF4X2JhdGNoX3RpbWUsIE9wdF9qb3VybmFsX2RldixcXG5mcy9leHQ0L3N1cGVyLmMtMTY5OS1cXHRPcHRfam91cm5hbF9wYXRoLCBPcHRfam91cm5hbF9jaGVja3N1bSwgT3B0X2pvdXJuYWxfYXN5bmNfY29tbWl0LFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTE3NjI9c3RhdGljIGNvbnN0IHN0cnVjdCBmc19wYXJhbWV0ZXJfc3BlYyBleHQ0X3BhcmFtX3NwZWNzW10gPSB7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTc4My1cXHRmc3BhcmFtX3UzMlxcdChcXFwiY29tbWl0XFxcIixcXHRcXHRPcHRfY29tbWl0KSxcXG5mcy9leHQ0L3N1cGVyLmM6MTc4NDpcXHRmc3BhcmFtX3UzMlxcdChcXFwibWluX2JhdGNoX3RpbWVcXFwiLFxcdE9wdF9taW5fYmF0Y2hfdGltZSksXFxuZnMvZXh0NC9zdXBlci5jLTE3ODUtXFx0ZnNwYXJhbV91MzJcXHQoXFxcIm1heF9iYXRjaF90aW1lXFxcIixcXHRPcHRfbWF4X2JhdGNoX3RpbWUpLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTE5NjQ9ZXh0NF9zYl9yZWFkX2VuY29kaW5nKGNvbnN0IHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcylcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xOTg0LSNkZWZpbmUgRVhUNF9TUEVDX3NfbWF4X2JhdGNoX3RpbWVcXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyAgOClcXG5mcy9leHQ0L3N1cGVyLmM6MTk4NTojZGVmaW5lIEVYVDRfU1BFQ19zX21pbl9iYXRjaF90aW1lXFx0XFx0KDEgXFx1MDAzY1xcdTAwM2MgIDkpXFxuZnMvZXh0NC9zdXBlci5jLTE5ODYtI2RlZmluZSBFWFQ0X1NQRUNfc19pbm9kZV9yZWFkYWhlYWRfYmxrc1xcdCgxIFxcdTAwM2NcXHUwMDNjIDEwKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTE5OTc9c3RydWN0IGV4dDRfZnNfY29udGV4dCB7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMjAyMS1cXHR1MzJcXHRcXHRzX21heF9iYXRjaF90aW1lO1xcbmZzL2V4dDQvc3VwZXIuYzoyMDIyOlxcdHUzMlxcdFxcdHNfbWluX2JhdGNoX3RpbWU7XFxuZnMvZXh0NC9zdXBlci5jLTIwMjMtXFx0a3VpZF90XFx0XFx0c19yZXN1aWQ7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9MjE3MT1zdGF0aWMgaW50IGV4dDRfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSlcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0yMjc5LVxcdFxcdHJldHVybiAwO1xcbmZzL2V4dDQvc3VwZXIuYzoyMjgwOlxcdGNhc2UgT3B0X21pbl9iYXRjaF90aW1lOlxcbmZzL2V4dDQvc3VwZXIuYzoyMjgxOlxcdFxcdGN0eC1cXHUwMDNlc19taW5fYmF0Y2hfdGltZSA9IHJlc3VsdC51aW50XzMyO1xcbmZzL2V4dDQvc3VwZXIuYzoyMjgyOlxcdFxcdGN0eC1cXHUwMDNlc3BlYyB8PSBFWFQ0X1NQRUNfc19taW5fYmF0Y2hfdGltZTtcXG5mcy9leHQ0L3N1cGVyLmMtMjI4My1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz0yODU1PXN0YXRpYyB2b2lkIGV4dDRfYXBwbHlfb3B0aW9ucyhzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMjg3MC1cXHRBUFBMWShzX21heF9iYXRjaF90aW1lKTtcXG5mcy9leHQ0L3N1cGVyLmM6Mjg3MTpcXHRBUFBMWShzX21pbl9iYXRjaF90aW1lKTtcXG5mcy9leHQ0L3N1cGVyLmMtMjg3Mi1cXHRBUFBMWShzX3dhbnRfZXh0cmFfaXNpemUpO1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTI5NjU9c3RhdGljIGludCBfZXh0NF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMzAyMy1cXHRcXHRTRVFfT1BUU19QUklOVChcXFwiY29tbWl0PSVsdVxcXCIsIHNiaS1cXHUwMDNlc19jb21taXRfaW50ZXJ2YWwgLyBIWik7XFxuZnMvZXh0NC9zdXBlci5jOjMwMjQ6XFx0aWYgKG5vZGVmcyB8fCBzYmktXFx1MDAzZXNfbWluX2JhdGNoX3RpbWUgIT0gRVhUNF9ERUZfTUlOX0JBVENIX1RJTUUpXFxuZnMvZXh0NC9zdXBlci5jOjMwMjU6XFx0XFx0U0VRX09QVFNfUFJJTlQoXFxcIm1pbl9iYXRjaF90aW1lPSV1XFxcIiwgc2JpLVxcdTAwM2VzX21pbl9iYXRjaF90aW1lKTtcXG5mcy9leHQ0L3N1cGVyLmMtMzAyNi1cXHRpZiAobm9kZWZzIHx8IHNiaS1cXHUwMDNlc19tYXhfYmF0Y2hfdGltZSAhPSBFWFQ0X0RFRl9NQVhfQkFUQ0hfVElNRSlcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz01MzM4PXN0YXRpYyBpbnQgX19leHQ0X2ZpbGxfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTUzNzMtXFx0c2JpLVxcdTAwM2VzX2NvbW1pdF9pbnRlcnZhbCA9IEpCRDJfREVGQVVMVF9NQVhfQ09NTUlUX0FHRSAqIEhaO1xcbmZzL2V4dDQvc3VwZXIuYzo1Mzc0OlxcdHNiaS1cXHUwMDNlc19taW5fYmF0Y2hfdGltZSA9IEVYVDRfREVGX01JTl9CQVRDSF9USU1FO1xcbmZzL2V4dDQvc3VwZXIuYy01Mzc1LVxcdHNiaS1cXHUwMDNlc19tYXhfYmF0Y2hfdGltZSA9IEVYVDRfREVGX01BWF9CQVRDSF9USU1FO1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTU4Njg9c3RhdGljIHZvaWQgZXh0NF9pbml0X2pvdXJuYWxfcGFyYW1zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGpvdXJuYWxfdCAqam91cm5hbClcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01ODcyLVxcdGpvdXJuYWwtXFx1MDAzZWpfY29tbWl0X2ludGVydmFsID0gc2JpLVxcdTAwM2VzX2NvbW1pdF9pbnRlcnZhbDtcXG5mcy9leHQ0L3N1cGVyLmM6NTg3MzpcXHRqb3VybmFsLVxcdTAwM2VqX21pbl9iYXRjaF90aW1lID0gc2JpLVxcdTAwM2VzX21pbl9iYXRjaF90aW1lO1xcbmZzL2V4dDQvc3VwZXIuYy01ODc0LVxcdGpvdXJuYWwtXFx1MDAzZWpfbWF4X2JhdGNoX3RpbWUgPSBzYmktXFx1MDAzZXNfbWF4X2JhdGNoX3RpbWU7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NjU0NT1zdHJ1Y3QgZXh0NF9tb3VudF9vcHRpb25zIHtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy02NTUwLVxcdHVuc2lnbmVkIGxvbmcgc19jb21taXRfaW50ZXJ2YWw7XFxuZnMvZXh0NC9zdXBlci5jOjY1NTE6XFx0dTMyIHNfbWluX2JhdGNoX3RpbWUsIHNfbWF4X2JhdGNoX3RpbWU7XFxuZnMvZXh0NC9zdXBlci5jLTY1NTItI2lmZGVmIENPTkZJR19RVU9UQVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTY1NTg9c3RhdGljIGludCBfX2V4dDRfcmVtb3VudChzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNjU4MS1cXHRvbGRfb3B0cy5zX2NvbW1pdF9pbnRlcnZhbCA9IHNiaS1cXHUwMDNlc19jb21taXRfaW50ZXJ2YWw7XFxuZnMvZXh0NC9zdXBlci5jOjY1ODI6XFx0b2xkX29wdHMuc19taW5fYmF0Y2hfdGltZSA9IHNiaS1cXHUwMDNlc19taW5fYmF0Y2hfdGltZTtcXG5mcy9leHQ0L3N1cGVyLmMtNjU4My1cXHRvbGRfb3B0cy5zX21heF9iYXRjaF90aW1lID0gc2JpLVxcdTAwM2VzX21heF9iYXRjaF90aW1lO1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTY4NjMtXFx0c2JpLVxcdTAwM2VzX2NvbW1pdF9pbnRlcnZhbCA9IG9sZF9vcHRzLnNfY29tbWl0X2ludGVydmFsO1xcbmZzL2V4dDQvc3VwZXIuYzo2ODY0OlxcdHNiaS1cXHUwMDNlc19taW5fYmF0Y2hfdGltZSA9IG9sZF9vcHRzLnNfbWluX2JhdGNoX3RpbWU7XFxuZnMvZXh0NC9zdXBlci5jLTY4NjUtXFx0c2JpLVxcdTAwM2VzX21heF9iYXRjaF90aW1lID0gb2xkX29wdHMuc19tYXhfYmF0Y2hfdGltZTtcXG4tLVxcbmZzL2piZDIvam91cm5hbC5jPTE1MTg9c3RhdGljIGpvdXJuYWxfdCAqam91cm5hbF9pbml0X2NvbW1vbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxcbi0tXFxuZnMvamJkMi9qb3VybmFsLmMtMTU1Ni1cXHRqb3VybmFsLVxcdTAwM2VqX2NvbW1pdF9pbnRlcnZhbCA9IChIWiAqIEpCRDJfREVGQVVMVF9NQVhfQ09NTUlUX0FHRSk7XFxuZnMvamJkMi9qb3VybmFsLmM6MTU1NzpcXHRqb3VybmFsLVxcdTAwM2VqX21pbl9iYXRjaF90aW1lID0gMDtcXG5mcy9qYmQyL2pvdXJuYWwuYy0xNTU4LVxcdGpvdXJuYWwtXFx1MDAzZWpfbWF4X2JhdGNoX3RpbWUgPSAxNTAwMDsgLyogMTVtcyAqL1xcbi0tXFxuZnMvamJkMi90cmFuc2FjdGlvbi5jPTE4ODg9aW50IGpiZDJfam91cm5hbF9zdG9wKGhhbmRsZV90ICpoYW5kbGUpXFxuLS1cXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmMtMTk2OC1cXHRcXHRjb21taXRfdGltZSA9IG1heF90KHU2NCwgY29tbWl0X3RpbWUsXFxuZnMvamJkMi90cmFuc2FjdGlvbi5jOjE5Njk6XFx0XFx0XFx0XFx0ICAgIDEwMDAqam91cm5hbC1cXHUwMDNlal9taW5fYmF0Y2hfdGltZSk7XFxuZnMvamJkMi90cmFuc2FjdGlvbi5jLTE5NzAtXFx0XFx0Y29tbWl0X3RpbWUgPSBtaW5fdCh1NjQsIGNvbW1pdF90aW1lLFxcbi0tXFxuaW5jbHVkZS9saW51eC9qYmQyLmg9NzYzPXN0cnVjdCBqb3VybmFsX3NcXG4tLVxcbmluY2x1ZGUvbGludXgvamJkMi5oLTExODAtXFx0LyoqXFxuaW5jbHVkZS9saW51eC9qYmQyLmg6MTE4MTpcXHQgKiBAal9taW5fYmF0Y2hfdGltZTpcXG5pbmNsdWRlL2xpbnV4L2piZDIuaC0xMTgyLVxcdCAqXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2piZDIuaC0xMTg1LVxcdCAqL1xcbmluY2x1ZGUvbGludXgvamJkMi5oOjExODY6XFx0dTMyXFx0XFx0XFx0al9taW5fYmF0Y2hfdGltZTtcXG5pbmNsdWRlL2xpbnV4L2piZDIuaC0xMTg3LVxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTEzMj11bmlvbiBicGZfaXRlcl9saW5rX2luZm8ge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTY0OS0gKlxcdFxcdFR3byBvcGFxdWUgdmFsdWVzIGFyZSB1c2VkIHRvIG1hbmFnZSBiYXRjaCBvcGVyYXRpb25zLFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDo2NTA6ICpcXHRcXHQqaW5fYmF0Y2gqIGFuZCAqb3V0X2JhdGNoKi4gSW5pdGlhbGx5LCAqaW5fYmF0Y2gqIG11c3QgYmUgc2V0XFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTY1MS0gKlxcdFxcdHRvIE5VTEwgdG8gYmVnaW4gdGhlIGJhdGNoZWQgb3BlcmF0aW9uLiBBZnRlciBlYWNoIHN1YnNlcXVlbnRcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNjUyLSAqXFx0XFx0KipCUEZfTUFQX0xPT0tVUF9CQVRDSCoqLCB0aGUgY2FsbGVyIHNob3VsZCBwYXNzIHRoZSByZXN1bHRhbnRcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NjUzOiAqXFx0XFx0Km91dF9iYXRjaCogYXMgdGhlICppbl9iYXRjaCogZm9yIHRoZSBuZXh0IG9wZXJhdGlvbiB0b1xcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDo2NTQ6ICpcXHRcXHRjb250aW51ZSBpdGVyYXRpb24gZnJvbSB0aGUgY3VycmVudCBwb2ludC4gQm90aCAqaW5fYmF0Y2gqIGFuZFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC02NTUtICpcXHRcXHQqb3V0X2JhdGNoKiBtdXN0IHBvaW50IHRvIG1lbW9yeSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBhIGtleSxcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC03MTctICpcXHRcXHRFYWNoIGVsZW1lbnQgc3BlY2lmaWVkIGluICprZXlzKiBpcyBzZXF1ZW50aWFsbHkgdXBkYXRlZCB0byB0aGVcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NzE4OiAqXFx0XFx0dmFsdWUgaW4gdGhlIGNvcnJlc3BvbmRpbmcgaW5kZXggaW4gKnZhbHVlcyouIFRoZSAqaW5fYmF0Y2gqXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTcxOS0gKlxcdFxcdGFuZCAqb3V0X2JhdGNoKiBwYXJhbWV0ZXJzIGFyZSBpZ25vcmVkIGFuZCBzaG91bGQgYmUgemVyb2VkLlxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTc2Ni0gKlxcdFxcdEVhY2ggZWxlbWVudCBzcGVjaWZpZWQgaW4gKmtleXMqIGlzIHNlcXVlbnRpYWxseSBkZWxldGVkLiBUaGVcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NzY3OiAqXFx0XFx0KmluX2JhdGNoKiwgKm91dF9iYXRjaCosIGFuZCAqdmFsdWVzKiBwYXJhbWV0ZXJzIGFyZSBpZ25vcmVkXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTc2OC0gKlxcdFxcdGFuZCBzaG91bGQgYmUgemVyb2VkLlxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTE1Mjc9dW5pb24gYnBmX2F0dHIge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTE1OTEtXFx0c3RydWN0IHsgLyogc3RydWN0IHVzZWQgYnkgQlBGX01BUF8qX0JBVENIIGNvbW1hbmRzICovXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjE1OTI6XFx0XFx0X19hbGlnbmVkX3U2NFxcdGluX2JhdGNoO1xcdC8qIHN0YXJ0IGJhdGNoLFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xNTkzLVxcdFxcdFxcdFxcdFxcdFxcdCAqIE5VTEwgdG8gc3RhcnQgZnJvbSBiZWdpbm5pbmdcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTE3NzM9X19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTc4Mi1cXHR2b2lkIF9fdXNlciAqdWtleXMgPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cXHUwMDNlYmF0Y2gua2V5cyk7XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MTc4MzpcXHR2b2lkIF9fdXNlciAqdWJhdGNoID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXFx1MDAzZWJhdGNoLmluX2JhdGNoKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xNzg0LVxcdHUzMiBiYXRjaCwgbWF4X2NvdW50LCBzaXplLCBidWNrZXRfc2l6ZSwgbWFwX2lkO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzI0NT1zdGF0aWMgaW50IF9fcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMjUyLVxcdHZvaWQgX191c2VyICp1a2V5cyA9IHU2NF90b191c2VyX3B0cihhdHRyLVxcdTAwM2ViYXRjaC5rZXlzKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMjUzOlxcdHZvaWQgX191c2VyICp1YmF0Y2ggPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cXHUwMDNlYmF0Y2guaW5fYmF0Y2gpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyNTQtXFx0dm9pZCAqY3Vyc29yID0gTlVMTCwgKmtleXMgPSBOVUxMLCAqdmFsdWVzID0gTlVMTCwgKmRzdF9rZXksICpkc3RfdmFsO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjEyMD1pbnQgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMTI0LVxcdHZvaWQgX191c2VyICp1b2JhdGNoID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXFx1MDAzZWJhdGNoLm91dF9iYXRjaCk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MjEyNTpcXHR2b2lkIF9fdXNlciAqdWJhdGNoID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXFx1MDAzZWJhdGNoLmluX2JhdGNoKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMTI2LVxcdHZvaWQgX191c2VyICp2YWx1ZXMgPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cXHUwMDNlYmF0Y2gudmFsdWVzKTtcXG4tLVxcbm1tL21lbW9yeS5jPTIzOTI9c3RhdGljIGludCBpbnNlcnRfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vbWVtb3J5LmMtMjQxMi1cXG5tbS9tZW1vcnkuYzoyNDEzOnN0YXRpYyBpbnQgaW5zZXJ0X3BhZ2VfaW5fYmF0Y2hfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwdGVfdCAqcHRlLFxcbm1tL21lbW9yeS5jLTI0MTQtXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgcGdwcm90X3QgcHJvdClcXG4tLVxcbm1tL21lbW9yeS5jPTI0Mjc9c3RhdGljIGludCBpbnNlcnRfcGFnZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL21lbW9yeS5jLTI0NjEtXFx0XFx0Zm9yIChwdGUgPSBzdGFydF9wdGU7IHB0ZV9pZHggXFx1MDAzYyBiYXRjaF9zaXplOyArK3B0ZSwgKytwdGVfaWR4KSB7XFxubW0vbWVtb3J5LmM6MjQ2MjpcXHRcXHRcXHRpbnQgZXJyID0gaW5zZXJ0X3BhZ2VfaW5fYmF0Y2hfbG9ja2VkKHZtYSwgcHRlLFxcbm1tL21lbW9yeS5jLTI0NjMtXFx0XFx0XFx0XFx0YWRkciwgcGFnZXNbY3Vycl9wYWdlX2lkeF0sIHByb3QpO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTI1NjQ9Ym9vbCBkZWNheV9wY3BfaGlnaChzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBlcl9jcHVfcGFnZXMgKnBjcClcXG5tbS9wYWdlX2FsbG9jLmMtMjU2NS17XFxubW0vcGFnZV9hbGxvYy5jOjI1NjY6XFx0aW50IGhpZ2hfbWluLCB0b19kcmFpbiwgdG9fZHJhaW5fYmF0Y2hlZCwgYmF0Y2g7XFxubW0vcGFnZV9hbGxvYy5jLTI1NjctXFx0Ym9vbCB0b2RvID0gZmFsc2U7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtMjU4NC1cXHR3aGlsZSAodG9fZHJhaW4gXFx1MDAzZSAwKSB7XFxubW0vcGFnZV9hbGxvYy5jOjI1ODU6XFx0XFx0dG9fZHJhaW5fYmF0Y2hlZCA9IG1pbih0b19kcmFpbiwgYmF0Y2gpO1xcbm1tL3BhZ2VfYWxsb2MuYy0yNTg2LVxcdFxcdHBjcF9zcGluX2xvY2tfbm9waW4ocGNwKTtcXG5tbS9wYWdlX2FsbG9jLmM6MjU4NzpcXHRcXHRmcmVlX3BjcHBhZ2VzX2J1bGsoem9uZSwgdG9fZHJhaW5fYmF0Y2hlZCwgcGNwLCAwKTtcXG5tbS9wYWdlX2FsbG9jLmMtMjU4OC1cXHRcXHRwY3Bfc3Bpbl91bmxvY2tfbm9waW4ocGNwKTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy0yNTkwLVxcbm1tL3BhZ2VfYWxsb2MuYzoyNTkxOlxcdFxcdHRvX2RyYWluIC09IHRvX2RyYWluX2JhdGNoZWQ7XFxubW0vcGFnZV9hbGxvYy5jLTI1OTItXFx0fVxcbi0tXFxubW0vc2x1Yi5jPTI4NTE9c3RhdGljIHZvaWQgX19rbWVtX2NhY2hlX2ZyZWVfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKTtcXG4tLVxcbm1tL3NsdWIuYy0yODYzLSAqL1xcbm1tL3NsdWIuYzoyODY0OnN0YXRpYyB1bnNpZ25lZCBpbnQgX19zaGVhZl9mbHVzaF9tYWluX2JhdGNoKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbm1tL3NsdWIuYy0yODY1LXtcXG4tLVxcbm1tL3NsdWIuYz0yODkyPXN0YXRpYyB2b2lkIHNoZWFmX2ZsdXNoX21haW4oc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuLS1cXG5tbS9zbHViLmMtMjg5OC1cXG5tbS9zbHViLmM6Mjg5OTpcXHRcXHRyZW1haW5pbmcgPSBfX3NoZWFmX2ZsdXNoX21haW5fYmF0Y2gocyk7XFxubW0vc2x1Yi5jLTI5MDAtXFxuLS1cXG5tbS9zbHViLmM9MjkwNz1zdGF0aWMgYm9vbCBzaGVhZl90cnlfZmx1c2hfbWFpbihzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL3NsdWIuYy0yOTE2LVxcdFxcdHJldCA9IHRydWU7XFxubW0vc2x1Yi5jOjI5MTc6XFx0XFx0cmVtYWluaW5nID0gX19zaGVhZl9mbHVzaF9tYWluX2JhdGNoKHMpO1xcbm1tL3NsdWIuYy0yOTE4LVxcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTEzMj11bmlvbiBicGZfaXRlcl9saW5rX2luZm8ge1xcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTY0OS0gKlxcdFxcdFR3byBvcGFxdWUgdmFsdWVzIGFyZSB1c2VkIHRvIG1hbmFnZSBiYXRjaCBvcGVyYXRpb25zLFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDo2NTA6ICpcXHRcXHQqaW5fYmF0Y2gqIGFuZCAqb3V0X2JhdGNoKi4gSW5pdGlhbGx5LCAqaW5fYmF0Y2gqIG11c3QgYmUgc2V0XFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTY1MS0gKlxcdFxcdHRvIE5VTEwgdG8gYmVnaW4gdGhlIGJhdGNoZWQgb3BlcmF0aW9uLiBBZnRlciBlYWNoIHN1YnNlcXVlbnRcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNjUyLSAqXFx0XFx0KipCUEZfTUFQX0xPT0tVUF9CQVRDSCoqLCB0aGUgY2FsbGVyIHNob3VsZCBwYXNzIHRoZSByZXN1bHRhbnRcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NjUzOiAqXFx0XFx0Km91dF9iYXRjaCogYXMgdGhlICppbl9iYXRjaCogZm9yIHRoZSBuZXh0IG9wZXJhdGlvbiB0b1xcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDo2NTQ6ICpcXHRcXHRjb250aW51ZSBpdGVyYXRpb24gZnJvbSB0aGUgY3VycmVudCBwb2ludC4gQm90aCAqaW5fYmF0Y2gqIGFuZFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC02NTUtICpcXHRcXHQqb3V0X2JhdGNoKiBtdXN0IHBvaW50IHRvIG1lbW9yeSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBhIGtleSxcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC03MTctICpcXHRcXHRFYWNoIGVsZW1lbnQgc3BlY2lmaWVkIGluICprZXlzKiBpcyBzZXF1ZW50aWFsbHkgdXBkYXRlZCB0byB0aGVcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NzE4OiAqXFx0XFx0dmFsdWUgaW4gdGhlIGNvcnJlc3BvbmRpbmcgaW5kZXggaW4gKnZhbHVlcyouIFRoZSAqaW5fYmF0Y2gqXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTcxOS0gKlxcdFxcdGFuZCAqb3V0X2JhdGNoKiBwYXJhbWV0ZXJzIGFyZSBpZ25vcmVkIGFuZCBzaG91bGQgYmUgemVyb2VkLlxcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTc2Ni0gKlxcdFxcdEVhY2ggZWxlbWVudCBzcGVjaWZpZWQgaW4gKmtleXMqIGlzIHNlcXVlbnRpYWxseSBkZWxldGVkLiBUaGVcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NzY3OiAqXFx0XFx0KmluX2JhdGNoKiwgKm91dF9iYXRjaCosIGFuZCAqdmFsdWVzKiBwYXJhbWV0ZXJzIGFyZSBpZ25vcmVkXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTc2OC0gKlxcdFxcdGFuZCBzaG91bGQgYmUgemVyb2VkLlxcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTE1Mjc9dW5pb24gYnBmX2F0dHIge1xcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTE1OTEtXFx0c3RydWN0IHsgLyogc3RydWN0IHVzZWQgYnkgQlBGX01BUF8qX0JBVENIIGNvbW1hbmRzICovXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjE1OTI6XFx0XFx0X19hbGlnbmVkX3U2NFxcdGluX2JhdGNoO1xcdC8qIHN0YXJ0IGJhdGNoLFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xNTkzLVxcdFxcdFxcdFxcdFxcdFxcdCAqIE5VTEwgdG8gc3RhcnQgZnJvbSBiZWdpbm5pbmdcXG4tLVxcbnRvb2xzL2xpYi9icGYvYnBmLmM9NTY4PWludCBicGZfbWFwX2ZyZWV6ZShpbnQgZmQpXFxuLS1cXG50b29scy9saWIvYnBmL2JwZi5jLTU4MC1cXG50b29scy9saWIvYnBmL2JwZi5jOjU4MTpzdGF0aWMgaW50IGJwZl9tYXBfYmF0Y2hfY29tbW9uKGludCBjbWQsIGludCBmZCwgdm9pZCAgKmluX2JhdGNoLFxcbnRvb2xzL2xpYi9icGYvYnBmLmMtNTgyLVxcdFxcdFxcdFxcdHZvaWQgKm91dF9iYXRjaCwgdm9pZCAqa2V5cywgdm9pZCAqdmFsdWVzLFxcbi0tXFxudG9vbHMvbGliL2JwZi9icGYuYy01OTQtXFx0YXR0ci5iYXRjaC5tYXBfZmQgPSBmZDtcXG50b29scy9saWIvYnBmL2JwZi5jOjU5NTpcXHRhdHRyLmJhdGNoLmluX2JhdGNoID0gcHRyX3RvX3U2NChpbl9iYXRjaCk7XFxudG9vbHMvbGliL2JwZi9icGYuYy01OTYtXFx0YXR0ci5iYXRjaC5vdXRfYmF0Y2ggPSBwdHJfdG9fdTY0KG91dF9iYXRjaCk7XFxuLS1cXG50b29scy9saWIvYnBmL2JwZi5jPTYwOT1pbnQgYnBmX21hcF9kZWxldGVfYmF0Y2goaW50IGZkLCBjb25zdCB2b2lkICprZXlzLCBfX3UzMiAqY291bnQsXFxuLS1cXG50b29scy9saWIvYnBmL2JwZi5jLTYxNS1cXG50b29scy9saWIvYnBmL2JwZi5jOjYxNjppbnQgYnBmX21hcF9sb29rdXBfYmF0Y2goaW50IGZkLCB2b2lkICppbl9iYXRjaCwgdm9pZCAqb3V0X2JhdGNoLCB2b2lkICprZXlzLFxcbnRvb2xzL2xpYi9icGYvYnBmLmMtNjE3LVxcdFxcdFxcdCB2b2lkICp2YWx1ZXMsIF9fdTMyICpjb3VudCxcXG4tLVxcbnRvb2xzL2xpYi9icGYvYnBmLmMtNjE5LXtcXG50b29scy9saWIvYnBmL2JwZi5jOjYyMDpcXHRyZXR1cm4gYnBmX21hcF9iYXRjaF9jb21tb24oQlBGX01BUF9MT09LVVBfQkFUQ0gsIGZkLCBpbl9iYXRjaCxcXG50b29scy9saWIvYnBmL2JwZi5jLTYyMS1cXHRcXHRcXHRcXHQgICAgb3V0X2JhdGNoLCBrZXlzLCB2YWx1ZXMsIGNvdW50LCBvcHRzKTtcXG4tLVxcbnRvb2xzL2xpYi9icGYvYnBmLmMtNjIzLVxcbnRvb2xzL2xpYi9icGYvYnBmLmM6NjI0OmludCBicGZfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKGludCBmZCwgdm9pZCAqaW5fYmF0Y2gsIHZvaWQgKm91dF9iYXRjaCxcXG50b29scy9saWIvYnBmL2JwZi5jLTYyNS1cXHRcXHRcXHRcXHQgICAgdm9pZCAqa2V5cywgdm9pZCAqdmFsdWVzLCBfX3UzMiAqY291bnQsXFxuLS1cXG50b29scy9saWIvYnBmL2JwZi5jLTYyOC1cXHRyZXR1cm4gYnBmX21hcF9iYXRjaF9jb21tb24oQlBGX01BUF9MT09LVVBfQU5EX0RFTEVURV9CQVRDSCxcXG50b29scy9saWIvYnBmL2JwZi5jOjYyOTpcXHRcXHRcXHRcXHQgICAgZmQsIGluX2JhdGNoLCBvdXRfYmF0Y2gsIGtleXMsIHZhbHVlcyxcXG50b29scy9saWIvYnBmL2JwZi5jLTYzMC1cXHRcXHRcXHRcXHQgICAgY291bnQsIG9wdHMpO1xcbi0tXFxudG9vbHMvbGliL2JwZi9icGYuaD0yMDc9TElCQlBGX0FQSSBpbnQgYnBmX21hcF9kZWxldGVfYmF0Y2goaW50IGZkLCBjb25zdCB2b2lkICprZXlzLFxcbi0tXFxudG9vbHMvbGliL2JwZi9icGYuaC0yMTMtICpcXG50b29scy9saWIvYnBmL2JwZi5oOjIxNDogKiBUaGUgcGFyYW1ldGVyICppbl9iYXRjaCogaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIGJhdGNoIHRvXFxudG9vbHMvbGliL2JwZi9icGYuaDoyMTU6ICogcmVhZC4gKm91dF9iYXRjaCogaXMgYW4gb3V0cHV0IHBhcmFtZXRlciB0aGF0IHNob3VsZCBiZSBwYXNzZWQgYXMgKmluX2JhdGNoKlxcbnRvb2xzL2xpYi9icGYvYnBmLmgtMjE2LSAqIHRvIHN1YnNlcXVlbnQgY2FsbHMgdG8gKipicGZfbWFwX2xvb2t1cF9iYXRjaCgpKiouIE5VTEwgY2FuIGJlIHBhc3NlZCBmb3JcXG50b29scy9saWIvYnBmL2JwZi5oOjIxNzogKiAqaW5fYmF0Y2gqIHRvIGluZGljYXRlIHRoYXQgdGhlIGJhdGNoZWQgbG9va3VwIHN0YXJ0cyBmcm9tIHRoZSBiZWdpbm5pbmcgb2ZcXG50b29scy9saWIvYnBmL2JwZi5oOjIxODogKiB0aGUgbWFwLiBCb3RoICppbl9iYXRjaCogYW5kICpvdXRfYmF0Y2gqIG11c3QgcG9pbnQgdG8gbWVtb3J5IGxhcmdlIGVub3VnaCB0b1xcbnRvb2xzL2xpYi9icGYvYnBmLmgtMjE5LSAqIGhvbGQgYSBzaW5nbGUga2V5LCBleGNlcHQgZm9yIG1hcHMgb2YgdHlwZSAqKkJQRl9NQVBfVFlQRV97SEFTSCwgUEVSQ1BVX0hBU0gsXFxuLS1cXG50b29scy9saWIvYnBmL2JwZi5oLTIyOC0gKiBAcGFyYW0gZmQgQlBGIG1hcCBmaWxlIGRlc2NyaXB0b3JcXG50b29scy9saWIvYnBmL2JwZi5oOjIyOTogKiBAcGFyYW0gaW5fYmF0Y2ggYWRkcmVzcyBvZiB0aGUgZmlyc3QgZWxlbWVudCBpbiBiYXRjaCB0byByZWFkLCBjYW4gcGFzcyBOVUxMIHRvXFxudG9vbHMvbGliL2JwZi9icGYuaC0yMzAtICogaW5kaWNhdGUgdGhhdCB0aGUgYmF0Y2hlZCBsb29rdXAgc3RhcnRzIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgbWFwLlxcbnRvb2xzL2xpYi9icGYvYnBmLmg6MjMxOiAqIEBwYXJhbSBvdXRfYmF0Y2ggb3V0cHV0IHBhcmFtZXRlciB0aGF0IHNob3VsZCBiZSBwYXNzZWQgdG8gbmV4dCBjYWxsIGFzICppbl9iYXRjaCpcXG50b29scy9saWIvYnBmL2JwZi5oLTIzMi0gKiBAcGFyYW0ga2V5cyBwb2ludGVyIHRvIGFuIGFycmF5IGxhcmdlIGVub3VnaCBmb3IgKmNvdW50KiBrZXlzXFxuLS1cXG50b29scy9saWIvYnBmL2JwZi5oLTI0My0gKi9cXG50b29scy9saWIvYnBmL2JwZi5oOjI0NDpMSUJCUEZfQVBJIGludCBicGZfbWFwX2xvb2t1cF9iYXRjaChpbnQgZmQsIHZvaWQgKmluX2JhdGNoLCB2b2lkICpvdXRfYmF0Y2gsXFxudG9vbHMvbGliL2JwZi9icGYuaC0yNDUtXFx0XFx0XFx0XFx0ICAgIHZvaWQgKmtleXMsIHZvaWQgKnZhbHVlcywgX191MzIgKmNvdW50LFxcbi0tXFxudG9vbHMvbGliL2JwZi9icGYuaC0yNTItICogQHBhcmFtIGZkIEJQRiBtYXAgZmlsZSBkZXNjcmlwdG9yXFxudG9vbHMvbGliL2JwZi9icGYuaDoyNTM6ICogQHBhcmFtIGluX2JhdGNoIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IGVsZW1lbnQgaW4gYmF0Y2ggdG8gcmVhZCwgY2FuIHBhc3MgTlVMTCB0b1xcbnRvb2xzL2xpYi9icGYvYnBmLmgtMjU0LSAqIGdldCBhZGRyZXNzIG9mIHRoZSBmaXJzdCBlbGVtZW50IGluICpvdXRfYmF0Y2gqLiBJZiBub3QgTlVMTCwgbXVzdCBiZSBsYXJnZVxcbi0tXFxudG9vbHMvbGliL2JwZi9icGYuaC0yNTctICogb2Yga2V5IHNpemUuXFxudG9vbHMvbGliL2JwZi9icGYuaDoyNTg6ICogQHBhcmFtIG91dF9iYXRjaCBvdXRwdXQgcGFyYW1ldGVyIHRoYXQgc2hvdWxkIGJlIHBhc3NlZCB0byBuZXh0IGNhbGwgYXMgKmluX2JhdGNoKlxcbnRvb2xzL2xpYi9icGYvYnBmLmgtMjU5LSAqIEBwYXJhbSBrZXlzIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgKmNvdW50KiBrZXlzXFxuLS1cXG50b29scy9saWIvYnBmL2JwZi5oLTI3Mi0gKi9cXG50b29scy9saWIvYnBmL2JwZi5oOjI3MzpMSUJCUEZfQVBJIGludCBicGZfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKGludCBmZCwgdm9pZCAqaW5fYmF0Y2gsXFxudG9vbHMvbGliL2JwZi9icGYuaC0yNzQtXFx0XFx0XFx0XFx0XFx0dm9pZCAqb3V0X2JhdGNoLCB2b2lkICprZXlzLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL21hcF90ZXN0cy9tYXBfcGVyY3B1X3N0YXRzLmM9NjM9c3RhdGljIHZvaWQgZGVsZXRlX2FuZF9sb29rdXBfYmF0Y2goaW50IG1hcF9mZCwgdm9pZCAqa2V5cywgX191MzIgY291bnQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbWFwX3Rlc3RzL21hcF9wZXJjcHVfc3RhdHMuYy02NS1cXHRzdGF0aWMgX191OCB2YWx1ZXNbKDggXFx1MDAzY1xcdTAwM2MgMTApICogTUFYX0VOVFJJRVNdO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9tYXBfdGVzdHMvbWFwX3BlcmNwdV9zdGF0cy5jOjY2OlxcdHZvaWQgKmluX2JhdGNoID0gTlVMTCwgKm91dF9iYXRjaDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbWFwX3Rlc3RzL21hcF9wZXJjcHVfc3RhdHMuYy02Ny1cXHRfX3UzMiBzYXZlX2NvdW50ID0gY291bnQ7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbWFwX3Rlc3RzL21hcF9wZXJjcHVfc3RhdHMuYy03MC1cXHRyZXQgPSBicGZfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcF9mZCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbWFwX3Rlc3RzL21hcF9wZXJjcHVfc3RhdHMuYzo3MTpcXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2aW5fYmF0Y2gsIFxcdTAwMjZvdXRfYmF0Y2gsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL21hcF90ZXN0cy9tYXBfcGVyY3B1X3N0YXRzLmMtNzItXFx0XFx0XFx0XFx0XFx0ICAgICAga2V5cywgdmFsdWVzLCBcXHUwMDI2Y291bnQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA3OjQ1OjMzLjcxMzE5NzgyMloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzU0OTk5NjY0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEJ1Z3MgaW4gVmhvc3QtVkRQQSBJT1RMQiBCYXRjaGluZyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGB2aG9zdF92ZHBhYCBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIElPVExCIGJhdGNoaW5nIGxvZ2ljLiBJdCBsb29rcyBsaWtlIGB2LVx1MDAzZWluX2JhdGNoYCBpcyB0aGUga2V5IGZsYWcgaGVyZSwgdXNlZCBpbiBgdmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZ2AsIGB2aG9zdF92ZHBhX21hcGAsIGFuZCBgdmhvc3RfdmRwYV91bm1hcGAuIEkgc2VlIHRoYXQgaWYgYHYtXHUwMDNlaW5fYmF0Y2hgIGlzIHRydWUgaW4gYHZob3N0X3ZkcGFfbWFwYCwgaXQgc2tpcHMgY2FsbGluZyBgb3BzLVx1MDAzZXNldF9tYXBgIGZvciBpbmRpdmlkdWFsIG1hcC91bm1hcCBvcGVyYXRpb25zLCBkZWZlcnJpbmcgdGhlbSB1bnRpbCBhIGBWSE9TVF9JT1RMQl9CQVRDSF9FTkRgIG1lc3NhZ2UuIEF0IHRoYXQgcG9pbnQsIGBvcHMtXHUwMDNlc2V0X21hcGAgaXMgc3VwcG9zZWQgdG8gYmUgY2FsbGVkIG9uY2UgZm9yIHRoZSBlbnRpcmUgYmF0Y2guXG5cblRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIGNydWNpYWwgaXNzdWU6IGl0IGNvbXBsZXRlbHkgaWdub3JlZCB0aGUgcmV0dXJuIHZhbHVlIG9mIGBvcHMtXHUwMDNlc2V0X21hcGAuICBJZiBgb3BzLVx1MDAzZXNldF9tYXBgIGZhaWxlZCwgdGhlIGVycm9yIHdhc24ndCBoYW5kbGVkLiAgVGhlIHJlY2VudCBwYXRjaCBhdHRlbXB0ZWQgdG8gZml4IHRoaXMgYnkgY2hlY2tpbmcgdGhlIHJldHVybiB2YWx1ZS4gSG93ZXZlciwgYWZ0ZXIgY2FyZWZ1bGx5IGxvb2tpbmcgYXQgdGhlIHBhdGNoLCBJIHRoaW5rIHRoZSBmaXggbWlnaHQgaGF2ZSBpbnRyb2R1Y2VkIGEgbmV3IGJ1ZyFcblxuSW4gdGhlIHBhdGNoZWQgY29kZSwgdGhleSd2ZSBhZGRlZCB0aGlzOlxuXG5gYGBjXG5cdFx0aWYgKHYtXHUwMDNlaW5fYmF0Y2ggXHUwMDI2XHUwMDI2IG9wcy1cdTAwM2VzZXRfbWFwKSB7XG5cdFx0XHRyID0gb3BzLVx1MDAzZXNldF9tYXAodmRwYSwgYXNpZCwgaW90bGIpO1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuYGBgXG5cblRoZSBwcm9ibGVtIGlzIHRoZSBgYnJlYWtgIHN0YXRlbWVudCBpbnNpZGUgdGhlIGBpZmAgYmxvY2suICBJZiBgb3BzLVx1MDAzZXNldF9tYXBgIHJldHVybnMgc3VjY2Vzc2Z1bGx5LCB0aGUgYGJyZWFrYCBpcyBleGVjdXRlZC4gIE1vcmUgaW1wb3J0YW50bHksIGV2ZW4gaWYgYG9wcy1cdTAwM2VzZXRfbWFwYCByZXR1cm5zIGFuIGVycm9yIChhIG5vbi16ZXJvIHZhbHVlKSwgdGhlIGBicmVha2AgaXMgc3RpbGwgZXhlY3V0ZWQuIFRoaXMgY2F1c2VzIHRoZSBsb29wIHRvIGV4aXQgKndpdGhvdXQqIHJlc2V0dGluZyBgdi1cdTAwM2Vpbl9iYXRjaGAgdG8gYGZhbHNlYCEgIFxuXG5UaGlzIG1lYW5zIHRoYXQgYHYtXHUwMDNlaW5fYmF0Y2hgIGlzIGxlZnQgYXMgYHRydWVgIHJlZ2FyZGxlc3Mgb2YgdGhlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiBgb3BzLVx1MDAzZXNldF9tYXBgLiBTdWJzZXF1ZW50IG1hcC91bm1hcCBvcGVyYXRpb25zIHdpbGwgaW5jb3JyZWN0bHkgYXNzdW1lIHRoZXkncmUgc3RpbGwgaW4gYSBiYXRjaCBhbmQgd2lsbCAqbm90KiBjYWxsIGBvcHMtXHUwMDNlc2V0X21hcGAuIEVzc2VudGlhbGx5LCBhbGwgZnV0dXJlIG1hcC91bm1hcCBvcGVyYXRpb25zIHdpbGwgYmUgYmF0Y2hlZCBpbmRlZmluaXRlbHkuIFxuXG5JJ3ZlIGNoZWNrZWQgd2hlcmUgYHYtXHUwMDNlaW5fYmF0Y2hgIGlzIHNldCB0byBgZmFsc2VgLCBhbmQgaXQncyBvbmx5IGRvbmUgaW4gYHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl9tc2dgIGFuZCBgdmhvc3RfdmRwYV9yZXNldGAuICBTbywgaWYgdGhpcyBjb2RlIHBhdGggaXMgaGl0LCBgdi1cdTAwM2Vpbl9iYXRjaGAgcmVtYWlucyB0cnVlIHVudGlsIGEgcmVzZXQuXG5cbkhvd2V2ZXIsIHRoZXJlIGlzIGFuIGltcG9ydGFudCBjaGVjazogYGlmICh2LVx1MDAzZWluX2JhdGNoIFx1MDAyNlx1MDAyNiB2LVx1MDAzZWJhdGNoX2FzaWQgIT0gYXNpZClgLiBTbyBpdCBzZWVtcyBiYXRjaGVkIG9wZXJhdGlvbnMgYXJlIGFsbG93ZWQgb25seSBpZiB0aGUgYXNpZCBpcyB0aGUgc2FtZS5cblxuVGhlcmVmb3JlLCB0aGUgcGF0Y2ggYXV0aG9yICpwcm9iYWJseSogaW50ZW5kZWQgdG8gZG8gdGhpcyAod2hlcmUgYHYtXHUwMDNlaW5fYmF0Y2hgIGlzIGNvcnJlY3RseSByZXNldCk6XG5cbmBgYGNcblx0XHRpZiAodi1cdTAwM2Vpbl9iYXRjaCBcdTAwMjZcdTAwMjYgb3BzLVx1MDAzZXNldF9tYXApXG5cdFx0XHRyID0gb3BzLVx1MDAzZXNldF9tYXAodmRwYSwgYXNpZCwgaW90bGIpO1xuXHRcdHYtXHUwMDNlaW5fYmF0Y2ggPSBmYWxzZTtcblx0XHRicmVhaztcbmBgYFxuXG5CdXQgdGhleSBhY2NpZGVudGFsbHkgd3JvdGUgdGhlIGNvZGUgYXMgYWJvdmUuIFNvLCBpdCdzIGRlZmluaXRlbHkgYSBidWcgYW5kIGl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29kZS4gSXQgc2hvdWxkIGJlIGZ1enotdGVzdGVkIHRvIHZlcmlmeSB0aGlzLlxuXG5UbyB0ZXN0IHRoaXMgZWZmZWN0aXZlbHksIEknbGwgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGJ1aWxkIGhhcyBgVkhPU1RfVkRQQWAsIGBWRFBBYCwgYW5kIHBvc3NpYmx5IGBWRFBBX1NJTWAgYW5kIGBWRFBBX1NJTV9ORVRgIGVuYWJsZWQsIGFjY29yZGluZyB0byBgZHJpdmVycy92ZHBhL3ZkcGFfc2ltL0tjb25maWdgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTgxMiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDc6NDU6NDcuMjYzMTk2NTc4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTAxNTQ0NTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWRFBBX1NJTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZkcGEvS2NvbmZpZz0xMD1pZiBWRFBBXFxuZHJpdmVycy92ZHBhL0tjb25maWctMTEtXFxuZHJpdmVycy92ZHBhL0tjb25maWc6MTI6Y29uZmlnIFZEUEFfU0lNXFxuZHJpdmVycy92ZHBhL0tjb25maWctMTMtXFx0dHJpc3RhdGUgXFxcInZEUEEgZGV2aWNlIHNpbXVsYXRvciBjb3JlXFxcIlxcbi0tXFxuZHJpdmVycy92ZHBhL0tjb25maWctMjAtXFxuZHJpdmVycy92ZHBhL0tjb25maWc6MjE6Y29uZmlnIFZEUEFfU0lNX05FVFxcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTIyLVxcdHRyaXN0YXRlIFxcXCJ2RFBBIHNpbXVsYXRvciBmb3IgbmV0d29ya2luZyBkZXZpY2VcXFwiXFxuLS1cXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0yNy1cXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZzoyODpjb25maWcgVkRQQV9TSU1fQkxPQ0tcXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0yOS1cXHR0cmlzdGF0ZSBcXFwidkRQQSBzaW11bGF0b3IgZm9yIGJsb2NrIGRldmljZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDc6NDU6NDkuMTY0NzQ2NTA1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MDUxNjM4ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBDaGVja2xpc3QqKlxuXG5Pa2F5LCBsZXQgbWUgbGF5IHRoaXMgb3V0IGluIGEgbG9naWNhbCBtYW5uZXIgZm9yIG15IG93biBzYW5pdHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBpbmNsdWRlIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gc3ltYm9scyBmb3IgdGhlIHZpcnR1YWwgRGF0YSBQbGFuZSBBY2NlbGVyYXRpb24gKHZEUEEpIHNldHVwIEknbSB3b3JraW5nIG9uLiBTcGVjaWZpY2FsbHksIEknbGwgbmVlZCB0byBpbmNsdWRlIGBWSE9TVF9WRFBBYCwgYFZEUEFgLCBgVkRQQV9TSU1gLCBgVkRQQV9TSU1fTkVUYCwgYW5kIGBWRFBBX1NJTV9CTE9DS2AuXG5cbkhhbmcgb24sIGRvIEkgYWN0dWFsbHkgbmVlZCBgVkhPU1RgIGRpcmVjdGx5PyBBaCwgcmlnaHQuIGBWSE9TVF9WRFBBYCBhdXRvbWF0aWNhbGx5IHNlbGVjdHMgYFZIT1NUYCwgc28gSSBjYW4gc3RyZWFtbGluZSB0aGF0IGEgYml0LiBTbyByZWFsbHksIGBWSE9TVF9WRFBBYCBzaG91bGQgYmUgdGhlIGtleSB0byBnZXR0aW5nIGBWSE9TVGAgZW5hYmxlZCBjb3JyZWN0bHksIHNpbXBsaWZ5aW5nIHRoZSBkZXBlbmRlbmNpZXMuXG5cbk5vdywgbGV0J3MganVzdCBkbyBhIHF1aWNrIHNjYW4gdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnkgY3JpdGljYWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIHRoaW5rIGBDT05GSUdfVkhPU1RfVkRQQWAgaXMgdGhlIG1haW4gb25lIEkgbmVlZCB0byBmb2N1cyBvbiBhdCB0aGUgdG9wIGxldmVsLlxuXG5OZXh0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29yZSBmdW5jdGlvbnMuIE15IGZvY3VzIG5vdyBpcyBvbiB0aGVzZSBzeW1ib2xzIHJlbGF0ZWQgdG8gdGhlIEkvTyB0cmFuc2xhdGlvbiBsb29rYXNpZGUgYnVmZmVyIChJT1RMQikgYW5kIG1hcHBpbmc6IGB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnYCwgYHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl91cGRhdGVgLCBgdmhvc3RfdmRwYV9tYXBgLCBhbmQgYHZob3N0X3ZkcGFfdW5tYXBgLiBUaGVzZSBzZWVtIGNlbnRyYWwgdG8gdGhlIGFjdHVhbCBkYXRhIHBhdGggaGFuZGxpbmcuXG5cbkFuZCBmaW5hbGx5LCBiZWZvcmUgSSBtb3ZlIG9uLCBJJ2xsIGRvdWJsZS1jaGVjayBgdmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZ2AgYW5kIGdpdmUgaXQgYSBxdWljayByZXZpZXcgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIG1ha2Ugc3VyZSBJIGtub3cgaG93IGl0J3MgaW1wbGVtZW50ZWQuIEknbGwgZmluZCBpdCBpbiBgZHJpdmVycy92aG9zdC92ZHBhLmNgLCBJIGJlbGlldmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzOTE0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA3OjQ1OjU0LjU2OTkxMzAyMloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC92ZHBhLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI4MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI4MDpcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4xMjgxOlxcdFxcdH1cXG4xMjgyOlxcdFxcbjEyODM6XFx0XFx0c3dpdGNoIChtc2ctXFx1MDAzZXR5cGUpIHtcXG4xMjg0OlxcdFxcdGNhc2UgVkhPU1RfSU9UTEJfVVBEQVRFOlxcbjEyODU6XFx0XFx0XFx0ciA9IHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl91cGRhdGUodiwgaW90bGIsIG1zZyk7XFxuMTI4NjpcXHRcXHRcXHRicmVhaztcXG4xMjg3OlxcdFxcdGNhc2UgVkhPU1RfSU9UTEJfSU5WQUxJREFURTpcXG4xMjg4OlxcdFxcdFxcdHZob3N0X3ZkcGFfdW5tYXAodiwgaW90bGIsIG1zZy1cXHUwMDNlaW92YSwgbXNnLVxcdTAwM2VzaXplKTtcXG4xMjg5OlxcdFxcdFxcdGJyZWFrO1xcbjEyOTA6XFx0XFx0Y2FzZSBWSE9TVF9JT1RMQl9CQVRDSF9CRUdJTjpcXG4xMjkxOlxcdFxcdFxcdHYtXFx1MDAzZWJhdGNoX2FzaWQgPSBhc2lkO1xcbjEyOTI6XFx0XFx0XFx0di1cXHUwMDNlaW5fYmF0Y2ggPSB0cnVlO1xcbjEyOTM6XFx0XFx0XFx0YnJlYWs7XFxuMTI5NDpcXHRcXHRjYXNlIFZIT1NUX0lPVExCX0JBVENIX0VORDpcXG4xMjk1OlxcdFxcdFxcdGlmICh2LVxcdTAwM2Vpbl9iYXRjaCBcXHUwMDI2XFx1MDAyNiBvcHMtXFx1MDAzZXNldF9tYXApIHtcXG4xMjk2OlxcdFxcdFxcdFxcdHIgPSBvcHMtXFx1MDAzZXNldF9tYXAodmRwYSwgYXNpZCwgaW90bGIpO1xcbjEyOTc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTI5ODpcXHRcXHRcXHR9XFxuMTI5OTpcXHRcXHRcXHR2LVxcdTAwM2Vpbl9iYXRjaCA9IGZhbHNlO1xcbjEzMDA6XFx0XFx0XFx0YnJlYWs7XFxuMTMwMTpcXHRcXHRkZWZhdWx0OlxcbjEzMDI6XFx0XFx0XFx0ciA9IC1FSU5WQUw7XFxuMTMwMzpcXHRcXHRcXHRicmVhaztcXG4xMzA0OlxcdFxcdH1cXG4xMzA1OlxcdHVubG9jazpcXG4xMzA2OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGV2LVxcdTAwM2VtdXRleCk7XFxuMTMwNzpcXHRcXG4xMzA4OlxcdFxcdHJldHVybiByO1xcbjEzMDk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwNzo0NTo1NC41NzAwMjY5NDJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njk5MzcxNTg1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHZob3N0X3ZkcGEgSU9UTEIgQmF0Y2ggSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIFRoZSBrZXkgZnVuY3Rpb24gaGVyZSBpcyBkZWZpbml0ZWx5IGB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnYCwgYW5kIHllcywgaXQncyByZWFjaGFibGUgYW5kIHdvcmtpbmcgYXMgZXhwZWN0ZWQuIFRoZSBjcnV4IG9mIHRoZSBpc3N1ZSBpcyB0aGlzOiBgdi1cdTAwM2Vpbl9iYXRjaGAgaXNuJ3QgYmVpbmcgcmVzZXQgdG8gYGZhbHNlYCB3aGVuIGBvcHMtXHUwMDNlc2V0X21hcGAgaXMgZXhlY3V0ZWQgd2l0aGluIHRoZSBgVkhPU1RfSU9UTEJfQkFUQ0hfRU5EYCBoYW5kbGluZy5cblxuVGhpbmsgYWJvdXQgaXQgLSBpZiBgb3BzLVx1MDAzZXNldF9tYXBgIGlzIGNhbGxlZCBhbmQgd2UgZXhpdCB0aGUgc3dpdGNoIHN0YXRlbWVudCB3aXRob3V0IHJlc2V0dGluZyB0aGF0IGZsYWcsIHN1YnNlcXVlbnQgYFZIT1NUX0lPVExCX1VQREFURWAgbWVzc2FnZXMgd2lsbCBiZSBpbmNvcnJlY3RseSB0cmVhdGVkIGFzIHBhcnQgb2YgdGhlICpzYW1lKiBiYXRjaC4gTWVhbmluZyBgb3BzLVx1MDAzZXNldF9tYXBgIHdvbid0IGJlIGNhbGxlZCBpbmRpdmlkdWFsbHkgZm9yIHRob3NlIHVwZGF0ZXMuIFRoYXQncyBhIHNlcmlvdXMgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0IGJyZWFrcyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3Igb2YgaG93IHRoZXNlIElPVExCIGJhdGNoZXMgc2hvdWxkIGJlIHByb2Nlc3NlZC4gV2Ugd2lsbCBjYWxsIHRoZSByZXN1bHRzIG9mIHRoZSBzZXQgZnVuY3Rpb25zIGBzZXQtcmVzdWx0c2AuXG5cbkknbSB0aGlua2luZyB0aGlzIGFmZmVjdHMgc3lzdGVtcyBjb25maWd1cmVkIHdpdGggYFZIT1NUX1ZEUEFgLCBgVkRQQWAsIGBWRFBBX1NJTWAsIGBWRFBBX1NJTV9ORVRgLCBhbmQgYFZEUEFfU0lNX0JMT0NLYC4gVGhlIHBhdGNoIG1vZGlmaWVzIGB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnYCBhbmQgaGFzIGNoYW5nZWQgdGhlIGNvbnRyb2wgZmxvdywgY2F1c2luZyBhIHBvdGVudGlhbCBidWcuIEl0IGlzIHJlYWNoYWJsZSB2aWEgdmhvc3QgaW9jdGxzIG9yIGNoYXJhY3RlciBkZXZpY2Ugd3JpdGVzIGZyb20gdXNlcnNwYWNlLiBUaGUgbGFjayBvZiByZXNldHRpbmcgYHYtXHUwMDNlaW5fYmF0Y2hgIGFmdGVyIGNhbGxpbmcgYG9wcy1cdTAwM2VzZXRfbWFwYCBpcyB0aGUgbGlrZWx5IGNhdXNlIG9mIHRoZSBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ5MjYsIk91dHB1dFRva2VucyI6MTg4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDc6NDY6MDEuNTYzNzQ1MjgzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU2NDU2NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZIT1NUX1ZEUEFcIixcbiAgICBcIlZEUEFcIixcbiAgICBcIlZEUEFfU0lNXCIsXG4gICAgXCJWRFBBX1NJTV9ORVRcIixcbiAgICBcIlZEUEFfU0lNX0JMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiBWSE9TVF9JT1RMQl9CQVRDSF9FTkQgaW4gdmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZy4gSXQgY2hhbmdlcyB0aGUgY29udHJvbCBmbG93IHN1Y2ggdGhhdCBpZiBvcHMtXFx1MDAzZXNldF9tYXAgaXMgZXhlY3V0ZWQsIHRoZSBmdW5jdGlvbiBicmVha3Mgb3V0IG9mIHRoZSBzd2l0Y2ggc3RhdGVtZW50IGJlZm9yZSBzZXR0aW5nIHYtXFx1MDAzZWluX2JhdGNoID0gZmFsc2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgdkRQQSBJT1RMQiBiYXRjaGVzIGFyZSBwcm9jZXNzZWQgYW5kIGNvdWxkIHBvdGVudGlhbGx5IGxlYWQgdG8gaW5jb3JyZWN0IGJhdGNoIHN0YXRlIG1hbmFnZW1lbnQuIEl0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdmhvc3QgaW9jdGxzL2NoYXJhY3RlciBkZXZpY2Ugd3JpdGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZIT1NUX1ZEUEFcIixcbiAgICBcIlZEUEFcIixcbiAgICBcIlZEUEFfU0lNXCIsXG4gICAgXCJWRFBBX1NJTV9ORVRcIixcbiAgICBcIlZEUEFfU0lNX0JMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiBWSE9TVF9JT1RMQl9CQVRDSF9FTkQgaW4gdmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZy4gSXQgY2hhbmdlcyB0aGUgY29udHJvbCBmbG93IHN1Y2ggdGhhdCBpZiBvcHMtXFx1MDAzZXNldF9tYXAgaXMgZXhlY3V0ZWQsIHRoZSBmdW5jdGlvbiBicmVha3Mgb3V0IG9mIHRoZSBzd2l0Y2ggc3RhdGVtZW50IGJlZm9yZSBzZXR0aW5nIHYtXFx1MDAzZWluX2JhdGNoID0gZmFsc2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgdkRQQSBJT1RMQiBiYXRjaGVzIGFyZSBwcm9jZXNzZWQgYW5kIGNvdWxkIHBvdGVudGlhbGx5IGxlYWQgdG8gaW5jb3JyZWN0IGJhdGNoIHN0YXRlIG1hbmFnZW1lbnQuIEl0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdmhvc3QgaW9jdGxzL2NoYXJhY3RlciBkZXZpY2Ugd3JpdGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdfmnb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-16 07:36:32 +0000 UTC FinishedAt: 2026-07-16 07:46:03 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_VDPA", "VDPA", "VDPA_SIM", "VDPA_SIM_NET", "VDPA_SIM_BLOCK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_VDPA", "VDPA", "VDPA_SIM", "VDPA_SIM_NET", "VDPA_SIM_BLOCK" ], "series_id": "ff4a72f9-93fe-49b7-9969-a8a478c02610" }, "track": "KASAN", "fuzz": { "focus": [ "kvm", "net" ], "focus_symbols": [ "vhost_vdpa_process_iotlb_msg" ], "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+CgkJCTx0ZD4yMDI2LzA3LzE2IDA3OjQ0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX1ZEUEEmIzM0OywKICAgICYjMzQ7VkRQQSYjMzQ7LAogICAgJiMzNDtWRFBBX1NJTSYjMzQ7LAogICAgJiMzNDtWRFBBX1NJTV9ORVQmIzM0OywKICAgICYjMzQ7VkRQQV9TSU1fQkxPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiBWSE9TVF9JT1RMQl9CQVRDSF9FTkQgaW4gdmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZy4gSXQgY2hhbmdlcyB0aGUgY29udHJvbCBmbG93IHN1Y2ggdGhhdCBpZiBvcHMtXHUwMDNlc2V0X21hcCBpcyBleGVjdXRlZCwgdGhlIGZ1bmN0aW9uIGJyZWFrcyBvdXQgb2YgdGhlIHN3aXRjaCBzdGF0ZW1lbnQgYmVmb3JlIHNldHRpbmcgdi1cdTAwM2Vpbl9iYXRjaCA9IGZhbHNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IHZEUEEgSU9UTEIgYmF0Y2hlcyBhcmUgcHJvY2Vzc2VkIGFuZCBjb3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIGluY29ycmVjdCBiYXRjaCBzdGF0ZSBtYW5hZ2VtZW50LiBJdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHZob3N0IGlvY3Rscy9jaGFyYWN0ZXIgZGV2aWNlIHdyaXRlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwNzo0NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGVkM2JjNDUwYWZiMWUyNDc3ZGI4MGQ0ZDAyNTlmMDFhZmI5MjNkOWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAxNiAwNzo0NDozNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3ZkcGEuYyBiL2RyaXZlcnMvdmhvc3QvdmRwYS5jXG5pbmRleCBhYzU1Mjc1ZmEwZDBhZS4uOTA4Y2EzODNiMTUyMmEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Zob3N0L3ZkcGEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92aG9zdC92ZHBhLmNcbkBAIC0xMjkyLDggJiM0MzsxMjkyLDEwIEBAIHN0YXRpYyBpbnQgdmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHUzMiBhc2lkLFxuIFx0XHR2LVx1MDAzZWluX2JhdGNoID0gdHJ1ZTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFZIT1NUX0lPVExCX0JBVENIX0VORDpcbi1cdFx0aWYgKHYtXHUwMDNlaW5fYmF0Y2ggXHUwMDI2XHUwMDI2IG9wcy1cdTAwM2VzZXRfbWFwKVxuLVx0XHRcdG9wcy1cdTAwM2VzZXRfbWFwKHZkcGEsIGFzaWQsIGlvdGxiKTtcbiYjNDM7XHRcdGlmICh2LVx1MDAzZWluX2JhdGNoIFx1MDAyNlx1MDAyNiBvcHMtXHUwMDNlc2V0X21hcCkge1xuJiM0MztcdFx0XHRyID0gb3BzLVx1MDAzZXNldF9tYXAodmRwYSwgYXNpZCwgaW90bGIpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiBcdFx0di1cdTAwM2Vpbl9iYXRjaCA9IGZhbHNlO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDc6NDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkhPU1RfVkRQQSYjMzQ7LAogICAgJiMzNDtWRFBBJiMzNDssCiAgICAmIzM0O1ZEUEFfU0lNJiMzNDssCiAgICAmIzM0O1ZEUEFfU0lNX05FVCYjMzQ7LAogICAgJiMzNDtWRFBBX1NJTV9CTE9DSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl9tc2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhhbmRsaW5nIG9mIFZIT1NUX0lPVExCX0JBVENIX0VORCBpbiB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnLiBJdCBjaGFuZ2VzIHRoZSBjb250cm9sIGZsb3cgc3VjaCB0aGF0IGlmIG9wcy1cdTAwM2VzZXRfbWFwIGlzIGV4ZWN1dGVkLCB0aGUgZnVuY3Rpb24gYnJlYWtzIG91dCBvZiB0aGUgc3dpdGNoIHN0YXRlbWVudCBiZWZvcmUgc2V0dGluZyB2LVx1MDAzZWluX2JhdGNoID0gZmFsc2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgdkRQQSBJT1RMQiBiYXRjaGVzIGFyZSBwcm9jZXNzZWQgYW5kIGNvdWxkIHBvdGVudGlhbGx5IGxlYWQgdG8gaW5jb3JyZWN0IGJhdGNoIHN0YXRlIG1hbmFnZW1lbnQuIEl0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdmhvc3QgaW9jdGxzL2NoYXJhY3RlciBkZXZpY2Ugd3JpdGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlZDNiYzQ1MGFmYjFlMjQ3N2RiODBkNGQwMjU5ZjAxYWZiOTIzZDliCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMTYgMDc6NDQ6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3ZkcGEuYyBiL2RyaXZlcnMvdmhvc3QvdmRwYS5jCmluZGV4IGFjNTUyNzVmYTBkMGFlLi45MDhjYTM4M2IxNTIyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC92ZHBhLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92aG9zdC92ZHBhLmMKQEAgLTEyOTIsOCAmIzQzOzEyOTIsMTAgQEAgc3RhdGljIGludCB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgdTMyIGFzaWQsCiAJCXYtJmd0O2luX2JhdGNoID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBWSE9TVF9JT1RMQl9CQVRDSF9FTkQ6Ci0JCWlmICh2LSZndDtpbl9iYXRjaCAmYW1wOyZhbXA7IG9wcy0mZ3Q7c2V0X21hcCkKLQkJCW9wcy0mZ3Q7c2V0X21hcCh2ZHBhLCBhc2lkLCBpb3RsYik7CiYjNDM7CQlpZiAodi0mZ3Q7aW5fYmF0Y2ggJmFtcDsmYW1wOyBvcHMtJmd0O3NldF9tYXApIHsKJiM0MzsJCQlyID0gb3BzLSZndDtzZXRfbWFwKHZkcGEsIGFzaWQsIGlvdGxiKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KIAkJdi0mZ3Q7aW5fYmF0Y2ggPSBmYWxzZTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDc6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBWRFBBIElPVExCIEJhdGNoIEVuZCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGRyaXZlcnMvdmhvc3QvdmRwYS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgdmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZ2AgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGlzIGluIGhvdyB0aGUgYFZIT1NUX0lPVExCX0JBVENIX0VORGAgY2FzZSBpcyBoYW5kbGVkLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBjb2RlICpiZWZvcmUqIHRoZSBwYXRjaCBzaW1wbHkgY2hlY2tzIGlmIHdlJiMzOTtyZSBpbiBhIGJhdGNoIGFuZCBpZiBhIGBzZXRfbWFwYCBvcGVyYXRpb24gaXMgZGVmaW5lZC4gSWYgc28sIGl0IGNhbGxzIGl0IGFuZCB0aGVuICphbHdheXMqIHNldHMgYHYtJmd0O2luX2JhdGNoYCB0byBgZmFsc2VgLiBTaW1wbGUuCgpOb3csICphZnRlciogdGhlIHBhdGNoLCBpdCBzZWVtcyBsaWtlIHdlJiMzOTt2ZSBpbnRyb2R1Y2VkIGEgc3VidGxlIGJ1dCBzaWduaWZpY2FudCBkaWZmZXJlbmNlLiBJZiB3ZSYjMzk7cmUgaW4gYSBiYXRjaCBhbmQgYG9wcy0mZ3Q7c2V0X21hcGAgZXhpc3RzLCB3ZSBub3cgY2FsbCBgb3BzLSZndDtzZXRfbWFwYCwgKmJ1dCogd2UgdGhlbiAqaW1tZWRpYXRlbHkgYnJlYWsqIG91dCBvZiB0aGUgYHN3aXRjaGAgc3RhdGVtZW50ISBXYWl0IGEgc2Vjb25kLi4uIHRoYXQgYGJyZWFrO2AgbWVhbnMgYHYtJmd0O2luX2JhdGNoYCBpcyBvbmx5IHNldCB0byBgZmFsc2VgICppZiogdGhlIGBvcHMtJmd0O3NldF9tYXBgIGlzICpub3QqIGNhbGxlZC4gSG1tLgoKVGhpcyBtZWFucyB0aGF0IGlmIHdlIGNhbGwgYG9wcy0mZ3Q7c2V0X21hcGAgKHdoaWNoIHByZXN1bWFibHkgZG9lcyB0aGUgSU9UTEIgbWFwcGluZyksIHdlJiMzOTtyZSAqbm90KiByZXNldHRpbmcgdGhlIGBpbl9iYXRjaGAgZmxhZy4gU28gaWYgYG9wcy0mZ3Q7c2V0X21hcGAgaXMgdHJ1ZSwgdGhlIHN0YXRlIHdpbGwgYmUgbGVmdCBgdHJ1ZWAuIE9rLCBzbyB3ZSYjMzk7cmUgc2tpcHBpbmcgYHYtJmd0O2luX2JhdGNoID0gZmFsc2U7YCBpZiBgb3BzLSZndDtzZXRfbWFwYCByZXR1cm5zIHN1Y2Nlc3NmdWxseSwgb3IgYXQgYWxsLiBUaGUgcmV0dXJuIG9mIHRoZSBvcGVyYXRpb24gaXMgc3RvcmVkIGluIHRoZSB2YXJpYWJsZSBgcmAgdG8gYmUgcHJvY2Vzc2VkLgoKUmlnaHQsIHNvIHRoYXQmIzM5O3MgYSBwcmV0dHkgY3JpdGljYWwgY2hhbmdlLiBUaGlzIGhhcyBpbXBsaWNhdGlvbnMgb24gdGhlIHN0YXRlIG1hY2hpbmUgdGhhdCB0aGlzIGZ1bmN0aW9uIGltcGxlbWVudHMuIFNvIGl0JiMzOTtzIHByb2JhYmx5IGJlc3QgdG8gY2hlY2sgdGhlIGNvZGUgYXJvdW5kIGB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnYCwgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGhlcmUsIGJlY2F1c2UgdGhpcyBsb29rcyB0byBwb3RlbnRpYWxseSBpbnRyb2R1Y2UgYSBidWcuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IGZ1bmN0aW9uICphY3R1YWxseSogZG9lcy4gVGltZSB0byBkaXZlIGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwNzo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdmRwYS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjgwOlx0XHRcdGdvdG8gdW5sb2NrO1xuMTI4MTpcdFx0fVxuMTI4MjpcdFxuMTI4MzpcdFx0c3dpdGNoIChtc2ctXHUwMDNldHlwZSkge1xuMTI4NDpcdFx0Y2FzZSBWSE9TVF9JT1RMQl9VUERBVEU6XG4xMjg1Olx0XHRcdHIgPSB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfdXBkYXRlKHYsIGlvdGxiLCBtc2cpO1xuMTI4NjpcdFx0XHRicmVhaztcbjEyODc6XHRcdGNhc2UgVkhPU1RfSU9UTEJfSU5WQUxJREFURTpcbjEyODg6XHRcdFx0dmhvc3RfdmRwYV91bm1hcCh2LCBpb3RsYiwgbXNnLVx1MDAzZWlvdmEsIG1zZy1cdTAwM2VzaXplKTtcbjEyODk6XHRcdFx0YnJlYWs7XG4xMjkwOlx0XHRjYXNlIFZIT1NUX0lPVExCX0JBVENIX0JFR0lOOlxuMTI5MTpcdFx0XHR2LVx1MDAzZWJhdGNoX2FzaWQgPSBhc2lkO1xuMTI5MjpcdFx0XHR2LVx1MDAzZWluX2JhdGNoID0gdHJ1ZTtcbjEyOTM6XHRcdFx0YnJlYWs7XG4xMjk0Olx0XHRjYXNlIFZIT1NUX0lPVExCX0JBVENIX0VORDpcbjEyOTU6XHRcdFx0aWYgKHYtXHUwMDNlaW5fYmF0Y2ggXHUwMDI2XHUwMDI2IG9wcy1cdTAwM2VzZXRfbWFwKSB7XG4xMjk2Olx0XHRcdFx0ciA9IG9wcy1cdTAwM2VzZXRfbWFwKHZkcGEsIGFzaWQsIGlvdGxiKTtcbjEyOTc6XHRcdFx0XHRicmVhaztcbjEyOTg6XHRcdFx0fVxuMTI5OTpcdFx0XHR2LVx1MDAzZWluX2JhdGNoID0gZmFsc2U7XG4xMzAwOlx0XHRcdGJyZWFrO1xuMTMwMTpcdFx0ZGVmYXVsdDpcbjEzMDI6XHRcdFx0ciA9IC1FSU5WQUw7XG4xMzAzOlx0XHRcdGJyZWFrO1xuMTMwNDpcdFx0fVxuMTMwNTpcdHVubG9jazpcbjEzMDY6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXYtXHUwMDNlbXV0ZXgpO1xuMTMwNzpcdFxuMTMwODpcdFx0cmV0dXJuIHI7XG4xMzA5Olx0fVxuMTMxMDpcdFxuMTMxMTpcdHN0YXRpYyBzc2l6ZV90IHZob3N0X3ZkcGFfY2hyX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLFxuMTMxMjpcdFx0XHRcdFx0XHQgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuMTMxMzpcdHtcbjEzMTQ6XHRcdHN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi1cdTAwM2VraV9maWxwO1xuMTMxNTpcdFx0c3RydWN0IHZob3N0X3ZkcGEgKnYgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbjEzMTY6XHRcdHN0cnVjdCB2aG9zdF9kZXYgKmRldiA9IFx1MDAyNnYtXHUwMDNldmRldjtcbjEzMTc6XHRcbjEzMTg6XHRcdHJldHVybiB2aG9zdF9jaHJfd3JpdGVfaXRlcihkZXYsIGZyb20pO1xuMTMxOTpcdH1cbjEzMjA6XHRcbjEzMjE6XHRzdGF0aWMgaW50IHZob3N0X3ZkcGFfYWxsb2NfZG9tYWluKHN0cnVjdCB2aG9zdF92ZHBhICp2KVxuMTMyMjpcdHtcbjEzMjM6XHRcdHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYSA9IHYtXHUwMDNldmRwYTtcbjEzMjQ6XHRcdGNvbnN0IHN0cnVjdCB2ZHBhX2NvbmZpZ19vcHMgKm9wcyA9IHZkcGEtXHUwMDNlY29uZmlnO1xuMTMyNTpcdFx0dW5pb24gdmlydGlvX21hcCBtYXAgPSB2ZHBhX2dldF9tYXAodmRwYSk7XG4xMzI2Olx0XHRzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2ID0gbWFwLmRtYV9kZXY7XG4xMzI3Olx0XHRpbnQgcmV0O1xuMTMyODpcdFxuMTMyOTpcdFx0LyogRGV2aWNlIHdhbnQgdG8gZG8gRE1BIGJ5IGl0c2VsZiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA3OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MDMKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA0OTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEJ1ZyBpbiBgdmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZ2AqKgoKT2theSwgaG9sZCBvbi4gVGhpcyBzZWVtcyBsaWtlIGEgc3VidGxlIGlzc3VlLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBWSE9TVF9JT1RMQl9CQVRDSF9FTkRgIGNhc2UgaW4gdGhpcyBmdW5jdGlvbiwgYW5kIHNvbWV0aGluZyYjMzk7cyBub3Qgc2l0dGluZyByaWdodC4gSWYgdGhlIGJhdGNoIGZsYWcsIGB2LSZndDtpbl9iYXRjaGAsIGlzIHRydWUgYW5kIGBvcHMtJmd0O3NldF9tYXBgIGlzIHZhbGlkLCB0aGUgY29kZSBub3cgY2FsbHMgYG9wcy0mZ3Q7c2V0X21hcGAsIGFzc2lnbnMgaXRzIHJldHVybiB2YWx1ZSB0byBgcmAsICphbmQgdGhlbiBpbW1lZGlhdGVseSBicmVha3MqIGZyb20gdGhlIGBzd2l0Y2hgIHN0YXRlbWVudC4KCk15IGNvbmNlcm4gaXMgdGhhdCBpZiBgb3BzLSZndDtzZXRfbWFwYCBpcyBleGVjdXRlZCwgdGhlIGB2LSZndDtpbl9iYXRjaCA9IGZhbHNlO2AgbGluZSBpcyBza2lwcGVkLiBUaGlzIG1lYW5zIGB2LSZndDtpbl9iYXRjaGAgKnJlbWFpbnMqIHRydWUsIHdoaWNoIHNlZW1zIHdyb25nLiBXYWl0IGEgbWludXRlLiBFdmVuIGlmIGBvcHMtJmd0O3NldF9tYXBgIGZhaWxzLCBpdCByZXR1cm5zIGByYCwgYnV0IGB2LSZndDtpbl9iYXRjaGAgc3RpbGwgd29uJiMzOTt0IGJlIGZhbHNlLiBJcyB0aGlzIGludGVudGlvbmFsPyBJcyB0aGlzIGEgYnVnIGZpeD8gCgpUaGUgb3JpZ2luYWwgY29kZSBzaW1wbHkgY2FsbGVkIHRoZSBmdW5jdGlvbiwgd2hpbGUgdGhlIHVwZGF0ZWQgY29kZSBhc3NpZ25zIHRoZSByZXR1cm4gdG8gYHJgIGFuZCBicmVha3MuIEkmIzM5O20gc3RhcnRpbmcgdG8gc3VzcGVjdCB0aGlzIGlzIGEgYnVnLCBvciwgaWYgbm90LCBpdCBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UuCgpJIGRvbiYjMzk7dCBoYXZlIHRoZSBvcmlnaW5hbCBjb21taXQgbWVzc2FnZSwgdW5mb3J0dW5hdGVseSwganVzdCB0aGUgZGlmZi4gUmVhZGluZyB0aGUgZGlmZiBhZ2FpbiBjb25maXJtcyB0aGlzIGJlaGF2aW9yLiBJZiB0aGUgY29uZGl0aW9uIGB2LSZndDtpbl9iYXRjaCAmYW1wOyZhbXA7IG9wcy0mZ3Q7c2V0X21hcGAgaXMgbWV0LCB0aGUgbmV3IGNvZGUgY2FsbHMgYG9wcy0mZ3Q7c2V0X21hcGAsIGFzc2lnbnMgYHJgLCBhbmQgYGJyZWFrYHMuIFRoZXJlZm9yZSwgYHYtJmd0O2luX2JhdGNoYCBpcyAqbm90KiBzZXQgdG8gZmFsc2UuIFRoaXMgaXMgYSBwb3RlbnRpYWwgYnVnIG9yIGEgc3VidGxlIGNoYW5nZSBpbiB0aGUgaW50ZW5kZWQgYmVoYXZpb3IuCgpJJiMzOTttIHRoaW5raW5nLCBzaG91bGRuJiMzOTt0IGB2LSZndDtpbl9iYXRjaCA9IGZhbHNlO2AgYmUgZXhlY3V0ZWQgcmVnYXJkbGVzcyBvZiB0aGUgYG9wcy0mZ3Q7c2V0X21hcGAgZXhlY3V0aW9uIHBhdGg/IFRoZSBgYnJlYWtgIGlzIGNhdXNpbmcgdGhlIGNvbmRpdGlvbmFsIGFzc2lnbm1lbnQgdG8gYmUgc2tpcHBlZC4KCkkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBkaWcgZGVlcGVyLCBtYXliZSBjaGVjayB3aGVyZSB0aGlzIGZ1bmN0aW9uIGB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnYCBpcyBjYWxsZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJdCYjMzk7cyBsaWtlbHkgcmVhY2hhYmxlIHZpYSBgdmhvc3RfdmRwYV9jaHJfd3JpdGVfaXRlcmAsIGJ1dCBJIHdpbGwgY29uZmlybSB0aGF0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0IGJlZm9yZSBJIGNhbiBjb25maWRlbnRseSBzYXkgd2hldGhlciB0aGlzIGlzIGEgYnVnLCBhIGZpeCwgb3IgYW4gaW50ZW50aW9uYWwgbW9kaWZpY2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA3OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl9tc2cmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC92ZHBhLmM9MTIyMD1zdGF0aWMgaW50IHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl91cGRhdGUoc3RydWN0IHZob3N0X3ZkcGEgKnYsXG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTI0Mi1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjEyNDM6c3RhdGljIGludCB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgdTMyIGFzaWQsXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xMjQ0LVx0XHRcdFx0XHRzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICptc2cpXG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmM9MTQwNj1zdGF0aWMgaW50IHZob3N0X3ZkcGFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZXApXG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTQzNy1cdHZob3N0X2Rldl9pbml0KGRldiwgdnFzLCBudnFzLCAwLCAwLCAwLCBmYWxzZSxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjE0Mzg6XHRcdCAgICAgICB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnKTtcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE0MzktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDc6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY5OQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipEaXZpbmcgaW50byB0aGUgdmhvc3QtdmRwYSBJT1RMQiBNZXNzYWdlIEhhbmRsaW5nKioKClJpZ2h0LCBzbyBgdmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZ2AgaGFzIGJlZW4gZmxhZ2dlZCBhcyBhIGNhbGxiYWNrIGZ1bmN0aW9uLCBhbmQgaXQmIzM5O3MgZ2V0dGluZyBwYXNzZWQgaW50byBgdmhvc3RfZGV2X2luaXRgLiBJIGltbWVkaWF0ZWx5IHNlZSB0aGUgY29ubmVjdGlvbiDigJMgdGhpcyBmdW5jdGlvbiBpcyBvYnZpb3VzbHkgZ29pbmcgdG8gaGFuZGxlIHRob3NlIElPVExCIG1lc3NhZ2VzLiBBbmQgd2hlcmUgYXJlIHRob3NlIElPVExCIG1lc3NhZ2VzIGNvbWluZyBmcm9tPyBDbGVhcmx5LCB0aGV5JiMzOTtyZSBpbml0aWF0ZWQgYnkgdXNlcnNwYWNlLCBlaXRoZXIgdGhyb3VnaCB0aGUgc3RhbmRhcmQgdmhvc3QgaW9jdGxzLCBvciBwb3RlbnRpYWxseSB0aHJvdWdoIGRpcmVjdCB3cml0ZXMgdG8gdGhlIHZob3N0IGNoYXJhY3RlciBkZXZpY2UuIEl0JiMzOTtzIHRoZSBjbGFzc2ljIHVzZXJzcGFjZS1rZXJuZWwgaW50ZXJhY3Rpb24gcGF0aHdheS4gVGltZSB0byBqdW1wIG92ZXIgdG8gYGRyaXZlcnMvdmhvc3Qvdmhvc3QuY2AgYW5kIHRha2UgYSBnb29kIGxvb2sgYXQgYHZob3N0X2Rldl9pbml0YC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBzZXR1cCBpcyBoYXBwZW5pbmcsIGFuZCB3aGVyZSB0aGlzIGNhbGxiYWNrIGlzIGdvaW5nIHRvIGJlIGhvb2tlZCB1cC4gVW5kZXJzdGFuZGluZyB0aGlzIGluaXRpYWxpemF0aW9uIHByb2Nlc3Mgd2lsbCBiZSBrZXkgdG8gdHJhY2luZyB0aGUgZW50aXJlIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDc6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3RfZGV2X2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9uZXQuYz0xMzM2PXN0YXRpYyBpbnQgdmhvc3RfbmV0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXG4tLVxuZHJpdmVycy92aG9zdC9uZXQuYy0xMzg3LVx0fVxuZHJpdmVycy92aG9zdC9uZXQuYzoxMzg4Olx0dmhvc3RfZGV2X2luaXQoZGV2LCB2cXMsIFZIT1NUX05FVF9WUV9NQVgsXG5kcml2ZXJzL3Zob3N0L25ldC5jLTEzODktXHRcdCAgICAgICBVSU9fTUFYSU9WICYjNDM7IFZIT1NUX05FVF9CQVRDSCxcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0yMjcxPXN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIzMjQtXHR9XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyMzI1Olx0dmhvc3RfZGV2X2luaXQoXHUwMDI2dnMtXHUwMDNlZGV2LCB2cXMsIG52cXMsIFVJT19NQVhJT1YsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMzI2LVx0XHQgICAgICAgVkhPU1RfU0NTSV9XRUlHSFQsIDAsIHRydWUsIE5VTEwpO1xuLS1cbmRyaXZlcnMvdmhvc3QvdGVzdC5jPTExMT1zdGF0aWMgaW50IHZob3N0X3Rlc3Rfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcbi0tXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0xMjctXHRuLVx1MDAzZXZxc1tWSE9TVF9URVNUX1ZRXS5oYW5kbGVfa2ljayA9IGhhbmRsZV92cV9raWNrO1xuZHJpdmVycy92aG9zdC90ZXN0LmM6MTI4Olx0dmhvc3RfZGV2X2luaXQoZGV2LCB2cXMsIFZIT1NUX1RFU1RfVlFfTUFYLCBVSU9fTUFYSU9WLFxuZHJpdmVycy92aG9zdC90ZXN0LmMtMTI5LVx0XHQgICAgICAgVkhPU1RfVEVTVF9QS1RfV0VJR0hULCBWSE9TVF9URVNUX1dFSUdIVCwgdHJ1ZSwgTlVMTCk7XG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmM9MTQwNj1zdGF0aWMgaW50IHZob3N0X3ZkcGFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZXApXG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTQzNi1cdH1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjE0Mzc6XHR2aG9zdF9kZXZfaW5pdChkZXYsIHZxcywgbnZxcywgMCwgMCwgMCwgZmFsc2UsXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNDM4LVx0XHQgICAgICAgdmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZyk7XG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jPTU3ND1zdGF0aWMgc2l6ZV90IHZob3N0X2dldF9kZXNjX3NpemUoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTU3OS1cbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYzo1ODA6dm9pZCB2aG9zdF9kZXZfaW5pdChzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmMtNTgxLVx0XHQgICAgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqKnZxcywgaW50IG52cXMsXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5jLTYyMi19XG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6NjIzOkVYUE9SVF9TWU1CT0xfR1BMKHZob3N0X2Rldl9pbml0KTtcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy02MjQtXG4tLVxuZHJpdmVycy92aG9zdC92aG9zdC5oPTIwOT1ib29sIHZob3N0X2V4Y2VlZHNfd2VpZ2h0KHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCBpbnQgcGt0cywgaW50IHRvdGFsX2xlbik7XG5kcml2ZXJzL3Zob3N0L3Zob3N0Lmg6MjEwOnZvaWQgdmhvc3RfZGV2X2luaXQoc3RydWN0IHZob3N0X2RldiAqLCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICoqdnFzLFxuZHJpdmVycy92aG9zdC92aG9zdC5oLTIxMS1cdFx0ICAgIGludCBudnFzLCBpbnQgaW92X2xpbWl0LCBpbnQgd2VpZ2h0LCBpbnQgYnl0ZV93ZWlnaHQsXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jPTY5OD1zdGF0aWMgaW50IHZob3N0X3Zzb2NrX2Rldl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03MzAtXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM6NzMxOlx0dmhvc3RfZGV2X2luaXQoXHUwMDI2dnNvY2stXHUwMDNlZGV2LCB2cXMsIEFSUkFZX1NJWkUodnNvY2stXHUwMDNldnFzKSxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03MzItXHRcdCAgICAgICBVSU9fTUFYSU9WLCBWSE9TVF9WU09DS19QS1RfV0VJR0hULFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA3OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5OTcKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnYCBpcyBpbmRlZWQgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLiBNeSBndXQgc2F5cyB0aGlzIGlzIGEgd29ydGh3aGlsZSB0YXJnZXQgZm9yIGZ1enppbmcuIEl0JiMzOTtzIHRvdWNoaW5nIGNvcmUgbG9naWMgd2l0aGluIHRoZSBgdmhvc3RfdmRwYWAgZnJhbWV3b3JrLCBhbmQgdGhhdCBhbHdheXMgcmFpc2VzIGEgZmxhZyBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgaG93IGRvIEkgZ28gYWJvdXQgYWN0dWFsbHkgZnV6emluZyB0aGlzPyBXaGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBkbyBJIG5lZWQgdG8gZW5hYmxlIHRvIGdldCBpdCBydW5uaW5nIGluIGEgc3VpdGFibGUgZW52aXJvbm1lbnQ/IEkgc2hvdWxkIHByb2JhYmx5IHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgZHJpdmVycy92aG9zdC9LY29uZmlnYCBvciBgZHJpdmVycy92aG9zdC9NYWtlZmlsZWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgZW5hYmxlcyBgdmRwYS5jYCBpbiB0aGUgZmlyc3QgcGxhY2UuIE9uY2UgSSBoYXZlIHRob3NlIGRldGFpbHMsIEkgY2FuIGdldCB0byB3b3JrIG9uIHNldHRpbmcgdXAgYSBmdXp6aW5nIGhhcm5lc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA3OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZkcGFcXC5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmRwYS9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbmRyaXZlcnMvdmRwYS9NYWtlZmlsZToyOm9iai0kKENPTkZJR19WRFBBKSAmIzQzOz0gdmRwYS5vXG5kcml2ZXJzL3ZkcGEvTWFrZWZpbGUtMy1vYmotJChDT05GSUdfVkRQQV9TSU0pICYjNDM7PSB2ZHBhX3NpbS9cbi0tXG5kcml2ZXJzL3ZkcGEvYWxpYmFiYS9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbmRyaXZlcnMvdmRwYS9hbGliYWJhL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX0FMSUJBQkFfRU5JX1ZEUEEpICYjNDM7PSBlbmlfdmRwYS5vXG5kcml2ZXJzL3ZkcGEvYWxpYmFiYS9NYWtlZmlsZS0zLVxuLS1cbmRyaXZlcnMvdmRwYS9tbHg1L01ha2VmaWxlPTE9c3ViZGlyLWNjZmxhZ3MteSAmIzQzOz0gLUkkKHNyY3RyZWUpL2RyaXZlcnMvdmRwYS9tbHg1L2NvcmVcbmRyaXZlcnMvdmRwYS9tbHg1L01ha2VmaWxlLTItXG5kcml2ZXJzL3ZkcGEvbWx4NS9NYWtlZmlsZTozOm9iai0kKENPTkZJR19NTFg1X1ZEUEFfTkVUKSAmIzQzOz0gbWx4NV92ZHBhLm9cbmRyaXZlcnMvdmRwYS9tbHg1L01ha2VmaWxlLTQtbWx4NV92ZHBhLSQoQ09ORklHX01MWDVfVkRQQV9ORVQpICYjNDM7PSBuZXQvbWx4NV92bmV0Lm8gY29yZS9yZXNvdXJjZXMubyBjb3JlL21yLm8gbmV0L2RlYnVnLm9cbi0tXG5kcml2ZXJzL3ZkcGEvb2N0ZW9uX2VwL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuZHJpdmVycy92ZHBhL29jdGVvbl9lcC9NYWtlZmlsZToyOm9iai0kKENPTkZJR19PQ1RFT05FUF9WRFBBKSAmIzQzOz0gb2N0ZXBfdmRwYS5vXG5kcml2ZXJzL3ZkcGEvb2N0ZW9uX2VwL01ha2VmaWxlLTMtb2N0ZXBfdmRwYS0kKENPTkZJR19PQ1RFT05FUF9WRFBBKSAmIzQzOz0gb2N0ZXBfdmRwYV9tYWluLm9cbi0tXG5kcml2ZXJzL3ZkcGEvcGRzL01ha2VmaWxlLTMtXG5kcml2ZXJzL3ZkcGEvcGRzL01ha2VmaWxlOjQ6b2JqLSQoQ09ORklHX1BEU19WRFBBKSA6PSBwZHNfdmRwYS5vXG5kcml2ZXJzL3ZkcGEvcGRzL01ha2VmaWxlLTUtXG4tLVxuZHJpdmVycy92ZHBhL3Bkcy9jbWRzLmM9Mzg9aW50IHBkc192ZHBhX2NtZF9yZXNldChzdHJ1Y3QgcGRzX3ZkcGFfZGV2aWNlICpwZHN2KVxuLS1cbmRyaXZlcnMvdmRwYS9wZHMvY21kcy5jLTQyLVx0dW5pb24gcGRzX2NvcmVfYWRtaW5xX2NtZCBjbWQgPSB7XG5kcml2ZXJzL3ZkcGEvcGRzL2NtZHMuYzo0MzpcdFx0LnZkcGEub3Bjb2RlID0gUERTX1ZEUEFfQ01EX1JFU0VULFxuZHJpdmVycy92ZHBhL3Bkcy9jbWRzLmMtNDQtXHRcdC52ZHBhLnZkcGFfaW5kZXggPSBwZHN2LVx1MDAzZXZkcGFfaW5kZXgsXG4tLVxuZHJpdmVycy92ZHBhL3NvbGlkcnVuL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuZHJpdmVycy92ZHBhL3NvbGlkcnVuL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX1NORVRfVkRQQSkgJiM0Mzs9IHNuZXRfdmRwYS5vXG5kcml2ZXJzL3ZkcGEvc29saWRydW4vTWFrZWZpbGUtMy1zbmV0X3ZkcGEtJChDT05GSUdfU05FVF9WRFBBKSAmIzQzOz0gc25ldF9tYWluLm9cbi0tXG5kcml2ZXJzL3ZkcGEvdmlydGlvX3BjaS9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbmRyaXZlcnMvdmRwYS92aXJ0aW9fcGNpL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX1ZQX1ZEUEEpICYjNDM7PSB2cF92ZHBhLm9cbi0tXG5kcml2ZXJzL3Zob3N0L01ha2VmaWxlPTExPW9iai0kKENPTkZJR19WSE9TVF9SSU5HKSAmIzQzOz0gdnJpbmdoLm9cbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGUtMTItXG5kcml2ZXJzL3Zob3N0L01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19WSE9TVF9WRFBBKSAmIzQzOz0gdmhvc3RfdmRwYS5vXG5kcml2ZXJzL3Zob3N0L01ha2VmaWxlOjE0OnZob3N0X3ZkcGEteSA6PSB2ZHBhLm9cbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGUtMTUtXG4tLVxuZHJpdmVycy92aXJ0aW8vTWFrZWZpbGU9MTI9b2JqLSQoQ09ORklHX1ZJUlRJT19JTlBVVCkgJiM0Mzs9IHZpcnRpb19pbnB1dC5vXG5kcml2ZXJzL3ZpcnRpby9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfVklSVElPX1ZEUEEpICYjNDM7PSB2aXJ0aW9fdmRwYS5vXG5kcml2ZXJzL3ZpcnRpby9NYWtlZmlsZS0xNC1vYmotJChDT05GSUdfVklSVElPX01FTSkgJiM0Mzs9IHZpcnRpb19tZW0ub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwNzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjQwCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBWSE9TVF9WRFBBYCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHRoZSBjdXJyZW50IGZvY3VzIGlzIG9uIHRoZSBgVkhPU1RfVkRQQWAgY29uZmlndXJhdGlvbiBzZXR0aW5nLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiBgVkhPU1RfVkRQQWAgcmVsaWVzIG9uIGFueSBvdGhlciBmbGFncywgbW9kdWxlcywgb3IgZmVhdHVyZXMgd2l0aGluIHRoZSBzeXN0ZW0uIElzIGl0IGEgc3RhbmRhbG9uZSBmZWF0dXJlIG9yIGRvZXMgaXQgcmVseSBvbiBhIHNwZWNpZmljIGhhcmR3YXJlIHBsYXRmb3JtIG9yIG90aGVyIHByZS1yZXF1aXNpdGVzPyBJIG5lZWQgdG8ga25vdyB3aGVyZSBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlIHRvIGZ1bGx5IGdyYXNwIGl0cyBpbXBsaWNhdGlvbnMuIERldGVybWluaW5nIGl0cyBkZXBlbmRlbmNpZXMgaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyBpdCBjb21wbGV0ZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwNzo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkhPU1RfVkRQQSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L0tjb25maWc9NTY9Y29uZmlnIFZIT1NUX1ZTT0NLXG4tLVxuZHJpdmVycy92aG9zdC9LY29uZmlnLTY5LVxuZHJpdmVycy92aG9zdC9LY29uZmlnOjcwOmNvbmZpZyBWSE9TVF9WRFBBXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNzEtXHR0cmlzdGF0ZSBcJiMzNDtWaG9zdCBkcml2ZXIgZm9yIHZEUEEtYmFzZWQgYmFja2VuZFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwNzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTIwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSB2aG9zdCBLY29uZmlnKioKCk9rYXksIGxldCYjMzk7cyB6ZXJvIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgdmhvc3QgZHJpdmVyIGJldHRlci4gVGltZSB0byBwdWxsIHVwIGBkcml2ZXJzL3Zob3N0L0tjb25maWdgIGFuZCwgc3BlY2lmaWNhbGx5LCBJJiMzOTttIGhlYWRpbmcgdG93YXJkcyBsaW5lIDcwLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgYXJlYSB3aWxsIGxpa2VseSBjb250YWluIHRoZSBjb3JlIHNldHRpbmdzIEkmIzM5O20gaW50ZXJlc3RlZCBpbiwgbWF5YmUgdGhlIGhpZ2gtbGV2ZWwgZW5hYmxlIGZsYWdzIG9yIHNvbWUgZnVuZGFtZW50YWwgZGVwZW5kZW5jaWVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaGlkZGVuIGluIHRoYXQgcGFydCBvZiB0aGUgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDc6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDY1Olx0XHR2aXJ0aW9fdHJhbnNwb3J0LmtvIGRyaXZlciBsb2FkZWQgdG8gdXNlIHRoZSB2aXJ0aW8tdnNvY2sgZGV2aWNlLlxuICA2NjpcdFxuICA2NzpcdFx0VG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZFxuICA2ODpcdFx0dmhvc3RfdnNvY2suXG4gIDY5Olx0XG4gIDcwOlx0Y29uZmlnIFZIT1NUX1ZEUEFcbiAgNzE6XHRcdHRyaXN0YXRlIFwmIzM0O1Zob3N0IGRyaXZlciBmb3IgdkRQQS1iYXNlZCBiYWNrZW5kXCYjMzQ7XG4gIDcyOlx0XHRkZXBlbmRzIG9uIEVWRU5URkRcbiAgNzM6XHRcdHNlbGVjdCBWSE9TVFxuICA3NDpcdFx0c2VsZWN0IElSUV9CWVBBU1NfTUFOQUdFUlxuICA3NTpcdFx0ZGVwZW5kcyBvbiBWRFBBXG4gIDc2Olx0XHRoZWxwXG4gIDc3Olx0XHQgIFRoaXMga2VybmVsIG1vZHVsZSBjYW4gYmUgbG9hZGVkIGluIGhvc3Qga2VybmVsIHRvIGFjY2VsZXJhdGVcbiAgNzg6XHRcdCAgZ3Vlc3QgdmlydGlvIGRldmljZXMgd2l0aCB0aGUgdkRQQS1iYXNlZCBiYWNrZW5kcy5cbiAgNzk6XHRcbiAgODA6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuICA4MTpcdFx0ICB3aWxsIGJlIGNhbGxlZCB2aG9zdF92ZHBhLlxuICA4MjpcdFxuICA4MzpcdGNvbmZpZyBWSE9TVF9DUk9TU19FTkRJQU5fTEVHQUNZXG4gIDg0Olx0XHRib29sIFwmIzM0O0Nyb3NzLWVuZGlhbiBzdXBwb3J0IGZvciB2aG9zdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwNzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTgxCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBDb251bmRydW0qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgSSBuZWVkIHRvIG1ha2Ugc29tZSBjb25maWd1cmF0aW9uIGRlY2lzaW9ucy4gSXQmIzM5O3MgY2xlYXIgdGhhdCBgVkhPU1RfVkRQQWAgcmVsaWVzIG9uIGBWRFBBYC4gTG9naWNhbGx5LCBJIHNob3VsZCBlbmFibGUgYm90aCBvZiB0aG9zZSwgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gQnV0IHRoZW4gbXkgbWluZCBkcmlmdHMgLSB3aGF0IGFib3V0IGBWRFBBX1NJTWA/IE5vdywgdGhhdCBoYXMgcG90ZW50aWFsLiBTcGVjaWZpY2FsbHksIGZvciBmdXp6aW5nIHZEUEEuIEkgY2FuIHNlZSB0aGUgdmFsdWUgb2YgdGVzdGluZyB3aXRob3V0IG5lY2Vzc2FyaWx5IGhhdmluZyB0aGUgaGFyZHdhcmUgaW4gcGxhY2UuIEkgc2hvdWxkIHByb2JhYmx5IGhhdmUgYSBsb29rIGF0IHRoZSBgZHJpdmVycy92ZHBhL0tjb25maWdgIGZpbGUgdG8gZ2V0IGEgY2xlYXJlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbXBsaWNhdGlvbnMgb2YgZWFjaCBzZXR0aW5nLCBhbmQgaG93IHRoZXkgaW50ZXJhY3QuIEdvdHRhIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwNzo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVkRQQSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZkcGEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy92ZHBhL0tjb25maWc6MjptZW51Y29uZmlnIFZEUEFcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDt2RFBBIGRyaXZlcnNcJiMzNDtcbi0tXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZz0xMD1pZiBWRFBBXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0xMS1cbmRyaXZlcnMvdmRwYS9LY29uZmlnOjEyOmNvbmZpZyBWRFBBX1NJTVxuZHJpdmVycy92ZHBhL0tjb25maWctMTMtXHR0cmlzdGF0ZSBcJiMzNDt2RFBBIGRldmljZSBzaW11bGF0b3IgY29yZVwmIzM0O1xuLS1cbmRyaXZlcnMvdmRwYS9LY29uZmlnLTIwLVxuZHJpdmVycy92ZHBhL0tjb25maWc6MjE6Y29uZmlnIFZEUEFfU0lNX05FVFxuZHJpdmVycy92ZHBhL0tjb25maWctMjItXHR0cmlzdGF0ZSBcJiMzNDt2RFBBIHNpbXVsYXRvciBmb3IgbmV0d29ya2luZyBkZXZpY2VcJiMzNDtcbi0tXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0yNy1cbmRyaXZlcnMvdmRwYS9LY29uZmlnOjI4OmNvbmZpZyBWRFBBX1NJTV9CTE9DS1xuZHJpdmVycy92ZHBhL0tjb25maWctMjktXHR0cmlzdGF0ZSBcJiMzNDt2RFBBIHNpbXVsYXRvciBmb3IgYmxvY2sgZGV2aWNlXCYjMzQ7XG4tLVxuZHJpdmVycy92ZHBhL0tjb25maWctMzQtXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZzozNTpjb25maWcgVkRQQV9VU0VSXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0zNi1cdHRyaXN0YXRlIFwmIzM0O1ZEVVNFICh2RFBBIERldmljZSBpbiBVc2Vyc3BhY2UpIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDc6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUzMwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDUwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaCBpbiB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnKioKCk9rYXksIGxldCYjMzk7cyBzZWUsIEkmIzM5O20gZ29pbmcgdG8gZW5hYmxlIHRoZXNlIFZEUEEgZmVhdHVyZXM6IGBWRFBBYCwgYFZIT1NUX1ZEUEFgLCBgVkRQQV9TSU1gLCBgVkRQQV9TSU1fTkVUYCwgYFZEUEFfU0lNX0JMT0NLYCwgYW5kIGBWRFBBX1VTRVJgLiBCdXQsIHJlYWxpc3RpY2FsbHksIGBWSE9TVF9WRFBBYCBpcyB0aGUgbWFpbiBvbmUgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGhlcmUuIFRoZSBwYXRjaCBJJiMzOTttIGxvb2tpbmcgYXQgbW9kaWZpZXMgYHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl9tc2dgLCBzbyB0aGF0JiMzOTtzIHRoZSBrZXkgZnVuY3Rpb24gdG8gZm9jdXMgb24uCgpBbHJpZ2h0LCB3aGF0JiMzOTtzIGNoYW5nZWQgaW4gdGhhdCBmdW5jdGlvbj8gTGV0IG1lIHNlZS4uLiBoZXJlJiMzOTtzIHRoZSBjb2RlOgoKYGBgYwogCWNhc2UgVkhPU1RfSU9UTEJfQkFUQ0hfRU5EOgotCQlpZiAodi0mZ3Q7aW5fYmF0Y2ggJmFtcDsmYW1wOyBvcHMtJmd0O3NldF9tYXApCi0JCQlvcHMtJmd0O3NldF9tYXAodmRwYSwgYXNpZCwgaW90bGIpOwomIzQzOwkJaWYgKHYtJmd0O2luX2JhdGNoICZhbXA7JmFtcDsgb3BzLSZndDtzZXRfbWFwKSB7CiYjNDM7CQkJciA9IG9wcy0mZ3Q7c2V0X21hcCh2ZHBhLCBhc2lkLCBpb3RsYik7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiAJCXYtJmd0O2luX2JhdGNoID0gZmFsc2U7CiAJCWJyZWFrOwpgYGAKCkl0IHNlZW1zIGxpa2UgYSBidWcgZml4IG9yIGEgc3VidGxlIGZlYXR1cmUgZW5oYW5jZW1lbnQgd2l0aGluIHRoZSBgVkhPU1RfSU9UTEJfQkFUQ0hfRU5EYCBjYXNlLiBOb3csIEkgc2VlIHRoZSBrZXkgY2hhbmdlOiB0aGUgYG9wcy0mZ3Q7c2V0X21hcGAgY2FsbCBpcyB3cmFwcGVkIGluIGEgYmxvY2ssIGFuZCB0aGUgYGJyZWFrYCBzdGF0ZW1lbnQgaXMgKmluc2lkZSogdGhhdCBibG9jay4KCkhvbGQgb24uLi4gaWYgYG9wcy0mZ3Q7c2V0X21hcGAgaXMgZXhlY3V0ZWQsIHRoZW4gdGhlIGZ1bmN0aW9uIGJyZWFrcyAqYmVmb3JlKiBgdi0mZ3Q7aW5fYmF0Y2hgIGlzIHNldCB0byBmYWxzZSEgVGhhdCYjMzk7cy4uLiBwcm9ibGVtYXRpYy4gSWYgYHIgPSBvcHMtJmd0O3NldF9tYXAodmRwYSwgYXNpZCwgaW90bGIpOyBicmVhaztgIGlzIGV4ZWN1dGVkLCB0aGUgYHYtJmd0O2luX2JhdGNoID0gZmFsc2VgIGxpbmUgaXMgc2tpcHBlZC4gVGhpcyBpcyBhbG1vc3QgY2VydGFpbmx5IGFuIGVycm9yLgoKV2h5IHdvdWxkIHRoZSBiYXRjaCBpbmRpY2F0b3IgKnJlbWFpbiogdHJ1ZSBhZnRlciB0aGUgYG9wcy0mZ3Q7c2V0X21hcGAgY2FsbCBpZiBpdCByZXR1cm5zPyBJZiBgb3BzLSZndDtzZXRfbWFwYCBpcyBjYWxsZWQsIGl0IG1lYW5zIHRoZSBiYXRjaCBpcyBlbmRpbmcsIGFuZCB0aGUgbWFwIGlzIHNldCwgc28gYHYtJmd0O2luX2JhdGNoYCBzaG91bGQgYmUgc2V0IHRvIGZhbHNlLiBJcyBgb3BzLSZndDtzZXRfbWFwYCBhc3luY2hyb25vdXM/IE5vLCBpdCByZXR1cm5zIGFuIGludGVnZXIuIExldCBtZSBjaGVjay4uLiBpZiBgb3BzLSZndDtzZXRfbWFwYCBmYWlscywgaXQgcmV0dXJucyBhIG5vbi16ZXJvIHZhbHVlLCB3aGljaCBpcyB0aGVuIHJldHVybmVkIGJ5IGB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnYC4gQnV0IGlmIGl0IHN1Y2NlZWRzLCBpdCByZXR1cm5zIDAuIFN0aWxsLCBgdi0mZ3Q7aW5fYmF0Y2hgIGlzIG5vdCBiZWluZyByZXNldCB0byBmYWxzZSEKCk9rYXksIEkgc2VlIHRoZSBpbXBsaWNhdGlvbi4gSWYgYHYtJmd0O2luX2JhdGNoYCByZW1haW5zIHRydWUsIHRoZSBuZXh0IGBWSE9TVF9JT1RMQl9VUERBVEVgIG1lc3NhZ2Ugd2lsbCBiZSBpbmNvcnJlY3RseSB0cmVhdGVkIGFzIHBhcnQgb2YgdGhlIHNhbWUgKmVuZGVkKiBiYXRjaC4gVGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgYnVnLiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgYHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl91cGRhdGVgIGZ1bmN0aW9uIHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aGlzIGB2LSZndDtpbl9iYXRjaGAgZmxhZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDc6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3ZkcGEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTIyMDpcdHN0YXRpYyBpbnQgdmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX3VwZGF0ZShzdHJ1Y3Qgdmhvc3RfdmRwYSAqdixcbjEyMjE6XHRcdFx0XHRcdFx0ICAgc3RydWN0IHZob3N0X2lvdGxiICppb3RsYixcbjEyMjI6XHRcdFx0XHRcdFx0ICAgc3RydWN0IHZob3N0X2lvdGxiX21zZyAqbXNnKVxuMTIyMzpcdHtcbjEyMjQ6XHRcdHN0cnVjdCB2ZHBhX2RldmljZSAqdmRwYSA9IHYtXHUwMDNldmRwYTtcbjEyMjU6XHRcbjEyMjY6XHRcdGlmIChtc2ctXHUwMDNlaW92YSBcdTAwM2Mgdi1cdTAwM2VyYW5nZS5maXJzdCB8fCAhbXNnLVx1MDAzZXNpemUgfHxcbjEyMjc6XHRcdCAgICBtc2ctXHUwMDNlaW92YSBcdTAwM2UgVTY0X01BWCAtIG1zZy1cdTAwM2VzaXplICYjNDM7IDEgfHxcbjEyMjg6XHRcdCAgICBtc2ctXHUwMDNlaW92YSAmIzQzOyBtc2ctXHUwMDNlc2l6ZSAtIDEgXHUwMDNlIHYtXHUwMDNlcmFuZ2UubGFzdClcbjEyMjk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMjMwOlx0XG4xMjMxOlx0XHRpZiAodmhvc3RfaW90bGJfaXRyZWVfZmlyc3QoaW90bGIsIG1zZy1cdTAwM2Vpb3ZhLFxuMTIzMjpcdFx0XHRcdFx0ICAgIG1zZy1cdTAwM2Vpb3ZhICYjNDM7IG1zZy1cdTAwM2VzaXplIC0gMSkpXG4xMjMzOlx0XHRcdHJldHVybiAtRUVYSVNUO1xuMTIzNDpcdFxuMTIzNTpcdFx0aWYgKHZkcGEtXHUwMDNldXNlX3ZhKVxuMTIzNjpcdFx0XHRyZXR1cm4gdmhvc3RfdmRwYV92YV9tYXAodiwgaW90bGIsIG1zZy1cdTAwM2Vpb3ZhLCBtc2ctXHUwMDNlc2l6ZSxcbjEyMzc6XHRcdFx0XHRcdFx0IG1zZy1cdTAwM2V1YWRkciwgbXNnLVx1MDAzZXBlcm0pO1xuMTIzODpcdFxuMTIzOTpcdFx0cmV0dXJuIHZob3N0X3ZkcGFfcGFfbWFwKHYsIGlvdGxiLCBtc2ctXHUwMDNlaW92YSwgbXNnLVx1MDAzZXNpemUsIG1zZy1cdTAwM2V1YWRkcixcbjEyNDA6XHRcdFx0XHRcdCBtc2ctXHUwMDNlcGVybSk7XG4xMjQxOlx0fVxuMTI0MjpcdFxuMTI0MzpcdHN0YXRpYyBpbnQgdmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHUzMiBhc2lkLFxuMTI0NDpcdFx0XHRcdFx0XHRzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICptc2cpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA3OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTk1CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipNZW1vcnkgTGFuZSB3aXRoIHZob3N0X3ZkcGEqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSYjMzk7bSBjaGFzaW5nIGEgcG90ZW50aWFsIGlzc3VlIHJlbGF0ZWQgdG8gdmlydHVhbCBkZXZpY2UgcGFzc3Rocm91Z2ggYW5kIGhvdyB3ZSBoYW5kbGUgbWVtb3J5IG1hcHBpbmdzIHdpdGhpbiB0aGUgdmhvc3QgY29udGV4dCwgc3BlY2lmaWNhbGx5IGZvciB2RFBBIGRldmljZXMuIE15IGluaXRpYWwgYXNzdW1wdGlvbiB3YXMgdGhhdCBgdi0mZ3Q7aW5fYmF0Y2hgIHdhcyBvbmx5IHJlbGV2YW50IGR1cmluZyB0aGUgaW5pdGlhbCBzZXR1cCBvciB0ZWFyLWRvd24uIEJ1dCBub3cgSSYjMzk7bSBxdWVzdGlvbmluZyB0aGF0LiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIGlmIHRoZSBgdi0mZ3Q7aW5fYmF0Y2hgIGZsYWcgaXMgYWN0dWFsbHkgKnVzZWQqIHdpdGhpbiBlaXRoZXIgdGhlIGB2aG9zdF92ZHBhX3BhX21hcGAgb3IgdGhlIGB2aG9zdF92ZHBhX3ZhX21hcGAgZnVuY3Rpb25zLiBUaGlzIGRldGFpbCBpcyBjcml0aWNhbCBmb3IgZW5zdXJpbmcgb3VyIG1lbW9yeSBtYXBwaW5nIGxvZ2ljIGlzIHJvYnVzdCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3JzLCBlc3BlY2lhbGx5IGR1cmluZyBiYXRjaCBvcGVyYXRpb25zLiBNeSBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBmbGFnIGluZmx1ZW5jZXMgdGhlIHdheSBwaHlzaWNhbCBhZGRyZXNzZXMgKFBBKSBvciB2aXJ0dWFsIGFkZHJlc3NlcyAoVkEpIGFyZSB0cmFuc2xhdGVkLCBvciBpZiB0aGUgc3lzdGVtIG1pc3Rha2VubHkgdXNlcyBzdGFsZSBiYXRjaCBpbmZvcm1hdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjYWxsIHN0YWNrIGFuZCBkYXRhIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA3OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luX2JhdGNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvZXh0NC5yc3Q9MTQxPVdoZW4gbW91bnRpbmcgYW4gZXh0NCBmaWxlc3lzdGVtLCB0aGUgZm9sbG93aW5nIG9wdGlvbiBhcmUgYWNjZXB0ZWQ6XG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9leHQ0LnJzdC0zMDQtXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2V4dDQucnN0OjMwNTogIG1pbl9iYXRjaF90aW1lPXVzZWNcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvZXh0NC5yc3QtMzA2LSAgICAgICAgVGhpcyBwYXJhbWV0ZXIgc2V0cyB0aGUgY29tbWl0IHRpbWUgKGFzIGRlc2NyaWJlZCBhYm92ZSkgdG8gYmUgYXQgbGVhc3RcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvZXh0NC5yc3Q6MzA3OiAgICAgICAgbWluX2JhdGNoX3RpbWUuICBJdCBkZWZhdWx0cyB0byB6ZXJvIG1pY3Jvc2Vjb25kcy4gIEluY3JlYXNpbmcgdGhpc1xuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9leHQ0LnJzdC0zMDgtICAgICAgICBwYXJhbWV0ZXIgbWF5IGltcHJvdmUgdGhlIHRocm91Z2hwdXQgb2YgbXVsdGktdGhyZWFkZWQsIHN5bmNocm9ub3VzXG4tLVxuZHJpdmVycy9kbWEvaWR4ZC9pcnEuYz0yMjI9c3RhdGljIHZvaWQgaWR4ZF9ldmxfZmF1bHRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9kbWEvaWR4ZC9pcnEuYy0yMzgtXHRjYXNlIERTQV9DT01QX0NSQV9YTEFUOlxuZHJpdmVycy9kbWEvaWR4ZC9pcnEuYzoyMzk6XHRcdGlmIChlbnRyeV9oZWFkLVx1MDAzZWJhdGNoIFx1MDAyNlx1MDAyNiBlbnRyeV9oZWFkLVx1MDAzZWZpcnN0X2Vycl9pbl9iYXRjaClcbmRyaXZlcnMvZG1hL2lkeGQvaXJxLmMtMjQwLVx0XHRcdGV2bC1cdTAwM2ViYXRjaF9mYWlsW2VudHJ5X2hlYWQtXHUwMDNlYmF0Y2hfaWRdID0gZmFsc2U7XG4tLVxuZHJpdmVycy9kbWEvaWR4ZC9yZWdpc3RlcnMuaD02MTU9c3RydWN0IF9fZXZsX2VudHJ5IHtcbi0tXG5kcml2ZXJzL2RtYS9pZHhkL3JlZ2lzdGVycy5oLTY0My1cdFx0XHR1MTYgcmNyOjE7XG5kcml2ZXJzL2RtYS9pZHhkL3JlZ2lzdGVycy5oOjY0NDpcdFx0XHR1MTYgZmlyc3RfZXJyX2luX2JhdGNoOjE7XG5kcml2ZXJzL2RtYS9pZHhkL3JlZ2lzdGVycy5oLTY0NS1cdFx0XHR1MTYgcnN2ZDRfMjo5O1xuLS1cbmRyaXZlcnMvbWQvZG0tdmRvL2Jsb2NrLW1hcC5oPTQ5PXN0cnVjdCB2ZG9fcGFnZV9jYWNoZSB7XG4tLVxuZHJpdmVycy9tZC9kbS12ZG8vYmxvY2stbWFwLmgtNTQtXHQvKiBudW1iZXIgb2YgcGFnZXMgdG8gd3JpdGUgaW4gdGhlIGN1cnJlbnQgYmF0Y2ggKi9cbmRyaXZlcnMvbWQvZG0tdmRvL2Jsb2NrLW1hcC5oOjU1Olx0cGFnZV9jb3VudF90IHBhZ2VzX2luX2JhdGNoO1xuZHJpdmVycy9tZC9kbS12ZG8vYmxvY2stbWFwLmgtNTYtXHQvKiBXaGV0aGVyIHRoZSBWRE8gaXMgZG9pbmcgYSByZWFkLW9ubHkgcmVidWlsZCAqL1xuLS1cbmRyaXZlcnMvbWQvZG0tdmRvL2RhdGEtdmlvLmg9MTEwPXN0cnVjdCBjb21wcmVzc2lvbl9zdGF0ZSB7XG4tLVxuZHJpdmVycy9tZC9kbS12ZG8vZGF0YS12aW8uaC0xMzAtXHQvKiBBIGxpbmsgaW4gdGhlIGNoYWluIG9mIGRhdGFfdmlvcyB3aGljaCBoYXZlIGJlZW4gcGFja2VkIHRvZ2V0aGVyICovXG5kcml2ZXJzL21kL2RtLXZkby9kYXRhLXZpby5oOjEzMTpcdHN0cnVjdCBkYXRhX3ZpbyAqbmV4dF9pbl9iYXRjaDtcbmRyaXZlcnMvbWQvZG0tdmRvL2RhdGEtdmlvLmgtMTMyLVxuLS1cbmRyaXZlcnMvbWQvZG0tdmRvL3BhY2tlci5jPTI3ND1zdGF0aWMgdm9pZCBmaW5pc2hfY29tcHJlc3NlZF93cml0ZShzdHJ1Y3QgdmRvX2NvbXBsZXRpb24gKmNvbXBsZXRpb24pXG4tLVxuZHJpdmVycy9tZC9kbS12ZG8vcGFja2VyLmMtMjg0LVx0ICovXG5kcml2ZXJzL21kL2RtLXZkby9wYWNrZXIuYzoyODU6XHRmb3IgKGNsaWVudCA9IGFnZW50LVx1MDAzZWNvbXByZXNzaW9uLm5leHRfaW5fYmF0Y2g7IGNsaWVudCAhPSBOVUxMOyBjbGllbnQgPSBuZXh0KSB7XG5kcml2ZXJzL21kL2RtLXZkby9wYWNrZXIuYzoyODY6XHRcdG5leHQgPSBjbGllbnQtXHUwMDNlY29tcHJlc3Npb24ubmV4dF9pbl9iYXRjaDtcbmRyaXZlcnMvbWQvZG0tdmRvL3BhY2tlci5jLTI4Ny1cdFx0cmVsZWFzZV9jb21wcmVzc2VkX3dyaXRlX3dhaXRlcihjbGllbnQsIFx1MDAyNmFnZW50LVx1MDAzZWFsbG9jYXRpb24pO1xuLS1cbmRyaXZlcnMvbWQvZG0tdmRvL3BhY2tlci5jPTI5ND1zdGF0aWMgdm9pZCBoYW5kbGVfY29tcHJlc3NlZF93cml0ZV9lcnJvcihzdHJ1Y3QgdmRvX2NvbXBsZXRpb24gKmNvbXBsZXRpb24pXG4tLVxuZHJpdmVycy9tZC9kbS12ZG8vcGFja2VyLmMtMzA2LVxuZHJpdmVycy9tZC9kbS12ZG8vcGFja2VyLmM6MzA3Olx0Zm9yIChjbGllbnQgPSBhZ2VudC1cdTAwM2Vjb21wcmVzc2lvbi5uZXh0X2luX2JhdGNoOyBjbGllbnQgIT0gTlVMTDsgY2xpZW50ID0gbmV4dCkge1xuZHJpdmVycy9tZC9kbS12ZG8vcGFja2VyLmM6MzA4Olx0XHRuZXh0ID0gY2xpZW50LVx1MDAzZWNvbXByZXNzaW9uLm5leHRfaW5fYmF0Y2g7XG5kcml2ZXJzL21kL2RtLXZkby9wYWNrZXIuYy0zMDktXHRcdHdyaXRlX2RhdGFfdmlvKGNsaWVudCk7XG4tLVxuZHJpdmVycy9tZC9kbS12ZG8vcGFja2VyLmM9Mzg5PXN0YXRpYyBibG9ja19zaXplX3QgX19tdXN0X2NoZWNrIHBhY2tfZnJhZ21lbnQoc3RydWN0IGNvbXByZXNzaW9uX3N0YXRlICpjb21wcmVzc2lvbixcbi0tXG5kcml2ZXJzL21kL2RtLXZkby9wYWNrZXIuYy0zOTYtXG5kcml2ZXJzL21kL2RtLXZkby9wYWNrZXIuYzozOTc6XHR0b19wYWNrLVx1MDAzZW5leHRfaW5fYmF0Y2ggPSBjb21wcmVzc2lvbi1cdTAwM2VuZXh0X2luX2JhdGNoO1xuZHJpdmVycy9tZC9kbS12ZG8vcGFja2VyLmM6Mzk4Olx0Y29tcHJlc3Npb24tXHUwMDNlbmV4dF9pbl9iYXRjaCA9IGRhdGFfdmlvO1xuZHJpdmVycy9tZC9kbS12ZG8vcGFja2VyLmMtMzk5LVx0dG9fcGFjay1cdTAwM2VzbG90ID0gc2xvdDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2h0dC5oPTE2Nz1lbnVtIGh0dF9kYXRhX3R4X2V4dF90aWQge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvaHR0LmgtMTgyLSAqICAgICAgICAgICAgICAgICAgKEhMIGhvc3RzIG1hbmFnZSBxdWV1ZXMgb24gdGhlIGhvc3QgKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9odHQuaDoxODM6ICogICAgICAgbW9yZV9pbl9iYXRjaDogb25seSBmb3IgSEwgaG9zdHMuIGluZGljYXRlcyBpZiBtb3JlIHBhY2tldHMgYXJlXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2h0dC5oLTE4NC0gKiAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nLiB0aGlzIGFsbG93cyB0YXJnZXQgdG8gd2FpdCBhbmQgYWdncmVnYXRlXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9mdy9hcGkvbG9jYXRpb24uaD0xNzUwPWVudW0gaXdsX3RvZl9yZXNwb25zZV9zdGF0dXMge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZncvYXBpL2xvY2F0aW9uLmgtMTc2MS0gKlx0XHUwMDI2ZW51bSBpd2xfdG9mX3Jlc3BvbnNlX3N0YXR1cy5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZncvYXBpL2xvY2F0aW9uLmg6MTc2MjogKiBAbGFzdF9pbl9iYXRjaDogcmVwcm90IHBvbGljeSAod2hlbiBub3QgYWxsIHJlc3BvbnNlcyBhcmUgdXBsb2FkZWQgYXQgb25jZSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZncvYXBpL2xvY2F0aW9uLmgtMTc2My0gKiBAbnVtX29mX2FwczogTnVtYmVyIG9mIEFQcyB0byBtZWFzdXJlIChlcnJvciBpZiBcdTAwM2UgSVdMX1RPRl9NQVhfQVBTKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZncvYXBpL2xvY2F0aW9uLmg9MTc2Nj1zdHJ1Y3QgaXdsX3RvZl9yYW5nZV9yc3BfbnRmeV92NSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9mdy9hcGkvbG9jYXRpb24uaC0xNzY4LVx0dTggcmVxdWVzdF9zdGF0dXM7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2Z3L2FwaS9sb2NhdGlvbi5oOjE3Njk6XHR1OCBsYXN0X2luX2JhdGNoO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9mdy9hcGkvbG9jYXRpb24uaC0xNzcwLVx0dTggbnVtX29mX2Fwcztcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9mdG0taW5pdGlhdG9yLmM9MzM0PXZvaWQgaXdsX21sZF9oYW5kbGVfZnRtX3Jlc3Bfbm90aWYoc3RydWN0IGl3bF9tbGQgKm1sZCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9mdG0taW5pdGlhdG9yLmMtMzM3LVx0c3RydWN0IGl3bF90b2ZfcmFuZ2VfcnNwX250ZnkgKmZ3X3Jlc3AgPSAodm9pZCAqKXBrdC1cdTAwM2VkYXRhO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvZnRtLWluaXRpYXRvci5jOjMzODpcdHU4IG51bV9vZl9hcHMsIGxhc3RfaW5fYmF0Y2g7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9mdG0taW5pdGlhdG9yLmMtMzM5LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2Z0bS1pbml0aWF0b3IuYy0zNDgtXHRudW1fb2ZfYXBzID0gZndfcmVzcC1cdTAwM2VudW1fb2ZfYXBzO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvZnRtLWluaXRpYXRvci5jOjM0OTpcdGxhc3RfaW5fYmF0Y2ggPSBmd19yZXNwLVx1MDAzZWxhc3RfcmVwb3J0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvZnRtLWluaXRpYXRvci5jLTM1MC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9mdG0taW5pdGlhdG9yLmMtNDI4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvZnRtLWluaXRpYXRvci5jOjQyOTpcdGlmIChsYXN0X2luX2JhdGNoKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9mdG0taW5pdGlhdG9yLmMtNDMwLVx0XHRjZmc4MDIxMV9wbXNyX2NvbXBsZXRlKG1sZC1cdTAwM2VmdG1faW5pdGlhdG9yLnJlcV93ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL2Z0bS1pbml0aWF0b3IuYz0xMjY4PXZvaWQgaXdsX212bV9mdG1fcmFuZ2VfcmVzcChzdHJ1Y3QgaXdsX212bSAqbXZtLCBzdHJ1Y3QgaXdsX3J4X2NtZF9idWZmZXIgKnJ4Yilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9mdG0taW5pdGlhdG9yLmMtMTI3OC1cdFx0XHRcdCAgSVdMX1VDT0RFX1RMVl9BUElfRlRNX05FV19SQU5HRV9SRVEpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vZnRtLWluaXRpYXRvci5jOjEyNzk6XHR1OCBudW1fb2ZfYXBzLCBsYXN0X2luX2JhdGNoO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vZnRtLWluaXRpYXRvci5jLTEyODAtXHR1OCBub3RpZl92ZXIgPSBpd2xfbXZtX2Z0bV9nZXRfcmFuZ2VfcmVzcF92ZXIobXZtKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9mdG0taW5pdGlhdG9yLmMtMTI5Ni1cdFx0bnVtX29mX2FwcyA9IGZ3X3Jlc3BfdjgtXHUwMDNlbnVtX29mX2FwcztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL2Z0bS1pbml0aWF0b3IuYzoxMjk3Olx0XHRsYXN0X2luX2JhdGNoID0gZndfcmVzcF92OC1cdTAwM2VsYXN0X3JlcG9ydDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL2Z0bS1pbml0aWF0b3IuYy0xMjk4LVx0fSBlbHNlIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9mdG0taW5pdGlhdG9yLmMtMTMwMy1cdFx0bnVtX29mX2FwcyA9IGZ3X3Jlc3BfdjUtXHUwMDNlbnVtX29mX2FwcztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL2Z0bS1pbml0aWF0b3IuYzoxMzA0Olx0XHRsYXN0X2luX2JhdGNoID0gZndfcmVzcF92NS1cdTAwM2VsYXN0X2luX2JhdGNoO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vZnRtLWluaXRpYXRvci5jLTEzMDUtXHR9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vZnRtLWluaXRpYXRvci5jLTE0MDUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9mdG0taW5pdGlhdG9yLmM6MTQwNjpcdGlmIChsYXN0X2luX2JhdGNoKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9mdG0taW5pdGlhdG9yLmMtMTQwNy1cdFx0Y2ZnODAyMTFfcG1zcl9jb21wbGV0ZShtdm0tXHUwMDNlZnRtX2luaXRpYXRvci5yZXFfd2Rldixcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTYyOD1zdGF0aWMgaW50IG52bWV0X3RyeV9zZW5kX2RhdGFfcGR1KHN0cnVjdCBudm1ldF90Y3BfY21kICpjbWQpXG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy02NTQtXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjY1NTpzdGF0aWMgaW50IG52bWV0X3RyeV9zZW5kX2RhdGEoc3RydWN0IG52bWV0X3RjcF9jbWQgKmNtZCwgYm9vbCBsYXN0X2luX2JhdGNoKVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy02NTYte1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtNjY3LVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYzo2Njg6XHRcdGlmICgoIWxhc3RfaW5fYmF0Y2ggXHUwMDI2XHUwMDI2IGNtZC1cdTAwM2VxdWV1ZS1cdTAwM2VzZW5kX2xpc3RfbGVuKSB8fFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy02NjktXHRcdCAgICBjbWQtXHUwMDNld2J5dGVzX2RvbmUgJiM0MzsgbGVmdCBcdTAwM2MgY21kLVx1MDAzZXJlcS50cmFuc2Zlcl9sZW4gfHxcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTcwOD1zdGF0aWMgaW50IG52bWV0X3RyeV9zZW5kX3Jlc3BvbnNlKHN0cnVjdCBudm1ldF90Y3BfY21kICpjbWQsXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjcwOTpcdFx0Ym9vbCBsYXN0X2luX2JhdGNoKVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy03MTAte1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtNzE2LVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYzo3MTc6XHRpZiAoIWxhc3RfaW5fYmF0Y2ggXHUwMDI2XHUwMDI2IGNtZC1cdTAwM2VxdWV1ZS1cdTAwM2VzZW5kX2xpc3RfbGVuKVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy03MTgtXHRcdG1zZy5tc2dfZmxhZ3MgfD0gTVNHX01PUkU7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy03MzgtXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjczOTpzdGF0aWMgaW50IG52bWV0X3RyeV9zZW5kX3IydChzdHJ1Y3QgbnZtZXRfdGNwX2NtZCAqY21kLCBib29sIGxhc3RfaW5fYmF0Y2gpXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTc0MC17XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy03NDYtXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjc0NzpcdGlmICghbGFzdF9pbl9iYXRjaCBcdTAwMjZcdTAwMjYgY21kLVx1MDAzZXF1ZXVlLVx1MDAzZXNlbmRfbGlzdF9sZW4pXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTc0OC1cdFx0bXNnLm1zZ19mbGFncyB8PSBNU0dfTU9SRTtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTc2Ni1cbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM6NzY3OnN0YXRpYyBpbnQgbnZtZXRfdHJ5X3NlbmRfZGRnc3Qoc3RydWN0IG52bWV0X3RjcF9jbWQgKmNtZCwgYm9vbCBsYXN0X2luX2JhdGNoKVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy03Njgte1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtNzc3LVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYzo3Nzg6XHRpZiAoIWxhc3RfaW5fYmF0Y2ggXHUwMDI2XHUwMDI2IGNtZC1cdTAwM2VxdWV1ZS1cdTAwM2VzZW5kX2xpc3RfbGVuKVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy03NzktXHRcdG1zZy5tc2dfZmxhZ3MgfD0gTVNHX01PUkU7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYz04MDI9c3RhdGljIGludCBudm1ldF90Y3BfdHJ5X3NlbmRfb25lKHN0cnVjdCBudm1ldF90Y3BfcXVldWUgKnF1ZXVlLFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYzo4MDM6XHRcdGJvb2wgbGFzdF9pbl9iYXRjaClcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtODA0LXtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTgyMC1cdGlmIChjbWQtXHUwMDNlc3RhdGUgPT0gTlZNRVRfVENQX1NFTkRfREFUQSkge1xuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYzo4MjE6XHRcdHJldCA9IG52bWV0X3RyeV9zZW5kX2RhdGEoY21kLCBsYXN0X2luX2JhdGNoKTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtODIyLVx0XHRpZiAocmV0IFx1MDAzYz0gMClcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTgyNi1cdGlmIChjbWQtXHUwMDNlc3RhdGUgPT0gTlZNRVRfVENQX1NFTkRfRERHU1QpIHtcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM6ODI3Olx0XHRyZXQgPSBudm1ldF90cnlfc2VuZF9kZGdzdChjbWQsIGxhc3RfaW5fYmF0Y2gpO1xuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy04MjgtXHRcdGlmIChyZXQgXHUwMDNjPSAwKVxuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtODMyLVx0aWYgKGNtZC1cdTAwM2VzdGF0ZSA9PSBOVk1FVF9UQ1BfU0VORF9SMlQpIHtcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM6ODMzOlx0XHRyZXQgPSBudm1ldF90cnlfc2VuZF9yMnQoY21kLCBsYXN0X2luX2JhdGNoKTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtODM0LVx0XHRpZiAocmV0IFx1MDAzYz0gMClcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTgzOC1cdGlmIChjbWQtXHUwMDNlc3RhdGUgPT0gTlZNRVRfVENQX1NFTkRfUkVTUE9OU0UpXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjgzOTpcdFx0cmV0ID0gbnZtZXRfdHJ5X3NlbmRfcmVzcG9uc2UoY21kLCBsYXN0X2luX2JhdGNoKTtcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtODQwLVxuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTQ1PXN0cnVjdCB2aG9zdF92ZHBhIHtcbi0tXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy01OC1cdHN0cnVjdCBldmVudGZkX2N0eCAqY29uZmlnX2N0eDtcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjU5Olx0aW50IGluX2JhdGNoO1xuZHJpdmVycy92aG9zdC92ZHBhLmMtNjAtXHRzdHJ1Y3QgdmRwYV9pb3ZhX3JhbmdlIHJhbmdlO1xuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTI0NT1zdGF0aWMgaW50IHZob3N0X3ZkcGFfcmVzZXQoc3RydWN0IHZob3N0X3ZkcGEgKnYpXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0yNDYte1xuZHJpdmVycy92aG9zdC92ZHBhLmM6MjQ3Olx0di1cdTAwM2Vpbl9iYXRjaCA9IDA7XG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0yNDgtXHRyZXR1cm4gX2NvbXBhdF92ZHBhX3Jlc2V0KHYpO1xuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTk5Mj1zdGF0aWMgaW50IHZob3N0X3ZkcGFfbWFwKHN0cnVjdCB2aG9zdF92ZHBhICp2LCBzdHJ1Y3Qgdmhvc3RfaW90bGIgKmlvdGxiLFxuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTEwMDgtXHR9IGVsc2UgaWYgKG9wcy1cdTAwM2VzZXRfbWFwKSB7XG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzoxMDA5Olx0XHRpZiAoIXYtXHUwMDNlaW5fYmF0Y2gpXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xMDEwLVx0XHRcdHIgPSBvcHMtXHUwMDNlc2V0X21hcCh2ZHBhLCBhc2lkLCBpb3RsYik7XG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmM9MTAyNz1zdGF0aWMgdm9pZCB2aG9zdF92ZHBhX3VubWFwKHN0cnVjdCB2aG9zdF92ZHBhICp2LFxuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTEwMzctXHRpZiAob3BzLVx1MDAzZXNldF9tYXApIHtcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjEwMzg6XHRcdGlmICghdi1cdTAwM2Vpbl9iYXRjaClcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTEwMzktXHRcdFx0b3BzLVx1MDAzZXNldF9tYXAodmRwYSwgYXNpZCwgaW90bGIpO1xuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTEyNDM9c3RhdGljIGludCB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgdTMyIGFzaWQsXG4tLVxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTI3MS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjEyNzI6XHRpZiAoKHYtXHUwMDNlaW5fYmF0Y2ggXHUwMDI2XHUwMDI2IHYtXHUwMDNlYmF0Y2hfYXNpZCAhPSBhc2lkKSB8fCAhaW90bGIpIHtcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjEyNzM6XHRcdGlmICh2LVx1MDAzZWluX2JhdGNoIFx1MDAyNlx1MDAyNiB2LVx1MDAzZWJhdGNoX2FzaWQgIT0gYXNpZCkge1xuZHJpdmVycy92aG9zdC92ZHBhLmMtMTI3NC1cdFx0XHRkZXZfaW5mbyhcdTAwMjZ2LVx1MDAzZWRldiwgXCYjMzQ7YmF0Y2ggaWQgJWQgYXNpZCAlZFxcblwmIzM0Oyxcbi0tXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xMjkxLVx0XHR2LVx1MDAzZWJhdGNoX2FzaWQgPSBhc2lkO1xuZHJpdmVycy92aG9zdC92ZHBhLmM6MTI5MjpcdFx0di1cdTAwM2Vpbl9iYXRjaCA9IHRydWU7XG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xMjkzLVx0XHRicmVhaztcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTEyOTQtXHRjYXNlIFZIT1NUX0lPVExCX0JBVENIX0VORDpcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjEyOTU6XHRcdGlmICh2LVx1MDAzZWluX2JhdGNoIFx1MDAyNlx1MDAyNiBvcHMtXHUwMDNlc2V0X21hcCkge1xuZHJpdmVycy92aG9zdC92ZHBhLmMtMTI5Ni1cdFx0XHRyID0gb3BzLVx1MDAzZXNldF9tYXAodmRwYSwgYXNpZCwgaW90bGIpO1xuLS1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTEyOTgtXHRcdH1cbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjEyOTk6XHRcdHYtXHUwMDNlaW5fYmF0Y2ggPSBmYWxzZTtcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTEzMDAtXHRcdGJyZWFrO1xuLS1cbmZzL2V4dDQvZXh0NC5oPTE1ODY9c3RydWN0IGV4dDRfc2JfaW5mbyB7XG4tLVxuZnMvZXh0NC9leHQ0LmgtMTY0Ni1cdHUzMiBzX21heF9iYXRjaF90aW1lO1xuZnMvZXh0NC9leHQ0Lmg6MTY0NzpcdHUzMiBzX21pbl9iYXRjaF90aW1lO1xuZnMvZXh0NC9leHQ0LmgtMTY0OC1cdHN0cnVjdCBmaWxlICpzX2pvdXJuYWxfYmRldl9maWxlO1xuLS1cbmZzL2V4dDQvc3VwZXIuYz0xNjkyPWVudW0ge1xuLS1cbmZzL2V4dDQvc3VwZXIuYy0xNjk3LVx0T3B0X2F1dG9fZGFfYWxsb2MsIE9wdF9ub2F1dG9fZGFfYWxsb2MsIE9wdF9ub2xvYWQsXG5mcy9leHQ0L3N1cGVyLmM6MTY5ODpcdE9wdF9jb21taXQsIE9wdF9taW5fYmF0Y2hfdGltZSwgT3B0X21heF9iYXRjaF90aW1lLCBPcHRfam91cm5hbF9kZXYsXG5mcy9leHQ0L3N1cGVyLmMtMTY5OS1cdE9wdF9qb3VybmFsX3BhdGgsIE9wdF9qb3VybmFsX2NoZWNrc3VtLCBPcHRfam91cm5hbF9hc3luY19jb21taXQsXG4tLVxuZnMvZXh0NC9zdXBlci5jPTE3NjI9c3RhdGljIGNvbnN0IHN0cnVjdCBmc19wYXJhbWV0ZXJfc3BlYyBleHQ0X3BhcmFtX3NwZWNzW10gPSB7XG4tLVxuZnMvZXh0NC9zdXBlci5jLTE3ODMtXHRmc3BhcmFtX3UzMlx0KFwmIzM0O2NvbW1pdFwmIzM0OyxcdFx0T3B0X2NvbW1pdCksXG5mcy9leHQ0L3N1cGVyLmM6MTc4NDpcdGZzcGFyYW1fdTMyXHQoXCYjMzQ7bWluX2JhdGNoX3RpbWVcJiMzNDssXHRPcHRfbWluX2JhdGNoX3RpbWUpLFxuZnMvZXh0NC9zdXBlci5jLTE3ODUtXHRmc3BhcmFtX3UzMlx0KFwmIzM0O21heF9iYXRjaF90aW1lXCYjMzQ7LFx0T3B0X21heF9iYXRjaF90aW1lKSxcbi0tXG5mcy9leHQ0L3N1cGVyLmM9MTk2ND1leHQ0X3NiX3JlYWRfZW5jb2RpbmcoY29uc3Qgc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy0xOTg0LSNkZWZpbmUgRVhUNF9TUEVDX3NfbWF4X2JhdGNoX3RpbWVcdFx0KDEgXHUwMDNjXHUwMDNjICA4KVxuZnMvZXh0NC9zdXBlci5jOjE5ODU6I2RlZmluZSBFWFQ0X1NQRUNfc19taW5fYmF0Y2hfdGltZVx0XHQoMSBcdTAwM2NcdTAwM2MgIDkpXG5mcy9leHQ0L3N1cGVyLmMtMTk4Ni0jZGVmaW5lIEVYVDRfU1BFQ19zX2lub2RlX3JlYWRhaGVhZF9ibGtzXHQoMSBcdTAwM2NcdTAwM2MgMTApXG4tLVxuZnMvZXh0NC9zdXBlci5jPTE5OTc9c3RydWN0IGV4dDRfZnNfY29udGV4dCB7XG4tLVxuZnMvZXh0NC9zdXBlci5jLTIwMjEtXHR1MzJcdFx0c19tYXhfYmF0Y2hfdGltZTtcbmZzL2V4dDQvc3VwZXIuYzoyMDIyOlx0dTMyXHRcdHNfbWluX2JhdGNoX3RpbWU7XG5mcy9leHQ0L3N1cGVyLmMtMjAyMy1cdGt1aWRfdFx0XHRzX3Jlc3VpZDtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9MjE3MT1zdGF0aWMgaW50IGV4dDRfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSlcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMjI3OS1cdFx0cmV0dXJuIDA7XG5mcy9leHQ0L3N1cGVyLmM6MjI4MDpcdGNhc2UgT3B0X21pbl9iYXRjaF90aW1lOlxuZnMvZXh0NC9zdXBlci5jOjIyODE6XHRcdGN0eC1cdTAwM2VzX21pbl9iYXRjaF90aW1lID0gcmVzdWx0LnVpbnRfMzI7XG5mcy9leHQ0L3N1cGVyLmM6MjI4MjpcdFx0Y3R4LVx1MDAzZXNwZWMgfD0gRVhUNF9TUEVDX3NfbWluX2JhdGNoX3RpbWU7XG5mcy9leHQ0L3N1cGVyLmMtMjI4My1cdFx0cmV0dXJuIDA7XG4tLVxuZnMvZXh0NC9zdXBlci5jPTI4NTU9c3RhdGljIHZvaWQgZXh0NF9hcHBseV9vcHRpb25zKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMjg3MC1cdEFQUExZKHNfbWF4X2JhdGNoX3RpbWUpO1xuZnMvZXh0NC9zdXBlci5jOjI4NzE6XHRBUFBMWShzX21pbl9iYXRjaF90aW1lKTtcbmZzL2V4dDQvc3VwZXIuYy0yODcyLVx0QVBQTFkoc193YW50X2V4dHJhX2lzaXplKTtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9Mjk2NT1zdGF0aWMgaW50IF9leHQ0X3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMzAyMy1cdFx0U0VRX09QVFNfUFJJTlQoXCYjMzQ7Y29tbWl0PSVsdVwmIzM0Oywgc2JpLVx1MDAzZXNfY29tbWl0X2ludGVydmFsIC8gSFopO1xuZnMvZXh0NC9zdXBlci5jOjMwMjQ6XHRpZiAobm9kZWZzIHx8IHNiaS1cdTAwM2VzX21pbl9iYXRjaF90aW1lICE9IEVYVDRfREVGX01JTl9CQVRDSF9USU1FKVxuZnMvZXh0NC9zdXBlci5jOjMwMjU6XHRcdFNFUV9PUFRTX1BSSU5UKFwmIzM0O21pbl9iYXRjaF90aW1lPSV1XCYjMzQ7LCBzYmktXHUwMDNlc19taW5fYmF0Y2hfdGltZSk7XG5mcy9leHQ0L3N1cGVyLmMtMzAyNi1cdGlmIChub2RlZnMgfHwgc2JpLVx1MDAzZXNfbWF4X2JhdGNoX3RpbWUgIT0gRVhUNF9ERUZfTUFYX0JBVENIX1RJTUUpXG4tLVxuZnMvZXh0NC9zdXBlci5jPTUzMzg9c3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTUzNzMtXHRzYmktXHUwMDNlc19jb21taXRfaW50ZXJ2YWwgPSBKQkQyX0RFRkFVTFRfTUFYX0NPTU1JVF9BR0UgKiBIWjtcbmZzL2V4dDQvc3VwZXIuYzo1Mzc0Olx0c2JpLVx1MDAzZXNfbWluX2JhdGNoX3RpbWUgPSBFWFQ0X0RFRl9NSU5fQkFUQ0hfVElNRTtcbmZzL2V4dDQvc3VwZXIuYy01Mzc1LVx0c2JpLVx1MDAzZXNfbWF4X2JhdGNoX3RpbWUgPSBFWFQ0X0RFRl9NQVhfQkFUQ0hfVElNRTtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9NTg2OD1zdGF0aWMgdm9pZCBleHQ0X2luaXRfam91cm5hbF9wYXJhbXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgam91cm5hbF90ICpqb3VybmFsKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy01ODcyLVx0am91cm5hbC1cdTAwM2VqX2NvbW1pdF9pbnRlcnZhbCA9IHNiaS1cdTAwM2VzX2NvbW1pdF9pbnRlcnZhbDtcbmZzL2V4dDQvc3VwZXIuYzo1ODczOlx0am91cm5hbC1cdTAwM2VqX21pbl9iYXRjaF90aW1lID0gc2JpLVx1MDAzZXNfbWluX2JhdGNoX3RpbWU7XG5mcy9leHQ0L3N1cGVyLmMtNTg3NC1cdGpvdXJuYWwtXHUwMDNlal9tYXhfYmF0Y2hfdGltZSA9IHNiaS1cdTAwM2VzX21heF9iYXRjaF90aW1lO1xuLS1cbmZzL2V4dDQvc3VwZXIuYz02NTQ1PXN0cnVjdCBleHQ0X21vdW50X29wdGlvbnMge1xuLS1cbmZzL2V4dDQvc3VwZXIuYy02NTUwLVx0dW5zaWduZWQgbG9uZyBzX2NvbW1pdF9pbnRlcnZhbDtcbmZzL2V4dDQvc3VwZXIuYzo2NTUxOlx0dTMyIHNfbWluX2JhdGNoX3RpbWUsIHNfbWF4X2JhdGNoX3RpbWU7XG5mcy9leHQ0L3N1cGVyLmMtNjU1Mi0jaWZkZWYgQ09ORklHX1FVT1RBXG4tLVxuZnMvZXh0NC9zdXBlci5jPTY1NTg9c3RhdGljIGludCBfX2V4dDRfcmVtb3VudChzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTY1ODEtXHRvbGRfb3B0cy5zX2NvbW1pdF9pbnRlcnZhbCA9IHNiaS1cdTAwM2VzX2NvbW1pdF9pbnRlcnZhbDtcbmZzL2V4dDQvc3VwZXIuYzo2NTgyOlx0b2xkX29wdHMuc19taW5fYmF0Y2hfdGltZSA9IHNiaS1cdTAwM2VzX21pbl9iYXRjaF90aW1lO1xuZnMvZXh0NC9zdXBlci5jLTY1ODMtXHRvbGRfb3B0cy5zX21heF9iYXRjaF90aW1lID0gc2JpLVx1MDAzZXNfbWF4X2JhdGNoX3RpbWU7XG4tLVxuZnMvZXh0NC9zdXBlci5jLTY4NjMtXHRzYmktXHUwMDNlc19jb21taXRfaW50ZXJ2YWwgPSBvbGRfb3B0cy5zX2NvbW1pdF9pbnRlcnZhbDtcbmZzL2V4dDQvc3VwZXIuYzo2ODY0Olx0c2JpLVx1MDAzZXNfbWluX2JhdGNoX3RpbWUgPSBvbGRfb3B0cy5zX21pbl9iYXRjaF90aW1lO1xuZnMvZXh0NC9zdXBlci5jLTY4NjUtXHRzYmktXHUwMDNlc19tYXhfYmF0Y2hfdGltZSA9IG9sZF9vcHRzLnNfbWF4X2JhdGNoX3RpbWU7XG4tLVxuZnMvamJkMi9qb3VybmFsLmM9MTUxOD1zdGF0aWMgam91cm5hbF90ICpqb3VybmFsX2luaXRfY29tbW9uKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXG4tLVxuZnMvamJkMi9qb3VybmFsLmMtMTU1Ni1cdGpvdXJuYWwtXHUwMDNlal9jb21taXRfaW50ZXJ2YWwgPSAoSFogKiBKQkQyX0RFRkFVTFRfTUFYX0NPTU1JVF9BR0UpO1xuZnMvamJkMi9qb3VybmFsLmM6MTU1NzpcdGpvdXJuYWwtXHUwMDNlal9taW5fYmF0Y2hfdGltZSA9IDA7XG5mcy9qYmQyL2pvdXJuYWwuYy0xNTU4LVx0am91cm5hbC1cdTAwM2VqX21heF9iYXRjaF90aW1lID0gMTUwMDA7IC8qIDE1bXMgKi9cbi0tXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmM9MTg4OD1pbnQgamJkMl9qb3VybmFsX3N0b3AoaGFuZGxlX3QgKmhhbmRsZSlcbi0tXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmMtMTk2OC1cdFx0Y29tbWl0X3RpbWUgPSBtYXhfdCh1NjQsIGNvbW1pdF90aW1lLFxuZnMvamJkMi90cmFuc2FjdGlvbi5jOjE5Njk6XHRcdFx0XHQgICAgMTAwMCpqb3VybmFsLVx1MDAzZWpfbWluX2JhdGNoX3RpbWUpO1xuZnMvamJkMi90cmFuc2FjdGlvbi5jLTE5NzAtXHRcdGNvbW1pdF90aW1lID0gbWluX3QodTY0LCBjb21taXRfdGltZSxcbi0tXG5pbmNsdWRlL2xpbnV4L2piZDIuaD03NjM9c3RydWN0IGpvdXJuYWxfc1xuLS1cbmluY2x1ZGUvbGludXgvamJkMi5oLTExODAtXHQvKipcbmluY2x1ZGUvbGludXgvamJkMi5oOjExODE6XHQgKiBAal9taW5fYmF0Y2hfdGltZTpcbmluY2x1ZGUvbGludXgvamJkMi5oLTExODItXHQgKlxuLS1cbmluY2x1ZGUvbGludXgvamJkMi5oLTExODUtXHQgKi9cbmluY2x1ZGUvbGludXgvamJkMi5oOjExODY6XHR1MzJcdFx0XHRqX21pbl9iYXRjaF90aW1lO1xuaW5jbHVkZS9saW51eC9qYmQyLmgtMTE4Ny1cbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg9MTMyPXVuaW9uIGJwZl9pdGVyX2xpbmtfaW5mbyB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTY0OS0gKlx0XHRUd28gb3BhcXVlIHZhbHVlcyBhcmUgdXNlZCB0byBtYW5hZ2UgYmF0Y2ggb3BlcmF0aW9ucyxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDo2NTA6ICpcdFx0KmluX2JhdGNoKiBhbmQgKm91dF9iYXRjaCouIEluaXRpYWxseSwgKmluX2JhdGNoKiBtdXN0IGJlIHNldFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTY1MS0gKlx0XHR0byBOVUxMIHRvIGJlZ2luIHRoZSBiYXRjaGVkIG9wZXJhdGlvbi4gQWZ0ZXIgZWFjaCBzdWJzZXF1ZW50XG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNjUyLSAqXHRcdCoqQlBGX01BUF9MT09LVVBfQkFUQ0gqKiwgdGhlIGNhbGxlciBzaG91bGQgcGFzcyB0aGUgcmVzdWx0YW50XG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NjUzOiAqXHRcdCpvdXRfYmF0Y2gqIGFzIHRoZSAqaW5fYmF0Y2gqIGZvciB0aGUgbmV4dCBvcGVyYXRpb24gdG9cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDo2NTQ6ICpcdFx0Y29udGludWUgaXRlcmF0aW9uIGZyb20gdGhlIGN1cnJlbnQgcG9pbnQuIEJvdGggKmluX2JhdGNoKiBhbmRcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC02NTUtICpcdFx0Km91dF9iYXRjaCogbXVzdCBwb2ludCB0byBtZW1vcnkgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYSBrZXksXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTcxNy0gKlx0XHRFYWNoIGVsZW1lbnQgc3BlY2lmaWVkIGluICprZXlzKiBpcyBzZXF1ZW50aWFsbHkgdXBkYXRlZCB0byB0aGVcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDo3MTg6ICpcdFx0dmFsdWUgaW4gdGhlIGNvcnJlc3BvbmRpbmcgaW5kZXggaW4gKnZhbHVlcyouIFRoZSAqaW5fYmF0Y2gqXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNzE5LSAqXHRcdGFuZCAqb3V0X2JhdGNoKiBwYXJhbWV0ZXJzIGFyZSBpZ25vcmVkIGFuZCBzaG91bGQgYmUgemVyb2VkLlxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC03NjYtICpcdFx0RWFjaCBlbGVtZW50IHNwZWNpZmllZCBpbiAqa2V5cyogaXMgc2VxdWVudGlhbGx5IGRlbGV0ZWQuIFRoZVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjc2NzogKlx0XHQqaW5fYmF0Y2gqLCAqb3V0X2JhdGNoKiwgYW5kICp2YWx1ZXMqIHBhcmFtZXRlcnMgYXJlIGlnbm9yZWRcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC03NjgtICpcdFx0YW5kIHNob3VsZCBiZSB6ZXJvZWQuXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTE1Mjc9dW5pb24gYnBmX2F0dHIge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xNTkxLVx0c3RydWN0IHsgLyogc3RydWN0IHVzZWQgYnkgQlBGX01BUF8qX0JBVENIIGNvbW1hbmRzICovXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTU5MjpcdFx0X19hbGlnbmVkX3U2NFx0aW5fYmF0Y2g7XHQvKiBzdGFydCBiYXRjaCxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xNTkzLVx0XHRcdFx0XHRcdCAqIE5VTEwgdG8gc3RhcnQgZnJvbSBiZWdpbm5pbmdcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0xNzczPV9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xNzgyLVx0dm9pZCBfX3VzZXIgKnVrZXlzID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXHUwMDNlYmF0Y2gua2V5cyk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoxNzgzOlx0dm9pZCBfX3VzZXIgKnViYXRjaCA9IHU2NF90b191c2VyX3B0cihhdHRyLVx1MDAzZWJhdGNoLmluX2JhdGNoKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTE3ODQtXHR1MzIgYmF0Y2gsIG1heF9jb3VudCwgc2l6ZSwgYnVja2V0X3NpemUsIG1hcF9pZDtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMjQ1PXN0YXRpYyBpbnQgX19yaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMjUyLVx0dm9pZCBfX3VzZXIgKnVrZXlzID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXHUwMDNlYmF0Y2gua2V5cyk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMjUzOlx0dm9pZCBfX3VzZXIgKnViYXRjaCA9IHU2NF90b191c2VyX3B0cihhdHRyLVx1MDAzZWJhdGNoLmluX2JhdGNoKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyNTQtXHR2b2lkICpjdXJzb3IgPSBOVUxMLCAqa2V5cyA9IE5VTEwsICp2YWx1ZXMgPSBOVUxMLCAqZHN0X2tleSwgKmRzdF92YWw7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjEyMD1pbnQgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjEyNC1cdHZvaWQgX191c2VyICp1b2JhdGNoID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXHUwMDNlYmF0Y2gub3V0X2JhdGNoKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjIxMjU6XHR2b2lkIF9fdXNlciAqdWJhdGNoID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXHUwMDNlYmF0Y2guaW5fYmF0Y2gpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMjEyNi1cdHZvaWQgX191c2VyICp2YWx1ZXMgPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cdTAwM2ViYXRjaC52YWx1ZXMpO1xuLS1cbm1tL21lbW9yeS5jPTIzOTI9c3RhdGljIGludCBpbnNlcnRfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL21lbW9yeS5jLTI0MTItXG5tbS9tZW1vcnkuYzoyNDEzOnN0YXRpYyBpbnQgaW5zZXJ0X3BhZ2VfaW5fYmF0Y2hfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwdGVfdCAqcHRlLFxubW0vbWVtb3J5LmMtMjQxNC1cdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBwYWdlICpwYWdlLCBwZ3Byb3RfdCBwcm90KVxuLS1cbm1tL21lbW9yeS5jPTI0Mjc9c3RhdGljIGludCBpbnNlcnRfcGFnZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9tZW1vcnkuYy0yNDYxLVx0XHRmb3IgKHB0ZSA9IHN0YXJ0X3B0ZTsgcHRlX2lkeCBcdTAwM2MgYmF0Y2hfc2l6ZTsgJiM0MzsmIzQzO3B0ZSwgJiM0MzsmIzQzO3B0ZV9pZHgpIHtcbm1tL21lbW9yeS5jOjI0NjI6XHRcdFx0aW50IGVyciA9IGluc2VydF9wYWdlX2luX2JhdGNoX2xvY2tlZCh2bWEsIHB0ZSxcbm1tL21lbW9yeS5jLTI0NjMtXHRcdFx0XHRhZGRyLCBwYWdlc1tjdXJyX3BhZ2VfaWR4XSwgcHJvdCk7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTI1NjQ9Ym9vbCBkZWNheV9wY3BfaGlnaChzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBlcl9jcHVfcGFnZXMgKnBjcClcbm1tL3BhZ2VfYWxsb2MuYy0yNTY1LXtcbm1tL3BhZ2VfYWxsb2MuYzoyNTY2Olx0aW50IGhpZ2hfbWluLCB0b19kcmFpbiwgdG9fZHJhaW5fYmF0Y2hlZCwgYmF0Y2g7XG5tbS9wYWdlX2FsbG9jLmMtMjU2Ny1cdGJvb2wgdG9kbyA9IGZhbHNlO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYy0yNTg0LVx0d2hpbGUgKHRvX2RyYWluIFx1MDAzZSAwKSB7XG5tbS9wYWdlX2FsbG9jLmM6MjU4NTpcdFx0dG9fZHJhaW5fYmF0Y2hlZCA9IG1pbih0b19kcmFpbiwgYmF0Y2gpO1xubW0vcGFnZV9hbGxvYy5jLTI1ODYtXHRcdHBjcF9zcGluX2xvY2tfbm9waW4ocGNwKTtcbm1tL3BhZ2VfYWxsb2MuYzoyNTg3Olx0XHRmcmVlX3BjcHBhZ2VzX2J1bGsoem9uZSwgdG9fZHJhaW5fYmF0Y2hlZCwgcGNwLCAwKTtcbm1tL3BhZ2VfYWxsb2MuYy0yNTg4LVx0XHRwY3Bfc3Bpbl91bmxvY2tfbm9waW4ocGNwKTtcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMjU5MC1cbm1tL3BhZ2VfYWxsb2MuYzoyNTkxOlx0XHR0b19kcmFpbiAtPSB0b19kcmFpbl9iYXRjaGVkO1xubW0vcGFnZV9hbGxvYy5jLTI1OTItXHR9XG4tLVxubW0vc2x1Yi5jPTI4NTE9c3RhdGljIHZvaWQgX19rbWVtX2NhY2hlX2ZyZWVfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKTtcbi0tXG5tbS9zbHViLmMtMjg2My0gKi9cbm1tL3NsdWIuYzoyODY0OnN0YXRpYyB1bnNpZ25lZCBpbnQgX19zaGVhZl9mbHVzaF9tYWluX2JhdGNoKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxubW0vc2x1Yi5jLTI4NjUte1xuLS1cbm1tL3NsdWIuYz0yODkyPXN0YXRpYyB2b2lkIHNoZWFmX2ZsdXNoX21haW4oc3RydWN0IGttZW1fY2FjaGUgKnMpXG4tLVxubW0vc2x1Yi5jLTI4OTgtXG5tbS9zbHViLmM6Mjg5OTpcdFx0cmVtYWluaW5nID0gX19zaGVhZl9mbHVzaF9tYWluX2JhdGNoKHMpO1xubW0vc2x1Yi5jLTI5MDAtXG4tLVxubW0vc2x1Yi5jPTI5MDc9c3RhdGljIGJvb2wgc2hlYWZfdHJ5X2ZsdXNoX21haW4oc3RydWN0IGttZW1fY2FjaGUgKnMpXG4tLVxubW0vc2x1Yi5jLTI5MTYtXHRcdHJldCA9IHRydWU7XG5tbS9zbHViLmM6MjkxNzpcdFx0cmVtYWluaW5nID0gX19zaGVhZl9mbHVzaF9tYWluX2JhdGNoKHMpO1xubW0vc2x1Yi5jLTI5MTgtXG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTEzMj11bmlvbiBicGZfaXRlcl9saW5rX2luZm8ge1xuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC02NDktICpcdFx0VHdvIG9wYXF1ZSB2YWx1ZXMgYXJlIHVzZWQgdG8gbWFuYWdlIGJhdGNoIG9wZXJhdGlvbnMsXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NjUwOiAqXHRcdCppbl9iYXRjaCogYW5kICpvdXRfYmF0Y2gqLiBJbml0aWFsbHksICppbl9iYXRjaCogbXVzdCBiZSBzZXRcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC02NTEtICpcdFx0dG8gTlVMTCB0byBiZWdpbiB0aGUgYmF0Y2hlZCBvcGVyYXRpb24uIEFmdGVyIGVhY2ggc3Vic2VxdWVudFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTY1Mi0gKlx0XHQqKkJQRl9NQVBfTE9PS1VQX0JBVENIKiosIHRoZSBjYWxsZXIgc2hvdWxkIHBhc3MgdGhlIHJlc3VsdGFudFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjY1MzogKlx0XHQqb3V0X2JhdGNoKiBhcyB0aGUgKmluX2JhdGNoKiBmb3IgdGhlIG5leHQgb3BlcmF0aW9uIHRvXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NjU0OiAqXHRcdGNvbnRpbnVlIGl0ZXJhdGlvbiBmcm9tIHRoZSBjdXJyZW50IHBvaW50LiBCb3RoICppbl9iYXRjaCogYW5kXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNjU1LSAqXHRcdCpvdXRfYmF0Y2gqIG11c3QgcG9pbnQgdG8gbWVtb3J5IGxhcmdlIGVub3VnaCB0byBob2xkIGEga2V5LFxuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC03MTctICpcdFx0RWFjaCBlbGVtZW50IHNwZWNpZmllZCBpbiAqa2V5cyogaXMgc2VxdWVudGlhbGx5IHVwZGF0ZWQgdG8gdGhlXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NzE4OiAqXHRcdHZhbHVlIGluIHRoZSBjb3JyZXNwb25kaW5nIGluZGV4IGluICp2YWx1ZXMqLiBUaGUgKmluX2JhdGNoKlxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTcxOS0gKlx0XHRhbmQgKm91dF9iYXRjaCogcGFyYW1ldGVycyBhcmUgaWdub3JlZCBhbmQgc2hvdWxkIGJlIHplcm9lZC5cbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNzY2LSAqXHRcdEVhY2ggZWxlbWVudCBzcGVjaWZpZWQgaW4gKmtleXMqIGlzIHNlcXVlbnRpYWxseSBkZWxldGVkLiBUaGVcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDo3Njc6ICpcdFx0KmluX2JhdGNoKiwgKm91dF9iYXRjaCosIGFuZCAqdmFsdWVzKiBwYXJhbWV0ZXJzIGFyZSBpZ25vcmVkXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNzY4LSAqXHRcdGFuZCBzaG91bGQgYmUgemVyb2VkLlxuLS1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xNTI3PXVuaW9uIGJwZl9hdHRyIHtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTU5MS1cdHN0cnVjdCB7IC8qIHN0cnVjdCB1c2VkIGJ5IEJQRl9NQVBfKl9CQVRDSCBjb21tYW5kcyAqL1xudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjE1OTI6XHRcdF9fYWxpZ25lZF91NjRcdGluX2JhdGNoO1x0Lyogc3RhcnQgYmF0Y2gsXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTU5My1cdFx0XHRcdFx0XHQgKiBOVUxMIHRvIHN0YXJ0IGZyb20gYmVnaW5uaW5nXG4tLVxudG9vbHMvbGliL2JwZi9icGYuYz01Njg9aW50IGJwZl9tYXBfZnJlZXplKGludCBmZClcbi0tXG50b29scy9saWIvYnBmL2JwZi5jLTU4MC1cbnRvb2xzL2xpYi9icGYvYnBmLmM6NTgxOnN0YXRpYyBpbnQgYnBmX21hcF9iYXRjaF9jb21tb24oaW50IGNtZCwgaW50IGZkLCB2b2lkICAqaW5fYmF0Y2gsXG50b29scy9saWIvYnBmL2JwZi5jLTU4Mi1cdFx0XHRcdHZvaWQgKm91dF9iYXRjaCwgdm9pZCAqa2V5cywgdm9pZCAqdmFsdWVzLFxuLS1cbnRvb2xzL2xpYi9icGYvYnBmLmMtNTk0LVx0YXR0ci5iYXRjaC5tYXBfZmQgPSBmZDtcbnRvb2xzL2xpYi9icGYvYnBmLmM6NTk1Olx0YXR0ci5iYXRjaC5pbl9iYXRjaCA9IHB0cl90b191NjQoaW5fYmF0Y2gpO1xudG9vbHMvbGliL2JwZi9icGYuYy01OTYtXHRhdHRyLmJhdGNoLm91dF9iYXRjaCA9IHB0cl90b191NjQob3V0X2JhdGNoKTtcbi0tXG50b29scy9saWIvYnBmL2JwZi5jPTYwOT1pbnQgYnBmX21hcF9kZWxldGVfYmF0Y2goaW50IGZkLCBjb25zdCB2b2lkICprZXlzLCBfX3UzMiAqY291bnQsXG4tLVxudG9vbHMvbGliL2JwZi9icGYuYy02MTUtXG50b29scy9saWIvYnBmL2JwZi5jOjYxNjppbnQgYnBmX21hcF9sb29rdXBfYmF0Y2goaW50IGZkLCB2b2lkICppbl9iYXRjaCwgdm9pZCAqb3V0X2JhdGNoLCB2b2lkICprZXlzLFxudG9vbHMvbGliL2JwZi9icGYuYy02MTctXHRcdFx0IHZvaWQgKnZhbHVlcywgX191MzIgKmNvdW50LFxuLS1cbnRvb2xzL2xpYi9icGYvYnBmLmMtNjE5LXtcbnRvb2xzL2xpYi9icGYvYnBmLmM6NjIwOlx0cmV0dXJuIGJwZl9tYXBfYmF0Y2hfY29tbW9uKEJQRl9NQVBfTE9PS1VQX0JBVENILCBmZCwgaW5fYmF0Y2gsXG50b29scy9saWIvYnBmL2JwZi5jLTYyMS1cdFx0XHRcdCAgICBvdXRfYmF0Y2gsIGtleXMsIHZhbHVlcywgY291bnQsIG9wdHMpO1xuLS1cbnRvb2xzL2xpYi9icGYvYnBmLmMtNjIzLVxudG9vbHMvbGliL2JwZi9icGYuYzo2MjQ6aW50IGJwZl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goaW50IGZkLCB2b2lkICppbl9iYXRjaCwgdm9pZCAqb3V0X2JhdGNoLFxudG9vbHMvbGliL2JwZi9icGYuYy02MjUtXHRcdFx0XHQgICAgdm9pZCAqa2V5cywgdm9pZCAqdmFsdWVzLCBfX3UzMiAqY291bnQsXG4tLVxudG9vbHMvbGliL2JwZi9icGYuYy02MjgtXHRyZXR1cm4gYnBmX21hcF9iYXRjaF9jb21tb24oQlBGX01BUF9MT09LVVBfQU5EX0RFTEVURV9CQVRDSCxcbnRvb2xzL2xpYi9icGYvYnBmLmM6NjI5Olx0XHRcdFx0ICAgIGZkLCBpbl9iYXRjaCwgb3V0X2JhdGNoLCBrZXlzLCB2YWx1ZXMsXG50b29scy9saWIvYnBmL2JwZi5jLTYzMC1cdFx0XHRcdCAgICBjb3VudCwgb3B0cyk7XG4tLVxudG9vbHMvbGliL2JwZi9icGYuaD0yMDc9TElCQlBGX0FQSSBpbnQgYnBmX21hcF9kZWxldGVfYmF0Y2goaW50IGZkLCBjb25zdCB2b2lkICprZXlzLFxuLS1cbnRvb2xzL2xpYi9icGYvYnBmLmgtMjEzLSAqXG50b29scy9saWIvYnBmL2JwZi5oOjIxNDogKiBUaGUgcGFyYW1ldGVyICppbl9iYXRjaCogaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIGJhdGNoIHRvXG50b29scy9saWIvYnBmL2JwZi5oOjIxNTogKiByZWFkLiAqb3V0X2JhdGNoKiBpcyBhbiBvdXRwdXQgcGFyYW1ldGVyIHRoYXQgc2hvdWxkIGJlIHBhc3NlZCBhcyAqaW5fYmF0Y2gqXG50b29scy9saWIvYnBmL2JwZi5oLTIxNi0gKiB0byBzdWJzZXF1ZW50IGNhbGxzIHRvICoqYnBmX21hcF9sb29rdXBfYmF0Y2goKSoqLiBOVUxMIGNhbiBiZSBwYXNzZWQgZm9yXG50b29scy9saWIvYnBmL2JwZi5oOjIxNzogKiAqaW5fYmF0Y2gqIHRvIGluZGljYXRlIHRoYXQgdGhlIGJhdGNoZWQgbG9va3VwIHN0YXJ0cyBmcm9tIHRoZSBiZWdpbm5pbmcgb2ZcbnRvb2xzL2xpYi9icGYvYnBmLmg6MjE4OiAqIHRoZSBtYXAuIEJvdGggKmluX2JhdGNoKiBhbmQgKm91dF9iYXRjaCogbXVzdCBwb2ludCB0byBtZW1vcnkgbGFyZ2UgZW5vdWdoIHRvXG50b29scy9saWIvYnBmL2JwZi5oLTIxOS0gKiBob2xkIGEgc2luZ2xlIGtleSwgZXhjZXB0IGZvciBtYXBzIG9mIHR5cGUgKipCUEZfTUFQX1RZUEVfe0hBU0gsIFBFUkNQVV9IQVNILFxuLS1cbnRvb2xzL2xpYi9icGYvYnBmLmgtMjI4LSAqIEBwYXJhbSBmZCBCUEYgbWFwIGZpbGUgZGVzY3JpcHRvclxudG9vbHMvbGliL2JwZi9icGYuaDoyMjk6ICogQHBhcmFtIGluX2JhdGNoIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IGVsZW1lbnQgaW4gYmF0Y2ggdG8gcmVhZCwgY2FuIHBhc3MgTlVMTCB0b1xudG9vbHMvbGliL2JwZi9icGYuaC0yMzAtICogaW5kaWNhdGUgdGhhdCB0aGUgYmF0Y2hlZCBsb29rdXAgc3RhcnRzIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgbWFwLlxudG9vbHMvbGliL2JwZi9icGYuaDoyMzE6ICogQHBhcmFtIG91dF9iYXRjaCBvdXRwdXQgcGFyYW1ldGVyIHRoYXQgc2hvdWxkIGJlIHBhc3NlZCB0byBuZXh0IGNhbGwgYXMgKmluX2JhdGNoKlxudG9vbHMvbGliL2JwZi9icGYuaC0yMzItICogQHBhcmFtIGtleXMgcG9pbnRlciB0byBhbiBhcnJheSBsYXJnZSBlbm91Z2ggZm9yICpjb3VudCoga2V5c1xuLS1cbnRvb2xzL2xpYi9icGYvYnBmLmgtMjQzLSAqL1xudG9vbHMvbGliL2JwZi9icGYuaDoyNDQ6TElCQlBGX0FQSSBpbnQgYnBmX21hcF9sb29rdXBfYmF0Y2goaW50IGZkLCB2b2lkICppbl9iYXRjaCwgdm9pZCAqb3V0X2JhdGNoLFxudG9vbHMvbGliL2JwZi9icGYuaC0yNDUtXHRcdFx0XHQgICAgdm9pZCAqa2V5cywgdm9pZCAqdmFsdWVzLCBfX3UzMiAqY291bnQsXG4tLVxudG9vbHMvbGliL2JwZi9icGYuaC0yNTItICogQHBhcmFtIGZkIEJQRiBtYXAgZmlsZSBkZXNjcmlwdG9yXG50b29scy9saWIvYnBmL2JwZi5oOjI1MzogKiBAcGFyYW0gaW5fYmF0Y2ggYWRkcmVzcyBvZiB0aGUgZmlyc3QgZWxlbWVudCBpbiBiYXRjaCB0byByZWFkLCBjYW4gcGFzcyBOVUxMIHRvXG50b29scy9saWIvYnBmL2JwZi5oLTI1NC0gKiBnZXQgYWRkcmVzcyBvZiB0aGUgZmlyc3QgZWxlbWVudCBpbiAqb3V0X2JhdGNoKi4gSWYgbm90IE5VTEwsIG11c3QgYmUgbGFyZ2Vcbi0tXG50b29scy9saWIvYnBmL2JwZi5oLTI1Ny0gKiBvZiBrZXkgc2l6ZS5cbnRvb2xzL2xpYi9icGYvYnBmLmg6MjU4OiAqIEBwYXJhbSBvdXRfYmF0Y2ggb3V0cHV0IHBhcmFtZXRlciB0aGF0IHNob3VsZCBiZSBwYXNzZWQgdG8gbmV4dCBjYWxsIGFzICppbl9iYXRjaCpcbnRvb2xzL2xpYi9icGYvYnBmLmgtMjU5LSAqIEBwYXJhbSBrZXlzIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgKmNvdW50KiBrZXlzXG4tLVxudG9vbHMvbGliL2JwZi9icGYuaC0yNzItICovXG50b29scy9saWIvYnBmL2JwZi5oOjI3MzpMSUJCUEZfQVBJIGludCBicGZfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKGludCBmZCwgdm9pZCAqaW5fYmF0Y2gsXG50b29scy9saWIvYnBmL2JwZi5oLTI3NC1cdFx0XHRcdFx0dm9pZCAqb3V0X2JhdGNoLCB2b2lkICprZXlzLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9tYXBfdGVzdHMvbWFwX3BlcmNwdV9zdGF0cy5jPTYzPXN0YXRpYyB2b2lkIGRlbGV0ZV9hbmRfbG9va3VwX2JhdGNoKGludCBtYXBfZmQsIHZvaWQgKmtleXMsIF9fdTMyIGNvdW50KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9tYXBfdGVzdHMvbWFwX3BlcmNwdV9zdGF0cy5jLTY1LVx0c3RhdGljIF9fdTggdmFsdWVzWyg4IFx1MDAzY1x1MDAzYyAxMCkgKiBNQVhfRU5UUklFU107XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbWFwX3Rlc3RzL21hcF9wZXJjcHVfc3RhdHMuYzo2NjpcdHZvaWQgKmluX2JhdGNoID0gTlVMTCwgKm91dF9iYXRjaDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9tYXBfdGVzdHMvbWFwX3BlcmNwdV9zdGF0cy5jLTY3LVx0X191MzIgc2F2ZV9jb3VudCA9IGNvdW50O1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9tYXBfdGVzdHMvbWFwX3BlcmNwdV9zdGF0cy5jLTcwLVx0cmV0ID0gYnBmX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXBfZmQsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbWFwX3Rlc3RzL21hcF9wZXJjcHVfc3RhdHMuYzo3MTpcdFx0XHRcdFx0ICAgICAgXHUwMDI2aW5fYmF0Y2gsIFx1MDAyNm91dF9iYXRjaCxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9tYXBfdGVzdHMvbWFwX3BlcmNwdV9zdGF0cy5jLTcyLVx0XHRcdFx0XHQgICAgICBrZXlzLCB2YWx1ZXMsIFx1MDAyNmNvdW50LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwNzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTgxMgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDExMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBCdWdzIGluIFZob3N0LVZEUEEgSU9UTEIgQmF0Y2hpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGB2aG9zdF92ZHBhYCBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIElPVExCIGJhdGNoaW5nIGxvZ2ljLiBJdCBsb29rcyBsaWtlIGB2LSZndDtpbl9iYXRjaGAgaXMgdGhlIGtleSBmbGFnIGhlcmUsIHVzZWQgaW4gYHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl9tc2dgLCBgdmhvc3RfdmRwYV9tYXBgLCBhbmQgYHZob3N0X3ZkcGFfdW5tYXBgLiBJIHNlZSB0aGF0IGlmIGB2LSZndDtpbl9iYXRjaGAgaXMgdHJ1ZSBpbiBgdmhvc3RfdmRwYV9tYXBgLCBpdCBza2lwcyBjYWxsaW5nIGBvcHMtJmd0O3NldF9tYXBgIGZvciBpbmRpdmlkdWFsIG1hcC91bm1hcCBvcGVyYXRpb25zLCBkZWZlcnJpbmcgdGhlbSB1bnRpbCBhIGBWSE9TVF9JT1RMQl9CQVRDSF9FTkRgIG1lc3NhZ2UuIEF0IHRoYXQgcG9pbnQsIGBvcHMtJmd0O3NldF9tYXBgIGlzIHN1cHBvc2VkIHRvIGJlIGNhbGxlZCBvbmNlIGZvciB0aGUgZW50aXJlIGJhdGNoLgoKVGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgY3J1Y2lhbCBpc3N1ZTogaXQgY29tcGxldGVseSBpZ25vcmVkIHRoZSByZXR1cm4gdmFsdWUgb2YgYG9wcy0mZ3Q7c2V0X21hcGAuICBJZiBgb3BzLSZndDtzZXRfbWFwYCBmYWlsZWQsIHRoZSBlcnJvciB3YXNuJiMzOTt0IGhhbmRsZWQuICBUaGUgcmVjZW50IHBhdGNoIGF0dGVtcHRlZCB0byBmaXggdGhpcyBieSBjaGVja2luZyB0aGUgcmV0dXJuIHZhbHVlLiBIb3dldmVyLCBhZnRlciBjYXJlZnVsbHkgbG9va2luZyBhdCB0aGUgcGF0Y2gsIEkgdGhpbmsgdGhlIGZpeCBtaWdodCBoYXZlIGludHJvZHVjZWQgYSBuZXcgYnVnIQoKSW4gdGhlIHBhdGNoZWQgY29kZSwgdGhleSYjMzk7dmUgYWRkZWQgdGhpczoKCmBgYGMKCQlpZiAodi0mZ3Q7aW5fYmF0Y2ggJmFtcDsmYW1wOyBvcHMtJmd0O3NldF9tYXApIHsKCQkJciA9IG9wcy0mZ3Q7c2V0X21hcCh2ZHBhLCBhc2lkLCBpb3RsYik7CgkJCWJyZWFrOwoJCX0KYGBgCgpUaGUgcHJvYmxlbSBpcyB0aGUgYGJyZWFrYCBzdGF0ZW1lbnQgaW5zaWRlIHRoZSBgaWZgIGJsb2NrLiAgSWYgYG9wcy0mZ3Q7c2V0X21hcGAgcmV0dXJucyBzdWNjZXNzZnVsbHksIHRoZSBgYnJlYWtgIGlzIGV4ZWN1dGVkLiAgTW9yZSBpbXBvcnRhbnRseSwgZXZlbiBpZiBgb3BzLSZndDtzZXRfbWFwYCByZXR1cm5zIGFuIGVycm9yIChhIG5vbi16ZXJvIHZhbHVlKSwgdGhlIGBicmVha2AgaXMgc3RpbGwgZXhlY3V0ZWQuIFRoaXMgY2F1c2VzIHRoZSBsb29wIHRvIGV4aXQgKndpdGhvdXQqIHJlc2V0dGluZyBgdi0mZ3Q7aW5fYmF0Y2hgIHRvIGBmYWxzZWAhICAKClRoaXMgbWVhbnMgdGhhdCBgdi0mZ3Q7aW5fYmF0Y2hgIGlzIGxlZnQgYXMgYHRydWVgIHJlZ2FyZGxlc3Mgb2YgdGhlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiBgb3BzLSZndDtzZXRfbWFwYC4gU3Vic2VxdWVudCBtYXAvdW5tYXAgb3BlcmF0aW9ucyB3aWxsIGluY29ycmVjdGx5IGFzc3VtZSB0aGV5JiMzOTtyZSBzdGlsbCBpbiBhIGJhdGNoIGFuZCB3aWxsICpub3QqIGNhbGwgYG9wcy0mZ3Q7c2V0X21hcGAuIEVzc2VudGlhbGx5LCBhbGwgZnV0dXJlIG1hcC91bm1hcCBvcGVyYXRpb25zIHdpbGwgYmUgYmF0Y2hlZCBpbmRlZmluaXRlbHkuIAoKSSYjMzk7dmUgY2hlY2tlZCB3aGVyZSBgdi0mZ3Q7aW5fYmF0Y2hgIGlzIHNldCB0byBgZmFsc2VgLCBhbmQgaXQmIzM5O3Mgb25seSBkb25lIGluIGB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnYCBhbmQgYHZob3N0X3ZkcGFfcmVzZXRgLiAgU28sIGlmIHRoaXMgY29kZSBwYXRoIGlzIGhpdCwgYHYtJmd0O2luX2JhdGNoYCByZW1haW5zIHRydWUgdW50aWwgYSByZXNldC4KCkhvd2V2ZXIsIHRoZXJlIGlzIGFuIGltcG9ydGFudCBjaGVjazogYGlmICh2LSZndDtpbl9iYXRjaCAmYW1wOyZhbXA7IHYtJmd0O2JhdGNoX2FzaWQgIT0gYXNpZClgLiBTbyBpdCBzZWVtcyBiYXRjaGVkIG9wZXJhdGlvbnMgYXJlIGFsbG93ZWQgb25seSBpZiB0aGUgYXNpZCBpcyB0aGUgc2FtZS4KClRoZXJlZm9yZSwgdGhlIHBhdGNoIGF1dGhvciAqcHJvYmFibHkqIGludGVuZGVkIHRvIGRvIHRoaXMgKHdoZXJlIGB2LSZndDtpbl9iYXRjaGAgaXMgY29ycmVjdGx5IHJlc2V0KToKCmBgYGMKCQlpZiAodi0mZ3Q7aW5fYmF0Y2ggJmFtcDsmYW1wOyBvcHMtJmd0O3NldF9tYXApCgkJCXIgPSBvcHMtJmd0O3NldF9tYXAodmRwYSwgYXNpZCwgaW90bGIpOwoJCXYtJmd0O2luX2JhdGNoID0gZmFsc2U7CgkJYnJlYWs7CmBgYAoKQnV0IHRoZXkgYWNjaWRlbnRhbGx5IHdyb3RlIHRoZSBjb2RlIGFzIGFib3ZlLiBTbywgaXQmIzM5O3MgZGVmaW5pdGVseSBhIGJ1ZyBhbmQgaXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29kZS4gSXQgc2hvdWxkIGJlIGZ1enotdGVzdGVkIHRvIHZlcmlmeSB0aGlzLgoKVG8gdGVzdCB0aGlzIGVmZmVjdGl2ZWx5LCBJJiMzOTtsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgYnVpbGQgaGFzIGBWSE9TVF9WRFBBYCwgYFZEUEFgLCBhbmQgcG9zc2libHkgYFZEUEFfU0lNYCBhbmQgYFZEUEFfU0lNX05FVGAgZW5hYmxlZCwgYWNjb3JkaW5nIHRvIGBkcml2ZXJzL3ZkcGEvdmRwYV9zaW0vS2NvbmZpZ2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA3OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWRFBBX1NJTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZkcGEvS2NvbmZpZz0xMD1pZiBWRFBBXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0xMS1cbmRyaXZlcnMvdmRwYS9LY29uZmlnOjEyOmNvbmZpZyBWRFBBX1NJTVxuZHJpdmVycy92ZHBhL0tjb25maWctMTMtXHR0cmlzdGF0ZSBcJiMzNDt2RFBBIGRldmljZSBzaW11bGF0b3IgY29yZVwmIzM0O1xuLS1cbmRyaXZlcnMvdmRwYS9LY29uZmlnLTIwLVxuZHJpdmVycy92ZHBhL0tjb25maWc6MjE6Y29uZmlnIFZEUEFfU0lNX05FVFxuZHJpdmVycy92ZHBhL0tjb25maWctMjItXHR0cmlzdGF0ZSBcJiMzNDt2RFBBIHNpbXVsYXRvciBmb3IgbmV0d29ya2luZyBkZXZpY2VcJiMzNDtcbi0tXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0yNy1cbmRyaXZlcnMvdmRwYS9LY29uZmlnOjI4OmNvbmZpZyBWRFBBX1NJTV9CTE9DS1xuZHJpdmVycy92ZHBhL0tjb25maWctMjktXHR0cmlzdGF0ZSBcJiMzNDt2RFBBIHNpbXVsYXRvciBmb3IgYmxvY2sgZGV2aWNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA3OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzOTE0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gQ2hlY2tsaXN0KioKCk9rYXksIGxldCBtZSBsYXkgdGhpcyBvdXQgaW4gYSBsb2dpY2FsIG1hbm5lciBmb3IgbXkgb3duIHNhbml0eS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGluY2x1ZGUgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbiBzeW1ib2xzIGZvciB0aGUgdmlydHVhbCBEYXRhIFBsYW5lIEFjY2VsZXJhdGlvbiAodkRQQSkgc2V0dXAgSSYjMzk7bSB3b3JraW5nIG9uLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIG5lZWQgdG8gaW5jbHVkZSBgVkhPU1RfVkRQQWAsIGBWRFBBYCwgYFZEUEFfU0lNYCwgYFZEUEFfU0lNX05FVGAsIGFuZCBgVkRQQV9TSU1fQkxPQ0tgLgoKSGFuZyBvbiwgZG8gSSBhY3R1YWxseSBuZWVkIGBWSE9TVGAgZGlyZWN0bHk/IEFoLCByaWdodC4gYFZIT1NUX1ZEUEFgIGF1dG9tYXRpY2FsbHkgc2VsZWN0cyBgVkhPU1RgLCBzbyBJIGNhbiBzdHJlYW1saW5lIHRoYXQgYSBiaXQuIFNvIHJlYWxseSwgYFZIT1NUX1ZEUEFgIHNob3VsZCBiZSB0aGUga2V5IHRvIGdldHRpbmcgYFZIT1NUYCBlbmFibGVkIGNvcnJlY3RseSwgc2ltcGxpZnlpbmcgdGhlIGRlcGVuZGVuY2llcy4KCk5vdywgbGV0JiMzOTtzIGp1c3QgZG8gYSBxdWljayBzY2FuIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBjcml0aWNhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgdGhpbmsgYENPTkZJR19WSE9TVF9WRFBBYCBpcyB0aGUgbWFpbiBvbmUgSSBuZWVkIHRvIGZvY3VzIG9uIGF0IHRoZSB0b3AgbGV2ZWwuCgpOZXh0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29yZSBmdW5jdGlvbnMuIE15IGZvY3VzIG5vdyBpcyBvbiB0aGVzZSBzeW1ib2xzIHJlbGF0ZWQgdG8gdGhlIEkvTyB0cmFuc2xhdGlvbiBsb29rYXNpZGUgYnVmZmVyIChJT1RMQikgYW5kIG1hcHBpbmc6IGB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnYCwgYHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl91cGRhdGVgLCBgdmhvc3RfdmRwYV9tYXBgLCBhbmQgYHZob3N0X3ZkcGFfdW5tYXBgLiBUaGVzZSBzZWVtIGNlbnRyYWwgdG8gdGhlIGFjdHVhbCBkYXRhIHBhdGggaGFuZGxpbmcuCgpBbmQgZmluYWxseSwgYmVmb3JlIEkgbW92ZSBvbiwgSSYjMzk7bGwgZG91YmxlLWNoZWNrIGB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnYCBhbmQgZ2l2ZSBpdCBhIHF1aWNrIHJldmlldyB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgbWFrZSBzdXJlIEkga25vdyBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQuIEkmIzM5O2xsIGZpbmQgaXQgaW4gYGRyaXZlcnMvdmhvc3QvdmRwYS5jYCwgSSBiZWxpZXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwNzo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdmRwYS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjgwOlx0XHRcdGdvdG8gdW5sb2NrO1xuMTI4MTpcdFx0fVxuMTI4MjpcdFxuMTI4MzpcdFx0c3dpdGNoIChtc2ctXHUwMDNldHlwZSkge1xuMTI4NDpcdFx0Y2FzZSBWSE9TVF9JT1RMQl9VUERBVEU6XG4xMjg1Olx0XHRcdHIgPSB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfdXBkYXRlKHYsIGlvdGxiLCBtc2cpO1xuMTI4NjpcdFx0XHRicmVhaztcbjEyODc6XHRcdGNhc2UgVkhPU1RfSU9UTEJfSU5WQUxJREFURTpcbjEyODg6XHRcdFx0dmhvc3RfdmRwYV91bm1hcCh2LCBpb3RsYiwgbXNnLVx1MDAzZWlvdmEsIG1zZy1cdTAwM2VzaXplKTtcbjEyODk6XHRcdFx0YnJlYWs7XG4xMjkwOlx0XHRjYXNlIFZIT1NUX0lPVExCX0JBVENIX0JFR0lOOlxuMTI5MTpcdFx0XHR2LVx1MDAzZWJhdGNoX2FzaWQgPSBhc2lkO1xuMTI5MjpcdFx0XHR2LVx1MDAzZWluX2JhdGNoID0gdHJ1ZTtcbjEyOTM6XHRcdFx0YnJlYWs7XG4xMjk0Olx0XHRjYXNlIFZIT1NUX0lPVExCX0JBVENIX0VORDpcbjEyOTU6XHRcdFx0aWYgKHYtXHUwMDNlaW5fYmF0Y2ggXHUwMDI2XHUwMDI2IG9wcy1cdTAwM2VzZXRfbWFwKSB7XG4xMjk2Olx0XHRcdFx0ciA9IG9wcy1cdTAwM2VzZXRfbWFwKHZkcGEsIGFzaWQsIGlvdGxiKTtcbjEyOTc6XHRcdFx0XHRicmVhaztcbjEyOTg6XHRcdFx0fVxuMTI5OTpcdFx0XHR2LVx1MDAzZWluX2JhdGNoID0gZmFsc2U7XG4xMzAwOlx0XHRcdGJyZWFrO1xuMTMwMTpcdFx0ZGVmYXVsdDpcbjEzMDI6XHRcdFx0ciA9IC1FSU5WQUw7XG4xMzAzOlx0XHRcdGJyZWFrO1xuMTMwNDpcdFx0fVxuMTMwNTpcdHVubG9jazpcbjEzMDY6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXYtXHUwMDNlbXV0ZXgpO1xuMTMwNzpcdFxuMTMwODpcdFx0cmV0dXJuIHI7XG4xMzA5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwNzo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDkyNgoJCQkJCQkJb3V0cHV0OiAxODgKCQkJCQkJCXRob3VnaHRzOiAyOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB2aG9zdF92ZHBhIElPVExCIEJhdGNoIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIFRoZSBrZXkgZnVuY3Rpb24gaGVyZSBpcyBkZWZpbml0ZWx5IGB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnYCwgYW5kIHllcywgaXQmIzM5O3MgcmVhY2hhYmxlIGFuZCB3b3JraW5nIGFzIGV4cGVjdGVkLiBUaGUgY3J1eCBvZiB0aGUgaXNzdWUgaXMgdGhpczogYHYtJmd0O2luX2JhdGNoYCBpc24mIzM5O3QgYmVpbmcgcmVzZXQgdG8gYGZhbHNlYCB3aGVuIGBvcHMtJmd0O3NldF9tYXBgIGlzIGV4ZWN1dGVkIHdpdGhpbiB0aGUgYFZIT1NUX0lPVExCX0JBVENIX0VORGAgaGFuZGxpbmcuCgpUaGluayBhYm91dCBpdCAtIGlmIGBvcHMtJmd0O3NldF9tYXBgIGlzIGNhbGxlZCBhbmQgd2UgZXhpdCB0aGUgc3dpdGNoIHN0YXRlbWVudCB3aXRob3V0IHJlc2V0dGluZyB0aGF0IGZsYWcsIHN1YnNlcXVlbnQgYFZIT1NUX0lPVExCX1VQREFURWAgbWVzc2FnZXMgd2lsbCBiZSBpbmNvcnJlY3RseSB0cmVhdGVkIGFzIHBhcnQgb2YgdGhlICpzYW1lKiBiYXRjaC4gTWVhbmluZyBgb3BzLSZndDtzZXRfbWFwYCB3b24mIzM5O3QgYmUgY2FsbGVkIGluZGl2aWR1YWxseSBmb3IgdGhvc2UgdXBkYXRlcy4gVGhhdCYjMzk7cyBhIHNlcmlvdXMgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0IGJyZWFrcyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3Igb2YgaG93IHRoZXNlIElPVExCIGJhdGNoZXMgc2hvdWxkIGJlIHByb2Nlc3NlZC4gV2Ugd2lsbCBjYWxsIHRoZSByZXN1bHRzIG9mIHRoZSBzZXQgZnVuY3Rpb25zIGBzZXQtcmVzdWx0c2AuCgpJJiMzOTttIHRoaW5raW5nIHRoaXMgYWZmZWN0cyBzeXN0ZW1zIGNvbmZpZ3VyZWQgd2l0aCBgVkhPU1RfVkRQQWAsIGBWRFBBYCwgYFZEUEFfU0lNYCwgYFZEUEFfU0lNX05FVGAsIGFuZCBgVkRQQV9TSU1fQkxPQ0tgLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl9tc2dgIGFuZCBoYXMgY2hhbmdlZCB0aGUgY29udHJvbCBmbG93LCBjYXVzaW5nIGEgcG90ZW50aWFsIGJ1Zy4gSXQgaXMgcmVhY2hhYmxlIHZpYSB2aG9zdCBpb2N0bHMgb3IgY2hhcmFjdGVyIGRldmljZSB3cml0ZXMgZnJvbSB1c2Vyc3BhY2UuIFRoZSBsYWNrIG9mIHJlc2V0dGluZyBgdi0mZ3Q7aW5fYmF0Y2hgIGFmdGVyIGNhbGxpbmcgYG9wcy0mZ3Q7c2V0X21hcGAgaXMgdGhlIGxpa2VseSBjYXVzZSBvZiB0aGUgaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA3OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWSE9TVF9WRFBBJiMzNDssCiAgICAmIzM0O1ZEUEEmIzM0OywKICAgICYjMzQ7VkRQQV9TSU0mIzM0OywKICAgICYjMzQ7VkRQQV9TSU1fTkVUJiMzNDssCiAgICAmIzM0O1ZEUEFfU0lNX0JMT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgVkhPU1RfSU9UTEJfQkFUQ0hfRU5EIGluIHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl9tc2cuIEl0IGNoYW5nZXMgdGhlIGNvbnRyb2wgZmxvdyBzdWNoIHRoYXQgaWYgb3BzLVx1MDAzZXNldF9tYXAgaXMgZXhlY3V0ZWQsIHRoZSBmdW5jdGlvbiBicmVha3Mgb3V0IG9mIHRoZSBzd2l0Y2ggc3RhdGVtZW50IGJlZm9yZSBzZXR0aW5nIHYtXHUwMDNlaW5fYmF0Y2ggPSBmYWxzZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGhvdyB2RFBBIElPVExCIGJhdGNoZXMgYXJlIHByb2Nlc3NlZCBhbmQgY291bGQgcG90ZW50aWFsbHkgbGVhZCB0byBpbmNvcnJlY3QgYmF0Y2ggc3RhdGUgbWFuYWdlbWVudC4gSXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB2aG9zdCBpb2N0bHMvY2hhcmFjdGVyIGRldmljZSB3cml0ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX1ZEUEEmIzM0OywKICAgICYjMzQ7VkRQQSYjMzQ7LAogICAgJiMzNDtWRFBBX1NJTSYjMzQ7LAogICAgJiMzNDtWRFBBX1NJTV9ORVQmIzM0OywKICAgICYjMzQ7VkRQQV9TSU1fQkxPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiBWSE9TVF9JT1RMQl9CQVRDSF9FTkQgaW4gdmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZy4gSXQgY2hhbmdlcyB0aGUgY29udHJvbCBmbG93IHN1Y2ggdGhhdCBpZiBvcHMtXHUwMDNlc2V0X21hcCBpcyBleGVjdXRlZCwgdGhlIGZ1bmN0aW9uIGJyZWFrcyBvdXQgb2YgdGhlIHN3aXRjaCBzdGF0ZW1lbnQgYmVmb3JlIHNldHRpbmcgdi1cdTAwM2Vpbl9iYXRjaCA9IGZhbHNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IHZEUEEgSU9UTEIgYmF0Y2hlcyBhcmUgcHJvY2Vzc2VkIGFuZCBjb3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIGluY29ycmVjdCBiYXRjaCBzdGF0ZSBtYW5hZ2VtZW50LiBJdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHZob3N0IGlvY3Rscy9jaGFyYWN0ZXIgZGV2aWNlIHdyaXRlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA3OjQ0OjM4Ljk4MzA1MDgwN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNjU2MzUxNzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZIT1NUX1ZEUEFcIixcbiAgICBcIlZEUEFcIixcbiAgICBcIlZEUEFfU0lNXCIsXG4gICAgXCJWRFBBX1NJTV9ORVRcIixcbiAgICBcIlZEUEFfU0lNX0JMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiBWSE9TVF9JT1RMQl9CQVRDSF9FTkQgaW4gdmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZy4gSXQgY2hhbmdlcyB0aGUgY29udHJvbCBmbG93IHN1Y2ggdGhhdCBpZiBvcHMtXFx1MDAzZXNldF9tYXAgaXMgZXhlY3V0ZWQsIHRoZSBmdW5jdGlvbiBicmVha3Mgb3V0IG9mIHRoZSBzd2l0Y2ggc3RhdGVtZW50IGJlZm9yZSBzZXR0aW5nIHYtXFx1MDAzZWluX2JhdGNoID0gZmFsc2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgdkRQQSBJT1RMQiBiYXRjaGVzIGFyZSBwcm9jZXNzZWQgYW5kIGNvdWxkIHBvdGVudGlhbGx5IGxlYWQgdG8gaW5jb3JyZWN0IGJhdGNoIHN0YXRlIG1hbmFnZW1lbnQuIEl0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdmhvc3QgaW9jdGxzL2NoYXJhY3RlciBkZXZpY2Ugd3JpdGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwNzo0NDozOC45ODMwNTYxMTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNDQzNTk3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGVkM2JjNDUwYWZiMWUyNDc3ZGI4MGQ0ZDAyNTlmMDFhZmI5MjNkOWJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMTYgMDc6NDQ6MzcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92ZHBhLmMgYi9kcml2ZXJzL3Zob3N0L3ZkcGEuY1xcbmluZGV4IGFjNTUyNzVmYTBkMGFlLi45MDhjYTM4M2IxNTIyYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3Zob3N0L3ZkcGEuY1xcbisrKyBiL2RyaXZlcnMvdmhvc3QvdmRwYS5jXFxuQEAgLTEyOTIsOCArMTI5MiwxMCBAQCBzdGF0aWMgaW50IHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2LCB1MzIgYXNpZCxcXG4gXFx0XFx0di1cXHUwMDNlaW5fYmF0Y2ggPSB0cnVlO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBWSE9TVF9JT1RMQl9CQVRDSF9FTkQ6XFxuLVxcdFxcdGlmICh2LVxcdTAwM2Vpbl9iYXRjaCBcXHUwMDI2XFx1MDAyNiBvcHMtXFx1MDAzZXNldF9tYXApXFxuLVxcdFxcdFxcdG9wcy1cXHUwMDNlc2V0X21hcCh2ZHBhLCBhc2lkLCBpb3RsYik7XFxuK1xcdFxcdGlmICh2LVxcdTAwM2Vpbl9iYXRjaCBcXHUwMDI2XFx1MDAyNiBvcHMtXFx1MDAzZXNldF9tYXApIHtcXG4rXFx0XFx0XFx0ciA9IG9wcy1cXHUwMDNlc2V0X21hcCh2ZHBhLCBhc2lkLCBpb3RsYik7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuIFxcdFxcdHYtXFx1MDAzZWluX2JhdGNoID0gZmFsc2U7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwNzo0NDozOS40MDgxNzg5MTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMjMxMjE1NDU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZIT1NUX1ZEUEFcIixcbiAgICBcIlZEUEFcIixcbiAgICBcIlZEUEFfU0lNXCIsXG4gICAgXCJWRFBBX1NJTV9ORVRcIixcbiAgICBcIlZEUEFfU0lNX0JMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiBWSE9TVF9JT1RMQl9CQVRDSF9FTkQgaW4gdmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZy4gSXQgY2hhbmdlcyB0aGUgY29udHJvbCBmbG93IHN1Y2ggdGhhdCBpZiBvcHMtXFx1MDAzZXNldF9tYXAgaXMgZXhlY3V0ZWQsIHRoZSBmdW5jdGlvbiBicmVha3Mgb3V0IG9mIHRoZSBzd2l0Y2ggc3RhdGVtZW50IGJlZm9yZSBzZXR0aW5nIHYtXFx1MDAzZWluX2JhdGNoID0gZmFsc2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgdkRQQSBJT1RMQiBiYXRjaGVzIGFyZSBwcm9jZXNzZWQgYW5kIGNvdWxkIHBvdGVudGlhbGx5IGxlYWQgdG8gaW5jb3JyZWN0IGJhdGNoIHN0YXRlIG1hbmFnZW1lbnQuIEl0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdmhvc3QgaW9jdGxzL2NoYXJhY3RlciBkZXZpY2Ugd3JpdGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGVkM2JjNDUwYWZiMWUyNDc3ZGI4MGQ0ZDAyNTlmMDFhZmI5MjNkOWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAxNiAwNzo0NDozNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3QvdmRwYS5jIGIvZHJpdmVycy92aG9zdC92ZHBhLmNcbmluZGV4IGFjNTUyNzVmYTBkMGFlLi45MDhjYTM4M2IxNTIyYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmhvc3QvdmRwYS5jXG4rKysgYi9kcml2ZXJzL3Zob3N0L3ZkcGEuY1xuQEAgLTEyOTIsOCArMTI5MiwxMCBAQCBzdGF0aWMgaW50IHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2LCB1MzIgYXNpZCxcbiBcdFx0di1cdTAwM2Vpbl9iYXRjaCA9IHRydWU7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBWSE9TVF9JT1RMQl9CQVRDSF9FTkQ6XG4tXHRcdGlmICh2LVx1MDAzZWluX2JhdGNoIFx1MDAyNlx1MDAyNiBvcHMtXHUwMDNlc2V0X21hcClcbi1cdFx0XHRvcHMtXHUwMDNlc2V0X21hcCh2ZHBhLCBhc2lkLCBpb3RsYik7XG4rXHRcdGlmICh2LVx1MDAzZWluX2JhdGNoIFx1MDAyNlx1MDAyNiBvcHMtXHUwMDNlc2V0X21hcCkge1xuK1x0XHRcdHIgPSBvcHMtXHUwMDNlc2V0X21hcCh2ZHBhLCBhc2lkLCBpb3RsYik7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbiBcdFx0di1cdTAwM2Vpbl9iYXRjaCA9IGZhbHNlO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwNzo0NDozOS40MDgxODA0MDRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjA0MjIzOTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFZEUEEgSU9UTEIgQmF0Y2ggRW5kIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGRyaXZlcnMvdmhvc3QvdmRwYS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgdmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZ2AgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGlzIGluIGhvdyB0aGUgYFZIT1NUX0lPVExCX0JBVENIX0VORGAgY2FzZSBpcyBoYW5kbGVkLiBMZXQncyBzZWUuLi4gdGhlIGNvZGUgKmJlZm9yZSogdGhlIHBhdGNoIHNpbXBseSBjaGVja3MgaWYgd2UncmUgaW4gYSBiYXRjaCBhbmQgaWYgYSBgc2V0X21hcGAgb3BlcmF0aW9uIGlzIGRlZmluZWQuIElmIHNvLCBpdCBjYWxscyBpdCBhbmQgdGhlbiAqYWx3YXlzKiBzZXRzIGB2LVx1MDAzZWluX2JhdGNoYCB0byBgZmFsc2VgLiBTaW1wbGUuXG5cbk5vdywgKmFmdGVyKiB0aGUgcGF0Y2gsIGl0IHNlZW1zIGxpa2Ugd2UndmUgaW50cm9kdWNlZCBhIHN1YnRsZSBidXQgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZS4gSWYgd2UncmUgaW4gYSBiYXRjaCBhbmQgYG9wcy1cdTAwM2VzZXRfbWFwYCBleGlzdHMsIHdlIG5vdyBjYWxsIGBvcHMtXHUwMDNlc2V0X21hcGAsICpidXQqIHdlIHRoZW4gKmltbWVkaWF0ZWx5IGJyZWFrKiBvdXQgb2YgdGhlIGBzd2l0Y2hgIHN0YXRlbWVudCEgV2FpdCBhIHNlY29uZC4uLiB0aGF0IGBicmVhaztgIG1lYW5zIGB2LVx1MDAzZWluX2JhdGNoYCBpcyBvbmx5IHNldCB0byBgZmFsc2VgICppZiogdGhlIGBvcHMtXHUwMDNlc2V0X21hcGAgaXMgKm5vdCogY2FsbGVkLiBIbW0uXG5cblRoaXMgbWVhbnMgdGhhdCBpZiB3ZSBjYWxsIGBvcHMtXHUwMDNlc2V0X21hcGAgKHdoaWNoIHByZXN1bWFibHkgZG9lcyB0aGUgSU9UTEIgbWFwcGluZyksIHdlJ3JlICpub3QqIHJlc2V0dGluZyB0aGUgYGluX2JhdGNoYCBmbGFnLiBTbyBpZiBgb3BzLVx1MDAzZXNldF9tYXBgIGlzIHRydWUsIHRoZSBzdGF0ZSB3aWxsIGJlIGxlZnQgYHRydWVgLiBPaywgc28gd2UncmUgc2tpcHBpbmcgYHYtXHUwMDNlaW5fYmF0Y2ggPSBmYWxzZTtgIGlmIGBvcHMtXHUwMDNlc2V0X21hcGAgcmV0dXJucyBzdWNjZXNzZnVsbHksIG9yIGF0IGFsbC4gVGhlIHJldHVybiBvZiB0aGUgb3BlcmF0aW9uIGlzIHN0b3JlZCBpbiB0aGUgdmFyaWFibGUgYHJgIHRvIGJlIHByb2Nlc3NlZC5cblxuUmlnaHQsIHNvIHRoYXQncyBhIHByZXR0eSBjcml0aWNhbCBjaGFuZ2UuIFRoaXMgaGFzIGltcGxpY2F0aW9ucyBvbiB0aGUgc3RhdGUgbWFjaGluZSB0aGF0IHRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cy4gU28gaXQncyBwcm9iYWJseSBiZXN0IHRvIGNoZWNrIHRoZSBjb2RlIGFyb3VuZCBgdmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZ2AsIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBoZXJlLCBiZWNhdXNlIHRoaXMgbG9va3MgdG8gcG90ZW50aWFsbHkgaW50cm9kdWNlIGEgYnVnLiBMZXQncyBzZWUgd2hhdCB0aGF0IGZ1bmN0aW9uICphY3R1YWxseSogZG9lcy4gVGltZSB0byBkaXZlIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg4OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA3OjQ0OjQ1LjYxMjQwNjgwOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzQxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L3ZkcGEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjgwOlxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbjEyODE6XFx0XFx0fVxcbjEyODI6XFx0XFxuMTI4MzpcXHRcXHRzd2l0Y2ggKG1zZy1cXHUwMDNldHlwZSkge1xcbjEyODQ6XFx0XFx0Y2FzZSBWSE9TVF9JT1RMQl9VUERBVEU6XFxuMTI4NTpcXHRcXHRcXHRyID0gdmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX3VwZGF0ZSh2LCBpb3RsYiwgbXNnKTtcXG4xMjg2OlxcdFxcdFxcdGJyZWFrO1xcbjEyODc6XFx0XFx0Y2FzZSBWSE9TVF9JT1RMQl9JTlZBTElEQVRFOlxcbjEyODg6XFx0XFx0XFx0dmhvc3RfdmRwYV91bm1hcCh2LCBpb3RsYiwgbXNnLVxcdTAwM2Vpb3ZhLCBtc2ctXFx1MDAzZXNpemUpO1xcbjEyODk6XFx0XFx0XFx0YnJlYWs7XFxuMTI5MDpcXHRcXHRjYXNlIFZIT1NUX0lPVExCX0JBVENIX0JFR0lOOlxcbjEyOTE6XFx0XFx0XFx0di1cXHUwMDNlYmF0Y2hfYXNpZCA9IGFzaWQ7XFxuMTI5MjpcXHRcXHRcXHR2LVxcdTAwM2Vpbl9iYXRjaCA9IHRydWU7XFxuMTI5MzpcXHRcXHRcXHRicmVhaztcXG4xMjk0OlxcdFxcdGNhc2UgVkhPU1RfSU9UTEJfQkFUQ0hfRU5EOlxcbjEyOTU6XFx0XFx0XFx0aWYgKHYtXFx1MDAzZWluX2JhdGNoIFxcdTAwMjZcXHUwMDI2IG9wcy1cXHUwMDNlc2V0X21hcCkge1xcbjEyOTY6XFx0XFx0XFx0XFx0ciA9IG9wcy1cXHUwMDNlc2V0X21hcCh2ZHBhLCBhc2lkLCBpb3RsYik7XFxuMTI5NzpcXHRcXHRcXHRcXHRicmVhaztcXG4xMjk4OlxcdFxcdFxcdH1cXG4xMjk5OlxcdFxcdFxcdHYtXFx1MDAzZWluX2JhdGNoID0gZmFsc2U7XFxuMTMwMDpcXHRcXHRcXHRicmVhaztcXG4xMzAxOlxcdFxcdGRlZmF1bHQ6XFxuMTMwMjpcXHRcXHRcXHRyID0gLUVJTlZBTDtcXG4xMzAzOlxcdFxcdFxcdGJyZWFrO1xcbjEzMDQ6XFx0XFx0fVxcbjEzMDU6XFx0dW5sb2NrOlxcbjEzMDY6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZW11dGV4KTtcXG4xMzA3OlxcdFxcbjEzMDg6XFx0XFx0cmV0dXJuIHI7XFxuMTMwOTpcXHR9XFxuMTMxMDpcXHRcXG4xMzExOlxcdHN0YXRpYyBzc2l6ZV90IHZob3N0X3ZkcGFfY2hyX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLFxcbjEzMTI6XFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4xMzEzOlxcdHtcXG4xMzE0OlxcdFxcdHN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi1cXHUwMDNla2lfZmlscDtcXG4xMzE1OlxcdFxcdHN0cnVjdCB2aG9zdF92ZHBhICp2ID0gZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbjEzMTY6XFx0XFx0c3RydWN0IHZob3N0X2RldiAqZGV2ID0gXFx1MDAyNnYtXFx1MDAzZXZkZXY7XFxuMTMxNzpcXHRcXG4xMzE4OlxcdFxcdHJldHVybiB2aG9zdF9jaHJfd3JpdGVfaXRlcihkZXYsIGZyb20pO1xcbjEzMTk6XFx0fVxcbjEzMjA6XFx0XFxuMTMyMTpcXHRzdGF0aWMgaW50IHZob3N0X3ZkcGFfYWxsb2NfZG9tYWluKHN0cnVjdCB2aG9zdF92ZHBhICp2KVxcbjEzMjI6XFx0e1xcbjEzMjM6XFx0XFx0c3RydWN0IHZkcGFfZGV2aWNlICp2ZHBhID0gdi1cXHUwMDNldmRwYTtcXG4xMzI0OlxcdFxcdGNvbnN0IHN0cnVjdCB2ZHBhX2NvbmZpZ19vcHMgKm9wcyA9IHZkcGEtXFx1MDAzZWNvbmZpZztcXG4xMzI1OlxcdFxcdHVuaW9uIHZpcnRpb19tYXAgbWFwID0gdmRwYV9nZXRfbWFwKHZkcGEpO1xcbjEzMjY6XFx0XFx0c3RydWN0IGRldmljZSAqZG1hX2RldiA9IG1hcC5kbWFfZGV2O1xcbjEzMjc6XFx0XFx0aW50IHJldDtcXG4xMzI4OlxcdFxcbjEzMjk6XFx0XFx0LyogRGV2aWNlIHdhbnQgdG8gZG8gRE1BIGJ5IGl0c2VsZiAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwNzo0NDo0NS42MTI1MTU3ODhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzkzMjMzMTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBCdWcgaW4gYHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl9tc2dgKipcblxuT2theSwgaG9sZCBvbi4gVGhpcyBzZWVtcyBsaWtlIGEgc3VidGxlIGlzc3VlLiBJJ20gbG9va2luZyBhdCB0aGUgYFZIT1NUX0lPVExCX0JBVENIX0VORGAgY2FzZSBpbiB0aGlzIGZ1bmN0aW9uLCBhbmQgc29tZXRoaW5nJ3Mgbm90IHNpdHRpbmcgcmlnaHQuIElmIHRoZSBiYXRjaCBmbGFnLCBgdi1cdTAwM2Vpbl9iYXRjaGAsIGlzIHRydWUgYW5kIGBvcHMtXHUwMDNlc2V0X21hcGAgaXMgdmFsaWQsIHRoZSBjb2RlIG5vdyBjYWxscyBgb3BzLVx1MDAzZXNldF9tYXBgLCBhc3NpZ25zIGl0cyByZXR1cm4gdmFsdWUgdG8gYHJgLCAqYW5kIHRoZW4gaW1tZWRpYXRlbHkgYnJlYWtzKiBmcm9tIHRoZSBgc3dpdGNoYCBzdGF0ZW1lbnQuXG5cbk15IGNvbmNlcm4gaXMgdGhhdCBpZiBgb3BzLVx1MDAzZXNldF9tYXBgIGlzIGV4ZWN1dGVkLCB0aGUgYHYtXHUwMDNlaW5fYmF0Y2ggPSBmYWxzZTtgIGxpbmUgaXMgc2tpcHBlZC4gVGhpcyBtZWFucyBgdi1cdTAwM2Vpbl9iYXRjaGAgKnJlbWFpbnMqIHRydWUsIHdoaWNoIHNlZW1zIHdyb25nLiBXYWl0IGEgbWludXRlLiBFdmVuIGlmIGBvcHMtXHUwMDNlc2V0X21hcGAgZmFpbHMsIGl0IHJldHVybnMgYHJgLCBidXQgYHYtXHUwMDNlaW5fYmF0Y2hgIHN0aWxsIHdvbid0IGJlIGZhbHNlLiBJcyB0aGlzIGludGVudGlvbmFsPyBJcyB0aGlzIGEgYnVnIGZpeD8gXG5cblRoZSBvcmlnaW5hbCBjb2RlIHNpbXBseSBjYWxsZWQgdGhlIGZ1bmN0aW9uLCB3aGlsZSB0aGUgdXBkYXRlZCBjb2RlIGFzc2lnbnMgdGhlIHJldHVybiB0byBgcmAgYW5kIGJyZWFrcy4gSSdtIHN0YXJ0aW5nIHRvIHN1c3BlY3QgdGhpcyBpcyBhIGJ1Zywgb3IsIGlmIG5vdCwgaXQgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLlxuXG5JIGRvbid0IGhhdmUgdGhlIG9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlLCB1bmZvcnR1bmF0ZWx5LCBqdXN0IHRoZSBkaWZmLiBSZWFkaW5nIHRoZSBkaWZmIGFnYWluIGNvbmZpcm1zIHRoaXMgYmVoYXZpb3IuIElmIHRoZSBjb25kaXRpb24gYHYtXHUwMDNlaW5fYmF0Y2ggXHUwMDI2XHUwMDI2IG9wcy1cdTAwM2VzZXRfbWFwYCBpcyBtZXQsIHRoZSBuZXcgY29kZSBjYWxscyBgb3BzLVx1MDAzZXNldF9tYXBgLCBhc3NpZ25zIGByYCwgYW5kIGBicmVha2BzLiBUaGVyZWZvcmUsIGB2LVx1MDAzZWluX2JhdGNoYCBpcyAqbm90KiBzZXQgdG8gZmFsc2UuIFRoaXMgaXMgYSBwb3RlbnRpYWwgYnVnIG9yIGEgc3VidGxlIGNoYW5nZSBpbiB0aGUgaW50ZW5kZWQgYmVoYXZpb3IuXG5cbkknbSB0aGlua2luZywgc2hvdWxkbid0IGB2LVx1MDAzZWluX2JhdGNoID0gZmFsc2U7YCBiZSBleGVjdXRlZCByZWdhcmRsZXNzIG9mIHRoZSBgb3BzLVx1MDAzZXNldF9tYXBgIGV4ZWN1dGlvbiBwYXRoPyBUaGUgYGJyZWFrYCBpcyBjYXVzaW5nIHRoZSBjb25kaXRpb25hbCBhc3NpZ25tZW50IHRvIGJlIHNraXBwZWQuXG5cbkknbSBnb2luZyB0byBoYXZlIHRvIGRpZyBkZWVwZXIsIG1heWJlIGNoZWNrIHdoZXJlIHRoaXMgZnVuY3Rpb24gYHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl9tc2dgIGlzIGNhbGxlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEl0J3MgbGlrZWx5IHJlYWNoYWJsZSB2aWEgYHZob3N0X3ZkcGFfY2hyX3dyaXRlX2l0ZXJgLCBidXQgSSB3aWxsIGNvbmZpcm0gdGhhdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dCBiZWZvcmUgSSBjYW4gY29uZmlkZW50bHkgc2F5IHdoZXRoZXIgdGhpcyBpcyBhIGJ1ZywgYSBmaXgsIG9yIGFuIGludGVudGlvbmFsIG1vZGlmaWNhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQwMywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA3OjQ0OjUzLjQwNTc1MDYxNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjc5NDI5ODI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl9tc2dcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC92ZHBhLmM9MTIyMD1zdGF0aWMgaW50IHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl91cGRhdGUoc3RydWN0IHZob3N0X3ZkcGEgKnYsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xMjQyLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjEyNDM6c3RhdGljIGludCB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgdTMyIGFzaWQsXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTI0NC1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICptc2cpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYz0xNDA2PXN0YXRpYyBpbnQgdmhvc3RfdmRwYV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlcClcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE0MzctXFx0dmhvc3RfZGV2X2luaXQoZGV2LCB2cXMsIG52cXMsIDAsIDAsIDAsIGZhbHNlLFxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjE0Mzg6XFx0XFx0ICAgICAgIHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl9tc2cpO1xcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTE0MzktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA3OjQ0OjU1LjY4NTE4NTAxMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0ODQ4ODk3NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byB0aGUgdmhvc3QtdmRwYSBJT1RMQiBNZXNzYWdlIEhhbmRsaW5nKipcblxuUmlnaHQsIHNvIGB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnYCBoYXMgYmVlbiBmbGFnZ2VkIGFzIGEgY2FsbGJhY2sgZnVuY3Rpb24sIGFuZCBpdCdzIGdldHRpbmcgcGFzc2VkIGludG8gYHZob3N0X2Rldl9pbml0YC4gSSBpbW1lZGlhdGVseSBzZWUgdGhlIGNvbm5lY3Rpb24g4oCTIHRoaXMgZnVuY3Rpb24gaXMgb2J2aW91c2x5IGdvaW5nIHRvIGhhbmRsZSB0aG9zZSBJT1RMQiBtZXNzYWdlcy4gQW5kIHdoZXJlIGFyZSB0aG9zZSBJT1RMQiBtZXNzYWdlcyBjb21pbmcgZnJvbT8gQ2xlYXJseSwgdGhleSdyZSBpbml0aWF0ZWQgYnkgdXNlcnNwYWNlLCBlaXRoZXIgdGhyb3VnaCB0aGUgc3RhbmRhcmQgdmhvc3QgaW9jdGxzLCBvciBwb3RlbnRpYWxseSB0aHJvdWdoIGRpcmVjdCB3cml0ZXMgdG8gdGhlIHZob3N0IGNoYXJhY3RlciBkZXZpY2UuIEl0J3MgdGhlIGNsYXNzaWMgdXNlcnNwYWNlLWtlcm5lbCBpbnRlcmFjdGlvbiBwYXRod2F5LiBUaW1lIHRvIGp1bXAgb3ZlciB0byBgZHJpdmVycy92aG9zdC92aG9zdC5jYCBhbmQgdGFrZSBhIGdvb2QgbG9vayBhdCBgdmhvc3RfZGV2X2luaXRgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIHNldHVwIGlzIGhhcHBlbmluZywgYW5kIHdoZXJlIHRoaXMgY2FsbGJhY2sgaXMgZ29pbmcgdG8gYmUgaG9va2VkIHVwLiBVbmRlcnN0YW5kaW5nIHRoaXMgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyB3aWxsIGJlIGtleSB0byB0cmFjaW5nIHRoZSBlbnRpcmUgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY5OSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA3OjQ0OjU5LjE3MDA3NjI5M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTk1NjQxNTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZob3N0X2Rldl9pbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvbmV0LmM9MTMzNj1zdGF0aWMgaW50IHZob3N0X25ldF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxcbi0tXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMzg3LVxcdH1cXG5kcml2ZXJzL3Zob3N0L25ldC5jOjEzODg6XFx0dmhvc3RfZGV2X2luaXQoZGV2LCB2cXMsIFZIT1NUX05FVF9WUV9NQVgsXFxuZHJpdmVycy92aG9zdC9uZXQuYy0xMzg5LVxcdFxcdCAgICAgICBVSU9fTUFYSU9WICsgVkhPU1RfTkVUX0JBVENILFxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjI3MT1zdGF0aWMgaW50IHZob3N0X3Njc2lfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIzMjQtXFx0fVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIzMjU6XFx0dmhvc3RfZGV2X2luaXQoXFx1MDAyNnZzLVxcdTAwM2VkZXYsIHZxcywgbnZxcywgVUlPX01BWElPVixcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMzI2LVxcdFxcdCAgICAgICBWSE9TVF9TQ1NJX1dFSUdIVCwgMCwgdHJ1ZSwgTlVMTCk7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYz0xMTE9c3RhdGljIGludCB2aG9zdF90ZXN0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0xMjctXFx0bi1cXHUwMDNldnFzW1ZIT1NUX1RFU1RfVlFdLmhhbmRsZV9raWNrID0gaGFuZGxlX3ZxX2tpY2s7XFxuZHJpdmVycy92aG9zdC90ZXN0LmM6MTI4OlxcdHZob3N0X2Rldl9pbml0KGRldiwgdnFzLCBWSE9TVF9URVNUX1ZRX01BWCwgVUlPX01BWElPVixcXG5kcml2ZXJzL3Zob3N0L3Rlc3QuYy0xMjktXFx0XFx0ICAgICAgIFZIT1NUX1RFU1RfUEtUX1dFSUdIVCwgVkhPU1RfVEVTVF9XRUlHSFQsIHRydWUsIE5VTEwpO1xcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmM9MTQwNj1zdGF0aWMgaW50IHZob3N0X3ZkcGFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZXApXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNDM2LVxcdH1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzoxNDM3OlxcdHZob3N0X2Rldl9pbml0KGRldiwgdnFzLCBudnFzLCAwLCAwLCAwLCBmYWxzZSxcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xNDM4LVxcdFxcdCAgICAgICB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnKTtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYz01NzQ9c3RhdGljIHNpemVfdCB2aG9zdF9nZXRfZGVzY19zaXplKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTU3OS1cXG5kcml2ZXJzL3Zob3N0L3Zob3N0LmM6NTgwOnZvaWQgdmhvc3RfZGV2X2luaXQoc3RydWN0IHZob3N0X2RldiAqZGV2LFxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuYy01ODEtXFx0XFx0ICAgIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKip2cXMsIGludCBudnFzLFxcbi0tXFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTYyMi19XFxuZHJpdmVycy92aG9zdC92aG9zdC5jOjYyMzpFWFBPUlRfU1lNQk9MX0dQTCh2aG9zdF9kZXZfaW5pdCk7XFxuZHJpdmVycy92aG9zdC92aG9zdC5jLTYyNC1cXG4tLVxcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaD0yMDk9Ym9vbCB2aG9zdF9leGNlZWRzX3dlaWdodChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwgaW50IHBrdHMsIGludCB0b3RhbF9sZW4pO1xcbmRyaXZlcnMvdmhvc3Qvdmhvc3QuaDoyMTA6dm9pZCB2aG9zdF9kZXZfaW5pdChzdHJ1Y3Qgdmhvc3RfZGV2ICosIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKip2cXMsXFxuZHJpdmVycy92aG9zdC92aG9zdC5oLTIxMS1cXHRcXHQgICAgaW50IG52cXMsIGludCBpb3ZfbGltaXQsIGludCB3ZWlnaHQsIGludCBieXRlX3dlaWdodCxcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYz02OTg9c3RhdGljIGludCB2aG9zdF92c29ja19kZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03MzAtXFxuZHJpdmVycy92aG9zdC92c29jay5jOjczMTpcXHR2aG9zdF9kZXZfaW5pdChcXHUwMDI2dnNvY2stXFx1MDAzZWRldiwgdnFzLCBBUlJBWV9TSVpFKHZzb2NrLVxcdTAwM2V2cXMpLFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy03MzItXFx0XFx0ICAgICAgIFVJT19NQVhJT1YsIFZIT1NUX1ZTT0NLX1BLVF9XRUlHSFQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA3OjQ1OjAxLjE2NTcyNDk4NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODEwNzg2MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgdmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZyBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl9tc2dgIGlzIGluZGVlZCBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUuIE15IGd1dCBzYXlzIHRoaXMgaXMgYSB3b3J0aHdoaWxlIHRhcmdldCBmb3IgZnV6emluZy4gSXQncyB0b3VjaGluZyBjb3JlIGxvZ2ljIHdpdGhpbiB0aGUgYHZob3N0X3ZkcGFgIGZyYW1ld29yaywgYW5kIHRoYXQgYWx3YXlzIHJhaXNlcyBhIGZsYWcgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGhvdyBkbyBJIGdvIGFib3V0IGFjdHVhbGx5IGZ1enppbmcgdGhpcz8gV2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZG8gSSBuZWVkIHRvIGVuYWJsZSB0byBnZXQgaXQgcnVubmluZyBpbiBhIHN1aXRhYmxlIGVudmlyb25tZW50PyBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBieSBkaWdnaW5nIGludG8gYGRyaXZlcnMvdmhvc3QvS2NvbmZpZ2Agb3IgYGRyaXZlcnMvdmhvc3QvTWFrZWZpbGVgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGVuYWJsZXMgYHZkcGEuY2AgaW4gdGhlIGZpcnN0IHBsYWNlLiBPbmNlIEkgaGF2ZSB0aG9zZSBkZXRhaWxzLCBJIGNhbiBnZXQgdG8gd29yayBvbiBzZXR0aW5nIHVwIGEgZnV6emluZyBoYXJuZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTk3LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDc6NDU6MDQuODQ2ODA1NTQ2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjE5NjY3NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZkcGFcXFxcLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92ZHBhL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbmRyaXZlcnMvdmRwYS9NYWtlZmlsZToyOm9iai0kKENPTkZJR19WRFBBKSArPSB2ZHBhLm9cXG5kcml2ZXJzL3ZkcGEvTWFrZWZpbGUtMy1vYmotJChDT05GSUdfVkRQQV9TSU0pICs9IHZkcGFfc2ltL1xcbi0tXFxuZHJpdmVycy92ZHBhL2FsaWJhYmEvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuZHJpdmVycy92ZHBhL2FsaWJhYmEvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfQUxJQkFCQV9FTklfVkRQQSkgKz0gZW5pX3ZkcGEub1xcbmRyaXZlcnMvdmRwYS9hbGliYWJhL01ha2VmaWxlLTMtXFxuLS1cXG5kcml2ZXJzL3ZkcGEvbWx4NS9NYWtlZmlsZT0xPXN1YmRpci1jY2ZsYWdzLXkgKz0gLUkkKHNyY3RyZWUpL2RyaXZlcnMvdmRwYS9tbHg1L2NvcmVcXG5kcml2ZXJzL3ZkcGEvbWx4NS9NYWtlZmlsZS0yLVxcbmRyaXZlcnMvdmRwYS9tbHg1L01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX01MWDVfVkRQQV9ORVQpICs9IG1seDVfdmRwYS5vXFxuZHJpdmVycy92ZHBhL21seDUvTWFrZWZpbGUtNC1tbHg1X3ZkcGEtJChDT05GSUdfTUxYNV9WRFBBX05FVCkgKz0gbmV0L21seDVfdm5ldC5vIGNvcmUvcmVzb3VyY2VzLm8gY29yZS9tci5vIG5ldC9kZWJ1Zy5vXFxuLS1cXG5kcml2ZXJzL3ZkcGEvb2N0ZW9uX2VwL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbmRyaXZlcnMvdmRwYS9vY3Rlb25fZXAvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfT0NURU9ORVBfVkRQQSkgKz0gb2N0ZXBfdmRwYS5vXFxuZHJpdmVycy92ZHBhL29jdGVvbl9lcC9NYWtlZmlsZS0zLW9jdGVwX3ZkcGEtJChDT05GSUdfT0NURU9ORVBfVkRQQSkgKz0gb2N0ZXBfdmRwYV9tYWluLm9cXG4tLVxcbmRyaXZlcnMvdmRwYS9wZHMvTWFrZWZpbGUtMy1cXG5kcml2ZXJzL3ZkcGEvcGRzL01ha2VmaWxlOjQ6b2JqLSQoQ09ORklHX1BEU19WRFBBKSA6PSBwZHNfdmRwYS5vXFxuZHJpdmVycy92ZHBhL3Bkcy9NYWtlZmlsZS01LVxcbi0tXFxuZHJpdmVycy92ZHBhL3Bkcy9jbWRzLmM9Mzg9aW50IHBkc192ZHBhX2NtZF9yZXNldChzdHJ1Y3QgcGRzX3ZkcGFfZGV2aWNlICpwZHN2KVxcbi0tXFxuZHJpdmVycy92ZHBhL3Bkcy9jbWRzLmMtNDItXFx0dW5pb24gcGRzX2NvcmVfYWRtaW5xX2NtZCBjbWQgPSB7XFxuZHJpdmVycy92ZHBhL3Bkcy9jbWRzLmM6NDM6XFx0XFx0LnZkcGEub3Bjb2RlID0gUERTX1ZEUEFfQ01EX1JFU0VULFxcbmRyaXZlcnMvdmRwYS9wZHMvY21kcy5jLTQ0LVxcdFxcdC52ZHBhLnZkcGFfaW5kZXggPSBwZHN2LVxcdTAwM2V2ZHBhX2luZGV4LFxcbi0tXFxuZHJpdmVycy92ZHBhL3NvbGlkcnVuL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbmRyaXZlcnMvdmRwYS9zb2xpZHJ1bi9NYWtlZmlsZToyOm9iai0kKENPTkZJR19TTkVUX1ZEUEEpICs9IHNuZXRfdmRwYS5vXFxuZHJpdmVycy92ZHBhL3NvbGlkcnVuL01ha2VmaWxlLTMtc25ldF92ZHBhLSQoQ09ORklHX1NORVRfVkRQQSkgKz0gc25ldF9tYWluLm9cXG4tLVxcbmRyaXZlcnMvdmRwYS92aXJ0aW9fcGNpL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbmRyaXZlcnMvdmRwYS92aXJ0aW9fcGNpL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX1ZQX1ZEUEEpICs9IHZwX3ZkcGEub1xcbi0tXFxuZHJpdmVycy92aG9zdC9NYWtlZmlsZT0xMT1vYmotJChDT05GSUdfVkhPU1RfUklORykgKz0gdnJpbmdoLm9cXG5kcml2ZXJzL3Zob3N0L01ha2VmaWxlLTEyLVxcbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGU6MTM6b2JqLSQoQ09ORklHX1ZIT1NUX1ZEUEEpICs9IHZob3N0X3ZkcGEub1xcbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGU6MTQ6dmhvc3RfdmRwYS15IDo9IHZkcGEub1xcbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGUtMTUtXFxuLS1cXG5kcml2ZXJzL3ZpcnRpby9NYWtlZmlsZT0xMj1vYmotJChDT05GSUdfVklSVElPX0lOUFVUKSArPSB2aXJ0aW9faW5wdXQub1xcbmRyaXZlcnMvdmlydGlvL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19WSVJUSU9fVkRQQSkgKz0gdmlydGlvX3ZkcGEub1xcbmRyaXZlcnMvdmlydGlvL01ha2VmaWxlLTE0LW9iai0kKENPTkZJR19WSVJUSU9fTUVNKSArPSB2aXJ0aW9fbWVtLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDc6NDU6MDcuMDY2NDc4NTk2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMjQ4MjgwMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBWSE9TVF9WRFBBYCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgdGhlIGN1cnJlbnQgZm9jdXMgaXMgb24gdGhlIGBWSE9TVF9WRFBBYCBjb25maWd1cmF0aW9uIHNldHRpbmcuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGBWSE9TVF9WRFBBYCByZWxpZXMgb24gYW55IG90aGVyIGZsYWdzLCBtb2R1bGVzLCBvciBmZWF0dXJlcyB3aXRoaW4gdGhlIHN5c3RlbS4gSXMgaXQgYSBzdGFuZGFsb25lIGZlYXR1cmUgb3IgZG9lcyBpdCByZWx5IG9uIGEgc3BlY2lmaWMgaGFyZHdhcmUgcGxhdGZvcm0gb3Igb3RoZXIgcHJlLXJlcXVpc2l0ZXM/IEkgbmVlZCB0byBrbm93IHdoZXJlIGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUgdG8gZnVsbHkgZ3Jhc3AgaXRzIGltcGxpY2F0aW9ucy4gRGV0ZXJtaW5pbmcgaXRzIGRlcGVuZGVuY2llcyBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIGl0IGNvbXBsZXRlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNDAsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwNzo0NToxMC4xOTEzMDg1NTdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzE3OTAwMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZIT1NUX1ZEUEFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC9LY29uZmlnPTU2PWNvbmZpZyBWSE9TVF9WU09DS1xcbi0tXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTY5LVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo3MDpjb25maWcgVkhPU1RfVkRQQVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy03MS1cXHR0cmlzdGF0ZSBcXFwiVmhvc3QgZHJpdmVyIGZvciB2RFBBLWJhc2VkIGJhY2tlbmRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA3OjQ1OjEyLjA2MzEwNDk3NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzYzNDE4NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIHZob3N0IEtjb25maWcqKlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgdmhvc3QgZHJpdmVyIGJldHRlci4gVGltZSB0byBwdWxsIHVwIGBkcml2ZXJzL3Zob3N0L0tjb25maWdgIGFuZCwgc3BlY2lmaWNhbGx5LCBJJ20gaGVhZGluZyB0b3dhcmRzIGxpbmUgNzAuIEknbSBndWVzc2luZyB0aGF0IGFyZWEgd2lsbCBsaWtlbHkgY29udGFpbiB0aGUgY29yZSBzZXR0aW5ncyBJJ20gaW50ZXJlc3RlZCBpbiwgbWF5YmUgdGhlIGhpZ2gtbGV2ZWwgZW5hYmxlIGZsYWdzIG9yIHNvbWUgZnVuZGFtZW50YWwgZGVwZW5kZW5jaWVzLiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gaW4gdGhhdCBwYXJ0IG9mIHRoZSBmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTIwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDc6NDU6MTQuODI2NTI1Mzg1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxOTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdmhvc3QvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2NTpcXHRcXHR2aXJ0aW9fdHJhbnNwb3J0LmtvIGRyaXZlciBsb2FkZWQgdG8gdXNlIHRoZSB2aXJ0aW8tdnNvY2sgZGV2aWNlLlxcbiAgNjY6XFx0XFxuICA2NzpcXHRcXHRUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkXFxuICA2ODpcXHRcXHR2aG9zdF92c29jay5cXG4gIDY5OlxcdFxcbiAgNzA6XFx0Y29uZmlnIFZIT1NUX1ZEUEFcXG4gIDcxOlxcdFxcdHRyaXN0YXRlIFxcXCJWaG9zdCBkcml2ZXIgZm9yIHZEUEEtYmFzZWQgYmFja2VuZFxcXCJcXG4gIDcyOlxcdFxcdGRlcGVuZHMgb24gRVZFTlRGRFxcbiAgNzM6XFx0XFx0c2VsZWN0IFZIT1NUXFxuICA3NDpcXHRcXHRzZWxlY3QgSVJRX0JZUEFTU19NQU5BR0VSXFxuICA3NTpcXHRcXHRkZXBlbmRzIG9uIFZEUEFcXG4gIDc2OlxcdFxcdGhlbHBcXG4gIDc3OlxcdFxcdCAgVGhpcyBrZXJuZWwgbW9kdWxlIGNhbiBiZSBsb2FkZWQgaW4gaG9zdCBrZXJuZWwgdG8gYWNjZWxlcmF0ZVxcbiAgNzg6XFx0XFx0ICBndWVzdCB2aXJ0aW8gZGV2aWNlcyB3aXRoIHRoZSB2RFBBLWJhc2VkIGJhY2tlbmRzLlxcbiAgNzk6XFx0XFxuICA4MDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gIDgxOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgdmhvc3RfdmRwYS5cXG4gIDgyOlxcdFxcbiAgODM6XFx0Y29uZmlnIFZIT1NUX0NST1NTX0VORElBTl9MRUdBQ1lcXG4gIDg0OlxcdFxcdGJvb2wgXFxcIkNyb3NzLWVuZGlhbiBzdXBwb3J0IGZvciB2aG9zdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDc6NDU6MTQuODI2NTg4NDU1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4ODc3MzczMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBDb251bmRydW0qKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIEkgbmVlZCB0byBtYWtlIHNvbWUgY29uZmlndXJhdGlvbiBkZWNpc2lvbnMuIEl0J3MgY2xlYXIgdGhhdCBgVkhPU1RfVkRQQWAgcmVsaWVzIG9uIGBWRFBBYC4gTG9naWNhbGx5LCBJIHNob3VsZCBlbmFibGUgYm90aCBvZiB0aG9zZSwgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gQnV0IHRoZW4gbXkgbWluZCBkcmlmdHMgLSB3aGF0IGFib3V0IGBWRFBBX1NJTWA/IE5vdywgdGhhdCBoYXMgcG90ZW50aWFsLiBTcGVjaWZpY2FsbHksIGZvciBmdXp6aW5nIHZEUEEuIEkgY2FuIHNlZSB0aGUgdmFsdWUgb2YgdGVzdGluZyB3aXRob3V0IG5lY2Vzc2FyaWx5IGhhdmluZyB0aGUgaGFyZHdhcmUgaW4gcGxhY2UuIEkgc2hvdWxkIHByb2JhYmx5IGhhdmUgYSBsb29rIGF0IHRoZSBgZHJpdmVycy92ZHBhL0tjb25maWdgIGZpbGUgdG8gZ2V0IGEgY2xlYXJlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbXBsaWNhdGlvbnMgb2YgZWFjaCBzZXR0aW5nLCBhbmQgaG93IHRoZXkgaW50ZXJhY3QuIEdvdHRhIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5ODEsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA3OjQ1OjE3LjcxNDMyNzQzOVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2NTczMDMxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkRQQVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZkcGEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnOjI6bWVudWNvbmZpZyBWRFBBXFxuZHJpdmVycy92ZHBhL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwidkRQQSBkcml2ZXJzXFxcIlxcbi0tXFxuZHJpdmVycy92ZHBhL0tjb25maWc9MTA9aWYgVkRQQVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTExLVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnOjEyOmNvbmZpZyBWRFBBX1NJTVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTEzLVxcdHRyaXN0YXRlIFxcXCJ2RFBBIGRldmljZSBzaW11bGF0b3IgY29yZVxcXCJcXG4tLVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTIwLVxcbmRyaXZlcnMvdmRwYS9LY29uZmlnOjIxOmNvbmZpZyBWRFBBX1NJTV9ORVRcXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0yMi1cXHR0cmlzdGF0ZSBcXFwidkRQQSBzaW11bGF0b3IgZm9yIG5ldHdvcmtpbmcgZGV2aWNlXFxcIlxcbi0tXFxuZHJpdmVycy92ZHBhL0tjb25maWctMjctXFxuZHJpdmVycy92ZHBhL0tjb25maWc6Mjg6Y29uZmlnIFZEUEFfU0lNX0JMT0NLXFxuZHJpdmVycy92ZHBhL0tjb25maWctMjktXFx0dHJpc3RhdGUgXFxcInZEUEEgc2ltdWxhdG9yIGZvciBibG9jayBkZXZpY2VcXFwiXFxuLS1cXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0zNC1cXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZzozNTpjb25maWcgVkRQQV9VU0VSXFxuZHJpdmVycy92ZHBhL0tjb25maWctMzYtXFx0dHJpc3RhdGUgXFxcIlZEVVNFICh2RFBBIERldmljZSBpbiBVc2Vyc3BhY2UpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA3OjQ1OjE5LjY4MDA2NjU3MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NzA4NDQ4MDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoIGluIHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl9tc2cqKlxuXG5Pa2F5LCBsZXQncyBzZWUsIEknbSBnb2luZyB0byBlbmFibGUgdGhlc2UgVkRQQSBmZWF0dXJlczogYFZEUEFgLCBgVkhPU1RfVkRQQWAsIGBWRFBBX1NJTWAsIGBWRFBBX1NJTV9ORVRgLCBgVkRQQV9TSU1fQkxPQ0tgLCBhbmQgYFZEUEFfVVNFUmAuIEJ1dCwgcmVhbGlzdGljYWxseSwgYFZIT1NUX1ZEUEFgIGlzIHRoZSBtYWluIG9uZSBJJ20gaW50ZXJlc3RlZCBpbiBoZXJlLiBUaGUgcGF0Y2ggSSdtIGxvb2tpbmcgYXQgbW9kaWZpZXMgYHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl9tc2dgLCBzbyB0aGF0J3MgdGhlIGtleSBmdW5jdGlvbiB0byBmb2N1cyBvbi5cblxuQWxyaWdodCwgd2hhdCdzIGNoYW5nZWQgaW4gdGhhdCBmdW5jdGlvbj8gTGV0IG1lIHNlZS4uLiBoZXJlJ3MgdGhlIGNvZGU6XG5cbmBgYGNcbiBcdGNhc2UgVkhPU1RfSU9UTEJfQkFUQ0hfRU5EOlxuLVx0XHRpZiAodi1cdTAwM2Vpbl9iYXRjaCBcdTAwMjZcdTAwMjYgb3BzLVx1MDAzZXNldF9tYXApXG4tXHRcdFx0b3BzLVx1MDAzZXNldF9tYXAodmRwYSwgYXNpZCwgaW90bGIpO1xuK1x0XHRpZiAodi1cdTAwM2Vpbl9iYXRjaCBcdTAwMjZcdTAwMjYgb3BzLVx1MDAzZXNldF9tYXApIHtcbitcdFx0XHRyID0gb3BzLVx1MDAzZXNldF9tYXAodmRwYSwgYXNpZCwgaW90bGIpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4gXHRcdHYtXHUwMDNlaW5fYmF0Y2ggPSBmYWxzZTtcbiBcdFx0YnJlYWs7XG5gYGBcblxuSXQgc2VlbXMgbGlrZSBhIGJ1ZyBmaXggb3IgYSBzdWJ0bGUgZmVhdHVyZSBlbmhhbmNlbWVudCB3aXRoaW4gdGhlIGBWSE9TVF9JT1RMQl9CQVRDSF9FTkRgIGNhc2UuIE5vdywgSSBzZWUgdGhlIGtleSBjaGFuZ2U6IHRoZSBgb3BzLVx1MDAzZXNldF9tYXBgIGNhbGwgaXMgd3JhcHBlZCBpbiBhIGJsb2NrLCBhbmQgdGhlIGBicmVha2Agc3RhdGVtZW50IGlzICppbnNpZGUqIHRoYXQgYmxvY2suXG5cbkhvbGQgb24uLi4gaWYgYG9wcy1cdTAwM2VzZXRfbWFwYCBpcyBleGVjdXRlZCwgdGhlbiB0aGUgZnVuY3Rpb24gYnJlYWtzICpiZWZvcmUqIGB2LVx1MDAzZWluX2JhdGNoYCBpcyBzZXQgdG8gZmFsc2UhIFRoYXQncy4uLiBwcm9ibGVtYXRpYy4gSWYgYHIgPSBvcHMtXHUwMDNlc2V0X21hcCh2ZHBhLCBhc2lkLCBpb3RsYik7IGJyZWFrO2AgaXMgZXhlY3V0ZWQsIHRoZSBgdi1cdTAwM2Vpbl9iYXRjaCA9IGZhbHNlYCBsaW5lIGlzIHNraXBwZWQuIFRoaXMgaXMgYWxtb3N0IGNlcnRhaW5seSBhbiBlcnJvci5cblxuV2h5IHdvdWxkIHRoZSBiYXRjaCBpbmRpY2F0b3IgKnJlbWFpbiogdHJ1ZSBhZnRlciB0aGUgYG9wcy1cdTAwM2VzZXRfbWFwYCBjYWxsIGlmIGl0IHJldHVybnM/IElmIGBvcHMtXHUwMDNlc2V0X21hcGAgaXMgY2FsbGVkLCBpdCBtZWFucyB0aGUgYmF0Y2ggaXMgZW5kaW5nLCBhbmQgdGhlIG1hcCBpcyBzZXQsIHNvIGB2LVx1MDAzZWluX2JhdGNoYCBzaG91bGQgYmUgc2V0IHRvIGZhbHNlLiBJcyBgb3BzLVx1MDAzZXNldF9tYXBgIGFzeW5jaHJvbm91cz8gTm8sIGl0IHJldHVybnMgYW4gaW50ZWdlci4gTGV0IG1lIGNoZWNrLi4uIGlmIGBvcHMtXHUwMDNlc2V0X21hcGAgZmFpbHMsIGl0IHJldHVybnMgYSBub24temVybyB2YWx1ZSwgd2hpY2ggaXMgdGhlbiByZXR1cm5lZCBieSBgdmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZ2AuIEJ1dCBpZiBpdCBzdWNjZWVkcywgaXQgcmV0dXJucyAwLiBTdGlsbCwgYHYtXHUwMDNlaW5fYmF0Y2hgIGlzIG5vdCBiZWluZyByZXNldCB0byBmYWxzZSFcblxuT2theSwgSSBzZWUgdGhlIGltcGxpY2F0aW9uLiBJZiBgdi1cdTAwM2Vpbl9iYXRjaGAgcmVtYWlucyB0cnVlLCB0aGUgbmV4dCBgVkhPU1RfSU9UTEJfVVBEQVRFYCBtZXNzYWdlIHdpbGwgYmUgaW5jb3JyZWN0bHkgdHJlYXRlZCBhcyBwYXJ0IG9mIHRoZSBzYW1lICplbmRlZCogYmF0Y2guIFRoYXQncyBkZWZpbml0ZWx5IGEgYnVnLiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgYHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl91cGRhdGVgIGZ1bmN0aW9uIHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aGlzIGB2LVx1MDAzZWluX2JhdGNoYCBmbGFnLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTMzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA3OjQ1OjI4LjM4ODUxNjUzMVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC92ZHBhLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIyMCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIyMDpcXHRzdGF0aWMgaW50IHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl91cGRhdGUoc3RydWN0IHZob3N0X3ZkcGEgKnYsXFxuMTIyMTpcXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgdmhvc3RfaW90bGIgKmlvdGxiLFxcbjEyMjI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHZob3N0X2lvdGxiX21zZyAqbXNnKVxcbjEyMjM6XFx0e1xcbjEyMjQ6XFx0XFx0c3RydWN0IHZkcGFfZGV2aWNlICp2ZHBhID0gdi1cXHUwMDNldmRwYTtcXG4xMjI1OlxcdFxcbjEyMjY6XFx0XFx0aWYgKG1zZy1cXHUwMDNlaW92YSBcXHUwMDNjIHYtXFx1MDAzZXJhbmdlLmZpcnN0IHx8ICFtc2ctXFx1MDAzZXNpemUgfHxcXG4xMjI3OlxcdFxcdCAgICBtc2ctXFx1MDAzZWlvdmEgXFx1MDAzZSBVNjRfTUFYIC0gbXNnLVxcdTAwM2VzaXplICsgMSB8fFxcbjEyMjg6XFx0XFx0ICAgIG1zZy1cXHUwMDNlaW92YSArIG1zZy1cXHUwMDNlc2l6ZSAtIDEgXFx1MDAzZSB2LVxcdTAwM2VyYW5nZS5sYXN0KVxcbjEyMjk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTIzMDpcXHRcXG4xMjMxOlxcdFxcdGlmICh2aG9zdF9pb3RsYl9pdHJlZV9maXJzdChpb3RsYiwgbXNnLVxcdTAwM2Vpb3ZhLFxcbjEyMzI6XFx0XFx0XFx0XFx0XFx0ICAgIG1zZy1cXHUwMDNlaW92YSArIG1zZy1cXHUwMDNlc2l6ZSAtIDEpKVxcbjEyMzM6XFx0XFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuMTIzNDpcXHRcXG4xMjM1OlxcdFxcdGlmICh2ZHBhLVxcdTAwM2V1c2VfdmEpXFxuMTIzNjpcXHRcXHRcXHRyZXR1cm4gdmhvc3RfdmRwYV92YV9tYXAodiwgaW90bGIsIG1zZy1cXHUwMDNlaW92YSwgbXNnLVxcdTAwM2VzaXplLFxcbjEyMzc6XFx0XFx0XFx0XFx0XFx0XFx0IG1zZy1cXHUwMDNldWFkZHIsIG1zZy1cXHUwMDNlcGVybSk7XFxuMTIzODpcXHRcXG4xMjM5OlxcdFxcdHJldHVybiB2aG9zdF92ZHBhX3BhX21hcCh2LCBpb3RsYiwgbXNnLVxcdTAwM2Vpb3ZhLCBtc2ctXFx1MDAzZXNpemUsIG1zZy1cXHUwMDNldWFkZHIsXFxuMTI0MDpcXHRcXHRcXHRcXHRcXHQgbXNnLVxcdTAwM2VwZXJtKTtcXG4xMjQxOlxcdH1cXG4xMjQyOlxcdFxcbjEyNDM6XFx0c3RhdGljIGludCB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgdTMyIGFzaWQsXFxuMTI0NDpcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgdmhvc3RfaW90bGJfbXNnICptc2cpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA3OjQ1OjI4LjM4ODY1NzU3MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzk1MTMzMzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKk1lbW9yeSBMYW5lIHdpdGggdmhvc3RfdmRwYSoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEknbSBjaGFzaW5nIGEgcG90ZW50aWFsIGlzc3VlIHJlbGF0ZWQgdG8gdmlydHVhbCBkZXZpY2UgcGFzc3Rocm91Z2ggYW5kIGhvdyB3ZSBoYW5kbGUgbWVtb3J5IG1hcHBpbmdzIHdpdGhpbiB0aGUgdmhvc3QgY29udGV4dCwgc3BlY2lmaWNhbGx5IGZvciB2RFBBIGRldmljZXMuIE15IGluaXRpYWwgYXNzdW1wdGlvbiB3YXMgdGhhdCBgdi1cdTAwM2Vpbl9iYXRjaGAgd2FzIG9ubHkgcmVsZXZhbnQgZHVyaW5nIHRoZSBpbml0aWFsIHNldHVwIG9yIHRlYXItZG93bi4gQnV0IG5vdyBJJ20gcXVlc3Rpb25pbmcgdGhhdC4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBpZiB0aGUgYHYtXHUwMDNlaW5fYmF0Y2hgIGZsYWcgaXMgYWN0dWFsbHkgKnVzZWQqIHdpdGhpbiBlaXRoZXIgdGhlIGB2aG9zdF92ZHBhX3BhX21hcGAgb3IgdGhlIGB2aG9zdF92ZHBhX3ZhX21hcGAgZnVuY3Rpb25zLiBUaGlzIGRldGFpbCBpcyBjcml0aWNhbCBmb3IgZW5zdXJpbmcgb3VyIG1lbW9yeSBtYXBwaW5nIGxvZ2ljIGlzIHJvYnVzdCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvcnMsIGVzcGVjaWFsbHkgZHVyaW5nIGJhdGNoIG9wZXJhdGlvbnMuIE15IGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIGZsYWcgaW5mbHVlbmNlcyB0aGUgd2F5IHBoeXNpY2FsIGFkZHJlc3NlcyAoUEEpIG9yIHZpcnR1YWwgYWRkcmVzc2VzIChWQSkgYXJlIHRyYW5zbGF0ZWQsIG9yIGlmIHRoZSBzeXN0ZW0gbWlzdGFrZW5seSB1c2VzIHN0YWxlIGJhdGNoIGluZm9ybWF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNhbGwgc3RhY2sgYW5kIGRhdGEgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxOTUsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA3OjQ1OjMxLjc4Mzc5MzAxN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyOTM5MDM2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbl9iYXRjaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2V4dDQucnN0PTE0MT1XaGVuIG1vdW50aW5nIGFuIGV4dDQgZmlsZXN5c3RlbSwgdGhlIGZvbGxvd2luZyBvcHRpb24gYXJlIGFjY2VwdGVkOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9leHQ0LnJzdC0zMDQtXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9leHQ0LnJzdDozMDU6ICBtaW5fYmF0Y2hfdGltZT11c2VjXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9leHQ0LnJzdC0zMDYtICAgICAgICBUaGlzIHBhcmFtZXRlciBzZXRzIHRoZSBjb21taXQgdGltZSAoYXMgZGVzY3JpYmVkIGFib3ZlKSB0byBiZSBhdCBsZWFzdFxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvZXh0NC5yc3Q6MzA3OiAgICAgICAgbWluX2JhdGNoX3RpbWUuICBJdCBkZWZhdWx0cyB0byB6ZXJvIG1pY3Jvc2Vjb25kcy4gIEluY3JlYXNpbmcgdGhpc1xcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvZXh0NC5yc3QtMzA4LSAgICAgICAgcGFyYW1ldGVyIG1heSBpbXByb3ZlIHRoZSB0aHJvdWdocHV0IG9mIG11bHRpLXRocmVhZGVkLCBzeW5jaHJvbm91c1xcbi0tXFxuZHJpdmVycy9kbWEvaWR4ZC9pcnEuYz0yMjI9c3RhdGljIHZvaWQgaWR4ZF9ldmxfZmF1bHRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL2RtYS9pZHhkL2lycS5jLTIzOC1cXHRjYXNlIERTQV9DT01QX0NSQV9YTEFUOlxcbmRyaXZlcnMvZG1hL2lkeGQvaXJxLmM6MjM5OlxcdFxcdGlmIChlbnRyeV9oZWFkLVxcdTAwM2ViYXRjaCBcXHUwMDI2XFx1MDAyNiBlbnRyeV9oZWFkLVxcdTAwM2VmaXJzdF9lcnJfaW5fYmF0Y2gpXFxuZHJpdmVycy9kbWEvaWR4ZC9pcnEuYy0yNDAtXFx0XFx0XFx0ZXZsLVxcdTAwM2ViYXRjaF9mYWlsW2VudHJ5X2hlYWQtXFx1MDAzZWJhdGNoX2lkXSA9IGZhbHNlO1xcbi0tXFxuZHJpdmVycy9kbWEvaWR4ZC9yZWdpc3RlcnMuaD02MTU9c3RydWN0IF9fZXZsX2VudHJ5IHtcXG4tLVxcbmRyaXZlcnMvZG1hL2lkeGQvcmVnaXN0ZXJzLmgtNjQzLVxcdFxcdFxcdHUxNiByY3I6MTtcXG5kcml2ZXJzL2RtYS9pZHhkL3JlZ2lzdGVycy5oOjY0NDpcXHRcXHRcXHR1MTYgZmlyc3RfZXJyX2luX2JhdGNoOjE7XFxuZHJpdmVycy9kbWEvaWR4ZC9yZWdpc3RlcnMuaC02NDUtXFx0XFx0XFx0dTE2IHJzdmQ0XzI6OTtcXG4tLVxcbmRyaXZlcnMvbWQvZG0tdmRvL2Jsb2NrLW1hcC5oPTQ5PXN0cnVjdCB2ZG9fcGFnZV9jYWNoZSB7XFxuLS1cXG5kcml2ZXJzL21kL2RtLXZkby9ibG9jay1tYXAuaC01NC1cXHQvKiBudW1iZXIgb2YgcGFnZXMgdG8gd3JpdGUgaW4gdGhlIGN1cnJlbnQgYmF0Y2ggKi9cXG5kcml2ZXJzL21kL2RtLXZkby9ibG9jay1tYXAuaDo1NTpcXHRwYWdlX2NvdW50X3QgcGFnZXNfaW5fYmF0Y2g7XFxuZHJpdmVycy9tZC9kbS12ZG8vYmxvY2stbWFwLmgtNTYtXFx0LyogV2hldGhlciB0aGUgVkRPIGlzIGRvaW5nIGEgcmVhZC1vbmx5IHJlYnVpbGQgKi9cXG4tLVxcbmRyaXZlcnMvbWQvZG0tdmRvL2RhdGEtdmlvLmg9MTEwPXN0cnVjdCBjb21wcmVzc2lvbl9zdGF0ZSB7XFxuLS1cXG5kcml2ZXJzL21kL2RtLXZkby9kYXRhLXZpby5oLTEzMC1cXHQvKiBBIGxpbmsgaW4gdGhlIGNoYWluIG9mIGRhdGFfdmlvcyB3aGljaCBoYXZlIGJlZW4gcGFja2VkIHRvZ2V0aGVyICovXFxuZHJpdmVycy9tZC9kbS12ZG8vZGF0YS12aW8uaDoxMzE6XFx0c3RydWN0IGRhdGFfdmlvICpuZXh0X2luX2JhdGNoO1xcbmRyaXZlcnMvbWQvZG0tdmRvL2RhdGEtdmlvLmgtMTMyLVxcbi0tXFxuZHJpdmVycy9tZC9kbS12ZG8vcGFja2VyLmM9Mjc0PXN0YXRpYyB2b2lkIGZpbmlzaF9jb21wcmVzc2VkX3dyaXRlKHN0cnVjdCB2ZG9fY29tcGxldGlvbiAqY29tcGxldGlvbilcXG4tLVxcbmRyaXZlcnMvbWQvZG0tdmRvL3BhY2tlci5jLTI4NC1cXHQgKi9cXG5kcml2ZXJzL21kL2RtLXZkby9wYWNrZXIuYzoyODU6XFx0Zm9yIChjbGllbnQgPSBhZ2VudC1cXHUwMDNlY29tcHJlc3Npb24ubmV4dF9pbl9iYXRjaDsgY2xpZW50ICE9IE5VTEw7IGNsaWVudCA9IG5leHQpIHtcXG5kcml2ZXJzL21kL2RtLXZkby9wYWNrZXIuYzoyODY6XFx0XFx0bmV4dCA9IGNsaWVudC1cXHUwMDNlY29tcHJlc3Npb24ubmV4dF9pbl9iYXRjaDtcXG5kcml2ZXJzL21kL2RtLXZkby9wYWNrZXIuYy0yODctXFx0XFx0cmVsZWFzZV9jb21wcmVzc2VkX3dyaXRlX3dhaXRlcihjbGllbnQsIFxcdTAwMjZhZ2VudC1cXHUwMDNlYWxsb2NhdGlvbik7XFxuLS1cXG5kcml2ZXJzL21kL2RtLXZkby9wYWNrZXIuYz0yOTQ9c3RhdGljIHZvaWQgaGFuZGxlX2NvbXByZXNzZWRfd3JpdGVfZXJyb3Ioc3RydWN0IHZkb19jb21wbGV0aW9uICpjb21wbGV0aW9uKVxcbi0tXFxuZHJpdmVycy9tZC9kbS12ZG8vcGFja2VyLmMtMzA2LVxcbmRyaXZlcnMvbWQvZG0tdmRvL3BhY2tlci5jOjMwNzpcXHRmb3IgKGNsaWVudCA9IGFnZW50LVxcdTAwM2Vjb21wcmVzc2lvbi5uZXh0X2luX2JhdGNoOyBjbGllbnQgIT0gTlVMTDsgY2xpZW50ID0gbmV4dCkge1xcbmRyaXZlcnMvbWQvZG0tdmRvL3BhY2tlci5jOjMwODpcXHRcXHRuZXh0ID0gY2xpZW50LVxcdTAwM2Vjb21wcmVzc2lvbi5uZXh0X2luX2JhdGNoO1xcbmRyaXZlcnMvbWQvZG0tdmRvL3BhY2tlci5jLTMwOS1cXHRcXHR3cml0ZV9kYXRhX3ZpbyhjbGllbnQpO1xcbi0tXFxuZHJpdmVycy9tZC9kbS12ZG8vcGFja2VyLmM9Mzg5PXN0YXRpYyBibG9ja19zaXplX3QgX19tdXN0X2NoZWNrIHBhY2tfZnJhZ21lbnQoc3RydWN0IGNvbXByZXNzaW9uX3N0YXRlICpjb21wcmVzc2lvbixcXG4tLVxcbmRyaXZlcnMvbWQvZG0tdmRvL3BhY2tlci5jLTM5Ni1cXG5kcml2ZXJzL21kL2RtLXZkby9wYWNrZXIuYzozOTc6XFx0dG9fcGFjay1cXHUwMDNlbmV4dF9pbl9iYXRjaCA9IGNvbXByZXNzaW9uLVxcdTAwM2VuZXh0X2luX2JhdGNoO1xcbmRyaXZlcnMvbWQvZG0tdmRvL3BhY2tlci5jOjM5ODpcXHRjb21wcmVzc2lvbi1cXHUwMDNlbmV4dF9pbl9iYXRjaCA9IGRhdGFfdmlvO1xcbmRyaXZlcnMvbWQvZG0tdmRvL3BhY2tlci5jLTM5OS1cXHR0b19wYWNrLVxcdTAwM2VzbG90ID0gc2xvdDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvaHR0Lmg9MTY3PWVudW0gaHR0X2RhdGFfdHhfZXh0X3RpZCB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2h0dC5oLTE4Mi0gKiAgICAgICAgICAgICAgICAgIChITCBob3N0cyBtYW5hZ2UgcXVldWVzIG9uIHRoZSBob3N0IClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2h0dC5oOjE4MzogKiAgICAgICBtb3JlX2luX2JhdGNoOiBvbmx5IGZvciBITCBob3N0cy4gaW5kaWNhdGVzIGlmIG1vcmUgcGFja2V0cyBhcmVcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2h0dC5oLTE4NC0gKiAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nLiB0aGlzIGFsbG93cyB0YXJnZXQgdG8gd2FpdCBhbmQgYWdncmVnYXRlXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2Z3L2FwaS9sb2NhdGlvbi5oPTE3NTA9ZW51bSBpd2xfdG9mX3Jlc3BvbnNlX3N0YXR1cyB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2Z3L2FwaS9sb2NhdGlvbi5oLTE3NjEtICpcXHRcXHUwMDI2ZW51bSBpd2xfdG9mX3Jlc3BvbnNlX3N0YXR1cy5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2Z3L2FwaS9sb2NhdGlvbi5oOjE3NjI6ICogQGxhc3RfaW5fYmF0Y2g6IHJlcHJvdCBwb2xpY3kgKHdoZW4gbm90IGFsbCByZXNwb25zZXMgYXJlIHVwbG9hZGVkIGF0IG9uY2UpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9mdy9hcGkvbG9jYXRpb24uaC0xNzYzLSAqIEBudW1fb2ZfYXBzOiBOdW1iZXIgb2YgQVBzIHRvIG1lYXN1cmUgKGVycm9yIGlmIFxcdTAwM2UgSVdMX1RPRl9NQVhfQVBTKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9mdy9hcGkvbG9jYXRpb24uaD0xNzY2PXN0cnVjdCBpd2xfdG9mX3JhbmdlX3JzcF9udGZ5X3Y1IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZncvYXBpL2xvY2F0aW9uLmgtMTc2OC1cXHR1OCByZXF1ZXN0X3N0YXR1cztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2Z3L2FwaS9sb2NhdGlvbi5oOjE3Njk6XFx0dTggbGFzdF9pbl9iYXRjaDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2Z3L2FwaS9sb2NhdGlvbi5oLTE3NzAtXFx0dTggbnVtX29mX2FwcztcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2Z0bS1pbml0aWF0b3IuYz0zMzQ9dm9pZCBpd2xfbWxkX2hhbmRsZV9mdG1fcmVzcF9ub3RpZihzdHJ1Y3QgaXdsX21sZCAqbWxkLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvZnRtLWluaXRpYXRvci5jLTMzNy1cXHRzdHJ1Y3QgaXdsX3RvZl9yYW5nZV9yc3BfbnRmeSAqZndfcmVzcCA9ICh2b2lkICopcGt0LVxcdTAwM2VkYXRhO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2Z0bS1pbml0aWF0b3IuYzozMzg6XFx0dTggbnVtX29mX2FwcywgbGFzdF9pbl9iYXRjaDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9mdG0taW5pdGlhdG9yLmMtMzM5LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvZnRtLWluaXRpYXRvci5jLTM0OC1cXHRudW1fb2ZfYXBzID0gZndfcmVzcC1cXHUwMDNlbnVtX29mX2FwcztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9mdG0taW5pdGlhdG9yLmM6MzQ5OlxcdGxhc3RfaW5fYmF0Y2ggPSBmd19yZXNwLVxcdTAwM2VsYXN0X3JlcG9ydDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9mdG0taW5pdGlhdG9yLmMtMzUwLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvZnRtLWluaXRpYXRvci5jLTQyOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9mdG0taW5pdGlhdG9yLmM6NDI5OlxcdGlmIChsYXN0X2luX2JhdGNoKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvZnRtLWluaXRpYXRvci5jLTQzMC1cXHRcXHRjZmc4MDIxMV9wbXNyX2NvbXBsZXRlKG1sZC1cXHUwMDNlZnRtX2luaXRpYXRvci5yZXFfd2RldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL2Z0bS1pbml0aWF0b3IuYz0xMjY4PXZvaWQgaXdsX212bV9mdG1fcmFuZ2VfcmVzcChzdHJ1Y3QgaXdsX212bSAqbXZtLCBzdHJ1Y3QgaXdsX3J4X2NtZF9idWZmZXIgKnJ4YilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL2Z0bS1pbml0aWF0b3IuYy0xMjc4LVxcdFxcdFxcdFxcdCAgSVdMX1VDT0RFX1RMVl9BUElfRlRNX05FV19SQU5HRV9SRVEpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL2Z0bS1pbml0aWF0b3IuYzoxMjc5OlxcdHU4IG51bV9vZl9hcHMsIGxhc3RfaW5fYmF0Y2g7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vZnRtLWluaXRpYXRvci5jLTEyODAtXFx0dTggbm90aWZfdmVyID0gaXdsX212bV9mdG1fZ2V0X3JhbmdlX3Jlc3BfdmVyKG12bSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9mdG0taW5pdGlhdG9yLmMtMTI5Ni1cXHRcXHRudW1fb2ZfYXBzID0gZndfcmVzcF92OC1cXHUwMDNlbnVtX29mX2FwcztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9mdG0taW5pdGlhdG9yLmM6MTI5NzpcXHRcXHRsYXN0X2luX2JhdGNoID0gZndfcmVzcF92OC1cXHUwMDNlbGFzdF9yZXBvcnQ7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vZnRtLWluaXRpYXRvci5jLTEyOTgtXFx0fSBlbHNlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL2Z0bS1pbml0aWF0b3IuYy0xMzAzLVxcdFxcdG51bV9vZl9hcHMgPSBmd19yZXNwX3Y1LVxcdTAwM2VudW1fb2ZfYXBzO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL2Z0bS1pbml0aWF0b3IuYzoxMzA0OlxcdFxcdGxhc3RfaW5fYmF0Y2ggPSBmd19yZXNwX3Y1LVxcdTAwM2VsYXN0X2luX2JhdGNoO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL2Z0bS1pbml0aWF0b3IuYy0xMzA1LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL2Z0bS1pbml0aWF0b3IuYy0xNDA1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL2Z0bS1pbml0aWF0b3IuYzoxNDA2OlxcdGlmIChsYXN0X2luX2JhdGNoKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vZnRtLWluaXRpYXRvci5jLTE0MDctXFx0XFx0Y2ZnODAyMTFfcG1zcl9jb21wbGV0ZShtdm0tXFx1MDAzZWZ0bV9pbml0aWF0b3IucmVxX3dkZXYsXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jPTYyOD1zdGF0aWMgaW50IG52bWV0X3RyeV9zZW5kX2RhdGFfcGR1KHN0cnVjdCBudm1ldF90Y3BfY21kICpjbWQpXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTY1NC1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjY1NTpzdGF0aWMgaW50IG52bWV0X3RyeV9zZW5kX2RhdGEoc3RydWN0IG52bWV0X3RjcF9jbWQgKmNtZCwgYm9vbCBsYXN0X2luX2JhdGNoKVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtNjU2LXtcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtNjY3LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM6NjY4OlxcdFxcdGlmICgoIWxhc3RfaW5fYmF0Y2ggXFx1MDAyNlxcdTAwMjYgY21kLVxcdTAwM2VxdWV1ZS1cXHUwMDNlc2VuZF9saXN0X2xlbikgfHxcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTY2OS1cXHRcXHQgICAgY21kLVxcdTAwM2V3Ynl0ZXNfZG9uZSArIGxlZnQgXFx1MDAzYyBjbWQtXFx1MDAzZXJlcS50cmFuc2Zlcl9sZW4gfHxcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM9NzA4PXN0YXRpYyBpbnQgbnZtZXRfdHJ5X3NlbmRfcmVzcG9uc2Uoc3RydWN0IG52bWV0X3RjcF9jbWQgKmNtZCxcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjcwOTpcXHRcXHRib29sIGxhc3RfaW5fYmF0Y2gpXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy03MTAte1xcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy03MTYtXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYzo3MTc6XFx0aWYgKCFsYXN0X2luX2JhdGNoIFxcdTAwMjZcXHUwMDI2IGNtZC1cXHUwMDNlcXVldWUtXFx1MDAzZXNlbmRfbGlzdF9sZW4pXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy03MTgtXFx0XFx0bXNnLm1zZ19mbGFncyB8PSBNU0dfTU9SRTtcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMtNzM4LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM6NzM5OnN0YXRpYyBpbnQgbnZtZXRfdHJ5X3NlbmRfcjJ0KHN0cnVjdCBudm1ldF90Y3BfY21kICpjbWQsIGJvb2wgbGFzdF9pbl9iYXRjaClcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTc0MC17XFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTc0Ni1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjc0NzpcXHRpZiAoIWxhc3RfaW5fYmF0Y2ggXFx1MDAyNlxcdTAwMjYgY21kLVxcdTAwM2VxdWV1ZS1cXHUwMDNlc2VuZF9saXN0X2xlbilcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTc0OC1cXHRcXHRtc2cubXNnX2ZsYWdzIHw9IE1TR19NT1JFO1xcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy03NjYtXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYzo3Njc6c3RhdGljIGludCBudm1ldF90cnlfc2VuZF9kZGdzdChzdHJ1Y3QgbnZtZXRfdGNwX2NtZCAqY21kLCBib29sIGxhc3RfaW5fYmF0Y2gpXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy03Njgte1xcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy03NzctXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYzo3Nzg6XFx0aWYgKCFsYXN0X2luX2JhdGNoIFxcdTAwMjZcXHUwMDI2IGNtZC1cXHUwMDNlcXVldWUtXFx1MDAzZXNlbmRfbGlzdF9sZW4pXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy03NzktXFx0XFx0bXNnLm1zZ19mbGFncyB8PSBNU0dfTU9SRTtcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM9ODAyPXN0YXRpYyBpbnQgbnZtZXRfdGNwX3RyeV9zZW5kX29uZShzdHJ1Y3QgbnZtZXRfdGNwX3F1ZXVlICpxdWV1ZSxcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jOjgwMzpcXHRcXHRib29sIGxhc3RfaW5fYmF0Y2gpXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy04MDQte1xcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy04MjAtXFx0aWYgKGNtZC1cXHUwMDNlc3RhdGUgPT0gTlZNRVRfVENQX1NFTkRfREFUQSkge1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM6ODIxOlxcdFxcdHJldCA9IG52bWV0X3RyeV9zZW5kX2RhdGEoY21kLCBsYXN0X2luX2JhdGNoKTtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTgyMi1cXHRcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTgyNi1cXHRpZiAoY21kLVxcdTAwM2VzdGF0ZSA9PSBOVk1FVF9UQ1BfU0VORF9EREdTVCkge1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmM6ODI3OlxcdFxcdHJldCA9IG52bWV0X3RyeV9zZW5kX2RkZ3N0KGNtZCwgbGFzdF9pbl9iYXRjaCk7XFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy04MjgtXFx0XFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy04MzItXFx0aWYgKGNtZC1cXHUwMDNlc3RhdGUgPT0gTlZNRVRfVENQX1NFTkRfUjJUKSB7XFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYzo4MzM6XFx0XFx0cmV0ID0gbnZtZXRfdHJ5X3NlbmRfcjJ0KGNtZCwgbGFzdF9pbl9iYXRjaCk7XFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy04MzQtXFx0XFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYy04MzgtXFx0aWYgKGNtZC1cXHUwMDNlc3RhdGUgPT0gTlZNRVRfVENQX1NFTkRfUkVTUE9OU0UpXFxuZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYzo4Mzk6XFx0XFx0cmV0ID0gbnZtZXRfdHJ5X3NlbmRfcmVzcG9uc2UoY21kLCBsYXN0X2luX2JhdGNoKTtcXG5kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jLTg0MC1cXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTQ1PXN0cnVjdCB2aG9zdF92ZHBhIHtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTU4LVxcdHN0cnVjdCBldmVudGZkX2N0eCAqY29uZmlnX2N0eDtcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzo1OTpcXHRpbnQgaW5fYmF0Y2g7XFxuZHJpdmVycy92aG9zdC92ZHBhLmMtNjAtXFx0c3RydWN0IHZkcGFfaW92YV9yYW5nZSByYW5nZTtcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jPTI0NT1zdGF0aWMgaW50IHZob3N0X3ZkcGFfcmVzZXQoc3RydWN0IHZob3N0X3ZkcGEgKnYpXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtMjQ2LXtcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzoyNDc6XFx0di1cXHUwMDNlaW5fYmF0Y2ggPSAwO1xcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTI0OC1cXHRyZXR1cm4gX2NvbXBhdF92ZHBhX3Jlc2V0KHYpO1xcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmM9OTkyPXN0YXRpYyBpbnQgdmhvc3RfdmRwYV9tYXAoc3RydWN0IHZob3N0X3ZkcGEgKnYsIHN0cnVjdCB2aG9zdF9pb3RsYiAqaW90bGIsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xMDA4LVxcdH0gZWxzZSBpZiAob3BzLVxcdTAwM2VzZXRfbWFwKSB7XFxuZHJpdmVycy92aG9zdC92ZHBhLmM6MTAwOTpcXHRcXHRpZiAoIXYtXFx1MDAzZWluX2JhdGNoKVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTEwMTAtXFx0XFx0XFx0ciA9IG9wcy1cXHUwMDNlc2V0X21hcCh2ZHBhLCBhc2lkLCBpb3RsYik7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYz0xMDI3PXN0YXRpYyB2b2lkIHZob3N0X3ZkcGFfdW5tYXAoc3RydWN0IHZob3N0X3ZkcGEgKnYsXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xMDM3LVxcdGlmIChvcHMtXFx1MDAzZXNldF9tYXApIHtcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzoxMDM4OlxcdFxcdGlmICghdi1cXHUwMDNlaW5fYmF0Y2gpXFxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTAzOS1cXHRcXHRcXHRvcHMtXFx1MDAzZXNldF9tYXAodmRwYSwgYXNpZCwgaW90bGIpO1xcbi0tXFxuZHJpdmVycy92aG9zdC92ZHBhLmM9MTI0Mz1zdGF0aWMgaW50IHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl9tc2coc3RydWN0IHZob3N0X2RldiAqZGV2LCB1MzIgYXNpZCxcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTEyNzEtXFxuZHJpdmVycy92aG9zdC92ZHBhLmM6MTI3MjpcXHRpZiAoKHYtXFx1MDAzZWluX2JhdGNoIFxcdTAwMjZcXHUwMDI2IHYtXFx1MDAzZWJhdGNoX2FzaWQgIT0gYXNpZCkgfHwgIWlvdGxiKSB7XFxuZHJpdmVycy92aG9zdC92ZHBhLmM6MTI3MzpcXHRcXHRpZiAodi1cXHUwMDNlaW5fYmF0Y2ggXFx1MDAyNlxcdTAwMjYgdi1cXHUwMDNlYmF0Y2hfYXNpZCAhPSBhc2lkKSB7XFxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTI3NC1cXHRcXHRcXHRkZXZfaW5mbyhcXHUwMDI2di1cXHUwMDNlZGV2LCBcXFwiYmF0Y2ggaWQgJWQgYXNpZCAlZFxcXFxuXFxcIixcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTEyOTEtXFx0XFx0di1cXHUwMDNlYmF0Y2hfYXNpZCA9IGFzaWQ7XFxuZHJpdmVycy92aG9zdC92ZHBhLmM6MTI5MjpcXHRcXHR2LVxcdTAwM2Vpbl9iYXRjaCA9IHRydWU7XFxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTI5My1cXHRcXHRicmVhaztcXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xMjk0LVxcdGNhc2UgVkhPU1RfSU9UTEJfQkFUQ0hfRU5EOlxcbmRyaXZlcnMvdmhvc3QvdmRwYS5jOjEyOTU6XFx0XFx0aWYgKHYtXFx1MDAzZWluX2JhdGNoIFxcdTAwMjZcXHUwMDI2IG9wcy1cXHUwMDNlc2V0X21hcCkge1xcbmRyaXZlcnMvdmhvc3QvdmRwYS5jLTEyOTYtXFx0XFx0XFx0ciA9IG9wcy1cXHUwMDNlc2V0X21hcCh2ZHBhLCBhc2lkLCBpb3RsYik7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYy0xMjk4LVxcdFxcdH1cXG5kcml2ZXJzL3Zob3N0L3ZkcGEuYzoxMjk5OlxcdFxcdHYtXFx1MDAzZWluX2JhdGNoID0gZmFsc2U7XFxuZHJpdmVycy92aG9zdC92ZHBhLmMtMTMwMC1cXHRcXHRicmVhaztcXG4tLVxcbmZzL2V4dDQvZXh0NC5oPTE1ODY9c3RydWN0IGV4dDRfc2JfaW5mbyB7XFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0xNjQ2LVxcdHUzMiBzX21heF9iYXRjaF90aW1lO1xcbmZzL2V4dDQvZXh0NC5oOjE2NDc6XFx0dTMyIHNfbWluX2JhdGNoX3RpbWU7XFxuZnMvZXh0NC9leHQ0LmgtMTY0OC1cXHRzdHJ1Y3QgZmlsZSAqc19qb3VybmFsX2JkZXZfZmlsZTtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz0xNjkyPWVudW0ge1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTE2OTctXFx0T3B0X2F1dG9fZGFfYWxsb2MsIE9wdF9ub2F1dG9fZGFfYWxsb2MsIE9wdF9ub2xvYWQsXFxuZnMvZXh0NC9zdXBlci5jOjE2OTg6XFx0T3B0X2NvbW1pdCwgT3B0X21pbl9iYXRjaF90aW1lLCBPcHRfbWF4X2JhdGNoX3RpbWUsIE9wdF9qb3VybmFsX2RldixcXG5mcy9leHQ0L3N1cGVyLmMtMTY5OS1cXHRPcHRfam91cm5hbF9wYXRoLCBPcHRfam91cm5hbF9jaGVja3N1bSwgT3B0X2pvdXJuYWxfYXN5bmNfY29tbWl0LFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTE3NjI9c3RhdGljIGNvbnN0IHN0cnVjdCBmc19wYXJhbWV0ZXJfc3BlYyBleHQ0X3BhcmFtX3NwZWNzW10gPSB7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTc4My1cXHRmc3BhcmFtX3UzMlxcdChcXFwiY29tbWl0XFxcIixcXHRcXHRPcHRfY29tbWl0KSxcXG5mcy9leHQ0L3N1cGVyLmM6MTc4NDpcXHRmc3BhcmFtX3UzMlxcdChcXFwibWluX2JhdGNoX3RpbWVcXFwiLFxcdE9wdF9taW5fYmF0Y2hfdGltZSksXFxuZnMvZXh0NC9zdXBlci5jLTE3ODUtXFx0ZnNwYXJhbV91MzJcXHQoXFxcIm1heF9iYXRjaF90aW1lXFxcIixcXHRPcHRfbWF4X2JhdGNoX3RpbWUpLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTE5NjQ9ZXh0NF9zYl9yZWFkX2VuY29kaW5nKGNvbnN0IHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcylcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xOTg0LSNkZWZpbmUgRVhUNF9TUEVDX3NfbWF4X2JhdGNoX3RpbWVcXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyAgOClcXG5mcy9leHQ0L3N1cGVyLmM6MTk4NTojZGVmaW5lIEVYVDRfU1BFQ19zX21pbl9iYXRjaF90aW1lXFx0XFx0KDEgXFx1MDAzY1xcdTAwM2MgIDkpXFxuZnMvZXh0NC9zdXBlci5jLTE5ODYtI2RlZmluZSBFWFQ0X1NQRUNfc19pbm9kZV9yZWFkYWhlYWRfYmxrc1xcdCgxIFxcdTAwM2NcXHUwMDNjIDEwKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTE5OTc9c3RydWN0IGV4dDRfZnNfY29udGV4dCB7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMjAyMS1cXHR1MzJcXHRcXHRzX21heF9iYXRjaF90aW1lO1xcbmZzL2V4dDQvc3VwZXIuYzoyMDIyOlxcdHUzMlxcdFxcdHNfbWluX2JhdGNoX3RpbWU7XFxuZnMvZXh0NC9zdXBlci5jLTIwMjMtXFx0a3VpZF90XFx0XFx0c19yZXN1aWQ7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9MjE3MT1zdGF0aWMgaW50IGV4dDRfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSlcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0yMjc5LVxcdFxcdHJldHVybiAwO1xcbmZzL2V4dDQvc3VwZXIuYzoyMjgwOlxcdGNhc2UgT3B0X21pbl9iYXRjaF90aW1lOlxcbmZzL2V4dDQvc3VwZXIuYzoyMjgxOlxcdFxcdGN0eC1cXHUwMDNlc19taW5fYmF0Y2hfdGltZSA9IHJlc3VsdC51aW50XzMyO1xcbmZzL2V4dDQvc3VwZXIuYzoyMjgyOlxcdFxcdGN0eC1cXHUwMDNlc3BlYyB8PSBFWFQ0X1NQRUNfc19taW5fYmF0Y2hfdGltZTtcXG5mcy9leHQ0L3N1cGVyLmMtMjI4My1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz0yODU1PXN0YXRpYyB2b2lkIGV4dDRfYXBwbHlfb3B0aW9ucyhzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMjg3MC1cXHRBUFBMWShzX21heF9iYXRjaF90aW1lKTtcXG5mcy9leHQ0L3N1cGVyLmM6Mjg3MTpcXHRBUFBMWShzX21pbl9iYXRjaF90aW1lKTtcXG5mcy9leHQ0L3N1cGVyLmMtMjg3Mi1cXHRBUFBMWShzX3dhbnRfZXh0cmFfaXNpemUpO1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTI5NjU9c3RhdGljIGludCBfZXh0NF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMzAyMy1cXHRcXHRTRVFfT1BUU19QUklOVChcXFwiY29tbWl0PSVsdVxcXCIsIHNiaS1cXHUwMDNlc19jb21taXRfaW50ZXJ2YWwgLyBIWik7XFxuZnMvZXh0NC9zdXBlci5jOjMwMjQ6XFx0aWYgKG5vZGVmcyB8fCBzYmktXFx1MDAzZXNfbWluX2JhdGNoX3RpbWUgIT0gRVhUNF9ERUZfTUlOX0JBVENIX1RJTUUpXFxuZnMvZXh0NC9zdXBlci5jOjMwMjU6XFx0XFx0U0VRX09QVFNfUFJJTlQoXFxcIm1pbl9iYXRjaF90aW1lPSV1XFxcIiwgc2JpLVxcdTAwM2VzX21pbl9iYXRjaF90aW1lKTtcXG5mcy9leHQ0L3N1cGVyLmMtMzAyNi1cXHRpZiAobm9kZWZzIHx8IHNiaS1cXHUwMDNlc19tYXhfYmF0Y2hfdGltZSAhPSBFWFQ0X0RFRl9NQVhfQkFUQ0hfVElNRSlcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz01MzM4PXN0YXRpYyBpbnQgX19leHQ0X2ZpbGxfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTUzNzMtXFx0c2JpLVxcdTAwM2VzX2NvbW1pdF9pbnRlcnZhbCA9IEpCRDJfREVGQVVMVF9NQVhfQ09NTUlUX0FHRSAqIEhaO1xcbmZzL2V4dDQvc3VwZXIuYzo1Mzc0OlxcdHNiaS1cXHUwMDNlc19taW5fYmF0Y2hfdGltZSA9IEVYVDRfREVGX01JTl9CQVRDSF9USU1FO1xcbmZzL2V4dDQvc3VwZXIuYy01Mzc1LVxcdHNiaS1cXHUwMDNlc19tYXhfYmF0Y2hfdGltZSA9IEVYVDRfREVGX01BWF9CQVRDSF9USU1FO1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTU4Njg9c3RhdGljIHZvaWQgZXh0NF9pbml0X2pvdXJuYWxfcGFyYW1zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGpvdXJuYWxfdCAqam91cm5hbClcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01ODcyLVxcdGpvdXJuYWwtXFx1MDAzZWpfY29tbWl0X2ludGVydmFsID0gc2JpLVxcdTAwM2VzX2NvbW1pdF9pbnRlcnZhbDtcXG5mcy9leHQ0L3N1cGVyLmM6NTg3MzpcXHRqb3VybmFsLVxcdTAwM2VqX21pbl9iYXRjaF90aW1lID0gc2JpLVxcdTAwM2VzX21pbl9iYXRjaF90aW1lO1xcbmZzL2V4dDQvc3VwZXIuYy01ODc0LVxcdGpvdXJuYWwtXFx1MDAzZWpfbWF4X2JhdGNoX3RpbWUgPSBzYmktXFx1MDAzZXNfbWF4X2JhdGNoX3RpbWU7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NjU0NT1zdHJ1Y3QgZXh0NF9tb3VudF9vcHRpb25zIHtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy02NTUwLVxcdHVuc2lnbmVkIGxvbmcgc19jb21taXRfaW50ZXJ2YWw7XFxuZnMvZXh0NC9zdXBlci5jOjY1NTE6XFx0dTMyIHNfbWluX2JhdGNoX3RpbWUsIHNfbWF4X2JhdGNoX3RpbWU7XFxuZnMvZXh0NC9zdXBlci5jLTY1NTItI2lmZGVmIENPTkZJR19RVU9UQVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTY1NTg9c3RhdGljIGludCBfX2V4dDRfcmVtb3VudChzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNjU4MS1cXHRvbGRfb3B0cy5zX2NvbW1pdF9pbnRlcnZhbCA9IHNiaS1cXHUwMDNlc19jb21taXRfaW50ZXJ2YWw7XFxuZnMvZXh0NC9zdXBlci5jOjY1ODI6XFx0b2xkX29wdHMuc19taW5fYmF0Y2hfdGltZSA9IHNiaS1cXHUwMDNlc19taW5fYmF0Y2hfdGltZTtcXG5mcy9leHQ0L3N1cGVyLmMtNjU4My1cXHRvbGRfb3B0cy5zX21heF9iYXRjaF90aW1lID0gc2JpLVxcdTAwM2VzX21heF9iYXRjaF90aW1lO1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTY4NjMtXFx0c2JpLVxcdTAwM2VzX2NvbW1pdF9pbnRlcnZhbCA9IG9sZF9vcHRzLnNfY29tbWl0X2ludGVydmFsO1xcbmZzL2V4dDQvc3VwZXIuYzo2ODY0OlxcdHNiaS1cXHUwMDNlc19taW5fYmF0Y2hfdGltZSA9IG9sZF9vcHRzLnNfbWluX2JhdGNoX3RpbWU7XFxuZnMvZXh0NC9zdXBlci5jLTY4NjUtXFx0c2JpLVxcdTAwM2VzX21heF9iYXRjaF90aW1lID0gb2xkX29wdHMuc19tYXhfYmF0Y2hfdGltZTtcXG4tLVxcbmZzL2piZDIvam91cm5hbC5jPTE1MTg9c3RhdGljIGpvdXJuYWxfdCAqam91cm5hbF9pbml0X2NvbW1vbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxcbi0tXFxuZnMvamJkMi9qb3VybmFsLmMtMTU1Ni1cXHRqb3VybmFsLVxcdTAwM2VqX2NvbW1pdF9pbnRlcnZhbCA9IChIWiAqIEpCRDJfREVGQVVMVF9NQVhfQ09NTUlUX0FHRSk7XFxuZnMvamJkMi9qb3VybmFsLmM6MTU1NzpcXHRqb3VybmFsLVxcdTAwM2VqX21pbl9iYXRjaF90aW1lID0gMDtcXG5mcy9qYmQyL2pvdXJuYWwuYy0xNTU4LVxcdGpvdXJuYWwtXFx1MDAzZWpfbWF4X2JhdGNoX3RpbWUgPSAxNTAwMDsgLyogMTVtcyAqL1xcbi0tXFxuZnMvamJkMi90cmFuc2FjdGlvbi5jPTE4ODg9aW50IGpiZDJfam91cm5hbF9zdG9wKGhhbmRsZV90ICpoYW5kbGUpXFxuLS1cXG5mcy9qYmQyL3RyYW5zYWN0aW9uLmMtMTk2OC1cXHRcXHRjb21taXRfdGltZSA9IG1heF90KHU2NCwgY29tbWl0X3RpbWUsXFxuZnMvamJkMi90cmFuc2FjdGlvbi5jOjE5Njk6XFx0XFx0XFx0XFx0ICAgIDEwMDAqam91cm5hbC1cXHUwMDNlal9taW5fYmF0Y2hfdGltZSk7XFxuZnMvamJkMi90cmFuc2FjdGlvbi5jLTE5NzAtXFx0XFx0Y29tbWl0X3RpbWUgPSBtaW5fdCh1NjQsIGNvbW1pdF90aW1lLFxcbi0tXFxuaW5jbHVkZS9saW51eC9qYmQyLmg9NzYzPXN0cnVjdCBqb3VybmFsX3NcXG4tLVxcbmluY2x1ZGUvbGludXgvamJkMi5oLTExODAtXFx0LyoqXFxuaW5jbHVkZS9saW51eC9qYmQyLmg6MTE4MTpcXHQgKiBAal9taW5fYmF0Y2hfdGltZTpcXG5pbmNsdWRlL2xpbnV4L2piZDIuaC0xMTgyLVxcdCAqXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2piZDIuaC0xMTg1LVxcdCAqL1xcbmluY2x1ZGUvbGludXgvamJkMi5oOjExODY6XFx0dTMyXFx0XFx0XFx0al9taW5fYmF0Y2hfdGltZTtcXG5pbmNsdWRlL2xpbnV4L2piZDIuaC0xMTg3LVxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTEzMj11bmlvbiBicGZfaXRlcl9saW5rX2luZm8ge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTY0OS0gKlxcdFxcdFR3byBvcGFxdWUgdmFsdWVzIGFyZSB1c2VkIHRvIG1hbmFnZSBiYXRjaCBvcGVyYXRpb25zLFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDo2NTA6ICpcXHRcXHQqaW5fYmF0Y2gqIGFuZCAqb3V0X2JhdGNoKi4gSW5pdGlhbGx5LCAqaW5fYmF0Y2gqIG11c3QgYmUgc2V0XFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTY1MS0gKlxcdFxcdHRvIE5VTEwgdG8gYmVnaW4gdGhlIGJhdGNoZWQgb3BlcmF0aW9uLiBBZnRlciBlYWNoIHN1YnNlcXVlbnRcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNjUyLSAqXFx0XFx0KipCUEZfTUFQX0xPT0tVUF9CQVRDSCoqLCB0aGUgY2FsbGVyIHNob3VsZCBwYXNzIHRoZSByZXN1bHRhbnRcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NjUzOiAqXFx0XFx0Km91dF9iYXRjaCogYXMgdGhlICppbl9iYXRjaCogZm9yIHRoZSBuZXh0IG9wZXJhdGlvbiB0b1xcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaDo2NTQ6ICpcXHRcXHRjb250aW51ZSBpdGVyYXRpb24gZnJvbSB0aGUgY3VycmVudCBwb2ludC4gQm90aCAqaW5fYmF0Y2gqIGFuZFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC02NTUtICpcXHRcXHQqb3V0X2JhdGNoKiBtdXN0IHBvaW50IHRvIG1lbW9yeSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBhIGtleSxcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC03MTctICpcXHRcXHRFYWNoIGVsZW1lbnQgc3BlY2lmaWVkIGluICprZXlzKiBpcyBzZXF1ZW50aWFsbHkgdXBkYXRlZCB0byB0aGVcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NzE4OiAqXFx0XFx0dmFsdWUgaW4gdGhlIGNvcnJlc3BvbmRpbmcgaW5kZXggaW4gKnZhbHVlcyouIFRoZSAqaW5fYmF0Y2gqXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTcxOS0gKlxcdFxcdGFuZCAqb3V0X2JhdGNoKiBwYXJhbWV0ZXJzIGFyZSBpZ25vcmVkIGFuZCBzaG91bGQgYmUgemVyb2VkLlxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTc2Ni0gKlxcdFxcdEVhY2ggZWxlbWVudCBzcGVjaWZpZWQgaW4gKmtleXMqIGlzIHNlcXVlbnRpYWxseSBkZWxldGVkLiBUaGVcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NzY3OiAqXFx0XFx0KmluX2JhdGNoKiwgKm91dF9iYXRjaCosIGFuZCAqdmFsdWVzKiBwYXJhbWV0ZXJzIGFyZSBpZ25vcmVkXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTc2OC0gKlxcdFxcdGFuZCBzaG91bGQgYmUgemVyb2VkLlxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTE1Mjc9dW5pb24gYnBmX2F0dHIge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTE1OTEtXFx0c3RydWN0IHsgLyogc3RydWN0IHVzZWQgYnkgQlBGX01BUF8qX0JBVENIIGNvbW1hbmRzICovXFxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjE1OTI6XFx0XFx0X19hbGlnbmVkX3U2NFxcdGluX2JhdGNoO1xcdC8qIHN0YXJ0IGJhdGNoLFxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xNTkzLVxcdFxcdFxcdFxcdFxcdFxcdCAqIE5VTEwgdG8gc3RhcnQgZnJvbSBiZWdpbm5pbmdcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTE3NzM9X19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTc4Mi1cXHR2b2lkIF9fdXNlciAqdWtleXMgPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cXHUwMDNlYmF0Y2gua2V5cyk7XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MTc4MzpcXHR2b2lkIF9fdXNlciAqdWJhdGNoID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXFx1MDAzZWJhdGNoLmluX2JhdGNoKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xNzg0LVxcdHUzMiBiYXRjaCwgbWF4X2NvdW50LCBzaXplLCBidWNrZXRfc2l6ZSwgbWFwX2lkO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzI0NT1zdGF0aWMgaW50IF9fcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMjUyLVxcdHZvaWQgX191c2VyICp1a2V5cyA9IHU2NF90b191c2VyX3B0cihhdHRyLVxcdTAwM2ViYXRjaC5rZXlzKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMjUzOlxcdHZvaWQgX191c2VyICp1YmF0Y2ggPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cXHUwMDNlYmF0Y2guaW5fYmF0Y2gpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyNTQtXFx0dm9pZCAqY3Vyc29yID0gTlVMTCwgKmtleXMgPSBOVUxMLCAqdmFsdWVzID0gTlVMTCwgKmRzdF9rZXksICpkc3RfdmFsO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjEyMD1pbnQgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMTI0LVxcdHZvaWQgX191c2VyICp1b2JhdGNoID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXFx1MDAzZWJhdGNoLm91dF9iYXRjaCk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MjEyNTpcXHR2b2lkIF9fdXNlciAqdWJhdGNoID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXFx1MDAzZWJhdGNoLmluX2JhdGNoKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMTI2LVxcdHZvaWQgX191c2VyICp2YWx1ZXMgPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cXHUwMDNlYmF0Y2gudmFsdWVzKTtcXG4tLVxcbm1tL21lbW9yeS5jPTIzOTI9c3RhdGljIGludCBpbnNlcnRfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vbWVtb3J5LmMtMjQxMi1cXG5tbS9tZW1vcnkuYzoyNDEzOnN0YXRpYyBpbnQgaW5zZXJ0X3BhZ2VfaW5fYmF0Y2hfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwdGVfdCAqcHRlLFxcbm1tL21lbW9yeS5jLTI0MTQtXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgcGdwcm90X3QgcHJvdClcXG4tLVxcbm1tL21lbW9yeS5jPTI0Mjc9c3RhdGljIGludCBpbnNlcnRfcGFnZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL21lbW9yeS5jLTI0NjEtXFx0XFx0Zm9yIChwdGUgPSBzdGFydF9wdGU7IHB0ZV9pZHggXFx1MDAzYyBiYXRjaF9zaXplOyArK3B0ZSwgKytwdGVfaWR4KSB7XFxubW0vbWVtb3J5LmM6MjQ2MjpcXHRcXHRcXHRpbnQgZXJyID0gaW5zZXJ0X3BhZ2VfaW5fYmF0Y2hfbG9ja2VkKHZtYSwgcHRlLFxcbm1tL21lbW9yeS5jLTI0NjMtXFx0XFx0XFx0XFx0YWRkciwgcGFnZXNbY3Vycl9wYWdlX2lkeF0sIHByb3QpO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTI1NjQ9Ym9vbCBkZWNheV9wY3BfaGlnaChzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBlcl9jcHVfcGFnZXMgKnBjcClcXG5tbS9wYWdlX2FsbG9jLmMtMjU2NS17XFxubW0vcGFnZV9hbGxvYy5jOjI1NjY6XFx0aW50IGhpZ2hfbWluLCB0b19kcmFpbiwgdG9fZHJhaW5fYmF0Y2hlZCwgYmF0Y2g7XFxubW0vcGFnZV9hbGxvYy5jLTI1NjctXFx0Ym9vbCB0b2RvID0gZmFsc2U7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtMjU4NC1cXHR3aGlsZSAodG9fZHJhaW4gXFx1MDAzZSAwKSB7XFxubW0vcGFnZV9hbGxvYy5jOjI1ODU6XFx0XFx0dG9fZHJhaW5fYmF0Y2hlZCA9IG1pbih0b19kcmFpbiwgYmF0Y2gpO1xcbm1tL3BhZ2VfYWxsb2MuYy0yNTg2LVxcdFxcdHBjcF9zcGluX2xvY2tfbm9waW4ocGNwKTtcXG5tbS9wYWdlX2FsbG9jLmM6MjU4NzpcXHRcXHRmcmVlX3BjcHBhZ2VzX2J1bGsoem9uZSwgdG9fZHJhaW5fYmF0Y2hlZCwgcGNwLCAwKTtcXG5tbS9wYWdlX2FsbG9jLmMtMjU4OC1cXHRcXHRwY3Bfc3Bpbl91bmxvY2tfbm9waW4ocGNwKTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy0yNTkwLVxcbm1tL3BhZ2VfYWxsb2MuYzoyNTkxOlxcdFxcdHRvX2RyYWluIC09IHRvX2RyYWluX2JhdGNoZWQ7XFxubW0vcGFnZV9hbGxvYy5jLTI1OTItXFx0fVxcbi0tXFxubW0vc2x1Yi5jPTI4NTE9c3RhdGljIHZvaWQgX19rbWVtX2NhY2hlX2ZyZWVfYnVsayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc2l6ZV90IHNpemUsIHZvaWQgKipwKTtcXG4tLVxcbm1tL3NsdWIuYy0yODYzLSAqL1xcbm1tL3NsdWIuYzoyODY0OnN0YXRpYyB1bnNpZ25lZCBpbnQgX19zaGVhZl9mbHVzaF9tYWluX2JhdGNoKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbm1tL3NsdWIuYy0yODY1LXtcXG4tLVxcbm1tL3NsdWIuYz0yODkyPXN0YXRpYyB2b2lkIHNoZWFmX2ZsdXNoX21haW4oc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuLS1cXG5tbS9zbHViLmMtMjg5OC1cXG5tbS9zbHViLmM6Mjg5OTpcXHRcXHRyZW1haW5pbmcgPSBfX3NoZWFmX2ZsdXNoX21haW5fYmF0Y2gocyk7XFxubW0vc2x1Yi5jLTI5MDAtXFxuLS1cXG5tbS9zbHViLmM9MjkwNz1zdGF0aWMgYm9vbCBzaGVhZl90cnlfZmx1c2hfbWFpbihzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG4tLVxcbm1tL3NsdWIuYy0yOTE2LVxcdFxcdHJldCA9IHRydWU7XFxubW0vc2x1Yi5jOjI5MTc6XFx0XFx0cmVtYWluaW5nID0gX19zaGVhZl9mbHVzaF9tYWluX2JhdGNoKHMpO1xcbm1tL3NsdWIuYy0yOTE4LVxcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTEzMj11bmlvbiBicGZfaXRlcl9saW5rX2luZm8ge1xcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTY0OS0gKlxcdFxcdFR3byBvcGFxdWUgdmFsdWVzIGFyZSB1c2VkIHRvIG1hbmFnZSBiYXRjaCBvcGVyYXRpb25zLFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDo2NTA6ICpcXHRcXHQqaW5fYmF0Y2gqIGFuZCAqb3V0X2JhdGNoKi4gSW5pdGlhbGx5LCAqaW5fYmF0Y2gqIG11c3QgYmUgc2V0XFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTY1MS0gKlxcdFxcdHRvIE5VTEwgdG8gYmVnaW4gdGhlIGJhdGNoZWQgb3BlcmF0aW9uLiBBZnRlciBlYWNoIHN1YnNlcXVlbnRcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtNjUyLSAqXFx0XFx0KipCUEZfTUFQX0xPT0tVUF9CQVRDSCoqLCB0aGUgY2FsbGVyIHNob3VsZCBwYXNzIHRoZSByZXN1bHRhbnRcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NjUzOiAqXFx0XFx0Km91dF9iYXRjaCogYXMgdGhlICppbl9iYXRjaCogZm9yIHRoZSBuZXh0IG9wZXJhdGlvbiB0b1xcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDo2NTQ6ICpcXHRcXHRjb250aW51ZSBpdGVyYXRpb24gZnJvbSB0aGUgY3VycmVudCBwb2ludC4gQm90aCAqaW5fYmF0Y2gqIGFuZFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC02NTUtICpcXHRcXHQqb3V0X2JhdGNoKiBtdXN0IHBvaW50IHRvIG1lbW9yeSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBhIGtleSxcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC03MTctICpcXHRcXHRFYWNoIGVsZW1lbnQgc3BlY2lmaWVkIGluICprZXlzKiBpcyBzZXF1ZW50aWFsbHkgdXBkYXRlZCB0byB0aGVcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NzE4OiAqXFx0XFx0dmFsdWUgaW4gdGhlIGNvcnJlc3BvbmRpbmcgaW5kZXggaW4gKnZhbHVlcyouIFRoZSAqaW5fYmF0Y2gqXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTcxOS0gKlxcdFxcdGFuZCAqb3V0X2JhdGNoKiBwYXJhbWV0ZXJzIGFyZSBpZ25vcmVkIGFuZCBzaG91bGQgYmUgemVyb2VkLlxcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTc2Ni0gKlxcdFxcdEVhY2ggZWxlbWVudCBzcGVjaWZpZWQgaW4gKmtleXMqIGlzIHNlcXVlbnRpYWxseSBkZWxldGVkLiBUaGVcXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6NzY3OiAqXFx0XFx0KmluX2JhdGNoKiwgKm91dF9iYXRjaCosIGFuZCAqdmFsdWVzKiBwYXJhbWV0ZXJzIGFyZSBpZ25vcmVkXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTc2OC0gKlxcdFxcdGFuZCBzaG91bGQgYmUgemVyb2VkLlxcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTE1Mjc9dW5pb24gYnBmX2F0dHIge1xcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTE1OTEtXFx0c3RydWN0IHsgLyogc3RydWN0IHVzZWQgYnkgQlBGX01BUF8qX0JBVENIIGNvbW1hbmRzICovXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oOjE1OTI6XFx0XFx0X19hbGlnbmVkX3U2NFxcdGluX2JhdGNoO1xcdC8qIHN0YXJ0IGJhdGNoLFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xNTkzLVxcdFxcdFxcdFxcdFxcdFxcdCAqIE5VTEwgdG8gc3RhcnQgZnJvbSBiZWdpbm5pbmdcXG4tLVxcbnRvb2xzL2xpYi9icGYvYnBmLmM9NTY4PWludCBicGZfbWFwX2ZyZWV6ZShpbnQgZmQpXFxuLS1cXG50b29scy9saWIvYnBmL2JwZi5jLTU4MC1cXG50b29scy9saWIvYnBmL2JwZi5jOjU4MTpzdGF0aWMgaW50IGJwZl9tYXBfYmF0Y2hfY29tbW9uKGludCBjbWQsIGludCBmZCwgdm9pZCAgKmluX2JhdGNoLFxcbnRvb2xzL2xpYi9icGYvYnBmLmMtNTgyLVxcdFxcdFxcdFxcdHZvaWQgKm91dF9iYXRjaCwgdm9pZCAqa2V5cywgdm9pZCAqdmFsdWVzLFxcbi0tXFxudG9vbHMvbGliL2JwZi9icGYuYy01OTQtXFx0YXR0ci5iYXRjaC5tYXBfZmQgPSBmZDtcXG50b29scy9saWIvYnBmL2JwZi5jOjU5NTpcXHRhdHRyLmJhdGNoLmluX2JhdGNoID0gcHRyX3RvX3U2NChpbl9iYXRjaCk7XFxudG9vbHMvbGliL2JwZi9icGYuYy01OTYtXFx0YXR0ci5iYXRjaC5vdXRfYmF0Y2ggPSBwdHJfdG9fdTY0KG91dF9iYXRjaCk7XFxuLS1cXG50b29scy9saWIvYnBmL2JwZi5jPTYwOT1pbnQgYnBmX21hcF9kZWxldGVfYmF0Y2goaW50IGZkLCBjb25zdCB2b2lkICprZXlzLCBfX3UzMiAqY291bnQsXFxuLS1cXG50b29scy9saWIvYnBmL2JwZi5jLTYxNS1cXG50b29scy9saWIvYnBmL2JwZi5jOjYxNjppbnQgYnBmX21hcF9sb29rdXBfYmF0Y2goaW50IGZkLCB2b2lkICppbl9iYXRjaCwgdm9pZCAqb3V0X2JhdGNoLCB2b2lkICprZXlzLFxcbnRvb2xzL2xpYi9icGYvYnBmLmMtNjE3LVxcdFxcdFxcdCB2b2lkICp2YWx1ZXMsIF9fdTMyICpjb3VudCxcXG4tLVxcbnRvb2xzL2xpYi9icGYvYnBmLmMtNjE5LXtcXG50b29scy9saWIvYnBmL2JwZi5jOjYyMDpcXHRyZXR1cm4gYnBmX21hcF9iYXRjaF9jb21tb24oQlBGX01BUF9MT09LVVBfQkFUQ0gsIGZkLCBpbl9iYXRjaCxcXG50b29scy9saWIvYnBmL2JwZi5jLTYyMS1cXHRcXHRcXHRcXHQgICAgb3V0X2JhdGNoLCBrZXlzLCB2YWx1ZXMsIGNvdW50LCBvcHRzKTtcXG4tLVxcbnRvb2xzL2xpYi9icGYvYnBmLmMtNjIzLVxcbnRvb2xzL2xpYi9icGYvYnBmLmM6NjI0OmludCBicGZfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKGludCBmZCwgdm9pZCAqaW5fYmF0Y2gsIHZvaWQgKm91dF9iYXRjaCxcXG50b29scy9saWIvYnBmL2JwZi5jLTYyNS1cXHRcXHRcXHRcXHQgICAgdm9pZCAqa2V5cywgdm9pZCAqdmFsdWVzLCBfX3UzMiAqY291bnQsXFxuLS1cXG50b29scy9saWIvYnBmL2JwZi5jLTYyOC1cXHRyZXR1cm4gYnBmX21hcF9iYXRjaF9jb21tb24oQlBGX01BUF9MT09LVVBfQU5EX0RFTEVURV9CQVRDSCxcXG50b29scy9saWIvYnBmL2JwZi5jOjYyOTpcXHRcXHRcXHRcXHQgICAgZmQsIGluX2JhdGNoLCBvdXRfYmF0Y2gsIGtleXMsIHZhbHVlcyxcXG50b29scy9saWIvYnBmL2JwZi5jLTYzMC1cXHRcXHRcXHRcXHQgICAgY291bnQsIG9wdHMpO1xcbi0tXFxudG9vbHMvbGliL2JwZi9icGYuaD0yMDc9TElCQlBGX0FQSSBpbnQgYnBmX21hcF9kZWxldGVfYmF0Y2goaW50IGZkLCBjb25zdCB2b2lkICprZXlzLFxcbi0tXFxudG9vbHMvbGliL2JwZi9icGYuaC0yMTMtICpcXG50b29scy9saWIvYnBmL2JwZi5oOjIxNDogKiBUaGUgcGFyYW1ldGVyICppbl9iYXRjaCogaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIGJhdGNoIHRvXFxudG9vbHMvbGliL2JwZi9icGYuaDoyMTU6ICogcmVhZC4gKm91dF9iYXRjaCogaXMgYW4gb3V0cHV0IHBhcmFtZXRlciB0aGF0IHNob3VsZCBiZSBwYXNzZWQgYXMgKmluX2JhdGNoKlxcbnRvb2xzL2xpYi9icGYvYnBmLmgtMjE2LSAqIHRvIHN1YnNlcXVlbnQgY2FsbHMgdG8gKipicGZfbWFwX2xvb2t1cF9iYXRjaCgpKiouIE5VTEwgY2FuIGJlIHBhc3NlZCBmb3JcXG50b29scy9saWIvYnBmL2JwZi5oOjIxNzogKiAqaW5fYmF0Y2gqIHRvIGluZGljYXRlIHRoYXQgdGhlIGJhdGNoZWQgbG9va3VwIHN0YXJ0cyBmcm9tIHRoZSBiZWdpbm5pbmcgb2ZcXG50b29scy9saWIvYnBmL2JwZi5oOjIxODogKiB0aGUgbWFwLiBCb3RoICppbl9iYXRjaCogYW5kICpvdXRfYmF0Y2gqIG11c3QgcG9pbnQgdG8gbWVtb3J5IGxhcmdlIGVub3VnaCB0b1xcbnRvb2xzL2xpYi9icGYvYnBmLmgtMjE5LSAqIGhvbGQgYSBzaW5nbGUga2V5LCBleGNlcHQgZm9yIG1hcHMgb2YgdHlwZSAqKkJQRl9NQVBfVFlQRV97SEFTSCwgUEVSQ1BVX0hBU0gsXFxuLS1cXG50b29scy9saWIvYnBmL2JwZi5oLTIyOC0gKiBAcGFyYW0gZmQgQlBGIG1hcCBmaWxlIGRlc2NyaXB0b3JcXG50b29scy9saWIvYnBmL2JwZi5oOjIyOTogKiBAcGFyYW0gaW5fYmF0Y2ggYWRkcmVzcyBvZiB0aGUgZmlyc3QgZWxlbWVudCBpbiBiYXRjaCB0byByZWFkLCBjYW4gcGFzcyBOVUxMIHRvXFxudG9vbHMvbGliL2JwZi9icGYuaC0yMzAtICogaW5kaWNhdGUgdGhhdCB0aGUgYmF0Y2hlZCBsb29rdXAgc3RhcnRzIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgbWFwLlxcbnRvb2xzL2xpYi9icGYvYnBmLmg6MjMxOiAqIEBwYXJhbSBvdXRfYmF0Y2ggb3V0cHV0IHBhcmFtZXRlciB0aGF0IHNob3VsZCBiZSBwYXNzZWQgdG8gbmV4dCBjYWxsIGFzICppbl9iYXRjaCpcXG50b29scy9saWIvYnBmL2JwZi5oLTIzMi0gKiBAcGFyYW0ga2V5cyBwb2ludGVyIHRvIGFuIGFycmF5IGxhcmdlIGVub3VnaCBmb3IgKmNvdW50KiBrZXlzXFxuLS1cXG50b29scy9saWIvYnBmL2JwZi5oLTI0My0gKi9cXG50b29scy9saWIvYnBmL2JwZi5oOjI0NDpMSUJCUEZfQVBJIGludCBicGZfbWFwX2xvb2t1cF9iYXRjaChpbnQgZmQsIHZvaWQgKmluX2JhdGNoLCB2b2lkICpvdXRfYmF0Y2gsXFxudG9vbHMvbGliL2JwZi9icGYuaC0yNDUtXFx0XFx0XFx0XFx0ICAgIHZvaWQgKmtleXMsIHZvaWQgKnZhbHVlcywgX191MzIgKmNvdW50LFxcbi0tXFxudG9vbHMvbGliL2JwZi9icGYuaC0yNTItICogQHBhcmFtIGZkIEJQRiBtYXAgZmlsZSBkZXNjcmlwdG9yXFxudG9vbHMvbGliL2JwZi9icGYuaDoyNTM6ICogQHBhcmFtIGluX2JhdGNoIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IGVsZW1lbnQgaW4gYmF0Y2ggdG8gcmVhZCwgY2FuIHBhc3MgTlVMTCB0b1xcbnRvb2xzL2xpYi9icGYvYnBmLmgtMjU0LSAqIGdldCBhZGRyZXNzIG9mIHRoZSBmaXJzdCBlbGVtZW50IGluICpvdXRfYmF0Y2gqLiBJZiBub3QgTlVMTCwgbXVzdCBiZSBsYXJnZVxcbi0tXFxudG9vbHMvbGliL2JwZi9icGYuaC0yNTctICogb2Yga2V5IHNpemUuXFxudG9vbHMvbGliL2JwZi9icGYuaDoyNTg6ICogQHBhcmFtIG91dF9iYXRjaCBvdXRwdXQgcGFyYW1ldGVyIHRoYXQgc2hvdWxkIGJlIHBhc3NlZCB0byBuZXh0IGNhbGwgYXMgKmluX2JhdGNoKlxcbnRvb2xzL2xpYi9icGYvYnBmLmgtMjU5LSAqIEBwYXJhbSBrZXlzIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgKmNvdW50KiBrZXlzXFxuLS1cXG50b29scy9saWIvYnBmL2JwZi5oLTI3Mi0gKi9cXG50b29scy9saWIvYnBmL2JwZi5oOjI3MzpMSUJCUEZfQVBJIGludCBicGZfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKGludCBmZCwgdm9pZCAqaW5fYmF0Y2gsXFxudG9vbHMvbGliL2JwZi9icGYuaC0yNzQtXFx0XFx0XFx0XFx0XFx0dm9pZCAqb3V0X2JhdGNoLCB2b2lkICprZXlzLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL21hcF90ZXN0cy9tYXBfcGVyY3B1X3N0YXRzLmM9NjM9c3RhdGljIHZvaWQgZGVsZXRlX2FuZF9sb29rdXBfYmF0Y2goaW50IG1hcF9mZCwgdm9pZCAqa2V5cywgX191MzIgY291bnQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbWFwX3Rlc3RzL21hcF9wZXJjcHVfc3RhdHMuYy02NS1cXHRzdGF0aWMgX191OCB2YWx1ZXNbKDggXFx1MDAzY1xcdTAwM2MgMTApICogTUFYX0VOVFJJRVNdO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9tYXBfdGVzdHMvbWFwX3BlcmNwdV9zdGF0cy5jOjY2OlxcdHZvaWQgKmluX2JhdGNoID0gTlVMTCwgKm91dF9iYXRjaDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbWFwX3Rlc3RzL21hcF9wZXJjcHVfc3RhdHMuYy02Ny1cXHRfX3UzMiBzYXZlX2NvdW50ID0gY291bnQ7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbWFwX3Rlc3RzL21hcF9wZXJjcHVfc3RhdHMuYy03MC1cXHRyZXQgPSBicGZfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcF9mZCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvbWFwX3Rlc3RzL21hcF9wZXJjcHVfc3RhdHMuYzo3MTpcXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2aW5fYmF0Y2gsIFxcdTAwMjZvdXRfYmF0Y2gsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL21hcF90ZXN0cy9tYXBfcGVyY3B1X3N0YXRzLmMtNzItXFx0XFx0XFx0XFx0XFx0ICAgICAga2V5cywgdmFsdWVzLCBcXHUwMDI2Y291bnQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA3OjQ1OjMzLjcxMzE5NzgyMloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzU0OTk5NjY0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEJ1Z3MgaW4gVmhvc3QtVkRQQSBJT1RMQiBCYXRjaGluZyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGB2aG9zdF92ZHBhYCBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIElPVExCIGJhdGNoaW5nIGxvZ2ljLiBJdCBsb29rcyBsaWtlIGB2LVx1MDAzZWluX2JhdGNoYCBpcyB0aGUga2V5IGZsYWcgaGVyZSwgdXNlZCBpbiBgdmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZ2AsIGB2aG9zdF92ZHBhX21hcGAsIGFuZCBgdmhvc3RfdmRwYV91bm1hcGAuIEkgc2VlIHRoYXQgaWYgYHYtXHUwMDNlaW5fYmF0Y2hgIGlzIHRydWUgaW4gYHZob3N0X3ZkcGFfbWFwYCwgaXQgc2tpcHMgY2FsbGluZyBgb3BzLVx1MDAzZXNldF9tYXBgIGZvciBpbmRpdmlkdWFsIG1hcC91bm1hcCBvcGVyYXRpb25zLCBkZWZlcnJpbmcgdGhlbSB1bnRpbCBhIGBWSE9TVF9JT1RMQl9CQVRDSF9FTkRgIG1lc3NhZ2UuIEF0IHRoYXQgcG9pbnQsIGBvcHMtXHUwMDNlc2V0X21hcGAgaXMgc3VwcG9zZWQgdG8gYmUgY2FsbGVkIG9uY2UgZm9yIHRoZSBlbnRpcmUgYmF0Y2guXG5cblRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIGNydWNpYWwgaXNzdWU6IGl0IGNvbXBsZXRlbHkgaWdub3JlZCB0aGUgcmV0dXJuIHZhbHVlIG9mIGBvcHMtXHUwMDNlc2V0X21hcGAuICBJZiBgb3BzLVx1MDAzZXNldF9tYXBgIGZhaWxlZCwgdGhlIGVycm9yIHdhc24ndCBoYW5kbGVkLiAgVGhlIHJlY2VudCBwYXRjaCBhdHRlbXB0ZWQgdG8gZml4IHRoaXMgYnkgY2hlY2tpbmcgdGhlIHJldHVybiB2YWx1ZS4gSG93ZXZlciwgYWZ0ZXIgY2FyZWZ1bGx5IGxvb2tpbmcgYXQgdGhlIHBhdGNoLCBJIHRoaW5rIHRoZSBmaXggbWlnaHQgaGF2ZSBpbnRyb2R1Y2VkIGEgbmV3IGJ1ZyFcblxuSW4gdGhlIHBhdGNoZWQgY29kZSwgdGhleSd2ZSBhZGRlZCB0aGlzOlxuXG5gYGBjXG5cdFx0aWYgKHYtXHUwMDNlaW5fYmF0Y2ggXHUwMDI2XHUwMDI2IG9wcy1cdTAwM2VzZXRfbWFwKSB7XG5cdFx0XHRyID0gb3BzLVx1MDAzZXNldF9tYXAodmRwYSwgYXNpZCwgaW90bGIpO1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuYGBgXG5cblRoZSBwcm9ibGVtIGlzIHRoZSBgYnJlYWtgIHN0YXRlbWVudCBpbnNpZGUgdGhlIGBpZmAgYmxvY2suICBJZiBgb3BzLVx1MDAzZXNldF9tYXBgIHJldHVybnMgc3VjY2Vzc2Z1bGx5LCB0aGUgYGJyZWFrYCBpcyBleGVjdXRlZC4gIE1vcmUgaW1wb3J0YW50bHksIGV2ZW4gaWYgYG9wcy1cdTAwM2VzZXRfbWFwYCByZXR1cm5zIGFuIGVycm9yIChhIG5vbi16ZXJvIHZhbHVlKSwgdGhlIGBicmVha2AgaXMgc3RpbGwgZXhlY3V0ZWQuIFRoaXMgY2F1c2VzIHRoZSBsb29wIHRvIGV4aXQgKndpdGhvdXQqIHJlc2V0dGluZyBgdi1cdTAwM2Vpbl9iYXRjaGAgdG8gYGZhbHNlYCEgIFxuXG5UaGlzIG1lYW5zIHRoYXQgYHYtXHUwMDNlaW5fYmF0Y2hgIGlzIGxlZnQgYXMgYHRydWVgIHJlZ2FyZGxlc3Mgb2YgdGhlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiBgb3BzLVx1MDAzZXNldF9tYXBgLiBTdWJzZXF1ZW50IG1hcC91bm1hcCBvcGVyYXRpb25zIHdpbGwgaW5jb3JyZWN0bHkgYXNzdW1lIHRoZXkncmUgc3RpbGwgaW4gYSBiYXRjaCBhbmQgd2lsbCAqbm90KiBjYWxsIGBvcHMtXHUwMDNlc2V0X21hcGAuIEVzc2VudGlhbGx5LCBhbGwgZnV0dXJlIG1hcC91bm1hcCBvcGVyYXRpb25zIHdpbGwgYmUgYmF0Y2hlZCBpbmRlZmluaXRlbHkuIFxuXG5JJ3ZlIGNoZWNrZWQgd2hlcmUgYHYtXHUwMDNlaW5fYmF0Y2hgIGlzIHNldCB0byBgZmFsc2VgLCBhbmQgaXQncyBvbmx5IGRvbmUgaW4gYHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl9tc2dgIGFuZCBgdmhvc3RfdmRwYV9yZXNldGAuICBTbywgaWYgdGhpcyBjb2RlIHBhdGggaXMgaGl0LCBgdi1cdTAwM2Vpbl9iYXRjaGAgcmVtYWlucyB0cnVlIHVudGlsIGEgcmVzZXQuXG5cbkhvd2V2ZXIsIHRoZXJlIGlzIGFuIGltcG9ydGFudCBjaGVjazogYGlmICh2LVx1MDAzZWluX2JhdGNoIFx1MDAyNlx1MDAyNiB2LVx1MDAzZWJhdGNoX2FzaWQgIT0gYXNpZClgLiBTbyBpdCBzZWVtcyBiYXRjaGVkIG9wZXJhdGlvbnMgYXJlIGFsbG93ZWQgb25seSBpZiB0aGUgYXNpZCBpcyB0aGUgc2FtZS5cblxuVGhlcmVmb3JlLCB0aGUgcGF0Y2ggYXV0aG9yICpwcm9iYWJseSogaW50ZW5kZWQgdG8gZG8gdGhpcyAod2hlcmUgYHYtXHUwMDNlaW5fYmF0Y2hgIGlzIGNvcnJlY3RseSByZXNldCk6XG5cbmBgYGNcblx0XHRpZiAodi1cdTAwM2Vpbl9iYXRjaCBcdTAwMjZcdTAwMjYgb3BzLVx1MDAzZXNldF9tYXApXG5cdFx0XHRyID0gb3BzLVx1MDAzZXNldF9tYXAodmRwYSwgYXNpZCwgaW90bGIpO1xuXHRcdHYtXHUwMDNlaW5fYmF0Y2ggPSBmYWxzZTtcblx0XHRicmVhaztcbmBgYFxuXG5CdXQgdGhleSBhY2NpZGVudGFsbHkgd3JvdGUgdGhlIGNvZGUgYXMgYWJvdmUuIFNvLCBpdCdzIGRlZmluaXRlbHkgYSBidWcgYW5kIGl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29kZS4gSXQgc2hvdWxkIGJlIGZ1enotdGVzdGVkIHRvIHZlcmlmeSB0aGlzLlxuXG5UbyB0ZXN0IHRoaXMgZWZmZWN0aXZlbHksIEknbGwgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGJ1aWxkIGhhcyBgVkhPU1RfVkRQQWAsIGBWRFBBYCwgYW5kIHBvc3NpYmx5IGBWRFBBX1NJTWAgYW5kIGBWRFBBX1NJTV9ORVRgIGVuYWJsZWQsIGFjY29yZGluZyB0byBgZHJpdmVycy92ZHBhL3ZkcGFfc2ltL0tjb25maWdgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTgxMiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDc6NDU6NDcuMjYzMTk2NTc4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTAxNTQ0NTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWRFBBX1NJTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZkcGEvS2NvbmZpZz0xMD1pZiBWRFBBXFxuZHJpdmVycy92ZHBhL0tjb25maWctMTEtXFxuZHJpdmVycy92ZHBhL0tjb25maWc6MTI6Y29uZmlnIFZEUEFfU0lNXFxuZHJpdmVycy92ZHBhL0tjb25maWctMTMtXFx0dHJpc3RhdGUgXFxcInZEUEEgZGV2aWNlIHNpbXVsYXRvciBjb3JlXFxcIlxcbi0tXFxuZHJpdmVycy92ZHBhL0tjb25maWctMjAtXFxuZHJpdmVycy92ZHBhL0tjb25maWc6MjE6Y29uZmlnIFZEUEFfU0lNX05FVFxcbmRyaXZlcnMvdmRwYS9LY29uZmlnLTIyLVxcdHRyaXN0YXRlIFxcXCJ2RFBBIHNpbXVsYXRvciBmb3IgbmV0d29ya2luZyBkZXZpY2VcXFwiXFxuLS1cXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0yNy1cXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZzoyODpjb25maWcgVkRQQV9TSU1fQkxPQ0tcXG5kcml2ZXJzL3ZkcGEvS2NvbmZpZy0yOS1cXHR0cmlzdGF0ZSBcXFwidkRQQSBzaW11bGF0b3IgZm9yIGJsb2NrIGRldmljZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDc6NDU6NDkuMTY0NzQ2NTA1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MDUxNjM4ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBDaGVja2xpc3QqKlxuXG5Pa2F5LCBsZXQgbWUgbGF5IHRoaXMgb3V0IGluIGEgbG9naWNhbCBtYW5uZXIgZm9yIG15IG93biBzYW5pdHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBpbmNsdWRlIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gc3ltYm9scyBmb3IgdGhlIHZpcnR1YWwgRGF0YSBQbGFuZSBBY2NlbGVyYXRpb24gKHZEUEEpIHNldHVwIEknbSB3b3JraW5nIG9uLiBTcGVjaWZpY2FsbHksIEknbGwgbmVlZCB0byBpbmNsdWRlIGBWSE9TVF9WRFBBYCwgYFZEUEFgLCBgVkRQQV9TSU1gLCBgVkRQQV9TSU1fTkVUYCwgYW5kIGBWRFBBX1NJTV9CTE9DS2AuXG5cbkhhbmcgb24sIGRvIEkgYWN0dWFsbHkgbmVlZCBgVkhPU1RgIGRpcmVjdGx5PyBBaCwgcmlnaHQuIGBWSE9TVF9WRFBBYCBhdXRvbWF0aWNhbGx5IHNlbGVjdHMgYFZIT1NUYCwgc28gSSBjYW4gc3RyZWFtbGluZSB0aGF0IGEgYml0LiBTbyByZWFsbHksIGBWSE9TVF9WRFBBYCBzaG91bGQgYmUgdGhlIGtleSB0byBnZXR0aW5nIGBWSE9TVGAgZW5hYmxlZCBjb3JyZWN0bHksIHNpbXBsaWZ5aW5nIHRoZSBkZXBlbmRlbmNpZXMuXG5cbk5vdywgbGV0J3MganVzdCBkbyBhIHF1aWNrIHNjYW4gdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnkgY3JpdGljYWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIHRoaW5rIGBDT05GSUdfVkhPU1RfVkRQQWAgaXMgdGhlIG1haW4gb25lIEkgbmVlZCB0byBmb2N1cyBvbiBhdCB0aGUgdG9wIGxldmVsLlxuXG5OZXh0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29yZSBmdW5jdGlvbnMuIE15IGZvY3VzIG5vdyBpcyBvbiB0aGVzZSBzeW1ib2xzIHJlbGF0ZWQgdG8gdGhlIEkvTyB0cmFuc2xhdGlvbiBsb29rYXNpZGUgYnVmZmVyIChJT1RMQikgYW5kIG1hcHBpbmc6IGB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnYCwgYHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl91cGRhdGVgLCBgdmhvc3RfdmRwYV9tYXBgLCBhbmQgYHZob3N0X3ZkcGFfdW5tYXBgLiBUaGVzZSBzZWVtIGNlbnRyYWwgdG8gdGhlIGFjdHVhbCBkYXRhIHBhdGggaGFuZGxpbmcuXG5cbkFuZCBmaW5hbGx5LCBiZWZvcmUgSSBtb3ZlIG9uLCBJJ2xsIGRvdWJsZS1jaGVjayBgdmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZ2AgYW5kIGdpdmUgaXQgYSBxdWljayByZXZpZXcgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIG1ha2Ugc3VyZSBJIGtub3cgaG93IGl0J3MgaW1wbGVtZW50ZWQuIEknbGwgZmluZCBpdCBpbiBgZHJpdmVycy92aG9zdC92ZHBhLmNgLCBJIGJlbGlldmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzOTE0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA3OjQ1OjU0LjU2OTkxMzAyMloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92aG9zdC92ZHBhLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI4MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI4MDpcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4xMjgxOlxcdFxcdH1cXG4xMjgyOlxcdFxcbjEyODM6XFx0XFx0c3dpdGNoIChtc2ctXFx1MDAzZXR5cGUpIHtcXG4xMjg0OlxcdFxcdGNhc2UgVkhPU1RfSU9UTEJfVVBEQVRFOlxcbjEyODU6XFx0XFx0XFx0ciA9IHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl91cGRhdGUodiwgaW90bGIsIG1zZyk7XFxuMTI4NjpcXHRcXHRcXHRicmVhaztcXG4xMjg3OlxcdFxcdGNhc2UgVkhPU1RfSU9UTEJfSU5WQUxJREFURTpcXG4xMjg4OlxcdFxcdFxcdHZob3N0X3ZkcGFfdW5tYXAodiwgaW90bGIsIG1zZy1cXHUwMDNlaW92YSwgbXNnLVxcdTAwM2VzaXplKTtcXG4xMjg5OlxcdFxcdFxcdGJyZWFrO1xcbjEyOTA6XFx0XFx0Y2FzZSBWSE9TVF9JT1RMQl9CQVRDSF9CRUdJTjpcXG4xMjkxOlxcdFxcdFxcdHYtXFx1MDAzZWJhdGNoX2FzaWQgPSBhc2lkO1xcbjEyOTI6XFx0XFx0XFx0di1cXHUwMDNlaW5fYmF0Y2ggPSB0cnVlO1xcbjEyOTM6XFx0XFx0XFx0YnJlYWs7XFxuMTI5NDpcXHRcXHRjYXNlIFZIT1NUX0lPVExCX0JBVENIX0VORDpcXG4xMjk1OlxcdFxcdFxcdGlmICh2LVxcdTAwM2Vpbl9iYXRjaCBcXHUwMDI2XFx1MDAyNiBvcHMtXFx1MDAzZXNldF9tYXApIHtcXG4xMjk2OlxcdFxcdFxcdFxcdHIgPSBvcHMtXFx1MDAzZXNldF9tYXAodmRwYSwgYXNpZCwgaW90bGIpO1xcbjEyOTc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTI5ODpcXHRcXHRcXHR9XFxuMTI5OTpcXHRcXHRcXHR2LVxcdTAwM2Vpbl9iYXRjaCA9IGZhbHNlO1xcbjEzMDA6XFx0XFx0XFx0YnJlYWs7XFxuMTMwMTpcXHRcXHRkZWZhdWx0OlxcbjEzMDI6XFx0XFx0XFx0ciA9IC1FSU5WQUw7XFxuMTMwMzpcXHRcXHRcXHRicmVhaztcXG4xMzA0OlxcdFxcdH1cXG4xMzA1OlxcdHVubG9jazpcXG4xMzA2OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGV2LVxcdTAwM2VtdXRleCk7XFxuMTMwNzpcXHRcXG4xMzA4OlxcdFxcdHJldHVybiByO1xcbjEzMDk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwNzo0NTo1NC41NzAwMjY5NDJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njk5MzcxNTg1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHZob3N0X3ZkcGEgSU9UTEIgQmF0Y2ggSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIFRoZSBrZXkgZnVuY3Rpb24gaGVyZSBpcyBkZWZpbml0ZWx5IGB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnYCwgYW5kIHllcywgaXQncyByZWFjaGFibGUgYW5kIHdvcmtpbmcgYXMgZXhwZWN0ZWQuIFRoZSBjcnV4IG9mIHRoZSBpc3N1ZSBpcyB0aGlzOiBgdi1cdTAwM2Vpbl9iYXRjaGAgaXNuJ3QgYmVpbmcgcmVzZXQgdG8gYGZhbHNlYCB3aGVuIGBvcHMtXHUwMDNlc2V0X21hcGAgaXMgZXhlY3V0ZWQgd2l0aGluIHRoZSBgVkhPU1RfSU9UTEJfQkFUQ0hfRU5EYCBoYW5kbGluZy5cblxuVGhpbmsgYWJvdXQgaXQgLSBpZiBgb3BzLVx1MDAzZXNldF9tYXBgIGlzIGNhbGxlZCBhbmQgd2UgZXhpdCB0aGUgc3dpdGNoIHN0YXRlbWVudCB3aXRob3V0IHJlc2V0dGluZyB0aGF0IGZsYWcsIHN1YnNlcXVlbnQgYFZIT1NUX0lPVExCX1VQREFURWAgbWVzc2FnZXMgd2lsbCBiZSBpbmNvcnJlY3RseSB0cmVhdGVkIGFzIHBhcnQgb2YgdGhlICpzYW1lKiBiYXRjaC4gTWVhbmluZyBgb3BzLVx1MDAzZXNldF9tYXBgIHdvbid0IGJlIGNhbGxlZCBpbmRpdmlkdWFsbHkgZm9yIHRob3NlIHVwZGF0ZXMuIFRoYXQncyBhIHNlcmlvdXMgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0IGJyZWFrcyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3Igb2YgaG93IHRoZXNlIElPVExCIGJhdGNoZXMgc2hvdWxkIGJlIHByb2Nlc3NlZC4gV2Ugd2lsbCBjYWxsIHRoZSByZXN1bHRzIG9mIHRoZSBzZXQgZnVuY3Rpb25zIGBzZXQtcmVzdWx0c2AuXG5cbkknbSB0aGlua2luZyB0aGlzIGFmZmVjdHMgc3lzdGVtcyBjb25maWd1cmVkIHdpdGggYFZIT1NUX1ZEUEFgLCBgVkRQQWAsIGBWRFBBX1NJTWAsIGBWRFBBX1NJTV9ORVRgLCBhbmQgYFZEUEFfU0lNX0JMT0NLYC4gVGhlIHBhdGNoIG1vZGlmaWVzIGB2aG9zdF92ZHBhX3Byb2Nlc3NfaW90bGJfbXNnYCBhbmQgaGFzIGNoYW5nZWQgdGhlIGNvbnRyb2wgZmxvdywgY2F1c2luZyBhIHBvdGVudGlhbCBidWcuIEl0IGlzIHJlYWNoYWJsZSB2aWEgdmhvc3QgaW9jdGxzIG9yIGNoYXJhY3RlciBkZXZpY2Ugd3JpdGVzIGZyb20gdXNlcnNwYWNlLiBUaGUgbGFjayBvZiByZXNldHRpbmcgYHYtXHUwMDNlaW5fYmF0Y2hgIGFmdGVyIGNhbGxpbmcgYG9wcy1cdTAwM2VzZXRfbWFwYCBpcyB0aGUgbGlrZWx5IGNhdXNlIG9mIHRoZSBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ5MjYsIk91dHB1dFRva2VucyI6MTg4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDc6NDY6MDEuNTYzNzQ1MjgzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU2NDU2NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZIT1NUX1ZEUEFcIixcbiAgICBcIlZEUEFcIixcbiAgICBcIlZEUEFfU0lNXCIsXG4gICAgXCJWRFBBX1NJTV9ORVRcIixcbiAgICBcIlZEUEFfU0lNX0JMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiBWSE9TVF9JT1RMQl9CQVRDSF9FTkQgaW4gdmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZy4gSXQgY2hhbmdlcyB0aGUgY29udHJvbCBmbG93IHN1Y2ggdGhhdCBpZiBvcHMtXFx1MDAzZXNldF9tYXAgaXMgZXhlY3V0ZWQsIHRoZSBmdW5jdGlvbiBicmVha3Mgb3V0IG9mIHRoZSBzd2l0Y2ggc3RhdGVtZW50IGJlZm9yZSBzZXR0aW5nIHYtXFx1MDAzZWluX2JhdGNoID0gZmFsc2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgdkRQQSBJT1RMQiBiYXRjaGVzIGFyZSBwcm9jZXNzZWQgYW5kIGNvdWxkIHBvdGVudGlhbGx5IGxlYWQgdG8gaW5jb3JyZWN0IGJhdGNoIHN0YXRlIG1hbmFnZW1lbnQuIEl0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdmhvc3QgaW9jdGxzL2NoYXJhY3RlciBkZXZpY2Ugd3JpdGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZIT1NUX1ZEUEFcIixcbiAgICBcIlZEUEFcIixcbiAgICBcIlZEUEFfU0lNXCIsXG4gICAgXCJWRFBBX1NJTV9ORVRcIixcbiAgICBcIlZEUEFfU0lNX0JMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiBWSE9TVF9JT1RMQl9CQVRDSF9FTkQgaW4gdmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX21zZy4gSXQgY2hhbmdlcyB0aGUgY29udHJvbCBmbG93IHN1Y2ggdGhhdCBpZiBvcHMtXFx1MDAzZXNldF9tYXAgaXMgZXhlY3V0ZWQsIHRoZSBmdW5jdGlvbiBicmVha3Mgb3V0IG9mIHRoZSBzd2l0Y2ggc3RhdGVtZW50IGJlZm9yZSBzZXR0aW5nIHYtXFx1MDAzZWluX2JhdGNoID0gZmFsc2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgdkRQQSBJT1RMQiBiYXRjaGVzIGFyZSBwcm9jZXNzZWQgYW5kIGNvdWxkIHBvdGVudGlhbGx5IGxlYWQgdG8gaW5jb3JyZWN0IGJhdGNoIHN0YXRlIG1hbmFnZW1lbnQuIEl0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdmhvc3QgaW9jdGxzL2NoYXJhY3RlciBkZXZpY2Ugd3JpdGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdfmnb[1] Phase: Succeeded StartedAt: 2026-07-16 07:46:32 +0000 UTC FinishedAt: 2026-07-16 07:46:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfmnb[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-16 07:46:32 +0000 UTC FinishedAt: 2026-07-16 07:46:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfmnb[2] Phase: Succeeded StartedAt: 2026-07-16 07:46:32 +0000 UTC FinishedAt: 2026-07-16 09:48:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfmnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_process_iotlb_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"ff4a72f9-93fe-49b7-9969-a8a478c02610","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-16 07:46:32 +0000 UTC FinishedAt: 2026-07-16 09:48:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_process_iotlb_msg"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"ff4a72f9-93fe-49b7-9969-a8a478c02610","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowdfmnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_process_iotlb_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"ff4a72f9-93fe-49b7-9969-a8a478c02610","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-16 07:46:32 +0000 UTC FinishedAt: 2026-07-16 07:46:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfmnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_process_iotlb_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"ff4a72f9-93fe-49b7-9969-a8a478c02610","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-16 07:46:32 +0000 UTC FinishedAt: 2026-07-16 07:46:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdfmnb/series-workflowdfmnb-convert-artifact-3655239507/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdfmnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_process_iotlb_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"ff4a72f9-93fe-49b7-9969-a8a478c02610","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-16 07:46:42 +0000 UTC FinishedAt: 2026-07-16 08:22:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfmnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_process_iotlb_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"ff4a72f9-93fe-49b7-9969-a8a478c02610","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-16 07:46:42 +0000 UTC FinishedAt: 2026-07-16 08:22:29 +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:*0142e2ff-22db-437c-8c6a-16f8d22dc1d7,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-workflowdfmnb/series-workflowdfmnb-convert-artifact-3655239507/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": "3c76ae99-101e-4140-8ea9-27dddcb9d867", "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-workflowdfmnb/series-workflowdfmnb-build-action-2848836225/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdfmnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_process_iotlb_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"ff4a72f9-93fe-49b7-9969-a8a478c02610","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-16 07:46:42 +0000 UTC FinishedAt: 2026-07-16 08:22:19 +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:*0142e2ff-22db-437c-8c6a-16f8d22dc1d7,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-workflowdfmnb/series-workflowdfmnb-convert-artifact-3655239507/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": "3c76ae99-101e-4140-8ea9-27dddcb9d867", "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-workflowdfmnb/series-workflowdfmnb-build-action-2848836225/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdfmnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_process_iotlb_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"ff4a72f9-93fe-49b7-9969-a8a478c02610","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-16 08:22:29 +0000 UTC FinishedAt: 2026-07-16 08:22:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfmnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_process_iotlb_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"ff4a72f9-93fe-49b7-9969-a8a478c02610","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-16 08:22:29 +0000 UTC FinishedAt: 2026-07-16 08:22:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfmnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_process_iotlb_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"ff4a72f9-93fe-49b7-9969-a8a478c02610","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-16 08:22:29 +0000 UTC FinishedAt: 2026-07-16 08:22:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfmnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_process_iotlb_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"ff4a72f9-93fe-49b7-9969-a8a478c02610","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-16 08:22:29 +0000 UTC FinishedAt: 2026-07-16 08:22:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"ff4a72f9-93fe-49b7-9969-a8a478c02610","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdfmnb/series-workflowdfmnb-convert-artifact-839493962/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdfmnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_process_iotlb_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"ff4a72f9-93fe-49b7-9969-a8a478c02610","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-16 08:22:39 +0000 UTC FinishedAt: 2026-07-16 08:24:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfmnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_process_iotlb_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"ff4a72f9-93fe-49b7-9969-a8a478c02610","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-16 08:22:39 +0000 UTC FinishedAt: 2026-07-16 08:24:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3c76ae99-101e-4140-8ea9-27dddcb9d867,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-workflowdfmnb/series-workflowdfmnb-build-action-2848836225/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-workflowdfmnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_process_iotlb_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"ff4a72f9-93fe-49b7-9969-a8a478c02610","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-16 08:24:47 +0000 UTC FinishedAt: 2026-07-16 08:24:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfmnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_process_iotlb_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"ff4a72f9-93fe-49b7-9969-a8a478c02610","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-16 08:24:47 +0000 UTC FinishedAt: 2026-07-16 08:24:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfmnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_process_iotlb_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"ff4a72f9-93fe-49b7-9969-a8a478c02610","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-16 08:24:47 +0000 UTC FinishedAt: 2026-07-16 08:51:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfmnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_process_iotlb_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"ff4a72f9-93fe-49b7-9969-a8a478c02610","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-16 08:24:47 +0000 UTC FinishedAt: 2026-07-16 08:51:19 +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:*0142e2ff-22db-437c-8c6a-16f8d22dc1d7,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-workflowdfmnb/series-workflowdfmnb-convert-artifact-839493962/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": "62bbea50-bac9-433a-94c3-1e281f78aca7", "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-workflowdfmnb/series-workflowdfmnb-build-action-1667370350/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdfmnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_process_iotlb_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"ff4a72f9-93fe-49b7-9969-a8a478c02610","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-16 08:24:47 +0000 UTC FinishedAt: 2026-07-16 08:50:38 +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:*0142e2ff-22db-437c-8c6a-16f8d22dc1d7,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-workflowdfmnb/series-workflowdfmnb-convert-artifact-839493962/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": "62bbea50-bac9-433a-94c3-1e281f78aca7", "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-workflowdfmnb/series-workflowdfmnb-build-action-1667370350/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdfmnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_process_iotlb_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"ff4a72f9-93fe-49b7-9969-a8a478c02610","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-16 08:51:19 +0000 UTC FinishedAt: 2026-07-16 08:51:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfmnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_process_iotlb_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"ff4a72f9-93fe-49b7-9969-a8a478c02610","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-16 08:51:19 +0000 UTC FinishedAt: 2026-07-16 08:51:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfmnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_process_iotlb_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"ff4a72f9-93fe-49b7-9969-a8a478c02610","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-16 08:51:19 +0000 UTC FinishedAt: 2026-07-16 08:53:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfmnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_process_iotlb_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"ff4a72f9-93fe-49b7-9969-a8a478c02610","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-16 08:51:19 +0000 UTC FinishedAt: 2026-07-16 08:53:42 +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:*62bbea50-bac9-433a-94c3-1e281f78aca7,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-workflowdfmnb/series-workflowdfmnb-build-action-1667370350/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-workflowdfmnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_process_iotlb_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"ff4a72f9-93fe-49b7-9969-a8a478c02610","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-16 08:53:52 +0000 UTC FinishedAt: 2026-07-16 09:48:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfmnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_process_iotlb_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"ff4a72f9-93fe-49b7-9969-a8a478c02610","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-16 08:53:52 +0000 UTC FinishedAt: 2026-07-16 09:48:32 +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":["vhost_vdpa_process_iotlb_msg"],"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:*3c76ae99-101e-4140-8ea9-27dddcb9d867,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*62bbea50-bac9-433a-94c3-1e281f78aca7,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-workflowdfmnb/series-workflowdfmnb-build-action-2848836225/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-workflowdfmnb/series-workflowdfmnb-build-action-1667370350/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowdfmnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_process_iotlb_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"ff4a72f9-93fe-49b7-9969-a8a478c02610","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-16 08:53:52 +0000 UTC FinishedAt: 2026-07-16 08:54:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfmnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_process_iotlb_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"ff4a72f9-93fe-49b7-9969-a8a478c02610","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-16 08:53:52 +0000 UTC FinishedAt: 2026-07-16 08:54:28 +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":["vhost_vdpa_process_iotlb_msg"],"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-workflowdfmnb/series-workflowdfmnb-convert-artifact-2429171423/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdfmnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_process_iotlb_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"ff4a72f9-93fe-49b7-9969-a8a478c02610","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-16 08:53:52 +0000 UTC FinishedAt: 2026-07-16 08:53:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfmnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_process_iotlb_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"ff4a72f9-93fe-49b7-9969-a8a478c02610","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-16 08:53:52 +0000 UTC FinishedAt: 2026-07-16 08:53:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfmnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_process_iotlb_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"ff4a72f9-93fe-49b7-9969-a8a478c02610","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-16 08:53:53 +0000 UTC FinishedAt: 2026-07-16 08:53:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfmnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_process_iotlb_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"ff4a72f9-93fe-49b7-9969-a8a478c02610","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-16 08:54:36 +0000 UTC FinishedAt: 2026-07-16 09:48:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfmnb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["vhost_vdpa_process_iotlb_msg"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_VDPA","VDPA","VDPA_SIM","VDPA_SIM_NET","VDPA_SIM_BLOCK"],"series_id":"ff4a72f9-93fe-49b7-9969-a8a478c02610","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-16 08:54:36 +0000 UTC FinishedAt: 2026-07-16 09:48:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3c76ae99-101e-4140-8ea9-27dddcb9d867,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*62bbea50-bac9-433a-94c3-1e281f78aca7,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-workflowdfmnb/series-workflowdfmnb-build-action-2848836225/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-workflowdfmnb/series-workflowdfmnb-build-action-1667370350/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-workflowdfmnb/series-workflowdfmnb-convert-artifact-2429171423/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,}