Name: series-workflowqtlj6 Phase: Succeeded StartedAt: 2026-07-10 15:30:11 +0000 UTC FinishedAt: 2026-07-10 20:19:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtlj6[0] Phase: Succeeded StartedAt: 2026-07-10 15:30:11 +0000 UTC FinishedAt: 2026-07-10 16:02:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtlj6[0].run-triage Phase: Succeeded StartedAt: 2026-07-10 15:30:11 +0000 UTC FinishedAt: 2026-07-10 16:02:10 +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": "a635d6748234582ea287c5ffeae28b9b23f91c7e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "FS_ENCRYPTION", "UNICODE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "a635d6748234582ea287c5ffeae28b9b23f91c7e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "FS_ENCRYPTION", "UNICODE" ], "series_id": "35e0713a-2b9c-457a-abe6-25cfa88bab78" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_search_dir" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE1OjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7RlNfRU5DUllQVElPTiYjMzQ7LAogICAgJiMzNDtVTklDT0RFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9zZWFyY2hfZGlyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gZXh0NF9zZWFyY2hfZGlyIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd2hlbiBleHQ0X2hhc2hfaW5fZGlyZW50IGlzIHRydWUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGV4dDQgZGlyZWN0b3J5IHNlYXJjaGluZyBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4gVGhlIGV4dDRfaGFzaF9pbl9kaXJlbnQgZnVuY3Rpb24gcmVxdWlyZXMgY2FzZWZvbGRpbmcgYW5kIGVuY3J5cHRpb24gdG8gYmUgZW5hYmxlZCwgc28gd2UgbmVlZCBFWFQ0X0ZTLCBGU19FTkNSWVBUSU9OLCBhbmQgVU5JQ09ERSBjb25maWdzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE1OjU4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMGI1Y2E3NTJmYjFmODM3MTk4NTA2ZDJjNDk2ZGQ5YzhmNThkMTM3ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDEwIDE1OjU4OjU0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbmFtZWkuYyBiL2ZzL2V4dDQvbmFtZWkuY1xuaW5kZXggY2M0OWFlMDRhNmY2NDkuLjNiOTc0MGMxYzE2ZDhjIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9uYW1laS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L25hbWVpLmNcbkBAIC0xNDY3LDYgJiM0MzsxNDY3LDggQEAgaW50IGV4dDRfc2VhcmNoX2RpcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBjaGFyICpzZWFyY2hfYnVmLCBpbnQgYnVmX3NpemUsXG4gXHRcdC8qIHRoaXMgY29kZSBpcyBleGVjdXRlZCBxdWFkcmF0aWNhbGx5IG9mdGVuICovXG4gXHRcdC8qIGRvIG1pbmltYWwgY2hlY2tpbmcgYGJ5IGhhbmQmIzM5OyAqL1xuIFx0XHRpZiAoZGUtXHUwMDNlbmFtZSAmIzQzOyBkZS1cdTAwM2VuYW1lX2xlbiBcdTAwM2M9IGRsaW1pdCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAoIWV4dDRfaGFzaF9pbl9kaXJlbnQoZGlyKSB8fFxuJiM0MztcdFx0ICAgICAoY2hhciAqKWRlICYjNDM7IGV4dDRfZGlyX3JlY19sZW4oZGUtXHUwMDNlbmFtZV9sZW4sIGRpcikgXHUwMDNjPSBkbGltaXQpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgZXh0NF9tYXRjaChkaXIsIGZuYW1lLCBkZSkpIHtcbiBcdFx0XHQvKiBmb3VuZCBhIG1hdGNoIC0ganVzdCB0byBiZSBzdXJlLCBkb1xuIFx0XHRcdCAqIGEgZnVsbCBjaGVjayAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE1OjU4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7RlNfRU5DUllQVElPTiYjMzQ7LAogICAgJiMzNDtVTklDT0RFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9zZWFyY2hfZGlyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gZXh0NF9zZWFyY2hfZGlyIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd2hlbiBleHQ0X2hhc2hfaW5fZGlyZW50IGlzIHRydWUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGV4dDQgZGlyZWN0b3J5IHNlYXJjaGluZyBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4gVGhlIGV4dDRfaGFzaF9pbl9kaXJlbnQgZnVuY3Rpb24gcmVxdWlyZXMgY2FzZWZvbGRpbmcgYW5kIGVuY3J5cHRpb24gdG8gYmUgZW5hYmxlZCwgc28gd2UgbmVlZCBFWFQ0X0ZTLCBGU19FTkNSWVBUSU9OLCBhbmQgVU5JQ09ERSBjb25maWdzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwYjVjYTc1MmZiMWY4MzcxOTg1MDZkMmM0OTZkZDljOGY1OGQxMzdkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMTAgMTU6NTg6NTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leHQ0L25hbWVpLmMgYi9mcy9leHQ0L25hbWVpLmMKaW5kZXggY2M0OWFlMDRhNmY2NDkuLjNiOTc0MGMxYzE2ZDhjIDEwMDY0NAotLS0gYS9mcy9leHQ0L25hbWVpLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9uYW1laS5jCkBAIC0xNDY3LDYgJiM0MzsxNDY3LDggQEAgaW50IGV4dDRfc2VhcmNoX2RpcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBjaGFyICpzZWFyY2hfYnVmLCBpbnQgYnVmX3NpemUsCiAJCS8qIHRoaXMgY29kZSBpcyBleGVjdXRlZCBxdWFkcmF0aWNhbGx5IG9mdGVuICovCiAJCS8qIGRvIG1pbmltYWwgY2hlY2tpbmcgYGJ5IGhhbmQmIzM5OyAqLwogCQlpZiAoZGUtJmd0O25hbWUgJiM0MzsgZGUtJmd0O25hbWVfbGVuICZsdDs9IGRsaW1pdCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKCFleHQ0X2hhc2hfaW5fZGlyZW50KGRpcikgfHwKJiM0MzsJCSAgICAgKGNoYXIgKilkZSAmIzQzOyBleHQ0X2Rpcl9yZWNfbGVuKGRlLSZndDtuYW1lX2xlbiwgZGlyKSAmbHQ7PSBkbGltaXQpICZhbXA7JmFtcDsKIAkJICAgIGV4dDRfbWF0Y2goZGlyLCBmbmFtZSwgZGUpKSB7CiAJCQkvKiBmb3VuZCBhIG1hdGNoIC0ganVzdCB0byBiZSBzdXJlLCBkbwogCQkJICogYSBmdWxsIGNoZWNrICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE1OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4ODUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBleHQ0IERpcmVjdG9yeSBTZWFyY2ggUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBmcy9leHQ0L25hbWVpLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGNoYW5nZXMgaW4gYGV4dDRfc2VhcmNoX2RpcmAuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3ZlIGFkZGVkIGEgY2hlY2sgd2l0aGluIHRoZSBgaWZgIHN0YXRlbWVudCB0byBoYW5kbGUgYSBzY2VuYXJpbyByZWxhdGVkIHRvIGRpcmVjdG9yeSBlbnRyeSBoYXNoaW5nLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIHRoaXM6CgpgYGBjCiAJCWlmIChkZS0mZ3Q7bmFtZSAmIzQzOyBkZS0mZ3Q7bmFtZV9sZW4gJmx0Oz0gZGxpbWl0ICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoIWV4dDRfaGFzaF9pbl9kaXJlbnQoZGlyKSB8fAomIzQzOwkJICAgICAoY2hhciAqKWRlICYjNDM7IGV4dDRfZGlyX3JlY19sZW4oZGUtJmd0O25hbWVfbGVuLCBkaXIpICZsdDs9IGRsaW1pdCkgJmFtcDsmYW1wOwogCQkgICAgZXh0NF9tYXRjaChkaXIsIGZuYW1lLCBkZSkpIHsKYGBgCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24gdG8gdGhlIGV4dDQgZGlyZWN0b3J5IHNlYXJjaGluZyBsb2dpYy4gVGhlIGV4dHJhIGNvbmRpdGlvbiBpcyB0byBwcm90ZWN0IGFnYWluc3QgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgb3Igb3RoZXIgbWVtb3J5IGFjY2VzcyBlcnJvcnMuIFRoZSBhZGRpdGlvbiBjaGVja3MgdG8gc2VlIGlmICBgZXh0NF9oYXNoX2luX2RpcmVudChkaXIpYCBpcyB0cnVlLiBJZiBpdCBpcywgdGhlIGNvZGUgbWFrZXMgc3VyZSB0aGF0IGBkZSAmIzQzOyBleHQ0X2Rpcl9yZWNfbGVuKGRlLSZndDtuYW1lX2xlbiwgZGlyKWAgc3RheXMgd2l0aGluIHRoZSBkaXJlY3RvcnkmIzM5O3MgYm91bmRzLCBzcGVjaWZpY2FsbHkgdXAgdG8gYGRsaW1pdGAuIFRoaXMgaXMgYSBzZW5zaWJsZSBwcmVjYXV0aW9uLCBsaWtlbHkgYWRkcmVzc2luZyBhIHByZXZpb3VzbHkgdW5oYW5kbGVkIGVkZ2UgY2FzZSBvciB2dWxuZXJhYmlsaXR5IHdoZW4gZGVhbGluZyB3aXRoIGhhc2hlZCBkaXJlY3RvcnkgZW50cmllcy4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgZXh0NF9zZWFyY2hfZGlyYCBhbmQgdGhlIGBleHQ0X2hhc2hfaW5fZGlyZW50YCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBwcmVjaXNlIGNvbnRleHQgYW5kIHdoYXQga2luZCBvZiBwcm9ibGVtIHRoaXMgZml4ZXMuIEkgd2lsbCBhbHNvIGhhdmUgdG8gbG9vayBmb3IgYW55IGltcGFjdCBvbiBwZXJmb3JtYW5jZSwgb3Igb3RoZXIgcGFydHMgb2YgdGhlIGNvZGViYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE1OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfc2VhcmNoX2RpciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvbmFtZWkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L25hbWVpLmM9MTI2Mj1zdGF0aWMgaW5saW5lIGludCBzZWFyY2hfZGlyYmxvY2soc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcbi0tXG5mcy9leHQ0L25hbWVpLmMtMTI2Ny17XG5mcy9leHQ0L25hbWVpLmM6MTI2ODpcdHJldHVybiBleHQ0X3NlYXJjaF9kaXIoYmgsIGJoLVx1MDAzZWJfZGF0YSwgZGlyLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUsIGRpcixcbmZzL2V4dDQvbmFtZWkuYy0xMjY5LVx0XHRcdCAgICAgICBmbmFtZSwgb2Zmc2V0LCByZXNfZGlyKTtcbi0tXG5mcy9leHQ0L25hbWVpLmM9MTQwNT1zdGF0aWMgYm9vbCBleHQ0X21hdGNoKHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuLS1cbmZzL2V4dDQvbmFtZWkuYy0xNDU1LSAqL1xuZnMvZXh0NC9uYW1laS5jOjE0NTY6aW50IGV4dDRfc2VhcmNoX2RpcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBjaGFyICpzZWFyY2hfYnVmLCBpbnQgYnVmX3NpemUsXG5mcy9leHQ0L25hbWVpLmMtMTQ1Ny1cdFx0ICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZXh0NF9maWxlbmFtZSAqZm5hbWUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTU6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcxOAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlIHdoYXQgSSBjYW4gZ2F0aGVyIGZyb20gdGhpcy4KCioqVHJhY2luZyB0aGUgVXNhZ2Ugb2YgZXh0NF9zZWFyY2hfZGlyKioKClJpZ2h0LCBzbyB0aGUgYGV4dDRfc2VhcmNoX2RpcmAgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGBzZWFyY2hfZGlyYmxvY2tgIGFuZCBwb3NzaWJseSBieSBvdGhlciBmdW5jdGlvbnMsIHRvby4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHNjb3BlIG9mIGhvdyBgZXh0NF9zZWFyY2hfZGlyYCBpcyBiZWluZyB1c2VkIHdpdGhpbiB0aGUgZXh0NCBmaWxlc3lzdGVtIGNvZGUuIEtub3dpbmcgdGhhdCBgc2VhcmNoX2RpcmJsb2NrYCBjYWxscyBpdCBpcyBhIHN0YXJ0aW5nIHBvaW50LCBidXQgSSBuZWVkIHRvIGtub3cgdGhlICplbnRpcmUqIGNhbGwgZ3JhcGguIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IGFsbCB0aGUgcG9pbnRzIGluIHRoZSBjb2RlIHdoZXJlIGl0JiMzOTtzIGludm9rZWQuIFRoaXMgaXMgd2hlcmUgYSBnb29kIGNyb3NzLXJlZmVyZW5jZSB0b29sIG9yIGRlYnVnZ2VyIGlzIGludmFsdWFibGUuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxlcnMgd2lsbCBpbGx1bWluYXRlIGhvdyB0aGUgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIGRpcmVjdG9yeSBsb29rdXAgcHJvY2VzcyBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgaXQgaGFzIGZvciBwZXJmb3JtYW5jZSBhbmQgY29ycmVjdG5lc3MuIFRpbWUgdG8gaW52ZXN0aWdhdGUgZnVydGhlciBhbmQgc2VlIHdoZXJlIGVsc2UgaXQmIzM5O3MgYmVpbmcgdXNlZC4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X3NlYXJjaF9kaXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2V4dDQuaD0zMjM4PWV4dGVybiBpbnQgZXh0NF9odHJlZV9maWxsX3RyZWUoc3RydWN0IGZpbGUgKmRpcl9maWxlLCBfX3UzMiBzdGFydF9oYXNoLFxuZnMvZXh0NC9leHQ0LmgtMzIzOS1cdFx0XHRcdF9fdTMyIHN0YXJ0X21pbm9yX2hhc2gsIF9fdTMyICpuZXh0X2hhc2gpO1xuZnMvZXh0NC9leHQ0Lmg6MzI0MDpleHRlcm4gaW50IGV4dDRfc2VhcmNoX2RpcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxuZnMvZXh0NC9leHQ0LmgtMzI0MS1cdFx0XHQgICBjaGFyICpzZWFyY2hfYnVmLFxuLS1cbmZzL2V4dDQvaW5saW5lLmM9MTU5Mj1zdHJ1Y3QgYnVmZmVyX2hlYWQgKmV4dDRfZmluZF9pbmxpbmVfZW50cnkoc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xNjI1LVx0aW5saW5lX3NpemUgPSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFIC0gRVhUNF9JTkxJTkVfRE9URE9UX1NJWkU7XG5mcy9leHQ0L2lubGluZS5jOjE2MjY6XHRyZXQgPSBleHQ0X3NlYXJjaF9kaXIoaXMuaWxvYy5iaCwgaW5saW5lX3N0YXJ0LCBpbmxpbmVfc2l6ZSxcbmZzL2V4dDQvaW5saW5lLmMtMTYyNy1cdFx0XHQgICAgICBkaXIsIGZuYW1lLCAwLCByZXNfZGlyKTtcbi0tXG5mcy9leHQ0L2lubGluZS5jLTE2MzgtXG5mcy9leHQ0L2lubGluZS5jOjE2Mzk6XHRyZXQgPSBleHQ0X3NlYXJjaF9kaXIoaXMuaWxvYy5iaCwgaW5saW5lX3N0YXJ0LCBpbmxpbmVfc2l6ZSxcbmZzL2V4dDQvaW5saW5lLmMtMTY0MC1cdFx0XHQgICAgICBkaXIsIGZuYW1lLCAwLCByZXNfZGlyKTtcbi0tXG5mcy9leHQ0L25hbWVpLmM9MTI2Mj1zdGF0aWMgaW5saW5lIGludCBzZWFyY2hfZGlyYmxvY2soc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcbi0tXG5mcy9leHQ0L25hbWVpLmMtMTI2Ny17XG5mcy9leHQ0L25hbWVpLmM6MTI2ODpcdHJldHVybiBleHQ0X3NlYXJjaF9kaXIoYmgsIGJoLVx1MDAzZWJfZGF0YSwgZGlyLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUsIGRpcixcbmZzL2V4dDQvbmFtZWkuYy0xMjY5LVx0XHRcdCAgICAgICBmbmFtZSwgb2Zmc2V0LCByZXNfZGlyKTtcbi0tXG5mcy9leHQ0L25hbWVpLmM9MTQwNT1zdGF0aWMgYm9vbCBleHQ0X21hdGNoKHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuLS1cbmZzL2V4dDQvbmFtZWkuYy0xNDU1LSAqL1xuZnMvZXh0NC9uYW1laS5jOjE0NTY6aW50IGV4dDRfc2VhcmNoX2RpcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBjaGFyICpzZWFyY2hfYnVmLCBpbnQgYnVmX3NpemUsXG5mcy9leHQ0L25hbWVpLmMtMTQ1Ny1cdFx0ICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZXh0NF9maWxlbmFtZSAqZm5hbWUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTU6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYwNgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gZnV6emluZyBgZXh0NF9zZWFyY2hfZGlyYC4KCioqRnV6emluZyB0aGUgZXh0NCBEaXJlY3RvcnkgU2VhcmNoKioKCkFscmlnaHQsIHNvIGBleHQ0X3NlYXJjaF9kaXJgIGlzIHRoZSBrZXkgZnVuY3Rpb24gd2l0aGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0gdGhhdCBoYW5kbGVzIHNlYXJjaGluZyBkaXJlY3Rvcmllcy4gQ29uc2lkZXJpbmcgaXRzIHJvbGUgaW4gZGlyZWN0b3J5IHRyYXZlcnNhbCwgaXQmIzM5O3MgcHJhY3RpY2FsbHkgc2NyZWFtaW5nIGZvciBhIGZ1enppbmcgY2FtcGFpZ24uIFRoaXMgZmVlbHMgbGlrZSBhIGhpZ2gtdmFsdWUgdGFyZ2V0LiBNeSBmb2N1cyBpcyBsYXNlci10YXJnZXRlZCBvbiB0aGUgYGV4dDRfc2VhcmNoX2RpcmAgc3ltYm9sIGl0c2VsZi4KCk5vdywgYmVmb3JlIEkgZGl2ZSBpbiBoZWFkZmlyc3QsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIGFsbCB0aGUgbmVjZXNzYXJ5IHB1enpsZSBwaWVjZXMuIFRoZSBgRVhUNF9GU2AgY29uZmlnIGlzIGRlZmluaXRlbHkgaW4gcGxheSwgYnV0IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhlcmUgbWlnaHQgYmUgc29tZSBsZXNzIG9idmlvdXMgZGVwZW5kZW5jaWVzIGx1cmtpbmcgYXJvdW5kIHRoYXQgY2FuIHRyaXAgdXAgdGhlIGZ1enppbmcgcHJvY2VzcyBsYXRlci4gSSBuZWVkIHRvIHRha2UgYSBxdWljayBsb29rIHRvIGlkZW50aWZ5IGFueSBvdGhlciBwb3RlbnRpYWxseSByZWxldmFudCBjb25maWd1cmF0aW9ucyBvciBwcmUtY29uZGl0aW9ucyB0aGF0IG5lZWQgdG8gYmUgbWV0LiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIGV2ZW4gYmUgcmVhY2hlZCB3aXRoIHRoZSBzdGFuZGFyZCBjb25maWdzLiBJJiMzOTtsbCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGRlcGVuZGVudCBmZWF0dXJlcyB0aGF0IGFyZSByZXF1aXJlZCwgYnV0IGNvdWxkIGJlIGRpc2FibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE1OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFWFQ0X0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcbmZzL2V4dDQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7VGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWc9MzU9Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXG4tLVxuZnMvZXh0NC9LY29uZmlnLTQ1LVxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxuZnMvZXh0NC9LY29uZmlnLTQ3LVx0Ym9vbCBcJiMzNDtFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnLTU1LVxuZnMvZXh0NC9LY29uZmlnOjU2OmNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXG5mcy9leHQ0L0tjb25maWctNTctXHRib29sIFwmIzM0O0V4dDQgU2VjdXJpdHkgTGFiZWxzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTU6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg1MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgZXh0NF9zZWFyY2hfZGlyYCBNb2RpZmljYXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0d2Vha2luZyBgZXh0NF9zZWFyY2hfZGlyYCB3aXRoaW4gYGZzL2V4dDQvbmFtZWkuY2AuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWRkaW5nIGEgY3J1Y2lhbCBib3VuZHMgY2hlY2sgd2l0aGluIHRoZSBkaXJlY3Rvcnkgc2VhcmNoaW5nIGxvZ2ljLCByaWdodCBoZXJlOgoKYGBgYwoJCWlmIChkZS0mZ3Q7bmFtZSAmIzQzOyBkZS0mZ3Q7bmFtZV9sZW4gJmx0Oz0gZGxpbWl0ICZhbXA7JmFtcDsKCQkgICAgKCFleHQ0X2hhc2hfaW5fZGlyZW50KGRpcikgfHwKCQkgICAgIChjaGFyICopZGUgJiM0MzsgZXh0NF9kaXJfcmVjX2xlbihkZS0mZ3Q7bmFtZV9sZW4sIGRpcikgJmx0Oz0gZGxpbWl0KSAmYW1wOyZhbXA7CgkJICAgIGV4dDRfbWF0Y2goZGlyLCBmbmFtZSwgZGUpKSB7CmBgYAoKTXkgaW5pdGlhbCB0aG91Z2h0PyBUaGlzIGlzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSB0byBob3cgd2Ugc2VhcmNoIGV4dDQgZGlyZWN0b3JpZXMuIFRoZSBhZGRlZCBjaGVjayBzZWVtcyB0byBzcGVjaWZpY2FsbHkgcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHNpbWlsYXIgdnVsbmVyYWJpbGl0aWVzIHdoZW4gdGhlIGBleHQ0X2hhc2hfaW5fZGlyZW50KGRpcilgIGNvbmRpdGlvbiBpcyBtZXQuIFRoaXMgaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIHRoaW5nIHRoYXQgY2FuIGxlYWQgdG8gc3VidGxlIGJ1dCBleHBsb2l0YWJsZSBpc3N1ZXMgaW4gYSBmaWxlIHN5c3RlbS4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgbW9kaWZpY2F0aW9ucyB0byBkaXJlY3Rvcnkgc2VhcmNoaW5nLCBhbmQgd2Uga25vdyB0aGF0IGBleHQ0X3NlYXJjaF9kaXJgIGlzIGNhbGxlZCBieSBib3RoIGBzZWFyY2hfZGlyYmxvY2tgIGFuZCBgZXh0NF9maW5kX2lubGluZV9lbnRyeWAsIHNvIHRoaXMgaGFzIGEgYnJvYWQgaW1wYWN0LgoKR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIGJ1Z3MsIHRoaXMgaXMgZGVmaW5pdGVseSBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gVGhlIGtleSBzeW1ib2wgdG8gZm9jdXMgb24gaXMsIHdpdGhvdXQgYSBkb3VidCwgYGV4dDRfc2VhcmNoX2RpcmAgaXRzZWxmLiBJJiMzOTtsbCBuZWVkIHRvIG1ha2Ugc3VyZSBteSBmdXp6aW5nIHNldHVwIGlzIHRhcmdldGluZyB0aGF0IGZ1bmN0aW9uIGRpcmVjdGx5IGFuZCBoYXMgdGhlIHJpZ2h0IGluc3RydW1lbnRhdGlvbi4KCk5vdywgYmVmb3JlIEkgZGl2ZSBkZWVwIGludG8gY3JhZnRpbmcgZnV6eiBjYXNlcywgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZy4gSSB3YW50IHRvIHNlZSBpZiBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zLCBvciBLY29uZmlncywgYXJlIGFzc29jaWF0ZWQgd2l0aCBgZXh0NF9oYXNoX2luX2RpcmVudGAgb3Igb3RoZXIgc2ltaWxhciBmZWF0dXJlcyBpbiB0aGUgZXh0NCBjb2RlLiBUaGlzIGNvdWxkIGluZmx1ZW5jZSBteSBmdXp6aW5nIHN0cmF0ZWd5OyBJIG5lZWQgdG8ga25vdyBhYm91dCBhbnkgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgZmVhdHVyZSBmbGFncy4gVGhlIGBFWFQ0X0ZTYCBjb25maWcgaXMgZGVmaW5pdGVseSByZWxldmFudCBoZXJlLCBidXQgSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBtb3JlIHNwZWNpZmljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X2hhc2hfaW5fZGlyZW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0Lmg9MjUwND1zdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiB7XG4tLVxuZnMvZXh0NC9leHQ0LmgtMjUyMi1cbmZzL2V4dDQvZXh0NC5oOjI1MjM6c3RhdGljIGlubGluZSBib29sIGV4dDRfaGFzaF9pbl9kaXJlbnQoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2V4dDQvZXh0NC5oLTI1MjQte1xuLS1cbmZzL2V4dDQvZXh0NC5oPTI1Nzc9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZXh0NF9kaXJfcmVjX2xlbihfX3U4IG5hbWVfbGVuLFxuLS1cbmZzL2V4dDQvZXh0NC5oLTI1ODEtXG5mcy9leHQ0L2V4dDQuaDoyNTgyOlx0aWYgKGRpciBcdTAwMjZcdTAwMjYgZXh0NF9oYXNoX2luX2RpcmVudChkaXIpKVxuZnMvZXh0NC9leHQ0LmgtMjU4My1cdFx0cmVjX2xlbiAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBleHQ0X2Rpcl9lbnRyeV9oYXNoKTtcbi0tXG5mcy9leHQ0L2lubGluZS5jPTEyNTg9aW50IGV4dDRfaW5saW5lZGlyX3RvX3RyZWUoc3RydWN0IGZpbGUgKmRpcl9maWxlLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTMzNy1cbmZzL2V4dDQvaW5saW5lLmM6MTMzODpcdFx0aWYgKGV4dDRfaGFzaF9pbl9kaXJlbnQoZGlyKSkge1xuZnMvZXh0NC9pbmxpbmUuYy0xMzM5LVx0XHRcdGhpbmZvLVx1MDAzZWhhc2ggPSBFWFQ0X0RJUkVOVF9IQVNIKGRlKTtcbi0tXG5mcy9leHQ0L25hbWVpLmM9Nzc4PWR4X3Byb2JlKHN0cnVjdCBleHQ0X2ZpbGVuYW1lICpmbmFtZSwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvZXh0NC9uYW1laS5jLTgwMy1cdH1cbmZzL2V4dDQvbmFtZWkuYzo4MDQ6XHRpZiAoZXh0NF9oYXNoX2luX2RpcmVudChkaXIpKSB7XG5mcy9leHQ0L25hbWVpLmMtODA1LVx0XHRpZiAocm9vdC1cdTAwM2VpbmZvLmhhc2hfdmVyc2lvbiAhPSBEWF9IQVNIX1NJUEhBU0gpIHtcbi0tXG5mcy9leHQ0L25hbWVpLmM9MTAzOD1zdGF0aWMgaW50IGh0cmVlX2RpcmJsb2NrX3RvX3RyZWUoc3RydWN0IGZpbGUgKmRpcl9maWxlLFxuLS1cbmZzL2V4dDQvbmFtZWkuYy0xMDgzLVx0XHR9XG5mcy9leHQ0L25hbWVpLmM6MTA4NDpcdFx0aWYgKGV4dDRfaGFzaF9pbl9kaXJlbnQoZGlyKSkge1xuZnMvZXh0NC9uYW1laS5jLTEwODUtXHRcdFx0aWYgKGRlLVx1MDAzZW5hbWVfbGVuIFx1MDAyNlx1MDAyNiBkZS1cdTAwM2Vpbm9kZSkge1xuLS1cbmZzL2V4dDQvbmFtZWkuYz0xMTUxPWludCBleHQ0X2h0cmVlX2ZpbGxfdHJlZShzdHJ1Y3QgZmlsZSAqZGlyX2ZpbGUsIF9fdTMyIHN0YXJ0X2hhc2gsXG4tLVxuZnMvZXh0NC9uYW1laS5jLTExNjctXHRpZiAoIShleHQ0X3Rlc3RfaW5vZGVfZmxhZyhkaXIsIEVYVDRfSU5PREVfSU5ERVgpKSkge1xuZnMvZXh0NC9uYW1laS5jOjExNjg6XHRcdGlmIChleHQ0X2hhc2hfaW5fZGlyZW50KGRpcikpXG5mcy9leHQ0L25hbWVpLmMtMTE2OS1cdFx0XHRoaW5mby5oYXNoX3ZlcnNpb24gPSBEWF9IQVNIX1NJUEhBU0g7XG4tLVxuZnMvZXh0NC9uYW1laS5jPTEyODA9c3RhdGljIGludCBkeF9tYWtlX21hcChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcbi0tXG5mcy9leHQ0L25hbWVpLmMtMTI5OC1cdFx0aWYgKGRlLVx1MDAzZW5hbWVfbGVuIFx1MDAyNlx1MDAyNiBkZS1cdTAwM2Vpbm9kZSkge1xuZnMvZXh0NC9uYW1laS5jOjEyOTk6XHRcdFx0aWYgKGV4dDRfaGFzaF9pbl9kaXJlbnQoZGlyKSlcbmZzL2V4dDQvbmFtZWkuYy0xMzAwLVx0XHRcdFx0aC5oYXNoID0gRVhUNF9ESVJFTlRfSEFTSChkZSk7XG4tLVxuZnMvZXh0NC9uYW1laS5jPTE0NTY9aW50IGV4dDRfc2VhcmNoX2RpcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBjaGFyICpzZWFyY2hfYnVmLCBpbnQgYnVmX3NpemUsXG4tLVxuZnMvZXh0NC9uYW1laS5jLTE0NjktXHRcdGlmIChkZS1cdTAwM2VuYW1lICYjNDM7IGRlLVx1MDAzZW5hbWVfbGVuIFx1MDAzYz0gZGxpbWl0IFx1MDAyNlx1MDAyNlxuZnMvZXh0NC9uYW1laS5jOjE0NzA6XHRcdCAgICAoIWV4dDRfaGFzaF9pbl9kaXJlbnQoZGlyKSB8fFxuZnMvZXh0NC9uYW1laS5jLTE0NzEtXHRcdCAgICAgKGNoYXIgKilkZSAmIzQzOyBleHQ0X2Rpcl9yZWNfbGVuKGRlLVx1MDAzZW5hbWVfbGVuLCBkaXIpIFx1MDAzYz0gZGxpbWl0KSBcdTAwMjZcdTAwMjZcbi0tXG5mcy9leHQ0L25hbWVpLmM9MjA3MD12b2lkIGV4dDRfaW5zZXJ0X2RlbnRyeShzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9leHQ0L25hbWVpLmMtMjA5Mi1cdG1lbWNweShkZS1cdTAwM2VuYW1lLCBmbmFtZV9uYW1lKGZuYW1lKSwgZm5hbWVfbGVuKGZuYW1lKSk7XG5mcy9leHQ0L25hbWVpLmM6MjA5MzpcdGlmIChleHQ0X2hhc2hfaW5fZGlyZW50KGRpcikpIHtcbmZzL2V4dDQvbmFtZWkuYy0yMDk0LVx0XHRzdHJ1Y3QgZHhfaGFzaF9pbmZvICpoaW5mbyA9IFx1MDAyNmZuYW1lLVx1MDAzZWhpbmZvO1xuLS1cbmZzL2V4dDQvbmFtZWkuYz0yMjExPXN0YXRpYyBpbnQgbWFrZV9pbmRleGVkX2RpcihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgZXh0NF9maWxlbmFtZSAqZm5hbWUsXG4tLVxuZnMvZXh0NC9uYW1laS5jLTIyODctXHRyb290LVx1MDAzZWluZm8uaW5mb19sZW5ndGggPSBzaXplb2Yocm9vdC1cdTAwM2VpbmZvKTtcbmZzL2V4dDQvbmFtZWkuYzoyMjg4Olx0aWYgKGV4dDRfaGFzaF9pbl9kaXJlbnQoZGlyKSlcbmZzL2V4dDQvbmFtZWkuYy0yMjg5LVx0XHRyb290LVx1MDAzZWluZm8uaGFzaF92ZXJzaW9uID0gRFhfSEFTSF9TSVBIQVNIO1xuLS1cbmZzL2V4dDQvbmFtZWkuYy0yMzA1LVx0LyogY2FzZWZvbGRlZCBlbmNyeXB0ZWQgaGFzaGVzIGFyZSBjb21wdXRlZCBvbiBmbmFtZSBzZXR1cCAqL1xuZnMvZXh0NC9uYW1laS5jOjIzMDY6XHRpZiAoIWV4dDRfaGFzaF9pbl9kaXJlbnQoZGlyKSkge1xuZnMvZXh0NC9uYW1laS5jLTIzMDctXHRcdGludCBlcnIgPSBleHQ0ZnNfZGlyaGFzaChkaXIsIGZuYW1lX25hbWUoZm5hbWUpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjM1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIGl0IGxvb2tzIGxpa2UgSSYjMzk7bSBsb29raW5nIGF0IGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBpbmxpbmUgZnVuY3Rpb24uCgoqKkFuYWx5emluZyBhIFNpbXBsZSBleHQ0IElubGluZSBGdW5jdGlvbioqCgpTbywgdGhpcyBgZXh0NF9oYXNoX2luX2RpcmVudGAgZnVuY3Rpb24gaXMganVzdCBhIHF1aWNrIGZsYWcgY2hlY2ssIHVzaW5nIHNvbWV0aGluZyBha2luIHRvIGBleHQ0X3Rlc3RfaW5vZGVfZmxhZ2AuIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoYXQgcGF0dGVybjsgaXQmIzM5O3MgYSBjb21tb24gYXBwcm9hY2ggZm9yIGNoZWNraW5nIGlub2RlIG1ldGFkYXRhLiBJdCYjMzk7cyBkZXNpZ25lZCB0byBiZSBlZmZpY2llbnQsIGFzIGl0JiMzOTtzIGFuIGBpbmxpbmVgIGZ1bmN0aW9uLCBwcmVzdW1hYmx5IHRvIGF2b2lkIHRoZSBvdmVyaGVhZCBvZiBhIGZ1bmN0aW9uIGNhbGwgd2hlbiBmcmVxdWVudGx5IGFjY2Vzc2VkLiBNeSBjdXJpb3NpdHkgaXMgc3BhcmtlZDsgSSBzaG91bGQgZGl2ZSBkZWVwZXIgaW50byB3aGVyZSBgZXh0NF90ZXN0X2lub2RlX2ZsYWdgIGlzIGRlZmluZWQgdG8gdW5kZXJzdGFuZCAqcHJlY2lzZWx5KiB3aGF0IGZsYWcgaXMgYmVpbmcgdGVzdGVkIGhlcmUsIHNwZWNpZmljYWxseSBgRVhUNF9JTk9ERV9FQV9JTk9ERWAsIGJ1dCBJIHN1c3BlY3QgaXQgcmVsYXRlcyB0byB0aGUgaGFuZGxpbmcgb2YgZXh0ZW5kZWQgYXR0cmlidXRlcyB3aXRoaW4gdGhlIGRpcmVjdG9yeSBlbnRyeS4gVGltZSB0byB0cmFjayBkb3duIHRoYXQgYGV4dDRfdGVzdF9pbm9kZV9mbGFnYCBkZWZpbml0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgaW5saW5lIGJvb2wgZXh0NF9oYXNoX2luX2RpcmVudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0NC5oPTI1MDQ9c3RydWN0IGV4dDRfZGlyX2VudHJ5XzIge1xuLS1cbmZzL2V4dDQvZXh0NC5oLTI1MjItXG5mcy9leHQ0L2V4dDQuaDoyNTIzOnN0YXRpYyBpbmxpbmUgYm9vbCBleHQ0X2hhc2hfaW5fZGlyZW50KGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9leHQ0L2V4dDQuaC0yNTI0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTY6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA0OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE2OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0LmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI1MjA6XHQjZGVmaW5lIEVYVDRfRElSRU5UX01JTk9SX0hBU0goZW50cnkpIFxcXG4yNTIxOlx0XHRcdGxlMzJfdG9fY3B1KEVYVDRfRElSRU5UX0hBU0hFUyhlbnRyeSktXHUwMDNlbWlub3JfaGFzaClcbjI1MjI6XHRcbjI1MjM6XHRzdGF0aWMgaW5saW5lIGJvb2wgZXh0NF9oYXNoX2luX2RpcmVudChjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuMjUyNDpcdHtcbjI1MjU6XHRcdHJldHVybiBJU19DQVNFRk9MREVEKGlub2RlKSBcdTAwMjZcdTAwMjYgSVNfRU5DUllQVEVEKGlub2RlKTtcbjI1MjY6XHR9XG4yNTI3Olx0XG4yNTI4Olx0LypcbjI1Mjk6XHQgKiBUaGlzIGlzIGEgYm9ndXMgZGlyZWN0b3J5IGVudHJ5IGF0IHRoZSBlbmQgb2YgZWFjaCBsZWFmIGJsb2NrIHRoYXRcbjI1MzA6XHQgKiByZWNvcmRzIGNoZWNrc3Vtcy5cbjI1MzE6XHQgKi9cbjI1MzI6XHRzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfdGFpbCB7XG4yNTMzOlx0XHRfX2xlMzJcdGRldF9yZXNlcnZlZF96ZXJvMTtcdC8qIFByZXRlbmQgdG8gYmUgdW51c2VkICovXG4yNTM0Olx0XHRfX2xlMTZcdGRldF9yZWNfbGVuO1x0XHQvKiAxMiAqL1xuMjUzNTpcdFx0X191OFx0ZGV0X3Jlc2VydmVkX3plcm8yO1x0LyogWmVybyBuYW1lIGxlbmd0aCAqL1xuMjUzNjpcdFx0X191OFx0ZGV0X3Jlc2VydmVkX2Z0O1x0LyogMHhERSwgZmFrZSBmaWxlIHR5cGUgKi9cbjI1Mzc6XHRcdF9fbGUzMlx0ZGV0X2NoZWNrc3VtO1x0XHQvKiBjcmMzMmModXVpZCYjNDM7aW51bSYjNDM7ZGlyYmxvY2spICovXG4yNTM4Olx0fTtcbjI1Mzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTY6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA2NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGVjb2RpbmcgdGhlIElub2RlIFJlcXVpcmVtZW50cyoqCgpSaWdodCwgbGV0JiMzOTtzIHNlZSwgd2hhdCBhcmUgd2UgZGVhbGluZyB3aXRoIGhlcmUuLi4gYElTX0NBU0VGT0xERUQoaW5vZGUpICZhbXA7JmFtcDsgSVNfRU5DUllQVEVEKGlub2RlKWAuIEVzc2VudGlhbGx5LCB0aGlzIGlub2RlICptdXN0KiBiZSBjYXNlZm9sZGVkICphbmQqIGVuY3J5cHRlZC4gVGhhdCYjMzk7cyB0aGUgY29yZSByZXF1aXJlbWVudC4gT2theSwgdW5kZXJzdG9vZC4gTGV0JiMzOTtzIHNlZSBob3cgdGhpcyB0aWVzIGludG8gdGhlIGNvbmZpZ3MuCgpOb3csIHdoaWNoIGZlYXR1cmVzIG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyB0byBiZSB2YWxpZD8gV2UgaGF2ZSB0byBoYXZlIGBFWFQ0X0ZTYCBhcyB0aGUgYmFzZSBmaWxlc3lzdGVtLCBvZiBjb3Vyc2UuIFRoZW4gd2UgaGF2ZSBgRVhUNF9GU19FTkNSWVBUSU9OYC4gSG1tLCB3YWl0IGEgc2Vjb25kLCBJIHRoaW5rIHRoYXQmIzM5O3MgYmVlbiBzdHJlYW1saW5lZC4gSSAqYmVsaWV2ZSogaXQmIzM5O3MganVzdCBgRlNfRU5DUllQVElPTmAgbm93YWRheXMuIEdvdHRhIGNvbmZpcm0gdGhhdC4gQW5kIHNpbmNlIHdlIGhhdmUgY2FzZWZvbGRpbmcgdG8gZGVhbCB3aXRoLCB3ZSYjMzk7bGwgbmVlZCBgVU5JQ09ERWAgZW5hYmxlZC4gQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZm9yIGV4dDQgYW5kIGNvbmZpcm0gdGhvc2UgZGVwZW5kZW5jaWVzIGFuZCB0aGVpciBzcGVjaWZpYyBtZWFuaW5ncyB0byBiZSBzdXJlLiBJdCYjMzk7cyB0aW1lIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXNlIGFzc3VtcHRpb25zIGFyZSBzb2xpZCBiZWZvcmUgbW92aW5nIGFueSBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRVhUNF9GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2V4dDQvS2NvbmZpZzoyOmNvbmZpZyBFWFQ0X0ZTXG5mcy9leHQ0L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1RoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnPTM1PWNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxuLS1cbmZzL2V4dDQvS2NvbmZpZy00NS1cbmZzL2V4dDQvS2NvbmZpZzo0Njpjb25maWcgRVhUNF9GU19QT1NJWF9BQ0xcbmZzL2V4dDQvS2NvbmZpZy00Ny1cdGJvb2wgXCYjMzQ7RXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1wmIzM0O1xuLS1cbmZzL2V4dDQvS2NvbmZpZy01NS1cbmZzL2V4dDQvS2NvbmZpZzo1Njpjb25maWcgRVhUNF9GU19TRUNVUklUWVxuZnMvZXh0NC9LY29uZmlnLTU3LVx0Ym9vbCBcJiMzNDtFeHQ0IFNlY3VyaXR5IExhYmVsc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjM4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTY6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIEVYVDRfRlNcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O1RoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXCYjMzQ7XG4gICA0Olx0XHRzZWxlY3QgQlVGRkVSX0hFQURcbiAgIDU6XHRcdHNlbGVjdCBKQkQyXG4gICA2Olx0XHRzZWxlY3QgQ1JDMTZcbiAgIDc6XHRcdHNlbGVjdCBDUkMzMlxuICAgODpcdFx0c2VsZWN0IEZTX0lPTUFQXG4gICA5Olx0XHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cbiAgMTA6XHRcdGhlbHBcbiAgMTE6XHRcdCAgVGhpcyBpcyB0aGUgbmV4dCBnZW5lcmF0aW9uIG9mIHRoZSBleHQzIGZpbGVzeXN0ZW0uXG4gIDEyOlx0XG4gIDEzOlx0XHQgIFVubGlrZSB0aGUgY2hhbmdlIGZyb20gZXh0MiBmaWxlc3lzdGVtIHRvIGV4dDMgZmlsZXN5c3RlbSxcbiAgMTQ6XHRcdCAgdGhlIG9uLWRpc2sgZm9ybWF0IG9mIGV4dDQgaXMgbm90IGZvcndhcmRzIGNvbXBhdGlibGUgd2l0aFxuICAxNTpcdFx0ICBleHQzOyBpdCBpcyBiYXNlZCBvbiBleHRlbnQgbWFwcyBhbmQgaXQgc3VwcG9ydHMgNDgtYml0XG4gIDE2Olx0XHQgIHBoeXNpY2FsIGJsb2NrIG51bWJlcnMuICBUaGUgZXh0NCBmaWxlc3lzdGVtIGFsc28gc3VwcG9ydHMgZGVsYXllZFxuICAxNzpcdFx0ICBhbGxvY2F0aW9uLCBwZXJzaXN0ZW50IHByZWFsbG9jYXRpb24sIGhpZ2ggcmVzb2x1dGlvbiB0aW1lIHN0YW1wcyxcbiAgMTg6XHRcdCAgYW5kIGEgbnVtYmVyIG9mIG90aGVyIGZlYXR1cmVzIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UgYW5kIHNwZWVkXG4gIDE5Olx0XHQgIHVwIGZzY2sgdGltZS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2Ugc2VlIHRoZSB3ZWIgcGFnZXMgYXRcbiAgMjA6XHRcdCAgaHR0cDovL2V4dDQud2lraS5rZXJuZWwub3JnLlxuICAyMTpcdFxuICAyMjpcdFx0ICBUaGUgZXh0NCBmaWxlc3lzdGVtIHN1cHBvcnRzIG1vdW50aW5nIGFuIGV4dDMgZmlsZXN5c3RlbTsgd2hpbGUgdGhlcmVcbiAgMjM6XHRcdCAgYXJlIHNvbWUgcGVyZm9ybWFuY2UgZ2FpbnMgZnJvbSB0aGUgZGVsYXllZCBhbGxvY2F0aW9uIGFuZCBpbm9kZVxuICAyNDpcdFx0ICB0YWJsZSByZWFkYWhlYWQsIHRoZSBiZXN0IHBlcmZvcm1hbmNlIGdhaW5zIHJlcXVpcmUgZW5hYmxpbmcgZXh0NFxuICAyNTpcdFx0ICBmZWF0dXJlcyBpbiB0aGUgZmlsZXN5c3RlbSB1c2luZyB0dW5lMmZzLCBvciBmb3JtYXR0aW5nIGEgbmV3XG4gIDI2Olx0XHQgIGZpbGVzeXN0ZW0gYXMgYW4gZXh0NCBmaWxlc3lzdGVtIGluaXRpYWxseS4gV2l0aG91dCBleHBsaWNpdCBlbmFibGluZ1xuICAyNzpcdFx0ICBvZiBleHQ0IGZlYXR1cmVzLCB0aGUgb24gZGlzayBmaWxlc3lzdGVtIGZvcm1hdCBzdGF5cyBmdWxseSBiYWNrd2FyZFxuICAyODpcdFx0ICBjb21wYXRpYmxlLlxuICAyOTpcdFxuICAzMDpcdFx0ICBUbyBjb21waWxlIHRoaXMgZmlsZSBzeXN0ZW0gc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlXG4gIDMxOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBleHQ0LlxuICAzMjpcdFxuICAzMzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAzNDpcdFxuICAzNTpcdGNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxuICAzNjpcdFx0Ym9vbCBcJiMzNDtVc2UgZXh0NCBmb3IgZXh0MiBmaWxlIHN5c3RlbXNcJiMzNDtcbiAgMzc6XHRcdGRlcGVuZHMgb24gRVhUNF9GU1xuICAzODpcdFx0ZGVwZW5kcyBvbiBFWFQyX0ZTPW5cbiAgMzk6XHRcdGRlZmF1bHQgeVxuICA0MDpcdFx0aGVscFxuICA0MTpcdFx0ICBBbGxvdyB0aGUgZXh0NCBmaWxlIHN5c3RlbSBkcml2ZXIgY29kZSB0byBiZSB1c2VkIGZvciBleHQyXG4gIDQyOlx0XHQgIGZpbGUgc3lzdGVtIG1vdW50cy4gIFRoaXMgYWxsb3dzIHVzZXJzIHRvIHJlZHVjZSB0aGVpclxuICA0MzpcdFx0ICBjb21waWxlZCBrZXJuZWwgc2l6ZSBieSB1c2luZyBvbmUgZmlsZSBzeXN0ZW0gZHJpdmVyIGZvclxuICA0NDpcdFx0ICBleHQyLCBleHQzLCBhbmQgZXh0NCBmaWxlIHN5c3RlbXMuXG4gIDQ1Olx0XG4gIDQ2Olx0Y29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMXG4gIDQ3Olx0XHRib29sIFwmIzM0O0V4dDQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbiAgNDg6XHRcdGRlcGVuZHMgb24gRVhUNF9GU1xuICA0OTpcdFx0c2VsZWN0IEZTX1BPU0lYX0FDTFxuICA1MDpcdFx0aGVscFxuICA1MTpcdFx0ICBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0cyAoQUNMcykgc3VwcG9ydCBwZXJtaXNzaW9ucyBmb3IgdXNlcnMgYW5kXG4gIDUyOlx0XHQgIGdyb3VwcyBiZXlvbmQgdGhlIG93bmVyL2dyb3VwL3dvcmxkIHNjaGVtZS5cbiAgNTM6XHRcbiAgNTQ6XHRcdCAgSWYgeW91IGRvbiYjMzk7dCBrbm93IHdoYXQgQWNjZXNzIENvbnRyb2wgTGlzdHMgYXJlLCBzYXkgTlxuICA1NTpcdFxuICA1NjpcdGNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXG4gIDU3Olx0XHRib29sIFwmIzM0O0V4dDQgU2VjdXJpdHkgTGFiZWxzXCYjMzQ7XG4gIDU4Olx0XHRkZXBlbmRzIG9uIEVYVDRfRlNcbiAgNTk6XHRcdGhlbHBcbiAgNjA6XHRcdCAgU2VjdXJpdHkgbGFiZWxzIHN1cHBvcnQgYWx0ZXJuYXRpdmUgYWNjZXNzIGNvbnRyb2wgbW9kZWxzXG4gIDYxOlx0XHQgIGltcGxlbWVudGVkIGJ5IHNlY3VyaXR5IG1vZHVsZXMgbGlrZSBTRUxpbnV4LiAgVGhpcyBvcHRpb25cbiAgNjI6XHRcdCAgZW5hYmxlcyBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgaGFuZGxlciBmb3IgZmlsZSBzZWN1cml0eVxuICA2MzpcdFx0ICBsYWJlbHMgaW4gdGhlIGV4dDQgZmlsZXN5c3RlbS5cbiAgNjQ6XHRcbiAgNjU6XHRcdCAgSWYgeW91IGFyZSBub3QgdXNpbmcgYSBzZWN1cml0eSBtb2R1bGUgdGhhdCByZXF1aXJlcyB1c2luZ1xuICA2NjpcdFx0ICBleHRlbmRlZCBhdHRyaWJ1dGVzIGZvciBmaWxlIHNlY3VyaXR5IGxhYmVscywgc2F5IE4uXG4gIDY3Olx0XG4gIDY4Olx0Y29uZmlnIEVYVDRfREVCVUdcbiAgNjk6XHRcdGJvb2wgXCYjMzQ7RXh0NCBkZWJ1Z2dpbmcgc3VwcG9ydFwmIzM0O1xuICA3MDpcdFx0ZGVwZW5kcyBvbiBFWFQ0X0ZTXG4gIDcxOlx0XHRoZWxwXG4gIDcyOlx0XHQgIEVuYWJsZXMgcnVuLXRpbWUgZGVidWdnaW5nIHN1cHBvcnQgZm9yIHRoZSBleHQ0IGZpbGVzeXN0ZW0uXG4gIDczOlx0XG4gIDc0Olx0XHQgIElmIHlvdSBzZWxlY3QgWSBoZXJlLCB0aGVuIHlvdSB3aWxsIGJlIGFibGUgdG8gdHVybiBvbiBkZWJ1Z2dpbmdcbiAgNzU6XHRcdCAgdXNpbmcgZHluYW1pYyBkZWJ1ZyBjb250cm9sIGZvciBtYl9kZWJ1ZygpIC8gZXh0X2RlYnVnKCkgbXNncy5cbiAgNzY6XHRcbiAgNzc6XHRjb25maWcgRVhUNF9LVU5JVF9URVNUU1xuICA3ODpcdFx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIGV4dDRcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuICA3OTpcdFx0ZGVwZW5kcyBvbiBFWFQ0X0ZTIFx1MDAyNlx1MDAyNiBLVU5JVFxuICA4MDpcdFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbiAgODE6XHRcdGhlbHBcbiAgODI6XHRcdCAgVGhpcyBidWlsZHMgdGhlIGV4dDQgS1VuaXQgdGVzdHMuXG4gIDgzOlx0XG4gIDg0Olx0XHQgIEtVbml0IHRlc3RzIHJ1biBkdXJpbmcgYm9vdCBhbmQgb3V0cHV0IHRoZSByZXN1bHRzIHRvIHRoZSBkZWJ1ZyBsb2dcbiAgODU6XHRcdCAgaW4gVEFQIGZvcm1hdCAoaHR0cHM6Ly90ZXN0YW55dGhpbmcub3JnLykuIE9ubHkgdXNlZnVsIGZvciBrZXJuZWwgZGV2c1xuICA4NjpcdFx0ICBydW5uaW5nIEtVbml0IHRlc3QgaGFybmVzcyBhbmQgYXJlIG5vdCBmb3IgaW5jbHVzaW9uIGludG8gYSBwcm9kdWN0aW9uXG4gIDg3Olx0XHQgIGJ1aWxkLlxuICA4ODpcdFxuICA4OTpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsIHBsZWFzZSByZWZlclxuICA5MDpcdFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbiBpbiBEb2N1bWVudGF0aW9uL2Rldi10b29scy9rdW5pdC8uXG4gIDkxOlx0XG4gIDkyOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE2OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5ODkKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIENvbmZpZ3VyYXRpb24gUGFyYW1ldGVycyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgZm9jdXNlZCBvbiB0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguIFRoZSB0ZXJtIGBGU19FTkNSWVBUSU9OYCBpbnN0YW50bHkgZmxhZ3MgdGhlIGZpbGUgc3lzdGVtIGVuY3J5cHRpb24gc2V0dGluZywgd2hpY2ggaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gTXkgbmV4dCB0aG91Z2h0IGp1bXBzIGRpcmVjdGx5IHRvIGBVTklDT0RFYC4gSSBpbW1lZGlhdGVseSByZWNvZ25pemUgdGhpcyBhcyBiZWluZyBsaW5rZWQgdG8gY2hhcmFjdGVyIGNhc2Vmb2xkaW5nLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBkZWVwZXIgYW5kIGludmVzdGlnYXRlIHRoZSBjb25maWd1cmF0aW9uIGRldGFpbHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBgVU5JQ09ERWAgc2V0dGluZy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHNwZWNpZmllZCwgYW5kIGNvbnNpZGVyIGltcGxpY2F0aW9ucyBmb3IgdGhlIG92ZXJhbGwgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE2OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVTklDT0RFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3VuaWNvZGUvS2NvbmZpZy00LSNcbmZzL3VuaWNvZGUvS2NvbmZpZzo1OmNvbmZpZyBVTklDT0RFXG5mcy91bmljb2RlL0tjb25maWctNi1cdHRyaXN0YXRlIFwmIzM0O1VURi04IG5vcm1hbGl6YXRpb24gYW5kIGNhc2Vmb2xkaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy91bmljb2RlL0tjb25maWctMTItXG5mcy91bmljb2RlL0tjb25maWc6MTM6Y29uZmlnIFVOSUNPREVfTk9STUFMSVpBVElPTl9LVU5JVF9URVNUXG5mcy91bmljb2RlL0tjb25maWctMTQtXHR0cmlzdGF0ZSBcJiMzNDtUZXN0IFVURi04IG5vcm1hbGl6YXRpb24gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzAwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRlY29kaW5nIHRoZSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O3ZlIGdvdCBpdC4gYFVOSUNPREVgIGlzIHRoZSBrZXkgc2V0dGluZyBpbiB0aGlzIGNvbmZpZ3VyYXRpb24gdGhhdCBkZWFscyB3aXRoIGNhc2Vmb2xkaW5nLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyB0aGUgbW9zdCBsaWtlbHkgb25lLiBTbywgdG8gcmVjYXAsIHRoZSBpbXBvcnRhbnQgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQgaGVyZSBhcmUgYEVYVDRfRlNgLCBgRlNfRU5DUllQVElPTmAsIGFuZCBgVU5JQ09ERWAuCgpOb3csIEkgc2hvdWxkIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSByZWxhdGlvbnNoaXAgd2l0aCBgZXh0NF9oYXNoX2luX2RpcmVudGAgYW5kIGFsc28gYElTX0NBU0VGT0xERURgLiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSBmdWxsIHBpY3R1cmUgaGVyZSBhbmQgYXJlIG5vdCBtaXNzaW5nIGFueSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJU19DQVNFRk9MREVEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9kaXIuYz0xMzA9c3RhdGljIGludCBleHQ0X3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KVxuLS1cbmZzL2V4dDQvZGlyLmMtMjg5LVxuZnMvZXh0NC9kaXIuYzoyOTA6XHRcdFx0XHRcdGlmIChJU19DQVNFRk9MREVEKGlub2RlKSkge1xuZnMvZXh0NC9kaXIuYy0yOTEtXHRcdFx0XHRcdFx0aGFzaCA9IEVYVDRfRElSRU5UX0hBU0goZGUpO1xuLS1cbmZzL2V4dDQvZXh0NC5oPTI1MjM9c3RhdGljIGlubGluZSBib29sIGV4dDRfaGFzaF9pbl9kaXJlbnQoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2V4dDQvZXh0NC5oLTI1MjQte1xuZnMvZXh0NC9leHQ0Lmg6MjUyNTpcdHJldHVybiBJU19DQVNFRk9MREVEKGlub2RlKSBcdTAwMjZcdTAwMjYgSVNfRU5DUllQVEVEKGlub2RlKTtcbmZzL2V4dDQvZXh0NC5oLTI1MjYtfVxuLS1cbmZzL2V4dDQvaGFzaC10ZXN0LmM9NDQ0PXN0YXRpYyB2b2lkIHRlc3RfZXh0NGZzX2Rpcmhhc2hfY2FzZWZvbGRlZF9uYW1lc19oYXNoX2NvbnNpc3RlbnRseShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxuZnMvZXh0NC9oYXNoLXRlc3QuYy00NzgtXG5mcy9leHQ0L2hhc2gtdGVzdC5jOjQ3OTpcdEtVTklUX0FTU0VSVF9UUlVFKHRlc3QsIElTX0NBU0VGT0xERUQoXHUwMDI2ZWktXHUwMDNldmZzX2lub2RlKSk7XG5mcy9leHQ0L2hhc2gtdGVzdC5jLTQ4MC1cbi0tXG5mcy9leHQ0L2hhc2gtdGVzdC5jPTQ5MD1zdGF0aWMgdm9pZCB0ZXN0X2V4dDRmc19kaXJoYXNoX2Nhc2Vmb2xkX2ZhbGxiYWNrKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5mcy9leHQ0L2hhc2gtdGVzdC5jLTUzMC1cbmZzL2V4dDQvaGFzaC10ZXN0LmM6NTMxOlx0S1VOSVRfQVNTRVJUX1RSVUUodGVzdCwgSVNfQ0FTRUZPTERFRChcdTAwMjZlaS1cdTAwM2V2ZnNfaW5vZGUpKTtcbmZzL2V4dDQvaGFzaC10ZXN0LmMtNTMyLVxuLS1cbmZzL2V4dDQvaGFzaC5jPTMxND1pbnQgZXh0NGZzX2Rpcmhhc2goY29uc3Qgc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4sXG4tLVxuZnMvZXh0NC9oYXNoLmMtMzIyLVxuZnMvZXh0NC9oYXNoLmM6MzIzOlx0aWYgKGxlbiBcdTAwMjZcdTAwMjYgSVNfQ0FTRUZPTERFRChkaXIpIFx1MDAyNlx1MDAyNlxuZnMvZXh0NC9oYXNoLmMtMzI0LVx0ICAgKCFJU19FTkNSWVBURUQoZGlyKSB8fCBmc2NyeXB0X2hhc19lbmNyeXB0aW9uX2tleShkaXIpKSkge1xuLS1cbmZzL2V4dDQvaW5vZGUuYz01MjczPXN0cnVjdCBpbm9kZSAqX19leHQ0X2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8sXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTU2MDgtXHR9XG5mcy9leHQ0L2lub2RlLmM6NTYwOTpcdGlmIChJU19DQVNFRk9MREVEKGlub2RlKSBcdTAwMjZcdTAwMjYgIWV4dDRfaGFzX2ZlYXR1cmVfY2FzZWZvbGQoaW5vZGUtXHUwMDNlaV9zYikpIHtcbmZzL2V4dDQvaW5vZGUuYy01NjEwLVx0XHRleHQ0X2Vycm9yX2lub2RlKGlub2RlLCBmdW5jdGlvbiwgbGluZSwgMCxcbi0tXG5mcy9leHQ0L25hbWVpLmM9NjIxPXN0YXRpYyBzdHJ1Y3Qgc3RhdHMgZHhfc2hvd19sZWFmKHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL2V4dDQvbmFtZWkuYy02NzktXHRcdFx0XHRcdH1cbmZzL2V4dDQvbmFtZWkuYzo2ODA6XHRcdFx0XHRcdGlmIChJU19DQVNFRk9MREVEKGRpcikpXG5mcy9leHQ0L25hbWVpLmMtNjgxLVx0XHRcdFx0XHRcdGguaGFzaCA9IEVYVDRfRElSRU5UX0hBU0goZGUpO1xuLS1cbmZzL2V4dDQvbmFtZWkuYz03Nzg9ZHhfcHJvYmUoc3RydWN0IGV4dDRfZmlsZW5hbWUgKmZuYW1lLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9leHQ0L25hbWVpLmMtODI0LVx0aWYgKGZuYW1lIFx1MDAyNlx1MDAyNiBmbmFtZV9uYW1lKGZuYW1lKSBcdTAwMjZcdTAwMjZcbmZzL2V4dDQvbmFtZWkuYzo4MjU6XHQgICAgIShJU19FTkNSWVBURUQoZGlyKSBcdTAwMjZcdTAwMjYgSVNfQ0FTRUZPTERFRChkaXIpKSkge1xuZnMvZXh0NC9uYW1laS5jLTgyNi1cdFx0aW50IHJldCA9IGV4dDRmc19kaXJoYXNoKGRpciwgZm5hbWVfbmFtZShmbmFtZSksXG4tLVxuZnMvZXh0NC9uYW1laS5jPTEzNjI9aW50IGV4dDRfZm5hbWVfc2V0dXBfY2lfZmlsZW5hbWUoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICppbmFtZSxcbi0tXG5mcy9leHQ0L25hbWVpLmMtMTM2OS1cbmZzL2V4dDQvbmFtZWkuYzoxMzcwOlx0aWYgKCFJU19DQVNFRk9MREVEKGRpcikgfHxcbmZzL2V4dDQvbmFtZWkuYy0xMzcxLVx0ICAgIChJU19FTkNSWVBURUQoZGlyKSBcdTAwMjZcdTAwMjYgIWZzY3J5cHRfaGFzX2VuY3J5cHRpb25fa2V5KGRpcikpKSB7XG4tLVxuZnMvZXh0NC9uYW1laS5jPTE0MDU9c3RhdGljIGJvb2wgZXh0NF9tYXRjaChzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbi0tXG5mcy9leHQ0L25hbWVpLmMtMTQyMC0jaWYgSVNfRU5BQkxFRChDT05GSUdfVU5JQ09ERSlcbmZzL2V4dDQvbmFtZWkuYzoxNDIxOlx0aWYgKElTX0NBU0VGT0xERUQocGFyZW50KSBcdTAwMjZcdTAwMjZcbmZzL2V4dDQvbmFtZWkuYy0xNDIyLVx0ICAgICghSVNfRU5DUllQVEVEKHBhcmVudCkgfHwgZnNjcnlwdF9oYXNfZW5jcnlwdGlvbl9rZXkocGFyZW50KSkpIHtcbi0tXG5mcy9leHQ0L25hbWVpLmM9MTUxOT1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICpfX2V4dDRfZmluZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9leHQ0L25hbWVpLmMtMTU3Mi1cdFx0ZWxzZSBpZiAoIXNiX25vX2Nhc2Vmb2xkX2NvbXBhdF9mYWxsYmFjayhkaXItXHUwMDNlaV9zYikgXHUwMDI2XHUwMDI2XG5mcy9leHQ0L25hbWVpLmM6MTU3MzpcdFx0XHQgKnJlc19kaXIgPT0gTlVMTCBcdTAwMjZcdTAwMjYgSVNfQ0FTRUZPTERFRChkaXIpKVxuZnMvZXh0NC9uYW1laS5jLTE1NzQtXHRcdFx0ZHh0cmFjZShwcmludGsoS0VSTl9ERUJVRyBcJiMzNDtleHQ0X2ZpbmRfZW50cnk6IGNhc2Vmb2xkIFwmIzM0O1xuLS1cbmZzL2V4dDQvbmFtZWkuYz0xNzYyPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpleHQ0X2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4tLVxuZnMvZXh0NC9uYW1laS5jLTE4MDQtXG5mcy9leHQ0L25hbWVpLmM6MTgwNTpcdGlmIChJU19FTkFCTEVEKENPTkZJR19VTklDT0RFKSBcdTAwMjZcdTAwMjYgIWlub2RlIFx1MDAyNlx1MDAyNiBJU19DQVNFRk9MREVEKGRpcikpIHtcbmZzL2V4dDQvbmFtZWkuYy0xODA2LVx0XHQvKiBFdmVudHVhbGx5IHdlIHdhbnQgdG8gY2FsbCBkX2FkZF9jaShkZW50cnksIE5VTEwpXG4tLVxuZnMvZXh0NC9uYW1laS5jPTMxMzg9c3RhdGljIGludCBleHQ0X3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4tLVxuZnMvZXh0NC9uYW1laS5jLTMyMTctXHQgKi9cbmZzL2V4dDQvbmFtZWkuYzozMjE4Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1VOSUNPREUpIFx1MDAyNlx1MDAyNiBJU19DQVNFRk9MREVEKGRpcikpXG5mcy9leHQ0L25hbWVpLmMtMzIxOS1cdFx0ZF9pbnZhbGlkYXRlKGRlbnRyeSk7XG4tLVxuZnMvZXh0NC9uYW1laS5jPTMzMDE9c3RhdGljIGludCBleHQ0X3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuLS1cbmZzL2V4dDQvbmFtZWkuYy0zMzI4LVx0ICovXG5mcy9leHQ0L25hbWVpLmM6MzMyOTpcdGlmIChJU19FTkFCTEVEKENPTkZJR19VTklDT0RFKSBcdTAwMjZcdTAwMjYgSVNfQ0FTRUZPTERFRChkaXIpKVxuZnMvZXh0NC9uYW1laS5jLTMzMzAtXHRcdGRfaW52YWxpZGF0ZShkZW50cnkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQ0OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE2OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lTX0VOQ1JZUFRFRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZGlyLmM9MTMwPXN0YXRpYyBpbnQgZXh0NF9yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcbi0tXG5mcy9leHQ0L2Rpci5jLTE2OC1cbmZzL2V4dDQvZGlyLmM6MTY5Olx0aWYgKElTX0VOQ1JZUFRFRChpbm9kZSkpIHtcbmZzL2V4dDQvZGlyLmMtMTcwLVx0XHRlcnIgPSBmc2NyeXB0X2ZuYW1lX2FsbG9jX2J1ZmZlcihFWFQ0X05BTUVfTEVOLCBcdTAwMjZmc3RyKTtcbi0tXG5mcy9leHQ0L2Rpci5jLTI3NS1cdFx0XHRpZiAobGUzMl90b19jcHUoZGUtXHUwMDNlaW5vZGUpKSB7XG5mcy9leHQ0L2Rpci5jOjI3NjpcdFx0XHRcdGlmICghSVNfRU5DUllQVEVEKGlub2RlKSkge1xuZnMvZXh0NC9kaXIuYy0yNzctXHRcdFx0XHRcdGlmICghZGlyX2VtaXQoY3R4LCBkZS1cdTAwM2VuYW1lLFxuLS1cbmZzL2V4dDQvZXh0NC5oPTI1MjM9c3RhdGljIGlubGluZSBib29sIGV4dDRfaGFzaF9pbl9kaXJlbnQoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2V4dDQvZXh0NC5oLTI1MjQte1xuZnMvZXh0NC9leHQ0Lmg6MjUyNTpcdHJldHVybiBJU19DQVNFRk9MREVEKGlub2RlKSBcdTAwMjZcdTAwMjYgSVNfRU5DUllQVEVEKGlub2RlKTtcbmZzL2V4dDQvZXh0NC5oLTI1MjYtfVxuLS1cbmZzL2V4dDQvZXh0NF9qYmQyLmM9MTA9aW50IGV4dDRfaW5vZGVfam91cm5hbF9tb2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9leHQ0X2piZDIuYy0yMC1cdFx0LyogV2UgZG8gbm90IHN1cHBvcnQgZGF0YSBqb3VybmFsbGluZyBmb3IgZW5jcnlwdGVkIGRhdGEgKi9cbmZzL2V4dDQvZXh0NF9qYmQyLmM6MjE6XHRcdGlmIChTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkgXHUwMDI2XHUwMDI2IElTX0VOQ1JZUFRFRChpbm9kZSkpXG5mcy9leHQ0L2V4dDRfamJkMi5jLTIyLVx0XHRcdHJldHVybiBFWFQ0X0lOT0RFX09SREVSRURfREFUQV9NT0RFOyAgLyogb3JkZXJlZCAqL1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTQ4NTQ9bG9uZyBleHQ0X2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNDg2NS1cdCAqL1xuZnMvZXh0NC9leHRlbnRzLmM6NDg2NjpcdGlmIChJU19FTkNSWVBURUQoaW5vZGUpIFx1MDAyNlx1MDAyNlxuZnMvZXh0NC9leHRlbnRzLmMtNDg2Ny1cdCAgICAobW9kZSBcdTAwMjYgKEZBTExPQ19GTF9DT0xMQVBTRV9SQU5HRSB8IEZBTExPQ19GTF9JTlNFUlRfUkFOR0UpKSlcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9NDU0PXN0YXRpYyBpbnQgX190cmFja19kZW50cnlfdXBkYXRlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTQ2OC1cbmZzL2V4dDQvZmFzdF9jb21taXQuYzo0Njk6XHRpZiAoSVNfRU5DUllQVEVEKGRpcikpIHtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy00NzAtXHRcdGV4dDRfZmNfbWFya19pbmVsaWdpYmxlKHNiLCBFWFQ0X0ZDX1JFQVNPTl9FTkNSWVBURURfRklMRU5BTUUsXG4tLVxuZnMvZXh0NC9oYXNoLmM9MzE0PWludCBleHQ0ZnNfZGlyaGFzaChjb25zdCBzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbixcbi0tXG5mcy9leHQ0L2hhc2guYy0zMjMtXHRpZiAobGVuIFx1MDAyNlx1MDAyNiBJU19DQVNFRk9MREVEKGRpcikgXHUwMDI2XHUwMDI2XG5mcy9leHQ0L2hhc2guYzozMjQ6XHQgICAoIUlTX0VOQ1JZUFRFRChkaXIpIHx8IGZzY3J5cHRfaGFzX2VuY3J5cHRpb25fa2V5KGRpcikpKSB7XG5mcy9leHQ0L2hhc2guYy0zMjUtXHRcdGJ1ZmYgPSBremFsbG9jKFBBVEhfTUFYLCBHRlBfS0VSTkVMKTtcbi0tXG5mcy9leHQ0L2lub2RlLmM9NDEyPWludCBleHQ0X2lzc3VlX3plcm9vdXQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgbGJsaywgZXh0NF9mc2Jsa190IHBibGssXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTQxOC1cbmZzL2V4dDQvaW5vZGUuYzo0MTk6XHRpZiAoSVNfRU5DUllQVEVEKGlub2RlKSBcdTAwMjZcdTAwMjYgU19JU1JFRyhpbm9kZS1cdTAwM2VpX21vZGUpKVxuZnMvZXh0NC9pbm9kZS5jLTQyMC1cdFx0cmV0dXJuIGZzY3J5cHRfemVyb291dF9yYW5nZShpbm9kZSxcbi0tXG5mcy9leHQ0L2lub2RlLmM9NDIxMD1pbnQgZXh0NF9ibG9ja196ZXJvX2VvZihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgZnJvbSwgbG9mZl90IGVuZClcbi0tXG5mcy9leHQ0L2lub2RlLmMtNDIyMi1cdC8qIElmIHdlIGFyZSBwcm9jZXNzaW5nIGFuIGVuY3J5cHRlZCBpbm9kZSBkdXJpbmcgb3JwaGFuIGxpc3QgaGFuZGxpbmcgKi9cbmZzL2V4dDQvaW5vZGUuYzo0MjIzOlx0aWYgKElTX0VOQ1JZUFRFRChpbm9kZSkgXHUwMDI2XHUwMDI2ICFmc2NyeXB0X2hhc19lbmNyeXB0aW9uX2tleShpbm9kZSkpXG5mcy9leHQ0L2lub2RlLmMtNDIyNC1cdFx0cmV0dXJuIDA7XG4tLVxuZnMvZXh0NC9pbm9kZS5jPTUyNzM9c3RydWN0IGlub2RlICpfX2V4dDRfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubyxcbi0tXG5mcy9leHQ0L2lub2RlLmMtNTU1NC1cdFx0fVxuZnMvZXh0NC9pbm9kZS5jOjU1NTU6XHRcdGlmIChJU19FTkNSWVBURUQoaW5vZGUpKSB7XG5mcy9leHQ0L2lub2RlLmMtNTU1Ni1cdFx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2ZXh0NF9lbmNyeXB0ZWRfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xuLS1cbmZzL2V4dDQvaW5vZGUuYz02MTc4PXUzMiBleHQ0X2Rpb19hbGlnbm1lbnQoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L2lub2RlLmMtNjE4NS1cdFx0cmV0dXJuIDA7XG5mcy9leHQ0L2lub2RlLmM6NjE4NjpcdGlmIChJU19FTkNSWVBURUQoaW5vZGUpKSB7XG5mcy9leHQ0L2lub2RlLmMtNjE4Ny1cdFx0aWYgKCFmc2NyeXB0X2Rpb19zdXBwb3J0ZWQoaW5vZGUpKVxuLS1cbmZzL2V4dDQvaW9jdGwuYz0zNzU9c3RhdGljIGxvbmcgc3dhcF9pbm9kZV9ib290X2xvYWRlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvaW9jdGwuYy0zOTctXHRpZiAoaW5vZGUtXHUwMDNlaV9ubGluayAhPSAxIHx8ICFTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkgfHxcbmZzL2V4dDQvaW9jdGwuYzozOTg6XHQgICAgSVNfU1dBUEZJTEUoaW5vZGUpIHx8IElTX0VOQ1JZUFRFRChpbm9kZSkgfHxcbmZzL2V4dDQvaW9jdGwuYy0zOTktXHQgICAgKEVYVDRfSShpbm9kZSktXHUwMDNlaV9mbGFncyBcdTAwMjYgRVhUNF9KT1VSTkFMX0RBVEFfRkwpIHx8XG4tLVxuZnMvZXh0NC9tb3ZlX2V4dGVudC5jPTQxNj1zdGF0aWMgaW50IG1leHRfY2hlY2tfdmFsaWRpdHkoc3RydWN0IGlub2RlICpvcmlnX2lub2RlLFxuLS1cbmZzL2V4dDQvbW92ZV9leHRlbnQuYy00NjQtXG5mcy9leHQ0L21vdmVfZXh0ZW50LmM6NDY1Olx0aWYgKElTX0VOQ1JZUFRFRChvcmlnX2lub2RlKSB8fCBJU19FTkNSWVBURUQoZG9ub3JfaW5vZGUpKSB7XG5mcy9leHQ0L21vdmVfZXh0ZW50LmMtNDY2LVx0XHRleHQ0X21zZyhzYiwgS0VSTl9FUlIsXG4tLVxuZnMvZXh0NC9uYW1laS5jPTYyMT1zdGF0aWMgc3RydWN0IHN0YXRzIGR4X3Nob3dfbGVhZihzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9leHQ0L25hbWVpLmMtNjQ1LVx0XHRcdFx0bGVuID0gZGUtXHUwMDNlbmFtZV9sZW47XG5mcy9leHQ0L25hbWVpLmM6NjQ2Olx0XHRcdFx0aWYgKCFJU19FTkNSWVBURUQoZGlyKSkge1xuZnMvZXh0NC9uYW1laS5jLTY0Ny1cdFx0XHRcdFx0LyogRGlyZWN0b3J5IGlzIG5vdCBlbmNyeXB0ZWQgKi9cbi0tXG5mcy9leHQ0L25hbWVpLmM9Nzc4PWR4X3Byb2JlKHN0cnVjdCBleHQ0X2ZpbGVuYW1lICpmbmFtZSwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvZXh0NC9uYW1laS5jLTgyNC1cdGlmIChmbmFtZSBcdTAwMjZcdTAwMjYgZm5hbWVfbmFtZShmbmFtZSkgXHUwMDI2XHUwMDI2XG5mcy9leHQ0L25hbWVpLmM6ODI1Olx0ICAgICEoSVNfRU5DUllQVEVEKGRpcikgXHUwMDI2XHUwMDI2IElTX0NBU0VGT0xERUQoZGlyKSkpIHtcbmZzL2V4dDQvbmFtZWkuYy04MjYtXHRcdGludCByZXQgPSBleHQ0ZnNfZGlyaGFzaChkaXIsIGZuYW1lX25hbWUoZm5hbWUpLFxuLS1cbmZzL2V4dDQvbmFtZWkuYz0xMDM4PXN0YXRpYyBpbnQgaHRyZWVfZGlyYmxvY2tfdG9fdHJlZShzdHJ1Y3QgZmlsZSAqZGlyX2ZpbGUsXG4tLVxuZnMvZXh0NC9uYW1laS5jLTEwNjEtXHQvKiBDaGVjayBpZiB0aGUgZGlyZWN0b3J5IGlzIGVuY3J5cHRlZCAqL1xuZnMvZXh0NC9uYW1laS5jOjEwNjI6XHRpZiAoSVNfRU5DUllQVEVEKGRpcikpIHtcbmZzL2V4dDQvbmFtZWkuYy0xMDYzLVx0XHRlcnIgPSBmc2NyeXB0X3ByZXBhcmVfcmVhZGRpcihkaXIpO1xuLS1cbmZzL2V4dDQvbmFtZWkuYy0xMTA1LVx0XHRcdGNvbnRpbnVlO1xuZnMvZXh0NC9uYW1laS5jOjExMDY6XHRcdGlmICghSVNfRU5DUllQVEVEKGRpcikpIHtcbmZzL2V4dDQvbmFtZWkuYy0xMTA3LVx0XHRcdHRtcF9zdHIubmFtZSA9IGRlLVx1MDAzZW5hbWU7XG4tLVxuZnMvZXh0NC9uYW1laS5jPTEzNjI9aW50IGV4dDRfZm5hbWVfc2V0dXBfY2lfZmlsZW5hbWUoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICppbmFtZSxcbi0tXG5mcy9leHQ0L25hbWVpLmMtMTM3MC1cdGlmICghSVNfQ0FTRUZPTERFRChkaXIpIHx8XG5mcy9leHQ0L25hbWVpLmM6MTM3MTpcdCAgICAoSVNfRU5DUllQVEVEKGRpcikgXHUwMDI2XHUwMDI2ICFmc2NyeXB0X2hhc19lbmNyeXB0aW9uX2tleShkaXIpKSkge1xuZnMvZXh0NC9uYW1laS5jLTEzNzItXHRcdGNmX25hbWUtXHUwMDNlbmFtZSA9IE5VTEw7XG4tLVxuZnMvZXh0NC9uYW1laS5jLTEzODctXG5mcy9leHQ0L25hbWVpLmM6MTM4ODpcdGlmICghSVNfRU5DUllQVEVEKGRpcikpXG5mcy9leHQ0L25hbWVpLmMtMTM4OS1cdFx0cmV0dXJuIDA7XG4tLVxuZnMvZXh0NC9uYW1laS5jPTE0MDU9c3RhdGljIGJvb2wgZXh0NF9tYXRjaChzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbi0tXG5mcy9leHQ0L25hbWVpLmMtMTQyMS1cdGlmIChJU19DQVNFRk9MREVEKHBhcmVudCkgXHUwMDI2XHUwMDI2XG5mcy9leHQ0L25hbWVpLmM6MTQyMjpcdCAgICAoIUlTX0VOQ1JZUFRFRChwYXJlbnQpIHx8IGZzY3J5cHRfaGFzX2VuY3J5cHRpb25fa2V5KHBhcmVudCkpKSB7XG5mcy9leHQ0L25hbWVpLmMtMTQyMy1cdFx0LypcbmZzL2V4dDQvbmFtZWkuYzoxNDI0Olx0XHQgKiBKdXN0IGNoZWNraW5nIElTX0VOQ1JZUFRFRChwYXJlbnQpIGJlbG93IGlzIG5vdFxuZnMvZXh0NC9uYW1laS5jLTE0MjUtXHRcdCAqIHN1ZmZpY2llbnQgdG8gZGVjaWRlIHdoZXRoZXIgb25lIGNhbiB1c2UgdGhlIGhhc2ggZm9yXG4tLVxuZnMvZXh0NC9uYW1laS5jLTE0MzMtXHRcdGlmIChzYl9ub19jYXNlZm9sZF9jb21wYXRfZmFsbGJhY2socGFyZW50LVx1MDAzZWlfc2IpIFx1MDAyNlx1MDAyNlxuZnMvZXh0NC9uYW1laS5jOjE0MzQ6XHRcdCAgICBJU19FTkNSWVBURUQocGFyZW50KSBcdTAwMjZcdTAwMjYgZm5hbWUtXHUwMDNlY2ZfbmFtZS5uYW1lIFx1MDAyNlx1MDAyNlxuZnMvZXh0NC9uYW1laS5jLTE0MzUtXHRcdCAgICAoZm5hbWUtXHUwMDNlaGluZm8uaGFzaCAhPSBFWFQ0X0RJUkVOVF9IQVNIKGRlKSB8fFxuLS1cbmZzL2V4dDQvbmFtZWkuYz0xNzYyPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpleHQ0X2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4tLVxuZnMvZXh0NC9uYW1laS5jLTE3OTMtXHRcdH1cbmZzL2V4dDQvbmFtZWkuYzoxNzk0Olx0XHRpZiAoIUlTX0VSUihpbm9kZSkgXHUwMDI2XHUwMDI2IElTX0VOQ1JZUFRFRChkaXIpIFx1MDAyNlx1MDAyNlxuZnMvZXh0NC9uYW1laS5jLTE3OTUtXHRcdCAgICAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpIHx8IFNfSVNMTksoaW5vZGUtXHUwMDNlaV9tb2RlKSkgXHUwMDI2XHUwMDI2XG4tLVxuZnMvZXh0NC9uYW1laS5jPTMzNjM9c3RhdGljIGludCBleHQ0X3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL2V4dDQvbmFtZWkuYy0zNDA1LVxuZnMvZXh0NC9uYW1laS5jOjM0MDY6XHRpZiAoSVNfRU5DUllQVEVEKGlub2RlKSkge1xuZnMvZXh0NC9uYW1laS5jLTM0MDctXHRcdGVyciA9IGZzY3J5cHRfZW5jcnlwdF9zeW1saW5rKGlub2RlLCBzeW1uYW1lLCBsZW4sIFx1MDAyNmRpc2tfbGluayk7XG4tLVxuZnMvZXh0NC9uYW1laS5jLTM0MzAtXHRcdEVYVDRfSShpbm9kZSktXHUwMDNlaV9kaXNrc2l6ZSA9IGlub2RlLVx1MDAzZWlfc2l6ZTtcbmZzL2V4dDQvbmFtZWkuYzozNDMxOlx0XHRpZiAoIUlTX0VOQ1JZUFRFRChpbm9kZSkpXG5mcy9leHQ0L25hbWVpLmMtMzQzMi1cdFx0XHRpbm9kZV9zZXRfY2FjaGVkX2xpbmsoaW5vZGUsIChjaGFyICopXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX2RhdGEsXG4tLVxuZnMvZXh0NC9zdXBlci5jPTU4OTA9c3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF9nZXRfam91cm5hbF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvc3VwZXIuYy01OTEwLVx0fVxuZnMvZXh0NC9zdXBlci5jOjU5MTE6XHRpZiAoIVNfSVNSRUcoam91cm5hbF9pbm9kZS1cdTAwM2VpX21vZGUpIHx8IElTX0VOQ1JZUFRFRChqb3VybmFsX2lub2RlKSkge1xuZnMvZXh0NC9zdXBlci5jLTU5MTItXHRcdGV4dDRfbXNnKHNiLCBLRVJOX0VSUiwgXCYjMzQ7aW52YWxpZCBqb3VybmFsIGlub2RlXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTY6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzMzIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEV4dDQgRmlsZXN5c3RlbSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIGhlcmUgc2VlbSB0byBiZSBgRVhUNF9GU2AsIGBGU19FTkNSWVBUSU9OYCwgYW5kIGBVTklDT0RFYC4gVGhvc2UgYXJlIHRoZSBiYXNlbGluZSByZXF1aXJlbWVudHMuIEkgbmVlZCB0byBrZWVwIHRob3NlIGluIG1pbmQuCgpUaGUgZm9jYWwgcG9pbnQgb2YgdGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IGBleHQ0X3NlYXJjaF9kaXJgLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGlzIGZ1bmN0aW9uLiBCdXQgbGV0JiMzOTtzIHNlZSwgd2hhdCBlbHNlIGdldHMgdG91Y2hlZCBieSB0aGF0IGZ1bmN0aW9uPyBJdCBsb29rcyBsaWtlIGBleHQ0X3NlYXJjaF9kaXJgIGlzIGNhbGxlZCBieSBgc2VhcmNoX2RpcmJsb2NrYCBhbmQgYGV4dDRfZmluZF9pbmxpbmVfZW50cnlgLiBOb3csIGBzZWFyY2hfZGlyYmxvY2tgIGl0c2VsZiBpcyB1c2VkIGJ5IGBfX2V4dDRfZmluZF9lbnRyeWAgYW5kIGBleHQ0X2R4X2ZpbmRfZW50cnlgLiBBbmQgYGV4dDRfZmluZF9pbmxpbmVfZW50cnlgIGlzIGNhbGxlZCBieSBgX19leHQ0X2ZpbmRfZW50cnlgLiBTbywgYGV4dDRfc2VhcmNoX2RpcmAgaXMgdHJ1bHkgdGhlIGhlYXJ0IG9mIHRoaXMgY2hhbmdlLCBhbmQgdGhlIHByaW1hcnkgdGFyZ2V0IGZvciBmdXp6aW5nLiBNYWtlcyBzZW5zZS4KCkkgc2hvdWxkIGFsc28gbWFrZSBzdXJlIHRob3NlIGNvbmZpZ3MgYXJlIHNldCB1cCBjb3JyZWN0bHkuIExldCBtZSBkb3VibGUtY2hlY2suIGBDT05GSUdfRVhUNF9GU2AgaXMgdGhlIG9idmlvdXMgb25lLCB0aGUgY29yZSBmaWxlc3lzdGVtLiBgQ09ORklHX0ZTX0VOQ1JZUFRJT05gIGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudCBiZWNhdXNlIG9mIHRoYXQgYElTX0VOQ1JZUFRFRGAgY2hlY2sgSSBzYXcuIFRoZW4gdGhlcmUmIzM5O3MgYENPTkZJR19VTklDT0RFYCBmb3IgZGVhbGluZyB3aXRoIGBJU19DQVNFRk9MREVEYC4KCkFscmlnaHQsIEkgc2hvdWxkIGNoZWNrIGhvdyB0aGUgYGV4dDRfZGlyX3JlY19sZW5gIGlzIGFmZmVjdGVkIGJ5IHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE2OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfZGlyX3JlY19sZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2Rpci5jPTc5PWludCBfX2V4dDRfY2hlY2tfZGlyX2VudHJ5KGNvbnN0IGNoYXIgKmZ1bmN0aW9uLCB1bnNpZ25lZCBpbnQgbGluZSxcbi0tXG5mcy9leHQ0L2Rpci5jLTkxLVxuZnMvZXh0NC9kaXIuYzo5MjpcdGlmICh1bmxpa2VseShybGVuIFx1MDAzYyBleHQ0X2Rpcl9yZWNfbGVuKDEsIGZha2UgPyBOVUxMIDogZGlyKSkpXG5mcy9leHQ0L2Rpci5jLTkzLVx0XHRlcnJvcl9tc2cgPSBcJiMzNDtyZWNfbGVuIGlzIHNtYWxsZXIgdGhhbiBtaW5pbWFsXCYjMzQ7O1xuLS1cbmZzL2V4dDQvZGlyLmMtOTUtXHRcdGVycm9yX21zZyA9IFwmIzM0O3JlY19sZW4gJSA0ICE9IDBcJiMzNDs7XG5mcy9leHQ0L2Rpci5jOjk2Olx0ZWxzZSBpZiAodW5saWtlbHkocmxlbiBcdTAwM2MgZXh0NF9kaXJfcmVjX2xlbihkZS1cdTAwM2VuYW1lX2xlbixcbmZzL2V4dDQvZGlyLmMtOTctXHRcdFx0XHRcdFx0XHRmYWtlID8gTlVMTCA6IGRpcikpKVxuLS1cbmZzL2V4dDQvZGlyLmMtMTAwLVx0XHRlcnJvcl9tc2cgPSBcJiMzNDtkaXJlY3RvcnkgZW50cnkgb3ZlcnJ1blwmIzM0OztcbmZzL2V4dDQvZGlyLmM6MTAxOlx0ZWxzZSBpZiAodW5saWtlbHkobmV4dF9vZmZzZXQgXHUwMDNlIHNpemUgLSBleHQ0X2Rpcl9yZWNfbGVuKDEsXG5mcy9leHQ0L2Rpci5jLTEwMi1cdFx0XHRcdFx0XHQgIGhhc19jc3VtID8gTlVMTCA6IGRpcikgXHUwMDI2XHUwMDI2XG4tLVxuZnMvZXh0NC9kaXIuYz0xMzA9c3RhdGljIGludCBleHQ0X3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KVxuLS1cbmZzL2V4dDQvZGlyLmMtMjQ3LVx0XHRcdFx0aWYgKGV4dDRfcmVjX2xlbl9mcm9tX2Rpc2soZGUtXHUwMDNlcmVjX2xlbixcbmZzL2V4dDQvZGlyLmM6MjQ4Olx0XHRcdFx0XHRzYi1cdTAwM2VzX2Jsb2Nrc2l6ZSkgXHUwMDNjIGV4dDRfZGlyX3JlY19sZW4oMSxcbmZzL2V4dDQvZGlyLmMtMjQ5LVx0XHRcdFx0XHRcdFx0XHRcdGlub2RlKSlcbi0tXG5mcy9leHQ0L2V4dDQuaD0yNTMyPXN0cnVjdCBleHQ0X2Rpcl9lbnRyeV90YWlsIHtcbi0tXG5mcy9leHQ0L2V4dDQuaC0yNTc2LSAqL1xuZnMvZXh0NC9leHQ0Lmg6MjU3NzpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBleHQ0X2Rpcl9yZWNfbGVuKF9fdTggbmFtZV9sZW4sXG5mcy9leHQ0L2V4dDQuaC0yNTc4LVx0XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBpbm9kZSAqZGlyKVxuLS1cbmZzL2V4dDQvaW5saW5lLmM9MTA1MT1zdGF0aWMgaW50IGV4dDRfdXBkYXRlX2lubGluZV9kaXIoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xMDU3LVxuZnMvZXh0NC9pbmxpbmUuYzoxMDU4Olx0aWYgKG5ld19zaXplIC0gb2xkX3NpemUgXHUwMDNjPSBleHQ0X2Rpcl9yZWNfbGVuKDEsIE5VTEwpKVxuZnMvZXh0NC9pbmxpbmUuYy0xMDU5LVx0XHRyZXR1cm4gLUVOT1NQQztcbi0tXG5mcy9leHQ0L2lubGluZS5jPTEyNTg9aW50IGV4dDRfaW5saW5lZGlyX3RvX3RyZWUoc3RydWN0IGZpbGUgKmRpcl9maWxlLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTMxMS1cdFx0XHRmYWtlLnJlY19sZW4gPSBleHQ0X3JlY19sZW5fdG9fZGlzayhcbmZzL2V4dDQvaW5saW5lLmM6MTMxMjpcdFx0XHRcdFx0ICBleHQ0X2Rpcl9yZWNfbGVuKGZha2UubmFtZV9sZW4sIE5VTEwpLFxuZnMvZXh0NC9pbmxpbmUuYy0xMzEzLVx0XHRcdFx0XHQgIGlubGluZV9zaXplKTtcbi0tXG5mcy9leHQ0L2lubGluZS5jLTEzMjEtXHRcdFx0ZmFrZS5yZWNfbGVuID0gZXh0NF9yZWNfbGVuX3RvX2Rpc2soXG5mcy9leHQ0L2lubGluZS5jOjEzMjI6XHRcdFx0XHRcdCAgZXh0NF9kaXJfcmVjX2xlbihmYWtlLm5hbWVfbGVuLCBOVUxMKSxcbmZzL2V4dDQvaW5saW5lLmMtMTMyMy1cdFx0XHRcdFx0ICBpbmxpbmVfc2l6ZSk7XG4tLVxuZnMvZXh0NC9pbmxpbmUuYz0xMzc5PWludCBleHQ0X3JlYWRfaW5saW5lX2RpcihzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTE0MjktXHQgKi9cbmZzL2V4dDQvaW5saW5lLmM6MTQzMDpcdGRvdGRvdF9vZmZzZXQgPSBleHQ0X2Rpcl9yZWNfbGVuKDEsIE5VTEwpO1xuZnMvZXh0NC9pbmxpbmUuYzoxNDMxOlx0ZG90ZG90X3NpemUgPSBkb3Rkb3Rfb2Zmc2V0ICYjNDM7IGV4dDRfZGlyX3JlY19sZW4oMiwgTlVMTCk7XG5mcy9leHQ0L2lubGluZS5jLTE0MzItXHRleHRyYV9vZmZzZXQgPSBkb3Rkb3Rfc2l6ZSAtIEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFO1xuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTQ2NS1cdFx0XHRpZiAoZXh0NF9yZWNfbGVuX2Zyb21fZGlzayhkZS1cdTAwM2VyZWNfbGVuLCBleHRyYV9zaXplKVxuZnMvZXh0NC9pbmxpbmUuYzoxNDY2Olx0XHRcdFx0XHUwMDNjIGV4dDRfZGlyX3JlY19sZW4oMSwgTlVMTCkpXG5mcy9leHQ0L2lubGluZS5jLTE0NjctXHRcdFx0XHRicmVhaztcbi0tXG5mcy9leHQ0L25hbWVpLmM9NTc3PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgZHhfcm9vdF9saW1pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW5zaWduZWQgaW5mb3NpemUpXG4tLVxuZnMvZXh0NC9uYW1laS5jLTU3OS1cdHVuc2lnbmVkIGludCBlbnRyeV9zcGFjZSA9IGRpci1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplIC1cbmZzL2V4dDQvbmFtZWkuYzo1ODA6XHRcdFx0ZXh0NF9kaXJfcmVjX2xlbigxLCBOVUxMKSAtXG5mcy9leHQ0L25hbWVpLmM6NTgxOlx0XHRcdGV4dDRfZGlyX3JlY19sZW4oMiwgTlVMTCkgLSBpbmZvc2l6ZTtcbmZzL2V4dDQvbmFtZWkuYy01ODItXG4tLVxuZnMvZXh0NC9uYW1laS5jPTU4OD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGR4X25vZGVfbGltaXQoc3RydWN0IGlub2RlICpkaXIpXG4tLVxuZnMvZXh0NC9uYW1laS5jLTU5MC1cdHVuc2lnbmVkIGludCBlbnRyeV9zcGFjZSA9IGRpci1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplIC1cbmZzL2V4dDQvbmFtZWkuYzo1OTE6XHRcdFx0ZXh0NF9kaXJfcmVjX2xlbigwLCBkaXIpO1xuZnMvZXh0NC9uYW1laS5jLTU5Mi1cbi0tXG5mcy9leHQ0L25hbWVpLmM9NjIxPXN0YXRpYyBzdHJ1Y3Qgc3RhdHMgZHhfc2hvd19sZWFmKHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL2V4dDQvbmFtZWkuYy03MDAtXHRcdFx0fVxuZnMvZXh0NC9uYW1laS5jOjcwMTpcdFx0XHRzcGFjZSAmIzQzOz0gZXh0NF9kaXJfcmVjX2xlbihkZS1cdTAwM2VuYW1lX2xlbiwgZGlyKTtcbmZzL2V4dDQvbmFtZWkuYy03MDItXHRcdFx0bmFtZXMmIzQzOyYjNDM7O1xuLS1cbmZzL2V4dDQvbmFtZWkuYz0xMDM4PXN0YXRpYyBpbnQgaHRyZWVfZGlyYmxvY2tfdG9fdHJlZShzdHJ1Y3QgZmlsZSAqZGlyX2ZpbGUsXG4tLVxuZnMvZXh0NC9uYW1laS5jLTEwNTgtXHRcdFx0XHRcdCAgIGRpci1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplIC1cbmZzL2V4dDQvbmFtZWkuYzoxMDU5Olx0XHRcdFx0XHQgICBleHQ0X2Rpcl9yZWNfbGVuKDAsXG5mcy9leHQ0L25hbWVpLmMtMTA2MC1cdFx0XHRcdFx0XHRcdCAgIGNzdW0gPyBOVUxMIDogZGlyKSk7XG4tLVxuZnMvZXh0NC9uYW1laS5jPTE0NTY9aW50IGV4dDRfc2VhcmNoX2RpcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBjaGFyICpzZWFyY2hfYnVmLCBpbnQgYnVmX3NpemUsXG4tLVxuZnMvZXh0NC9uYW1laS5jLTE0NzAtXHRcdCAgICAoIWV4dDRfaGFzaF9pbl9kaXJlbnQoZGlyKSB8fFxuZnMvZXh0NC9uYW1laS5jOjE0NzE6XHRcdCAgICAgKGNoYXIgKilkZSAmIzQzOyBleHQ0X2Rpcl9yZWNfbGVuKGRlLVx1MDAzZW5hbWVfbGVuLCBkaXIpIFx1MDAzYz0gZGxpbWl0KSBcdTAwMjZcdTAwMjZcbmZzL2V4dDQvbmFtZWkuYy0xNDcyLVx0XHQgICAgZXh0NF9tYXRjaChkaXIsIGZuYW1lLCBkZSkpIHtcbi0tXG5mcy9leHQ0L25hbWVpLmM9MTg0Nj1keF9tb3ZlX2RpcmVudHMoc3RydWN0IGlub2RlICpkaXIsIGNoYXIgKmZyb20sIGNoYXIgKnRvLFxuLS1cbmZzL2V4dDQvbmFtZWkuYy0xODU0LVx0XHRcdFx0XHRcdChmcm9tICYjNDM7IChtYXAtXHUwMDNlb2Zmc1x1MDAzY1x1MDAzYzIpKTtcbmZzL2V4dDQvbmFtZWkuYzoxODU1Olx0XHRyZWNfbGVuID0gZXh0NF9kaXJfcmVjX2xlbihkZS1cdTAwM2VuYW1lX2xlbiwgZGlyKTtcbmZzL2V4dDQvbmFtZWkuYy0xODU2LVxuLS1cbmZzL2V4dDQvbmFtZWkuYz0xODc4PXN0YXRpYyBzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqZHhfcGFja19kaXJlbnRzKHN0cnVjdCBpbm9kZSAqZGlyLCBjaGFyICpiYXNlLFxuLS1cbmZzL2V4dDQvbmFtZWkuYy0xODg3LVx0XHRpZiAoZGUtXHUwMDNlaW5vZGUgXHUwMDI2XHUwMDI2IGRlLVx1MDAzZW5hbWVfbGVuKSB7XG5mcy9leHQ0L25hbWVpLmM6MTg4ODpcdFx0XHRyZWNfbGVuID0gZXh0NF9kaXJfcmVjX2xlbihkZS1cdTAwM2VuYW1lX2xlbiwgZGlyKTtcbmZzL2V4dDQvbmFtZWkuYy0xODg5LVx0XHRcdGlmIChkZSBcdTAwM2UgdG8pXG4tLVxuZnMvZXh0NC9uYW1laS5jPTIwMzc9aW50IGV4dDRfZmluZF9kZXN0X2RlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxuLS1cbmZzL2V4dDQvbmFtZWkuYy0yMDQyLVx0c3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKmRlO1xuZnMvZXh0NC9uYW1laS5jOjIwNDM6XHR1bnNpZ25lZCBzaG9ydCByZWNsZW4gPSBleHQ0X2Rpcl9yZWNfbGVuKGZuYW1lX2xlbihmbmFtZSksIGRpcik7XG5mcy9leHQ0L25hbWVpLmMtMjA0NC1cdGludCBubGVuLCBybGVuO1xuLS1cbmZzL2V4dDQvbmFtZWkuYy0yMDU1LVx0XHRcdHJldHVybiAtRUVYSVNUO1xuZnMvZXh0NC9uYW1laS5jOjIwNTY6XHRcdG5sZW4gPSBleHQ0X2Rpcl9yZWNfbGVuKGRlLVx1MDAzZW5hbWVfbGVuLCBkaXIpO1xuZnMvZXh0NC9uYW1laS5jLTIwNTctXHRcdHJsZW4gPSBleHQ0X3JlY19sZW5fZnJvbV9kaXNrKGRlLVx1MDAzZXJlY19sZW4sIGJ1Zl9zaXplKTtcbi0tXG5mcy9leHQ0L25hbWVpLmM9MjA3MD12b2lkIGV4dDRfaW5zZXJ0X2RlbnRyeShzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9leHQ0L25hbWVpLmMtMjA3OC1cbmZzL2V4dDQvbmFtZWkuYzoyMDc5Olx0bmxlbiA9IGV4dDRfZGlyX3JlY19sZW4oZGUtXHUwMDNlbmFtZV9sZW4sIGRpcik7XG5mcy9leHQ0L25hbWVpLmMtMjA4MC1cdHJsZW4gPSBleHQ0X3JlY19sZW5fZnJvbV9kaXNrKGRlLVx1MDAzZXJlY19sZW4sIGJ1Zl9zaXplKTtcbi0tXG5mcy9leHQ0L25hbWVpLmM9MjIxMT1zdGF0aWMgaW50IG1ha2VfaW5kZXhlZF9kaXIoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGV4dDRfZmlsZW5hbWUgKmZuYW1lLFxuLS1cbmZzL2V4dDQvbmFtZWkuYy0yMjg0LVx0ZGUtXHUwMDNlcmVjX2xlbiA9IGV4dDRfcmVjX2xlbl90b19kaXNrKFxuZnMvZXh0NC9uYW1laS5jOjIyODU6XHRcdFx0YmxvY2tzaXplIC0gZXh0NF9kaXJfcmVjX2xlbigyLCBOVUxMKSwgYmxvY2tzaXplKTtcbmZzL2V4dDQvbmFtZWkuYy0yMjg2LVx0bWVtc2V0IChcdTAwMjZyb290LVx1MDAzZWluZm8sIDAsIHNpemVvZihyb290LVx1MDAzZWluZm8pKTtcbi0tXG5mcy9leHQ0L25hbWVpLmM9MjkyNT1pbnQgZXh0NF9pbml0X2RpcmJsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9uYW1laS5jLTI5MzctXHRkZS1cdTAwM2VuYW1lX2xlbiA9IDE7XG5mcy9leHQ0L25hbWVpLmM6MjkzODpcdGRlLVx1MDAzZXJlY19sZW4gPSBleHQ0X3JlY19sZW5fdG9fZGlzayhleHQ0X2Rpcl9yZWNfbGVuKGRlLVx1MDAzZW5hbWVfbGVuLCBOVUxMKSxcbmZzL2V4dDQvbmFtZWkuYy0yOTM5LVx0XHRcdFx0XHQgICBibG9ja3NpemUpO1xuLS1cbmZzL2V4dDQvbmFtZWkuYy0yOTQ5LVx0XHRkZS1cdTAwM2VyZWNfbGVuID0gZXh0NF9yZWNfbGVuX3RvX2Rpc2soXG5mcy9leHQ0L25hbWVpLmM6Mjk1MDpcdFx0XHRcdFx0ZXh0NF9kaXJfcmVjX2xlbihkZS1cdTAwM2VuYW1lX2xlbiwgTlVMTCksXG5mcy9leHQ0L25hbWVpLmMtMjk1MS1cdFx0XHRcdFx0YmxvY2tzaXplKTtcbi0tXG5mcy9leHQ0L25hbWVpLmMtMjk1OC1cdFx0ZGUtXHUwMDNlcmVjX2xlbiA9IGV4dDRfcmVjX2xlbl90b19kaXNrKGJsb2Nrc2l6ZSAtXG5mcy9leHQ0L25hbWVpLmM6Mjk1OTpcdFx0XHRcdFx0KGNzdW1fc2l6ZSAmIzQzOyBleHQ0X2Rpcl9yZWNfbGVuKDEsIE5VTEwpKSxcbmZzL2V4dDQvbmFtZWkuYy0yOTYwLVx0XHRcdFx0XHRibG9ja3NpemUpO1xuLS1cbmZzL2V4dDQvbmFtZWkuYz0zMDY1PWJvb2wgZXh0NF9lbXB0eV9kaXIoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L25hbWVpLmMtMzA4MS1cdHNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbmZzL2V4dDQvbmFtZWkuYzozMDgyOlx0aWYgKGlub2RlLVx1MDAzZWlfc2l6ZSBcdTAwM2MgZXh0NF9kaXJfcmVjX2xlbigxLCBOVUxMKSAmIzQzO1xuZnMvZXh0NC9uYW1laS5jOjMwODM6XHRcdFx0XHRcdGV4dDRfZGlyX3JlY19sZW4oMiwgTlVMTCkpIHtcbmZzL2V4dDQvbmFtZWkuYy0zMDg0LVx0XHRFWFQ0X0VSUk9SX0lOT0RFKGlub2RlLCBcJiMzNDtpbnZhbGlkIHNpemVcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzkzMAoJCQkJCQkJb3V0cHV0OiAxNTEKCQkJCQkJCXRob3VnaHRzOiAyMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXNzZXNzbWVudCBvZiB0aGUgcGF0Y2gsIGRpc3RpbGxlZCBpbnRvIG15IGN1cnJlbnQgdGhpbmtpbmc6CgoqKlBhdGNoIEFuYWx5c2lzOiBgZXh0NF9zZWFyY2hfZGlyYCBCdWcgRml4KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdGFyZ2V0aW5nIGEgcHJldHR5IGNyaXRpY2FsIGlzc3VlIHdpdGhpbiB0aGUgYGV4dDRfc2VhcmNoX2RpcmAgZnVuY3Rpb24uIFRoZSBjb3JlIHByb2JsZW0gaXMgcmVsYXRlZCB0byBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gU3BlY2lmaWNhbGx5LCB0aGUgY29kZSB3YXMgdnVsbmVyYWJsZSBiZWNhdXNlIGBleHQ0X2hhc2hfaW5fZGlyZW50KGRpcilgIGNvdWxkIGJlIHRydWUsIGJ1dCB0aGUgZGlyZWN0b3J5IGVudHJ5IGxlbmd0aCB3YXNuJiMzOTt0IGFsd2F5cyBwcm9wZXJseSB2YWxpZGF0ZWQgYmVmb3JlIGFjY2Vzc2luZyBtZW1vcnkuIFRoaXMgY291bGQgbGVhZCB0byBhIGNyYXNoLCB3aGljaCBpcyBuZXZlciBhIGdvb2QgdGhpbmcuCgpUaGUgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQgYXJlIGBFWFQ0X0ZTYCwgYEZTX0VOQ1JZUFRJT05gLCBhbmQgYFVOSUNPREVgLCBub3RoaW5nIHRvbyBzdXJwcmlzaW5nIGdpdmVuIHRoZSBjb250ZXh0LiBUaGUgY3J1Y2lhbCBzeW1ib2wgaGVyZSwgdGhlIHBvaW50IG9mIGZvY3VzLCBpcyBkZWZpbml0ZWx5IGBleHQ0X3NlYXJjaF9kaXJgLgoKTGV0IG1lIHF1aWNrbHkgcmUtZXhhbWluZSB0aGUgY29kZSBzbmlwcGV0LCBtYWtpbmcgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZpeDoKCmBgYGMKIAkJaWYgKGRlLSZndDtuYW1lICYjNDM7IGRlLSZndDtuYW1lX2xlbiAmbHQ7PSBkbGltaXQgJmFtcDsmYW1wOwomIzQzOwkJICAgICghZXh0NF9oYXNoX2luX2RpcmVudChkaXIpIHx8CiYjNDM7CQkgICAgIChjaGFyICopZGUgJiM0MzsgZXh0NF9kaXJfcmVjX2xlbihkZS0mZ3Q7bmFtZV9sZW4sIGRpcikgJmx0Oz0gZGxpbWl0KSAmYW1wOyZhbXA7CiAJCSAgICBleHQ0X21hdGNoKGRpciwgZm5hbWUsIGRlKSkgewpgYGAKCkFoLCByaWdodC4gVGhlIGFkZGl0aW9uIGlzIGNsZWFyOiBpdCBub3cgKmV4cGxpY2l0bHkqIGNoZWNrcyB0aGUgbGVuZ3RoIG9mIHRoZSBkaXJlY3RvcnkgZW50cnkuIEl0IGFkZHMgYSBtb3JlIHJvYnVzdCBjaGVjazogYChjaGFyICopZGUgJiM0MzsgZXh0NF9kaXJfcmVjX2xlbihkZS0mZ3Q7bmFtZV9sZW4sIGRpcikgJmx0Oz0gZGxpbWl0YC4gIFRoaXMgdmVyaWZpZXMgdGhhdCB0aGUgY2FsY3VsYXRlZCBtZW1vcnkgcmVnaW9uIG9mIHRoZSBkaXJlY3RvcnkgZW50cnkgaXMgd2l0aGluIHRoZSBhbGxvd2FibGUgYGRsaW1pdGAgYm91bmRhcnksIHByZXZlbnRpbmcgdGhhdCBvdXQtb2YtYm91bmRzIHJlYWQuIFRoaXMgcHJvdGVjdHMgYWdhaW5zdCB0aGUgY2FzZXMgd2hlcmUgYGV4dDRfaGFzaF9pbl9kaXJlbnQoZGlyKWAgbWlnaHQgaGF2ZSB0cmlnZ2VyZWQgdGhlIHByb2JsZW0uCgpUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGRpcmVjdGx5IGFkZHJlc3NlcyB0aGUgdnVsbmVyYWJpbGl0eS4gR29vZCBjYXRjaCwgYW5kIHRoZSBmaXggc2VlbXMgYXBwcm9wcmlhdGUuIExldCYjMzk7cyBtYXJrIHRoaXMgYXMgZG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTY6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7RlNfRU5DUllQVElPTiYjMzQ7LAogICAgJiMzNDtVTklDT0RFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9zZWFyY2hfZGlyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gZXh0NF9zZWFyY2hfZGlyIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd2hlbiBleHQ0X2hhc2hfaW5fZGlyZW50IGlzIHRydWUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGV4dDQgZGlyZWN0b3J5IHNlYXJjaGluZyBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4gVGhlIGV4dDRfaGFzaF9pbl9kaXJlbnQgZnVuY3Rpb24gcmVxdWlyZXMgY2FzZWZvbGRpbmcgYW5kIGVuY3J5cHRpb24gdG8gYmUgZW5hYmxlZCwgc28gd2UgbmVlZCBFWFQ0X0ZTLCBGU19FTkNSWVBUSU9OLCBhbmQgVU5JQ09ERSBjb25maWdzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDssCiAgICAmIzM0O0ZTX0VOQ1JZUFRJT04mIzM0OywKICAgICYjMzQ7VU5JQ09ERSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfc2VhcmNoX2RpciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIGV4dDRfc2VhcmNoX2RpciB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzIHdoZW4gZXh0NF9oYXNoX2luX2RpcmVudCBpcyB0cnVlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBleHQ0IGRpcmVjdG9yeSBzZWFyY2hpbmcgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuIFRoZSBleHQ0X2hhc2hfaW5fZGlyZW50IGZ1bmN0aW9uIHJlcXVpcmVzIGNhc2Vmb2xkaW5nIGFuZCBlbmNyeXB0aW9uIHRvIGJlIGVuYWJsZWQsIHNvIHdlIG5lZWQgRVhUNF9GUywgRlNfRU5DUllQVElPTiwgYW5kIFVOSUNPREUgY29uZmlncy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE1OjU4OjU2LjAyNDc3NDgyMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTQ5MTE1MTg3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCIsXG4gICAgXCJGU19FTkNSWVBUSU9OXCIsXG4gICAgXCJVTklDT0RFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9zZWFyY2hfZGlyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBpbiBleHQ0X3NlYXJjaF9kaXIgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIGFjY2VzcyB3aGVuIGV4dDRfaGFzaF9pbl9kaXJlbnQgaXMgdHJ1ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgZXh0NCBkaXJlY3Rvcnkgc2VhcmNoaW5nIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiBUaGUgZXh0NF9oYXNoX2luX2RpcmVudCBmdW5jdGlvbiByZXF1aXJlcyBjYXNlZm9sZGluZyBhbmQgZW5jcnlwdGlvbiB0byBiZSBlbmFibGVkLCBzbyB3ZSBuZWVkIEVYVDRfRlMsIEZTX0VOQ1JZUFRJT04sIGFuZCBVTklDT0RFIGNvbmZpZ3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE1OjU4OjU2LjAyNDc3OTc3MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ3NDIyNzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMGI1Y2E3NTJmYjFmODM3MTk4NTA2ZDJjNDk2ZGQ5YzhmNThkMTM3ZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAxMCAxNTo1ODo1NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L25hbWVpLmMgYi9mcy9leHQ0L25hbWVpLmNcXG5pbmRleCBjYzQ5YWUwNGE2ZjY0OS4uM2I5NzQwYzFjMTZkOGMgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC9uYW1laS5jXFxuKysrIGIvZnMvZXh0NC9uYW1laS5jXFxuQEAgLTE0NjcsNiArMTQ2Nyw4IEBAIGludCBleHQ0X3NlYXJjaF9kaXIoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgY2hhciAqc2VhcmNoX2J1ZiwgaW50IGJ1Zl9zaXplLFxcbiBcXHRcXHQvKiB0aGlzIGNvZGUgaXMgZXhlY3V0ZWQgcXVhZHJhdGljYWxseSBvZnRlbiAqL1xcbiBcXHRcXHQvKiBkbyBtaW5pbWFsIGNoZWNraW5nIGBieSBoYW5kJyAqL1xcbiBcXHRcXHRpZiAoZGUtXFx1MDAzZW5hbWUgKyBkZS1cXHUwMDNlbmFtZV9sZW4gXFx1MDAzYz0gZGxpbWl0IFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAoIWV4dDRfaGFzaF9pbl9kaXJlbnQoZGlyKSB8fFxcbitcXHRcXHQgICAgIChjaGFyICopZGUgKyBleHQ0X2Rpcl9yZWNfbGVuKGRlLVxcdTAwM2VuYW1lX2xlbiwgZGlyKSBcXHUwMDNjPSBkbGltaXQpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICBleHQ0X21hdGNoKGRpciwgZm5hbWUsIGRlKSkge1xcbiBcXHRcXHRcXHQvKiBmb3VuZCBhIG1hdGNoIC0ganVzdCB0byBiZSBzdXJlLCBkb1xcbiBcXHRcXHRcXHQgKiBhIGZ1bGwgY2hlY2sgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTU6NTg6NTYuNDczMTIyODM0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzEwNDI3OTM3NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiLFxuICAgIFwiRlNfRU5DUllQVElPTlwiLFxuICAgIFwiVU5JQ09ERVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfc2VhcmNoX2RpclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gZXh0NF9zZWFyY2hfZGlyIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd2hlbiBleHQ0X2hhc2hfaW5fZGlyZW50IGlzIHRydWUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGV4dDQgZGlyZWN0b3J5IHNlYXJjaGluZyBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4gVGhlIGV4dDRfaGFzaF9pbl9kaXJlbnQgZnVuY3Rpb24gcmVxdWlyZXMgY2FzZWZvbGRpbmcgYW5kIGVuY3J5cHRpb24gdG8gYmUgZW5hYmxlZCwgc28gd2UgbmVlZCBFWFQ0X0ZTLCBGU19FTkNSWVBUSU9OLCBhbmQgVU5JQ09ERSBjb25maWdzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDBiNWNhNzUyZmIxZjgzNzE5ODUwNmQyYzQ5NmRkOWM4ZjU4ZDEzN2RcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAxMCAxNTo1ODo1NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbmFtZWkuYyBiL2ZzL2V4dDQvbmFtZWkuY1xuaW5kZXggY2M0OWFlMDRhNmY2NDkuLjNiOTc0MGMxYzE2ZDhjIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9uYW1laS5jXG4rKysgYi9mcy9leHQ0L25hbWVpLmNcbkBAIC0xNDY3LDYgKzE0NjcsOCBAQCBpbnQgZXh0NF9zZWFyY2hfZGlyKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGNoYXIgKnNlYXJjaF9idWYsIGludCBidWZfc2l6ZSxcbiBcdFx0LyogdGhpcyBjb2RlIGlzIGV4ZWN1dGVkIHF1YWRyYXRpY2FsbHkgb2Z0ZW4gKi9cbiBcdFx0LyogZG8gbWluaW1hbCBjaGVja2luZyBgYnkgaGFuZCcgKi9cbiBcdFx0aWYgKGRlLVx1MDAzZW5hbWUgKyBkZS1cdTAwM2VuYW1lX2xlbiBcdTAwM2M9IGRsaW1pdCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICghZXh0NF9oYXNoX2luX2RpcmVudChkaXIpIHx8XG4rXHRcdCAgICAgKGNoYXIgKilkZSArIGV4dDRfZGlyX3JlY19sZW4oZGUtXHUwMDNlbmFtZV9sZW4sIGRpcikgXHUwMDNjPSBkbGltaXQpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgZXh0NF9tYXRjaChkaXIsIGZuYW1lLCBkZSkpIHtcbiBcdFx0XHQvKiBmb3VuZCBhIG1hdGNoIC0ganVzdCB0byBiZSBzdXJlLCBkb1xuIFx0XHRcdCAqIGEgZnVsbCBjaGVjayAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTU6NTg6NTYuNDczMTI0MjA0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcwODUwNTM1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGV4dDQgRGlyZWN0b3J5IFNlYXJjaCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBmcy9leHQ0L25hbWVpLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGNoYW5nZXMgaW4gYGV4dDRfc2VhcmNoX2RpcmAuIEl0IGxvb2tzIGxpa2Ugd2UndmUgYWRkZWQgYSBjaGVjayB3aXRoaW4gdGhlIGBpZmAgc3RhdGVtZW50IHRvIGhhbmRsZSBhIHNjZW5hcmlvIHJlbGF0ZWQgdG8gZGlyZWN0b3J5IGVudHJ5IGhhc2hpbmcuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgdGhpczpcblxuYGBgY1xuIFx0XHRpZiAoZGUtXHUwMDNlbmFtZSArIGRlLVx1MDAzZW5hbWVfbGVuIFx1MDAzYz0gZGxpbWl0IFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgKCFleHQ0X2hhc2hfaW5fZGlyZW50KGRpcikgfHxcbitcdFx0ICAgICAoY2hhciAqKWRlICsgZXh0NF9kaXJfcmVjX2xlbihkZS1cdTAwM2VuYW1lX2xlbiwgZGlyKSBcdTAwM2M9IGRsaW1pdCkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBleHQ0X21hdGNoKGRpciwgZm5hbWUsIGRlKSkge1xuYGBgXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgYSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiB0byB0aGUgZXh0NCBkaXJlY3Rvcnkgc2VhcmNoaW5nIGxvZ2ljLiBUaGUgZXh0cmEgY29uZGl0aW9uIGlzIHRvIHByb3RlY3QgYWdhaW5zdCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBvciBvdGhlciBtZW1vcnkgYWNjZXNzIGVycm9ycy4gVGhlIGFkZGl0aW9uIGNoZWNrcyB0byBzZWUgaWYgIGBleHQ0X2hhc2hfaW5fZGlyZW50KGRpcilgIGlzIHRydWUuIElmIGl0IGlzLCB0aGUgY29kZSBtYWtlcyBzdXJlIHRoYXQgYGRlICsgZXh0NF9kaXJfcmVjX2xlbihkZS1cdTAwM2VuYW1lX2xlbiwgZGlyKWAgc3RheXMgd2l0aGluIHRoZSBkaXJlY3RvcnkncyBib3VuZHMsIHNwZWNpZmljYWxseSB1cCB0byBgZGxpbWl0YC4gVGhpcyBpcyBhIHNlbnNpYmxlIHByZWNhdXRpb24sIGxpa2VseSBhZGRyZXNzaW5nIGEgcHJldmlvdXNseSB1bmhhbmRsZWQgZWRnZSBjYXNlIG9yIHZ1bG5lcmFiaWxpdHkgd2hlbiBkZWFsaW5nIHdpdGggaGFzaGVkIGRpcmVjdG9yeSBlbnRyaWVzLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBleHQ0X3NlYXJjaF9kaXJgIGFuZCB0aGUgYGV4dDRfaGFzaF9pbl9kaXJlbnRgIGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIHByZWNpc2UgY29udGV4dCBhbmQgd2hhdCBraW5kIG9mIHByb2JsZW0gdGhpcyBmaXhlcy4gSSB3aWxsIGFsc28gaGF2ZSB0byBsb29rIGZvciBhbnkgaW1wYWN0IG9uIHBlcmZvcm1hbmNlLCBvciBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZWJhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4ODUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNTo1OTowMS4xODE2MzEyMTlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTkyOTgxMzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfc2VhcmNoX2RpclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L25hbWVpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9uYW1laS5jPTEyNjI9c3RhdGljIGlubGluZSBpbnQgc2VhcmNoX2RpcmJsb2NrKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtMTI2Ny17XFxuZnMvZXh0NC9uYW1laS5jOjEyNjg6XFx0cmV0dXJuIGV4dDRfc2VhcmNoX2RpcihiaCwgYmgtXFx1MDAzZWJfZGF0YSwgZGlyLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSwgZGlyLFxcbmZzL2V4dDQvbmFtZWkuYy0xMjY5LVxcdFxcdFxcdCAgICAgICBmbmFtZSwgb2Zmc2V0LCByZXNfZGlyKTtcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYz0xNDA1PXN0YXRpYyBib29sIGV4dDRfbWF0Y2goc3RydWN0IGlub2RlICpwYXJlbnQsXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtMTQ1NS0gKi9cXG5mcy9leHQ0L25hbWVpLmM6MTQ1NjppbnQgZXh0NF9zZWFyY2hfZGlyKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGNoYXIgKnNlYXJjaF9idWYsIGludCBidWZfc2l6ZSxcXG5mcy9leHQ0L25hbWVpLmMtMTQ1Ny1cXHRcXHQgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBleHQ0X2ZpbGVuYW1lICpmbmFtZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTU6NTk6MDIuMTc0NjE5MzI4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk5ODUwMDQ0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlIHdoYXQgSSBjYW4gZ2F0aGVyIGZyb20gdGhpcy5cblxuKipUcmFjaW5nIHRoZSBVc2FnZSBvZiBleHQ0X3NlYXJjaF9kaXIqKlxuXG5SaWdodCwgc28gdGhlIGBleHQ0X3NlYXJjaF9kaXJgIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBgc2VhcmNoX2RpcmJsb2NrYCBhbmQgcG9zc2libHkgYnkgb3RoZXIgZnVuY3Rpb25zLCB0b28uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSBvZiBob3cgYGV4dDRfc2VhcmNoX2RpcmAgaXMgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbSBjb2RlLiBLbm93aW5nIHRoYXQgYHNlYXJjaF9kaXJibG9ja2AgY2FsbHMgaXQgaXMgYSBzdGFydGluZyBwb2ludCwgYnV0IEkgbmVlZCB0byBrbm93IHRoZSAqZW50aXJlKiBjYWxsIGdyYXBoLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgdGhlIHBvaW50cyBpbiB0aGUgY29kZSB3aGVyZSBpdCdzIGludm9rZWQuIFRoaXMgaXMgd2hlcmUgYSBnb29kIGNyb3NzLXJlZmVyZW5jZSB0b29sIG9yIGRlYnVnZ2VyIGlzIGludmFsdWFibGUuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxlcnMgd2lsbCBpbGx1bWluYXRlIGhvdyB0aGUgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIGRpcmVjdG9yeSBsb29rdXAgcHJvY2VzcyBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgaXQgaGFzIGZvciBwZXJmb3JtYW5jZSBhbmQgY29ycmVjdG5lc3MuIFRpbWUgdG8gaW52ZXN0aWdhdGUgZnVydGhlciBhbmQgc2VlIHdoZXJlIGVsc2UgaXQncyBiZWluZyB1c2VkLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MTgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNTo1OTowNS4xNzMxMjI0NDlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkwNzcyODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfc2VhcmNoX2RpclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2V4dDQuaD0zMjM4PWV4dGVybiBpbnQgZXh0NF9odHJlZV9maWxsX3RyZWUoc3RydWN0IGZpbGUgKmRpcl9maWxlLCBfX3UzMiBzdGFydF9oYXNoLFxcbmZzL2V4dDQvZXh0NC5oLTMyMzktXFx0XFx0XFx0XFx0X191MzIgc3RhcnRfbWlub3JfaGFzaCwgX191MzIgKm5leHRfaGFzaCk7XFxuZnMvZXh0NC9leHQ0Lmg6MzI0MDpleHRlcm4gaW50IGV4dDRfc2VhcmNoX2RpcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxcbmZzL2V4dDQvZXh0NC5oLTMyNDEtXFx0XFx0XFx0ICAgY2hhciAqc2VhcmNoX2J1ZixcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9MTU5Mj1zdHJ1Y3QgYnVmZmVyX2hlYWQgKmV4dDRfZmluZF9pbmxpbmVfZW50cnkoc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTE2MjUtXFx0aW5saW5lX3NpemUgPSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFIC0gRVhUNF9JTkxJTkVfRE9URE9UX1NJWkU7XFxuZnMvZXh0NC9pbmxpbmUuYzoxNjI2OlxcdHJldCA9IGV4dDRfc2VhcmNoX2Rpcihpcy5pbG9jLmJoLCBpbmxpbmVfc3RhcnQsIGlubGluZV9zaXplLFxcbmZzL2V4dDQvaW5saW5lLmMtMTYyNy1cXHRcXHRcXHQgICAgICBkaXIsIGZuYW1lLCAwLCByZXNfZGlyKTtcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMTYzOC1cXG5mcy9leHQ0L2lubGluZS5jOjE2Mzk6XFx0cmV0ID0gZXh0NF9zZWFyY2hfZGlyKGlzLmlsb2MuYmgsIGlubGluZV9zdGFydCwgaW5saW5lX3NpemUsXFxuZnMvZXh0NC9pbmxpbmUuYy0xNjQwLVxcdFxcdFxcdCAgICAgIGRpciwgZm5hbWUsIDAsIHJlc19kaXIpO1xcbi0tXFxuZnMvZXh0NC9uYW1laS5jPTEyNjI9c3RhdGljIGlubGluZSBpbnQgc2VhcmNoX2RpcmJsb2NrKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtMTI2Ny17XFxuZnMvZXh0NC9uYW1laS5jOjEyNjg6XFx0cmV0dXJuIGV4dDRfc2VhcmNoX2RpcihiaCwgYmgtXFx1MDAzZWJfZGF0YSwgZGlyLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSwgZGlyLFxcbmZzL2V4dDQvbmFtZWkuYy0xMjY5LVxcdFxcdFxcdCAgICAgICBmbmFtZSwgb2Zmc2V0LCByZXNfZGlyKTtcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYz0xNDA1PXN0YXRpYyBib29sIGV4dDRfbWF0Y2goc3RydWN0IGlub2RlICpwYXJlbnQsXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtMTQ1NS0gKi9cXG5mcy9leHQ0L25hbWVpLmM6MTQ1NjppbnQgZXh0NF9zZWFyY2hfZGlyKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGNoYXIgKnNlYXJjaF9idWYsIGludCBidWZfc2l6ZSxcXG5mcy9leHQ0L25hbWVpLmMtMTQ1Ny1cXHRcXHQgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBleHQ0X2ZpbGVuYW1lICpmbmFtZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTU6NTk6MDUuNDYzOTAwMjU5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0NDMyMjk5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gZnV6emluZyBgZXh0NF9zZWFyY2hfZGlyYC5cblxuKipGdXp6aW5nIHRoZSBleHQ0IERpcmVjdG9yeSBTZWFyY2gqKlxuXG5BbHJpZ2h0LCBzbyBgZXh0NF9zZWFyY2hfZGlyYCBpcyB0aGUga2V5IGZ1bmN0aW9uIHdpdGhpbiB0aGUgZXh0NCBmaWxlc3lzdGVtIHRoYXQgaGFuZGxlcyBzZWFyY2hpbmcgZGlyZWN0b3JpZXMuIENvbnNpZGVyaW5nIGl0cyByb2xlIGluIGRpcmVjdG9yeSB0cmF2ZXJzYWwsIGl0J3MgcHJhY3RpY2FsbHkgc2NyZWFtaW5nIGZvciBhIGZ1enppbmcgY2FtcGFpZ24uIFRoaXMgZmVlbHMgbGlrZSBhIGhpZ2gtdmFsdWUgdGFyZ2V0LiBNeSBmb2N1cyBpcyBsYXNlci10YXJnZXRlZCBvbiB0aGUgYGV4dDRfc2VhcmNoX2RpcmAgc3ltYm9sIGl0c2VsZi5cblxuTm93LCBiZWZvcmUgSSBkaXZlIGluIGhlYWRmaXJzdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgYWxsIHRoZSBuZWNlc3NhcnkgcHV6emxlIHBpZWNlcy4gVGhlIGBFWFQ0X0ZTYCBjb25maWcgaXMgZGVmaW5pdGVseSBpbiBwbGF5LCBidXQgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGVyZSBtaWdodCBiZSBzb21lIGxlc3Mgb2J2aW91cyBkZXBlbmRlbmNpZXMgbHVya2luZyBhcm91bmQgdGhhdCBjYW4gdHJpcCB1cCB0aGUgZnV6emluZyBwcm9jZXNzIGxhdGVyLiBJIG5lZWQgdG8gdGFrZSBhIHF1aWNrIGxvb2sgdG8gaWRlbnRpZnkgYW55IG90aGVyIHBvdGVudGlhbGx5IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIG9yIHByZS1jb25kaXRpb25zIHRoYXQgbmVlZCB0byBiZSBtZXQuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbiBldmVuIGJlIHJlYWNoZWQgd2l0aCB0aGUgc3RhbmRhcmQgY29uZmlncy4gSSdsbCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGRlcGVuZGVudCBmZWF0dXJlcyB0aGF0IGFyZSByZXF1aXJlZCwgYnV0IGNvdWxkIGJlIGRpc2FibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjA2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTU6NTk6MDguNzA4MjI1NjQ4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0MjM4MjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBFWFQ0X0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9leHQ0L0tjb25maWc6Mjpjb25maWcgRVhUNF9GU1xcbmZzL2V4dDQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVxcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZz0zNT1jb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy00NS1cXG5mcy9leHQ0L0tjb25maWc6NDY6Y29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMXFxuZnMvZXh0NC9LY29uZmlnLTQ3LVxcdGJvb2wgXFxcIkV4dDQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNTUtXFxuZnMvZXh0NC9LY29uZmlnOjU2OmNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXFxuZnMvZXh0NC9LY29uZmlnLTU3LVxcdGJvb2wgXFxcIkV4dDQgU2VjdXJpdHkgTGFiZWxzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNTo1OTowOC44MDI0NjkyMzFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTU1Mjc1MDc0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgZXh0NF9zZWFyY2hfZGlyYCBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHR3ZWFraW5nIGBleHQ0X3NlYXJjaF9kaXJgIHdpdGhpbiBgZnMvZXh0NC9uYW1laS5jYC4gSXQgbG9va3MgbGlrZSBpdCdzIGFkZGluZyBhIGNydWNpYWwgYm91bmRzIGNoZWNrIHdpdGhpbiB0aGUgZGlyZWN0b3J5IHNlYXJjaGluZyBsb2dpYywgcmlnaHQgaGVyZTpcblxuYGBgY1xuXHRcdGlmIChkZS1cdTAwM2VuYW1lICsgZGUtXHUwMDNlbmFtZV9sZW4gXHUwMDNjPSBkbGltaXQgXHUwMDI2XHUwMDI2XG5cdFx0ICAgICghZXh0NF9oYXNoX2luX2RpcmVudChkaXIpIHx8XG5cdFx0ICAgICAoY2hhciAqKWRlICsgZXh0NF9kaXJfcmVjX2xlbihkZS1cdTAwM2VuYW1lX2xlbiwgZGlyKSBcdTAwM2M9IGRsaW1pdCkgXHUwMDI2XHUwMDI2XG5cdFx0ICAgIGV4dDRfbWF0Y2goZGlyLCBmbmFtZSwgZGUpKSB7XG5gYGBcblxuTXkgaW5pdGlhbCB0aG91Z2h0PyBUaGlzIGlzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSB0byBob3cgd2Ugc2VhcmNoIGV4dDQgZGlyZWN0b3JpZXMuIFRoZSBhZGRlZCBjaGVjayBzZWVtcyB0byBzcGVjaWZpY2FsbHkgcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHNpbWlsYXIgdnVsbmVyYWJpbGl0aWVzIHdoZW4gdGhlIGBleHQ0X2hhc2hfaW5fZGlyZW50KGRpcilgIGNvbmRpdGlvbiBpcyBtZXQuIFRoaXMgaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIHRoaW5nIHRoYXQgY2FuIGxlYWQgdG8gc3VidGxlIGJ1dCBleHBsb2l0YWJsZSBpc3N1ZXMgaW4gYSBmaWxlIHN5c3RlbS4gV2UncmUgdGFsa2luZyBhYm91dCBtb2RpZmljYXRpb25zIHRvIGRpcmVjdG9yeSBzZWFyY2hpbmcsIGFuZCB3ZSBrbm93IHRoYXQgYGV4dDRfc2VhcmNoX2RpcmAgaXMgY2FsbGVkIGJ5IGJvdGggYHNlYXJjaF9kaXJibG9ja2AgYW5kIGBleHQ0X2ZpbmRfaW5saW5lX2VudHJ5YCwgc28gdGhpcyBoYXMgYSBicm9hZCBpbXBhY3QuXG5cbkdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBidWdzLCB0aGlzIGlzIGRlZmluaXRlbHkgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRoZSBrZXkgc3ltYm9sIHRvIGZvY3VzIG9uIGlzLCB3aXRob3V0IGEgZG91YnQsIGBleHQ0X3NlYXJjaF9kaXJgIGl0c2VsZi4gSSdsbCBuZWVkIHRvIG1ha2Ugc3VyZSBteSBmdXp6aW5nIHNldHVwIGlzIHRhcmdldGluZyB0aGF0IGZ1bmN0aW9uIGRpcmVjdGx5IGFuZCBoYXMgdGhlIHJpZ2h0IGluc3RydW1lbnRhdGlvbi5cblxuTm93LCBiZWZvcmUgSSBkaXZlIGRlZXAgaW50byBjcmFmdGluZyBmdXp6IGNhc2VzLCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nLiBJIHdhbnQgdG8gc2VlIGlmIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMsIG9yIEtjb25maWdzLCBhcmUgYXNzb2NpYXRlZCB3aXRoIGBleHQ0X2hhc2hfaW5fZGlyZW50YCBvciBvdGhlciBzaW1pbGFyIGZlYXR1cmVzIGluIHRoZSBleHQ0IGNvZGUuIFRoaXMgY291bGQgaW5mbHVlbmNlIG15IGZ1enppbmcgc3RyYXRlZ3k7IEkgbmVlZCB0byBrbm93IGFib3V0IGFueSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBmZWF0dXJlIGZsYWdzLiBUaGUgYEVYVDRfRlNgIGNvbmZpZyBpcyBkZWZpbml0ZWx5IHJlbGV2YW50IGhlcmUsIGJ1dCBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgbW9yZSBzcGVjaWZpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg1MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNjowMDowOC4zNTUyMjE4ODJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjQ5NjMyNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9oYXNoX2luX2RpcmVudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2V4dDQuaD0yNTA0PXN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yIHtcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTI1MjItXFxuZnMvZXh0NC9leHQ0Lmg6MjUyMzpzdGF0aWMgaW5saW5lIGJvb2wgZXh0NF9oYXNoX2luX2RpcmVudChjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2V4dDQvZXh0NC5oLTI1MjQte1xcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9MjU3Nz1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBleHQ0X2Rpcl9yZWNfbGVuKF9fdTggbmFtZV9sZW4sXFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0yNTgxLVxcbmZzL2V4dDQvZXh0NC5oOjI1ODI6XFx0aWYgKGRpciBcXHUwMDI2XFx1MDAyNiBleHQ0X2hhc2hfaW5fZGlyZW50KGRpcikpXFxuZnMvZXh0NC9leHQ0LmgtMjU4My1cXHRcXHRyZWNfbGVuICs9IHNpemVvZihzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfaGFzaCk7XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTEyNTg9aW50IGV4dDRfaW5saW5lZGlyX3RvX3RyZWUoc3RydWN0IGZpbGUgKmRpcl9maWxlLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xMzM3LVxcbmZzL2V4dDQvaW5saW5lLmM6MTMzODpcXHRcXHRpZiAoZXh0NF9oYXNoX2luX2RpcmVudChkaXIpKSB7XFxuZnMvZXh0NC9pbmxpbmUuYy0xMzM5LVxcdFxcdFxcdGhpbmZvLVxcdTAwM2VoYXNoID0gRVhUNF9ESVJFTlRfSEFTSChkZSk7XFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9Nzc4PWR4X3Byb2JlKHN0cnVjdCBleHQ0X2ZpbGVuYW1lICpmbmFtZSwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtODAzLVxcdH1cXG5mcy9leHQ0L25hbWVpLmM6ODA0OlxcdGlmIChleHQ0X2hhc2hfaW5fZGlyZW50KGRpcikpIHtcXG5mcy9leHQ0L25hbWVpLmMtODA1LVxcdFxcdGlmIChyb290LVxcdTAwM2VpbmZvLmhhc2hfdmVyc2lvbiAhPSBEWF9IQVNIX1NJUEhBU0gpIHtcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYz0xMDM4PXN0YXRpYyBpbnQgaHRyZWVfZGlyYmxvY2tfdG9fdHJlZShzdHJ1Y3QgZmlsZSAqZGlyX2ZpbGUsXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtMTA4My1cXHRcXHR9XFxuZnMvZXh0NC9uYW1laS5jOjEwODQ6XFx0XFx0aWYgKGV4dDRfaGFzaF9pbl9kaXJlbnQoZGlyKSkge1xcbmZzL2V4dDQvbmFtZWkuYy0xMDg1LVxcdFxcdFxcdGlmIChkZS1cXHUwMDNlbmFtZV9sZW4gXFx1MDAyNlxcdTAwMjYgZGUtXFx1MDAzZWlub2RlKSB7XFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9MTE1MT1pbnQgZXh0NF9odHJlZV9maWxsX3RyZWUoc3RydWN0IGZpbGUgKmRpcl9maWxlLCBfX3UzMiBzdGFydF9oYXNoLFxcbi0tXFxuZnMvZXh0NC9uYW1laS5jLTExNjctXFx0aWYgKCEoZXh0NF90ZXN0X2lub2RlX2ZsYWcoZGlyLCBFWFQ0X0lOT0RFX0lOREVYKSkpIHtcXG5mcy9leHQ0L25hbWVpLmM6MTE2ODpcXHRcXHRpZiAoZXh0NF9oYXNoX2luX2RpcmVudChkaXIpKVxcbmZzL2V4dDQvbmFtZWkuYy0xMTY5LVxcdFxcdFxcdGhpbmZvLmhhc2hfdmVyc2lvbiA9IERYX0hBU0hfU0lQSEFTSDtcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYz0xMjgwPXN0YXRpYyBpbnQgZHhfbWFrZV9tYXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtMTI5OC1cXHRcXHRpZiAoZGUtXFx1MDAzZW5hbWVfbGVuIFxcdTAwMjZcXHUwMDI2IGRlLVxcdTAwM2Vpbm9kZSkge1xcbmZzL2V4dDQvbmFtZWkuYzoxMjk5OlxcdFxcdFxcdGlmIChleHQ0X2hhc2hfaW5fZGlyZW50KGRpcikpXFxuZnMvZXh0NC9uYW1laS5jLTEzMDAtXFx0XFx0XFx0XFx0aC5oYXNoID0gRVhUNF9ESVJFTlRfSEFTSChkZSk7XFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9MTQ1Nj1pbnQgZXh0NF9zZWFyY2hfZGlyKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGNoYXIgKnNlYXJjaF9idWYsIGludCBidWZfc2l6ZSxcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYy0xNDY5LVxcdFxcdGlmIChkZS1cXHUwMDNlbmFtZSArIGRlLVxcdTAwM2VuYW1lX2xlbiBcXHUwMDNjPSBkbGltaXQgXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L25hbWVpLmM6MTQ3MDpcXHRcXHQgICAgKCFleHQ0X2hhc2hfaW5fZGlyZW50KGRpcikgfHxcXG5mcy9leHQ0L25hbWVpLmMtMTQ3MS1cXHRcXHQgICAgIChjaGFyICopZGUgKyBleHQ0X2Rpcl9yZWNfbGVuKGRlLVxcdTAwM2VuYW1lX2xlbiwgZGlyKSBcXHUwMDNjPSBkbGltaXQpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9MjA3MD12b2lkIGV4dDRfaW5zZXJ0X2RlbnRyeShzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYy0yMDkyLVxcdG1lbWNweShkZS1cXHUwMDNlbmFtZSwgZm5hbWVfbmFtZShmbmFtZSksIGZuYW1lX2xlbihmbmFtZSkpO1xcbmZzL2V4dDQvbmFtZWkuYzoyMDkzOlxcdGlmIChleHQ0X2hhc2hfaW5fZGlyZW50KGRpcikpIHtcXG5mcy9leHQ0L25hbWVpLmMtMjA5NC1cXHRcXHRzdHJ1Y3QgZHhfaGFzaF9pbmZvICpoaW5mbyA9IFxcdTAwMjZmbmFtZS1cXHUwMDNlaGluZm87XFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9MjIxMT1zdGF0aWMgaW50IG1ha2VfaW5kZXhlZF9kaXIoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGV4dDRfZmlsZW5hbWUgKmZuYW1lLFxcbi0tXFxuZnMvZXh0NC9uYW1laS5jLTIyODctXFx0cm9vdC1cXHUwMDNlaW5mby5pbmZvX2xlbmd0aCA9IHNpemVvZihyb290LVxcdTAwM2VpbmZvKTtcXG5mcy9leHQ0L25hbWVpLmM6MjI4ODpcXHRpZiAoZXh0NF9oYXNoX2luX2RpcmVudChkaXIpKVxcbmZzL2V4dDQvbmFtZWkuYy0yMjg5LVxcdFxcdHJvb3QtXFx1MDAzZWluZm8uaGFzaF92ZXJzaW9uID0gRFhfSEFTSF9TSVBIQVNIO1xcbi0tXFxuZnMvZXh0NC9uYW1laS5jLTIzMDUtXFx0LyogY2FzZWZvbGRlZCBlbmNyeXB0ZWQgaGFzaGVzIGFyZSBjb21wdXRlZCBvbiBmbmFtZSBzZXR1cCAqL1xcbmZzL2V4dDQvbmFtZWkuYzoyMzA2OlxcdGlmICghZXh0NF9oYXNoX2luX2RpcmVudChkaXIpKSB7XFxuZnMvZXh0NC9uYW1laS5jLTIzMDctXFx0XFx0aW50IGVyciA9IGV4dDRmc19kaXJoYXNoKGRpciwgZm5hbWVfbmFtZShmbmFtZSksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE2OjAwOjA5LjQ4MDE5Mzk4OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjI1OTY5OTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIGl0IGxvb2tzIGxpa2UgSSdtIGxvb2tpbmcgYXQgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGlubGluZSBmdW5jdGlvbi5cblxuKipBbmFseXppbmcgYSBTaW1wbGUgZXh0NCBJbmxpbmUgRnVuY3Rpb24qKlxuXG5TbywgdGhpcyBgZXh0NF9oYXNoX2luX2RpcmVudGAgZnVuY3Rpb24gaXMganVzdCBhIHF1aWNrIGZsYWcgY2hlY2ssIHVzaW5nIHNvbWV0aGluZyBha2luIHRvIGBleHQ0X3Rlc3RfaW5vZGVfZmxhZ2AuIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoYXQgcGF0dGVybjsgaXQncyBhIGNvbW1vbiBhcHByb2FjaCBmb3IgY2hlY2tpbmcgaW5vZGUgbWV0YWRhdGEuIEl0J3MgZGVzaWduZWQgdG8gYmUgZWZmaWNpZW50LCBhcyBpdCdzIGFuIGBpbmxpbmVgIGZ1bmN0aW9uLCBwcmVzdW1hYmx5IHRvIGF2b2lkIHRoZSBvdmVyaGVhZCBvZiBhIGZ1bmN0aW9uIGNhbGwgd2hlbiBmcmVxdWVudGx5IGFjY2Vzc2VkLiBNeSBjdXJpb3NpdHkgaXMgc3BhcmtlZDsgSSBzaG91bGQgZGl2ZSBkZWVwZXIgaW50byB3aGVyZSBgZXh0NF90ZXN0X2lub2RlX2ZsYWdgIGlzIGRlZmluZWQgdG8gdW5kZXJzdGFuZCAqcHJlY2lzZWx5KiB3aGF0IGZsYWcgaXMgYmVpbmcgdGVzdGVkIGhlcmUsIHNwZWNpZmljYWxseSBgRVhUNF9JTk9ERV9FQV9JTk9ERWAsIGJ1dCBJIHN1c3BlY3QgaXQgcmVsYXRlcyB0byB0aGUgaGFuZGxpbmcgb2YgZXh0ZW5kZWQgYXR0cmlidXRlcyB3aXRoaW4gdGhlIGRpcmVjdG9yeSBlbnRyeS4gVGltZSB0byB0cmFjayBkb3duIHRoYXQgYGV4dDRfdGVzdF9pbm9kZV9mbGFnYCBkZWZpbml0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjM1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTY6MDA6MTMuMTA2MTY2ODNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxOTI4ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRpYyBpbmxpbmUgYm9vbCBleHQ0X2hhc2hfaW5fZGlyZW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZXh0NC5oPTI1MDQ9c3RydWN0IGV4dDRfZGlyX2VudHJ5XzIge1xcbi0tXFxuZnMvZXh0NC9leHQ0LmgtMjUyMi1cXG5mcy9leHQ0L2V4dDQuaDoyNTIzOnN0YXRpYyBpbmxpbmUgYm9vbCBleHQ0X2hhc2hfaW5fZGlyZW50KGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvZXh0NC9leHQ0LmgtMjUyNC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE2OjAwOjEzLjE2ODEwMTE0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIxNjQwNzU5Mjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6NjA0OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTY6MDA6MzQuODA4ODYzMTg3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0Mzg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L2V4dDQuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAyNTIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNTIwOlxcdCNkZWZpbmUgRVhUNF9ESVJFTlRfTUlOT1JfSEFTSChlbnRyeSkgXFxcXFxcbjI1MjE6XFx0XFx0XFx0bGUzMl90b19jcHUoRVhUNF9ESVJFTlRfSEFTSEVTKGVudHJ5KS1cXHUwMDNlbWlub3JfaGFzaClcXG4yNTIyOlxcdFxcbjI1MjM6XFx0c3RhdGljIGlubGluZSBib29sIGV4dDRfaGFzaF9pbl9kaXJlbnQoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcXG4yNTI0OlxcdHtcXG4yNTI1OlxcdFxcdHJldHVybiBJU19DQVNFRk9MREVEKGlub2RlKSBcXHUwMDI2XFx1MDAyNiBJU19FTkNSWVBURUQoaW5vZGUpO1xcbjI1MjY6XFx0fVxcbjI1Mjc6XFx0XFxuMjUyODpcXHQvKlxcbjI1Mjk6XFx0ICogVGhpcyBpcyBhIGJvZ3VzIGRpcmVjdG9yeSBlbnRyeSBhdCB0aGUgZW5kIG9mIGVhY2ggbGVhZiBibG9jayB0aGF0XFxuMjUzMDpcXHQgKiByZWNvcmRzIGNoZWNrc3Vtcy5cXG4yNTMxOlxcdCAqL1xcbjI1MzI6XFx0c3RydWN0IGV4dDRfZGlyX2VudHJ5X3RhaWwge1xcbjI1MzM6XFx0XFx0X19sZTMyXFx0ZGV0X3Jlc2VydmVkX3plcm8xO1xcdC8qIFByZXRlbmQgdG8gYmUgdW51c2VkICovXFxuMjUzNDpcXHRcXHRfX2xlMTZcXHRkZXRfcmVjX2xlbjtcXHRcXHQvKiAxMiAqL1xcbjI1MzU6XFx0XFx0X191OFxcdGRldF9yZXNlcnZlZF96ZXJvMjtcXHQvKiBaZXJvIG5hbWUgbGVuZ3RoICovXFxuMjUzNjpcXHRcXHRfX3U4XFx0ZGV0X3Jlc2VydmVkX2Z0O1xcdC8qIDB4REUsIGZha2UgZmlsZSB0eXBlICovXFxuMjUzNzpcXHRcXHRfX2xlMzJcXHRkZXRfY2hlY2tzdW07XFx0XFx0LyogY3JjMzJjKHV1aWQraW51bStkaXJibG9jaykgKi9cXG4yNTM4OlxcdH07XFxuMjUzOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTY6MDA6MzQuODA5MTA5NjY3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MzI5MTczNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGVjb2RpbmcgdGhlIElub2RlIFJlcXVpcmVtZW50cyoqXG5cblJpZ2h0LCBsZXQncyBzZWUsIHdoYXQgYXJlIHdlIGRlYWxpbmcgd2l0aCBoZXJlLi4uIGBJU19DQVNFRk9MREVEKGlub2RlKSBcdTAwMjZcdTAwMjYgSVNfRU5DUllQVEVEKGlub2RlKWAuIEVzc2VudGlhbGx5LCB0aGlzIGlub2RlICptdXN0KiBiZSBjYXNlZm9sZGVkICphbmQqIGVuY3J5cHRlZC4gVGhhdCdzIHRoZSBjb3JlIHJlcXVpcmVtZW50LiBPa2F5LCB1bmRlcnN0b29kLiBMZXQncyBzZWUgaG93IHRoaXMgdGllcyBpbnRvIHRoZSBjb25maWdzLlxuXG5Ob3csIHdoaWNoIGZlYXR1cmVzIG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyB0byBiZSB2YWxpZD8gV2UgaGF2ZSB0byBoYXZlIGBFWFQ0X0ZTYCBhcyB0aGUgYmFzZSBmaWxlc3lzdGVtLCBvZiBjb3Vyc2UuIFRoZW4gd2UgaGF2ZSBgRVhUNF9GU19FTkNSWVBUSU9OYC4gSG1tLCB3YWl0IGEgc2Vjb25kLCBJIHRoaW5rIHRoYXQncyBiZWVuIHN0cmVhbWxpbmVkLiBJICpiZWxpZXZlKiBpdCdzIGp1c3QgYEZTX0VOQ1JZUFRJT05gIG5vd2FkYXlzLiBHb3R0YSBjb25maXJtIHRoYXQuIEFuZCBzaW5jZSB3ZSBoYXZlIGNhc2Vmb2xkaW5nIHRvIGRlYWwgd2l0aCwgd2UnbGwgbmVlZCBgVU5JQ09ERWAgZW5hYmxlZC4gQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZm9yIGV4dDQgYW5kIGNvbmZpcm0gdGhvc2UgZGVwZW5kZW5jaWVzIGFuZCB0aGVpciBzcGVjaWZpYyBtZWFuaW5ncyB0byBiZSBzdXJlLiBJdCdzIHRpbWUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlc2UgYXNzdW1wdGlvbnMgYXJlIHNvbGlkIGJlZm9yZSBtb3ZpbmcgYW55IGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwNjUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE2OjAwOjM4Ljc0MjAyOTM4N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA2ODQyMDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBFWFQ0X0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9leHQ0L0tjb25maWc6Mjpjb25maWcgRVhUNF9GU1xcbmZzL2V4dDQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVxcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZz0zNT1jb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy00NS1cXG5mcy9leHQ0L0tjb25maWc6NDY6Y29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMXFxuZnMvZXh0NC9LY29uZmlnLTQ3LVxcdGJvb2wgXFxcIkV4dDQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNTUtXFxuZnMvZXh0NC9LY29uZmlnOjU2OmNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXFxuZnMvZXh0NC9LY29uZmlnLTU3LVxcdGJvb2wgXFxcIkV4dDQgU2VjdXJpdHkgTGFiZWxzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNjowMDozOS4wNDg4Nzg3MDRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjE0NDM4OTMwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjc2MzgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE2OjAwOjQxLjE5MzI3MDM5M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgRVhUNF9GU1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlRoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXFxcIlxcbiAgIDQ6XFx0XFx0c2VsZWN0IEJVRkZFUl9IRUFEXFxuICAgNTpcXHRcXHRzZWxlY3QgSkJEMlxcbiAgIDY6XFx0XFx0c2VsZWN0IENSQzE2XFxuICAgNzpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gICA4OlxcdFxcdHNlbGVjdCBGU19JT01BUFxcbiAgIDk6XFx0XFx0c2VsZWN0IEZTX0VOQ1JZUFRJT05fQUxHUyBpZiBGU19FTkNSWVBUSU9OXFxuICAxMDpcXHRcXHRoZWxwXFxuICAxMTpcXHRcXHQgIFRoaXMgaXMgdGhlIG5leHQgZ2VuZXJhdGlvbiBvZiB0aGUgZXh0MyBmaWxlc3lzdGVtLlxcbiAgMTI6XFx0XFxuICAxMzpcXHRcXHQgIFVubGlrZSB0aGUgY2hhbmdlIGZyb20gZXh0MiBmaWxlc3lzdGVtIHRvIGV4dDMgZmlsZXN5c3RlbSxcXG4gIDE0OlxcdFxcdCAgdGhlIG9uLWRpc2sgZm9ybWF0IG9mIGV4dDQgaXMgbm90IGZvcndhcmRzIGNvbXBhdGlibGUgd2l0aFxcbiAgMTU6XFx0XFx0ICBleHQzOyBpdCBpcyBiYXNlZCBvbiBleHRlbnQgbWFwcyBhbmQgaXQgc3VwcG9ydHMgNDgtYml0XFxuICAxNjpcXHRcXHQgIHBoeXNpY2FsIGJsb2NrIG51bWJlcnMuICBUaGUgZXh0NCBmaWxlc3lzdGVtIGFsc28gc3VwcG9ydHMgZGVsYXllZFxcbiAgMTc6XFx0XFx0ICBhbGxvY2F0aW9uLCBwZXJzaXN0ZW50IHByZWFsbG9jYXRpb24sIGhpZ2ggcmVzb2x1dGlvbiB0aW1lIHN0YW1wcyxcXG4gIDE4OlxcdFxcdCAgYW5kIGEgbnVtYmVyIG9mIG90aGVyIGZlYXR1cmVzIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UgYW5kIHNwZWVkXFxuICAxOTpcXHRcXHQgIHVwIGZzY2sgdGltZS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2Ugc2VlIHRoZSB3ZWIgcGFnZXMgYXRcXG4gIDIwOlxcdFxcdCAgaHR0cDovL2V4dDQud2lraS5rZXJuZWwub3JnLlxcbiAgMjE6XFx0XFxuICAyMjpcXHRcXHQgIFRoZSBleHQ0IGZpbGVzeXN0ZW0gc3VwcG9ydHMgbW91bnRpbmcgYW4gZXh0MyBmaWxlc3lzdGVtOyB3aGlsZSB0aGVyZVxcbiAgMjM6XFx0XFx0ICBhcmUgc29tZSBwZXJmb3JtYW5jZSBnYWlucyBmcm9tIHRoZSBkZWxheWVkIGFsbG9jYXRpb24gYW5kIGlub2RlXFxuICAyNDpcXHRcXHQgIHRhYmxlIHJlYWRhaGVhZCwgdGhlIGJlc3QgcGVyZm9ybWFuY2UgZ2FpbnMgcmVxdWlyZSBlbmFibGluZyBleHQ0XFxuICAyNTpcXHRcXHQgIGZlYXR1cmVzIGluIHRoZSBmaWxlc3lzdGVtIHVzaW5nIHR1bmUyZnMsIG9yIGZvcm1hdHRpbmcgYSBuZXdcXG4gIDI2OlxcdFxcdCAgZmlsZXN5c3RlbSBhcyBhbiBleHQ0IGZpbGVzeXN0ZW0gaW5pdGlhbGx5LiBXaXRob3V0IGV4cGxpY2l0IGVuYWJsaW5nXFxuICAyNzpcXHRcXHQgIG9mIGV4dDQgZmVhdHVyZXMsIHRoZSBvbiBkaXNrIGZpbGVzeXN0ZW0gZm9ybWF0IHN0YXlzIGZ1bGx5IGJhY2t3YXJkXFxuICAyODpcXHRcXHQgIGNvbXBhdGlibGUuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZVxcbiAgMzE6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZXh0NC5cXG4gIDMyOlxcdFxcbiAgMzM6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRjb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcXG4gIDM2OlxcdFxcdGJvb2wgXFxcIlVzZSBleHQ0IGZvciBleHQyIGZpbGUgc3lzdGVtc1xcXCJcXG4gIDM3OlxcdFxcdGRlcGVuZHMgb24gRVhUNF9GU1xcbiAgMzg6XFx0XFx0ZGVwZW5kcyBvbiBFWFQyX0ZTPW5cXG4gIDM5OlxcdFxcdGRlZmF1bHQgeVxcbiAgNDA6XFx0XFx0aGVscFxcbiAgNDE6XFx0XFx0ICBBbGxvdyB0aGUgZXh0NCBmaWxlIHN5c3RlbSBkcml2ZXIgY29kZSB0byBiZSB1c2VkIGZvciBleHQyXFxuICA0MjpcXHRcXHQgIGZpbGUgc3lzdGVtIG1vdW50cy4gIFRoaXMgYWxsb3dzIHVzZXJzIHRvIHJlZHVjZSB0aGVpclxcbiAgNDM6XFx0XFx0ICBjb21waWxlZCBrZXJuZWwgc2l6ZSBieSB1c2luZyBvbmUgZmlsZSBzeXN0ZW0gZHJpdmVyIGZvclxcbiAgNDQ6XFx0XFx0ICBleHQyLCBleHQzLCBhbmQgZXh0NCBmaWxlIHN5c3RlbXMuXFxuICA0NTpcXHRcXG4gIDQ2OlxcdGNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxcbiAgNDc6XFx0XFx0Ym9vbCBcXFwiRXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4gIDQ4OlxcdFxcdGRlcGVuZHMgb24gRVhUNF9GU1xcbiAgNDk6XFx0XFx0c2VsZWN0IEZTX1BPU0lYX0FDTFxcbiAgNTA6XFx0XFx0aGVscFxcbiAgNTE6XFx0XFx0ICBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0cyAoQUNMcykgc3VwcG9ydCBwZXJtaXNzaW9ucyBmb3IgdXNlcnMgYW5kXFxuICA1MjpcXHRcXHQgIGdyb3VwcyBiZXlvbmQgdGhlIG93bmVyL2dyb3VwL3dvcmxkIHNjaGVtZS5cXG4gIDUzOlxcdFxcbiAgNTQ6XFx0XFx0ICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IEFjY2VzcyBDb250cm9sIExpc3RzIGFyZSwgc2F5IE5cXG4gIDU1OlxcdFxcbiAgNTY6XFx0Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcXG4gIDU3OlxcdFxcdGJvb2wgXFxcIkV4dDQgU2VjdXJpdHkgTGFiZWxzXFxcIlxcbiAgNTg6XFx0XFx0ZGVwZW5kcyBvbiBFWFQ0X0ZTXFxuICA1OTpcXHRcXHRoZWxwXFxuICA2MDpcXHRcXHQgIFNlY3VyaXR5IGxhYmVscyBzdXBwb3J0IGFsdGVybmF0aXZlIGFjY2VzcyBjb250cm9sIG1vZGVsc1xcbiAgNjE6XFx0XFx0ICBpbXBsZW1lbnRlZCBieSBzZWN1cml0eSBtb2R1bGVzIGxpa2UgU0VMaW51eC4gIFRoaXMgb3B0aW9uXFxuICA2MjpcXHRcXHQgIGVuYWJsZXMgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIGhhbmRsZXIgZm9yIGZpbGUgc2VjdXJpdHlcXG4gIDYzOlxcdFxcdCAgbGFiZWxzIGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uXFxuICA2NDpcXHRcXG4gIDY1OlxcdFxcdCAgSWYgeW91IGFyZSBub3QgdXNpbmcgYSBzZWN1cml0eSBtb2R1bGUgdGhhdCByZXF1aXJlcyB1c2luZ1xcbiAgNjY6XFx0XFx0ICBleHRlbmRlZCBhdHRyaWJ1dGVzIGZvciBmaWxlIHNlY3VyaXR5IGxhYmVscywgc2F5IE4uXFxuICA2NzpcXHRcXG4gIDY4OlxcdGNvbmZpZyBFWFQ0X0RFQlVHXFxuICA2OTpcXHRcXHRib29sIFxcXCJFeHQ0IGRlYnVnZ2luZyBzdXBwb3J0XFxcIlxcbiAgNzA6XFx0XFx0ZGVwZW5kcyBvbiBFWFQ0X0ZTXFxuICA3MTpcXHRcXHRoZWxwXFxuICA3MjpcXHRcXHQgIEVuYWJsZXMgcnVuLXRpbWUgZGVidWdnaW5nIHN1cHBvcnQgZm9yIHRoZSBleHQ0IGZpbGVzeXN0ZW0uXFxuICA3MzpcXHRcXG4gIDc0OlxcdFxcdCAgSWYgeW91IHNlbGVjdCBZIGhlcmUsIHRoZW4geW91IHdpbGwgYmUgYWJsZSB0byB0dXJuIG9uIGRlYnVnZ2luZ1xcbiAgNzU6XFx0XFx0ICB1c2luZyBkeW5hbWljIGRlYnVnIGNvbnRyb2wgZm9yIG1iX2RlYnVnKCkgLyBleHRfZGVidWcoKSBtc2dzLlxcbiAgNzY6XFx0XFxuICA3NzpcXHRjb25maWcgRVhUNF9LVU5JVF9URVNUU1xcbiAgNzg6XFx0XFx0dHJpc3RhdGUgXFxcIktVbml0IHRlc3RzIGZvciBleHQ0XFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICA3OTpcXHRcXHRkZXBlbmRzIG9uIEVYVDRfRlMgXFx1MDAyNlxcdTAwMjYgS1VOSVRcXG4gIDgwOlxcdFxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuICA4MTpcXHRcXHRoZWxwXFxuICA4MjpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBleHQ0IEtVbml0IHRlc3RzLlxcbiAgODM6XFx0XFxuICA4NDpcXHRcXHQgIEtVbml0IHRlc3RzIHJ1biBkdXJpbmcgYm9vdCBhbmQgb3V0cHV0IHRoZSByZXN1bHRzIHRvIHRoZSBkZWJ1ZyBsb2dcXG4gIDg1OlxcdFxcdCAgaW4gVEFQIGZvcm1hdCAoaHR0cHM6Ly90ZXN0YW55dGhpbmcub3JnLykuIE9ubHkgdXNlZnVsIGZvciBrZXJuZWwgZGV2c1xcbiAgODY6XFx0XFx0ICBydW5uaW5nIEtVbml0IHRlc3QgaGFybmVzcyBhbmQgYXJlIG5vdCBmb3IgaW5jbHVzaW9uIGludG8gYSBwcm9kdWN0aW9uXFxuICA4NzpcXHRcXHQgIGJ1aWxkLlxcbiAgODg6XFx0XFxuICA4OTpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwgcGxlYXNlIHJlZmVyXFxuICA5MDpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uIGluIERvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0Ly5cXG4gIDkxOlxcdFxcbiAgOTI6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNjowMDo0MS4xOTMzNTE4MDNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk0MzEzMjkzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBDb25maWd1cmF0aW9uIFBhcmFtZXRlcnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyBmb2N1c2VkIG9uIHRoZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgd2UncmUgZGVhbGluZyB3aXRoLiBUaGUgdGVybSBgRlNfRU5DUllQVElPTmAgaW5zdGFudGx5IGZsYWdzIHRoZSBmaWxlIHN5c3RlbSBlbmNyeXB0aW9uIHNldHRpbmcsIHdoaWNoIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIE15IG5leHQgdGhvdWdodCBqdW1wcyBkaXJlY3RseSB0byBgVU5JQ09ERWAuIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoaXMgYXMgYmVpbmcgbGlua2VkIHRvIGNoYXJhY3RlciBjYXNlZm9sZGluZy4gSXQncyB0aW1lIHRvIGRpZyBkZWVwZXIgYW5kIGludmVzdGlnYXRlIHRoZSBjb25maWd1cmF0aW9uIGRldGFpbHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBgVU5JQ09ERWAgc2V0dGluZy4gTGV0J3Mgc2VlIHdoYXQncyBzcGVjaWZpZWQsIGFuZCBjb25zaWRlciBpbXBsaWNhdGlvbnMgZm9yIHRoZSBvdmVyYWxsIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTg5LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNjowMDo0NC4xMzY0ODc0NTRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwMzI5NTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBVTklDT0RFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy91bmljb2RlL0tjb25maWctNC0jXFxuZnMvdW5pY29kZS9LY29uZmlnOjU6Y29uZmlnIFVOSUNPREVcXG5mcy91bmljb2RlL0tjb25maWctNi1cXHR0cmlzdGF0ZSBcXFwiVVRGLTggbm9ybWFsaXphdGlvbiBhbmQgY2FzZWZvbGRpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL3VuaWNvZGUvS2NvbmZpZy0xMi1cXG5mcy91bmljb2RlL0tjb25maWc6MTM6Y29uZmlnIFVOSUNPREVfTk9STUFMSVpBVElPTl9LVU5JVF9URVNUXFxuZnMvdW5pY29kZS9LY29uZmlnLTE0LVxcdHRyaXN0YXRlIFxcXCJUZXN0IFVURi04IG5vcm1hbGl6YXRpb24gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTY6MDA6NDQuMjI2ODIyMDk4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3OTcyOTgxOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipEZWNvZGluZyB0aGUgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIEkndmUgZ290IGl0LiBgVU5JQ09ERWAgaXMgdGhlIGtleSBzZXR0aW5nIGluIHRoaXMgY29uZmlndXJhdGlvbiB0aGF0IGRlYWxzIHdpdGggY2FzZWZvbGRpbmcuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0J3MgdGhlIG1vc3QgbGlrZWx5IG9uZS4gU28sIHRvIHJlY2FwLCB0aGUgaW1wb3J0YW50IGNvbmZpZ3VyYXRpb25zIGludm9sdmVkIGhlcmUgYXJlIGBFWFQ0X0ZTYCwgYEZTX0VOQ1JZUFRJT05gLCBhbmQgYFVOSUNPREVgLlxuXG5Ob3csIEkgc2hvdWxkIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSByZWxhdGlvbnNoaXAgd2l0aCBgZXh0NF9oYXNoX2luX2RpcmVudGAgYW5kIGFsc28gYElTX0NBU0VGT0xERURgLiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSBmdWxsIHBpY3R1cmUgaGVyZSBhbmQgYXJlIG5vdCBtaXNzaW5nIGFueSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzAwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTY6MDA6NDcuMDI0MTIyNzQ0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTk2NTAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJJU19DQVNFRk9MREVEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZGlyLmM9MTMwPXN0YXRpYyBpbnQgZXh0NF9yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcXG4tLVxcbmZzL2V4dDQvZGlyLmMtMjg5LVxcbmZzL2V4dDQvZGlyLmM6MjkwOlxcdFxcdFxcdFxcdFxcdGlmIChJU19DQVNFRk9MREVEKGlub2RlKSkge1xcbmZzL2V4dDQvZGlyLmMtMjkxLVxcdFxcdFxcdFxcdFxcdFxcdGhhc2ggPSBFWFQ0X0RJUkVOVF9IQVNIKGRlKTtcXG4tLVxcbmZzL2V4dDQvZXh0NC5oPTI1MjM9c3RhdGljIGlubGluZSBib29sIGV4dDRfaGFzaF9pbl9kaXJlbnQoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9leHQ0L2V4dDQuaC0yNTI0LXtcXG5mcy9leHQ0L2V4dDQuaDoyNTI1OlxcdHJldHVybiBJU19DQVNFRk9MREVEKGlub2RlKSBcXHUwMDI2XFx1MDAyNiBJU19FTkNSWVBURUQoaW5vZGUpO1xcbmZzL2V4dDQvZXh0NC5oLTI1MjYtfVxcbi0tXFxuZnMvZXh0NC9oYXNoLXRlc3QuYz00NDQ9c3RhdGljIHZvaWQgdGVzdF9leHQ0ZnNfZGlyaGFzaF9jYXNlZm9sZGVkX25hbWVzX2hhc2hfY29uc2lzdGVudGx5KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbmZzL2V4dDQvaGFzaC10ZXN0LmMtNDc4LVxcbmZzL2V4dDQvaGFzaC10ZXN0LmM6NDc5OlxcdEtVTklUX0FTU0VSVF9UUlVFKHRlc3QsIElTX0NBU0VGT0xERUQoXFx1MDAyNmVpLVxcdTAwM2V2ZnNfaW5vZGUpKTtcXG5mcy9leHQ0L2hhc2gtdGVzdC5jLTQ4MC1cXG4tLVxcbmZzL2V4dDQvaGFzaC10ZXN0LmM9NDkwPXN0YXRpYyB2b2lkIHRlc3RfZXh0NGZzX2Rpcmhhc2hfY2FzZWZvbGRfZmFsbGJhY2soc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxuZnMvZXh0NC9oYXNoLXRlc3QuYy01MzAtXFxuZnMvZXh0NC9oYXNoLXRlc3QuYzo1MzE6XFx0S1VOSVRfQVNTRVJUX1RSVUUodGVzdCwgSVNfQ0FTRUZPTERFRChcXHUwMDI2ZWktXFx1MDAzZXZmc19pbm9kZSkpO1xcbmZzL2V4dDQvaGFzaC10ZXN0LmMtNTMyLVxcbi0tXFxuZnMvZXh0NC9oYXNoLmM9MzE0PWludCBleHQ0ZnNfZGlyaGFzaChjb25zdCBzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbixcXG4tLVxcbmZzL2V4dDQvaGFzaC5jLTMyMi1cXG5mcy9leHQ0L2hhc2guYzozMjM6XFx0aWYgKGxlbiBcXHUwMDI2XFx1MDAyNiBJU19DQVNFRk9MREVEKGRpcikgXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L2hhc2guYy0zMjQtXFx0ICAgKCFJU19FTkNSWVBURUQoZGlyKSB8fCBmc2NyeXB0X2hhc19lbmNyeXB0aW9uX2tleShkaXIpKSkge1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTUyNzM9c3RydWN0IGlub2RlICpfX2V4dDRfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubyxcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy01NjA4LVxcdH1cXG5mcy9leHQ0L2lub2RlLmM6NTYwOTpcXHRpZiAoSVNfQ0FTRUZPTERFRChpbm9kZSkgXFx1MDAyNlxcdTAwMjYgIWV4dDRfaGFzX2ZlYXR1cmVfY2FzZWZvbGQoaW5vZGUtXFx1MDAzZWlfc2IpKSB7XFxuZnMvZXh0NC9pbm9kZS5jLTU2MTAtXFx0XFx0ZXh0NF9lcnJvcl9pbm9kZShpbm9kZSwgZnVuY3Rpb24sIGxpbmUsIDAsXFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9NjIxPXN0YXRpYyBzdHJ1Y3Qgc3RhdHMgZHhfc2hvd19sZWFmKHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvZXh0NC9uYW1laS5jLTY3OS1cXHRcXHRcXHRcXHRcXHR9XFxuZnMvZXh0NC9uYW1laS5jOjY4MDpcXHRcXHRcXHRcXHRcXHRpZiAoSVNfQ0FTRUZPTERFRChkaXIpKVxcbmZzL2V4dDQvbmFtZWkuYy02ODEtXFx0XFx0XFx0XFx0XFx0XFx0aC5oYXNoID0gRVhUNF9ESVJFTlRfSEFTSChkZSk7XFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9Nzc4PWR4X3Byb2JlKHN0cnVjdCBleHQ0X2ZpbGVuYW1lICpmbmFtZSwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtODI0LVxcdGlmIChmbmFtZSBcXHUwMDI2XFx1MDAyNiBmbmFtZV9uYW1lKGZuYW1lKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2V4dDQvbmFtZWkuYzo4MjU6XFx0ICAgICEoSVNfRU5DUllQVEVEKGRpcikgXFx1MDAyNlxcdTAwMjYgSVNfQ0FTRUZPTERFRChkaXIpKSkge1xcbmZzL2V4dDQvbmFtZWkuYy04MjYtXFx0XFx0aW50IHJldCA9IGV4dDRmc19kaXJoYXNoKGRpciwgZm5hbWVfbmFtZShmbmFtZSksXFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9MTM2Mj1pbnQgZXh0NF9mbmFtZV9zZXR1cF9jaV9maWxlbmFtZShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKmluYW1lLFxcbi0tXFxuZnMvZXh0NC9uYW1laS5jLTEzNjktXFxuZnMvZXh0NC9uYW1laS5jOjEzNzA6XFx0aWYgKCFJU19DQVNFRk9MREVEKGRpcikgfHxcXG5mcy9leHQ0L25hbWVpLmMtMTM3MS1cXHQgICAgKElTX0VOQ1JZUFRFRChkaXIpIFxcdTAwMjZcXHUwMDI2ICFmc2NyeXB0X2hhc19lbmNyeXB0aW9uX2tleShkaXIpKSkge1xcbi0tXFxuZnMvZXh0NC9uYW1laS5jPTE0MDU9c3RhdGljIGJvb2wgZXh0NF9tYXRjaChzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYy0xNDIwLSNpZiBJU19FTkFCTEVEKENPTkZJR19VTklDT0RFKVxcbmZzL2V4dDQvbmFtZWkuYzoxNDIxOlxcdGlmIChJU19DQVNFRk9MREVEKHBhcmVudCkgXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L25hbWVpLmMtMTQyMi1cXHQgICAgKCFJU19FTkNSWVBURUQocGFyZW50KSB8fCBmc2NyeXB0X2hhc19lbmNyeXB0aW9uX2tleShwYXJlbnQpKSkge1xcbi0tXFxuZnMvZXh0NC9uYW1laS5jPTE1MTk9c3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqX19leHQ0X2ZpbmRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtMTU3Mi1cXHRcXHRlbHNlIGlmICghc2Jfbm9fY2FzZWZvbGRfY29tcGF0X2ZhbGxiYWNrKGRpci1cXHUwMDNlaV9zYikgXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L25hbWVpLmM6MTU3MzpcXHRcXHRcXHQgKnJlc19kaXIgPT0gTlVMTCBcXHUwMDI2XFx1MDAyNiBJU19DQVNFRk9MREVEKGRpcikpXFxuZnMvZXh0NC9uYW1laS5jLTE1NzQtXFx0XFx0XFx0ZHh0cmFjZShwcmludGsoS0VSTl9ERUJVRyBcXFwiZXh0NF9maW5kX2VudHJ5OiBjYXNlZm9sZCBcXFwiXFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9MTc2Mj1zdGF0aWMgc3RydWN0IGRlbnRyeSAqZXh0NF9sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW5zaWduZWQgaW50IGZsYWdzKVxcbi0tXFxuZnMvZXh0NC9uYW1laS5jLTE4MDQtXFxuZnMvZXh0NC9uYW1laS5jOjE4MDU6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1VOSUNPREUpIFxcdTAwMjZcXHUwMDI2ICFpbm9kZSBcXHUwMDI2XFx1MDAyNiBJU19DQVNFRk9MREVEKGRpcikpIHtcXG5mcy9leHQ0L25hbWVpLmMtMTgwNi1cXHRcXHQvKiBFdmVudHVhbGx5IHdlIHdhbnQgdG8gY2FsbCBkX2FkZF9jaShkZW50cnksIE5VTEwpXFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9MzEzOD1zdGF0aWMgaW50IGV4dDRfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYy0zMjE3LVxcdCAqL1xcbmZzL2V4dDQvbmFtZWkuYzozMjE4OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19VTklDT0RFKSBcXHUwMDI2XFx1MDAyNiBJU19DQVNFRk9MREVEKGRpcikpXFxuZnMvZXh0NC9uYW1laS5jLTMyMTktXFx0XFx0ZF9pbnZhbGlkYXRlKGRlbnRyeSk7XFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9MzMwMT1zdGF0aWMgaW50IGV4dDRfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtMzMyOC1cXHQgKi9cXG5mcy9leHQ0L25hbWVpLmM6MzMyOTpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVU5JQ09ERSkgXFx1MDAyNlxcdTAwMjYgSVNfQ0FTRUZPTERFRChkaXIpKVxcbmZzL2V4dDQvbmFtZWkuYy0zMzMwLVxcdFxcdGRfaW52YWxpZGF0ZShkZW50cnkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNjowMDo0Ny4wODYwOTU4MDRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODY0MjU1MzUyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjEwNDQ5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNjowMDo1NS43Mjg2NTI4MzlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2ODMwMDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklTX0VOQ1JZUFRFRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2Rpci5jPTEzMD1zdGF0aWMgaW50IGV4dDRfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXFxuLS1cXG5mcy9leHQ0L2Rpci5jLTE2OC1cXG5mcy9leHQ0L2Rpci5jOjE2OTpcXHRpZiAoSVNfRU5DUllQVEVEKGlub2RlKSkge1xcbmZzL2V4dDQvZGlyLmMtMTcwLVxcdFxcdGVyciA9IGZzY3J5cHRfZm5hbWVfYWxsb2NfYnVmZmVyKEVYVDRfTkFNRV9MRU4sIFxcdTAwMjZmc3RyKTtcXG4tLVxcbmZzL2V4dDQvZGlyLmMtMjc1LVxcdFxcdFxcdGlmIChsZTMyX3RvX2NwdShkZS1cXHUwMDNlaW5vZGUpKSB7XFxuZnMvZXh0NC9kaXIuYzoyNzY6XFx0XFx0XFx0XFx0aWYgKCFJU19FTkNSWVBURUQoaW5vZGUpKSB7XFxuZnMvZXh0NC9kaXIuYy0yNzctXFx0XFx0XFx0XFx0XFx0aWYgKCFkaXJfZW1pdChjdHgsIGRlLVxcdTAwM2VuYW1lLFxcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9MjUyMz1zdGF0aWMgaW5saW5lIGJvb2wgZXh0NF9oYXNoX2luX2RpcmVudChjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2V4dDQvZXh0NC5oLTI1MjQte1xcbmZzL2V4dDQvZXh0NC5oOjI1MjU6XFx0cmV0dXJuIElTX0NBU0VGT0xERUQoaW5vZGUpIFxcdTAwMjZcXHUwMDI2IElTX0VOQ1JZUFRFRChpbm9kZSk7XFxuZnMvZXh0NC9leHQ0LmgtMjUyNi19XFxuLS1cXG5mcy9leHQ0L2V4dDRfamJkMi5jPTEwPWludCBleHQ0X2lub2RlX2pvdXJuYWxfbW9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9leHQ0X2piZDIuYy0yMC1cXHRcXHQvKiBXZSBkbyBub3Qgc3VwcG9ydCBkYXRhIGpvdXJuYWxsaW5nIGZvciBlbmNyeXB0ZWQgZGF0YSAqL1xcbmZzL2V4dDQvZXh0NF9qYmQyLmM6MjE6XFx0XFx0aWYgKFNfSVNSRUcoaW5vZGUtXFx1MDAzZWlfbW9kZSkgXFx1MDAyNlxcdTAwMjYgSVNfRU5DUllQVEVEKGlub2RlKSlcXG5mcy9leHQ0L2V4dDRfamJkMi5jLTIyLVxcdFxcdFxcdHJldHVybiBFWFQ0X0lOT0RFX09SREVSRURfREFUQV9NT0RFOyAgLyogb3JkZXJlZCAqL1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9NDg1ND1sb25nIGV4dDRfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbilcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ4NjUtXFx0ICovXFxuZnMvZXh0NC9leHRlbnRzLmM6NDg2NjpcXHRpZiAoSVNfRU5DUllQVEVEKGlub2RlKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ4NjctXFx0ICAgIChtb2RlIFxcdTAwMjYgKEZBTExPQ19GTF9DT0xMQVBTRV9SQU5HRSB8IEZBTExPQ19GTF9JTlNFUlRfUkFOR0UpKSlcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz00NTQ9c3RhdGljIGludCBfX3RyYWNrX2RlbnRyeV91cGRhdGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy00NjgtXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjQ2OTpcXHRpZiAoSVNfRU5DUllQVEVEKGRpcikpIHtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtNDcwLVxcdFxcdGV4dDRfZmNfbWFya19pbmVsaWdpYmxlKHNiLCBFWFQ0X0ZDX1JFQVNPTl9FTkNSWVBURURfRklMRU5BTUUsXFxuLS1cXG5mcy9leHQ0L2hhc2guYz0zMTQ9aW50IGV4dDRmc19kaXJoYXNoKGNvbnN0IHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLFxcbi0tXFxuZnMvZXh0NC9oYXNoLmMtMzIzLVxcdGlmIChsZW4gXFx1MDAyNlxcdTAwMjYgSVNfQ0FTRUZPTERFRChkaXIpIFxcdTAwMjZcXHUwMDI2XFxuZnMvZXh0NC9oYXNoLmM6MzI0OlxcdCAgICghSVNfRU5DUllQVEVEKGRpcikgfHwgZnNjcnlwdF9oYXNfZW5jcnlwdGlvbl9rZXkoZGlyKSkpIHtcXG5mcy9leHQ0L2hhc2guYy0zMjUtXFx0XFx0YnVmZiA9IGt6YWxsb2MoUEFUSF9NQVgsIEdGUF9LRVJORUwpO1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTQxMj1pbnQgZXh0NF9pc3N1ZV96ZXJvb3V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGxibGssIGV4dDRfZnNibGtfdCBwYmxrLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTQxOC1cXG5mcy9leHQ0L2lub2RlLmM6NDE5OlxcdGlmIChJU19FTkNSWVBURUQoaW5vZGUpIFxcdTAwMjZcXHUwMDI2IFNfSVNSRUcoaW5vZGUtXFx1MDAzZWlfbW9kZSkpXFxuZnMvZXh0NC9pbm9kZS5jLTQyMC1cXHRcXHRyZXR1cm4gZnNjcnlwdF96ZXJvb3V0X3JhbmdlKGlub2RlLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTQyMTA9aW50IGV4dDRfYmxvY2tfemVyb19lb2Yoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGZyb20sIGxvZmZfdCBlbmQpXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNDIyMi1cXHQvKiBJZiB3ZSBhcmUgcHJvY2Vzc2luZyBhbiBlbmNyeXB0ZWQgaW5vZGUgZHVyaW5nIG9ycGhhbiBsaXN0IGhhbmRsaW5nICovXFxuZnMvZXh0NC9pbm9kZS5jOjQyMjM6XFx0aWYgKElTX0VOQ1JZUFRFRChpbm9kZSkgXFx1MDAyNlxcdTAwMjYgIWZzY3J5cHRfaGFzX2VuY3J5cHRpb25fa2V5KGlub2RlKSlcXG5mcy9leHQ0L2lub2RlLmMtNDIyNC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz01MjczPXN0cnVjdCBpbm9kZSAqX19leHQ0X2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8sXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNTU1NC1cXHRcXHR9XFxuZnMvZXh0NC9pbm9kZS5jOjU1NTU6XFx0XFx0aWYgKElTX0VOQ1JZUFRFRChpbm9kZSkpIHtcXG5mcy9leHQ0L2lub2RlLmMtNTU1Ni1cXHRcXHRcXHRpbm9kZS1cXHUwMDNlaV9vcCA9IFxcdTAwMjZleHQ0X2VuY3J5cHRlZF9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7XFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NjE3OD11MzIgZXh0NF9kaW9fYWxpZ25tZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNjE4NS1cXHRcXHRyZXR1cm4gMDtcXG5mcy9leHQ0L2lub2RlLmM6NjE4NjpcXHRpZiAoSVNfRU5DUllQVEVEKGlub2RlKSkge1xcbmZzL2V4dDQvaW5vZGUuYy02MTg3LVxcdFxcdGlmICghZnNjcnlwdF9kaW9fc3VwcG9ydGVkKGlub2RlKSlcXG4tLVxcbmZzL2V4dDQvaW9jdGwuYz0zNzU9c3RhdGljIGxvbmcgc3dhcF9pbm9kZV9ib290X2xvYWRlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZXh0NC9pb2N0bC5jLTM5Ny1cXHRpZiAoaW5vZGUtXFx1MDAzZWlfbmxpbmsgIT0gMSB8fCAhU19JU1JFRyhpbm9kZS1cXHUwMDNlaV9tb2RlKSB8fFxcbmZzL2V4dDQvaW9jdGwuYzozOTg6XFx0ICAgIElTX1NXQVBGSUxFKGlub2RlKSB8fCBJU19FTkNSWVBURUQoaW5vZGUpIHx8XFxuZnMvZXh0NC9pb2N0bC5jLTM5OS1cXHQgICAgKEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZmxhZ3MgXFx1MDAyNiBFWFQ0X0pPVVJOQUxfREFUQV9GTCkgfHxcXG4tLVxcbmZzL2V4dDQvbW92ZV9leHRlbnQuYz00MTY9c3RhdGljIGludCBtZXh0X2NoZWNrX3ZhbGlkaXR5KHN0cnVjdCBpbm9kZSAqb3JpZ19pbm9kZSxcXG4tLVxcbmZzL2V4dDQvbW92ZV9leHRlbnQuYy00NjQtXFxuZnMvZXh0NC9tb3ZlX2V4dGVudC5jOjQ2NTpcXHRpZiAoSVNfRU5DUllQVEVEKG9yaWdfaW5vZGUpIHx8IElTX0VOQ1JZUFRFRChkb25vcl9pbm9kZSkpIHtcXG5mcy9leHQ0L21vdmVfZXh0ZW50LmMtNDY2LVxcdFxcdGV4dDRfbXNnKHNiLCBLRVJOX0VSUixcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYz02MjE9c3RhdGljIHN0cnVjdCBzdGF0cyBkeF9zaG93X2xlYWYoc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtNjQ1LVxcdFxcdFxcdFxcdGxlbiA9IGRlLVxcdTAwM2VuYW1lX2xlbjtcXG5mcy9leHQ0L25hbWVpLmM6NjQ2OlxcdFxcdFxcdFxcdGlmICghSVNfRU5DUllQVEVEKGRpcikpIHtcXG5mcy9leHQ0L25hbWVpLmMtNjQ3LVxcdFxcdFxcdFxcdFxcdC8qIERpcmVjdG9yeSBpcyBub3QgZW5jcnlwdGVkICovXFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9Nzc4PWR4X3Byb2JlKHN0cnVjdCBleHQ0X2ZpbGVuYW1lICpmbmFtZSwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtODI0LVxcdGlmIChmbmFtZSBcXHUwMDI2XFx1MDAyNiBmbmFtZV9uYW1lKGZuYW1lKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2V4dDQvbmFtZWkuYzo4MjU6XFx0ICAgICEoSVNfRU5DUllQVEVEKGRpcikgXFx1MDAyNlxcdTAwMjYgSVNfQ0FTRUZPTERFRChkaXIpKSkge1xcbmZzL2V4dDQvbmFtZWkuYy04MjYtXFx0XFx0aW50IHJldCA9IGV4dDRmc19kaXJoYXNoKGRpciwgZm5hbWVfbmFtZShmbmFtZSksXFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9MTAzOD1zdGF0aWMgaW50IGh0cmVlX2RpcmJsb2NrX3RvX3RyZWUoc3RydWN0IGZpbGUgKmRpcl9maWxlLFxcbi0tXFxuZnMvZXh0NC9uYW1laS5jLTEwNjEtXFx0LyogQ2hlY2sgaWYgdGhlIGRpcmVjdG9yeSBpcyBlbmNyeXB0ZWQgKi9cXG5mcy9leHQ0L25hbWVpLmM6MTA2MjpcXHRpZiAoSVNfRU5DUllQVEVEKGRpcikpIHtcXG5mcy9leHQ0L25hbWVpLmMtMTA2My1cXHRcXHRlcnIgPSBmc2NyeXB0X3ByZXBhcmVfcmVhZGRpcihkaXIpO1xcbi0tXFxuZnMvZXh0NC9uYW1laS5jLTExMDUtXFx0XFx0XFx0Y29udGludWU7XFxuZnMvZXh0NC9uYW1laS5jOjExMDY6XFx0XFx0aWYgKCFJU19FTkNSWVBURUQoZGlyKSkge1xcbmZzL2V4dDQvbmFtZWkuYy0xMTA3LVxcdFxcdFxcdHRtcF9zdHIubmFtZSA9IGRlLVxcdTAwM2VuYW1lO1xcbi0tXFxuZnMvZXh0NC9uYW1laS5jPTEzNjI9aW50IGV4dDRfZm5hbWVfc2V0dXBfY2lfZmlsZW5hbWUoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICppbmFtZSxcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYy0xMzcwLVxcdGlmICghSVNfQ0FTRUZPTERFRChkaXIpIHx8XFxuZnMvZXh0NC9uYW1laS5jOjEzNzE6XFx0ICAgIChJU19FTkNSWVBURUQoZGlyKSBcXHUwMDI2XFx1MDAyNiAhZnNjcnlwdF9oYXNfZW5jcnlwdGlvbl9rZXkoZGlyKSkpIHtcXG5mcy9leHQ0L25hbWVpLmMtMTM3Mi1cXHRcXHRjZl9uYW1lLVxcdTAwM2VuYW1lID0gTlVMTDtcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYy0xMzg3LVxcbmZzL2V4dDQvbmFtZWkuYzoxMzg4OlxcdGlmICghSVNfRU5DUllQVEVEKGRpcikpXFxuZnMvZXh0NC9uYW1laS5jLTEzODktXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9MTQwNT1zdGF0aWMgYm9vbCBleHQ0X21hdGNoKHN0cnVjdCBpbm9kZSAqcGFyZW50LFxcbi0tXFxuZnMvZXh0NC9uYW1laS5jLTE0MjEtXFx0aWYgKElTX0NBU0VGT0xERUQocGFyZW50KSBcXHUwMDI2XFx1MDAyNlxcbmZzL2V4dDQvbmFtZWkuYzoxNDIyOlxcdCAgICAoIUlTX0VOQ1JZUFRFRChwYXJlbnQpIHx8IGZzY3J5cHRfaGFzX2VuY3J5cHRpb25fa2V5KHBhcmVudCkpKSB7XFxuZnMvZXh0NC9uYW1laS5jLTE0MjMtXFx0XFx0LypcXG5mcy9leHQ0L25hbWVpLmM6MTQyNDpcXHRcXHQgKiBKdXN0IGNoZWNraW5nIElTX0VOQ1JZUFRFRChwYXJlbnQpIGJlbG93IGlzIG5vdFxcbmZzL2V4dDQvbmFtZWkuYy0xNDI1LVxcdFxcdCAqIHN1ZmZpY2llbnQgdG8gZGVjaWRlIHdoZXRoZXIgb25lIGNhbiB1c2UgdGhlIGhhc2ggZm9yXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtMTQzMy1cXHRcXHRpZiAoc2Jfbm9fY2FzZWZvbGRfY29tcGF0X2ZhbGxiYWNrKHBhcmVudC1cXHUwMDNlaV9zYikgXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L25hbWVpLmM6MTQzNDpcXHRcXHQgICAgSVNfRU5DUllQVEVEKHBhcmVudCkgXFx1MDAyNlxcdTAwMjYgZm5hbWUtXFx1MDAzZWNmX25hbWUubmFtZSBcXHUwMDI2XFx1MDAyNlxcbmZzL2V4dDQvbmFtZWkuYy0xNDM1LVxcdFxcdCAgICAoZm5hbWUtXFx1MDAzZWhpbmZvLmhhc2ggIT0gRVhUNF9ESVJFTlRfSEFTSChkZSkgfHxcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYz0xNzYyPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpleHQ0X2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtMTc5My1cXHRcXHR9XFxuZnMvZXh0NC9uYW1laS5jOjE3OTQ6XFx0XFx0aWYgKCFJU19FUlIoaW5vZGUpIFxcdTAwMjZcXHUwMDI2IElTX0VOQ1JZUFRFRChkaXIpIFxcdTAwMjZcXHUwMDI2XFxuZnMvZXh0NC9uYW1laS5jLTE3OTUtXFx0XFx0ICAgIChTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpIHx8IFNfSVNMTksoaW5vZGUtXFx1MDAzZWlfbW9kZSkpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9MzM2Mz1zdGF0aWMgaW50IGV4dDRfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtMzQwNS1cXG5mcy9leHQ0L25hbWVpLmM6MzQwNjpcXHRpZiAoSVNfRU5DUllQVEVEKGlub2RlKSkge1xcbmZzL2V4dDQvbmFtZWkuYy0zNDA3LVxcdFxcdGVyciA9IGZzY3J5cHRfZW5jcnlwdF9zeW1saW5rKGlub2RlLCBzeW1uYW1lLCBsZW4sIFxcdTAwMjZkaXNrX2xpbmspO1xcbi0tXFxuZnMvZXh0NC9uYW1laS5jLTM0MzAtXFx0XFx0RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9kaXNrc2l6ZSA9IGlub2RlLVxcdTAwM2VpX3NpemU7XFxuZnMvZXh0NC9uYW1laS5jOjM0MzE6XFx0XFx0aWYgKCFJU19FTkNSWVBURUQoaW5vZGUpKVxcbmZzL2V4dDQvbmFtZWkuYy0zNDMyLVxcdFxcdFxcdGlub2RlX3NldF9jYWNoZWRfbGluayhpbm9kZSwgKGNoYXIgKilcXHUwMDI2RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9kYXRhLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTU4OTA9c3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF9nZXRfam91cm5hbF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTU5MTAtXFx0fVxcbmZzL2V4dDQvc3VwZXIuYzo1OTExOlxcdGlmICghU19JU1JFRyhqb3VybmFsX2lub2RlLVxcdTAwM2VpX21vZGUpIHx8IElTX0VOQ1JZUFRFRChqb3VybmFsX2lub2RlKSkge1xcbmZzL2V4dDQvc3VwZXIuYy01OTEyLVxcdFxcdGV4dDRfbXNnKHNiLCBLRVJOX0VSUiwgXFxcImludmFsaWQgam91cm5hbCBpbm9kZVxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNjowMDo1NS43OTU0ODgyNDdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA4MTc0ODY3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgRXh0NCBGaWxlc3lzdGVtIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIGhlcmUgc2VlbSB0byBiZSBgRVhUNF9GU2AsIGBGU19FTkNSWVBUSU9OYCwgYW5kIGBVTklDT0RFYC4gVGhvc2UgYXJlIHRoZSBiYXNlbGluZSByZXF1aXJlbWVudHMuIEkgbmVlZCB0byBrZWVwIHRob3NlIGluIG1pbmQuXG5cblRoZSBmb2NhbCBwb2ludCBvZiB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgYGV4dDRfc2VhcmNoX2RpcmAuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoaXMgZnVuY3Rpb24uIEJ1dCBsZXQncyBzZWUsIHdoYXQgZWxzZSBnZXRzIHRvdWNoZWQgYnkgdGhhdCBmdW5jdGlvbj8gSXQgbG9va3MgbGlrZSBgZXh0NF9zZWFyY2hfZGlyYCBpcyBjYWxsZWQgYnkgYHNlYXJjaF9kaXJibG9ja2AgYW5kIGBleHQ0X2ZpbmRfaW5saW5lX2VudHJ5YC4gTm93LCBgc2VhcmNoX2RpcmJsb2NrYCBpdHNlbGYgaXMgdXNlZCBieSBgX19leHQ0X2ZpbmRfZW50cnlgIGFuZCBgZXh0NF9keF9maW5kX2VudHJ5YC4gQW5kIGBleHQ0X2ZpbmRfaW5saW5lX2VudHJ5YCBpcyBjYWxsZWQgYnkgYF9fZXh0NF9maW5kX2VudHJ5YC4gU28sIGBleHQ0X3NlYXJjaF9kaXJgIGlzIHRydWx5IHRoZSBoZWFydCBvZiB0aGlzIGNoYW5nZSwgYW5kIHRoZSBwcmltYXJ5IHRhcmdldCBmb3IgZnV6emluZy4gTWFrZXMgc2Vuc2UuXG5cbkkgc2hvdWxkIGFsc28gbWFrZSBzdXJlIHRob3NlIGNvbmZpZ3MgYXJlIHNldCB1cCBjb3JyZWN0bHkuIExldCBtZSBkb3VibGUtY2hlY2suIGBDT05GSUdfRVhUNF9GU2AgaXMgdGhlIG9idmlvdXMgb25lLCB0aGUgY29yZSBmaWxlc3lzdGVtLiBgQ09ORklHX0ZTX0VOQ1JZUFRJT05gIGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudCBiZWNhdXNlIG9mIHRoYXQgYElTX0VOQ1JZUFRFRGAgY2hlY2sgSSBzYXcuIFRoZW4gdGhlcmUncyBgQ09ORklHX1VOSUNPREVgIGZvciBkZWFsaW5nIHdpdGggYElTX0NBU0VGT0xERURgLlxuXG5BbHJpZ2h0LCBJIHNob3VsZCBjaGVjayBob3cgdGhlIGBleHQ0X2Rpcl9yZWNfbGVuYCBpcyBhZmZlY3RlZCBieSB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDMzMiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNjowMTowMC44NzcyMzkwNDlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMjA2NTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfZGlyX3JlY19sZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9kaXIuYz03OT1pbnQgX19leHQ0X2NoZWNrX2Rpcl9lbnRyeShjb25zdCBjaGFyICpmdW5jdGlvbiwgdW5zaWduZWQgaW50IGxpbmUsXFxuLS1cXG5mcy9leHQ0L2Rpci5jLTkxLVxcbmZzL2V4dDQvZGlyLmM6OTI6XFx0aWYgKHVubGlrZWx5KHJsZW4gXFx1MDAzYyBleHQ0X2Rpcl9yZWNfbGVuKDEsIGZha2UgPyBOVUxMIDogZGlyKSkpXFxuZnMvZXh0NC9kaXIuYy05My1cXHRcXHRlcnJvcl9tc2cgPSBcXFwicmVjX2xlbiBpcyBzbWFsbGVyIHRoYW4gbWluaW1hbFxcXCI7XFxuLS1cXG5mcy9leHQ0L2Rpci5jLTk1LVxcdFxcdGVycm9yX21zZyA9IFxcXCJyZWNfbGVuICUgNCAhPSAwXFxcIjtcXG5mcy9leHQ0L2Rpci5jOjk2OlxcdGVsc2UgaWYgKHVubGlrZWx5KHJsZW4gXFx1MDAzYyBleHQ0X2Rpcl9yZWNfbGVuKGRlLVxcdTAwM2VuYW1lX2xlbixcXG5mcy9leHQ0L2Rpci5jLTk3LVxcdFxcdFxcdFxcdFxcdFxcdFxcdGZha2UgPyBOVUxMIDogZGlyKSkpXFxuLS1cXG5mcy9leHQ0L2Rpci5jLTEwMC1cXHRcXHRlcnJvcl9tc2cgPSBcXFwiZGlyZWN0b3J5IGVudHJ5IG92ZXJydW5cXFwiO1xcbmZzL2V4dDQvZGlyLmM6MTAxOlxcdGVsc2UgaWYgKHVubGlrZWx5KG5leHRfb2Zmc2V0IFxcdTAwM2Ugc2l6ZSAtIGV4dDRfZGlyX3JlY19sZW4oMSxcXG5mcy9leHQ0L2Rpci5jLTEwMi1cXHRcXHRcXHRcXHRcXHRcXHQgIGhhc19jc3VtID8gTlVMTCA6IGRpcikgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmZzL2V4dDQvZGlyLmM9MTMwPXN0YXRpYyBpbnQgZXh0NF9yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcXG4tLVxcbmZzL2V4dDQvZGlyLmMtMjQ3LVxcdFxcdFxcdFxcdGlmIChleHQ0X3JlY19sZW5fZnJvbV9kaXNrKGRlLVxcdTAwM2VyZWNfbGVuLFxcbmZzL2V4dDQvZGlyLmM6MjQ4OlxcdFxcdFxcdFxcdFxcdHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSkgXFx1MDAzYyBleHQ0X2Rpcl9yZWNfbGVuKDEsXFxuZnMvZXh0NC9kaXIuYy0yNDktXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0aW5vZGUpKVxcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9MjUzMj1zdHJ1Y3QgZXh0NF9kaXJfZW50cnlfdGFpbCB7XFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0yNTc2LSAqL1xcbmZzL2V4dDQvZXh0NC5oOjI1Nzc6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZXh0NF9kaXJfcmVjX2xlbihfX3U4IG5hbWVfbGVuLFxcbmZzL2V4dDQvZXh0NC5oLTI1NzgtXFx0XFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGlub2RlICpkaXIpXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTEwNTE9c3RhdGljIGludCBleHQ0X3VwZGF0ZV9pbmxpbmVfZGlyKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xMDU3LVxcbmZzL2V4dDQvaW5saW5lLmM6MTA1ODpcXHRpZiAobmV3X3NpemUgLSBvbGRfc2l6ZSBcXHUwMDNjPSBleHQ0X2Rpcl9yZWNfbGVuKDEsIE5VTEwpKVxcbmZzL2V4dDQvaW5saW5lLmMtMTA1OS1cXHRcXHRyZXR1cm4gLUVOT1NQQztcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9MTI1OD1pbnQgZXh0NF9pbmxpbmVkaXJfdG9fdHJlZShzdHJ1Y3QgZmlsZSAqZGlyX2ZpbGUsXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTEzMTEtXFx0XFx0XFx0ZmFrZS5yZWNfbGVuID0gZXh0NF9yZWNfbGVuX3RvX2Rpc2soXFxuZnMvZXh0NC9pbmxpbmUuYzoxMzEyOlxcdFxcdFxcdFxcdFxcdCAgZXh0NF9kaXJfcmVjX2xlbihmYWtlLm5hbWVfbGVuLCBOVUxMKSxcXG5mcy9leHQ0L2lubGluZS5jLTEzMTMtXFx0XFx0XFx0XFx0XFx0ICBpbmxpbmVfc2l6ZSk7XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTEzMjEtXFx0XFx0XFx0ZmFrZS5yZWNfbGVuID0gZXh0NF9yZWNfbGVuX3RvX2Rpc2soXFxuZnMvZXh0NC9pbmxpbmUuYzoxMzIyOlxcdFxcdFxcdFxcdFxcdCAgZXh0NF9kaXJfcmVjX2xlbihmYWtlLm5hbWVfbGVuLCBOVUxMKSxcXG5mcy9leHQ0L2lubGluZS5jLTEzMjMtXFx0XFx0XFx0XFx0XFx0ICBpbmxpbmVfc2l6ZSk7XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTEzNzk9aW50IGV4dDRfcmVhZF9pbmxpbmVfZGlyKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xNDI5LVxcdCAqL1xcbmZzL2V4dDQvaW5saW5lLmM6MTQzMDpcXHRkb3Rkb3Rfb2Zmc2V0ID0gZXh0NF9kaXJfcmVjX2xlbigxLCBOVUxMKTtcXG5mcy9leHQ0L2lubGluZS5jOjE0MzE6XFx0ZG90ZG90X3NpemUgPSBkb3Rkb3Rfb2Zmc2V0ICsgZXh0NF9kaXJfcmVjX2xlbigyLCBOVUxMKTtcXG5mcy9leHQ0L2lubGluZS5jLTE0MzItXFx0ZXh0cmFfb2Zmc2V0ID0gZG90ZG90X3NpemUgLSBFWFQ0X0lOTElORV9ET1RET1RfU0laRTtcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMTQ2NS1cXHRcXHRcXHRpZiAoZXh0NF9yZWNfbGVuX2Zyb21fZGlzayhkZS1cXHUwMDNlcmVjX2xlbiwgZXh0cmFfc2l6ZSlcXG5mcy9leHQ0L2lubGluZS5jOjE0NjY6XFx0XFx0XFx0XFx0XFx1MDAzYyBleHQ0X2Rpcl9yZWNfbGVuKDEsIE5VTEwpKVxcbmZzL2V4dDQvaW5saW5lLmMtMTQ2Ny1cXHRcXHRcXHRcXHRicmVhaztcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYz01Nzc9c3RhdGljIGlubGluZSB1bnNpZ25lZCBkeF9yb290X2xpbWl0KHN0cnVjdCBpbm9kZSAqZGlyLCB1bnNpZ25lZCBpbmZvc2l6ZSlcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYy01NzktXFx0dW5zaWduZWQgaW50IGVudHJ5X3NwYWNlID0gZGlyLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSAtXFxuZnMvZXh0NC9uYW1laS5jOjU4MDpcXHRcXHRcXHRleHQ0X2Rpcl9yZWNfbGVuKDEsIE5VTEwpIC1cXG5mcy9leHQ0L25hbWVpLmM6NTgxOlxcdFxcdFxcdGV4dDRfZGlyX3JlY19sZW4oMiwgTlVMTCkgLSBpbmZvc2l6ZTtcXG5mcy9leHQ0L25hbWVpLmMtNTgyLVxcbi0tXFxuZnMvZXh0NC9uYW1laS5jPTU4OD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGR4X25vZGVfbGltaXQoc3RydWN0IGlub2RlICpkaXIpXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtNTkwLVxcdHVuc2lnbmVkIGludCBlbnRyeV9zcGFjZSA9IGRpci1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemUgLVxcbmZzL2V4dDQvbmFtZWkuYzo1OTE6XFx0XFx0XFx0ZXh0NF9kaXJfcmVjX2xlbigwLCBkaXIpO1xcbmZzL2V4dDQvbmFtZWkuYy01OTItXFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9NjIxPXN0YXRpYyBzdHJ1Y3Qgc3RhdHMgZHhfc2hvd19sZWFmKHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvZXh0NC9uYW1laS5jLTcwMC1cXHRcXHRcXHR9XFxuZnMvZXh0NC9uYW1laS5jOjcwMTpcXHRcXHRcXHRzcGFjZSArPSBleHQ0X2Rpcl9yZWNfbGVuKGRlLVxcdTAwM2VuYW1lX2xlbiwgZGlyKTtcXG5mcy9leHQ0L25hbWVpLmMtNzAyLVxcdFxcdFxcdG5hbWVzKys7XFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9MTAzOD1zdGF0aWMgaW50IGh0cmVlX2RpcmJsb2NrX3RvX3RyZWUoc3RydWN0IGZpbGUgKmRpcl9maWxlLFxcbi0tXFxuZnMvZXh0NC9uYW1laS5jLTEwNTgtXFx0XFx0XFx0XFx0XFx0ICAgZGlyLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSAtXFxuZnMvZXh0NC9uYW1laS5jOjEwNTk6XFx0XFx0XFx0XFx0XFx0ICAgZXh0NF9kaXJfcmVjX2xlbigwLFxcbmZzL2V4dDQvbmFtZWkuYy0xMDYwLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGNzdW0gPyBOVUxMIDogZGlyKSk7XFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9MTQ1Nj1pbnQgZXh0NF9zZWFyY2hfZGlyKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGNoYXIgKnNlYXJjaF9idWYsIGludCBidWZfc2l6ZSxcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYy0xNDcwLVxcdFxcdCAgICAoIWV4dDRfaGFzaF9pbl9kaXJlbnQoZGlyKSB8fFxcbmZzL2V4dDQvbmFtZWkuYzoxNDcxOlxcdFxcdCAgICAgKGNoYXIgKilkZSArIGV4dDRfZGlyX3JlY19sZW4oZGUtXFx1MDAzZW5hbWVfbGVuLCBkaXIpIFxcdTAwM2M9IGRsaW1pdCkgXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L25hbWVpLmMtMTQ3Mi1cXHRcXHQgICAgZXh0NF9tYXRjaChkaXIsIGZuYW1lLCBkZSkpIHtcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYz0xODQ2PWR4X21vdmVfZGlyZW50cyhzdHJ1Y3QgaW5vZGUgKmRpciwgY2hhciAqZnJvbSwgY2hhciAqdG8sXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtMTg1NC1cXHRcXHRcXHRcXHRcXHRcXHQoZnJvbSArIChtYXAtXFx1MDAzZW9mZnNcXHUwMDNjXFx1MDAzYzIpKTtcXG5mcy9leHQ0L25hbWVpLmM6MTg1NTpcXHRcXHRyZWNfbGVuID0gZXh0NF9kaXJfcmVjX2xlbihkZS1cXHUwMDNlbmFtZV9sZW4sIGRpcik7XFxuZnMvZXh0NC9uYW1laS5jLTE4NTYtXFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9MTg3OD1zdGF0aWMgc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKmR4X3BhY2tfZGlyZW50cyhzdHJ1Y3QgaW5vZGUgKmRpciwgY2hhciAqYmFzZSxcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYy0xODg3LVxcdFxcdGlmIChkZS1cXHUwMDNlaW5vZGUgXFx1MDAyNlxcdTAwMjYgZGUtXFx1MDAzZW5hbWVfbGVuKSB7XFxuZnMvZXh0NC9uYW1laS5jOjE4ODg6XFx0XFx0XFx0cmVjX2xlbiA9IGV4dDRfZGlyX3JlY19sZW4oZGUtXFx1MDAzZW5hbWVfbGVuLCBkaXIpO1xcbmZzL2V4dDQvbmFtZWkuYy0xODg5LVxcdFxcdFxcdGlmIChkZSBcXHUwMDNlIHRvKVxcbi0tXFxuZnMvZXh0NC9uYW1laS5jPTIwMzc9aW50IGV4dDRfZmluZF9kZXN0X2RlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxcbi0tXFxuZnMvZXh0NC9uYW1laS5jLTIwNDItXFx0c3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKmRlO1xcbmZzL2V4dDQvbmFtZWkuYzoyMDQzOlxcdHVuc2lnbmVkIHNob3J0IHJlY2xlbiA9IGV4dDRfZGlyX3JlY19sZW4oZm5hbWVfbGVuKGZuYW1lKSwgZGlyKTtcXG5mcy9leHQ0L25hbWVpLmMtMjA0NC1cXHRpbnQgbmxlbiwgcmxlbjtcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYy0yMDU1LVxcdFxcdFxcdHJldHVybiAtRUVYSVNUO1xcbmZzL2V4dDQvbmFtZWkuYzoyMDU2OlxcdFxcdG5sZW4gPSBleHQ0X2Rpcl9yZWNfbGVuKGRlLVxcdTAwM2VuYW1lX2xlbiwgZGlyKTtcXG5mcy9leHQ0L25hbWVpLmMtMjA1Ny1cXHRcXHRybGVuID0gZXh0NF9yZWNfbGVuX2Zyb21fZGlzayhkZS1cXHUwMDNlcmVjX2xlbiwgYnVmX3NpemUpO1xcbi0tXFxuZnMvZXh0NC9uYW1laS5jPTIwNzA9dm9pZCBleHQ0X2luc2VydF9kZW50cnkoc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtMjA3OC1cXG5mcy9leHQ0L25hbWVpLmM6MjA3OTpcXHRubGVuID0gZXh0NF9kaXJfcmVjX2xlbihkZS1cXHUwMDNlbmFtZV9sZW4sIGRpcik7XFxuZnMvZXh0NC9uYW1laS5jLTIwODAtXFx0cmxlbiA9IGV4dDRfcmVjX2xlbl9mcm9tX2Rpc2soZGUtXFx1MDAzZXJlY19sZW4sIGJ1Zl9zaXplKTtcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYz0yMjExPXN0YXRpYyBpbnQgbWFrZV9pbmRleGVkX2RpcihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgZXh0NF9maWxlbmFtZSAqZm5hbWUsXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtMjI4NC1cXHRkZS1cXHUwMDNlcmVjX2xlbiA9IGV4dDRfcmVjX2xlbl90b19kaXNrKFxcbmZzL2V4dDQvbmFtZWkuYzoyMjg1OlxcdFxcdFxcdGJsb2Nrc2l6ZSAtIGV4dDRfZGlyX3JlY19sZW4oMiwgTlVMTCksIGJsb2Nrc2l6ZSk7XFxuZnMvZXh0NC9uYW1laS5jLTIyODYtXFx0bWVtc2V0IChcXHUwMDI2cm9vdC1cXHUwMDNlaW5mbywgMCwgc2l6ZW9mKHJvb3QtXFx1MDAzZWluZm8pKTtcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYz0yOTI1PWludCBleHQ0X2luaXRfZGlyYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYy0yOTM3LVxcdGRlLVxcdTAwM2VuYW1lX2xlbiA9IDE7XFxuZnMvZXh0NC9uYW1laS5jOjI5Mzg6XFx0ZGUtXFx1MDAzZXJlY19sZW4gPSBleHQ0X3JlY19sZW5fdG9fZGlzayhleHQ0X2Rpcl9yZWNfbGVuKGRlLVxcdTAwM2VuYW1lX2xlbiwgTlVMTCksXFxuZnMvZXh0NC9uYW1laS5jLTI5MzktXFx0XFx0XFx0XFx0XFx0ICAgYmxvY2tzaXplKTtcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYy0yOTQ5LVxcdFxcdGRlLVxcdTAwM2VyZWNfbGVuID0gZXh0NF9yZWNfbGVuX3RvX2Rpc2soXFxuZnMvZXh0NC9uYW1laS5jOjI5NTA6XFx0XFx0XFx0XFx0XFx0ZXh0NF9kaXJfcmVjX2xlbihkZS1cXHUwMDNlbmFtZV9sZW4sIE5VTEwpLFxcbmZzL2V4dDQvbmFtZWkuYy0yOTUxLVxcdFxcdFxcdFxcdFxcdGJsb2Nrc2l6ZSk7XFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtMjk1OC1cXHRcXHRkZS1cXHUwMDNlcmVjX2xlbiA9IGV4dDRfcmVjX2xlbl90b19kaXNrKGJsb2Nrc2l6ZSAtXFxuZnMvZXh0NC9uYW1laS5jOjI5NTk6XFx0XFx0XFx0XFx0XFx0KGNzdW1fc2l6ZSArIGV4dDRfZGlyX3JlY19sZW4oMSwgTlVMTCkpLFxcbmZzL2V4dDQvbmFtZWkuYy0yOTYwLVxcdFxcdFxcdFxcdFxcdGJsb2Nrc2l6ZSk7XFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9MzA2NT1ib29sIGV4dDRfZW1wdHlfZGlyKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtMzA4MS1cXHRzYiA9IGlub2RlLVxcdTAwM2VpX3NiO1xcbmZzL2V4dDQvbmFtZWkuYzozMDgyOlxcdGlmIChpbm9kZS1cXHUwMDNlaV9zaXplIFxcdTAwM2MgZXh0NF9kaXJfcmVjX2xlbigxLCBOVUxMKSArXFxuZnMvZXh0NC9uYW1laS5jOjMwODM6XFx0XFx0XFx0XFx0XFx0ZXh0NF9kaXJfcmVjX2xlbigyLCBOVUxMKSkge1xcbmZzL2V4dDQvbmFtZWkuYy0zMDg0LVxcdFxcdEVYVDRfRVJST1JfSU5PREUoaW5vZGUsIFxcXCJpbnZhbGlkIHNpemVcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTY6MDE6MDAuOTM4NDUzNTA4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0ODIxNzk2MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhc3Nlc3NtZW50IG9mIHRoZSBwYXRjaCwgZGlzdGlsbGVkIGludG8gbXkgY3VycmVudCB0aGlua2luZzpcblxuKipQYXRjaCBBbmFseXNpczogYGV4dDRfc2VhcmNoX2RpcmAgQnVnIEZpeCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdGFyZ2V0aW5nIGEgcHJldHR5IGNyaXRpY2FsIGlzc3VlIHdpdGhpbiB0aGUgYGV4dDRfc2VhcmNoX2RpcmAgZnVuY3Rpb24uIFRoZSBjb3JlIHByb2JsZW0gaXMgcmVsYXRlZCB0byBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gU3BlY2lmaWNhbGx5LCB0aGUgY29kZSB3YXMgdnVsbmVyYWJsZSBiZWNhdXNlIGBleHQ0X2hhc2hfaW5fZGlyZW50KGRpcilgIGNvdWxkIGJlIHRydWUsIGJ1dCB0aGUgZGlyZWN0b3J5IGVudHJ5IGxlbmd0aCB3YXNuJ3QgYWx3YXlzIHByb3Blcmx5IHZhbGlkYXRlZCBiZWZvcmUgYWNjZXNzaW5nIG1lbW9yeS4gVGhpcyBjb3VsZCBsZWFkIHRvIGEgY3Jhc2gsIHdoaWNoIGlzIG5ldmVyIGEgZ29vZCB0aGluZy5cblxuVGhlIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkIGFyZSBgRVhUNF9GU2AsIGBGU19FTkNSWVBUSU9OYCwgYW5kIGBVTklDT0RFYCwgbm90aGluZyB0b28gc3VycHJpc2luZyBnaXZlbiB0aGUgY29udGV4dC4gVGhlIGNydWNpYWwgc3ltYm9sIGhlcmUsIHRoZSBwb2ludCBvZiBmb2N1cywgaXMgZGVmaW5pdGVseSBgZXh0NF9zZWFyY2hfZGlyYC5cblxuTGV0IG1lIHF1aWNrbHkgcmUtZXhhbWluZSB0aGUgY29kZSBzbmlwcGV0LCBtYWtpbmcgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZpeDpcblxuYGBgY1xuIFx0XHRpZiAoZGUtXHUwMDNlbmFtZSArIGRlLVx1MDAzZW5hbWVfbGVuIFx1MDAzYz0gZGxpbWl0IFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgKCFleHQ0X2hhc2hfaW5fZGlyZW50KGRpcikgfHxcbitcdFx0ICAgICAoY2hhciAqKWRlICsgZXh0NF9kaXJfcmVjX2xlbihkZS1cdTAwM2VuYW1lX2xlbiwgZGlyKSBcdTAwM2M9IGRsaW1pdCkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBleHQ0X21hdGNoKGRpciwgZm5hbWUsIGRlKSkge1xuYGBgXG5cbkFoLCByaWdodC4gVGhlIGFkZGl0aW9uIGlzIGNsZWFyOiBpdCBub3cgKmV4cGxpY2l0bHkqIGNoZWNrcyB0aGUgbGVuZ3RoIG9mIHRoZSBkaXJlY3RvcnkgZW50cnkuIEl0IGFkZHMgYSBtb3JlIHJvYnVzdCBjaGVjazogYChjaGFyICopZGUgKyBleHQ0X2Rpcl9yZWNfbGVuKGRlLVx1MDAzZW5hbWVfbGVuLCBkaXIpIFx1MDAzYz0gZGxpbWl0YC4gIFRoaXMgdmVyaWZpZXMgdGhhdCB0aGUgY2FsY3VsYXRlZCBtZW1vcnkgcmVnaW9uIG9mIHRoZSBkaXJlY3RvcnkgZW50cnkgaXMgd2l0aGluIHRoZSBhbGxvd2FibGUgYGRsaW1pdGAgYm91bmRhcnksIHByZXZlbnRpbmcgdGhhdCBvdXQtb2YtYm91bmRzIHJlYWQuIFRoaXMgcHJvdGVjdHMgYWdhaW5zdCB0aGUgY2FzZXMgd2hlcmUgYGV4dDRfaGFzaF9pbl9kaXJlbnQoZGlyKWAgbWlnaHQgaGF2ZSB0cmlnZ2VyZWQgdGhlIHByb2JsZW0uXG5cblRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZGlyZWN0bHkgYWRkcmVzc2VzIHRoZSB2dWxuZXJhYmlsaXR5LiBHb29kIGNhdGNoLCBhbmQgdGhlIGZpeCBzZWVtcyBhcHByb3ByaWF0ZS4gTGV0J3MgbWFyayB0aGlzIGFzIGRvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTMwLCJPdXRwdXRUb2tlbnMiOjE1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNjowMTowNy40MjA2MzY4OTdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTI3MzA3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiLFxuICAgIFwiRlNfRU5DUllQVElPTlwiLFxuICAgIFwiVU5JQ09ERVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfc2VhcmNoX2RpclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gZXh0NF9zZWFyY2hfZGlyIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd2hlbiBleHQ0X2hhc2hfaW5fZGlyZW50IGlzIHRydWUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGV4dDQgZGlyZWN0b3J5IHNlYXJjaGluZyBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4gVGhlIGV4dDRfaGFzaF9pbl9kaXJlbnQgZnVuY3Rpb24gcmVxdWlyZXMgY2FzZWZvbGRpbmcgYW5kIGVuY3J5cHRpb24gdG8gYmUgZW5hYmxlZCwgc28gd2UgbmVlZCBFWFQ0X0ZTLCBGU19FTkNSWVBUSU9OLCBhbmQgVU5JQ09ERSBjb25maWdzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIixcbiAgICBcIkZTX0VOQ1JZUFRJT05cIixcbiAgICBcIlVOSUNPREVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X3NlYXJjaF9kaXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIGV4dDRfc2VhcmNoX2RpciB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzIHdoZW4gZXh0NF9oYXNoX2luX2RpcmVudCBpcyB0cnVlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBleHQ0IGRpcmVjdG9yeSBzZWFyY2hpbmcgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuIFRoZSBleHQ0X2hhc2hfaW5fZGlyZW50IGZ1bmN0aW9uIHJlcXVpcmVzIGNhc2Vmb2xkaW5nIGFuZCBlbmNyeXB0aW9uIHRvIGJlIGVuYWJsZWQsIHNvIHdlIG5lZWQgRVhUNF9GUywgRlNfRU5DUllQVElPTiwgYW5kIFVOSUNPREUgY29uZmlncy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowqtlj6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-10 15:30:11 +0000 UTC FinishedAt: 2026-07-10 16:01:09 +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": "a635d6748234582ea287c5ffeae28b9b23f91c7e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "FS_ENCRYPTION", "UNICODE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "a635d6748234582ea287c5ffeae28b9b23f91c7e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS", "FS_ENCRYPTION", "UNICODE" ], "series_id": "35e0713a-2b9c-457a-abe6-25cfa88bab78" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_search_dir" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE1OjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7RlNfRU5DUllQVElPTiYjMzQ7LAogICAgJiMzNDtVTklDT0RFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9zZWFyY2hfZGlyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gZXh0NF9zZWFyY2hfZGlyIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd2hlbiBleHQ0X2hhc2hfaW5fZGlyZW50IGlzIHRydWUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGV4dDQgZGlyZWN0b3J5IHNlYXJjaGluZyBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4gVGhlIGV4dDRfaGFzaF9pbl9kaXJlbnQgZnVuY3Rpb24gcmVxdWlyZXMgY2FzZWZvbGRpbmcgYW5kIGVuY3J5cHRpb24gdG8gYmUgZW5hYmxlZCwgc28gd2UgbmVlZCBFWFQ0X0ZTLCBGU19FTkNSWVBUSU9OLCBhbmQgVU5JQ09ERSBjb25maWdzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE1OjU4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMGI1Y2E3NTJmYjFmODM3MTk4NTA2ZDJjNDk2ZGQ5YzhmNThkMTM3ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDEwIDE1OjU4OjU0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbmFtZWkuYyBiL2ZzL2V4dDQvbmFtZWkuY1xuaW5kZXggY2M0OWFlMDRhNmY2NDkuLjNiOTc0MGMxYzE2ZDhjIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9uYW1laS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L25hbWVpLmNcbkBAIC0xNDY3LDYgJiM0MzsxNDY3LDggQEAgaW50IGV4dDRfc2VhcmNoX2RpcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBjaGFyICpzZWFyY2hfYnVmLCBpbnQgYnVmX3NpemUsXG4gXHRcdC8qIHRoaXMgY29kZSBpcyBleGVjdXRlZCBxdWFkcmF0aWNhbGx5IG9mdGVuICovXG4gXHRcdC8qIGRvIG1pbmltYWwgY2hlY2tpbmcgYGJ5IGhhbmQmIzM5OyAqL1xuIFx0XHRpZiAoZGUtXHUwMDNlbmFtZSAmIzQzOyBkZS1cdTAwM2VuYW1lX2xlbiBcdTAwM2M9IGRsaW1pdCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAoIWV4dDRfaGFzaF9pbl9kaXJlbnQoZGlyKSB8fFxuJiM0MztcdFx0ICAgICAoY2hhciAqKWRlICYjNDM7IGV4dDRfZGlyX3JlY19sZW4oZGUtXHUwMDNlbmFtZV9sZW4sIGRpcikgXHUwMDNjPSBkbGltaXQpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgZXh0NF9tYXRjaChkaXIsIGZuYW1lLCBkZSkpIHtcbiBcdFx0XHQvKiBmb3VuZCBhIG1hdGNoIC0ganVzdCB0byBiZSBzdXJlLCBkb1xuIFx0XHRcdCAqIGEgZnVsbCBjaGVjayAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE1OjU4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7RlNfRU5DUllQVElPTiYjMzQ7LAogICAgJiMzNDtVTklDT0RFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9zZWFyY2hfZGlyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gZXh0NF9zZWFyY2hfZGlyIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd2hlbiBleHQ0X2hhc2hfaW5fZGlyZW50IGlzIHRydWUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGV4dDQgZGlyZWN0b3J5IHNlYXJjaGluZyBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4gVGhlIGV4dDRfaGFzaF9pbl9kaXJlbnQgZnVuY3Rpb24gcmVxdWlyZXMgY2FzZWZvbGRpbmcgYW5kIGVuY3J5cHRpb24gdG8gYmUgZW5hYmxlZCwgc28gd2UgbmVlZCBFWFQ0X0ZTLCBGU19FTkNSWVBUSU9OLCBhbmQgVU5JQ09ERSBjb25maWdzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwYjVjYTc1MmZiMWY4MzcxOTg1MDZkMmM0OTZkZDljOGY1OGQxMzdkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMTAgMTU6NTg6NTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leHQ0L25hbWVpLmMgYi9mcy9leHQ0L25hbWVpLmMKaW5kZXggY2M0OWFlMDRhNmY2NDkuLjNiOTc0MGMxYzE2ZDhjIDEwMDY0NAotLS0gYS9mcy9leHQ0L25hbWVpLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9uYW1laS5jCkBAIC0xNDY3LDYgJiM0MzsxNDY3LDggQEAgaW50IGV4dDRfc2VhcmNoX2RpcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBjaGFyICpzZWFyY2hfYnVmLCBpbnQgYnVmX3NpemUsCiAJCS8qIHRoaXMgY29kZSBpcyBleGVjdXRlZCBxdWFkcmF0aWNhbGx5IG9mdGVuICovCiAJCS8qIGRvIG1pbmltYWwgY2hlY2tpbmcgYGJ5IGhhbmQmIzM5OyAqLwogCQlpZiAoZGUtJmd0O25hbWUgJiM0MzsgZGUtJmd0O25hbWVfbGVuICZsdDs9IGRsaW1pdCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKCFleHQ0X2hhc2hfaW5fZGlyZW50KGRpcikgfHwKJiM0MzsJCSAgICAgKGNoYXIgKilkZSAmIzQzOyBleHQ0X2Rpcl9yZWNfbGVuKGRlLSZndDtuYW1lX2xlbiwgZGlyKSAmbHQ7PSBkbGltaXQpICZhbXA7JmFtcDsKIAkJICAgIGV4dDRfbWF0Y2goZGlyLCBmbmFtZSwgZGUpKSB7CiAJCQkvKiBmb3VuZCBhIG1hdGNoIC0ganVzdCB0byBiZSBzdXJlLCBkbwogCQkJICogYSBmdWxsIGNoZWNrICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE1OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4ODUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBleHQ0IERpcmVjdG9yeSBTZWFyY2ggUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBmcy9leHQ0L25hbWVpLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGNoYW5nZXMgaW4gYGV4dDRfc2VhcmNoX2RpcmAuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3ZlIGFkZGVkIGEgY2hlY2sgd2l0aGluIHRoZSBgaWZgIHN0YXRlbWVudCB0byBoYW5kbGUgYSBzY2VuYXJpbyByZWxhdGVkIHRvIGRpcmVjdG9yeSBlbnRyeSBoYXNoaW5nLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIHRoaXM6CgpgYGBjCiAJCWlmIChkZS0mZ3Q7bmFtZSAmIzQzOyBkZS0mZ3Q7bmFtZV9sZW4gJmx0Oz0gZGxpbWl0ICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoIWV4dDRfaGFzaF9pbl9kaXJlbnQoZGlyKSB8fAomIzQzOwkJICAgICAoY2hhciAqKWRlICYjNDM7IGV4dDRfZGlyX3JlY19sZW4oZGUtJmd0O25hbWVfbGVuLCBkaXIpICZsdDs9IGRsaW1pdCkgJmFtcDsmYW1wOwogCQkgICAgZXh0NF9tYXRjaChkaXIsIGZuYW1lLCBkZSkpIHsKYGBgCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24gdG8gdGhlIGV4dDQgZGlyZWN0b3J5IHNlYXJjaGluZyBsb2dpYy4gVGhlIGV4dHJhIGNvbmRpdGlvbiBpcyB0byBwcm90ZWN0IGFnYWluc3QgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgb3Igb3RoZXIgbWVtb3J5IGFjY2VzcyBlcnJvcnMuIFRoZSBhZGRpdGlvbiBjaGVja3MgdG8gc2VlIGlmICBgZXh0NF9oYXNoX2luX2RpcmVudChkaXIpYCBpcyB0cnVlLiBJZiBpdCBpcywgdGhlIGNvZGUgbWFrZXMgc3VyZSB0aGF0IGBkZSAmIzQzOyBleHQ0X2Rpcl9yZWNfbGVuKGRlLSZndDtuYW1lX2xlbiwgZGlyKWAgc3RheXMgd2l0aGluIHRoZSBkaXJlY3RvcnkmIzM5O3MgYm91bmRzLCBzcGVjaWZpY2FsbHkgdXAgdG8gYGRsaW1pdGAuIFRoaXMgaXMgYSBzZW5zaWJsZSBwcmVjYXV0aW9uLCBsaWtlbHkgYWRkcmVzc2luZyBhIHByZXZpb3VzbHkgdW5oYW5kbGVkIGVkZ2UgY2FzZSBvciB2dWxuZXJhYmlsaXR5IHdoZW4gZGVhbGluZyB3aXRoIGhhc2hlZCBkaXJlY3RvcnkgZW50cmllcy4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgZXh0NF9zZWFyY2hfZGlyYCBhbmQgdGhlIGBleHQ0X2hhc2hfaW5fZGlyZW50YCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHRoZSBwcmVjaXNlIGNvbnRleHQgYW5kIHdoYXQga2luZCBvZiBwcm9ibGVtIHRoaXMgZml4ZXMuIEkgd2lsbCBhbHNvIGhhdmUgdG8gbG9vayBmb3IgYW55IGltcGFjdCBvbiBwZXJmb3JtYW5jZSwgb3Igb3RoZXIgcGFydHMgb2YgdGhlIGNvZGViYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE1OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfc2VhcmNoX2RpciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvbmFtZWkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L25hbWVpLmM9MTI2Mj1zdGF0aWMgaW5saW5lIGludCBzZWFyY2hfZGlyYmxvY2soc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcbi0tXG5mcy9leHQ0L25hbWVpLmMtMTI2Ny17XG5mcy9leHQ0L25hbWVpLmM6MTI2ODpcdHJldHVybiBleHQ0X3NlYXJjaF9kaXIoYmgsIGJoLVx1MDAzZWJfZGF0YSwgZGlyLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUsIGRpcixcbmZzL2V4dDQvbmFtZWkuYy0xMjY5LVx0XHRcdCAgICAgICBmbmFtZSwgb2Zmc2V0LCByZXNfZGlyKTtcbi0tXG5mcy9leHQ0L25hbWVpLmM9MTQwNT1zdGF0aWMgYm9vbCBleHQ0X21hdGNoKHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuLS1cbmZzL2V4dDQvbmFtZWkuYy0xNDU1LSAqL1xuZnMvZXh0NC9uYW1laS5jOjE0NTY6aW50IGV4dDRfc2VhcmNoX2RpcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBjaGFyICpzZWFyY2hfYnVmLCBpbnQgYnVmX3NpemUsXG5mcy9leHQ0L25hbWVpLmMtMTQ1Ny1cdFx0ICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZXh0NF9maWxlbmFtZSAqZm5hbWUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTU6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcxOAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlIHdoYXQgSSBjYW4gZ2F0aGVyIGZyb20gdGhpcy4KCioqVHJhY2luZyB0aGUgVXNhZ2Ugb2YgZXh0NF9zZWFyY2hfZGlyKioKClJpZ2h0LCBzbyB0aGUgYGV4dDRfc2VhcmNoX2RpcmAgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGBzZWFyY2hfZGlyYmxvY2tgIGFuZCBwb3NzaWJseSBieSBvdGhlciBmdW5jdGlvbnMsIHRvby4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHNjb3BlIG9mIGhvdyBgZXh0NF9zZWFyY2hfZGlyYCBpcyBiZWluZyB1c2VkIHdpdGhpbiB0aGUgZXh0NCBmaWxlc3lzdGVtIGNvZGUuIEtub3dpbmcgdGhhdCBgc2VhcmNoX2RpcmJsb2NrYCBjYWxscyBpdCBpcyBhIHN0YXJ0aW5nIHBvaW50LCBidXQgSSBuZWVkIHRvIGtub3cgdGhlICplbnRpcmUqIGNhbGwgZ3JhcGguIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IGFsbCB0aGUgcG9pbnRzIGluIHRoZSBjb2RlIHdoZXJlIGl0JiMzOTtzIGludm9rZWQuIFRoaXMgaXMgd2hlcmUgYSBnb29kIGNyb3NzLXJlZmVyZW5jZSB0b29sIG9yIGRlYnVnZ2VyIGlzIGludmFsdWFibGUuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxlcnMgd2lsbCBpbGx1bWluYXRlIGhvdyB0aGUgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIGRpcmVjdG9yeSBsb29rdXAgcHJvY2VzcyBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgaXQgaGFzIGZvciBwZXJmb3JtYW5jZSBhbmQgY29ycmVjdG5lc3MuIFRpbWUgdG8gaW52ZXN0aWdhdGUgZnVydGhlciBhbmQgc2VlIHdoZXJlIGVsc2UgaXQmIzM5O3MgYmVpbmcgdXNlZC4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X3NlYXJjaF9kaXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2V4dDQuaD0zMjM4PWV4dGVybiBpbnQgZXh0NF9odHJlZV9maWxsX3RyZWUoc3RydWN0IGZpbGUgKmRpcl9maWxlLCBfX3UzMiBzdGFydF9oYXNoLFxuZnMvZXh0NC9leHQ0LmgtMzIzOS1cdFx0XHRcdF9fdTMyIHN0YXJ0X21pbm9yX2hhc2gsIF9fdTMyICpuZXh0X2hhc2gpO1xuZnMvZXh0NC9leHQ0Lmg6MzI0MDpleHRlcm4gaW50IGV4dDRfc2VhcmNoX2RpcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxuZnMvZXh0NC9leHQ0LmgtMzI0MS1cdFx0XHQgICBjaGFyICpzZWFyY2hfYnVmLFxuLS1cbmZzL2V4dDQvaW5saW5lLmM9MTU5Mj1zdHJ1Y3QgYnVmZmVyX2hlYWQgKmV4dDRfZmluZF9pbmxpbmVfZW50cnkoc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xNjI1LVx0aW5saW5lX3NpemUgPSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFIC0gRVhUNF9JTkxJTkVfRE9URE9UX1NJWkU7XG5mcy9leHQ0L2lubGluZS5jOjE2MjY6XHRyZXQgPSBleHQ0X3NlYXJjaF9kaXIoaXMuaWxvYy5iaCwgaW5saW5lX3N0YXJ0LCBpbmxpbmVfc2l6ZSxcbmZzL2V4dDQvaW5saW5lLmMtMTYyNy1cdFx0XHQgICAgICBkaXIsIGZuYW1lLCAwLCByZXNfZGlyKTtcbi0tXG5mcy9leHQ0L2lubGluZS5jLTE2MzgtXG5mcy9leHQ0L2lubGluZS5jOjE2Mzk6XHRyZXQgPSBleHQ0X3NlYXJjaF9kaXIoaXMuaWxvYy5iaCwgaW5saW5lX3N0YXJ0LCBpbmxpbmVfc2l6ZSxcbmZzL2V4dDQvaW5saW5lLmMtMTY0MC1cdFx0XHQgICAgICBkaXIsIGZuYW1lLCAwLCByZXNfZGlyKTtcbi0tXG5mcy9leHQ0L25hbWVpLmM9MTI2Mj1zdGF0aWMgaW5saW5lIGludCBzZWFyY2hfZGlyYmxvY2soc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcbi0tXG5mcy9leHQ0L25hbWVpLmMtMTI2Ny17XG5mcy9leHQ0L25hbWVpLmM6MTI2ODpcdHJldHVybiBleHQ0X3NlYXJjaF9kaXIoYmgsIGJoLVx1MDAzZWJfZGF0YSwgZGlyLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUsIGRpcixcbmZzL2V4dDQvbmFtZWkuYy0xMjY5LVx0XHRcdCAgICAgICBmbmFtZSwgb2Zmc2V0LCByZXNfZGlyKTtcbi0tXG5mcy9leHQ0L25hbWVpLmM9MTQwNT1zdGF0aWMgYm9vbCBleHQ0X21hdGNoKHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuLS1cbmZzL2V4dDQvbmFtZWkuYy0xNDU1LSAqL1xuZnMvZXh0NC9uYW1laS5jOjE0NTY6aW50IGV4dDRfc2VhcmNoX2RpcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBjaGFyICpzZWFyY2hfYnVmLCBpbnQgYnVmX3NpemUsXG5mcy9leHQ0L25hbWVpLmMtMTQ1Ny1cdFx0ICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZXh0NF9maWxlbmFtZSAqZm5hbWUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTU6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYwNgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gZnV6emluZyBgZXh0NF9zZWFyY2hfZGlyYC4KCioqRnV6emluZyB0aGUgZXh0NCBEaXJlY3RvcnkgU2VhcmNoKioKCkFscmlnaHQsIHNvIGBleHQ0X3NlYXJjaF9kaXJgIGlzIHRoZSBrZXkgZnVuY3Rpb24gd2l0aGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0gdGhhdCBoYW5kbGVzIHNlYXJjaGluZyBkaXJlY3Rvcmllcy4gQ29uc2lkZXJpbmcgaXRzIHJvbGUgaW4gZGlyZWN0b3J5IHRyYXZlcnNhbCwgaXQmIzM5O3MgcHJhY3RpY2FsbHkgc2NyZWFtaW5nIGZvciBhIGZ1enppbmcgY2FtcGFpZ24uIFRoaXMgZmVlbHMgbGlrZSBhIGhpZ2gtdmFsdWUgdGFyZ2V0LiBNeSBmb2N1cyBpcyBsYXNlci10YXJnZXRlZCBvbiB0aGUgYGV4dDRfc2VhcmNoX2RpcmAgc3ltYm9sIGl0c2VsZi4KCk5vdywgYmVmb3JlIEkgZGl2ZSBpbiBoZWFkZmlyc3QsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIGFsbCB0aGUgbmVjZXNzYXJ5IHB1enpsZSBwaWVjZXMuIFRoZSBgRVhUNF9GU2AgY29uZmlnIGlzIGRlZmluaXRlbHkgaW4gcGxheSwgYnV0IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhlcmUgbWlnaHQgYmUgc29tZSBsZXNzIG9idmlvdXMgZGVwZW5kZW5jaWVzIGx1cmtpbmcgYXJvdW5kIHRoYXQgY2FuIHRyaXAgdXAgdGhlIGZ1enppbmcgcHJvY2VzcyBsYXRlci4gSSBuZWVkIHRvIHRha2UgYSBxdWljayBsb29rIHRvIGlkZW50aWZ5IGFueSBvdGhlciBwb3RlbnRpYWxseSByZWxldmFudCBjb25maWd1cmF0aW9ucyBvciBwcmUtY29uZGl0aW9ucyB0aGF0IG5lZWQgdG8gYmUgbWV0LiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIGV2ZW4gYmUgcmVhY2hlZCB3aXRoIHRoZSBzdGFuZGFyZCBjb25maWdzLiBJJiMzOTtsbCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGRlcGVuZGVudCBmZWF0dXJlcyB0aGF0IGFyZSByZXF1aXJlZCwgYnV0IGNvdWxkIGJlIGRpc2FibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE1OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFWFQ0X0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcbmZzL2V4dDQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7VGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWc9MzU9Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXG4tLVxuZnMvZXh0NC9LY29uZmlnLTQ1LVxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxuZnMvZXh0NC9LY29uZmlnLTQ3LVx0Ym9vbCBcJiMzNDtFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnLTU1LVxuZnMvZXh0NC9LY29uZmlnOjU2OmNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXG5mcy9leHQ0L0tjb25maWctNTctXHRib29sIFwmIzM0O0V4dDQgU2VjdXJpdHkgTGFiZWxzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTU6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg1MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgZXh0NF9zZWFyY2hfZGlyYCBNb2RpZmljYXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0d2Vha2luZyBgZXh0NF9zZWFyY2hfZGlyYCB3aXRoaW4gYGZzL2V4dDQvbmFtZWkuY2AuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWRkaW5nIGEgY3J1Y2lhbCBib3VuZHMgY2hlY2sgd2l0aGluIHRoZSBkaXJlY3Rvcnkgc2VhcmNoaW5nIGxvZ2ljLCByaWdodCBoZXJlOgoKYGBgYwoJCWlmIChkZS0mZ3Q7bmFtZSAmIzQzOyBkZS0mZ3Q7bmFtZV9sZW4gJmx0Oz0gZGxpbWl0ICZhbXA7JmFtcDsKCQkgICAgKCFleHQ0X2hhc2hfaW5fZGlyZW50KGRpcikgfHwKCQkgICAgIChjaGFyICopZGUgJiM0MzsgZXh0NF9kaXJfcmVjX2xlbihkZS0mZ3Q7bmFtZV9sZW4sIGRpcikgJmx0Oz0gZGxpbWl0KSAmYW1wOyZhbXA7CgkJICAgIGV4dDRfbWF0Y2goZGlyLCBmbmFtZSwgZGUpKSB7CmBgYAoKTXkgaW5pdGlhbCB0aG91Z2h0PyBUaGlzIGlzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSB0byBob3cgd2Ugc2VhcmNoIGV4dDQgZGlyZWN0b3JpZXMuIFRoZSBhZGRlZCBjaGVjayBzZWVtcyB0byBzcGVjaWZpY2FsbHkgcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHNpbWlsYXIgdnVsbmVyYWJpbGl0aWVzIHdoZW4gdGhlIGBleHQ0X2hhc2hfaW5fZGlyZW50KGRpcilgIGNvbmRpdGlvbiBpcyBtZXQuIFRoaXMgaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIHRoaW5nIHRoYXQgY2FuIGxlYWQgdG8gc3VidGxlIGJ1dCBleHBsb2l0YWJsZSBpc3N1ZXMgaW4gYSBmaWxlIHN5c3RlbS4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgbW9kaWZpY2F0aW9ucyB0byBkaXJlY3Rvcnkgc2VhcmNoaW5nLCBhbmQgd2Uga25vdyB0aGF0IGBleHQ0X3NlYXJjaF9kaXJgIGlzIGNhbGxlZCBieSBib3RoIGBzZWFyY2hfZGlyYmxvY2tgIGFuZCBgZXh0NF9maW5kX2lubGluZV9lbnRyeWAsIHNvIHRoaXMgaGFzIGEgYnJvYWQgaW1wYWN0LgoKR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIGJ1Z3MsIHRoaXMgaXMgZGVmaW5pdGVseSBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gVGhlIGtleSBzeW1ib2wgdG8gZm9jdXMgb24gaXMsIHdpdGhvdXQgYSBkb3VidCwgYGV4dDRfc2VhcmNoX2RpcmAgaXRzZWxmLiBJJiMzOTtsbCBuZWVkIHRvIG1ha2Ugc3VyZSBteSBmdXp6aW5nIHNldHVwIGlzIHRhcmdldGluZyB0aGF0IGZ1bmN0aW9uIGRpcmVjdGx5IGFuZCBoYXMgdGhlIHJpZ2h0IGluc3RydW1lbnRhdGlvbi4KCk5vdywgYmVmb3JlIEkgZGl2ZSBkZWVwIGludG8gY3JhZnRpbmcgZnV6eiBjYXNlcywgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZy4gSSB3YW50IHRvIHNlZSBpZiBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zLCBvciBLY29uZmlncywgYXJlIGFzc29jaWF0ZWQgd2l0aCBgZXh0NF9oYXNoX2luX2RpcmVudGAgb3Igb3RoZXIgc2ltaWxhciBmZWF0dXJlcyBpbiB0aGUgZXh0NCBjb2RlLiBUaGlzIGNvdWxkIGluZmx1ZW5jZSBteSBmdXp6aW5nIHN0cmF0ZWd5OyBJIG5lZWQgdG8ga25vdyBhYm91dCBhbnkgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgZmVhdHVyZSBmbGFncy4gVGhlIGBFWFQ0X0ZTYCBjb25maWcgaXMgZGVmaW5pdGVseSByZWxldmFudCBoZXJlLCBidXQgSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBtb3JlIHNwZWNpZmljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X2hhc2hfaW5fZGlyZW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0Lmg9MjUwND1zdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiB7XG4tLVxuZnMvZXh0NC9leHQ0LmgtMjUyMi1cbmZzL2V4dDQvZXh0NC5oOjI1MjM6c3RhdGljIGlubGluZSBib29sIGV4dDRfaGFzaF9pbl9kaXJlbnQoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2V4dDQvZXh0NC5oLTI1MjQte1xuLS1cbmZzL2V4dDQvZXh0NC5oPTI1Nzc9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZXh0NF9kaXJfcmVjX2xlbihfX3U4IG5hbWVfbGVuLFxuLS1cbmZzL2V4dDQvZXh0NC5oLTI1ODEtXG5mcy9leHQ0L2V4dDQuaDoyNTgyOlx0aWYgKGRpciBcdTAwMjZcdTAwMjYgZXh0NF9oYXNoX2luX2RpcmVudChkaXIpKVxuZnMvZXh0NC9leHQ0LmgtMjU4My1cdFx0cmVjX2xlbiAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBleHQ0X2Rpcl9lbnRyeV9oYXNoKTtcbi0tXG5mcy9leHQ0L2lubGluZS5jPTEyNTg9aW50IGV4dDRfaW5saW5lZGlyX3RvX3RyZWUoc3RydWN0IGZpbGUgKmRpcl9maWxlLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTMzNy1cbmZzL2V4dDQvaW5saW5lLmM6MTMzODpcdFx0aWYgKGV4dDRfaGFzaF9pbl9kaXJlbnQoZGlyKSkge1xuZnMvZXh0NC9pbmxpbmUuYy0xMzM5LVx0XHRcdGhpbmZvLVx1MDAzZWhhc2ggPSBFWFQ0X0RJUkVOVF9IQVNIKGRlKTtcbi0tXG5mcy9leHQ0L25hbWVpLmM9Nzc4PWR4X3Byb2JlKHN0cnVjdCBleHQ0X2ZpbGVuYW1lICpmbmFtZSwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvZXh0NC9uYW1laS5jLTgwMy1cdH1cbmZzL2V4dDQvbmFtZWkuYzo4MDQ6XHRpZiAoZXh0NF9oYXNoX2luX2RpcmVudChkaXIpKSB7XG5mcy9leHQ0L25hbWVpLmMtODA1LVx0XHRpZiAocm9vdC1cdTAwM2VpbmZvLmhhc2hfdmVyc2lvbiAhPSBEWF9IQVNIX1NJUEhBU0gpIHtcbi0tXG5mcy9leHQ0L25hbWVpLmM9MTAzOD1zdGF0aWMgaW50IGh0cmVlX2RpcmJsb2NrX3RvX3RyZWUoc3RydWN0IGZpbGUgKmRpcl9maWxlLFxuLS1cbmZzL2V4dDQvbmFtZWkuYy0xMDgzLVx0XHR9XG5mcy9leHQ0L25hbWVpLmM6MTA4NDpcdFx0aWYgKGV4dDRfaGFzaF9pbl9kaXJlbnQoZGlyKSkge1xuZnMvZXh0NC9uYW1laS5jLTEwODUtXHRcdFx0aWYgKGRlLVx1MDAzZW5hbWVfbGVuIFx1MDAyNlx1MDAyNiBkZS1cdTAwM2Vpbm9kZSkge1xuLS1cbmZzL2V4dDQvbmFtZWkuYz0xMTUxPWludCBleHQ0X2h0cmVlX2ZpbGxfdHJlZShzdHJ1Y3QgZmlsZSAqZGlyX2ZpbGUsIF9fdTMyIHN0YXJ0X2hhc2gsXG4tLVxuZnMvZXh0NC9uYW1laS5jLTExNjctXHRpZiAoIShleHQ0X3Rlc3RfaW5vZGVfZmxhZyhkaXIsIEVYVDRfSU5PREVfSU5ERVgpKSkge1xuZnMvZXh0NC9uYW1laS5jOjExNjg6XHRcdGlmIChleHQ0X2hhc2hfaW5fZGlyZW50KGRpcikpXG5mcy9leHQ0L25hbWVpLmMtMTE2OS1cdFx0XHRoaW5mby5oYXNoX3ZlcnNpb24gPSBEWF9IQVNIX1NJUEhBU0g7XG4tLVxuZnMvZXh0NC9uYW1laS5jPTEyODA9c3RhdGljIGludCBkeF9tYWtlX21hcChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcbi0tXG5mcy9leHQ0L25hbWVpLmMtMTI5OC1cdFx0aWYgKGRlLVx1MDAzZW5hbWVfbGVuIFx1MDAyNlx1MDAyNiBkZS1cdTAwM2Vpbm9kZSkge1xuZnMvZXh0NC9uYW1laS5jOjEyOTk6XHRcdFx0aWYgKGV4dDRfaGFzaF9pbl9kaXJlbnQoZGlyKSlcbmZzL2V4dDQvbmFtZWkuYy0xMzAwLVx0XHRcdFx0aC5oYXNoID0gRVhUNF9ESVJFTlRfSEFTSChkZSk7XG4tLVxuZnMvZXh0NC9uYW1laS5jPTE0NTY9aW50IGV4dDRfc2VhcmNoX2RpcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBjaGFyICpzZWFyY2hfYnVmLCBpbnQgYnVmX3NpemUsXG4tLVxuZnMvZXh0NC9uYW1laS5jLTE0NjktXHRcdGlmIChkZS1cdTAwM2VuYW1lICYjNDM7IGRlLVx1MDAzZW5hbWVfbGVuIFx1MDAzYz0gZGxpbWl0IFx1MDAyNlx1MDAyNlxuZnMvZXh0NC9uYW1laS5jOjE0NzA6XHRcdCAgICAoIWV4dDRfaGFzaF9pbl9kaXJlbnQoZGlyKSB8fFxuZnMvZXh0NC9uYW1laS5jLTE0NzEtXHRcdCAgICAgKGNoYXIgKilkZSAmIzQzOyBleHQ0X2Rpcl9yZWNfbGVuKGRlLVx1MDAzZW5hbWVfbGVuLCBkaXIpIFx1MDAzYz0gZGxpbWl0KSBcdTAwMjZcdTAwMjZcbi0tXG5mcy9leHQ0L25hbWVpLmM9MjA3MD12b2lkIGV4dDRfaW5zZXJ0X2RlbnRyeShzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9leHQ0L25hbWVpLmMtMjA5Mi1cdG1lbWNweShkZS1cdTAwM2VuYW1lLCBmbmFtZV9uYW1lKGZuYW1lKSwgZm5hbWVfbGVuKGZuYW1lKSk7XG5mcy9leHQ0L25hbWVpLmM6MjA5MzpcdGlmIChleHQ0X2hhc2hfaW5fZGlyZW50KGRpcikpIHtcbmZzL2V4dDQvbmFtZWkuYy0yMDk0LVx0XHRzdHJ1Y3QgZHhfaGFzaF9pbmZvICpoaW5mbyA9IFx1MDAyNmZuYW1lLVx1MDAzZWhpbmZvO1xuLS1cbmZzL2V4dDQvbmFtZWkuYz0yMjExPXN0YXRpYyBpbnQgbWFrZV9pbmRleGVkX2RpcihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgZXh0NF9maWxlbmFtZSAqZm5hbWUsXG4tLVxuZnMvZXh0NC9uYW1laS5jLTIyODctXHRyb290LVx1MDAzZWluZm8uaW5mb19sZW5ndGggPSBzaXplb2Yocm9vdC1cdTAwM2VpbmZvKTtcbmZzL2V4dDQvbmFtZWkuYzoyMjg4Olx0aWYgKGV4dDRfaGFzaF9pbl9kaXJlbnQoZGlyKSlcbmZzL2V4dDQvbmFtZWkuYy0yMjg5LVx0XHRyb290LVx1MDAzZWluZm8uaGFzaF92ZXJzaW9uID0gRFhfSEFTSF9TSVBIQVNIO1xuLS1cbmZzL2V4dDQvbmFtZWkuYy0yMzA1LVx0LyogY2FzZWZvbGRlZCBlbmNyeXB0ZWQgaGFzaGVzIGFyZSBjb21wdXRlZCBvbiBmbmFtZSBzZXR1cCAqL1xuZnMvZXh0NC9uYW1laS5jOjIzMDY6XHRpZiAoIWV4dDRfaGFzaF9pbl9kaXJlbnQoZGlyKSkge1xuZnMvZXh0NC9uYW1laS5jLTIzMDctXHRcdGludCBlcnIgPSBleHQ0ZnNfZGlyaGFzaChkaXIsIGZuYW1lX25hbWUoZm5hbWUpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjM1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIGl0IGxvb2tzIGxpa2UgSSYjMzk7bSBsb29raW5nIGF0IGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBpbmxpbmUgZnVuY3Rpb24uCgoqKkFuYWx5emluZyBhIFNpbXBsZSBleHQ0IElubGluZSBGdW5jdGlvbioqCgpTbywgdGhpcyBgZXh0NF9oYXNoX2luX2RpcmVudGAgZnVuY3Rpb24gaXMganVzdCBhIHF1aWNrIGZsYWcgY2hlY2ssIHVzaW5nIHNvbWV0aGluZyBha2luIHRvIGBleHQ0X3Rlc3RfaW5vZGVfZmxhZ2AuIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoYXQgcGF0dGVybjsgaXQmIzM5O3MgYSBjb21tb24gYXBwcm9hY2ggZm9yIGNoZWNraW5nIGlub2RlIG1ldGFkYXRhLiBJdCYjMzk7cyBkZXNpZ25lZCB0byBiZSBlZmZpY2llbnQsIGFzIGl0JiMzOTtzIGFuIGBpbmxpbmVgIGZ1bmN0aW9uLCBwcmVzdW1hYmx5IHRvIGF2b2lkIHRoZSBvdmVyaGVhZCBvZiBhIGZ1bmN0aW9uIGNhbGwgd2hlbiBmcmVxdWVudGx5IGFjY2Vzc2VkLiBNeSBjdXJpb3NpdHkgaXMgc3BhcmtlZDsgSSBzaG91bGQgZGl2ZSBkZWVwZXIgaW50byB3aGVyZSBgZXh0NF90ZXN0X2lub2RlX2ZsYWdgIGlzIGRlZmluZWQgdG8gdW5kZXJzdGFuZCAqcHJlY2lzZWx5KiB3aGF0IGZsYWcgaXMgYmVpbmcgdGVzdGVkIGhlcmUsIHNwZWNpZmljYWxseSBgRVhUNF9JTk9ERV9FQV9JTk9ERWAsIGJ1dCBJIHN1c3BlY3QgaXQgcmVsYXRlcyB0byB0aGUgaGFuZGxpbmcgb2YgZXh0ZW5kZWQgYXR0cmlidXRlcyB3aXRoaW4gdGhlIGRpcmVjdG9yeSBlbnRyeS4gVGltZSB0byB0cmFjayBkb3duIHRoYXQgYGV4dDRfdGVzdF9pbm9kZV9mbGFnYCBkZWZpbml0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgaW5saW5lIGJvb2wgZXh0NF9oYXNoX2luX2RpcmVudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0NC5oPTI1MDQ9c3RydWN0IGV4dDRfZGlyX2VudHJ5XzIge1xuLS1cbmZzL2V4dDQvZXh0NC5oLTI1MjItXG5mcy9leHQ0L2V4dDQuaDoyNTIzOnN0YXRpYyBpbmxpbmUgYm9vbCBleHQ0X2hhc2hfaW5fZGlyZW50KGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9leHQ0L2V4dDQuaC0yNTI0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTY6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA0OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE2OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0LmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI1MjA6XHQjZGVmaW5lIEVYVDRfRElSRU5UX01JTk9SX0hBU0goZW50cnkpIFxcXG4yNTIxOlx0XHRcdGxlMzJfdG9fY3B1KEVYVDRfRElSRU5UX0hBU0hFUyhlbnRyeSktXHUwMDNlbWlub3JfaGFzaClcbjI1MjI6XHRcbjI1MjM6XHRzdGF0aWMgaW5saW5lIGJvb2wgZXh0NF9oYXNoX2luX2RpcmVudChjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuMjUyNDpcdHtcbjI1MjU6XHRcdHJldHVybiBJU19DQVNFRk9MREVEKGlub2RlKSBcdTAwMjZcdTAwMjYgSVNfRU5DUllQVEVEKGlub2RlKTtcbjI1MjY6XHR9XG4yNTI3Olx0XG4yNTI4Olx0LypcbjI1Mjk6XHQgKiBUaGlzIGlzIGEgYm9ndXMgZGlyZWN0b3J5IGVudHJ5IGF0IHRoZSBlbmQgb2YgZWFjaCBsZWFmIGJsb2NrIHRoYXRcbjI1MzA6XHQgKiByZWNvcmRzIGNoZWNrc3Vtcy5cbjI1MzE6XHQgKi9cbjI1MzI6XHRzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfdGFpbCB7XG4yNTMzOlx0XHRfX2xlMzJcdGRldF9yZXNlcnZlZF96ZXJvMTtcdC8qIFByZXRlbmQgdG8gYmUgdW51c2VkICovXG4yNTM0Olx0XHRfX2xlMTZcdGRldF9yZWNfbGVuO1x0XHQvKiAxMiAqL1xuMjUzNTpcdFx0X191OFx0ZGV0X3Jlc2VydmVkX3plcm8yO1x0LyogWmVybyBuYW1lIGxlbmd0aCAqL1xuMjUzNjpcdFx0X191OFx0ZGV0X3Jlc2VydmVkX2Z0O1x0LyogMHhERSwgZmFrZSBmaWxlIHR5cGUgKi9cbjI1Mzc6XHRcdF9fbGUzMlx0ZGV0X2NoZWNrc3VtO1x0XHQvKiBjcmMzMmModXVpZCYjNDM7aW51bSYjNDM7ZGlyYmxvY2spICovXG4yNTM4Olx0fTtcbjI1Mzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTY6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA2NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGVjb2RpbmcgdGhlIElub2RlIFJlcXVpcmVtZW50cyoqCgpSaWdodCwgbGV0JiMzOTtzIHNlZSwgd2hhdCBhcmUgd2UgZGVhbGluZyB3aXRoIGhlcmUuLi4gYElTX0NBU0VGT0xERUQoaW5vZGUpICZhbXA7JmFtcDsgSVNfRU5DUllQVEVEKGlub2RlKWAuIEVzc2VudGlhbGx5LCB0aGlzIGlub2RlICptdXN0KiBiZSBjYXNlZm9sZGVkICphbmQqIGVuY3J5cHRlZC4gVGhhdCYjMzk7cyB0aGUgY29yZSByZXF1aXJlbWVudC4gT2theSwgdW5kZXJzdG9vZC4gTGV0JiMzOTtzIHNlZSBob3cgdGhpcyB0aWVzIGludG8gdGhlIGNvbmZpZ3MuCgpOb3csIHdoaWNoIGZlYXR1cmVzIG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyB0byBiZSB2YWxpZD8gV2UgaGF2ZSB0byBoYXZlIGBFWFQ0X0ZTYCBhcyB0aGUgYmFzZSBmaWxlc3lzdGVtLCBvZiBjb3Vyc2UuIFRoZW4gd2UgaGF2ZSBgRVhUNF9GU19FTkNSWVBUSU9OYC4gSG1tLCB3YWl0IGEgc2Vjb25kLCBJIHRoaW5rIHRoYXQmIzM5O3MgYmVlbiBzdHJlYW1saW5lZC4gSSAqYmVsaWV2ZSogaXQmIzM5O3MganVzdCBgRlNfRU5DUllQVElPTmAgbm93YWRheXMuIEdvdHRhIGNvbmZpcm0gdGhhdC4gQW5kIHNpbmNlIHdlIGhhdmUgY2FzZWZvbGRpbmcgdG8gZGVhbCB3aXRoLCB3ZSYjMzk7bGwgbmVlZCBgVU5JQ09ERWAgZW5hYmxlZC4gQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZm9yIGV4dDQgYW5kIGNvbmZpcm0gdGhvc2UgZGVwZW5kZW5jaWVzIGFuZCB0aGVpciBzcGVjaWZpYyBtZWFuaW5ncyB0byBiZSBzdXJlLiBJdCYjMzk7cyB0aW1lIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXNlIGFzc3VtcHRpb25zIGFyZSBzb2xpZCBiZWZvcmUgbW92aW5nIGFueSBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRVhUNF9GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2V4dDQvS2NvbmZpZzoyOmNvbmZpZyBFWFQ0X0ZTXG5mcy9leHQ0L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1RoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnPTM1PWNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxuLS1cbmZzL2V4dDQvS2NvbmZpZy00NS1cbmZzL2V4dDQvS2NvbmZpZzo0Njpjb25maWcgRVhUNF9GU19QT1NJWF9BQ0xcbmZzL2V4dDQvS2NvbmZpZy00Ny1cdGJvb2wgXCYjMzQ7RXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1wmIzM0O1xuLS1cbmZzL2V4dDQvS2NvbmZpZy01NS1cbmZzL2V4dDQvS2NvbmZpZzo1Njpjb25maWcgRVhUNF9GU19TRUNVUklUWVxuZnMvZXh0NC9LY29uZmlnLTU3LVx0Ym9vbCBcJiMzNDtFeHQ0IFNlY3VyaXR5IExhYmVsc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjM4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTY6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIEVYVDRfRlNcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O1RoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXCYjMzQ7XG4gICA0Olx0XHRzZWxlY3QgQlVGRkVSX0hFQURcbiAgIDU6XHRcdHNlbGVjdCBKQkQyXG4gICA2Olx0XHRzZWxlY3QgQ1JDMTZcbiAgIDc6XHRcdHNlbGVjdCBDUkMzMlxuICAgODpcdFx0c2VsZWN0IEZTX0lPTUFQXG4gICA5Olx0XHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cbiAgMTA6XHRcdGhlbHBcbiAgMTE6XHRcdCAgVGhpcyBpcyB0aGUgbmV4dCBnZW5lcmF0aW9uIG9mIHRoZSBleHQzIGZpbGVzeXN0ZW0uXG4gIDEyOlx0XG4gIDEzOlx0XHQgIFVubGlrZSB0aGUgY2hhbmdlIGZyb20gZXh0MiBmaWxlc3lzdGVtIHRvIGV4dDMgZmlsZXN5c3RlbSxcbiAgMTQ6XHRcdCAgdGhlIG9uLWRpc2sgZm9ybWF0IG9mIGV4dDQgaXMgbm90IGZvcndhcmRzIGNvbXBhdGlibGUgd2l0aFxuICAxNTpcdFx0ICBleHQzOyBpdCBpcyBiYXNlZCBvbiBleHRlbnQgbWFwcyBhbmQgaXQgc3VwcG9ydHMgNDgtYml0XG4gIDE2Olx0XHQgIHBoeXNpY2FsIGJsb2NrIG51bWJlcnMuICBUaGUgZXh0NCBmaWxlc3lzdGVtIGFsc28gc3VwcG9ydHMgZGVsYXllZFxuICAxNzpcdFx0ICBhbGxvY2F0aW9uLCBwZXJzaXN0ZW50IHByZWFsbG9jYXRpb24sIGhpZ2ggcmVzb2x1dGlvbiB0aW1lIHN0YW1wcyxcbiAgMTg6XHRcdCAgYW5kIGEgbnVtYmVyIG9mIG90aGVyIGZlYXR1cmVzIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UgYW5kIHNwZWVkXG4gIDE5Olx0XHQgIHVwIGZzY2sgdGltZS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2Ugc2VlIHRoZSB3ZWIgcGFnZXMgYXRcbiAgMjA6XHRcdCAgaHR0cDovL2V4dDQud2lraS5rZXJuZWwub3JnLlxuICAyMTpcdFxuICAyMjpcdFx0ICBUaGUgZXh0NCBmaWxlc3lzdGVtIHN1cHBvcnRzIG1vdW50aW5nIGFuIGV4dDMgZmlsZXN5c3RlbTsgd2hpbGUgdGhlcmVcbiAgMjM6XHRcdCAgYXJlIHNvbWUgcGVyZm9ybWFuY2UgZ2FpbnMgZnJvbSB0aGUgZGVsYXllZCBhbGxvY2F0aW9uIGFuZCBpbm9kZVxuICAyNDpcdFx0ICB0YWJsZSByZWFkYWhlYWQsIHRoZSBiZXN0IHBlcmZvcm1hbmNlIGdhaW5zIHJlcXVpcmUgZW5hYmxpbmcgZXh0NFxuICAyNTpcdFx0ICBmZWF0dXJlcyBpbiB0aGUgZmlsZXN5c3RlbSB1c2luZyB0dW5lMmZzLCBvciBmb3JtYXR0aW5nIGEgbmV3XG4gIDI2Olx0XHQgIGZpbGVzeXN0ZW0gYXMgYW4gZXh0NCBmaWxlc3lzdGVtIGluaXRpYWxseS4gV2l0aG91dCBleHBsaWNpdCBlbmFibGluZ1xuICAyNzpcdFx0ICBvZiBleHQ0IGZlYXR1cmVzLCB0aGUgb24gZGlzayBmaWxlc3lzdGVtIGZvcm1hdCBzdGF5cyBmdWxseSBiYWNrd2FyZFxuICAyODpcdFx0ICBjb21wYXRpYmxlLlxuICAyOTpcdFxuICAzMDpcdFx0ICBUbyBjb21waWxlIHRoaXMgZmlsZSBzeXN0ZW0gc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlXG4gIDMxOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBleHQ0LlxuICAzMjpcdFxuICAzMzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAzNDpcdFxuICAzNTpcdGNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxuICAzNjpcdFx0Ym9vbCBcJiMzNDtVc2UgZXh0NCBmb3IgZXh0MiBmaWxlIHN5c3RlbXNcJiMzNDtcbiAgMzc6XHRcdGRlcGVuZHMgb24gRVhUNF9GU1xuICAzODpcdFx0ZGVwZW5kcyBvbiBFWFQyX0ZTPW5cbiAgMzk6XHRcdGRlZmF1bHQgeVxuICA0MDpcdFx0aGVscFxuICA0MTpcdFx0ICBBbGxvdyB0aGUgZXh0NCBmaWxlIHN5c3RlbSBkcml2ZXIgY29kZSB0byBiZSB1c2VkIGZvciBleHQyXG4gIDQyOlx0XHQgIGZpbGUgc3lzdGVtIG1vdW50cy4gIFRoaXMgYWxsb3dzIHVzZXJzIHRvIHJlZHVjZSB0aGVpclxuICA0MzpcdFx0ICBjb21waWxlZCBrZXJuZWwgc2l6ZSBieSB1c2luZyBvbmUgZmlsZSBzeXN0ZW0gZHJpdmVyIGZvclxuICA0NDpcdFx0ICBleHQyLCBleHQzLCBhbmQgZXh0NCBmaWxlIHN5c3RlbXMuXG4gIDQ1Olx0XG4gIDQ2Olx0Y29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMXG4gIDQ3Olx0XHRib29sIFwmIzM0O0V4dDQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbiAgNDg6XHRcdGRlcGVuZHMgb24gRVhUNF9GU1xuICA0OTpcdFx0c2VsZWN0IEZTX1BPU0lYX0FDTFxuICA1MDpcdFx0aGVscFxuICA1MTpcdFx0ICBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0cyAoQUNMcykgc3VwcG9ydCBwZXJtaXNzaW9ucyBmb3IgdXNlcnMgYW5kXG4gIDUyOlx0XHQgIGdyb3VwcyBiZXlvbmQgdGhlIG93bmVyL2dyb3VwL3dvcmxkIHNjaGVtZS5cbiAgNTM6XHRcbiAgNTQ6XHRcdCAgSWYgeW91IGRvbiYjMzk7dCBrbm93IHdoYXQgQWNjZXNzIENvbnRyb2wgTGlzdHMgYXJlLCBzYXkgTlxuICA1NTpcdFxuICA1NjpcdGNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXG4gIDU3Olx0XHRib29sIFwmIzM0O0V4dDQgU2VjdXJpdHkgTGFiZWxzXCYjMzQ7XG4gIDU4Olx0XHRkZXBlbmRzIG9uIEVYVDRfRlNcbiAgNTk6XHRcdGhlbHBcbiAgNjA6XHRcdCAgU2VjdXJpdHkgbGFiZWxzIHN1cHBvcnQgYWx0ZXJuYXRpdmUgYWNjZXNzIGNvbnRyb2wgbW9kZWxzXG4gIDYxOlx0XHQgIGltcGxlbWVudGVkIGJ5IHNlY3VyaXR5IG1vZHVsZXMgbGlrZSBTRUxpbnV4LiAgVGhpcyBvcHRpb25cbiAgNjI6XHRcdCAgZW5hYmxlcyBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgaGFuZGxlciBmb3IgZmlsZSBzZWN1cml0eVxuICA2MzpcdFx0ICBsYWJlbHMgaW4gdGhlIGV4dDQgZmlsZXN5c3RlbS5cbiAgNjQ6XHRcbiAgNjU6XHRcdCAgSWYgeW91IGFyZSBub3QgdXNpbmcgYSBzZWN1cml0eSBtb2R1bGUgdGhhdCByZXF1aXJlcyB1c2luZ1xuICA2NjpcdFx0ICBleHRlbmRlZCBhdHRyaWJ1dGVzIGZvciBmaWxlIHNlY3VyaXR5IGxhYmVscywgc2F5IE4uXG4gIDY3Olx0XG4gIDY4Olx0Y29uZmlnIEVYVDRfREVCVUdcbiAgNjk6XHRcdGJvb2wgXCYjMzQ7RXh0NCBkZWJ1Z2dpbmcgc3VwcG9ydFwmIzM0O1xuICA3MDpcdFx0ZGVwZW5kcyBvbiBFWFQ0X0ZTXG4gIDcxOlx0XHRoZWxwXG4gIDcyOlx0XHQgIEVuYWJsZXMgcnVuLXRpbWUgZGVidWdnaW5nIHN1cHBvcnQgZm9yIHRoZSBleHQ0IGZpbGVzeXN0ZW0uXG4gIDczOlx0XG4gIDc0Olx0XHQgIElmIHlvdSBzZWxlY3QgWSBoZXJlLCB0aGVuIHlvdSB3aWxsIGJlIGFibGUgdG8gdHVybiBvbiBkZWJ1Z2dpbmdcbiAgNzU6XHRcdCAgdXNpbmcgZHluYW1pYyBkZWJ1ZyBjb250cm9sIGZvciBtYl9kZWJ1ZygpIC8gZXh0X2RlYnVnKCkgbXNncy5cbiAgNzY6XHRcbiAgNzc6XHRjb25maWcgRVhUNF9LVU5JVF9URVNUU1xuICA3ODpcdFx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIGV4dDRcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuICA3OTpcdFx0ZGVwZW5kcyBvbiBFWFQ0X0ZTIFx1MDAyNlx1MDAyNiBLVU5JVFxuICA4MDpcdFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbiAgODE6XHRcdGhlbHBcbiAgODI6XHRcdCAgVGhpcyBidWlsZHMgdGhlIGV4dDQgS1VuaXQgdGVzdHMuXG4gIDgzOlx0XG4gIDg0Olx0XHQgIEtVbml0IHRlc3RzIHJ1biBkdXJpbmcgYm9vdCBhbmQgb3V0cHV0IHRoZSByZXN1bHRzIHRvIHRoZSBkZWJ1ZyBsb2dcbiAgODU6XHRcdCAgaW4gVEFQIGZvcm1hdCAoaHR0cHM6Ly90ZXN0YW55dGhpbmcub3JnLykuIE9ubHkgdXNlZnVsIGZvciBrZXJuZWwgZGV2c1xuICA4NjpcdFx0ICBydW5uaW5nIEtVbml0IHRlc3QgaGFybmVzcyBhbmQgYXJlIG5vdCBmb3IgaW5jbHVzaW9uIGludG8gYSBwcm9kdWN0aW9uXG4gIDg3Olx0XHQgIGJ1aWxkLlxuICA4ODpcdFxuICA4OTpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsIHBsZWFzZSByZWZlclxuICA5MDpcdFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbiBpbiBEb2N1bWVudGF0aW9uL2Rldi10b29scy9rdW5pdC8uXG4gIDkxOlx0XG4gIDkyOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE2OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5ODkKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIENvbmZpZ3VyYXRpb24gUGFyYW1ldGVycyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgZm9jdXNlZCBvbiB0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguIFRoZSB0ZXJtIGBGU19FTkNSWVBUSU9OYCBpbnN0YW50bHkgZmxhZ3MgdGhlIGZpbGUgc3lzdGVtIGVuY3J5cHRpb24gc2V0dGluZywgd2hpY2ggaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gTXkgbmV4dCB0aG91Z2h0IGp1bXBzIGRpcmVjdGx5IHRvIGBVTklDT0RFYC4gSSBpbW1lZGlhdGVseSByZWNvZ25pemUgdGhpcyBhcyBiZWluZyBsaW5rZWQgdG8gY2hhcmFjdGVyIGNhc2Vmb2xkaW5nLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBkZWVwZXIgYW5kIGludmVzdGlnYXRlIHRoZSBjb25maWd1cmF0aW9uIGRldGFpbHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBgVU5JQ09ERWAgc2V0dGluZy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHNwZWNpZmllZCwgYW5kIGNvbnNpZGVyIGltcGxpY2F0aW9ucyBmb3IgdGhlIG92ZXJhbGwgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE2OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVTklDT0RFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3VuaWNvZGUvS2NvbmZpZy00LSNcbmZzL3VuaWNvZGUvS2NvbmZpZzo1OmNvbmZpZyBVTklDT0RFXG5mcy91bmljb2RlL0tjb25maWctNi1cdHRyaXN0YXRlIFwmIzM0O1VURi04IG5vcm1hbGl6YXRpb24gYW5kIGNhc2Vmb2xkaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy91bmljb2RlL0tjb25maWctMTItXG5mcy91bmljb2RlL0tjb25maWc6MTM6Y29uZmlnIFVOSUNPREVfTk9STUFMSVpBVElPTl9LVU5JVF9URVNUXG5mcy91bmljb2RlL0tjb25maWctMTQtXHR0cmlzdGF0ZSBcJiMzNDtUZXN0IFVURi04IG5vcm1hbGl6YXRpb24gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzAwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRlY29kaW5nIHRoZSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O3ZlIGdvdCBpdC4gYFVOSUNPREVgIGlzIHRoZSBrZXkgc2V0dGluZyBpbiB0aGlzIGNvbmZpZ3VyYXRpb24gdGhhdCBkZWFscyB3aXRoIGNhc2Vmb2xkaW5nLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyB0aGUgbW9zdCBsaWtlbHkgb25lLiBTbywgdG8gcmVjYXAsIHRoZSBpbXBvcnRhbnQgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQgaGVyZSBhcmUgYEVYVDRfRlNgLCBgRlNfRU5DUllQVElPTmAsIGFuZCBgVU5JQ09ERWAuCgpOb3csIEkgc2hvdWxkIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSByZWxhdGlvbnNoaXAgd2l0aCBgZXh0NF9oYXNoX2luX2RpcmVudGAgYW5kIGFsc28gYElTX0NBU0VGT0xERURgLiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSBmdWxsIHBpY3R1cmUgaGVyZSBhbmQgYXJlIG5vdCBtaXNzaW5nIGFueSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJU19DQVNFRk9MREVEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9kaXIuYz0xMzA9c3RhdGljIGludCBleHQ0X3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KVxuLS1cbmZzL2V4dDQvZGlyLmMtMjg5LVxuZnMvZXh0NC9kaXIuYzoyOTA6XHRcdFx0XHRcdGlmIChJU19DQVNFRk9MREVEKGlub2RlKSkge1xuZnMvZXh0NC9kaXIuYy0yOTEtXHRcdFx0XHRcdFx0aGFzaCA9IEVYVDRfRElSRU5UX0hBU0goZGUpO1xuLS1cbmZzL2V4dDQvZXh0NC5oPTI1MjM9c3RhdGljIGlubGluZSBib29sIGV4dDRfaGFzaF9pbl9kaXJlbnQoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2V4dDQvZXh0NC5oLTI1MjQte1xuZnMvZXh0NC9leHQ0Lmg6MjUyNTpcdHJldHVybiBJU19DQVNFRk9MREVEKGlub2RlKSBcdTAwMjZcdTAwMjYgSVNfRU5DUllQVEVEKGlub2RlKTtcbmZzL2V4dDQvZXh0NC5oLTI1MjYtfVxuLS1cbmZzL2V4dDQvaGFzaC10ZXN0LmM9NDQ0PXN0YXRpYyB2b2lkIHRlc3RfZXh0NGZzX2Rpcmhhc2hfY2FzZWZvbGRlZF9uYW1lc19oYXNoX2NvbnNpc3RlbnRseShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxuZnMvZXh0NC9oYXNoLXRlc3QuYy00NzgtXG5mcy9leHQ0L2hhc2gtdGVzdC5jOjQ3OTpcdEtVTklUX0FTU0VSVF9UUlVFKHRlc3QsIElTX0NBU0VGT0xERUQoXHUwMDI2ZWktXHUwMDNldmZzX2lub2RlKSk7XG5mcy9leHQ0L2hhc2gtdGVzdC5jLTQ4MC1cbi0tXG5mcy9leHQ0L2hhc2gtdGVzdC5jPTQ5MD1zdGF0aWMgdm9pZCB0ZXN0X2V4dDRmc19kaXJoYXNoX2Nhc2Vmb2xkX2ZhbGxiYWNrKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5mcy9leHQ0L2hhc2gtdGVzdC5jLTUzMC1cbmZzL2V4dDQvaGFzaC10ZXN0LmM6NTMxOlx0S1VOSVRfQVNTRVJUX1RSVUUodGVzdCwgSVNfQ0FTRUZPTERFRChcdTAwMjZlaS1cdTAwM2V2ZnNfaW5vZGUpKTtcbmZzL2V4dDQvaGFzaC10ZXN0LmMtNTMyLVxuLS1cbmZzL2V4dDQvaGFzaC5jPTMxND1pbnQgZXh0NGZzX2Rpcmhhc2goY29uc3Qgc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4sXG4tLVxuZnMvZXh0NC9oYXNoLmMtMzIyLVxuZnMvZXh0NC9oYXNoLmM6MzIzOlx0aWYgKGxlbiBcdTAwMjZcdTAwMjYgSVNfQ0FTRUZPTERFRChkaXIpIFx1MDAyNlx1MDAyNlxuZnMvZXh0NC9oYXNoLmMtMzI0LVx0ICAgKCFJU19FTkNSWVBURUQoZGlyKSB8fCBmc2NyeXB0X2hhc19lbmNyeXB0aW9uX2tleShkaXIpKSkge1xuLS1cbmZzL2V4dDQvaW5vZGUuYz01MjczPXN0cnVjdCBpbm9kZSAqX19leHQ0X2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8sXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTU2MDgtXHR9XG5mcy9leHQ0L2lub2RlLmM6NTYwOTpcdGlmIChJU19DQVNFRk9MREVEKGlub2RlKSBcdTAwMjZcdTAwMjYgIWV4dDRfaGFzX2ZlYXR1cmVfY2FzZWZvbGQoaW5vZGUtXHUwMDNlaV9zYikpIHtcbmZzL2V4dDQvaW5vZGUuYy01NjEwLVx0XHRleHQ0X2Vycm9yX2lub2RlKGlub2RlLCBmdW5jdGlvbiwgbGluZSwgMCxcbi0tXG5mcy9leHQ0L25hbWVpLmM9NjIxPXN0YXRpYyBzdHJ1Y3Qgc3RhdHMgZHhfc2hvd19sZWFmKHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL2V4dDQvbmFtZWkuYy02NzktXHRcdFx0XHRcdH1cbmZzL2V4dDQvbmFtZWkuYzo2ODA6XHRcdFx0XHRcdGlmIChJU19DQVNFRk9MREVEKGRpcikpXG5mcy9leHQ0L25hbWVpLmMtNjgxLVx0XHRcdFx0XHRcdGguaGFzaCA9IEVYVDRfRElSRU5UX0hBU0goZGUpO1xuLS1cbmZzL2V4dDQvbmFtZWkuYz03Nzg9ZHhfcHJvYmUoc3RydWN0IGV4dDRfZmlsZW5hbWUgKmZuYW1lLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9leHQ0L25hbWVpLmMtODI0LVx0aWYgKGZuYW1lIFx1MDAyNlx1MDAyNiBmbmFtZV9uYW1lKGZuYW1lKSBcdTAwMjZcdTAwMjZcbmZzL2V4dDQvbmFtZWkuYzo4MjU6XHQgICAgIShJU19FTkNSWVBURUQoZGlyKSBcdTAwMjZcdTAwMjYgSVNfQ0FTRUZPTERFRChkaXIpKSkge1xuZnMvZXh0NC9uYW1laS5jLTgyNi1cdFx0aW50IHJldCA9IGV4dDRmc19kaXJoYXNoKGRpciwgZm5hbWVfbmFtZShmbmFtZSksXG4tLVxuZnMvZXh0NC9uYW1laS5jPTEzNjI9aW50IGV4dDRfZm5hbWVfc2V0dXBfY2lfZmlsZW5hbWUoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICppbmFtZSxcbi0tXG5mcy9leHQ0L25hbWVpLmMtMTM2OS1cbmZzL2V4dDQvbmFtZWkuYzoxMzcwOlx0aWYgKCFJU19DQVNFRk9MREVEKGRpcikgfHxcbmZzL2V4dDQvbmFtZWkuYy0xMzcxLVx0ICAgIChJU19FTkNSWVBURUQoZGlyKSBcdTAwMjZcdTAwMjYgIWZzY3J5cHRfaGFzX2VuY3J5cHRpb25fa2V5KGRpcikpKSB7XG4tLVxuZnMvZXh0NC9uYW1laS5jPTE0MDU9c3RhdGljIGJvb2wgZXh0NF9tYXRjaChzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbi0tXG5mcy9leHQ0L25hbWVpLmMtMTQyMC0jaWYgSVNfRU5BQkxFRChDT05GSUdfVU5JQ09ERSlcbmZzL2V4dDQvbmFtZWkuYzoxNDIxOlx0aWYgKElTX0NBU0VGT0xERUQocGFyZW50KSBcdTAwMjZcdTAwMjZcbmZzL2V4dDQvbmFtZWkuYy0xNDIyLVx0ICAgICghSVNfRU5DUllQVEVEKHBhcmVudCkgfHwgZnNjcnlwdF9oYXNfZW5jcnlwdGlvbl9rZXkocGFyZW50KSkpIHtcbi0tXG5mcy9leHQ0L25hbWVpLmM9MTUxOT1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICpfX2V4dDRfZmluZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9leHQ0L25hbWVpLmMtMTU3Mi1cdFx0ZWxzZSBpZiAoIXNiX25vX2Nhc2Vmb2xkX2NvbXBhdF9mYWxsYmFjayhkaXItXHUwMDNlaV9zYikgXHUwMDI2XHUwMDI2XG5mcy9leHQ0L25hbWVpLmM6MTU3MzpcdFx0XHQgKnJlc19kaXIgPT0gTlVMTCBcdTAwMjZcdTAwMjYgSVNfQ0FTRUZPTERFRChkaXIpKVxuZnMvZXh0NC9uYW1laS5jLTE1NzQtXHRcdFx0ZHh0cmFjZShwcmludGsoS0VSTl9ERUJVRyBcJiMzNDtleHQ0X2ZpbmRfZW50cnk6IGNhc2Vmb2xkIFwmIzM0O1xuLS1cbmZzL2V4dDQvbmFtZWkuYz0xNzYyPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpleHQ0X2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4tLVxuZnMvZXh0NC9uYW1laS5jLTE4MDQtXG5mcy9leHQ0L25hbWVpLmM6MTgwNTpcdGlmIChJU19FTkFCTEVEKENPTkZJR19VTklDT0RFKSBcdTAwMjZcdTAwMjYgIWlub2RlIFx1MDAyNlx1MDAyNiBJU19DQVNFRk9MREVEKGRpcikpIHtcbmZzL2V4dDQvbmFtZWkuYy0xODA2LVx0XHQvKiBFdmVudHVhbGx5IHdlIHdhbnQgdG8gY2FsbCBkX2FkZF9jaShkZW50cnksIE5VTEwpXG4tLVxuZnMvZXh0NC9uYW1laS5jPTMxMzg9c3RhdGljIGludCBleHQ0X3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4tLVxuZnMvZXh0NC9uYW1laS5jLTMyMTctXHQgKi9cbmZzL2V4dDQvbmFtZWkuYzozMjE4Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1VOSUNPREUpIFx1MDAyNlx1MDAyNiBJU19DQVNFRk9MREVEKGRpcikpXG5mcy9leHQ0L25hbWVpLmMtMzIxOS1cdFx0ZF9pbnZhbGlkYXRlKGRlbnRyeSk7XG4tLVxuZnMvZXh0NC9uYW1laS5jPTMzMDE9c3RhdGljIGludCBleHQ0X3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuLS1cbmZzL2V4dDQvbmFtZWkuYy0zMzI4LVx0ICovXG5mcy9leHQ0L25hbWVpLmM6MzMyOTpcdGlmIChJU19FTkFCTEVEKENPTkZJR19VTklDT0RFKSBcdTAwMjZcdTAwMjYgSVNfQ0FTRUZPTERFRChkaXIpKVxuZnMvZXh0NC9uYW1laS5jLTMzMzAtXHRcdGRfaW52YWxpZGF0ZShkZW50cnkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQ0OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE2OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lTX0VOQ1JZUFRFRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZGlyLmM9MTMwPXN0YXRpYyBpbnQgZXh0NF9yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcbi0tXG5mcy9leHQ0L2Rpci5jLTE2OC1cbmZzL2V4dDQvZGlyLmM6MTY5Olx0aWYgKElTX0VOQ1JZUFRFRChpbm9kZSkpIHtcbmZzL2V4dDQvZGlyLmMtMTcwLVx0XHRlcnIgPSBmc2NyeXB0X2ZuYW1lX2FsbG9jX2J1ZmZlcihFWFQ0X05BTUVfTEVOLCBcdTAwMjZmc3RyKTtcbi0tXG5mcy9leHQ0L2Rpci5jLTI3NS1cdFx0XHRpZiAobGUzMl90b19jcHUoZGUtXHUwMDNlaW5vZGUpKSB7XG5mcy9leHQ0L2Rpci5jOjI3NjpcdFx0XHRcdGlmICghSVNfRU5DUllQVEVEKGlub2RlKSkge1xuZnMvZXh0NC9kaXIuYy0yNzctXHRcdFx0XHRcdGlmICghZGlyX2VtaXQoY3R4LCBkZS1cdTAwM2VuYW1lLFxuLS1cbmZzL2V4dDQvZXh0NC5oPTI1MjM9c3RhdGljIGlubGluZSBib29sIGV4dDRfaGFzaF9pbl9kaXJlbnQoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2V4dDQvZXh0NC5oLTI1MjQte1xuZnMvZXh0NC9leHQ0Lmg6MjUyNTpcdHJldHVybiBJU19DQVNFRk9MREVEKGlub2RlKSBcdTAwMjZcdTAwMjYgSVNfRU5DUllQVEVEKGlub2RlKTtcbmZzL2V4dDQvZXh0NC5oLTI1MjYtfVxuLS1cbmZzL2V4dDQvZXh0NF9qYmQyLmM9MTA9aW50IGV4dDRfaW5vZGVfam91cm5hbF9tb2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9leHQ0X2piZDIuYy0yMC1cdFx0LyogV2UgZG8gbm90IHN1cHBvcnQgZGF0YSBqb3VybmFsbGluZyBmb3IgZW5jcnlwdGVkIGRhdGEgKi9cbmZzL2V4dDQvZXh0NF9qYmQyLmM6MjE6XHRcdGlmIChTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkgXHUwMDI2XHUwMDI2IElTX0VOQ1JZUFRFRChpbm9kZSkpXG5mcy9leHQ0L2V4dDRfamJkMi5jLTIyLVx0XHRcdHJldHVybiBFWFQ0X0lOT0RFX09SREVSRURfREFUQV9NT0RFOyAgLyogb3JkZXJlZCAqL1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTQ4NTQ9bG9uZyBleHQ0X2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNDg2NS1cdCAqL1xuZnMvZXh0NC9leHRlbnRzLmM6NDg2NjpcdGlmIChJU19FTkNSWVBURUQoaW5vZGUpIFx1MDAyNlx1MDAyNlxuZnMvZXh0NC9leHRlbnRzLmMtNDg2Ny1cdCAgICAobW9kZSBcdTAwMjYgKEZBTExPQ19GTF9DT0xMQVBTRV9SQU5HRSB8IEZBTExPQ19GTF9JTlNFUlRfUkFOR0UpKSlcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9NDU0PXN0YXRpYyBpbnQgX190cmFja19kZW50cnlfdXBkYXRlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTQ2OC1cbmZzL2V4dDQvZmFzdF9jb21taXQuYzo0Njk6XHRpZiAoSVNfRU5DUllQVEVEKGRpcikpIHtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy00NzAtXHRcdGV4dDRfZmNfbWFya19pbmVsaWdpYmxlKHNiLCBFWFQ0X0ZDX1JFQVNPTl9FTkNSWVBURURfRklMRU5BTUUsXG4tLVxuZnMvZXh0NC9oYXNoLmM9MzE0PWludCBleHQ0ZnNfZGlyaGFzaChjb25zdCBzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbixcbi0tXG5mcy9leHQ0L2hhc2guYy0zMjMtXHRpZiAobGVuIFx1MDAyNlx1MDAyNiBJU19DQVNFRk9MREVEKGRpcikgXHUwMDI2XHUwMDI2XG5mcy9leHQ0L2hhc2guYzozMjQ6XHQgICAoIUlTX0VOQ1JZUFRFRChkaXIpIHx8IGZzY3J5cHRfaGFzX2VuY3J5cHRpb25fa2V5KGRpcikpKSB7XG5mcy9leHQ0L2hhc2guYy0zMjUtXHRcdGJ1ZmYgPSBremFsbG9jKFBBVEhfTUFYLCBHRlBfS0VSTkVMKTtcbi0tXG5mcy9leHQ0L2lub2RlLmM9NDEyPWludCBleHQ0X2lzc3VlX3plcm9vdXQoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3QgbGJsaywgZXh0NF9mc2Jsa190IHBibGssXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTQxOC1cbmZzL2V4dDQvaW5vZGUuYzo0MTk6XHRpZiAoSVNfRU5DUllQVEVEKGlub2RlKSBcdTAwMjZcdTAwMjYgU19JU1JFRyhpbm9kZS1cdTAwM2VpX21vZGUpKVxuZnMvZXh0NC9pbm9kZS5jLTQyMC1cdFx0cmV0dXJuIGZzY3J5cHRfemVyb291dF9yYW5nZShpbm9kZSxcbi0tXG5mcy9leHQ0L2lub2RlLmM9NDIxMD1pbnQgZXh0NF9ibG9ja196ZXJvX2VvZihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgZnJvbSwgbG9mZl90IGVuZClcbi0tXG5mcy9leHQ0L2lub2RlLmMtNDIyMi1cdC8qIElmIHdlIGFyZSBwcm9jZXNzaW5nIGFuIGVuY3J5cHRlZCBpbm9kZSBkdXJpbmcgb3JwaGFuIGxpc3QgaGFuZGxpbmcgKi9cbmZzL2V4dDQvaW5vZGUuYzo0MjIzOlx0aWYgKElTX0VOQ1JZUFRFRChpbm9kZSkgXHUwMDI2XHUwMDI2ICFmc2NyeXB0X2hhc19lbmNyeXB0aW9uX2tleShpbm9kZSkpXG5mcy9leHQ0L2lub2RlLmMtNDIyNC1cdFx0cmV0dXJuIDA7XG4tLVxuZnMvZXh0NC9pbm9kZS5jPTUyNzM9c3RydWN0IGlub2RlICpfX2V4dDRfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubyxcbi0tXG5mcy9leHQ0L2lub2RlLmMtNTU1NC1cdFx0fVxuZnMvZXh0NC9pbm9kZS5jOjU1NTU6XHRcdGlmIChJU19FTkNSWVBURUQoaW5vZGUpKSB7XG5mcy9leHQ0L2lub2RlLmMtNTU1Ni1cdFx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2ZXh0NF9lbmNyeXB0ZWRfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xuLS1cbmZzL2V4dDQvaW5vZGUuYz02MTc4PXUzMiBleHQ0X2Rpb19hbGlnbm1lbnQoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L2lub2RlLmMtNjE4NS1cdFx0cmV0dXJuIDA7XG5mcy9leHQ0L2lub2RlLmM6NjE4NjpcdGlmIChJU19FTkNSWVBURUQoaW5vZGUpKSB7XG5mcy9leHQ0L2lub2RlLmMtNjE4Ny1cdFx0aWYgKCFmc2NyeXB0X2Rpb19zdXBwb3J0ZWQoaW5vZGUpKVxuLS1cbmZzL2V4dDQvaW9jdGwuYz0zNzU9c3RhdGljIGxvbmcgc3dhcF9pbm9kZV9ib290X2xvYWRlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvaW9jdGwuYy0zOTctXHRpZiAoaW5vZGUtXHUwMDNlaV9ubGluayAhPSAxIHx8ICFTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkgfHxcbmZzL2V4dDQvaW9jdGwuYzozOTg6XHQgICAgSVNfU1dBUEZJTEUoaW5vZGUpIHx8IElTX0VOQ1JZUFRFRChpbm9kZSkgfHxcbmZzL2V4dDQvaW9jdGwuYy0zOTktXHQgICAgKEVYVDRfSShpbm9kZSktXHUwMDNlaV9mbGFncyBcdTAwMjYgRVhUNF9KT1VSTkFMX0RBVEFfRkwpIHx8XG4tLVxuZnMvZXh0NC9tb3ZlX2V4dGVudC5jPTQxNj1zdGF0aWMgaW50IG1leHRfY2hlY2tfdmFsaWRpdHkoc3RydWN0IGlub2RlICpvcmlnX2lub2RlLFxuLS1cbmZzL2V4dDQvbW92ZV9leHRlbnQuYy00NjQtXG5mcy9leHQ0L21vdmVfZXh0ZW50LmM6NDY1Olx0aWYgKElTX0VOQ1JZUFRFRChvcmlnX2lub2RlKSB8fCBJU19FTkNSWVBURUQoZG9ub3JfaW5vZGUpKSB7XG5mcy9leHQ0L21vdmVfZXh0ZW50LmMtNDY2LVx0XHRleHQ0X21zZyhzYiwgS0VSTl9FUlIsXG4tLVxuZnMvZXh0NC9uYW1laS5jPTYyMT1zdGF0aWMgc3RydWN0IHN0YXRzIGR4X3Nob3dfbGVhZihzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9leHQ0L25hbWVpLmMtNjQ1LVx0XHRcdFx0bGVuID0gZGUtXHUwMDNlbmFtZV9sZW47XG5mcy9leHQ0L25hbWVpLmM6NjQ2Olx0XHRcdFx0aWYgKCFJU19FTkNSWVBURUQoZGlyKSkge1xuZnMvZXh0NC9uYW1laS5jLTY0Ny1cdFx0XHRcdFx0LyogRGlyZWN0b3J5IGlzIG5vdCBlbmNyeXB0ZWQgKi9cbi0tXG5mcy9leHQ0L25hbWVpLmM9Nzc4PWR4X3Byb2JlKHN0cnVjdCBleHQ0X2ZpbGVuYW1lICpmbmFtZSwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvZXh0NC9uYW1laS5jLTgyNC1cdGlmIChmbmFtZSBcdTAwMjZcdTAwMjYgZm5hbWVfbmFtZShmbmFtZSkgXHUwMDI2XHUwMDI2XG5mcy9leHQ0L25hbWVpLmM6ODI1Olx0ICAgICEoSVNfRU5DUllQVEVEKGRpcikgXHUwMDI2XHUwMDI2IElTX0NBU0VGT0xERUQoZGlyKSkpIHtcbmZzL2V4dDQvbmFtZWkuYy04MjYtXHRcdGludCByZXQgPSBleHQ0ZnNfZGlyaGFzaChkaXIsIGZuYW1lX25hbWUoZm5hbWUpLFxuLS1cbmZzL2V4dDQvbmFtZWkuYz0xMDM4PXN0YXRpYyBpbnQgaHRyZWVfZGlyYmxvY2tfdG9fdHJlZShzdHJ1Y3QgZmlsZSAqZGlyX2ZpbGUsXG4tLVxuZnMvZXh0NC9uYW1laS5jLTEwNjEtXHQvKiBDaGVjayBpZiB0aGUgZGlyZWN0b3J5IGlzIGVuY3J5cHRlZCAqL1xuZnMvZXh0NC9uYW1laS5jOjEwNjI6XHRpZiAoSVNfRU5DUllQVEVEKGRpcikpIHtcbmZzL2V4dDQvbmFtZWkuYy0xMDYzLVx0XHRlcnIgPSBmc2NyeXB0X3ByZXBhcmVfcmVhZGRpcihkaXIpO1xuLS1cbmZzL2V4dDQvbmFtZWkuYy0xMTA1LVx0XHRcdGNvbnRpbnVlO1xuZnMvZXh0NC9uYW1laS5jOjExMDY6XHRcdGlmICghSVNfRU5DUllQVEVEKGRpcikpIHtcbmZzL2V4dDQvbmFtZWkuYy0xMTA3LVx0XHRcdHRtcF9zdHIubmFtZSA9IGRlLVx1MDAzZW5hbWU7XG4tLVxuZnMvZXh0NC9uYW1laS5jPTEzNjI9aW50IGV4dDRfZm5hbWVfc2V0dXBfY2lfZmlsZW5hbWUoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICppbmFtZSxcbi0tXG5mcy9leHQ0L25hbWVpLmMtMTM3MC1cdGlmICghSVNfQ0FTRUZPTERFRChkaXIpIHx8XG5mcy9leHQ0L25hbWVpLmM6MTM3MTpcdCAgICAoSVNfRU5DUllQVEVEKGRpcikgXHUwMDI2XHUwMDI2ICFmc2NyeXB0X2hhc19lbmNyeXB0aW9uX2tleShkaXIpKSkge1xuZnMvZXh0NC9uYW1laS5jLTEzNzItXHRcdGNmX25hbWUtXHUwMDNlbmFtZSA9IE5VTEw7XG4tLVxuZnMvZXh0NC9uYW1laS5jLTEzODctXG5mcy9leHQ0L25hbWVpLmM6MTM4ODpcdGlmICghSVNfRU5DUllQVEVEKGRpcikpXG5mcy9leHQ0L25hbWVpLmMtMTM4OS1cdFx0cmV0dXJuIDA7XG4tLVxuZnMvZXh0NC9uYW1laS5jPTE0MDU9c3RhdGljIGJvb2wgZXh0NF9tYXRjaChzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbi0tXG5mcy9leHQ0L25hbWVpLmMtMTQyMS1cdGlmIChJU19DQVNFRk9MREVEKHBhcmVudCkgXHUwMDI2XHUwMDI2XG5mcy9leHQ0L25hbWVpLmM6MTQyMjpcdCAgICAoIUlTX0VOQ1JZUFRFRChwYXJlbnQpIHx8IGZzY3J5cHRfaGFzX2VuY3J5cHRpb25fa2V5KHBhcmVudCkpKSB7XG5mcy9leHQ0L25hbWVpLmMtMTQyMy1cdFx0LypcbmZzL2V4dDQvbmFtZWkuYzoxNDI0Olx0XHQgKiBKdXN0IGNoZWNraW5nIElTX0VOQ1JZUFRFRChwYXJlbnQpIGJlbG93IGlzIG5vdFxuZnMvZXh0NC9uYW1laS5jLTE0MjUtXHRcdCAqIHN1ZmZpY2llbnQgdG8gZGVjaWRlIHdoZXRoZXIgb25lIGNhbiB1c2UgdGhlIGhhc2ggZm9yXG4tLVxuZnMvZXh0NC9uYW1laS5jLTE0MzMtXHRcdGlmIChzYl9ub19jYXNlZm9sZF9jb21wYXRfZmFsbGJhY2socGFyZW50LVx1MDAzZWlfc2IpIFx1MDAyNlx1MDAyNlxuZnMvZXh0NC9uYW1laS5jOjE0MzQ6XHRcdCAgICBJU19FTkNSWVBURUQocGFyZW50KSBcdTAwMjZcdTAwMjYgZm5hbWUtXHUwMDNlY2ZfbmFtZS5uYW1lIFx1MDAyNlx1MDAyNlxuZnMvZXh0NC9uYW1laS5jLTE0MzUtXHRcdCAgICAoZm5hbWUtXHUwMDNlaGluZm8uaGFzaCAhPSBFWFQ0X0RJUkVOVF9IQVNIKGRlKSB8fFxuLS1cbmZzL2V4dDQvbmFtZWkuYz0xNzYyPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpleHQ0X2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4tLVxuZnMvZXh0NC9uYW1laS5jLTE3OTMtXHRcdH1cbmZzL2V4dDQvbmFtZWkuYzoxNzk0Olx0XHRpZiAoIUlTX0VSUihpbm9kZSkgXHUwMDI2XHUwMDI2IElTX0VOQ1JZUFRFRChkaXIpIFx1MDAyNlx1MDAyNlxuZnMvZXh0NC9uYW1laS5jLTE3OTUtXHRcdCAgICAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpIHx8IFNfSVNMTksoaW5vZGUtXHUwMDNlaV9tb2RlKSkgXHUwMDI2XHUwMDI2XG4tLVxuZnMvZXh0NC9uYW1laS5jPTMzNjM9c3RhdGljIGludCBleHQ0X3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL2V4dDQvbmFtZWkuYy0zNDA1LVxuZnMvZXh0NC9uYW1laS5jOjM0MDY6XHRpZiAoSVNfRU5DUllQVEVEKGlub2RlKSkge1xuZnMvZXh0NC9uYW1laS5jLTM0MDctXHRcdGVyciA9IGZzY3J5cHRfZW5jcnlwdF9zeW1saW5rKGlub2RlLCBzeW1uYW1lLCBsZW4sIFx1MDAyNmRpc2tfbGluayk7XG4tLVxuZnMvZXh0NC9uYW1laS5jLTM0MzAtXHRcdEVYVDRfSShpbm9kZSktXHUwMDNlaV9kaXNrc2l6ZSA9IGlub2RlLVx1MDAzZWlfc2l6ZTtcbmZzL2V4dDQvbmFtZWkuYzozNDMxOlx0XHRpZiAoIUlTX0VOQ1JZUFRFRChpbm9kZSkpXG5mcy9leHQ0L25hbWVpLmMtMzQzMi1cdFx0XHRpbm9kZV9zZXRfY2FjaGVkX2xpbmsoaW5vZGUsIChjaGFyICopXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX2RhdGEsXG4tLVxuZnMvZXh0NC9zdXBlci5jPTU4OTA9c3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF9nZXRfam91cm5hbF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvc3VwZXIuYy01OTEwLVx0fVxuZnMvZXh0NC9zdXBlci5jOjU5MTE6XHRpZiAoIVNfSVNSRUcoam91cm5hbF9pbm9kZS1cdTAwM2VpX21vZGUpIHx8IElTX0VOQ1JZUFRFRChqb3VybmFsX2lub2RlKSkge1xuZnMvZXh0NC9zdXBlci5jLTU5MTItXHRcdGV4dDRfbXNnKHNiLCBLRVJOX0VSUiwgXCYjMzQ7aW52YWxpZCBqb3VybmFsIGlub2RlXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTY6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzMzIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEV4dDQgRmlsZXN5c3RlbSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIGhlcmUgc2VlbSB0byBiZSBgRVhUNF9GU2AsIGBGU19FTkNSWVBUSU9OYCwgYW5kIGBVTklDT0RFYC4gVGhvc2UgYXJlIHRoZSBiYXNlbGluZSByZXF1aXJlbWVudHMuIEkgbmVlZCB0byBrZWVwIHRob3NlIGluIG1pbmQuCgpUaGUgZm9jYWwgcG9pbnQgb2YgdGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IGBleHQ0X3NlYXJjaF9kaXJgLiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGlzIGZ1bmN0aW9uLiBCdXQgbGV0JiMzOTtzIHNlZSwgd2hhdCBlbHNlIGdldHMgdG91Y2hlZCBieSB0aGF0IGZ1bmN0aW9uPyBJdCBsb29rcyBsaWtlIGBleHQ0X3NlYXJjaF9kaXJgIGlzIGNhbGxlZCBieSBgc2VhcmNoX2RpcmJsb2NrYCBhbmQgYGV4dDRfZmluZF9pbmxpbmVfZW50cnlgLiBOb3csIGBzZWFyY2hfZGlyYmxvY2tgIGl0c2VsZiBpcyB1c2VkIGJ5IGBfX2V4dDRfZmluZF9lbnRyeWAgYW5kIGBleHQ0X2R4X2ZpbmRfZW50cnlgLiBBbmQgYGV4dDRfZmluZF9pbmxpbmVfZW50cnlgIGlzIGNhbGxlZCBieSBgX19leHQ0X2ZpbmRfZW50cnlgLiBTbywgYGV4dDRfc2VhcmNoX2RpcmAgaXMgdHJ1bHkgdGhlIGhlYXJ0IG9mIHRoaXMgY2hhbmdlLCBhbmQgdGhlIHByaW1hcnkgdGFyZ2V0IGZvciBmdXp6aW5nLiBNYWtlcyBzZW5zZS4KCkkgc2hvdWxkIGFsc28gbWFrZSBzdXJlIHRob3NlIGNvbmZpZ3MgYXJlIHNldCB1cCBjb3JyZWN0bHkuIExldCBtZSBkb3VibGUtY2hlY2suIGBDT05GSUdfRVhUNF9GU2AgaXMgdGhlIG9idmlvdXMgb25lLCB0aGUgY29yZSBmaWxlc3lzdGVtLiBgQ09ORklHX0ZTX0VOQ1JZUFRJT05gIGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudCBiZWNhdXNlIG9mIHRoYXQgYElTX0VOQ1JZUFRFRGAgY2hlY2sgSSBzYXcuIFRoZW4gdGhlcmUmIzM5O3MgYENPTkZJR19VTklDT0RFYCBmb3IgZGVhbGluZyB3aXRoIGBJU19DQVNFRk9MREVEYC4KCkFscmlnaHQsIEkgc2hvdWxkIGNoZWNrIGhvdyB0aGUgYGV4dDRfZGlyX3JlY19sZW5gIGlzIGFmZmVjdGVkIGJ5IHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE2OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfZGlyX3JlY19sZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2Rpci5jPTc5PWludCBfX2V4dDRfY2hlY2tfZGlyX2VudHJ5KGNvbnN0IGNoYXIgKmZ1bmN0aW9uLCB1bnNpZ25lZCBpbnQgbGluZSxcbi0tXG5mcy9leHQ0L2Rpci5jLTkxLVxuZnMvZXh0NC9kaXIuYzo5MjpcdGlmICh1bmxpa2VseShybGVuIFx1MDAzYyBleHQ0X2Rpcl9yZWNfbGVuKDEsIGZha2UgPyBOVUxMIDogZGlyKSkpXG5mcy9leHQ0L2Rpci5jLTkzLVx0XHRlcnJvcl9tc2cgPSBcJiMzNDtyZWNfbGVuIGlzIHNtYWxsZXIgdGhhbiBtaW5pbWFsXCYjMzQ7O1xuLS1cbmZzL2V4dDQvZGlyLmMtOTUtXHRcdGVycm9yX21zZyA9IFwmIzM0O3JlY19sZW4gJSA0ICE9IDBcJiMzNDs7XG5mcy9leHQ0L2Rpci5jOjk2Olx0ZWxzZSBpZiAodW5saWtlbHkocmxlbiBcdTAwM2MgZXh0NF9kaXJfcmVjX2xlbihkZS1cdTAwM2VuYW1lX2xlbixcbmZzL2V4dDQvZGlyLmMtOTctXHRcdFx0XHRcdFx0XHRmYWtlID8gTlVMTCA6IGRpcikpKVxuLS1cbmZzL2V4dDQvZGlyLmMtMTAwLVx0XHRlcnJvcl9tc2cgPSBcJiMzNDtkaXJlY3RvcnkgZW50cnkgb3ZlcnJ1blwmIzM0OztcbmZzL2V4dDQvZGlyLmM6MTAxOlx0ZWxzZSBpZiAodW5saWtlbHkobmV4dF9vZmZzZXQgXHUwMDNlIHNpemUgLSBleHQ0X2Rpcl9yZWNfbGVuKDEsXG5mcy9leHQ0L2Rpci5jLTEwMi1cdFx0XHRcdFx0XHQgIGhhc19jc3VtID8gTlVMTCA6IGRpcikgXHUwMDI2XHUwMDI2XG4tLVxuZnMvZXh0NC9kaXIuYz0xMzA9c3RhdGljIGludCBleHQ0X3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBkaXJfY29udGV4dCAqY3R4KVxuLS1cbmZzL2V4dDQvZGlyLmMtMjQ3LVx0XHRcdFx0aWYgKGV4dDRfcmVjX2xlbl9mcm9tX2Rpc2soZGUtXHUwMDNlcmVjX2xlbixcbmZzL2V4dDQvZGlyLmM6MjQ4Olx0XHRcdFx0XHRzYi1cdTAwM2VzX2Jsb2Nrc2l6ZSkgXHUwMDNjIGV4dDRfZGlyX3JlY19sZW4oMSxcbmZzL2V4dDQvZGlyLmMtMjQ5LVx0XHRcdFx0XHRcdFx0XHRcdGlub2RlKSlcbi0tXG5mcy9leHQ0L2V4dDQuaD0yNTMyPXN0cnVjdCBleHQ0X2Rpcl9lbnRyeV90YWlsIHtcbi0tXG5mcy9leHQ0L2V4dDQuaC0yNTc2LSAqL1xuZnMvZXh0NC9leHQ0Lmg6MjU3NzpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBleHQ0X2Rpcl9yZWNfbGVuKF9fdTggbmFtZV9sZW4sXG5mcy9leHQ0L2V4dDQuaC0yNTc4LVx0XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBpbm9kZSAqZGlyKVxuLS1cbmZzL2V4dDQvaW5saW5lLmM9MTA1MT1zdGF0aWMgaW50IGV4dDRfdXBkYXRlX2lubGluZV9kaXIoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xMDU3LVxuZnMvZXh0NC9pbmxpbmUuYzoxMDU4Olx0aWYgKG5ld19zaXplIC0gb2xkX3NpemUgXHUwMDNjPSBleHQ0X2Rpcl9yZWNfbGVuKDEsIE5VTEwpKVxuZnMvZXh0NC9pbmxpbmUuYy0xMDU5LVx0XHRyZXR1cm4gLUVOT1NQQztcbi0tXG5mcy9leHQ0L2lubGluZS5jPTEyNTg9aW50IGV4dDRfaW5saW5lZGlyX3RvX3RyZWUoc3RydWN0IGZpbGUgKmRpcl9maWxlLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTMxMS1cdFx0XHRmYWtlLnJlY19sZW4gPSBleHQ0X3JlY19sZW5fdG9fZGlzayhcbmZzL2V4dDQvaW5saW5lLmM6MTMxMjpcdFx0XHRcdFx0ICBleHQ0X2Rpcl9yZWNfbGVuKGZha2UubmFtZV9sZW4sIE5VTEwpLFxuZnMvZXh0NC9pbmxpbmUuYy0xMzEzLVx0XHRcdFx0XHQgIGlubGluZV9zaXplKTtcbi0tXG5mcy9leHQ0L2lubGluZS5jLTEzMjEtXHRcdFx0ZmFrZS5yZWNfbGVuID0gZXh0NF9yZWNfbGVuX3RvX2Rpc2soXG5mcy9leHQ0L2lubGluZS5jOjEzMjI6XHRcdFx0XHRcdCAgZXh0NF9kaXJfcmVjX2xlbihmYWtlLm5hbWVfbGVuLCBOVUxMKSxcbmZzL2V4dDQvaW5saW5lLmMtMTMyMy1cdFx0XHRcdFx0ICBpbmxpbmVfc2l6ZSk7XG4tLVxuZnMvZXh0NC9pbmxpbmUuYz0xMzc5PWludCBleHQ0X3JlYWRfaW5saW5lX2RpcihzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTE0MjktXHQgKi9cbmZzL2V4dDQvaW5saW5lLmM6MTQzMDpcdGRvdGRvdF9vZmZzZXQgPSBleHQ0X2Rpcl9yZWNfbGVuKDEsIE5VTEwpO1xuZnMvZXh0NC9pbmxpbmUuYzoxNDMxOlx0ZG90ZG90X3NpemUgPSBkb3Rkb3Rfb2Zmc2V0ICYjNDM7IGV4dDRfZGlyX3JlY19sZW4oMiwgTlVMTCk7XG5mcy9leHQ0L2lubGluZS5jLTE0MzItXHRleHRyYV9vZmZzZXQgPSBkb3Rkb3Rfc2l6ZSAtIEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFO1xuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTQ2NS1cdFx0XHRpZiAoZXh0NF9yZWNfbGVuX2Zyb21fZGlzayhkZS1cdTAwM2VyZWNfbGVuLCBleHRyYV9zaXplKVxuZnMvZXh0NC9pbmxpbmUuYzoxNDY2Olx0XHRcdFx0XHUwMDNjIGV4dDRfZGlyX3JlY19sZW4oMSwgTlVMTCkpXG5mcy9leHQ0L2lubGluZS5jLTE0NjctXHRcdFx0XHRicmVhaztcbi0tXG5mcy9leHQ0L25hbWVpLmM9NTc3PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgZHhfcm9vdF9saW1pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW5zaWduZWQgaW5mb3NpemUpXG4tLVxuZnMvZXh0NC9uYW1laS5jLTU3OS1cdHVuc2lnbmVkIGludCBlbnRyeV9zcGFjZSA9IGRpci1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplIC1cbmZzL2V4dDQvbmFtZWkuYzo1ODA6XHRcdFx0ZXh0NF9kaXJfcmVjX2xlbigxLCBOVUxMKSAtXG5mcy9leHQ0L25hbWVpLmM6NTgxOlx0XHRcdGV4dDRfZGlyX3JlY19sZW4oMiwgTlVMTCkgLSBpbmZvc2l6ZTtcbmZzL2V4dDQvbmFtZWkuYy01ODItXG4tLVxuZnMvZXh0NC9uYW1laS5jPTU4OD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGR4X25vZGVfbGltaXQoc3RydWN0IGlub2RlICpkaXIpXG4tLVxuZnMvZXh0NC9uYW1laS5jLTU5MC1cdHVuc2lnbmVkIGludCBlbnRyeV9zcGFjZSA9IGRpci1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplIC1cbmZzL2V4dDQvbmFtZWkuYzo1OTE6XHRcdFx0ZXh0NF9kaXJfcmVjX2xlbigwLCBkaXIpO1xuZnMvZXh0NC9uYW1laS5jLTU5Mi1cbi0tXG5mcy9leHQ0L25hbWVpLmM9NjIxPXN0YXRpYyBzdHJ1Y3Qgc3RhdHMgZHhfc2hvd19sZWFmKHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL2V4dDQvbmFtZWkuYy03MDAtXHRcdFx0fVxuZnMvZXh0NC9uYW1laS5jOjcwMTpcdFx0XHRzcGFjZSAmIzQzOz0gZXh0NF9kaXJfcmVjX2xlbihkZS1cdTAwM2VuYW1lX2xlbiwgZGlyKTtcbmZzL2V4dDQvbmFtZWkuYy03MDItXHRcdFx0bmFtZXMmIzQzOyYjNDM7O1xuLS1cbmZzL2V4dDQvbmFtZWkuYz0xMDM4PXN0YXRpYyBpbnQgaHRyZWVfZGlyYmxvY2tfdG9fdHJlZShzdHJ1Y3QgZmlsZSAqZGlyX2ZpbGUsXG4tLVxuZnMvZXh0NC9uYW1laS5jLTEwNTgtXHRcdFx0XHRcdCAgIGRpci1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplIC1cbmZzL2V4dDQvbmFtZWkuYzoxMDU5Olx0XHRcdFx0XHQgICBleHQ0X2Rpcl9yZWNfbGVuKDAsXG5mcy9leHQ0L25hbWVpLmMtMTA2MC1cdFx0XHRcdFx0XHRcdCAgIGNzdW0gPyBOVUxMIDogZGlyKSk7XG4tLVxuZnMvZXh0NC9uYW1laS5jPTE0NTY9aW50IGV4dDRfc2VhcmNoX2RpcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBjaGFyICpzZWFyY2hfYnVmLCBpbnQgYnVmX3NpemUsXG4tLVxuZnMvZXh0NC9uYW1laS5jLTE0NzAtXHRcdCAgICAoIWV4dDRfaGFzaF9pbl9kaXJlbnQoZGlyKSB8fFxuZnMvZXh0NC9uYW1laS5jOjE0NzE6XHRcdCAgICAgKGNoYXIgKilkZSAmIzQzOyBleHQ0X2Rpcl9yZWNfbGVuKGRlLVx1MDAzZW5hbWVfbGVuLCBkaXIpIFx1MDAzYz0gZGxpbWl0KSBcdTAwMjZcdTAwMjZcbmZzL2V4dDQvbmFtZWkuYy0xNDcyLVx0XHQgICAgZXh0NF9tYXRjaChkaXIsIGZuYW1lLCBkZSkpIHtcbi0tXG5mcy9leHQ0L25hbWVpLmM9MTg0Nj1keF9tb3ZlX2RpcmVudHMoc3RydWN0IGlub2RlICpkaXIsIGNoYXIgKmZyb20sIGNoYXIgKnRvLFxuLS1cbmZzL2V4dDQvbmFtZWkuYy0xODU0LVx0XHRcdFx0XHRcdChmcm9tICYjNDM7IChtYXAtXHUwMDNlb2Zmc1x1MDAzY1x1MDAzYzIpKTtcbmZzL2V4dDQvbmFtZWkuYzoxODU1Olx0XHRyZWNfbGVuID0gZXh0NF9kaXJfcmVjX2xlbihkZS1cdTAwM2VuYW1lX2xlbiwgZGlyKTtcbmZzL2V4dDQvbmFtZWkuYy0xODU2LVxuLS1cbmZzL2V4dDQvbmFtZWkuYz0xODc4PXN0YXRpYyBzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqZHhfcGFja19kaXJlbnRzKHN0cnVjdCBpbm9kZSAqZGlyLCBjaGFyICpiYXNlLFxuLS1cbmZzL2V4dDQvbmFtZWkuYy0xODg3LVx0XHRpZiAoZGUtXHUwMDNlaW5vZGUgXHUwMDI2XHUwMDI2IGRlLVx1MDAzZW5hbWVfbGVuKSB7XG5mcy9leHQ0L25hbWVpLmM6MTg4ODpcdFx0XHRyZWNfbGVuID0gZXh0NF9kaXJfcmVjX2xlbihkZS1cdTAwM2VuYW1lX2xlbiwgZGlyKTtcbmZzL2V4dDQvbmFtZWkuYy0xODg5LVx0XHRcdGlmIChkZSBcdTAwM2UgdG8pXG4tLVxuZnMvZXh0NC9uYW1laS5jPTIwMzc9aW50IGV4dDRfZmluZF9kZXN0X2RlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxuLS1cbmZzL2V4dDQvbmFtZWkuYy0yMDQyLVx0c3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKmRlO1xuZnMvZXh0NC9uYW1laS5jOjIwNDM6XHR1bnNpZ25lZCBzaG9ydCByZWNsZW4gPSBleHQ0X2Rpcl9yZWNfbGVuKGZuYW1lX2xlbihmbmFtZSksIGRpcik7XG5mcy9leHQ0L25hbWVpLmMtMjA0NC1cdGludCBubGVuLCBybGVuO1xuLS1cbmZzL2V4dDQvbmFtZWkuYy0yMDU1LVx0XHRcdHJldHVybiAtRUVYSVNUO1xuZnMvZXh0NC9uYW1laS5jOjIwNTY6XHRcdG5sZW4gPSBleHQ0X2Rpcl9yZWNfbGVuKGRlLVx1MDAzZW5hbWVfbGVuLCBkaXIpO1xuZnMvZXh0NC9uYW1laS5jLTIwNTctXHRcdHJsZW4gPSBleHQ0X3JlY19sZW5fZnJvbV9kaXNrKGRlLVx1MDAzZXJlY19sZW4sIGJ1Zl9zaXplKTtcbi0tXG5mcy9leHQ0L25hbWVpLmM9MjA3MD12b2lkIGV4dDRfaW5zZXJ0X2RlbnRyeShzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9leHQ0L25hbWVpLmMtMjA3OC1cbmZzL2V4dDQvbmFtZWkuYzoyMDc5Olx0bmxlbiA9IGV4dDRfZGlyX3JlY19sZW4oZGUtXHUwMDNlbmFtZV9sZW4sIGRpcik7XG5mcy9leHQ0L25hbWVpLmMtMjA4MC1cdHJsZW4gPSBleHQ0X3JlY19sZW5fZnJvbV9kaXNrKGRlLVx1MDAzZXJlY19sZW4sIGJ1Zl9zaXplKTtcbi0tXG5mcy9leHQ0L25hbWVpLmM9MjIxMT1zdGF0aWMgaW50IG1ha2VfaW5kZXhlZF9kaXIoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGV4dDRfZmlsZW5hbWUgKmZuYW1lLFxuLS1cbmZzL2V4dDQvbmFtZWkuYy0yMjg0LVx0ZGUtXHUwMDNlcmVjX2xlbiA9IGV4dDRfcmVjX2xlbl90b19kaXNrKFxuZnMvZXh0NC9uYW1laS5jOjIyODU6XHRcdFx0YmxvY2tzaXplIC0gZXh0NF9kaXJfcmVjX2xlbigyLCBOVUxMKSwgYmxvY2tzaXplKTtcbmZzL2V4dDQvbmFtZWkuYy0yMjg2LVx0bWVtc2V0IChcdTAwMjZyb290LVx1MDAzZWluZm8sIDAsIHNpemVvZihyb290LVx1MDAzZWluZm8pKTtcbi0tXG5mcy9leHQ0L25hbWVpLmM9MjkyNT1pbnQgZXh0NF9pbml0X2RpcmJsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9uYW1laS5jLTI5MzctXHRkZS1cdTAwM2VuYW1lX2xlbiA9IDE7XG5mcy9leHQ0L25hbWVpLmM6MjkzODpcdGRlLVx1MDAzZXJlY19sZW4gPSBleHQ0X3JlY19sZW5fdG9fZGlzayhleHQ0X2Rpcl9yZWNfbGVuKGRlLVx1MDAzZW5hbWVfbGVuLCBOVUxMKSxcbmZzL2V4dDQvbmFtZWkuYy0yOTM5LVx0XHRcdFx0XHQgICBibG9ja3NpemUpO1xuLS1cbmZzL2V4dDQvbmFtZWkuYy0yOTQ5LVx0XHRkZS1cdTAwM2VyZWNfbGVuID0gZXh0NF9yZWNfbGVuX3RvX2Rpc2soXG5mcy9leHQ0L25hbWVpLmM6Mjk1MDpcdFx0XHRcdFx0ZXh0NF9kaXJfcmVjX2xlbihkZS1cdTAwM2VuYW1lX2xlbiwgTlVMTCksXG5mcy9leHQ0L25hbWVpLmMtMjk1MS1cdFx0XHRcdFx0YmxvY2tzaXplKTtcbi0tXG5mcy9leHQ0L25hbWVpLmMtMjk1OC1cdFx0ZGUtXHUwMDNlcmVjX2xlbiA9IGV4dDRfcmVjX2xlbl90b19kaXNrKGJsb2Nrc2l6ZSAtXG5mcy9leHQ0L25hbWVpLmM6Mjk1OTpcdFx0XHRcdFx0KGNzdW1fc2l6ZSAmIzQzOyBleHQ0X2Rpcl9yZWNfbGVuKDEsIE5VTEwpKSxcbmZzL2V4dDQvbmFtZWkuYy0yOTYwLVx0XHRcdFx0XHRibG9ja3NpemUpO1xuLS1cbmZzL2V4dDQvbmFtZWkuYz0zMDY1PWJvb2wgZXh0NF9lbXB0eV9kaXIoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L25hbWVpLmMtMzA4MS1cdHNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbmZzL2V4dDQvbmFtZWkuYzozMDgyOlx0aWYgKGlub2RlLVx1MDAzZWlfc2l6ZSBcdTAwM2MgZXh0NF9kaXJfcmVjX2xlbigxLCBOVUxMKSAmIzQzO1xuZnMvZXh0NC9uYW1laS5jOjMwODM6XHRcdFx0XHRcdGV4dDRfZGlyX3JlY19sZW4oMiwgTlVMTCkpIHtcbmZzL2V4dDQvbmFtZWkuYy0zMDg0LVx0XHRFWFQ0X0VSUk9SX0lOT0RFKGlub2RlLCBcJiMzNDtpbnZhbGlkIHNpemVcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxNjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzkzMAoJCQkJCQkJb3V0cHV0OiAxNTEKCQkJCQkJCXRob3VnaHRzOiAyMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXNzZXNzbWVudCBvZiB0aGUgcGF0Y2gsIGRpc3RpbGxlZCBpbnRvIG15IGN1cnJlbnQgdGhpbmtpbmc6CgoqKlBhdGNoIEFuYWx5c2lzOiBgZXh0NF9zZWFyY2hfZGlyYCBCdWcgRml4KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdGFyZ2V0aW5nIGEgcHJldHR5IGNyaXRpY2FsIGlzc3VlIHdpdGhpbiB0aGUgYGV4dDRfc2VhcmNoX2RpcmAgZnVuY3Rpb24uIFRoZSBjb3JlIHByb2JsZW0gaXMgcmVsYXRlZCB0byBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gU3BlY2lmaWNhbGx5LCB0aGUgY29kZSB3YXMgdnVsbmVyYWJsZSBiZWNhdXNlIGBleHQ0X2hhc2hfaW5fZGlyZW50KGRpcilgIGNvdWxkIGJlIHRydWUsIGJ1dCB0aGUgZGlyZWN0b3J5IGVudHJ5IGxlbmd0aCB3YXNuJiMzOTt0IGFsd2F5cyBwcm9wZXJseSB2YWxpZGF0ZWQgYmVmb3JlIGFjY2Vzc2luZyBtZW1vcnkuIFRoaXMgY291bGQgbGVhZCB0byBhIGNyYXNoLCB3aGljaCBpcyBuZXZlciBhIGdvb2QgdGhpbmcuCgpUaGUgY29uZmlndXJhdGlvbnMgaW52b2x2ZWQgYXJlIGBFWFQ0X0ZTYCwgYEZTX0VOQ1JZUFRJT05gLCBhbmQgYFVOSUNPREVgLCBub3RoaW5nIHRvbyBzdXJwcmlzaW5nIGdpdmVuIHRoZSBjb250ZXh0LiBUaGUgY3J1Y2lhbCBzeW1ib2wgaGVyZSwgdGhlIHBvaW50IG9mIGZvY3VzLCBpcyBkZWZpbml0ZWx5IGBleHQ0X3NlYXJjaF9kaXJgLgoKTGV0IG1lIHF1aWNrbHkgcmUtZXhhbWluZSB0aGUgY29kZSBzbmlwcGV0LCBtYWtpbmcgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZpeDoKCmBgYGMKIAkJaWYgKGRlLSZndDtuYW1lICYjNDM7IGRlLSZndDtuYW1lX2xlbiAmbHQ7PSBkbGltaXQgJmFtcDsmYW1wOwomIzQzOwkJICAgICghZXh0NF9oYXNoX2luX2RpcmVudChkaXIpIHx8CiYjNDM7CQkgICAgIChjaGFyICopZGUgJiM0MzsgZXh0NF9kaXJfcmVjX2xlbihkZS0mZ3Q7bmFtZV9sZW4sIGRpcikgJmx0Oz0gZGxpbWl0KSAmYW1wOyZhbXA7CiAJCSAgICBleHQ0X21hdGNoKGRpciwgZm5hbWUsIGRlKSkgewpgYGAKCkFoLCByaWdodC4gVGhlIGFkZGl0aW9uIGlzIGNsZWFyOiBpdCBub3cgKmV4cGxpY2l0bHkqIGNoZWNrcyB0aGUgbGVuZ3RoIG9mIHRoZSBkaXJlY3RvcnkgZW50cnkuIEl0IGFkZHMgYSBtb3JlIHJvYnVzdCBjaGVjazogYChjaGFyICopZGUgJiM0MzsgZXh0NF9kaXJfcmVjX2xlbihkZS0mZ3Q7bmFtZV9sZW4sIGRpcikgJmx0Oz0gZGxpbWl0YC4gIFRoaXMgdmVyaWZpZXMgdGhhdCB0aGUgY2FsY3VsYXRlZCBtZW1vcnkgcmVnaW9uIG9mIHRoZSBkaXJlY3RvcnkgZW50cnkgaXMgd2l0aGluIHRoZSBhbGxvd2FibGUgYGRsaW1pdGAgYm91bmRhcnksIHByZXZlbnRpbmcgdGhhdCBvdXQtb2YtYm91bmRzIHJlYWQuIFRoaXMgcHJvdGVjdHMgYWdhaW5zdCB0aGUgY2FzZXMgd2hlcmUgYGV4dDRfaGFzaF9pbl9kaXJlbnQoZGlyKWAgbWlnaHQgaGF2ZSB0cmlnZ2VyZWQgdGhlIHByb2JsZW0uCgpUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGRpcmVjdGx5IGFkZHJlc3NlcyB0aGUgdnVsbmVyYWJpbGl0eS4gR29vZCBjYXRjaCwgYW5kIHRoZSBmaXggc2VlbXMgYXBwcm9wcmlhdGUuIExldCYjMzk7cyBtYXJrIHRoaXMgYXMgZG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTY6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OywKICAgICYjMzQ7RlNfRU5DUllQVElPTiYjMzQ7LAogICAgJiMzNDtVTklDT0RFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9zZWFyY2hfZGlyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gZXh0NF9zZWFyY2hfZGlyIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd2hlbiBleHQ0X2hhc2hfaW5fZGlyZW50IGlzIHRydWUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGV4dDQgZGlyZWN0b3J5IHNlYXJjaGluZyBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4gVGhlIGV4dDRfaGFzaF9pbl9kaXJlbnQgZnVuY3Rpb24gcmVxdWlyZXMgY2FzZWZvbGRpbmcgYW5kIGVuY3J5cHRpb24gdG8gYmUgZW5hYmxlZCwgc28gd2UgbmVlZCBFWFQ0X0ZTLCBGU19FTkNSWVBUSU9OLCBhbmQgVU5JQ09ERSBjb25maWdzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDssCiAgICAmIzM0O0ZTX0VOQ1JZUFRJT04mIzM0OywKICAgICYjMzQ7VU5JQ09ERSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfc2VhcmNoX2RpciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIGV4dDRfc2VhcmNoX2RpciB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzIHdoZW4gZXh0NF9oYXNoX2luX2RpcmVudCBpcyB0cnVlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBleHQ0IGRpcmVjdG9yeSBzZWFyY2hpbmcgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuIFRoZSBleHQ0X2hhc2hfaW5fZGlyZW50IGZ1bmN0aW9uIHJlcXVpcmVzIGNhc2Vmb2xkaW5nIGFuZCBlbmNyeXB0aW9uIHRvIGJlIGVuYWJsZWQsIHNvIHdlIG5lZWQgRVhUNF9GUywgRlNfRU5DUllQVElPTiwgYW5kIFVOSUNPREUgY29uZmlncy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE1OjU4OjU2LjAyNDc3NDgyMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTQ5MTE1MTg3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCIsXG4gICAgXCJGU19FTkNSWVBUSU9OXCIsXG4gICAgXCJVTklDT0RFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9zZWFyY2hfZGlyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBpbiBleHQ0X3NlYXJjaF9kaXIgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIGFjY2VzcyB3aGVuIGV4dDRfaGFzaF9pbl9kaXJlbnQgaXMgdHJ1ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgZXh0NCBkaXJlY3Rvcnkgc2VhcmNoaW5nIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiBUaGUgZXh0NF9oYXNoX2luX2RpcmVudCBmdW5jdGlvbiByZXF1aXJlcyBjYXNlZm9sZGluZyBhbmQgZW5jcnlwdGlvbiB0byBiZSBlbmFibGVkLCBzbyB3ZSBuZWVkIEVYVDRfRlMsIEZTX0VOQ1JZUFRJT04sIGFuZCBVTklDT0RFIGNvbmZpZ3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE1OjU4OjU2LjAyNDc3OTc3MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ3NDIyNzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMGI1Y2E3NTJmYjFmODM3MTk4NTA2ZDJjNDk2ZGQ5YzhmNThkMTM3ZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAxMCAxNTo1ODo1NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L25hbWVpLmMgYi9mcy9leHQ0L25hbWVpLmNcXG5pbmRleCBjYzQ5YWUwNGE2ZjY0OS4uM2I5NzQwYzFjMTZkOGMgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC9uYW1laS5jXFxuKysrIGIvZnMvZXh0NC9uYW1laS5jXFxuQEAgLTE0NjcsNiArMTQ2Nyw4IEBAIGludCBleHQ0X3NlYXJjaF9kaXIoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgY2hhciAqc2VhcmNoX2J1ZiwgaW50IGJ1Zl9zaXplLFxcbiBcXHRcXHQvKiB0aGlzIGNvZGUgaXMgZXhlY3V0ZWQgcXVhZHJhdGljYWxseSBvZnRlbiAqL1xcbiBcXHRcXHQvKiBkbyBtaW5pbWFsIGNoZWNraW5nIGBieSBoYW5kJyAqL1xcbiBcXHRcXHRpZiAoZGUtXFx1MDAzZW5hbWUgKyBkZS1cXHUwMDNlbmFtZV9sZW4gXFx1MDAzYz0gZGxpbWl0IFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAoIWV4dDRfaGFzaF9pbl9kaXJlbnQoZGlyKSB8fFxcbitcXHRcXHQgICAgIChjaGFyICopZGUgKyBleHQ0X2Rpcl9yZWNfbGVuKGRlLVxcdTAwM2VuYW1lX2xlbiwgZGlyKSBcXHUwMDNjPSBkbGltaXQpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICBleHQ0X21hdGNoKGRpciwgZm5hbWUsIGRlKSkge1xcbiBcXHRcXHRcXHQvKiBmb3VuZCBhIG1hdGNoIC0ganVzdCB0byBiZSBzdXJlLCBkb1xcbiBcXHRcXHRcXHQgKiBhIGZ1bGwgY2hlY2sgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTU6NTg6NTYuNDczMTIyODM0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzEwNDI3OTM3NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiLFxuICAgIFwiRlNfRU5DUllQVElPTlwiLFxuICAgIFwiVU5JQ09ERVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfc2VhcmNoX2RpclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gZXh0NF9zZWFyY2hfZGlyIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd2hlbiBleHQ0X2hhc2hfaW5fZGlyZW50IGlzIHRydWUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGV4dDQgZGlyZWN0b3J5IHNlYXJjaGluZyBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4gVGhlIGV4dDRfaGFzaF9pbl9kaXJlbnQgZnVuY3Rpb24gcmVxdWlyZXMgY2FzZWZvbGRpbmcgYW5kIGVuY3J5cHRpb24gdG8gYmUgZW5hYmxlZCwgc28gd2UgbmVlZCBFWFQ0X0ZTLCBGU19FTkNSWVBUSU9OLCBhbmQgVU5JQ09ERSBjb25maWdzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDBiNWNhNzUyZmIxZjgzNzE5ODUwNmQyYzQ5NmRkOWM4ZjU4ZDEzN2RcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAxMCAxNTo1ODo1NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbmFtZWkuYyBiL2ZzL2V4dDQvbmFtZWkuY1xuaW5kZXggY2M0OWFlMDRhNmY2NDkuLjNiOTc0MGMxYzE2ZDhjIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9uYW1laS5jXG4rKysgYi9mcy9leHQ0L25hbWVpLmNcbkBAIC0xNDY3LDYgKzE0NjcsOCBAQCBpbnQgZXh0NF9zZWFyY2hfZGlyKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGNoYXIgKnNlYXJjaF9idWYsIGludCBidWZfc2l6ZSxcbiBcdFx0LyogdGhpcyBjb2RlIGlzIGV4ZWN1dGVkIHF1YWRyYXRpY2FsbHkgb2Z0ZW4gKi9cbiBcdFx0LyogZG8gbWluaW1hbCBjaGVja2luZyBgYnkgaGFuZCcgKi9cbiBcdFx0aWYgKGRlLVx1MDAzZW5hbWUgKyBkZS1cdTAwM2VuYW1lX2xlbiBcdTAwM2M9IGRsaW1pdCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICghZXh0NF9oYXNoX2luX2RpcmVudChkaXIpIHx8XG4rXHRcdCAgICAgKGNoYXIgKilkZSArIGV4dDRfZGlyX3JlY19sZW4oZGUtXHUwMDNlbmFtZV9sZW4sIGRpcikgXHUwMDNjPSBkbGltaXQpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgZXh0NF9tYXRjaChkaXIsIGZuYW1lLCBkZSkpIHtcbiBcdFx0XHQvKiBmb3VuZCBhIG1hdGNoIC0ganVzdCB0byBiZSBzdXJlLCBkb1xuIFx0XHRcdCAqIGEgZnVsbCBjaGVjayAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTU6NTg6NTYuNDczMTI0MjA0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcwODUwNTM1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGV4dDQgRGlyZWN0b3J5IFNlYXJjaCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBmcy9leHQ0L25hbWVpLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGNoYW5nZXMgaW4gYGV4dDRfc2VhcmNoX2RpcmAuIEl0IGxvb2tzIGxpa2Ugd2UndmUgYWRkZWQgYSBjaGVjayB3aXRoaW4gdGhlIGBpZmAgc3RhdGVtZW50IHRvIGhhbmRsZSBhIHNjZW5hcmlvIHJlbGF0ZWQgdG8gZGlyZWN0b3J5IGVudHJ5IGhhc2hpbmcuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgdGhpczpcblxuYGBgY1xuIFx0XHRpZiAoZGUtXHUwMDNlbmFtZSArIGRlLVx1MDAzZW5hbWVfbGVuIFx1MDAzYz0gZGxpbWl0IFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgKCFleHQ0X2hhc2hfaW5fZGlyZW50KGRpcikgfHxcbitcdFx0ICAgICAoY2hhciAqKWRlICsgZXh0NF9kaXJfcmVjX2xlbihkZS1cdTAwM2VuYW1lX2xlbiwgZGlyKSBcdTAwM2M9IGRsaW1pdCkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBleHQ0X21hdGNoKGRpciwgZm5hbWUsIGRlKSkge1xuYGBgXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgYSBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiB0byB0aGUgZXh0NCBkaXJlY3Rvcnkgc2VhcmNoaW5nIGxvZ2ljLiBUaGUgZXh0cmEgY29uZGl0aW9uIGlzIHRvIHByb3RlY3QgYWdhaW5zdCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBvciBvdGhlciBtZW1vcnkgYWNjZXNzIGVycm9ycy4gVGhlIGFkZGl0aW9uIGNoZWNrcyB0byBzZWUgaWYgIGBleHQ0X2hhc2hfaW5fZGlyZW50KGRpcilgIGlzIHRydWUuIElmIGl0IGlzLCB0aGUgY29kZSBtYWtlcyBzdXJlIHRoYXQgYGRlICsgZXh0NF9kaXJfcmVjX2xlbihkZS1cdTAwM2VuYW1lX2xlbiwgZGlyKWAgc3RheXMgd2l0aGluIHRoZSBkaXJlY3RvcnkncyBib3VuZHMsIHNwZWNpZmljYWxseSB1cCB0byBgZGxpbWl0YC4gVGhpcyBpcyBhIHNlbnNpYmxlIHByZWNhdXRpb24sIGxpa2VseSBhZGRyZXNzaW5nIGEgcHJldmlvdXNseSB1bmhhbmRsZWQgZWRnZSBjYXNlIG9yIHZ1bG5lcmFiaWxpdHkgd2hlbiBkZWFsaW5nIHdpdGggaGFzaGVkIGRpcmVjdG9yeSBlbnRyaWVzLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBleHQ0X3NlYXJjaF9kaXJgIGFuZCB0aGUgYGV4dDRfaGFzaF9pbl9kaXJlbnRgIGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIHByZWNpc2UgY29udGV4dCBhbmQgd2hhdCBraW5kIG9mIHByb2JsZW0gdGhpcyBmaXhlcy4gSSB3aWxsIGFsc28gaGF2ZSB0byBsb29rIGZvciBhbnkgaW1wYWN0IG9uIHBlcmZvcm1hbmNlLCBvciBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZWJhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4ODUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNTo1OTowMS4xODE2MzEyMTlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTkyOTgxMzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfc2VhcmNoX2RpclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L25hbWVpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9uYW1laS5jPTEyNjI9c3RhdGljIGlubGluZSBpbnQgc2VhcmNoX2RpcmJsb2NrKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtMTI2Ny17XFxuZnMvZXh0NC9uYW1laS5jOjEyNjg6XFx0cmV0dXJuIGV4dDRfc2VhcmNoX2RpcihiaCwgYmgtXFx1MDAzZWJfZGF0YSwgZGlyLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSwgZGlyLFxcbmZzL2V4dDQvbmFtZWkuYy0xMjY5LVxcdFxcdFxcdCAgICAgICBmbmFtZSwgb2Zmc2V0LCByZXNfZGlyKTtcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYz0xNDA1PXN0YXRpYyBib29sIGV4dDRfbWF0Y2goc3RydWN0IGlub2RlICpwYXJlbnQsXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtMTQ1NS0gKi9cXG5mcy9leHQ0L25hbWVpLmM6MTQ1NjppbnQgZXh0NF9zZWFyY2hfZGlyKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGNoYXIgKnNlYXJjaF9idWYsIGludCBidWZfc2l6ZSxcXG5mcy9leHQ0L25hbWVpLmMtMTQ1Ny1cXHRcXHQgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBleHQ0X2ZpbGVuYW1lICpmbmFtZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTU6NTk6MDIuMTc0NjE5MzI4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk5ODUwMDQ0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlIHdoYXQgSSBjYW4gZ2F0aGVyIGZyb20gdGhpcy5cblxuKipUcmFjaW5nIHRoZSBVc2FnZSBvZiBleHQ0X3NlYXJjaF9kaXIqKlxuXG5SaWdodCwgc28gdGhlIGBleHQ0X3NlYXJjaF9kaXJgIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBgc2VhcmNoX2RpcmJsb2NrYCBhbmQgcG9zc2libHkgYnkgb3RoZXIgZnVuY3Rpb25zLCB0b28uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSBvZiBob3cgYGV4dDRfc2VhcmNoX2RpcmAgaXMgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbSBjb2RlLiBLbm93aW5nIHRoYXQgYHNlYXJjaF9kaXJibG9ja2AgY2FsbHMgaXQgaXMgYSBzdGFydGluZyBwb2ludCwgYnV0IEkgbmVlZCB0byBrbm93IHRoZSAqZW50aXJlKiBjYWxsIGdyYXBoLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgdGhlIHBvaW50cyBpbiB0aGUgY29kZSB3aGVyZSBpdCdzIGludm9rZWQuIFRoaXMgaXMgd2hlcmUgYSBnb29kIGNyb3NzLXJlZmVyZW5jZSB0b29sIG9yIGRlYnVnZ2VyIGlzIGludmFsdWFibGUuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxlcnMgd2lsbCBpbGx1bWluYXRlIGhvdyB0aGUgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIGRpcmVjdG9yeSBsb29rdXAgcHJvY2VzcyBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgaXQgaGFzIGZvciBwZXJmb3JtYW5jZSBhbmQgY29ycmVjdG5lc3MuIFRpbWUgdG8gaW52ZXN0aWdhdGUgZnVydGhlciBhbmQgc2VlIHdoZXJlIGVsc2UgaXQncyBiZWluZyB1c2VkLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MTgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNTo1OTowNS4xNzMxMjI0NDlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkwNzcyODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfc2VhcmNoX2RpclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2V4dDQuaD0zMjM4PWV4dGVybiBpbnQgZXh0NF9odHJlZV9maWxsX3RyZWUoc3RydWN0IGZpbGUgKmRpcl9maWxlLCBfX3UzMiBzdGFydF9oYXNoLFxcbmZzL2V4dDQvZXh0NC5oLTMyMzktXFx0XFx0XFx0XFx0X191MzIgc3RhcnRfbWlub3JfaGFzaCwgX191MzIgKm5leHRfaGFzaCk7XFxuZnMvZXh0NC9leHQ0Lmg6MzI0MDpleHRlcm4gaW50IGV4dDRfc2VhcmNoX2RpcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxcbmZzL2V4dDQvZXh0NC5oLTMyNDEtXFx0XFx0XFx0ICAgY2hhciAqc2VhcmNoX2J1ZixcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9MTU5Mj1zdHJ1Y3QgYnVmZmVyX2hlYWQgKmV4dDRfZmluZF9pbmxpbmVfZW50cnkoc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTE2MjUtXFx0aW5saW5lX3NpemUgPSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFIC0gRVhUNF9JTkxJTkVfRE9URE9UX1NJWkU7XFxuZnMvZXh0NC9pbmxpbmUuYzoxNjI2OlxcdHJldCA9IGV4dDRfc2VhcmNoX2Rpcihpcy5pbG9jLmJoLCBpbmxpbmVfc3RhcnQsIGlubGluZV9zaXplLFxcbmZzL2V4dDQvaW5saW5lLmMtMTYyNy1cXHRcXHRcXHQgICAgICBkaXIsIGZuYW1lLCAwLCByZXNfZGlyKTtcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMTYzOC1cXG5mcy9leHQ0L2lubGluZS5jOjE2Mzk6XFx0cmV0ID0gZXh0NF9zZWFyY2hfZGlyKGlzLmlsb2MuYmgsIGlubGluZV9zdGFydCwgaW5saW5lX3NpemUsXFxuZnMvZXh0NC9pbmxpbmUuYy0xNjQwLVxcdFxcdFxcdCAgICAgIGRpciwgZm5hbWUsIDAsIHJlc19kaXIpO1xcbi0tXFxuZnMvZXh0NC9uYW1laS5jPTEyNjI9c3RhdGljIGlubGluZSBpbnQgc2VhcmNoX2RpcmJsb2NrKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtMTI2Ny17XFxuZnMvZXh0NC9uYW1laS5jOjEyNjg6XFx0cmV0dXJuIGV4dDRfc2VhcmNoX2RpcihiaCwgYmgtXFx1MDAzZWJfZGF0YSwgZGlyLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSwgZGlyLFxcbmZzL2V4dDQvbmFtZWkuYy0xMjY5LVxcdFxcdFxcdCAgICAgICBmbmFtZSwgb2Zmc2V0LCByZXNfZGlyKTtcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYz0xNDA1PXN0YXRpYyBib29sIGV4dDRfbWF0Y2goc3RydWN0IGlub2RlICpwYXJlbnQsXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtMTQ1NS0gKi9cXG5mcy9leHQ0L25hbWVpLmM6MTQ1NjppbnQgZXh0NF9zZWFyY2hfZGlyKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGNoYXIgKnNlYXJjaF9idWYsIGludCBidWZfc2l6ZSxcXG5mcy9leHQ0L25hbWVpLmMtMTQ1Ny1cXHRcXHQgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBleHQ0X2ZpbGVuYW1lICpmbmFtZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTU6NTk6MDUuNDYzOTAwMjU5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0NDMyMjk5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gZnV6emluZyBgZXh0NF9zZWFyY2hfZGlyYC5cblxuKipGdXp6aW5nIHRoZSBleHQ0IERpcmVjdG9yeSBTZWFyY2gqKlxuXG5BbHJpZ2h0LCBzbyBgZXh0NF9zZWFyY2hfZGlyYCBpcyB0aGUga2V5IGZ1bmN0aW9uIHdpdGhpbiB0aGUgZXh0NCBmaWxlc3lzdGVtIHRoYXQgaGFuZGxlcyBzZWFyY2hpbmcgZGlyZWN0b3JpZXMuIENvbnNpZGVyaW5nIGl0cyByb2xlIGluIGRpcmVjdG9yeSB0cmF2ZXJzYWwsIGl0J3MgcHJhY3RpY2FsbHkgc2NyZWFtaW5nIGZvciBhIGZ1enppbmcgY2FtcGFpZ24uIFRoaXMgZmVlbHMgbGlrZSBhIGhpZ2gtdmFsdWUgdGFyZ2V0LiBNeSBmb2N1cyBpcyBsYXNlci10YXJnZXRlZCBvbiB0aGUgYGV4dDRfc2VhcmNoX2RpcmAgc3ltYm9sIGl0c2VsZi5cblxuTm93LCBiZWZvcmUgSSBkaXZlIGluIGhlYWRmaXJzdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgYWxsIHRoZSBuZWNlc3NhcnkgcHV6emxlIHBpZWNlcy4gVGhlIGBFWFQ0X0ZTYCBjb25maWcgaXMgZGVmaW5pdGVseSBpbiBwbGF5LCBidXQgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGVyZSBtaWdodCBiZSBzb21lIGxlc3Mgb2J2aW91cyBkZXBlbmRlbmNpZXMgbHVya2luZyBhcm91bmQgdGhhdCBjYW4gdHJpcCB1cCB0aGUgZnV6emluZyBwcm9jZXNzIGxhdGVyLiBJIG5lZWQgdG8gdGFrZSBhIHF1aWNrIGxvb2sgdG8gaWRlbnRpZnkgYW55IG90aGVyIHBvdGVudGlhbGx5IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIG9yIHByZS1jb25kaXRpb25zIHRoYXQgbmVlZCB0byBiZSBtZXQuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbiBldmVuIGJlIHJlYWNoZWQgd2l0aCB0aGUgc3RhbmRhcmQgY29uZmlncy4gSSdsbCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGRlcGVuZGVudCBmZWF0dXJlcyB0aGF0IGFyZSByZXF1aXJlZCwgYnV0IGNvdWxkIGJlIGRpc2FibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjA2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTU6NTk6MDguNzA4MjI1NjQ4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0MjM4MjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBFWFQ0X0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9leHQ0L0tjb25maWc6Mjpjb25maWcgRVhUNF9GU1xcbmZzL2V4dDQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVxcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZz0zNT1jb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy00NS1cXG5mcy9leHQ0L0tjb25maWc6NDY6Y29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMXFxuZnMvZXh0NC9LY29uZmlnLTQ3LVxcdGJvb2wgXFxcIkV4dDQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNTUtXFxuZnMvZXh0NC9LY29uZmlnOjU2OmNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXFxuZnMvZXh0NC9LY29uZmlnLTU3LVxcdGJvb2wgXFxcIkV4dDQgU2VjdXJpdHkgTGFiZWxzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNTo1OTowOC44MDI0NjkyMzFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTU1Mjc1MDc0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgZXh0NF9zZWFyY2hfZGlyYCBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHR3ZWFraW5nIGBleHQ0X3NlYXJjaF9kaXJgIHdpdGhpbiBgZnMvZXh0NC9uYW1laS5jYC4gSXQgbG9va3MgbGlrZSBpdCdzIGFkZGluZyBhIGNydWNpYWwgYm91bmRzIGNoZWNrIHdpdGhpbiB0aGUgZGlyZWN0b3J5IHNlYXJjaGluZyBsb2dpYywgcmlnaHQgaGVyZTpcblxuYGBgY1xuXHRcdGlmIChkZS1cdTAwM2VuYW1lICsgZGUtXHUwMDNlbmFtZV9sZW4gXHUwMDNjPSBkbGltaXQgXHUwMDI2XHUwMDI2XG5cdFx0ICAgICghZXh0NF9oYXNoX2luX2RpcmVudChkaXIpIHx8XG5cdFx0ICAgICAoY2hhciAqKWRlICsgZXh0NF9kaXJfcmVjX2xlbihkZS1cdTAwM2VuYW1lX2xlbiwgZGlyKSBcdTAwM2M9IGRsaW1pdCkgXHUwMDI2XHUwMDI2XG5cdFx0ICAgIGV4dDRfbWF0Y2goZGlyLCBmbmFtZSwgZGUpKSB7XG5gYGBcblxuTXkgaW5pdGlhbCB0aG91Z2h0PyBUaGlzIGlzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSB0byBob3cgd2Ugc2VhcmNoIGV4dDQgZGlyZWN0b3JpZXMuIFRoZSBhZGRlZCBjaGVjayBzZWVtcyB0byBzcGVjaWZpY2FsbHkgcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHNpbWlsYXIgdnVsbmVyYWJpbGl0aWVzIHdoZW4gdGhlIGBleHQ0X2hhc2hfaW5fZGlyZW50KGRpcilgIGNvbmRpdGlvbiBpcyBtZXQuIFRoaXMgaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIHRoaW5nIHRoYXQgY2FuIGxlYWQgdG8gc3VidGxlIGJ1dCBleHBsb2l0YWJsZSBpc3N1ZXMgaW4gYSBmaWxlIHN5c3RlbS4gV2UncmUgdGFsa2luZyBhYm91dCBtb2RpZmljYXRpb25zIHRvIGRpcmVjdG9yeSBzZWFyY2hpbmcsIGFuZCB3ZSBrbm93IHRoYXQgYGV4dDRfc2VhcmNoX2RpcmAgaXMgY2FsbGVkIGJ5IGJvdGggYHNlYXJjaF9kaXJibG9ja2AgYW5kIGBleHQ0X2ZpbmRfaW5saW5lX2VudHJ5YCwgc28gdGhpcyBoYXMgYSBicm9hZCBpbXBhY3QuXG5cbkdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBidWdzLCB0aGlzIGlzIGRlZmluaXRlbHkgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIFRoZSBrZXkgc3ltYm9sIHRvIGZvY3VzIG9uIGlzLCB3aXRob3V0IGEgZG91YnQsIGBleHQ0X3NlYXJjaF9kaXJgIGl0c2VsZi4gSSdsbCBuZWVkIHRvIG1ha2Ugc3VyZSBteSBmdXp6aW5nIHNldHVwIGlzIHRhcmdldGluZyB0aGF0IGZ1bmN0aW9uIGRpcmVjdGx5IGFuZCBoYXMgdGhlIHJpZ2h0IGluc3RydW1lbnRhdGlvbi5cblxuTm93LCBiZWZvcmUgSSBkaXZlIGRlZXAgaW50byBjcmFmdGluZyBmdXp6IGNhc2VzLCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nLiBJIHdhbnQgdG8gc2VlIGlmIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMsIG9yIEtjb25maWdzLCBhcmUgYXNzb2NpYXRlZCB3aXRoIGBleHQ0X2hhc2hfaW5fZGlyZW50YCBvciBvdGhlciBzaW1pbGFyIGZlYXR1cmVzIGluIHRoZSBleHQ0IGNvZGUuIFRoaXMgY291bGQgaW5mbHVlbmNlIG15IGZ1enppbmcgc3RyYXRlZ3k7IEkgbmVlZCB0byBrbm93IGFib3V0IGFueSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBmZWF0dXJlIGZsYWdzLiBUaGUgYEVYVDRfRlNgIGNvbmZpZyBpcyBkZWZpbml0ZWx5IHJlbGV2YW50IGhlcmUsIGJ1dCBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgbW9yZSBzcGVjaWZpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg1MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNjowMDowOC4zNTUyMjE4ODJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjQ5NjMyNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9oYXNoX2luX2RpcmVudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2V4dDQuaD0yNTA0PXN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yIHtcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTI1MjItXFxuZnMvZXh0NC9leHQ0Lmg6MjUyMzpzdGF0aWMgaW5saW5lIGJvb2wgZXh0NF9oYXNoX2luX2RpcmVudChjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2V4dDQvZXh0NC5oLTI1MjQte1xcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9MjU3Nz1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBleHQ0X2Rpcl9yZWNfbGVuKF9fdTggbmFtZV9sZW4sXFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0yNTgxLVxcbmZzL2V4dDQvZXh0NC5oOjI1ODI6XFx0aWYgKGRpciBcXHUwMDI2XFx1MDAyNiBleHQ0X2hhc2hfaW5fZGlyZW50KGRpcikpXFxuZnMvZXh0NC9leHQ0LmgtMjU4My1cXHRcXHRyZWNfbGVuICs9IHNpemVvZihzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfaGFzaCk7XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTEyNTg9aW50IGV4dDRfaW5saW5lZGlyX3RvX3RyZWUoc3RydWN0IGZpbGUgKmRpcl9maWxlLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xMzM3LVxcbmZzL2V4dDQvaW5saW5lLmM6MTMzODpcXHRcXHRpZiAoZXh0NF9oYXNoX2luX2RpcmVudChkaXIpKSB7XFxuZnMvZXh0NC9pbmxpbmUuYy0xMzM5LVxcdFxcdFxcdGhpbmZvLVxcdTAwM2VoYXNoID0gRVhUNF9ESVJFTlRfSEFTSChkZSk7XFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9Nzc4PWR4X3Byb2JlKHN0cnVjdCBleHQ0X2ZpbGVuYW1lICpmbmFtZSwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtODAzLVxcdH1cXG5mcy9leHQ0L25hbWVpLmM6ODA0OlxcdGlmIChleHQ0X2hhc2hfaW5fZGlyZW50KGRpcikpIHtcXG5mcy9leHQ0L25hbWVpLmMtODA1LVxcdFxcdGlmIChyb290LVxcdTAwM2VpbmZvLmhhc2hfdmVyc2lvbiAhPSBEWF9IQVNIX1NJUEhBU0gpIHtcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYz0xMDM4PXN0YXRpYyBpbnQgaHRyZWVfZGlyYmxvY2tfdG9fdHJlZShzdHJ1Y3QgZmlsZSAqZGlyX2ZpbGUsXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtMTA4My1cXHRcXHR9XFxuZnMvZXh0NC9uYW1laS5jOjEwODQ6XFx0XFx0aWYgKGV4dDRfaGFzaF9pbl9kaXJlbnQoZGlyKSkge1xcbmZzL2V4dDQvbmFtZWkuYy0xMDg1LVxcdFxcdFxcdGlmIChkZS1cXHUwMDNlbmFtZV9sZW4gXFx1MDAyNlxcdTAwMjYgZGUtXFx1MDAzZWlub2RlKSB7XFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9MTE1MT1pbnQgZXh0NF9odHJlZV9maWxsX3RyZWUoc3RydWN0IGZpbGUgKmRpcl9maWxlLCBfX3UzMiBzdGFydF9oYXNoLFxcbi0tXFxuZnMvZXh0NC9uYW1laS5jLTExNjctXFx0aWYgKCEoZXh0NF90ZXN0X2lub2RlX2ZsYWcoZGlyLCBFWFQ0X0lOT0RFX0lOREVYKSkpIHtcXG5mcy9leHQ0L25hbWVpLmM6MTE2ODpcXHRcXHRpZiAoZXh0NF9oYXNoX2luX2RpcmVudChkaXIpKVxcbmZzL2V4dDQvbmFtZWkuYy0xMTY5LVxcdFxcdFxcdGhpbmZvLmhhc2hfdmVyc2lvbiA9IERYX0hBU0hfU0lQSEFTSDtcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYz0xMjgwPXN0YXRpYyBpbnQgZHhfbWFrZV9tYXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtMTI5OC1cXHRcXHRpZiAoZGUtXFx1MDAzZW5hbWVfbGVuIFxcdTAwMjZcXHUwMDI2IGRlLVxcdTAwM2Vpbm9kZSkge1xcbmZzL2V4dDQvbmFtZWkuYzoxMjk5OlxcdFxcdFxcdGlmIChleHQ0X2hhc2hfaW5fZGlyZW50KGRpcikpXFxuZnMvZXh0NC9uYW1laS5jLTEzMDAtXFx0XFx0XFx0XFx0aC5oYXNoID0gRVhUNF9ESVJFTlRfSEFTSChkZSk7XFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9MTQ1Nj1pbnQgZXh0NF9zZWFyY2hfZGlyKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGNoYXIgKnNlYXJjaF9idWYsIGludCBidWZfc2l6ZSxcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYy0xNDY5LVxcdFxcdGlmIChkZS1cXHUwMDNlbmFtZSArIGRlLVxcdTAwM2VuYW1lX2xlbiBcXHUwMDNjPSBkbGltaXQgXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L25hbWVpLmM6MTQ3MDpcXHRcXHQgICAgKCFleHQ0X2hhc2hfaW5fZGlyZW50KGRpcikgfHxcXG5mcy9leHQ0L25hbWVpLmMtMTQ3MS1cXHRcXHQgICAgIChjaGFyICopZGUgKyBleHQ0X2Rpcl9yZWNfbGVuKGRlLVxcdTAwM2VuYW1lX2xlbiwgZGlyKSBcXHUwMDNjPSBkbGltaXQpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9MjA3MD12b2lkIGV4dDRfaW5zZXJ0X2RlbnRyeShzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYy0yMDkyLVxcdG1lbWNweShkZS1cXHUwMDNlbmFtZSwgZm5hbWVfbmFtZShmbmFtZSksIGZuYW1lX2xlbihmbmFtZSkpO1xcbmZzL2V4dDQvbmFtZWkuYzoyMDkzOlxcdGlmIChleHQ0X2hhc2hfaW5fZGlyZW50KGRpcikpIHtcXG5mcy9leHQ0L25hbWVpLmMtMjA5NC1cXHRcXHRzdHJ1Y3QgZHhfaGFzaF9pbmZvICpoaW5mbyA9IFxcdTAwMjZmbmFtZS1cXHUwMDNlaGluZm87XFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9MjIxMT1zdGF0aWMgaW50IG1ha2VfaW5kZXhlZF9kaXIoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGV4dDRfZmlsZW5hbWUgKmZuYW1lLFxcbi0tXFxuZnMvZXh0NC9uYW1laS5jLTIyODctXFx0cm9vdC1cXHUwMDNlaW5mby5pbmZvX2xlbmd0aCA9IHNpemVvZihyb290LVxcdTAwM2VpbmZvKTtcXG5mcy9leHQ0L25hbWVpLmM6MjI4ODpcXHRpZiAoZXh0NF9oYXNoX2luX2RpcmVudChkaXIpKVxcbmZzL2V4dDQvbmFtZWkuYy0yMjg5LVxcdFxcdHJvb3QtXFx1MDAzZWluZm8uaGFzaF92ZXJzaW9uID0gRFhfSEFTSF9TSVBIQVNIO1xcbi0tXFxuZnMvZXh0NC9uYW1laS5jLTIzMDUtXFx0LyogY2FzZWZvbGRlZCBlbmNyeXB0ZWQgaGFzaGVzIGFyZSBjb21wdXRlZCBvbiBmbmFtZSBzZXR1cCAqL1xcbmZzL2V4dDQvbmFtZWkuYzoyMzA2OlxcdGlmICghZXh0NF9oYXNoX2luX2RpcmVudChkaXIpKSB7XFxuZnMvZXh0NC9uYW1laS5jLTIzMDctXFx0XFx0aW50IGVyciA9IGV4dDRmc19kaXJoYXNoKGRpciwgZm5hbWVfbmFtZShmbmFtZSksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE2OjAwOjA5LjQ4MDE5Mzk4OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjI1OTY5OTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIGl0IGxvb2tzIGxpa2UgSSdtIGxvb2tpbmcgYXQgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGlubGluZSBmdW5jdGlvbi5cblxuKipBbmFseXppbmcgYSBTaW1wbGUgZXh0NCBJbmxpbmUgRnVuY3Rpb24qKlxuXG5TbywgdGhpcyBgZXh0NF9oYXNoX2luX2RpcmVudGAgZnVuY3Rpb24gaXMganVzdCBhIHF1aWNrIGZsYWcgY2hlY2ssIHVzaW5nIHNvbWV0aGluZyBha2luIHRvIGBleHQ0X3Rlc3RfaW5vZGVfZmxhZ2AuIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoYXQgcGF0dGVybjsgaXQncyBhIGNvbW1vbiBhcHByb2FjaCBmb3IgY2hlY2tpbmcgaW5vZGUgbWV0YWRhdGEuIEl0J3MgZGVzaWduZWQgdG8gYmUgZWZmaWNpZW50LCBhcyBpdCdzIGFuIGBpbmxpbmVgIGZ1bmN0aW9uLCBwcmVzdW1hYmx5IHRvIGF2b2lkIHRoZSBvdmVyaGVhZCBvZiBhIGZ1bmN0aW9uIGNhbGwgd2hlbiBmcmVxdWVudGx5IGFjY2Vzc2VkLiBNeSBjdXJpb3NpdHkgaXMgc3BhcmtlZDsgSSBzaG91bGQgZGl2ZSBkZWVwZXIgaW50byB3aGVyZSBgZXh0NF90ZXN0X2lub2RlX2ZsYWdgIGlzIGRlZmluZWQgdG8gdW5kZXJzdGFuZCAqcHJlY2lzZWx5KiB3aGF0IGZsYWcgaXMgYmVpbmcgdGVzdGVkIGhlcmUsIHNwZWNpZmljYWxseSBgRVhUNF9JTk9ERV9FQV9JTk9ERWAsIGJ1dCBJIHN1c3BlY3QgaXQgcmVsYXRlcyB0byB0aGUgaGFuZGxpbmcgb2YgZXh0ZW5kZWQgYXR0cmlidXRlcyB3aXRoaW4gdGhlIGRpcmVjdG9yeSBlbnRyeS4gVGltZSB0byB0cmFjayBkb3duIHRoYXQgYGV4dDRfdGVzdF9pbm9kZV9mbGFnYCBkZWZpbml0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjM1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTY6MDA6MTMuMTA2MTY2ODNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxOTI4ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRpYyBpbmxpbmUgYm9vbCBleHQ0X2hhc2hfaW5fZGlyZW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZXh0NC5oPTI1MDQ9c3RydWN0IGV4dDRfZGlyX2VudHJ5XzIge1xcbi0tXFxuZnMvZXh0NC9leHQ0LmgtMjUyMi1cXG5mcy9leHQ0L2V4dDQuaDoyNTIzOnN0YXRpYyBpbmxpbmUgYm9vbCBleHQ0X2hhc2hfaW5fZGlyZW50KGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvZXh0NC9leHQ0LmgtMjUyNC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE2OjAwOjEzLjE2ODEwMTE0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIxNjQwNzU5Mjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6NjA0OCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTY6MDA6MzQuODA4ODYzMTg3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0Mzg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L2V4dDQuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAyNTIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNTIwOlxcdCNkZWZpbmUgRVhUNF9ESVJFTlRfTUlOT1JfSEFTSChlbnRyeSkgXFxcXFxcbjI1MjE6XFx0XFx0XFx0bGUzMl90b19jcHUoRVhUNF9ESVJFTlRfSEFTSEVTKGVudHJ5KS1cXHUwMDNlbWlub3JfaGFzaClcXG4yNTIyOlxcdFxcbjI1MjM6XFx0c3RhdGljIGlubGluZSBib29sIGV4dDRfaGFzaF9pbl9kaXJlbnQoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcXG4yNTI0OlxcdHtcXG4yNTI1OlxcdFxcdHJldHVybiBJU19DQVNFRk9MREVEKGlub2RlKSBcXHUwMDI2XFx1MDAyNiBJU19FTkNSWVBURUQoaW5vZGUpO1xcbjI1MjY6XFx0fVxcbjI1Mjc6XFx0XFxuMjUyODpcXHQvKlxcbjI1Mjk6XFx0ICogVGhpcyBpcyBhIGJvZ3VzIGRpcmVjdG9yeSBlbnRyeSBhdCB0aGUgZW5kIG9mIGVhY2ggbGVhZiBibG9jayB0aGF0XFxuMjUzMDpcXHQgKiByZWNvcmRzIGNoZWNrc3Vtcy5cXG4yNTMxOlxcdCAqL1xcbjI1MzI6XFx0c3RydWN0IGV4dDRfZGlyX2VudHJ5X3RhaWwge1xcbjI1MzM6XFx0XFx0X19sZTMyXFx0ZGV0X3Jlc2VydmVkX3plcm8xO1xcdC8qIFByZXRlbmQgdG8gYmUgdW51c2VkICovXFxuMjUzNDpcXHRcXHRfX2xlMTZcXHRkZXRfcmVjX2xlbjtcXHRcXHQvKiAxMiAqL1xcbjI1MzU6XFx0XFx0X191OFxcdGRldF9yZXNlcnZlZF96ZXJvMjtcXHQvKiBaZXJvIG5hbWUgbGVuZ3RoICovXFxuMjUzNjpcXHRcXHRfX3U4XFx0ZGV0X3Jlc2VydmVkX2Z0O1xcdC8qIDB4REUsIGZha2UgZmlsZSB0eXBlICovXFxuMjUzNzpcXHRcXHRfX2xlMzJcXHRkZXRfY2hlY2tzdW07XFx0XFx0LyogY3JjMzJjKHV1aWQraW51bStkaXJibG9jaykgKi9cXG4yNTM4OlxcdH07XFxuMjUzOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTY6MDA6MzQuODA5MTA5NjY3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MzI5MTczNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGVjb2RpbmcgdGhlIElub2RlIFJlcXVpcmVtZW50cyoqXG5cblJpZ2h0LCBsZXQncyBzZWUsIHdoYXQgYXJlIHdlIGRlYWxpbmcgd2l0aCBoZXJlLi4uIGBJU19DQVNFRk9MREVEKGlub2RlKSBcdTAwMjZcdTAwMjYgSVNfRU5DUllQVEVEKGlub2RlKWAuIEVzc2VudGlhbGx5LCB0aGlzIGlub2RlICptdXN0KiBiZSBjYXNlZm9sZGVkICphbmQqIGVuY3J5cHRlZC4gVGhhdCdzIHRoZSBjb3JlIHJlcXVpcmVtZW50LiBPa2F5LCB1bmRlcnN0b29kLiBMZXQncyBzZWUgaG93IHRoaXMgdGllcyBpbnRvIHRoZSBjb25maWdzLlxuXG5Ob3csIHdoaWNoIGZlYXR1cmVzIG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyB0byBiZSB2YWxpZD8gV2UgaGF2ZSB0byBoYXZlIGBFWFQ0X0ZTYCBhcyB0aGUgYmFzZSBmaWxlc3lzdGVtLCBvZiBjb3Vyc2UuIFRoZW4gd2UgaGF2ZSBgRVhUNF9GU19FTkNSWVBUSU9OYC4gSG1tLCB3YWl0IGEgc2Vjb25kLCBJIHRoaW5rIHRoYXQncyBiZWVuIHN0cmVhbWxpbmVkLiBJICpiZWxpZXZlKiBpdCdzIGp1c3QgYEZTX0VOQ1JZUFRJT05gIG5vd2FkYXlzLiBHb3R0YSBjb25maXJtIHRoYXQuIEFuZCBzaW5jZSB3ZSBoYXZlIGNhc2Vmb2xkaW5nIHRvIGRlYWwgd2l0aCwgd2UnbGwgbmVlZCBgVU5JQ09ERWAgZW5hYmxlZC4gQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZm9yIGV4dDQgYW5kIGNvbmZpcm0gdGhvc2UgZGVwZW5kZW5jaWVzIGFuZCB0aGVpciBzcGVjaWZpYyBtZWFuaW5ncyB0byBiZSBzdXJlLiBJdCdzIHRpbWUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlc2UgYXNzdW1wdGlvbnMgYXJlIHNvbGlkIGJlZm9yZSBtb3ZpbmcgYW55IGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwNjUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE2OjAwOjM4Ljc0MjAyOTM4N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA2ODQyMDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBFWFQ0X0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9leHQ0L0tjb25maWc6Mjpjb25maWcgRVhUNF9GU1xcbmZzL2V4dDQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVxcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZz0zNT1jb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy00NS1cXG5mcy9leHQ0L0tjb25maWc6NDY6Y29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMXFxuZnMvZXh0NC9LY29uZmlnLTQ3LVxcdGJvb2wgXFxcIkV4dDQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNTUtXFxuZnMvZXh0NC9LY29uZmlnOjU2OmNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXFxuZnMvZXh0NC9LY29uZmlnLTU3LVxcdGJvb2wgXFxcIkV4dDQgU2VjdXJpdHkgTGFiZWxzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNjowMDozOS4wNDg4Nzg3MDRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjE0NDM4OTMwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjc2MzgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE2OjAwOjQxLjE5MzI3MDM5M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgRVhUNF9GU1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlRoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXFxcIlxcbiAgIDQ6XFx0XFx0c2VsZWN0IEJVRkZFUl9IRUFEXFxuICAgNTpcXHRcXHRzZWxlY3QgSkJEMlxcbiAgIDY6XFx0XFx0c2VsZWN0IENSQzE2XFxuICAgNzpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gICA4OlxcdFxcdHNlbGVjdCBGU19JT01BUFxcbiAgIDk6XFx0XFx0c2VsZWN0IEZTX0VOQ1JZUFRJT05fQUxHUyBpZiBGU19FTkNSWVBUSU9OXFxuICAxMDpcXHRcXHRoZWxwXFxuICAxMTpcXHRcXHQgIFRoaXMgaXMgdGhlIG5leHQgZ2VuZXJhdGlvbiBvZiB0aGUgZXh0MyBmaWxlc3lzdGVtLlxcbiAgMTI6XFx0XFxuICAxMzpcXHRcXHQgIFVubGlrZSB0aGUgY2hhbmdlIGZyb20gZXh0MiBmaWxlc3lzdGVtIHRvIGV4dDMgZmlsZXN5c3RlbSxcXG4gIDE0OlxcdFxcdCAgdGhlIG9uLWRpc2sgZm9ybWF0IG9mIGV4dDQgaXMgbm90IGZvcndhcmRzIGNvbXBhdGlibGUgd2l0aFxcbiAgMTU6XFx0XFx0ICBleHQzOyBpdCBpcyBiYXNlZCBvbiBleHRlbnQgbWFwcyBhbmQgaXQgc3VwcG9ydHMgNDgtYml0XFxuICAxNjpcXHRcXHQgIHBoeXNpY2FsIGJsb2NrIG51bWJlcnMuICBUaGUgZXh0NCBmaWxlc3lzdGVtIGFsc28gc3VwcG9ydHMgZGVsYXllZFxcbiAgMTc6XFx0XFx0ICBhbGxvY2F0aW9uLCBwZXJzaXN0ZW50IHByZWFsbG9jYXRpb24sIGhpZ2ggcmVzb2x1dGlvbiB0aW1lIHN0YW1wcyxcXG4gIDE4OlxcdFxcdCAgYW5kIGEgbnVtYmVyIG9mIG90aGVyIGZlYXR1cmVzIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UgYW5kIHNwZWVkXFxuICAxOTpcXHRcXHQgIHVwIGZzY2sgdGltZS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2Ugc2VlIHRoZSB3ZWIgcGFnZXMgYXRcXG4gIDIwOlxcdFxcdCAgaHR0cDovL2V4dDQud2lraS5rZXJuZWwub3JnLlxcbiAgMjE6XFx0XFxuICAyMjpcXHRcXHQgIFRoZSBleHQ0IGZpbGVzeXN0ZW0gc3VwcG9ydHMgbW91bnRpbmcgYW4gZXh0MyBmaWxlc3lzdGVtOyB3aGlsZSB0aGVyZVxcbiAgMjM6XFx0XFx0ICBhcmUgc29tZSBwZXJmb3JtYW5jZSBnYWlucyBmcm9tIHRoZSBkZWxheWVkIGFsbG9jYXRpb24gYW5kIGlub2RlXFxuICAyNDpcXHRcXHQgIHRhYmxlIHJlYWRhaGVhZCwgdGhlIGJlc3QgcGVyZm9ybWFuY2UgZ2FpbnMgcmVxdWlyZSBlbmFibGluZyBleHQ0XFxuICAyNTpcXHRcXHQgIGZlYXR1cmVzIGluIHRoZSBmaWxlc3lzdGVtIHVzaW5nIHR1bmUyZnMsIG9yIGZvcm1hdHRpbmcgYSBuZXdcXG4gIDI2OlxcdFxcdCAgZmlsZXN5c3RlbSBhcyBhbiBleHQ0IGZpbGVzeXN0ZW0gaW5pdGlhbGx5LiBXaXRob3V0IGV4cGxpY2l0IGVuYWJsaW5nXFxuICAyNzpcXHRcXHQgIG9mIGV4dDQgZmVhdHVyZXMsIHRoZSBvbiBkaXNrIGZpbGVzeXN0ZW0gZm9ybWF0IHN0YXlzIGZ1bGx5IGJhY2t3YXJkXFxuICAyODpcXHRcXHQgIGNvbXBhdGlibGUuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZVxcbiAgMzE6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZXh0NC5cXG4gIDMyOlxcdFxcbiAgMzM6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRjb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcXG4gIDM2OlxcdFxcdGJvb2wgXFxcIlVzZSBleHQ0IGZvciBleHQyIGZpbGUgc3lzdGVtc1xcXCJcXG4gIDM3OlxcdFxcdGRlcGVuZHMgb24gRVhUNF9GU1xcbiAgMzg6XFx0XFx0ZGVwZW5kcyBvbiBFWFQyX0ZTPW5cXG4gIDM5OlxcdFxcdGRlZmF1bHQgeVxcbiAgNDA6XFx0XFx0aGVscFxcbiAgNDE6XFx0XFx0ICBBbGxvdyB0aGUgZXh0NCBmaWxlIHN5c3RlbSBkcml2ZXIgY29kZSB0byBiZSB1c2VkIGZvciBleHQyXFxuICA0MjpcXHRcXHQgIGZpbGUgc3lzdGVtIG1vdW50cy4gIFRoaXMgYWxsb3dzIHVzZXJzIHRvIHJlZHVjZSB0aGVpclxcbiAgNDM6XFx0XFx0ICBjb21waWxlZCBrZXJuZWwgc2l6ZSBieSB1c2luZyBvbmUgZmlsZSBzeXN0ZW0gZHJpdmVyIGZvclxcbiAgNDQ6XFx0XFx0ICBleHQyLCBleHQzLCBhbmQgZXh0NCBmaWxlIHN5c3RlbXMuXFxuICA0NTpcXHRcXG4gIDQ2OlxcdGNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxcbiAgNDc6XFx0XFx0Ym9vbCBcXFwiRXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4gIDQ4OlxcdFxcdGRlcGVuZHMgb24gRVhUNF9GU1xcbiAgNDk6XFx0XFx0c2VsZWN0IEZTX1BPU0lYX0FDTFxcbiAgNTA6XFx0XFx0aGVscFxcbiAgNTE6XFx0XFx0ICBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0cyAoQUNMcykgc3VwcG9ydCBwZXJtaXNzaW9ucyBmb3IgdXNlcnMgYW5kXFxuICA1MjpcXHRcXHQgIGdyb3VwcyBiZXlvbmQgdGhlIG93bmVyL2dyb3VwL3dvcmxkIHNjaGVtZS5cXG4gIDUzOlxcdFxcbiAgNTQ6XFx0XFx0ICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IEFjY2VzcyBDb250cm9sIExpc3RzIGFyZSwgc2F5IE5cXG4gIDU1OlxcdFxcbiAgNTY6XFx0Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcXG4gIDU3OlxcdFxcdGJvb2wgXFxcIkV4dDQgU2VjdXJpdHkgTGFiZWxzXFxcIlxcbiAgNTg6XFx0XFx0ZGVwZW5kcyBvbiBFWFQ0X0ZTXFxuICA1OTpcXHRcXHRoZWxwXFxuICA2MDpcXHRcXHQgIFNlY3VyaXR5IGxhYmVscyBzdXBwb3J0IGFsdGVybmF0aXZlIGFjY2VzcyBjb250cm9sIG1vZGVsc1xcbiAgNjE6XFx0XFx0ICBpbXBsZW1lbnRlZCBieSBzZWN1cml0eSBtb2R1bGVzIGxpa2UgU0VMaW51eC4gIFRoaXMgb3B0aW9uXFxuICA2MjpcXHRcXHQgIGVuYWJsZXMgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIGhhbmRsZXIgZm9yIGZpbGUgc2VjdXJpdHlcXG4gIDYzOlxcdFxcdCAgbGFiZWxzIGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uXFxuICA2NDpcXHRcXG4gIDY1OlxcdFxcdCAgSWYgeW91IGFyZSBub3QgdXNpbmcgYSBzZWN1cml0eSBtb2R1bGUgdGhhdCByZXF1aXJlcyB1c2luZ1xcbiAgNjY6XFx0XFx0ICBleHRlbmRlZCBhdHRyaWJ1dGVzIGZvciBmaWxlIHNlY3VyaXR5IGxhYmVscywgc2F5IE4uXFxuICA2NzpcXHRcXG4gIDY4OlxcdGNvbmZpZyBFWFQ0X0RFQlVHXFxuICA2OTpcXHRcXHRib29sIFxcXCJFeHQ0IGRlYnVnZ2luZyBzdXBwb3J0XFxcIlxcbiAgNzA6XFx0XFx0ZGVwZW5kcyBvbiBFWFQ0X0ZTXFxuICA3MTpcXHRcXHRoZWxwXFxuICA3MjpcXHRcXHQgIEVuYWJsZXMgcnVuLXRpbWUgZGVidWdnaW5nIHN1cHBvcnQgZm9yIHRoZSBleHQ0IGZpbGVzeXN0ZW0uXFxuICA3MzpcXHRcXG4gIDc0OlxcdFxcdCAgSWYgeW91IHNlbGVjdCBZIGhlcmUsIHRoZW4geW91IHdpbGwgYmUgYWJsZSB0byB0dXJuIG9uIGRlYnVnZ2luZ1xcbiAgNzU6XFx0XFx0ICB1c2luZyBkeW5hbWljIGRlYnVnIGNvbnRyb2wgZm9yIG1iX2RlYnVnKCkgLyBleHRfZGVidWcoKSBtc2dzLlxcbiAgNzY6XFx0XFxuICA3NzpcXHRjb25maWcgRVhUNF9LVU5JVF9URVNUU1xcbiAgNzg6XFx0XFx0dHJpc3RhdGUgXFxcIktVbml0IHRlc3RzIGZvciBleHQ0XFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICA3OTpcXHRcXHRkZXBlbmRzIG9uIEVYVDRfRlMgXFx1MDAyNlxcdTAwMjYgS1VOSVRcXG4gIDgwOlxcdFxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuICA4MTpcXHRcXHRoZWxwXFxuICA4MjpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBleHQ0IEtVbml0IHRlc3RzLlxcbiAgODM6XFx0XFxuICA4NDpcXHRcXHQgIEtVbml0IHRlc3RzIHJ1biBkdXJpbmcgYm9vdCBhbmQgb3V0cHV0IHRoZSByZXN1bHRzIHRvIHRoZSBkZWJ1ZyBsb2dcXG4gIDg1OlxcdFxcdCAgaW4gVEFQIGZvcm1hdCAoaHR0cHM6Ly90ZXN0YW55dGhpbmcub3JnLykuIE9ubHkgdXNlZnVsIGZvciBrZXJuZWwgZGV2c1xcbiAgODY6XFx0XFx0ICBydW5uaW5nIEtVbml0IHRlc3QgaGFybmVzcyBhbmQgYXJlIG5vdCBmb3IgaW5jbHVzaW9uIGludG8gYSBwcm9kdWN0aW9uXFxuICA4NzpcXHRcXHQgIGJ1aWxkLlxcbiAgODg6XFx0XFxuICA4OTpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwgcGxlYXNlIHJlZmVyXFxuICA5MDpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uIGluIERvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0Ly5cXG4gIDkxOlxcdFxcbiAgOTI6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNjowMDo0MS4xOTMzNTE4MDNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk0MzEzMjkzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBDb25maWd1cmF0aW9uIFBhcmFtZXRlcnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyBmb2N1c2VkIG9uIHRoZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgd2UncmUgZGVhbGluZyB3aXRoLiBUaGUgdGVybSBgRlNfRU5DUllQVElPTmAgaW5zdGFudGx5IGZsYWdzIHRoZSBmaWxlIHN5c3RlbSBlbmNyeXB0aW9uIHNldHRpbmcsIHdoaWNoIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIE15IG5leHQgdGhvdWdodCBqdW1wcyBkaXJlY3RseSB0byBgVU5JQ09ERWAuIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoaXMgYXMgYmVpbmcgbGlua2VkIHRvIGNoYXJhY3RlciBjYXNlZm9sZGluZy4gSXQncyB0aW1lIHRvIGRpZyBkZWVwZXIgYW5kIGludmVzdGlnYXRlIHRoZSBjb25maWd1cmF0aW9uIGRldGFpbHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBgVU5JQ09ERWAgc2V0dGluZy4gTGV0J3Mgc2VlIHdoYXQncyBzcGVjaWZpZWQsIGFuZCBjb25zaWRlciBpbXBsaWNhdGlvbnMgZm9yIHRoZSBvdmVyYWxsIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTg5LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNjowMDo0NC4xMzY0ODc0NTRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwMzI5NTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBVTklDT0RFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy91bmljb2RlL0tjb25maWctNC0jXFxuZnMvdW5pY29kZS9LY29uZmlnOjU6Y29uZmlnIFVOSUNPREVcXG5mcy91bmljb2RlL0tjb25maWctNi1cXHR0cmlzdGF0ZSBcXFwiVVRGLTggbm9ybWFsaXphdGlvbiBhbmQgY2FzZWZvbGRpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL3VuaWNvZGUvS2NvbmZpZy0xMi1cXG5mcy91bmljb2RlL0tjb25maWc6MTM6Y29uZmlnIFVOSUNPREVfTk9STUFMSVpBVElPTl9LVU5JVF9URVNUXFxuZnMvdW5pY29kZS9LY29uZmlnLTE0LVxcdHRyaXN0YXRlIFxcXCJUZXN0IFVURi04IG5vcm1hbGl6YXRpb24gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTY6MDA6NDQuMjI2ODIyMDk4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3OTcyOTgxOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipEZWNvZGluZyB0aGUgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIEkndmUgZ290IGl0LiBgVU5JQ09ERWAgaXMgdGhlIGtleSBzZXR0aW5nIGluIHRoaXMgY29uZmlndXJhdGlvbiB0aGF0IGRlYWxzIHdpdGggY2FzZWZvbGRpbmcuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0J3MgdGhlIG1vc3QgbGlrZWx5IG9uZS4gU28sIHRvIHJlY2FwLCB0aGUgaW1wb3J0YW50IGNvbmZpZ3VyYXRpb25zIGludm9sdmVkIGhlcmUgYXJlIGBFWFQ0X0ZTYCwgYEZTX0VOQ1JZUFRJT05gLCBhbmQgYFVOSUNPREVgLlxuXG5Ob3csIEkgc2hvdWxkIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSByZWxhdGlvbnNoaXAgd2l0aCBgZXh0NF9oYXNoX2luX2RpcmVudGAgYW5kIGFsc28gYElTX0NBU0VGT0xERURgLiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSBmdWxsIHBpY3R1cmUgaGVyZSBhbmQgYXJlIG5vdCBtaXNzaW5nIGFueSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzAwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTY6MDA6NDcuMDI0MTIyNzQ0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTk2NTAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJJU19DQVNFRk9MREVEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZGlyLmM9MTMwPXN0YXRpYyBpbnQgZXh0NF9yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcXG4tLVxcbmZzL2V4dDQvZGlyLmMtMjg5LVxcbmZzL2V4dDQvZGlyLmM6MjkwOlxcdFxcdFxcdFxcdFxcdGlmIChJU19DQVNFRk9MREVEKGlub2RlKSkge1xcbmZzL2V4dDQvZGlyLmMtMjkxLVxcdFxcdFxcdFxcdFxcdFxcdGhhc2ggPSBFWFQ0X0RJUkVOVF9IQVNIKGRlKTtcXG4tLVxcbmZzL2V4dDQvZXh0NC5oPTI1MjM9c3RhdGljIGlubGluZSBib29sIGV4dDRfaGFzaF9pbl9kaXJlbnQoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9leHQ0L2V4dDQuaC0yNTI0LXtcXG5mcy9leHQ0L2V4dDQuaDoyNTI1OlxcdHJldHVybiBJU19DQVNFRk9MREVEKGlub2RlKSBcXHUwMDI2XFx1MDAyNiBJU19FTkNSWVBURUQoaW5vZGUpO1xcbmZzL2V4dDQvZXh0NC5oLTI1MjYtfVxcbi0tXFxuZnMvZXh0NC9oYXNoLXRlc3QuYz00NDQ9c3RhdGljIHZvaWQgdGVzdF9leHQ0ZnNfZGlyaGFzaF9jYXNlZm9sZGVkX25hbWVzX2hhc2hfY29uc2lzdGVudGx5KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbmZzL2V4dDQvaGFzaC10ZXN0LmMtNDc4LVxcbmZzL2V4dDQvaGFzaC10ZXN0LmM6NDc5OlxcdEtVTklUX0FTU0VSVF9UUlVFKHRlc3QsIElTX0NBU0VGT0xERUQoXFx1MDAyNmVpLVxcdTAwM2V2ZnNfaW5vZGUpKTtcXG5mcy9leHQ0L2hhc2gtdGVzdC5jLTQ4MC1cXG4tLVxcbmZzL2V4dDQvaGFzaC10ZXN0LmM9NDkwPXN0YXRpYyB2b2lkIHRlc3RfZXh0NGZzX2Rpcmhhc2hfY2FzZWZvbGRfZmFsbGJhY2soc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxuZnMvZXh0NC9oYXNoLXRlc3QuYy01MzAtXFxuZnMvZXh0NC9oYXNoLXRlc3QuYzo1MzE6XFx0S1VOSVRfQVNTRVJUX1RSVUUodGVzdCwgSVNfQ0FTRUZPTERFRChcXHUwMDI2ZWktXFx1MDAzZXZmc19pbm9kZSkpO1xcbmZzL2V4dDQvaGFzaC10ZXN0LmMtNTMyLVxcbi0tXFxuZnMvZXh0NC9oYXNoLmM9MzE0PWludCBleHQ0ZnNfZGlyaGFzaChjb25zdCBzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbixcXG4tLVxcbmZzL2V4dDQvaGFzaC5jLTMyMi1cXG5mcy9leHQ0L2hhc2guYzozMjM6XFx0aWYgKGxlbiBcXHUwMDI2XFx1MDAyNiBJU19DQVNFRk9MREVEKGRpcikgXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L2hhc2guYy0zMjQtXFx0ICAgKCFJU19FTkNSWVBURUQoZGlyKSB8fCBmc2NyeXB0X2hhc19lbmNyeXB0aW9uX2tleShkaXIpKSkge1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTUyNzM9c3RydWN0IGlub2RlICpfX2V4dDRfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubyxcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy01NjA4LVxcdH1cXG5mcy9leHQ0L2lub2RlLmM6NTYwOTpcXHRpZiAoSVNfQ0FTRUZPTERFRChpbm9kZSkgXFx1MDAyNlxcdTAwMjYgIWV4dDRfaGFzX2ZlYXR1cmVfY2FzZWZvbGQoaW5vZGUtXFx1MDAzZWlfc2IpKSB7XFxuZnMvZXh0NC9pbm9kZS5jLTU2MTAtXFx0XFx0ZXh0NF9lcnJvcl9pbm9kZShpbm9kZSwgZnVuY3Rpb24sIGxpbmUsIDAsXFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9NjIxPXN0YXRpYyBzdHJ1Y3Qgc3RhdHMgZHhfc2hvd19sZWFmKHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvZXh0NC9uYW1laS5jLTY3OS1cXHRcXHRcXHRcXHRcXHR9XFxuZnMvZXh0NC9uYW1laS5jOjY4MDpcXHRcXHRcXHRcXHRcXHRpZiAoSVNfQ0FTRUZPTERFRChkaXIpKVxcbmZzL2V4dDQvbmFtZWkuYy02ODEtXFx0XFx0XFx0XFx0XFx0XFx0aC5oYXNoID0gRVhUNF9ESVJFTlRfSEFTSChkZSk7XFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9Nzc4PWR4X3Byb2JlKHN0cnVjdCBleHQ0X2ZpbGVuYW1lICpmbmFtZSwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtODI0LVxcdGlmIChmbmFtZSBcXHUwMDI2XFx1MDAyNiBmbmFtZV9uYW1lKGZuYW1lKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2V4dDQvbmFtZWkuYzo4MjU6XFx0ICAgICEoSVNfRU5DUllQVEVEKGRpcikgXFx1MDAyNlxcdTAwMjYgSVNfQ0FTRUZPTERFRChkaXIpKSkge1xcbmZzL2V4dDQvbmFtZWkuYy04MjYtXFx0XFx0aW50IHJldCA9IGV4dDRmc19kaXJoYXNoKGRpciwgZm5hbWVfbmFtZShmbmFtZSksXFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9MTM2Mj1pbnQgZXh0NF9mbmFtZV9zZXR1cF9jaV9maWxlbmFtZShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKmluYW1lLFxcbi0tXFxuZnMvZXh0NC9uYW1laS5jLTEzNjktXFxuZnMvZXh0NC9uYW1laS5jOjEzNzA6XFx0aWYgKCFJU19DQVNFRk9MREVEKGRpcikgfHxcXG5mcy9leHQ0L25hbWVpLmMtMTM3MS1cXHQgICAgKElTX0VOQ1JZUFRFRChkaXIpIFxcdTAwMjZcXHUwMDI2ICFmc2NyeXB0X2hhc19lbmNyeXB0aW9uX2tleShkaXIpKSkge1xcbi0tXFxuZnMvZXh0NC9uYW1laS5jPTE0MDU9c3RhdGljIGJvb2wgZXh0NF9tYXRjaChzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYy0xNDIwLSNpZiBJU19FTkFCTEVEKENPTkZJR19VTklDT0RFKVxcbmZzL2V4dDQvbmFtZWkuYzoxNDIxOlxcdGlmIChJU19DQVNFRk9MREVEKHBhcmVudCkgXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L25hbWVpLmMtMTQyMi1cXHQgICAgKCFJU19FTkNSWVBURUQocGFyZW50KSB8fCBmc2NyeXB0X2hhc19lbmNyeXB0aW9uX2tleShwYXJlbnQpKSkge1xcbi0tXFxuZnMvZXh0NC9uYW1laS5jPTE1MTk9c3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqX19leHQ0X2ZpbmRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtMTU3Mi1cXHRcXHRlbHNlIGlmICghc2Jfbm9fY2FzZWZvbGRfY29tcGF0X2ZhbGxiYWNrKGRpci1cXHUwMDNlaV9zYikgXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L25hbWVpLmM6MTU3MzpcXHRcXHRcXHQgKnJlc19kaXIgPT0gTlVMTCBcXHUwMDI2XFx1MDAyNiBJU19DQVNFRk9MREVEKGRpcikpXFxuZnMvZXh0NC9uYW1laS5jLTE1NzQtXFx0XFx0XFx0ZHh0cmFjZShwcmludGsoS0VSTl9ERUJVRyBcXFwiZXh0NF9maW5kX2VudHJ5OiBjYXNlZm9sZCBcXFwiXFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9MTc2Mj1zdGF0aWMgc3RydWN0IGRlbnRyeSAqZXh0NF9sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW5zaWduZWQgaW50IGZsYWdzKVxcbi0tXFxuZnMvZXh0NC9uYW1laS5jLTE4MDQtXFxuZnMvZXh0NC9uYW1laS5jOjE4MDU6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1VOSUNPREUpIFxcdTAwMjZcXHUwMDI2ICFpbm9kZSBcXHUwMDI2XFx1MDAyNiBJU19DQVNFRk9MREVEKGRpcikpIHtcXG5mcy9leHQ0L25hbWVpLmMtMTgwNi1cXHRcXHQvKiBFdmVudHVhbGx5IHdlIHdhbnQgdG8gY2FsbCBkX2FkZF9jaShkZW50cnksIE5VTEwpXFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9MzEzOD1zdGF0aWMgaW50IGV4dDRfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYy0zMjE3LVxcdCAqL1xcbmZzL2V4dDQvbmFtZWkuYzozMjE4OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19VTklDT0RFKSBcXHUwMDI2XFx1MDAyNiBJU19DQVNFRk9MREVEKGRpcikpXFxuZnMvZXh0NC9uYW1laS5jLTMyMTktXFx0XFx0ZF9pbnZhbGlkYXRlKGRlbnRyeSk7XFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9MzMwMT1zdGF0aWMgaW50IGV4dDRfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtMzMyOC1cXHQgKi9cXG5mcy9leHQ0L25hbWVpLmM6MzMyOTpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVU5JQ09ERSkgXFx1MDAyNlxcdTAwMjYgSVNfQ0FTRUZPTERFRChkaXIpKVxcbmZzL2V4dDQvbmFtZWkuYy0zMzMwLVxcdFxcdGRfaW52YWxpZGF0ZShkZW50cnkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNjowMDo0Ny4wODYwOTU4MDRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODY0MjU1MzUyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjEwNDQ5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNjowMDo1NS43Mjg2NTI4MzlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2ODMwMDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklTX0VOQ1JZUFRFRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2Rpci5jPTEzMD1zdGF0aWMgaW50IGV4dDRfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRpcl9jb250ZXh0ICpjdHgpXFxuLS1cXG5mcy9leHQ0L2Rpci5jLTE2OC1cXG5mcy9leHQ0L2Rpci5jOjE2OTpcXHRpZiAoSVNfRU5DUllQVEVEKGlub2RlKSkge1xcbmZzL2V4dDQvZGlyLmMtMTcwLVxcdFxcdGVyciA9IGZzY3J5cHRfZm5hbWVfYWxsb2NfYnVmZmVyKEVYVDRfTkFNRV9MRU4sIFxcdTAwMjZmc3RyKTtcXG4tLVxcbmZzL2V4dDQvZGlyLmMtMjc1LVxcdFxcdFxcdGlmIChsZTMyX3RvX2NwdShkZS1cXHUwMDNlaW5vZGUpKSB7XFxuZnMvZXh0NC9kaXIuYzoyNzY6XFx0XFx0XFx0XFx0aWYgKCFJU19FTkNSWVBURUQoaW5vZGUpKSB7XFxuZnMvZXh0NC9kaXIuYy0yNzctXFx0XFx0XFx0XFx0XFx0aWYgKCFkaXJfZW1pdChjdHgsIGRlLVxcdTAwM2VuYW1lLFxcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9MjUyMz1zdGF0aWMgaW5saW5lIGJvb2wgZXh0NF9oYXNoX2luX2RpcmVudChjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2V4dDQvZXh0NC5oLTI1MjQte1xcbmZzL2V4dDQvZXh0NC5oOjI1MjU6XFx0cmV0dXJuIElTX0NBU0VGT0xERUQoaW5vZGUpIFxcdTAwMjZcXHUwMDI2IElTX0VOQ1JZUFRFRChpbm9kZSk7XFxuZnMvZXh0NC9leHQ0LmgtMjUyNi19XFxuLS1cXG5mcy9leHQ0L2V4dDRfamJkMi5jPTEwPWludCBleHQ0X2lub2RlX2pvdXJuYWxfbW9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9leHQ0X2piZDIuYy0yMC1cXHRcXHQvKiBXZSBkbyBub3Qgc3VwcG9ydCBkYXRhIGpvdXJuYWxsaW5nIGZvciBlbmNyeXB0ZWQgZGF0YSAqL1xcbmZzL2V4dDQvZXh0NF9qYmQyLmM6MjE6XFx0XFx0aWYgKFNfSVNSRUcoaW5vZGUtXFx1MDAzZWlfbW9kZSkgXFx1MDAyNlxcdTAwMjYgSVNfRU5DUllQVEVEKGlub2RlKSlcXG5mcy9leHQ0L2V4dDRfamJkMi5jLTIyLVxcdFxcdFxcdHJldHVybiBFWFQ0X0lOT0RFX09SREVSRURfREFUQV9NT0RFOyAgLyogb3JkZXJlZCAqL1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9NDg1ND1sb25nIGV4dDRfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbilcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ4NjUtXFx0ICovXFxuZnMvZXh0NC9leHRlbnRzLmM6NDg2NjpcXHRpZiAoSVNfRU5DUllQVEVEKGlub2RlKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ4NjctXFx0ICAgIChtb2RlIFxcdTAwMjYgKEZBTExPQ19GTF9DT0xMQVBTRV9SQU5HRSB8IEZBTExPQ19GTF9JTlNFUlRfUkFOR0UpKSlcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz00NTQ9c3RhdGljIGludCBfX3RyYWNrX2RlbnRyeV91cGRhdGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy00NjgtXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjQ2OTpcXHRpZiAoSVNfRU5DUllQVEVEKGRpcikpIHtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtNDcwLVxcdFxcdGV4dDRfZmNfbWFya19pbmVsaWdpYmxlKHNiLCBFWFQ0X0ZDX1JFQVNPTl9FTkNSWVBURURfRklMRU5BTUUsXFxuLS1cXG5mcy9leHQ0L2hhc2guYz0zMTQ9aW50IGV4dDRmc19kaXJoYXNoKGNvbnN0IHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLFxcbi0tXFxuZnMvZXh0NC9oYXNoLmMtMzIzLVxcdGlmIChsZW4gXFx1MDAyNlxcdTAwMjYgSVNfQ0FTRUZPTERFRChkaXIpIFxcdTAwMjZcXHUwMDI2XFxuZnMvZXh0NC9oYXNoLmM6MzI0OlxcdCAgICghSVNfRU5DUllQVEVEKGRpcikgfHwgZnNjcnlwdF9oYXNfZW5jcnlwdGlvbl9rZXkoZGlyKSkpIHtcXG5mcy9leHQ0L2hhc2guYy0zMjUtXFx0XFx0YnVmZiA9IGt6YWxsb2MoUEFUSF9NQVgsIEdGUF9LRVJORUwpO1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTQxMj1pbnQgZXh0NF9pc3N1ZV96ZXJvb3V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGxibGssIGV4dDRfZnNibGtfdCBwYmxrLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTQxOC1cXG5mcy9leHQ0L2lub2RlLmM6NDE5OlxcdGlmIChJU19FTkNSWVBURUQoaW5vZGUpIFxcdTAwMjZcXHUwMDI2IFNfSVNSRUcoaW5vZGUtXFx1MDAzZWlfbW9kZSkpXFxuZnMvZXh0NC9pbm9kZS5jLTQyMC1cXHRcXHRyZXR1cm4gZnNjcnlwdF96ZXJvb3V0X3JhbmdlKGlub2RlLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTQyMTA9aW50IGV4dDRfYmxvY2tfemVyb19lb2Yoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGZyb20sIGxvZmZfdCBlbmQpXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNDIyMi1cXHQvKiBJZiB3ZSBhcmUgcHJvY2Vzc2luZyBhbiBlbmNyeXB0ZWQgaW5vZGUgZHVyaW5nIG9ycGhhbiBsaXN0IGhhbmRsaW5nICovXFxuZnMvZXh0NC9pbm9kZS5jOjQyMjM6XFx0aWYgKElTX0VOQ1JZUFRFRChpbm9kZSkgXFx1MDAyNlxcdTAwMjYgIWZzY3J5cHRfaGFzX2VuY3J5cHRpb25fa2V5KGlub2RlKSlcXG5mcy9leHQ0L2lub2RlLmMtNDIyNC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz01MjczPXN0cnVjdCBpbm9kZSAqX19leHQ0X2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8sXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNTU1NC1cXHRcXHR9XFxuZnMvZXh0NC9pbm9kZS5jOjU1NTU6XFx0XFx0aWYgKElTX0VOQ1JZUFRFRChpbm9kZSkpIHtcXG5mcy9leHQ0L2lub2RlLmMtNTU1Ni1cXHRcXHRcXHRpbm9kZS1cXHUwMDNlaV9vcCA9IFxcdTAwMjZleHQ0X2VuY3J5cHRlZF9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7XFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NjE3OD11MzIgZXh0NF9kaW9fYWxpZ25tZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNjE4NS1cXHRcXHRyZXR1cm4gMDtcXG5mcy9leHQ0L2lub2RlLmM6NjE4NjpcXHRpZiAoSVNfRU5DUllQVEVEKGlub2RlKSkge1xcbmZzL2V4dDQvaW5vZGUuYy02MTg3LVxcdFxcdGlmICghZnNjcnlwdF9kaW9fc3VwcG9ydGVkKGlub2RlKSlcXG4tLVxcbmZzL2V4dDQvaW9jdGwuYz0zNzU9c3RhdGljIGxvbmcgc3dhcF9pbm9kZV9ib290X2xvYWRlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZXh0NC9pb2N0bC5jLTM5Ny1cXHRpZiAoaW5vZGUtXFx1MDAzZWlfbmxpbmsgIT0gMSB8fCAhU19JU1JFRyhpbm9kZS1cXHUwMDNlaV9tb2RlKSB8fFxcbmZzL2V4dDQvaW9jdGwuYzozOTg6XFx0ICAgIElTX1NXQVBGSUxFKGlub2RlKSB8fCBJU19FTkNSWVBURUQoaW5vZGUpIHx8XFxuZnMvZXh0NC9pb2N0bC5jLTM5OS1cXHQgICAgKEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZmxhZ3MgXFx1MDAyNiBFWFQ0X0pPVVJOQUxfREFUQV9GTCkgfHxcXG4tLVxcbmZzL2V4dDQvbW92ZV9leHRlbnQuYz00MTY9c3RhdGljIGludCBtZXh0X2NoZWNrX3ZhbGlkaXR5KHN0cnVjdCBpbm9kZSAqb3JpZ19pbm9kZSxcXG4tLVxcbmZzL2V4dDQvbW92ZV9leHRlbnQuYy00NjQtXFxuZnMvZXh0NC9tb3ZlX2V4dGVudC5jOjQ2NTpcXHRpZiAoSVNfRU5DUllQVEVEKG9yaWdfaW5vZGUpIHx8IElTX0VOQ1JZUFRFRChkb25vcl9pbm9kZSkpIHtcXG5mcy9leHQ0L21vdmVfZXh0ZW50LmMtNDY2LVxcdFxcdGV4dDRfbXNnKHNiLCBLRVJOX0VSUixcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYz02MjE9c3RhdGljIHN0cnVjdCBzdGF0cyBkeF9zaG93X2xlYWYoc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtNjQ1LVxcdFxcdFxcdFxcdGxlbiA9IGRlLVxcdTAwM2VuYW1lX2xlbjtcXG5mcy9leHQ0L25hbWVpLmM6NjQ2OlxcdFxcdFxcdFxcdGlmICghSVNfRU5DUllQVEVEKGRpcikpIHtcXG5mcy9leHQ0L25hbWVpLmMtNjQ3LVxcdFxcdFxcdFxcdFxcdC8qIERpcmVjdG9yeSBpcyBub3QgZW5jcnlwdGVkICovXFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9Nzc4PWR4X3Byb2JlKHN0cnVjdCBleHQ0X2ZpbGVuYW1lICpmbmFtZSwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtODI0LVxcdGlmIChmbmFtZSBcXHUwMDI2XFx1MDAyNiBmbmFtZV9uYW1lKGZuYW1lKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2V4dDQvbmFtZWkuYzo4MjU6XFx0ICAgICEoSVNfRU5DUllQVEVEKGRpcikgXFx1MDAyNlxcdTAwMjYgSVNfQ0FTRUZPTERFRChkaXIpKSkge1xcbmZzL2V4dDQvbmFtZWkuYy04MjYtXFx0XFx0aW50IHJldCA9IGV4dDRmc19kaXJoYXNoKGRpciwgZm5hbWVfbmFtZShmbmFtZSksXFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9MTAzOD1zdGF0aWMgaW50IGh0cmVlX2RpcmJsb2NrX3RvX3RyZWUoc3RydWN0IGZpbGUgKmRpcl9maWxlLFxcbi0tXFxuZnMvZXh0NC9uYW1laS5jLTEwNjEtXFx0LyogQ2hlY2sgaWYgdGhlIGRpcmVjdG9yeSBpcyBlbmNyeXB0ZWQgKi9cXG5mcy9leHQ0L25hbWVpLmM6MTA2MjpcXHRpZiAoSVNfRU5DUllQVEVEKGRpcikpIHtcXG5mcy9leHQ0L25hbWVpLmMtMTA2My1cXHRcXHRlcnIgPSBmc2NyeXB0X3ByZXBhcmVfcmVhZGRpcihkaXIpO1xcbi0tXFxuZnMvZXh0NC9uYW1laS5jLTExMDUtXFx0XFx0XFx0Y29udGludWU7XFxuZnMvZXh0NC9uYW1laS5jOjExMDY6XFx0XFx0aWYgKCFJU19FTkNSWVBURUQoZGlyKSkge1xcbmZzL2V4dDQvbmFtZWkuYy0xMTA3LVxcdFxcdFxcdHRtcF9zdHIubmFtZSA9IGRlLVxcdTAwM2VuYW1lO1xcbi0tXFxuZnMvZXh0NC9uYW1laS5jPTEzNjI9aW50IGV4dDRfZm5hbWVfc2V0dXBfY2lfZmlsZW5hbWUoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICppbmFtZSxcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYy0xMzcwLVxcdGlmICghSVNfQ0FTRUZPTERFRChkaXIpIHx8XFxuZnMvZXh0NC9uYW1laS5jOjEzNzE6XFx0ICAgIChJU19FTkNSWVBURUQoZGlyKSBcXHUwMDI2XFx1MDAyNiAhZnNjcnlwdF9oYXNfZW5jcnlwdGlvbl9rZXkoZGlyKSkpIHtcXG5mcy9leHQ0L25hbWVpLmMtMTM3Mi1cXHRcXHRjZl9uYW1lLVxcdTAwM2VuYW1lID0gTlVMTDtcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYy0xMzg3LVxcbmZzL2V4dDQvbmFtZWkuYzoxMzg4OlxcdGlmICghSVNfRU5DUllQVEVEKGRpcikpXFxuZnMvZXh0NC9uYW1laS5jLTEzODktXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9MTQwNT1zdGF0aWMgYm9vbCBleHQ0X21hdGNoKHN0cnVjdCBpbm9kZSAqcGFyZW50LFxcbi0tXFxuZnMvZXh0NC9uYW1laS5jLTE0MjEtXFx0aWYgKElTX0NBU0VGT0xERUQocGFyZW50KSBcXHUwMDI2XFx1MDAyNlxcbmZzL2V4dDQvbmFtZWkuYzoxNDIyOlxcdCAgICAoIUlTX0VOQ1JZUFRFRChwYXJlbnQpIHx8IGZzY3J5cHRfaGFzX2VuY3J5cHRpb25fa2V5KHBhcmVudCkpKSB7XFxuZnMvZXh0NC9uYW1laS5jLTE0MjMtXFx0XFx0LypcXG5mcy9leHQ0L25hbWVpLmM6MTQyNDpcXHRcXHQgKiBKdXN0IGNoZWNraW5nIElTX0VOQ1JZUFRFRChwYXJlbnQpIGJlbG93IGlzIG5vdFxcbmZzL2V4dDQvbmFtZWkuYy0xNDI1LVxcdFxcdCAqIHN1ZmZpY2llbnQgdG8gZGVjaWRlIHdoZXRoZXIgb25lIGNhbiB1c2UgdGhlIGhhc2ggZm9yXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtMTQzMy1cXHRcXHRpZiAoc2Jfbm9fY2FzZWZvbGRfY29tcGF0X2ZhbGxiYWNrKHBhcmVudC1cXHUwMDNlaV9zYikgXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L25hbWVpLmM6MTQzNDpcXHRcXHQgICAgSVNfRU5DUllQVEVEKHBhcmVudCkgXFx1MDAyNlxcdTAwMjYgZm5hbWUtXFx1MDAzZWNmX25hbWUubmFtZSBcXHUwMDI2XFx1MDAyNlxcbmZzL2V4dDQvbmFtZWkuYy0xNDM1LVxcdFxcdCAgICAoZm5hbWUtXFx1MDAzZWhpbmZvLmhhc2ggIT0gRVhUNF9ESVJFTlRfSEFTSChkZSkgfHxcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYz0xNzYyPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpleHQ0X2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtMTc5My1cXHRcXHR9XFxuZnMvZXh0NC9uYW1laS5jOjE3OTQ6XFx0XFx0aWYgKCFJU19FUlIoaW5vZGUpIFxcdTAwMjZcXHUwMDI2IElTX0VOQ1JZUFRFRChkaXIpIFxcdTAwMjZcXHUwMDI2XFxuZnMvZXh0NC9uYW1laS5jLTE3OTUtXFx0XFx0ICAgIChTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpIHx8IFNfSVNMTksoaW5vZGUtXFx1MDAzZWlfbW9kZSkpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9MzM2Mz1zdGF0aWMgaW50IGV4dDRfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtMzQwNS1cXG5mcy9leHQ0L25hbWVpLmM6MzQwNjpcXHRpZiAoSVNfRU5DUllQVEVEKGlub2RlKSkge1xcbmZzL2V4dDQvbmFtZWkuYy0zNDA3LVxcdFxcdGVyciA9IGZzY3J5cHRfZW5jcnlwdF9zeW1saW5rKGlub2RlLCBzeW1uYW1lLCBsZW4sIFxcdTAwMjZkaXNrX2xpbmspO1xcbi0tXFxuZnMvZXh0NC9uYW1laS5jLTM0MzAtXFx0XFx0RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9kaXNrc2l6ZSA9IGlub2RlLVxcdTAwM2VpX3NpemU7XFxuZnMvZXh0NC9uYW1laS5jOjM0MzE6XFx0XFx0aWYgKCFJU19FTkNSWVBURUQoaW5vZGUpKVxcbmZzL2V4dDQvbmFtZWkuYy0zNDMyLVxcdFxcdFxcdGlub2RlX3NldF9jYWNoZWRfbGluayhpbm9kZSwgKGNoYXIgKilcXHUwMDI2RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9kYXRhLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTU4OTA9c3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF9nZXRfam91cm5hbF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTU5MTAtXFx0fVxcbmZzL2V4dDQvc3VwZXIuYzo1OTExOlxcdGlmICghU19JU1JFRyhqb3VybmFsX2lub2RlLVxcdTAwM2VpX21vZGUpIHx8IElTX0VOQ1JZUFRFRChqb3VybmFsX2lub2RlKSkge1xcbmZzL2V4dDQvc3VwZXIuYy01OTEyLVxcdFxcdGV4dDRfbXNnKHNiLCBLRVJOX0VSUiwgXFxcImludmFsaWQgam91cm5hbCBpbm9kZVxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNjowMDo1NS43OTU0ODgyNDdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA4MTc0ODY3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgRXh0NCBGaWxlc3lzdGVtIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIGhlcmUgc2VlbSB0byBiZSBgRVhUNF9GU2AsIGBGU19FTkNSWVBUSU9OYCwgYW5kIGBVTklDT0RFYC4gVGhvc2UgYXJlIHRoZSBiYXNlbGluZSByZXF1aXJlbWVudHMuIEkgbmVlZCB0byBrZWVwIHRob3NlIGluIG1pbmQuXG5cblRoZSBmb2NhbCBwb2ludCBvZiB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgYGV4dDRfc2VhcmNoX2RpcmAuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoaXMgZnVuY3Rpb24uIEJ1dCBsZXQncyBzZWUsIHdoYXQgZWxzZSBnZXRzIHRvdWNoZWQgYnkgdGhhdCBmdW5jdGlvbj8gSXQgbG9va3MgbGlrZSBgZXh0NF9zZWFyY2hfZGlyYCBpcyBjYWxsZWQgYnkgYHNlYXJjaF9kaXJibG9ja2AgYW5kIGBleHQ0X2ZpbmRfaW5saW5lX2VudHJ5YC4gTm93LCBgc2VhcmNoX2RpcmJsb2NrYCBpdHNlbGYgaXMgdXNlZCBieSBgX19leHQ0X2ZpbmRfZW50cnlgIGFuZCBgZXh0NF9keF9maW5kX2VudHJ5YC4gQW5kIGBleHQ0X2ZpbmRfaW5saW5lX2VudHJ5YCBpcyBjYWxsZWQgYnkgYF9fZXh0NF9maW5kX2VudHJ5YC4gU28sIGBleHQ0X3NlYXJjaF9kaXJgIGlzIHRydWx5IHRoZSBoZWFydCBvZiB0aGlzIGNoYW5nZSwgYW5kIHRoZSBwcmltYXJ5IHRhcmdldCBmb3IgZnV6emluZy4gTWFrZXMgc2Vuc2UuXG5cbkkgc2hvdWxkIGFsc28gbWFrZSBzdXJlIHRob3NlIGNvbmZpZ3MgYXJlIHNldCB1cCBjb3JyZWN0bHkuIExldCBtZSBkb3VibGUtY2hlY2suIGBDT05GSUdfRVhUNF9GU2AgaXMgdGhlIG9idmlvdXMgb25lLCB0aGUgY29yZSBmaWxlc3lzdGVtLiBgQ09ORklHX0ZTX0VOQ1JZUFRJT05gIGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudCBiZWNhdXNlIG9mIHRoYXQgYElTX0VOQ1JZUFRFRGAgY2hlY2sgSSBzYXcuIFRoZW4gdGhlcmUncyBgQ09ORklHX1VOSUNPREVgIGZvciBkZWFsaW5nIHdpdGggYElTX0NBU0VGT0xERURgLlxuXG5BbHJpZ2h0LCBJIHNob3VsZCBjaGVjayBob3cgdGhlIGBleHQ0X2Rpcl9yZWNfbGVuYCBpcyBhZmZlY3RlZCBieSB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDMzMiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNjowMTowMC44NzcyMzkwNDlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMjA2NTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfZGlyX3JlY19sZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9kaXIuYz03OT1pbnQgX19leHQ0X2NoZWNrX2Rpcl9lbnRyeShjb25zdCBjaGFyICpmdW5jdGlvbiwgdW5zaWduZWQgaW50IGxpbmUsXFxuLS1cXG5mcy9leHQ0L2Rpci5jLTkxLVxcbmZzL2V4dDQvZGlyLmM6OTI6XFx0aWYgKHVubGlrZWx5KHJsZW4gXFx1MDAzYyBleHQ0X2Rpcl9yZWNfbGVuKDEsIGZha2UgPyBOVUxMIDogZGlyKSkpXFxuZnMvZXh0NC9kaXIuYy05My1cXHRcXHRlcnJvcl9tc2cgPSBcXFwicmVjX2xlbiBpcyBzbWFsbGVyIHRoYW4gbWluaW1hbFxcXCI7XFxuLS1cXG5mcy9leHQ0L2Rpci5jLTk1LVxcdFxcdGVycm9yX21zZyA9IFxcXCJyZWNfbGVuICUgNCAhPSAwXFxcIjtcXG5mcy9leHQ0L2Rpci5jOjk2OlxcdGVsc2UgaWYgKHVubGlrZWx5KHJsZW4gXFx1MDAzYyBleHQ0X2Rpcl9yZWNfbGVuKGRlLVxcdTAwM2VuYW1lX2xlbixcXG5mcy9leHQ0L2Rpci5jLTk3LVxcdFxcdFxcdFxcdFxcdFxcdFxcdGZha2UgPyBOVUxMIDogZGlyKSkpXFxuLS1cXG5mcy9leHQ0L2Rpci5jLTEwMC1cXHRcXHRlcnJvcl9tc2cgPSBcXFwiZGlyZWN0b3J5IGVudHJ5IG92ZXJydW5cXFwiO1xcbmZzL2V4dDQvZGlyLmM6MTAxOlxcdGVsc2UgaWYgKHVubGlrZWx5KG5leHRfb2Zmc2V0IFxcdTAwM2Ugc2l6ZSAtIGV4dDRfZGlyX3JlY19sZW4oMSxcXG5mcy9leHQ0L2Rpci5jLTEwMi1cXHRcXHRcXHRcXHRcXHRcXHQgIGhhc19jc3VtID8gTlVMTCA6IGRpcikgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmZzL2V4dDQvZGlyLmM9MTMwPXN0YXRpYyBpbnQgZXh0NF9yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGlyX2NvbnRleHQgKmN0eClcXG4tLVxcbmZzL2V4dDQvZGlyLmMtMjQ3LVxcdFxcdFxcdFxcdGlmIChleHQ0X3JlY19sZW5fZnJvbV9kaXNrKGRlLVxcdTAwM2VyZWNfbGVuLFxcbmZzL2V4dDQvZGlyLmM6MjQ4OlxcdFxcdFxcdFxcdFxcdHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSkgXFx1MDAzYyBleHQ0X2Rpcl9yZWNfbGVuKDEsXFxuZnMvZXh0NC9kaXIuYy0yNDktXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0aW5vZGUpKVxcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9MjUzMj1zdHJ1Y3QgZXh0NF9kaXJfZW50cnlfdGFpbCB7XFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0yNTc2LSAqL1xcbmZzL2V4dDQvZXh0NC5oOjI1Nzc6c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZXh0NF9kaXJfcmVjX2xlbihfX3U4IG5hbWVfbGVuLFxcbmZzL2V4dDQvZXh0NC5oLTI1NzgtXFx0XFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGlub2RlICpkaXIpXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTEwNTE9c3RhdGljIGludCBleHQ0X3VwZGF0ZV9pbmxpbmVfZGlyKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xMDU3LVxcbmZzL2V4dDQvaW5saW5lLmM6MTA1ODpcXHRpZiAobmV3X3NpemUgLSBvbGRfc2l6ZSBcXHUwMDNjPSBleHQ0X2Rpcl9yZWNfbGVuKDEsIE5VTEwpKVxcbmZzL2V4dDQvaW5saW5lLmMtMTA1OS1cXHRcXHRyZXR1cm4gLUVOT1NQQztcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9MTI1OD1pbnQgZXh0NF9pbmxpbmVkaXJfdG9fdHJlZShzdHJ1Y3QgZmlsZSAqZGlyX2ZpbGUsXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTEzMTEtXFx0XFx0XFx0ZmFrZS5yZWNfbGVuID0gZXh0NF9yZWNfbGVuX3RvX2Rpc2soXFxuZnMvZXh0NC9pbmxpbmUuYzoxMzEyOlxcdFxcdFxcdFxcdFxcdCAgZXh0NF9kaXJfcmVjX2xlbihmYWtlLm5hbWVfbGVuLCBOVUxMKSxcXG5mcy9leHQ0L2lubGluZS5jLTEzMTMtXFx0XFx0XFx0XFx0XFx0ICBpbmxpbmVfc2l6ZSk7XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTEzMjEtXFx0XFx0XFx0ZmFrZS5yZWNfbGVuID0gZXh0NF9yZWNfbGVuX3RvX2Rpc2soXFxuZnMvZXh0NC9pbmxpbmUuYzoxMzIyOlxcdFxcdFxcdFxcdFxcdCAgZXh0NF9kaXJfcmVjX2xlbihmYWtlLm5hbWVfbGVuLCBOVUxMKSxcXG5mcy9leHQ0L2lubGluZS5jLTEzMjMtXFx0XFx0XFx0XFx0XFx0ICBpbmxpbmVfc2l6ZSk7XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTEzNzk9aW50IGV4dDRfcmVhZF9pbmxpbmVfZGlyKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xNDI5LVxcdCAqL1xcbmZzL2V4dDQvaW5saW5lLmM6MTQzMDpcXHRkb3Rkb3Rfb2Zmc2V0ID0gZXh0NF9kaXJfcmVjX2xlbigxLCBOVUxMKTtcXG5mcy9leHQ0L2lubGluZS5jOjE0MzE6XFx0ZG90ZG90X3NpemUgPSBkb3Rkb3Rfb2Zmc2V0ICsgZXh0NF9kaXJfcmVjX2xlbigyLCBOVUxMKTtcXG5mcy9leHQ0L2lubGluZS5jLTE0MzItXFx0ZXh0cmFfb2Zmc2V0ID0gZG90ZG90X3NpemUgLSBFWFQ0X0lOTElORV9ET1RET1RfU0laRTtcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMTQ2NS1cXHRcXHRcXHRpZiAoZXh0NF9yZWNfbGVuX2Zyb21fZGlzayhkZS1cXHUwMDNlcmVjX2xlbiwgZXh0cmFfc2l6ZSlcXG5mcy9leHQ0L2lubGluZS5jOjE0NjY6XFx0XFx0XFx0XFx0XFx1MDAzYyBleHQ0X2Rpcl9yZWNfbGVuKDEsIE5VTEwpKVxcbmZzL2V4dDQvaW5saW5lLmMtMTQ2Ny1cXHRcXHRcXHRcXHRicmVhaztcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYz01Nzc9c3RhdGljIGlubGluZSB1bnNpZ25lZCBkeF9yb290X2xpbWl0KHN0cnVjdCBpbm9kZSAqZGlyLCB1bnNpZ25lZCBpbmZvc2l6ZSlcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYy01NzktXFx0dW5zaWduZWQgaW50IGVudHJ5X3NwYWNlID0gZGlyLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSAtXFxuZnMvZXh0NC9uYW1laS5jOjU4MDpcXHRcXHRcXHRleHQ0X2Rpcl9yZWNfbGVuKDEsIE5VTEwpIC1cXG5mcy9leHQ0L25hbWVpLmM6NTgxOlxcdFxcdFxcdGV4dDRfZGlyX3JlY19sZW4oMiwgTlVMTCkgLSBpbmZvc2l6ZTtcXG5mcy9leHQ0L25hbWVpLmMtNTgyLVxcbi0tXFxuZnMvZXh0NC9uYW1laS5jPTU4OD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGR4X25vZGVfbGltaXQoc3RydWN0IGlub2RlICpkaXIpXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtNTkwLVxcdHVuc2lnbmVkIGludCBlbnRyeV9zcGFjZSA9IGRpci1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemUgLVxcbmZzL2V4dDQvbmFtZWkuYzo1OTE6XFx0XFx0XFx0ZXh0NF9kaXJfcmVjX2xlbigwLCBkaXIpO1xcbmZzL2V4dDQvbmFtZWkuYy01OTItXFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9NjIxPXN0YXRpYyBzdHJ1Y3Qgc3RhdHMgZHhfc2hvd19sZWFmKHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvZXh0NC9uYW1laS5jLTcwMC1cXHRcXHRcXHR9XFxuZnMvZXh0NC9uYW1laS5jOjcwMTpcXHRcXHRcXHRzcGFjZSArPSBleHQ0X2Rpcl9yZWNfbGVuKGRlLVxcdTAwM2VuYW1lX2xlbiwgZGlyKTtcXG5mcy9leHQ0L25hbWVpLmMtNzAyLVxcdFxcdFxcdG5hbWVzKys7XFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9MTAzOD1zdGF0aWMgaW50IGh0cmVlX2RpcmJsb2NrX3RvX3RyZWUoc3RydWN0IGZpbGUgKmRpcl9maWxlLFxcbi0tXFxuZnMvZXh0NC9uYW1laS5jLTEwNTgtXFx0XFx0XFx0XFx0XFx0ICAgZGlyLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSAtXFxuZnMvZXh0NC9uYW1laS5jOjEwNTk6XFx0XFx0XFx0XFx0XFx0ICAgZXh0NF9kaXJfcmVjX2xlbigwLFxcbmZzL2V4dDQvbmFtZWkuYy0xMDYwLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGNzdW0gPyBOVUxMIDogZGlyKSk7XFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9MTQ1Nj1pbnQgZXh0NF9zZWFyY2hfZGlyKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGNoYXIgKnNlYXJjaF9idWYsIGludCBidWZfc2l6ZSxcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYy0xNDcwLVxcdFxcdCAgICAoIWV4dDRfaGFzaF9pbl9kaXJlbnQoZGlyKSB8fFxcbmZzL2V4dDQvbmFtZWkuYzoxNDcxOlxcdFxcdCAgICAgKGNoYXIgKilkZSArIGV4dDRfZGlyX3JlY19sZW4oZGUtXFx1MDAzZW5hbWVfbGVuLCBkaXIpIFxcdTAwM2M9IGRsaW1pdCkgXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L25hbWVpLmMtMTQ3Mi1cXHRcXHQgICAgZXh0NF9tYXRjaChkaXIsIGZuYW1lLCBkZSkpIHtcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYz0xODQ2PWR4X21vdmVfZGlyZW50cyhzdHJ1Y3QgaW5vZGUgKmRpciwgY2hhciAqZnJvbSwgY2hhciAqdG8sXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtMTg1NC1cXHRcXHRcXHRcXHRcXHRcXHQoZnJvbSArIChtYXAtXFx1MDAzZW9mZnNcXHUwMDNjXFx1MDAzYzIpKTtcXG5mcy9leHQ0L25hbWVpLmM6MTg1NTpcXHRcXHRyZWNfbGVuID0gZXh0NF9kaXJfcmVjX2xlbihkZS1cXHUwMDNlbmFtZV9sZW4sIGRpcik7XFxuZnMvZXh0NC9uYW1laS5jLTE4NTYtXFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9MTg3OD1zdGF0aWMgc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKmR4X3BhY2tfZGlyZW50cyhzdHJ1Y3QgaW5vZGUgKmRpciwgY2hhciAqYmFzZSxcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYy0xODg3LVxcdFxcdGlmIChkZS1cXHUwMDNlaW5vZGUgXFx1MDAyNlxcdTAwMjYgZGUtXFx1MDAzZW5hbWVfbGVuKSB7XFxuZnMvZXh0NC9uYW1laS5jOjE4ODg6XFx0XFx0XFx0cmVjX2xlbiA9IGV4dDRfZGlyX3JlY19sZW4oZGUtXFx1MDAzZW5hbWVfbGVuLCBkaXIpO1xcbmZzL2V4dDQvbmFtZWkuYy0xODg5LVxcdFxcdFxcdGlmIChkZSBcXHUwMDNlIHRvKVxcbi0tXFxuZnMvZXh0NC9uYW1laS5jPTIwMzc9aW50IGV4dDRfZmluZF9kZXN0X2RlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxcbi0tXFxuZnMvZXh0NC9uYW1laS5jLTIwNDItXFx0c3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKmRlO1xcbmZzL2V4dDQvbmFtZWkuYzoyMDQzOlxcdHVuc2lnbmVkIHNob3J0IHJlY2xlbiA9IGV4dDRfZGlyX3JlY19sZW4oZm5hbWVfbGVuKGZuYW1lKSwgZGlyKTtcXG5mcy9leHQ0L25hbWVpLmMtMjA0NC1cXHRpbnQgbmxlbiwgcmxlbjtcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYy0yMDU1LVxcdFxcdFxcdHJldHVybiAtRUVYSVNUO1xcbmZzL2V4dDQvbmFtZWkuYzoyMDU2OlxcdFxcdG5sZW4gPSBleHQ0X2Rpcl9yZWNfbGVuKGRlLVxcdTAwM2VuYW1lX2xlbiwgZGlyKTtcXG5mcy9leHQ0L25hbWVpLmMtMjA1Ny1cXHRcXHRybGVuID0gZXh0NF9yZWNfbGVuX2Zyb21fZGlzayhkZS1cXHUwMDNlcmVjX2xlbiwgYnVmX3NpemUpO1xcbi0tXFxuZnMvZXh0NC9uYW1laS5jPTIwNzA9dm9pZCBleHQ0X2luc2VydF9kZW50cnkoc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtMjA3OC1cXG5mcy9leHQ0L25hbWVpLmM6MjA3OTpcXHRubGVuID0gZXh0NF9kaXJfcmVjX2xlbihkZS1cXHUwMDNlbmFtZV9sZW4sIGRpcik7XFxuZnMvZXh0NC9uYW1laS5jLTIwODAtXFx0cmxlbiA9IGV4dDRfcmVjX2xlbl9mcm9tX2Rpc2soZGUtXFx1MDAzZXJlY19sZW4sIGJ1Zl9zaXplKTtcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYz0yMjExPXN0YXRpYyBpbnQgbWFrZV9pbmRleGVkX2RpcihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgZXh0NF9maWxlbmFtZSAqZm5hbWUsXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtMjI4NC1cXHRkZS1cXHUwMDNlcmVjX2xlbiA9IGV4dDRfcmVjX2xlbl90b19kaXNrKFxcbmZzL2V4dDQvbmFtZWkuYzoyMjg1OlxcdFxcdFxcdGJsb2Nrc2l6ZSAtIGV4dDRfZGlyX3JlY19sZW4oMiwgTlVMTCksIGJsb2Nrc2l6ZSk7XFxuZnMvZXh0NC9uYW1laS5jLTIyODYtXFx0bWVtc2V0IChcXHUwMDI2cm9vdC1cXHUwMDNlaW5mbywgMCwgc2l6ZW9mKHJvb3QtXFx1MDAzZWluZm8pKTtcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYz0yOTI1PWludCBleHQ0X2luaXRfZGlyYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYy0yOTM3LVxcdGRlLVxcdTAwM2VuYW1lX2xlbiA9IDE7XFxuZnMvZXh0NC9uYW1laS5jOjI5Mzg6XFx0ZGUtXFx1MDAzZXJlY19sZW4gPSBleHQ0X3JlY19sZW5fdG9fZGlzayhleHQ0X2Rpcl9yZWNfbGVuKGRlLVxcdTAwM2VuYW1lX2xlbiwgTlVMTCksXFxuZnMvZXh0NC9uYW1laS5jLTI5MzktXFx0XFx0XFx0XFx0XFx0ICAgYmxvY2tzaXplKTtcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYy0yOTQ5LVxcdFxcdGRlLVxcdTAwM2VyZWNfbGVuID0gZXh0NF9yZWNfbGVuX3RvX2Rpc2soXFxuZnMvZXh0NC9uYW1laS5jOjI5NTA6XFx0XFx0XFx0XFx0XFx0ZXh0NF9kaXJfcmVjX2xlbihkZS1cXHUwMDNlbmFtZV9sZW4sIE5VTEwpLFxcbmZzL2V4dDQvbmFtZWkuYy0yOTUxLVxcdFxcdFxcdFxcdFxcdGJsb2Nrc2l6ZSk7XFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtMjk1OC1cXHRcXHRkZS1cXHUwMDNlcmVjX2xlbiA9IGV4dDRfcmVjX2xlbl90b19kaXNrKGJsb2Nrc2l6ZSAtXFxuZnMvZXh0NC9uYW1laS5jOjI5NTk6XFx0XFx0XFx0XFx0XFx0KGNzdW1fc2l6ZSArIGV4dDRfZGlyX3JlY19sZW4oMSwgTlVMTCkpLFxcbmZzL2V4dDQvbmFtZWkuYy0yOTYwLVxcdFxcdFxcdFxcdFxcdGJsb2Nrc2l6ZSk7XFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9MzA2NT1ib29sIGV4dDRfZW1wdHlfZGlyKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtMzA4MS1cXHRzYiA9IGlub2RlLVxcdTAwM2VpX3NiO1xcbmZzL2V4dDQvbmFtZWkuYzozMDgyOlxcdGlmIChpbm9kZS1cXHUwMDNlaV9zaXplIFxcdTAwM2MgZXh0NF9kaXJfcmVjX2xlbigxLCBOVUxMKSArXFxuZnMvZXh0NC9uYW1laS5jOjMwODM6XFx0XFx0XFx0XFx0XFx0ZXh0NF9kaXJfcmVjX2xlbigyLCBOVUxMKSkge1xcbmZzL2V4dDQvbmFtZWkuYy0zMDg0LVxcdFxcdEVYVDRfRVJST1JfSU5PREUoaW5vZGUsIFxcXCJpbnZhbGlkIHNpemVcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTY6MDE6MDAuOTM4NDUzNTA4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0ODIxNzk2MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhc3Nlc3NtZW50IG9mIHRoZSBwYXRjaCwgZGlzdGlsbGVkIGludG8gbXkgY3VycmVudCB0aGlua2luZzpcblxuKipQYXRjaCBBbmFseXNpczogYGV4dDRfc2VhcmNoX2RpcmAgQnVnIEZpeCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdGFyZ2V0aW5nIGEgcHJldHR5IGNyaXRpY2FsIGlzc3VlIHdpdGhpbiB0aGUgYGV4dDRfc2VhcmNoX2RpcmAgZnVuY3Rpb24uIFRoZSBjb3JlIHByb2JsZW0gaXMgcmVsYXRlZCB0byBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gU3BlY2lmaWNhbGx5LCB0aGUgY29kZSB3YXMgdnVsbmVyYWJsZSBiZWNhdXNlIGBleHQ0X2hhc2hfaW5fZGlyZW50KGRpcilgIGNvdWxkIGJlIHRydWUsIGJ1dCB0aGUgZGlyZWN0b3J5IGVudHJ5IGxlbmd0aCB3YXNuJ3QgYWx3YXlzIHByb3Blcmx5IHZhbGlkYXRlZCBiZWZvcmUgYWNjZXNzaW5nIG1lbW9yeS4gVGhpcyBjb3VsZCBsZWFkIHRvIGEgY3Jhc2gsIHdoaWNoIGlzIG5ldmVyIGEgZ29vZCB0aGluZy5cblxuVGhlIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkIGFyZSBgRVhUNF9GU2AsIGBGU19FTkNSWVBUSU9OYCwgYW5kIGBVTklDT0RFYCwgbm90aGluZyB0b28gc3VycHJpc2luZyBnaXZlbiB0aGUgY29udGV4dC4gVGhlIGNydWNpYWwgc3ltYm9sIGhlcmUsIHRoZSBwb2ludCBvZiBmb2N1cywgaXMgZGVmaW5pdGVseSBgZXh0NF9zZWFyY2hfZGlyYC5cblxuTGV0IG1lIHF1aWNrbHkgcmUtZXhhbWluZSB0aGUgY29kZSBzbmlwcGV0LCBtYWtpbmcgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZpeDpcblxuYGBgY1xuIFx0XHRpZiAoZGUtXHUwMDNlbmFtZSArIGRlLVx1MDAzZW5hbWVfbGVuIFx1MDAzYz0gZGxpbWl0IFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgKCFleHQ0X2hhc2hfaW5fZGlyZW50KGRpcikgfHxcbitcdFx0ICAgICAoY2hhciAqKWRlICsgZXh0NF9kaXJfcmVjX2xlbihkZS1cdTAwM2VuYW1lX2xlbiwgZGlyKSBcdTAwM2M9IGRsaW1pdCkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBleHQ0X21hdGNoKGRpciwgZm5hbWUsIGRlKSkge1xuYGBgXG5cbkFoLCByaWdodC4gVGhlIGFkZGl0aW9uIGlzIGNsZWFyOiBpdCBub3cgKmV4cGxpY2l0bHkqIGNoZWNrcyB0aGUgbGVuZ3RoIG9mIHRoZSBkaXJlY3RvcnkgZW50cnkuIEl0IGFkZHMgYSBtb3JlIHJvYnVzdCBjaGVjazogYChjaGFyICopZGUgKyBleHQ0X2Rpcl9yZWNfbGVuKGRlLVx1MDAzZW5hbWVfbGVuLCBkaXIpIFx1MDAzYz0gZGxpbWl0YC4gIFRoaXMgdmVyaWZpZXMgdGhhdCB0aGUgY2FsY3VsYXRlZCBtZW1vcnkgcmVnaW9uIG9mIHRoZSBkaXJlY3RvcnkgZW50cnkgaXMgd2l0aGluIHRoZSBhbGxvd2FibGUgYGRsaW1pdGAgYm91bmRhcnksIHByZXZlbnRpbmcgdGhhdCBvdXQtb2YtYm91bmRzIHJlYWQuIFRoaXMgcHJvdGVjdHMgYWdhaW5zdCB0aGUgY2FzZXMgd2hlcmUgYGV4dDRfaGFzaF9pbl9kaXJlbnQoZGlyKWAgbWlnaHQgaGF2ZSB0cmlnZ2VyZWQgdGhlIHByb2JsZW0uXG5cblRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZGlyZWN0bHkgYWRkcmVzc2VzIHRoZSB2dWxuZXJhYmlsaXR5LiBHb29kIGNhdGNoLCBhbmQgdGhlIGZpeCBzZWVtcyBhcHByb3ByaWF0ZS4gTGV0J3MgbWFyayB0aGlzIGFzIGRvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTMwLCJPdXRwdXRUb2tlbnMiOjE1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxNjowMTowNy40MjA2MzY4OTdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTI3MzA3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiLFxuICAgIFwiRlNfRU5DUllQVElPTlwiLFxuICAgIFwiVU5JQ09ERVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfc2VhcmNoX2RpclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gZXh0NF9zZWFyY2hfZGlyIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd2hlbiBleHQ0X2hhc2hfaW5fZGlyZW50IGlzIHRydWUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGV4dDQgZGlyZWN0b3J5IHNlYXJjaGluZyBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4gVGhlIGV4dDRfaGFzaF9pbl9kaXJlbnQgZnVuY3Rpb24gcmVxdWlyZXMgY2FzZWZvbGRpbmcgYW5kIGVuY3J5cHRpb24gdG8gYmUgZW5hYmxlZCwgc28gd2UgbmVlZCBFWFQ0X0ZTLCBGU19FTkNSWVBUSU9OLCBhbmQgVU5JQ09ERSBjb25maWdzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIixcbiAgICBcIkZTX0VOQ1JZUFRJT05cIixcbiAgICBcIlVOSUNPREVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X3NlYXJjaF9kaXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIGV4dDRfc2VhcmNoX2RpciB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzIHdoZW4gZXh0NF9oYXNoX2luX2RpcmVudCBpcyB0cnVlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBleHQ0IGRpcmVjdG9yeSBzZWFyY2hpbmcgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuIFRoZSBleHQ0X2hhc2hfaW5fZGlyZW50IGZ1bmN0aW9uIHJlcXVpcmVzIGNhc2Vmb2xkaW5nIGFuZCBlbmNyeXB0aW9uIHRvIGJlIGVuYWJsZWQsIHNvIHdlIG5lZWQgRVhUNF9GUywgRlNfRU5DUllQVElPTiwgYW5kIFVOSUNPREUgY29uZmlncy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowqtlj6[1] Phase: Succeeded StartedAt: 2026-07-10 16:02:10 +0000 UTC FinishedAt: 2026-07-10 16:02:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtlj6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-10 16:02:10 +0000 UTC FinishedAt: 2026-07-10 16:02:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtlj6[2] Phase: Succeeded StartedAt: 2026-07-10 16:02:10 +0000 UTC FinishedAt: 2026-07-10 20:19:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtlj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_search_dir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"series_id":"35e0713a-2b9c-457a-abe6-25cfa88bab78","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 16:02:10 +0000 UTC FinishedAt: 2026-07-10 20:19:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_search_dir"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"series_id":"35e0713a-2b9c-457a-abe6-25cfa88bab78","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-workflowqtlj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_search_dir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"series_id":"35e0713a-2b9c-457a-abe6-25cfa88bab78","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 16:02:10 +0000 UTC FinishedAt: 2026-07-10 16:02:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtlj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_search_dir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"series_id":"35e0713a-2b9c-457a-abe6-25cfa88bab78","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 16:02:10 +0000 UTC FinishedAt: 2026-07-10 16:02:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"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-workflowqtlj6/series-workflowqtlj6-convert-artifact-1468652986/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqtlj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_search_dir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"series_id":"35e0713a-2b9c-457a-abe6-25cfa88bab78","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 16:02:20 +0000 UTC FinishedAt: 2026-07-10 16:41:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtlj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_search_dir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"series_id":"35e0713a-2b9c-457a-abe6-25cfa88bab78","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 16:02:20 +0000 UTC FinishedAt: 2026-07-10 16:41:16 +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:*94469b49-b5ed-4cbd-a11b-e2ab4f42de9c,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-workflowqtlj6/series-workflowqtlj6-convert-artifact-1468652986/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": "0090edfb-b674-4d28-83b3-6f00c091530f", "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-workflowqtlj6/series-workflowqtlj6-build-action-2445742952/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqtlj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_search_dir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"series_id":"35e0713a-2b9c-457a-abe6-25cfa88bab78","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 16:02:20 +0000 UTC FinishedAt: 2026-07-10 16:40:53 +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:*94469b49-b5ed-4cbd-a11b-e2ab4f42de9c,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-workflowqtlj6/series-workflowqtlj6-convert-artifact-1468652986/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": "0090edfb-b674-4d28-83b3-6f00c091530f", "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-workflowqtlj6/series-workflowqtlj6-build-action-2445742952/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqtlj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_search_dir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"series_id":"35e0713a-2b9c-457a-abe6-25cfa88bab78","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 16:41:16 +0000 UTC FinishedAt: 2026-07-10 16:41:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtlj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_search_dir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"series_id":"35e0713a-2b9c-457a-abe6-25cfa88bab78","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 16:41:16 +0000 UTC FinishedAt: 2026-07-10 16:41:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtlj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_search_dir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"series_id":"35e0713a-2b9c-457a-abe6-25cfa88bab78","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 16:41:16 +0000 UTC FinishedAt: 2026-07-10 16:41:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtlj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_search_dir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"series_id":"35e0713a-2b9c-457a-abe6-25cfa88bab78","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 16:41:16 +0000 UTC FinishedAt: 2026-07-10 16:41:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"series_id":"35e0713a-2b9c-457a-abe6-25cfa88bab78","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-workflowqtlj6/series-workflowqtlj6-convert-artifact-26089237/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqtlj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_search_dir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"series_id":"35e0713a-2b9c-457a-abe6-25cfa88bab78","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 16:41:37 +0000 UTC FinishedAt: 2026-07-10 16:43:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtlj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_search_dir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"series_id":"35e0713a-2b9c-457a-abe6-25cfa88bab78","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 16:41:37 +0000 UTC FinishedAt: 2026-07-10 16:43:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0090edfb-b674-4d28-83b3-6f00c091530f,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-workflowqtlj6/series-workflowqtlj6-build-action-2445742952/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-workflowqtlj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_search_dir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"series_id":"35e0713a-2b9c-457a-abe6-25cfa88bab78","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 16:43:46 +0000 UTC FinishedAt: 2026-07-10 16:43:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtlj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_search_dir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"series_id":"35e0713a-2b9c-457a-abe6-25cfa88bab78","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 16:43:46 +0000 UTC FinishedAt: 2026-07-10 16:43:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtlj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_search_dir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"series_id":"35e0713a-2b9c-457a-abe6-25cfa88bab78","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 16:43:46 +0000 UTC FinishedAt: 2026-07-10 17:13:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtlj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_search_dir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"series_id":"35e0713a-2b9c-457a-abe6-25cfa88bab78","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 16:43:46 +0000 UTC FinishedAt: 2026-07-10 17:13:23 +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:*94469b49-b5ed-4cbd-a11b-e2ab4f42de9c,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-workflowqtlj6/series-workflowqtlj6-convert-artifact-26089237/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": "198a5f9c-a69e-4fff-be5d-27f59f06c962", "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-workflowqtlj6/series-workflowqtlj6-build-action-140295585/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqtlj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_search_dir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"series_id":"35e0713a-2b9c-457a-abe6-25cfa88bab78","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 16:43:46 +0000 UTC FinishedAt: 2026-07-10 17:13:13 +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:*94469b49-b5ed-4cbd-a11b-e2ab4f42de9c,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-workflowqtlj6/series-workflowqtlj6-convert-artifact-26089237/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": "198a5f9c-a69e-4fff-be5d-27f59f06c962", "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-workflowqtlj6/series-workflowqtlj6-build-action-140295585/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqtlj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_search_dir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"series_id":"35e0713a-2b9c-457a-abe6-25cfa88bab78","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 17:13:23 +0000 UTC FinishedAt: 2026-07-10 17:13:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtlj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_search_dir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"series_id":"35e0713a-2b9c-457a-abe6-25cfa88bab78","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 17:13:23 +0000 UTC FinishedAt: 2026-07-10 17:13:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtlj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_search_dir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"series_id":"35e0713a-2b9c-457a-abe6-25cfa88bab78","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 17:13:23 +0000 UTC FinishedAt: 2026-07-10 17:15:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtlj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_search_dir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"series_id":"35e0713a-2b9c-457a-abe6-25cfa88bab78","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 17:13:23 +0000 UTC FinishedAt: 2026-07-10 17:15:29 +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:*198a5f9c-a69e-4fff-be5d-27f59f06c962,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-workflowqtlj6/series-workflowqtlj6-build-action-140295585/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-workflowqtlj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_search_dir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"series_id":"35e0713a-2b9c-457a-abe6-25cfa88bab78","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 17:15:41 +0000 UTC FinishedAt: 2026-07-10 20:19:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtlj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_search_dir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"series_id":"35e0713a-2b9c-457a-abe6-25cfa88bab78","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 17:15:41 +0000 UTC FinishedAt: 2026-07-10 20:19:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_search_dir"],"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:*0090edfb-b674-4d28-83b3-6f00c091530f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*198a5f9c-a69e-4fff-be5d-27f59f06c962,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-workflowqtlj6/series-workflowqtlj6-build-action-2445742952/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-workflowqtlj6/series-workflowqtlj6-build-action-140295585/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowqtlj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_search_dir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"series_id":"35e0713a-2b9c-457a-abe6-25cfa88bab78","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 17:15:41 +0000 UTC FinishedAt: 2026-07-10 17:16:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtlj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_search_dir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"series_id":"35e0713a-2b9c-457a-abe6-25cfa88bab78","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 17:15:41 +0000 UTC FinishedAt: 2026-07-10 17:16:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_search_dir"],"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-workflowqtlj6/series-workflowqtlj6-convert-artifact-3735840506/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqtlj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_search_dir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"series_id":"35e0713a-2b9c-457a-abe6-25cfa88bab78","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 17:15:41 +0000 UTC FinishedAt: 2026-07-10 17:15:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtlj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_search_dir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"series_id":"35e0713a-2b9c-457a-abe6-25cfa88bab78","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 17:15:41 +0000 UTC FinishedAt: 2026-07-10 17:15:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtlj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_search_dir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"series_id":"35e0713a-2b9c-457a-abe6-25cfa88bab78","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 17:15:41 +0000 UTC FinishedAt: 2026-07-10 17:15:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtlj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_search_dir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"series_id":"35e0713a-2b9c-457a-abe6-25cfa88bab78","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 17:16:23 +0000 UTC FinishedAt: 2026-07-10 20:19:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqtlj6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"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/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_search_dir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS","FS_ENCRYPTION","UNICODE"],"series_id":"35e0713a-2b9c-457a-abe6-25cfa88bab78","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 17:16:23 +0000 UTC FinishedAt: 2026-07-10 20:19:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0090edfb-b674-4d28-83b3-6f00c091530f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*198a5f9c-a69e-4fff-be5d-27f59f06c962,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-workflowqtlj6/series-workflowqtlj6-build-action-2445742952/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-workflowqtlj6/series-workflowqtlj6-build-action-140295585/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-workflowqtlj6/series-workflowqtlj6-convert-artifact-3735840506/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,}