Name: series-workflowb97pn Phase: Succeeded StartedAt: 2026-08-12 20:55:33 +0000 UTC FinishedAt: 2026-08-12 22:01:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb97pn[0] Phase: Succeeded StartedAt: 2026-08-12 20:55:33 +0000 UTC FinishedAt: 2026-08-12 21:13:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb97pn[0].run-triage Phase: Succeeded StartedAt: 2026-08-12 20:55:33 +0000 UTC FinishedAt: 2026-08-12 21:13:41 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING" ], "series_id": "2ca1a88a-df4b-4686-9500-f355a2796d8a" }, "track": "KASAN", "fuzz": { "focus": [ "io_uring" ], "focus_symbols": [ "io_import_reg_vec", "io_uring_cmd_import_fixed_vec" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9faW1wb3J0X3JlZ192ZWMmIzM0OywKICAgICYjMzQ7aW9fdXJpbmdfY21kX2ltcG9ydF9maXhlZF92ZWMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIHRoZSBjYWxjdWxhdGlvbiBvZiBgbnJfc2Vnc2AgaW4gYGlvX2ltcG9ydF9yZWdfdmVjYC4gSWYgYG5yX3NlZ3MgKiBzaXplb2Yoc3RydWN0IGJpb192ZWMpYCBvdmVyZmxvd3MsIGBucl9zZWdzYCBiZWNvbWVzIHNtYWxsZXIgdGhhbiByZXF1aXJlZC4gVGhpcyBsZWFkcyB0byBhbiB1bmRlci1hbGxvY2F0aW9uIG9yIGluc3VmZmljaWVudCByZWFsbG9jYXRpb24gb2YgYHZlYy1cdTAwM2VidmVjYCBpbiBgaW9fdmVjX3JlYWxsb2NgLiBTdWJzZXF1ZW50bHksIGBpb192ZWNfZmlsbF9idmVjYCBvciBgaW9fdmVjX2ZpbGxfa2Vybl9idmVjYCB3aWxsIHdyaXRlIG91dCBvZiBib3VuZHMgaW50byB0aGUgYHZlYy1cdTAwM2VidmVjYCBhcnJheS4gVGhpcyBpcyBhIGNsYXNzaWMgaGVhcCBvdXQtb2YtYm91bmRzIHdyaXRlIChidWZmZXIgb3ZlcmZsb3cpLCB3aGljaCBpcyByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGluZm8tbGVhaywgb3IgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGludm9sdmVkIGluIHRoaXMgYnVnLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIGBpb19pbXBvcnRfcmVnX3ZlY2Agd2hlbiBjYWxjdWxhdGluZyBgbnJfc2Vnc2AgZnJvbSBgYnZlY19ieXRlc2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgaW9fdXJpbmcgc3Vic3lzdGVtLCByZWFjaGFibGUgdmlhIGlvX3VyaW5nIHN5c3RlbSBjYWxscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMToxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDMyOGU3NzViNjJkOGQ0OGFhODI1MmZhZDI4ODdhOTM1ZTc3YjcxM2FcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAyMToxMjoyMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pb191cmluZy9yc3JjLmMgYi9pb191cmluZy9yc3JjLmNcbmluZGV4IDhkMGYyZWUyNGUwYzIuLjk4ZGNjZWZkODAxYjkgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9yc3JjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL3JzcmMuY1xuQEAgLTE2NTMsOCAmIzQzOzE2NTMsMTIgQEAgaW50IGlvX2ltcG9ydF9yZWdfdmVjKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRpZiAoc2l6ZW9mKHN0cnVjdCBiaW9fdmVjKSBcdTAwM2Ugc2l6ZW9mKHN0cnVjdCBpb3ZlYykpIHtcbiBcdFx0c2l6ZV90IGJ2ZWNfYnl0ZXM7XG4gXG4tXHRcdGJ2ZWNfYnl0ZXMgPSBucl9zZWdzICogc2l6ZW9mKHN0cnVjdCBiaW9fdmVjKTtcbi1cdFx0bnJfc2VncyA9IChidmVjX2J5dGVzICYjNDM7IHNpemVvZigqaW92KSAtIDEpIC8gc2l6ZW9mKCppb3YpO1xuJiM0MztcdFx0aWYgKGNoZWNrX211bF9vdmVyZmxvdygoc2l6ZV90KW5yX3NlZ3MsIHNpemVvZihzdHJ1Y3QgYmlvX3ZlYyksXG4mIzQzO1x0XHRcdFx0ICAgICAgIFx1MDAyNmJ2ZWNfYnl0ZXMpIHx8XG4mIzQzO1x0XHQgICAgY2hlY2tfYWRkX292ZXJmbG93KGJ2ZWNfYnl0ZXMsIHNpemVvZigqaW92KSAtIDEsXG4mIzQzO1x0XHRcdFx0ICAgICAgIFx1MDAyNmJ2ZWNfYnl0ZXMpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiYjNDM7XHRcdG5yX3NlZ3MgPSBidmVjX2J5dGVzIC8gc2l6ZW9mKCppb3YpO1xuIFx0XHRucl9zZWdzICYjNDM7PSBucl9pb3ZzO1xuIFx0fVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJT19VUklORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX2ltcG9ydF9yZWdfdmVjJiMzNDssCiAgICAmIzM0O2lvX3VyaW5nX2NtZF9pbXBvcnRfZml4ZWRfdmVjJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gYGlvX2ltcG9ydF9yZWdfdmVjYCB3aGVuIGNhbGN1bGF0aW5nIGBucl9zZWdzYCBmcm9tIGBidmVjX2J5dGVzYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBpb191cmluZyBzdWJzeXN0ZW0sIHJlYWNoYWJsZSB2aWEgaW9fdXJpbmcgc3lzdGVtIGNhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzI4ZTc3NWI2MmQ4ZDQ4YWE4MjUyZmFkMjg4N2E5MzVlNzdiNzEzYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDIxOjEyOjIwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW9fdXJpbmcvcnNyYy5jIGIvaW9fdXJpbmcvcnNyYy5jCmluZGV4IDhkMGYyZWUyNGUwYzIuLjk4ZGNjZWZkODAxYjkgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL3JzcmMuYwomIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9yc3JjLmMKQEAgLTE2NTMsOCAmIzQzOzE2NTMsMTIgQEAgaW50IGlvX2ltcG9ydF9yZWdfdmVjKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiAJaWYgKHNpemVvZihzdHJ1Y3QgYmlvX3ZlYykgJmd0OyBzaXplb2Yoc3RydWN0IGlvdmVjKSkgewogCQlzaXplX3QgYnZlY19ieXRlczsKIAotCQlidmVjX2J5dGVzID0gbnJfc2VncyAqIHNpemVvZihzdHJ1Y3QgYmlvX3ZlYyk7Ci0JCW5yX3NlZ3MgPSAoYnZlY19ieXRlcyAmIzQzOyBzaXplb2YoKmlvdikgLSAxKSAvIHNpemVvZigqaW92KTsKJiM0MzsJCWlmIChjaGVja19tdWxfb3ZlcmZsb3coKHNpemVfdClucl9zZWdzLCBzaXplb2Yoc3RydWN0IGJpb192ZWMpLAomIzQzOwkJCQkgICAgICAgJmFtcDtidmVjX2J5dGVzKSB8fAomIzQzOwkJICAgIGNoZWNrX2FkZF9vdmVyZmxvdyhidmVjX2J5dGVzLCBzaXplb2YoKmlvdikgLSAxLAomIzQzOwkJCQkgICAgICAgJmFtcDtidmVjX2J5dGVzKSkKJiM0MzsJCQlyZXR1cm4gLUVPVkVSRkxPVzsKJiM0MzsJCW5yX3NlZ3MgPSBidmVjX2J5dGVzIC8gc2l6ZW9mKCppb3YpOwogCQlucl9zZWdzICYjNDM7PSBucl9pb3ZzOwogCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDk3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJT19VUklORyBSZXNvdXJjZSBSZWdpc3RyYXRpb24gQ29kZSoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IGEgcGF0Y2ggYXBwbGllZCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdG91Y2hpbmcgYGlvX3VyaW5nL3JzcmMuY2AsIHNwZWNpZmljYWxseSBgaW9faW1wb3J0X3JlZ192ZWNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGF0IGZ1bmN0aW9uLiBUaGUgZGVzY3JpcHRpb24gbWVudGlvbnMgb3ZlcmZsb3cgY2hlY2tzIGJlaW5nIGFkZGVkIHRvIHRoZSBgbnJfc2Vnc2AgY2FsY3VsYXRpb24uIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGFyZWEgZm9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGluIGEgbG93LWxldmVsIGNvbnRleHQgbGlrZSB0aGlzLiBMZXQmIzM5O3MgZGlnIGludG8gYGlvX2ltcG9ydF9yZWdfdmVjYCBhbmQgc2VlIGV4YWN0bHkgaG93IHRob3NlIG92ZXJmbG93IGNoZWNrcyBhcmUgaW1wbGVtZW50ZWQgYW5kIHdoYXQgc2NlbmFyaW9zIHRoZXkgYXJlIGRlc2lnbmVkIHRvIG1pdGlnYXRlLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogYmVoaW5kIHRoaXMgcGF0Y2gg4oCTIHdoYXQgd2FzIHRoZSBzcGVjaWZpYyBwcm9ibGVtIGJlaW5nIGFkZHJlc3NlZCwgYW5kIGhvdyBlZmZlY3RpdmVseSBpcyB0aGlzIHBhdGNoIHJlc29sdmluZyBpdD8gVGltZSB0byBnZXQgaW50byB0aGUgY29kZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19pbXBvcnRfcmVnX3ZlYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nL3JzcmMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9yc3JjLmM9MTU5NT1zdGF0aWMgaW50IGlvX2tlcm5fYnZlY19zaXplKHN0cnVjdCBpb3ZlYyAqaW92LCB1bnNpZ25lZCBucl9pb3ZzLFxuLS1cbmlvX3VyaW5nL3JzcmMuYy0xNjE5LVxuaW9fdXJpbmcvcnNyYy5jOjE2MjA6aW50IGlvX2ltcG9ydF9yZWdfdmVjKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG5pb191cmluZy9yc3JjLmMtMTYyMS1cdFx0XHRzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvdV92ZWMgKnZlYyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTExCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgY29uc2lkZXJpbmcgSSYjMzk7bSBzdGVlcGVkIGluIHRoaXMgc3R1ZmY6CgoqKkRpdmluZyBpbnRvIGBpb19pbXBvcnRfcmVnX3ZlY2AgaW4gYGlvX3VyaW5nL3JzcmMuY2AqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBpbiBvbiBgaW9faW1wb3J0X3JlZ192ZWNgIHdpdGhpbiBgcnNyYy5jYC4gVGhlIG5hbWUgaXRzZWxmIGhpbnRzIHRoYXQgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgcmVnaXN0ZXJpbmcgb3IgaW1wb3J0aW5nIHZlY3Rvci1iYXNlZCBkYXRhIHN0cnVjdHVyZXMsIHByb2JhYmx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgaW9fdXJpbmcgc3Vic3lzdGVtLiBLbm93aW5nIHRoZSB1c3VhbCBpb191cmluZyBmbG93LCBteSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZTogV2hhdCBraW5kIG9mIHZlY3RvcnM/IEFyZSB0aGV5IGRlc2NyaWJpbmcgbWVtb3J5IHJlZ2lvbnM/IEZpbGUgZGVzY3JpcHRvcnM/IElzIHRoaXMgcmVsYXRlZCB0byBob3cgaW9fdXJpbmcgaGFuZGxlcyBJL08gYnVmZmVycz8gSG93IGRvZXMgdGhpcyBmdW5jdGlvbiBpbnRlcmZhY2Ugd2l0aCB0aGUgbWFpbiByZXF1ZXN0IHN1Ym1pc3Npb24gYW5kIGNvbXBsZXRpb24gcGF0aD8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgc29tZSBpbnRlcmFjdGlvbiB3aXRoIHVzZXItc3BhY2UgYnVmZmVycyBhbmQga2VybmVsLXNwYWNlIGRhdGEuIEkmIzM5O20gaG9waW5nIHRvIHNlZSBob3cgbWVtb3J5IGdldHMgcGlubmVkLCBob3cgcGVybWlzc2lvbnMgYXJlIGNoZWNrZWQsIGFuZCBob3cgdGhlc2UgcmVnaXN0cmF0aW9ucyBhcmUgaG9va2VkIGludG8gdGhlIGxhcmdlciBpb191cmluZyBsaWZlY3ljbGUuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBmdW5jdGlvbiBpcyBhIGtleSBwaWVjZSBmb3IgemVyby1jb3B5IG9wZXJhdGlvbnMgb3Igc2hhcmVkIG1lbW9yeSBtYXBwaW5ncyB3aXRoaW4gdGhlIEkvTyBmcmFtZXdvcmsuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgdGhlIGRldGFpbHMgb2YgdGhpcyBpbXBvcnRhbnQgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjE6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpb191cmluZy9yc3JjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNjE1Olx0XHRpZiAodG90YWxfbGVuIFx1MDAzZSBNQVhfUldfQ09VTlQpXG4xNjE2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTYxNzpcdFx0cmV0dXJuIDA7XG4xNjE4Olx0fVxuMTYxOTpcdFxuMTYyMDpcdGludCBpb19pbXBvcnRfcmVnX3ZlYyhpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuMTYyMTpcdFx0XHRcdHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW91X3ZlYyAqdmVjLFxuMTYyMjpcdFx0XHRcdHVuc2lnbmVkIG5yX2lvdnMsIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKVxuMTYyMzpcdHtcbjE2MjQ6XHRcdHN0cnVjdCBpb19yc3JjX25vZGUgKm5vZGU7XG4xNjI1Olx0XHRzdHJ1Y3QgaW9fbWFwcGVkX3VidWYgKmltdTtcbjE2MjY6XHRcdHVuc2lnbmVkIGlvdmVjX29mZjtcbjE2Mjc6XHRcdHN0cnVjdCBpb3ZlYyAqaW92O1xuMTYyODpcdFx0dW5zaWduZWQgbnJfc2VncztcbjE2Mjk6XHRcbjE2MzA6XHRcdG5vZGUgPSBpb19maW5kX2J1Zl9ub2RlKHJlcSwgaXNzdWVfZmxhZ3MpO1xuMTYzMTpcdFx0aWYgKCFub2RlKVxuMTYzMjpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjE2MzM6XHRcdGltdSA9IG5vZGUtXHUwMDNlYnVmO1xuMTYzNDpcdFx0aWYgKCEoaW11LVx1MDAzZWRpciBcdTAwMjYgKDEgXHUwMDNjXHUwMDNjIGRkaXIpKSlcbjE2MzU6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4xNjM2Olx0XG4xNjM3Olx0XHRpb3ZlY19vZmYgPSB2ZWMtXHUwMDNlbnIgLSBucl9pb3ZzO1xuMTYzODpcdFx0aW92ID0gdmVjLVx1MDAzZWlvdmVjICYjNDM7IGlvdmVjX29mZjtcbjE2Mzk6XHRcbjE2NDA6XHRcdGlmIChpbXUtXHUwMDNlZmxhZ3MgXHUwMDI2IElPX1JFR0JVRl9GX0tCVUYpIHtcbjE2NDE6XHRcdFx0aW50IHJldCA9IGlvX2tlcm5fYnZlY19zaXplKGlvdiwgbnJfaW92cywgaW11LCBcdTAwMjZucl9zZWdzKTtcbjE2NDI6XHRcbjE2NDM6XHRcdFx0aWYgKHVubGlrZWx5KHJldCkpXG4xNjQ0Olx0XHRcdFx0cmV0dXJuIHJldDtcbjE2NDU6XHRcdH0gZWxzZSB7XG4xNjQ2Olx0XHRcdGludCByZXQgPSBpb19lc3RpbWF0ZV9idmVjX3NpemUoaW92LCBucl9pb3ZzLCBpbXUpO1xuMTY0NzpcdFxuMTY0ODpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTY0OTpcdFx0XHRcdHJldHVybiByZXQ7XG4xNjUwOlx0XHRcdG5yX3NlZ3MgPSByZXQ7XG4xNjUxOlx0XHR9XG4xNjUyOlx0XG4xNjUzOlx0XHRpZiAoc2l6ZW9mKHN0cnVjdCBiaW9fdmVjKSBcdTAwM2Ugc2l6ZW9mKHN0cnVjdCBpb3ZlYykpIHtcbjE2NTQ6XHRcdFx0c2l6ZV90IGJ2ZWNfYnl0ZXM7XG4xNjU1Olx0XG4xNjU2Olx0XHRcdGlmIChjaGVja19tdWxfb3ZlcmZsb3coKHNpemVfdClucl9zZWdzLCBzaXplb2Yoc3RydWN0IGJpb192ZWMpLFxuMTY1NzpcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmJ2ZWNfYnl0ZXMpIHx8XG4xNjU4Olx0XHRcdCAgICBjaGVja19hZGRfb3ZlcmZsb3coYnZlY19ieXRlcywgc2l6ZW9mKCppb3YpIC0gMSxcbjE2NTk6XHRcdFx0XHRcdCAgICAgICBcdTAwMjZidmVjX2J5dGVzKSlcbjE2NjA6XHRcdFx0XHRyZXR1cm4gLUVPVkVSRkxPVztcbjE2NjE6XHRcdFx0bnJfc2VncyA9IGJ2ZWNfYnl0ZXMgLyBzaXplb2YoKmlvdik7XG4xNjYyOlx0XHRcdG5yX3NlZ3MgJiM0Mzs9IG5yX2lvdnM7XG4xNjYzOlx0XHR9XG4xNjY0Olx0XG4xNjY1Olx0XHRpZiAobnJfc2VncyBcdTAwM2UgdmVjLVx1MDAzZW5yKSB7XG4xNjY2Olx0XHRcdHN0cnVjdCBpb3VfdmVjIHRtcF92ZWMgPSB7fTtcbjE2Njc6XHRcdFx0aW50IHJldDtcbjE2Njg6XHRcbjE2Njk6XHRcdFx0cmV0ID0gaW9fdmVjX3JlYWxsb2MoXHUwMDI2dG1wX3ZlYywgbnJfc2Vncyk7XG4xNjcwOlx0XHRcdGlmIChyZXQpXG4xNjcxOlx0XHRcdFx0cmV0dXJuIHJldDtcbjE2NzI6XHRcbjE2NzM6XHRcdFx0aW92ZWNfb2ZmID0gdG1wX3ZlYy5uciAtIG5yX2lvdnM7XG4xNjc0Olx0XHRcdG1lbWNweSh0bXBfdmVjLmlvdmVjICYjNDM7IGlvdmVjX29mZiwgaW92LCBzaXplb2YoKmlvdikgKiBucl9pb3ZzKTtcbjE2NzU6XHRcdFx0aW9fdmVjX2ZyZWUodmVjKTtcbjE2NzY6XHRcbjE2Nzc6XHRcdFx0KnZlYyA9IHRtcF92ZWM7XG4xNjc4Olx0XHRcdGlvdiA9IHZlYy1cdTAwM2Vpb3ZlYyAmIzQzOyBpb3ZlY19vZmY7XG4xNjc5Olx0XHRcdHJlcS1cdTAwM2VmbGFncyB8PSBSRVFfRl9ORUVEX0NMRUFOVVA7XG4xNjgwOlx0XHR9XG4xNjgxOlx0XG4xNjgyOlx0XHRpZiAoaW11LVx1MDAzZWZsYWdzIFx1MDAyNiBJT19SRUdCVUZfRl9LQlVGKVxuMTY4MzpcdFx0XHRyZXR1cm4gaW9fdmVjX2ZpbGxfa2Vybl9idmVjKGRkaXIsIGl0ZXIsIGltdSwgaW92LCBucl9pb3ZzLCB2ZWMpO1xuMTY4NDpcdFxuMTY4NTpcdFx0cmV0dXJuIGlvX3ZlY19maWxsX2J2ZWMoZGRpciwgaXRlciwgaW11LCBpb3YsIG5yX2lvdnMsIHZlYyk7XG4xNjg2Olx0fVxuMTY4NzpcdFxuMTY4ODpcdGludCBpb19wcmVwX3JlZ19pb3ZlYyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvdV92ZWMgKml2LFxuMTY4OTpcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgaW92ZWMgX191c2VyICp1dmVjLCBzaXplX3QgdXZlY19zZWdzKVxuMTY5MDpcdHtcbjE2OTE6XHRcdHN0cnVjdCBpb3ZlYyAqaW92O1xuMTY5MjpcdFx0aW50IGlvdmVjX29mZiwgcmV0O1xuMTY5MzpcdFx0dm9pZCAqcmVzO1xuMTY5NDpcdFxuMTY5NTpcdFx0aWYgKHV2ZWNfc2VncyBcdTAwM2UgaXYtXHUwMDNlbnIpIHtcbjE2OTY6XHRcdFx0cmV0ID0gaW9fdmVjX3JlYWxsb2MoaXYsIHV2ZWNfc2Vncyk7XG4xNjk3Olx0XHRcdGlmIChyZXQpXG4xNjk4Olx0XHRcdFx0cmV0dXJuIHJldDtcbjE2OTk6XHRcdFx0cmVxLVx1MDAzZWZsYWdzIHw9IFJFUV9GX05FRURfQ0xFQU5VUDtcbjE3MDA6XHRcdH1cbjE3MDE6XHRcbjE3MDI6XHRcdC8qIHBhZCBpb3ZlYyB0byB0aGUgcmlnaHQgKi9cbjE3MDM6XHRcdGlvdmVjX29mZiA9IGl2LVx1MDAzZW5yIC0gdXZlY19zZWdzO1xuMTcwNDpcdFx0aW92ID0gaXYtXHUwMDNlaW92ZWMgJiM0MzsgaW92ZWNfb2ZmO1xuMTcwNTpcdFx0cmVzID0gaW92ZWNfZnJvbV91c2VyKHV2ZWMsIHV2ZWNfc2VncywgdXZlY19zZWdzLCBpb3YsXG4xNzA2Olx0XHRcdFx0ICAgICAgaW9faXNfY29tcGF0KHJlcS1cdTAwM2VjdHgpKTtcbjE3MDc6XHRcdGlmIChJU19FUlIocmVzKSlcbjE3MDg6XHRcdFx0cmV0dXJuIFBUUl9FUlIocmVzKTtcbjE3MDk6XHRcbjE3MTA6XHRcdHJlcS1cdTAwM2VmbGFncyB8PSBSRVFfRl9JTVBPUlRfQlVGRkVSO1xuMTcxMTpcdFx0cmV0dXJuIDA7XG4xNzEyOlx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNTAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgSW50ZWdlciBPdmVyZmxvdyBpbiBpb191cmluZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBzcG90dGVkIGEgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eSBpbiBgaW9fdXJpbmcvcnNyYy5jYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGlvX2ltcG9ydF9yZWdfdmVjYCBmdW5jdGlvbi4gVGhlIG92ZXJmbG93IHN0ZW1zIGZyb20gYSBjYWxjdWxhdGlvbiBvZiBgbnJfc2Vnc2AuIFRoaXMgc291bmRzIGxpa2Ugc29tZXRoaW5nIHRoYXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIHdhcnJhbnRzIHNvbWUgZGVkaWNhdGVkIGZ1enppbmcgYXR0ZW50aW9uLiBgaW9fdXJpbmdgIGlzIGEgY29yZSBwYXJ0IG9mIHRoZSBrZXJuZWwmIzM5O3MgSS9PIGluZnJhc3RydWN0dXJlLCBzbyBhbnkgdnVsbmVyYWJpbGl0eSBoZXJlIGlzIGEgY29uY2Vybi4KCk5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBhbmQgcmVhY2ggb2YgdGhpcyBmdW5jdGlvbi4gSSBuZWVkIHRvIHRyYWNlIHdoZXJlIGBpb19pbXBvcnRfcmVnX3ZlY2AgaXMgYWN0dWFsbHkgKmNhbGxlZCouIElzIGl0IGFuIGV4cG9ydGVkIHN5bWJvbCwgb3IgaXMgaXQgdXNlZCBpbnRlcm5hbGx5IHdpdGhpbiBgaW9fdXJpbmdgPyBLbm93aW5nIGl0cyBjYWxsIHNpdGVzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBoYW5kbGUgb24gdGhlIGF0dGFjayBzdXJmYWNlIGFuZCBob3cgYW4gYXR0YWNrZXIgbWlnaHQgdHJpZ2dlciB0aGlzIG92ZXJmbG93LiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBjb2RlYmFzZSBhbmQgZmluZCB0aG9zZSByZWZlcmVuY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX2ltcG9ydF9yZWdfdmVjJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jPTE1MDA9c3RhdGljIGludCBpb19zZW5kX3pjX2ltcG9ydChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbi0tXG5pb191cmluZy9uZXQuYy0xNTE4LVxuaW9fdXJpbmcvbmV0LmM6MTUxOTpcdFx0cmV0ID0gaW9faW1wb3J0X3JlZ192ZWMoSVRFUl9TT1VSQ0UsIFx1MDAyNmttc2ctXHUwMDNlbXNnLm1zZ19pdGVyLFxuaW9fdXJpbmcvbmV0LmMtMTUyMC1cdFx0XHRcdFx0bm90aWYsIFx1MDAyNmttc2ctXHUwMDNldmVjLCB1dmVjX3NlZ3MsXG4tLVxuaW9fdXJpbmcvcnNyYy5jPTE1OTU9c3RhdGljIGludCBpb19rZXJuX2J2ZWNfc2l6ZShzdHJ1Y3QgaW92ZWMgKmlvdiwgdW5zaWduZWQgbnJfaW92cyxcbi0tXG5pb191cmluZy9yc3JjLmMtMTYxOS1cbmlvX3VyaW5nL3JzcmMuYzoxNjIwOmludCBpb19pbXBvcnRfcmVnX3ZlYyhpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuaW9fdXJpbmcvcnNyYy5jLTE2MjEtXHRcdFx0c3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb3VfdmVjICp2ZWMsXG4tLVxuaW9fdXJpbmcvcnNyYy5oPTY5PWludCBpb19pbXBvcnRfcmVnX2J1ZihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbmlvX3VyaW5nL3JzcmMuaC03MS1cdFx0XHR1bnNpZ25lZCBpc3N1ZV9mbGFncyk7XG5pb191cmluZy9yc3JjLmg6NzI6aW50IGlvX2ltcG9ydF9yZWdfdmVjKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG5pb191cmluZy9yc3JjLmgtNzMtXHRcdFx0c3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb3VfdmVjICp2ZWMsXG4tLVxuaW9fdXJpbmcvcncuYz0zOTk9c3RhdGljIGludCBpb19yd19pbXBvcnRfcmVnX3ZlYyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbi0tXG5pb191cmluZy9ydy5jLTQwNi1cbmlvX3VyaW5nL3J3LmM6NDA3Olx0cmV0ID0gaW9faW1wb3J0X3JlZ192ZWMoZGRpciwgXHUwMDI2aW8tXHUwMDNlaXRlciwgcmVxLCBcdTAwMjZpby1cdTAwM2V2ZWMsXG5pb191cmluZy9ydy5jLTQwOC1cdFx0XHRcdHV2ZWNfc2VncywgaXNzdWVfZmxhZ3MpO1xuLS1cbmlvX3VyaW5nL3VyaW5nX2NtZC5jPTMwMz1pbnQgaW9fdXJpbmdfY21kX2ltcG9ydF9maXhlZF92ZWMoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLFxuLS1cbmlvX3VyaW5nL3VyaW5nX2NtZC5jLTMxOS1cbmlvX3VyaW5nL3VyaW5nX2NtZC5jOjMyMDpcdHJldHVybiBpb19pbXBvcnRfcmVnX3ZlYyhkZGlyLCBpdGVyLCByZXEsIFx1MDAyNmFjLVx1MDAzZXZlYywgdXZlY19zZWdzLFxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMzIxLVx0XHRcdFx0IGlzc3VlX2ZsYWdzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjgyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBpb191cmluZyBJbXBvcnQgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGlvX2ltcG9ydF9yZWdfdmVjYCwgYW5kIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGEgZmV3IHBsYWNlcyB3aXRoaW4gdGhlIGBpb191cmluZ2AgZnJhbWV3b3JrOiBzcGVjaWZpY2FsbHksIGBpb19zZW5kX3pjX2ltcG9ydGAgaW4gYGlvX3VyaW5nL25ldC5jYCwgYGlvX3J3X2ltcG9ydF9yZWdfdmVjYCBpbiBgaW9fdXJpbmcvcncuY2AsIGFuZCBgaW9fdXJpbmdfY21kX2ltcG9ydF9maXhlZF92ZWNgIGluIGBpb191cmluZy91cmluZ19jbWQuY2AuICBBbGwgY2xlYXJseSBgaW9fdXJpbmdgIGZ1bmN0aW9ucywgYW5kIHRoZSBjb25maWd1cmF0aW9uIG5lY2Vzc2FyeSBpcyBgSU9fVVJJTkdgLgoKR2l2ZW4gdGhhdCwgSSB0aGluayBhIGRlZXBlciBkaXZlIGludG8gdGhlc2UgZnVuY3Rpb25zIGlzIG1lcml0ZWQuIEl0IHNlZW1zIGxpa2UgdGhlIGltcG9ydCBmdW5jdGlvbmFsaXR5IGFuZCB0aGUgZnVuY3Rpb25zIGludGVyYWN0aW5nIHdpdGggaXQgYXJlIHByaW1lIGNhbmRpZGF0ZXMgdG8gZm9jdXMgb24uIFNvLCBsZXQmIzM5O3MgZGVzaWduYXRlIGBpb19pbXBvcnRfcmVnX3ZlY2AgaXRzZWxmIGFzIGEga2V5IGZvY3VzIHN5bWJvbC4gSXRzIGNhbGxlcnMsIGBpb19zZW5kX3pjX2ltcG9ydGAsIGBpb19yd19pbXBvcnRfcmVnX3ZlY2AsIGFuZCBgaW9fdXJpbmdfY21kX2ltcG9ydF9maXhlZF92ZWNgIGFyZSBhbHNvIGV4Y2VsbGVudCBmb2N1cyBwb2ludHMuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBpbnRlcmFjdGlvbnMgYW5kIHRoZSBsYXJnZXIgY29udGV4dCBvZiB0aGlzIGltcG9ydCBtZWNoYW5pc20uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJT19VUklORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTkxMD1jb25maWcgQUlPXG4tLVxuaW5pdC9LY29uZmlnLTE5MTctXG5pbml0L0tjb25maWc6MTkxODpjb25maWcgSU9fVVJJTkdcbmluaXQvS2NvbmZpZy0xOTE5LVx0Ym9vbCBcJiMzNDtFbmFibGUgSU8gdXJpbmcgc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbi0tXG5pbml0L0tjb25maWc9MTkyNz1jb25maWcgR0NPVl9QUk9GSUxFX1VSSU5HXG4tLVxuaW5pdC9LY29uZmlnLTE5MzktXG5pbml0L0tjb25maWc6MTk0MDpjb25maWcgSU9fVVJJTkdfTU9DS19GSUxFXG5pbml0L0tjb25maWctMTk0MS1cdHRyaXN0YXRlIFwmIzM0O0VuYWJsZSBpb191cmluZyBtb2NrIGZpbGVzIChFeHBlcmltZW50YWwpXCYjMzQ7IGlmIEVYUEVSVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTAwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUsIGFzIGlmIEkmIzM5O20gd29ya2luZyB0aHJvdWdoIHRoaXMgcHJvYmxlbToKCioqRGlnZ2luZyBpbnRvIHRoZSBgSU9fVVJJTkdgIENvbmZpZ3VyYXRpb24gYW5kIGBpb19pbXBvcnRfcmVnX3ZlY2AqKgoKQWxyaWdodCwgSSYjMzk7bSBkZWFsaW5nIHdpdGggYW4gYElPX1VSSU5HYCBjb25maWd1cmF0aW9uIGhlcmUsIHNvIHRoZSBpbXBsaWNhdGlvbnMgYXJlIHByZXR0eSBjbGVhci4gSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIGhvdyB0aGlzIGlzIGltcGxlbWVudGVkLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gemVyb2luZyBpbiBvbiBgaW9faW1wb3J0X3JlZ192ZWNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSB2ZXJpZnkgaWYgdGhhdCBmdW5jdGlvbiBpcyBleHBvc2VkLiBMZXQmIzM5O3Mgc2VlIGlmIGl0JiMzOTtzIGV4cG9ydGVkIGZvciBtb2R1bGVzLCBiZWNhdXNlIGlmIGl0JiMzOTtzIG5vdCB0aGVuIG15IG9wdGlvbnMgaW1tZWRpYXRlbHkgbmFycm93LiBBaCwgZ29vZCwgaXQmIzM5O3Mgbm90IGV4cG9ydGVkIHRvIG1vZHVsZXMsIHdoaWNoIG1lYW5zIEkmIzM5O2xsIGhhdmUgdG8gY29uc2lkZXIgaXRzIHVzZSB3aXRoaW4gdGhlIGtlcm5lbCBwcm9wZXIuIEl0JiMzOTtzIG5vdCBzdGF0aWMgZWl0aGVyLCB0aGF0JiMzOTtzIHVzZWZ1bCB0byBrbm93LgoKTmV4dCwgSSB0aGluayBJJiMzOTtsbCBsb29rIGludG8gYGlvX3NlbmRfemNfaW1wb3J0YCB3aGljaCBpcyBpbiBgaW9fdXJpbmcvbmV0LmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19zZW5kX3pjX2ltcG9ydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jPTE0NTc9c3RhdGljIGludCBpb19zZ19mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5pb191cmluZy9uZXQuYy0xNDk5LVxuaW9fdXJpbmcvbmV0LmM6MTUwMDpzdGF0aWMgaW50IGlvX3NlbmRfemNfaW1wb3J0KHN0cnVjdCBpb19raW9jYiAqcmVxLFxuaW9fdXJpbmcvbmV0LmMtMTUwMS1cdFx0XHQgICAgIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csXG4tLVxuaW9fdXJpbmcvbmV0LmM9MTUzMD1pbnQgaW9fc2VuZG1zZ196YyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL25ldC5jLTE1NDctXHRpZiAocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9JTVBPUlRfQlVGRkVSKSB7XG5pb191cmluZy9uZXQuYzoxNTQ4Olx0XHRyZXQgPSBpb19zZW5kX3pjX2ltcG9ydChyZXEsIGttc2csIGlzc3VlX2ZsYWdzKTtcbmlvX3VyaW5nL25ldC5jLTE1NDktXHRcdGlmICh1bmxpa2VseShyZXQpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDc4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBgaW9fdXJpbmdgIEltcG9ydCBNZWNoYW5pc20qKgoKT2theSwgc28gYGlvX3NlbmRfemNfaW1wb3J0YCBpcyBkZWZpbmVkIGFzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBpdCYjMzk7cyBsaW1pdGVkIGluIHNjb3BlIGFuZCBjYW4mIzM5O3QgYmUgZGlyZWN0bHkgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGUgZmlsZSBpdCYjMzk7cyBkZWNsYXJlZCBpbi4gVGhhdCYjMzk7cyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSByZWxldmFudCBpbXBvcnQgbG9naWMgbWlnaHQgYmUgY2xvc2VseSB0aWVkIHRvIGEgc3BlY2lmaWMgaW50ZXJuYWwgbWVjaGFuaXNtLgoKR2l2ZW4gdGhhdCBjb250ZXh0LCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBleGFtaW5lIGBpb19yd19pbXBvcnRfcmVnX3ZlY2AsIGFuZCBJJiMzOTtsbCBmaW5kIHRoYXQgaW4gYGlvX3VyaW5nL3J3LmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgemVyby1jb3B5IGltcG9ydCBwcm9jZXNzLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgYGlvX3J3X2ltcG9ydF9yZWdfdmVjYCBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIHJlZ2lzdHJhdGlvbiBvZiB2ZWN0b3JzIG9mIG1lbW9yeSByZWdpb25zIHdoZW4gdXNpbmcgemVyby1jb3B5IHRyYW5zZmVycywgYmVjYXVzZSwgaW50dWl0aXZlbHksIGl0JiMzOTtzIGFib3V0ICpyZWdpc3RlcmluZyogb3IgKmltcG9ydGluZyogcmVhZC93cml0ZSBkYXRhIHJlZ2lvbnMuIFVuZGVyc3RhbmRpbmcgaG93IGBpb19yd19pbXBvcnRfcmVnX3ZlY2AgY2FsbHMsIG9yIGlzIGNhbGxlZCBieSwgYGlvX3NlbmRfemNfaW1wb3J0YCB3aWxsIGJlIGNyaXRpY2FsIGluIGdyYXNwaW5nIGhvdyB0aGlzIGRhdGEgaW1wb3J0IG1lY2hhbmlzbSBpcyBhcmNoaXRlY3RlZC4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgY29udHJvbCBmbG93IHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19yd19pbXBvcnRfcmVnX3ZlYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nL3J3LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvcncuYz0zOTQ9aW50IGlvX3ByZXBfd3JpdGVfZml4ZWQoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSlcbi0tXG5pb191cmluZy9ydy5jLTM5OC1cbmlvX3VyaW5nL3J3LmM6Mzk5OnN0YXRpYyBpbnQgaW9fcndfaW1wb3J0X3JlZ192ZWMoc3RydWN0IGlvX2tpb2NiICpyZXEsXG5pb191cmluZy9ydy5jLTQwMC1cdFx0XHRcdHN0cnVjdCBpb19hc3luY19ydyAqaW8sXG4tLVxuaW9fdXJpbmcvcncuYz05MTc9c3RhdGljIGludCBfX2lvX3JlYWQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19icl9zZWwgKnNlbCxcbi0tXG5pb191cmluZy9ydy5jLTkyNy1cdGlmIChyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IFJFUV9GX0lNUE9SVF9CVUZGRVIpIHtcbmlvX3VyaW5nL3J3LmM6OTI4Olx0XHRyZXQgPSBpb19yd19pbXBvcnRfcmVnX3ZlYyhyZXEsIGlvLCBJVEVSX0RFU1QsIGlzc3VlX2ZsYWdzKTtcbmlvX3VyaW5nL3J3LmMtOTI5LVx0XHRpZiAodW5saWtlbHkocmV0KSlcbi0tXG5pb191cmluZy9ydy5jPTExMzQ9aW50IGlvX3dyaXRlKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvcncuYy0xMTQzLVx0aWYgKHJlcS1cdTAwM2VmbGFncyBcdTAwMjYgUkVRX0ZfSU1QT1JUX0JVRkZFUikge1xuaW9fdXJpbmcvcncuYzoxMTQ0Olx0XHRyZXQgPSBpb19yd19pbXBvcnRfcmVnX3ZlYyhyZXEsIGlvLCBJVEVSX1NPVVJDRSwgaXNzdWVfZmxhZ3MpO1xuaW9fdXJpbmcvcncuYy0xMTQ1LVx0XHRpZiAodW5saWtlbHkocmV0KSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjE6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzIxMgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLgoKKipBbmFseXppbmcgdGhlIFN5bWJvbCBgaW9fcndfaW1wb3J0X3JlZ192ZWNgKioKClJpZ2h0LCBgaW9fcndfaW1wb3J0X3JlZ192ZWNgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhhdCYjMzk7cyBrZXkuIElmIEkmIzM5O20gdHJ5aW5nIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IHN5bWJvbCwgSSBzaG91bGQgdXNlIGBpb19pbXBvcnRfcmVnX3ZlY2Agc2luY2UgaXQgaXMgdGhlIGZvY3VzLiBCdXQgd2FpdCwgYW0gSSBzdXJlPyBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBgaW9faW1wb3J0X3JlZ192ZWNgIGlzbiYjMzk7dCBzdGF0aWMgYXMgd2VsbC4gTm9wZSwgaXQgaXNuJiMzOTt0LiBHb29kLiBMZXQmIzM5O3MgbW92ZSBvbiBhbmQgY29uc3VsdCBgaW9fdXJpbmdfY21kX2ltcG9ydF9maXhlZF92ZWNgIHdpdGhpbiBgaW9fdXJpbmcvdXJpbmdfY21kLmNgLCB0aGF0IHNob3VsZCBjbGVhciBpdCB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjE6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fdXJpbmdfY21kX2ltcG9ydF9maXhlZF92ZWMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZy91cmluZ19jbWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy91cmluZ19jbWQuYz0zMDE9RVhQT1JUX1NZTUJPTF9HUEwoaW9fdXJpbmdfY21kX2ltcG9ydF9maXhlZCk7XG5pb191cmluZy91cmluZ19jbWQuYy0zMDItXG5pb191cmluZy91cmluZ19jbWQuYzozMDM6aW50IGlvX3VyaW5nX2NtZF9pbXBvcnRfZml4ZWRfdmVjKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCxcbmlvX3VyaW5nL3VyaW5nX2NtZC5jLTMwNC1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IGlvdmVjIF9fdXNlciAqdXZlYyxcbi0tXG5pb191cmluZy91cmluZ19jbWQuYy0zMjItfVxuaW9fdXJpbmcvdXJpbmdfY21kLmM6MzIzOkVYUE9SVF9TWU1CT0xfR1BMKGlvX3VyaW5nX2NtZF9pbXBvcnRfZml4ZWRfdmVjKTtcbmlvX3VyaW5nL3VyaW5nX2NtZC5jLTMyNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjE6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY4MgoJCQkJCQkJb3V0cHV0OiAxMTAKCQkJCQkJCXRob3VnaHRzOiAxNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgaW9fdXJpbmcgUGF0Y2gqKgoKT2theSwgc28gYGlvX3VyaW5nX2NtZF9pbXBvcnRfZml4ZWRfdmVjYCBpcyBub3cgZXhwb3J0ZWQuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgbXkgYXR0ZW50aW9uIOKAkyBpdCBtZWFucyB3ZSBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCBib3RoIGBpb19pbXBvcnRfcmVnX3ZlY2AgYW5kIHRoaXMgbmV3IGBpb191cmluZ19jbWRfaW1wb3J0X2ZpeGVkX3ZlY2AuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYWRkcmVzcyBhbiBpbnRlZ2VyIG92ZXJmbG93IHZ1bG5lcmFiaWxpdHkgd2l0aGluIGBpb19pbXBvcnRfcmVnX3ZlY2AuIFNwZWNpZmljYWxseSwgaXQgY29uY2VybnMgdGhlIGNhbGN1bGF0aW9uIG9mIGBucl9zZWdzYCBmcm9tIGBidmVjX2J5dGVzYC4gVGhpcyBpcyBhICpmdW5jdGlvbmFsIGNoYW5nZSogd2l0aGluIHRoZSBgaW9fdXJpbmdgIHN1YnN5c3RlbSwgd2hpY2ggaXMgc2lnbmlmaWNhbnQuCgpNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIGFic29sdXRlbHkgd29ydGggZnV6emluZywgYW5kIEkgd2lsbCBhZGQgdGhvc2UgZm9jdXMgc3ltYm9scyAoYGlvX2ltcG9ydF9yZWdfdmVjYCwgYGlvX3VyaW5nX2NtZF9pbXBvcnRfZml4ZWRfdmVjYCkgdG8gdGhlIGZ1enppbmcgY2FtcGFpZ24uIEFzIGZvciBidWlsZCBjb25maWdzLCBpdCBzZWVtcyB0aGF0IGBJT19VUklOR2AgaXMgdGhlIHByaW1hcnkgb25lLCBhbmQgZ2l2ZW4gYGlvX3VyaW5nYCYjMzk7cyBjZW50cmFsaXR5LCBJIGRvbiYjMzk7dCBhbnRpY2lwYXRlIGFueSBvdGhlciBkZXBlbmRlbmNpZXMuIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0byBiZSBzdXJlLCBidXQgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBgSU9fVVJJTkdgIGlzIHN1ZmZpY2llbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJT19VUklORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX2ltcG9ydF9yZWdfdmVjJiMzNDssCiAgICAmIzM0O2lvX3VyaW5nX2NtZF9pbXBvcnRfZml4ZWRfdmVjJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gYGlvX2ltcG9ydF9yZWdfdmVjYCB3aGVuIGNhbGN1bGF0aW5nIGBucl9zZWdzYCBmcm9tIGBidmVjX2J5dGVzYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBpb191cmluZyBzdWJzeXN0ZW0sIHJlYWNoYWJsZSB2aWEgaW9fdXJpbmcgc3lzdGVtIGNhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJT19VUklORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX2ltcG9ydF9yZWdfdmVjJiMzNDssCiAgICAmIzM0O2lvX3VyaW5nX2NtZF9pbXBvcnRfZml4ZWRfdmVjJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gYGlvX2ltcG9ydF9yZWdfdmVjYCB3aGVuIGNhbGN1bGF0aW5nIGBucl9zZWdzYCBmcm9tIGBidmVjX2J5dGVzYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBpb191cmluZyBzdWJzeXN0ZW0sIHJlYWNoYWJsZSB2aWEgaW9fdXJpbmcgc3lzdGVtIGNhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMToxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gdGhlIGNhbGN1bGF0aW9uIG9mIGBucl9zZWdzYCBpbiBgaW9faW1wb3J0X3JlZ192ZWNgLiBJZiBgbnJfc2VncyAqIHNpemVvZihzdHJ1Y3QgYmlvX3ZlYylgIG92ZXJmbG93cywgYG5yX3NlZ3NgIGJlY29tZXMgc21hbGxlciB0aGFuIHJlcXVpcmVkLiBUaGlzIGxlYWRzIHRvIGFuIHVuZGVyLWFsbG9jYXRpb24gb3IgaW5zdWZmaWNpZW50IHJlYWxsb2NhdGlvbiBvZiBgdmVjLVx1MDAzZWJ2ZWNgIGluIGBpb192ZWNfcmVhbGxvY2AuIFN1YnNlcXVlbnRseSwgYGlvX3ZlY19maWxsX2J2ZWNgIG9yIGBpb192ZWNfZmlsbF9rZXJuX2J2ZWNgIHdpbGwgd3JpdGUgb3V0IG9mIGJvdW5kcyBpbnRvIHRoZSBgdmVjLVx1MDAzZWJ2ZWNgIGFycmF5LiBUaGlzIGlzIGEgY2xhc3NpYyBoZWFwIG91dC1vZi1ib3VuZHMgd3JpdGUgKGJ1ZmZlciBvdmVyZmxvdyksIHdoaWNoIGlzIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgaW5mby1sZWFrLCBvciB1c2Ugb2YgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW52b2x2ZWQgaW4gdGhpcyBidWcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDMyOGU3NzViNjJkOGQ0OGFhODI1MmZhZDI4ODdhOTM1ZTc3YjcxM2EKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxMiAyMToxMjoyMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3JzcmMuYyBiL2lvX3VyaW5nL3JzcmMuYwppbmRleCA4ZDBmMmVlMjRlMGMyLi45OGRjY2VmZDgwMWI5IDEwMDY0NAotLS0gYS9pb191cmluZy9yc3JjLmMKJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvcnNyYy5jCkBAIC0xNjUzLDggJiM0MzsxNjUzLDEyIEBAIGludCBpb19pbXBvcnRfcmVnX3ZlYyhpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLAogCWlmIChzaXplb2Yoc3RydWN0IGJpb192ZWMpICZndDsgc2l6ZW9mKHN0cnVjdCBpb3ZlYykpIHsKIAkJc2l6ZV90IGJ2ZWNfYnl0ZXM7CiAKLQkJYnZlY19ieXRlcyA9IG5yX3NlZ3MgKiBzaXplb2Yoc3RydWN0IGJpb192ZWMpOwotCQlucl9zZWdzID0gKGJ2ZWNfYnl0ZXMgJiM0Mzsgc2l6ZW9mKCppb3YpIC0gMSkgLyBzaXplb2YoKmlvdik7CiYjNDM7CQlpZiAoY2hlY2tfbXVsX292ZXJmbG93KChzaXplX3QpbnJfc2Vncywgc2l6ZW9mKHN0cnVjdCBiaW9fdmVjKSwKJiM0MzsJCQkJICAgICAgICZhbXA7YnZlY19ieXRlcykgfHwKJiM0MzsJCSAgICBjaGVja19hZGRfb3ZlcmZsb3coYnZlY19ieXRlcywgc2l6ZW9mKCppb3YpIC0gMSwKJiM0MzsJCQkJICAgICAgICZhbXA7YnZlY19ieXRlcykpCiYjNDM7CQkJcmV0dXJuIC1FT1ZFUkZMT1c7CiYjNDM7CQlucl9zZWdzID0gYnZlY19ieXRlcyAvIHNpemVvZigqaW92KTsKIAkJbnJfc2VncyAmIzQzOz0gbnJfaW92czsKIAl9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0MTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgaW9fdXJpbmcgUGF0Y2ggZm9yIEludGVnZXIgT3ZlcmZsb3cqKgoKT2theSwgc28gdGhlcmUmIzM5O3MgYSBwYXRjaCBpbiBgaW9fdXJpbmcvcnNyYy5jYCB0aGF0JiMzOTtzIHR3ZWFraW5nIGBpb19pbXBvcnRfcmVnX3ZlY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0FoLCBpbnRlZ2VyIG92ZXJmbG93LCBjbGFzc2ljLiYjMzQ7IExvb2tpbmcgYXQgdGhlIGNvZGUgZGlmZiwgaXQmIzM5O3MgcHJldHR5IGNsZWFyOiB0aGV5JiMzOTtyZSByZXBsYWNpbmcgYSBkaXJlY3QgbXVsdGlwbGljYXRpb24gYW5kIGRpdmlzaW9uIHdpdGggYGNoZWNrX211bF9vdmVyZmxvd2AgYW5kIGBjaGVja19hZGRfb3ZlcmZsb3dgLiBTbWFydC4gR29vZCBkZWZlbnNlLgoKU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBjYWxjdWxhdGluZyBgbnJfc2Vnc2AgYW5kIHRoZSBvcmlnaW5hbCBjYWxjdWxhdGlvbiAqY291bGQqIGxlYWQgdG8gaW50ZWdlciBvdmVyZmxvd3MuIFRoYXQgbWVhbnMgcG90ZW50aWFsIHVuZGVyLWFsbG9jYXRpb24sIG9yIGFuIGluY29ycmVjdCBib3VuZHMgY2hlY2suIFdoaWNoLCBvZiBjb3Vyc2UsIHVzdWFsbHkgbWVhbnMgS0FTQU4gd2lsbCBjYXRjaCBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4KCldhaXQgYSBzZWNvbmTigKYgY291bGQgdGhpcyBvdmVyZmxvdyBsZWFkIHRvIG1vcmUgdGhhbiBqdXN0IE9PQiBpc3N1ZXM/IElmIGBucl9zZWdzYCBvdmVyZmxvd3MgYW5kICp3cmFwcyBhcm91bmQqIHRvIGEgc21hbGxlciB2YWx1ZSwgdGhlbiBhIG1lbW9yeSBhbGxvY2F0aW9uIG1pZ2h0IGJlICpsZXNzKiB0aGFuIHdoYXQmIzM5O3MgbmVlZGVkLiBMZWFkaW5nIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBvciB3cml0ZS4gV2hhdCBpZiB0aGlzIGBucl9zZWdzYCBpcyB1c2VkIHRvIGNvcHkgdXNlciBkYXRhPyBDb3VsZCBpdCBsZWFkIHRvIGEgbGVhayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeT8gVGhlIGBucl9zZWdzYCBpcyB0aGUgbnVtYmVyIG9mIHNlZ21lbnRzLCB3aGljaCBpcyB1c2VkIGZvciBjYWxjdWxhdGlvbnMuIEkgc2hvdWxkIGxvb2sgaW50byB0aGlzLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBleGFjdGx5IGhvdyBgaW9faW1wb3J0X3JlZ192ZWNgIHV0aWxpemVzIHRoaXMgY2FsY3VsYXRlZCB2YWx1ZS4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZeKApgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19pbXBvcnRfcmVnX3ZlYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nL3JzcmMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9yc3JjLmM9MTU5NT1zdGF0aWMgaW50IGlvX2tlcm5fYnZlY19zaXplKHN0cnVjdCBpb3ZlYyAqaW92LCB1bnNpZ25lZCBucl9pb3ZzLFxuLS1cbmlvX3VyaW5nL3JzcmMuYy0xNjE5LVxuaW9fdXJpbmcvcnNyYy5jOjE2MjA6aW50IGlvX2ltcG9ydF9yZWdfdmVjKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG5pb191cmluZy9yc3JjLmMtMTYyMS1cdFx0XHRzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvdV92ZWMgKnZlYyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjE6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk4NQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IERpdmluZyBpbnRvIGBpb19pbXBvcnRfcmVnX3ZlY2AqKgoKQWxyaWdodCwgdGhlIG9iamVjdGl2ZSBpcyB0byBnZXQgYSBoYW5kbGUgb24gYGlvX2ltcG9ydF9yZWdfdmVjYC4gVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGludm9sdmVzIGEgbWVudGFsIGNoZWNrbGlzdC4gKldoYXQmIzM5O3MgdGhlIGNvbnRleHQ/KiBJcyB0aGlzIGEgc3BlY2lmaWMgbW9kdWxlLCBhIGxpYnJhcnkgZnVuY3Rpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBLbm93aW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpbGwgZnJhbWUgbXkgdW5kZXJzdGFuZGluZy4gKldoYXQmIzM5O3MgdGhlIGNvcmUgZnVuY3Rpb24/KiBGcm9tIHRoZSBuYW1lLCBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIGFuIGlucHV0L291dHB1dCBvcGVyYXRpb24sIHBvdGVudGlhbGx5IHJlbGF0ZWQgdG8gcmVnaXN0ZXJzIGFuZCBsaWtlbHkgd29ya2luZyB3aXRoIHZlY3RvcnMgb3IgYXJyYXlzIG9mIGRhdGEuIE15IG1pbmQgYXV0b21hdGljYWxseSBzdGFydHMgYnVpbGRpbmcgYSBtZW50YWwgbW9kZWwgb2YgaG93IGRhdGEgbWlnaHQgYmUgaW1wb3J0ZWQgLSBiaXR3aXNlIG9wZXJhdGlvbnMsIG1lbW9yeSBtYXBwaW5nLCBkYXRhIHN0cnVjdHVyZXMsIG9yIGludGVyZmFjZSBjb25zaWRlcmF0aW9ucy4gSSYjMzk7bSByZWFkeSB0byBkaWcgaW4gYW5kIGJyZWFrIGl0IGRvd24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvcnNyYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTYyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTYyMDpcdGludCBpb19pbXBvcnRfcmVnX3ZlYyhpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuMTYyMTpcdFx0XHRcdHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW91X3ZlYyAqdmVjLFxuMTYyMjpcdFx0XHRcdHVuc2lnbmVkIG5yX2lvdnMsIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKVxuMTYyMzpcdHtcbjE2MjQ6XHRcdHN0cnVjdCBpb19yc3JjX25vZGUgKm5vZGU7XG4xNjI1Olx0XHRzdHJ1Y3QgaW9fbWFwcGVkX3VidWYgKmltdTtcbjE2MjY6XHRcdHVuc2lnbmVkIGlvdmVjX29mZjtcbjE2Mjc6XHRcdHN0cnVjdCBpb3ZlYyAqaW92O1xuMTYyODpcdFx0dW5zaWduZWQgbnJfc2VncztcbjE2Mjk6XHRcbjE2MzA6XHRcdG5vZGUgPSBpb19maW5kX2J1Zl9ub2RlKHJlcSwgaXNzdWVfZmxhZ3MpO1xuMTYzMTpcdFx0aWYgKCFub2RlKVxuMTYzMjpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjE2MzM6XHRcdGltdSA9IG5vZGUtXHUwMDNlYnVmO1xuMTYzNDpcdFx0aWYgKCEoaW11LVx1MDAzZWRpciBcdTAwMjYgKDEgXHUwMDNjXHUwMDNjIGRkaXIpKSlcbjE2MzU6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4xNjM2Olx0XG4xNjM3Olx0XHRpb3ZlY19vZmYgPSB2ZWMtXHUwMDNlbnIgLSBucl9pb3ZzO1xuMTYzODpcdFx0aW92ID0gdmVjLVx1MDAzZWlvdmVjICYjNDM7IGlvdmVjX29mZjtcbjE2Mzk6XHRcbjE2NDA6XHRcdGlmIChpbXUtXHUwMDNlZmxhZ3MgXHUwMDI2IElPX1JFR0JVRl9GX0tCVUYpIHtcbjE2NDE6XHRcdFx0aW50IHJldCA9IGlvX2tlcm5fYnZlY19zaXplKGlvdiwgbnJfaW92cywgaW11LCBcdTAwMjZucl9zZWdzKTtcbjE2NDI6XHRcbjE2NDM6XHRcdFx0aWYgKHVubGlrZWx5KHJldCkpXG4xNjQ0Olx0XHRcdFx0cmV0dXJuIHJldDtcbjE2NDU6XHRcdH0gZWxzZSB7XG4xNjQ2Olx0XHRcdGludCByZXQgPSBpb19lc3RpbWF0ZV9idmVjX3NpemUoaW92LCBucl9pb3ZzLCBpbXUpO1xuMTY0NzpcdFxuMTY0ODpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTY0OTpcdFx0XHRcdHJldHVybiByZXQ7XG4xNjUwOlx0XHRcdG5yX3NlZ3MgPSByZXQ7XG4xNjUxOlx0XHR9XG4xNjUyOlx0XG4xNjUzOlx0XHRpZiAoc2l6ZW9mKHN0cnVjdCBiaW9fdmVjKSBcdTAwM2Ugc2l6ZW9mKHN0cnVjdCBpb3ZlYykpIHtcbjE2NTQ6XHRcdFx0c2l6ZV90IGJ2ZWNfYnl0ZXM7XG4xNjU1Olx0XG4xNjU2Olx0XHRcdGlmIChjaGVja19tdWxfb3ZlcmZsb3coKHNpemVfdClucl9zZWdzLCBzaXplb2Yoc3RydWN0IGJpb192ZWMpLFxuMTY1NzpcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmJ2ZWNfYnl0ZXMpIHx8XG4xNjU4Olx0XHRcdCAgICBjaGVja19hZGRfb3ZlcmZsb3coYnZlY19ieXRlcywgc2l6ZW9mKCppb3YpIC0gMSxcbjE2NTk6XHRcdFx0XHRcdCAgICAgICBcdTAwMjZidmVjX2J5dGVzKSlcbjE2NjA6XHRcdFx0XHRyZXR1cm4gLUVPVkVSRkxPVztcbjE2NjE6XHRcdFx0bnJfc2VncyA9IGJ2ZWNfYnl0ZXMgLyBzaXplb2YoKmlvdik7XG4xNjYyOlx0XHRcdG5yX3NlZ3MgJiM0Mzs9IG5yX2lvdnM7XG4xNjYzOlx0XHR9XG4xNjY0Olx0XG4xNjY1Olx0XHRpZiAobnJfc2VncyBcdTAwM2UgdmVjLVx1MDAzZW5yKSB7XG4xNjY2Olx0XHRcdHN0cnVjdCBpb3VfdmVjIHRtcF92ZWMgPSB7fTtcbjE2Njc6XHRcdFx0aW50IHJldDtcbjE2Njg6XHRcbjE2Njk6XHRcdFx0cmV0ID0gaW9fdmVjX3JlYWxsb2MoXHUwMDI2dG1wX3ZlYywgbnJfc2Vncyk7XG4xNjcwOlx0XHRcdGlmIChyZXQpXG4xNjcxOlx0XHRcdFx0cmV0dXJuIHJldDtcbjE2NzI6XHRcbjE2NzM6XHRcdFx0aW92ZWNfb2ZmID0gdG1wX3ZlYy5uciAtIG5yX2lvdnM7XG4xNjc0Olx0XHRcdG1lbWNweSh0bXBfdmVjLmlvdmVjICYjNDM7IGlvdmVjX29mZiwgaW92LCBzaXplb2YoKmlvdikgKiBucl9pb3ZzKTtcbjE2NzU6XHRcdFx0aW9fdmVjX2ZyZWUodmVjKTtcbjE2NzY6XHRcbjE2Nzc6XHRcdFx0KnZlYyA9IHRtcF92ZWM7XG4xNjc4Olx0XHRcdGlvdiA9IHZlYy1cdTAwM2Vpb3ZlYyAmIzQzOyBpb3ZlY19vZmY7XG4xNjc5Olx0XHRcdHJlcS1cdTAwM2VmbGFncyB8PSBSRVFfRl9ORUVEX0NMRUFOVVA7XG4xNjgwOlx0XHR9XG4xNjgxOlx0XG4xNjgyOlx0XHRpZiAoaW11LVx1MDAzZWZsYWdzIFx1MDAyNiBJT19SRUdCVUZfRl9LQlVGKVxuMTY4MzpcdFx0XHRyZXR1cm4gaW9fdmVjX2ZpbGxfa2Vybl9idmVjKGRkaXIsIGl0ZXIsIGltdSwgaW92LCBucl9pb3ZzLCB2ZWMpO1xuMTY4NDpcdFxuMTY4NTpcdFx0cmV0dXJuIGlvX3ZlY19maWxsX2J2ZWMoZGRpciwgaXRlciwgaW11LCBpb3YsIG5yX2lvdnMsIHZlYyk7XG4xNjg2Olx0fVxuMTY4NzpcdFxuMTY4ODpcdGludCBpb19wcmVwX3JlZ19pb3ZlYyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvdV92ZWMgKml2LFxuMTY4OTpcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgaW92ZWMgX191c2VyICp1dmVjLCBzaXplX3QgdXZlY19zZWdzKVxuMTY5MDpcdHtcbjE2OTE6XHRcdHN0cnVjdCBpb3ZlYyAqaW92O1xuMTY5MjpcdFx0aW50IGlvdmVjX29mZiwgcmV0O1xuMTY5MzpcdFx0dm9pZCAqcmVzO1xuMTY5NDpcdFxuMTY5NTpcdFx0aWYgKHV2ZWNfc2VncyBcdTAwM2UgaXYtXHUwMDNlbnIpIHtcbjE2OTY6XHRcdFx0cmV0ID0gaW9fdmVjX3JlYWxsb2MoaXYsIHV2ZWNfc2Vncyk7XG4xNjk3Olx0XHRcdGlmIChyZXQpXG4xNjk4Olx0XHRcdFx0cmV0dXJuIHJldDtcbjE2OTk6XHRcdFx0cmVxLVx1MDAzZWZsYWdzIHw9IFJFUV9GX05FRURfQ0xFQU5VUDtcbjE3MDA6XHRcdH1cbjE3MDE6XHRcbjE3MDI6XHRcdC8qIHBhZCBpb3ZlYyB0byB0aGUgcmlnaHQgKi9cbjE3MDM6XHRcdGlvdmVjX29mZiA9IGl2LVx1MDAzZW5yIC0gdXZlY19zZWdzO1xuMTcwNDpcdFx0aW92ID0gaXYtXHUwMDNlaW92ZWMgJiM0MzsgaW92ZWNfb2ZmO1xuMTcwNTpcdFx0cmVzID0gaW92ZWNfZnJvbV91c2VyKHV2ZWMsIHV2ZWNfc2VncywgdXZlY19zZWdzLCBpb3YsXG4xNzA2Olx0XHRcdFx0ICAgICAgaW9faXNfY29tcGF0KHJlcS1cdTAwM2VjdHgpKTtcbjE3MDc6XHRcdGlmIChJU19FUlIocmVzKSlcbjE3MDg6XHRcdFx0cmV0dXJuIFBUUl9FUlIocmVzKTtcbjE3MDk6XHRcbjE3MTA6XHRcdHJlcS1cdTAwM2VmbGFncyB8PSBSRVFfRl9JTVBPUlRfQlVGRkVSO1xuMTcxMTpcdFx0cmV0dXJuIDA7XG4xNzEyOlx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzA0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludGVnZXIgT3ZlcmZsb3cgQnVnIEFuYWx5c2lzKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBnb3QuIFRoZSBjcnV4IG9mIHRoaXMgaXNzdWUgaXMgYW4gaW50ZWdlciBvdmVyZmxvdyBpbiB0aGUgYG5yX3NlZ3NgIGNhbGN1bGF0aW9uLiBTcGVjaWZpY2FsbHksIGluIHRoYXQgY29kZSBzbmlwcGV0LCBgbnJfc2Vnc2AgaXMgYmVpbmcgbXVsdGlwbGllZCBieSB0aGUgc2l6ZSBvZiBgc3RydWN0IGJpb192ZWNgLiBJZiBgbnJfc2Vnc2AgaGFwcGVucyB0byBiZSBsYXJnZSBlbm91Z2gsIHRoaXMgbXVsdGlwbGljYXRpb24gd2lsbCBvdmVyZmxvdywgbGVhZGluZyB0byBgbnJfc2Vnc2AgYmVjb21pbmcgc21hbGxlciB0aGFuIGl0cyBjb3JyZWN0IHZhbHVlLgoKVGhlIHN1YnNlcXVlbnQgY29kZSBibG9jayBpcyB3aGVyZSB0aGUgcHJvYmxlbSBtYW5pZmVzdHMuIElmIHRoYXQgb3ZlcmZsb3cgb2NjdXJzLCB0aGUgY2hlY2sgYGlmIChucl9zZWdzICZndDsgdmVjLSZndDtucilgIGJlY29tZXMgZmF1bHR5LiBUaGUgYGlvX3ZlY19yZWFsbG9jYCBmdW5jdGlvbiBtaWdodCBub3QgYmUgY2FsbGVkIHdoZW4gaXQgc2hvdWxkIGJlLCBvciBpZiBpdCBpcyBjYWxsZWQsIHRoZSBhbGxvY2F0aW9uIG1pZ2h0IGJlIGluc3VmZmljaWVudCB0byBjb3ZlciB0aGUgYWN0dWFsIGBucl9zZWdzYCB0aGF0IHdlIG5lZWQsIG9yIHRoZSBgbnJfc2Vnc2AgYXMgY2FsY3VsYXRlZCAqcG9zdCotb3ZlcmZsb3cgbWF5IGJlIHVzZWQgZm9yIGFsbG9jYXRpb24uIFRoaXMgc2V0cyB0aGUgc3RhZ2UgZm9yIGEgY2xhc3NpYyBidWZmZXIgb3ZlcmZsb3cuIEJlY2F1c2Ugb2YgdGhpcyBpbml0aWFsIG92ZXJmbG93LCB0aGVyZSBpc24mIzM5O3QgZW5vdWdoIG1lbW9yeSBhbGxvY2F0ZWQuIExhdGVyLCBgaW9fdmVjX2ZpbGxfa2Vybl9idmVjYCBvciBgaW9fdmVjX2ZpbGxfYnZlY2Agd2lsbCB0aGVuIHdyaXRlIGRhdGEgb3V0IG9mIGJvdW5kcyBpbnRvIGVpdGhlciBgdmVjLSZndDtpb3ZlY2Agb3IgYHZlYy0mZ3Q7YnZlY2AsIHNpbmNlIHRoZSB3cml0ZSBzaXplLCBkdWUgdG8gdGhlIGZhdWx0eSBgbnJfc2Vnc2AsIHdpbGwgYmUgbGFyZ2VyIHRoYW4gdGhlIGJ1ZmZlci4KClRoZSBnb29kIG5ld3MgaXMgdGhhdCB0aGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIG91dC1vZi1ib3VuZHMgd3JpdGUuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9ybWF0aW9uIGxlYWthZ2UgdG8gd29ycnkgYWJvdXQgaGVyZSwgdGhhbmtmdWxseS4gS0FTQU4gc2hvdWxkIGJlIGFuIGlkZWFsIHRvb2wgdG8gY2F0Y2ggdGhpcyBhcyBpdCYjMzk7cyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgZm9yIGRldGVjdGluZyB0aGlzIGtpbmQgb2YgbWVtb3J5IGVycm9yLiBXZSBkb24mIzM5O3QgaGF2ZSB0byB3b3JyeSBhYm91dCBkYXRhIHRoYXQmIzM5O3MgYWxyZWFkeSBpbiB0aGUgbWVtb3J5LCB3ZSBhcmUganVzdCBsb29raW5nIGZvciBzb21ldGhpbmcgKm5ldyogYmVpbmcgcGxhY2VkIGluIHRoZSB3cm9uZyBzcG90LgoKTm93LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgYGlvX3ZlY19maWxsX2J2ZWNgIGFuZCBgaW9fdmVjX2ZpbGxfa2Vybl9idmVjYCB0byBiZSBjZXJ0YWluIHdlIGFyZSBjb3JyZWN0IGluIG91ciBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjE6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fdmVjX2ZpbGxfYnZlYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nL3JzcmMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9yc3JjLmM9MTQ2MD1pbnQgaW9fdmVjX3JlYWxsb2Moc3RydWN0IGlvdV92ZWMgKml2LCB1bnNpZ25lZCBucl9lbnRyaWVzKVxuLS1cbmlvX3VyaW5nL3JzcmMuYy0xNDc0LVxuaW9fdXJpbmcvcnNyYy5jOjE0NzU6c3RhdGljIGludCBpb192ZWNfZmlsbF9idmVjKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG5pb191cmluZy9yc3JjLmMtMTQ3Ni1cdFx0XHRcdHN0cnVjdCBpb19tYXBwZWRfdWJ1ZiAqaW11LFxuLS1cbmlvX3VyaW5nL3JzcmMuYz0xNjIwPWludCBpb19pbXBvcnRfcmVnX3ZlYyhpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbmlvX3VyaW5nL3JzcmMuYy0xNjg0LVxuaW9fdXJpbmcvcnNyYy5jOjE2ODU6XHRyZXR1cm4gaW9fdmVjX2ZpbGxfYnZlYyhkZGlyLCBpdGVyLCBpbXUsIGlvdiwgbnJfaW92cywgdmVjKTtcbmlvX3VyaW5nL3JzcmMuYy0xNjg2LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjE6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg1NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGlvX3ZlY19maWxsX2J2ZWNgIGZ1bmN0aW9uLgoKKipBbmFseXppbmcgYGlvX3ZlY19maWxsX2J2ZWNgKioKCkFscmlnaHQsIHNvIEkmIzM5O20gcHJlc2VudGVkIHdpdGggYGlvX3ZlY19maWxsX2J2ZWNgLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBiZWdpbnMgYnkgZXhhbWluaW5nIHRoZSBuYW1lLCB3aGljaCBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBpcyBpbnZvbHZlZCBpbiBmaWxsaW5nIGEgYmxvY2sgdmVjdG9yIChgYnZlY2ApIHdpdGggZGF0YSBmcm9tIGFuIGBpb192ZWNgLiBUaGlzIGlzIGEgY2xhc3NpYyBwYXR0ZXJuIGluIEkvTyBvcGVyYXRpb25zLCBsaWtlbHkgYWltZWQgYXQgZWZmaWNpZW50IGRhdGEgdHJhbnNmZXIgYmV0d2VlbiBrZXJuZWwgc3BhY2UgYnVmZmVycyBhbmQgdXNlci1zcGFjZSBtZW1vcnkgb3IgZXZlbiBkaXNrIGJsb2Nrcy4KCkkgaW1tZWRpYXRlbHkgc3RhcnQgdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gSXMgdGhpcyBvcHRpbWl6ZWQgZm9yIERNQT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIG1lbW9yeSBjb3BpZXMsIGFuZCBjYW4gdGhleSBiZSByZWR1Y2VkPyBUaGUgYGlvX3ZlY2Agc3RydWN0dXJlIGltcGxpZXMgd2XigJlyZSBkZWFsaW5nIHdpdGggc2NhdHRlci9nYXRoZXIgSS9PLCBtZWFuaW5nIGRhdGEgbWF5IG5vdCBiZSBjb250aWd1b3VzLiBTbywgSSBuZWVkIHRvIGxvb2sgZm9yIGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhhdC4gQXJlIHRoZXkgdGFraW5nIGNhcmUgdG8gb3B0aW1pc2UgYWdhaW5zdCBtZW1vcnkgZnJhZ21lbnRhdGlvbj8KCkkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBsb2dpYyB0aGF0IGl0ZXJhdGVzIHRocm91Z2ggdGhlIGBpb192ZWNgLCB3aGljaCBpcyBhIGNvbGxlY3Rpb24gb2YgYGlvdmAgc3RydWN0cy4gVGhlc2UgYGlvdmBzIHR5cGljYWxseSBkZXNjcmliZSBhIG1lbW9yeSByZWdpb24sIGFuIGFkZHJlc3MgYW5kIGl0cyBsZW5ndGguIEZvciBlYWNoIGBpb3ZgLCB0aGVyZSB3aWxsIGJlIHNvbWUgY29weWluZyBsb2dpYyB0aGF0IHB1dHMgZGF0YSBmcm9tIHRoaXMgcmVnaW9uIGludG8gdGhlIGBidmVjYC4gSXQmIzM5O3MgZ29pbmcgdG8gYmUgZXNzZW50aWFsIHRvIGNvbmZpcm0gdGhlIGZ1bmN0aW9uIGhhbmRsZXMgYm91bmRhcnkgY29uZGl0aW9ucywgbGlrZSB3aGVuIHRoZSB0b3RhbCBzaXplIHRvIGNvcHkgaXMgbGVzcyB0aGFuIHRoZSBjYXBhY2l0eSBvZiB0aGUgYGJ2ZWNgLCBvciB3aGVuIGEgc2luZ2xlIGBpb3ZgIGlzIGxhcmdlciB0aGFuIHJlbWFpbmluZyBzcGFjZSB3aXRoaW4gdGhlIGRlc3RpbmF0aW9uLiBXaGF0IGFib3V0IGVycm9yIGhhbmRsaW5nLCB0b28/IEhvdyBhcmUgYW55IHBhcnRpYWwgd3JpdGVzIG9yIGVycm9ycyBmcm9tIHRoZSB1bmRlcmx5aW5nIHN0b3JhZ2UgZGVhbHQgd2l0aD8KCkkmIzM5O20gYWxzbyBjdXJpb3VzIGFib3V0IHRoZSBsb3ctbGV2ZWwgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQuIEkmIzM5O20gaG9waW5nIHRvIHNlZSBhIHNvbGlkIGltcGxlbWVudGF0aW9uIHRoYXQgYXZvaWRzIHVubmVjZXNzYXJ5IG92ZXJoZWFkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL3JzcmMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0NzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQ3NTpcdHN0YXRpYyBpbnQgaW9fdmVjX2ZpbGxfYnZlYyhpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuMTQ3NjpcdFx0XHRcdFx0c3RydWN0IGlvX21hcHBlZF91YnVmICppbXUsXG4xNDc3Olx0XHRcdFx0XHRzdHJ1Y3QgaW92ZWMgKmlvdmVjLCB1bnNpZ25lZCBucl9pb3ZzLFxuMTQ3ODpcdFx0XHRcdFx0c3RydWN0IGlvdV92ZWMgKnZlYylcbjE0Nzk6XHR7XG4xNDgwOlx0XHR1bnNpZ25lZCBsb25nIGZvbGlvX3NpemUgPSAxIFx1MDAzY1x1MDAzYyBpbXUtXHUwMDNlZm9saW9fc2hpZnQ7XG4xNDgxOlx0XHR1bnNpZ25lZCBsb25nIGZvbGlvX21hc2sgPSBmb2xpb19zaXplIC0gMTtcbjE0ODI6XHRcdHN0cnVjdCBiaW9fdmVjICpyZXNfYnZlYyA9IHZlYy1cdTAwM2VidmVjO1xuMTQ4MzpcdFx0c2l6ZV90IHRvdGFsX2xlbiA9IDA7XG4xNDg0Olx0XHR1bnNpZ25lZCBidmVjX2lkeCA9IDA7XG4xNDg1Olx0XHR1bnNpZ25lZCBpb3ZfaWR4O1xuMTQ4NjpcdFxuMTQ4NzpcdFx0Zm9yIChpb3ZfaWR4ID0gMDsgaW92X2lkeCBcdTAwM2MgbnJfaW92czsgaW92X2lkeCYjNDM7JiM0MzspIHtcbjE0ODg6XHRcdFx0c2l6ZV90IGlvdl9sZW4gPSBpb3ZlY1tpb3ZfaWR4XS5pb3ZfbGVuO1xuMTQ4OTpcdFx0XHR1NjQgYnVmX2FkZHIgPSAodTY0KSh1aW50cHRyX3QpaW92ZWNbaW92X2lkeF0uaW92X2Jhc2U7XG4xNDkwOlx0XHRcdHN0cnVjdCBiaW9fdmVjICpzcmNfYnZlYztcbjE0OTE6XHRcdFx0c2l6ZV90IG9mZnNldDtcbjE0OTI6XHRcdFx0aW50IHJldDtcbjE0OTM6XHRcbjE0OTQ6XHRcdFx0cmV0ID0gdmFsaWRhdGVfZml4ZWRfcmFuZ2UoYnVmX2FkZHIsIGlvdl9sZW4sIGltdSk7XG4xNDk1Olx0XHRcdGlmICh1bmxpa2VseShyZXQpKVxuMTQ5NjpcdFx0XHRcdHJldHVybiByZXQ7XG4xNDk3Olx0XG4xNDk4Olx0XHRcdGlmICh1bmxpa2VseSghaW92X2xlbikpXG4xNDk5Olx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4xNTAwOlx0XHRcdGlmICh1bmxpa2VseShjaGVja19hZGRfb3ZlcmZsb3codG90YWxfbGVuLCBpb3ZfbGVuLCBcdTAwMjZ0b3RhbF9sZW4pKSlcbjE1MDE6XHRcdFx0XHRyZXR1cm4gLUVPVkVSRkxPVztcbjE1MDI6XHRcbjE1MDM6XHRcdFx0b2Zmc2V0ID0gYnVmX2FkZHIgLSBpbXUtXHUwMDNldWJ1ZjtcbjE1MDQ6XHRcdFx0LypcbjE1MDU6XHRcdFx0ICogT25seSB0aGUgZmlyc3QgYnZlYyBjYW4gaGF2ZSBub24gemVybyBidl9vZmZzZXQsIGFjY291bnQgaXRcbjE1MDY6XHRcdFx0ICogaGVyZSBhbmQgd29yayB3aXRoIGZ1bGwgZm9saW9zIGJlbG93LlxuMTUwNzpcdFx0XHQgKi9cbjE1MDg6XHRcdFx0b2Zmc2V0ICYjNDM7PSBpbXUtXHUwMDNlYnZlY1swXS5idl9vZmZzZXQ7XG4xNTA5Olx0XG4xNTEwOlx0XHRcdHNyY19idmVjID0gaW11LVx1MDAzZWJ2ZWMgJiM0MzsgKG9mZnNldCBcdTAwM2VcdTAwM2UgaW11LVx1MDAzZWZvbGlvX3NoaWZ0KTtcbjE1MTE6XHRcdFx0b2Zmc2V0IFx1MDAyNj0gZm9saW9fbWFzaztcbjE1MTI6XHRcbjE1MTM6XHRcdFx0Zm9yICg7IGlvdl9sZW47IG9mZnNldCA9IDAsIGJ2ZWNfaWR4JiM0MzsmIzQzOywgc3JjX2J2ZWMmIzQzOyYjNDM7KSB7XG4xNTE0Olx0XHRcdFx0c2l6ZV90IHNlZ19zaXplID0gbWluX3Qoc2l6ZV90LCBpb3ZfbGVuLFxuMTUxNTpcdFx0XHRcdFx0XHRcdGZvbGlvX3NpemUgLSBvZmZzZXQpO1xuMTUxNjpcdFxuMTUxNzpcdFx0XHRcdGJ2ZWNfc2V0X3BhZ2UoXHUwMDI2cmVzX2J2ZWNbYnZlY19pZHhdLFxuMTUxODpcdFx0XHRcdFx0ICAgICAgc3JjX2J2ZWMtXHUwMDNlYnZfcGFnZSwgc2VnX3NpemUsIG9mZnNldCk7XG4xNTE5Olx0XHRcdFx0aW92X2xlbiAtPSBzZWdfc2l6ZTtcbjE1MjA6XHRcdFx0fVxuMTUyMTpcdFx0fVxuMTUyMjpcdFx0aWYgKHRvdGFsX2xlbiBcdTAwM2UgTUFYX1JXX0NPVU5UKVxuMTUyMzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE1MjQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjE6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzExNgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIE1lbW9yeSBTYWZldHkgSXNzdWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBpb192ZWNfZmlsbF9idmVjYCBmdW5jdGlvbiBhbmQgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgKmlmKiBgbnJfc2Vnc2AgaXMgc2V0IHVwIGNvcnJlY3RseS4gU3BlY2lmaWNhbGx5LCB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciB3cml0aW5nIGRhdGEgaW50byBgcmVzX2J2ZWNbYnZlY19pZHhdYC4gVGhlIGNyaXRpY2FsIHBvaW50IGhlcmUgaXMgdGhhdCBpZiBgbnJfc2Vnc2AgaXMgdG9vIHNtYWxsLCB0aGVuIGByZXNfYnZlY2AgLSB3aGljaCwgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBpcyBlc3NlbnRpYWxseSBgdmVjLSZndDtidmVjYCAtIHdpbGwgYmUgdW5kZXJzaXplZC4gQ29uc2VxdWVudGx5LCBgYnZlY19pZHhgIGlzIGdvaW5nIHRvIHdhbmRlciBiZXlvbmQgdGhlIGJvdW5kcyBvZiB0aGF0IGFycmF5LCBhbmQgYmFtLCB3ZSBoYXZlIGFuIG91dC1vZi1ib3VuZHMgd3JpdGUuCgpGb3J0dW5hdGVseSwgaXQgbG9va3MgbGlrZSBLQVNBTiBzaG91bGQgaGF2ZSB0aGlzIGNvdmVyZWQuIEl0JiMzOTtsbCBkZXRlY3QgdGhhdCB3cml0ZSwgc28gd2UmIzM5O3JlIGdvb2QgdGhlcmUuIEFuZCBhcyBmYXIgYXMgSSBjYW4gdGVsbCwgdGhlcmUmIzM5O3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBpbiB0aGUgcHJvY2Vzcy4KClRodXMsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcsIEtNU0FOIHNob3VsZG4mIzM5O3QgYmUgbmVjZXNzYXJ5IGhlcmUuCgpCdXQsIHlvdSBrbm93IG1lLCBJIGxpa2UgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBKdXN0IHRvIGJlIGNvbXBsZXRlbHkgdGhvcm91Z2gsIGxldCBtZSBxdWlja2x5IGdsYW5jZSBhdCBgaW9fdmVjX2ZpbGxfa2Vybl9idmVjYCBqdXN0IHRvIGJlIG9uZSBodW5kcmVkIHBlcmNlbnQgc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBHb3R0YSBtYWtlIHN1cmUgd2UmIzM5O3JlIGNvdmVyaW5nIGFsbCBvdXIgYmFzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvcnNyYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTI1Olx0XHRpb3ZfaXRlcl9idmVjKGl0ZXIsIGRkaXIsIHJlc19idmVjLCBidmVjX2lkeCwgdG90YWxfbGVuKTtcbjE1MjY6XHRcdHJldHVybiAwO1xuMTUyNzpcdH1cbjE1Mjg6XHRcbjE1Mjk6XHRzdGF0aWMgaW50IGlvX2VzdGltYXRlX2J2ZWNfc2l6ZShzdHJ1Y3QgaW92ZWMgKmlvdiwgdW5zaWduZWQgbnJfaW92cyxcbjE1MzA6XHRcdFx0XHRcdCBzdHJ1Y3QgaW9fbWFwcGVkX3VidWYgKmltdSlcbjE1MzE6XHR7XG4xNTMyOlx0XHR1bnNpZ25lZCBzaGlmdCA9IGltdS1cdTAwM2Vmb2xpb19zaGlmdDtcbjE1MzM6XHRcdHNpemVfdCBtYXhfc2VncyA9IDA7XG4xNTM0Olx0XHR1bnNpZ25lZCBpO1xuMTUzNTpcdFxuMTUzNjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfaW92czsgaSYjNDM7JiM0MzspIHtcbjE1Mzc6XHRcdFx0bWF4X3NlZ3MgJiM0Mzs9IChpb3ZbaV0uaW92X2xlbiBcdTAwM2VcdTAwM2Ugc2hpZnQpICYjNDM7IDI7XG4xNTM4Olx0XHRcdGlmIChtYXhfc2VncyBcdTAwM2UgSU5UX01BWClcbjE1Mzk6XHRcdFx0XHRyZXR1cm4gLUVPVkVSRkxPVztcbjE1NDA6XHRcdH1cbjE1NDE6XHRcdHJldHVybiBtYXhfc2VncztcbjE1NDI6XHR9XG4xNTQzOlx0XG4xNTQ0Olx0c3RhdGljIGludCBpb192ZWNfZmlsbF9rZXJuX2J2ZWMoaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbjE1NDU6XHRcdFx0XHRcdCBzdHJ1Y3QgaW9fbWFwcGVkX3VidWYgKmltdSxcbjE1NDY6XHRcdFx0XHRcdCBzdHJ1Y3QgaW92ZWMgKmlvdmVjLCB1bnNpZ25lZCBucl9pb3ZzLFxuMTU0NzpcdFx0XHRcdFx0IHN0cnVjdCBpb3VfdmVjICp2ZWMpXG4xNTQ4Olx0e1xuMTU0OTpcdFx0Y29uc3Qgc3RydWN0IGJpb192ZWMgKnNyY19idmVjID0gaW11LVx1MDAzZWJ2ZWM7XG4xNTUwOlx0XHRzdHJ1Y3QgYmlvX3ZlYyAqcmVzX2J2ZWMgPSB2ZWMtXHUwMDNlYnZlYztcbjE1NTE6XHRcdHVuc2lnbmVkIHJlc19pZHggPSAwO1xuMTU1MjpcdFx0c2l6ZV90IHRvdGFsX2xlbiA9IDA7XG4xNTUzOlx0XHR1bnNpZ25lZCBpb3ZfaWR4O1xuMTU1NDpcdFxuMTU1NTpcdFx0Zm9yIChpb3ZfaWR4ID0gMDsgaW92X2lkeCBcdTAwM2MgbnJfaW92czsgaW92X2lkeCYjNDM7JiM0MzspIHtcbjE1NTY6XHRcdFx0c2l6ZV90IG9mZnNldCA9IChzaXplX3QpKHVpbnRwdHJfdClpb3ZlY1tpb3ZfaWR4XS5pb3ZfYmFzZTtcbjE1NTc6XHRcdFx0c2l6ZV90IGlvdl9sZW4gPSBpb3ZlY1tpb3ZfaWR4XS5pb3ZfbGVuO1xuMTU1ODpcdFx0XHRzdHJ1Y3QgYnZlY19pdGVyIGJpID0ge1xuMTU1OTpcdFx0XHRcdC5iaV9zaXplICAgICAgICA9IG9mZnNldCAmIzQzOyBpb3ZfbGVuLFxuMTU2MDpcdFx0XHR9O1xuMTU2MTpcdFx0XHRzdHJ1Y3QgYmlvX3ZlYyBidjtcbjE1NjI6XHRcbjE1NjM6XHRcdFx0YnZlY19pdGVyX2FkdmFuY2Uoc3JjX2J2ZWMsIFx1MDAyNmJpLCBvZmZzZXQpO1xuMTU2NDpcdFx0XHRmb3JfZWFjaF9tcF9idmVjKGJ2LCBzcmNfYnZlYywgYmksIGJpKVxuMTU2NTpcdFx0XHRcdHJlc19idmVjW3Jlc19pZHgmIzQzOyYjNDM7XSA9IGJ2O1xuMTU2NjpcdFx0XHR0b3RhbF9sZW4gJiM0Mzs9IGlvdl9sZW47XG4xNTY3Olx0XHR9XG4xNTY4Olx0XHRpb3ZfaXRlcl9idmVjKGl0ZXIsIGRkaXIsIHJlc19idmVjLCByZXNfaWR4LCB0b3RhbF9sZW4pO1xuMTU2OTpcdFx0cmV0dXJuIDA7XG4xNTcwOlx0fVxuMTU3MTpcdFxuMTU3MjpcdHN0YXRpYyBpbnQgaW92X2tlcm5fYnZlY19zaXplKGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LFxuMTU3MzpcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBpb19tYXBwZWRfdWJ1ZiAqaW11LFxuMTU3NDpcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCAqbnJfc2VnKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDE3CgkJCQkJCQlvdXRwdXQ6IDIwNQoJCQkJCQkJdGhvdWdodHM6IDI1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCdWcgYW5kIHRoZSBBcHByb3ByaWF0ZSBUb29saW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIGxvb2tlZCBhdCB0aGlzIGNvZGUsIGFuZCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBgcmVzX2J2ZWNbcmVzX2lkeCYjNDM7JiM0MztdID0gYnY7YCB3aWxsIGNhdXNlIGFuIG91dC1vZi1ib3VuZHMgd3JpdGUgaWYgYHJlc19idmVjYCBpc24mIzM5O3QgYmlnIGVub3VnaC4gVGhhdCYjMzk7cyB0ZXh0Ym9vayBidWZmZXIgb3ZlcmZsb3cgdGVycml0b3J5LiBObyBhbWJpZ3VpdHkgdGhlcmUuIEFuZCBob25lc3RseSwgS0FTQU4gaXMgdGhlIHBlcmZlY3QgdG9vbCBmb3IgdGhpcyBwYXJ0aWN1bGFyIGpvYi4gSXQmIzM5O3MgZGVzaWduZWQgdG8gbmFpbCB0aGVzZSBraW5kcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuIE5vIG5lZWQgdG8gb3ZlcmNvbXBsaWNhdGUgdGhpbmdzLgoKTGV0IG1lIGJyZWFrIGRvd24gdGhlIHJlYXNvbmluZyBmb3IgdGhlIHJlY29yZC4gVGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGR1cmluZyB0aGUgYG5yX3NlZ3NgIGNhbGN1bGF0aW9uIHdpdGhpbiBgaW9faW1wb3J0X3JlZ192ZWNgLiBFc3NlbnRpYWxseSwgaWYgYG5yX3NlZ3MgKiBzaXplb2Yoc3RydWN0IGJpb192ZWMpYCBvdmVyZmxvd3MsIGl0IGVmZmVjdGl2ZWx5IHJlZHVjZXMgdGhlIHZhbHVlIG9mIGBucl9zZWdzYCBiZWxvdyB0aGUgYWN0dWFsIHJlcXVpcmVtZW50LiBDb25zZXF1ZW50bHksIGB2ZWMtJmd0O2J2ZWNgIGVuZHMgdXAgdW5kZXItYWxsb2NhdGVkIG9yIGluc3VmZmljaWVudGx5IHJlYWxsb2NhdGVkIHdpdGhpbiBgaW9fdmVjX3JlYWxsb2NgLiBUaGVuLCBmdXJ0aGVyIGRvd24gdGhlIGxpbmUsIGVpdGhlciBgaW9fdmVjX2ZpbGxfYnZlY2Agb3IgYGlvX3ZlY19maWxsX2tlcm5fYnZlY2AgYXR0ZW1wdCB0byB3cml0ZSBwYXN0IHRoZSBhbGxvY2F0ZWQgYnVmZmVyIG9mIGB2ZWMtJmd0O2J2ZWNgLCB3aGljaCBpcyBhIGNsYXNzaWMgaGVhcCBvdXQtb2YtYm91bmRzIHdyaXRlIOKAkyBhIGJ1ZmZlciBvdmVyZmxvdywgcGxhaW4gYW5kIHNpbXBsZS4gS0FTQU4gaXMgYnVpbHQgdG8gY2F0Y2ggdGhpcyBraW5kIG9mIHRoaW5nIHJlbGlhYmx5LgoKVGhpcyBpc24mIzM5O3QgYSBzaXR1YXRpb24gd2hlcmUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSwgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBiZWluZyB1c2VkLiBUaG9zZSBhcmUgdGhlIHR5cGVzIG9mIHNjZW5hcmlvcyB3aGVyZSBLTVNBTiBtaWdodCBjb21lIGludG8gcGxheS4gQnV0IGhlcmU/IE5vLCB0aGlzIGlzIHB1cmVseSBhIGJ1ZmZlciBvdmVyZmxvdyBpc3N1ZS4gVGhlcmVmb3JlLCB0aGVyZSYjMzk7cyBubyBqdXN0aWZpY2F0aW9uIGZvciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIEtBU0FOIHdpbGwgYmUgc3VmZmljaWVudCBhbmQgc2hvdWxkIGNhdGNoIHRoZSBlcnJvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjE6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBpbiB0aGUgY2FsY3VsYXRpb24gb2YgYG5yX3NlZ3NgIGluIGBpb19pbXBvcnRfcmVnX3ZlY2AuIElmIGBucl9zZWdzICogc2l6ZW9mKHN0cnVjdCBiaW9fdmVjKWAgb3ZlcmZsb3dzLCBgbnJfc2Vnc2AgYmVjb21lcyBzbWFsbGVyIHRoYW4gcmVxdWlyZWQuIFRoaXMgbGVhZHMgdG8gYW4gdW5kZXItYWxsb2NhdGlvbiBvciBpbnN1ZmZpY2llbnQgcmVhbGxvY2F0aW9uIG9mIGB2ZWMtXHUwMDNlYnZlY2AgaW4gYGlvX3ZlY19yZWFsbG9jYC4gU3Vic2VxdWVudGx5LCBgaW9fdmVjX2ZpbGxfYnZlY2Agb3IgYGlvX3ZlY19maWxsX2tlcm5fYnZlY2Agd2lsbCB3cml0ZSBvdXQgb2YgYm91bmRzIGludG8gdGhlIGB2ZWMtXHUwMDNlYnZlY2AgYXJyYXkuIFRoaXMgaXMgYSBjbGFzc2ljIGhlYXAgb3V0LW9mLWJvdW5kcyB3cml0ZSAoYnVmZmVyIG92ZXJmbG93KSwgd2hpY2ggaXMgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBpbmZvLWxlYWssIG9yIHVzZSBvZiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbnZvbHZlZCBpbiB0aGlzIGJ1Zy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gdGhlIGNhbGN1bGF0aW9uIG9mIGBucl9zZWdzYCBpbiBgaW9faW1wb3J0X3JlZ192ZWNgLiBJZiBgbnJfc2VncyAqIHNpemVvZihzdHJ1Y3QgYmlvX3ZlYylgIG92ZXJmbG93cywgYG5yX3NlZ3NgIGJlY29tZXMgc21hbGxlciB0aGFuIHJlcXVpcmVkLiBUaGlzIGxlYWRzIHRvIGFuIHVuZGVyLWFsbG9jYXRpb24gb3IgaW5zdWZmaWNpZW50IHJlYWxsb2NhdGlvbiBvZiBgdmVjLVx1MDAzZWJ2ZWNgIGluIGBpb192ZWNfcmVhbGxvY2AuIFN1YnNlcXVlbnRseSwgYGlvX3ZlY19maWxsX2J2ZWNgIG9yIGBpb192ZWNfZmlsbF9rZXJuX2J2ZWNgIHdpbGwgd3JpdGUgb3V0IG9mIGJvdW5kcyBpbnRvIHRoZSBgdmVjLVx1MDAzZWJ2ZWNgIGFycmF5LiBUaGlzIGlzIGEgY2xhc3NpYyBoZWFwIG91dC1vZi1ib3VuZHMgd3JpdGUgKGJ1ZmZlciBvdmVyZmxvdyksIHdoaWNoIGlzIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgaW5mby1sZWFrLCBvciB1c2Ugb2YgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW52b2x2ZWQgaW4gdGhpcyBidWcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjEyOjIxLjEyNDE2ODAyOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MDY1OTc0MDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9faW1wb3J0X3JlZ192ZWNcIixcbiAgICBcImlvX3VyaW5nX2NtZF9pbXBvcnRfZml4ZWRfdmVjXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIHRoZSBjYWxjdWxhdGlvbiBvZiBgbnJfc2Vnc2AgaW4gYGlvX2ltcG9ydF9yZWdfdmVjYC4gSWYgYG5yX3NlZ3MgKiBzaXplb2Yoc3RydWN0IGJpb192ZWMpYCBvdmVyZmxvd3MsIGBucl9zZWdzYCBiZWNvbWVzIHNtYWxsZXIgdGhhbiByZXF1aXJlZC4gVGhpcyBsZWFkcyB0byBhbiB1bmRlci1hbGxvY2F0aW9uIG9yIGluc3VmZmljaWVudCByZWFsbG9jYXRpb24gb2YgYHZlYy1cXHUwMDNlYnZlY2AgaW4gYGlvX3ZlY19yZWFsbG9jYC4gU3Vic2VxdWVudGx5LCBgaW9fdmVjX2ZpbGxfYnZlY2Agb3IgYGlvX3ZlY19maWxsX2tlcm5fYnZlY2Agd2lsbCB3cml0ZSBvdXQgb2YgYm91bmRzIGludG8gdGhlIGB2ZWMtXFx1MDAzZWJ2ZWNgIGFycmF5LiBUaGlzIGlzIGEgY2xhc3NpYyBoZWFwIG91dC1vZi1ib3VuZHMgd3JpdGUgKGJ1ZmZlciBvdmVyZmxvdyksIHdoaWNoIGlzIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgaW5mby1sZWFrLCBvciB1c2Ugb2YgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW52b2x2ZWQgaW4gdGhpcyBidWcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBpbiBgaW9faW1wb3J0X3JlZ192ZWNgIHdoZW4gY2FsY3VsYXRpbmcgYG5yX3NlZ3NgIGZyb20gYGJ2ZWNfYnl0ZXNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGlvX3VyaW5nIHN1YnN5c3RlbSwgcmVhY2hhYmxlIHZpYSBpb191cmluZyBzeXN0ZW0gY2FsbHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjEyOjIxLjEyNDE3NDg5OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEwODU1NTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzI4ZTc3NWI2MmQ4ZDQ4YWE4MjUyZmFkMjg4N2E5MzVlNzdiNzEzYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAxMiAyMToxMjoyMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pb191cmluZy9yc3JjLmMgYi9pb191cmluZy9yc3JjLmNcXG5pbmRleCA4ZDBmMmVlMjRlMGMyLi45OGRjY2VmZDgwMWI5IDEwMDY0NFxcbi0tLSBhL2lvX3VyaW5nL3JzcmMuY1xcbisrKyBiL2lvX3VyaW5nL3JzcmMuY1xcbkBAIC0xNjUzLDggKzE2NTMsMTIgQEAgaW50IGlvX2ltcG9ydF9yZWdfdmVjKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuIFxcdGlmIChzaXplb2Yoc3RydWN0IGJpb192ZWMpIFxcdTAwM2Ugc2l6ZW9mKHN0cnVjdCBpb3ZlYykpIHtcXG4gXFx0XFx0c2l6ZV90IGJ2ZWNfYnl0ZXM7XFxuIFxcbi1cXHRcXHRidmVjX2J5dGVzID0gbnJfc2VncyAqIHNpemVvZihzdHJ1Y3QgYmlvX3ZlYyk7XFxuLVxcdFxcdG5yX3NlZ3MgPSAoYnZlY19ieXRlcyArIHNpemVvZigqaW92KSAtIDEpIC8gc2l6ZW9mKCppb3YpO1xcbitcXHRcXHRpZiAoY2hlY2tfbXVsX292ZXJmbG93KChzaXplX3QpbnJfc2Vncywgc2l6ZW9mKHN0cnVjdCBiaW9fdmVjKSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZidmVjX2J5dGVzKSB8fFxcbitcXHRcXHQgICAgY2hlY2tfYWRkX292ZXJmbG93KGJ2ZWNfYnl0ZXMsIHNpemVvZigqaW92KSAtIDEsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2YnZlY19ieXRlcykpXFxuK1xcdFxcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbitcXHRcXHRucl9zZWdzID0gYnZlY19ieXRlcyAvIHNpemVvZigqaW92KTtcXG4gXFx0XFx0bnJfc2VncyArPSBucl9pb3ZzO1xcbiBcXHR9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMToxMjoyMS42MzU5ODk2NDZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozNTY3MzU3ODkzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX2ltcG9ydF9yZWdfdmVjXCIsXG4gICAgXCJpb191cmluZ19jbWRfaW1wb3J0X2ZpeGVkX3ZlY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gYGlvX2ltcG9ydF9yZWdfdmVjYCB3aGVuIGNhbGN1bGF0aW5nIGBucl9zZWdzYCBmcm9tIGBidmVjX2J5dGVzYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBpb191cmluZyBzdWJzeXN0ZW0sIHJlYWNoYWJsZSB2aWEgaW9fdXJpbmcgc3lzdGVtIGNhbGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzMjhlNzc1YjYyZDhkNDhhYTgyNTJmYWQyODg3YTkzNWU3N2I3MTNhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMjE6MTI6MjAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pb191cmluZy9yc3JjLmMgYi9pb191cmluZy9yc3JjLmNcbmluZGV4IDhkMGYyZWUyNGUwYzIuLjk4ZGNjZWZkODAxYjkgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9yc3JjLmNcbisrKyBiL2lvX3VyaW5nL3JzcmMuY1xuQEAgLTE2NTMsOCArMTY1MywxMiBAQCBpbnQgaW9faW1wb3J0X3JlZ192ZWMoaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdGlmIChzaXplb2Yoc3RydWN0IGJpb192ZWMpIFx1MDAzZSBzaXplb2Yoc3RydWN0IGlvdmVjKSkge1xuIFx0XHRzaXplX3QgYnZlY19ieXRlcztcbiBcbi1cdFx0YnZlY19ieXRlcyA9IG5yX3NlZ3MgKiBzaXplb2Yoc3RydWN0IGJpb192ZWMpO1xuLVx0XHRucl9zZWdzID0gKGJ2ZWNfYnl0ZXMgKyBzaXplb2YoKmlvdikgLSAxKSAvIHNpemVvZigqaW92KTtcbitcdFx0aWYgKGNoZWNrX211bF9vdmVyZmxvdygoc2l6ZV90KW5yX3NlZ3MsIHNpemVvZihzdHJ1Y3QgYmlvX3ZlYyksXG4rXHRcdFx0XHQgICAgICAgXHUwMDI2YnZlY19ieXRlcykgfHxcbitcdFx0ICAgIGNoZWNrX2FkZF9vdmVyZmxvdyhidmVjX2J5dGVzLCBzaXplb2YoKmlvdikgLSAxLFxuK1x0XHRcdFx0ICAgICAgIFx1MDAyNmJ2ZWNfYnl0ZXMpKVxuK1x0XHRcdHJldHVybiAtRU9WRVJGTE9XO1xuK1x0XHRucl9zZWdzID0gYnZlY19ieXRlcyAvIHNpemVvZigqaW92KTtcbiBcdFx0bnJfc2VncyArPSBucl9pb3ZzO1xuIFx0fVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MTI6MjEuNjM1OTkxMzg2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0ODQxMDI4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElPX1VSSU5HIFJlc291cmNlIFJlZ2lzdHJhdGlvbiBDb2RlKipcblxuT2theSwgc28gd2UndmUgZ290IGEgcGF0Y2ggYXBwbGllZCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQncyB0b3VjaGluZyBgaW9fdXJpbmcvcnNyYy5jYCwgc3BlY2lmaWNhbGx5IGBpb19pbXBvcnRfcmVnX3ZlY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoYXQgZnVuY3Rpb24uIFRoZSBkZXNjcmlwdGlvbiBtZW50aW9ucyBvdmVyZmxvdyBjaGVja3MgYmVpbmcgYWRkZWQgdG8gdGhlIGBucl9zZWdzYCBjYWxjdWxhdGlvbi4gVGhhdCdzIGEgY2xhc3NpYyBhcmVhIGZvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvciwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBpbiBhIGxvdy1sZXZlbCBjb250ZXh0IGxpa2UgdGhpcy4gTGV0J3MgZGlnIGludG8gYGlvX2ltcG9ydF9yZWdfdmVjYCBhbmQgc2VlIGV4YWN0bHkgaG93IHRob3NlIG92ZXJmbG93IGNoZWNrcyBhcmUgaW1wbGVtZW50ZWQgYW5kIHdoYXQgc2NlbmFyaW9zIHRoZXkgYXJlIGRlc2lnbmVkIHRvIG1pdGlnYXRlLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogYmVoaW5kIHRoaXMgcGF0Y2gg4oCTIHdoYXQgd2FzIHRoZSBzcGVjaWZpYyBwcm9ibGVtIGJlaW5nIGFkZHJlc3NlZCwgYW5kIGhvdyBlZmZlY3RpdmVseSBpcyB0aGlzIHBhdGNoIHJlc29sdmluZyBpdD8gVGltZSB0byBnZXQgaW50byB0aGUgY29kZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MjA5NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MTI6MjUuMTg0NDA1NDQxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTc0NzM1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19pbXBvcnRfcmVnX3ZlY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9yc3JjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvcnNyYy5jPTE1OTU9c3RhdGljIGludCBpb19rZXJuX2J2ZWNfc2l6ZShzdHJ1Y3QgaW92ZWMgKmlvdiwgdW5zaWduZWQgbnJfaW92cyxcXG4tLVxcbmlvX3VyaW5nL3JzcmMuYy0xNjE5LVxcbmlvX3VyaW5nL3JzcmMuYzoxNjIwOmludCBpb19pbXBvcnRfcmVnX3ZlYyhpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbmlvX3VyaW5nL3JzcmMuYy0xNjIxLVxcdFxcdFxcdHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW91X3ZlYyAqdmVjLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMToxMjoyNS4yOTAxNjA4M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NjA3MTM0NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBjb25zaWRlcmluZyBJJ20gc3RlZXBlZCBpbiB0aGlzIHN0dWZmOlxuXG4qKkRpdmluZyBpbnRvIGBpb19pbXBvcnRfcmVnX3ZlY2AgaW4gYGlvX3VyaW5nL3JzcmMuY2AqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgaW4gb24gYGlvX2ltcG9ydF9yZWdfdmVjYCB3aXRoaW4gYHJzcmMuY2AuIFRoZSBuYW1lIGl0c2VsZiBoaW50cyB0aGF0IHdlJ3JlIHRhbGtpbmcgYWJvdXQgcmVnaXN0ZXJpbmcgb3IgaW1wb3J0aW5nIHZlY3Rvci1iYXNlZCBkYXRhIHN0cnVjdHVyZXMsIHByb2JhYmx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgaW9fdXJpbmcgc3Vic3lzdGVtLiBLbm93aW5nIHRoZSB1c3VhbCBpb191cmluZyBmbG93LCBteSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZTogV2hhdCBraW5kIG9mIHZlY3RvcnM/IEFyZSB0aGV5IGRlc2NyaWJpbmcgbWVtb3J5IHJlZ2lvbnM/IEZpbGUgZGVzY3JpcHRvcnM/IElzIHRoaXMgcmVsYXRlZCB0byBob3cgaW9fdXJpbmcgaGFuZGxlcyBJL08gYnVmZmVycz8gSG93IGRvZXMgdGhpcyBmdW5jdGlvbiBpbnRlcmZhY2Ugd2l0aCB0aGUgbWFpbiByZXF1ZXN0IHN1Ym1pc3Npb24gYW5kIGNvbXBsZXRpb24gcGF0aD8gSSdtIGFudGljaXBhdGluZyBzb21lIGludGVyYWN0aW9uIHdpdGggdXNlci1zcGFjZSBidWZmZXJzIGFuZCBrZXJuZWwtc3BhY2UgZGF0YS4gSSdtIGhvcGluZyB0byBzZWUgaG93IG1lbW9yeSBnZXRzIHBpbm5lZCwgaG93IHBlcm1pc3Npb25zIGFyZSBjaGVja2VkLCBhbmQgaG93IHRoZXNlIHJlZ2lzdHJhdGlvbnMgYXJlIGhvb2tlZCBpbnRvIHRoZSBsYXJnZXIgaW9fdXJpbmcgbGlmZWN5Y2xlLiBMZXQncyBzZWUgaWYgdGhpcyBmdW5jdGlvbiBpcyBhIGtleSBwaWVjZSBmb3IgemVyby1jb3B5IG9wZXJhdGlvbnMgb3Igc2hhcmVkIG1lbW9yeSBtYXBwaW5ncyB3aXRoaW4gdGhlIEkvTyBmcmFtZXdvcmsuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgdGhlIGRldGFpbHMgb2YgdGhpcyBpbXBvcnRhbnQgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MTEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMToxMjoyOC45NTA4Nzc4OTJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzUzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW9fdXJpbmcvcnNyYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2MTUsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjE1OlxcdFxcdGlmICh0b3RhbF9sZW4gXFx1MDAzZSBNQVhfUldfQ09VTlQpXFxuMTYxNjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNjE3OlxcdFxcdHJldHVybiAwO1xcbjE2MTg6XFx0fVxcbjE2MTk6XFx0XFxuMTYyMDpcXHRpbnQgaW9faW1wb3J0X3JlZ192ZWMoaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4xNjIxOlxcdFxcdFxcdFxcdHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW91X3ZlYyAqdmVjLFxcbjE2MjI6XFx0XFx0XFx0XFx0dW5zaWduZWQgbnJfaW92cywgdW5zaWduZWQgaXNzdWVfZmxhZ3MpXFxuMTYyMzpcXHR7XFxuMTYyNDpcXHRcXHRzdHJ1Y3QgaW9fcnNyY19ub2RlICpub2RlO1xcbjE2MjU6XFx0XFx0c3RydWN0IGlvX21hcHBlZF91YnVmICppbXU7XFxuMTYyNjpcXHRcXHR1bnNpZ25lZCBpb3ZlY19vZmY7XFxuMTYyNzpcXHRcXHRzdHJ1Y3QgaW92ZWMgKmlvdjtcXG4xNjI4OlxcdFxcdHVuc2lnbmVkIG5yX3NlZ3M7XFxuMTYyOTpcXHRcXG4xNjMwOlxcdFxcdG5vZGUgPSBpb19maW5kX2J1Zl9ub2RlKHJlcSwgaXNzdWVfZmxhZ3MpO1xcbjE2MzE6XFx0XFx0aWYgKCFub2RlKVxcbjE2MzI6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMTYzMzpcXHRcXHRpbXUgPSBub2RlLVxcdTAwM2VidWY7XFxuMTYzNDpcXHRcXHRpZiAoIShpbXUtXFx1MDAzZWRpciBcXHUwMDI2ICgxIFxcdTAwM2NcXHUwMDNjIGRkaXIpKSlcXG4xNjM1OlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjE2MzY6XFx0XFxuMTYzNzpcXHRcXHRpb3ZlY19vZmYgPSB2ZWMtXFx1MDAzZW5yIC0gbnJfaW92cztcXG4xNjM4OlxcdFxcdGlvdiA9IHZlYy1cXHUwMDNlaW92ZWMgKyBpb3ZlY19vZmY7XFxuMTYzOTpcXHRcXG4xNjQwOlxcdFxcdGlmIChpbXUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9fUkVHQlVGX0ZfS0JVRikge1xcbjE2NDE6XFx0XFx0XFx0aW50IHJldCA9IGlvX2tlcm5fYnZlY19zaXplKGlvdiwgbnJfaW92cywgaW11LCBcXHUwMDI2bnJfc2Vncyk7XFxuMTY0MjpcXHRcXG4xNjQzOlxcdFxcdFxcdGlmICh1bmxpa2VseShyZXQpKVxcbjE2NDQ6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xNjQ1OlxcdFxcdH0gZWxzZSB7XFxuMTY0NjpcXHRcXHRcXHRpbnQgcmV0ID0gaW9fZXN0aW1hdGVfYnZlY19zaXplKGlvdiwgbnJfaW92cywgaW11KTtcXG4xNjQ3OlxcdFxcbjE2NDg6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTY0OTpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE2NTA6XFx0XFx0XFx0bnJfc2VncyA9IHJldDtcXG4xNjUxOlxcdFxcdH1cXG4xNjUyOlxcdFxcbjE2NTM6XFx0XFx0aWYgKHNpemVvZihzdHJ1Y3QgYmlvX3ZlYykgXFx1MDAzZSBzaXplb2Yoc3RydWN0IGlvdmVjKSkge1xcbjE2NTQ6XFx0XFx0XFx0c2l6ZV90IGJ2ZWNfYnl0ZXM7XFxuMTY1NTpcXHRcXG4xNjU2OlxcdFxcdFxcdGlmIChjaGVja19tdWxfb3ZlcmZsb3coKHNpemVfdClucl9zZWdzLCBzaXplb2Yoc3RydWN0IGJpb192ZWMpLFxcbjE2NTc6XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZidmVjX2J5dGVzKSB8fFxcbjE2NTg6XFx0XFx0XFx0ICAgIGNoZWNrX2FkZF9vdmVyZmxvdyhidmVjX2J5dGVzLCBzaXplb2YoKmlvdikgLSAxLFxcbjE2NTk6XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZidmVjX2J5dGVzKSlcXG4xNjYwOlxcdFxcdFxcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbjE2NjE6XFx0XFx0XFx0bnJfc2VncyA9IGJ2ZWNfYnl0ZXMgLyBzaXplb2YoKmlvdik7XFxuMTY2MjpcXHRcXHRcXHRucl9zZWdzICs9IG5yX2lvdnM7XFxuMTY2MzpcXHRcXHR9XFxuMTY2NDpcXHRcXG4xNjY1OlxcdFxcdGlmIChucl9zZWdzIFxcdTAwM2UgdmVjLVxcdTAwM2Vucikge1xcbjE2NjY6XFx0XFx0XFx0c3RydWN0IGlvdV92ZWMgdG1wX3ZlYyA9IHt9O1xcbjE2Njc6XFx0XFx0XFx0aW50IHJldDtcXG4xNjY4OlxcdFxcbjE2Njk6XFx0XFx0XFx0cmV0ID0gaW9fdmVjX3JlYWxsb2MoXFx1MDAyNnRtcF92ZWMsIG5yX3NlZ3MpO1xcbjE2NzA6XFx0XFx0XFx0aWYgKHJldClcXG4xNjcxOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTY3MjpcXHRcXG4xNjczOlxcdFxcdFxcdGlvdmVjX29mZiA9IHRtcF92ZWMubnIgLSBucl9pb3ZzO1xcbjE2NzQ6XFx0XFx0XFx0bWVtY3B5KHRtcF92ZWMuaW92ZWMgKyBpb3ZlY19vZmYsIGlvdiwgc2l6ZW9mKCppb3YpICogbnJfaW92cyk7XFxuMTY3NTpcXHRcXHRcXHRpb192ZWNfZnJlZSh2ZWMpO1xcbjE2NzY6XFx0XFxuMTY3NzpcXHRcXHRcXHQqdmVjID0gdG1wX3ZlYztcXG4xNjc4OlxcdFxcdFxcdGlvdiA9IHZlYy1cXHUwMDNlaW92ZWMgKyBpb3ZlY19vZmY7XFxuMTY3OTpcXHRcXHRcXHRyZXEtXFx1MDAzZWZsYWdzIHw9IFJFUV9GX05FRURfQ0xFQU5VUDtcXG4xNjgwOlxcdFxcdH1cXG4xNjgxOlxcdFxcbjE2ODI6XFx0XFx0aWYgKGltdS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT19SRUdCVUZfRl9LQlVGKVxcbjE2ODM6XFx0XFx0XFx0cmV0dXJuIGlvX3ZlY19maWxsX2tlcm5fYnZlYyhkZGlyLCBpdGVyLCBpbXUsIGlvdiwgbnJfaW92cywgdmVjKTtcXG4xNjg0OlxcdFxcbjE2ODU6XFx0XFx0cmV0dXJuIGlvX3ZlY19maWxsX2J2ZWMoZGRpciwgaXRlciwgaW11LCBpb3YsIG5yX2lvdnMsIHZlYyk7XFxuMTY4NjpcXHR9XFxuMTY4NzpcXHRcXG4xNjg4OlxcdGludCBpb19wcmVwX3JlZ19pb3ZlYyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvdV92ZWMgKml2LFxcbjE2ODk6XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGlvdmVjIF9fdXNlciAqdXZlYywgc2l6ZV90IHV2ZWNfc2VncylcXG4xNjkwOlxcdHtcXG4xNjkxOlxcdFxcdHN0cnVjdCBpb3ZlYyAqaW92O1xcbjE2OTI6XFx0XFx0aW50IGlvdmVjX29mZiwgcmV0O1xcbjE2OTM6XFx0XFx0dm9pZCAqcmVzO1xcbjE2OTQ6XFx0XFxuMTY5NTpcXHRcXHRpZiAodXZlY19zZWdzIFxcdTAwM2UgaXYtXFx1MDAzZW5yKSB7XFxuMTY5NjpcXHRcXHRcXHRyZXQgPSBpb192ZWNfcmVhbGxvYyhpdiwgdXZlY19zZWdzKTtcXG4xNjk3OlxcdFxcdFxcdGlmIChyZXQpXFxuMTY5ODpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE2OTk6XFx0XFx0XFx0cmVxLVxcdTAwM2VmbGFncyB8PSBSRVFfRl9ORUVEX0NMRUFOVVA7XFxuMTcwMDpcXHRcXHR9XFxuMTcwMTpcXHRcXG4xNzAyOlxcdFxcdC8qIHBhZCBpb3ZlYyB0byB0aGUgcmlnaHQgKi9cXG4xNzAzOlxcdFxcdGlvdmVjX29mZiA9IGl2LVxcdTAwM2VuciAtIHV2ZWNfc2VncztcXG4xNzA0OlxcdFxcdGlvdiA9IGl2LVxcdTAwM2Vpb3ZlYyArIGlvdmVjX29mZjtcXG4xNzA1OlxcdFxcdHJlcyA9IGlvdmVjX2Zyb21fdXNlcih1dmVjLCB1dmVjX3NlZ3MsIHV2ZWNfc2VncywgaW92LFxcbjE3MDY6XFx0XFx0XFx0XFx0ICAgICAgaW9faXNfY29tcGF0KHJlcS1cXHUwMDNlY3R4KSk7XFxuMTcwNzpcXHRcXHRpZiAoSVNfRVJSKHJlcykpXFxuMTcwODpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihyZXMpO1xcbjE3MDk6XFx0XFxuMTcxMDpcXHRcXHRyZXEtXFx1MDAzZWZsYWdzIHw9IFJFUV9GX0lNUE9SVF9CVUZGRVI7XFxuMTcxMTpcXHRcXHRyZXR1cm4gMDtcXG4xNzEyOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MTI6MjguOTUxMDU2MDYzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjgzOTY5ODYyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgSW50ZWdlciBPdmVyZmxvdyBpbiBpb191cmluZyoqXG5cbk9rYXksIHNvIEkndmUgc3BvdHRlZCBhIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93IHZ1bG5lcmFiaWxpdHkgaW4gYGlvX3VyaW5nL3JzcmMuY2AsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBpb19pbXBvcnRfcmVnX3ZlY2AgZnVuY3Rpb24uIFRoZSBvdmVyZmxvdyBzdGVtcyBmcm9tIGEgY2FsY3VsYXRpb24gb2YgYG5yX3NlZ3NgLiBUaGlzIHNvdW5kcyBsaWtlIHNvbWV0aGluZyB0aGF0J3MgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIHdhcnJhbnRzIHNvbWUgZGVkaWNhdGVkIGZ1enppbmcgYXR0ZW50aW9uLiBgaW9fdXJpbmdgIGlzIGEgY29yZSBwYXJ0IG9mIHRoZSBrZXJuZWwncyBJL08gaW5mcmFzdHJ1Y3R1cmUsIHNvIGFueSB2dWxuZXJhYmlsaXR5IGhlcmUgaXMgYSBjb25jZXJuLlxuXG5Ob3csIG15IG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3QgYW5kIHJlYWNoIG9mIHRoaXMgZnVuY3Rpb24uIEkgbmVlZCB0byB0cmFjZSB3aGVyZSBgaW9faW1wb3J0X3JlZ192ZWNgIGlzIGFjdHVhbGx5ICpjYWxsZWQqLiBJcyBpdCBhbiBleHBvcnRlZCBzeW1ib2wsIG9yIGlzIGl0IHVzZWQgaW50ZXJuYWxseSB3aXRoaW4gYGlvX3VyaW5nYD8gS25vd2luZyBpdHMgY2FsbCBzaXRlcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBhdHRhY2sgc3VyZmFjZSBhbmQgaG93IGFuIGF0dGFja2VyIG1pZ2h0IHRyaWdnZXIgdGhpcyBvdmVyZmxvdy4gVGltZSB0byBkaWcgaW50byB0aGUgY29kZWJhc2UgYW5kIGZpbmQgdGhvc2UgcmVmZXJlbmNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM1MCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MTI6MzUuNzkwNzU3NDk4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjg0ODg1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19pbXBvcnRfcmVnX3ZlY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvbmV0LmM9MTUwMD1zdGF0aWMgaW50IGlvX3NlbmRfemNfaW1wb3J0KHN0cnVjdCBpb19raW9jYiAqcmVxLFxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTUxOC1cXG5pb191cmluZy9uZXQuYzoxNTE5OlxcdFxcdHJldCA9IGlvX2ltcG9ydF9yZWdfdmVjKElURVJfU09VUkNFLCBcXHUwMDI2a21zZy1cXHUwMDNlbXNnLm1zZ19pdGVyLFxcbmlvX3VyaW5nL25ldC5jLTE1MjAtXFx0XFx0XFx0XFx0XFx0bm90aWYsIFxcdTAwMjZrbXNnLVxcdTAwM2V2ZWMsIHV2ZWNfc2VncyxcXG4tLVxcbmlvX3VyaW5nL3JzcmMuYz0xNTk1PXN0YXRpYyBpbnQgaW9fa2Vybl9idmVjX3NpemUoc3RydWN0IGlvdmVjICppb3YsIHVuc2lnbmVkIG5yX2lvdnMsXFxuLS1cXG5pb191cmluZy9yc3JjLmMtMTYxOS1cXG5pb191cmluZy9yc3JjLmM6MTYyMDppbnQgaW9faW1wb3J0X3JlZ192ZWMoaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG5pb191cmluZy9yc3JjLmMtMTYyMS1cXHRcXHRcXHRzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvdV92ZWMgKnZlYyxcXG4tLVxcbmlvX3VyaW5nL3JzcmMuaD02OT1pbnQgaW9faW1wb3J0X3JlZ19idWYoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbmlvX3VyaW5nL3JzcmMuaC03MS1cXHRcXHRcXHR1bnNpZ25lZCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvcnNyYy5oOjcyOmludCBpb19pbXBvcnRfcmVnX3ZlYyhpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbmlvX3VyaW5nL3JzcmMuaC03My1cXHRcXHRcXHRzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvdV92ZWMgKnZlYyxcXG4tLVxcbmlvX3VyaW5nL3J3LmM9Mzk5PXN0YXRpYyBpbnQgaW9fcndfaW1wb3J0X3JlZ192ZWMoc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuLS1cXG5pb191cmluZy9ydy5jLTQwNi1cXG5pb191cmluZy9ydy5jOjQwNzpcXHRyZXQgPSBpb19pbXBvcnRfcmVnX3ZlYyhkZGlyLCBcXHUwMDI2aW8tXFx1MDAzZWl0ZXIsIHJlcSwgXFx1MDAyNmlvLVxcdTAwM2V2ZWMsXFxuaW9fdXJpbmcvcncuYy00MDgtXFx0XFx0XFx0XFx0dXZlY19zZWdzLCBpc3N1ZV9mbGFncyk7XFxuLS1cXG5pb191cmluZy91cmluZ19jbWQuYz0zMDM9aW50IGlvX3VyaW5nX2NtZF9pbXBvcnRfZml4ZWRfdmVjKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCxcXG4tLVxcbmlvX3VyaW5nL3VyaW5nX2NtZC5jLTMxOS1cXG5pb191cmluZy91cmluZ19jbWQuYzozMjA6XFx0cmV0dXJuIGlvX2ltcG9ydF9yZWdfdmVjKGRkaXIsIGl0ZXIsIHJlcSwgXFx1MDAyNmFjLVxcdTAwM2V2ZWMsIHV2ZWNfc2VncyxcXG5pb191cmluZy91cmluZ19jbWQuYy0zMjEtXFx0XFx0XFx0XFx0IGlzc3VlX2ZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MTI6MzUuOTAzNjA5OTI2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc0MDc0NzExMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgaW9fdXJpbmcgSW1wb3J0IEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgaW9faW1wb3J0X3JlZ192ZWNgLCBhbmQgaXQncyBjYWxsZWQgZnJvbSBhIGZldyBwbGFjZXMgd2l0aGluIHRoZSBgaW9fdXJpbmdgIGZyYW1ld29yazogc3BlY2lmaWNhbGx5LCBgaW9fc2VuZF96Y19pbXBvcnRgIGluIGBpb191cmluZy9uZXQuY2AsIGBpb19yd19pbXBvcnRfcmVnX3ZlY2AgaW4gYGlvX3VyaW5nL3J3LmNgLCBhbmQgYGlvX3VyaW5nX2NtZF9pbXBvcnRfZml4ZWRfdmVjYCBpbiBgaW9fdXJpbmcvdXJpbmdfY21kLmNgLiAgQWxsIGNsZWFybHkgYGlvX3VyaW5nYCBmdW5jdGlvbnMsIGFuZCB0aGUgY29uZmlndXJhdGlvbiBuZWNlc3NhcnkgaXMgYElPX1VSSU5HYC5cblxuR2l2ZW4gdGhhdCwgSSB0aGluayBhIGRlZXBlciBkaXZlIGludG8gdGhlc2UgZnVuY3Rpb25zIGlzIG1lcml0ZWQuIEl0IHNlZW1zIGxpa2UgdGhlIGltcG9ydCBmdW5jdGlvbmFsaXR5IGFuZCB0aGUgZnVuY3Rpb25zIGludGVyYWN0aW5nIHdpdGggaXQgYXJlIHByaW1lIGNhbmRpZGF0ZXMgdG8gZm9jdXMgb24uIFNvLCBsZXQncyBkZXNpZ25hdGUgYGlvX2ltcG9ydF9yZWdfdmVjYCBpdHNlbGYgYXMgYSBrZXkgZm9jdXMgc3ltYm9sLiBJdHMgY2FsbGVycywgYGlvX3NlbmRfemNfaW1wb3J0YCwgYGlvX3J3X2ltcG9ydF9yZWdfdmVjYCwgYW5kIGBpb191cmluZ19jbWRfaW1wb3J0X2ZpeGVkX3ZlY2AgYXJlIGFsc28gZXhjZWxsZW50IGZvY3VzIHBvaW50cy4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgaW50ZXJhY3Rpb25zIGFuZCB0aGUgbGFyZ2VyIGNvbnRleHQgb2YgdGhpcyBpbXBvcnQgbWVjaGFuaXNtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjgyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjEyOjQwLjY0NDM2MDQ0OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQyOTYzNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElPX1VSSU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTkxMD1jb25maWcgQUlPXFxuLS1cXG5pbml0L0tjb25maWctMTkxNy1cXG5pbml0L0tjb25maWc6MTkxODpjb25maWcgSU9fVVJJTkdcXG5pbml0L0tjb25maWctMTkxOS1cXHRib29sIFxcXCJFbmFibGUgSU8gdXJpbmcgc3VwcG9ydFxcXCIgaWYgRVhQRVJUXFxuLS1cXG5pbml0L0tjb25maWc9MTkyNz1jb25maWcgR0NPVl9QUk9GSUxFX1VSSU5HXFxuLS1cXG5pbml0L0tjb25maWctMTkzOS1cXG5pbml0L0tjb25maWc6MTk0MDpjb25maWcgSU9fVVJJTkdfTU9DS19GSUxFXFxuaW5pdC9LY29uZmlnLTE5NDEtXFx0dHJpc3RhdGUgXFxcIkVuYWJsZSBpb191cmluZyBtb2NrIGZpbGVzIChFeHBlcmltZW50YWwpXFxcIiBpZiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MTI6NDAuNzA4NjYyMjIxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODA2MTM3NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSwgYXMgaWYgSSdtIHdvcmtpbmcgdGhyb3VnaCB0aGlzIHByb2JsZW06XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBgSU9fVVJJTkdgIENvbmZpZ3VyYXRpb24gYW5kIGBpb19pbXBvcnRfcmVnX3ZlY2AqKlxuXG5BbHJpZ2h0LCBJJ20gZGVhbGluZyB3aXRoIGFuIGBJT19VUklOR2AgY29uZmlndXJhdGlvbiBoZXJlLCBzbyB0aGUgaW1wbGljYXRpb25zIGFyZSBwcmV0dHkgY2xlYXIuIEkgbmVlZCB0byBnZXQgaW50byB0aGUgZGV0YWlscyBvZiBob3cgdGhpcyBpcyBpbXBsZW1lbnRlZC4gU3BlY2lmaWNhbGx5LCBJJ20gemVyb2luZyBpbiBvbiBgaW9faW1wb3J0X3JlZ192ZWNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSB2ZXJpZnkgaWYgdGhhdCBmdW5jdGlvbiBpcyBleHBvc2VkLiBMZXQncyBzZWUgaWYgaXQncyBleHBvcnRlZCBmb3IgbW9kdWxlcywgYmVjYXVzZSBpZiBpdCdzIG5vdCB0aGVuIG15IG9wdGlvbnMgaW1tZWRpYXRlbHkgbmFycm93LiBBaCwgZ29vZCwgaXQncyBub3QgZXhwb3J0ZWQgdG8gbW9kdWxlcywgd2hpY2ggbWVhbnMgSSdsbCBoYXZlIHRvIGNvbnNpZGVyIGl0cyB1c2Ugd2l0aGluIHRoZSBrZXJuZWwgcHJvcGVyLiBJdCdzIG5vdCBzdGF0aWMgZWl0aGVyLCB0aGF0J3MgdXNlZnVsIHRvIGtub3cuXG5cbk5leHQsIEkgdGhpbmsgSSdsbCBsb29rIGludG8gYGlvX3NlbmRfemNfaW1wb3J0YCB3aGljaCBpcyBpbiBgaW9fdXJpbmcvbmV0LmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTAwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MTI6NDQuMzg5Mjc4ODIyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE0NTU1NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fc2VuZF96Y19pbXBvcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvbmV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvbmV0LmM9MTQ1Nz1zdGF0aWMgaW50IGlvX3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTQ5OS1cXG5pb191cmluZy9uZXQuYzoxNTAwOnN0YXRpYyBpbnQgaW9fc2VuZF96Y19pbXBvcnQoc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuaW9fdXJpbmcvbmV0LmMtMTUwMS1cXHRcXHRcXHQgICAgIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csXFxuLS1cXG5pb191cmluZy9uZXQuYz0xNTMwPWludCBpb19zZW5kbXNnX3pjKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9uZXQuYy0xNTQ3LVxcdGlmIChyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUkVRX0ZfSU1QT1JUX0JVRkZFUikge1xcbmlvX3VyaW5nL25ldC5jOjE1NDg6XFx0XFx0cmV0ID0gaW9fc2VuZF96Y19pbXBvcnQocmVxLCBrbXNnLCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvbmV0LmMtMTU0OS1cXHRcXHRpZiAodW5saWtlbHkocmV0KSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MTI6NDQuNTAwNzQwNzVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE0MDkzODQ1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIGBpb191cmluZ2AgSW1wb3J0IE1lY2hhbmlzbSoqXG5cbk9rYXksIHNvIGBpb19zZW5kX3pjX2ltcG9ydGAgaXMgZGVmaW5lZCBhcyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgaXQncyBsaW1pdGVkIGluIHNjb3BlIGFuZCBjYW4ndCBiZSBkaXJlY3RseSBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoZSBmaWxlIGl0J3MgZGVjbGFyZWQgaW4uIFRoYXQncyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSByZWxldmFudCBpbXBvcnQgbG9naWMgbWlnaHQgYmUgY2xvc2VseSB0aWVkIHRvIGEgc3BlY2lmaWMgaW50ZXJuYWwgbWVjaGFuaXNtLlxuXG5HaXZlbiB0aGF0IGNvbnRleHQsIG15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGV4YW1pbmUgYGlvX3J3X2ltcG9ydF9yZWdfdmVjYCwgYW5kIEknbGwgZmluZCB0aGF0IGluIGBpb191cmluZy9ydy5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIHplcm8tY29weSBpbXBvcnQgcHJvY2Vzcy4gSSdtIGd1ZXNzaW5nIHRoYXQgYGlvX3J3X2ltcG9ydF9yZWdfdmVjYCBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIHJlZ2lzdHJhdGlvbiBvZiB2ZWN0b3JzIG9mIG1lbW9yeSByZWdpb25zIHdoZW4gdXNpbmcgemVyby1jb3B5IHRyYW5zZmVycywgYmVjYXVzZSwgaW50dWl0aXZlbHksIGl0J3MgYWJvdXQgKnJlZ2lzdGVyaW5nKiBvciAqaW1wb3J0aW5nKiByZWFkL3dyaXRlIGRhdGEgcmVnaW9ucy4gVW5kZXJzdGFuZGluZyBob3cgYGlvX3J3X2ltcG9ydF9yZWdfdmVjYCBjYWxscywgb3IgaXMgY2FsbGVkIGJ5LCBgaW9fc2VuZF96Y19pbXBvcnRgIHdpbGwgYmUgY3JpdGljYWwgaW4gZ3Jhc3BpbmcgaG93IHRoaXMgZGF0YSBpbXBvcnQgbWVjaGFuaXNtIGlzIGFyY2hpdGVjdGVkLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBjb250cm9sIGZsb3cgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0NzgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMToxMjo0OC42NDE2OTMxOTNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNDExMjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3J3X2ltcG9ydF9yZWdfdmVjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL3J3LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvcncuYz0zOTQ9aW50IGlvX3ByZXBfd3JpdGVfZml4ZWQoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSlcXG4tLVxcbmlvX3VyaW5nL3J3LmMtMzk4LVxcbmlvX3VyaW5nL3J3LmM6Mzk5OnN0YXRpYyBpbnQgaW9fcndfaW1wb3J0X3JlZ192ZWMoc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuaW9fdXJpbmcvcncuYy00MDAtXFx0XFx0XFx0XFx0c3RydWN0IGlvX2FzeW5jX3J3ICppbyxcXG4tLVxcbmlvX3VyaW5nL3J3LmM9OTE3PXN0YXRpYyBpbnQgX19pb19yZWFkKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsXFxuLS1cXG5pb191cmluZy9ydy5jLTkyNy1cXHRpZiAocmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2IFJFUV9GX0lNUE9SVF9CVUZGRVIpIHtcXG5pb191cmluZy9ydy5jOjkyODpcXHRcXHRyZXQgPSBpb19yd19pbXBvcnRfcmVnX3ZlYyhyZXEsIGlvLCBJVEVSX0RFU1QsIGlzc3VlX2ZsYWdzKTtcXG5pb191cmluZy9ydy5jLTkyOS1cXHRcXHRpZiAodW5saWtlbHkocmV0KSlcXG4tLVxcbmlvX3VyaW5nL3J3LmM9MTEzND1pbnQgaW9fd3JpdGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL3J3LmMtMTE0My1cXHRpZiAocmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2IFJFUV9GX0lNUE9SVF9CVUZGRVIpIHtcXG5pb191cmluZy9ydy5jOjExNDQ6XFx0XFx0cmV0ID0gaW9fcndfaW1wb3J0X3JlZ192ZWMocmVxLCBpbywgSVRFUl9TT1VSQ0UsIGlzc3VlX2ZsYWdzKTtcXG5pb191cmluZy9ydy5jLTExNDUtXFx0XFx0aWYgKHVubGlrZWx5KHJldCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjEyOjQ4LjcxMjExMTYzNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTkyNDcxNDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKkFuYWx5emluZyB0aGUgU3ltYm9sIGBpb19yd19pbXBvcnRfcmVnX3ZlY2AqKlxuXG5SaWdodCwgYGlvX3J3X2ltcG9ydF9yZWdfdmVjYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoYXQncyBrZXkuIElmIEknbSB0cnlpbmcgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc3ltYm9sLCBJIHNob3VsZCB1c2UgYGlvX2ltcG9ydF9yZWdfdmVjYCBzaW5jZSBpdCBpcyB0aGUgZm9jdXMuIEJ1dCB3YWl0LCBhbSBJIHN1cmU/IExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBpb19pbXBvcnRfcmVnX3ZlY2AgaXNuJ3Qgc3RhdGljIGFzIHdlbGwuIE5vcGUsIGl0IGlzbid0LiBHb29kLiBMZXQncyBtb3ZlIG9uIGFuZCBjb25zdWx0IGBpb191cmluZ19jbWRfaW1wb3J0X2ZpeGVkX3ZlY2Agd2l0aGluIGBpb191cmluZy91cmluZ19jbWQuY2AsIHRoYXQgc2hvdWxkIGNsZWFyIGl0IHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjEyLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MTI6NTEuOTA0NTg2MjM3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDUxNzQzOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fdXJpbmdfY21kX2ltcG9ydF9maXhlZF92ZWNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvdXJpbmdfY21kLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvdXJpbmdfY21kLmM9MzAxPUVYUE9SVF9TWU1CT0xfR1BMKGlvX3VyaW5nX2NtZF9pbXBvcnRfZml4ZWQpO1xcbmlvX3VyaW5nL3VyaW5nX2NtZC5jLTMwMi1cXG5pb191cmluZy91cmluZ19jbWQuYzozMDM6aW50IGlvX3VyaW5nX2NtZF9pbXBvcnRfZml4ZWRfdmVjKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCxcXG5pb191cmluZy91cmluZ19jbWQuYy0zMDQtXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgaW92ZWMgX191c2VyICp1dmVjLFxcbi0tXFxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMzIyLX1cXG5pb191cmluZy91cmluZ19jbWQuYzozMjM6RVhQT1JUX1NZTUJPTF9HUEwoaW9fdXJpbmdfY21kX2ltcG9ydF9maXhlZF92ZWMpO1xcbmlvX3VyaW5nL3VyaW5nX2NtZC5jLTMyNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MTI6NTIuMDA5NzY1OTI2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNzQ4NjkzMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgaW9fdXJpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBgaW9fdXJpbmdfY21kX2ltcG9ydF9maXhlZF92ZWNgIGlzIG5vdyBleHBvcnRlZC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBteSBhdHRlbnRpb24g4oCTIGl0IG1lYW5zIHdlIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IGJvdGggYGlvX2ltcG9ydF9yZWdfdmVjYCBhbmQgdGhpcyBuZXcgYGlvX3VyaW5nX2NtZF9pbXBvcnRfZml4ZWRfdmVjYC4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBhZGRyZXNzIGFuIGludGVnZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eSB3aXRoaW4gYGlvX2ltcG9ydF9yZWdfdmVjYC4gU3BlY2lmaWNhbGx5LCBpdCBjb25jZXJucyB0aGUgY2FsY3VsYXRpb24gb2YgYG5yX3NlZ3NgIGZyb20gYGJ2ZWNfYnl0ZXNgLiBUaGlzIGlzIGEgKmZ1bmN0aW9uYWwgY2hhbmdlKiB3aXRoaW4gdGhlIGBpb191cmluZ2Agc3Vic3lzdGVtLCB3aGljaCBpcyBzaWduaWZpY2FudC5cblxuTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcsIGFuZCBJIHdpbGwgYWRkIHRob3NlIGZvY3VzIHN5bWJvbHMgKGBpb19pbXBvcnRfcmVnX3ZlY2AsIGBpb191cmluZ19jbWRfaW1wb3J0X2ZpeGVkX3ZlY2ApIHRvIHRoZSBmdXp6aW5nIGNhbXBhaWduLiBBcyBmb3IgYnVpbGQgY29uZmlncywgaXQgc2VlbXMgdGhhdCBgSU9fVVJJTkdgIGlzIHRoZSBwcmltYXJ5IG9uZSwgYW5kIGdpdmVuIGBpb191cmluZ2AncyBjZW50cmFsaXR5LCBJIGRvbid0IGFudGljaXBhdGUgYW55IG90aGVyIGRlcGVuZGVuY2llcy4gSSdsbCBkb3VibGUtY2hlY2sgdG8gYmUgc3VyZSwgYnV0IEknbSBjb25maWRlbnQgdGhhdCBgSU9fVVJJTkdgIGlzIHN1ZmZpY2llbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2ODIsIk91dHB1dFRva2VucyI6MTEwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjEyOjU3LjE4NDYzODU4M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDkyNjMwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb19pbXBvcnRfcmVnX3ZlY1wiLFxuICAgIFwiaW9fdXJpbmdfY21kX2ltcG9ydF9maXhlZF92ZWNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIGBpb19pbXBvcnRfcmVnX3ZlY2Agd2hlbiBjYWxjdWxhdGluZyBgbnJfc2Vnc2AgZnJvbSBgYnZlY19ieXRlc2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgaW9fdXJpbmcgc3Vic3lzdGVtLCByZWFjaGFibGUgdmlhIGlvX3VyaW5nIHN5c3RlbSBjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX2ltcG9ydF9yZWdfdmVjXCIsXG4gICAgXCJpb191cmluZ19jbWRfaW1wb3J0X2ZpeGVkX3ZlY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gYGlvX2ltcG9ydF9yZWdfdmVjYCB3aGVuIGNhbGN1bGF0aW5nIGBucl9zZWdzYCBmcm9tIGBidmVjX2J5dGVzYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBpb191cmluZyBzdWJzeXN0ZW0sIHJlYWNoYWJsZSB2aWEgaW9fdXJpbmcgc3lzdGVtIGNhbGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMToxMjo1Ny4zMDk1NzIyNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI4ODA1NjEyNzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMToxMjo1Ny4zMTAxNDQyN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozMjg3OTk4NTU4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBpbiB0aGUgY2FsY3VsYXRpb24gb2YgYG5yX3NlZ3NgIGluIGBpb19pbXBvcnRfcmVnX3ZlY2AuIElmIGBucl9zZWdzICogc2l6ZW9mKHN0cnVjdCBiaW9fdmVjKWAgb3ZlcmZsb3dzLCBgbnJfc2Vnc2AgYmVjb21lcyBzbWFsbGVyIHRoYW4gcmVxdWlyZWQuIFRoaXMgbGVhZHMgdG8gYW4gdW5kZXItYWxsb2NhdGlvbiBvciBpbnN1ZmZpY2llbnQgcmVhbGxvY2F0aW9uIG9mIGB2ZWMtXFx1MDAzZWJ2ZWNgIGluIGBpb192ZWNfcmVhbGxvY2AuIFN1YnNlcXVlbnRseSwgYGlvX3ZlY19maWxsX2J2ZWNgIG9yIGBpb192ZWNfZmlsbF9rZXJuX2J2ZWNgIHdpbGwgd3JpdGUgb3V0IG9mIGJvdW5kcyBpbnRvIHRoZSBgdmVjLVxcdTAwM2VidmVjYCBhcnJheS4gVGhpcyBpcyBhIGNsYXNzaWMgaGVhcCBvdXQtb2YtYm91bmRzIHdyaXRlIChidWZmZXIgb3ZlcmZsb3cpLCB3aGljaCBpcyByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGluZm8tbGVhaywgb3IgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGludm9sdmVkIGluIHRoaXMgYnVnLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDMyOGU3NzViNjJkOGQ0OGFhODI1MmZhZDI4ODdhOTM1ZTc3YjcxM2FcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAyMToxMjoyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3JzcmMuYyBiL2lvX3VyaW5nL3JzcmMuY1xuaW5kZXggOGQwZjJlZTI0ZTBjMi4uOThkY2NlZmQ4MDFiOSAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL3JzcmMuY1xuKysrIGIvaW9fdXJpbmcvcnNyYy5jXG5AQCAtMTY1Myw4ICsxNjUzLDEyIEBAIGludCBpb19pbXBvcnRfcmVnX3ZlYyhpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFx0aWYgKHNpemVvZihzdHJ1Y3QgYmlvX3ZlYykgXHUwMDNlIHNpemVvZihzdHJ1Y3QgaW92ZWMpKSB7XG4gXHRcdHNpemVfdCBidmVjX2J5dGVzO1xuIFxuLVx0XHRidmVjX2J5dGVzID0gbnJfc2VncyAqIHNpemVvZihzdHJ1Y3QgYmlvX3ZlYyk7XG4tXHRcdG5yX3NlZ3MgPSAoYnZlY19ieXRlcyArIHNpemVvZigqaW92KSAtIDEpIC8gc2l6ZW9mKCppb3YpO1xuK1x0XHRpZiAoY2hlY2tfbXVsX292ZXJmbG93KChzaXplX3QpbnJfc2Vncywgc2l6ZW9mKHN0cnVjdCBiaW9fdmVjKSxcbitcdFx0XHRcdCAgICAgICBcdTAwMjZidmVjX2J5dGVzKSB8fFxuK1x0XHQgICAgY2hlY2tfYWRkX292ZXJmbG93KGJ2ZWNfYnl0ZXMsIHNpemVvZigqaW92KSAtIDEsXG4rXHRcdFx0XHQgICAgICAgXHUwMDI2YnZlY19ieXRlcykpXG4rXHRcdFx0cmV0dXJuIC1FT1ZFUkZMT1c7XG4rXHRcdG5yX3NlZ3MgPSBidmVjX2J5dGVzIC8gc2l6ZW9mKCppb3YpO1xuIFx0XHRucl9zZWdzICs9IG5yX2lvdnM7XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMToxMjo1Ny4zMTAxNDUxMVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzIyNTUxMzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIGlvX3VyaW5nIFBhdGNoIGZvciBJbnRlZ2VyIE92ZXJmbG93KipcblxuT2theSwgc28gdGhlcmUncyBhIHBhdGNoIGluIGBpb191cmluZy9yc3JjLmNgIHRoYXQncyB0d2Vha2luZyBgaW9faW1wb3J0X3JlZ192ZWNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJBaCwgaW50ZWdlciBvdmVyZmxvdywgY2xhc3NpYy5cIiBMb29raW5nIGF0IHRoZSBjb2RlIGRpZmYsIGl0J3MgcHJldHR5IGNsZWFyOiB0aGV5J3JlIHJlcGxhY2luZyBhIGRpcmVjdCBtdWx0aXBsaWNhdGlvbiBhbmQgZGl2aXNpb24gd2l0aCBgY2hlY2tfbXVsX292ZXJmbG93YCBhbmQgYGNoZWNrX2FkZF9vdmVyZmxvd2AuIFNtYXJ0LiBHb29kIGRlZmVuc2UuXG5cblNwZWNpZmljYWxseSwgaXQncyBjYWxjdWxhdGluZyBgbnJfc2Vnc2AgYW5kIHRoZSBvcmlnaW5hbCBjYWxjdWxhdGlvbiAqY291bGQqIGxlYWQgdG8gaW50ZWdlciBvdmVyZmxvd3MuIFRoYXQgbWVhbnMgcG90ZW50aWFsIHVuZGVyLWFsbG9jYXRpb24sIG9yIGFuIGluY29ycmVjdCBib3VuZHMgY2hlY2suIFdoaWNoLCBvZiBjb3Vyc2UsIHVzdWFsbHkgbWVhbnMgS0FTQU4gd2lsbCBjYXRjaCBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcy5cblxuV2FpdCBhIHNlY29uZOKApiBjb3VsZCB0aGlzIG92ZXJmbG93IGxlYWQgdG8gbW9yZSB0aGFuIGp1c3QgT09CIGlzc3Vlcz8gSWYgYG5yX3NlZ3NgIG92ZXJmbG93cyBhbmQgKndyYXBzIGFyb3VuZCogdG8gYSBzbWFsbGVyIHZhbHVlLCB0aGVuIGEgbWVtb3J5IGFsbG9jYXRpb24gbWlnaHQgYmUgKmxlc3MqIHRoYW4gd2hhdCdzIG5lZWRlZC4gTGVhZGluZyB0byBhbiBvdXQtb2YtYm91bmRzIHJlYWQgb3Igd3JpdGUuIFdoYXQgaWYgdGhpcyBgbnJfc2Vnc2AgaXMgdXNlZCB0byBjb3B5IHVzZXIgZGF0YT8gQ291bGQgaXQgbGVhZCB0byBhIGxlYWsgb2YgdW5pbml0aWFsaXplZCBtZW1vcnk/IFRoZSBgbnJfc2Vnc2AgaXMgdGhlIG51bWJlciBvZiBzZWdtZW50cywgd2hpY2ggaXMgdXNlZCBmb3IgY2FsY3VsYXRpb25zLiBJIHNob3VsZCBsb29rIGludG8gdGhpcy4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBleGFjdGx5IGhvdyBgaW9faW1wb3J0X3JlZ192ZWNgIHV0aWxpemVzIHRoaXMgY2FsY3VsYXRlZCB2YWx1ZS4gTGV0J3MgZGlnIGRlZXBlciBpbnRvIHRoZSBjb2Rl4oCmXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwOTQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMToxMzowNC4wMzI2OTk3OTdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MTg5NjA0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19pbXBvcnRfcmVnX3ZlY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9yc3JjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvcnNyYy5jPTE1OTU9c3RhdGljIGludCBpb19rZXJuX2J2ZWNfc2l6ZShzdHJ1Y3QgaW92ZWMgKmlvdiwgdW5zaWduZWQgbnJfaW92cyxcXG4tLVxcbmlvX3VyaW5nL3JzcmMuYy0xNjE5LVxcbmlvX3VyaW5nL3JzcmMuYzoxNjIwOmludCBpb19pbXBvcnRfcmVnX3ZlYyhpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbmlvX3VyaW5nL3JzcmMuYy0xNjIxLVxcdFxcdFxcdHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW91X3ZlYyAqdmVjLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMToxMzowNC4zMDQ2MDgwMzlaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ2NzA5ODg0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IERpdmluZyBpbnRvIGBpb19pbXBvcnRfcmVnX3ZlY2AqKlxuXG5BbHJpZ2h0LCB0aGUgb2JqZWN0aXZlIGlzIHRvIGdldCBhIGhhbmRsZSBvbiBgaW9faW1wb3J0X3JlZ192ZWNgLiBUaGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpbnZvbHZlcyBhIG1lbnRhbCBjaGVja2xpc3QuICpXaGF0J3MgdGhlIGNvbnRleHQ/KiBJcyB0aGlzIGEgc3BlY2lmaWMgbW9kdWxlLCBhIGxpYnJhcnkgZnVuY3Rpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBLbm93aW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpbGwgZnJhbWUgbXkgdW5kZXJzdGFuZGluZy4gKldoYXQncyB0aGUgY29yZSBmdW5jdGlvbj8qIEZyb20gdGhlIG5hbWUsIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBhbiBpbnB1dC9vdXRwdXQgb3BlcmF0aW9uLCBwb3RlbnRpYWxseSByZWxhdGVkIHRvIHJlZ2lzdGVycyBhbmQgbGlrZWx5IHdvcmtpbmcgd2l0aCB2ZWN0b3JzIG9yIGFycmF5cyBvZiBkYXRhLiBNeSBtaW5kIGF1dG9tYXRpY2FsbHkgc3RhcnRzIGJ1aWxkaW5nIGEgbWVudGFsIG1vZGVsIG9mIGhvdyBkYXRhIG1pZ2h0IGJlIGltcG9ydGVkIC0gYml0d2lzZSBvcGVyYXRpb25zLCBtZW1vcnkgbWFwcGluZywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBpbnRlcmZhY2UgY29uc2lkZXJhdGlvbnMuIEknbSByZWFkeSB0byBkaWcgaW4gYW5kIGJyZWFrIGl0IGRvd24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5ODUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMToxMzowNy43NzE3MTE1ODJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyMjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL3JzcmMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjIwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTYyMDpcXHRpbnQgaW9faW1wb3J0X3JlZ192ZWMoaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4xNjIxOlxcdFxcdFxcdFxcdHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW91X3ZlYyAqdmVjLFxcbjE2MjI6XFx0XFx0XFx0XFx0dW5zaWduZWQgbnJfaW92cywgdW5zaWduZWQgaXNzdWVfZmxhZ3MpXFxuMTYyMzpcXHR7XFxuMTYyNDpcXHRcXHRzdHJ1Y3QgaW9fcnNyY19ub2RlICpub2RlO1xcbjE2MjU6XFx0XFx0c3RydWN0IGlvX21hcHBlZF91YnVmICppbXU7XFxuMTYyNjpcXHRcXHR1bnNpZ25lZCBpb3ZlY19vZmY7XFxuMTYyNzpcXHRcXHRzdHJ1Y3QgaW92ZWMgKmlvdjtcXG4xNjI4OlxcdFxcdHVuc2lnbmVkIG5yX3NlZ3M7XFxuMTYyOTpcXHRcXG4xNjMwOlxcdFxcdG5vZGUgPSBpb19maW5kX2J1Zl9ub2RlKHJlcSwgaXNzdWVfZmxhZ3MpO1xcbjE2MzE6XFx0XFx0aWYgKCFub2RlKVxcbjE2MzI6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMTYzMzpcXHRcXHRpbXUgPSBub2RlLVxcdTAwM2VidWY7XFxuMTYzNDpcXHRcXHRpZiAoIShpbXUtXFx1MDAzZWRpciBcXHUwMDI2ICgxIFxcdTAwM2NcXHUwMDNjIGRkaXIpKSlcXG4xNjM1OlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjE2MzY6XFx0XFxuMTYzNzpcXHRcXHRpb3ZlY19vZmYgPSB2ZWMtXFx1MDAzZW5yIC0gbnJfaW92cztcXG4xNjM4OlxcdFxcdGlvdiA9IHZlYy1cXHUwMDNlaW92ZWMgKyBpb3ZlY19vZmY7XFxuMTYzOTpcXHRcXG4xNjQwOlxcdFxcdGlmIChpbXUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9fUkVHQlVGX0ZfS0JVRikge1xcbjE2NDE6XFx0XFx0XFx0aW50IHJldCA9IGlvX2tlcm5fYnZlY19zaXplKGlvdiwgbnJfaW92cywgaW11LCBcXHUwMDI2bnJfc2Vncyk7XFxuMTY0MjpcXHRcXG4xNjQzOlxcdFxcdFxcdGlmICh1bmxpa2VseShyZXQpKVxcbjE2NDQ6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xNjQ1OlxcdFxcdH0gZWxzZSB7XFxuMTY0NjpcXHRcXHRcXHRpbnQgcmV0ID0gaW9fZXN0aW1hdGVfYnZlY19zaXplKGlvdiwgbnJfaW92cywgaW11KTtcXG4xNjQ3OlxcdFxcbjE2NDg6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTY0OTpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE2NTA6XFx0XFx0XFx0bnJfc2VncyA9IHJldDtcXG4xNjUxOlxcdFxcdH1cXG4xNjUyOlxcdFxcbjE2NTM6XFx0XFx0aWYgKHNpemVvZihzdHJ1Y3QgYmlvX3ZlYykgXFx1MDAzZSBzaXplb2Yoc3RydWN0IGlvdmVjKSkge1xcbjE2NTQ6XFx0XFx0XFx0c2l6ZV90IGJ2ZWNfYnl0ZXM7XFxuMTY1NTpcXHRcXG4xNjU2OlxcdFxcdFxcdGlmIChjaGVja19tdWxfb3ZlcmZsb3coKHNpemVfdClucl9zZWdzLCBzaXplb2Yoc3RydWN0IGJpb192ZWMpLFxcbjE2NTc6XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZidmVjX2J5dGVzKSB8fFxcbjE2NTg6XFx0XFx0XFx0ICAgIGNoZWNrX2FkZF9vdmVyZmxvdyhidmVjX2J5dGVzLCBzaXplb2YoKmlvdikgLSAxLFxcbjE2NTk6XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZidmVjX2J5dGVzKSlcXG4xNjYwOlxcdFxcdFxcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbjE2NjE6XFx0XFx0XFx0bnJfc2VncyA9IGJ2ZWNfYnl0ZXMgLyBzaXplb2YoKmlvdik7XFxuMTY2MjpcXHRcXHRcXHRucl9zZWdzICs9IG5yX2lvdnM7XFxuMTY2MzpcXHRcXHR9XFxuMTY2NDpcXHRcXG4xNjY1OlxcdFxcdGlmIChucl9zZWdzIFxcdTAwM2UgdmVjLVxcdTAwM2Vucikge1xcbjE2NjY6XFx0XFx0XFx0c3RydWN0IGlvdV92ZWMgdG1wX3ZlYyA9IHt9O1xcbjE2Njc6XFx0XFx0XFx0aW50IHJldDtcXG4xNjY4OlxcdFxcbjE2Njk6XFx0XFx0XFx0cmV0ID0gaW9fdmVjX3JlYWxsb2MoXFx1MDAyNnRtcF92ZWMsIG5yX3NlZ3MpO1xcbjE2NzA6XFx0XFx0XFx0aWYgKHJldClcXG4xNjcxOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTY3MjpcXHRcXG4xNjczOlxcdFxcdFxcdGlvdmVjX29mZiA9IHRtcF92ZWMubnIgLSBucl9pb3ZzO1xcbjE2NzQ6XFx0XFx0XFx0bWVtY3B5KHRtcF92ZWMuaW92ZWMgKyBpb3ZlY19vZmYsIGlvdiwgc2l6ZW9mKCppb3YpICogbnJfaW92cyk7XFxuMTY3NTpcXHRcXHRcXHRpb192ZWNfZnJlZSh2ZWMpO1xcbjE2NzY6XFx0XFxuMTY3NzpcXHRcXHRcXHQqdmVjID0gdG1wX3ZlYztcXG4xNjc4OlxcdFxcdFxcdGlvdiA9IHZlYy1cXHUwMDNlaW92ZWMgKyBpb3ZlY19vZmY7XFxuMTY3OTpcXHRcXHRcXHRyZXEtXFx1MDAzZWZsYWdzIHw9IFJFUV9GX05FRURfQ0xFQU5VUDtcXG4xNjgwOlxcdFxcdH1cXG4xNjgxOlxcdFxcbjE2ODI6XFx0XFx0aWYgKGltdS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT19SRUdCVUZfRl9LQlVGKVxcbjE2ODM6XFx0XFx0XFx0cmV0dXJuIGlvX3ZlY19maWxsX2tlcm5fYnZlYyhkZGlyLCBpdGVyLCBpbXUsIGlvdiwgbnJfaW92cywgdmVjKTtcXG4xNjg0OlxcdFxcbjE2ODU6XFx0XFx0cmV0dXJuIGlvX3ZlY19maWxsX2J2ZWMoZGRpciwgaXRlciwgaW11LCBpb3YsIG5yX2lvdnMsIHZlYyk7XFxuMTY4NjpcXHR9XFxuMTY4NzpcXHRcXG4xNjg4OlxcdGludCBpb19wcmVwX3JlZ19pb3ZlYyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvdV92ZWMgKml2LFxcbjE2ODk6XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGlvdmVjIF9fdXNlciAqdXZlYywgc2l6ZV90IHV2ZWNfc2VncylcXG4xNjkwOlxcdHtcXG4xNjkxOlxcdFxcdHN0cnVjdCBpb3ZlYyAqaW92O1xcbjE2OTI6XFx0XFx0aW50IGlvdmVjX29mZiwgcmV0O1xcbjE2OTM6XFx0XFx0dm9pZCAqcmVzO1xcbjE2OTQ6XFx0XFxuMTY5NTpcXHRcXHRpZiAodXZlY19zZWdzIFxcdTAwM2UgaXYtXFx1MDAzZW5yKSB7XFxuMTY5NjpcXHRcXHRcXHRyZXQgPSBpb192ZWNfcmVhbGxvYyhpdiwgdXZlY19zZWdzKTtcXG4xNjk3OlxcdFxcdFxcdGlmIChyZXQpXFxuMTY5ODpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE2OTk6XFx0XFx0XFx0cmVxLVxcdTAwM2VmbGFncyB8PSBSRVFfRl9ORUVEX0NMRUFOVVA7XFxuMTcwMDpcXHRcXHR9XFxuMTcwMTpcXHRcXG4xNzAyOlxcdFxcdC8qIHBhZCBpb3ZlYyB0byB0aGUgcmlnaHQgKi9cXG4xNzAzOlxcdFxcdGlvdmVjX29mZiA9IGl2LVxcdTAwM2VuciAtIHV2ZWNfc2VncztcXG4xNzA0OlxcdFxcdGlvdiA9IGl2LVxcdTAwM2Vpb3ZlYyArIGlvdmVjX29mZjtcXG4xNzA1OlxcdFxcdHJlcyA9IGlvdmVjX2Zyb21fdXNlcih1dmVjLCB1dmVjX3NlZ3MsIHV2ZWNfc2VncywgaW92LFxcbjE3MDY6XFx0XFx0XFx0XFx0ICAgICAgaW9faXNfY29tcGF0KHJlcS1cXHUwMDNlY3R4KSk7XFxuMTcwNzpcXHRcXHRpZiAoSVNfRVJSKHJlcykpXFxuMTcwODpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihyZXMpO1xcbjE3MDk6XFx0XFxuMTcxMDpcXHRcXHRyZXEtXFx1MDAzZWZsYWdzIHw9IFJFUV9GX0lNUE9SVF9CVUZGRVI7XFxuMTcxMTpcXHRcXHRyZXR1cm4gMDtcXG4xNzEyOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MTM6MDcuNzcxOTU2ODIyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNjk2NjE3ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW50ZWdlciBPdmVyZmxvdyBCdWcgQW5hbHlzaXMqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ3ZlIGdvdC4gVGhlIGNydXggb2YgdGhpcyBpc3N1ZSBpcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIHRoZSBgbnJfc2Vnc2AgY2FsY3VsYXRpb24uIFNwZWNpZmljYWxseSwgaW4gdGhhdCBjb2RlIHNuaXBwZXQsIGBucl9zZWdzYCBpcyBiZWluZyBtdWx0aXBsaWVkIGJ5IHRoZSBzaXplIG9mIGBzdHJ1Y3QgYmlvX3ZlY2AuIElmIGBucl9zZWdzYCBoYXBwZW5zIHRvIGJlIGxhcmdlIGVub3VnaCwgdGhpcyBtdWx0aXBsaWNhdGlvbiB3aWxsIG92ZXJmbG93LCBsZWFkaW5nIHRvIGBucl9zZWdzYCBiZWNvbWluZyBzbWFsbGVyIHRoYW4gaXRzIGNvcnJlY3QgdmFsdWUuXG5cblRoZSBzdWJzZXF1ZW50IGNvZGUgYmxvY2sgaXMgd2hlcmUgdGhlIHByb2JsZW0gbWFuaWZlc3RzLiBJZiB0aGF0IG92ZXJmbG93IG9jY3VycywgdGhlIGNoZWNrIGBpZiAobnJfc2VncyBcdTAwM2UgdmVjLVx1MDAzZW5yKWAgYmVjb21lcyBmYXVsdHkuIFRoZSBgaW9fdmVjX3JlYWxsb2NgIGZ1bmN0aW9uIG1pZ2h0IG5vdCBiZSBjYWxsZWQgd2hlbiBpdCBzaG91bGQgYmUsIG9yIGlmIGl0IGlzIGNhbGxlZCwgdGhlIGFsbG9jYXRpb24gbWlnaHQgYmUgaW5zdWZmaWNpZW50IHRvIGNvdmVyIHRoZSBhY3R1YWwgYG5yX3NlZ3NgIHRoYXQgd2UgbmVlZCwgb3IgdGhlIGBucl9zZWdzYCBhcyBjYWxjdWxhdGVkICpwb3N0Ki1vdmVyZmxvdyBtYXkgYmUgdXNlZCBmb3IgYWxsb2NhdGlvbi4gVGhpcyBzZXRzIHRoZSBzdGFnZSBmb3IgYSBjbGFzc2ljIGJ1ZmZlciBvdmVyZmxvdy4gQmVjYXVzZSBvZiB0aGlzIGluaXRpYWwgb3ZlcmZsb3csIHRoZXJlIGlzbid0IGVub3VnaCBtZW1vcnkgYWxsb2NhdGVkLiBMYXRlciwgYGlvX3ZlY19maWxsX2tlcm5fYnZlY2Agb3IgYGlvX3ZlY19maWxsX2J2ZWNgIHdpbGwgdGhlbiB3cml0ZSBkYXRhIG91dCBvZiBib3VuZHMgaW50byBlaXRoZXIgYHZlYy1cdTAwM2Vpb3ZlY2Agb3IgYHZlYy1cdTAwM2VidmVjYCwgc2luY2UgdGhlIHdyaXRlIHNpemUsIGR1ZSB0byB0aGUgZmF1bHR5IGBucl9zZWdzYCwgd2lsbCBiZSBsYXJnZXIgdGhhbiB0aGUgYnVmZmVyLlxuXG5UaGUgZ29vZCBuZXdzIGlzIHRoYXQgdGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBvdXQtb2YtYm91bmRzIHdyaXRlLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvcm1hdGlvbiBsZWFrYWdlIHRvIHdvcnJ5IGFib3V0IGhlcmUsIHRoYW5rZnVsbHkuIEtBU0FOIHNob3VsZCBiZSBhbiBpZGVhbCB0b29sIHRvIGNhdGNoIHRoaXMgYXMgaXQncyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgZm9yIGRldGVjdGluZyB0aGlzIGtpbmQgb2YgbWVtb3J5IGVycm9yLiBXZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGRhdGEgdGhhdCdzIGFscmVhZHkgaW4gdGhlIG1lbW9yeSwgd2UgYXJlIGp1c3QgbG9va2luZyBmb3Igc29tZXRoaW5nICpuZXcqIGJlaW5nIHBsYWNlZCBpbiB0aGUgd3Jvbmcgc3BvdC5cblxuTm93LCBsZXQncyBkb3VibGUtY2hlY2sgdGhlIGltcGxlbWVudGF0aW9ucyBvZiBgaW9fdmVjX2ZpbGxfYnZlY2AgYW5kIGBpb192ZWNfZmlsbF9rZXJuX2J2ZWNgIHRvIGJlIGNlcnRhaW4gd2UgYXJlIGNvcnJlY3QgaW4gb3VyIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzA0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MTM6MTQuOTQxNjIyNzgyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjA1NjM3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb192ZWNfZmlsbF9idmVjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL3JzcmMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9yc3JjLmM9MTQ2MD1pbnQgaW9fdmVjX3JlYWxsb2Moc3RydWN0IGlvdV92ZWMgKml2LCB1bnNpZ25lZCBucl9lbnRyaWVzKVxcbi0tXFxuaW9fdXJpbmcvcnNyYy5jLTE0NzQtXFxuaW9fdXJpbmcvcnNyYy5jOjE0NzU6c3RhdGljIGludCBpb192ZWNfZmlsbF9idmVjKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuaW9fdXJpbmcvcnNyYy5jLTE0NzYtXFx0XFx0XFx0XFx0c3RydWN0IGlvX21hcHBlZF91YnVmICppbXUsXFxuLS1cXG5pb191cmluZy9yc3JjLmM9MTYyMD1pbnQgaW9faW1wb3J0X3JlZ192ZWMoaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbmlvX3VyaW5nL3JzcmMuYy0xNjg0LVxcbmlvX3VyaW5nL3JzcmMuYzoxNjg1OlxcdHJldHVybiBpb192ZWNfZmlsbF9idmVjKGRkaXIsIGl0ZXIsIGltdSwgaW92LCBucl9pb3ZzLCB2ZWMpO1xcbmlvX3VyaW5nL3JzcmMuYy0xNjg2LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MTM6MTUuMDA3Njg1NjI1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNzI1NTQxMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBpb192ZWNfZmlsbF9idmVjYCBmdW5jdGlvbi5cblxuKipBbmFseXppbmcgYGlvX3ZlY19maWxsX2J2ZWNgKipcblxuQWxyaWdodCwgc28gSSdtIHByZXNlbnRlZCB3aXRoIGBpb192ZWNfZmlsbF9idmVjYC4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgYmVnaW5zIGJ5IGV4YW1pbmluZyB0aGUgbmFtZSwgd2hpY2ggc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCB0aGUgZnVuY3Rpb24gaXMgaW52b2x2ZWQgaW4gZmlsbGluZyBhIGJsb2NrIHZlY3RvciAoYGJ2ZWNgKSB3aXRoIGRhdGEgZnJvbSBhbiBgaW9fdmVjYC4gVGhpcyBpcyBhIGNsYXNzaWMgcGF0dGVybiBpbiBJL08gb3BlcmF0aW9ucywgbGlrZWx5IGFpbWVkIGF0IGVmZmljaWVudCBkYXRhIHRyYW5zZmVyIGJldHdlZW4ga2VybmVsIHNwYWNlIGJ1ZmZlcnMgYW5kIHVzZXItc3BhY2UgbWVtb3J5IG9yIGV2ZW4gZGlzayBibG9ja3MuXG5cbkkgaW1tZWRpYXRlbHkgc3RhcnQgdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gSXMgdGhpcyBvcHRpbWl6ZWQgZm9yIERNQT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIG1lbW9yeSBjb3BpZXMsIGFuZCBjYW4gdGhleSBiZSByZWR1Y2VkPyBUaGUgYGlvX3ZlY2Agc3RydWN0dXJlIGltcGxpZXMgd2XigJlyZSBkZWFsaW5nIHdpdGggc2NhdHRlci9nYXRoZXIgSS9PLCBtZWFuaW5nIGRhdGEgbWF5IG5vdCBiZSBjb250aWd1b3VzLiBTbywgSSBuZWVkIHRvIGxvb2sgZm9yIGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhhdC4gQXJlIHRoZXkgdGFraW5nIGNhcmUgdG8gb3B0aW1pc2UgYWdhaW5zdCBtZW1vcnkgZnJhZ21lbnRhdGlvbj9cblxuSSdtIGV4cGVjdGluZyB0byBzZWUgbG9naWMgdGhhdCBpdGVyYXRlcyB0aHJvdWdoIHRoZSBgaW9fdmVjYCwgd2hpY2ggaXMgYSBjb2xsZWN0aW9uIG9mIGBpb3ZgIHN0cnVjdHMuIFRoZXNlIGBpb3ZgcyB0eXBpY2FsbHkgZGVzY3JpYmUgYSBtZW1vcnkgcmVnaW9uLCBhbiBhZGRyZXNzIGFuZCBpdHMgbGVuZ3RoLiBGb3IgZWFjaCBgaW92YCwgdGhlcmUgd2lsbCBiZSBzb21lIGNvcHlpbmcgbG9naWMgdGhhdCBwdXRzIGRhdGEgZnJvbSB0aGlzIHJlZ2lvbiBpbnRvIHRoZSBgYnZlY2AuIEl0J3MgZ29pbmcgdG8gYmUgZXNzZW50aWFsIHRvIGNvbmZpcm0gdGhlIGZ1bmN0aW9uIGhhbmRsZXMgYm91bmRhcnkgY29uZGl0aW9ucywgbGlrZSB3aGVuIHRoZSB0b3RhbCBzaXplIHRvIGNvcHkgaXMgbGVzcyB0aGFuIHRoZSBjYXBhY2l0eSBvZiB0aGUgYGJ2ZWNgLCBvciB3aGVuIGEgc2luZ2xlIGBpb3ZgIGlzIGxhcmdlciB0aGFuIHJlbWFpbmluZyBzcGFjZSB3aXRoaW4gdGhlIGRlc3RpbmF0aW9uLiBXaGF0IGFib3V0IGVycm9yIGhhbmRsaW5nLCB0b28/IEhvdyBhcmUgYW55IHBhcnRpYWwgd3JpdGVzIG9yIGVycm9ycyBmcm9tIHRoZSB1bmRlcmx5aW5nIHN0b3JhZ2UgZGVhbHQgd2l0aD9cblxuSSdtIGFsc28gY3VyaW91cyBhYm91dCB0aGUgbG93LWxldmVsIGRhdGEgc3RydWN0dXJlcyB1c2VkLiBJJ20gaG9waW5nIHRvIHNlZSBhIHNvbGlkIGltcGxlbWVudGF0aW9uIHRoYXQgYXZvaWRzIHVubmVjZXNzYXJ5IG92ZXJoZWFkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODU3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MTM6MTkuMjgwMjQzOTg1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9yc3JjLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ3NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQ3NTpcXHRzdGF0aWMgaW50IGlvX3ZlY19maWxsX2J2ZWMoaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4xNDc2OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBpb19tYXBwZWRfdWJ1ZiAqaW11LFxcbjE0Nzc6XFx0XFx0XFx0XFx0XFx0c3RydWN0IGlvdmVjICppb3ZlYywgdW5zaWduZWQgbnJfaW92cyxcXG4xNDc4OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBpb3VfdmVjICp2ZWMpXFxuMTQ3OTpcXHR7XFxuMTQ4MDpcXHRcXHR1bnNpZ25lZCBsb25nIGZvbGlvX3NpemUgPSAxIFxcdTAwM2NcXHUwMDNjIGltdS1cXHUwMDNlZm9saW9fc2hpZnQ7XFxuMTQ4MTpcXHRcXHR1bnNpZ25lZCBsb25nIGZvbGlvX21hc2sgPSBmb2xpb19zaXplIC0gMTtcXG4xNDgyOlxcdFxcdHN0cnVjdCBiaW9fdmVjICpyZXNfYnZlYyA9IHZlYy1cXHUwMDNlYnZlYztcXG4xNDgzOlxcdFxcdHNpemVfdCB0b3RhbF9sZW4gPSAwO1xcbjE0ODQ6XFx0XFx0dW5zaWduZWQgYnZlY19pZHggPSAwO1xcbjE0ODU6XFx0XFx0dW5zaWduZWQgaW92X2lkeDtcXG4xNDg2OlxcdFxcbjE0ODc6XFx0XFx0Zm9yIChpb3ZfaWR4ID0gMDsgaW92X2lkeCBcXHUwMDNjIG5yX2lvdnM7IGlvdl9pZHgrKykge1xcbjE0ODg6XFx0XFx0XFx0c2l6ZV90IGlvdl9sZW4gPSBpb3ZlY1tpb3ZfaWR4XS5pb3ZfbGVuO1xcbjE0ODk6XFx0XFx0XFx0dTY0IGJ1Zl9hZGRyID0gKHU2NCkodWludHB0cl90KWlvdmVjW2lvdl9pZHhdLmlvdl9iYXNlO1xcbjE0OTA6XFx0XFx0XFx0c3RydWN0IGJpb192ZWMgKnNyY19idmVjO1xcbjE0OTE6XFx0XFx0XFx0c2l6ZV90IG9mZnNldDtcXG4xNDkyOlxcdFxcdFxcdGludCByZXQ7XFxuMTQ5MzpcXHRcXG4xNDk0OlxcdFxcdFxcdHJldCA9IHZhbGlkYXRlX2ZpeGVkX3JhbmdlKGJ1Zl9hZGRyLCBpb3ZfbGVuLCBpbXUpO1xcbjE0OTU6XFx0XFx0XFx0aWYgKHVubGlrZWx5KHJldCkpXFxuMTQ5NjpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE0OTc6XFx0XFxuMTQ5ODpcXHRcXHRcXHRpZiAodW5saWtlbHkoIWlvdl9sZW4pKVxcbjE0OTk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMTUwMDpcXHRcXHRcXHRpZiAodW5saWtlbHkoY2hlY2tfYWRkX292ZXJmbG93KHRvdGFsX2xlbiwgaW92X2xlbiwgXFx1MDAyNnRvdGFsX2xlbikpKVxcbjE1MDE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FT1ZFUkZMT1c7XFxuMTUwMjpcXHRcXG4xNTAzOlxcdFxcdFxcdG9mZnNldCA9IGJ1Zl9hZGRyIC0gaW11LVxcdTAwM2V1YnVmO1xcbjE1MDQ6XFx0XFx0XFx0LypcXG4xNTA1OlxcdFxcdFxcdCAqIE9ubHkgdGhlIGZpcnN0IGJ2ZWMgY2FuIGhhdmUgbm9uIHplcm8gYnZfb2Zmc2V0LCBhY2NvdW50IGl0XFxuMTUwNjpcXHRcXHRcXHQgKiBoZXJlIGFuZCB3b3JrIHdpdGggZnVsbCBmb2xpb3MgYmVsb3cuXFxuMTUwNzpcXHRcXHRcXHQgKi9cXG4xNTA4OlxcdFxcdFxcdG9mZnNldCArPSBpbXUtXFx1MDAzZWJ2ZWNbMF0uYnZfb2Zmc2V0O1xcbjE1MDk6XFx0XFxuMTUxMDpcXHRcXHRcXHRzcmNfYnZlYyA9IGltdS1cXHUwMDNlYnZlYyArIChvZmZzZXQgXFx1MDAzZVxcdTAwM2UgaW11LVxcdTAwM2Vmb2xpb19zaGlmdCk7XFxuMTUxMTpcXHRcXHRcXHRvZmZzZXQgXFx1MDAyNj0gZm9saW9fbWFzaztcXG4xNTEyOlxcdFxcbjE1MTM6XFx0XFx0XFx0Zm9yICg7IGlvdl9sZW47IG9mZnNldCA9IDAsIGJ2ZWNfaWR4KyssIHNyY19idmVjKyspIHtcXG4xNTE0OlxcdFxcdFxcdFxcdHNpemVfdCBzZWdfc2l6ZSA9IG1pbl90KHNpemVfdCwgaW92X2xlbixcXG4xNTE1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdGZvbGlvX3NpemUgLSBvZmZzZXQpO1xcbjE1MTY6XFx0XFxuMTUxNzpcXHRcXHRcXHRcXHRidmVjX3NldF9wYWdlKFxcdTAwMjZyZXNfYnZlY1tidmVjX2lkeF0sXFxuMTUxODpcXHRcXHRcXHRcXHRcXHQgICAgICBzcmNfYnZlYy1cXHUwMDNlYnZfcGFnZSwgc2VnX3NpemUsIG9mZnNldCk7XFxuMTUxOTpcXHRcXHRcXHRcXHRpb3ZfbGVuIC09IHNlZ19zaXplO1xcbjE1MjA6XFx0XFx0XFx0fVxcbjE1MjE6XFx0XFx0fVxcbjE1MjI6XFx0XFx0aWYgKHRvdGFsX2xlbiBcXHUwMDNlIE1BWF9SV19DT1VOVClcXG4xNTIzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE1MjQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjEzOjE5LjI4MDQxMzc0NVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjEzMzQ4NTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgTWVtb3J5IFNhZmV0eSBJc3N1ZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBpb192ZWNfZmlsbF9idmVjYCBmdW5jdGlvbiBhbmQgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgKmlmKiBgbnJfc2Vnc2AgaXMgc2V0IHVwIGNvcnJlY3RseS4gU3BlY2lmaWNhbGx5LCB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciB3cml0aW5nIGRhdGEgaW50byBgcmVzX2J2ZWNbYnZlY19pZHhdYC4gVGhlIGNyaXRpY2FsIHBvaW50IGhlcmUgaXMgdGhhdCBpZiBgbnJfc2Vnc2AgaXMgdG9vIHNtYWxsLCB0aGVuIGByZXNfYnZlY2AgLSB3aGljaCwgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBpcyBlc3NlbnRpYWxseSBgdmVjLVx1MDAzZWJ2ZWNgIC0gd2lsbCBiZSB1bmRlcnNpemVkLiBDb25zZXF1ZW50bHksIGBidmVjX2lkeGAgaXMgZ29pbmcgdG8gd2FuZGVyIGJleW9uZCB0aGUgYm91bmRzIG9mIHRoYXQgYXJyYXksIGFuZCBiYW0sIHdlIGhhdmUgYW4gb3V0LW9mLWJvdW5kcyB3cml0ZS5cblxuRm9ydHVuYXRlbHksIGl0IGxvb2tzIGxpa2UgS0FTQU4gc2hvdWxkIGhhdmUgdGhpcyBjb3ZlcmVkLiBJdCdsbCBkZXRlY3QgdGhhdCB3cml0ZSwgc28gd2UncmUgZ29vZCB0aGVyZS4gQW5kIGFzIGZhciBhcyBJIGNhbiB0ZWxsLCB0aGVyZSdzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgaW4gdGhlIHByb2Nlc3MuXG5cblRodXMsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcsIEtNU0FOIHNob3VsZG4ndCBiZSBuZWNlc3NhcnkgaGVyZS5cblxuQnV0LCB5b3Uga25vdyBtZSwgSSBsaWtlIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gSnVzdCB0byBiZSBjb21wbGV0ZWx5IHRob3JvdWdoLCBsZXQgbWUgcXVpY2tseSBnbGFuY2UgYXQgYGlvX3ZlY19maWxsX2tlcm5fYnZlY2AganVzdCB0byBiZSBvbmUgaHVuZHJlZCBwZXJjZW50IHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBHb3R0YSBtYWtlIHN1cmUgd2UncmUgY292ZXJpbmcgYWxsIG91ciBiYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzExNiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjEzOjIzLjQ5Mzc2NDIwMVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDcwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW9fdXJpbmcvcnNyYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1MjUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE1MjU6XFx0XFx0aW92X2l0ZXJfYnZlYyhpdGVyLCBkZGlyLCByZXNfYnZlYywgYnZlY19pZHgsIHRvdGFsX2xlbik7XFxuMTUyNjpcXHRcXHRyZXR1cm4gMDtcXG4xNTI3OlxcdH1cXG4xNTI4OlxcdFxcbjE1Mjk6XFx0c3RhdGljIGludCBpb19lc3RpbWF0ZV9idmVjX3NpemUoc3RydWN0IGlvdmVjICppb3YsIHVuc2lnbmVkIG5yX2lvdnMsXFxuMTUzMDpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGlvX21hcHBlZF91YnVmICppbXUpXFxuMTUzMTpcXHR7XFxuMTUzMjpcXHRcXHR1bnNpZ25lZCBzaGlmdCA9IGltdS1cXHUwMDNlZm9saW9fc2hpZnQ7XFxuMTUzMzpcXHRcXHRzaXplX3QgbWF4X3NlZ3MgPSAwO1xcbjE1MzQ6XFx0XFx0dW5zaWduZWQgaTtcXG4xNTM1OlxcdFxcbjE1MzY6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX2lvdnM7IGkrKykge1xcbjE1Mzc6XFx0XFx0XFx0bWF4X3NlZ3MgKz0gKGlvdltpXS5pb3ZfbGVuIFxcdTAwM2VcXHUwMDNlIHNoaWZ0KSArIDI7XFxuMTUzODpcXHRcXHRcXHRpZiAobWF4X3NlZ3MgXFx1MDAzZSBJTlRfTUFYKVxcbjE1Mzk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FT1ZFUkZMT1c7XFxuMTU0MDpcXHRcXHR9XFxuMTU0MTpcXHRcXHRyZXR1cm4gbWF4X3NlZ3M7XFxuMTU0MjpcXHR9XFxuMTU0MzpcXHRcXG4xNTQ0OlxcdHN0YXRpYyBpbnQgaW9fdmVjX2ZpbGxfa2Vybl9idmVjKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuMTU0NTpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGlvX21hcHBlZF91YnVmICppbXUsXFxuMTU0NjpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGlvdmVjICppb3ZlYywgdW5zaWduZWQgbnJfaW92cyxcXG4xNTQ3OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgaW91X3ZlYyAqdmVjKVxcbjE1NDg6XFx0e1xcbjE1NDk6XFx0XFx0Y29uc3Qgc3RydWN0IGJpb192ZWMgKnNyY19idmVjID0gaW11LVxcdTAwM2VidmVjO1xcbjE1NTA6XFx0XFx0c3RydWN0IGJpb192ZWMgKnJlc19idmVjID0gdmVjLVxcdTAwM2VidmVjO1xcbjE1NTE6XFx0XFx0dW5zaWduZWQgcmVzX2lkeCA9IDA7XFxuMTU1MjpcXHRcXHRzaXplX3QgdG90YWxfbGVuID0gMDtcXG4xNTUzOlxcdFxcdHVuc2lnbmVkIGlvdl9pZHg7XFxuMTU1NDpcXHRcXG4xNTU1OlxcdFxcdGZvciAoaW92X2lkeCA9IDA7IGlvdl9pZHggXFx1MDAzYyBucl9pb3ZzOyBpb3ZfaWR4KyspIHtcXG4xNTU2OlxcdFxcdFxcdHNpemVfdCBvZmZzZXQgPSAoc2l6ZV90KSh1aW50cHRyX3QpaW92ZWNbaW92X2lkeF0uaW92X2Jhc2U7XFxuMTU1NzpcXHRcXHRcXHRzaXplX3QgaW92X2xlbiA9IGlvdmVjW2lvdl9pZHhdLmlvdl9sZW47XFxuMTU1ODpcXHRcXHRcXHRzdHJ1Y3QgYnZlY19pdGVyIGJpID0ge1xcbjE1NTk6XFx0XFx0XFx0XFx0LmJpX3NpemUgICAgICAgID0gb2Zmc2V0ICsgaW92X2xlbixcXG4xNTYwOlxcdFxcdFxcdH07XFxuMTU2MTpcXHRcXHRcXHRzdHJ1Y3QgYmlvX3ZlYyBidjtcXG4xNTYyOlxcdFxcbjE1NjM6XFx0XFx0XFx0YnZlY19pdGVyX2FkdmFuY2Uoc3JjX2J2ZWMsIFxcdTAwMjZiaSwgb2Zmc2V0KTtcXG4xNTY0OlxcdFxcdFxcdGZvcl9lYWNoX21wX2J2ZWMoYnYsIHNyY19idmVjLCBiaSwgYmkpXFxuMTU2NTpcXHRcXHRcXHRcXHRyZXNfYnZlY1tyZXNfaWR4KytdID0gYnY7XFxuMTU2NjpcXHRcXHRcXHR0b3RhbF9sZW4gKz0gaW92X2xlbjtcXG4xNTY3OlxcdFxcdH1cXG4xNTY4OlxcdFxcdGlvdl9pdGVyX2J2ZWMoaXRlciwgZGRpciwgcmVzX2J2ZWMsIHJlc19pZHgsIHRvdGFsX2xlbik7XFxuMTU2OTpcXHRcXHRyZXR1cm4gMDtcXG4xNTcwOlxcdH1cXG4xNTcxOlxcdFxcbjE1NzI6XFx0c3RhdGljIGludCBpb3Zfa2Vybl9idmVjX3NpemUoY29uc3Qgc3RydWN0IGlvdmVjICppb3YsXFxuMTU3MzpcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgaW9fbWFwcGVkX3VidWYgKmltdSxcXG4xNTc0OlxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCAqbnJfc2VnKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMToxMzoyMy40OTM4NzIzNTFaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY5NjIzNzgyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCdWcgYW5kIHRoZSBBcHByb3ByaWF0ZSBUb29saW5nKipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgYXQgdGhpcyBjb2RlLCBhbmQgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCBgcmVzX2J2ZWNbcmVzX2lkeCsrXSA9IGJ2O2Agd2lsbCBjYXVzZSBhbiBvdXQtb2YtYm91bmRzIHdyaXRlIGlmIGByZXNfYnZlY2AgaXNuJ3QgYmlnIGVub3VnaC4gVGhhdCdzIHRleHRib29rIGJ1ZmZlciBvdmVyZmxvdyB0ZXJyaXRvcnkuIE5vIGFtYmlndWl0eSB0aGVyZS4gQW5kIGhvbmVzdGx5LCBLQVNBTiBpcyB0aGUgcGVyZmVjdCB0b29sIGZvciB0aGlzIHBhcnRpY3VsYXIgam9iLiBJdCdzIGRlc2lnbmVkIHRvIG5haWwgdGhlc2Uga2luZHMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLiBObyBuZWVkIHRvIG92ZXJjb21wbGljYXRlIHRoaW5ncy5cblxuTGV0IG1lIGJyZWFrIGRvd24gdGhlIHJlYXNvbmluZyBmb3IgdGhlIHJlY29yZC4gVGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGR1cmluZyB0aGUgYG5yX3NlZ3NgIGNhbGN1bGF0aW9uIHdpdGhpbiBgaW9faW1wb3J0X3JlZ192ZWNgLiBFc3NlbnRpYWxseSwgaWYgYG5yX3NlZ3MgKiBzaXplb2Yoc3RydWN0IGJpb192ZWMpYCBvdmVyZmxvd3MsIGl0IGVmZmVjdGl2ZWx5IHJlZHVjZXMgdGhlIHZhbHVlIG9mIGBucl9zZWdzYCBiZWxvdyB0aGUgYWN0dWFsIHJlcXVpcmVtZW50LiBDb25zZXF1ZW50bHksIGB2ZWMtXHUwMDNlYnZlY2AgZW5kcyB1cCB1bmRlci1hbGxvY2F0ZWQgb3IgaW5zdWZmaWNpZW50bHkgcmVhbGxvY2F0ZWQgd2l0aGluIGBpb192ZWNfcmVhbGxvY2AuIFRoZW4sIGZ1cnRoZXIgZG93biB0aGUgbGluZSwgZWl0aGVyIGBpb192ZWNfZmlsbF9idmVjYCBvciBgaW9fdmVjX2ZpbGxfa2Vybl9idmVjYCBhdHRlbXB0IHRvIHdyaXRlIHBhc3QgdGhlIGFsbG9jYXRlZCBidWZmZXIgb2YgYHZlYy1cdTAwM2VidmVjYCwgd2hpY2ggaXMgYSBjbGFzc2ljIGhlYXAgb3V0LW9mLWJvdW5kcyB3cml0ZSDigJMgYSBidWZmZXIgb3ZlcmZsb3csIHBsYWluIGFuZCBzaW1wbGUuIEtBU0FOIGlzIGJ1aWx0IHRvIGNhdGNoIHRoaXMga2luZCBvZiB0aGluZyByZWxpYWJseS5cblxuVGhpcyBpc24ndCBhIHNpdHVhdGlvbiB3aGVyZSB3ZSdyZSBkZWFsaW5nIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnksIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYmVpbmcgdXNlZC4gVGhvc2UgYXJlIHRoZSB0eXBlcyBvZiBzY2VuYXJpb3Mgd2hlcmUgS01TQU4gbWlnaHQgY29tZSBpbnRvIHBsYXkuIEJ1dCBoZXJlPyBObywgdGhpcyBpcyBwdXJlbHkgYSBidWZmZXIgb3ZlcmZsb3cgaXNzdWUuIFRoZXJlZm9yZSwgdGhlcmUncyBubyBqdXN0aWZpY2F0aW9uIGZvciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIEtBU0FOIHdpbGwgYmUgc3VmZmljaWVudCBhbmQgc2hvdWxkIGNhdGNoIHRoZSBlcnJvci5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQxNywiT3V0cHV0VG9rZW5zIjoyMDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMToxMzozMC4xOTAxMTIzOTFaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gdGhlIGNhbGN1bGF0aW9uIG9mIGBucl9zZWdzYCBpbiBgaW9faW1wb3J0X3JlZ192ZWNgLiBJZiBgbnJfc2VncyAqIHNpemVvZihzdHJ1Y3QgYmlvX3ZlYylgIG92ZXJmbG93cywgYG5yX3NlZ3NgIGJlY29tZXMgc21hbGxlciB0aGFuIHJlcXVpcmVkLiBUaGlzIGxlYWRzIHRvIGFuIHVuZGVyLWFsbG9jYXRpb24gb3IgaW5zdWZmaWNpZW50IHJlYWxsb2NhdGlvbiBvZiBgdmVjLVxcdTAwM2VidmVjYCBpbiBgaW9fdmVjX3JlYWxsb2NgLiBTdWJzZXF1ZW50bHksIGBpb192ZWNfZmlsbF9idmVjYCBvciBgaW9fdmVjX2ZpbGxfa2Vybl9idmVjYCB3aWxsIHdyaXRlIG91dCBvZiBib3VuZHMgaW50byB0aGUgYHZlYy1cXHUwMDNlYnZlY2AgYXJyYXkuIFRoaXMgaXMgYSBjbGFzc2ljIGhlYXAgb3V0LW9mLWJvdW5kcyB3cml0ZSAoYnVmZmVyIG92ZXJmbG93KSwgd2hpY2ggaXMgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBpbmZvLWxlYWssIG9yIHVzZSBvZiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbnZvbHZlZCBpbiB0aGlzIGJ1Zy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIHRoZSBjYWxjdWxhdGlvbiBvZiBgbnJfc2Vnc2AgaW4gYGlvX2ltcG9ydF9yZWdfdmVjYC4gSWYgYG5yX3NlZ3MgKiBzaXplb2Yoc3RydWN0IGJpb192ZWMpYCBvdmVyZmxvd3MsIGBucl9zZWdzYCBiZWNvbWVzIHNtYWxsZXIgdGhhbiByZXF1aXJlZC4gVGhpcyBsZWFkcyB0byBhbiB1bmRlci1hbGxvY2F0aW9uIG9yIGluc3VmZmljaWVudCByZWFsbG9jYXRpb24gb2YgYHZlYy1cXHUwMDNlYnZlY2AgaW4gYGlvX3ZlY19yZWFsbG9jYC4gU3Vic2VxdWVudGx5LCBgaW9fdmVjX2ZpbGxfYnZlY2Agb3IgYGlvX3ZlY19maWxsX2tlcm5fYnZlY2Agd2lsbCB3cml0ZSBvdXQgb2YgYm91bmRzIGludG8gdGhlIGB2ZWMtXFx1MDAzZWJ2ZWNgIGFycmF5LiBUaGlzIGlzIGEgY2xhc3NpYyBoZWFwIG91dC1vZi1ib3VuZHMgd3JpdGUgKGJ1ZmZlciBvdmVyZmxvdyksIHdoaWNoIGlzIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgaW5mby1sZWFrLCBvciB1c2Ugb2YgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW52b2x2ZWQgaW4gdGhpcyBidWcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowb97pn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-12 20:55:33 +0000 UTC FinishedAt: 2026-08-12 21:13:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING" ], "series_id": "2ca1a88a-df4b-4686-9500-f355a2796d8a" }, "track": "KASAN", "fuzz": { "focus": [ "io_uring" ], "focus_symbols": [ "io_import_reg_vec", "io_uring_cmd_import_fixed_vec" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9faW1wb3J0X3JlZ192ZWMmIzM0OywKICAgICYjMzQ7aW9fdXJpbmdfY21kX2ltcG9ydF9maXhlZF92ZWMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIHRoZSBjYWxjdWxhdGlvbiBvZiBgbnJfc2Vnc2AgaW4gYGlvX2ltcG9ydF9yZWdfdmVjYC4gSWYgYG5yX3NlZ3MgKiBzaXplb2Yoc3RydWN0IGJpb192ZWMpYCBvdmVyZmxvd3MsIGBucl9zZWdzYCBiZWNvbWVzIHNtYWxsZXIgdGhhbiByZXF1aXJlZC4gVGhpcyBsZWFkcyB0byBhbiB1bmRlci1hbGxvY2F0aW9uIG9yIGluc3VmZmljaWVudCByZWFsbG9jYXRpb24gb2YgYHZlYy1cdTAwM2VidmVjYCBpbiBgaW9fdmVjX3JlYWxsb2NgLiBTdWJzZXF1ZW50bHksIGBpb192ZWNfZmlsbF9idmVjYCBvciBgaW9fdmVjX2ZpbGxfa2Vybl9idmVjYCB3aWxsIHdyaXRlIG91dCBvZiBib3VuZHMgaW50byB0aGUgYHZlYy1cdTAwM2VidmVjYCBhcnJheS4gVGhpcyBpcyBhIGNsYXNzaWMgaGVhcCBvdXQtb2YtYm91bmRzIHdyaXRlIChidWZmZXIgb3ZlcmZsb3cpLCB3aGljaCBpcyByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGluZm8tbGVhaywgb3IgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGludm9sdmVkIGluIHRoaXMgYnVnLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIGBpb19pbXBvcnRfcmVnX3ZlY2Agd2hlbiBjYWxjdWxhdGluZyBgbnJfc2Vnc2AgZnJvbSBgYnZlY19ieXRlc2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgaW9fdXJpbmcgc3Vic3lzdGVtLCByZWFjaGFibGUgdmlhIGlvX3VyaW5nIHN5c3RlbSBjYWxscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMToxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDMyOGU3NzViNjJkOGQ0OGFhODI1MmZhZDI4ODdhOTM1ZTc3YjcxM2FcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAyMToxMjoyMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pb191cmluZy9yc3JjLmMgYi9pb191cmluZy9yc3JjLmNcbmluZGV4IDhkMGYyZWUyNGUwYzIuLjk4ZGNjZWZkODAxYjkgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9yc3JjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2lvX3VyaW5nL3JzcmMuY1xuQEAgLTE2NTMsOCAmIzQzOzE2NTMsMTIgQEAgaW50IGlvX2ltcG9ydF9yZWdfdmVjKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRpZiAoc2l6ZW9mKHN0cnVjdCBiaW9fdmVjKSBcdTAwM2Ugc2l6ZW9mKHN0cnVjdCBpb3ZlYykpIHtcbiBcdFx0c2l6ZV90IGJ2ZWNfYnl0ZXM7XG4gXG4tXHRcdGJ2ZWNfYnl0ZXMgPSBucl9zZWdzICogc2l6ZW9mKHN0cnVjdCBiaW9fdmVjKTtcbi1cdFx0bnJfc2VncyA9IChidmVjX2J5dGVzICYjNDM7IHNpemVvZigqaW92KSAtIDEpIC8gc2l6ZW9mKCppb3YpO1xuJiM0MztcdFx0aWYgKGNoZWNrX211bF9vdmVyZmxvdygoc2l6ZV90KW5yX3NlZ3MsIHNpemVvZihzdHJ1Y3QgYmlvX3ZlYyksXG4mIzQzO1x0XHRcdFx0ICAgICAgIFx1MDAyNmJ2ZWNfYnl0ZXMpIHx8XG4mIzQzO1x0XHQgICAgY2hlY2tfYWRkX292ZXJmbG93KGJ2ZWNfYnl0ZXMsIHNpemVvZigqaW92KSAtIDEsXG4mIzQzO1x0XHRcdFx0ICAgICAgIFx1MDAyNmJ2ZWNfYnl0ZXMpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiYjNDM7XHRcdG5yX3NlZ3MgPSBidmVjX2J5dGVzIC8gc2l6ZW9mKCppb3YpO1xuIFx0XHRucl9zZWdzICYjNDM7PSBucl9pb3ZzO1xuIFx0fVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJT19VUklORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX2ltcG9ydF9yZWdfdmVjJiMzNDssCiAgICAmIzM0O2lvX3VyaW5nX2NtZF9pbXBvcnRfZml4ZWRfdmVjJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gYGlvX2ltcG9ydF9yZWdfdmVjYCB3aGVuIGNhbGN1bGF0aW5nIGBucl9zZWdzYCBmcm9tIGBidmVjX2J5dGVzYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBpb191cmluZyBzdWJzeXN0ZW0sIHJlYWNoYWJsZSB2aWEgaW9fdXJpbmcgc3lzdGVtIGNhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzI4ZTc3NWI2MmQ4ZDQ4YWE4MjUyZmFkMjg4N2E5MzVlNzdiNzEzYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDIxOjEyOjIwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW9fdXJpbmcvcnNyYy5jIGIvaW9fdXJpbmcvcnNyYy5jCmluZGV4IDhkMGYyZWUyNGUwYzIuLjk4ZGNjZWZkODAxYjkgMTAwNjQ0Ci0tLSBhL2lvX3VyaW5nL3JzcmMuYwomIzQzOyYjNDM7JiM0MzsgYi9pb191cmluZy9yc3JjLmMKQEAgLTE2NTMsOCAmIzQzOzE2NTMsMTIgQEAgaW50IGlvX2ltcG9ydF9yZWdfdmVjKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiAJaWYgKHNpemVvZihzdHJ1Y3QgYmlvX3ZlYykgJmd0OyBzaXplb2Yoc3RydWN0IGlvdmVjKSkgewogCQlzaXplX3QgYnZlY19ieXRlczsKIAotCQlidmVjX2J5dGVzID0gbnJfc2VncyAqIHNpemVvZihzdHJ1Y3QgYmlvX3ZlYyk7Ci0JCW5yX3NlZ3MgPSAoYnZlY19ieXRlcyAmIzQzOyBzaXplb2YoKmlvdikgLSAxKSAvIHNpemVvZigqaW92KTsKJiM0MzsJCWlmIChjaGVja19tdWxfb3ZlcmZsb3coKHNpemVfdClucl9zZWdzLCBzaXplb2Yoc3RydWN0IGJpb192ZWMpLAomIzQzOwkJCQkgICAgICAgJmFtcDtidmVjX2J5dGVzKSB8fAomIzQzOwkJICAgIGNoZWNrX2FkZF9vdmVyZmxvdyhidmVjX2J5dGVzLCBzaXplb2YoKmlvdikgLSAxLAomIzQzOwkJCQkgICAgICAgJmFtcDtidmVjX2J5dGVzKSkKJiM0MzsJCQlyZXR1cm4gLUVPVkVSRkxPVzsKJiM0MzsJCW5yX3NlZ3MgPSBidmVjX2J5dGVzIC8gc2l6ZW9mKCppb3YpOwogCQlucl9zZWdzICYjNDM7PSBucl9pb3ZzOwogCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDk3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJT19VUklORyBSZXNvdXJjZSBSZWdpc3RyYXRpb24gQ29kZSoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IGEgcGF0Y2ggYXBwbGllZCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdG91Y2hpbmcgYGlvX3VyaW5nL3JzcmMuY2AsIHNwZWNpZmljYWxseSBgaW9faW1wb3J0X3JlZ192ZWNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGF0IGZ1bmN0aW9uLiBUaGUgZGVzY3JpcHRpb24gbWVudGlvbnMgb3ZlcmZsb3cgY2hlY2tzIGJlaW5nIGFkZGVkIHRvIHRoZSBgbnJfc2Vnc2AgY2FsY3VsYXRpb24uIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGFyZWEgZm9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGluIGEgbG93LWxldmVsIGNvbnRleHQgbGlrZSB0aGlzLiBMZXQmIzM5O3MgZGlnIGludG8gYGlvX2ltcG9ydF9yZWdfdmVjYCBhbmQgc2VlIGV4YWN0bHkgaG93IHRob3NlIG92ZXJmbG93IGNoZWNrcyBhcmUgaW1wbGVtZW50ZWQgYW5kIHdoYXQgc2NlbmFyaW9zIHRoZXkgYXJlIGRlc2lnbmVkIHRvIG1pdGlnYXRlLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogYmVoaW5kIHRoaXMgcGF0Y2gg4oCTIHdoYXQgd2FzIHRoZSBzcGVjaWZpYyBwcm9ibGVtIGJlaW5nIGFkZHJlc3NlZCwgYW5kIGhvdyBlZmZlY3RpdmVseSBpcyB0aGlzIHBhdGNoIHJlc29sdmluZyBpdD8gVGltZSB0byBnZXQgaW50byB0aGUgY29kZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19pbXBvcnRfcmVnX3ZlYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nL3JzcmMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9yc3JjLmM9MTU5NT1zdGF0aWMgaW50IGlvX2tlcm5fYnZlY19zaXplKHN0cnVjdCBpb3ZlYyAqaW92LCB1bnNpZ25lZCBucl9pb3ZzLFxuLS1cbmlvX3VyaW5nL3JzcmMuYy0xNjE5LVxuaW9fdXJpbmcvcnNyYy5jOjE2MjA6aW50IGlvX2ltcG9ydF9yZWdfdmVjKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG5pb191cmluZy9yc3JjLmMtMTYyMS1cdFx0XHRzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvdV92ZWMgKnZlYyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTExCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgY29uc2lkZXJpbmcgSSYjMzk7bSBzdGVlcGVkIGluIHRoaXMgc3R1ZmY6CgoqKkRpdmluZyBpbnRvIGBpb19pbXBvcnRfcmVnX3ZlY2AgaW4gYGlvX3VyaW5nL3JzcmMuY2AqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBpbiBvbiBgaW9faW1wb3J0X3JlZ192ZWNgIHdpdGhpbiBgcnNyYy5jYC4gVGhlIG5hbWUgaXRzZWxmIGhpbnRzIHRoYXQgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgcmVnaXN0ZXJpbmcgb3IgaW1wb3J0aW5nIHZlY3Rvci1iYXNlZCBkYXRhIHN0cnVjdHVyZXMsIHByb2JhYmx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgaW9fdXJpbmcgc3Vic3lzdGVtLiBLbm93aW5nIHRoZSB1c3VhbCBpb191cmluZyBmbG93LCBteSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZTogV2hhdCBraW5kIG9mIHZlY3RvcnM/IEFyZSB0aGV5IGRlc2NyaWJpbmcgbWVtb3J5IHJlZ2lvbnM/IEZpbGUgZGVzY3JpcHRvcnM/IElzIHRoaXMgcmVsYXRlZCB0byBob3cgaW9fdXJpbmcgaGFuZGxlcyBJL08gYnVmZmVycz8gSG93IGRvZXMgdGhpcyBmdW5jdGlvbiBpbnRlcmZhY2Ugd2l0aCB0aGUgbWFpbiByZXF1ZXN0IHN1Ym1pc3Npb24gYW5kIGNvbXBsZXRpb24gcGF0aD8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgc29tZSBpbnRlcmFjdGlvbiB3aXRoIHVzZXItc3BhY2UgYnVmZmVycyBhbmQga2VybmVsLXNwYWNlIGRhdGEuIEkmIzM5O20gaG9waW5nIHRvIHNlZSBob3cgbWVtb3J5IGdldHMgcGlubmVkLCBob3cgcGVybWlzc2lvbnMgYXJlIGNoZWNrZWQsIGFuZCBob3cgdGhlc2UgcmVnaXN0cmF0aW9ucyBhcmUgaG9va2VkIGludG8gdGhlIGxhcmdlciBpb191cmluZyBsaWZlY3ljbGUuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBmdW5jdGlvbiBpcyBhIGtleSBwaWVjZSBmb3IgemVyby1jb3B5IG9wZXJhdGlvbnMgb3Igc2hhcmVkIG1lbW9yeSBtYXBwaW5ncyB3aXRoaW4gdGhlIEkvTyBmcmFtZXdvcmsuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgdGhlIGRldGFpbHMgb2YgdGhpcyBpbXBvcnRhbnQgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjE6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpb191cmluZy9yc3JjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNjE1Olx0XHRpZiAodG90YWxfbGVuIFx1MDAzZSBNQVhfUldfQ09VTlQpXG4xNjE2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTYxNzpcdFx0cmV0dXJuIDA7XG4xNjE4Olx0fVxuMTYxOTpcdFxuMTYyMDpcdGludCBpb19pbXBvcnRfcmVnX3ZlYyhpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuMTYyMTpcdFx0XHRcdHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW91X3ZlYyAqdmVjLFxuMTYyMjpcdFx0XHRcdHVuc2lnbmVkIG5yX2lvdnMsIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKVxuMTYyMzpcdHtcbjE2MjQ6XHRcdHN0cnVjdCBpb19yc3JjX25vZGUgKm5vZGU7XG4xNjI1Olx0XHRzdHJ1Y3QgaW9fbWFwcGVkX3VidWYgKmltdTtcbjE2MjY6XHRcdHVuc2lnbmVkIGlvdmVjX29mZjtcbjE2Mjc6XHRcdHN0cnVjdCBpb3ZlYyAqaW92O1xuMTYyODpcdFx0dW5zaWduZWQgbnJfc2VncztcbjE2Mjk6XHRcbjE2MzA6XHRcdG5vZGUgPSBpb19maW5kX2J1Zl9ub2RlKHJlcSwgaXNzdWVfZmxhZ3MpO1xuMTYzMTpcdFx0aWYgKCFub2RlKVxuMTYzMjpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjE2MzM6XHRcdGltdSA9IG5vZGUtXHUwMDNlYnVmO1xuMTYzNDpcdFx0aWYgKCEoaW11LVx1MDAzZWRpciBcdTAwMjYgKDEgXHUwMDNjXHUwMDNjIGRkaXIpKSlcbjE2MzU6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4xNjM2Olx0XG4xNjM3Olx0XHRpb3ZlY19vZmYgPSB2ZWMtXHUwMDNlbnIgLSBucl9pb3ZzO1xuMTYzODpcdFx0aW92ID0gdmVjLVx1MDAzZWlvdmVjICYjNDM7IGlvdmVjX29mZjtcbjE2Mzk6XHRcbjE2NDA6XHRcdGlmIChpbXUtXHUwMDNlZmxhZ3MgXHUwMDI2IElPX1JFR0JVRl9GX0tCVUYpIHtcbjE2NDE6XHRcdFx0aW50IHJldCA9IGlvX2tlcm5fYnZlY19zaXplKGlvdiwgbnJfaW92cywgaW11LCBcdTAwMjZucl9zZWdzKTtcbjE2NDI6XHRcbjE2NDM6XHRcdFx0aWYgKHVubGlrZWx5KHJldCkpXG4xNjQ0Olx0XHRcdFx0cmV0dXJuIHJldDtcbjE2NDU6XHRcdH0gZWxzZSB7XG4xNjQ2Olx0XHRcdGludCByZXQgPSBpb19lc3RpbWF0ZV9idmVjX3NpemUoaW92LCBucl9pb3ZzLCBpbXUpO1xuMTY0NzpcdFxuMTY0ODpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTY0OTpcdFx0XHRcdHJldHVybiByZXQ7XG4xNjUwOlx0XHRcdG5yX3NlZ3MgPSByZXQ7XG4xNjUxOlx0XHR9XG4xNjUyOlx0XG4xNjUzOlx0XHRpZiAoc2l6ZW9mKHN0cnVjdCBiaW9fdmVjKSBcdTAwM2Ugc2l6ZW9mKHN0cnVjdCBpb3ZlYykpIHtcbjE2NTQ6XHRcdFx0c2l6ZV90IGJ2ZWNfYnl0ZXM7XG4xNjU1Olx0XG4xNjU2Olx0XHRcdGlmIChjaGVja19tdWxfb3ZlcmZsb3coKHNpemVfdClucl9zZWdzLCBzaXplb2Yoc3RydWN0IGJpb192ZWMpLFxuMTY1NzpcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmJ2ZWNfYnl0ZXMpIHx8XG4xNjU4Olx0XHRcdCAgICBjaGVja19hZGRfb3ZlcmZsb3coYnZlY19ieXRlcywgc2l6ZW9mKCppb3YpIC0gMSxcbjE2NTk6XHRcdFx0XHRcdCAgICAgICBcdTAwMjZidmVjX2J5dGVzKSlcbjE2NjA6XHRcdFx0XHRyZXR1cm4gLUVPVkVSRkxPVztcbjE2NjE6XHRcdFx0bnJfc2VncyA9IGJ2ZWNfYnl0ZXMgLyBzaXplb2YoKmlvdik7XG4xNjYyOlx0XHRcdG5yX3NlZ3MgJiM0Mzs9IG5yX2lvdnM7XG4xNjYzOlx0XHR9XG4xNjY0Olx0XG4xNjY1Olx0XHRpZiAobnJfc2VncyBcdTAwM2UgdmVjLVx1MDAzZW5yKSB7XG4xNjY2Olx0XHRcdHN0cnVjdCBpb3VfdmVjIHRtcF92ZWMgPSB7fTtcbjE2Njc6XHRcdFx0aW50IHJldDtcbjE2Njg6XHRcbjE2Njk6XHRcdFx0cmV0ID0gaW9fdmVjX3JlYWxsb2MoXHUwMDI2dG1wX3ZlYywgbnJfc2Vncyk7XG4xNjcwOlx0XHRcdGlmIChyZXQpXG4xNjcxOlx0XHRcdFx0cmV0dXJuIHJldDtcbjE2NzI6XHRcbjE2NzM6XHRcdFx0aW92ZWNfb2ZmID0gdG1wX3ZlYy5uciAtIG5yX2lvdnM7XG4xNjc0Olx0XHRcdG1lbWNweSh0bXBfdmVjLmlvdmVjICYjNDM7IGlvdmVjX29mZiwgaW92LCBzaXplb2YoKmlvdikgKiBucl9pb3ZzKTtcbjE2NzU6XHRcdFx0aW9fdmVjX2ZyZWUodmVjKTtcbjE2NzY6XHRcbjE2Nzc6XHRcdFx0KnZlYyA9IHRtcF92ZWM7XG4xNjc4Olx0XHRcdGlvdiA9IHZlYy1cdTAwM2Vpb3ZlYyAmIzQzOyBpb3ZlY19vZmY7XG4xNjc5Olx0XHRcdHJlcS1cdTAwM2VmbGFncyB8PSBSRVFfRl9ORUVEX0NMRUFOVVA7XG4xNjgwOlx0XHR9XG4xNjgxOlx0XG4xNjgyOlx0XHRpZiAoaW11LVx1MDAzZWZsYWdzIFx1MDAyNiBJT19SRUdCVUZfRl9LQlVGKVxuMTY4MzpcdFx0XHRyZXR1cm4gaW9fdmVjX2ZpbGxfa2Vybl9idmVjKGRkaXIsIGl0ZXIsIGltdSwgaW92LCBucl9pb3ZzLCB2ZWMpO1xuMTY4NDpcdFxuMTY4NTpcdFx0cmV0dXJuIGlvX3ZlY19maWxsX2J2ZWMoZGRpciwgaXRlciwgaW11LCBpb3YsIG5yX2lvdnMsIHZlYyk7XG4xNjg2Olx0fVxuMTY4NzpcdFxuMTY4ODpcdGludCBpb19wcmVwX3JlZ19pb3ZlYyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvdV92ZWMgKml2LFxuMTY4OTpcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgaW92ZWMgX191c2VyICp1dmVjLCBzaXplX3QgdXZlY19zZWdzKVxuMTY5MDpcdHtcbjE2OTE6XHRcdHN0cnVjdCBpb3ZlYyAqaW92O1xuMTY5MjpcdFx0aW50IGlvdmVjX29mZiwgcmV0O1xuMTY5MzpcdFx0dm9pZCAqcmVzO1xuMTY5NDpcdFxuMTY5NTpcdFx0aWYgKHV2ZWNfc2VncyBcdTAwM2UgaXYtXHUwMDNlbnIpIHtcbjE2OTY6XHRcdFx0cmV0ID0gaW9fdmVjX3JlYWxsb2MoaXYsIHV2ZWNfc2Vncyk7XG4xNjk3Olx0XHRcdGlmIChyZXQpXG4xNjk4Olx0XHRcdFx0cmV0dXJuIHJldDtcbjE2OTk6XHRcdFx0cmVxLVx1MDAzZWZsYWdzIHw9IFJFUV9GX05FRURfQ0xFQU5VUDtcbjE3MDA6XHRcdH1cbjE3MDE6XHRcbjE3MDI6XHRcdC8qIHBhZCBpb3ZlYyB0byB0aGUgcmlnaHQgKi9cbjE3MDM6XHRcdGlvdmVjX29mZiA9IGl2LVx1MDAzZW5yIC0gdXZlY19zZWdzO1xuMTcwNDpcdFx0aW92ID0gaXYtXHUwMDNlaW92ZWMgJiM0MzsgaW92ZWNfb2ZmO1xuMTcwNTpcdFx0cmVzID0gaW92ZWNfZnJvbV91c2VyKHV2ZWMsIHV2ZWNfc2VncywgdXZlY19zZWdzLCBpb3YsXG4xNzA2Olx0XHRcdFx0ICAgICAgaW9faXNfY29tcGF0KHJlcS1cdTAwM2VjdHgpKTtcbjE3MDc6XHRcdGlmIChJU19FUlIocmVzKSlcbjE3MDg6XHRcdFx0cmV0dXJuIFBUUl9FUlIocmVzKTtcbjE3MDk6XHRcbjE3MTA6XHRcdHJlcS1cdTAwM2VmbGFncyB8PSBSRVFfRl9JTVBPUlRfQlVGRkVSO1xuMTcxMTpcdFx0cmV0dXJuIDA7XG4xNzEyOlx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNTAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgSW50ZWdlciBPdmVyZmxvdyBpbiBpb191cmluZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBzcG90dGVkIGEgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eSBpbiBgaW9fdXJpbmcvcnNyYy5jYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGlvX2ltcG9ydF9yZWdfdmVjYCBmdW5jdGlvbi4gVGhlIG92ZXJmbG93IHN0ZW1zIGZyb20gYSBjYWxjdWxhdGlvbiBvZiBgbnJfc2Vnc2AuIFRoaXMgc291bmRzIGxpa2Ugc29tZXRoaW5nIHRoYXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIHdhcnJhbnRzIHNvbWUgZGVkaWNhdGVkIGZ1enppbmcgYXR0ZW50aW9uLiBgaW9fdXJpbmdgIGlzIGEgY29yZSBwYXJ0IG9mIHRoZSBrZXJuZWwmIzM5O3MgSS9PIGluZnJhc3RydWN0dXJlLCBzbyBhbnkgdnVsbmVyYWJpbGl0eSBoZXJlIGlzIGEgY29uY2Vybi4KCk5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBhbmQgcmVhY2ggb2YgdGhpcyBmdW5jdGlvbi4gSSBuZWVkIHRvIHRyYWNlIHdoZXJlIGBpb19pbXBvcnRfcmVnX3ZlY2AgaXMgYWN0dWFsbHkgKmNhbGxlZCouIElzIGl0IGFuIGV4cG9ydGVkIHN5bWJvbCwgb3IgaXMgaXQgdXNlZCBpbnRlcm5hbGx5IHdpdGhpbiBgaW9fdXJpbmdgPyBLbm93aW5nIGl0cyBjYWxsIHNpdGVzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBoYW5kbGUgb24gdGhlIGF0dGFjayBzdXJmYWNlIGFuZCBob3cgYW4gYXR0YWNrZXIgbWlnaHQgdHJpZ2dlciB0aGlzIG92ZXJmbG93LiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBjb2RlYmFzZSBhbmQgZmluZCB0aG9zZSByZWZlcmVuY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX2ltcG9ydF9yZWdfdmVjJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jPTE1MDA9c3RhdGljIGludCBpb19zZW5kX3pjX2ltcG9ydChzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbi0tXG5pb191cmluZy9uZXQuYy0xNTE4LVxuaW9fdXJpbmcvbmV0LmM6MTUxOTpcdFx0cmV0ID0gaW9faW1wb3J0X3JlZ192ZWMoSVRFUl9TT1VSQ0UsIFx1MDAyNmttc2ctXHUwMDNlbXNnLm1zZ19pdGVyLFxuaW9fdXJpbmcvbmV0LmMtMTUyMC1cdFx0XHRcdFx0bm90aWYsIFx1MDAyNmttc2ctXHUwMDNldmVjLCB1dmVjX3NlZ3MsXG4tLVxuaW9fdXJpbmcvcnNyYy5jPTE1OTU9c3RhdGljIGludCBpb19rZXJuX2J2ZWNfc2l6ZShzdHJ1Y3QgaW92ZWMgKmlvdiwgdW5zaWduZWQgbnJfaW92cyxcbi0tXG5pb191cmluZy9yc3JjLmMtMTYxOS1cbmlvX3VyaW5nL3JzcmMuYzoxNjIwOmludCBpb19pbXBvcnRfcmVnX3ZlYyhpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuaW9fdXJpbmcvcnNyYy5jLTE2MjEtXHRcdFx0c3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb3VfdmVjICp2ZWMsXG4tLVxuaW9fdXJpbmcvcnNyYy5oPTY5PWludCBpb19pbXBvcnRfcmVnX2J1ZihzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbmlvX3VyaW5nL3JzcmMuaC03MS1cdFx0XHR1bnNpZ25lZCBpc3N1ZV9mbGFncyk7XG5pb191cmluZy9yc3JjLmg6NzI6aW50IGlvX2ltcG9ydF9yZWdfdmVjKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG5pb191cmluZy9yc3JjLmgtNzMtXHRcdFx0c3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb3VfdmVjICp2ZWMsXG4tLVxuaW9fdXJpbmcvcncuYz0zOTk9c3RhdGljIGludCBpb19yd19pbXBvcnRfcmVnX3ZlYyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSxcbi0tXG5pb191cmluZy9ydy5jLTQwNi1cbmlvX3VyaW5nL3J3LmM6NDA3Olx0cmV0ID0gaW9faW1wb3J0X3JlZ192ZWMoZGRpciwgXHUwMDI2aW8tXHUwMDNlaXRlciwgcmVxLCBcdTAwMjZpby1cdTAwM2V2ZWMsXG5pb191cmluZy9ydy5jLTQwOC1cdFx0XHRcdHV2ZWNfc2VncywgaXNzdWVfZmxhZ3MpO1xuLS1cbmlvX3VyaW5nL3VyaW5nX2NtZC5jPTMwMz1pbnQgaW9fdXJpbmdfY21kX2ltcG9ydF9maXhlZF92ZWMoc3RydWN0IGlvX3VyaW5nX2NtZCAqaW91Y21kLFxuLS1cbmlvX3VyaW5nL3VyaW5nX2NtZC5jLTMxOS1cbmlvX3VyaW5nL3VyaW5nX2NtZC5jOjMyMDpcdHJldHVybiBpb19pbXBvcnRfcmVnX3ZlYyhkZGlyLCBpdGVyLCByZXEsIFx1MDAyNmFjLVx1MDAzZXZlYywgdXZlY19zZWdzLFxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMzIxLVx0XHRcdFx0IGlzc3VlX2ZsYWdzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjgyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBpb191cmluZyBJbXBvcnQgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGlvX2ltcG9ydF9yZWdfdmVjYCwgYW5kIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGEgZmV3IHBsYWNlcyB3aXRoaW4gdGhlIGBpb191cmluZ2AgZnJhbWV3b3JrOiBzcGVjaWZpY2FsbHksIGBpb19zZW5kX3pjX2ltcG9ydGAgaW4gYGlvX3VyaW5nL25ldC5jYCwgYGlvX3J3X2ltcG9ydF9yZWdfdmVjYCBpbiBgaW9fdXJpbmcvcncuY2AsIGFuZCBgaW9fdXJpbmdfY21kX2ltcG9ydF9maXhlZF92ZWNgIGluIGBpb191cmluZy91cmluZ19jbWQuY2AuICBBbGwgY2xlYXJseSBgaW9fdXJpbmdgIGZ1bmN0aW9ucywgYW5kIHRoZSBjb25maWd1cmF0aW9uIG5lY2Vzc2FyeSBpcyBgSU9fVVJJTkdgLgoKR2l2ZW4gdGhhdCwgSSB0aGluayBhIGRlZXBlciBkaXZlIGludG8gdGhlc2UgZnVuY3Rpb25zIGlzIG1lcml0ZWQuIEl0IHNlZW1zIGxpa2UgdGhlIGltcG9ydCBmdW5jdGlvbmFsaXR5IGFuZCB0aGUgZnVuY3Rpb25zIGludGVyYWN0aW5nIHdpdGggaXQgYXJlIHByaW1lIGNhbmRpZGF0ZXMgdG8gZm9jdXMgb24uIFNvLCBsZXQmIzM5O3MgZGVzaWduYXRlIGBpb19pbXBvcnRfcmVnX3ZlY2AgaXRzZWxmIGFzIGEga2V5IGZvY3VzIHN5bWJvbC4gSXRzIGNhbGxlcnMsIGBpb19zZW5kX3pjX2ltcG9ydGAsIGBpb19yd19pbXBvcnRfcmVnX3ZlY2AsIGFuZCBgaW9fdXJpbmdfY21kX2ltcG9ydF9maXhlZF92ZWNgIGFyZSBhbHNvIGV4Y2VsbGVudCBmb2N1cyBwb2ludHMuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBpbnRlcmFjdGlvbnMgYW5kIHRoZSBsYXJnZXIgY29udGV4dCBvZiB0aGlzIGltcG9ydCBtZWNoYW5pc20uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJT19VUklORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTkxMD1jb25maWcgQUlPXG4tLVxuaW5pdC9LY29uZmlnLTE5MTctXG5pbml0L0tjb25maWc6MTkxODpjb25maWcgSU9fVVJJTkdcbmluaXQvS2NvbmZpZy0xOTE5LVx0Ym9vbCBcJiMzNDtFbmFibGUgSU8gdXJpbmcgc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbi0tXG5pbml0L0tjb25maWc9MTkyNz1jb25maWcgR0NPVl9QUk9GSUxFX1VSSU5HXG4tLVxuaW5pdC9LY29uZmlnLTE5MzktXG5pbml0L0tjb25maWc6MTk0MDpjb25maWcgSU9fVVJJTkdfTU9DS19GSUxFXG5pbml0L0tjb25maWctMTk0MS1cdHRyaXN0YXRlIFwmIzM0O0VuYWJsZSBpb191cmluZyBtb2NrIGZpbGVzIChFeHBlcmltZW50YWwpXCYjMzQ7IGlmIEVYUEVSVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTAwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUsIGFzIGlmIEkmIzM5O20gd29ya2luZyB0aHJvdWdoIHRoaXMgcHJvYmxlbToKCioqRGlnZ2luZyBpbnRvIHRoZSBgSU9fVVJJTkdgIENvbmZpZ3VyYXRpb24gYW5kIGBpb19pbXBvcnRfcmVnX3ZlY2AqKgoKQWxyaWdodCwgSSYjMzk7bSBkZWFsaW5nIHdpdGggYW4gYElPX1VSSU5HYCBjb25maWd1cmF0aW9uIGhlcmUsIHNvIHRoZSBpbXBsaWNhdGlvbnMgYXJlIHByZXR0eSBjbGVhci4gSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIGhvdyB0aGlzIGlzIGltcGxlbWVudGVkLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gemVyb2luZyBpbiBvbiBgaW9faW1wb3J0X3JlZ192ZWNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSB2ZXJpZnkgaWYgdGhhdCBmdW5jdGlvbiBpcyBleHBvc2VkLiBMZXQmIzM5O3Mgc2VlIGlmIGl0JiMzOTtzIGV4cG9ydGVkIGZvciBtb2R1bGVzLCBiZWNhdXNlIGlmIGl0JiMzOTtzIG5vdCB0aGVuIG15IG9wdGlvbnMgaW1tZWRpYXRlbHkgbmFycm93LiBBaCwgZ29vZCwgaXQmIzM5O3Mgbm90IGV4cG9ydGVkIHRvIG1vZHVsZXMsIHdoaWNoIG1lYW5zIEkmIzM5O2xsIGhhdmUgdG8gY29uc2lkZXIgaXRzIHVzZSB3aXRoaW4gdGhlIGtlcm5lbCBwcm9wZXIuIEl0JiMzOTtzIG5vdCBzdGF0aWMgZWl0aGVyLCB0aGF0JiMzOTtzIHVzZWZ1bCB0byBrbm93LgoKTmV4dCwgSSB0aGluayBJJiMzOTtsbCBsb29rIGludG8gYGlvX3NlbmRfemNfaW1wb3J0YCB3aGljaCBpcyBpbiBgaW9fdXJpbmcvbmV0LmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19zZW5kX3pjX2ltcG9ydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL25ldC5jPTE0NTc9c3RhdGljIGludCBpb19zZ19mcm9tX2l0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5pb191cmluZy9uZXQuYy0xNDk5LVxuaW9fdXJpbmcvbmV0LmM6MTUwMDpzdGF0aWMgaW50IGlvX3NlbmRfemNfaW1wb3J0KHN0cnVjdCBpb19raW9jYiAqcmVxLFxuaW9fdXJpbmcvbmV0LmMtMTUwMS1cdFx0XHQgICAgIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csXG4tLVxuaW9fdXJpbmcvbmV0LmM9MTUzMD1pbnQgaW9fc2VuZG1zZ196YyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgdW5zaWduZWQgaW50IGlzc3VlX2ZsYWdzKVxuLS1cbmlvX3VyaW5nL25ldC5jLTE1NDctXHRpZiAocmVxLVx1MDAzZWZsYWdzIFx1MDAyNiBSRVFfRl9JTVBPUlRfQlVGRkVSKSB7XG5pb191cmluZy9uZXQuYzoxNTQ4Olx0XHRyZXQgPSBpb19zZW5kX3pjX2ltcG9ydChyZXEsIGttc2csIGlzc3VlX2ZsYWdzKTtcbmlvX3VyaW5nL25ldC5jLTE1NDktXHRcdGlmICh1bmxpa2VseShyZXQpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDc4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBgaW9fdXJpbmdgIEltcG9ydCBNZWNoYW5pc20qKgoKT2theSwgc28gYGlvX3NlbmRfemNfaW1wb3J0YCBpcyBkZWZpbmVkIGFzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBpdCYjMzk7cyBsaW1pdGVkIGluIHNjb3BlIGFuZCBjYW4mIzM5O3QgYmUgZGlyZWN0bHkgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGUgZmlsZSBpdCYjMzk7cyBkZWNsYXJlZCBpbi4gVGhhdCYjMzk7cyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSByZWxldmFudCBpbXBvcnQgbG9naWMgbWlnaHQgYmUgY2xvc2VseSB0aWVkIHRvIGEgc3BlY2lmaWMgaW50ZXJuYWwgbWVjaGFuaXNtLgoKR2l2ZW4gdGhhdCBjb250ZXh0LCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBleGFtaW5lIGBpb19yd19pbXBvcnRfcmVnX3ZlY2AsIGFuZCBJJiMzOTtsbCBmaW5kIHRoYXQgaW4gYGlvX3VyaW5nL3J3LmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgemVyby1jb3B5IGltcG9ydCBwcm9jZXNzLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgYGlvX3J3X2ltcG9ydF9yZWdfdmVjYCBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIHJlZ2lzdHJhdGlvbiBvZiB2ZWN0b3JzIG9mIG1lbW9yeSByZWdpb25zIHdoZW4gdXNpbmcgemVyby1jb3B5IHRyYW5zZmVycywgYmVjYXVzZSwgaW50dWl0aXZlbHksIGl0JiMzOTtzIGFib3V0ICpyZWdpc3RlcmluZyogb3IgKmltcG9ydGluZyogcmVhZC93cml0ZSBkYXRhIHJlZ2lvbnMuIFVuZGVyc3RhbmRpbmcgaG93IGBpb19yd19pbXBvcnRfcmVnX3ZlY2AgY2FsbHMsIG9yIGlzIGNhbGxlZCBieSwgYGlvX3NlbmRfemNfaW1wb3J0YCB3aWxsIGJlIGNyaXRpY2FsIGluIGdyYXNwaW5nIGhvdyB0aGlzIGRhdGEgaW1wb3J0IG1lY2hhbmlzbSBpcyBhcmNoaXRlY3RlZC4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgY29udHJvbCBmbG93IHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19yd19pbXBvcnRfcmVnX3ZlYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nL3J3LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW9fdXJpbmcvcncuYz0zOTQ9aW50IGlvX3ByZXBfd3JpdGVfZml4ZWQoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSlcbi0tXG5pb191cmluZy9ydy5jLTM5OC1cbmlvX3VyaW5nL3J3LmM6Mzk5OnN0YXRpYyBpbnQgaW9fcndfaW1wb3J0X3JlZ192ZWMoc3RydWN0IGlvX2tpb2NiICpyZXEsXG5pb191cmluZy9ydy5jLTQwMC1cdFx0XHRcdHN0cnVjdCBpb19hc3luY19ydyAqaW8sXG4tLVxuaW9fdXJpbmcvcncuYz05MTc9c3RhdGljIGludCBfX2lvX3JlYWQoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb19icl9zZWwgKnNlbCxcbi0tXG5pb191cmluZy9ydy5jLTkyNy1cdGlmIChyZXEtXHUwMDNlZmxhZ3MgXHUwMDI2IFJFUV9GX0lNUE9SVF9CVUZGRVIpIHtcbmlvX3VyaW5nL3J3LmM6OTI4Olx0XHRyZXQgPSBpb19yd19pbXBvcnRfcmVnX3ZlYyhyZXEsIGlvLCBJVEVSX0RFU1QsIGlzc3VlX2ZsYWdzKTtcbmlvX3VyaW5nL3J3LmMtOTI5LVx0XHRpZiAodW5saWtlbHkocmV0KSlcbi0tXG5pb191cmluZy9ydy5jPTExMzQ9aW50IGlvX3dyaXRlKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXG4tLVxuaW9fdXJpbmcvcncuYy0xMTQzLVx0aWYgKHJlcS1cdTAwM2VmbGFncyBcdTAwMjYgUkVRX0ZfSU1QT1JUX0JVRkZFUikge1xuaW9fdXJpbmcvcncuYzoxMTQ0Olx0XHRyZXQgPSBpb19yd19pbXBvcnRfcmVnX3ZlYyhyZXEsIGlvLCBJVEVSX1NPVVJDRSwgaXNzdWVfZmxhZ3MpO1xuaW9fdXJpbmcvcncuYy0xMTQ1LVx0XHRpZiAodW5saWtlbHkocmV0KSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjE6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzIxMgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLgoKKipBbmFseXppbmcgdGhlIFN5bWJvbCBgaW9fcndfaW1wb3J0X3JlZ192ZWNgKioKClJpZ2h0LCBgaW9fcndfaW1wb3J0X3JlZ192ZWNgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhhdCYjMzk7cyBrZXkuIElmIEkmIzM5O20gdHJ5aW5nIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IHN5bWJvbCwgSSBzaG91bGQgdXNlIGBpb19pbXBvcnRfcmVnX3ZlY2Agc2luY2UgaXQgaXMgdGhlIGZvY3VzLiBCdXQgd2FpdCwgYW0gSSBzdXJlPyBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBgaW9faW1wb3J0X3JlZ192ZWNgIGlzbiYjMzk7dCBzdGF0aWMgYXMgd2VsbC4gTm9wZSwgaXQgaXNuJiMzOTt0LiBHb29kLiBMZXQmIzM5O3MgbW92ZSBvbiBhbmQgY29uc3VsdCBgaW9fdXJpbmdfY21kX2ltcG9ydF9maXhlZF92ZWNgIHdpdGhpbiBgaW9fdXJpbmcvdXJpbmdfY21kLmNgLCB0aGF0IHNob3VsZCBjbGVhciBpdCB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjE6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fdXJpbmdfY21kX2ltcG9ydF9maXhlZF92ZWMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpb191cmluZy91cmluZ19jbWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy91cmluZ19jbWQuYz0zMDE9RVhQT1JUX1NZTUJPTF9HUEwoaW9fdXJpbmdfY21kX2ltcG9ydF9maXhlZCk7XG5pb191cmluZy91cmluZ19jbWQuYy0zMDItXG5pb191cmluZy91cmluZ19jbWQuYzozMDM6aW50IGlvX3VyaW5nX2NtZF9pbXBvcnRfZml4ZWRfdmVjKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCxcbmlvX3VyaW5nL3VyaW5nX2NtZC5jLTMwNC1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IGlvdmVjIF9fdXNlciAqdXZlYyxcbi0tXG5pb191cmluZy91cmluZ19jbWQuYy0zMjItfVxuaW9fdXJpbmcvdXJpbmdfY21kLmM6MzIzOkVYUE9SVF9TWU1CT0xfR1BMKGlvX3VyaW5nX2NtZF9pbXBvcnRfZml4ZWRfdmVjKTtcbmlvX3VyaW5nL3VyaW5nX2NtZC5jLTMyNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjE6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY4MgoJCQkJCQkJb3V0cHV0OiAxMTAKCQkJCQkJCXRob3VnaHRzOiAxNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgaW9fdXJpbmcgUGF0Y2gqKgoKT2theSwgc28gYGlvX3VyaW5nX2NtZF9pbXBvcnRfZml4ZWRfdmVjYCBpcyBub3cgZXhwb3J0ZWQuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgbXkgYXR0ZW50aW9uIOKAkyBpdCBtZWFucyB3ZSBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCBib3RoIGBpb19pbXBvcnRfcmVnX3ZlY2AgYW5kIHRoaXMgbmV3IGBpb191cmluZ19jbWRfaW1wb3J0X2ZpeGVkX3ZlY2AuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYWRkcmVzcyBhbiBpbnRlZ2VyIG92ZXJmbG93IHZ1bG5lcmFiaWxpdHkgd2l0aGluIGBpb19pbXBvcnRfcmVnX3ZlY2AuIFNwZWNpZmljYWxseSwgaXQgY29uY2VybnMgdGhlIGNhbGN1bGF0aW9uIG9mIGBucl9zZWdzYCBmcm9tIGBidmVjX2J5dGVzYC4gVGhpcyBpcyBhICpmdW5jdGlvbmFsIGNoYW5nZSogd2l0aGluIHRoZSBgaW9fdXJpbmdgIHN1YnN5c3RlbSwgd2hpY2ggaXMgc2lnbmlmaWNhbnQuCgpNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIGFic29sdXRlbHkgd29ydGggZnV6emluZywgYW5kIEkgd2lsbCBhZGQgdGhvc2UgZm9jdXMgc3ltYm9scyAoYGlvX2ltcG9ydF9yZWdfdmVjYCwgYGlvX3VyaW5nX2NtZF9pbXBvcnRfZml4ZWRfdmVjYCkgdG8gdGhlIGZ1enppbmcgY2FtcGFpZ24uIEFzIGZvciBidWlsZCBjb25maWdzLCBpdCBzZWVtcyB0aGF0IGBJT19VUklOR2AgaXMgdGhlIHByaW1hcnkgb25lLCBhbmQgZ2l2ZW4gYGlvX3VyaW5nYCYjMzk7cyBjZW50cmFsaXR5LCBJIGRvbiYjMzk7dCBhbnRpY2lwYXRlIGFueSBvdGhlciBkZXBlbmRlbmNpZXMuIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0byBiZSBzdXJlLCBidXQgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBgSU9fVVJJTkdgIGlzIHN1ZmZpY2llbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJT19VUklORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX2ltcG9ydF9yZWdfdmVjJiMzNDssCiAgICAmIzM0O2lvX3VyaW5nX2NtZF9pbXBvcnRfZml4ZWRfdmVjJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gYGlvX2ltcG9ydF9yZWdfdmVjYCB3aGVuIGNhbGN1bGF0aW5nIGBucl9zZWdzYCBmcm9tIGBidmVjX2J5dGVzYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBpb191cmluZyBzdWJzeXN0ZW0sIHJlYWNoYWJsZSB2aWEgaW9fdXJpbmcgc3lzdGVtIGNhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJT19VUklORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvX2ltcG9ydF9yZWdfdmVjJiMzNDssCiAgICAmIzM0O2lvX3VyaW5nX2NtZF9pbXBvcnRfZml4ZWRfdmVjJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gYGlvX2ltcG9ydF9yZWdfdmVjYCB3aGVuIGNhbGN1bGF0aW5nIGBucl9zZWdzYCBmcm9tIGBidmVjX2J5dGVzYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBpb191cmluZyBzdWJzeXN0ZW0sIHJlYWNoYWJsZSB2aWEgaW9fdXJpbmcgc3lzdGVtIGNhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMToxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gdGhlIGNhbGN1bGF0aW9uIG9mIGBucl9zZWdzYCBpbiBgaW9faW1wb3J0X3JlZ192ZWNgLiBJZiBgbnJfc2VncyAqIHNpemVvZihzdHJ1Y3QgYmlvX3ZlYylgIG92ZXJmbG93cywgYG5yX3NlZ3NgIGJlY29tZXMgc21hbGxlciB0aGFuIHJlcXVpcmVkLiBUaGlzIGxlYWRzIHRvIGFuIHVuZGVyLWFsbG9jYXRpb24gb3IgaW5zdWZmaWNpZW50IHJlYWxsb2NhdGlvbiBvZiBgdmVjLVx1MDAzZWJ2ZWNgIGluIGBpb192ZWNfcmVhbGxvY2AuIFN1YnNlcXVlbnRseSwgYGlvX3ZlY19maWxsX2J2ZWNgIG9yIGBpb192ZWNfZmlsbF9rZXJuX2J2ZWNgIHdpbGwgd3JpdGUgb3V0IG9mIGJvdW5kcyBpbnRvIHRoZSBgdmVjLVx1MDAzZWJ2ZWNgIGFycmF5LiBUaGlzIGlzIGEgY2xhc3NpYyBoZWFwIG91dC1vZi1ib3VuZHMgd3JpdGUgKGJ1ZmZlciBvdmVyZmxvdyksIHdoaWNoIGlzIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgaW5mby1sZWFrLCBvciB1c2Ugb2YgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW52b2x2ZWQgaW4gdGhpcyBidWcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDMyOGU3NzViNjJkOGQ0OGFhODI1MmZhZDI4ODdhOTM1ZTc3YjcxM2EKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxMiAyMToxMjoyMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3JzcmMuYyBiL2lvX3VyaW5nL3JzcmMuYwppbmRleCA4ZDBmMmVlMjRlMGMyLi45OGRjY2VmZDgwMWI5IDEwMDY0NAotLS0gYS9pb191cmluZy9yc3JjLmMKJiM0MzsmIzQzOyYjNDM7IGIvaW9fdXJpbmcvcnNyYy5jCkBAIC0xNjUzLDggJiM0MzsxNjUzLDEyIEBAIGludCBpb19pbXBvcnRfcmVnX3ZlYyhpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLAogCWlmIChzaXplb2Yoc3RydWN0IGJpb192ZWMpICZndDsgc2l6ZW9mKHN0cnVjdCBpb3ZlYykpIHsKIAkJc2l6ZV90IGJ2ZWNfYnl0ZXM7CiAKLQkJYnZlY19ieXRlcyA9IG5yX3NlZ3MgKiBzaXplb2Yoc3RydWN0IGJpb192ZWMpOwotCQlucl9zZWdzID0gKGJ2ZWNfYnl0ZXMgJiM0Mzsgc2l6ZW9mKCppb3YpIC0gMSkgLyBzaXplb2YoKmlvdik7CiYjNDM7CQlpZiAoY2hlY2tfbXVsX292ZXJmbG93KChzaXplX3QpbnJfc2Vncywgc2l6ZW9mKHN0cnVjdCBiaW9fdmVjKSwKJiM0MzsJCQkJICAgICAgICZhbXA7YnZlY19ieXRlcykgfHwKJiM0MzsJCSAgICBjaGVja19hZGRfb3ZlcmZsb3coYnZlY19ieXRlcywgc2l6ZW9mKCppb3YpIC0gMSwKJiM0MzsJCQkJICAgICAgICZhbXA7YnZlY19ieXRlcykpCiYjNDM7CQkJcmV0dXJuIC1FT1ZFUkZMT1c7CiYjNDM7CQlucl9zZWdzID0gYnZlY19ieXRlcyAvIHNpemVvZigqaW92KTsKIAkJbnJfc2VncyAmIzQzOz0gbnJfaW92czsKIAl9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0MTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgaW9fdXJpbmcgUGF0Y2ggZm9yIEludGVnZXIgT3ZlcmZsb3cqKgoKT2theSwgc28gdGhlcmUmIzM5O3MgYSBwYXRjaCBpbiBgaW9fdXJpbmcvcnNyYy5jYCB0aGF0JiMzOTtzIHR3ZWFraW5nIGBpb19pbXBvcnRfcmVnX3ZlY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0FoLCBpbnRlZ2VyIG92ZXJmbG93LCBjbGFzc2ljLiYjMzQ7IExvb2tpbmcgYXQgdGhlIGNvZGUgZGlmZiwgaXQmIzM5O3MgcHJldHR5IGNsZWFyOiB0aGV5JiMzOTtyZSByZXBsYWNpbmcgYSBkaXJlY3QgbXVsdGlwbGljYXRpb24gYW5kIGRpdmlzaW9uIHdpdGggYGNoZWNrX211bF9vdmVyZmxvd2AgYW5kIGBjaGVja19hZGRfb3ZlcmZsb3dgLiBTbWFydC4gR29vZCBkZWZlbnNlLgoKU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBjYWxjdWxhdGluZyBgbnJfc2Vnc2AgYW5kIHRoZSBvcmlnaW5hbCBjYWxjdWxhdGlvbiAqY291bGQqIGxlYWQgdG8gaW50ZWdlciBvdmVyZmxvd3MuIFRoYXQgbWVhbnMgcG90ZW50aWFsIHVuZGVyLWFsbG9jYXRpb24sIG9yIGFuIGluY29ycmVjdCBib3VuZHMgY2hlY2suIFdoaWNoLCBvZiBjb3Vyc2UsIHVzdWFsbHkgbWVhbnMgS0FTQU4gd2lsbCBjYXRjaCBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4KCldhaXQgYSBzZWNvbmTigKYgY291bGQgdGhpcyBvdmVyZmxvdyBsZWFkIHRvIG1vcmUgdGhhbiBqdXN0IE9PQiBpc3N1ZXM/IElmIGBucl9zZWdzYCBvdmVyZmxvd3MgYW5kICp3cmFwcyBhcm91bmQqIHRvIGEgc21hbGxlciB2YWx1ZSwgdGhlbiBhIG1lbW9yeSBhbGxvY2F0aW9uIG1pZ2h0IGJlICpsZXNzKiB0aGFuIHdoYXQmIzM5O3MgbmVlZGVkLiBMZWFkaW5nIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBvciB3cml0ZS4gV2hhdCBpZiB0aGlzIGBucl9zZWdzYCBpcyB1c2VkIHRvIGNvcHkgdXNlciBkYXRhPyBDb3VsZCBpdCBsZWFkIHRvIGEgbGVhayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeT8gVGhlIGBucl9zZWdzYCBpcyB0aGUgbnVtYmVyIG9mIHNlZ21lbnRzLCB3aGljaCBpcyB1c2VkIGZvciBjYWxjdWxhdGlvbnMuIEkgc2hvdWxkIGxvb2sgaW50byB0aGlzLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBleGFjdGx5IGhvdyBgaW9faW1wb3J0X3JlZ192ZWNgIHV0aWxpemVzIHRoaXMgY2FsY3VsYXRlZCB2YWx1ZS4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZeKApgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb19pbXBvcnRfcmVnX3ZlYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nL3JzcmMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9yc3JjLmM9MTU5NT1zdGF0aWMgaW50IGlvX2tlcm5fYnZlY19zaXplKHN0cnVjdCBpb3ZlYyAqaW92LCB1bnNpZ25lZCBucl9pb3ZzLFxuLS1cbmlvX3VyaW5nL3JzcmMuYy0xNjE5LVxuaW9fdXJpbmcvcnNyYy5jOjE2MjA6aW50IGlvX2ltcG9ydF9yZWdfdmVjKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG5pb191cmluZy9yc3JjLmMtMTYyMS1cdFx0XHRzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvdV92ZWMgKnZlYyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjE6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk4NQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IERpdmluZyBpbnRvIGBpb19pbXBvcnRfcmVnX3ZlY2AqKgoKQWxyaWdodCwgdGhlIG9iamVjdGl2ZSBpcyB0byBnZXQgYSBoYW5kbGUgb24gYGlvX2ltcG9ydF9yZWdfdmVjYC4gVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGludm9sdmVzIGEgbWVudGFsIGNoZWNrbGlzdC4gKldoYXQmIzM5O3MgdGhlIGNvbnRleHQ/KiBJcyB0aGlzIGEgc3BlY2lmaWMgbW9kdWxlLCBhIGxpYnJhcnkgZnVuY3Rpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBLbm93aW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpbGwgZnJhbWUgbXkgdW5kZXJzdGFuZGluZy4gKldoYXQmIzM5O3MgdGhlIGNvcmUgZnVuY3Rpb24/KiBGcm9tIHRoZSBuYW1lLCBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIGFuIGlucHV0L291dHB1dCBvcGVyYXRpb24sIHBvdGVudGlhbGx5IHJlbGF0ZWQgdG8gcmVnaXN0ZXJzIGFuZCBsaWtlbHkgd29ya2luZyB3aXRoIHZlY3RvcnMgb3IgYXJyYXlzIG9mIGRhdGEuIE15IG1pbmQgYXV0b21hdGljYWxseSBzdGFydHMgYnVpbGRpbmcgYSBtZW50YWwgbW9kZWwgb2YgaG93IGRhdGEgbWlnaHQgYmUgaW1wb3J0ZWQgLSBiaXR3aXNlIG9wZXJhdGlvbnMsIG1lbW9yeSBtYXBwaW5nLCBkYXRhIHN0cnVjdHVyZXMsIG9yIGludGVyZmFjZSBjb25zaWRlcmF0aW9ucy4gSSYjMzk7bSByZWFkeSB0byBkaWcgaW4gYW5kIGJyZWFrIGl0IGRvd24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvcnNyYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTYyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTYyMDpcdGludCBpb19pbXBvcnRfcmVnX3ZlYyhpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuMTYyMTpcdFx0XHRcdHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW91X3ZlYyAqdmVjLFxuMTYyMjpcdFx0XHRcdHVuc2lnbmVkIG5yX2lvdnMsIHVuc2lnbmVkIGlzc3VlX2ZsYWdzKVxuMTYyMzpcdHtcbjE2MjQ6XHRcdHN0cnVjdCBpb19yc3JjX25vZGUgKm5vZGU7XG4xNjI1Olx0XHRzdHJ1Y3QgaW9fbWFwcGVkX3VidWYgKmltdTtcbjE2MjY6XHRcdHVuc2lnbmVkIGlvdmVjX29mZjtcbjE2Mjc6XHRcdHN0cnVjdCBpb3ZlYyAqaW92O1xuMTYyODpcdFx0dW5zaWduZWQgbnJfc2VncztcbjE2Mjk6XHRcbjE2MzA6XHRcdG5vZGUgPSBpb19maW5kX2J1Zl9ub2RlKHJlcSwgaXNzdWVfZmxhZ3MpO1xuMTYzMTpcdFx0aWYgKCFub2RlKVxuMTYzMjpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjE2MzM6XHRcdGltdSA9IG5vZGUtXHUwMDNlYnVmO1xuMTYzNDpcdFx0aWYgKCEoaW11LVx1MDAzZWRpciBcdTAwMjYgKDEgXHUwMDNjXHUwMDNjIGRkaXIpKSlcbjE2MzU6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4xNjM2Olx0XG4xNjM3Olx0XHRpb3ZlY19vZmYgPSB2ZWMtXHUwMDNlbnIgLSBucl9pb3ZzO1xuMTYzODpcdFx0aW92ID0gdmVjLVx1MDAzZWlvdmVjICYjNDM7IGlvdmVjX29mZjtcbjE2Mzk6XHRcbjE2NDA6XHRcdGlmIChpbXUtXHUwMDNlZmxhZ3MgXHUwMDI2IElPX1JFR0JVRl9GX0tCVUYpIHtcbjE2NDE6XHRcdFx0aW50IHJldCA9IGlvX2tlcm5fYnZlY19zaXplKGlvdiwgbnJfaW92cywgaW11LCBcdTAwMjZucl9zZWdzKTtcbjE2NDI6XHRcbjE2NDM6XHRcdFx0aWYgKHVubGlrZWx5KHJldCkpXG4xNjQ0Olx0XHRcdFx0cmV0dXJuIHJldDtcbjE2NDU6XHRcdH0gZWxzZSB7XG4xNjQ2Olx0XHRcdGludCByZXQgPSBpb19lc3RpbWF0ZV9idmVjX3NpemUoaW92LCBucl9pb3ZzLCBpbXUpO1xuMTY0NzpcdFxuMTY0ODpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTY0OTpcdFx0XHRcdHJldHVybiByZXQ7XG4xNjUwOlx0XHRcdG5yX3NlZ3MgPSByZXQ7XG4xNjUxOlx0XHR9XG4xNjUyOlx0XG4xNjUzOlx0XHRpZiAoc2l6ZW9mKHN0cnVjdCBiaW9fdmVjKSBcdTAwM2Ugc2l6ZW9mKHN0cnVjdCBpb3ZlYykpIHtcbjE2NTQ6XHRcdFx0c2l6ZV90IGJ2ZWNfYnl0ZXM7XG4xNjU1Olx0XG4xNjU2Olx0XHRcdGlmIChjaGVja19tdWxfb3ZlcmZsb3coKHNpemVfdClucl9zZWdzLCBzaXplb2Yoc3RydWN0IGJpb192ZWMpLFxuMTY1NzpcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmJ2ZWNfYnl0ZXMpIHx8XG4xNjU4Olx0XHRcdCAgICBjaGVja19hZGRfb3ZlcmZsb3coYnZlY19ieXRlcywgc2l6ZW9mKCppb3YpIC0gMSxcbjE2NTk6XHRcdFx0XHRcdCAgICAgICBcdTAwMjZidmVjX2J5dGVzKSlcbjE2NjA6XHRcdFx0XHRyZXR1cm4gLUVPVkVSRkxPVztcbjE2NjE6XHRcdFx0bnJfc2VncyA9IGJ2ZWNfYnl0ZXMgLyBzaXplb2YoKmlvdik7XG4xNjYyOlx0XHRcdG5yX3NlZ3MgJiM0Mzs9IG5yX2lvdnM7XG4xNjYzOlx0XHR9XG4xNjY0Olx0XG4xNjY1Olx0XHRpZiAobnJfc2VncyBcdTAwM2UgdmVjLVx1MDAzZW5yKSB7XG4xNjY2Olx0XHRcdHN0cnVjdCBpb3VfdmVjIHRtcF92ZWMgPSB7fTtcbjE2Njc6XHRcdFx0aW50IHJldDtcbjE2Njg6XHRcbjE2Njk6XHRcdFx0cmV0ID0gaW9fdmVjX3JlYWxsb2MoXHUwMDI2dG1wX3ZlYywgbnJfc2Vncyk7XG4xNjcwOlx0XHRcdGlmIChyZXQpXG4xNjcxOlx0XHRcdFx0cmV0dXJuIHJldDtcbjE2NzI6XHRcbjE2NzM6XHRcdFx0aW92ZWNfb2ZmID0gdG1wX3ZlYy5uciAtIG5yX2lvdnM7XG4xNjc0Olx0XHRcdG1lbWNweSh0bXBfdmVjLmlvdmVjICYjNDM7IGlvdmVjX29mZiwgaW92LCBzaXplb2YoKmlvdikgKiBucl9pb3ZzKTtcbjE2NzU6XHRcdFx0aW9fdmVjX2ZyZWUodmVjKTtcbjE2NzY6XHRcbjE2Nzc6XHRcdFx0KnZlYyA9IHRtcF92ZWM7XG4xNjc4Olx0XHRcdGlvdiA9IHZlYy1cdTAwM2Vpb3ZlYyAmIzQzOyBpb3ZlY19vZmY7XG4xNjc5Olx0XHRcdHJlcS1cdTAwM2VmbGFncyB8PSBSRVFfRl9ORUVEX0NMRUFOVVA7XG4xNjgwOlx0XHR9XG4xNjgxOlx0XG4xNjgyOlx0XHRpZiAoaW11LVx1MDAzZWZsYWdzIFx1MDAyNiBJT19SRUdCVUZfRl9LQlVGKVxuMTY4MzpcdFx0XHRyZXR1cm4gaW9fdmVjX2ZpbGxfa2Vybl9idmVjKGRkaXIsIGl0ZXIsIGltdSwgaW92LCBucl9pb3ZzLCB2ZWMpO1xuMTY4NDpcdFxuMTY4NTpcdFx0cmV0dXJuIGlvX3ZlY19maWxsX2J2ZWMoZGRpciwgaXRlciwgaW11LCBpb3YsIG5yX2lvdnMsIHZlYyk7XG4xNjg2Olx0fVxuMTY4NzpcdFxuMTY4ODpcdGludCBpb19wcmVwX3JlZ19pb3ZlYyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvdV92ZWMgKml2LFxuMTY4OTpcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgaW92ZWMgX191c2VyICp1dmVjLCBzaXplX3QgdXZlY19zZWdzKVxuMTY5MDpcdHtcbjE2OTE6XHRcdHN0cnVjdCBpb3ZlYyAqaW92O1xuMTY5MjpcdFx0aW50IGlvdmVjX29mZiwgcmV0O1xuMTY5MzpcdFx0dm9pZCAqcmVzO1xuMTY5NDpcdFxuMTY5NTpcdFx0aWYgKHV2ZWNfc2VncyBcdTAwM2UgaXYtXHUwMDNlbnIpIHtcbjE2OTY6XHRcdFx0cmV0ID0gaW9fdmVjX3JlYWxsb2MoaXYsIHV2ZWNfc2Vncyk7XG4xNjk3Olx0XHRcdGlmIChyZXQpXG4xNjk4Olx0XHRcdFx0cmV0dXJuIHJldDtcbjE2OTk6XHRcdFx0cmVxLVx1MDAzZWZsYWdzIHw9IFJFUV9GX05FRURfQ0xFQU5VUDtcbjE3MDA6XHRcdH1cbjE3MDE6XHRcbjE3MDI6XHRcdC8qIHBhZCBpb3ZlYyB0byB0aGUgcmlnaHQgKi9cbjE3MDM6XHRcdGlvdmVjX29mZiA9IGl2LVx1MDAzZW5yIC0gdXZlY19zZWdzO1xuMTcwNDpcdFx0aW92ID0gaXYtXHUwMDNlaW92ZWMgJiM0MzsgaW92ZWNfb2ZmO1xuMTcwNTpcdFx0cmVzID0gaW92ZWNfZnJvbV91c2VyKHV2ZWMsIHV2ZWNfc2VncywgdXZlY19zZWdzLCBpb3YsXG4xNzA2Olx0XHRcdFx0ICAgICAgaW9faXNfY29tcGF0KHJlcS1cdTAwM2VjdHgpKTtcbjE3MDc6XHRcdGlmIChJU19FUlIocmVzKSlcbjE3MDg6XHRcdFx0cmV0dXJuIFBUUl9FUlIocmVzKTtcbjE3MDk6XHRcbjE3MTA6XHRcdHJlcS1cdTAwM2VmbGFncyB8PSBSRVFfRl9JTVBPUlRfQlVGRkVSO1xuMTcxMTpcdFx0cmV0dXJuIDA7XG4xNzEyOlx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzA0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludGVnZXIgT3ZlcmZsb3cgQnVnIEFuYWx5c2lzKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBnb3QuIFRoZSBjcnV4IG9mIHRoaXMgaXNzdWUgaXMgYW4gaW50ZWdlciBvdmVyZmxvdyBpbiB0aGUgYG5yX3NlZ3NgIGNhbGN1bGF0aW9uLiBTcGVjaWZpY2FsbHksIGluIHRoYXQgY29kZSBzbmlwcGV0LCBgbnJfc2Vnc2AgaXMgYmVpbmcgbXVsdGlwbGllZCBieSB0aGUgc2l6ZSBvZiBgc3RydWN0IGJpb192ZWNgLiBJZiBgbnJfc2Vnc2AgaGFwcGVucyB0byBiZSBsYXJnZSBlbm91Z2gsIHRoaXMgbXVsdGlwbGljYXRpb24gd2lsbCBvdmVyZmxvdywgbGVhZGluZyB0byBgbnJfc2Vnc2AgYmVjb21pbmcgc21hbGxlciB0aGFuIGl0cyBjb3JyZWN0IHZhbHVlLgoKVGhlIHN1YnNlcXVlbnQgY29kZSBibG9jayBpcyB3aGVyZSB0aGUgcHJvYmxlbSBtYW5pZmVzdHMuIElmIHRoYXQgb3ZlcmZsb3cgb2NjdXJzLCB0aGUgY2hlY2sgYGlmIChucl9zZWdzICZndDsgdmVjLSZndDtucilgIGJlY29tZXMgZmF1bHR5LiBUaGUgYGlvX3ZlY19yZWFsbG9jYCBmdW5jdGlvbiBtaWdodCBub3QgYmUgY2FsbGVkIHdoZW4gaXQgc2hvdWxkIGJlLCBvciBpZiBpdCBpcyBjYWxsZWQsIHRoZSBhbGxvY2F0aW9uIG1pZ2h0IGJlIGluc3VmZmljaWVudCB0byBjb3ZlciB0aGUgYWN0dWFsIGBucl9zZWdzYCB0aGF0IHdlIG5lZWQsIG9yIHRoZSBgbnJfc2Vnc2AgYXMgY2FsY3VsYXRlZCAqcG9zdCotb3ZlcmZsb3cgbWF5IGJlIHVzZWQgZm9yIGFsbG9jYXRpb24uIFRoaXMgc2V0cyB0aGUgc3RhZ2UgZm9yIGEgY2xhc3NpYyBidWZmZXIgb3ZlcmZsb3cuIEJlY2F1c2Ugb2YgdGhpcyBpbml0aWFsIG92ZXJmbG93LCB0aGVyZSBpc24mIzM5O3QgZW5vdWdoIG1lbW9yeSBhbGxvY2F0ZWQuIExhdGVyLCBgaW9fdmVjX2ZpbGxfa2Vybl9idmVjYCBvciBgaW9fdmVjX2ZpbGxfYnZlY2Agd2lsbCB0aGVuIHdyaXRlIGRhdGEgb3V0IG9mIGJvdW5kcyBpbnRvIGVpdGhlciBgdmVjLSZndDtpb3ZlY2Agb3IgYHZlYy0mZ3Q7YnZlY2AsIHNpbmNlIHRoZSB3cml0ZSBzaXplLCBkdWUgdG8gdGhlIGZhdWx0eSBgbnJfc2Vnc2AsIHdpbGwgYmUgbGFyZ2VyIHRoYW4gdGhlIGJ1ZmZlci4KClRoZSBnb29kIG5ld3MgaXMgdGhhdCB0aGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIG91dC1vZi1ib3VuZHMgd3JpdGUuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9ybWF0aW9uIGxlYWthZ2UgdG8gd29ycnkgYWJvdXQgaGVyZSwgdGhhbmtmdWxseS4gS0FTQU4gc2hvdWxkIGJlIGFuIGlkZWFsIHRvb2wgdG8gY2F0Y2ggdGhpcyBhcyBpdCYjMzk7cyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgZm9yIGRldGVjdGluZyB0aGlzIGtpbmQgb2YgbWVtb3J5IGVycm9yLiBXZSBkb24mIzM5O3QgaGF2ZSB0byB3b3JyeSBhYm91dCBkYXRhIHRoYXQmIzM5O3MgYWxyZWFkeSBpbiB0aGUgbWVtb3J5LCB3ZSBhcmUganVzdCBsb29raW5nIGZvciBzb21ldGhpbmcgKm5ldyogYmVpbmcgcGxhY2VkIGluIHRoZSB3cm9uZyBzcG90LgoKTm93LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgYGlvX3ZlY19maWxsX2J2ZWNgIGFuZCBgaW9fdmVjX2ZpbGxfa2Vybl9idmVjYCB0byBiZSBjZXJ0YWluIHdlIGFyZSBjb3JyZWN0IGluIG91ciBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjE6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9fdmVjX2ZpbGxfYnZlYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2lvX3VyaW5nL3JzcmMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpb191cmluZy9yc3JjLmM9MTQ2MD1pbnQgaW9fdmVjX3JlYWxsb2Moc3RydWN0IGlvdV92ZWMgKml2LCB1bnNpZ25lZCBucl9lbnRyaWVzKVxuLS1cbmlvX3VyaW5nL3JzcmMuYy0xNDc0LVxuaW9fdXJpbmcvcnNyYy5jOjE0NzU6c3RhdGljIGludCBpb192ZWNfZmlsbF9idmVjKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG5pb191cmluZy9yc3JjLmMtMTQ3Ni1cdFx0XHRcdHN0cnVjdCBpb19tYXBwZWRfdWJ1ZiAqaW11LFxuLS1cbmlvX3VyaW5nL3JzcmMuYz0xNjIwPWludCBpb19pbXBvcnRfcmVnX3ZlYyhpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbmlvX3VyaW5nL3JzcmMuYy0xNjg0LVxuaW9fdXJpbmcvcnNyYy5jOjE2ODU6XHRyZXR1cm4gaW9fdmVjX2ZpbGxfYnZlYyhkZGlyLCBpdGVyLCBpbXUsIGlvdiwgbnJfaW92cywgdmVjKTtcbmlvX3VyaW5nL3JzcmMuYy0xNjg2LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjE6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg1NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGlvX3ZlY19maWxsX2J2ZWNgIGZ1bmN0aW9uLgoKKipBbmFseXppbmcgYGlvX3ZlY19maWxsX2J2ZWNgKioKCkFscmlnaHQsIHNvIEkmIzM5O20gcHJlc2VudGVkIHdpdGggYGlvX3ZlY19maWxsX2J2ZWNgLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBiZWdpbnMgYnkgZXhhbWluaW5nIHRoZSBuYW1lLCB3aGljaCBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBpcyBpbnZvbHZlZCBpbiBmaWxsaW5nIGEgYmxvY2sgdmVjdG9yIChgYnZlY2ApIHdpdGggZGF0YSBmcm9tIGFuIGBpb192ZWNgLiBUaGlzIGlzIGEgY2xhc3NpYyBwYXR0ZXJuIGluIEkvTyBvcGVyYXRpb25zLCBsaWtlbHkgYWltZWQgYXQgZWZmaWNpZW50IGRhdGEgdHJhbnNmZXIgYmV0d2VlbiBrZXJuZWwgc3BhY2UgYnVmZmVycyBhbmQgdXNlci1zcGFjZSBtZW1vcnkgb3IgZXZlbiBkaXNrIGJsb2Nrcy4KCkkgaW1tZWRpYXRlbHkgc3RhcnQgdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gSXMgdGhpcyBvcHRpbWl6ZWQgZm9yIERNQT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIG1lbW9yeSBjb3BpZXMsIGFuZCBjYW4gdGhleSBiZSByZWR1Y2VkPyBUaGUgYGlvX3ZlY2Agc3RydWN0dXJlIGltcGxpZXMgd2XigJlyZSBkZWFsaW5nIHdpdGggc2NhdHRlci9nYXRoZXIgSS9PLCBtZWFuaW5nIGRhdGEgbWF5IG5vdCBiZSBjb250aWd1b3VzLiBTbywgSSBuZWVkIHRvIGxvb2sgZm9yIGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhhdC4gQXJlIHRoZXkgdGFraW5nIGNhcmUgdG8gb3B0aW1pc2UgYWdhaW5zdCBtZW1vcnkgZnJhZ21lbnRhdGlvbj8KCkkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBsb2dpYyB0aGF0IGl0ZXJhdGVzIHRocm91Z2ggdGhlIGBpb192ZWNgLCB3aGljaCBpcyBhIGNvbGxlY3Rpb24gb2YgYGlvdmAgc3RydWN0cy4gVGhlc2UgYGlvdmBzIHR5cGljYWxseSBkZXNjcmliZSBhIG1lbW9yeSByZWdpb24sIGFuIGFkZHJlc3MgYW5kIGl0cyBsZW5ndGguIEZvciBlYWNoIGBpb3ZgLCB0aGVyZSB3aWxsIGJlIHNvbWUgY29weWluZyBsb2dpYyB0aGF0IHB1dHMgZGF0YSBmcm9tIHRoaXMgcmVnaW9uIGludG8gdGhlIGBidmVjYC4gSXQmIzM5O3MgZ29pbmcgdG8gYmUgZXNzZW50aWFsIHRvIGNvbmZpcm0gdGhlIGZ1bmN0aW9uIGhhbmRsZXMgYm91bmRhcnkgY29uZGl0aW9ucywgbGlrZSB3aGVuIHRoZSB0b3RhbCBzaXplIHRvIGNvcHkgaXMgbGVzcyB0aGFuIHRoZSBjYXBhY2l0eSBvZiB0aGUgYGJ2ZWNgLCBvciB3aGVuIGEgc2luZ2xlIGBpb3ZgIGlzIGxhcmdlciB0aGFuIHJlbWFpbmluZyBzcGFjZSB3aXRoaW4gdGhlIGRlc3RpbmF0aW9uLiBXaGF0IGFib3V0IGVycm9yIGhhbmRsaW5nLCB0b28/IEhvdyBhcmUgYW55IHBhcnRpYWwgd3JpdGVzIG9yIGVycm9ycyBmcm9tIHRoZSB1bmRlcmx5aW5nIHN0b3JhZ2UgZGVhbHQgd2l0aD8KCkkmIzM5O20gYWxzbyBjdXJpb3VzIGFib3V0IHRoZSBsb3ctbGV2ZWwgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQuIEkmIzM5O20gaG9waW5nIHRvIHNlZSBhIHNvbGlkIGltcGxlbWVudGF0aW9uIHRoYXQgYXZvaWRzIHVubmVjZXNzYXJ5IG92ZXJoZWFkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2lvX3VyaW5nL3JzcmMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0NzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQ3NTpcdHN0YXRpYyBpbnQgaW9fdmVjX2ZpbGxfYnZlYyhpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuMTQ3NjpcdFx0XHRcdFx0c3RydWN0IGlvX21hcHBlZF91YnVmICppbXUsXG4xNDc3Olx0XHRcdFx0XHRzdHJ1Y3QgaW92ZWMgKmlvdmVjLCB1bnNpZ25lZCBucl9pb3ZzLFxuMTQ3ODpcdFx0XHRcdFx0c3RydWN0IGlvdV92ZWMgKnZlYylcbjE0Nzk6XHR7XG4xNDgwOlx0XHR1bnNpZ25lZCBsb25nIGZvbGlvX3NpemUgPSAxIFx1MDAzY1x1MDAzYyBpbXUtXHUwMDNlZm9saW9fc2hpZnQ7XG4xNDgxOlx0XHR1bnNpZ25lZCBsb25nIGZvbGlvX21hc2sgPSBmb2xpb19zaXplIC0gMTtcbjE0ODI6XHRcdHN0cnVjdCBiaW9fdmVjICpyZXNfYnZlYyA9IHZlYy1cdTAwM2VidmVjO1xuMTQ4MzpcdFx0c2l6ZV90IHRvdGFsX2xlbiA9IDA7XG4xNDg0Olx0XHR1bnNpZ25lZCBidmVjX2lkeCA9IDA7XG4xNDg1Olx0XHR1bnNpZ25lZCBpb3ZfaWR4O1xuMTQ4NjpcdFxuMTQ4NzpcdFx0Zm9yIChpb3ZfaWR4ID0gMDsgaW92X2lkeCBcdTAwM2MgbnJfaW92czsgaW92X2lkeCYjNDM7JiM0MzspIHtcbjE0ODg6XHRcdFx0c2l6ZV90IGlvdl9sZW4gPSBpb3ZlY1tpb3ZfaWR4XS5pb3ZfbGVuO1xuMTQ4OTpcdFx0XHR1NjQgYnVmX2FkZHIgPSAodTY0KSh1aW50cHRyX3QpaW92ZWNbaW92X2lkeF0uaW92X2Jhc2U7XG4xNDkwOlx0XHRcdHN0cnVjdCBiaW9fdmVjICpzcmNfYnZlYztcbjE0OTE6XHRcdFx0c2l6ZV90IG9mZnNldDtcbjE0OTI6XHRcdFx0aW50IHJldDtcbjE0OTM6XHRcbjE0OTQ6XHRcdFx0cmV0ID0gdmFsaWRhdGVfZml4ZWRfcmFuZ2UoYnVmX2FkZHIsIGlvdl9sZW4sIGltdSk7XG4xNDk1Olx0XHRcdGlmICh1bmxpa2VseShyZXQpKVxuMTQ5NjpcdFx0XHRcdHJldHVybiByZXQ7XG4xNDk3Olx0XG4xNDk4Olx0XHRcdGlmICh1bmxpa2VseSghaW92X2xlbikpXG4xNDk5Olx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4xNTAwOlx0XHRcdGlmICh1bmxpa2VseShjaGVja19hZGRfb3ZlcmZsb3codG90YWxfbGVuLCBpb3ZfbGVuLCBcdTAwMjZ0b3RhbF9sZW4pKSlcbjE1MDE6XHRcdFx0XHRyZXR1cm4gLUVPVkVSRkxPVztcbjE1MDI6XHRcbjE1MDM6XHRcdFx0b2Zmc2V0ID0gYnVmX2FkZHIgLSBpbXUtXHUwMDNldWJ1ZjtcbjE1MDQ6XHRcdFx0LypcbjE1MDU6XHRcdFx0ICogT25seSB0aGUgZmlyc3QgYnZlYyBjYW4gaGF2ZSBub24gemVybyBidl9vZmZzZXQsIGFjY291bnQgaXRcbjE1MDY6XHRcdFx0ICogaGVyZSBhbmQgd29yayB3aXRoIGZ1bGwgZm9saW9zIGJlbG93LlxuMTUwNzpcdFx0XHQgKi9cbjE1MDg6XHRcdFx0b2Zmc2V0ICYjNDM7PSBpbXUtXHUwMDNlYnZlY1swXS5idl9vZmZzZXQ7XG4xNTA5Olx0XG4xNTEwOlx0XHRcdHNyY19idmVjID0gaW11LVx1MDAzZWJ2ZWMgJiM0MzsgKG9mZnNldCBcdTAwM2VcdTAwM2UgaW11LVx1MDAzZWZvbGlvX3NoaWZ0KTtcbjE1MTE6XHRcdFx0b2Zmc2V0IFx1MDAyNj0gZm9saW9fbWFzaztcbjE1MTI6XHRcbjE1MTM6XHRcdFx0Zm9yICg7IGlvdl9sZW47IG9mZnNldCA9IDAsIGJ2ZWNfaWR4JiM0MzsmIzQzOywgc3JjX2J2ZWMmIzQzOyYjNDM7KSB7XG4xNTE0Olx0XHRcdFx0c2l6ZV90IHNlZ19zaXplID0gbWluX3Qoc2l6ZV90LCBpb3ZfbGVuLFxuMTUxNTpcdFx0XHRcdFx0XHRcdGZvbGlvX3NpemUgLSBvZmZzZXQpO1xuMTUxNjpcdFxuMTUxNzpcdFx0XHRcdGJ2ZWNfc2V0X3BhZ2UoXHUwMDI2cmVzX2J2ZWNbYnZlY19pZHhdLFxuMTUxODpcdFx0XHRcdFx0ICAgICAgc3JjX2J2ZWMtXHUwMDNlYnZfcGFnZSwgc2VnX3NpemUsIG9mZnNldCk7XG4xNTE5Olx0XHRcdFx0aW92X2xlbiAtPSBzZWdfc2l6ZTtcbjE1MjA6XHRcdFx0fVxuMTUyMTpcdFx0fVxuMTUyMjpcdFx0aWYgKHRvdGFsX2xlbiBcdTAwM2UgTUFYX1JXX0NPVU5UKVxuMTUyMzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE1MjQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjE6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzExNgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIE1lbW9yeSBTYWZldHkgSXNzdWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBpb192ZWNfZmlsbF9idmVjYCBmdW5jdGlvbiBhbmQgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgKmlmKiBgbnJfc2Vnc2AgaXMgc2V0IHVwIGNvcnJlY3RseS4gU3BlY2lmaWNhbGx5LCB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciB3cml0aW5nIGRhdGEgaW50byBgcmVzX2J2ZWNbYnZlY19pZHhdYC4gVGhlIGNyaXRpY2FsIHBvaW50IGhlcmUgaXMgdGhhdCBpZiBgbnJfc2Vnc2AgaXMgdG9vIHNtYWxsLCB0aGVuIGByZXNfYnZlY2AgLSB3aGljaCwgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBpcyBlc3NlbnRpYWxseSBgdmVjLSZndDtidmVjYCAtIHdpbGwgYmUgdW5kZXJzaXplZC4gQ29uc2VxdWVudGx5LCBgYnZlY19pZHhgIGlzIGdvaW5nIHRvIHdhbmRlciBiZXlvbmQgdGhlIGJvdW5kcyBvZiB0aGF0IGFycmF5LCBhbmQgYmFtLCB3ZSBoYXZlIGFuIG91dC1vZi1ib3VuZHMgd3JpdGUuCgpGb3J0dW5hdGVseSwgaXQgbG9va3MgbGlrZSBLQVNBTiBzaG91bGQgaGF2ZSB0aGlzIGNvdmVyZWQuIEl0JiMzOTtsbCBkZXRlY3QgdGhhdCB3cml0ZSwgc28gd2UmIzM5O3JlIGdvb2QgdGhlcmUuIEFuZCBhcyBmYXIgYXMgSSBjYW4gdGVsbCwgdGhlcmUmIzM5O3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBpbiB0aGUgcHJvY2Vzcy4KClRodXMsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcsIEtNU0FOIHNob3VsZG4mIzM5O3QgYmUgbmVjZXNzYXJ5IGhlcmUuCgpCdXQsIHlvdSBrbm93IG1lLCBJIGxpa2UgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBKdXN0IHRvIGJlIGNvbXBsZXRlbHkgdGhvcm91Z2gsIGxldCBtZSBxdWlja2x5IGdsYW5jZSBhdCBgaW9fdmVjX2ZpbGxfa2Vybl9idmVjYCBqdXN0IHRvIGJlIG9uZSBodW5kcmVkIHBlcmNlbnQgc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBHb3R0YSBtYWtlIHN1cmUgd2UmIzM5O3JlIGNvdmVyaW5nIGFsbCBvdXIgYmFzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDIxOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW9fdXJpbmcvcnNyYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTI1Olx0XHRpb3ZfaXRlcl9idmVjKGl0ZXIsIGRkaXIsIHJlc19idmVjLCBidmVjX2lkeCwgdG90YWxfbGVuKTtcbjE1MjY6XHRcdHJldHVybiAwO1xuMTUyNzpcdH1cbjE1Mjg6XHRcbjE1Mjk6XHRzdGF0aWMgaW50IGlvX2VzdGltYXRlX2J2ZWNfc2l6ZShzdHJ1Y3QgaW92ZWMgKmlvdiwgdW5zaWduZWQgbnJfaW92cyxcbjE1MzA6XHRcdFx0XHRcdCBzdHJ1Y3QgaW9fbWFwcGVkX3VidWYgKmltdSlcbjE1MzE6XHR7XG4xNTMyOlx0XHR1bnNpZ25lZCBzaGlmdCA9IGltdS1cdTAwM2Vmb2xpb19zaGlmdDtcbjE1MzM6XHRcdHNpemVfdCBtYXhfc2VncyA9IDA7XG4xNTM0Olx0XHR1bnNpZ25lZCBpO1xuMTUzNTpcdFxuMTUzNjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfaW92czsgaSYjNDM7JiM0MzspIHtcbjE1Mzc6XHRcdFx0bWF4X3NlZ3MgJiM0Mzs9IChpb3ZbaV0uaW92X2xlbiBcdTAwM2VcdTAwM2Ugc2hpZnQpICYjNDM7IDI7XG4xNTM4Olx0XHRcdGlmIChtYXhfc2VncyBcdTAwM2UgSU5UX01BWClcbjE1Mzk6XHRcdFx0XHRyZXR1cm4gLUVPVkVSRkxPVztcbjE1NDA6XHRcdH1cbjE1NDE6XHRcdHJldHVybiBtYXhfc2VncztcbjE1NDI6XHR9XG4xNTQzOlx0XG4xNTQ0Olx0c3RhdGljIGludCBpb192ZWNfZmlsbF9rZXJuX2J2ZWMoaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbjE1NDU6XHRcdFx0XHRcdCBzdHJ1Y3QgaW9fbWFwcGVkX3VidWYgKmltdSxcbjE1NDY6XHRcdFx0XHRcdCBzdHJ1Y3QgaW92ZWMgKmlvdmVjLCB1bnNpZ25lZCBucl9pb3ZzLFxuMTU0NzpcdFx0XHRcdFx0IHN0cnVjdCBpb3VfdmVjICp2ZWMpXG4xNTQ4Olx0e1xuMTU0OTpcdFx0Y29uc3Qgc3RydWN0IGJpb192ZWMgKnNyY19idmVjID0gaW11LVx1MDAzZWJ2ZWM7XG4xNTUwOlx0XHRzdHJ1Y3QgYmlvX3ZlYyAqcmVzX2J2ZWMgPSB2ZWMtXHUwMDNlYnZlYztcbjE1NTE6XHRcdHVuc2lnbmVkIHJlc19pZHggPSAwO1xuMTU1MjpcdFx0c2l6ZV90IHRvdGFsX2xlbiA9IDA7XG4xNTUzOlx0XHR1bnNpZ25lZCBpb3ZfaWR4O1xuMTU1NDpcdFxuMTU1NTpcdFx0Zm9yIChpb3ZfaWR4ID0gMDsgaW92X2lkeCBcdTAwM2MgbnJfaW92czsgaW92X2lkeCYjNDM7JiM0MzspIHtcbjE1NTY6XHRcdFx0c2l6ZV90IG9mZnNldCA9IChzaXplX3QpKHVpbnRwdHJfdClpb3ZlY1tpb3ZfaWR4XS5pb3ZfYmFzZTtcbjE1NTc6XHRcdFx0c2l6ZV90IGlvdl9sZW4gPSBpb3ZlY1tpb3ZfaWR4XS5pb3ZfbGVuO1xuMTU1ODpcdFx0XHRzdHJ1Y3QgYnZlY19pdGVyIGJpID0ge1xuMTU1OTpcdFx0XHRcdC5iaV9zaXplICAgICAgICA9IG9mZnNldCAmIzQzOyBpb3ZfbGVuLFxuMTU2MDpcdFx0XHR9O1xuMTU2MTpcdFx0XHRzdHJ1Y3QgYmlvX3ZlYyBidjtcbjE1NjI6XHRcbjE1NjM6XHRcdFx0YnZlY19pdGVyX2FkdmFuY2Uoc3JjX2J2ZWMsIFx1MDAyNmJpLCBvZmZzZXQpO1xuMTU2NDpcdFx0XHRmb3JfZWFjaF9tcF9idmVjKGJ2LCBzcmNfYnZlYywgYmksIGJpKVxuMTU2NTpcdFx0XHRcdHJlc19idmVjW3Jlc19pZHgmIzQzOyYjNDM7XSA9IGJ2O1xuMTU2NjpcdFx0XHR0b3RhbF9sZW4gJiM0Mzs9IGlvdl9sZW47XG4xNTY3Olx0XHR9XG4xNTY4Olx0XHRpb3ZfaXRlcl9idmVjKGl0ZXIsIGRkaXIsIHJlc19idmVjLCByZXNfaWR4LCB0b3RhbF9sZW4pO1xuMTU2OTpcdFx0cmV0dXJuIDA7XG4xNTcwOlx0fVxuMTU3MTpcdFxuMTU3MjpcdHN0YXRpYyBpbnQgaW92X2tlcm5fYnZlY19zaXplKGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LFxuMTU3MzpcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBpb19tYXBwZWRfdWJ1ZiAqaW11LFxuMTU3NDpcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCAqbnJfc2VnKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAyMToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDE3CgkJCQkJCQlvdXRwdXQ6IDIwNQoJCQkJCQkJdGhvdWdodHM6IDI1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCdWcgYW5kIHRoZSBBcHByb3ByaWF0ZSBUb29saW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIGxvb2tlZCBhdCB0aGlzIGNvZGUsIGFuZCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBgcmVzX2J2ZWNbcmVzX2lkeCYjNDM7JiM0MztdID0gYnY7YCB3aWxsIGNhdXNlIGFuIG91dC1vZi1ib3VuZHMgd3JpdGUgaWYgYHJlc19idmVjYCBpc24mIzM5O3QgYmlnIGVub3VnaC4gVGhhdCYjMzk7cyB0ZXh0Ym9vayBidWZmZXIgb3ZlcmZsb3cgdGVycml0b3J5LiBObyBhbWJpZ3VpdHkgdGhlcmUuIEFuZCBob25lc3RseSwgS0FTQU4gaXMgdGhlIHBlcmZlY3QgdG9vbCBmb3IgdGhpcyBwYXJ0aWN1bGFyIGpvYi4gSXQmIzM5O3MgZGVzaWduZWQgdG8gbmFpbCB0aGVzZSBraW5kcyBvZiBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuIE5vIG5lZWQgdG8gb3ZlcmNvbXBsaWNhdGUgdGhpbmdzLgoKTGV0IG1lIGJyZWFrIGRvd24gdGhlIHJlYXNvbmluZyBmb3IgdGhlIHJlY29yZC4gVGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGR1cmluZyB0aGUgYG5yX3NlZ3NgIGNhbGN1bGF0aW9uIHdpdGhpbiBgaW9faW1wb3J0X3JlZ192ZWNgLiBFc3NlbnRpYWxseSwgaWYgYG5yX3NlZ3MgKiBzaXplb2Yoc3RydWN0IGJpb192ZWMpYCBvdmVyZmxvd3MsIGl0IGVmZmVjdGl2ZWx5IHJlZHVjZXMgdGhlIHZhbHVlIG9mIGBucl9zZWdzYCBiZWxvdyB0aGUgYWN0dWFsIHJlcXVpcmVtZW50LiBDb25zZXF1ZW50bHksIGB2ZWMtJmd0O2J2ZWNgIGVuZHMgdXAgdW5kZXItYWxsb2NhdGVkIG9yIGluc3VmZmljaWVudGx5IHJlYWxsb2NhdGVkIHdpdGhpbiBgaW9fdmVjX3JlYWxsb2NgLiBUaGVuLCBmdXJ0aGVyIGRvd24gdGhlIGxpbmUsIGVpdGhlciBgaW9fdmVjX2ZpbGxfYnZlY2Agb3IgYGlvX3ZlY19maWxsX2tlcm5fYnZlY2AgYXR0ZW1wdCB0byB3cml0ZSBwYXN0IHRoZSBhbGxvY2F0ZWQgYnVmZmVyIG9mIGB2ZWMtJmd0O2J2ZWNgLCB3aGljaCBpcyBhIGNsYXNzaWMgaGVhcCBvdXQtb2YtYm91bmRzIHdyaXRlIOKAkyBhIGJ1ZmZlciBvdmVyZmxvdywgcGxhaW4gYW5kIHNpbXBsZS4gS0FTQU4gaXMgYnVpbHQgdG8gY2F0Y2ggdGhpcyBraW5kIG9mIHRoaW5nIHJlbGlhYmx5LgoKVGhpcyBpc24mIzM5O3QgYSBzaXR1YXRpb24gd2hlcmUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSwgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBiZWluZyB1c2VkLiBUaG9zZSBhcmUgdGhlIHR5cGVzIG9mIHNjZW5hcmlvcyB3aGVyZSBLTVNBTiBtaWdodCBjb21lIGludG8gcGxheS4gQnV0IGhlcmU/IE5vLCB0aGlzIGlzIHB1cmVseSBhIGJ1ZmZlciBvdmVyZmxvdyBpc3N1ZS4gVGhlcmVmb3JlLCB0aGVyZSYjMzk7cyBubyBqdXN0aWZpY2F0aW9uIGZvciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIEtBU0FOIHdpbGwgYmUgc3VmZmljaWVudCBhbmQgc2hvdWxkIGNhdGNoIHRoZSBlcnJvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMjE6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBpbiB0aGUgY2FsY3VsYXRpb24gb2YgYG5yX3NlZ3NgIGluIGBpb19pbXBvcnRfcmVnX3ZlY2AuIElmIGBucl9zZWdzICogc2l6ZW9mKHN0cnVjdCBiaW9fdmVjKWAgb3ZlcmZsb3dzLCBgbnJfc2Vnc2AgYmVjb21lcyBzbWFsbGVyIHRoYW4gcmVxdWlyZWQuIFRoaXMgbGVhZHMgdG8gYW4gdW5kZXItYWxsb2NhdGlvbiBvciBpbnN1ZmZpY2llbnQgcmVhbGxvY2F0aW9uIG9mIGB2ZWMtXHUwMDNlYnZlY2AgaW4gYGlvX3ZlY19yZWFsbG9jYC4gU3Vic2VxdWVudGx5LCBgaW9fdmVjX2ZpbGxfYnZlY2Agb3IgYGlvX3ZlY19maWxsX2tlcm5fYnZlY2Agd2lsbCB3cml0ZSBvdXQgb2YgYm91bmRzIGludG8gdGhlIGB2ZWMtXHUwMDNlYnZlY2AgYXJyYXkuIFRoaXMgaXMgYSBjbGFzc2ljIGhlYXAgb3V0LW9mLWJvdW5kcyB3cml0ZSAoYnVmZmVyIG92ZXJmbG93KSwgd2hpY2ggaXMgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBpbmZvLWxlYWssIG9yIHVzZSBvZiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbnZvbHZlZCBpbiB0aGlzIGJ1Zy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gdGhlIGNhbGN1bGF0aW9uIG9mIGBucl9zZWdzYCBpbiBgaW9faW1wb3J0X3JlZ192ZWNgLiBJZiBgbnJfc2VncyAqIHNpemVvZihzdHJ1Y3QgYmlvX3ZlYylgIG92ZXJmbG93cywgYG5yX3NlZ3NgIGJlY29tZXMgc21hbGxlciB0aGFuIHJlcXVpcmVkLiBUaGlzIGxlYWRzIHRvIGFuIHVuZGVyLWFsbG9jYXRpb24gb3IgaW5zdWZmaWNpZW50IHJlYWxsb2NhdGlvbiBvZiBgdmVjLVx1MDAzZWJ2ZWNgIGluIGBpb192ZWNfcmVhbGxvY2AuIFN1YnNlcXVlbnRseSwgYGlvX3ZlY19maWxsX2J2ZWNgIG9yIGBpb192ZWNfZmlsbF9rZXJuX2J2ZWNgIHdpbGwgd3JpdGUgb3V0IG9mIGJvdW5kcyBpbnRvIHRoZSBgdmVjLVx1MDAzZWJ2ZWNgIGFycmF5LiBUaGlzIGlzIGEgY2xhc3NpYyBoZWFwIG91dC1vZi1ib3VuZHMgd3JpdGUgKGJ1ZmZlciBvdmVyZmxvdyksIHdoaWNoIGlzIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgaW5mby1sZWFrLCBvciB1c2Ugb2YgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW52b2x2ZWQgaW4gdGhpcyBidWcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjEyOjIxLjEyNDE2ODAyOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MDY1OTc0MDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklPX1VSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9faW1wb3J0X3JlZ192ZWNcIixcbiAgICBcImlvX3VyaW5nX2NtZF9pbXBvcnRfZml4ZWRfdmVjXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIHRoZSBjYWxjdWxhdGlvbiBvZiBgbnJfc2Vnc2AgaW4gYGlvX2ltcG9ydF9yZWdfdmVjYC4gSWYgYG5yX3NlZ3MgKiBzaXplb2Yoc3RydWN0IGJpb192ZWMpYCBvdmVyZmxvd3MsIGBucl9zZWdzYCBiZWNvbWVzIHNtYWxsZXIgdGhhbiByZXF1aXJlZC4gVGhpcyBsZWFkcyB0byBhbiB1bmRlci1hbGxvY2F0aW9uIG9yIGluc3VmZmljaWVudCByZWFsbG9jYXRpb24gb2YgYHZlYy1cXHUwMDNlYnZlY2AgaW4gYGlvX3ZlY19yZWFsbG9jYC4gU3Vic2VxdWVudGx5LCBgaW9fdmVjX2ZpbGxfYnZlY2Agb3IgYGlvX3ZlY19maWxsX2tlcm5fYnZlY2Agd2lsbCB3cml0ZSBvdXQgb2YgYm91bmRzIGludG8gdGhlIGB2ZWMtXFx1MDAzZWJ2ZWNgIGFycmF5LiBUaGlzIGlzIGEgY2xhc3NpYyBoZWFwIG91dC1vZi1ib3VuZHMgd3JpdGUgKGJ1ZmZlciBvdmVyZmxvdyksIHdoaWNoIGlzIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgaW5mby1sZWFrLCBvciB1c2Ugb2YgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW52b2x2ZWQgaW4gdGhpcyBidWcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBpbiBgaW9faW1wb3J0X3JlZ192ZWNgIHdoZW4gY2FsY3VsYXRpbmcgYG5yX3NlZ3NgIGZyb20gYGJ2ZWNfYnl0ZXNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGlvX3VyaW5nIHN1YnN5c3RlbSwgcmVhY2hhYmxlIHZpYSBpb191cmluZyBzeXN0ZW0gY2FsbHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjEyOjIxLjEyNDE3NDg5OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEwODU1NTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzI4ZTc3NWI2MmQ4ZDQ4YWE4MjUyZmFkMjg4N2E5MzVlNzdiNzEzYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAxMiAyMToxMjoyMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pb191cmluZy9yc3JjLmMgYi9pb191cmluZy9yc3JjLmNcXG5pbmRleCA4ZDBmMmVlMjRlMGMyLi45OGRjY2VmZDgwMWI5IDEwMDY0NFxcbi0tLSBhL2lvX3VyaW5nL3JzcmMuY1xcbisrKyBiL2lvX3VyaW5nL3JzcmMuY1xcbkBAIC0xNjUzLDggKzE2NTMsMTIgQEAgaW50IGlvX2ltcG9ydF9yZWdfdmVjKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuIFxcdGlmIChzaXplb2Yoc3RydWN0IGJpb192ZWMpIFxcdTAwM2Ugc2l6ZW9mKHN0cnVjdCBpb3ZlYykpIHtcXG4gXFx0XFx0c2l6ZV90IGJ2ZWNfYnl0ZXM7XFxuIFxcbi1cXHRcXHRidmVjX2J5dGVzID0gbnJfc2VncyAqIHNpemVvZihzdHJ1Y3QgYmlvX3ZlYyk7XFxuLVxcdFxcdG5yX3NlZ3MgPSAoYnZlY19ieXRlcyArIHNpemVvZigqaW92KSAtIDEpIC8gc2l6ZW9mKCppb3YpO1xcbitcXHRcXHRpZiAoY2hlY2tfbXVsX292ZXJmbG93KChzaXplX3QpbnJfc2Vncywgc2l6ZW9mKHN0cnVjdCBiaW9fdmVjKSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZidmVjX2J5dGVzKSB8fFxcbitcXHRcXHQgICAgY2hlY2tfYWRkX292ZXJmbG93KGJ2ZWNfYnl0ZXMsIHNpemVvZigqaW92KSAtIDEsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2YnZlY19ieXRlcykpXFxuK1xcdFxcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbitcXHRcXHRucl9zZWdzID0gYnZlY19ieXRlcyAvIHNpemVvZigqaW92KTtcXG4gXFx0XFx0bnJfc2VncyArPSBucl9pb3ZzO1xcbiBcXHR9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMToxMjoyMS42MzU5ODk2NDZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozNTY3MzU3ODkzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX2ltcG9ydF9yZWdfdmVjXCIsXG4gICAgXCJpb191cmluZ19jbWRfaW1wb3J0X2ZpeGVkX3ZlY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gYGlvX2ltcG9ydF9yZWdfdmVjYCB3aGVuIGNhbGN1bGF0aW5nIGBucl9zZWdzYCBmcm9tIGBidmVjX2J5dGVzYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBpb191cmluZyBzdWJzeXN0ZW0sIHJlYWNoYWJsZSB2aWEgaW9fdXJpbmcgc3lzdGVtIGNhbGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzMjhlNzc1YjYyZDhkNDhhYTgyNTJmYWQyODg3YTkzNWU3N2I3MTNhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMjE6MTI6MjAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pb191cmluZy9yc3JjLmMgYi9pb191cmluZy9yc3JjLmNcbmluZGV4IDhkMGYyZWUyNGUwYzIuLjk4ZGNjZWZkODAxYjkgMTAwNjQ0XG4tLS0gYS9pb191cmluZy9yc3JjLmNcbisrKyBiL2lvX3VyaW5nL3JzcmMuY1xuQEAgLTE2NTMsOCArMTY1MywxMiBAQCBpbnQgaW9faW1wb3J0X3JlZ192ZWMoaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdGlmIChzaXplb2Yoc3RydWN0IGJpb192ZWMpIFx1MDAzZSBzaXplb2Yoc3RydWN0IGlvdmVjKSkge1xuIFx0XHRzaXplX3QgYnZlY19ieXRlcztcbiBcbi1cdFx0YnZlY19ieXRlcyA9IG5yX3NlZ3MgKiBzaXplb2Yoc3RydWN0IGJpb192ZWMpO1xuLVx0XHRucl9zZWdzID0gKGJ2ZWNfYnl0ZXMgKyBzaXplb2YoKmlvdikgLSAxKSAvIHNpemVvZigqaW92KTtcbitcdFx0aWYgKGNoZWNrX211bF9vdmVyZmxvdygoc2l6ZV90KW5yX3NlZ3MsIHNpemVvZihzdHJ1Y3QgYmlvX3ZlYyksXG4rXHRcdFx0XHQgICAgICAgXHUwMDI2YnZlY19ieXRlcykgfHxcbitcdFx0ICAgIGNoZWNrX2FkZF9vdmVyZmxvdyhidmVjX2J5dGVzLCBzaXplb2YoKmlvdikgLSAxLFxuK1x0XHRcdFx0ICAgICAgIFx1MDAyNmJ2ZWNfYnl0ZXMpKVxuK1x0XHRcdHJldHVybiAtRU9WRVJGTE9XO1xuK1x0XHRucl9zZWdzID0gYnZlY19ieXRlcyAvIHNpemVvZigqaW92KTtcbiBcdFx0bnJfc2VncyArPSBucl9pb3ZzO1xuIFx0fVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MTI6MjEuNjM1OTkxMzg2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0ODQxMDI4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElPX1VSSU5HIFJlc291cmNlIFJlZ2lzdHJhdGlvbiBDb2RlKipcblxuT2theSwgc28gd2UndmUgZ290IGEgcGF0Y2ggYXBwbGllZCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQncyB0b3VjaGluZyBgaW9fdXJpbmcvcnNyYy5jYCwgc3BlY2lmaWNhbGx5IGBpb19pbXBvcnRfcmVnX3ZlY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoYXQgZnVuY3Rpb24uIFRoZSBkZXNjcmlwdGlvbiBtZW50aW9ucyBvdmVyZmxvdyBjaGVja3MgYmVpbmcgYWRkZWQgdG8gdGhlIGBucl9zZWdzYCBjYWxjdWxhdGlvbi4gVGhhdCdzIGEgY2xhc3NpYyBhcmVhIGZvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvciwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBpbiBhIGxvdy1sZXZlbCBjb250ZXh0IGxpa2UgdGhpcy4gTGV0J3MgZGlnIGludG8gYGlvX2ltcG9ydF9yZWdfdmVjYCBhbmQgc2VlIGV4YWN0bHkgaG93IHRob3NlIG92ZXJmbG93IGNoZWNrcyBhcmUgaW1wbGVtZW50ZWQgYW5kIHdoYXQgc2NlbmFyaW9zIHRoZXkgYXJlIGRlc2lnbmVkIHRvIG1pdGlnYXRlLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogYmVoaW5kIHRoaXMgcGF0Y2gg4oCTIHdoYXQgd2FzIHRoZSBzcGVjaWZpYyBwcm9ibGVtIGJlaW5nIGFkZHJlc3NlZCwgYW5kIGhvdyBlZmZlY3RpdmVseSBpcyB0aGlzIHBhdGNoIHJlc29sdmluZyBpdD8gVGltZSB0byBnZXQgaW50byB0aGUgY29kZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MjA5NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MTI6MjUuMTg0NDA1NDQxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTc0NzM1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19pbXBvcnRfcmVnX3ZlY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9yc3JjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvcnNyYy5jPTE1OTU9c3RhdGljIGludCBpb19rZXJuX2J2ZWNfc2l6ZShzdHJ1Y3QgaW92ZWMgKmlvdiwgdW5zaWduZWQgbnJfaW92cyxcXG4tLVxcbmlvX3VyaW5nL3JzcmMuYy0xNjE5LVxcbmlvX3VyaW5nL3JzcmMuYzoxNjIwOmludCBpb19pbXBvcnRfcmVnX3ZlYyhpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbmlvX3VyaW5nL3JzcmMuYy0xNjIxLVxcdFxcdFxcdHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW91X3ZlYyAqdmVjLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMToxMjoyNS4yOTAxNjA4M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NjA3MTM0NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBjb25zaWRlcmluZyBJJ20gc3RlZXBlZCBpbiB0aGlzIHN0dWZmOlxuXG4qKkRpdmluZyBpbnRvIGBpb19pbXBvcnRfcmVnX3ZlY2AgaW4gYGlvX3VyaW5nL3JzcmMuY2AqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgaW4gb24gYGlvX2ltcG9ydF9yZWdfdmVjYCB3aXRoaW4gYHJzcmMuY2AuIFRoZSBuYW1lIGl0c2VsZiBoaW50cyB0aGF0IHdlJ3JlIHRhbGtpbmcgYWJvdXQgcmVnaXN0ZXJpbmcgb3IgaW1wb3J0aW5nIHZlY3Rvci1iYXNlZCBkYXRhIHN0cnVjdHVyZXMsIHByb2JhYmx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgaW9fdXJpbmcgc3Vic3lzdGVtLiBLbm93aW5nIHRoZSB1c3VhbCBpb191cmluZyBmbG93LCBteSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZTogV2hhdCBraW5kIG9mIHZlY3RvcnM/IEFyZSB0aGV5IGRlc2NyaWJpbmcgbWVtb3J5IHJlZ2lvbnM/IEZpbGUgZGVzY3JpcHRvcnM/IElzIHRoaXMgcmVsYXRlZCB0byBob3cgaW9fdXJpbmcgaGFuZGxlcyBJL08gYnVmZmVycz8gSG93IGRvZXMgdGhpcyBmdW5jdGlvbiBpbnRlcmZhY2Ugd2l0aCB0aGUgbWFpbiByZXF1ZXN0IHN1Ym1pc3Npb24gYW5kIGNvbXBsZXRpb24gcGF0aD8gSSdtIGFudGljaXBhdGluZyBzb21lIGludGVyYWN0aW9uIHdpdGggdXNlci1zcGFjZSBidWZmZXJzIGFuZCBrZXJuZWwtc3BhY2UgZGF0YS4gSSdtIGhvcGluZyB0byBzZWUgaG93IG1lbW9yeSBnZXRzIHBpbm5lZCwgaG93IHBlcm1pc3Npb25zIGFyZSBjaGVja2VkLCBhbmQgaG93IHRoZXNlIHJlZ2lzdHJhdGlvbnMgYXJlIGhvb2tlZCBpbnRvIHRoZSBsYXJnZXIgaW9fdXJpbmcgbGlmZWN5Y2xlLiBMZXQncyBzZWUgaWYgdGhpcyBmdW5jdGlvbiBpcyBhIGtleSBwaWVjZSBmb3IgemVyby1jb3B5IG9wZXJhdGlvbnMgb3Igc2hhcmVkIG1lbW9yeSBtYXBwaW5ncyB3aXRoaW4gdGhlIEkvTyBmcmFtZXdvcmsuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgdGhlIGRldGFpbHMgb2YgdGhpcyBpbXBvcnRhbnQgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MTEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMToxMjoyOC45NTA4Nzc4OTJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzUzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW9fdXJpbmcvcnNyYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2MTUsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjE1OlxcdFxcdGlmICh0b3RhbF9sZW4gXFx1MDAzZSBNQVhfUldfQ09VTlQpXFxuMTYxNjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNjE3OlxcdFxcdHJldHVybiAwO1xcbjE2MTg6XFx0fVxcbjE2MTk6XFx0XFxuMTYyMDpcXHRpbnQgaW9faW1wb3J0X3JlZ192ZWMoaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4xNjIxOlxcdFxcdFxcdFxcdHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW91X3ZlYyAqdmVjLFxcbjE2MjI6XFx0XFx0XFx0XFx0dW5zaWduZWQgbnJfaW92cywgdW5zaWduZWQgaXNzdWVfZmxhZ3MpXFxuMTYyMzpcXHR7XFxuMTYyNDpcXHRcXHRzdHJ1Y3QgaW9fcnNyY19ub2RlICpub2RlO1xcbjE2MjU6XFx0XFx0c3RydWN0IGlvX21hcHBlZF91YnVmICppbXU7XFxuMTYyNjpcXHRcXHR1bnNpZ25lZCBpb3ZlY19vZmY7XFxuMTYyNzpcXHRcXHRzdHJ1Y3QgaW92ZWMgKmlvdjtcXG4xNjI4OlxcdFxcdHVuc2lnbmVkIG5yX3NlZ3M7XFxuMTYyOTpcXHRcXG4xNjMwOlxcdFxcdG5vZGUgPSBpb19maW5kX2J1Zl9ub2RlKHJlcSwgaXNzdWVfZmxhZ3MpO1xcbjE2MzE6XFx0XFx0aWYgKCFub2RlKVxcbjE2MzI6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMTYzMzpcXHRcXHRpbXUgPSBub2RlLVxcdTAwM2VidWY7XFxuMTYzNDpcXHRcXHRpZiAoIShpbXUtXFx1MDAzZWRpciBcXHUwMDI2ICgxIFxcdTAwM2NcXHUwMDNjIGRkaXIpKSlcXG4xNjM1OlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjE2MzY6XFx0XFxuMTYzNzpcXHRcXHRpb3ZlY19vZmYgPSB2ZWMtXFx1MDAzZW5yIC0gbnJfaW92cztcXG4xNjM4OlxcdFxcdGlvdiA9IHZlYy1cXHUwMDNlaW92ZWMgKyBpb3ZlY19vZmY7XFxuMTYzOTpcXHRcXG4xNjQwOlxcdFxcdGlmIChpbXUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9fUkVHQlVGX0ZfS0JVRikge1xcbjE2NDE6XFx0XFx0XFx0aW50IHJldCA9IGlvX2tlcm5fYnZlY19zaXplKGlvdiwgbnJfaW92cywgaW11LCBcXHUwMDI2bnJfc2Vncyk7XFxuMTY0MjpcXHRcXG4xNjQzOlxcdFxcdFxcdGlmICh1bmxpa2VseShyZXQpKVxcbjE2NDQ6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xNjQ1OlxcdFxcdH0gZWxzZSB7XFxuMTY0NjpcXHRcXHRcXHRpbnQgcmV0ID0gaW9fZXN0aW1hdGVfYnZlY19zaXplKGlvdiwgbnJfaW92cywgaW11KTtcXG4xNjQ3OlxcdFxcbjE2NDg6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTY0OTpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE2NTA6XFx0XFx0XFx0bnJfc2VncyA9IHJldDtcXG4xNjUxOlxcdFxcdH1cXG4xNjUyOlxcdFxcbjE2NTM6XFx0XFx0aWYgKHNpemVvZihzdHJ1Y3QgYmlvX3ZlYykgXFx1MDAzZSBzaXplb2Yoc3RydWN0IGlvdmVjKSkge1xcbjE2NTQ6XFx0XFx0XFx0c2l6ZV90IGJ2ZWNfYnl0ZXM7XFxuMTY1NTpcXHRcXG4xNjU2OlxcdFxcdFxcdGlmIChjaGVja19tdWxfb3ZlcmZsb3coKHNpemVfdClucl9zZWdzLCBzaXplb2Yoc3RydWN0IGJpb192ZWMpLFxcbjE2NTc6XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZidmVjX2J5dGVzKSB8fFxcbjE2NTg6XFx0XFx0XFx0ICAgIGNoZWNrX2FkZF9vdmVyZmxvdyhidmVjX2J5dGVzLCBzaXplb2YoKmlvdikgLSAxLFxcbjE2NTk6XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZidmVjX2J5dGVzKSlcXG4xNjYwOlxcdFxcdFxcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbjE2NjE6XFx0XFx0XFx0bnJfc2VncyA9IGJ2ZWNfYnl0ZXMgLyBzaXplb2YoKmlvdik7XFxuMTY2MjpcXHRcXHRcXHRucl9zZWdzICs9IG5yX2lvdnM7XFxuMTY2MzpcXHRcXHR9XFxuMTY2NDpcXHRcXG4xNjY1OlxcdFxcdGlmIChucl9zZWdzIFxcdTAwM2UgdmVjLVxcdTAwM2Vucikge1xcbjE2NjY6XFx0XFx0XFx0c3RydWN0IGlvdV92ZWMgdG1wX3ZlYyA9IHt9O1xcbjE2Njc6XFx0XFx0XFx0aW50IHJldDtcXG4xNjY4OlxcdFxcbjE2Njk6XFx0XFx0XFx0cmV0ID0gaW9fdmVjX3JlYWxsb2MoXFx1MDAyNnRtcF92ZWMsIG5yX3NlZ3MpO1xcbjE2NzA6XFx0XFx0XFx0aWYgKHJldClcXG4xNjcxOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTY3MjpcXHRcXG4xNjczOlxcdFxcdFxcdGlvdmVjX29mZiA9IHRtcF92ZWMubnIgLSBucl9pb3ZzO1xcbjE2NzQ6XFx0XFx0XFx0bWVtY3B5KHRtcF92ZWMuaW92ZWMgKyBpb3ZlY19vZmYsIGlvdiwgc2l6ZW9mKCppb3YpICogbnJfaW92cyk7XFxuMTY3NTpcXHRcXHRcXHRpb192ZWNfZnJlZSh2ZWMpO1xcbjE2NzY6XFx0XFxuMTY3NzpcXHRcXHRcXHQqdmVjID0gdG1wX3ZlYztcXG4xNjc4OlxcdFxcdFxcdGlvdiA9IHZlYy1cXHUwMDNlaW92ZWMgKyBpb3ZlY19vZmY7XFxuMTY3OTpcXHRcXHRcXHRyZXEtXFx1MDAzZWZsYWdzIHw9IFJFUV9GX05FRURfQ0xFQU5VUDtcXG4xNjgwOlxcdFxcdH1cXG4xNjgxOlxcdFxcbjE2ODI6XFx0XFx0aWYgKGltdS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT19SRUdCVUZfRl9LQlVGKVxcbjE2ODM6XFx0XFx0XFx0cmV0dXJuIGlvX3ZlY19maWxsX2tlcm5fYnZlYyhkZGlyLCBpdGVyLCBpbXUsIGlvdiwgbnJfaW92cywgdmVjKTtcXG4xNjg0OlxcdFxcbjE2ODU6XFx0XFx0cmV0dXJuIGlvX3ZlY19maWxsX2J2ZWMoZGRpciwgaXRlciwgaW11LCBpb3YsIG5yX2lvdnMsIHZlYyk7XFxuMTY4NjpcXHR9XFxuMTY4NzpcXHRcXG4xNjg4OlxcdGludCBpb19wcmVwX3JlZ19pb3ZlYyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvdV92ZWMgKml2LFxcbjE2ODk6XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGlvdmVjIF9fdXNlciAqdXZlYywgc2l6ZV90IHV2ZWNfc2VncylcXG4xNjkwOlxcdHtcXG4xNjkxOlxcdFxcdHN0cnVjdCBpb3ZlYyAqaW92O1xcbjE2OTI6XFx0XFx0aW50IGlvdmVjX29mZiwgcmV0O1xcbjE2OTM6XFx0XFx0dm9pZCAqcmVzO1xcbjE2OTQ6XFx0XFxuMTY5NTpcXHRcXHRpZiAodXZlY19zZWdzIFxcdTAwM2UgaXYtXFx1MDAzZW5yKSB7XFxuMTY5NjpcXHRcXHRcXHRyZXQgPSBpb192ZWNfcmVhbGxvYyhpdiwgdXZlY19zZWdzKTtcXG4xNjk3OlxcdFxcdFxcdGlmIChyZXQpXFxuMTY5ODpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE2OTk6XFx0XFx0XFx0cmVxLVxcdTAwM2VmbGFncyB8PSBSRVFfRl9ORUVEX0NMRUFOVVA7XFxuMTcwMDpcXHRcXHR9XFxuMTcwMTpcXHRcXG4xNzAyOlxcdFxcdC8qIHBhZCBpb3ZlYyB0byB0aGUgcmlnaHQgKi9cXG4xNzAzOlxcdFxcdGlvdmVjX29mZiA9IGl2LVxcdTAwM2VuciAtIHV2ZWNfc2VncztcXG4xNzA0OlxcdFxcdGlvdiA9IGl2LVxcdTAwM2Vpb3ZlYyArIGlvdmVjX29mZjtcXG4xNzA1OlxcdFxcdHJlcyA9IGlvdmVjX2Zyb21fdXNlcih1dmVjLCB1dmVjX3NlZ3MsIHV2ZWNfc2VncywgaW92LFxcbjE3MDY6XFx0XFx0XFx0XFx0ICAgICAgaW9faXNfY29tcGF0KHJlcS1cXHUwMDNlY3R4KSk7XFxuMTcwNzpcXHRcXHRpZiAoSVNfRVJSKHJlcykpXFxuMTcwODpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihyZXMpO1xcbjE3MDk6XFx0XFxuMTcxMDpcXHRcXHRyZXEtXFx1MDAzZWZsYWdzIHw9IFJFUV9GX0lNUE9SVF9CVUZGRVI7XFxuMTcxMTpcXHRcXHRyZXR1cm4gMDtcXG4xNzEyOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MTI6MjguOTUxMDU2MDYzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjgzOTY5ODYyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgSW50ZWdlciBPdmVyZmxvdyBpbiBpb191cmluZyoqXG5cbk9rYXksIHNvIEkndmUgc3BvdHRlZCBhIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93IHZ1bG5lcmFiaWxpdHkgaW4gYGlvX3VyaW5nL3JzcmMuY2AsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBpb19pbXBvcnRfcmVnX3ZlY2AgZnVuY3Rpb24uIFRoZSBvdmVyZmxvdyBzdGVtcyBmcm9tIGEgY2FsY3VsYXRpb24gb2YgYG5yX3NlZ3NgLiBUaGlzIHNvdW5kcyBsaWtlIHNvbWV0aGluZyB0aGF0J3MgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIHdhcnJhbnRzIHNvbWUgZGVkaWNhdGVkIGZ1enppbmcgYXR0ZW50aW9uLiBgaW9fdXJpbmdgIGlzIGEgY29yZSBwYXJ0IG9mIHRoZSBrZXJuZWwncyBJL08gaW5mcmFzdHJ1Y3R1cmUsIHNvIGFueSB2dWxuZXJhYmlsaXR5IGhlcmUgaXMgYSBjb25jZXJuLlxuXG5Ob3csIG15IG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3QgYW5kIHJlYWNoIG9mIHRoaXMgZnVuY3Rpb24uIEkgbmVlZCB0byB0cmFjZSB3aGVyZSBgaW9faW1wb3J0X3JlZ192ZWNgIGlzIGFjdHVhbGx5ICpjYWxsZWQqLiBJcyBpdCBhbiBleHBvcnRlZCBzeW1ib2wsIG9yIGlzIGl0IHVzZWQgaW50ZXJuYWxseSB3aXRoaW4gYGlvX3VyaW5nYD8gS25vd2luZyBpdHMgY2FsbCBzaXRlcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBhdHRhY2sgc3VyZmFjZSBhbmQgaG93IGFuIGF0dGFja2VyIG1pZ2h0IHRyaWdnZXIgdGhpcyBvdmVyZmxvdy4gVGltZSB0byBkaWcgaW50byB0aGUgY29kZWJhc2UgYW5kIGZpbmQgdGhvc2UgcmVmZXJlbmNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM1MCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MTI6MzUuNzkwNzU3NDk4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjg0ODg1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19pbXBvcnRfcmVnX3ZlY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvbmV0LmM9MTUwMD1zdGF0aWMgaW50IGlvX3NlbmRfemNfaW1wb3J0KHN0cnVjdCBpb19raW9jYiAqcmVxLFxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTUxOC1cXG5pb191cmluZy9uZXQuYzoxNTE5OlxcdFxcdHJldCA9IGlvX2ltcG9ydF9yZWdfdmVjKElURVJfU09VUkNFLCBcXHUwMDI2a21zZy1cXHUwMDNlbXNnLm1zZ19pdGVyLFxcbmlvX3VyaW5nL25ldC5jLTE1MjAtXFx0XFx0XFx0XFx0XFx0bm90aWYsIFxcdTAwMjZrbXNnLVxcdTAwM2V2ZWMsIHV2ZWNfc2VncyxcXG4tLVxcbmlvX3VyaW5nL3JzcmMuYz0xNTk1PXN0YXRpYyBpbnQgaW9fa2Vybl9idmVjX3NpemUoc3RydWN0IGlvdmVjICppb3YsIHVuc2lnbmVkIG5yX2lvdnMsXFxuLS1cXG5pb191cmluZy9yc3JjLmMtMTYxOS1cXG5pb191cmluZy9yc3JjLmM6MTYyMDppbnQgaW9faW1wb3J0X3JlZ192ZWMoaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG5pb191cmluZy9yc3JjLmMtMTYyMS1cXHRcXHRcXHRzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvdV92ZWMgKnZlYyxcXG4tLVxcbmlvX3VyaW5nL3JzcmMuaD02OT1pbnQgaW9faW1wb3J0X3JlZ19idWYoc3RydWN0IGlvX2tpb2NiICpyZXEsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbmlvX3VyaW5nL3JzcmMuaC03MS1cXHRcXHRcXHR1bnNpZ25lZCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvcnNyYy5oOjcyOmludCBpb19pbXBvcnRfcmVnX3ZlYyhpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbmlvX3VyaW5nL3JzcmMuaC03My1cXHRcXHRcXHRzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvdV92ZWMgKnZlYyxcXG4tLVxcbmlvX3VyaW5nL3J3LmM9Mzk5PXN0YXRpYyBpbnQgaW9fcndfaW1wb3J0X3JlZ192ZWMoc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuLS1cXG5pb191cmluZy9ydy5jLTQwNi1cXG5pb191cmluZy9ydy5jOjQwNzpcXHRyZXQgPSBpb19pbXBvcnRfcmVnX3ZlYyhkZGlyLCBcXHUwMDI2aW8tXFx1MDAzZWl0ZXIsIHJlcSwgXFx1MDAyNmlvLVxcdTAwM2V2ZWMsXFxuaW9fdXJpbmcvcncuYy00MDgtXFx0XFx0XFx0XFx0dXZlY19zZWdzLCBpc3N1ZV9mbGFncyk7XFxuLS1cXG5pb191cmluZy91cmluZ19jbWQuYz0zMDM9aW50IGlvX3VyaW5nX2NtZF9pbXBvcnRfZml4ZWRfdmVjKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCxcXG4tLVxcbmlvX3VyaW5nL3VyaW5nX2NtZC5jLTMxOS1cXG5pb191cmluZy91cmluZ19jbWQuYzozMjA6XFx0cmV0dXJuIGlvX2ltcG9ydF9yZWdfdmVjKGRkaXIsIGl0ZXIsIHJlcSwgXFx1MDAyNmFjLVxcdTAwM2V2ZWMsIHV2ZWNfc2VncyxcXG5pb191cmluZy91cmluZ19jbWQuYy0zMjEtXFx0XFx0XFx0XFx0IGlzc3VlX2ZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MTI6MzUuOTAzNjA5OTI2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc0MDc0NzExMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgaW9fdXJpbmcgSW1wb3J0IEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgaW9faW1wb3J0X3JlZ192ZWNgLCBhbmQgaXQncyBjYWxsZWQgZnJvbSBhIGZldyBwbGFjZXMgd2l0aGluIHRoZSBgaW9fdXJpbmdgIGZyYW1ld29yazogc3BlY2lmaWNhbGx5LCBgaW9fc2VuZF96Y19pbXBvcnRgIGluIGBpb191cmluZy9uZXQuY2AsIGBpb19yd19pbXBvcnRfcmVnX3ZlY2AgaW4gYGlvX3VyaW5nL3J3LmNgLCBhbmQgYGlvX3VyaW5nX2NtZF9pbXBvcnRfZml4ZWRfdmVjYCBpbiBgaW9fdXJpbmcvdXJpbmdfY21kLmNgLiAgQWxsIGNsZWFybHkgYGlvX3VyaW5nYCBmdW5jdGlvbnMsIGFuZCB0aGUgY29uZmlndXJhdGlvbiBuZWNlc3NhcnkgaXMgYElPX1VSSU5HYC5cblxuR2l2ZW4gdGhhdCwgSSB0aGluayBhIGRlZXBlciBkaXZlIGludG8gdGhlc2UgZnVuY3Rpb25zIGlzIG1lcml0ZWQuIEl0IHNlZW1zIGxpa2UgdGhlIGltcG9ydCBmdW5jdGlvbmFsaXR5IGFuZCB0aGUgZnVuY3Rpb25zIGludGVyYWN0aW5nIHdpdGggaXQgYXJlIHByaW1lIGNhbmRpZGF0ZXMgdG8gZm9jdXMgb24uIFNvLCBsZXQncyBkZXNpZ25hdGUgYGlvX2ltcG9ydF9yZWdfdmVjYCBpdHNlbGYgYXMgYSBrZXkgZm9jdXMgc3ltYm9sLiBJdHMgY2FsbGVycywgYGlvX3NlbmRfemNfaW1wb3J0YCwgYGlvX3J3X2ltcG9ydF9yZWdfdmVjYCwgYW5kIGBpb191cmluZ19jbWRfaW1wb3J0X2ZpeGVkX3ZlY2AgYXJlIGFsc28gZXhjZWxsZW50IGZvY3VzIHBvaW50cy4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgaW50ZXJhY3Rpb25zIGFuZCB0aGUgbGFyZ2VyIGNvbnRleHQgb2YgdGhpcyBpbXBvcnQgbWVjaGFuaXNtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjgyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjEyOjQwLjY0NDM2MDQ0OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQyOTYzNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElPX1VSSU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTkxMD1jb25maWcgQUlPXFxuLS1cXG5pbml0L0tjb25maWctMTkxNy1cXG5pbml0L0tjb25maWc6MTkxODpjb25maWcgSU9fVVJJTkdcXG5pbml0L0tjb25maWctMTkxOS1cXHRib29sIFxcXCJFbmFibGUgSU8gdXJpbmcgc3VwcG9ydFxcXCIgaWYgRVhQRVJUXFxuLS1cXG5pbml0L0tjb25maWc9MTkyNz1jb25maWcgR0NPVl9QUk9GSUxFX1VSSU5HXFxuLS1cXG5pbml0L0tjb25maWctMTkzOS1cXG5pbml0L0tjb25maWc6MTk0MDpjb25maWcgSU9fVVJJTkdfTU9DS19GSUxFXFxuaW5pdC9LY29uZmlnLTE5NDEtXFx0dHJpc3RhdGUgXFxcIkVuYWJsZSBpb191cmluZyBtb2NrIGZpbGVzIChFeHBlcmltZW50YWwpXFxcIiBpZiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MTI6NDAuNzA4NjYyMjIxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODA2MTM3NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSwgYXMgaWYgSSdtIHdvcmtpbmcgdGhyb3VnaCB0aGlzIHByb2JsZW06XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBgSU9fVVJJTkdgIENvbmZpZ3VyYXRpb24gYW5kIGBpb19pbXBvcnRfcmVnX3ZlY2AqKlxuXG5BbHJpZ2h0LCBJJ20gZGVhbGluZyB3aXRoIGFuIGBJT19VUklOR2AgY29uZmlndXJhdGlvbiBoZXJlLCBzbyB0aGUgaW1wbGljYXRpb25zIGFyZSBwcmV0dHkgY2xlYXIuIEkgbmVlZCB0byBnZXQgaW50byB0aGUgZGV0YWlscyBvZiBob3cgdGhpcyBpcyBpbXBsZW1lbnRlZC4gU3BlY2lmaWNhbGx5LCBJJ20gemVyb2luZyBpbiBvbiBgaW9faW1wb3J0X3JlZ192ZWNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSB2ZXJpZnkgaWYgdGhhdCBmdW5jdGlvbiBpcyBleHBvc2VkLiBMZXQncyBzZWUgaWYgaXQncyBleHBvcnRlZCBmb3IgbW9kdWxlcywgYmVjYXVzZSBpZiBpdCdzIG5vdCB0aGVuIG15IG9wdGlvbnMgaW1tZWRpYXRlbHkgbmFycm93LiBBaCwgZ29vZCwgaXQncyBub3QgZXhwb3J0ZWQgdG8gbW9kdWxlcywgd2hpY2ggbWVhbnMgSSdsbCBoYXZlIHRvIGNvbnNpZGVyIGl0cyB1c2Ugd2l0aGluIHRoZSBrZXJuZWwgcHJvcGVyLiBJdCdzIG5vdCBzdGF0aWMgZWl0aGVyLCB0aGF0J3MgdXNlZnVsIHRvIGtub3cuXG5cbk5leHQsIEkgdGhpbmsgSSdsbCBsb29rIGludG8gYGlvX3NlbmRfemNfaW1wb3J0YCB3aGljaCBpcyBpbiBgaW9fdXJpbmcvbmV0LmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTAwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MTI6NDQuMzg5Mjc4ODIyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE0NTU1NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fc2VuZF96Y19pbXBvcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvbmV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvbmV0LmM9MTQ1Nz1zdGF0aWMgaW50IGlvX3NnX2Zyb21faXRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuaW9fdXJpbmcvbmV0LmMtMTQ5OS1cXG5pb191cmluZy9uZXQuYzoxNTAwOnN0YXRpYyBpbnQgaW9fc2VuZF96Y19pbXBvcnQoc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuaW9fdXJpbmcvbmV0LmMtMTUwMS1cXHRcXHRcXHQgICAgIHN0cnVjdCBpb19hc3luY19tc2doZHIgKmttc2csXFxuLS1cXG5pb191cmluZy9uZXQuYz0xNTMwPWludCBpb19zZW5kbXNnX3pjKHN0cnVjdCBpb19raW9jYiAqcmVxLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5pb191cmluZy9uZXQuYy0xNTQ3LVxcdGlmIChyZXEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUkVRX0ZfSU1QT1JUX0JVRkZFUikge1xcbmlvX3VyaW5nL25ldC5jOjE1NDg6XFx0XFx0cmV0ID0gaW9fc2VuZF96Y19pbXBvcnQocmVxLCBrbXNnLCBpc3N1ZV9mbGFncyk7XFxuaW9fdXJpbmcvbmV0LmMtMTU0OS1cXHRcXHRpZiAodW5saWtlbHkocmV0KSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MTI6NDQuNTAwNzQwNzVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE0MDkzODQ1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIGBpb191cmluZ2AgSW1wb3J0IE1lY2hhbmlzbSoqXG5cbk9rYXksIHNvIGBpb19zZW5kX3pjX2ltcG9ydGAgaXMgZGVmaW5lZCBhcyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgaXQncyBsaW1pdGVkIGluIHNjb3BlIGFuZCBjYW4ndCBiZSBkaXJlY3RseSBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoZSBmaWxlIGl0J3MgZGVjbGFyZWQgaW4uIFRoYXQncyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSByZWxldmFudCBpbXBvcnQgbG9naWMgbWlnaHQgYmUgY2xvc2VseSB0aWVkIHRvIGEgc3BlY2lmaWMgaW50ZXJuYWwgbWVjaGFuaXNtLlxuXG5HaXZlbiB0aGF0IGNvbnRleHQsIG15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGV4YW1pbmUgYGlvX3J3X2ltcG9ydF9yZWdfdmVjYCwgYW5kIEknbGwgZmluZCB0aGF0IGluIGBpb191cmluZy9ydy5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIHplcm8tY29weSBpbXBvcnQgcHJvY2Vzcy4gSSdtIGd1ZXNzaW5nIHRoYXQgYGlvX3J3X2ltcG9ydF9yZWdfdmVjYCBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIHJlZ2lzdHJhdGlvbiBvZiB2ZWN0b3JzIG9mIG1lbW9yeSByZWdpb25zIHdoZW4gdXNpbmcgemVyby1jb3B5IHRyYW5zZmVycywgYmVjYXVzZSwgaW50dWl0aXZlbHksIGl0J3MgYWJvdXQgKnJlZ2lzdGVyaW5nKiBvciAqaW1wb3J0aW5nKiByZWFkL3dyaXRlIGRhdGEgcmVnaW9ucy4gVW5kZXJzdGFuZGluZyBob3cgYGlvX3J3X2ltcG9ydF9yZWdfdmVjYCBjYWxscywgb3IgaXMgY2FsbGVkIGJ5LCBgaW9fc2VuZF96Y19pbXBvcnRgIHdpbGwgYmUgY3JpdGljYWwgaW4gZ3Jhc3BpbmcgaG93IHRoaXMgZGF0YSBpbXBvcnQgbWVjaGFuaXNtIGlzIGFyY2hpdGVjdGVkLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBjb250cm9sIGZsb3cgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0NzgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMToxMjo0OC42NDE2OTMxOTNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNDExMjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvX3J3X2ltcG9ydF9yZWdfdmVjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL3J3LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvcncuYz0zOTQ9aW50IGlvX3ByZXBfd3JpdGVfZml4ZWQoc3RydWN0IGlvX2tpb2NiICpyZXEsIGNvbnN0IHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSlcXG4tLVxcbmlvX3VyaW5nL3J3LmMtMzk4LVxcbmlvX3VyaW5nL3J3LmM6Mzk5OnN0YXRpYyBpbnQgaW9fcndfaW1wb3J0X3JlZ192ZWMoc3RydWN0IGlvX2tpb2NiICpyZXEsXFxuaW9fdXJpbmcvcncuYy00MDAtXFx0XFx0XFx0XFx0c3RydWN0IGlvX2FzeW5jX3J3ICppbyxcXG4tLVxcbmlvX3VyaW5nL3J3LmM9OTE3PXN0YXRpYyBpbnQgX19pb19yZWFkKHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW9fYnJfc2VsICpzZWwsXFxuLS1cXG5pb191cmluZy9ydy5jLTkyNy1cXHRpZiAocmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2IFJFUV9GX0lNUE9SVF9CVUZGRVIpIHtcXG5pb191cmluZy9ydy5jOjkyODpcXHRcXHRyZXQgPSBpb19yd19pbXBvcnRfcmVnX3ZlYyhyZXEsIGlvLCBJVEVSX0RFU1QsIGlzc3VlX2ZsYWdzKTtcXG5pb191cmluZy9ydy5jLTkyOS1cXHRcXHRpZiAodW5saWtlbHkocmV0KSlcXG4tLVxcbmlvX3VyaW5nL3J3LmM9MTEzND1pbnQgaW9fd3JpdGUoc3RydWN0IGlvX2tpb2NiICpyZXEsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcXG4tLVxcbmlvX3VyaW5nL3J3LmMtMTE0My1cXHRpZiAocmVxLVxcdTAwM2VmbGFncyBcXHUwMDI2IFJFUV9GX0lNUE9SVF9CVUZGRVIpIHtcXG5pb191cmluZy9ydy5jOjExNDQ6XFx0XFx0cmV0ID0gaW9fcndfaW1wb3J0X3JlZ192ZWMocmVxLCBpbywgSVRFUl9TT1VSQ0UsIGlzc3VlX2ZsYWdzKTtcXG5pb191cmluZy9ydy5jLTExNDUtXFx0XFx0aWYgKHVubGlrZWx5KHJldCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjEyOjQ4LjcxMjExMTYzNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTkyNDcxNDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKkFuYWx5emluZyB0aGUgU3ltYm9sIGBpb19yd19pbXBvcnRfcmVnX3ZlY2AqKlxuXG5SaWdodCwgYGlvX3J3X2ltcG9ydF9yZWdfdmVjYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoYXQncyBrZXkuIElmIEknbSB0cnlpbmcgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc3ltYm9sLCBJIHNob3VsZCB1c2UgYGlvX2ltcG9ydF9yZWdfdmVjYCBzaW5jZSBpdCBpcyB0aGUgZm9jdXMuIEJ1dCB3YWl0LCBhbSBJIHN1cmU/IExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBpb19pbXBvcnRfcmVnX3ZlY2AgaXNuJ3Qgc3RhdGljIGFzIHdlbGwuIE5vcGUsIGl0IGlzbid0LiBHb29kLiBMZXQncyBtb3ZlIG9uIGFuZCBjb25zdWx0IGBpb191cmluZ19jbWRfaW1wb3J0X2ZpeGVkX3ZlY2Agd2l0aGluIGBpb191cmluZy91cmluZ19jbWQuY2AsIHRoYXQgc2hvdWxkIGNsZWFyIGl0IHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjEyLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MTI6NTEuOTA0NTg2MjM3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDUxNzQzOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9fdXJpbmdfY21kX2ltcG9ydF9maXhlZF92ZWNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW9fdXJpbmcvdXJpbmdfY21kLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvdXJpbmdfY21kLmM9MzAxPUVYUE9SVF9TWU1CT0xfR1BMKGlvX3VyaW5nX2NtZF9pbXBvcnRfZml4ZWQpO1xcbmlvX3VyaW5nL3VyaW5nX2NtZC5jLTMwMi1cXG5pb191cmluZy91cmluZ19jbWQuYzozMDM6aW50IGlvX3VyaW5nX2NtZF9pbXBvcnRfZml4ZWRfdmVjKHN0cnVjdCBpb191cmluZ19jbWQgKmlvdWNtZCxcXG5pb191cmluZy91cmluZ19jbWQuYy0zMDQtXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgaW92ZWMgX191c2VyICp1dmVjLFxcbi0tXFxuaW9fdXJpbmcvdXJpbmdfY21kLmMtMzIyLX1cXG5pb191cmluZy91cmluZ19jbWQuYzozMjM6RVhQT1JUX1NZTUJPTF9HUEwoaW9fdXJpbmdfY21kX2ltcG9ydF9maXhlZF92ZWMpO1xcbmlvX3VyaW5nL3VyaW5nX2NtZC5jLTMyNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MTI6NTIuMDA5NzY1OTI2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNzQ4NjkzMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgaW9fdXJpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBgaW9fdXJpbmdfY21kX2ltcG9ydF9maXhlZF92ZWNgIGlzIG5vdyBleHBvcnRlZC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBteSBhdHRlbnRpb24g4oCTIGl0IG1lYW5zIHdlIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IGJvdGggYGlvX2ltcG9ydF9yZWdfdmVjYCBhbmQgdGhpcyBuZXcgYGlvX3VyaW5nX2NtZF9pbXBvcnRfZml4ZWRfdmVjYC4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBhZGRyZXNzIGFuIGludGVnZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eSB3aXRoaW4gYGlvX2ltcG9ydF9yZWdfdmVjYC4gU3BlY2lmaWNhbGx5LCBpdCBjb25jZXJucyB0aGUgY2FsY3VsYXRpb24gb2YgYG5yX3NlZ3NgIGZyb20gYGJ2ZWNfYnl0ZXNgLiBUaGlzIGlzIGEgKmZ1bmN0aW9uYWwgY2hhbmdlKiB3aXRoaW4gdGhlIGBpb191cmluZ2Agc3Vic3lzdGVtLCB3aGljaCBpcyBzaWduaWZpY2FudC5cblxuTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcsIGFuZCBJIHdpbGwgYWRkIHRob3NlIGZvY3VzIHN5bWJvbHMgKGBpb19pbXBvcnRfcmVnX3ZlY2AsIGBpb191cmluZ19jbWRfaW1wb3J0X2ZpeGVkX3ZlY2ApIHRvIHRoZSBmdXp6aW5nIGNhbXBhaWduLiBBcyBmb3IgYnVpbGQgY29uZmlncywgaXQgc2VlbXMgdGhhdCBgSU9fVVJJTkdgIGlzIHRoZSBwcmltYXJ5IG9uZSwgYW5kIGdpdmVuIGBpb191cmluZ2AncyBjZW50cmFsaXR5LCBJIGRvbid0IGFudGljaXBhdGUgYW55IG90aGVyIGRlcGVuZGVuY2llcy4gSSdsbCBkb3VibGUtY2hlY2sgdG8gYmUgc3VyZSwgYnV0IEknbSBjb25maWRlbnQgdGhhdCBgSU9fVVJJTkdgIGlzIHN1ZmZpY2llbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2ODIsIk91dHB1dFRva2VucyI6MTEwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjEyOjU3LjE4NDYzODU4M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDkyNjMwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb19pbXBvcnRfcmVnX3ZlY1wiLFxuICAgIFwiaW9fdXJpbmdfY21kX2ltcG9ydF9maXhlZF92ZWNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIGBpb19pbXBvcnRfcmVnX3ZlY2Agd2hlbiBjYWxjdWxhdGluZyBgbnJfc2Vnc2AgZnJvbSBgYnZlY19ieXRlc2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgaW9fdXJpbmcgc3Vic3lzdGVtLCByZWFjaGFibGUgdmlhIGlvX3VyaW5nIHN5c3RlbSBjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvX2ltcG9ydF9yZWdfdmVjXCIsXG4gICAgXCJpb191cmluZ19jbWRfaW1wb3J0X2ZpeGVkX3ZlY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gYGlvX2ltcG9ydF9yZWdfdmVjYCB3aGVuIGNhbGN1bGF0aW5nIGBucl9zZWdzYCBmcm9tIGBidmVjX2J5dGVzYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBpb191cmluZyBzdWJzeXN0ZW0sIHJlYWNoYWJsZSB2aWEgaW9fdXJpbmcgc3lzdGVtIGNhbGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMToxMjo1Ny4zMDk1NzIyNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI4ODA1NjEyNzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMToxMjo1Ny4zMTAxNDQyN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozMjg3OTk4NTU4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBpbiB0aGUgY2FsY3VsYXRpb24gb2YgYG5yX3NlZ3NgIGluIGBpb19pbXBvcnRfcmVnX3ZlY2AuIElmIGBucl9zZWdzICogc2l6ZW9mKHN0cnVjdCBiaW9fdmVjKWAgb3ZlcmZsb3dzLCBgbnJfc2Vnc2AgYmVjb21lcyBzbWFsbGVyIHRoYW4gcmVxdWlyZWQuIFRoaXMgbGVhZHMgdG8gYW4gdW5kZXItYWxsb2NhdGlvbiBvciBpbnN1ZmZpY2llbnQgcmVhbGxvY2F0aW9uIG9mIGB2ZWMtXFx1MDAzZWJ2ZWNgIGluIGBpb192ZWNfcmVhbGxvY2AuIFN1YnNlcXVlbnRseSwgYGlvX3ZlY19maWxsX2J2ZWNgIG9yIGBpb192ZWNfZmlsbF9rZXJuX2J2ZWNgIHdpbGwgd3JpdGUgb3V0IG9mIGJvdW5kcyBpbnRvIHRoZSBgdmVjLVxcdTAwM2VidmVjYCBhcnJheS4gVGhpcyBpcyBhIGNsYXNzaWMgaGVhcCBvdXQtb2YtYm91bmRzIHdyaXRlIChidWZmZXIgb3ZlcmZsb3cpLCB3aGljaCBpcyByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGluZm8tbGVhaywgb3IgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGludm9sdmVkIGluIHRoaXMgYnVnLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDMyOGU3NzViNjJkOGQ0OGFhODI1MmZhZDI4ODdhOTM1ZTc3YjcxM2FcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAyMToxMjoyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2lvX3VyaW5nL3JzcmMuYyBiL2lvX3VyaW5nL3JzcmMuY1xuaW5kZXggOGQwZjJlZTI0ZTBjMi4uOThkY2NlZmQ4MDFiOSAxMDA2NDRcbi0tLSBhL2lvX3VyaW5nL3JzcmMuY1xuKysrIGIvaW9fdXJpbmcvcnNyYy5jXG5AQCAtMTY1Myw4ICsxNjUzLDEyIEBAIGludCBpb19pbXBvcnRfcmVnX3ZlYyhpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFx0aWYgKHNpemVvZihzdHJ1Y3QgYmlvX3ZlYykgXHUwMDNlIHNpemVvZihzdHJ1Y3QgaW92ZWMpKSB7XG4gXHRcdHNpemVfdCBidmVjX2J5dGVzO1xuIFxuLVx0XHRidmVjX2J5dGVzID0gbnJfc2VncyAqIHNpemVvZihzdHJ1Y3QgYmlvX3ZlYyk7XG4tXHRcdG5yX3NlZ3MgPSAoYnZlY19ieXRlcyArIHNpemVvZigqaW92KSAtIDEpIC8gc2l6ZW9mKCppb3YpO1xuK1x0XHRpZiAoY2hlY2tfbXVsX292ZXJmbG93KChzaXplX3QpbnJfc2Vncywgc2l6ZW9mKHN0cnVjdCBiaW9fdmVjKSxcbitcdFx0XHRcdCAgICAgICBcdTAwMjZidmVjX2J5dGVzKSB8fFxuK1x0XHQgICAgY2hlY2tfYWRkX292ZXJmbG93KGJ2ZWNfYnl0ZXMsIHNpemVvZigqaW92KSAtIDEsXG4rXHRcdFx0XHQgICAgICAgXHUwMDI2YnZlY19ieXRlcykpXG4rXHRcdFx0cmV0dXJuIC1FT1ZFUkZMT1c7XG4rXHRcdG5yX3NlZ3MgPSBidmVjX2J5dGVzIC8gc2l6ZW9mKCppb3YpO1xuIFx0XHRucl9zZWdzICs9IG5yX2lvdnM7XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMToxMjo1Ny4zMTAxNDUxMVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzIyNTUxMzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIGlvX3VyaW5nIFBhdGNoIGZvciBJbnRlZ2VyIE92ZXJmbG93KipcblxuT2theSwgc28gdGhlcmUncyBhIHBhdGNoIGluIGBpb191cmluZy9yc3JjLmNgIHRoYXQncyB0d2Vha2luZyBgaW9faW1wb3J0X3JlZ192ZWNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJBaCwgaW50ZWdlciBvdmVyZmxvdywgY2xhc3NpYy5cIiBMb29raW5nIGF0IHRoZSBjb2RlIGRpZmYsIGl0J3MgcHJldHR5IGNsZWFyOiB0aGV5J3JlIHJlcGxhY2luZyBhIGRpcmVjdCBtdWx0aXBsaWNhdGlvbiBhbmQgZGl2aXNpb24gd2l0aCBgY2hlY2tfbXVsX292ZXJmbG93YCBhbmQgYGNoZWNrX2FkZF9vdmVyZmxvd2AuIFNtYXJ0LiBHb29kIGRlZmVuc2UuXG5cblNwZWNpZmljYWxseSwgaXQncyBjYWxjdWxhdGluZyBgbnJfc2Vnc2AgYW5kIHRoZSBvcmlnaW5hbCBjYWxjdWxhdGlvbiAqY291bGQqIGxlYWQgdG8gaW50ZWdlciBvdmVyZmxvd3MuIFRoYXQgbWVhbnMgcG90ZW50aWFsIHVuZGVyLWFsbG9jYXRpb24sIG9yIGFuIGluY29ycmVjdCBib3VuZHMgY2hlY2suIFdoaWNoLCBvZiBjb3Vyc2UsIHVzdWFsbHkgbWVhbnMgS0FTQU4gd2lsbCBjYXRjaCBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcy5cblxuV2FpdCBhIHNlY29uZOKApiBjb3VsZCB0aGlzIG92ZXJmbG93IGxlYWQgdG8gbW9yZSB0aGFuIGp1c3QgT09CIGlzc3Vlcz8gSWYgYG5yX3NlZ3NgIG92ZXJmbG93cyBhbmQgKndyYXBzIGFyb3VuZCogdG8gYSBzbWFsbGVyIHZhbHVlLCB0aGVuIGEgbWVtb3J5IGFsbG9jYXRpb24gbWlnaHQgYmUgKmxlc3MqIHRoYW4gd2hhdCdzIG5lZWRlZC4gTGVhZGluZyB0byBhbiBvdXQtb2YtYm91bmRzIHJlYWQgb3Igd3JpdGUuIFdoYXQgaWYgdGhpcyBgbnJfc2Vnc2AgaXMgdXNlZCB0byBjb3B5IHVzZXIgZGF0YT8gQ291bGQgaXQgbGVhZCB0byBhIGxlYWsgb2YgdW5pbml0aWFsaXplZCBtZW1vcnk/IFRoZSBgbnJfc2Vnc2AgaXMgdGhlIG51bWJlciBvZiBzZWdtZW50cywgd2hpY2ggaXMgdXNlZCBmb3IgY2FsY3VsYXRpb25zLiBJIHNob3VsZCBsb29rIGludG8gdGhpcy4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBleGFjdGx5IGhvdyBgaW9faW1wb3J0X3JlZ192ZWNgIHV0aWxpemVzIHRoaXMgY2FsY3VsYXRlZCB2YWx1ZS4gTGV0J3MgZGlnIGRlZXBlciBpbnRvIHRoZSBjb2Rl4oCmXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwOTQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMToxMzowNC4wMzI2OTk3OTdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MTg5NjA0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19pbXBvcnRfcmVnX3ZlY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9yc3JjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvcnNyYy5jPTE1OTU9c3RhdGljIGludCBpb19rZXJuX2J2ZWNfc2l6ZShzdHJ1Y3QgaW92ZWMgKmlvdiwgdW5zaWduZWQgbnJfaW92cyxcXG4tLVxcbmlvX3VyaW5nL3JzcmMuYy0xNjE5LVxcbmlvX3VyaW5nL3JzcmMuYzoxNjIwOmludCBpb19pbXBvcnRfcmVnX3ZlYyhpbnQgZGRpciwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbmlvX3VyaW5nL3JzcmMuYy0xNjIxLVxcdFxcdFxcdHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW91X3ZlYyAqdmVjLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMToxMzowNC4zMDQ2MDgwMzlaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ2NzA5ODg0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IERpdmluZyBpbnRvIGBpb19pbXBvcnRfcmVnX3ZlY2AqKlxuXG5BbHJpZ2h0LCB0aGUgb2JqZWN0aXZlIGlzIHRvIGdldCBhIGhhbmRsZSBvbiBgaW9faW1wb3J0X3JlZ192ZWNgLiBUaGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpbnZvbHZlcyBhIG1lbnRhbCBjaGVja2xpc3QuICpXaGF0J3MgdGhlIGNvbnRleHQ/KiBJcyB0aGlzIGEgc3BlY2lmaWMgbW9kdWxlLCBhIGxpYnJhcnkgZnVuY3Rpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBLbm93aW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpbGwgZnJhbWUgbXkgdW5kZXJzdGFuZGluZy4gKldoYXQncyB0aGUgY29yZSBmdW5jdGlvbj8qIEZyb20gdGhlIG5hbWUsIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBhbiBpbnB1dC9vdXRwdXQgb3BlcmF0aW9uLCBwb3RlbnRpYWxseSByZWxhdGVkIHRvIHJlZ2lzdGVycyBhbmQgbGlrZWx5IHdvcmtpbmcgd2l0aCB2ZWN0b3JzIG9yIGFycmF5cyBvZiBkYXRhLiBNeSBtaW5kIGF1dG9tYXRpY2FsbHkgc3RhcnRzIGJ1aWxkaW5nIGEgbWVudGFsIG1vZGVsIG9mIGhvdyBkYXRhIG1pZ2h0IGJlIGltcG9ydGVkIC0gYml0d2lzZSBvcGVyYXRpb25zLCBtZW1vcnkgbWFwcGluZywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBpbnRlcmZhY2UgY29uc2lkZXJhdGlvbnMuIEknbSByZWFkeSB0byBkaWcgaW4gYW5kIGJyZWFrIGl0IGRvd24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5ODUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMToxMzowNy43NzE3MTE1ODJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyMjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImlvX3VyaW5nL3JzcmMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjIwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTYyMDpcXHRpbnQgaW9faW1wb3J0X3JlZ192ZWMoaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4xNjIxOlxcdFxcdFxcdFxcdHN0cnVjdCBpb19raW9jYiAqcmVxLCBzdHJ1Y3QgaW91X3ZlYyAqdmVjLFxcbjE2MjI6XFx0XFx0XFx0XFx0dW5zaWduZWQgbnJfaW92cywgdW5zaWduZWQgaXNzdWVfZmxhZ3MpXFxuMTYyMzpcXHR7XFxuMTYyNDpcXHRcXHRzdHJ1Y3QgaW9fcnNyY19ub2RlICpub2RlO1xcbjE2MjU6XFx0XFx0c3RydWN0IGlvX21hcHBlZF91YnVmICppbXU7XFxuMTYyNjpcXHRcXHR1bnNpZ25lZCBpb3ZlY19vZmY7XFxuMTYyNzpcXHRcXHRzdHJ1Y3QgaW92ZWMgKmlvdjtcXG4xNjI4OlxcdFxcdHVuc2lnbmVkIG5yX3NlZ3M7XFxuMTYyOTpcXHRcXG4xNjMwOlxcdFxcdG5vZGUgPSBpb19maW5kX2J1Zl9ub2RlKHJlcSwgaXNzdWVfZmxhZ3MpO1xcbjE2MzE6XFx0XFx0aWYgKCFub2RlKVxcbjE2MzI6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMTYzMzpcXHRcXHRpbXUgPSBub2RlLVxcdTAwM2VidWY7XFxuMTYzNDpcXHRcXHRpZiAoIShpbXUtXFx1MDAzZWRpciBcXHUwMDI2ICgxIFxcdTAwM2NcXHUwMDNjIGRkaXIpKSlcXG4xNjM1OlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjE2MzY6XFx0XFxuMTYzNzpcXHRcXHRpb3ZlY19vZmYgPSB2ZWMtXFx1MDAzZW5yIC0gbnJfaW92cztcXG4xNjM4OlxcdFxcdGlvdiA9IHZlYy1cXHUwMDNlaW92ZWMgKyBpb3ZlY19vZmY7XFxuMTYzOTpcXHRcXG4xNjQwOlxcdFxcdGlmIChpbXUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9fUkVHQlVGX0ZfS0JVRikge1xcbjE2NDE6XFx0XFx0XFx0aW50IHJldCA9IGlvX2tlcm5fYnZlY19zaXplKGlvdiwgbnJfaW92cywgaW11LCBcXHUwMDI2bnJfc2Vncyk7XFxuMTY0MjpcXHRcXG4xNjQzOlxcdFxcdFxcdGlmICh1bmxpa2VseShyZXQpKVxcbjE2NDQ6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xNjQ1OlxcdFxcdH0gZWxzZSB7XFxuMTY0NjpcXHRcXHRcXHRpbnQgcmV0ID0gaW9fZXN0aW1hdGVfYnZlY19zaXplKGlvdiwgbnJfaW92cywgaW11KTtcXG4xNjQ3OlxcdFxcbjE2NDg6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTY0OTpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE2NTA6XFx0XFx0XFx0bnJfc2VncyA9IHJldDtcXG4xNjUxOlxcdFxcdH1cXG4xNjUyOlxcdFxcbjE2NTM6XFx0XFx0aWYgKHNpemVvZihzdHJ1Y3QgYmlvX3ZlYykgXFx1MDAzZSBzaXplb2Yoc3RydWN0IGlvdmVjKSkge1xcbjE2NTQ6XFx0XFx0XFx0c2l6ZV90IGJ2ZWNfYnl0ZXM7XFxuMTY1NTpcXHRcXG4xNjU2OlxcdFxcdFxcdGlmIChjaGVja19tdWxfb3ZlcmZsb3coKHNpemVfdClucl9zZWdzLCBzaXplb2Yoc3RydWN0IGJpb192ZWMpLFxcbjE2NTc6XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZidmVjX2J5dGVzKSB8fFxcbjE2NTg6XFx0XFx0XFx0ICAgIGNoZWNrX2FkZF9vdmVyZmxvdyhidmVjX2J5dGVzLCBzaXplb2YoKmlvdikgLSAxLFxcbjE2NTk6XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZidmVjX2J5dGVzKSlcXG4xNjYwOlxcdFxcdFxcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbjE2NjE6XFx0XFx0XFx0bnJfc2VncyA9IGJ2ZWNfYnl0ZXMgLyBzaXplb2YoKmlvdik7XFxuMTY2MjpcXHRcXHRcXHRucl9zZWdzICs9IG5yX2lvdnM7XFxuMTY2MzpcXHRcXHR9XFxuMTY2NDpcXHRcXG4xNjY1OlxcdFxcdGlmIChucl9zZWdzIFxcdTAwM2UgdmVjLVxcdTAwM2Vucikge1xcbjE2NjY6XFx0XFx0XFx0c3RydWN0IGlvdV92ZWMgdG1wX3ZlYyA9IHt9O1xcbjE2Njc6XFx0XFx0XFx0aW50IHJldDtcXG4xNjY4OlxcdFxcbjE2Njk6XFx0XFx0XFx0cmV0ID0gaW9fdmVjX3JlYWxsb2MoXFx1MDAyNnRtcF92ZWMsIG5yX3NlZ3MpO1xcbjE2NzA6XFx0XFx0XFx0aWYgKHJldClcXG4xNjcxOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTY3MjpcXHRcXG4xNjczOlxcdFxcdFxcdGlvdmVjX29mZiA9IHRtcF92ZWMubnIgLSBucl9pb3ZzO1xcbjE2NzQ6XFx0XFx0XFx0bWVtY3B5KHRtcF92ZWMuaW92ZWMgKyBpb3ZlY19vZmYsIGlvdiwgc2l6ZW9mKCppb3YpICogbnJfaW92cyk7XFxuMTY3NTpcXHRcXHRcXHRpb192ZWNfZnJlZSh2ZWMpO1xcbjE2NzY6XFx0XFxuMTY3NzpcXHRcXHRcXHQqdmVjID0gdG1wX3ZlYztcXG4xNjc4OlxcdFxcdFxcdGlvdiA9IHZlYy1cXHUwMDNlaW92ZWMgKyBpb3ZlY19vZmY7XFxuMTY3OTpcXHRcXHRcXHRyZXEtXFx1MDAzZWZsYWdzIHw9IFJFUV9GX05FRURfQ0xFQU5VUDtcXG4xNjgwOlxcdFxcdH1cXG4xNjgxOlxcdFxcbjE2ODI6XFx0XFx0aWYgKGltdS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT19SRUdCVUZfRl9LQlVGKVxcbjE2ODM6XFx0XFx0XFx0cmV0dXJuIGlvX3ZlY19maWxsX2tlcm5fYnZlYyhkZGlyLCBpdGVyLCBpbXUsIGlvdiwgbnJfaW92cywgdmVjKTtcXG4xNjg0OlxcdFxcbjE2ODU6XFx0XFx0cmV0dXJuIGlvX3ZlY19maWxsX2J2ZWMoZGRpciwgaXRlciwgaW11LCBpb3YsIG5yX2lvdnMsIHZlYyk7XFxuMTY4NjpcXHR9XFxuMTY4NzpcXHRcXG4xNjg4OlxcdGludCBpb19wcmVwX3JlZ19pb3ZlYyhzdHJ1Y3QgaW9fa2lvY2IgKnJlcSwgc3RydWN0IGlvdV92ZWMgKml2LFxcbjE2ODk6XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGlvdmVjIF9fdXNlciAqdXZlYywgc2l6ZV90IHV2ZWNfc2VncylcXG4xNjkwOlxcdHtcXG4xNjkxOlxcdFxcdHN0cnVjdCBpb3ZlYyAqaW92O1xcbjE2OTI6XFx0XFx0aW50IGlvdmVjX29mZiwgcmV0O1xcbjE2OTM6XFx0XFx0dm9pZCAqcmVzO1xcbjE2OTQ6XFx0XFxuMTY5NTpcXHRcXHRpZiAodXZlY19zZWdzIFxcdTAwM2UgaXYtXFx1MDAzZW5yKSB7XFxuMTY5NjpcXHRcXHRcXHRyZXQgPSBpb192ZWNfcmVhbGxvYyhpdiwgdXZlY19zZWdzKTtcXG4xNjk3OlxcdFxcdFxcdGlmIChyZXQpXFxuMTY5ODpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE2OTk6XFx0XFx0XFx0cmVxLVxcdTAwM2VmbGFncyB8PSBSRVFfRl9ORUVEX0NMRUFOVVA7XFxuMTcwMDpcXHRcXHR9XFxuMTcwMTpcXHRcXG4xNzAyOlxcdFxcdC8qIHBhZCBpb3ZlYyB0byB0aGUgcmlnaHQgKi9cXG4xNzAzOlxcdFxcdGlvdmVjX29mZiA9IGl2LVxcdTAwM2VuciAtIHV2ZWNfc2VncztcXG4xNzA0OlxcdFxcdGlvdiA9IGl2LVxcdTAwM2Vpb3ZlYyArIGlvdmVjX29mZjtcXG4xNzA1OlxcdFxcdHJlcyA9IGlvdmVjX2Zyb21fdXNlcih1dmVjLCB1dmVjX3NlZ3MsIHV2ZWNfc2VncywgaW92LFxcbjE3MDY6XFx0XFx0XFx0XFx0ICAgICAgaW9faXNfY29tcGF0KHJlcS1cXHUwMDNlY3R4KSk7XFxuMTcwNzpcXHRcXHRpZiAoSVNfRVJSKHJlcykpXFxuMTcwODpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihyZXMpO1xcbjE3MDk6XFx0XFxuMTcxMDpcXHRcXHRyZXEtXFx1MDAzZWZsYWdzIHw9IFJFUV9GX0lNUE9SVF9CVUZGRVI7XFxuMTcxMTpcXHRcXHRyZXR1cm4gMDtcXG4xNzEyOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MTM6MDcuNzcxOTU2ODIyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNjk2NjE3ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW50ZWdlciBPdmVyZmxvdyBCdWcgQW5hbHlzaXMqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ3ZlIGdvdC4gVGhlIGNydXggb2YgdGhpcyBpc3N1ZSBpcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIHRoZSBgbnJfc2Vnc2AgY2FsY3VsYXRpb24uIFNwZWNpZmljYWxseSwgaW4gdGhhdCBjb2RlIHNuaXBwZXQsIGBucl9zZWdzYCBpcyBiZWluZyBtdWx0aXBsaWVkIGJ5IHRoZSBzaXplIG9mIGBzdHJ1Y3QgYmlvX3ZlY2AuIElmIGBucl9zZWdzYCBoYXBwZW5zIHRvIGJlIGxhcmdlIGVub3VnaCwgdGhpcyBtdWx0aXBsaWNhdGlvbiB3aWxsIG92ZXJmbG93LCBsZWFkaW5nIHRvIGBucl9zZWdzYCBiZWNvbWluZyBzbWFsbGVyIHRoYW4gaXRzIGNvcnJlY3QgdmFsdWUuXG5cblRoZSBzdWJzZXF1ZW50IGNvZGUgYmxvY2sgaXMgd2hlcmUgdGhlIHByb2JsZW0gbWFuaWZlc3RzLiBJZiB0aGF0IG92ZXJmbG93IG9jY3VycywgdGhlIGNoZWNrIGBpZiAobnJfc2VncyBcdTAwM2UgdmVjLVx1MDAzZW5yKWAgYmVjb21lcyBmYXVsdHkuIFRoZSBgaW9fdmVjX3JlYWxsb2NgIGZ1bmN0aW9uIG1pZ2h0IG5vdCBiZSBjYWxsZWQgd2hlbiBpdCBzaG91bGQgYmUsIG9yIGlmIGl0IGlzIGNhbGxlZCwgdGhlIGFsbG9jYXRpb24gbWlnaHQgYmUgaW5zdWZmaWNpZW50IHRvIGNvdmVyIHRoZSBhY3R1YWwgYG5yX3NlZ3NgIHRoYXQgd2UgbmVlZCwgb3IgdGhlIGBucl9zZWdzYCBhcyBjYWxjdWxhdGVkICpwb3N0Ki1vdmVyZmxvdyBtYXkgYmUgdXNlZCBmb3IgYWxsb2NhdGlvbi4gVGhpcyBzZXRzIHRoZSBzdGFnZSBmb3IgYSBjbGFzc2ljIGJ1ZmZlciBvdmVyZmxvdy4gQmVjYXVzZSBvZiB0aGlzIGluaXRpYWwgb3ZlcmZsb3csIHRoZXJlIGlzbid0IGVub3VnaCBtZW1vcnkgYWxsb2NhdGVkLiBMYXRlciwgYGlvX3ZlY19maWxsX2tlcm5fYnZlY2Agb3IgYGlvX3ZlY19maWxsX2J2ZWNgIHdpbGwgdGhlbiB3cml0ZSBkYXRhIG91dCBvZiBib3VuZHMgaW50byBlaXRoZXIgYHZlYy1cdTAwM2Vpb3ZlY2Agb3IgYHZlYy1cdTAwM2VidmVjYCwgc2luY2UgdGhlIHdyaXRlIHNpemUsIGR1ZSB0byB0aGUgZmF1bHR5IGBucl9zZWdzYCwgd2lsbCBiZSBsYXJnZXIgdGhhbiB0aGUgYnVmZmVyLlxuXG5UaGUgZ29vZCBuZXdzIGlzIHRoYXQgdGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBvdXQtb2YtYm91bmRzIHdyaXRlLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvcm1hdGlvbiBsZWFrYWdlIHRvIHdvcnJ5IGFib3V0IGhlcmUsIHRoYW5rZnVsbHkuIEtBU0FOIHNob3VsZCBiZSBhbiBpZGVhbCB0b29sIHRvIGNhdGNoIHRoaXMgYXMgaXQncyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgZm9yIGRldGVjdGluZyB0aGlzIGtpbmQgb2YgbWVtb3J5IGVycm9yLiBXZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGRhdGEgdGhhdCdzIGFscmVhZHkgaW4gdGhlIG1lbW9yeSwgd2UgYXJlIGp1c3QgbG9va2luZyBmb3Igc29tZXRoaW5nICpuZXcqIGJlaW5nIHBsYWNlZCBpbiB0aGUgd3Jvbmcgc3BvdC5cblxuTm93LCBsZXQncyBkb3VibGUtY2hlY2sgdGhlIGltcGxlbWVudGF0aW9ucyBvZiBgaW9fdmVjX2ZpbGxfYnZlY2AgYW5kIGBpb192ZWNfZmlsbF9rZXJuX2J2ZWNgIHRvIGJlIGNlcnRhaW4gd2UgYXJlIGNvcnJlY3QgaW4gb3VyIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzA0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MTM6MTQuOTQxNjIyNzgyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjA1NjM3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb192ZWNfZmlsbF9idmVjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL3JzcmMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9yc3JjLmM9MTQ2MD1pbnQgaW9fdmVjX3JlYWxsb2Moc3RydWN0IGlvdV92ZWMgKml2LCB1bnNpZ25lZCBucl9lbnRyaWVzKVxcbi0tXFxuaW9fdXJpbmcvcnNyYy5jLTE0NzQtXFxuaW9fdXJpbmcvcnNyYy5jOjE0NzU6c3RhdGljIGludCBpb192ZWNfZmlsbF9idmVjKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuaW9fdXJpbmcvcnNyYy5jLTE0NzYtXFx0XFx0XFx0XFx0c3RydWN0IGlvX21hcHBlZF91YnVmICppbXUsXFxuLS1cXG5pb191cmluZy9yc3JjLmM9MTYyMD1pbnQgaW9faW1wb3J0X3JlZ192ZWMoaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbmlvX3VyaW5nL3JzcmMuYy0xNjg0LVxcbmlvX3VyaW5nL3JzcmMuYzoxNjg1OlxcdHJldHVybiBpb192ZWNfZmlsbF9idmVjKGRkaXIsIGl0ZXIsIGltdSwgaW92LCBucl9pb3ZzLCB2ZWMpO1xcbmlvX3VyaW5nL3JzcmMuYy0xNjg2LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MTM6MTUuMDA3Njg1NjI1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNzI1NTQxMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBpb192ZWNfZmlsbF9idmVjYCBmdW5jdGlvbi5cblxuKipBbmFseXppbmcgYGlvX3ZlY19maWxsX2J2ZWNgKipcblxuQWxyaWdodCwgc28gSSdtIHByZXNlbnRlZCB3aXRoIGBpb192ZWNfZmlsbF9idmVjYC4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgYmVnaW5zIGJ5IGV4YW1pbmluZyB0aGUgbmFtZSwgd2hpY2ggc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCB0aGUgZnVuY3Rpb24gaXMgaW52b2x2ZWQgaW4gZmlsbGluZyBhIGJsb2NrIHZlY3RvciAoYGJ2ZWNgKSB3aXRoIGRhdGEgZnJvbSBhbiBgaW9fdmVjYC4gVGhpcyBpcyBhIGNsYXNzaWMgcGF0dGVybiBpbiBJL08gb3BlcmF0aW9ucywgbGlrZWx5IGFpbWVkIGF0IGVmZmljaWVudCBkYXRhIHRyYW5zZmVyIGJldHdlZW4ga2VybmVsIHNwYWNlIGJ1ZmZlcnMgYW5kIHVzZXItc3BhY2UgbWVtb3J5IG9yIGV2ZW4gZGlzayBibG9ja3MuXG5cbkkgaW1tZWRpYXRlbHkgc3RhcnQgdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4gSXMgdGhpcyBvcHRpbWl6ZWQgZm9yIERNQT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIG1lbW9yeSBjb3BpZXMsIGFuZCBjYW4gdGhleSBiZSByZWR1Y2VkPyBUaGUgYGlvX3ZlY2Agc3RydWN0dXJlIGltcGxpZXMgd2XigJlyZSBkZWFsaW5nIHdpdGggc2NhdHRlci9nYXRoZXIgSS9PLCBtZWFuaW5nIGRhdGEgbWF5IG5vdCBiZSBjb250aWd1b3VzLiBTbywgSSBuZWVkIHRvIGxvb2sgZm9yIGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhhdC4gQXJlIHRoZXkgdGFraW5nIGNhcmUgdG8gb3B0aW1pc2UgYWdhaW5zdCBtZW1vcnkgZnJhZ21lbnRhdGlvbj9cblxuSSdtIGV4cGVjdGluZyB0byBzZWUgbG9naWMgdGhhdCBpdGVyYXRlcyB0aHJvdWdoIHRoZSBgaW9fdmVjYCwgd2hpY2ggaXMgYSBjb2xsZWN0aW9uIG9mIGBpb3ZgIHN0cnVjdHMuIFRoZXNlIGBpb3ZgcyB0eXBpY2FsbHkgZGVzY3JpYmUgYSBtZW1vcnkgcmVnaW9uLCBhbiBhZGRyZXNzIGFuZCBpdHMgbGVuZ3RoLiBGb3IgZWFjaCBgaW92YCwgdGhlcmUgd2lsbCBiZSBzb21lIGNvcHlpbmcgbG9naWMgdGhhdCBwdXRzIGRhdGEgZnJvbSB0aGlzIHJlZ2lvbiBpbnRvIHRoZSBgYnZlY2AuIEl0J3MgZ29pbmcgdG8gYmUgZXNzZW50aWFsIHRvIGNvbmZpcm0gdGhlIGZ1bmN0aW9uIGhhbmRsZXMgYm91bmRhcnkgY29uZGl0aW9ucywgbGlrZSB3aGVuIHRoZSB0b3RhbCBzaXplIHRvIGNvcHkgaXMgbGVzcyB0aGFuIHRoZSBjYXBhY2l0eSBvZiB0aGUgYGJ2ZWNgLCBvciB3aGVuIGEgc2luZ2xlIGBpb3ZgIGlzIGxhcmdlciB0aGFuIHJlbWFpbmluZyBzcGFjZSB3aXRoaW4gdGhlIGRlc3RpbmF0aW9uLiBXaGF0IGFib3V0IGVycm9yIGhhbmRsaW5nLCB0b28/IEhvdyBhcmUgYW55IHBhcnRpYWwgd3JpdGVzIG9yIGVycm9ycyBmcm9tIHRoZSB1bmRlcmx5aW5nIHN0b3JhZ2UgZGVhbHQgd2l0aD9cblxuSSdtIGFsc28gY3VyaW91cyBhYm91dCB0aGUgbG93LWxldmVsIGRhdGEgc3RydWN0dXJlcyB1c2VkLiBJJ20gaG9waW5nIHRvIHNlZSBhIHNvbGlkIGltcGxlbWVudGF0aW9uIHRoYXQgYXZvaWRzIHVubmVjZXNzYXJ5IG92ZXJoZWFkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODU3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMjE6MTM6MTkuMjgwMjQzOTg1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpb191cmluZy9yc3JjLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ3NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQ3NTpcXHRzdGF0aWMgaW50IGlvX3ZlY19maWxsX2J2ZWMoaW50IGRkaXIsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4xNDc2OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBpb19tYXBwZWRfdWJ1ZiAqaW11LFxcbjE0Nzc6XFx0XFx0XFx0XFx0XFx0c3RydWN0IGlvdmVjICppb3ZlYywgdW5zaWduZWQgbnJfaW92cyxcXG4xNDc4OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBpb3VfdmVjICp2ZWMpXFxuMTQ3OTpcXHR7XFxuMTQ4MDpcXHRcXHR1bnNpZ25lZCBsb25nIGZvbGlvX3NpemUgPSAxIFxcdTAwM2NcXHUwMDNjIGltdS1cXHUwMDNlZm9saW9fc2hpZnQ7XFxuMTQ4MTpcXHRcXHR1bnNpZ25lZCBsb25nIGZvbGlvX21hc2sgPSBmb2xpb19zaXplIC0gMTtcXG4xNDgyOlxcdFxcdHN0cnVjdCBiaW9fdmVjICpyZXNfYnZlYyA9IHZlYy1cXHUwMDNlYnZlYztcXG4xNDgzOlxcdFxcdHNpemVfdCB0b3RhbF9sZW4gPSAwO1xcbjE0ODQ6XFx0XFx0dW5zaWduZWQgYnZlY19pZHggPSAwO1xcbjE0ODU6XFx0XFx0dW5zaWduZWQgaW92X2lkeDtcXG4xNDg2OlxcdFxcbjE0ODc6XFx0XFx0Zm9yIChpb3ZfaWR4ID0gMDsgaW92X2lkeCBcXHUwMDNjIG5yX2lvdnM7IGlvdl9pZHgrKykge1xcbjE0ODg6XFx0XFx0XFx0c2l6ZV90IGlvdl9sZW4gPSBpb3ZlY1tpb3ZfaWR4XS5pb3ZfbGVuO1xcbjE0ODk6XFx0XFx0XFx0dTY0IGJ1Zl9hZGRyID0gKHU2NCkodWludHB0cl90KWlvdmVjW2lvdl9pZHhdLmlvdl9iYXNlO1xcbjE0OTA6XFx0XFx0XFx0c3RydWN0IGJpb192ZWMgKnNyY19idmVjO1xcbjE0OTE6XFx0XFx0XFx0c2l6ZV90IG9mZnNldDtcXG4xNDkyOlxcdFxcdFxcdGludCByZXQ7XFxuMTQ5MzpcXHRcXG4xNDk0OlxcdFxcdFxcdHJldCA9IHZhbGlkYXRlX2ZpeGVkX3JhbmdlKGJ1Zl9hZGRyLCBpb3ZfbGVuLCBpbXUpO1xcbjE0OTU6XFx0XFx0XFx0aWYgKHVubGlrZWx5KHJldCkpXFxuMTQ5NjpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE0OTc6XFx0XFxuMTQ5ODpcXHRcXHRcXHRpZiAodW5saWtlbHkoIWlvdl9sZW4pKVxcbjE0OTk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMTUwMDpcXHRcXHRcXHRpZiAodW5saWtlbHkoY2hlY2tfYWRkX292ZXJmbG93KHRvdGFsX2xlbiwgaW92X2xlbiwgXFx1MDAyNnRvdGFsX2xlbikpKVxcbjE1MDE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FT1ZFUkZMT1c7XFxuMTUwMjpcXHRcXG4xNTAzOlxcdFxcdFxcdG9mZnNldCA9IGJ1Zl9hZGRyIC0gaW11LVxcdTAwM2V1YnVmO1xcbjE1MDQ6XFx0XFx0XFx0LypcXG4xNTA1OlxcdFxcdFxcdCAqIE9ubHkgdGhlIGZpcnN0IGJ2ZWMgY2FuIGhhdmUgbm9uIHplcm8gYnZfb2Zmc2V0LCBhY2NvdW50IGl0XFxuMTUwNjpcXHRcXHRcXHQgKiBoZXJlIGFuZCB3b3JrIHdpdGggZnVsbCBmb2xpb3MgYmVsb3cuXFxuMTUwNzpcXHRcXHRcXHQgKi9cXG4xNTA4OlxcdFxcdFxcdG9mZnNldCArPSBpbXUtXFx1MDAzZWJ2ZWNbMF0uYnZfb2Zmc2V0O1xcbjE1MDk6XFx0XFxuMTUxMDpcXHRcXHRcXHRzcmNfYnZlYyA9IGltdS1cXHUwMDNlYnZlYyArIChvZmZzZXQgXFx1MDAzZVxcdTAwM2UgaW11LVxcdTAwM2Vmb2xpb19zaGlmdCk7XFxuMTUxMTpcXHRcXHRcXHRvZmZzZXQgXFx1MDAyNj0gZm9saW9fbWFzaztcXG4xNTEyOlxcdFxcbjE1MTM6XFx0XFx0XFx0Zm9yICg7IGlvdl9sZW47IG9mZnNldCA9IDAsIGJ2ZWNfaWR4KyssIHNyY19idmVjKyspIHtcXG4xNTE0OlxcdFxcdFxcdFxcdHNpemVfdCBzZWdfc2l6ZSA9IG1pbl90KHNpemVfdCwgaW92X2xlbixcXG4xNTE1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdGZvbGlvX3NpemUgLSBvZmZzZXQpO1xcbjE1MTY6XFx0XFxuMTUxNzpcXHRcXHRcXHRcXHRidmVjX3NldF9wYWdlKFxcdTAwMjZyZXNfYnZlY1tidmVjX2lkeF0sXFxuMTUxODpcXHRcXHRcXHRcXHRcXHQgICAgICBzcmNfYnZlYy1cXHUwMDNlYnZfcGFnZSwgc2VnX3NpemUsIG9mZnNldCk7XFxuMTUxOTpcXHRcXHRcXHRcXHRpb3ZfbGVuIC09IHNlZ19zaXplO1xcbjE1MjA6XFx0XFx0XFx0fVxcbjE1MjE6XFx0XFx0fVxcbjE1MjI6XFx0XFx0aWYgKHRvdGFsX2xlbiBcXHUwMDNlIE1BWF9SV19DT1VOVClcXG4xNTIzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE1MjQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjEzOjE5LjI4MDQxMzc0NVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjEzMzQ4NTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgTWVtb3J5IFNhZmV0eSBJc3N1ZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBpb192ZWNfZmlsbF9idmVjYCBmdW5jdGlvbiBhbmQgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgKmlmKiBgbnJfc2Vnc2AgaXMgc2V0IHVwIGNvcnJlY3RseS4gU3BlY2lmaWNhbGx5LCB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciB3cml0aW5nIGRhdGEgaW50byBgcmVzX2J2ZWNbYnZlY19pZHhdYC4gVGhlIGNyaXRpY2FsIHBvaW50IGhlcmUgaXMgdGhhdCBpZiBgbnJfc2Vnc2AgaXMgdG9vIHNtYWxsLCB0aGVuIGByZXNfYnZlY2AgLSB3aGljaCwgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBpcyBlc3NlbnRpYWxseSBgdmVjLVx1MDAzZWJ2ZWNgIC0gd2lsbCBiZSB1bmRlcnNpemVkLiBDb25zZXF1ZW50bHksIGBidmVjX2lkeGAgaXMgZ29pbmcgdG8gd2FuZGVyIGJleW9uZCB0aGUgYm91bmRzIG9mIHRoYXQgYXJyYXksIGFuZCBiYW0sIHdlIGhhdmUgYW4gb3V0LW9mLWJvdW5kcyB3cml0ZS5cblxuRm9ydHVuYXRlbHksIGl0IGxvb2tzIGxpa2UgS0FTQU4gc2hvdWxkIGhhdmUgdGhpcyBjb3ZlcmVkLiBJdCdsbCBkZXRlY3QgdGhhdCB3cml0ZSwgc28gd2UncmUgZ29vZCB0aGVyZS4gQW5kIGFzIGZhciBhcyBJIGNhbiB0ZWxsLCB0aGVyZSdzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgaW4gdGhlIHByb2Nlc3MuXG5cblRodXMsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcsIEtNU0FOIHNob3VsZG4ndCBiZSBuZWNlc3NhcnkgaGVyZS5cblxuQnV0LCB5b3Uga25vdyBtZSwgSSBsaWtlIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gSnVzdCB0byBiZSBjb21wbGV0ZWx5IHRob3JvdWdoLCBsZXQgbWUgcXVpY2tseSBnbGFuY2UgYXQgYGlvX3ZlY19maWxsX2tlcm5fYnZlY2AganVzdCB0byBiZSBvbmUgaHVuZHJlZCBwZXJjZW50IHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBHb3R0YSBtYWtlIHN1cmUgd2UncmUgY292ZXJpbmcgYWxsIG91ciBiYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzExNiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDIxOjEzOjIzLjQ5Mzc2NDIwMVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDcwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW9fdXJpbmcvcnNyYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1MjUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE1MjU6XFx0XFx0aW92X2l0ZXJfYnZlYyhpdGVyLCBkZGlyLCByZXNfYnZlYywgYnZlY19pZHgsIHRvdGFsX2xlbik7XFxuMTUyNjpcXHRcXHRyZXR1cm4gMDtcXG4xNTI3OlxcdH1cXG4xNTI4OlxcdFxcbjE1Mjk6XFx0c3RhdGljIGludCBpb19lc3RpbWF0ZV9idmVjX3NpemUoc3RydWN0IGlvdmVjICppb3YsIHVuc2lnbmVkIG5yX2lvdnMsXFxuMTUzMDpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGlvX21hcHBlZF91YnVmICppbXUpXFxuMTUzMTpcXHR7XFxuMTUzMjpcXHRcXHR1bnNpZ25lZCBzaGlmdCA9IGltdS1cXHUwMDNlZm9saW9fc2hpZnQ7XFxuMTUzMzpcXHRcXHRzaXplX3QgbWF4X3NlZ3MgPSAwO1xcbjE1MzQ6XFx0XFx0dW5zaWduZWQgaTtcXG4xNTM1OlxcdFxcbjE1MzY6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX2lvdnM7IGkrKykge1xcbjE1Mzc6XFx0XFx0XFx0bWF4X3NlZ3MgKz0gKGlvdltpXS5pb3ZfbGVuIFxcdTAwM2VcXHUwMDNlIHNoaWZ0KSArIDI7XFxuMTUzODpcXHRcXHRcXHRpZiAobWF4X3NlZ3MgXFx1MDAzZSBJTlRfTUFYKVxcbjE1Mzk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FT1ZFUkZMT1c7XFxuMTU0MDpcXHRcXHR9XFxuMTU0MTpcXHRcXHRyZXR1cm4gbWF4X3NlZ3M7XFxuMTU0MjpcXHR9XFxuMTU0MzpcXHRcXG4xNTQ0OlxcdHN0YXRpYyBpbnQgaW9fdmVjX2ZpbGxfa2Vybl9idmVjKGludCBkZGlyLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuMTU0NTpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGlvX21hcHBlZF91YnVmICppbXUsXFxuMTU0NjpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGlvdmVjICppb3ZlYywgdW5zaWduZWQgbnJfaW92cyxcXG4xNTQ3OlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgaW91X3ZlYyAqdmVjKVxcbjE1NDg6XFx0e1xcbjE1NDk6XFx0XFx0Y29uc3Qgc3RydWN0IGJpb192ZWMgKnNyY19idmVjID0gaW11LVxcdTAwM2VidmVjO1xcbjE1NTA6XFx0XFx0c3RydWN0IGJpb192ZWMgKnJlc19idmVjID0gdmVjLVxcdTAwM2VidmVjO1xcbjE1NTE6XFx0XFx0dW5zaWduZWQgcmVzX2lkeCA9IDA7XFxuMTU1MjpcXHRcXHRzaXplX3QgdG90YWxfbGVuID0gMDtcXG4xNTUzOlxcdFxcdHVuc2lnbmVkIGlvdl9pZHg7XFxuMTU1NDpcXHRcXG4xNTU1OlxcdFxcdGZvciAoaW92X2lkeCA9IDA7IGlvdl9pZHggXFx1MDAzYyBucl9pb3ZzOyBpb3ZfaWR4KyspIHtcXG4xNTU2OlxcdFxcdFxcdHNpemVfdCBvZmZzZXQgPSAoc2l6ZV90KSh1aW50cHRyX3QpaW92ZWNbaW92X2lkeF0uaW92X2Jhc2U7XFxuMTU1NzpcXHRcXHRcXHRzaXplX3QgaW92X2xlbiA9IGlvdmVjW2lvdl9pZHhdLmlvdl9sZW47XFxuMTU1ODpcXHRcXHRcXHRzdHJ1Y3QgYnZlY19pdGVyIGJpID0ge1xcbjE1NTk6XFx0XFx0XFx0XFx0LmJpX3NpemUgICAgICAgID0gb2Zmc2V0ICsgaW92X2xlbixcXG4xNTYwOlxcdFxcdFxcdH07XFxuMTU2MTpcXHRcXHRcXHRzdHJ1Y3QgYmlvX3ZlYyBidjtcXG4xNTYyOlxcdFxcbjE1NjM6XFx0XFx0XFx0YnZlY19pdGVyX2FkdmFuY2Uoc3JjX2J2ZWMsIFxcdTAwMjZiaSwgb2Zmc2V0KTtcXG4xNTY0OlxcdFxcdFxcdGZvcl9lYWNoX21wX2J2ZWMoYnYsIHNyY19idmVjLCBiaSwgYmkpXFxuMTU2NTpcXHRcXHRcXHRcXHRyZXNfYnZlY1tyZXNfaWR4KytdID0gYnY7XFxuMTU2NjpcXHRcXHRcXHR0b3RhbF9sZW4gKz0gaW92X2xlbjtcXG4xNTY3OlxcdFxcdH1cXG4xNTY4OlxcdFxcdGlvdl9pdGVyX2J2ZWMoaXRlciwgZGRpciwgcmVzX2J2ZWMsIHJlc19pZHgsIHRvdGFsX2xlbik7XFxuMTU2OTpcXHRcXHRyZXR1cm4gMDtcXG4xNTcwOlxcdH1cXG4xNTcxOlxcdFxcbjE1NzI6XFx0c3RhdGljIGludCBpb3Zfa2Vybl9idmVjX3NpemUoY29uc3Qgc3RydWN0IGlvdmVjICppb3YsXFxuMTU3MzpcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgaW9fbWFwcGVkX3VidWYgKmltdSxcXG4xNTc0OlxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCAqbnJfc2VnKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMToxMzoyMy40OTM4NzIzNTFaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY5NjIzNzgyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCdWcgYW5kIHRoZSBBcHByb3ByaWF0ZSBUb29saW5nKipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgYXQgdGhpcyBjb2RlLCBhbmQgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCBgcmVzX2J2ZWNbcmVzX2lkeCsrXSA9IGJ2O2Agd2lsbCBjYXVzZSBhbiBvdXQtb2YtYm91bmRzIHdyaXRlIGlmIGByZXNfYnZlY2AgaXNuJ3QgYmlnIGVub3VnaC4gVGhhdCdzIHRleHRib29rIGJ1ZmZlciBvdmVyZmxvdyB0ZXJyaXRvcnkuIE5vIGFtYmlndWl0eSB0aGVyZS4gQW5kIGhvbmVzdGx5LCBLQVNBTiBpcyB0aGUgcGVyZmVjdCB0b29sIGZvciB0aGlzIHBhcnRpY3VsYXIgam9iLiBJdCdzIGRlc2lnbmVkIHRvIG5haWwgdGhlc2Uga2luZHMgb2YgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLiBObyBuZWVkIHRvIG92ZXJjb21wbGljYXRlIHRoaW5ncy5cblxuTGV0IG1lIGJyZWFrIGRvd24gdGhlIHJlYXNvbmluZyBmb3IgdGhlIHJlY29yZC4gVGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGR1cmluZyB0aGUgYG5yX3NlZ3NgIGNhbGN1bGF0aW9uIHdpdGhpbiBgaW9faW1wb3J0X3JlZ192ZWNgLiBFc3NlbnRpYWxseSwgaWYgYG5yX3NlZ3MgKiBzaXplb2Yoc3RydWN0IGJpb192ZWMpYCBvdmVyZmxvd3MsIGl0IGVmZmVjdGl2ZWx5IHJlZHVjZXMgdGhlIHZhbHVlIG9mIGBucl9zZWdzYCBiZWxvdyB0aGUgYWN0dWFsIHJlcXVpcmVtZW50LiBDb25zZXF1ZW50bHksIGB2ZWMtXHUwMDNlYnZlY2AgZW5kcyB1cCB1bmRlci1hbGxvY2F0ZWQgb3IgaW5zdWZmaWNpZW50bHkgcmVhbGxvY2F0ZWQgd2l0aGluIGBpb192ZWNfcmVhbGxvY2AuIFRoZW4sIGZ1cnRoZXIgZG93biB0aGUgbGluZSwgZWl0aGVyIGBpb192ZWNfZmlsbF9idmVjYCBvciBgaW9fdmVjX2ZpbGxfa2Vybl9idmVjYCBhdHRlbXB0IHRvIHdyaXRlIHBhc3QgdGhlIGFsbG9jYXRlZCBidWZmZXIgb2YgYHZlYy1cdTAwM2VidmVjYCwgd2hpY2ggaXMgYSBjbGFzc2ljIGhlYXAgb3V0LW9mLWJvdW5kcyB3cml0ZSDigJMgYSBidWZmZXIgb3ZlcmZsb3csIHBsYWluIGFuZCBzaW1wbGUuIEtBU0FOIGlzIGJ1aWx0IHRvIGNhdGNoIHRoaXMga2luZCBvZiB0aGluZyByZWxpYWJseS5cblxuVGhpcyBpc24ndCBhIHNpdHVhdGlvbiB3aGVyZSB3ZSdyZSBkZWFsaW5nIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnksIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYmVpbmcgdXNlZC4gVGhvc2UgYXJlIHRoZSB0eXBlcyBvZiBzY2VuYXJpb3Mgd2hlcmUgS01TQU4gbWlnaHQgY29tZSBpbnRvIHBsYXkuIEJ1dCBoZXJlPyBObywgdGhpcyBpcyBwdXJlbHkgYSBidWZmZXIgb3ZlcmZsb3cgaXNzdWUuIFRoZXJlZm9yZSwgdGhlcmUncyBubyBqdXN0aWZpY2F0aW9uIGZvciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIEtBU0FOIHdpbGwgYmUgc3VmZmljaWVudCBhbmQgc2hvdWxkIGNhdGNoIHRoZSBlcnJvci5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQxNywiT3V0cHV0VG9rZW5zIjoyMDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQyMToxMzozMC4xOTAxMTIzOTFaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gdGhlIGNhbGN1bGF0aW9uIG9mIGBucl9zZWdzYCBpbiBgaW9faW1wb3J0X3JlZ192ZWNgLiBJZiBgbnJfc2VncyAqIHNpemVvZihzdHJ1Y3QgYmlvX3ZlYylgIG92ZXJmbG93cywgYG5yX3NlZ3NgIGJlY29tZXMgc21hbGxlciB0aGFuIHJlcXVpcmVkLiBUaGlzIGxlYWRzIHRvIGFuIHVuZGVyLWFsbG9jYXRpb24gb3IgaW5zdWZmaWNpZW50IHJlYWxsb2NhdGlvbiBvZiBgdmVjLVxcdTAwM2VidmVjYCBpbiBgaW9fdmVjX3JlYWxsb2NgLiBTdWJzZXF1ZW50bHksIGBpb192ZWNfZmlsbF9idmVjYCBvciBgaW9fdmVjX2ZpbGxfa2Vybl9idmVjYCB3aWxsIHdyaXRlIG91dCBvZiBib3VuZHMgaW50byB0aGUgYHZlYy1cXHUwMDNlYnZlY2AgYXJyYXkuIFRoaXMgaXMgYSBjbGFzc2ljIGhlYXAgb3V0LW9mLWJvdW5kcyB3cml0ZSAoYnVmZmVyIG92ZXJmbG93KSwgd2hpY2ggaXMgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBpbmZvLWxlYWssIG9yIHVzZSBvZiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbnZvbHZlZCBpbiB0aGlzIGJ1Zy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIHRoZSBjYWxjdWxhdGlvbiBvZiBgbnJfc2Vnc2AgaW4gYGlvX2ltcG9ydF9yZWdfdmVjYC4gSWYgYG5yX3NlZ3MgKiBzaXplb2Yoc3RydWN0IGJpb192ZWMpYCBvdmVyZmxvd3MsIGBucl9zZWdzYCBiZWNvbWVzIHNtYWxsZXIgdGhhbiByZXF1aXJlZC4gVGhpcyBsZWFkcyB0byBhbiB1bmRlci1hbGxvY2F0aW9uIG9yIGluc3VmZmljaWVudCByZWFsbG9jYXRpb24gb2YgYHZlYy1cXHUwMDNlYnZlY2AgaW4gYGlvX3ZlY19yZWFsbG9jYC4gU3Vic2VxdWVudGx5LCBgaW9fdmVjX2ZpbGxfYnZlY2Agb3IgYGlvX3ZlY19maWxsX2tlcm5fYnZlY2Agd2lsbCB3cml0ZSBvdXQgb2YgYm91bmRzIGludG8gdGhlIGB2ZWMtXFx1MDAzZWJ2ZWNgIGFycmF5LiBUaGlzIGlzIGEgY2xhc3NpYyBoZWFwIG91dC1vZi1ib3VuZHMgd3JpdGUgKGJ1ZmZlciBvdmVyZmxvdyksIHdoaWNoIGlzIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgaW5mby1sZWFrLCBvciB1c2Ugb2YgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW52b2x2ZWQgaW4gdGhpcyBidWcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowb97pn[1] Phase: Succeeded StartedAt: 2026-08-12 21:13:41 +0000 UTC FinishedAt: 2026-08-12 21:13:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb97pn[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-12 21:13:41 +0000 UTC FinishedAt: 2026-08-12 21:13:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb97pn[2] Phase: Succeeded StartedAt: 2026-08-12 21:13:41 +0000 UTC FinishedAt: 2026-08-12 22:01:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb97pn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_import_reg_vec","io_uring_cmd_import_fixed_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"2ca1a88a-df4b-4686-9500-f355a2796d8a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-12 21:13:41 +0000 UTC FinishedAt: 2026-08-12 22:01:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_import_reg_vec","io_uring_cmd_import_fixed_vec"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"2ca1a88a-df4b-4686-9500-f355a2796d8a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowb97pn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_import_reg_vec","io_uring_cmd_import_fixed_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"2ca1a88a-df4b-4686-9500-f355a2796d8a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-12 21:13:41 +0000 UTC FinishedAt: 2026-08-12 21:13:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb97pn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_import_reg_vec","io_uring_cmd_import_fixed_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"2ca1a88a-df4b-4686-9500-f355a2796d8a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-12 21:13:41 +0000 UTC FinishedAt: 2026-08-12 21:13:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowb97pn/series-workflowb97pn-convert-artifact-1634926026/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb97pn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_import_reg_vec","io_uring_cmd_import_fixed_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"2ca1a88a-df4b-4686-9500-f355a2796d8a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-12 21:13:51 +0000 UTC FinishedAt: 2026-08-12 21:36:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb97pn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_import_reg_vec","io_uring_cmd_import_fixed_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"2ca1a88a-df4b-4686-9500-f355a2796d8a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-12 21:13:51 +0000 UTC FinishedAt: 2026-08-12 21:36:33 +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:*4791f137-0744-42de-a0ca-3e286a4bc957,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-workflowb97pn/series-workflowb97pn-convert-artifact-1634926026/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": "cd5ff5ca-9f97-40b4-9538-2ad547de5d3d", "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-workflowb97pn/series-workflowb97pn-build-action-2496107960/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb97pn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_import_reg_vec","io_uring_cmd_import_fixed_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"2ca1a88a-df4b-4686-9500-f355a2796d8a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-12 21:13:51 +0000 UTC FinishedAt: 2026-08-12 21:36:07 +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:*4791f137-0744-42de-a0ca-3e286a4bc957,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-workflowb97pn/series-workflowb97pn-convert-artifact-1634926026/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": "cd5ff5ca-9f97-40b4-9538-2ad547de5d3d", "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-workflowb97pn/series-workflowb97pn-build-action-2496107960/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb97pn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_import_reg_vec","io_uring_cmd_import_fixed_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"2ca1a88a-df4b-4686-9500-f355a2796d8a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-12 21:36:33 +0000 UTC FinishedAt: 2026-08-12 21:36:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb97pn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_import_reg_vec","io_uring_cmd_import_fixed_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"2ca1a88a-df4b-4686-9500-f355a2796d8a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-12 21:36:33 +0000 UTC FinishedAt: 2026-08-12 21:36:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb97pn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_import_reg_vec","io_uring_cmd_import_fixed_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"2ca1a88a-df4b-4686-9500-f355a2796d8a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-12 21:36:33 +0000 UTC FinishedAt: 2026-08-12 21:36:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb97pn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_import_reg_vec","io_uring_cmd_import_fixed_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"2ca1a88a-df4b-4686-9500-f355a2796d8a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-12 21:36:33 +0000 UTC FinishedAt: 2026-08-12 21:36:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"2ca1a88a-df4b-4686-9500-f355a2796d8a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowb97pn/series-workflowb97pn-convert-artifact-35384933/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb97pn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_import_reg_vec","io_uring_cmd_import_fixed_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"2ca1a88a-df4b-4686-9500-f355a2796d8a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-12 21:36:43 +0000 UTC FinishedAt: 2026-08-12 21:38:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb97pn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_import_reg_vec","io_uring_cmd_import_fixed_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"2ca1a88a-df4b-4686-9500-f355a2796d8a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-12 21:36:43 +0000 UTC FinishedAt: 2026-08-12 21:38:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cd5ff5ca-9f97-40b4-9538-2ad547de5d3d,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-workflowb97pn/series-workflowb97pn-build-action-2496107960/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-workflowb97pn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_import_reg_vec","io_uring_cmd_import_fixed_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"2ca1a88a-df4b-4686-9500-f355a2796d8a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-12 21:38:44 +0000 UTC FinishedAt: 2026-08-12 21:38:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb97pn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_import_reg_vec","io_uring_cmd_import_fixed_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"2ca1a88a-df4b-4686-9500-f355a2796d8a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-12 21:38:44 +0000 UTC FinishedAt: 2026-08-12 21:38:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb97pn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_import_reg_vec","io_uring_cmd_import_fixed_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"2ca1a88a-df4b-4686-9500-f355a2796d8a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-12 21:38:44 +0000 UTC FinishedAt: 2026-08-12 21:56:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb97pn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_import_reg_vec","io_uring_cmd_import_fixed_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"2ca1a88a-df4b-4686-9500-f355a2796d8a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-12 21:38:44 +0000 UTC FinishedAt: 2026-08-12 21:56:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*4791f137-0744-42de-a0ca-3e286a4bc957,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-workflowb97pn/series-workflowb97pn-convert-artifact-35384933/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": "d5cd8dcc-cbb7-4d2b-b8a4-afebf230458b", "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-workflowb97pn/series-workflowb97pn-build-action-2657010353/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb97pn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_import_reg_vec","io_uring_cmd_import_fixed_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"2ca1a88a-df4b-4686-9500-f355a2796d8a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-12 21:38:44 +0000 UTC FinishedAt: 2026-08-12 21:56:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*4791f137-0744-42de-a0ca-3e286a4bc957,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-workflowb97pn/series-workflowb97pn-convert-artifact-35384933/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": "d5cd8dcc-cbb7-4d2b-b8a4-afebf230458b", "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-workflowb97pn/series-workflowb97pn-build-action-2657010353/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb97pn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_import_reg_vec","io_uring_cmd_import_fixed_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"2ca1a88a-df4b-4686-9500-f355a2796d8a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-12 21:56:26 +0000 UTC FinishedAt: 2026-08-12 21:56:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb97pn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_import_reg_vec","io_uring_cmd_import_fixed_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"2ca1a88a-df4b-4686-9500-f355a2796d8a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-12 21:56:26 +0000 UTC FinishedAt: 2026-08-12 21:56:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb97pn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_import_reg_vec","io_uring_cmd_import_fixed_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"2ca1a88a-df4b-4686-9500-f355a2796d8a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-12 21:56:26 +0000 UTC FinishedAt: 2026-08-12 21:58:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb97pn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_import_reg_vec","io_uring_cmd_import_fixed_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"2ca1a88a-df4b-4686-9500-f355a2796d8a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-12 21:56:26 +0000 UTC FinishedAt: 2026-08-12 21:58:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d5cd8dcc-cbb7-4d2b-b8a4-afebf230458b,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-workflowb97pn/series-workflowb97pn-build-action-2657010353/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-workflowb97pn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_import_reg_vec","io_uring_cmd_import_fixed_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"2ca1a88a-df4b-4686-9500-f355a2796d8a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-12 21:58:29 +0000 UTC FinishedAt: 2026-08-12 22:01:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb97pn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_import_reg_vec","io_uring_cmd_import_fixed_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"2ca1a88a-df4b-4686-9500-f355a2796d8a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-12 21:58:29 +0000 UTC FinishedAt: 2026-08-12 22:01:23 +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"],"focus":["io_uring"],"focus_symbols":["io_import_reg_vec","io_uring_cmd_import_fixed_vec"],"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:*cd5ff5ca-9f97-40b4-9538-2ad547de5d3d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d5cd8dcc-cbb7-4d2b-b8a4-afebf230458b,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-workflowb97pn/series-workflowb97pn-build-action-2496107960/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-workflowb97pn/series-workflowb97pn-build-action-2657010353/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowb97pn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_import_reg_vec","io_uring_cmd_import_fixed_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"2ca1a88a-df4b-4686-9500-f355a2796d8a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-12 21:58:29 +0000 UTC FinishedAt: 2026-08-12 21:58:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb97pn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_import_reg_vec","io_uring_cmd_import_fixed_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"2ca1a88a-df4b-4686-9500-f355a2796d8a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-12 21:58:29 +0000 UTC FinishedAt: 2026-08-12 21:58:34 +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"],"focus":["io_uring"],"focus_symbols":["io_import_reg_vec","io_uring_cmd_import_fixed_vec"],"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-workflowb97pn/series-workflowb97pn-convert-artifact-909588970/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb97pn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_import_reg_vec","io_uring_cmd_import_fixed_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"2ca1a88a-df4b-4686-9500-f355a2796d8a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-12 21:58:29 +0000 UTC FinishedAt: 2026-08-12 21:58:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb97pn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_import_reg_vec","io_uring_cmd_import_fixed_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"2ca1a88a-df4b-4686-9500-f355a2796d8a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-12 21:58:29 +0000 UTC FinishedAt: 2026-08-12 21:58:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb97pn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_import_reg_vec","io_uring_cmd_import_fixed_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"2ca1a88a-df4b-4686-9500-f355a2796d8a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-12 21:58:29 +0000 UTC FinishedAt: 2026-08-12 21:58:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb97pn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_import_reg_vec","io_uring_cmd_import_fixed_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"2ca1a88a-df4b-4686-9500-f355a2796d8a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-12 21:58:39 +0000 UTC FinishedAt: 2026-08-12 22:01:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb97pn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["io_uring"],"focus_symbols":["io_import_reg_vec","io_uring_cmd_import_fixed_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"30df3ab3c92d0e7854c54df6ae66f4aa6eb5b3d2","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"2ca1a88a-df4b-4686-9500-f355a2796d8a","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-12 21:58:39 +0000 UTC FinishedAt: 2026-08-12 22:01:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cd5ff5ca-9f97-40b4-9538-2ad547de5d3d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d5cd8dcc-cbb7-4d2b-b8a4-afebf230458b,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-workflowb97pn/series-workflowb97pn-build-action-2496107960/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-workflowb97pn/series-workflowb97pn-build-action-2657010353/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-workflowb97pn/series-workflowb97pn-convert-artifact-909588970/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,}