Name: series-workflowxfhtl Phase: Succeeded StartedAt: 2026-07-31 11:15:46 +0000 UTC FinishedAt: 2026-07-31 14:58:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfhtl[0] Phase: Succeeded StartedAt: 2026-07-31 11:15:46 +0000 UTC FinishedAt: 2026-07-31 11:19:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfhtl[0].run-triage Phase: Succeeded StartedAt: 2026-07-31 11:15:46 +0000 UTC FinishedAt: 2026-07-31 11:19:12 +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": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM_USER", "XFRM_MIGRATE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM_USER", "XFRM_MIGRATE" ], "series_id": "769c6dac-07ab-4f4e-9d18-0d779fa74dec" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "xfrm_do_migrate_state" ], "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+CgkJCTx0ZD4yMDI2LzA3LzMxIDExOjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtYRlJNX01JR1JBVEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnJtX2RvX21pZ3JhdGVfc3RhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gUkNVIGlzc3VlIGJ5IGFkZGluZyBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCBhcm91bmQgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBpbiBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFhGUk0gbmV0bGluayBpbnRlcmZhY2UuIFRoZSBtb2RpZmllZCBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBYRlJNX01TR19NSUdSQVRFX1NUQVRFYCBuZXRsaW5rIG1lc3NhZ2UsIGhhbmRsZWQgYnkgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTE6MTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3OTIwNDY3MzI0N2YyMGNmMjk3NjUyZGE1MWIwZDI5YWQ5YmM0YzBkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMzEgMTE6MTc6MzkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV91c2VyLmMgYi9uZXQveGZybS94ZnJtX3VzZXIuY1xuaW5kZXggZDZkYjYzMzA0YmE2Yi4uMGJhMDYxNGQ2NTBmMyAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1fdXNlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX3VzZXIuY1xuQEAgLTMzMzcsNyAmIzQzOzMzMzcsMTEgQEAgc3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG4tXHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9NSUdSQVRFKTtcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0ZXJyID0geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9NSUdSQVRFKTtcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gc3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTE6MTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtYRlJNX01JR1JBVEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnJtX2RvX21pZ3JhdGVfc3RhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gUkNVIGlzc3VlIGJ5IGFkZGluZyBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCBhcm91bmQgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBpbiBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFhGUk0gbmV0bGluayBpbnRlcmZhY2UuIFRoZSBtb2RpZmllZCBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBYRlJNX01TR19NSUdSQVRFX1NUQVRFYCBuZXRsaW5rIG1lc3NhZ2UsIGhhbmRsZWQgYnkgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3OTIwNDY3MzI0N2YyMGNmMjk3NjUyZGE1MWIwZDI5YWQ5YmM0YzBkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMzEgMTE6MTc6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3VzZXIuYyBiL25ldC94ZnJtL3hmcm1fdXNlci5jCmluZGV4IGQ2ZGI2MzMwNGJhNmIuLjBiYTA2MTRkNjUwZjMgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fdXNlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1fdXNlci5jCkBAIC0zMzM3LDcgJiM0MzszMzM3LDExIEBAIHN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGUoc3RydWN0IG5ldCAqbmV0LAogCQlyZXR1cm4gZXJyOwogCX0KIAotCXJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX01JR1JBVEUpOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWVyciA9IHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfTUlHUkFURSk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTE6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwMwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDExMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBmb2N1c2luZyBvbiB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB0aGlzIHBhdGNoLCBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipSQ1UgUHJvdGVjdGlvbiBpbiB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZSoqCgpBbHJpZ2h0LCBzbyB0aGUgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYHJjdV9yZWFkX2xvY2soKWAgYW5kIGByY3VfcmVhZF91bmxvY2soKWAgYXJvdW5kIHRoZSBjYWxsIHRvIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgd2l0aGluIHRoZSBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgIGZ1bmN0aW9uLCBsb2NhdGVkIGluIGBuZXQveGZybS94ZnJtX3VzZXIuY2AuIFRoaXMgaW1tZWRpYXRlbHkgc2lnbmFscyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFpbWVkIGF0IGFkZHJlc3NpbmcgZWl0aGVyIGFuIFJDVS1yZWxhdGVkIHdhcm5pbmcgb3IsIG1vcmUgY3JpdGljYWxseSwgYSBwb3RlbnRpYWwgYnVnIHJlbGF0ZWQgdG8gaW1wcm9wZXIgY29uY3VycmVudCBhY2Nlc3MuIFRoZSBmYWN0IHRoYXQgUkNVIHByb3RlY3Rpb24gaXMgYmVpbmcgYWRkZWQgaXMgdGhlIGtleSBpbmRpY2F0b3IgaGVyZTsgaXQgc3VnZ2VzdHMgYSBzdWJ0bGUgcmFjZSBjb25kaXRpb24gY291bGQgZXhpc3Qgd2hlcmUgZGF0YSBhY2Nlc3NlZCB3aXRoaW4gYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBpcyBzdXNjZXB0aWJsZSB0byBtb2RpZmljYXRpb24gdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLgoKTXkgaW1tZWRpYXRlIG5leHQgc3RlcHMsIGdpdmVuIHRoaXMgaXMgYSBuZXR3b3JraW5nIGFuZCBzZWN1cml0eSBjb250ZXh0LCBhcmUgdG8gZGl2ZSBkZWVwZXIuIEZpcnN0LCBJIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGZsb3cuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBleGFjdGx5IGhvdyBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgIHdvcmtzLCBwYXJ0aWN1bGFybHkgaG93IGl0IGludGVyYWN0cyB3aXRoIGB4ZnJtX25sbXNnX211bHRpY2FzdGAuIEFuZCwgc3BlY2lmaWNhbGx5LCBJIG11c3QgbG9vayBjbG9zZWx5IGF0IGhvdyB0aGUgZGF0YSBiZWluZyBzZW50IHZpYSB0aGF0IG11bHRpY2FzdCBjaGFubmVsIGlzIHBvcHVsYXRlZCBhbmQgdXNlZC4gQSBxdWljayBpbnNwZWN0aW9uIG9mIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIHdvdWxkIGJlIGEgZ29vZCBjb21wYW5pb24gdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBleGVjdXRpb24gZmxvdy4KClRoZW4sIGJlZm9yZSBJIGdvIGZ1cnRoZXIsIEkgc2hvdWxkIHZlcmlmeSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBVbmRlcnN0YW5kaW5nIHdoaWNoIGNvbmZpZ3VyYXRpb25zIGVuYWJsZSBvciBkaXNhYmxlIHRoZSByZWxldmFudCBYRlJNIGZlYXR1cmVzIGFyZSBpbXBvcnRhbnQgdG8gY29uc2lkZXIgd2hlbiBldmFsdWF0aW5nIHRoZSBpbXBvcnRhbmNlIG9mIHRoaXMgZml4LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDExOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fc2VuZF9taWdyYXRlX3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmM9MzMwOT1zdGF0aWMgdW5zaWduZWQgaW50IHhmcm1fbWlncmF0ZV9zdGF0ZV9tc2dzaXplKGNvbnN0IHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm0sXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzMyMS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMzMjI6c3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzIzLVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlICp1bSxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zMzQ3PXN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MTAtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNTExOlx0ZXJyID0geGZybV9zZW5kX21pZ3JhdGVfc3RhdGUobmV0LCB1bSwgXHUwMDI2bSwgeGMtXHUwMDNlZGlyLFxubmV0L3hmcm0veGZybV91c2VyLmMtMzUxMi1cdFx0XHRcdCAgICAgIG5saC1cdTAwM2VubG1zZ19waWQsIG5saC1cdTAwM2VubG1zZ19zZXEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDExOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NzkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqS2NvbmZpZyBEaXZlIGZvciB4ZnJtX3VzZXIuYyoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBLY29uZmlnIGFnYWluLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBzdXJyb3VuZGluZyBgbmV0L3hmcm0veGZybV91c2VyLmNgLiBUaGlzIGZpbGUgaXMgY3J1Y2lhbCBmb3IgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBYRlJNIHN1YnN5c3RlbSwgc28gYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgaXRzIGNvbmZpZ3VyYXRpb24gaXMgZXNzZW50aWFsIGZvciwgc2F5LCB0cm91Ymxlc2hvb3RpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gcG9saWN5IG1hbmFnZW1lbnQsIGtleWluZywgb3Igb3RoZXIgdXNlci1zcGFjZSBjb250cm9sIHBsYW5lIGVsZW1lbnRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRyaWdnZXJzIGl0cyBpbmNsdXNpb24sIHdoYXQgZmVhdHVyZXMgaXQgdW5sb2NrcywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciByZWxhdGVkIG1vZHVsZXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOgoKKiAgICoqRGVwZW5kZW5jaWVzOioqIFdoYXQgb3RoZXIgS2NvbmZpZyBzeW1ib2xzIG5lZWQgdG8gYmUgZW5hYmxlZCBiZWZvcmUgYHhmcm1fdXNlci5jYCBldmVuIGJlY29tZXMgYSBwb3NzaWJpbGl0eT8gQXJlIHRoZXJlIGNvcmUgbmV0d29ya2luZyBzdGFjayBwcmVyZXF1aXNpdGVzLCBzZWN1cml0eSBmZWF0dXJlcywgb3Igb3RoZXIgWEZSTSBjb21wb25lbnRzIHRoYXQgaXQgcmVsaWVzIHVwb24/CiogICAqKkNvbmZpZ3VyYXRpb24gT3B0aW9uczoqKiBEb2VzIHRoZSBLY29uZmlnIGV4cG9zZSBhbnkgYnVpbGQtdGltZSBwYXJhbWV0ZXJzIHNwZWNpZmljIHRvIGB4ZnJtX3VzZXIuY2A/IEFyZSB0aGVyZSBvcHRpb25zIHRvIGVuYWJsZSBvciBkaXNhYmxlIGNlcnRhaW4gdXNlci1zcGFjZSBmdW5jdGlvbmFsaXRpZXMsIGxpa2Ugc3BlY2lmaWMgcHJvdG9jb2xzIG9yIGNvbnRyb2wgbWVjaGFuaXNtcz8gV2hhdCBncmFudWxhciBrbm9icyBhcmUgYXZhaWxhYmxlLCBpZiBhbnk/CiogICAqKkludGVyYWN0aW9uIHdpdGggb3RoZXIgbW9kdWxlczoqKiBJJiMzOTtsbCBiZSBtaW5kZnVsIG9mIGNyb3NzLWRlcGVuZGVuY2llcyB0byBjb3JyZWN0bHkgaWRlbnRpZnkgYW55IGNvbmZsaWN0cy4KKiAgICoqRGVmYXVsdHM6KiogQXJlIHRoZXJlIGFueSBkZWZhdWx0IHNldHRpbmdzIGZvciB0aGUgcGFyYW1ldGVycyBJJiMzOTttIGV4YW1pbmluZz8gVGhpcyBhZmZlY3RzIHRoZSBvdXQtb2YtdGhlLWJveCBiZWhhdmlvciBvZiBhIHN5c3RlbS4KCkVzc2VudGlhbGx5LCBJIHdhbnQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIGhvdyBgeGZybV91c2VyLmNgIGZpdHMgaW50byB0aGUgYnVpbGQgc3lzdGVtIGFuZCBob3cgaXRzIGJlaGF2aW9yIGNhbiBiZSBjb250cm9sbGVkIHZpYSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTE6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV91c2VyXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL01ha2VmaWxlPTE5PW9iai0kKENPTkZJR19YRlJNX0FMR08pICYjNDM7PSB4ZnJtX2FsZ28ub1xubmV0L3hmcm0vTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX1hGUk1fVVNFUikgJiM0Mzs9IHhmcm1fdXNlci5vXG5uZXQveGZybS9NYWtlZmlsZS0yMS1vYmotJChDT05GSUdfWEZSTV9VU0VSX0NPTVBBVCkgJiM0Mzs9IHhmcm1fY29tcGF0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzc5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqRXhhbWluaW5nIHRoZSBYRlJNIENvbmZpZ3VyYXRpb24gYW5kIE1pZ3JhdGlvbioqCgpBbHJpZ2h0LCB0aGUgY29yZSBjb25maWd1cmF0aW9uIGluIHBsYXkgaGVyZSBpcyBkZWZpbml0ZWx5IGBYRlJNX1VTRVJgLiBNYWtlcyBzZW5zZS4gTm93LCB0aGUgbmV4dCBxdWVzdGlvbiBpcywgYXJlIHRoZXJlICphbnkqIG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIEkgc2hvdWxkIGJlIGNvbnNpZGVyaW5nIGluIHRoaXMgY29udGV4dD8gQWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2guCgpMZXQmIzM5O3MgZGlnIGEgYml0IGRlZXBlciBpbnRvIHRoZSBtaWdyYXRpb24gYXNwZWN0LiBJJiMzOTttIGdvaW5nIHRvIHRyYWNrIGRvd24gdGhlIGNhbGxlcnMgb2YgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYC4gVW5kZXJzdGFuZGluZyB3aGF0IGNhbGxzIHRoYXQgZnVuY3Rpb24gd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBzdGF0ZSBtaWdyYXRpb24gaXMgYWN0dWFsbHkgdXNlZC4gVGhhdCYjMzk7bGwgcHJvYmFibHkgcHJvdmlkZSBzb21lIGtleSBpbnNpZ2h0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jPTMzMDk9c3RhdGljIHVuc2lnbmVkIGludCB4ZnJtX21pZ3JhdGVfc3RhdGVfbXNnc2l6ZShjb25zdCBzdHJ1Y3QgeGZybV9taWdyYXRlICptLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzMjEtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMzIyOnN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGUoc3RydWN0IG5ldCAqbmV0LFxubmV0L3hmcm0veGZybV91c2VyLmMtMzMyMy1cdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCB4ZnJtX3VzZXJfbWlncmF0ZV9zdGF0ZSAqdW0sXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MzM0Nz1zdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTEwLVxubmV0L3hmcm0veGZybV91c2VyLmM6MzUxMTpcdGVyciA9IHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlKG5ldCwgdW0sIFx1MDAyNm0sIHhjLVx1MDAzZWRpcixcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MTItXHRcdFx0XHQgICAgICBubGgtXHUwMDNlbmxtc2dfcGlkLCBubGgtXHUwMDNlbmxtc2dfc2VxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODc5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBgeGZybWAgTWlncmF0aW9uIExvZ2ljKioKCk9rYXksIHNvIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGtpY2tzIG9mZiB0aGUgc3RhdGUgbWlncmF0aW9uIHByb2Nlc3MuIE5hdHVyYWxseSwgdGhlIG5leHQgc3RlcCwgYXMgaW5kaWNhdGVkIGJ5IHRoZSBjb2RlLCBpcyB0aGUgY2FsbCB0byBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGF0IGNvbmRpdGlvbnMgdHJpZ2dlciB0aGlzIG1pZ3JhdGlvbiBpbiB0aGUgZmlyc3QgcGxhY2U/JiMzNDsuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBiZWhpbmQgdGhpcyBzZXF1ZW5jZS4KClRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGdvaW5nIHRvIGNoZWNrIGlzIGlmIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIEkgd2FudCB0byBzZWUgaWYgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGdhdGVkIGJlaGluZCBhbnkgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMsIGFueSBgI2lmZGVmYCBibG9ja3MuIEFyZSB0aGVyZSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMsIGZlYXR1cmVzLCBvciBhcmNoaXRlY3R1cmFsIGNvbnN0cmFpbnRzIHRoYXQgZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBtaWdyYXRpb24gcGF0aCBpcyBldmVuIGF2YWlsYWJsZT8gS25vd2luZyBpZiB0aGlzIGlzIHNlbGVjdGl2ZWx5IGVuYWJsZWQgb3IgZGlzYWJsZWQgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIGhvdyB0aGVzZSByb3V0aW5lcyBhcmUgaW5jb3Jwb3JhdGVkIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLiBBcmUgd2UgZGVhbGluZyB3aXRoIGEgY29tcGlsZS10aW1lIG9wdGlvbiBvciBhIHJ1bnRpbWUgZGVjaXNpb24gaGVyZT8gVGhhdCYjMzk7cyB0aGUgcXVlc3Rpb24gSSBuZWVkIHRvIGFuc3dlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTE6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9kb19taWdyYXRlX3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmM9MzMyMj1zdGF0aWMgaW50IHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzQ2LVxubmV0L3hmcm0veGZybV91c2VyLmM6MzM0NzpzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzNDgtXHRcdFx0XHQgc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzUyOC0jZWxzZVxubmV0L3hmcm0veGZybV91c2VyLmM6MzUyOTpzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MzAtXHRcdFx0XHQgc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9Mzc0ND1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbGluayB7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzc4MS1cdFtYRlJNX01TR19HRVRERUZBVUxUICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fZ2V0X2RlZmF1bHQgICB9LFxubmV0L3hmcm0veGZybV91c2VyLmM6Mzc4MjpcdFtYRlJNX01TR19NSUdSQVRFX1NUQVRFIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9kb19taWdyYXRlX3N0YXRlIH0sXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzgzLX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDExOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1OTYKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZDoKCioqRGl2aW5nIGludG8gYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAmIzM5O3MgQ29uZGl0aW9uYWwgTG9naWMqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBhbmQgbXkgZXllIGltbWVkaWF0ZWx5IGxhbmRzIG9uIGFuIGAjZWxzZWAgYmxvY2suIEludGVyZXN0aW5nLiBUaGVzZSB0aGluZ3MgdXN1YWxseSBleGlzdCBmb3IgYSByZWFzb24sIHJpZ2h0PyBJdCYjMzk7cyBhbG1vc3QgYWx3YXlzIGEgc2lnbiB0aGF0IHRoZXJlJiMzOTtzIHNvbWUgY29uZGl0aW9uYWwgYmVoYXZpb3IgSSBuZWVkIHRvIHVuZGVyc3RhbmQsIHNvbWUgZGlmZmVyZW50IGV4ZWN1dGlvbiBwYXRoIGRlcGVuZGluZyBvbiBhIHNwZWNpZmljIGNpcmN1bXN0YW5jZS4gIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHdoYXQmIzM5O3MgdGhlIGNvbmRpdGlvbj8gV2hhdCYjMzk7cyB0aGUgYCNpZmRlZmAgdGhhdCBnb3Zlcm5zIHRoaXMgc3BlY2lmaWMgYnJhbmNoPyYjMzQ7IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgcHJlcHJvY2Vzc29yIG1hY3JvIGNvbnRyb2xzIHRoZSBpbmNsdXNpb24gb2YgdGhpcyBwYXJ0aWN1bGFyIGNvZGUgcGF0aC4gS25vd2luZyB0aGUgY29uZGl0aW9uIGlzICplc3NlbnRpYWwqIHRvIGdyYXNwaW5nIHRoZSBvdmVyYWxsIGJlaGF2aW9yIGFuZCBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24gaW4gdmFyaW91cyBjb25maWd1cmF0aW9ucy4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTtsbCB0cmFjZSBiYWNrIGFuZCBmaW5kIHRoYXQgYCNpZmRlZmAgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzM0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzM0MDpcdFx0cmN1X3JlYWRfbG9jaygpO1xuMzM0MTpcdFx0ZXJyID0geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9NSUdSQVRFKTtcbjMzNDI6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMzM0MzpcdFxuMzM0NDpcdFx0cmV0dXJuIGVycjtcbjMzNDU6XHR9XG4zMzQ2Olx0XG4zMzQ3Olx0c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4zMzQ4Olx0XHRcdFx0XHQgc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4zMzQ5Olx0e1xuMzM1MDpcdFx0c3RydWN0IHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlICp1bSA9IG5sbXNnX2RhdGEobmxoKTtcbjMzNTE6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2Vzayk7XG4zMzUyOlx0XHRzdHJ1Y3QgeGZybV91c2VyX29mZmxvYWQgeHVvID0ge307XG4zMzUzOlx0XHRzdHJ1Y3QgeGZybV9taWdyYXRlIG0gPSB7fTtcbjMzNTQ6XHRcdHN0cnVjdCB4ZnJtX3N0YXRlICp4YztcbjMzNTU6XHRcdHN0cnVjdCB4ZnJtX3N0YXRlICp4O1xuMzM1NjpcdFx0aW50IGVycjtcbjMzNTc6XHRcbjMzNTg6XHRcdGlmICghdW0tXHUwMDNlaWQuc3BpKSB7XG4zMzU5Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7SW52YWxpZCBTUEkgMHgwXCYjMzQ7KTtcbjMzNjA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zMzYxOlx0XHR9XG4zMzYyOlx0XG4zMzYzOlx0XHRpZiAodW0tXHUwMDNlcmVzZXJ2ZWQpIHtcbjMzNjQ6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtSZXNlcnZlZCBmaWVsZCBtdXN0IGJlIHplcm9cJiMzNDspO1xuMzM2NTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjMzNjY6XHRcdH1cbjMzNjc6XHRcbjMzNjg6XHRcdGlmICh1bS1cdTAwM2VmbGFncyBcdTAwMjYgflhGUk1fTUlHUkFURV9TVEFURV9LTk9XTl9GTEFHUykge1xuMzM2OTpcdFx0XHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLCBcJiMzNDtVbmtub3duIGZsYWdzOiAweCV4XCYjMzQ7LFxuMzM3MDpcdFx0XHRcdFx0ICAgdW0tXHUwMDNlZmxhZ3MgXHUwMDI2IH5YRlJNX01JR1JBVEVfU1RBVEVfS05PV05fRkxBR1MpO1xuMzM3MTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjMzNzI6XHRcdH1cbjMzNzM6XHRcbjMzNzQ6XHRcdGVyciA9IHZlcmlmeV94ZnJtX2ZhbWlseSh1bS1cdTAwM2VuZXdfZmFtaWx5LCBleHRhY2spO1xuMzM3NTpcdFx0aWYgKGVycilcbjMzNzY6XHRcdFx0cmV0dXJuIGVycjtcbjMzNzc6XHRcbjMzNzg6XHRcdGlmICghKHVtLVx1MDAzZWZsYWdzIFx1MDAyNiBYRlJNX01JR1JBVEVfU1RBVEVfVVBEQVRFX0gySF9TRUwpKSB7XG4zMzc5Olx0XHRcdGVyciA9IHZlcmlmeV9zZWxlY3Rvcl9wcmVmaXhsZW4odW0tXHUwMDNlbmV3X3NlbC5mYW1pbHksXG4zMzgwOlx0XHRcdFx0XHRcdFx0XHUwMDI2dW0tXHUwMDNlbmV3X3NlbCwgZXh0YWNrKTtcbjMzODE6XHRcdFx0aWYgKGVycilcbjMzODI6XHRcdFx0XHRyZXR1cm4gZXJyO1xuMzM4MzpcdFx0fVxuMzM4NDpcdFxuMzM4NTpcdFx0Y29weV9mcm9tX3VzZXJfbWlncmF0ZV9zdGF0ZShcdTAwMjZtLCB1bSk7XG4zMzg2Olx0XG4zMzg3Olx0XHR4ID0geGZybV9zdGF0ZV9sb29rdXAobmV0LCBtLm9sZF9tYXJrLnYgXHUwMDI2IG0ub2xkX21hcmsubSxcbjMzODg6XHRcdFx0XHQgICAgICBcdTAwMjZ1bS1cdTAwM2VpZC5kYWRkciwgdW0tXHUwMDNlaWQuc3BpLFxuMzM4OTpcdFx0XHRcdCAgICAgIHVtLVx1MDAzZWlkLnByb3RvLCB1bS1cdTAwM2VpZC5mYW1pbHkpO1xuMzM5MDpcdFx0aWYgKCF4KSB7XG4zMzkxOlx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7Q2FuIG5vdCBmaW5kIHN0YXRlXCYjMzQ7KTtcbjMzOTI6XHRcdFx0cmV0dXJuIC1FU1JDSDtcbjMzOTM6XHRcdH1cbjMzOTQ6XHRcbjMzOTU6XHRcdGlmICh1bS1cdTAwM2VmbGFncyBcdTAwMjYgWEZSTV9NSUdSQVRFX1NUQVRFX1VQREFURV9IMkhfU0VMKSB7XG4zMzk2Olx0XHRcdHU4IHByZWZpeGxlbiA9ICh4LVx1MDAzZXByb3BzLmZhbWlseSA9PSBBRl9JTkVUNikgPyAxMjggOiAzMjtcbjMzOTc6XHRcbjMzOTg6XHRcdFx0aWYgKHgtXHUwMDNlc2VsLnByZWZpeGxlbl9zICE9IHgtXHUwMDNlc2VsLnByZWZpeGxlbl9kIHx8XG4zMzk5Olx0XHRcdCAgICB4LVx1MDAzZXNlbC5wcmVmaXhsZW5fZCAhPSBwcmVmaXhsZW4gfHxcbjM0MDA6XHRcdFx0ICAgICF4ZnJtX2FkZHJfZXF1YWwoXHUwMDI2eC1cdTAwM2VzZWwuZGFkZHIsIFx1MDAyNngtXHUwMDNlaWQuZGFkZHIsIHgtXHUwMDNlcHJvcHMuZmFtaWx5KSB8fFxuMzQwMTpcdFx0XHQgICAgIXhmcm1fYWRkcl9lcXVhbChcdTAwMjZ4LVx1MDAzZXNlbC5zYWRkciwgXHUwMDI2eC1cdTAwM2Vwcm9wcy5zYWRkciwgeC1cdTAwM2Vwcm9wcy5mYW1pbHkpKSB7XG4zNDAyOlx0XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuMzQwMzpcdFx0XHRcdFx0ICAgICAgIFwmIzM0O1NBIHNlbGVjdG9yIGlzIG5vdCBhIHNpbmdsZS1ob3N0IG1hdGNoIGZvciBTQSBhZGRyZXNzZXNcJiMzNDspO1xuMzQwNDpcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4zNDA1Olx0XHRcdFx0Z290byBvdXQ7XG4zNDA2Olx0XHRcdH1cbjM0MDc6XHRcdH1cbjM0MDg6XHRcbjM0MDk6XHRcdGlmIChhdHRyc1tYRlJNQV9FTkNBUF0pIHtcbjM0MTA6XHRcdFx0bS5lbmNhcCA9IG5sYV9kYXRhKGF0dHJzW1hGUk1BX0VOQ0FQXSk7XG4zNDExOlx0XHRcdGlmIChtLmVuY2FwLVx1MDAzZWVuY2FwX3R5cGUgPT0gMCkge1xuMzQxMjpcdFx0XHRcdG0uZW5jYXAgPSBOVUxMOyAvKiBzZW50aW5lbDogcmVtb3ZlIGVuY2FwICovXG4zNDEzOlx0XHRcdH0gZWxzZSBpZiAobS5lbmNhcC1cdTAwM2VlbmNhcF90eXBlICE9IFVEUF9FTkNBUF9FU1BJTlVEUCkge1xuMzQxNDpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7VW5zdXBwb3J0ZWQgZW5jYXBzdWxhdGlvbiB0eXBlXCYjMzQ7KTtcbjM0MTU6XHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMzQxNjpcdFx0XHRcdGdvdG8gb3V0O1xuMzQxNzpcdFx0XHR9XG4zNDE4Olx0XHR9IGVsc2Uge1xuMzQxOTpcdFx0XHRtLmVuY2FwID0geC1cdTAwM2VlbmNhcDsgLyogb21pdC10by1pbmhlcml0ICovXG4zNDIwOlx0XHR9XG4zNDIxOlx0XG4zNDIyOlx0XHRpZiAoYXR0cnNbWEZSTUFfTVRJTUVSX1RIUkVTSF0pIHtcbjM0MjM6XHRcdFx0ZXJyID0gdmVyaWZ5X210aW1lcl90aHJlc2goISFtLmVuY2FwLCB4LVx1MDAzZWRpciwgZXh0YWNrKTtcbjM0MjQ6XHRcdFx0aWYgKGVycilcbjM0MjU6XHRcdFx0XHRnb3RvIG91dDtcbjM0MjY6XHRcdH1cbjM0Mjc6XHRcbjM0Mjg6XHRcdGlmIChubGFfZ2V0X3UzMl9kZWZhdWx0KGF0dHJzW1hGUk1BX05BVF9LRUVQQUxJVkVfSU5URVJWQUxdLCAwKSBcdTAwMjZcdTAwMjYgIW0uZW5jYXApIHtcbjM0Mjk6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuMzQzMDpcdFx0XHRcdCAgICAgICBcJiMzNDtOQVRfS0VFUEFMSVZFX0lOVEVSVkFMIHJlcXVpcmVzIGVuY2Fwc3VsYXRpb25cJiMzNDspO1xuMzQzMTpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMzQzMjpcdFx0XHRnb3RvIG91dDtcbjM0MzM6XHRcdH1cbjM0MzQ6XHRcbjM0MzU6XHRcdGlmIChhdHRyc1tYRlJNQV9PRkZMT0FEX0RFVl0pIHtcbjM0MzY6XHRcdFx0bS54dW8gPSBubGFfZGF0YShhdHRyc1tYRlJNQV9PRkZMT0FEX0RFVl0pO1xuMzQzNzpcdFx0fSBlbHNlIHtcbjM0Mzg6XHRcdFx0Ym9vbCBpbmhlcml0X29mZmxvYWQgPSAhKHVtLVx1MDAzZWZsYWdzIFx1MDAyNiBYRlJNX01JR1JBVEVfU1RBVEVfQ0xFQVJfT0ZGTE9BRCk7XG4zNDM5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDExOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NjcKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIGFjY291bnQ6CgoqKlJldmVyc2UgRW5naW5lZXJpbmcgdGhlIFByZXByb2Nlc3NvciBEaXJlY3RpdmUqKgoKQWxyaWdodCwgc28gdGhlIGdhbWUgcGxhbiBpcyBjbGVhcjogcGlucG9pbnRpbmcgdGhhdCBgI2lmZGVmYCBxdWlja2x5IGlzIHRoZSBwcmlvcml0eS4gSW5zdGVhZCBvZiBzbG9nZ2luZyB0aHJvdWdoIHRoZSBjb2RlIGxpbmUgYnkgbGluZSwgSSYjMzk7bSB0aGlua2luZyBhIGJhY2t3YXJkIHNjYW4gaXMgdGhlIG1vc3QgZWZmaWNpZW50IGFwcHJvYWNoLiBKdW1waW5nIHN0cmFpZ2h0IHRvIHRoZSBgI2lmZGVmYCBpdHNlbGYgZmVlbHMgbGlrZSB0aGUgZmFzdGVzdCB3YXkgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBjb250ZXh0LiBJJiMzOTtsbCBtZW50YWxseSBtYXAgb3V0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGFmdGVyIEkgbG9jYXRlIGl0IHRvIGNoZWNrIGZvciBhbnkgY3JpdGljYWwgbG9naWMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIG1vc3QgY29udGV4dCBmYXN0ZXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzI0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzI0MDpcdFxuMzI0MTpcdHN0YXRpYyBpbnQgYnVpbGRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuMzI0MjpcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgeGZybV91c2VyX21pZ3JhdGVfc3RhdGUgKnVtLFxuMzI0MzpcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgeGZybV9taWdyYXRlICptLFxuMzI0NDpcdFx0XHRcdCAgICAgICB1OCBkaXIsIHUzMiBwb3J0aWQsIHUzMiBzZXEpXG4zMjQ1Olx0e1xuMzI0NjpcdFx0aW50IGVycjtcbjMyNDc6XHRcdHN0cnVjdCBubG1zZ2hkciAqbmxoO1xuMzI0ODpcdFx0c3RydWN0IHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlICpoZHI7XG4zMjQ5Olx0XG4zMjUwOlx0XHRubGggPSBubG1zZ19wdXQoc2tiLCBwb3J0aWQsIHNlcSwgWEZSTV9NU0dfTUlHUkFURV9TVEFURSxcbjMyNTE6XHRcdFx0XHRzaXplb2Yoc3RydWN0IHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlKSwgMCk7XG4zMjUyOlx0XHRpZiAoIW5saClcbjMyNTM6XHRcdFx0cmV0dXJuIC1FTVNHU0laRTtcbjMyNTQ6XHRcbjMyNTU6XHRcdGhkciA9IG5sbXNnX2RhdGEobmxoKTtcbjMyNTY6XHRcdCpoZHIgPSAqdW07XG4zMjU3Olx0XHRoZHItXHUwMDNlbmV3X3NlbCA9ICptLVx1MDAzZW5ld19zZWw7XG4zMjU4Olx0XG4zMjU5Olx0XHRpZiAobS1cdTAwM2VlbmNhcCkge1xuMzI2MDpcdFx0XHRlcnIgPSBubGFfcHV0KHNrYiwgWEZSTUFfRU5DQVAsIHNpemVvZigqbS1cdTAwM2VlbmNhcCksIG0tXHUwMDNlZW5jYXApO1xuMzI2MTpcdFx0XHRpZiAoZXJyKVxuMzI2MjpcdFx0XHRcdGdvdG8gb3V0X2NhbmNlbDtcbjMyNjM6XHRcdH1cbjMyNjQ6XHRcbjMyNjU6XHRcdGlmIChtLVx1MDAzZXh1bykge1xuMzI2NjpcdFx0XHRlcnIgPSBubGFfcHV0KHNrYiwgWEZSTUFfT0ZGTE9BRF9ERVYsIHNpemVvZigqbS1cdTAwM2V4dW8pLCBtLVx1MDAzZXh1byk7XG4zMjY3Olx0XHRcdGlmIChlcnIpXG4zMjY4Olx0XHRcdFx0Z290byBvdXRfY2FuY2VsO1xuMzI2OTpcdFx0fVxuMzI3MDpcdFxuMzI3MTpcdFx0aWYgKG0tXHUwMDNlbmV3X21hcmspIHtcbjMyNzI6XHRcdFx0ZXJyID0gbmxhX3B1dChza2IsIFhGUk1BX01BUkssIHNpemVvZigqbS1cdTAwM2VuZXdfbWFyayksXG4zMjczOlx0XHRcdFx0ICAgICAgbS1cdTAwM2VuZXdfbWFyayk7XG4zMjc0Olx0XHRcdGlmIChlcnIpXG4zMjc1Olx0XHRcdFx0Z290byBvdXRfY2FuY2VsO1xuMzI3NjpcdFx0fVxuMzI3NzpcdFxuMzI3ODpcdFx0ZXJyID0geGZybV9zbWFya19wdXQoc2tiLCBcdTAwMjZtLVx1MDAzZXNtYXJrKTtcbjMyNzk6XHRcdGlmIChlcnIpXG4zMjgwOlx0XHRcdGdvdG8gb3V0X2NhbmNlbDtcbjMyODE6XHRcbjMyODI6XHRcdGlmIChtLVx1MDAzZW1hcHBpbmdfbWF4YWdlKSB7XG4zMjgzOlx0XHRcdGVyciA9IG5sYV9wdXRfdTMyKHNrYiwgWEZSTUFfTVRJTUVSX1RIUkVTSCwgbS1cdTAwM2VtYXBwaW5nX21heGFnZSk7XG4zMjg0Olx0XHRcdGlmIChlcnIpXG4zMjg1Olx0XHRcdFx0Z290byBvdXRfY2FuY2VsO1xuMzI4NjpcdFx0fVxuMzI4NzpcdFxuMzI4ODpcdFx0aWYgKG0tXHUwMDNlbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCkge1xuMzI4OTpcdFx0XHRlcnIgPSBubGFfcHV0X3UzMihza2IsIFhGUk1BX05BVF9LRUVQQUxJVkVfSU5URVJWQUwsXG4zMjkwOlx0XHRcdFx0XHQgIG0tXHUwMDNlbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCk7XG4zMjkxOlx0XHRcdGlmIChlcnIpXG4zMjkyOlx0XHRcdFx0Z290byBvdXRfY2FuY2VsO1xuMzI5MzpcdFx0fVxuMzI5NDpcdFxuMzI5NTpcdFx0aWYgKGRpcikge1xuMzI5NjpcdFx0XHRlcnIgPSBubGFfcHV0X3U4KHNrYiwgWEZSTUFfU0FfRElSLCBkaXIpO1xuMzI5NzpcdFx0XHRpZiAoZXJyKVxuMzI5ODpcdFx0XHRcdGdvdG8gb3V0X2NhbmNlbDtcbjMyOTk6XHRcdH1cbjMzMDA6XHRcbjMzMDE6XHRcdG5sbXNnX2VuZChza2IsIG5saCk7XG4zMzAyOlx0XHRyZXR1cm4gMDtcbjMzMDM6XHRcbjMzMDQ6XHRvdXRfY2FuY2VsOlxuMzMwNTpcdFx0bmxtc2dfY2FuY2VsKHNrYiwgbmxoKTtcbjMzMDY6XHRcdHJldHVybiBlcnI7XG4zMzA3Olx0fVxuMzMwODpcdFxuMzMwOTpcdHN0YXRpYyB1bnNpZ25lZCBpbnQgeGZybV9taWdyYXRlX3N0YXRlX21zZ3NpemUoY29uc3Qgc3RydWN0IHhmcm1fbWlncmF0ZSAqbSxcbjMzMTA6XHRcdFx0XHRcdFx0ICAgICAgIHU4IGRpcilcbjMzMTE6XHR7XG4zMzEyOlx0XHRyZXR1cm4gTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCB4ZnJtX3VzZXJfbWlncmF0ZV9zdGF0ZSkpICYjNDM7XG4zMzEzOlx0XHRcdChtLVx1MDAzZWVuY2FwID8gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB4ZnJtX2VuY2FwX3RtcGwpKSA6IDApICYjNDM7XG4zMzE0Olx0XHRcdChtLVx1MDAzZXh1byA/IG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgeGZybV91c2VyX29mZmxvYWQpKSA6IDApICYjNDM7XG4zMzE1Olx0XHRcdChtLVx1MDAzZW5ld19tYXJrID8gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB4ZnJtX21hcmspKSA6IDApICYjNDM7XG4zMzE2Olx0XHRcdCgobS1cdTAwM2VzbWFyay52IHwgbS1cdTAwM2VzbWFyay5tKSA/IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSAqIDIgOiAwKSAmIzQzO1xuMzMxNzpcdFx0XHQobS1cdTAwM2VtYXBwaW5nX21heGFnZSA/IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSA6IDApICYjNDM7XG4zMzE4Olx0XHRcdChtLVx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwgPyBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgOiAwKSAmIzQzO1xuMzMxOTpcdFx0XHQoZGlyID8gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU4KSkgOiAwKTsgLyogWEZSTUFfU0FfRElSICovXG4zMzIwOlx0fVxuMzMyMTpcdFxuMzMyMjpcdHN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGUoc3RydWN0IG5ldCAqbmV0LFxuMzMyMzpcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlICp1bSxcbjMzMjQ6XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm0sXG4zMzI1Olx0XHRcdFx0XHQgICB1OCBkaXIsIHUzMiBwb3J0aWQsIHUzMiBzZXEpXG4zMzI2Olx0e1xuMzMyNzpcdFx0aW50IGVycjtcbjMzMjg6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4zMzI5Olx0XG4zMzMwOlx0XHRza2IgPSBubG1zZ19uZXcoeGZybV9taWdyYXRlX3N0YXRlX21zZ3NpemUobSwgZGlyKSwgR0ZQX0FUT01JQyk7XG4zMzMxOlx0XHRpZiAoIXNrYilcbjMzMzI6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4zMzMzOlx0XG4zMzM0Olx0XHRlcnIgPSBidWlsZF9taWdyYXRlX3N0YXRlKHNrYiwgdW0sIG0sIGRpciwgcG9ydGlkLCBzZXEpO1xuMzMzNTpcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuMzMzNjpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbjMzMzc6XHRcdFx0cmV0dXJuIGVycjtcbjMzMzg6XHRcdH1cbjMzMzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM4MwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGVidWdnaW5nIGEgS2VybmVsIHhmcm0gTWlncmF0aW9uIElzc3VlKioKCk9rYXksIHNvIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAgaXMgYXQgbGluZSAzMzIyLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBwcm9ibGVtICpzaG91bGQqIGJlLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBpdCYjMzk7cyBldmVuIGJlaW5nIGV4ZWN1dGVkLCBvciBpZiBpdCYjMzk7cyBkZXBlbmRlbnQgb24gYSBjb21waWxhdGlvbiBmbGFnLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGlzIHNlY3Rpb24gaXMgY29uZGl0aW9uYWxseSBjb21waWxlZC4gSSYjMzk7bGwgc2VhcmNoIGZvciBgI2lmZGVmIENPTkZJR19YRlJNX01JR1JBVEVgLCBvciBhbnkgc2ltaWxhciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyByZWxhdGVkIHRvIG1pZ3JhdGlvbiwgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gR290dGEgcnVsZSBvdXQgdGhhdCBpdCYjMzk7cyBhIGNvbXBsZXRlbHkgZGlzYWJsZWQgZmVhdHVyZSwgYmVmb3JlIEkgc3RhcnQgdHJhY2luZyB0aHJvdWdoIHRoZSBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWZkZWYgQ09ORklHX1hGUk1fTUlHUkFURSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jPTEyMDQ9c3RhdGljIHZvaWQgeHNvX3RvX3h1b19pZmluZGV4KGNvbnN0IHN0cnVjdCB4ZnJtX2Rldl9vZmZsb2FkICp4c28sIGludCBpZmluZGV4LFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEyMTMtXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxMjE0OiNpZmRlZiBDT05GSUdfWEZSTV9NSUdSQVRFXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMjE1LXN0YXRpYyB2b2lkIHhzb190b194dW8oY29uc3Qgc3RydWN0IHhmcm1fZGV2X29mZmxvYWQgKnhzbyxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zMDQyPXN0YXRpYyBpbnQgeGZybV9hZGRfYWNxdWlyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMTE2LVxubmV0L3hmcm0veGZybV91c2VyLmM6MzExNzojaWZkZWYgQ09ORklHX1hGUk1fTUlHUkFURVxubmV0L3hmcm0veGZybV91c2VyLmMtMzExOC1zdGF0aWMgdm9pZCBjb3B5X2Zyb21fdXNlcl9taWdyYXRlX3N0YXRlKHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm1hLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM1MzY9c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzU0Mi1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM1NDM6I2lmZGVmIENPTkZJR19YRlJNX01JR1JBVEVcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1NDQtc3RhdGljIGludCBjb3B5X3RvX3VzZXJfbWlncmF0ZShjb25zdCBzdHJ1Y3QgeGZybV9taWdyYXRlICptLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDQ4CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4gU28sIEkmIzM5O20gcHJldHR5IHN1cmUgYENPTkZJR19YRlJNX01JR1JBVEVgIGlzIHRoZSBrZXkgY29uZmlnIG9wdGlvbiB3ZSYjMzk7cmUgaW50ZXJlc3RlZCBpbiBmb3IgdGhpcyBtaWdyYXRpb24gc3R1ZmYuICpXYWl0IGEgc2Vjb25kKiwgaXNuJiMzOTt0IGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAgb25seSBjb21waWxlZCBpbiBpZiB0aGF0IG9wdGlvbiBpcyBlbmFibGVkPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQuIExldCYjMzk7cyBnZXQgcmlnaHQgaW50byB0aGUgY29kZS4gSSByZWFsbHkgbmVlZCB0byBjb25maXJtIHRoYXQgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCBpcyBhY3R1YWxseSBndWFyZGVkIGJ5IGFuIGAjaWZkZWYgQ09ORklHX1hGUk1fTUlHUkFURWAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSwgYmVjYXVzZSBpZiBub3QsIGl0IHRocm93cyBhIHdyZW5jaCBpbnRvIHRoZSB3aG9sZSBwcm9jZXNzLiBJIGhhdmUgdG8gY29uZmlybSBob3cgdGhhdCBjb2RlIGlzIGdvaW5nIHRvIGJ1aWxkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZmRlZiBDT05GSUdfWEZSTV9NSUdSQVRFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmM9MTIwND1zdGF0aWMgdm9pZCB4c29fdG9feHVvX2lmaW5kZXgoY29uc3Qgc3RydWN0IHhmcm1fZGV2X29mZmxvYWQgKnhzbywgaW50IGlmaW5kZXgsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMTIxMy1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjEyMTQ6I2lmZGVmIENPTkZJR19YRlJNX01JR1JBVEVcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEyMTUtc3RhdGljIHZvaWQgeHNvX3RvX3h1byhjb25zdCBzdHJ1Y3QgeGZybV9kZXZfb2ZmbG9hZCAqeHNvLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTMwNDI9c3RhdGljIGludCB4ZnJtX2FkZF9hY3F1aXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMxMTYtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMTE3OiNpZmRlZiBDT05GSUdfWEZSTV9NSUdSQVRFXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMTE4LXN0YXRpYyB2b2lkIGNvcHlfZnJvbV91c2VyX21pZ3JhdGVfc3RhdGUoc3RydWN0IHhmcm1fbWlncmF0ZSAqbWEsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MzUzNj1zdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTQyLVxubmV0L3hmcm0veGZybV91c2VyLmM6MzU0MzojaWZkZWYgQ09ORklHX1hGUk1fTUlHUkFURVxubmV0L3hmcm0veGZybV91c2VyLmMtMzU0NC1zdGF0aWMgaW50IGNvcHlfdG9fdXNlcl9taWdyYXRlKGNvbnN0IHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm0sIHN0cnVjdCBza19idWZmICpza2IpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDExOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MjIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIEJsb2NrIFRlcm1pbmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuIE15IG1lbnRhbCBtb2RlbCBpcyB0ZWxsaW5nIG1lIHRoYXQgd2UgYXJlIGxvb2tpbmcgZm9yIHRoZSBlbmQgb2YgYSBibG9jayBvZiBkYXRhLCBzcGVjaWZpY2FsbHkgc3RhcnRpbmcgYXJvdW5kIGFkZHJlc3MgMzExNy4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgb2YgY291cnNlLCB3aGF0JiMzOTtzIHRoZSBibG9jayYjMzk7cyAqdGVybWluYXRvcio/IElzIGl0IGEgZml4ZWQtbGVuZ3RoIHN0cnVjdHVyZT8gRG8gd2UgaGF2ZSBhIHNlbnRpbmVsIHZhbHVlLCBhbiBlbmQtb2YtYmxvY2sgbWFya2VyIHBlcmhhcHM/IE9yIGFyZSB3ZSByZWx5aW5nIG9uIHNvbWUgb3RoZXIsIG1vcmUgaW1wbGljaXQgbWV0aG9kIHRvIGRldGVybWluZSB0aGUgYm91bmRhcnk/CgpNeSBleHBlcnRpc2Uga2lja3MgaW4gYW5kIEkgaGF2ZSB0byBhc3Nlc3MgYWxsIHBvc3NpYmlsaXRpZXM6IElzIHRoZXJlIGEgY2hlY2tzdW0gSSBuZWVkIHRvIGNhbGN1bGF0ZSBvciB2YWxpZGF0ZSB0aGF0IGNvdWxkIHNpZ25hbCB0aGUgZW5kPyBEbyBJIGhhdmUgdG8gcGFyc2Ugc29tZSBoZWFkZXIgaW5mb3JtYXRpb24gdG8gaW5mZXIgdGhlIGxlbmd0aD8gSXMgaXQgaW1wbGljaXRseSBkZWZpbmVkIGJ5IHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGVuY2xvc2luZyBkYXRhIGZvcm1hdD8gQ291bGQgdGhlcmUgYmUgYW4gZXJyb3IgY29uZGl0aW9uIHRoYXQgc2lnbmFscyB0aGUgdGVybWluYXRpb24sIHNvbWV0aGluZyBsaWtlIGEgJiMzNDtwYWRkaW5nJiMzNDsgYXBwcm9hY2ggd2l0aCBhIHNwZWNpZmljIHBhdHRlcm4gYXQgdGhlIGVuZD8KCkkmIzM5O20gZXNzZW50aWFsbHkgd29ya2luZyB0aHJvdWdoIG15IG1lbnRhbCBjaGVja2xpc3Qgb2YgY29tbW9uIGRhdGEgYmxvY2sgZGVsaW5lYXRpb24gdGVjaG5pcXVlcywgdHJ5aW5nIHRvIHF1aWNrbHkgcGlucG9pbnQgdGhlIGFwcHJvcHJpYXRlIG1ldGhvZCBmb3IgdGhpcyBzcGVjaWZpYyBjYXNlLiBJIGtub3cgdGhlIGJsb2NrIGxlbmd0aCBjb3VsZCBiZSBpbXBsaWVkIGJ5IHRoZSBmb3JtYXQgYW5kIHdpbGwgaGF2ZSB0byBiZSBpbnZlc3RpZ2F0ZWQuIEkmIzM5O20gdHJ5aW5nIHRvIGRlY2lkZSB0aGUgYmVzdCBhcHByb2FjaCBiYXNlZCBvbiB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2Vsc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYz0yNjc9c3RhdGljIGludCB2ZXJpZnlfeGZybV9mYW1pbHkodTE2IGZhbWlseSwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI3NC1cdFx0cmV0dXJuIDA7XG5uZXQveGZybS94ZnJtX3VzZXIuYzoyNzU6I2Vsc2Vcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI3Ni1cdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJUHY2IHN1cHBvcnQgZGlzYWJsZWRcJiMzNDspO1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTI4NT1zdGF0aWMgaW50IHZlcmlmeV9zZWxlY3Rvcl9wcmVmaXhsZW4odTE2IGZhbWlseSxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMDYtXHRcdHJldHVybiAwO1xubmV0L3hmcm0veGZybV91c2VyLmM6MzA3OiNlbHNlXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMDgtXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7SVB2NiBzdXBwb3J0IGRpc2FibGVkXCYjMzQ7KTtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0xOTk4PXN0YXRpYyBpbnQgdmVyaWZ5X25ld3BvbGljeV9pbmZvKHN0cnVjdCB4ZnJtX3VzZXJwb2xpY3lfaW5mbyAqcCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yMDQxLVx0XHRicmVhaztcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjIwNDI6I2Vsc2Vcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTIwNDMtXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7SVB2NiBzdXBwb3J0IGRpc2FibGVkXCYjMzQ7KTtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0yMzc3PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHVzZXJwb2xpY3lfdHlwZV9hdHRyc2l6ZSh2b2lkKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTIzODAtXHRyZXR1cm4gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB4ZnJtX3VzZXJwb2xpY3lfdHlwZSkpO1xubmV0L3hmcm0veGZybV91c2VyLmM6MjM4MTojZWxzZVxubmV0L3hmcm0veGZybV91c2VyLmMtMjM4Mi1cdHJldHVybiAwO1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTIzODc9c3RhdGljIGludCBjb3B5X3RvX3VzZXJfcG9saWN5X3R5cGUodTggdHlwZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yMzk3LVxubmV0L3hmcm0veGZybV91c2VyLmM6MjM5ODojZWxzZVxubmV0L3hmcm0veGZybV91c2VyLmMtMjM5OS1zdGF0aWMgaW5saW5lIGludCBjb3B5X3RvX3VzZXJfcG9saWN5X3R5cGUodTggdHlwZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zMzQ3PXN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MjctXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNTI4OiNlbHNlXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTI5LXN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM2MzI9c3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZShjb25zdCBzdHJ1Y3QgeGZybV9zZWxlY3RvciAqc2VsLCB1OCBkaXIsIHU4IHR5cGUsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzY1MC19XG5uZXQveGZybS94ZnJtX3VzZXIuYzozNjUxOiNlbHNlXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNjUyLXN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGUoY29uc3Qgc3RydWN0IHhmcm1fc2VsZWN0b3IgKnNlbCwgdTggZGlyLCB1OCB0eXBlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDkwMgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIFhGUk0gTWlncmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kLCBhcyBleHBlY3RlZCwgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgaXMgd3JhcHBlZCBpbiBhbiBgI2lmZGVmIENPTkZJR19YRlJNX01JR1JBVEVgIGJsb2NrLiBUaGF0JiMzOTtzIGEgY2xlYXIgaW5kaWNhdG9yIHRoYXQgYENPTkZJR19YRlJNX01JR1JBVEVgICptdXN0KiBiZSBlbmFibGVkIGZvciB0aGlzIGZ1bmN0aW9uIHRvIGV2ZW4gZXhpc3QgaW4gdGhlIGNvbXBpbGVkIGtlcm5lbC4gTWFrZXMgcGVyZmVjdCBzZW5zZS4KCkJ1dCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEkmIzM5O20gd29uZGVyaW5nIGlmIHRoZXJlIGFyZSBhbnkgKm90aGVyKiBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcywgYW55dGhpbmcgZWxzZSB0aGF0IG1pZ2h0IGJlIG5lZWRlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBDT05GSUdfWEZSTV9NSUdSQVRFYC4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgZm9yIHRoZSBYRlJNIHN1YnN5c3RlbS4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZGl2ZSBpbnRvIGBuZXQveGZybS9LY29uZmlnYCBhbmQgZXhwbGljaXRseSBleGFtaW5lIHRoZSBkZWZpbml0aW9ucyBmb3IgYm90aCBgWEZSTV9NSUdSQVRFYCBhbmQgYFhGUk1fVVNFUmAuIEkmIzM5O20gZXNwZWNpYWxseSBrZWVuIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGluZGlyZWN0IGRlcGVuZGVuY2llcy4gSSB0aGluayBgQ09ORklHX1hGUk1fVVNFUmAgbWlnaHQgYWxzbyBiZSBhIHJlcXVpcmVtZW50IGZvciB0aGlzIGZ1bmN0aW9uYWxpdHksIHNvIEkgd2lsbCBjaGVjayB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWEZSTV9NSUdSQVRFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnPTUxPWNvbmZpZyBYRlJNX1NVQl9QT0xJQ1lcbi0tXG5uZXQveGZybS9LY29uZmlnLTYwLVxubmV0L3hmcm0vS2NvbmZpZzo2MTpjb25maWcgWEZSTV9NSUdSQVRFXG5uZXQveGZybS9LY29uZmlnLTYyLVx0Ym9vbCBcJiMzNDtUcmFuc2Zvcm1hdGlvbiBtaWdyYXRlIGRhdGFiYXNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDExOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzU3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCYjMzk7cyBnb2luZyB0aHJvdWdoIG15IG1pbmQgYXMgSSBhcHByb2FjaCB0aGlzIGBuZXQveGZybS9LY29uZmlnYCBmaWxlIGFuZCB0aGUgYFhGUk1fTUlHUkFURWAgb3B0aW9uLgoKKipEaXZpbmcgaW50byBgbmV0L3hmcm0vS2NvbmZpZ2AgYW5kIGBYRlJNX01JR1JBVEVgKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZ29pbmcgdG8gcHVsbCB1cCBgbmV0L3hmcm0vS2NvbmZpZ2AgYmVjYXVzZSBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gWEZSTSBtaWdyYXRpb24uIE15IGZvY3VzIGlzIGdvaW5nIHRvIGJlIHplcm9pbmcgaW4gb24gYFhGUk1fTUlHUkFURWAgYW5kIGZpZ3VyaW5nIG91dCB3aGF0IGl0IGRvZXMsIGhvdyBpdCYjMzk7cyBlbmFibGVkLCBhbmQgcG90ZW50aWFsbHkgYW55IGRlcGVuZGVuY2llcyBvciBpbnRlcmFjdGlvbnMgaXQgaGFzIHdpdGggb3RoZXIgWEZSTSBmZWF0dXJlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIFhGUk0gZnJhbWV3b3JrLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZpbGUgdG8gZ2l2ZSBtZSB0aGUgZGVmaW5pdGl2ZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIHRoZSBrZXJuZWwgY29uZmlnIG9wdGlvbnMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNvbW1lbnRzLCBkZWZhdWx0IHNldHRpbmdzLCBhbmQgbGlrZWx5IGFueSAqYm9vbCosICp0cmlzdGF0ZSosIG9yICpzZWxlY3QqIHN0YXRlbWVudHMgcmVsZXZhbnQgdG8gaXQuIEFueSBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBvciByZWZlcmVuY2VzIHdpdGhpbiB0aGUgZmlsZSB3b3VsZCBiZSBpbmNyZWRpYmx5IGhlbHBmdWwgYXMgd2VsbC4gVGhpcyBpcyBwcm9iYWJseSBnb2luZyB0byBpbnZvbHZlIHRyYWNpbmcgdGhyb3VnaCBjb25kaXRpb25hbCBzdGF0ZW1lbnRzIGFuZCBvdGhlciBkZXBlbmRlbmNpZXMgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb24uIFRoaXMgaXMgY3JpdGljYWwgZm9yIGtlcm5lbCBjb25maWd1cmF0aW9uIGFuZCBwb3RlbnRpYWwgbWlncmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDUwOlx0XG4gIDUxOlx0Y29uZmlnIFhGUk1fU1VCX1BPTElDWVxuICA1MjpcdFx0Ym9vbCBcJiMzNDtUcmFuc2Zvcm1hdGlvbiBzdWIgcG9saWN5IHN1cHBvcnRcJiMzNDtcbiAgNTM6XHRcdGRlcGVuZHMgb24gWEZSTVxuICA1NDpcdFx0aGVscFxuICA1NTpcdFx0ICBTdXBwb3J0IHN1YiBwb2xpY3kgZm9yIGRldmVsb3BlcnMuIEJ5IHVzaW5nIHN1YiBwb2xpY3kgd2l0aCBtYWluXG4gIDU2Olx0XHQgIG9uZSwgdHdvIHBvbGljaWVzIGNhbiBiZSBhcHBsaWVkIHRvIHRoZSBzYW1lIHBhY2tldCBhdCBvbmNlLlxuICA1NzpcdFx0ICBQb2xpY3kgd2hpY2ggbGl2ZXMgc2hvcnRlciB0aW1lIGluIGtlcm5lbCBzaG91bGQgYmUgYSBzdWIuXG4gIDU4Olx0XG4gIDU5Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDYwOlx0XG4gIDYxOlx0Y29uZmlnIFhGUk1fTUlHUkFURVxuICA2MjpcdFx0Ym9vbCBcJiMzNDtUcmFuc2Zvcm1hdGlvbiBtaWdyYXRlIGRhdGFiYXNlXCYjMzQ7XG4gIDYzOlx0XHRkZXBlbmRzIG9uIFhGUk1cbiAgNjQ6XHRcdGhlbHBcbiAgNjU6XHRcdCAgQSBmZWF0dXJlIHRvIHVwZGF0ZSBsb2NhdG9yKHMpIG9mIGEgZ2l2ZW4gSVBzZWMgc2VjdXJpdHlcbiAgNjY6XHRcdCAgYXNzb2NpYXRpb24gZHluYW1pY2FsbHkuICBUaGlzIGZlYXR1cmUgaXMgcmVxdWlyZWQsIGZvclxuICA2NzpcdFx0ICBpbnN0YW5jZSwgaW4gYSBNb2JpbGUgSVB2NiBlbnZpcm9ubWVudCB3aXRoIElQc2VjIGNvbmZpZ3VyYXRpb25cbiAgNjg6XHRcdCAgd2hlcmUgbW9iaWxlIG5vZGVzIGNoYW5nZSB0aGVpciBhdHRhY2htZW50IHBvaW50IHRvIHRoZSBJbnRlcm5ldC5cbiAgNjk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5NTUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246CgoqKlhGUk0gRGVwZW5kZW5jeSBJbnF1aXJ5KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYFhGUk1fTUlHUkFURWAgZmVhdHVyZSwgYW5kIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGl0IGhhcyBhIGRpcmVjdCBkZXBlbmRlbmN5IG9uIGBYRlJNYC4gVGhhdCBtYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIG1pZ3JhdGlvbiBhc3BlY3QgaW5oZXJlbnRseSByZWxhdGVzIHRvIHRoZSBmb3VuZGF0aW9uYWwgWEZSTSBmdW5jdGlvbmFsaXR5LiBCdXQsIHRoZSBxdWVzdGlvbiB0aGF0JiMzOTtzIG5vdyBwaW5naW5nIGluIG15IG1pbmQgaXMsIHdoYXQgYWJvdXQgYFhGUk1fVVNFUmA/IElzIHRoaXMgYWxzbyBhIHByZXJlcXVpc2l0ZSwgb3IgaXMgaXQgb3B0aW9uYWwgaW4gdGhlIGNvbnRleHQgb2YgYFhGUk1fTUlHUkFURWA/IEkgbmVlZCB0byBjbGFyaWZ5IHRoZSByZWxhdGlvbnNoaXAgaGVyZTsgaXTigJlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBsZXRlIGJ1aWxkIGFuZCBydW50aW1lIGRlcGVuZGVuY2llcywgZXNwZWNpYWxseSBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24gb3IgcG9saWN5IGNvbnRyb2wgZHVyaW5nIHRoZSBtaWdyYXRpb24gcHJvY2Vzcy4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSBub3QgdG8gdGFrZSBhbnl0aGluZyBmb3IgZ3JhbnRlZDsgSSBzaG91bGQgY2hlY2sgdGhpcyByZWxhdGlvbnNoaXAgZGlyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYRlJNX1VTRVImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWc9MjI9aWYgSU5FVFxubmV0L3hmcm0vS2NvbmZpZzoyMzpjb25maWcgWEZSTV9VU0VSXG5uZXQveGZybS9LY29uZmlnLTI0LVx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctMzEtXG5uZXQveGZybS9LY29uZmlnOjMyOmNvbmZpZyBYRlJNX1VTRVJfQ09NUEFUXG5uZXQveGZybS9LY29uZmlnLTMzLVx0dHJpc3RhdGUgXCYjMzQ7Q29tcGF0aWJsZSBBQkkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjMyMAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb24sIHRhaWxvcmVkIGZvciBteSBmZWxsb3cgZXhwZXJ0OgoKKipVbmRlcnN0YW5kaW5nIHRoZSBLZXJuZWwgRGVwZW5kZW5jaWVzIG9mIFhGUk1fVVNFUioqCgpPa2F5LCBzbyBgWEZSTV9VU0VSYC4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZywgZ2l2ZW4gaXRzIGxvY2F0aW9uIGluIGBuZXQveGZybS9LY29uZmlnYCwgdGhhdCBpdCYjMzk7cyBnb2luZyB0byBiZSBpbmhlcmVudGx5IGxpbmtlZCB0byBgWEZSTWAgaXRzZWxmLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGBYRlJNX1VTRVJgIGlzIGFib3V0IHVzZXItc3BhY2UgaW50ZXJhY3Rpb24gd2l0aCB0aGUgWEZSTSBmcmFtZXdvcmsuIEFuZCwgc2luY2UgaXQmIzM5O3MgaW4gdGhlIG5ldHdvcmtpbmcgc3BhY2UsIEkmIzM5O2QgZXhwZWN0IGl0IHRvIGxldmVyYWdlIGBJTkVUYCBhcyBhIGZvdW5kYXRpb25hbCByZXF1aXJlbWVudC4gTGV0JiMzOTtzIHF1aWNrbHkgdmVyaWZ5IHRoZXNlIGltcGxpZWQgZGVwZW5kZW5jaWVzIHRvIGNlbWVudCBteSB1bmRlcnN0YW5kaW5nLCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBjb25maXJtIG15IGluaXRpYWwgYXNzdW1wdGlvbnMuIEl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGhhdmUgYSBzb2xpZCBoYW5kbGUgb24gdGhlIGtlcm5lbCYjMzk7cyBtb2R1bGUgc3RydWN0dXJlLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIFhGUk0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFhGUk0gY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRjb25maWcgWEZSTVxuICAgNjpcdFx0Ym9vbFxuICAgNzpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA4Olx0XHRzZWxlY3QgR1JPX0NFTExTXG4gICA5Olx0XHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcbiAgMTA6XHRcbiAgMTE6XHRjb25maWcgWEZSTV9PRkZMT0FEXG4gIDEyOlx0XHRib29sXG4gIDEzOlx0XG4gIDE0Olx0Y29uZmlnIFhGUk1fQUxHT1xuICAxNTpcdFx0dHJpc3RhdGVcbiAgMTY6XHRcdHNlbGVjdCBYRlJNXG4gIDE3Olx0XHRzZWxlY3QgQ1JZUFRPXG4gIDE4Olx0XHRzZWxlY3QgQ1JZUFRPX0FFQURcbiAgMTk6XHRcdHNlbGVjdCBDUllQVE9fSEFTSFxuICAyMDpcdFx0c2VsZWN0IENSWVBUT19TS0NJUEhFUlxuICAyMTpcdFxuICAyMjpcdGlmIElORVRcbiAgMjM6XHRjb25maWcgWEZSTV9VU0VSXG4gIDI0Olx0XHR0cmlzdGF0ZSBcJiMzNDtUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXCYjMzQ7XG4gIDI1Olx0XHRzZWxlY3QgWEZSTV9BTEdPXG4gIDI2Olx0XHRoZWxwXG4gIDI3Olx0XHQgIFN1cHBvcnQgZm9yIFRyYW5zZm9ybWF0aW9uKFhGUk0pIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcbiAgMjg6XHRcdCAgbGlrZSBJUHNlYyB1c2VkIGJ5IG5hdGl2ZSBMaW51eCB0b29scy5cbiAgMjk6XHRcbiAgMzA6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4OTEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBkZXBlbmRlbmNpZXMgYW5kIGZ1bmN0aW9uIGNhbGxzOgoKKipEZWNvZGluZyB0aGUgWEZSTSBNaWdyYXRpb24gUGF0Y2ggRGVwZW5kZW5jaWVzKioKClJpZ2h0LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duIGxvZ2ljYWxseS4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBtaWdyYXRpbmcgWEZSTSBzdGF0ZXMuIEkgc2VlIHRoYXQgYFhGUk1fVVNFUmAgaXMgc2VsZWN0aW5nIGBYRlJNX0FMR09gLCBhbmQgdGhhdCBpbiB0dXJuLCBzZWxlY3RzIGBYRlJNYC4gVGhhdCBtdWNoIGlzIGNsZWFyIGZyb20gdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzLiBOYXR1cmFsbHksIGBYRlJNX01JR1JBVEVgIGFsc28gZGVwZW5kcyBvbiBgWEZSTWAuIFNvLCBpZiB3ZSB3YW50IHRoaXMgbWlncmF0aW9uIGZ1bmN0aW9uYWxpdHkgdG8gd29yaywgd2UmIzM5O2xsIG5lZWQgYm90aCBgWEZSTV9VU0VSYCBhbmQgYFhGUk1fTUlHUkFURWAgZW5hYmxlZC4gU2VlbXMgbG9naWNhbCwgZ2l2ZW4gdGhlIHVzZXIgc3BhY2UgaW50ZXJhY3Rpb24gaW52b2x2ZWQuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBhY3R1YWwgY29kZS4gVGhlIHBhdGNoIHRvdWNoZXMgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYC4gU2luY2UgdGhpcyBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgSSYjMzk7bSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHdoZXJlIGl0JiMzOTtzIGJlaW5nICpjYWxsZWQqIGZyb20uIEFuZCB5ZXMsIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAgaXMsIGFzIEkgc3VzcGVjdGVkLCBjYWxsZWQgYnkgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAuIE9rYXksIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGlzIGFsc28gc3RhdGljLCBidXQgdGhhdCYjMzk7cyBrZXkuIEl0JiMzOTtzIGFjdHVhbGx5IGFuIGVudHJ5IHBvaW50IGluIHRoZSBgeGZybV9saW5rYCBhcnJheSBmb3IgYFhGUk1fTVNHX01JR1JBVEVfU1RBVEVgLiBBbmQgdGhlIGxpZ2h0IGJ1bGIgZ29lcyBvZmYuIFdhaXQgYSBtaW51dGXigKYgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgaXMgKmFsc28qIGNhbGxlZCBieSBgeGZybV91c2VyX3Jjdl9tc2dgLCB0aGUgbmV0bGluayBoYW5kbGVyISBBaGEhIFRoYXQmIzM5O3MgdGhlIGNydWNpYWwgbGluayB0byB1c2VyIHNwYWNlLiBJdCBoYW5kbGVzIHRoZSBuZXRsaW5rIG1lc3NhZ2UgZm9yIHRoZSBtaWdyYXRpb24uCgpJJiMzOTtkIGJldHRlciBtYWtlIHN1cmUgdGhhdCBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBpc24mIzM5O3QgaW5saW5lZCwgdGhvdWdoLCBvciB3ZSYjMzk7cmUgbG9zaW5nIHRoZSBlbnRyeSBwb2ludCB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7bGwgbmVlZCB0byB2ZXJpZnkgdGhhdC4gSXQgd291bGQgZGVmaW5pdGVseSBiZSBzdWJvcHRpbWFsIGlmIGl0IHdhcyBpbmxpbmVkLCBzaW5jZSB0aGF0IHdvdWxkIG1ha2UgaXQgbW9yZSBkaWZmaWN1bHQgZm9yIHVzIHRvIHVzZSB0aGlzIGVudHJ5IHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX2RvX21pZ3JhdGVfc3RhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYz0zMzIyPXN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGUoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzNDYtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMzQ3OnN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxubmV0L3hmcm0veGZybV91c2VyLmMtMzM0OC1cdFx0XHRcdCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTI4LSNlbHNlXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNTI5OnN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxubmV0L3hmcm0veGZybV91c2VyLmMtMzUzMC1cdFx0XHRcdCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zNzQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9saW5rIHtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzgxLVx0W1hGUk1fTVNHX0dFVERFRkFVTFQgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9nZXRfZGVmYXVsdCAgIH0sXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNzgyOlx0W1hGUk1fTVNHX01JR1JBVEVfU1RBVEUgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUgfSxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3ODMtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5NzUKCQkJCQkJCW91dHB1dDogMTU2CgkJCQkJCQl0aG91Z2h0czogMzg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBYRlJNIE1pZ3JhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBYRlJNIG1pZ3JhdGlvbiBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IGEgZ29vZCBmb2N1cyBzeW1ib2wgZm9yIGZ1enppbmcuIFNpbmNlIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGlzIGEgZnVuY3Rpb24gcG9pbnRlciB3aXRoaW4gYHhmcm1fbGlua2AsIEkga25vdyBpdCBjYW4mIzM5O3QgYmUgaW5saW5lZC4gVGhhdCBpbW1lZGlhdGVseSBtYWtlcyBpdCBhIHN0cm9uZyBjYW5kaWRhdGUuIEl0JiMzOTtzIGEga2V5IGVudHJ5IHBvaW50LgoKSSBjaGVja2VkIHRvIHNlZSBpZiBhbnkgb3RoZXIgc3ltYm9scyBzdG9vZCBvdXQuIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgaXMgY2FsbGVkLCBidXQgdGhhdCYjMzk7cyBhIGdlbmVyYWwtcHVycG9zZSBmdW5jdGlvbiwgc28gaXQmIzM5O3MgcHJvYmFibHkgbm90IHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UuIEFoLCByaWdodC4gVGhlIHBhdGNoIGFkZHMgYHJjdV9yZWFkX2xvY2soKWAgYW5kIGByY3VfcmVhZF91bmxvY2soKWAgYXJvdW5kIHRoZSBjYWxsIHRvIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgd2l0aGluIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAuIFRoYXQgbWVhbnMgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgaXMgZGVmaW5pdGVseSB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byB0YXJnZXQgZm9yIGZ1enppbmcsIGdpdmVuIHRoZSBhZGRlZCBSQ1UgcHJvdGVjdGlvbnMuCgpOZXh0LCBJIHZlcmlmaWVkIHRoYXQgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgaXMgYWN0dWFsbHkgcmVhY2hhYmxlLiBJdCYjMzk7cyBhbiBYRlJNIG5ldGxpbmsgbWVzc2FnZSBoYW5kbGVyLCBhbmQgaXQgaGFuZGxlcyB0aGUgbWlncmF0aW9uIHN0YXRlIG1lc3NhZ2VzLiBZZXAsIGl0IGlzIHJlYWNoYWJsZS4KCk5vdywgbGV0JiMzOTtzIHZlcmlmeSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3MuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBgWEZSTV9VU0VSYCBhbmQgYFhGUk1fTUlHUkFURWAgYXJlIHRoZSBrZXkgY29uZmlncyBoZXJlLiBUaGUgZm9ybWVyIGlzIG9idmlvdXM6IGl0IGVuYWJsZXMgdGhlIG5ldGxpbmsgaW50ZXJmYWNlLCB3aGljaCB3ZSBuZWVkIHRvIHRyaWdnZXIgdGhlIG1lc3NhZ2UuIFRoZSBsYXR0ZXIgZW5hYmxlcyB0aGUgc3RhdGUgbWlncmF0aW9uIGZ1bmN0aW9uYWxpdHkgaXRzZWxmLiBZZXMsIHRoaXMgY29tYmluYXRpb24gc2hvdWxkIGJlIHN1ZmZpY2llbnQuCgpTbywgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgaXMgbXkgcHJpbWFyeSBmb2N1cyBzeW1ib2wsIGFuZCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IGBYRlJNX1VTRVJgIGFuZCBgWEZSTV9NSUdSQVRFYCBhcmUgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyB0byByZXByb2R1Y2UgdGhpcyBjb25kaXRpb24sIHRoaXMgZml4LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WEZSTV9VU0VSJiMzNDssCiAgICAmIzM0O1hGUk1fTUlHUkFURSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hmcm1fZG9fbWlncmF0ZV9zdGF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBSQ1UgaXNzdWUgYnkgYWRkaW5nIGByY3VfcmVhZF9sb2NrKClgIGFuZCBgcmN1X3JlYWRfdW5sb2NrKClgIGFyb3VuZCBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIGluIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgWEZSTSBuZXRsaW5rIGludGVyZmFjZS4gVGhlIG1vZGlmaWVkIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYFhGUk1fTVNHX01JR1JBVEVfU1RBVEVgIG5ldGxpbmsgbWVzc2FnZSwgaGFuZGxlZCBieSBgeGZybV9kb19taWdyYXRlX3N0YXRlYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WEZSTV9VU0VSJiMzNDssCiAgICAmIzM0O1hGUk1fTUlHUkFURSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hmcm1fZG9fbWlncmF0ZV9zdGF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBSQ1UgaXNzdWUgYnkgYWRkaW5nIGByY3VfcmVhZF9sb2NrKClgIGFuZCBgcmN1X3JlYWRfdW5sb2NrKClgIGFyb3VuZCBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIGluIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgWEZSTSBuZXRsaW5rIGludGVyZmFjZS4gVGhlIG1vZGlmaWVkIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYFhGUk1fTVNHX01JR1JBVEVfU1RBVEVgIG5ldGxpbmsgbWVzc2FnZSwgaGFuZGxlZCBieSBgeGZybV9kb19taWdyYXRlX3N0YXRlYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDExOjE3OjQwLjc5OTg3OTU2OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMTg2ODYyOTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGUk1fVVNFUlwiLFxuICAgIFwiWEZSTV9NSUdSQVRFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZybV9kb19taWdyYXRlX3N0YXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gUkNVIGlzc3VlIGJ5IGFkZGluZyBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCBhcm91bmQgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBpbiBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFhGUk0gbmV0bGluayBpbnRlcmZhY2UuIFRoZSBtb2RpZmllZCBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBYRlJNX01TR19NSUdSQVRFX1NUQVRFYCBuZXRsaW5rIG1lc3NhZ2UsIGhhbmRsZWQgYnkgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDExOjE3OjQwLjc5OTg4NDUyOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDEyNjUyNDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzkyMDQ2NzMyNDdmMjBjZjI5NzY1MmRhNTFiMGQyOWFkOWJjNGMwZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAzMSAxMToxNzozOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3VzZXIuYyBiL25ldC94ZnJtL3hmcm1fdXNlci5jXFxuaW5kZXggZDZkYjYzMzA0YmE2Yi4uMGJhMDYxNGQ2NTBmMyAxMDA2NDRcXG4tLS0gYS9uZXQveGZybS94ZnJtX3VzZXIuY1xcbisrKyBiL25ldC94ZnJtL3hmcm1fdXNlci5jXFxuQEAgLTMzMzcsNyArMzMzNywxMSBAQCBzdGF0aWMgaW50IHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbiBcXG4tXFx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfTUlHUkFURSk7XFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0ZXJyID0geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9NSUdSQVRFKTtcXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTE6MTc6NDEuMjEzMjMzNjQzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6Nzk3NzM1MDA2MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZSTV9VU0VSXCIsXG4gICAgXCJYRlJNX01JR1JBVEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4ZnJtX2RvX21pZ3JhdGVfc3RhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBSQ1UgaXNzdWUgYnkgYWRkaW5nIGByY3VfcmVhZF9sb2NrKClgIGFuZCBgcmN1X3JlYWRfdW5sb2NrKClgIGFyb3VuZCBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIGluIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgWEZSTSBuZXRsaW5rIGludGVyZmFjZS4gVGhlIG1vZGlmaWVkIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYFhGUk1fTVNHX01JR1JBVEVfU1RBVEVgIG5ldGxpbmsgbWVzc2FnZSwgaGFuZGxlZCBieSBgeGZybV9kb19taWdyYXRlX3N0YXRlYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzkyMDQ2NzMyNDdmMjBjZjI5NzY1MmRhNTFiMGQyOWFkOWJjNGMwZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMxIDExOjE3OjM5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV91c2VyLmMgYi9uZXQveGZybS94ZnJtX3VzZXIuY1xuaW5kZXggZDZkYjYzMzA0YmE2Yi4uMGJhMDYxNGQ2NTBmMyAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1fdXNlci5jXG4rKysgYi9uZXQveGZybS94ZnJtX3VzZXIuY1xuQEAgLTMzMzcsNyArMzMzNywxMSBAQCBzdGF0aWMgaW50IHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbi1cdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX01JR1JBVEUpO1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0ZXJyID0geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9NSUdSQVRFKTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gc3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMToxNzo0MS4yMTMyMzQ5OTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODcwNDQxODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgZm9jdXNpbmcgb24gdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBwYXRjaCwgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipSQ1UgUHJvdGVjdGlvbiBpbiB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZSoqXG5cbkFscmlnaHQsIHNvIHRoZSBwYXRjaCBpcyBpbnRyb2R1Y2luZyBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCBhcm91bmQgdGhlIGNhbGwgdG8gYHhmcm1fbmxtc2dfbXVsdGljYXN0YCB3aXRoaW4gdGhlIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAgZnVuY3Rpb24sIGxvY2F0ZWQgaW4gYG5ldC94ZnJtL3hmcm1fdXNlci5jYC4gVGhpcyBpbW1lZGlhdGVseSBzaWduYWxzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWltZWQgYXQgYWRkcmVzc2luZyBlaXRoZXIgYW4gUkNVLXJlbGF0ZWQgd2FybmluZyBvciwgbW9yZSBjcml0aWNhbGx5LCBhIHBvdGVudGlhbCBidWcgcmVsYXRlZCB0byBpbXByb3BlciBjb25jdXJyZW50IGFjY2Vzcy4gVGhlIGZhY3QgdGhhdCBSQ1UgcHJvdGVjdGlvbiBpcyBiZWluZyBhZGRlZCBpcyB0aGUga2V5IGluZGljYXRvciBoZXJlOyBpdCBzdWdnZXN0cyBhIHN1YnRsZSByYWNlIGNvbmRpdGlvbiBjb3VsZCBleGlzdCB3aGVyZSBkYXRhIGFjY2Vzc2VkIHdpdGhpbiBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIGlzIHN1c2NlcHRpYmxlIHRvIG1vZGlmaWNhdGlvbiB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXBzLCBnaXZlbiB0aGlzIGlzIGEgbmV0d29ya2luZyBhbmQgc2VjdXJpdHkgY29udGV4dCwgYXJlIHRvIGRpdmUgZGVlcGVyLiBGaXJzdCwgSSB3YW50IHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBmbG93LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gZXhhY3RseSBob3cgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCB3b3JrcywgcGFydGljdWxhcmx5IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBgeGZybV9ubG1zZ19tdWx0aWNhc3RgLiBBbmQsIHNwZWNpZmljYWxseSwgSSBtdXN0IGxvb2sgY2xvc2VseSBhdCBob3cgdGhlIGRhdGEgYmVpbmcgc2VudCB2aWEgdGhhdCBtdWx0aWNhc3QgY2hhbm5lbCBpcyBwb3B1bGF0ZWQgYW5kIHVzZWQuIEEgcXVpY2sgaW5zcGVjdGlvbiBvZiBgeGZybV9kb19taWdyYXRlX3N0YXRlYCB3b3VsZCBiZSBhIGdvb2QgY29tcGFuaW9uIHRvIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgZXhlY3V0aW9uIGZsb3cuXG5cblRoZW4sIGJlZm9yZSBJIGdvIGZ1cnRoZXIsIEkgc2hvdWxkIHZlcmlmeSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBVbmRlcnN0YW5kaW5nIHdoaWNoIGNvbmZpZ3VyYXRpb25zIGVuYWJsZSBvciBkaXNhYmxlIHRoZSByZWxldmFudCBYRlJNIGZlYXR1cmVzIGFyZSBpbXBvcnRhbnQgdG8gY29uc2lkZXIgd2hlbiBldmFsdWF0aW5nIHRoZSBpbXBvcnRhbmNlIG9mIHRoaXMgZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTAzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTE6MTc6NDYuMDgzNjc5NDAzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwODY0Njg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fc2VuZF9taWdyYXRlX3N0YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jPTMzMDk9c3RhdGljIHVuc2lnbmVkIGludCB4ZnJtX21pZ3JhdGVfc3RhdGVfbXNnc2l6ZShjb25zdCBzdHJ1Y3QgeGZybV9taWdyYXRlICptLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzMyMS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMzIyOnN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGUoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzMjMtXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlICp1bSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTMzNDc9c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTEwLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM1MTE6XFx0ZXJyID0geGZybV9zZW5kX21pZ3JhdGVfc3RhdGUobmV0LCB1bSwgXFx1MDAyNm0sIHhjLVxcdTAwM2VkaXIsXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzUxMi1cXHRcXHRcXHRcXHQgICAgICBubGgtXFx1MDAzZW5sbXNnX3BpZCwgbmxoLVxcdTAwM2VubG1zZ19zZXEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMToxNzo0Ni4xMzQ1NDk3N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MDk3ODk2MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipLY29uZmlnIERpdmUgZm9yIHhmcm1fdXNlci5jKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgS2NvbmZpZyBhZ2Fpbi4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgc3Vycm91bmRpbmcgYG5ldC94ZnJtL3hmcm1fdXNlci5jYC4gVGhpcyBmaWxlIGlzIGNydWNpYWwgZm9yIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24gd2l0aCB0aGUgWEZSTSBzdWJzeXN0ZW0sIHNvIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIGl0cyBjb25maWd1cmF0aW9uIGlzIGVzc2VudGlhbCBmb3IsIHNheSwgdHJvdWJsZXNob290aW5nIGlzc3VlcyByZWxhdGVkIHRvIHBvbGljeSBtYW5hZ2VtZW50LCBrZXlpbmcsIG9yIG90aGVyIHVzZXItc3BhY2UgY29udHJvbCBwbGFuZSBlbGVtZW50cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0cmlnZ2VycyBpdHMgaW5jbHVzaW9uLCB3aGF0IGZlYXR1cmVzIGl0IHVubG9ja3MsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcmVsYXRlZCBtb2R1bGVzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOlxuXG4qICAgKipEZXBlbmRlbmNpZXM6KiogV2hhdCBvdGhlciBLY29uZmlnIHN5bWJvbHMgbmVlZCB0byBiZSBlbmFibGVkIGJlZm9yZSBgeGZybV91c2VyLmNgIGV2ZW4gYmVjb21lcyBhIHBvc3NpYmlsaXR5PyBBcmUgdGhlcmUgY29yZSBuZXR3b3JraW5nIHN0YWNrIHByZXJlcXVpc2l0ZXMsIHNlY3VyaXR5IGZlYXR1cmVzLCBvciBvdGhlciBYRlJNIGNvbXBvbmVudHMgdGhhdCBpdCByZWxpZXMgdXBvbj9cbiogICAqKkNvbmZpZ3VyYXRpb24gT3B0aW9uczoqKiBEb2VzIHRoZSBLY29uZmlnIGV4cG9zZSBhbnkgYnVpbGQtdGltZSBwYXJhbWV0ZXJzIHNwZWNpZmljIHRvIGB4ZnJtX3VzZXIuY2A/IEFyZSB0aGVyZSBvcHRpb25zIHRvIGVuYWJsZSBvciBkaXNhYmxlIGNlcnRhaW4gdXNlci1zcGFjZSBmdW5jdGlvbmFsaXRpZXMsIGxpa2Ugc3BlY2lmaWMgcHJvdG9jb2xzIG9yIGNvbnRyb2wgbWVjaGFuaXNtcz8gV2hhdCBncmFudWxhciBrbm9icyBhcmUgYXZhaWxhYmxlLCBpZiBhbnk/XG4qICAgKipJbnRlcmFjdGlvbiB3aXRoIG90aGVyIG1vZHVsZXM6KiogSSdsbCBiZSBtaW5kZnVsIG9mIGNyb3NzLWRlcGVuZGVuY2llcyB0byBjb3JyZWN0bHkgaWRlbnRpZnkgYW55IGNvbmZsaWN0cy5cbiogICAqKkRlZmF1bHRzOioqIEFyZSB0aGVyZSBhbnkgZGVmYXVsdCBzZXR0aW5ncyBmb3IgdGhlIHBhcmFtZXRlcnMgSSdtIGV4YW1pbmluZz8gVGhpcyBhZmZlY3RzIHRoZSBvdXQtb2YtdGhlLWJveCBiZWhhdmlvciBvZiBhIHN5c3RlbS5cblxuRXNzZW50aWFsbHksIEkgd2FudCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IGB4ZnJtX3VzZXIuY2AgZml0cyBpbnRvIHRoZSBidWlsZCBzeXN0ZW0gYW5kIGhvdyBpdHMgYmVoYXZpb3IgY2FuIGJlIGNvbnRyb2xsZWQgdmlhIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg3OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDExOjE3OjUwLjY0NDM0MTY3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NzEwNTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fdXNlclxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS9NYWtlZmlsZT0xOT1vYmotJChDT05GSUdfWEZSTV9BTEdPKSArPSB4ZnJtX2FsZ28ub1xcbm5ldC94ZnJtL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19YRlJNX1VTRVIpICs9IHhmcm1fdXNlci5vXFxubmV0L3hmcm0vTWFrZWZpbGUtMjEtb2JqLSQoQ09ORklHX1hGUk1fVVNFUl9DT01QQVQpICs9IHhmcm1fY29tcGF0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTE6MTc6NTAuNjkwMDU5Mjc3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYxOTIxNzgzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqRXhhbWluaW5nIHRoZSBYRlJNIENvbmZpZ3VyYXRpb24gYW5kIE1pZ3JhdGlvbioqXG5cbkFscmlnaHQsIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gaW4gcGxheSBoZXJlIGlzIGRlZmluaXRlbHkgYFhGUk1fVVNFUmAuIE1ha2VzIHNlbnNlLiBOb3csIHRoZSBuZXh0IHF1ZXN0aW9uIGlzLCBhcmUgdGhlcmUgKmFueSogb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgSSBzaG91bGQgYmUgY29uc2lkZXJpbmcgaW4gdGhpcyBjb250ZXh0PyBBbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaC5cblxuTGV0J3MgZGlnIGEgYml0IGRlZXBlciBpbnRvIHRoZSBtaWdyYXRpb24gYXNwZWN0LiBJJ20gZ29pbmcgdG8gdHJhY2sgZG93biB0aGUgY2FsbGVycyBvZiBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgLiBVbmRlcnN0YW5kaW5nIHdoYXQgY2FsbHMgdGhhdCBmdW5jdGlvbiB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIHN0YXRlIG1pZ3JhdGlvbiBpcyBhY3R1YWxseSB1c2VkLiBUaGF0J2xsIHByb2JhYmx5IHByb3ZpZGUgc29tZSBrZXkgaW5zaWdodHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNzksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMToxNzo1NC4zMDkyODA1OTJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5MTg5MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9zZW5kX21pZ3JhdGVfc3RhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmM9MzMwOT1zdGF0aWMgdW5zaWduZWQgaW50IHhmcm1fbWlncmF0ZV9zdGF0ZV9tc2dzaXplKGNvbnN0IHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm0sXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzIxLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMzMjI6c3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzMyMy1cXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgeGZybV91c2VyX21pZ3JhdGVfc3RhdGUgKnVtLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MzM0Nz1zdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MTAtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzUxMTpcXHRlcnIgPSB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShuZXQsIHVtLCBcXHUwMDI2bSwgeGMtXFx1MDAzZWRpcixcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTEyLVxcdFxcdFxcdFxcdCAgICAgIG5saC1cXHUwMDNlbmxtc2dfcGlkLCBubGgtXFx1MDAzZW5sbXNnX3NlcSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDExOjE3OjU0LjM1NjIwMzc5OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NzcwNjE3NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgeGZybWAgTWlncmF0aW9uIExvZ2ljKipcblxuT2theSwgc28gYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQga2lja3Mgb2ZmIHRoZSBzdGF0ZSBtaWdyYXRpb24gcHJvY2Vzcy4gTmF0dXJhbGx5LCB0aGUgbmV4dCBzdGVwLCBhcyBpbmRpY2F0ZWQgYnkgdGhlIGNvZGUsIGlzIHRoZSBjYWxsIHRvIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoYXQgY29uZGl0aW9ucyB0cmlnZ2VyIHRoaXMgbWlncmF0aW9uIGluIHRoZSBmaXJzdCBwbGFjZT9cIi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGJlaGluZCB0aGlzIHNlcXVlbmNlLlxuXG5UaGUgZmlyc3QgdGhpbmcgSSdtIGdvaW5nIHRvIGNoZWNrIGlzIGlmIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIEkgd2FudCB0byBzZWUgaWYgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGdhdGVkIGJlaGluZCBhbnkgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMsIGFueSBgI2lmZGVmYCBibG9ja3MuIEFyZSB0aGVyZSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMsIGZlYXR1cmVzLCBvciBhcmNoaXRlY3R1cmFsIGNvbnN0cmFpbnRzIHRoYXQgZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBtaWdyYXRpb24gcGF0aCBpcyBldmVuIGF2YWlsYWJsZT8gS25vd2luZyBpZiB0aGlzIGlzIHNlbGVjdGl2ZWx5IGVuYWJsZWQgb3IgZGlzYWJsZWQgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIGhvdyB0aGVzZSByb3V0aW5lcyBhcmUgaW5jb3Jwb3JhdGVkIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLiBBcmUgd2UgZGVhbGluZyB3aXRoIGEgY29tcGlsZS10aW1lIG9wdGlvbiBvciBhIHJ1bnRpbWUgZGVjaXNpb24gaGVyZT8gVGhhdCdzIHRoZSBxdWVzdGlvbiBJIG5lZWQgdG8gYW5zd2VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODc5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTE6MTc6NTcuODMzMjY4NDA1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzU3ODE1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2RvX21pZ3JhdGVfc3RhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmM9MzMyMj1zdGF0aWMgaW50IHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzNDYtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzM0NzpzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzQ4LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MjgtI2Vsc2VcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNTI5OnN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MzAtXFx0XFx0XFx0XFx0IHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9Mzc0ND1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbGluayB7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzgxLVxcdFtYRlJNX01TR19HRVRERUZBVUxUICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fZ2V0X2RlZmF1bHQgICB9LFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM3ODI6XFx0W1hGUk1fTVNHX01JR1JBVEVfU1RBVEUgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUgfSxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzgzLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDExOjE3OjU3Ljg4MDg1Mjk5MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTM1MTgxMzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZDpcblxuKipEaXZpbmcgaW50byBgeGZybV9kb19taWdyYXRlX3N0YXRlYCdzIENvbmRpdGlvbmFsIExvZ2ljKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGFuZCBteSBleWUgaW1tZWRpYXRlbHkgbGFuZHMgb24gYW4gYCNlbHNlYCBibG9jay4gSW50ZXJlc3RpbmcuIFRoZXNlIHRoaW5ncyB1c3VhbGx5IGV4aXN0IGZvciBhIHJlYXNvbiwgcmlnaHQ/IEl0J3MgYWxtb3N0IGFsd2F5cyBhIHNpZ24gdGhhdCB0aGVyZSdzIHNvbWUgY29uZGl0aW9uYWwgYmVoYXZpb3IgSSBuZWVkIHRvIHVuZGVyc3RhbmQsIHNvbWUgZGlmZmVyZW50IGV4ZWN1dGlvbiBwYXRoIGRlcGVuZGluZyBvbiBhIHNwZWNpZmljIGNpcmN1bXN0YW5jZS4gIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIHdoYXQncyB0aGUgY29uZGl0aW9uPyBXaGF0J3MgdGhlIGAjaWZkZWZgIHRoYXQgZ292ZXJucyB0aGlzIHNwZWNpZmljIGJyYW5jaD9cIiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHByZXByb2Nlc3NvciBtYWNybyBjb250cm9scyB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgcGFydGljdWxhciBjb2RlIHBhdGguIEtub3dpbmcgdGhlIGNvbmRpdGlvbiBpcyAqZXNzZW50aWFsKiB0byBncmFzcGluZyB0aGUgb3ZlcmFsbCBiZWhhdmlvciBhbmQgcHVycG9zZSBvZiB0aGlzIGZ1bmN0aW9uIGluIHZhcmlvdXMgY29uZmlndXJhdGlvbnMuIExldCdzIHNlZS4uLiBJJ2xsIHRyYWNlIGJhY2sgYW5kIGZpbmQgdGhhdCBgI2lmZGVmYCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1OTYsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMToxODowMS4wMTYwMzcwNjlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAwMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzNDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMzQwOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4zMzQxOlxcdFxcdGVyciA9IHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfTUlHUkFURSk7XFxuMzM0MjpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4zMzQzOlxcdFxcbjMzNDQ6XFx0XFx0cmV0dXJuIGVycjtcXG4zMzQ1OlxcdH1cXG4zMzQ2OlxcdFxcbjMzNDc6XFx0c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuMzM0ODpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuMzM0OTpcXHR7XFxuMzM1MDpcXHRcXHRzdHJ1Y3QgeGZybV91c2VyX21pZ3JhdGVfc3RhdGUgKnVtID0gbmxtc2dfZGF0YShubGgpO1xcbjMzNTE6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVxcdTAwM2Vzayk7XFxuMzM1MjpcXHRcXHRzdHJ1Y3QgeGZybV91c2VyX29mZmxvYWQgeHVvID0ge307XFxuMzM1MzpcXHRcXHRzdHJ1Y3QgeGZybV9taWdyYXRlIG0gPSB7fTtcXG4zMzU0OlxcdFxcdHN0cnVjdCB4ZnJtX3N0YXRlICp4YztcXG4zMzU1OlxcdFxcdHN0cnVjdCB4ZnJtX3N0YXRlICp4O1xcbjMzNTY6XFx0XFx0aW50IGVycjtcXG4zMzU3OlxcdFxcbjMzNTg6XFx0XFx0aWYgKCF1bS1cXHUwMDNlaWQuc3BpKSB7XFxuMzM1OTpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJJbnZhbGlkIFNQSSAweDBcXFwiKTtcXG4zMzYwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjMzNjE6XFx0XFx0fVxcbjMzNjI6XFx0XFxuMzM2MzpcXHRcXHRpZiAodW0tXFx1MDAzZXJlc2VydmVkKSB7XFxuMzM2NDpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJSZXNlcnZlZCBmaWVsZCBtdXN0IGJlIHplcm9cXFwiKTtcXG4zMzY1OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjMzNjY6XFx0XFx0fVxcbjMzNjc6XFx0XFxuMzM2ODpcXHRcXHRpZiAodW0tXFx1MDAzZWZsYWdzIFxcdTAwMjYgflhGUk1fTUlHUkFURV9TVEFURV9LTk9XTl9GTEFHUykge1xcbjMzNjk6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjaywgXFxcIlVua25vd24gZmxhZ3M6IDB4JXhcXFwiLFxcbjMzNzA6XFx0XFx0XFx0XFx0XFx0ICAgdW0tXFx1MDAzZWZsYWdzIFxcdTAwMjYgflhGUk1fTUlHUkFURV9TVEFURV9LTk9XTl9GTEFHUyk7XFxuMzM3MTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zMzcyOlxcdFxcdH1cXG4zMzczOlxcdFxcbjMzNzQ6XFx0XFx0ZXJyID0gdmVyaWZ5X3hmcm1fZmFtaWx5KHVtLVxcdTAwM2VuZXdfZmFtaWx5LCBleHRhY2spO1xcbjMzNzU6XFx0XFx0aWYgKGVycilcXG4zMzc2OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMzM3NzpcXHRcXG4zMzc4OlxcdFxcdGlmICghKHVtLVxcdTAwM2VmbGFncyBcXHUwMDI2IFhGUk1fTUlHUkFURV9TVEFURV9VUERBVEVfSDJIX1NFTCkpIHtcXG4zMzc5OlxcdFxcdFxcdGVyciA9IHZlcmlmeV9zZWxlY3Rvcl9wcmVmaXhsZW4odW0tXFx1MDAzZW5ld19zZWwuZmFtaWx5LFxcbjMzODA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNnVtLVxcdTAwM2VuZXdfc2VsLCBleHRhY2spO1xcbjMzODE6XFx0XFx0XFx0aWYgKGVycilcXG4zMzgyOlxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuMzM4MzpcXHRcXHR9XFxuMzM4NDpcXHRcXG4zMzg1OlxcdFxcdGNvcHlfZnJvbV91c2VyX21pZ3JhdGVfc3RhdGUoXFx1MDAyNm0sIHVtKTtcXG4zMzg2OlxcdFxcbjMzODc6XFx0XFx0eCA9IHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgbS5vbGRfbWFyay52IFxcdTAwMjYgbS5vbGRfbWFyay5tLFxcbjMzODg6XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnVtLVxcdTAwM2VpZC5kYWRkciwgdW0tXFx1MDAzZWlkLnNwaSxcXG4zMzg5OlxcdFxcdFxcdFxcdCAgICAgIHVtLVxcdTAwM2VpZC5wcm90bywgdW0tXFx1MDAzZWlkLmZhbWlseSk7XFxuMzM5MDpcXHRcXHRpZiAoIXgpIHtcXG4zMzkxOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkNhbiBub3QgZmluZCBzdGF0ZVxcXCIpO1xcbjMzOTI6XFx0XFx0XFx0cmV0dXJuIC1FU1JDSDtcXG4zMzkzOlxcdFxcdH1cXG4zMzk0OlxcdFxcbjMzOTU6XFx0XFx0aWYgKHVtLVxcdTAwM2VmbGFncyBcXHUwMDI2IFhGUk1fTUlHUkFURV9TVEFURV9VUERBVEVfSDJIX1NFTCkge1xcbjMzOTY6XFx0XFx0XFx0dTggcHJlZml4bGVuID0gKHgtXFx1MDAzZXByb3BzLmZhbWlseSA9PSBBRl9JTkVUNikgPyAxMjggOiAzMjtcXG4zMzk3OlxcdFxcbjMzOTg6XFx0XFx0XFx0aWYgKHgtXFx1MDAzZXNlbC5wcmVmaXhsZW5fcyAhPSB4LVxcdTAwM2VzZWwucHJlZml4bGVuX2QgfHxcXG4zMzk5OlxcdFxcdFxcdCAgICB4LVxcdTAwM2VzZWwucHJlZml4bGVuX2QgIT0gcHJlZml4bGVuIHx8XFxuMzQwMDpcXHRcXHRcXHQgICAgIXhmcm1fYWRkcl9lcXVhbChcXHUwMDI2eC1cXHUwMDNlc2VsLmRhZGRyLCBcXHUwMDI2eC1cXHUwMDNlaWQuZGFkZHIsIHgtXFx1MDAzZXByb3BzLmZhbWlseSkgfHxcXG4zNDAxOlxcdFxcdFxcdCAgICAheGZybV9hZGRyX2VxdWFsKFxcdTAwMjZ4LVxcdTAwM2VzZWwuc2FkZHIsIFxcdTAwMjZ4LVxcdTAwM2Vwcm9wcy5zYWRkciwgeC1cXHUwMDNlcHJvcHMuZmFtaWx5KSkge1xcbjM0MDI6XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbjM0MDM6XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJTQSBzZWxlY3RvciBpcyBub3QgYSBzaW5nbGUtaG9zdCBtYXRjaCBmb3IgU0EgYWRkcmVzc2VzXFxcIik7XFxuMzQwNDpcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjM0MDU6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMzQwNjpcXHRcXHRcXHR9XFxuMzQwNzpcXHRcXHR9XFxuMzQwODpcXHRcXG4zNDA5OlxcdFxcdGlmIChhdHRyc1tYRlJNQV9FTkNBUF0pIHtcXG4zNDEwOlxcdFxcdFxcdG0uZW5jYXAgPSBubGFfZGF0YShhdHRyc1tYRlJNQV9FTkNBUF0pO1xcbjM0MTE6XFx0XFx0XFx0aWYgKG0uZW5jYXAtXFx1MDAzZWVuY2FwX3R5cGUgPT0gMCkge1xcbjM0MTI6XFx0XFx0XFx0XFx0bS5lbmNhcCA9IE5VTEw7IC8qIHNlbnRpbmVsOiByZW1vdmUgZW5jYXAgKi9cXG4zNDEzOlxcdFxcdFxcdH0gZWxzZSBpZiAobS5lbmNhcC1cXHUwMDNlZW5jYXBfdHlwZSAhPSBVRFBfRU5DQVBfRVNQSU5VRFApIHtcXG4zNDE0OlxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIlVuc3VwcG9ydGVkIGVuY2Fwc3VsYXRpb24gdHlwZVxcXCIpO1xcbjM0MTU6XFx0XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4zNDE2OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjM0MTc6XFx0XFx0XFx0fVxcbjM0MTg6XFx0XFx0fSBlbHNlIHtcXG4zNDE5OlxcdFxcdFxcdG0uZW5jYXAgPSB4LVxcdTAwM2VlbmNhcDsgLyogb21pdC10by1pbmhlcml0ICovXFxuMzQyMDpcXHRcXHR9XFxuMzQyMTpcXHRcXG4zNDIyOlxcdFxcdGlmIChhdHRyc1tYRlJNQV9NVElNRVJfVEhSRVNIXSkge1xcbjM0MjM6XFx0XFx0XFx0ZXJyID0gdmVyaWZ5X210aW1lcl90aHJlc2goISFtLmVuY2FwLCB4LVxcdTAwM2VkaXIsIGV4dGFjayk7XFxuMzQyNDpcXHRcXHRcXHRpZiAoZXJyKVxcbjM0MjU6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMzQyNjpcXHRcXHR9XFxuMzQyNzpcXHRcXG4zNDI4OlxcdFxcdGlmIChubGFfZ2V0X3UzMl9kZWZhdWx0KGF0dHJzW1hGUk1BX05BVF9LRUVQQUxJVkVfSU5URVJWQUxdLCAwKSBcXHUwMDI2XFx1MDAyNiAhbS5lbmNhcCkge1xcbjM0Mjk6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbjM0MzA6XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJOQVRfS0VFUEFMSVZFX0lOVEVSVkFMIHJlcXVpcmVzIGVuY2Fwc3VsYXRpb25cXFwiKTtcXG4zNDMxOlxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMzQzMjpcXHRcXHRcXHRnb3RvIG91dDtcXG4zNDMzOlxcdFxcdH1cXG4zNDM0OlxcdFxcbjM0MzU6XFx0XFx0aWYgKGF0dHJzW1hGUk1BX09GRkxPQURfREVWXSkge1xcbjM0MzY6XFx0XFx0XFx0bS54dW8gPSBubGFfZGF0YShhdHRyc1tYRlJNQV9PRkZMT0FEX0RFVl0pO1xcbjM0Mzc6XFx0XFx0fSBlbHNlIHtcXG4zNDM4OlxcdFxcdFxcdGJvb2wgaW5oZXJpdF9vZmZsb2FkID0gISh1bS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBYRlJNX01JR1JBVEVfU1RBVEVfQ0xFQVJfT0ZGTE9BRCk7XFxuMzQzOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTE6MTg6MDEuMDE2MjM4OTY5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MDM2MjA2NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIGFjY291bnQ6XG5cbioqUmV2ZXJzZSBFbmdpbmVlcmluZyB0aGUgUHJlcHJvY2Vzc29yIERpcmVjdGl2ZSoqXG5cbkFscmlnaHQsIHNvIHRoZSBnYW1lIHBsYW4gaXMgY2xlYXI6IHBpbnBvaW50aW5nIHRoYXQgYCNpZmRlZmAgcXVpY2tseSBpcyB0aGUgcHJpb3JpdHkuIEluc3RlYWQgb2Ygc2xvZ2dpbmcgdGhyb3VnaCB0aGUgY29kZSBsaW5lIGJ5IGxpbmUsIEknbSB0aGlua2luZyBhIGJhY2t3YXJkIHNjYW4gaXMgdGhlIG1vc3QgZWZmaWNpZW50IGFwcHJvYWNoLiBKdW1waW5nIHN0cmFpZ2h0IHRvIHRoZSBgI2lmZGVmYCBpdHNlbGYgZmVlbHMgbGlrZSB0aGUgZmFzdGVzdCB3YXkgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBjb250ZXh0LiBJJ2xsIG1lbnRhbGx5IG1hcCBvdXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYWZ0ZXIgSSBsb2NhdGUgaXQgdG8gY2hlY2sgZm9yIGFueSBjcml0aWNhbCBsb2dpYy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgbW9zdCBjb250ZXh0IGZhc3Rlc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NjcsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDExOjE4OjA0LjQxOTg2MjA5N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTI1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0veGZybV91c2VyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzI0MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMyNDA6XFx0XFxuMzI0MTpcXHRzdGF0aWMgaW50IGJ1aWxkX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4zMjQyOlxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgeGZybV91c2VyX21pZ3JhdGVfc3RhdGUgKnVtLFxcbjMyNDM6XFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm0sXFxuMzI0NDpcXHRcXHRcXHRcXHQgICAgICAgdTggZGlyLCB1MzIgcG9ydGlkLCB1MzIgc2VxKVxcbjMyNDU6XFx0e1xcbjMyNDY6XFx0XFx0aW50IGVycjtcXG4zMjQ3OlxcdFxcdHN0cnVjdCBubG1zZ2hkciAqbmxoO1xcbjMyNDg6XFx0XFx0c3RydWN0IHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlICpoZHI7XFxuMzI0OTpcXHRcXG4zMjUwOlxcdFxcdG5saCA9IG5sbXNnX3B1dChza2IsIHBvcnRpZCwgc2VxLCBYRlJNX01TR19NSUdSQVRFX1NUQVRFLFxcbjMyNTE6XFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCB4ZnJtX3VzZXJfbWlncmF0ZV9zdGF0ZSksIDApO1xcbjMyNTI6XFx0XFx0aWYgKCFubGgpXFxuMzI1MzpcXHRcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbjMyNTQ6XFx0XFxuMzI1NTpcXHRcXHRoZHIgPSBubG1zZ19kYXRhKG5saCk7XFxuMzI1NjpcXHRcXHQqaGRyID0gKnVtO1xcbjMyNTc6XFx0XFx0aGRyLVxcdTAwM2VuZXdfc2VsID0gKm0tXFx1MDAzZW5ld19zZWw7XFxuMzI1ODpcXHRcXG4zMjU5OlxcdFxcdGlmIChtLVxcdTAwM2VlbmNhcCkge1xcbjMyNjA6XFx0XFx0XFx0ZXJyID0gbmxhX3B1dChza2IsIFhGUk1BX0VOQ0FQLCBzaXplb2YoKm0tXFx1MDAzZWVuY2FwKSwgbS1cXHUwMDNlZW5jYXApO1xcbjMyNjE6XFx0XFx0XFx0aWYgKGVycilcXG4zMjYyOlxcdFxcdFxcdFxcdGdvdG8gb3V0X2NhbmNlbDtcXG4zMjYzOlxcdFxcdH1cXG4zMjY0OlxcdFxcbjMyNjU6XFx0XFx0aWYgKG0tXFx1MDAzZXh1bykge1xcbjMyNjY6XFx0XFx0XFx0ZXJyID0gbmxhX3B1dChza2IsIFhGUk1BX09GRkxPQURfREVWLCBzaXplb2YoKm0tXFx1MDAzZXh1byksIG0tXFx1MDAzZXh1byk7XFxuMzI2NzpcXHRcXHRcXHRpZiAoZXJyKVxcbjMyNjg6XFx0XFx0XFx0XFx0Z290byBvdXRfY2FuY2VsO1xcbjMyNjk6XFx0XFx0fVxcbjMyNzA6XFx0XFxuMzI3MTpcXHRcXHRpZiAobS1cXHUwMDNlbmV3X21hcmspIHtcXG4zMjcyOlxcdFxcdFxcdGVyciA9IG5sYV9wdXQoc2tiLCBYRlJNQV9NQVJLLCBzaXplb2YoKm0tXFx1MDAzZW5ld19tYXJrKSxcXG4zMjczOlxcdFxcdFxcdFxcdCAgICAgIG0tXFx1MDAzZW5ld19tYXJrKTtcXG4zMjc0OlxcdFxcdFxcdGlmIChlcnIpXFxuMzI3NTpcXHRcXHRcXHRcXHRnb3RvIG91dF9jYW5jZWw7XFxuMzI3NjpcXHRcXHR9XFxuMzI3NzpcXHRcXG4zMjc4OlxcdFxcdGVyciA9IHhmcm1fc21hcmtfcHV0KHNrYiwgXFx1MDAyNm0tXFx1MDAzZXNtYXJrKTtcXG4zMjc5OlxcdFxcdGlmIChlcnIpXFxuMzI4MDpcXHRcXHRcXHRnb3RvIG91dF9jYW5jZWw7XFxuMzI4MTpcXHRcXG4zMjgyOlxcdFxcdGlmIChtLVxcdTAwM2VtYXBwaW5nX21heGFnZSkge1xcbjMyODM6XFx0XFx0XFx0ZXJyID0gbmxhX3B1dF91MzIoc2tiLCBYRlJNQV9NVElNRVJfVEhSRVNILCBtLVxcdTAwM2VtYXBwaW5nX21heGFnZSk7XFxuMzI4NDpcXHRcXHRcXHRpZiAoZXJyKVxcbjMyODU6XFx0XFx0XFx0XFx0Z290byBvdXRfY2FuY2VsO1xcbjMyODY6XFx0XFx0fVxcbjMyODc6XFx0XFxuMzI4ODpcXHRcXHRpZiAobS1cXHUwMDNlbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCkge1xcbjMyODk6XFx0XFx0XFx0ZXJyID0gbmxhX3B1dF91MzIoc2tiLCBYRlJNQV9OQVRfS0VFUEFMSVZFX0lOVEVSVkFMLFxcbjMyOTA6XFx0XFx0XFx0XFx0XFx0ICBtLVxcdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsKTtcXG4zMjkxOlxcdFxcdFxcdGlmIChlcnIpXFxuMzI5MjpcXHRcXHRcXHRcXHRnb3RvIG91dF9jYW5jZWw7XFxuMzI5MzpcXHRcXHR9XFxuMzI5NDpcXHRcXG4zMjk1OlxcdFxcdGlmIChkaXIpIHtcXG4zMjk2OlxcdFxcdFxcdGVyciA9IG5sYV9wdXRfdTgoc2tiLCBYRlJNQV9TQV9ESVIsIGRpcik7XFxuMzI5NzpcXHRcXHRcXHRpZiAoZXJyKVxcbjMyOTg6XFx0XFx0XFx0XFx0Z290byBvdXRfY2FuY2VsO1xcbjMyOTk6XFx0XFx0fVxcbjMzMDA6XFx0XFxuMzMwMTpcXHRcXHRubG1zZ19lbmQoc2tiLCBubGgpO1xcbjMzMDI6XFx0XFx0cmV0dXJuIDA7XFxuMzMwMzpcXHRcXG4zMzA0OlxcdG91dF9jYW5jZWw6XFxuMzMwNTpcXHRcXHRubG1zZ19jYW5jZWwoc2tiLCBubGgpO1xcbjMzMDY6XFx0XFx0cmV0dXJuIGVycjtcXG4zMzA3OlxcdH1cXG4zMzA4OlxcdFxcbjMzMDk6XFx0c3RhdGljIHVuc2lnbmVkIGludCB4ZnJtX21pZ3JhdGVfc3RhdGVfbXNnc2l6ZShjb25zdCBzdHJ1Y3QgeGZybV9taWdyYXRlICptLFxcbjMzMTA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHU4IGRpcilcXG4zMzExOlxcdHtcXG4zMzEyOlxcdFxcdHJldHVybiBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlKSkgK1xcbjMzMTM6XFx0XFx0XFx0KG0tXFx1MDAzZWVuY2FwID8gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB4ZnJtX2VuY2FwX3RtcGwpKSA6IDApICtcXG4zMzE0OlxcdFxcdFxcdChtLVxcdTAwM2V4dW8gPyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHhmcm1fdXNlcl9vZmZsb2FkKSkgOiAwKSArXFxuMzMxNTpcXHRcXHRcXHQobS1cXHUwMDNlbmV3X21hcmsgPyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHhmcm1fbWFyaykpIDogMCkgK1xcbjMzMTY6XFx0XFx0XFx0KChtLVxcdTAwM2VzbWFyay52IHwgbS1cXHUwMDNlc21hcmsubSkgPyBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgKiAyIDogMCkgK1xcbjMzMTc6XFx0XFx0XFx0KG0tXFx1MDAzZW1hcHBpbmdfbWF4YWdlID8gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpIDogMCkgK1xcbjMzMTg6XFx0XFx0XFx0KG0tXFx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwgPyBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgOiAwKSArXFxuMzMxOTpcXHRcXHRcXHQoZGlyID8gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU4KSkgOiAwKTsgLyogWEZSTUFfU0FfRElSICovXFxuMzMyMDpcXHR9XFxuMzMyMTpcXHRcXG4zMzIyOlxcdHN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGUoc3RydWN0IG5ldCAqbmV0LFxcbjMzMjM6XFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlICp1bSxcXG4zMzI0OlxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm0sXFxuMzMyNTpcXHRcXHRcXHRcXHRcXHQgICB1OCBkaXIsIHUzMiBwb3J0aWQsIHUzMiBzZXEpXFxuMzMyNjpcXHR7XFxuMzMyNzpcXHRcXHRpbnQgZXJyO1xcbjMzMjg6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4zMzI5OlxcdFxcbjMzMzA6XFx0XFx0c2tiID0gbmxtc2dfbmV3KHhmcm1fbWlncmF0ZV9zdGF0ZV9tc2dzaXplKG0sIGRpciksIEdGUF9BVE9NSUMpO1xcbjMzMzE6XFx0XFx0aWYgKCFza2IpXFxuMzMzMjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4zMzMzOlxcdFxcbjMzMzQ6XFx0XFx0ZXJyID0gYnVpbGRfbWlncmF0ZV9zdGF0ZShza2IsIHVtLCBtLCBkaXIsIHBvcnRpZCwgc2VxKTtcXG4zMzM1OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuMzMzNjpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4zMzM3OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMzMzODpcXHRcXHR9XFxuMzMzOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTE6MTg6MDQuNDIwMDU2MDI3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMzM4NDczMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGVidWdnaW5nIGEgS2VybmVsIHhmcm0gTWlncmF0aW9uIElzc3VlKipcblxuT2theSwgc28gYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCBpcyBhdCBsaW5lIDMzMjIuIFRoYXQncyB3aGVyZSB0aGUgcHJvYmxlbSAqc2hvdWxkKiBiZSwgYnV0IEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgaXQncyBldmVuIGJlaW5nIGV4ZWN1dGVkLCBvciBpZiBpdCdzIGRlcGVuZGVudCBvbiBhIGNvbXBpbGF0aW9uIGZsYWcuIExldCdzIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhpcyBzZWN0aW9uIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIEknbGwgc2VhcmNoIGZvciBgI2lmZGVmIENPTkZJR19YRlJNX01JR1JBVEVgLCBvciBhbnkgc2ltaWxhciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyByZWxhdGVkIHRvIG1pZ3JhdGlvbiwgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gR290dGEgcnVsZSBvdXQgdGhhdCBpdCdzIGEgY29tcGxldGVseSBkaXNhYmxlZCBmZWF0dXJlLCBiZWZvcmUgSSBzdGFydCB0cmFjaW5nIHRocm91Z2ggdGhlIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzgzLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMToxODowNy41NTM5MDU3NDJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MjIyMzIwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZmRlZiBDT05GSUdfWEZSTV9NSUdSQVRFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jPTEyMDQ9c3RhdGljIHZvaWQgeHNvX3RvX3h1b19pZmluZGV4KGNvbnN0IHN0cnVjdCB4ZnJtX2Rldl9vZmZsb2FkICp4c28sIGludCBpZmluZGV4LFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMTIxMy1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxMjE0OiNpZmRlZiBDT05GSUdfWEZSTV9NSUdSQVRFXFxubmV0L3hmcm0veGZybV91c2VyLmMtMTIxNS1zdGF0aWMgdm9pZCB4c29fdG9feHVvKGNvbnN0IHN0cnVjdCB4ZnJtX2Rldl9vZmZsb2FkICp4c28sXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zMDQyPXN0YXRpYyBpbnQgeGZybV9hZGRfYWNxdWlyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMxMTYtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzExNzojaWZkZWYgQ09ORklHX1hGUk1fTUlHUkFURVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMxMTgtc3RhdGljIHZvaWQgY29weV9mcm9tX3VzZXJfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgeGZybV9taWdyYXRlICptYSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM1MzY9c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTQyLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM1NDM6I2lmZGVmIENPTkZJR19YRlJNX01JR1JBVEVcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTQ0LXN0YXRpYyBpbnQgY29weV90b191c2VyX21pZ3JhdGUoY29uc3Qgc3RydWN0IHhmcm1fbWlncmF0ZSAqbSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTE6MTg6MDcuODM2MTMzNTU1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMDQzODgyNzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi4gU28sIEknbSBwcmV0dHkgc3VyZSBgQ09ORklHX1hGUk1fTUlHUkFURWAgaXMgdGhlIGtleSBjb25maWcgb3B0aW9uIHdlJ3JlIGludGVyZXN0ZWQgaW4gZm9yIHRoaXMgbWlncmF0aW9uIHN0dWZmLiAqV2FpdCBhIHNlY29uZCosIGlzbid0IGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAgb25seSBjb21waWxlZCBpbiBpZiB0aGF0IG9wdGlvbiBpcyBlbmFibGVkPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQuIExldCdzIGdldCByaWdodCBpbnRvIHRoZSBjb2RlLiBJIHJlYWxseSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgIGlzIGFjdHVhbGx5IGd1YXJkZWQgYnkgYW4gYCNpZmRlZiBDT05GSUdfWEZSTV9NSUdSQVRFYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLCBiZWNhdXNlIGlmIG5vdCwgaXQgdGhyb3dzIGEgd3JlbmNoIGludG8gdGhlIHdob2xlIHByb2Nlc3MuIEkgaGF2ZSB0byBjb25maXJtIGhvdyB0aGF0IGNvZGUgaXMgZ29pbmcgdG8gYnVpbGQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwNDgsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMToxODoxOC44ODAwMTg3NTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjA3NjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlmZGVmIENPTkZJR19YRlJNX01JR1JBVEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmM9MTIwND1zdGF0aWMgdm9pZCB4c29fdG9feHVvX2lmaW5kZXgoY29uc3Qgc3RydWN0IHhmcm1fZGV2X29mZmxvYWQgKnhzbywgaW50IGlmaW5kZXgsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMjEzLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjEyMTQ6I2lmZGVmIENPTkZJR19YRlJNX01JR1JBVEVcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMjE1LXN0YXRpYyB2b2lkIHhzb190b194dW8oY29uc3Qgc3RydWN0IHhmcm1fZGV2X29mZmxvYWQgKnhzbyxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTMwNDI9c3RhdGljIGludCB4ZnJtX2FkZF9hY3F1aXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzExNi1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMTE3OiNpZmRlZiBDT05GSUdfWEZSTV9NSUdSQVRFXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzExOC1zdGF0aWMgdm9pZCBjb3B5X2Zyb21fdXNlcl9taWdyYXRlX3N0YXRlKHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm1hLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MzUzNj1zdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1NDItXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzU0MzojaWZkZWYgQ09ORklHX1hGUk1fTUlHUkFURVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1NDQtc3RhdGljIGludCBjb3B5X3RvX3VzZXJfbWlncmF0ZShjb25zdCBzdHJ1Y3QgeGZybV9taWdyYXRlICptLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMToxODoxOC45MjkyMzQ2ODhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc5Mzg4NDc5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyBCbG9jayBUZXJtaW5hdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4gTXkgbWVudGFsIG1vZGVsIGlzIHRlbGxpbmcgbWUgdGhhdCB3ZSBhcmUgbG9va2luZyBmb3IgdGhlIGVuZCBvZiBhIGJsb2NrIG9mIGRhdGEsIHNwZWNpZmljYWxseSBzdGFydGluZyBhcm91bmQgYWRkcmVzcyAzMTE3LiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBvZiBjb3Vyc2UsIHdoYXQncyB0aGUgYmxvY2sncyAqdGVybWluYXRvcio/IElzIGl0IGEgZml4ZWQtbGVuZ3RoIHN0cnVjdHVyZT8gRG8gd2UgaGF2ZSBhIHNlbnRpbmVsIHZhbHVlLCBhbiBlbmQtb2YtYmxvY2sgbWFya2VyIHBlcmhhcHM/IE9yIGFyZSB3ZSByZWx5aW5nIG9uIHNvbWUgb3RoZXIsIG1vcmUgaW1wbGljaXQgbWV0aG9kIHRvIGRldGVybWluZSB0aGUgYm91bmRhcnk/XG5cbk15IGV4cGVydGlzZSBraWNrcyBpbiBhbmQgSSBoYXZlIHRvIGFzc2VzcyBhbGwgcG9zc2liaWxpdGllczogSXMgdGhlcmUgYSBjaGVja3N1bSBJIG5lZWQgdG8gY2FsY3VsYXRlIG9yIHZhbGlkYXRlIHRoYXQgY291bGQgc2lnbmFsIHRoZSBlbmQ/IERvIEkgaGF2ZSB0byBwYXJzZSBzb21lIGhlYWRlciBpbmZvcm1hdGlvbiB0byBpbmZlciB0aGUgbGVuZ3RoPyBJcyBpdCBpbXBsaWNpdGx5IGRlZmluZWQgYnkgdGhlIHN0cnVjdHVyZSBvZiB0aGUgZW5jbG9zaW5nIGRhdGEgZm9ybWF0PyBDb3VsZCB0aGVyZSBiZSBhbiBlcnJvciBjb25kaXRpb24gdGhhdCBzaWduYWxzIHRoZSB0ZXJtaW5hdGlvbiwgc29tZXRoaW5nIGxpa2UgYSBcInBhZGRpbmdcIiBhcHByb2FjaCB3aXRoIGEgc3BlY2lmaWMgcGF0dGVybiBhdCB0aGUgZW5kP1xuXG5JJ20gZXNzZW50aWFsbHkgd29ya2luZyB0aHJvdWdoIG15IG1lbnRhbCBjaGVja2xpc3Qgb2YgY29tbW9uIGRhdGEgYmxvY2sgZGVsaW5lYXRpb24gdGVjaG5pcXVlcywgdHJ5aW5nIHRvIHF1aWNrbHkgcGlucG9pbnQgdGhlIGFwcHJvcHJpYXRlIG1ldGhvZCBmb3IgdGhpcyBzcGVjaWZpYyBjYXNlLiBJIGtub3cgdGhlIGJsb2NrIGxlbmd0aCBjb3VsZCBiZSBpbXBsaWVkIGJ5IHRoZSBmb3JtYXQgYW5kIHdpbGwgaGF2ZSB0byBiZSBpbnZlc3RpZ2F0ZWQuIEknbSB0cnlpbmcgdG8gZGVjaWRlIHRoZSBiZXN0IGFwcHJvYWNoIGJhc2VkIG9uIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzIyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTE6MTg6MjIuNzIzMTIxODUzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjAwMjg1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZWxzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuYz0yNjc9c3RhdGljIGludCB2ZXJpZnlfeGZybV9mYW1pbHkodTE2IGZhbWlseSwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMjc0LVxcdFxcdHJldHVybiAwO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjI3NTojZWxzZVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI3Ni1cXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJJUHY2IHN1cHBvcnQgZGlzYWJsZWRcXFwiKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTI4NT1zdGF0aWMgaW50IHZlcmlmeV9zZWxlY3Rvcl9wcmVmaXhsZW4odTE2IGZhbWlseSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMwNi1cXHRcXHRyZXR1cm4gMDtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMDc6I2Vsc2VcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMDgtXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSVB2NiBzdXBwb3J0IGRpc2FibGVkXFxcIik7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0xOTk4PXN0YXRpYyBpbnQgdmVyaWZ5X25ld3BvbGljeV9pbmZvKHN0cnVjdCB4ZnJtX3VzZXJwb2xpY3lfaW5mbyAqcCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTIwNDEtXFx0XFx0YnJlYWs7XFxubmV0L3hmcm0veGZybV91c2VyLmM6MjA0MjojZWxzZVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTIwNDMtXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSVB2NiBzdXBwb3J0IGRpc2FibGVkXFxcIik7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0yMzc3PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHVzZXJwb2xpY3lfdHlwZV9hdHRyc2l6ZSh2b2lkKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMjM4MC1cXHRyZXR1cm4gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB4ZnJtX3VzZXJwb2xpY3lfdHlwZSkpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjIzODE6I2Vsc2VcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yMzgyLVxcdHJldHVybiAwO1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MjM4Nz1zdGF0aWMgaW50IGNvcHlfdG9fdXNlcl9wb2xpY3lfdHlwZSh1OCB0eXBlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMjM5Ny1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyMzk4OiNlbHNlXFxubmV0L3hmcm0veGZybV91c2VyLmMtMjM5OS1zdGF0aWMgaW5saW5lIGludCBjb3B5X3RvX3VzZXJfcG9saWN5X3R5cGUodTggdHlwZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTMzNDc9c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTI3LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM1Mjg6I2Vsc2VcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTI5LXN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MzYzMj1zdGF0aWMgaW50IHhmcm1fc2VuZF9taWdyYXRlKGNvbnN0IHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsIHU4IGRpciwgdTggdHlwZSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM2NTAtfVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM2NTE6I2Vsc2VcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNjUyLXN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGUoY29uc3Qgc3RydWN0IHhmcm1fc2VsZWN0b3IgKnNlbCwgdTggZGlyLCB1OCB0eXBlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMToxODoyMi43NjkxMzc0OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODk0ODA4Njc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIFhGUk0gTWlncmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCwgYXMgZXhwZWN0ZWQsIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGlzIHdyYXBwZWQgaW4gYW4gYCNpZmRlZiBDT05GSUdfWEZSTV9NSUdSQVRFYCBibG9jay4gVGhhdCdzIGEgY2xlYXIgaW5kaWNhdG9yIHRoYXQgYENPTkZJR19YRlJNX01JR1JBVEVgICptdXN0KiBiZSBlbmFibGVkIGZvciB0aGlzIGZ1bmN0aW9uIHRvIGV2ZW4gZXhpc3QgaW4gdGhlIGNvbXBpbGVkIGtlcm5lbC4gTWFrZXMgcGVyZmVjdCBzZW5zZS5cblxuQnV0IEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gSSdtIHdvbmRlcmluZyBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMsIGFueXRoaW5nIGVsc2UgdGhhdCBtaWdodCBiZSBuZWVkZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgQ09ORklHX1hGUk1fTUlHUkFURWAuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgZm9yIHRoZSBYRlJNIHN1YnN5c3RlbS4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZGl2ZSBpbnRvIGBuZXQveGZybS9LY29uZmlnYCBhbmQgZXhwbGljaXRseSBleGFtaW5lIHRoZSBkZWZpbml0aW9ucyBmb3IgYm90aCBgWEZSTV9NSUdSQVRFYCBhbmQgYFhGUk1fVVNFUmAuIEknbSBlc3BlY2lhbGx5IGtlZW4gdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgaW5kaXJlY3QgZGVwZW5kZW5jaWVzLiBJIHRoaW5rIGBDT05GSUdfWEZSTV9VU0VSYCBtaWdodCBhbHNvIGJlIGEgcmVxdWlyZW1lbnQgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eSwgc28gSSB3aWxsIGNoZWNrIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTAyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTE6MTg6MjguNjYzOTUwMDc1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQzOTk3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFhGUk1fTUlHUkFURVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWc9NTE9Y29uZmlnIFhGUk1fU1VCX1BPTElDWVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy02MC1cXG5uZXQveGZybS9LY29uZmlnOjYxOmNvbmZpZyBYRlJNX01JR1JBVEVcXG5uZXQveGZybS9LY29uZmlnLTYyLVxcdGJvb2wgXFxcIlRyYW5zZm9ybWF0aW9uIG1pZ3JhdGUgZGF0YWJhc2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDExOjE4OjI4LjgxODM1NTg1NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzYzODkxMjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCdzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIHRoaXMgYG5ldC94ZnJtL0tjb25maWdgIGZpbGUgYW5kIHRoZSBgWEZSTV9NSUdSQVRFYCBvcHRpb24uXG5cbioqRGl2aW5nIGludG8gYG5ldC94ZnJtL0tjb25maWdgIGFuZCBgWEZSTV9NSUdSQVRFYCoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIGdvaW5nIHRvIHB1bGwgdXAgYG5ldC94ZnJtL0tjb25maWdgIGJlY2F1c2UgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIFhGUk0gbWlncmF0aW9uLiBNeSBmb2N1cyBpcyBnb2luZyB0byBiZSB6ZXJvaW5nIGluIG9uIGBYRlJNX01JR1JBVEVgIGFuZCBmaWd1cmluZyBvdXQgd2hhdCBpdCBkb2VzLCBob3cgaXQncyBlbmFibGVkLCBhbmQgcG90ZW50aWFsbHkgYW55IGRlcGVuZGVuY2llcyBvciBpbnRlcmFjdGlvbnMgaXQgaGFzIHdpdGggb3RoZXIgWEZSTSBmZWF0dXJlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIFhGUk0gZnJhbWV3b3JrLiBJJ20gZXhwZWN0aW5nIHRoaXMgZmlsZSB0byBnaXZlIG1lIHRoZSBkZWZpbml0aXZlIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlIGtlcm5lbCBjb25maWcgb3B0aW9ucy4gSSdsbCBiZSBsb29raW5nIGZvciBjb21tZW50cywgZGVmYXVsdCBzZXR0aW5ncywgYW5kIGxpa2VseSBhbnkgKmJvb2wqLCAqdHJpc3RhdGUqLCBvciAqc2VsZWN0KiBzdGF0ZW1lbnRzIHJlbGV2YW50IHRvIGl0LiBBbnkgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gb3IgcmVmZXJlbmNlcyB3aXRoaW4gdGhlIGZpbGUgd291bGQgYmUgaW5jcmVkaWJseSBoZWxwZnVsIGFzIHdlbGwuIFRoaXMgaXMgcHJvYmFibHkgZ29pbmcgdG8gaW52b2x2ZSB0cmFjaW5nIHRocm91Z2ggY29uZGl0aW9uYWwgc3RhdGVtZW50cyBhbmQgb3RoZXIgZGVwZW5kZW5jaWVzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGZ1bmN0aW9uLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBrZXJuZWwgY29uZmlndXJhdGlvbiBhbmQgcG90ZW50aWFsIG1pZ3JhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzNTcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMToxODozMi41ODIyNTE0NTFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjkyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1MDpcXHRcXG4gIDUxOlxcdGNvbmZpZyBYRlJNX1NVQl9QT0xJQ1lcXG4gIDUyOlxcdFxcdGJvb2wgXFxcIlRyYW5zZm9ybWF0aW9uIHN1YiBwb2xpY3kgc3VwcG9ydFxcXCJcXG4gIDUzOlxcdFxcdGRlcGVuZHMgb24gWEZSTVxcbiAgNTQ6XFx0XFx0aGVscFxcbiAgNTU6XFx0XFx0ICBTdXBwb3J0IHN1YiBwb2xpY3kgZm9yIGRldmVsb3BlcnMuIEJ5IHVzaW5nIHN1YiBwb2xpY3kgd2l0aCBtYWluXFxuICA1NjpcXHRcXHQgIG9uZSwgdHdvIHBvbGljaWVzIGNhbiBiZSBhcHBsaWVkIHRvIHRoZSBzYW1lIHBhY2tldCBhdCBvbmNlLlxcbiAgNTc6XFx0XFx0ICBQb2xpY3kgd2hpY2ggbGl2ZXMgc2hvcnRlciB0aW1lIGluIGtlcm5lbCBzaG91bGQgYmUgYSBzdWIuXFxuICA1ODpcXHRcXG4gIDU5OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDYwOlxcdFxcbiAgNjE6XFx0Y29uZmlnIFhGUk1fTUlHUkFURVxcbiAgNjI6XFx0XFx0Ym9vbCBcXFwiVHJhbnNmb3JtYXRpb24gbWlncmF0ZSBkYXRhYmFzZVxcXCJcXG4gIDYzOlxcdFxcdGRlcGVuZHMgb24gWEZSTVxcbiAgNjQ6XFx0XFx0aGVscFxcbiAgNjU6XFx0XFx0ICBBIGZlYXR1cmUgdG8gdXBkYXRlIGxvY2F0b3Iocykgb2YgYSBnaXZlbiBJUHNlYyBzZWN1cml0eVxcbiAgNjY6XFx0XFx0ICBhc3NvY2lhdGlvbiBkeW5hbWljYWxseS4gIFRoaXMgZmVhdHVyZSBpcyByZXF1aXJlZCwgZm9yXFxuICA2NzpcXHRcXHQgIGluc3RhbmNlLCBpbiBhIE1vYmlsZSBJUHY2IGVudmlyb25tZW50IHdpdGggSVBzZWMgY29uZmlndXJhdGlvblxcbiAgNjg6XFx0XFx0ICB3aGVyZSBtb2JpbGUgbm9kZXMgY2hhbmdlIHRoZWlyIGF0dGFjaG1lbnQgcG9pbnQgdG8gdGhlIEludGVybmV0LlxcbiAgNjk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDExOjE4OjMyLjU4MjMyMjI3MVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjUzMDYxNTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOlxuXG4qKlhGUk0gRGVwZW5kZW5jeSBJbnF1aXJ5KipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBYRlJNX01JR1JBVEVgIGZlYXR1cmUsIGFuZCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IGl0IGhhcyBhIGRpcmVjdCBkZXBlbmRlbmN5IG9uIGBYRlJNYC4gVGhhdCBtYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIG1pZ3JhdGlvbiBhc3BlY3QgaW5oZXJlbnRseSByZWxhdGVzIHRvIHRoZSBmb3VuZGF0aW9uYWwgWEZSTSBmdW5jdGlvbmFsaXR5LiBCdXQsIHRoZSBxdWVzdGlvbiB0aGF0J3Mgbm93IHBpbmdpbmcgaW4gbXkgbWluZCBpcywgd2hhdCBhYm91dCBgWEZSTV9VU0VSYD8gSXMgdGhpcyBhbHNvIGEgcHJlcmVxdWlzaXRlLCBvciBpcyBpdCBvcHRpb25hbCBpbiB0aGUgY29udGV4dCBvZiBgWEZSTV9NSUdSQVRFYD8gSSBuZWVkIHRvIGNsYXJpZnkgdGhlIHJlbGF0aW9uc2hpcCBoZXJlOyBpdOKAmXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgYnVpbGQgYW5kIHJ1bnRpbWUgZGVwZW5kZW5jaWVzLCBlc3BlY2lhbGx5IGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCB1c2VyLXNwYWNlIGludGVyYWN0aW9uIG9yIHBvbGljeSBjb250cm9sIGR1cmluZyB0aGUgbWlncmF0aW9uIHByb2Nlc3MuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgbm90IHRvIHRha2UgYW55dGhpbmcgZm9yIGdyYW50ZWQ7IEkgc2hvdWxkIGNoZWNrIHRoaXMgcmVsYXRpb25zaGlwIGRpcmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk1NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTE6MTg6MzYuMjM1Mzg2NzQ1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzU1ODUyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWEZSTV9VU0VSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vS2NvbmZpZz0yMj1pZiBJTkVUXFxubmV0L3hmcm0vS2NvbmZpZzoyMzpjb25maWcgWEZSTV9VU0VSXFxubmV0L3hmcm0vS2NvbmZpZy0yNC1cXHR0cmlzdGF0ZSBcXFwiVHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMzEtXFxubmV0L3hmcm0vS2NvbmZpZzozMjpjb25maWcgWEZSTV9VU0VSX0NPTVBBVFxcbm5ldC94ZnJtL0tjb25maWctMzMtXFx0dHJpc3RhdGUgXFxcIkNvbXBhdGlibGUgQUJJIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDExOjE4OjM2LjI4Mjk2NTU3MloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDIxNjE1NDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbiwgdGFpbG9yZWQgZm9yIG15IGZlbGxvdyBleHBlcnQ6XG5cbioqVW5kZXJzdGFuZGluZyB0aGUgS2VybmVsIERlcGVuZGVuY2llcyBvZiBYRlJNX1VTRVIqKlxuXG5Pa2F5LCBzbyBgWEZSTV9VU0VSYC4gSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nLCBnaXZlbiBpdHMgbG9jYXRpb24gaW4gYG5ldC94ZnJtL0tjb25maWdgLCB0aGF0IGl0J3MgZ29pbmcgdG8gYmUgaW5oZXJlbnRseSBsaW5rZWQgdG8gYFhGUk1gIGl0c2VsZi4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyBgWEZSTV9VU0VSYCBpcyBhYm91dCB1c2VyLXNwYWNlIGludGVyYWN0aW9uIHdpdGggdGhlIFhGUk0gZnJhbWV3b3JrLiBBbmQsIHNpbmNlIGl0J3MgaW4gdGhlIG5ldHdvcmtpbmcgc3BhY2UsIEknZCBleHBlY3QgaXQgdG8gbGV2ZXJhZ2UgYElORVRgIGFzIGEgZm91bmRhdGlvbmFsIHJlcXVpcmVtZW50LiBMZXQncyBxdWlja2x5IHZlcmlmeSB0aGVzZSBpbXBsaWVkIGRlcGVuZGVuY2llcyB0byBjZW1lbnQgbXkgdW5kZXJzdGFuZGluZywganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgY29uZmlybSBteSBpbml0aWFsIGFzc3VtcHRpb25zLiBJdCdzIGFsd2F5cyBnb29kIHRvIGhhdmUgYSBzb2xpZCBoYW5kbGUgb24gdGhlIGtlcm5lbCdzIG1vZHVsZSBzdHJ1Y3R1cmUsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggWEZSTS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzMjAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMToxODozOS43MDQ1ODM0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZnJtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgWEZSTSBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRjb25maWcgWEZSTVxcbiAgIDY6XFx0XFx0Ym9vbFxcbiAgIDc6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgODpcXHRcXHRzZWxlY3QgR1JPX0NFTExTXFxuICAgOTpcXHRcXHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcXG4gIDEwOlxcdFxcbiAgMTE6XFx0Y29uZmlnIFhGUk1fT0ZGTE9BRFxcbiAgMTI6XFx0XFx0Ym9vbFxcbiAgMTM6XFx0XFxuICAxNDpcXHRjb25maWcgWEZSTV9BTEdPXFxuICAxNTpcXHRcXHR0cmlzdGF0ZVxcbiAgMTY6XFx0XFx0c2VsZWN0IFhGUk1cXG4gIDE3OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gIDE4OlxcdFxcdHNlbGVjdCBDUllQVE9fQUVBRFxcbiAgMTk6XFx0XFx0c2VsZWN0IENSWVBUT19IQVNIXFxuICAyMDpcXHRcXHRzZWxlY3QgQ1JZUFRPX1NLQ0lQSEVSXFxuICAyMTpcXHRcXG4gIDIyOlxcdGlmIElORVRcXG4gIDIzOlxcdGNvbmZpZyBYRlJNX1VTRVJcXG4gIDI0OlxcdFxcdHRyaXN0YXRlIFxcXCJUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXFxcIlxcbiAgMjU6XFx0XFx0c2VsZWN0IFhGUk1fQUxHT1xcbiAgMjY6XFx0XFx0aGVscFxcbiAgMjc6XFx0XFx0ICBTdXBwb3J0IGZvciBUcmFuc2Zvcm1hdGlvbihYRlJNKSB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXFxuICAyODpcXHRcXHQgIGxpa2UgSVBzZWMgdXNlZCBieSBuYXRpdmUgTGludXggdG9vbHMuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTE6MTg6MzkuNzA0NjY0NFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTU5NTkwODc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBkZXBlbmRlbmNpZXMgYW5kIGZ1bmN0aW9uIGNhbGxzOlxuXG4qKkRlY29kaW5nIHRoZSBYRlJNIE1pZ3JhdGlvbiBQYXRjaCBEZXBlbmRlbmNpZXMqKlxuXG5SaWdodCwgbGV0IG1lIGJyZWFrIHRoaXMgZG93biBsb2dpY2FsbHkuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgbWlncmF0aW5nIFhGUk0gc3RhdGVzLiBJIHNlZSB0aGF0IGBYRlJNX1VTRVJgIGlzIHNlbGVjdGluZyBgWEZSTV9BTEdPYCwgYW5kIHRoYXQgaW4gdHVybiwgc2VsZWN0cyBgWEZSTWAuIFRoYXQgbXVjaCBpcyBjbGVhciBmcm9tIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcy4gTmF0dXJhbGx5LCBgWEZSTV9NSUdSQVRFYCBhbHNvIGRlcGVuZHMgb24gYFhGUk1gLiBTbywgaWYgd2Ugd2FudCB0aGlzIG1pZ3JhdGlvbiBmdW5jdGlvbmFsaXR5IHRvIHdvcmssIHdlJ2xsIG5lZWQgYm90aCBgWEZSTV9VU0VSYCBhbmQgYFhGUk1fTUlHUkFURWAgZW5hYmxlZC4gU2VlbXMgbG9naWNhbCwgZ2l2ZW4gdGhlIHVzZXIgc3BhY2UgaW50ZXJhY3Rpb24gaW52b2x2ZWQuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgYWN0dWFsIGNvZGUuIFRoZSBwYXRjaCB0b3VjaGVzIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAuIFNpbmNlIHRoaXMgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIEknbSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHdoZXJlIGl0J3MgYmVpbmcgKmNhbGxlZCogZnJvbS4gQW5kIHllcywgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCBpcywgYXMgSSBzdXNwZWN0ZWQsIGNhbGxlZCBieSBgeGZybV9kb19taWdyYXRlX3N0YXRlYC4gT2theSwgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgaXMgYWxzbyBzdGF0aWMsIGJ1dCB0aGF0J3Mga2V5LiBJdCdzIGFjdHVhbGx5IGFuIGVudHJ5IHBvaW50IGluIHRoZSBgeGZybV9saW5rYCBhcnJheSBmb3IgYFhGUk1fTVNHX01JR1JBVEVfU1RBVEVgLiBBbmQgdGhlIGxpZ2h0IGJ1bGIgZ29lcyBvZmYuIFdhaXQgYSBtaW51dGXigKYgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgaXMgKmFsc28qIGNhbGxlZCBieSBgeGZybV91c2VyX3Jjdl9tc2dgLCB0aGUgbmV0bGluayBoYW5kbGVyISBBaGEhIFRoYXQncyB0aGUgY3J1Y2lhbCBsaW5rIHRvIHVzZXIgc3BhY2UuIEl0IGhhbmRsZXMgdGhlIG5ldGxpbmsgbWVzc2FnZSBmb3IgdGhlIG1pZ3JhdGlvbi5cblxuSSdkIGJldHRlciBtYWtlIHN1cmUgdGhhdCBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBpc24ndCBpbmxpbmVkLCB0aG91Z2gsIG9yIHdlJ3JlIGxvc2luZyB0aGUgZW50cnkgcG9pbnQgd2l0aGluIHRoZSBrZXJuZWwuIEknbGwgbmVlZCB0byB2ZXJpZnkgdGhhdC4gSXQgd291bGQgZGVmaW5pdGVseSBiZSBzdWJvcHRpbWFsIGlmIGl0IHdhcyBpbmxpbmVkLCBzaW5jZSB0aGF0IHdvdWxkIG1ha2UgaXQgbW9yZSBkaWZmaWN1bHQgZm9yIHVzIHRvIHVzZSB0aGlzIGVudHJ5IHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg5MSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDExOjE4OjQ3Ljg2NDI2Mjc4NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM4OTczMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9kb19taWdyYXRlX3N0YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jPTMzMjI9c3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzQ2LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMzNDc6c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzM0OC1cXHRcXHRcXHRcXHQgc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTI4LSNlbHNlXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzUyOTpzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTMwLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM3NDQ9c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX2xpbmsge1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc4MS1cXHRbWEZSTV9NU0dfR0VUREVGQVVMVCAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2dldF9kZWZhdWx0ICAgfSxcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNzgyOlxcdFtYRlJNX01TR19NSUdSQVRFX1NUQVRFIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9kb19taWdyYXRlX3N0YXRlIH0sXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc4My19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMToxODo0Ny45MTgxNjYyMDFaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI5OTA4MjQ5MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFhGUk0gTWlncmF0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBYRlJNIG1pZ3JhdGlvbiBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IGEgZ29vZCBmb2N1cyBzeW1ib2wgZm9yIGZ1enppbmcuIFNpbmNlIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGlzIGEgZnVuY3Rpb24gcG9pbnRlciB3aXRoaW4gYHhmcm1fbGlua2AsIEkga25vdyBpdCBjYW4ndCBiZSBpbmxpbmVkLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIGl0IGEgc3Ryb25nIGNhbmRpZGF0ZS4gSXQncyBhIGtleSBlbnRyeSBwb2ludC5cblxuSSBjaGVja2VkIHRvIHNlZSBpZiBhbnkgb3RoZXIgc3ltYm9scyBzdG9vZCBvdXQuIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgaXMgY2FsbGVkLCBidXQgdGhhdCdzIGEgZ2VuZXJhbC1wdXJwb3NlIGZ1bmN0aW9uLCBzbyBpdCdzIHByb2JhYmx5IG5vdCB0aGUgY29yZSBvZiB0aGUgY2hhbmdlLiBBaCwgcmlnaHQuIFRoZSBwYXRjaCBhZGRzIGByY3VfcmVhZF9sb2NrKClgIGFuZCBgcmN1X3JlYWRfdW5sb2NrKClgIGFyb3VuZCB0aGUgY2FsbCB0byBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIHdpdGhpbiBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgLiBUaGF0IG1lYW5zIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGlzIGRlZmluaXRlbHkgdGhlIG1haW4gZW50cnkgcG9pbnQgdG8gdGFyZ2V0IGZvciBmdXp6aW5nLCBnaXZlbiB0aGUgYWRkZWQgUkNVIHByb3RlY3Rpb25zLlxuXG5OZXh0LCBJIHZlcmlmaWVkIHRoYXQgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgaXMgYWN0dWFsbHkgcmVhY2hhYmxlLiBJdCdzIGFuIFhGUk0gbmV0bGluayBtZXNzYWdlIGhhbmRsZXIsIGFuZCBpdCBoYW5kbGVzIHRoZSBtaWdyYXRpb24gc3RhdGUgbWVzc2FnZXMuIFllcCwgaXQgaXMgcmVhY2hhYmxlLlxuXG5Ob3csIGxldCdzIHZlcmlmeSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3MuIEknbSBhc3N1bWluZyB0aGF0IGBYRlJNX1VTRVJgIGFuZCBgWEZSTV9NSUdSQVRFYCBhcmUgdGhlIGtleSBjb25maWdzIGhlcmUuIFRoZSBmb3JtZXIgaXMgb2J2aW91czogaXQgZW5hYmxlcyB0aGUgbmV0bGluayBpbnRlcmZhY2UsIHdoaWNoIHdlIG5lZWQgdG8gdHJpZ2dlciB0aGUgbWVzc2FnZS4gVGhlIGxhdHRlciBlbmFibGVzIHRoZSBzdGF0ZSBtaWdyYXRpb24gZnVuY3Rpb25hbGl0eSBpdHNlbGYuIFllcywgdGhpcyBjb21iaW5hdGlvbiBzaG91bGQgYmUgc3VmZmljaWVudC5cblxuU28sIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGlzIG15IHByaW1hcnkgZm9jdXMgc3ltYm9sLCBhbmQgSSdtIGNvbmZpZGVudCB0aGF0IGBYRlJNX1VTRVJgIGFuZCBgWEZSTV9NSUdSQVRFYCBhcmUgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyB0byByZXByb2R1Y2UgdGhpcyBjb25kaXRpb24sIHRoaXMgZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzk3NSwiT3V0cHV0VG9rZW5zIjoxNTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTE6MTk6MDAuOTA4OTkzNzI0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc3MzgwNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGUk1fVVNFUlwiLFxuICAgIFwiWEZSTV9NSUdSQVRFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZybV9kb19taWdyYXRlX3N0YXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gUkNVIGlzc3VlIGJ5IGFkZGluZyBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCBhcm91bmQgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBpbiBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFhGUk0gbmV0bGluayBpbnRlcmZhY2UuIFRoZSBtb2RpZmllZCBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBYRlJNX01TR19NSUdSQVRFX1NUQVRFYCBuZXRsaW5rIG1lc3NhZ2UsIGhhbmRsZWQgYnkgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZSTV9VU0VSXCIsXG4gICAgXCJYRlJNX01JR1JBVEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4ZnJtX2RvX21pZ3JhdGVfc3RhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBSQ1UgaXNzdWUgYnkgYWRkaW5nIGByY3VfcmVhZF9sb2NrKClgIGFuZCBgcmN1X3JlYWRfdW5sb2NrKClgIGFyb3VuZCBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIGluIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgWEZSTSBuZXRsaW5rIGludGVyZmFjZS4gVGhlIG1vZGlmaWVkIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYFhGUk1fTVNHX01JR1JBVEVfU1RBVEVgIG5ldGxpbmsgbWVzc2FnZSwgaGFuZGxlZCBieSBgeGZybV9kb19taWdyYXRlX3N0YXRlYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowxfhtl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-31 11:15:46 +0000 UTC FinishedAt: 2026-07-31 11:19:03 +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": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM_USER", "XFRM_MIGRATE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM_USER", "XFRM_MIGRATE" ], "series_id": "769c6dac-07ab-4f4e-9d18-0d779fa74dec" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "xfrm_do_migrate_state" ], "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+CgkJCTx0ZD4yMDI2LzA3LzMxIDExOjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtYRlJNX01JR1JBVEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnJtX2RvX21pZ3JhdGVfc3RhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gUkNVIGlzc3VlIGJ5IGFkZGluZyBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCBhcm91bmQgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBpbiBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFhGUk0gbmV0bGluayBpbnRlcmZhY2UuIFRoZSBtb2RpZmllZCBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBYRlJNX01TR19NSUdSQVRFX1NUQVRFYCBuZXRsaW5rIG1lc3NhZ2UsIGhhbmRsZWQgYnkgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTE6MTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3OTIwNDY3MzI0N2YyMGNmMjk3NjUyZGE1MWIwZDI5YWQ5YmM0YzBkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMzEgMTE6MTc6MzkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV91c2VyLmMgYi9uZXQveGZybS94ZnJtX3VzZXIuY1xuaW5kZXggZDZkYjYzMzA0YmE2Yi4uMGJhMDYxNGQ2NTBmMyAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1fdXNlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX3VzZXIuY1xuQEAgLTMzMzcsNyAmIzQzOzMzMzcsMTEgQEAgc3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG4tXHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9NSUdSQVRFKTtcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0ZXJyID0geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9NSUdSQVRFKTtcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gc3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTE6MTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtYRlJNX01JR1JBVEUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnJtX2RvX21pZ3JhdGVfc3RhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gUkNVIGlzc3VlIGJ5IGFkZGluZyBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCBhcm91bmQgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBpbiBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFhGUk0gbmV0bGluayBpbnRlcmZhY2UuIFRoZSBtb2RpZmllZCBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBYRlJNX01TR19NSUdSQVRFX1NUQVRFYCBuZXRsaW5rIG1lc3NhZ2UsIGhhbmRsZWQgYnkgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3OTIwNDY3MzI0N2YyMGNmMjk3NjUyZGE1MWIwZDI5YWQ5YmM0YzBkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMzEgMTE6MTc6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3VzZXIuYyBiL25ldC94ZnJtL3hmcm1fdXNlci5jCmluZGV4IGQ2ZGI2MzMwNGJhNmIuLjBiYTA2MTRkNjUwZjMgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fdXNlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1fdXNlci5jCkBAIC0zMzM3LDcgJiM0MzszMzM3LDExIEBAIHN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGUoc3RydWN0IG5ldCAqbmV0LAogCQlyZXR1cm4gZXJyOwogCX0KIAotCXJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX01JR1JBVEUpOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWVyciA9IHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfTUlHUkFURSk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTE6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwMwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDExMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBmb2N1c2luZyBvbiB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB0aGlzIHBhdGNoLCBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipSQ1UgUHJvdGVjdGlvbiBpbiB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZSoqCgpBbHJpZ2h0LCBzbyB0aGUgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYHJjdV9yZWFkX2xvY2soKWAgYW5kIGByY3VfcmVhZF91bmxvY2soKWAgYXJvdW5kIHRoZSBjYWxsIHRvIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgd2l0aGluIHRoZSBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgIGZ1bmN0aW9uLCBsb2NhdGVkIGluIGBuZXQveGZybS94ZnJtX3VzZXIuY2AuIFRoaXMgaW1tZWRpYXRlbHkgc2lnbmFscyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFpbWVkIGF0IGFkZHJlc3NpbmcgZWl0aGVyIGFuIFJDVS1yZWxhdGVkIHdhcm5pbmcgb3IsIG1vcmUgY3JpdGljYWxseSwgYSBwb3RlbnRpYWwgYnVnIHJlbGF0ZWQgdG8gaW1wcm9wZXIgY29uY3VycmVudCBhY2Nlc3MuIFRoZSBmYWN0IHRoYXQgUkNVIHByb3RlY3Rpb24gaXMgYmVpbmcgYWRkZWQgaXMgdGhlIGtleSBpbmRpY2F0b3IgaGVyZTsgaXQgc3VnZ2VzdHMgYSBzdWJ0bGUgcmFjZSBjb25kaXRpb24gY291bGQgZXhpc3Qgd2hlcmUgZGF0YSBhY2Nlc3NlZCB3aXRoaW4gYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBpcyBzdXNjZXB0aWJsZSB0byBtb2RpZmljYXRpb24gdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLgoKTXkgaW1tZWRpYXRlIG5leHQgc3RlcHMsIGdpdmVuIHRoaXMgaXMgYSBuZXR3b3JraW5nIGFuZCBzZWN1cml0eSBjb250ZXh0LCBhcmUgdG8gZGl2ZSBkZWVwZXIuIEZpcnN0LCBJIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGZsb3cuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBleGFjdGx5IGhvdyBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgIHdvcmtzLCBwYXJ0aWN1bGFybHkgaG93IGl0IGludGVyYWN0cyB3aXRoIGB4ZnJtX25sbXNnX211bHRpY2FzdGAuIEFuZCwgc3BlY2lmaWNhbGx5LCBJIG11c3QgbG9vayBjbG9zZWx5IGF0IGhvdyB0aGUgZGF0YSBiZWluZyBzZW50IHZpYSB0aGF0IG11bHRpY2FzdCBjaGFubmVsIGlzIHBvcHVsYXRlZCBhbmQgdXNlZC4gQSBxdWljayBpbnNwZWN0aW9uIG9mIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIHdvdWxkIGJlIGEgZ29vZCBjb21wYW5pb24gdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBleGVjdXRpb24gZmxvdy4KClRoZW4sIGJlZm9yZSBJIGdvIGZ1cnRoZXIsIEkgc2hvdWxkIHZlcmlmeSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBVbmRlcnN0YW5kaW5nIHdoaWNoIGNvbmZpZ3VyYXRpb25zIGVuYWJsZSBvciBkaXNhYmxlIHRoZSByZWxldmFudCBYRlJNIGZlYXR1cmVzIGFyZSBpbXBvcnRhbnQgdG8gY29uc2lkZXIgd2hlbiBldmFsdWF0aW5nIHRoZSBpbXBvcnRhbmNlIG9mIHRoaXMgZml4LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDExOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fc2VuZF9taWdyYXRlX3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmM9MzMwOT1zdGF0aWMgdW5zaWduZWQgaW50IHhmcm1fbWlncmF0ZV9zdGF0ZV9tc2dzaXplKGNvbnN0IHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm0sXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzMyMS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMzMjI6c3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzIzLVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlICp1bSxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zMzQ3PXN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MTAtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNTExOlx0ZXJyID0geGZybV9zZW5kX21pZ3JhdGVfc3RhdGUobmV0LCB1bSwgXHUwMDI2bSwgeGMtXHUwMDNlZGlyLFxubmV0L3hmcm0veGZybV91c2VyLmMtMzUxMi1cdFx0XHRcdCAgICAgIG5saC1cdTAwM2VubG1zZ19waWQsIG5saC1cdTAwM2VubG1zZ19zZXEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDExOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NzkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqS2NvbmZpZyBEaXZlIGZvciB4ZnJtX3VzZXIuYyoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBLY29uZmlnIGFnYWluLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBzdXJyb3VuZGluZyBgbmV0L3hmcm0veGZybV91c2VyLmNgLiBUaGlzIGZpbGUgaXMgY3J1Y2lhbCBmb3IgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBYRlJNIHN1YnN5c3RlbSwgc28gYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgaXRzIGNvbmZpZ3VyYXRpb24gaXMgZXNzZW50aWFsIGZvciwgc2F5LCB0cm91Ymxlc2hvb3RpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gcG9saWN5IG1hbmFnZW1lbnQsIGtleWluZywgb3Igb3RoZXIgdXNlci1zcGFjZSBjb250cm9sIHBsYW5lIGVsZW1lbnRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRyaWdnZXJzIGl0cyBpbmNsdXNpb24sIHdoYXQgZmVhdHVyZXMgaXQgdW5sb2NrcywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciByZWxhdGVkIG1vZHVsZXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOgoKKiAgICoqRGVwZW5kZW5jaWVzOioqIFdoYXQgb3RoZXIgS2NvbmZpZyBzeW1ib2xzIG5lZWQgdG8gYmUgZW5hYmxlZCBiZWZvcmUgYHhmcm1fdXNlci5jYCBldmVuIGJlY29tZXMgYSBwb3NzaWJpbGl0eT8gQXJlIHRoZXJlIGNvcmUgbmV0d29ya2luZyBzdGFjayBwcmVyZXF1aXNpdGVzLCBzZWN1cml0eSBmZWF0dXJlcywgb3Igb3RoZXIgWEZSTSBjb21wb25lbnRzIHRoYXQgaXQgcmVsaWVzIHVwb24/CiogICAqKkNvbmZpZ3VyYXRpb24gT3B0aW9uczoqKiBEb2VzIHRoZSBLY29uZmlnIGV4cG9zZSBhbnkgYnVpbGQtdGltZSBwYXJhbWV0ZXJzIHNwZWNpZmljIHRvIGB4ZnJtX3VzZXIuY2A/IEFyZSB0aGVyZSBvcHRpb25zIHRvIGVuYWJsZSBvciBkaXNhYmxlIGNlcnRhaW4gdXNlci1zcGFjZSBmdW5jdGlvbmFsaXRpZXMsIGxpa2Ugc3BlY2lmaWMgcHJvdG9jb2xzIG9yIGNvbnRyb2wgbWVjaGFuaXNtcz8gV2hhdCBncmFudWxhciBrbm9icyBhcmUgYXZhaWxhYmxlLCBpZiBhbnk/CiogICAqKkludGVyYWN0aW9uIHdpdGggb3RoZXIgbW9kdWxlczoqKiBJJiMzOTtsbCBiZSBtaW5kZnVsIG9mIGNyb3NzLWRlcGVuZGVuY2llcyB0byBjb3JyZWN0bHkgaWRlbnRpZnkgYW55IGNvbmZsaWN0cy4KKiAgICoqRGVmYXVsdHM6KiogQXJlIHRoZXJlIGFueSBkZWZhdWx0IHNldHRpbmdzIGZvciB0aGUgcGFyYW1ldGVycyBJJiMzOTttIGV4YW1pbmluZz8gVGhpcyBhZmZlY3RzIHRoZSBvdXQtb2YtdGhlLWJveCBiZWhhdmlvciBvZiBhIHN5c3RlbS4KCkVzc2VudGlhbGx5LCBJIHdhbnQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIGhvdyBgeGZybV91c2VyLmNgIGZpdHMgaW50byB0aGUgYnVpbGQgc3lzdGVtIGFuZCBob3cgaXRzIGJlaGF2aW9yIGNhbiBiZSBjb250cm9sbGVkIHZpYSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTE6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV91c2VyXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL01ha2VmaWxlPTE5PW9iai0kKENPTkZJR19YRlJNX0FMR08pICYjNDM7PSB4ZnJtX2FsZ28ub1xubmV0L3hmcm0vTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX1hGUk1fVVNFUikgJiM0Mzs9IHhmcm1fdXNlci5vXG5uZXQveGZybS9NYWtlZmlsZS0yMS1vYmotJChDT05GSUdfWEZSTV9VU0VSX0NPTVBBVCkgJiM0Mzs9IHhmcm1fY29tcGF0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzc5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqRXhhbWluaW5nIHRoZSBYRlJNIENvbmZpZ3VyYXRpb24gYW5kIE1pZ3JhdGlvbioqCgpBbHJpZ2h0LCB0aGUgY29yZSBjb25maWd1cmF0aW9uIGluIHBsYXkgaGVyZSBpcyBkZWZpbml0ZWx5IGBYRlJNX1VTRVJgLiBNYWtlcyBzZW5zZS4gTm93LCB0aGUgbmV4dCBxdWVzdGlvbiBpcywgYXJlIHRoZXJlICphbnkqIG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIEkgc2hvdWxkIGJlIGNvbnNpZGVyaW5nIGluIHRoaXMgY29udGV4dD8gQWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2guCgpMZXQmIzM5O3MgZGlnIGEgYml0IGRlZXBlciBpbnRvIHRoZSBtaWdyYXRpb24gYXNwZWN0LiBJJiMzOTttIGdvaW5nIHRvIHRyYWNrIGRvd24gdGhlIGNhbGxlcnMgb2YgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYC4gVW5kZXJzdGFuZGluZyB3aGF0IGNhbGxzIHRoYXQgZnVuY3Rpb24gd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBzdGF0ZSBtaWdyYXRpb24gaXMgYWN0dWFsbHkgdXNlZC4gVGhhdCYjMzk7bGwgcHJvYmFibHkgcHJvdmlkZSBzb21lIGtleSBpbnNpZ2h0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jPTMzMDk9c3RhdGljIHVuc2lnbmVkIGludCB4ZnJtX21pZ3JhdGVfc3RhdGVfbXNnc2l6ZShjb25zdCBzdHJ1Y3QgeGZybV9taWdyYXRlICptLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzMjEtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMzIyOnN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGUoc3RydWN0IG5ldCAqbmV0LFxubmV0L3hmcm0veGZybV91c2VyLmMtMzMyMy1cdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCB4ZnJtX3VzZXJfbWlncmF0ZV9zdGF0ZSAqdW0sXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MzM0Nz1zdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTEwLVxubmV0L3hmcm0veGZybV91c2VyLmM6MzUxMTpcdGVyciA9IHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlKG5ldCwgdW0sIFx1MDAyNm0sIHhjLVx1MDAzZWRpcixcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MTItXHRcdFx0XHQgICAgICBubGgtXHUwMDNlbmxtc2dfcGlkLCBubGgtXHUwMDNlbmxtc2dfc2VxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODc5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBgeGZybWAgTWlncmF0aW9uIExvZ2ljKioKCk9rYXksIHNvIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGtpY2tzIG9mZiB0aGUgc3RhdGUgbWlncmF0aW9uIHByb2Nlc3MuIE5hdHVyYWxseSwgdGhlIG5leHQgc3RlcCwgYXMgaW5kaWNhdGVkIGJ5IHRoZSBjb2RlLCBpcyB0aGUgY2FsbCB0byBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGF0IGNvbmRpdGlvbnMgdHJpZ2dlciB0aGlzIG1pZ3JhdGlvbiBpbiB0aGUgZmlyc3QgcGxhY2U/JiMzNDsuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBiZWhpbmQgdGhpcyBzZXF1ZW5jZS4KClRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGdvaW5nIHRvIGNoZWNrIGlzIGlmIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIEkgd2FudCB0byBzZWUgaWYgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGdhdGVkIGJlaGluZCBhbnkgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMsIGFueSBgI2lmZGVmYCBibG9ja3MuIEFyZSB0aGVyZSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMsIGZlYXR1cmVzLCBvciBhcmNoaXRlY3R1cmFsIGNvbnN0cmFpbnRzIHRoYXQgZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBtaWdyYXRpb24gcGF0aCBpcyBldmVuIGF2YWlsYWJsZT8gS25vd2luZyBpZiB0aGlzIGlzIHNlbGVjdGl2ZWx5IGVuYWJsZWQgb3IgZGlzYWJsZWQgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIGhvdyB0aGVzZSByb3V0aW5lcyBhcmUgaW5jb3Jwb3JhdGVkIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLiBBcmUgd2UgZGVhbGluZyB3aXRoIGEgY29tcGlsZS10aW1lIG9wdGlvbiBvciBhIHJ1bnRpbWUgZGVjaXNpb24gaGVyZT8gVGhhdCYjMzk7cyB0aGUgcXVlc3Rpb24gSSBuZWVkIHRvIGFuc3dlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTE6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9kb19taWdyYXRlX3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmM9MzMyMj1zdGF0aWMgaW50IHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzQ2LVxubmV0L3hmcm0veGZybV91c2VyLmM6MzM0NzpzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzNDgtXHRcdFx0XHQgc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzUyOC0jZWxzZVxubmV0L3hmcm0veGZybV91c2VyLmM6MzUyOTpzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MzAtXHRcdFx0XHQgc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9Mzc0ND1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbGluayB7XG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzc4MS1cdFtYRlJNX01TR19HRVRERUZBVUxUICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fZ2V0X2RlZmF1bHQgICB9LFxubmV0L3hmcm0veGZybV91c2VyLmM6Mzc4MjpcdFtYRlJNX01TR19NSUdSQVRFX1NUQVRFIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9kb19taWdyYXRlX3N0YXRlIH0sXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzgzLX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDExOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1OTYKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZDoKCioqRGl2aW5nIGludG8gYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAmIzM5O3MgQ29uZGl0aW9uYWwgTG9naWMqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBhbmQgbXkgZXllIGltbWVkaWF0ZWx5IGxhbmRzIG9uIGFuIGAjZWxzZWAgYmxvY2suIEludGVyZXN0aW5nLiBUaGVzZSB0aGluZ3MgdXN1YWxseSBleGlzdCBmb3IgYSByZWFzb24sIHJpZ2h0PyBJdCYjMzk7cyBhbG1vc3QgYWx3YXlzIGEgc2lnbiB0aGF0IHRoZXJlJiMzOTtzIHNvbWUgY29uZGl0aW9uYWwgYmVoYXZpb3IgSSBuZWVkIHRvIHVuZGVyc3RhbmQsIHNvbWUgZGlmZmVyZW50IGV4ZWN1dGlvbiBwYXRoIGRlcGVuZGluZyBvbiBhIHNwZWNpZmljIGNpcmN1bXN0YW5jZS4gIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHdoYXQmIzM5O3MgdGhlIGNvbmRpdGlvbj8gV2hhdCYjMzk7cyB0aGUgYCNpZmRlZmAgdGhhdCBnb3Zlcm5zIHRoaXMgc3BlY2lmaWMgYnJhbmNoPyYjMzQ7IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgcHJlcHJvY2Vzc29yIG1hY3JvIGNvbnRyb2xzIHRoZSBpbmNsdXNpb24gb2YgdGhpcyBwYXJ0aWN1bGFyIGNvZGUgcGF0aC4gS25vd2luZyB0aGUgY29uZGl0aW9uIGlzICplc3NlbnRpYWwqIHRvIGdyYXNwaW5nIHRoZSBvdmVyYWxsIGJlaGF2aW9yIGFuZCBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24gaW4gdmFyaW91cyBjb25maWd1cmF0aW9ucy4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTtsbCB0cmFjZSBiYWNrIGFuZCBmaW5kIHRoYXQgYCNpZmRlZmAgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzM0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzM0MDpcdFx0cmN1X3JlYWRfbG9jaygpO1xuMzM0MTpcdFx0ZXJyID0geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9NSUdSQVRFKTtcbjMzNDI6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMzM0MzpcdFxuMzM0NDpcdFx0cmV0dXJuIGVycjtcbjMzNDU6XHR9XG4zMzQ2Olx0XG4zMzQ3Olx0c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4zMzQ4Olx0XHRcdFx0XHQgc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4zMzQ5Olx0e1xuMzM1MDpcdFx0c3RydWN0IHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlICp1bSA9IG5sbXNnX2RhdGEobmxoKTtcbjMzNTE6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2Vzayk7XG4zMzUyOlx0XHRzdHJ1Y3QgeGZybV91c2VyX29mZmxvYWQgeHVvID0ge307XG4zMzUzOlx0XHRzdHJ1Y3QgeGZybV9taWdyYXRlIG0gPSB7fTtcbjMzNTQ6XHRcdHN0cnVjdCB4ZnJtX3N0YXRlICp4YztcbjMzNTU6XHRcdHN0cnVjdCB4ZnJtX3N0YXRlICp4O1xuMzM1NjpcdFx0aW50IGVycjtcbjMzNTc6XHRcbjMzNTg6XHRcdGlmICghdW0tXHUwMDNlaWQuc3BpKSB7XG4zMzU5Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7SW52YWxpZCBTUEkgMHgwXCYjMzQ7KTtcbjMzNjA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zMzYxOlx0XHR9XG4zMzYyOlx0XG4zMzYzOlx0XHRpZiAodW0tXHUwMDNlcmVzZXJ2ZWQpIHtcbjMzNjQ6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtSZXNlcnZlZCBmaWVsZCBtdXN0IGJlIHplcm9cJiMzNDspO1xuMzM2NTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjMzNjY6XHRcdH1cbjMzNjc6XHRcbjMzNjg6XHRcdGlmICh1bS1cdTAwM2VmbGFncyBcdTAwMjYgflhGUk1fTUlHUkFURV9TVEFURV9LTk9XTl9GTEFHUykge1xuMzM2OTpcdFx0XHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLCBcJiMzNDtVbmtub3duIGZsYWdzOiAweCV4XCYjMzQ7LFxuMzM3MDpcdFx0XHRcdFx0ICAgdW0tXHUwMDNlZmxhZ3MgXHUwMDI2IH5YRlJNX01JR1JBVEVfU1RBVEVfS05PV05fRkxBR1MpO1xuMzM3MTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjMzNzI6XHRcdH1cbjMzNzM6XHRcbjMzNzQ6XHRcdGVyciA9IHZlcmlmeV94ZnJtX2ZhbWlseSh1bS1cdTAwM2VuZXdfZmFtaWx5LCBleHRhY2spO1xuMzM3NTpcdFx0aWYgKGVycilcbjMzNzY6XHRcdFx0cmV0dXJuIGVycjtcbjMzNzc6XHRcbjMzNzg6XHRcdGlmICghKHVtLVx1MDAzZWZsYWdzIFx1MDAyNiBYRlJNX01JR1JBVEVfU1RBVEVfVVBEQVRFX0gySF9TRUwpKSB7XG4zMzc5Olx0XHRcdGVyciA9IHZlcmlmeV9zZWxlY3Rvcl9wcmVmaXhsZW4odW0tXHUwMDNlbmV3X3NlbC5mYW1pbHksXG4zMzgwOlx0XHRcdFx0XHRcdFx0XHUwMDI2dW0tXHUwMDNlbmV3X3NlbCwgZXh0YWNrKTtcbjMzODE6XHRcdFx0aWYgKGVycilcbjMzODI6XHRcdFx0XHRyZXR1cm4gZXJyO1xuMzM4MzpcdFx0fVxuMzM4NDpcdFxuMzM4NTpcdFx0Y29weV9mcm9tX3VzZXJfbWlncmF0ZV9zdGF0ZShcdTAwMjZtLCB1bSk7XG4zMzg2Olx0XG4zMzg3Olx0XHR4ID0geGZybV9zdGF0ZV9sb29rdXAobmV0LCBtLm9sZF9tYXJrLnYgXHUwMDI2IG0ub2xkX21hcmsubSxcbjMzODg6XHRcdFx0XHQgICAgICBcdTAwMjZ1bS1cdTAwM2VpZC5kYWRkciwgdW0tXHUwMDNlaWQuc3BpLFxuMzM4OTpcdFx0XHRcdCAgICAgIHVtLVx1MDAzZWlkLnByb3RvLCB1bS1cdTAwM2VpZC5mYW1pbHkpO1xuMzM5MDpcdFx0aWYgKCF4KSB7XG4zMzkxOlx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7Q2FuIG5vdCBmaW5kIHN0YXRlXCYjMzQ7KTtcbjMzOTI6XHRcdFx0cmV0dXJuIC1FU1JDSDtcbjMzOTM6XHRcdH1cbjMzOTQ6XHRcbjMzOTU6XHRcdGlmICh1bS1cdTAwM2VmbGFncyBcdTAwMjYgWEZSTV9NSUdSQVRFX1NUQVRFX1VQREFURV9IMkhfU0VMKSB7XG4zMzk2Olx0XHRcdHU4IHByZWZpeGxlbiA9ICh4LVx1MDAzZXByb3BzLmZhbWlseSA9PSBBRl9JTkVUNikgPyAxMjggOiAzMjtcbjMzOTc6XHRcbjMzOTg6XHRcdFx0aWYgKHgtXHUwMDNlc2VsLnByZWZpeGxlbl9zICE9IHgtXHUwMDNlc2VsLnByZWZpeGxlbl9kIHx8XG4zMzk5Olx0XHRcdCAgICB4LVx1MDAzZXNlbC5wcmVmaXhsZW5fZCAhPSBwcmVmaXhsZW4gfHxcbjM0MDA6XHRcdFx0ICAgICF4ZnJtX2FkZHJfZXF1YWwoXHUwMDI2eC1cdTAwM2VzZWwuZGFkZHIsIFx1MDAyNngtXHUwMDNlaWQuZGFkZHIsIHgtXHUwMDNlcHJvcHMuZmFtaWx5KSB8fFxuMzQwMTpcdFx0XHQgICAgIXhmcm1fYWRkcl9lcXVhbChcdTAwMjZ4LVx1MDAzZXNlbC5zYWRkciwgXHUwMDI2eC1cdTAwM2Vwcm9wcy5zYWRkciwgeC1cdTAwM2Vwcm9wcy5mYW1pbHkpKSB7XG4zNDAyOlx0XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuMzQwMzpcdFx0XHRcdFx0ICAgICAgIFwmIzM0O1NBIHNlbGVjdG9yIGlzIG5vdCBhIHNpbmdsZS1ob3N0IG1hdGNoIGZvciBTQSBhZGRyZXNzZXNcJiMzNDspO1xuMzQwNDpcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4zNDA1Olx0XHRcdFx0Z290byBvdXQ7XG4zNDA2Olx0XHRcdH1cbjM0MDc6XHRcdH1cbjM0MDg6XHRcbjM0MDk6XHRcdGlmIChhdHRyc1tYRlJNQV9FTkNBUF0pIHtcbjM0MTA6XHRcdFx0bS5lbmNhcCA9IG5sYV9kYXRhKGF0dHJzW1hGUk1BX0VOQ0FQXSk7XG4zNDExOlx0XHRcdGlmIChtLmVuY2FwLVx1MDAzZWVuY2FwX3R5cGUgPT0gMCkge1xuMzQxMjpcdFx0XHRcdG0uZW5jYXAgPSBOVUxMOyAvKiBzZW50aW5lbDogcmVtb3ZlIGVuY2FwICovXG4zNDEzOlx0XHRcdH0gZWxzZSBpZiAobS5lbmNhcC1cdTAwM2VlbmNhcF90eXBlICE9IFVEUF9FTkNBUF9FU1BJTlVEUCkge1xuMzQxNDpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7VW5zdXBwb3J0ZWQgZW5jYXBzdWxhdGlvbiB0eXBlXCYjMzQ7KTtcbjM0MTU6XHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMzQxNjpcdFx0XHRcdGdvdG8gb3V0O1xuMzQxNzpcdFx0XHR9XG4zNDE4Olx0XHR9IGVsc2Uge1xuMzQxOTpcdFx0XHRtLmVuY2FwID0geC1cdTAwM2VlbmNhcDsgLyogb21pdC10by1pbmhlcml0ICovXG4zNDIwOlx0XHR9XG4zNDIxOlx0XG4zNDIyOlx0XHRpZiAoYXR0cnNbWEZSTUFfTVRJTUVSX1RIUkVTSF0pIHtcbjM0MjM6XHRcdFx0ZXJyID0gdmVyaWZ5X210aW1lcl90aHJlc2goISFtLmVuY2FwLCB4LVx1MDAzZWRpciwgZXh0YWNrKTtcbjM0MjQ6XHRcdFx0aWYgKGVycilcbjM0MjU6XHRcdFx0XHRnb3RvIG91dDtcbjM0MjY6XHRcdH1cbjM0Mjc6XHRcbjM0Mjg6XHRcdGlmIChubGFfZ2V0X3UzMl9kZWZhdWx0KGF0dHJzW1hGUk1BX05BVF9LRUVQQUxJVkVfSU5URVJWQUxdLCAwKSBcdTAwMjZcdTAwMjYgIW0uZW5jYXApIHtcbjM0Mjk6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuMzQzMDpcdFx0XHRcdCAgICAgICBcJiMzNDtOQVRfS0VFUEFMSVZFX0lOVEVSVkFMIHJlcXVpcmVzIGVuY2Fwc3VsYXRpb25cJiMzNDspO1xuMzQzMTpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMzQzMjpcdFx0XHRnb3RvIG91dDtcbjM0MzM6XHRcdH1cbjM0MzQ6XHRcbjM0MzU6XHRcdGlmIChhdHRyc1tYRlJNQV9PRkZMT0FEX0RFVl0pIHtcbjM0MzY6XHRcdFx0bS54dW8gPSBubGFfZGF0YShhdHRyc1tYRlJNQV9PRkZMT0FEX0RFVl0pO1xuMzQzNzpcdFx0fSBlbHNlIHtcbjM0Mzg6XHRcdFx0Ym9vbCBpbmhlcml0X29mZmxvYWQgPSAhKHVtLVx1MDAzZWZsYWdzIFx1MDAyNiBYRlJNX01JR1JBVEVfU1RBVEVfQ0xFQVJfT0ZGTE9BRCk7XG4zNDM5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDExOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NjcKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIGFjY291bnQ6CgoqKlJldmVyc2UgRW5naW5lZXJpbmcgdGhlIFByZXByb2Nlc3NvciBEaXJlY3RpdmUqKgoKQWxyaWdodCwgc28gdGhlIGdhbWUgcGxhbiBpcyBjbGVhcjogcGlucG9pbnRpbmcgdGhhdCBgI2lmZGVmYCBxdWlja2x5IGlzIHRoZSBwcmlvcml0eS4gSW5zdGVhZCBvZiBzbG9nZ2luZyB0aHJvdWdoIHRoZSBjb2RlIGxpbmUgYnkgbGluZSwgSSYjMzk7bSB0aGlua2luZyBhIGJhY2t3YXJkIHNjYW4gaXMgdGhlIG1vc3QgZWZmaWNpZW50IGFwcHJvYWNoLiBKdW1waW5nIHN0cmFpZ2h0IHRvIHRoZSBgI2lmZGVmYCBpdHNlbGYgZmVlbHMgbGlrZSB0aGUgZmFzdGVzdCB3YXkgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBjb250ZXh0LiBJJiMzOTtsbCBtZW50YWxseSBtYXAgb3V0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGFmdGVyIEkgbG9jYXRlIGl0IHRvIGNoZWNrIGZvciBhbnkgY3JpdGljYWwgbG9naWMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIG1vc3QgY29udGV4dCBmYXN0ZXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzI0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzI0MDpcdFxuMzI0MTpcdHN0YXRpYyBpbnQgYnVpbGRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuMzI0MjpcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgeGZybV91c2VyX21pZ3JhdGVfc3RhdGUgKnVtLFxuMzI0MzpcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgeGZybV9taWdyYXRlICptLFxuMzI0NDpcdFx0XHRcdCAgICAgICB1OCBkaXIsIHUzMiBwb3J0aWQsIHUzMiBzZXEpXG4zMjQ1Olx0e1xuMzI0NjpcdFx0aW50IGVycjtcbjMyNDc6XHRcdHN0cnVjdCBubG1zZ2hkciAqbmxoO1xuMzI0ODpcdFx0c3RydWN0IHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlICpoZHI7XG4zMjQ5Olx0XG4zMjUwOlx0XHRubGggPSBubG1zZ19wdXQoc2tiLCBwb3J0aWQsIHNlcSwgWEZSTV9NU0dfTUlHUkFURV9TVEFURSxcbjMyNTE6XHRcdFx0XHRzaXplb2Yoc3RydWN0IHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlKSwgMCk7XG4zMjUyOlx0XHRpZiAoIW5saClcbjMyNTM6XHRcdFx0cmV0dXJuIC1FTVNHU0laRTtcbjMyNTQ6XHRcbjMyNTU6XHRcdGhkciA9IG5sbXNnX2RhdGEobmxoKTtcbjMyNTY6XHRcdCpoZHIgPSAqdW07XG4zMjU3Olx0XHRoZHItXHUwMDNlbmV3X3NlbCA9ICptLVx1MDAzZW5ld19zZWw7XG4zMjU4Olx0XG4zMjU5Olx0XHRpZiAobS1cdTAwM2VlbmNhcCkge1xuMzI2MDpcdFx0XHRlcnIgPSBubGFfcHV0KHNrYiwgWEZSTUFfRU5DQVAsIHNpemVvZigqbS1cdTAwM2VlbmNhcCksIG0tXHUwMDNlZW5jYXApO1xuMzI2MTpcdFx0XHRpZiAoZXJyKVxuMzI2MjpcdFx0XHRcdGdvdG8gb3V0X2NhbmNlbDtcbjMyNjM6XHRcdH1cbjMyNjQ6XHRcbjMyNjU6XHRcdGlmIChtLVx1MDAzZXh1bykge1xuMzI2NjpcdFx0XHRlcnIgPSBubGFfcHV0KHNrYiwgWEZSTUFfT0ZGTE9BRF9ERVYsIHNpemVvZigqbS1cdTAwM2V4dW8pLCBtLVx1MDAzZXh1byk7XG4zMjY3Olx0XHRcdGlmIChlcnIpXG4zMjY4Olx0XHRcdFx0Z290byBvdXRfY2FuY2VsO1xuMzI2OTpcdFx0fVxuMzI3MDpcdFxuMzI3MTpcdFx0aWYgKG0tXHUwMDNlbmV3X21hcmspIHtcbjMyNzI6XHRcdFx0ZXJyID0gbmxhX3B1dChza2IsIFhGUk1BX01BUkssIHNpemVvZigqbS1cdTAwM2VuZXdfbWFyayksXG4zMjczOlx0XHRcdFx0ICAgICAgbS1cdTAwM2VuZXdfbWFyayk7XG4zMjc0Olx0XHRcdGlmIChlcnIpXG4zMjc1Olx0XHRcdFx0Z290byBvdXRfY2FuY2VsO1xuMzI3NjpcdFx0fVxuMzI3NzpcdFxuMzI3ODpcdFx0ZXJyID0geGZybV9zbWFya19wdXQoc2tiLCBcdTAwMjZtLVx1MDAzZXNtYXJrKTtcbjMyNzk6XHRcdGlmIChlcnIpXG4zMjgwOlx0XHRcdGdvdG8gb3V0X2NhbmNlbDtcbjMyODE6XHRcbjMyODI6XHRcdGlmIChtLVx1MDAzZW1hcHBpbmdfbWF4YWdlKSB7XG4zMjgzOlx0XHRcdGVyciA9IG5sYV9wdXRfdTMyKHNrYiwgWEZSTUFfTVRJTUVSX1RIUkVTSCwgbS1cdTAwM2VtYXBwaW5nX21heGFnZSk7XG4zMjg0Olx0XHRcdGlmIChlcnIpXG4zMjg1Olx0XHRcdFx0Z290byBvdXRfY2FuY2VsO1xuMzI4NjpcdFx0fVxuMzI4NzpcdFxuMzI4ODpcdFx0aWYgKG0tXHUwMDNlbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCkge1xuMzI4OTpcdFx0XHRlcnIgPSBubGFfcHV0X3UzMihza2IsIFhGUk1BX05BVF9LRUVQQUxJVkVfSU5URVJWQUwsXG4zMjkwOlx0XHRcdFx0XHQgIG0tXHUwMDNlbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCk7XG4zMjkxOlx0XHRcdGlmIChlcnIpXG4zMjkyOlx0XHRcdFx0Z290byBvdXRfY2FuY2VsO1xuMzI5MzpcdFx0fVxuMzI5NDpcdFxuMzI5NTpcdFx0aWYgKGRpcikge1xuMzI5NjpcdFx0XHRlcnIgPSBubGFfcHV0X3U4KHNrYiwgWEZSTUFfU0FfRElSLCBkaXIpO1xuMzI5NzpcdFx0XHRpZiAoZXJyKVxuMzI5ODpcdFx0XHRcdGdvdG8gb3V0X2NhbmNlbDtcbjMyOTk6XHRcdH1cbjMzMDA6XHRcbjMzMDE6XHRcdG5sbXNnX2VuZChza2IsIG5saCk7XG4zMzAyOlx0XHRyZXR1cm4gMDtcbjMzMDM6XHRcbjMzMDQ6XHRvdXRfY2FuY2VsOlxuMzMwNTpcdFx0bmxtc2dfY2FuY2VsKHNrYiwgbmxoKTtcbjMzMDY6XHRcdHJldHVybiBlcnI7XG4zMzA3Olx0fVxuMzMwODpcdFxuMzMwOTpcdHN0YXRpYyB1bnNpZ25lZCBpbnQgeGZybV9taWdyYXRlX3N0YXRlX21zZ3NpemUoY29uc3Qgc3RydWN0IHhmcm1fbWlncmF0ZSAqbSxcbjMzMTA6XHRcdFx0XHRcdFx0ICAgICAgIHU4IGRpcilcbjMzMTE6XHR7XG4zMzEyOlx0XHRyZXR1cm4gTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCB4ZnJtX3VzZXJfbWlncmF0ZV9zdGF0ZSkpICYjNDM7XG4zMzEzOlx0XHRcdChtLVx1MDAzZWVuY2FwID8gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB4ZnJtX2VuY2FwX3RtcGwpKSA6IDApICYjNDM7XG4zMzE0Olx0XHRcdChtLVx1MDAzZXh1byA/IG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgeGZybV91c2VyX29mZmxvYWQpKSA6IDApICYjNDM7XG4zMzE1Olx0XHRcdChtLVx1MDAzZW5ld19tYXJrID8gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB4ZnJtX21hcmspKSA6IDApICYjNDM7XG4zMzE2Olx0XHRcdCgobS1cdTAwM2VzbWFyay52IHwgbS1cdTAwM2VzbWFyay5tKSA/IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSAqIDIgOiAwKSAmIzQzO1xuMzMxNzpcdFx0XHQobS1cdTAwM2VtYXBwaW5nX21heGFnZSA/IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSA6IDApICYjNDM7XG4zMzE4Olx0XHRcdChtLVx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwgPyBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgOiAwKSAmIzQzO1xuMzMxOTpcdFx0XHQoZGlyID8gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU4KSkgOiAwKTsgLyogWEZSTUFfU0FfRElSICovXG4zMzIwOlx0fVxuMzMyMTpcdFxuMzMyMjpcdHN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGUoc3RydWN0IG5ldCAqbmV0LFxuMzMyMzpcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlICp1bSxcbjMzMjQ6XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm0sXG4zMzI1Olx0XHRcdFx0XHQgICB1OCBkaXIsIHUzMiBwb3J0aWQsIHUzMiBzZXEpXG4zMzI2Olx0e1xuMzMyNzpcdFx0aW50IGVycjtcbjMzMjg6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4zMzI5Olx0XG4zMzMwOlx0XHRza2IgPSBubG1zZ19uZXcoeGZybV9taWdyYXRlX3N0YXRlX21zZ3NpemUobSwgZGlyKSwgR0ZQX0FUT01JQyk7XG4zMzMxOlx0XHRpZiAoIXNrYilcbjMzMzI6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4zMzMzOlx0XG4zMzM0Olx0XHRlcnIgPSBidWlsZF9taWdyYXRlX3N0YXRlKHNrYiwgdW0sIG0sIGRpciwgcG9ydGlkLCBzZXEpO1xuMzMzNTpcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuMzMzNjpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbjMzMzc6XHRcdFx0cmV0dXJuIGVycjtcbjMzMzg6XHRcdH1cbjMzMzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM4MwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGVidWdnaW5nIGEgS2VybmVsIHhmcm0gTWlncmF0aW9uIElzc3VlKioKCk9rYXksIHNvIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAgaXMgYXQgbGluZSAzMzIyLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBwcm9ibGVtICpzaG91bGQqIGJlLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBpdCYjMzk7cyBldmVuIGJlaW5nIGV4ZWN1dGVkLCBvciBpZiBpdCYjMzk7cyBkZXBlbmRlbnQgb24gYSBjb21waWxhdGlvbiBmbGFnLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGlzIHNlY3Rpb24gaXMgY29uZGl0aW9uYWxseSBjb21waWxlZC4gSSYjMzk7bGwgc2VhcmNoIGZvciBgI2lmZGVmIENPTkZJR19YRlJNX01JR1JBVEVgLCBvciBhbnkgc2ltaWxhciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyByZWxhdGVkIHRvIG1pZ3JhdGlvbiwgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gR290dGEgcnVsZSBvdXQgdGhhdCBpdCYjMzk7cyBhIGNvbXBsZXRlbHkgZGlzYWJsZWQgZmVhdHVyZSwgYmVmb3JlIEkgc3RhcnQgdHJhY2luZyB0aHJvdWdoIHRoZSBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWZkZWYgQ09ORklHX1hGUk1fTUlHUkFURSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fdXNlci5jPTEyMDQ9c3RhdGljIHZvaWQgeHNvX3RvX3h1b19pZmluZGV4KGNvbnN0IHN0cnVjdCB4ZnJtX2Rldl9vZmZsb2FkICp4c28sIGludCBpZmluZGV4LFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEyMTMtXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxMjE0OiNpZmRlZiBDT05GSUdfWEZSTV9NSUdSQVRFXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMjE1LXN0YXRpYyB2b2lkIHhzb190b194dW8oY29uc3Qgc3RydWN0IHhmcm1fZGV2X29mZmxvYWQgKnhzbyxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zMDQyPXN0YXRpYyBpbnQgeGZybV9hZGRfYWNxdWlyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMTE2LVxubmV0L3hmcm0veGZybV91c2VyLmM6MzExNzojaWZkZWYgQ09ORklHX1hGUk1fTUlHUkFURVxubmV0L3hmcm0veGZybV91c2VyLmMtMzExOC1zdGF0aWMgdm9pZCBjb3B5X2Zyb21fdXNlcl9taWdyYXRlX3N0YXRlKHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm1hLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM1MzY9c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzU0Mi1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM1NDM6I2lmZGVmIENPTkZJR19YRlJNX01JR1JBVEVcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1NDQtc3RhdGljIGludCBjb3B5X3RvX3VzZXJfbWlncmF0ZShjb25zdCBzdHJ1Y3QgeGZybV9taWdyYXRlICptLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDQ4CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4gU28sIEkmIzM5O20gcHJldHR5IHN1cmUgYENPTkZJR19YRlJNX01JR1JBVEVgIGlzIHRoZSBrZXkgY29uZmlnIG9wdGlvbiB3ZSYjMzk7cmUgaW50ZXJlc3RlZCBpbiBmb3IgdGhpcyBtaWdyYXRpb24gc3R1ZmYuICpXYWl0IGEgc2Vjb25kKiwgaXNuJiMzOTt0IGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAgb25seSBjb21waWxlZCBpbiBpZiB0aGF0IG9wdGlvbiBpcyBlbmFibGVkPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQuIExldCYjMzk7cyBnZXQgcmlnaHQgaW50byB0aGUgY29kZS4gSSByZWFsbHkgbmVlZCB0byBjb25maXJtIHRoYXQgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCBpcyBhY3R1YWxseSBndWFyZGVkIGJ5IGFuIGAjaWZkZWYgQ09ORklHX1hGUk1fTUlHUkFURWAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSwgYmVjYXVzZSBpZiBub3QsIGl0IHRocm93cyBhIHdyZW5jaCBpbnRvIHRoZSB3aG9sZSBwcm9jZXNzLiBJIGhhdmUgdG8gY29uZmlybSBob3cgdGhhdCBjb2RlIGlzIGdvaW5nIHRvIGJ1aWxkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZmRlZiBDT05GSUdfWEZSTV9NSUdSQVRFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV91c2VyLmM9MTIwND1zdGF0aWMgdm9pZCB4c29fdG9feHVvX2lmaW5kZXgoY29uc3Qgc3RydWN0IHhmcm1fZGV2X29mZmxvYWQgKnhzbywgaW50IGlmaW5kZXgsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMTIxMy1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjEyMTQ6I2lmZGVmIENPTkZJR19YRlJNX01JR1JBVEVcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEyMTUtc3RhdGljIHZvaWQgeHNvX3RvX3h1byhjb25zdCBzdHJ1Y3QgeGZybV9kZXZfb2ZmbG9hZCAqeHNvLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTMwNDI9c3RhdGljIGludCB4ZnJtX2FkZF9hY3F1aXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMxMTYtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMTE3OiNpZmRlZiBDT05GSUdfWEZSTV9NSUdSQVRFXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMTE4LXN0YXRpYyB2b2lkIGNvcHlfZnJvbV91c2VyX21pZ3JhdGVfc3RhdGUoc3RydWN0IHhmcm1fbWlncmF0ZSAqbWEsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MzUzNj1zdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTQyLVxubmV0L3hmcm0veGZybV91c2VyLmM6MzU0MzojaWZkZWYgQ09ORklHX1hGUk1fTUlHUkFURVxubmV0L3hmcm0veGZybV91c2VyLmMtMzU0NC1zdGF0aWMgaW50IGNvcHlfdG9fdXNlcl9taWdyYXRlKGNvbnN0IHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm0sIHN0cnVjdCBza19idWZmICpza2IpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDExOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MjIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIEJsb2NrIFRlcm1pbmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuIE15IG1lbnRhbCBtb2RlbCBpcyB0ZWxsaW5nIG1lIHRoYXQgd2UgYXJlIGxvb2tpbmcgZm9yIHRoZSBlbmQgb2YgYSBibG9jayBvZiBkYXRhLCBzcGVjaWZpY2FsbHkgc3RhcnRpbmcgYXJvdW5kIGFkZHJlc3MgMzExNy4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgb2YgY291cnNlLCB3aGF0JiMzOTtzIHRoZSBibG9jayYjMzk7cyAqdGVybWluYXRvcio/IElzIGl0IGEgZml4ZWQtbGVuZ3RoIHN0cnVjdHVyZT8gRG8gd2UgaGF2ZSBhIHNlbnRpbmVsIHZhbHVlLCBhbiBlbmQtb2YtYmxvY2sgbWFya2VyIHBlcmhhcHM/IE9yIGFyZSB3ZSByZWx5aW5nIG9uIHNvbWUgb3RoZXIsIG1vcmUgaW1wbGljaXQgbWV0aG9kIHRvIGRldGVybWluZSB0aGUgYm91bmRhcnk/CgpNeSBleHBlcnRpc2Uga2lja3MgaW4gYW5kIEkgaGF2ZSB0byBhc3Nlc3MgYWxsIHBvc3NpYmlsaXRpZXM6IElzIHRoZXJlIGEgY2hlY2tzdW0gSSBuZWVkIHRvIGNhbGN1bGF0ZSBvciB2YWxpZGF0ZSB0aGF0IGNvdWxkIHNpZ25hbCB0aGUgZW5kPyBEbyBJIGhhdmUgdG8gcGFyc2Ugc29tZSBoZWFkZXIgaW5mb3JtYXRpb24gdG8gaW5mZXIgdGhlIGxlbmd0aD8gSXMgaXQgaW1wbGljaXRseSBkZWZpbmVkIGJ5IHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGVuY2xvc2luZyBkYXRhIGZvcm1hdD8gQ291bGQgdGhlcmUgYmUgYW4gZXJyb3IgY29uZGl0aW9uIHRoYXQgc2lnbmFscyB0aGUgdGVybWluYXRpb24sIHNvbWV0aGluZyBsaWtlIGEgJiMzNDtwYWRkaW5nJiMzNDsgYXBwcm9hY2ggd2l0aCBhIHNwZWNpZmljIHBhdHRlcm4gYXQgdGhlIGVuZD8KCkkmIzM5O20gZXNzZW50aWFsbHkgd29ya2luZyB0aHJvdWdoIG15IG1lbnRhbCBjaGVja2xpc3Qgb2YgY29tbW9uIGRhdGEgYmxvY2sgZGVsaW5lYXRpb24gdGVjaG5pcXVlcywgdHJ5aW5nIHRvIHF1aWNrbHkgcGlucG9pbnQgdGhlIGFwcHJvcHJpYXRlIG1ldGhvZCBmb3IgdGhpcyBzcGVjaWZpYyBjYXNlLiBJIGtub3cgdGhlIGJsb2NrIGxlbmd0aCBjb3VsZCBiZSBpbXBsaWVkIGJ5IHRoZSBmb3JtYXQgYW5kIHdpbGwgaGF2ZSB0byBiZSBpbnZlc3RpZ2F0ZWQuIEkmIzM5O20gdHJ5aW5nIHRvIGRlY2lkZSB0aGUgYmVzdCBhcHByb2FjaCBiYXNlZCBvbiB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2Vsc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYz0yNjc9c3RhdGljIGludCB2ZXJpZnlfeGZybV9mYW1pbHkodTE2IGZhbWlseSwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI3NC1cdFx0cmV0dXJuIDA7XG5uZXQveGZybS94ZnJtX3VzZXIuYzoyNzU6I2Vsc2Vcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI3Ni1cdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtJUHY2IHN1cHBvcnQgZGlzYWJsZWRcJiMzNDspO1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTI4NT1zdGF0aWMgaW50IHZlcmlmeV9zZWxlY3Rvcl9wcmVmaXhsZW4odTE2IGZhbWlseSxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMDYtXHRcdHJldHVybiAwO1xubmV0L3hmcm0veGZybV91c2VyLmM6MzA3OiNlbHNlXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMDgtXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7SVB2NiBzdXBwb3J0IGRpc2FibGVkXCYjMzQ7KTtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0xOTk4PXN0YXRpYyBpbnQgdmVyaWZ5X25ld3BvbGljeV9pbmZvKHN0cnVjdCB4ZnJtX3VzZXJwb2xpY3lfaW5mbyAqcCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yMDQxLVx0XHRicmVhaztcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjIwNDI6I2Vsc2Vcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTIwNDMtXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7SVB2NiBzdXBwb3J0IGRpc2FibGVkXCYjMzQ7KTtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0yMzc3PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHVzZXJwb2xpY3lfdHlwZV9hdHRyc2l6ZSh2b2lkKVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTIzODAtXHRyZXR1cm4gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB4ZnJtX3VzZXJwb2xpY3lfdHlwZSkpO1xubmV0L3hmcm0veGZybV91c2VyLmM6MjM4MTojZWxzZVxubmV0L3hmcm0veGZybV91c2VyLmMtMjM4Mi1cdHJldHVybiAwO1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTIzODc9c3RhdGljIGludCBjb3B5X3RvX3VzZXJfcG9saWN5X3R5cGUodTggdHlwZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yMzk3LVxubmV0L3hmcm0veGZybV91c2VyLmM6MjM5ODojZWxzZVxubmV0L3hmcm0veGZybV91c2VyLmMtMjM5OS1zdGF0aWMgaW5saW5lIGludCBjb3B5X3RvX3VzZXJfcG9saWN5X3R5cGUodTggdHlwZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zMzQ3PXN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MjctXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNTI4OiNlbHNlXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTI5LXN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM2MzI9c3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZShjb25zdCBzdHJ1Y3QgeGZybV9zZWxlY3RvciAqc2VsLCB1OCBkaXIsIHU4IHR5cGUsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzY1MC19XG5uZXQveGZybS94ZnJtX3VzZXIuYzozNjUxOiNlbHNlXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNjUyLXN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGUoY29uc3Qgc3RydWN0IHhmcm1fc2VsZWN0b3IgKnNlbCwgdTggZGlyLCB1OCB0eXBlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDkwMgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIFhGUk0gTWlncmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kLCBhcyBleHBlY3RlZCwgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgaXMgd3JhcHBlZCBpbiBhbiBgI2lmZGVmIENPTkZJR19YRlJNX01JR1JBVEVgIGJsb2NrLiBUaGF0JiMzOTtzIGEgY2xlYXIgaW5kaWNhdG9yIHRoYXQgYENPTkZJR19YRlJNX01JR1JBVEVgICptdXN0KiBiZSBlbmFibGVkIGZvciB0aGlzIGZ1bmN0aW9uIHRvIGV2ZW4gZXhpc3QgaW4gdGhlIGNvbXBpbGVkIGtlcm5lbC4gTWFrZXMgcGVyZmVjdCBzZW5zZS4KCkJ1dCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEkmIzM5O20gd29uZGVyaW5nIGlmIHRoZXJlIGFyZSBhbnkgKm90aGVyKiBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcywgYW55dGhpbmcgZWxzZSB0aGF0IG1pZ2h0IGJlIG5lZWRlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBDT05GSUdfWEZSTV9NSUdSQVRFYC4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgZm9yIHRoZSBYRlJNIHN1YnN5c3RlbS4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZGl2ZSBpbnRvIGBuZXQveGZybS9LY29uZmlnYCBhbmQgZXhwbGljaXRseSBleGFtaW5lIHRoZSBkZWZpbml0aW9ucyBmb3IgYm90aCBgWEZSTV9NSUdSQVRFYCBhbmQgYFhGUk1fVVNFUmAuIEkmIzM5O20gZXNwZWNpYWxseSBrZWVuIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGluZGlyZWN0IGRlcGVuZGVuY2llcy4gSSB0aGluayBgQ09ORklHX1hGUk1fVVNFUmAgbWlnaHQgYWxzbyBiZSBhIHJlcXVpcmVtZW50IGZvciB0aGlzIGZ1bmN0aW9uYWxpdHksIHNvIEkgd2lsbCBjaGVjayB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWEZSTV9NSUdSQVRFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnPTUxPWNvbmZpZyBYRlJNX1NVQl9QT0xJQ1lcbi0tXG5uZXQveGZybS9LY29uZmlnLTYwLVxubmV0L3hmcm0vS2NvbmZpZzo2MTpjb25maWcgWEZSTV9NSUdSQVRFXG5uZXQveGZybS9LY29uZmlnLTYyLVx0Ym9vbCBcJiMzNDtUcmFuc2Zvcm1hdGlvbiBtaWdyYXRlIGRhdGFiYXNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDExOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzU3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCYjMzk7cyBnb2luZyB0aHJvdWdoIG15IG1pbmQgYXMgSSBhcHByb2FjaCB0aGlzIGBuZXQveGZybS9LY29uZmlnYCBmaWxlIGFuZCB0aGUgYFhGUk1fTUlHUkFURWAgb3B0aW9uLgoKKipEaXZpbmcgaW50byBgbmV0L3hmcm0vS2NvbmZpZ2AgYW5kIGBYRlJNX01JR1JBVEVgKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZ29pbmcgdG8gcHVsbCB1cCBgbmV0L3hmcm0vS2NvbmZpZ2AgYmVjYXVzZSBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gWEZSTSBtaWdyYXRpb24uIE15IGZvY3VzIGlzIGdvaW5nIHRvIGJlIHplcm9pbmcgaW4gb24gYFhGUk1fTUlHUkFURWAgYW5kIGZpZ3VyaW5nIG91dCB3aGF0IGl0IGRvZXMsIGhvdyBpdCYjMzk7cyBlbmFibGVkLCBhbmQgcG90ZW50aWFsbHkgYW55IGRlcGVuZGVuY2llcyBvciBpbnRlcmFjdGlvbnMgaXQgaGFzIHdpdGggb3RoZXIgWEZSTSBmZWF0dXJlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIFhGUk0gZnJhbWV3b3JrLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZpbGUgdG8gZ2l2ZSBtZSB0aGUgZGVmaW5pdGl2ZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIHRoZSBrZXJuZWwgY29uZmlnIG9wdGlvbnMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNvbW1lbnRzLCBkZWZhdWx0IHNldHRpbmdzLCBhbmQgbGlrZWx5IGFueSAqYm9vbCosICp0cmlzdGF0ZSosIG9yICpzZWxlY3QqIHN0YXRlbWVudHMgcmVsZXZhbnQgdG8gaXQuIEFueSBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBvciByZWZlcmVuY2VzIHdpdGhpbiB0aGUgZmlsZSB3b3VsZCBiZSBpbmNyZWRpYmx5IGhlbHBmdWwgYXMgd2VsbC4gVGhpcyBpcyBwcm9iYWJseSBnb2luZyB0byBpbnZvbHZlIHRyYWNpbmcgdGhyb3VnaCBjb25kaXRpb25hbCBzdGF0ZW1lbnRzIGFuZCBvdGhlciBkZXBlbmRlbmNpZXMgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb24uIFRoaXMgaXMgY3JpdGljYWwgZm9yIGtlcm5lbCBjb25maWd1cmF0aW9uIGFuZCBwb3RlbnRpYWwgbWlncmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDUwOlx0XG4gIDUxOlx0Y29uZmlnIFhGUk1fU1VCX1BPTElDWVxuICA1MjpcdFx0Ym9vbCBcJiMzNDtUcmFuc2Zvcm1hdGlvbiBzdWIgcG9saWN5IHN1cHBvcnRcJiMzNDtcbiAgNTM6XHRcdGRlcGVuZHMgb24gWEZSTVxuICA1NDpcdFx0aGVscFxuICA1NTpcdFx0ICBTdXBwb3J0IHN1YiBwb2xpY3kgZm9yIGRldmVsb3BlcnMuIEJ5IHVzaW5nIHN1YiBwb2xpY3kgd2l0aCBtYWluXG4gIDU2Olx0XHQgIG9uZSwgdHdvIHBvbGljaWVzIGNhbiBiZSBhcHBsaWVkIHRvIHRoZSBzYW1lIHBhY2tldCBhdCBvbmNlLlxuICA1NzpcdFx0ICBQb2xpY3kgd2hpY2ggbGl2ZXMgc2hvcnRlciB0aW1lIGluIGtlcm5lbCBzaG91bGQgYmUgYSBzdWIuXG4gIDU4Olx0XG4gIDU5Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDYwOlx0XG4gIDYxOlx0Y29uZmlnIFhGUk1fTUlHUkFURVxuICA2MjpcdFx0Ym9vbCBcJiMzNDtUcmFuc2Zvcm1hdGlvbiBtaWdyYXRlIGRhdGFiYXNlXCYjMzQ7XG4gIDYzOlx0XHRkZXBlbmRzIG9uIFhGUk1cbiAgNjQ6XHRcdGhlbHBcbiAgNjU6XHRcdCAgQSBmZWF0dXJlIHRvIHVwZGF0ZSBsb2NhdG9yKHMpIG9mIGEgZ2l2ZW4gSVBzZWMgc2VjdXJpdHlcbiAgNjY6XHRcdCAgYXNzb2NpYXRpb24gZHluYW1pY2FsbHkuICBUaGlzIGZlYXR1cmUgaXMgcmVxdWlyZWQsIGZvclxuICA2NzpcdFx0ICBpbnN0YW5jZSwgaW4gYSBNb2JpbGUgSVB2NiBlbnZpcm9ubWVudCB3aXRoIElQc2VjIGNvbmZpZ3VyYXRpb25cbiAgNjg6XHRcdCAgd2hlcmUgbW9iaWxlIG5vZGVzIGNoYW5nZSB0aGVpciBhdHRhY2htZW50IHBvaW50IHRvIHRoZSBJbnRlcm5ldC5cbiAgNjk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5NTUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246CgoqKlhGUk0gRGVwZW5kZW5jeSBJbnF1aXJ5KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYFhGUk1fTUlHUkFURWAgZmVhdHVyZSwgYW5kIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGl0IGhhcyBhIGRpcmVjdCBkZXBlbmRlbmN5IG9uIGBYRlJNYC4gVGhhdCBtYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIG1pZ3JhdGlvbiBhc3BlY3QgaW5oZXJlbnRseSByZWxhdGVzIHRvIHRoZSBmb3VuZGF0aW9uYWwgWEZSTSBmdW5jdGlvbmFsaXR5LiBCdXQsIHRoZSBxdWVzdGlvbiB0aGF0JiMzOTtzIG5vdyBwaW5naW5nIGluIG15IG1pbmQgaXMsIHdoYXQgYWJvdXQgYFhGUk1fVVNFUmA/IElzIHRoaXMgYWxzbyBhIHByZXJlcXVpc2l0ZSwgb3IgaXMgaXQgb3B0aW9uYWwgaW4gdGhlIGNvbnRleHQgb2YgYFhGUk1fTUlHUkFURWA/IEkgbmVlZCB0byBjbGFyaWZ5IHRoZSByZWxhdGlvbnNoaXAgaGVyZTsgaXTigJlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBsZXRlIGJ1aWxkIGFuZCBydW50aW1lIGRlcGVuZGVuY2llcywgZXNwZWNpYWxseSBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24gb3IgcG9saWN5IGNvbnRyb2wgZHVyaW5nIHRoZSBtaWdyYXRpb24gcHJvY2Vzcy4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSBub3QgdG8gdGFrZSBhbnl0aGluZyBmb3IgZ3JhbnRlZDsgSSBzaG91bGQgY2hlY2sgdGhpcyByZWxhdGlvbnNoaXAgZGlyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYRlJNX1VTRVImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWc9MjI9aWYgSU5FVFxubmV0L3hmcm0vS2NvbmZpZzoyMzpjb25maWcgWEZSTV9VU0VSXG5uZXQveGZybS9LY29uZmlnLTI0LVx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctMzEtXG5uZXQveGZybS9LY29uZmlnOjMyOmNvbmZpZyBYRlJNX1VTRVJfQ09NUEFUXG5uZXQveGZybS9LY29uZmlnLTMzLVx0dHJpc3RhdGUgXCYjMzQ7Q29tcGF0aWJsZSBBQkkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjMyMAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb24sIHRhaWxvcmVkIGZvciBteSBmZWxsb3cgZXhwZXJ0OgoKKipVbmRlcnN0YW5kaW5nIHRoZSBLZXJuZWwgRGVwZW5kZW5jaWVzIG9mIFhGUk1fVVNFUioqCgpPa2F5LCBzbyBgWEZSTV9VU0VSYC4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZywgZ2l2ZW4gaXRzIGxvY2F0aW9uIGluIGBuZXQveGZybS9LY29uZmlnYCwgdGhhdCBpdCYjMzk7cyBnb2luZyB0byBiZSBpbmhlcmVudGx5IGxpbmtlZCB0byBgWEZSTWAgaXRzZWxmLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGBYRlJNX1VTRVJgIGlzIGFib3V0IHVzZXItc3BhY2UgaW50ZXJhY3Rpb24gd2l0aCB0aGUgWEZSTSBmcmFtZXdvcmsuIEFuZCwgc2luY2UgaXQmIzM5O3MgaW4gdGhlIG5ldHdvcmtpbmcgc3BhY2UsIEkmIzM5O2QgZXhwZWN0IGl0IHRvIGxldmVyYWdlIGBJTkVUYCBhcyBhIGZvdW5kYXRpb25hbCByZXF1aXJlbWVudC4gTGV0JiMzOTtzIHF1aWNrbHkgdmVyaWZ5IHRoZXNlIGltcGxpZWQgZGVwZW5kZW5jaWVzIHRvIGNlbWVudCBteSB1bmRlcnN0YW5kaW5nLCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBjb25maXJtIG15IGluaXRpYWwgYXNzdW1wdGlvbnMuIEl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGhhdmUgYSBzb2xpZCBoYW5kbGUgb24gdGhlIGtlcm5lbCYjMzk7cyBtb2R1bGUgc3RydWN0dXJlLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIFhGUk0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFhGUk0gY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRjb25maWcgWEZSTVxuICAgNjpcdFx0Ym9vbFxuICAgNzpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA4Olx0XHRzZWxlY3QgR1JPX0NFTExTXG4gICA5Olx0XHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcbiAgMTA6XHRcbiAgMTE6XHRjb25maWcgWEZSTV9PRkZMT0FEXG4gIDEyOlx0XHRib29sXG4gIDEzOlx0XG4gIDE0Olx0Y29uZmlnIFhGUk1fQUxHT1xuICAxNTpcdFx0dHJpc3RhdGVcbiAgMTY6XHRcdHNlbGVjdCBYRlJNXG4gIDE3Olx0XHRzZWxlY3QgQ1JZUFRPXG4gIDE4Olx0XHRzZWxlY3QgQ1JZUFRPX0FFQURcbiAgMTk6XHRcdHNlbGVjdCBDUllQVE9fSEFTSFxuICAyMDpcdFx0c2VsZWN0IENSWVBUT19TS0NJUEhFUlxuICAyMTpcdFxuICAyMjpcdGlmIElORVRcbiAgMjM6XHRjb25maWcgWEZSTV9VU0VSXG4gIDI0Olx0XHR0cmlzdGF0ZSBcJiMzNDtUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXCYjMzQ7XG4gIDI1Olx0XHRzZWxlY3QgWEZSTV9BTEdPXG4gIDI2Olx0XHRoZWxwXG4gIDI3Olx0XHQgIFN1cHBvcnQgZm9yIFRyYW5zZm9ybWF0aW9uKFhGUk0pIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcbiAgMjg6XHRcdCAgbGlrZSBJUHNlYyB1c2VkIGJ5IG5hdGl2ZSBMaW51eCB0b29scy5cbiAgMjk6XHRcbiAgMzA6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4OTEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBkZXBlbmRlbmNpZXMgYW5kIGZ1bmN0aW9uIGNhbGxzOgoKKipEZWNvZGluZyB0aGUgWEZSTSBNaWdyYXRpb24gUGF0Y2ggRGVwZW5kZW5jaWVzKioKClJpZ2h0LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duIGxvZ2ljYWxseS4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBtaWdyYXRpbmcgWEZSTSBzdGF0ZXMuIEkgc2VlIHRoYXQgYFhGUk1fVVNFUmAgaXMgc2VsZWN0aW5nIGBYRlJNX0FMR09gLCBhbmQgdGhhdCBpbiB0dXJuLCBzZWxlY3RzIGBYRlJNYC4gVGhhdCBtdWNoIGlzIGNsZWFyIGZyb20gdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzLiBOYXR1cmFsbHksIGBYRlJNX01JR1JBVEVgIGFsc28gZGVwZW5kcyBvbiBgWEZSTWAuIFNvLCBpZiB3ZSB3YW50IHRoaXMgbWlncmF0aW9uIGZ1bmN0aW9uYWxpdHkgdG8gd29yaywgd2UmIzM5O2xsIG5lZWQgYm90aCBgWEZSTV9VU0VSYCBhbmQgYFhGUk1fTUlHUkFURWAgZW5hYmxlZC4gU2VlbXMgbG9naWNhbCwgZ2l2ZW4gdGhlIHVzZXIgc3BhY2UgaW50ZXJhY3Rpb24gaW52b2x2ZWQuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBhY3R1YWwgY29kZS4gVGhlIHBhdGNoIHRvdWNoZXMgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYC4gU2luY2UgdGhpcyBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgSSYjMzk7bSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHdoZXJlIGl0JiMzOTtzIGJlaW5nICpjYWxsZWQqIGZyb20uIEFuZCB5ZXMsIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAgaXMsIGFzIEkgc3VzcGVjdGVkLCBjYWxsZWQgYnkgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAuIE9rYXksIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGlzIGFsc28gc3RhdGljLCBidXQgdGhhdCYjMzk7cyBrZXkuIEl0JiMzOTtzIGFjdHVhbGx5IGFuIGVudHJ5IHBvaW50IGluIHRoZSBgeGZybV9saW5rYCBhcnJheSBmb3IgYFhGUk1fTVNHX01JR1JBVEVfU1RBVEVgLiBBbmQgdGhlIGxpZ2h0IGJ1bGIgZ29lcyBvZmYuIFdhaXQgYSBtaW51dGXigKYgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgaXMgKmFsc28qIGNhbGxlZCBieSBgeGZybV91c2VyX3Jjdl9tc2dgLCB0aGUgbmV0bGluayBoYW5kbGVyISBBaGEhIFRoYXQmIzM5O3MgdGhlIGNydWNpYWwgbGluayB0byB1c2VyIHNwYWNlLiBJdCBoYW5kbGVzIHRoZSBuZXRsaW5rIG1lc3NhZ2UgZm9yIHRoZSBtaWdyYXRpb24uCgpJJiMzOTtkIGJldHRlciBtYWtlIHN1cmUgdGhhdCBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBpc24mIzM5O3QgaW5saW5lZCwgdGhvdWdoLCBvciB3ZSYjMzk7cmUgbG9zaW5nIHRoZSBlbnRyeSBwb2ludCB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7bGwgbmVlZCB0byB2ZXJpZnkgdGhhdC4gSXQgd291bGQgZGVmaW5pdGVseSBiZSBzdWJvcHRpbWFsIGlmIGl0IHdhcyBpbmxpbmVkLCBzaW5jZSB0aGF0IHdvdWxkIG1ha2UgaXQgbW9yZSBkaWZmaWN1bHQgZm9yIHVzIHRvIHVzZSB0aGlzIGVudHJ5IHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX2RvX21pZ3JhdGVfc3RhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3VzZXIuYz0zMzIyPXN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGUoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzNDYtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMzQ3OnN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxubmV0L3hmcm0veGZybV91c2VyLmMtMzM0OC1cdFx0XHRcdCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTI4LSNlbHNlXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNTI5OnN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxubmV0L3hmcm0veGZybV91c2VyLmMtMzUzMC1cdFx0XHRcdCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zNzQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9saW5rIHtcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzgxLVx0W1hGUk1fTVNHX0dFVERFRkFVTFQgIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9nZXRfZGVmYXVsdCAgIH0sXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNzgyOlx0W1hGUk1fTVNHX01JR1JBVEVfU1RBVEUgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUgfSxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM3ODMtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5NzUKCQkJCQkJCW91dHB1dDogMTU2CgkJCQkJCQl0aG91Z2h0czogMzg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBYRlJNIE1pZ3JhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBYRlJNIG1pZ3JhdGlvbiBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IGEgZ29vZCBmb2N1cyBzeW1ib2wgZm9yIGZ1enppbmcuIFNpbmNlIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGlzIGEgZnVuY3Rpb24gcG9pbnRlciB3aXRoaW4gYHhmcm1fbGlua2AsIEkga25vdyBpdCBjYW4mIzM5O3QgYmUgaW5saW5lZC4gVGhhdCBpbW1lZGlhdGVseSBtYWtlcyBpdCBhIHN0cm9uZyBjYW5kaWRhdGUuIEl0JiMzOTtzIGEga2V5IGVudHJ5IHBvaW50LgoKSSBjaGVja2VkIHRvIHNlZSBpZiBhbnkgb3RoZXIgc3ltYm9scyBzdG9vZCBvdXQuIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgaXMgY2FsbGVkLCBidXQgdGhhdCYjMzk7cyBhIGdlbmVyYWwtcHVycG9zZSBmdW5jdGlvbiwgc28gaXQmIzM5O3MgcHJvYmFibHkgbm90IHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UuIEFoLCByaWdodC4gVGhlIHBhdGNoIGFkZHMgYHJjdV9yZWFkX2xvY2soKWAgYW5kIGByY3VfcmVhZF91bmxvY2soKWAgYXJvdW5kIHRoZSBjYWxsIHRvIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgd2l0aGluIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAuIFRoYXQgbWVhbnMgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgaXMgZGVmaW5pdGVseSB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byB0YXJnZXQgZm9yIGZ1enppbmcsIGdpdmVuIHRoZSBhZGRlZCBSQ1UgcHJvdGVjdGlvbnMuCgpOZXh0LCBJIHZlcmlmaWVkIHRoYXQgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgaXMgYWN0dWFsbHkgcmVhY2hhYmxlLiBJdCYjMzk7cyBhbiBYRlJNIG5ldGxpbmsgbWVzc2FnZSBoYW5kbGVyLCBhbmQgaXQgaGFuZGxlcyB0aGUgbWlncmF0aW9uIHN0YXRlIG1lc3NhZ2VzLiBZZXAsIGl0IGlzIHJlYWNoYWJsZS4KCk5vdywgbGV0JiMzOTtzIHZlcmlmeSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3MuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBgWEZSTV9VU0VSYCBhbmQgYFhGUk1fTUlHUkFURWAgYXJlIHRoZSBrZXkgY29uZmlncyBoZXJlLiBUaGUgZm9ybWVyIGlzIG9idmlvdXM6IGl0IGVuYWJsZXMgdGhlIG5ldGxpbmsgaW50ZXJmYWNlLCB3aGljaCB3ZSBuZWVkIHRvIHRyaWdnZXIgdGhlIG1lc3NhZ2UuIFRoZSBsYXR0ZXIgZW5hYmxlcyB0aGUgc3RhdGUgbWlncmF0aW9uIGZ1bmN0aW9uYWxpdHkgaXRzZWxmLiBZZXMsIHRoaXMgY29tYmluYXRpb24gc2hvdWxkIGJlIHN1ZmZpY2llbnQuCgpTbywgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgaXMgbXkgcHJpbWFyeSBmb2N1cyBzeW1ib2wsIGFuZCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IGBYRlJNX1VTRVJgIGFuZCBgWEZSTV9NSUdSQVRFYCBhcmUgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyB0byByZXByb2R1Y2UgdGhpcyBjb25kaXRpb24sIHRoaXMgZml4LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxMToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WEZSTV9VU0VSJiMzNDssCiAgICAmIzM0O1hGUk1fTUlHUkFURSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hmcm1fZG9fbWlncmF0ZV9zdGF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBSQ1UgaXNzdWUgYnkgYWRkaW5nIGByY3VfcmVhZF9sb2NrKClgIGFuZCBgcmN1X3JlYWRfdW5sb2NrKClgIGFyb3VuZCBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIGluIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgWEZSTSBuZXRsaW5rIGludGVyZmFjZS4gVGhlIG1vZGlmaWVkIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYFhGUk1fTVNHX01JR1JBVEVfU1RBVEVgIG5ldGxpbmsgbWVzc2FnZSwgaGFuZGxlZCBieSBgeGZybV9kb19taWdyYXRlX3N0YXRlYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WEZSTV9VU0VSJiMzNDssCiAgICAmIzM0O1hGUk1fTUlHUkFURSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hmcm1fZG9fbWlncmF0ZV9zdGF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBSQ1UgaXNzdWUgYnkgYWRkaW5nIGByY3VfcmVhZF9sb2NrKClgIGFuZCBgcmN1X3JlYWRfdW5sb2NrKClgIGFyb3VuZCBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIGluIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgWEZSTSBuZXRsaW5rIGludGVyZmFjZS4gVGhlIG1vZGlmaWVkIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYFhGUk1fTVNHX01JR1JBVEVfU1RBVEVgIG5ldGxpbmsgbWVzc2FnZSwgaGFuZGxlZCBieSBgeGZybV9kb19taWdyYXRlX3N0YXRlYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDExOjE3OjQwLjc5OTg3OTU2OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMTg2ODYyOTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGUk1fVVNFUlwiLFxuICAgIFwiWEZSTV9NSUdSQVRFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZybV9kb19taWdyYXRlX3N0YXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gUkNVIGlzc3VlIGJ5IGFkZGluZyBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCBhcm91bmQgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBpbiBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFhGUk0gbmV0bGluayBpbnRlcmZhY2UuIFRoZSBtb2RpZmllZCBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBYRlJNX01TR19NSUdSQVRFX1NUQVRFYCBuZXRsaW5rIG1lc3NhZ2UsIGhhbmRsZWQgYnkgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDExOjE3OjQwLjc5OTg4NDUyOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDEyNjUyNDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzkyMDQ2NzMyNDdmMjBjZjI5NzY1MmRhNTFiMGQyOWFkOWJjNGMwZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAzMSAxMToxNzozOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3VzZXIuYyBiL25ldC94ZnJtL3hmcm1fdXNlci5jXFxuaW5kZXggZDZkYjYzMzA0YmE2Yi4uMGJhMDYxNGQ2NTBmMyAxMDA2NDRcXG4tLS0gYS9uZXQveGZybS94ZnJtX3VzZXIuY1xcbisrKyBiL25ldC94ZnJtL3hmcm1fdXNlci5jXFxuQEAgLTMzMzcsNyArMzMzNywxMSBAQCBzdGF0aWMgaW50IHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbiBcXG4tXFx0cmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfTUlHUkFURSk7XFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0ZXJyID0geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9NSUdSQVRFKTtcXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTE6MTc6NDEuMjEzMjMzNjQzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6Nzk3NzM1MDA2MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZSTV9VU0VSXCIsXG4gICAgXCJYRlJNX01JR1JBVEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4ZnJtX2RvX21pZ3JhdGVfc3RhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBSQ1UgaXNzdWUgYnkgYWRkaW5nIGByY3VfcmVhZF9sb2NrKClgIGFuZCBgcmN1X3JlYWRfdW5sb2NrKClgIGFyb3VuZCBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIGluIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgWEZSTSBuZXRsaW5rIGludGVyZmFjZS4gVGhlIG1vZGlmaWVkIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYFhGUk1fTVNHX01JR1JBVEVfU1RBVEVgIG5ldGxpbmsgbWVzc2FnZSwgaGFuZGxlZCBieSBgeGZybV9kb19taWdyYXRlX3N0YXRlYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzkyMDQ2NzMyNDdmMjBjZjI5NzY1MmRhNTFiMGQyOWFkOWJjNGMwZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMxIDExOjE3OjM5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV91c2VyLmMgYi9uZXQveGZybS94ZnJtX3VzZXIuY1xuaW5kZXggZDZkYjYzMzA0YmE2Yi4uMGJhMDYxNGQ2NTBmMyAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1fdXNlci5jXG4rKysgYi9uZXQveGZybS94ZnJtX3VzZXIuY1xuQEAgLTMzMzcsNyArMzMzNywxMSBAQCBzdGF0aWMgaW50IHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbi1cdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX01JR1JBVEUpO1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0ZXJyID0geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9NSUdSQVRFKTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gc3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMToxNzo0MS4yMTMyMzQ5OTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODcwNDQxODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgZm9jdXNpbmcgb24gdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBwYXRjaCwgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipSQ1UgUHJvdGVjdGlvbiBpbiB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZSoqXG5cbkFscmlnaHQsIHNvIHRoZSBwYXRjaCBpcyBpbnRyb2R1Y2luZyBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCBhcm91bmQgdGhlIGNhbGwgdG8gYHhmcm1fbmxtc2dfbXVsdGljYXN0YCB3aXRoaW4gdGhlIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAgZnVuY3Rpb24sIGxvY2F0ZWQgaW4gYG5ldC94ZnJtL3hmcm1fdXNlci5jYC4gVGhpcyBpbW1lZGlhdGVseSBzaWduYWxzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWltZWQgYXQgYWRkcmVzc2luZyBlaXRoZXIgYW4gUkNVLXJlbGF0ZWQgd2FybmluZyBvciwgbW9yZSBjcml0aWNhbGx5LCBhIHBvdGVudGlhbCBidWcgcmVsYXRlZCB0byBpbXByb3BlciBjb25jdXJyZW50IGFjY2Vzcy4gVGhlIGZhY3QgdGhhdCBSQ1UgcHJvdGVjdGlvbiBpcyBiZWluZyBhZGRlZCBpcyB0aGUga2V5IGluZGljYXRvciBoZXJlOyBpdCBzdWdnZXN0cyBhIHN1YnRsZSByYWNlIGNvbmRpdGlvbiBjb3VsZCBleGlzdCB3aGVyZSBkYXRhIGFjY2Vzc2VkIHdpdGhpbiBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIGlzIHN1c2NlcHRpYmxlIHRvIG1vZGlmaWNhdGlvbiB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXBzLCBnaXZlbiB0aGlzIGlzIGEgbmV0d29ya2luZyBhbmQgc2VjdXJpdHkgY29udGV4dCwgYXJlIHRvIGRpdmUgZGVlcGVyLiBGaXJzdCwgSSB3YW50IHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBmbG93LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gZXhhY3RseSBob3cgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCB3b3JrcywgcGFydGljdWxhcmx5IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBgeGZybV9ubG1zZ19tdWx0aWNhc3RgLiBBbmQsIHNwZWNpZmljYWxseSwgSSBtdXN0IGxvb2sgY2xvc2VseSBhdCBob3cgdGhlIGRhdGEgYmVpbmcgc2VudCB2aWEgdGhhdCBtdWx0aWNhc3QgY2hhbm5lbCBpcyBwb3B1bGF0ZWQgYW5kIHVzZWQuIEEgcXVpY2sgaW5zcGVjdGlvbiBvZiBgeGZybV9kb19taWdyYXRlX3N0YXRlYCB3b3VsZCBiZSBhIGdvb2QgY29tcGFuaW9uIHRvIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgZXhlY3V0aW9uIGZsb3cuXG5cblRoZW4sIGJlZm9yZSBJIGdvIGZ1cnRoZXIsIEkgc2hvdWxkIHZlcmlmeSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBVbmRlcnN0YW5kaW5nIHdoaWNoIGNvbmZpZ3VyYXRpb25zIGVuYWJsZSBvciBkaXNhYmxlIHRoZSByZWxldmFudCBYRlJNIGZlYXR1cmVzIGFyZSBpbXBvcnRhbnQgdG8gY29uc2lkZXIgd2hlbiBldmFsdWF0aW5nIHRoZSBpbXBvcnRhbmNlIG9mIHRoaXMgZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTAzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTE6MTc6NDYuMDgzNjc5NDAzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwODY0Njg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fc2VuZF9taWdyYXRlX3N0YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jPTMzMDk9c3RhdGljIHVuc2lnbmVkIGludCB4ZnJtX21pZ3JhdGVfc3RhdGVfbXNnc2l6ZShjb25zdCBzdHJ1Y3QgeGZybV9taWdyYXRlICptLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzMyMS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMzIyOnN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGUoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzMjMtXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlICp1bSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTMzNDc9c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTEwLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM1MTE6XFx0ZXJyID0geGZybV9zZW5kX21pZ3JhdGVfc3RhdGUobmV0LCB1bSwgXFx1MDAyNm0sIHhjLVxcdTAwM2VkaXIsXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzUxMi1cXHRcXHRcXHRcXHQgICAgICBubGgtXFx1MDAzZW5sbXNnX3BpZCwgbmxoLVxcdTAwM2VubG1zZ19zZXEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMToxNzo0Ni4xMzQ1NDk3N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MDk3ODk2MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipLY29uZmlnIERpdmUgZm9yIHhmcm1fdXNlci5jKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgS2NvbmZpZyBhZ2Fpbi4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgc3Vycm91bmRpbmcgYG5ldC94ZnJtL3hmcm1fdXNlci5jYC4gVGhpcyBmaWxlIGlzIGNydWNpYWwgZm9yIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24gd2l0aCB0aGUgWEZSTSBzdWJzeXN0ZW0sIHNvIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIGl0cyBjb25maWd1cmF0aW9uIGlzIGVzc2VudGlhbCBmb3IsIHNheSwgdHJvdWJsZXNob290aW5nIGlzc3VlcyByZWxhdGVkIHRvIHBvbGljeSBtYW5hZ2VtZW50LCBrZXlpbmcsIG9yIG90aGVyIHVzZXItc3BhY2UgY29udHJvbCBwbGFuZSBlbGVtZW50cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0cmlnZ2VycyBpdHMgaW5jbHVzaW9uLCB3aGF0IGZlYXR1cmVzIGl0IHVubG9ja3MsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgcmVsYXRlZCBtb2R1bGVzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOlxuXG4qICAgKipEZXBlbmRlbmNpZXM6KiogV2hhdCBvdGhlciBLY29uZmlnIHN5bWJvbHMgbmVlZCB0byBiZSBlbmFibGVkIGJlZm9yZSBgeGZybV91c2VyLmNgIGV2ZW4gYmVjb21lcyBhIHBvc3NpYmlsaXR5PyBBcmUgdGhlcmUgY29yZSBuZXR3b3JraW5nIHN0YWNrIHByZXJlcXVpc2l0ZXMsIHNlY3VyaXR5IGZlYXR1cmVzLCBvciBvdGhlciBYRlJNIGNvbXBvbmVudHMgdGhhdCBpdCByZWxpZXMgdXBvbj9cbiogICAqKkNvbmZpZ3VyYXRpb24gT3B0aW9uczoqKiBEb2VzIHRoZSBLY29uZmlnIGV4cG9zZSBhbnkgYnVpbGQtdGltZSBwYXJhbWV0ZXJzIHNwZWNpZmljIHRvIGB4ZnJtX3VzZXIuY2A/IEFyZSB0aGVyZSBvcHRpb25zIHRvIGVuYWJsZSBvciBkaXNhYmxlIGNlcnRhaW4gdXNlci1zcGFjZSBmdW5jdGlvbmFsaXRpZXMsIGxpa2Ugc3BlY2lmaWMgcHJvdG9jb2xzIG9yIGNvbnRyb2wgbWVjaGFuaXNtcz8gV2hhdCBncmFudWxhciBrbm9icyBhcmUgYXZhaWxhYmxlLCBpZiBhbnk/XG4qICAgKipJbnRlcmFjdGlvbiB3aXRoIG90aGVyIG1vZHVsZXM6KiogSSdsbCBiZSBtaW5kZnVsIG9mIGNyb3NzLWRlcGVuZGVuY2llcyB0byBjb3JyZWN0bHkgaWRlbnRpZnkgYW55IGNvbmZsaWN0cy5cbiogICAqKkRlZmF1bHRzOioqIEFyZSB0aGVyZSBhbnkgZGVmYXVsdCBzZXR0aW5ncyBmb3IgdGhlIHBhcmFtZXRlcnMgSSdtIGV4YW1pbmluZz8gVGhpcyBhZmZlY3RzIHRoZSBvdXQtb2YtdGhlLWJveCBiZWhhdmlvciBvZiBhIHN5c3RlbS5cblxuRXNzZW50aWFsbHksIEkgd2FudCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IGB4ZnJtX3VzZXIuY2AgZml0cyBpbnRvIHRoZSBidWlsZCBzeXN0ZW0gYW5kIGhvdyBpdHMgYmVoYXZpb3IgY2FuIGJlIGNvbnRyb2xsZWQgdmlhIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg3OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDExOjE3OjUwLjY0NDM0MTY3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NzEwNTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fdXNlclxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS9NYWtlZmlsZT0xOT1vYmotJChDT05GSUdfWEZSTV9BTEdPKSArPSB4ZnJtX2FsZ28ub1xcbm5ldC94ZnJtL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19YRlJNX1VTRVIpICs9IHhmcm1fdXNlci5vXFxubmV0L3hmcm0vTWFrZWZpbGUtMjEtb2JqLSQoQ09ORklHX1hGUk1fVVNFUl9DT01QQVQpICs9IHhmcm1fY29tcGF0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTE6MTc6NTAuNjkwMDU5Mjc3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYxOTIxNzgzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqRXhhbWluaW5nIHRoZSBYRlJNIENvbmZpZ3VyYXRpb24gYW5kIE1pZ3JhdGlvbioqXG5cbkFscmlnaHQsIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gaW4gcGxheSBoZXJlIGlzIGRlZmluaXRlbHkgYFhGUk1fVVNFUmAuIE1ha2VzIHNlbnNlLiBOb3csIHRoZSBuZXh0IHF1ZXN0aW9uIGlzLCBhcmUgdGhlcmUgKmFueSogb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgSSBzaG91bGQgYmUgY29uc2lkZXJpbmcgaW4gdGhpcyBjb250ZXh0PyBBbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaC5cblxuTGV0J3MgZGlnIGEgYml0IGRlZXBlciBpbnRvIHRoZSBtaWdyYXRpb24gYXNwZWN0LiBJJ20gZ29pbmcgdG8gdHJhY2sgZG93biB0aGUgY2FsbGVycyBvZiBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgLiBVbmRlcnN0YW5kaW5nIHdoYXQgY2FsbHMgdGhhdCBmdW5jdGlvbiB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIHN0YXRlIG1pZ3JhdGlvbiBpcyBhY3R1YWxseSB1c2VkLiBUaGF0J2xsIHByb2JhYmx5IHByb3ZpZGUgc29tZSBrZXkgaW5zaWdodHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNzksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMToxNzo1NC4zMDkyODA1OTJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5MTg5MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9zZW5kX21pZ3JhdGVfc3RhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmM9MzMwOT1zdGF0aWMgdW5zaWduZWQgaW50IHhmcm1fbWlncmF0ZV9zdGF0ZV9tc2dzaXplKGNvbnN0IHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm0sXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzIxLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMzMjI6c3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzMyMy1cXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgeGZybV91c2VyX21pZ3JhdGVfc3RhdGUgKnVtLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MzM0Nz1zdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MTAtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzUxMTpcXHRlcnIgPSB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShuZXQsIHVtLCBcXHUwMDI2bSwgeGMtXFx1MDAzZWRpcixcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTEyLVxcdFxcdFxcdFxcdCAgICAgIG5saC1cXHUwMDNlbmxtc2dfcGlkLCBubGgtXFx1MDAzZW5sbXNnX3NlcSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDExOjE3OjU0LjM1NjIwMzc5OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NzcwNjE3NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgeGZybWAgTWlncmF0aW9uIExvZ2ljKipcblxuT2theSwgc28gYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQga2lja3Mgb2ZmIHRoZSBzdGF0ZSBtaWdyYXRpb24gcHJvY2Vzcy4gTmF0dXJhbGx5LCB0aGUgbmV4dCBzdGVwLCBhcyBpbmRpY2F0ZWQgYnkgdGhlIGNvZGUsIGlzIHRoZSBjYWxsIHRvIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoYXQgY29uZGl0aW9ucyB0cmlnZ2VyIHRoaXMgbWlncmF0aW9uIGluIHRoZSBmaXJzdCBwbGFjZT9cIi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGJlaGluZCB0aGlzIHNlcXVlbmNlLlxuXG5UaGUgZmlyc3QgdGhpbmcgSSdtIGdvaW5nIHRvIGNoZWNrIGlzIGlmIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIEkgd2FudCB0byBzZWUgaWYgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGdhdGVkIGJlaGluZCBhbnkgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMsIGFueSBgI2lmZGVmYCBibG9ja3MuIEFyZSB0aGVyZSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMsIGZlYXR1cmVzLCBvciBhcmNoaXRlY3R1cmFsIGNvbnN0cmFpbnRzIHRoYXQgZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBtaWdyYXRpb24gcGF0aCBpcyBldmVuIGF2YWlsYWJsZT8gS25vd2luZyBpZiB0aGlzIGlzIHNlbGVjdGl2ZWx5IGVuYWJsZWQgb3IgZGlzYWJsZWQgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIGhvdyB0aGVzZSByb3V0aW5lcyBhcmUgaW5jb3Jwb3JhdGVkIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLiBBcmUgd2UgZGVhbGluZyB3aXRoIGEgY29tcGlsZS10aW1lIG9wdGlvbiBvciBhIHJ1bnRpbWUgZGVjaXNpb24gaGVyZT8gVGhhdCdzIHRoZSBxdWVzdGlvbiBJIG5lZWQgdG8gYW5zd2VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODc5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTE6MTc6NTcuODMzMjY4NDA1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzU3ODE1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2RvX21pZ3JhdGVfc3RhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmM9MzMyMj1zdGF0aWMgaW50IHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzNDYtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzM0NzpzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzQ4LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MjgtI2Vsc2VcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNTI5OnN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MzAtXFx0XFx0XFx0XFx0IHN0cnVjdCBubGF0dHIgKiphdHRycywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9Mzc0ND1zdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbGluayB7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzgxLVxcdFtYRlJNX01TR19HRVRERUZBVUxUICAtIFhGUk1fTVNHX0JBU0VdID0geyAuZG9pdCA9IHhmcm1fZ2V0X2RlZmF1bHQgICB9LFxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM3ODI6XFx0W1hGUk1fTVNHX01JR1JBVEVfU1RBVEUgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUgfSxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNzgzLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDExOjE3OjU3Ljg4MDg1Mjk5MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTM1MTgxMzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZDpcblxuKipEaXZpbmcgaW50byBgeGZybV9kb19taWdyYXRlX3N0YXRlYCdzIENvbmRpdGlvbmFsIExvZ2ljKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGFuZCBteSBleWUgaW1tZWRpYXRlbHkgbGFuZHMgb24gYW4gYCNlbHNlYCBibG9jay4gSW50ZXJlc3RpbmcuIFRoZXNlIHRoaW5ncyB1c3VhbGx5IGV4aXN0IGZvciBhIHJlYXNvbiwgcmlnaHQ/IEl0J3MgYWxtb3N0IGFsd2F5cyBhIHNpZ24gdGhhdCB0aGVyZSdzIHNvbWUgY29uZGl0aW9uYWwgYmVoYXZpb3IgSSBuZWVkIHRvIHVuZGVyc3RhbmQsIHNvbWUgZGlmZmVyZW50IGV4ZWN1dGlvbiBwYXRoIGRlcGVuZGluZyBvbiBhIHNwZWNpZmljIGNpcmN1bXN0YW5jZS4gIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIHdoYXQncyB0aGUgY29uZGl0aW9uPyBXaGF0J3MgdGhlIGAjaWZkZWZgIHRoYXQgZ292ZXJucyB0aGlzIHNwZWNpZmljIGJyYW5jaD9cIiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHByZXByb2Nlc3NvciBtYWNybyBjb250cm9scyB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgcGFydGljdWxhciBjb2RlIHBhdGguIEtub3dpbmcgdGhlIGNvbmRpdGlvbiBpcyAqZXNzZW50aWFsKiB0byBncmFzcGluZyB0aGUgb3ZlcmFsbCBiZWhhdmlvciBhbmQgcHVycG9zZSBvZiB0aGlzIGZ1bmN0aW9uIGluIHZhcmlvdXMgY29uZmlndXJhdGlvbnMuIExldCdzIHNlZS4uLiBJJ2xsIHRyYWNlIGJhY2sgYW5kIGZpbmQgdGhhdCBgI2lmZGVmYCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1OTYsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMToxODowMS4wMTYwMzcwNjlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAwMDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzNDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMzQwOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4zMzQxOlxcdFxcdGVyciA9IHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfTUlHUkFURSk7XFxuMzM0MjpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4zMzQzOlxcdFxcbjMzNDQ6XFx0XFx0cmV0dXJuIGVycjtcXG4zMzQ1OlxcdH1cXG4zMzQ2OlxcdFxcbjMzNDc6XFx0c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuMzM0ODpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuMzM0OTpcXHR7XFxuMzM1MDpcXHRcXHRzdHJ1Y3QgeGZybV91c2VyX21pZ3JhdGVfc3RhdGUgKnVtID0gbmxtc2dfZGF0YShubGgpO1xcbjMzNTE6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVxcdTAwM2Vzayk7XFxuMzM1MjpcXHRcXHRzdHJ1Y3QgeGZybV91c2VyX29mZmxvYWQgeHVvID0ge307XFxuMzM1MzpcXHRcXHRzdHJ1Y3QgeGZybV9taWdyYXRlIG0gPSB7fTtcXG4zMzU0OlxcdFxcdHN0cnVjdCB4ZnJtX3N0YXRlICp4YztcXG4zMzU1OlxcdFxcdHN0cnVjdCB4ZnJtX3N0YXRlICp4O1xcbjMzNTY6XFx0XFx0aW50IGVycjtcXG4zMzU3OlxcdFxcbjMzNTg6XFx0XFx0aWYgKCF1bS1cXHUwMDNlaWQuc3BpKSB7XFxuMzM1OTpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJJbnZhbGlkIFNQSSAweDBcXFwiKTtcXG4zMzYwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjMzNjE6XFx0XFx0fVxcbjMzNjI6XFx0XFxuMzM2MzpcXHRcXHRpZiAodW0tXFx1MDAzZXJlc2VydmVkKSB7XFxuMzM2NDpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJSZXNlcnZlZCBmaWVsZCBtdXN0IGJlIHplcm9cXFwiKTtcXG4zMzY1OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjMzNjY6XFx0XFx0fVxcbjMzNjc6XFx0XFxuMzM2ODpcXHRcXHRpZiAodW0tXFx1MDAzZWZsYWdzIFxcdTAwMjYgflhGUk1fTUlHUkFURV9TVEFURV9LTk9XTl9GTEFHUykge1xcbjMzNjk6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjaywgXFxcIlVua25vd24gZmxhZ3M6IDB4JXhcXFwiLFxcbjMzNzA6XFx0XFx0XFx0XFx0XFx0ICAgdW0tXFx1MDAzZWZsYWdzIFxcdTAwMjYgflhGUk1fTUlHUkFURV9TVEFURV9LTk9XTl9GTEFHUyk7XFxuMzM3MTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zMzcyOlxcdFxcdH1cXG4zMzczOlxcdFxcbjMzNzQ6XFx0XFx0ZXJyID0gdmVyaWZ5X3hmcm1fZmFtaWx5KHVtLVxcdTAwM2VuZXdfZmFtaWx5LCBleHRhY2spO1xcbjMzNzU6XFx0XFx0aWYgKGVycilcXG4zMzc2OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMzM3NzpcXHRcXG4zMzc4OlxcdFxcdGlmICghKHVtLVxcdTAwM2VmbGFncyBcXHUwMDI2IFhGUk1fTUlHUkFURV9TVEFURV9VUERBVEVfSDJIX1NFTCkpIHtcXG4zMzc5OlxcdFxcdFxcdGVyciA9IHZlcmlmeV9zZWxlY3Rvcl9wcmVmaXhsZW4odW0tXFx1MDAzZW5ld19zZWwuZmFtaWx5LFxcbjMzODA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNnVtLVxcdTAwM2VuZXdfc2VsLCBleHRhY2spO1xcbjMzODE6XFx0XFx0XFx0aWYgKGVycilcXG4zMzgyOlxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuMzM4MzpcXHRcXHR9XFxuMzM4NDpcXHRcXG4zMzg1OlxcdFxcdGNvcHlfZnJvbV91c2VyX21pZ3JhdGVfc3RhdGUoXFx1MDAyNm0sIHVtKTtcXG4zMzg2OlxcdFxcbjMzODc6XFx0XFx0eCA9IHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgbS5vbGRfbWFyay52IFxcdTAwMjYgbS5vbGRfbWFyay5tLFxcbjMzODg6XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnVtLVxcdTAwM2VpZC5kYWRkciwgdW0tXFx1MDAzZWlkLnNwaSxcXG4zMzg5OlxcdFxcdFxcdFxcdCAgICAgIHVtLVxcdTAwM2VpZC5wcm90bywgdW0tXFx1MDAzZWlkLmZhbWlseSk7XFxuMzM5MDpcXHRcXHRpZiAoIXgpIHtcXG4zMzkxOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkNhbiBub3QgZmluZCBzdGF0ZVxcXCIpO1xcbjMzOTI6XFx0XFx0XFx0cmV0dXJuIC1FU1JDSDtcXG4zMzkzOlxcdFxcdH1cXG4zMzk0OlxcdFxcbjMzOTU6XFx0XFx0aWYgKHVtLVxcdTAwM2VmbGFncyBcXHUwMDI2IFhGUk1fTUlHUkFURV9TVEFURV9VUERBVEVfSDJIX1NFTCkge1xcbjMzOTY6XFx0XFx0XFx0dTggcHJlZml4bGVuID0gKHgtXFx1MDAzZXByb3BzLmZhbWlseSA9PSBBRl9JTkVUNikgPyAxMjggOiAzMjtcXG4zMzk3OlxcdFxcbjMzOTg6XFx0XFx0XFx0aWYgKHgtXFx1MDAzZXNlbC5wcmVmaXhsZW5fcyAhPSB4LVxcdTAwM2VzZWwucHJlZml4bGVuX2QgfHxcXG4zMzk5OlxcdFxcdFxcdCAgICB4LVxcdTAwM2VzZWwucHJlZml4bGVuX2QgIT0gcHJlZml4bGVuIHx8XFxuMzQwMDpcXHRcXHRcXHQgICAgIXhmcm1fYWRkcl9lcXVhbChcXHUwMDI2eC1cXHUwMDNlc2VsLmRhZGRyLCBcXHUwMDI2eC1cXHUwMDNlaWQuZGFkZHIsIHgtXFx1MDAzZXByb3BzLmZhbWlseSkgfHxcXG4zNDAxOlxcdFxcdFxcdCAgICAheGZybV9hZGRyX2VxdWFsKFxcdTAwMjZ4LVxcdTAwM2VzZWwuc2FkZHIsIFxcdTAwMjZ4LVxcdTAwM2Vwcm9wcy5zYWRkciwgeC1cXHUwMDNlcHJvcHMuZmFtaWx5KSkge1xcbjM0MDI6XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbjM0MDM6XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJTQSBzZWxlY3RvciBpcyBub3QgYSBzaW5nbGUtaG9zdCBtYXRjaCBmb3IgU0EgYWRkcmVzc2VzXFxcIik7XFxuMzQwNDpcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjM0MDU6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMzQwNjpcXHRcXHRcXHR9XFxuMzQwNzpcXHRcXHR9XFxuMzQwODpcXHRcXG4zNDA5OlxcdFxcdGlmIChhdHRyc1tYRlJNQV9FTkNBUF0pIHtcXG4zNDEwOlxcdFxcdFxcdG0uZW5jYXAgPSBubGFfZGF0YShhdHRyc1tYRlJNQV9FTkNBUF0pO1xcbjM0MTE6XFx0XFx0XFx0aWYgKG0uZW5jYXAtXFx1MDAzZWVuY2FwX3R5cGUgPT0gMCkge1xcbjM0MTI6XFx0XFx0XFx0XFx0bS5lbmNhcCA9IE5VTEw7IC8qIHNlbnRpbmVsOiByZW1vdmUgZW5jYXAgKi9cXG4zNDEzOlxcdFxcdFxcdH0gZWxzZSBpZiAobS5lbmNhcC1cXHUwMDNlZW5jYXBfdHlwZSAhPSBVRFBfRU5DQVBfRVNQSU5VRFApIHtcXG4zNDE0OlxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIlVuc3VwcG9ydGVkIGVuY2Fwc3VsYXRpb24gdHlwZVxcXCIpO1xcbjM0MTU6XFx0XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4zNDE2OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjM0MTc6XFx0XFx0XFx0fVxcbjM0MTg6XFx0XFx0fSBlbHNlIHtcXG4zNDE5OlxcdFxcdFxcdG0uZW5jYXAgPSB4LVxcdTAwM2VlbmNhcDsgLyogb21pdC10by1pbmhlcml0ICovXFxuMzQyMDpcXHRcXHR9XFxuMzQyMTpcXHRcXG4zNDIyOlxcdFxcdGlmIChhdHRyc1tYRlJNQV9NVElNRVJfVEhSRVNIXSkge1xcbjM0MjM6XFx0XFx0XFx0ZXJyID0gdmVyaWZ5X210aW1lcl90aHJlc2goISFtLmVuY2FwLCB4LVxcdTAwM2VkaXIsIGV4dGFjayk7XFxuMzQyNDpcXHRcXHRcXHRpZiAoZXJyKVxcbjM0MjU6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMzQyNjpcXHRcXHR9XFxuMzQyNzpcXHRcXG4zNDI4OlxcdFxcdGlmIChubGFfZ2V0X3UzMl9kZWZhdWx0KGF0dHJzW1hGUk1BX05BVF9LRUVQQUxJVkVfSU5URVJWQUxdLCAwKSBcXHUwMDI2XFx1MDAyNiAhbS5lbmNhcCkge1xcbjM0Mjk6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbjM0MzA6XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJOQVRfS0VFUEFMSVZFX0lOVEVSVkFMIHJlcXVpcmVzIGVuY2Fwc3VsYXRpb25cXFwiKTtcXG4zNDMxOlxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMzQzMjpcXHRcXHRcXHRnb3RvIG91dDtcXG4zNDMzOlxcdFxcdH1cXG4zNDM0OlxcdFxcbjM0MzU6XFx0XFx0aWYgKGF0dHJzW1hGUk1BX09GRkxPQURfREVWXSkge1xcbjM0MzY6XFx0XFx0XFx0bS54dW8gPSBubGFfZGF0YShhdHRyc1tYRlJNQV9PRkZMT0FEX0RFVl0pO1xcbjM0Mzc6XFx0XFx0fSBlbHNlIHtcXG4zNDM4OlxcdFxcdFxcdGJvb2wgaW5oZXJpdF9vZmZsb2FkID0gISh1bS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBYRlJNX01JR1JBVEVfU1RBVEVfQ0xFQVJfT0ZGTE9BRCk7XFxuMzQzOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTE6MTg6MDEuMDE2MjM4OTY5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MDM2MjA2NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIGFjY291bnQ6XG5cbioqUmV2ZXJzZSBFbmdpbmVlcmluZyB0aGUgUHJlcHJvY2Vzc29yIERpcmVjdGl2ZSoqXG5cbkFscmlnaHQsIHNvIHRoZSBnYW1lIHBsYW4gaXMgY2xlYXI6IHBpbnBvaW50aW5nIHRoYXQgYCNpZmRlZmAgcXVpY2tseSBpcyB0aGUgcHJpb3JpdHkuIEluc3RlYWQgb2Ygc2xvZ2dpbmcgdGhyb3VnaCB0aGUgY29kZSBsaW5lIGJ5IGxpbmUsIEknbSB0aGlua2luZyBhIGJhY2t3YXJkIHNjYW4gaXMgdGhlIG1vc3QgZWZmaWNpZW50IGFwcHJvYWNoLiBKdW1waW5nIHN0cmFpZ2h0IHRvIHRoZSBgI2lmZGVmYCBpdHNlbGYgZmVlbHMgbGlrZSB0aGUgZmFzdGVzdCB3YXkgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBjb250ZXh0LiBJJ2xsIG1lbnRhbGx5IG1hcCBvdXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYWZ0ZXIgSSBsb2NhdGUgaXQgdG8gY2hlY2sgZm9yIGFueSBjcml0aWNhbCBsb2dpYy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgbW9zdCBjb250ZXh0IGZhc3Rlc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NjcsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDExOjE4OjA0LjQxOTg2MjA5N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTI1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0veGZybV91c2VyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzI0MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMyNDA6XFx0XFxuMzI0MTpcXHRzdGF0aWMgaW50IGJ1aWxkX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4zMjQyOlxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgeGZybV91c2VyX21pZ3JhdGVfc3RhdGUgKnVtLFxcbjMyNDM6XFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm0sXFxuMzI0NDpcXHRcXHRcXHRcXHQgICAgICAgdTggZGlyLCB1MzIgcG9ydGlkLCB1MzIgc2VxKVxcbjMyNDU6XFx0e1xcbjMyNDY6XFx0XFx0aW50IGVycjtcXG4zMjQ3OlxcdFxcdHN0cnVjdCBubG1zZ2hkciAqbmxoO1xcbjMyNDg6XFx0XFx0c3RydWN0IHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlICpoZHI7XFxuMzI0OTpcXHRcXG4zMjUwOlxcdFxcdG5saCA9IG5sbXNnX3B1dChza2IsIHBvcnRpZCwgc2VxLCBYRlJNX01TR19NSUdSQVRFX1NUQVRFLFxcbjMyNTE6XFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCB4ZnJtX3VzZXJfbWlncmF0ZV9zdGF0ZSksIDApO1xcbjMyNTI6XFx0XFx0aWYgKCFubGgpXFxuMzI1MzpcXHRcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbjMyNTQ6XFx0XFxuMzI1NTpcXHRcXHRoZHIgPSBubG1zZ19kYXRhKG5saCk7XFxuMzI1NjpcXHRcXHQqaGRyID0gKnVtO1xcbjMyNTc6XFx0XFx0aGRyLVxcdTAwM2VuZXdfc2VsID0gKm0tXFx1MDAzZW5ld19zZWw7XFxuMzI1ODpcXHRcXG4zMjU5OlxcdFxcdGlmIChtLVxcdTAwM2VlbmNhcCkge1xcbjMyNjA6XFx0XFx0XFx0ZXJyID0gbmxhX3B1dChza2IsIFhGUk1BX0VOQ0FQLCBzaXplb2YoKm0tXFx1MDAzZWVuY2FwKSwgbS1cXHUwMDNlZW5jYXApO1xcbjMyNjE6XFx0XFx0XFx0aWYgKGVycilcXG4zMjYyOlxcdFxcdFxcdFxcdGdvdG8gb3V0X2NhbmNlbDtcXG4zMjYzOlxcdFxcdH1cXG4zMjY0OlxcdFxcbjMyNjU6XFx0XFx0aWYgKG0tXFx1MDAzZXh1bykge1xcbjMyNjY6XFx0XFx0XFx0ZXJyID0gbmxhX3B1dChza2IsIFhGUk1BX09GRkxPQURfREVWLCBzaXplb2YoKm0tXFx1MDAzZXh1byksIG0tXFx1MDAzZXh1byk7XFxuMzI2NzpcXHRcXHRcXHRpZiAoZXJyKVxcbjMyNjg6XFx0XFx0XFx0XFx0Z290byBvdXRfY2FuY2VsO1xcbjMyNjk6XFx0XFx0fVxcbjMyNzA6XFx0XFxuMzI3MTpcXHRcXHRpZiAobS1cXHUwMDNlbmV3X21hcmspIHtcXG4zMjcyOlxcdFxcdFxcdGVyciA9IG5sYV9wdXQoc2tiLCBYRlJNQV9NQVJLLCBzaXplb2YoKm0tXFx1MDAzZW5ld19tYXJrKSxcXG4zMjczOlxcdFxcdFxcdFxcdCAgICAgIG0tXFx1MDAzZW5ld19tYXJrKTtcXG4zMjc0OlxcdFxcdFxcdGlmIChlcnIpXFxuMzI3NTpcXHRcXHRcXHRcXHRnb3RvIG91dF9jYW5jZWw7XFxuMzI3NjpcXHRcXHR9XFxuMzI3NzpcXHRcXG4zMjc4OlxcdFxcdGVyciA9IHhmcm1fc21hcmtfcHV0KHNrYiwgXFx1MDAyNm0tXFx1MDAzZXNtYXJrKTtcXG4zMjc5OlxcdFxcdGlmIChlcnIpXFxuMzI4MDpcXHRcXHRcXHRnb3RvIG91dF9jYW5jZWw7XFxuMzI4MTpcXHRcXG4zMjgyOlxcdFxcdGlmIChtLVxcdTAwM2VtYXBwaW5nX21heGFnZSkge1xcbjMyODM6XFx0XFx0XFx0ZXJyID0gbmxhX3B1dF91MzIoc2tiLCBYRlJNQV9NVElNRVJfVEhSRVNILCBtLVxcdTAwM2VtYXBwaW5nX21heGFnZSk7XFxuMzI4NDpcXHRcXHRcXHRpZiAoZXJyKVxcbjMyODU6XFx0XFx0XFx0XFx0Z290byBvdXRfY2FuY2VsO1xcbjMyODY6XFx0XFx0fVxcbjMyODc6XFx0XFxuMzI4ODpcXHRcXHRpZiAobS1cXHUwMDNlbmF0X2tlZXBhbGl2ZV9pbnRlcnZhbCkge1xcbjMyODk6XFx0XFx0XFx0ZXJyID0gbmxhX3B1dF91MzIoc2tiLCBYRlJNQV9OQVRfS0VFUEFMSVZFX0lOVEVSVkFMLFxcbjMyOTA6XFx0XFx0XFx0XFx0XFx0ICBtLVxcdTAwM2VuYXRfa2VlcGFsaXZlX2ludGVydmFsKTtcXG4zMjkxOlxcdFxcdFxcdGlmIChlcnIpXFxuMzI5MjpcXHRcXHRcXHRcXHRnb3RvIG91dF9jYW5jZWw7XFxuMzI5MzpcXHRcXHR9XFxuMzI5NDpcXHRcXG4zMjk1OlxcdFxcdGlmIChkaXIpIHtcXG4zMjk2OlxcdFxcdFxcdGVyciA9IG5sYV9wdXRfdTgoc2tiLCBYRlJNQV9TQV9ESVIsIGRpcik7XFxuMzI5NzpcXHRcXHRcXHRpZiAoZXJyKVxcbjMyOTg6XFx0XFx0XFx0XFx0Z290byBvdXRfY2FuY2VsO1xcbjMyOTk6XFx0XFx0fVxcbjMzMDA6XFx0XFxuMzMwMTpcXHRcXHRubG1zZ19lbmQoc2tiLCBubGgpO1xcbjMzMDI6XFx0XFx0cmV0dXJuIDA7XFxuMzMwMzpcXHRcXG4zMzA0OlxcdG91dF9jYW5jZWw6XFxuMzMwNTpcXHRcXHRubG1zZ19jYW5jZWwoc2tiLCBubGgpO1xcbjMzMDY6XFx0XFx0cmV0dXJuIGVycjtcXG4zMzA3OlxcdH1cXG4zMzA4OlxcdFxcbjMzMDk6XFx0c3RhdGljIHVuc2lnbmVkIGludCB4ZnJtX21pZ3JhdGVfc3RhdGVfbXNnc2l6ZShjb25zdCBzdHJ1Y3QgeGZybV9taWdyYXRlICptLFxcbjMzMTA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHU4IGRpcilcXG4zMzExOlxcdHtcXG4zMzEyOlxcdFxcdHJldHVybiBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlKSkgK1xcbjMzMTM6XFx0XFx0XFx0KG0tXFx1MDAzZWVuY2FwID8gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB4ZnJtX2VuY2FwX3RtcGwpKSA6IDApICtcXG4zMzE0OlxcdFxcdFxcdChtLVxcdTAwM2V4dW8gPyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHhmcm1fdXNlcl9vZmZsb2FkKSkgOiAwKSArXFxuMzMxNTpcXHRcXHRcXHQobS1cXHUwMDNlbmV3X21hcmsgPyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHhmcm1fbWFyaykpIDogMCkgK1xcbjMzMTY6XFx0XFx0XFx0KChtLVxcdTAwM2VzbWFyay52IHwgbS1cXHUwMDNlc21hcmsubSkgPyBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgKiAyIDogMCkgK1xcbjMzMTc6XFx0XFx0XFx0KG0tXFx1MDAzZW1hcHBpbmdfbWF4YWdlID8gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpIDogMCkgK1xcbjMzMTg6XFx0XFx0XFx0KG0tXFx1MDAzZW5hdF9rZWVwYWxpdmVfaW50ZXJ2YWwgPyBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgOiAwKSArXFxuMzMxOTpcXHRcXHRcXHQoZGlyID8gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU4KSkgOiAwKTsgLyogWEZSTUFfU0FfRElSICovXFxuMzMyMDpcXHR9XFxuMzMyMTpcXHRcXG4zMzIyOlxcdHN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGUoc3RydWN0IG5ldCAqbmV0LFxcbjMzMjM6XFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHhmcm1fdXNlcl9taWdyYXRlX3N0YXRlICp1bSxcXG4zMzI0OlxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm0sXFxuMzMyNTpcXHRcXHRcXHRcXHRcXHQgICB1OCBkaXIsIHUzMiBwb3J0aWQsIHUzMiBzZXEpXFxuMzMyNjpcXHR7XFxuMzMyNzpcXHRcXHRpbnQgZXJyO1xcbjMzMjg6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4zMzI5OlxcdFxcbjMzMzA6XFx0XFx0c2tiID0gbmxtc2dfbmV3KHhmcm1fbWlncmF0ZV9zdGF0ZV9tc2dzaXplKG0sIGRpciksIEdGUF9BVE9NSUMpO1xcbjMzMzE6XFx0XFx0aWYgKCFza2IpXFxuMzMzMjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4zMzMzOlxcdFxcbjMzMzQ6XFx0XFx0ZXJyID0gYnVpbGRfbWlncmF0ZV9zdGF0ZShza2IsIHVtLCBtLCBkaXIsIHBvcnRpZCwgc2VxKTtcXG4zMzM1OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuMzMzNjpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4zMzM3OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMzMzODpcXHRcXHR9XFxuMzMzOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTE6MTg6MDQuNDIwMDU2MDI3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMzM4NDczMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGVidWdnaW5nIGEgS2VybmVsIHhmcm0gTWlncmF0aW9uIElzc3VlKipcblxuT2theSwgc28gYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCBpcyBhdCBsaW5lIDMzMjIuIFRoYXQncyB3aGVyZSB0aGUgcHJvYmxlbSAqc2hvdWxkKiBiZSwgYnV0IEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgaXQncyBldmVuIGJlaW5nIGV4ZWN1dGVkLCBvciBpZiBpdCdzIGRlcGVuZGVudCBvbiBhIGNvbXBpbGF0aW9uIGZsYWcuIExldCdzIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhpcyBzZWN0aW9uIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIEknbGwgc2VhcmNoIGZvciBgI2lmZGVmIENPTkZJR19YRlJNX01JR1JBVEVgLCBvciBhbnkgc2ltaWxhciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyByZWxhdGVkIHRvIG1pZ3JhdGlvbiwgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gR290dGEgcnVsZSBvdXQgdGhhdCBpdCdzIGEgY29tcGxldGVseSBkaXNhYmxlZCBmZWF0dXJlLCBiZWZvcmUgSSBzdGFydCB0cmFjaW5nIHRocm91Z2ggdGhlIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzgzLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMToxODowNy41NTM5MDU3NDJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MjIyMzIwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZmRlZiBDT05GSUdfWEZSTV9NSUdSQVRFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jPTEyMDQ9c3RhdGljIHZvaWQgeHNvX3RvX3h1b19pZmluZGV4KGNvbnN0IHN0cnVjdCB4ZnJtX2Rldl9vZmZsb2FkICp4c28sIGludCBpZmluZGV4LFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMTIxMy1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoxMjE0OiNpZmRlZiBDT05GSUdfWEZSTV9NSUdSQVRFXFxubmV0L3hmcm0veGZybV91c2VyLmMtMTIxNS1zdGF0aWMgdm9pZCB4c29fdG9feHVvKGNvbnN0IHN0cnVjdCB4ZnJtX2Rldl9vZmZsb2FkICp4c28sXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zMDQyPXN0YXRpYyBpbnQgeGZybV9hZGRfYWNxdWlyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMxMTYtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzExNzojaWZkZWYgQ09ORklHX1hGUk1fTUlHUkFURVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMxMTgtc3RhdGljIHZvaWQgY29weV9mcm9tX3VzZXJfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgeGZybV9taWdyYXRlICptYSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM1MzY9c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTQyLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM1NDM6I2lmZGVmIENPTkZJR19YRlJNX01JR1JBVEVcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTQ0LXN0YXRpYyBpbnQgY29weV90b191c2VyX21pZ3JhdGUoY29uc3Qgc3RydWN0IHhmcm1fbWlncmF0ZSAqbSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTE6MTg6MDcuODM2MTMzNTU1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMDQzODgyNzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi4gU28sIEknbSBwcmV0dHkgc3VyZSBgQ09ORklHX1hGUk1fTUlHUkFURWAgaXMgdGhlIGtleSBjb25maWcgb3B0aW9uIHdlJ3JlIGludGVyZXN0ZWQgaW4gZm9yIHRoaXMgbWlncmF0aW9uIHN0dWZmLiAqV2FpdCBhIHNlY29uZCosIGlzbid0IGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAgb25seSBjb21waWxlZCBpbiBpZiB0aGF0IG9wdGlvbiBpcyBlbmFibGVkPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQuIExldCdzIGdldCByaWdodCBpbnRvIHRoZSBjb2RlLiBJIHJlYWxseSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgIGlzIGFjdHVhbGx5IGd1YXJkZWQgYnkgYW4gYCNpZmRlZiBDT05GSUdfWEZSTV9NSUdSQVRFYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLCBiZWNhdXNlIGlmIG5vdCwgaXQgdGhyb3dzIGEgd3JlbmNoIGludG8gdGhlIHdob2xlIHByb2Nlc3MuIEkgaGF2ZSB0byBjb25maXJtIGhvdyB0aGF0IGNvZGUgaXMgZ29pbmcgdG8gYnVpbGQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwNDgsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMToxODoxOC44ODAwMTg3NTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjA3NjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlmZGVmIENPTkZJR19YRlJNX01JR1JBVEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV91c2VyLmM9MTIwND1zdGF0aWMgdm9pZCB4c29fdG9feHVvX2lmaW5kZXgoY29uc3Qgc3RydWN0IHhmcm1fZGV2X29mZmxvYWQgKnhzbywgaW50IGlmaW5kZXgsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMjEzLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjEyMTQ6I2lmZGVmIENPTkZJR19YRlJNX01JR1JBVEVcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMjE1LXN0YXRpYyB2b2lkIHhzb190b194dW8oY29uc3Qgc3RydWN0IHhmcm1fZGV2X29mZmxvYWQgKnhzbyxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTMwNDI9c3RhdGljIGludCB4ZnJtX2FkZF9hY3F1aXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzExNi1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMTE3OiNpZmRlZiBDT05GSUdfWEZSTV9NSUdSQVRFXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzExOC1zdGF0aWMgdm9pZCBjb3B5X2Zyb21fdXNlcl9taWdyYXRlX3N0YXRlKHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm1hLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MzUzNj1zdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1NDItXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzU0MzojaWZkZWYgQ09ORklHX1hGUk1fTUlHUkFURVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1NDQtc3RhdGljIGludCBjb3B5X3RvX3VzZXJfbWlncmF0ZShjb25zdCBzdHJ1Y3QgeGZybV9taWdyYXRlICptLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMToxODoxOC45MjkyMzQ2ODhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc5Mzg4NDc5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyBCbG9jayBUZXJtaW5hdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4gTXkgbWVudGFsIG1vZGVsIGlzIHRlbGxpbmcgbWUgdGhhdCB3ZSBhcmUgbG9va2luZyBmb3IgdGhlIGVuZCBvZiBhIGJsb2NrIG9mIGRhdGEsIHNwZWNpZmljYWxseSBzdGFydGluZyBhcm91bmQgYWRkcmVzcyAzMTE3LiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBvZiBjb3Vyc2UsIHdoYXQncyB0aGUgYmxvY2sncyAqdGVybWluYXRvcio/IElzIGl0IGEgZml4ZWQtbGVuZ3RoIHN0cnVjdHVyZT8gRG8gd2UgaGF2ZSBhIHNlbnRpbmVsIHZhbHVlLCBhbiBlbmQtb2YtYmxvY2sgbWFya2VyIHBlcmhhcHM/IE9yIGFyZSB3ZSByZWx5aW5nIG9uIHNvbWUgb3RoZXIsIG1vcmUgaW1wbGljaXQgbWV0aG9kIHRvIGRldGVybWluZSB0aGUgYm91bmRhcnk/XG5cbk15IGV4cGVydGlzZSBraWNrcyBpbiBhbmQgSSBoYXZlIHRvIGFzc2VzcyBhbGwgcG9zc2liaWxpdGllczogSXMgdGhlcmUgYSBjaGVja3N1bSBJIG5lZWQgdG8gY2FsY3VsYXRlIG9yIHZhbGlkYXRlIHRoYXQgY291bGQgc2lnbmFsIHRoZSBlbmQ/IERvIEkgaGF2ZSB0byBwYXJzZSBzb21lIGhlYWRlciBpbmZvcm1hdGlvbiB0byBpbmZlciB0aGUgbGVuZ3RoPyBJcyBpdCBpbXBsaWNpdGx5IGRlZmluZWQgYnkgdGhlIHN0cnVjdHVyZSBvZiB0aGUgZW5jbG9zaW5nIGRhdGEgZm9ybWF0PyBDb3VsZCB0aGVyZSBiZSBhbiBlcnJvciBjb25kaXRpb24gdGhhdCBzaWduYWxzIHRoZSB0ZXJtaW5hdGlvbiwgc29tZXRoaW5nIGxpa2UgYSBcInBhZGRpbmdcIiBhcHByb2FjaCB3aXRoIGEgc3BlY2lmaWMgcGF0dGVybiBhdCB0aGUgZW5kP1xuXG5JJ20gZXNzZW50aWFsbHkgd29ya2luZyB0aHJvdWdoIG15IG1lbnRhbCBjaGVja2xpc3Qgb2YgY29tbW9uIGRhdGEgYmxvY2sgZGVsaW5lYXRpb24gdGVjaG5pcXVlcywgdHJ5aW5nIHRvIHF1aWNrbHkgcGlucG9pbnQgdGhlIGFwcHJvcHJpYXRlIG1ldGhvZCBmb3IgdGhpcyBzcGVjaWZpYyBjYXNlLiBJIGtub3cgdGhlIGJsb2NrIGxlbmd0aCBjb3VsZCBiZSBpbXBsaWVkIGJ5IHRoZSBmb3JtYXQgYW5kIHdpbGwgaGF2ZSB0byBiZSBpbnZlc3RpZ2F0ZWQuIEknbSB0cnlpbmcgdG8gZGVjaWRlIHRoZSBiZXN0IGFwcHJvYWNoIGJhc2VkIG9uIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzIyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTE6MTg6MjIuNzIzMTIxODUzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjAwMjg1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZWxzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX3VzZXIuYz0yNjc9c3RhdGljIGludCB2ZXJpZnlfeGZybV9mYW1pbHkodTE2IGZhbWlseSwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMjc0LVxcdFxcdHJldHVybiAwO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjI3NTojZWxzZVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTI3Ni1cXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJJUHY2IHN1cHBvcnQgZGlzYWJsZWRcXFwiKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTI4NT1zdGF0aWMgaW50IHZlcmlmeV9zZWxlY3Rvcl9wcmVmaXhsZW4odTE2IGZhbWlseSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMwNi1cXHRcXHRyZXR1cm4gMDtcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMDc6I2Vsc2VcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMDgtXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSVB2NiBzdXBwb3J0IGRpc2FibGVkXFxcIik7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0xOTk4PXN0YXRpYyBpbnQgdmVyaWZ5X25ld3BvbGljeV9pbmZvKHN0cnVjdCB4ZnJtX3VzZXJwb2xpY3lfaW5mbyAqcCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTIwNDEtXFx0XFx0YnJlYWs7XFxubmV0L3hmcm0veGZybV91c2VyLmM6MjA0MjojZWxzZVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTIwNDMtXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSVB2NiBzdXBwb3J0IGRpc2FibGVkXFxcIik7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0yMzc3PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHVzZXJwb2xpY3lfdHlwZV9hdHRyc2l6ZSh2b2lkKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMjM4MC1cXHRyZXR1cm4gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB4ZnJtX3VzZXJwb2xpY3lfdHlwZSkpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjIzODE6I2Vsc2VcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0yMzgyLVxcdHJldHVybiAwO1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MjM4Nz1zdGF0aWMgaW50IGNvcHlfdG9fdXNlcl9wb2xpY3lfdHlwZSh1OCB0eXBlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMjM5Ny1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzoyMzk4OiNlbHNlXFxubmV0L3hmcm0veGZybV91c2VyLmMtMjM5OS1zdGF0aWMgaW5saW5lIGludCBjb3B5X3RvX3VzZXJfcG9saWN5X3R5cGUodTggdHlwZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTMzNDc9c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTI3LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM1Mjg6I2Vsc2VcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTI5LXN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MzYzMj1zdGF0aWMgaW50IHhmcm1fc2VuZF9taWdyYXRlKGNvbnN0IHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsIHU4IGRpciwgdTggdHlwZSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM2NTAtfVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM2NTE6I2Vsc2VcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNjUyLXN0YXRpYyBpbnQgeGZybV9zZW5kX21pZ3JhdGUoY29uc3Qgc3RydWN0IHhmcm1fc2VsZWN0b3IgKnNlbCwgdTggZGlyLCB1OCB0eXBlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMToxODoyMi43NjkxMzc0OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODk0ODA4Njc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIFhGUk0gTWlncmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCwgYXMgZXhwZWN0ZWQsIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGlzIHdyYXBwZWQgaW4gYW4gYCNpZmRlZiBDT05GSUdfWEZSTV9NSUdSQVRFYCBibG9jay4gVGhhdCdzIGEgY2xlYXIgaW5kaWNhdG9yIHRoYXQgYENPTkZJR19YRlJNX01JR1JBVEVgICptdXN0KiBiZSBlbmFibGVkIGZvciB0aGlzIGZ1bmN0aW9uIHRvIGV2ZW4gZXhpc3QgaW4gdGhlIGNvbXBpbGVkIGtlcm5lbC4gTWFrZXMgcGVyZmVjdCBzZW5zZS5cblxuQnV0IEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gSSdtIHdvbmRlcmluZyBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMsIGFueXRoaW5nIGVsc2UgdGhhdCBtaWdodCBiZSBuZWVkZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgQ09ORklHX1hGUk1fTUlHUkFURWAuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgZm9yIHRoZSBYRlJNIHN1YnN5c3RlbS4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZGl2ZSBpbnRvIGBuZXQveGZybS9LY29uZmlnYCBhbmQgZXhwbGljaXRseSBleGFtaW5lIHRoZSBkZWZpbml0aW9ucyBmb3IgYm90aCBgWEZSTV9NSUdSQVRFYCBhbmQgYFhGUk1fVVNFUmAuIEknbSBlc3BlY2lhbGx5IGtlZW4gdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgaW5kaXJlY3QgZGVwZW5kZW5jaWVzLiBJIHRoaW5rIGBDT05GSUdfWEZSTV9VU0VSYCBtaWdodCBhbHNvIGJlIGEgcmVxdWlyZW1lbnQgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eSwgc28gSSB3aWxsIGNoZWNrIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTAyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTE6MTg6MjguNjYzOTUwMDc1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQzOTk3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFhGUk1fTUlHUkFURVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWc9NTE9Y29uZmlnIFhGUk1fU1VCX1BPTElDWVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy02MC1cXG5uZXQveGZybS9LY29uZmlnOjYxOmNvbmZpZyBYRlJNX01JR1JBVEVcXG5uZXQveGZybS9LY29uZmlnLTYyLVxcdGJvb2wgXFxcIlRyYW5zZm9ybWF0aW9uIG1pZ3JhdGUgZGF0YWJhc2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDExOjE4OjI4LjgxODM1NTg1NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzYzODkxMjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCdzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIHRoaXMgYG5ldC94ZnJtL0tjb25maWdgIGZpbGUgYW5kIHRoZSBgWEZSTV9NSUdSQVRFYCBvcHRpb24uXG5cbioqRGl2aW5nIGludG8gYG5ldC94ZnJtL0tjb25maWdgIGFuZCBgWEZSTV9NSUdSQVRFYCoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIGdvaW5nIHRvIHB1bGwgdXAgYG5ldC94ZnJtL0tjb25maWdgIGJlY2F1c2UgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIFhGUk0gbWlncmF0aW9uLiBNeSBmb2N1cyBpcyBnb2luZyB0byBiZSB6ZXJvaW5nIGluIG9uIGBYRlJNX01JR1JBVEVgIGFuZCBmaWd1cmluZyBvdXQgd2hhdCBpdCBkb2VzLCBob3cgaXQncyBlbmFibGVkLCBhbmQgcG90ZW50aWFsbHkgYW55IGRlcGVuZGVuY2llcyBvciBpbnRlcmFjdGlvbnMgaXQgaGFzIHdpdGggb3RoZXIgWEZSTSBmZWF0dXJlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIFhGUk0gZnJhbWV3b3JrLiBJJ20gZXhwZWN0aW5nIHRoaXMgZmlsZSB0byBnaXZlIG1lIHRoZSBkZWZpbml0aXZlIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlIGtlcm5lbCBjb25maWcgb3B0aW9ucy4gSSdsbCBiZSBsb29raW5nIGZvciBjb21tZW50cywgZGVmYXVsdCBzZXR0aW5ncywgYW5kIGxpa2VseSBhbnkgKmJvb2wqLCAqdHJpc3RhdGUqLCBvciAqc2VsZWN0KiBzdGF0ZW1lbnRzIHJlbGV2YW50IHRvIGl0LiBBbnkgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gb3IgcmVmZXJlbmNlcyB3aXRoaW4gdGhlIGZpbGUgd291bGQgYmUgaW5jcmVkaWJseSBoZWxwZnVsIGFzIHdlbGwuIFRoaXMgaXMgcHJvYmFibHkgZ29pbmcgdG8gaW52b2x2ZSB0cmFjaW5nIHRocm91Z2ggY29uZGl0aW9uYWwgc3RhdGVtZW50cyBhbmQgb3RoZXIgZGVwZW5kZW5jaWVzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGZ1bmN0aW9uLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBrZXJuZWwgY29uZmlndXJhdGlvbiBhbmQgcG90ZW50aWFsIG1pZ3JhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzNTcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMToxODozMi41ODIyNTE0NTFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjkyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1MDpcXHRcXG4gIDUxOlxcdGNvbmZpZyBYRlJNX1NVQl9QT0xJQ1lcXG4gIDUyOlxcdFxcdGJvb2wgXFxcIlRyYW5zZm9ybWF0aW9uIHN1YiBwb2xpY3kgc3VwcG9ydFxcXCJcXG4gIDUzOlxcdFxcdGRlcGVuZHMgb24gWEZSTVxcbiAgNTQ6XFx0XFx0aGVscFxcbiAgNTU6XFx0XFx0ICBTdXBwb3J0IHN1YiBwb2xpY3kgZm9yIGRldmVsb3BlcnMuIEJ5IHVzaW5nIHN1YiBwb2xpY3kgd2l0aCBtYWluXFxuICA1NjpcXHRcXHQgIG9uZSwgdHdvIHBvbGljaWVzIGNhbiBiZSBhcHBsaWVkIHRvIHRoZSBzYW1lIHBhY2tldCBhdCBvbmNlLlxcbiAgNTc6XFx0XFx0ICBQb2xpY3kgd2hpY2ggbGl2ZXMgc2hvcnRlciB0aW1lIGluIGtlcm5lbCBzaG91bGQgYmUgYSBzdWIuXFxuICA1ODpcXHRcXG4gIDU5OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDYwOlxcdFxcbiAgNjE6XFx0Y29uZmlnIFhGUk1fTUlHUkFURVxcbiAgNjI6XFx0XFx0Ym9vbCBcXFwiVHJhbnNmb3JtYXRpb24gbWlncmF0ZSBkYXRhYmFzZVxcXCJcXG4gIDYzOlxcdFxcdGRlcGVuZHMgb24gWEZSTVxcbiAgNjQ6XFx0XFx0aGVscFxcbiAgNjU6XFx0XFx0ICBBIGZlYXR1cmUgdG8gdXBkYXRlIGxvY2F0b3Iocykgb2YgYSBnaXZlbiBJUHNlYyBzZWN1cml0eVxcbiAgNjY6XFx0XFx0ICBhc3NvY2lhdGlvbiBkeW5hbWljYWxseS4gIFRoaXMgZmVhdHVyZSBpcyByZXF1aXJlZCwgZm9yXFxuICA2NzpcXHRcXHQgIGluc3RhbmNlLCBpbiBhIE1vYmlsZSBJUHY2IGVudmlyb25tZW50IHdpdGggSVBzZWMgY29uZmlndXJhdGlvblxcbiAgNjg6XFx0XFx0ICB3aGVyZSBtb2JpbGUgbm9kZXMgY2hhbmdlIHRoZWlyIGF0dGFjaG1lbnQgcG9pbnQgdG8gdGhlIEludGVybmV0LlxcbiAgNjk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDExOjE4OjMyLjU4MjMyMjI3MVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjUzMDYxNTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOlxuXG4qKlhGUk0gRGVwZW5kZW5jeSBJbnF1aXJ5KipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBYRlJNX01JR1JBVEVgIGZlYXR1cmUsIGFuZCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IGl0IGhhcyBhIGRpcmVjdCBkZXBlbmRlbmN5IG9uIGBYRlJNYC4gVGhhdCBtYWtlcyBzZW5zZSwgZ2l2ZW4gdGhlIG1pZ3JhdGlvbiBhc3BlY3QgaW5oZXJlbnRseSByZWxhdGVzIHRvIHRoZSBmb3VuZGF0aW9uYWwgWEZSTSBmdW5jdGlvbmFsaXR5LiBCdXQsIHRoZSBxdWVzdGlvbiB0aGF0J3Mgbm93IHBpbmdpbmcgaW4gbXkgbWluZCBpcywgd2hhdCBhYm91dCBgWEZSTV9VU0VSYD8gSXMgdGhpcyBhbHNvIGEgcHJlcmVxdWlzaXRlLCBvciBpcyBpdCBvcHRpb25hbCBpbiB0aGUgY29udGV4dCBvZiBgWEZSTV9NSUdSQVRFYD8gSSBuZWVkIHRvIGNsYXJpZnkgdGhlIHJlbGF0aW9uc2hpcCBoZXJlOyBpdOKAmXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgYnVpbGQgYW5kIHJ1bnRpbWUgZGVwZW5kZW5jaWVzLCBlc3BlY2lhbGx5IGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCB1c2VyLXNwYWNlIGludGVyYWN0aW9uIG9yIHBvbGljeSBjb250cm9sIGR1cmluZyB0aGUgbWlncmF0aW9uIHByb2Nlc3MuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgbm90IHRvIHRha2UgYW55dGhpbmcgZm9yIGdyYW50ZWQ7IEkgc2hvdWxkIGNoZWNrIHRoaXMgcmVsYXRpb25zaGlwIGRpcmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk1NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTE6MTg6MzYuMjM1Mzg2NzQ1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzU1ODUyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWEZSTV9VU0VSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vS2NvbmZpZz0yMj1pZiBJTkVUXFxubmV0L3hmcm0vS2NvbmZpZzoyMzpjb25maWcgWEZSTV9VU0VSXFxubmV0L3hmcm0vS2NvbmZpZy0yNC1cXHR0cmlzdGF0ZSBcXFwiVHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMzEtXFxubmV0L3hmcm0vS2NvbmZpZzozMjpjb25maWcgWEZSTV9VU0VSX0NPTVBBVFxcbm5ldC94ZnJtL0tjb25maWctMzMtXFx0dHJpc3RhdGUgXFxcIkNvbXBhdGlibGUgQUJJIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDExOjE4OjM2LjI4Mjk2NTU3MloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDIxNjE1NDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbiwgdGFpbG9yZWQgZm9yIG15IGZlbGxvdyBleHBlcnQ6XG5cbioqVW5kZXJzdGFuZGluZyB0aGUgS2VybmVsIERlcGVuZGVuY2llcyBvZiBYRlJNX1VTRVIqKlxuXG5Pa2F5LCBzbyBgWEZSTV9VU0VSYC4gSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nLCBnaXZlbiBpdHMgbG9jYXRpb24gaW4gYG5ldC94ZnJtL0tjb25maWdgLCB0aGF0IGl0J3MgZ29pbmcgdG8gYmUgaW5oZXJlbnRseSBsaW5rZWQgdG8gYFhGUk1gIGl0c2VsZi4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyBgWEZSTV9VU0VSYCBpcyBhYm91dCB1c2VyLXNwYWNlIGludGVyYWN0aW9uIHdpdGggdGhlIFhGUk0gZnJhbWV3b3JrLiBBbmQsIHNpbmNlIGl0J3MgaW4gdGhlIG5ldHdvcmtpbmcgc3BhY2UsIEknZCBleHBlY3QgaXQgdG8gbGV2ZXJhZ2UgYElORVRgIGFzIGEgZm91bmRhdGlvbmFsIHJlcXVpcmVtZW50LiBMZXQncyBxdWlja2x5IHZlcmlmeSB0aGVzZSBpbXBsaWVkIGRlcGVuZGVuY2llcyB0byBjZW1lbnQgbXkgdW5kZXJzdGFuZGluZywganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgY29uZmlybSBteSBpbml0aWFsIGFzc3VtcHRpb25zLiBJdCdzIGFsd2F5cyBnb29kIHRvIGhhdmUgYSBzb2xpZCBoYW5kbGUgb24gdGhlIGtlcm5lbCdzIG1vZHVsZSBzdHJ1Y3R1cmUsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggWEZSTS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzMjAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMToxODozOS43MDQ1ODM0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZnJtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgWEZSTSBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRjb25maWcgWEZSTVxcbiAgIDY6XFx0XFx0Ym9vbFxcbiAgIDc6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgODpcXHRcXHRzZWxlY3QgR1JPX0NFTExTXFxuICAgOTpcXHRcXHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcXG4gIDEwOlxcdFxcbiAgMTE6XFx0Y29uZmlnIFhGUk1fT0ZGTE9BRFxcbiAgMTI6XFx0XFx0Ym9vbFxcbiAgMTM6XFx0XFxuICAxNDpcXHRjb25maWcgWEZSTV9BTEdPXFxuICAxNTpcXHRcXHR0cmlzdGF0ZVxcbiAgMTY6XFx0XFx0c2VsZWN0IFhGUk1cXG4gIDE3OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gIDE4OlxcdFxcdHNlbGVjdCBDUllQVE9fQUVBRFxcbiAgMTk6XFx0XFx0c2VsZWN0IENSWVBUT19IQVNIXFxuICAyMDpcXHRcXHRzZWxlY3QgQ1JZUFRPX1NLQ0lQSEVSXFxuICAyMTpcXHRcXG4gIDIyOlxcdGlmIElORVRcXG4gIDIzOlxcdGNvbmZpZyBYRlJNX1VTRVJcXG4gIDI0OlxcdFxcdHRyaXN0YXRlIFxcXCJUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXFxcIlxcbiAgMjU6XFx0XFx0c2VsZWN0IFhGUk1fQUxHT1xcbiAgMjY6XFx0XFx0aGVscFxcbiAgMjc6XFx0XFx0ICBTdXBwb3J0IGZvciBUcmFuc2Zvcm1hdGlvbihYRlJNKSB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXFxuICAyODpcXHRcXHQgIGxpa2UgSVBzZWMgdXNlZCBieSBuYXRpdmUgTGludXggdG9vbHMuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTE6MTg6MzkuNzA0NjY0NFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTU5NTkwODc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBkZXBlbmRlbmNpZXMgYW5kIGZ1bmN0aW9uIGNhbGxzOlxuXG4qKkRlY29kaW5nIHRoZSBYRlJNIE1pZ3JhdGlvbiBQYXRjaCBEZXBlbmRlbmNpZXMqKlxuXG5SaWdodCwgbGV0IG1lIGJyZWFrIHRoaXMgZG93biBsb2dpY2FsbHkuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgbWlncmF0aW5nIFhGUk0gc3RhdGVzLiBJIHNlZSB0aGF0IGBYRlJNX1VTRVJgIGlzIHNlbGVjdGluZyBgWEZSTV9BTEdPYCwgYW5kIHRoYXQgaW4gdHVybiwgc2VsZWN0cyBgWEZSTWAuIFRoYXQgbXVjaCBpcyBjbGVhciBmcm9tIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcy4gTmF0dXJhbGx5LCBgWEZSTV9NSUdSQVRFYCBhbHNvIGRlcGVuZHMgb24gYFhGUk1gLiBTbywgaWYgd2Ugd2FudCB0aGlzIG1pZ3JhdGlvbiBmdW5jdGlvbmFsaXR5IHRvIHdvcmssIHdlJ2xsIG5lZWQgYm90aCBgWEZSTV9VU0VSYCBhbmQgYFhGUk1fTUlHUkFURWAgZW5hYmxlZC4gU2VlbXMgbG9naWNhbCwgZ2l2ZW4gdGhlIHVzZXIgc3BhY2UgaW50ZXJhY3Rpb24gaW52b2x2ZWQuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgYWN0dWFsIGNvZGUuIFRoZSBwYXRjaCB0b3VjaGVzIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAuIFNpbmNlIHRoaXMgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIEknbSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHdoZXJlIGl0J3MgYmVpbmcgKmNhbGxlZCogZnJvbS4gQW5kIHllcywgYHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlYCBpcywgYXMgSSBzdXNwZWN0ZWQsIGNhbGxlZCBieSBgeGZybV9kb19taWdyYXRlX3N0YXRlYC4gT2theSwgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgaXMgYWxzbyBzdGF0aWMsIGJ1dCB0aGF0J3Mga2V5LiBJdCdzIGFjdHVhbGx5IGFuIGVudHJ5IHBvaW50IGluIHRoZSBgeGZybV9saW5rYCBhcnJheSBmb3IgYFhGUk1fTVNHX01JR1JBVEVfU1RBVEVgLiBBbmQgdGhlIGxpZ2h0IGJ1bGIgZ29lcyBvZmYuIFdhaXQgYSBtaW51dGXigKYgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgaXMgKmFsc28qIGNhbGxlZCBieSBgeGZybV91c2VyX3Jjdl9tc2dgLCB0aGUgbmV0bGluayBoYW5kbGVyISBBaGEhIFRoYXQncyB0aGUgY3J1Y2lhbCBsaW5rIHRvIHVzZXIgc3BhY2UuIEl0IGhhbmRsZXMgdGhlIG5ldGxpbmsgbWVzc2FnZSBmb3IgdGhlIG1pZ3JhdGlvbi5cblxuSSdkIGJldHRlciBtYWtlIHN1cmUgdGhhdCBgeGZybV9kb19taWdyYXRlX3N0YXRlYCBpc24ndCBpbmxpbmVkLCB0aG91Z2gsIG9yIHdlJ3JlIGxvc2luZyB0aGUgZW50cnkgcG9pbnQgd2l0aGluIHRoZSBrZXJuZWwuIEknbGwgbmVlZCB0byB2ZXJpZnkgdGhhdC4gSXQgd291bGQgZGVmaW5pdGVseSBiZSBzdWJvcHRpbWFsIGlmIGl0IHdhcyBpbmxpbmVkLCBzaW5jZSB0aGF0IHdvdWxkIG1ha2UgaXQgbW9yZSBkaWZmaWN1bHQgZm9yIHVzIHRvIHVzZSB0aGlzIGVudHJ5IHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg5MSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDExOjE4OjQ3Ljg2NDI2Mjc4NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM4OTczMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9kb19taWdyYXRlX3N0YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fdXNlci5jPTMzMjI9c3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzQ2LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMzNDc6c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzM0OC1cXHRcXHRcXHRcXHQgc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTI4LSNlbHNlXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzUyOTpzdGF0aWMgaW50IHhmcm1fZG9fbWlncmF0ZV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNTMwLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM3NDQ9c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX2xpbmsge1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc4MS1cXHRbWEZSTV9NU0dfR0VUREVGQVVMVCAgLSBYRlJNX01TR19CQVNFXSA9IHsgLmRvaXQgPSB4ZnJtX2dldF9kZWZhdWx0ICAgfSxcXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNzgyOlxcdFtYRlJNX01TR19NSUdSQVRFX1NUQVRFIC0gWEZSTV9NU0dfQkFTRV0gPSB7IC5kb2l0ID0geGZybV9kb19taWdyYXRlX3N0YXRlIH0sXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzc4My19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxMToxODo0Ny45MTgxNjYyMDFaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI5OTA4MjQ5MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFhGUk0gTWlncmF0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBYRlJNIG1pZ3JhdGlvbiBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IGEgZ29vZCBmb2N1cyBzeW1ib2wgZm9yIGZ1enppbmcuIFNpbmNlIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGlzIGEgZnVuY3Rpb24gcG9pbnRlciB3aXRoaW4gYHhmcm1fbGlua2AsIEkga25vdyBpdCBjYW4ndCBiZSBpbmxpbmVkLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIGl0IGEgc3Ryb25nIGNhbmRpZGF0ZS4gSXQncyBhIGtleSBlbnRyeSBwb2ludC5cblxuSSBjaGVja2VkIHRvIHNlZSBpZiBhbnkgb3RoZXIgc3ltYm9scyBzdG9vZCBvdXQuIGB4ZnJtX25sbXNnX211bHRpY2FzdGAgaXMgY2FsbGVkLCBidXQgdGhhdCdzIGEgZ2VuZXJhbC1wdXJwb3NlIGZ1bmN0aW9uLCBzbyBpdCdzIHByb2JhYmx5IG5vdCB0aGUgY29yZSBvZiB0aGUgY2hhbmdlLiBBaCwgcmlnaHQuIFRoZSBwYXRjaCBhZGRzIGByY3VfcmVhZF9sb2NrKClgIGFuZCBgcmN1X3JlYWRfdW5sb2NrKClgIGFyb3VuZCB0aGUgY2FsbCB0byBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIHdpdGhpbiBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgLiBUaGF0IG1lYW5zIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGlzIGRlZmluaXRlbHkgdGhlIG1haW4gZW50cnkgcG9pbnQgdG8gdGFyZ2V0IGZvciBmdXp6aW5nLCBnaXZlbiB0aGUgYWRkZWQgUkNVIHByb3RlY3Rpb25zLlxuXG5OZXh0LCBJIHZlcmlmaWVkIHRoYXQgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAgaXMgYWN0dWFsbHkgcmVhY2hhYmxlLiBJdCdzIGFuIFhGUk0gbmV0bGluayBtZXNzYWdlIGhhbmRsZXIsIGFuZCBpdCBoYW5kbGVzIHRoZSBtaWdyYXRpb24gc3RhdGUgbWVzc2FnZXMuIFllcCwgaXQgaXMgcmVhY2hhYmxlLlxuXG5Ob3csIGxldCdzIHZlcmlmeSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3MuIEknbSBhc3N1bWluZyB0aGF0IGBYRlJNX1VTRVJgIGFuZCBgWEZSTV9NSUdSQVRFYCBhcmUgdGhlIGtleSBjb25maWdzIGhlcmUuIFRoZSBmb3JtZXIgaXMgb2J2aW91czogaXQgZW5hYmxlcyB0aGUgbmV0bGluayBpbnRlcmZhY2UsIHdoaWNoIHdlIG5lZWQgdG8gdHJpZ2dlciB0aGUgbWVzc2FnZS4gVGhlIGxhdHRlciBlbmFibGVzIHRoZSBzdGF0ZSBtaWdyYXRpb24gZnVuY3Rpb25hbGl0eSBpdHNlbGYuIFllcywgdGhpcyBjb21iaW5hdGlvbiBzaG91bGQgYmUgc3VmZmljaWVudC5cblxuU28sIGB4ZnJtX2RvX21pZ3JhdGVfc3RhdGVgIGlzIG15IHByaW1hcnkgZm9jdXMgc3ltYm9sLCBhbmQgSSdtIGNvbmZpZGVudCB0aGF0IGBYRlJNX1VTRVJgIGFuZCBgWEZSTV9NSUdSQVRFYCBhcmUgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyB0byByZXByb2R1Y2UgdGhpcyBjb25kaXRpb24sIHRoaXMgZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzk3NSwiT3V0cHV0VG9rZW5zIjoxNTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTE6MTk6MDAuOTA4OTkzNzI0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc3MzgwNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGUk1fVVNFUlwiLFxuICAgIFwiWEZSTV9NSUdSQVRFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZybV9kb19taWdyYXRlX3N0YXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gUkNVIGlzc3VlIGJ5IGFkZGluZyBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCBhcm91bmQgYHhmcm1fbmxtc2dfbXVsdGljYXN0YCBpbiBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFhGUk0gbmV0bGluayBpbnRlcmZhY2UuIFRoZSBtb2RpZmllZCBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBYRlJNX01TR19NSUdSQVRFX1NUQVRFYCBuZXRsaW5rIG1lc3NhZ2UsIGhhbmRsZWQgYnkgYHhmcm1fZG9fbWlncmF0ZV9zdGF0ZWAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZSTV9VU0VSXCIsXG4gICAgXCJYRlJNX01JR1JBVEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4ZnJtX2RvX21pZ3JhdGVfc3RhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBSQ1UgaXNzdWUgYnkgYWRkaW5nIGByY3VfcmVhZF9sb2NrKClgIGFuZCBgcmN1X3JlYWRfdW5sb2NrKClgIGFyb3VuZCBgeGZybV9ubG1zZ19tdWx0aWNhc3RgIGluIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgWEZSTSBuZXRsaW5rIGludGVyZmFjZS4gVGhlIG1vZGlmaWVkIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYFhGUk1fTVNHX01JR1JBVEVfU1RBVEVgIG5ldGxpbmsgbWVzc2FnZSwgaGFuZGxlZCBieSBgeGZybV9kb19taWdyYXRlX3N0YXRlYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowxfhtl[1] Phase: Succeeded StartedAt: 2026-07-31 11:19:12 +0000 UTC FinishedAt: 2026-07-31 11:19:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfhtl[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-31 11:19:12 +0000 UTC FinishedAt: 2026-07-31 11:19:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfhtl[2] Phase: Succeeded StartedAt: 2026-07-31 11:19:12 +0000 UTC FinishedAt: 2026-07-31 14:58:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfhtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"769c6dac-07ab-4f4e-9d18-0d779fa74dec","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-07-31 11:19:12 +0000 UTC FinishedAt: 2026-07-31 14:58:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"769c6dac-07ab-4f4e-9d18-0d779fa74dec","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-workflowxfhtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"769c6dac-07ab-4f4e-9d18-0d779fa74dec","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-07-31 11:19:12 +0000 UTC FinishedAt: 2026-07-31 11:19:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfhtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"769c6dac-07ab-4f4e-9d18-0d779fa74dec","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-07-31 11:19:12 +0000 UTC FinishedAt: 2026-07-31 11:19:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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-workflowxfhtl/series-workflowxfhtl-convert-artifact-3049391910/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxfhtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"769c6dac-07ab-4f4e-9d18-0d779fa74dec","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-07-31 11:19:22 +0000 UTC FinishedAt: 2026-07-31 11:35:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfhtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"769c6dac-07ab-4f4e-9d18-0d779fa74dec","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-07-31 11:19:22 +0000 UTC FinishedAt: 2026-07-31 11:35:36 +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:*a1e7981d-1633-463b-80a1-031e97d9ef0a,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-workflowxfhtl/series-workflowxfhtl-convert-artifact-3049391910/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": "e683e3f5-67af-4bd1-8f70-ab8530b7ced1", "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-workflowxfhtl/series-workflowxfhtl-build-action-3884459964/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxfhtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"769c6dac-07ab-4f4e-9d18-0d779fa74dec","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-07-31 11:19:22 +0000 UTC FinishedAt: 2026-07-31 11:35:26 +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:*a1e7981d-1633-463b-80a1-031e97d9ef0a,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-workflowxfhtl/series-workflowxfhtl-convert-artifact-3049391910/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": "e683e3f5-67af-4bd1-8f70-ab8530b7ced1", "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-workflowxfhtl/series-workflowxfhtl-build-action-3884459964/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxfhtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"769c6dac-07ab-4f4e-9d18-0d779fa74dec","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-07-31 11:35:36 +0000 UTC FinishedAt: 2026-07-31 11:35:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfhtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"769c6dac-07ab-4f4e-9d18-0d779fa74dec","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-07-31 11:35:36 +0000 UTC FinishedAt: 2026-07-31 11:35:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfhtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"769c6dac-07ab-4f4e-9d18-0d779fa74dec","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-07-31 11:35:36 +0000 UTC FinishedAt: 2026-07-31 11:35:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfhtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"769c6dac-07ab-4f4e-9d18-0d779fa74dec","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-07-31 11:35:36 +0000 UTC FinishedAt: 2026-07-31 11:35:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"769c6dac-07ab-4f4e-9d18-0d779fa74dec","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-workflowxfhtl/series-workflowxfhtl-convert-artifact-1264798841/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxfhtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"769c6dac-07ab-4f4e-9d18-0d779fa74dec","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-07-31 11:35:46 +0000 UTC FinishedAt: 2026-07-31 11:37:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfhtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"769c6dac-07ab-4f4e-9d18-0d779fa74dec","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-07-31 11:35:46 +0000 UTC FinishedAt: 2026-07-31 11:37:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e683e3f5-67af-4bd1-8f70-ab8530b7ced1,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-workflowxfhtl/series-workflowxfhtl-build-action-3884459964/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-workflowxfhtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"769c6dac-07ab-4f4e-9d18-0d779fa74dec","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-07-31 11:37:24 +0000 UTC FinishedAt: 2026-07-31 11:37:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfhtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"769c6dac-07ab-4f4e-9d18-0d779fa74dec","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-07-31 11:37:24 +0000 UTC FinishedAt: 2026-07-31 11:37:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfhtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"769c6dac-07ab-4f4e-9d18-0d779fa74dec","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-07-31 11:37:24 +0000 UTC FinishedAt: 2026-07-31 11:53:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfhtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"769c6dac-07ab-4f4e-9d18-0d779fa74dec","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-07-31 11:37:24 +0000 UTC FinishedAt: 2026-07-31 11:53:42 +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:*a1e7981d-1633-463b-80a1-031e97d9ef0a,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-workflowxfhtl/series-workflowxfhtl-convert-artifact-1264798841/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": "4c712c3c-94c2-495a-ae2c-f31eda0cbfb4", "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-workflowxfhtl/series-workflowxfhtl-build-action-247402069/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxfhtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"769c6dac-07ab-4f4e-9d18-0d779fa74dec","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-07-31 11:37:24 +0000 UTC FinishedAt: 2026-07-31 11:53:32 +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:*a1e7981d-1633-463b-80a1-031e97d9ef0a,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-workflowxfhtl/series-workflowxfhtl-convert-artifact-1264798841/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": "4c712c3c-94c2-495a-ae2c-f31eda0cbfb4", "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-workflowxfhtl/series-workflowxfhtl-build-action-247402069/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxfhtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"769c6dac-07ab-4f4e-9d18-0d779fa74dec","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-07-31 11:53:42 +0000 UTC FinishedAt: 2026-07-31 11:53:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfhtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"769c6dac-07ab-4f4e-9d18-0d779fa74dec","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-07-31 11:53:42 +0000 UTC FinishedAt: 2026-07-31 11:53:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfhtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"769c6dac-07ab-4f4e-9d18-0d779fa74dec","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-07-31 11:53:42 +0000 UTC FinishedAt: 2026-07-31 11:55:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfhtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"769c6dac-07ab-4f4e-9d18-0d779fa74dec","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-07-31 11:53:42 +0000 UTC FinishedAt: 2026-07-31 11:55:26 +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:*4c712c3c-94c2-495a-ae2c-f31eda0cbfb4,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-workflowxfhtl/series-workflowxfhtl-build-action-247402069/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-workflowxfhtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"769c6dac-07ab-4f4e-9d18-0d779fa74dec","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-07-31 11:55:36 +0000 UTC FinishedAt: 2026-07-31 14:58:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfhtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"769c6dac-07ab-4f4e-9d18-0d779fa74dec","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-07-31 11:55:36 +0000 UTC FinishedAt: 2026-07-31 14:58:30 +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":null,"focus_symbols":["xfrm_do_migrate_state"],"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:*e683e3f5-67af-4bd1-8f70-ab8530b7ced1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4c712c3c-94c2-495a-ae2c-f31eda0cbfb4,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-workflowxfhtl/series-workflowxfhtl-build-action-3884459964/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-workflowxfhtl/series-workflowxfhtl-build-action-247402069/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowxfhtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"769c6dac-07ab-4f4e-9d18-0d779fa74dec","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-07-31 11:55:36 +0000 UTC FinishedAt: 2026-07-31 11:55:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfhtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"769c6dac-07ab-4f4e-9d18-0d779fa74dec","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-07-31 11:55:36 +0000 UTC FinishedAt: 2026-07-31 11:55:41 +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":null,"focus_symbols":["xfrm_do_migrate_state"],"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-workflowxfhtl/series-workflowxfhtl-convert-artifact-1119582958/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxfhtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"769c6dac-07ab-4f4e-9d18-0d779fa74dec","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-07-31 11:55:36 +0000 UTC FinishedAt: 2026-07-31 11:55:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfhtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"769c6dac-07ab-4f4e-9d18-0d779fa74dec","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-07-31 11:55:36 +0000 UTC FinishedAt: 2026-07-31 11:55:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfhtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"769c6dac-07ab-4f4e-9d18-0d779fa74dec","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-07-31 11:55:36 +0000 UTC FinishedAt: 2026-07-31 11:55:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfhtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"769c6dac-07ab-4f4e-9d18-0d779fa74dec","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-07-31 11:55:46 +0000 UTC FinishedAt: 2026-07-31 14:58:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxfhtl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"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":null,"focus_symbols":["xfrm_do_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER","XFRM_MIGRATE"],"series_id":"769c6dac-07ab-4f4e-9d18-0d779fa74dec","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-07-31 11:55:46 +0000 UTC FinishedAt: 2026-07-31 14:58:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e683e3f5-67af-4bd1-8f70-ab8530b7ced1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4c712c3c-94c2-495a-ae2c-f31eda0cbfb4,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-workflowxfhtl/series-workflowxfhtl-build-action-3884459964/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-workflowxfhtl/series-workflowxfhtl-build-action-247402069/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-workflowxfhtl/series-workflowxfhtl-convert-artifact-1119582958/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,}