Name: series-workflow8gfrq Phase: Succeeded StartedAt: 2026-08-02 06:29:45 +0000 UTC FinishedAt: 2026-08-02 08:03:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gfrq[0] Phase: Succeeded StartedAt: 2026-08-02 06:29:45 +0000 UTC FinishedAt: 2026-08-02 06:31:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gfrq[0].run-triage Phase: Succeeded StartedAt: 2026-08-02 06:29:45 +0000 UTC FinishedAt: 2026-08-02 06:31:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8ba098e6b6ff0db8edf28528d1552be261af30d4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_SCSI", "TARGET_CORE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8ba098e6b6ff0db8edf28528d1552be261af30d4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_SCSI", "TARGET_CORE" ], "series_id": "19a7a78f-4ff2-46e7-ac9c-23f4330afb7d" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "vhost_scsi_open", "vhost_scsi_release", "vhost_scsi_set_max_io_vqs" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX1NDU0kmIzM0OywKICAgICYjMzQ7VEFSR0VUX0NPUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aG9zdF9zY3NpX29wZW4mIzM0OywKICAgICYjMzQ7dmhvc3Rfc2NzaV9yZWxlYXNlJiMzNDssCiAgICAmIzM0O3Zob3N0X3Njc2lfc2V0X21heF9pb192cXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGluaXRpYWxpemF0aW9uIGFuZCB0ZWFyZG93biBvZiB0aGUgdmhvc3Qtc2NzaSBkcml2ZXIsIHNwZWNpZmljYWxseSBjaGFuZ2luZyBob3cgdGhlIGBtYXhfaW9fdnFzYCBtb2R1bGUgcGFyYW1ldGVyIGlzIGhhbmRsZWQgYW5kIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkL2ZyZWVkIGZvciB2aXJ0cXVldWVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzICh2aWEgYC9kZXYvdmhvc3Qtc2NzaWAgb3Blbi9yZWxlYXNlIGFuZCBzeXNmcyBtb2R1bGUgcGFyYW1ldGVycykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MzA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0NzViMTQ0MTBhNzAzYjdmNTE1OGJmNzI3OGZlNjRjYmM5NjUzNjAzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMiAwNjozMDo0NyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Njc2kuYyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jXG5pbmRleCA5YTEyNTNiOWQ4YzUwLi5jMTM4YzI5Y2UzZGQ0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC9zY3NpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jXG5AQCAtMjEwLDcgJiM0MzsyMTAsMjAgQEAgc3RhdGljIGNvbnN0IGludCB2aG9zdF9zY3NpX2JpdHNbXSA9IHtcbiAjZGVmaW5lIFZIT1NUX1NDU0lfTUFYX0VWRU5UXHQxMjhcbiBcbiBzdGF0aWMgdW5zaWduZWQgdmhvc3Rfc2NzaV9tYXhfaW9fdnFzID0gMTI4O1xuLW1vZHVsZV9wYXJhbV9uYW1lZChtYXhfaW9fdnFzLCB2aG9zdF9zY3NpX21heF9pb192cXMsIHVpbnQsIDA2NDQpO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCB2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzKGNvbnN0IGNoYXIgKnZhbCxcbiYjNDM7XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHBhcmFtX3NldF91aW50X21pbm1heCh2YWwsIGtwLCAxLCBWSE9TVF9TQ1NJX01BWF9JT19WUSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyB2aG9zdF9zY3NpX21heF9pb192cXNfb3AgPSB7XG4mIzQzO1x0LnNldCA9IHZob3N0X3Njc2lfc2V0X21heF9pb192cXMsXG4mIzQzO1x0LmdldCA9IHBhcmFtX2dldF91aW50LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7bW9kdWxlX3BhcmFtX2NiKG1heF9pb192cXMsIFx1MDAyNnZob3N0X3Njc2lfbWF4X2lvX3Zxc19vcCxcbiYjNDM7XHRcdFx1MDAyNnZob3N0X3Njc2lfbWF4X2lvX3ZxcywgMDY0NCk7XG4gTU9EVUxFX1BBUk1fREVTQyhtYXhfaW9fdnFzLCBcJiMzNDtTZXQgdGhlIG1heCBudW1iZXIgb2YgSU8gdmlydHF1ZXVlcyBhIHZob3N0IHNjc2kgZGV2aWNlIGNhbiBzdXBwb3J0LiBUaGUgZGVmYXVsdCBpcyAxMjguIFRoZSBtYXggaXMgMTAyNC5cJiMzNDspO1xuIFxuIHN0cnVjdCB2aG9zdF9zY3NpX3ZpcnRxdWV1ZSB7XG5AQCAtMjI3MywyOSAmIzQzOzIyODYsMjEgQEAgc3RhdGljIGludCB2aG9zdF9zY3NpX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXG4gXHRzdHJ1Y3Qgdmhvc3Rfc2NzaV92aXJ0cXVldWUgKnN2cTtcbiBcdHN0cnVjdCB2aG9zdF9zY3NpICp2cztcbiBcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKip2cXM7XG4tXHRpbnQgciA9IC1FTk9NRU0sIGksIG52cXMgPSB2aG9zdF9zY3NpX21heF9pb192cXM7XG4mIzQzO1x0aW50IHIgPSAtRU5PTUVNLCBpLCBudnFzO1xuIFxuIFx0dnMgPSBrdnphbGxvY19vYmooKnZzKTtcbiBcdGlmICghdnMpXG4gXHRcdGdvdG8gZXJyX3ZzO1xuIFx0dnMtXHUwMDNlaW5saW5lX3NnX2NudCA9IHZob3N0X3Njc2lfaW5saW5lX3NnX2NudDtcbiBcbi1cdGlmIChudnFzIFx1MDAzZSBWSE9TVF9TQ1NJX01BWF9JT19WUSkge1xuLVx0XHRwcl9lcnIoXCYjMzQ7SW52YWxpZCBtYXhfaW9fdnFzIG9mICVkLiBVc2luZyAlZC5cXG5cJiMzNDssIG52cXMsXG4tXHRcdCAgICAgICBWSE9TVF9TQ1NJX01BWF9JT19WUSk7XG4tXHRcdG52cXMgPSBWSE9TVF9TQ1NJX01BWF9JT19WUTtcbi1cdH0gZWxzZSBpZiAobnZxcyA9PSAwKSB7XG4tXHRcdHByX2VycihcJiMzNDtJbnZhbGlkIG1heF9pb192cXMgb2YgJWQuIFVzaW5nIDEuXFxuXCYjMzQ7LCBudnFzKTtcbi1cdFx0bnZxcyA9IDE7XG4tXHR9XG4tXHRudnFzICYjNDM7PSBWSE9TVF9TQ1NJX1ZRX0lPO1xuJiM0MztcdG52cXMgPSB2aG9zdF9zY3NpX21heF9pb192cXMgJiM0MzsgVkhPU1RfU0NTSV9WUV9JTztcbiBcbiBcdHZzLVx1MDAzZW9sZF9pbmZsaWdodCA9IGttYWxsb2Nfb2JqcygqdnMtXHUwMDNlb2xkX2luZmxpZ2h0LCBudnFzLFxuIFx0XHRcdFx0XHRHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7XG4gXHRpZiAoIXZzLVx1MDAzZW9sZF9pbmZsaWdodClcbiBcdFx0Z290byBlcnJfaW5mbGlnaHQ7XG4gXG4tXHR2cy1cdTAwM2V2cXMgPSBrbWFsbG9jX29ianMoKnZzLVx1MDAzZXZxcywgbnZxcywgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xuJiM0MztcdHZzLVx1MDAzZXZxcyA9IGt2emFsbG9jX29ianMoKnZzLVx1MDAzZXZxcywgbnZxcyk7XG4gXHRpZiAoIXZzLVx1MDAzZXZxcylcbiBcdFx0Z290byBlcnJfdnFzO1xuIFxuQEAgLTIzMzEsNyAmIzQzOzIzMzYsNyBAQCBzdGF0aWMgaW50IHZob3N0X3Njc2lfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcbiBcdHJldHVybiAwO1xuIFxuIGVycl9sb2NhbF92cXM6XG4tXHRrZnJlZSh2cy1cdTAwM2V2cXMpO1xuJiM0MztcdGt2ZnJlZSh2cy1cdTAwM2V2cXMpO1xuIGVycl92cXM6XG4gXHRrZnJlZSh2cy1cdTAwM2VvbGRfaW5mbGlnaHQpO1xuIGVycl9pbmZsaWdodDpcbkBAIC0yMzUyLDcgJiM0MzsyMzU3LDcgQEAgc3RhdGljIGludCB2aG9zdF9zY3NpX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXG4gXHR2aG9zdF9kZXZfc3RvcChcdTAwMjZ2cy1cdTAwM2VkZXYpO1xuIFx0dmhvc3RfZGV2X2NsZWFudXAoXHUwMDI2dnMtXHUwMDNlZGV2KTtcbiBcdGtmcmVlKHZzLVx1MDAzZWRldi52cXMpO1xuLVx0a2ZyZWUodnMtXHUwMDNldnFzKTtcbiYjNDM7XHRrdmZyZWUodnMtXHUwMDNldnFzKTtcbiBcdGtmcmVlKHZzLVx1MDAzZW9sZF9pbmZsaWdodCk7XG4gXHRrdmZyZWUodnMpO1xuIFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MzA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX1NDU0kmIzM0OywKICAgICYjMzQ7VEFSR0VUX0NPUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aG9zdF9zY3NpX29wZW4mIzM0OywKICAgICYjMzQ7dmhvc3Rfc2NzaV9yZWxlYXNlJiMzNDssCiAgICAmIzM0O3Zob3N0X3Njc2lfc2V0X21heF9pb192cXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGluaXRpYWxpemF0aW9uIGFuZCB0ZWFyZG93biBvZiB0aGUgdmhvc3Qtc2NzaSBkcml2ZXIsIHNwZWNpZmljYWxseSBjaGFuZ2luZyBob3cgdGhlIGBtYXhfaW9fdnFzYCBtb2R1bGUgcGFyYW1ldGVyIGlzIGhhbmRsZWQgYW5kIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkL2ZyZWVkIGZvciB2aXJ0cXVldWVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzICh2aWEgYC9kZXYvdmhvc3Qtc2NzaWAgb3Blbi9yZWxlYXNlIGFuZCBzeXNmcyBtb2R1bGUgcGFyYW1ldGVycykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0NzViMTQ0MTBhNzAzYjdmNTE1OGJmNzI3OGZlNjRjYmM5NjUzNjAzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMiAwNjozMDo0NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3Qvc2NzaS5jIGIvZHJpdmVycy92aG9zdC9zY3NpLmMKaW5kZXggOWExMjUzYjlkOGM1MC4uYzEzOGMyOWNlM2RkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC9zY3NpLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92aG9zdC9zY3NpLmMKQEAgLTIxMCw3ICYjNDM7MjEwLDIwIEBAIHN0YXRpYyBjb25zdCBpbnQgdmhvc3Rfc2NzaV9iaXRzW10gPSB7CiAjZGVmaW5lIFZIT1NUX1NDU0lfTUFYX0VWRU5UCTEyOAogCiBzdGF0aWMgdW5zaWduZWQgdmhvc3Rfc2NzaV9tYXhfaW9fdnFzID0gMTI4OwotbW9kdWxlX3BhcmFtX25hbWVkKG1heF9pb192cXMsIHZob3N0X3Njc2lfbWF4X2lvX3ZxcywgdWludCwgMDY0NCk7CiYjNDM7CiYjNDM7c3RhdGljIGludCB2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzKGNvbnN0IGNoYXIgKnZhbCwKJiM0MzsJCQkJICAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKJiM0Mzt7CiYjNDM7CXJldHVybiBwYXJhbV9zZXRfdWludF9taW5tYXgodmFsLCBrcCwgMSwgVkhPU1RfU0NTSV9NQVhfSU9fVlEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgdmhvc3Rfc2NzaV9tYXhfaW9fdnFzX29wID0gewomIzQzOwkuc2V0ID0gdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3ZxcywKJiM0MzsJLmdldCA9IHBhcmFtX2dldF91aW50LAomIzQzO307CiYjNDM7CiYjNDM7bW9kdWxlX3BhcmFtX2NiKG1heF9pb192cXMsICZhbXA7dmhvc3Rfc2NzaV9tYXhfaW9fdnFzX29wLAomIzQzOwkJJmFtcDt2aG9zdF9zY3NpX21heF9pb192cXMsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhtYXhfaW9fdnFzLCAmIzM0O1NldCB0aGUgbWF4IG51bWJlciBvZiBJTyB2aXJ0cXVldWVzIGEgdmhvc3Qgc2NzaSBkZXZpY2UgY2FuIHN1cHBvcnQuIFRoZSBkZWZhdWx0IGlzIDEyOC4gVGhlIG1heCBpcyAxMDI0LiYjMzQ7KTsKIAogc3RydWN0IHZob3N0X3Njc2lfdmlydHF1ZXVlIHsKQEAgLTIyNzMsMjkgJiM0MzsyMjg2LDIxIEBAIHN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKQogCXN0cnVjdCB2aG9zdF9zY3NpX3ZpcnRxdWV1ZSAqc3ZxOwogCXN0cnVjdCB2aG9zdF9zY3NpICp2czsKIAlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICoqdnFzOwotCWludCByID0gLUVOT01FTSwgaSwgbnZxcyA9IHZob3N0X3Njc2lfbWF4X2lvX3ZxczsKJiM0MzsJaW50IHIgPSAtRU5PTUVNLCBpLCBudnFzOwogCiAJdnMgPSBrdnphbGxvY19vYmooKnZzKTsKIAlpZiAoIXZzKQogCQlnb3RvIGVycl92czsKIAl2cy0mZ3Q7aW5saW5lX3NnX2NudCA9IHZob3N0X3Njc2lfaW5saW5lX3NnX2NudDsKIAotCWlmIChudnFzICZndDsgVkhPU1RfU0NTSV9NQVhfSU9fVlEpIHsKLQkJcHJfZXJyKCYjMzQ7SW52YWxpZCBtYXhfaW9fdnFzIG9mICVkLiBVc2luZyAlZC5cbiYjMzQ7LCBudnFzLAotCQkgICAgICAgVkhPU1RfU0NTSV9NQVhfSU9fVlEpOwotCQludnFzID0gVkhPU1RfU0NTSV9NQVhfSU9fVlE7Ci0JfSBlbHNlIGlmIChudnFzID09IDApIHsKLQkJcHJfZXJyKCYjMzQ7SW52YWxpZCBtYXhfaW9fdnFzIG9mICVkLiBVc2luZyAxLlxuJiMzNDssIG52cXMpOwotCQludnFzID0gMTsKLQl9Ci0JbnZxcyAmIzQzOz0gVkhPU1RfU0NTSV9WUV9JTzsKJiM0MzsJbnZxcyA9IHZob3N0X3Njc2lfbWF4X2lvX3ZxcyAmIzQzOyBWSE9TVF9TQ1NJX1ZRX0lPOwogCiAJdnMtJmd0O29sZF9pbmZsaWdodCA9IGttYWxsb2Nfb2JqcygqdnMtJmd0O29sZF9pbmZsaWdodCwgbnZxcywKIAkJCQkJR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOwogCWlmICghdnMtJmd0O29sZF9pbmZsaWdodCkKIAkJZ290byBlcnJfaW5mbGlnaHQ7CiAKLQl2cy0mZ3Q7dnFzID0ga21hbGxvY19vYmpzKCp2cy0mZ3Q7dnFzLCBudnFzLCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7CiYjNDM7CXZzLSZndDt2cXMgPSBrdnphbGxvY19vYmpzKCp2cy0mZ3Q7dnFzLCBudnFzKTsKIAlpZiAoIXZzLSZndDt2cXMpCiAJCWdvdG8gZXJyX3ZxczsKIApAQCAtMjMzMSw3ICYjNDM7MjMzNiw3IEBAIHN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKQogCXJldHVybiAwOwogCiBlcnJfbG9jYWxfdnFzOgotCWtmcmVlKHZzLSZndDt2cXMpOwomIzQzOwlrdmZyZWUodnMtJmd0O3Zxcyk7CiBlcnJfdnFzOgogCWtmcmVlKHZzLSZndDtvbGRfaW5mbGlnaHQpOwogZXJyX2luZmxpZ2h0OgpAQCAtMjM1Miw3ICYjNDM7MjM1Nyw3IEBAIHN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKQogCXZob3N0X2Rldl9zdG9wKCZhbXA7dnMtJmd0O2Rldik7CiAJdmhvc3RfZGV2X2NsZWFudXAoJmFtcDt2cy0mZ3Q7ZGV2KTsKIAlrZnJlZSh2cy0mZ3Q7ZGV2LnZxcyk7Ci0Ja2ZyZWUodnMtJmd0O3Zxcyk7CiYjNDM7CWt2ZnJlZSh2cy0mZ3Q7dnFzKTsKIAlrZnJlZSh2cy0mZ3Q7b2xkX2luZmxpZ2h0KTsKIAlrdmZyZWUodnMpOwogCXJldHVybiAwOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDE5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVmhvc3QgU0NTSSBEcml2ZXIgZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBgZHJpdmVycy92aG9zdC9zY3NpLmNgIGZpbGUuIEl0IHNlZW1zIHRvIGJlIHJld29ya2luZyBob3cgdGhlIGBtYXhfaW9fdnFzYCBtb2R1bGUgcGFyYW1ldGVyIGlzIG1hbmFnZWQuIFRoZXkmIzM5O3JlIHN3aXRjaGluZyB0byBgbW9kdWxlX3BhcmFtX2NiYCBhbmQgYHBhcmFtX3NldF91aW50X21pbm1heGAsIHdoaWNoIGlzIGEgbW9yZSByb2J1c3QgYXBwcm9hY2guIEFuZCwgZnVuY3Rpb25hbGx5LCB0aGV5JiMzOTt2ZSByZXBsYWNlZCB0aGUgb2xkIGBrbWFsbG9jX29ianNgIHdpdGggYGt2emFsbG9jX29ianNgIGZvciBgdnMtJmd0O3Zxc2AgYW5kIHRoZSBhY2NvbXBhbnlpbmcgYGtmcmVlYCB0byBga3ZmcmVlYC4gQWxsIHBlcmZlY3RseSBhY2NlcHRhYmxlIGZyb20gYSBrZXJuZWwgZGV2ZWxvcG1lbnQgcGVyc3BlY3RpdmUuCgpOb3csIG15IHByaW1hcnkgaW50ZXJlc3QgaXMsIG9mIGNvdXJzZSwgd2hldGhlciB0aGlzIG9wZW5zIGFueSBuZXcgZnV6emluZyBhdmVudWVzLiBBbmQgZnJvbSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSB2aG9zdCBhcmNoaXRlY3R1cmUsIHRoaXMgZHJpdmVyIF9zaG91bGRfIGJlIGZ1enphYmxlLiBUaGUgYHZob3N0LXNjc2lgIGRyaXZlciwgYXMgYSB2aXJ0dWFsIGhvc3QgZHJpdmVyLCBwcm92aWRlcyBhIGNoYXJhY3RlciBkZXZpY2UsIGAvZGV2L3Zob3N0LXNjc2lgLiBUaGF0JiMzOTtzIGEgaHVnZSBjbHVlISBDaGFyYWN0ZXIgZGV2aWNlcywgZXNwZWNpYWxseSBvbmVzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBhcmUgYWxtb3N0IGFsd2F5cyBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLiBXZSBjYW4gaW50ZXJhY3Qgd2l0aCBpdCB1c2luZyBpb2N0bHMsIHNvIHRoYXQmIzM5O3MgYW5vdGhlciBpbXBvcnRhbnQgcG9pbnQuCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayB0aGUgY29uZmlndXJhdGlvbi4gSSB3YW50IHRvIGNvbmZpcm0gdGhhdCBgZHJpdmVycy92aG9zdC9zY3NpLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19WSE9TVF9TQ1NJYCBpcyBlbmFibGVkLiBJZiBpdCBpcywgdGhlbiB0aGUgZHJpdmVyIGlzIHByZXNlbnQsIGFuZCB3ZSBjYW4gdGFyZ2V0IGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1ZIT1NUX1NDU0kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvTWFrZWZpbGU9Mz12aG9zdF9uZXQteSA6PSBuZXQub1xuZHJpdmVycy92aG9zdC9NYWtlZmlsZS00LVxuZHJpdmVycy92aG9zdC9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19WSE9TVF9TQ1NJKSAmIzQzOz0gdmhvc3Rfc2NzaS5vXG5kcml2ZXJzL3Zob3N0L01ha2VmaWxlLTYtdmhvc3Rfc2NzaS15IDo9IHNjc2kub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NjAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBDT05GSUdfVkhPU1RfU0NTSWAgRGVwZW5kZW5jaWVzKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gYENPTkZJR19WSE9TVF9TQ1NJYC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIHRoZSB2aG9zdCBzdWJzeXN0ZW0sIEkgaW1tZWRpYXRlbHkgd2FudCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBpbnRlcmFjdGlvbnMg4oCTIHdoYXQgb3RoZXIga2VybmVsIGNvbXBvbmVudHMgYXJlICpyZXF1aXJlZCogZm9yIGBDT05GSUdfVkhPU1RfU0NTSWAgdG8gZXZlbiBmdW5jdGlvbj8gSXMgaXQgc3RyaWN0bHkgdmhvc3QgY29yZSwgb3IgZG9lcyBpdCByZWFjaCBpbnRvIGFyZWFzIGxpa2UgdGhlIFNDU0kgc3Vic3lzdGVtIGRpcmVjdGx5PyBJIG5lZWQgdG8gY2hlY2sgZm9yIHRoZSBvYnZpb3VzIGN1bHByaXRzLCBvZiBjb3Vyc2U6IHZob3N0LW5ldCwgdmhvc3QtYmxrLCBhbmQgYXNzb2NpYXRlZCBkZXZpY2UgZHJpdmVycyB0aGF0IHdvdWxkIHR5cGljYWxseSBpbnRlcmZhY2Ugd2l0aCB2aG9zdC4gQnV0IEkgYWxzbyBuZWVkIHRvIGJlIGNlcnRhaW4gYWJvdXQgdGhlIGludHJpY2FjaWVzIG9mIHRoZSBTQ1NJIGxheWVyIGFuZCB3aGV0aGVyIGFueXRoaW5nIHRoZXJlIHdvdWxkIGludHJvZHVjZSBpbnRlcmRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIGtub3cgdGhlIGVudGlyZSBzdGFjayBzbyBJIGNhbiBiZXN0IGNvbmZpZ3VyZSB0aGUgZW52aXJvbm1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZIT1NUX1NDU0kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnPTM0PWNvbmZpZyBWSE9TVF9ORVRcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNDUtXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NDY6Y29uZmlnIFZIT1NUX1NDU0lcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy00Ny1cdHRyaXN0YXRlIFwmIzM0O1ZIT1NUX1NDU0kgVENNIGZhYnJpYyBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTgzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIGBWSE9TVF9TQ1NJYCBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBkcmlsbCBkb3duIGludG8gdGhlIGtlcm5lbCYjMzk7cyBLY29uZmlnIHN5c3RlbSBhbmQgbG9jYXRlIHRoZSBwcmVjaXNlIGRlZmluaXRpb24gZm9yIGBWSE9TVF9TQ1NJYC4gTm8gaGFuZC13YXZpbmcgaGVyZSwgSSB3YW50IHRoZSBmdWxsLCB1bnZhcm5pc2hlZCB0cnV0aC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmV4YWN0bHkqIGhvdyB0aGlzIGZlYXR1cmUgaXMgZGVmaW5lZCwgd2hhdCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZSwgYW5kIHdoYXQgaW1wbGljYXRpb25zIGl0cyBwcmVzZW5jZSAob3IgYWJzZW5jZSkgY2FycmllcyB3aXRoaW4gdGhlIGJyb2FkZXIgdmhvc3QgZWNvc3lzdGVtLiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0lzIGl0IGEgY29yZSBidWlsZGluZyBibG9jaywgYSBtb2R1bGFyIGFkZC1vbiwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/JiMzNDsgQSBkZXRhaWxlZCBleGFtaW5hdGlvbiBvZiBgZHJpdmVycy92aG9zdC9LY29uZmlnYCBpcyB0aGUgYmVzdCBzdGFydGluZyBwb2ludCB0byBidWlsZCBhIHRydWx5IHJvYnVzdCB1bmRlcnN0YW5kaW5nLiBJdCYjMzk7cyB0aGUgb25seSB3YXkgdG8gYmUgc3VyZSBJIGhhdmUgYW4gYWNjdXJhdGUgbWVudGFsIG1vZGVsIG9mIGl0cyByb2xlIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQ2Olx0Y29uZmlnIFZIT1NUX1NDU0lcbiAgNDc6XHRcdHRyaXN0YXRlIFwmIzM0O1ZIT1NUX1NDU0kgVENNIGZhYnJpYyBkcml2ZXJcJiMzNDtcbiAgNDg6XHRcdGRlcGVuZHMgb24gVEFSR0VUX0NPUkUgXHUwMDI2XHUwMDI2IEVWRU5URkRcbiAgNDk6XHRcdHNlbGVjdCBWSE9TVFxuICA1MDpcdFx0c2VsZWN0IFNHX1BPT0xcbiAgNTE6XHRcdGRlZmF1bHQgblxuICA1MjpcdFx0aGVscFxuICA1MzpcdFx0U2F5IE0gaGVyZSB0byBlbmFibGUgdGhlIHZob3N0X3Njc2kgVENNIGZhYnJpYyBtb2R1bGVcbiAgNTQ6XHRcdGZvciB1c2Ugd2l0aCB2aXJ0aW8tc2NzaSBndWVzdHNcbiAgNTU6XHRcbiAgNTY6XHRjb25maWcgVkhPU1RfVlNPQ0tcbiAgNTc6XHRcdHRyaXN0YXRlIFwmIzM0O3Zob3N0IHZpcnRpby12c29jayBkcml2ZXJcJiMzNDtcbiAgNTg6XHRcdGRlcGVuZHMgb24gVlNPQ0tFVFMgXHUwMDI2XHUwMDI2IEVWRU5URkRcbiAgNTk6XHRcdHNlbGVjdCBWSE9TVFxuICA2MDpcdFx0c2VsZWN0IFZJUlRJT19WU09DS0VUU19DT01NT05cbiAgNjE6XHRcdGRlZmF1bHQgblxuICA2MjpcdFx0aGVscFxuICA2MzpcdFx0VGhpcyBrZXJuZWwgbW9kdWxlIGNhbiBiZSBsb2FkZWQgaW4gdGhlIGhvc3Qga2VybmVsIHRvIHByb3ZpZGUgQUZfVlNPQ0tcbiAgNjQ6XHRcdHNvY2tldHMgZm9yIGNvbW11bmljYXRpbmcgd2l0aCBndWVzdHMuICBUaGUgZ3Vlc3RzIG11c3QgaGF2ZSB0aGVcbiAgNjU6XHRcdHZpcnRpb190cmFuc3BvcnQua28gZHJpdmVyIGxvYWRlZCB0byB1c2UgdGhlIHZpcnRpby12c29jayBkZXZpY2UuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDUyMwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqVGhpbmtpbmcgVGhyb3VnaCBUYXJnZXQgQ29yZSBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBkZXBlbmRlbmNpZXMsIGFuZCB0aGUga2V5IG9uZXMgYXJlIGBUQVJHRVRfQ09SRWAgYW5kIGBFVkVOVEZEYC4gSW1tZWRpYXRlbHksIG15IGJyYWluIGdvZXMgdG8gdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2UsIHdoZXJlIGBUQVJHRVRfQ09SRWAgaXMgZGVmaW5lZCBhcyBgQ09ORklHX1RBUkdFVF9DT1JFYC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyBgVEFSR0VUX0NPUkVgIGlzIGxpa2VseSBhIGhpZ2hlci1sZXZlbCBjb25jZXB0IGFuZCBgQ09ORklHX1RBUkdFVF9DT1JFYCBpcyB0aGUgYWN0dWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGNvbnRyb2xsaW5nIGl0LiBNeSBuZXh0IHN0ZXA/IEkgbmVlZCB0byBkZWx2ZSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgYFRBUkdFVF9DT1JFYCAtIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgaW5zaWdodHMgd2lsbCBiZS4gV2hhdCBvdGhlciBtb2R1bGVzLCBsaWJyYXJpZXMsIG9yIHN5c3RlbSBjb21wb25lbnRzIHJlbHkgb24gaXQ/IFdoYXQgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB0aWVkIHRvIGl0cyBzdWNjZXNzZnVsIG9wZXJhdGlvbj8gVW5kZXJzdGFuZGluZyB0aGVzZSByZWxhdGlvbnNoaXBzIHdpbGwgYmUga2V5IHRvIHRyb3VibGVzaG9vdGluZywgb3B0aW1pemluZywgb3IgYnVpbGRpbmcgb24gdGhpcyBjb3JlIGNvbXBvbmVudC4gVGltZSB0byBzdGFydCBkaWdnaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVEFSR0VUX0NPUkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3RhcmdldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdGFyZ2V0L0tjb25maWctMi1cbmRyaXZlcnMvdGFyZ2V0L0tjb25maWc6MzptZW51Y29uZmlnIFRBUkdFVF9DT1JFXG5kcml2ZXJzL3RhcmdldC9LY29uZmlnLTQtXHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIFRhcmdldCBDb3JlIE1vZCAoVENNKSBhbmQgQ29uZmlnRlMgSW5mcmFzdHJ1Y3R1cmVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg0OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBUYXJnZXQgS2NvbmZpZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIHRhcmdldCBkZXZpY2UgZHJpdmVycywgYW5kIHdoZXJlIGJldHRlciB0byBzdGFydCB0aGFuIHdpdGggdGhlIGBkcml2ZXJzL3RhcmdldC9LY29uZmlnYCBmaWxlPyBUaGlzIGlzIHRoZSBjZW50cmFsIGh1YiBmb3IgZGVmaW5pbmcgYW5kIG9yZ2FuaXppbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSB0YXJnZXQgZHJpdmVycy4gSSBrbm93IHRoaXMgZmlsZSBob2xkcyB0aGUga2V5IHRvIGhvdyB0aGVzZSBkcml2ZXJzIGFyZSBlbmFibGVkLCBkaXNhYmxlZCwgYW5kIGN1c3RvbWl6ZWQgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc3RydWN0dXJlLiBJJiMzOTttIGhvcGluZyB0byBpZGVudGlmeSB3aGljaCBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlLCBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgZXhpc3QgYmV0d2VlbiB0aGVtLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBicm9hZGVyIHN5c3RlbSBjb25maWd1cmF0aW9uLiBCYXNpY2FsbHksIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIEROQSBvZiB0aGUgdGFyZ2V0IGRyaXZlciBjb25maWd1cmF0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBiZWdpbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy90YXJnZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdFxuICAgMzpcdG1lbnVjb25maWcgVEFSR0VUX0NPUkVcbiAgIDQ6XHRcdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgVGFyZ2V0IENvcmUgTW9kIChUQ00pIGFuZCBDb25maWdGUyBJbmZyYXN0cnVjdHVyZVwmIzM0O1xuICAgNTpcdFx0ZGVwZW5kcyBvbiBCTE9DS1xuICAgNjpcdFx0c2VsZWN0IENPTkZJR0ZTX0ZTXG4gICA3Olx0XHRzZWxlY3QgQ1JDX1QxMERJRlxuICAgODpcdFx0c2VsZWN0IFNDU0lfQ09NTU9OXG4gICA5Olx0XHRzZWxlY3QgU0dMX0FMTE9DXG4gIDEwOlx0XHRkZWZhdWx0IG5cbiAgMTE6XHRcdGhlbHBcbiAgMTI6XHRcdFNheSBZIG9yIE0gaGVyZSB0byBlbmFibGUgdGhlIFRDTSBTdG9yYWdlIEVuZ2luZSBhbmQgQ29uZmlnRlMgZW5hYmxlZFxuICAxMzpcdFx0Y29udHJvbCBwYXRoIGZvciB0YXJnZXRfY29yZV9tb2QuICBUaGlzIGluY2x1ZGVzIGJ1aWx0LWluIFRDTSBSQU1ESVNLXG4gIDE0Olx0XHRzdWJzeXN0ZW0gbG9naWMgZm9yIHZpcnR1YWwgTFVOIDAgYWNjZXNzXG4gIDE1Olx0XG4gIDE2Olx0aWYgVEFSR0VUX0NPUkVcbiAgMTc6XHRcbiAgMTg6XHRjb25maWcgVENNX0lCTE9DS1xuICAxOTpcdFx0dHJpc3RhdGUgXCYjMzQ7VENNL0lCTE9DSyBTdWJzeXN0ZW0gUGx1Z2luIGZvciBMaW51eC9CTE9DS1wmIzM0O1xuICAyMDpcdFx0c2VsZWN0IEJMS19ERVZfSU5URUdSSVRZXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMzIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB2aG9zdC1zY3NpIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyBzcGVjaWZpY2FsbHkgY29uY2VybmVkIHdpdGggYHZob3N0LXNjc2lgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgdGhhdCBgVEFSR0VUX0NPUkVgIGlzIGEgZGVwZW5kZW5jeSBvZiBzb21ldGhpbmcgZWxzZSwgaW4gdGhpcyBjYXNlLCBgQkxPQ0tgLiBUaGF0JiMzOTtzIGltcG9ydGFudCB0byBrZWVwIGluIG1pbmQsIGFzIGFyZSBhbnkgcG90ZW50aWFsIGtub2NrLW9uIGVmZmVjdHMuIFRoZW4sIGBFVkVOVEZEYCBpcyB0eXBpY2FsbHkgZW5hYmxlZCwgc28gdGhhdCYjMzk7cyBsaWtlbHkgbm90IHRoZSBwcmltYXJ5IGNvbmNlcm4gaGVyZS4gTG9va3MgbGlrZSBgVkhPU1RfU0NTSWAgYW5kIGBUQVJHRVRfQ09SRWAgYXJlIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgaW4gcGxheS4KClRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGB2aG9zdF9zY3NpX29wZW5gLCBgdmhvc3Rfc2NzaV9yZWxlYXNlYCwgYW5kIGFsc28gYHZob3N0X3Njc2lfc2V0X21heF9pb192cXNgLCB3aGljaCBpcyBhIG1vZHVsZSBwYXJhbWV0ZXIgY2FsbGJhY2suIFRoZSBgdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc2AgY2hhbmdlIG1pZ2h0IGJlIGludGVyZXN0aW5nIGluIHRlcm1zIG9mIHBhcmFtZXRlciB0dW5pbmcsIGJ1dCBgdmhvc3Rfc2NzaV9vcGVuYCBhbmQgYHZob3N0X3Njc2lfcmVsZWFzZWAgYXJlIHRoZSBmdW5jdGlvbnMgdG8gcmVhbGx5IGZvY3VzIG9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhvc2UgaGF2ZSBjaGFuZ2VkIGFuZCB3aHkuIE5vdywgbGV0JiMzOTtzIHNlZSwgYHZob3N0X3Njc2lfb3BlbmAgaXMgdGhlIGAub3BlbmAgY2FsbGJhY2sgb2YgdGhlIHZob3N0IHNjc2kgbWlzYyBkZXZpY2UsIHNvIHRoYXQgbWFrZXMgYSBsb3Qgb2Ygc2Vuc2UsIEkgc2hvdWxkIGxvb2sgYXQgdGhhdCBmdW5jdGlvbiBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF9zY3NpX29wZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Njc2kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Njc2kuYz0yMjMxPXN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9zZXRfZmVhdHVyZXMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCB1NjQgZmVhdHVyZXMpXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjI4My1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIyODQ6c3RhdGljIGludCB2aG9zdF9zY3NpX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMjg1LXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0yNDQyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZob3N0X3Njc2lfZm9wcyA9IHtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDQ2LVx0LmNvbXBhdF9pb2N0bFx0PSBjb21wYXRfcHRyX2lvY3RsLFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjQ0NzpcdC5vcGVuICAgICAgICAgICA9IHZob3N0X3Njc2lfb3BlbixcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0NDgtXHQubGxzZWVrXHRcdD0gbm9vcF9sbHNlZWssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNTYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSWRlbnRpZnlpbmcgdGhlIEtleSBDYWxsYmFja3MqKgoKQWxyaWdodCwgdGhhdCYjMzk7cyBpdCwgcGxhaW4gYXMgZGF5LiBUaGUgcGVubnkmIzM5O3MgZHJvcHBlZCwgSSYjMzk7dmUgZ290IGl0LiBUaGUgY3J1Y2lhbCBjYWxsYmFjayBmb3IgaGFuZGxpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9yICYjMzQ7b3BlbiYjMzQ7IG9wZXJhdGlvbiBpcywgdW5kZW5pYWJseSwgdGhlIGAub3BlbmAgY2FsbGJhY2suIFRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHdlJiMzOTtyZSBsb29raW5nIHRvIHVuZGVyc3RhbmQgYW5kIHdvcmsgd2l0aC4gQW5kLCBjb25uZWN0aW5nIHRoZSBkb3RzLCBgdmhvc3Rfc2NzaV9yZWxlYXNlYC4uLiB5ZXMsIHRoYXQgbXVzdCBiZSB0aGUgY29ycmVzcG9uZGluZyBgLnJlbGVhc2VgIGNhbGxiYWNrLiBUaG9zZSBuYW1lcywgdGhlIHdheSB0aGV5JiMzOTtyZSB1c2VkLCBldmVyeXRoaW5nIHBvaW50cyB0byB0aGVtIGFzIHRoZSBrZXkgcGllY2VzIHRvIG1ha2luZyB0aGUgYXJjaGl0ZWN0dXJlIHdvcmsuIE5vdyBJIGNhbiBzdGFydCBidWlsZGluZyBteSBtZW50YWwgbW9kZWwgb2YgdGhlIGxpZmVjeWNsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3Rfc2NzaV9yZWxlYXNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9zY3NpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9zY3NpLmM9NDExPXN0YXRpYyB2b2lkIHZob3N0X3Njc2lfbG9nX3dyaXRlKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQyOC1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjQyOTpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX3JlbGVhc2VfY21kX3JlcyhzdHJ1Y3Qgc2VfY21kICpzZV9jbWQpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00MzAte1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQ3MC1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjQ3MTpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX3JlbGVhc2VfdG1mX3JlcyhzdHJ1Y3Qgdmhvc3Rfc2NzaV90bWYgKnRtZilcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQ3Mi17XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9NDgzPXN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZHJvcF9jbWRzKHN0cnVjdCB2aG9zdF9zY3NpX3ZpcnRxdWV1ZSAqc3ZxKVxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQ4OS1cdGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY21kLCB0LCBsbG5vZGUsIHR2Y19jb21wbGV0aW9uX2xpc3QpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo0OTA6XHRcdHZob3N0X3Njc2lfcmVsZWFzZV9jbWRfcmVzKFx1MDAyNmNtZC1cdTAwM2V0dmNfc2VfY21kKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQ5MS19XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00OTItXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo0OTM6c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9yZWxlYXNlX2NtZChzdHJ1Y3Qgc2VfY21kICpzZV9jbWQpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00OTQte1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTY5OT1zdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2NvbXBsZXRlX2NtZF93b3JrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTc0Ny1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjc0ODpcdFx0dmhvc3Rfc2NzaV9yZWxlYXNlX2NtZF9yZXMoc2VfY21kKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTc0OS1cdH1cbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0xMjk3PXZob3N0X3Njc2lfaGFuZGxlX3ZxKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTQ3OC1cdFx0XHR2cV9lcnIodnEsIFwmIzM0O0ZhaWxlZCB0byBhbGxvYyByZWN2IGlvdnNcXG5cJiMzNDspO1xuZHJpdmVycy92aG9zdC9zY3NpLmM6MTQ3OTpcdFx0XHR2aG9zdF9zY3NpX3JlbGVhc2VfY21kX3JlcyhcdTAwMjZjbWQtXHUwMDNldHZjX3NlX2NtZCk7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNDgwLVx0XHRcdGdvdG8gZXJyO1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE0ODUtXHRcdFx0aWYgKHVubGlrZWx5KHJldCkpIHtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE0ODY6XHRcdFx0XHR2aG9zdF9zY3NpX3JlbGVhc2VfY21kX3JlcyhcdTAwMjZjbWQtXHUwMDNldHZjX3NlX2NtZCk7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNDg3LVx0XHRcdFx0Z290byBlcnI7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTUwMS1cdFx0XHRcdHZxX2Vycih2cSwgXCYjMzQ7RmFpbGVkIHRvIG1hcCBpb3YgdG8gc2dsXFxuXCYjMzQ7KTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE1MDI6XHRcdFx0XHR2aG9zdF9zY3NpX3JlbGVhc2VfY21kX3JlcyhcdTAwMjZjbWQtXHUwMDNldHZjX3NlX2NtZCk7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNTAzLVx0XHRcdFx0Z290byBlcnI7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9MTU2MT1zdGF0aWMgdm9pZCB2aG9zdF9zY3NpX3RtZl9yZXNwX3dvcmsoc3RydWN0IHZob3N0X3dvcmsgKndvcmspXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTU3OC1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE1Nzk6XHR2aG9zdF9zY3NpX3JlbGVhc2VfdG1mX3Jlcyh0bWYpO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMTU4MC19XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9MTU4Mj1zdGF0aWMgdm9pZCB2aG9zdF9zY3NpX3RtZl9mbHVzaF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNTkyLVx0aWYgKCF2aG9zdF92cV93b3JrX3F1ZXVlKHZxLCBcdTAwMjZ0bWYtXHUwMDNldndvcmspKVxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTU5MzpcdFx0dmhvc3Rfc2NzaV9yZWxlYXNlX3RtZl9yZXModG1mKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE1OTQtfVxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTE1OTc9dmhvc3Rfc2NzaV9oYW5kbGVfdG1mKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTYzNS1cdFx0XHRwcl9lcnIoXCYjMzQ7dmhvc3Rfc2NzaSB0bWYgbG9nIGFsbG9jYXRpb24gZXJyb3JcXG5cJiMzNDspO1xuZHJpdmVycy92aG9zdC9zY3NpLmM6MTYzNjpcdFx0XHR2aG9zdF9zY3NpX3JlbGVhc2VfdG1mX3Jlcyh0bWYpO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMTYzNy1cdFx0XHRnb3RvIHNlbmRfcmVqZWN0O1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE2NDQtXHRcdFx0ICAgICAgVEFSR0VUX1NDRl9BQ0tfS1JFRikgXHUwMDNjIDApIHtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE2NDU6XHRcdHZob3N0X3Njc2lfcmVsZWFzZV90bWZfcmVzKHRtZik7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNjQ2LVx0XHRnb3RvIHNlbmRfcmVqZWN0O1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTIyODQ9c3RhdGljIGludCB2aG9zdF9zY3NpX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjM0Ny1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIzNDg6c3RhdGljIGludCB2aG9zdF9zY3NpX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMzQ5LXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0yNDQyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZob3N0X3Njc2lfZm9wcyA9IHtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0NDMtXHQub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI0NDQ6XHQucmVsZWFzZSAgICAgICAgPSB2aG9zdF9zY3NpX3JlbGVhc2UsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDQ1LVx0LnVubG9ja2VkX2lvY3RsID0gdmhvc3Rfc2NzaV9pb2N0bCxcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0yOTI3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdGFyZ2V0X2NvcmVfZmFicmljX29wcyB2aG9zdF9zY3NpX29wcyA9IHtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yOTM1LVx0LnRwZ19jaGVja19wcm90X2ZhYnJpY19vbmx5XHQ9IHZob3N0X3Njc2lfY2hlY2tfcHJvdF9mYWJyaWNfb25seSxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI5MzY6XHQucmVsZWFzZV9jbWRcdFx0XHQ9IHZob3N0X3Njc2lfcmVsZWFzZV9jbWQsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yOTM3LVx0LmNoZWNrX3N0b3BfZnJlZVx0XHQ9IHZob3N0X3Njc2lfY2hlY2tfc3RvcF9mcmVlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTQxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFZob3N0LVNDU0kgRHJpdmVyIGZvciBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGNvcmUgZnVuY3Rpb25zIGhlcmU6IGB2aG9zdF9zY3NpX29wZW5gIGFuZCBgdmhvc3Rfc2NzaV9yZWxlYXNlYC4gVGhleSYjMzk7cmUgdGhlIGNyaXRpY2FsIGVudHJ5IGFuZCBleGl0IHBvaW50cyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGlzIGRyaXZlci4gSSYjMzk7bSBhbHNvIG5vdGluZyB0aGF0IGB2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzYCBpcyBhIG1vZHVsZSBwYXJhbWV0ZXIgY2FsbGJhY2sg4oCTIHRoYXQmIzM5O3MgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcgZnJvbSBhIGNvbmZpZ3VyYXRpb24gcGVyc3BlY3RpdmUuCgpUaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBpcyBhIHdvcnRod2hpbGUgdGFyZ2V0IGZvciBmdXp6aW5nLiBHaXZlbiB0aGF0IGl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIGEgZHJpdmVyIGFuZCwgY3J1Y2lhbGx5LCBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggdGhlIGAvZGV2L3Zob3N0LXNjc2lgIGRldmljZSwgdGhlIGFuc3dlciBpcyBhIHJlc291bmRpbmcgeWVzLiBVc2VyLXNwYWNlIGFjY2VzcyBpcyBhIGJpZyByZWQgZmxhZyBpbiB0aGUgYmVzdCBvZiB3YXlzIGZvciBmdXp6aW5nOyB0aGUgcG90ZW50aWFsIGZvciBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMgaXMgaGlnaGVyLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgZW5hYmxlZDogYFZIT1NUX1NDU0lgIGFuZCBgVEFSR0VUX0NPUkVgLiBXYWl0IGEgbWludXRlLCBgVkhPU1RfU0NTSWAgZGVwZW5kcyBvbiBib3RoIGBUQVJHRVRfQ09SRWAgYW5kIGBFVkVOVEZEYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRob3NlIGRlcGVuZGVuY2llcyBhcmUgbWV0LiBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGlmIGBFVkVOVEZEYCBpcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGF0JiMzOTtzIGEgY3JpdGljYWwgZGVwZW5kZW5jeSBJIG5lZWQgdG8gY29uZmlybS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEVWRU5URkQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE4ODE9Y29uZmlnIFRJTUVSRkRcbi0tXG5pbml0L0tjb25maWctMTg4OS1cbmluaXQvS2NvbmZpZzoxODkwOmNvbmZpZyBFVkVOVEZEXG5pbml0L0tjb25maWctMTg5MS1cdGJvb2wgXCYjMzQ7RW5hYmxlIGV2ZW50ZmQoKSBzeXN0ZW0gY2FsbFwmIzM0OyBpZiBFWFBFUlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ3OAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDI2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25maWd1cmF0aW9uIGFuZCBSZWFjaGFiaWxpdHkgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgYFZIT1NUX1NDU0lgLiBZZXMsIGBFVkVOVEZEYCBpcyBkZWZpbml0ZWx5IGEga2V5IGNvbmZpZ3VyYXRpb24gaGVyZTsgaXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jay4gSXQmIzM5O3MgdXN1YWxseSBlbmFibGVkIGJ5IGRlZmF1bHQsIGJ1dCBpdCYjMzk7cyBhbHdheXMgYSBnb29kIHByYWN0aWNlIHRvIGV4cGxpY2l0bHkgaW5jbHVkZSBpdCwganVzdCB0byBiZSBzdXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgYFZIT1NUX1NDU0lgLCBgVEFSR0VUX0NPUkVgLCBhbmQgYEVWRU5URkRgIHNob3VsZCBiZSBlbmFibGVkLCBidXQgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMuCgpBaCwgcmlnaHQsIGBWSE9TVF9TQ1NJYCByZWxpZXMgb24gYFRBUkdFVF9DT1JFYCBhbmQgYEVWRU5URkRgLiBBbmQgYFRBUkdFVF9DT1JFYCBpbiB0dXJuIHJlbGllcyBvbiBgQkxPQ0tgLiBPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBuZWVkaW5nIGBWSE9TVF9TQ1NJYCwgYFRBUkdFVF9DT1JFYCwgYEVWRU5URkRgLCBhbmQgYEJMT0NLYCBhbGwgZW5hYmxlZC4gTm8gc3VycHJpc2VzIHRoZXJlOyBgQkxPQ0tgIGlzIGEgcHJldHR5IHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24uCgpOb3csIEkgbmVlZCB0byBjb25zaWRlciBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2VzLiBMZXQmIzM5O3MgbG9vayBhdCBgdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc2AuIEkgc2VlIGl0JiMzOTtzIGEgbW9kdWxlIHBhcmFtZXRlciBjYWxsYmFjay4gVGhhdCBtZWFucyBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyByZWFjaGFibGUgd2hlbiB3cml0aW5nIHRvIGAvc3lzL21vZHVsZS92aG9zdF9zY3NpL3BhcmFtZXRlcnMvbWF4X2lvX3Zxc2Agb3IgdXBvbiBtb2R1bGUgbG9hZGluZy4gQW5kIHRoYXQmIzM5O3MgZXhhY3RseSB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IgLSBmdXp6ZXJzIGNhbiBhYnNvbHV0ZWx5IGludGVyYWN0IHdpdGggc3lzZnMgZmlsZXMuIFNvIHRoYXQmIzM5O3MgYSByZWFjaGFibGUgcGF0aC4KCk15IGZvY3VzIHNob3VsZCBiZSBvbiBgdmhvc3Rfc2NzaV9vcGVuYCwgYHZob3N0X3Njc2lfcmVsZWFzZWAsIGFuZCBvZiBjb3Vyc2UsIGB2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzYCBhcyBhcmVhcyBvZiBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eS4gSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhvc2UgY29uZmlnIGFzc3VtcHRpb25zIGFnYWluIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTE9DSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZy00LSNcbmJsb2NrL0tjb25maWc6NTptZW51Y29uZmlnIEJMT0NLXG5ibG9jay9LY29uZmlnLTYtICAgICAgIGJvb2wgXCYjMzQ7RW5hYmxlIHRoZSBibG9jayBsYXllclwmIzM0OyBpZiBFWFBFUlRcbi0tXG5ibG9jay9LY29uZmlnPTI3PWlmIEJMT0NLXG5ibG9jay9LY29uZmlnLTI4LVxuYmxvY2svS2NvbmZpZzoyOTpjb25maWcgQkxPQ0tfTEVHQUNZX0FVVE9MT0FEXG5ibG9jay9LY29uZmlnLTMwLVx0Ym9vbCBcJiMzNDtMZWdhY3kgYXV0b2xvYWRpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmJsb2NrL0tjb25maWc9MjE0PWNvbmZpZyBCTEtfUE1cbi0tXG5ibG9jay9LY29uZmlnLTIxNy0jIGRvIG5vdCB1c2UgaW4gbmV3IGNvZGVcbmJsb2NrL0tjb25maWc6MjE4OmNvbmZpZyBCTE9DS19IT0xERVJfREVQUkVDQVRFRFxuYmxvY2svS2NvbmZpZy0yMTktXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzMTUKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBCTE9DS2AgY29uZmlnLCB3aGljaCBJIHVuZGVyc3RhbmQgaXMgYSBjb3JlIGNvbmZpZ3VyYXRpb24gc2V0dGluZy4gTXkgbmV4dCB0aG91Z2h0IGlzLCBhcmUgdGhlcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgYmV5b25kIHRoZSBpbW1lZGlhdGUgY29uZmlndXJhdGlvbj8gTGV0JiMzOTtzIGRpZyBpbiBhIGJpdCBmdXJ0aGVyLgoKUmlnaHQsIGBWSE9TVF9TQ1NJYCBzZWxlY3RzIGJvdGggYFZIT1NUYCBhbmQgYFNHX1BPT0xgLiBHb3QgaXQuIEFuZCBgVEFSR0VUX0NPUkVgIHNlbGVjdHMgYSB3aG9sZSBidW5jaCBvZiB0aGluZ3M6IGBDT05GSUdGU19GU2AsIGBDUkNfVDEwRElGYCwgYFNDU0lfQ09NTU9OYCwgYW5kIGBTR0xfQUxMT0NgLiBXZSBjYW4gcHJvYmFibHkgc2tpcCBsaXN0aW5nIGFsbCB0aGUgKnNlbGVjdGVkKiBjb25maWdzOyB0aGF0IGZlZWxzIHJlZHVuZGFudCwgcmlnaHQ/IEl0JiMzOTtzIHRoZSBgZGVwZW5kcyBvbmAgY2xhdXNlcyB0aGF0IHJlYWxseSB0ZWxsIHRoZSBzdG9yeSBoZXJlLgoKVGhlcmVmb3JlLCBhcyBmYXIgYXMgdGhlICpwcmltYXJ5KiBjb25maWdzIHdlJiMzOTtyZSBjb25jZXJuZWQgYWJvdXQsIHdlJiMzOTtyZSByZWFsbHkgbG9va2luZyBhdCBgVkhPU1RfU0NTSWAgYW5kIGBUQVJHRVRfQ09SRWAuIFdlJiMzOTt2ZSBnb3R0ZW4gdG8gdGhlIGJvdHRvbSBvZiB0aGUgZGVwZW5kZW5jeSBjaGFpbi4KClRpbWUgdG8gbW92ZSBvbnRvIGxvb2tpbmcgYXQgaG93IHRoZXNlIHdvcmsuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgYHZob3N0X3Njc2lfc2V0X21heF9pb192cXNgIGluIGBkcml2ZXJzL3Zob3N0L3Njc2kuY2AgYW5kIGZpZ3VyZSBvdXQgaG93IHRoZXNlIGNvbmZpZ3MgYXJlIGFjdHVhbGx5IGltcGxlbWVudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9zY3NpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9zY3NpLmM9MjEyPXN0YXRpYyB1bnNpZ25lZCB2aG9zdF9zY3NpX21heF9pb192cXMgPSAxMjg7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMTMtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyMTQ6c3RhdGljIGludCB2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzKGNvbnN0IGNoYXIgKnZhbCxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIxNS1cdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjIwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyB2aG9zdF9zY3NpX21heF9pb192cXNfb3AgPSB7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyMjE6XHQuc2V0ID0gdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3ZxcyxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIyMi1cdC5nZXQgPSBwYXJhbV9nZXRfdWludCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk4NwoJCQkJCQkJb3V0cHV0OiAxNTQKCQkJCQkJCXRob3VnaHRzOiAzMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyBpbiB0aGUgdmhvc3Qtc2NzaSBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgdmhvc3Qtc2NzaSBjb2RlLCBhbmQgdGhlIGZpcnN0IHRoaW5nIEkgbm90aWNlIGlzIHRoYXQgYHZob3N0X3Njc2lfb3BlbmAgYW5kIGB2aG9zdF9zY3NpX3JlbGVhc2VgIGFyZSBzdGF0aWMgZnVuY3Rpb25zLiBTdGF0aWMgZnVuY3Rpb25zIGFyZSBhbHdheXMgc29tZXRoaW5nIEkgcGF5IGF0dGVudGlvbiB0byBpbiB0aGlzIGNvbnRleHQuIENoZWNraW5nIHRob3NlIGZ1bmN0aW9ucywgSSBzZWUgdGhleSBhcmUsIGluZGVlZCwgc3RhdGljLCBidXQgdGhleSBhcmUgYWxzbyB1c2VkIGFzIGNhbGxiYWNrcyB3aXRoaW4gdGhlIGBmaWxlX29wZXJhdGlvbnNgIHN0cnVjdHVyZS4gVGhhdCBtYWtlcyB0aGVtIGFjY2Vzc2libGUgdGhyb3VnaCBvcGVuaW5nIGAvZGV2L3Zob3N0LXNjc2lgLCB3aGljaCBpcyBhIGtleSBkZXRhaWwuIEJlY2F1c2UgdGhleSBhcmVuJiMzOTt0IGlubGluZWQg4oCTIHRoZXkmIzM5O3JlIHBhc3NlZCBhcyBmdW5jdGlvbiBwb2ludGVycyDigJMgdGhleSBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIFBlcmZlY3QhIFRoYXQgbWFrZXMgdGhlbSBkaXJlY3RseSB0YXJnZXRhYmxlIGJ5IGZ1enplcnMuCgpOZXh0LCBJIG5lZWRlZCB0byBmaWd1cmUgb3V0IGlmIGB2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzYCB3YXMgaW5saW5lZCBvciBub3QuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWxzbyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLCB0aGlzIHRpbWUgdG8gYGtlcm5lbF9wYXJhbV9vcHNgLCBtZWFuaW5nIGl0JiMzOTtzICpub3QqIGlubGluZWQgZWl0aGVyLiBUaGF0IG1lYW5zIGl0IGNhbiBhbHNvIGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcy4KClRoZXJlZm9yZSwgdGhlIGtleSBzeW1ib2xzIEkgc2hvdWxkIGJlIGZvY3VzaW5nIG9uIGZvciBwb3RlbnRpYWwgZnV6emluZyBlZmZvcnRzIGFyZToKCiogICBgdmhvc3Rfc2NzaV9vcGVuYAoqICAgYHZob3N0X3Njc2lfcmVsZWFzZWAKKiAgIGB2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzYAoKQ29uc2lkZXJpbmcgdGhlIGNvbmZpZ3VyYXRpb24sIGBWSE9TVF9TQ1NJYCBhbmQgYFRBUkdFVF9DT1JFYCBzZWVtIGVzc2VudGlhbC4KClRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggYXBwZWFycyB0byBpbnZvbHZlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIHZob3N0LXNjc2kgZHJpdmVyJiMzOTtzIGluaXRpYWxpemF0aW9uIGFuZCB0ZWFyZG93biBwcm9jZWR1cmVzLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBpcyBjaGFuZ2luZyBob3cgdGhlIGBtYXhfaW9fdnFzYCBtb2R1bGUgcGFyYW1ldGVyIGlzIGhhbmRsZWQgYW5kIGhvdyB2aXJ0cXVldWUgbWVtb3J5IGlzIGFsbG9jYXRlZCBhbmQgZGVhbGxvY2F0ZWQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMsIGFuZCBjcml0aWNhbGx5LCB0aGVzZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgdGhyb3VnaCB0aGUgYC9kZXYvdmhvc3Qtc2NzaWAgb3Blbi9yZWxlYXNlIG9wZXJhdGlvbnMgYW5kIHRoZSBzeXNmcyBtb2R1bGUgcGFyYW1ldGVycy4gR2l2ZW4gdGhhdCwgdGhlIG5ldyBiZWhhdmlvciBoZXJlIGlzIGNlcnRhaW5seSBzb21ldGhpbmcgSSB3b3VsZCB3YW50IHRvIHRhcmdldCB3aXRoIGZ1enppbmcuCgpMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkhPU1RfU0NTSSYjMzQ7LAogICAgJiMzNDtUQVJHRVRfQ09SRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zob3N0X3Njc2lfb3BlbiYjMzQ7LAogICAgJiMzNDt2aG9zdF9zY3NpX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7dmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3ZxcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIHRlYXJkb3duIG9mIHRoZSB2aG9zdC1zY3NpIGRyaXZlciwgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGhvdyB0aGUgYG1heF9pb192cXNgIG1vZHVsZSBwYXJhbWV0ZXIgaXMgaGFuZGxlZCBhbmQgaG93IG1lbW9yeSBpcyBhbGxvY2F0ZWQvZnJlZWQgZm9yIHZpcnRxdWV1ZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMgKHZpYSBgL2Rldi92aG9zdC1zY3NpYCBvcGVuL3JlbGVhc2UgYW5kIHN5c2ZzIG1vZHVsZSBwYXJhbWV0ZXJzKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkhPU1RfU0NTSSYjMzQ7LAogICAgJiMzNDtUQVJHRVRfQ09SRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zob3N0X3Njc2lfb3BlbiYjMzQ7LAogICAgJiMzNDt2aG9zdF9zY3NpX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7dmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3ZxcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIHRlYXJkb3duIG9mIHRoZSB2aG9zdC1zY3NpIGRyaXZlciwgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGhvdyB0aGUgYG1heF9pb192cXNgIG1vZHVsZSBwYXJhbWV0ZXIgaXMgaGFuZGxlZCBhbmQgaG93IG1lbW9yeSBpcyBhbGxvY2F0ZWQvZnJlZWQgZm9yIHZpcnRxdWV1ZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMgKHZpYSBgL2Rldi92aG9zdC1zY3NpYCBvcGVuL3JlbGVhc2UgYW5kIHN5c2ZzIG1vZHVsZSBwYXJhbWV0ZXJzKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjMwOjQ4LjYyNTkyOTUxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUzNTc1MjA0MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkhPU1RfU0NTSVwiLFxuICAgIFwiVEFSR0VUX0NPUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aG9zdF9zY3NpX29wZW5cIixcbiAgICBcInZob3N0X3Njc2lfcmVsZWFzZVwiLFxuICAgIFwidmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgdGVhcmRvd24gb2YgdGhlIHZob3N0LXNjc2kgZHJpdmVyLCBzcGVjaWZpY2FsbHkgY2hhbmdpbmcgaG93IHRoZSBgbWF4X2lvX3Zxc2AgbW9kdWxlIHBhcmFtZXRlciBpcyBoYW5kbGVkIGFuZCBob3cgbWVtb3J5IGlzIGFsbG9jYXRlZC9mcmVlZCBmb3IgdmlydHF1ZXVlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29kZSBwYXRocyAodmlhIGAvZGV2L3Zob3N0LXNjc2lgIG9wZW4vcmVsZWFzZSBhbmQgc3lzZnMgbW9kdWxlIHBhcmFtZXRlcnMpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjozMDo0OC42MjU5Mzg3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTczNTYxMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0NzViMTQ0MTBhNzAzYjdmNTE1OGJmNzI3OGZlNjRjYmM5NjUzNjAzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDIgMDY6MzA6NDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9zY3NpLmMgYi9kcml2ZXJzL3Zob3N0L3Njc2kuY1xcbmluZGV4IDlhMTI1M2I5ZDhjNTAuLmMxMzhjMjljZTNkZDQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92aG9zdC9zY3NpLmNcXG4rKysgYi9kcml2ZXJzL3Zob3N0L3Njc2kuY1xcbkBAIC0yMTAsNyArMjEwLDIwIEBAIHN0YXRpYyBjb25zdCBpbnQgdmhvc3Rfc2NzaV9iaXRzW10gPSB7XFxuICNkZWZpbmUgVkhPU1RfU0NTSV9NQVhfRVZFTlRcXHQxMjhcXG4gXFxuIHN0YXRpYyB1bnNpZ25lZCB2aG9zdF9zY3NpX21heF9pb192cXMgPSAxMjg7XFxuLW1vZHVsZV9wYXJhbV9uYW1lZChtYXhfaW9fdnFzLCB2aG9zdF9zY3NpX21heF9pb192cXMsIHVpbnQsIDA2NDQpO1xcbitcXG4rc3RhdGljIGludCB2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzKGNvbnN0IGNoYXIgKnZhbCxcXG4rXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4re1xcbitcXHRyZXR1cm4gcGFyYW1fc2V0X3VpbnRfbWlubWF4KHZhbCwga3AsIDEsIFZIT1NUX1NDU0lfTUFYX0lPX1ZRKTtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIHZob3N0X3Njc2lfbWF4X2lvX3Zxc19vcCA9IHtcXG4rXFx0LnNldCA9IHZob3N0X3Njc2lfc2V0X21heF9pb192cXMsXFxuK1xcdC5nZXQgPSBwYXJhbV9nZXRfdWludCxcXG4rfTtcXG4rXFxuK21vZHVsZV9wYXJhbV9jYihtYXhfaW9fdnFzLCBcXHUwMDI2dmhvc3Rfc2NzaV9tYXhfaW9fdnFzX29wLFxcbitcXHRcXHRcXHUwMDI2dmhvc3Rfc2NzaV9tYXhfaW9fdnFzLCAwNjQ0KTtcXG4gTU9EVUxFX1BBUk1fREVTQyhtYXhfaW9fdnFzLCBcXFwiU2V0IHRoZSBtYXggbnVtYmVyIG9mIElPIHZpcnRxdWV1ZXMgYSB2aG9zdCBzY3NpIGRldmljZSBjYW4gc3VwcG9ydC4gVGhlIGRlZmF1bHQgaXMgMTI4LiBUaGUgbWF4IGlzIDEwMjQuXFxcIik7XFxuIFxcbiBzdHJ1Y3Qgdmhvc3Rfc2NzaV92aXJ0cXVldWUge1xcbkBAIC0yMjczLDI5ICsyMjg2LDIxIEBAIHN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxcbiBcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaV92aXJ0cXVldWUgKnN2cTtcXG4gXFx0c3RydWN0IHZob3N0X3Njc2kgKnZzO1xcbiBcXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICoqdnFzO1xcbi1cXHRpbnQgciA9IC1FTk9NRU0sIGksIG52cXMgPSB2aG9zdF9zY3NpX21heF9pb192cXM7XFxuK1xcdGludCByID0gLUVOT01FTSwgaSwgbnZxcztcXG4gXFxuIFxcdHZzID0ga3Z6YWxsb2Nfb2JqKCp2cyk7XFxuIFxcdGlmICghdnMpXFxuIFxcdFxcdGdvdG8gZXJyX3ZzO1xcbiBcXHR2cy1cXHUwMDNlaW5saW5lX3NnX2NudCA9IHZob3N0X3Njc2lfaW5saW5lX3NnX2NudDtcXG4gXFxuLVxcdGlmIChudnFzIFxcdTAwM2UgVkhPU1RfU0NTSV9NQVhfSU9fVlEpIHtcXG4tXFx0XFx0cHJfZXJyKFxcXCJJbnZhbGlkIG1heF9pb192cXMgb2YgJWQuIFVzaW5nICVkLlxcXFxuXFxcIiwgbnZxcyxcXG4tXFx0XFx0ICAgICAgIFZIT1NUX1NDU0lfTUFYX0lPX1ZRKTtcXG4tXFx0XFx0bnZxcyA9IFZIT1NUX1NDU0lfTUFYX0lPX1ZRO1xcbi1cXHR9IGVsc2UgaWYgKG52cXMgPT0gMCkge1xcbi1cXHRcXHRwcl9lcnIoXFxcIkludmFsaWQgbWF4X2lvX3ZxcyBvZiAlZC4gVXNpbmcgMS5cXFxcblxcXCIsIG52cXMpO1xcbi1cXHRcXHRudnFzID0gMTtcXG4tXFx0fVxcbi1cXHRudnFzICs9IFZIT1NUX1NDU0lfVlFfSU87XFxuK1xcdG52cXMgPSB2aG9zdF9zY3NpX21heF9pb192cXMgKyBWSE9TVF9TQ1NJX1ZRX0lPO1xcbiBcXG4gXFx0dnMtXFx1MDAzZW9sZF9pbmZsaWdodCA9IGttYWxsb2Nfb2JqcygqdnMtXFx1MDAzZW9sZF9pbmZsaWdodCwgbnZxcyxcXG4gXFx0XFx0XFx0XFx0XFx0R0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xcbiBcXHRpZiAoIXZzLVxcdTAwM2VvbGRfaW5mbGlnaHQpXFxuIFxcdFxcdGdvdG8gZXJyX2luZmxpZ2h0O1xcbiBcXG4tXFx0dnMtXFx1MDAzZXZxcyA9IGttYWxsb2Nfb2JqcygqdnMtXFx1MDAzZXZxcywgbnZxcywgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xcbitcXHR2cy1cXHUwMDNldnFzID0ga3Z6YWxsb2Nfb2JqcygqdnMtXFx1MDAzZXZxcywgbnZxcyk7XFxuIFxcdGlmICghdnMtXFx1MDAzZXZxcylcXG4gXFx0XFx0Z290byBlcnJfdnFzO1xcbiBcXG5AQCAtMjMzMSw3ICsyMzM2LDcgQEAgc3RhdGljIGludCB2aG9zdF9zY3NpX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXFxuIFxcdHJldHVybiAwO1xcbiBcXG4gZXJyX2xvY2FsX3ZxczpcXG4tXFx0a2ZyZWUodnMtXFx1MDAzZXZxcyk7XFxuK1xcdGt2ZnJlZSh2cy1cXHUwMDNldnFzKTtcXG4gZXJyX3ZxczpcXG4gXFx0a2ZyZWUodnMtXFx1MDAzZW9sZF9pbmZsaWdodCk7XFxuIGVycl9pbmZsaWdodDpcXG5AQCAtMjM1Miw3ICsyMzU3LDcgQEAgc3RhdGljIGludCB2aG9zdF9zY3NpX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXFxuIFxcdHZob3N0X2Rldl9zdG9wKFxcdTAwMjZ2cy1cXHUwMDNlZGV2KTtcXG4gXFx0dmhvc3RfZGV2X2NsZWFudXAoXFx1MDAyNnZzLVxcdTAwM2VkZXYpO1xcbiBcXHRrZnJlZSh2cy1cXHUwMDNlZGV2LnZxcyk7XFxuLVxcdGtmcmVlKHZzLVxcdTAwM2V2cXMpO1xcbitcXHRrdmZyZWUodnMtXFx1MDAzZXZxcyk7XFxuIFxcdGtmcmVlKHZzLVxcdTAwM2VvbGRfaW5mbGlnaHQpO1xcbiBcXHRrdmZyZWUodnMpO1xcbiBcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MzA6NDguOTI0MzgwMjk1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDUwNTkwNjAyOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkhPU1RfU0NTSVwiLFxuICAgIFwiVEFSR0VUX0NPUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aG9zdF9zY3NpX29wZW5cIixcbiAgICBcInZob3N0X3Njc2lfcmVsZWFzZVwiLFxuICAgIFwidmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgdGVhcmRvd24gb2YgdGhlIHZob3N0LXNjc2kgZHJpdmVyLCBzcGVjaWZpY2FsbHkgY2hhbmdpbmcgaG93IHRoZSBgbWF4X2lvX3Zxc2AgbW9kdWxlIHBhcmFtZXRlciBpcyBoYW5kbGVkIGFuZCBob3cgbWVtb3J5IGlzIGFsbG9jYXRlZC9mcmVlZCBmb3IgdmlydHF1ZXVlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29kZSBwYXRocyAodmlhIGAvZGV2L3Zob3N0LXNjc2lgIG9wZW4vcmVsZWFzZSBhbmQgc3lzZnMgbW9kdWxlIHBhcmFtZXRlcnMpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NzViMTQ0MTBhNzAzYjdmNTE1OGJmNzI3OGZlNjRjYmM5NjUzNjAzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMiAwNjozMDo0NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3Qvc2NzaS5jIGIvZHJpdmVycy92aG9zdC9zY3NpLmNcbmluZGV4IDlhMTI1M2I5ZDhjNTAuLmMxMzhjMjljZTNkZDQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Zob3N0L3Njc2kuY1xuKysrIGIvZHJpdmVycy92aG9zdC9zY3NpLmNcbkBAIC0yMTAsNyArMjEwLDIwIEBAIHN0YXRpYyBjb25zdCBpbnQgdmhvc3Rfc2NzaV9iaXRzW10gPSB7XG4gI2RlZmluZSBWSE9TVF9TQ1NJX01BWF9FVkVOVFx0MTI4XG4gXG4gc3RhdGljIHVuc2lnbmVkIHZob3N0X3Njc2lfbWF4X2lvX3ZxcyA9IDEyODtcbi1tb2R1bGVfcGFyYW1fbmFtZWQobWF4X2lvX3Zxcywgdmhvc3Rfc2NzaV9tYXhfaW9fdnFzLCB1aW50LCAwNjQ0KTtcbitcbitzdGF0aWMgaW50IHZob3N0X3Njc2lfc2V0X21heF9pb192cXMoY29uc3QgY2hhciAqdmFsLFxuK1x0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbit7XG4rXHRyZXR1cm4gcGFyYW1fc2V0X3VpbnRfbWlubWF4KHZhbCwga3AsIDEsIFZIT1NUX1NDU0lfTUFYX0lPX1ZRKTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIHZob3N0X3Njc2lfbWF4X2lvX3Zxc19vcCA9IHtcbitcdC5zZXQgPSB2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzLFxuK1x0LmdldCA9IHBhcmFtX2dldF91aW50LFxuK307XG4rXG4rbW9kdWxlX3BhcmFtX2NiKG1heF9pb192cXMsIFx1MDAyNnZob3N0X3Njc2lfbWF4X2lvX3Zxc19vcCxcbitcdFx0XHUwMDI2dmhvc3Rfc2NzaV9tYXhfaW9fdnFzLCAwNjQ0KTtcbiBNT0RVTEVfUEFSTV9ERVNDKG1heF9pb192cXMsIFwiU2V0IHRoZSBtYXggbnVtYmVyIG9mIElPIHZpcnRxdWV1ZXMgYSB2aG9zdCBzY3NpIGRldmljZSBjYW4gc3VwcG9ydC4gVGhlIGRlZmF1bHQgaXMgMTI4LiBUaGUgbWF4IGlzIDEwMjQuXCIpO1xuIFxuIHN0cnVjdCB2aG9zdF9zY3NpX3ZpcnRxdWV1ZSB7XG5AQCAtMjI3MywyOSArMjI4NiwyMSBAQCBzdGF0aWMgaW50IHZob3N0X3Njc2lfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcbiBcdHN0cnVjdCB2aG9zdF9zY3NpX3ZpcnRxdWV1ZSAqc3ZxO1xuIFx0c3RydWN0IHZob3N0X3Njc2kgKnZzO1xuIFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqKnZxcztcbi1cdGludCByID0gLUVOT01FTSwgaSwgbnZxcyA9IHZob3N0X3Njc2lfbWF4X2lvX3ZxcztcbitcdGludCByID0gLUVOT01FTSwgaSwgbnZxcztcbiBcbiBcdHZzID0ga3Z6YWxsb2Nfb2JqKCp2cyk7XG4gXHRpZiAoIXZzKVxuIFx0XHRnb3RvIGVycl92cztcbiBcdHZzLVx1MDAzZWlubGluZV9zZ19jbnQgPSB2aG9zdF9zY3NpX2lubGluZV9zZ19jbnQ7XG4gXG4tXHRpZiAobnZxcyBcdTAwM2UgVkhPU1RfU0NTSV9NQVhfSU9fVlEpIHtcbi1cdFx0cHJfZXJyKFwiSW52YWxpZCBtYXhfaW9fdnFzIG9mICVkLiBVc2luZyAlZC5cXG5cIiwgbnZxcyxcbi1cdFx0ICAgICAgIFZIT1NUX1NDU0lfTUFYX0lPX1ZRKTtcbi1cdFx0bnZxcyA9IFZIT1NUX1NDU0lfTUFYX0lPX1ZRO1xuLVx0fSBlbHNlIGlmIChudnFzID09IDApIHtcbi1cdFx0cHJfZXJyKFwiSW52YWxpZCBtYXhfaW9fdnFzIG9mICVkLiBVc2luZyAxLlxcblwiLCBudnFzKTtcbi1cdFx0bnZxcyA9IDE7XG4tXHR9XG4tXHRudnFzICs9IFZIT1NUX1NDU0lfVlFfSU87XG4rXHRudnFzID0gdmhvc3Rfc2NzaV9tYXhfaW9fdnFzICsgVkhPU1RfU0NTSV9WUV9JTztcbiBcbiBcdHZzLVx1MDAzZW9sZF9pbmZsaWdodCA9IGttYWxsb2Nfb2JqcygqdnMtXHUwMDNlb2xkX2luZmxpZ2h0LCBudnFzLFxuIFx0XHRcdFx0XHRHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7XG4gXHRpZiAoIXZzLVx1MDAzZW9sZF9pbmZsaWdodClcbiBcdFx0Z290byBlcnJfaW5mbGlnaHQ7XG4gXG4tXHR2cy1cdTAwM2V2cXMgPSBrbWFsbG9jX29ianMoKnZzLVx1MDAzZXZxcywgbnZxcywgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xuK1x0dnMtXHUwMDNldnFzID0ga3Z6YWxsb2Nfb2JqcygqdnMtXHUwMDNldnFzLCBudnFzKTtcbiBcdGlmICghdnMtXHUwMDNldnFzKVxuIFx0XHRnb3RvIGVycl92cXM7XG4gXG5AQCAtMjMzMSw3ICsyMzM2LDcgQEAgc3RhdGljIGludCB2aG9zdF9zY3NpX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXG4gXHRyZXR1cm4gMDtcbiBcbiBlcnJfbG9jYWxfdnFzOlxuLVx0a2ZyZWUodnMtXHUwMDNldnFzKTtcbitcdGt2ZnJlZSh2cy1cdTAwM2V2cXMpO1xuIGVycl92cXM6XG4gXHRrZnJlZSh2cy1cdTAwM2VvbGRfaW5mbGlnaHQpO1xuIGVycl9pbmZsaWdodDpcbkBAIC0yMzUyLDcgKzIzNTcsNyBAQCBzdGF0aWMgaW50IHZob3N0X3Njc2lfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcbiBcdHZob3N0X2Rldl9zdG9wKFx1MDAyNnZzLVx1MDAzZWRldik7XG4gXHR2aG9zdF9kZXZfY2xlYW51cChcdTAwMjZ2cy1cdTAwM2VkZXYpO1xuIFx0a2ZyZWUodnMtXHUwMDNlZGV2LnZxcyk7XG4tXHRrZnJlZSh2cy1cdTAwM2V2cXMpO1xuK1x0a3ZmcmVlKHZzLVx1MDAzZXZxcyk7XG4gXHRrZnJlZSh2cy1cdTAwM2VvbGRfaW5mbGlnaHQpO1xuIFx0a3ZmcmVlKHZzKTtcbiBcdHJldHVybiAwO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MzA6NDguOTI0MzgyMDM1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcyNTI3NDY1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZob3N0IFNDU0kgRHJpdmVyIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIGBkcml2ZXJzL3Zob3N0L3Njc2kuY2AgZmlsZS4gSXQgc2VlbXMgdG8gYmUgcmV3b3JraW5nIGhvdyB0aGUgYG1heF9pb192cXNgIG1vZHVsZSBwYXJhbWV0ZXIgaXMgbWFuYWdlZC4gVGhleSdyZSBzd2l0Y2hpbmcgdG8gYG1vZHVsZV9wYXJhbV9jYmAgYW5kIGBwYXJhbV9zZXRfdWludF9taW5tYXhgLCB3aGljaCBpcyBhIG1vcmUgcm9idXN0IGFwcHJvYWNoLiBBbmQsIGZ1bmN0aW9uYWxseSwgdGhleSd2ZSByZXBsYWNlZCB0aGUgb2xkIGBrbWFsbG9jX29ianNgIHdpdGggYGt2emFsbG9jX29ianNgIGZvciBgdnMtXHUwMDNldnFzYCBhbmQgdGhlIGFjY29tcGFueWluZyBga2ZyZWVgIHRvIGBrdmZyZWVgLiBBbGwgcGVyZmVjdGx5IGFjY2VwdGFibGUgZnJvbSBhIGtlcm5lbCBkZXZlbG9wbWVudCBwZXJzcGVjdGl2ZS5cblxuTm93LCBteSBwcmltYXJ5IGludGVyZXN0IGlzLCBvZiBjb3Vyc2UsIHdoZXRoZXIgdGhpcyBvcGVucyBhbnkgbmV3IGZ1enppbmcgYXZlbnVlcy4gQW5kIGZyb20gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgdmhvc3QgYXJjaGl0ZWN0dXJlLCB0aGlzIGRyaXZlciBfc2hvdWxkXyBiZSBmdXp6YWJsZS4gVGhlIGB2aG9zdC1zY3NpYCBkcml2ZXIsIGFzIGEgdmlydHVhbCBob3N0IGRyaXZlciwgcHJvdmlkZXMgYSBjaGFyYWN0ZXIgZGV2aWNlLCBgL2Rldi92aG9zdC1zY3NpYC4gVGhhdCdzIGEgaHVnZSBjbHVlISBDaGFyYWN0ZXIgZGV2aWNlcywgZXNwZWNpYWxseSBvbmVzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBhcmUgYWxtb3N0IGFsd2F5cyBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLiBXZSBjYW4gaW50ZXJhY3Qgd2l0aCBpdCB1c2luZyBpb2N0bHMsIHNvIHRoYXQncyBhbm90aGVyIGltcG9ydGFudCBwb2ludC5cblxuTGV0J3MgcXVpY2tseSBjaGVjayB0aGUgY29uZmlndXJhdGlvbi4gSSB3YW50IHRvIGNvbmZpcm0gdGhhdCBgZHJpdmVycy92aG9zdC9zY3NpLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19WSE9TVF9TQ1NJYCBpcyBlbmFibGVkLiBJZiBpdCBpcywgdGhlbiB0aGUgZHJpdmVyIGlzIHByZXNlbnQsIGFuZCB3ZSBjYW4gdGFyZ2V0IGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDE5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MzA6NTMuNjQ5NjYwMDczWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODk1MzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlZIT1NUX1NDU0lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L01ha2VmaWxlPTM9dmhvc3RfbmV0LXkgOj0gbmV0Lm9cXG5kcml2ZXJzL3Zob3N0L01ha2VmaWxlLTQtXFxuZHJpdmVycy92aG9zdC9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19WSE9TVF9TQ1NJKSArPSB2aG9zdF9zY3NpLm9cXG5kcml2ZXJzL3Zob3N0L01ha2VmaWxlLTYtdmhvc3Rfc2NzaS15IDo9IHNjc2kub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjozMDo1My42OTQ1NjAwMDJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDA2NTQ2OTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBDT05GSUdfVkhPU1RfU0NTSWAgRGVwZW5kZW5jaWVzKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byBgQ09ORklHX1ZIT1NUX1NDU0lgLiBHaXZlbiBteSBleHBlcmllbmNlIHdpdGggdGhlIHZob3N0IHN1YnN5c3RlbSwgSSBpbW1lZGlhdGVseSB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgaW50ZXJhY3Rpb25zIOKAkyB3aGF0IG90aGVyIGtlcm5lbCBjb21wb25lbnRzIGFyZSAqcmVxdWlyZWQqIGZvciBgQ09ORklHX1ZIT1NUX1NDU0lgIHRvIGV2ZW4gZnVuY3Rpb24/IElzIGl0IHN0cmljdGx5IHZob3N0IGNvcmUsIG9yIGRvZXMgaXQgcmVhY2ggaW50byBhcmVhcyBsaWtlIHRoZSBTQ1NJIHN1YnN5c3RlbSBkaXJlY3RseT8gSSBuZWVkIHRvIGNoZWNrIGZvciB0aGUgb2J2aW91cyBjdWxwcml0cywgb2YgY291cnNlOiB2aG9zdC1uZXQsIHZob3N0LWJsaywgYW5kIGFzc29jaWF0ZWQgZGV2aWNlIGRyaXZlcnMgdGhhdCB3b3VsZCB0eXBpY2FsbHkgaW50ZXJmYWNlIHdpdGggdmhvc3QuIEJ1dCBJIGFsc28gbmVlZCB0byBiZSBjZXJ0YWluIGFib3V0IHRoZSBpbnRyaWNhY2llcyBvZiB0aGUgU0NTSSBsYXllciBhbmQgd2hldGhlciBhbnl0aGluZyB0aGVyZSB3b3VsZCBpbnRyb2R1Y2UgaW50ZXJkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBrbm93IHRoZSBlbnRpcmUgc3RhY2sgc28gSSBjYW4gYmVzdCBjb25maWd1cmUgdGhlIGVudmlyb25tZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjYwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MzA6NTYuNzAxMTA4NzU2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMzM5MTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWSE9TVF9TQ1NJXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L0tjb25maWc9MzQ9Y29uZmlnIFZIT1NUX05FVFxcbi0tXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTQ1LVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo0Njpjb25maWcgVkhPU1RfU0NTSVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy00Ny1cXHR0cmlzdGF0ZSBcXFwiVkhPU1RfU0NTSSBUQ00gZmFicmljIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MzA6NTYuNzQ0NDU0Nzc1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk1MDg5ODkwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGBWSE9TVF9TQ1NJYCBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgZHJpbGwgZG93biBpbnRvIHRoZSBrZXJuZWwncyBLY29uZmlnIHN5c3RlbSBhbmQgbG9jYXRlIHRoZSBwcmVjaXNlIGRlZmluaXRpb24gZm9yIGBWSE9TVF9TQ1NJYC4gTm8gaGFuZC13YXZpbmcgaGVyZSwgSSB3YW50IHRoZSBmdWxsLCB1bnZhcm5pc2hlZCB0cnV0aC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmV4YWN0bHkqIGhvdyB0aGlzIGZlYXR1cmUgaXMgZGVmaW5lZCwgd2hhdCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZSwgYW5kIHdoYXQgaW1wbGljYXRpb25zIGl0cyBwcmVzZW5jZSAob3IgYWJzZW5jZSkgY2FycmllcyB3aXRoaW4gdGhlIGJyb2FkZXIgdmhvc3QgZWNvc3lzdGVtLiBJJ20gdGhpbmtpbmcsIFwiSXMgaXQgYSBjb3JlIGJ1aWxkaW5nIGJsb2NrLCBhIG1vZHVsYXIgYWRkLW9uLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT9cIiBBIGRldGFpbGVkIGV4YW1pbmF0aW9uIG9mIGBkcml2ZXJzL3Zob3N0L0tjb25maWdgIGlzIHRoZSBiZXN0IHN0YXJ0aW5nIHBvaW50IHRvIGJ1aWxkIGEgdHJ1bHkgcm9idXN0IHVuZGVyc3RhbmRpbmcuIEl0J3MgdGhlIG9ubHkgd2F5IHRvIGJlIHN1cmUgSSBoYXZlIGFuIGFjY3VyYXRlIG1lbnRhbCBtb2RlbCBvZiBpdHMgcm9sZSBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTgzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MzA6NTkuNjk1MzU1NzNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDYsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDY6XFx0Y29uZmlnIFZIT1NUX1NDU0lcXG4gIDQ3OlxcdFxcdHRyaXN0YXRlIFxcXCJWSE9TVF9TQ1NJIFRDTSBmYWJyaWMgZHJpdmVyXFxcIlxcbiAgNDg6XFx0XFx0ZGVwZW5kcyBvbiBUQVJHRVRfQ09SRSBcXHUwMDI2XFx1MDAyNiBFVkVOVEZEXFxuICA0OTpcXHRcXHRzZWxlY3QgVkhPU1RcXG4gIDUwOlxcdFxcdHNlbGVjdCBTR19QT09MXFxuICA1MTpcXHRcXHRkZWZhdWx0IG5cXG4gIDUyOlxcdFxcdGhlbHBcXG4gIDUzOlxcdFxcdFNheSBNIGhlcmUgdG8gZW5hYmxlIHRoZSB2aG9zdF9zY3NpIFRDTSBmYWJyaWMgbW9kdWxlXFxuICA1NDpcXHRcXHRmb3IgdXNlIHdpdGggdmlydGlvLXNjc2kgZ3Vlc3RzXFxuICA1NTpcXHRcXG4gIDU2OlxcdGNvbmZpZyBWSE9TVF9WU09DS1xcbiAgNTc6XFx0XFx0dHJpc3RhdGUgXFxcInZob3N0IHZpcnRpby12c29jayBkcml2ZXJcXFwiXFxuICA1ODpcXHRcXHRkZXBlbmRzIG9uIFZTT0NLRVRTIFxcdTAwMjZcXHUwMDI2IEVWRU5URkRcXG4gIDU5OlxcdFxcdHNlbGVjdCBWSE9TVFxcbiAgNjA6XFx0XFx0c2VsZWN0IFZJUlRJT19WU09DS0VUU19DT01NT05cXG4gIDYxOlxcdFxcdGRlZmF1bHQgblxcbiAgNjI6XFx0XFx0aGVscFxcbiAgNjM6XFx0XFx0VGhpcyBrZXJuZWwgbW9kdWxlIGNhbiBiZSBsb2FkZWQgaW4gdGhlIGhvc3Qga2VybmVsIHRvIHByb3ZpZGUgQUZfVlNPQ0tcXG4gIDY0OlxcdFxcdHNvY2tldHMgZm9yIGNvbW11bmljYXRpbmcgd2l0aCBndWVzdHMuICBUaGUgZ3Vlc3RzIG11c3QgaGF2ZSB0aGVcXG4gIDY1OlxcdFxcdHZpcnRpb190cmFuc3BvcnQua28gZHJpdmVyIGxvYWRlZCB0byB1c2UgdGhlIHZpcnRpby12c29jayBkZXZpY2UuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjMwOjU5LjY5NTQxNzE3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk5MjI0MjQyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipUaGlua2luZyBUaHJvdWdoIFRhcmdldCBDb3JlIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UncmUgZGVhbGluZyB3aXRoIGRlcGVuZGVuY2llcywgYW5kIHRoZSBrZXkgb25lcyBhcmUgYFRBUkdFVF9DT1JFYCBhbmQgYEVWRU5URkRgLiBJbW1lZGlhdGVseSwgbXkgYnJhaW4gZ29lcyB0byB0aGUgY29uZmlndXJhdGlvbiBzcGFjZSwgd2hlcmUgYFRBUkdFVF9DT1JFYCBpcyBkZWZpbmVkIGFzIGBDT05GSUdfVEFSR0VUX0NPUkVgLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGBUQVJHRVRfQ09SRWAgaXMgbGlrZWx5IGEgaGlnaGVyLWxldmVsIGNvbmNlcHQgYW5kIGBDT05GSUdfVEFSR0VUX0NPUkVgIGlzIHRoZSBhY3R1YWwgY29uZmlndXJhdGlvbiBvcHRpb24gY29udHJvbGxpbmcgaXQuIE15IG5leHQgc3RlcD8gSSBuZWVkIHRvIGRlbHZlIGludG8gdGhlIGRlcGVuZGVuY2llcyBvZiBgVEFSR0VUX0NPUkVgIC0gdGhhdCdzIHdoZXJlIHRoZSByZWFsIGluc2lnaHRzIHdpbGwgYmUuIFdoYXQgb3RoZXIgbW9kdWxlcywgbGlicmFyaWVzLCBvciBzeXN0ZW0gY29tcG9uZW50cyByZWx5IG9uIGl0PyBXaGF0IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdGllZCB0byBpdHMgc3VjY2Vzc2Z1bCBvcGVyYXRpb24/IFVuZGVyc3RhbmRpbmcgdGhlc2UgcmVsYXRpb25zaGlwcyB3aWxsIGJlIGtleSB0byB0cm91Ymxlc2hvb3RpbmcsIG9wdGltaXppbmcsIG9yIGJ1aWxkaW5nIG9uIHRoaXMgY29yZSBjb21wb25lbnQuIFRpbWUgdG8gc3RhcnQgZGlnZ2luZyFcblxuXG4iLCJJbnB1dFRva2VucyI6NDUyMywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MzE6MDIuNjg3NjYxNjc0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mjc4MTE2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVEFSR0VUX0NPUkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy90YXJnZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3RhcmdldC9LY29uZmlnLTItXFxuZHJpdmVycy90YXJnZXQvS2NvbmZpZzozOm1lbnVjb25maWcgVEFSR0VUX0NPUkVcXG5kcml2ZXJzL3RhcmdldC9LY29uZmlnLTQtXFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgVGFyZ2V0IENvcmUgTW9kIChUQ00pIGFuZCBDb25maWdGUyBJbmZyYXN0cnVjdHVyZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MzE6MDIuNzMwNDUwNTUzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NTA0NzA3MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBUYXJnZXQgS2NvbmZpZyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIHRhcmdldCBkZXZpY2UgZHJpdmVycywgYW5kIHdoZXJlIGJldHRlciB0byBzdGFydCB0aGFuIHdpdGggdGhlIGBkcml2ZXJzL3RhcmdldC9LY29uZmlnYCBmaWxlPyBUaGlzIGlzIHRoZSBjZW50cmFsIGh1YiBmb3IgZGVmaW5pbmcgYW5kIG9yZ2FuaXppbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSB0YXJnZXQgZHJpdmVycy4gSSBrbm93IHRoaXMgZmlsZSBob2xkcyB0aGUga2V5IHRvIGhvdyB0aGVzZSBkcml2ZXJzIGFyZSBlbmFibGVkLCBkaXNhYmxlZCwgYW5kIGN1c3RvbWl6ZWQgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc3RydWN0dXJlLiBJJ20gaG9waW5nIHRvIGlkZW50aWZ5IHdoaWNoIGZlYXR1cmVzIGFyZSBhdmFpbGFibGUsIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBleGlzdCBiZXR3ZWVuIHRoZW0sIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGJyb2FkZXIgc3lzdGVtIGNvbmZpZ3VyYXRpb24uIEJhc2ljYWxseSwgSSdtIGxvb2tpbmcgZm9yIHRoZSBETkEgb2YgdGhlIHRhcmdldCBkcml2ZXIgY29uZmlndXJhdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgYmVnaW5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODQ4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MzE6MDUuNjgwOTIzODI4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdGFyZ2V0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdFxcbiAgIDM6XFx0bWVudWNvbmZpZyBUQVJHRVRfQ09SRVxcbiAgIDQ6XFx0XFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgVGFyZ2V0IENvcmUgTW9kIChUQ00pIGFuZCBDb25maWdGUyBJbmZyYXN0cnVjdHVyZVxcXCJcXG4gICA1OlxcdFxcdGRlcGVuZHMgb24gQkxPQ0tcXG4gICA2OlxcdFxcdHNlbGVjdCBDT05GSUdGU19GU1xcbiAgIDc6XFx0XFx0c2VsZWN0IENSQ19UMTBESUZcXG4gICA4OlxcdFxcdHNlbGVjdCBTQ1NJX0NPTU1PTlxcbiAgIDk6XFx0XFx0c2VsZWN0IFNHTF9BTExPQ1xcbiAgMTA6XFx0XFx0ZGVmYXVsdCBuXFxuICAxMTpcXHRcXHRoZWxwXFxuICAxMjpcXHRcXHRTYXkgWSBvciBNIGhlcmUgdG8gZW5hYmxlIHRoZSBUQ00gU3RvcmFnZSBFbmdpbmUgYW5kIENvbmZpZ0ZTIGVuYWJsZWRcXG4gIDEzOlxcdFxcdGNvbnRyb2wgcGF0aCBmb3IgdGFyZ2V0X2NvcmVfbW9kLiAgVGhpcyBpbmNsdWRlcyBidWlsdC1pbiBUQ00gUkFNRElTS1xcbiAgMTQ6XFx0XFx0c3Vic3lzdGVtIGxvZ2ljIGZvciB2aXJ0dWFsIExVTiAwIGFjY2Vzc1xcbiAgMTU6XFx0XFxuICAxNjpcXHRpZiBUQVJHRVRfQ09SRVxcbiAgMTc6XFx0XFxuICAxODpcXHRjb25maWcgVENNX0lCTE9DS1xcbiAgMTk6XFx0XFx0dHJpc3RhdGUgXFxcIlRDTS9JQkxPQ0sgU3Vic3lzdGVtIFBsdWdpbiBmb3IgTGludXgvQkxPQ0tcXFwiXFxuICAyMDpcXHRcXHRzZWxlY3QgQkxLX0RFVl9JTlRFR1JJVFlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MzE6MDUuNjgwOTg5NTg4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMzg1NzU3MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSB2aG9zdC1zY3NpIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIHRoaXMgcGF0Y2ggaXMgc3BlY2lmaWNhbGx5IGNvbmNlcm5lZCB3aXRoIGB2aG9zdC1zY3NpYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIHRoYXQgYFRBUkdFVF9DT1JFYCBpcyBhIGRlcGVuZGVuY3kgb2Ygc29tZXRoaW5nIGVsc2UsIGluIHRoaXMgY2FzZSwgYEJMT0NLYC4gVGhhdCdzIGltcG9ydGFudCB0byBrZWVwIGluIG1pbmQsIGFzIGFyZSBhbnkgcG90ZW50aWFsIGtub2NrLW9uIGVmZmVjdHMuIFRoZW4sIGBFVkVOVEZEYCBpcyB0eXBpY2FsbHkgZW5hYmxlZCwgc28gdGhhdCdzIGxpa2VseSBub3QgdGhlIHByaW1hcnkgY29uY2VybiBoZXJlLiBMb29rcyBsaWtlIGBWSE9TVF9TQ1NJYCBhbmQgYFRBUkdFVF9DT1JFYCBhcmUgdGhlIGtleSBjb25maWd1cmF0aW9ucyBpbiBwbGF5LlxuXG5UaGlzIHBhdGNoIGlzIG1vZGlmeWluZyBgdmhvc3Rfc2NzaV9vcGVuYCwgYHZob3N0X3Njc2lfcmVsZWFzZWAsIGFuZCBhbHNvIGB2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzYCwgd2hpY2ggaXMgYSBtb2R1bGUgcGFyYW1ldGVyIGNhbGxiYWNrLiBUaGUgYHZob3N0X3Njc2lfc2V0X21heF9pb192cXNgIGNoYW5nZSBtaWdodCBiZSBpbnRlcmVzdGluZyBpbiB0ZXJtcyBvZiBwYXJhbWV0ZXIgdHVuaW5nLCBidXQgYHZob3N0X3Njc2lfb3BlbmAgYW5kIGB2aG9zdF9zY3NpX3JlbGVhc2VgIGFyZSB0aGUgZnVuY3Rpb25zIHRvIHJlYWxseSBmb2N1cyBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRob3NlIGhhdmUgY2hhbmdlZCBhbmQgd2h5LiBOb3csIGxldCdzIHNlZSwgYHZob3N0X3Njc2lfb3BlbmAgaXMgdGhlIGAub3BlbmAgY2FsbGJhY2sgb2YgdGhlIHZob3N0IHNjc2kgbWlzYyBkZXZpY2UsIHNvIHRoYXQgbWFrZXMgYSBsb3Qgb2Ygc2Vuc2UsIEkgc2hvdWxkIGxvb2sgYXQgdGhhdCBmdW5jdGlvbiBuZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzMyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MzE6MTAuMDE5NTY3MjYxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTgyOTkzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aG9zdF9zY3NpX29wZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC9zY3NpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC9zY3NpLmM9MjIzMT1zdGF0aWMgaW50IHZob3N0X3Njc2lfc2V0X2ZlYXR1cmVzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgdTY0IGZlYXR1cmVzKVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjI4My1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyMjg0OnN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIyODUte1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjQ0Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF9zY3NpX2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDQ2LVxcdC5jb21wYXRfaW9jdGxcXHQ9IGNvbXBhdF9wdHJfaW9jdGwsXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjQ0NzpcXHQub3BlbiAgICAgICAgICAgPSB2aG9zdF9zY3NpX29wZW4sXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ0OC1cXHQubGxzZWVrXFx0XFx0PSBub29wX2xsc2VlayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MzE6MTAuMDYxNDAyMzFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE0NzY5MjgzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKklkZW50aWZ5aW5nIHRoZSBLZXkgQ2FsbGJhY2tzKipcblxuQWxyaWdodCwgdGhhdCdzIGl0LCBwbGFpbiBhcyBkYXkuIFRoZSBwZW5ueSdzIGRyb3BwZWQsIEkndmUgZ290IGl0LiBUaGUgY3J1Y2lhbCBjYWxsYmFjayBmb3IgaGFuZGxpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9yIFwib3BlblwiIG9wZXJhdGlvbiBpcywgdW5kZW5pYWJseSwgdGhlIGAub3BlbmAgY2FsbGJhY2suIFRoYXQncyB0aGUgZnVuY3Rpb24gd2UncmUgbG9va2luZyB0byB1bmRlcnN0YW5kIGFuZCB3b3JrIHdpdGguIEFuZCwgY29ubmVjdGluZyB0aGUgZG90cywgYHZob3N0X3Njc2lfcmVsZWFzZWAuLi4geWVzLCB0aGF0IG11c3QgYmUgdGhlIGNvcnJlc3BvbmRpbmcgYC5yZWxlYXNlYCBjYWxsYmFjay4gVGhvc2UgbmFtZXMsIHRoZSB3YXkgdGhleSdyZSB1c2VkLCBldmVyeXRoaW5nIHBvaW50cyB0byB0aGVtIGFzIHRoZSBrZXkgcGllY2VzIHRvIG1ha2luZyB0aGUgYXJjaGl0ZWN0dXJlIHdvcmsuIE5vdyBJIGNhbiBzdGFydCBidWlsZGluZyBteSBtZW50YWwgbW9kZWwgb2YgdGhlIGxpZmVjeWNsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA1NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjMxOjE0LjIwOTA5ODA3N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE3MzA5NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3Rfc2NzaV9yZWxlYXNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3Qvc2NzaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3Qvc2NzaS5jPTQxMT1zdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2xvZ193cml0ZShzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQyOC1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo0Mjk6c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9yZWxlYXNlX2NtZF9yZXMoc3RydWN0IHNlX2NtZCAqc2VfY21kKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQzMC17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00NzAtXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NDcxOnN0YXRpYyB2b2lkIHZob3N0X3Njc2lfcmVsZWFzZV90bWZfcmVzKHN0cnVjdCB2aG9zdF9zY3NpX3RtZiAqdG1mKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQ3Mi17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz00ODM9c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9kcm9wX2NtZHMoc3RydWN0IHZob3N0X3Njc2lfdmlydHF1ZXVlICpzdnEpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00ODktXFx0bGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjbWQsIHQsIGxsbm9kZSwgdHZjX2NvbXBsZXRpb25fbGlzdClcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo0OTA6XFx0XFx0dmhvc3Rfc2NzaV9yZWxlYXNlX2NtZF9yZXMoXFx1MDAyNmNtZC1cXHUwMDNldHZjX3NlX2NtZCk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNDkxLX1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00OTItXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NDkzOnN0YXRpYyB2b2lkIHZob3N0X3Njc2lfcmVsZWFzZV9jbWQoc3RydWN0IHNlX2NtZCAqc2VfY21kKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQ5NC17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz02OTk9c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9jb21wbGV0ZV9jbWRfd29yayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTc0Ny1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo3NDg6XFx0XFx0dmhvc3Rfc2NzaV9yZWxlYXNlX2NtZF9yZXMoc2VfY21kKTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy03NDktXFx0fVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MTI5Nz12aG9zdF9zY3NpX2hhbmRsZV92cShzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTQ3OC1cXHRcXHRcXHR2cV9lcnIodnEsIFxcXCJGYWlsZWQgdG8gYWxsb2MgcmVjdiBpb3ZzXFxcXG5cXFwiKTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxNDc5OlxcdFxcdFxcdHZob3N0X3Njc2lfcmVsZWFzZV9jbWRfcmVzKFxcdTAwMjZjbWQtXFx1MDAzZXR2Y19zZV9jbWQpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE0ODAtXFx0XFx0XFx0Z290byBlcnI7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNDg1LVxcdFxcdFxcdGlmICh1bmxpa2VseShyZXQpKSB7XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTQ4NjpcXHRcXHRcXHRcXHR2aG9zdF9zY3NpX3JlbGVhc2VfY21kX3JlcyhcXHUwMDI2Y21kLVxcdTAwM2V0dmNfc2VfY21kKTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNDg3LVxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTUwMS1cXHRcXHRcXHRcXHR2cV9lcnIodnEsIFxcXCJGYWlsZWQgdG8gbWFwIGlvdiB0byBzZ2xcXFxcblxcXCIpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE1MDI6XFx0XFx0XFx0XFx0dmhvc3Rfc2NzaV9yZWxlYXNlX2NtZF9yZXMoXFx1MDAyNmNtZC1cXHUwMDNldHZjX3NlX2NtZCk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTUwMy1cXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTE1NjE9c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV90bWZfcmVzcF93b3JrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTU3OC1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxNTc5OlxcdHZob3N0X3Njc2lfcmVsZWFzZV90bWZfcmVzKHRtZik7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTU4MC19XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0xNTgyPXN0YXRpYyB2b2lkIHZob3N0X3Njc2lfdG1mX2ZsdXNoX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTU5Mi1cXHRpZiAoIXZob3N0X3ZxX3dvcmtfcXVldWUodnEsIFxcdTAwMjZ0bWYtXFx1MDAzZXZ3b3JrKSlcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxNTkzOlxcdFxcdHZob3N0X3Njc2lfcmVsZWFzZV90bWZfcmVzKHRtZik7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTU5NC19XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0xNTk3PXZob3N0X3Njc2lfaGFuZGxlX3RtZihzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF9zY3NpX3RwZyAqdHBnLFxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTYzNS1cXHRcXHRcXHRwcl9lcnIoXFxcInZob3N0X3Njc2kgdG1mIGxvZyBhbGxvY2F0aW9uIGVycm9yXFxcXG5cXFwiKTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxNjM2OlxcdFxcdFxcdHZob3N0X3Njc2lfcmVsZWFzZV90bWZfcmVzKHRtZik7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTYzNy1cXHRcXHRcXHRnb3RvIHNlbmRfcmVqZWN0O1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTY0NC1cXHRcXHRcXHQgICAgICBUQVJHRVRfU0NGX0FDS19LUkVGKSBcXHUwMDNjIDApIHtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxNjQ1OlxcdFxcdHZob3N0X3Njc2lfcmVsZWFzZV90bWZfcmVzKHRtZik7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTY0Ni1cXHRcXHRnb3RvIHNlbmRfcmVqZWN0O1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjI4ND1zdGF0aWMgaW50IHZob3N0X3Njc2lfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIzNDctXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjM0ODpzdGF0aWMgaW50IHZob3N0X3Njc2lfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMzQ5LXtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTI0NDI9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmhvc3Rfc2NzaV9mb3BzID0ge1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0NDMtXFx0Lm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjQ0NDpcXHQucmVsZWFzZSAgICAgICAgPSB2aG9zdF9zY3NpX3JlbGVhc2UsXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ0NS1cXHQudW5sb2NrZWRfaW9jdGwgPSB2aG9zdF9zY3NpX2lvY3RsLFxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjkyNz1zdGF0aWMgY29uc3Qgc3RydWN0IHRhcmdldF9jb3JlX2ZhYnJpY19vcHMgdmhvc3Rfc2NzaV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yOTM1LVxcdC50cGdfY2hlY2tfcHJvdF9mYWJyaWNfb25seVxcdD0gdmhvc3Rfc2NzaV9jaGVja19wcm90X2ZhYnJpY19vbmx5LFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI5MzY6XFx0LnJlbGVhc2VfY21kXFx0XFx0XFx0PSB2aG9zdF9zY3NpX3JlbGVhc2VfY21kLFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI5MzctXFx0LmNoZWNrX3N0b3BfZnJlZVxcdFxcdD0gdmhvc3Rfc2NzaV9jaGVja19zdG9wX2ZyZWUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjMxOjE0LjI1MDgzNDY3NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTg4NjI1Mjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFZob3N0LVNDU0kgRHJpdmVyIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBjb3JlIGZ1bmN0aW9ucyBoZXJlOiBgdmhvc3Rfc2NzaV9vcGVuYCBhbmQgYHZob3N0X3Njc2lfcmVsZWFzZWAuIFRoZXkncmUgdGhlIGNyaXRpY2FsIGVudHJ5IGFuZCBleGl0IHBvaW50cyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGlzIGRyaXZlci4gSSdtIGFsc28gbm90aW5nIHRoYXQgYHZob3N0X3Njc2lfc2V0X21heF9pb192cXNgIGlzIGEgbW9kdWxlIHBhcmFtZXRlciBjYWxsYmFjayDigJMgdGhhdCdzIHBvdGVudGlhbGx5IGludGVyZXN0aW5nIGZyb20gYSBjb25maWd1cmF0aW9uIHBlcnNwZWN0aXZlLlxuXG5UaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBpcyBhIHdvcnRod2hpbGUgdGFyZ2V0IGZvciBmdXp6aW5nLiBHaXZlbiB0aGF0IGl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gYSBkcml2ZXIgYW5kLCBjcnVjaWFsbHksIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCB0aGUgYC9kZXYvdmhvc3Qtc2NzaWAgZGV2aWNlLCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyB5ZXMuIFVzZXItc3BhY2UgYWNjZXNzIGlzIGEgYmlnIHJlZCBmbGFnIGluIHRoZSBiZXN0IG9mIHdheXMgZm9yIGZ1enppbmc7IHRoZSBwb3RlbnRpYWwgZm9yIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGVycm9ycyBpcyBoaWdoZXIuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgZW5hYmxlZDogYFZIT1NUX1NDU0lgIGFuZCBgVEFSR0VUX0NPUkVgLiBXYWl0IGEgbWludXRlLCBgVkhPU1RfU0NTSWAgZGVwZW5kcyBvbiBib3RoIGBUQVJHRVRfQ09SRWAgYW5kIGBFVkVOVEZEYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRob3NlIGRlcGVuZGVuY2llcyBhcmUgbWV0LiBJJ2xsIHF1aWNrbHkgY2hlY2sgaWYgYEVWRU5URkRgIGlzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uIFRoYXQncyBhIGNyaXRpY2FsIGRlcGVuZGVuY3kgSSBuZWVkIHRvIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NDEsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MzE6MTguMjM5NDYyODA0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTY0MTEwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRVZFTlRGRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE4ODE9Y29uZmlnIFRJTUVSRkRcXG4tLVxcbmluaXQvS2NvbmZpZy0xODg5LVxcbmluaXQvS2NvbmZpZzoxODkwOmNvbmZpZyBFVkVOVEZEXFxuaW5pdC9LY29uZmlnLTE4OTEtXFx0Ym9vbCBcXFwiRW5hYmxlIGV2ZW50ZmQoKSBzeXN0ZW0gY2FsbFxcXCIgaWYgRVhQRVJUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjMxOjE4LjI4MTExMTQwNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDE4MjE5NDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNvbmZpZ3VyYXRpb24gYW5kIFJlYWNoYWJpbGl0eSBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgYFZIT1NUX1NDU0lgLiBZZXMsIGBFVkVOVEZEYCBpcyBkZWZpbml0ZWx5IGEga2V5IGNvbmZpZ3VyYXRpb24gaGVyZTsgaXQncyBhIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrLiBJdCdzIHVzdWFsbHkgZW5hYmxlZCBieSBkZWZhdWx0LCBidXQgaXQncyBhbHdheXMgYSBnb29kIHByYWN0aWNlIHRvIGV4cGxpY2l0bHkgaW5jbHVkZSBpdCwganVzdCB0byBiZSBzdXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgYFZIT1NUX1NDU0lgLCBgVEFSR0VUX0NPUkVgLCBhbmQgYEVWRU5URkRgIHNob3VsZCBiZSBlbmFibGVkLCBidXQgbGV0J3MganVzdCBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzLlxuXG5BaCwgcmlnaHQsIGBWSE9TVF9TQ1NJYCByZWxpZXMgb24gYFRBUkdFVF9DT1JFYCBhbmQgYEVWRU5URkRgLiBBbmQgYFRBUkdFVF9DT1JFYCBpbiB0dXJuIHJlbGllcyBvbiBgQkxPQ0tgLiBPa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IG5lZWRpbmcgYFZIT1NUX1NDU0lgLCBgVEFSR0VUX0NPUkVgLCBgRVZFTlRGRGAsIGFuZCBgQkxPQ0tgIGFsbCBlbmFibGVkLiBObyBzdXJwcmlzZXMgdGhlcmU7IGBCTE9DS2AgaXMgYSBwcmV0dHkgc3RhbmRhcmQgY29uZmlndXJhdGlvbi5cblxuTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlcy4gTGV0J3MgbG9vayBhdCBgdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc2AuIEkgc2VlIGl0J3MgYSBtb2R1bGUgcGFyYW1ldGVyIGNhbGxiYWNrLiBUaGF0IG1lYW5zIGl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUuIFNwZWNpZmljYWxseSwgaXQncyByZWFjaGFibGUgd2hlbiB3cml0aW5nIHRvIGAvc3lzL21vZHVsZS92aG9zdF9zY3NpL3BhcmFtZXRlcnMvbWF4X2lvX3Zxc2Agb3IgdXBvbiBtb2R1bGUgbG9hZGluZy4gQW5kIHRoYXQncyBleGFjdGx5IHdoYXQgSSdtIGxvb2tpbmcgZm9yIC0gZnV6emVycyBjYW4gYWJzb2x1dGVseSBpbnRlcmFjdCB3aXRoIHN5c2ZzIGZpbGVzLiBTbyB0aGF0J3MgYSByZWFjaGFibGUgcGF0aC5cblxuTXkgZm9jdXMgc2hvdWxkIGJlIG9uIGB2aG9zdF9zY3NpX29wZW5gLCBgdmhvc3Rfc2NzaV9yZWxlYXNlYCwgYW5kIG9mIGNvdXJzZSwgYHZob3N0X3Njc2lfc2V0X21heF9pb192cXNgIGFzIGFyZWFzIG9mIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LiBJJ20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIHRob3NlIGNvbmZpZyBhc3N1bXB0aW9ucyBhZ2FpbiB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDc4LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjMxOjIzLjI5OTMzMzk3N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTc2NDg4NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMT0NLXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svS2NvbmZpZy00LSNcXG5ibG9jay9LY29uZmlnOjU6bWVudWNvbmZpZyBCTE9DS1xcbmJsb2NrL0tjb25maWctNi0gICAgICAgYm9vbCBcXFwiRW5hYmxlIHRoZSBibG9jayBsYXllclxcXCIgaWYgRVhQRVJUXFxuLS1cXG5ibG9jay9LY29uZmlnPTI3PWlmIEJMT0NLXFxuYmxvY2svS2NvbmZpZy0yOC1cXG5ibG9jay9LY29uZmlnOjI5OmNvbmZpZyBCTE9DS19MRUdBQ1lfQVVUT0xPQURcXG5ibG9jay9LY29uZmlnLTMwLVxcdGJvb2wgXFxcIkxlZ2FjeSBhdXRvbG9hZGluZyBzdXBwb3J0XFxcIlxcbi0tXFxuYmxvY2svS2NvbmZpZz0yMTQ9Y29uZmlnIEJMS19QTVxcbi0tXFxuYmxvY2svS2NvbmZpZy0yMTctIyBkbyBub3QgdXNlIGluIG5ldyBjb2RlXFxuYmxvY2svS2NvbmZpZzoyMTg6Y29uZmlnIEJMT0NLX0hPTERFUl9ERVBSRUNBVEVEXFxuYmxvY2svS2NvbmZpZy0yMTktXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjozMToyMy4zOTY5ODg0OTVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA2OTYxMDkyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBCTE9DS2AgY29uZmlnLCB3aGljaCBJIHVuZGVyc3RhbmQgaXMgYSBjb3JlIGNvbmZpZ3VyYXRpb24gc2V0dGluZy4gTXkgbmV4dCB0aG91Z2h0IGlzLCBhcmUgdGhlcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgYmV5b25kIHRoZSBpbW1lZGlhdGUgY29uZmlndXJhdGlvbj8gTGV0J3MgZGlnIGluIGEgYml0IGZ1cnRoZXIuXG5cblJpZ2h0LCBgVkhPU1RfU0NTSWAgc2VsZWN0cyBib3RoIGBWSE9TVGAgYW5kIGBTR19QT09MYC4gR290IGl0LiBBbmQgYFRBUkdFVF9DT1JFYCBzZWxlY3RzIGEgd2hvbGUgYnVuY2ggb2YgdGhpbmdzOiBgQ09ORklHRlNfRlNgLCBgQ1JDX1QxMERJRmAsIGBTQ1NJX0NPTU1PTmAsIGFuZCBgU0dMX0FMTE9DYC4gV2UgY2FuIHByb2JhYmx5IHNraXAgbGlzdGluZyBhbGwgdGhlICpzZWxlY3RlZCogY29uZmlnczsgdGhhdCBmZWVscyByZWR1bmRhbnQsIHJpZ2h0PyBJdCdzIHRoZSBgZGVwZW5kcyBvbmAgY2xhdXNlcyB0aGF0IHJlYWxseSB0ZWxsIHRoZSBzdG9yeSBoZXJlLlxuXG5UaGVyZWZvcmUsIGFzIGZhciBhcyB0aGUgKnByaW1hcnkqIGNvbmZpZ3Mgd2UncmUgY29uY2VybmVkIGFib3V0LCB3ZSdyZSByZWFsbHkgbG9va2luZyBhdCBgVkhPU1RfU0NTSWAgYW5kIGBUQVJHRVRfQ09SRWAuIFdlJ3ZlIGdvdHRlbiB0byB0aGUgYm90dG9tIG9mIHRoZSBkZXBlbmRlbmN5IGNoYWluLlxuXG5UaW1lIHRvIG1vdmUgb250byBsb29raW5nIGF0IGhvdyB0aGVzZSB3b3JrLiBJJ2xsIG5lZWQgdG8gY2hlY2sgYHZob3N0X3Njc2lfc2V0X21heF9pb192cXNgIGluIGBkcml2ZXJzL3Zob3N0L3Njc2kuY2AgYW5kIGZpZ3VyZSBvdXQgaG93IHRoZXNlIGNvbmZpZ3MgYXJlIGFjdHVhbGx5IGltcGxlbWVudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzE1LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjMxOjI3LjQ2NjYwMjI0M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIxODg1NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuYz0yMTI9c3RhdGljIHVuc2lnbmVkIHZob3N0X3Njc2lfbWF4X2lvX3ZxcyA9IDEyODtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMTMtXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjE0OnN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxcyhjb25zdCBjaGFyICp2YWwsXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjE1LVxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0yMjA9c3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIHZob3N0X3Njc2lfbWF4X2lvX3Zxc19vcCA9IHtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyMjE6XFx0LnNldCA9IHZob3N0X3Njc2lfc2V0X21heF9pb192cXMsXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjIyLVxcdC5nZXQgPSBwYXJhbV9nZXRfdWludCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MzE6MjcuNTA4Nzk5OTQyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzOTYzMDc0MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyBpbiB0aGUgdmhvc3Qtc2NzaSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHZob3N0LXNjc2kgY29kZSwgYW5kIHRoZSBmaXJzdCB0aGluZyBJIG5vdGljZSBpcyB0aGF0IGB2aG9zdF9zY3NpX29wZW5gIGFuZCBgdmhvc3Rfc2NzaV9yZWxlYXNlYCBhcmUgc3RhdGljIGZ1bmN0aW9ucy4gU3RhdGljIGZ1bmN0aW9ucyBhcmUgYWx3YXlzIHNvbWV0aGluZyBJIHBheSBhdHRlbnRpb24gdG8gaW4gdGhpcyBjb250ZXh0LiBDaGVja2luZyB0aG9zZSBmdW5jdGlvbnMsIEkgc2VlIHRoZXkgYXJlLCBpbmRlZWQsIHN0YXRpYywgYnV0IHRoZXkgYXJlIGFsc28gdXNlZCBhcyBjYWxsYmFja3Mgd2l0aGluIHRoZSBgZmlsZV9vcGVyYXRpb25zYCBzdHJ1Y3R1cmUuIFRoYXQgbWFrZXMgdGhlbSBhY2Nlc3NpYmxlIHRocm91Z2ggb3BlbmluZyBgL2Rldi92aG9zdC1zY3NpYCwgd2hpY2ggaXMgYSBrZXkgZGV0YWlsLiBCZWNhdXNlIHRoZXkgYXJlbid0IGlubGluZWQg4oCTIHRoZXkncmUgcGFzc2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIOKAkyB0aGV5IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4gUGVyZmVjdCEgVGhhdCBtYWtlcyB0aGVtIGRpcmVjdGx5IHRhcmdldGFibGUgYnkgZnV6emVycy5cblxuTmV4dCwgSSBuZWVkZWQgdG8gZmlndXJlIG91dCBpZiBgdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc2Agd2FzIGlubGluZWQgb3Igbm90LiBJdCBsb29rcyBsaWtlIGl0J3MgYWxzbyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLCB0aGlzIHRpbWUgdG8gYGtlcm5lbF9wYXJhbV9vcHNgLCBtZWFuaW5nIGl0J3MgKm5vdCogaW5saW5lZCBlaXRoZXIuIFRoYXQgbWVhbnMgaXQgY2FuIGFsc28gaGF2ZSBhIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLlxuXG5UaGVyZWZvcmUsIHRoZSBrZXkgc3ltYm9scyBJIHNob3VsZCBiZSBmb2N1c2luZyBvbiBmb3IgcG90ZW50aWFsIGZ1enppbmcgZWZmb3J0cyBhcmU6XG5cbiogICBgdmhvc3Rfc2NzaV9vcGVuYFxuKiAgIGB2aG9zdF9zY3NpX3JlbGVhc2VgXG4qICAgYHZob3N0X3Njc2lfc2V0X21heF9pb192cXNgXG5cbkNvbnNpZGVyaW5nIHRoZSBjb25maWd1cmF0aW9uLCBgVkhPU1RfU0NTSWAgYW5kIGBUQVJHRVRfQ09SRWAgc2VlbSBlc3NlbnRpYWwuXG5cblRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggYXBwZWFycyB0byBpbnZvbHZlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIHZob3N0LXNjc2kgZHJpdmVyJ3MgaW5pdGlhbGl6YXRpb24gYW5kIHRlYXJkb3duIHByb2NlZHVyZXMuIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGlzIGNoYW5naW5nIGhvdyB0aGUgYG1heF9pb192cXNgIG1vZHVsZSBwYXJhbWV0ZXIgaXMgaGFuZGxlZCBhbmQgaG93IHZpcnRxdWV1ZSBtZW1vcnkgaXMgYWxsb2NhdGVkIGFuZCBkZWFsbG9jYXRlZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcywgYW5kIGNyaXRpY2FsbHksIHRoZXNlIGNvZGUgcGF0aHMgYXJlIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBgL2Rldi92aG9zdC1zY3NpYCBvcGVuL3JlbGVhc2Ugb3BlcmF0aW9ucyBhbmQgdGhlIHN5c2ZzIG1vZHVsZSBwYXJhbWV0ZXJzLiBHaXZlbiB0aGF0LCB0aGUgbmV3IGJlaGF2aW9yIGhlcmUgaXMgY2VydGFpbmx5IHNvbWV0aGluZyBJIHdvdWxkIHdhbnQgdG8gdGFyZ2V0IHdpdGggZnV6emluZy5cblxuTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTg3LCJPdXRwdXRUb2tlbnMiOjE1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjozMTozMy45MDUxMDk2MzRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODMyNzc2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkhPU1RfU0NTSVwiLFxuICAgIFwiVEFSR0VUX0NPUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aG9zdF9zY3NpX29wZW5cIixcbiAgICBcInZob3N0X3Njc2lfcmVsZWFzZVwiLFxuICAgIFwidmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgdGVhcmRvd24gb2YgdGhlIHZob3N0LXNjc2kgZHJpdmVyLCBzcGVjaWZpY2FsbHkgY2hhbmdpbmcgaG93IHRoZSBgbWF4X2lvX3Zxc2AgbW9kdWxlIHBhcmFtZXRlciBpcyBoYW5kbGVkIGFuZCBob3cgbWVtb3J5IGlzIGFsbG9jYXRlZC9mcmVlZCBmb3IgdmlydHF1ZXVlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29kZSBwYXRocyAodmlhIGAvZGV2L3Zob3N0LXNjc2lgIG9wZW4vcmVsZWFzZSBhbmQgc3lzZnMgbW9kdWxlIHBhcmFtZXRlcnMpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZIT1NUX1NDU0lcIixcbiAgICBcIlRBUkdFVF9DT1JFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmhvc3Rfc2NzaV9vcGVuXCIsXG4gICAgXCJ2aG9zdF9zY3NpX3JlbGVhc2VcIixcbiAgICBcInZob3N0X3Njc2lfc2V0X21heF9pb192cXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIHRlYXJkb3duIG9mIHRoZSB2aG9zdC1zY3NpIGRyaXZlciwgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGhvdyB0aGUgYG1heF9pb192cXNgIG1vZHVsZSBwYXJhbWV0ZXIgaXMgaGFuZGxlZCBhbmQgaG93IG1lbW9yeSBpcyBhbGxvY2F0ZWQvZnJlZWQgZm9yIHZpcnRxdWV1ZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMgKHZpYSBgL2Rldi92aG9zdC1zY3NpYCBvcGVuL3JlbGVhc2UgYW5kIHN5c2ZzIG1vZHVsZSBwYXJhbWV0ZXJzKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow8gfrq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-02 06:29:45 +0000 UTC FinishedAt: 2026-08-02 06:31:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8ba098e6b6ff0db8edf28528d1552be261af30d4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_SCSI", "TARGET_CORE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8ba098e6b6ff0db8edf28528d1552be261af30d4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VHOST_SCSI", "TARGET_CORE" ], "series_id": "19a7a78f-4ff2-46e7-ac9c-23f4330afb7d" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "vhost_scsi_open", "vhost_scsi_release", "vhost_scsi_set_max_io_vqs" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX1NDU0kmIzM0OywKICAgICYjMzQ7VEFSR0VUX0NPUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aG9zdF9zY3NpX29wZW4mIzM0OywKICAgICYjMzQ7dmhvc3Rfc2NzaV9yZWxlYXNlJiMzNDssCiAgICAmIzM0O3Zob3N0X3Njc2lfc2V0X21heF9pb192cXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGluaXRpYWxpemF0aW9uIGFuZCB0ZWFyZG93biBvZiB0aGUgdmhvc3Qtc2NzaSBkcml2ZXIsIHNwZWNpZmljYWxseSBjaGFuZ2luZyBob3cgdGhlIGBtYXhfaW9fdnFzYCBtb2R1bGUgcGFyYW1ldGVyIGlzIGhhbmRsZWQgYW5kIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkL2ZyZWVkIGZvciB2aXJ0cXVldWVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzICh2aWEgYC9kZXYvdmhvc3Qtc2NzaWAgb3Blbi9yZWxlYXNlIGFuZCBzeXNmcyBtb2R1bGUgcGFyYW1ldGVycykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MzA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0NzViMTQ0MTBhNzAzYjdmNTE1OGJmNzI3OGZlNjRjYmM5NjUzNjAzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMiAwNjozMDo0NyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Njc2kuYyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jXG5pbmRleCA5YTEyNTNiOWQ4YzUwLi5jMTM4YzI5Y2UzZGQ0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy92aG9zdC9zY3NpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmhvc3Qvc2NzaS5jXG5AQCAtMjEwLDcgJiM0MzsyMTAsMjAgQEAgc3RhdGljIGNvbnN0IGludCB2aG9zdF9zY3NpX2JpdHNbXSA9IHtcbiAjZGVmaW5lIFZIT1NUX1NDU0lfTUFYX0VWRU5UXHQxMjhcbiBcbiBzdGF0aWMgdW5zaWduZWQgdmhvc3Rfc2NzaV9tYXhfaW9fdnFzID0gMTI4O1xuLW1vZHVsZV9wYXJhbV9uYW1lZChtYXhfaW9fdnFzLCB2aG9zdF9zY3NpX21heF9pb192cXMsIHVpbnQsIDA2NDQpO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCB2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzKGNvbnN0IGNoYXIgKnZhbCxcbiYjNDM7XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHBhcmFtX3NldF91aW50X21pbm1heCh2YWwsIGtwLCAxLCBWSE9TVF9TQ1NJX01BWF9JT19WUSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyB2aG9zdF9zY3NpX21heF9pb192cXNfb3AgPSB7XG4mIzQzO1x0LnNldCA9IHZob3N0X3Njc2lfc2V0X21heF9pb192cXMsXG4mIzQzO1x0LmdldCA9IHBhcmFtX2dldF91aW50LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7bW9kdWxlX3BhcmFtX2NiKG1heF9pb192cXMsIFx1MDAyNnZob3N0X3Njc2lfbWF4X2lvX3Zxc19vcCxcbiYjNDM7XHRcdFx1MDAyNnZob3N0X3Njc2lfbWF4X2lvX3ZxcywgMDY0NCk7XG4gTU9EVUxFX1BBUk1fREVTQyhtYXhfaW9fdnFzLCBcJiMzNDtTZXQgdGhlIG1heCBudW1iZXIgb2YgSU8gdmlydHF1ZXVlcyBhIHZob3N0IHNjc2kgZGV2aWNlIGNhbiBzdXBwb3J0LiBUaGUgZGVmYXVsdCBpcyAxMjguIFRoZSBtYXggaXMgMTAyNC5cJiMzNDspO1xuIFxuIHN0cnVjdCB2aG9zdF9zY3NpX3ZpcnRxdWV1ZSB7XG5AQCAtMjI3MywyOSAmIzQzOzIyODYsMjEgQEAgc3RhdGljIGludCB2aG9zdF9zY3NpX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXG4gXHRzdHJ1Y3Qgdmhvc3Rfc2NzaV92aXJ0cXVldWUgKnN2cTtcbiBcdHN0cnVjdCB2aG9zdF9zY3NpICp2cztcbiBcdHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKip2cXM7XG4tXHRpbnQgciA9IC1FTk9NRU0sIGksIG52cXMgPSB2aG9zdF9zY3NpX21heF9pb192cXM7XG4mIzQzO1x0aW50IHIgPSAtRU5PTUVNLCBpLCBudnFzO1xuIFxuIFx0dnMgPSBrdnphbGxvY19vYmooKnZzKTtcbiBcdGlmICghdnMpXG4gXHRcdGdvdG8gZXJyX3ZzO1xuIFx0dnMtXHUwMDNlaW5saW5lX3NnX2NudCA9IHZob3N0X3Njc2lfaW5saW5lX3NnX2NudDtcbiBcbi1cdGlmIChudnFzIFx1MDAzZSBWSE9TVF9TQ1NJX01BWF9JT19WUSkge1xuLVx0XHRwcl9lcnIoXCYjMzQ7SW52YWxpZCBtYXhfaW9fdnFzIG9mICVkLiBVc2luZyAlZC5cXG5cJiMzNDssIG52cXMsXG4tXHRcdCAgICAgICBWSE9TVF9TQ1NJX01BWF9JT19WUSk7XG4tXHRcdG52cXMgPSBWSE9TVF9TQ1NJX01BWF9JT19WUTtcbi1cdH0gZWxzZSBpZiAobnZxcyA9PSAwKSB7XG4tXHRcdHByX2VycihcJiMzNDtJbnZhbGlkIG1heF9pb192cXMgb2YgJWQuIFVzaW5nIDEuXFxuXCYjMzQ7LCBudnFzKTtcbi1cdFx0bnZxcyA9IDE7XG4tXHR9XG4tXHRudnFzICYjNDM7PSBWSE9TVF9TQ1NJX1ZRX0lPO1xuJiM0MztcdG52cXMgPSB2aG9zdF9zY3NpX21heF9pb192cXMgJiM0MzsgVkhPU1RfU0NTSV9WUV9JTztcbiBcbiBcdHZzLVx1MDAzZW9sZF9pbmZsaWdodCA9IGttYWxsb2Nfb2JqcygqdnMtXHUwMDNlb2xkX2luZmxpZ2h0LCBudnFzLFxuIFx0XHRcdFx0XHRHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7XG4gXHRpZiAoIXZzLVx1MDAzZW9sZF9pbmZsaWdodClcbiBcdFx0Z290byBlcnJfaW5mbGlnaHQ7XG4gXG4tXHR2cy1cdTAwM2V2cXMgPSBrbWFsbG9jX29ianMoKnZzLVx1MDAzZXZxcywgbnZxcywgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xuJiM0MztcdHZzLVx1MDAzZXZxcyA9IGt2emFsbG9jX29ianMoKnZzLVx1MDAzZXZxcywgbnZxcyk7XG4gXHRpZiAoIXZzLVx1MDAzZXZxcylcbiBcdFx0Z290byBlcnJfdnFzO1xuIFxuQEAgLTIzMzEsNyAmIzQzOzIzMzYsNyBAQCBzdGF0aWMgaW50IHZob3N0X3Njc2lfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcbiBcdHJldHVybiAwO1xuIFxuIGVycl9sb2NhbF92cXM6XG4tXHRrZnJlZSh2cy1cdTAwM2V2cXMpO1xuJiM0MztcdGt2ZnJlZSh2cy1cdTAwM2V2cXMpO1xuIGVycl92cXM6XG4gXHRrZnJlZSh2cy1cdTAwM2VvbGRfaW5mbGlnaHQpO1xuIGVycl9pbmZsaWdodDpcbkBAIC0yMzUyLDcgJiM0MzsyMzU3LDcgQEAgc3RhdGljIGludCB2aG9zdF9zY3NpX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXG4gXHR2aG9zdF9kZXZfc3RvcChcdTAwMjZ2cy1cdTAwM2VkZXYpO1xuIFx0dmhvc3RfZGV2X2NsZWFudXAoXHUwMDI2dnMtXHUwMDNlZGV2KTtcbiBcdGtmcmVlKHZzLVx1MDAzZWRldi52cXMpO1xuLVx0a2ZyZWUodnMtXHUwMDNldnFzKTtcbiYjNDM7XHRrdmZyZWUodnMtXHUwMDNldnFzKTtcbiBcdGtmcmVlKHZzLVx1MDAzZW9sZF9pbmZsaWdodCk7XG4gXHRrdmZyZWUodnMpO1xuIFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MzA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZIT1NUX1NDU0kmIzM0OywKICAgICYjMzQ7VEFSR0VUX0NPUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aG9zdF9zY3NpX29wZW4mIzM0OywKICAgICYjMzQ7dmhvc3Rfc2NzaV9yZWxlYXNlJiMzNDssCiAgICAmIzM0O3Zob3N0X3Njc2lfc2V0X21heF9pb192cXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGluaXRpYWxpemF0aW9uIGFuZCB0ZWFyZG93biBvZiB0aGUgdmhvc3Qtc2NzaSBkcml2ZXIsIHNwZWNpZmljYWxseSBjaGFuZ2luZyBob3cgdGhlIGBtYXhfaW9fdnFzYCBtb2R1bGUgcGFyYW1ldGVyIGlzIGhhbmRsZWQgYW5kIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkL2ZyZWVkIGZvciB2aXJ0cXVldWVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzICh2aWEgYC9kZXYvdmhvc3Qtc2NzaWAgb3Blbi9yZWxlYXNlIGFuZCBzeXNmcyBtb2R1bGUgcGFyYW1ldGVycykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0NzViMTQ0MTBhNzAzYjdmNTE1OGJmNzI3OGZlNjRjYmM5NjUzNjAzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMiAwNjozMDo0NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3Qvc2NzaS5jIGIvZHJpdmVycy92aG9zdC9zY3NpLmMKaW5kZXggOWExMjUzYjlkOGM1MC4uYzEzOGMyOWNlM2RkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC9zY3NpLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92aG9zdC9zY3NpLmMKQEAgLTIxMCw3ICYjNDM7MjEwLDIwIEBAIHN0YXRpYyBjb25zdCBpbnQgdmhvc3Rfc2NzaV9iaXRzW10gPSB7CiAjZGVmaW5lIFZIT1NUX1NDU0lfTUFYX0VWRU5UCTEyOAogCiBzdGF0aWMgdW5zaWduZWQgdmhvc3Rfc2NzaV9tYXhfaW9fdnFzID0gMTI4OwotbW9kdWxlX3BhcmFtX25hbWVkKG1heF9pb192cXMsIHZob3N0X3Njc2lfbWF4X2lvX3ZxcywgdWludCwgMDY0NCk7CiYjNDM7CiYjNDM7c3RhdGljIGludCB2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzKGNvbnN0IGNoYXIgKnZhbCwKJiM0MzsJCQkJICAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKJiM0Mzt7CiYjNDM7CXJldHVybiBwYXJhbV9zZXRfdWludF9taW5tYXgodmFsLCBrcCwgMSwgVkhPU1RfU0NTSV9NQVhfSU9fVlEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgdmhvc3Rfc2NzaV9tYXhfaW9fdnFzX29wID0gewomIzQzOwkuc2V0ID0gdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3ZxcywKJiM0MzsJLmdldCA9IHBhcmFtX2dldF91aW50LAomIzQzO307CiYjNDM7CiYjNDM7bW9kdWxlX3BhcmFtX2NiKG1heF9pb192cXMsICZhbXA7dmhvc3Rfc2NzaV9tYXhfaW9fdnFzX29wLAomIzQzOwkJJmFtcDt2aG9zdF9zY3NpX21heF9pb192cXMsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhtYXhfaW9fdnFzLCAmIzM0O1NldCB0aGUgbWF4IG51bWJlciBvZiBJTyB2aXJ0cXVldWVzIGEgdmhvc3Qgc2NzaSBkZXZpY2UgY2FuIHN1cHBvcnQuIFRoZSBkZWZhdWx0IGlzIDEyOC4gVGhlIG1heCBpcyAxMDI0LiYjMzQ7KTsKIAogc3RydWN0IHZob3N0X3Njc2lfdmlydHF1ZXVlIHsKQEAgLTIyNzMsMjkgJiM0MzsyMjg2LDIxIEBAIHN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKQogCXN0cnVjdCB2aG9zdF9zY3NpX3ZpcnRxdWV1ZSAqc3ZxOwogCXN0cnVjdCB2aG9zdF9zY3NpICp2czsKIAlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICoqdnFzOwotCWludCByID0gLUVOT01FTSwgaSwgbnZxcyA9IHZob3N0X3Njc2lfbWF4X2lvX3ZxczsKJiM0MzsJaW50IHIgPSAtRU5PTUVNLCBpLCBudnFzOwogCiAJdnMgPSBrdnphbGxvY19vYmooKnZzKTsKIAlpZiAoIXZzKQogCQlnb3RvIGVycl92czsKIAl2cy0mZ3Q7aW5saW5lX3NnX2NudCA9IHZob3N0X3Njc2lfaW5saW5lX3NnX2NudDsKIAotCWlmIChudnFzICZndDsgVkhPU1RfU0NTSV9NQVhfSU9fVlEpIHsKLQkJcHJfZXJyKCYjMzQ7SW52YWxpZCBtYXhfaW9fdnFzIG9mICVkLiBVc2luZyAlZC5cbiYjMzQ7LCBudnFzLAotCQkgICAgICAgVkhPU1RfU0NTSV9NQVhfSU9fVlEpOwotCQludnFzID0gVkhPU1RfU0NTSV9NQVhfSU9fVlE7Ci0JfSBlbHNlIGlmIChudnFzID09IDApIHsKLQkJcHJfZXJyKCYjMzQ7SW52YWxpZCBtYXhfaW9fdnFzIG9mICVkLiBVc2luZyAxLlxuJiMzNDssIG52cXMpOwotCQludnFzID0gMTsKLQl9Ci0JbnZxcyAmIzQzOz0gVkhPU1RfU0NTSV9WUV9JTzsKJiM0MzsJbnZxcyA9IHZob3N0X3Njc2lfbWF4X2lvX3ZxcyAmIzQzOyBWSE9TVF9TQ1NJX1ZRX0lPOwogCiAJdnMtJmd0O29sZF9pbmZsaWdodCA9IGttYWxsb2Nfb2JqcygqdnMtJmd0O29sZF9pbmZsaWdodCwgbnZxcywKIAkJCQkJR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOwogCWlmICghdnMtJmd0O29sZF9pbmZsaWdodCkKIAkJZ290byBlcnJfaW5mbGlnaHQ7CiAKLQl2cy0mZ3Q7dnFzID0ga21hbGxvY19vYmpzKCp2cy0mZ3Q7dnFzLCBudnFzLCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7CiYjNDM7CXZzLSZndDt2cXMgPSBrdnphbGxvY19vYmpzKCp2cy0mZ3Q7dnFzLCBudnFzKTsKIAlpZiAoIXZzLSZndDt2cXMpCiAJCWdvdG8gZXJyX3ZxczsKIApAQCAtMjMzMSw3ICYjNDM7MjMzNiw3IEBAIHN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKQogCXJldHVybiAwOwogCiBlcnJfbG9jYWxfdnFzOgotCWtmcmVlKHZzLSZndDt2cXMpOwomIzQzOwlrdmZyZWUodnMtJmd0O3Zxcyk7CiBlcnJfdnFzOgogCWtmcmVlKHZzLSZndDtvbGRfaW5mbGlnaHQpOwogZXJyX2luZmxpZ2h0OgpAQCAtMjM1Miw3ICYjNDM7MjM1Nyw3IEBAIHN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKQogCXZob3N0X2Rldl9zdG9wKCZhbXA7dnMtJmd0O2Rldik7CiAJdmhvc3RfZGV2X2NsZWFudXAoJmFtcDt2cy0mZ3Q7ZGV2KTsKIAlrZnJlZSh2cy0mZ3Q7ZGV2LnZxcyk7Ci0Ja2ZyZWUodnMtJmd0O3Zxcyk7CiYjNDM7CWt2ZnJlZSh2cy0mZ3Q7dnFzKTsKIAlrZnJlZSh2cy0mZ3Q7b2xkX2luZmxpZ2h0KTsKIAlrdmZyZWUodnMpOwogCXJldHVybiAwOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDE5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVmhvc3QgU0NTSSBEcml2ZXIgZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBgZHJpdmVycy92aG9zdC9zY3NpLmNgIGZpbGUuIEl0IHNlZW1zIHRvIGJlIHJld29ya2luZyBob3cgdGhlIGBtYXhfaW9fdnFzYCBtb2R1bGUgcGFyYW1ldGVyIGlzIG1hbmFnZWQuIFRoZXkmIzM5O3JlIHN3aXRjaGluZyB0byBgbW9kdWxlX3BhcmFtX2NiYCBhbmQgYHBhcmFtX3NldF91aW50X21pbm1heGAsIHdoaWNoIGlzIGEgbW9yZSByb2J1c3QgYXBwcm9hY2guIEFuZCwgZnVuY3Rpb25hbGx5LCB0aGV5JiMzOTt2ZSByZXBsYWNlZCB0aGUgb2xkIGBrbWFsbG9jX29ianNgIHdpdGggYGt2emFsbG9jX29ianNgIGZvciBgdnMtJmd0O3Zxc2AgYW5kIHRoZSBhY2NvbXBhbnlpbmcgYGtmcmVlYCB0byBga3ZmcmVlYC4gQWxsIHBlcmZlY3RseSBhY2NlcHRhYmxlIGZyb20gYSBrZXJuZWwgZGV2ZWxvcG1lbnQgcGVyc3BlY3RpdmUuCgpOb3csIG15IHByaW1hcnkgaW50ZXJlc3QgaXMsIG9mIGNvdXJzZSwgd2hldGhlciB0aGlzIG9wZW5zIGFueSBuZXcgZnV6emluZyBhdmVudWVzLiBBbmQgZnJvbSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSB2aG9zdCBhcmNoaXRlY3R1cmUsIHRoaXMgZHJpdmVyIF9zaG91bGRfIGJlIGZ1enphYmxlLiBUaGUgYHZob3N0LXNjc2lgIGRyaXZlciwgYXMgYSB2aXJ0dWFsIGhvc3QgZHJpdmVyLCBwcm92aWRlcyBhIGNoYXJhY3RlciBkZXZpY2UsIGAvZGV2L3Zob3N0LXNjc2lgLiBUaGF0JiMzOTtzIGEgaHVnZSBjbHVlISBDaGFyYWN0ZXIgZGV2aWNlcywgZXNwZWNpYWxseSBvbmVzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBhcmUgYWxtb3N0IGFsd2F5cyBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLiBXZSBjYW4gaW50ZXJhY3Qgd2l0aCBpdCB1c2luZyBpb2N0bHMsIHNvIHRoYXQmIzM5O3MgYW5vdGhlciBpbXBvcnRhbnQgcG9pbnQuCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayB0aGUgY29uZmlndXJhdGlvbi4gSSB3YW50IHRvIGNvbmZpcm0gdGhhdCBgZHJpdmVycy92aG9zdC9zY3NpLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19WSE9TVF9TQ1NJYCBpcyBlbmFibGVkLiBJZiBpdCBpcywgdGhlbiB0aGUgZHJpdmVyIGlzIHByZXNlbnQsIGFuZCB3ZSBjYW4gdGFyZ2V0IGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1ZIT1NUX1NDU0kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmhvc3QvTWFrZWZpbGU9Mz12aG9zdF9uZXQteSA6PSBuZXQub1xuZHJpdmVycy92aG9zdC9NYWtlZmlsZS00LVxuZHJpdmVycy92aG9zdC9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19WSE9TVF9TQ1NJKSAmIzQzOz0gdmhvc3Rfc2NzaS5vXG5kcml2ZXJzL3Zob3N0L01ha2VmaWxlLTYtdmhvc3Rfc2NzaS15IDo9IHNjc2kub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NjAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBDT05GSUdfVkhPU1RfU0NTSWAgRGVwZW5kZW5jaWVzKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gYENPTkZJR19WSE9TVF9TQ1NJYC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIHRoZSB2aG9zdCBzdWJzeXN0ZW0sIEkgaW1tZWRpYXRlbHkgd2FudCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGxvdy1sZXZlbCBpbnRlcmFjdGlvbnMg4oCTIHdoYXQgb3RoZXIga2VybmVsIGNvbXBvbmVudHMgYXJlICpyZXF1aXJlZCogZm9yIGBDT05GSUdfVkhPU1RfU0NTSWAgdG8gZXZlbiBmdW5jdGlvbj8gSXMgaXQgc3RyaWN0bHkgdmhvc3QgY29yZSwgb3IgZG9lcyBpdCByZWFjaCBpbnRvIGFyZWFzIGxpa2UgdGhlIFNDU0kgc3Vic3lzdGVtIGRpcmVjdGx5PyBJIG5lZWQgdG8gY2hlY2sgZm9yIHRoZSBvYnZpb3VzIGN1bHByaXRzLCBvZiBjb3Vyc2U6IHZob3N0LW5ldCwgdmhvc3QtYmxrLCBhbmQgYXNzb2NpYXRlZCBkZXZpY2UgZHJpdmVycyB0aGF0IHdvdWxkIHR5cGljYWxseSBpbnRlcmZhY2Ugd2l0aCB2aG9zdC4gQnV0IEkgYWxzbyBuZWVkIHRvIGJlIGNlcnRhaW4gYWJvdXQgdGhlIGludHJpY2FjaWVzIG9mIHRoZSBTQ1NJIGxheWVyIGFuZCB3aGV0aGVyIGFueXRoaW5nIHRoZXJlIHdvdWxkIGludHJvZHVjZSBpbnRlcmRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIGtub3cgdGhlIGVudGlyZSBzdGFjayBzbyBJIGNhbiBiZXN0IGNvbmZpZ3VyZSB0aGUgZW52aXJvbm1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZIT1NUX1NDU0kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9LY29uZmlnPTM0PWNvbmZpZyBWSE9TVF9ORVRcbi0tXG5kcml2ZXJzL3Zob3N0L0tjb25maWctNDUtXG5kcml2ZXJzL3Zob3N0L0tjb25maWc6NDY6Y29uZmlnIFZIT1NUX1NDU0lcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy00Ny1cdHRyaXN0YXRlIFwmIzM0O1ZIT1NUX1NDU0kgVENNIGZhYnJpYyBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTgzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIGBWSE9TVF9TQ1NJYCBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBkcmlsbCBkb3duIGludG8gdGhlIGtlcm5lbCYjMzk7cyBLY29uZmlnIHN5c3RlbSBhbmQgbG9jYXRlIHRoZSBwcmVjaXNlIGRlZmluaXRpb24gZm9yIGBWSE9TVF9TQ1NJYC4gTm8gaGFuZC13YXZpbmcgaGVyZSwgSSB3YW50IHRoZSBmdWxsLCB1bnZhcm5pc2hlZCB0cnV0aC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmV4YWN0bHkqIGhvdyB0aGlzIGZlYXR1cmUgaXMgZGVmaW5lZCwgd2hhdCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZSwgYW5kIHdoYXQgaW1wbGljYXRpb25zIGl0cyBwcmVzZW5jZSAob3IgYWJzZW5jZSkgY2FycmllcyB3aXRoaW4gdGhlIGJyb2FkZXIgdmhvc3QgZWNvc3lzdGVtLiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0lzIGl0IGEgY29yZSBidWlsZGluZyBibG9jaywgYSBtb2R1bGFyIGFkZC1vbiwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/JiMzNDsgQSBkZXRhaWxlZCBleGFtaW5hdGlvbiBvZiBgZHJpdmVycy92aG9zdC9LY29uZmlnYCBpcyB0aGUgYmVzdCBzdGFydGluZyBwb2ludCB0byBidWlsZCBhIHRydWx5IHJvYnVzdCB1bmRlcnN0YW5kaW5nLiBJdCYjMzk7cyB0aGUgb25seSB3YXkgdG8gYmUgc3VyZSBJIGhhdmUgYW4gYWNjdXJhdGUgbWVudGFsIG1vZGVsIG9mIGl0cyByb2xlIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQ2Olx0Y29uZmlnIFZIT1NUX1NDU0lcbiAgNDc6XHRcdHRyaXN0YXRlIFwmIzM0O1ZIT1NUX1NDU0kgVENNIGZhYnJpYyBkcml2ZXJcJiMzNDtcbiAgNDg6XHRcdGRlcGVuZHMgb24gVEFSR0VUX0NPUkUgXHUwMDI2XHUwMDI2IEVWRU5URkRcbiAgNDk6XHRcdHNlbGVjdCBWSE9TVFxuICA1MDpcdFx0c2VsZWN0IFNHX1BPT0xcbiAgNTE6XHRcdGRlZmF1bHQgblxuICA1MjpcdFx0aGVscFxuICA1MzpcdFx0U2F5IE0gaGVyZSB0byBlbmFibGUgdGhlIHZob3N0X3Njc2kgVENNIGZhYnJpYyBtb2R1bGVcbiAgNTQ6XHRcdGZvciB1c2Ugd2l0aCB2aXJ0aW8tc2NzaSBndWVzdHNcbiAgNTU6XHRcbiAgNTY6XHRjb25maWcgVkhPU1RfVlNPQ0tcbiAgNTc6XHRcdHRyaXN0YXRlIFwmIzM0O3Zob3N0IHZpcnRpby12c29jayBkcml2ZXJcJiMzNDtcbiAgNTg6XHRcdGRlcGVuZHMgb24gVlNPQ0tFVFMgXHUwMDI2XHUwMDI2IEVWRU5URkRcbiAgNTk6XHRcdHNlbGVjdCBWSE9TVFxuICA2MDpcdFx0c2VsZWN0IFZJUlRJT19WU09DS0VUU19DT01NT05cbiAgNjE6XHRcdGRlZmF1bHQgblxuICA2MjpcdFx0aGVscFxuICA2MzpcdFx0VGhpcyBrZXJuZWwgbW9kdWxlIGNhbiBiZSBsb2FkZWQgaW4gdGhlIGhvc3Qga2VybmVsIHRvIHByb3ZpZGUgQUZfVlNPQ0tcbiAgNjQ6XHRcdHNvY2tldHMgZm9yIGNvbW11bmljYXRpbmcgd2l0aCBndWVzdHMuICBUaGUgZ3Vlc3RzIG11c3QgaGF2ZSB0aGVcbiAgNjU6XHRcdHZpcnRpb190cmFuc3BvcnQua28gZHJpdmVyIGxvYWRlZCB0byB1c2UgdGhlIHZpcnRpby12c29jayBkZXZpY2UuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDUyMwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqVGhpbmtpbmcgVGhyb3VnaCBUYXJnZXQgQ29yZSBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBkZXBlbmRlbmNpZXMsIGFuZCB0aGUga2V5IG9uZXMgYXJlIGBUQVJHRVRfQ09SRWAgYW5kIGBFVkVOVEZEYC4gSW1tZWRpYXRlbHksIG15IGJyYWluIGdvZXMgdG8gdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2UsIHdoZXJlIGBUQVJHRVRfQ09SRWAgaXMgZGVmaW5lZCBhcyBgQ09ORklHX1RBUkdFVF9DT1JFYC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyBgVEFSR0VUX0NPUkVgIGlzIGxpa2VseSBhIGhpZ2hlci1sZXZlbCBjb25jZXB0IGFuZCBgQ09ORklHX1RBUkdFVF9DT1JFYCBpcyB0aGUgYWN0dWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGNvbnRyb2xsaW5nIGl0LiBNeSBuZXh0IHN0ZXA/IEkgbmVlZCB0byBkZWx2ZSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgYFRBUkdFVF9DT1JFYCAtIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgaW5zaWdodHMgd2lsbCBiZS4gV2hhdCBvdGhlciBtb2R1bGVzLCBsaWJyYXJpZXMsIG9yIHN5c3RlbSBjb21wb25lbnRzIHJlbHkgb24gaXQ/IFdoYXQgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB0aWVkIHRvIGl0cyBzdWNjZXNzZnVsIG9wZXJhdGlvbj8gVW5kZXJzdGFuZGluZyB0aGVzZSByZWxhdGlvbnNoaXBzIHdpbGwgYmUga2V5IHRvIHRyb3VibGVzaG9vdGluZywgb3B0aW1pemluZywgb3IgYnVpbGRpbmcgb24gdGhpcyBjb3JlIGNvbXBvbmVudC4gVGltZSB0byBzdGFydCBkaWdnaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVEFSR0VUX0NPUkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3RhcmdldC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdGFyZ2V0L0tjb25maWctMi1cbmRyaXZlcnMvdGFyZ2V0L0tjb25maWc6MzptZW51Y29uZmlnIFRBUkdFVF9DT1JFXG5kcml2ZXJzL3RhcmdldC9LY29uZmlnLTQtXHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIFRhcmdldCBDb3JlIE1vZCAoVENNKSBhbmQgQ29uZmlnRlMgSW5mcmFzdHJ1Y3R1cmVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg0OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBUYXJnZXQgS2NvbmZpZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIHRhcmdldCBkZXZpY2UgZHJpdmVycywgYW5kIHdoZXJlIGJldHRlciB0byBzdGFydCB0aGFuIHdpdGggdGhlIGBkcml2ZXJzL3RhcmdldC9LY29uZmlnYCBmaWxlPyBUaGlzIGlzIHRoZSBjZW50cmFsIGh1YiBmb3IgZGVmaW5pbmcgYW5kIG9yZ2FuaXppbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSB0YXJnZXQgZHJpdmVycy4gSSBrbm93IHRoaXMgZmlsZSBob2xkcyB0aGUga2V5IHRvIGhvdyB0aGVzZSBkcml2ZXJzIGFyZSBlbmFibGVkLCBkaXNhYmxlZCwgYW5kIGN1c3RvbWl6ZWQgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc3RydWN0dXJlLiBJJiMzOTttIGhvcGluZyB0byBpZGVudGlmeSB3aGljaCBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlLCBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgZXhpc3QgYmV0d2VlbiB0aGVtLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBicm9hZGVyIHN5c3RlbSBjb25maWd1cmF0aW9uLiBCYXNpY2FsbHksIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIEROQSBvZiB0aGUgdGFyZ2V0IGRyaXZlciBjb25maWd1cmF0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBiZWdpbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy90YXJnZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdFxuICAgMzpcdG1lbnVjb25maWcgVEFSR0VUX0NPUkVcbiAgIDQ6XHRcdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgVGFyZ2V0IENvcmUgTW9kIChUQ00pIGFuZCBDb25maWdGUyBJbmZyYXN0cnVjdHVyZVwmIzM0O1xuICAgNTpcdFx0ZGVwZW5kcyBvbiBCTE9DS1xuICAgNjpcdFx0c2VsZWN0IENPTkZJR0ZTX0ZTXG4gICA3Olx0XHRzZWxlY3QgQ1JDX1QxMERJRlxuICAgODpcdFx0c2VsZWN0IFNDU0lfQ09NTU9OXG4gICA5Olx0XHRzZWxlY3QgU0dMX0FMTE9DXG4gIDEwOlx0XHRkZWZhdWx0IG5cbiAgMTE6XHRcdGhlbHBcbiAgMTI6XHRcdFNheSBZIG9yIE0gaGVyZSB0byBlbmFibGUgdGhlIFRDTSBTdG9yYWdlIEVuZ2luZSBhbmQgQ29uZmlnRlMgZW5hYmxlZFxuICAxMzpcdFx0Y29udHJvbCBwYXRoIGZvciB0YXJnZXRfY29yZV9tb2QuICBUaGlzIGluY2x1ZGVzIGJ1aWx0LWluIFRDTSBSQU1ESVNLXG4gIDE0Olx0XHRzdWJzeXN0ZW0gbG9naWMgZm9yIHZpcnR1YWwgTFVOIDAgYWNjZXNzXG4gIDE1Olx0XG4gIDE2Olx0aWYgVEFSR0VUX0NPUkVcbiAgMTc6XHRcbiAgMTg6XHRjb25maWcgVENNX0lCTE9DS1xuICAxOTpcdFx0dHJpc3RhdGUgXCYjMzQ7VENNL0lCTE9DSyBTdWJzeXN0ZW0gUGx1Z2luIGZvciBMaW51eC9CTE9DS1wmIzM0O1xuICAyMDpcdFx0c2VsZWN0IEJMS19ERVZfSU5URUdSSVRZXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMzIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB2aG9zdC1zY3NpIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyBzcGVjaWZpY2FsbHkgY29uY2VybmVkIHdpdGggYHZob3N0LXNjc2lgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgdGhhdCBgVEFSR0VUX0NPUkVgIGlzIGEgZGVwZW5kZW5jeSBvZiBzb21ldGhpbmcgZWxzZSwgaW4gdGhpcyBjYXNlLCBgQkxPQ0tgLiBUaGF0JiMzOTtzIGltcG9ydGFudCB0byBrZWVwIGluIG1pbmQsIGFzIGFyZSBhbnkgcG90ZW50aWFsIGtub2NrLW9uIGVmZmVjdHMuIFRoZW4sIGBFVkVOVEZEYCBpcyB0eXBpY2FsbHkgZW5hYmxlZCwgc28gdGhhdCYjMzk7cyBsaWtlbHkgbm90IHRoZSBwcmltYXJ5IGNvbmNlcm4gaGVyZS4gTG9va3MgbGlrZSBgVkhPU1RfU0NTSWAgYW5kIGBUQVJHRVRfQ09SRWAgYXJlIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgaW4gcGxheS4KClRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIGB2aG9zdF9zY3NpX29wZW5gLCBgdmhvc3Rfc2NzaV9yZWxlYXNlYCwgYW5kIGFsc28gYHZob3N0X3Njc2lfc2V0X21heF9pb192cXNgLCB3aGljaCBpcyBhIG1vZHVsZSBwYXJhbWV0ZXIgY2FsbGJhY2suIFRoZSBgdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc2AgY2hhbmdlIG1pZ2h0IGJlIGludGVyZXN0aW5nIGluIHRlcm1zIG9mIHBhcmFtZXRlciB0dW5pbmcsIGJ1dCBgdmhvc3Rfc2NzaV9vcGVuYCBhbmQgYHZob3N0X3Njc2lfcmVsZWFzZWAgYXJlIHRoZSBmdW5jdGlvbnMgdG8gcmVhbGx5IGZvY3VzIG9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhvc2UgaGF2ZSBjaGFuZ2VkIGFuZCB3aHkuIE5vdywgbGV0JiMzOTtzIHNlZSwgYHZob3N0X3Njc2lfb3BlbmAgaXMgdGhlIGAub3BlbmAgY2FsbGJhY2sgb2YgdGhlIHZob3N0IHNjc2kgbWlzYyBkZXZpY2UsIHNvIHRoYXQgbWFrZXMgYSBsb3Qgb2Ygc2Vuc2UsIEkgc2hvdWxkIGxvb2sgYXQgdGhhdCBmdW5jdGlvbiBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF9zY3NpX29wZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Njc2kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Zob3N0L3Njc2kuYz0yMjMxPXN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9zZXRfZmVhdHVyZXMoc3RydWN0IHZob3N0X3Njc2kgKnZzLCB1NjQgZmVhdHVyZXMpXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjI4My1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIyODQ6c3RhdGljIGludCB2aG9zdF9zY3NpX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMjg1LXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0yNDQyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZob3N0X3Njc2lfZm9wcyA9IHtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDQ2LVx0LmNvbXBhdF9pb2N0bFx0PSBjb21wYXRfcHRyX2lvY3RsLFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjQ0NzpcdC5vcGVuICAgICAgICAgICA9IHZob3N0X3Njc2lfb3BlbixcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0NDgtXHQubGxzZWVrXHRcdD0gbm9vcF9sbHNlZWssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNTYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSWRlbnRpZnlpbmcgdGhlIEtleSBDYWxsYmFja3MqKgoKQWxyaWdodCwgdGhhdCYjMzk7cyBpdCwgcGxhaW4gYXMgZGF5LiBUaGUgcGVubnkmIzM5O3MgZHJvcHBlZCwgSSYjMzk7dmUgZ290IGl0LiBUaGUgY3J1Y2lhbCBjYWxsYmFjayBmb3IgaGFuZGxpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9yICYjMzQ7b3BlbiYjMzQ7IG9wZXJhdGlvbiBpcywgdW5kZW5pYWJseSwgdGhlIGAub3BlbmAgY2FsbGJhY2suIFRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHdlJiMzOTtyZSBsb29raW5nIHRvIHVuZGVyc3RhbmQgYW5kIHdvcmsgd2l0aC4gQW5kLCBjb25uZWN0aW5nIHRoZSBkb3RzLCBgdmhvc3Rfc2NzaV9yZWxlYXNlYC4uLiB5ZXMsIHRoYXQgbXVzdCBiZSB0aGUgY29ycmVzcG9uZGluZyBgLnJlbGVhc2VgIGNhbGxiYWNrLiBUaG9zZSBuYW1lcywgdGhlIHdheSB0aGV5JiMzOTtyZSB1c2VkLCBldmVyeXRoaW5nIHBvaW50cyB0byB0aGVtIGFzIHRoZSBrZXkgcGllY2VzIHRvIG1ha2luZyB0aGUgYXJjaGl0ZWN0dXJlIHdvcmsuIE5vdyBJIGNhbiBzdGFydCBidWlsZGluZyBteSBtZW50YWwgbW9kZWwgb2YgdGhlIGxpZmVjeWNsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmhvc3Rfc2NzaV9yZWxlYXNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9zY3NpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9zY3NpLmM9NDExPXN0YXRpYyB2b2lkIHZob3N0X3Njc2lfbG9nX3dyaXRlKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLFxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQyOC1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjQyOTpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX3JlbGVhc2VfY21kX3JlcyhzdHJ1Y3Qgc2VfY21kICpzZV9jbWQpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00MzAte1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQ3MC1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjQ3MTpzdGF0aWMgdm9pZCB2aG9zdF9zY3NpX3JlbGVhc2VfdG1mX3JlcyhzdHJ1Y3Qgdmhvc3Rfc2NzaV90bWYgKnRtZilcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQ3Mi17XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9NDgzPXN0YXRpYyB2b2lkIHZob3N0X3Njc2lfZHJvcF9jbWRzKHN0cnVjdCB2aG9zdF9zY3NpX3ZpcnRxdWV1ZSAqc3ZxKVxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQ4OS1cdGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY21kLCB0LCBsbG5vZGUsIHR2Y19jb21wbGV0aW9uX2xpc3QpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo0OTA6XHRcdHZob3N0X3Njc2lfcmVsZWFzZV9jbWRfcmVzKFx1MDAyNmNtZC1cdTAwM2V0dmNfc2VfY21kKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQ5MS19XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00OTItXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo0OTM6c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9yZWxlYXNlX2NtZChzdHJ1Y3Qgc2VfY21kICpzZV9jbWQpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00OTQte1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTY5OT1zdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2NvbXBsZXRlX2NtZF93b3JrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTc0Ny1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjc0ODpcdFx0dmhvc3Rfc2NzaV9yZWxlYXNlX2NtZF9yZXMoc2VfY21kKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTc0OS1cdH1cbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0xMjk3PXZob3N0X3Njc2lfaGFuZGxlX3ZxKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTQ3OC1cdFx0XHR2cV9lcnIodnEsIFwmIzM0O0ZhaWxlZCB0byBhbGxvYyByZWN2IGlvdnNcXG5cJiMzNDspO1xuZHJpdmVycy92aG9zdC9zY3NpLmM6MTQ3OTpcdFx0XHR2aG9zdF9zY3NpX3JlbGVhc2VfY21kX3JlcyhcdTAwMjZjbWQtXHUwMDNldHZjX3NlX2NtZCk7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNDgwLVx0XHRcdGdvdG8gZXJyO1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE0ODUtXHRcdFx0aWYgKHVubGlrZWx5KHJldCkpIHtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE0ODY6XHRcdFx0XHR2aG9zdF9zY3NpX3JlbGVhc2VfY21kX3JlcyhcdTAwMjZjbWQtXHUwMDNldHZjX3NlX2NtZCk7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNDg3LVx0XHRcdFx0Z290byBlcnI7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTUwMS1cdFx0XHRcdHZxX2Vycih2cSwgXCYjMzQ7RmFpbGVkIHRvIG1hcCBpb3YgdG8gc2dsXFxuXCYjMzQ7KTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE1MDI6XHRcdFx0XHR2aG9zdF9zY3NpX3JlbGVhc2VfY21kX3JlcyhcdTAwMjZjbWQtXHUwMDNldHZjX3NlX2NtZCk7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNTAzLVx0XHRcdFx0Z290byBlcnI7XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9MTU2MT1zdGF0aWMgdm9pZCB2aG9zdF9zY3NpX3RtZl9yZXNwX3dvcmsoc3RydWN0IHZob3N0X3dvcmsgKndvcmspXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTU3OC1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE1Nzk6XHR2aG9zdF9zY3NpX3JlbGVhc2VfdG1mX3Jlcyh0bWYpO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMTU4MC19XG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9MTU4Mj1zdGF0aWMgdm9pZCB2aG9zdF9zY3NpX3RtZl9mbHVzaF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNTkyLVx0aWYgKCF2aG9zdF92cV93b3JrX3F1ZXVlKHZxLCBcdTAwMjZ0bWYtXHUwMDNldndvcmspKVxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTU5MzpcdFx0dmhvc3Rfc2NzaV9yZWxlYXNlX3RtZl9yZXModG1mKTtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE1OTQtfVxuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTE1OTc9dmhvc3Rfc2NzaV9oYW5kbGVfdG1mKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgc3RydWN0IHZob3N0X3Njc2lfdHBnICp0cGcsXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTYzNS1cdFx0XHRwcl9lcnIoXCYjMzQ7dmhvc3Rfc2NzaSB0bWYgbG9nIGFsbG9jYXRpb24gZXJyb3JcXG5cJiMzNDspO1xuZHJpdmVycy92aG9zdC9zY3NpLmM6MTYzNjpcdFx0XHR2aG9zdF9zY3NpX3JlbGVhc2VfdG1mX3Jlcyh0bWYpO1xuZHJpdmVycy92aG9zdC9zY3NpLmMtMTYzNy1cdFx0XHRnb3RvIHNlbmRfcmVqZWN0O1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE2NDQtXHRcdFx0ICAgICAgVEFSR0VUX1NDRl9BQ0tfS1JFRikgXHUwMDNjIDApIHtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE2NDU6XHRcdHZob3N0X3Njc2lfcmVsZWFzZV90bWZfcmVzKHRtZik7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNjQ2LVx0XHRnb3RvIHNlbmRfcmVqZWN0O1xuLS1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTIyODQ9c3RhdGljIGludCB2aG9zdF9zY3NpX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjM0Ny1cbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjIzNDg6c3RhdGljIGludCB2aG9zdF9zY3NpX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMzQ5LXtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0yNDQyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZob3N0X3Njc2lfZm9wcyA9IHtcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0NDMtXHQub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI0NDQ6XHQucmVsZWFzZSAgICAgICAgPSB2aG9zdF9zY3NpX3JlbGVhc2UsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDQ1LVx0LnVubG9ja2VkX2lvY3RsID0gdmhvc3Rfc2NzaV9pb2N0bCxcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0yOTI3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdGFyZ2V0X2NvcmVfZmFicmljX29wcyB2aG9zdF9zY3NpX29wcyA9IHtcbi0tXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yOTM1LVx0LnRwZ19jaGVja19wcm90X2ZhYnJpY19vbmx5XHQ9IHZob3N0X3Njc2lfY2hlY2tfcHJvdF9mYWJyaWNfb25seSxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI5MzY6XHQucmVsZWFzZV9jbWRcdFx0XHQ9IHZob3N0X3Njc2lfcmVsZWFzZV9jbWQsXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yOTM3LVx0LmNoZWNrX3N0b3BfZnJlZVx0XHQ9IHZob3N0X3Njc2lfY2hlY2tfc3RvcF9mcmVlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTQxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFZob3N0LVNDU0kgRHJpdmVyIGZvciBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGNvcmUgZnVuY3Rpb25zIGhlcmU6IGB2aG9zdF9zY3NpX29wZW5gIGFuZCBgdmhvc3Rfc2NzaV9yZWxlYXNlYC4gVGhleSYjMzk7cmUgdGhlIGNyaXRpY2FsIGVudHJ5IGFuZCBleGl0IHBvaW50cyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGlzIGRyaXZlci4gSSYjMzk7bSBhbHNvIG5vdGluZyB0aGF0IGB2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzYCBpcyBhIG1vZHVsZSBwYXJhbWV0ZXIgY2FsbGJhY2sg4oCTIHRoYXQmIzM5O3MgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcgZnJvbSBhIGNvbmZpZ3VyYXRpb24gcGVyc3BlY3RpdmUuCgpUaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBpcyBhIHdvcnRod2hpbGUgdGFyZ2V0IGZvciBmdXp6aW5nLiBHaXZlbiB0aGF0IGl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIGEgZHJpdmVyIGFuZCwgY3J1Y2lhbGx5LCBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggdGhlIGAvZGV2L3Zob3N0LXNjc2lgIGRldmljZSwgdGhlIGFuc3dlciBpcyBhIHJlc291bmRpbmcgeWVzLiBVc2VyLXNwYWNlIGFjY2VzcyBpcyBhIGJpZyByZWQgZmxhZyBpbiB0aGUgYmVzdCBvZiB3YXlzIGZvciBmdXp6aW5nOyB0aGUgcG90ZW50aWFsIGZvciBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMgaXMgaGlnaGVyLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgZW5hYmxlZDogYFZIT1NUX1NDU0lgIGFuZCBgVEFSR0VUX0NPUkVgLiBXYWl0IGEgbWludXRlLCBgVkhPU1RfU0NTSWAgZGVwZW5kcyBvbiBib3RoIGBUQVJHRVRfQ09SRWAgYW5kIGBFVkVOVEZEYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRob3NlIGRlcGVuZGVuY2llcyBhcmUgbWV0LiBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGlmIGBFVkVOVEZEYCBpcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGF0JiMzOTtzIGEgY3JpdGljYWwgZGVwZW5kZW5jeSBJIG5lZWQgdG8gY29uZmlybS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEVWRU5URkQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE4ODE9Y29uZmlnIFRJTUVSRkRcbi0tXG5pbml0L0tjb25maWctMTg4OS1cbmluaXQvS2NvbmZpZzoxODkwOmNvbmZpZyBFVkVOVEZEXG5pbml0L0tjb25maWctMTg5MS1cdGJvb2wgXCYjMzQ7RW5hYmxlIGV2ZW50ZmQoKSBzeXN0ZW0gY2FsbFwmIzM0OyBpZiBFWFBFUlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ3OAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDI2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25maWd1cmF0aW9uIGFuZCBSZWFjaGFiaWxpdHkgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgYFZIT1NUX1NDU0lgLiBZZXMsIGBFVkVOVEZEYCBpcyBkZWZpbml0ZWx5IGEga2V5IGNvbmZpZ3VyYXRpb24gaGVyZTsgaXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jay4gSXQmIzM5O3MgdXN1YWxseSBlbmFibGVkIGJ5IGRlZmF1bHQsIGJ1dCBpdCYjMzk7cyBhbHdheXMgYSBnb29kIHByYWN0aWNlIHRvIGV4cGxpY2l0bHkgaW5jbHVkZSBpdCwganVzdCB0byBiZSBzdXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgYFZIT1NUX1NDU0lgLCBgVEFSR0VUX0NPUkVgLCBhbmQgYEVWRU5URkRgIHNob3VsZCBiZSBlbmFibGVkLCBidXQgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMuCgpBaCwgcmlnaHQsIGBWSE9TVF9TQ1NJYCByZWxpZXMgb24gYFRBUkdFVF9DT1JFYCBhbmQgYEVWRU5URkRgLiBBbmQgYFRBUkdFVF9DT1JFYCBpbiB0dXJuIHJlbGllcyBvbiBgQkxPQ0tgLiBPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBuZWVkaW5nIGBWSE9TVF9TQ1NJYCwgYFRBUkdFVF9DT1JFYCwgYEVWRU5URkRgLCBhbmQgYEJMT0NLYCBhbGwgZW5hYmxlZC4gTm8gc3VycHJpc2VzIHRoZXJlOyBgQkxPQ0tgIGlzIGEgcHJldHR5IHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24uCgpOb3csIEkgbmVlZCB0byBjb25zaWRlciBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2VzLiBMZXQmIzM5O3MgbG9vayBhdCBgdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc2AuIEkgc2VlIGl0JiMzOTtzIGEgbW9kdWxlIHBhcmFtZXRlciBjYWxsYmFjay4gVGhhdCBtZWFucyBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyByZWFjaGFibGUgd2hlbiB3cml0aW5nIHRvIGAvc3lzL21vZHVsZS92aG9zdF9zY3NpL3BhcmFtZXRlcnMvbWF4X2lvX3Zxc2Agb3IgdXBvbiBtb2R1bGUgbG9hZGluZy4gQW5kIHRoYXQmIzM5O3MgZXhhY3RseSB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IgLSBmdXp6ZXJzIGNhbiBhYnNvbHV0ZWx5IGludGVyYWN0IHdpdGggc3lzZnMgZmlsZXMuIFNvIHRoYXQmIzM5O3MgYSByZWFjaGFibGUgcGF0aC4KCk15IGZvY3VzIHNob3VsZCBiZSBvbiBgdmhvc3Rfc2NzaV9vcGVuYCwgYHZob3N0X3Njc2lfcmVsZWFzZWAsIGFuZCBvZiBjb3Vyc2UsIGB2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzYCBhcyBhcmVhcyBvZiBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eS4gSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhvc2UgY29uZmlnIGFzc3VtcHRpb25zIGFnYWluIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTE9DSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZy00LSNcbmJsb2NrL0tjb25maWc6NTptZW51Y29uZmlnIEJMT0NLXG5ibG9jay9LY29uZmlnLTYtICAgICAgIGJvb2wgXCYjMzQ7RW5hYmxlIHRoZSBibG9jayBsYXllclwmIzM0OyBpZiBFWFBFUlRcbi0tXG5ibG9jay9LY29uZmlnPTI3PWlmIEJMT0NLXG5ibG9jay9LY29uZmlnLTI4LVxuYmxvY2svS2NvbmZpZzoyOTpjb25maWcgQkxPQ0tfTEVHQUNZX0FVVE9MT0FEXG5ibG9jay9LY29uZmlnLTMwLVx0Ym9vbCBcJiMzNDtMZWdhY3kgYXV0b2xvYWRpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmJsb2NrL0tjb25maWc9MjE0PWNvbmZpZyBCTEtfUE1cbi0tXG5ibG9jay9LY29uZmlnLTIxNy0jIGRvIG5vdCB1c2UgaW4gbmV3IGNvZGVcbmJsb2NrL0tjb25maWc6MjE4OmNvbmZpZyBCTE9DS19IT0xERVJfREVQUkVDQVRFRFxuYmxvY2svS2NvbmZpZy0yMTktXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDA2OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzMTUKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBCTE9DS2AgY29uZmlnLCB3aGljaCBJIHVuZGVyc3RhbmQgaXMgYSBjb3JlIGNvbmZpZ3VyYXRpb24gc2V0dGluZy4gTXkgbmV4dCB0aG91Z2h0IGlzLCBhcmUgdGhlcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgYmV5b25kIHRoZSBpbW1lZGlhdGUgY29uZmlndXJhdGlvbj8gTGV0JiMzOTtzIGRpZyBpbiBhIGJpdCBmdXJ0aGVyLgoKUmlnaHQsIGBWSE9TVF9TQ1NJYCBzZWxlY3RzIGJvdGggYFZIT1NUYCBhbmQgYFNHX1BPT0xgLiBHb3QgaXQuIEFuZCBgVEFSR0VUX0NPUkVgIHNlbGVjdHMgYSB3aG9sZSBidW5jaCBvZiB0aGluZ3M6IGBDT05GSUdGU19GU2AsIGBDUkNfVDEwRElGYCwgYFNDU0lfQ09NTU9OYCwgYW5kIGBTR0xfQUxMT0NgLiBXZSBjYW4gcHJvYmFibHkgc2tpcCBsaXN0aW5nIGFsbCB0aGUgKnNlbGVjdGVkKiBjb25maWdzOyB0aGF0IGZlZWxzIHJlZHVuZGFudCwgcmlnaHQ/IEl0JiMzOTtzIHRoZSBgZGVwZW5kcyBvbmAgY2xhdXNlcyB0aGF0IHJlYWxseSB0ZWxsIHRoZSBzdG9yeSBoZXJlLgoKVGhlcmVmb3JlLCBhcyBmYXIgYXMgdGhlICpwcmltYXJ5KiBjb25maWdzIHdlJiMzOTtyZSBjb25jZXJuZWQgYWJvdXQsIHdlJiMzOTtyZSByZWFsbHkgbG9va2luZyBhdCBgVkhPU1RfU0NTSWAgYW5kIGBUQVJHRVRfQ09SRWAuIFdlJiMzOTt2ZSBnb3R0ZW4gdG8gdGhlIGJvdHRvbSBvZiB0aGUgZGVwZW5kZW5jeSBjaGFpbi4KClRpbWUgdG8gbW92ZSBvbnRvIGxvb2tpbmcgYXQgaG93IHRoZXNlIHdvcmsuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgYHZob3N0X3Njc2lfc2V0X21heF9pb192cXNgIGluIGBkcml2ZXJzL3Zob3N0L3Njc2kuY2AgYW5kIGZpZ3VyZSBvdXQgaG93IHRoZXNlIGNvbmZpZ3MgYXJlIGFjdHVhbGx5IGltcGxlbWVudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9zY3NpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy92aG9zdC9zY3NpLmM9MjEyPXN0YXRpYyB1bnNpZ25lZCB2aG9zdF9zY3NpX21heF9pb192cXMgPSAxMjg7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMTMtXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyMTQ6c3RhdGljIGludCB2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzKGNvbnN0IGNoYXIgKnZhbCxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIxNS1cdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4tLVxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjIwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyB2aG9zdF9zY3NpX21heF9pb192cXNfb3AgPSB7XG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyMjE6XHQuc2V0ID0gdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3ZxcyxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIyMi1cdC5nZXQgPSBwYXJhbV9nZXRfdWludCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDY6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk4NwoJCQkJCQkJb3V0cHV0OiAxNTQKCQkJCQkJCXRob3VnaHRzOiAzMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyBpbiB0aGUgdmhvc3Qtc2NzaSBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgdmhvc3Qtc2NzaSBjb2RlLCBhbmQgdGhlIGZpcnN0IHRoaW5nIEkgbm90aWNlIGlzIHRoYXQgYHZob3N0X3Njc2lfb3BlbmAgYW5kIGB2aG9zdF9zY3NpX3JlbGVhc2VgIGFyZSBzdGF0aWMgZnVuY3Rpb25zLiBTdGF0aWMgZnVuY3Rpb25zIGFyZSBhbHdheXMgc29tZXRoaW5nIEkgcGF5IGF0dGVudGlvbiB0byBpbiB0aGlzIGNvbnRleHQuIENoZWNraW5nIHRob3NlIGZ1bmN0aW9ucywgSSBzZWUgdGhleSBhcmUsIGluZGVlZCwgc3RhdGljLCBidXQgdGhleSBhcmUgYWxzbyB1c2VkIGFzIGNhbGxiYWNrcyB3aXRoaW4gdGhlIGBmaWxlX29wZXJhdGlvbnNgIHN0cnVjdHVyZS4gVGhhdCBtYWtlcyB0aGVtIGFjY2Vzc2libGUgdGhyb3VnaCBvcGVuaW5nIGAvZGV2L3Zob3N0LXNjc2lgLCB3aGljaCBpcyBhIGtleSBkZXRhaWwuIEJlY2F1c2UgdGhleSBhcmVuJiMzOTt0IGlubGluZWQg4oCTIHRoZXkmIzM5O3JlIHBhc3NlZCBhcyBmdW5jdGlvbiBwb2ludGVycyDigJMgdGhleSBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIFBlcmZlY3QhIFRoYXQgbWFrZXMgdGhlbSBkaXJlY3RseSB0YXJnZXRhYmxlIGJ5IGZ1enplcnMuCgpOZXh0LCBJIG5lZWRlZCB0byBmaWd1cmUgb3V0IGlmIGB2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzYCB3YXMgaW5saW5lZCBvciBub3QuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWxzbyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLCB0aGlzIHRpbWUgdG8gYGtlcm5lbF9wYXJhbV9vcHNgLCBtZWFuaW5nIGl0JiMzOTtzICpub3QqIGlubGluZWQgZWl0aGVyLiBUaGF0IG1lYW5zIGl0IGNhbiBhbHNvIGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcy4KClRoZXJlZm9yZSwgdGhlIGtleSBzeW1ib2xzIEkgc2hvdWxkIGJlIGZvY3VzaW5nIG9uIGZvciBwb3RlbnRpYWwgZnV6emluZyBlZmZvcnRzIGFyZToKCiogICBgdmhvc3Rfc2NzaV9vcGVuYAoqICAgYHZob3N0X3Njc2lfcmVsZWFzZWAKKiAgIGB2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzYAoKQ29uc2lkZXJpbmcgdGhlIGNvbmZpZ3VyYXRpb24sIGBWSE9TVF9TQ1NJYCBhbmQgYFRBUkdFVF9DT1JFYCBzZWVtIGVzc2VudGlhbC4KClRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggYXBwZWFycyB0byBpbnZvbHZlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIHZob3N0LXNjc2kgZHJpdmVyJiMzOTtzIGluaXRpYWxpemF0aW9uIGFuZCB0ZWFyZG93biBwcm9jZWR1cmVzLiBTcGVjaWZpY2FsbHksIHRoZSBwYXRjaCBpcyBjaGFuZ2luZyBob3cgdGhlIGBtYXhfaW9fdnFzYCBtb2R1bGUgcGFyYW1ldGVyIGlzIGhhbmRsZWQgYW5kIGhvdyB2aXJ0cXVldWUgbWVtb3J5IGlzIGFsbG9jYXRlZCBhbmQgZGVhbGxvY2F0ZWQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMsIGFuZCBjcml0aWNhbGx5LCB0aGVzZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgdGhyb3VnaCB0aGUgYC9kZXYvdmhvc3Qtc2NzaWAgb3Blbi9yZWxlYXNlIG9wZXJhdGlvbnMgYW5kIHRoZSBzeXNmcyBtb2R1bGUgcGFyYW1ldGVycy4gR2l2ZW4gdGhhdCwgdGhlIG5ldyBiZWhhdmlvciBoZXJlIGlzIGNlcnRhaW5seSBzb21ldGhpbmcgSSB3b3VsZCB3YW50IHRvIHRhcmdldCB3aXRoIGZ1enppbmcuCgpMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwNjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkhPU1RfU0NTSSYjMzQ7LAogICAgJiMzNDtUQVJHRVRfQ09SRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zob3N0X3Njc2lfb3BlbiYjMzQ7LAogICAgJiMzNDt2aG9zdF9zY3NpX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7dmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3ZxcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIHRlYXJkb3duIG9mIHRoZSB2aG9zdC1zY3NpIGRyaXZlciwgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGhvdyB0aGUgYG1heF9pb192cXNgIG1vZHVsZSBwYXJhbWV0ZXIgaXMgaGFuZGxlZCBhbmQgaG93IG1lbW9yeSBpcyBhbGxvY2F0ZWQvZnJlZWQgZm9yIHZpcnRxdWV1ZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMgKHZpYSBgL2Rldi92aG9zdC1zY3NpYCBvcGVuL3JlbGVhc2UgYW5kIHN5c2ZzIG1vZHVsZSBwYXJhbWV0ZXJzKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkhPU1RfU0NTSSYjMzQ7LAogICAgJiMzNDtUQVJHRVRfQ09SRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zob3N0X3Njc2lfb3BlbiYjMzQ7LAogICAgJiMzNDt2aG9zdF9zY3NpX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7dmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3ZxcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIHRlYXJkb3duIG9mIHRoZSB2aG9zdC1zY3NpIGRyaXZlciwgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGhvdyB0aGUgYG1heF9pb192cXNgIG1vZHVsZSBwYXJhbWV0ZXIgaXMgaGFuZGxlZCBhbmQgaG93IG1lbW9yeSBpcyBhbGxvY2F0ZWQvZnJlZWQgZm9yIHZpcnRxdWV1ZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMgKHZpYSBgL2Rldi92aG9zdC1zY3NpYCBvcGVuL3JlbGVhc2UgYW5kIHN5c2ZzIG1vZHVsZSBwYXJhbWV0ZXJzKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjMwOjQ4LjYyNTkyOTUxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUzNTc1MjA0MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkhPU1RfU0NTSVwiLFxuICAgIFwiVEFSR0VUX0NPUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aG9zdF9zY3NpX29wZW5cIixcbiAgICBcInZob3N0X3Njc2lfcmVsZWFzZVwiLFxuICAgIFwidmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgdGVhcmRvd24gb2YgdGhlIHZob3N0LXNjc2kgZHJpdmVyLCBzcGVjaWZpY2FsbHkgY2hhbmdpbmcgaG93IHRoZSBgbWF4X2lvX3Zxc2AgbW9kdWxlIHBhcmFtZXRlciBpcyBoYW5kbGVkIGFuZCBob3cgbWVtb3J5IGlzIGFsbG9jYXRlZC9mcmVlZCBmb3IgdmlydHF1ZXVlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29kZSBwYXRocyAodmlhIGAvZGV2L3Zob3N0LXNjc2lgIG9wZW4vcmVsZWFzZSBhbmQgc3lzZnMgbW9kdWxlIHBhcmFtZXRlcnMpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjozMDo0OC42MjU5Mzg3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTczNTYxMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0NzViMTQ0MTBhNzAzYjdmNTE1OGJmNzI3OGZlNjRjYmM5NjUzNjAzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDIgMDY6MzA6NDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9zY3NpLmMgYi9kcml2ZXJzL3Zob3N0L3Njc2kuY1xcbmluZGV4IDlhMTI1M2I5ZDhjNTAuLmMxMzhjMjljZTNkZDQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92aG9zdC9zY3NpLmNcXG4rKysgYi9kcml2ZXJzL3Zob3N0L3Njc2kuY1xcbkBAIC0yMTAsNyArMjEwLDIwIEBAIHN0YXRpYyBjb25zdCBpbnQgdmhvc3Rfc2NzaV9iaXRzW10gPSB7XFxuICNkZWZpbmUgVkhPU1RfU0NTSV9NQVhfRVZFTlRcXHQxMjhcXG4gXFxuIHN0YXRpYyB1bnNpZ25lZCB2aG9zdF9zY3NpX21heF9pb192cXMgPSAxMjg7XFxuLW1vZHVsZV9wYXJhbV9uYW1lZChtYXhfaW9fdnFzLCB2aG9zdF9zY3NpX21heF9pb192cXMsIHVpbnQsIDA2NDQpO1xcbitcXG4rc3RhdGljIGludCB2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzKGNvbnN0IGNoYXIgKnZhbCxcXG4rXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4re1xcbitcXHRyZXR1cm4gcGFyYW1fc2V0X3VpbnRfbWlubWF4KHZhbCwga3AsIDEsIFZIT1NUX1NDU0lfTUFYX0lPX1ZRKTtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIHZob3N0X3Njc2lfbWF4X2lvX3Zxc19vcCA9IHtcXG4rXFx0LnNldCA9IHZob3N0X3Njc2lfc2V0X21heF9pb192cXMsXFxuK1xcdC5nZXQgPSBwYXJhbV9nZXRfdWludCxcXG4rfTtcXG4rXFxuK21vZHVsZV9wYXJhbV9jYihtYXhfaW9fdnFzLCBcXHUwMDI2dmhvc3Rfc2NzaV9tYXhfaW9fdnFzX29wLFxcbitcXHRcXHRcXHUwMDI2dmhvc3Rfc2NzaV9tYXhfaW9fdnFzLCAwNjQ0KTtcXG4gTU9EVUxFX1BBUk1fREVTQyhtYXhfaW9fdnFzLCBcXFwiU2V0IHRoZSBtYXggbnVtYmVyIG9mIElPIHZpcnRxdWV1ZXMgYSB2aG9zdCBzY3NpIGRldmljZSBjYW4gc3VwcG9ydC4gVGhlIGRlZmF1bHQgaXMgMTI4LiBUaGUgbWF4IGlzIDEwMjQuXFxcIik7XFxuIFxcbiBzdHJ1Y3Qgdmhvc3Rfc2NzaV92aXJ0cXVldWUge1xcbkBAIC0yMjczLDI5ICsyMjg2LDIxIEBAIHN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxcbiBcXHRzdHJ1Y3Qgdmhvc3Rfc2NzaV92aXJ0cXVldWUgKnN2cTtcXG4gXFx0c3RydWN0IHZob3N0X3Njc2kgKnZzO1xcbiBcXHRzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICoqdnFzO1xcbi1cXHRpbnQgciA9IC1FTk9NRU0sIGksIG52cXMgPSB2aG9zdF9zY3NpX21heF9pb192cXM7XFxuK1xcdGludCByID0gLUVOT01FTSwgaSwgbnZxcztcXG4gXFxuIFxcdHZzID0ga3Z6YWxsb2Nfb2JqKCp2cyk7XFxuIFxcdGlmICghdnMpXFxuIFxcdFxcdGdvdG8gZXJyX3ZzO1xcbiBcXHR2cy1cXHUwMDNlaW5saW5lX3NnX2NudCA9IHZob3N0X3Njc2lfaW5saW5lX3NnX2NudDtcXG4gXFxuLVxcdGlmIChudnFzIFxcdTAwM2UgVkhPU1RfU0NTSV9NQVhfSU9fVlEpIHtcXG4tXFx0XFx0cHJfZXJyKFxcXCJJbnZhbGlkIG1heF9pb192cXMgb2YgJWQuIFVzaW5nICVkLlxcXFxuXFxcIiwgbnZxcyxcXG4tXFx0XFx0ICAgICAgIFZIT1NUX1NDU0lfTUFYX0lPX1ZRKTtcXG4tXFx0XFx0bnZxcyA9IFZIT1NUX1NDU0lfTUFYX0lPX1ZRO1xcbi1cXHR9IGVsc2UgaWYgKG52cXMgPT0gMCkge1xcbi1cXHRcXHRwcl9lcnIoXFxcIkludmFsaWQgbWF4X2lvX3ZxcyBvZiAlZC4gVXNpbmcgMS5cXFxcblxcXCIsIG52cXMpO1xcbi1cXHRcXHRudnFzID0gMTtcXG4tXFx0fVxcbi1cXHRudnFzICs9IFZIT1NUX1NDU0lfVlFfSU87XFxuK1xcdG52cXMgPSB2aG9zdF9zY3NpX21heF9pb192cXMgKyBWSE9TVF9TQ1NJX1ZRX0lPO1xcbiBcXG4gXFx0dnMtXFx1MDAzZW9sZF9pbmZsaWdodCA9IGttYWxsb2Nfb2JqcygqdnMtXFx1MDAzZW9sZF9pbmZsaWdodCwgbnZxcyxcXG4gXFx0XFx0XFx0XFx0XFx0R0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xcbiBcXHRpZiAoIXZzLVxcdTAwM2VvbGRfaW5mbGlnaHQpXFxuIFxcdFxcdGdvdG8gZXJyX2luZmxpZ2h0O1xcbiBcXG4tXFx0dnMtXFx1MDAzZXZxcyA9IGttYWxsb2Nfb2JqcygqdnMtXFx1MDAzZXZxcywgbnZxcywgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xcbitcXHR2cy1cXHUwMDNldnFzID0ga3Z6YWxsb2Nfb2JqcygqdnMtXFx1MDAzZXZxcywgbnZxcyk7XFxuIFxcdGlmICghdnMtXFx1MDAzZXZxcylcXG4gXFx0XFx0Z290byBlcnJfdnFzO1xcbiBcXG5AQCAtMjMzMSw3ICsyMzM2LDcgQEAgc3RhdGljIGludCB2aG9zdF9zY3NpX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXFxuIFxcdHJldHVybiAwO1xcbiBcXG4gZXJyX2xvY2FsX3ZxczpcXG4tXFx0a2ZyZWUodnMtXFx1MDAzZXZxcyk7XFxuK1xcdGt2ZnJlZSh2cy1cXHUwMDNldnFzKTtcXG4gZXJyX3ZxczpcXG4gXFx0a2ZyZWUodnMtXFx1MDAzZW9sZF9pbmZsaWdodCk7XFxuIGVycl9pbmZsaWdodDpcXG5AQCAtMjM1Miw3ICsyMzU3LDcgQEAgc3RhdGljIGludCB2aG9zdF9zY3NpX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXFxuIFxcdHZob3N0X2Rldl9zdG9wKFxcdTAwMjZ2cy1cXHUwMDNlZGV2KTtcXG4gXFx0dmhvc3RfZGV2X2NsZWFudXAoXFx1MDAyNnZzLVxcdTAwM2VkZXYpO1xcbiBcXHRrZnJlZSh2cy1cXHUwMDNlZGV2LnZxcyk7XFxuLVxcdGtmcmVlKHZzLVxcdTAwM2V2cXMpO1xcbitcXHRrdmZyZWUodnMtXFx1MDAzZXZxcyk7XFxuIFxcdGtmcmVlKHZzLVxcdTAwM2VvbGRfaW5mbGlnaHQpO1xcbiBcXHRrdmZyZWUodnMpO1xcbiBcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MzA6NDguOTI0MzgwMjk1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDUwNTkwNjAyOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkhPU1RfU0NTSVwiLFxuICAgIFwiVEFSR0VUX0NPUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aG9zdF9zY3NpX29wZW5cIixcbiAgICBcInZob3N0X3Njc2lfcmVsZWFzZVwiLFxuICAgIFwidmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgdGVhcmRvd24gb2YgdGhlIHZob3N0LXNjc2kgZHJpdmVyLCBzcGVjaWZpY2FsbHkgY2hhbmdpbmcgaG93IHRoZSBgbWF4X2lvX3Zxc2AgbW9kdWxlIHBhcmFtZXRlciBpcyBoYW5kbGVkIGFuZCBob3cgbWVtb3J5IGlzIGFsbG9jYXRlZC9mcmVlZCBmb3IgdmlydHF1ZXVlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29kZSBwYXRocyAodmlhIGAvZGV2L3Zob3N0LXNjc2lgIG9wZW4vcmVsZWFzZSBhbmQgc3lzZnMgbW9kdWxlIHBhcmFtZXRlcnMpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NzViMTQ0MTBhNzAzYjdmNTE1OGJmNzI3OGZlNjRjYmM5NjUzNjAzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMiAwNjozMDo0NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3Qvc2NzaS5jIGIvZHJpdmVycy92aG9zdC9zY3NpLmNcbmluZGV4IDlhMTI1M2I5ZDhjNTAuLmMxMzhjMjljZTNkZDQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Zob3N0L3Njc2kuY1xuKysrIGIvZHJpdmVycy92aG9zdC9zY3NpLmNcbkBAIC0yMTAsNyArMjEwLDIwIEBAIHN0YXRpYyBjb25zdCBpbnQgdmhvc3Rfc2NzaV9iaXRzW10gPSB7XG4gI2RlZmluZSBWSE9TVF9TQ1NJX01BWF9FVkVOVFx0MTI4XG4gXG4gc3RhdGljIHVuc2lnbmVkIHZob3N0X3Njc2lfbWF4X2lvX3ZxcyA9IDEyODtcbi1tb2R1bGVfcGFyYW1fbmFtZWQobWF4X2lvX3Zxcywgdmhvc3Rfc2NzaV9tYXhfaW9fdnFzLCB1aW50LCAwNjQ0KTtcbitcbitzdGF0aWMgaW50IHZob3N0X3Njc2lfc2V0X21heF9pb192cXMoY29uc3QgY2hhciAqdmFsLFxuK1x0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbit7XG4rXHRyZXR1cm4gcGFyYW1fc2V0X3VpbnRfbWlubWF4KHZhbCwga3AsIDEsIFZIT1NUX1NDU0lfTUFYX0lPX1ZRKTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIHZob3N0X3Njc2lfbWF4X2lvX3Zxc19vcCA9IHtcbitcdC5zZXQgPSB2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzLFxuK1x0LmdldCA9IHBhcmFtX2dldF91aW50LFxuK307XG4rXG4rbW9kdWxlX3BhcmFtX2NiKG1heF9pb192cXMsIFx1MDAyNnZob3N0X3Njc2lfbWF4X2lvX3Zxc19vcCxcbitcdFx0XHUwMDI2dmhvc3Rfc2NzaV9tYXhfaW9fdnFzLCAwNjQ0KTtcbiBNT0RVTEVfUEFSTV9ERVNDKG1heF9pb192cXMsIFwiU2V0IHRoZSBtYXggbnVtYmVyIG9mIElPIHZpcnRxdWV1ZXMgYSB2aG9zdCBzY3NpIGRldmljZSBjYW4gc3VwcG9ydC4gVGhlIGRlZmF1bHQgaXMgMTI4LiBUaGUgbWF4IGlzIDEwMjQuXCIpO1xuIFxuIHN0cnVjdCB2aG9zdF9zY3NpX3ZpcnRxdWV1ZSB7XG5AQCAtMjI3MywyOSArMjI4NiwyMSBAQCBzdGF0aWMgaW50IHZob3N0X3Njc2lfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcbiBcdHN0cnVjdCB2aG9zdF9zY3NpX3ZpcnRxdWV1ZSAqc3ZxO1xuIFx0c3RydWN0IHZob3N0X3Njc2kgKnZzO1xuIFx0c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqKnZxcztcbi1cdGludCByID0gLUVOT01FTSwgaSwgbnZxcyA9IHZob3N0X3Njc2lfbWF4X2lvX3ZxcztcbitcdGludCByID0gLUVOT01FTSwgaSwgbnZxcztcbiBcbiBcdHZzID0ga3Z6YWxsb2Nfb2JqKCp2cyk7XG4gXHRpZiAoIXZzKVxuIFx0XHRnb3RvIGVycl92cztcbiBcdHZzLVx1MDAzZWlubGluZV9zZ19jbnQgPSB2aG9zdF9zY3NpX2lubGluZV9zZ19jbnQ7XG4gXG4tXHRpZiAobnZxcyBcdTAwM2UgVkhPU1RfU0NTSV9NQVhfSU9fVlEpIHtcbi1cdFx0cHJfZXJyKFwiSW52YWxpZCBtYXhfaW9fdnFzIG9mICVkLiBVc2luZyAlZC5cXG5cIiwgbnZxcyxcbi1cdFx0ICAgICAgIFZIT1NUX1NDU0lfTUFYX0lPX1ZRKTtcbi1cdFx0bnZxcyA9IFZIT1NUX1NDU0lfTUFYX0lPX1ZRO1xuLVx0fSBlbHNlIGlmIChudnFzID09IDApIHtcbi1cdFx0cHJfZXJyKFwiSW52YWxpZCBtYXhfaW9fdnFzIG9mICVkLiBVc2luZyAxLlxcblwiLCBudnFzKTtcbi1cdFx0bnZxcyA9IDE7XG4tXHR9XG4tXHRudnFzICs9IFZIT1NUX1NDU0lfVlFfSU87XG4rXHRudnFzID0gdmhvc3Rfc2NzaV9tYXhfaW9fdnFzICsgVkhPU1RfU0NTSV9WUV9JTztcbiBcbiBcdHZzLVx1MDAzZW9sZF9pbmZsaWdodCA9IGttYWxsb2Nfb2JqcygqdnMtXHUwMDNlb2xkX2luZmxpZ2h0LCBudnFzLFxuIFx0XHRcdFx0XHRHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7XG4gXHRpZiAoIXZzLVx1MDAzZW9sZF9pbmZsaWdodClcbiBcdFx0Z290byBlcnJfaW5mbGlnaHQ7XG4gXG4tXHR2cy1cdTAwM2V2cXMgPSBrbWFsbG9jX29ianMoKnZzLVx1MDAzZXZxcywgbnZxcywgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xuK1x0dnMtXHUwMDNldnFzID0ga3Z6YWxsb2Nfb2JqcygqdnMtXHUwMDNldnFzLCBudnFzKTtcbiBcdGlmICghdnMtXHUwMDNldnFzKVxuIFx0XHRnb3RvIGVycl92cXM7XG4gXG5AQCAtMjMzMSw3ICsyMzM2LDcgQEAgc3RhdGljIGludCB2aG9zdF9zY3NpX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpXG4gXHRyZXR1cm4gMDtcbiBcbiBlcnJfbG9jYWxfdnFzOlxuLVx0a2ZyZWUodnMtXHUwMDNldnFzKTtcbitcdGt2ZnJlZSh2cy1cdTAwM2V2cXMpO1xuIGVycl92cXM6XG4gXHRrZnJlZSh2cy1cdTAwM2VvbGRfaW5mbGlnaHQpO1xuIGVycl9pbmZsaWdodDpcbkBAIC0yMzUyLDcgKzIzNTcsNyBAQCBzdGF0aWMgaW50IHZob3N0X3Njc2lfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcbiBcdHZob3N0X2Rldl9zdG9wKFx1MDAyNnZzLVx1MDAzZWRldik7XG4gXHR2aG9zdF9kZXZfY2xlYW51cChcdTAwMjZ2cy1cdTAwM2VkZXYpO1xuIFx0a2ZyZWUodnMtXHUwMDNlZGV2LnZxcyk7XG4tXHRrZnJlZSh2cy1cdTAwM2V2cXMpO1xuK1x0a3ZmcmVlKHZzLVx1MDAzZXZxcyk7XG4gXHRrZnJlZSh2cy1cdTAwM2VvbGRfaW5mbGlnaHQpO1xuIFx0a3ZmcmVlKHZzKTtcbiBcdHJldHVybiAwO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MzA6NDguOTI0MzgyMDM1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcyNTI3NDY1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZob3N0IFNDU0kgRHJpdmVyIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIGBkcml2ZXJzL3Zob3N0L3Njc2kuY2AgZmlsZS4gSXQgc2VlbXMgdG8gYmUgcmV3b3JraW5nIGhvdyB0aGUgYG1heF9pb192cXNgIG1vZHVsZSBwYXJhbWV0ZXIgaXMgbWFuYWdlZC4gVGhleSdyZSBzd2l0Y2hpbmcgdG8gYG1vZHVsZV9wYXJhbV9jYmAgYW5kIGBwYXJhbV9zZXRfdWludF9taW5tYXhgLCB3aGljaCBpcyBhIG1vcmUgcm9idXN0IGFwcHJvYWNoLiBBbmQsIGZ1bmN0aW9uYWxseSwgdGhleSd2ZSByZXBsYWNlZCB0aGUgb2xkIGBrbWFsbG9jX29ianNgIHdpdGggYGt2emFsbG9jX29ianNgIGZvciBgdnMtXHUwMDNldnFzYCBhbmQgdGhlIGFjY29tcGFueWluZyBga2ZyZWVgIHRvIGBrdmZyZWVgLiBBbGwgcGVyZmVjdGx5IGFjY2VwdGFibGUgZnJvbSBhIGtlcm5lbCBkZXZlbG9wbWVudCBwZXJzcGVjdGl2ZS5cblxuTm93LCBteSBwcmltYXJ5IGludGVyZXN0IGlzLCBvZiBjb3Vyc2UsIHdoZXRoZXIgdGhpcyBvcGVucyBhbnkgbmV3IGZ1enppbmcgYXZlbnVlcy4gQW5kIGZyb20gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgdmhvc3QgYXJjaGl0ZWN0dXJlLCB0aGlzIGRyaXZlciBfc2hvdWxkXyBiZSBmdXp6YWJsZS4gVGhlIGB2aG9zdC1zY3NpYCBkcml2ZXIsIGFzIGEgdmlydHVhbCBob3N0IGRyaXZlciwgcHJvdmlkZXMgYSBjaGFyYWN0ZXIgZGV2aWNlLCBgL2Rldi92aG9zdC1zY3NpYC4gVGhhdCdzIGEgaHVnZSBjbHVlISBDaGFyYWN0ZXIgZGV2aWNlcywgZXNwZWNpYWxseSBvbmVzIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBhcmUgYWxtb3N0IGFsd2F5cyBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLiBXZSBjYW4gaW50ZXJhY3Qgd2l0aCBpdCB1c2luZyBpb2N0bHMsIHNvIHRoYXQncyBhbm90aGVyIGltcG9ydGFudCBwb2ludC5cblxuTGV0J3MgcXVpY2tseSBjaGVjayB0aGUgY29uZmlndXJhdGlvbi4gSSB3YW50IHRvIGNvbmZpcm0gdGhhdCBgZHJpdmVycy92aG9zdC9zY3NpLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19WSE9TVF9TQ1NJYCBpcyBlbmFibGVkLiBJZiBpdCBpcywgdGhlbiB0aGUgZHJpdmVyIGlzIHByZXNlbnQsIGFuZCB3ZSBjYW4gdGFyZ2V0IGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDE5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MzA6NTMuNjQ5NjYwMDczWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODk1MzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlZIT1NUX1NDU0lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L01ha2VmaWxlPTM9dmhvc3RfbmV0LXkgOj0gbmV0Lm9cXG5kcml2ZXJzL3Zob3N0L01ha2VmaWxlLTQtXFxuZHJpdmVycy92aG9zdC9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19WSE9TVF9TQ1NJKSArPSB2aG9zdF9zY3NpLm9cXG5kcml2ZXJzL3Zob3N0L01ha2VmaWxlLTYtdmhvc3Rfc2NzaS15IDo9IHNjc2kub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjozMDo1My42OTQ1NjAwMDJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDA2NTQ2OTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBDT05GSUdfVkhPU1RfU0NTSWAgRGVwZW5kZW5jaWVzKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byBgQ09ORklHX1ZIT1NUX1NDU0lgLiBHaXZlbiBteSBleHBlcmllbmNlIHdpdGggdGhlIHZob3N0IHN1YnN5c3RlbSwgSSBpbW1lZGlhdGVseSB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBsb3ctbGV2ZWwgaW50ZXJhY3Rpb25zIOKAkyB3aGF0IG90aGVyIGtlcm5lbCBjb21wb25lbnRzIGFyZSAqcmVxdWlyZWQqIGZvciBgQ09ORklHX1ZIT1NUX1NDU0lgIHRvIGV2ZW4gZnVuY3Rpb24/IElzIGl0IHN0cmljdGx5IHZob3N0IGNvcmUsIG9yIGRvZXMgaXQgcmVhY2ggaW50byBhcmVhcyBsaWtlIHRoZSBTQ1NJIHN1YnN5c3RlbSBkaXJlY3RseT8gSSBuZWVkIHRvIGNoZWNrIGZvciB0aGUgb2J2aW91cyBjdWxwcml0cywgb2YgY291cnNlOiB2aG9zdC1uZXQsIHZob3N0LWJsaywgYW5kIGFzc29jaWF0ZWQgZGV2aWNlIGRyaXZlcnMgdGhhdCB3b3VsZCB0eXBpY2FsbHkgaW50ZXJmYWNlIHdpdGggdmhvc3QuIEJ1dCBJIGFsc28gbmVlZCB0byBiZSBjZXJ0YWluIGFib3V0IHRoZSBpbnRyaWNhY2llcyBvZiB0aGUgU0NTSSBsYXllciBhbmQgd2hldGhlciBhbnl0aGluZyB0aGVyZSB3b3VsZCBpbnRyb2R1Y2UgaW50ZXJkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBrbm93IHRoZSBlbnRpcmUgc3RhY2sgc28gSSBjYW4gYmVzdCBjb25maWd1cmUgdGhlIGVudmlyb25tZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjYwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MzA6NTYuNzAxMTA4NzU2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMzM5MTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWSE9TVF9TQ1NJXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3QvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L0tjb25maWc9MzQ9Y29uZmlnIFZIT1NUX05FVFxcbi0tXFxuZHJpdmVycy92aG9zdC9LY29uZmlnLTQ1LVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZzo0Njpjb25maWcgVkhPU1RfU0NTSVxcbmRyaXZlcnMvdmhvc3QvS2NvbmZpZy00Ny1cXHR0cmlzdGF0ZSBcXFwiVkhPU1RfU0NTSSBUQ00gZmFicmljIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MzA6NTYuNzQ0NDU0Nzc1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk1MDg5ODkwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGBWSE9TVF9TQ1NJYCBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgZHJpbGwgZG93biBpbnRvIHRoZSBrZXJuZWwncyBLY29uZmlnIHN5c3RlbSBhbmQgbG9jYXRlIHRoZSBwcmVjaXNlIGRlZmluaXRpb24gZm9yIGBWSE9TVF9TQ1NJYC4gTm8gaGFuZC13YXZpbmcgaGVyZSwgSSB3YW50IHRoZSBmdWxsLCB1bnZhcm5pc2hlZCB0cnV0aC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmV4YWN0bHkqIGhvdyB0aGlzIGZlYXR1cmUgaXMgZGVmaW5lZCwgd2hhdCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZSwgYW5kIHdoYXQgaW1wbGljYXRpb25zIGl0cyBwcmVzZW5jZSAob3IgYWJzZW5jZSkgY2FycmllcyB3aXRoaW4gdGhlIGJyb2FkZXIgdmhvc3QgZWNvc3lzdGVtLiBJJ20gdGhpbmtpbmcsIFwiSXMgaXQgYSBjb3JlIGJ1aWxkaW5nIGJsb2NrLCBhIG1vZHVsYXIgYWRkLW9uLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT9cIiBBIGRldGFpbGVkIGV4YW1pbmF0aW9uIG9mIGBkcml2ZXJzL3Zob3N0L0tjb25maWdgIGlzIHRoZSBiZXN0IHN0YXJ0aW5nIHBvaW50IHRvIGJ1aWxkIGEgdHJ1bHkgcm9idXN0IHVuZGVyc3RhbmRpbmcuIEl0J3MgdGhlIG9ubHkgd2F5IHRvIGJlIHN1cmUgSSBoYXZlIGFuIGFjY3VyYXRlIG1lbnRhbCBtb2RlbCBvZiBpdHMgcm9sZSBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTgzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MzA6NTkuNjk1MzU1NzNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Zob3N0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDYsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDY6XFx0Y29uZmlnIFZIT1NUX1NDU0lcXG4gIDQ3OlxcdFxcdHRyaXN0YXRlIFxcXCJWSE9TVF9TQ1NJIFRDTSBmYWJyaWMgZHJpdmVyXFxcIlxcbiAgNDg6XFx0XFx0ZGVwZW5kcyBvbiBUQVJHRVRfQ09SRSBcXHUwMDI2XFx1MDAyNiBFVkVOVEZEXFxuICA0OTpcXHRcXHRzZWxlY3QgVkhPU1RcXG4gIDUwOlxcdFxcdHNlbGVjdCBTR19QT09MXFxuICA1MTpcXHRcXHRkZWZhdWx0IG5cXG4gIDUyOlxcdFxcdGhlbHBcXG4gIDUzOlxcdFxcdFNheSBNIGhlcmUgdG8gZW5hYmxlIHRoZSB2aG9zdF9zY3NpIFRDTSBmYWJyaWMgbW9kdWxlXFxuICA1NDpcXHRcXHRmb3IgdXNlIHdpdGggdmlydGlvLXNjc2kgZ3Vlc3RzXFxuICA1NTpcXHRcXG4gIDU2OlxcdGNvbmZpZyBWSE9TVF9WU09DS1xcbiAgNTc6XFx0XFx0dHJpc3RhdGUgXFxcInZob3N0IHZpcnRpby12c29jayBkcml2ZXJcXFwiXFxuICA1ODpcXHRcXHRkZXBlbmRzIG9uIFZTT0NLRVRTIFxcdTAwMjZcXHUwMDI2IEVWRU5URkRcXG4gIDU5OlxcdFxcdHNlbGVjdCBWSE9TVFxcbiAgNjA6XFx0XFx0c2VsZWN0IFZJUlRJT19WU09DS0VUU19DT01NT05cXG4gIDYxOlxcdFxcdGRlZmF1bHQgblxcbiAgNjI6XFx0XFx0aGVscFxcbiAgNjM6XFx0XFx0VGhpcyBrZXJuZWwgbW9kdWxlIGNhbiBiZSBsb2FkZWQgaW4gdGhlIGhvc3Qga2VybmVsIHRvIHByb3ZpZGUgQUZfVlNPQ0tcXG4gIDY0OlxcdFxcdHNvY2tldHMgZm9yIGNvbW11bmljYXRpbmcgd2l0aCBndWVzdHMuICBUaGUgZ3Vlc3RzIG11c3QgaGF2ZSB0aGVcXG4gIDY1OlxcdFxcdHZpcnRpb190cmFuc3BvcnQua28gZHJpdmVyIGxvYWRlZCB0byB1c2UgdGhlIHZpcnRpby12c29jayBkZXZpY2UuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjMwOjU5LjY5NTQxNzE3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk5MjI0MjQyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipUaGlua2luZyBUaHJvdWdoIFRhcmdldCBDb3JlIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UncmUgZGVhbGluZyB3aXRoIGRlcGVuZGVuY2llcywgYW5kIHRoZSBrZXkgb25lcyBhcmUgYFRBUkdFVF9DT1JFYCBhbmQgYEVWRU5URkRgLiBJbW1lZGlhdGVseSwgbXkgYnJhaW4gZ29lcyB0byB0aGUgY29uZmlndXJhdGlvbiBzcGFjZSwgd2hlcmUgYFRBUkdFVF9DT1JFYCBpcyBkZWZpbmVkIGFzIGBDT05GSUdfVEFSR0VUX0NPUkVgLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGBUQVJHRVRfQ09SRWAgaXMgbGlrZWx5IGEgaGlnaGVyLWxldmVsIGNvbmNlcHQgYW5kIGBDT05GSUdfVEFSR0VUX0NPUkVgIGlzIHRoZSBhY3R1YWwgY29uZmlndXJhdGlvbiBvcHRpb24gY29udHJvbGxpbmcgaXQuIE15IG5leHQgc3RlcD8gSSBuZWVkIHRvIGRlbHZlIGludG8gdGhlIGRlcGVuZGVuY2llcyBvZiBgVEFSR0VUX0NPUkVgIC0gdGhhdCdzIHdoZXJlIHRoZSByZWFsIGluc2lnaHRzIHdpbGwgYmUuIFdoYXQgb3RoZXIgbW9kdWxlcywgbGlicmFyaWVzLCBvciBzeXN0ZW0gY29tcG9uZW50cyByZWx5IG9uIGl0PyBXaGF0IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdGllZCB0byBpdHMgc3VjY2Vzc2Z1bCBvcGVyYXRpb24/IFVuZGVyc3RhbmRpbmcgdGhlc2UgcmVsYXRpb25zaGlwcyB3aWxsIGJlIGtleSB0byB0cm91Ymxlc2hvb3RpbmcsIG9wdGltaXppbmcsIG9yIGJ1aWxkaW5nIG9uIHRoaXMgY29yZSBjb21wb25lbnQuIFRpbWUgdG8gc3RhcnQgZGlnZ2luZyFcblxuXG4iLCJJbnB1dFRva2VucyI6NDUyMywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MzE6MDIuNjg3NjYxNjc0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mjc4MTE2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVEFSR0VUX0NPUkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy90YXJnZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3RhcmdldC9LY29uZmlnLTItXFxuZHJpdmVycy90YXJnZXQvS2NvbmZpZzozOm1lbnVjb25maWcgVEFSR0VUX0NPUkVcXG5kcml2ZXJzL3RhcmdldC9LY29uZmlnLTQtXFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgVGFyZ2V0IENvcmUgTW9kIChUQ00pIGFuZCBDb25maWdGUyBJbmZyYXN0cnVjdHVyZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MzE6MDIuNzMwNDUwNTUzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NTA0NzA3MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBUYXJnZXQgS2NvbmZpZyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIHRhcmdldCBkZXZpY2UgZHJpdmVycywgYW5kIHdoZXJlIGJldHRlciB0byBzdGFydCB0aGFuIHdpdGggdGhlIGBkcml2ZXJzL3RhcmdldC9LY29uZmlnYCBmaWxlPyBUaGlzIGlzIHRoZSBjZW50cmFsIGh1YiBmb3IgZGVmaW5pbmcgYW5kIG9yZ2FuaXppbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSB0YXJnZXQgZHJpdmVycy4gSSBrbm93IHRoaXMgZmlsZSBob2xkcyB0aGUga2V5IHRvIGhvdyB0aGVzZSBkcml2ZXJzIGFyZSBlbmFibGVkLCBkaXNhYmxlZCwgYW5kIGN1c3RvbWl6ZWQgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc3RydWN0dXJlLiBJJ20gaG9waW5nIHRvIGlkZW50aWZ5IHdoaWNoIGZlYXR1cmVzIGFyZSBhdmFpbGFibGUsIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBleGlzdCBiZXR3ZWVuIHRoZW0sIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGJyb2FkZXIgc3lzdGVtIGNvbmZpZ3VyYXRpb24uIEJhc2ljYWxseSwgSSdtIGxvb2tpbmcgZm9yIHRoZSBETkEgb2YgdGhlIHRhcmdldCBkcml2ZXIgY29uZmlndXJhdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgYmVnaW5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODQ4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MzE6MDUuNjgwOTIzODI4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdGFyZ2V0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdFxcbiAgIDM6XFx0bWVudWNvbmZpZyBUQVJHRVRfQ09SRVxcbiAgIDQ6XFx0XFx0dHJpc3RhdGUgXFxcIkdlbmVyaWMgVGFyZ2V0IENvcmUgTW9kIChUQ00pIGFuZCBDb25maWdGUyBJbmZyYXN0cnVjdHVyZVxcXCJcXG4gICA1OlxcdFxcdGRlcGVuZHMgb24gQkxPQ0tcXG4gICA2OlxcdFxcdHNlbGVjdCBDT05GSUdGU19GU1xcbiAgIDc6XFx0XFx0c2VsZWN0IENSQ19UMTBESUZcXG4gICA4OlxcdFxcdHNlbGVjdCBTQ1NJX0NPTU1PTlxcbiAgIDk6XFx0XFx0c2VsZWN0IFNHTF9BTExPQ1xcbiAgMTA6XFx0XFx0ZGVmYXVsdCBuXFxuICAxMTpcXHRcXHRoZWxwXFxuICAxMjpcXHRcXHRTYXkgWSBvciBNIGhlcmUgdG8gZW5hYmxlIHRoZSBUQ00gU3RvcmFnZSBFbmdpbmUgYW5kIENvbmZpZ0ZTIGVuYWJsZWRcXG4gIDEzOlxcdFxcdGNvbnRyb2wgcGF0aCBmb3IgdGFyZ2V0X2NvcmVfbW9kLiAgVGhpcyBpbmNsdWRlcyBidWlsdC1pbiBUQ00gUkFNRElTS1xcbiAgMTQ6XFx0XFx0c3Vic3lzdGVtIGxvZ2ljIGZvciB2aXJ0dWFsIExVTiAwIGFjY2Vzc1xcbiAgMTU6XFx0XFxuICAxNjpcXHRpZiBUQVJHRVRfQ09SRVxcbiAgMTc6XFx0XFxuICAxODpcXHRjb25maWcgVENNX0lCTE9DS1xcbiAgMTk6XFx0XFx0dHJpc3RhdGUgXFxcIlRDTS9JQkxPQ0sgU3Vic3lzdGVtIFBsdWdpbiBmb3IgTGludXgvQkxPQ0tcXFwiXFxuICAyMDpcXHRcXHRzZWxlY3QgQkxLX0RFVl9JTlRFR1JJVFlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MzE6MDUuNjgwOTg5NTg4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMzg1NzU3MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSB2aG9zdC1zY3NpIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIHRoaXMgcGF0Y2ggaXMgc3BlY2lmaWNhbGx5IGNvbmNlcm5lZCB3aXRoIGB2aG9zdC1zY3NpYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIHRoYXQgYFRBUkdFVF9DT1JFYCBpcyBhIGRlcGVuZGVuY3kgb2Ygc29tZXRoaW5nIGVsc2UsIGluIHRoaXMgY2FzZSwgYEJMT0NLYC4gVGhhdCdzIGltcG9ydGFudCB0byBrZWVwIGluIG1pbmQsIGFzIGFyZSBhbnkgcG90ZW50aWFsIGtub2NrLW9uIGVmZmVjdHMuIFRoZW4sIGBFVkVOVEZEYCBpcyB0eXBpY2FsbHkgZW5hYmxlZCwgc28gdGhhdCdzIGxpa2VseSBub3QgdGhlIHByaW1hcnkgY29uY2VybiBoZXJlLiBMb29rcyBsaWtlIGBWSE9TVF9TQ1NJYCBhbmQgYFRBUkdFVF9DT1JFYCBhcmUgdGhlIGtleSBjb25maWd1cmF0aW9ucyBpbiBwbGF5LlxuXG5UaGlzIHBhdGNoIGlzIG1vZGlmeWluZyBgdmhvc3Rfc2NzaV9vcGVuYCwgYHZob3N0X3Njc2lfcmVsZWFzZWAsIGFuZCBhbHNvIGB2aG9zdF9zY3NpX3NldF9tYXhfaW9fdnFzYCwgd2hpY2ggaXMgYSBtb2R1bGUgcGFyYW1ldGVyIGNhbGxiYWNrLiBUaGUgYHZob3N0X3Njc2lfc2V0X21heF9pb192cXNgIGNoYW5nZSBtaWdodCBiZSBpbnRlcmVzdGluZyBpbiB0ZXJtcyBvZiBwYXJhbWV0ZXIgdHVuaW5nLCBidXQgYHZob3N0X3Njc2lfb3BlbmAgYW5kIGB2aG9zdF9zY3NpX3JlbGVhc2VgIGFyZSB0aGUgZnVuY3Rpb25zIHRvIHJlYWxseSBmb2N1cyBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRob3NlIGhhdmUgY2hhbmdlZCBhbmQgd2h5LiBOb3csIGxldCdzIHNlZSwgYHZob3N0X3Njc2lfb3BlbmAgaXMgdGhlIGAub3BlbmAgY2FsbGJhY2sgb2YgdGhlIHZob3N0IHNjc2kgbWlzYyBkZXZpY2UsIHNvIHRoYXQgbWFrZXMgYSBsb3Qgb2Ygc2Vuc2UsIEkgc2hvdWxkIGxvb2sgYXQgdGhhdCBmdW5jdGlvbiBuZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzMyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MzE6MTAuMDE5NTY3MjYxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTgyOTkzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2aG9zdF9zY3NpX29wZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92aG9zdC9zY3NpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92aG9zdC9zY3NpLmM9MjIzMT1zdGF0aWMgaW50IHZob3N0X3Njc2lfc2V0X2ZlYXR1cmVzKHN0cnVjdCB2aG9zdF9zY3NpICp2cywgdTY0IGZlYXR1cmVzKVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjI4My1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyMjg0OnN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIyODUte1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjQ0Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aG9zdF9zY3NpX2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yNDQ2LVxcdC5jb21wYXRfaW9jdGxcXHQ9IGNvbXBhdF9wdHJfaW9jdGwsXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjQ0NzpcXHQub3BlbiAgICAgICAgICAgPSB2aG9zdF9zY3NpX29wZW4sXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ0OC1cXHQubGxzZWVrXFx0XFx0PSBub29wX2xsc2VlayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MzE6MTAuMDYxNDAyMzFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE0NzY5MjgzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKklkZW50aWZ5aW5nIHRoZSBLZXkgQ2FsbGJhY2tzKipcblxuQWxyaWdodCwgdGhhdCdzIGl0LCBwbGFpbiBhcyBkYXkuIFRoZSBwZW5ueSdzIGRyb3BwZWQsIEkndmUgZ290IGl0LiBUaGUgY3J1Y2lhbCBjYWxsYmFjayBmb3IgaGFuZGxpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9yIFwib3BlblwiIG9wZXJhdGlvbiBpcywgdW5kZW5pYWJseSwgdGhlIGAub3BlbmAgY2FsbGJhY2suIFRoYXQncyB0aGUgZnVuY3Rpb24gd2UncmUgbG9va2luZyB0byB1bmRlcnN0YW5kIGFuZCB3b3JrIHdpdGguIEFuZCwgY29ubmVjdGluZyB0aGUgZG90cywgYHZob3N0X3Njc2lfcmVsZWFzZWAuLi4geWVzLCB0aGF0IG11c3QgYmUgdGhlIGNvcnJlc3BvbmRpbmcgYC5yZWxlYXNlYCBjYWxsYmFjay4gVGhvc2UgbmFtZXMsIHRoZSB3YXkgdGhleSdyZSB1c2VkLCBldmVyeXRoaW5nIHBvaW50cyB0byB0aGVtIGFzIHRoZSBrZXkgcGllY2VzIHRvIG1ha2luZyB0aGUgYXJjaGl0ZWN0dXJlIHdvcmsuIE5vdyBJIGNhbiBzdGFydCBidWlsZGluZyBteSBtZW50YWwgbW9kZWwgb2YgdGhlIGxpZmVjeWNsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA1NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjMxOjE0LjIwOTA5ODA3N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE3MzA5NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3Rfc2NzaV9yZWxlYXNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdmhvc3Qvc2NzaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmhvc3Qvc2NzaS5jPTQxMT1zdGF0aWMgdm9pZCB2aG9zdF9zY3NpX2xvZ193cml0ZShzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSxcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQyOC1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo0Mjk6c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9yZWxlYXNlX2NtZF9yZXMoc3RydWN0IHNlX2NtZCAqc2VfY21kKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQzMC17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00NzAtXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NDcxOnN0YXRpYyB2b2lkIHZob3N0X3Njc2lfcmVsZWFzZV90bWZfcmVzKHN0cnVjdCB2aG9zdF9zY3NpX3RtZiAqdG1mKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQ3Mi17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz00ODM9c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9kcm9wX2NtZHMoc3RydWN0IHZob3N0X3Njc2lfdmlydHF1ZXVlICpzdnEpXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00ODktXFx0bGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjbWQsIHQsIGxsbm9kZSwgdHZjX2NvbXBsZXRpb25fbGlzdClcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo0OTA6XFx0XFx0dmhvc3Rfc2NzaV9yZWxlYXNlX2NtZF9yZXMoXFx1MDAyNmNtZC1cXHUwMDNldHZjX3NlX2NtZCk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtNDkxLX1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy00OTItXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6NDkzOnN0YXRpYyB2b2lkIHZob3N0X3Njc2lfcmVsZWFzZV9jbWQoc3RydWN0IHNlX2NtZCAqc2VfY21kKVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTQ5NC17XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz02OTk9c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV9jb21wbGV0ZV9jbWRfd29yayhzdHJ1Y3Qgdmhvc3Rfd29yayAqd29yaylcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTc0Ny1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzo3NDg6XFx0XFx0dmhvc3Rfc2NzaV9yZWxlYXNlX2NtZF9yZXMoc2VfY21kKTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy03NDktXFx0fVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MTI5Nz12aG9zdF9zY3NpX2hhbmRsZV92cShzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTQ3OC1cXHRcXHRcXHR2cV9lcnIodnEsIFxcXCJGYWlsZWQgdG8gYWxsb2MgcmVjdiBpb3ZzXFxcXG5cXFwiKTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxNDc5OlxcdFxcdFxcdHZob3N0X3Njc2lfcmVsZWFzZV9jbWRfcmVzKFxcdTAwMjZjbWQtXFx1MDAzZXR2Y19zZV9jbWQpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTE0ODAtXFx0XFx0XFx0Z290byBlcnI7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNDg1LVxcdFxcdFxcdGlmICh1bmxpa2VseShyZXQpKSB7XFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MTQ4NjpcXHRcXHRcXHRcXHR2aG9zdF9zY3NpX3JlbGVhc2VfY21kX3JlcyhcXHUwMDI2Y21kLVxcdTAwM2V0dmNfc2VfY21kKTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0xNDg3LVxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTUwMS1cXHRcXHRcXHRcXHR2cV9lcnIodnEsIFxcXCJGYWlsZWQgdG8gbWFwIGlvdiB0byBzZ2xcXFxcblxcXCIpO1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjE1MDI6XFx0XFx0XFx0XFx0dmhvc3Rfc2NzaV9yZWxlYXNlX2NtZF9yZXMoXFx1MDAyNmNtZC1cXHUwMDNldHZjX3NlX2NtZCk7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTUwMy1cXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTE1NjE9c3RhdGljIHZvaWQgdmhvc3Rfc2NzaV90bWZfcmVzcF93b3JrKHN0cnVjdCB2aG9zdF93b3JrICp3b3JrKVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTU3OC1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxNTc5OlxcdHZob3N0X3Njc2lfcmVsZWFzZV90bWZfcmVzKHRtZik7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTU4MC19XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0xNTgyPXN0YXRpYyB2b2lkIHZob3N0X3Njc2lfdG1mX2ZsdXNoX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTU5Mi1cXHRpZiAoIXZob3N0X3ZxX3dvcmtfcXVldWUodnEsIFxcdTAwMjZ0bWYtXFx1MDAzZXZ3b3JrKSlcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxNTkzOlxcdFxcdHZob3N0X3Njc2lfcmVsZWFzZV90bWZfcmVzKHRtZik7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTU5NC19XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0xNTk3PXZob3N0X3Njc2lfaGFuZGxlX3RtZihzdHJ1Y3Qgdmhvc3Rfc2NzaSAqdnMsIHN0cnVjdCB2aG9zdF9zY3NpX3RwZyAqdHBnLFxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTYzNS1cXHRcXHRcXHRwcl9lcnIoXFxcInZob3N0X3Njc2kgdG1mIGxvZyBhbGxvY2F0aW9uIGVycm9yXFxcXG5cXFwiKTtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxNjM2OlxcdFxcdFxcdHZob3N0X3Njc2lfcmVsZWFzZV90bWZfcmVzKHRtZik7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTYzNy1cXHRcXHRcXHRnb3RvIHNlbmRfcmVqZWN0O1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTY0NC1cXHRcXHRcXHQgICAgICBUQVJHRVRfU0NGX0FDS19LUkVGKSBcXHUwMDNjIDApIHtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoxNjQ1OlxcdFxcdHZob3N0X3Njc2lfcmVsZWFzZV90bWZfcmVzKHRtZik7XFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMTY0Ni1cXHRcXHRnb3RvIHNlbmRfcmVqZWN0O1xcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjI4ND1zdGF0aWMgaW50IHZob3N0X3Njc2lfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTIzNDctXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjM0ODpzdGF0aWMgaW50IHZob3N0X3Njc2lfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZilcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMzQ5LXtcXG4tLVxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jPTI0NDI9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmhvc3Rfc2NzaV9mb3BzID0ge1xcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI0NDMtXFx0Lm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjQ0NDpcXHQucmVsZWFzZSAgICAgICAgPSB2aG9zdF9zY3NpX3JlbGVhc2UsXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjQ0NS1cXHQudW5sb2NrZWRfaW9jdGwgPSB2aG9zdF9zY3NpX2lvY3RsLFxcbi0tXFxuZHJpdmVycy92aG9zdC9zY3NpLmM9MjkyNz1zdGF0aWMgY29uc3Qgc3RydWN0IHRhcmdldF9jb3JlX2ZhYnJpY19vcHMgdmhvc3Rfc2NzaV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yOTM1LVxcdC50cGdfY2hlY2tfcHJvdF9mYWJyaWNfb25seVxcdD0gdmhvc3Rfc2NzaV9jaGVja19wcm90X2ZhYnJpY19vbmx5LFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jOjI5MzY6XFx0LnJlbGVhc2VfY21kXFx0XFx0XFx0PSB2aG9zdF9zY3NpX3JlbGVhc2VfY21kLFxcbmRyaXZlcnMvdmhvc3Qvc2NzaS5jLTI5MzctXFx0LmNoZWNrX3N0b3BfZnJlZVxcdFxcdD0gdmhvc3Rfc2NzaV9jaGVja19zdG9wX2ZyZWUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjMxOjE0LjI1MDgzNDY3NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTg4NjI1Mjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFZob3N0LVNDU0kgRHJpdmVyIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBjb3JlIGZ1bmN0aW9ucyBoZXJlOiBgdmhvc3Rfc2NzaV9vcGVuYCBhbmQgYHZob3N0X3Njc2lfcmVsZWFzZWAuIFRoZXkncmUgdGhlIGNyaXRpY2FsIGVudHJ5IGFuZCBleGl0IHBvaW50cyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGlzIGRyaXZlci4gSSdtIGFsc28gbm90aW5nIHRoYXQgYHZob3N0X3Njc2lfc2V0X21heF9pb192cXNgIGlzIGEgbW9kdWxlIHBhcmFtZXRlciBjYWxsYmFjayDigJMgdGhhdCdzIHBvdGVudGlhbGx5IGludGVyZXN0aW5nIGZyb20gYSBjb25maWd1cmF0aW9uIHBlcnNwZWN0aXZlLlxuXG5UaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBpcyBhIHdvcnRod2hpbGUgdGFyZ2V0IGZvciBmdXp6aW5nLiBHaXZlbiB0aGF0IGl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gYSBkcml2ZXIgYW5kLCBjcnVjaWFsbHksIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCB0aGUgYC9kZXYvdmhvc3Qtc2NzaWAgZGV2aWNlLCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyB5ZXMuIFVzZXItc3BhY2UgYWNjZXNzIGlzIGEgYmlnIHJlZCBmbGFnIGluIHRoZSBiZXN0IG9mIHdheXMgZm9yIGZ1enppbmc7IHRoZSBwb3RlbnRpYWwgZm9yIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGVycm9ycyBpcyBoaWdoZXIuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgZW5hYmxlZDogYFZIT1NUX1NDU0lgIGFuZCBgVEFSR0VUX0NPUkVgLiBXYWl0IGEgbWludXRlLCBgVkhPU1RfU0NTSWAgZGVwZW5kcyBvbiBib3RoIGBUQVJHRVRfQ09SRWAgYW5kIGBFVkVOVEZEYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRob3NlIGRlcGVuZGVuY2llcyBhcmUgbWV0LiBJJ2xsIHF1aWNrbHkgY2hlY2sgaWYgYEVWRU5URkRgIGlzIGEgY29uZmlndXJhdGlvbiBvcHRpb24uIFRoYXQncyBhIGNyaXRpY2FsIGRlcGVuZGVuY3kgSSBuZWVkIHRvIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NDEsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MzE6MTguMjM5NDYyODA0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTY0MTEwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRVZFTlRGRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE4ODE9Y29uZmlnIFRJTUVSRkRcXG4tLVxcbmluaXQvS2NvbmZpZy0xODg5LVxcbmluaXQvS2NvbmZpZzoxODkwOmNvbmZpZyBFVkVOVEZEXFxuaW5pdC9LY29uZmlnLTE4OTEtXFx0Ym9vbCBcXFwiRW5hYmxlIGV2ZW50ZmQoKSBzeXN0ZW0gY2FsbFxcXCIgaWYgRVhQRVJUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjMxOjE4LjI4MTExMTQwNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDE4MjE5NDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNvbmZpZ3VyYXRpb24gYW5kIFJlYWNoYWJpbGl0eSBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgYFZIT1NUX1NDU0lgLiBZZXMsIGBFVkVOVEZEYCBpcyBkZWZpbml0ZWx5IGEga2V5IGNvbmZpZ3VyYXRpb24gaGVyZTsgaXQncyBhIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrLiBJdCdzIHVzdWFsbHkgZW5hYmxlZCBieSBkZWZhdWx0LCBidXQgaXQncyBhbHdheXMgYSBnb29kIHByYWN0aWNlIHRvIGV4cGxpY2l0bHkgaW5jbHVkZSBpdCwganVzdCB0byBiZSBzdXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgYFZIT1NUX1NDU0lgLCBgVEFSR0VUX0NPUkVgLCBhbmQgYEVWRU5URkRgIHNob3VsZCBiZSBlbmFibGVkLCBidXQgbGV0J3MganVzdCBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzLlxuXG5BaCwgcmlnaHQsIGBWSE9TVF9TQ1NJYCByZWxpZXMgb24gYFRBUkdFVF9DT1JFYCBhbmQgYEVWRU5URkRgLiBBbmQgYFRBUkdFVF9DT1JFYCBpbiB0dXJuIHJlbGllcyBvbiBgQkxPQ0tgLiBPa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IG5lZWRpbmcgYFZIT1NUX1NDU0lgLCBgVEFSR0VUX0NPUkVgLCBgRVZFTlRGRGAsIGFuZCBgQkxPQ0tgIGFsbCBlbmFibGVkLiBObyBzdXJwcmlzZXMgdGhlcmU7IGBCTE9DS2AgaXMgYSBwcmV0dHkgc3RhbmRhcmQgY29uZmlndXJhdGlvbi5cblxuTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlcy4gTGV0J3MgbG9vayBhdCBgdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc2AuIEkgc2VlIGl0J3MgYSBtb2R1bGUgcGFyYW1ldGVyIGNhbGxiYWNrLiBUaGF0IG1lYW5zIGl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUuIFNwZWNpZmljYWxseSwgaXQncyByZWFjaGFibGUgd2hlbiB3cml0aW5nIHRvIGAvc3lzL21vZHVsZS92aG9zdF9zY3NpL3BhcmFtZXRlcnMvbWF4X2lvX3Zxc2Agb3IgdXBvbiBtb2R1bGUgbG9hZGluZy4gQW5kIHRoYXQncyBleGFjdGx5IHdoYXQgSSdtIGxvb2tpbmcgZm9yIC0gZnV6emVycyBjYW4gYWJzb2x1dGVseSBpbnRlcmFjdCB3aXRoIHN5c2ZzIGZpbGVzLiBTbyB0aGF0J3MgYSByZWFjaGFibGUgcGF0aC5cblxuTXkgZm9jdXMgc2hvdWxkIGJlIG9uIGB2aG9zdF9zY3NpX29wZW5gLCBgdmhvc3Rfc2NzaV9yZWxlYXNlYCwgYW5kIG9mIGNvdXJzZSwgYHZob3N0X3Njc2lfc2V0X21heF9pb192cXNgIGFzIGFyZWFzIG9mIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LiBJJ20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIHRob3NlIGNvbmZpZyBhc3N1bXB0aW9ucyBhZ2FpbiB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDc4LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjMxOjIzLjI5OTMzMzk3N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTc2NDg4NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMT0NLXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svS2NvbmZpZy00LSNcXG5ibG9jay9LY29uZmlnOjU6bWVudWNvbmZpZyBCTE9DS1xcbmJsb2NrL0tjb25maWctNi0gICAgICAgYm9vbCBcXFwiRW5hYmxlIHRoZSBibG9jayBsYXllclxcXCIgaWYgRVhQRVJUXFxuLS1cXG5ibG9jay9LY29uZmlnPTI3PWlmIEJMT0NLXFxuYmxvY2svS2NvbmZpZy0yOC1cXG5ibG9jay9LY29uZmlnOjI5OmNvbmZpZyBCTE9DS19MRUdBQ1lfQVVUT0xPQURcXG5ibG9jay9LY29uZmlnLTMwLVxcdGJvb2wgXFxcIkxlZ2FjeSBhdXRvbG9hZGluZyBzdXBwb3J0XFxcIlxcbi0tXFxuYmxvY2svS2NvbmZpZz0yMTQ9Y29uZmlnIEJMS19QTVxcbi0tXFxuYmxvY2svS2NvbmZpZy0yMTctIyBkbyBub3QgdXNlIGluIG5ldyBjb2RlXFxuYmxvY2svS2NvbmZpZzoyMTg6Y29uZmlnIEJMT0NLX0hPTERFUl9ERVBSRUNBVEVEXFxuYmxvY2svS2NvbmZpZy0yMTktXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjozMToyMy4zOTY5ODg0OTVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA2OTYxMDkyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBCTE9DS2AgY29uZmlnLCB3aGljaCBJIHVuZGVyc3RhbmQgaXMgYSBjb3JlIGNvbmZpZ3VyYXRpb24gc2V0dGluZy4gTXkgbmV4dCB0aG91Z2h0IGlzLCBhcmUgdGhlcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgYmV5b25kIHRoZSBpbW1lZGlhdGUgY29uZmlndXJhdGlvbj8gTGV0J3MgZGlnIGluIGEgYml0IGZ1cnRoZXIuXG5cblJpZ2h0LCBgVkhPU1RfU0NTSWAgc2VsZWN0cyBib3RoIGBWSE9TVGAgYW5kIGBTR19QT09MYC4gR290IGl0LiBBbmQgYFRBUkdFVF9DT1JFYCBzZWxlY3RzIGEgd2hvbGUgYnVuY2ggb2YgdGhpbmdzOiBgQ09ORklHRlNfRlNgLCBgQ1JDX1QxMERJRmAsIGBTQ1NJX0NPTU1PTmAsIGFuZCBgU0dMX0FMTE9DYC4gV2UgY2FuIHByb2JhYmx5IHNraXAgbGlzdGluZyBhbGwgdGhlICpzZWxlY3RlZCogY29uZmlnczsgdGhhdCBmZWVscyByZWR1bmRhbnQsIHJpZ2h0PyBJdCdzIHRoZSBgZGVwZW5kcyBvbmAgY2xhdXNlcyB0aGF0IHJlYWxseSB0ZWxsIHRoZSBzdG9yeSBoZXJlLlxuXG5UaGVyZWZvcmUsIGFzIGZhciBhcyB0aGUgKnByaW1hcnkqIGNvbmZpZ3Mgd2UncmUgY29uY2VybmVkIGFib3V0LCB3ZSdyZSByZWFsbHkgbG9va2luZyBhdCBgVkhPU1RfU0NTSWAgYW5kIGBUQVJHRVRfQ09SRWAuIFdlJ3ZlIGdvdHRlbiB0byB0aGUgYm90dG9tIG9mIHRoZSBkZXBlbmRlbmN5IGNoYWluLlxuXG5UaW1lIHRvIG1vdmUgb250byBsb29raW5nIGF0IGhvdyB0aGVzZSB3b3JrLiBJJ2xsIG5lZWQgdG8gY2hlY2sgYHZob3N0X3Njc2lfc2V0X21heF9pb192cXNgIGluIGBkcml2ZXJzL3Zob3N0L3Njc2kuY2AgYW5kIGZpZ3VyZSBvdXQgaG93IHRoZXNlIGNvbmZpZ3MgYXJlIGFjdHVhbGx5IGltcGxlbWVudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzE1LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDA2OjMxOjI3LjQ2NjYwMjI0M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIxODg1NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Zob3N0L3Njc2kuYz0yMTI9c3RhdGljIHVuc2lnbmVkIHZob3N0X3Njc2lfbWF4X2lvX3ZxcyA9IDEyODtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYy0yMTMtXFxuZHJpdmVycy92aG9zdC9zY3NpLmM6MjE0OnN0YXRpYyBpbnQgdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxcyhjb25zdCBjaGFyICp2YWwsXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjE1LVxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuLS1cXG5kcml2ZXJzL3Zob3N0L3Njc2kuYz0yMjA9c3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIHZob3N0X3Njc2lfbWF4X2lvX3Zxc19vcCA9IHtcXG5kcml2ZXJzL3Zob3N0L3Njc2kuYzoyMjE6XFx0LnNldCA9IHZob3N0X3Njc2lfc2V0X21heF9pb192cXMsXFxuZHJpdmVycy92aG9zdC9zY3NpLmMtMjIyLVxcdC5nZXQgPSBwYXJhbV9nZXRfdWludCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDY6MzE6MjcuNTA4Nzk5OTQyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzOTYzMDc0MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyBpbiB0aGUgdmhvc3Qtc2NzaSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHZob3N0LXNjc2kgY29kZSwgYW5kIHRoZSBmaXJzdCB0aGluZyBJIG5vdGljZSBpcyB0aGF0IGB2aG9zdF9zY3NpX29wZW5gIGFuZCBgdmhvc3Rfc2NzaV9yZWxlYXNlYCBhcmUgc3RhdGljIGZ1bmN0aW9ucy4gU3RhdGljIGZ1bmN0aW9ucyBhcmUgYWx3YXlzIHNvbWV0aGluZyBJIHBheSBhdHRlbnRpb24gdG8gaW4gdGhpcyBjb250ZXh0LiBDaGVja2luZyB0aG9zZSBmdW5jdGlvbnMsIEkgc2VlIHRoZXkgYXJlLCBpbmRlZWQsIHN0YXRpYywgYnV0IHRoZXkgYXJlIGFsc28gdXNlZCBhcyBjYWxsYmFja3Mgd2l0aGluIHRoZSBgZmlsZV9vcGVyYXRpb25zYCBzdHJ1Y3R1cmUuIFRoYXQgbWFrZXMgdGhlbSBhY2Nlc3NpYmxlIHRocm91Z2ggb3BlbmluZyBgL2Rldi92aG9zdC1zY3NpYCwgd2hpY2ggaXMgYSBrZXkgZGV0YWlsLiBCZWNhdXNlIHRoZXkgYXJlbid0IGlubGluZWQg4oCTIHRoZXkncmUgcGFzc2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIOKAkyB0aGV5IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4gUGVyZmVjdCEgVGhhdCBtYWtlcyB0aGVtIGRpcmVjdGx5IHRhcmdldGFibGUgYnkgZnV6emVycy5cblxuTmV4dCwgSSBuZWVkZWQgdG8gZmlndXJlIG91dCBpZiBgdmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc2Agd2FzIGlubGluZWQgb3Igbm90LiBJdCBsb29rcyBsaWtlIGl0J3MgYWxzbyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLCB0aGlzIHRpbWUgdG8gYGtlcm5lbF9wYXJhbV9vcHNgLCBtZWFuaW5nIGl0J3MgKm5vdCogaW5saW5lZCBlaXRoZXIuIFRoYXQgbWVhbnMgaXQgY2FuIGFsc28gaGF2ZSBhIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLlxuXG5UaGVyZWZvcmUsIHRoZSBrZXkgc3ltYm9scyBJIHNob3VsZCBiZSBmb2N1c2luZyBvbiBmb3IgcG90ZW50aWFsIGZ1enppbmcgZWZmb3J0cyBhcmU6XG5cbiogICBgdmhvc3Rfc2NzaV9vcGVuYFxuKiAgIGB2aG9zdF9zY3NpX3JlbGVhc2VgXG4qICAgYHZob3N0X3Njc2lfc2V0X21heF9pb192cXNgXG5cbkNvbnNpZGVyaW5nIHRoZSBjb25maWd1cmF0aW9uLCBgVkhPU1RfU0NTSWAgYW5kIGBUQVJHRVRfQ09SRWAgc2VlbSBlc3NlbnRpYWwuXG5cblRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggYXBwZWFycyB0byBpbnZvbHZlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIHZob3N0LXNjc2kgZHJpdmVyJ3MgaW5pdGlhbGl6YXRpb24gYW5kIHRlYXJkb3duIHByb2NlZHVyZXMuIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGlzIGNoYW5naW5nIGhvdyB0aGUgYG1heF9pb192cXNgIG1vZHVsZSBwYXJhbWV0ZXIgaXMgaGFuZGxlZCBhbmQgaG93IHZpcnRxdWV1ZSBtZW1vcnkgaXMgYWxsb2NhdGVkIGFuZCBkZWFsbG9jYXRlZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcywgYW5kIGNyaXRpY2FsbHksIHRoZXNlIGNvZGUgcGF0aHMgYXJlIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBgL2Rldi92aG9zdC1zY3NpYCBvcGVuL3JlbGVhc2Ugb3BlcmF0aW9ucyBhbmQgdGhlIHN5c2ZzIG1vZHVsZSBwYXJhbWV0ZXJzLiBHaXZlbiB0aGF0LCB0aGUgbmV3IGJlaGF2aW9yIGhlcmUgaXMgY2VydGFpbmx5IHNvbWV0aGluZyBJIHdvdWxkIHdhbnQgdG8gdGFyZ2V0IHdpdGggZnV6emluZy5cblxuTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTg3LCJPdXRwdXRUb2tlbnMiOjE1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwNjozMTozMy45MDUxMDk2MzRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODMyNzc2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkhPU1RfU0NTSVwiLFxuICAgIFwiVEFSR0VUX0NPUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2aG9zdF9zY3NpX29wZW5cIixcbiAgICBcInZob3N0X3Njc2lfcmVsZWFzZVwiLFxuICAgIFwidmhvc3Rfc2NzaV9zZXRfbWF4X2lvX3Zxc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgdGVhcmRvd24gb2YgdGhlIHZob3N0LXNjc2kgZHJpdmVyLCBzcGVjaWZpY2FsbHkgY2hhbmdpbmcgaG93IHRoZSBgbWF4X2lvX3Zxc2AgbW9kdWxlIHBhcmFtZXRlciBpcyBoYW5kbGVkIGFuZCBob3cgbWVtb3J5IGlzIGFsbG9jYXRlZC9mcmVlZCBmb3IgdmlydHF1ZXVlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29kZSBwYXRocyAodmlhIGAvZGV2L3Zob3N0LXNjc2lgIG9wZW4vcmVsZWFzZSBhbmQgc3lzZnMgbW9kdWxlIHBhcmFtZXRlcnMpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZIT1NUX1NDU0lcIixcbiAgICBcIlRBUkdFVF9DT1JFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmhvc3Rfc2NzaV9vcGVuXCIsXG4gICAgXCJ2aG9zdF9zY3NpX3JlbGVhc2VcIixcbiAgICBcInZob3N0X3Njc2lfc2V0X21heF9pb192cXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIHRlYXJkb3duIG9mIHRoZSB2aG9zdC1zY3NpIGRyaXZlciwgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGhvdyB0aGUgYG1heF9pb192cXNgIG1vZHVsZSBwYXJhbWV0ZXIgaXMgaGFuZGxlZCBhbmQgaG93IG1lbW9yeSBpcyBhbGxvY2F0ZWQvZnJlZWQgZm9yIHZpcnRxdWV1ZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMgKHZpYSBgL2Rldi92aG9zdC1zY3NpYCBvcGVuL3JlbGVhc2UgYW5kIHN5c2ZzIG1vZHVsZSBwYXJhbWV0ZXJzKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow8gfrq[1] Phase: Succeeded StartedAt: 2026-08-02 06:31:46 +0000 UTC FinishedAt: 2026-08-02 06:31:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gfrq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-02 06:31:46 +0000 UTC FinishedAt: 2026-08-02 06:31:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gfrq[2] Phase: Succeeded StartedAt: 2026-08-02 06:31:46 +0000 UTC FinishedAt: 2026-08-02 08:03:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gfrq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_open","vhost_scsi_release","vhost_scsi_set_max_io_vqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"19a7a78f-4ff2-46e7-ac9c-23f4330afb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-02 06:31:46 +0000 UTC FinishedAt: 2026-08-02 08:03:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_open","vhost_scsi_release","vhost_scsi_set_max_io_vqs"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"19a7a78f-4ff2-46e7-ac9c-23f4330afb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8gfrq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_open","vhost_scsi_release","vhost_scsi_set_max_io_vqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"19a7a78f-4ff2-46e7-ac9c-23f4330afb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-02 06:31:46 +0000 UTC FinishedAt: 2026-08-02 06:31:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gfrq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_open","vhost_scsi_release","vhost_scsi_set_max_io_vqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"19a7a78f-4ff2-46e7-ac9c-23f4330afb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-02 06:31:46 +0000 UTC FinishedAt: 2026-08-02 06:31:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8gfrq/series-workflow8gfrq-convert-artifact-4228980136/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8gfrq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_open","vhost_scsi_release","vhost_scsi_set_max_io_vqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"19a7a78f-4ff2-46e7-ac9c-23f4330afb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-02 06:31:56 +0000 UTC FinishedAt: 2026-08-02 06:52:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gfrq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_open","vhost_scsi_release","vhost_scsi_set_max_io_vqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"19a7a78f-4ff2-46e7-ac9c-23f4330afb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-02 06:31:56 +0000 UTC FinishedAt: 2026-08-02 06:52:38 +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:*3e725033-8ac1-46f6-b015-4d9c66f2693d,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-workflow8gfrq/series-workflow8gfrq-convert-artifact-4228980136/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": "1c62a2c1-3336-4a08-affc-3118bf657e1b", "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-workflow8gfrq/series-workflow8gfrq-build-action-1760662558/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8gfrq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_open","vhost_scsi_release","vhost_scsi_set_max_io_vqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"19a7a78f-4ff2-46e7-ac9c-23f4330afb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-02 06:31:56 +0000 UTC FinishedAt: 2026-08-02 06:52:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*3e725033-8ac1-46f6-b015-4d9c66f2693d,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-workflow8gfrq/series-workflow8gfrq-convert-artifact-4228980136/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": "1c62a2c1-3336-4a08-affc-3118bf657e1b", "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-workflow8gfrq/series-workflow8gfrq-build-action-1760662558/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8gfrq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_open","vhost_scsi_release","vhost_scsi_set_max_io_vqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"19a7a78f-4ff2-46e7-ac9c-23f4330afb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-02 06:52:38 +0000 UTC FinishedAt: 2026-08-02 06:52:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gfrq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_open","vhost_scsi_release","vhost_scsi_set_max_io_vqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"19a7a78f-4ff2-46e7-ac9c-23f4330afb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-02 06:52:38 +0000 UTC FinishedAt: 2026-08-02 06:52:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gfrq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_open","vhost_scsi_release","vhost_scsi_set_max_io_vqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"19a7a78f-4ff2-46e7-ac9c-23f4330afb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-02 06:52:38 +0000 UTC FinishedAt: 2026-08-02 06:52:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gfrq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_open","vhost_scsi_release","vhost_scsi_set_max_io_vqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"19a7a78f-4ff2-46e7-ac9c-23f4330afb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-02 06:52:38 +0000 UTC FinishedAt: 2026-08-02 06:52:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"19a7a78f-4ff2-46e7-ac9c-23f4330afb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8gfrq/series-workflow8gfrq-convert-artifact-2920682639/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8gfrq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_open","vhost_scsi_release","vhost_scsi_set_max_io_vqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"19a7a78f-4ff2-46e7-ac9c-23f4330afb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-02 06:52:59 +0000 UTC FinishedAt: 2026-08-02 06:55:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gfrq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_open","vhost_scsi_release","vhost_scsi_set_max_io_vqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"19a7a78f-4ff2-46e7-ac9c-23f4330afb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-02 06:52:59 +0000 UTC FinishedAt: 2026-08-02 06:55:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1c62a2c1-3336-4a08-affc-3118bf657e1b,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-workflow8gfrq/series-workflow8gfrq-build-action-1760662558/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-workflow8gfrq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_open","vhost_scsi_release","vhost_scsi_set_max_io_vqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"19a7a78f-4ff2-46e7-ac9c-23f4330afb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-02 06:55:15 +0000 UTC FinishedAt: 2026-08-02 06:55:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gfrq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_open","vhost_scsi_release","vhost_scsi_set_max_io_vqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"19a7a78f-4ff2-46e7-ac9c-23f4330afb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-02 06:55:15 +0000 UTC FinishedAt: 2026-08-02 06:55:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gfrq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_open","vhost_scsi_release","vhost_scsi_set_max_io_vqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"19a7a78f-4ff2-46e7-ac9c-23f4330afb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-02 06:55:15 +0000 UTC FinishedAt: 2026-08-02 07:27:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gfrq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_open","vhost_scsi_release","vhost_scsi_set_max_io_vqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"19a7a78f-4ff2-46e7-ac9c-23f4330afb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-02 06:55:15 +0000 UTC FinishedAt: 2026-08-02 07:27:21 +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:*3e725033-8ac1-46f6-b015-4d9c66f2693d,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-workflow8gfrq/series-workflow8gfrq-convert-artifact-2920682639/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": "35330fc8-2291-40d6-b4bc-550b13d7fabe", "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-workflow8gfrq/series-workflow8gfrq-build-action-1108276643/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8gfrq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_open","vhost_scsi_release","vhost_scsi_set_max_io_vqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"19a7a78f-4ff2-46e7-ac9c-23f4330afb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-02 06:55:15 +0000 UTC FinishedAt: 2026-08-02 07:27:11 +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:*3e725033-8ac1-46f6-b015-4d9c66f2693d,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-workflow8gfrq/series-workflow8gfrq-convert-artifact-2920682639/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": "35330fc8-2291-40d6-b4bc-550b13d7fabe", "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-workflow8gfrq/series-workflow8gfrq-build-action-1108276643/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8gfrq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_open","vhost_scsi_release","vhost_scsi_set_max_io_vqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"19a7a78f-4ff2-46e7-ac9c-23f4330afb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-02 07:27:21 +0000 UTC FinishedAt: 2026-08-02 07:27:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gfrq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_open","vhost_scsi_release","vhost_scsi_set_max_io_vqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"19a7a78f-4ff2-46e7-ac9c-23f4330afb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-02 07:27:21 +0000 UTC FinishedAt: 2026-08-02 07:27:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gfrq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_open","vhost_scsi_release","vhost_scsi_set_max_io_vqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"19a7a78f-4ff2-46e7-ac9c-23f4330afb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-02 07:27:21 +0000 UTC FinishedAt: 2026-08-02 07:29:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gfrq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_open","vhost_scsi_release","vhost_scsi_set_max_io_vqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"19a7a78f-4ff2-46e7-ac9c-23f4330afb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-02 07:27:21 +0000 UTC FinishedAt: 2026-08-02 07:29:00 +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:*35330fc8-2291-40d6-b4bc-550b13d7fabe,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-workflow8gfrq/series-workflow8gfrq-build-action-1108276643/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-workflow8gfrq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_open","vhost_scsi_release","vhost_scsi_set_max_io_vqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"19a7a78f-4ff2-46e7-ac9c-23f4330afb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-02 07:29:11 +0000 UTC FinishedAt: 2026-08-02 08:03:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gfrq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_open","vhost_scsi_release","vhost_scsi_set_max_io_vqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"19a7a78f-4ff2-46e7-ac9c-23f4330afb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-02 07:29:11 +0000 UTC FinishedAt: 2026-08-02 08:03:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_open","vhost_scsi_release","vhost_scsi_set_max_io_vqs"],"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:*1c62a2c1-3336-4a08-affc-3118bf657e1b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*35330fc8-2291-40d6-b4bc-550b13d7fabe,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-workflow8gfrq/series-workflow8gfrq-build-action-1760662558/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-workflow8gfrq/series-workflow8gfrq-build-action-1108276643/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8gfrq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_open","vhost_scsi_release","vhost_scsi_set_max_io_vqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"19a7a78f-4ff2-46e7-ac9c-23f4330afb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-02 07:29:11 +0000 UTC FinishedAt: 2026-08-02 07:29:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gfrq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_open","vhost_scsi_release","vhost_scsi_set_max_io_vqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"19a7a78f-4ff2-46e7-ac9c-23f4330afb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-02 07:29:11 +0000 UTC FinishedAt: 2026-08-02 07:29:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_open","vhost_scsi_release","vhost_scsi_set_max_io_vqs"],"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-workflow8gfrq/series-workflow8gfrq-convert-artifact-816660808/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8gfrq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_open","vhost_scsi_release","vhost_scsi_set_max_io_vqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"19a7a78f-4ff2-46e7-ac9c-23f4330afb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-02 07:29:11 +0000 UTC FinishedAt: 2026-08-02 07:29:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gfrq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_open","vhost_scsi_release","vhost_scsi_set_max_io_vqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"19a7a78f-4ff2-46e7-ac9c-23f4330afb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-02 07:29:11 +0000 UTC FinishedAt: 2026-08-02 07:29:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gfrq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_open","vhost_scsi_release","vhost_scsi_set_max_io_vqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"19a7a78f-4ff2-46e7-ac9c-23f4330afb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-02 07:29:11 +0000 UTC FinishedAt: 2026-08-02 07:29:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gfrq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_open","vhost_scsi_release","vhost_scsi_set_max_io_vqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"19a7a78f-4ff2-46e7-ac9c-23f4330afb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-02 07:29:38 +0000 UTC FinishedAt: 2026-08-02 08:03:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8gfrq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vhost_scsi_open","vhost_scsi_release","vhost_scsi_set_max_io_vqs"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ba098e6b6ff0db8edf28528d1552be261af30d4","config_name":"upstream-apparmor-kasan.config","enable_configs":["VHOST_SCSI","TARGET_CORE"],"series_id":"19a7a78f-4ff2-46e7-ac9c-23f4330afb7d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-02 07:29:38 +0000 UTC FinishedAt: 2026-08-02 08:03:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1c62a2c1-3336-4a08-affc-3118bf657e1b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*35330fc8-2291-40d6-b4bc-550b13d7fabe,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-workflow8gfrq/series-workflow8gfrq-build-action-1760662558/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-workflow8gfrq/series-workflow8gfrq-build-action-1108276643/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-workflow8gfrq/series-workflow8gfrq-convert-artifact-816660808/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,}