Name: series-workflow8pnjt Phase: Succeeded StartedAt: 2026-07-10 08:25:39 +0000 UTC FinishedAt: 2026-07-10 10:24:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8pnjt[0] Phase: Succeeded StartedAt: 2026-07-10 08:25:39 +0000 UTC FinishedAt: 2026-07-10 08:53:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8pnjt[0].run-triage Phase: Succeeded StartedAt: 2026-07-10 08:25:39 +0000 UTC FinishedAt: 2026-07-10 08:53:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "b6eb022890c78285f55381589c1536bd66b8eaeb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "b6eb022890c78285f55381589c1536bd66b8eaeb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "b1adc879-2d0c-41c5-9b18-8ecb507cd2e9" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_riscv_mmu_map", "pfnmap_mapping_size", "fault_supports_gstage_huge_mapping" ], "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+CgkJCTx0ZD4yMDI2LzA3LzEwIDA4OjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9yaXNjdl9tbXVfbWFwJiMzNDssCiAgICAmIzM0O3Bmbm1hcF9tYXBwaW5nX3NpemUmIzM0OywKICAgICYjMzQ7ZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgS1ZNIE1NVSBwYWdlIGZhdWx0IGhhbmRsZXIgb24gUklTQy1WIHRvIHN1cHBvcnQgaHVnZSBwYWdlIG1hcHBpbmdzIChQTURfU0laRSkgZm9yIGRldmljZSBtZW1vcnkgKFZNX1BGTk1BUCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSB2aXJ0dWFsaXphdGlvbiBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIG1lbW9yeSBjb3JydXB0aW9uIG9yIGhvc3QgY3Jhc2hlcyB3aGVuIGhhbmRsaW5nIG1hbGljaW91cyBvciBlZGdlLWNhc2UgZ3Vlc3QgcGFnZSBmYXVsdHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDg6NTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmYWMwOTc5NWVmN2QzMDZjYTk4ZTcxMjE1M2UzMGVhNTM4YTAxY2NmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMTAgMDg6NTI6MzggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vbW11LmMgYi9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xuaW5kZXggMmQzZGVmMDI0MjcwYzAuLjUzZmIzNGQ0Yjc2ZDA5IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vbW11LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL21tdS5jXG5AQCAtMTYsNiAmIzQzOzE2LDggQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX21tdS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9uYWNsLmhcdTAwM2VcbiBcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dHJhY2UuaFwmIzM0O1xuJiM0MztcbiBzdGF0aWMgdm9pZCBtbXVfd3BfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIGludCBzbG90KVxuIHtcbiBcdHN0cnVjdCBrdm1fbWVtc2xvdHMgKnNsb3RzID0ga3ZtX21lbXNsb3RzKGt2bSk7XG5AQCAtMjg2LDcgJiM0MzsyODgsNyBAQCBib29sIGt2bV90ZXN0X2FnZV9nZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpXG4gfVxuIFxuIHN0YXRpYyBib29sIGZhdWx0X3N1cHBvcnRzX2dzdGFnZV9odWdlX21hcHBpbmcoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbi1cdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgaHZhKVxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgaHZhLCB1bnNpZ25lZCBsb25nIG1hcF9zaXplKVxuIHtcbiBcdGh2YV90IHVhZGRyX3N0YXJ0LCB1YWRkcl9lbmQ7XG4gXHRncGFfdCBncGFfc3RhcnQ7XG5AQCAtMzIxLDcgJiM0MzszMjMsNyBAQCBzdGF0aWMgYm9vbCBmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXG4gXHQgKiAgIGUgLVx1MDAzZSBnXG4gXHQgKiAgIGYgLVx1MDAzZSBoXG4gXHQgKi9cbi1cdGlmICgoZ3BhX3N0YXJ0IFx1MDAyNiAoUE1EX1NJWkUgLSAxKSkgIT0gKHVhZGRyX3N0YXJ0IFx1MDAyNiAoUE1EX1NJWkUgLSAxKSkpXG4mIzQzO1x0aWYgKChncGFfc3RhcnQgXHUwMDI2IChtYXBfc2l6ZSAtIDEpKSAhPSAodWFkZHJfc3RhcnQgXHUwMDI2IChtYXBfc2l6ZSAtIDEpKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0LypcbkBAIC0zMzYsNyAmIzQzOzMzOCw3IEBAIHN0YXRpYyBib29sIGZhdWx0X3N1cHBvcnRzX2dzdGFnZV9odWdlX21hcHBpbmcoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbiBcdCAqIHVzZXJzcGFjZV9hZGRyIG9yIHRoZSBiYXNlX2dmbiwgYXMgYm90aCBhcmUgZXF1YWxseSBhbGlnbmVkIChwZXJcbiBcdCAqIHRoZSBjaGVjayBhYm92ZSkgYW5kIGVxdWFsbHkgc2l6ZWQuXG4gXHQgKi9cbi1cdHJldHVybiAoaHZhIFx1MDAzZT0gQUxJR04odWFkZHJfc3RhcnQsIFBNRF9TSVpFKSkgXHUwMDI2XHUwMDI2IChodmEgXHUwMDNjIEFMSUdOX0RPV04odWFkZHJfZW5kLCBQTURfU0laRSkpO1xuJiM0MztcdHJldHVybiAoaHZhIFx1MDAzZT0gQUxJR04odWFkZHJfc3RhcnQsIG1hcF9zaXplKSkgXHUwMDI2XHUwMDI2IChodmEgXHUwMDNjIEFMSUdOX0RPV04odWFkZHJfZW5kLCBtYXBfc2l6ZSkpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGdldF9odmFfbWFwcGluZ19zaXplKHN0cnVjdCBrdm0gKmt2bSxcbkBAIC00MDQsNyAmIzQzOzQwNiw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHRyYW5zcGFyZW50X2h1Z2VwYWdlX2FkanVzdChzdHJ1Y3Qga3ZtICprdm0sXG4gXHQgKiBzdXJlIHRoYXQgdGhlIEhWQSBhbmQgR1BBIGFyZSBzdWZmaWNpZW50bHkgYWxpZ25lZCBhbmQgdGhhdCB0aGVcbiBcdCAqIGJsb2NrIG1hcCBpcyBjb250YWluZWQgd2l0aGluIHRoZSBtZW1zbG90LlxuIFx0ICovXG4tXHRpZiAoZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZyhtZW1zbG90LCBodmEpKSB7XG4mIzQzO1x0aWYgKGZhdWx0X3N1cHBvcnRzX2dzdGFnZV9odWdlX21hcHBpbmcobWVtc2xvdCwgaHZhLCBQTURfU0laRSkpIHtcbiBcdFx0aW50IHN6O1xuIFxuIFx0XHRzeiA9IGdldF9odmFfbWFwcGluZ19zaXplKGt2bSwgaHZhKTtcbkBAIC00MjEsNiAmIzQzOzQyMywzMSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyB0cmFuc3BhcmVudF9odWdlcGFnZV9hZGp1c3Qoc3RydWN0IGt2bSAqa3ZtLFxuIFx0cmV0dXJuIFBBR0VfU0laRTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIERldGVybWluZSB0aGUgRy1zdGFnZSBtYXBwaW5nIHNpemUgZm9yIGEgVk1fUEZOTUFQIChlLmcuIGhvc3QgZGV2aWNlXG4mIzQzOyAqIE1NSU8pIGZhdWx0LiAgVW5saWtlIGFybTY0JiMzOTtzIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uLCB3ZSBuZXZlciBkZXJpdmUgdGhlXG4mIzQzOyAqIGhvc3QgcGh5c2ljYWwgYWRkcmVzcyBmcm9tIHZtYS1cdTAwM2V2bV9wZ29mZiAod2hpY2ggaXMgdW5yZWxpYWJsZSBzaW5jZSB0aGVcbiYjNDM7ICogVkZJTyB1bm1hcF9tYXBwaW5nX3JhbmdlKCkgY2hhbmdlcykuICBJbnN0ZWFkIHdlIHdhbGsgdGhlIGhvc3QgcGFnZSB0YWJsZXNcbiYjNDM7ICogdmlhIGdldF9odmFfbWFwcGluZ19zaXplKCk6IGlmIHRoZSBob3N0IGl0c2VsZiBpbnN0YWxsZWQgYSBsZWFmIGJsb2NrIGZvclxuJiM0MzsgKiB0aGlzIGFkZHJlc3MsIHBoeXNpY2FsIGNvbnRpZ3VpdHkgd2l0aGluIHRoYXQgYmxvY2sgaXMgYWxyZWFkeSBndWFyYW50ZWVkXG4mIzQzOyAqIGJ5IHRoZSBob3N0IG1tLiAgVGhlIG1lbW9yeSB0eXBlIHN0YXlzIGNvcnJlY3QgYmVjYXVzZSBSSVNDLVYgZGVyaXZlcyBpdFxuJiM0MzsgKiBmcm9tIHRoZSBwaHlzaWNhbCBhZGRyZXNzJiMzOTsgUE1BLCBpbmRlcGVuZGVudCBvZiB0aGUgRy1zdGFnZSBQVEUgc2l6ZS5cbiYjNDM7ICpcbiYjNDM7ICogQmUgY29uc2VydmF0aXZlIGZvciBub3cgYW5kIG9ubHkgcHJvbW90ZSB0byBQTUQtc2l6ZWQgYmxvY2tzOyBQVUQtc2l6ZWRcbiYjNDM7ICogZGV2aWNlIGJsb2NrcyBhcmUgbGVmdCBhcyBmdXR1cmUgd29yay4gIEZhbGwgYmFjayB0byBQQUdFX1NJWkUgd2hlbmV2ZXJcbiYjNDM7ICogY29udGlndWl0eSBvciBIVkEvR1BBIGFsaWdubWVudCBjYW5ub3QgYmUgcHJvdmVuLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgcGZubWFwX21hcHBpbmdfc2l6ZShzdHJ1Y3Qga3ZtICprdm0sXG4mIzQzO1x0XHRcdFx0XHQgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbiYjNDM7XHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGh2YSlcbiYjNDM7e1xuJiM0MztcdGlmIChnZXRfaHZhX21hcHBpbmdfc2l6ZShrdm0sIGh2YSkgXHUwMDNlPSBQTURfU0laRSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZyhtZW1zbG90LCBodmEsIFBNRF9TSVpFKSlcbiYjNDM7XHRcdHJldHVybiBQTURfU0laRTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIFBBR0VfU0laRTtcbiYjNDM7fVxuJiM0MztcbiBpbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxuIFx0XHQgICAgICBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgaHZhLCBib29sIGlzX3dyaXRlLFxuIFx0XHQgICAgICBzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nICpvdXRfbWFwKVxuQEAgLTQ2NSwxMSAmIzQzOzQ5MiwxNCBAQCBpbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxuIFx0ZWxzZVxuIFx0XHR2bWFfcGFnZXNoaWZ0ID0gUEFHRV9TSElGVDtcbiBcdHZtYV9wYWdlc2l6ZSA9IDFVTEwgXHUwMDNjXHUwMDNjIHZtYV9wYWdlc2hpZnQ7XG4tXHRpZiAobG9nZ2luZyB8fCAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9QRk5NQVApKVxuJiM0MztcbiYjNDM7XHRpZiAobG9nZ2luZylcbiBcdFx0dm1hX3BhZ2VzaXplID0gUEFHRV9TSVpFO1xuJiM0MztcdGVsc2UgaWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUEZOTUFQKVxuJiM0MztcdFx0dm1hX3BhZ2VzaXplID0gcGZubWFwX21hcHBpbmdfc2l6ZShrdm0sIG1lbXNsb3QsIGh2YSk7XG4gXG4gXHRpZiAodm1hX3BhZ2VzaXplID09IFBNRF9TSVpFIHx8IHZtYV9wYWdlc2l6ZSA9PSBQVURfU0laRSlcbi1cdFx0Z2ZuID0gKGdwYSBcdTAwMjYgaHVnZV9wYWdlX21hc2soaHN0YXRlX3ZtYSh2bWEpKSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4mIzQzO1x0XHRnZm4gPSAoZ3BhIFx1MDAyNiB+KHZtYV9wYWdlc2l6ZSAtIDEpKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiBcbiBcdC8qXG4gXHQgKiBSZWFkIG1tdV9pbnZhbGlkYXRlX3NlcSBzbyB0aGF0IEtWTSBjYW4gZGV0ZWN0IGlmIHRoZSByZXN1bHRzIG9mXG5AQCAtNTE1LDYgJiM0Mzs1NDUsOSBAQCBpbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxuIFx0aWYgKCFsb2dnaW5nIFx1MDAyNlx1MDAyNiAodm1hX3BhZ2VzaXplID09IFBBR0VfU0laRSkpXG4gXHRcdHZtYV9wYWdlc2l6ZSA9IHRyYW5zcGFyZW50X2h1Z2VwYWdlX2FkanVzdChrdm0sIG1lbXNsb3QsIGh2YSwgXHUwMDI2aGZuLCBcdTAwMjZncGEpO1xuIFxuJiM0MztcdHRyYWNlX2t2bV9tbXVfbWFwKGdwYSwgaHZhLCBoZm4sIHZtYV9wYWdlc2l6ZSxcbiYjNDM7XHRcdFx0ICAhISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1BGTk1BUCkpO1xuJiM0MztcbiBcdGlmICh3cml0YWJsZSkge1xuIFx0XHRtYXJrX3BhZ2VfZGlydHlfaW5fc2xvdChrdm0sIG1lbXNsb3QsIGdmbik7XG4gXHRcdHJldCA9IGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2UoXHUwMDI2Z3N0YWdlLCBwY2FjaGUsIGdwYSwgaGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3RyYWNlLmggYi9hcmNoL3Jpc2N2L2t2bS90cmFjZS5oXG5pbmRleCAzZDU0MTc1ZDgwNWNiYy4uZGIyZDI4ZjFkNzE0ODMgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS90cmFjZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS90cmFjZS5oXG5AQCAtNTYsNiAmIzQzOzU2LDM1IEBAIFRSQUNFX0VWRU5UKGt2bV9leGl0LFxuIFx0XHRfX2VudHJ5LVx1MDAzZWh0aW5zdClcbiApO1xuIFxuJiM0MztUUkFDRV9FVkVOVChrdm1fbW11X21hcCxcbiYjNDM7XHRUUF9QUk9UTyh1bnNpZ25lZCBsb25nIGdwYSwgdW5zaWduZWQgbG9uZyBodmEsIHVuc2lnbmVkIGxvbmcgaGZuLFxuJiM0MztcdFx0IHVuc2lnbmVkIGxvbmcgbWFwX3NpemUsIGJvb2wgaXNfcGZubWFwKSxcbiYjNDM7XHRUUF9BUkdTKGdwYSwgaHZhLCBoZm4sIG1hcF9zaXplLCBpc19wZm5tYXApLFxuJiM0MztcbiYjNDM7XHRUUF9TVFJVQ1RfX2VudHJ5KFxuJiM0MztcdFx0X19maWVsZCh1bnNpZ25lZCBsb25nLCBncGEpXG4mIzQzO1x0XHRfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGh2YSlcbiYjNDM7XHRcdF9fZmllbGQodW5zaWduZWQgbG9uZywgaGZuKVxuJiM0MztcdFx0X19maWVsZCh1bnNpZ25lZCBsb25nLCBtYXBfc2l6ZSlcbiYjNDM7XHRcdF9fZmllbGQoYm9vbCwgaXNfcGZubWFwKVxuJiM0MztcdCksXG4mIzQzO1xuJiM0MztcdFRQX2Zhc3RfYXNzaWduKFxuJiM0MztcdFx0X19lbnRyeS1cdTAwM2VncGFcdFx0PSBncGE7XG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZWh2YVx0XHQ9IGh2YTtcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlaGZuXHRcdD0gaGZuO1xuJiM0MztcdFx0X19lbnRyeS1cdTAwM2VtYXBfc2l6ZVx0PSBtYXBfc2l6ZTtcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlaXNfcGZubWFwXHQ9IGlzX3Bmbm1hcDtcbiYjNDM7XHQpLFxuJiM0MztcbiYjNDM7XHRUUF9wcmludGsoXCYjMzQ7R1BBOjB4JWx4LCBIVkE6MHglbHgsIEhGTjoweCVseCwgc2l6ZTolbHVLQiwgcGZubWFwOiVkXCYjMzQ7LFxuJiM0MztcdFx0X19lbnRyeS1cdTAwM2VncGEsXG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZWh2YSxcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlaGZuLFxuJiM0MztcdFx0X19lbnRyeS1cdTAwM2VtYXBfc2l6ZSBcdTAwM2VcdTAwM2UgMTAsXG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZWlzX3Bmbm1hcClcbiYjNDM7KTtcbiYjNDM7XG4gI2VuZGlmIC8qIF9UUkFDRV9SU0lDVl9LVk1fSCAqL1xuIFxuICN1bmRlZiBUUkFDRV9JTkNMVURFX1BBVEhcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwODo1MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fcmlzY3ZfbW11X21hcCYjMzQ7LAogICAgJiMzNDtwZm5tYXBfbWFwcGluZ19zaXplJiMzNDssCiAgICAmIzM0O2ZhdWx0X3N1cHBvcnRzX2dzdGFnZV9odWdlX21hcHBpbmcmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEtWTSBNTVUgcGFnZSBmYXVsdCBoYW5kbGVyIG9uIFJJU0MtViB0byBzdXBwb3J0IGh1Z2UgcGFnZSBtYXBwaW5ncyAoUE1EX1NJWkUpIGZvciBkZXZpY2UgbWVtb3J5IChWTV9QRk5NQVApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgdmlydHVhbGl6YXRpb24gbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBtZW1vcnkgY29ycnVwdGlvbiBvciBob3N0IGNyYXNoZXMgd2hlbiBoYW5kbGluZyBtYWxpY2lvdXMgb3IgZWRnZS1jYXNlIGd1ZXN0IHBhZ2UgZmF1bHRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmYWMwOTc5NWVmN2QzMDZjYTk4ZTcxMjE1M2UzMGVhNTM4YTAxY2NmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMTAgMDg6NTI6MzggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9tbXUuYyBiL2FyY2gvcmlzY3Yva3ZtL21tdS5jCmluZGV4IDJkM2RlZjAyNDI3MGMwLi41M2ZiMzRkNGI3NmQwOSAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9rdm0vbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rdm0vbW11LmMKQEAgLTE2LDYgJiM0MzsxNiw4IEBACiAjaW5jbHVkZSAmbHQ7YXNtL2t2bV9tbXUuaCZndDsKICNpbmNsdWRlICZsdDthc20va3ZtX25hY2wuaCZndDsKIAomIzQzOyNpbmNsdWRlICYjMzQ7dHJhY2UuaCYjMzQ7CiYjNDM7CiBzdGF0aWMgdm9pZCBtbXVfd3BfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIGludCBzbG90KQogewogCXN0cnVjdCBrdm1fbWVtc2xvdHMgKnNsb3RzID0ga3ZtX21lbXNsb3RzKGt2bSk7CkBAIC0yODYsNyAmIzQzOzI4OCw3IEBAIGJvb2wga3ZtX3Rlc3RfYWdlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSkKIH0KIAogc3RhdGljIGJvb2wgZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZyhzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LAotCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBodmEpCiYjNDM7CQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBodmEsIHVuc2lnbmVkIGxvbmcgbWFwX3NpemUpCiB7CiAJaHZhX3QgdWFkZHJfc3RhcnQsIHVhZGRyX2VuZDsKIAlncGFfdCBncGFfc3RhcnQ7CkBAIC0zMjEsNyAmIzQzOzMyMyw3IEBAIHN0YXRpYyBib29sIGZhdWx0X3N1cHBvcnRzX2dzdGFnZV9odWdlX21hcHBpbmcoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCwKIAkgKiAgIGUgLSZndDsgZwogCSAqICAgZiAtJmd0OyBoCiAJICovCi0JaWYgKChncGFfc3RhcnQgJmFtcDsgKFBNRF9TSVpFIC0gMSkpICE9ICh1YWRkcl9zdGFydCAmYW1wOyAoUE1EX1NJWkUgLSAxKSkpCiYjNDM7CWlmICgoZ3BhX3N0YXJ0ICZhbXA7IChtYXBfc2l6ZSAtIDEpKSAhPSAodWFkZHJfc3RhcnQgJmFtcDsgKG1hcF9zaXplIC0gMSkpKQogCQlyZXR1cm4gZmFsc2U7CiAKIAkvKgpAQCAtMzM2LDcgJiM0MzszMzgsNyBAQCBzdGF0aWMgYm9vbCBmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsCiAJICogdXNlcnNwYWNlX2FkZHIgb3IgdGhlIGJhc2VfZ2ZuLCBhcyBib3RoIGFyZSBlcXVhbGx5IGFsaWduZWQgKHBlcgogCSAqIHRoZSBjaGVjayBhYm92ZSkgYW5kIGVxdWFsbHkgc2l6ZWQuCiAJICovCi0JcmV0dXJuIChodmEgJmd0Oz0gQUxJR04odWFkZHJfc3RhcnQsIFBNRF9TSVpFKSkgJmFtcDsmYW1wOyAoaHZhICZsdDsgQUxJR05fRE9XTih1YWRkcl9lbmQsIFBNRF9TSVpFKSk7CiYjNDM7CXJldHVybiAoaHZhICZndDs9IEFMSUdOKHVhZGRyX3N0YXJ0LCBtYXBfc2l6ZSkpICZhbXA7JmFtcDsgKGh2YSAmbHQ7IEFMSUdOX0RPV04odWFkZHJfZW5kLCBtYXBfc2l6ZSkpOwogfQogCiBzdGF0aWMgaW50IGdldF9odmFfbWFwcGluZ19zaXplKHN0cnVjdCBrdm0gKmt2bSwKQEAgLTQwNCw3ICYjNDM7NDA2LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgdHJhbnNwYXJlbnRfaHVnZXBhZ2VfYWRqdXN0KHN0cnVjdCBrdm0gKmt2bSwKIAkgKiBzdXJlIHRoYXQgdGhlIEhWQSBhbmQgR1BBIGFyZSBzdWZmaWNpZW50bHkgYWxpZ25lZCBhbmQgdGhhdCB0aGUKIAkgKiBibG9jayBtYXAgaXMgY29udGFpbmVkIHdpdGhpbiB0aGUgbWVtc2xvdC4KIAkgKi8KLQlpZiAoZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZyhtZW1zbG90LCBodmEpKSB7CiYjNDM7CWlmIChmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nKG1lbXNsb3QsIGh2YSwgUE1EX1NJWkUpKSB7CiAJCWludCBzejsKIAogCQlzeiA9IGdldF9odmFfbWFwcGluZ19zaXplKGt2bSwgaHZhKTsKQEAgLTQyMSw2ICYjNDM7NDIzLDMxIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHRyYW5zcGFyZW50X2h1Z2VwYWdlX2FkanVzdChzdHJ1Y3Qga3ZtICprdm0sCiAJcmV0dXJuIFBBR0VfU0laRTsKIH0KIAomIzQzOy8qCiYjNDM7ICogRGV0ZXJtaW5lIHRoZSBHLXN0YWdlIG1hcHBpbmcgc2l6ZSBmb3IgYSBWTV9QRk5NQVAgKGUuZy4gaG9zdCBkZXZpY2UKJiM0MzsgKiBNTUlPKSBmYXVsdC4gIFVubGlrZSBhcm02NCYjMzk7cyBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiwgd2UgbmV2ZXIgZGVyaXZlIHRoZQomIzQzOyAqIGhvc3QgcGh5c2ljYWwgYWRkcmVzcyBmcm9tIHZtYS0mZ3Q7dm1fcGdvZmYgKHdoaWNoIGlzIHVucmVsaWFibGUgc2luY2UgdGhlCiYjNDM7ICogVkZJTyB1bm1hcF9tYXBwaW5nX3JhbmdlKCkgY2hhbmdlcykuICBJbnN0ZWFkIHdlIHdhbGsgdGhlIGhvc3QgcGFnZSB0YWJsZXMKJiM0MzsgKiB2aWEgZ2V0X2h2YV9tYXBwaW5nX3NpemUoKTogaWYgdGhlIGhvc3QgaXRzZWxmIGluc3RhbGxlZCBhIGxlYWYgYmxvY2sgZm9yCiYjNDM7ICogdGhpcyBhZGRyZXNzLCBwaHlzaWNhbCBjb250aWd1aXR5IHdpdGhpbiB0aGF0IGJsb2NrIGlzIGFscmVhZHkgZ3VhcmFudGVlZAomIzQzOyAqIGJ5IHRoZSBob3N0IG1tLiAgVGhlIG1lbW9yeSB0eXBlIHN0YXlzIGNvcnJlY3QgYmVjYXVzZSBSSVNDLVYgZGVyaXZlcyBpdAomIzQzOyAqIGZyb20gdGhlIHBoeXNpY2FsIGFkZHJlc3MmIzM5OyBQTUEsIGluZGVwZW5kZW50IG9mIHRoZSBHLXN0YWdlIFBURSBzaXplLgomIzQzOyAqCiYjNDM7ICogQmUgY29uc2VydmF0aXZlIGZvciBub3cgYW5kIG9ubHkgcHJvbW90ZSB0byBQTUQtc2l6ZWQgYmxvY2tzOyBQVUQtc2l6ZWQKJiM0MzsgKiBkZXZpY2UgYmxvY2tzIGFyZSBsZWZ0IGFzIGZ1dHVyZSB3b3JrLiAgRmFsbCBiYWNrIHRvIFBBR0VfU0laRSB3aGVuZXZlcgomIzQzOyAqIGNvbnRpZ3VpdHkgb3IgSFZBL0dQQSBhbGlnbm1lbnQgY2Fubm90IGJlIHByb3Zlbi4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBwZm5tYXBfbWFwcGluZ19zaXplKHN0cnVjdCBrdm0gKmt2bSwKJiM0MzsJCQkJCSBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LAomIzQzOwkJCQkJIHVuc2lnbmVkIGxvbmcgaHZhKQomIzQzO3sKJiM0MzsJaWYgKGdldF9odmFfbWFwcGluZ19zaXplKGt2bSwgaHZhKSAmZ3Q7PSBQTURfU0laRSAmYW1wOyZhbXA7CiYjNDM7CSAgICBmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nKG1lbXNsb3QsIGh2YSwgUE1EX1NJWkUpKQomIzQzOwkJcmV0dXJuIFBNRF9TSVpFOwomIzQzOwomIzQzOwlyZXR1cm4gUEFHRV9TSVpFOwomIzQzO30KJiM0MzsKIGludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsCiAJCSAgICAgIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyBodmEsIGJvb2wgaXNfd3JpdGUsCiAJCSAgICAgIHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgKm91dF9tYXApCkBAIC00NjUsMTEgJiM0Mzs0OTIsMTQgQEAgaW50IGt2bV9yaXNjdl9tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCwKIAllbHNlCiAJCXZtYV9wYWdlc2hpZnQgPSBQQUdFX1NISUZUOwogCXZtYV9wYWdlc2l6ZSA9IDFVTEwgJmx0OyZsdDsgdm1hX3BhZ2VzaGlmdDsKLQlpZiAobG9nZ2luZyB8fCAodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9QRk5NQVApKQomIzQzOwomIzQzOwlpZiAobG9nZ2luZykKIAkJdm1hX3BhZ2VzaXplID0gUEFHRV9TSVpFOwomIzQzOwllbHNlIGlmICh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX1BGTk1BUCkKJiM0MzsJCXZtYV9wYWdlc2l6ZSA9IHBmbm1hcF9tYXBwaW5nX3NpemUoa3ZtLCBtZW1zbG90LCBodmEpOwogCiAJaWYgKHZtYV9wYWdlc2l6ZSA9PSBQTURfU0laRSB8fCB2bWFfcGFnZXNpemUgPT0gUFVEX1NJWkUpCi0JCWdmbiA9IChncGEgJmFtcDsgaHVnZV9wYWdlX21hc2soaHN0YXRlX3ZtYSh2bWEpKSkgJmd0OyZndDsgUEFHRV9TSElGVDsKJiM0MzsJCWdmbiA9IChncGEgJmFtcDsgfih2bWFfcGFnZXNpemUgLSAxKSkgJmd0OyZndDsgUEFHRV9TSElGVDsKIAogCS8qCiAJICogUmVhZCBtbXVfaW52YWxpZGF0ZV9zZXEgc28gdGhhdCBLVk0gY2FuIGRldGVjdCBpZiB0aGUgcmVzdWx0cyBvZgpAQCAtNTE1LDYgJiM0Mzs1NDUsOSBAQCBpbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LAogCWlmICghbG9nZ2luZyAmYW1wOyZhbXA7ICh2bWFfcGFnZXNpemUgPT0gUEFHRV9TSVpFKSkKIAkJdm1hX3BhZ2VzaXplID0gdHJhbnNwYXJlbnRfaHVnZXBhZ2VfYWRqdXN0KGt2bSwgbWVtc2xvdCwgaHZhLCAmYW1wO2hmbiwgJmFtcDtncGEpOwogCiYjNDM7CXRyYWNlX2t2bV9tbXVfbWFwKGdwYSwgaHZhLCBoZm4sIHZtYV9wYWdlc2l6ZSwKJiM0MzsJCQkgICEhKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fUEZOTUFQKSk7CiYjNDM7CiAJaWYgKHdyaXRhYmxlKSB7CiAJCW1hcmtfcGFnZV9kaXJ0eV9pbl9zbG90KGt2bSwgbWVtc2xvdCwgZ2ZuKTsKIAkJcmV0ID0ga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZSgmYW1wO2dzdGFnZSwgcGNhY2hlLCBncGEsIGhmbiAmbHQ7Jmx0OyBQQUdFX1NISUZULApkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vdHJhY2UuaCBiL2FyY2gvcmlzY3Yva3ZtL3RyYWNlLmgKaW5kZXggM2Q1NDE3NWQ4MDVjYmMuLmRiMmQyOGYxZDcxNDgzIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2t2bS90cmFjZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL3RyYWNlLmgKQEAgLTU2LDYgJiM0Mzs1NiwzNSBAQCBUUkFDRV9FVkVOVChrdm1fZXhpdCwKIAkJX19lbnRyeS0mZ3Q7aHRpbnN0KQogKTsKIAomIzQzO1RSQUNFX0VWRU5UKGt2bV9tbXVfbWFwLAomIzQzOwlUUF9QUk9UTyh1bnNpZ25lZCBsb25nIGdwYSwgdW5zaWduZWQgbG9uZyBodmEsIHVuc2lnbmVkIGxvbmcgaGZuLAomIzQzOwkJIHVuc2lnbmVkIGxvbmcgbWFwX3NpemUsIGJvb2wgaXNfcGZubWFwKSwKJiM0MzsJVFBfQVJHUyhncGEsIGh2YSwgaGZuLCBtYXBfc2l6ZSwgaXNfcGZubWFwKSwKJiM0MzsKJiM0MzsJVFBfU1RSVUNUX19lbnRyeSgKJiM0MzsJCV9fZmllbGQodW5zaWduZWQgbG9uZywgZ3BhKQomIzQzOwkJX19maWVsZCh1bnNpZ25lZCBsb25nLCBodmEpCiYjNDM7CQlfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGhmbikKJiM0MzsJCV9fZmllbGQodW5zaWduZWQgbG9uZywgbWFwX3NpemUpCiYjNDM7CQlfX2ZpZWxkKGJvb2wsIGlzX3Bmbm1hcCkKJiM0MzsJKSwKJiM0MzsKJiM0MzsJVFBfZmFzdF9hc3NpZ24oCiYjNDM7CQlfX2VudHJ5LSZndDtncGEJCT0gZ3BhOwomIzQzOwkJX19lbnRyeS0mZ3Q7aHZhCQk9IGh2YTsKJiM0MzsJCV9fZW50cnktJmd0O2hmbgkJPSBoZm47CiYjNDM7CQlfX2VudHJ5LSZndDttYXBfc2l6ZQk9IG1hcF9zaXplOwomIzQzOwkJX19lbnRyeS0mZ3Q7aXNfcGZubWFwCT0gaXNfcGZubWFwOwomIzQzOwkpLAomIzQzOwomIzQzOwlUUF9wcmludGsoJiMzNDtHUEE6MHglbHgsIEhWQToweCVseCwgSEZOOjB4JWx4LCBzaXplOiVsdUtCLCBwZm5tYXA6JWQmIzM0OywKJiM0MzsJCV9fZW50cnktJmd0O2dwYSwKJiM0MzsJCV9fZW50cnktJmd0O2h2YSwKJiM0MzsJCV9fZW50cnktJmd0O2hmbiwKJiM0MzsJCV9fZW50cnktJmd0O21hcF9zaXplICZndDsmZ3Q7IDEwLAomIzQzOwkJX19lbnRyeS0mZ3Q7aXNfcGZubWFwKQomIzQzOyk7CiYjNDM7CiAjZW5kaWYgLyogX1RSQUNFX1JTSUNWX0tWTV9IICovCiAKICN1bmRlZiBUUkFDRV9JTkNMVURFX1BBVEgKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDg6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg3NwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDY5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFdmFsdWF0aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSBuZWVkIHRvIGFzc2VzcyB3aGV0aGVyIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGtlcm5lbCB0aGF0IHdhcnJhbnQgZnV6emluZy4gVGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uIHRlbGxzIG1lIGl0IG1vZGlmaWVzIGBhcmNoL3Jpc2N2L2t2bS9tbXUuY2AgYW5kIGBhcmNoL3Jpc2N2L2t2bS90cmFjZS5oYC4gU3BlY2lmaWNhbGx5LCB0aGUgY2hhbmdlIHRvIGBtbXUuY2AgaXMgdGhlIGtleS4gVGhlIHBhdGNoIGFsdGVycyB0aGUgYmVoYXZpb3Igb2YgYGt2bV9yaXNjdl9tbXVfbWFwYCBjb25jZXJuaW5nIGBWTV9QRk5NQVBgLiBUaGUgb3JpZ2luYWwgY29kZSBhbHdheXMgdXNlZCBgUEFHRV9TSVpFYCBmb3IgYFZNX1BGTk1BUGAgaWYgbG9nZ2luZyB3YXMgZW5hYmxlZCBvciB0aGUgYFZNX1BGTk1BUGAgZmxhZyB3YXMgc2V0LiBOb3csIGl0IHNlZW1zIHRoYXQgaWYgbG9nZ2luZyBpcyBkaXNhYmxlZCwgYW5kIHRoZSBgVk1fUEZOTUFQYCBmbGFnIGlzIHNldCwgaXQgY2hlY2tzIGZvciBgcGZubWFwX21hcHBpbmdfc2l6ZWAsIHdoaWNoIGNhbiBwb3RlbnRpYWxseSByZXR1cm4gYFBNRF9TSVpFYCBvciBsYXJnZXIgbWFwcGluZ3MgaW5zdGVhZCBvZiBqdXN0IGBQQUdFX1NJWkVgLiBUaGlzIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgdGhlIFJJU0MtViBLVk0gTU1VIGhhbmRsZXMgdGhlIG1hcHBpbmcgc2l6ZSwgcGFydGljdWxhcmx5IGZvciBkZXZpY2UgbWVtb3J5LgoKVGhpcyBpcyBzaWduaWZpY2FudC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFJJU0MtViBLVk0sIGFzIGEgY29yZSB2aXJ0dWFsaXphdGlvbiBmZWF0dXJlLCBpcyBhIG5hdHVyYWwgdGFyZ2V0LiBBbmQsIHllcywgU3l6a2FsbGVyIGRvZXMgaW5kZWVkIHN1cHBvcnQgUklTQy1WIEtWTSwgd2hpY2ggaXMgZ29vZC4gQ2FuIEkgdHJpZ2dlciBpdCBpbiBzb21ldGhpbmcgbGlrZSBHQ0Ugb3IgUUVNVT8gWWVzLCBRRU1VIGRvZXMgc3VwcG9ydCBSSVNDLVYgS1ZNLCBlaXRoZXIgdGhyb3VnaCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gb3IgcnVubmluZyBpdCBvbiBhbiBhY3R1YWwgUklTQy1WIGhvc3QuIFN5emthbGxlciBjYW4gcnVuIGluIGEgUklTQy1WIFFFTVUgd2l0aCBLVk0gZW5hYmxlZC4KClRoZSBwcm9tcHQgc3BlY2lmaWVkIHRoYXQgSSBzaG91bGRuJiMzOTt0IGNvbnNpZGVyIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRlZCBoYXJkd2FyZS4gS1ZNIGlzIHJlYWNoYWJsZSBoZXJlLiBOZXN0ZWQgdmlydHVhbGl6YXRpb24gd29ya3MuIE9yLCBpZiB3ZSBhcmUgcnVubmluZyBvbiBiYXJlLW1ldGFsLCBpdCYjMzk7cyBmaW5lLiBRRU1VIGFsc28gZW11bGF0ZXMgUklTQy1WIHdpdGggS1ZNIHN1cHBvcnQsIHNvIGl0JiMzOTtzIGFsbCBnb29kLiBTeXprYWxsZXIgcnVucyBRRU1VIHdpdGggS1ZNIGVuYWJsZWQgaWYgdGhlIGhvc3Qgc3VwcG9ydHMgaXQsIGJ1dCBjYW4gdGVzdCBLVk0gdmlhIGAvZGV2L2t2bWAgZXZlbiBpZiB0aGUgaG9zdCBkb2VzbiYjMzk7dCBoYXZlIGhhcmR3YXJlIEtWTS4gSW4gZmFjdCwgU3l6a2FsbGVyIGhlYXZpbHkgdGVzdHMgS1ZNIGluIGdlbmVyYWwuCgpOb3csIHRvIG1ha2Ugc3VyZSwgSSB3aWxsIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgZm9yIFJJU0MtViBLVk0sIGp1c3QgdG8gdmVyaWZ5IGhvdyBpdCYjMzk7cyBlbmFibGVkLiBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIGxvY2F0ZSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBzZXR0aW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwODo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy0xOS1cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTVxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy0yMS1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA4OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMjQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipLVk0gQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBLVk1gIGNvbmZpZ3VyYXRpb24uIFRoZSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7T2theSwgYEtWTWAgaXMgdGhlIGNvbmZpZyBmaWxlIHRoYXQgbWFuYWdlcyB0aGUga2VybmVsLWJhc2VkIHZpcnR1YWwgbWFjaGluZSBzdXBwb3J0LCBnb3QgaXQuJiMzNDsgQnV0IGhvbGQgb24gYSBzZWNvbmQuLi4gaXMgdGhhdCByZWFsbHkgKmFsbCogdGhlcmUgaXMgdG8gaXQ/IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuCgpJJiMzOTttIHRoaW5raW5nLCAmIzM0O0xldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIHNvdXJjZS4mIzM0OyBUaGUgZGVmaW5pdGl2ZSBwbGFjZSB0byB2ZXJpZnkgdGhlIHNjb3BlIG9mIHRoZSBLVk0gY29uZmlndXJhdGlvbiB3b3VsZCBiZSBpbiB0aGUgY29kZSBpdHNlbGYsIHJpZ2h0PyBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBsb29rIGF0IGBhcmNoL3Jpc2N2L2t2bS9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGRldGFpbGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgUklTQy1WIEtWTSBhcmUgbGFpZCBvdXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgc3VidGxlIGRlcGVuZGVuY2llcywgb3IgcmVsZXZhbnQgc3ViLW9wdGlvbnMgYnkgb25seSBjb25zaWRlcmluZyB0aGUgbmFtZSBvZiB0aGUgdG9wLWxldmVsIEtWTS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwODo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgS1ZNIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0c291cmNlIFwmIzM0O3ZpcnQva3ZtL0tjb25maWdcJiMzNDtcbiAgIDc6XHRcbiAgIDg6XHRtZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXG4gICA5Olx0XHRib29sIFwmIzM0O1ZpcnR1YWxpemF0aW9uXCYjMzQ7XG4gIDEwOlx0XHRoZWxwXG4gIDExOlx0XHQgIFNheSBZIGhlcmUgdG8gZ2V0IHRvIHNlZSBvcHRpb25zIGZvciB1c2luZyB5b3VyIExpbnV4IGhvc3QgdG8gcnVuXG4gIDEyOlx0XHQgIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zIGluc2lkZSB2aXJ0dWFsIG1hY2hpbmVzIChndWVzdHMpLlxuICAxMzpcdFx0ICBUaGlzIG9wdGlvbiBhbG9uZSBkb2VzIG5vdCBhZGQgYW55IGtlcm5lbCBjb2RlLlxuICAxNDpcdFxuICAxNTpcdFx0ICBJZiB5b3Ugc2F5IE4sIGFsbCBvcHRpb25zIGluIHRoaXMgc3VibWVudSB3aWxsIGJlIHNraXBwZWQgYW5kXG4gIDE2Olx0XHQgIGRpc2FibGVkLlxuICAxNzpcdFxuICAxODpcdGlmIFZJUlRVQUxJWkFUSU9OXG4gIDE5Olx0XG4gIDIwOlx0Y29uZmlnIEtWTVxuICAyMTpcdFx0dHJpc3RhdGUgXCYjMzQ7S2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XCYjMzQ7XG4gIDIyOlx0XHRkZXBlbmRzIG9uIFJJU0NWX1NCSSBcdTAwMjZcdTAwMjYgTU1VXG4gIDIzOlx0XHRzZWxlY3QgSEFWRV9LVk1fSVJRQ0hJUFxuICAyNDpcdFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9ST1VUSU5HXG4gIDI1Olx0XHRzZWxlY3QgSEFWRV9LVk1fTVNJXG4gIDI2Olx0XHRzZWxlY3QgSEFWRV9LVk1fUkVBRE9OTFlfTUVNXG4gIDI3Olx0XHRzZWxlY3QgSEFWRV9LVk1fRElSVFlfUklOR19BQ1FfUkVMXG4gIDI4Olx0XHRzZWxlY3QgS1ZNX0NPTU1PTlxuICAyOTpcdFx0c2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxuICAzMDpcdFx0c2VsZWN0IEtWTV9HRU5FUklDX0hBUkRXQVJFX0VOQUJMSU5HXG4gIDMxOlx0XHRzZWxlY3QgS1ZNX01NSU9cbiAgMzI6XHRcdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xuICAzMzpcdFx0c2VsZWN0IFNDSEVEX0lORk9cbiAgMzQ6XHRcdHNlbGVjdCBHVUVTVF9QRVJGX0VWRU5UUyBpZiBQRVJGX0VWRU5UU1xuICAzNTpcdFx0aGVscFxuICAzNjpcdFx0ICBTdXBwb3J0IGhvc3RpbmcgdmlydHVhbGl6ZWQgZ3Vlc3QgbWFjaGluZXMuXG4gIDM3Olx0XG4gIDM4Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDM5Olx0XG4gIDQwOlx0ZW5kaWYgIyBWSVJUVUFMSVpBVElPTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA4OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwMDQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtWTSBNZW1vcnkgTWFwcGluZyoqCgpPa2F5LCBzbyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGlzIGNsZWFybHkgS1ZNLiBNeSBwcmltYXJ5IHRhcmdldHMgaGVyZSBhcmUgYHBmbm1hcF9tYXBwaW5nX3NpemVgIGFuZCBga3ZtX3Jpc2N2X21tdV9tYXBgLiBXYWl0IGEgc2Vjb25k4oCmIEkgc2VlIGBrdm1fcmlzY3ZfbW11X21hcGAgaGFzIGJlZW4gbW9kaWZpZWQgYW5kIGBwZm5tYXBfbWFwcGluZ19zaXplYCBoYXMgYmVlbiBhZGRlZC4gTXkgc3BpZGVyIHNlbnNlIGlzIHRpbmdsaW5nLCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc2lnbmlmaWNhbmNlIG9mIHRob3NlIGNoYW5nZXMsIGVzcGVjaWFsbHkgd2l0aCBga3ZtX3Jpc2N2X21tdV9tYXBgLgoKUmlnaHQsIGxldCYjMzk7cyBlc3RhYmxpc2ggaWYgYGt2bV9yaXNjdl9tbXVfbWFwYCBpcyBhIHBlcmZvcm1hbmNlLWNyaXRpY2FsIHBhdGguIEJpbmdvLCBpdCYjMzk7cyBjYWxsZWQgZHVyaW5nIG1lbW9yeSBtYXBwaW5nIGZvciBLVk0gZ3Vlc3RzLiBBbmQgZnVydGhlciwgaXQmIzM5O3MgYWN0dWFsbHkgdGhlIHBhZ2UgZmF1bHQgaGFuZGxlciAqd2l0aGluKiBLVk0uIERlZmluaXRlbHkgYSBob3RzcG90LiBTbywgd2hlcmUgaXMgdGhpcyBoYW5kbGVyIHRyaWdnZXJlZD8gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIGdyYXBoIG5vdyB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBhbmQgZGV0ZXJtaW5lIGlmIHRoZSBtb2RpZmljYXRpb24gaW1wcm92ZXMgb3IgZGVncmFkZXMgcGVyZm9ybWFuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDg6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3Jpc2N2X21tdV9tYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vbW11LmM9NDQwPXN0YXRpYyB1bnNpZ25lZCBsb25nIHBmbm1hcF9tYXBwaW5nX3NpemUoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTQ1MC1cbmFyY2gvcmlzY3Yva3ZtL21tdS5jOjQ1MTppbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNDUyLVx0XHQgICAgICBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgaHZhLCBib29sIGlzX3dyaXRlLFxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfZXhpdC5jPTE1PXN0YXRpYyBpbnQgZ3N0YWdlX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqcnVuLFxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfZXhpdC5jLTQ1LVxuYXJjaC9yaXNjdi9rdm0vdmNwdV9leGl0LmM6NDY6XHRyZXQgPSBrdm1fcmlzY3ZfbW11X21hcCh2Y3B1LCBtZW1zbG90LCBmYXVsdF9hZGRyLCBodmEsXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X2V4aXQuYy00Ny1cdFx0XHRcdCh0cmFwLVx1MDAzZXNjYXVzZSA9PSBFWENfU1RPUkVfR1VFU1RfUEFHRV9GQVVMVCkgPyB0cnVlIDogZmFsc2UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDg6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY5MQoJCQkJCQkJb3V0cHV0OiAxNDgKCQkJCQkJCXRob3VnaHRzOiA1ODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFJJU0MtViBLVk0gUGFnZSBGYXVsdCBIYW5kbGluZyoqCgpPa2F5LCBzbyB0aGlzIGlzIHRyaWdnZXJlZCBieSBgZ3N0YWdlX3BhZ2VfZmF1bHRgLCB0aGUgZ3Vlc3QgcGFnZSBmYXVsdCBoYW5kbGVyLiBJdCYjMzk7cyBhIGhvdCBwYXRoLCBidXQgd2hhdCYjMzk7cyBjaGFuZ2VkIGlzIHNwZWNpZmljLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgcGZubWFwX21hcHBpbmdfc2l6ZWAgYW5kIGBrdm1fcmlzY3ZfbW11X21hcGAuIFdhaXQsIGBwZm5tYXBfbWFwcGluZ19zaXplYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgc28gaXQmIzM5O3MgcHJvYmFibHkgaW5saW5lZC4uLiBMZXQmIzM5O3MgYWxzbyBjb25zaWRlciBgZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZ2AsIHdoaWNoIHdhcyBhbHNvIG1vZGlmaWVkIGFuZCBpcyAqYWxzbyogc3RhdGljLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgYGt2bV9yaXNjdl9tbXVfbWFwYCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIG5ldyBsb2dpYy4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIHRoaXMgY29kZSBwYXRoLiBJcyB0aGVyZSBzb21ldGhpbmcgaW4gcGFydGljdWxhciB0aGF0IEkgbmVlZCB0byBlbmFibGU/IEFoLCBgVk1fUEZOTUFQYCBpcyByZWxhdGVkIHRvIGRldmljZSBtZW1vcnkgbWFwcGluZywgbGlrZSBWRklPLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgVkZJTyBpcyByZWxldmFudCBoZXJlLiBUaGUgY29tbWVudHMgbWVudGlvbiAmIzM0O0RldGVybWluZSB0aGUgRy1zdGFnZSBtYXBwaW5nIHNpemUgZm9yIGEgVk1fUEZOTUFQIChlLmcuIGhvc3QgZGV2aWNlIE1NSU8pIGZhdWx0LiYjMzQ7IFRvIHRyaWdnZXIgdGhpcywgd2UgbmVlZCBhIGBWTV9QRk5NQVBgIFZNQS4gVGhpcyBpcyBjcmVhdGVkIGJ5IG1hcHBpbmcgZGV2aWNlIG1lbW9yeSwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IFZGSU8gYW5kIG90aGVyIGRyaXZlcnMgdXNpbmcgYHJlbWFwX3Bmbl9yYW5nZWAgZG8uIFN5emthbGxlciBjYW4gcHJvYmFibHkgbWFwIGAvZGV2L2t2bWAgb3Igc2ltaWxhciBkZXZpY2VzIHRvIHNldCB1cCBgVk1fUEZOTUFQYCBhbmQgcGFzcyBpdCB0byBLVk0gYXMgYSBtZW1vcnkgc2xvdC4gU28gdGhlIGtleSBjb25maWcgaGVyZSBpcyBgS1ZNYC4KCkxldCBtZSBkb3VibGUtY2hlY2suLi4gWWVzLCBgS1ZNYCBlbmFibGVzIGBhcmNoL3Jpc2N2L2t2bS9tbXUuY2AuIFRoZSBwYXRjaCAqaXMqIGluIGBhcmNoL3Jpc2N2L2t2bS9tbXUuY2AsIHdoaWNoIG1ha2VzIGl0IFJJU0MtViBzcGVjaWZpYy4gQW5kIFN5emthbGxlciBmdXp6ZXMgUklTQy1WLi4uIHBlcmZlY3QhCgpTbywgdG8gc3VtbWFyaXplIGZvciBmdXp6aW5nOgoKKiAgICoqV29ydGhGdXp6aW5nOioqIEFic29sdXRlbHkhCiogICAqKkZvY3VzU3ltYm9sczoqKiBga3ZtX3Jpc2N2X21tdV9tYXBgICh0aGUgbWFpbiBmdW5jdGlvbiBvZiBpbnRlcmVzdCksIGBwZm5tYXBfbWFwcGluZ19zaXplYCAodGhlIG5ldywgaGVscGVyIGZ1bmN0aW9uKSwgYW5kIGBmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nYCAodGhlIG1vZGlmaWVkIGNoZWNrKS4KKiAgICoqRW5hYmxlQ29uZmlnczoqKiBgS1ZNYAoqICAgKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSSVNDLVYgS1ZNIE1NVSBwYWdlIGZhdWx0IGhhbmRsZXIgdG8gc3VwcG9ydCBodWdlIHBhZ2UgbWFwcGluZ3MgKFBNRF9TSVpFKSBmb3IgZGV2aWNlIG1lbW9yeSAoVk1fUEZOTUFQKS4gVGhpcyByZXByZXNlbnRzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgdmlydHVhbGl6YXRpb24gbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMsIGFuZCBhcyBzdWNoLCBpdCAqbXVzdCogYmUgZnV6emVkIHRvIHByZXZlbnQgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIGhvc3QgY3Jhc2hlcyByZXN1bHRpbmcgZnJvbSBtYWxpY2lvdXMgb3IgZWRnZS1jYXNlIGd1ZXN0IHBhZ2UgZmF1bHRzLgoKSSYjMzk7bSBzZXR0aW5nIGBrdm1fcmlzY3ZfbW11X21hcGAgYXMgdGhlIGNvcmUgc3ltYm9sLiBgcGZubWFwX21hcHBpbmdfc2l6ZWAgaXMgYSBuZXcgZnVuY3Rpb24gYW5kIGBmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nYCBpcyBhbHNvIG1vZGlmaWVkLiBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gbm90ZSBhbGwgb2YgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDg6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9yaXNjdl9tbXVfbWFwJiMzNDssCiAgICAmIzM0O3Bmbm1hcF9tYXBwaW5nX3NpemUmIzM0OywKICAgICYjMzQ7ZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgS1ZNIE1NVSBwYWdlIGZhdWx0IGhhbmRsZXIgb24gUklTQy1WIHRvIHN1cHBvcnQgaHVnZSBwYWdlIG1hcHBpbmdzIChQTURfU0laRSkgZm9yIGRldmljZSBtZW1vcnkgKFZNX1BGTk1BUCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSB2aXJ0dWFsaXphdGlvbiBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIG1lbW9yeSBjb3JydXB0aW9uIG9yIGhvc3QgY3Jhc2hlcyB3aGVuIGhhbmRsaW5nIG1hbGljaW91cyBvciBlZGdlLWNhc2UgZ3Vlc3QgcGFnZSBmYXVsdHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9yaXNjdl9tbXVfbWFwJiMzNDssCiAgICAmIzM0O3Bmbm1hcF9tYXBwaW5nX3NpemUmIzM0OywKICAgICYjMzQ7ZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgS1ZNIE1NVSBwYWdlIGZhdWx0IGhhbmRsZXIgb24gUklTQy1WIHRvIHN1cHBvcnQgaHVnZSBwYWdlIG1hcHBpbmdzIChQTURfU0laRSkgZm9yIGRldmljZSBtZW1vcnkgKFZNX1BGTk1BUCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSB2aXJ0dWFsaXphdGlvbiBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIG1lbW9yeSBjb3JydXB0aW9uIG9yIGhvc3QgY3Jhc2hlcyB3aGVuIGhhbmRsaW5nIG1hbGljaW91cyBvciBlZGdlLWNhc2UgZ3Vlc3QgcGFnZSBmYXVsdHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwODo1MjozOS43MzM0NTMxODFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzU2MTI0NzY0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fcmlzY3ZfbW11X21hcFwiLFxuICAgIFwicGZubWFwX21hcHBpbmdfc2l6ZVwiLFxuICAgIFwiZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBLVk0gTU1VIHBhZ2UgZmF1bHQgaGFuZGxlciBvbiBSSVNDLVYgdG8gc3VwcG9ydCBodWdlIHBhZ2UgbWFwcGluZ3MgKFBNRF9TSVpFKSBmb3IgZGV2aWNlIG1lbW9yeSAoVk1fUEZOTUFQKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHZpcnR1YWxpemF0aW9uIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBkb2Vzbid0IGludHJvZHVjZSBtZW1vcnkgY29ycnVwdGlvbiBvciBob3N0IGNyYXNoZXMgd2hlbiBoYW5kbGluZyBtYWxpY2lvdXMgb3IgZWRnZS1jYXNlIGd1ZXN0IHBhZ2UgZmF1bHRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwODo1MjozOS43MzM0NTg0MzJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5ODUwNDAzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGZhYzA5Nzk1ZWY3ZDMwNmNhOThlNzEyMTUzZTMwZWE1MzhhMDFjY2ZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMTAgMDg6NTI6MzggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vbW11LmMgYi9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xcbmluZGV4IDJkM2RlZjAyNDI3MGMwLi41M2ZiMzRkNGI3NmQwOSAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL21tdS5jXFxuQEAgLTE2LDYgKzE2LDggQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm1fbW11LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX25hY2wuaFxcdTAwM2VcXG4gXFxuKyNpbmNsdWRlIFxcXCJ0cmFjZS5oXFxcIlxcbitcXG4gc3RhdGljIHZvaWQgbW11X3dwX21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCBpbnQgc2xvdClcXG4ge1xcbiBcXHRzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90cyA9IGt2bV9tZW1zbG90cyhrdm0pO1xcbkBAIC0yODYsNyArMjg4LDcgQEAgYm9vbCBrdm1fdGVzdF9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCBmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIGh2YSlcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgaHZhLCB1bnNpZ25lZCBsb25nIG1hcF9zaXplKVxcbiB7XFxuIFxcdGh2YV90IHVhZGRyX3N0YXJ0LCB1YWRkcl9lbmQ7XFxuIFxcdGdwYV90IGdwYV9zdGFydDtcXG5AQCAtMzIxLDcgKzMyMyw3IEBAIHN0YXRpYyBib29sIGZhdWx0X3N1cHBvcnRzX2dzdGFnZV9odWdlX21hcHBpbmcoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcXG4gXFx0ICogICBlIC1cXHUwMDNlIGdcXG4gXFx0ICogICBmIC1cXHUwMDNlIGhcXG4gXFx0ICovXFxuLVxcdGlmICgoZ3BhX3N0YXJ0IFxcdTAwMjYgKFBNRF9TSVpFIC0gMSkpICE9ICh1YWRkcl9zdGFydCBcXHUwMDI2IChQTURfU0laRSAtIDEpKSlcXG4rXFx0aWYgKChncGFfc3RhcnQgXFx1MDAyNiAobWFwX3NpemUgLSAxKSkgIT0gKHVhZGRyX3N0YXJ0IFxcdTAwMjYgKG1hcF9zaXplIC0gMSkpKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHQvKlxcbkBAIC0zMzYsNyArMzM4LDcgQEAgc3RhdGljIGJvb2wgZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZyhzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxcbiBcXHQgKiB1c2Vyc3BhY2VfYWRkciBvciB0aGUgYmFzZV9nZm4sIGFzIGJvdGggYXJlIGVxdWFsbHkgYWxpZ25lZCAocGVyXFxuIFxcdCAqIHRoZSBjaGVjayBhYm92ZSkgYW5kIGVxdWFsbHkgc2l6ZWQuXFxuIFxcdCAqL1xcbi1cXHRyZXR1cm4gKGh2YSBcXHUwMDNlPSBBTElHTih1YWRkcl9zdGFydCwgUE1EX1NJWkUpKSBcXHUwMDI2XFx1MDAyNiAoaHZhIFxcdTAwM2MgQUxJR05fRE9XTih1YWRkcl9lbmQsIFBNRF9TSVpFKSk7XFxuK1xcdHJldHVybiAoaHZhIFxcdTAwM2U9IEFMSUdOKHVhZGRyX3N0YXJ0LCBtYXBfc2l6ZSkpIFxcdTAwMjZcXHUwMDI2IChodmEgXFx1MDAzYyBBTElHTl9ET1dOKHVhZGRyX2VuZCwgbWFwX3NpemUpKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBnZXRfaHZhX21hcHBpbmdfc2l6ZShzdHJ1Y3Qga3ZtICprdm0sXFxuQEAgLTQwNCw3ICs0MDYsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyB0cmFuc3BhcmVudF9odWdlcGFnZV9hZGp1c3Qoc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHQgKiBzdXJlIHRoYXQgdGhlIEhWQSBhbmQgR1BBIGFyZSBzdWZmaWNpZW50bHkgYWxpZ25lZCBhbmQgdGhhdCB0aGVcXG4gXFx0ICogYmxvY2sgbWFwIGlzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIG1lbXNsb3QuXFxuIFxcdCAqL1xcbi1cXHRpZiAoZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZyhtZW1zbG90LCBodmEpKSB7XFxuK1xcdGlmIChmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nKG1lbXNsb3QsIGh2YSwgUE1EX1NJWkUpKSB7XFxuIFxcdFxcdGludCBzejtcXG4gXFxuIFxcdFxcdHN6ID0gZ2V0X2h2YV9tYXBwaW5nX3NpemUoa3ZtLCBodmEpO1xcbkBAIC00MjEsNiArNDIzLDMxIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHRyYW5zcGFyZW50X2h1Z2VwYWdlX2FkanVzdChzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdHJldHVybiBQQUdFX1NJWkU7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIERldGVybWluZSB0aGUgRy1zdGFnZSBtYXBwaW5nIHNpemUgZm9yIGEgVk1fUEZOTUFQIChlLmcuIGhvc3QgZGV2aWNlXFxuKyAqIE1NSU8pIGZhdWx0LiAgVW5saWtlIGFybTY0J3Mgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24sIHdlIG5ldmVyIGRlcml2ZSB0aGVcXG4rICogaG9zdCBwaHlzaWNhbCBhZGRyZXNzIGZyb20gdm1hLVxcdTAwM2V2bV9wZ29mZiAod2hpY2ggaXMgdW5yZWxpYWJsZSBzaW5jZSB0aGVcXG4rICogVkZJTyB1bm1hcF9tYXBwaW5nX3JhbmdlKCkgY2hhbmdlcykuICBJbnN0ZWFkIHdlIHdhbGsgdGhlIGhvc3QgcGFnZSB0YWJsZXNcXG4rICogdmlhIGdldF9odmFfbWFwcGluZ19zaXplKCk6IGlmIHRoZSBob3N0IGl0c2VsZiBpbnN0YWxsZWQgYSBsZWFmIGJsb2NrIGZvclxcbisgKiB0aGlzIGFkZHJlc3MsIHBoeXNpY2FsIGNvbnRpZ3VpdHkgd2l0aGluIHRoYXQgYmxvY2sgaXMgYWxyZWFkeSBndWFyYW50ZWVkXFxuKyAqIGJ5IHRoZSBob3N0IG1tLiAgVGhlIG1lbW9yeSB0eXBlIHN0YXlzIGNvcnJlY3QgYmVjYXVzZSBSSVNDLVYgZGVyaXZlcyBpdFxcbisgKiBmcm9tIHRoZSBwaHlzaWNhbCBhZGRyZXNzJyBQTUEsIGluZGVwZW5kZW50IG9mIHRoZSBHLXN0YWdlIFBURSBzaXplLlxcbisgKlxcbisgKiBCZSBjb25zZXJ2YXRpdmUgZm9yIG5vdyBhbmQgb25seSBwcm9tb3RlIHRvIFBNRC1zaXplZCBibG9ja3M7IFBVRC1zaXplZFxcbisgKiBkZXZpY2UgYmxvY2tzIGFyZSBsZWZ0IGFzIGZ1dHVyZSB3b3JrLiAgRmFsbCBiYWNrIHRvIFBBR0VfU0laRSB3aGVuZXZlclxcbisgKiBjb250aWd1aXR5IG9yIEhWQS9HUEEgYWxpZ25tZW50IGNhbm5vdCBiZSBwcm92ZW4uXFxuKyAqL1xcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBwZm5tYXBfbWFwcGluZ19zaXplKHN0cnVjdCBrdm0gKmt2bSxcXG4rXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXFxuK1xcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIGh2YSlcXG4re1xcbitcXHRpZiAoZ2V0X2h2YV9tYXBwaW5nX3NpemUoa3ZtLCBodmEpIFxcdTAwM2U9IFBNRF9TSVpFIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nKG1lbXNsb3QsIGh2YSwgUE1EX1NJWkUpKVxcbitcXHRcXHRyZXR1cm4gUE1EX1NJWkU7XFxuK1xcbitcXHRyZXR1cm4gUEFHRV9TSVpFO1xcbit9XFxuK1xcbiBpbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxcbiBcXHRcXHQgICAgICBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgaHZhLCBib29sIGlzX3dyaXRlLFxcbiBcXHRcXHQgICAgICBzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nICpvdXRfbWFwKVxcbkBAIC00NjUsMTEgKzQ5MiwxNCBAQCBpbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxcbiBcXHRlbHNlXFxuIFxcdFxcdHZtYV9wYWdlc2hpZnQgPSBQQUdFX1NISUZUO1xcbiBcXHR2bWFfcGFnZXNpemUgPSAxVUxMIFxcdTAwM2NcXHUwMDNjIHZtYV9wYWdlc2hpZnQ7XFxuLVxcdGlmIChsb2dnaW5nIHx8ICh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fUEZOTUFQKSlcXG4rXFxuK1xcdGlmIChsb2dnaW5nKVxcbiBcXHRcXHR2bWFfcGFnZXNpemUgPSBQQUdFX1NJWkU7XFxuK1xcdGVsc2UgaWYgKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9QRk5NQVApXFxuK1xcdFxcdHZtYV9wYWdlc2l6ZSA9IHBmbm1hcF9tYXBwaW5nX3NpemUoa3ZtLCBtZW1zbG90LCBodmEpO1xcbiBcXG4gXFx0aWYgKHZtYV9wYWdlc2l6ZSA9PSBQTURfU0laRSB8fCB2bWFfcGFnZXNpemUgPT0gUFVEX1NJWkUpXFxuLVxcdFxcdGdmbiA9IChncGEgXFx1MDAyNiBodWdlX3BhZ2VfbWFzayhoc3RhdGVfdm1hKHZtYSkpKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbitcXHRcXHRnZm4gPSAoZ3BhIFxcdTAwMjYgfih2bWFfcGFnZXNpemUgLSAxKSkgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFJlYWQgbW11X2ludmFsaWRhdGVfc2VxIHNvIHRoYXQgS1ZNIGNhbiBkZXRlY3QgaWYgdGhlIHJlc3VsdHMgb2ZcXG5AQCAtNTE1LDYgKzU0NSw5IEBAIGludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXFxuIFxcdGlmICghbG9nZ2luZyBcXHUwMDI2XFx1MDAyNiAodm1hX3BhZ2VzaXplID09IFBBR0VfU0laRSkpXFxuIFxcdFxcdHZtYV9wYWdlc2l6ZSA9IHRyYW5zcGFyZW50X2h1Z2VwYWdlX2FkanVzdChrdm0sIG1lbXNsb3QsIGh2YSwgXFx1MDAyNmhmbiwgXFx1MDAyNmdwYSk7XFxuIFxcbitcXHR0cmFjZV9rdm1fbW11X21hcChncGEsIGh2YSwgaGZuLCB2bWFfcGFnZXNpemUsXFxuK1xcdFxcdFxcdCAgISEodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1BGTk1BUCkpO1xcbitcXG4gXFx0aWYgKHdyaXRhYmxlKSB7XFxuIFxcdFxcdG1hcmtfcGFnZV9kaXJ0eV9pbl9zbG90KGt2bSwgbWVtc2xvdCwgZ2ZuKTtcXG4gXFx0XFx0cmV0ID0ga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZShcXHUwMDI2Z3N0YWdlLCBwY2FjaGUsIGdwYSwgaGZuIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQsXFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3RyYWNlLmggYi9hcmNoL3Jpc2N2L2t2bS90cmFjZS5oXFxuaW5kZXggM2Q1NDE3NWQ4MDVjYmMuLmRiMmQyOGYxZDcxNDgzIDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL3RyYWNlLmhcXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS90cmFjZS5oXFxuQEAgLTU2LDYgKzU2LDM1IEBAIFRSQUNFX0VWRU5UKGt2bV9leGl0LFxcbiBcXHRcXHRfX2VudHJ5LVxcdTAwM2VodGluc3QpXFxuICk7XFxuIFxcbitUUkFDRV9FVkVOVChrdm1fbW11X21hcCxcXG4rXFx0VFBfUFJPVE8odW5zaWduZWQgbG9uZyBncGEsIHVuc2lnbmVkIGxvbmcgaHZhLCB1bnNpZ25lZCBsb25nIGhmbixcXG4rXFx0XFx0IHVuc2lnbmVkIGxvbmcgbWFwX3NpemUsIGJvb2wgaXNfcGZubWFwKSxcXG4rXFx0VFBfQVJHUyhncGEsIGh2YSwgaGZuLCBtYXBfc2l6ZSwgaXNfcGZubWFwKSxcXG4rXFxuK1xcdFRQX1NUUlVDVF9fZW50cnkoXFxuK1xcdFxcdF9fZmllbGQodW5zaWduZWQgbG9uZywgZ3BhKVxcbitcXHRcXHRfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGh2YSlcXG4rXFx0XFx0X19maWVsZCh1bnNpZ25lZCBsb25nLCBoZm4pXFxuK1xcdFxcdF9fZmllbGQodW5zaWduZWQgbG9uZywgbWFwX3NpemUpXFxuK1xcdFxcdF9fZmllbGQoYm9vbCwgaXNfcGZubWFwKVxcbitcXHQpLFxcbitcXG4rXFx0VFBfZmFzdF9hc3NpZ24oXFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZWdwYVxcdFxcdD0gZ3BhO1xcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2VodmFcXHRcXHQ9IGh2YTtcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlaGZuXFx0XFx0PSBoZm47XFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZW1hcF9zaXplXFx0PSBtYXBfc2l6ZTtcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlaXNfcGZubWFwXFx0PSBpc19wZm5tYXA7XFxuK1xcdCksXFxuK1xcbitcXHRUUF9wcmludGsoXFxcIkdQQToweCVseCwgSFZBOjB4JWx4LCBIRk46MHglbHgsIHNpemU6JWx1S0IsIHBmbm1hcDolZFxcXCIsXFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZWdwYSxcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlaHZhLFxcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2VoZm4sXFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZW1hcF9zaXplIFxcdTAwM2VcXHUwMDNlIDEwLFxcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2Vpc19wZm5tYXApXFxuKyk7XFxuK1xcbiAjZW5kaWYgLyogX1RSQUNFX1JTSUNWX0tWTV9IICovXFxuIFxcbiAjdW5kZWYgVFJBQ0VfSU5DTFVERV9QQVRIXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA4OjUyOjQwLjIzMjk1ODM0NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcwNjE3MzMxMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3Jpc2N2X21tdV9tYXBcIixcbiAgICBcInBmbm1hcF9tYXBwaW5nX3NpemVcIixcbiAgICBcImZhdWx0X3N1cHBvcnRzX2dzdGFnZV9odWdlX21hcHBpbmdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgS1ZNIE1NVSBwYWdlIGZhdWx0IGhhbmRsZXIgb24gUklTQy1WIHRvIHN1cHBvcnQgaHVnZSBwYWdlIG1hcHBpbmdzIChQTURfU0laRSkgZm9yIGRldmljZSBtZW1vcnkgKFZNX1BGTk1BUCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSB2aXJ0dWFsaXphdGlvbiBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgZG9lc24ndCBpbnRyb2R1Y2UgbWVtb3J5IGNvcnJ1cHRpb24gb3IgaG9zdCBjcmFzaGVzIHdoZW4gaGFuZGxpbmcgbWFsaWNpb3VzIG9yIGVkZ2UtY2FzZSBndWVzdCBwYWdlIGZhdWx0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmYWMwOTc5NWVmN2QzMDZjYTk4ZTcxMjE1M2UzMGVhNTM4YTAxY2NmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMTAgMDg6NTI6MzggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9tbXUuYyBiL2FyY2gvcmlzY3Yva3ZtL21tdS5jXG5pbmRleCAyZDNkZWYwMjQyNzBjMC4uNTNmYjM0ZDRiNzZkMDkgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xuKysrIGIvYXJjaC9yaXNjdi9rdm0vbW11LmNcbkBAIC0xNiw2ICsxNiw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9tbXUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fbmFjbC5oXHUwMDNlXG4gXG4rI2luY2x1ZGUgXCJ0cmFjZS5oXCJcbitcbiBzdGF0aWMgdm9pZCBtbXVfd3BfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIGludCBzbG90KVxuIHtcbiBcdHN0cnVjdCBrdm1fbWVtc2xvdHMgKnNsb3RzID0ga3ZtX21lbXNsb3RzKGt2bSk7XG5AQCAtMjg2LDcgKzI4OCw3IEBAIGJvb2wga3ZtX3Rlc3RfYWdlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcbiB9XG4gXG4gc3RhdGljIGJvb2wgZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZyhzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxuLVx0XHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBodmEpXG4rXHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGh2YSwgdW5zaWduZWQgbG9uZyBtYXBfc2l6ZSlcbiB7XG4gXHRodmFfdCB1YWRkcl9zdGFydCwgdWFkZHJfZW5kO1xuIFx0Z3BhX3QgZ3BhX3N0YXJ0O1xuQEAgLTMyMSw3ICszMjMsNyBAQCBzdGF0aWMgYm9vbCBmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXG4gXHQgKiAgIGUgLVx1MDAzZSBnXG4gXHQgKiAgIGYgLVx1MDAzZSBoXG4gXHQgKi9cbi1cdGlmICgoZ3BhX3N0YXJ0IFx1MDAyNiAoUE1EX1NJWkUgLSAxKSkgIT0gKHVhZGRyX3N0YXJ0IFx1MDAyNiAoUE1EX1NJWkUgLSAxKSkpXG4rXHRpZiAoKGdwYV9zdGFydCBcdTAwMjYgKG1hcF9zaXplIC0gMSkpICE9ICh1YWRkcl9zdGFydCBcdTAwMjYgKG1hcF9zaXplIC0gMSkpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHQvKlxuQEAgLTMzNiw3ICszMzgsNyBAQCBzdGF0aWMgYm9vbCBmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXG4gXHQgKiB1c2Vyc3BhY2VfYWRkciBvciB0aGUgYmFzZV9nZm4sIGFzIGJvdGggYXJlIGVxdWFsbHkgYWxpZ25lZCAocGVyXG4gXHQgKiB0aGUgY2hlY2sgYWJvdmUpIGFuZCBlcXVhbGx5IHNpemVkLlxuIFx0ICovXG4tXHRyZXR1cm4gKGh2YSBcdTAwM2U9IEFMSUdOKHVhZGRyX3N0YXJ0LCBQTURfU0laRSkpIFx1MDAyNlx1MDAyNiAoaHZhIFx1MDAzYyBBTElHTl9ET1dOKHVhZGRyX2VuZCwgUE1EX1NJWkUpKTtcbitcdHJldHVybiAoaHZhIFx1MDAzZT0gQUxJR04odWFkZHJfc3RhcnQsIG1hcF9zaXplKSkgXHUwMDI2XHUwMDI2IChodmEgXHUwMDNjIEFMSUdOX0RPV04odWFkZHJfZW5kLCBtYXBfc2l6ZSkpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGdldF9odmFfbWFwcGluZ19zaXplKHN0cnVjdCBrdm0gKmt2bSxcbkBAIC00MDQsNyArNDA2LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgdHJhbnNwYXJlbnRfaHVnZXBhZ2VfYWRqdXN0KHN0cnVjdCBrdm0gKmt2bSxcbiBcdCAqIHN1cmUgdGhhdCB0aGUgSFZBIGFuZCBHUEEgYXJlIHN1ZmZpY2llbnRseSBhbGlnbmVkIGFuZCB0aGF0IHRoZVxuIFx0ICogYmxvY2sgbWFwIGlzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIG1lbXNsb3QuXG4gXHQgKi9cbi1cdGlmIChmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nKG1lbXNsb3QsIGh2YSkpIHtcbitcdGlmIChmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nKG1lbXNsb3QsIGh2YSwgUE1EX1NJWkUpKSB7XG4gXHRcdGludCBzejtcbiBcbiBcdFx0c3ogPSBnZXRfaHZhX21hcHBpbmdfc2l6ZShrdm0sIGh2YSk7XG5AQCAtNDIxLDYgKzQyMywzMSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyB0cmFuc3BhcmVudF9odWdlcGFnZV9hZGp1c3Qoc3RydWN0IGt2bSAqa3ZtLFxuIFx0cmV0dXJuIFBBR0VfU0laRTtcbiB9XG4gXG4rLypcbisgKiBEZXRlcm1pbmUgdGhlIEctc3RhZ2UgbWFwcGluZyBzaXplIGZvciBhIFZNX1BGTk1BUCAoZS5nLiBob3N0IGRldmljZVxuKyAqIE1NSU8pIGZhdWx0LiAgVW5saWtlIGFybTY0J3Mgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24sIHdlIG5ldmVyIGRlcml2ZSB0aGVcbisgKiBob3N0IHBoeXNpY2FsIGFkZHJlc3MgZnJvbSB2bWEtXHUwMDNldm1fcGdvZmYgKHdoaWNoIGlzIHVucmVsaWFibGUgc2luY2UgdGhlXG4rICogVkZJTyB1bm1hcF9tYXBwaW5nX3JhbmdlKCkgY2hhbmdlcykuICBJbnN0ZWFkIHdlIHdhbGsgdGhlIGhvc3QgcGFnZSB0YWJsZXNcbisgKiB2aWEgZ2V0X2h2YV9tYXBwaW5nX3NpemUoKTogaWYgdGhlIGhvc3QgaXRzZWxmIGluc3RhbGxlZCBhIGxlYWYgYmxvY2sgZm9yXG4rICogdGhpcyBhZGRyZXNzLCBwaHlzaWNhbCBjb250aWd1aXR5IHdpdGhpbiB0aGF0IGJsb2NrIGlzIGFscmVhZHkgZ3VhcmFudGVlZFxuKyAqIGJ5IHRoZSBob3N0IG1tLiAgVGhlIG1lbW9yeSB0eXBlIHN0YXlzIGNvcnJlY3QgYmVjYXVzZSBSSVNDLVYgZGVyaXZlcyBpdFxuKyAqIGZyb20gdGhlIHBoeXNpY2FsIGFkZHJlc3MnIFBNQSwgaW5kZXBlbmRlbnQgb2YgdGhlIEctc3RhZ2UgUFRFIHNpemUuXG4rICpcbisgKiBCZSBjb25zZXJ2YXRpdmUgZm9yIG5vdyBhbmQgb25seSBwcm9tb3RlIHRvIFBNRC1zaXplZCBibG9ja3M7IFBVRC1zaXplZFxuKyAqIGRldmljZSBibG9ja3MgYXJlIGxlZnQgYXMgZnV0dXJlIHdvcmsuICBGYWxsIGJhY2sgdG8gUEFHRV9TSVpFIHdoZW5ldmVyXG4rICogY29udGlndWl0eSBvciBIVkEvR1BBIGFsaWdubWVudCBjYW5ub3QgYmUgcHJvdmVuLlxuKyAqL1xuK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBmbm1hcF9tYXBwaW5nX3NpemUoc3RydWN0IGt2bSAqa3ZtLFxuK1x0XHRcdFx0XHQgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbitcdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgaHZhKVxuK3tcbitcdGlmIChnZXRfaHZhX21hcHBpbmdfc2l6ZShrdm0sIGh2YSkgXHUwMDNlPSBQTURfU0laRSBcdTAwMjZcdTAwMjZcbitcdCAgICBmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nKG1lbXNsb3QsIGh2YSwgUE1EX1NJWkUpKVxuK1x0XHRyZXR1cm4gUE1EX1NJWkU7XG4rXG4rXHRyZXR1cm4gUEFHRV9TSVpFO1xuK31cbitcbiBpbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxuIFx0XHQgICAgICBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgaHZhLCBib29sIGlzX3dyaXRlLFxuIFx0XHQgICAgICBzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nICpvdXRfbWFwKVxuQEAgLTQ2NSwxMSArNDkyLDE0IEBAIGludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXG4gXHRlbHNlXG4gXHRcdHZtYV9wYWdlc2hpZnQgPSBQQUdFX1NISUZUO1xuIFx0dm1hX3BhZ2VzaXplID0gMVVMTCBcdTAwM2NcdTAwM2Mgdm1hX3BhZ2VzaGlmdDtcbi1cdGlmIChsb2dnaW5nIHx8ICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1BGTk1BUCkpXG4rXG4rXHRpZiAobG9nZ2luZylcbiBcdFx0dm1hX3BhZ2VzaXplID0gUEFHRV9TSVpFO1xuK1x0ZWxzZSBpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9QRk5NQVApXG4rXHRcdHZtYV9wYWdlc2l6ZSA9IHBmbm1hcF9tYXBwaW5nX3NpemUoa3ZtLCBtZW1zbG90LCBodmEpO1xuIFxuIFx0aWYgKHZtYV9wYWdlc2l6ZSA9PSBQTURfU0laRSB8fCB2bWFfcGFnZXNpemUgPT0gUFVEX1NJWkUpXG4tXHRcdGdmbiA9IChncGEgXHUwMDI2IGh1Z2VfcGFnZV9tYXNrKGhzdGF0ZV92bWEodm1hKSkpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuK1x0XHRnZm4gPSAoZ3BhIFx1MDAyNiB+KHZtYV9wYWdlc2l6ZSAtIDEpKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiBcbiBcdC8qXG4gXHQgKiBSZWFkIG1tdV9pbnZhbGlkYXRlX3NlcSBzbyB0aGF0IEtWTSBjYW4gZGV0ZWN0IGlmIHRoZSByZXN1bHRzIG9mXG5AQCAtNTE1LDYgKzU0NSw5IEBAIGludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXG4gXHRpZiAoIWxvZ2dpbmcgXHUwMDI2XHUwMDI2ICh2bWFfcGFnZXNpemUgPT0gUEFHRV9TSVpFKSlcbiBcdFx0dm1hX3BhZ2VzaXplID0gdHJhbnNwYXJlbnRfaHVnZXBhZ2VfYWRqdXN0KGt2bSwgbWVtc2xvdCwgaHZhLCBcdTAwMjZoZm4sIFx1MDAyNmdwYSk7XG4gXG4rXHR0cmFjZV9rdm1fbW11X21hcChncGEsIGh2YSwgaGZuLCB2bWFfcGFnZXNpemUsXG4rXHRcdFx0ICAhISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1BGTk1BUCkpO1xuK1xuIFx0aWYgKHdyaXRhYmxlKSB7XG4gXHRcdG1hcmtfcGFnZV9kaXJ0eV9pbl9zbG90KGt2bSwgbWVtc2xvdCwgZ2ZuKTtcbiBcdFx0cmV0ID0ga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZShcdTAwMjZnc3RhZ2UsIHBjYWNoZSwgZ3BhLCBoZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vdHJhY2UuaCBiL2FyY2gvcmlzY3Yva3ZtL3RyYWNlLmhcbmluZGV4IDNkNTQxNzVkODA1Y2JjLi5kYjJkMjhmMWQ3MTQ4MyAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL3RyYWNlLmhcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL3RyYWNlLmhcbkBAIC01Niw2ICs1NiwzNSBAQCBUUkFDRV9FVkVOVChrdm1fZXhpdCxcbiBcdFx0X19lbnRyeS1cdTAwM2VodGluc3QpXG4gKTtcbiBcbitUUkFDRV9FVkVOVChrdm1fbW11X21hcCxcbitcdFRQX1BST1RPKHVuc2lnbmVkIGxvbmcgZ3BhLCB1bnNpZ25lZCBsb25nIGh2YSwgdW5zaWduZWQgbG9uZyBoZm4sXG4rXHRcdCB1bnNpZ25lZCBsb25nIG1hcF9zaXplLCBib29sIGlzX3Bmbm1hcCksXG4rXHRUUF9BUkdTKGdwYSwgaHZhLCBoZm4sIG1hcF9zaXplLCBpc19wZm5tYXApLFxuK1xuK1x0VFBfU1RSVUNUX19lbnRyeShcbitcdFx0X19maWVsZCh1bnNpZ25lZCBsb25nLCBncGEpXG4rXHRcdF9fZmllbGQodW5zaWduZWQgbG9uZywgaHZhKVxuK1x0XHRfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGhmbilcbitcdFx0X19maWVsZCh1bnNpZ25lZCBsb25nLCBtYXBfc2l6ZSlcbitcdFx0X19maWVsZChib29sLCBpc19wZm5tYXApXG4rXHQpLFxuK1xuK1x0VFBfZmFzdF9hc3NpZ24oXG4rXHRcdF9fZW50cnktXHUwMDNlZ3BhXHRcdD0gZ3BhO1xuK1x0XHRfX2VudHJ5LVx1MDAzZWh2YVx0XHQ9IGh2YTtcbitcdFx0X19lbnRyeS1cdTAwM2VoZm5cdFx0PSBoZm47XG4rXHRcdF9fZW50cnktXHUwMDNlbWFwX3NpemVcdD0gbWFwX3NpemU7XG4rXHRcdF9fZW50cnktXHUwMDNlaXNfcGZubWFwXHQ9IGlzX3Bmbm1hcDtcbitcdCksXG4rXG4rXHRUUF9wcmludGsoXCJHUEE6MHglbHgsIEhWQToweCVseCwgSEZOOjB4JWx4LCBzaXplOiVsdUtCLCBwZm5tYXA6JWRcIixcbitcdFx0X19lbnRyeS1cdTAwM2VncGEsXG4rXHRcdF9fZW50cnktXHUwMDNlaHZhLFxuK1x0XHRfX2VudHJ5LVx1MDAzZWhmbixcbitcdFx0X19lbnRyeS1cdTAwM2VtYXBfc2l6ZSBcdTAwM2VcdTAwM2UgMTAsXG4rXHRcdF9fZW50cnktXHUwMDNlaXNfcGZubWFwKVxuKyk7XG4rXG4gI2VuZGlmIC8qIF9UUkFDRV9SU0lDVl9LVk1fSCAqL1xuIFxuICN1bmRlZiBUUkFDRV9JTkNMVURFX1BBVEhcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA4OjUyOjQwLjIzMjk2MDc0NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5MzU1NTE2ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXZhbHVhdGluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSBuZWVkIHRvIGFzc2VzcyB3aGV0aGVyIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGtlcm5lbCB0aGF0IHdhcnJhbnQgZnV6emluZy4gVGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uIHRlbGxzIG1lIGl0IG1vZGlmaWVzIGBhcmNoL3Jpc2N2L2t2bS9tbXUuY2AgYW5kIGBhcmNoL3Jpc2N2L2t2bS90cmFjZS5oYC4gU3BlY2lmaWNhbGx5LCB0aGUgY2hhbmdlIHRvIGBtbXUuY2AgaXMgdGhlIGtleS4gVGhlIHBhdGNoIGFsdGVycyB0aGUgYmVoYXZpb3Igb2YgYGt2bV9yaXNjdl9tbXVfbWFwYCBjb25jZXJuaW5nIGBWTV9QRk5NQVBgLiBUaGUgb3JpZ2luYWwgY29kZSBhbHdheXMgdXNlZCBgUEFHRV9TSVpFYCBmb3IgYFZNX1BGTk1BUGAgaWYgbG9nZ2luZyB3YXMgZW5hYmxlZCBvciB0aGUgYFZNX1BGTk1BUGAgZmxhZyB3YXMgc2V0LiBOb3csIGl0IHNlZW1zIHRoYXQgaWYgbG9nZ2luZyBpcyBkaXNhYmxlZCwgYW5kIHRoZSBgVk1fUEZOTUFQYCBmbGFnIGlzIHNldCwgaXQgY2hlY2tzIGZvciBgcGZubWFwX21hcHBpbmdfc2l6ZWAsIHdoaWNoIGNhbiBwb3RlbnRpYWxseSByZXR1cm4gYFBNRF9TSVpFYCBvciBsYXJnZXIgbWFwcGluZ3MgaW5zdGVhZCBvZiBqdXN0IGBQQUdFX1NJWkVgLiBUaGlzIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgdGhlIFJJU0MtViBLVk0gTU1VIGhhbmRsZXMgdGhlIG1hcHBpbmcgc2l6ZSwgcGFydGljdWxhcmx5IGZvciBkZXZpY2UgbWVtb3J5LlxuXG5UaGlzIGlzIHNpZ25pZmljYW50LiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gUklTQy1WIEtWTSwgYXMgYSBjb3JlIHZpcnR1YWxpemF0aW9uIGZlYXR1cmUsIGlzIGEgbmF0dXJhbCB0YXJnZXQuIEFuZCwgeWVzLCBTeXprYWxsZXIgZG9lcyBpbmRlZWQgc3VwcG9ydCBSSVNDLVYgS1ZNLCB3aGljaCBpcyBnb29kLiBDYW4gSSB0cmlnZ2VyIGl0IGluIHNvbWV0aGluZyBsaWtlIEdDRSBvciBRRU1VPyBZZXMsIFFFTVUgZG9lcyBzdXBwb3J0IFJJU0MtViBLVk0sIGVpdGhlciB0aHJvdWdoIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBvciBydW5uaW5nIGl0IG9uIGFuIGFjdHVhbCBSSVNDLVYgaG9zdC4gU3l6a2FsbGVyIGNhbiBydW4gaW4gYSBSSVNDLVYgUUVNVSB3aXRoIEtWTSBlbmFibGVkLlxuXG5UaGUgcHJvbXB0IHNwZWNpZmllZCB0aGF0IEkgc2hvdWxkbid0IGNvbnNpZGVyIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRlZCBoYXJkd2FyZS4gS1ZNIGlzIHJlYWNoYWJsZSBoZXJlLiBOZXN0ZWQgdmlydHVhbGl6YXRpb24gd29ya3MuIE9yLCBpZiB3ZSBhcmUgcnVubmluZyBvbiBiYXJlLW1ldGFsLCBpdCdzIGZpbmUuIFFFTVUgYWxzbyBlbXVsYXRlcyBSSVNDLVYgd2l0aCBLVk0gc3VwcG9ydCwgc28gaXQncyBhbGwgZ29vZC4gU3l6a2FsbGVyIHJ1bnMgUUVNVSB3aXRoIEtWTSBlbmFibGVkIGlmIHRoZSBob3N0IHN1cHBvcnRzIGl0LCBidXQgY2FuIHRlc3QgS1ZNIHZpYSBgL2Rldi9rdm1gIGV2ZW4gaWYgdGhlIGhvc3QgZG9lc24ndCBoYXZlIGhhcmR3YXJlIEtWTS4gSW4gZmFjdCwgU3l6a2FsbGVyIGhlYXZpbHkgdGVzdHMgS1ZNIGluIGdlbmVyYWwuXG5cbk5vdywgdG8gbWFrZSBzdXJlLCBJIHdpbGwgY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyBmb3IgUklTQy1WIEtWTSwganVzdCB0byB2ZXJpZnkgaG93IGl0J3MgZW5hYmxlZC4gSSdsbCB1c2UgYGdyZXBwZXJgIHRvIGxvY2F0ZSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBzZXR0aW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg3NywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA4OjUyOjUwLjE2ODUxNTExOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjcwNzUxOTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTIxLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA4OjUyOjUwLjY5NTU5ODMwMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNDAzNDk0MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKktWTSBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBLVk1gIGNvbmZpZ3VyYXRpb24uIFRoZSBpbml0aWFsIHRob3VnaHQgaXMsIFwiT2theSwgYEtWTWAgaXMgdGhlIGNvbmZpZyBmaWxlIHRoYXQgbWFuYWdlcyB0aGUga2VybmVsLWJhc2VkIHZpcnR1YWwgbWFjaGluZSBzdXBwb3J0LCBnb3QgaXQuXCIgQnV0IGhvbGQgb24gYSBzZWNvbmQuLi4gaXMgdGhhdCByZWFsbHkgKmFsbCogdGhlcmUgaXMgdG8gaXQ/IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuXG5cbkknbSB0aGlua2luZywgXCJMZXQncyBkb3VibGUtY2hlY2sgdGhlIHNvdXJjZS5cIiBUaGUgZGVmaW5pdGl2ZSBwbGFjZSB0byB2ZXJpZnkgdGhlIHNjb3BlIG9mIHRoZSBLVk0gY29uZmlndXJhdGlvbiB3b3VsZCBiZSBpbiB0aGUgY29kZSBpdHNlbGYsIHJpZ2h0PyBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBsb29rIGF0IGBhcmNoL3Jpc2N2L2t2bS9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgZGV0YWlsZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBSSVNDLVYgS1ZNIGFyZSBsYWlkIG91dC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IHN1YnRsZSBkZXBlbmRlbmNpZXMsIG9yIHJlbGV2YW50IHN1Yi1vcHRpb25zIGJ5IG9ubHkgY29uc2lkZXJpbmcgdGhlIG5hbWUgb2YgdGhlIHRvcC1sZXZlbCBLVk0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyMjQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwODo1Mjo1NC4wMzU5NDk3NjZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3Jpc2N2L2t2bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBLVk0gY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRzb3VyY2UgXFxcInZpcnQva3ZtL0tjb25maWdcXFwiXFxuICAgNzpcXHRcXG4gICA4OlxcdG1lbnVjb25maWcgVklSVFVBTElaQVRJT05cXG4gICA5OlxcdFxcdGJvb2wgXFxcIlZpcnR1YWxpemF0aW9uXFxcIlxcbiAgMTA6XFx0XFx0aGVscFxcbiAgMTE6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGdldCB0byBzZWUgb3B0aW9ucyBmb3IgdXNpbmcgeW91ciBMaW51eCBob3N0IHRvIHJ1blxcbiAgMTI6XFx0XFx0ICBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcyBpbnNpZGUgdmlydHVhbCBtYWNoaW5lcyAoZ3Vlc3RzKS5cXG4gIDEzOlxcdFxcdCAgVGhpcyBvcHRpb24gYWxvbmUgZG9lcyBub3QgYWRkIGFueSBrZXJuZWwgY29kZS5cXG4gIDE0OlxcdFxcbiAgMTU6XFx0XFx0ICBJZiB5b3Ugc2F5IE4sIGFsbCBvcHRpb25zIGluIHRoaXMgc3VibWVudSB3aWxsIGJlIHNraXBwZWQgYW5kXFxuICAxNjpcXHRcXHQgIGRpc2FibGVkLlxcbiAgMTc6XFx0XFxuICAxODpcXHRpZiBWSVJUVUFMSVpBVElPTlxcbiAgMTk6XFx0XFxuICAyMDpcXHRjb25maWcgS1ZNXFxuICAyMTpcXHRcXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbiAgMjI6XFx0XFx0ZGVwZW5kcyBvbiBSSVNDVl9TQkkgXFx1MDAyNlxcdTAwMjYgTU1VXFxuICAyMzpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fSVJRQ0hJUFxcbiAgMjQ6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9ST1VUSU5HXFxuICAyNTpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fTVNJXFxuICAyNjpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fUkVBRE9OTFlfTUVNXFxuICAyNzpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fRElSVFlfUklOR19BQ1FfUkVMXFxuICAyODpcXHRcXHRzZWxlY3QgS1ZNX0NPTU1PTlxcbiAgMjk6XFx0XFx0c2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxcbiAgMzA6XFx0XFx0c2VsZWN0IEtWTV9HRU5FUklDX0hBUkRXQVJFX0VOQUJMSU5HXFxuICAzMTpcXHRcXHRzZWxlY3QgS1ZNX01NSU9cXG4gIDMyOlxcdFxcdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xcbiAgMzM6XFx0XFx0c2VsZWN0IFNDSEVEX0lORk9cXG4gIDM0OlxcdFxcdHNlbGVjdCBHVUVTVF9QRVJGX0VWRU5UUyBpZiBQRVJGX0VWRU5UU1xcbiAgMzU6XFx0XFx0aGVscFxcbiAgMzY6XFx0XFx0ICBTdXBwb3J0IGhvc3RpbmcgdmlydHVhbGl6ZWQgZ3Vlc3QgbWFjaGluZXMuXFxuICAzNzpcXHRcXG4gIDM4OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDM5OlxcdFxcbiAgNDA6XFx0ZW5kaWYgIyBWSVJUVUFMSVpBVElPTlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwODo1Mjo1NC4wMzYwNDc1NjZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjI2Njk5MzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLVk0gTWVtb3J5IE1hcHBpbmcqKlxuXG5Pa2F5LCBzbyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGlzIGNsZWFybHkgS1ZNLiBNeSBwcmltYXJ5IHRhcmdldHMgaGVyZSBhcmUgYHBmbm1hcF9tYXBwaW5nX3NpemVgIGFuZCBga3ZtX3Jpc2N2X21tdV9tYXBgLiBXYWl0IGEgc2Vjb25k4oCmIEkgc2VlIGBrdm1fcmlzY3ZfbW11X21hcGAgaGFzIGJlZW4gbW9kaWZpZWQgYW5kIGBwZm5tYXBfbWFwcGluZ19zaXplYCBoYXMgYmVlbiBhZGRlZC4gTXkgc3BpZGVyIHNlbnNlIGlzIHRpbmdsaW5nLCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc2lnbmlmaWNhbmNlIG9mIHRob3NlIGNoYW5nZXMsIGVzcGVjaWFsbHkgd2l0aCBga3ZtX3Jpc2N2X21tdV9tYXBgLlxuXG5SaWdodCwgbGV0J3MgZXN0YWJsaXNoIGlmIGBrdm1fcmlzY3ZfbW11X21hcGAgaXMgYSBwZXJmb3JtYW5jZS1jcml0aWNhbCBwYXRoLiBCaW5nbywgaXQncyBjYWxsZWQgZHVyaW5nIG1lbW9yeSBtYXBwaW5nIGZvciBLVk0gZ3Vlc3RzLiBBbmQgZnVydGhlciwgaXQncyBhY3R1YWxseSB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyICp3aXRoaW4qIEtWTS4gRGVmaW5pdGVseSBhIGhvdHNwb3QuIFNvLCB3aGVyZSBpcyB0aGlzIGhhbmRsZXIgdHJpZ2dlcmVkPyBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgZ3JhcGggbm93IHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIGFuZCBkZXRlcm1pbmUgaWYgdGhlIG1vZGlmaWNhdGlvbiBpbXByb3ZlcyBvciBkZWdyYWRlcyBwZXJmb3JtYW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjAwNCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA4OjUyOjU5LjI2Mjc0OTk1NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM3MTE0MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3Jpc2N2X21tdV9tYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3Yva3ZtL21tdS5jPTQ0MD1zdGF0aWMgdW5zaWduZWQgbG9uZyBwZm5tYXBfbWFwcGluZ19zaXplKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTQ1MC1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYzo0NTE6aW50IGt2bV9yaXNjdl9tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy00NTItXFx0XFx0ICAgICAgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIGh2YSwgYm9vbCBpc193cml0ZSxcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfZXhpdC5jPTE1PXN0YXRpYyBpbnQgZ3N0YWdlX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqcnVuLFxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdV9leGl0LmMtNDUtXFxuYXJjaC9yaXNjdi9rdm0vdmNwdV9leGl0LmM6NDY6XFx0cmV0ID0ga3ZtX3Jpc2N2X21tdV9tYXAodmNwdSwgbWVtc2xvdCwgZmF1bHRfYWRkciwgaHZhLFxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfZXhpdC5jLTQ3LVxcdFxcdFxcdFxcdCh0cmFwLVxcdTAwM2VzY2F1c2UgPT0gRVhDX1NUT1JFX0dVRVNUX1BBR0VfRkFVTFQpID8gdHJ1ZSA6IGZhbHNlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwODo1Mjo1OS40MDY0NjgxMjJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzc0MzA1NjU0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUklTQy1WIEtWTSBQYWdlIEZhdWx0IEhhbmRsaW5nKipcblxuT2theSwgc28gdGhpcyBpcyB0cmlnZ2VyZWQgYnkgYGdzdGFnZV9wYWdlX2ZhdWx0YCwgdGhlIGd1ZXN0IHBhZ2UgZmF1bHQgaGFuZGxlci4gSXQncyBhIGhvdCBwYXRoLCBidXQgd2hhdCdzIGNoYW5nZWQgaXMgc3BlY2lmaWMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBwZm5tYXBfbWFwcGluZ19zaXplYCBhbmQgYGt2bV9yaXNjdl9tbXVfbWFwYC4gV2FpdCwgYHBmbm1hcF9tYXBwaW5nX3NpemVgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCBzbyBpdCdzIHByb2JhYmx5IGlubGluZWQuLi4gTGV0J3MgYWxzbyBjb25zaWRlciBgZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZ2AsIHdoaWNoIHdhcyBhbHNvIG1vZGlmaWVkIGFuZCBpcyAqYWxzbyogc3RhdGljLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgYGt2bV9yaXNjdl9tbXVfbWFwYCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIG5ldyBsb2dpYy5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgdGhpcyBjb2RlIHBhdGguIElzIHRoZXJlIHNvbWV0aGluZyBpbiBwYXJ0aWN1bGFyIHRoYXQgSSBuZWVkIHRvIGVuYWJsZT8gQWgsIGBWTV9QRk5NQVBgIGlzIHJlbGF0ZWQgdG8gZGV2aWNlIG1lbW9yeSBtYXBwaW5nLCBsaWtlIFZGSU8uIE15IGludHVpdGlvbiB0ZWxscyBtZSBWRklPIGlzIHJlbGV2YW50IGhlcmUuIFRoZSBjb21tZW50cyBtZW50aW9uIFwiRGV0ZXJtaW5lIHRoZSBHLXN0YWdlIG1hcHBpbmcgc2l6ZSBmb3IgYSBWTV9QRk5NQVAgKGUuZy4gaG9zdCBkZXZpY2UgTU1JTykgZmF1bHQuXCIgVG8gdHJpZ2dlciB0aGlzLCB3ZSBuZWVkIGEgYFZNX1BGTk1BUGAgVk1BLiBUaGlzIGlzIGNyZWF0ZWQgYnkgbWFwcGluZyBkZXZpY2UgbWVtb3J5LCB3aGljaCBpcyBleGFjdGx5IHdoYXQgVkZJTyBhbmQgb3RoZXIgZHJpdmVycyB1c2luZyBgcmVtYXBfcGZuX3JhbmdlYCBkby4gU3l6a2FsbGVyIGNhbiBwcm9iYWJseSBtYXAgYC9kZXYva3ZtYCBvciBzaW1pbGFyIGRldmljZXMgdG8gc2V0IHVwIGBWTV9QRk5NQVBgIGFuZCBwYXNzIGl0IHRvIEtWTSBhcyBhIG1lbW9yeSBzbG90LiBTbyB0aGUga2V5IGNvbmZpZyBoZXJlIGlzIGBLVk1gLlxuXG5MZXQgbWUgZG91YmxlLWNoZWNrLi4uIFllcywgYEtWTWAgZW5hYmxlcyBgYXJjaC9yaXNjdi9rdm0vbW11LmNgLiBUaGUgcGF0Y2ggKmlzKiBpbiBgYXJjaC9yaXNjdi9rdm0vbW11LmNgLCB3aGljaCBtYWtlcyBpdCBSSVNDLVYgc3BlY2lmaWMuIEFuZCBTeXprYWxsZXIgZnV6emVzIFJJU0MtVi4uLiBwZXJmZWN0IVxuXG5TbywgdG8gc3VtbWFyaXplIGZvciBmdXp6aW5nOlxuXG4qICAgKipXb3J0aEZ1enppbmc6KiogQWJzb2x1dGVseSFcbiogICAqKkZvY3VzU3ltYm9sczoqKiBga3ZtX3Jpc2N2X21tdV9tYXBgICh0aGUgbWFpbiBmdW5jdGlvbiBvZiBpbnRlcmVzdCksIGBwZm5tYXBfbWFwcGluZ19zaXplYCAodGhlIG5ldywgaGVscGVyIGZ1bmN0aW9uKSwgYW5kIGBmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nYCAodGhlIG1vZGlmaWVkIGNoZWNrKS5cbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYEtWTWBcbiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJJU0MtViBLVk0gTU1VIHBhZ2UgZmF1bHQgaGFuZGxlciB0byBzdXBwb3J0IGh1Z2UgcGFnZSBtYXBwaW5ncyAoUE1EX1NJWkUpIGZvciBkZXZpY2UgbWVtb3J5IChWTV9QRk5NQVApLiBUaGlzIHJlcHJlc2VudHMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSB2aXJ0dWFsaXphdGlvbiBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgYW5kIGFzIHN1Y2gsIGl0ICptdXN0KiBiZSBmdXp6ZWQgdG8gcHJldmVudCBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3IgaG9zdCBjcmFzaGVzIHJlc3VsdGluZyBmcm9tIG1hbGljaW91cyBvciBlZGdlLWNhc2UgZ3Vlc3QgcGFnZSBmYXVsdHMuXG5cbkknbSBzZXR0aW5nIGBrdm1fcmlzY3ZfbW11X21hcGAgYXMgdGhlIGNvcmUgc3ltYm9sLiBgcGZubWFwX21hcHBpbmdfc2l6ZWAgaXMgYSBuZXcgZnVuY3Rpb24gYW5kIGBmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nYCBpcyBhbHNvIG1vZGlmaWVkLiBJJ2xsIG1ha2Ugc3VyZSB0byBub3RlIGFsbCBvZiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjkxLCJPdXRwdXRUb2tlbnMiOjE0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwODo1MzoxNy4xNDk1MjcxNjlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDUxNTkzMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9yaXNjdl9tbXVfbWFwXCIsXG4gICAgXCJwZm5tYXBfbWFwcGluZ19zaXplXCIsXG4gICAgXCJmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEtWTSBNTVUgcGFnZSBmYXVsdCBoYW5kbGVyIG9uIFJJU0MtViB0byBzdXBwb3J0IGh1Z2UgcGFnZSBtYXBwaW5ncyAoUE1EX1NJWkUpIGZvciBkZXZpY2UgbWVtb3J5IChWTV9QRk5NQVApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgdmlydHVhbGl6YXRpb24gbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGRvZXNuJ3QgaW50cm9kdWNlIG1lbW9yeSBjb3JydXB0aW9uIG9yIGhvc3QgY3Jhc2hlcyB3aGVuIGhhbmRsaW5nIG1hbGljaW91cyBvciBlZGdlLWNhc2UgZ3Vlc3QgcGFnZSBmYXVsdHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3Jpc2N2X21tdV9tYXBcIixcbiAgICBcInBmbm1hcF9tYXBwaW5nX3NpemVcIixcbiAgICBcImZhdWx0X3N1cHBvcnRzX2dzdGFnZV9odWdlX21hcHBpbmdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgS1ZNIE1NVSBwYWdlIGZhdWx0IGhhbmRsZXIgb24gUklTQy1WIHRvIHN1cHBvcnQgaHVnZSBwYWdlIG1hcHBpbmdzIChQTURfU0laRSkgZm9yIGRldmljZSBtZW1vcnkgKFZNX1BGTk1BUCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSB2aXJ0dWFsaXphdGlvbiBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgZG9lc24ndCBpbnRyb2R1Y2UgbWVtb3J5IGNvcnJ1cHRpb24gb3IgaG9zdCBjcmFzaGVzIHdoZW4gaGFuZGxpbmcgbWFsaWNpb3VzIG9yIGVkZ2UtY2FzZSBndWVzdCBwYWdlIGZhdWx0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow8pnjt[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-10 08:25:39 +0000 UTC FinishedAt: 2026-07-10 08:53:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "b6eb022890c78285f55381589c1536bd66b8eaeb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "b6eb022890c78285f55381589c1536bd66b8eaeb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "b1adc879-2d0c-41c5-9b18-8ecb507cd2e9" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_riscv_mmu_map", "pfnmap_mapping_size", "fault_supports_gstage_huge_mapping" ], "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+CgkJCTx0ZD4yMDI2LzA3LzEwIDA4OjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9yaXNjdl9tbXVfbWFwJiMzNDssCiAgICAmIzM0O3Bmbm1hcF9tYXBwaW5nX3NpemUmIzM0OywKICAgICYjMzQ7ZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgS1ZNIE1NVSBwYWdlIGZhdWx0IGhhbmRsZXIgb24gUklTQy1WIHRvIHN1cHBvcnQgaHVnZSBwYWdlIG1hcHBpbmdzIChQTURfU0laRSkgZm9yIGRldmljZSBtZW1vcnkgKFZNX1BGTk1BUCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSB2aXJ0dWFsaXphdGlvbiBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIG1lbW9yeSBjb3JydXB0aW9uIG9yIGhvc3QgY3Jhc2hlcyB3aGVuIGhhbmRsaW5nIG1hbGljaW91cyBvciBlZGdlLWNhc2UgZ3Vlc3QgcGFnZSBmYXVsdHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDg6NTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmYWMwOTc5NWVmN2QzMDZjYTk4ZTcxMjE1M2UzMGVhNTM4YTAxY2NmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMTAgMDg6NTI6MzggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vbW11LmMgYi9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xuaW5kZXggMmQzZGVmMDI0MjcwYzAuLjUzZmIzNGQ0Yjc2ZDA5IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vbW11LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL21tdS5jXG5AQCAtMTYsNiAmIzQzOzE2LDggQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX21tdS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9uYWNsLmhcdTAwM2VcbiBcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dHJhY2UuaFwmIzM0O1xuJiM0MztcbiBzdGF0aWMgdm9pZCBtbXVfd3BfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIGludCBzbG90KVxuIHtcbiBcdHN0cnVjdCBrdm1fbWVtc2xvdHMgKnNsb3RzID0ga3ZtX21lbXNsb3RzKGt2bSk7XG5AQCAtMjg2LDcgJiM0MzsyODgsNyBAQCBib29sIGt2bV90ZXN0X2FnZV9nZm4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2dmbl9yYW5nZSAqcmFuZ2UpXG4gfVxuIFxuIHN0YXRpYyBib29sIGZhdWx0X3N1cHBvcnRzX2dzdGFnZV9odWdlX21hcHBpbmcoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbi1cdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgaHZhKVxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgaHZhLCB1bnNpZ25lZCBsb25nIG1hcF9zaXplKVxuIHtcbiBcdGh2YV90IHVhZGRyX3N0YXJ0LCB1YWRkcl9lbmQ7XG4gXHRncGFfdCBncGFfc3RhcnQ7XG5AQCAtMzIxLDcgJiM0MzszMjMsNyBAQCBzdGF0aWMgYm9vbCBmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXG4gXHQgKiAgIGUgLVx1MDAzZSBnXG4gXHQgKiAgIGYgLVx1MDAzZSBoXG4gXHQgKi9cbi1cdGlmICgoZ3BhX3N0YXJ0IFx1MDAyNiAoUE1EX1NJWkUgLSAxKSkgIT0gKHVhZGRyX3N0YXJ0IFx1MDAyNiAoUE1EX1NJWkUgLSAxKSkpXG4mIzQzO1x0aWYgKChncGFfc3RhcnQgXHUwMDI2IChtYXBfc2l6ZSAtIDEpKSAhPSAodWFkZHJfc3RhcnQgXHUwMDI2IChtYXBfc2l6ZSAtIDEpKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0LypcbkBAIC0zMzYsNyAmIzQzOzMzOCw3IEBAIHN0YXRpYyBib29sIGZhdWx0X3N1cHBvcnRzX2dzdGFnZV9odWdlX21hcHBpbmcoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbiBcdCAqIHVzZXJzcGFjZV9hZGRyIG9yIHRoZSBiYXNlX2dmbiwgYXMgYm90aCBhcmUgZXF1YWxseSBhbGlnbmVkIChwZXJcbiBcdCAqIHRoZSBjaGVjayBhYm92ZSkgYW5kIGVxdWFsbHkgc2l6ZWQuXG4gXHQgKi9cbi1cdHJldHVybiAoaHZhIFx1MDAzZT0gQUxJR04odWFkZHJfc3RhcnQsIFBNRF9TSVpFKSkgXHUwMDI2XHUwMDI2IChodmEgXHUwMDNjIEFMSUdOX0RPV04odWFkZHJfZW5kLCBQTURfU0laRSkpO1xuJiM0MztcdHJldHVybiAoaHZhIFx1MDAzZT0gQUxJR04odWFkZHJfc3RhcnQsIG1hcF9zaXplKSkgXHUwMDI2XHUwMDI2IChodmEgXHUwMDNjIEFMSUdOX0RPV04odWFkZHJfZW5kLCBtYXBfc2l6ZSkpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGdldF9odmFfbWFwcGluZ19zaXplKHN0cnVjdCBrdm0gKmt2bSxcbkBAIC00MDQsNyAmIzQzOzQwNiw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHRyYW5zcGFyZW50X2h1Z2VwYWdlX2FkanVzdChzdHJ1Y3Qga3ZtICprdm0sXG4gXHQgKiBzdXJlIHRoYXQgdGhlIEhWQSBhbmQgR1BBIGFyZSBzdWZmaWNpZW50bHkgYWxpZ25lZCBhbmQgdGhhdCB0aGVcbiBcdCAqIGJsb2NrIG1hcCBpcyBjb250YWluZWQgd2l0aGluIHRoZSBtZW1zbG90LlxuIFx0ICovXG4tXHRpZiAoZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZyhtZW1zbG90LCBodmEpKSB7XG4mIzQzO1x0aWYgKGZhdWx0X3N1cHBvcnRzX2dzdGFnZV9odWdlX21hcHBpbmcobWVtc2xvdCwgaHZhLCBQTURfU0laRSkpIHtcbiBcdFx0aW50IHN6O1xuIFxuIFx0XHRzeiA9IGdldF9odmFfbWFwcGluZ19zaXplKGt2bSwgaHZhKTtcbkBAIC00MjEsNiAmIzQzOzQyMywzMSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyB0cmFuc3BhcmVudF9odWdlcGFnZV9hZGp1c3Qoc3RydWN0IGt2bSAqa3ZtLFxuIFx0cmV0dXJuIFBBR0VfU0laRTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIERldGVybWluZSB0aGUgRy1zdGFnZSBtYXBwaW5nIHNpemUgZm9yIGEgVk1fUEZOTUFQIChlLmcuIGhvc3QgZGV2aWNlXG4mIzQzOyAqIE1NSU8pIGZhdWx0LiAgVW5saWtlIGFybTY0JiMzOTtzIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uLCB3ZSBuZXZlciBkZXJpdmUgdGhlXG4mIzQzOyAqIGhvc3QgcGh5c2ljYWwgYWRkcmVzcyBmcm9tIHZtYS1cdTAwM2V2bV9wZ29mZiAod2hpY2ggaXMgdW5yZWxpYWJsZSBzaW5jZSB0aGVcbiYjNDM7ICogVkZJTyB1bm1hcF9tYXBwaW5nX3JhbmdlKCkgY2hhbmdlcykuICBJbnN0ZWFkIHdlIHdhbGsgdGhlIGhvc3QgcGFnZSB0YWJsZXNcbiYjNDM7ICogdmlhIGdldF9odmFfbWFwcGluZ19zaXplKCk6IGlmIHRoZSBob3N0IGl0c2VsZiBpbnN0YWxsZWQgYSBsZWFmIGJsb2NrIGZvclxuJiM0MzsgKiB0aGlzIGFkZHJlc3MsIHBoeXNpY2FsIGNvbnRpZ3VpdHkgd2l0aGluIHRoYXQgYmxvY2sgaXMgYWxyZWFkeSBndWFyYW50ZWVkXG4mIzQzOyAqIGJ5IHRoZSBob3N0IG1tLiAgVGhlIG1lbW9yeSB0eXBlIHN0YXlzIGNvcnJlY3QgYmVjYXVzZSBSSVNDLVYgZGVyaXZlcyBpdFxuJiM0MzsgKiBmcm9tIHRoZSBwaHlzaWNhbCBhZGRyZXNzJiMzOTsgUE1BLCBpbmRlcGVuZGVudCBvZiB0aGUgRy1zdGFnZSBQVEUgc2l6ZS5cbiYjNDM7ICpcbiYjNDM7ICogQmUgY29uc2VydmF0aXZlIGZvciBub3cgYW5kIG9ubHkgcHJvbW90ZSB0byBQTUQtc2l6ZWQgYmxvY2tzOyBQVUQtc2l6ZWRcbiYjNDM7ICogZGV2aWNlIGJsb2NrcyBhcmUgbGVmdCBhcyBmdXR1cmUgd29yay4gIEZhbGwgYmFjayB0byBQQUdFX1NJWkUgd2hlbmV2ZXJcbiYjNDM7ICogY29udGlndWl0eSBvciBIVkEvR1BBIGFsaWdubWVudCBjYW5ub3QgYmUgcHJvdmVuLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgcGZubWFwX21hcHBpbmdfc2l6ZShzdHJ1Y3Qga3ZtICprdm0sXG4mIzQzO1x0XHRcdFx0XHQgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbiYjNDM7XHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGh2YSlcbiYjNDM7e1xuJiM0MztcdGlmIChnZXRfaHZhX21hcHBpbmdfc2l6ZShrdm0sIGh2YSkgXHUwMDNlPSBQTURfU0laRSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZyhtZW1zbG90LCBodmEsIFBNRF9TSVpFKSlcbiYjNDM7XHRcdHJldHVybiBQTURfU0laRTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIFBBR0VfU0laRTtcbiYjNDM7fVxuJiM0MztcbiBpbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxuIFx0XHQgICAgICBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgaHZhLCBib29sIGlzX3dyaXRlLFxuIFx0XHQgICAgICBzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nICpvdXRfbWFwKVxuQEAgLTQ2NSwxMSAmIzQzOzQ5MiwxNCBAQCBpbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxuIFx0ZWxzZVxuIFx0XHR2bWFfcGFnZXNoaWZ0ID0gUEFHRV9TSElGVDtcbiBcdHZtYV9wYWdlc2l6ZSA9IDFVTEwgXHUwMDNjXHUwMDNjIHZtYV9wYWdlc2hpZnQ7XG4tXHRpZiAobG9nZ2luZyB8fCAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9QRk5NQVApKVxuJiM0MztcbiYjNDM7XHRpZiAobG9nZ2luZylcbiBcdFx0dm1hX3BhZ2VzaXplID0gUEFHRV9TSVpFO1xuJiM0MztcdGVsc2UgaWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fUEZOTUFQKVxuJiM0MztcdFx0dm1hX3BhZ2VzaXplID0gcGZubWFwX21hcHBpbmdfc2l6ZShrdm0sIG1lbXNsb3QsIGh2YSk7XG4gXG4gXHRpZiAodm1hX3BhZ2VzaXplID09IFBNRF9TSVpFIHx8IHZtYV9wYWdlc2l6ZSA9PSBQVURfU0laRSlcbi1cdFx0Z2ZuID0gKGdwYSBcdTAwMjYgaHVnZV9wYWdlX21hc2soaHN0YXRlX3ZtYSh2bWEpKSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4mIzQzO1x0XHRnZm4gPSAoZ3BhIFx1MDAyNiB+KHZtYV9wYWdlc2l6ZSAtIDEpKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiBcbiBcdC8qXG4gXHQgKiBSZWFkIG1tdV9pbnZhbGlkYXRlX3NlcSBzbyB0aGF0IEtWTSBjYW4gZGV0ZWN0IGlmIHRoZSByZXN1bHRzIG9mXG5AQCAtNTE1LDYgJiM0Mzs1NDUsOSBAQCBpbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxuIFx0aWYgKCFsb2dnaW5nIFx1MDAyNlx1MDAyNiAodm1hX3BhZ2VzaXplID09IFBBR0VfU0laRSkpXG4gXHRcdHZtYV9wYWdlc2l6ZSA9IHRyYW5zcGFyZW50X2h1Z2VwYWdlX2FkanVzdChrdm0sIG1lbXNsb3QsIGh2YSwgXHUwMDI2aGZuLCBcdTAwMjZncGEpO1xuIFxuJiM0MztcdHRyYWNlX2t2bV9tbXVfbWFwKGdwYSwgaHZhLCBoZm4sIHZtYV9wYWdlc2l6ZSxcbiYjNDM7XHRcdFx0ICAhISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1BGTk1BUCkpO1xuJiM0MztcbiBcdGlmICh3cml0YWJsZSkge1xuIFx0XHRtYXJrX3BhZ2VfZGlydHlfaW5fc2xvdChrdm0sIG1lbXNsb3QsIGdmbik7XG4gXHRcdHJldCA9IGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2UoXHUwMDI2Z3N0YWdlLCBwY2FjaGUsIGdwYSwgaGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3RyYWNlLmggYi9hcmNoL3Jpc2N2L2t2bS90cmFjZS5oXG5pbmRleCAzZDU0MTc1ZDgwNWNiYy4uZGIyZDI4ZjFkNzE0ODMgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS90cmFjZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS90cmFjZS5oXG5AQCAtNTYsNiAmIzQzOzU2LDM1IEBAIFRSQUNFX0VWRU5UKGt2bV9leGl0LFxuIFx0XHRfX2VudHJ5LVx1MDAzZWh0aW5zdClcbiApO1xuIFxuJiM0MztUUkFDRV9FVkVOVChrdm1fbW11X21hcCxcbiYjNDM7XHRUUF9QUk9UTyh1bnNpZ25lZCBsb25nIGdwYSwgdW5zaWduZWQgbG9uZyBodmEsIHVuc2lnbmVkIGxvbmcgaGZuLFxuJiM0MztcdFx0IHVuc2lnbmVkIGxvbmcgbWFwX3NpemUsIGJvb2wgaXNfcGZubWFwKSxcbiYjNDM7XHRUUF9BUkdTKGdwYSwgaHZhLCBoZm4sIG1hcF9zaXplLCBpc19wZm5tYXApLFxuJiM0MztcbiYjNDM7XHRUUF9TVFJVQ1RfX2VudHJ5KFxuJiM0MztcdFx0X19maWVsZCh1bnNpZ25lZCBsb25nLCBncGEpXG4mIzQzO1x0XHRfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGh2YSlcbiYjNDM7XHRcdF9fZmllbGQodW5zaWduZWQgbG9uZywgaGZuKVxuJiM0MztcdFx0X19maWVsZCh1bnNpZ25lZCBsb25nLCBtYXBfc2l6ZSlcbiYjNDM7XHRcdF9fZmllbGQoYm9vbCwgaXNfcGZubWFwKVxuJiM0MztcdCksXG4mIzQzO1xuJiM0MztcdFRQX2Zhc3RfYXNzaWduKFxuJiM0MztcdFx0X19lbnRyeS1cdTAwM2VncGFcdFx0PSBncGE7XG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZWh2YVx0XHQ9IGh2YTtcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlaGZuXHRcdD0gaGZuO1xuJiM0MztcdFx0X19lbnRyeS1cdTAwM2VtYXBfc2l6ZVx0PSBtYXBfc2l6ZTtcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlaXNfcGZubWFwXHQ9IGlzX3Bmbm1hcDtcbiYjNDM7XHQpLFxuJiM0MztcbiYjNDM7XHRUUF9wcmludGsoXCYjMzQ7R1BBOjB4JWx4LCBIVkE6MHglbHgsIEhGTjoweCVseCwgc2l6ZTolbHVLQiwgcGZubWFwOiVkXCYjMzQ7LFxuJiM0MztcdFx0X19lbnRyeS1cdTAwM2VncGEsXG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZWh2YSxcbiYjNDM7XHRcdF9fZW50cnktXHUwMDNlaGZuLFxuJiM0MztcdFx0X19lbnRyeS1cdTAwM2VtYXBfc2l6ZSBcdTAwM2VcdTAwM2UgMTAsXG4mIzQzO1x0XHRfX2VudHJ5LVx1MDAzZWlzX3Bmbm1hcClcbiYjNDM7KTtcbiYjNDM7XG4gI2VuZGlmIC8qIF9UUkFDRV9SU0lDVl9LVk1fSCAqL1xuIFxuICN1bmRlZiBUUkFDRV9JTkNMVURFX1BBVEhcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwODo1MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1fcmlzY3ZfbW11X21hcCYjMzQ7LAogICAgJiMzNDtwZm5tYXBfbWFwcGluZ19zaXplJiMzNDssCiAgICAmIzM0O2ZhdWx0X3N1cHBvcnRzX2dzdGFnZV9odWdlX21hcHBpbmcmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEtWTSBNTVUgcGFnZSBmYXVsdCBoYW5kbGVyIG9uIFJJU0MtViB0byBzdXBwb3J0IGh1Z2UgcGFnZSBtYXBwaW5ncyAoUE1EX1NJWkUpIGZvciBkZXZpY2UgbWVtb3J5IChWTV9QRk5NQVApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgdmlydHVhbGl6YXRpb24gbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBtZW1vcnkgY29ycnVwdGlvbiBvciBob3N0IGNyYXNoZXMgd2hlbiBoYW5kbGluZyBtYWxpY2lvdXMgb3IgZWRnZS1jYXNlIGd1ZXN0IHBhZ2UgZmF1bHRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmYWMwOTc5NWVmN2QzMDZjYTk4ZTcxMjE1M2UzMGVhNTM4YTAxY2NmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMTAgMDg6NTI6MzggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9tbXUuYyBiL2FyY2gvcmlzY3Yva3ZtL21tdS5jCmluZGV4IDJkM2RlZjAyNDI3MGMwLi41M2ZiMzRkNGI3NmQwOSAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9rdm0vbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rdm0vbW11LmMKQEAgLTE2LDYgJiM0MzsxNiw4IEBACiAjaW5jbHVkZSAmbHQ7YXNtL2t2bV9tbXUuaCZndDsKICNpbmNsdWRlICZsdDthc20va3ZtX25hY2wuaCZndDsKIAomIzQzOyNpbmNsdWRlICYjMzQ7dHJhY2UuaCYjMzQ7CiYjNDM7CiBzdGF0aWMgdm9pZCBtbXVfd3BfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIGludCBzbG90KQogewogCXN0cnVjdCBrdm1fbWVtc2xvdHMgKnNsb3RzID0ga3ZtX21lbXNsb3RzKGt2bSk7CkBAIC0yODYsNyAmIzQzOzI4OCw3IEBAIGJvb2wga3ZtX3Rlc3RfYWdlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSkKIH0KIAogc3RhdGljIGJvb2wgZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZyhzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LAotCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBodmEpCiYjNDM7CQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBodmEsIHVuc2lnbmVkIGxvbmcgbWFwX3NpemUpCiB7CiAJaHZhX3QgdWFkZHJfc3RhcnQsIHVhZGRyX2VuZDsKIAlncGFfdCBncGFfc3RhcnQ7CkBAIC0zMjEsNyAmIzQzOzMyMyw3IEBAIHN0YXRpYyBib29sIGZhdWx0X3N1cHBvcnRzX2dzdGFnZV9odWdlX21hcHBpbmcoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCwKIAkgKiAgIGUgLSZndDsgZwogCSAqICAgZiAtJmd0OyBoCiAJICovCi0JaWYgKChncGFfc3RhcnQgJmFtcDsgKFBNRF9TSVpFIC0gMSkpICE9ICh1YWRkcl9zdGFydCAmYW1wOyAoUE1EX1NJWkUgLSAxKSkpCiYjNDM7CWlmICgoZ3BhX3N0YXJ0ICZhbXA7IChtYXBfc2l6ZSAtIDEpKSAhPSAodWFkZHJfc3RhcnQgJmFtcDsgKG1hcF9zaXplIC0gMSkpKQogCQlyZXR1cm4gZmFsc2U7CiAKIAkvKgpAQCAtMzM2LDcgJiM0MzszMzgsNyBAQCBzdGF0aWMgYm9vbCBmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsCiAJICogdXNlcnNwYWNlX2FkZHIgb3IgdGhlIGJhc2VfZ2ZuLCBhcyBib3RoIGFyZSBlcXVhbGx5IGFsaWduZWQgKHBlcgogCSAqIHRoZSBjaGVjayBhYm92ZSkgYW5kIGVxdWFsbHkgc2l6ZWQuCiAJICovCi0JcmV0dXJuIChodmEgJmd0Oz0gQUxJR04odWFkZHJfc3RhcnQsIFBNRF9TSVpFKSkgJmFtcDsmYW1wOyAoaHZhICZsdDsgQUxJR05fRE9XTih1YWRkcl9lbmQsIFBNRF9TSVpFKSk7CiYjNDM7CXJldHVybiAoaHZhICZndDs9IEFMSUdOKHVhZGRyX3N0YXJ0LCBtYXBfc2l6ZSkpICZhbXA7JmFtcDsgKGh2YSAmbHQ7IEFMSUdOX0RPV04odWFkZHJfZW5kLCBtYXBfc2l6ZSkpOwogfQogCiBzdGF0aWMgaW50IGdldF9odmFfbWFwcGluZ19zaXplKHN0cnVjdCBrdm0gKmt2bSwKQEAgLTQwNCw3ICYjNDM7NDA2LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgdHJhbnNwYXJlbnRfaHVnZXBhZ2VfYWRqdXN0KHN0cnVjdCBrdm0gKmt2bSwKIAkgKiBzdXJlIHRoYXQgdGhlIEhWQSBhbmQgR1BBIGFyZSBzdWZmaWNpZW50bHkgYWxpZ25lZCBhbmQgdGhhdCB0aGUKIAkgKiBibG9jayBtYXAgaXMgY29udGFpbmVkIHdpdGhpbiB0aGUgbWVtc2xvdC4KIAkgKi8KLQlpZiAoZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZyhtZW1zbG90LCBodmEpKSB7CiYjNDM7CWlmIChmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nKG1lbXNsb3QsIGh2YSwgUE1EX1NJWkUpKSB7CiAJCWludCBzejsKIAogCQlzeiA9IGdldF9odmFfbWFwcGluZ19zaXplKGt2bSwgaHZhKTsKQEAgLTQyMSw2ICYjNDM7NDIzLDMxIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHRyYW5zcGFyZW50X2h1Z2VwYWdlX2FkanVzdChzdHJ1Y3Qga3ZtICprdm0sCiAJcmV0dXJuIFBBR0VfU0laRTsKIH0KIAomIzQzOy8qCiYjNDM7ICogRGV0ZXJtaW5lIHRoZSBHLXN0YWdlIG1hcHBpbmcgc2l6ZSBmb3IgYSBWTV9QRk5NQVAgKGUuZy4gaG9zdCBkZXZpY2UKJiM0MzsgKiBNTUlPKSBmYXVsdC4gIFVubGlrZSBhcm02NCYjMzk7cyBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiwgd2UgbmV2ZXIgZGVyaXZlIHRoZQomIzQzOyAqIGhvc3QgcGh5c2ljYWwgYWRkcmVzcyBmcm9tIHZtYS0mZ3Q7dm1fcGdvZmYgKHdoaWNoIGlzIHVucmVsaWFibGUgc2luY2UgdGhlCiYjNDM7ICogVkZJTyB1bm1hcF9tYXBwaW5nX3JhbmdlKCkgY2hhbmdlcykuICBJbnN0ZWFkIHdlIHdhbGsgdGhlIGhvc3QgcGFnZSB0YWJsZXMKJiM0MzsgKiB2aWEgZ2V0X2h2YV9tYXBwaW5nX3NpemUoKTogaWYgdGhlIGhvc3QgaXRzZWxmIGluc3RhbGxlZCBhIGxlYWYgYmxvY2sgZm9yCiYjNDM7ICogdGhpcyBhZGRyZXNzLCBwaHlzaWNhbCBjb250aWd1aXR5IHdpdGhpbiB0aGF0IGJsb2NrIGlzIGFscmVhZHkgZ3VhcmFudGVlZAomIzQzOyAqIGJ5IHRoZSBob3N0IG1tLiAgVGhlIG1lbW9yeSB0eXBlIHN0YXlzIGNvcnJlY3QgYmVjYXVzZSBSSVNDLVYgZGVyaXZlcyBpdAomIzQzOyAqIGZyb20gdGhlIHBoeXNpY2FsIGFkZHJlc3MmIzM5OyBQTUEsIGluZGVwZW5kZW50IG9mIHRoZSBHLXN0YWdlIFBURSBzaXplLgomIzQzOyAqCiYjNDM7ICogQmUgY29uc2VydmF0aXZlIGZvciBub3cgYW5kIG9ubHkgcHJvbW90ZSB0byBQTUQtc2l6ZWQgYmxvY2tzOyBQVUQtc2l6ZWQKJiM0MzsgKiBkZXZpY2UgYmxvY2tzIGFyZSBsZWZ0IGFzIGZ1dHVyZSB3b3JrLiAgRmFsbCBiYWNrIHRvIFBBR0VfU0laRSB3aGVuZXZlcgomIzQzOyAqIGNvbnRpZ3VpdHkgb3IgSFZBL0dQQSBhbGlnbm1lbnQgY2Fubm90IGJlIHByb3Zlbi4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBwZm5tYXBfbWFwcGluZ19zaXplKHN0cnVjdCBrdm0gKmt2bSwKJiM0MzsJCQkJCSBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LAomIzQzOwkJCQkJIHVuc2lnbmVkIGxvbmcgaHZhKQomIzQzO3sKJiM0MzsJaWYgKGdldF9odmFfbWFwcGluZ19zaXplKGt2bSwgaHZhKSAmZ3Q7PSBQTURfU0laRSAmYW1wOyZhbXA7CiYjNDM7CSAgICBmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nKG1lbXNsb3QsIGh2YSwgUE1EX1NJWkUpKQomIzQzOwkJcmV0dXJuIFBNRF9TSVpFOwomIzQzOwomIzQzOwlyZXR1cm4gUEFHRV9TSVpFOwomIzQzO30KJiM0MzsKIGludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsCiAJCSAgICAgIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyBodmEsIGJvb2wgaXNfd3JpdGUsCiAJCSAgICAgIHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgKm91dF9tYXApCkBAIC00NjUsMTEgJiM0Mzs0OTIsMTQgQEAgaW50IGt2bV9yaXNjdl9tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCwKIAllbHNlCiAJCXZtYV9wYWdlc2hpZnQgPSBQQUdFX1NISUZUOwogCXZtYV9wYWdlc2l6ZSA9IDFVTEwgJmx0OyZsdDsgdm1hX3BhZ2VzaGlmdDsKLQlpZiAobG9nZ2luZyB8fCAodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9QRk5NQVApKQomIzQzOwomIzQzOwlpZiAobG9nZ2luZykKIAkJdm1hX3BhZ2VzaXplID0gUEFHRV9TSVpFOwomIzQzOwllbHNlIGlmICh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX1BGTk1BUCkKJiM0MzsJCXZtYV9wYWdlc2l6ZSA9IHBmbm1hcF9tYXBwaW5nX3NpemUoa3ZtLCBtZW1zbG90LCBodmEpOwogCiAJaWYgKHZtYV9wYWdlc2l6ZSA9PSBQTURfU0laRSB8fCB2bWFfcGFnZXNpemUgPT0gUFVEX1NJWkUpCi0JCWdmbiA9IChncGEgJmFtcDsgaHVnZV9wYWdlX21hc2soaHN0YXRlX3ZtYSh2bWEpKSkgJmd0OyZndDsgUEFHRV9TSElGVDsKJiM0MzsJCWdmbiA9IChncGEgJmFtcDsgfih2bWFfcGFnZXNpemUgLSAxKSkgJmd0OyZndDsgUEFHRV9TSElGVDsKIAogCS8qCiAJICogUmVhZCBtbXVfaW52YWxpZGF0ZV9zZXEgc28gdGhhdCBLVk0gY2FuIGRldGVjdCBpZiB0aGUgcmVzdWx0cyBvZgpAQCAtNTE1LDYgJiM0Mzs1NDUsOSBAQCBpbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LAogCWlmICghbG9nZ2luZyAmYW1wOyZhbXA7ICh2bWFfcGFnZXNpemUgPT0gUEFHRV9TSVpFKSkKIAkJdm1hX3BhZ2VzaXplID0gdHJhbnNwYXJlbnRfaHVnZXBhZ2VfYWRqdXN0KGt2bSwgbWVtc2xvdCwgaHZhLCAmYW1wO2hmbiwgJmFtcDtncGEpOwogCiYjNDM7CXRyYWNlX2t2bV9tbXVfbWFwKGdwYSwgaHZhLCBoZm4sIHZtYV9wYWdlc2l6ZSwKJiM0MzsJCQkgICEhKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fUEZOTUFQKSk7CiYjNDM7CiAJaWYgKHdyaXRhYmxlKSB7CiAJCW1hcmtfcGFnZV9kaXJ0eV9pbl9zbG90KGt2bSwgbWVtc2xvdCwgZ2ZuKTsKIAkJcmV0ID0ga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZSgmYW1wO2dzdGFnZSwgcGNhY2hlLCBncGEsIGhmbiAmbHQ7Jmx0OyBQQUdFX1NISUZULApkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vdHJhY2UuaCBiL2FyY2gvcmlzY3Yva3ZtL3RyYWNlLmgKaW5kZXggM2Q1NDE3NWQ4MDVjYmMuLmRiMmQyOGYxZDcxNDgzIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2t2bS90cmFjZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL3RyYWNlLmgKQEAgLTU2LDYgJiM0Mzs1NiwzNSBAQCBUUkFDRV9FVkVOVChrdm1fZXhpdCwKIAkJX19lbnRyeS0mZ3Q7aHRpbnN0KQogKTsKIAomIzQzO1RSQUNFX0VWRU5UKGt2bV9tbXVfbWFwLAomIzQzOwlUUF9QUk9UTyh1bnNpZ25lZCBsb25nIGdwYSwgdW5zaWduZWQgbG9uZyBodmEsIHVuc2lnbmVkIGxvbmcgaGZuLAomIzQzOwkJIHVuc2lnbmVkIGxvbmcgbWFwX3NpemUsIGJvb2wgaXNfcGZubWFwKSwKJiM0MzsJVFBfQVJHUyhncGEsIGh2YSwgaGZuLCBtYXBfc2l6ZSwgaXNfcGZubWFwKSwKJiM0MzsKJiM0MzsJVFBfU1RSVUNUX19lbnRyeSgKJiM0MzsJCV9fZmllbGQodW5zaWduZWQgbG9uZywgZ3BhKQomIzQzOwkJX19maWVsZCh1bnNpZ25lZCBsb25nLCBodmEpCiYjNDM7CQlfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGhmbikKJiM0MzsJCV9fZmllbGQodW5zaWduZWQgbG9uZywgbWFwX3NpemUpCiYjNDM7CQlfX2ZpZWxkKGJvb2wsIGlzX3Bmbm1hcCkKJiM0MzsJKSwKJiM0MzsKJiM0MzsJVFBfZmFzdF9hc3NpZ24oCiYjNDM7CQlfX2VudHJ5LSZndDtncGEJCT0gZ3BhOwomIzQzOwkJX19lbnRyeS0mZ3Q7aHZhCQk9IGh2YTsKJiM0MzsJCV9fZW50cnktJmd0O2hmbgkJPSBoZm47CiYjNDM7CQlfX2VudHJ5LSZndDttYXBfc2l6ZQk9IG1hcF9zaXplOwomIzQzOwkJX19lbnRyeS0mZ3Q7aXNfcGZubWFwCT0gaXNfcGZubWFwOwomIzQzOwkpLAomIzQzOwomIzQzOwlUUF9wcmludGsoJiMzNDtHUEE6MHglbHgsIEhWQToweCVseCwgSEZOOjB4JWx4LCBzaXplOiVsdUtCLCBwZm5tYXA6JWQmIzM0OywKJiM0MzsJCV9fZW50cnktJmd0O2dwYSwKJiM0MzsJCV9fZW50cnktJmd0O2h2YSwKJiM0MzsJCV9fZW50cnktJmd0O2hmbiwKJiM0MzsJCV9fZW50cnktJmd0O21hcF9zaXplICZndDsmZ3Q7IDEwLAomIzQzOwkJX19lbnRyeS0mZ3Q7aXNfcGZubWFwKQomIzQzOyk7CiYjNDM7CiAjZW5kaWYgLyogX1RSQUNFX1JTSUNWX0tWTV9IICovCiAKICN1bmRlZiBUUkFDRV9JTkNMVURFX1BBVEgKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDg6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg3NwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDY5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFdmFsdWF0aW5nIHRoZSBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSBuZWVkIHRvIGFzc2VzcyB3aGV0aGVyIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGtlcm5lbCB0aGF0IHdhcnJhbnQgZnV6emluZy4gVGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uIHRlbGxzIG1lIGl0IG1vZGlmaWVzIGBhcmNoL3Jpc2N2L2t2bS9tbXUuY2AgYW5kIGBhcmNoL3Jpc2N2L2t2bS90cmFjZS5oYC4gU3BlY2lmaWNhbGx5LCB0aGUgY2hhbmdlIHRvIGBtbXUuY2AgaXMgdGhlIGtleS4gVGhlIHBhdGNoIGFsdGVycyB0aGUgYmVoYXZpb3Igb2YgYGt2bV9yaXNjdl9tbXVfbWFwYCBjb25jZXJuaW5nIGBWTV9QRk5NQVBgLiBUaGUgb3JpZ2luYWwgY29kZSBhbHdheXMgdXNlZCBgUEFHRV9TSVpFYCBmb3IgYFZNX1BGTk1BUGAgaWYgbG9nZ2luZyB3YXMgZW5hYmxlZCBvciB0aGUgYFZNX1BGTk1BUGAgZmxhZyB3YXMgc2V0LiBOb3csIGl0IHNlZW1zIHRoYXQgaWYgbG9nZ2luZyBpcyBkaXNhYmxlZCwgYW5kIHRoZSBgVk1fUEZOTUFQYCBmbGFnIGlzIHNldCwgaXQgY2hlY2tzIGZvciBgcGZubWFwX21hcHBpbmdfc2l6ZWAsIHdoaWNoIGNhbiBwb3RlbnRpYWxseSByZXR1cm4gYFBNRF9TSVpFYCBvciBsYXJnZXIgbWFwcGluZ3MgaW5zdGVhZCBvZiBqdXN0IGBQQUdFX1NJWkVgLiBUaGlzIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgdGhlIFJJU0MtViBLVk0gTU1VIGhhbmRsZXMgdGhlIG1hcHBpbmcgc2l6ZSwgcGFydGljdWxhcmx5IGZvciBkZXZpY2UgbWVtb3J5LgoKVGhpcyBpcyBzaWduaWZpY2FudC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFJJU0MtViBLVk0sIGFzIGEgY29yZSB2aXJ0dWFsaXphdGlvbiBmZWF0dXJlLCBpcyBhIG5hdHVyYWwgdGFyZ2V0LiBBbmQsIHllcywgU3l6a2FsbGVyIGRvZXMgaW5kZWVkIHN1cHBvcnQgUklTQy1WIEtWTSwgd2hpY2ggaXMgZ29vZC4gQ2FuIEkgdHJpZ2dlciBpdCBpbiBzb21ldGhpbmcgbGlrZSBHQ0Ugb3IgUUVNVT8gWWVzLCBRRU1VIGRvZXMgc3VwcG9ydCBSSVNDLVYgS1ZNLCBlaXRoZXIgdGhyb3VnaCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gb3IgcnVubmluZyBpdCBvbiBhbiBhY3R1YWwgUklTQy1WIGhvc3QuIFN5emthbGxlciBjYW4gcnVuIGluIGEgUklTQy1WIFFFTVUgd2l0aCBLVk0gZW5hYmxlZC4KClRoZSBwcm9tcHQgc3BlY2lmaWVkIHRoYXQgSSBzaG91bGRuJiMzOTt0IGNvbnNpZGVyIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRlZCBoYXJkd2FyZS4gS1ZNIGlzIHJlYWNoYWJsZSBoZXJlLiBOZXN0ZWQgdmlydHVhbGl6YXRpb24gd29ya3MuIE9yLCBpZiB3ZSBhcmUgcnVubmluZyBvbiBiYXJlLW1ldGFsLCBpdCYjMzk7cyBmaW5lLiBRRU1VIGFsc28gZW11bGF0ZXMgUklTQy1WIHdpdGggS1ZNIHN1cHBvcnQsIHNvIGl0JiMzOTtzIGFsbCBnb29kLiBTeXprYWxsZXIgcnVucyBRRU1VIHdpdGggS1ZNIGVuYWJsZWQgaWYgdGhlIGhvc3Qgc3VwcG9ydHMgaXQsIGJ1dCBjYW4gdGVzdCBLVk0gdmlhIGAvZGV2L2t2bWAgZXZlbiBpZiB0aGUgaG9zdCBkb2VzbiYjMzk7dCBoYXZlIGhhcmR3YXJlIEtWTS4gSW4gZmFjdCwgU3l6a2FsbGVyIGhlYXZpbHkgdGVzdHMgS1ZNIGluIGdlbmVyYWwuCgpOb3csIHRvIG1ha2Ugc3VyZSwgSSB3aWxsIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgZm9yIFJJU0MtViBLVk0sIGp1c3QgdG8gdmVyaWZ5IGhvdyBpdCYjMzk7cyBlbmFibGVkLiBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIGxvY2F0ZSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBzZXR0aW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwODo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy0xOS1cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTVxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy0yMS1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA4OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMjQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipLVk0gQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBLVk1gIGNvbmZpZ3VyYXRpb24uIFRoZSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7T2theSwgYEtWTWAgaXMgdGhlIGNvbmZpZyBmaWxlIHRoYXQgbWFuYWdlcyB0aGUga2VybmVsLWJhc2VkIHZpcnR1YWwgbWFjaGluZSBzdXBwb3J0LCBnb3QgaXQuJiMzNDsgQnV0IGhvbGQgb24gYSBzZWNvbmQuLi4gaXMgdGhhdCByZWFsbHkgKmFsbCogdGhlcmUgaXMgdG8gaXQ/IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuCgpJJiMzOTttIHRoaW5raW5nLCAmIzM0O0xldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIHNvdXJjZS4mIzM0OyBUaGUgZGVmaW5pdGl2ZSBwbGFjZSB0byB2ZXJpZnkgdGhlIHNjb3BlIG9mIHRoZSBLVk0gY29uZmlndXJhdGlvbiB3b3VsZCBiZSBpbiB0aGUgY29kZSBpdHNlbGYsIHJpZ2h0PyBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBsb29rIGF0IGBhcmNoL3Jpc2N2L2t2bS9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGRldGFpbGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgUklTQy1WIEtWTSBhcmUgbGFpZCBvdXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgc3VidGxlIGRlcGVuZGVuY2llcywgb3IgcmVsZXZhbnQgc3ViLW9wdGlvbnMgYnkgb25seSBjb25zaWRlcmluZyB0aGUgbmFtZSBvZiB0aGUgdG9wLWxldmVsIEtWTS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwODo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgS1ZNIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0c291cmNlIFwmIzM0O3ZpcnQva3ZtL0tjb25maWdcJiMzNDtcbiAgIDc6XHRcbiAgIDg6XHRtZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXG4gICA5Olx0XHRib29sIFwmIzM0O1ZpcnR1YWxpemF0aW9uXCYjMzQ7XG4gIDEwOlx0XHRoZWxwXG4gIDExOlx0XHQgIFNheSBZIGhlcmUgdG8gZ2V0IHRvIHNlZSBvcHRpb25zIGZvciB1c2luZyB5b3VyIExpbnV4IGhvc3QgdG8gcnVuXG4gIDEyOlx0XHQgIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zIGluc2lkZSB2aXJ0dWFsIG1hY2hpbmVzIChndWVzdHMpLlxuICAxMzpcdFx0ICBUaGlzIG9wdGlvbiBhbG9uZSBkb2VzIG5vdCBhZGQgYW55IGtlcm5lbCBjb2RlLlxuICAxNDpcdFxuICAxNTpcdFx0ICBJZiB5b3Ugc2F5IE4sIGFsbCBvcHRpb25zIGluIHRoaXMgc3VibWVudSB3aWxsIGJlIHNraXBwZWQgYW5kXG4gIDE2Olx0XHQgIGRpc2FibGVkLlxuICAxNzpcdFxuICAxODpcdGlmIFZJUlRVQUxJWkFUSU9OXG4gIDE5Olx0XG4gIDIwOlx0Y29uZmlnIEtWTVxuICAyMTpcdFx0dHJpc3RhdGUgXCYjMzQ7S2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XCYjMzQ7XG4gIDIyOlx0XHRkZXBlbmRzIG9uIFJJU0NWX1NCSSBcdTAwMjZcdTAwMjYgTU1VXG4gIDIzOlx0XHRzZWxlY3QgSEFWRV9LVk1fSVJRQ0hJUFxuICAyNDpcdFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9ST1VUSU5HXG4gIDI1Olx0XHRzZWxlY3QgSEFWRV9LVk1fTVNJXG4gIDI2Olx0XHRzZWxlY3QgSEFWRV9LVk1fUkVBRE9OTFlfTUVNXG4gIDI3Olx0XHRzZWxlY3QgSEFWRV9LVk1fRElSVFlfUklOR19BQ1FfUkVMXG4gIDI4Olx0XHRzZWxlY3QgS1ZNX0NPTU1PTlxuICAyOTpcdFx0c2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxuICAzMDpcdFx0c2VsZWN0IEtWTV9HRU5FUklDX0hBUkRXQVJFX0VOQUJMSU5HXG4gIDMxOlx0XHRzZWxlY3QgS1ZNX01NSU9cbiAgMzI6XHRcdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xuICAzMzpcdFx0c2VsZWN0IFNDSEVEX0lORk9cbiAgMzQ6XHRcdHNlbGVjdCBHVUVTVF9QRVJGX0VWRU5UUyBpZiBQRVJGX0VWRU5UU1xuICAzNTpcdFx0aGVscFxuICAzNjpcdFx0ICBTdXBwb3J0IGhvc3RpbmcgdmlydHVhbGl6ZWQgZ3Vlc3QgbWFjaGluZXMuXG4gIDM3Olx0XG4gIDM4Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDM5Olx0XG4gIDQwOlx0ZW5kaWYgIyBWSVJUVUFMSVpBVElPTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA4OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwMDQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtWTSBNZW1vcnkgTWFwcGluZyoqCgpPa2F5LCBzbyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGlzIGNsZWFybHkgS1ZNLiBNeSBwcmltYXJ5IHRhcmdldHMgaGVyZSBhcmUgYHBmbm1hcF9tYXBwaW5nX3NpemVgIGFuZCBga3ZtX3Jpc2N2X21tdV9tYXBgLiBXYWl0IGEgc2Vjb25k4oCmIEkgc2VlIGBrdm1fcmlzY3ZfbW11X21hcGAgaGFzIGJlZW4gbW9kaWZpZWQgYW5kIGBwZm5tYXBfbWFwcGluZ19zaXplYCBoYXMgYmVlbiBhZGRlZC4gTXkgc3BpZGVyIHNlbnNlIGlzIHRpbmdsaW5nLCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc2lnbmlmaWNhbmNlIG9mIHRob3NlIGNoYW5nZXMsIGVzcGVjaWFsbHkgd2l0aCBga3ZtX3Jpc2N2X21tdV9tYXBgLgoKUmlnaHQsIGxldCYjMzk7cyBlc3RhYmxpc2ggaWYgYGt2bV9yaXNjdl9tbXVfbWFwYCBpcyBhIHBlcmZvcm1hbmNlLWNyaXRpY2FsIHBhdGguIEJpbmdvLCBpdCYjMzk7cyBjYWxsZWQgZHVyaW5nIG1lbW9yeSBtYXBwaW5nIGZvciBLVk0gZ3Vlc3RzLiBBbmQgZnVydGhlciwgaXQmIzM5O3MgYWN0dWFsbHkgdGhlIHBhZ2UgZmF1bHQgaGFuZGxlciAqd2l0aGluKiBLVk0uIERlZmluaXRlbHkgYSBob3RzcG90LiBTbywgd2hlcmUgaXMgdGhpcyBoYW5kbGVyIHRyaWdnZXJlZD8gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIGdyYXBoIG5vdyB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBhbmQgZGV0ZXJtaW5lIGlmIHRoZSBtb2RpZmljYXRpb24gaW1wcm92ZXMgb3IgZGVncmFkZXMgcGVyZm9ybWFuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDg6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3Jpc2N2X21tdV9tYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vbW11LmM9NDQwPXN0YXRpYyB1bnNpZ25lZCBsb25nIHBmbm1hcF9tYXBwaW5nX3NpemUoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTQ1MC1cbmFyY2gvcmlzY3Yva3ZtL21tdS5jOjQ1MTppbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNDUyLVx0XHQgICAgICBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgaHZhLCBib29sIGlzX3dyaXRlLFxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfZXhpdC5jPTE1PXN0YXRpYyBpbnQgZ3N0YWdlX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqcnVuLFxuLS1cbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfZXhpdC5jLTQ1LVxuYXJjaC9yaXNjdi9rdm0vdmNwdV9leGl0LmM6NDY6XHRyZXQgPSBrdm1fcmlzY3ZfbW11X21hcCh2Y3B1LCBtZW1zbG90LCBmYXVsdF9hZGRyLCBodmEsXG5hcmNoL3Jpc2N2L2t2bS92Y3B1X2V4aXQuYy00Ny1cdFx0XHRcdCh0cmFwLVx1MDAzZXNjYXVzZSA9PSBFWENfU1RPUkVfR1VFU1RfUEFHRV9GQVVMVCkgPyB0cnVlIDogZmFsc2UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDg6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY5MQoJCQkJCQkJb3V0cHV0OiAxNDgKCQkJCQkJCXRob3VnaHRzOiA1ODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFJJU0MtViBLVk0gUGFnZSBGYXVsdCBIYW5kbGluZyoqCgpPa2F5LCBzbyB0aGlzIGlzIHRyaWdnZXJlZCBieSBgZ3N0YWdlX3BhZ2VfZmF1bHRgLCB0aGUgZ3Vlc3QgcGFnZSBmYXVsdCBoYW5kbGVyLiBJdCYjMzk7cyBhIGhvdCBwYXRoLCBidXQgd2hhdCYjMzk7cyBjaGFuZ2VkIGlzIHNwZWNpZmljLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgcGZubWFwX21hcHBpbmdfc2l6ZWAgYW5kIGBrdm1fcmlzY3ZfbW11X21hcGAuIFdhaXQsIGBwZm5tYXBfbWFwcGluZ19zaXplYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgc28gaXQmIzM5O3MgcHJvYmFibHkgaW5saW5lZC4uLiBMZXQmIzM5O3MgYWxzbyBjb25zaWRlciBgZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZ2AsIHdoaWNoIHdhcyBhbHNvIG1vZGlmaWVkIGFuZCBpcyAqYWxzbyogc3RhdGljLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgYGt2bV9yaXNjdl9tbXVfbWFwYCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIG5ldyBsb2dpYy4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIHRoaXMgY29kZSBwYXRoLiBJcyB0aGVyZSBzb21ldGhpbmcgaW4gcGFydGljdWxhciB0aGF0IEkgbmVlZCB0byBlbmFibGU/IEFoLCBgVk1fUEZOTUFQYCBpcyByZWxhdGVkIHRvIGRldmljZSBtZW1vcnkgbWFwcGluZywgbGlrZSBWRklPLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgVkZJTyBpcyByZWxldmFudCBoZXJlLiBUaGUgY29tbWVudHMgbWVudGlvbiAmIzM0O0RldGVybWluZSB0aGUgRy1zdGFnZSBtYXBwaW5nIHNpemUgZm9yIGEgVk1fUEZOTUFQIChlLmcuIGhvc3QgZGV2aWNlIE1NSU8pIGZhdWx0LiYjMzQ7IFRvIHRyaWdnZXIgdGhpcywgd2UgbmVlZCBhIGBWTV9QRk5NQVBgIFZNQS4gVGhpcyBpcyBjcmVhdGVkIGJ5IG1hcHBpbmcgZGV2aWNlIG1lbW9yeSwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IFZGSU8gYW5kIG90aGVyIGRyaXZlcnMgdXNpbmcgYHJlbWFwX3Bmbl9yYW5nZWAgZG8uIFN5emthbGxlciBjYW4gcHJvYmFibHkgbWFwIGAvZGV2L2t2bWAgb3Igc2ltaWxhciBkZXZpY2VzIHRvIHNldCB1cCBgVk1fUEZOTUFQYCBhbmQgcGFzcyBpdCB0byBLVk0gYXMgYSBtZW1vcnkgc2xvdC4gU28gdGhlIGtleSBjb25maWcgaGVyZSBpcyBgS1ZNYC4KCkxldCBtZSBkb3VibGUtY2hlY2suLi4gWWVzLCBgS1ZNYCBlbmFibGVzIGBhcmNoL3Jpc2N2L2t2bS9tbXUuY2AuIFRoZSBwYXRjaCAqaXMqIGluIGBhcmNoL3Jpc2N2L2t2bS9tbXUuY2AsIHdoaWNoIG1ha2VzIGl0IFJJU0MtViBzcGVjaWZpYy4gQW5kIFN5emthbGxlciBmdXp6ZXMgUklTQy1WLi4uIHBlcmZlY3QhCgpTbywgdG8gc3VtbWFyaXplIGZvciBmdXp6aW5nOgoKKiAgICoqV29ydGhGdXp6aW5nOioqIEFic29sdXRlbHkhCiogICAqKkZvY3VzU3ltYm9sczoqKiBga3ZtX3Jpc2N2X21tdV9tYXBgICh0aGUgbWFpbiBmdW5jdGlvbiBvZiBpbnRlcmVzdCksIGBwZm5tYXBfbWFwcGluZ19zaXplYCAodGhlIG5ldywgaGVscGVyIGZ1bmN0aW9uKSwgYW5kIGBmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nYCAodGhlIG1vZGlmaWVkIGNoZWNrKS4KKiAgICoqRW5hYmxlQ29uZmlnczoqKiBgS1ZNYAoqICAgKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBSSVNDLVYgS1ZNIE1NVSBwYWdlIGZhdWx0IGhhbmRsZXIgdG8gc3VwcG9ydCBodWdlIHBhZ2UgbWFwcGluZ3MgKFBNRF9TSVpFKSBmb3IgZGV2aWNlIG1lbW9yeSAoVk1fUEZOTUFQKS4gVGhpcyByZXByZXNlbnRzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgdmlydHVhbGl6YXRpb24gbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMsIGFuZCBhcyBzdWNoLCBpdCAqbXVzdCogYmUgZnV6emVkIHRvIHByZXZlbnQgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIGhvc3QgY3Jhc2hlcyByZXN1bHRpbmcgZnJvbSBtYWxpY2lvdXMgb3IgZWRnZS1jYXNlIGd1ZXN0IHBhZ2UgZmF1bHRzLgoKSSYjMzk7bSBzZXR0aW5nIGBrdm1fcmlzY3ZfbW11X21hcGAgYXMgdGhlIGNvcmUgc3ltYm9sLiBgcGZubWFwX21hcHBpbmdfc2l6ZWAgaXMgYSBuZXcgZnVuY3Rpb24gYW5kIGBmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nYCBpcyBhbHNvIG1vZGlmaWVkLiBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gbm90ZSBhbGwgb2YgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDg6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9yaXNjdl9tbXVfbWFwJiMzNDssCiAgICAmIzM0O3Bmbm1hcF9tYXBwaW5nX3NpemUmIzM0OywKICAgICYjMzQ7ZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgS1ZNIE1NVSBwYWdlIGZhdWx0IGhhbmRsZXIgb24gUklTQy1WIHRvIHN1cHBvcnQgaHVnZSBwYWdlIG1hcHBpbmdzIChQTURfU0laRSkgZm9yIGRldmljZSBtZW1vcnkgKFZNX1BGTk1BUCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSB2aXJ0dWFsaXphdGlvbiBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIG1lbW9yeSBjb3JydXB0aW9uIG9yIGhvc3QgY3Jhc2hlcyB3aGVuIGhhbmRsaW5nIG1hbGljaW91cyBvciBlZGdlLWNhc2UgZ3Vlc3QgcGFnZSBmYXVsdHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9yaXNjdl9tbXVfbWFwJiMzNDssCiAgICAmIzM0O3Bmbm1hcF9tYXBwaW5nX3NpemUmIzM0OywKICAgICYjMzQ7ZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgS1ZNIE1NVSBwYWdlIGZhdWx0IGhhbmRsZXIgb24gUklTQy1WIHRvIHN1cHBvcnQgaHVnZSBwYWdlIG1hcHBpbmdzIChQTURfU0laRSkgZm9yIGRldmljZSBtZW1vcnkgKFZNX1BGTk1BUCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSB2aXJ0dWFsaXphdGlvbiBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIG1lbW9yeSBjb3JydXB0aW9uIG9yIGhvc3QgY3Jhc2hlcyB3aGVuIGhhbmRsaW5nIG1hbGljaW91cyBvciBlZGdlLWNhc2UgZ3Vlc3QgcGFnZSBmYXVsdHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwODo1MjozOS43MzM0NTMxODFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzU2MTI0NzY0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fcmlzY3ZfbW11X21hcFwiLFxuICAgIFwicGZubWFwX21hcHBpbmdfc2l6ZVwiLFxuICAgIFwiZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBLVk0gTU1VIHBhZ2UgZmF1bHQgaGFuZGxlciBvbiBSSVNDLVYgdG8gc3VwcG9ydCBodWdlIHBhZ2UgbWFwcGluZ3MgKFBNRF9TSVpFKSBmb3IgZGV2aWNlIG1lbW9yeSAoVk1fUEZOTUFQKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHZpcnR1YWxpemF0aW9uIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBkb2Vzbid0IGludHJvZHVjZSBtZW1vcnkgY29ycnVwdGlvbiBvciBob3N0IGNyYXNoZXMgd2hlbiBoYW5kbGluZyBtYWxpY2lvdXMgb3IgZWRnZS1jYXNlIGd1ZXN0IHBhZ2UgZmF1bHRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwODo1MjozOS43MzM0NTg0MzJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5ODUwNDAzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGZhYzA5Nzk1ZWY3ZDMwNmNhOThlNzEyMTUzZTMwZWE1MzhhMDFjY2ZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMTAgMDg6NTI6MzggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vbW11LmMgYi9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xcbmluZGV4IDJkM2RlZjAyNDI3MGMwLi41M2ZiMzRkNGI3NmQwOSAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL21tdS5jXFxuQEAgLTE2LDYgKzE2LDggQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm1fbW11LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX25hY2wuaFxcdTAwM2VcXG4gXFxuKyNpbmNsdWRlIFxcXCJ0cmFjZS5oXFxcIlxcbitcXG4gc3RhdGljIHZvaWQgbW11X3dwX21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCBpbnQgc2xvdClcXG4ge1xcbiBcXHRzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90cyA9IGt2bV9tZW1zbG90cyhrdm0pO1xcbkBAIC0yODYsNyArMjg4LDcgQEAgYm9vbCBrdm1fdGVzdF9hZ2VfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9nZm5fcmFuZ2UgKnJhbmdlKVxcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCBmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIGh2YSlcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgaHZhLCB1bnNpZ25lZCBsb25nIG1hcF9zaXplKVxcbiB7XFxuIFxcdGh2YV90IHVhZGRyX3N0YXJ0LCB1YWRkcl9lbmQ7XFxuIFxcdGdwYV90IGdwYV9zdGFydDtcXG5AQCAtMzIxLDcgKzMyMyw3IEBAIHN0YXRpYyBib29sIGZhdWx0X3N1cHBvcnRzX2dzdGFnZV9odWdlX21hcHBpbmcoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcXG4gXFx0ICogICBlIC1cXHUwMDNlIGdcXG4gXFx0ICogICBmIC1cXHUwMDNlIGhcXG4gXFx0ICovXFxuLVxcdGlmICgoZ3BhX3N0YXJ0IFxcdTAwMjYgKFBNRF9TSVpFIC0gMSkpICE9ICh1YWRkcl9zdGFydCBcXHUwMDI2IChQTURfU0laRSAtIDEpKSlcXG4rXFx0aWYgKChncGFfc3RhcnQgXFx1MDAyNiAobWFwX3NpemUgLSAxKSkgIT0gKHVhZGRyX3N0YXJ0IFxcdTAwMjYgKG1hcF9zaXplIC0gMSkpKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHQvKlxcbkBAIC0zMzYsNyArMzM4LDcgQEAgc3RhdGljIGJvb2wgZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZyhzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxcbiBcXHQgKiB1c2Vyc3BhY2VfYWRkciBvciB0aGUgYmFzZV9nZm4sIGFzIGJvdGggYXJlIGVxdWFsbHkgYWxpZ25lZCAocGVyXFxuIFxcdCAqIHRoZSBjaGVjayBhYm92ZSkgYW5kIGVxdWFsbHkgc2l6ZWQuXFxuIFxcdCAqL1xcbi1cXHRyZXR1cm4gKGh2YSBcXHUwMDNlPSBBTElHTih1YWRkcl9zdGFydCwgUE1EX1NJWkUpKSBcXHUwMDI2XFx1MDAyNiAoaHZhIFxcdTAwM2MgQUxJR05fRE9XTih1YWRkcl9lbmQsIFBNRF9TSVpFKSk7XFxuK1xcdHJldHVybiAoaHZhIFxcdTAwM2U9IEFMSUdOKHVhZGRyX3N0YXJ0LCBtYXBfc2l6ZSkpIFxcdTAwMjZcXHUwMDI2IChodmEgXFx1MDAzYyBBTElHTl9ET1dOKHVhZGRyX2VuZCwgbWFwX3NpemUpKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBnZXRfaHZhX21hcHBpbmdfc2l6ZShzdHJ1Y3Qga3ZtICprdm0sXFxuQEAgLTQwNCw3ICs0MDYsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyB0cmFuc3BhcmVudF9odWdlcGFnZV9hZGp1c3Qoc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHQgKiBzdXJlIHRoYXQgdGhlIEhWQSBhbmQgR1BBIGFyZSBzdWZmaWNpZW50bHkgYWxpZ25lZCBhbmQgdGhhdCB0aGVcXG4gXFx0ICogYmxvY2sgbWFwIGlzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIG1lbXNsb3QuXFxuIFxcdCAqL1xcbi1cXHRpZiAoZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZyhtZW1zbG90LCBodmEpKSB7XFxuK1xcdGlmIChmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nKG1lbXNsb3QsIGh2YSwgUE1EX1NJWkUpKSB7XFxuIFxcdFxcdGludCBzejtcXG4gXFxuIFxcdFxcdHN6ID0gZ2V0X2h2YV9tYXBwaW5nX3NpemUoa3ZtLCBodmEpO1xcbkBAIC00MjEsNiArNDIzLDMxIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHRyYW5zcGFyZW50X2h1Z2VwYWdlX2FkanVzdChzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdHJldHVybiBQQUdFX1NJWkU7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIERldGVybWluZSB0aGUgRy1zdGFnZSBtYXBwaW5nIHNpemUgZm9yIGEgVk1fUEZOTUFQIChlLmcuIGhvc3QgZGV2aWNlXFxuKyAqIE1NSU8pIGZhdWx0LiAgVW5saWtlIGFybTY0J3Mgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24sIHdlIG5ldmVyIGRlcml2ZSB0aGVcXG4rICogaG9zdCBwaHlzaWNhbCBhZGRyZXNzIGZyb20gdm1hLVxcdTAwM2V2bV9wZ29mZiAod2hpY2ggaXMgdW5yZWxpYWJsZSBzaW5jZSB0aGVcXG4rICogVkZJTyB1bm1hcF9tYXBwaW5nX3JhbmdlKCkgY2hhbmdlcykuICBJbnN0ZWFkIHdlIHdhbGsgdGhlIGhvc3QgcGFnZSB0YWJsZXNcXG4rICogdmlhIGdldF9odmFfbWFwcGluZ19zaXplKCk6IGlmIHRoZSBob3N0IGl0c2VsZiBpbnN0YWxsZWQgYSBsZWFmIGJsb2NrIGZvclxcbisgKiB0aGlzIGFkZHJlc3MsIHBoeXNpY2FsIGNvbnRpZ3VpdHkgd2l0aGluIHRoYXQgYmxvY2sgaXMgYWxyZWFkeSBndWFyYW50ZWVkXFxuKyAqIGJ5IHRoZSBob3N0IG1tLiAgVGhlIG1lbW9yeSB0eXBlIHN0YXlzIGNvcnJlY3QgYmVjYXVzZSBSSVNDLVYgZGVyaXZlcyBpdFxcbisgKiBmcm9tIHRoZSBwaHlzaWNhbCBhZGRyZXNzJyBQTUEsIGluZGVwZW5kZW50IG9mIHRoZSBHLXN0YWdlIFBURSBzaXplLlxcbisgKlxcbisgKiBCZSBjb25zZXJ2YXRpdmUgZm9yIG5vdyBhbmQgb25seSBwcm9tb3RlIHRvIFBNRC1zaXplZCBibG9ja3M7IFBVRC1zaXplZFxcbisgKiBkZXZpY2UgYmxvY2tzIGFyZSBsZWZ0IGFzIGZ1dHVyZSB3b3JrLiAgRmFsbCBiYWNrIHRvIFBBR0VfU0laRSB3aGVuZXZlclxcbisgKiBjb250aWd1aXR5IG9yIEhWQS9HUEEgYWxpZ25tZW50IGNhbm5vdCBiZSBwcm92ZW4uXFxuKyAqL1xcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBwZm5tYXBfbWFwcGluZ19zaXplKHN0cnVjdCBrdm0gKmt2bSxcXG4rXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXFxuK1xcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIGh2YSlcXG4re1xcbitcXHRpZiAoZ2V0X2h2YV9tYXBwaW5nX3NpemUoa3ZtLCBodmEpIFxcdTAwM2U9IFBNRF9TSVpFIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nKG1lbXNsb3QsIGh2YSwgUE1EX1NJWkUpKVxcbitcXHRcXHRyZXR1cm4gUE1EX1NJWkU7XFxuK1xcbitcXHRyZXR1cm4gUEFHRV9TSVpFO1xcbit9XFxuK1xcbiBpbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxcbiBcXHRcXHQgICAgICBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgaHZhLCBib29sIGlzX3dyaXRlLFxcbiBcXHRcXHQgICAgICBzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nICpvdXRfbWFwKVxcbkBAIC00NjUsMTEgKzQ5MiwxNCBAQCBpbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxcbiBcXHRlbHNlXFxuIFxcdFxcdHZtYV9wYWdlc2hpZnQgPSBQQUdFX1NISUZUO1xcbiBcXHR2bWFfcGFnZXNpemUgPSAxVUxMIFxcdTAwM2NcXHUwMDNjIHZtYV9wYWdlc2hpZnQ7XFxuLVxcdGlmIChsb2dnaW5nIHx8ICh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fUEZOTUFQKSlcXG4rXFxuK1xcdGlmIChsb2dnaW5nKVxcbiBcXHRcXHR2bWFfcGFnZXNpemUgPSBQQUdFX1NJWkU7XFxuK1xcdGVsc2UgaWYgKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9QRk5NQVApXFxuK1xcdFxcdHZtYV9wYWdlc2l6ZSA9IHBmbm1hcF9tYXBwaW5nX3NpemUoa3ZtLCBtZW1zbG90LCBodmEpO1xcbiBcXG4gXFx0aWYgKHZtYV9wYWdlc2l6ZSA9PSBQTURfU0laRSB8fCB2bWFfcGFnZXNpemUgPT0gUFVEX1NJWkUpXFxuLVxcdFxcdGdmbiA9IChncGEgXFx1MDAyNiBodWdlX3BhZ2VfbWFzayhoc3RhdGVfdm1hKHZtYSkpKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbitcXHRcXHRnZm4gPSAoZ3BhIFxcdTAwMjYgfih2bWFfcGFnZXNpemUgLSAxKSkgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFJlYWQgbW11X2ludmFsaWRhdGVfc2VxIHNvIHRoYXQgS1ZNIGNhbiBkZXRlY3QgaWYgdGhlIHJlc3VsdHMgb2ZcXG5AQCAtNTE1LDYgKzU0NSw5IEBAIGludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXFxuIFxcdGlmICghbG9nZ2luZyBcXHUwMDI2XFx1MDAyNiAodm1hX3BhZ2VzaXplID09IFBBR0VfU0laRSkpXFxuIFxcdFxcdHZtYV9wYWdlc2l6ZSA9IHRyYW5zcGFyZW50X2h1Z2VwYWdlX2FkanVzdChrdm0sIG1lbXNsb3QsIGh2YSwgXFx1MDAyNmhmbiwgXFx1MDAyNmdwYSk7XFxuIFxcbitcXHR0cmFjZV9rdm1fbW11X21hcChncGEsIGh2YSwgaGZuLCB2bWFfcGFnZXNpemUsXFxuK1xcdFxcdFxcdCAgISEodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1BGTk1BUCkpO1xcbitcXG4gXFx0aWYgKHdyaXRhYmxlKSB7XFxuIFxcdFxcdG1hcmtfcGFnZV9kaXJ0eV9pbl9zbG90KGt2bSwgbWVtc2xvdCwgZ2ZuKTtcXG4gXFx0XFx0cmV0ID0ga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZShcXHUwMDI2Z3N0YWdlLCBwY2FjaGUsIGdwYSwgaGZuIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQsXFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL3RyYWNlLmggYi9hcmNoL3Jpc2N2L2t2bS90cmFjZS5oXFxuaW5kZXggM2Q1NDE3NWQ4MDVjYmMuLmRiMmQyOGYxZDcxNDgzIDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL3RyYWNlLmhcXG4rKysgYi9hcmNoL3Jpc2N2L2t2bS90cmFjZS5oXFxuQEAgLTU2LDYgKzU2LDM1IEBAIFRSQUNFX0VWRU5UKGt2bV9leGl0LFxcbiBcXHRcXHRfX2VudHJ5LVxcdTAwM2VodGluc3QpXFxuICk7XFxuIFxcbitUUkFDRV9FVkVOVChrdm1fbW11X21hcCxcXG4rXFx0VFBfUFJPVE8odW5zaWduZWQgbG9uZyBncGEsIHVuc2lnbmVkIGxvbmcgaHZhLCB1bnNpZ25lZCBsb25nIGhmbixcXG4rXFx0XFx0IHVuc2lnbmVkIGxvbmcgbWFwX3NpemUsIGJvb2wgaXNfcGZubWFwKSxcXG4rXFx0VFBfQVJHUyhncGEsIGh2YSwgaGZuLCBtYXBfc2l6ZSwgaXNfcGZubWFwKSxcXG4rXFxuK1xcdFRQX1NUUlVDVF9fZW50cnkoXFxuK1xcdFxcdF9fZmllbGQodW5zaWduZWQgbG9uZywgZ3BhKVxcbitcXHRcXHRfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGh2YSlcXG4rXFx0XFx0X19maWVsZCh1bnNpZ25lZCBsb25nLCBoZm4pXFxuK1xcdFxcdF9fZmllbGQodW5zaWduZWQgbG9uZywgbWFwX3NpemUpXFxuK1xcdFxcdF9fZmllbGQoYm9vbCwgaXNfcGZubWFwKVxcbitcXHQpLFxcbitcXG4rXFx0VFBfZmFzdF9hc3NpZ24oXFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZWdwYVxcdFxcdD0gZ3BhO1xcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2VodmFcXHRcXHQ9IGh2YTtcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlaGZuXFx0XFx0PSBoZm47XFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZW1hcF9zaXplXFx0PSBtYXBfc2l6ZTtcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlaXNfcGZubWFwXFx0PSBpc19wZm5tYXA7XFxuK1xcdCksXFxuK1xcbitcXHRUUF9wcmludGsoXFxcIkdQQToweCVseCwgSFZBOjB4JWx4LCBIRk46MHglbHgsIHNpemU6JWx1S0IsIHBmbm1hcDolZFxcXCIsXFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZWdwYSxcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlaHZhLFxcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2VoZm4sXFxuK1xcdFxcdF9fZW50cnktXFx1MDAzZW1hcF9zaXplIFxcdTAwM2VcXHUwMDNlIDEwLFxcbitcXHRcXHRfX2VudHJ5LVxcdTAwM2Vpc19wZm5tYXApXFxuKyk7XFxuK1xcbiAjZW5kaWYgLyogX1RSQUNFX1JTSUNWX0tWTV9IICovXFxuIFxcbiAjdW5kZWYgVFJBQ0VfSU5DTFVERV9QQVRIXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA4OjUyOjQwLjIzMjk1ODM0NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcwNjE3MzMxMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3Jpc2N2X21tdV9tYXBcIixcbiAgICBcInBmbm1hcF9tYXBwaW5nX3NpemVcIixcbiAgICBcImZhdWx0X3N1cHBvcnRzX2dzdGFnZV9odWdlX21hcHBpbmdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgS1ZNIE1NVSBwYWdlIGZhdWx0IGhhbmRsZXIgb24gUklTQy1WIHRvIHN1cHBvcnQgaHVnZSBwYWdlIG1hcHBpbmdzIChQTURfU0laRSkgZm9yIGRldmljZSBtZW1vcnkgKFZNX1BGTk1BUCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSB2aXJ0dWFsaXphdGlvbiBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgZG9lc24ndCBpbnRyb2R1Y2UgbWVtb3J5IGNvcnJ1cHRpb24gb3IgaG9zdCBjcmFzaGVzIHdoZW4gaGFuZGxpbmcgbWFsaWNpb3VzIG9yIGVkZ2UtY2FzZSBndWVzdCBwYWdlIGZhdWx0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmYWMwOTc5NWVmN2QzMDZjYTk4ZTcxMjE1M2UzMGVhNTM4YTAxY2NmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMTAgMDg6NTI6MzggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9tbXUuYyBiL2FyY2gvcmlzY3Yva3ZtL21tdS5jXG5pbmRleCAyZDNkZWYwMjQyNzBjMC4uNTNmYjM0ZDRiNzZkMDkgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xuKysrIGIvYXJjaC9yaXNjdi9rdm0vbW11LmNcbkBAIC0xNiw2ICsxNiw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2t2bV9tbXUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fbmFjbC5oXHUwMDNlXG4gXG4rI2luY2x1ZGUgXCJ0cmFjZS5oXCJcbitcbiBzdGF0aWMgdm9pZCBtbXVfd3BfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIGludCBzbG90KVxuIHtcbiBcdHN0cnVjdCBrdm1fbWVtc2xvdHMgKnNsb3RzID0ga3ZtX21lbXNsb3RzKGt2bSk7XG5AQCAtMjg2LDcgKzI4OCw3IEBAIGJvb2wga3ZtX3Rlc3RfYWdlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcbiB9XG4gXG4gc3RhdGljIGJvb2wgZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZyhzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxuLVx0XHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBodmEpXG4rXHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGh2YSwgdW5zaWduZWQgbG9uZyBtYXBfc2l6ZSlcbiB7XG4gXHRodmFfdCB1YWRkcl9zdGFydCwgdWFkZHJfZW5kO1xuIFx0Z3BhX3QgZ3BhX3N0YXJ0O1xuQEAgLTMyMSw3ICszMjMsNyBAQCBzdGF0aWMgYm9vbCBmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXG4gXHQgKiAgIGUgLVx1MDAzZSBnXG4gXHQgKiAgIGYgLVx1MDAzZSBoXG4gXHQgKi9cbi1cdGlmICgoZ3BhX3N0YXJ0IFx1MDAyNiAoUE1EX1NJWkUgLSAxKSkgIT0gKHVhZGRyX3N0YXJ0IFx1MDAyNiAoUE1EX1NJWkUgLSAxKSkpXG4rXHRpZiAoKGdwYV9zdGFydCBcdTAwMjYgKG1hcF9zaXplIC0gMSkpICE9ICh1YWRkcl9zdGFydCBcdTAwMjYgKG1hcF9zaXplIC0gMSkpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHQvKlxuQEAgLTMzNiw3ICszMzgsNyBAQCBzdGF0aWMgYm9vbCBmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXG4gXHQgKiB1c2Vyc3BhY2VfYWRkciBvciB0aGUgYmFzZV9nZm4sIGFzIGJvdGggYXJlIGVxdWFsbHkgYWxpZ25lZCAocGVyXG4gXHQgKiB0aGUgY2hlY2sgYWJvdmUpIGFuZCBlcXVhbGx5IHNpemVkLlxuIFx0ICovXG4tXHRyZXR1cm4gKGh2YSBcdTAwM2U9IEFMSUdOKHVhZGRyX3N0YXJ0LCBQTURfU0laRSkpIFx1MDAyNlx1MDAyNiAoaHZhIFx1MDAzYyBBTElHTl9ET1dOKHVhZGRyX2VuZCwgUE1EX1NJWkUpKTtcbitcdHJldHVybiAoaHZhIFx1MDAzZT0gQUxJR04odWFkZHJfc3RhcnQsIG1hcF9zaXplKSkgXHUwMDI2XHUwMDI2IChodmEgXHUwMDNjIEFMSUdOX0RPV04odWFkZHJfZW5kLCBtYXBfc2l6ZSkpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGdldF9odmFfbWFwcGluZ19zaXplKHN0cnVjdCBrdm0gKmt2bSxcbkBAIC00MDQsNyArNDA2LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgdHJhbnNwYXJlbnRfaHVnZXBhZ2VfYWRqdXN0KHN0cnVjdCBrdm0gKmt2bSxcbiBcdCAqIHN1cmUgdGhhdCB0aGUgSFZBIGFuZCBHUEEgYXJlIHN1ZmZpY2llbnRseSBhbGlnbmVkIGFuZCB0aGF0IHRoZVxuIFx0ICogYmxvY2sgbWFwIGlzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIG1lbXNsb3QuXG4gXHQgKi9cbi1cdGlmIChmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nKG1lbXNsb3QsIGh2YSkpIHtcbitcdGlmIChmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nKG1lbXNsb3QsIGh2YSwgUE1EX1NJWkUpKSB7XG4gXHRcdGludCBzejtcbiBcbiBcdFx0c3ogPSBnZXRfaHZhX21hcHBpbmdfc2l6ZShrdm0sIGh2YSk7XG5AQCAtNDIxLDYgKzQyMywzMSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyB0cmFuc3BhcmVudF9odWdlcGFnZV9hZGp1c3Qoc3RydWN0IGt2bSAqa3ZtLFxuIFx0cmV0dXJuIFBBR0VfU0laRTtcbiB9XG4gXG4rLypcbisgKiBEZXRlcm1pbmUgdGhlIEctc3RhZ2UgbWFwcGluZyBzaXplIGZvciBhIFZNX1BGTk1BUCAoZS5nLiBob3N0IGRldmljZVxuKyAqIE1NSU8pIGZhdWx0LiAgVW5saWtlIGFybTY0J3Mgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24sIHdlIG5ldmVyIGRlcml2ZSB0aGVcbisgKiBob3N0IHBoeXNpY2FsIGFkZHJlc3MgZnJvbSB2bWEtXHUwMDNldm1fcGdvZmYgKHdoaWNoIGlzIHVucmVsaWFibGUgc2luY2UgdGhlXG4rICogVkZJTyB1bm1hcF9tYXBwaW5nX3JhbmdlKCkgY2hhbmdlcykuICBJbnN0ZWFkIHdlIHdhbGsgdGhlIGhvc3QgcGFnZSB0YWJsZXNcbisgKiB2aWEgZ2V0X2h2YV9tYXBwaW5nX3NpemUoKTogaWYgdGhlIGhvc3QgaXRzZWxmIGluc3RhbGxlZCBhIGxlYWYgYmxvY2sgZm9yXG4rICogdGhpcyBhZGRyZXNzLCBwaHlzaWNhbCBjb250aWd1aXR5IHdpdGhpbiB0aGF0IGJsb2NrIGlzIGFscmVhZHkgZ3VhcmFudGVlZFxuKyAqIGJ5IHRoZSBob3N0IG1tLiAgVGhlIG1lbW9yeSB0eXBlIHN0YXlzIGNvcnJlY3QgYmVjYXVzZSBSSVNDLVYgZGVyaXZlcyBpdFxuKyAqIGZyb20gdGhlIHBoeXNpY2FsIGFkZHJlc3MnIFBNQSwgaW5kZXBlbmRlbnQgb2YgdGhlIEctc3RhZ2UgUFRFIHNpemUuXG4rICpcbisgKiBCZSBjb25zZXJ2YXRpdmUgZm9yIG5vdyBhbmQgb25seSBwcm9tb3RlIHRvIFBNRC1zaXplZCBibG9ja3M7IFBVRC1zaXplZFxuKyAqIGRldmljZSBibG9ja3MgYXJlIGxlZnQgYXMgZnV0dXJlIHdvcmsuICBGYWxsIGJhY2sgdG8gUEFHRV9TSVpFIHdoZW5ldmVyXG4rICogY29udGlndWl0eSBvciBIVkEvR1BBIGFsaWdubWVudCBjYW5ub3QgYmUgcHJvdmVuLlxuKyAqL1xuK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBmbm1hcF9tYXBwaW5nX3NpemUoc3RydWN0IGt2bSAqa3ZtLFxuK1x0XHRcdFx0XHQgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbitcdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgaHZhKVxuK3tcbitcdGlmIChnZXRfaHZhX21hcHBpbmdfc2l6ZShrdm0sIGh2YSkgXHUwMDNlPSBQTURfU0laRSBcdTAwMjZcdTAwMjZcbitcdCAgICBmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nKG1lbXNsb3QsIGh2YSwgUE1EX1NJWkUpKVxuK1x0XHRyZXR1cm4gUE1EX1NJWkU7XG4rXG4rXHRyZXR1cm4gUEFHRV9TSVpFO1xuK31cbitcbiBpbnQga3ZtX3Jpc2N2X21tdV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LFxuIFx0XHQgICAgICBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgaHZhLCBib29sIGlzX3dyaXRlLFxuIFx0XHQgICAgICBzdHJ1Y3Qga3ZtX2dzdGFnZV9tYXBwaW5nICpvdXRfbWFwKVxuQEAgLTQ2NSwxMSArNDkyLDE0IEBAIGludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXG4gXHRlbHNlXG4gXHRcdHZtYV9wYWdlc2hpZnQgPSBQQUdFX1NISUZUO1xuIFx0dm1hX3BhZ2VzaXplID0gMVVMTCBcdTAwM2NcdTAwM2Mgdm1hX3BhZ2VzaGlmdDtcbi1cdGlmIChsb2dnaW5nIHx8ICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1BGTk1BUCkpXG4rXG4rXHRpZiAobG9nZ2luZylcbiBcdFx0dm1hX3BhZ2VzaXplID0gUEFHRV9TSVpFO1xuK1x0ZWxzZSBpZiAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9QRk5NQVApXG4rXHRcdHZtYV9wYWdlc2l6ZSA9IHBmbm1hcF9tYXBwaW5nX3NpemUoa3ZtLCBtZW1zbG90LCBodmEpO1xuIFxuIFx0aWYgKHZtYV9wYWdlc2l6ZSA9PSBQTURfU0laRSB8fCB2bWFfcGFnZXNpemUgPT0gUFVEX1NJWkUpXG4tXHRcdGdmbiA9IChncGEgXHUwMDI2IGh1Z2VfcGFnZV9tYXNrKGhzdGF0ZV92bWEodm1hKSkpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuK1x0XHRnZm4gPSAoZ3BhIFx1MDAyNiB+KHZtYV9wYWdlc2l6ZSAtIDEpKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiBcbiBcdC8qXG4gXHQgKiBSZWFkIG1tdV9pbnZhbGlkYXRlX3NlcSBzbyB0aGF0IEtWTSBjYW4gZGV0ZWN0IGlmIHRoZSByZXN1bHRzIG9mXG5AQCAtNTE1LDYgKzU0NSw5IEBAIGludCBrdm1fcmlzY3ZfbW11X21hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXG4gXHRpZiAoIWxvZ2dpbmcgXHUwMDI2XHUwMDI2ICh2bWFfcGFnZXNpemUgPT0gUEFHRV9TSVpFKSlcbiBcdFx0dm1hX3BhZ2VzaXplID0gdHJhbnNwYXJlbnRfaHVnZXBhZ2VfYWRqdXN0KGt2bSwgbWVtc2xvdCwgaHZhLCBcdTAwMjZoZm4sIFx1MDAyNmdwYSk7XG4gXG4rXHR0cmFjZV9rdm1fbW11X21hcChncGEsIGh2YSwgaGZuLCB2bWFfcGFnZXNpemUsXG4rXHRcdFx0ICAhISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1BGTk1BUCkpO1xuK1xuIFx0aWYgKHdyaXRhYmxlKSB7XG4gXHRcdG1hcmtfcGFnZV9kaXJ0eV9pbl9zbG90KGt2bSwgbWVtc2xvdCwgZ2ZuKTtcbiBcdFx0cmV0ID0ga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZShcdTAwMjZnc3RhZ2UsIHBjYWNoZSwgZ3BhLCBoZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vdHJhY2UuaCBiL2FyY2gvcmlzY3Yva3ZtL3RyYWNlLmhcbmluZGV4IDNkNTQxNzVkODA1Y2JjLi5kYjJkMjhmMWQ3MTQ4MyAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL3RyYWNlLmhcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL3RyYWNlLmhcbkBAIC01Niw2ICs1NiwzNSBAQCBUUkFDRV9FVkVOVChrdm1fZXhpdCxcbiBcdFx0X19lbnRyeS1cdTAwM2VodGluc3QpXG4gKTtcbiBcbitUUkFDRV9FVkVOVChrdm1fbW11X21hcCxcbitcdFRQX1BST1RPKHVuc2lnbmVkIGxvbmcgZ3BhLCB1bnNpZ25lZCBsb25nIGh2YSwgdW5zaWduZWQgbG9uZyBoZm4sXG4rXHRcdCB1bnNpZ25lZCBsb25nIG1hcF9zaXplLCBib29sIGlzX3Bmbm1hcCksXG4rXHRUUF9BUkdTKGdwYSwgaHZhLCBoZm4sIG1hcF9zaXplLCBpc19wZm5tYXApLFxuK1xuK1x0VFBfU1RSVUNUX19lbnRyeShcbitcdFx0X19maWVsZCh1bnNpZ25lZCBsb25nLCBncGEpXG4rXHRcdF9fZmllbGQodW5zaWduZWQgbG9uZywgaHZhKVxuK1x0XHRfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGhmbilcbitcdFx0X19maWVsZCh1bnNpZ25lZCBsb25nLCBtYXBfc2l6ZSlcbitcdFx0X19maWVsZChib29sLCBpc19wZm5tYXApXG4rXHQpLFxuK1xuK1x0VFBfZmFzdF9hc3NpZ24oXG4rXHRcdF9fZW50cnktXHUwMDNlZ3BhXHRcdD0gZ3BhO1xuK1x0XHRfX2VudHJ5LVx1MDAzZWh2YVx0XHQ9IGh2YTtcbitcdFx0X19lbnRyeS1cdTAwM2VoZm5cdFx0PSBoZm47XG4rXHRcdF9fZW50cnktXHUwMDNlbWFwX3NpemVcdD0gbWFwX3NpemU7XG4rXHRcdF9fZW50cnktXHUwMDNlaXNfcGZubWFwXHQ9IGlzX3Bmbm1hcDtcbitcdCksXG4rXG4rXHRUUF9wcmludGsoXCJHUEE6MHglbHgsIEhWQToweCVseCwgSEZOOjB4JWx4LCBzaXplOiVsdUtCLCBwZm5tYXA6JWRcIixcbitcdFx0X19lbnRyeS1cdTAwM2VncGEsXG4rXHRcdF9fZW50cnktXHUwMDNlaHZhLFxuK1x0XHRfX2VudHJ5LVx1MDAzZWhmbixcbitcdFx0X19lbnRyeS1cdTAwM2VtYXBfc2l6ZSBcdTAwM2VcdTAwM2UgMTAsXG4rXHRcdF9fZW50cnktXHUwMDNlaXNfcGZubWFwKVxuKyk7XG4rXG4gI2VuZGlmIC8qIF9UUkFDRV9SU0lDVl9LVk1fSCAqL1xuIFxuICN1bmRlZiBUUkFDRV9JTkNMVURFX1BBVEhcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA4OjUyOjQwLjIzMjk2MDc0NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5MzU1NTE2ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXZhbHVhdGluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSBuZWVkIHRvIGFzc2VzcyB3aGV0aGVyIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGtlcm5lbCB0aGF0IHdhcnJhbnQgZnV6emluZy4gVGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uIHRlbGxzIG1lIGl0IG1vZGlmaWVzIGBhcmNoL3Jpc2N2L2t2bS9tbXUuY2AgYW5kIGBhcmNoL3Jpc2N2L2t2bS90cmFjZS5oYC4gU3BlY2lmaWNhbGx5LCB0aGUgY2hhbmdlIHRvIGBtbXUuY2AgaXMgdGhlIGtleS4gVGhlIHBhdGNoIGFsdGVycyB0aGUgYmVoYXZpb3Igb2YgYGt2bV9yaXNjdl9tbXVfbWFwYCBjb25jZXJuaW5nIGBWTV9QRk5NQVBgLiBUaGUgb3JpZ2luYWwgY29kZSBhbHdheXMgdXNlZCBgUEFHRV9TSVpFYCBmb3IgYFZNX1BGTk1BUGAgaWYgbG9nZ2luZyB3YXMgZW5hYmxlZCBvciB0aGUgYFZNX1BGTk1BUGAgZmxhZyB3YXMgc2V0LiBOb3csIGl0IHNlZW1zIHRoYXQgaWYgbG9nZ2luZyBpcyBkaXNhYmxlZCwgYW5kIHRoZSBgVk1fUEZOTUFQYCBmbGFnIGlzIHNldCwgaXQgY2hlY2tzIGZvciBgcGZubWFwX21hcHBpbmdfc2l6ZWAsIHdoaWNoIGNhbiBwb3RlbnRpYWxseSByZXR1cm4gYFBNRF9TSVpFYCBvciBsYXJnZXIgbWFwcGluZ3MgaW5zdGVhZCBvZiBqdXN0IGBQQUdFX1NJWkVgLiBUaGlzIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgdGhlIFJJU0MtViBLVk0gTU1VIGhhbmRsZXMgdGhlIG1hcHBpbmcgc2l6ZSwgcGFydGljdWxhcmx5IGZvciBkZXZpY2UgbWVtb3J5LlxuXG5UaGlzIGlzIHNpZ25pZmljYW50LiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gUklTQy1WIEtWTSwgYXMgYSBjb3JlIHZpcnR1YWxpemF0aW9uIGZlYXR1cmUsIGlzIGEgbmF0dXJhbCB0YXJnZXQuIEFuZCwgeWVzLCBTeXprYWxsZXIgZG9lcyBpbmRlZWQgc3VwcG9ydCBSSVNDLVYgS1ZNLCB3aGljaCBpcyBnb29kLiBDYW4gSSB0cmlnZ2VyIGl0IGluIHNvbWV0aGluZyBsaWtlIEdDRSBvciBRRU1VPyBZZXMsIFFFTVUgZG9lcyBzdXBwb3J0IFJJU0MtViBLVk0sIGVpdGhlciB0aHJvdWdoIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBvciBydW5uaW5nIGl0IG9uIGFuIGFjdHVhbCBSSVNDLVYgaG9zdC4gU3l6a2FsbGVyIGNhbiBydW4gaW4gYSBSSVNDLVYgUUVNVSB3aXRoIEtWTSBlbmFibGVkLlxuXG5UaGUgcHJvbXB0IHNwZWNpZmllZCB0aGF0IEkgc2hvdWxkbid0IGNvbnNpZGVyIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRlZCBoYXJkd2FyZS4gS1ZNIGlzIHJlYWNoYWJsZSBoZXJlLiBOZXN0ZWQgdmlydHVhbGl6YXRpb24gd29ya3MuIE9yLCBpZiB3ZSBhcmUgcnVubmluZyBvbiBiYXJlLW1ldGFsLCBpdCdzIGZpbmUuIFFFTVUgYWxzbyBlbXVsYXRlcyBSSVNDLVYgd2l0aCBLVk0gc3VwcG9ydCwgc28gaXQncyBhbGwgZ29vZC4gU3l6a2FsbGVyIHJ1bnMgUUVNVSB3aXRoIEtWTSBlbmFibGVkIGlmIHRoZSBob3N0IHN1cHBvcnRzIGl0LCBidXQgY2FuIHRlc3QgS1ZNIHZpYSBgL2Rldi9rdm1gIGV2ZW4gaWYgdGhlIGhvc3QgZG9lc24ndCBoYXZlIGhhcmR3YXJlIEtWTS4gSW4gZmFjdCwgU3l6a2FsbGVyIGhlYXZpbHkgdGVzdHMgS1ZNIGluIGdlbmVyYWwuXG5cbk5vdywgdG8gbWFrZSBzdXJlLCBJIHdpbGwgY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyBmb3IgUklTQy1WIEtWTSwganVzdCB0byB2ZXJpZnkgaG93IGl0J3MgZW5hYmxlZC4gSSdsbCB1c2UgYGdyZXBwZXJgIHRvIGxvY2F0ZSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBzZXR0aW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg3NywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA4OjUyOjUwLjE2ODUxNTExOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjcwNzUxOTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTIxLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA4OjUyOjUwLjY5NTU5ODMwMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNDAzNDk0MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKktWTSBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBLVk1gIGNvbmZpZ3VyYXRpb24uIFRoZSBpbml0aWFsIHRob3VnaHQgaXMsIFwiT2theSwgYEtWTWAgaXMgdGhlIGNvbmZpZyBmaWxlIHRoYXQgbWFuYWdlcyB0aGUga2VybmVsLWJhc2VkIHZpcnR1YWwgbWFjaGluZSBzdXBwb3J0LCBnb3QgaXQuXCIgQnV0IGhvbGQgb24gYSBzZWNvbmQuLi4gaXMgdGhhdCByZWFsbHkgKmFsbCogdGhlcmUgaXMgdG8gaXQ/IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuXG5cbkknbSB0aGlua2luZywgXCJMZXQncyBkb3VibGUtY2hlY2sgdGhlIHNvdXJjZS5cIiBUaGUgZGVmaW5pdGl2ZSBwbGFjZSB0byB2ZXJpZnkgdGhlIHNjb3BlIG9mIHRoZSBLVk0gY29uZmlndXJhdGlvbiB3b3VsZCBiZSBpbiB0aGUgY29kZSBpdHNlbGYsIHJpZ2h0PyBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBsb29rIGF0IGBhcmNoL3Jpc2N2L2t2bS9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgZGV0YWlsZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBSSVNDLVYgS1ZNIGFyZSBsYWlkIG91dC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IHN1YnRsZSBkZXBlbmRlbmNpZXMsIG9yIHJlbGV2YW50IHN1Yi1vcHRpb25zIGJ5IG9ubHkgY29uc2lkZXJpbmcgdGhlIG5hbWUgb2YgdGhlIHRvcC1sZXZlbCBLVk0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyMjQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwODo1Mjo1NC4wMzU5NDk3NjZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3Jpc2N2L2t2bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBLVk0gY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRzb3VyY2UgXFxcInZpcnQva3ZtL0tjb25maWdcXFwiXFxuICAgNzpcXHRcXG4gICA4OlxcdG1lbnVjb25maWcgVklSVFVBTElaQVRJT05cXG4gICA5OlxcdFxcdGJvb2wgXFxcIlZpcnR1YWxpemF0aW9uXFxcIlxcbiAgMTA6XFx0XFx0aGVscFxcbiAgMTE6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGdldCB0byBzZWUgb3B0aW9ucyBmb3IgdXNpbmcgeW91ciBMaW51eCBob3N0IHRvIHJ1blxcbiAgMTI6XFx0XFx0ICBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcyBpbnNpZGUgdmlydHVhbCBtYWNoaW5lcyAoZ3Vlc3RzKS5cXG4gIDEzOlxcdFxcdCAgVGhpcyBvcHRpb24gYWxvbmUgZG9lcyBub3QgYWRkIGFueSBrZXJuZWwgY29kZS5cXG4gIDE0OlxcdFxcbiAgMTU6XFx0XFx0ICBJZiB5b3Ugc2F5IE4sIGFsbCBvcHRpb25zIGluIHRoaXMgc3VibWVudSB3aWxsIGJlIHNraXBwZWQgYW5kXFxuICAxNjpcXHRcXHQgIGRpc2FibGVkLlxcbiAgMTc6XFx0XFxuICAxODpcXHRpZiBWSVJUVUFMSVpBVElPTlxcbiAgMTk6XFx0XFxuICAyMDpcXHRjb25maWcgS1ZNXFxuICAyMTpcXHRcXHR0cmlzdGF0ZSBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcbiAgMjI6XFx0XFx0ZGVwZW5kcyBvbiBSSVNDVl9TQkkgXFx1MDAyNlxcdTAwMjYgTU1VXFxuICAyMzpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fSVJRQ0hJUFxcbiAgMjQ6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0lSUV9ST1VUSU5HXFxuICAyNTpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fTVNJXFxuICAyNjpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fUkVBRE9OTFlfTUVNXFxuICAyNzpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fRElSVFlfUklOR19BQ1FfUkVMXFxuICAyODpcXHRcXHRzZWxlY3QgS1ZNX0NPTU1PTlxcbiAgMjk6XFx0XFx0c2VsZWN0IEtWTV9HRU5FUklDX0RJUlRZTE9HX1JFQURfUFJPVEVDVFxcbiAgMzA6XFx0XFx0c2VsZWN0IEtWTV9HRU5FUklDX0hBUkRXQVJFX0VOQUJMSU5HXFxuICAzMTpcXHRcXHRzZWxlY3QgS1ZNX01NSU9cXG4gIDMyOlxcdFxcdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xcbiAgMzM6XFx0XFx0c2VsZWN0IFNDSEVEX0lORk9cXG4gIDM0OlxcdFxcdHNlbGVjdCBHVUVTVF9QRVJGX0VWRU5UUyBpZiBQRVJGX0VWRU5UU1xcbiAgMzU6XFx0XFx0aGVscFxcbiAgMzY6XFx0XFx0ICBTdXBwb3J0IGhvc3RpbmcgdmlydHVhbGl6ZWQgZ3Vlc3QgbWFjaGluZXMuXFxuICAzNzpcXHRcXG4gIDM4OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDM5OlxcdFxcbiAgNDA6XFx0ZW5kaWYgIyBWSVJUVUFMSVpBVElPTlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwODo1Mjo1NC4wMzYwNDc1NjZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjI2Njk5MzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLVk0gTWVtb3J5IE1hcHBpbmcqKlxuXG5Pa2F5LCBzbyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGlzIGNsZWFybHkgS1ZNLiBNeSBwcmltYXJ5IHRhcmdldHMgaGVyZSBhcmUgYHBmbm1hcF9tYXBwaW5nX3NpemVgIGFuZCBga3ZtX3Jpc2N2X21tdV9tYXBgLiBXYWl0IGEgc2Vjb25k4oCmIEkgc2VlIGBrdm1fcmlzY3ZfbW11X21hcGAgaGFzIGJlZW4gbW9kaWZpZWQgYW5kIGBwZm5tYXBfbWFwcGluZ19zaXplYCBoYXMgYmVlbiBhZGRlZC4gTXkgc3BpZGVyIHNlbnNlIGlzIHRpbmdsaW5nLCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc2lnbmlmaWNhbmNlIG9mIHRob3NlIGNoYW5nZXMsIGVzcGVjaWFsbHkgd2l0aCBga3ZtX3Jpc2N2X21tdV9tYXBgLlxuXG5SaWdodCwgbGV0J3MgZXN0YWJsaXNoIGlmIGBrdm1fcmlzY3ZfbW11X21hcGAgaXMgYSBwZXJmb3JtYW5jZS1jcml0aWNhbCBwYXRoLiBCaW5nbywgaXQncyBjYWxsZWQgZHVyaW5nIG1lbW9yeSBtYXBwaW5nIGZvciBLVk0gZ3Vlc3RzLiBBbmQgZnVydGhlciwgaXQncyBhY3R1YWxseSB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyICp3aXRoaW4qIEtWTS4gRGVmaW5pdGVseSBhIGhvdHNwb3QuIFNvLCB3aGVyZSBpcyB0aGlzIGhhbmRsZXIgdHJpZ2dlcmVkPyBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgZ3JhcGggbm93IHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIGFuZCBkZXRlcm1pbmUgaWYgdGhlIG1vZGlmaWNhdGlvbiBpbXByb3ZlcyBvciBkZWdyYWRlcyBwZXJmb3JtYW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjAwNCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA4OjUyOjU5LjI2Mjc0OTk1NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM3MTE0MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX3Jpc2N2X21tdV9tYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3Yva3ZtL21tdS5jPTQ0MD1zdGF0aWMgdW5zaWduZWQgbG9uZyBwZm5tYXBfbWFwcGluZ19zaXplKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTQ1MC1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYzo0NTE6aW50IGt2bV9yaXNjdl9tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy00NTItXFx0XFx0ICAgICAgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIGh2YSwgYm9vbCBpc193cml0ZSxcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfZXhpdC5jPTE1PXN0YXRpYyBpbnQgZ3N0YWdlX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqcnVuLFxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vdmNwdV9leGl0LmMtNDUtXFxuYXJjaC9yaXNjdi9rdm0vdmNwdV9leGl0LmM6NDY6XFx0cmV0ID0ga3ZtX3Jpc2N2X21tdV9tYXAodmNwdSwgbWVtc2xvdCwgZmF1bHRfYWRkciwgaHZhLFxcbmFyY2gvcmlzY3Yva3ZtL3ZjcHVfZXhpdC5jLTQ3LVxcdFxcdFxcdFxcdCh0cmFwLVxcdTAwM2VzY2F1c2UgPT0gRVhDX1NUT1JFX0dVRVNUX1BBR0VfRkFVTFQpID8gdHJ1ZSA6IGZhbHNlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwODo1Mjo1OS40MDY0NjgxMjJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzc0MzA1NjU0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUklTQy1WIEtWTSBQYWdlIEZhdWx0IEhhbmRsaW5nKipcblxuT2theSwgc28gdGhpcyBpcyB0cmlnZ2VyZWQgYnkgYGdzdGFnZV9wYWdlX2ZhdWx0YCwgdGhlIGd1ZXN0IHBhZ2UgZmF1bHQgaGFuZGxlci4gSXQncyBhIGhvdCBwYXRoLCBidXQgd2hhdCdzIGNoYW5nZWQgaXMgc3BlY2lmaWMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBwZm5tYXBfbWFwcGluZ19zaXplYCBhbmQgYGt2bV9yaXNjdl9tbXVfbWFwYC4gV2FpdCwgYHBmbm1hcF9tYXBwaW5nX3NpemVgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCBzbyBpdCdzIHByb2JhYmx5IGlubGluZWQuLi4gTGV0J3MgYWxzbyBjb25zaWRlciBgZmF1bHRfc3VwcG9ydHNfZ3N0YWdlX2h1Z2VfbWFwcGluZ2AsIHdoaWNoIHdhcyBhbHNvIG1vZGlmaWVkIGFuZCBpcyAqYWxzbyogc3RhdGljLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgYGt2bV9yaXNjdl9tbXVfbWFwYCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIG5ldyBsb2dpYy5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgdGhpcyBjb2RlIHBhdGguIElzIHRoZXJlIHNvbWV0aGluZyBpbiBwYXJ0aWN1bGFyIHRoYXQgSSBuZWVkIHRvIGVuYWJsZT8gQWgsIGBWTV9QRk5NQVBgIGlzIHJlbGF0ZWQgdG8gZGV2aWNlIG1lbW9yeSBtYXBwaW5nLCBsaWtlIFZGSU8uIE15IGludHVpdGlvbiB0ZWxscyBtZSBWRklPIGlzIHJlbGV2YW50IGhlcmUuIFRoZSBjb21tZW50cyBtZW50aW9uIFwiRGV0ZXJtaW5lIHRoZSBHLXN0YWdlIG1hcHBpbmcgc2l6ZSBmb3IgYSBWTV9QRk5NQVAgKGUuZy4gaG9zdCBkZXZpY2UgTU1JTykgZmF1bHQuXCIgVG8gdHJpZ2dlciB0aGlzLCB3ZSBuZWVkIGEgYFZNX1BGTk1BUGAgVk1BLiBUaGlzIGlzIGNyZWF0ZWQgYnkgbWFwcGluZyBkZXZpY2UgbWVtb3J5LCB3aGljaCBpcyBleGFjdGx5IHdoYXQgVkZJTyBhbmQgb3RoZXIgZHJpdmVycyB1c2luZyBgcmVtYXBfcGZuX3JhbmdlYCBkby4gU3l6a2FsbGVyIGNhbiBwcm9iYWJseSBtYXAgYC9kZXYva3ZtYCBvciBzaW1pbGFyIGRldmljZXMgdG8gc2V0IHVwIGBWTV9QRk5NQVBgIGFuZCBwYXNzIGl0IHRvIEtWTSBhcyBhIG1lbW9yeSBzbG90LiBTbyB0aGUga2V5IGNvbmZpZyBoZXJlIGlzIGBLVk1gLlxuXG5MZXQgbWUgZG91YmxlLWNoZWNrLi4uIFllcywgYEtWTWAgZW5hYmxlcyBgYXJjaC9yaXNjdi9rdm0vbW11LmNgLiBUaGUgcGF0Y2ggKmlzKiBpbiBgYXJjaC9yaXNjdi9rdm0vbW11LmNgLCB3aGljaCBtYWtlcyBpdCBSSVNDLVYgc3BlY2lmaWMuIEFuZCBTeXprYWxsZXIgZnV6emVzIFJJU0MtVi4uLiBwZXJmZWN0IVxuXG5TbywgdG8gc3VtbWFyaXplIGZvciBmdXp6aW5nOlxuXG4qICAgKipXb3J0aEZ1enppbmc6KiogQWJzb2x1dGVseSFcbiogICAqKkZvY3VzU3ltYm9sczoqKiBga3ZtX3Jpc2N2X21tdV9tYXBgICh0aGUgbWFpbiBmdW5jdGlvbiBvZiBpbnRlcmVzdCksIGBwZm5tYXBfbWFwcGluZ19zaXplYCAodGhlIG5ldywgaGVscGVyIGZ1bmN0aW9uKSwgYW5kIGBmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nYCAodGhlIG1vZGlmaWVkIGNoZWNrKS5cbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYEtWTWBcbiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFJJU0MtViBLVk0gTU1VIHBhZ2UgZmF1bHQgaGFuZGxlciB0byBzdXBwb3J0IGh1Z2UgcGFnZSBtYXBwaW5ncyAoUE1EX1NJWkUpIGZvciBkZXZpY2UgbWVtb3J5IChWTV9QRk5NQVApLiBUaGlzIHJlcHJlc2VudHMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSB2aXJ0dWFsaXphdGlvbiBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYywgYW5kIGFzIHN1Y2gsIGl0ICptdXN0KiBiZSBmdXp6ZWQgdG8gcHJldmVudCBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3IgaG9zdCBjcmFzaGVzIHJlc3VsdGluZyBmcm9tIG1hbGljaW91cyBvciBlZGdlLWNhc2UgZ3Vlc3QgcGFnZSBmYXVsdHMuXG5cbkknbSBzZXR0aW5nIGBrdm1fcmlzY3ZfbW11X21hcGAgYXMgdGhlIGNvcmUgc3ltYm9sLiBgcGZubWFwX21hcHBpbmdfc2l6ZWAgaXMgYSBuZXcgZnVuY3Rpb24gYW5kIGBmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nYCBpcyBhbHNvIG1vZGlmaWVkLiBJJ2xsIG1ha2Ugc3VyZSB0byBub3RlIGFsbCBvZiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjkxLCJPdXRwdXRUb2tlbnMiOjE0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwODo1MzoxNy4xNDk1MjcxNjlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDUxNTkzMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9yaXNjdl9tbXVfbWFwXCIsXG4gICAgXCJwZm5tYXBfbWFwcGluZ19zaXplXCIsXG4gICAgXCJmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEtWTSBNTVUgcGFnZSBmYXVsdCBoYW5kbGVyIG9uIFJJU0MtViB0byBzdXBwb3J0IGh1Z2UgcGFnZSBtYXBwaW5ncyAoUE1EX1NJWkUpIGZvciBkZXZpY2UgbWVtb3J5IChWTV9QRk5NQVApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgdmlydHVhbGl6YXRpb24gbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGRvZXNuJ3QgaW50cm9kdWNlIG1lbW9yeSBjb3JydXB0aW9uIG9yIGhvc3QgY3Jhc2hlcyB3aGVuIGhhbmRsaW5nIG1hbGljaW91cyBvciBlZGdlLWNhc2UgZ3Vlc3QgcGFnZSBmYXVsdHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3Jpc2N2X21tdV9tYXBcIixcbiAgICBcInBmbm1hcF9tYXBwaW5nX3NpemVcIixcbiAgICBcImZhdWx0X3N1cHBvcnRzX2dzdGFnZV9odWdlX21hcHBpbmdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgS1ZNIE1NVSBwYWdlIGZhdWx0IGhhbmRsZXIgb24gUklTQy1WIHRvIHN1cHBvcnQgaHVnZSBwYWdlIG1hcHBpbmdzIChQTURfU0laRSkgZm9yIGRldmljZSBtZW1vcnkgKFZNX1BGTk1BUCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSB2aXJ0dWFsaXphdGlvbiBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgZG9lc24ndCBpbnRyb2R1Y2UgbWVtb3J5IGNvcnJ1cHRpb24gb3IgaG9zdCBjcmFzaGVzIHdoZW4gaGFuZGxpbmcgbWFsaWNpb3VzIG9yIGVkZ2UtY2FzZSBndWVzdCBwYWdlIGZhdWx0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow8pnjt[1] Phase: Succeeded StartedAt: 2026-07-10 08:53:28 +0000 UTC FinishedAt: 2026-07-10 08:53:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8pnjt[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-10 08:53:28 +0000 UTC FinishedAt: 2026-07-10 08:53:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8pnjt[2] Phase: Succeeded StartedAt: 2026-07-10 08:53:28 +0000 UTC FinishedAt: 2026-07-10 10:24:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8pnjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_mmu_map","pfnmap_mapping_size","fault_supports_gstage_huge_mapping"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"b1adc879-2d0c-41c5-9b18-8ecb507cd2e9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-10 08:53:28 +0000 UTC FinishedAt: 2026-07-10 10:24:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_mmu_map","pfnmap_mapping_size","fault_supports_gstage_huge_mapping"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"b1adc879-2d0c-41c5-9b18-8ecb507cd2e9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8pnjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_mmu_map","pfnmap_mapping_size","fault_supports_gstage_huge_mapping"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"b1adc879-2d0c-41c5-9b18-8ecb507cd2e9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-10 08:53:28 +0000 UTC FinishedAt: 2026-07-10 08:53:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8pnjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_mmu_map","pfnmap_mapping_size","fault_supports_gstage_huge_mapping"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"b1adc879-2d0c-41c5-9b18-8ecb507cd2e9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-10 08:53:28 +0000 UTC FinishedAt: 2026-07-10 08:53:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflow8pnjt/series-workflow8pnjt-convert-artifact-1701214821/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8pnjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_mmu_map","pfnmap_mapping_size","fault_supports_gstage_huge_mapping"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"b1adc879-2d0c-41c5-9b18-8ecb507cd2e9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-10 08:53:38 +0000 UTC FinishedAt: 2026-07-10 09:36:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8pnjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_mmu_map","pfnmap_mapping_size","fault_supports_gstage_huge_mapping"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"b1adc879-2d0c-41c5-9b18-8ecb507cd2e9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-10 08:53:38 +0000 UTC FinishedAt: 2026-07-10 09:36:11 +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:*73700ab7-2a5b-4e94-b0ac-fb9ef0a8c93d,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-workflow8pnjt/series-workflow8pnjt-convert-artifact-1701214821/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": "5e2f3a42-a8ca-4a82-8827-58085602eb7d", "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-workflow8pnjt/series-workflow8pnjt-build-action-2481550987/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8pnjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_mmu_map","pfnmap_mapping_size","fault_supports_gstage_huge_mapping"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"b1adc879-2d0c-41c5-9b18-8ecb507cd2e9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-10 08:53:38 +0000 UTC FinishedAt: 2026-07-10 09:36:01 +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:*73700ab7-2a5b-4e94-b0ac-fb9ef0a8c93d,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-workflow8pnjt/series-workflow8pnjt-convert-artifact-1701214821/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": "5e2f3a42-a8ca-4a82-8827-58085602eb7d", "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-workflow8pnjt/series-workflow8pnjt-build-action-2481550987/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8pnjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_mmu_map","pfnmap_mapping_size","fault_supports_gstage_huge_mapping"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"b1adc879-2d0c-41c5-9b18-8ecb507cd2e9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-10 09:36:11 +0000 UTC FinishedAt: 2026-07-10 09:36:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8pnjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_mmu_map","pfnmap_mapping_size","fault_supports_gstage_huge_mapping"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"b1adc879-2d0c-41c5-9b18-8ecb507cd2e9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-10 09:36:11 +0000 UTC FinishedAt: 2026-07-10 09:36:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8pnjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_mmu_map","pfnmap_mapping_size","fault_supports_gstage_huge_mapping"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"b1adc879-2d0c-41c5-9b18-8ecb507cd2e9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-10 09:36:11 +0000 UTC FinishedAt: 2026-07-10 09:36:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8pnjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_mmu_map","pfnmap_mapping_size","fault_supports_gstage_huge_mapping"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"b1adc879-2d0c-41c5-9b18-8ecb507cd2e9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-10 09:36:11 +0000 UTC FinishedAt: 2026-07-10 09:36:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"b1adc879-2d0c-41c5-9b18-8ecb507cd2e9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflow8pnjt/series-workflow8pnjt-convert-artifact-3155407680/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8pnjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_mmu_map","pfnmap_mapping_size","fault_supports_gstage_huge_mapping"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"b1adc879-2d0c-41c5-9b18-8ecb507cd2e9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-10 09:36:32 +0000 UTC FinishedAt: 2026-07-10 09:38:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8pnjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_mmu_map","pfnmap_mapping_size","fault_supports_gstage_huge_mapping"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"b1adc879-2d0c-41c5-9b18-8ecb507cd2e9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-10 09:36:32 +0000 UTC FinishedAt: 2026-07-10 09:38:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5e2f3a42-a8ca-4a82-8827-58085602eb7d,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-workflow8pnjt/series-workflow8pnjt-build-action-2481550987/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-workflow8pnjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_mmu_map","pfnmap_mapping_size","fault_supports_gstage_huge_mapping"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"b1adc879-2d0c-41c5-9b18-8ecb507cd2e9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-10 09:38:20 +0000 UTC FinishedAt: 2026-07-10 09:38:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8pnjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_mmu_map","pfnmap_mapping_size","fault_supports_gstage_huge_mapping"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"b1adc879-2d0c-41c5-9b18-8ecb507cd2e9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-10 09:38:20 +0000 UTC FinishedAt: 2026-07-10 09:38:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8pnjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_mmu_map","pfnmap_mapping_size","fault_supports_gstage_huge_mapping"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"b1adc879-2d0c-41c5-9b18-8ecb507cd2e9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-10 09:38:20 +0000 UTC FinishedAt: 2026-07-10 10:19:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8pnjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_mmu_map","pfnmap_mapping_size","fault_supports_gstage_huge_mapping"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"b1adc879-2d0c-41c5-9b18-8ecb507cd2e9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-10 09:38:20 +0000 UTC FinishedAt: 2026-07-10 10:19:35 +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:*73700ab7-2a5b-4e94-b0ac-fb9ef0a8c93d,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-workflow8pnjt/series-workflow8pnjt-convert-artifact-3155407680/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": "4bc0168d-d57c-4996-9f50-4393b5446928", "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-workflow8pnjt/series-workflow8pnjt-build-action-179249404/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8pnjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_mmu_map","pfnmap_mapping_size","fault_supports_gstage_huge_mapping"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"b1adc879-2d0c-41c5-9b18-8ecb507cd2e9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-10 09:38:20 +0000 UTC FinishedAt: 2026-07-10 10:19:25 +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:*73700ab7-2a5b-4e94-b0ac-fb9ef0a8c93d,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-workflow8pnjt/series-workflow8pnjt-convert-artifact-3155407680/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": "4bc0168d-d57c-4996-9f50-4393b5446928", "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-workflow8pnjt/series-workflow8pnjt-build-action-179249404/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8pnjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_mmu_map","pfnmap_mapping_size","fault_supports_gstage_huge_mapping"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"b1adc879-2d0c-41c5-9b18-8ecb507cd2e9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-10 10:19:35 +0000 UTC FinishedAt: 2026-07-10 10:19:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8pnjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_mmu_map","pfnmap_mapping_size","fault_supports_gstage_huge_mapping"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"b1adc879-2d0c-41c5-9b18-8ecb507cd2e9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-10 10:19:35 +0000 UTC FinishedAt: 2026-07-10 10:19:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8pnjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_mmu_map","pfnmap_mapping_size","fault_supports_gstage_huge_mapping"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"b1adc879-2d0c-41c5-9b18-8ecb507cd2e9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-10 10:19:35 +0000 UTC FinishedAt: 2026-07-10 10:21:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8pnjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_mmu_map","pfnmap_mapping_size","fault_supports_gstage_huge_mapping"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"b1adc879-2d0c-41c5-9b18-8ecb507cd2e9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-10 10:19:35 +0000 UTC FinishedAt: 2026-07-10 10:21:21 +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:*4bc0168d-d57c-4996-9f50-4393b5446928,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-workflow8pnjt/series-workflow8pnjt-build-action-179249404/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-workflow8pnjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_mmu_map","pfnmap_mapping_size","fault_supports_gstage_huge_mapping"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"b1adc879-2d0c-41c5-9b18-8ecb507cd2e9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-10 10:21:30 +0000 UTC FinishedAt: 2026-07-10 10:24:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8pnjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_mmu_map","pfnmap_mapping_size","fault_supports_gstage_huge_mapping"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"b1adc879-2d0c-41c5-9b18-8ecb507cd2e9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-10 10:21:30 +0000 UTC FinishedAt: 2026-07-10 10:24:17 +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":["kvm_riscv_mmu_map","pfnmap_mapping_size","fault_supports_gstage_huge_mapping"],"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:*5e2f3a42-a8ca-4a82-8827-58085602eb7d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4bc0168d-d57c-4996-9f50-4393b5446928,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-workflow8pnjt/series-workflow8pnjt-build-action-2481550987/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-workflow8pnjt/series-workflow8pnjt-build-action-179249404/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8pnjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_mmu_map","pfnmap_mapping_size","fault_supports_gstage_huge_mapping"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"b1adc879-2d0c-41c5-9b18-8ecb507cd2e9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-10 10:21:30 +0000 UTC FinishedAt: 2026-07-10 10:21:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8pnjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_mmu_map","pfnmap_mapping_size","fault_supports_gstage_huge_mapping"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"b1adc879-2d0c-41c5-9b18-8ecb507cd2e9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-10 10:21:30 +0000 UTC FinishedAt: 2026-07-10 10:21:46 +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":["kvm_riscv_mmu_map","pfnmap_mapping_size","fault_supports_gstage_huge_mapping"],"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-workflow8pnjt/series-workflow8pnjt-convert-artifact-2864673433/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8pnjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_mmu_map","pfnmap_mapping_size","fault_supports_gstage_huge_mapping"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"b1adc879-2d0c-41c5-9b18-8ecb507cd2e9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-10 10:21:30 +0000 UTC FinishedAt: 2026-07-10 10:21:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8pnjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_mmu_map","pfnmap_mapping_size","fault_supports_gstage_huge_mapping"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"b1adc879-2d0c-41c5-9b18-8ecb507cd2e9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-10 10:21:30 +0000 UTC FinishedAt: 2026-07-10 10:21:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8pnjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_mmu_map","pfnmap_mapping_size","fault_supports_gstage_huge_mapping"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"b1adc879-2d0c-41c5-9b18-8ecb507cd2e9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-10 10:21:30 +0000 UTC FinishedAt: 2026-07-10 10:21:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8pnjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_mmu_map","pfnmap_mapping_size","fault_supports_gstage_huge_mapping"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"b1adc879-2d0c-41c5-9b18-8ecb507cd2e9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-10 10:21:54 +0000 UTC FinishedAt: 2026-07-10 10:24:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8pnjt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_riscv_mmu_map","pfnmap_mapping_size","fault_supports_gstage_huge_mapping"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b6eb022890c78285f55381589c1536bd66b8eaeb","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"b1adc879-2d0c-41c5-9b18-8ecb507cd2e9","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-10 10:21:54 +0000 UTC FinishedAt: 2026-07-10 10:23:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5e2f3a42-a8ca-4a82-8827-58085602eb7d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4bc0168d-d57c-4996-9f50-4393b5446928,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-workflow8pnjt/series-workflow8pnjt-build-action-2481550987/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-workflow8pnjt/series-workflow8pnjt-build-action-179249404/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-workflow8pnjt/series-workflow8pnjt-convert-artifact-2864673433/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,}