Name: series-workflowrrfcf Phase: Succeeded StartedAt: 2026-07-20 14:29:30 +0000 UTC FinishedAt: 2026-07-20 19:03:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrrfcf[0] Phase: Succeeded StartedAt: 2026-07-20 14:29:30 +0000 UTC FinishedAt: 2026-07-20 14:56:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrrfcf[0].run-triage Phase: Succeeded StartedAt: 2026-07-20 14:29:30 +0000 UTC FinishedAt: 2026-07-20 14:56:41 +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": "298bb2b8903323f6ef2eab4819a2e477765f0ff1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST", "VHOST_VSOCK" ], "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": "298bb2b8903323f6ef2eab4819a2e477765f0ff1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST", "VHOST_VSOCK" ], "series_id": "3d1a1353-343e-4d59-9c69-db789c50e5ca" }, "track": "KASAN", "fuzz": { "focus": [ "kvm", "net" ], "focus_symbols": [ "vhost_workers_free", "vhost_vsock_start", "vhost_vsock_stop", "vhost_vsock_reset_owner" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIwIDE0OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUJiMzNDssCiAgICAmIzM0O1ZIT1NUX1ZTT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmhvc3Rfd29ya2Vyc19mcmVlJiMzNDssCiAgICAmIzM0O3Zob3N0X3Zzb2NrX3N0YXJ0JiMzNDssCiAgICAmIzM0O3Zob3N0X3Zzb2NrX3N0b3AmIzM0OywKICAgICYjMzQ7dmhvc3RfdnNvY2tfcmVzZXRfb3duZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZob3N0IGFuZCB2aG9zdF92c29jayBkcml2ZXJzIHRvIGZpeCB3b3JrZXIgY2xlYW51cCBhbmQgdnNvY2sgcmVzZXQvc3RvcCBiZWhhdmlvci4gSXQgaW50cm9kdWNlcyBhIG5ldyBWSE9TVF9SRVNFVF9PV05FUiBpb2N0bCBoYW5kbGVyIGZvciB2c29jayBhbmQgY2hhbmdlcyB0aGUgcGFja2V0IHF1ZXVpbmcgbG9naWMgYmFzZWQgb24gYSBuZXcgZXZlcl9zdGFydGVkIGZsYWcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGtlcm5lbCBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNDo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGJjMDA3ZjViZTEzMWM3MjMwYjM0ODE5MzVmZjc2MTU4MTliNmNmN2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyMCAxNDo1NTo1NyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmMgYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmNcbmluZGV4IDRjNTI1YjNlMTZlYWQ4Li5kNmUyMzVjMjUyNTRjZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92aG9zdC92aG9zdC5jXG5AQCAtNzI5LDYgJiM0Mzs3MjksMTcgQEAgc3RhdGljIHZvaWQgdmhvc3Rfd29ya2Vyc19mcmVlKHN0cnVjdCB2aG9zdF9kZXYgKmRldilcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRldi1cdTAwM2VudnFzOyBpJiM0MzsmIzQzOylcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGRldi1cdTAwM2V2cXNbaV0tXHUwMDNld29ya2VyLCBOVUxMKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiB2aG9zdF92cV93b3JrX3F1ZXVlKCkgcmVhZHMgdnEtXHUwMDNld29ya2VyIHVuZGVyIHJjdV9yZWFkX2xvY2soKSwgc28gYVxuJiM0MztcdCAqIHJlYWRlciB0aGF0IGZldGNoZWQgYSB3b3JrZXIgYmVmb3JlIHdlIGNsZWFyZWQgdGhlIHBvaW50ZXJzIGFib3ZlXG4mIzQzO1x0ICogbWF5IHN0aWxsIGJlIHF1ZXVlaW5nIHdvcmsgb24gaXQuICBXYWl0IGZvciB0aG9zZSByZWFkZXJzIHRvXG4mIzQzO1x0ICogZmluaXNoLCB0aGVuIGZsdXNoIHNvIGFueSB3b3JrIHRoZXkgcXVldWVkIHJ1bnMgKGNsZWFyaW5nXG4mIzQzO1x0ICogVkhPU1RfV09SS19RVUVVRUQpIGJlZm9yZSB0aGUgd29ya2VycyBhcmUgZnJlZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3luY2hyb25pemVfcmN1KCk7XG4mIzQzO1x0dmhvc3RfZGV2X2ZsdXNoKGRldik7XG4mIzQzO1xuIFx0LypcbiBcdCAqIEZyZWUgdGhlIGRlZmF1bHQgd29ya2VyIHdlIGNyZWF0ZWQgYW5kIGNsZWFudXAgd29ya2VycyB1c2Vyc3BhY2VcbiBcdCAqIGNyZWF0ZWQgYnV0IGNvdWxkbiYjMzk7dCBjbGVhbiB1cCAoaXQgZm9yZ290IG9yIGNyYXNoZWQpLlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3QvdnNvY2suYyBiL2RyaXZlcnMvdmhvc3QvdnNvY2suY1xuaW5kZXggOWFhYWI2YmI4MDYxYzEuLjg2ZjI1ZmY4MDcyMmQzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC92c29jay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L3Zzb2NrLmNcbkBAIC02MSw2ICYjNDM7NjEsNyBAQCBzdHJ1Y3Qgdmhvc3RfdnNvY2sge1xuIFxuIFx0dTMyIGd1ZXN0X2NpZDtcbiBcdGJvb2wgc2VxcGFja2V0X2FsbG93O1xuJiM0MztcdGJvb2wgZXZlcl9zdGFydGVkOyAvKiBzZXQgb24gZmlyc3QgU0VUX1JVTk5JTkcoMSk7IG5ldmVyIGNsZWFyZWQgKi9cbiB9O1xuIFxuIHN0YXRpYyB1MzIgdmhvc3RfdHJhbnNwb3J0X2dldF9sb2NhbF9jaWQodm9pZClcbkBAIC0zMDIsMTcgJiM0MzszMDMsMTIgQEAgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldClcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXHR9XG4gXG4tXHQvKiBGYXN0LWZhaWwgaWYgdGhlIGd1ZXN0IGhhc24mIzM5O3QgZW5hYmxlZCB0aGUgUlggdnEgeWV0LiBRdWV1aW5nIHRoZSBwYWNrZXRcbi1cdCAqIGFuZCBtYWtpbmcgdGhlIGNhbGxlciB3YWl0IGlzIHBvaW50bGVzczogZXZlbiBpZiB0aGUgZ3Vlc3QgbWFuYWdlcyB0byBpbml0XG4tXHQgKiB3aXRoaW4gdGhlIHRpbWVvdXQsIGl0JiMzOTtsbCBpbW1lZGlhdGVseSByZXBseSB3aXRoIFJTVCwgYmVjYXVzZSB0aGVyZSYjMzk7cyBub1xuLVx0ICogbGlzdGVuZXIgb24gdGhlIHBvcnQgeWV0LlxuLVx0ICpcbi1cdCAqIHZob3N0X3ZxX2dldF9iYWNrZW5kKCkgd2l0aG91dCB2cS1cdTAwM2VtdXRleCBpcyBhY2NlcHRhYmxlIGhlcmU6IGxvY2tpbmdcbi1cdCAqIHRoZSBtdXRleCB3b3VsZCBiZSB0b28gZXhwZW5zaXZlIGluIHRoaXMgaG90IHBhdGgsIGFuZCB3ZSBhbHJlYWR5IGhhdmVcbi1cdCAqIGFsbCB0aGUgb3V0Y29tZXMgY292ZXJlZDogaWYgdGhlIGJhY2tlbmQgYmVjb21lcyBOVUxMIHJpZ2h0IGFmdGVyIHRoZSBjaGVjayxcbi1cdCAqIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCgpIHdpbGwgY2hlY2sgaXQgdW5kZXIgdGhlIG11dGV4IGFueXdheS5cbiYjNDM7XHQvKiBGYXN0LWZhaWwgdW50aWwgdGhlIGd1ZXN0IGZpcnN0IGVuYWJsZXMgdGhlIGRldmljZSAoU0VUX1JVTk5JTkcoMSkpLlxuJiM0MztcdCAqIEJlZm9yZSB0aGF0IHRoZXJlIGlzIG5vIGxpc3RlbmVyLCBzbyBxdWV1aW5nIGlzIHBvaW50bGVzcy5cbiYjNDM7XHQgKiAmIzM5O2V2ZXJfc3RhcnRlZCYjMzk7IGlzIG5ldmVyIGNsZWFyZWQsIHNvIG9uY2Ugd2UmIzM5O3JlIHVwIHdlIGtlZXAgcXVldWluZ1xuJiM0MztcdCAqIGFjcm9zcyBsYXRlciBzdG9wIC8gQ1BSLXBhdXNlIHdpbmRvd3MuXG4gXHQgKi9cbi1cdGlmICh1bmxpa2VseSghZGF0YV9yYWNlKHZob3N0X3ZxX2dldF9iYWNrZW5kKFx1MDAyNnZzb2NrLVx1MDAzZXZxc1tWU09DS19WUV9SWF0pKSkpIHtcbiYjNDM7XHRpZiAodW5saWtlbHkoIVJFQURfT05DRSh2c29jay1cdTAwM2VldmVyX3N0YXJ0ZWQpKSkge1xuIFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdHJldHVybiAtRUhPU1RVTlJFQUNIO1xuQEAgLTY0MCwxMSAmIzQzOzYzNiwyMyBAQCBzdGF0aWMgaW50IHZob3N0X3Zzb2NrX3N0YXJ0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2spXG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4gXHR9XG4gXG4mIzQzO1x0LyogU2V0ICYjMzk7ZXZlcl9zdGFydGVkJiMzOTsgZmxhZyBvbiB0aGUgZmlyc3Qgc3RhcnQ7IG5ldmVyIGNsZWFyZWQsIHNvIHNlbmRfcGt0XG4mIzQzO1x0ICoga2VlcHMgcXVldWluZyAoaW5zdGVhZCBvZiBmYXN0LWZhaWxpbmcpIG9uIGxhdGVyIHN0b3AgLyBDUFIgcGF1c2VzLlxuJiM0MztcdCAqL1xuJiM0MztcdFdSSVRFX09OQ0UodnNvY2stXHUwMDNlZXZlcl9zdGFydGVkLCB0cnVlKTtcbiYjNDM7XG4gXHQvKiBTb21lIHBhY2tldHMgbWF5IGhhdmUgYmVlbiBxdWV1ZWQgYmVmb3JlIHRoZSBkZXZpY2Ugd2FzIHN0YXJ0ZWQsXG4gXHQgKiBsZXQmIzM5O3Mga2ljayB0aGUgc2VuZCB3b3JrZXIgdG8gc2VuZCB0aGVtLlxuIFx0ICovXG4gXHR2aG9zdF92cV93b3JrX3F1ZXVlKFx1MDAyNnZzb2NrLVx1MDAzZXZxc1tWU09DS19WUV9SWF0sIFx1MDAyNnZzb2NrLVx1MDAzZXNlbmRfcGt0X3dvcmspO1xuIFxuJiM0MztcdC8qIFRoZSBndWVzdCBtYXkgaGF2ZSBhZGRlZCBUWCBidWZmZXJzIHdoaWxlIHRoZSBkZXZpY2Ugd2FzIHN0b3BwZWRcbiYjNDM7XHQgKiAoZS5nLiBhY3Jvc3MgVkhPU1RfUkVTRVRfT1dORVIpIGFuZCB0aGVpciBraWNrcyBnb3QgY29uc3VtZWQgYnlcbiYjNDM7XHQgKiB0aGUgTlVMTC1iYWNrZW5kIHdpbmRvdy4gIFJlLXNjYW4gdGhlIFRYIFZRLCBtaXJyb3JpbmcgdGhlIFJYXG4mIzQzO1x0ICogc2VuZC13b3JrZXIga2ljayBhYm92ZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR2aG9zdF9wb2xsX3F1ZXVlKFx1MDAyNnZzb2NrLVx1MDAzZXZxc1tWU09DS19WUV9UWF0ucG9sbCk7XG4mIzQzO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZzb2NrLVx1MDAzZWRldi5tdXRleCk7XG4gXHRyZXR1cm4gMDtcbiBcbkBAIC02NjQsOSAmIzQzOzY3MiwyNCBAQCBzdGF0aWMgaW50IHZob3N0X3Zzb2NrX3N0YXJ0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2spXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgaW50IHZob3N0X3Zzb2NrX3N0b3Aoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywgYm9vbCBjaGVja19vd25lcilcbiYjNDM7c3RhdGljIHZvaWQgdmhvc3RfdnNvY2tfZHJvcF9iYWNrZW5kcyhzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrKVxuIHtcbiYjNDM7XHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cTtcbiBcdHNpemVfdCBpO1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnZzb2NrLVx1MDAzZWRldi5tdXRleCk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUodnNvY2stXHUwMDNldnFzKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHZxID0gXHUwMDI2dnNvY2stXHUwMDNldnFzW2ldO1xuJiM0MztcbiYjNDM7XHRcdG11dGV4X2xvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuJiM0MztcdFx0dmhvc3RfdnFfc2V0X2JhY2tlbmQodnEsIE5VTEwpO1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgdmhvc3RfdnNvY2tfc3RvcChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLCBib29sIGNoZWNrX293bmVyKVxuJiM0Mzt7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2dnNvY2stXHUwMDNlZGV2Lm11dGV4KTtcbkBAIC02NzcsMTQgJiM0Mzs3MDAsNyBAQCBzdGF0aWMgaW50IHZob3N0X3Zzb2NrX3N0b3Aoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywgYm9vbCBjaGVja19vd25lcilcbiBcdFx0XHRnb3RvIGVycjtcbiBcdH1cbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUodnNvY2stXHUwMDNldnFzKTsgaSYjNDM7JiM0MzspIHtcbi1cdFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBcdTAwMjZ2c29jay1cdTAwM2V2cXNbaV07XG4tXG4tXHRcdG11dGV4X2xvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuLVx0XHR2aG9zdF92cV9zZXRfYmFja2VuZCh2cSwgTlVMTCk7XG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4tXHR9XG4tXG4mIzQzO1x0dmhvc3RfdnNvY2tfZHJvcF9iYWNrZW5kcyh2c29jayk7XG4gZXJyOlxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZzb2NrLVx1MDAzZWRldi5tdXRleCk7XG4gXHRyZXR1cm4gcmV0O1xuQEAgLTcyMCw2ICYjNDM7NzM2LDcgQEAgc3RhdGljIGludCB2aG9zdF92c29ja19kZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcbiBcdHZzb2NrLVx1MDAzZWd1ZXN0X2NpZCA9IDA7IC8qIG5vIENJRCBhc3NpZ25lZCB5ZXQgKi9cbiBcdHZzb2NrLVx1MDAzZXNlcXBhY2tldF9hbGxvdyA9IGZhbHNlO1xuJiM0MztcdHZzb2NrLVx1MDAzZWV2ZXJfc3RhcnRlZCA9IGZhbHNlO1xuIFxuIFx0YXRvbWljX3NldChcdTAwMjZ2c29jay1cdTAwM2VxdWV1ZWRfcmVwbGllcywgMCk7XG4gXG5AQCAtODg2LDYgJiM0Mzs5MDMsMjkgQEAgc3RhdGljIGludCB2aG9zdF92c29ja19zZXRfZmVhdHVyZXMoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywgdTY0IGZlYXR1cmVzKVxuIFx0cmV0dXJuIC1FRkFVTFQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgbG9uZyB2aG9zdF92c29ja19yZXNldF9vd25lcihzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHZob3N0X2lvdGxiICp1bWVtO1xuJiM0MztcdGxvbmcgZXJyO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnZzb2NrLVx1MDAzZWRldi5tdXRleCk7XG4mIzQzO1x0ZXJyID0gdmhvc3RfZGV2X2NoZWNrX293bmVyKFx1MDAyNnZzb2NrLVx1MDAzZWRldik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZG9uZTtcbiYjNDM7XHR1bWVtID0gdmhvc3RfZGV2X3Jlc2V0X293bmVyX3ByZXBhcmUoKTtcbiYjNDM7XHRpZiAoIXVtZW0pIHtcbiYjNDM7XHRcdGVyciA9IC1FTk9NRU07XG4mIzQzO1x0XHRnb3RvIGRvbmU7XG4mIzQzO1x0fVxuJiM0MztcdHZob3N0X3Zzb2NrX2Ryb3BfYmFja2VuZHModnNvY2spO1xuJiM0MztcdHZob3N0X3Zzb2NrX2ZsdXNoKHZzb2NrKTtcbiYjNDM7XHR2aG9zdF9kZXZfc3RvcChcdTAwMjZ2c29jay1cdTAwM2VkZXYpO1xuJiM0MztcdHZob3N0X2Rldl9yZXNldF9vd25lcihcdTAwMjZ2c29jay1cdTAwM2VkZXYsIHVtZW0pO1xuJiM0Mztkb25lOlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZ2c29jay1cdTAwM2VkZXYubXV0ZXgpO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGxvbmcgdmhvc3RfdnNvY2tfZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCBpbnQgaW9jdGwsXG4gXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgYXJnKVxuIHtcbkBAIC05MjksNiAmIzQzOzk2OSw4IEBAIHN0YXRpYyBsb25nIHZob3N0X3Zzb2NrX2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgaW50IGlvY3RsLFxuIFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdFx0dmhvc3Rfc2V0X2JhY2tlbmRfZmVhdHVyZXMoXHUwMDI2dnNvY2stXHUwMDNlZGV2LCBmZWF0dXJlcyk7XG4gXHRcdHJldHVybiAwO1xuJiM0MztcdGNhc2UgVkhPU1RfUkVTRVRfT1dORVI6XG4mIzQzO1x0XHRyZXR1cm4gdmhvc3RfdnNvY2tfcmVzZXRfb3duZXIodnNvY2spO1xuIFx0ZGVmYXVsdDpcbiBcdFx0bXV0ZXhfbG9jayhcdTAwMjZ2c29jay1cdTAwM2VkZXYubXV0ZXgpO1xuIFx0XHRyID0gdmhvc3RfZGV2X2lvY3RsKFx1MDAyNnZzb2NrLVx1MDAzZWRldiwgaW9jdGwsIGFyZ3ApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE0OjU2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUJiMzNDssCiAgICAmIzM0O1ZIT1NUX1ZTT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmhvc3Rfd29ya2Vyc19mcmVlJiMzNDssCiAgICAmIzM0O3Zob3N0X3Zzb2NrX3N0YXJ0JiMzNDssCiAgICAmIzM0O3Zob3N0X3Zzb2NrX3N0b3AmIzM0OywKICAgICYjMzQ7dmhvc3RfdnNvY2tfcmVzZXRfb3duZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZob3N0IGFuZCB2aG9zdF92c29jayBkcml2ZXJzIHRvIGZpeCB3b3JrZXIgY2xlYW51cCBhbmQgdnNvY2sgcmVzZXQvc3RvcCBiZWhhdmlvci4gSXQgaW50cm9kdWNlcyBhIG5ldyBWSE9TVF9SRVNFVF9PV05FUiBpb2N0bCBoYW5kbGVyIGZvciB2c29jayBhbmQgY2hhbmdlcyB0aGUgcGFja2V0IHF1ZXVpbmcgbG9naWMgYmFzZWQgb24gYSBuZXcgZXZlcl9zdGFydGVkIGZsYWcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGtlcm5lbCBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmMwMDdmNWJlMTMxYzcyMzBiMzQ4MTkzNWZmNzYxNTgxOWI2Y2Y3ZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDIwIDE0OjU1OjU3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92aG9zdC5jIGIvZHJpdmVycy92aG9zdC92aG9zdC5jCmluZGV4IDRjNTI1YjNlMTZlYWQ4Li5kNmUyMzVjMjUyNTRjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC92aG9zdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuYwpAQCAtNzI5LDYgJiM0Mzs3MjksMTcgQEAgc3RhdGljIHZvaWQgdmhvc3Rfd29ya2Vyc19mcmVlKHN0cnVjdCB2aG9zdF9kZXYgKmRldikKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBkZXYtJmd0O252cXM7IGkmIzQzOyYjNDM7KQogCQlyY3VfYXNzaWduX3BvaW50ZXIoZGV2LSZndDt2cXNbaV0tJmd0O3dvcmtlciwgTlVMTCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIHZob3N0X3ZxX3dvcmtfcXVldWUoKSByZWFkcyB2cS0mZ3Q7d29ya2VyIHVuZGVyIHJjdV9yZWFkX2xvY2soKSwgc28gYQomIzQzOwkgKiByZWFkZXIgdGhhdCBmZXRjaGVkIGEgd29ya2VyIGJlZm9yZSB3ZSBjbGVhcmVkIHRoZSBwb2ludGVycyBhYm92ZQomIzQzOwkgKiBtYXkgc3RpbGwgYmUgcXVldWVpbmcgd29yayBvbiBpdC4gIFdhaXQgZm9yIHRob3NlIHJlYWRlcnMgdG8KJiM0MzsJICogZmluaXNoLCB0aGVuIGZsdXNoIHNvIGFueSB3b3JrIHRoZXkgcXVldWVkIHJ1bnMgKGNsZWFyaW5nCiYjNDM7CSAqIFZIT1NUX1dPUktfUVVFVUVEKSBiZWZvcmUgdGhlIHdvcmtlcnMgYXJlIGZyZWVkLgomIzQzOwkgKi8KJiM0MzsJc3luY2hyb25pemVfcmN1KCk7CiYjNDM7CXZob3N0X2Rldl9mbHVzaChkZXYpOwomIzQzOwogCS8qCiAJICogRnJlZSB0aGUgZGVmYXVsdCB3b3JrZXIgd2UgY3JlYXRlZCBhbmQgY2xlYW51cCB3b3JrZXJzIHVzZXJzcGFjZQogCSAqIGNyZWF0ZWQgYnV0IGNvdWxkbiYjMzk7dCBjbGVhbiB1cCAoaXQgZm9yZ290IG9yIGNyYXNoZWQpLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92c29jay5jIGIvZHJpdmVycy92aG9zdC92c29jay5jCmluZGV4IDlhYWFiNmJiODA2MWMxLi44NmYyNWZmODA3MjJkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC92c29jay5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmhvc3QvdnNvY2suYwpAQCAtNjEsNiAmIzQzOzYxLDcgQEAgc3RydWN0IHZob3N0X3Zzb2NrIHsKIAogCXUzMiBndWVzdF9jaWQ7CiAJYm9vbCBzZXFwYWNrZXRfYWxsb3c7CiYjNDM7CWJvb2wgZXZlcl9zdGFydGVkOyAvKiBzZXQgb24gZmlyc3QgU0VUX1JVTk5JTkcoMSk7IG5ldmVyIGNsZWFyZWQgKi8KIH07CiAKIHN0YXRpYyB1MzIgdmhvc3RfdHJhbnNwb3J0X2dldF9sb2NhbF9jaWQodm9pZCkKQEAgLTMwMiwxNyAmIzQzOzMwMywxMiBAQCB2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0KQogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQkvKiBGYXN0LWZhaWwgaWYgdGhlIGd1ZXN0IGhhc24mIzM5O3QgZW5hYmxlZCB0aGUgUlggdnEgeWV0LiBRdWV1aW5nIHRoZSBwYWNrZXQKLQkgKiBhbmQgbWFraW5nIHRoZSBjYWxsZXIgd2FpdCBpcyBwb2ludGxlc3M6IGV2ZW4gaWYgdGhlIGd1ZXN0IG1hbmFnZXMgdG8gaW5pdAotCSAqIHdpdGhpbiB0aGUgdGltZW91dCwgaXQmIzM5O2xsIGltbWVkaWF0ZWx5IHJlcGx5IHdpdGggUlNULCBiZWNhdXNlIHRoZXJlJiMzOTtzIG5vCi0JICogbGlzdGVuZXIgb24gdGhlIHBvcnQgeWV0LgotCSAqCi0JICogdmhvc3RfdnFfZ2V0X2JhY2tlbmQoKSB3aXRob3V0IHZxLSZndDttdXRleCBpcyBhY2NlcHRhYmxlIGhlcmU6IGxvY2tpbmcKLQkgKiB0aGUgbXV0ZXggd291bGQgYmUgdG9vIGV4cGVuc2l2ZSBpbiB0aGlzIGhvdCBwYXRoLCBhbmQgd2UgYWxyZWFkeSBoYXZlCi0JICogYWxsIHRoZSBvdXRjb21lcyBjb3ZlcmVkOiBpZiB0aGUgYmFja2VuZCBiZWNvbWVzIE5VTEwgcmlnaHQgYWZ0ZXIgdGhlIGNoZWNrLAotCSAqIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCgpIHdpbGwgY2hlY2sgaXQgdW5kZXIgdGhlIG11dGV4IGFueXdheS4KJiM0MzsJLyogRmFzdC1mYWlsIHVudGlsIHRoZSBndWVzdCBmaXJzdCBlbmFibGVzIHRoZSBkZXZpY2UgKFNFVF9SVU5OSU5HKDEpKS4KJiM0MzsJICogQmVmb3JlIHRoYXQgdGhlcmUgaXMgbm8gbGlzdGVuZXIsIHNvIHF1ZXVpbmcgaXMgcG9pbnRsZXNzLgomIzQzOwkgKiAmIzM5O2V2ZXJfc3RhcnRlZCYjMzk7IGlzIG5ldmVyIGNsZWFyZWQsIHNvIG9uY2Ugd2UmIzM5O3JlIHVwIHdlIGtlZXAgcXVldWluZwomIzQzOwkgKiBhY3Jvc3MgbGF0ZXIgc3RvcCAvIENQUi1wYXVzZSB3aW5kb3dzLgogCSAqLwotCWlmICh1bmxpa2VseSghZGF0YV9yYWNlKHZob3N0X3ZxX2dldF9iYWNrZW5kKCZhbXA7dnNvY2stJmd0O3Zxc1tWU09DS19WUV9SWF0pKSkpIHsKJiM0MzsJaWYgKHVubGlrZWx5KCFSRUFEX09OQ0UodnNvY2stJmd0O2V2ZXJfc3RhcnRlZCkpKSB7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIC1FSE9TVFVOUkVBQ0g7CkBAIC02NDAsMTEgJiM0Mzs2MzYsMjMgQEAgc3RhdGljIGludCB2aG9zdF92c29ja19zdGFydChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrKQogCQltdXRleF91bmxvY2soJmFtcDt2cS0mZ3Q7bXV0ZXgpOwogCX0KIAomIzQzOwkvKiBTZXQgJiMzOTtldmVyX3N0YXJ0ZWQmIzM5OyBmbGFnIG9uIHRoZSBmaXJzdCBzdGFydDsgbmV2ZXIgY2xlYXJlZCwgc28gc2VuZF9wa3QKJiM0MzsJICoga2VlcHMgcXVldWluZyAoaW5zdGVhZCBvZiBmYXN0LWZhaWxpbmcpIG9uIGxhdGVyIHN0b3AgLyBDUFIgcGF1c2VzLgomIzQzOwkgKi8KJiM0MzsJV1JJVEVfT05DRSh2c29jay0mZ3Q7ZXZlcl9zdGFydGVkLCB0cnVlKTsKJiM0MzsKIAkvKiBTb21lIHBhY2tldHMgbWF5IGhhdmUgYmVlbiBxdWV1ZWQgYmVmb3JlIHRoZSBkZXZpY2Ugd2FzIHN0YXJ0ZWQsCiAJICogbGV0JiMzOTtzIGtpY2sgdGhlIHNlbmQgd29ya2VyIHRvIHNlbmQgdGhlbS4KIAkgKi8KIAl2aG9zdF92cV93b3JrX3F1ZXVlKCZhbXA7dnNvY2stJmd0O3Zxc1tWU09DS19WUV9SWF0sICZhbXA7dnNvY2stJmd0O3NlbmRfcGt0X3dvcmspOwogCiYjNDM7CS8qIFRoZSBndWVzdCBtYXkgaGF2ZSBhZGRlZCBUWCBidWZmZXJzIHdoaWxlIHRoZSBkZXZpY2Ugd2FzIHN0b3BwZWQKJiM0MzsJICogKGUuZy4gYWNyb3NzIFZIT1NUX1JFU0VUX09XTkVSKSBhbmQgdGhlaXIga2lja3MgZ290IGNvbnN1bWVkIGJ5CiYjNDM7CSAqIHRoZSBOVUxMLWJhY2tlbmQgd2luZG93LiAgUmUtc2NhbiB0aGUgVFggVlEsIG1pcnJvcmluZyB0aGUgUlgKJiM0MzsJICogc2VuZC13b3JrZXIga2ljayBhYm92ZS4KJiM0MzsJICovCiYjNDM7CXZob3N0X3BvbGxfcXVldWUoJmFtcDt2c29jay0mZ3Q7dnFzW1ZTT0NLX1ZRX1RYXS5wb2xsKTsKJiM0MzsKIAltdXRleF91bmxvY2soJmFtcDt2c29jay0mZ3Q7ZGV2Lm11dGV4KTsKIAlyZXR1cm4gMDsKIApAQCAtNjY0LDkgJiM0Mzs2NzIsMjQgQEAgc3RhdGljIGludCB2aG9zdF92c29ja19zdGFydChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrKQogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgdmhvc3RfdnNvY2tfc3RvcChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLCBib29sIGNoZWNrX293bmVyKQomIzQzO3N0YXRpYyB2b2lkIHZob3N0X3Zzb2NrX2Ryb3BfYmFja2VuZHMoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaykKIHsKJiM0MzsJc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnE7CiAJc2l6ZV90IGk7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDt2c29jay0mZ3Q7ZGV2Lm11dGV4KTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUodnNvY2stJmd0O3Zxcyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl2cSA9ICZhbXA7dnNvY2stJmd0O3Zxc1tpXTsKJiM0MzsKJiM0MzsJCW11dGV4X2xvY2soJmFtcDt2cS0mZ3Q7bXV0ZXgpOwomIzQzOwkJdmhvc3RfdnFfc2V0X2JhY2tlbmQodnEsIE5VTEwpOwomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7dnEtJmd0O211dGV4KTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHZob3N0X3Zzb2NrX3N0b3Aoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywgYm9vbCBjaGVja19vd25lcikKJiM0Mzt7CiAJaW50IHJldCA9IDA7CiAKIAltdXRleF9sb2NrKCZhbXA7dnNvY2stJmd0O2Rldi5tdXRleCk7CkBAIC02NzcsMTQgJiM0Mzs3MDAsNyBAQCBzdGF0aWMgaW50IHZob3N0X3Zzb2NrX3N0b3Aoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywgYm9vbCBjaGVja19vd25lcikKIAkJCWdvdG8gZXJyOwogCX0KIAotCWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHZzb2NrLSZndDt2cXMpOyBpJiM0MzsmIzQzOykgewotCQlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9ICZhbXA7dnNvY2stJmd0O3Zxc1tpXTsKLQotCQltdXRleF9sb2NrKCZhbXA7dnEtJmd0O211dGV4KTsKLQkJdmhvc3RfdnFfc2V0X2JhY2tlbmQodnEsIE5VTEwpOwotCQltdXRleF91bmxvY2soJmFtcDt2cS0mZ3Q7bXV0ZXgpOwotCX0KLQomIzQzOwl2aG9zdF92c29ja19kcm9wX2JhY2tlbmRzKHZzb2NrKTsKIGVycjoKIAltdXRleF91bmxvY2soJmFtcDt2c29jay0mZ3Q7ZGV2Lm11dGV4KTsKIAlyZXR1cm4gcmV0OwpAQCAtNzIwLDYgJiM0Mzs3MzYsNyBAQCBzdGF0aWMgaW50IHZob3N0X3Zzb2NrX2Rldl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogCiAJdnNvY2stJmd0O2d1ZXN0X2NpZCA9IDA7IC8qIG5vIENJRCBhc3NpZ25lZCB5ZXQgKi8KIAl2c29jay0mZ3Q7c2VxcGFja2V0X2FsbG93ID0gZmFsc2U7CiYjNDM7CXZzb2NrLSZndDtldmVyX3N0YXJ0ZWQgPSBmYWxzZTsKIAogCWF0b21pY19zZXQoJmFtcDt2c29jay0mZ3Q7cXVldWVkX3JlcGxpZXMsIDApOwogCkBAIC04ODYsNiAmIzQzOzkwMywyOSBAQCBzdGF0aWMgaW50IHZob3N0X3Zzb2NrX3NldF9mZWF0dXJlcyhzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLCB1NjQgZmVhdHVyZXMpCiAJcmV0dXJuIC1FRkFVTFQ7CiB9CiAKJiM0MztzdGF0aWMgbG9uZyB2aG9zdF92c29ja19yZXNldF9vd25lcihzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrKQomIzQzO3sKJiM0MzsJc3RydWN0IHZob3N0X2lvdGxiICp1bWVtOwomIzQzOwlsb25nIGVycjsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3Zzb2NrLSZndDtkZXYubXV0ZXgpOwomIzQzOwllcnIgPSB2aG9zdF9kZXZfY2hlY2tfb3duZXIoJmFtcDt2c29jay0mZ3Q7ZGV2KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZG9uZTsKJiM0MzsJdW1lbSA9IHZob3N0X2Rldl9yZXNldF9vd25lcl9wcmVwYXJlKCk7CiYjNDM7CWlmICghdW1lbSkgewomIzQzOwkJZXJyID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gZG9uZTsKJiM0MzsJfQomIzQzOwl2aG9zdF92c29ja19kcm9wX2JhY2tlbmRzKHZzb2NrKTsKJiM0MzsJdmhvc3RfdnNvY2tfZmx1c2godnNvY2spOwomIzQzOwl2aG9zdF9kZXZfc3RvcCgmYW1wO3Zzb2NrLSZndDtkZXYpOwomIzQzOwl2aG9zdF9kZXZfcmVzZXRfb3duZXIoJmFtcDt2c29jay0mZ3Q7ZGV2LCB1bWVtKTsKJiM0Mztkb25lOgomIzQzOwltdXRleF91bmxvY2soJmFtcDt2c29jay0mZ3Q7ZGV2Lm11dGV4KTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgbG9uZyB2aG9zdF92c29ja19kZXZfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBpb2N0bCwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgYXJnKQogewpAQCAtOTI5LDYgJiM0Mzs5NjksOCBAQCBzdGF0aWMgbG9uZyB2aG9zdF92c29ja19kZXZfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBpb2N0bCwKIAkJCXJldHVybiAtRU9QTk9UU1VQUDsKIAkJdmhvc3Rfc2V0X2JhY2tlbmRfZmVhdHVyZXMoJmFtcDt2c29jay0mZ3Q7ZGV2LCBmZWF0dXJlcyk7CiAJCXJldHVybiAwOwomIzQzOwljYXNlIFZIT1NUX1JFU0VUX09XTkVSOgomIzQzOwkJcmV0dXJuIHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyKHZzb2NrKTsKIAlkZWZhdWx0OgogCQltdXRleF9sb2NrKCZhbXA7dnNvY2stJmd0O2Rldi5tdXRleCk7CiAJCXIgPSB2aG9zdF9kZXZfaW9jdGwoJmFtcDt2c29jay0mZ3Q7ZGV2LCBpb2N0bCwgYXJncCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE0OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NjEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgdmhvc3Qvdmhvc3RfdnNvY2sgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIGB2aG9zdGAgYW5kIGB2aG9zdF92c29ja2AgZHJpdmVycy4gSXQgc2VlbXMgcHJldHR5IGZvY3VzZWQ6IGl0JiMzOTtzIG1ha2luZyBjaGFuZ2VzIHRvIGhvdyB2aG9zdCB3b3JrZXJzIGFyZSBjbGVhbmVkIHVwLCBzcGVjaWZpY2FsbHkgYWRkaW5nIGBzeW5jaHJvbml6ZV9yY3UoKWAgYW5kIGB2aG9zdF9kZXZfZmx1c2goZGV2KWAgaW4gYHZob3N0X3dvcmtlcnNfZnJlZWAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIHN1Z2dlc3RpbmcgcG90ZW50aWFsIGNvbmN1cnJlbmN5IG9yIHJlc291cmNlIG1hbmFnZW1lbnQgaW1wcm92ZW1lbnRzLCBvciBmaXhlcy4gQWxzbywgYSBmbGFnIGBldmVyX3N0YXJ0ZWRgIGlzIGJlaW5nIGludHJvZHVjZWQgaW4gYHZob3N0X3Zzb2NrYCwgYW5kIHRoZSBmYXN0LWZhaWwgbG9naWMgaW4gYHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdGAgaXMgZ2V0dGluZyBhIHJldmlldy4gRmluYWxseSwgdGhlcmUmIzM5O3MgYSBuZXcgZnVuY3Rpb24sIGB2aG9zdF92c29ja19yZXNldF9vd25lcmAsIGJlaW5nIGFkZGVkLCBwcmVzdW1hYmx5IHRvIGhhbmRsZSB0aGUgYFZIT1NUX1JFU0VUX09XTkVSYCBpb2N0bCBmb3IgdnNvY2suCgpGdW5jdGlvbmFsbHksIHRoaXMgaW1wYWN0cyB0aGUgdmhvc3QgYW5kIHZob3N0X3Zzb2NrIGRyaXZlcnMgZGlyZWN0bHkuIFNpbmNlIGl0JiMzOTtzIHRvdWNoaW5nIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBpbiBib3RoIGB2aG9zdGAgYW5kIGB2c29ja2AsIHRoaXMgaXMgZGVmaW5pdGVseSBhICYjMzQ7V29ydGhGdXp6aW5nPXRydWUmIzM0OyBzaXR1YXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzLCBlc3BlY2lhbGx5IGFyb3VuZCBjb25jdXJyZW5jeSBhbmQgcmVzb3VyY2UgY2xlYW51cC4KCk5vdywgYmVmb3JlIEkgZGlnIGluIGRlZXBlciwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIFdlIGtub3cgYGRyaXZlcnMvdmhvc3Qvdmhvc3QuY2AgbmVlZHMgYENPTkZJR19WSE9TVGAgYW5kIGBkcml2ZXJzL3Zob3N0L3Zzb2NrLmNgIG5lZWRzIGBDT05GSUdfVkhPU1RfVlNPQ0tgIGVuYWJsZWQuIEkmIzM5O2xsIHF1aWNrbHkgdmVyaWZ5IHRoaXMuIEdyZXBwZXIgb3IgY29kZXNlYXJjaC1kaXItaW5kZXggc2hvdWxkIGdpdmUgbWUgYSByZWxpYWJsZSBjb25maXJtYXRpb24gb2YgdGhhdC4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBzdGVwLCBidXQgSSBkb24mIzM5O3Qgd2FudCB0byB3YXN0ZSB0aW1lIGFuYWx5emluZyBzb21ldGhpbmcgdGhhdCBpc24mIzM5O3QgYWN0dWFsbHkgYnVpbHQgaW50byBhIHRhcmdldCBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTQ6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3RfdnNvY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvTWFrZWZpbGU9Nj12aG9zdF9zY3NpLXkgOj0gc2NzaS5vXG5kcml2ZXJzL3Zob3N0L01ha2VmaWxlLTctXG5kcml2ZXJzL3Zob3N0L01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX1ZIT1NUX1ZTT0NLKSAmIzQzOz0gdmhvc3RfdnNvY2sub1xuZHJpdmVycy92aG9zdC9NYWtlZmlsZTo5OnZob3N0X3Zzb2NrLXkgOj0gdnNvY2sub1xuZHJpdmVycy92aG9zdC9NYWtlZmlsZS0xMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjM3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYW4gZXhwZXJ0IHVzZXI6CgoqKkludmVzdGlnYXRpbmcgdmhvc3QtdnNvY2sgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIEkgc2VlIHRoYXQgYENPTkZJR19WSE9TVF9WU09DS2AgaXMgZmxhZ2dlZCBhcyBhIG5lY2Vzc2FyeSBjb21wb25lbnQuIFRoYXQmIzM5O3MgYSBnaXZlbi4gQnV0IG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gdGhlIHBhcmVudCBtb2R1bGUsIHRoZSBicm9hZGVyIGBDT05GSUdfVkhPU1RgIHNldHRpbmcuIEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCB0aGUgcmVsYXRpb25zaGlwIGhlcmUuIElzIGBDT05GSUdfVkhPU1RgIGFsc28gYSBzdHJpY3QgcmVxdWlyZW1lbnQgZm9yIGB2aG9zdC12c29ja2AgdG8gZnVuY3Rpb24/IE9yIGlzIGl0IG9wdGlvbmFsIGJ1dCBoaWdobHkgcmVjb21tZW5kZWQ/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgd2l0aGluIGBDT05GSUdfVkhPU1RgIHRoYXQgYXJlIGFic29sdXRlbHkgZXNzZW50aWFsPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBlaXRoZXIsIG9yIGJvdGgsIG9mIHRoZXNlIGZlYXR1cmVzLiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyBpZiBJIGhhdmUgYSBkZXBlbmRlbmN5IHRyZWUgaGVyZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcywgb3Igc291cmNlIGNvZGUsIHRvIGZpZ3VyZSBvdXQgdGhlc2UgcmVsYXRpb25zaGlwcyBhbmQgbWFrZSBzdXJlIHRoaXMgbmV3IGNvbXBvbmVudCBpcyBwcm9wZXJseSBpbnRlZ3JhdGVkLiBUaGlzIHVuZGVyc3RhbmRpbmcgaXMga2V5IGZvciBhIHN0YWJsZSBhbmQgb3B0aW1pemVkIHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE0OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0Lm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvTWFrZWZpbGU9MTQ9dmhvc3RfdmRwYS15IDo9IHZkcGEub1xuZHJpdmVycy92aG9zdC9NYWtlZmlsZS0xNS1cbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGU6MTY6b2JqLSQoQ09ORklHX1ZIT1NUKVx0JiM0Mzs9IHZob3N0Lm9cbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGUtMTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTQ6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk4NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDYzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgdG91Y2hpbmcgdGhlIHZob3N0IGFuZCB2aG9zdF92c29jayBzdWJzeXN0ZW1zLiBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7dmUgY29uZmlybWVkIGlzIHRoYXQgYENPTkZJR19WSE9TVGAgYW5kIGBDT05GSUdfVkhPU1RfVlNPQ0tgIGFyZSBpbnZvbHZlZC4gTm93LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGZ1bmN0aW9ucyBtb3N0IHJlbGV2YW50IGZvciBmdXp6aW5nLCB1c2luZyBteSBleHBlcnRpc2UgdG8gcHJpb3JpdGl6ZSBob3QtcGF0aHMgYW5kIHRob3NlIGxpa2VseSB0byByZXZlYWwgaW50ZXJlc3RpbmcgYnVncy4KClRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlOiBgdmhvc3Rfd29ya2Vyc19mcmVlYCwgYHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdGAsIGB2aG9zdF92c29ja19zdGFydGAsIGB2aG9zdF92c29ja19kcm9wX2JhY2tlbmRzYCwgYHZob3N0X3Zzb2NrX3N0b3BgLCBgdmhvc3RfdnNvY2tfZGV2X29wZW5gLCBgdmhvc3RfdnNvY2tfc2V0X2ZlYXR1cmVzYCwgYHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyYCwgYW5kIGB2aG9zdF92c29ja19kZXZfaW9jdGxgLgoKR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGVzZSBzeXN0ZW1zLCBgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0YCBpbW1lZGlhdGVseSBzdGFuZHMgb3V0IGFzIGEgcG90ZW50aWFsIGhvdC1wYXRoOyBmdXp6aW5nIHBhY2tldCBoYW5kbGluZyBpcyBhbHdheXMgYSBnb29kIGlkZWEuIEhvd2V2ZXIsIHRoZSBvdGhlciBmdW5jdGlvbnMgYXJlIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vaywgZXNwZWNpYWxseSB0aG9zZSBpbnZvbHZlZCBpbiBjb250cm9sIGZsb3cgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQ6IGB2aG9zdF92c29ja19zdGFydGAsIGB2aG9zdF92c29ja19zdG9wYCwgYHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyYCwgYW5kIGB2aG9zdF93b3JrZXJzX2ZyZWVgIOKAkyB0aGVzZSBzZWVtIGxpa2UgZ29vZCBpbml0aWFsIHRhcmdldHMuIGB2aG9zdF92c29ja19kZXZfaW9jdGxgIGlzIGFsc28gdmVyeSBpbnRlcmVzdGluZywgZ2l2ZW4gaXQmIzM5O3MgYSBjZW50cmFsIGNvbnRyb2wgcG9pbnQuCgpTbywgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbjoKLSBgdmhvc3Rfd29ya2Vyc19mcmVlYAotIGB2aG9zdF92c29ja19zdGFydGAKLSBgdmhvc3RfdnNvY2tfc3RvcGAKLSBgdmhvc3RfdnNvY2tfcmVzZXRfb3duZXJgCgpOb3csIHRoZSBuZXh0IHRoaW5nIGlzIHRvIGRldGVybWluZSBpZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjY2Vzc2libGUgZXh0ZXJuYWxseSBvciBpbnRlcm5hbGx5LiBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgdmhvc3Rfd29ya2Vyc19mcmVlYCBpcyBzdGF0aWMgaW4gYGRyaXZlcnMvdmhvc3Qvdmhvc3QuY2AsIGFuZCBzbyBhcmUgYHZob3N0X3Zzb2NrX3N0YXJ0YCwgYHZob3N0X3Zzb2NrX3N0b3BgLCBhbmQgYHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyYCBpbiBgZHJpdmVycy92aG9zdC92c29jay5jYC4gVGhhdCBtZWFucyBJIGhhdmUgdG8gdHJhY2UgaG93IHRoZXkgYXJlIHJlYWNoZWQuCgpPa2F5LCBsZXQmIzM5O3MgdmVyaWZ5IHJlYWNoYWJpbGl0eS4gYHZob3N0X3dvcmtlcnNfZnJlZWAgaXMgY2FsbGVkIGZyb20gYHZob3N0X2Rldl9jbGVhbnVwYCwgd2hpY2ggZ2V0cyBjYWxsZWQgd2hlbiBhIHZob3N0IGRldmljZSBpcyBjbG9zZWQgLSB3aGljaCBpcyBjb21tb24gZW5vdWdoLiBgdmhvc3RfdnNvY2tfc3RhcnRgIGlzIHRyaWdnZXJlZCBmcm9tIGB2aG9zdF92c29ja19kZXZfaW9jdGxgIG9uLCBpdCBhcHBlYXJzLCBlaXRoZXIgYFZIT1NUX1ZTT0NLX1NFVF9SVU5OSU5HYCBvciBgVkhPU1RfVlNPQ0tfU0VUX0dVRVNUX0NJRGAuIEFoLCBhbmQgYHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyYCBpcyBjYWxsZWQgZnJvbSBgdmhvc3RfdnNvY2tfZGV2X2lvY3RsYCBvbiBgVkhPU1RfUkVTRVRfT1dORVJgLgoKTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgbGFzdCBvbmUuIFllcywgdGhlIHBhdGNoIGl0c2VsZiBjbGVhcmx5IHNob3dzIGB2aG9zdF92c29ja19yZXNldF9vd25lcmAgaXMgaW5kZWVkIGNhbGxlZCBmcm9tIGB2aG9zdF92c29ja19kZXZfaW9jdGxgIHdoZW4gdGhlIGBWSE9TVF9SRVNFVF9PV05FUmAgY29tbWFuZCBpcyBpc3N1ZWQuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHNob3VsZCBwcm9iYWJseSBub3cgZXhhbWluZSB0aGUgYHZob3N0X3Zzb2NrX2Rldl9pb2N0bGAgZnVuY3Rpb24gaW4gYGRyaXZlcnMvdmhvc3QvdnNvY2suY2AgbW9yZSBjbG9zZWx5IHRvIHVuZGVyc3RhbmQgYWxsIHRoZSBjb250cm9sIHBhdGhzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE0OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X3Zzb2NrX2Rldl9pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdnNvY2suYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Zzb2NrLmM9OTA2PXN0YXRpYyBsb25nIHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyKHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2spXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTkyOC1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo5Mjk6c3RhdGljIGxvbmcgdmhvc3RfdnNvY2tfZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCBpbnQgaW9jdGwsXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTMwLVx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MTAxND1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF92c29ja19mb3BzID0ge1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDE4LVx0Lmxsc2Vla1x0XHQ9IG5vb3BfbGxzZWVrLFxuZHJpdmVycy92aG9zdC92c29jay5jOjEwMTk6XHQudW5sb2NrZWRfaW9jdGwgPSB2aG9zdF92c29ja19kZXZfaW9jdGwsXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTAyMC1cdC5jb21wYXRfaW9jdGwgICA9IGNvbXBhdF9wdHJfaW9jdGwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTQ6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjYyMQoJCQkJCQkJb3V0cHV0OiAxNTUKCQkJCQkJCXRob3VnaHRzOiAzMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFZob3N0L1Zzb2NrIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgY29yZSB2aG9zdCBhbmQgdmhvc3RfdnNvY2sgZnVuY3Rpb25hbGl0eSwgc28gaXQmIzM5O3Mgd29ydGggYSBjbG9zZXIgbG9vayBmb3IgZnV6emluZyBwdXJwb3Nlcy4gRmlyc3QsIEkgc2VlIGEgbmV3IGBWSE9TVF9SRVNFVF9PV05FUmAgYmVpbmcgYWRkZWQgdG8gYHZob3N0X3Zzb2NrX2Rldl9pb2N0bGAuIFRoYXQmIzM5O3Mgc2lnbmlmaWNhbnQ7IGl0IGltcGxpZXMgYSBuZXcgbWVjaGFuaXNtIGZvciByZXNldHRpbmcgb3IgcmUtb3duaW5nIHZzb2NrIGRldmljZXMsIGxpa2VseSBpbiByZXNwb25zZSB0byBzb21lIG9wZXJhdGlvbmFsIHNjZW5hcmlvLgoKTmV4dCwgdGhlcmUmIzM5O3MgYSBmaXggaW4gYHZob3N0X3dvcmtlcnNfZnJlZWAuIFRoZSBpbXBsaWNhdGlvbiBoZXJlIGlzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIGNsZWFudXAgaXNzdWUgd2hlcmUgYSByZWFkZXIgdGhyZWFkIGNvdWxkIHN0aWxsIGJlIGFjdGl2ZSBldmVuIGFmdGVyIHRoZSB3b3JrZXJzIGFyZSBzdXBwb3NlZGx5IGZyZWVkLiBXZSYjMzk7dmUgZ290IHRvIGVuc3VyZSB0aGUgZml4IGlzIHJvYnVzdC4KClRoZSBtb2RpZmljYXRpb24gdG8gYHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdGAgaXMgYWxzbyBub3Rld29ydGh5LiBUaGUgaW50cm9kdWN0aW9uIG9mIHRoZSBgZXZlcl9zdGFydGVkYCBmbGFnIGZvciBmYXN0LWZhaWxpbmcgdW50aWwgdGhlIGd1ZXN0IGVuYWJsZXMgdGhlIGRldmljZSBzdWdnZXN0cyBhIGNoYW5nZSBpbiBob3cgcGFja2V0cyBhcmUgaGFuZGxlZCBiZWZvcmUgdGhlIHZzb2NrIGRldmljZSBpcyBmdWxseSBpbml0aWFsaXplZC4gVGhpcyBtaWdodCBiZSBhIGNyaXRpY2FsIGFyZWEgZm9yIGVkZ2UtY2FzZSB0ZXN0aW5nLgoKTXkgaW1tZWRpYXRlIGZvY3VzIHN5bWJvbHMgYmFzZWQgb24gdGhlc2UgY2hhbmdlcyBhcmU6CgoqICAgYHZob3N0X3dvcmtlcnNfZnJlZWA6IGJlY2F1c2Ugb2YgdGhlIGNsZWFudXAgZml4LgoqICAgYHZob3N0X3Zzb2NrX3N0YXJ0YDogdG8gdW5kZXJzdGFuZCB0aGUgbmV3IGluaXRpYWxpemF0aW9uIGxvZ2ljLgoqICAgYHZob3N0X3Zzb2NrX3N0b3BgOiB0byBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXNldCBsb2dpYy4KKiAgIGB2aG9zdF92c29ja19yZXNldF9vd25lcmA6IGR1ZSB0byBpdHMgaW9jdGwgaGFuZGxlci4KCkkmIzM5O2xsIGFsc28gaW5jbHVkZSBgdmhvc3RfdnNvY2tfZHJvcF9iYWNrZW5kc2AgYXMgaXQgaXMgY2FsbGVkIGZyb20gYm90aCBgdmhvc3RfdnNvY2tfc3RvcGAgYW5kIGB2aG9zdF92c29ja19yZXNldF9vd25lcmAuCgpJIHdpbGwgYmUgZW5hYmxpbmcgYFZIT1NUYCBhbmQgYFZIT1NUX1ZTT0NLYCB0byB0ZXN0IHRoZXNlIGNoYW5nZXMuCgpUaGlzIHBhdGNoIGlzIG1vZGlmeWluZyByZWFjaGFibGUga2VybmVsIGNvZGUsIHNvIGl0IG1ha2VzIGl0IGEgc3VpdGFibGUgY2FuZGlkYXRlIGZvciBmdXp6aW5nIHRvIGVuc3VyZSB0aGUgZml4ZXMgYXJlIGdvb2QuIE5vdywgbGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTQ6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUJiMzNDssCiAgICAmIzM0O1ZIT1NUX1ZTT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmhvc3Rfd29ya2Vyc19mcmVlJiMzNDssCiAgICAmIzM0O3Zob3N0X3Zzb2NrX3N0YXJ0JiMzNDssCiAgICAmIzM0O3Zob3N0X3Zzb2NrX3N0b3AmIzM0OywKICAgICYjMzQ7dmhvc3RfdnNvY2tfcmVzZXRfb3duZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZob3N0IGFuZCB2aG9zdF92c29jayBkcml2ZXJzIHRvIGZpeCB3b3JrZXIgY2xlYW51cCBhbmQgdnNvY2sgcmVzZXQvc3RvcCBiZWhhdmlvci4gSXQgaW50cm9kdWNlcyBhIG5ldyBWSE9TVF9SRVNFVF9PV05FUiBpb2N0bCBoYW5kbGVyIGZvciB2c29jayBhbmQgY2hhbmdlcyB0aGUgcGFja2V0IHF1ZXVpbmcgbG9naWMgYmFzZWQgb24gYSBuZXcgZXZlcl9zdGFydGVkIGZsYWcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGtlcm5lbCBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkhPU1QmIzM0OywKICAgICYjMzQ7VkhPU1RfVlNPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aG9zdF93b3JrZXJzX2ZyZWUmIzM0OywKICAgICYjMzQ7dmhvc3RfdnNvY2tfc3RhcnQmIzM0OywKICAgICYjMzQ7dmhvc3RfdnNvY2tfc3RvcCYjMzQ7LAogICAgJiMzNDt2aG9zdF92c29ja19yZXNldF9vd25lciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdmhvc3QgYW5kIHZob3N0X3Zzb2NrIGRyaXZlcnMgdG8gZml4IHdvcmtlciBjbGVhbnVwIGFuZCB2c29jayByZXNldC9zdG9wIGJlaGF2aW9yLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IFZIT1NUX1JFU0VUX09XTkVSIGlvY3RsIGhhbmRsZXIgZm9yIHZzb2NrIGFuZCBjaGFuZ2VzIHRoZSBwYWNrZXQgcXVldWluZyBsb2dpYyBiYXNlZCBvbiBhIG5ldyBldmVyX3N0YXJ0ZWQgZmxhZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUga2VybmVsIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjBUMTQ6NTU6NTkuNTgxODE4Mzg0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk2NjI0MDE2NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkhPU1RcIixcbiAgICBcIlZIT1NUX1ZTT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmhvc3Rfd29ya2Vyc19mcmVlXCIsXG4gICAgXCJ2aG9zdF92c29ja19zdGFydFwiLFxuICAgIFwidmhvc3RfdnNvY2tfc3RvcFwiLFxuICAgIFwidmhvc3RfdnNvY2tfcmVzZXRfb3duZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdmhvc3QgYW5kIHZob3N0X3Zzb2NrIGRyaXZlcnMgdG8gZml4IHdvcmtlciBjbGVhbnVwIGFuZCB2c29jayByZXNldC9zdG9wIGJlaGF2aW9yLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IFZIT1NUX1JFU0VUX09XTkVSIGlvY3RsIGhhbmRsZXIgZm9yIHZzb2NrIGFuZCBjaGFuZ2VzIHRoZSBwYWNrZXQgcXVldWluZyBsb2dpYyBiYXNlZCBvbiBhIG5ldyBldmVyX3N0YXJ0ZWQgZmxhZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUga2VybmVsIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNDo1NTo1OS41ODE4MzAyMjRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1NTIxMTI5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGJjMDA3ZjViZTEzMWM3MjMwYjM0ODE5MzVmZjc2MTU4MTliNmNmN2VcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgMjAgMTQ6NTU6NTcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92aG9zdC5jIGIvZHJpdmVycy92aG9zdC92aG9zdC5jXFxuaW5kZXggNGM1MjViM2UxNmVhZDguLmQ2ZTIzNWMyNTI1NGNlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuY1xcbisrKyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuY1xcbkBAIC03MjksNiArNzI5LDE3IEBAIHN0YXRpYyB2b2lkIHZob3N0X3dvcmtlcnNfZnJlZShzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYpXFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZGV2LVxcdTAwM2VudnFzOyBpKyspXFxuIFxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihkZXYtXFx1MDAzZXZxc1tpXS1cXHUwMDNld29ya2VyLCBOVUxMKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIHZob3N0X3ZxX3dvcmtfcXVldWUoKSByZWFkcyB2cS1cXHUwMDNld29ya2VyIHVuZGVyIHJjdV9yZWFkX2xvY2soKSwgc28gYVxcbitcXHQgKiByZWFkZXIgdGhhdCBmZXRjaGVkIGEgd29ya2VyIGJlZm9yZSB3ZSBjbGVhcmVkIHRoZSBwb2ludGVycyBhYm92ZVxcbitcXHQgKiBtYXkgc3RpbGwgYmUgcXVldWVpbmcgd29yayBvbiBpdC4gIFdhaXQgZm9yIHRob3NlIHJlYWRlcnMgdG9cXG4rXFx0ICogZmluaXNoLCB0aGVuIGZsdXNoIHNvIGFueSB3b3JrIHRoZXkgcXVldWVkIHJ1bnMgKGNsZWFyaW5nXFxuK1xcdCAqIFZIT1NUX1dPUktfUVVFVUVEKSBiZWZvcmUgdGhlIHdvcmtlcnMgYXJlIGZyZWVkLlxcbitcXHQgKi9cXG4rXFx0c3luY2hyb25pemVfcmN1KCk7XFxuK1xcdHZob3N0X2Rldl9mbHVzaChkZXYpO1xcbitcXG4gXFx0LypcXG4gXFx0ICogRnJlZSB0aGUgZGVmYXVsdCB3b3JrZXIgd2UgY3JlYXRlZCBhbmQgY2xlYW51cCB3b3JrZXJzIHVzZXJzcGFjZVxcbiBcXHQgKiBjcmVhdGVkIGJ1dCBjb3VsZG4ndCBjbGVhbiB1cCAoaXQgZm9yZ290IG9yIGNyYXNoZWQpLlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Zzb2NrLmMgYi9kcml2ZXJzL3Zob3N0L3Zzb2NrLmNcXG5pbmRleCA5YWFhYjZiYjgwNjFjMS4uODZmMjVmZjgwNzIyZDMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92aG9zdC92c29jay5jXFxuKysrIGIvZHJpdmVycy92aG9zdC92c29jay5jXFxuQEAgLTYxLDYgKzYxLDcgQEAgc3RydWN0IHZob3N0X3Zzb2NrIHtcXG4gXFxuIFxcdHUzMiBndWVzdF9jaWQ7XFxuIFxcdGJvb2wgc2VxcGFja2V0X2FsbG93O1xcbitcXHRib29sIGV2ZXJfc3RhcnRlZDsgLyogc2V0IG9uIGZpcnN0IFNFVF9SVU5OSU5HKDEpOyBuZXZlciBjbGVhcmVkICovXFxuIH07XFxuIFxcbiBzdGF0aWMgdTMyIHZob3N0X3RyYW5zcG9ydF9nZXRfbG9jYWxfY2lkKHZvaWQpXFxuQEAgLTMwMiwxNyArMzAzLDEyIEBAIHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQpXFxuIFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXHR9XFxuIFxcbi1cXHQvKiBGYXN0LWZhaWwgaWYgdGhlIGd1ZXN0IGhhc24ndCBlbmFibGVkIHRoZSBSWCB2cSB5ZXQuIFF1ZXVpbmcgdGhlIHBhY2tldFxcbi1cXHQgKiBhbmQgbWFraW5nIHRoZSBjYWxsZXIgd2FpdCBpcyBwb2ludGxlc3M6IGV2ZW4gaWYgdGhlIGd1ZXN0IG1hbmFnZXMgdG8gaW5pdFxcbi1cXHQgKiB3aXRoaW4gdGhlIHRpbWVvdXQsIGl0J2xsIGltbWVkaWF0ZWx5IHJlcGx5IHdpdGggUlNULCBiZWNhdXNlIHRoZXJlJ3Mgbm9cXG4tXFx0ICogbGlzdGVuZXIgb24gdGhlIHBvcnQgeWV0Llxcbi1cXHQgKlxcbi1cXHQgKiB2aG9zdF92cV9nZXRfYmFja2VuZCgpIHdpdGhvdXQgdnEtXFx1MDAzZW11dGV4IGlzIGFjY2VwdGFibGUgaGVyZTogbG9ja2luZ1xcbi1cXHQgKiB0aGUgbXV0ZXggd291bGQgYmUgdG9vIGV4cGVuc2l2ZSBpbiB0aGlzIGhvdCBwYXRoLCBhbmQgd2UgYWxyZWFkeSBoYXZlXFxuLVxcdCAqIGFsbCB0aGUgb3V0Y29tZXMgY292ZXJlZDogaWYgdGhlIGJhY2tlbmQgYmVjb21lcyBOVUxMIHJpZ2h0IGFmdGVyIHRoZSBjaGVjayxcXG4tXFx0ICogdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KCkgd2lsbCBjaGVjayBpdCB1bmRlciB0aGUgbXV0ZXggYW55d2F5LlxcbitcXHQvKiBGYXN0LWZhaWwgdW50aWwgdGhlIGd1ZXN0IGZpcnN0IGVuYWJsZXMgdGhlIGRldmljZSAoU0VUX1JVTk5JTkcoMSkpLlxcbitcXHQgKiBCZWZvcmUgdGhhdCB0aGVyZSBpcyBubyBsaXN0ZW5lciwgc28gcXVldWluZyBpcyBwb2ludGxlc3MuXFxuK1xcdCAqICdldmVyX3N0YXJ0ZWQnIGlzIG5ldmVyIGNsZWFyZWQsIHNvIG9uY2Ugd2UncmUgdXAgd2Uga2VlcCBxdWV1aW5nXFxuK1xcdCAqIGFjcm9zcyBsYXRlciBzdG9wIC8gQ1BSLXBhdXNlIHdpbmRvd3MuXFxuIFxcdCAqL1xcbi1cXHRpZiAodW5saWtlbHkoIWRhdGFfcmFjZSh2aG9zdF92cV9nZXRfYmFja2VuZChcXHUwMDI2dnNvY2stXFx1MDAzZXZxc1tWU09DS19WUV9SWF0pKSkpIHtcXG4rXFx0aWYgKHVubGlrZWx5KCFSRUFEX09OQ0UodnNvY2stXFx1MDAzZWV2ZXJfc3RhcnRlZCkpKSB7XFxuIFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0XFx0cmV0dXJuIC1FSE9TVFVOUkVBQ0g7XFxuQEAgLTY0MCwxMSArNjM2LDIzIEBAIHN0YXRpYyBpbnQgdmhvc3RfdnNvY2tfc3RhcnQoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaylcXG4gXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2cS1cXHUwMDNlbXV0ZXgpO1xcbiBcXHR9XFxuIFxcbitcXHQvKiBTZXQgJ2V2ZXJfc3RhcnRlZCcgZmxhZyBvbiB0aGUgZmlyc3Qgc3RhcnQ7IG5ldmVyIGNsZWFyZWQsIHNvIHNlbmRfcGt0XFxuK1xcdCAqIGtlZXBzIHF1ZXVpbmcgKGluc3RlYWQgb2YgZmFzdC1mYWlsaW5nKSBvbiBsYXRlciBzdG9wIC8gQ1BSIHBhdXNlcy5cXG4rXFx0ICovXFxuK1xcdFdSSVRFX09OQ0UodnNvY2stXFx1MDAzZWV2ZXJfc3RhcnRlZCwgdHJ1ZSk7XFxuK1xcbiBcXHQvKiBTb21lIHBhY2tldHMgbWF5IGhhdmUgYmVlbiBxdWV1ZWQgYmVmb3JlIHRoZSBkZXZpY2Ugd2FzIHN0YXJ0ZWQsXFxuIFxcdCAqIGxldCdzIGtpY2sgdGhlIHNlbmQgd29ya2VyIHRvIHNlbmQgdGhlbS5cXG4gXFx0ICovXFxuIFxcdHZob3N0X3ZxX3dvcmtfcXVldWUoXFx1MDAyNnZzb2NrLVxcdTAwM2V2cXNbVlNPQ0tfVlFfUlhdLCBcXHUwMDI2dnNvY2stXFx1MDAzZXNlbmRfcGt0X3dvcmspO1xcbiBcXG4rXFx0LyogVGhlIGd1ZXN0IG1heSBoYXZlIGFkZGVkIFRYIGJ1ZmZlcnMgd2hpbGUgdGhlIGRldmljZSB3YXMgc3RvcHBlZFxcbitcXHQgKiAoZS5nLiBhY3Jvc3MgVkhPU1RfUkVTRVRfT1dORVIpIGFuZCB0aGVpciBraWNrcyBnb3QgY29uc3VtZWQgYnlcXG4rXFx0ICogdGhlIE5VTEwtYmFja2VuZCB3aW5kb3cuICBSZS1zY2FuIHRoZSBUWCBWUSwgbWlycm9yaW5nIHRoZSBSWFxcbitcXHQgKiBzZW5kLXdvcmtlciBraWNrIGFib3ZlLlxcbitcXHQgKi9cXG4rXFx0dmhvc3RfcG9sbF9xdWV1ZShcXHUwMDI2dnNvY2stXFx1MDAzZXZxc1tWU09DS19WUV9UWF0ucG9sbCk7XFxuK1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYubXV0ZXgpO1xcbiBcXHRyZXR1cm4gMDtcXG4gXFxuQEAgLTY2NCw5ICs2NzIsMjQgQEAgc3RhdGljIGludCB2aG9zdF92c29ja19zdGFydChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrKVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHZob3N0X3Zzb2NrX3N0b3Aoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywgYm9vbCBjaGVja19vd25lcilcXG4rc3RhdGljIHZvaWQgdmhvc3RfdnNvY2tfZHJvcF9iYWNrZW5kcyhzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrKVxcbiB7XFxuK1xcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxO1xcbiBcXHRzaXplX3QgaTtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYubXV0ZXgpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUodnNvY2stXFx1MDAzZXZxcyk7IGkrKykge1xcbitcXHRcXHR2cSA9IFxcdTAwMjZ2c29jay1cXHUwMDNldnFzW2ldO1xcbitcXG4rXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2dnEtXFx1MDAzZW11dGV4KTtcXG4rXFx0XFx0dmhvc3RfdnFfc2V0X2JhY2tlbmQodnEsIE5VTEwpO1xcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnZxLVxcdTAwM2VtdXRleCk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludCB2aG9zdF92c29ja19zdG9wKHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssIGJvb2wgY2hlY2tfb3duZXIpXFxuK3tcXG4gXFx0aW50IHJldCA9IDA7XFxuIFxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZ2c29jay1cXHUwMDNlZGV2Lm11dGV4KTtcXG5AQCAtNjc3LDE0ICs3MDAsNyBAQCBzdGF0aWMgaW50IHZob3N0X3Zzb2NrX3N0b3Aoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywgYm9vbCBjaGVja19vd25lcilcXG4gXFx0XFx0XFx0Z290byBlcnI7XFxuIFxcdH1cXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHZzb2NrLVxcdTAwM2V2cXMpOyBpKyspIHtcXG4tXFx0XFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBcXHUwMDI2dnNvY2stXFx1MDAzZXZxc1tpXTtcXG4tXFxuLVxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnZxLVxcdTAwM2VtdXRleCk7XFxuLVxcdFxcdHZob3N0X3ZxX3NldF9iYWNrZW5kKHZxLCBOVUxMKTtcXG4tXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2cS1cXHUwMDNlbXV0ZXgpO1xcbi1cXHR9XFxuLVxcbitcXHR2aG9zdF92c29ja19kcm9wX2JhY2tlbmRzKHZzb2NrKTtcXG4gZXJyOlxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYubXV0ZXgpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbkBAIC03MjAsNiArNzM2LDcgQEAgc3RhdGljIGludCB2aG9zdF92c29ja19kZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gXFxuIFxcdHZzb2NrLVxcdTAwM2VndWVzdF9jaWQgPSAwOyAvKiBubyBDSUQgYXNzaWduZWQgeWV0ICovXFxuIFxcdHZzb2NrLVxcdTAwM2VzZXFwYWNrZXRfYWxsb3cgPSBmYWxzZTtcXG4rXFx0dnNvY2stXFx1MDAzZWV2ZXJfc3RhcnRlZCA9IGZhbHNlO1xcbiBcXG4gXFx0YXRvbWljX3NldChcXHUwMDI2dnNvY2stXFx1MDAzZXF1ZXVlZF9yZXBsaWVzLCAwKTtcXG4gXFxuQEAgLTg4Niw2ICs5MDMsMjkgQEAgc3RhdGljIGludCB2aG9zdF92c29ja19zZXRfZmVhdHVyZXMoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywgdTY0IGZlYXR1cmVzKVxcbiBcXHRyZXR1cm4gLUVGQVVMVDtcXG4gfVxcbiBcXG4rc3RhdGljIGxvbmcgdmhvc3RfdnNvY2tfcmVzZXRfb3duZXIoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaylcXG4re1xcbitcXHRzdHJ1Y3Qgdmhvc3RfaW90bGIgKnVtZW07XFxuK1xcdGxvbmcgZXJyO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2dnNvY2stXFx1MDAzZWRldi5tdXRleCk7XFxuK1xcdGVyciA9IHZob3N0X2Rldl9jaGVja19vd25lcihcXHUwMDI2dnNvY2stXFx1MDAzZWRldik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZG9uZTtcXG4rXFx0dW1lbSA9IHZob3N0X2Rldl9yZXNldF9vd25lcl9wcmVwYXJlKCk7XFxuK1xcdGlmICghdW1lbSkge1xcbitcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbitcXHRcXHRnb3RvIGRvbmU7XFxuK1xcdH1cXG4rXFx0dmhvc3RfdnNvY2tfZHJvcF9iYWNrZW5kcyh2c29jayk7XFxuK1xcdHZob3N0X3Zzb2NrX2ZsdXNoKHZzb2NrKTtcXG4rXFx0dmhvc3RfZGV2X3N0b3AoXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYpO1xcbitcXHR2aG9zdF9kZXZfcmVzZXRfb3duZXIoXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYsIHVtZW0pO1xcbitkb25lOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYubXV0ZXgpO1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbiBzdGF0aWMgbG9uZyB2aG9zdF92c29ja19kZXZfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBpb2N0bCxcXG4gXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGFyZylcXG4ge1xcbkBAIC05MjksNiArOTY5LDggQEAgc3RhdGljIGxvbmcgdmhvc3RfdnNvY2tfZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCBpbnQgaW9jdGwsXFxuIFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFx0XFx0dmhvc3Rfc2V0X2JhY2tlbmRfZmVhdHVyZXMoXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYsIGZlYXR1cmVzKTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGNhc2UgVkhPU1RfUkVTRVRfT1dORVI6XFxuK1xcdFxcdHJldHVybiB2aG9zdF92c29ja19yZXNldF9vd25lcih2c29jayk7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYubXV0ZXgpO1xcbiBcXHRcXHRyID0gdmhvc3RfZGV2X2lvY3RsKFxcdTAwMjZ2c29jay1cXHUwMDNlZGV2LCBpb2N0bCwgYXJncCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE0OjU2OjAwLjIzNzc0NjEyNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkwMDY0NjEwNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkhPU1RcIixcbiAgICBcIlZIT1NUX1ZTT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmhvc3Rfd29ya2Vyc19mcmVlXCIsXG4gICAgXCJ2aG9zdF92c29ja19zdGFydFwiLFxuICAgIFwidmhvc3RfdnNvY2tfc3RvcFwiLFxuICAgIFwidmhvc3RfdnNvY2tfcmVzZXRfb3duZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdmhvc3QgYW5kIHZob3N0X3Zzb2NrIGRyaXZlcnMgdG8gZml4IHdvcmtlciBjbGVhbnVwIGFuZCB2c29jayByZXNldC9zdG9wIGJlaGF2aW9yLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IFZIT1NUX1JFU0VUX09XTkVSIGlvY3RsIGhhbmRsZXIgZm9yIHZzb2NrIGFuZCBjaGFuZ2VzIHRoZSBwYWNrZXQgcXVldWluZyBsb2dpYyBiYXNlZCBvbiBhIG5ldyBldmVyX3N0YXJ0ZWQgZmxhZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUga2VybmVsIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGJjMDA3ZjViZTEzMWM3MjMwYjM0ODE5MzVmZjc2MTU4MTliNmNmN2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyMCAxNDo1NTo1NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuYyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuY1xuaW5kZXggNGM1MjViM2UxNmVhZDguLmQ2ZTIzNWMyNTI1NGNlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC92aG9zdC5jXG4rKysgYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmNcbkBAIC03MjksNiArNzI5LDE3IEBAIHN0YXRpYyB2b2lkIHZob3N0X3dvcmtlcnNfZnJlZShzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYpXG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXYtXHUwMDNlbnZxczsgaSsrKVxuIFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoZGV2LVx1MDAzZXZxc1tpXS1cdTAwM2V3b3JrZXIsIE5VTEwpO1xuK1xuK1x0LypcbitcdCAqIHZob3N0X3ZxX3dvcmtfcXVldWUoKSByZWFkcyB2cS1cdTAwM2V3b3JrZXIgdW5kZXIgcmN1X3JlYWRfbG9jaygpLCBzbyBhXG4rXHQgKiByZWFkZXIgdGhhdCBmZXRjaGVkIGEgd29ya2VyIGJlZm9yZSB3ZSBjbGVhcmVkIHRoZSBwb2ludGVycyBhYm92ZVxuK1x0ICogbWF5IHN0aWxsIGJlIHF1ZXVlaW5nIHdvcmsgb24gaXQuICBXYWl0IGZvciB0aG9zZSByZWFkZXJzIHRvXG4rXHQgKiBmaW5pc2gsIHRoZW4gZmx1c2ggc28gYW55IHdvcmsgdGhleSBxdWV1ZWQgcnVucyAoY2xlYXJpbmdcbitcdCAqIFZIT1NUX1dPUktfUVVFVUVEKSBiZWZvcmUgdGhlIHdvcmtlcnMgYXJlIGZyZWVkLlxuK1x0ICovXG4rXHRzeW5jaHJvbml6ZV9yY3UoKTtcbitcdHZob3N0X2Rldl9mbHVzaChkZXYpO1xuK1xuIFx0LypcbiBcdCAqIEZyZWUgdGhlIGRlZmF1bHQgd29ya2VyIHdlIGNyZWF0ZWQgYW5kIGNsZWFudXAgd29ya2VycyB1c2Vyc3BhY2VcbiBcdCAqIGNyZWF0ZWQgYnV0IGNvdWxkbid0IGNsZWFuIHVwIChpdCBmb3Jnb3Qgb3IgY3Jhc2hlZCkuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92c29jay5jIGIvZHJpdmVycy92aG9zdC92c29jay5jXG5pbmRleCA5YWFhYjZiYjgwNjFjMS4uODZmMjVmZjgwNzIyZDMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Zob3N0L3Zzb2NrLmNcbisrKyBiL2RyaXZlcnMvdmhvc3QvdnNvY2suY1xuQEAgLTYxLDYgKzYxLDcgQEAgc3RydWN0IHZob3N0X3Zzb2NrIHtcbiBcbiBcdHUzMiBndWVzdF9jaWQ7XG4gXHRib29sIHNlcXBhY2tldF9hbGxvdztcbitcdGJvb2wgZXZlcl9zdGFydGVkOyAvKiBzZXQgb24gZmlyc3QgU0VUX1JVTk5JTkcoMSk7IG5ldmVyIGNsZWFyZWQgKi9cbiB9O1xuIFxuIHN0YXRpYyB1MzIgdmhvc3RfdHJhbnNwb3J0X2dldF9sb2NhbF9jaWQodm9pZClcbkBAIC0zMDIsMTcgKzMwMywxMiBAQCB2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0KVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcdH1cbiBcbi1cdC8qIEZhc3QtZmFpbCBpZiB0aGUgZ3Vlc3QgaGFzbid0IGVuYWJsZWQgdGhlIFJYIHZxIHlldC4gUXVldWluZyB0aGUgcGFja2V0XG4tXHQgKiBhbmQgbWFraW5nIHRoZSBjYWxsZXIgd2FpdCBpcyBwb2ludGxlc3M6IGV2ZW4gaWYgdGhlIGd1ZXN0IG1hbmFnZXMgdG8gaW5pdFxuLVx0ICogd2l0aGluIHRoZSB0aW1lb3V0LCBpdCdsbCBpbW1lZGlhdGVseSByZXBseSB3aXRoIFJTVCwgYmVjYXVzZSB0aGVyZSdzIG5vXG4tXHQgKiBsaXN0ZW5lciBvbiB0aGUgcG9ydCB5ZXQuXG4tXHQgKlxuLVx0ICogdmhvc3RfdnFfZ2V0X2JhY2tlbmQoKSB3aXRob3V0IHZxLVx1MDAzZW11dGV4IGlzIGFjY2VwdGFibGUgaGVyZTogbG9ja2luZ1xuLVx0ICogdGhlIG11dGV4IHdvdWxkIGJlIHRvbyBleHBlbnNpdmUgaW4gdGhpcyBob3QgcGF0aCwgYW5kIHdlIGFscmVhZHkgaGF2ZVxuLVx0ICogYWxsIHRoZSBvdXRjb21lcyBjb3ZlcmVkOiBpZiB0aGUgYmFja2VuZCBiZWNvbWVzIE5VTEwgcmlnaHQgYWZ0ZXIgdGhlIGNoZWNrLFxuLVx0ICogdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KCkgd2lsbCBjaGVjayBpdCB1bmRlciB0aGUgbXV0ZXggYW55d2F5LlxuK1x0LyogRmFzdC1mYWlsIHVudGlsIHRoZSBndWVzdCBmaXJzdCBlbmFibGVzIHRoZSBkZXZpY2UgKFNFVF9SVU5OSU5HKDEpKS5cbitcdCAqIEJlZm9yZSB0aGF0IHRoZXJlIGlzIG5vIGxpc3RlbmVyLCBzbyBxdWV1aW5nIGlzIHBvaW50bGVzcy5cbitcdCAqICdldmVyX3N0YXJ0ZWQnIGlzIG5ldmVyIGNsZWFyZWQsIHNvIG9uY2Ugd2UncmUgdXAgd2Uga2VlcCBxdWV1aW5nXG4rXHQgKiBhY3Jvc3MgbGF0ZXIgc3RvcCAvIENQUi1wYXVzZSB3aW5kb3dzLlxuIFx0ICovXG4tXHRpZiAodW5saWtlbHkoIWRhdGFfcmFjZSh2aG9zdF92cV9nZXRfYmFja2VuZChcdTAwMjZ2c29jay1cdTAwM2V2cXNbVlNPQ0tfVlFfUlhdKSkpKSB7XG4rXHRpZiAodW5saWtlbHkoIVJFQURfT05DRSh2c29jay1cdTAwM2VldmVyX3N0YXJ0ZWQpKSkge1xuIFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdHJldHVybiAtRUhPU1RVTlJFQUNIO1xuQEAgLTY0MCwxMSArNjM2LDIzIEBAIHN0YXRpYyBpbnQgdmhvc3RfdnNvY2tfc3RhcnQoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaylcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbiBcdH1cbiBcbitcdC8qIFNldCAnZXZlcl9zdGFydGVkJyBmbGFnIG9uIHRoZSBmaXJzdCBzdGFydDsgbmV2ZXIgY2xlYXJlZCwgc28gc2VuZF9wa3RcbitcdCAqIGtlZXBzIHF1ZXVpbmcgKGluc3RlYWQgb2YgZmFzdC1mYWlsaW5nKSBvbiBsYXRlciBzdG9wIC8gQ1BSIHBhdXNlcy5cbitcdCAqL1xuK1x0V1JJVEVfT05DRSh2c29jay1cdTAwM2VldmVyX3N0YXJ0ZWQsIHRydWUpO1xuK1xuIFx0LyogU29tZSBwYWNrZXRzIG1heSBoYXZlIGJlZW4gcXVldWVkIGJlZm9yZSB0aGUgZGV2aWNlIHdhcyBzdGFydGVkLFxuIFx0ICogbGV0J3Mga2ljayB0aGUgc2VuZCB3b3JrZXIgdG8gc2VuZCB0aGVtLlxuIFx0ICovXG4gXHR2aG9zdF92cV93b3JrX3F1ZXVlKFx1MDAyNnZzb2NrLVx1MDAzZXZxc1tWU09DS19WUV9SWF0sIFx1MDAyNnZzb2NrLVx1MDAzZXNlbmRfcGt0X3dvcmspO1xuIFxuK1x0LyogVGhlIGd1ZXN0IG1heSBoYXZlIGFkZGVkIFRYIGJ1ZmZlcnMgd2hpbGUgdGhlIGRldmljZSB3YXMgc3RvcHBlZFxuK1x0ICogKGUuZy4gYWNyb3NzIFZIT1NUX1JFU0VUX09XTkVSKSBhbmQgdGhlaXIga2lja3MgZ290IGNvbnN1bWVkIGJ5XG4rXHQgKiB0aGUgTlVMTC1iYWNrZW5kIHdpbmRvdy4gIFJlLXNjYW4gdGhlIFRYIFZRLCBtaXJyb3JpbmcgdGhlIFJYXG4rXHQgKiBzZW5kLXdvcmtlciBraWNrIGFib3ZlLlxuK1x0ICovXG4rXHR2aG9zdF9wb2xsX3F1ZXVlKFx1MDAyNnZzb2NrLVx1MDAzZXZxc1tWU09DS19WUV9UWF0ucG9sbCk7XG4rXG4gXHRtdXRleF91bmxvY2soXHUwMDI2dnNvY2stXHUwMDNlZGV2Lm11dGV4KTtcbiBcdHJldHVybiAwO1xuIFxuQEAgLTY2NCw5ICs2NzIsMjQgQEAgc3RhdGljIGludCB2aG9zdF92c29ja19zdGFydChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGludCB2aG9zdF92c29ja19zdG9wKHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssIGJvb2wgY2hlY2tfb3duZXIpXG4rc3RhdGljIHZvaWQgdmhvc3RfdnNvY2tfZHJvcF9iYWNrZW5kcyhzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrKVxuIHtcbitcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxO1xuIFx0c2l6ZV90IGk7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnZzb2NrLVx1MDAzZWRldi5tdXRleCk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHZzb2NrLVx1MDAzZXZxcyk7IGkrKykge1xuK1x0XHR2cSA9IFx1MDAyNnZzb2NrLVx1MDAzZXZxc1tpXTtcbitcbitcdFx0bXV0ZXhfbG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4rXHRcdHZob3N0X3ZxX3NldF9iYWNrZW5kKHZxLCBOVUxMKTtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbitcdH1cbit9XG4rXG4rc3RhdGljIGludCB2aG9zdF92c29ja19zdG9wKHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssIGJvb2wgY2hlY2tfb3duZXIpXG4re1xuIFx0aW50IHJldCA9IDA7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNnZzb2NrLVx1MDAzZWRldi5tdXRleCk7XG5AQCAtNjc3LDE0ICs3MDAsNyBAQCBzdGF0aWMgaW50IHZob3N0X3Zzb2NrX3N0b3Aoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywgYm9vbCBjaGVja19vd25lcilcbiBcdFx0XHRnb3RvIGVycjtcbiBcdH1cbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUodnNvY2stXHUwMDNldnFzKTsgaSsrKSB7XG4tXHRcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gXHUwMDI2dnNvY2stXHUwMDNldnFzW2ldO1xuLVxuLVx0XHRtdXRleF9sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbi1cdFx0dmhvc3RfdnFfc2V0X2JhY2tlbmQodnEsIE5VTEwpO1xuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuLVx0fVxuLVxuK1x0dmhvc3RfdnNvY2tfZHJvcF9iYWNrZW5kcyh2c29jayk7XG4gZXJyOlxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZzb2NrLVx1MDAzZWRldi5tdXRleCk7XG4gXHRyZXR1cm4gcmV0O1xuQEAgLTcyMCw2ICs3MzYsNyBAQCBzdGF0aWMgaW50IHZob3N0X3Zzb2NrX2Rldl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIFxuIFx0dnNvY2stXHUwMDNlZ3Vlc3RfY2lkID0gMDsgLyogbm8gQ0lEIGFzc2lnbmVkIHlldCAqL1xuIFx0dnNvY2stXHUwMDNlc2VxcGFja2V0X2FsbG93ID0gZmFsc2U7XG4rXHR2c29jay1cdTAwM2VldmVyX3N0YXJ0ZWQgPSBmYWxzZTtcbiBcbiBcdGF0b21pY19zZXQoXHUwMDI2dnNvY2stXHUwMDNlcXVldWVkX3JlcGxpZXMsIDApO1xuIFxuQEAgLTg4Niw2ICs5MDMsMjkgQEAgc3RhdGljIGludCB2aG9zdF92c29ja19zZXRfZmVhdHVyZXMoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywgdTY0IGZlYXR1cmVzKVxuIFx0cmV0dXJuIC1FRkFVTFQ7XG4gfVxuIFxuK3N0YXRpYyBsb25nIHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyKHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2spXG4re1xuK1x0c3RydWN0IHZob3N0X2lvdGxiICp1bWVtO1xuK1x0bG9uZyBlcnI7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnZzb2NrLVx1MDAzZWRldi5tdXRleCk7XG4rXHRlcnIgPSB2aG9zdF9kZXZfY2hlY2tfb3duZXIoXHUwMDI2dnNvY2stXHUwMDNlZGV2KTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZG9uZTtcbitcdHVtZW0gPSB2aG9zdF9kZXZfcmVzZXRfb3duZXJfcHJlcGFyZSgpO1xuK1x0aWYgKCF1bWVtKSB7XG4rXHRcdGVyciA9IC1FTk9NRU07XG4rXHRcdGdvdG8gZG9uZTtcbitcdH1cbitcdHZob3N0X3Zzb2NrX2Ryb3BfYmFja2VuZHModnNvY2spO1xuK1x0dmhvc3RfdnNvY2tfZmx1c2godnNvY2spO1xuK1x0dmhvc3RfZGV2X3N0b3AoXHUwMDI2dnNvY2stXHUwMDNlZGV2KTtcbitcdHZob3N0X2Rldl9yZXNldF9vd25lcihcdTAwMjZ2c29jay1cdTAwM2VkZXYsIHVtZW0pO1xuK2RvbmU6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2dnNvY2stXHUwMDNlZGV2Lm11dGV4KTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuIHN0YXRpYyBsb25nIHZob3N0X3Zzb2NrX2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgaW50IGlvY3RsLFxuIFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGFyZylcbiB7XG5AQCAtOTI5LDYgKzk2OSw4IEBAIHN0YXRpYyBsb25nIHZob3N0X3Zzb2NrX2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgaW50IGlvY3RsLFxuIFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdFx0dmhvc3Rfc2V0X2JhY2tlbmRfZmVhdHVyZXMoXHUwMDI2dnNvY2stXHUwMDNlZGV2LCBmZWF0dXJlcyk7XG4gXHRcdHJldHVybiAwO1xuK1x0Y2FzZSBWSE9TVF9SRVNFVF9PV05FUjpcbitcdFx0cmV0dXJuIHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyKHZzb2NrKTtcbiBcdGRlZmF1bHQ6XG4gXHRcdG11dGV4X2xvY2soXHUwMDI2dnNvY2stXHUwMDNlZGV2Lm11dGV4KTtcbiBcdFx0ciA9IHZob3N0X2Rldl9pb2N0bChcdTAwMjZ2c29jay1cdTAwM2VkZXYsIGlvY3RsLCBhcmdwKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE0OjU2OjAwLjIzNzc0ODMyNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNDkxMzY4MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgdmhvc3Qvdmhvc3RfdnNvY2sgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBgdmhvc3RgIGFuZCBgdmhvc3RfdnNvY2tgIGRyaXZlcnMuIEl0IHNlZW1zIHByZXR0eSBmb2N1c2VkOiBpdCdzIG1ha2luZyBjaGFuZ2VzIHRvIGhvdyB2aG9zdCB3b3JrZXJzIGFyZSBjbGVhbmVkIHVwLCBzcGVjaWZpY2FsbHkgYWRkaW5nIGBzeW5jaHJvbml6ZV9yY3UoKWAgYW5kIGB2aG9zdF9kZXZfZmx1c2goZGV2KWAgaW4gYHZob3N0X3dvcmtlcnNfZnJlZWAuIFRoYXQncyBpbnRlcmVzdGluZywgc3VnZ2VzdGluZyBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3IgcmVzb3VyY2UgbWFuYWdlbWVudCBpbXByb3ZlbWVudHMsIG9yIGZpeGVzLiBBbHNvLCBhIGZsYWcgYGV2ZXJfc3RhcnRlZGAgaXMgYmVpbmcgaW50cm9kdWNlZCBpbiBgdmhvc3RfdnNvY2tgLCBhbmQgdGhlIGZhc3QtZmFpbCBsb2dpYyBpbiBgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0YCBpcyBnZXR0aW5nIGEgcmV2aWV3LiBGaW5hbGx5LCB0aGVyZSdzIGEgbmV3IGZ1bmN0aW9uLCBgdmhvc3RfdnNvY2tfcmVzZXRfb3duZXJgLCBiZWluZyBhZGRlZCwgcHJlc3VtYWJseSB0byBoYW5kbGUgdGhlIGBWSE9TVF9SRVNFVF9PV05FUmAgaW9jdGwgZm9yIHZzb2NrLlxuXG5GdW5jdGlvbmFsbHksIHRoaXMgaW1wYWN0cyB0aGUgdmhvc3QgYW5kIHZob3N0X3Zzb2NrIGRyaXZlcnMgZGlyZWN0bHkuIFNpbmNlIGl0J3MgdG91Y2hpbmcgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGluIGJvdGggYHZob3N0YCBhbmQgYHZzb2NrYCwgdGhpcyBpcyBkZWZpbml0ZWx5IGEgXCJXb3J0aEZ1enppbmc9dHJ1ZVwiIHNpdHVhdGlvbi4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcywgZXNwZWNpYWxseSBhcm91bmQgY29uY3VycmVuY3kgYW5kIHJlc291cmNlIGNsZWFudXAuXG5cbk5vdywgYmVmb3JlIEkgZGlnIGluIGRlZXBlciwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIFdlIGtub3cgYGRyaXZlcnMvdmhvc3Qvdmhvc3QuY2AgbmVlZHMgYENPTkZJR19WSE9TVGAgYW5kIGBkcml2ZXJzL3Zob3N0L3Zzb2NrLmNgIG5lZWRzIGBDT05GSUdfVkhPU1RfVlNPQ0tgIGVuYWJsZWQuIEknbGwgcXVpY2tseSB2ZXJpZnkgdGhpcy4gR3JlcHBlciBvciBjb2Rlc2VhcmNoLWRpci1pbmRleCBzaG91bGQgZ2l2ZSBtZSBhIHJlbGlhYmxlIGNvbmZpcm1hdGlvbiBvZiB0aGF0LiBJdCdzIGEgZnVuZGFtZW50YWwgc3RlcCwgYnV0IEkgZG9uJ3Qgd2FudCB0byB3YXN0ZSB0aW1lIGFuYWx5emluZyBzb21ldGhpbmcgdGhhdCBpc24ndCBhY3R1YWxseSBidWlsdCBpbnRvIGEgdGFyZ2V0IGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg2MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE0OjU2OjA3LjM4Njg4OTI3NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDYzMzI1NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3RfdnNvY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L01ha2VmaWxlPTY9dmhvc3Rfc2NzaS15IDo9IHNjc2kub1xcbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGUtNy1cXG5kcml2ZXJzL3Zob3N0L01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX1ZIT1NUX1ZTT0NLKSArPSB2aG9zdF92c29jay5vXFxuZHJpdmVycy92aG9zdC9NYWtlZmlsZTo5OnZob3N0X3Zzb2NrLXkgOj0gdnNvY2sub1xcbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGUtMTAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE0OjU2OjA3LjQ5MzIzMTU4MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTAwNTcxOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBhbiBleHBlcnQgdXNlcjpcblxuKipJbnZlc3RpZ2F0aW5nIHZob3N0LXZzb2NrIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIEkgc2VlIHRoYXQgYENPTkZJR19WSE9TVF9WU09DS2AgaXMgZmxhZ2dlZCBhcyBhIG5lY2Vzc2FyeSBjb21wb25lbnQuIFRoYXQncyBhIGdpdmVuLiBCdXQgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byB0aGUgcGFyZW50IG1vZHVsZSwgdGhlIGJyb2FkZXIgYENPTkZJR19WSE9TVGAgc2V0dGluZy4gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSByZWxhdGlvbnNoaXAgaGVyZS4gSXMgYENPTkZJR19WSE9TVGAgYWxzbyBhIHN0cmljdCByZXF1aXJlbWVudCBmb3IgYHZob3N0LXZzb2NrYCB0byBmdW5jdGlvbj8gT3IgaXMgaXQgb3B0aW9uYWwgYnV0IGhpZ2hseSByZWNvbW1lbmRlZD8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB3aXRoaW4gYENPTkZJR19WSE9TVGAgdGhhdCBhcmUgYWJzb2x1dGVseSBlc3NlbnRpYWw/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGVpdGhlciwgb3IgYm90aCwgb2YgdGhlc2UgZmVhdHVyZXMuIEl0IGlzIGltcG9ydGFudCB0byBrbm93IGlmIEkgaGF2ZSBhIGRlcGVuZGVuY3kgdHJlZSBoZXJlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMsIG9yIHNvdXJjZSBjb2RlLCB0byBmaWd1cmUgb3V0IHRoZXNlIHJlbGF0aW9uc2hpcHMgYW5kIG1ha2Ugc3VyZSB0aGlzIG5ldyBjb21wb25lbnQgaXMgcHJvcGVybHkgaW50ZWdyYXRlZC4gVGhpcyB1bmRlcnN0YW5kaW5nIGlzIGtleSBmb3IgYSBzdGFibGUgYW5kIG9wdGltaXplZCBzZXR1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDYzNywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE0OjU2OjEwLjk4MzI5NTcxMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDk0MjQ0NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3Qub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvTWFrZWZpbGU9MTQ9dmhvc3RfdmRwYS15IDo9IHZkcGEub1xcbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGUtMTUtXFxuZHJpdmVycy92aG9zdC9NYWtlZmlsZToxNjpvYmotJChDT05GSUdfVkhPU1QpXFx0Kz0gdmhvc3Qub1xcbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGUtMTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE0OjU2OjExLjEzMjczMjE2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTg4OTY4NzgyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSB0b3VjaGluZyB0aGUgdmhvc3QgYW5kIHZob3N0X3Zzb2NrIHN1YnN5c3RlbXMuIFRoZSBmaXJzdCB0aGluZyBJJ3ZlIGNvbmZpcm1lZCBpcyB0aGF0IGBDT05GSUdfVkhPU1RgIGFuZCBgQ09ORklHX1ZIT1NUX1ZTT0NLYCBhcmUgaW52b2x2ZWQuIE5vdywgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBmdW5jdGlvbnMgbW9zdCByZWxldmFudCBmb3IgZnV6emluZywgdXNpbmcgbXkgZXhwZXJ0aXNlIHRvIHByaW9yaXRpemUgaG90LXBhdGhzIGFuZCB0aG9zZSBsaWtlbHkgdG8gcmV2ZWFsIGludGVyZXN0aW5nIGJ1Z3MuXG5cblRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlOiBgdmhvc3Rfd29ya2Vyc19mcmVlYCwgYHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdGAsIGB2aG9zdF92c29ja19zdGFydGAsIGB2aG9zdF92c29ja19kcm9wX2JhY2tlbmRzYCwgYHZob3N0X3Zzb2NrX3N0b3BgLCBgdmhvc3RfdnNvY2tfZGV2X29wZW5gLCBgdmhvc3RfdnNvY2tfc2V0X2ZlYXR1cmVzYCwgYHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyYCwgYW5kIGB2aG9zdF92c29ja19kZXZfaW9jdGxgLlxuXG5HaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZXNlIHN5c3RlbXMsIGB2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3RgIGltbWVkaWF0ZWx5IHN0YW5kcyBvdXQgYXMgYSBwb3RlbnRpYWwgaG90LXBhdGg7IGZ1enppbmcgcGFja2V0IGhhbmRsaW5nIGlzIGFsd2F5cyBhIGdvb2QgaWRlYS4gSG93ZXZlciwgdGhlIG90aGVyIGZ1bmN0aW9ucyBhcmUgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rLCBlc3BlY2lhbGx5IHRob3NlIGludm9sdmVkIGluIGNvbnRyb2wgZmxvdyBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudDogYHZob3N0X3Zzb2NrX3N0YXJ0YCwgYHZob3N0X3Zzb2NrX3N0b3BgLCBgdmhvc3RfdnNvY2tfcmVzZXRfb3duZXJgLCBhbmQgYHZob3N0X3dvcmtlcnNfZnJlZWAg4oCTIHRoZXNlIHNlZW0gbGlrZSBnb29kIGluaXRpYWwgdGFyZ2V0cy4gYHZob3N0X3Zzb2NrX2Rldl9pb2N0bGAgaXMgYWxzbyB2ZXJ5IGludGVyZXN0aW5nLCBnaXZlbiBpdCdzIGEgY2VudHJhbCBjb250cm9sIHBvaW50LlxuXG5TbywgSSdtIGdvaW5nIHRvIGZvY3VzIG9uOlxuLSBgdmhvc3Rfd29ya2Vyc19mcmVlYFxuLSBgdmhvc3RfdnNvY2tfc3RhcnRgXG4tIGB2aG9zdF92c29ja19zdG9wYFxuLSBgdmhvc3RfdnNvY2tfcmVzZXRfb3duZXJgXG5cbk5vdywgdGhlIG5leHQgdGhpbmcgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWNjZXNzaWJsZSBleHRlcm5hbGx5IG9yIGludGVybmFsbHkuIEkndmUgY29uZmlybWVkIHRoYXQgYHZob3N0X3dvcmtlcnNfZnJlZWAgaXMgc3RhdGljIGluIGBkcml2ZXJzL3Zob3N0L3Zob3N0LmNgLCBhbmQgc28gYXJlIGB2aG9zdF92c29ja19zdGFydGAsIGB2aG9zdF92c29ja19zdG9wYCwgYW5kIGB2aG9zdF92c29ja19yZXNldF9vd25lcmAgaW4gYGRyaXZlcnMvdmhvc3QvdnNvY2suY2AuIFRoYXQgbWVhbnMgSSBoYXZlIHRvIHRyYWNlIGhvdyB0aGV5IGFyZSByZWFjaGVkLlxuXG5Pa2F5LCBsZXQncyB2ZXJpZnkgcmVhY2hhYmlsaXR5LiBgdmhvc3Rfd29ya2Vyc19mcmVlYCBpcyBjYWxsZWQgZnJvbSBgdmhvc3RfZGV2X2NsZWFudXBgLCB3aGljaCBnZXRzIGNhbGxlZCB3aGVuIGEgdmhvc3QgZGV2aWNlIGlzIGNsb3NlZCAtIHdoaWNoIGlzIGNvbW1vbiBlbm91Z2guIGB2aG9zdF92c29ja19zdGFydGAgaXMgdHJpZ2dlcmVkIGZyb20gYHZob3N0X3Zzb2NrX2Rldl9pb2N0bGAgb24sIGl0IGFwcGVhcnMsIGVpdGhlciBgVkhPU1RfVlNPQ0tfU0VUX1JVTk5JTkdgIG9yIGBWSE9TVF9WU09DS19TRVRfR1VFU1RfQ0lEYC4gQWgsIGFuZCBgdmhvc3RfdnNvY2tfcmVzZXRfb3duZXJgIGlzIGNhbGxlZCBmcm9tIGB2aG9zdF92c29ja19kZXZfaW9jdGxgIG9uIGBWSE9TVF9SRVNFVF9PV05FUmAuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGxhc3Qgb25lLiBZZXMsIHRoZSBwYXRjaCBpdHNlbGYgY2xlYXJseSBzaG93cyBgdmhvc3RfdnNvY2tfcmVzZXRfb3duZXJgIGlzIGluZGVlZCBjYWxsZWQgZnJvbSBgdmhvc3RfdnNvY2tfZGV2X2lvY3RsYCB3aGVuIHRoZSBgVkhPU1RfUkVTRVRfT1dORVJgIGNvbW1hbmQgaXMgaXNzdWVkLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHNob3VsZCBwcm9iYWJseSBub3cgZXhhbWluZSB0aGUgYHZob3N0X3Zzb2NrX2Rldl9pb2N0bGAgZnVuY3Rpb24gaW4gYGRyaXZlcnMvdmhvc3QvdnNvY2suY2AgbW9yZSBjbG9zZWx5IHRvIHVuZGVyc3RhbmQgYWxsIHRoZSBjb250cm9sIHBhdGhzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTg0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE0OjU2OjIxLjAyMjQyMzkyNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjQ0Mzc5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aG9zdF92c29ja19kZXZfaW9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC92c29jay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvdnNvY2suYz05MDY9c3RhdGljIGxvbmcgdmhvc3RfdnNvY2tfcmVzZXRfb3duZXIoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaylcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy05MjgtXFxuZHJpdmVycy92aG9zdC92c29jay5jOjkyOTpzdGF0aWMgbG9uZyB2aG9zdF92c29ja19kZXZfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBpb2N0bCxcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTMwLVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MTAxND1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF92c29ja19mb3BzID0ge1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTEwMTgtXFx0Lmxsc2Vla1xcdFxcdD0gbm9vcF9sbHNlZWssXFxuZHJpdmVycy92aG9zdC92c29jay5jOjEwMTk6XFx0LnVubG9ja2VkX2lvY3RsID0gdmhvc3RfdnNvY2tfZGV2X2lvY3RsLFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDIwLVxcdC5jb21wYXRfaW9jdGwgICA9IGNvbXBhdF9wdHJfaW9jdGwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE0OjU2OjIxLjEwODg3NTQ2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzk1NzgyMjk0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgVmhvc3QvVnNvY2sgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgY29yZSB2aG9zdCBhbmQgdmhvc3RfdnNvY2sgZnVuY3Rpb25hbGl0eSwgc28gaXQncyB3b3J0aCBhIGNsb3NlciBsb29rIGZvciBmdXp6aW5nIHB1cnBvc2VzLiBGaXJzdCwgSSBzZWUgYSBuZXcgYFZIT1NUX1JFU0VUX09XTkVSYCBiZWluZyBhZGRlZCB0byBgdmhvc3RfdnNvY2tfZGV2X2lvY3RsYC4gVGhhdCdzIHNpZ25pZmljYW50OyBpdCBpbXBsaWVzIGEgbmV3IG1lY2hhbmlzbSBmb3IgcmVzZXR0aW5nIG9yIHJlLW93bmluZyB2c29jayBkZXZpY2VzLCBsaWtlbHkgaW4gcmVzcG9uc2UgdG8gc29tZSBvcGVyYXRpb25hbCBzY2VuYXJpby5cblxuTmV4dCwgdGhlcmUncyBhIGZpeCBpbiBgdmhvc3Rfd29ya2Vyc19mcmVlYC4gVGhlIGltcGxpY2F0aW9uIGhlcmUgaXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgY2xlYW51cCBpc3N1ZSB3aGVyZSBhIHJlYWRlciB0aHJlYWQgY291bGQgc3RpbGwgYmUgYWN0aXZlIGV2ZW4gYWZ0ZXIgdGhlIHdvcmtlcnMgYXJlIHN1cHBvc2VkbHkgZnJlZWQuIFdlJ3ZlIGdvdCB0byBlbnN1cmUgdGhlIGZpeCBpcyByb2J1c3QuXG5cblRoZSBtb2RpZmljYXRpb24gdG8gYHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdGAgaXMgYWxzbyBub3Rld29ydGh5LiBUaGUgaW50cm9kdWN0aW9uIG9mIHRoZSBgZXZlcl9zdGFydGVkYCBmbGFnIGZvciBmYXN0LWZhaWxpbmcgdW50aWwgdGhlIGd1ZXN0IGVuYWJsZXMgdGhlIGRldmljZSBzdWdnZXN0cyBhIGNoYW5nZSBpbiBob3cgcGFja2V0cyBhcmUgaGFuZGxlZCBiZWZvcmUgdGhlIHZzb2NrIGRldmljZSBpcyBmdWxseSBpbml0aWFsaXplZC4gVGhpcyBtaWdodCBiZSBhIGNyaXRpY2FsIGFyZWEgZm9yIGVkZ2UtY2FzZSB0ZXN0aW5nLlxuXG5NeSBpbW1lZGlhdGUgZm9jdXMgc3ltYm9scyBiYXNlZCBvbiB0aGVzZSBjaGFuZ2VzIGFyZTpcblxuKiAgIGB2aG9zdF93b3JrZXJzX2ZyZWVgOiBiZWNhdXNlIG9mIHRoZSBjbGVhbnVwIGZpeC5cbiogICBgdmhvc3RfdnNvY2tfc3RhcnRgOiB0byB1bmRlcnN0YW5kIHRoZSBuZXcgaW5pdGlhbGl6YXRpb24gbG9naWMuXG4qICAgYHZob3N0X3Zzb2NrX3N0b3BgOiB0byBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXNldCBsb2dpYy5cbiogICBgdmhvc3RfdnNvY2tfcmVzZXRfb3duZXJgOiBkdWUgdG8gaXRzIGlvY3RsIGhhbmRsZXIuXG5cbkknbGwgYWxzbyBpbmNsdWRlIGB2aG9zdF92c29ja19kcm9wX2JhY2tlbmRzYCBhcyBpdCBpcyBjYWxsZWQgZnJvbSBib3RoIGB2aG9zdF92c29ja19zdG9wYCBhbmQgYHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyYC5cblxuSSB3aWxsIGJlIGVuYWJsaW5nIGBWSE9TVGAgYW5kIGBWSE9TVF9WU09DS2AgdG8gdGVzdCB0aGVzZSBjaGFuZ2VzLlxuXG5UaGlzIHBhdGNoIGlzIG1vZGlmeWluZyByZWFjaGFibGUga2VybmVsIGNvZGUsIHNvIGl0IG1ha2VzIGl0IGEgc3VpdGFibGUgY2FuZGlkYXRlIGZvciBmdXp6aW5nIHRvIGVuc3VyZSB0aGUgZml4ZXMgYXJlIGdvb2QuIE5vdywgbGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjIxLCJPdXRwdXRUb2tlbnMiOjE1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNDo1NjoyOS4wNjY3MDE5ODdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzc0OTY2MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZIT1NUXCIsXG4gICAgXCJWSE9TVF9WU09DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZob3N0X3dvcmtlcnNfZnJlZVwiLFxuICAgIFwidmhvc3RfdnNvY2tfc3RhcnRcIixcbiAgICBcInZob3N0X3Zzb2NrX3N0b3BcIixcbiAgICBcInZob3N0X3Zzb2NrX3Jlc2V0X293bmVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZob3N0IGFuZCB2aG9zdF92c29jayBkcml2ZXJzIHRvIGZpeCB3b3JrZXIgY2xlYW51cCBhbmQgdnNvY2sgcmVzZXQvc3RvcCBiZWhhdmlvci4gSXQgaW50cm9kdWNlcyBhIG5ldyBWSE9TVF9SRVNFVF9PV05FUiBpb2N0bCBoYW5kbGVyIGZvciB2c29jayBhbmQgY2hhbmdlcyB0aGUgcGFja2V0IHF1ZXVpbmcgbG9naWMgYmFzZWQgb24gYSBuZXcgZXZlcl9zdGFydGVkIGZsYWcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGtlcm5lbCBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSE9TVFwiLFxuICAgIFwiVkhPU1RfVlNPQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aG9zdF93b3JrZXJzX2ZyZWVcIixcbiAgICBcInZob3N0X3Zzb2NrX3N0YXJ0XCIsXG4gICAgXCJ2aG9zdF92c29ja19zdG9wXCIsXG4gICAgXCJ2aG9zdF92c29ja19yZXNldF9vd25lclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB2aG9zdCBhbmQgdmhvc3RfdnNvY2sgZHJpdmVycyB0byBmaXggd29ya2VyIGNsZWFudXAgYW5kIHZzb2NrIHJlc2V0L3N0b3AgYmVoYXZpb3IuIEl0IGludHJvZHVjZXMgYSBuZXcgVkhPU1RfUkVTRVRfT1dORVIgaW9jdGwgaGFuZGxlciBmb3IgdnNvY2sgYW5kIGNoYW5nZXMgdGhlIHBhY2tldCBxdWV1aW5nIGxvZ2ljIGJhc2VkIG9uIGEgbmV3IGV2ZXJfc3RhcnRlZCBmbGFnLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBrZXJuZWwgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrrfcf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-20 14:29:30 +0000 UTC FinishedAt: 2026-07-20 14:56:31 +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": "298bb2b8903323f6ef2eab4819a2e477765f0ff1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST", "VHOST_VSOCK" ], "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": "298bb2b8903323f6ef2eab4819a2e477765f0ff1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST", "VHOST_VSOCK" ], "series_id": "3d1a1353-343e-4d59-9c69-db789c50e5ca" }, "track": "KASAN", "fuzz": { "focus": [ "kvm", "net" ], "focus_symbols": [ "vhost_workers_free", "vhost_vsock_start", "vhost_vsock_stop", "vhost_vsock_reset_owner" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIwIDE0OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUJiMzNDssCiAgICAmIzM0O1ZIT1NUX1ZTT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmhvc3Rfd29ya2Vyc19mcmVlJiMzNDssCiAgICAmIzM0O3Zob3N0X3Zzb2NrX3N0YXJ0JiMzNDssCiAgICAmIzM0O3Zob3N0X3Zzb2NrX3N0b3AmIzM0OywKICAgICYjMzQ7dmhvc3RfdnNvY2tfcmVzZXRfb3duZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZob3N0IGFuZCB2aG9zdF92c29jayBkcml2ZXJzIHRvIGZpeCB3b3JrZXIgY2xlYW51cCBhbmQgdnNvY2sgcmVzZXQvc3RvcCBiZWhhdmlvci4gSXQgaW50cm9kdWNlcyBhIG5ldyBWSE9TVF9SRVNFVF9PV05FUiBpb2N0bCBoYW5kbGVyIGZvciB2c29jayBhbmQgY2hhbmdlcyB0aGUgcGFja2V0IHF1ZXVpbmcgbG9naWMgYmFzZWQgb24gYSBuZXcgZXZlcl9zdGFydGVkIGZsYWcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGtlcm5lbCBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNDo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGJjMDA3ZjViZTEzMWM3MjMwYjM0ODE5MzVmZjc2MTU4MTliNmNmN2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyMCAxNDo1NTo1NyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmMgYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmNcbmluZGV4IDRjNTI1YjNlMTZlYWQ4Li5kNmUyMzVjMjUyNTRjZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92aG9zdC92aG9zdC5jXG5AQCAtNzI5LDYgJiM0Mzs3MjksMTcgQEAgc3RhdGljIHZvaWQgdmhvc3Rfd29ya2Vyc19mcmVlKHN0cnVjdCB2aG9zdF9kZXYgKmRldilcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRldi1cdTAwM2VudnFzOyBpJiM0MzsmIzQzOylcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGRldi1cdTAwM2V2cXNbaV0tXHUwMDNld29ya2VyLCBOVUxMKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiB2aG9zdF92cV93b3JrX3F1ZXVlKCkgcmVhZHMgdnEtXHUwMDNld29ya2VyIHVuZGVyIHJjdV9yZWFkX2xvY2soKSwgc28gYVxuJiM0MztcdCAqIHJlYWRlciB0aGF0IGZldGNoZWQgYSB3b3JrZXIgYmVmb3JlIHdlIGNsZWFyZWQgdGhlIHBvaW50ZXJzIGFib3ZlXG4mIzQzO1x0ICogbWF5IHN0aWxsIGJlIHF1ZXVlaW5nIHdvcmsgb24gaXQuICBXYWl0IGZvciB0aG9zZSByZWFkZXJzIHRvXG4mIzQzO1x0ICogZmluaXNoLCB0aGVuIGZsdXNoIHNvIGFueSB3b3JrIHRoZXkgcXVldWVkIHJ1bnMgKGNsZWFyaW5nXG4mIzQzO1x0ICogVkhPU1RfV09SS19RVUVVRUQpIGJlZm9yZSB0aGUgd29ya2VycyBhcmUgZnJlZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3luY2hyb25pemVfcmN1KCk7XG4mIzQzO1x0dmhvc3RfZGV2X2ZsdXNoKGRldik7XG4mIzQzO1xuIFx0LypcbiBcdCAqIEZyZWUgdGhlIGRlZmF1bHQgd29ya2VyIHdlIGNyZWF0ZWQgYW5kIGNsZWFudXAgd29ya2VycyB1c2Vyc3BhY2VcbiBcdCAqIGNyZWF0ZWQgYnV0IGNvdWxkbiYjMzk7dCBjbGVhbiB1cCAoaXQgZm9yZ290IG9yIGNyYXNoZWQpLlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3QvdnNvY2suYyBiL2RyaXZlcnMvdmhvc3QvdnNvY2suY1xuaW5kZXggOWFhYWI2YmI4MDYxYzEuLjg2ZjI1ZmY4MDcyMmQzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC92c29jay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Zob3N0L3Zzb2NrLmNcbkBAIC02MSw2ICYjNDM7NjEsNyBAQCBzdHJ1Y3Qgdmhvc3RfdnNvY2sge1xuIFxuIFx0dTMyIGd1ZXN0X2NpZDtcbiBcdGJvb2wgc2VxcGFja2V0X2FsbG93O1xuJiM0MztcdGJvb2wgZXZlcl9zdGFydGVkOyAvKiBzZXQgb24gZmlyc3QgU0VUX1JVTk5JTkcoMSk7IG5ldmVyIGNsZWFyZWQgKi9cbiB9O1xuIFxuIHN0YXRpYyB1MzIgdmhvc3RfdHJhbnNwb3J0X2dldF9sb2NhbF9jaWQodm9pZClcbkBAIC0zMDIsMTcgJiM0MzszMDMsMTIgQEAgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldClcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXHR9XG4gXG4tXHQvKiBGYXN0LWZhaWwgaWYgdGhlIGd1ZXN0IGhhc24mIzM5O3QgZW5hYmxlZCB0aGUgUlggdnEgeWV0LiBRdWV1aW5nIHRoZSBwYWNrZXRcbi1cdCAqIGFuZCBtYWtpbmcgdGhlIGNhbGxlciB3YWl0IGlzIHBvaW50bGVzczogZXZlbiBpZiB0aGUgZ3Vlc3QgbWFuYWdlcyB0byBpbml0XG4tXHQgKiB3aXRoaW4gdGhlIHRpbWVvdXQsIGl0JiMzOTtsbCBpbW1lZGlhdGVseSByZXBseSB3aXRoIFJTVCwgYmVjYXVzZSB0aGVyZSYjMzk7cyBub1xuLVx0ICogbGlzdGVuZXIgb24gdGhlIHBvcnQgeWV0LlxuLVx0ICpcbi1cdCAqIHZob3N0X3ZxX2dldF9iYWNrZW5kKCkgd2l0aG91dCB2cS1cdTAwM2VtdXRleCBpcyBhY2NlcHRhYmxlIGhlcmU6IGxvY2tpbmdcbi1cdCAqIHRoZSBtdXRleCB3b3VsZCBiZSB0b28gZXhwZW5zaXZlIGluIHRoaXMgaG90IHBhdGgsIGFuZCB3ZSBhbHJlYWR5IGhhdmVcbi1cdCAqIGFsbCB0aGUgb3V0Y29tZXMgY292ZXJlZDogaWYgdGhlIGJhY2tlbmQgYmVjb21lcyBOVUxMIHJpZ2h0IGFmdGVyIHRoZSBjaGVjayxcbi1cdCAqIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCgpIHdpbGwgY2hlY2sgaXQgdW5kZXIgdGhlIG11dGV4IGFueXdheS5cbiYjNDM7XHQvKiBGYXN0LWZhaWwgdW50aWwgdGhlIGd1ZXN0IGZpcnN0IGVuYWJsZXMgdGhlIGRldmljZSAoU0VUX1JVTk5JTkcoMSkpLlxuJiM0MztcdCAqIEJlZm9yZSB0aGF0IHRoZXJlIGlzIG5vIGxpc3RlbmVyLCBzbyBxdWV1aW5nIGlzIHBvaW50bGVzcy5cbiYjNDM7XHQgKiAmIzM5O2V2ZXJfc3RhcnRlZCYjMzk7IGlzIG5ldmVyIGNsZWFyZWQsIHNvIG9uY2Ugd2UmIzM5O3JlIHVwIHdlIGtlZXAgcXVldWluZ1xuJiM0MztcdCAqIGFjcm9zcyBsYXRlciBzdG9wIC8gQ1BSLXBhdXNlIHdpbmRvd3MuXG4gXHQgKi9cbi1cdGlmICh1bmxpa2VseSghZGF0YV9yYWNlKHZob3N0X3ZxX2dldF9iYWNrZW5kKFx1MDAyNnZzb2NrLVx1MDAzZXZxc1tWU09DS19WUV9SWF0pKSkpIHtcbiYjNDM7XHRpZiAodW5saWtlbHkoIVJFQURfT05DRSh2c29jay1cdTAwM2VldmVyX3N0YXJ0ZWQpKSkge1xuIFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdHJldHVybiAtRUhPU1RVTlJFQUNIO1xuQEAgLTY0MCwxMSAmIzQzOzYzNiwyMyBAQCBzdGF0aWMgaW50IHZob3N0X3Zzb2NrX3N0YXJ0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2spXG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4gXHR9XG4gXG4mIzQzO1x0LyogU2V0ICYjMzk7ZXZlcl9zdGFydGVkJiMzOTsgZmxhZyBvbiB0aGUgZmlyc3Qgc3RhcnQ7IG5ldmVyIGNsZWFyZWQsIHNvIHNlbmRfcGt0XG4mIzQzO1x0ICoga2VlcHMgcXVldWluZyAoaW5zdGVhZCBvZiBmYXN0LWZhaWxpbmcpIG9uIGxhdGVyIHN0b3AgLyBDUFIgcGF1c2VzLlxuJiM0MztcdCAqL1xuJiM0MztcdFdSSVRFX09OQ0UodnNvY2stXHUwMDNlZXZlcl9zdGFydGVkLCB0cnVlKTtcbiYjNDM7XG4gXHQvKiBTb21lIHBhY2tldHMgbWF5IGhhdmUgYmVlbiBxdWV1ZWQgYmVmb3JlIHRoZSBkZXZpY2Ugd2FzIHN0YXJ0ZWQsXG4gXHQgKiBsZXQmIzM5O3Mga2ljayB0aGUgc2VuZCB3b3JrZXIgdG8gc2VuZCB0aGVtLlxuIFx0ICovXG4gXHR2aG9zdF92cV93b3JrX3F1ZXVlKFx1MDAyNnZzb2NrLVx1MDAzZXZxc1tWU09DS19WUV9SWF0sIFx1MDAyNnZzb2NrLVx1MDAzZXNlbmRfcGt0X3dvcmspO1xuIFxuJiM0MztcdC8qIFRoZSBndWVzdCBtYXkgaGF2ZSBhZGRlZCBUWCBidWZmZXJzIHdoaWxlIHRoZSBkZXZpY2Ugd2FzIHN0b3BwZWRcbiYjNDM7XHQgKiAoZS5nLiBhY3Jvc3MgVkhPU1RfUkVTRVRfT1dORVIpIGFuZCB0aGVpciBraWNrcyBnb3QgY29uc3VtZWQgYnlcbiYjNDM7XHQgKiB0aGUgTlVMTC1iYWNrZW5kIHdpbmRvdy4gIFJlLXNjYW4gdGhlIFRYIFZRLCBtaXJyb3JpbmcgdGhlIFJYXG4mIzQzO1x0ICogc2VuZC13b3JrZXIga2ljayBhYm92ZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR2aG9zdF9wb2xsX3F1ZXVlKFx1MDAyNnZzb2NrLVx1MDAzZXZxc1tWU09DS19WUV9UWF0ucG9sbCk7XG4mIzQzO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZzb2NrLVx1MDAzZWRldi5tdXRleCk7XG4gXHRyZXR1cm4gMDtcbiBcbkBAIC02NjQsOSAmIzQzOzY3MiwyNCBAQCBzdGF0aWMgaW50IHZob3N0X3Zzb2NrX3N0YXJ0KHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2spXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgaW50IHZob3N0X3Zzb2NrX3N0b3Aoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywgYm9vbCBjaGVja19vd25lcilcbiYjNDM7c3RhdGljIHZvaWQgdmhvc3RfdnNvY2tfZHJvcF9iYWNrZW5kcyhzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrKVxuIHtcbiYjNDM7XHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cTtcbiBcdHNpemVfdCBpO1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnZzb2NrLVx1MDAzZWRldi5tdXRleCk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUodnNvY2stXHUwMDNldnFzKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHZxID0gXHUwMDI2dnNvY2stXHUwMDNldnFzW2ldO1xuJiM0MztcbiYjNDM7XHRcdG11dGV4X2xvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuJiM0MztcdFx0dmhvc3RfdnFfc2V0X2JhY2tlbmQodnEsIE5VTEwpO1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgdmhvc3RfdnNvY2tfc3RvcChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLCBib29sIGNoZWNrX293bmVyKVxuJiM0Mzt7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2dnNvY2stXHUwMDNlZGV2Lm11dGV4KTtcbkBAIC02NzcsMTQgJiM0Mzs3MDAsNyBAQCBzdGF0aWMgaW50IHZob3N0X3Zzb2NrX3N0b3Aoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywgYm9vbCBjaGVja19vd25lcilcbiBcdFx0XHRnb3RvIGVycjtcbiBcdH1cbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUodnNvY2stXHUwMDNldnFzKTsgaSYjNDM7JiM0MzspIHtcbi1cdFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBcdTAwMjZ2c29jay1cdTAwM2V2cXNbaV07XG4tXG4tXHRcdG11dGV4X2xvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuLVx0XHR2aG9zdF92cV9zZXRfYmFja2VuZCh2cSwgTlVMTCk7XG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4tXHR9XG4tXG4mIzQzO1x0dmhvc3RfdnNvY2tfZHJvcF9iYWNrZW5kcyh2c29jayk7XG4gZXJyOlxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZzb2NrLVx1MDAzZWRldi5tdXRleCk7XG4gXHRyZXR1cm4gcmV0O1xuQEAgLTcyMCw2ICYjNDM7NzM2LDcgQEAgc3RhdGljIGludCB2aG9zdF92c29ja19kZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcbiBcdHZzb2NrLVx1MDAzZWd1ZXN0X2NpZCA9IDA7IC8qIG5vIENJRCBhc3NpZ25lZCB5ZXQgKi9cbiBcdHZzb2NrLVx1MDAzZXNlcXBhY2tldF9hbGxvdyA9IGZhbHNlO1xuJiM0MztcdHZzb2NrLVx1MDAzZWV2ZXJfc3RhcnRlZCA9IGZhbHNlO1xuIFxuIFx0YXRvbWljX3NldChcdTAwMjZ2c29jay1cdTAwM2VxdWV1ZWRfcmVwbGllcywgMCk7XG4gXG5AQCAtODg2LDYgJiM0Mzs5MDMsMjkgQEAgc3RhdGljIGludCB2aG9zdF92c29ja19zZXRfZmVhdHVyZXMoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywgdTY0IGZlYXR1cmVzKVxuIFx0cmV0dXJuIC1FRkFVTFQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgbG9uZyB2aG9zdF92c29ja19yZXNldF9vd25lcihzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHZob3N0X2lvdGxiICp1bWVtO1xuJiM0MztcdGxvbmcgZXJyO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnZzb2NrLVx1MDAzZWRldi5tdXRleCk7XG4mIzQzO1x0ZXJyID0gdmhvc3RfZGV2X2NoZWNrX293bmVyKFx1MDAyNnZzb2NrLVx1MDAzZWRldik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZG9uZTtcbiYjNDM7XHR1bWVtID0gdmhvc3RfZGV2X3Jlc2V0X293bmVyX3ByZXBhcmUoKTtcbiYjNDM7XHRpZiAoIXVtZW0pIHtcbiYjNDM7XHRcdGVyciA9IC1FTk9NRU07XG4mIzQzO1x0XHRnb3RvIGRvbmU7XG4mIzQzO1x0fVxuJiM0MztcdHZob3N0X3Zzb2NrX2Ryb3BfYmFja2VuZHModnNvY2spO1xuJiM0MztcdHZob3N0X3Zzb2NrX2ZsdXNoKHZzb2NrKTtcbiYjNDM7XHR2aG9zdF9kZXZfc3RvcChcdTAwMjZ2c29jay1cdTAwM2VkZXYpO1xuJiM0MztcdHZob3N0X2Rldl9yZXNldF9vd25lcihcdTAwMjZ2c29jay1cdTAwM2VkZXYsIHVtZW0pO1xuJiM0Mztkb25lOlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZ2c29jay1cdTAwM2VkZXYubXV0ZXgpO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGxvbmcgdmhvc3RfdnNvY2tfZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCBpbnQgaW9jdGwsXG4gXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgYXJnKVxuIHtcbkBAIC05MjksNiAmIzQzOzk2OSw4IEBAIHN0YXRpYyBsb25nIHZob3N0X3Zzb2NrX2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgaW50IGlvY3RsLFxuIFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdFx0dmhvc3Rfc2V0X2JhY2tlbmRfZmVhdHVyZXMoXHUwMDI2dnNvY2stXHUwMDNlZGV2LCBmZWF0dXJlcyk7XG4gXHRcdHJldHVybiAwO1xuJiM0MztcdGNhc2UgVkhPU1RfUkVTRVRfT1dORVI6XG4mIzQzO1x0XHRyZXR1cm4gdmhvc3RfdnNvY2tfcmVzZXRfb3duZXIodnNvY2spO1xuIFx0ZGVmYXVsdDpcbiBcdFx0bXV0ZXhfbG9jayhcdTAwMjZ2c29jay1cdTAwM2VkZXYubXV0ZXgpO1xuIFx0XHRyID0gdmhvc3RfZGV2X2lvY3RsKFx1MDAyNnZzb2NrLVx1MDAzZWRldiwgaW9jdGwsIGFyZ3ApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE0OjU2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUJiMzNDssCiAgICAmIzM0O1ZIT1NUX1ZTT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmhvc3Rfd29ya2Vyc19mcmVlJiMzNDssCiAgICAmIzM0O3Zob3N0X3Zzb2NrX3N0YXJ0JiMzNDssCiAgICAmIzM0O3Zob3N0X3Zzb2NrX3N0b3AmIzM0OywKICAgICYjMzQ7dmhvc3RfdnNvY2tfcmVzZXRfb3duZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZob3N0IGFuZCB2aG9zdF92c29jayBkcml2ZXJzIHRvIGZpeCB3b3JrZXIgY2xlYW51cCBhbmQgdnNvY2sgcmVzZXQvc3RvcCBiZWhhdmlvci4gSXQgaW50cm9kdWNlcyBhIG5ldyBWSE9TVF9SRVNFVF9PV05FUiBpb2N0bCBoYW5kbGVyIGZvciB2c29jayBhbmQgY2hhbmdlcyB0aGUgcGFja2V0IHF1ZXVpbmcgbG9naWMgYmFzZWQgb24gYSBuZXcgZXZlcl9zdGFydGVkIGZsYWcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGtlcm5lbCBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmMwMDdmNWJlMTMxYzcyMzBiMzQ4MTkzNWZmNzYxNTgxOWI2Y2Y3ZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDIwIDE0OjU1OjU3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92aG9zdC5jIGIvZHJpdmVycy92aG9zdC92aG9zdC5jCmluZGV4IDRjNTI1YjNlMTZlYWQ4Li5kNmUyMzVjMjUyNTRjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC92aG9zdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuYwpAQCAtNzI5LDYgJiM0Mzs3MjksMTcgQEAgc3RhdGljIHZvaWQgdmhvc3Rfd29ya2Vyc19mcmVlKHN0cnVjdCB2aG9zdF9kZXYgKmRldikKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBkZXYtJmd0O252cXM7IGkmIzQzOyYjNDM7KQogCQlyY3VfYXNzaWduX3BvaW50ZXIoZGV2LSZndDt2cXNbaV0tJmd0O3dvcmtlciwgTlVMTCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIHZob3N0X3ZxX3dvcmtfcXVldWUoKSByZWFkcyB2cS0mZ3Q7d29ya2VyIHVuZGVyIHJjdV9yZWFkX2xvY2soKSwgc28gYQomIzQzOwkgKiByZWFkZXIgdGhhdCBmZXRjaGVkIGEgd29ya2VyIGJlZm9yZSB3ZSBjbGVhcmVkIHRoZSBwb2ludGVycyBhYm92ZQomIzQzOwkgKiBtYXkgc3RpbGwgYmUgcXVldWVpbmcgd29yayBvbiBpdC4gIFdhaXQgZm9yIHRob3NlIHJlYWRlcnMgdG8KJiM0MzsJICogZmluaXNoLCB0aGVuIGZsdXNoIHNvIGFueSB3b3JrIHRoZXkgcXVldWVkIHJ1bnMgKGNsZWFyaW5nCiYjNDM7CSAqIFZIT1NUX1dPUktfUVVFVUVEKSBiZWZvcmUgdGhlIHdvcmtlcnMgYXJlIGZyZWVkLgomIzQzOwkgKi8KJiM0MzsJc3luY2hyb25pemVfcmN1KCk7CiYjNDM7CXZob3N0X2Rldl9mbHVzaChkZXYpOwomIzQzOwogCS8qCiAJICogRnJlZSB0aGUgZGVmYXVsdCB3b3JrZXIgd2UgY3JlYXRlZCBhbmQgY2xlYW51cCB3b3JrZXJzIHVzZXJzcGFjZQogCSAqIGNyZWF0ZWQgYnV0IGNvdWxkbiYjMzk7dCBjbGVhbiB1cCAoaXQgZm9yZ290IG9yIGNyYXNoZWQpLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92c29jay5jIGIvZHJpdmVycy92aG9zdC92c29jay5jCmluZGV4IDlhYWFiNmJiODA2MWMxLi44NmYyNWZmODA3MjJkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC92c29jay5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmhvc3QvdnNvY2suYwpAQCAtNjEsNiAmIzQzOzYxLDcgQEAgc3RydWN0IHZob3N0X3Zzb2NrIHsKIAogCXUzMiBndWVzdF9jaWQ7CiAJYm9vbCBzZXFwYWNrZXRfYWxsb3c7CiYjNDM7CWJvb2wgZXZlcl9zdGFydGVkOyAvKiBzZXQgb24gZmlyc3QgU0VUX1JVTk5JTkcoMSk7IG5ldmVyIGNsZWFyZWQgKi8KIH07CiAKIHN0YXRpYyB1MzIgdmhvc3RfdHJhbnNwb3J0X2dldF9sb2NhbF9jaWQodm9pZCkKQEAgLTMwMiwxNyAmIzQzOzMwMywxMiBAQCB2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0KQogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQkvKiBGYXN0LWZhaWwgaWYgdGhlIGd1ZXN0IGhhc24mIzM5O3QgZW5hYmxlZCB0aGUgUlggdnEgeWV0LiBRdWV1aW5nIHRoZSBwYWNrZXQKLQkgKiBhbmQgbWFraW5nIHRoZSBjYWxsZXIgd2FpdCBpcyBwb2ludGxlc3M6IGV2ZW4gaWYgdGhlIGd1ZXN0IG1hbmFnZXMgdG8gaW5pdAotCSAqIHdpdGhpbiB0aGUgdGltZW91dCwgaXQmIzM5O2xsIGltbWVkaWF0ZWx5IHJlcGx5IHdpdGggUlNULCBiZWNhdXNlIHRoZXJlJiMzOTtzIG5vCi0JICogbGlzdGVuZXIgb24gdGhlIHBvcnQgeWV0LgotCSAqCi0JICogdmhvc3RfdnFfZ2V0X2JhY2tlbmQoKSB3aXRob3V0IHZxLSZndDttdXRleCBpcyBhY2NlcHRhYmxlIGhlcmU6IGxvY2tpbmcKLQkgKiB0aGUgbXV0ZXggd291bGQgYmUgdG9vIGV4cGVuc2l2ZSBpbiB0aGlzIGhvdCBwYXRoLCBhbmQgd2UgYWxyZWFkeSBoYXZlCi0JICogYWxsIHRoZSBvdXRjb21lcyBjb3ZlcmVkOiBpZiB0aGUgYmFja2VuZCBiZWNvbWVzIE5VTEwgcmlnaHQgYWZ0ZXIgdGhlIGNoZWNrLAotCSAqIHZob3N0X3RyYW5zcG9ydF9kb19zZW5kX3BrdCgpIHdpbGwgY2hlY2sgaXQgdW5kZXIgdGhlIG11dGV4IGFueXdheS4KJiM0MzsJLyogRmFzdC1mYWlsIHVudGlsIHRoZSBndWVzdCBmaXJzdCBlbmFibGVzIHRoZSBkZXZpY2UgKFNFVF9SVU5OSU5HKDEpKS4KJiM0MzsJICogQmVmb3JlIHRoYXQgdGhlcmUgaXMgbm8gbGlzdGVuZXIsIHNvIHF1ZXVpbmcgaXMgcG9pbnRsZXNzLgomIzQzOwkgKiAmIzM5O2V2ZXJfc3RhcnRlZCYjMzk7IGlzIG5ldmVyIGNsZWFyZWQsIHNvIG9uY2Ugd2UmIzM5O3JlIHVwIHdlIGtlZXAgcXVldWluZwomIzQzOwkgKiBhY3Jvc3MgbGF0ZXIgc3RvcCAvIENQUi1wYXVzZSB3aW5kb3dzLgogCSAqLwotCWlmICh1bmxpa2VseSghZGF0YV9yYWNlKHZob3N0X3ZxX2dldF9iYWNrZW5kKCZhbXA7dnNvY2stJmd0O3Zxc1tWU09DS19WUV9SWF0pKSkpIHsKJiM0MzsJaWYgKHVubGlrZWx5KCFSRUFEX09OQ0UodnNvY2stJmd0O2V2ZXJfc3RhcnRlZCkpKSB7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIC1FSE9TVFVOUkVBQ0g7CkBAIC02NDAsMTEgJiM0Mzs2MzYsMjMgQEAgc3RhdGljIGludCB2aG9zdF92c29ja19zdGFydChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrKQogCQltdXRleF91bmxvY2soJmFtcDt2cS0mZ3Q7bXV0ZXgpOwogCX0KIAomIzQzOwkvKiBTZXQgJiMzOTtldmVyX3N0YXJ0ZWQmIzM5OyBmbGFnIG9uIHRoZSBmaXJzdCBzdGFydDsgbmV2ZXIgY2xlYXJlZCwgc28gc2VuZF9wa3QKJiM0MzsJICoga2VlcHMgcXVldWluZyAoaW5zdGVhZCBvZiBmYXN0LWZhaWxpbmcpIG9uIGxhdGVyIHN0b3AgLyBDUFIgcGF1c2VzLgomIzQzOwkgKi8KJiM0MzsJV1JJVEVfT05DRSh2c29jay0mZ3Q7ZXZlcl9zdGFydGVkLCB0cnVlKTsKJiM0MzsKIAkvKiBTb21lIHBhY2tldHMgbWF5IGhhdmUgYmVlbiBxdWV1ZWQgYmVmb3JlIHRoZSBkZXZpY2Ugd2FzIHN0YXJ0ZWQsCiAJICogbGV0JiMzOTtzIGtpY2sgdGhlIHNlbmQgd29ya2VyIHRvIHNlbmQgdGhlbS4KIAkgKi8KIAl2aG9zdF92cV93b3JrX3F1ZXVlKCZhbXA7dnNvY2stJmd0O3Zxc1tWU09DS19WUV9SWF0sICZhbXA7dnNvY2stJmd0O3NlbmRfcGt0X3dvcmspOwogCiYjNDM7CS8qIFRoZSBndWVzdCBtYXkgaGF2ZSBhZGRlZCBUWCBidWZmZXJzIHdoaWxlIHRoZSBkZXZpY2Ugd2FzIHN0b3BwZWQKJiM0MzsJICogKGUuZy4gYWNyb3NzIFZIT1NUX1JFU0VUX09XTkVSKSBhbmQgdGhlaXIga2lja3MgZ290IGNvbnN1bWVkIGJ5CiYjNDM7CSAqIHRoZSBOVUxMLWJhY2tlbmQgd2luZG93LiAgUmUtc2NhbiB0aGUgVFggVlEsIG1pcnJvcmluZyB0aGUgUlgKJiM0MzsJICogc2VuZC13b3JrZXIga2ljayBhYm92ZS4KJiM0MzsJICovCiYjNDM7CXZob3N0X3BvbGxfcXVldWUoJmFtcDt2c29jay0mZ3Q7dnFzW1ZTT0NLX1ZRX1RYXS5wb2xsKTsKJiM0MzsKIAltdXRleF91bmxvY2soJmFtcDt2c29jay0mZ3Q7ZGV2Lm11dGV4KTsKIAlyZXR1cm4gMDsKIApAQCAtNjY0LDkgJiM0Mzs2NzIsMjQgQEAgc3RhdGljIGludCB2aG9zdF92c29ja19zdGFydChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrKQogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgdmhvc3RfdnNvY2tfc3RvcChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLCBib29sIGNoZWNrX293bmVyKQomIzQzO3N0YXRpYyB2b2lkIHZob3N0X3Zzb2NrX2Ryb3BfYmFja2VuZHMoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaykKIHsKJiM0MzsJc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnE7CiAJc2l6ZV90IGk7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDt2c29jay0mZ3Q7ZGV2Lm11dGV4KTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUodnNvY2stJmd0O3Zxcyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl2cSA9ICZhbXA7dnNvY2stJmd0O3Zxc1tpXTsKJiM0MzsKJiM0MzsJCW11dGV4X2xvY2soJmFtcDt2cS0mZ3Q7bXV0ZXgpOwomIzQzOwkJdmhvc3RfdnFfc2V0X2JhY2tlbmQodnEsIE5VTEwpOwomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7dnEtJmd0O211dGV4KTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHZob3N0X3Zzb2NrX3N0b3Aoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywgYm9vbCBjaGVja19vd25lcikKJiM0Mzt7CiAJaW50IHJldCA9IDA7CiAKIAltdXRleF9sb2NrKCZhbXA7dnNvY2stJmd0O2Rldi5tdXRleCk7CkBAIC02NzcsMTQgJiM0Mzs3MDAsNyBAQCBzdGF0aWMgaW50IHZob3N0X3Zzb2NrX3N0b3Aoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywgYm9vbCBjaGVja19vd25lcikKIAkJCWdvdG8gZXJyOwogCX0KIAotCWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHZzb2NrLSZndDt2cXMpOyBpJiM0MzsmIzQzOykgewotCQlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9ICZhbXA7dnNvY2stJmd0O3Zxc1tpXTsKLQotCQltdXRleF9sb2NrKCZhbXA7dnEtJmd0O211dGV4KTsKLQkJdmhvc3RfdnFfc2V0X2JhY2tlbmQodnEsIE5VTEwpOwotCQltdXRleF91bmxvY2soJmFtcDt2cS0mZ3Q7bXV0ZXgpOwotCX0KLQomIzQzOwl2aG9zdF92c29ja19kcm9wX2JhY2tlbmRzKHZzb2NrKTsKIGVycjoKIAltdXRleF91bmxvY2soJmFtcDt2c29jay0mZ3Q7ZGV2Lm11dGV4KTsKIAlyZXR1cm4gcmV0OwpAQCAtNzIwLDYgJiM0Mzs3MzYsNyBAQCBzdGF0aWMgaW50IHZob3N0X3Zzb2NrX2Rldl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogCiAJdnNvY2stJmd0O2d1ZXN0X2NpZCA9IDA7IC8qIG5vIENJRCBhc3NpZ25lZCB5ZXQgKi8KIAl2c29jay0mZ3Q7c2VxcGFja2V0X2FsbG93ID0gZmFsc2U7CiYjNDM7CXZzb2NrLSZndDtldmVyX3N0YXJ0ZWQgPSBmYWxzZTsKIAogCWF0b21pY19zZXQoJmFtcDt2c29jay0mZ3Q7cXVldWVkX3JlcGxpZXMsIDApOwogCkBAIC04ODYsNiAmIzQzOzkwMywyOSBAQCBzdGF0aWMgaW50IHZob3N0X3Zzb2NrX3NldF9mZWF0dXJlcyhzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrLCB1NjQgZmVhdHVyZXMpCiAJcmV0dXJuIC1FRkFVTFQ7CiB9CiAKJiM0MztzdGF0aWMgbG9uZyB2aG9zdF92c29ja19yZXNldF9vd25lcihzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrKQomIzQzO3sKJiM0MzsJc3RydWN0IHZob3N0X2lvdGxiICp1bWVtOwomIzQzOwlsb25nIGVycjsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3Zzb2NrLSZndDtkZXYubXV0ZXgpOwomIzQzOwllcnIgPSB2aG9zdF9kZXZfY2hlY2tfb3duZXIoJmFtcDt2c29jay0mZ3Q7ZGV2KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZG9uZTsKJiM0MzsJdW1lbSA9IHZob3N0X2Rldl9yZXNldF9vd25lcl9wcmVwYXJlKCk7CiYjNDM7CWlmICghdW1lbSkgewomIzQzOwkJZXJyID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gZG9uZTsKJiM0MzsJfQomIzQzOwl2aG9zdF92c29ja19kcm9wX2JhY2tlbmRzKHZzb2NrKTsKJiM0MzsJdmhvc3RfdnNvY2tfZmx1c2godnNvY2spOwomIzQzOwl2aG9zdF9kZXZfc3RvcCgmYW1wO3Zzb2NrLSZndDtkZXYpOwomIzQzOwl2aG9zdF9kZXZfcmVzZXRfb3duZXIoJmFtcDt2c29jay0mZ3Q7ZGV2LCB1bWVtKTsKJiM0Mztkb25lOgomIzQzOwltdXRleF91bmxvY2soJmFtcDt2c29jay0mZ3Q7ZGV2Lm11dGV4KTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgbG9uZyB2aG9zdF92c29ja19kZXZfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBpb2N0bCwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgYXJnKQogewpAQCAtOTI5LDYgJiM0Mzs5NjksOCBAQCBzdGF0aWMgbG9uZyB2aG9zdF92c29ja19kZXZfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBpb2N0bCwKIAkJCXJldHVybiAtRU9QTk9UU1VQUDsKIAkJdmhvc3Rfc2V0X2JhY2tlbmRfZmVhdHVyZXMoJmFtcDt2c29jay0mZ3Q7ZGV2LCBmZWF0dXJlcyk7CiAJCXJldHVybiAwOwomIzQzOwljYXNlIFZIT1NUX1JFU0VUX09XTkVSOgomIzQzOwkJcmV0dXJuIHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyKHZzb2NrKTsKIAlkZWZhdWx0OgogCQltdXRleF9sb2NrKCZhbXA7dnNvY2stJmd0O2Rldi5tdXRleCk7CiAJCXIgPSB2aG9zdF9kZXZfaW9jdGwoJmFtcDt2c29jay0mZ3Q7ZGV2LCBpb2N0bCwgYXJncCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE0OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NjEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgdmhvc3Qvdmhvc3RfdnNvY2sgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIGB2aG9zdGAgYW5kIGB2aG9zdF92c29ja2AgZHJpdmVycy4gSXQgc2VlbXMgcHJldHR5IGZvY3VzZWQ6IGl0JiMzOTtzIG1ha2luZyBjaGFuZ2VzIHRvIGhvdyB2aG9zdCB3b3JrZXJzIGFyZSBjbGVhbmVkIHVwLCBzcGVjaWZpY2FsbHkgYWRkaW5nIGBzeW5jaHJvbml6ZV9yY3UoKWAgYW5kIGB2aG9zdF9kZXZfZmx1c2goZGV2KWAgaW4gYHZob3N0X3dvcmtlcnNfZnJlZWAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIHN1Z2dlc3RpbmcgcG90ZW50aWFsIGNvbmN1cnJlbmN5IG9yIHJlc291cmNlIG1hbmFnZW1lbnQgaW1wcm92ZW1lbnRzLCBvciBmaXhlcy4gQWxzbywgYSBmbGFnIGBldmVyX3N0YXJ0ZWRgIGlzIGJlaW5nIGludHJvZHVjZWQgaW4gYHZob3N0X3Zzb2NrYCwgYW5kIHRoZSBmYXN0LWZhaWwgbG9naWMgaW4gYHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdGAgaXMgZ2V0dGluZyBhIHJldmlldy4gRmluYWxseSwgdGhlcmUmIzM5O3MgYSBuZXcgZnVuY3Rpb24sIGB2aG9zdF92c29ja19yZXNldF9vd25lcmAsIGJlaW5nIGFkZGVkLCBwcmVzdW1hYmx5IHRvIGhhbmRsZSB0aGUgYFZIT1NUX1JFU0VUX09XTkVSYCBpb2N0bCBmb3IgdnNvY2suCgpGdW5jdGlvbmFsbHksIHRoaXMgaW1wYWN0cyB0aGUgdmhvc3QgYW5kIHZob3N0X3Zzb2NrIGRyaXZlcnMgZGlyZWN0bHkuIFNpbmNlIGl0JiMzOTtzIHRvdWNoaW5nIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBpbiBib3RoIGB2aG9zdGAgYW5kIGB2c29ja2AsIHRoaXMgaXMgZGVmaW5pdGVseSBhICYjMzQ7V29ydGhGdXp6aW5nPXRydWUmIzM0OyBzaXR1YXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzLCBlc3BlY2lhbGx5IGFyb3VuZCBjb25jdXJyZW5jeSBhbmQgcmVzb3VyY2UgY2xlYW51cC4KCk5vdywgYmVmb3JlIEkgZGlnIGluIGRlZXBlciwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIFdlIGtub3cgYGRyaXZlcnMvdmhvc3Qvdmhvc3QuY2AgbmVlZHMgYENPTkZJR19WSE9TVGAgYW5kIGBkcml2ZXJzL3Zob3N0L3Zzb2NrLmNgIG5lZWRzIGBDT05GSUdfVkhPU1RfVlNPQ0tgIGVuYWJsZWQuIEkmIzM5O2xsIHF1aWNrbHkgdmVyaWZ5IHRoaXMuIEdyZXBwZXIgb3IgY29kZXNlYXJjaC1kaXItaW5kZXggc2hvdWxkIGdpdmUgbWUgYSByZWxpYWJsZSBjb25maXJtYXRpb24gb2YgdGhhdC4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBzdGVwLCBidXQgSSBkb24mIzM5O3Qgd2FudCB0byB3YXN0ZSB0aW1lIGFuYWx5emluZyBzb21ldGhpbmcgdGhhdCBpc24mIzM5O3QgYWN0dWFsbHkgYnVpbHQgaW50byBhIHRhcmdldCBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTQ6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3RfdnNvY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvTWFrZWZpbGU9Nj12aG9zdF9zY3NpLXkgOj0gc2NzaS5vXG5kcml2ZXJzL3Zob3N0L01ha2VmaWxlLTctXG5kcml2ZXJzL3Zob3N0L01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX1ZIT1NUX1ZTT0NLKSAmIzQzOz0gdmhvc3RfdnNvY2sub1xuZHJpdmVycy92aG9zdC9NYWtlZmlsZTo5OnZob3N0X3Zzb2NrLXkgOj0gdnNvY2sub1xuZHJpdmVycy92aG9zdC9NYWtlZmlsZS0xMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjM3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYW4gZXhwZXJ0IHVzZXI6CgoqKkludmVzdGlnYXRpbmcgdmhvc3QtdnNvY2sgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIEkgc2VlIHRoYXQgYENPTkZJR19WSE9TVF9WU09DS2AgaXMgZmxhZ2dlZCBhcyBhIG5lY2Vzc2FyeSBjb21wb25lbnQuIFRoYXQmIzM5O3MgYSBnaXZlbi4gQnV0IG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gdGhlIHBhcmVudCBtb2R1bGUsIHRoZSBicm9hZGVyIGBDT05GSUdfVkhPU1RgIHNldHRpbmcuIEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCB0aGUgcmVsYXRpb25zaGlwIGhlcmUuIElzIGBDT05GSUdfVkhPU1RgIGFsc28gYSBzdHJpY3QgcmVxdWlyZW1lbnQgZm9yIGB2aG9zdC12c29ja2AgdG8gZnVuY3Rpb24/IE9yIGlzIGl0IG9wdGlvbmFsIGJ1dCBoaWdobHkgcmVjb21tZW5kZWQ/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgd2l0aGluIGBDT05GSUdfVkhPU1RgIHRoYXQgYXJlIGFic29sdXRlbHkgZXNzZW50aWFsPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBlaXRoZXIsIG9yIGJvdGgsIG9mIHRoZXNlIGZlYXR1cmVzLiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyBpZiBJIGhhdmUgYSBkZXBlbmRlbmN5IHRyZWUgaGVyZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcywgb3Igc291cmNlIGNvZGUsIHRvIGZpZ3VyZSBvdXQgdGhlc2UgcmVsYXRpb25zaGlwcyBhbmQgbWFrZSBzdXJlIHRoaXMgbmV3IGNvbXBvbmVudCBpcyBwcm9wZXJseSBpbnRlZ3JhdGVkLiBUaGlzIHVuZGVyc3RhbmRpbmcgaXMga2V5IGZvciBhIHN0YWJsZSBhbmQgb3B0aW1pemVkIHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE0OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0Lm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvTWFrZWZpbGU9MTQ9dmhvc3RfdmRwYS15IDo9IHZkcGEub1xuZHJpdmVycy92aG9zdC9NYWtlZmlsZS0xNS1cbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGU6MTY6b2JqLSQoQ09ORklHX1ZIT1NUKVx0JiM0Mzs9IHZob3N0Lm9cbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGUtMTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTQ6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk4NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDYzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgdG91Y2hpbmcgdGhlIHZob3N0IGFuZCB2aG9zdF92c29jayBzdWJzeXN0ZW1zLiBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7dmUgY29uZmlybWVkIGlzIHRoYXQgYENPTkZJR19WSE9TVGAgYW5kIGBDT05GSUdfVkhPU1RfVlNPQ0tgIGFyZSBpbnZvbHZlZC4gTm93LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGZ1bmN0aW9ucyBtb3N0IHJlbGV2YW50IGZvciBmdXp6aW5nLCB1c2luZyBteSBleHBlcnRpc2UgdG8gcHJpb3JpdGl6ZSBob3QtcGF0aHMgYW5kIHRob3NlIGxpa2VseSB0byByZXZlYWwgaW50ZXJlc3RpbmcgYnVncy4KClRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlOiBgdmhvc3Rfd29ya2Vyc19mcmVlYCwgYHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdGAsIGB2aG9zdF92c29ja19zdGFydGAsIGB2aG9zdF92c29ja19kcm9wX2JhY2tlbmRzYCwgYHZob3N0X3Zzb2NrX3N0b3BgLCBgdmhvc3RfdnNvY2tfZGV2X29wZW5gLCBgdmhvc3RfdnNvY2tfc2V0X2ZlYXR1cmVzYCwgYHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyYCwgYW5kIGB2aG9zdF92c29ja19kZXZfaW9jdGxgLgoKR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGVzZSBzeXN0ZW1zLCBgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0YCBpbW1lZGlhdGVseSBzdGFuZHMgb3V0IGFzIGEgcG90ZW50aWFsIGhvdC1wYXRoOyBmdXp6aW5nIHBhY2tldCBoYW5kbGluZyBpcyBhbHdheXMgYSBnb29kIGlkZWEuIEhvd2V2ZXIsIHRoZSBvdGhlciBmdW5jdGlvbnMgYXJlIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vaywgZXNwZWNpYWxseSB0aG9zZSBpbnZvbHZlZCBpbiBjb250cm9sIGZsb3cgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQ6IGB2aG9zdF92c29ja19zdGFydGAsIGB2aG9zdF92c29ja19zdG9wYCwgYHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyYCwgYW5kIGB2aG9zdF93b3JrZXJzX2ZyZWVgIOKAkyB0aGVzZSBzZWVtIGxpa2UgZ29vZCBpbml0aWFsIHRhcmdldHMuIGB2aG9zdF92c29ja19kZXZfaW9jdGxgIGlzIGFsc28gdmVyeSBpbnRlcmVzdGluZywgZ2l2ZW4gaXQmIzM5O3MgYSBjZW50cmFsIGNvbnRyb2wgcG9pbnQuCgpTbywgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbjoKLSBgdmhvc3Rfd29ya2Vyc19mcmVlYAotIGB2aG9zdF92c29ja19zdGFydGAKLSBgdmhvc3RfdnNvY2tfc3RvcGAKLSBgdmhvc3RfdnNvY2tfcmVzZXRfb3duZXJgCgpOb3csIHRoZSBuZXh0IHRoaW5nIGlzIHRvIGRldGVybWluZSBpZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjY2Vzc2libGUgZXh0ZXJuYWxseSBvciBpbnRlcm5hbGx5LiBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgdmhvc3Rfd29ya2Vyc19mcmVlYCBpcyBzdGF0aWMgaW4gYGRyaXZlcnMvdmhvc3Qvdmhvc3QuY2AsIGFuZCBzbyBhcmUgYHZob3N0X3Zzb2NrX3N0YXJ0YCwgYHZob3N0X3Zzb2NrX3N0b3BgLCBhbmQgYHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyYCBpbiBgZHJpdmVycy92aG9zdC92c29jay5jYC4gVGhhdCBtZWFucyBJIGhhdmUgdG8gdHJhY2UgaG93IHRoZXkgYXJlIHJlYWNoZWQuCgpPa2F5LCBsZXQmIzM5O3MgdmVyaWZ5IHJlYWNoYWJpbGl0eS4gYHZob3N0X3dvcmtlcnNfZnJlZWAgaXMgY2FsbGVkIGZyb20gYHZob3N0X2Rldl9jbGVhbnVwYCwgd2hpY2ggZ2V0cyBjYWxsZWQgd2hlbiBhIHZob3N0IGRldmljZSBpcyBjbG9zZWQgLSB3aGljaCBpcyBjb21tb24gZW5vdWdoLiBgdmhvc3RfdnNvY2tfc3RhcnRgIGlzIHRyaWdnZXJlZCBmcm9tIGB2aG9zdF92c29ja19kZXZfaW9jdGxgIG9uLCBpdCBhcHBlYXJzLCBlaXRoZXIgYFZIT1NUX1ZTT0NLX1NFVF9SVU5OSU5HYCBvciBgVkhPU1RfVlNPQ0tfU0VUX0dVRVNUX0NJRGAuIEFoLCBhbmQgYHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyYCBpcyBjYWxsZWQgZnJvbSBgdmhvc3RfdnNvY2tfZGV2X2lvY3RsYCBvbiBgVkhPU1RfUkVTRVRfT1dORVJgLgoKTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgbGFzdCBvbmUuIFllcywgdGhlIHBhdGNoIGl0c2VsZiBjbGVhcmx5IHNob3dzIGB2aG9zdF92c29ja19yZXNldF9vd25lcmAgaXMgaW5kZWVkIGNhbGxlZCBmcm9tIGB2aG9zdF92c29ja19kZXZfaW9jdGxgIHdoZW4gdGhlIGBWSE9TVF9SRVNFVF9PV05FUmAgY29tbWFuZCBpcyBpc3N1ZWQuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHNob3VsZCBwcm9iYWJseSBub3cgZXhhbWluZSB0aGUgYHZob3N0X3Zzb2NrX2Rldl9pb2N0bGAgZnVuY3Rpb24gaW4gYGRyaXZlcnMvdmhvc3QvdnNvY2suY2AgbW9yZSBjbG9zZWx5IHRvIHVuZGVyc3RhbmQgYWxsIHRoZSBjb250cm9sIHBhdGhzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE0OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zob3N0X3Zzb2NrX2Rldl9pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvdnNvY2suYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Zzb2NrLmM9OTA2PXN0YXRpYyBsb25nIHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyKHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2spXG4tLVxuZHJpdmVycy92aG9zdC92c29jay5jLTkyOC1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYzo5Mjk6c3RhdGljIGxvbmcgdmhvc3RfdnNvY2tfZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCBpbnQgaW9jdGwsXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTMwLVx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MTAxND1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF92c29ja19mb3BzID0ge1xuLS1cbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDE4LVx0Lmxsc2Vla1x0XHQ9IG5vb3BfbGxzZWVrLFxuZHJpdmVycy92aG9zdC92c29jay5jOjEwMTk6XHQudW5sb2NrZWRfaW9jdGwgPSB2aG9zdF92c29ja19kZXZfaW9jdGwsXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtMTAyMC1cdC5jb21wYXRfaW9jdGwgICA9IGNvbXBhdF9wdHJfaW9jdGwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTQ6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjYyMQoJCQkJCQkJb3V0cHV0OiAxNTUKCQkJCQkJCXRob3VnaHRzOiAzMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFZob3N0L1Zzb2NrIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgY29yZSB2aG9zdCBhbmQgdmhvc3RfdnNvY2sgZnVuY3Rpb25hbGl0eSwgc28gaXQmIzM5O3Mgd29ydGggYSBjbG9zZXIgbG9vayBmb3IgZnV6emluZyBwdXJwb3Nlcy4gRmlyc3QsIEkgc2VlIGEgbmV3IGBWSE9TVF9SRVNFVF9PV05FUmAgYmVpbmcgYWRkZWQgdG8gYHZob3N0X3Zzb2NrX2Rldl9pb2N0bGAuIFRoYXQmIzM5O3Mgc2lnbmlmaWNhbnQ7IGl0IGltcGxpZXMgYSBuZXcgbWVjaGFuaXNtIGZvciByZXNldHRpbmcgb3IgcmUtb3duaW5nIHZzb2NrIGRldmljZXMsIGxpa2VseSBpbiByZXNwb25zZSB0byBzb21lIG9wZXJhdGlvbmFsIHNjZW5hcmlvLgoKTmV4dCwgdGhlcmUmIzM5O3MgYSBmaXggaW4gYHZob3N0X3dvcmtlcnNfZnJlZWAuIFRoZSBpbXBsaWNhdGlvbiBoZXJlIGlzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIGNsZWFudXAgaXNzdWUgd2hlcmUgYSByZWFkZXIgdGhyZWFkIGNvdWxkIHN0aWxsIGJlIGFjdGl2ZSBldmVuIGFmdGVyIHRoZSB3b3JrZXJzIGFyZSBzdXBwb3NlZGx5IGZyZWVkLiBXZSYjMzk7dmUgZ290IHRvIGVuc3VyZSB0aGUgZml4IGlzIHJvYnVzdC4KClRoZSBtb2RpZmljYXRpb24gdG8gYHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdGAgaXMgYWxzbyBub3Rld29ydGh5LiBUaGUgaW50cm9kdWN0aW9uIG9mIHRoZSBgZXZlcl9zdGFydGVkYCBmbGFnIGZvciBmYXN0LWZhaWxpbmcgdW50aWwgdGhlIGd1ZXN0IGVuYWJsZXMgdGhlIGRldmljZSBzdWdnZXN0cyBhIGNoYW5nZSBpbiBob3cgcGFja2V0cyBhcmUgaGFuZGxlZCBiZWZvcmUgdGhlIHZzb2NrIGRldmljZSBpcyBmdWxseSBpbml0aWFsaXplZC4gVGhpcyBtaWdodCBiZSBhIGNyaXRpY2FsIGFyZWEgZm9yIGVkZ2UtY2FzZSB0ZXN0aW5nLgoKTXkgaW1tZWRpYXRlIGZvY3VzIHN5bWJvbHMgYmFzZWQgb24gdGhlc2UgY2hhbmdlcyBhcmU6CgoqICAgYHZob3N0X3dvcmtlcnNfZnJlZWA6IGJlY2F1c2Ugb2YgdGhlIGNsZWFudXAgZml4LgoqICAgYHZob3N0X3Zzb2NrX3N0YXJ0YDogdG8gdW5kZXJzdGFuZCB0aGUgbmV3IGluaXRpYWxpemF0aW9uIGxvZ2ljLgoqICAgYHZob3N0X3Zzb2NrX3N0b3BgOiB0byBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXNldCBsb2dpYy4KKiAgIGB2aG9zdF92c29ja19yZXNldF9vd25lcmA6IGR1ZSB0byBpdHMgaW9jdGwgaGFuZGxlci4KCkkmIzM5O2xsIGFsc28gaW5jbHVkZSBgdmhvc3RfdnNvY2tfZHJvcF9iYWNrZW5kc2AgYXMgaXQgaXMgY2FsbGVkIGZyb20gYm90aCBgdmhvc3RfdnNvY2tfc3RvcGAgYW5kIGB2aG9zdF92c29ja19yZXNldF9vd25lcmAuCgpJIHdpbGwgYmUgZW5hYmxpbmcgYFZIT1NUYCBhbmQgYFZIT1NUX1ZTT0NLYCB0byB0ZXN0IHRoZXNlIGNoYW5nZXMuCgpUaGlzIHBhdGNoIGlzIG1vZGlmeWluZyByZWFjaGFibGUga2VybmVsIGNvZGUsIHNvIGl0IG1ha2VzIGl0IGEgc3VpdGFibGUgY2FuZGlkYXRlIGZvciBmdXp6aW5nIHRvIGVuc3VyZSB0aGUgZml4ZXMgYXJlIGdvb2QuIE5vdywgbGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTQ6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUJiMzNDssCiAgICAmIzM0O1ZIT1NUX1ZTT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmhvc3Rfd29ya2Vyc19mcmVlJiMzNDssCiAgICAmIzM0O3Zob3N0X3Zzb2NrX3N0YXJ0JiMzNDssCiAgICAmIzM0O3Zob3N0X3Zzb2NrX3N0b3AmIzM0OywKICAgICYjMzQ7dmhvc3RfdnNvY2tfcmVzZXRfb3duZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZob3N0IGFuZCB2aG9zdF92c29jayBkcml2ZXJzIHRvIGZpeCB3b3JrZXIgY2xlYW51cCBhbmQgdnNvY2sgcmVzZXQvc3RvcCBiZWhhdmlvci4gSXQgaW50cm9kdWNlcyBhIG5ldyBWSE9TVF9SRVNFVF9PV05FUiBpb2N0bCBoYW5kbGVyIGZvciB2c29jayBhbmQgY2hhbmdlcyB0aGUgcGFja2V0IHF1ZXVpbmcgbG9naWMgYmFzZWQgb24gYSBuZXcgZXZlcl9zdGFydGVkIGZsYWcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGtlcm5lbCBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkhPU1QmIzM0OywKICAgICYjMzQ7VkhPU1RfVlNPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aG9zdF93b3JrZXJzX2ZyZWUmIzM0OywKICAgICYjMzQ7dmhvc3RfdnNvY2tfc3RhcnQmIzM0OywKICAgICYjMzQ7dmhvc3RfdnNvY2tfc3RvcCYjMzQ7LAogICAgJiMzNDt2aG9zdF92c29ja19yZXNldF9vd25lciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdmhvc3QgYW5kIHZob3N0X3Zzb2NrIGRyaXZlcnMgdG8gZml4IHdvcmtlciBjbGVhbnVwIGFuZCB2c29jayByZXNldC9zdG9wIGJlaGF2aW9yLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IFZIT1NUX1JFU0VUX09XTkVSIGlvY3RsIGhhbmRsZXIgZm9yIHZzb2NrIGFuZCBjaGFuZ2VzIHRoZSBwYWNrZXQgcXVldWluZyBsb2dpYyBiYXNlZCBvbiBhIG5ldyBldmVyX3N0YXJ0ZWQgZmxhZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUga2VybmVsIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjBUMTQ6NTU6NTkuNTgxODE4Mzg0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk2NjI0MDE2NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkhPU1RcIixcbiAgICBcIlZIT1NUX1ZTT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmhvc3Rfd29ya2Vyc19mcmVlXCIsXG4gICAgXCJ2aG9zdF92c29ja19zdGFydFwiLFxuICAgIFwidmhvc3RfdnNvY2tfc3RvcFwiLFxuICAgIFwidmhvc3RfdnNvY2tfcmVzZXRfb3duZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdmhvc3QgYW5kIHZob3N0X3Zzb2NrIGRyaXZlcnMgdG8gZml4IHdvcmtlciBjbGVhbnVwIGFuZCB2c29jayByZXNldC9zdG9wIGJlaGF2aW9yLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IFZIT1NUX1JFU0VUX09XTkVSIGlvY3RsIGhhbmRsZXIgZm9yIHZzb2NrIGFuZCBjaGFuZ2VzIHRoZSBwYWNrZXQgcXVldWluZyBsb2dpYyBiYXNlZCBvbiBhIG5ldyBldmVyX3N0YXJ0ZWQgZmxhZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUga2VybmVsIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNDo1NTo1OS41ODE4MzAyMjRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1NTIxMTI5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGJjMDA3ZjViZTEzMWM3MjMwYjM0ODE5MzVmZjc2MTU4MTliNmNmN2VcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgMjAgMTQ6NTU6NTcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92aG9zdC5jIGIvZHJpdmVycy92aG9zdC92aG9zdC5jXFxuaW5kZXggNGM1MjViM2UxNmVhZDguLmQ2ZTIzNWMyNTI1NGNlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuY1xcbisrKyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuY1xcbkBAIC03MjksNiArNzI5LDE3IEBAIHN0YXRpYyB2b2lkIHZob3N0X3dvcmtlcnNfZnJlZShzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYpXFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZGV2LVxcdTAwM2VudnFzOyBpKyspXFxuIFxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihkZXYtXFx1MDAzZXZxc1tpXS1cXHUwMDNld29ya2VyLCBOVUxMKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIHZob3N0X3ZxX3dvcmtfcXVldWUoKSByZWFkcyB2cS1cXHUwMDNld29ya2VyIHVuZGVyIHJjdV9yZWFkX2xvY2soKSwgc28gYVxcbitcXHQgKiByZWFkZXIgdGhhdCBmZXRjaGVkIGEgd29ya2VyIGJlZm9yZSB3ZSBjbGVhcmVkIHRoZSBwb2ludGVycyBhYm92ZVxcbitcXHQgKiBtYXkgc3RpbGwgYmUgcXVldWVpbmcgd29yayBvbiBpdC4gIFdhaXQgZm9yIHRob3NlIHJlYWRlcnMgdG9cXG4rXFx0ICogZmluaXNoLCB0aGVuIGZsdXNoIHNvIGFueSB3b3JrIHRoZXkgcXVldWVkIHJ1bnMgKGNsZWFyaW5nXFxuK1xcdCAqIFZIT1NUX1dPUktfUVVFVUVEKSBiZWZvcmUgdGhlIHdvcmtlcnMgYXJlIGZyZWVkLlxcbitcXHQgKi9cXG4rXFx0c3luY2hyb25pemVfcmN1KCk7XFxuK1xcdHZob3N0X2Rldl9mbHVzaChkZXYpO1xcbitcXG4gXFx0LypcXG4gXFx0ICogRnJlZSB0aGUgZGVmYXVsdCB3b3JrZXIgd2UgY3JlYXRlZCBhbmQgY2xlYW51cCB3b3JrZXJzIHVzZXJzcGFjZVxcbiBcXHQgKiBjcmVhdGVkIGJ1dCBjb3VsZG4ndCBjbGVhbiB1cCAoaXQgZm9yZ290IG9yIGNyYXNoZWQpLlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Zzb2NrLmMgYi9kcml2ZXJzL3Zob3N0L3Zzb2NrLmNcXG5pbmRleCA5YWFhYjZiYjgwNjFjMS4uODZmMjVmZjgwNzIyZDMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92aG9zdC92c29jay5jXFxuKysrIGIvZHJpdmVycy92aG9zdC92c29jay5jXFxuQEAgLTYxLDYgKzYxLDcgQEAgc3RydWN0IHZob3N0X3Zzb2NrIHtcXG4gXFxuIFxcdHUzMiBndWVzdF9jaWQ7XFxuIFxcdGJvb2wgc2VxcGFja2V0X2FsbG93O1xcbitcXHRib29sIGV2ZXJfc3RhcnRlZDsgLyogc2V0IG9uIGZpcnN0IFNFVF9SVU5OSU5HKDEpOyBuZXZlciBjbGVhcmVkICovXFxuIH07XFxuIFxcbiBzdGF0aWMgdTMyIHZob3N0X3RyYW5zcG9ydF9nZXRfbG9jYWxfY2lkKHZvaWQpXFxuQEAgLTMwMiwxNyArMzAzLDEyIEBAIHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQpXFxuIFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXHR9XFxuIFxcbi1cXHQvKiBGYXN0LWZhaWwgaWYgdGhlIGd1ZXN0IGhhc24ndCBlbmFibGVkIHRoZSBSWCB2cSB5ZXQuIFF1ZXVpbmcgdGhlIHBhY2tldFxcbi1cXHQgKiBhbmQgbWFraW5nIHRoZSBjYWxsZXIgd2FpdCBpcyBwb2ludGxlc3M6IGV2ZW4gaWYgdGhlIGd1ZXN0IG1hbmFnZXMgdG8gaW5pdFxcbi1cXHQgKiB3aXRoaW4gdGhlIHRpbWVvdXQsIGl0J2xsIGltbWVkaWF0ZWx5IHJlcGx5IHdpdGggUlNULCBiZWNhdXNlIHRoZXJlJ3Mgbm9cXG4tXFx0ICogbGlzdGVuZXIgb24gdGhlIHBvcnQgeWV0Llxcbi1cXHQgKlxcbi1cXHQgKiB2aG9zdF92cV9nZXRfYmFja2VuZCgpIHdpdGhvdXQgdnEtXFx1MDAzZW11dGV4IGlzIGFjY2VwdGFibGUgaGVyZTogbG9ja2luZ1xcbi1cXHQgKiB0aGUgbXV0ZXggd291bGQgYmUgdG9vIGV4cGVuc2l2ZSBpbiB0aGlzIGhvdCBwYXRoLCBhbmQgd2UgYWxyZWFkeSBoYXZlXFxuLVxcdCAqIGFsbCB0aGUgb3V0Y29tZXMgY292ZXJlZDogaWYgdGhlIGJhY2tlbmQgYmVjb21lcyBOVUxMIHJpZ2h0IGFmdGVyIHRoZSBjaGVjayxcXG4tXFx0ICogdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KCkgd2lsbCBjaGVjayBpdCB1bmRlciB0aGUgbXV0ZXggYW55d2F5LlxcbitcXHQvKiBGYXN0LWZhaWwgdW50aWwgdGhlIGd1ZXN0IGZpcnN0IGVuYWJsZXMgdGhlIGRldmljZSAoU0VUX1JVTk5JTkcoMSkpLlxcbitcXHQgKiBCZWZvcmUgdGhhdCB0aGVyZSBpcyBubyBsaXN0ZW5lciwgc28gcXVldWluZyBpcyBwb2ludGxlc3MuXFxuK1xcdCAqICdldmVyX3N0YXJ0ZWQnIGlzIG5ldmVyIGNsZWFyZWQsIHNvIG9uY2Ugd2UncmUgdXAgd2Uga2VlcCBxdWV1aW5nXFxuK1xcdCAqIGFjcm9zcyBsYXRlciBzdG9wIC8gQ1BSLXBhdXNlIHdpbmRvd3MuXFxuIFxcdCAqL1xcbi1cXHRpZiAodW5saWtlbHkoIWRhdGFfcmFjZSh2aG9zdF92cV9nZXRfYmFja2VuZChcXHUwMDI2dnNvY2stXFx1MDAzZXZxc1tWU09DS19WUV9SWF0pKSkpIHtcXG4rXFx0aWYgKHVubGlrZWx5KCFSRUFEX09OQ0UodnNvY2stXFx1MDAzZWV2ZXJfc3RhcnRlZCkpKSB7XFxuIFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0XFx0cmV0dXJuIC1FSE9TVFVOUkVBQ0g7XFxuQEAgLTY0MCwxMSArNjM2LDIzIEBAIHN0YXRpYyBpbnQgdmhvc3RfdnNvY2tfc3RhcnQoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaylcXG4gXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2cS1cXHUwMDNlbXV0ZXgpO1xcbiBcXHR9XFxuIFxcbitcXHQvKiBTZXQgJ2V2ZXJfc3RhcnRlZCcgZmxhZyBvbiB0aGUgZmlyc3Qgc3RhcnQ7IG5ldmVyIGNsZWFyZWQsIHNvIHNlbmRfcGt0XFxuK1xcdCAqIGtlZXBzIHF1ZXVpbmcgKGluc3RlYWQgb2YgZmFzdC1mYWlsaW5nKSBvbiBsYXRlciBzdG9wIC8gQ1BSIHBhdXNlcy5cXG4rXFx0ICovXFxuK1xcdFdSSVRFX09OQ0UodnNvY2stXFx1MDAzZWV2ZXJfc3RhcnRlZCwgdHJ1ZSk7XFxuK1xcbiBcXHQvKiBTb21lIHBhY2tldHMgbWF5IGhhdmUgYmVlbiBxdWV1ZWQgYmVmb3JlIHRoZSBkZXZpY2Ugd2FzIHN0YXJ0ZWQsXFxuIFxcdCAqIGxldCdzIGtpY2sgdGhlIHNlbmQgd29ya2VyIHRvIHNlbmQgdGhlbS5cXG4gXFx0ICovXFxuIFxcdHZob3N0X3ZxX3dvcmtfcXVldWUoXFx1MDAyNnZzb2NrLVxcdTAwM2V2cXNbVlNPQ0tfVlFfUlhdLCBcXHUwMDI2dnNvY2stXFx1MDAzZXNlbmRfcGt0X3dvcmspO1xcbiBcXG4rXFx0LyogVGhlIGd1ZXN0IG1heSBoYXZlIGFkZGVkIFRYIGJ1ZmZlcnMgd2hpbGUgdGhlIGRldmljZSB3YXMgc3RvcHBlZFxcbitcXHQgKiAoZS5nLiBhY3Jvc3MgVkhPU1RfUkVTRVRfT1dORVIpIGFuZCB0aGVpciBraWNrcyBnb3QgY29uc3VtZWQgYnlcXG4rXFx0ICogdGhlIE5VTEwtYmFja2VuZCB3aW5kb3cuICBSZS1zY2FuIHRoZSBUWCBWUSwgbWlycm9yaW5nIHRoZSBSWFxcbitcXHQgKiBzZW5kLXdvcmtlciBraWNrIGFib3ZlLlxcbitcXHQgKi9cXG4rXFx0dmhvc3RfcG9sbF9xdWV1ZShcXHUwMDI2dnNvY2stXFx1MDAzZXZxc1tWU09DS19WUV9UWF0ucG9sbCk7XFxuK1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYubXV0ZXgpO1xcbiBcXHRyZXR1cm4gMDtcXG4gXFxuQEAgLTY2NCw5ICs2NzIsMjQgQEAgc3RhdGljIGludCB2aG9zdF92c29ja19zdGFydChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrKVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHZob3N0X3Zzb2NrX3N0b3Aoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywgYm9vbCBjaGVja19vd25lcilcXG4rc3RhdGljIHZvaWQgdmhvc3RfdnNvY2tfZHJvcF9iYWNrZW5kcyhzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrKVxcbiB7XFxuK1xcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxO1xcbiBcXHRzaXplX3QgaTtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYubXV0ZXgpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUodnNvY2stXFx1MDAzZXZxcyk7IGkrKykge1xcbitcXHRcXHR2cSA9IFxcdTAwMjZ2c29jay1cXHUwMDNldnFzW2ldO1xcbitcXG4rXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2dnEtXFx1MDAzZW11dGV4KTtcXG4rXFx0XFx0dmhvc3RfdnFfc2V0X2JhY2tlbmQodnEsIE5VTEwpO1xcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnZxLVxcdTAwM2VtdXRleCk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludCB2aG9zdF92c29ja19zdG9wKHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssIGJvb2wgY2hlY2tfb3duZXIpXFxuK3tcXG4gXFx0aW50IHJldCA9IDA7XFxuIFxcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZ2c29jay1cXHUwMDNlZGV2Lm11dGV4KTtcXG5AQCAtNjc3LDE0ICs3MDAsNyBAQCBzdGF0aWMgaW50IHZob3N0X3Zzb2NrX3N0b3Aoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywgYm9vbCBjaGVja19vd25lcilcXG4gXFx0XFx0XFx0Z290byBlcnI7XFxuIFxcdH1cXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHZzb2NrLVxcdTAwM2V2cXMpOyBpKyspIHtcXG4tXFx0XFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBcXHUwMDI2dnNvY2stXFx1MDAzZXZxc1tpXTtcXG4tXFxuLVxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnZxLVxcdTAwM2VtdXRleCk7XFxuLVxcdFxcdHZob3N0X3ZxX3NldF9iYWNrZW5kKHZxLCBOVUxMKTtcXG4tXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2cS1cXHUwMDNlbXV0ZXgpO1xcbi1cXHR9XFxuLVxcbitcXHR2aG9zdF92c29ja19kcm9wX2JhY2tlbmRzKHZzb2NrKTtcXG4gZXJyOlxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYubXV0ZXgpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbkBAIC03MjAsNiArNzM2LDcgQEAgc3RhdGljIGludCB2aG9zdF92c29ja19kZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gXFxuIFxcdHZzb2NrLVxcdTAwM2VndWVzdF9jaWQgPSAwOyAvKiBubyBDSUQgYXNzaWduZWQgeWV0ICovXFxuIFxcdHZzb2NrLVxcdTAwM2VzZXFwYWNrZXRfYWxsb3cgPSBmYWxzZTtcXG4rXFx0dnNvY2stXFx1MDAzZWV2ZXJfc3RhcnRlZCA9IGZhbHNlO1xcbiBcXG4gXFx0YXRvbWljX3NldChcXHUwMDI2dnNvY2stXFx1MDAzZXF1ZXVlZF9yZXBsaWVzLCAwKTtcXG4gXFxuQEAgLTg4Niw2ICs5MDMsMjkgQEAgc3RhdGljIGludCB2aG9zdF92c29ja19zZXRfZmVhdHVyZXMoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywgdTY0IGZlYXR1cmVzKVxcbiBcXHRyZXR1cm4gLUVGQVVMVDtcXG4gfVxcbiBcXG4rc3RhdGljIGxvbmcgdmhvc3RfdnNvY2tfcmVzZXRfb3duZXIoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaylcXG4re1xcbitcXHRzdHJ1Y3Qgdmhvc3RfaW90bGIgKnVtZW07XFxuK1xcdGxvbmcgZXJyO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2dnNvY2stXFx1MDAzZWRldi5tdXRleCk7XFxuK1xcdGVyciA9IHZob3N0X2Rldl9jaGVja19vd25lcihcXHUwMDI2dnNvY2stXFx1MDAzZWRldik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZG9uZTtcXG4rXFx0dW1lbSA9IHZob3N0X2Rldl9yZXNldF9vd25lcl9wcmVwYXJlKCk7XFxuK1xcdGlmICghdW1lbSkge1xcbitcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbitcXHRcXHRnb3RvIGRvbmU7XFxuK1xcdH1cXG4rXFx0dmhvc3RfdnNvY2tfZHJvcF9iYWNrZW5kcyh2c29jayk7XFxuK1xcdHZob3N0X3Zzb2NrX2ZsdXNoKHZzb2NrKTtcXG4rXFx0dmhvc3RfZGV2X3N0b3AoXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYpO1xcbitcXHR2aG9zdF9kZXZfcmVzZXRfb3duZXIoXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYsIHVtZW0pO1xcbitkb25lOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYubXV0ZXgpO1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbiBzdGF0aWMgbG9uZyB2aG9zdF92c29ja19kZXZfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBpb2N0bCxcXG4gXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGFyZylcXG4ge1xcbkBAIC05MjksNiArOTY5LDggQEAgc3RhdGljIGxvbmcgdmhvc3RfdnNvY2tfZGV2X2lvY3RsKHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCBpbnQgaW9jdGwsXFxuIFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFx0XFx0dmhvc3Rfc2V0X2JhY2tlbmRfZmVhdHVyZXMoXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYsIGZlYXR1cmVzKTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuK1xcdGNhc2UgVkhPU1RfUkVTRVRfT1dORVI6XFxuK1xcdFxcdHJldHVybiB2aG9zdF92c29ja19yZXNldF9vd25lcih2c29jayk7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnZzb2NrLVxcdTAwM2VkZXYubXV0ZXgpO1xcbiBcXHRcXHRyID0gdmhvc3RfZGV2X2lvY3RsKFxcdTAwMjZ2c29jay1cXHUwMDNlZGV2LCBpb2N0bCwgYXJncCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE0OjU2OjAwLjIzNzc0NjEyNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkwMDY0NjEwNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkhPU1RcIixcbiAgICBcIlZIT1NUX1ZTT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmhvc3Rfd29ya2Vyc19mcmVlXCIsXG4gICAgXCJ2aG9zdF92c29ja19zdGFydFwiLFxuICAgIFwidmhvc3RfdnNvY2tfc3RvcFwiLFxuICAgIFwidmhvc3RfdnNvY2tfcmVzZXRfb3duZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdmhvc3QgYW5kIHZob3N0X3Zzb2NrIGRyaXZlcnMgdG8gZml4IHdvcmtlciBjbGVhbnVwIGFuZCB2c29jayByZXNldC9zdG9wIGJlaGF2aW9yLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IFZIT1NUX1JFU0VUX09XTkVSIGlvY3RsIGhhbmRsZXIgZm9yIHZzb2NrIGFuZCBjaGFuZ2VzIHRoZSBwYWNrZXQgcXVldWluZyBsb2dpYyBiYXNlZCBvbiBhIG5ldyBldmVyX3N0YXJ0ZWQgZmxhZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUga2VybmVsIGNvZGUgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGJjMDA3ZjViZTEzMWM3MjMwYjM0ODE5MzVmZjc2MTU4MTliNmNmN2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyMCAxNDo1NTo1NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuYyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuY1xuaW5kZXggNGM1MjViM2UxNmVhZDguLmQ2ZTIzNWMyNTI1NGNlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC92aG9zdC5jXG4rKysgYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmNcbkBAIC03MjksNiArNzI5LDE3IEBAIHN0YXRpYyB2b2lkIHZob3N0X3dvcmtlcnNfZnJlZShzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYpXG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXYtXHUwMDNlbnZxczsgaSsrKVxuIFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoZGV2LVx1MDAzZXZxc1tpXS1cdTAwM2V3b3JrZXIsIE5VTEwpO1xuK1xuK1x0LypcbitcdCAqIHZob3N0X3ZxX3dvcmtfcXVldWUoKSByZWFkcyB2cS1cdTAwM2V3b3JrZXIgdW5kZXIgcmN1X3JlYWRfbG9jaygpLCBzbyBhXG4rXHQgKiByZWFkZXIgdGhhdCBmZXRjaGVkIGEgd29ya2VyIGJlZm9yZSB3ZSBjbGVhcmVkIHRoZSBwb2ludGVycyBhYm92ZVxuK1x0ICogbWF5IHN0aWxsIGJlIHF1ZXVlaW5nIHdvcmsgb24gaXQuICBXYWl0IGZvciB0aG9zZSByZWFkZXJzIHRvXG4rXHQgKiBmaW5pc2gsIHRoZW4gZmx1c2ggc28gYW55IHdvcmsgdGhleSBxdWV1ZWQgcnVucyAoY2xlYXJpbmdcbitcdCAqIFZIT1NUX1dPUktfUVVFVUVEKSBiZWZvcmUgdGhlIHdvcmtlcnMgYXJlIGZyZWVkLlxuK1x0ICovXG4rXHRzeW5jaHJvbml6ZV9yY3UoKTtcbitcdHZob3N0X2Rldl9mbHVzaChkZXYpO1xuK1xuIFx0LypcbiBcdCAqIEZyZWUgdGhlIGRlZmF1bHQgd29ya2VyIHdlIGNyZWF0ZWQgYW5kIGNsZWFudXAgd29ya2VycyB1c2Vyc3BhY2VcbiBcdCAqIGNyZWF0ZWQgYnV0IGNvdWxkbid0IGNsZWFuIHVwIChpdCBmb3Jnb3Qgb3IgY3Jhc2hlZCkuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92c29jay5jIGIvZHJpdmVycy92aG9zdC92c29jay5jXG5pbmRleCA5YWFhYjZiYjgwNjFjMS4uODZmMjVmZjgwNzIyZDMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Zob3N0L3Zzb2NrLmNcbisrKyBiL2RyaXZlcnMvdmhvc3QvdnNvY2suY1xuQEAgLTYxLDYgKzYxLDcgQEAgc3RydWN0IHZob3N0X3Zzb2NrIHtcbiBcbiBcdHUzMiBndWVzdF9jaWQ7XG4gXHRib29sIHNlcXBhY2tldF9hbGxvdztcbitcdGJvb2wgZXZlcl9zdGFydGVkOyAvKiBzZXQgb24gZmlyc3QgU0VUX1JVTk5JTkcoMSk7IG5ldmVyIGNsZWFyZWQgKi9cbiB9O1xuIFxuIHN0YXRpYyB1MzIgdmhvc3RfdHJhbnNwb3J0X2dldF9sb2NhbF9jaWQodm9pZClcbkBAIC0zMDIsMTcgKzMwMywxMiBAQCB2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0KVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcdH1cbiBcbi1cdC8qIEZhc3QtZmFpbCBpZiB0aGUgZ3Vlc3QgaGFzbid0IGVuYWJsZWQgdGhlIFJYIHZxIHlldC4gUXVldWluZyB0aGUgcGFja2V0XG4tXHQgKiBhbmQgbWFraW5nIHRoZSBjYWxsZXIgd2FpdCBpcyBwb2ludGxlc3M6IGV2ZW4gaWYgdGhlIGd1ZXN0IG1hbmFnZXMgdG8gaW5pdFxuLVx0ICogd2l0aGluIHRoZSB0aW1lb3V0LCBpdCdsbCBpbW1lZGlhdGVseSByZXBseSB3aXRoIFJTVCwgYmVjYXVzZSB0aGVyZSdzIG5vXG4tXHQgKiBsaXN0ZW5lciBvbiB0aGUgcG9ydCB5ZXQuXG4tXHQgKlxuLVx0ICogdmhvc3RfdnFfZ2V0X2JhY2tlbmQoKSB3aXRob3V0IHZxLVx1MDAzZW11dGV4IGlzIGFjY2VwdGFibGUgaGVyZTogbG9ja2luZ1xuLVx0ICogdGhlIG11dGV4IHdvdWxkIGJlIHRvbyBleHBlbnNpdmUgaW4gdGhpcyBob3QgcGF0aCwgYW5kIHdlIGFscmVhZHkgaGF2ZVxuLVx0ICogYWxsIHRoZSBvdXRjb21lcyBjb3ZlcmVkOiBpZiB0aGUgYmFja2VuZCBiZWNvbWVzIE5VTEwgcmlnaHQgYWZ0ZXIgdGhlIGNoZWNrLFxuLVx0ICogdmhvc3RfdHJhbnNwb3J0X2RvX3NlbmRfcGt0KCkgd2lsbCBjaGVjayBpdCB1bmRlciB0aGUgbXV0ZXggYW55d2F5LlxuK1x0LyogRmFzdC1mYWlsIHVudGlsIHRoZSBndWVzdCBmaXJzdCBlbmFibGVzIHRoZSBkZXZpY2UgKFNFVF9SVU5OSU5HKDEpKS5cbitcdCAqIEJlZm9yZSB0aGF0IHRoZXJlIGlzIG5vIGxpc3RlbmVyLCBzbyBxdWV1aW5nIGlzIHBvaW50bGVzcy5cbitcdCAqICdldmVyX3N0YXJ0ZWQnIGlzIG5ldmVyIGNsZWFyZWQsIHNvIG9uY2Ugd2UncmUgdXAgd2Uga2VlcCBxdWV1aW5nXG4rXHQgKiBhY3Jvc3MgbGF0ZXIgc3RvcCAvIENQUi1wYXVzZSB3aW5kb3dzLlxuIFx0ICovXG4tXHRpZiAodW5saWtlbHkoIWRhdGFfcmFjZSh2aG9zdF92cV9nZXRfYmFja2VuZChcdTAwMjZ2c29jay1cdTAwM2V2cXNbVlNPQ0tfVlFfUlhdKSkpKSB7XG4rXHRpZiAodW5saWtlbHkoIVJFQURfT05DRSh2c29jay1cdTAwM2VldmVyX3N0YXJ0ZWQpKSkge1xuIFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdHJldHVybiAtRUhPU1RVTlJFQUNIO1xuQEAgLTY0MCwxMSArNjM2LDIzIEBAIHN0YXRpYyBpbnQgdmhvc3RfdnNvY2tfc3RhcnQoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaylcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbiBcdH1cbiBcbitcdC8qIFNldCAnZXZlcl9zdGFydGVkJyBmbGFnIG9uIHRoZSBmaXJzdCBzdGFydDsgbmV2ZXIgY2xlYXJlZCwgc28gc2VuZF9wa3RcbitcdCAqIGtlZXBzIHF1ZXVpbmcgKGluc3RlYWQgb2YgZmFzdC1mYWlsaW5nKSBvbiBsYXRlciBzdG9wIC8gQ1BSIHBhdXNlcy5cbitcdCAqL1xuK1x0V1JJVEVfT05DRSh2c29jay1cdTAwM2VldmVyX3N0YXJ0ZWQsIHRydWUpO1xuK1xuIFx0LyogU29tZSBwYWNrZXRzIG1heSBoYXZlIGJlZW4gcXVldWVkIGJlZm9yZSB0aGUgZGV2aWNlIHdhcyBzdGFydGVkLFxuIFx0ICogbGV0J3Mga2ljayB0aGUgc2VuZCB3b3JrZXIgdG8gc2VuZCB0aGVtLlxuIFx0ICovXG4gXHR2aG9zdF92cV93b3JrX3F1ZXVlKFx1MDAyNnZzb2NrLVx1MDAzZXZxc1tWU09DS19WUV9SWF0sIFx1MDAyNnZzb2NrLVx1MDAzZXNlbmRfcGt0X3dvcmspO1xuIFxuK1x0LyogVGhlIGd1ZXN0IG1heSBoYXZlIGFkZGVkIFRYIGJ1ZmZlcnMgd2hpbGUgdGhlIGRldmljZSB3YXMgc3RvcHBlZFxuK1x0ICogKGUuZy4gYWNyb3NzIFZIT1NUX1JFU0VUX09XTkVSKSBhbmQgdGhlaXIga2lja3MgZ290IGNvbnN1bWVkIGJ5XG4rXHQgKiB0aGUgTlVMTC1iYWNrZW5kIHdpbmRvdy4gIFJlLXNjYW4gdGhlIFRYIFZRLCBtaXJyb3JpbmcgdGhlIFJYXG4rXHQgKiBzZW5kLXdvcmtlciBraWNrIGFib3ZlLlxuK1x0ICovXG4rXHR2aG9zdF9wb2xsX3F1ZXVlKFx1MDAyNnZzb2NrLVx1MDAzZXZxc1tWU09DS19WUV9UWF0ucG9sbCk7XG4rXG4gXHRtdXRleF91bmxvY2soXHUwMDI2dnNvY2stXHUwMDNlZGV2Lm11dGV4KTtcbiBcdHJldHVybiAwO1xuIFxuQEAgLTY2NCw5ICs2NzIsMjQgQEAgc3RhdGljIGludCB2aG9zdF92c29ja19zdGFydChzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGludCB2aG9zdF92c29ja19zdG9wKHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssIGJvb2wgY2hlY2tfb3duZXIpXG4rc3RhdGljIHZvaWQgdmhvc3RfdnNvY2tfZHJvcF9iYWNrZW5kcyhzdHJ1Y3Qgdmhvc3RfdnNvY2sgKnZzb2NrKVxuIHtcbitcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxO1xuIFx0c2l6ZV90IGk7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnZzb2NrLVx1MDAzZWRldi5tdXRleCk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHZzb2NrLVx1MDAzZXZxcyk7IGkrKykge1xuK1x0XHR2cSA9IFx1MDAyNnZzb2NrLVx1MDAzZXZxc1tpXTtcbitcbitcdFx0bXV0ZXhfbG9jayhcdTAwMjZ2cS1cdTAwM2VtdXRleCk7XG4rXHRcdHZob3N0X3ZxX3NldF9iYWNrZW5kKHZxLCBOVUxMKTtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbitcdH1cbit9XG4rXG4rc3RhdGljIGludCB2aG9zdF92c29ja19zdG9wKHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2ssIGJvb2wgY2hlY2tfb3duZXIpXG4re1xuIFx0aW50IHJldCA9IDA7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNnZzb2NrLVx1MDAzZWRldi5tdXRleCk7XG5AQCAtNjc3LDE0ICs3MDAsNyBAQCBzdGF0aWMgaW50IHZob3N0X3Zzb2NrX3N0b3Aoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywgYm9vbCBjaGVja19vd25lcilcbiBcdFx0XHRnb3RvIGVycjtcbiBcdH1cbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUodnNvY2stXHUwMDNldnFzKTsgaSsrKSB7XG4tXHRcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gXHUwMDI2dnNvY2stXHUwMDNldnFzW2ldO1xuLVxuLVx0XHRtdXRleF9sb2NrKFx1MDAyNnZxLVx1MDAzZW11dGV4KTtcbi1cdFx0dmhvc3RfdnFfc2V0X2JhY2tlbmQodnEsIE5VTEwpO1xuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2dnEtXHUwMDNlbXV0ZXgpO1xuLVx0fVxuLVxuK1x0dmhvc3RfdnNvY2tfZHJvcF9iYWNrZW5kcyh2c29jayk7XG4gZXJyOlxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnZzb2NrLVx1MDAzZWRldi5tdXRleCk7XG4gXHRyZXR1cm4gcmV0O1xuQEAgLTcyMCw2ICs3MzYsNyBAQCBzdGF0aWMgaW50IHZob3N0X3Zzb2NrX2Rldl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIFxuIFx0dnNvY2stXHUwMDNlZ3Vlc3RfY2lkID0gMDsgLyogbm8gQ0lEIGFzc2lnbmVkIHlldCAqL1xuIFx0dnNvY2stXHUwMDNlc2VxcGFja2V0X2FsbG93ID0gZmFsc2U7XG4rXHR2c29jay1cdTAwM2VldmVyX3N0YXJ0ZWQgPSBmYWxzZTtcbiBcbiBcdGF0b21pY19zZXQoXHUwMDI2dnNvY2stXHUwMDNlcXVldWVkX3JlcGxpZXMsIDApO1xuIFxuQEAgLTg4Niw2ICs5MDMsMjkgQEAgc3RhdGljIGludCB2aG9zdF92c29ja19zZXRfZmVhdHVyZXMoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaywgdTY0IGZlYXR1cmVzKVxuIFx0cmV0dXJuIC1FRkFVTFQ7XG4gfVxuIFxuK3N0YXRpYyBsb25nIHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyKHN0cnVjdCB2aG9zdF92c29jayAqdnNvY2spXG4re1xuK1x0c3RydWN0IHZob3N0X2lvdGxiICp1bWVtO1xuK1x0bG9uZyBlcnI7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnZzb2NrLVx1MDAzZWRldi5tdXRleCk7XG4rXHRlcnIgPSB2aG9zdF9kZXZfY2hlY2tfb3duZXIoXHUwMDI2dnNvY2stXHUwMDNlZGV2KTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZG9uZTtcbitcdHVtZW0gPSB2aG9zdF9kZXZfcmVzZXRfb3duZXJfcHJlcGFyZSgpO1xuK1x0aWYgKCF1bWVtKSB7XG4rXHRcdGVyciA9IC1FTk9NRU07XG4rXHRcdGdvdG8gZG9uZTtcbitcdH1cbitcdHZob3N0X3Zzb2NrX2Ryb3BfYmFja2VuZHModnNvY2spO1xuK1x0dmhvc3RfdnNvY2tfZmx1c2godnNvY2spO1xuK1x0dmhvc3RfZGV2X3N0b3AoXHUwMDI2dnNvY2stXHUwMDNlZGV2KTtcbitcdHZob3N0X2Rldl9yZXNldF9vd25lcihcdTAwMjZ2c29jay1cdTAwM2VkZXYsIHVtZW0pO1xuK2RvbmU6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2dnNvY2stXHUwMDNlZGV2Lm11dGV4KTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuIHN0YXRpYyBsb25nIHZob3N0X3Zzb2NrX2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgaW50IGlvY3RsLFxuIFx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGFyZylcbiB7XG5AQCAtOTI5LDYgKzk2OSw4IEBAIHN0YXRpYyBsb25nIHZob3N0X3Zzb2NrX2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgaW50IGlvY3RsLFxuIFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdFx0dmhvc3Rfc2V0X2JhY2tlbmRfZmVhdHVyZXMoXHUwMDI2dnNvY2stXHUwMDNlZGV2LCBmZWF0dXJlcyk7XG4gXHRcdHJldHVybiAwO1xuK1x0Y2FzZSBWSE9TVF9SRVNFVF9PV05FUjpcbitcdFx0cmV0dXJuIHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyKHZzb2NrKTtcbiBcdGRlZmF1bHQ6XG4gXHRcdG11dGV4X2xvY2soXHUwMDI2dnNvY2stXHUwMDNlZGV2Lm11dGV4KTtcbiBcdFx0ciA9IHZob3N0X2Rldl9pb2N0bChcdTAwMjZ2c29jay1cdTAwM2VkZXYsIGlvY3RsLCBhcmdwKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE0OjU2OjAwLjIzNzc0ODMyNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNDkxMzY4MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgdmhvc3Qvdmhvc3RfdnNvY2sgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBgdmhvc3RgIGFuZCBgdmhvc3RfdnNvY2tgIGRyaXZlcnMuIEl0IHNlZW1zIHByZXR0eSBmb2N1c2VkOiBpdCdzIG1ha2luZyBjaGFuZ2VzIHRvIGhvdyB2aG9zdCB3b3JrZXJzIGFyZSBjbGVhbmVkIHVwLCBzcGVjaWZpY2FsbHkgYWRkaW5nIGBzeW5jaHJvbml6ZV9yY3UoKWAgYW5kIGB2aG9zdF9kZXZfZmx1c2goZGV2KWAgaW4gYHZob3N0X3dvcmtlcnNfZnJlZWAuIFRoYXQncyBpbnRlcmVzdGluZywgc3VnZ2VzdGluZyBwb3RlbnRpYWwgY29uY3VycmVuY3kgb3IgcmVzb3VyY2UgbWFuYWdlbWVudCBpbXByb3ZlbWVudHMsIG9yIGZpeGVzLiBBbHNvLCBhIGZsYWcgYGV2ZXJfc3RhcnRlZGAgaXMgYmVpbmcgaW50cm9kdWNlZCBpbiBgdmhvc3RfdnNvY2tgLCBhbmQgdGhlIGZhc3QtZmFpbCBsb2dpYyBpbiBgdmhvc3RfdHJhbnNwb3J0X3NlbmRfcGt0YCBpcyBnZXR0aW5nIGEgcmV2aWV3LiBGaW5hbGx5LCB0aGVyZSdzIGEgbmV3IGZ1bmN0aW9uLCBgdmhvc3RfdnNvY2tfcmVzZXRfb3duZXJgLCBiZWluZyBhZGRlZCwgcHJlc3VtYWJseSB0byBoYW5kbGUgdGhlIGBWSE9TVF9SRVNFVF9PV05FUmAgaW9jdGwgZm9yIHZzb2NrLlxuXG5GdW5jdGlvbmFsbHksIHRoaXMgaW1wYWN0cyB0aGUgdmhvc3QgYW5kIHZob3N0X3Zzb2NrIGRyaXZlcnMgZGlyZWN0bHkuIFNpbmNlIGl0J3MgdG91Y2hpbmcgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGluIGJvdGggYHZob3N0YCBhbmQgYHZzb2NrYCwgdGhpcyBpcyBkZWZpbml0ZWx5IGEgXCJXb3J0aEZ1enppbmc9dHJ1ZVwiIHNpdHVhdGlvbi4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcywgZXNwZWNpYWxseSBhcm91bmQgY29uY3VycmVuY3kgYW5kIHJlc291cmNlIGNsZWFudXAuXG5cbk5vdywgYmVmb3JlIEkgZGlnIGluIGRlZXBlciwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIFdlIGtub3cgYGRyaXZlcnMvdmhvc3Qvdmhvc3QuY2AgbmVlZHMgYENPTkZJR19WSE9TVGAgYW5kIGBkcml2ZXJzL3Zob3N0L3Zzb2NrLmNgIG5lZWRzIGBDT05GSUdfVkhPU1RfVlNPQ0tgIGVuYWJsZWQuIEknbGwgcXVpY2tseSB2ZXJpZnkgdGhpcy4gR3JlcHBlciBvciBjb2Rlc2VhcmNoLWRpci1pbmRleCBzaG91bGQgZ2l2ZSBtZSBhIHJlbGlhYmxlIGNvbmZpcm1hdGlvbiBvZiB0aGF0LiBJdCdzIGEgZnVuZGFtZW50YWwgc3RlcCwgYnV0IEkgZG9uJ3Qgd2FudCB0byB3YXN0ZSB0aW1lIGFuYWx5emluZyBzb21ldGhpbmcgdGhhdCBpc24ndCBhY3R1YWxseSBidWlsdCBpbnRvIGEgdGFyZ2V0IGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg2MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE0OjU2OjA3LjM4Njg4OTI3NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDYzMzI1NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3RfdnNvY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L01ha2VmaWxlPTY9dmhvc3Rfc2NzaS15IDo9IHNjc2kub1xcbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGUtNy1cXG5kcml2ZXJzL3Zob3N0L01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX1ZIT1NUX1ZTT0NLKSArPSB2aG9zdF92c29jay5vXFxuZHJpdmVycy92aG9zdC9NYWtlZmlsZTo5OnZob3N0X3Zzb2NrLXkgOj0gdnNvY2sub1xcbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGUtMTAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE0OjU2OjA3LjQ5MzIzMTU4MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTAwNTcxOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBhbiBleHBlcnQgdXNlcjpcblxuKipJbnZlc3RpZ2F0aW5nIHZob3N0LXZzb2NrIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIEkgc2VlIHRoYXQgYENPTkZJR19WSE9TVF9WU09DS2AgaXMgZmxhZ2dlZCBhcyBhIG5lY2Vzc2FyeSBjb21wb25lbnQuIFRoYXQncyBhIGdpdmVuLiBCdXQgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byB0aGUgcGFyZW50IG1vZHVsZSwgdGhlIGJyb2FkZXIgYENPTkZJR19WSE9TVGAgc2V0dGluZy4gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIHRoZSByZWxhdGlvbnNoaXAgaGVyZS4gSXMgYENPTkZJR19WSE9TVGAgYWxzbyBhIHN0cmljdCByZXF1aXJlbWVudCBmb3IgYHZob3N0LXZzb2NrYCB0byBmdW5jdGlvbj8gT3IgaXMgaXQgb3B0aW9uYWwgYnV0IGhpZ2hseSByZWNvbW1lbmRlZD8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB3aXRoaW4gYENPTkZJR19WSE9TVGAgdGhhdCBhcmUgYWJzb2x1dGVseSBlc3NlbnRpYWw/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGVpdGhlciwgb3IgYm90aCwgb2YgdGhlc2UgZmVhdHVyZXMuIEl0IGlzIGltcG9ydGFudCB0byBrbm93IGlmIEkgaGF2ZSBhIGRlcGVuZGVuY3kgdHJlZSBoZXJlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMsIG9yIHNvdXJjZSBjb2RlLCB0byBmaWd1cmUgb3V0IHRoZXNlIHJlbGF0aW9uc2hpcHMgYW5kIG1ha2Ugc3VyZSB0aGlzIG5ldyBjb21wb25lbnQgaXMgcHJvcGVybHkgaW50ZWdyYXRlZC4gVGhpcyB1bmRlcnN0YW5kaW5nIGlzIGtleSBmb3IgYSBzdGFibGUgYW5kIG9wdGltaXplZCBzZXR1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDYzNywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE0OjU2OjEwLjk4MzI5NTcxMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDk0MjQ0NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3Qub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvTWFrZWZpbGU9MTQ9dmhvc3RfdmRwYS15IDo9IHZkcGEub1xcbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGUtMTUtXFxuZHJpdmVycy92aG9zdC9NYWtlZmlsZToxNjpvYmotJChDT05GSUdfVkhPU1QpXFx0Kz0gdmhvc3Qub1xcbmRyaXZlcnMvdmhvc3QvTWFrZWZpbGUtMTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE0OjU2OjExLjEzMjczMjE2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTg4OTY4NzgyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSB0b3VjaGluZyB0aGUgdmhvc3QgYW5kIHZob3N0X3Zzb2NrIHN1YnN5c3RlbXMuIFRoZSBmaXJzdCB0aGluZyBJJ3ZlIGNvbmZpcm1lZCBpcyB0aGF0IGBDT05GSUdfVkhPU1RgIGFuZCBgQ09ORklHX1ZIT1NUX1ZTT0NLYCBhcmUgaW52b2x2ZWQuIE5vdywgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBmdW5jdGlvbnMgbW9zdCByZWxldmFudCBmb3IgZnV6emluZywgdXNpbmcgbXkgZXhwZXJ0aXNlIHRvIHByaW9yaXRpemUgaG90LXBhdGhzIGFuZCB0aG9zZSBsaWtlbHkgdG8gcmV2ZWFsIGludGVyZXN0aW5nIGJ1Z3MuXG5cblRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYXJlOiBgdmhvc3Rfd29ya2Vyc19mcmVlYCwgYHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdGAsIGB2aG9zdF92c29ja19zdGFydGAsIGB2aG9zdF92c29ja19kcm9wX2JhY2tlbmRzYCwgYHZob3N0X3Zzb2NrX3N0b3BgLCBgdmhvc3RfdnNvY2tfZGV2X29wZW5gLCBgdmhvc3RfdnNvY2tfc2V0X2ZlYXR1cmVzYCwgYHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyYCwgYW5kIGB2aG9zdF92c29ja19kZXZfaW9jdGxgLlxuXG5HaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZXNlIHN5c3RlbXMsIGB2aG9zdF90cmFuc3BvcnRfc2VuZF9wa3RgIGltbWVkaWF0ZWx5IHN0YW5kcyBvdXQgYXMgYSBwb3RlbnRpYWwgaG90LXBhdGg7IGZ1enppbmcgcGFja2V0IGhhbmRsaW5nIGlzIGFsd2F5cyBhIGdvb2QgaWRlYS4gSG93ZXZlciwgdGhlIG90aGVyIGZ1bmN0aW9ucyBhcmUgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rLCBlc3BlY2lhbGx5IHRob3NlIGludm9sdmVkIGluIGNvbnRyb2wgZmxvdyBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudDogYHZob3N0X3Zzb2NrX3N0YXJ0YCwgYHZob3N0X3Zzb2NrX3N0b3BgLCBgdmhvc3RfdnNvY2tfcmVzZXRfb3duZXJgLCBhbmQgYHZob3N0X3dvcmtlcnNfZnJlZWAg4oCTIHRoZXNlIHNlZW0gbGlrZSBnb29kIGluaXRpYWwgdGFyZ2V0cy4gYHZob3N0X3Zzb2NrX2Rldl9pb2N0bGAgaXMgYWxzbyB2ZXJ5IGludGVyZXN0aW5nLCBnaXZlbiBpdCdzIGEgY2VudHJhbCBjb250cm9sIHBvaW50LlxuXG5TbywgSSdtIGdvaW5nIHRvIGZvY3VzIG9uOlxuLSBgdmhvc3Rfd29ya2Vyc19mcmVlYFxuLSBgdmhvc3RfdnNvY2tfc3RhcnRgXG4tIGB2aG9zdF92c29ja19zdG9wYFxuLSBgdmhvc3RfdnNvY2tfcmVzZXRfb3duZXJgXG5cbk5vdywgdGhlIG5leHQgdGhpbmcgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWNjZXNzaWJsZSBleHRlcm5hbGx5IG9yIGludGVybmFsbHkuIEkndmUgY29uZmlybWVkIHRoYXQgYHZob3N0X3dvcmtlcnNfZnJlZWAgaXMgc3RhdGljIGluIGBkcml2ZXJzL3Zob3N0L3Zob3N0LmNgLCBhbmQgc28gYXJlIGB2aG9zdF92c29ja19zdGFydGAsIGB2aG9zdF92c29ja19zdG9wYCwgYW5kIGB2aG9zdF92c29ja19yZXNldF9vd25lcmAgaW4gYGRyaXZlcnMvdmhvc3QvdnNvY2suY2AuIFRoYXQgbWVhbnMgSSBoYXZlIHRvIHRyYWNlIGhvdyB0aGV5IGFyZSByZWFjaGVkLlxuXG5Pa2F5LCBsZXQncyB2ZXJpZnkgcmVhY2hhYmlsaXR5LiBgdmhvc3Rfd29ya2Vyc19mcmVlYCBpcyBjYWxsZWQgZnJvbSBgdmhvc3RfZGV2X2NsZWFudXBgLCB3aGljaCBnZXRzIGNhbGxlZCB3aGVuIGEgdmhvc3QgZGV2aWNlIGlzIGNsb3NlZCAtIHdoaWNoIGlzIGNvbW1vbiBlbm91Z2guIGB2aG9zdF92c29ja19zdGFydGAgaXMgdHJpZ2dlcmVkIGZyb20gYHZob3N0X3Zzb2NrX2Rldl9pb2N0bGAgb24sIGl0IGFwcGVhcnMsIGVpdGhlciBgVkhPU1RfVlNPQ0tfU0VUX1JVTk5JTkdgIG9yIGBWSE9TVF9WU09DS19TRVRfR1VFU1RfQ0lEYC4gQWgsIGFuZCBgdmhvc3RfdnNvY2tfcmVzZXRfb3duZXJgIGlzIGNhbGxlZCBmcm9tIGB2aG9zdF92c29ja19kZXZfaW9jdGxgIG9uIGBWSE9TVF9SRVNFVF9PV05FUmAuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGxhc3Qgb25lLiBZZXMsIHRoZSBwYXRjaCBpdHNlbGYgY2xlYXJseSBzaG93cyBgdmhvc3RfdnNvY2tfcmVzZXRfb3duZXJgIGlzIGluZGVlZCBjYWxsZWQgZnJvbSBgdmhvc3RfdnNvY2tfZGV2X2lvY3RsYCB3aGVuIHRoZSBgVkhPU1RfUkVTRVRfT1dORVJgIGNvbW1hbmQgaXMgaXNzdWVkLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHNob3VsZCBwcm9iYWJseSBub3cgZXhhbWluZSB0aGUgYHZob3N0X3Zzb2NrX2Rldl9pb2N0bGAgZnVuY3Rpb24gaW4gYGRyaXZlcnMvdmhvc3QvdnNvY2suY2AgbW9yZSBjbG9zZWx5IHRvIHVuZGVyc3RhbmQgYWxsIHRoZSBjb250cm9sIHBhdGhzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTg0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE0OjU2OjIxLjAyMjQyMzkyNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjQ0Mzc5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aG9zdF92c29ja19kZXZfaW9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC92c29jay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3QvdnNvY2suYz05MDY9c3RhdGljIGxvbmcgdmhvc3RfdnNvY2tfcmVzZXRfb3duZXIoc3RydWN0IHZob3N0X3Zzb2NrICp2c29jaylcXG4tLVxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy05MjgtXFxuZHJpdmVycy92aG9zdC92c29jay5jOjkyOTpzdGF0aWMgbG9uZyB2aG9zdF92c29ja19kZXZfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBpb2N0bCxcXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmMtOTMwLVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Zzb2NrLmM9MTAxND1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF92c29ja19mb3BzID0ge1xcbi0tXFxuZHJpdmVycy92aG9zdC92c29jay5jLTEwMTgtXFx0Lmxsc2Vla1xcdFxcdD0gbm9vcF9sbHNlZWssXFxuZHJpdmVycy92aG9zdC92c29jay5jOjEwMTk6XFx0LnVubG9ja2VkX2lvY3RsID0gdmhvc3RfdnNvY2tfZGV2X2lvY3RsLFxcbmRyaXZlcnMvdmhvc3QvdnNvY2suYy0xMDIwLVxcdC5jb21wYXRfaW9jdGwgICA9IGNvbXBhdF9wdHJfaW9jdGwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE0OjU2OjIxLjEwODg3NTQ2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzk1NzgyMjk0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgVmhvc3QvVnNvY2sgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgY29yZSB2aG9zdCBhbmQgdmhvc3RfdnNvY2sgZnVuY3Rpb25hbGl0eSwgc28gaXQncyB3b3J0aCBhIGNsb3NlciBsb29rIGZvciBmdXp6aW5nIHB1cnBvc2VzLiBGaXJzdCwgSSBzZWUgYSBuZXcgYFZIT1NUX1JFU0VUX09XTkVSYCBiZWluZyBhZGRlZCB0byBgdmhvc3RfdnNvY2tfZGV2X2lvY3RsYC4gVGhhdCdzIHNpZ25pZmljYW50OyBpdCBpbXBsaWVzIGEgbmV3IG1lY2hhbmlzbSBmb3IgcmVzZXR0aW5nIG9yIHJlLW93bmluZyB2c29jayBkZXZpY2VzLCBsaWtlbHkgaW4gcmVzcG9uc2UgdG8gc29tZSBvcGVyYXRpb25hbCBzY2VuYXJpby5cblxuTmV4dCwgdGhlcmUncyBhIGZpeCBpbiBgdmhvc3Rfd29ya2Vyc19mcmVlYC4gVGhlIGltcGxpY2F0aW9uIGhlcmUgaXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgY2xlYW51cCBpc3N1ZSB3aGVyZSBhIHJlYWRlciB0aHJlYWQgY291bGQgc3RpbGwgYmUgYWN0aXZlIGV2ZW4gYWZ0ZXIgdGhlIHdvcmtlcnMgYXJlIHN1cHBvc2VkbHkgZnJlZWQuIFdlJ3ZlIGdvdCB0byBlbnN1cmUgdGhlIGZpeCBpcyByb2J1c3QuXG5cblRoZSBtb2RpZmljYXRpb24gdG8gYHZob3N0X3RyYW5zcG9ydF9zZW5kX3BrdGAgaXMgYWxzbyBub3Rld29ydGh5LiBUaGUgaW50cm9kdWN0aW9uIG9mIHRoZSBgZXZlcl9zdGFydGVkYCBmbGFnIGZvciBmYXN0LWZhaWxpbmcgdW50aWwgdGhlIGd1ZXN0IGVuYWJsZXMgdGhlIGRldmljZSBzdWdnZXN0cyBhIGNoYW5nZSBpbiBob3cgcGFja2V0cyBhcmUgaGFuZGxlZCBiZWZvcmUgdGhlIHZzb2NrIGRldmljZSBpcyBmdWxseSBpbml0aWFsaXplZC4gVGhpcyBtaWdodCBiZSBhIGNyaXRpY2FsIGFyZWEgZm9yIGVkZ2UtY2FzZSB0ZXN0aW5nLlxuXG5NeSBpbW1lZGlhdGUgZm9jdXMgc3ltYm9scyBiYXNlZCBvbiB0aGVzZSBjaGFuZ2VzIGFyZTpcblxuKiAgIGB2aG9zdF93b3JrZXJzX2ZyZWVgOiBiZWNhdXNlIG9mIHRoZSBjbGVhbnVwIGZpeC5cbiogICBgdmhvc3RfdnNvY2tfc3RhcnRgOiB0byB1bmRlcnN0YW5kIHRoZSBuZXcgaW5pdGlhbGl6YXRpb24gbG9naWMuXG4qICAgYHZob3N0X3Zzb2NrX3N0b3BgOiB0byBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXNldCBsb2dpYy5cbiogICBgdmhvc3RfdnNvY2tfcmVzZXRfb3duZXJgOiBkdWUgdG8gaXRzIGlvY3RsIGhhbmRsZXIuXG5cbkknbGwgYWxzbyBpbmNsdWRlIGB2aG9zdF92c29ja19kcm9wX2JhY2tlbmRzYCBhcyBpdCBpcyBjYWxsZWQgZnJvbSBib3RoIGB2aG9zdF92c29ja19zdG9wYCBhbmQgYHZob3N0X3Zzb2NrX3Jlc2V0X293bmVyYC5cblxuSSB3aWxsIGJlIGVuYWJsaW5nIGBWSE9TVGAgYW5kIGBWSE9TVF9WU09DS2AgdG8gdGVzdCB0aGVzZSBjaGFuZ2VzLlxuXG5UaGlzIHBhdGNoIGlzIG1vZGlmeWluZyByZWFjaGFibGUga2VybmVsIGNvZGUsIHNvIGl0IG1ha2VzIGl0IGEgc3VpdGFibGUgY2FuZGlkYXRlIGZvciBmdXp6aW5nIHRvIGVuc3VyZSB0aGUgZml4ZXMgYXJlIGdvb2QuIE5vdywgbGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjIxLCJPdXRwdXRUb2tlbnMiOjE1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNDo1NjoyOS4wNjY3MDE5ODdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzc0OTY2MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZIT1NUXCIsXG4gICAgXCJWSE9TVF9WU09DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZob3N0X3dvcmtlcnNfZnJlZVwiLFxuICAgIFwidmhvc3RfdnNvY2tfc3RhcnRcIixcbiAgICBcInZob3N0X3Zzb2NrX3N0b3BcIixcbiAgICBcInZob3N0X3Zzb2NrX3Jlc2V0X293bmVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZob3N0IGFuZCB2aG9zdF92c29jayBkcml2ZXJzIHRvIGZpeCB3b3JrZXIgY2xlYW51cCBhbmQgdnNvY2sgcmVzZXQvc3RvcCBiZWhhdmlvci4gSXQgaW50cm9kdWNlcyBhIG5ldyBWSE9TVF9SRVNFVF9PV05FUiBpb2N0bCBoYW5kbGVyIGZvciB2c29jayBhbmQgY2hhbmdlcyB0aGUgcGFja2V0IHF1ZXVpbmcgbG9naWMgYmFzZWQgb24gYSBuZXcgZXZlcl9zdGFydGVkIGZsYWcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGtlcm5lbCBjb2RlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSE9TVFwiLFxuICAgIFwiVkhPU1RfVlNPQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aG9zdF93b3JrZXJzX2ZyZWVcIixcbiAgICBcInZob3N0X3Zzb2NrX3N0YXJ0XCIsXG4gICAgXCJ2aG9zdF92c29ja19zdG9wXCIsXG4gICAgXCJ2aG9zdF92c29ja19yZXNldF9vd25lclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB2aG9zdCBhbmQgdmhvc3RfdnNvY2sgZHJpdmVycyB0byBmaXggd29ya2VyIGNsZWFudXAgYW5kIHZzb2NrIHJlc2V0L3N0b3AgYmVoYXZpb3IuIEl0IGludHJvZHVjZXMgYSBuZXcgVkhPU1RfUkVTRVRfT1dORVIgaW9jdGwgaGFuZGxlciBmb3IgdnNvY2sgYW5kIGNoYW5nZXMgdGhlIHBhY2tldCBxdWV1aW5nIGxvZ2ljIGJhc2VkIG9uIGEgbmV3IGV2ZXJfc3RhcnRlZCBmbGFnLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBrZXJuZWwgY29kZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrrfcf[1] Phase: Succeeded StartedAt: 2026-07-20 14:56:41 +0000 UTC FinishedAt: 2026-07-20 14:56:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrrfcf[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-20 14:56:41 +0000 UTC FinishedAt: 2026-07-20 14:56:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrrfcf[2] Phase: Succeeded StartedAt: 2026-07-20 14:56:41 +0000 UTC FinishedAt: 2026-07-20 19:03:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrrfcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"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_workers_free","vhost_vsock_start","vhost_vsock_stop","vhost_vsock_reset_owner"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"series_id":"3d1a1353-343e-4d59-9c69-db789c50e5ca","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-20 14:56:41 +0000 UTC FinishedAt: 2026-07-20 19:03:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"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_workers_free","vhost_vsock_start","vhost_vsock_stop","vhost_vsock_reset_owner"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"series_id":"3d1a1353-343e-4d59-9c69-db789c50e5ca","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-workflowrrfcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"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_workers_free","vhost_vsock_start","vhost_vsock_stop","vhost_vsock_reset_owner"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"series_id":"3d1a1353-343e-4d59-9c69-db789c50e5ca","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-20 14:56:41 +0000 UTC FinishedAt: 2026-07-20 14:57:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrrfcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"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_workers_free","vhost_vsock_start","vhost_vsock_stop","vhost_vsock_reset_owner"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"series_id":"3d1a1353-343e-4d59-9c69-db789c50e5ca","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-20 14:56:41 +0000 UTC FinishedAt: 2026-07-20 14:56:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"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-workflowrrfcf/series-workflowrrfcf-convert-artifact-2977592973/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrrfcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"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_workers_free","vhost_vsock_start","vhost_vsock_stop","vhost_vsock_reset_owner"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"series_id":"3d1a1353-343e-4d59-9c69-db789c50e5ca","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-20 14:57:02 +0000 UTC FinishedAt: 2026-07-20 15:28:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrrfcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"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_workers_free","vhost_vsock_start","vhost_vsock_stop","vhost_vsock_reset_owner"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"series_id":"3d1a1353-343e-4d59-9c69-db789c50e5ca","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-20 14:57:02 +0000 UTC FinishedAt: 2026-07-20 15:28: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:*70e722d9-7f01-4b75-89c1-65779cfc59a4,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-workflowrrfcf/series-workflowrrfcf-convert-artifact-2977592973/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": "2c42a849-3cfa-49fd-bab2-56a769e06cd3", "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-workflowrrfcf/series-workflowrrfcf-build-action-2721174019/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrrfcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"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_workers_free","vhost_vsock_start","vhost_vsock_stop","vhost_vsock_reset_owner"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"series_id":"3d1a1353-343e-4d59-9c69-db789c50e5ca","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-20 14:57:02 +0000 UTC FinishedAt: 2026-07-20 15:28:02 +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:*70e722d9-7f01-4b75-89c1-65779cfc59a4,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-workflowrrfcf/series-workflowrrfcf-convert-artifact-2977592973/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": "2c42a849-3cfa-49fd-bab2-56a769e06cd3", "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-workflowrrfcf/series-workflowrrfcf-build-action-2721174019/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrrfcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"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_workers_free","vhost_vsock_start","vhost_vsock_stop","vhost_vsock_reset_owner"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"series_id":"3d1a1353-343e-4d59-9c69-db789c50e5ca","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-20 15:28:29 +0000 UTC FinishedAt: 2026-07-20 15:28:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrrfcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"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_workers_free","vhost_vsock_start","vhost_vsock_stop","vhost_vsock_reset_owner"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"series_id":"3d1a1353-343e-4d59-9c69-db789c50e5ca","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-20 15:28:29 +0000 UTC FinishedAt: 2026-07-20 15:28:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrrfcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"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_workers_free","vhost_vsock_start","vhost_vsock_stop","vhost_vsock_reset_owner"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"series_id":"3d1a1353-343e-4d59-9c69-db789c50e5ca","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-20 15:28:29 +0000 UTC FinishedAt: 2026-07-20 15:28:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrrfcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"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_workers_free","vhost_vsock_start","vhost_vsock_stop","vhost_vsock_reset_owner"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"series_id":"3d1a1353-343e-4d59-9c69-db789c50e5ca","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-20 15:28:29 +0000 UTC FinishedAt: 2026-07-20 15:28:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"series_id":"3d1a1353-343e-4d59-9c69-db789c50e5ca","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-workflowrrfcf/series-workflowrrfcf-convert-artifact-2639115240/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrrfcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"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_workers_free","vhost_vsock_start","vhost_vsock_stop","vhost_vsock_reset_owner"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"series_id":"3d1a1353-343e-4d59-9c69-db789c50e5ca","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-20 15:28:50 +0000 UTC FinishedAt: 2026-07-20 15:30:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrrfcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"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_workers_free","vhost_vsock_start","vhost_vsock_stop","vhost_vsock_reset_owner"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"series_id":"3d1a1353-343e-4d59-9c69-db789c50e5ca","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-20 15:28:50 +0000 UTC FinishedAt: 2026-07-20 15:30:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2c42a849-3cfa-49fd-bab2-56a769e06cd3,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-workflowrrfcf/series-workflowrrfcf-build-action-2721174019/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-workflowrrfcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"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_workers_free","vhost_vsock_start","vhost_vsock_stop","vhost_vsock_reset_owner"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"series_id":"3d1a1353-343e-4d59-9c69-db789c50e5ca","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-20 15:30:45 +0000 UTC FinishedAt: 2026-07-20 15:30:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrrfcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"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_workers_free","vhost_vsock_start","vhost_vsock_stop","vhost_vsock_reset_owner"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"series_id":"3d1a1353-343e-4d59-9c69-db789c50e5ca","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-20 15:30:45 +0000 UTC FinishedAt: 2026-07-20 15:30:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrrfcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"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_workers_free","vhost_vsock_start","vhost_vsock_stop","vhost_vsock_reset_owner"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"series_id":"3d1a1353-343e-4d59-9c69-db789c50e5ca","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-20 15:30:45 +0000 UTC FinishedAt: 2026-07-20 15:57:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrrfcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"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_workers_free","vhost_vsock_start","vhost_vsock_stop","vhost_vsock_reset_owner"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"series_id":"3d1a1353-343e-4d59-9c69-db789c50e5ca","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-20 15:30:45 +0000 UTC FinishedAt: 2026-07-20 15:57:51 +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:*70e722d9-7f01-4b75-89c1-65779cfc59a4,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-workflowrrfcf/series-workflowrrfcf-convert-artifact-2639115240/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": "494b3652-3e17-436e-897b-63efafaf4196", "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-workflowrrfcf/series-workflowrrfcf-build-action-3308940180/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrrfcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"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_workers_free","vhost_vsock_start","vhost_vsock_stop","vhost_vsock_reset_owner"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"series_id":"3d1a1353-343e-4d59-9c69-db789c50e5ca","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-20 15:30:45 +0000 UTC FinishedAt: 2026-07-20 15:57:41 +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:*70e722d9-7f01-4b75-89c1-65779cfc59a4,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-workflowrrfcf/series-workflowrrfcf-convert-artifact-2639115240/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": "494b3652-3e17-436e-897b-63efafaf4196", "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-workflowrrfcf/series-workflowrrfcf-build-action-3308940180/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrrfcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"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_workers_free","vhost_vsock_start","vhost_vsock_stop","vhost_vsock_reset_owner"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"series_id":"3d1a1353-343e-4d59-9c69-db789c50e5ca","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-20 15:57:51 +0000 UTC FinishedAt: 2026-07-20 15:57:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrrfcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"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_workers_free","vhost_vsock_start","vhost_vsock_stop","vhost_vsock_reset_owner"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"series_id":"3d1a1353-343e-4d59-9c69-db789c50e5ca","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-20 15:57:51 +0000 UTC FinishedAt: 2026-07-20 15:57:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrrfcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"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_workers_free","vhost_vsock_start","vhost_vsock_stop","vhost_vsock_reset_owner"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"series_id":"3d1a1353-343e-4d59-9c69-db789c50e5ca","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-20 15:57:51 +0000 UTC FinishedAt: 2026-07-20 16:00:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrrfcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"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_workers_free","vhost_vsock_start","vhost_vsock_stop","vhost_vsock_reset_owner"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"series_id":"3d1a1353-343e-4d59-9c69-db789c50e5ca","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-20 15:57:51 +0000 UTC FinishedAt: 2026-07-20 15:59:57 +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:*494b3652-3e17-436e-897b-63efafaf4196,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-workflowrrfcf/series-workflowrrfcf-build-action-3308940180/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-workflowrrfcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"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_workers_free","vhost_vsock_start","vhost_vsock_stop","vhost_vsock_reset_owner"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"series_id":"3d1a1353-343e-4d59-9c69-db789c50e5ca","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-20 16:00:07 +0000 UTC FinishedAt: 2026-07-20 19:03:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrrfcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"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_workers_free","vhost_vsock_start","vhost_vsock_stop","vhost_vsock_reset_owner"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"series_id":"3d1a1353-343e-4d59-9c69-db789c50e5ca","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-20 16:00:07 +0000 UTC FinishedAt: 2026-07-20 19:03:12 +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_workers_free","vhost_vsock_start","vhost_vsock_stop","vhost_vsock_reset_owner"],"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:*2c42a849-3cfa-49fd-bab2-56a769e06cd3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*494b3652-3e17-436e-897b-63efafaf4196,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-workflowrrfcf/series-workflowrrfcf-build-action-2721174019/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-workflowrrfcf/series-workflowrrfcf-build-action-3308940180/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowrrfcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"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_workers_free","vhost_vsock_start","vhost_vsock_stop","vhost_vsock_reset_owner"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"series_id":"3d1a1353-343e-4d59-9c69-db789c50e5ca","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-20 16:00:07 +0000 UTC FinishedAt: 2026-07-20 16:00:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrrfcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"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_workers_free","vhost_vsock_start","vhost_vsock_stop","vhost_vsock_reset_owner"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"series_id":"3d1a1353-343e-4d59-9c69-db789c50e5ca","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-20 16:00:07 +0000 UTC FinishedAt: 2026-07-20 16:00:12 +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_workers_free","vhost_vsock_start","vhost_vsock_stop","vhost_vsock_reset_owner"],"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-workflowrrfcf/series-workflowrrfcf-convert-artifact-1210501153/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrrfcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"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_workers_free","vhost_vsock_start","vhost_vsock_stop","vhost_vsock_reset_owner"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"series_id":"3d1a1353-343e-4d59-9c69-db789c50e5ca","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-20 16:00:07 +0000 UTC FinishedAt: 2026-07-20 16:00:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrrfcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"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_workers_free","vhost_vsock_start","vhost_vsock_stop","vhost_vsock_reset_owner"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"series_id":"3d1a1353-343e-4d59-9c69-db789c50e5ca","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-20 16:00:07 +0000 UTC FinishedAt: 2026-07-20 16:00:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrrfcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"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_workers_free","vhost_vsock_start","vhost_vsock_stop","vhost_vsock_reset_owner"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"series_id":"3d1a1353-343e-4d59-9c69-db789c50e5ca","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-20 16:00:07 +0000 UTC FinishedAt: 2026-07-20 16:00:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrrfcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"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_workers_free","vhost_vsock_start","vhost_vsock_stop","vhost_vsock_reset_owner"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"series_id":"3d1a1353-343e-4d59-9c69-db789c50e5ca","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-20 16:00:17 +0000 UTC FinishedAt: 2026-07-20 19:03:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrrfcf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"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_workers_free","vhost_vsock_start","vhost_vsock_stop","vhost_vsock_reset_owner"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST","VHOST_VSOCK"],"series_id":"3d1a1353-343e-4d59-9c69-db789c50e5ca","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-20 16:00:17 +0000 UTC FinishedAt: 2026-07-20 19:03:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2c42a849-3cfa-49fd-bab2-56a769e06cd3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*494b3652-3e17-436e-897b-63efafaf4196,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-workflowrrfcf/series-workflowrrfcf-build-action-2721174019/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-workflowrrfcf/series-workflowrrfcf-build-action-3308940180/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-workflowrrfcf/series-workflowrrfcf-convert-artifact-1210501153/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,}