Name: series-workflow4ms6w Phase: Succeeded StartedAt: 2026-08-01 15:28:15 +0000 UTC FinishedAt: 2026-08-01 19:45:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ms6w[0] Phase: Succeeded StartedAt: 2026-08-01 15:28:15 +0000 UTC FinishedAt: 2026-08-01 15:46:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ms6w[0].run-triage Phase: Succeeded StartedAt: 2026-08-01 15:28:15 +0000 UTC FinishedAt: 2026-08-01 15:46:08 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "fa20f6cb6063f7f1a6a56693d4a8713f19058d23", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "XFS_FS", "BTRFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "fa20f6cb6063f7f1a6a56693d4a8713f19058d23", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "XFS_FS", "BTRFS_FS" ], "series_id": "9d98023b-4249-4697-ab21-ea7cf83805c8" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "__iomap_dio_rw", "iomap_dio_rw" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": { "findings": [ "c9f79a18-3316-44ec-b805-b805b1c49325" ] } } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7WEZTX0ZTJiMzNDssCiAgICAmIzM0O0JUUkZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19pb21hcF9kaW9fcncmIzM0OywKICAgICYjMzQ7aW9tYXBfZGlvX3J3JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGlvbWFwIGRpcmVjdCBJL08gbG9naWMgdG8gcHJvcGVybHkgYWxpZ24gdGhlIGNvcGllZCBsZW5ndGggdG8gdGhlIGZpbGVzeXN0ZW0gYmxvY2sgc2l6ZSB3aGVuIGhhbmRsaW5nIGhvbGVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgY29yZSBrZXJuZWwgcGF0aCwgZml4aW5nIGFuIGlzc3VlIHJlbGF0ZWQgdG8gcGFnZSBmYXVsdCBmYWlsdXJlcyBkdXJpbmcgZGlyZWN0IEkvTy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDE0ZTE1YjM4NzA0YWY3MjNlNDRhNWY1YTU4NGM4NjFkYWEwMTY5YzRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDE1OjQ1OjA3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jIGIvZnMvaW9tYXAvZGlyZWN0LWlvLmNcbmluZGV4IGIzMzY4ZDY0ZTgxYmIuLmE5MDczODg2YzJjNjYgMTAwNjQ0XG4tLS0gYS9mcy9pb21hcC9kaXJlY3QtaW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaW9tYXAvZGlyZWN0LWlvLmNcbkBAIC01OTQsMTIgJiM0Mzs1OTQsMjAgQEAgc3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbiBcbiBzdGF0aWMgaW50IGlvbWFwX2Rpb19ob2xlX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbiB7XG4tXHRsb2ZmX3QgbGVuZ3RoID0gaW92X2l0ZXJfemVybyhpb21hcF9sZW5ndGgoaXRlciksIGRpby1cdTAwM2VzdWJtaXQuaXRlcik7XG4mIzQzO1x0bG9mZl90IGNvcGllZCA9IGlvdl9pdGVyX3plcm8oaW9tYXBfbGVuZ3RoKGl0ZXIpLCBkaW8tXHUwMDNlc3VibWl0Lml0ZXIpO1xuJiM0MztcdHVuc2lnbmVkIGludCBicyA9IGlvbWFwX2Rpb19hbGlnbm1lbnQoaXRlci1cdTAwM2Vpbm9kZSwgaXRlci1cdTAwM2Vpb21hcC5iZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgZGlvLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRsb2ZmX3QgYWxpZ25lZF9jb3BpZWQgPSByb3VuZF9kb3duKGNvcGllZCwgYnMpO1xuIFxuLVx0ZGlvLVx1MDAzZXNpemUgJiM0Mzs9IGxlbmd0aDtcbi1cdGlmICghbGVuZ3RoKVxuJiM0MztcdC8qXG4mIzQzO1x0ICogSWYgZnMgYmxvY2sgc2l6ZSBpcyBsYXJnZXIgdGhhbiBwYWdlIHNpemUsIHBhZ2UgZmF1bHQgZmFpbHVyZVxuJiM0MztcdCAqIGNhbiBjYXVzZSBAY29waWVkIHRvIGJlIHBhZ2UgYWxpZ25lZCBidXQgbm90IGZzIGJsb2NrIGFsaWduZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aW92X2l0ZXJfcmV2ZXJ0KGRpby1cdTAwM2VzdWJtaXQuaXRlciwgY29waWVkIC0gYWxpZ25lZF9jb3BpZWQpO1xuJiM0MztcdGRpby1cdTAwM2VzaXplICYjNDM7PSBhbGlnbmVkX2NvcGllZDtcbiYjNDM7XHRpZiAoIWFsaWduZWRfY29waWVkKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cdHJldHVybiBpb21hcF9pdGVyX2FkdmFuY2UoaXRlciwgbGVuZ3RoKTtcbiYjNDM7XHRyZXR1cm4gaW9tYXBfaXRlcl9hZHZhbmNlKGl0ZXIsIGFsaWduZWRfY29waWVkKTtcbiB9XG4gXG4gc3RhdGljIGludCBpb21hcF9kaW9faW5saW5lX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKmlvbWksIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7LAogICAgJiMzNDtYRlNfRlMmIzM0OywKICAgICYjMzQ7QlRSRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2lvbWFwX2Rpb19ydyYjMzQ7LAogICAgJiMzNDtpb21hcF9kaW9fcncmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgaW9tYXAgZGlyZWN0IEkvTyBsb2dpYyB0byBwcm9wZXJseSBhbGlnbiB0aGUgY29waWVkIGxlbmd0aCB0byB0aGUgZmlsZXN5c3RlbSBibG9jayBzaXplIHdoZW4gaGFuZGxpbmcgaG9sZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBwYXRoLCBmaXhpbmcgYW4gaXNzdWUgcmVsYXRlZCB0byBwYWdlIGZhdWx0IGZhaWx1cmVzIGR1cmluZyBkaXJlY3QgSS9PLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTRlMTViMzg3MDRhZjcyM2U0NGE1ZjVhNTg0Yzg2MWRhYTAxNjljNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDEgMTU6NDU6MDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9pb21hcC9kaXJlY3QtaW8uYyBiL2ZzL2lvbWFwL2RpcmVjdC1pby5jCmluZGV4IGIzMzY4ZDY0ZTgxYmIuLmE5MDczODg2YzJjNjYgMTAwNjQ0Ci0tLSBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2lvbWFwL2RpcmVjdC1pby5jCkBAIC01OTQsMTIgJiM0Mzs1OTQsMjAgQEAgc3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbykKIAogc3RhdGljIGludCBpb21hcF9kaW9faG9sZV9pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pCiB7Ci0JbG9mZl90IGxlbmd0aCA9IGlvdl9pdGVyX3plcm8oaW9tYXBfbGVuZ3RoKGl0ZXIpLCBkaW8tJmd0O3N1Ym1pdC5pdGVyKTsKJiM0MzsJbG9mZl90IGNvcGllZCA9IGlvdl9pdGVyX3plcm8oaW9tYXBfbGVuZ3RoKGl0ZXIpLCBkaW8tJmd0O3N1Ym1pdC5pdGVyKTsKJiM0MzsJdW5zaWduZWQgaW50IGJzID0gaW9tYXBfZGlvX2FsaWdubWVudChpdGVyLSZndDtpbm9kZSwgaXRlci0mZ3Q7aW9tYXAuYmRldiwKJiM0MzsJCQkJCSAgICAgIGRpby0mZ3Q7ZmxhZ3MpOwomIzQzOwlsb2ZmX3QgYWxpZ25lZF9jb3BpZWQgPSByb3VuZF9kb3duKGNvcGllZCwgYnMpOwogCi0JZGlvLSZndDtzaXplICYjNDM7PSBsZW5ndGg7Ci0JaWYgKCFsZW5ndGgpCiYjNDM7CS8qCiYjNDM7CSAqIElmIGZzIGJsb2NrIHNpemUgaXMgbGFyZ2VyIHRoYW4gcGFnZSBzaXplLCBwYWdlIGZhdWx0IGZhaWx1cmUKJiM0MzsJICogY2FuIGNhdXNlIEBjb3BpZWQgdG8gYmUgcGFnZSBhbGlnbmVkIGJ1dCBub3QgZnMgYmxvY2sgYWxpZ25lZC4KJiM0MzsJICovCiYjNDM7CWlvdl9pdGVyX3JldmVydChkaW8tJmd0O3N1Ym1pdC5pdGVyLCBjb3BpZWQgLSBhbGlnbmVkX2NvcGllZCk7CiYjNDM7CWRpby0mZ3Q7c2l6ZSAmIzQzOz0gYWxpZ25lZF9jb3BpZWQ7CiYjNDM7CWlmICghYWxpZ25lZF9jb3BpZWQpCiAJCXJldHVybiAtRUZBVUxUOwotCXJldHVybiBpb21hcF9pdGVyX2FkdmFuY2UoaXRlciwgbGVuZ3RoKTsKJiM0MzsJcmV0dXJuIGlvbWFwX2l0ZXJfYWR2YW5jZShpdGVyLCBhbGlnbmVkX2NvcGllZCk7CiB9CiAKIHN0YXRpYyBpbnQgaW9tYXBfZGlvX2lubGluZV9pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppb21pLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMTYKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGZzL2lvbWFwL2RpcmVjdC1pby5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgaW9tYXBfZGlvX2hvbGVfaXRlcmAgZnVuY3Rpb24uIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY2hhbmdlIGluIGhvdyB0aGUgY29waWVkIGxlbmd0aCBpcyBhbGlnbmVkIHRvIHRoZSBibG9jayBzaXplLCBsZXZlcmFnaW5nIGBpb21hcF9kaW9fYWxpZ25tZW50YC4gR2l2ZW4gdGhhdCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZGVlcCB3aXRoaW4gdGhlIGNvcmUga2VybmVsLCBkaXJlY3RseSBpbXBhY3RpbmcgaW9tYXAgZGlyZWN0IEkvTywgbXkgc3BpZGV5LXNlbnNlIGlzIHRpbmdsaW5nIOKAkyB0aGlzIHNjcmVhbXMgJiMzNDtmdXp6IG1lISYjMzQ7CgpNeSBuZXh0IHN0ZXAgaXMgYWx3YXlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlLiBTaW5jZSBgaW9tYXBfZGlvX2hvbGVfaXRlcmAgaGFzIGJlZW4gbW9kaWZpZWQsIEkgc2hvdWxkIGV4YW1pbmUgdGhlIGZ1bmN0aW9uIGl0c2VsZiBhbmQgaXRzIGNhbGxlcnMuIEFoLCBpdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBuYXJyb3dzIGRvd24gdGhlIHNlYXJjaCBhIGJpdC4gTGV0JiMzOTtzIHNlZS4uLiBpdCYjMzk7cyBjYWxsZWQgYnkgYGlvbWFwX2Rpb19pdGVyYC4gTm93IEkgd2FudCB0byBkZXRlcm1pbmUgdGhlIHBvdGVudGlhbCByZWFjaCBvZiB0aGlzIGNoYW5nZS4gSSBuZWVkIHRvIGlkZW50aWZ5ICpub24qLXN0YXRpYyBmdW5jdGlvbnMgdGhhdCBjYWxsIGBpb21hcF9kaW9faXRlcmAuIFRoYXQgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IHRoZSBpbnB1dHMgYW5kIGRhdGEgZmxvd3MgbG9vayBsaWtlIGFuZCB0aHVzIGJldHRlciBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9tYXBfZGlvX2hvbGVfaXRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2lvbWFwL2RpcmVjdC1pby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2lvbWFwL2RpcmVjdC1pby5jPTQxNT1zdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTU5NC1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjU5NTpzdGF0aWMgaW50IGlvbWFwX2Rpb19ob2xlX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTU5Ni17XG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9NjQ1PXN0YXRpYyBpbnQgaW9tYXBfZGlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NTAtXHRcdFx0cmV0dXJuIC1FSU87XG5mcy9pb21hcC9kaXJlY3QtaW8uYzo2NTE6XHRcdHJldHVybiBpb21hcF9kaW9faG9sZV9pdGVyKGl0ZXIsIGRpbyk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NTItXHRjYXNlIElPTUFQX1VOV1JJVFRFTjpcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY1My1cdFx0aWYgKCEoZGlvLVx1MDAzZWZsYWdzIFx1MDAyNiBJT01BUF9ESU9fV1JJVEUpKVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NjU0Olx0XHRcdHJldHVybiBpb21hcF9kaW9faG9sZV9pdGVyKGl0ZXIsIGRpbyk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NTUtXHRcdHJldHVybiBpb21hcF9kaW9fYmlvX2l0ZXIoaXRlciwgZGlvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTIzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqU3RhdGljIEZ1bmN0aW9uIEludmVzdGlnYXRpb246IGlvbWFwXF9kaW9cX2l0ZXIqKgoKT2theSwgc28gYGlvbWFwX2Rpb19pdGVyYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBTdGF0aWMgZnVuY3Rpb25zLCBieSBkZWZpbml0aW9uLCBoYXZlIGxpbWl0ZWQgc2NvcGUsIHdoaWNoIHVzdWFsbHkgbWVhbnMgdGhleSYjMzk7cmUgaW50ZWdyYWwgdG8gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgYSBzcGVjaWZpYyBtb2R1bGUgb3IgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgY29udGV4dCwgc28gbXkgbmV4dCBtb3ZlIGlzIG9idmlvdXM6IEkgbmVlZCB0byBpZGVudGlmeSAqYWxsKiB0aGUgcGxhY2VzIHdoZXJlIGBpb21hcF9kaW9faXRlcmAgaXMgYWN0dWFsbHkgY2FsbGVkLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgZnVuY3Rpb24gYW5kIGl0cyBkZXBlbmRlbmNpZXMuIFRoaXMgaXMgd2hlcmUgSSBzdGFydCBkaWdnaW5nIGludG8gdGhlIGNhbGwgZ3JhcGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9tYXBfZGlvX2l0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYz02MTM9c3RhdGljIGludCBpb21hcF9kaW9faW5saW5lX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKmlvbWksIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NDQtXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo2NDU6c3RhdGljIGludCBpb21hcF9kaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjQ2LXtcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYz02OTc9X19pb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtODIyLVx0d2hpbGUgKChyZXQgPSBpb21hcF9pdGVyKFx1MDAyNmlvbWksIG9wcykpIFx1MDAzZSAwKSB7XG5mcy9pb21hcC9kaXJlY3QtaW8uYzo4MjM6XHRcdGlvbWkuc3RhdHVzID0gaW9tYXBfZGlvX2l0ZXIoXHUwMDI2aW9taSwgZGlvKTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTgyNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjAyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkmIzM5O20gdGhlIG9uZSB0aGlua2luZyBpdCwgYW5kIGNvbnNpZGVyaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYToKCioqVHJhY2luZyB0aGUgRGlyZWN0IEkvTyBQYXRoKioKCkFscmlnaHQsIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGRpcmVjdCBJL08gY29kZSBwYXRoIGhlcmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2UmIzM5O3JlIHJlYWNoaW5nIGBfX2lvbWFwX2Rpb19yd2AuIFRoZSBmdW5jdGlvbiBgX19pb21hcF9kaW9fcndgIGlzIGtleSwgdGhhdCYjMzk7cyB0aGUgb25lIGFjdHVhbGx5IGRvaW5nIHRoZSBkaXJlY3QgSS9PIHJlYWQvd3JpdGUuIEkgc2VlIHRoYXQgaXQmIzM5O3MgY2FsbGVkIGJ5IGBpb21hcF9kaW9faXRlcmAuCgpTbywgdGhlIG5leHQgbG9naWNhbCBzdGVwLCBiZWZvcmUgSSBkaWcgdG9vIGRlZXBseSBpbnRvIGBfX2lvbWFwX2Rpb19yd2AgaXRzZWxmLCBpcyB0byBiYWNrIHVwIGEgbGV2ZWwuIEkgbmVlZCB0byBrbm93IHRoZSAqY2FsbGVycyogb2YgYF9faW9tYXBfZGlvX3J3YC4gV2hhdCBjb2RlIGlzIHJlc3BvbnNpYmxlIGZvciB0cmlnZ2VyaW5nIHRoaXMgY29yZSBkaXJlY3QgSS9PIGZ1bmN0aW9uPyBVbmRlcnN0YW5kaW5nIHRoZSBlbnRyeSBwb2ludHMgd2lsbCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byBwcm9wZXJseSBhbmFseXplIHRoZSBkYXRhIGZsb3cgYW5kIGFueSBwb3RlbnRpYWwgaXNzdWVzIG9yIG9wdGltaXphdGlvbnMuIExldCYjMzk7cyBzZWUgd2hvJiMzOTtzIGNhbGxpbmcgaXQ7IHRoZW4gSSBjYW4gdW5kZXJzdGFuZCB0aGUgYmlnZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19pb21hcF9kaW9fcncmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYz00MTU9c3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy01MTAtXHRcdCAqIFdyaXRlcyB0aGF0IGV4dGVuZCBpX3NpemUgYXJlIGFsc28gbm90IHN1cHBvcnRlZCwgYnV0IHRoaXMgaXNcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjUxMTpcdFx0ICogaGFuZGxlZCBpbiBfX2lvbWFwX2Rpb19ydygpLlxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNTEyLVx0XHQgKi9cbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYz02NDU9c3RhdGljIGludCBpb21hcF9kaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY4NS0gKiBXaGVuIHBhZ2UgZmF1bHRzIGFyZSBkaXNhYmxlZCBhbmQgQGRpb19mbGFncyBpbmNsdWRlcyBJT01BUF9ESU9fUEFSVElBTCxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjY4NjogKiBfX2lvbWFwX2Rpb19ydyBjYW4gcmV0dXJuIGEgcGFydGlhbCByZXN1bHQgaWYgaXQgZW5jb3VudGVycyBhIG5vbi1yZXNpZGVudFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjg3LSAqIHBhZ2UgaW4gQGl0ZXIgYWZ0ZXIgcHJlcGFyaW5nIGEgdHJhbnNmZXIuICBJbiB0aGF0IGNhc2UsIHRoZSBub24tcmVzaWRlbnRcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYz02OTY9c3RydWN0IGlvbWFwX2RpbyAqXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo2OTc6X19pb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02OTgtXHRcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcywgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgKmRvcHMsXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTA3LX1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjkwODpFWFBPUlRfU1lNQk9MX0dQTChfX2lvbWFwX2Rpb19ydyk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MDktXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9OTExPWlvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTYtXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5MTc6XHRkaW8gPSBfX2lvbWFwX2Rpb19ydyhpb2NiLCBpdGVyLCBvcHMsIGRvcHMsIGRpb19mbGFncywgcHJpdmF0ZSxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkxOC1cdFx0XHQgICAgIGRvbmVfYmVmb3JlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTMxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgdGhlIGNvbnRleHQgaXMgbXkgd29yazoKCioqRGVlcCBEaXZlIGludG8gYGlvbWFwX2Rpb19yd2AqKgoKQWxyaWdodCwgc28gSSBzZWUgYF9faW9tYXBfZGlvX3J3YCBpcyBleHBvcnRlZCwgYW5kIGBpb21hcF9kaW9fcndgIGl0c2VsZiBpcyBhbHNvIGFuIGVudHJ5IHBvaW50LiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBzdWdnZXN0aW5nIHBvdGVudGlhbCBpbnRlcm5hbCB2cy4gZXh0ZXJuYWwgYWNjZXNzIHBvaW50cyBvciBwb3NzaWJseSBkaWZmZXJlbnQgbGV2ZWxzIG9mIGFic3RyYWN0aW9uLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aG9zZSB0d28uIFRoZSBvYnZpb3VzIG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgaW9tYXBfZGlvX3J3YCBpbiBkZXRhaWwuIFdoYXQgZXhhY3RseSBpcyBpdHMgcHVycG9zZSwgYW5kIGhvdyBkb2VzIGl0IHJlbGF0ZSB0byBkaXJlY3QgSS9PIG9wZXJhdGlvbnM/IEkmIzM5O2xsIGNoZWNrIGl0cyBjb2RlIHRvIHVuZGVyc3RhbmQgdGhpcyBjcml0aWNhbCBsaW5rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb21hcF9kaW9fcncmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYz00MTU9c3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy01MTAtXHRcdCAqIFdyaXRlcyB0aGF0IGV4dGVuZCBpX3NpemUgYXJlIGFsc28gbm90IHN1cHBvcnRlZCwgYnV0IHRoaXMgaXNcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjUxMTpcdFx0ICogaGFuZGxlZCBpbiBfX2lvbWFwX2Rpb19ydygpLlxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNTEyLVx0XHQgKi9cbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYz02NDU9c3RhdGljIGludCBpb21hcF9kaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY3Ni0vKlxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6Njc3OiAqIGlvbWFwX2Rpb19ydygpIGFsd2F5cyBjb21wbGV0ZXMgT19bRF1TWU5DIHdyaXRlcyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIElPXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NzgtICogaXMgYmVpbmcgaXNzdWVkIGFzIEFJTyBvciBub3QuICBUaGlzIGFsbG93cyB1cyB0byBvcHRpbWlzZSBwdXJlIGRhdGEgd3JpdGVzXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjg1LSAqIFdoZW4gcGFnZSBmYXVsdHMgYXJlIGRpc2FibGVkIGFuZCBAZGlvX2ZsYWdzIGluY2x1ZGVzIElPTUFQX0RJT19QQVJUSUFMLFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6Njg2OiAqIF9faW9tYXBfZGlvX3J3IGNhbiByZXR1cm4gYSBwYXJ0aWFsIHJlc3VsdCBpZiBpdCBlbmNvdW50ZXJzIGEgbm9uLXJlc2lkZW50XG5mcy9pb21hcC9kaXJlY3QtaW8uYy02ODctICogcGFnZSBpbiBAaXRlciBhZnRlciBwcmVwYXJpbmcgYSB0cmFuc2Zlci4gIEluIHRoYXQgY2FzZSwgdGhlIG5vbi1yZXNpZGVudFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTY5Nj1zdHJ1Y3QgaW9tYXBfZGlvICpcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjY5NzpfX2lvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY5OC1cdFx0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLCBjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyAqZG9wcyxcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy03MTQtXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo3MTU6XHR0cmFjZV9pb21hcF9kaW9fcndfYmVnaW4oaW9jYiwgaXRlciwgZGlvX2ZsYWdzLCBkb25lX2JlZm9yZSk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy03MTYtXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtODg1LVx0XHRpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb24pIHtcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjg4NjpcdFx0XHR0cmFjZV9pb21hcF9kaW9fcndfcXVldWVkKGlub2RlLCBpb21pLnBvcywgaW9taS5sZW4pO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtODg3LVx0XHRcdHJldHVybiBFUlJfUFRSKC1FSU9DQlFVRVVFRCk7XG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTA3LX1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjkwODpFWFBPUlRfU1lNQk9MX0dQTChfX2lvbWFwX2Rpb19ydyk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MDktXG5mcy9pb21hcC9kaXJlY3QtaW8uYz05MTA9c3NpemVfdFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTExOmlvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkxMi1cdFx0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLCBjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyAqZG9wcyxcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTYtXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5MTc6XHRkaW8gPSBfX2lvbWFwX2Rpb19ydyhpb2NiLCBpdGVyLCBvcHMsIGRvcHMsIGRpb19mbGFncywgcHJpdmF0ZSxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkxOC1cdFx0XHQgICAgIGRvbmVfYmVmb3JlKTtcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MjItfVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTIzOkVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2Rpb19ydyk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MjQtXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9OTk5PXNzaXplX3QgX19pb21hcF9kaW9fcmVhZF9zaW1wbGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTAyNy1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwMjg6XHR0cmFjZV9pb21hcF9kaW9fcndfYmVnaW4oaW9jYiwgaXRlciwgMCwgMCk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDI5LVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwNzMtXHRzdWJtaXRfYmlvKGJpbyk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMDc0Olx0dHJhY2VfaW9tYXBfZGlvX3J3X3F1ZXVlZChpb21pLVx1MDAzZWlub2RlLCBpb2NiLVx1MDAzZWtpX3BvcywgaW9taS1cdTAwM2VsZW4pO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTA3NS1cdHJldHVybiAtRUlPQ0JRVUVVRUQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwMjEKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJb21hcCBEaXJlY3QgSS9PIEZ1enppbmcgU3RyYXRlZ3kqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBpb21hcCBkaXJlY3QgSS9PIGNvZGUsIHNwZWNpZmljYWxseSBgaW9tYXBfZGlvX3J3YCBhbmQgYF9faW9tYXBfZGlvX3J3YC4gVGhlc2UgYXJlLCB3aXRob3V0IGEgZG91YnQsIHRoZSBjb3JlIGVudHJ5IHBvaW50cyBmb3IgZGlyZWN0IEkvTyBvcGVyYXRpb25zIHdpdGhpbiBpb21hcC4gR2l2ZW4gdGhlaXIgZnVuZGFtZW50YWwgcm9sZSwgdGhleSYjMzk7cmUgcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgdGhlbSBvbiBteSBsaXN0LCBmcm9udCBhbmQgY2VudGVyLgoKTm93LCBiZWZvcmUgSSBkaXZlIGludG8gY29uc3RydWN0aW5nIGZ1enogY2FzZXMsIGl0JiMzOTtzIHBydWRlbnQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aWVkIHRvIGlvbWFwJiMzOTtzIGZ1bmN0aW9uYWxpdHkuIFRoZXJlIG1pZ2h0IGJlIHNwZWNpZmljIGBDT05GSUdgIHNldHRpbmdzIHRoYXQgZW5hYmxlIG9yIGRpc2FibGUgY2VydGFpbiBmZWF0dXJlcyBvciBjb2RlcGF0aHMgdGhhdCBJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIHdoZW4gY3JhZnRpbmcgbXkgZnV6emluZyBlbnZpcm9ubWVudCBhbmQgc2V0dXAuIERpc2NvdmVyaW5nIHRoZXNlIHdpbGwgb3B0aW1pemUgbXkgY292ZXJhZ2UgYW5kIGVuc3VyZSBJJiMzOTttIGhpdHRpbmcgYWxsIHRoZSByZWxldmFudCBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgdG8gZW5zdXJlIGFsbCBwb3RlbnRpYWxseSBpbXBvcnRhbnQgQ09ORklHcyBhcmUgZW5hYmxlZCBpbiBteSBmdXp6aW5nIHRhcmdldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZTX0lPTUFQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTEyPWNvbmZpZyBWQUxJREFURV9GU19QQVJTRVJcbi0tXG5mcy9LY29uZmlnLTE3LVxuZnMvS2NvbmZpZzoxODpjb25maWcgRlNfSU9NQVBcbmZzL0tjb25maWctMTktXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzOTgKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBGU19JT01BUGAgRmxhZyoqCgpSaWdodCwgYEZTX0lPTUFQYC4gSXQmIzM5O3MgYSBib29sZWFuLCBhIHByZXR0eSBpbXBvcnRhbnQgb25lIGF0IHRoYXQsIGdlbmVyYWxseSBlbmFibGVkIGJ5IHRoZSBiaWcgcGxheWVycyBpbiB0aGUgZmlsZXN5c3RlbSBnYW1lOiBYRlMsIGV4dDQsIGJ0cmZzLCB0aGF0IGtpbmQgb2YgdGhpbmcuIFNvLCBsZXQmIzM5O3MgZHJpbGwgZG93biBhbmQgc2VlIGV4YWN0bHkgd2hhdCYjMzk7cyB0cmlnZ2VyaW5nIGl0cyBzZWxlY3Rpb24uIFdoYXQgY29tcG9uZW50cywgd2hhdCBrZXJuZWwgZmVhdHVyZXMsIHdoYXQgc3BlY2lmaWMgZmlsZXN5c3RlbSBvcHRpb25zIGFyZSBkZWNpZGluZyB0aGF0IHRoaXMgcGFydGljdWxhciBmbGFnIG5lZWRzIHRvIGJlIHNldD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcyBhbmQgaW1wbGljYXRpb25zIGZyb20gYSBzeXN0ZW1zIHBlcnNwZWN0aXZlLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZWJhc2UgYW5kIHRyYWNlIHRoZSBhY3RpdmF0aW9uIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBGU19JT01BUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lvbWFwL3BvcnRpbmcucnN0PTQ3PUZpcnN0LCBhZGQgYGAjaW5jbHVkZSBcdTAwM2NsaW51eC9pb21hcC5oXHUwMDNlYGAgZnJvbSB5b3VyIHNvdXJjZSBjb2RlIGFuZCBhZGRcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaW9tYXAvcG9ydGluZy5yc3Q6NDg6YGBzZWxlY3QgRlNfSU9NQVBgYCB0byB5b3VyIGZpbGVzeXN0ZW0mIzM5O3MgS2NvbmZpZyBvcHRpb24uXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lvbWFwL3BvcnRpbmcucnN0LTQ5LUJ1aWxkIHRoZSBrZXJuZWwsIHJ1biBmc3Rlc3RzIHdpdGggdGhlIGBgLWcgYWxsYGAgb3B0aW9uIGFjcm9zcyBhIHdpZGVcbi0tXG5ibG9jay9LY29uZmlnPTU9bWVudWNvbmZpZyBCTE9DS1xuLS1cbmJsb2NrL0tjb25maWctNy0gICAgICAgZGVmYXVsdCB5XG5ibG9jay9LY29uZmlnOjg6ICAgICAgIHNlbGVjdCBGU19JT01BUFxuYmxvY2svS2NvbmZpZy05LSAgICAgICBzZWxlY3QgU0JJVE1BUFxuLS1cbmZzL0tjb25maWc9NTg9Y29uZmlnIEZTX0RBWFxuLS1cbmZzL0tjb25maWctNjEtXHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXG5mcy9LY29uZmlnOjYyOlx0c2VsZWN0IEZTX0lPTUFQXG5mcy9LY29uZmlnLTYzLVx0c2VsZWN0IERBWFxuLS1cbmZzL2J0cmZzL0tjb25maWc9Mz1jb25maWcgQlRSRlNfRlNcbi0tXG5mcy9idHJmcy9LY29uZmlnLTE0LVx0c2VsZWN0IFpTVERfREVDT01QUkVTU1xuZnMvYnRyZnMvS2NvbmZpZzoxNTpcdHNlbGVjdCBGU19JT01BUFxuZnMvYnRyZnMvS2NvbmZpZy0xNi1cdHNlbGVjdCBSQUlENl9QUVxuLS1cbmZzL2Vyb2ZzL0tjb25maWc9Mz1jb25maWcgRVJPRlNfRlNcbi0tXG5mcy9lcm9mcy9LY29uZmlnLTgtXHRzZWxlY3QgQ1JZUFRPX0RFRkxBVEUgaWYgRVJPRlNfRlNfWklQX0FDQ0VMXG5mcy9lcm9mcy9LY29uZmlnOjk6XHRzZWxlY3QgRlNfSU9NQVBcbmZzL2Vyb2ZzL0tjb25maWctMTAtXHRzZWxlY3QgTFo0X0RFQ09NUFJFU1MgaWYgRVJPRlNfRlNfWklQXG4tLVxuZnMvZXhmYXQvS2NvbmZpZz0zPWNvbmZpZyBFWEZBVF9GU1xuLS1cbmZzL2V4ZmF0L0tjb25maWctNi1cdHNlbGVjdCBOTFNcbmZzL2V4ZmF0L0tjb25maWc6NzpcdHNlbGVjdCBGU19JT01BUFxuZnMvZXhmYXQvS2NvbmZpZy04LVx0aGVscFxuLS1cbmZzL2V4dDIvS2NvbmZpZz0yPWNvbmZpZyBFWFQyX0ZTXG4tLVxuZnMvZXh0Mi9LY29uZmlnLTQtXHRzZWxlY3QgQlVGRkVSX0hFQURcbmZzL2V4dDIvS2NvbmZpZzo1Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9leHQyL0tjb25maWctNi1cdGhlbHBcbi0tXG5mcy9leHQ0L0tjb25maWc9Mj1jb25maWcgRVhUNF9GU1xuLS1cbmZzL2V4dDQvS2NvbmZpZy03LVx0c2VsZWN0IENSQzMyXG5mcy9leHQ0L0tjb25maWc6ODpcdHNlbGVjdCBGU19JT01BUFxuZnMvZXh0NC9LY29uZmlnLTktXHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cbi0tXG5mcy9mMmZzL0tjb25maWc9Mj1jb25maWcgRjJGU19GU1xuLS1cbmZzL2YyZnMvS2NvbmZpZy05LVx0c2VsZWN0IEZTX0VOQ1JZUFRJT05fQUxHUyBpZiBGU19FTkNSWVBUSU9OXG5mcy9mMmZzL0tjb25maWc6MTA6XHRzZWxlY3QgRlNfSU9NQVBcbmZzL2YyZnMvS2NvbmZpZy0xMS1cdHNlbGVjdCBMWjRfQ09NUFJFU1MgaWYgRjJGU19GU19MWjRcbi0tXG5mcy9mdXNlL0tjb25maWc9Mj1jb25maWcgRlVTRV9GU1xuLS1cbmZzL2Z1c2UvS2NvbmZpZy00LVx0c2VsZWN0IEZTX1BPU0lYX0FDTFxuZnMvZnVzZS9LY29uZmlnOjU6XHRzZWxlY3QgRlNfSU9NQVBcbmZzL2Z1c2UvS2NvbmZpZy02LVx0aGVscFxuLS1cbmZzL2dmczIvS2NvbmZpZz0yPWNvbmZpZyBHRlMyX0ZTXG4tLVxuZnMvZ2ZzMi9LY29uZmlnLTctXHRzZWxlY3QgUVVPVEFDVExcbmZzL2dmczIvS2NvbmZpZzo4Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9nZnMyL0tjb25maWctOS1cdGhlbHBcbi0tXG5mcy9ocGZzL0tjb25maWc9Mj1jb25maWcgSFBGU19GU1xuLS1cbmZzL2hwZnMvS2NvbmZpZy01LVx0c2VsZWN0IEJVRkZFUl9IRUFEXG5mcy9ocGZzL0tjb25maWc6NjpcdHNlbGVjdCBGU19JT01BUFxuZnMvaHBmcy9LY29uZmlnLTctXHRoZWxwXG4tLVxuZnMvbmlsZnMyL0tjb25maWc9Mj1jb25maWcgTklMRlMyX0ZTXG4tLVxuZnMvbmlsZnMyL0tjb25maWctNS1cdHNlbGVjdCBDUkMzMlxuZnMvbmlsZnMyL0tjb25maWc6NjpcdHNlbGVjdCBGU19JT01BUFxuZnMvbmlsZnMyL0tjb25maWctNy1cdGhlbHBcbi0tXG5mcy9udGZzL0tjb25maWc9Mj1jb25maWcgTlRGU19GU1xuLS1cbmZzL250ZnMvS2NvbmZpZy00LVx0c2VsZWN0IE5MU1xuZnMvbnRmcy9LY29uZmlnOjU6XHRzZWxlY3QgRlNfSU9NQVBcbmZzL250ZnMvS2NvbmZpZy02LVx0aGVscFxuLS1cbmZzL3hmcy9LY29uZmlnPTI9Y29uZmlnIFhGU19GU1xuLS1cbmZzL3hmcy9LY29uZmlnLTYtXHRzZWxlY3QgQ1JDMzJcbmZzL3hmcy9LY29uZmlnOjc6XHRzZWxlY3QgRlNfSU9NQVBcbmZzL3hmcy9LY29uZmlnLTgtXHRoZWxwXG4tLVxuZnMvem9uZWZzL0tjb25maWc9MT1jb25maWcgWk9ORUZTX0ZTXG4tLVxuZnMvem9uZWZzL0tjb25maWctNC1cdGRlcGVuZHMgb24gQkxLX0RFVl9aT05FRFxuZnMvem9uZWZzL0tjb25maWc6NTpcdHNlbGVjdCBGU19JT01BUFxuZnMvem9uZWZzL0tjb25maWctNi1cdHNlbGVjdCBDUkMzMlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODI1CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgQW5hbHlzaXMgb2YgdGhlIGlvbWFwIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGBGU19JT01BUGAgY29uZmlndXJhdGlvbi4gSXQmIzM5O3MgYXV0b21hdGljYWxseSBzZWxlY3RlZCBieSBxdWl0ZSBhIGZldyBmaWxlIHN5c3RlbXMsIGxpa2UgYEVYVDRfRlNgLCBgWEZTX0ZTYCwgYW5kIGBCVFJGU19GU2AuIEEgc3RyYWlnaHRmb3J3YXJkIGFwcHJvYWNoIHRvIGVuc3VyZSBpb21hcCBpcyBwcmVzZW50IHdvdWxkIGJlIHRvIGRpcmVjdGx5IGVuYWJsZSB0aGVzZSBmaWxlc3lzdGVtIGNvbmZpZ3MuIEJ1dCBob2xkIG9uLi4uIGBCTE9DS2AgYWxzbyBzZWxlY3RzIGBGU19JT01BUGA/IFllcywgdGhhdCYjMzk7cyByaWdodCwgYGJsb2NrL0tjb25maWdgIHRha2VzIGNhcmUgb2YgdGhhdCBkZXBlbmRlbmN5LiBUaGF0IG1lYW5zLCBwcmFjdGljYWxseSBzcGVha2luZywgaW9tYXAgaXMgYWx3YXlzIGVuYWJsZWQgYXMgbG9uZyBhcyB0aGUgYmxvY2sgZGV2aWNlIHN1cHBvcnQgaXMgdGhlcmUuCgpOb3csIGNvbnNpZGVyaW5nIHRoZSBwYXRjaCBJJiMzOTttIGV4YW1pbmluZywgaXQgbW9kaWZpZXMgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgLiBUaGlzIGlzIGEgY3J1Y2lhbCBmdW5jdGlvbiBhcyBpdCYjMzk7cyBjYWxsZWQgYnkgYGlvbWFwX2Rpb19pdGVyYCwgd2hpY2gsIGluIHR1cm4sIGlzIGludm9rZWQgYnkgYF9faW9tYXBfZGlvX3J3YCBhbmQgYGlvbWFwX2Rpb19yd2AuIEdpdmVuIHRoaXMgY2FsbCBjaGFpbiwgaXQgc3VnZ2VzdHMgbXkgZnV6emluZyBlZmZvcnRzIHNob3VsZCBwcmltYXJpbHkgZm9jdXMgb24gYGlvbWFwX2Rpb19yd2AgYW5kIGBfX2lvbWFwX2Rpb19yd2AuIFRoZXkmIzM5O3JlIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludHMuCgpJIGFsc28gd29uZGVyIGlmIGBfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZWAgbWlnaHQgYmUgcmVsZXZhbnQsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlLiBMZXQgbWUgZG91YmxlLWNoZWNrIHdoZXRoZXIgaXQgY2FsbHMgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgLiBJIG5lZWQgdG8gcnVsZSBpdCBpbiBvciBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19faW9tYXBfZGlvX3JlYWRfc2ltcGxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmM9OTgxPXN0YXRpYyB2b2lkIGlvbWFwX2Rpb19zaW1wbGVfZW5kX2lvKHN0cnVjdCBiaW8gKmJpbylcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05OTgtXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5OTk6c3NpemVfdCBfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwMDAtXHRcdHN0cnVjdCBpb21hcF9pdGVyICppb21pKVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwODQtfVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTA4NTpFWFBPUlRfU1lNQk9MX0dQTChfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZSk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDg2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjM4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OgoKKipEaWdnaW5nIGludG8gRGlyZWN0IEkvTyBhbmQgSXRlcmF0b3JzKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBgX19pb21hcF9kaW9fcmVhZF9zaW1wbGVgIGFuZCBpbW1lZGlhdGVseSBhIHF1ZXN0aW9uIHBvcHMgdXA6IGlzIGl0IGNhbGxpbmcgYGlvbWFwX2Rpb19iaW9faXRlcmAgZGlyZWN0bHk/IE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCYjMzk7cyBhIGtleSBvcHRpbWl6YXRpb24gcG9pbnQsIHNvIGl0IHdhcnJhbnRzIGEgcXVpY2sgY2hlY2suIEkgd2FudCB0byBzZWUgaWYgdGhpcyBmdW5jdGlvbiBpcyBsZXZlcmFnaW5nIHRoZSBpdGVyYXRvciBhcHByb2FjaCBmb3IgRGlyZWN0IEkvTyByZWFkcy4gSWYgaXQgaXMsIHRoZW4gd2UmIzM5O3JlIGxpa2VseSBpbiBhIGdvb2Qgc3BvdCBwZXJmb3JtYW5jZS13aXNlLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGltcGxlbWVudGF0aW9uIHRvIGJlIGNlcnRhaW4gdGhhdCB0aGUgaW50ZXJhY3Rpb24gaXMgYXMgZXhwZWN0ZWQuIFRoaXMgZGlyZWN0IGNhbGwgaXMgc2lnbmlmaWNhbnQgaW4gRGlyZWN0IEkvTyBhcyB0aGUgZGlyZWN0IHVzZSBvZiB0aGUgYmlvIGl0ZXJhdG9yIGlzIGxpa2VseSBhIGNydWNpYWwgZmFjdG9yIGZvciByZWR1Y2luZyBvdmVyaGVhZC4gVW5kZXJzdGFuZGluZyB0aGlzIHBhdGggaXMgaW1wb3J0YW50IGFzIGl0IGlzIGEgY29tbW9uIGZhY3RvciBpbiB2YXJpb3VzIGZpbGUgc3lzdGVtcy4gVGhpcyBpcyB0aGUgZmlyc3QgcGxhY2UgSSYjMzk7ZCBsb29rIGluIGEgcGVyZm9ybWFuY2UgcHJvZmlsZSBhbmQgaXMgbGlrZWx5IHRoZSBjb3JlIG9mIHRoZSBEaXJlY3QgSS9PIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb21hcF9kaW9fYmlvX2l0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYz0yOTk9c3RhdGljIGludCBpb21hcF9kaW9femVybyhjb25zdCBzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvLFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTMzNC1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjMzNTpzdGF0aWMgc3NpemVfdCBpb21hcF9kaW9fYmlvX2l0ZXJfb25lKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMzM2LVx0XHRzdHJ1Y3QgaW9tYXBfZGlvICpkaW8sIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGludCBhbGlnbm1lbnQsXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9NDA3PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlvbWFwX2Rpb19hbGlnbm1lbnQoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy00MTQtXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo0MTU6c3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTQxNi17XG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNTU2LVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NTU3Olx0XHRyZXQgPSBpb21hcF9kaW9fYmlvX2l0ZXJfb25lKGl0ZXIsIGRpbywgcG9zLCBhbGlnbm1lbnQsIGJpb19vcGYpO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNTU4LVx0XHRpZiAodW5saWtlbHkocmV0IFx1MDAzYyAwKSkge1xuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTY0NT1zdGF0aWMgaW50IGlvbWFwX2Rpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjU0LVx0XHRcdHJldHVybiBpb21hcF9kaW9faG9sZV9pdGVyKGl0ZXIsIGRpbyk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYzo2NTU6XHRcdHJldHVybiBpb21hcF9kaW9fYmlvX2l0ZXIoaXRlciwgZGlvKTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY1Ni1cdGNhc2UgSU9NQVBfTUFQUEVEOlxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NjU3Olx0XHRyZXR1cm4gaW9tYXBfZGlvX2Jpb19pdGVyKGl0ZXIsIGRpbyk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NTgtXHRjYXNlIElPTUFQX0lOTElORTpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ5NQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLi4uCgoqKkFuYWx5emluZyBgX19pb21hcF9kaW9fcmVhZF9zaW1wbGVgIGZvciBIb2xlIEhhbmRsaW5nKioKClJpZ2h0LCBzbyBJJiMzOTttIHByZXR0eSBzdXJlIGBfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZWAgYnlwYXNzZXMgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgLiBJdCYjMzk7cyBqdXN0IGEgaHVuY2gsIGJ1dCB0aGVzZSBzaW1wbGVyIGRpcmVjdCBJL08gcmVhZCBmdW5jdGlvbnMgb2Z0ZW4gaGFuZGxlIGhvbGVzIGluIGEgbW9yZSBzdHJhaWdodGZvcndhcmQgbWFubmVyLiBUbyBjb25maXJtIHRoaXMsIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGNvZGUuIExldCYjMzk7cyBnZXQgdGhlIHNvdXJjZSBmb3IgYF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IGl0cyBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIHRoZSBsb2dpYyB3aXRoaW4gdGhhdCBmdW5jdGlvbiYjMzk7cyBib2R5IHRvIGRlZmluaXRpdmVseSBkZXRlcm1pbmUgaG93IGl0IGFkZHJlc3NlcyBvciBpZ25vcmVzIHRoZSBwb3RlbnRpYWwgZm9yIHNwYXJzZSBmaWxlcyBhbmQgaG9sZXMgZHVyaW5nIHRoZSByZWFkIG9wZXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk5OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk5OTpcdHNzaXplX3QgX19pb21hcF9kaW9fcmVhZF9zaW1wbGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4xMDAwOlx0XHRcdHN0cnVjdCBpb21hcF9pdGVyICppb21pKVxuMTAwMTpcdHtcbjEwMDI6XHRcdGdmcF90IGdmcCA9IChpb21pLVx1MDAzZWZsYWdzIFx1MDAyNiBJT01BUF9OT1dBSVQpID8gR0ZQX05PV0FJVCA6IEdGUF9LRVJORUw7XG4xMDAzOlx0XHRzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSAqc3I7XG4xMDA0Olx0XHR1bnNpZ25lZCBpbnQgYWxpZ25tZW50O1xuMTAwNTpcdFx0c3RydWN0IGJpbyAqYmlvO1xuMTAwNjpcdFx0c3NpemVfdCByZXQ7XG4xMDA3Olx0XG4xMDA4Olx0XHRpZiAoaW9taS1cdTAwM2Vpb21hcC50eXBlICE9IElPTUFQX01BUFBFRCB8fFxuMTAwOTpcdFx0ICAgIGlvbWktXHUwMDNlaW9tYXAub2Zmc2V0ICYjNDM7IGlvbWktXHUwMDNlaW9tYXAubGVuZ3RoIFx1MDAzYyBpb21pLVx1MDAzZXBvcyAmIzQzOyBpb21pLVx1MDAzZWxlbiB8fFxuMTAxMDpcdFx0ICAgIChpb21pLVx1MDAzZWlvbWFwLmZsYWdzIFx1MDAyNiBJT01BUF9GX0lOVEVHUklUWSkpIHtcbjEwMTE6XHRcdFx0cmV0ID0gLUVOT1RCTEs7XG4xMDEyOlx0XHRcdGdvdG8gb3V0X2Rpb19lbmQ7XG4xMDEzOlx0XHR9XG4xMDE0Olx0XG4xMDE1Olx0XHRhbGlnbm1lbnQgPSBpb21hcF9kaW9fYWxpZ25tZW50KGlvbWktXHUwMDNlaW5vZGUsIGlvbWktXHUwMDNlaW9tYXAuYmRldiwgMCk7XG4xMDE2Olx0XHRpZiAoKGlvbWktXHUwMDNlcG9zIHwgaW9taS1cdTAwM2VsZW4pIFx1MDAyNiAoYWxpZ25tZW50IC0gMSkpIHtcbjEwMTc6XHRcdFx0cmV0ID0gLUVJTlZBTDtcbjEwMTg6XHRcdFx0Z290byBvdXRfZGlvX2VuZDtcbjEwMTk6XHRcdH1cbjEwMjA6XHRcbjEwMjE6XHRcdGlmICh1bmxpa2VseSghaW9taS1cdTAwM2Vpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfZGlvX2RvbmVfd3EgXHUwMDI2XHUwMDI2XG4xMDIyOlx0XHRcdFx0IWlzX3N5bmNfa2lvY2IoaW9jYikpKSB7XG4xMDIzOlx0XHRcdHJldCA9IHNiX2luaXRfZGlvX2RvbmVfd3EoaW9taS1cdTAwM2Vpbm9kZS1cdTAwM2VpX3NiKTtcbjEwMjQ6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbjEwMjU6XHRcdFx0XHRnb3RvIG91dF9kaW9fZW5kO1xuMTAyNjpcdFx0fVxuMTAyNzpcdFxuMTAyODpcdFx0dHJhY2VfaW9tYXBfZGlvX3J3X2JlZ2luKGlvY2IsIGl0ZXIsIDAsIDApO1xuMTAyOTpcdFxuMTAzMDpcdFx0YmlvID0gYmlvX2FsbG9jX2Jpb3NldChpb21pLVx1MDAzZWlvbWFwLmJkZXYsXG4xMDMxOlx0XHRcdFx0ICAgICAgIGJpb19pb3ZfdmVjc190b19hbGxvYyhpdGVyLCBCSU9fTUFYX1ZFQ1MpLFxuMTAzMjpcdFx0XHRcdCAgICAgICBSRVFfT1BfUkVBRCwgZ2ZwLCBcdTAwMjZpb21hcF9kaW9fc2ltcGxlX3Bvb2wpO1xuMTAzMzpcdFx0aWYgKCFiaW8pIHtcbjEwMzQ6XHRcdFx0cmV0ID0gLUVBR0FJTjtcbjEwMzU6XHRcdFx0Z290byBvdXRfZGlvX2VuZDtcbjEwMzY6XHRcdH1cbjEwMzc6XHRcdHNyID0gY29udGFpbmVyX29mKGJpbywgc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUsIGJpbyk7XG4xMDM4Olx0XHRzci1cdTAwM2Vpb2NiID0gaW9jYjtcbjEwMzk6XHRcdHNyLVx1MDAzZWRpb19mbGFncyA9IDA7XG4xMDQwOlx0XG4xMDQxOlx0XHRiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgPSBpb21hcF9zZWN0b3IoXHUwMDI2aW9taS1cdTAwM2Vpb21hcCwgaW9taS1cdTAwM2Vwb3MpO1xuMTA0MjpcdFx0YmlvLVx1MDAzZWJpX2lvcHJpbyA9IGlvY2ItXHUwMDNla2lfaW9wcmlvO1xuMTA0MzpcdFxuMTA0NDpcdFx0cmV0ID0gYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhiaW8sIGl0ZXIsIGFsaWdubWVudCAtIDEpO1xuMTA0NTpcdFx0aWYgKHVubGlrZWx5KHJldCkpXG4xMDQ2Olx0XHRcdGdvdG8gb3V0X2Jpb19wdXQ7XG4xMDQ3Olx0XG4xMDQ4Olx0XHRpZiAoYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSAhPSBpb21pLVx1MDAzZWxlbikge1xuMTA0OTpcdFx0XHRpb3ZfaXRlcl9yZXZlcnQoaXRlciwgYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSk7XG4xMDUwOlx0XHRcdHJldCA9IC1FTk9UQkxLO1xuMTA1MTpcdFx0XHRnb3RvIG91dF9iaW9fcmVsZWFzZV9wYWdlcztcbjEwNTI6XHRcdH1cbjEwNTM6XHRcbjEwNTQ6XHRcdHNyLVx1MDAzZXNpemUgPSBiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplO1xuMTA1NTpcdFx0aWYgKHVzZXJfYmFja2VkX2l0ZXIoaXRlcikpIHtcbjEwNTY6XHRcdFx0YmlvX3NldF9wYWdlc19kaXJ0eShiaW8pO1xuMTA1NzpcdFx0XHRzci1cdTAwM2VkaW9fZmxhZ3MgfD0gSU9NQVBfRElPX1VTRVJfQkFDS0VEO1xuMTA1ODpcdFx0fVxuMTA1OTpcdFxuMTA2MDpcdFx0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfTk9XQUlUKVxuMTA2MTpcdFx0XHRiaW8tXHUwMDNlYmlfb3BmIHw9IFJFUV9OT1dBSVQ7XG4xMDYyOlx0XG4xMDYzOlx0XHRpZiAoaXNfc3luY19raW9jYihpb2NiKSkge1xuMTA2NDpcdFx0XHRzdWJtaXRfYmlvX3dhaXQoYmlvKTtcbjEwNjU6XHRcdFx0cmV0dXJuIGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGUoc3IpO1xuMTA2NjpcdFx0fVxuMTA2NzpcdFxuMTA2ODpcdFx0aWYgKChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX0hJUFJJKSkge1xuMTA2OTpcdFx0XHRiaW8tXHUwMDNlYmlfb3BmIHw9IFJFUV9QT0xMRUQ7XG4xMDcwOlx0XHRcdFdSSVRFX09OQ0UoaW9jYi1cdTAwM2Vwcml2YXRlLCBiaW8pO1xuMTA3MTpcdFx0fVxuMTA3MjpcdFx0YmlvLVx1MDAzZWJpX2VuZF9pbyA9IGlvbWFwX2Rpb19zaW1wbGVfZW5kX2lvO1xuMTA3MzpcdFx0c3VibWl0X2JpbyhiaW8pO1xuMTA3NDpcdFx0dHJhY2VfaW9tYXBfZGlvX3J3X3F1ZXVlZChpb21pLVx1MDAzZWlub2RlLCBpb2NiLVx1MDAzZWtpX3BvcywgaW9taS1cdTAwM2VsZW4pO1xuMTA3NTpcdFx0cmV0dXJuIC1FSU9DQlFVRVVFRDtcbjEwNzY6XHRcbjEwNzc6XHRvdXRfYmlvX3JlbGVhc2VfcGFnZXM6XG4xMDc4Olx0XHRiaW9fcmVsZWFzZV9wYWdlcyhiaW8sIGZhbHNlKTtcbjEwNzk6XHRvdXRfYmlvX3B1dDpcbjEwODA6XHRcdGJpb19wdXQoYmlvKTtcbjEwODE6XHRvdXRfZGlvX2VuZDpcbjEwODI6XHRcdGlub2RlX2Rpb19lbmQoaW9taS1cdTAwM2Vpbm9kZSk7XG4xMDgzOlx0XHRyZXR1cm4gcmV0O1xuMTA4NDpcdH1cbjEwODU6XHRFWFBPUlRfU1lNQk9MX0dQTChfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZSk7XG4xMDg2Olx0XG4xMDg3Olx0c3RhdGljIGludCBfX2luaXQgaW9tYXBfZGlvX2luaXQodm9pZClcbjEwODg6XHR7XG4xMDg5Olx0XHRyZXR1cm4gYmlvc2V0X2luaXQoXHUwMDI2aW9tYXBfZGlvX3NpbXBsZV9wb29sLCA0LFxuMTA5MDpcdFx0XHRcdCAgIG9mZnNldG9mKHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlLCBiaW8pLFxuMTA5MTpcdFx0XHRcdCAgIEJJT1NFVF9ORUVEX0JWRUNTIHwgQklPU0VUX1BFUkNQVV9DQUNIRSk7XG4xMDkyOlx0fVxuMTA5MzpcdGZzX2luaXRjYWxsKGlvbWFwX2Rpb19pbml0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzODMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczoKCioqRGlnZ2luZyBpbnRvIHRoZSBJL08gTWFwcGluZyBGdW5jdGlvbnMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2UgdGhlIGNvbnRyb2wgZmxvdyBoZXJlLCBhbmQgSSYjMzk7dmUganVzdCByZWFsaXplZCB0aGF0IGBfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZWAgKmRvZXNuJiMzOTt0KiBhY3R1YWxseSBjYWxsIGBpb21hcF9kaW9faG9sZV9pdGVyYCwgd2hpY2ggaXMgd2hlcmUgSSB3YXMgZXhwZWN0aW5nIGl0IHRvIGJlLiBPa2F5LCB0aGF0IHNoaWZ0cyB0aGUgZm9jdXMuIE15IGF0dGVudGlvbiBzaG91bGQgYmUgb24gYF9faW9tYXBfZGlvX3J3YCBhbmQgdGhlIHdyYXBwZXIsIGBpb21hcF9kaW9fcndgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyBhdCB0aG9zZSBsZXZlbHMuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCBgaW9tYXBfZGlvX3J3YCBpcywgaW4gZmFjdCwgdGhlIHdyYXBwZXIuCgpOb3csIGJlZm9yZSBJIGRlZXAgZGl2ZSB0b28gbXVjaCwgaXQmIzM5O3Mgd29ydGggYSBxdWljayBjaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBleHBvcnRlZCBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudCB0aGF0IEkgc2hvdWxkIGJlIGNvbnNpZGVyaW5nIGF0IHRoaXMgc3RhZ2UuIEl0JiMzOTtzIGEgZ29vZCBwcmFjdGljZSB0byBub3QgbWlzcyB0aGUgd29vZCBmb3IgdGhlIHRyZWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmM9MTA1PXNzaXplX3QgaW9tYXBfZGlvX2NvbXBsZXRlKHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xNjAtfVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTYxOkVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2Rpb19jb21wbGV0ZSk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xNjItXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9MjcyPXZvaWQgaW9tYXBfZGlvX2Jpb19lbmRfaW8oc3RydWN0IGJpbyAqYmlvKVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTI3OS19XG5mcy9pb21hcC9kaXJlY3QtaW8uYzoyODA6RVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfZGlvX2Jpb19lbmRfaW8pO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMjgxLVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTY5Nz1fX2lvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MDctfVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTA4OkVYUE9SVF9TWU1CT0xfR1BMKF9faW9tYXBfZGlvX3J3KTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkwOS1cbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYz05MTE9aW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkyMi19XG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5MjM6RVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfZGlvX3J3KTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkyNC1cbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYz05OTk9c3NpemVfdCBfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDg0LX1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwODU6RVhQT1JUX1NZTUJPTF9HUEwoX19pb21hcF9kaW9fcmVhZF9zaW1wbGUpO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTA4Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyOTQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSU9NQVAgQ29uZmlndXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gbmFpbCBkb3duIHRoZSBjb3JlIEkvTyBtYXAgY29uZmlndXJhdGlvbnMgaGVyZS4gSXQgbG9va3MgbGlrZSB0aGUgaGVhdnkgbGlmdGVycyBhcmUgYF9faW9tYXBfZGlvX3J3YCBhbmQgYGlvbWFwX2Rpb19yd2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY3J1Y2lhbCBjb25maWcgc2V0dGluZ3MgSSYjMzk7bSBtaXNzaW5nLgoKTGV0JiMzOTtzIHNlZeKApiBgRlNfSU9NQVBgIHNlZW1zIHRvIGJlIHRoZSBvbmUgdGhhdCBnZXRzIHNlbGVjdGVkIGJ5IGBFWFQ0X0ZTYCwgYFhGU19GU2AsIGFuZCBgQlRSRlNfRlNgLiBSaWdodCwgc28ganVzdCBsaXN0aW5nIHRob3NlIHdvdWxkIGNvdmVyIGl0LiBIYW5nIG9uIGEgc2Vjb25kLCB0aGF0JiMzOTtzIG5vdCBxdWl0ZSByaWdodC4gYEJMT0NLYCBzZWxlY3RzIGBGU19JT01BUGAsIHdoaWNoIG1lYW5zIGBGU19JT01BUGAgaXMgaW1wbGljaXRseSBlbmFibGVkIGlmIGBCTE9DS2AgaXMgZW5hYmxlZC4gSXQmIzM5O3Mgbm90IGEgZGlyZWN0IGRlcGVuZGVuY3kuIE9rYXksIHNvIEkgc2hvdWxkIGp1c3QgbGlzdCBgQkxPQ0tgLCBgRVhUNF9GU2AsIGBYRlNfRlNgLCBhbmQgYEJUUkZTX0ZTYCBmb3IgY2xhcml0eS4gVGhhdCBjb3ZlcnMgdGhlIHByaW1hcnkgY2FzZXMuCgpOb3csIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgaWYgYW55IG90aGVyIGZ1bmN0aW9ucyBjYWxsIGBpb21hcF9kaW9faG9sZV9pdGVyYCBkaXJlY3RseS4gSnVzdCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGNvbmZpZ3VyYXRpb25zIGF0IHBsYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvbWFwX2Rpb19ob2xlX2l0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYz00MTU9c3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy01OTQtXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo1OTU6c3RhdGljIGludCBpb21hcF9kaW9faG9sZV9pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG5mcy9pb21hcC9kaXJlY3QtaW8uYy01OTYte1xuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTY0NT1zdGF0aWMgaW50IGlvbWFwX2Rpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjUwLVx0XHRcdHJldHVybiAtRUlPO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NjUxOlx0XHRyZXR1cm4gaW9tYXBfZGlvX2hvbGVfaXRlcihpdGVyLCBkaW8pO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjUyLVx0Y2FzZSBJT01BUF9VTldSSVRURU46XG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NTMtXHRcdGlmICghKGRpby1cdTAwM2VmbGFncyBcdTAwMjYgSU9NQVBfRElPX1dSSVRFKSlcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjY1NDpcdFx0XHRyZXR1cm4gaW9tYXBfZGlvX2hvbGVfaXRlcihpdGVyLCBkaW8pO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjU1LVx0XHRyZXR1cm4gaW9tYXBfZGlvX2Jpb19pdGVyKGl0ZXIsIGRpbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTI2CgkJCQkJCQlvdXRwdXQ6IDEyNgoJCQkJCQkJdGhvdWdodHM6IDIxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERpbyBJdGVyYXRvciBQYXRjaCoqCgpPa2F5LCBzbyB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGBpb21hcF9kaW9faXRlcmAuIE15IGluaXRpYWwgaHVuY2ggaXMgdG8gZm9jdXMgZW50aXJlbHkgb24gdGhhdC4gSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhlIHBhdGNoIGxvZ2ljLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCB3b3JrcyBieSBhbGlnbmluZyB0aGUgYGNvcGllZGAgdmFyaWFibGUgdG8gdGhlIGJsb2NrIHNpemUgdXNpbmcgYGlvbWFwX2Rpb19hbGlnbm1lbnRgLiBBZnRlciBhbGlnbm1lbnQsIGl0IHJldmVydHMgdGhlIGl0ZXJhdG9yIGJ5IGNhbGN1bGF0aW5nIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYGNvcGllZGAgYW5kIHRoZSBhbGlnbmVkIHZlcnNpb24uCgpSaWdodCwgSSBzZWUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYWltZWQgYXQgcmVzb2x2aW5nIGEgcG90ZW50aWFsIGlzc3VlLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGFkZHJlc3MgYSBzaXR1YXRpb24gd2hlcmUgcGFnZSBmYXVsdCBmYWlsdXJlcyBtaWdodCBsZWF2ZSBgY29waWVkYCBwYWdlLWFsaWduZWQgYnV0IG5vdCBhbGlnbmVkIHRvIHRoZSBmaWxlIHN5c3RlbSBibG9jayBzaXplLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBnb3RjaGEsIGFuZCBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdG8gY29uZmlybS4KCkZvciBmdXp6aW5nLCBJJiMzOTtsbCB6ZXJvIGluIG9uIHRoZSBmb2xsb3dpbmcgc3ltYm9sczogYF9faW9tYXBfZGlvX3J3YCBhbmQgYGlvbWFwX2Rpb19yd2AuCgpBcyBmb3IgY29uZmlndXJhdGlvbnMsIEkmIzM5O2xsIGJlIHN1cmUgdG8gdGVzdCB0aGlzIHdpdGggYEVYVDRfRlNgLCBgWEZTX0ZTYCwgYW5kIGBCVFJGU19GU2AuIExldCBtZSBxdWlja2x5IGNvbmZpcm0gaWYgdGhvc2UgY29uZmlndXJhdGlvbnMgZW5hYmxlIGBGU19JT01BUGAuIFllcywgSSYjMzk7dmUgYWxyZWFkeSBjaGVja2VkLCBpdCBsb29rcyBsaWtlIGBFWFQ0X0ZTYCwgYFhGU19GU2AgYW5kIGBCVFJGU19GU2AgZG8gYWxsIHNlbGVjdCBgRlNfSU9NQVBgLgoKSSYjMzk7bGwgdXNlIGBzZXQtcmVzdWx0c2AgdG8gcmV0dXJuIHRoZSB2ZXJpZmllZCByZXN1bHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDssCiAgICAmIzM0O1hGU19GUyYjMzQ7LAogICAgJiMzNDtCVFJGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19faW9tYXBfZGlvX3J3JiMzNDssCiAgICAmIzM0O2lvbWFwX2Rpb19ydyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBpb21hcCBkaXJlY3QgSS9PIGxvZ2ljIHRvIHByb3Blcmx5IGFsaWduIHRoZSBjb3BpZWQgbGVuZ3RoIHRvIHRoZSBmaWxlc3lzdGVtIGJsb2NrIHNpemUgd2hlbiBoYW5kbGluZyBob2xlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIGNvcmUga2VybmVsIHBhdGgsIGZpeGluZyBhbiBpc3N1ZSByZWxhdGVkIHRvIHBhZ2UgZmF1bHQgZmFpbHVyZXMgZHVyaW5nIGRpcmVjdCBJL08uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7WEZTX0ZTJiMzNDssCiAgICAmIzM0O0JUUkZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19pb21hcF9kaW9fcncmIzM0OywKICAgICYjMzQ7aW9tYXBfZGlvX3J3JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGlvbWFwIGRpcmVjdCBJL08gbG9naWMgdG8gcHJvcGVybHkgYWxpZ24gdGhlIGNvcGllZCBsZW5ndGggdG8gdGhlIGZpbGVzeXN0ZW0gYmxvY2sgc2l6ZSB3aGVuIGhhbmRsaW5nIGhvbGVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgY29yZSBrZXJuZWwgcGF0aCwgZml4aW5nIGFuIGlzc3VlIHJlbGF0ZWQgdG8gcGFnZSBmYXVsdCBmYWlsdXJlcyBkdXJpbmcgZGlyZWN0IEkvTy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ1OjA3Ljg5NjI4OTg1M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMTk1MTY0ODA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIixcbiAgICBcIlhGU19GU1wiLFxuICAgIFwiQlRSRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2lvbWFwX2Rpb19yd1wiLFxuICAgIFwiaW9tYXBfZGlvX3J3XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgaW9tYXAgZGlyZWN0IEkvTyBsb2dpYyB0byBwcm9wZXJseSBhbGlnbiB0aGUgY29waWVkIGxlbmd0aCB0byB0aGUgZmlsZXN5c3RlbSBibG9jayBzaXplIHdoZW4gaGFuZGxpbmcgaG9sZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBwYXRoLCBmaXhpbmcgYW4gaXNzdWUgcmVsYXRlZCB0byBwYWdlIGZhdWx0IGZhaWx1cmVzIGR1cmluZyBkaXJlY3QgSS9PLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0NTowNy44OTYyOTU2NTNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4MzcwNTY1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDE0ZTE1YjM4NzA0YWY3MjNlNDRhNWY1YTU4NGM4NjFkYWEwMTY5YzRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMSAxNTo0NTowNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9pb21hcC9kaXJlY3QtaW8uYyBiL2ZzL2lvbWFwL2RpcmVjdC1pby5jXFxuaW5kZXggYjMzNjhkNjRlODFiYi4uYTkwNzM4ODZjMmM2NiAxMDA2NDRcXG4tLS0gYS9mcy9pb21hcC9kaXJlY3QtaW8uY1xcbisrKyBiL2ZzL2lvbWFwL2RpcmVjdC1pby5jXFxuQEAgLTU5NCwxMiArNTk0LDIwIEBAIHN0YXRpYyBpbnQgaW9tYXBfZGlvX2Jpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXFxuIFxcbiBzdGF0aWMgaW50IGlvbWFwX2Rpb19ob2xlX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG4ge1xcbi1cXHRsb2ZmX3QgbGVuZ3RoID0gaW92X2l0ZXJfemVybyhpb21hcF9sZW5ndGgoaXRlciksIGRpby1cXHUwMDNlc3VibWl0Lml0ZXIpO1xcbitcXHRsb2ZmX3QgY29waWVkID0gaW92X2l0ZXJfemVybyhpb21hcF9sZW5ndGgoaXRlciksIGRpby1cXHUwMDNlc3VibWl0Lml0ZXIpO1xcbitcXHR1bnNpZ25lZCBpbnQgYnMgPSBpb21hcF9kaW9fYWxpZ25tZW50KGl0ZXItXFx1MDAzZWlub2RlLCBpdGVyLVxcdTAwM2Vpb21hcC5iZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBkaW8tXFx1MDAzZWZsYWdzKTtcXG4rXFx0bG9mZl90IGFsaWduZWRfY29waWVkID0gcm91bmRfZG93bihjb3BpZWQsIGJzKTtcXG4gXFxuLVxcdGRpby1cXHUwMDNlc2l6ZSArPSBsZW5ndGg7XFxuLVxcdGlmICghbGVuZ3RoKVxcbitcXHQvKlxcbitcXHQgKiBJZiBmcyBibG9jayBzaXplIGlzIGxhcmdlciB0aGFuIHBhZ2Ugc2l6ZSwgcGFnZSBmYXVsdCBmYWlsdXJlXFxuK1xcdCAqIGNhbiBjYXVzZSBAY29waWVkIHRvIGJlIHBhZ2UgYWxpZ25lZCBidXQgbm90IGZzIGJsb2NrIGFsaWduZWQuXFxuK1xcdCAqL1xcbitcXHRpb3ZfaXRlcl9yZXZlcnQoZGlvLVxcdTAwM2VzdWJtaXQuaXRlciwgY29waWVkIC0gYWxpZ25lZF9jb3BpZWQpO1xcbitcXHRkaW8tXFx1MDAzZXNpemUgKz0gYWxpZ25lZF9jb3BpZWQ7XFxuK1xcdGlmICghYWxpZ25lZF9jb3BpZWQpXFxuIFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi1cXHRyZXR1cm4gaW9tYXBfaXRlcl9hZHZhbmNlKGl0ZXIsIGxlbmd0aCk7XFxuK1xcdHJldHVybiBpb21hcF9pdGVyX2FkdmFuY2UoaXRlciwgYWxpZ25lZF9jb3BpZWQpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGlvbWFwX2Rpb19pbmxpbmVfaXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaW9taSwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0NTowOC4yODA4Mjg5NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQ5ODEwNjE0ODc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIixcbiAgICBcIlhGU19GU1wiLFxuICAgIFwiQlRSRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2lvbWFwX2Rpb19yd1wiLFxuICAgIFwiaW9tYXBfZGlvX3J3XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgaW9tYXAgZGlyZWN0IEkvTyBsb2dpYyB0byBwcm9wZXJseSBhbGlnbiB0aGUgY29waWVkIGxlbmd0aCB0byB0aGUgZmlsZXN5c3RlbSBibG9jayBzaXplIHdoZW4gaGFuZGxpbmcgaG9sZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBwYXRoLCBmaXhpbmcgYW4gaXNzdWUgcmVsYXRlZCB0byBwYWdlIGZhdWx0IGZhaWx1cmVzIGR1cmluZyBkaXJlY3QgSS9PLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxNGUxNWIzODcwNGFmNzIzZTQ0YTVmNWE1ODRjODYxZGFhMDE2OWM0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAxNTo0NTowNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jIGIvZnMvaW9tYXAvZGlyZWN0LWlvLmNcbmluZGV4IGIzMzY4ZDY0ZTgxYmIuLmE5MDczODg2YzJjNjYgMTAwNjQ0XG4tLS0gYS9mcy9pb21hcC9kaXJlY3QtaW8uY1xuKysrIGIvZnMvaW9tYXAvZGlyZWN0LWlvLmNcbkBAIC01OTQsMTIgKzU5NCwyMCBAQCBzdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuIFxuIHN0YXRpYyBpbnQgaW9tYXBfZGlvX2hvbGVfaXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuIHtcbi1cdGxvZmZfdCBsZW5ndGggPSBpb3ZfaXRlcl96ZXJvKGlvbWFwX2xlbmd0aChpdGVyKSwgZGlvLVx1MDAzZXN1Ym1pdC5pdGVyKTtcbitcdGxvZmZfdCBjb3BpZWQgPSBpb3ZfaXRlcl96ZXJvKGlvbWFwX2xlbmd0aChpdGVyKSwgZGlvLVx1MDAzZXN1Ym1pdC5pdGVyKTtcbitcdHVuc2lnbmVkIGludCBicyA9IGlvbWFwX2Rpb19hbGlnbm1lbnQoaXRlci1cdTAwM2Vpbm9kZSwgaXRlci1cdTAwM2Vpb21hcC5iZGV2LFxuK1x0XHRcdFx0XHQgICAgICBkaW8tXHUwMDNlZmxhZ3MpO1xuK1x0bG9mZl90IGFsaWduZWRfY29waWVkID0gcm91bmRfZG93bihjb3BpZWQsIGJzKTtcbiBcbi1cdGRpby1cdTAwM2VzaXplICs9IGxlbmd0aDtcbi1cdGlmICghbGVuZ3RoKVxuK1x0LypcbitcdCAqIElmIGZzIGJsb2NrIHNpemUgaXMgbGFyZ2VyIHRoYW4gcGFnZSBzaXplLCBwYWdlIGZhdWx0IGZhaWx1cmVcbitcdCAqIGNhbiBjYXVzZSBAY29waWVkIHRvIGJlIHBhZ2UgYWxpZ25lZCBidXQgbm90IGZzIGJsb2NrIGFsaWduZWQuXG4rXHQgKi9cbitcdGlvdl9pdGVyX3JldmVydChkaW8tXHUwMDNlc3VibWl0Lml0ZXIsIGNvcGllZCAtIGFsaWduZWRfY29waWVkKTtcbitcdGRpby1cdTAwM2VzaXplICs9IGFsaWduZWRfY29waWVkO1xuK1x0aWYgKCFhbGlnbmVkX2NvcGllZClcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4tXHRyZXR1cm4gaW9tYXBfaXRlcl9hZHZhbmNlKGl0ZXIsIGxlbmd0aCk7XG4rXHRyZXR1cm4gaW9tYXBfaXRlcl9hZHZhbmNlKGl0ZXIsIGFsaWduZWRfY29waWVkKTtcbiB9XG4gXG4gc3RhdGljIGludCBpb21hcF9kaW9faW5saW5lX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKmlvbWksIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ1OjA4LjI4MDgzMDMxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQyMzQwNDQxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGZzL2lvbWFwL2RpcmVjdC1pby5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgaW9tYXBfZGlvX2hvbGVfaXRlcmAgZnVuY3Rpb24uIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY2hhbmdlIGluIGhvdyB0aGUgY29waWVkIGxlbmd0aCBpcyBhbGlnbmVkIHRvIHRoZSBibG9jayBzaXplLCBsZXZlcmFnaW5nIGBpb21hcF9kaW9fYWxpZ25tZW50YC4gR2l2ZW4gdGhhdCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZGVlcCB3aXRoaW4gdGhlIGNvcmUga2VybmVsLCBkaXJlY3RseSBpbXBhY3RpbmcgaW9tYXAgZGlyZWN0IEkvTywgbXkgc3BpZGV5LXNlbnNlIGlzIHRpbmdsaW5nIOKAkyB0aGlzIHNjcmVhbXMgXCJmdXp6IG1lIVwiXG5cbk15IG5leHQgc3RlcCBpcyBhbHdheXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUuIFNpbmNlIGBpb21hcF9kaW9faG9sZV9pdGVyYCBoYXMgYmVlbiBtb2RpZmllZCwgSSBzaG91bGQgZXhhbWluZSB0aGUgZnVuY3Rpb24gaXRzZWxmIGFuZCBpdHMgY2FsbGVycy4gQWgsIGl0J3MgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgbmFycm93cyBkb3duIHRoZSBzZWFyY2ggYSBiaXQuIExldCdzIHNlZS4uLiBpdCdzIGNhbGxlZCBieSBgaW9tYXBfZGlvX2l0ZXJgLiBOb3cgSSB3YW50IHRvIGRldGVybWluZSB0aGUgcG90ZW50aWFsIHJlYWNoIG9mIHRoaXMgY2hhbmdlLiBJIG5lZWQgdG8gaWRlbnRpZnkgKm5vbiotc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGNhbGwgYGlvbWFwX2Rpb19pdGVyYC4gVGhhdCB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgdGhlIGlucHV0cyBhbmQgZGF0YSBmbG93cyBsb29rIGxpa2UgYW5kIHRodXMgYmV0dGVyIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMxNiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ1OjEyLjcwNDIzNzI4MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTkxOTc3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb21hcF9kaW9faG9sZV9pdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2lvbWFwL2RpcmVjdC1pby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2lvbWFwL2RpcmVjdC1pby5jPTQxNT1zdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNTk0LVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjU5NTpzdGF0aWMgaW50IGlvbWFwX2Rpb19ob2xlX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy01OTYte1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9NjQ1PXN0YXRpYyBpbnQgaW9tYXBfZGlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY1MC1cXHRcXHRcXHRyZXR1cm4gLUVJTztcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo2NTE6XFx0XFx0cmV0dXJuIGlvbWFwX2Rpb19ob2xlX2l0ZXIoaXRlciwgZGlvKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NTItXFx0Y2FzZSBJT01BUF9VTldSSVRURU46XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjUzLVxcdFxcdGlmICghKGRpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT01BUF9ESU9fV1JJVEUpKVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjY1NDpcXHRcXHRcXHRyZXR1cm4gaW9tYXBfZGlvX2hvbGVfaXRlcihpdGVyLCBkaW8pO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY1NS1cXHRcXHRyZXR1cm4gaW9tYXBfZGlvX2Jpb19pdGVyKGl0ZXIsIGRpbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ1OjEyLjc1MDE2MzU3OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MzEzNDI5NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKlN0YXRpYyBGdW5jdGlvbiBJbnZlc3RpZ2F0aW9uOiBpb21hcFxcX2Rpb1xcX2l0ZXIqKlxuXG5Pa2F5LCBzbyBgaW9tYXBfZGlvX2l0ZXJgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIFN0YXRpYyBmdW5jdGlvbnMsIGJ5IGRlZmluaXRpb24sIGhhdmUgbGltaXRlZCBzY29wZSwgd2hpY2ggdXN1YWxseSBtZWFucyB0aGV5J3JlIGludGVncmFsIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIGEgc3BlY2lmaWMgbW9kdWxlIG9yIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIGNvbnRleHQsIHNvIG15IG5leHQgbW92ZSBpcyBvYnZpb3VzOiBJIG5lZWQgdG8gaWRlbnRpZnkgKmFsbCogdGhlIHBsYWNlcyB3aGVyZSBgaW9tYXBfZGlvX2l0ZXJgIGlzIGFjdHVhbGx5IGNhbGxlZC4gVGhhdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgZnVuY3Rpb24gYW5kIGl0cyBkZXBlbmRlbmNpZXMuIFRoaXMgaXMgd2hlcmUgSSBzdGFydCBkaWdnaW5nIGludG8gdGhlIGNhbGwgZ3JhcGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMjMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0NToxNS41ODE1MDg2OTVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQzMTgzOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9tYXBfZGlvX2l0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaW9tYXAvZGlyZWN0LWlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW9tYXAvZGlyZWN0LWlvLmM9NjEzPXN0YXRpYyBpbnQgaW9tYXBfZGlvX2lubGluZV9pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppb21pLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NDQtXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NjQ1OnN0YXRpYyBpbnQgaW9tYXBfZGlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NDYte1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9Njk3PV9faW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtODIyLVxcdHdoaWxlICgocmV0ID0gaW9tYXBfaXRlcihcXHUwMDI2aW9taSwgb3BzKSkgXFx1MDAzZSAwKSB7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6ODIzOlxcdFxcdGlvbWkuc3RhdHVzID0gaW9tYXBfZGlvX2l0ZXIoXFx1MDAyNmlvbWksIGRpbyk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtODI0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0NToxNS42MjU4MzI2MzNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjc3NjgxNDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEknbSB0aGUgb25lIHRoaW5raW5nIGl0LCBhbmQgY29uc2lkZXJpbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6XG5cbioqVHJhY2luZyB0aGUgRGlyZWN0IEkvTyBQYXRoKipcblxuQWxyaWdodCwgSSdtIGRpdmluZyBpbnRvIHRoZSBkaXJlY3QgSS9PIGNvZGUgcGF0aCBoZXJlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdlJ3JlIHJlYWNoaW5nIGBfX2lvbWFwX2Rpb19yd2AuIFRoZSBmdW5jdGlvbiBgX19pb21hcF9kaW9fcndgIGlzIGtleSwgdGhhdCdzIHRoZSBvbmUgYWN0dWFsbHkgZG9pbmcgdGhlIGRpcmVjdCBJL08gcmVhZC93cml0ZS4gSSBzZWUgdGhhdCBpdCdzIGNhbGxlZCBieSBgaW9tYXBfZGlvX2l0ZXJgLlxuXG5TbywgdGhlIG5leHQgbG9naWNhbCBzdGVwLCBiZWZvcmUgSSBkaWcgdG9vIGRlZXBseSBpbnRvIGBfX2lvbWFwX2Rpb19yd2AgaXRzZWxmLCBpcyB0byBiYWNrIHVwIGEgbGV2ZWwuIEkgbmVlZCB0byBrbm93IHRoZSAqY2FsbGVycyogb2YgYF9faW9tYXBfZGlvX3J3YC4gV2hhdCBjb2RlIGlzIHJlc3BvbnNpYmxlIGZvciB0cmlnZ2VyaW5nIHRoaXMgY29yZSBkaXJlY3QgSS9PIGZ1bmN0aW9uPyBVbmRlcnN0YW5kaW5nIHRoZSBlbnRyeSBwb2ludHMgd2lsbCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byBwcm9wZXJseSBhbmFseXplIHRoZSBkYXRhIGZsb3cgYW5kIGFueSBwb3RlbnRpYWwgaXNzdWVzIG9yIG9wdGltaXphdGlvbnMuIExldCdzIHNlZSB3aG8ncyBjYWxsaW5nIGl0OyB0aGVuIEkgY2FuIHVuZGVyc3RhbmQgdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjAyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NDU6MTguOTAzNTE2NDAzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDkwMjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9faW9tYXBfZGlvX3J3XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2lvbWFwL2RpcmVjdC1pby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2lvbWFwL2RpcmVjdC1pby5jPTQxNT1zdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNTEwLVxcdFxcdCAqIFdyaXRlcyB0aGF0IGV4dGVuZCBpX3NpemUgYXJlIGFsc28gbm90IHN1cHBvcnRlZCwgYnV0IHRoaXMgaXNcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo1MTE6XFx0XFx0ICogaGFuZGxlZCBpbiBfX2lvbWFwX2Rpb19ydygpLlxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTUxMi1cXHRcXHQgKi9cXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTY0NT1zdGF0aWMgaW50IGlvbWFwX2Rpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02ODUtICogV2hlbiBwYWdlIGZhdWx0cyBhcmUgZGlzYWJsZWQgYW5kIEBkaW9fZmxhZ3MgaW5jbHVkZXMgSU9NQVBfRElPX1BBUlRJQUwsXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6Njg2OiAqIF9faW9tYXBfZGlvX3J3IGNhbiByZXR1cm4gYSBwYXJ0aWFsIHJlc3VsdCBpZiBpdCBlbmNvdW50ZXJzIGEgbm9uLXJlc2lkZW50XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjg3LSAqIHBhZ2UgaW4gQGl0ZXIgYWZ0ZXIgcHJlcGFyaW5nIGEgdHJhbnNmZXIuICBJbiB0aGF0IGNhc2UsIHRoZSBub24tcmVzaWRlbnRcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTY5Nj1zdHJ1Y3QgaW9tYXBfZGlvICpcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo2OTc6X19pb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjk4LVxcdFxcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcywgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgKmRvcHMsXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MDctfVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjkwODpFWFBPUlRfU1lNQk9MX0dQTChfX2lvbWFwX2Rpb19ydyk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTA5LVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9OTExPWlvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkxNi1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5MTc6XFx0ZGlvID0gX19pb21hcF9kaW9fcncoaW9jYiwgaXRlciwgb3BzLCBkb3BzLCBkaW9fZmxhZ3MsIHByaXZhdGUsXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTE4LVxcdFxcdFxcdCAgICAgZG9uZV9iZWZvcmUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0NToxOC45NDg2MTEzODFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTIxMDA5OTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgdGhlIGNvbnRleHQgaXMgbXkgd29yazpcblxuKipEZWVwIERpdmUgaW50byBgaW9tYXBfZGlvX3J3YCoqXG5cbkFscmlnaHQsIHNvIEkgc2VlIGBfX2lvbWFwX2Rpb19yd2AgaXMgZXhwb3J0ZWQsIGFuZCBgaW9tYXBfZGlvX3J3YCBpdHNlbGYgaXMgYWxzbyBhbiBlbnRyeSBwb2ludC4gVGhhdCdzIGludGVyZXN0aW5nLCBzdWdnZXN0aW5nIHBvdGVudGlhbCBpbnRlcm5hbCB2cy4gZXh0ZXJuYWwgYWNjZXNzIHBvaW50cyBvciBwb3NzaWJseSBkaWZmZXJlbnQgbGV2ZWxzIG9mIGFic3RyYWN0aW9uLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aG9zZSB0d28uIFRoZSBvYnZpb3VzIG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgaW9tYXBfZGlvX3J3YCBpbiBkZXRhaWwuIFdoYXQgZXhhY3RseSBpcyBpdHMgcHVycG9zZSwgYW5kIGhvdyBkb2VzIGl0IHJlbGF0ZSB0byBkaXJlY3QgSS9PIG9wZXJhdGlvbnM/IEknbGwgY2hlY2sgaXRzIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGlzIGNyaXRpY2FsIGxpbmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1MzEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0NToyMS44Njk2MzkyMDNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDExMjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvbWFwX2Rpb19yd1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9pb21hcC9kaXJlY3QtaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9pb21hcC9kaXJlY3QtaW8uYz00MTU9c3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTUxMC1cXHRcXHQgKiBXcml0ZXMgdGhhdCBleHRlbmQgaV9zaXplIGFyZSBhbHNvIG5vdCBzdXBwb3J0ZWQsIGJ1dCB0aGlzIGlzXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NTExOlxcdFxcdCAqIGhhbmRsZWQgaW4gX19pb21hcF9kaW9fcncoKS5cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy01MTItXFx0XFx0ICovXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYz02NDU9c3RhdGljIGludCBpb21hcF9kaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjc2LS8qXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6Njc3OiAqIGlvbWFwX2Rpb19ydygpIGFsd2F5cyBjb21wbGV0ZXMgT19bRF1TWU5DIHdyaXRlcyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIElPXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjc4LSAqIGlzIGJlaW5nIGlzc3VlZCBhcyBBSU8gb3Igbm90LiAgVGhpcyBhbGxvd3MgdXMgdG8gb3B0aW1pc2UgcHVyZSBkYXRhIHdyaXRlc1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjg1LSAqIFdoZW4gcGFnZSBmYXVsdHMgYXJlIGRpc2FibGVkIGFuZCBAZGlvX2ZsYWdzIGluY2x1ZGVzIElPTUFQX0RJT19QQVJUSUFMLFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjY4NjogKiBfX2lvbWFwX2Rpb19ydyBjYW4gcmV0dXJuIGEgcGFydGlhbCByZXN1bHQgaWYgaXQgZW5jb3VudGVycyBhIG5vbi1yZXNpZGVudFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY4Ny0gKiBwYWdlIGluIEBpdGVyIGFmdGVyIHByZXBhcmluZyBhIHRyYW5zZmVyLiAgSW4gdGhhdCBjYXNlLCB0aGUgbm9uLXJlc2lkZW50XFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYz02OTY9c3RydWN0IGlvbWFwX2RpbyAqXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6Njk3Ol9faW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY5OC1cXHRcXHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzICpkb3BzLFxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNzE0LVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjcxNTpcXHR0cmFjZV9pb21hcF9kaW9fcndfYmVnaW4oaW9jYiwgaXRlciwgZGlvX2ZsYWdzLCBkb25lX2JlZm9yZSk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNzE2LVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtODg1LVxcdFxcdGlmICghd2FpdF9mb3JfY29tcGxldGlvbikge1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjg4NjpcXHRcXHRcXHR0cmFjZV9pb21hcF9kaW9fcndfcXVldWVkKGlub2RlLCBpb21pLnBvcywgaW9taS5sZW4pO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTg4Ny1cXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlPQ0JRVUVVRUQpO1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTA3LX1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5MDg6RVhQT1JUX1NZTUJPTF9HUEwoX19pb21hcF9kaW9fcncpO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkwOS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYz05MTA9c3NpemVfdFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjkxMTppb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTEyLVxcdFxcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcywgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgKmRvcHMsXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTYtXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTE3OlxcdGRpbyA9IF9faW9tYXBfZGlvX3J3KGlvY2IsIGl0ZXIsIG9wcywgZG9wcywgZGlvX2ZsYWdzLCBwcml2YXRlLFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkxOC1cXHRcXHRcXHQgICAgIGRvbmVfYmVmb3JlKTtcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkyMi19XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTIzOkVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2Rpb19ydyk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTI0LVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9OTk5PXNzaXplX3QgX19pb21hcF9kaW9fcmVhZF9zaW1wbGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDI3LVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwMjg6XFx0dHJhY2VfaW9tYXBfZGlvX3J3X2JlZ2luKGlvY2IsIGl0ZXIsIDAsIDApO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwMjktXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDczLVxcdHN1Ym1pdF9iaW8oYmlvKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMDc0OlxcdHRyYWNlX2lvbWFwX2Rpb19yd19xdWV1ZWQoaW9taS1cXHUwMDNlaW5vZGUsIGlvY2ItXFx1MDAzZWtpX3BvcywgaW9taS1cXHUwMDNlbGVuKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDc1LVxcdHJldHVybiAtRUlPQ0JRVUVVRUQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ1OjIxLjkxNDY1NjQxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MzU0OTM0NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW9tYXAgRGlyZWN0IEkvTyBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGlvbWFwIGRpcmVjdCBJL08gY29kZSwgc3BlY2lmaWNhbGx5IGBpb21hcF9kaW9fcndgIGFuZCBgX19pb21hcF9kaW9fcndgLiBUaGVzZSBhcmUsIHdpdGhvdXQgYSBkb3VidCwgdGhlIGNvcmUgZW50cnkgcG9pbnRzIGZvciBkaXJlY3QgSS9PIG9wZXJhdGlvbnMgd2l0aGluIGlvbWFwLiBHaXZlbiB0aGVpciBmdW5kYW1lbnRhbCByb2xlLCB0aGV5J3JlIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgdGhlbSBvbiBteSBsaXN0LCBmcm9udCBhbmQgY2VudGVyLlxuXG5Ob3csIGJlZm9yZSBJIGRpdmUgaW50byBjb25zdHJ1Y3RpbmcgZnV6eiBjYXNlcywgaXQncyBwcnVkZW50IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGllZCB0byBpb21hcCdzIGZ1bmN0aW9uYWxpdHkuIFRoZXJlIG1pZ2h0IGJlIHNwZWNpZmljIGBDT05GSUdgIHNldHRpbmdzIHRoYXQgZW5hYmxlIG9yIGRpc2FibGUgY2VydGFpbiBmZWF0dXJlcyBvciBjb2RlcGF0aHMgdGhhdCBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgd2hlbiBjcmFmdGluZyBteSBmdXp6aW5nIGVudmlyb25tZW50IGFuZCBzZXR1cC4gRGlzY292ZXJpbmcgdGhlc2Ugd2lsbCBvcHRpbWl6ZSBteSBjb3ZlcmFnZSBhbmQgZW5zdXJlIEknbSBoaXR0aW5nIGFsbCB0aGUgcmVsZXZhbnQgY29kZS4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgdG8gZW5zdXJlIGFsbCBwb3RlbnRpYWxseSBpbXBvcnRhbnQgQ09ORklHcyBhcmUgZW5hYmxlZCBpbiBteSBmdXp6aW5nIHRhcmdldC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjAyMSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ1OjI1Ljg1MDE1MjQzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODM1MDA3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRlNfSU9NQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTEyPWNvbmZpZyBWQUxJREFURV9GU19QQVJTRVJcXG4tLVxcbmZzL0tjb25maWctMTctXFxuZnMvS2NvbmZpZzoxODpjb25maWcgRlNfSU9NQVBcXG5mcy9LY29uZmlnLTE5LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NDU6MjUuODk4NTA4Njg3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NTQxNTkxNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgRlNfSU9NQVBgIEZsYWcqKlxuXG5SaWdodCwgYEZTX0lPTUFQYC4gSXQncyBhIGJvb2xlYW4sIGEgcHJldHR5IGltcG9ydGFudCBvbmUgYXQgdGhhdCwgZ2VuZXJhbGx5IGVuYWJsZWQgYnkgdGhlIGJpZyBwbGF5ZXJzIGluIHRoZSBmaWxlc3lzdGVtIGdhbWU6IFhGUywgZXh0NCwgYnRyZnMsIHRoYXQga2luZCBvZiB0aGluZy4gU28sIGxldCdzIGRyaWxsIGRvd24gYW5kIHNlZSBleGFjdGx5IHdoYXQncyB0cmlnZ2VyaW5nIGl0cyBzZWxlY3Rpb24uIFdoYXQgY29tcG9uZW50cywgd2hhdCBrZXJuZWwgZmVhdHVyZXMsIHdoYXQgc3BlY2lmaWMgZmlsZXN5c3RlbSBvcHRpb25zIGFyZSBkZWNpZGluZyB0aGF0IHRoaXMgcGFydGljdWxhciBmbGFnIG5lZWRzIHRvIGJlIHNldD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcyBhbmQgaW1wbGljYXRpb25zIGZyb20gYSBzeXN0ZW1zIHBlcnNwZWN0aXZlLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZWJhc2UgYW5kIHRyYWNlIHRoZSBhY3RpdmF0aW9uIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzOTgsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0NToyOC43NTI2NzAzNzNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTIxNDc2NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IEZTX0lPTUFQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lvbWFwL3BvcnRpbmcucnN0PTQ3PUZpcnN0LCBhZGQgYGAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW9tYXAuaFxcdTAwM2VgYCBmcm9tIHlvdXIgc291cmNlIGNvZGUgYW5kIGFkZFxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaW9tYXAvcG9ydGluZy5yc3Q6NDg6YGBzZWxlY3QgRlNfSU9NQVBgYCB0byB5b3VyIGZpbGVzeXN0ZW0ncyBLY29uZmlnIG9wdGlvbi5cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lvbWFwL3BvcnRpbmcucnN0LTQ5LUJ1aWxkIHRoZSBrZXJuZWwsIHJ1biBmc3Rlc3RzIHdpdGggdGhlIGBgLWcgYWxsYGAgb3B0aW9uIGFjcm9zcyBhIHdpZGVcXG4tLVxcbmJsb2NrL0tjb25maWc9NT1tZW51Y29uZmlnIEJMT0NLXFxuLS1cXG5ibG9jay9LY29uZmlnLTctICAgICAgIGRlZmF1bHQgeVxcbmJsb2NrL0tjb25maWc6ODogICAgICAgc2VsZWN0IEZTX0lPTUFQXFxuYmxvY2svS2NvbmZpZy05LSAgICAgICBzZWxlY3QgU0JJVE1BUFxcbi0tXFxuZnMvS2NvbmZpZz01OD1jb25maWcgRlNfREFYXFxuLS1cXG5mcy9LY29uZmlnLTYxLVxcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcXG5mcy9LY29uZmlnOjYyOlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL0tjb25maWctNjMtXFx0c2VsZWN0IERBWFxcbi0tXFxuZnMvYnRyZnMvS2NvbmZpZz0zPWNvbmZpZyBCVFJGU19GU1xcbi0tXFxuZnMvYnRyZnMvS2NvbmZpZy0xNC1cXHRzZWxlY3QgWlNURF9ERUNPTVBSRVNTXFxuZnMvYnRyZnMvS2NvbmZpZzoxNTpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9idHJmcy9LY29uZmlnLTE2LVxcdHNlbGVjdCBSQUlENl9QUVxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZz0zPWNvbmZpZyBFUk9GU19GU1xcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy04LVxcdHNlbGVjdCBDUllQVE9fREVGTEFURSBpZiBFUk9GU19GU19aSVBfQUNDRUxcXG5mcy9lcm9mcy9LY29uZmlnOjk6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMvZXJvZnMvS2NvbmZpZy0xMC1cXHRzZWxlY3QgTFo0X0RFQ09NUFJFU1MgaWYgRVJPRlNfRlNfWklQXFxuLS1cXG5mcy9leGZhdC9LY29uZmlnPTM9Y29uZmlnIEVYRkFUX0ZTXFxuLS1cXG5mcy9leGZhdC9LY29uZmlnLTYtXFx0c2VsZWN0IE5MU1xcbmZzL2V4ZmF0L0tjb25maWc6NzpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9leGZhdC9LY29uZmlnLTgtXFx0aGVscFxcbi0tXFxuZnMvZXh0Mi9LY29uZmlnPTI9Y29uZmlnIEVYVDJfRlNcXG4tLVxcbmZzL2V4dDIvS2NvbmZpZy00LVxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbmZzL2V4dDIvS2NvbmZpZzo1OlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL2V4dDIvS2NvbmZpZy02LVxcdGhlbHBcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZz0yPWNvbmZpZyBFWFQ0X0ZTXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNy1cXHRzZWxlY3QgQ1JDMzJcXG5mcy9leHQ0L0tjb25maWc6ODpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9leHQ0L0tjb25maWctOS1cXHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cXG4tLVxcbmZzL2YyZnMvS2NvbmZpZz0yPWNvbmZpZyBGMkZTX0ZTXFxuLS1cXG5mcy9mMmZzL0tjb25maWctOS1cXHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cXG5mcy9mMmZzL0tjb25maWc6MTA6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMvZjJmcy9LY29uZmlnLTExLVxcdHNlbGVjdCBMWjRfQ09NUFJFU1MgaWYgRjJGU19GU19MWjRcXG4tLVxcbmZzL2Z1c2UvS2NvbmZpZz0yPWNvbmZpZyBGVVNFX0ZTXFxuLS1cXG5mcy9mdXNlL0tjb25maWctNC1cXHRzZWxlY3QgRlNfUE9TSVhfQUNMXFxuZnMvZnVzZS9LY29uZmlnOjU6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMvZnVzZS9LY29uZmlnLTYtXFx0aGVscFxcbi0tXFxuZnMvZ2ZzMi9LY29uZmlnPTI9Y29uZmlnIEdGUzJfRlNcXG4tLVxcbmZzL2dmczIvS2NvbmZpZy03LVxcdHNlbGVjdCBRVU9UQUNUTFxcbmZzL2dmczIvS2NvbmZpZzo4OlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL2dmczIvS2NvbmZpZy05LVxcdGhlbHBcXG4tLVxcbmZzL2hwZnMvS2NvbmZpZz0yPWNvbmZpZyBIUEZTX0ZTXFxuLS1cXG5mcy9ocGZzL0tjb25maWctNS1cXHRzZWxlY3QgQlVGRkVSX0hFQURcXG5mcy9ocGZzL0tjb25maWc6NjpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9ocGZzL0tjb25maWctNy1cXHRoZWxwXFxuLS1cXG5mcy9uaWxmczIvS2NvbmZpZz0yPWNvbmZpZyBOSUxGUzJfRlNcXG4tLVxcbmZzL25pbGZzMi9LY29uZmlnLTUtXFx0c2VsZWN0IENSQzMyXFxuZnMvbmlsZnMyL0tjb25maWc6NjpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9uaWxmczIvS2NvbmZpZy03LVxcdGhlbHBcXG4tLVxcbmZzL250ZnMvS2NvbmZpZz0yPWNvbmZpZyBOVEZTX0ZTXFxuLS1cXG5mcy9udGZzL0tjb25maWctNC1cXHRzZWxlY3QgTkxTXFxuZnMvbnRmcy9LY29uZmlnOjU6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMvbnRmcy9LY29uZmlnLTYtXFx0aGVscFxcbi0tXFxuZnMveGZzL0tjb25maWc9Mj1jb25maWcgWEZTX0ZTXFxuLS1cXG5mcy94ZnMvS2NvbmZpZy02LVxcdHNlbGVjdCBDUkMzMlxcbmZzL3hmcy9LY29uZmlnOjc6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMveGZzL0tjb25maWctOC1cXHRoZWxwXFxuLS1cXG5mcy96b25lZnMvS2NvbmZpZz0xPWNvbmZpZyBaT05FRlNfRlNcXG4tLVxcbmZzL3pvbmVmcy9LY29uZmlnLTQtXFx0ZGVwZW5kcyBvbiBCTEtfREVWX1pPTkVEXFxuZnMvem9uZWZzL0tjb25maWc6NTpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy96b25lZnMvS2NvbmZpZy02LVxcdHNlbGVjdCBDUkMzMlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0NTozMC42MDQ4MjQzNTFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIyMjIxNzQzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IEFuYWx5c2lzIG9mIHRoZSBpb21hcCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgYEZTX0lPTUFQYCBjb25maWd1cmF0aW9uLiBJdCdzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgYnkgcXVpdGUgYSBmZXcgZmlsZSBzeXN0ZW1zLCBsaWtlIGBFWFQ0X0ZTYCwgYFhGU19GU2AsIGFuZCBgQlRSRlNfRlNgLiBBIHN0cmFpZ2h0Zm9yd2FyZCBhcHByb2FjaCB0byBlbnN1cmUgaW9tYXAgaXMgcHJlc2VudCB3b3VsZCBiZSB0byBkaXJlY3RseSBlbmFibGUgdGhlc2UgZmlsZXN5c3RlbSBjb25maWdzLiBCdXQgaG9sZCBvbi4uLiBgQkxPQ0tgIGFsc28gc2VsZWN0cyBgRlNfSU9NQVBgPyBZZXMsIHRoYXQncyByaWdodCwgYGJsb2NrL0tjb25maWdgIHRha2VzIGNhcmUgb2YgdGhhdCBkZXBlbmRlbmN5LiBUaGF0IG1lYW5zLCBwcmFjdGljYWxseSBzcGVha2luZywgaW9tYXAgaXMgYWx3YXlzIGVuYWJsZWQgYXMgbG9uZyBhcyB0aGUgYmxvY2sgZGV2aWNlIHN1cHBvcnQgaXMgdGhlcmUuXG5cbk5vdywgY29uc2lkZXJpbmcgdGhlIHBhdGNoIEknbSBleGFtaW5pbmcsIGl0IG1vZGlmaWVzIGBpb21hcF9kaW9faG9sZV9pdGVyYC4gVGhpcyBpcyBhIGNydWNpYWwgZnVuY3Rpb24gYXMgaXQncyBjYWxsZWQgYnkgYGlvbWFwX2Rpb19pdGVyYCwgd2hpY2gsIGluIHR1cm4sIGlzIGludm9rZWQgYnkgYF9faW9tYXBfZGlvX3J3YCBhbmQgYGlvbWFwX2Rpb19yd2AuIEdpdmVuIHRoaXMgY2FsbCBjaGFpbiwgaXQgc3VnZ2VzdHMgbXkgZnV6emluZyBlZmZvcnRzIHNob3VsZCBwcmltYXJpbHkgZm9jdXMgb24gYGlvbWFwX2Rpb19yd2AgYW5kIGBfX2lvbWFwX2Rpb19yd2AuIFRoZXkncmUgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50cy5cblxuSSBhbHNvIHdvbmRlciBpZiBgX19pb21hcF9kaW9fcmVhZF9zaW1wbGVgIG1pZ2h0IGJlIHJlbGV2YW50LCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZS4gTGV0IG1lIGRvdWJsZS1jaGVjayB3aGV0aGVyIGl0IGNhbGxzIGBpb21hcF9kaW9faG9sZV9pdGVyYC4gSSBuZWVkIHRvIHJ1bGUgaXQgaW4gb3Igb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODI1LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ1OjM1LjgyNzA0NDM0M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyMTk4NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19pb21hcF9kaW9fcmVhZF9zaW1wbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaW9tYXAvZGlyZWN0LWlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW9tYXAvZGlyZWN0LWlvLmM9OTgxPXN0YXRpYyB2b2lkIGlvbWFwX2Rpb19zaW1wbGVfZW5kX2lvKHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk5OC1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5OTk6c3NpemVfdCBfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDAwLVxcdFxcdHN0cnVjdCBpb21hcF9pdGVyICppb21pKVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTA4NC19XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTA4NTpFWFBPUlRfU1lNQk9MX0dQTChfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZSk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTA4Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NDU6MzUuODcxMjcxMDdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEzMDIxMjE3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeTpcblxuKipEaWdnaW5nIGludG8gRGlyZWN0IEkvTyBhbmQgSXRlcmF0b3JzKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlYCBhbmQgaW1tZWRpYXRlbHkgYSBxdWVzdGlvbiBwb3BzIHVwOiBpcyBpdCBjYWxsaW5nIGBpb21hcF9kaW9fYmlvX2l0ZXJgIGRpcmVjdGx5PyBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQncyBhIGtleSBvcHRpbWl6YXRpb24gcG9pbnQsIHNvIGl0IHdhcnJhbnRzIGEgcXVpY2sgY2hlY2suIEkgd2FudCB0byBzZWUgaWYgdGhpcyBmdW5jdGlvbiBpcyBsZXZlcmFnaW5nIHRoZSBpdGVyYXRvciBhcHByb2FjaCBmb3IgRGlyZWN0IEkvTyByZWFkcy4gSWYgaXQgaXMsIHRoZW4gd2UncmUgbGlrZWx5IGluIGEgZ29vZCBzcG90IHBlcmZvcm1hbmNlLXdpc2UsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGUgaW1wbGVtZW50YXRpb24gdG8gYmUgY2VydGFpbiB0aGF0IHRoZSBpbnRlcmFjdGlvbiBpcyBhcyBleHBlY3RlZC4gVGhpcyBkaXJlY3QgY2FsbCBpcyBzaWduaWZpY2FudCBpbiBEaXJlY3QgSS9PIGFzIHRoZSBkaXJlY3QgdXNlIG9mIHRoZSBiaW8gaXRlcmF0b3IgaXMgbGlrZWx5IGEgY3J1Y2lhbCBmYWN0b3IgZm9yIHJlZHVjaW5nIG92ZXJoZWFkLiBVbmRlcnN0YW5kaW5nIHRoaXMgcGF0aCBpcyBpbXBvcnRhbnQgYXMgaXQgaXMgYSBjb21tb24gZmFjdG9yIGluIHZhcmlvdXMgZmlsZSBzeXN0ZW1zLiBUaGlzIGlzIHRoZSBmaXJzdCBwbGFjZSBJJ2QgbG9vayBpbiBhIHBlcmZvcm1hbmNlIHByb2ZpbGUgYW5kIGlzIGxpa2VseSB0aGUgY29yZSBvZiB0aGUgRGlyZWN0IEkvTyBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODYzOCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ1OjM5LjAwMTQ4NTY4OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM2MjAzODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9tYXBfZGlvX2Jpb19pdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2lvbWFwL2RpcmVjdC1pby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2lvbWFwL2RpcmVjdC1pby5jPTI5OT1zdGF0aWMgaW50IGlvbWFwX2Rpb196ZXJvKGNvbnN0IHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8sXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0zMzQtXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MzM1OnN0YXRpYyBzc2l6ZV90IGlvbWFwX2Rpb19iaW9faXRlcl9vbmUoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMzM2LVxcdFxcdHN0cnVjdCBpb21hcF9kaW8gKmRpbywgbG9mZl90IHBvcywgdW5zaWduZWQgaW50IGFsaWdubWVudCxcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTQwNz1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpb21hcF9kaW9fYWxpZ25tZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy00MTQtXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NDE1OnN0YXRpYyBpbnQgaW9tYXBfZGlvX2Jpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNDE2LXtcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTU1Ni1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo1NTc6XFx0XFx0cmV0ID0gaW9tYXBfZGlvX2Jpb19pdGVyX29uZShpdGVyLCBkaW8sIHBvcywgYWxpZ25tZW50LCBiaW9fb3BmKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy01NTgtXFx0XFx0aWYgKHVubGlrZWx5KHJldCBcXHUwMDNjIDApKSB7XFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYz02NDU9c3RhdGljIGludCBpb21hcF9kaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjU0LVxcdFxcdFxcdHJldHVybiBpb21hcF9kaW9faG9sZV9pdGVyKGl0ZXIsIGRpbyk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NjU1OlxcdFxcdHJldHVybiBpb21hcF9kaW9fYmlvX2l0ZXIoaXRlciwgZGlvKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NTYtXFx0Y2FzZSBJT01BUF9NQVBQRUQ6XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NjU3OlxcdFxcdHJldHVybiBpb21hcF9kaW9fYmlvX2l0ZXIoaXRlciwgZGlvKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NTgtXFx0Y2FzZSBJT01BUF9JTkxJTkU6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ1OjM5LjA0NTExMTE0N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTYyMjE2ODU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi5cblxuKipBbmFseXppbmcgYF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlYCBmb3IgSG9sZSBIYW5kbGluZyoqXG5cblJpZ2h0LCBzbyBJJ20gcHJldHR5IHN1cmUgYF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlYCBieXBhc3NlcyBgaW9tYXBfZGlvX2hvbGVfaXRlcmAuIEl0J3MganVzdCBhIGh1bmNoLCBidXQgdGhlc2Ugc2ltcGxlciBkaXJlY3QgSS9PIHJlYWQgZnVuY3Rpb25zIG9mdGVuIGhhbmRsZSBob2xlcyBpbiBhIG1vcmUgc3RyYWlnaHRmb3J3YXJkIG1hbm5lci4gVG8gY29uZmlybSB0aGlzLCBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLiBMZXQncyBnZXQgdGhlIHNvdXJjZSBmb3IgYF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IGl0cyBpbXBsZW1lbnRhdGlvbi4gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIGxvZ2ljIHdpdGhpbiB0aGF0IGZ1bmN0aW9uJ3MgYm9keSB0byBkZWZpbml0aXZlbHkgZGV0ZXJtaW5lIGhvdyBpdCBhZGRyZXNzZXMgb3IgaWdub3JlcyB0aGUgcG90ZW50aWFsIGZvciBzcGFyc2UgZmlsZXMgYW5kIGhvbGVzIGR1cmluZyB0aGUgcmVhZCBvcGVyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0OTUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0NTo0Mi4yMDczMzA5MTRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2lvbWFwL2RpcmVjdC1pby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk5OSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5OTk6XFx0c3NpemVfdCBfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4xMDAwOlxcdFxcdFxcdHN0cnVjdCBpb21hcF9pdGVyICppb21pKVxcbjEwMDE6XFx0e1xcbjEwMDI6XFx0XFx0Z2ZwX3QgZ2ZwID0gKGlvbWktXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9NQVBfTk9XQUlUKSA/IEdGUF9OT1dBSVQgOiBHRlBfS0VSTkVMO1xcbjEwMDM6XFx0XFx0c3RydWN0IGlvbWFwX2Rpb19zaW1wbGUgKnNyO1xcbjEwMDQ6XFx0XFx0dW5zaWduZWQgaW50IGFsaWdubWVudDtcXG4xMDA1OlxcdFxcdHN0cnVjdCBiaW8gKmJpbztcXG4xMDA2OlxcdFxcdHNzaXplX3QgcmV0O1xcbjEwMDc6XFx0XFxuMTAwODpcXHRcXHRpZiAoaW9taS1cXHUwMDNlaW9tYXAudHlwZSAhPSBJT01BUF9NQVBQRUQgfHxcXG4xMDA5OlxcdFxcdCAgICBpb21pLVxcdTAwM2Vpb21hcC5vZmZzZXQgKyBpb21pLVxcdTAwM2Vpb21hcC5sZW5ndGggXFx1MDAzYyBpb21pLVxcdTAwM2Vwb3MgKyBpb21pLVxcdTAwM2VsZW4gfHxcXG4xMDEwOlxcdFxcdCAgICAoaW9taS1cXHUwMDNlaW9tYXAuZmxhZ3MgXFx1MDAyNiBJT01BUF9GX0lOVEVHUklUWSkpIHtcXG4xMDExOlxcdFxcdFxcdHJldCA9IC1FTk9UQkxLO1xcbjEwMTI6XFx0XFx0XFx0Z290byBvdXRfZGlvX2VuZDtcXG4xMDEzOlxcdFxcdH1cXG4xMDE0OlxcdFxcbjEwMTU6XFx0XFx0YWxpZ25tZW50ID0gaW9tYXBfZGlvX2FsaWdubWVudChpb21pLVxcdTAwM2Vpbm9kZSwgaW9taS1cXHUwMDNlaW9tYXAuYmRldiwgMCk7XFxuMTAxNjpcXHRcXHRpZiAoKGlvbWktXFx1MDAzZXBvcyB8IGlvbWktXFx1MDAzZWxlbikgXFx1MDAyNiAoYWxpZ25tZW50IC0gMSkpIHtcXG4xMDE3OlxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuMTAxODpcXHRcXHRcXHRnb3RvIG91dF9kaW9fZW5kO1xcbjEwMTk6XFx0XFx0fVxcbjEwMjA6XFx0XFxuMTAyMTpcXHRcXHRpZiAodW5saWtlbHkoIWlvbWktXFx1MDAzZWlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Rpb19kb25lX3dxIFxcdTAwMjZcXHUwMDI2XFxuMTAyMjpcXHRcXHRcXHRcXHQhaXNfc3luY19raW9jYihpb2NiKSkpIHtcXG4xMDIzOlxcdFxcdFxcdHJldCA9IHNiX2luaXRfZGlvX2RvbmVfd3EoaW9taS1cXHUwMDNlaW5vZGUtXFx1MDAzZWlfc2IpO1xcbjEwMjQ6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTAyNTpcXHRcXHRcXHRcXHRnb3RvIG91dF9kaW9fZW5kO1xcbjEwMjY6XFx0XFx0fVxcbjEwMjc6XFx0XFxuMTAyODpcXHRcXHR0cmFjZV9pb21hcF9kaW9fcndfYmVnaW4oaW9jYiwgaXRlciwgMCwgMCk7XFxuMTAyOTpcXHRcXG4xMDMwOlxcdFxcdGJpbyA9IGJpb19hbGxvY19iaW9zZXQoaW9taS1cXHUwMDNlaW9tYXAuYmRldixcXG4xMDMxOlxcdFxcdFxcdFxcdCAgICAgICBiaW9faW92X3ZlY3NfdG9fYWxsb2MoaXRlciwgQklPX01BWF9WRUNTKSxcXG4xMDMyOlxcdFxcdFxcdFxcdCAgICAgICBSRVFfT1BfUkVBRCwgZ2ZwLCBcXHUwMDI2aW9tYXBfZGlvX3NpbXBsZV9wb29sKTtcXG4xMDMzOlxcdFxcdGlmICghYmlvKSB7XFxuMTAzNDpcXHRcXHRcXHRyZXQgPSAtRUFHQUlOO1xcbjEwMzU6XFx0XFx0XFx0Z290byBvdXRfZGlvX2VuZDtcXG4xMDM2OlxcdFxcdH1cXG4xMDM3OlxcdFxcdHNyID0gY29udGFpbmVyX29mKGJpbywgc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUsIGJpbyk7XFxuMTAzODpcXHRcXHRzci1cXHUwMDNlaW9jYiA9IGlvY2I7XFxuMTAzOTpcXHRcXHRzci1cXHUwMDNlZGlvX2ZsYWdzID0gMDtcXG4xMDQwOlxcdFxcbjEwNDE6XFx0XFx0YmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IGlvbWFwX3NlY3RvcihcXHUwMDI2aW9taS1cXHUwMDNlaW9tYXAsIGlvbWktXFx1MDAzZXBvcyk7XFxuMTA0MjpcXHRcXHRiaW8tXFx1MDAzZWJpX2lvcHJpbyA9IGlvY2ItXFx1MDAzZWtpX2lvcHJpbztcXG4xMDQzOlxcdFxcbjEwNDQ6XFx0XFx0cmV0ID0gYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhiaW8sIGl0ZXIsIGFsaWdubWVudCAtIDEpO1xcbjEwNDU6XFx0XFx0aWYgKHVubGlrZWx5KHJldCkpXFxuMTA0NjpcXHRcXHRcXHRnb3RvIG91dF9iaW9fcHV0O1xcbjEwNDc6XFx0XFxuMTA0ODpcXHRcXHRpZiAoYmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NpemUgIT0gaW9taS1cXHUwMDNlbGVuKSB7XFxuMTA0OTpcXHRcXHRcXHRpb3ZfaXRlcl9yZXZlcnQoaXRlciwgYmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NpemUpO1xcbjEwNTA6XFx0XFx0XFx0cmV0ID0gLUVOT1RCTEs7XFxuMTA1MTpcXHRcXHRcXHRnb3RvIG91dF9iaW9fcmVsZWFzZV9wYWdlcztcXG4xMDUyOlxcdFxcdH1cXG4xMDUzOlxcdFxcbjEwNTQ6XFx0XFx0c3ItXFx1MDAzZXNpemUgPSBiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2l6ZTtcXG4xMDU1OlxcdFxcdGlmICh1c2VyX2JhY2tlZF9pdGVyKGl0ZXIpKSB7XFxuMTA1NjpcXHRcXHRcXHRiaW9fc2V0X3BhZ2VzX2RpcnR5KGJpbyk7XFxuMTA1NzpcXHRcXHRcXHRzci1cXHUwMDNlZGlvX2ZsYWdzIHw9IElPTUFQX0RJT19VU0VSX0JBQ0tFRDtcXG4xMDU4OlxcdFxcdH1cXG4xMDU5OlxcdFxcbjEwNjA6XFx0XFx0aWYgKGlvY2ItXFx1MDAzZWtpX2ZsYWdzIFxcdTAwMjYgSU9DQl9OT1dBSVQpXFxuMTA2MTpcXHRcXHRcXHRiaW8tXFx1MDAzZWJpX29wZiB8PSBSRVFfTk9XQUlUO1xcbjEwNjI6XFx0XFxuMTA2MzpcXHRcXHRpZiAoaXNfc3luY19raW9jYihpb2NiKSkge1xcbjEwNjQ6XFx0XFx0XFx0c3VibWl0X2Jpb193YWl0KGJpbyk7XFxuMTA2NTpcXHRcXHRcXHRyZXR1cm4gaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZShzcik7XFxuMTA2NjpcXHRcXHR9XFxuMTA2NzpcXHRcXG4xMDY4OlxcdFxcdGlmICgoaW9jYi1cXHUwMDNla2lfZmxhZ3MgXFx1MDAyNiBJT0NCX0hJUFJJKSkge1xcbjEwNjk6XFx0XFx0XFx0YmlvLVxcdTAwM2ViaV9vcGYgfD0gUkVRX1BPTExFRDtcXG4xMDcwOlxcdFxcdFxcdFdSSVRFX09OQ0UoaW9jYi1cXHUwMDNlcHJpdmF0ZSwgYmlvKTtcXG4xMDcxOlxcdFxcdH1cXG4xMDcyOlxcdFxcdGJpby1cXHUwMDNlYmlfZW5kX2lvID0gaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW87XFxuMTA3MzpcXHRcXHRzdWJtaXRfYmlvKGJpbyk7XFxuMTA3NDpcXHRcXHR0cmFjZV9pb21hcF9kaW9fcndfcXVldWVkKGlvbWktXFx1MDAzZWlub2RlLCBpb2NiLVxcdTAwM2VraV9wb3MsIGlvbWktXFx1MDAzZWxlbik7XFxuMTA3NTpcXHRcXHRyZXR1cm4gLUVJT0NCUVVFVUVEO1xcbjEwNzY6XFx0XFxuMTA3NzpcXHRvdXRfYmlvX3JlbGVhc2VfcGFnZXM6XFxuMTA3ODpcXHRcXHRiaW9fcmVsZWFzZV9wYWdlcyhiaW8sIGZhbHNlKTtcXG4xMDc5OlxcdG91dF9iaW9fcHV0OlxcbjEwODA6XFx0XFx0YmlvX3B1dChiaW8pO1xcbjEwODE6XFx0b3V0X2Rpb19lbmQ6XFxuMTA4MjpcXHRcXHRpbm9kZV9kaW9fZW5kKGlvbWktXFx1MDAzZWlub2RlKTtcXG4xMDgzOlxcdFxcdHJldHVybiByZXQ7XFxuMTA4NDpcXHR9XFxuMTA4NTpcXHRFWFBPUlRfU1lNQk9MX0dQTChfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZSk7XFxuMTA4NjpcXHRcXG4xMDg3OlxcdHN0YXRpYyBpbnQgX19pbml0IGlvbWFwX2Rpb19pbml0KHZvaWQpXFxuMTA4ODpcXHR7XFxuMTA4OTpcXHRcXHRyZXR1cm4gYmlvc2V0X2luaXQoXFx1MDAyNmlvbWFwX2Rpb19zaW1wbGVfcG9vbCwgNCxcXG4xMDkwOlxcdFxcdFxcdFxcdCAgIG9mZnNldG9mKHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlLCBiaW8pLFxcbjEwOTE6XFx0XFx0XFx0XFx0ICAgQklPU0VUX05FRURfQlZFQ1MgfCBCSU9TRVRfUEVSQ1BVX0NBQ0hFKTtcXG4xMDkyOlxcdH1cXG4xMDkzOlxcdGZzX2luaXRjYWxsKGlvbWFwX2Rpb19pbml0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NDU6NDIuMjA3NDYyNDA0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3OTQyODI4MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczpcblxuKipEaWdnaW5nIGludG8gdGhlIEkvTyBNYXBwaW5nIEZ1bmN0aW9ucyoqXG5cbkFscmlnaHQsIHNvIEknbSB0cnlpbmcgdG8gdHJhY2UgdGhlIGNvbnRyb2wgZmxvdyBoZXJlLCBhbmQgSSd2ZSBqdXN0IHJlYWxpemVkIHRoYXQgYF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlYCAqZG9lc24ndCogYWN0dWFsbHkgY2FsbCBgaW9tYXBfZGlvX2hvbGVfaXRlcmAsIHdoaWNoIGlzIHdoZXJlIEkgd2FzIGV4cGVjdGluZyBpdCB0byBiZS4gT2theSwgdGhhdCBzaGlmdHMgdGhlIGZvY3VzLiBNeSBhdHRlbnRpb24gc2hvdWxkIGJlIG9uIGBfX2lvbWFwX2Rpb19yd2AgYW5kIHRoZSB3cmFwcGVyLCBgaW9tYXBfZGlvX3J3YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyBhdCB0aG9zZSBsZXZlbHMuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCBgaW9tYXBfZGlvX3J3YCBpcywgaW4gZmFjdCwgdGhlIHdyYXBwZXIuXG5cbk5vdywgYmVmb3JlIEkgZGVlcCBkaXZlIHRvbyBtdWNoLCBpdCdzIHdvcnRoIGEgcXVpY2sgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZXhwb3J0ZWQgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdGhhdCBJIHNob3VsZCBiZSBjb25zaWRlcmluZyBhdCB0aGlzIHN0YWdlLiBJdCdzIGEgZ29vZCBwcmFjdGljZSB0byBub3QgbWlzcyB0aGUgd29vZCBmb3IgdGhlIHRyZWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM4MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NDU6NDYuMDAxNzQ3NzIzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzcyMjg3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2lvbWFwL2RpcmVjdC1pby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2lvbWFwL2RpcmVjdC1pby5jPTEwNT1zc2l6ZV90IGlvbWFwX2Rpb19jb21wbGV0ZShzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xNjAtfVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjE2MTpFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9kaW9fY29tcGxldGUpO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTE2Mi1cXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTI3Mj12b2lkIGlvbWFwX2Rpb19iaW9fZW5kX2lvKHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTI3OS19XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MjgwOkVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2Rpb19iaW9fZW5kX2lvKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0yODEtXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYz02OTc9X19pb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MDctfVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjkwODpFWFBPUlRfU1lNQk9MX0dQTChfX2lvbWFwX2Rpb19ydyk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTA5LVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9OTExPWlvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkyMi19XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTIzOkVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2Rpb19ydyk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTI0LVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9OTk5PXNzaXplX3QgX19pb21hcF9kaW9fcmVhZF9zaW1wbGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDg0LX1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMDg1OkVYUE9SVF9TWU1CT0xfR1BMKF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDg2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0NTo0Ni4wNDk0NzcxMzFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc2MTAyNDg1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJT01BUCBDb25maWd1cmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gbmFpbCBkb3duIHRoZSBjb3JlIEkvTyBtYXAgY29uZmlndXJhdGlvbnMgaGVyZS4gSXQgbG9va3MgbGlrZSB0aGUgaGVhdnkgbGlmdGVycyBhcmUgYF9faW9tYXBfZGlvX3J3YCBhbmQgYGlvbWFwX2Rpb19yd2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY3J1Y2lhbCBjb25maWcgc2V0dGluZ3MgSSdtIG1pc3NpbmcuXG5cbkxldCdzIHNlZeKApiBgRlNfSU9NQVBgIHNlZW1zIHRvIGJlIHRoZSBvbmUgdGhhdCBnZXRzIHNlbGVjdGVkIGJ5IGBFWFQ0X0ZTYCwgYFhGU19GU2AsIGFuZCBgQlRSRlNfRlNgLiBSaWdodCwgc28ganVzdCBsaXN0aW5nIHRob3NlIHdvdWxkIGNvdmVyIGl0LiBIYW5nIG9uIGEgc2Vjb25kLCB0aGF0J3Mgbm90IHF1aXRlIHJpZ2h0LiBgQkxPQ0tgIHNlbGVjdHMgYEZTX0lPTUFQYCwgd2hpY2ggbWVhbnMgYEZTX0lPTUFQYCBpcyBpbXBsaWNpdGx5IGVuYWJsZWQgaWYgYEJMT0NLYCBpcyBlbmFibGVkLiBJdCdzIG5vdCBhIGRpcmVjdCBkZXBlbmRlbmN5LiBPa2F5LCBzbyBJIHNob3VsZCBqdXN0IGxpc3QgYEJMT0NLYCwgYEVYVDRfRlNgLCBgWEZTX0ZTYCwgYW5kIGBCVFJGU19GU2AgZm9yIGNsYXJpdHkuIFRoYXQgY292ZXJzIHRoZSBwcmltYXJ5IGNhc2VzLlxuXG5Ob3csIEknbGwgcXVpY2tseSBjaGVjayBpZiBhbnkgb3RoZXIgZnVuY3Rpb25zIGNhbGwgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgIGRpcmVjdGx5LiBKdXN0IHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgY29uZmlndXJhdGlvbnMgYXQgcGxheS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyOTQsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NDU6NTEuODEwNTA2NDJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMjYyMjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvbWFwX2Rpb19ob2xlX2l0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaW9tYXAvZGlyZWN0LWlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW9tYXAvZGlyZWN0LWlvLmM9NDE1PXN0YXRpYyBpbnQgaW9tYXBfZGlvX2Jpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy01OTQtXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NTk1OnN0YXRpYyBpbnQgaW9tYXBfZGlvX2hvbGVfaXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTU5Ni17XFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYz02NDU9c3RhdGljIGludCBpb21hcF9kaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjUwLVxcdFxcdFxcdHJldHVybiAtRUlPO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjY1MTpcXHRcXHRyZXR1cm4gaW9tYXBfZGlvX2hvbGVfaXRlcihpdGVyLCBkaW8pO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY1Mi1cXHRjYXNlIElPTUFQX1VOV1JJVFRFTjpcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NTMtXFx0XFx0aWYgKCEoZGlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPTUFQX0RJT19XUklURSkpXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NjU0OlxcdFxcdFxcdHJldHVybiBpb21hcF9kaW9faG9sZV9pdGVyKGl0ZXIsIGRpbyk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjU1LVxcdFxcdHJldHVybiBpb21hcF9kaW9fYmlvX2l0ZXIoaXRlciwgZGlvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NDU6NTEuODUyNzc0OTI3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxNTEwMzcyNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEaW8gSXRlcmF0b3IgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGBpb21hcF9kaW9faXRlcmAuIE15IGluaXRpYWwgaHVuY2ggaXMgdG8gZm9jdXMgZW50aXJlbHkgb24gdGhhdC4gSSdtIGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0aGUgcGF0Y2ggbG9naWMuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIHdvcmtzIGJ5IGFsaWduaW5nIHRoZSBgY29waWVkYCB2YXJpYWJsZSB0byB0aGUgYmxvY2sgc2l6ZSB1c2luZyBgaW9tYXBfZGlvX2FsaWdubWVudGAuIEFmdGVyIGFsaWdubWVudCwgaXQgcmV2ZXJ0cyB0aGUgaXRlcmF0b3IgYnkgY2FsY3VsYXRpbmcgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBgY29waWVkYCBhbmQgdGhlIGFsaWduZWQgdmVyc2lvbi5cblxuUmlnaHQsIEkgc2VlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFpbWVkIGF0IHJlc29sdmluZyBhIHBvdGVudGlhbCBpc3N1ZS4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBhZGRyZXNzIGEgc2l0dWF0aW9uIHdoZXJlIHBhZ2UgZmF1bHQgZmFpbHVyZXMgbWlnaHQgbGVhdmUgYGNvcGllZGAgcGFnZS1hbGlnbmVkIGJ1dCBub3QgYWxpZ25lZCB0byB0aGUgZmlsZSBzeXN0ZW0gYmxvY2sgc2l6ZS4gVGhhdCdzIGEgY2xhc3NpYyBnb3RjaGEsIGFuZCBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdG8gY29uZmlybS5cblxuRm9yIGZ1enppbmcsIEknbGwgemVybyBpbiBvbiB0aGUgZm9sbG93aW5nIHN5bWJvbHM6IGBfX2lvbWFwX2Rpb19yd2AgYW5kIGBpb21hcF9kaW9fcndgLlxuXG5BcyBmb3IgY29uZmlndXJhdGlvbnMsIEknbGwgYmUgc3VyZSB0byB0ZXN0IHRoaXMgd2l0aCBgRVhUNF9GU2AsIGBYRlNfRlNgLCBhbmQgYEJUUkZTX0ZTYC4gTGV0IG1lIHF1aWNrbHkgY29uZmlybSBpZiB0aG9zZSBjb25maWd1cmF0aW9ucyBlbmFibGUgYEZTX0lPTUFQYC4gWWVzLCBJJ3ZlIGFscmVhZHkgY2hlY2tlZCwgaXQgbG9va3MgbGlrZSBgRVhUNF9GU2AsIGBYRlNfRlNgIGFuZCBgQlRSRlNfRlNgIGRvIGFsbCBzZWxlY3QgYEZTX0lPTUFQYC5cblxuSSdsbCB1c2UgYHNldC1yZXN1bHRzYCB0byByZXR1cm4gdGhlIHZlcmlmaWVkIHJlc3VsdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxMjYsIk91dHB1dFRva2VucyI6MTI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ1OjU4LjAwMzgxNTg0M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3NjIzMDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCIsXG4gICAgXCJYRlNfRlNcIixcbiAgICBcIkJUUkZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19pb21hcF9kaW9fcndcIixcbiAgICBcImlvbWFwX2Rpb19yd1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGlvbWFwIGRpcmVjdCBJL08gbG9naWMgdG8gcHJvcGVybHkgYWxpZ24gdGhlIGNvcGllZCBsZW5ndGggdG8gdGhlIGZpbGVzeXN0ZW0gYmxvY2sgc2l6ZSB3aGVuIGhhbmRsaW5nIGhvbGVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgY29yZSBrZXJuZWwgcGF0aCwgZml4aW5nIGFuIGlzc3VlIHJlbGF0ZWQgdG8gcGFnZSBmYXVsdCBmYWlsdXJlcyBkdXJpbmcgZGlyZWN0IEkvTy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCIsXG4gICAgXCJYRlNfRlNcIixcbiAgICBcIkJUUkZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19pb21hcF9kaW9fcndcIixcbiAgICBcImlvbWFwX2Rpb19yd1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGlvbWFwIGRpcmVjdCBJL08gbG9naWMgdG8gcHJvcGVybHkgYWxpZ24gdGhlIGNvcGllZCBsZW5ndGggdG8gdGhlIGZpbGVzeXN0ZW0gYmxvY2sgc2l6ZSB3aGVuIGhhbmRsaW5nIGhvbGVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgY29yZSBrZXJuZWwgcGF0aCwgZml4aW5nIGFuIGlzc3VlIHJlbGF0ZWQgdG8gcGFnZSBmYXVsdCBmYWlsdXJlcyBkdXJpbmcgZGlyZWN0IEkvTy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow4ms6w[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-01 15:28:15 +0000 UTC FinishedAt: 2026-08-01 15:45:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "fa20f6cb6063f7f1a6a56693d4a8713f19058d23", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "XFS_FS", "BTRFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "fa20f6cb6063f7f1a6a56693d4a8713f19058d23", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "XFS_FS", "BTRFS_FS" ], "series_id": "9d98023b-4249-4697-ab21-ea7cf83805c8" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "__iomap_dio_rw", "iomap_dio_rw" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": { "findings": [ "c9f79a18-3316-44ec-b805-b805b1c49325" ] } } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7WEZTX0ZTJiMzNDssCiAgICAmIzM0O0JUUkZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19pb21hcF9kaW9fcncmIzM0OywKICAgICYjMzQ7aW9tYXBfZGlvX3J3JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGlvbWFwIGRpcmVjdCBJL08gbG9naWMgdG8gcHJvcGVybHkgYWxpZ24gdGhlIGNvcGllZCBsZW5ndGggdG8gdGhlIGZpbGVzeXN0ZW0gYmxvY2sgc2l6ZSB3aGVuIGhhbmRsaW5nIGhvbGVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgY29yZSBrZXJuZWwgcGF0aCwgZml4aW5nIGFuIGlzc3VlIHJlbGF0ZWQgdG8gcGFnZSBmYXVsdCBmYWlsdXJlcyBkdXJpbmcgZGlyZWN0IEkvTy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDE0ZTE1YjM4NzA0YWY3MjNlNDRhNWY1YTU4NGM4NjFkYWEwMTY5YzRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDE1OjQ1OjA3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jIGIvZnMvaW9tYXAvZGlyZWN0LWlvLmNcbmluZGV4IGIzMzY4ZDY0ZTgxYmIuLmE5MDczODg2YzJjNjYgMTAwNjQ0XG4tLS0gYS9mcy9pb21hcC9kaXJlY3QtaW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaW9tYXAvZGlyZWN0LWlvLmNcbkBAIC01OTQsMTIgJiM0Mzs1OTQsMjAgQEAgc3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbiBcbiBzdGF0aWMgaW50IGlvbWFwX2Rpb19ob2xlX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbiB7XG4tXHRsb2ZmX3QgbGVuZ3RoID0gaW92X2l0ZXJfemVybyhpb21hcF9sZW5ndGgoaXRlciksIGRpby1cdTAwM2VzdWJtaXQuaXRlcik7XG4mIzQzO1x0bG9mZl90IGNvcGllZCA9IGlvdl9pdGVyX3plcm8oaW9tYXBfbGVuZ3RoKGl0ZXIpLCBkaW8tXHUwMDNlc3VibWl0Lml0ZXIpO1xuJiM0MztcdHVuc2lnbmVkIGludCBicyA9IGlvbWFwX2Rpb19hbGlnbm1lbnQoaXRlci1cdTAwM2Vpbm9kZSwgaXRlci1cdTAwM2Vpb21hcC5iZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgZGlvLVx1MDAzZWZsYWdzKTtcbiYjNDM7XHRsb2ZmX3QgYWxpZ25lZF9jb3BpZWQgPSByb3VuZF9kb3duKGNvcGllZCwgYnMpO1xuIFxuLVx0ZGlvLVx1MDAzZXNpemUgJiM0Mzs9IGxlbmd0aDtcbi1cdGlmICghbGVuZ3RoKVxuJiM0MztcdC8qXG4mIzQzO1x0ICogSWYgZnMgYmxvY2sgc2l6ZSBpcyBsYXJnZXIgdGhhbiBwYWdlIHNpemUsIHBhZ2UgZmF1bHQgZmFpbHVyZVxuJiM0MztcdCAqIGNhbiBjYXVzZSBAY29waWVkIHRvIGJlIHBhZ2UgYWxpZ25lZCBidXQgbm90IGZzIGJsb2NrIGFsaWduZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aW92X2l0ZXJfcmV2ZXJ0KGRpby1cdTAwM2VzdWJtaXQuaXRlciwgY29waWVkIC0gYWxpZ25lZF9jb3BpZWQpO1xuJiM0MztcdGRpby1cdTAwM2VzaXplICYjNDM7PSBhbGlnbmVkX2NvcGllZDtcbiYjNDM7XHRpZiAoIWFsaWduZWRfY29waWVkKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbi1cdHJldHVybiBpb21hcF9pdGVyX2FkdmFuY2UoaXRlciwgbGVuZ3RoKTtcbiYjNDM7XHRyZXR1cm4gaW9tYXBfaXRlcl9hZHZhbmNlKGl0ZXIsIGFsaWduZWRfY29waWVkKTtcbiB9XG4gXG4gc3RhdGljIGludCBpb21hcF9kaW9faW5saW5lX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKmlvbWksIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7LAogICAgJiMzNDtYRlNfRlMmIzM0OywKICAgICYjMzQ7QlRSRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2lvbWFwX2Rpb19ydyYjMzQ7LAogICAgJiMzNDtpb21hcF9kaW9fcncmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgaW9tYXAgZGlyZWN0IEkvTyBsb2dpYyB0byBwcm9wZXJseSBhbGlnbiB0aGUgY29waWVkIGxlbmd0aCB0byB0aGUgZmlsZXN5c3RlbSBibG9jayBzaXplIHdoZW4gaGFuZGxpbmcgaG9sZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBwYXRoLCBmaXhpbmcgYW4gaXNzdWUgcmVsYXRlZCB0byBwYWdlIGZhdWx0IGZhaWx1cmVzIGR1cmluZyBkaXJlY3QgSS9PLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTRlMTViMzg3MDRhZjcyM2U0NGE1ZjVhNTg0Yzg2MWRhYTAxNjljNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDEgMTU6NDU6MDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9pb21hcC9kaXJlY3QtaW8uYyBiL2ZzL2lvbWFwL2RpcmVjdC1pby5jCmluZGV4IGIzMzY4ZDY0ZTgxYmIuLmE5MDczODg2YzJjNjYgMTAwNjQ0Ci0tLSBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2lvbWFwL2RpcmVjdC1pby5jCkBAIC01OTQsMTIgJiM0Mzs1OTQsMjAgQEAgc3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbykKIAogc3RhdGljIGludCBpb21hcF9kaW9faG9sZV9pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pCiB7Ci0JbG9mZl90IGxlbmd0aCA9IGlvdl9pdGVyX3plcm8oaW9tYXBfbGVuZ3RoKGl0ZXIpLCBkaW8tJmd0O3N1Ym1pdC5pdGVyKTsKJiM0MzsJbG9mZl90IGNvcGllZCA9IGlvdl9pdGVyX3plcm8oaW9tYXBfbGVuZ3RoKGl0ZXIpLCBkaW8tJmd0O3N1Ym1pdC5pdGVyKTsKJiM0MzsJdW5zaWduZWQgaW50IGJzID0gaW9tYXBfZGlvX2FsaWdubWVudChpdGVyLSZndDtpbm9kZSwgaXRlci0mZ3Q7aW9tYXAuYmRldiwKJiM0MzsJCQkJCSAgICAgIGRpby0mZ3Q7ZmxhZ3MpOwomIzQzOwlsb2ZmX3QgYWxpZ25lZF9jb3BpZWQgPSByb3VuZF9kb3duKGNvcGllZCwgYnMpOwogCi0JZGlvLSZndDtzaXplICYjNDM7PSBsZW5ndGg7Ci0JaWYgKCFsZW5ndGgpCiYjNDM7CS8qCiYjNDM7CSAqIElmIGZzIGJsb2NrIHNpemUgaXMgbGFyZ2VyIHRoYW4gcGFnZSBzaXplLCBwYWdlIGZhdWx0IGZhaWx1cmUKJiM0MzsJICogY2FuIGNhdXNlIEBjb3BpZWQgdG8gYmUgcGFnZSBhbGlnbmVkIGJ1dCBub3QgZnMgYmxvY2sgYWxpZ25lZC4KJiM0MzsJICovCiYjNDM7CWlvdl9pdGVyX3JldmVydChkaW8tJmd0O3N1Ym1pdC5pdGVyLCBjb3BpZWQgLSBhbGlnbmVkX2NvcGllZCk7CiYjNDM7CWRpby0mZ3Q7c2l6ZSAmIzQzOz0gYWxpZ25lZF9jb3BpZWQ7CiYjNDM7CWlmICghYWxpZ25lZF9jb3BpZWQpCiAJCXJldHVybiAtRUZBVUxUOwotCXJldHVybiBpb21hcF9pdGVyX2FkdmFuY2UoaXRlciwgbGVuZ3RoKTsKJiM0MzsJcmV0dXJuIGlvbWFwX2l0ZXJfYWR2YW5jZShpdGVyLCBhbGlnbmVkX2NvcGllZCk7CiB9CiAKIHN0YXRpYyBpbnQgaW9tYXBfZGlvX2lubGluZV9pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppb21pLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMTYKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGZzL2lvbWFwL2RpcmVjdC1pby5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgaW9tYXBfZGlvX2hvbGVfaXRlcmAgZnVuY3Rpb24uIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY2hhbmdlIGluIGhvdyB0aGUgY29waWVkIGxlbmd0aCBpcyBhbGlnbmVkIHRvIHRoZSBibG9jayBzaXplLCBsZXZlcmFnaW5nIGBpb21hcF9kaW9fYWxpZ25tZW50YC4gR2l2ZW4gdGhhdCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZGVlcCB3aXRoaW4gdGhlIGNvcmUga2VybmVsLCBkaXJlY3RseSBpbXBhY3RpbmcgaW9tYXAgZGlyZWN0IEkvTywgbXkgc3BpZGV5LXNlbnNlIGlzIHRpbmdsaW5nIOKAkyB0aGlzIHNjcmVhbXMgJiMzNDtmdXp6IG1lISYjMzQ7CgpNeSBuZXh0IHN0ZXAgaXMgYWx3YXlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlLiBTaW5jZSBgaW9tYXBfZGlvX2hvbGVfaXRlcmAgaGFzIGJlZW4gbW9kaWZpZWQsIEkgc2hvdWxkIGV4YW1pbmUgdGhlIGZ1bmN0aW9uIGl0c2VsZiBhbmQgaXRzIGNhbGxlcnMuIEFoLCBpdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBuYXJyb3dzIGRvd24gdGhlIHNlYXJjaCBhIGJpdC4gTGV0JiMzOTtzIHNlZS4uLiBpdCYjMzk7cyBjYWxsZWQgYnkgYGlvbWFwX2Rpb19pdGVyYC4gTm93IEkgd2FudCB0byBkZXRlcm1pbmUgdGhlIHBvdGVudGlhbCByZWFjaCBvZiB0aGlzIGNoYW5nZS4gSSBuZWVkIHRvIGlkZW50aWZ5ICpub24qLXN0YXRpYyBmdW5jdGlvbnMgdGhhdCBjYWxsIGBpb21hcF9kaW9faXRlcmAuIFRoYXQgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IHRoZSBpbnB1dHMgYW5kIGRhdGEgZmxvd3MgbG9vayBsaWtlIGFuZCB0aHVzIGJldHRlciBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9tYXBfZGlvX2hvbGVfaXRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2lvbWFwL2RpcmVjdC1pby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2lvbWFwL2RpcmVjdC1pby5jPTQxNT1zdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTU5NC1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjU5NTpzdGF0aWMgaW50IGlvbWFwX2Rpb19ob2xlX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTU5Ni17XG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9NjQ1PXN0YXRpYyBpbnQgaW9tYXBfZGlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NTAtXHRcdFx0cmV0dXJuIC1FSU87XG5mcy9pb21hcC9kaXJlY3QtaW8uYzo2NTE6XHRcdHJldHVybiBpb21hcF9kaW9faG9sZV9pdGVyKGl0ZXIsIGRpbyk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NTItXHRjYXNlIElPTUFQX1VOV1JJVFRFTjpcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY1My1cdFx0aWYgKCEoZGlvLVx1MDAzZWZsYWdzIFx1MDAyNiBJT01BUF9ESU9fV1JJVEUpKVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NjU0Olx0XHRcdHJldHVybiBpb21hcF9kaW9faG9sZV9pdGVyKGl0ZXIsIGRpbyk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NTUtXHRcdHJldHVybiBpb21hcF9kaW9fYmlvX2l0ZXIoaXRlciwgZGlvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTIzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqU3RhdGljIEZ1bmN0aW9uIEludmVzdGlnYXRpb246IGlvbWFwXF9kaW9cX2l0ZXIqKgoKT2theSwgc28gYGlvbWFwX2Rpb19pdGVyYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBTdGF0aWMgZnVuY3Rpb25zLCBieSBkZWZpbml0aW9uLCBoYXZlIGxpbWl0ZWQgc2NvcGUsIHdoaWNoIHVzdWFsbHkgbWVhbnMgdGhleSYjMzk7cmUgaW50ZWdyYWwgdG8gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgYSBzcGVjaWZpYyBtb2R1bGUgb3IgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgY29udGV4dCwgc28gbXkgbmV4dCBtb3ZlIGlzIG9idmlvdXM6IEkgbmVlZCB0byBpZGVudGlmeSAqYWxsKiB0aGUgcGxhY2VzIHdoZXJlIGBpb21hcF9kaW9faXRlcmAgaXMgYWN0dWFsbHkgY2FsbGVkLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgZnVuY3Rpb24gYW5kIGl0cyBkZXBlbmRlbmNpZXMuIFRoaXMgaXMgd2hlcmUgSSBzdGFydCBkaWdnaW5nIGludG8gdGhlIGNhbGwgZ3JhcGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9tYXBfZGlvX2l0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYz02MTM9c3RhdGljIGludCBpb21hcF9kaW9faW5saW5lX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKmlvbWksIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NDQtXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo2NDU6c3RhdGljIGludCBpb21hcF9kaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjQ2LXtcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYz02OTc9X19pb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtODIyLVx0d2hpbGUgKChyZXQgPSBpb21hcF9pdGVyKFx1MDAyNmlvbWksIG9wcykpIFx1MDAzZSAwKSB7XG5mcy9pb21hcC9kaXJlY3QtaW8uYzo4MjM6XHRcdGlvbWkuc3RhdHVzID0gaW9tYXBfZGlvX2l0ZXIoXHUwMDI2aW9taSwgZGlvKTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTgyNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjAyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkmIzM5O20gdGhlIG9uZSB0aGlua2luZyBpdCwgYW5kIGNvbnNpZGVyaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYToKCioqVHJhY2luZyB0aGUgRGlyZWN0IEkvTyBQYXRoKioKCkFscmlnaHQsIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGRpcmVjdCBJL08gY29kZSBwYXRoIGhlcmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2UmIzM5O3JlIHJlYWNoaW5nIGBfX2lvbWFwX2Rpb19yd2AuIFRoZSBmdW5jdGlvbiBgX19pb21hcF9kaW9fcndgIGlzIGtleSwgdGhhdCYjMzk7cyB0aGUgb25lIGFjdHVhbGx5IGRvaW5nIHRoZSBkaXJlY3QgSS9PIHJlYWQvd3JpdGUuIEkgc2VlIHRoYXQgaXQmIzM5O3MgY2FsbGVkIGJ5IGBpb21hcF9kaW9faXRlcmAuCgpTbywgdGhlIG5leHQgbG9naWNhbCBzdGVwLCBiZWZvcmUgSSBkaWcgdG9vIGRlZXBseSBpbnRvIGBfX2lvbWFwX2Rpb19yd2AgaXRzZWxmLCBpcyB0byBiYWNrIHVwIGEgbGV2ZWwuIEkgbmVlZCB0byBrbm93IHRoZSAqY2FsbGVycyogb2YgYF9faW9tYXBfZGlvX3J3YC4gV2hhdCBjb2RlIGlzIHJlc3BvbnNpYmxlIGZvciB0cmlnZ2VyaW5nIHRoaXMgY29yZSBkaXJlY3QgSS9PIGZ1bmN0aW9uPyBVbmRlcnN0YW5kaW5nIHRoZSBlbnRyeSBwb2ludHMgd2lsbCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byBwcm9wZXJseSBhbmFseXplIHRoZSBkYXRhIGZsb3cgYW5kIGFueSBwb3RlbnRpYWwgaXNzdWVzIG9yIG9wdGltaXphdGlvbnMuIExldCYjMzk7cyBzZWUgd2hvJiMzOTtzIGNhbGxpbmcgaXQ7IHRoZW4gSSBjYW4gdW5kZXJzdGFuZCB0aGUgYmlnZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19pb21hcF9kaW9fcncmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYz00MTU9c3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy01MTAtXHRcdCAqIFdyaXRlcyB0aGF0IGV4dGVuZCBpX3NpemUgYXJlIGFsc28gbm90IHN1cHBvcnRlZCwgYnV0IHRoaXMgaXNcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjUxMTpcdFx0ICogaGFuZGxlZCBpbiBfX2lvbWFwX2Rpb19ydygpLlxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNTEyLVx0XHQgKi9cbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYz02NDU9c3RhdGljIGludCBpb21hcF9kaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY4NS0gKiBXaGVuIHBhZ2UgZmF1bHRzIGFyZSBkaXNhYmxlZCBhbmQgQGRpb19mbGFncyBpbmNsdWRlcyBJT01BUF9ESU9fUEFSVElBTCxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjY4NjogKiBfX2lvbWFwX2Rpb19ydyBjYW4gcmV0dXJuIGEgcGFydGlhbCByZXN1bHQgaWYgaXQgZW5jb3VudGVycyBhIG5vbi1yZXNpZGVudFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjg3LSAqIHBhZ2UgaW4gQGl0ZXIgYWZ0ZXIgcHJlcGFyaW5nIGEgdHJhbnNmZXIuICBJbiB0aGF0IGNhc2UsIHRoZSBub24tcmVzaWRlbnRcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYz02OTY9c3RydWN0IGlvbWFwX2RpbyAqXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo2OTc6X19pb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02OTgtXHRcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcywgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgKmRvcHMsXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTA3LX1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjkwODpFWFBPUlRfU1lNQk9MX0dQTChfX2lvbWFwX2Rpb19ydyk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MDktXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9OTExPWlvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTYtXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5MTc6XHRkaW8gPSBfX2lvbWFwX2Rpb19ydyhpb2NiLCBpdGVyLCBvcHMsIGRvcHMsIGRpb19mbGFncywgcHJpdmF0ZSxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkxOC1cdFx0XHQgICAgIGRvbmVfYmVmb3JlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTMxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgdGhlIGNvbnRleHQgaXMgbXkgd29yazoKCioqRGVlcCBEaXZlIGludG8gYGlvbWFwX2Rpb19yd2AqKgoKQWxyaWdodCwgc28gSSBzZWUgYF9faW9tYXBfZGlvX3J3YCBpcyBleHBvcnRlZCwgYW5kIGBpb21hcF9kaW9fcndgIGl0c2VsZiBpcyBhbHNvIGFuIGVudHJ5IHBvaW50LiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBzdWdnZXN0aW5nIHBvdGVudGlhbCBpbnRlcm5hbCB2cy4gZXh0ZXJuYWwgYWNjZXNzIHBvaW50cyBvciBwb3NzaWJseSBkaWZmZXJlbnQgbGV2ZWxzIG9mIGFic3RyYWN0aW9uLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aG9zZSB0d28uIFRoZSBvYnZpb3VzIG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgaW9tYXBfZGlvX3J3YCBpbiBkZXRhaWwuIFdoYXQgZXhhY3RseSBpcyBpdHMgcHVycG9zZSwgYW5kIGhvdyBkb2VzIGl0IHJlbGF0ZSB0byBkaXJlY3QgSS9PIG9wZXJhdGlvbnM/IEkmIzM5O2xsIGNoZWNrIGl0cyBjb2RlIHRvIHVuZGVyc3RhbmQgdGhpcyBjcml0aWNhbCBsaW5rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb21hcF9kaW9fcncmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYz00MTU9c3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy01MTAtXHRcdCAqIFdyaXRlcyB0aGF0IGV4dGVuZCBpX3NpemUgYXJlIGFsc28gbm90IHN1cHBvcnRlZCwgYnV0IHRoaXMgaXNcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjUxMTpcdFx0ICogaGFuZGxlZCBpbiBfX2lvbWFwX2Rpb19ydygpLlxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNTEyLVx0XHQgKi9cbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYz02NDU9c3RhdGljIGludCBpb21hcF9kaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY3Ni0vKlxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6Njc3OiAqIGlvbWFwX2Rpb19ydygpIGFsd2F5cyBjb21wbGV0ZXMgT19bRF1TWU5DIHdyaXRlcyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIElPXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NzgtICogaXMgYmVpbmcgaXNzdWVkIGFzIEFJTyBvciBub3QuICBUaGlzIGFsbG93cyB1cyB0byBvcHRpbWlzZSBwdXJlIGRhdGEgd3JpdGVzXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjg1LSAqIFdoZW4gcGFnZSBmYXVsdHMgYXJlIGRpc2FibGVkIGFuZCBAZGlvX2ZsYWdzIGluY2x1ZGVzIElPTUFQX0RJT19QQVJUSUFMLFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6Njg2OiAqIF9faW9tYXBfZGlvX3J3IGNhbiByZXR1cm4gYSBwYXJ0aWFsIHJlc3VsdCBpZiBpdCBlbmNvdW50ZXJzIGEgbm9uLXJlc2lkZW50XG5mcy9pb21hcC9kaXJlY3QtaW8uYy02ODctICogcGFnZSBpbiBAaXRlciBhZnRlciBwcmVwYXJpbmcgYSB0cmFuc2Zlci4gIEluIHRoYXQgY2FzZSwgdGhlIG5vbi1yZXNpZGVudFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTY5Nj1zdHJ1Y3QgaW9tYXBfZGlvICpcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjY5NzpfX2lvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY5OC1cdFx0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLCBjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyAqZG9wcyxcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy03MTQtXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo3MTU6XHR0cmFjZV9pb21hcF9kaW9fcndfYmVnaW4oaW9jYiwgaXRlciwgZGlvX2ZsYWdzLCBkb25lX2JlZm9yZSk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy03MTYtXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtODg1LVx0XHRpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb24pIHtcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjg4NjpcdFx0XHR0cmFjZV9pb21hcF9kaW9fcndfcXVldWVkKGlub2RlLCBpb21pLnBvcywgaW9taS5sZW4pO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtODg3LVx0XHRcdHJldHVybiBFUlJfUFRSKC1FSU9DQlFVRVVFRCk7XG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTA3LX1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjkwODpFWFBPUlRfU1lNQk9MX0dQTChfX2lvbWFwX2Rpb19ydyk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MDktXG5mcy9pb21hcC9kaXJlY3QtaW8uYz05MTA9c3NpemVfdFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTExOmlvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkxMi1cdFx0Y29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLCBjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyAqZG9wcyxcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTYtXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5MTc6XHRkaW8gPSBfX2lvbWFwX2Rpb19ydyhpb2NiLCBpdGVyLCBvcHMsIGRvcHMsIGRpb19mbGFncywgcHJpdmF0ZSxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkxOC1cdFx0XHQgICAgIGRvbmVfYmVmb3JlKTtcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MjItfVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTIzOkVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2Rpb19ydyk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MjQtXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9OTk5PXNzaXplX3QgX19pb21hcF9kaW9fcmVhZF9zaW1wbGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTAyNy1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwMjg6XHR0cmFjZV9pb21hcF9kaW9fcndfYmVnaW4oaW9jYiwgaXRlciwgMCwgMCk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDI5LVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwNzMtXHRzdWJtaXRfYmlvKGJpbyk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMDc0Olx0dHJhY2VfaW9tYXBfZGlvX3J3X3F1ZXVlZChpb21pLVx1MDAzZWlub2RlLCBpb2NiLVx1MDAzZWtpX3BvcywgaW9taS1cdTAwM2VsZW4pO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTA3NS1cdHJldHVybiAtRUlPQ0JRVUVVRUQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwMjEKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJb21hcCBEaXJlY3QgSS9PIEZ1enppbmcgU3RyYXRlZ3kqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBpb21hcCBkaXJlY3QgSS9PIGNvZGUsIHNwZWNpZmljYWxseSBgaW9tYXBfZGlvX3J3YCBhbmQgYF9faW9tYXBfZGlvX3J3YC4gVGhlc2UgYXJlLCB3aXRob3V0IGEgZG91YnQsIHRoZSBjb3JlIGVudHJ5IHBvaW50cyBmb3IgZGlyZWN0IEkvTyBvcGVyYXRpb25zIHdpdGhpbiBpb21hcC4gR2l2ZW4gdGhlaXIgZnVuZGFtZW50YWwgcm9sZSwgdGhleSYjMzk7cmUgcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgdGhlbSBvbiBteSBsaXN0LCBmcm9udCBhbmQgY2VudGVyLgoKTm93LCBiZWZvcmUgSSBkaXZlIGludG8gY29uc3RydWN0aW5nIGZ1enogY2FzZXMsIGl0JiMzOTtzIHBydWRlbnQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aWVkIHRvIGlvbWFwJiMzOTtzIGZ1bmN0aW9uYWxpdHkuIFRoZXJlIG1pZ2h0IGJlIHNwZWNpZmljIGBDT05GSUdgIHNldHRpbmdzIHRoYXQgZW5hYmxlIG9yIGRpc2FibGUgY2VydGFpbiBmZWF0dXJlcyBvciBjb2RlcGF0aHMgdGhhdCBJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIHdoZW4gY3JhZnRpbmcgbXkgZnV6emluZyBlbnZpcm9ubWVudCBhbmQgc2V0dXAuIERpc2NvdmVyaW5nIHRoZXNlIHdpbGwgb3B0aW1pemUgbXkgY292ZXJhZ2UgYW5kIGVuc3VyZSBJJiMzOTttIGhpdHRpbmcgYWxsIHRoZSByZWxldmFudCBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgdG8gZW5zdXJlIGFsbCBwb3RlbnRpYWxseSBpbXBvcnRhbnQgQ09ORklHcyBhcmUgZW5hYmxlZCBpbiBteSBmdXp6aW5nIHRhcmdldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZTX0lPTUFQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTEyPWNvbmZpZyBWQUxJREFURV9GU19QQVJTRVJcbi0tXG5mcy9LY29uZmlnLTE3LVxuZnMvS2NvbmZpZzoxODpjb25maWcgRlNfSU9NQVBcbmZzL0tjb25maWctMTktXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzOTgKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBGU19JT01BUGAgRmxhZyoqCgpSaWdodCwgYEZTX0lPTUFQYC4gSXQmIzM5O3MgYSBib29sZWFuLCBhIHByZXR0eSBpbXBvcnRhbnQgb25lIGF0IHRoYXQsIGdlbmVyYWxseSBlbmFibGVkIGJ5IHRoZSBiaWcgcGxheWVycyBpbiB0aGUgZmlsZXN5c3RlbSBnYW1lOiBYRlMsIGV4dDQsIGJ0cmZzLCB0aGF0IGtpbmQgb2YgdGhpbmcuIFNvLCBsZXQmIzM5O3MgZHJpbGwgZG93biBhbmQgc2VlIGV4YWN0bHkgd2hhdCYjMzk7cyB0cmlnZ2VyaW5nIGl0cyBzZWxlY3Rpb24uIFdoYXQgY29tcG9uZW50cywgd2hhdCBrZXJuZWwgZmVhdHVyZXMsIHdoYXQgc3BlY2lmaWMgZmlsZXN5c3RlbSBvcHRpb25zIGFyZSBkZWNpZGluZyB0aGF0IHRoaXMgcGFydGljdWxhciBmbGFnIG5lZWRzIHRvIGJlIHNldD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcyBhbmQgaW1wbGljYXRpb25zIGZyb20gYSBzeXN0ZW1zIHBlcnNwZWN0aXZlLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZWJhc2UgYW5kIHRyYWNlIHRoZSBhY3RpdmF0aW9uIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBGU19JT01BUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lvbWFwL3BvcnRpbmcucnN0PTQ3PUZpcnN0LCBhZGQgYGAjaW5jbHVkZSBcdTAwM2NsaW51eC9pb21hcC5oXHUwMDNlYGAgZnJvbSB5b3VyIHNvdXJjZSBjb2RlIGFuZCBhZGRcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaW9tYXAvcG9ydGluZy5yc3Q6NDg6YGBzZWxlY3QgRlNfSU9NQVBgYCB0byB5b3VyIGZpbGVzeXN0ZW0mIzM5O3MgS2NvbmZpZyBvcHRpb24uXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lvbWFwL3BvcnRpbmcucnN0LTQ5LUJ1aWxkIHRoZSBrZXJuZWwsIHJ1biBmc3Rlc3RzIHdpdGggdGhlIGBgLWcgYWxsYGAgb3B0aW9uIGFjcm9zcyBhIHdpZGVcbi0tXG5ibG9jay9LY29uZmlnPTU9bWVudWNvbmZpZyBCTE9DS1xuLS1cbmJsb2NrL0tjb25maWctNy0gICAgICAgZGVmYXVsdCB5XG5ibG9jay9LY29uZmlnOjg6ICAgICAgIHNlbGVjdCBGU19JT01BUFxuYmxvY2svS2NvbmZpZy05LSAgICAgICBzZWxlY3QgU0JJVE1BUFxuLS1cbmZzL0tjb25maWc9NTg9Y29uZmlnIEZTX0RBWFxuLS1cbmZzL0tjb25maWctNjEtXHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXG5mcy9LY29uZmlnOjYyOlx0c2VsZWN0IEZTX0lPTUFQXG5mcy9LY29uZmlnLTYzLVx0c2VsZWN0IERBWFxuLS1cbmZzL2J0cmZzL0tjb25maWc9Mz1jb25maWcgQlRSRlNfRlNcbi0tXG5mcy9idHJmcy9LY29uZmlnLTE0LVx0c2VsZWN0IFpTVERfREVDT01QUkVTU1xuZnMvYnRyZnMvS2NvbmZpZzoxNTpcdHNlbGVjdCBGU19JT01BUFxuZnMvYnRyZnMvS2NvbmZpZy0xNi1cdHNlbGVjdCBSQUlENl9QUVxuLS1cbmZzL2Vyb2ZzL0tjb25maWc9Mz1jb25maWcgRVJPRlNfRlNcbi0tXG5mcy9lcm9mcy9LY29uZmlnLTgtXHRzZWxlY3QgQ1JZUFRPX0RFRkxBVEUgaWYgRVJPRlNfRlNfWklQX0FDQ0VMXG5mcy9lcm9mcy9LY29uZmlnOjk6XHRzZWxlY3QgRlNfSU9NQVBcbmZzL2Vyb2ZzL0tjb25maWctMTAtXHRzZWxlY3QgTFo0X0RFQ09NUFJFU1MgaWYgRVJPRlNfRlNfWklQXG4tLVxuZnMvZXhmYXQvS2NvbmZpZz0zPWNvbmZpZyBFWEZBVF9GU1xuLS1cbmZzL2V4ZmF0L0tjb25maWctNi1cdHNlbGVjdCBOTFNcbmZzL2V4ZmF0L0tjb25maWc6NzpcdHNlbGVjdCBGU19JT01BUFxuZnMvZXhmYXQvS2NvbmZpZy04LVx0aGVscFxuLS1cbmZzL2V4dDIvS2NvbmZpZz0yPWNvbmZpZyBFWFQyX0ZTXG4tLVxuZnMvZXh0Mi9LY29uZmlnLTQtXHRzZWxlY3QgQlVGRkVSX0hFQURcbmZzL2V4dDIvS2NvbmZpZzo1Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9leHQyL0tjb25maWctNi1cdGhlbHBcbi0tXG5mcy9leHQ0L0tjb25maWc9Mj1jb25maWcgRVhUNF9GU1xuLS1cbmZzL2V4dDQvS2NvbmZpZy03LVx0c2VsZWN0IENSQzMyXG5mcy9leHQ0L0tjb25maWc6ODpcdHNlbGVjdCBGU19JT01BUFxuZnMvZXh0NC9LY29uZmlnLTktXHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cbi0tXG5mcy9mMmZzL0tjb25maWc9Mj1jb25maWcgRjJGU19GU1xuLS1cbmZzL2YyZnMvS2NvbmZpZy05LVx0c2VsZWN0IEZTX0VOQ1JZUFRJT05fQUxHUyBpZiBGU19FTkNSWVBUSU9OXG5mcy9mMmZzL0tjb25maWc6MTA6XHRzZWxlY3QgRlNfSU9NQVBcbmZzL2YyZnMvS2NvbmZpZy0xMS1cdHNlbGVjdCBMWjRfQ09NUFJFU1MgaWYgRjJGU19GU19MWjRcbi0tXG5mcy9mdXNlL0tjb25maWc9Mj1jb25maWcgRlVTRV9GU1xuLS1cbmZzL2Z1c2UvS2NvbmZpZy00LVx0c2VsZWN0IEZTX1BPU0lYX0FDTFxuZnMvZnVzZS9LY29uZmlnOjU6XHRzZWxlY3QgRlNfSU9NQVBcbmZzL2Z1c2UvS2NvbmZpZy02LVx0aGVscFxuLS1cbmZzL2dmczIvS2NvbmZpZz0yPWNvbmZpZyBHRlMyX0ZTXG4tLVxuZnMvZ2ZzMi9LY29uZmlnLTctXHRzZWxlY3QgUVVPVEFDVExcbmZzL2dmczIvS2NvbmZpZzo4Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9nZnMyL0tjb25maWctOS1cdGhlbHBcbi0tXG5mcy9ocGZzL0tjb25maWc9Mj1jb25maWcgSFBGU19GU1xuLS1cbmZzL2hwZnMvS2NvbmZpZy01LVx0c2VsZWN0IEJVRkZFUl9IRUFEXG5mcy9ocGZzL0tjb25maWc6NjpcdHNlbGVjdCBGU19JT01BUFxuZnMvaHBmcy9LY29uZmlnLTctXHRoZWxwXG4tLVxuZnMvbmlsZnMyL0tjb25maWc9Mj1jb25maWcgTklMRlMyX0ZTXG4tLVxuZnMvbmlsZnMyL0tjb25maWctNS1cdHNlbGVjdCBDUkMzMlxuZnMvbmlsZnMyL0tjb25maWc6NjpcdHNlbGVjdCBGU19JT01BUFxuZnMvbmlsZnMyL0tjb25maWctNy1cdGhlbHBcbi0tXG5mcy9udGZzL0tjb25maWc9Mj1jb25maWcgTlRGU19GU1xuLS1cbmZzL250ZnMvS2NvbmZpZy00LVx0c2VsZWN0IE5MU1xuZnMvbnRmcy9LY29uZmlnOjU6XHRzZWxlY3QgRlNfSU9NQVBcbmZzL250ZnMvS2NvbmZpZy02LVx0aGVscFxuLS1cbmZzL3hmcy9LY29uZmlnPTI9Y29uZmlnIFhGU19GU1xuLS1cbmZzL3hmcy9LY29uZmlnLTYtXHRzZWxlY3QgQ1JDMzJcbmZzL3hmcy9LY29uZmlnOjc6XHRzZWxlY3QgRlNfSU9NQVBcbmZzL3hmcy9LY29uZmlnLTgtXHRoZWxwXG4tLVxuZnMvem9uZWZzL0tjb25maWc9MT1jb25maWcgWk9ORUZTX0ZTXG4tLVxuZnMvem9uZWZzL0tjb25maWctNC1cdGRlcGVuZHMgb24gQkxLX0RFVl9aT05FRFxuZnMvem9uZWZzL0tjb25maWc6NTpcdHNlbGVjdCBGU19JT01BUFxuZnMvem9uZWZzL0tjb25maWctNi1cdHNlbGVjdCBDUkMzMlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODI1CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgQW5hbHlzaXMgb2YgdGhlIGlvbWFwIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGBGU19JT01BUGAgY29uZmlndXJhdGlvbi4gSXQmIzM5O3MgYXV0b21hdGljYWxseSBzZWxlY3RlZCBieSBxdWl0ZSBhIGZldyBmaWxlIHN5c3RlbXMsIGxpa2UgYEVYVDRfRlNgLCBgWEZTX0ZTYCwgYW5kIGBCVFJGU19GU2AuIEEgc3RyYWlnaHRmb3J3YXJkIGFwcHJvYWNoIHRvIGVuc3VyZSBpb21hcCBpcyBwcmVzZW50IHdvdWxkIGJlIHRvIGRpcmVjdGx5IGVuYWJsZSB0aGVzZSBmaWxlc3lzdGVtIGNvbmZpZ3MuIEJ1dCBob2xkIG9uLi4uIGBCTE9DS2AgYWxzbyBzZWxlY3RzIGBGU19JT01BUGA/IFllcywgdGhhdCYjMzk7cyByaWdodCwgYGJsb2NrL0tjb25maWdgIHRha2VzIGNhcmUgb2YgdGhhdCBkZXBlbmRlbmN5LiBUaGF0IG1lYW5zLCBwcmFjdGljYWxseSBzcGVha2luZywgaW9tYXAgaXMgYWx3YXlzIGVuYWJsZWQgYXMgbG9uZyBhcyB0aGUgYmxvY2sgZGV2aWNlIHN1cHBvcnQgaXMgdGhlcmUuCgpOb3csIGNvbnNpZGVyaW5nIHRoZSBwYXRjaCBJJiMzOTttIGV4YW1pbmluZywgaXQgbW9kaWZpZXMgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgLiBUaGlzIGlzIGEgY3J1Y2lhbCBmdW5jdGlvbiBhcyBpdCYjMzk7cyBjYWxsZWQgYnkgYGlvbWFwX2Rpb19pdGVyYCwgd2hpY2gsIGluIHR1cm4sIGlzIGludm9rZWQgYnkgYF9faW9tYXBfZGlvX3J3YCBhbmQgYGlvbWFwX2Rpb19yd2AuIEdpdmVuIHRoaXMgY2FsbCBjaGFpbiwgaXQgc3VnZ2VzdHMgbXkgZnV6emluZyBlZmZvcnRzIHNob3VsZCBwcmltYXJpbHkgZm9jdXMgb24gYGlvbWFwX2Rpb19yd2AgYW5kIGBfX2lvbWFwX2Rpb19yd2AuIFRoZXkmIzM5O3JlIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludHMuCgpJIGFsc28gd29uZGVyIGlmIGBfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZWAgbWlnaHQgYmUgcmVsZXZhbnQsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlLiBMZXQgbWUgZG91YmxlLWNoZWNrIHdoZXRoZXIgaXQgY2FsbHMgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgLiBJIG5lZWQgdG8gcnVsZSBpdCBpbiBvciBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19faW9tYXBfZGlvX3JlYWRfc2ltcGxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmM9OTgxPXN0YXRpYyB2b2lkIGlvbWFwX2Rpb19zaW1wbGVfZW5kX2lvKHN0cnVjdCBiaW8gKmJpbylcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05OTgtXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5OTk6c3NpemVfdCBfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwMDAtXHRcdHN0cnVjdCBpb21hcF9pdGVyICppb21pKVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwODQtfVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTA4NTpFWFBPUlRfU1lNQk9MX0dQTChfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZSk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDg2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjM4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OgoKKipEaWdnaW5nIGludG8gRGlyZWN0IEkvTyBhbmQgSXRlcmF0b3JzKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBgX19pb21hcF9kaW9fcmVhZF9zaW1wbGVgIGFuZCBpbW1lZGlhdGVseSBhIHF1ZXN0aW9uIHBvcHMgdXA6IGlzIGl0IGNhbGxpbmcgYGlvbWFwX2Rpb19iaW9faXRlcmAgZGlyZWN0bHk/IE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCYjMzk7cyBhIGtleSBvcHRpbWl6YXRpb24gcG9pbnQsIHNvIGl0IHdhcnJhbnRzIGEgcXVpY2sgY2hlY2suIEkgd2FudCB0byBzZWUgaWYgdGhpcyBmdW5jdGlvbiBpcyBsZXZlcmFnaW5nIHRoZSBpdGVyYXRvciBhcHByb2FjaCBmb3IgRGlyZWN0IEkvTyByZWFkcy4gSWYgaXQgaXMsIHRoZW4gd2UmIzM5O3JlIGxpa2VseSBpbiBhIGdvb2Qgc3BvdCBwZXJmb3JtYW5jZS13aXNlLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGltcGxlbWVudGF0aW9uIHRvIGJlIGNlcnRhaW4gdGhhdCB0aGUgaW50ZXJhY3Rpb24gaXMgYXMgZXhwZWN0ZWQuIFRoaXMgZGlyZWN0IGNhbGwgaXMgc2lnbmlmaWNhbnQgaW4gRGlyZWN0IEkvTyBhcyB0aGUgZGlyZWN0IHVzZSBvZiB0aGUgYmlvIGl0ZXJhdG9yIGlzIGxpa2VseSBhIGNydWNpYWwgZmFjdG9yIGZvciByZWR1Y2luZyBvdmVyaGVhZC4gVW5kZXJzdGFuZGluZyB0aGlzIHBhdGggaXMgaW1wb3J0YW50IGFzIGl0IGlzIGEgY29tbW9uIGZhY3RvciBpbiB2YXJpb3VzIGZpbGUgc3lzdGVtcy4gVGhpcyBpcyB0aGUgZmlyc3QgcGxhY2UgSSYjMzk7ZCBsb29rIGluIGEgcGVyZm9ybWFuY2UgcHJvZmlsZSBhbmQgaXMgbGlrZWx5IHRoZSBjb3JlIG9mIHRoZSBEaXJlY3QgSS9PIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb21hcF9kaW9fYmlvX2l0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYz0yOTk9c3RhdGljIGludCBpb21hcF9kaW9femVybyhjb25zdCBzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvLFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTMzNC1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjMzNTpzdGF0aWMgc3NpemVfdCBpb21hcF9kaW9fYmlvX2l0ZXJfb25lKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMzM2LVx0XHRzdHJ1Y3QgaW9tYXBfZGlvICpkaW8sIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGludCBhbGlnbm1lbnQsXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9NDA3PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlvbWFwX2Rpb19hbGlnbm1lbnQoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy00MTQtXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo0MTU6c3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTQxNi17XG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNTU2LVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NTU3Olx0XHRyZXQgPSBpb21hcF9kaW9fYmlvX2l0ZXJfb25lKGl0ZXIsIGRpbywgcG9zLCBhbGlnbm1lbnQsIGJpb19vcGYpO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNTU4LVx0XHRpZiAodW5saWtlbHkocmV0IFx1MDAzYyAwKSkge1xuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTY0NT1zdGF0aWMgaW50IGlvbWFwX2Rpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjU0LVx0XHRcdHJldHVybiBpb21hcF9kaW9faG9sZV9pdGVyKGl0ZXIsIGRpbyk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYzo2NTU6XHRcdHJldHVybiBpb21hcF9kaW9fYmlvX2l0ZXIoaXRlciwgZGlvKTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY1Ni1cdGNhc2UgSU9NQVBfTUFQUEVEOlxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NjU3Olx0XHRyZXR1cm4gaW9tYXBfZGlvX2Jpb19pdGVyKGl0ZXIsIGRpbyk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NTgtXHRjYXNlIElPTUFQX0lOTElORTpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ5NQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLi4uCgoqKkFuYWx5emluZyBgX19pb21hcF9kaW9fcmVhZF9zaW1wbGVgIGZvciBIb2xlIEhhbmRsaW5nKioKClJpZ2h0LCBzbyBJJiMzOTttIHByZXR0eSBzdXJlIGBfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZWAgYnlwYXNzZXMgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgLiBJdCYjMzk7cyBqdXN0IGEgaHVuY2gsIGJ1dCB0aGVzZSBzaW1wbGVyIGRpcmVjdCBJL08gcmVhZCBmdW5jdGlvbnMgb2Z0ZW4gaGFuZGxlIGhvbGVzIGluIGEgbW9yZSBzdHJhaWdodGZvcndhcmQgbWFubmVyLiBUbyBjb25maXJtIHRoaXMsIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGNvZGUuIExldCYjMzk7cyBnZXQgdGhlIHNvdXJjZSBmb3IgYF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IGl0cyBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIHRoZSBsb2dpYyB3aXRoaW4gdGhhdCBmdW5jdGlvbiYjMzk7cyBib2R5IHRvIGRlZmluaXRpdmVseSBkZXRlcm1pbmUgaG93IGl0IGFkZHJlc3NlcyBvciBpZ25vcmVzIHRoZSBwb3RlbnRpYWwgZm9yIHNwYXJzZSBmaWxlcyBhbmQgaG9sZXMgZHVyaW5nIHRoZSByZWFkIG9wZXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk5OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk5OTpcdHNzaXplX3QgX19pb21hcF9kaW9fcmVhZF9zaW1wbGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4xMDAwOlx0XHRcdHN0cnVjdCBpb21hcF9pdGVyICppb21pKVxuMTAwMTpcdHtcbjEwMDI6XHRcdGdmcF90IGdmcCA9IChpb21pLVx1MDAzZWZsYWdzIFx1MDAyNiBJT01BUF9OT1dBSVQpID8gR0ZQX05PV0FJVCA6IEdGUF9LRVJORUw7XG4xMDAzOlx0XHRzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSAqc3I7XG4xMDA0Olx0XHR1bnNpZ25lZCBpbnQgYWxpZ25tZW50O1xuMTAwNTpcdFx0c3RydWN0IGJpbyAqYmlvO1xuMTAwNjpcdFx0c3NpemVfdCByZXQ7XG4xMDA3Olx0XG4xMDA4Olx0XHRpZiAoaW9taS1cdTAwM2Vpb21hcC50eXBlICE9IElPTUFQX01BUFBFRCB8fFxuMTAwOTpcdFx0ICAgIGlvbWktXHUwMDNlaW9tYXAub2Zmc2V0ICYjNDM7IGlvbWktXHUwMDNlaW9tYXAubGVuZ3RoIFx1MDAzYyBpb21pLVx1MDAzZXBvcyAmIzQzOyBpb21pLVx1MDAzZWxlbiB8fFxuMTAxMDpcdFx0ICAgIChpb21pLVx1MDAzZWlvbWFwLmZsYWdzIFx1MDAyNiBJT01BUF9GX0lOVEVHUklUWSkpIHtcbjEwMTE6XHRcdFx0cmV0ID0gLUVOT1RCTEs7XG4xMDEyOlx0XHRcdGdvdG8gb3V0X2Rpb19lbmQ7XG4xMDEzOlx0XHR9XG4xMDE0Olx0XG4xMDE1Olx0XHRhbGlnbm1lbnQgPSBpb21hcF9kaW9fYWxpZ25tZW50KGlvbWktXHUwMDNlaW5vZGUsIGlvbWktXHUwMDNlaW9tYXAuYmRldiwgMCk7XG4xMDE2Olx0XHRpZiAoKGlvbWktXHUwMDNlcG9zIHwgaW9taS1cdTAwM2VsZW4pIFx1MDAyNiAoYWxpZ25tZW50IC0gMSkpIHtcbjEwMTc6XHRcdFx0cmV0ID0gLUVJTlZBTDtcbjEwMTg6XHRcdFx0Z290byBvdXRfZGlvX2VuZDtcbjEwMTk6XHRcdH1cbjEwMjA6XHRcbjEwMjE6XHRcdGlmICh1bmxpa2VseSghaW9taS1cdTAwM2Vpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfZGlvX2RvbmVfd3EgXHUwMDI2XHUwMDI2XG4xMDIyOlx0XHRcdFx0IWlzX3N5bmNfa2lvY2IoaW9jYikpKSB7XG4xMDIzOlx0XHRcdHJldCA9IHNiX2luaXRfZGlvX2RvbmVfd3EoaW9taS1cdTAwM2Vpbm9kZS1cdTAwM2VpX3NiKTtcbjEwMjQ6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbjEwMjU6XHRcdFx0XHRnb3RvIG91dF9kaW9fZW5kO1xuMTAyNjpcdFx0fVxuMTAyNzpcdFxuMTAyODpcdFx0dHJhY2VfaW9tYXBfZGlvX3J3X2JlZ2luKGlvY2IsIGl0ZXIsIDAsIDApO1xuMTAyOTpcdFxuMTAzMDpcdFx0YmlvID0gYmlvX2FsbG9jX2Jpb3NldChpb21pLVx1MDAzZWlvbWFwLmJkZXYsXG4xMDMxOlx0XHRcdFx0ICAgICAgIGJpb19pb3ZfdmVjc190b19hbGxvYyhpdGVyLCBCSU9fTUFYX1ZFQ1MpLFxuMTAzMjpcdFx0XHRcdCAgICAgICBSRVFfT1BfUkVBRCwgZ2ZwLCBcdTAwMjZpb21hcF9kaW9fc2ltcGxlX3Bvb2wpO1xuMTAzMzpcdFx0aWYgKCFiaW8pIHtcbjEwMzQ6XHRcdFx0cmV0ID0gLUVBR0FJTjtcbjEwMzU6XHRcdFx0Z290byBvdXRfZGlvX2VuZDtcbjEwMzY6XHRcdH1cbjEwMzc6XHRcdHNyID0gY29udGFpbmVyX29mKGJpbywgc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUsIGJpbyk7XG4xMDM4Olx0XHRzci1cdTAwM2Vpb2NiID0gaW9jYjtcbjEwMzk6XHRcdHNyLVx1MDAzZWRpb19mbGFncyA9IDA7XG4xMDQwOlx0XG4xMDQxOlx0XHRiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgPSBpb21hcF9zZWN0b3IoXHUwMDI2aW9taS1cdTAwM2Vpb21hcCwgaW9taS1cdTAwM2Vwb3MpO1xuMTA0MjpcdFx0YmlvLVx1MDAzZWJpX2lvcHJpbyA9IGlvY2ItXHUwMDNla2lfaW9wcmlvO1xuMTA0MzpcdFxuMTA0NDpcdFx0cmV0ID0gYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhiaW8sIGl0ZXIsIGFsaWdubWVudCAtIDEpO1xuMTA0NTpcdFx0aWYgKHVubGlrZWx5KHJldCkpXG4xMDQ2Olx0XHRcdGdvdG8gb3V0X2Jpb19wdXQ7XG4xMDQ3Olx0XG4xMDQ4Olx0XHRpZiAoYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSAhPSBpb21pLVx1MDAzZWxlbikge1xuMTA0OTpcdFx0XHRpb3ZfaXRlcl9yZXZlcnQoaXRlciwgYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSk7XG4xMDUwOlx0XHRcdHJldCA9IC1FTk9UQkxLO1xuMTA1MTpcdFx0XHRnb3RvIG91dF9iaW9fcmVsZWFzZV9wYWdlcztcbjEwNTI6XHRcdH1cbjEwNTM6XHRcbjEwNTQ6XHRcdHNyLVx1MDAzZXNpemUgPSBiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplO1xuMTA1NTpcdFx0aWYgKHVzZXJfYmFja2VkX2l0ZXIoaXRlcikpIHtcbjEwNTY6XHRcdFx0YmlvX3NldF9wYWdlc19kaXJ0eShiaW8pO1xuMTA1NzpcdFx0XHRzci1cdTAwM2VkaW9fZmxhZ3MgfD0gSU9NQVBfRElPX1VTRVJfQkFDS0VEO1xuMTA1ODpcdFx0fVxuMTA1OTpcdFxuMTA2MDpcdFx0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfTk9XQUlUKVxuMTA2MTpcdFx0XHRiaW8tXHUwMDNlYmlfb3BmIHw9IFJFUV9OT1dBSVQ7XG4xMDYyOlx0XG4xMDYzOlx0XHRpZiAoaXNfc3luY19raW9jYihpb2NiKSkge1xuMTA2NDpcdFx0XHRzdWJtaXRfYmlvX3dhaXQoYmlvKTtcbjEwNjU6XHRcdFx0cmV0dXJuIGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGUoc3IpO1xuMTA2NjpcdFx0fVxuMTA2NzpcdFxuMTA2ODpcdFx0aWYgKChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX0hJUFJJKSkge1xuMTA2OTpcdFx0XHRiaW8tXHUwMDNlYmlfb3BmIHw9IFJFUV9QT0xMRUQ7XG4xMDcwOlx0XHRcdFdSSVRFX09OQ0UoaW9jYi1cdTAwM2Vwcml2YXRlLCBiaW8pO1xuMTA3MTpcdFx0fVxuMTA3MjpcdFx0YmlvLVx1MDAzZWJpX2VuZF9pbyA9IGlvbWFwX2Rpb19zaW1wbGVfZW5kX2lvO1xuMTA3MzpcdFx0c3VibWl0X2JpbyhiaW8pO1xuMTA3NDpcdFx0dHJhY2VfaW9tYXBfZGlvX3J3X3F1ZXVlZChpb21pLVx1MDAzZWlub2RlLCBpb2NiLVx1MDAzZWtpX3BvcywgaW9taS1cdTAwM2VsZW4pO1xuMTA3NTpcdFx0cmV0dXJuIC1FSU9DQlFVRVVFRDtcbjEwNzY6XHRcbjEwNzc6XHRvdXRfYmlvX3JlbGVhc2VfcGFnZXM6XG4xMDc4Olx0XHRiaW9fcmVsZWFzZV9wYWdlcyhiaW8sIGZhbHNlKTtcbjEwNzk6XHRvdXRfYmlvX3B1dDpcbjEwODA6XHRcdGJpb19wdXQoYmlvKTtcbjEwODE6XHRvdXRfZGlvX2VuZDpcbjEwODI6XHRcdGlub2RlX2Rpb19lbmQoaW9taS1cdTAwM2Vpbm9kZSk7XG4xMDgzOlx0XHRyZXR1cm4gcmV0O1xuMTA4NDpcdH1cbjEwODU6XHRFWFBPUlRfU1lNQk9MX0dQTChfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZSk7XG4xMDg2Olx0XG4xMDg3Olx0c3RhdGljIGludCBfX2luaXQgaW9tYXBfZGlvX2luaXQodm9pZClcbjEwODg6XHR7XG4xMDg5Olx0XHRyZXR1cm4gYmlvc2V0X2luaXQoXHUwMDI2aW9tYXBfZGlvX3NpbXBsZV9wb29sLCA0LFxuMTA5MDpcdFx0XHRcdCAgIG9mZnNldG9mKHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlLCBiaW8pLFxuMTA5MTpcdFx0XHRcdCAgIEJJT1NFVF9ORUVEX0JWRUNTIHwgQklPU0VUX1BFUkNQVV9DQUNIRSk7XG4xMDkyOlx0fVxuMTA5MzpcdGZzX2luaXRjYWxsKGlvbWFwX2Rpb19pbml0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzODMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczoKCioqRGlnZ2luZyBpbnRvIHRoZSBJL08gTWFwcGluZyBGdW5jdGlvbnMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2UgdGhlIGNvbnRyb2wgZmxvdyBoZXJlLCBhbmQgSSYjMzk7dmUganVzdCByZWFsaXplZCB0aGF0IGBfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZWAgKmRvZXNuJiMzOTt0KiBhY3R1YWxseSBjYWxsIGBpb21hcF9kaW9faG9sZV9pdGVyYCwgd2hpY2ggaXMgd2hlcmUgSSB3YXMgZXhwZWN0aW5nIGl0IHRvIGJlLiBPa2F5LCB0aGF0IHNoaWZ0cyB0aGUgZm9jdXMuIE15IGF0dGVudGlvbiBzaG91bGQgYmUgb24gYF9faW9tYXBfZGlvX3J3YCBhbmQgdGhlIHdyYXBwZXIsIGBpb21hcF9kaW9fcndgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyBhdCB0aG9zZSBsZXZlbHMuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCBgaW9tYXBfZGlvX3J3YCBpcywgaW4gZmFjdCwgdGhlIHdyYXBwZXIuCgpOb3csIGJlZm9yZSBJIGRlZXAgZGl2ZSB0b28gbXVjaCwgaXQmIzM5O3Mgd29ydGggYSBxdWljayBjaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBleHBvcnRlZCBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudCB0aGF0IEkgc2hvdWxkIGJlIGNvbnNpZGVyaW5nIGF0IHRoaXMgc3RhZ2UuIEl0JiMzOTtzIGEgZ29vZCBwcmFjdGljZSB0byBub3QgbWlzcyB0aGUgd29vZCBmb3IgdGhlIHRyZWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaW9tYXAvZGlyZWN0LWlvLmM9MTA1PXNzaXplX3QgaW9tYXBfZGlvX2NvbXBsZXRlKHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xNjAtfVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTYxOkVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2Rpb19jb21wbGV0ZSk7XG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xNjItXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9MjcyPXZvaWQgaW9tYXBfZGlvX2Jpb19lbmRfaW8oc3RydWN0IGJpbyAqYmlvKVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTI3OS19XG5mcy9pb21hcC9kaXJlY3QtaW8uYzoyODA6RVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfZGlvX2Jpb19lbmRfaW8pO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMjgxLVxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTY5Nz1fX2lvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MDctfVxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTA4OkVYUE9SVF9TWU1CT0xfR1BMKF9faW9tYXBfZGlvX3J3KTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkwOS1cbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYz05MTE9aW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkyMi19XG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5MjM6RVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfZGlvX3J3KTtcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkyNC1cbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYz05OTk9c3NpemVfdCBfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDg0LX1cbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwODU6RVhQT1JUX1NZTUJPTF9HUEwoX19pb21hcF9kaW9fcmVhZF9zaW1wbGUpO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTA4Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTU6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyOTQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSU9NQVAgQ29uZmlndXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gbmFpbCBkb3duIHRoZSBjb3JlIEkvTyBtYXAgY29uZmlndXJhdGlvbnMgaGVyZS4gSXQgbG9va3MgbGlrZSB0aGUgaGVhdnkgbGlmdGVycyBhcmUgYF9faW9tYXBfZGlvX3J3YCBhbmQgYGlvbWFwX2Rpb19yd2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY3J1Y2lhbCBjb25maWcgc2V0dGluZ3MgSSYjMzk7bSBtaXNzaW5nLgoKTGV0JiMzOTtzIHNlZeKApiBgRlNfSU9NQVBgIHNlZW1zIHRvIGJlIHRoZSBvbmUgdGhhdCBnZXRzIHNlbGVjdGVkIGJ5IGBFWFQ0X0ZTYCwgYFhGU19GU2AsIGFuZCBgQlRSRlNfRlNgLiBSaWdodCwgc28ganVzdCBsaXN0aW5nIHRob3NlIHdvdWxkIGNvdmVyIGl0LiBIYW5nIG9uIGEgc2Vjb25kLCB0aGF0JiMzOTtzIG5vdCBxdWl0ZSByaWdodC4gYEJMT0NLYCBzZWxlY3RzIGBGU19JT01BUGAsIHdoaWNoIG1lYW5zIGBGU19JT01BUGAgaXMgaW1wbGljaXRseSBlbmFibGVkIGlmIGBCTE9DS2AgaXMgZW5hYmxlZC4gSXQmIzM5O3Mgbm90IGEgZGlyZWN0IGRlcGVuZGVuY3kuIE9rYXksIHNvIEkgc2hvdWxkIGp1c3QgbGlzdCBgQkxPQ0tgLCBgRVhUNF9GU2AsIGBYRlNfRlNgLCBhbmQgYEJUUkZTX0ZTYCBmb3IgY2xhcml0eS4gVGhhdCBjb3ZlcnMgdGhlIHByaW1hcnkgY2FzZXMuCgpOb3csIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgaWYgYW55IG90aGVyIGZ1bmN0aW9ucyBjYWxsIGBpb21hcF9kaW9faG9sZV9pdGVyYCBkaXJlY3RseS4gSnVzdCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGNvbmZpZ3VyYXRpb25zIGF0IHBsYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvbWFwX2Rpb19ob2xlX2l0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9pb21hcC9kaXJlY3QtaW8uYz00MTU9c3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbi0tXG5mcy9pb21hcC9kaXJlY3QtaW8uYy01OTQtXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo1OTU6c3RhdGljIGludCBpb21hcF9kaW9faG9sZV9pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG5mcy9pb21hcC9kaXJlY3QtaW8uYy01OTYte1xuLS1cbmZzL2lvbWFwL2RpcmVjdC1pby5jPTY0NT1zdGF0aWMgaW50IGlvbWFwX2Rpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG4tLVxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjUwLVx0XHRcdHJldHVybiAtRUlPO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NjUxOlx0XHRyZXR1cm4gaW9tYXBfZGlvX2hvbGVfaXRlcihpdGVyLCBkaW8pO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjUyLVx0Y2FzZSBJT01BUF9VTldSSVRURU46XG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NTMtXHRcdGlmICghKGRpby1cdTAwM2VmbGFncyBcdTAwMjYgSU9NQVBfRElPX1dSSVRFKSlcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjY1NDpcdFx0XHRyZXR1cm4gaW9tYXBfZGlvX2hvbGVfaXRlcihpdGVyLCBkaW8pO1xuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjU1LVx0XHRyZXR1cm4gaW9tYXBfZGlvX2Jpb19pdGVyKGl0ZXIsIGRpbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTI2CgkJCQkJCQlvdXRwdXQ6IDEyNgoJCQkJCQkJdGhvdWdodHM6IDIxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERpbyBJdGVyYXRvciBQYXRjaCoqCgpPa2F5LCBzbyB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGBpb21hcF9kaW9faXRlcmAuIE15IGluaXRpYWwgaHVuY2ggaXMgdG8gZm9jdXMgZW50aXJlbHkgb24gdGhhdC4gSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhlIHBhdGNoIGxvZ2ljLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCB3b3JrcyBieSBhbGlnbmluZyB0aGUgYGNvcGllZGAgdmFyaWFibGUgdG8gdGhlIGJsb2NrIHNpemUgdXNpbmcgYGlvbWFwX2Rpb19hbGlnbm1lbnRgLiBBZnRlciBhbGlnbm1lbnQsIGl0IHJldmVydHMgdGhlIGl0ZXJhdG9yIGJ5IGNhbGN1bGF0aW5nIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYGNvcGllZGAgYW5kIHRoZSBhbGlnbmVkIHZlcnNpb24uCgpSaWdodCwgSSBzZWUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYWltZWQgYXQgcmVzb2x2aW5nIGEgcG90ZW50aWFsIGlzc3VlLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGFkZHJlc3MgYSBzaXR1YXRpb24gd2hlcmUgcGFnZSBmYXVsdCBmYWlsdXJlcyBtaWdodCBsZWF2ZSBgY29waWVkYCBwYWdlLWFsaWduZWQgYnV0IG5vdCBhbGlnbmVkIHRvIHRoZSBmaWxlIHN5c3RlbSBibG9jayBzaXplLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBnb3RjaGEsIGFuZCBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdG8gY29uZmlybS4KCkZvciBmdXp6aW5nLCBJJiMzOTtsbCB6ZXJvIGluIG9uIHRoZSBmb2xsb3dpbmcgc3ltYm9sczogYF9faW9tYXBfZGlvX3J3YCBhbmQgYGlvbWFwX2Rpb19yd2AuCgpBcyBmb3IgY29uZmlndXJhdGlvbnMsIEkmIzM5O2xsIGJlIHN1cmUgdG8gdGVzdCB0aGlzIHdpdGggYEVYVDRfRlNgLCBgWEZTX0ZTYCwgYW5kIGBCVFJGU19GU2AuIExldCBtZSBxdWlja2x5IGNvbmZpcm0gaWYgdGhvc2UgY29uZmlndXJhdGlvbnMgZW5hYmxlIGBGU19JT01BUGAuIFllcywgSSYjMzk7dmUgYWxyZWFkeSBjaGVja2VkLCBpdCBsb29rcyBsaWtlIGBFWFQ0X0ZTYCwgYFhGU19GU2AgYW5kIGBCVFJGU19GU2AgZG8gYWxsIHNlbGVjdCBgRlNfSU9NQVBgLgoKSSYjMzk7bGwgdXNlIGBzZXQtcmVzdWx0c2AgdG8gcmV0dXJuIHRoZSB2ZXJpZmllZCByZXN1bHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE1OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDssCiAgICAmIzM0O1hGU19GUyYjMzQ7LAogICAgJiMzNDtCVFJGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19faW9tYXBfZGlvX3J3JiMzNDssCiAgICAmIzM0O2lvbWFwX2Rpb19ydyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBpb21hcCBkaXJlY3QgSS9PIGxvZ2ljIHRvIHByb3Blcmx5IGFsaWduIHRoZSBjb3BpZWQgbGVuZ3RoIHRvIHRoZSBmaWxlc3lzdGVtIGJsb2NrIHNpemUgd2hlbiBoYW5kbGluZyBob2xlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIGNvcmUga2VybmVsIHBhdGgsIGZpeGluZyBhbiBpc3N1ZSByZWxhdGVkIHRvIHBhZ2UgZmF1bHQgZmFpbHVyZXMgZHVyaW5nIGRpcmVjdCBJL08uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7WEZTX0ZTJiMzNDssCiAgICAmIzM0O0JUUkZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19pb21hcF9kaW9fcncmIzM0OywKICAgICYjMzQ7aW9tYXBfZGlvX3J3JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGlvbWFwIGRpcmVjdCBJL08gbG9naWMgdG8gcHJvcGVybHkgYWxpZ24gdGhlIGNvcGllZCBsZW5ndGggdG8gdGhlIGZpbGVzeXN0ZW0gYmxvY2sgc2l6ZSB3aGVuIGhhbmRsaW5nIGhvbGVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgY29yZSBrZXJuZWwgcGF0aCwgZml4aW5nIGFuIGlzc3VlIHJlbGF0ZWQgdG8gcGFnZSBmYXVsdCBmYWlsdXJlcyBkdXJpbmcgZGlyZWN0IEkvTy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ1OjA3Ljg5NjI4OTg1M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMTk1MTY0ODA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIixcbiAgICBcIlhGU19GU1wiLFxuICAgIFwiQlRSRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2lvbWFwX2Rpb19yd1wiLFxuICAgIFwiaW9tYXBfZGlvX3J3XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgaW9tYXAgZGlyZWN0IEkvTyBsb2dpYyB0byBwcm9wZXJseSBhbGlnbiB0aGUgY29waWVkIGxlbmd0aCB0byB0aGUgZmlsZXN5c3RlbSBibG9jayBzaXplIHdoZW4gaGFuZGxpbmcgaG9sZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBwYXRoLCBmaXhpbmcgYW4gaXNzdWUgcmVsYXRlZCB0byBwYWdlIGZhdWx0IGZhaWx1cmVzIGR1cmluZyBkaXJlY3QgSS9PLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0NTowNy44OTYyOTU2NTNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4MzcwNTY1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDE0ZTE1YjM4NzA0YWY3MjNlNDRhNWY1YTU4NGM4NjFkYWEwMTY5YzRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMSAxNTo0NTowNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9pb21hcC9kaXJlY3QtaW8uYyBiL2ZzL2lvbWFwL2RpcmVjdC1pby5jXFxuaW5kZXggYjMzNjhkNjRlODFiYi4uYTkwNzM4ODZjMmM2NiAxMDA2NDRcXG4tLS0gYS9mcy9pb21hcC9kaXJlY3QtaW8uY1xcbisrKyBiL2ZzL2lvbWFwL2RpcmVjdC1pby5jXFxuQEAgLTU5NCwxMiArNTk0LDIwIEBAIHN0YXRpYyBpbnQgaW9tYXBfZGlvX2Jpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXFxuIFxcbiBzdGF0aWMgaW50IGlvbWFwX2Rpb19ob2xlX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG4ge1xcbi1cXHRsb2ZmX3QgbGVuZ3RoID0gaW92X2l0ZXJfemVybyhpb21hcF9sZW5ndGgoaXRlciksIGRpby1cXHUwMDNlc3VibWl0Lml0ZXIpO1xcbitcXHRsb2ZmX3QgY29waWVkID0gaW92X2l0ZXJfemVybyhpb21hcF9sZW5ndGgoaXRlciksIGRpby1cXHUwMDNlc3VibWl0Lml0ZXIpO1xcbitcXHR1bnNpZ25lZCBpbnQgYnMgPSBpb21hcF9kaW9fYWxpZ25tZW50KGl0ZXItXFx1MDAzZWlub2RlLCBpdGVyLVxcdTAwM2Vpb21hcC5iZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBkaW8tXFx1MDAzZWZsYWdzKTtcXG4rXFx0bG9mZl90IGFsaWduZWRfY29waWVkID0gcm91bmRfZG93bihjb3BpZWQsIGJzKTtcXG4gXFxuLVxcdGRpby1cXHUwMDNlc2l6ZSArPSBsZW5ndGg7XFxuLVxcdGlmICghbGVuZ3RoKVxcbitcXHQvKlxcbitcXHQgKiBJZiBmcyBibG9jayBzaXplIGlzIGxhcmdlciB0aGFuIHBhZ2Ugc2l6ZSwgcGFnZSBmYXVsdCBmYWlsdXJlXFxuK1xcdCAqIGNhbiBjYXVzZSBAY29waWVkIHRvIGJlIHBhZ2UgYWxpZ25lZCBidXQgbm90IGZzIGJsb2NrIGFsaWduZWQuXFxuK1xcdCAqL1xcbitcXHRpb3ZfaXRlcl9yZXZlcnQoZGlvLVxcdTAwM2VzdWJtaXQuaXRlciwgY29waWVkIC0gYWxpZ25lZF9jb3BpZWQpO1xcbitcXHRkaW8tXFx1MDAzZXNpemUgKz0gYWxpZ25lZF9jb3BpZWQ7XFxuK1xcdGlmICghYWxpZ25lZF9jb3BpZWQpXFxuIFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi1cXHRyZXR1cm4gaW9tYXBfaXRlcl9hZHZhbmNlKGl0ZXIsIGxlbmd0aCk7XFxuK1xcdHJldHVybiBpb21hcF9pdGVyX2FkdmFuY2UoaXRlciwgYWxpZ25lZF9jb3BpZWQpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGlvbWFwX2Rpb19pbmxpbmVfaXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaW9taSwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0NTowOC4yODA4Mjg5NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQ5ODEwNjE0ODc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIixcbiAgICBcIlhGU19GU1wiLFxuICAgIFwiQlRSRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2lvbWFwX2Rpb19yd1wiLFxuICAgIFwiaW9tYXBfZGlvX3J3XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgaW9tYXAgZGlyZWN0IEkvTyBsb2dpYyB0byBwcm9wZXJseSBhbGlnbiB0aGUgY29waWVkIGxlbmd0aCB0byB0aGUgZmlsZXN5c3RlbSBibG9jayBzaXplIHdoZW4gaGFuZGxpbmcgaG9sZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBwYXRoLCBmaXhpbmcgYW4gaXNzdWUgcmVsYXRlZCB0byBwYWdlIGZhdWx0IGZhaWx1cmVzIGR1cmluZyBkaXJlY3QgSS9PLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxNGUxNWIzODcwNGFmNzIzZTQ0YTVmNWE1ODRjODYxZGFhMDE2OWM0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAxNTo0NTowNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jIGIvZnMvaW9tYXAvZGlyZWN0LWlvLmNcbmluZGV4IGIzMzY4ZDY0ZTgxYmIuLmE5MDczODg2YzJjNjYgMTAwNjQ0XG4tLS0gYS9mcy9pb21hcC9kaXJlY3QtaW8uY1xuKysrIGIvZnMvaW9tYXAvZGlyZWN0LWlvLmNcbkBAIC01OTQsMTIgKzU5NCwyMCBAQCBzdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuIFxuIHN0YXRpYyBpbnQgaW9tYXBfZGlvX2hvbGVfaXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuIHtcbi1cdGxvZmZfdCBsZW5ndGggPSBpb3ZfaXRlcl96ZXJvKGlvbWFwX2xlbmd0aChpdGVyKSwgZGlvLVx1MDAzZXN1Ym1pdC5pdGVyKTtcbitcdGxvZmZfdCBjb3BpZWQgPSBpb3ZfaXRlcl96ZXJvKGlvbWFwX2xlbmd0aChpdGVyKSwgZGlvLVx1MDAzZXN1Ym1pdC5pdGVyKTtcbitcdHVuc2lnbmVkIGludCBicyA9IGlvbWFwX2Rpb19hbGlnbm1lbnQoaXRlci1cdTAwM2Vpbm9kZSwgaXRlci1cdTAwM2Vpb21hcC5iZGV2LFxuK1x0XHRcdFx0XHQgICAgICBkaW8tXHUwMDNlZmxhZ3MpO1xuK1x0bG9mZl90IGFsaWduZWRfY29waWVkID0gcm91bmRfZG93bihjb3BpZWQsIGJzKTtcbiBcbi1cdGRpby1cdTAwM2VzaXplICs9IGxlbmd0aDtcbi1cdGlmICghbGVuZ3RoKVxuK1x0LypcbitcdCAqIElmIGZzIGJsb2NrIHNpemUgaXMgbGFyZ2VyIHRoYW4gcGFnZSBzaXplLCBwYWdlIGZhdWx0IGZhaWx1cmVcbitcdCAqIGNhbiBjYXVzZSBAY29waWVkIHRvIGJlIHBhZ2UgYWxpZ25lZCBidXQgbm90IGZzIGJsb2NrIGFsaWduZWQuXG4rXHQgKi9cbitcdGlvdl9pdGVyX3JldmVydChkaW8tXHUwMDNlc3VibWl0Lml0ZXIsIGNvcGllZCAtIGFsaWduZWRfY29waWVkKTtcbitcdGRpby1cdTAwM2VzaXplICs9IGFsaWduZWRfY29waWVkO1xuK1x0aWYgKCFhbGlnbmVkX2NvcGllZClcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4tXHRyZXR1cm4gaW9tYXBfaXRlcl9hZHZhbmNlKGl0ZXIsIGxlbmd0aCk7XG4rXHRyZXR1cm4gaW9tYXBfaXRlcl9hZHZhbmNlKGl0ZXIsIGFsaWduZWRfY29waWVkKTtcbiB9XG4gXG4gc3RhdGljIGludCBpb21hcF9kaW9faW5saW5lX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKmlvbWksIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ1OjA4LjI4MDgzMDMxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQyMzQwNDQxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGZzL2lvbWFwL2RpcmVjdC1pby5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgaW9tYXBfZGlvX2hvbGVfaXRlcmAgZnVuY3Rpb24uIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY2hhbmdlIGluIGhvdyB0aGUgY29waWVkIGxlbmd0aCBpcyBhbGlnbmVkIHRvIHRoZSBibG9jayBzaXplLCBsZXZlcmFnaW5nIGBpb21hcF9kaW9fYWxpZ25tZW50YC4gR2l2ZW4gdGhhdCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZGVlcCB3aXRoaW4gdGhlIGNvcmUga2VybmVsLCBkaXJlY3RseSBpbXBhY3RpbmcgaW9tYXAgZGlyZWN0IEkvTywgbXkgc3BpZGV5LXNlbnNlIGlzIHRpbmdsaW5nIOKAkyB0aGlzIHNjcmVhbXMgXCJmdXp6IG1lIVwiXG5cbk15IG5leHQgc3RlcCBpcyBhbHdheXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUuIFNpbmNlIGBpb21hcF9kaW9faG9sZV9pdGVyYCBoYXMgYmVlbiBtb2RpZmllZCwgSSBzaG91bGQgZXhhbWluZSB0aGUgZnVuY3Rpb24gaXRzZWxmIGFuZCBpdHMgY2FsbGVycy4gQWgsIGl0J3MgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgbmFycm93cyBkb3duIHRoZSBzZWFyY2ggYSBiaXQuIExldCdzIHNlZS4uLiBpdCdzIGNhbGxlZCBieSBgaW9tYXBfZGlvX2l0ZXJgLiBOb3cgSSB3YW50IHRvIGRldGVybWluZSB0aGUgcG90ZW50aWFsIHJlYWNoIG9mIHRoaXMgY2hhbmdlLiBJIG5lZWQgdG8gaWRlbnRpZnkgKm5vbiotc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGNhbGwgYGlvbWFwX2Rpb19pdGVyYC4gVGhhdCB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgdGhlIGlucHV0cyBhbmQgZGF0YSBmbG93cyBsb29rIGxpa2UgYW5kIHRodXMgYmV0dGVyIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMxNiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ1OjEyLjcwNDIzNzI4MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTkxOTc3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb21hcF9kaW9faG9sZV9pdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2lvbWFwL2RpcmVjdC1pby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2lvbWFwL2RpcmVjdC1pby5jPTQxNT1zdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNTk0LVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjU5NTpzdGF0aWMgaW50IGlvbWFwX2Rpb19ob2xlX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy01OTYte1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9NjQ1PXN0YXRpYyBpbnQgaW9tYXBfZGlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY1MC1cXHRcXHRcXHRyZXR1cm4gLUVJTztcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo2NTE6XFx0XFx0cmV0dXJuIGlvbWFwX2Rpb19ob2xlX2l0ZXIoaXRlciwgZGlvKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NTItXFx0Y2FzZSBJT01BUF9VTldSSVRURU46XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjUzLVxcdFxcdGlmICghKGRpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJT01BUF9ESU9fV1JJVEUpKVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjY1NDpcXHRcXHRcXHRyZXR1cm4gaW9tYXBfZGlvX2hvbGVfaXRlcihpdGVyLCBkaW8pO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY1NS1cXHRcXHRyZXR1cm4gaW9tYXBfZGlvX2Jpb19pdGVyKGl0ZXIsIGRpbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ1OjEyLjc1MDE2MzU3OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MzEzNDI5NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKlN0YXRpYyBGdW5jdGlvbiBJbnZlc3RpZ2F0aW9uOiBpb21hcFxcX2Rpb1xcX2l0ZXIqKlxuXG5Pa2F5LCBzbyBgaW9tYXBfZGlvX2l0ZXJgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIFN0YXRpYyBmdW5jdGlvbnMsIGJ5IGRlZmluaXRpb24sIGhhdmUgbGltaXRlZCBzY29wZSwgd2hpY2ggdXN1YWxseSBtZWFucyB0aGV5J3JlIGludGVncmFsIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIGEgc3BlY2lmaWMgbW9kdWxlIG9yIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIGNvbnRleHQsIHNvIG15IG5leHQgbW92ZSBpcyBvYnZpb3VzOiBJIG5lZWQgdG8gaWRlbnRpZnkgKmFsbCogdGhlIHBsYWNlcyB3aGVyZSBgaW9tYXBfZGlvX2l0ZXJgIGlzIGFjdHVhbGx5IGNhbGxlZC4gVGhhdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgZnVuY3Rpb24gYW5kIGl0cyBkZXBlbmRlbmNpZXMuIFRoaXMgaXMgd2hlcmUgSSBzdGFydCBkaWdnaW5nIGludG8gdGhlIGNhbGwgZ3JhcGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMjMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0NToxNS41ODE1MDg2OTVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQzMTgzOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9tYXBfZGlvX2l0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaW9tYXAvZGlyZWN0LWlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW9tYXAvZGlyZWN0LWlvLmM9NjEzPXN0YXRpYyBpbnQgaW9tYXBfZGlvX2lubGluZV9pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppb21pLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NDQtXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NjQ1OnN0YXRpYyBpbnQgaW9tYXBfZGlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NDYte1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9Njk3PV9faW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtODIyLVxcdHdoaWxlICgocmV0ID0gaW9tYXBfaXRlcihcXHUwMDI2aW9taSwgb3BzKSkgXFx1MDAzZSAwKSB7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6ODIzOlxcdFxcdGlvbWkuc3RhdHVzID0gaW9tYXBfZGlvX2l0ZXIoXFx1MDAyNmlvbWksIGRpbyk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtODI0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0NToxNS42MjU4MzI2MzNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjc3NjgxNDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEknbSB0aGUgb25lIHRoaW5raW5nIGl0LCBhbmQgY29uc2lkZXJpbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6XG5cbioqVHJhY2luZyB0aGUgRGlyZWN0IEkvTyBQYXRoKipcblxuQWxyaWdodCwgSSdtIGRpdmluZyBpbnRvIHRoZSBkaXJlY3QgSS9PIGNvZGUgcGF0aCBoZXJlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdlJ3JlIHJlYWNoaW5nIGBfX2lvbWFwX2Rpb19yd2AuIFRoZSBmdW5jdGlvbiBgX19pb21hcF9kaW9fcndgIGlzIGtleSwgdGhhdCdzIHRoZSBvbmUgYWN0dWFsbHkgZG9pbmcgdGhlIGRpcmVjdCBJL08gcmVhZC93cml0ZS4gSSBzZWUgdGhhdCBpdCdzIGNhbGxlZCBieSBgaW9tYXBfZGlvX2l0ZXJgLlxuXG5TbywgdGhlIG5leHQgbG9naWNhbCBzdGVwLCBiZWZvcmUgSSBkaWcgdG9vIGRlZXBseSBpbnRvIGBfX2lvbWFwX2Rpb19yd2AgaXRzZWxmLCBpcyB0byBiYWNrIHVwIGEgbGV2ZWwuIEkgbmVlZCB0byBrbm93IHRoZSAqY2FsbGVycyogb2YgYF9faW9tYXBfZGlvX3J3YC4gV2hhdCBjb2RlIGlzIHJlc3BvbnNpYmxlIGZvciB0cmlnZ2VyaW5nIHRoaXMgY29yZSBkaXJlY3QgSS9PIGZ1bmN0aW9uPyBVbmRlcnN0YW5kaW5nIHRoZSBlbnRyeSBwb2ludHMgd2lsbCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byBwcm9wZXJseSBhbmFseXplIHRoZSBkYXRhIGZsb3cgYW5kIGFueSBwb3RlbnRpYWwgaXNzdWVzIG9yIG9wdGltaXphdGlvbnMuIExldCdzIHNlZSB3aG8ncyBjYWxsaW5nIGl0OyB0aGVuIEkgY2FuIHVuZGVyc3RhbmQgdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjAyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NDU6MTguOTAzNTE2NDAzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDkwMjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9faW9tYXBfZGlvX3J3XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2lvbWFwL2RpcmVjdC1pby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2lvbWFwL2RpcmVjdC1pby5jPTQxNT1zdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNTEwLVxcdFxcdCAqIFdyaXRlcyB0aGF0IGV4dGVuZCBpX3NpemUgYXJlIGFsc28gbm90IHN1cHBvcnRlZCwgYnV0IHRoaXMgaXNcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo1MTE6XFx0XFx0ICogaGFuZGxlZCBpbiBfX2lvbWFwX2Rpb19ydygpLlxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTUxMi1cXHRcXHQgKi9cXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTY0NT1zdGF0aWMgaW50IGlvbWFwX2Rpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02ODUtICogV2hlbiBwYWdlIGZhdWx0cyBhcmUgZGlzYWJsZWQgYW5kIEBkaW9fZmxhZ3MgaW5jbHVkZXMgSU9NQVBfRElPX1BBUlRJQUwsXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6Njg2OiAqIF9faW9tYXBfZGlvX3J3IGNhbiByZXR1cm4gYSBwYXJ0aWFsIHJlc3VsdCBpZiBpdCBlbmNvdW50ZXJzIGEgbm9uLXJlc2lkZW50XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjg3LSAqIHBhZ2UgaW4gQGl0ZXIgYWZ0ZXIgcHJlcGFyaW5nIGEgdHJhbnNmZXIuICBJbiB0aGF0IGNhc2UsIHRoZSBub24tcmVzaWRlbnRcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTY5Nj1zdHJ1Y3QgaW9tYXBfZGlvICpcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo2OTc6X19pb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjk4LVxcdFxcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcywgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgKmRvcHMsXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MDctfVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjkwODpFWFBPUlRfU1lNQk9MX0dQTChfX2lvbWFwX2Rpb19ydyk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTA5LVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9OTExPWlvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkxNi1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5MTc6XFx0ZGlvID0gX19pb21hcF9kaW9fcncoaW9jYiwgaXRlciwgb3BzLCBkb3BzLCBkaW9fZmxhZ3MsIHByaXZhdGUsXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTE4LVxcdFxcdFxcdCAgICAgZG9uZV9iZWZvcmUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0NToxOC45NDg2MTEzODFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTIxMDA5OTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgdGhlIGNvbnRleHQgaXMgbXkgd29yazpcblxuKipEZWVwIERpdmUgaW50byBgaW9tYXBfZGlvX3J3YCoqXG5cbkFscmlnaHQsIHNvIEkgc2VlIGBfX2lvbWFwX2Rpb19yd2AgaXMgZXhwb3J0ZWQsIGFuZCBgaW9tYXBfZGlvX3J3YCBpdHNlbGYgaXMgYWxzbyBhbiBlbnRyeSBwb2ludC4gVGhhdCdzIGludGVyZXN0aW5nLCBzdWdnZXN0aW5nIHBvdGVudGlhbCBpbnRlcm5hbCB2cy4gZXh0ZXJuYWwgYWNjZXNzIHBvaW50cyBvciBwb3NzaWJseSBkaWZmZXJlbnQgbGV2ZWxzIG9mIGFic3RyYWN0aW9uLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aG9zZSB0d28uIFRoZSBvYnZpb3VzIG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgaW9tYXBfZGlvX3J3YCBpbiBkZXRhaWwuIFdoYXQgZXhhY3RseSBpcyBpdHMgcHVycG9zZSwgYW5kIGhvdyBkb2VzIGl0IHJlbGF0ZSB0byBkaXJlY3QgSS9PIG9wZXJhdGlvbnM/IEknbGwgY2hlY2sgaXRzIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGlzIGNyaXRpY2FsIGxpbmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1MzEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0NToyMS44Njk2MzkyMDNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDExMjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvbWFwX2Rpb19yd1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9pb21hcC9kaXJlY3QtaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9pb21hcC9kaXJlY3QtaW8uYz00MTU9c3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTUxMC1cXHRcXHQgKiBXcml0ZXMgdGhhdCBleHRlbmQgaV9zaXplIGFyZSBhbHNvIG5vdCBzdXBwb3J0ZWQsIGJ1dCB0aGlzIGlzXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NTExOlxcdFxcdCAqIGhhbmRsZWQgaW4gX19pb21hcF9kaW9fcncoKS5cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy01MTItXFx0XFx0ICovXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYz02NDU9c3RhdGljIGludCBpb21hcF9kaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjc2LS8qXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6Njc3OiAqIGlvbWFwX2Rpb19ydygpIGFsd2F5cyBjb21wbGV0ZXMgT19bRF1TWU5DIHdyaXRlcyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIElPXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjc4LSAqIGlzIGJlaW5nIGlzc3VlZCBhcyBBSU8gb3Igbm90LiAgVGhpcyBhbGxvd3MgdXMgdG8gb3B0aW1pc2UgcHVyZSBkYXRhIHdyaXRlc1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjg1LSAqIFdoZW4gcGFnZSBmYXVsdHMgYXJlIGRpc2FibGVkIGFuZCBAZGlvX2ZsYWdzIGluY2x1ZGVzIElPTUFQX0RJT19QQVJUSUFMLFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjY4NjogKiBfX2lvbWFwX2Rpb19ydyBjYW4gcmV0dXJuIGEgcGFydGlhbCByZXN1bHQgaWYgaXQgZW5jb3VudGVycyBhIG5vbi1yZXNpZGVudFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY4Ny0gKiBwYWdlIGluIEBpdGVyIGFmdGVyIHByZXBhcmluZyBhIHRyYW5zZmVyLiAgSW4gdGhhdCBjYXNlLCB0aGUgbm9uLXJlc2lkZW50XFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYz02OTY9c3RydWN0IGlvbWFwX2RpbyAqXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6Njk3Ol9faW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY5OC1cXHRcXHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzICpkb3BzLFxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNzE0LVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjcxNTpcXHR0cmFjZV9pb21hcF9kaW9fcndfYmVnaW4oaW9jYiwgaXRlciwgZGlvX2ZsYWdzLCBkb25lX2JlZm9yZSk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNzE2LVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtODg1LVxcdFxcdGlmICghd2FpdF9mb3JfY29tcGxldGlvbikge1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjg4NjpcXHRcXHRcXHR0cmFjZV9pb21hcF9kaW9fcndfcXVldWVkKGlub2RlLCBpb21pLnBvcywgaW9taS5sZW4pO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTg4Ny1cXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlPQ0JRVUVVRUQpO1xcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTA3LX1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5MDg6RVhQT1JUX1NZTUJPTF9HUEwoX19pb21hcF9kaW9fcncpO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkwOS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYz05MTA9c3NpemVfdFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjkxMTppb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTEyLVxcdFxcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcywgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgKmRvcHMsXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MTYtXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTE3OlxcdGRpbyA9IF9faW9tYXBfZGlvX3J3KGlvY2IsIGl0ZXIsIG9wcywgZG9wcywgZGlvX2ZsYWdzLCBwcml2YXRlLFxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkxOC1cXHRcXHRcXHQgICAgIGRvbmVfYmVmb3JlKTtcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkyMi19XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTIzOkVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2Rpb19ydyk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTI0LVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9OTk5PXNzaXplX3QgX19pb21hcF9kaW9fcmVhZF9zaW1wbGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDI3LVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjEwMjg6XFx0dHJhY2VfaW9tYXBfZGlvX3J3X2JlZ2luKGlvY2IsIGl0ZXIsIDAsIDApO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTEwMjktXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDczLVxcdHN1Ym1pdF9iaW8oYmlvKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMDc0OlxcdHRyYWNlX2lvbWFwX2Rpb19yd19xdWV1ZWQoaW9taS1cXHUwMDNlaW5vZGUsIGlvY2ItXFx1MDAzZWtpX3BvcywgaW9taS1cXHUwMDNlbGVuKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDc1LVxcdHJldHVybiAtRUlPQ0JRVUVVRUQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ1OjIxLjkxNDY1NjQxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MzU0OTM0NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW9tYXAgRGlyZWN0IEkvTyBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGlvbWFwIGRpcmVjdCBJL08gY29kZSwgc3BlY2lmaWNhbGx5IGBpb21hcF9kaW9fcndgIGFuZCBgX19pb21hcF9kaW9fcndgLiBUaGVzZSBhcmUsIHdpdGhvdXQgYSBkb3VidCwgdGhlIGNvcmUgZW50cnkgcG9pbnRzIGZvciBkaXJlY3QgSS9PIG9wZXJhdGlvbnMgd2l0aGluIGlvbWFwLiBHaXZlbiB0aGVpciBmdW5kYW1lbnRhbCByb2xlLCB0aGV5J3JlIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgdGhlbSBvbiBteSBsaXN0LCBmcm9udCBhbmQgY2VudGVyLlxuXG5Ob3csIGJlZm9yZSBJIGRpdmUgaW50byBjb25zdHJ1Y3RpbmcgZnV6eiBjYXNlcywgaXQncyBwcnVkZW50IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGllZCB0byBpb21hcCdzIGZ1bmN0aW9uYWxpdHkuIFRoZXJlIG1pZ2h0IGJlIHNwZWNpZmljIGBDT05GSUdgIHNldHRpbmdzIHRoYXQgZW5hYmxlIG9yIGRpc2FibGUgY2VydGFpbiBmZWF0dXJlcyBvciBjb2RlcGF0aHMgdGhhdCBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgd2hlbiBjcmFmdGluZyBteSBmdXp6aW5nIGVudmlyb25tZW50IGFuZCBzZXR1cC4gRGlzY292ZXJpbmcgdGhlc2Ugd2lsbCBvcHRpbWl6ZSBteSBjb3ZlcmFnZSBhbmQgZW5zdXJlIEknbSBoaXR0aW5nIGFsbCB0aGUgcmVsZXZhbnQgY29kZS4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgdG8gZW5zdXJlIGFsbCBwb3RlbnRpYWxseSBpbXBvcnRhbnQgQ09ORklHcyBhcmUgZW5hYmxlZCBpbiBteSBmdXp6aW5nIHRhcmdldC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjAyMSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ1OjI1Ljg1MDE1MjQzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODM1MDA3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRlNfSU9NQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTEyPWNvbmZpZyBWQUxJREFURV9GU19QQVJTRVJcXG4tLVxcbmZzL0tjb25maWctMTctXFxuZnMvS2NvbmZpZzoxODpjb25maWcgRlNfSU9NQVBcXG5mcy9LY29uZmlnLTE5LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NDU6MjUuODk4NTA4Njg3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NTQxNTkxNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgRlNfSU9NQVBgIEZsYWcqKlxuXG5SaWdodCwgYEZTX0lPTUFQYC4gSXQncyBhIGJvb2xlYW4sIGEgcHJldHR5IGltcG9ydGFudCBvbmUgYXQgdGhhdCwgZ2VuZXJhbGx5IGVuYWJsZWQgYnkgdGhlIGJpZyBwbGF5ZXJzIGluIHRoZSBmaWxlc3lzdGVtIGdhbWU6IFhGUywgZXh0NCwgYnRyZnMsIHRoYXQga2luZCBvZiB0aGluZy4gU28sIGxldCdzIGRyaWxsIGRvd24gYW5kIHNlZSBleGFjdGx5IHdoYXQncyB0cmlnZ2VyaW5nIGl0cyBzZWxlY3Rpb24uIFdoYXQgY29tcG9uZW50cywgd2hhdCBrZXJuZWwgZmVhdHVyZXMsIHdoYXQgc3BlY2lmaWMgZmlsZXN5c3RlbSBvcHRpb25zIGFyZSBkZWNpZGluZyB0aGF0IHRoaXMgcGFydGljdWxhciBmbGFnIG5lZWRzIHRvIGJlIHNldD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcyBhbmQgaW1wbGljYXRpb25zIGZyb20gYSBzeXN0ZW1zIHBlcnNwZWN0aXZlLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZWJhc2UgYW5kIHRyYWNlIHRoZSBhY3RpdmF0aW9uIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzOTgsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0NToyOC43NTI2NzAzNzNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTIxNDc2NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IEZTX0lPTUFQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lvbWFwL3BvcnRpbmcucnN0PTQ3PUZpcnN0LCBhZGQgYGAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW9tYXAuaFxcdTAwM2VgYCBmcm9tIHlvdXIgc291cmNlIGNvZGUgYW5kIGFkZFxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaW9tYXAvcG9ydGluZy5yc3Q6NDg6YGBzZWxlY3QgRlNfSU9NQVBgYCB0byB5b3VyIGZpbGVzeXN0ZW0ncyBLY29uZmlnIG9wdGlvbi5cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lvbWFwL3BvcnRpbmcucnN0LTQ5LUJ1aWxkIHRoZSBrZXJuZWwsIHJ1biBmc3Rlc3RzIHdpdGggdGhlIGBgLWcgYWxsYGAgb3B0aW9uIGFjcm9zcyBhIHdpZGVcXG4tLVxcbmJsb2NrL0tjb25maWc9NT1tZW51Y29uZmlnIEJMT0NLXFxuLS1cXG5ibG9jay9LY29uZmlnLTctICAgICAgIGRlZmF1bHQgeVxcbmJsb2NrL0tjb25maWc6ODogICAgICAgc2VsZWN0IEZTX0lPTUFQXFxuYmxvY2svS2NvbmZpZy05LSAgICAgICBzZWxlY3QgU0JJVE1BUFxcbi0tXFxuZnMvS2NvbmZpZz01OD1jb25maWcgRlNfREFYXFxuLS1cXG5mcy9LY29uZmlnLTYxLVxcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcXG5mcy9LY29uZmlnOjYyOlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL0tjb25maWctNjMtXFx0c2VsZWN0IERBWFxcbi0tXFxuZnMvYnRyZnMvS2NvbmZpZz0zPWNvbmZpZyBCVFJGU19GU1xcbi0tXFxuZnMvYnRyZnMvS2NvbmZpZy0xNC1cXHRzZWxlY3QgWlNURF9ERUNPTVBSRVNTXFxuZnMvYnRyZnMvS2NvbmZpZzoxNTpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9idHJmcy9LY29uZmlnLTE2LVxcdHNlbGVjdCBSQUlENl9QUVxcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZz0zPWNvbmZpZyBFUk9GU19GU1xcbi0tXFxuZnMvZXJvZnMvS2NvbmZpZy04LVxcdHNlbGVjdCBDUllQVE9fREVGTEFURSBpZiBFUk9GU19GU19aSVBfQUNDRUxcXG5mcy9lcm9mcy9LY29uZmlnOjk6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMvZXJvZnMvS2NvbmZpZy0xMC1cXHRzZWxlY3QgTFo0X0RFQ09NUFJFU1MgaWYgRVJPRlNfRlNfWklQXFxuLS1cXG5mcy9leGZhdC9LY29uZmlnPTM9Y29uZmlnIEVYRkFUX0ZTXFxuLS1cXG5mcy9leGZhdC9LY29uZmlnLTYtXFx0c2VsZWN0IE5MU1xcbmZzL2V4ZmF0L0tjb25maWc6NzpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9leGZhdC9LY29uZmlnLTgtXFx0aGVscFxcbi0tXFxuZnMvZXh0Mi9LY29uZmlnPTI9Y29uZmlnIEVYVDJfRlNcXG4tLVxcbmZzL2V4dDIvS2NvbmZpZy00LVxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbmZzL2V4dDIvS2NvbmZpZzo1OlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL2V4dDIvS2NvbmZpZy02LVxcdGhlbHBcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZz0yPWNvbmZpZyBFWFQ0X0ZTXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNy1cXHRzZWxlY3QgQ1JDMzJcXG5mcy9leHQ0L0tjb25maWc6ODpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9leHQ0L0tjb25maWctOS1cXHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cXG4tLVxcbmZzL2YyZnMvS2NvbmZpZz0yPWNvbmZpZyBGMkZTX0ZTXFxuLS1cXG5mcy9mMmZzL0tjb25maWctOS1cXHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cXG5mcy9mMmZzL0tjb25maWc6MTA6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMvZjJmcy9LY29uZmlnLTExLVxcdHNlbGVjdCBMWjRfQ09NUFJFU1MgaWYgRjJGU19GU19MWjRcXG4tLVxcbmZzL2Z1c2UvS2NvbmZpZz0yPWNvbmZpZyBGVVNFX0ZTXFxuLS1cXG5mcy9mdXNlL0tjb25maWctNC1cXHRzZWxlY3QgRlNfUE9TSVhfQUNMXFxuZnMvZnVzZS9LY29uZmlnOjU6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMvZnVzZS9LY29uZmlnLTYtXFx0aGVscFxcbi0tXFxuZnMvZ2ZzMi9LY29uZmlnPTI9Y29uZmlnIEdGUzJfRlNcXG4tLVxcbmZzL2dmczIvS2NvbmZpZy03LVxcdHNlbGVjdCBRVU9UQUNUTFxcbmZzL2dmczIvS2NvbmZpZzo4OlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL2dmczIvS2NvbmZpZy05LVxcdGhlbHBcXG4tLVxcbmZzL2hwZnMvS2NvbmZpZz0yPWNvbmZpZyBIUEZTX0ZTXFxuLS1cXG5mcy9ocGZzL0tjb25maWctNS1cXHRzZWxlY3QgQlVGRkVSX0hFQURcXG5mcy9ocGZzL0tjb25maWc6NjpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9ocGZzL0tjb25maWctNy1cXHRoZWxwXFxuLS1cXG5mcy9uaWxmczIvS2NvbmZpZz0yPWNvbmZpZyBOSUxGUzJfRlNcXG4tLVxcbmZzL25pbGZzMi9LY29uZmlnLTUtXFx0c2VsZWN0IENSQzMyXFxuZnMvbmlsZnMyL0tjb25maWc6NjpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9uaWxmczIvS2NvbmZpZy03LVxcdGhlbHBcXG4tLVxcbmZzL250ZnMvS2NvbmZpZz0yPWNvbmZpZyBOVEZTX0ZTXFxuLS1cXG5mcy9udGZzL0tjb25maWctNC1cXHRzZWxlY3QgTkxTXFxuZnMvbnRmcy9LY29uZmlnOjU6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMvbnRmcy9LY29uZmlnLTYtXFx0aGVscFxcbi0tXFxuZnMveGZzL0tjb25maWc9Mj1jb25maWcgWEZTX0ZTXFxuLS1cXG5mcy94ZnMvS2NvbmZpZy02LVxcdHNlbGVjdCBDUkMzMlxcbmZzL3hmcy9LY29uZmlnOjc6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMveGZzL0tjb25maWctOC1cXHRoZWxwXFxuLS1cXG5mcy96b25lZnMvS2NvbmZpZz0xPWNvbmZpZyBaT05FRlNfRlNcXG4tLVxcbmZzL3pvbmVmcy9LY29uZmlnLTQtXFx0ZGVwZW5kcyBvbiBCTEtfREVWX1pPTkVEXFxuZnMvem9uZWZzL0tjb25maWc6NTpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy96b25lZnMvS2NvbmZpZy02LVxcdHNlbGVjdCBDUkMzMlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0NTozMC42MDQ4MjQzNTFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIyMjIxNzQzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IEFuYWx5c2lzIG9mIHRoZSBpb21hcCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgYEZTX0lPTUFQYCBjb25maWd1cmF0aW9uLiBJdCdzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgYnkgcXVpdGUgYSBmZXcgZmlsZSBzeXN0ZW1zLCBsaWtlIGBFWFQ0X0ZTYCwgYFhGU19GU2AsIGFuZCBgQlRSRlNfRlNgLiBBIHN0cmFpZ2h0Zm9yd2FyZCBhcHByb2FjaCB0byBlbnN1cmUgaW9tYXAgaXMgcHJlc2VudCB3b3VsZCBiZSB0byBkaXJlY3RseSBlbmFibGUgdGhlc2UgZmlsZXN5c3RlbSBjb25maWdzLiBCdXQgaG9sZCBvbi4uLiBgQkxPQ0tgIGFsc28gc2VsZWN0cyBgRlNfSU9NQVBgPyBZZXMsIHRoYXQncyByaWdodCwgYGJsb2NrL0tjb25maWdgIHRha2VzIGNhcmUgb2YgdGhhdCBkZXBlbmRlbmN5LiBUaGF0IG1lYW5zLCBwcmFjdGljYWxseSBzcGVha2luZywgaW9tYXAgaXMgYWx3YXlzIGVuYWJsZWQgYXMgbG9uZyBhcyB0aGUgYmxvY2sgZGV2aWNlIHN1cHBvcnQgaXMgdGhlcmUuXG5cbk5vdywgY29uc2lkZXJpbmcgdGhlIHBhdGNoIEknbSBleGFtaW5pbmcsIGl0IG1vZGlmaWVzIGBpb21hcF9kaW9faG9sZV9pdGVyYC4gVGhpcyBpcyBhIGNydWNpYWwgZnVuY3Rpb24gYXMgaXQncyBjYWxsZWQgYnkgYGlvbWFwX2Rpb19pdGVyYCwgd2hpY2gsIGluIHR1cm4sIGlzIGludm9rZWQgYnkgYF9faW9tYXBfZGlvX3J3YCBhbmQgYGlvbWFwX2Rpb19yd2AuIEdpdmVuIHRoaXMgY2FsbCBjaGFpbiwgaXQgc3VnZ2VzdHMgbXkgZnV6emluZyBlZmZvcnRzIHNob3VsZCBwcmltYXJpbHkgZm9jdXMgb24gYGlvbWFwX2Rpb19yd2AgYW5kIGBfX2lvbWFwX2Rpb19yd2AuIFRoZXkncmUgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50cy5cblxuSSBhbHNvIHdvbmRlciBpZiBgX19pb21hcF9kaW9fcmVhZF9zaW1wbGVgIG1pZ2h0IGJlIHJlbGV2YW50LCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZS4gTGV0IG1lIGRvdWJsZS1jaGVjayB3aGV0aGVyIGl0IGNhbGxzIGBpb21hcF9kaW9faG9sZV9pdGVyYC4gSSBuZWVkIHRvIHJ1bGUgaXQgaW4gb3Igb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODI1LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ1OjM1LjgyNzA0NDM0M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyMTk4NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19pb21hcF9kaW9fcmVhZF9zaW1wbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaW9tYXAvZGlyZWN0LWlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW9tYXAvZGlyZWN0LWlvLmM9OTgxPXN0YXRpYyB2b2lkIGlvbWFwX2Rpb19zaW1wbGVfZW5kX2lvKHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTk5OC1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo5OTk6c3NpemVfdCBfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDAwLVxcdFxcdHN0cnVjdCBpb21hcF9pdGVyICppb21pKVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTA4NC19XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MTA4NTpFWFBPUlRfU1lNQk9MX0dQTChfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZSk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMTA4Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NDU6MzUuODcxMjcxMDdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEzMDIxMjE3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeTpcblxuKipEaWdnaW5nIGludG8gRGlyZWN0IEkvTyBhbmQgSXRlcmF0b3JzKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlYCBhbmQgaW1tZWRpYXRlbHkgYSBxdWVzdGlvbiBwb3BzIHVwOiBpcyBpdCBjYWxsaW5nIGBpb21hcF9kaW9fYmlvX2l0ZXJgIGRpcmVjdGx5PyBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQncyBhIGtleSBvcHRpbWl6YXRpb24gcG9pbnQsIHNvIGl0IHdhcnJhbnRzIGEgcXVpY2sgY2hlY2suIEkgd2FudCB0byBzZWUgaWYgdGhpcyBmdW5jdGlvbiBpcyBsZXZlcmFnaW5nIHRoZSBpdGVyYXRvciBhcHByb2FjaCBmb3IgRGlyZWN0IEkvTyByZWFkcy4gSWYgaXQgaXMsIHRoZW4gd2UncmUgbGlrZWx5IGluIGEgZ29vZCBzcG90IHBlcmZvcm1hbmNlLXdpc2UsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGUgaW1wbGVtZW50YXRpb24gdG8gYmUgY2VydGFpbiB0aGF0IHRoZSBpbnRlcmFjdGlvbiBpcyBhcyBleHBlY3RlZC4gVGhpcyBkaXJlY3QgY2FsbCBpcyBzaWduaWZpY2FudCBpbiBEaXJlY3QgSS9PIGFzIHRoZSBkaXJlY3QgdXNlIG9mIHRoZSBiaW8gaXRlcmF0b3IgaXMgbGlrZWx5IGEgY3J1Y2lhbCBmYWN0b3IgZm9yIHJlZHVjaW5nIG92ZXJoZWFkLiBVbmRlcnN0YW5kaW5nIHRoaXMgcGF0aCBpcyBpbXBvcnRhbnQgYXMgaXQgaXMgYSBjb21tb24gZmFjdG9yIGluIHZhcmlvdXMgZmlsZSBzeXN0ZW1zLiBUaGlzIGlzIHRoZSBmaXJzdCBwbGFjZSBJJ2QgbG9vayBpbiBhIHBlcmZvcm1hbmNlIHByb2ZpbGUgYW5kIGlzIGxpa2VseSB0aGUgY29yZSBvZiB0aGUgRGlyZWN0IEkvTyBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODYzOCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ1OjM5LjAwMTQ4NTY4OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM2MjAzODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9tYXBfZGlvX2Jpb19pdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2lvbWFwL2RpcmVjdC1pby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2lvbWFwL2RpcmVjdC1pby5jPTI5OT1zdGF0aWMgaW50IGlvbWFwX2Rpb196ZXJvKGNvbnN0IHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8sXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0zMzQtXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MzM1OnN0YXRpYyBzc2l6ZV90IGlvbWFwX2Rpb19iaW9faXRlcl9vbmUoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtMzM2LVxcdFxcdHN0cnVjdCBpb21hcF9kaW8gKmRpbywgbG9mZl90IHBvcywgdW5zaWduZWQgaW50IGFsaWdubWVudCxcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTQwNz1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpb21hcF9kaW9fYWxpZ25tZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy00MTQtXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NDE1OnN0YXRpYyBpbnQgaW9tYXBfZGlvX2Jpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNDE2LXtcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTU1Ni1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzo1NTc6XFx0XFx0cmV0ID0gaW9tYXBfZGlvX2Jpb19pdGVyX29uZShpdGVyLCBkaW8sIHBvcywgYWxpZ25tZW50LCBiaW9fb3BmKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy01NTgtXFx0XFx0aWYgKHVubGlrZWx5KHJldCBcXHUwMDNjIDApKSB7XFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYz02NDU9c3RhdGljIGludCBpb21hcF9kaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjU0LVxcdFxcdFxcdHJldHVybiBpb21hcF9kaW9faG9sZV9pdGVyKGl0ZXIsIGRpbyk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NjU1OlxcdFxcdHJldHVybiBpb21hcF9kaW9fYmlvX2l0ZXIoaXRlciwgZGlvKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NTYtXFx0Y2FzZSBJT01BUF9NQVBQRUQ6XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NjU3OlxcdFxcdHJldHVybiBpb21hcF9kaW9fYmlvX2l0ZXIoaXRlciwgZGlvKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NTgtXFx0Y2FzZSBJT01BUF9JTkxJTkU6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ1OjM5LjA0NTExMTE0N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTYyMjE2ODU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi5cblxuKipBbmFseXppbmcgYF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlYCBmb3IgSG9sZSBIYW5kbGluZyoqXG5cblJpZ2h0LCBzbyBJJ20gcHJldHR5IHN1cmUgYF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlYCBieXBhc3NlcyBgaW9tYXBfZGlvX2hvbGVfaXRlcmAuIEl0J3MganVzdCBhIGh1bmNoLCBidXQgdGhlc2Ugc2ltcGxlciBkaXJlY3QgSS9PIHJlYWQgZnVuY3Rpb25zIG9mdGVuIGhhbmRsZSBob2xlcyBpbiBhIG1vcmUgc3RyYWlnaHRmb3J3YXJkIG1hbm5lci4gVG8gY29uZmlybSB0aGlzLCBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLiBMZXQncyBnZXQgdGhlIHNvdXJjZSBmb3IgYF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IGl0cyBpbXBsZW1lbnRhdGlvbi4gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIGxvZ2ljIHdpdGhpbiB0aGF0IGZ1bmN0aW9uJ3MgYm9keSB0byBkZWZpbml0aXZlbHkgZGV0ZXJtaW5lIGhvdyBpdCBhZGRyZXNzZXMgb3IgaWdub3JlcyB0aGUgcG90ZW50aWFsIGZvciBzcGFyc2UgZmlsZXMgYW5kIGhvbGVzIGR1cmluZyB0aGUgcmVhZCBvcGVyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0OTUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0NTo0Mi4yMDczMzA5MTRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2lvbWFwL2RpcmVjdC1pby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk5OSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5OTk6XFx0c3NpemVfdCBfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4xMDAwOlxcdFxcdFxcdHN0cnVjdCBpb21hcF9pdGVyICppb21pKVxcbjEwMDE6XFx0e1xcbjEwMDI6XFx0XFx0Z2ZwX3QgZ2ZwID0gKGlvbWktXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9NQVBfTk9XQUlUKSA/IEdGUF9OT1dBSVQgOiBHRlBfS0VSTkVMO1xcbjEwMDM6XFx0XFx0c3RydWN0IGlvbWFwX2Rpb19zaW1wbGUgKnNyO1xcbjEwMDQ6XFx0XFx0dW5zaWduZWQgaW50IGFsaWdubWVudDtcXG4xMDA1OlxcdFxcdHN0cnVjdCBiaW8gKmJpbztcXG4xMDA2OlxcdFxcdHNzaXplX3QgcmV0O1xcbjEwMDc6XFx0XFxuMTAwODpcXHRcXHRpZiAoaW9taS1cXHUwMDNlaW9tYXAudHlwZSAhPSBJT01BUF9NQVBQRUQgfHxcXG4xMDA5OlxcdFxcdCAgICBpb21pLVxcdTAwM2Vpb21hcC5vZmZzZXQgKyBpb21pLVxcdTAwM2Vpb21hcC5sZW5ndGggXFx1MDAzYyBpb21pLVxcdTAwM2Vwb3MgKyBpb21pLVxcdTAwM2VsZW4gfHxcXG4xMDEwOlxcdFxcdCAgICAoaW9taS1cXHUwMDNlaW9tYXAuZmxhZ3MgXFx1MDAyNiBJT01BUF9GX0lOVEVHUklUWSkpIHtcXG4xMDExOlxcdFxcdFxcdHJldCA9IC1FTk9UQkxLO1xcbjEwMTI6XFx0XFx0XFx0Z290byBvdXRfZGlvX2VuZDtcXG4xMDEzOlxcdFxcdH1cXG4xMDE0OlxcdFxcbjEwMTU6XFx0XFx0YWxpZ25tZW50ID0gaW9tYXBfZGlvX2FsaWdubWVudChpb21pLVxcdTAwM2Vpbm9kZSwgaW9taS1cXHUwMDNlaW9tYXAuYmRldiwgMCk7XFxuMTAxNjpcXHRcXHRpZiAoKGlvbWktXFx1MDAzZXBvcyB8IGlvbWktXFx1MDAzZWxlbikgXFx1MDAyNiAoYWxpZ25tZW50IC0gMSkpIHtcXG4xMDE3OlxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuMTAxODpcXHRcXHRcXHRnb3RvIG91dF9kaW9fZW5kO1xcbjEwMTk6XFx0XFx0fVxcbjEwMjA6XFx0XFxuMTAyMTpcXHRcXHRpZiAodW5saWtlbHkoIWlvbWktXFx1MDAzZWlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Rpb19kb25lX3dxIFxcdTAwMjZcXHUwMDI2XFxuMTAyMjpcXHRcXHRcXHRcXHQhaXNfc3luY19raW9jYihpb2NiKSkpIHtcXG4xMDIzOlxcdFxcdFxcdHJldCA9IHNiX2luaXRfZGlvX2RvbmVfd3EoaW9taS1cXHUwMDNlaW5vZGUtXFx1MDAzZWlfc2IpO1xcbjEwMjQ6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTAyNTpcXHRcXHRcXHRcXHRnb3RvIG91dF9kaW9fZW5kO1xcbjEwMjY6XFx0XFx0fVxcbjEwMjc6XFx0XFxuMTAyODpcXHRcXHR0cmFjZV9pb21hcF9kaW9fcndfYmVnaW4oaW9jYiwgaXRlciwgMCwgMCk7XFxuMTAyOTpcXHRcXG4xMDMwOlxcdFxcdGJpbyA9IGJpb19hbGxvY19iaW9zZXQoaW9taS1cXHUwMDNlaW9tYXAuYmRldixcXG4xMDMxOlxcdFxcdFxcdFxcdCAgICAgICBiaW9faW92X3ZlY3NfdG9fYWxsb2MoaXRlciwgQklPX01BWF9WRUNTKSxcXG4xMDMyOlxcdFxcdFxcdFxcdCAgICAgICBSRVFfT1BfUkVBRCwgZ2ZwLCBcXHUwMDI2aW9tYXBfZGlvX3NpbXBsZV9wb29sKTtcXG4xMDMzOlxcdFxcdGlmICghYmlvKSB7XFxuMTAzNDpcXHRcXHRcXHRyZXQgPSAtRUFHQUlOO1xcbjEwMzU6XFx0XFx0XFx0Z290byBvdXRfZGlvX2VuZDtcXG4xMDM2OlxcdFxcdH1cXG4xMDM3OlxcdFxcdHNyID0gY29udGFpbmVyX29mKGJpbywgc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUsIGJpbyk7XFxuMTAzODpcXHRcXHRzci1cXHUwMDNlaW9jYiA9IGlvY2I7XFxuMTAzOTpcXHRcXHRzci1cXHUwMDNlZGlvX2ZsYWdzID0gMDtcXG4xMDQwOlxcdFxcbjEwNDE6XFx0XFx0YmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IGlvbWFwX3NlY3RvcihcXHUwMDI2aW9taS1cXHUwMDNlaW9tYXAsIGlvbWktXFx1MDAzZXBvcyk7XFxuMTA0MjpcXHRcXHRiaW8tXFx1MDAzZWJpX2lvcHJpbyA9IGlvY2ItXFx1MDAzZWtpX2lvcHJpbztcXG4xMDQzOlxcdFxcbjEwNDQ6XFx0XFx0cmV0ID0gYmlvX2lvdl9pdGVyX2dldF9wYWdlcyhiaW8sIGl0ZXIsIGFsaWdubWVudCAtIDEpO1xcbjEwNDU6XFx0XFx0aWYgKHVubGlrZWx5KHJldCkpXFxuMTA0NjpcXHRcXHRcXHRnb3RvIG91dF9iaW9fcHV0O1xcbjEwNDc6XFx0XFxuMTA0ODpcXHRcXHRpZiAoYmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NpemUgIT0gaW9taS1cXHUwMDNlbGVuKSB7XFxuMTA0OTpcXHRcXHRcXHRpb3ZfaXRlcl9yZXZlcnQoaXRlciwgYmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NpemUpO1xcbjEwNTA6XFx0XFx0XFx0cmV0ID0gLUVOT1RCTEs7XFxuMTA1MTpcXHRcXHRcXHRnb3RvIG91dF9iaW9fcmVsZWFzZV9wYWdlcztcXG4xMDUyOlxcdFxcdH1cXG4xMDUzOlxcdFxcbjEwNTQ6XFx0XFx0c3ItXFx1MDAzZXNpemUgPSBiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2l6ZTtcXG4xMDU1OlxcdFxcdGlmICh1c2VyX2JhY2tlZF9pdGVyKGl0ZXIpKSB7XFxuMTA1NjpcXHRcXHRcXHRiaW9fc2V0X3BhZ2VzX2RpcnR5KGJpbyk7XFxuMTA1NzpcXHRcXHRcXHRzci1cXHUwMDNlZGlvX2ZsYWdzIHw9IElPTUFQX0RJT19VU0VSX0JBQ0tFRDtcXG4xMDU4OlxcdFxcdH1cXG4xMDU5OlxcdFxcbjEwNjA6XFx0XFx0aWYgKGlvY2ItXFx1MDAzZWtpX2ZsYWdzIFxcdTAwMjYgSU9DQl9OT1dBSVQpXFxuMTA2MTpcXHRcXHRcXHRiaW8tXFx1MDAzZWJpX29wZiB8PSBSRVFfTk9XQUlUO1xcbjEwNjI6XFx0XFxuMTA2MzpcXHRcXHRpZiAoaXNfc3luY19raW9jYihpb2NiKSkge1xcbjEwNjQ6XFx0XFx0XFx0c3VibWl0X2Jpb193YWl0KGJpbyk7XFxuMTA2NTpcXHRcXHRcXHRyZXR1cm4gaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZShzcik7XFxuMTA2NjpcXHRcXHR9XFxuMTA2NzpcXHRcXG4xMDY4OlxcdFxcdGlmICgoaW9jYi1cXHUwMDNla2lfZmxhZ3MgXFx1MDAyNiBJT0NCX0hJUFJJKSkge1xcbjEwNjk6XFx0XFx0XFx0YmlvLVxcdTAwM2ViaV9vcGYgfD0gUkVRX1BPTExFRDtcXG4xMDcwOlxcdFxcdFxcdFdSSVRFX09OQ0UoaW9jYi1cXHUwMDNlcHJpdmF0ZSwgYmlvKTtcXG4xMDcxOlxcdFxcdH1cXG4xMDcyOlxcdFxcdGJpby1cXHUwMDNlYmlfZW5kX2lvID0gaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW87XFxuMTA3MzpcXHRcXHRzdWJtaXRfYmlvKGJpbyk7XFxuMTA3NDpcXHRcXHR0cmFjZV9pb21hcF9kaW9fcndfcXVldWVkKGlvbWktXFx1MDAzZWlub2RlLCBpb2NiLVxcdTAwM2VraV9wb3MsIGlvbWktXFx1MDAzZWxlbik7XFxuMTA3NTpcXHRcXHRyZXR1cm4gLUVJT0NCUVVFVUVEO1xcbjEwNzY6XFx0XFxuMTA3NzpcXHRvdXRfYmlvX3JlbGVhc2VfcGFnZXM6XFxuMTA3ODpcXHRcXHRiaW9fcmVsZWFzZV9wYWdlcyhiaW8sIGZhbHNlKTtcXG4xMDc5OlxcdG91dF9iaW9fcHV0OlxcbjEwODA6XFx0XFx0YmlvX3B1dChiaW8pO1xcbjEwODE6XFx0b3V0X2Rpb19lbmQ6XFxuMTA4MjpcXHRcXHRpbm9kZV9kaW9fZW5kKGlvbWktXFx1MDAzZWlub2RlKTtcXG4xMDgzOlxcdFxcdHJldHVybiByZXQ7XFxuMTA4NDpcXHR9XFxuMTA4NTpcXHRFWFBPUlRfU1lNQk9MX0dQTChfX2lvbWFwX2Rpb19yZWFkX3NpbXBsZSk7XFxuMTA4NjpcXHRcXG4xMDg3OlxcdHN0YXRpYyBpbnQgX19pbml0IGlvbWFwX2Rpb19pbml0KHZvaWQpXFxuMTA4ODpcXHR7XFxuMTA4OTpcXHRcXHRyZXR1cm4gYmlvc2V0X2luaXQoXFx1MDAyNmlvbWFwX2Rpb19zaW1wbGVfcG9vbCwgNCxcXG4xMDkwOlxcdFxcdFxcdFxcdCAgIG9mZnNldG9mKHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlLCBiaW8pLFxcbjEwOTE6XFx0XFx0XFx0XFx0ICAgQklPU0VUX05FRURfQlZFQ1MgfCBCSU9TRVRfUEVSQ1BVX0NBQ0hFKTtcXG4xMDkyOlxcdH1cXG4xMDkzOlxcdGZzX2luaXRjYWxsKGlvbWFwX2Rpb19pbml0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NDU6NDIuMjA3NDYyNDA0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3OTQyODI4MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczpcblxuKipEaWdnaW5nIGludG8gdGhlIEkvTyBNYXBwaW5nIEZ1bmN0aW9ucyoqXG5cbkFscmlnaHQsIHNvIEknbSB0cnlpbmcgdG8gdHJhY2UgdGhlIGNvbnRyb2wgZmxvdyBoZXJlLCBhbmQgSSd2ZSBqdXN0IHJlYWxpemVkIHRoYXQgYF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlYCAqZG9lc24ndCogYWN0dWFsbHkgY2FsbCBgaW9tYXBfZGlvX2hvbGVfaXRlcmAsIHdoaWNoIGlzIHdoZXJlIEkgd2FzIGV4cGVjdGluZyBpdCB0byBiZS4gT2theSwgdGhhdCBzaGlmdHMgdGhlIGZvY3VzLiBNeSBhdHRlbnRpb24gc2hvdWxkIGJlIG9uIGBfX2lvbWFwX2Rpb19yd2AgYW5kIHRoZSB3cmFwcGVyLCBgaW9tYXBfZGlvX3J3YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyBhdCB0aG9zZSBsZXZlbHMuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCBgaW9tYXBfZGlvX3J3YCBpcywgaW4gZmFjdCwgdGhlIHdyYXBwZXIuXG5cbk5vdywgYmVmb3JlIEkgZGVlcCBkaXZlIHRvbyBtdWNoLCBpdCdzIHdvcnRoIGEgcXVpY2sgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZXhwb3J0ZWQgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdGhhdCBJIHNob3VsZCBiZSBjb25zaWRlcmluZyBhdCB0aGlzIHN0YWdlLiBJdCdzIGEgZ29vZCBwcmFjdGljZSB0byBub3QgbWlzcyB0aGUgd29vZCBmb3IgdGhlIHRyZWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM4MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NDU6NDYuMDAxNzQ3NzIzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzcyMjg3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2lvbWFwL2RpcmVjdC1pby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2lvbWFwL2RpcmVjdC1pby5jPTEwNT1zc2l6ZV90IGlvbWFwX2Rpb19jb21wbGV0ZShzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xNjAtfVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjE2MTpFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9kaW9fY29tcGxldGUpO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTE2Mi1cXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jPTI3Mj12b2lkIGlvbWFwX2Rpb19iaW9fZW5kX2lvKHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTI3OS19XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6MjgwOkVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2Rpb19iaW9fZW5kX2lvKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0yODEtXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYz02OTc9X19pb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy05MDctfVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjkwODpFWFBPUlRfU1lNQk9MX0dQTChfX2lvbWFwX2Rpb19ydyk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTA5LVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9OTExPWlvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTkyMi19XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6OTIzOkVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2Rpb19ydyk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtOTI0LVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM9OTk5PXNzaXplX3QgX19pb21hcF9kaW9fcmVhZF9zaW1wbGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDg0LX1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYzoxMDg1OkVYUE9SVF9TWU1CT0xfR1BMKF9faW9tYXBfZGlvX3JlYWRfc2ltcGxlKTtcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy0xMDg2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNTo0NTo0Ni4wNDk0NzcxMzFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc2MTAyNDg1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJT01BUCBDb25maWd1cmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gbmFpbCBkb3duIHRoZSBjb3JlIEkvTyBtYXAgY29uZmlndXJhdGlvbnMgaGVyZS4gSXQgbG9va3MgbGlrZSB0aGUgaGVhdnkgbGlmdGVycyBhcmUgYF9faW9tYXBfZGlvX3J3YCBhbmQgYGlvbWFwX2Rpb19yd2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY3J1Y2lhbCBjb25maWcgc2V0dGluZ3MgSSdtIG1pc3NpbmcuXG5cbkxldCdzIHNlZeKApiBgRlNfSU9NQVBgIHNlZW1zIHRvIGJlIHRoZSBvbmUgdGhhdCBnZXRzIHNlbGVjdGVkIGJ5IGBFWFQ0X0ZTYCwgYFhGU19GU2AsIGFuZCBgQlRSRlNfRlNgLiBSaWdodCwgc28ganVzdCBsaXN0aW5nIHRob3NlIHdvdWxkIGNvdmVyIGl0LiBIYW5nIG9uIGEgc2Vjb25kLCB0aGF0J3Mgbm90IHF1aXRlIHJpZ2h0LiBgQkxPQ0tgIHNlbGVjdHMgYEZTX0lPTUFQYCwgd2hpY2ggbWVhbnMgYEZTX0lPTUFQYCBpcyBpbXBsaWNpdGx5IGVuYWJsZWQgaWYgYEJMT0NLYCBpcyBlbmFibGVkLiBJdCdzIG5vdCBhIGRpcmVjdCBkZXBlbmRlbmN5LiBPa2F5LCBzbyBJIHNob3VsZCBqdXN0IGxpc3QgYEJMT0NLYCwgYEVYVDRfRlNgLCBgWEZTX0ZTYCwgYW5kIGBCVFJGU19GU2AgZm9yIGNsYXJpdHkuIFRoYXQgY292ZXJzIHRoZSBwcmltYXJ5IGNhc2VzLlxuXG5Ob3csIEknbGwgcXVpY2tseSBjaGVjayBpZiBhbnkgb3RoZXIgZnVuY3Rpb25zIGNhbGwgYGlvbWFwX2Rpb19ob2xlX2l0ZXJgIGRpcmVjdGx5LiBKdXN0IHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgY29uZmlndXJhdGlvbnMgYXQgcGxheS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyOTQsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NDU6NTEuODEwNTA2NDJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMjYyMjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvbWFwX2Rpb19ob2xlX2l0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaW9tYXAvZGlyZWN0LWlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW9tYXAvZGlyZWN0LWlvLmM9NDE1PXN0YXRpYyBpbnQgaW9tYXBfZGlvX2Jpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYy01OTQtXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NTk1OnN0YXRpYyBpbnQgaW9tYXBfZGlvX2hvbGVfaXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTU5Ni17XFxuLS1cXG5mcy9pb21hcC9kaXJlY3QtaW8uYz02NDU9c3RhdGljIGludCBpb21hcF9kaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbi0tXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjUwLVxcdFxcdFxcdHJldHVybiAtRUlPO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jOjY1MTpcXHRcXHRyZXR1cm4gaW9tYXBfZGlvX2hvbGVfaXRlcihpdGVyLCBkaW8pO1xcbmZzL2lvbWFwL2RpcmVjdC1pby5jLTY1Mi1cXHRjYXNlIElPTUFQX1VOV1JJVFRFTjpcXG5mcy9pb21hcC9kaXJlY3QtaW8uYy02NTMtXFx0XFx0aWYgKCEoZGlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPTUFQX0RJT19XUklURSkpXFxuZnMvaW9tYXAvZGlyZWN0LWlvLmM6NjU0OlxcdFxcdFxcdHJldHVybiBpb21hcF9kaW9faG9sZV9pdGVyKGl0ZXIsIGRpbyk7XFxuZnMvaW9tYXAvZGlyZWN0LWlvLmMtNjU1LVxcdFxcdHJldHVybiBpb21hcF9kaW9fYmlvX2l0ZXIoaXRlciwgZGlvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTU6NDU6NTEuODUyNzc0OTI3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxNTEwMzcyNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEaW8gSXRlcmF0b3IgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGBpb21hcF9kaW9faXRlcmAuIE15IGluaXRpYWwgaHVuY2ggaXMgdG8gZm9jdXMgZW50aXJlbHkgb24gdGhhdC4gSSdtIGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0aGUgcGF0Y2ggbG9naWMuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIHdvcmtzIGJ5IGFsaWduaW5nIHRoZSBgY29waWVkYCB2YXJpYWJsZSB0byB0aGUgYmxvY2sgc2l6ZSB1c2luZyBgaW9tYXBfZGlvX2FsaWdubWVudGAuIEFmdGVyIGFsaWdubWVudCwgaXQgcmV2ZXJ0cyB0aGUgaXRlcmF0b3IgYnkgY2FsY3VsYXRpbmcgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBgY29waWVkYCBhbmQgdGhlIGFsaWduZWQgdmVyc2lvbi5cblxuUmlnaHQsIEkgc2VlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFpbWVkIGF0IHJlc29sdmluZyBhIHBvdGVudGlhbCBpc3N1ZS4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBhZGRyZXNzIGEgc2l0dWF0aW9uIHdoZXJlIHBhZ2UgZmF1bHQgZmFpbHVyZXMgbWlnaHQgbGVhdmUgYGNvcGllZGAgcGFnZS1hbGlnbmVkIGJ1dCBub3QgYWxpZ25lZCB0byB0aGUgZmlsZSBzeXN0ZW0gYmxvY2sgc2l6ZS4gVGhhdCdzIGEgY2xhc3NpYyBnb3RjaGEsIGFuZCBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdG8gY29uZmlybS5cblxuRm9yIGZ1enppbmcsIEknbGwgemVybyBpbiBvbiB0aGUgZm9sbG93aW5nIHN5bWJvbHM6IGBfX2lvbWFwX2Rpb19yd2AgYW5kIGBpb21hcF9kaW9fcndgLlxuXG5BcyBmb3IgY29uZmlndXJhdGlvbnMsIEknbGwgYmUgc3VyZSB0byB0ZXN0IHRoaXMgd2l0aCBgRVhUNF9GU2AsIGBYRlNfRlNgLCBhbmQgYEJUUkZTX0ZTYC4gTGV0IG1lIHF1aWNrbHkgY29uZmlybSBpZiB0aG9zZSBjb25maWd1cmF0aW9ucyBlbmFibGUgYEZTX0lPTUFQYC4gWWVzLCBJJ3ZlIGFscmVhZHkgY2hlY2tlZCwgaXQgbG9va3MgbGlrZSBgRVhUNF9GU2AsIGBYRlNfRlNgIGFuZCBgQlRSRlNfRlNgIGRvIGFsbCBzZWxlY3QgYEZTX0lPTUFQYC5cblxuSSdsbCB1c2UgYHNldC1yZXN1bHRzYCB0byByZXR1cm4gdGhlIHZlcmlmaWVkIHJlc3VsdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxMjYsIk91dHB1dFRva2VucyI6MTI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE1OjQ1OjU4LjAwMzgxNTg0M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3NjIzMDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCIsXG4gICAgXCJYRlNfRlNcIixcbiAgICBcIkJUUkZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19pb21hcF9kaW9fcndcIixcbiAgICBcImlvbWFwX2Rpb19yd1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGlvbWFwIGRpcmVjdCBJL08gbG9naWMgdG8gcHJvcGVybHkgYWxpZ24gdGhlIGNvcGllZCBsZW5ndGggdG8gdGhlIGZpbGVzeXN0ZW0gYmxvY2sgc2l6ZSB3aGVuIGhhbmRsaW5nIGhvbGVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgY29yZSBrZXJuZWwgcGF0aCwgZml4aW5nIGFuIGlzc3VlIHJlbGF0ZWQgdG8gcGFnZSBmYXVsdCBmYWlsdXJlcyBkdXJpbmcgZGlyZWN0IEkvTy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCIsXG4gICAgXCJYRlNfRlNcIixcbiAgICBcIkJUUkZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19pb21hcF9kaW9fcndcIixcbiAgICBcImlvbWFwX2Rpb19yd1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGlvbWFwIGRpcmVjdCBJL08gbG9naWMgdG8gcHJvcGVybHkgYWxpZ24gdGhlIGNvcGllZCBsZW5ndGggdG8gdGhlIGZpbGVzeXN0ZW0gYmxvY2sgc2l6ZSB3aGVuIGhhbmRsaW5nIGhvbGVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgY29yZSBrZXJuZWwgcGF0aCwgZml4aW5nIGFuIGlzc3VlIHJlbGF0ZWQgdG8gcGFnZSBmYXVsdCBmYWlsdXJlcyBkdXJpbmcgZGlyZWN0IEkvTy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow4ms6w[1] Phase: Succeeded StartedAt: 2026-08-01 15:46:08 +0000 UTC FinishedAt: 2026-08-01 15:46:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ms6w[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-01 15:46:08 +0000 UTC FinishedAt: 2026-08-01 15:46:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ms6w[2] Phase: Succeeded StartedAt: 2026-08-01 15:46:08 +0000 UTC FinishedAt: 2026-08-01 19:45:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ms6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"9d98023b-4249-4697-ab21-ea7cf83805c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325"]},track:KASAN) Phase: Succeeded StartedAt: 2026-08-01 15:46:08 +0000 UTC FinishedAt: 2026-08-01 19:45:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"9d98023b-4249-4697-ab21-ea7cf83805c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325"]},"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow4ms6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"9d98023b-4249-4697-ab21-ea7cf83805c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325"]},track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-01 15:46:08 +0000 UTC FinishedAt: 2026-08-01 15:46:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ms6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"9d98023b-4249-4697-ab21-ea7cf83805c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325"]},track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-01 15:46:08 +0000 UTC FinishedAt: 2026-08-01 15:46:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflow4ms6w/series-workflow4ms6w-convert-artifact-3905313287/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4ms6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"9d98023b-4249-4697-ab21-ea7cf83805c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325"]},track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-01 15:46:19 +0000 UTC FinishedAt: 2026-08-01 16:08:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ms6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"9d98023b-4249-4697-ab21-ea7cf83805c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325"]},track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-01 15:46:19 +0000 UTC FinishedAt: 2026-08-01 16:08:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*005dabfe-da2b-44f5-b17a-5cefb929a3fc,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-workflow4ms6w/series-workflow4ms6w-convert-artifact-3905313287/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": "cafbe5f5-6d2c-4950-9d0f-fffb3cf54dfe", "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-workflow4ms6w/series-workflow4ms6w-build-action-2964826269/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4ms6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"9d98023b-4249-4697-ab21-ea7cf83805c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325"]},track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-01 15:46:19 +0000 UTC FinishedAt: 2026-08-01 16:08:23 +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:*005dabfe-da2b-44f5-b17a-5cefb929a3fc,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-workflow4ms6w/series-workflow4ms6w-convert-artifact-3905313287/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": "cafbe5f5-6d2c-4950-9d0f-fffb3cf54dfe", "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-workflow4ms6w/series-workflow4ms6w-build-action-2964826269/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4ms6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"9d98023b-4249-4697-ab21-ea7cf83805c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325"]},track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-01 16:08:33 +0000 UTC FinishedAt: 2026-08-01 16:08:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ms6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"9d98023b-4249-4697-ab21-ea7cf83805c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325"]},track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-01 16:08:33 +0000 UTC FinishedAt: 2026-08-01 16:08:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ms6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"9d98023b-4249-4697-ab21-ea7cf83805c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325"]},track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-01 16:08:33 +0000 UTC FinishedAt: 2026-08-01 16:08:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ms6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"9d98023b-4249-4697-ab21-ea7cf83805c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325"]},track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-01 16:08:33 +0000 UTC FinishedAt: 2026-08-01 16:08:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"9d98023b-4249-4697-ab21-ea7cf83805c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflow4ms6w/series-workflow4ms6w-convert-artifact-2301834294/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4ms6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"9d98023b-4249-4697-ab21-ea7cf83805c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325"]},track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-01 16:08:43 +0000 UTC FinishedAt: 2026-08-01 16:10:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ms6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"9d98023b-4249-4697-ab21-ea7cf83805c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325"]},track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-01 16:08:43 +0000 UTC FinishedAt: 2026-08-01 16:10:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cafbe5f5-6d2c-4950-9d0f-fffb3cf54dfe,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-workflow4ms6w/series-workflow4ms6w-build-action-2964826269/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-workflow4ms6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"9d98023b-4249-4697-ab21-ea7cf83805c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325"]},track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-01 16:10:39 +0000 UTC FinishedAt: 2026-08-01 16:10:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ms6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"9d98023b-4249-4697-ab21-ea7cf83805c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325"]},track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-01 16:10:39 +0000 UTC FinishedAt: 2026-08-01 16:10:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ms6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"9d98023b-4249-4697-ab21-ea7cf83805c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325"]},track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-01 16:10:39 +0000 UTC FinishedAt: 2026-08-01 16:37:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ms6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"9d98023b-4249-4697-ab21-ea7cf83805c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325"]},track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-01 16:10:39 +0000 UTC FinishedAt: 2026-08-01 16:37:22 +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:*005dabfe-da2b-44f5-b17a-5cefb929a3fc,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-workflow4ms6w/series-workflow4ms6w-convert-artifact-2301834294/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": "a53b891c-9ac3-484a-a77e-61c04d35157f", "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-workflow4ms6w/series-workflow4ms6w-build-action-3945494842/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4ms6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"9d98023b-4249-4697-ab21-ea7cf83805c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325"]},track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-01 16:10:39 +0000 UTC FinishedAt: 2026-08-01 16:37:12 +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:*005dabfe-da2b-44f5-b17a-5cefb929a3fc,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-workflow4ms6w/series-workflow4ms6w-convert-artifact-2301834294/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": "a53b891c-9ac3-484a-a77e-61c04d35157f", "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-workflow4ms6w/series-workflow4ms6w-build-action-3945494842/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4ms6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"9d98023b-4249-4697-ab21-ea7cf83805c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325"]},track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-01 16:37:22 +0000 UTC FinishedAt: 2026-08-01 16:37:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ms6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"9d98023b-4249-4697-ab21-ea7cf83805c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325"]},track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-01 16:37:22 +0000 UTC FinishedAt: 2026-08-01 16:37:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ms6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"9d98023b-4249-4697-ab21-ea7cf83805c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325"]},track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-01 16:37:22 +0000 UTC FinishedAt: 2026-08-01 16:39:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ms6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"9d98023b-4249-4697-ab21-ea7cf83805c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325"]},track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-01 16:37:22 +0000 UTC FinishedAt: 2026-08-01 16:39:06 +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:*a53b891c-9ac3-484a-a77e-61c04d35157f,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-workflow4ms6w/series-workflow4ms6w-build-action-3945494842/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-workflow4ms6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"9d98023b-4249-4697-ab21-ea7cf83805c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325"]},track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-01 16:39:16 +0000 UTC FinishedAt: 2026-08-01 19:45:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ms6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"9d98023b-4249-4697-ab21-ea7cf83805c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325"]},track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-01 16:39:16 +0000 UTC FinishedAt: 2026-08-01 19:45:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"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:*cafbe5f5-6d2c-4950-9d0f-fffb3cf54dfe,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a53b891c-9ac3-484a-a77e-61c04d35157f,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-workflow4ms6w/series-workflow4ms6w-build-action-2964826269/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-workflow4ms6w/series-workflow4ms6w-build-action-3945494842/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow4ms6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"9d98023b-4249-4697-ab21-ea7cf83805c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325"]},track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-01 16:39:16 +0000 UTC FinishedAt: 2026-08-01 16:39:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ms6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"9d98023b-4249-4697-ab21-ea7cf83805c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325"]},track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-01 16:39:16 +0000 UTC FinishedAt: 2026-08-01 16:39:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"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-workflow4ms6w/series-workflow4ms6w-convert-artifact-2439363675/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4ms6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"9d98023b-4249-4697-ab21-ea7cf83805c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325"]},track:KASAN)[10].run-retest Phase: Succeeded StartedAt: 2026-08-01 16:39:16 +0000 UTC FinishedAt: 2026-08-01 16:50:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:retest-data,Default:nil,Value:*{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325"]},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*cafbe5f5-6d2c-4950-9d0f-fffb3cf54dfe,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a53b891c-9ac3-484a-a77e-61c04d35157f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,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-workflow4ms6w/series-workflow4ms6w-build-action-2964826269/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-workflow4ms6w/series-workflow4ms6w-build-action-3945494842/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow4ms6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"9d98023b-4249-4697-ab21-ea7cf83805c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325"]},track:KASAN)[10].run-retest[0] Phase: Succeeded StartedAt: 2026-08-01 16:39:16 +0000 UTC FinishedAt: 2026-08-01 16:39:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ms6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"9d98023b-4249-4697-ab21-ea7cf83805c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325"]},track:KASAN)[10].run-retest[0].save-retest-task Phase: Succeeded StartedAt: 2026-08-01 16:39:16 +0000 UTC FinishedAt: 2026-08-01 16:39:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325"]},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-workflow4ms6w/series-workflow4ms6w-convert-artifact-1097318268/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4ms6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"9d98023b-4249-4697-ab21-ea7cf83805c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325"]},track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-01 16:39:16 +0000 UTC FinishedAt: 2026-08-01 16:39:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ms6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"9d98023b-4249-4697-ab21-ea7cf83805c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325"]},track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-01 16:39:16 +0000 UTC FinishedAt: 2026-08-01 16:39:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ms6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"9d98023b-4249-4697-ab21-ea7cf83805c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325"]},track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-01 16:39:36 +0000 UTC FinishedAt: 2026-08-01 19:45:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ms6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"9d98023b-4249-4697-ab21-ea7cf83805c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325"]},track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-01 16:39:36 +0000 UTC FinishedAt: 2026-08-01 19:44:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cafbe5f5-6d2c-4950-9d0f-fffb3cf54dfe,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a53b891c-9ac3-484a-a77e-61c04d35157f,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-workflow4ms6w/series-workflow4ms6w-build-action-2964826269/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-workflow4ms6w/series-workflow4ms6w-build-action-3945494842/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-workflow4ms6w/series-workflow4ms6w-convert-artifact-2439363675/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,} --------- Name: series-workflow4ms6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"9d98023b-4249-4697-ab21-ea7cf83805c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325"]},track:KASAN)[10].run-retest[1] Phase: Succeeded StartedAt: 2026-08-01 16:39:36 +0000 UTC FinishedAt: 2026-08-01 16:50:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4ms6w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__iomap_dio_rw","iomap_dio_rw"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fa20f6cb6063f7f1a6a56693d4a8713f19058d23","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","XFS_FS","BTRFS_FS"],"series_id":"9d98023b-4249-4697-ab21-ea7cf83805c8","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:{"findings":["c9f79a18-3316-44ec-b805-b805b1c49325"]},track:KASAN)[10].run-retest[1].retest Phase: Succeeded StartedAt: 2026-08-01 16:39:36 +0000 UTC FinishedAt: 2026-08-01 16:49:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cafbe5f5-6d2c-4950-9d0f-fffb3cf54dfe,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a53b891c-9ac3-484a-a77e-61c04d35157f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Previous reproducers,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-workflow4ms6w/series-workflow4ms6w-build-action-2964826269/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-workflow4ms6w/series-workflow4ms6w-build-action-3945494842/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:retest-task,Path:/data/retest.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-workflow4ms6w/series-workflow4ms6w-convert-artifact-1097318268/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,}