Name: series-workflowqsjdm Phase: Succeeded StartedAt: 2026-09-03 19:51:04 +0000 UTC FinishedAt: 2026-09-03 23:55:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqsjdm[0] Phase: Succeeded StartedAt: 2026-09-03 19:51:04 +0000 UTC FinishedAt: 2026-09-03 20:10:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqsjdm[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 19:51:04 +0000 UTC FinishedAt: 2026-09-03 20:10:49 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "7bf591f26545f5776a4e42d08c06fd94469766dd", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "7bf591f26545f5776a4e42d08c06fd94469766dd", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "2672e84b-ebd0-404c-83a0-816cd0835854" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "generic_map_delete_batch", "generic_map_update_batch", "generic_map_lookup_batch", "htab_map_lookup_batch", "htab_map_lookup_and_delete_batch" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2VuZXJpY19tYXBfZGVsZXRlX2JhdGNoJiMzNDssCiAgICAmIzM0O2dlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCYjMzQ7LAogICAgJiMzNDtnZW5lcmljX21hcF9sb29rdXBfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9tYXBfbG9va3VwX2JhdGNoJiMzNDssCiAgICAmIzM0O2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBleHBsaWNpdCBgKHNpemVfdClgIGNhc3RzIHRvIHVzZXIgcG9pbnRlciBvZmZzZXQgYW5kIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gQlBGIGJhdGNoIG9wZXJhdGlvbnMgKHN1Y2ggYXMgYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfZGVsZXRlX2JhdGNoYCwgYGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaGAsIGFuZCBgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoYCkgdG8gcHJldmVudCAzMi1iaXQgaW50ZWdlciBtdWx0aXBsaWNhdGlvbiBvdmVyZmxvd3Mgb24gNjQtYml0IHN5c3RlbXMuXG5cblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgZml4IGludGVnZXIgYXJpdGhtZXRpYyBhbmQgdXNlciBzcGFjZSBhZGRyZXNzIGNhbGN1bGF0aW9ucy4gVGhleSBkbyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcy9wYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIGRhdGEgbGVha3MgdG8gdXNlciBzcGFjZS4gQW55IG1lbW9yeSBzYWZldHkgb3IgYXJpdGhtZXRpYyBpc3N1ZXMgcmVsYXRlZCB0byB0aGVzZSBjYWxjdWxhdGlvbnMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vVUJTQU4gYnVpbGRzLiBIZW5jZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBhcml0aG1ldGljIG9mZnNldCBjb21wdXRhdGlvbnMgZHVyaW5nIHVzZXIgbWVtb3J5IGNvcHlpbmcgaW4gQlBGIGJhdGNoIG1hcCBvcGVyYXRpb25zIChnZW5lcmljIG1hcCBkZWxldGUvdXBkYXRlL2xvb2t1cCBiYXRjaCBoYW5kbGVycyBhbmQgaGFzaCB0YWJsZSBiYXRjaCBsb29rdXAtYW5kLWRlbGV0ZSkgdG8gY2FzdCBpbmRpY2VzL211bHRpcGxpZXJzIHRvIHNpemVfdCB0byBwcmV2ZW50IHBvdGVudGlhbCBpbnRlZ2VyIHRydW5jYXRpb24gb3Igb3ZlcmZsb3cuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIGZ1bGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHdpdGggQlBGX01BUF8qX0JBVENIIGNvbW1hbmRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjA5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgM2UwZDc4NTA2NzE2MGEyNzM5MTUzNTViYWQ2NGFkN2IxMmE1M2E2ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMjA6MDk6MTcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuaW5kZXggZDQwY2I1ZGQ0NDZjYS4uYmQzNzA0ZWQ5MzMzZSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvaGFzaHRhYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuQEAgLTE5NzcsMTAgJiM0MzsxOTc3LDEwIEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0YnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcbi1cdGlmIChidWNrZXRfY250IFx1MDAyNlx1MDAyNiAoY29weV90b191c2VyKHVrZXlzICYjNDM7IHRvdGFsICoga2V5X3NpemUsIGtleXMsXG4tXHQgICAga2V5X3NpemUgKiBidWNrZXRfY250KSB8fFxuLVx0ICAgIGNvcHlfdG9fdXNlcih1dmFsdWVzICYjNDM7IHRvdGFsICogdmFsdWVfc2l6ZSwgdmFsdWVzLFxuLVx0ICAgIHZhbHVlX3NpemUgKiBidWNrZXRfY250KSkpIHtcbiYjNDM7XHRpZiAoYnVja2V0X2NudCBcdTAwMjZcdTAwMjYgKGNvcHlfdG9fdXNlcih1a2V5cyAmIzQzOyAoc2l6ZV90KXRvdGFsICoga2V5X3NpemUsIGtleXMsXG4mIzQzO1x0ICAgIChzaXplX3Qpa2V5X3NpemUgKiBidWNrZXRfY250KSB8fFxuJiM0MztcdCAgICBjb3B5X3RvX3VzZXIodXZhbHVlcyAmIzQzOyAoc2l6ZV90KXRvdGFsICogdmFsdWVfc2l6ZSwgdmFsdWVzLFxuJiM0MztcdCAgICAoc2l6ZV90KXZhbHVlX3NpemUgKiBidWNrZXRfY250KSkpIHtcbiBcdFx0cmV0ID0gLUVGQVVMVDtcbiBcdFx0Z290byBhZnRlcl9sb29wO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3lzY2FsbC5jIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcbmluZGV4IDY4NzRiYTE0MjRhZjAuLjczMTM4OGFlMDBhZDEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9zeXNjYWxsLmNcbkBAIC0yMDM2LDcgJiM0MzsyMDM2LDcgQEAgaW50IGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIFxuIFx0Zm9yIChjcCA9IDA7IGNwIFx1MDAzYyBtYXhfY291bnQ7IGNwJiM0MzsmIzQzOykge1xuIFx0XHRlcnIgPSAtRUZBVUxUO1xuLVx0XHRpZiAoY29weV9mcm9tX3VzZXIoa2V5LCBrZXlzICYjNDM7IGNwICogbWFwLVx1MDAzZWtleV9zaXplLFxuJiM0MztcdFx0aWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyAmIzQzOyAoc2l6ZV90KWNwICogbWFwLVx1MDAzZWtleV9zaXplLFxuIFx0XHRcdFx0ICAgbWFwLVx1MDAzZWtleV9zaXplKSlcbiBcdFx0XHRicmVhaztcbiBcbkBAIC0yMDk4LDkgJiM0MzsyMDk4LDkgQEAgaW50IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqbWFwX2ZpbGUsXG4gXG4gXHRmb3IgKGNwID0gMDsgY3AgXHUwMDNjIG1heF9jb3VudDsgY3AmIzQzOyYjNDM7KSB7XG4gXHRcdGVyciA9IC1FRkFVTFQ7XG4tXHRcdGlmIChjb3B5X2Zyb21fdXNlcihrZXksIGtleXMgJiM0MzsgY3AgKiBtYXAtXHUwMDNla2V5X3NpemUsXG4mIzQzO1x0XHRpZiAoY29weV9mcm9tX3VzZXIoa2V5LCBrZXlzICYjNDM7IChzaXplX3QpY3AgKiBtYXAtXHUwMDNla2V5X3NpemUsXG4gXHRcdCAgICBtYXAtXHUwMDNla2V5X3NpemUpIHx8XG4tXHRcdCAgICBjb3B5X2Zyb21fdXNlcih2YWx1ZSwgdmFsdWVzICYjNDM7IGNwICogdmFsdWVfc2l6ZSwgdmFsdWVfc2l6ZSkpXG4mIzQzO1x0XHQgICAgY29weV9mcm9tX3VzZXIodmFsdWUsIHZhbHVlcyAmIzQzOyAoc2l6ZV90KWNwICogdmFsdWVfc2l6ZSwgdmFsdWVfc2l6ZSkpXG4gXHRcdFx0YnJlYWs7XG4gXG4gXHRcdGVyciA9IGJwZl9tYXBfdXBkYXRlX3ZhbHVlKG1hcCwgbWFwX2ZpbGUsIGtleSwgdmFsdWUsXG5AQCAtMjE3OSwxMiAmIzQzOzIxNzksMTIgQEAgaW50IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gZnJlZV9idWY7XG4gXG4tXHRcdGlmIChjb3B5X3RvX3VzZXIoa2V5cyAmIzQzOyBjcCAqIG1hcC1cdTAwM2VrZXlfc2l6ZSwga2V5LFxuJiM0MztcdFx0aWYgKGNvcHlfdG9fdXNlcihrZXlzICYjNDM7IChzaXplX3QpY3AgKiBtYXAtXHUwMDNla2V5X3NpemUsIGtleSxcbiBcdFx0XHRcdCBtYXAtXHUwMDNla2V5X3NpemUpKSB7XG4gXHRcdFx0ZXJyID0gLUVGQVVMVDtcbiBcdFx0XHRnb3RvIGZyZWVfYnVmO1xuIFx0XHR9XG4tXHRcdGlmIChjb3B5X3RvX3VzZXIodmFsdWVzICYjNDM7IGNwICogdmFsdWVfc2l6ZSwgdmFsdWUsIHZhbHVlX3NpemUpKSB7XG4mIzQzO1x0XHRpZiAoY29weV90b191c2VyKHZhbHVlcyAmIzQzOyAoc2l6ZV90KWNwICogdmFsdWVfc2l6ZSwgdmFsdWUsIHZhbHVlX3NpemUpKSB7XG4gXHRcdFx0ZXJyID0gLUVGQVVMVDtcbiBcdFx0XHRnb3RvIGZyZWVfYnVmO1xuIFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtnZW5lcmljX21hcF9kZWxldGVfYmF0Y2gmIzM0OywKICAgICYjMzQ7Z2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoJiMzNDssCiAgICAmIzM0O2dlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCYjMzQ7LAogICAgJiMzNDtodGFiX21hcF9sb29rdXBfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYXJpdGhtZXRpYyBvZmZzZXQgY29tcHV0YXRpb25zIGR1cmluZyB1c2VyIG1lbW9yeSBjb3B5aW5nIGluIEJQRiBiYXRjaCBtYXAgb3BlcmF0aW9ucyAoZ2VuZXJpYyBtYXAgZGVsZXRlL3VwZGF0ZS9sb29rdXAgYmF0Y2ggaGFuZGxlcnMgYW5kIGhhc2ggdGFibGUgYmF0Y2ggbG9va3VwLWFuZC1kZWxldGUpIHRvIGNhc3QgaW5kaWNlcy9tdWx0aXBsaWVycyB0byBzaXplX3QgdG8gcHJldmVudCBwb3RlbnRpYWwgaW50ZWdlciB0cnVuY2F0aW9uIG9yIG92ZXJmbG93LiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB3aXRoIEJQRl9NQVBfKl9CQVRDSCBjb21tYW5kcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNlMGQ3ODUwNjcxNjBhMjczOTE1MzU1YmFkNjRhZDdiMTJhNTNhNmQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDIwOjA5OjE3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuYwppbmRleCBkNDBjYjVkZDQ0NmNhLi5iZDM3MDRlZDkzMzNlIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2hhc2h0YWIuYwpAQCAtMTk3NywxMCAmIzQzOzE5NzcsMTAgQEAgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLAogCiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJYnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKTsKLQlpZiAoYnVja2V0X2NudCAmYW1wOyZhbXA7IChjb3B5X3RvX3VzZXIodWtleXMgJiM0MzsgdG90YWwgKiBrZXlfc2l6ZSwga2V5cywKLQkgICAga2V5X3NpemUgKiBidWNrZXRfY250KSB8fAotCSAgICBjb3B5X3RvX3VzZXIodXZhbHVlcyAmIzQzOyB0b3RhbCAqIHZhbHVlX3NpemUsIHZhbHVlcywKLQkgICAgdmFsdWVfc2l6ZSAqIGJ1Y2tldF9jbnQpKSkgewomIzQzOwlpZiAoYnVja2V0X2NudCAmYW1wOyZhbXA7IChjb3B5X3RvX3VzZXIodWtleXMgJiM0MzsgKHNpemVfdCl0b3RhbCAqIGtleV9zaXplLCBrZXlzLAomIzQzOwkgICAgKHNpemVfdClrZXlfc2l6ZSAqIGJ1Y2tldF9jbnQpIHx8CiYjNDM7CSAgICBjb3B5X3RvX3VzZXIodXZhbHVlcyAmIzQzOyAoc2l6ZV90KXRvdGFsICogdmFsdWVfc2l6ZSwgdmFsdWVzLAomIzQzOwkgICAgKHNpemVfdCl2YWx1ZV9zaXplICogYnVja2V0X2NudCkpKSB7CiAJCXJldCA9IC1FRkFVTFQ7CiAJCWdvdG8gYWZ0ZXJfbG9vcDsKIAl9CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jCmluZGV4IDY4NzRiYTE0MjRhZjAuLjczMTM4OGFlMDBhZDEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jCkBAIC0yMDM2LDcgJiM0MzsyMDM2LDcgQEAgaW50IGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLAogCiAJZm9yIChjcCA9IDA7IGNwICZsdDsgbWF4X2NvdW50OyBjcCYjNDM7JiM0MzspIHsKIAkJZXJyID0gLUVGQVVMVDsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyAmIzQzOyBjcCAqIG1hcC0mZ3Q7a2V5X3NpemUsCiYjNDM7CQlpZiAoY29weV9mcm9tX3VzZXIoa2V5LCBrZXlzICYjNDM7IChzaXplX3QpY3AgKiBtYXAtJmd0O2tleV9zaXplLAogCQkJCSAgIG1hcC0mZ3Q7a2V5X3NpemUpKQogCQkJYnJlYWs7CiAKQEAgLTIwOTgsOSAmIzQzOzIwOTgsOSBAQCBpbnQgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSwKIAogCWZvciAoY3AgPSAwOyBjcCAmbHQ7IG1heF9jb3VudDsgY3AmIzQzOyYjNDM7KSB7CiAJCWVyciA9IC1FRkFVTFQ7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcihrZXksIGtleXMgJiM0MzsgY3AgKiBtYXAtJmd0O2tleV9zaXplLAomIzQzOwkJaWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyAmIzQzOyAoc2l6ZV90KWNwICogbWFwLSZndDtrZXlfc2l6ZSwKIAkJICAgIG1hcC0mZ3Q7a2V5X3NpemUpIHx8Ci0JCSAgICBjb3B5X2Zyb21fdXNlcih2YWx1ZSwgdmFsdWVzICYjNDM7IGNwICogdmFsdWVfc2l6ZSwgdmFsdWVfc2l6ZSkpCiYjNDM7CQkgICAgY29weV9mcm9tX3VzZXIodmFsdWUsIHZhbHVlcyAmIzQzOyAoc2l6ZV90KWNwICogdmFsdWVfc2l6ZSwgdmFsdWVfc2l6ZSkpCiAJCQlicmVhazsKIAogCQllcnIgPSBicGZfbWFwX3VwZGF0ZV92YWx1ZShtYXAsIG1hcF9maWxlLCBrZXksIHZhbHVlLApAQCAtMjE3OSwxMiAmIzQzOzIxNzksMTIgQEAgaW50IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLAogCQlpZiAoZXJyKQogCQkJZ290byBmcmVlX2J1ZjsKIAotCQlpZiAoY29weV90b191c2VyKGtleXMgJiM0MzsgY3AgKiBtYXAtJmd0O2tleV9zaXplLCBrZXksCiYjNDM7CQlpZiAoY29weV90b191c2VyKGtleXMgJiM0MzsgKHNpemVfdCljcCAqIG1hcC0mZ3Q7a2V5X3NpemUsIGtleSwKIAkJCQkgbWFwLSZndDtrZXlfc2l6ZSkpIHsKIAkJCWVyciA9IC1FRkFVTFQ7CiAJCQlnb3RvIGZyZWVfYnVmOwogCQl9Ci0JCWlmIChjb3B5X3RvX3VzZXIodmFsdWVzICYjNDM7IGNwICogdmFsdWVfc2l6ZSwgdmFsdWUsIHZhbHVlX3NpemUpKSB7CiYjNDM7CQlpZiAoY29weV90b191c2VyKHZhbHVlcyAmIzQzOyAoc2l6ZV90KWNwICogdmFsdWVfc2l6ZSwgdmFsdWUsIHZhbHVlX3NpemUpKSB7CiAJCQllcnIgPSAtRUZBVUxUOwogCQkJZ290byBmcmVlX2J1ZjsKIAkJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjQxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBCUEYgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIFRoaXMgcGF0Y2ggbG9va3MgbGlrZSBpdCYjMzk7cyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHksIHNwZWNpZmljYWxseSBpbnRlZ2VyIG92ZXJmbG93cywgd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLCB3aGljaCBpcyBhbHdheXMgaW50ZXJlc3RpbmcuIFRoZSBtb2RpZmljYXRpb25zIGFyZSBmb2N1c2VkIG9uIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgYW5kIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AsIHdoaWNoIGltbWVkaWF0ZWx5IHJhaXNlcyBteSBhbnRlbm5hcyBiZWNhdXNlIHRob3NlIGFyZSBjb3JlIGNvbXBvbmVudHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kICpleGFjdGx5KiBob3cgdGhlc2UgaW50ZWdlciBvdmVyZmxvd3MgYXJlIGJlaW5nIGFkZHJlc3NlZC4gSXQgc2VlbXMgcmVsYXRlZCB0byBjYWxjdWxhdGlvbnMgaW52b2x2ZWQgd2l0aCBiYXRjaCBtYXAgb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5IGludm9sdmluZyBgY29weV90b191c2VyYCBhbmQgYGNvcHlfZnJvbV91c2VyYCBhbmQgY2FsY3VsYXRpb25zIGxpa2UgYHRvdGFsICoga2V5X3NpemVgIG9yIGBjcCAqIG1hcC0mZ3Q7a2V5X3NpemVgLCB3aGVyZSBhIGBzaXplX3RgIGNhc3QgaXMgYmVpbmcgYXBwbGllZC4gVGhhdCBtYWtlcyBzZW5zZTsgaW50ZWdlciBvdmVyZmxvd3MgaW4gbWVtb3J5IGFsbG9jYXRpb24gb3Igb2Zmc2V0IGNhbGN1bGF0aW9ucyBhcmUgYSBjbGFzc2ljIHNvdXJjZSBvZiBzZWN1cml0eSBpc3N1ZXMuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGZpbGVzIGFuZCBmdW5jdGlvbnMgY2hhbmdlZCwgcHJvYmFibHkgdXNpbmcgYGdyZXBgIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGNvZGUsIG9yIHBlcmhhcHMgYHJlYWQtZmlsZWAgZGVwZW5kaW5nIG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJIG5lZWQgdG8gc2VlIHRoZSBiZWZvcmUtYW5kLWFmdGVyIGFuZCB1bmRlcnN0YW5kICpleGFjdGx5KiBob3cgdGhlIGNvZGUgaXMgYmVpbmcgZ3VhcmRlZCBub3cuIElzIGl0IHVzaW5nIGEgc2F0dXJhdGlvbiBhcml0aG1ldGljLCBjaGVja2luZyBmb3Igb3ZlcmZsb3csIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBVbmRlcnN0YW5kaW5nIHRoZSBjaG9zZW4gbWl0aWdhdGlvbiBzdHJhdGVneSBpcyBjcml0aWNhbC4gVGhpcyBpcyBhIHBvdGVudGlhbGx5IGNyaXRpY2FsIGZpeCwgYW5kIEkgbmVlZCB0byBhc3Nlc3MgaXRzIGNvcnJlY3RuZXNzIGFuZCBjb21wbGV0ZW5lc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hhc2h0YWIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTk3MDpcdFx0LyogSWYgd2UgYXJlIG5vdCBjb3B5aW5nIGRhdGEsIHdlIGNhbiBnbyB0byBuZXh0IGJ1Y2tldCBhbmQgYXZvaWRcbjE5NzE6XHRcdCAqIHVubG9ja2luZyB0aGUgcmN1LlxuMTk3MjpcdFx0ICovXG4xOTczOlx0XHRpZiAoIWJ1Y2tldF9jbnQgXHUwMDI2XHUwMDI2IChiYXRjaCAmIzQzOyAxIFx1MDAzYyBodGFiLVx1MDAzZW5fYnVja2V0cykpIHtcbjE5NzQ6XHRcdFx0YmF0Y2gmIzQzOyYjNDM7O1xuMTk3NTpcdFx0XHRnb3RvIGFnYWluX25vY29weTtcbjE5NzY6XHRcdH1cbjE5Nzc6XHRcbjE5Nzg6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMTk3OTpcdFx0YnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcbjE5ODA6XHRcdGlmIChidWNrZXRfY250IFx1MDAyNlx1MDAyNiAoY29weV90b191c2VyKHVrZXlzICYjNDM7IChzaXplX3QpdG90YWwgKiBrZXlfc2l6ZSwga2V5cyxcbjE5ODE6XHRcdCAgICAoc2l6ZV90KWtleV9zaXplICogYnVja2V0X2NudCkgfHxcbjE5ODI6XHRcdCAgICBjb3B5X3RvX3VzZXIodXZhbHVlcyAmIzQzOyAoc2l6ZV90KXRvdGFsICogdmFsdWVfc2l6ZSwgdmFsdWVzLFxuMTk4MzpcdFx0ICAgIChzaXplX3QpdmFsdWVfc2l6ZSAqIGJ1Y2tldF9jbnQpKSkge1xuMTk4NDpcdFx0XHRyZXQgPSAtRUZBVUxUO1xuMTk4NTpcdFx0XHRnb3RvIGFmdGVyX2xvb3A7XG4xOTg2Olx0XHR9XG4xOTg3Olx0XG4xOTg4Olx0XHR0b3RhbCAmIzQzOz0gYnVja2V0X2NudDtcbjE5ODk6XHRcdGJhdGNoJiM0MzsmIzQzOztcbjE5OTA6XHRcdGlmIChiYXRjaCBcdTAwM2U9IGh0YWItXHUwMDNlbl9idWNrZXRzKSB7XG4xOTkxOlx0XHRcdHJldCA9IC1FTk9FTlQ7XG4xOTkyOlx0XHRcdGdvdG8gYWZ0ZXJfbG9vcDtcbjE5OTM6XHRcdH1cbjE5OTQ6XHRcdGdvdG8gYWdhaW47XG4xOTk1Olx0XG4xOTk2Olx0YWZ0ZXJfbG9vcDpcbjE5OTc6XHRcdGlmIChyZXQgPT0gLUVGQVVMVClcbjE5OTg6XHRcdFx0Z290byBvdXQ7XG4xOTk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDUxNAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEJQRiBTeXN0ZW0gQ2FsbCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCB0cmFjayBkb3duIGEgc3BlY2lmaWMgYmVoYXZpb3IgaW4gdGhlIEJQRiBzeXN0ZW0gY2FsbCBoYW5kbGluZy4gTXkgaW5zdGluY3RzIHRlbGwgbWUgdGhlIGlzc3VlIGxpa2VseSBsaWVzIHdpdGhpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLCBwcm9iYWJseSBhcm91bmQgdGhlIGNvcmUgbG9naWMgb2YgaG93IHRoZXNlIGNhbGxzIGFyZSBwcm9jZXNzZWQuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGZldyBzdHJhdGVnaWMgYnJlYWtwb2ludHM6IEkmIzM5O20gdGhpbmtpbmcgdGhlIGNvZGUgYmxvY2tzIGF0IG9yIGFyb3VuZCBsaW5lIG51bWJlcnMgMjAzNiwgMjA5OCwgYW5kIDIxNzkgYXJlIGdvb2Qgc3RhcnRpbmcgcG9pbnRzLiBUaGV5IGxpa2VseSBkZWFsIHdpdGgga2V5IGFzcGVjdHMgb2YgdGhlIHN5c3RlbSBjYWxsIGZsb3csIGFuZCBtaWdodCBzaGVkIGxpZ2h0IG9uIHdoYXRldmVyIGlzc3VlIEkmIzM5O20gZGVidWdnaW5nLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIwMzA6XHRcdGlmIChwdXRfdXNlcigwLCBcdTAwMjZ1YXR0ci1cdTAwM2ViYXRjaC5jb3VudCkpXG4yMDMxOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuMjAzMjpcdFxuMjAzMzpcdFx0a2V5ID0ga3ZtYWxsb2MobWFwLVx1MDAzZWtleV9zaXplLCBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7XG4yMDM0Olx0XHRpZiAoIWtleSlcbjIwMzU6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4yMDM2Olx0XG4yMDM3Olx0XHRmb3IgKGNwID0gMDsgY3AgXHUwMDNjIG1heF9jb3VudDsgY3AmIzQzOyYjNDM7KSB7XG4yMDM4Olx0XHRcdGVyciA9IC1FRkFVTFQ7XG4yMDM5Olx0XHRcdGlmIChjb3B5X2Zyb21fdXNlcihrZXksIGtleXMgJiM0MzsgKHNpemVfdCljcCAqIG1hcC1cdTAwM2VrZXlfc2l6ZSxcbjIwNDA6XHRcdFx0XHRcdCAgIG1hcC1cdTAwM2VrZXlfc2l6ZSkpXG4yMDQxOlx0XHRcdFx0YnJlYWs7XG4yMDQyOlx0XG4yMDQzOlx0XHRcdGlmIChicGZfbWFwX2lzX29mZmxvYWRlZChtYXApKSB7XG4yMDQ0Olx0XHRcdFx0ZXJyID0gYnBmX21hcF9vZmZsb2FkX2RlbGV0ZV9lbGVtKG1hcCwga2V5KTtcbjIwNDU6XHRcdFx0XHRicmVhaztcbjIwNDY6XHRcdFx0fVxuMjA0NzpcdFxuMjA0ODpcdFx0XHRicGZfZGlzYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcbjIwNDk6XHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuMjA1MDpcdFx0XHRlcnIgPSBtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9kZWxldGVfZWxlbShtYXAsIGtleSk7XG4yMDUxOlx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMjA1MjpcdFx0XHRicGZfZW5hYmxlX2luc3RydW1lbnRhdGlvbigpO1xuMjA1MzpcdFx0XHRpZiAoZXJyKVxuMjA1NDpcdFx0XHRcdGJyZWFrO1xuMjA1NTpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbjIwNTY6XHRcdH1cbjIwNTc6XHRcdGlmIChjb3B5X3RvX3VzZXIoXHUwMDI2dWF0dHItXHUwMDNlYmF0Y2guY291bnQsIFx1MDAyNmNwLCBzaXplb2YoY3ApKSlcbjIwNTg6XHRcdFx0ZXJyID0gLUVGQVVMVDtcbjIwNTk6XHRcbjIwNjA6XHRcdGt2ZnJlZShrZXkpO1xuMjA2MTpcdFxuMjA2MjpcdFx0cmV0dXJuIGVycjtcbjIwNjM6XHR9XG4yMDY0Olx0XG4yMDY1Olx0aW50IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqbWFwX2ZpbGUsXG4yMDY2Olx0XHRcdFx0ICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbjIwNjc6XHRcdFx0XHQgICAgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpXG4yMDY4Olx0e1xuMjA2OTpcdFx0dm9pZCBfX3VzZXIgKnZhbHVlcyA9IHU2NF90b191c2VyX3B0cihhdHRyLVx1MDAzZWJhdGNoLnZhbHVlcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM0NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBmb3JtIG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqUmV2aWV3aW5nIEtleSBGdW5jdGlvbnMqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IHNvbWUgcGVyZm9ybWFuY2Ugb3IgZGVzaWduIGNvbnNpZGVyYXRpb25zLCBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgY292ZXJlZCBvdXIgYmFzZXMuIEkga25vdyB3ZSYjMzk7dmUgYWxyZWFkeSBsb29rZWQgYXQgWCwgWSwgYW5kIFosIGJ1dCBpdCYjMzk7cyBjcnVjaWFsIHRvIGJlIHRob3JvdWdoLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmV2aXNpdCBgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoYCBhbmQgYGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaGAuIFRoZXkmIzM5O3JlIGNvcmUgdG8gdGhlIHN5c3RlbSwgYW5kIGl0IHdvdWxkIGJlIGEgaHVnZSBtaXNzIGlmIGEgYm90dGxlbmVjayBvciBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdHkgaGFkIGJlZW4gb3Zlcmxvb2tlZCB0aGVyZS4gVGhlc2UgYmF0Y2ggb3BlcmF0aW9ucyBhcmUgZ2VuZXJhbGx5IGNvbXBsZXggYW5kIGNhbiBiZSBwZXJmb3JtYW5jZSBzZW5zaXRpdmUsIHNvIHRoYXQmIzM5O3MgdGhlIGZvY3VzLiBMZXQmIzM5O3Mgc2VlIGlmIGFueSBpbnNpZ2h0cyBwb3AgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjA5MDpcdFx0aWYgKCFrZXkpXG4yMDkxOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMjA5MjpcdFxuMjA5MzpcdFx0dmFsdWUgPSBrdm1hbGxvYyh2YWx1ZV9zaXplLCBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7XG4yMDk0Olx0XHRpZiAoIXZhbHVlKSB7XG4yMDk1Olx0XHRcdGt2ZnJlZShrZXkpO1xuMjA5NjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjIwOTc6XHRcdH1cbjIwOTg6XHRcbjIwOTk6XHRcdGZvciAoY3AgPSAwOyBjcCBcdTAwM2MgbWF4X2NvdW50OyBjcCYjNDM7JiM0MzspIHtcbjIxMDA6XHRcdFx0ZXJyID0gLUVGQVVMVDtcbjIxMDE6XHRcdFx0aWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyAmIzQzOyAoc2l6ZV90KWNwICogbWFwLVx1MDAzZWtleV9zaXplLFxuMjEwMjpcdFx0XHQgICAgbWFwLVx1MDAzZWtleV9zaXplKSB8fFxuMjEwMzpcdFx0XHQgICAgY29weV9mcm9tX3VzZXIodmFsdWUsIHZhbHVlcyAmIzQzOyAoc2l6ZV90KWNwICogdmFsdWVfc2l6ZSwgdmFsdWVfc2l6ZSkpXG4yMTA0Olx0XHRcdFx0YnJlYWs7XG4yMTA1Olx0XG4yMTA2Olx0XHRcdGVyciA9IGJwZl9tYXBfdXBkYXRlX3ZhbHVlKG1hcCwgbWFwX2ZpbGUsIGtleSwgdmFsdWUsXG4yMTA3Olx0XHRcdFx0XHRcdCAgIGF0dHItXHUwMDNlYmF0Y2guZWxlbV9mbGFncyk7XG4yMTA4Olx0XG4yMTA5Olx0XHRcdGlmIChlcnIpXG4yMTEwOlx0XHRcdFx0YnJlYWs7XG4yMTExOlx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuMjExMjpcdFx0fVxuMjExMzpcdFxuMjExNDpcdFx0aWYgKGNvcHlfdG9fdXNlcihcdTAwMjZ1YXR0ci1cdTAwM2ViYXRjaC5jb3VudCwgXHUwMDI2Y3AsIHNpemVvZihjcCkpKVxuMjExNTpcdFx0XHRlcnIgPSAtRUZBVUxUO1xuMjExNjpcdFxuMjExNzpcdFx0a3ZmcmVlKHZhbHVlKTtcbjIxMTg6XHRcdGt2ZnJlZShrZXkpO1xuMjExOTpcdFxuMjEyMDpcdFx0cmV0dXJuIGVycjtcbjIxMjE6XHR9XG4yMTIyOlx0XG4yMTIzOlx0aW50IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuMjEyNDpcdFx0XHRcdFx0ICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuMjEyNTpcdFx0XHRcdFx0ICAgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpXG4yMTI2Olx0e1xuMjEyNzpcdFx0dm9pZCBfX3VzZXIgKnVvYmF0Y2ggPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cdTAwM2ViYXRjaC5vdXRfYmF0Y2gpO1xuMjEyODpcdFx0dm9pZCBfX3VzZXIgKnViYXRjaCA9IHU2NF90b191c2VyX3B0cihhdHRyLVx1MDAzZWJhdGNoLmluX2JhdGNoKTtcbjIxMjk6XHRcdHZvaWQgX191c2VyICp2YWx1ZXMgPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cdTAwM2ViYXRjaC52YWx1ZXMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxOTIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkV4YW1pbmluZyBLZXJuZWwgQlBGIFN5c2NhbGwgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkZWVwIGRpdmluZyBpbnRvIHRoaXMgQlBGIGludmVzdGlnYXRpb24uIEkmIzM5O3ZlIGdvdCBhIGh1bmNoIGFib3V0IHRoZSBpc3N1ZSwgYW5kIEkgbmVlZCB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0gY2FsbHMgaW52b2x2ZWQuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIExldCBtZSBqdXN0IGp1bXAgb3ZlciB0byBsaW5lcyAyMTcwLTIyMDAgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB0aGVyZS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgY2FsbCBwYXRoIHdoZXJlLi4uICpbdGhpbmtpbmcgYWJvdXQgc3BlY2lmaWMgc3lzdGVtIGNhbGxzIGFuZCB0aGVpciBleHBlY3RlZCBiZWhhdmlvciBhbmQgd2hlcmUgdGhlIHBvdGVudGlhbCBwcm9ibGVtIGlzXSouLi4gdGhhdCYjMzk7cyBwcm9iYWJseSB0aGUgbW9zdCByZWxldmFudCBzZWN0aW9uIGZvciB0aGlzIHBhcnRpY3VsYXIgdXNlIGNhc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYXJndW1lbnRzIGFyZSBiZWluZyBoYW5kbGVkLCBob3cgdGhlIEJQRiBwcm9ncmFtcyBhcmUgYmVpbmcgbG9hZGVkIGFuZCB2ZXJpZmllZCwgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgYXJvdW5kLi4uICpbY29uc2lkZXJpbmcgc3BlY2lmaWMgY29kZSBlbGVtZW50cyBhbmQgc2VjdXJpdHkgY29uY2VybnNdKi4uLiBvciBhbnkgdW5leHBlY3RlZCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IHRoZXJlLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjE3MDpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjIxNzE6XHRcdFx0aWYgKGVycilcbjIxNzI6XHRcdFx0XHRicmVhaztcbjIxNzM6XHRcdFx0ZXJyID0gYnBmX21hcF9jb3B5X3ZhbHVlKG1hcCwga2V5LCB2YWx1ZSxcbjIxNzQ6XHRcdFx0XHRcdFx0IGF0dHItXHUwMDNlYmF0Y2guZWxlbV9mbGFncyk7XG4yMTc1Olx0XG4yMTc2Olx0XHRcdGlmIChlcnIgPT0gLUVOT0VOVClcbjIxNzc6XHRcdFx0XHRnb3RvIG5leHRfa2V5O1xuMjE3ODpcdFxuMjE3OTpcdFx0XHRpZiAoZXJyKVxuMjE4MDpcdFx0XHRcdGdvdG8gZnJlZV9idWY7XG4yMTgxOlx0XG4yMTgyOlx0XHRcdGlmIChjb3B5X3RvX3VzZXIoa2V5cyAmIzQzOyAoc2l6ZV90KWNwICogbWFwLVx1MDAzZWtleV9zaXplLCBrZXksXG4yMTgzOlx0XHRcdFx0XHQgbWFwLVx1MDAzZWtleV9zaXplKSkge1xuMjE4NDpcdFx0XHRcdGVyciA9IC1FRkFVTFQ7XG4yMTg1Olx0XHRcdFx0Z290byBmcmVlX2J1ZjtcbjIxODY6XHRcdFx0fVxuMjE4NzpcdFx0XHRpZiAoY29weV90b191c2VyKHZhbHVlcyAmIzQzOyAoc2l6ZV90KWNwICogdmFsdWVfc2l6ZSwgdmFsdWUsIHZhbHVlX3NpemUpKSB7XG4yMTg4Olx0XHRcdFx0ZXJyID0gLUVGQVVMVDtcbjIxODk6XHRcdFx0XHRnb3RvIGZyZWVfYnVmO1xuMjE5MDpcdFx0XHR9XG4yMTkxOlx0XG4yMTkyOlx0XHRcdGNwJiM0MzsmIzQzOztcbjIxOTM6XHRuZXh0X2tleTpcbjIxOTQ6XHRcdFx0aWYgKCFwcmV2X2tleSlcbjIxOTU6XHRcdFx0XHRwcmV2X2tleSA9IGJ1Zl9wcmV2a2V5O1xuMjE5NjpcdFxuMjE5NzpcdFx0XHRzd2FwKHByZXZfa2V5LCBrZXkpO1xuMjE5ODpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbjIxOTk6XHRcdH1cbjIyMDA6XHRcbjIyMDE6XHRcdGlmIChlcnIgPT0gLUVGQVVMVClcbjIyMDI6XHRcdFx0Z290byBmcmVlX2J1ZjtcbjIyMDM6XHRcbjIyMDQ6XHRcdGlmICgoY29weV90b191c2VyKFx1MDAyNnVhdHRyLVx1MDAzZWJhdGNoLmNvdW50LCBcdTAwMjZjcCwgc2l6ZW9mKGNwKSkgfHxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjkzNwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMga2VybmVsIGNvbmZpZ3VyYXRpb24gcHV6emxlLgoKKipGaW5kaW5nIHRoZSBCUEYgU3lzY2FsbCBhbmQgSGFzaHRhYmxlIENvbmZpZ3VyYXRpb24gRmxhZ3MqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIEtjb25maWcgZmxhZ3MgYXJlIHJlc3BvbnNpYmxlIGZvciBlbmFibGluZyB0aGUgQlBGIHN5c2NhbGxzIGFuZCBoYXNodGFibGVzLiBJJiMzOTttIHRoaW5raW5nLCB0aGUgbW9zdCBzdHJhaWdodGZvcndhcmQgYXBwcm9hY2ggaXMgdG8gaHVudCBmb3IgdGhvc2UgQlBGLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgZGlyZWN0bHkgd2l0aGluIHRoZSBLY29uZmlnIGZpbGVzLiBUaGUga2VybmVsIGJ1aWxkIHN5c3RlbSBzaG91bGQgbWFrZSB0aGF0IHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBvYnZpb3VzIHBsYWNlczogYGluaXQvS2NvbmZpZ2AgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBib290LXJlbGF0ZWQgZmVhdHVyZXMsIGFuZCB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgIHNob3VsZCBjb250YWluIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gYml0cyBnaXZlbiBCUEYmIzM5O3MgaW5jcmVhc2luZyBpbXBvcnRhbmNlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBncmVwIHVuY292ZXJzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoYXNodGFiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT0xMD1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMTItb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gbG9jYWxfc3RvcmFnZS5vIHF1ZXVlX3N0YWNrX21hcHMubyByaW5nYnVmLm8gYnBmX2luc25fYXJyYXkub1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTExLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3JhbmRvbS5oXHUwMDNlXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoxMjojaW5jbHVkZSBcdTAwM2NsaW51eC9yaGFzaHRhYmxlLmhcdTAwM2Vcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTEzLSNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvYnRmLmhcdTAwM2Vcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz04Nj1zdHJ1Y3QgYnBmX2h0YWIge1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTk2LVx0c3RydWN0IGh0YWJfZWxlbSAqX19wZXJjcHUgKmV4dHJhX2VsZW1zO1xua2VybmVsL2JwZi9oYXNodGFiLmM6OTc6XHQvKiBudW1iZXIgb2YgZWxlbWVudHMgaW4gbm9uLXByZWFsbG9jYXRlZCBoYXNodGFibGUgYXJlIGtlcHRcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTk4LVx0ICogaW4gZWl0aGVyIHBjb3VudCBvciBjb3VudFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI3Mz1zdGF0aWMgdm9pZCBodGFiX2ZyZWVfZWxlbXMoc3RydWN0IGJwZl9odGFiICpodGFiKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5OC0gKlxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk5OiAqIEluIGhhc2h0YWIuYywgdG8gYXZvaWQgZGVhZGxvY2ssIGxvY2sgYWNxdWlzaXRpb24gb2Zcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwMC0gKiBidWNrZXRfbG9jayBmb2xsb3dlZCBieSBscnVfbG9jayBpcyBub3QgYWxsb3dlZC4gSW4gc3VjaCBjYXNlcyxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNzUxPXN0cnVjdCBicGZfcmh0YWIge1xua2VybmVsL2JwZi9oYXNodGFiLmMtMjc1Mi1cdHN0cnVjdCBicGZfbWFwIG1hcDtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI3NTM6XHRzdHJ1Y3Qgcmhhc2h0YWJsZSBodDtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3NTQtXHRzdHJ1Y3QgYnBmX21lbV9hbGxvYyBtYTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzU4LVxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjc1OTpzdGF0aWMgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHJodGFiX3BhcmFtcyA9IHtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3NjAtXHQuaGVhZF9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3Qgcmh0YWJfZWxlbSwgbm9kZSksXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9Mjc2ND1zdGF0aWMgaW5saW5lIHZvaWQgKnJodGFiX2VsZW1fdmFsdWUoc3RydWN0IHJodGFiX2VsZW0gKmwsIHUzMiBrZXlfc2l6ZSlcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzY5LS8qIFNwZWNpYWxpemUgaGFzaCBmdW5jdGlvbiBhbmQgb2JqY21wIGZvciBsb25nIHNpemVkIGtleSAqL1xua2VybmVsL2JwZi9oYXNodGFiLmM6Mjc3MDpzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCByaHRhYl9rZXlfY21wX2xvbmcoc3RydWN0IHJoYXNodGFibGVfY29tcGFyZV9hcmcgKmFyZyxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3NzEtXHRcdFx0XHRcdCAgICAgIGNvbnN0IHZvaWQgKnB0cilcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNzc5PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTMyIHJodGFiX2hhc2hmbl9sb25nKGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBsZW4sIHUzMiBzZWVkKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3ODUtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNzg2OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgcmh0YWJfcGFyYW1zX2xvbmcgPSB7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzg3LVx0LmhlYWRfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHJodGFiX2VsZW0sIG5vZGUpLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI3OTQ9c3RhdGljIHN0cnVjdCBicGZfbWFwICpyaHRhYl9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzk1LXtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI3OTY6XHRzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgcGFyYW1zO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMjc5Ny1cdHN0cnVjdCBicGZfcmh0YWIgKnJodGFiO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4MjMtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyODI0Olx0ZXJyID0gcmhhc2h0YWJsZV9pbml0KFx1MDAyNnJodGFiLVx1MDAzZWh0LCBcdTAwMjZwYXJhbXMpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMjgyNS1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjgyNy1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI4Mjg6XHQvKiBTZXQgbWF4X2VsZW1zIGFmdGVyIHJoYXNodGFibGVfaW5pdCgpIHNpbmNlIGluaXQgemVyb2VzIHRoZSBzdHJ1Y3QgKi9cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4MjktXHRyaHRhYi1cdTAwM2VodC5tYXhfZWxlbXMgPSByaHRhYi1cdTAwM2VtYXAubWF4X2VudHJpZXM7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjgzNy1kZXN0cm95X3JodGFiOlxua2VybmVsL2JwZi9oYXNodGFiLmM6MjgzODpcdHJoYXNodGFibGVfZGVzdHJveShcdTAwMjZyaHRhYi1cdTAwM2VodCk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yODM5LWZyZWVfcmh0YWI6XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9Mjg5OD1zdGF0aWMgdm9pZCByaHRhYl9tYXBfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5MDEtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTAyOlx0cmhhc2h0YWJsZV9mcmVlX2FuZF9kZXN0cm95KFx1MDAyNnJodGFiLVx1MDAzZWh0LCByaHRhYl9mcmVlX2VsZW0sIHJodGFiKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5MDMtXHRicGZfbWVtX2FsbG9jX2Rlc3Ryb3koXHUwMDI2cmh0YWItXHUwMDNlbWEpO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI5MDc9c3RhdGljIHZvaWQgKnJodGFiX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTE0LVx0aWYgKG1hcC1cdTAwM2VrZXlfc2l6ZSA9PSBzaXplb2YobG9uZykpXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTE1Olx0XHRyZXR1cm4gcmhhc2h0YWJsZV9sb29rdXBfbGlrZWx5KFx1MDAyNnJodGFiLVx1MDAzZWh0LCBrZXksIHJodGFiX3BhcmFtc19sb25nKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5MTYtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTE3Olx0cmV0dXJuIHJoYXNodGFibGVfbG9va3VwX2xpa2VseShcdTAwMjZyaHRhYi1cdTAwM2VodCwga2V5LCByaHRhYl9wYXJhbXMpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMjkxOC19XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjkzOT1zdGF0aWMgaW50IHJodGFiX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfcmh0YWIgKnJodGFiLCBzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSwgdm9pZCAqY29weSxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTQ1LVx0ICogZGlzYWJsZV9pbnN0cnVtZW50YXRpb24oKSBtaXRpZ2F0ZXMgdGhlIGRlYWRsb2NrIGZvciBwcm9ncmFtcyBydW5uaW5nIGluIE5NSSBjb250ZXh0Llxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk0NjpcdCAqIHJoYXNodGFibGUgbG9ja3MgYnVja2V0IHdpdGggbG9jYWxfaXJxX3NhdmUoKS4gT25seSBOTUkgcHJvZ3JhbXMgbWF5IHJlZW50ZXJcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5NDc6XHQgKiByaGFzaHRhYmxlIGNvZGUsIGJwZl9kaXNhYmxlX2luc3RydW1lbnRhdGlvbigpIGRpc2FibGVzIHByb2dyYW1zIHJ1bm5pbmcgaW4gTk1JLCBleGNlcHRcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5NDg6XHQgKiByYXcgdHJhY2Vwb2ludHMsIHdoaWNoIHdlIGRvbiYjMzk7dCBoYXZlIGluIHJoYXNodGFibGUuXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTQ5LVx0ICovXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjk1Mi1cdGlmIChyaHRhYi1cdTAwM2VtYXAua2V5X3NpemUgPT0gc2l6ZW9mKGxvbmcpKVxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk1MzpcdFx0ZXJyID0gcmhhc2h0YWJsZV9yZW1vdmVfZmFzdChcdTAwMjZyaHRhYi1cdTAwM2VodCwgXHUwMDI2ZWxlbS1cdTAwM2Vub2RlLCByaHRhYl9wYXJhbXNfbG9uZyk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTU0LVx0ZWxzZVxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk1NTpcdFx0ZXJyID0gcmhhc2h0YWJsZV9yZW1vdmVfZmFzdChcdTAwMjZyaHRhYi1cdTAwM2VodCwgXHUwMDI2ZWxlbS1cdTAwM2Vub2RlLCByaHRhYl9wYXJhbXMpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMjk1Ni1cbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMDMyPXN0YXRpYyBsb25nIHJodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLCB1NjQgbWFwX2ZsYWdzKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwNzQtXHRpZiAobWFwLVx1MDAzZWtleV9zaXplID09IHNpemVvZihsb25nKSlcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMwNzU6XHRcdHRtcCA9IHJoYXNodGFibGVfbG9va3VwX2dldF9pbnNlcnRfZmFzdChcdTAwMjZyaHRhYi1cdTAwM2VodCwgXHUwMDI2ZWxlbS1cdTAwM2Vub2RlLCByaHRhYl9wYXJhbXNfbG9uZyk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMDc2LVx0ZWxzZVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzA3NzpcdFx0dG1wID0gcmhhc2h0YWJsZV9sb29rdXBfZ2V0X2luc2VydF9mYXN0KFx1MDAyNnJodGFiLVx1MDAzZWh0LCBcdTAwMjZlbGVtLVx1MDAzZW5vZGUsIHJodGFiX3BhcmFtcyk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMDc4LVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMxMTY9c3RhdGljIHZvaWQgcmh0YWJfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cyhzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxMTgtXHRzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfcmh0YWIsIG1hcCk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTE5Olx0c3RydWN0IHJoYXNodGFibGVfaXRlciBpdGVyO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzEyMC1cdHN0cnVjdCByaHRhYl9lbGVtICplbGVtO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxMzItXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTMzOlx0cmhhc2h0YWJsZV93YWxrX2VudGVyKFx1MDAyNnJodGFiLVx1MDAzZWh0LCBcdTAwMjZpdGVyKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxMzQ6XHRyaGFzaHRhYmxlX3dhbGtfc3RhcnQoXHUwMDI2aXRlcik7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTM1LVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzEzNjpcdHdoaWxlICgoZWxlbSA9IHJoYXNodGFibGVfd2Fsa19uZXh0KFx1MDAyNml0ZXIpKSkge1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzEzNy1cdFx0aWYgKElTX0VSUihlbGVtKSkge1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxNDUtXHRcdGlmIChuZWVkX3Jlc2NoZWQoKSkgeyAvKiBBdm9pZCBzdGFsbHMgb24gbGFyZ2UgbWFwcyAqL1xua2VybmVsL2JwZi9oYXNodGFiLmM6MzE0NjpcdFx0XHRyaGFzaHRhYmxlX3dhbGtfc3RvcChcdTAwMjZpdGVyKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxNDctXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTQ4Olx0XHRcdHJoYXNodGFibGVfd2Fsa19zdGFydChcdTAwMjZpdGVyKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxNDktXHRcdH1cbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTUxLVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzE1MjpcdHJoYXNodGFibGVfd2Fsa19zdG9wKFx1MDAyNml0ZXIpO1xua2VybmVsL2JwZi9oYXNodGFiLmM6MzE1MzpcdHJoYXNodGFibGVfd2Fsa19leGl0KFx1MDAyNml0ZXIpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzE1NC1cdFdSSVRFX09OQ0Uocmh0YWItXHUwMDNlZnJlZWluZ19pbnRlcm5hbCwgZmFsc2UpO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMxNTc9c3RhdGljIGludCByaHRhYl9tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dF9rZXkpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzE2Mi1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxNjM6XHRlbGVtID0gcmhhc2h0YWJsZV9uZXh0X2tleShcdTAwMjZyaHRhYi1cdTAwM2VodCwga2V5KTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxNjQtXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzE2Ni1cdGlmIChQVFJfRVJSKGVsZW0pID09IC1FTk9FTlQpXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTY3Olx0XHRlbGVtID0gcmhhc2h0YWJsZV9uZXh0X2tleShcdTAwMjZyaHRhYi1cdTAwM2VodCwgTlVMTCk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTY4LVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMxNzg9c3RhdGljIHZvaWQgcmh0YWJfbWFwX3NlcV9zaG93X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzE4MS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxODI6XHQvKiBHdWFyYW50ZWUgdGhhdCBoYXNodGFiIHZhbHVlIGlzIG5vdCBmcmVlZCAqL1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzE4My1cdGd1YXJkKHJjdSkoKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMTk1PXN0YXRpYyBsb25nIGJwZl9lYWNoX3JoYXNoX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgYnBmX2NhbGxiYWNrX3QgY2FsbGJhY2tfZm4sXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzIxMC1cdC8qXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMjExOlx0ICogQmVzdC1lZmZvcnQgaXRlcmF0aW9uOiBpZiByaGFzaHRhYmxlIGlzIGNvbmN1cnJlbnRseSByZXNpemVkIG9yXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMjEyLVx0ICogZWxlbWVudHMgYXJlIGRlbGV0ZWQvaW5zZXJ0ZWQsIHRoZXJlIG1heSBiZSBtaXNzZWQgb3IgZHVwbGljYXRlXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzIxNC1cdCAqL1xua2VybmVsL2JwZi9oYXNodGFiLmM6MzIxNTpcdHdoaWxlICgoZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoXHUwMDI2cmh0YWItXHUwMDNlaHQsIHByZXZfa2V5KSkpIHtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyMTYtXHRcdGlmIChJU19FUlIoZWxlbSkpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzIzMz1zdGF0aWMgdTY0IHJodGFiX21hcF9tZW1fdXNhZ2UoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcClcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMjM3LVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzIzODpcdC8qIEV4Y2x1ZGVzIHJoYXNodGFibGUgYnVja2V0IG92ZXJoZWFkICh+IG5lbGVtcyAqIHNpemVvZih2b2lkICopIGF0IDc1JSBsb2FkKS4gKi9cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyMzktXHRudW1fZW50cmllcyA9IGF0b21pY19yZWFkKFx1MDAyNnJodGFiLVx1MDAzZWh0Lm5lbGVtcyk7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzI0Mz1zdGF0aWMgaW50IF9fcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzMxNy1cdH0gZWxzZSB7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMzE4Olx0XHRlbGVtID0gcmhhc2h0YWJsZV9uZXh0X2tleShcdTAwMjZyaHRhYi1cdTAwM2VodCwgTlVMTCk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzE5LVx0fVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzMjgtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMzI5Olx0XHRlbGVtID0gcmhhc2h0YWJsZV9uZXh0X2tleShcdTAwMjZyaHRhYi1cdTAwM2VodCwgZHN0X2tleSk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzMwLVx0XHRkc3Rfa2V5ICYjNDM7PSBrZXlfc2l6ZTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMzkxPXN0cnVjdCBicGZfaXRlcl9zZXFfcmhhc2hfbWFwX2luZm8ge1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzOTMtXHRzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYjtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMzOTQ6XHRzdHJ1Y3Qgcmhhc2h0YWJsZV9pdGVyIGl0ZXI7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzk1LX07XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzM5Nz1zdGF0aWMgdm9pZCAqYnBmX3JoYXNoX21hcF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0MDItXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNDAzOlx0cmhhc2h0YWJsZV93YWxrX3N0YXJ0KFx1MDAyNmluZm8tXHUwMDNlaXRlcik7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNDA0LVx0Lypcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNDA5LVx0ZG8ge1xua2VybmVsL2JwZi9oYXNodGFiLmM6MzQxMDpcdFx0ZWxlbSA9IHJoYXNodGFibGVfd2Fsa19wZWVrKFx1MDAyNmluZm8tXHUwMDNlaXRlcik7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNDExLVx0fSB3aGlsZSAoUFRSX0VSUihlbGVtKSA9PSAtRUFHQUlOKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zNDIxPXN0YXRpYyB2b2lkICpicGZfcmhhc2hfbWFwX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcylcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNDI5LVx0ZG8ge1xua2VybmVsL2JwZi9oYXNodGFiLmM6MzQzMDpcdFx0ZWxlbSA9IHJoYXNodGFibGVfd2Fsa19uZXh0KFx1MDAyNmluZm8tXHUwMDNlaXRlcik7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNDMxLVx0fSB3aGlsZSAoUFRSX0VSUihlbGVtKSA9PSAtRUFHQUlOKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zNDY3PXN0YXRpYyB2b2lkIGJwZl9yaGFzaF9tYXBfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzQ3NC1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjM0NzU6XHRyaGFzaHRhYmxlX3dhbGtfc3RvcChcdTAwMjZpbmZvLVx1MDAzZWl0ZXIpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzQ3Ni19XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzQ3OD1zdGF0aWMgaW50IGJwZl9pdGVyX2luaXRfcmhhc2hfbWFwKHZvaWQgKnByaXZfZGF0YSwgc3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvICphdXgpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzQ4NS1cdGluZm8tXHUwMDNlcmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3JodGFiLCBtYXApO1xua2VybmVsL2JwZi9oYXNodGFiLmM6MzQ4NjpcdHJoYXNodGFibGVfd2Fsa19lbnRlcihcdTAwMjZpbmZvLVx1MDAzZXJodGFiLVx1MDAzZWh0LCBcdTAwMjZpbmZvLVx1MDAzZWl0ZXIpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzQ4Ny1cdHJldHVybiAwO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTM0OTA9c3RhdGljIHZvaWQgYnBmX2l0ZXJfZmluaV9yaGFzaF9tYXAodm9pZCAqcHJpdl9kYXRhKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0OTMtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNDk0Olx0cmhhc2h0YWJsZV93YWxrX2V4aXQoXHUwMDI2aW5mby1cdTAwM2VpdGVyKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0OTUtXHRicGZfbWFwX3B1dF93aXRoX3VyZWYoaW5mby1cdTAwM2VtYXApO1xuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy01LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2J0Zi5oXHUwMDNlXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NjojaW5jbHVkZSBcdTAwM2NsaW51eC9oYXNodGFibGUuaFx1MDAzZVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTctI2luY2x1ZGUgXHUwMDNjbGludXgvamhhc2guaFx1MDAzZVxuLS1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTE0LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb2NfbnMuaFx1MDAzZVxua2VybmVsL2JwZi9vZmZsb2FkLmM6MTU6I2luY2x1ZGUgXHUwMDNjbGludXgvcmhhc2h0YWJsZS5oXHUwMDNlXG5rZXJuZWwvYnBmL29mZmxvYWQuYy0xNi0jaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuLS1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jPTMzPXN0cnVjdCBicGZfb2ZmbG9hZF9uZXRkZXYge1xuLS1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTQxLVxua2VybmVsL2JwZi9vZmZsb2FkLmM6NDI6c3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBvZmZkZXZzX3BhcmFtcyA9IHtcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTQzLVx0Lm5lbGVtX2hpbnRcdFx0PSA0LFxuLS1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTQ5LVxua2VybmVsL2JwZi9vZmZsb2FkLmM6NTA6c3RhdGljIHN0cnVjdCByaGFzaHRhYmxlIG9mZmRldnM7XG5rZXJuZWwvYnBmL29mZmxvYWQuYy01MS1cbi0tXG5rZXJuZWwvYnBmL29mZmxvYWQuYz02Mj1icGZfb2ZmbG9hZF9maW5kX25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuLS1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTY1LVxua2VybmVsL2JwZi9vZmZsb2FkLmM6NjY6XHRyZXR1cm4gcmhhc2h0YWJsZV9sb29rdXBfZmFzdChcdTAwMjZvZmZkZXZzLCBcdTAwMjZuZXRkZXYsIG9mZmRldnNfcGFyYW1zKTtcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTY3LX1cbi0tXG5rZXJuZWwvYnBmL29mZmxvYWQuYz02OT1zdGF0aWMgaW50IF9fYnBmX29mZmxvYWRfZGV2X25ldGRldl9yZWdpc3RlcihzdHJ1Y3QgYnBmX29mZmxvYWRfZGV2ICpvZmZkZXYsXG4tLVxua2VybmVsL2JwZi9vZmZsb2FkLmMtODMtXG5rZXJuZWwvYnBmL29mZmxvYWQuYzo4NDpcdGVyciA9IHJoYXNodGFibGVfaW5zZXJ0X2Zhc3QoXHUwMDI2b2ZmZGV2cywgXHUwMDI2b25kZXYtXHUwMDNlbCwgb2ZmZGV2c19wYXJhbXMpO1xua2VybmVsL2JwZi9vZmZsb2FkLmMtODUtXHRpZiAoZXJyKSB7XG4tLVxua2VybmVsL2JwZi9vZmZsb2FkLmM9MTM2PXN0YXRpYyB2b2lkIF9fYnBmX29mZmxvYWRfZGV2X25ldGRldl91bnJlZ2lzdGVyKHN0cnVjdCBicGZfb2ZmbG9hZF9kZXYgKm9mZmRldixcbi0tXG5rZXJuZWwvYnBmL29mZmxvYWQuYy0xNDQtXG5rZXJuZWwvYnBmL29mZmxvYWQuYzoxNDU6XHRvbmRldiA9IHJoYXNodGFibGVfbG9va3VwX2Zhc3QoXHUwMDI2b2ZmZGV2cywgXHUwMDI2bmV0ZGV2LCBvZmZkZXZzX3BhcmFtcyk7XG5rZXJuZWwvYnBmL29mZmxvYWQuYy0xNDYtXHRpZiAoV0FSTl9PTighb25kZXYpKVxuLS1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTE0OC1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjE0OTpcdFdBUk5fT04ocmhhc2h0YWJsZV9yZW1vdmVfZmFzdChcdTAwMjZvZmZkZXZzLCBcdTAwMjZvbmRldi1cdTAwM2VsLCBvZmZkZXZzX3BhcmFtcykpO1xua2VybmVsL2JwZi9vZmZsb2FkLmMtMTUwLVxuLS1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jPTE3OT1zdGF0aWMgaW50IF9fYnBmX3Byb2dfZGV2X2JvdW5kX2luaXQoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuLS1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTIwMS1cdFx0LyogV2hlbiBvbmx5IGJpbmRpbmcgdG8gdGhlIGRldmljZSwgZXhwbGljaXRseVxua2VybmVsL2JwZi9vZmZsb2FkLmM6MjAyOlx0XHQgKiBjcmVhdGUgYW4gZW50cnkgaW4gdGhlIGhhc2h0YWJsZS5cbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTIwMy1cdFx0ICovXG4tLVxua2VybmVsL2JwZi9vZmZsb2FkLmM9ODYxPXN0YXRpYyBpbnQgX19pbml0IGJwZl9vZmZsb2FkX2luaXQodm9pZClcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTg2Mi17XG5rZXJuZWwvYnBmL29mZmxvYWQuYzo4NjM6XHRyZXR1cm4gcmhhc2h0YWJsZV9pbml0KFx1MDAyNm9mZmRldnMsIFx1MDAyNm9mZmRldnNfcGFyYW1zKTtcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTg2NC19XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTM4Mj1zdGF0aWMgaW50IG1hcF9jcmVhdGVfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE0MzMtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxNDM0Olx0LyogZmluZCBtYXAgdHlwZSBhbmQgaW5pdCBtYXA6IGhhc2h0YWJsZSB2cyByYnRyZWUgdnMgYmxvb20gdnMgLi4uICovXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNDM1LVx0bWFwX3R5cGUgPSBhdHRyLVx1MDAzZW1hcF90eXBlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjYwNAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQlBGIEhhc2h0YWJsZSBCYXRjaCBPcGVyYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYmF0Y2ggb3BlcmF0aW9uIGltcGxlbWVudGF0aW9ucyBmb3IgQlBGIGhhc2h0YWJsZXMsIHNwZWNpZmljYWxseSB0aGUgZGVsZXRlLCB1cGRhdGUsIGFuZCBsb29rdXAgZnVuY3Rpb25zLiBJJiMzOTtsbCBzdGFydCB3aXRoIHRoZSBkZWZpbml0aW9ucyBvZjoKCiogICBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAgd2l0aGluIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AKKiAgIGBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2hgIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AKKiAgIGBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hgIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AKKiAgIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AKCk15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAuIEkgbmVlZCB0byBkZXRlcm1pbmUgaG93IGl0JiMzOTtzIHVzZWQgYW5kIHdoZXRoZXIgaXQmIzM5O3Mgc3RhdGljYWxseSBsaW5rZWQgd2l0aGluIGl0cyBtb2R1bGUgb3IgZXhwb3NlZCBmb3IgZXh0ZXJuYWwgY2FsbHMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgY29udHJvbCBhbmQgdXNlIG9mIGJhdGNoIG9wZXJhdGlvbnMuIEtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgb2YgYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgIHdpbGwgaGlnaGxpZ2h0IGhvdyBhbmQgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIEJQRiBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hhc2h0YWIuYz0xNzcxPXN0YXRpYyBpbnRcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjE3NzI6X19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTc3My1cdFx0XHRcdCAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIwMTM9aHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDE1LXtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwMTY6XHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCBmYWxzZSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwMTctXHRcdFx0XHRcdFx0ICBmYWxzZSwgdHJ1ZSk7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjAyMT1odGFiX3BlcmNwdV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDI0LXtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwMjU6XHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCB0cnVlLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjAyNi1cdFx0XHRcdFx0XHQgIGZhbHNlLCB0cnVlKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDMwPWh0YWJfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDMyLXtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwMzM6XHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCBmYWxzZSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwMzQtXHRcdFx0XHRcdFx0ICBmYWxzZSwgZmFsc2UpO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIwMzg9aHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDQxLXtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwNDI6XHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCB0cnVlLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA0My1cdFx0XHRcdFx0XHQgIGZhbHNlLCBmYWxzZSk7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjA0Nz1odGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNTAte1xua2VybmVsL2JwZi9oYXNodGFiLmM6MjA1MTpcdHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIGZhbHNlLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA1Mi1cdFx0XHRcdFx0XHQgIHRydWUsIHRydWUpO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIwNTY9aHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNTkte1xua2VybmVsL2JwZi9oYXNodGFiLmM6MjA2MDpcdHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIHRydWUsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDYxLVx0XHRcdFx0XHRcdCAgdHJ1ZSwgdHJ1ZSk7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjA2NT1odGFiX2xydV9tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNjcte1xua2VybmVsL2JwZi9oYXNodGFiLmM6MjA2ODpcdHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIGZhbHNlLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA2OS1cdFx0XHRcdFx0XHQgIHRydWUsIGZhbHNlKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDczPWh0YWJfbHJ1X21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNzYte1xua2VybmVsL2JwZi9oYXNodGFiLmM6MjA3NzpcdHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIHRydWUsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDc4LVx0XHRcdFx0XHRcdCAgdHJ1ZSwgZmFsc2UpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDEyNQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQmF0Y2ggT3BlcmF0aW9ucyBpbiBCUEYgTWFwcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGJhdGNoIG9wZXJhdGlvbnMgYXJlIGltcGxlbWVudGVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIEJQRiBtYXBzLiBJIHNlZSBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0JiMzOTtzIGxpa2VseSBhbiBpbnRlcm5hbCB1dGlsaXR5LiBIb3dldmVyLCBvdGhlciBmdW5jdGlvbnMgbGlrZSBgaHRhYl9tYXBfbG9va3VwX2JhdGNoYCwgYW5kIGBodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAgY2FsbCBpdCwgc28gaXQmIzM5O3MgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlLiBOb3csIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGdlbmVyaWMgYmF0Y2ggb3BlcmF0aW9ucyBhcmUgc2V0IHVwLCBJIHNob3VsZCBjaGVjayBvdXQgYGtlcm5lbC9icGYvc3lzY2FsbC5jYCBmb3IgdGhlIGltcGxlbWVudGF0aW9ucyBvZiBgZ2VuZXJpY19tYXBfZGVsZXRlX2JhdGNoYCwgYGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaGAsIGFuZCBgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoYC4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlc2UgYGdlbmVyaWNfKl9iYXRjaGAgZnVuY3Rpb25zIGFyZSBub24tc3RhdGljOyBpZiB0aGV5IGFyZSwgdGhhdCYjMzk7cyBpbXBvcnRhbnQgZm9yIGhvdyB0aGV5JiMzOTtyZSBleHBvc2VkIGFuZCB1dGlsaXplZCBpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZWlyIGRlY2xhcmF0aW9ucy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGNvcmUgYmF0Y2ggZnVuY3Rpb25hbGl0eSBpcyBzdHJ1Y3R1cmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZW5lcmljX21hcF8uKl9iYXRjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYXJyYXltYXAuYz04NTg9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFycmF5X21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTg3NC1cdC5tYXBfY2hlY2tfYnRmID0gYXJyYXlfbWFwX2NoZWNrX2J0Zixcbmtlcm5lbC9icGYvYXJyYXltYXAuYzo4NzU6XHQubWFwX2xvb2t1cF9iYXRjaCA9IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCxcbmtlcm5lbC9icGYvYXJyYXltYXAuYzo4NzY6XHQubWFwX3VwZGF0ZV9iYXRjaCA9IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy04NzctXHQubWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzID0gbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzLFxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYz04ODU9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHBlcmNwdV9hcnJheV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYy04OTktXHQubWFwX2NoZWNrX2J0ZiA9IGFycmF5X21hcF9jaGVja19idGYsXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6OTAwOlx0Lm1hcF9sb29rdXBfYmF0Y2ggPSBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2gsXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6OTAxOlx0Lm1hcF91cGRhdGVfYmF0Y2ggPSBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2gsXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtOTAyLVx0Lm1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyA9IG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyxcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9MTUwND1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYXJyYXlfb2ZfbWFwc19tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYy0xNTE0LVx0Lm1hcF9nZW5fbG9va3VwID0gYXJyYXlfb2ZfbWFwX2dlbl9sb29rdXAsXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6MTUxNTpcdC5tYXBfbG9va3VwX2JhdGNoID0gZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoLFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjE1MTY6XHQubWFwX3VwZGF0ZV9iYXRjaCA9IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0xNTE3LVx0Lm1hcF9jaGVja19idGYgPSBtYXBfY2hlY2tfbm9fYnRmLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxLVx0Lm1hcF91cGRhdGVfYmF0Y2ggPVx0XHRcdFxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMjpcdGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCxcdFx0XFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzLVx0Lm1hcF9kZWxldGVfYmF0Y2ggPVx0XHRcdFxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNDpcdGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzUtXG4tLVxua2VybmVsL2JwZi9scG1fdHJpZS5jPTc3NT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgdHJpZV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvbHBtX3RyaWUuYy03ODItXHQubWFwX2RlbGV0ZV9lbGVtID0gdHJpZV9kZWxldGVfZWxlbSxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYzo3ODM6XHQubWFwX2xvb2t1cF9iYXRjaCA9IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYzo3ODQ6XHQubWFwX3VwZGF0ZV9iYXRjaCA9IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYzo3ODU6XHQubWFwX2RlbGV0ZV9iYXRjaCA9IGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaCxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYy03ODYtXHQubWFwX2NoZWNrX2J0ZiA9IHRyaWVfY2hlY2tfYnRmLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTE5NTM9c3RhdGljIGludCBtYXBfZ2V0X25leHRfa2V5KHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTIwMDgtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyMDA5OmludCBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTIwMTAtXHRcdFx0ICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMDY0LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MjA2NTppbnQgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTIwNjYtXHRcdFx0ICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMTIyLVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MjEyMzppbnQgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMTI0LVx0XHRcdFx0ICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY0NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBCUEYgQmF0Y2ggT3BlcmF0aW9uIEVudHJ5cG9pbnQqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZXNlIEJQRiBiYXRjaCBvcGVyYXRpb25zLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB0cmFjZSB0aGUgcGF0aCBmcm9tIGEgc3lzdGVtIGNhbGwgYWxsIHRoZSB3YXkgZG93biBpbnRvIHRoZSBrZXJuZWwgY29kZSB0aGF0IGhhbmRsZXMgdGhlc2UgYmF0Y2hlcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgYGJwZl9tYXBfZG9fYmF0Y2hgIOKAkyB0aGF0IG5hbWUganVzdCBzY3JlYW1zICYjMzQ7YmF0Y2ggb3BlcmF0aW9uJiMzNDsg4oCTIGFuZCB3aGVyZSYjMzk7cyB0aGUgbW9zdCBsaWtlbHkgcGxhY2U/IFRoZSB1c3VhbCBzdXNwZWN0OiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGUgc3lzY2FsbCBtZWNoYW5pc20gZnVubmVscyBpbnRvIHRoZSBoZWFydCBvZiB0aGlzIGZ1bmN0aW9uYWxpdHkuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBoaWdoLWxldmVsIGZsb3cgYW5kIHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBsb3dlci1sZXZlbCBkZXRhaWxzIG9mIHRoZSBiYXRjaCBwcm9jZXNzaW5nIGl0c2VsZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX21hcF9kb19iYXRjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jPTU2NjQ9c3RhdGljIGludCBicGZfdGFza19mZF9xdWVyeShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NzQ2LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTc0NzpzdGF0aWMgaW50IGJwZl9tYXBfZG9fYmF0Y2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NzQ4LVx0XHRcdCAgICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYzMDM9c3RhdGljIGludCBfX3N5c19icGYoZW51bSBicGZfY21kIGNtZCwgYnBmcHRyX3QgdWF0dHIsIHVuc2lnbmVkIGludCBzaXplLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0MjgtXHRjYXNlIEJQRl9NQVBfTE9PS1VQX0JBVENIOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjQyOTpcdFx0ZXJyID0gYnBmX21hcF9kb19iYXRjaChcdTAwMjZhdHRyLCB1YXR0ci51c2VyLCBCUEZfTUFQX0xPT0tVUF9CQVRDSCk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDMwLVx0XHRicmVhaztcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0MzEtXHRjYXNlIEJQRl9NQVBfTE9PS1VQX0FORF9ERUxFVEVfQkFUQ0g6XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2NDMyOlx0XHRlcnIgPSBicGZfbWFwX2RvX2JhdGNoKFx1MDAyNmF0dHIsIHVhdHRyLnVzZXIsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDMzLVx0XHRcdFx0ICAgICAgIEJQRl9NQVBfTE9PS1VQX0FORF9ERUxFVEVfQkFUQ0gpO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0MzUtXHRjYXNlIEJQRl9NQVBfVVBEQVRFX0JBVENIOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjQzNjpcdFx0ZXJyID0gYnBmX21hcF9kb19iYXRjaChcdTAwMjZhdHRyLCB1YXR0ci51c2VyLCBCUEZfTUFQX1VQREFURV9CQVRDSCk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDM3LVx0XHRicmVhaztcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0MzgtXHRjYXNlIEJQRl9NQVBfREVMRVRFX0JBVENIOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjQzOTpcdFx0ZXJyID0gYnBmX21hcF9kb19iYXRjaChcdTAwMjZhdHRyLCB1YXR0ci51c2VyLCBCUEZfTUFQX0RFTEVURV9CQVRDSCk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDQwLVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0MjAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmllZDogQlBGIEludGVnZXIgT3ZlcmZsb3cqKgoKT2theSwgdGhpcyBpcyBwcmltZSBmdXp6aW5nIG1hdGVyaWFsLiBBIGNyaXRpY2FsIGludGVnZXIgb3ZlcmZsb3cgd2l0aGluIHRoZSBCUEYgY29yZSBzdWJzeXN0ZW0g4oCTIGV4Y2VsbGVudCEgVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIGBicGYoMilgIHN5c2NhbGxzIHdpdGggdGhvc2UgYEJQRl9NQVBfKl9CQVRDSGAgY29tbWFuZHMgbWFrZXMgaXQgZXZlbiBtb3JlIGFwcGVhbGluZy4gRWFzeSBhY2Nlc3MgaXMga2V5IGZvciBmdXp6aW5nLgoKTXkgaW5pdGlhbCBzY2FuIGZvY3VzZXMgb24gdGhlIGZpeGVzOiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGludGVnZXIgb3ZlcmZsb3dzIGluIGFyaXRobWV0aWMgb2Zmc2V0IGNhbGN1bGF0aW9ucyDigJMgc3BlY2lmaWNhbGx5LCBgdG90YWwgKiBrZXlfc2l6ZWAgdHJhbnNmb3JtYXRpb25zIHRvIGAoc2l6ZV90KXRvdGFsICoga2V5X3NpemVgIHdpdGhpbiBmdW5jdGlvbnMgbGlrZSBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAsIGBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoYCwgYW5kIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgLiBUaGlzIGlzIHdoZXJlIHRoZSB2dWxuZXJhYmlsaXRpZXMgd2lsbCBsaWtlbHkgYmUuCgpOb3csIGJlZm9yZSBJIGRpZyBpbnRvIGNyYWZ0aW5nIHRoZSBmdXp6ZXIsIEkgbmVlZCB0byB2ZXJpZnkgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucy4gTGV0IG1lIGNoZWNrIGBpbml0L0tjb25maWdgIG9yLCBtb3JlIGxpa2VseSwgYGtlcm5lbC9icGYvS2NvbmZpZ2AgdG8gZW5zdXJlIHRoZSBjb2RlIGlzIGFjdHVhbGx5IGVuYWJsZWQgYW5kIHRoYXQgYW55IGRlcGVuZGVuY2llcyBhcmUgc2F0aXNmaWVkLiBHb3R0YSBtYWtlIHN1cmUgSSYjMzk7bSB0YXJnZXRpbmcgdGhlIHJpZ2h0IGNvZGUgcGF0aCBhbmQgdW5kZXJzdGFuZCB0aGUgY29tcGlsYXRpb24gZW52aXJvbm1lbnQgYmVmb3JlIEkgd2FzdGUgYW55IHRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjg3NQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gSHVudGluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYEJQRl9TWVNDQUxMYCB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJiMzOTttIHRoaW5raW5nLCBhIHF1aWNrIGBncmVwYCB0aHJvdWdoIHRoZSBrZXJuZWwgc291cmNlIGlzIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gc3RhcnQsIGxpa2VseSB0YXJnZXRpbmcgdGhlIGBjb25maWdgIGZpbGVzIGRpcmVjdGx5LiBJIHdhbnQgdG8gc2VlIHdoZXJlIHRoaXMgb3B0aW9uIGlzIGRlZmluZWQsIGhvdyBpdCYjMzk7cyB1c2VkLCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gVGhpcyBzaG91bGQgcXVpY2tseSByZXZlYWwgaWYgaXQmIzM5O3MgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIGJ1aWx0IGFzIGEgbW9kdWxlIGluIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zIG9yIG90aGVyIGtlcm5lbCBzdWItYXJjaGl0ZWN0dXJlcyBJIHdhbnQgdG8gZXhhbWluZS4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0byBjaGVjayB0aGUgYEtjb25maWdgIGZpbGVzLCBidXQgYWxzbyBsb29rIGZvciByZWZlcmVuY2VzIGluIGJ1aWxkIGZpbGVzIGFuZCBoZWFkZXJzIHRvIGFzc2VzcyB1c2FnZSBhbmQgaW5jbHVzaW9uIHBvaW50cy4gVGhpcyBzaG91bGQgdGVsbCBtZSBxdWlja2x5IHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBkZWVwZXIgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMjYtXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzE4OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byB0aGUgQlBGIEtlcm5lbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgQlBGIHN1YnN5c3RlbSBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLiBJJiMzOTttIGdvaW5nIHRvIG5hdmlnYXRlIGRpcmVjdGx5IHRvIGBrZXJuZWwvYnBmL0tjb25maWdgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBzZWN0aW9uIGFyb3VuZCBsaW5lIDI3LiBIb3BlZnVsbHksIHRoaXMgd2lsbCBwcm92aWRlIHRoZSBpbml0aWFsIGNvbnRleHQgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuIFRoaXMgS2NvbmZpZyBmaWxlIHdpbGwgYmUgdGhlIHBlcmZlY3QgcGxhY2UgdG8gc3RhcnQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDIwOlx0IyBVc2VkIGJ5IGFyY2hzIHRvIHRlbGwgdGhhdCB0aGV5IHdhbnQgdGhlIEJQRiBKSVQgY29tcGlsZXIgZW5hYmxlZCBieVxuICAyMTpcdCMgZGVmYXVsdCBmb3Iga2VybmVscyB0aGF0IHdlcmUgY29tcGlsZWQgd2l0aCBCUEYgSklUIHN1cHBvcnQuXG4gIDIyOlx0Y29uZmlnIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVRcbiAgMjM6XHRcdGJvb2xcbiAgMjQ6XHRcbiAgMjU6XHRtZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbiAgMjY6XHRcbiAgMjc6XHRjb25maWcgQlBGX1NZU0NBTExcbiAgMjg6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4gIDI5Olx0XHRzZWxlY3QgQlBGXG4gIDMwOlx0XHRzZWxlY3QgSVJRX1dPUktcbiAgMzE6XHRcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxuICAzMjpcdFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxuICAzMzpcdFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcbiAgMzQ6XHRcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXG4gIDM1Olx0XHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcbiAgMzY6XHRcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXG4gIDM3Olx0XHRkZWZhdWx0IG5cbiAgMzg6XHRcdGhlbHBcbiAgMzk6XHRcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xuICA0MDpcdFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cbiAgNDE6XHRcbiAgNDI6XHRjb25maWcgQlBGX0pJVFxuICA0MzpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclwmIzM0O1xuICA0NDpcdFx0ZGVwZW5kcyBvbiBCUEZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2OTkKCQkJCQkJCW91dHB1dDogMTc0CgkJCQkJCQl0aG91Z2h0czogNDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzIFN5bWJvbCBhbmQgSW5zdHJ1Y3Rpb24gUmV2aWV3KioKCk9rYXksIGxldCYjMzk7cyBzZWUsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBmb2N1cyBzeW1ib2xzIHRvIHVzZSBoZXJlLiBJJiMzOTt2ZSBpZGVudGlmaWVkIHNldmVyYWwgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkOiBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAgKHN0YXRpYyB3aXRoaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYCksIGFuZCB0aGVuIGBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoYCwgYW5kIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgLCBhbGwgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYC4gQW5kIGEgYnVuY2ggb2YgY2FsbGVycyB0byB0aGUgZmlyc3Qgb25lOiBgaHRhYl9tYXBfbG9va3VwX2JhdGNoYCwgYGh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGh0YWJfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2hgLCBhbmQgb3RoZXJzLgoKTm93LCBhIGNyaXRpY2FsIHN0ZXA6IEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgYGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaGAsIGBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoYCwgYGh0YWJfbWFwX2xvb2t1cF9iYXRjaGAsIGFuZCBgaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgIGFyZSB0aGUgcmlnaHQgb25lcyB0byBmb2N1cyBvbi4gWWVwLCB0aGVzZSBzZWVtIHBlcmZlY3QuIFRoZXkmIzM5O3JlIHNwZWNpZmljIHRvIEJQRiBiYXRjaCBvcGVyYXRpb25zIGFuZCBkaXJlY3RseSBjYWxsIGludG8gdGhlIGNvZGUgdGhhdCYjMzk7cyBiZWVuIGNoYW5nZWQuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCBldmVyeXRoaW5nIHN0cmFpZ2h0IGluIHRoZSBpbnN0cnVjdGlvbnMuIGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byB0cnVlLiBUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIG5vbi11YmlxdWl0b3VzLCBhbmQgdGhlIGtlcm5lbCBmdW5jdGlvbnMgZGlyZWN0bHkgaGl0IHRoZSBtb2RpZmllZCBsb2dpYywgYXMgd2UganVzdCBlc3RhYmxpc2hlZC4gU3BlY2lmaWNhbGx5OiBgZ2VuZXJpY19tYXBfZGVsZXRlX2JhdGNoYCwgYGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaGAsIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgLCBgaHRhYl9tYXBfbG9va3VwX2JhdGNoYCwgYW5kIGBodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAuIFRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGNvcnJlY3RseSBzcGVjaWZpZWQgYXMgYEJQRl9TWVNDQUxMYCAod2l0aG91dCB0aGUgYENPTkZJR19gIHByZWZpeCkuIFRoZSByZWFzb25pbmcgaXMgYWxzbyBjbGVhciBhbmQgY29uY2lzZS4KCkFsbCBzZWVtcyB0byBiZSBpbiBvcmRlci4gUmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtnZW5lcmljX21hcF9kZWxldGVfYmF0Y2gmIzM0OywKICAgICYjMzQ7Z2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoJiMzNDssCiAgICAmIzM0O2dlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCYjMzQ7LAogICAgJiMzNDtodGFiX21hcF9sb29rdXBfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYXJpdGhtZXRpYyBvZmZzZXQgY29tcHV0YXRpb25zIGR1cmluZyB1c2VyIG1lbW9yeSBjb3B5aW5nIGluIEJQRiBiYXRjaCBtYXAgb3BlcmF0aW9ucyAoZ2VuZXJpYyBtYXAgZGVsZXRlL3VwZGF0ZS9sb29rdXAgYmF0Y2ggaGFuZGxlcnMgYW5kIGhhc2ggdGFibGUgYmF0Y2ggbG9va3VwLWFuZC1kZWxldGUpIHRvIGNhc3QgaW5kaWNlcy9tdWx0aXBsaWVycyB0byBzaXplX3QgdG8gcHJldmVudCBwb3RlbnRpYWwgaW50ZWdlciB0cnVuY2F0aW9uIG9yIG92ZXJmbG93LiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB3aXRoIEJQRl9NQVBfKl9CQVRDSCBjb21tYW5kcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtnZW5lcmljX21hcF9kZWxldGVfYmF0Y2gmIzM0OywKICAgICYjMzQ7Z2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoJiMzNDssCiAgICAmIzM0O2dlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCYjMzQ7LAogICAgJiMzNDtodGFiX21hcF9sb29rdXBfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYXJpdGhtZXRpYyBvZmZzZXQgY29tcHV0YXRpb25zIGR1cmluZyB1c2VyIG1lbW9yeSBjb3B5aW5nIGluIEJQRiBiYXRjaCBtYXAgb3BlcmF0aW9ucyAoZ2VuZXJpYyBtYXAgZGVsZXRlL3VwZGF0ZS9sb29rdXAgYmF0Y2ggaGFuZGxlcnMgYW5kIGhhc2ggdGFibGUgYmF0Y2ggbG9va3VwLWFuZC1kZWxldGUpIHRvIGNhc3QgaW5kaWNlcy9tdWx0aXBsaWVycyB0byBzaXplX3QgdG8gcHJldmVudCBwb3RlbnRpYWwgaW50ZWdlciB0cnVuY2F0aW9uIG9yIG92ZXJmbG93LiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB3aXRoIEJQRl9NQVBfKl9CQVRDSCBjb21tYW5kcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoxMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZXhwbGljaXQgYChzaXplX3QpYCBjYXN0cyB0byB1c2VyIHBvaW50ZXIgb2Zmc2V0IGFuZCBsZW5ndGggY2FsY3VsYXRpb25zIGluIEJQRiBiYXRjaCBvcGVyYXRpb25zIChzdWNoIGFzIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaGAsIGBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hgLCBhbmQgYGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaGApIHRvIHByZXZlbnQgMzItYml0IGludGVnZXIgbXVsdGlwbGljYXRpb24gb3ZlcmZsb3dzIG9uIDY0LWJpdCBzeXN0ZW1zLlxuXG5UaGVzZSBjaGFuZ2VzIHN0cmljdGx5IGZpeCBpbnRlZ2VyIGFyaXRobWV0aWMgYW5kIHVzZXIgc3BhY2UgYWRkcmVzcyBjYWxjdWxhdGlvbnMuIFRoZXkgZG8gbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMvcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCBkYXRhIGxlYWtzIHRvIHVzZXIgc3BhY2UuIEFueSBtZW1vcnkgc2FmZXR5IG9yIGFyaXRobWV0aWMgaXNzdWVzIHJlbGF0ZWQgdG8gdGhlc2UgY2FsY3VsYXRpb25zIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL1VCU0FOIGJ1aWxkcy4gSGVuY2UsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNlMGQ3ODUwNjcxNjBhMjczOTE1MzU1YmFkNjRhZDdiMTJhNTNhNmQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDIwOjA5OjE3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuYwppbmRleCBkNDBjYjVkZDQ0NmNhLi5iZDM3MDRlZDkzMzNlIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2hhc2h0YWIuYwpAQCAtMTk3NywxMCAmIzQzOzE5NzcsMTAgQEAgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLAogCiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJYnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKTsKLQlpZiAoYnVja2V0X2NudCAmYW1wOyZhbXA7IChjb3B5X3RvX3VzZXIodWtleXMgJiM0MzsgdG90YWwgKiBrZXlfc2l6ZSwga2V5cywKLQkgICAga2V5X3NpemUgKiBidWNrZXRfY250KSB8fAotCSAgICBjb3B5X3RvX3VzZXIodXZhbHVlcyAmIzQzOyB0b3RhbCAqIHZhbHVlX3NpemUsIHZhbHVlcywKLQkgICAgdmFsdWVfc2l6ZSAqIGJ1Y2tldF9jbnQpKSkgewomIzQzOwlpZiAoYnVja2V0X2NudCAmYW1wOyZhbXA7IChjb3B5X3RvX3VzZXIodWtleXMgJiM0MzsgKHNpemVfdCl0b3RhbCAqIGtleV9zaXplLCBrZXlzLAomIzQzOwkgICAgKHNpemVfdClrZXlfc2l6ZSAqIGJ1Y2tldF9jbnQpIHx8CiYjNDM7CSAgICBjb3B5X3RvX3VzZXIodXZhbHVlcyAmIzQzOyAoc2l6ZV90KXRvdGFsICogdmFsdWVfc2l6ZSwgdmFsdWVzLAomIzQzOwkgICAgKHNpemVfdCl2YWx1ZV9zaXplICogYnVja2V0X2NudCkpKSB7CiAJCXJldCA9IC1FRkFVTFQ7CiAJCWdvdG8gYWZ0ZXJfbG9vcDsKIAl9CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jCmluZGV4IDY4NzRiYTE0MjRhZjAuLjczMTM4OGFlMDBhZDEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jCkBAIC0yMDM2LDcgJiM0MzsyMDM2LDcgQEAgaW50IGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLAogCiAJZm9yIChjcCA9IDA7IGNwICZsdDsgbWF4X2NvdW50OyBjcCYjNDM7JiM0MzspIHsKIAkJZXJyID0gLUVGQVVMVDsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyAmIzQzOyBjcCAqIG1hcC0mZ3Q7a2V5X3NpemUsCiYjNDM7CQlpZiAoY29weV9mcm9tX3VzZXIoa2V5LCBrZXlzICYjNDM7IChzaXplX3QpY3AgKiBtYXAtJmd0O2tleV9zaXplLAogCQkJCSAgIG1hcC0mZ3Q7a2V5X3NpemUpKQogCQkJYnJlYWs7CiAKQEAgLTIwOTgsOSAmIzQzOzIwOTgsOSBAQCBpbnQgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSwKIAogCWZvciAoY3AgPSAwOyBjcCAmbHQ7IG1heF9jb3VudDsgY3AmIzQzOyYjNDM7KSB7CiAJCWVyciA9IC1FRkFVTFQ7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcihrZXksIGtleXMgJiM0MzsgY3AgKiBtYXAtJmd0O2tleV9zaXplLAomIzQzOwkJaWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyAmIzQzOyAoc2l6ZV90KWNwICogbWFwLSZndDtrZXlfc2l6ZSwKIAkJICAgIG1hcC0mZ3Q7a2V5X3NpemUpIHx8Ci0JCSAgICBjb3B5X2Zyb21fdXNlcih2YWx1ZSwgdmFsdWVzICYjNDM7IGNwICogdmFsdWVfc2l6ZSwgdmFsdWVfc2l6ZSkpCiYjNDM7CQkgICAgY29weV9mcm9tX3VzZXIodmFsdWUsIHZhbHVlcyAmIzQzOyAoc2l6ZV90KWNwICogdmFsdWVfc2l6ZSwgdmFsdWVfc2l6ZSkpCiAJCQlicmVhazsKIAogCQllcnIgPSBicGZfbWFwX3VwZGF0ZV92YWx1ZShtYXAsIG1hcF9maWxlLCBrZXksIHZhbHVlLApAQCAtMjE3OSwxMiAmIzQzOzIxNzksMTIgQEAgaW50IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLAogCQlpZiAoZXJyKQogCQkJZ290byBmcmVlX2J1ZjsKIAotCQlpZiAoY29weV90b191c2VyKGtleXMgJiM0MzsgY3AgKiBtYXAtJmd0O2tleV9zaXplLCBrZXksCiYjNDM7CQlpZiAoY29weV90b191c2VyKGtleXMgJiM0MzsgKHNpemVfdCljcCAqIG1hcC0mZ3Q7a2V5X3NpemUsIGtleSwKIAkJCQkgbWFwLSZndDtrZXlfc2l6ZSkpIHsKIAkJCWVyciA9IC1FRkFVTFQ7CiAJCQlnb3RvIGZyZWVfYnVmOwogCQl9Ci0JCWlmIChjb3B5X3RvX3VzZXIodmFsdWVzICYjNDM7IGNwICogdmFsdWVfc2l6ZSwgdmFsdWUsIHZhbHVlX3NpemUpKSB7CiYjNDM7CQlpZiAoY29weV90b191c2VyKHZhbHVlcyAmIzQzOyAoc2l6ZV90KWNwICogdmFsdWVfc2l6ZSwgdmFsdWUsIHZhbHVlX3NpemUpKSB7CiAJCQllcnIgPSAtRUZBVUxUOwogCQkJZ290byBmcmVlX2J1ZjsKIAkJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg1MwoJCQkJCQkJb3V0cHV0OiA3NQoJCQkJCQkJdGhvdWdodHM6IDQzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIEV2YWx1YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIG5lY2Vzc2l0YXRlcyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIE15IGZpcnN0IHN0ZXAgaXMgdG8gcmV2aXNpdCB0aGUgZXN0YWJsaXNoZWQgcmlzayBhbmQgc2FmZXR5IHBvbGljaWVzIHRvIGdldCBhIGNsZWFyIHBlcnNwZWN0aXZlLgoKRnJvbSBhIHNhZmV0eSBldmFsdWF0aW9uIHN0YW5kcG9pbnQsIHRoZSB0YXNrIGNsZWFybHkgZmFsbHMgdW5kZXIgdGhlIHB1cnZpZXcgb2YgY29kZSByZXZpZXcgYW5kIHRyaWFnZSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gc2FuaXRpemVycyDigJMgS0FTQU4gdmVyc3VzIEtNU0FOIGluIHRoaXMgY2FzZS4gSXQmIzM5O3MgYSBtYXR0ZXIgb2YgZGVmZW5zaXZlIHNlY3VyaXR5IGVuZ2luZWVyaW5nLCBxdWFsaXR5IGFzc3VyYW5jZSwgYW5kIGluLWRlcHRoIGNvZGUgYW5hbHlzaXMuIEJhc2VkIG9uIG15IGluaXRpYWwgdW5kZXJzdGFuZGluZywgdGhlIGNsYXNzaWZpY2F0aW9uIGhlcmUgaXMgJiMzNDtCZW5pZ24mIzM0OyBvciAmIzM0O05vbmUmIzM0OyBzZXZlcml0eS4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgcGF0Y2ggaXRzZWxmLiBJdCBzZWVtcyB0aGUgY29yZSBjaGFuZ2UgaW52b2x2ZXMgYWRkaW5nIGAoc2l6ZV90KWAgY2FzdHMgdG8gcG9pbnRlciBvZmZzZXQgYW5kIHNpemUgY2FsY3VsYXRpb25zIHdpdGhpbiBCUEYgYmF0Y2ggb3BlcmF0aW9ucy4gU3BlY2lmaWNhbGx5LCB0aGVzZSBjYXN0cyBhcmUgcHJlc2VudCBpbiBga2VybmVsL2JwZi9oYXNodGFiLmNgLCBpbiB0aGUgYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgIGZ1bmN0aW9uLCBhbmQgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCB3aXRoaW4gdGhlIGBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoYCwgYW5kIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgIGZ1bmN0aW9ucy4gVGhlIGNhc3RzIGFyZSBiZWluZyBhZGRlZCB0byBlbnN1cmUgdGhhdCBtdWx0aXBsaWNhdGlvbnMgb2YgaW50ZWdlcnMgdGhhdCBjb3VsZCBvdmVyZmxvdyB3aGVuIGNhbGN1bGF0aW5nIHRoZSBsb2NhdGlvbiB0byByZWFkIGZyb20vd3JpdGUgdG8gaW4gdXNlcnNwYWNlIG1lbW9yeSB3aWxsIGJlIGNhc3QgdG8gYSBzaXplX3QsIHdoaWNoIGlzIChwcm9iYWJseSkgbGFyZ2VyLgoKSW4gbW9yZSBkZXRhaWwsIHRoZSBmdW5jdGlvbnMgYWZmZWN0ZWQgaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYCBhcmUgdXNpbmcgaW50ZWdlciBhcml0aG1ldGljIHRoYXQgY291bGQgaGF2ZSBwb3RlbnRpYWxseSBvdmVyZmxvd2VkLCBhcyB3ZXJlIHRoZSBmdW5jdGlvbnMgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYC4KClRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGltcGxpY2F0aW9ucywgSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IGluIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgYW5kIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIEkmIzM5O2xsIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgZm9yIHRoYXQsIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgdHlwZXMgaW52b2x2ZWQsIHRoZSByYW5nZXMgb2YgdmFsdWVzIHRoZXkgbWlnaHQgaG9sZCwgYW5kIGhvdyB0aGVzZSBjYWxjdWxhdGlvbnMgYXJlIHVzZWQuIE9uY2UgSSBoYXZlIHRoYXQgY29udGV4dCwgSSBjYW4gbWFrZSBhIG11Y2ggbW9yZSBpbmZvcm1lZCBkZWNpc2lvbiBhYm91dCB3aGV0aGVyIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgYWN0dWFsbHkgbmVlZGVkIG9yIGlmIHRoaXMgaXMsIGFzIGl0IGFwcGVhcnMsIGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgc2FmZXR5IGZpeC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hhc2h0YWIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTk3MDpcdFx0LyogSWYgd2UgYXJlIG5vdCBjb3B5aW5nIGRhdGEsIHdlIGNhbiBnbyB0byBuZXh0IGJ1Y2tldCBhbmQgYXZvaWRcbjE5NzE6XHRcdCAqIHVubG9ja2luZyB0aGUgcmN1LlxuMTk3MjpcdFx0ICovXG4xOTczOlx0XHRpZiAoIWJ1Y2tldF9jbnQgXHUwMDI2XHUwMDI2IChiYXRjaCAmIzQzOyAxIFx1MDAzYyBodGFiLVx1MDAzZW5fYnVja2V0cykpIHtcbjE5NzQ6XHRcdFx0YmF0Y2gmIzQzOyYjNDM7O1xuMTk3NTpcdFx0XHRnb3RvIGFnYWluX25vY29weTtcbjE5NzY6XHRcdH1cbjE5Nzc6XHRcbjE5Nzg6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMTk3OTpcdFx0YnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcbjE5ODA6XHRcdGlmIChidWNrZXRfY250IFx1MDAyNlx1MDAyNiAoY29weV90b191c2VyKHVrZXlzICYjNDM7IChzaXplX3QpdG90YWwgKiBrZXlfc2l6ZSwga2V5cyxcbjE5ODE6XHRcdCAgICAoc2l6ZV90KWtleV9zaXplICogYnVja2V0X2NudCkgfHxcbjE5ODI6XHRcdCAgICBjb3B5X3RvX3VzZXIodXZhbHVlcyAmIzQzOyAoc2l6ZV90KXRvdGFsICogdmFsdWVfc2l6ZSwgdmFsdWVzLFxuMTk4MzpcdFx0ICAgIChzaXplX3QpdmFsdWVfc2l6ZSAqIGJ1Y2tldF9jbnQpKSkge1xuMTk4NDpcdFx0XHRyZXQgPSAtRUZBVUxUO1xuMTk4NTpcdFx0XHRnb3RvIGFmdGVyX2xvb3A7XG4xOTg2Olx0XHR9XG4xOTg3Olx0XG4xOTg4Olx0XHR0b3RhbCAmIzQzOz0gYnVja2V0X2NudDtcbjE5ODk6XHRcdGJhdGNoJiM0MzsmIzQzOztcbjE5OTA6XHRcdGlmIChiYXRjaCBcdTAwM2U9IGh0YWItXHUwMDNlbl9idWNrZXRzKSB7XG4xOTkxOlx0XHRcdHJldCA9IC1FTk9FTlQ7XG4xOTkyOlx0XHRcdGdvdG8gYWZ0ZXJfbG9vcDtcbjE5OTM6XHRcdH1cbjE5OTQ6XHRcdGdvdG8gYWdhaW47XG4xOTk1Olx0XG4xOTk2Olx0YWZ0ZXJfbG9vcDpcbjE5OTc6XHRcdGlmIChyZXQgPT0gLUVGQVVMVClcbjE5OTg6XHRcdFx0Z290byBvdXQ7XG4xOTk5Olx0XG4yMDAwOlx0XHQvKiBjb3B5ICMgb2YgZW50cmllcyBhbmQgbmV4dCBiYXRjaCAqL1xuMjAwMTpcdFx0dWJhdGNoID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXHUwMDNlYmF0Y2gub3V0X2JhdGNoKTtcbjIwMDI6XHRcdGlmIChjb3B5X3RvX3VzZXIodWJhdGNoLCBcdTAwMjZiYXRjaCwgc2l6ZW9mKGJhdGNoKSkgfHxcbjIwMDM6XHRcdCAgICBwdXRfdXNlcih0b3RhbCwgXHUwMDI2dWF0dHItXHUwMDNlYmF0Y2guY291bnQpKVxuMjAwNDpcdFx0XHRyZXQgPSAtRUZBVUxUO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMDMwOlx0XHRpZiAocHV0X3VzZXIoMCwgXHUwMDI2dWF0dHItXHUwMDNlYmF0Y2guY291bnQpKVxuMjAzMTpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjIwMzI6XHRcbjIwMzM6XHRcdGtleSA9IGt2bWFsbG9jKG1hcC1cdTAwM2VrZXlfc2l6ZSwgR0ZQX1VTRVIgfCBfX0dGUF9OT1dBUk4pO1xuMjAzNDpcdFx0aWYgKCFrZXkpXG4yMDM1Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMjAzNjpcdFxuMjAzNzpcdFx0Zm9yIChjcCA9IDA7IGNwIFx1MDAzYyBtYXhfY291bnQ7IGNwJiM0MzsmIzQzOykge1xuMjAzODpcdFx0XHRlcnIgPSAtRUZBVUxUO1xuMjAzOTpcdFx0XHRpZiAoY29weV9mcm9tX3VzZXIoa2V5LCBrZXlzICYjNDM7IChzaXplX3QpY3AgKiBtYXAtXHUwMDNla2V5X3NpemUsXG4yMDQwOlx0XHRcdFx0XHQgICBtYXAtXHUwMDNla2V5X3NpemUpKVxuMjA0MTpcdFx0XHRcdGJyZWFrO1xuMjA0MjpcdFxuMjA0MzpcdFx0XHRpZiAoYnBmX21hcF9pc19vZmZsb2FkZWQobWFwKSkge1xuMjA0NDpcdFx0XHRcdGVyciA9IGJwZl9tYXBfb2ZmbG9hZF9kZWxldGVfZWxlbShtYXAsIGtleSk7XG4yMDQ1Olx0XHRcdFx0YnJlYWs7XG4yMDQ2Olx0XHRcdH1cbjIwNDc6XHRcbjIwNDg6XHRcdFx0YnBmX2Rpc2FibGVfaW5zdHJ1bWVudGF0aW9uKCk7XG4yMDQ5Olx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbjIwNTA6XHRcdFx0ZXJyID0gbWFwLVx1MDAzZW9wcy1cdTAwM2VtYXBfZGVsZXRlX2VsZW0obWFwLCBrZXkpO1xuMjA1MTpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjIwNTI6XHRcdFx0YnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcbjIwNTM6XHRcdFx0aWYgKGVycilcbjIwNTQ6XHRcdFx0XHRicmVhaztcbjIwNTU6XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4yMDU2Olx0XHR9XG4yMDU3Olx0XHRpZiAoY29weV90b191c2VyKFx1MDAyNnVhdHRyLVx1MDAzZWJhdGNoLmNvdW50LCBcdTAwMjZjcCwgc2l6ZW9mKGNwKSkpXG4yMDU4Olx0XHRcdGVyciA9IC1FRkFVTFQ7XG4yMDU5Olx0XG4yMDYwOlx0XHRrdmZyZWUoa2V5KTtcbjIwNjE6XHRcbjIwNjI6XHRcdHJldHVybiBlcnI7XG4yMDYzOlx0fVxuMjA2NDpcdFxuMjA2NTpcdGludCBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGZpbGUgKm1hcF9maWxlLFxuMjA2NjpcdFx0XHRcdCAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4yMDY3Olx0XHRcdFx0ICAgICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKVxuMjA2ODpcdHtcbjIwNjk6XHRcdHZvaWQgX191c2VyICp2YWx1ZXMgPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cdTAwM2ViYXRjaC52YWx1ZXMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTYzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IGFzIGEgc3VtbWFyeSwgd3JpdHRlbiBhcyBpZiBpdCYjMzk7cyBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIEJQIEYgSXNzdWUqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyB3ZSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgY29kZSBhIGJpdCBtb3JlIG9uIHRoaXMgb25lLiBJJiMzOTt2ZSBnb3QgYSBodW5jaCBhYm91dCB0aGUgQlBGIHN5c3RlbSBjYWxsIGltcGxlbWVudGF0aW9uLCBhbmQgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgc3BlY2lmaWMuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGNsb3NlbHkgYXQgdGhlIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gbGluZXMgMjE3MCB0aHJvdWdoIDIyMDAuIFRoYXQgc2VjdGlvbiBsaWtlbHkgZGVhbHMgd2l0aCBbaW5zZXJ0IHlvdXIgZXhwZXJ0IGtub3dsZWRnZSBoZXJlLCBlLmcuLCBlcnJvciBoYW5kbGluZywgYSBzcGVjaWZpYyBpbnN0cnVjdGlvbiBzZXQsIHJlc291cmNlIGFsbG9jYXRpb24sIGV0Yy5dLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBbbWVudGlvbiB3aGF0IHlvdSYjMzk7cmUgc3BlY2lmaWNhbGx5IHNlYXJjaGluZyBmb3IsIGUuZy4sIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGJvdW5kYXJ5IGNvbmRpdGlvbnMsIHVuZXhwZWN0ZWQgcmV0dXJuIHZhbHVlcywgZXRjLl0gaW4gdGhhdCByZWdpb24uIExldCYjMzk7cyBzZWUgaWYgdGhpcyBhbGlnbnMgd2l0aCB0aGUgc3ltcHRvbXMgd2UmIzM5O3JlIG9ic2VydmluZy4gSXQgaXMgbGlrZWx5IHRoZSBhcmVhIG9mIGNvZGUgdGhhdCBJIGhhdmUgaGFkIGNvbmNlcm5zIGFib3V0IGdpdmVuIFtyZWFzb25dLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTcwOlx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMjE3MTpcdFx0XHRpZiAoZXJyKVxuMjE3MjpcdFx0XHRcdGJyZWFrO1xuMjE3MzpcdFx0XHRlcnIgPSBicGZfbWFwX2NvcHlfdmFsdWUobWFwLCBrZXksIHZhbHVlLFxuMjE3NDpcdFx0XHRcdFx0XHQgYXR0ci1cdTAwM2ViYXRjaC5lbGVtX2ZsYWdzKTtcbjIxNzU6XHRcbjIxNzY6XHRcdFx0aWYgKGVyciA9PSAtRU5PRU5UKVxuMjE3NzpcdFx0XHRcdGdvdG8gbmV4dF9rZXk7XG4yMTc4Olx0XG4yMTc5Olx0XHRcdGlmIChlcnIpXG4yMTgwOlx0XHRcdFx0Z290byBmcmVlX2J1ZjtcbjIxODE6XHRcbjIxODI6XHRcdFx0aWYgKGNvcHlfdG9fdXNlcihrZXlzICYjNDM7IChzaXplX3QpY3AgKiBtYXAtXHUwMDNla2V5X3NpemUsIGtleSxcbjIxODM6XHRcdFx0XHRcdCBtYXAtXHUwMDNla2V5X3NpemUpKSB7XG4yMTg0Olx0XHRcdFx0ZXJyID0gLUVGQVVMVDtcbjIxODU6XHRcdFx0XHRnb3RvIGZyZWVfYnVmO1xuMjE4NjpcdFx0XHR9XG4yMTg3Olx0XHRcdGlmIChjb3B5X3RvX3VzZXIodmFsdWVzICYjNDM7IChzaXplX3QpY3AgKiB2YWx1ZV9zaXplLCB2YWx1ZSwgdmFsdWVfc2l6ZSkpIHtcbjIxODg6XHRcdFx0XHRlcnIgPSAtRUZBVUxUO1xuMjE4OTpcdFx0XHRcdGdvdG8gZnJlZV9idWY7XG4yMTkwOlx0XHRcdH1cbjIxOTE6XHRcbjIxOTI6XHRcdFx0Y3AmIzQzOyYjNDM7O1xuMjE5MzpcdG5leHRfa2V5OlxuMjE5NDpcdFx0XHRpZiAoIXByZXZfa2V5KVxuMjE5NTpcdFx0XHRcdHByZXZfa2V5ID0gYnVmX3ByZXZrZXk7XG4yMTk2Olx0XG4yMTk3Olx0XHRcdHN3YXAocHJldl9rZXksIGtleSk7XG4yMTk4Olx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuMjE5OTpcdFx0fVxuMjIwMDpcdFxuMjIwMTpcdFx0aWYgKGVyciA9PSAtRUZBVUxUKVxuMjIwMjpcdFx0XHRnb3RvIGZyZWVfYnVmO1xuMjIwMzpcdFxuMjIwNDpcdFx0aWYgKChjb3B5X3RvX3VzZXIoXHUwMDI2dWF0dHItXHUwMDNlYmF0Y2guY291bnQsIFx1MDAyNmNwLCBzaXplb2YoY3ApKSB8fFxuMjIwNTpcdFx0XHQgICAgKGNwIFx1MDAyNlx1MDAyNiBjb3B5X3RvX3VzZXIodW9iYXRjaCwgcHJldl9rZXksIG1hcC1cdTAwM2VrZXlfc2l6ZSkpKSlcbjIyMDY6XHRcdFx0ZXJyID0gLUVGQVVMVDtcbjIyMDc6XHRcbjIyMDg6XHRmcmVlX2J1ZjpcbjIyMDk6XHRcdGt2ZnJlZShidWZfcHJldmtleSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3OTgKCQkJCQkJCW91dHB1dDogMTkwCgkJCQkJCQl0aG91Z2h0czogNzM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEludGVnZXIgT3ZlcmZsb3cgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgaXNzdWUgaXMgaW50ZWdlciBvdmVyZmxvdyBpbiA2NC1iaXQgYXJjaGl0ZWN0dXJlcyB3aGVuIGNhbGN1bGF0aW5nIG9mZnNldHMgYW5kIHNpemVzIGZvciBCUEYgbWFwIGJhdGNoIG9wZXJhdGlvbnMuIFNwZWNpZmljYWxseSwgdGhlIG11bHRpcGxpY2F0aW9uIG9mIGBjcCAqIG1hcC0mZ3Q7a2V5X3NpemVgIChhbmQgc2ltaWxhciBjYWxjdWxhdGlvbnMpIGlzIHBlcmZvcm1lZCB1c2luZyAzMi1iaXQgYXJpdGhtZXRpYywgcG90ZW50aWFsbHkgb3ZlcmZsb3dpbmcgYmVmb3JlIGJlaW5nIGNhc3QgdG8gYSBgc2l6ZV90YCBmb3IgcG9pbnRlciBhcml0aG1ldGljLiBUaGlzIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IHBvaW50ZXIgY2FsY3VsYXRpb25zIGFuZCwgY29uc2VxdWVudGx5LCBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHdyaXRlcyBpbiB1c2VyIHNwYWNlIOKAkyBhIGRlZmluaXRlIGNvbmNlcm4uCgpNeSBpbW1lZGlhdGUgcmVhY3Rpb24gaXMgdG8gZXZhbHVhdGUgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBMZXQmIzM5O3Mgc2VlOiBhcmUgd2UgcmVhZGluZyBmcm9tIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyIHNwYWNlLCBvciB1c2luZyB1bmluaXRpYWxpemVkIGRhdGEgaW4gY29udHJvbCBmbG93PyBJJiMzOTttIHByZXR0eSBjb25maWRlbnQgd2UmIzM5O3JlIG5vdC4gRXhhbWluaW5nIHRoZSBjb2RlLCBga2V5c2AgYW5kIGB2YWx1ZXNgIGFyZSBhbGxvY2F0ZWQgYW5kIHBvcHVsYXRlZCBkdXJpbmcgYnVja2V0IGl0ZXJhdGlvbiBpbiBgaGFzaHRhYi5jYC4gSW4gYHN5c2NhbGwuY2AsIHRoZSBga2V5YCBhbmQgYHZhbHVlYCBidWZmZXJzIGFyZSBoYW5kbGVkIGJ5IGBjb3B5X2Zyb21fdXNlcmAgb3IgdGhlIEJQRiBtYXAgb3BlcmF0aW9ucy4gVGhlIHBhdGNoIHNvbGVseSBhZGRyZXNzZXMgaW50ZWdlciBvdmVyZmxvdyBkdXJpbmcgcG9pbnRlciBjYWxjdWxhdGlvbiBhbmQgc2l6ZSBkZXRlcm1pbmF0aW9uIGZvciBCUEYgbWFwIGJhdGNoIG9wZXJhdGlvbnMuIEl0JiMzOTtzIGEgcHJldmVudGl2ZSBtZWFzdXJlOyBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb24sIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcsIGFuZCBubyBsZWFrYWdlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBNb3Jlb3Zlciwgc3RhbmRhcmQgc2FuaXRpemVycyBsaWtlIEtBU0FOIGFuZCBVQlNBTiwgYWxvbmcgd2l0aCBnZW5lcmFsIHRlc3RpbmcsIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGNhdGNoIG1lbW9yeSBhY2Nlc3MgYnVncyBhbmQgaW50ZWdlciBvdmVyZmxvd3MuIEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYW5kIGxlYWtzLgoKVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtsbCBkb3VibGUtY2hlY2s6IGFyZSBhbnkga2VybmVsIGJ1ZmZlcnMgb3IgdmFyaWFibGVzIHVuaW5pdGlhbGl6ZWQ/IE5vLCBub25lIG9mIHRoZXNlIGFyZS4gVGhleSBhcmUgaW5pdGlhbGl6ZWQvY29waWVkIGZyb20gdGhlIG1hcCBvciB1c2VyLgoKTGV0JiMzOTtzIHJ1biB0aHJvdWdoIGEgY2hlY2tsaXN0IHRvIGVuc3VyZSB3ZSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmc6IERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHdoZXJlIHBhZGRpbmcvZmllbGRzIG1pZ2h0IG5vdCBiZSBpbml0aWFsaXplZD8gTm8uIERvZXMgaXQgaW50cm9kdWNlIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm8uIERvZXMgaXQgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnM/IE5vLiBEb2VzIGl0IGFsdGVyIGJvdW5kcyBjaGVja3MgaW4gYSB3YXkgdGhhdCBhbGxvd3MgYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/IE5vLgoKR2l2ZW4gYWxsIG9mIHRoaXMsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBmYWxzZS4KCk5vdywgdG8gc29saWRpZnkgdGhlIHJlYXNvbmluZywgbGV0JiMzOTtzIGNvbnRyYXN0IEtBU0FOIGFuZCBLTVNBTi4gS0FTQU4vVUJTQU4gYXJlIGRpcmVjdGx5IHJlbGV2YW50IGhlcmUuIFRoZSBwYXRjaCBkZWFscyB3aXRoIGEgMzItYml0IGludGVnZXIgbXVsdGlwbGljYXRpb24gb3ZlcmZsb3cgd2hlbiBjYWxjdWxhdGluZyB1c2VyIHBvaW50ZXIgb2Zmc2V0cyBhbmQgY29weSBsZW5ndGhzIGZvciB0aGUgQlBGIGJhdGNoIG9wZXJhdGlvbnMuIEludGVnZXIgb3ZlcmZsb3csIGFuZCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgb3IgaW52YWxpZCBhZGRyZXNzIGNhbGN1bGF0aW9ucywgYXJlIHRoZSBkb21haW4gb2YgVUJTQU4vS0FTQU4uIEtNU0FOLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgc3BlY2lmaWNhbGx5IGdlYXJlZCB0b3dhcmRzIGRldGVjdGluZyB0aGUgdXNlIGFuZCBsZWFrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBwYXRjaCBvbmx5IGFkZHMgYChzaXplX3QpYCBjYXN0cyB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3cgaW4gdXNlciBwb2ludGVyIGFyaXRobWV0aWMgYW5kIHNpemUgY2FsY3VsYXRpb25zLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0ZWQsIHJlYWQsIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSYjMzk7cyBubyBuZWVkIGZvciBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGV4cGxpY2l0IGAoc2l6ZV90KWAgY2FzdHMgdG8gdXNlciBwb2ludGVyIG9mZnNldCBhbmQgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiBCUEYgYmF0Y2ggb3BlcmF0aW9ucyAoc3VjaCBhcyBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAsIGBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoYCwgYW5kIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgKSB0byBwcmV2ZW50IDMyLWJpdCBpbnRlZ2VyIG11bHRpcGxpY2F0aW9uIG92ZXJmbG93cyBvbiA2NC1iaXQgc3lzdGVtcy5cblxuVGhlc2UgY2hhbmdlcyBzdHJpY3RseSBmaXggaW50ZWdlciBhcml0aG1ldGljIGFuZCB1c2VyIHNwYWNlIGFkZHJlc3MgY2FsY3VsYXRpb25zLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzL3BhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgZGF0YSBsZWFrcyB0byB1c2VyIHNwYWNlLiBBbnkgbWVtb3J5IHNhZmV0eSBvciBhcml0aG1ldGljIGlzc3VlcyByZWxhdGVkIHRvIHRoZXNlIGNhbGN1bGF0aW9ucyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9VQlNBTiBidWlsZHMuIEhlbmNlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGV4cGxpY2l0IGAoc2l6ZV90KWAgY2FzdHMgdG8gdXNlciBwb2ludGVyIG9mZnNldCBhbmQgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiBCUEYgYmF0Y2ggb3BlcmF0aW9ucyAoc3VjaCBhcyBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAsIGBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoYCwgYW5kIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgKSB0byBwcmV2ZW50IDMyLWJpdCBpbnRlZ2VyIG11bHRpcGxpY2F0aW9uIG92ZXJmbG93cyBvbiA2NC1iaXQgc3lzdGVtcy5cblxuVGhlc2UgY2hhbmdlcyBzdHJpY3RseSBmaXggaW50ZWdlciBhcml0aG1ldGljIGFuZCB1c2VyIHNwYWNlIGFkZHJlc3MgY2FsY3VsYXRpb25zLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzL3BhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgZGF0YSBsZWFrcyB0byB1c2VyIHNwYWNlLiBBbnkgbWVtb3J5IHNhZmV0eSBvciBhcml0aG1ldGljIGlzc3VlcyByZWxhdGVkIHRvIHRoZXNlIGNhbGN1bGF0aW9ucyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9VQlNBTiBidWlsZHMuIEhlbmNlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjA5OjE4LjM3NDMyMTU4NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5NjU1NzY1NjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2VuZXJpY19tYXBfZGVsZXRlX2JhdGNoXCIsXG4gICAgXCJnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hcIixcbiAgICBcImdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaFwiLFxuICAgIFwiaHRhYl9tYXBfbG9va3VwX2JhdGNoXCIsXG4gICAgXCJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBleHBsaWNpdCBgKHNpemVfdClgIGNhc3RzIHRvIHVzZXIgcG9pbnRlciBvZmZzZXQgYW5kIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gQlBGIGJhdGNoIG9wZXJhdGlvbnMgKHN1Y2ggYXMgYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfZGVsZXRlX2JhdGNoYCwgYGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaGAsIGFuZCBgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoYCkgdG8gcHJldmVudCAzMi1iaXQgaW50ZWdlciBtdWx0aXBsaWNhdGlvbiBvdmVyZmxvd3Mgb24gNjQtYml0IHN5c3RlbXMuXFxuXFxuVGhlc2UgY2hhbmdlcyBzdHJpY3RseSBmaXggaW50ZWdlciBhcml0aG1ldGljIGFuZCB1c2VyIHNwYWNlIGFkZHJlc3MgY2FsY3VsYXRpb25zLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzL3BhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgZGF0YSBsZWFrcyB0byB1c2VyIHNwYWNlLiBBbnkgbWVtb3J5IHNhZmV0eSBvciBhcml0aG1ldGljIGlzc3VlcyByZWxhdGVkIHRvIHRoZXNlIGNhbGN1bGF0aW9ucyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9VQlNBTiBidWlsZHMuIEhlbmNlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYXJpdGhtZXRpYyBvZmZzZXQgY29tcHV0YXRpb25zIGR1cmluZyB1c2VyIG1lbW9yeSBjb3B5aW5nIGluIEJQRiBiYXRjaCBtYXAgb3BlcmF0aW9ucyAoZ2VuZXJpYyBtYXAgZGVsZXRlL3VwZGF0ZS9sb29rdXAgYmF0Y2ggaGFuZGxlcnMgYW5kIGhhc2ggdGFibGUgYmF0Y2ggbG9va3VwLWFuZC1kZWxldGUpIHRvIGNhc3QgaW5kaWNlcy9tdWx0aXBsaWVycyB0byBzaXplX3QgdG8gcHJldmVudCBwb3RlbnRpYWwgaW50ZWdlciB0cnVuY2F0aW9uIG9yIG92ZXJmbG93LiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB3aXRoIEJQRl9NQVBfKl9CQVRDSCBjb21tYW5kcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MDk6MTguMzc0MzI3NDM2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzg2NzQwODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzZTBkNzg1MDY3MTYwYTI3MzkxNTM1NWJhZDY0YWQ3YjEyYTUzYTZkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDMgMjA6MDk6MTcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xcbmluZGV4IGQ0MGNiNWRkNDQ2Y2EuLmJkMzcwNGVkOTMzM2UgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9oYXNodGFiLmNcXG4rKysgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xcbkBAIC0xOTc3LDEwICsxOTc3LDEwIEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4gXFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHRicGZfZW5hYmxlX2luc3RydW1lbnRhdGlvbigpO1xcbi1cXHRpZiAoYnVja2V0X2NudCBcXHUwMDI2XFx1MDAyNiAoY29weV90b191c2VyKHVrZXlzICsgdG90YWwgKiBrZXlfc2l6ZSwga2V5cyxcXG4tXFx0ICAgIGtleV9zaXplICogYnVja2V0X2NudCkgfHxcXG4tXFx0ICAgIGNvcHlfdG9fdXNlcih1dmFsdWVzICsgdG90YWwgKiB2YWx1ZV9zaXplLCB2YWx1ZXMsXFxuLVxcdCAgICB2YWx1ZV9zaXplICogYnVja2V0X2NudCkpKSB7XFxuK1xcdGlmIChidWNrZXRfY250IFxcdTAwMjZcXHUwMDI2IChjb3B5X3RvX3VzZXIodWtleXMgKyAoc2l6ZV90KXRvdGFsICoga2V5X3NpemUsIGtleXMsXFxuK1xcdCAgICAoc2l6ZV90KWtleV9zaXplICogYnVja2V0X2NudCkgfHxcXG4rXFx0ICAgIGNvcHlfdG9fdXNlcih1dmFsdWVzICsgKHNpemVfdCl0b3RhbCAqIHZhbHVlX3NpemUsIHZhbHVlcyxcXG4rXFx0ICAgIChzaXplX3QpdmFsdWVfc2l6ZSAqIGJ1Y2tldF9jbnQpKSkge1xcbiBcXHRcXHRyZXQgPSAtRUZBVUxUO1xcbiBcXHRcXHRnb3RvIGFmdGVyX2xvb3A7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xcbmluZGV4IDY4NzRiYTE0MjRhZjAuLjczMTM4OGFlMDBhZDEgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmNcXG4rKysgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xcbkBAIC0yMDM2LDcgKzIwMzYsNyBAQCBpbnQgZ2VuZXJpY19tYXBfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXFxuIFxcbiBcXHRmb3IgKGNwID0gMDsgY3AgXFx1MDAzYyBtYXhfY291bnQ7IGNwKyspIHtcXG4gXFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4tXFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyArIGNwICogbWFwLVxcdTAwM2VrZXlfc2l6ZSxcXG4rXFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyArIChzaXplX3QpY3AgKiBtYXAtXFx1MDAzZWtleV9zaXplLFxcbiBcXHRcXHRcXHRcXHQgICBtYXAtXFx1MDAzZWtleV9zaXplKSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbkBAIC0yMDk4LDkgKzIwOTgsOSBAQCBpbnQgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSxcXG4gXFxuIFxcdGZvciAoY3AgPSAwOyBjcCBcXHUwMDNjIG1heF9jb3VudDsgY3ArKykge1xcbiBcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbi1cXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoa2V5LCBrZXlzICsgY3AgKiBtYXAtXFx1MDAzZWtleV9zaXplLFxcbitcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoa2V5LCBrZXlzICsgKHNpemVfdCljcCAqIG1hcC1cXHUwMDNla2V5X3NpemUsXFxuIFxcdFxcdCAgICBtYXAtXFx1MDAzZWtleV9zaXplKSB8fFxcbi1cXHRcXHQgICAgY29weV9mcm9tX3VzZXIodmFsdWUsIHZhbHVlcyArIGNwICogdmFsdWVfc2l6ZSwgdmFsdWVfc2l6ZSkpXFxuK1xcdFxcdCAgICBjb3B5X2Zyb21fdXNlcih2YWx1ZSwgdmFsdWVzICsgKHNpemVfdCljcCAqIHZhbHVlX3NpemUsIHZhbHVlX3NpemUpKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuIFxcdFxcdGVyciA9IGJwZl9tYXBfdXBkYXRlX3ZhbHVlKG1hcCwgbWFwX2ZpbGUsIGtleSwgdmFsdWUsXFxuQEAgLTIxNzksMTIgKzIxNzksMTIgQEAgaW50IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRnb3RvIGZyZWVfYnVmO1xcbiBcXG4tXFx0XFx0aWYgKGNvcHlfdG9fdXNlcihrZXlzICsgY3AgKiBtYXAtXFx1MDAzZWtleV9zaXplLCBrZXksXFxuK1xcdFxcdGlmIChjb3B5X3RvX3VzZXIoa2V5cyArIChzaXplX3QpY3AgKiBtYXAtXFx1MDAzZWtleV9zaXplLCBrZXksXFxuIFxcdFxcdFxcdFxcdCBtYXAtXFx1MDAzZWtleV9zaXplKSkge1xcbiBcXHRcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbiBcXHRcXHRcXHRnb3RvIGZyZWVfYnVmO1xcbiBcXHRcXHR9XFxuLVxcdFxcdGlmIChjb3B5X3RvX3VzZXIodmFsdWVzICsgY3AgKiB2YWx1ZV9zaXplLCB2YWx1ZSwgdmFsdWVfc2l6ZSkpIHtcXG4rXFx0XFx0aWYgKGNvcHlfdG9fdXNlcih2YWx1ZXMgKyAoc2l6ZV90KWNwICogdmFsdWVfc2l6ZSwgdmFsdWUsIHZhbHVlX3NpemUpKSB7XFxuIFxcdFxcdFxcdGVyciA9IC1FRkFVTFQ7XFxuIFxcdFxcdFxcdGdvdG8gZnJlZV9idWY7XFxuIFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MDk6MTguNzUzNzg0MTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ1Mzc5MDEzOTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2VuZXJpY19tYXBfZGVsZXRlX2JhdGNoXCIsXG4gICAgXCJnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hcIixcbiAgICBcImdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaFwiLFxuICAgIFwiaHRhYl9tYXBfbG9va3VwX2JhdGNoXCIsXG4gICAgXCJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGFyaXRobWV0aWMgb2Zmc2V0IGNvbXB1dGF0aW9ucyBkdXJpbmcgdXNlciBtZW1vcnkgY29weWluZyBpbiBCUEYgYmF0Y2ggbWFwIG9wZXJhdGlvbnMgKGdlbmVyaWMgbWFwIGRlbGV0ZS91cGRhdGUvbG9va3VwIGJhdGNoIGhhbmRsZXJzIGFuZCBoYXNoIHRhYmxlIGJhdGNoIGxvb2t1cC1hbmQtZGVsZXRlKSB0byBjYXN0IGluZGljZXMvbXVsdGlwbGllcnMgdG8gc2l6ZV90IHRvIHByZXZlbnQgcG90ZW50aWFsIGludGVnZXIgdHJ1bmNhdGlvbiBvciBvdmVyZmxvdy4gVGhlc2UgY29kZSBwYXRocyBhcmUgZnVsbHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgd2l0aCBCUEZfTUFQXypfQkFUQ0ggY29tbWFuZHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2UwZDc4NTA2NzE2MGEyNzM5MTUzNTViYWQ2NGFkN2IxMmE1M2E2ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMjA6MDk6MTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hhc2h0YWIuYyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jXG5pbmRleCBkNDBjYjVkZDQ0NmNhLi5iZDM3MDRlZDkzMzNlIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9oYXNodGFiLmNcbisrKyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jXG5AQCAtMTk3NywxMCArMTk3NywxMCBAQCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdGJwZl9lbmFibGVfaW5zdHJ1bWVudGF0aW9uKCk7XG4tXHRpZiAoYnVja2V0X2NudCBcdTAwMjZcdTAwMjYgKGNvcHlfdG9fdXNlcih1a2V5cyArIHRvdGFsICoga2V5X3NpemUsIGtleXMsXG4tXHQgICAga2V5X3NpemUgKiBidWNrZXRfY250KSB8fFxuLVx0ICAgIGNvcHlfdG9fdXNlcih1dmFsdWVzICsgdG90YWwgKiB2YWx1ZV9zaXplLCB2YWx1ZXMsXG4tXHQgICAgdmFsdWVfc2l6ZSAqIGJ1Y2tldF9jbnQpKSkge1xuK1x0aWYgKGJ1Y2tldF9jbnQgXHUwMDI2XHUwMDI2IChjb3B5X3RvX3VzZXIodWtleXMgKyAoc2l6ZV90KXRvdGFsICoga2V5X3NpemUsIGtleXMsXG4rXHQgICAgKHNpemVfdClrZXlfc2l6ZSAqIGJ1Y2tldF9jbnQpIHx8XG4rXHQgICAgY29weV90b191c2VyKHV2YWx1ZXMgKyAoc2l6ZV90KXRvdGFsICogdmFsdWVfc2l6ZSwgdmFsdWVzLFxuK1x0ICAgIChzaXplX3QpdmFsdWVfc2l6ZSAqIGJ1Y2tldF9jbnQpKSkge1xuIFx0XHRyZXQgPSAtRUZBVUxUO1xuIFx0XHRnb3RvIGFmdGVyX2xvb3A7XG4gXHR9XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuaW5kZXggNjg3NGJhMTQyNGFmMC4uNzMxMzg4YWUwMGFkMSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jXG4rKysgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuQEAgLTIwMzYsNyArMjAzNiw3IEBAIGludCBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcbiBcdGZvciAoY3AgPSAwOyBjcCBcdTAwM2MgbWF4X2NvdW50OyBjcCsrKSB7XG4gXHRcdGVyciA9IC1FRkFVTFQ7XG4tXHRcdGlmIChjb3B5X2Zyb21fdXNlcihrZXksIGtleXMgKyBjcCAqIG1hcC1cdTAwM2VrZXlfc2l6ZSxcbitcdFx0aWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyArIChzaXplX3QpY3AgKiBtYXAtXHUwMDNla2V5X3NpemUsXG4gXHRcdFx0XHQgICBtYXAtXHUwMDNla2V5X3NpemUpKVxuIFx0XHRcdGJyZWFrO1xuIFxuQEAgLTIwOTgsOSArMjA5OCw5IEBAIGludCBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGZpbGUgKm1hcF9maWxlLFxuIFxuIFx0Zm9yIChjcCA9IDA7IGNwIFx1MDAzYyBtYXhfY291bnQ7IGNwKyspIHtcbiBcdFx0ZXJyID0gLUVGQVVMVDtcbi1cdFx0aWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyArIGNwICogbWFwLVx1MDAzZWtleV9zaXplLFxuK1x0XHRpZiAoY29weV9mcm9tX3VzZXIoa2V5LCBrZXlzICsgKHNpemVfdCljcCAqIG1hcC1cdTAwM2VrZXlfc2l6ZSxcbiBcdFx0ICAgIG1hcC1cdTAwM2VrZXlfc2l6ZSkgfHxcbi1cdFx0ICAgIGNvcHlfZnJvbV91c2VyKHZhbHVlLCB2YWx1ZXMgKyBjcCAqIHZhbHVlX3NpemUsIHZhbHVlX3NpemUpKVxuK1x0XHQgICAgY29weV9mcm9tX3VzZXIodmFsdWUsIHZhbHVlcyArIChzaXplX3QpY3AgKiB2YWx1ZV9zaXplLCB2YWx1ZV9zaXplKSlcbiBcdFx0XHRicmVhaztcbiBcbiBcdFx0ZXJyID0gYnBmX21hcF91cGRhdGVfdmFsdWUobWFwLCBtYXBfZmlsZSwga2V5LCB2YWx1ZSxcbkBAIC0yMTc5LDEyICsyMTc5LDEyIEBAIGludCBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRnb3RvIGZyZWVfYnVmO1xuIFxuLVx0XHRpZiAoY29weV90b191c2VyKGtleXMgKyBjcCAqIG1hcC1cdTAwM2VrZXlfc2l6ZSwga2V5LFxuK1x0XHRpZiAoY29weV90b191c2VyKGtleXMgKyAoc2l6ZV90KWNwICogbWFwLVx1MDAzZWtleV9zaXplLCBrZXksXG4gXHRcdFx0XHQgbWFwLVx1MDAzZWtleV9zaXplKSkge1xuIFx0XHRcdGVyciA9IC1FRkFVTFQ7XG4gXHRcdFx0Z290byBmcmVlX2J1ZjtcbiBcdFx0fVxuLVx0XHRpZiAoY29weV90b191c2VyKHZhbHVlcyArIGNwICogdmFsdWVfc2l6ZSwgdmFsdWUsIHZhbHVlX3NpemUpKSB7XG4rXHRcdGlmIChjb3B5X3RvX3VzZXIodmFsdWVzICsgKHNpemVfdCljcCAqIHZhbHVlX3NpemUsIHZhbHVlLCB2YWx1ZV9zaXplKSkge1xuIFx0XHRcdGVyciA9IC1FRkFVTFQ7XG4gXHRcdFx0Z290byBmcmVlX2J1ZjtcbiBcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MDk6MTguNzUzNzg1NzhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDI1NjY2MDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBCUEYgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBUaGlzIHBhdGNoIGxvb2tzIGxpa2UgaXQncyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHksIHNwZWNpZmljYWxseSBpbnRlZ2VyIG92ZXJmbG93cywgd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLCB3aGljaCBpcyBhbHdheXMgaW50ZXJlc3RpbmcuIFRoZSBtb2RpZmljYXRpb25zIGFyZSBmb2N1c2VkIG9uIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgYW5kIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AsIHdoaWNoIGltbWVkaWF0ZWx5IHJhaXNlcyBteSBhbnRlbm5hcyBiZWNhdXNlIHRob3NlIGFyZSBjb3JlIGNvbXBvbmVudHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kICpleGFjdGx5KiBob3cgdGhlc2UgaW50ZWdlciBvdmVyZmxvd3MgYXJlIGJlaW5nIGFkZHJlc3NlZC4gSXQgc2VlbXMgcmVsYXRlZCB0byBjYWxjdWxhdGlvbnMgaW52b2x2ZWQgd2l0aCBiYXRjaCBtYXAgb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5IGludm9sdmluZyBgY29weV90b191c2VyYCBhbmQgYGNvcHlfZnJvbV91c2VyYCBhbmQgY2FsY3VsYXRpb25zIGxpa2UgYHRvdGFsICoga2V5X3NpemVgIG9yIGBjcCAqIG1hcC1cdTAwM2VrZXlfc2l6ZWAsIHdoZXJlIGEgYHNpemVfdGAgY2FzdCBpcyBiZWluZyBhcHBsaWVkLiBUaGF0IG1ha2VzIHNlbnNlOyBpbnRlZ2VyIG92ZXJmbG93cyBpbiBtZW1vcnkgYWxsb2NhdGlvbiBvciBvZmZzZXQgY2FsY3VsYXRpb25zIGFyZSBhIGNsYXNzaWMgc291cmNlIG9mIHNlY3VyaXR5IGlzc3Vlcy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGZpbGVzIGFuZCBmdW5jdGlvbnMgY2hhbmdlZCwgcHJvYmFibHkgdXNpbmcgYGdyZXBgIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGNvZGUsIG9yIHBlcmhhcHMgYHJlYWQtZmlsZWAgZGVwZW5kaW5nIG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJIG5lZWQgdG8gc2VlIHRoZSBiZWZvcmUtYW5kLWFmdGVyIGFuZCB1bmRlcnN0YW5kICpleGFjdGx5KiBob3cgdGhlIGNvZGUgaXMgYmVpbmcgZ3VhcmRlZCBub3cuIElzIGl0IHVzaW5nIGEgc2F0dXJhdGlvbiBhcml0aG1ldGljLCBjaGVja2luZyBmb3Igb3ZlcmZsb3csIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBVbmRlcnN0YW5kaW5nIHRoZSBjaG9zZW4gbWl0aWdhdGlvbiBzdHJhdGVneSBpcyBjcml0aWNhbC4gVGhpcyBpcyBhIHBvdGVudGlhbGx5IGNyaXRpY2FsIGZpeCwgYW5kIEkgbmVlZCB0byBhc3Nlc3MgaXRzIGNvcnJlY3RuZXNzIGFuZCBjb21wbGV0ZW5lc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NDEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDowOToyMy4xNzk0NTQ3MjJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzM0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9oYXNodGFiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTk3MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTk3MDpcXHRcXHQvKiBJZiB3ZSBhcmUgbm90IGNvcHlpbmcgZGF0YSwgd2UgY2FuIGdvIHRvIG5leHQgYnVja2V0IGFuZCBhdm9pZFxcbjE5NzE6XFx0XFx0ICogdW5sb2NraW5nIHRoZSByY3UuXFxuMTk3MjpcXHRcXHQgKi9cXG4xOTczOlxcdFxcdGlmICghYnVja2V0X2NudCBcXHUwMDI2XFx1MDAyNiAoYmF0Y2ggKyAxIFxcdTAwM2MgaHRhYi1cXHUwMDNlbl9idWNrZXRzKSkge1xcbjE5NzQ6XFx0XFx0XFx0YmF0Y2grKztcXG4xOTc1OlxcdFxcdFxcdGdvdG8gYWdhaW5fbm9jb3B5O1xcbjE5NzY6XFx0XFx0fVxcbjE5Nzc6XFx0XFxuMTk3ODpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4xOTc5OlxcdFxcdGJwZl9lbmFibGVfaW5zdHJ1bWVudGF0aW9uKCk7XFxuMTk4MDpcXHRcXHRpZiAoYnVja2V0X2NudCBcXHUwMDI2XFx1MDAyNiAoY29weV90b191c2VyKHVrZXlzICsgKHNpemVfdCl0b3RhbCAqIGtleV9zaXplLCBrZXlzLFxcbjE5ODE6XFx0XFx0ICAgIChzaXplX3Qpa2V5X3NpemUgKiBidWNrZXRfY250KSB8fFxcbjE5ODI6XFx0XFx0ICAgIGNvcHlfdG9fdXNlcih1dmFsdWVzICsgKHNpemVfdCl0b3RhbCAqIHZhbHVlX3NpemUsIHZhbHVlcyxcXG4xOTgzOlxcdFxcdCAgICAoc2l6ZV90KXZhbHVlX3NpemUgKiBidWNrZXRfY250KSkpIHtcXG4xOTg0OlxcdFxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuMTk4NTpcXHRcXHRcXHRnb3RvIGFmdGVyX2xvb3A7XFxuMTk4NjpcXHRcXHR9XFxuMTk4NzpcXHRcXG4xOTg4OlxcdFxcdHRvdGFsICs9IGJ1Y2tldF9jbnQ7XFxuMTk4OTpcXHRcXHRiYXRjaCsrO1xcbjE5OTA6XFx0XFx0aWYgKGJhdGNoIFxcdTAwM2U9IGh0YWItXFx1MDAzZW5fYnVja2V0cykge1xcbjE5OTE6XFx0XFx0XFx0cmV0ID0gLUVOT0VOVDtcXG4xOTkyOlxcdFxcdFxcdGdvdG8gYWZ0ZXJfbG9vcDtcXG4xOTkzOlxcdFxcdH1cXG4xOTk0OlxcdFxcdGdvdG8gYWdhaW47XFxuMTk5NTpcXHRcXG4xOTk2OlxcdGFmdGVyX2xvb3A6XFxuMTk5NzpcXHRcXHRpZiAocmV0ID09IC1FRkFVTFQpXFxuMTk5ODpcXHRcXHRcXHRnb3RvIG91dDtcXG4xOTk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDowOToyMy4xNzk1OTAyMTJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjMyNjg0MTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgU3lzdGVtIENhbGwgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCB0cmFjayBkb3duIGEgc3BlY2lmaWMgYmVoYXZpb3IgaW4gdGhlIEJQRiBzeXN0ZW0gY2FsbCBoYW5kbGluZy4gTXkgaW5zdGluY3RzIHRlbGwgbWUgdGhlIGlzc3VlIGxpa2VseSBsaWVzIHdpdGhpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLCBwcm9iYWJseSBhcm91bmQgdGhlIGNvcmUgbG9naWMgb2YgaG93IHRoZXNlIGNhbGxzIGFyZSBwcm9jZXNzZWQuIEknbSBnb2luZyB0byBzdGFydCB3aXRoIGEgZmV3IHN0cmF0ZWdpYyBicmVha3BvaW50czogSSdtIHRoaW5raW5nIHRoZSBjb2RlIGJsb2NrcyBhdCBvciBhcm91bmQgbGluZSBudW1iZXJzIDIwMzYsIDIwOTgsIGFuZCAyMTc5IGFyZSBnb29kIHN0YXJ0aW5nIHBvaW50cy4gVGhleSBsaWtlbHkgZGVhbCB3aXRoIGtleSBhc3BlY3RzIG9mIHRoZSBzeXN0ZW0gY2FsbCBmbG93LCBhbmQgbWlnaHQgc2hlZCBsaWdodCBvbiB3aGF0ZXZlciBpc3N1ZSBJJ20gZGVidWdnaW5nLiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUxNCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MDk6MjUuNDEyMjc2NDg4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI2MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwMzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwMzA6XFx0XFx0aWYgKHB1dF91c2VyKDAsIFxcdTAwMjZ1YXR0ci1cXHUwMDNlYmF0Y2guY291bnQpKVxcbjIwMzE6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMjAzMjpcXHRcXG4yMDMzOlxcdFxcdGtleSA9IGt2bWFsbG9jKG1hcC1cXHUwMDNla2V5X3NpemUsIEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOKTtcXG4yMDM0OlxcdFxcdGlmICgha2V5KVxcbjIwMzU6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjAzNjpcXHRcXG4yMDM3OlxcdFxcdGZvciAoY3AgPSAwOyBjcCBcXHUwMDNjIG1heF9jb3VudDsgY3ArKykge1xcbjIwMzg6XFx0XFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4yMDM5OlxcdFxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihrZXksIGtleXMgKyAoc2l6ZV90KWNwICogbWFwLVxcdTAwM2VrZXlfc2l6ZSxcXG4yMDQwOlxcdFxcdFxcdFxcdFxcdCAgIG1hcC1cXHUwMDNla2V5X3NpemUpKVxcbjIwNDE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjA0MjpcXHRcXG4yMDQzOlxcdFxcdFxcdGlmIChicGZfbWFwX2lzX29mZmxvYWRlZChtYXApKSB7XFxuMjA0NDpcXHRcXHRcXHRcXHRlcnIgPSBicGZfbWFwX29mZmxvYWRfZGVsZXRlX2VsZW0obWFwLCBrZXkpO1xcbjIwNDU6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjA0NjpcXHRcXHRcXHR9XFxuMjA0NzpcXHRcXG4yMDQ4OlxcdFxcdFxcdGJwZl9kaXNhYmxlX2luc3RydW1lbnRhdGlvbigpO1xcbjIwNDk6XFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjIwNTA6XFx0XFx0XFx0ZXJyID0gbWFwLVxcdTAwM2VvcHMtXFx1MDAzZW1hcF9kZWxldGVfZWxlbShtYXAsIGtleSk7XFxuMjA1MTpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4yMDUyOlxcdFxcdFxcdGJwZl9lbmFibGVfaW5zdHJ1bWVudGF0aW9uKCk7XFxuMjA1MzpcXHRcXHRcXHRpZiAoZXJyKVxcbjIwNTQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjA1NTpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4yMDU2OlxcdFxcdH1cXG4yMDU3OlxcdFxcdGlmIChjb3B5X3RvX3VzZXIoXFx1MDAyNnVhdHRyLVxcdTAwM2ViYXRjaC5jb3VudCwgXFx1MDAyNmNwLCBzaXplb2YoY3ApKSlcXG4yMDU4OlxcdFxcdFxcdGVyciA9IC1FRkFVTFQ7XFxuMjA1OTpcXHRcXG4yMDYwOlxcdFxcdGt2ZnJlZShrZXkpO1xcbjIwNjE6XFx0XFxuMjA2MjpcXHRcXHRyZXR1cm4gZXJyO1xcbjIwNjM6XFx0fVxcbjIwNjQ6XFx0XFxuMjA2NTpcXHRpbnQgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSxcXG4yMDY2OlxcdFxcdFxcdFxcdCAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuMjA2NzpcXHRcXHRcXHRcXHQgICAgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpXFxuMjA2ODpcXHR7XFxuMjA2OTpcXHRcXHR2b2lkIF9fdXNlciAqdmFsdWVzID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXFx1MDAzZWJhdGNoLnZhbHVlcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjA5OjI1LjQxMjUwNDk1N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NjQzMjU0NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBmb3JtIG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipSZXZpZXdpbmcgS2V5IEZ1bmN0aW9ucyoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IHNvbWUgcGVyZm9ybWFuY2Ugb3IgZGVzaWduIGNvbnNpZGVyYXRpb25zLCBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSd2ZSBjb3ZlcmVkIG91ciBiYXNlcy4gSSBrbm93IHdlJ3ZlIGFscmVhZHkgbG9va2VkIGF0IFgsIFksIGFuZCBaLCBidXQgaXQncyBjcnVjaWFsIHRvIGJlIHRob3JvdWdoLiBJJ20gZ29pbmcgdG8gcXVpY2tseSByZXZpc2l0IGBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hgIGFuZCBgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoYC4gVGhleSdyZSBjb3JlIHRvIHRoZSBzeXN0ZW0sIGFuZCBpdCB3b3VsZCBiZSBhIGh1Z2UgbWlzcyBpZiBhIGJvdHRsZW5lY2sgb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5IGhhZCBiZWVuIG92ZXJsb29rZWQgdGhlcmUuIFRoZXNlIGJhdGNoIG9wZXJhdGlvbnMgYXJlIGdlbmVyYWxseSBjb21wbGV4IGFuZCBjYW4gYmUgcGVyZm9ybWFuY2Ugc2Vuc2l0aXZlLCBzbyB0aGF0J3MgdGhlIGZvY3VzLiBMZXQncyBzZWUgaWYgYW55IGluc2lnaHRzIHBvcCB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM0NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MDk6MjcuMzc2ODMyNjk0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI2NTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwOTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwOTA6XFx0XFx0aWYgKCFrZXkpXFxuMjA5MTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4yMDkyOlxcdFxcbjIwOTM6XFx0XFx0dmFsdWUgPSBrdm1hbGxvYyh2YWx1ZV9zaXplLCBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7XFxuMjA5NDpcXHRcXHRpZiAoIXZhbHVlKSB7XFxuMjA5NTpcXHRcXHRcXHRrdmZyZWUoa2V5KTtcXG4yMDk2OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjIwOTc6XFx0XFx0fVxcbjIwOTg6XFx0XFxuMjA5OTpcXHRcXHRmb3IgKGNwID0gMDsgY3AgXFx1MDAzYyBtYXhfY291bnQ7IGNwKyspIHtcXG4yMTAwOlxcdFxcdFxcdGVyciA9IC1FRkFVTFQ7XFxuMjEwMTpcXHRcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoa2V5LCBrZXlzICsgKHNpemVfdCljcCAqIG1hcC1cXHUwMDNla2V5X3NpemUsXFxuMjEwMjpcXHRcXHRcXHQgICAgbWFwLVxcdTAwM2VrZXlfc2l6ZSkgfHxcXG4yMTAzOlxcdFxcdFxcdCAgICBjb3B5X2Zyb21fdXNlcih2YWx1ZSwgdmFsdWVzICsgKHNpemVfdCljcCAqIHZhbHVlX3NpemUsIHZhbHVlX3NpemUpKVxcbjIxMDQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjEwNTpcXHRcXG4yMTA2OlxcdFxcdFxcdGVyciA9IGJwZl9tYXBfdXBkYXRlX3ZhbHVlKG1hcCwgbWFwX2ZpbGUsIGtleSwgdmFsdWUsXFxuMjEwNzpcXHRcXHRcXHRcXHRcXHRcXHQgICBhdHRyLVxcdTAwM2ViYXRjaC5lbGVtX2ZsYWdzKTtcXG4yMTA4OlxcdFxcbjIxMDk6XFx0XFx0XFx0aWYgKGVycilcXG4yMTEwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjIxMTE6XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuMjExMjpcXHRcXHR9XFxuMjExMzpcXHRcXG4yMTE0OlxcdFxcdGlmIChjb3B5X3RvX3VzZXIoXFx1MDAyNnVhdHRyLVxcdTAwM2ViYXRjaC5jb3VudCwgXFx1MDAyNmNwLCBzaXplb2YoY3ApKSlcXG4yMTE1OlxcdFxcdFxcdGVyciA9IC1FRkFVTFQ7XFxuMjExNjpcXHRcXG4yMTE3OlxcdFxcdGt2ZnJlZSh2YWx1ZSk7XFxuMjExODpcXHRcXHRrdmZyZWUoa2V5KTtcXG4yMTE5OlxcdFxcbjIxMjA6XFx0XFx0cmV0dXJuIGVycjtcXG4yMTIxOlxcdH1cXG4yMTIyOlxcdFxcbjIxMjM6XFx0aW50IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbjIxMjQ6XFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbjIxMjU6XFx0XFx0XFx0XFx0XFx0ICAgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpXFxuMjEyNjpcXHR7XFxuMjEyNzpcXHRcXHR2b2lkIF9fdXNlciAqdW9iYXRjaCA9IHU2NF90b191c2VyX3B0cihhdHRyLVxcdTAwM2ViYXRjaC5vdXRfYmF0Y2gpO1xcbjIxMjg6XFx0XFx0dm9pZCBfX3VzZXIgKnViYXRjaCA9IHU2NF90b191c2VyX3B0cihhdHRyLVxcdTAwM2ViYXRjaC5pbl9iYXRjaCk7XFxuMjEyOTpcXHRcXHR2b2lkIF9fdXNlciAqdmFsdWVzID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXFx1MDAzZWJhdGNoLnZhbHVlcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjA5OjI3LjM3NzA2MTI2NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU2MTI4MDk2MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIEtlcm5lbCBCUEYgU3lzY2FsbCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkZWVwIGRpdmluZyBpbnRvIHRoaXMgQlBGIGludmVzdGlnYXRpb24uIEkndmUgZ290IGEgaHVuY2ggYWJvdXQgdGhlIGlzc3VlLCBhbmQgSSBuZWVkIHRvIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSBjYWxscyBpbnZvbHZlZC4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYC4gTGV0IG1lIGp1c3QganVtcCBvdmVyIHRvIGxpbmVzIDIxNzAtMjIwMCBhbmQgc2VlIHdoYXQncyBoYXBwZW5pbmcgdGhlcmUuIEknbSBsb29raW5nIGZvciB0aGUgY2FsbCBwYXRoIHdoZXJlLi4uICpbdGhpbmtpbmcgYWJvdXQgc3BlY2lmaWMgc3lzdGVtIGNhbGxzIGFuZCB0aGVpciBleHBlY3RlZCBiZWhhdmlvciBhbmQgd2hlcmUgdGhlIHBvdGVudGlhbCBwcm9ibGVtIGlzXSouLi4gdGhhdCdzIHByb2JhYmx5IHRoZSBtb3N0IHJlbGV2YW50IHNlY3Rpb24gZm9yIHRoaXMgcGFydGljdWxhciB1c2UgY2FzZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBhcmd1bWVudHMgYXJlIGJlaW5nIGhhbmRsZWQsIGhvdyB0aGUgQlBGIHByb2dyYW1zIGFyZSBiZWluZyBsb2FkZWQgYW5kIHZlcmlmaWVkLCBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBhcm91bmQuLi4gKltjb25zaWRlcmluZyBzcGVjaWZpYyBjb2RlIGVsZW1lbnRzIGFuZCBzZWN1cml0eSBjb25jZXJuc10qLi4uIG9yIGFueSB1bmV4cGVjdGVkIGludGVyYWN0aW9ucyB3aXRoIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudCB0aGVyZS4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxOTIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjA5OjMyLjk4OTg3NDM2NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTE1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjE3MCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjE3MDpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4yMTcxOlxcdFxcdFxcdGlmIChlcnIpXFxuMjE3MjpcXHRcXHRcXHRcXHRicmVhaztcXG4yMTczOlxcdFxcdFxcdGVyciA9IGJwZl9tYXBfY29weV92YWx1ZShtYXAsIGtleSwgdmFsdWUsXFxuMjE3NDpcXHRcXHRcXHRcXHRcXHRcXHQgYXR0ci1cXHUwMDNlYmF0Y2guZWxlbV9mbGFncyk7XFxuMjE3NTpcXHRcXG4yMTc2OlxcdFxcdFxcdGlmIChlcnIgPT0gLUVOT0VOVClcXG4yMTc3OlxcdFxcdFxcdFxcdGdvdG8gbmV4dF9rZXk7XFxuMjE3ODpcXHRcXG4yMTc5OlxcdFxcdFxcdGlmIChlcnIpXFxuMjE4MDpcXHRcXHRcXHRcXHRnb3RvIGZyZWVfYnVmO1xcbjIxODE6XFx0XFxuMjE4MjpcXHRcXHRcXHRpZiAoY29weV90b191c2VyKGtleXMgKyAoc2l6ZV90KWNwICogbWFwLVxcdTAwM2VrZXlfc2l6ZSwga2V5LFxcbjIxODM6XFx0XFx0XFx0XFx0XFx0IG1hcC1cXHUwMDNla2V5X3NpemUpKSB7XFxuMjE4NDpcXHRcXHRcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbjIxODU6XFx0XFx0XFx0XFx0Z290byBmcmVlX2J1ZjtcXG4yMTg2OlxcdFxcdFxcdH1cXG4yMTg3OlxcdFxcdFxcdGlmIChjb3B5X3RvX3VzZXIodmFsdWVzICsgKHNpemVfdCljcCAqIHZhbHVlX3NpemUsIHZhbHVlLCB2YWx1ZV9zaXplKSkge1xcbjIxODg6XFx0XFx0XFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4yMTg5OlxcdFxcdFxcdFxcdGdvdG8gZnJlZV9idWY7XFxuMjE5MDpcXHRcXHRcXHR9XFxuMjE5MTpcXHRcXG4yMTkyOlxcdFxcdFxcdGNwKys7XFxuMjE5MzpcXHRuZXh0X2tleTpcXG4yMTk0OlxcdFxcdFxcdGlmICghcHJldl9rZXkpXFxuMjE5NTpcXHRcXHRcXHRcXHRwcmV2X2tleSA9IGJ1Zl9wcmV2a2V5O1xcbjIxOTY6XFx0XFxuMjE5NzpcXHRcXHRcXHRzd2FwKHByZXZfa2V5LCBrZXkpO1xcbjIxOTg6XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuMjE5OTpcXHRcXHR9XFxuMjIwMDpcXHRcXG4yMjAxOlxcdFxcdGlmIChlcnIgPT0gLUVGQVVMVClcXG4yMjAyOlxcdFxcdFxcdGdvdG8gZnJlZV9idWY7XFxuMjIwMzpcXHRcXG4yMjA0OlxcdFxcdGlmICgoY29weV90b191c2VyKFxcdTAwMjZ1YXR0ci1cXHUwMDNlYmF0Y2guY291bnQsIFxcdTAwMjZjcCwgc2l6ZW9mKGNwKSkgfHxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MDk6MzIuOTkwMDg3NzQ2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3MzgyNzczMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGtlcm5lbCBjb25maWd1cmF0aW9uIHB1enpsZS5cblxuKipGaW5kaW5nIHRoZSBCUEYgU3lzY2FsbCBhbmQgSGFzaHRhYmxlIENvbmZpZ3VyYXRpb24gRmxhZ3MqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggS2NvbmZpZyBmbGFncyBhcmUgcmVzcG9uc2libGUgZm9yIGVuYWJsaW5nIHRoZSBCUEYgc3lzY2FsbHMgYW5kIGhhc2h0YWJsZXMuIEknbSB0aGlua2luZywgdGhlIG1vc3Qgc3RyYWlnaHRmb3J3YXJkIGFwcHJvYWNoIGlzIHRvIGh1bnQgZm9yIHRob3NlIEJQRi1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGRpcmVjdGx5IHdpdGhpbiB0aGUgS2NvbmZpZyBmaWxlcy4gVGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gc2hvdWxkIG1ha2UgdGhhdCBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBvYnZpb3VzIHBsYWNlczogYGluaXQvS2NvbmZpZ2AgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBib290LXJlbGF0ZWQgZmVhdHVyZXMsIGFuZCB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgIHNob3VsZCBjb250YWluIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gYml0cyBnaXZlbiBCUEYncyBpbmNyZWFzaW5nIGltcG9ydGFuY2UuIExldCdzIHNlZSB3aGF0IHRoYXQgZ3JlcCB1bmNvdmVycyFcblxuXG4iLCJJbnB1dFRva2VucyI6NjkzNywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MDk6MzUuNzI4MzY4NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk5MDIyMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGFzaHRhYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTEwPW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGhhc2h0YWIubyBhcnJheW1hcC5vIHBlcmNwdV9mcmVlbGlzdC5vIGJwZl9scnVfbGlzdC5vIGxwbV90cmllLm8gbWFwX2luX21hcC5vIGJsb29tX2ZpbHRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xMi1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGxvY2FsX3N0b3JhZ2UubyBxdWV1ZV9zdGFja19tYXBzLm8gcmluZ2J1Zi5vIGJwZl9pbnNuX2FycmF5Lm9cXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTExLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9yYW5kb20uaFxcdTAwM2VcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoxMjojaW5jbHVkZSBcXHUwMDNjbGludXgvcmhhc2h0YWJsZS5oXFx1MDAzZVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTEzLSNpbmNsdWRlIFxcdTAwM2N1YXBpL2xpbnV4L2J0Zi5oXFx1MDAzZVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9ODY9c3RydWN0IGJwZl9odGFiIHtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTk2LVxcdHN0cnVjdCBodGFiX2VsZW0gKl9fcGVyY3B1ICpleHRyYV9lbGVtcztcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzo5NzpcXHQvKiBudW1iZXIgb2YgZWxlbWVudHMgaW4gbm9uLXByZWFsbG9jYXRlZCBoYXNodGFibGUgYXJlIGtlcHRcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy05OC1cXHQgKiBpbiBlaXRoZXIgcGNvdW50IG9yIGNvdW50XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNzM9c3RhdGljIHZvaWQgaHRhYl9mcmVlX2VsZW1zKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5OC0gKlxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5OTogKiBJbiBoYXNodGFiLmMsIHRvIGF2b2lkIGRlYWRsb2NrLCBsb2NrIGFjcXVpc2l0aW9uIG9mXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzAwLSAqIGJ1Y2tldF9sb2NrIGZvbGxvd2VkIGJ5IGxydV9sb2NrIGlzIG5vdCBhbGxvd2VkLiBJbiBzdWNoIGNhc2VzLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9Mjc1MT1zdHJ1Y3QgYnBmX3JodGFiIHtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzUyLVxcdHN0cnVjdCBicGZfbWFwIG1hcDtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNzUzOlxcdHN0cnVjdCByaGFzaHRhYmxlIGh0O1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3NTQtXFx0c3RydWN0IGJwZl9tZW1fYWxsb2MgbWE7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzU4LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI3NTk6c3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyByaHRhYl9wYXJhbXMgPSB7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjc2MC1cXHQuaGVhZF9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3Qgcmh0YWJfZWxlbSwgbm9kZSksXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNzY0PXN0YXRpYyBpbmxpbmUgdm9pZCAqcmh0YWJfZWxlbV92YWx1ZShzdHJ1Y3Qgcmh0YWJfZWxlbSAqbCwgdTMyIGtleV9zaXplKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjc2OS0vKiBTcGVjaWFsaXplIGhhc2ggZnVuY3Rpb24gYW5kIG9iamNtcCBmb3IgbG9uZyBzaXplZCBrZXkgKi9cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNzcwOnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IHJodGFiX2tleV9jbXBfbG9uZyhzdHJ1Y3Qgcmhhc2h0YWJsZV9jb21wYXJlX2FyZyAqYXJnLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3NzEtXFx0XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgdm9pZCAqcHRyKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9Mjc3OT1zdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiByaHRhYl9oYXNoZm5fbG9uZyhjb25zdCB2b2lkICpkYXRhLCB1MzIgbGVuLCB1MzIgc2VlZClcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3ODUtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjc4NjpzdGF0aWMgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHJodGFiX3BhcmFtc19sb25nID0ge1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3ODctXFx0LmhlYWRfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHJodGFiX2VsZW0sIG5vZGUpLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9Mjc5ND1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnJodGFiX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzk1LXtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNzk2OlxcdHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBwYXJhbXM7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjc5Ny1cXHRzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYjtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4MjMtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjgyNDpcXHRlcnIgPSByaGFzaHRhYmxlX2luaXQoXFx1MDAyNnJodGFiLVxcdTAwM2VodCwgXFx1MDAyNnBhcmFtcyk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjgyNS1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjgyNy1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyODI4OlxcdC8qIFNldCBtYXhfZWxlbXMgYWZ0ZXIgcmhhc2h0YWJsZV9pbml0KCkgc2luY2UgaW5pdCB6ZXJvZXMgdGhlIHN0cnVjdCAqL1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4MjktXFx0cmh0YWItXFx1MDAzZWh0Lm1heF9lbGVtcyA9IHJodGFiLVxcdTAwM2VtYXAubWF4X2VudHJpZXM7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yODM3LWRlc3Ryb3lfcmh0YWI6XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjgzODpcXHRyaGFzaHRhYmxlX2Rlc3Ryb3koXFx1MDAyNnJodGFiLVxcdTAwM2VodCk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjgzOS1mcmVlX3JodGFiOlxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9Mjg5OD1zdGF0aWMgdm9pZCByaHRhYl9tYXBfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjkwMS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTAyOlxcdHJoYXNodGFibGVfZnJlZV9hbmRfZGVzdHJveShcXHUwMDI2cmh0YWItXFx1MDAzZWh0LCByaHRhYl9mcmVlX2VsZW0sIHJodGFiKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTAzLVxcdGJwZl9tZW1fYWxsb2NfZGVzdHJveShcXHUwMDI2cmh0YWItXFx1MDAzZW1hKTtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI5MDc9c3RhdGljIHZvaWQgKnJodGFiX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5MTQtXFx0aWYgKG1hcC1cXHUwMDNla2V5X3NpemUgPT0gc2l6ZW9mKGxvbmcpKVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5MTU6XFx0XFx0cmV0dXJuIHJoYXNodGFibGVfbG9va3VwX2xpa2VseShcXHUwMDI2cmh0YWItXFx1MDAzZWh0LCBrZXksIHJodGFiX3BhcmFtc19sb25nKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTE2LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5MTc6XFx0cmV0dXJuIHJoYXNodGFibGVfbG9va3VwX2xpa2VseShcXHUwMDI2cmh0YWItXFx1MDAzZWh0LCBrZXksIHJodGFiX3BhcmFtcyk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjkxOC19XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yOTM5PXN0YXRpYyBpbnQgcmh0YWJfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9yaHRhYiAqcmh0YWIsIHN0cnVjdCByaHRhYl9lbGVtICplbGVtLCB2b2lkICpjb3B5LFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjk0NS1cXHQgKiBkaXNhYmxlX2luc3RydW1lbnRhdGlvbigpIG1pdGlnYXRlcyB0aGUgZGVhZGxvY2sgZm9yIHByb2dyYW1zIHJ1bm5pbmcgaW4gTk1JIGNvbnRleHQuXFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk0NjpcXHQgKiByaGFzaHRhYmxlIGxvY2tzIGJ1Y2tldCB3aXRoIGxvY2FsX2lycV9zYXZlKCkuIE9ubHkgTk1JIHByb2dyYW1zIG1heSByZWVudGVyXFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk0NzpcXHQgKiByaGFzaHRhYmxlIGNvZGUsIGJwZl9kaXNhYmxlX2luc3RydW1lbnRhdGlvbigpIGRpc2FibGVzIHByb2dyYW1zIHJ1bm5pbmcgaW4gTk1JLCBleGNlcHRcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTQ4OlxcdCAqIHJhdyB0cmFjZXBvaW50cywgd2hpY2ggd2UgZG9uJ3QgaGF2ZSBpbiByaGFzaHRhYmxlLlxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5NDktXFx0ICovXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTUyLVxcdGlmIChyaHRhYi1cXHUwMDNlbWFwLmtleV9zaXplID09IHNpemVvZihsb25nKSlcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTUzOlxcdFxcdGVyciA9IHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXFx1MDAyNnJodGFiLVxcdTAwM2VodCwgXFx1MDAyNmVsZW0tXFx1MDAzZW5vZGUsIHJodGFiX3BhcmFtc19sb25nKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTU0LVxcdGVsc2VcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTU1OlxcdFxcdGVyciA9IHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXFx1MDAyNnJodGFiLVxcdTAwM2VodCwgXFx1MDAyNmVsZW0tXFx1MDAzZW5vZGUsIHJodGFiX3BhcmFtcyk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjk1Ni1cXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMwMzI9c3RhdGljIGxvbmcgcmh0YWJfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsIHU2NCBtYXBfZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMDc0LVxcdGlmIChtYXAtXFx1MDAzZWtleV9zaXplID09IHNpemVvZihsb25nKSlcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMDc1OlxcdFxcdHRtcCA9IHJoYXNodGFibGVfbG9va3VwX2dldF9pbnNlcnRfZmFzdChcXHUwMDI2cmh0YWItXFx1MDAzZWh0LCBcXHUwMDI2ZWxlbS1cXHUwMDNlbm9kZSwgcmh0YWJfcGFyYW1zX2xvbmcpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwNzYtXFx0ZWxzZVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMwNzc6XFx0XFx0dG1wID0gcmhhc2h0YWJsZV9sb29rdXBfZ2V0X2luc2VydF9mYXN0KFxcdTAwMjZyaHRhYi1cXHUwMDNlaHQsIFxcdTAwMjZlbGVtLVxcdTAwM2Vub2RlLCByaHRhYl9wYXJhbXMpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwNzgtXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMTE2PXN0YXRpYyB2b2lkIHJodGFiX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoc3RydWN0IGJwZl9tYXAgKm1hcClcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxMTgtXFx0c3RydWN0IGJwZl9yaHRhYiAqcmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3JodGFiLCBtYXApO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxMTk6XFx0c3RydWN0IHJoYXNodGFibGVfaXRlciBpdGVyO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxMjAtXFx0c3RydWN0IHJodGFiX2VsZW0gKmVsZW07XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTMyLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxMzM6XFx0cmhhc2h0YWJsZV93YWxrX2VudGVyKFxcdTAwMjZyaHRhYi1cXHUwMDNlaHQsIFxcdTAwMjZpdGVyKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTM0OlxcdHJoYXNodGFibGVfd2Fsa19zdGFydChcXHUwMDI2aXRlcik7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzEzNS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTM2OlxcdHdoaWxlICgoZWxlbSA9IHJoYXNodGFibGVfd2Fsa19uZXh0KFxcdTAwMjZpdGVyKSkpIHtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTM3LVxcdFxcdGlmIChJU19FUlIoZWxlbSkpIHtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxNDUtXFx0XFx0aWYgKG5lZWRfcmVzY2hlZCgpKSB7IC8qIEF2b2lkIHN0YWxscyBvbiBsYXJnZSBtYXBzICovXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzE0NjpcXHRcXHRcXHRyaGFzaHRhYmxlX3dhbGtfc3RvcChcXHUwMDI2aXRlcik7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzE0Ny1cXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTQ4OlxcdFxcdFxcdHJoYXNodGFibGVfd2Fsa19zdGFydChcXHUwMDI2aXRlcik7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzE0OS1cXHRcXHR9XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTUxLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxNTI6XFx0cmhhc2h0YWJsZV93YWxrX3N0b3AoXFx1MDAyNml0ZXIpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxNTM6XFx0cmhhc2h0YWJsZV93YWxrX2V4aXQoXFx1MDAyNml0ZXIpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxNTQtXFx0V1JJVEVfT05DRShyaHRhYi1cXHUwMDNlZnJlZWluZ19pbnRlcm5hbCwgZmFsc2UpO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzE1Nz1zdGF0aWMgaW50IHJodGFiX21hcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICpuZXh0X2tleSlcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxNjItXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzE2MzpcXHRlbGVtID0gcmhhc2h0YWJsZV9uZXh0X2tleShcXHUwMDI2cmh0YWItXFx1MDAzZWh0LCBrZXkpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxNjQtXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTY2LVxcdGlmIChQVFJfRVJSKGVsZW0pID09IC1FTk9FTlQpXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzE2NzpcXHRcXHRlbGVtID0gcmhhc2h0YWJsZV9uZXh0X2tleShcXHUwMDI2cmh0YWItXFx1MDAzZWh0LCBOVUxMKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTY4LVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzE3OD1zdGF0aWMgdm9pZCByaHRhYl9tYXBfc2VxX3Nob3dfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHN0cnVjdCBzZXFfZmlsZSAqbSlcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxODEtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzE4MjpcXHQvKiBHdWFyYW50ZWUgdGhhdCBoYXNodGFiIHZhbHVlIGlzIG5vdCBmcmVlZCAqL1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxODMtXFx0Z3VhcmQocmN1KSgpO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzE5NT1zdGF0aWMgbG9uZyBicGZfZWFjaF9yaGFzaF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIGJwZl9jYWxsYmFja190IGNhbGxiYWNrX2ZuLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzIxMC1cXHQvKlxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMyMTE6XFx0ICogQmVzdC1lZmZvcnQgaXRlcmF0aW9uOiBpZiByaGFzaHRhYmxlIGlzIGNvbmN1cnJlbnRseSByZXNpemVkIG9yXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzIxMi1cXHQgKiBlbGVtZW50cyBhcmUgZGVsZXRlZC9pbnNlcnRlZCwgdGhlcmUgbWF5IGJlIG1pc3NlZCBvciBkdXBsaWNhdGVcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyMTQtXFx0ICovXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzIxNTpcXHR3aGlsZSAoKGVsZW0gPSByaGFzaHRhYmxlX25leHRfa2V5KFxcdTAwMjZyaHRhYi1cXHUwMDNlaHQsIHByZXZfa2V5KSkpIHtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMjE2LVxcdFxcdGlmIChJU19FUlIoZWxlbSkpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMjMzPXN0YXRpYyB1NjQgcmh0YWJfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzIzNy1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMjM4OlxcdC8qIEV4Y2x1ZGVzIHJoYXNodGFibGUgYnVja2V0IG92ZXJoZWFkICh+IG5lbGVtcyAqIHNpemVvZih2b2lkICopIGF0IDc1JSBsb2FkKS4gKi9cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMjM5LVxcdG51bV9lbnRyaWVzID0gYXRvbWljX3JlYWQoXFx1MDAyNnJodGFiLVxcdTAwM2VodC5uZWxlbXMpO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzI0Mz1zdGF0aWMgaW50IF9fcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzE3LVxcdH0gZWxzZSB7XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzMxODpcXHRcXHRlbGVtID0gcmhhc2h0YWJsZV9uZXh0X2tleShcXHUwMDI2cmh0YWItXFx1MDAzZWh0LCBOVUxMKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzE5LVxcdH1cXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzMjgtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzMyOTpcXHRcXHRlbGVtID0gcmhhc2h0YWJsZV9uZXh0X2tleShcXHUwMDI2cmh0YWItXFx1MDAzZWh0LCBkc3Rfa2V5KTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzMwLVxcdFxcdGRzdF9rZXkgKz0ga2V5X3NpemU7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMzkxPXN0cnVjdCBicGZfaXRlcl9zZXFfcmhhc2hfbWFwX2luZm8ge1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzM5My1cXHRzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYjtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMzk0OlxcdHN0cnVjdCByaGFzaHRhYmxlX2l0ZXIgaXRlcjtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzk1LX07XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMzk3PXN0YXRpYyB2b2lkICpicGZfcmhhc2hfbWFwX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNDAyLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjM0MDM6XFx0cmhhc2h0YWJsZV93YWxrX3N0YXJ0KFxcdTAwMjZpbmZvLVxcdTAwM2VpdGVyKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNDA0LVxcdC8qXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNDA5LVxcdGRvIHtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNDEwOlxcdFxcdGVsZW0gPSByaGFzaHRhYmxlX3dhbGtfcGVlayhcXHUwMDI2aW5mby1cXHUwMDNlaXRlcik7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzQxMS1cXHR9IHdoaWxlIChQVFJfRVJSKGVsZW0pID09IC1FQUdBSU4pO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzQyMT1zdGF0aWMgdm9pZCAqYnBmX3JoYXNoX21hcF9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNDI5LVxcdGRvIHtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNDMwOlxcdFxcdGVsZW0gPSByaGFzaHRhYmxlX3dhbGtfbmV4dChcXHUwMDI2aW5mby1cXHUwMDNlaXRlcik7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzQzMS1cXHR9IHdoaWxlIChQVFJfRVJSKGVsZW0pID09IC1FQUdBSU4pO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzQ2Nz1zdGF0aWMgdm9pZCBicGZfcmhhc2hfbWFwX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzQ3NC1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNDc1OlxcdHJoYXNodGFibGVfd2Fsa19zdG9wKFxcdTAwMjZpbmZvLVxcdTAwM2VpdGVyKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNDc2LX1cXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTM0Nzg9c3RhdGljIGludCBicGZfaXRlcl9pbml0X3JoYXNoX21hcCh2b2lkICpwcml2X2RhdGEsIHN0cnVjdCBicGZfaXRlcl9hdXhfaW5mbyAqYXV4KVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzQ4NS1cXHRpbmZvLVxcdTAwM2VyaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfcmh0YWIsIG1hcCk7XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzQ4NjpcXHRyaGFzaHRhYmxlX3dhbGtfZW50ZXIoXFx1MDAyNmluZm8tXFx1MDAzZXJodGFiLVxcdTAwM2VodCwgXFx1MDAyNmluZm8tXFx1MDAzZWl0ZXIpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0ODctXFx0cmV0dXJuIDA7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zNDkwPXN0YXRpYyB2b2lkIGJwZl9pdGVyX2Zpbmlfcmhhc2hfbWFwKHZvaWQgKnByaXZfZGF0YSlcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0OTMtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzQ5NDpcXHRyaGFzaHRhYmxlX3dhbGtfZXhpdChcXHUwMDI2aW5mby1cXHUwMDNlaXRlcik7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzQ5NS1cXHRicGZfbWFwX3B1dF93aXRoX3VyZWYoaW5mby1cXHUwMDNlbWFwKTtcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy01LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9idGYuaFxcdTAwM2VcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NjojaW5jbHVkZSBcXHUwMDNjbGludXgvaGFzaHRhYmxlLmhcXHUwMDNlXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTctI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2poYXNoLmhcXHUwMDNlXFxuLS1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYy0xNC0jaW5jbHVkZSBcXHUwMDNjbGludXgvcHJvY19ucy5oXFx1MDAzZVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjE1OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9yaGFzaHRhYmxlLmhcXHUwMDNlXFxua2VybmVsL2JwZi9vZmZsb2FkLmMtMTYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXFx1MDAzZVxcbi0tXFxua2VybmVsL2JwZi9vZmZsb2FkLmM9MzM9c3RydWN0IGJwZl9vZmZsb2FkX25ldGRldiB7XFxuLS1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYy00MS1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYzo0MjpzdGF0aWMgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIG9mZmRldnNfcGFyYW1zID0ge1xcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTQzLVxcdC5uZWxlbV9oaW50XFx0XFx0PSA0LFxcbi0tXFxua2VybmVsL2JwZi9vZmZsb2FkLmMtNDktXFxua2VybmVsL2JwZi9vZmZsb2FkLmM6NTA6c3RhdGljIHN0cnVjdCByaGFzaHRhYmxlIG9mZmRldnM7XFxua2VybmVsL2JwZi9vZmZsb2FkLmMtNTEtXFxuLS1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYz02Mj1icGZfb2ZmbG9hZF9maW5kX25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbi0tXFxua2VybmVsL2JwZi9vZmZsb2FkLmMtNjUtXFxua2VybmVsL2JwZi9vZmZsb2FkLmM6NjY6XFx0cmV0dXJuIHJoYXNodGFibGVfbG9va3VwX2Zhc3QoXFx1MDAyNm9mZmRldnMsIFxcdTAwMjZuZXRkZXYsIG9mZmRldnNfcGFyYW1zKTtcXG5rZXJuZWwvYnBmL29mZmxvYWQuYy02Ny19XFxuLS1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYz02OT1zdGF0aWMgaW50IF9fYnBmX29mZmxvYWRfZGV2X25ldGRldl9yZWdpc3RlcihzdHJ1Y3QgYnBmX29mZmxvYWRfZGV2ICpvZmZkZXYsXFxuLS1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYy04My1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYzo4NDpcXHRlcnIgPSByaGFzaHRhYmxlX2luc2VydF9mYXN0KFxcdTAwMjZvZmZkZXZzLCBcXHUwMDI2b25kZXYtXFx1MDAzZWwsIG9mZmRldnNfcGFyYW1zKTtcXG5rZXJuZWwvYnBmL29mZmxvYWQuYy04NS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYz0xMzY9c3RhdGljIHZvaWQgX19icGZfb2ZmbG9hZF9kZXZfbmV0ZGV2X3VucmVnaXN0ZXIoc3RydWN0IGJwZl9vZmZsb2FkX2RldiAqb2ZmZGV2LFxcbi0tXFxua2VybmVsL2JwZi9vZmZsb2FkLmMtMTQ0LVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjE0NTpcXHRvbmRldiA9IHJoYXNodGFibGVfbG9va3VwX2Zhc3QoXFx1MDAyNm9mZmRldnMsIFxcdTAwMjZuZXRkZXYsIG9mZmRldnNfcGFyYW1zKTtcXG5rZXJuZWwvYnBmL29mZmxvYWQuYy0xNDYtXFx0aWYgKFdBUk5fT04oIW9uZGV2KSlcXG4tLVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTE0OC1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYzoxNDk6XFx0V0FSTl9PTihyaGFzaHRhYmxlX3JlbW92ZV9mYXN0KFxcdTAwMjZvZmZkZXZzLCBcXHUwMDI2b25kZXYtXFx1MDAzZWwsIG9mZmRldnNfcGFyYW1zKSk7XFxua2VybmVsL2JwZi9vZmZsb2FkLmMtMTUwLVxcbi0tXFxua2VybmVsL2JwZi9vZmZsb2FkLmM9MTc5PXN0YXRpYyBpbnQgX19icGZfcHJvZ19kZXZfYm91bmRfaW5pdChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuLS1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYy0yMDEtXFx0XFx0LyogV2hlbiBvbmx5IGJpbmRpbmcgdG8gdGhlIGRldmljZSwgZXhwbGljaXRseVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjIwMjpcXHRcXHQgKiBjcmVhdGUgYW4gZW50cnkgaW4gdGhlIGhhc2h0YWJsZS5cXG5rZXJuZWwvYnBmL29mZmxvYWQuYy0yMDMtXFx0XFx0ICovXFxuLS1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYz04NjE9c3RhdGljIGludCBfX2luaXQgYnBmX29mZmxvYWRfaW5pdCh2b2lkKVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTg2Mi17XFxua2VybmVsL2JwZi9vZmZsb2FkLmM6ODYzOlxcdHJldHVybiByaGFzaHRhYmxlX2luaXQoXFx1MDAyNm9mZmRldnMsIFxcdTAwMjZvZmZkZXZzX3BhcmFtcyk7XFxua2VybmVsL2JwZi9vZmZsb2FkLmMtODY0LX1cXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTEzODI9c3RhdGljIGludCBtYXBfY3JlYXRlX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwgc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE0MzMtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTQzNDpcXHQvKiBmaW5kIG1hcCB0eXBlIGFuZCBpbml0IG1hcDogaGFzaHRhYmxlIHZzIHJidHJlZSB2cyBibG9vbSB2cyAuLi4gKi9cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNDM1LVxcdG1hcF90eXBlID0gYXR0ci1cXHUwMDNlbWFwX3R5cGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjA5OjM1Ljc4ODI3ODc0OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzU4NTA5NzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgSGFzaHRhYmxlIEJhdGNoIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYmF0Y2ggb3BlcmF0aW9uIGltcGxlbWVudGF0aW9ucyBmb3IgQlBGIGhhc2h0YWJsZXMsIHNwZWNpZmljYWxseSB0aGUgZGVsZXRlLCB1cGRhdGUsIGFuZCBsb29rdXAgZnVuY3Rpb25zLiBJJ2xsIHN0YXJ0IHdpdGggdGhlIGRlZmluaXRpb25zIG9mOlxuXG4qICAgYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgIHdpdGhpbiBga2VybmVsL2JwZi9oYXNodGFiLmNgXG4qICAgYGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaGAgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYFxuKiAgIGBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hgIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2BcbiogICBgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoYCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgXG5cbk15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAuIEkgbmVlZCB0byBkZXRlcm1pbmUgaG93IGl0J3MgdXNlZCBhbmQgd2hldGhlciBpdCdzIHN0YXRpY2FsbHkgbGlua2VkIHdpdGhpbiBpdHMgbW9kdWxlIG9yIGV4cG9zZWQgZm9yIGV4dGVybmFsIGNhbGxzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIGNvbnRyb2wgYW5kIHVzZSBvZiBiYXRjaCBvcGVyYXRpb25zLiBLbm93aW5nIHRoZSBjYWxsIHNpdGVzIG9mIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCB3aWxsIGhpZ2hsaWdodCBob3cgYW5kIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBCUEYgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjYwNCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDowOTozOS4xNDY3OTE3NDVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MjM2MjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9oYXNodGFiLmM9MTc3MT1zdGF0aWMgaW50XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MTc3MjpfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTc3My1cXHRcXHRcXHRcXHQgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIwMTM9aHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwMTUte1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwMTY6XFx0cmV0dXJuIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgZmFsc2UsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjAxNy1cXHRcXHRcXHRcXHRcXHRcXHQgIGZhbHNlLCB0cnVlKTtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIwMjE9aHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDI0LXtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMDI1OlxcdHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIHRydWUsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjAyNi1cXHRcXHRcXHRcXHRcXHRcXHQgIGZhbHNlLCB0cnVlKTtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIwMzA9aHRhYl9tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjAzMi17XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjAzMzpcXHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCBmYWxzZSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDM0LVxcdFxcdFxcdFxcdFxcdFxcdCAgZmFsc2UsIGZhbHNlKTtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIwMzg9aHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNDEte1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwNDI6XFx0cmV0dXJuIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgdHJ1ZSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDQzLVxcdFxcdFxcdFxcdFxcdFxcdCAgZmFsc2UsIGZhbHNlKTtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIwNDc9aHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNTAte1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwNTE6XFx0cmV0dXJuIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgZmFsc2UsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA1Mi1cXHRcXHRcXHRcXHRcXHRcXHQgIHRydWUsIHRydWUpO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjA1Nj1odGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDU5LXtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMDYwOlxcdHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIHRydWUsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA2MS1cXHRcXHRcXHRcXHRcXHRcXHQgIHRydWUsIHRydWUpO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjA2NT1odGFiX2xydV9tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA2Ny17XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjA2ODpcXHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCBmYWxzZSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDY5LVxcdFxcdFxcdFxcdFxcdFxcdCAgdHJ1ZSwgZmFsc2UpO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjA3Mz1odGFiX2xydV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNzYte1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwNzc6XFx0cmV0dXJuIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgdHJ1ZSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDc4LVxcdFxcdFxcdFxcdFxcdFxcdCAgdHJ1ZSwgZmFsc2UpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDowOTozOS4xOTQwMzA2MTNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQ4NDA2MDI3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQmF0Y2ggT3BlcmF0aW9ucyBpbiBCUEYgTWFwcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgaG93IGJhdGNoIG9wZXJhdGlvbnMgYXJlIGltcGxlbWVudGVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIEJQRiBtYXBzLiBJIHNlZSBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0J3MgbGlrZWx5IGFuIGludGVybmFsIHV0aWxpdHkuIEhvd2V2ZXIsIG90aGVyIGZ1bmN0aW9ucyBsaWtlIGBodGFiX21hcF9sb29rdXBfYmF0Y2hgLCBhbmQgYGh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCBjYWxsIGl0LCBzbyBpdCdzIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZS4gTm93LCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBnZW5lcmljIGJhdGNoIG9wZXJhdGlvbnMgYXJlIHNldCB1cCwgSSBzaG91bGQgY2hlY2sgb3V0IGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgYGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaGAsIGBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hgLCBhbmQgYGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaGAuIEkgbmVlZCB0byBjb25maXJtIGlmIHRoZXNlIGBnZW5lcmljXypfYmF0Y2hgIGZ1bmN0aW9ucyBhcmUgbm9uLXN0YXRpYzsgaWYgdGhleSBhcmUsIHRoYXQncyBpbXBvcnRhbnQgZm9yIGhvdyB0aGV5J3JlIGV4cG9zZWQgYW5kIHV0aWxpemVkIGluIHRoZSBvdmVyYWxsIHN5c3RlbS4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGVpciBkZWNsYXJhdGlvbnMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBjb3JlIGJhdGNoIGZ1bmN0aW9uYWxpdHkgaXMgc3RydWN0dXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxMjUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MDk6NDIuNjc4MDkzNDM1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njk3ODYzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZW5lcmljX21hcF8uKl9iYXRjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2FycmF5bWFwLmM9ODU4PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcnJheV9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTg3NC1cXHQubWFwX2NoZWNrX2J0ZiA9IGFycmF5X21hcF9jaGVja19idGYsXFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjg3NTpcXHQubWFwX2xvb2t1cF9iYXRjaCA9IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6ODc2OlxcdC5tYXBfdXBkYXRlX2JhdGNoID0gZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy04NzctXFx0Lm1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyA9IG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyxcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYz04ODU9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHBlcmNwdV9hcnJheV9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTg5OS1cXHQubWFwX2NoZWNrX2J0ZiA9IGFycmF5X21hcF9jaGVja19idGYsXFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjkwMDpcXHQubWFwX2xvb2t1cF9iYXRjaCA9IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6OTAxOlxcdC5tYXBfdXBkYXRlX2JhdGNoID0gZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy05MDItXFx0Lm1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyA9IG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyxcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYz0xNTA0PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcnJheV9vZl9tYXBzX21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMTUxNC1cXHQubWFwX2dlbl9sb29rdXAgPSBhcnJheV9vZl9tYXBfZ2VuX2xvb2t1cCxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6MTUxNTpcXHQubWFwX2xvb2t1cF9iYXRjaCA9IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6MTUxNjpcXHQubWFwX3VwZGF0ZV9iYXRjaCA9IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMTUxNy1cXHQubWFwX2NoZWNrX2J0ZiA9IG1hcF9jaGVja19ub19idGYsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMS1cXHQubWFwX3VwZGF0ZV9iYXRjaCA9XFx0XFx0XFx0XFxcXFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMyOlxcdGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCxcXHRcXHRcXFxcXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzMtXFx0Lm1hcF9kZWxldGVfYmF0Y2ggPVxcdFxcdFxcdFxcXFxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNDpcXHRnZW5lcmljX21hcF9kZWxldGVfYmF0Y2hcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNS1cXG4tLVxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYz03NzU9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHRyaWVfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYy03ODItXFx0Lm1hcF9kZWxldGVfZWxlbSA9IHRyaWVfZGVsZXRlX2VsZW0sXFxua2VybmVsL2JwZi9scG1fdHJpZS5jOjc4MzpcXHQubWFwX2xvb2t1cF9iYXRjaCA9IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCxcXG5rZXJuZWwvYnBmL2xwbV90cmllLmM6Nzg0OlxcdC5tYXBfdXBkYXRlX2JhdGNoID0gZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoLFxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYzo3ODU6XFx0Lm1hcF9kZWxldGVfYmF0Y2ggPSBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2gsXFxua2VybmVsL2JwZi9scG1fdHJpZS5jLTc4Ni1cXHQubWFwX2NoZWNrX2J0ZiA9IHRyaWVfY2hlY2tfYnRmLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTk1Mz1zdGF0aWMgaW50IG1hcF9nZXRfbmV4dF9rZXkodW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMDA4LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjIwMDk6aW50IGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTIwMTAtXFx0XFx0XFx0ICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTIwNjQtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MjA2NTppbnQgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMDY2LVxcdFxcdFxcdCAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMTIyLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjIxMjM6aW50IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTIxMjQtXFx0XFx0XFx0XFx0ICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDowOTo0Mi43MjUwNzU3NDNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzYxOTQzNjY4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQlBGIEJhdGNoIE9wZXJhdGlvbiBFbnRyeXBvaW50KipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZXNlIEJQRiBiYXRjaCBvcGVyYXRpb25zLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB0cmFjZSB0aGUgcGF0aCBmcm9tIGEgc3lzdGVtIGNhbGwgYWxsIHRoZSB3YXkgZG93biBpbnRvIHRoZSBrZXJuZWwgY29kZSB0aGF0IGhhbmRsZXMgdGhlc2UgYmF0Y2hlcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgYGJwZl9tYXBfZG9fYmF0Y2hgIOKAkyB0aGF0IG5hbWUganVzdCBzY3JlYW1zIFwiYmF0Y2ggb3BlcmF0aW9uXCIg4oCTIGFuZCB3aGVyZSdzIHRoZSBtb3N0IGxpa2VseSBwbGFjZT8gVGhlIHVzdWFsIHN1c3BlY3Q6IGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIExldCdzIHNlZSBob3cgdGhlIHN5c2NhbGwgbWVjaGFuaXNtIGZ1bm5lbHMgaW50byB0aGUgaGVhcnQgb2YgdGhpcyBmdW5jdGlvbmFsaXR5LiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgaGlnaC1sZXZlbCBmbG93IGFuZCB3aGVyZSB0byBsb29rIGZvciB0aGUgbG93ZXItbGV2ZWwgZGV0YWlscyBvZiB0aGUgYmF0Y2ggcHJvY2Vzc2luZyBpdHNlbGYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjQ0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MDk6NDYuMzQ0NTE1NzNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3Nzg5NDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9tYXBfZG9fYmF0Y2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmM9NTY2ND1zdGF0aWMgaW50IGJwZl90YXNrX2ZkX3F1ZXJ5KGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTc0Ni1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1NzQ3OnN0YXRpYyBpbnQgYnBmX21hcF9kb19iYXRjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NzQ4LVxcdFxcdFxcdCAgICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjMwMz1zdGF0aWMgaW50IF9fc3lzX2JwZihlbnVtIGJwZl9jbWQgY21kLCBicGZwdHJfdCB1YXR0ciwgdW5zaWduZWQgaW50IHNpemUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDI4LVxcdGNhc2UgQlBGX01BUF9MT09LVVBfQkFUQ0g6XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjQyOTpcXHRcXHRlcnIgPSBicGZfbWFwX2RvX2JhdGNoKFxcdTAwMjZhdHRyLCB1YXR0ci51c2VyLCBCUEZfTUFQX0xPT0tVUF9CQVRDSCk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQzMC1cXHRcXHRicmVhaztcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDMxLVxcdGNhc2UgQlBGX01BUF9MT09LVVBfQU5EX0RFTEVURV9CQVRDSDpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2NDMyOlxcdFxcdGVyciA9IGJwZl9tYXBfZG9fYmF0Y2goXFx1MDAyNmF0dHIsIHVhdHRyLnVzZXIsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQzMy1cXHRcXHRcXHRcXHQgICAgICAgQlBGX01BUF9MT09LVVBfQU5EX0RFTEVURV9CQVRDSCk7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDM1LVxcdGNhc2UgQlBGX01BUF9VUERBVEVfQkFUQ0g6XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjQzNjpcXHRcXHRlcnIgPSBicGZfbWFwX2RvX2JhdGNoKFxcdTAwMjZhdHRyLCB1YXR0ci51c2VyLCBCUEZfTUFQX1VQREFURV9CQVRDSCk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQzNy1cXHRcXHRicmVhaztcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDM4LVxcdGNhc2UgQlBGX01BUF9ERUxFVEVfQkFUQ0g6XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjQzOTpcXHRcXHRlcnIgPSBicGZfbWFwX2RvX2JhdGNoKFxcdTAwMjZhdHRyLCB1YXR0ci51c2VyLCBCUEZfTUFQX0RFTEVURV9CQVRDSCk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ0MC1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MDk6NDYuMzkyMzE0NzE4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2NzU5OTgyMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmllZDogQlBGIEludGVnZXIgT3ZlcmZsb3cqKlxuXG5Pa2F5LCB0aGlzIGlzIHByaW1lIGZ1enppbmcgbWF0ZXJpYWwuIEEgY3JpdGljYWwgaW50ZWdlciBvdmVyZmxvdyB3aXRoaW4gdGhlIEJQRiBjb3JlIHN1YnN5c3RlbSDigJMgZXhjZWxsZW50ISBUaGUgZmFjdCB0aGF0IGl0J3MgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBgYnBmKDIpYCBzeXNjYWxscyB3aXRoIHRob3NlIGBCUEZfTUFQXypfQkFUQ0hgIGNvbW1hbmRzIG1ha2VzIGl0IGV2ZW4gbW9yZSBhcHBlYWxpbmcuIEVhc3kgYWNjZXNzIGlzIGtleSBmb3IgZnV6emluZy5cblxuTXkgaW5pdGlhbCBzY2FuIGZvY3VzZXMgb24gdGhlIGZpeGVzOiB3ZSdyZSBkZWFsaW5nIHdpdGggaW50ZWdlciBvdmVyZmxvd3MgaW4gYXJpdGhtZXRpYyBvZmZzZXQgY2FsY3VsYXRpb25zIOKAkyBzcGVjaWZpY2FsbHksIGB0b3RhbCAqIGtleV9zaXplYCB0cmFuc2Zvcm1hdGlvbnMgdG8gYChzaXplX3QpdG90YWwgKiBrZXlfc2l6ZWAgd2l0aGluIGZ1bmN0aW9ucyBsaWtlIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaGAsIGBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hgLCBhbmQgYGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaGAuIFRoaXMgaXMgd2hlcmUgdGhlIHZ1bG5lcmFiaWxpdGllcyB3aWxsIGxpa2VseSBiZS5cblxuTm93LCBiZWZvcmUgSSBkaWcgaW50byBjcmFmdGluZyB0aGUgZnV6emVyLCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMuIExldCBtZSBjaGVjayBgaW5pdC9LY29uZmlnYCBvciwgbW9yZSBsaWtlbHksIGBrZXJuZWwvYnBmL0tjb25maWdgIHRvIGVuc3VyZSB0aGUgY29kZSBpcyBhY3R1YWxseSBlbmFibGVkIGFuZCB0aGF0IGFueSBkZXBlbmRlbmNpZXMgYXJlIHNhdGlzZmllZC4gR290dGEgbWFrZSBzdXJlIEknbSB0YXJnZXRpbmcgdGhlIHJpZ2h0IGNvZGUgcGF0aCBhbmQgdW5kZXJzdGFuZCB0aGUgY29tcGlsYXRpb24gZW52aXJvbm1lbnQgYmVmb3JlIEkgd2FzdGUgYW55IHRpbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDIwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjA5OjUxLjA2ODMxNTQ3OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxMTE0NzksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MDk6NTEuMTEyNDM0NDM4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3MjI2NzQ3MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gSHVudGluZyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBmaWd1cmUgb3V0IHRoZSBjdXJyZW50IHN0YXRlIG9mIGBCUEZfU1lTQ0FMTGAgd2l0aGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSdtIHRoaW5raW5nLCBhIHF1aWNrIGBncmVwYCB0aHJvdWdoIHRoZSBrZXJuZWwgc291cmNlIGlzIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gc3RhcnQsIGxpa2VseSB0YXJnZXRpbmcgdGhlIGBjb25maWdgIGZpbGVzIGRpcmVjdGx5LiBJIHdhbnQgdG8gc2VlIHdoZXJlIHRoaXMgb3B0aW9uIGlzIGRlZmluZWQsIGhvdyBpdCdzIHVzZWQsIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLiBUaGlzIHNob3VsZCBxdWlja2x5IHJldmVhbCBpZiBpdCdzIGVuYWJsZWQsIGRpc2FibGVkLCBvciBidWlsdCBhcyBhIG1vZHVsZSBpbiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9ucyBvciBvdGhlciBrZXJuZWwgc3ViLWFyY2hpdGVjdHVyZXMgSSB3YW50IHRvIGV4YW1pbmUuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBjaGVjayB0aGUgYEtjb25maWdgIGZpbGVzLCBidXQgYWxzbyBsb29rIGZvciByZWZlcmVuY2VzIGluIGJ1aWxkIGZpbGVzIGFuZCBoZWFkZXJzIHRvIGFzc2VzcyB1c2FnZSBhbmQgaW5jbHVzaW9uIHBvaW50cy4gVGhpcyBzaG91bGQgdGVsbCBtZSBxdWlja2x5IHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBkZWVwZXIgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODc1LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MDk6NTMuODM1MTExNTkyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTkxMTQxNTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjA5OjU1LjQyNjI1ODI1NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzg4MTcxMjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEJQRiBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgQlBGIHN1YnN5c3RlbSBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLiBJJ20gZ29pbmcgdG8gbmF2aWdhdGUgZGlyZWN0bHkgdG8gYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IHNlY3Rpb24gYXJvdW5kIGxpbmUgMjcuIEhvcGVmdWxseSwgdGhpcyB3aWxsIHByb3ZpZGUgdGhlIGluaXRpYWwgY29udGV4dCBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcy4gVGhpcyBLY29uZmlnIGZpbGUgd2lsbCBiZSB0aGUgcGVyZmVjdCBwbGFjZSB0byBzdGFydC4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTg4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MDk6NTcuODE0NDMxNDYzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyMDpcXHQjIFVzZWQgYnkgYXJjaHMgdG8gdGVsbCB0aGF0IHRoZXkgd2FudCB0aGUgQlBGIEpJVCBjb21waWxlciBlbmFibGVkIGJ5XFxuICAyMTpcXHQjIGRlZmF1bHQgZm9yIGtlcm5lbHMgdGhhdCB3ZXJlIGNvbXBpbGVkIHdpdGggQlBGIEpJVCBzdXBwb3J0LlxcbiAgMjI6XFx0Y29uZmlnIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVRcXG4gIDIzOlxcdFxcdGJvb2xcXG4gIDI0OlxcdFxcbiAgMjU6XFx0bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG4gIDI2OlxcdFxcbiAgMjc6XFx0Y29uZmlnIEJQRl9TWVNDQUxMXFxuICAyODpcXHRcXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuICAyOTpcXHRcXHRzZWxlY3QgQlBGXFxuICAzMDpcXHRcXHRzZWxlY3QgSVJRX1dPUktcXG4gIDMxOlxcdFxcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxcbiAgMzI6XFx0XFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxcbiAgMzM6XFx0XFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcXG4gIDM0OlxcdFxcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXFxuICAzNTpcXHRcXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcXG4gIDM2OlxcdFxcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXFxuICAzNzpcXHRcXHRkZWZhdWx0IG5cXG4gIDM4OlxcdFxcdGhlbHBcXG4gIDM5OlxcdFxcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xcbiAgNDA6XFx0XFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cXG4gIDQxOlxcdFxcbiAgNDI6XFx0Y29uZmlnIEJQRl9KSVRcXG4gIDQzOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbiAgNDQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MDk6NTcuODE0NDk2NjIzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYyNDM2MjM4MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXMgU3ltYm9sIGFuZCBJbnN0cnVjdGlvbiBSZXZpZXcqKlxuXG5Pa2F5LCBsZXQncyBzZWUsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBmb2N1cyBzeW1ib2xzIHRvIHVzZSBoZXJlLiBJJ3ZlIGlkZW50aWZpZWQgc2V2ZXJhbCBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQ6IGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCAoc3RhdGljIHdpdGhpbiBga2VybmVsL2JwZi9oYXNodGFiLmNgKSwgYW5kIHRoZW4gYGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaGAsIGBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hgLCBhbmQgYGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaGAsIGFsbCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBBbmQgYSBidW5jaCBvZiBjYWxsZXJzIHRvIHRoZSBmaXJzdCBvbmU6IGBodGFiX21hcF9sb29rdXBfYmF0Y2hgLCBgaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgLCBgaHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9iYXRjaGAsIGFuZCBvdGhlcnMuXG5cbk5vdywgYSBjcml0aWNhbCBzdGVwOiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoYCwgYGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaGAsIGBodGFiX21hcF9sb29rdXBfYmF0Y2hgLCBhbmQgYGh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCBhcmUgdGhlIHJpZ2h0IG9uZXMgdG8gZm9jdXMgb24uIFllcCwgdGhlc2Ugc2VlbSBwZXJmZWN0LiBUaGV5J3JlIHNwZWNpZmljIHRvIEJQRiBiYXRjaCBvcGVyYXRpb25zIGFuZCBkaXJlY3RseSBjYWxsIGludG8gdGhlIGNvZGUgdGhhdCdzIGJlZW4gY2hhbmdlZC5cblxuQWxyaWdodCwgbGV0J3MgbWFrZSBzdXJlIEkndmUgZ290IGV2ZXJ5dGhpbmcgc3RyYWlnaHQgaW4gdGhlIGluc3RydWN0aW9ucy4gYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIHRydWUuIFRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgbm9uLXViaXF1aXRvdXMsIGFuZCB0aGUga2VybmVsIGZ1bmN0aW9ucyBkaXJlY3RseSBoaXQgdGhlIG1vZGlmaWVkIGxvZ2ljLCBhcyB3ZSBqdXN0IGVzdGFibGlzaGVkLiBTcGVjaWZpY2FsbHk6IGBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoYCwgYGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaGAsIGBodGFiX21hcF9sb29rdXBfYmF0Y2hgLCBhbmQgYGh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYC4gVGhlIGBFbmFibGVDb25maWdzYCBhcmUgY29ycmVjdGx5IHNwZWNpZmllZCBhcyBgQlBGX1NZU0NBTExgICh3aXRob3V0IHRoZSBgQ09ORklHX2AgcHJlZml4KS4gVGhlIHJlYXNvbmluZyBpcyBhbHNvIGNsZWFyIGFuZCBjb25jaXNlLlxuXG5BbGwgc2VlbXMgdG8gYmUgaW4gb3JkZXIuIFJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2OTksIk91dHB1dFRva2VucyI6MTc0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDk0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MTA6MDQuMDU4MTIzMzA4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ2NzE5NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2VuZXJpY19tYXBfZGVsZXRlX2JhdGNoXCIsXG4gICAgXCJnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hcIixcbiAgICBcImdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaFwiLFxuICAgIFwiaHRhYl9tYXBfbG9va3VwX2JhdGNoXCIsXG4gICAgXCJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGFyaXRobWV0aWMgb2Zmc2V0IGNvbXB1dGF0aW9ucyBkdXJpbmcgdXNlciBtZW1vcnkgY29weWluZyBpbiBCUEYgYmF0Y2ggbWFwIG9wZXJhdGlvbnMgKGdlbmVyaWMgbWFwIGRlbGV0ZS91cGRhdGUvbG9va3VwIGJhdGNoIGhhbmRsZXJzIGFuZCBoYXNoIHRhYmxlIGJhdGNoIGxvb2t1cC1hbmQtZGVsZXRlKSB0byBjYXN0IGluZGljZXMvbXVsdGlwbGllcnMgdG8gc2l6ZV90IHRvIHByZXZlbnQgcG90ZW50aWFsIGludGVnZXIgdHJ1bmNhdGlvbiBvciBvdmVyZmxvdy4gVGhlc2UgY29kZSBwYXRocyBhcmUgZnVsbHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgd2l0aCBCUEZfTUFQXypfQkFUQ0ggY29tbWFuZHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZW5lcmljX21hcF9kZWxldGVfYmF0Y2hcIixcbiAgICBcImdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaFwiLFxuICAgIFwiZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoXCIsXG4gICAgXCJodGFiX21hcF9sb29rdXBfYmF0Y2hcIixcbiAgICBcImh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYXJpdGhtZXRpYyBvZmZzZXQgY29tcHV0YXRpb25zIGR1cmluZyB1c2VyIG1lbW9yeSBjb3B5aW5nIGluIEJQRiBiYXRjaCBtYXAgb3BlcmF0aW9ucyAoZ2VuZXJpYyBtYXAgZGVsZXRlL3VwZGF0ZS9sb29rdXAgYmF0Y2ggaGFuZGxlcnMgYW5kIGhhc2ggdGFibGUgYmF0Y2ggbG9va3VwLWFuZC1kZWxldGUpIHRvIGNhc3QgaW5kaWNlcy9tdWx0aXBsaWVycyB0byBzaXplX3QgdG8gcHJldmVudCBwb3RlbnRpYWwgaW50ZWdlciB0cnVuY2F0aW9uIG9yIG92ZXJmbG93LiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB3aXRoIEJQRl9NQVBfKl9CQVRDSCBjb21tYW5kcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MTA6MDQuMTMyODAxMzY1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzg5NzI3NDM5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjEwOjA0LjEzMzI1MzkzNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMzODk2ODE2NDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGV4cGxpY2l0IGAoc2l6ZV90KWAgY2FzdHMgdG8gdXNlciBwb2ludGVyIG9mZnNldCBhbmQgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiBCUEYgYmF0Y2ggb3BlcmF0aW9ucyAoc3VjaCBhcyBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAsIGBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoYCwgYW5kIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgKSB0byBwcmV2ZW50IDMyLWJpdCBpbnRlZ2VyIG11bHRpcGxpY2F0aW9uIG92ZXJmbG93cyBvbiA2NC1iaXQgc3lzdGVtcy5cXG5cXG5UaGVzZSBjaGFuZ2VzIHN0cmljdGx5IGZpeCBpbnRlZ2VyIGFyaXRobWV0aWMgYW5kIHVzZXIgc3BhY2UgYWRkcmVzcyBjYWxjdWxhdGlvbnMuIFRoZXkgZG8gbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMvcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCBkYXRhIGxlYWtzIHRvIHVzZXIgc3BhY2UuIEFueSBtZW1vcnkgc2FmZXR5IG9yIGFyaXRobWV0aWMgaXNzdWVzIHJlbGF0ZWQgdG8gdGhlc2UgY2FsY3VsYXRpb25zIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL1VCU0FOIGJ1aWxkcy4gSGVuY2UsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzZTBkNzg1MDY3MTYwYTI3MzkxNTM1NWJhZDY0YWQ3YjEyYTUzYTZkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAyMDowOToxNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGFzaHRhYi5jIGIva2VybmVsL2JwZi9oYXNodGFiLmNcbmluZGV4IGQ0MGNiNWRkNDQ2Y2EuLmJkMzcwNGVkOTMzM2UgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuKysrIGIva2VybmVsL2JwZi9oYXNodGFiLmNcbkBAIC0xOTc3LDEwICsxOTc3LDEwIEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0YnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcbi1cdGlmIChidWNrZXRfY250IFx1MDAyNlx1MDAyNiAoY29weV90b191c2VyKHVrZXlzICsgdG90YWwgKiBrZXlfc2l6ZSwga2V5cyxcbi1cdCAgICBrZXlfc2l6ZSAqIGJ1Y2tldF9jbnQpIHx8XG4tXHQgICAgY29weV90b191c2VyKHV2YWx1ZXMgKyB0b3RhbCAqIHZhbHVlX3NpemUsIHZhbHVlcyxcbi1cdCAgICB2YWx1ZV9zaXplICogYnVja2V0X2NudCkpKSB7XG4rXHRpZiAoYnVja2V0X2NudCBcdTAwMjZcdTAwMjYgKGNvcHlfdG9fdXNlcih1a2V5cyArIChzaXplX3QpdG90YWwgKiBrZXlfc2l6ZSwga2V5cyxcbitcdCAgICAoc2l6ZV90KWtleV9zaXplICogYnVja2V0X2NudCkgfHxcbitcdCAgICBjb3B5X3RvX3VzZXIodXZhbHVlcyArIChzaXplX3QpdG90YWwgKiB2YWx1ZV9zaXplLCB2YWx1ZXMsXG4rXHQgICAgKHNpemVfdCl2YWx1ZV9zaXplICogYnVja2V0X2NudCkpKSB7XG4gXHRcdHJldCA9IC1FRkFVTFQ7XG4gXHRcdGdvdG8gYWZ0ZXJfbG9vcDtcbiBcdH1cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5pbmRleCA2ODc0YmExNDI0YWYwLi43MzEzODhhZTAwYWQxIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmNcbisrKyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5AQCAtMjAzNiw3ICsyMDM2LDcgQEAgaW50IGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIFxuIFx0Zm9yIChjcCA9IDA7IGNwIFx1MDAzYyBtYXhfY291bnQ7IGNwKyspIHtcbiBcdFx0ZXJyID0gLUVGQVVMVDtcbi1cdFx0aWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyArIGNwICogbWFwLVx1MDAzZWtleV9zaXplLFxuK1x0XHRpZiAoY29weV9mcm9tX3VzZXIoa2V5LCBrZXlzICsgKHNpemVfdCljcCAqIG1hcC1cdTAwM2VrZXlfc2l6ZSxcbiBcdFx0XHRcdCAgIG1hcC1cdTAwM2VrZXlfc2l6ZSkpXG4gXHRcdFx0YnJlYWs7XG4gXG5AQCAtMjA5OCw5ICsyMDk4LDkgQEAgaW50IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqbWFwX2ZpbGUsXG4gXG4gXHRmb3IgKGNwID0gMDsgY3AgXHUwMDNjIG1heF9jb3VudDsgY3ArKykge1xuIFx0XHRlcnIgPSAtRUZBVUxUO1xuLVx0XHRpZiAoY29weV9mcm9tX3VzZXIoa2V5LCBrZXlzICsgY3AgKiBtYXAtXHUwMDNla2V5X3NpemUsXG4rXHRcdGlmIChjb3B5X2Zyb21fdXNlcihrZXksIGtleXMgKyAoc2l6ZV90KWNwICogbWFwLVx1MDAzZWtleV9zaXplLFxuIFx0XHQgICAgbWFwLVx1MDAzZWtleV9zaXplKSB8fFxuLVx0XHQgICAgY29weV9mcm9tX3VzZXIodmFsdWUsIHZhbHVlcyArIGNwICogdmFsdWVfc2l6ZSwgdmFsdWVfc2l6ZSkpXG4rXHRcdCAgICBjb3B5X2Zyb21fdXNlcih2YWx1ZSwgdmFsdWVzICsgKHNpemVfdCljcCAqIHZhbHVlX3NpemUsIHZhbHVlX3NpemUpKVxuIFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRlcnIgPSBicGZfbWFwX3VwZGF0ZV92YWx1ZShtYXAsIG1hcF9maWxlLCBrZXksIHZhbHVlLFxuQEAgLTIxNzksMTIgKzIxNzksMTIgQEAgaW50IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gZnJlZV9idWY7XG4gXG4tXHRcdGlmIChjb3B5X3RvX3VzZXIoa2V5cyArIGNwICogbWFwLVx1MDAzZWtleV9zaXplLCBrZXksXG4rXHRcdGlmIChjb3B5X3RvX3VzZXIoa2V5cyArIChzaXplX3QpY3AgKiBtYXAtXHUwMDNla2V5X3NpemUsIGtleSxcbiBcdFx0XHRcdCBtYXAtXHUwMDNla2V5X3NpemUpKSB7XG4gXHRcdFx0ZXJyID0gLUVGQVVMVDtcbiBcdFx0XHRnb3RvIGZyZWVfYnVmO1xuIFx0XHR9XG4tXHRcdGlmIChjb3B5X3RvX3VzZXIodmFsdWVzICsgY3AgKiB2YWx1ZV9zaXplLCB2YWx1ZSwgdmFsdWVfc2l6ZSkpIHtcbitcdFx0aWYgKGNvcHlfdG9fdXNlcih2YWx1ZXMgKyAoc2l6ZV90KWNwICogdmFsdWVfc2l6ZSwgdmFsdWUsIHZhbHVlX3NpemUpKSB7XG4gXHRcdFx0ZXJyID0gLUVGQVVMVDtcbiBcdFx0XHRnb3RvIGZyZWVfYnVmO1xuIFx0XHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoxMDowNC4xMzMyNTcwMjVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTM3NDIwMjg4NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggbmVjZXNzaXRhdGVzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTXkgZmlyc3Qgc3RlcCBpcyB0byByZXZpc2l0IHRoZSBlc3RhYmxpc2hlZCByaXNrIGFuZCBzYWZldHkgcG9saWNpZXMgdG8gZ2V0IGEgY2xlYXIgcGVyc3BlY3RpdmUuXG5cbkZyb20gYSBzYWZldHkgZXZhbHVhdGlvbiBzdGFuZHBvaW50LCB0aGUgdGFzayBjbGVhcmx5IGZhbGxzIHVuZGVyIHRoZSBwdXJ2aWV3IG9mIGNvZGUgcmV2aWV3IGFuZCB0cmlhZ2UsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHNhbml0aXplcnMg4oCTIEtBU0FOIHZlcnN1cyBLTVNBTiBpbiB0aGlzIGNhc2UuIEl0J3MgYSBtYXR0ZXIgb2YgZGVmZW5zaXZlIHNlY3VyaXR5IGVuZ2luZWVyaW5nLCBxdWFsaXR5IGFzc3VyYW5jZSwgYW5kIGluLWRlcHRoIGNvZGUgYW5hbHlzaXMuIEJhc2VkIG9uIG15IGluaXRpYWwgdW5kZXJzdGFuZGluZywgdGhlIGNsYXNzaWZpY2F0aW9uIGhlcmUgaXMgXCJCZW5pZ25cIiBvciBcIk5vbmVcIiBzZXZlcml0eS5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIHBhdGNoIGl0c2VsZi4gSXQgc2VlbXMgdGhlIGNvcmUgY2hhbmdlIGludm9sdmVzIGFkZGluZyBgKHNpemVfdClgIGNhc3RzIHRvIHBvaW50ZXIgb2Zmc2V0IGFuZCBzaXplIGNhbGN1bGF0aW9ucyB3aXRoaW4gQlBGIGJhdGNoIG9wZXJhdGlvbnMuIFNwZWNpZmljYWxseSwgdGhlc2UgY2FzdHMgYXJlIHByZXNlbnQgaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYCwgaW4gdGhlIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCBmdW5jdGlvbiwgYW5kIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2Agd2l0aGluIHRoZSBgZ2VuZXJpY19tYXBfZGVsZXRlX2JhdGNoYCwgYGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaGAsIGFuZCBgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoYCBmdW5jdGlvbnMuIFRoZSBjYXN0cyBhcmUgYmVpbmcgYWRkZWQgdG8gZW5zdXJlIHRoYXQgbXVsdGlwbGljYXRpb25zIG9mIGludGVnZXJzIHRoYXQgY291bGQgb3ZlcmZsb3cgd2hlbiBjYWxjdWxhdGluZyB0aGUgbG9jYXRpb24gdG8gcmVhZCBmcm9tL3dyaXRlIHRvIGluIHVzZXJzcGFjZSBtZW1vcnkgd2lsbCBiZSBjYXN0IHRvIGEgc2l6ZV90LCB3aGljaCBpcyAocHJvYmFibHkpIGxhcmdlci5cblxuSW4gbW9yZSBkZXRhaWwsIHRoZSBmdW5jdGlvbnMgYWZmZWN0ZWQgaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYCBhcmUgdXNpbmcgaW50ZWdlciBhcml0aG1ldGljIHRoYXQgY291bGQgaGF2ZSBwb3RlbnRpYWxseSBvdmVyZmxvd2VkLCBhcyB3ZXJlIHRoZSBmdW5jdGlvbnMgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYC5cblxuVG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgaW1wbGljYXRpb25zLCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYCBhbmQgYGtlcm5lbC9icGYvc3lzY2FsbC5jYC4gSSdsbCB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIGZvciB0aGF0LCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIHR5cGVzIGludm9sdmVkLCB0aGUgcmFuZ2VzIG9mIHZhbHVlcyB0aGV5IG1pZ2h0IGhvbGQsIGFuZCBob3cgdGhlc2UgY2FsY3VsYXRpb25zIGFyZSB1c2VkLiBPbmNlIEkgaGF2ZSB0aGF0IGNvbnRleHQsIEkgY2FuIG1ha2UgYSBtdWNoIG1vcmUgaW5mb3JtZWQgZGVjaXNpb24gYWJvdXQgd2hldGhlciBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIGFjdHVhbGx5IG5lZWRlZCBvciBpZiB0aGlzIGlzLCBhcyBpdCBhcHBlYXJzLCBhIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkIHNhZmV0eSBmaXguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NTMsIk91dHB1dFRva2VucyI6NzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoxMDoxNy44NzUyODg1OTJaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwNDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvaGFzaHRhYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5NzAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE5NzA6XFx0XFx0LyogSWYgd2UgYXJlIG5vdCBjb3B5aW5nIGRhdGEsIHdlIGNhbiBnbyB0byBuZXh0IGJ1Y2tldCBhbmQgYXZvaWRcXG4xOTcxOlxcdFxcdCAqIHVubG9ja2luZyB0aGUgcmN1LlxcbjE5NzI6XFx0XFx0ICovXFxuMTk3MzpcXHRcXHRpZiAoIWJ1Y2tldF9jbnQgXFx1MDAyNlxcdTAwMjYgKGJhdGNoICsgMSBcXHUwMDNjIGh0YWItXFx1MDAzZW5fYnVja2V0cykpIHtcXG4xOTc0OlxcdFxcdFxcdGJhdGNoKys7XFxuMTk3NTpcXHRcXHRcXHRnb3RvIGFnYWluX25vY29weTtcXG4xOTc2OlxcdFxcdH1cXG4xOTc3OlxcdFxcbjE5Nzg6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMTk3OTpcXHRcXHRicGZfZW5hYmxlX2luc3RydW1lbnRhdGlvbigpO1xcbjE5ODA6XFx0XFx0aWYgKGJ1Y2tldF9jbnQgXFx1MDAyNlxcdTAwMjYgKGNvcHlfdG9fdXNlcih1a2V5cyArIChzaXplX3QpdG90YWwgKiBrZXlfc2l6ZSwga2V5cyxcXG4xOTgxOlxcdFxcdCAgICAoc2l6ZV90KWtleV9zaXplICogYnVja2V0X2NudCkgfHxcXG4xOTgyOlxcdFxcdCAgICBjb3B5X3RvX3VzZXIodXZhbHVlcyArIChzaXplX3QpdG90YWwgKiB2YWx1ZV9zaXplLCB2YWx1ZXMsXFxuMTk4MzpcXHRcXHQgICAgKHNpemVfdCl2YWx1ZV9zaXplICogYnVja2V0X2NudCkpKSB7XFxuMTk4NDpcXHRcXHRcXHRyZXQgPSAtRUZBVUxUO1xcbjE5ODU6XFx0XFx0XFx0Z290byBhZnRlcl9sb29wO1xcbjE5ODY6XFx0XFx0fVxcbjE5ODc6XFx0XFxuMTk4ODpcXHRcXHR0b3RhbCArPSBidWNrZXRfY250O1xcbjE5ODk6XFx0XFx0YmF0Y2grKztcXG4xOTkwOlxcdFxcdGlmIChiYXRjaCBcXHUwMDNlPSBodGFiLVxcdTAwM2VuX2J1Y2tldHMpIHtcXG4xOTkxOlxcdFxcdFxcdHJldCA9IC1FTk9FTlQ7XFxuMTk5MjpcXHRcXHRcXHRnb3RvIGFmdGVyX2xvb3A7XFxuMTk5MzpcXHRcXHR9XFxuMTk5NDpcXHRcXHRnb3RvIGFnYWluO1xcbjE5OTU6XFx0XFxuMTk5NjpcXHRhZnRlcl9sb29wOlxcbjE5OTc6XFx0XFx0aWYgKHJldCA9PSAtRUZBVUxUKVxcbjE5OTg6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTk5OTpcXHRcXG4yMDAwOlxcdFxcdC8qIGNvcHkgIyBvZiBlbnRyaWVzIGFuZCBuZXh0IGJhdGNoICovXFxuMjAwMTpcXHRcXHR1YmF0Y2ggPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cXHUwMDNlYmF0Y2gub3V0X2JhdGNoKTtcXG4yMDAyOlxcdFxcdGlmIChjb3B5X3RvX3VzZXIodWJhdGNoLCBcXHUwMDI2YmF0Y2gsIHNpemVvZihiYXRjaCkpIHx8XFxuMjAwMzpcXHRcXHQgICAgcHV0X3VzZXIodG90YWwsIFxcdTAwMjZ1YXR0ci1cXHUwMDNlYmF0Y2guY291bnQpKVxcbjIwMDQ6XFx0XFx0XFx0cmV0ID0gLUVGQVVMVDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MTA6MTcuODc1NTIwODgyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzMzQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDMwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMDMwOlxcdFxcdGlmIChwdXRfdXNlcigwLCBcXHUwMDI2dWF0dHItXFx1MDAzZWJhdGNoLmNvdW50KSlcXG4yMDMxOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjIwMzI6XFx0XFxuMjAzMzpcXHRcXHRrZXkgPSBrdm1hbGxvYyhtYXAtXFx1MDAzZWtleV9zaXplLCBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7XFxuMjAzNDpcXHRcXHRpZiAoIWtleSlcXG4yMDM1OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjIwMzY6XFx0XFxuMjAzNzpcXHRcXHRmb3IgKGNwID0gMDsgY3AgXFx1MDAzYyBtYXhfY291bnQ7IGNwKyspIHtcXG4yMDM4OlxcdFxcdFxcdGVyciA9IC1FRkFVTFQ7XFxuMjAzOTpcXHRcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoa2V5LCBrZXlzICsgKHNpemVfdCljcCAqIG1hcC1cXHUwMDNla2V5X3NpemUsXFxuMjA0MDpcXHRcXHRcXHRcXHRcXHQgICBtYXAtXFx1MDAzZWtleV9zaXplKSlcXG4yMDQxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjIwNDI6XFx0XFxuMjA0MzpcXHRcXHRcXHRpZiAoYnBmX21hcF9pc19vZmZsb2FkZWQobWFwKSkge1xcbjIwNDQ6XFx0XFx0XFx0XFx0ZXJyID0gYnBmX21hcF9vZmZsb2FkX2RlbGV0ZV9lbGVtKG1hcCwga2V5KTtcXG4yMDQ1OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjIwNDY6XFx0XFx0XFx0fVxcbjIwNDc6XFx0XFxuMjA0ODpcXHRcXHRcXHRicGZfZGlzYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcXG4yMDQ5OlxcdFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4yMDUwOlxcdFxcdFxcdGVyciA9IG1hcC1cXHUwMDNlb3BzLVxcdTAwM2VtYXBfZGVsZXRlX2VsZW0obWFwLCBrZXkpO1xcbjIwNTE6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMjA1MjpcXHRcXHRcXHRicGZfZW5hYmxlX2luc3RydW1lbnRhdGlvbigpO1xcbjIwNTM6XFx0XFx0XFx0aWYgKGVycilcXG4yMDU0OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjIwNTU6XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuMjA1NjpcXHRcXHR9XFxuMjA1NzpcXHRcXHRpZiAoY29weV90b191c2VyKFxcdTAwMjZ1YXR0ci1cXHUwMDNlYmF0Y2guY291bnQsIFxcdTAwMjZjcCwgc2l6ZW9mKGNwKSkpXFxuMjA1ODpcXHRcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbjIwNTk6XFx0XFxuMjA2MDpcXHRcXHRrdmZyZWUoa2V5KTtcXG4yMDYxOlxcdFxcbjIwNjI6XFx0XFx0cmV0dXJuIGVycjtcXG4yMDYzOlxcdH1cXG4yMDY0OlxcdFxcbjIwNjU6XFx0aW50IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqbWFwX2ZpbGUsXFxuMjA2NjpcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbjIwNjc6XFx0XFx0XFx0XFx0ICAgICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKVxcbjIwNjg6XFx0e1xcbjIwNjk6XFx0XFx0dm9pZCBfX3VzZXIgKnZhbHVlcyA9IHU2NF90b191c2VyX3B0cihhdHRyLVxcdTAwM2ViYXRjaC52YWx1ZXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoxMDoxNy44NzU4NTYyNzJaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI3NDIyNzcxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBhcyBhIHN1bW1hcnksIHdyaXR0ZW4gYXMgaWYgaXQncyBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgQlAgRiBJc3N1ZSoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZyB3ZSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgY29kZSBhIGJpdCBtb3JlIG9uIHRoaXMgb25lLiBJJ3ZlIGdvdCBhIGh1bmNoIGFib3V0IHRoZSBCUEYgc3lzdGVtIGNhbGwgaW1wbGVtZW50YXRpb24sIGFuZCBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBzcGVjaWZpYy4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBjbG9zZWx5IGF0IHRoZSBga2VybmVsL2JwZi9zeXNjYWxsLmNgIGZpbGUuIEknbSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gbGluZXMgMjE3MCB0aHJvdWdoIDIyMDAuIFRoYXQgc2VjdGlvbiBsaWtlbHkgZGVhbHMgd2l0aCBbaW5zZXJ0IHlvdXIgZXhwZXJ0IGtub3dsZWRnZSBoZXJlLCBlLmcuLCBlcnJvciBoYW5kbGluZywgYSBzcGVjaWZpYyBpbnN0cnVjdGlvbiBzZXQsIHJlc291cmNlIGFsbG9jYXRpb24sIGV0Yy5dLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIFttZW50aW9uIHdoYXQgeW91J3JlIHNwZWNpZmljYWxseSBzZWFyY2hpbmcgZm9yLCBlLmcuLCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBib3VuZGFyeSBjb25kaXRpb25zLCB1bmV4cGVjdGVkIHJldHVybiB2YWx1ZXMsIGV0Yy5dIGluIHRoYXQgcmVnaW9uLiBMZXQncyBzZWUgaWYgdGhpcyBhbGlnbnMgd2l0aCB0aGUgc3ltcHRvbXMgd2UncmUgb2JzZXJ2aW5nLiBJdCBpcyBsaWtlbHkgdGhlIGFyZWEgb2YgY29kZSB0aGF0IEkgaGF2ZSBoYWQgY29uY2VybnMgYWJvdXQgZ2l2ZW4gW3JlYXNvbl0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NjMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSIsInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjEwOjIwLjE1MDA4OTI0NloiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzI3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjE3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjE3MDpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4yMTcxOlxcdFxcdFxcdGlmIChlcnIpXFxuMjE3MjpcXHRcXHRcXHRcXHRicmVhaztcXG4yMTczOlxcdFxcdFxcdGVyciA9IGJwZl9tYXBfY29weV92YWx1ZShtYXAsIGtleSwgdmFsdWUsXFxuMjE3NDpcXHRcXHRcXHRcXHRcXHRcXHQgYXR0ci1cXHUwMDNlYmF0Y2guZWxlbV9mbGFncyk7XFxuMjE3NTpcXHRcXG4yMTc2OlxcdFxcdFxcdGlmIChlcnIgPT0gLUVOT0VOVClcXG4yMTc3OlxcdFxcdFxcdFxcdGdvdG8gbmV4dF9rZXk7XFxuMjE3ODpcXHRcXG4yMTc5OlxcdFxcdFxcdGlmIChlcnIpXFxuMjE4MDpcXHRcXHRcXHRcXHRnb3RvIGZyZWVfYnVmO1xcbjIxODE6XFx0XFxuMjE4MjpcXHRcXHRcXHRpZiAoY29weV90b191c2VyKGtleXMgKyAoc2l6ZV90KWNwICogbWFwLVxcdTAwM2VrZXlfc2l6ZSwga2V5LFxcbjIxODM6XFx0XFx0XFx0XFx0XFx0IG1hcC1cXHUwMDNla2V5X3NpemUpKSB7XFxuMjE4NDpcXHRcXHRcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbjIxODU6XFx0XFx0XFx0XFx0Z290byBmcmVlX2J1ZjtcXG4yMTg2OlxcdFxcdFxcdH1cXG4yMTg3OlxcdFxcdFxcdGlmIChjb3B5X3RvX3VzZXIodmFsdWVzICsgKHNpemVfdCljcCAqIHZhbHVlX3NpemUsIHZhbHVlLCB2YWx1ZV9zaXplKSkge1xcbjIxODg6XFx0XFx0XFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4yMTg5OlxcdFxcdFxcdFxcdGdvdG8gZnJlZV9idWY7XFxuMjE5MDpcXHRcXHRcXHR9XFxuMjE5MTpcXHRcXG4yMTkyOlxcdFxcdFxcdGNwKys7XFxuMjE5MzpcXHRuZXh0X2tleTpcXG4yMTk0OlxcdFxcdFxcdGlmICghcHJldl9rZXkpXFxuMjE5NTpcXHRcXHRcXHRcXHRwcmV2X2tleSA9IGJ1Zl9wcmV2a2V5O1xcbjIxOTY6XFx0XFxuMjE5NzpcXHRcXHRcXHRzd2FwKHByZXZfa2V5LCBrZXkpO1xcbjIxOTg6XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuMjE5OTpcXHRcXHR9XFxuMjIwMDpcXHRcXG4yMjAxOlxcdFxcdGlmIChlcnIgPT0gLUVGQVVMVClcXG4yMjAyOlxcdFxcdFxcdGdvdG8gZnJlZV9idWY7XFxuMjIwMzpcXHRcXG4yMjA0OlxcdFxcdGlmICgoY29weV90b191c2VyKFxcdTAwMjZ1YXR0ci1cXHUwMDNlYmF0Y2guY291bnQsIFxcdTAwMjZjcCwgc2l6ZW9mKGNwKSkgfHxcXG4yMjA1OlxcdFxcdFxcdCAgICAoY3AgXFx1MDAyNlxcdTAwMjYgY29weV90b191c2VyKHVvYmF0Y2gsIHByZXZfa2V5LCBtYXAtXFx1MDAzZWtleV9zaXplKSkpKVxcbjIyMDY6XFx0XFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4yMjA3OlxcdFxcbjIyMDg6XFx0ZnJlZV9idWY6XFxuMjIwOTpcXHRcXHRrdmZyZWUoYnVmX3ByZXZrZXkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoxMDoyMC4xNTA0NjQ3OTZaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc4Nzk1ODE0MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSW50ZWdlciBPdmVyZmxvdyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgaXNzdWUgaXMgaW50ZWdlciBvdmVyZmxvdyBpbiA2NC1iaXQgYXJjaGl0ZWN0dXJlcyB3aGVuIGNhbGN1bGF0aW5nIG9mZnNldHMgYW5kIHNpemVzIGZvciBCUEYgbWFwIGJhdGNoIG9wZXJhdGlvbnMuIFNwZWNpZmljYWxseSwgdGhlIG11bHRpcGxpY2F0aW9uIG9mIGBjcCAqIG1hcC1cdTAwM2VrZXlfc2l6ZWAgKGFuZCBzaW1pbGFyIGNhbGN1bGF0aW9ucykgaXMgcGVyZm9ybWVkIHVzaW5nIDMyLWJpdCBhcml0aG1ldGljLCBwb3RlbnRpYWxseSBvdmVyZmxvd2luZyBiZWZvcmUgYmVpbmcgY2FzdCB0byBhIGBzaXplX3RgIGZvciBwb2ludGVyIGFyaXRobWV0aWMuIFRoaXMgY291bGQgbGVhZCB0byBpbmNvcnJlY3QgcG9pbnRlciBjYWxjdWxhdGlvbnMgYW5kLCBjb25zZXF1ZW50bHksIG91dC1vZi1ib3VuZHMgcmVhZHMgb3Igd3JpdGVzIGluIHVzZXIgc3BhY2Ug4oCTIGEgZGVmaW5pdGUgY29uY2Vybi5cblxuTXkgaW1tZWRpYXRlIHJlYWN0aW9uIGlzIHRvIGV2YWx1YXRlIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gTGV0J3Mgc2VlOiBhcmUgd2UgcmVhZGluZyBmcm9tIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyIHNwYWNlLCBvciB1c2luZyB1bmluaXRpYWxpemVkIGRhdGEgaW4gY29udHJvbCBmbG93PyBJJ20gcHJldHR5IGNvbmZpZGVudCB3ZSdyZSBub3QuIEV4YW1pbmluZyB0aGUgY29kZSwgYGtleXNgIGFuZCBgdmFsdWVzYCBhcmUgYWxsb2NhdGVkIGFuZCBwb3B1bGF0ZWQgZHVyaW5nIGJ1Y2tldCBpdGVyYXRpb24gaW4gYGhhc2h0YWIuY2AuIEluIGBzeXNjYWxsLmNgLCB0aGUgYGtleWAgYW5kIGB2YWx1ZWAgYnVmZmVycyBhcmUgaGFuZGxlZCBieSBgY29weV9mcm9tX3VzZXJgIG9yIHRoZSBCUEYgbWFwIG9wZXJhdGlvbnMuIFRoZSBwYXRjaCBzb2xlbHkgYWRkcmVzc2VzIGludGVnZXIgb3ZlcmZsb3cgZHVyaW5nIHBvaW50ZXIgY2FsY3VsYXRpb24gYW5kIHNpemUgZGV0ZXJtaW5hdGlvbiBmb3IgQlBGIG1hcCBiYXRjaCBvcGVyYXRpb25zLiBJdCdzIGEgcHJldmVudGl2ZSBtZWFzdXJlOyBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb24sIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcsIGFuZCBubyBsZWFrYWdlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBNb3Jlb3Zlciwgc3RhbmRhcmQgc2FuaXRpemVycyBsaWtlIEtBU0FOIGFuZCBVQlNBTiwgYWxvbmcgd2l0aCBnZW5lcmFsIHRlc3RpbmcsIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGNhdGNoIG1lbW9yeSBhY2Nlc3MgYnVncyBhbmQgaW50ZWdlciBvdmVyZmxvd3MuIEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYW5kIGxlYWtzLlxuXG5UbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbGwgZG91YmxlLWNoZWNrOiBhcmUgYW55IGtlcm5lbCBidWZmZXJzIG9yIHZhcmlhYmxlcyB1bmluaXRpYWxpemVkPyBObywgbm9uZSBvZiB0aGVzZSBhcmUuIFRoZXkgYXJlIGluaXRpYWxpemVkL2NvcGllZCBmcm9tIHRoZSBtYXAgb3IgdXNlci5cblxuTGV0J3MgcnVuIHRocm91Z2ggYSBjaGVja2xpc3QgdG8gZW5zdXJlIHdlIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nOiBEb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIG9yIG1vZGlmeSBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aGVyZSBwYWRkaW5nL2ZpZWxkcyBtaWdodCBub3QgYmUgaW5pdGlhbGl6ZWQ/IE5vLiBEb2VzIGl0IGludHJvZHVjZSBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vLiBEb2VzIGl0IGludHJvZHVjZSB1bmluaXRpYWxpemVkIGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zPyBOby4gRG9lcyBpdCBhbHRlciBib3VuZHMgY2hlY2tzIGluIGEgd2F5IHRoYXQgYWxsb3dzIGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIGJ5dGVzPyBOby5cblxuR2l2ZW4gYWxsIG9mIHRoaXMsIEknbSBjb25maWRlbnQgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGZhbHNlLlxuXG5Ob3csIHRvIHNvbGlkaWZ5IHRoZSByZWFzb25pbmcsIGxldCdzIGNvbnRyYXN0IEtBU0FOIGFuZCBLTVNBTi4gS0FTQU4vVUJTQU4gYXJlIGRpcmVjdGx5IHJlbGV2YW50IGhlcmUuIFRoZSBwYXRjaCBkZWFscyB3aXRoIGEgMzItYml0IGludGVnZXIgbXVsdGlwbGljYXRpb24gb3ZlcmZsb3cgd2hlbiBjYWxjdWxhdGluZyB1c2VyIHBvaW50ZXIgb2Zmc2V0cyBhbmQgY29weSBsZW5ndGhzIGZvciB0aGUgQlBGIGJhdGNoIG9wZXJhdGlvbnMuIEludGVnZXIgb3ZlcmZsb3csIGFuZCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgb3IgaW52YWxpZCBhZGRyZXNzIGNhbGN1bGF0aW9ucywgYXJlIHRoZSBkb21haW4gb2YgVUJTQU4vS0FTQU4uIEtNU0FOLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgc3BlY2lmaWNhbGx5IGdlYXJlZCB0b3dhcmRzIGRldGVjdGluZyB0aGUgdXNlIGFuZCBsZWFrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBwYXRjaCBvbmx5IGFkZHMgYChzaXplX3QpYCBjYXN0cyB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3cgaW4gdXNlciBwb2ludGVyIGFyaXRobWV0aWMgYW5kIHNpemUgY2FsY3VsYXRpb25zLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0ZWQsIHJlYWQsIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSdzIG5vIG5lZWQgZm9yIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3OTgsIk91dHB1dFRva2VucyI6MTkwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MTA6MzguMDMwMDQ4MTk3WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGV4cGxpY2l0IGAoc2l6ZV90KWAgY2FzdHMgdG8gdXNlciBwb2ludGVyIG9mZnNldCBhbmQgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiBCUEYgYmF0Y2ggb3BlcmF0aW9ucyAoc3VjaCBhcyBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAsIGBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoYCwgYW5kIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgKSB0byBwcmV2ZW50IDMyLWJpdCBpbnRlZ2VyIG11bHRpcGxpY2F0aW9uIG92ZXJmbG93cyBvbiA2NC1iaXQgc3lzdGVtcy5cXG5cXG5UaGVzZSBjaGFuZ2VzIHN0cmljdGx5IGZpeCBpbnRlZ2VyIGFyaXRobWV0aWMgYW5kIHVzZXIgc3BhY2UgYWRkcmVzcyBjYWxjdWxhdGlvbnMuIFRoZXkgZG8gbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMvcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCBkYXRhIGxlYWtzIHRvIHVzZXIgc3BhY2UuIEFueSBtZW1vcnkgc2FmZXR5IG9yIGFyaXRobWV0aWMgaXNzdWVzIHJlbGF0ZWQgdG8gdGhlc2UgY2FsY3VsYXRpb25zIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL1VCU0FOIGJ1aWxkcy4gSGVuY2UsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGV4cGxpY2l0IGAoc2l6ZV90KWAgY2FzdHMgdG8gdXNlciBwb2ludGVyIG9mZnNldCBhbmQgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiBCUEYgYmF0Y2ggb3BlcmF0aW9ucyAoc3VjaCBhcyBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAsIGBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoYCwgYW5kIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgKSB0byBwcmV2ZW50IDMyLWJpdCBpbnRlZ2VyIG11bHRpcGxpY2F0aW9uIG92ZXJmbG93cyBvbiA2NC1iaXQgc3lzdGVtcy5cXG5cXG5UaGVzZSBjaGFuZ2VzIHN0cmljdGx5IGZpeCBpbnRlZ2VyIGFyaXRobWV0aWMgYW5kIHVzZXIgc3BhY2UgYWRkcmVzcyBjYWxjdWxhdGlvbnMuIFRoZXkgZG8gbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMvcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCBkYXRhIGxlYWtzIHRvIHVzZXIgc3BhY2UuIEFueSBtZW1vcnkgc2FmZXR5IG9yIGFyaXRobWV0aWMgaXNzdWVzIHJlbGF0ZWQgdG8gdGhlc2UgY2FsY3VsYXRpb25zIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL1VCU0FOIGJ1aWxkcy4gSGVuY2UsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowqsjdm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 19:51:04 +0000 UTC FinishedAt: 2026-09-03 20:10:39 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "7bf591f26545f5776a4e42d08c06fd94469766dd", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "7bf591f26545f5776a4e42d08c06fd94469766dd", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "2672e84b-ebd0-404c-83a0-816cd0835854" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "generic_map_delete_batch", "generic_map_update_batch", "generic_map_lookup_batch", "htab_map_lookup_batch", "htab_map_lookup_and_delete_batch" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2VuZXJpY19tYXBfZGVsZXRlX2JhdGNoJiMzNDssCiAgICAmIzM0O2dlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCYjMzQ7LAogICAgJiMzNDtnZW5lcmljX21hcF9sb29rdXBfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9tYXBfbG9va3VwX2JhdGNoJiMzNDssCiAgICAmIzM0O2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBleHBsaWNpdCBgKHNpemVfdClgIGNhc3RzIHRvIHVzZXIgcG9pbnRlciBvZmZzZXQgYW5kIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gQlBGIGJhdGNoIG9wZXJhdGlvbnMgKHN1Y2ggYXMgYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfZGVsZXRlX2JhdGNoYCwgYGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaGAsIGFuZCBgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoYCkgdG8gcHJldmVudCAzMi1iaXQgaW50ZWdlciBtdWx0aXBsaWNhdGlvbiBvdmVyZmxvd3Mgb24gNjQtYml0IHN5c3RlbXMuXG5cblRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgZml4IGludGVnZXIgYXJpdGhtZXRpYyBhbmQgdXNlciBzcGFjZSBhZGRyZXNzIGNhbGN1bGF0aW9ucy4gVGhleSBkbyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcy9wYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIGRhdGEgbGVha3MgdG8gdXNlciBzcGFjZS4gQW55IG1lbW9yeSBzYWZldHkgb3IgYXJpdGhtZXRpYyBpc3N1ZXMgcmVsYXRlZCB0byB0aGVzZSBjYWxjdWxhdGlvbnMgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4vVUJTQU4gYnVpbGRzLiBIZW5jZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBhcml0aG1ldGljIG9mZnNldCBjb21wdXRhdGlvbnMgZHVyaW5nIHVzZXIgbWVtb3J5IGNvcHlpbmcgaW4gQlBGIGJhdGNoIG1hcCBvcGVyYXRpb25zIChnZW5lcmljIG1hcCBkZWxldGUvdXBkYXRlL2xvb2t1cCBiYXRjaCBoYW5kbGVycyBhbmQgaGFzaCB0YWJsZSBiYXRjaCBsb29rdXAtYW5kLWRlbGV0ZSkgdG8gY2FzdCBpbmRpY2VzL211bHRpcGxpZXJzIHRvIHNpemVfdCB0byBwcmV2ZW50IHBvdGVudGlhbCBpbnRlZ2VyIHRydW5jYXRpb24gb3Igb3ZlcmZsb3cuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIGZ1bGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHdpdGggQlBGX01BUF8qX0JBVENIIGNvbW1hbmRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjA5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgM2UwZDc4NTA2NzE2MGEyNzM5MTUzNTViYWQ2NGFkN2IxMmE1M2E2ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMjA6MDk6MTcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuaW5kZXggZDQwY2I1ZGQ0NDZjYS4uYmQzNzA0ZWQ5MzMzZSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvaGFzaHRhYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuQEAgLTE5NzcsMTAgJiM0MzsxOTc3LDEwIEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0YnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcbi1cdGlmIChidWNrZXRfY250IFx1MDAyNlx1MDAyNiAoY29weV90b191c2VyKHVrZXlzICYjNDM7IHRvdGFsICoga2V5X3NpemUsIGtleXMsXG4tXHQgICAga2V5X3NpemUgKiBidWNrZXRfY250KSB8fFxuLVx0ICAgIGNvcHlfdG9fdXNlcih1dmFsdWVzICYjNDM7IHRvdGFsICogdmFsdWVfc2l6ZSwgdmFsdWVzLFxuLVx0ICAgIHZhbHVlX3NpemUgKiBidWNrZXRfY250KSkpIHtcbiYjNDM7XHRpZiAoYnVja2V0X2NudCBcdTAwMjZcdTAwMjYgKGNvcHlfdG9fdXNlcih1a2V5cyAmIzQzOyAoc2l6ZV90KXRvdGFsICoga2V5X3NpemUsIGtleXMsXG4mIzQzO1x0ICAgIChzaXplX3Qpa2V5X3NpemUgKiBidWNrZXRfY250KSB8fFxuJiM0MztcdCAgICBjb3B5X3RvX3VzZXIodXZhbHVlcyAmIzQzOyAoc2l6ZV90KXRvdGFsICogdmFsdWVfc2l6ZSwgdmFsdWVzLFxuJiM0MztcdCAgICAoc2l6ZV90KXZhbHVlX3NpemUgKiBidWNrZXRfY250KSkpIHtcbiBcdFx0cmV0ID0gLUVGQVVMVDtcbiBcdFx0Z290byBhZnRlcl9sb29wO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3lzY2FsbC5jIGIva2VybmVsL2JwZi9zeXNjYWxsLmNcbmluZGV4IDY4NzRiYTE0MjRhZjAuLjczMTM4OGFlMDBhZDEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9zeXNjYWxsLmNcbkBAIC0yMDM2LDcgJiM0MzsyMDM2LDcgQEAgaW50IGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIFxuIFx0Zm9yIChjcCA9IDA7IGNwIFx1MDAzYyBtYXhfY291bnQ7IGNwJiM0MzsmIzQzOykge1xuIFx0XHRlcnIgPSAtRUZBVUxUO1xuLVx0XHRpZiAoY29weV9mcm9tX3VzZXIoa2V5LCBrZXlzICYjNDM7IGNwICogbWFwLVx1MDAzZWtleV9zaXplLFxuJiM0MztcdFx0aWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyAmIzQzOyAoc2l6ZV90KWNwICogbWFwLVx1MDAzZWtleV9zaXplLFxuIFx0XHRcdFx0ICAgbWFwLVx1MDAzZWtleV9zaXplKSlcbiBcdFx0XHRicmVhaztcbiBcbkBAIC0yMDk4LDkgJiM0MzsyMDk4LDkgQEAgaW50IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqbWFwX2ZpbGUsXG4gXG4gXHRmb3IgKGNwID0gMDsgY3AgXHUwMDNjIG1heF9jb3VudDsgY3AmIzQzOyYjNDM7KSB7XG4gXHRcdGVyciA9IC1FRkFVTFQ7XG4tXHRcdGlmIChjb3B5X2Zyb21fdXNlcihrZXksIGtleXMgJiM0MzsgY3AgKiBtYXAtXHUwMDNla2V5X3NpemUsXG4mIzQzO1x0XHRpZiAoY29weV9mcm9tX3VzZXIoa2V5LCBrZXlzICYjNDM7IChzaXplX3QpY3AgKiBtYXAtXHUwMDNla2V5X3NpemUsXG4gXHRcdCAgICBtYXAtXHUwMDNla2V5X3NpemUpIHx8XG4tXHRcdCAgICBjb3B5X2Zyb21fdXNlcih2YWx1ZSwgdmFsdWVzICYjNDM7IGNwICogdmFsdWVfc2l6ZSwgdmFsdWVfc2l6ZSkpXG4mIzQzO1x0XHQgICAgY29weV9mcm9tX3VzZXIodmFsdWUsIHZhbHVlcyAmIzQzOyAoc2l6ZV90KWNwICogdmFsdWVfc2l6ZSwgdmFsdWVfc2l6ZSkpXG4gXHRcdFx0YnJlYWs7XG4gXG4gXHRcdGVyciA9IGJwZl9tYXBfdXBkYXRlX3ZhbHVlKG1hcCwgbWFwX2ZpbGUsIGtleSwgdmFsdWUsXG5AQCAtMjE3OSwxMiAmIzQzOzIxNzksMTIgQEAgaW50IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gZnJlZV9idWY7XG4gXG4tXHRcdGlmIChjb3B5X3RvX3VzZXIoa2V5cyAmIzQzOyBjcCAqIG1hcC1cdTAwM2VrZXlfc2l6ZSwga2V5LFxuJiM0MztcdFx0aWYgKGNvcHlfdG9fdXNlcihrZXlzICYjNDM7IChzaXplX3QpY3AgKiBtYXAtXHUwMDNla2V5X3NpemUsIGtleSxcbiBcdFx0XHRcdCBtYXAtXHUwMDNla2V5X3NpemUpKSB7XG4gXHRcdFx0ZXJyID0gLUVGQVVMVDtcbiBcdFx0XHRnb3RvIGZyZWVfYnVmO1xuIFx0XHR9XG4tXHRcdGlmIChjb3B5X3RvX3VzZXIodmFsdWVzICYjNDM7IGNwICogdmFsdWVfc2l6ZSwgdmFsdWUsIHZhbHVlX3NpemUpKSB7XG4mIzQzO1x0XHRpZiAoY29weV90b191c2VyKHZhbHVlcyAmIzQzOyAoc2l6ZV90KWNwICogdmFsdWVfc2l6ZSwgdmFsdWUsIHZhbHVlX3NpemUpKSB7XG4gXHRcdFx0ZXJyID0gLUVGQVVMVDtcbiBcdFx0XHRnb3RvIGZyZWVfYnVmO1xuIFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtnZW5lcmljX21hcF9kZWxldGVfYmF0Y2gmIzM0OywKICAgICYjMzQ7Z2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoJiMzNDssCiAgICAmIzM0O2dlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCYjMzQ7LAogICAgJiMzNDtodGFiX21hcF9sb29rdXBfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYXJpdGhtZXRpYyBvZmZzZXQgY29tcHV0YXRpb25zIGR1cmluZyB1c2VyIG1lbW9yeSBjb3B5aW5nIGluIEJQRiBiYXRjaCBtYXAgb3BlcmF0aW9ucyAoZ2VuZXJpYyBtYXAgZGVsZXRlL3VwZGF0ZS9sb29rdXAgYmF0Y2ggaGFuZGxlcnMgYW5kIGhhc2ggdGFibGUgYmF0Y2ggbG9va3VwLWFuZC1kZWxldGUpIHRvIGNhc3QgaW5kaWNlcy9tdWx0aXBsaWVycyB0byBzaXplX3QgdG8gcHJldmVudCBwb3RlbnRpYWwgaW50ZWdlciB0cnVuY2F0aW9uIG9yIG92ZXJmbG93LiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB3aXRoIEJQRl9NQVBfKl9CQVRDSCBjb21tYW5kcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNlMGQ3ODUwNjcxNjBhMjczOTE1MzU1YmFkNjRhZDdiMTJhNTNhNmQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDIwOjA5OjE3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuYwppbmRleCBkNDBjYjVkZDQ0NmNhLi5iZDM3MDRlZDkzMzNlIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2hhc2h0YWIuYwpAQCAtMTk3NywxMCAmIzQzOzE5NzcsMTAgQEAgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLAogCiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJYnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKTsKLQlpZiAoYnVja2V0X2NudCAmYW1wOyZhbXA7IChjb3B5X3RvX3VzZXIodWtleXMgJiM0MzsgdG90YWwgKiBrZXlfc2l6ZSwga2V5cywKLQkgICAga2V5X3NpemUgKiBidWNrZXRfY250KSB8fAotCSAgICBjb3B5X3RvX3VzZXIodXZhbHVlcyAmIzQzOyB0b3RhbCAqIHZhbHVlX3NpemUsIHZhbHVlcywKLQkgICAgdmFsdWVfc2l6ZSAqIGJ1Y2tldF9jbnQpKSkgewomIzQzOwlpZiAoYnVja2V0X2NudCAmYW1wOyZhbXA7IChjb3B5X3RvX3VzZXIodWtleXMgJiM0MzsgKHNpemVfdCl0b3RhbCAqIGtleV9zaXplLCBrZXlzLAomIzQzOwkgICAgKHNpemVfdClrZXlfc2l6ZSAqIGJ1Y2tldF9jbnQpIHx8CiYjNDM7CSAgICBjb3B5X3RvX3VzZXIodXZhbHVlcyAmIzQzOyAoc2l6ZV90KXRvdGFsICogdmFsdWVfc2l6ZSwgdmFsdWVzLAomIzQzOwkgICAgKHNpemVfdCl2YWx1ZV9zaXplICogYnVja2V0X2NudCkpKSB7CiAJCXJldCA9IC1FRkFVTFQ7CiAJCWdvdG8gYWZ0ZXJfbG9vcDsKIAl9CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jCmluZGV4IDY4NzRiYTE0MjRhZjAuLjczMTM4OGFlMDBhZDEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jCkBAIC0yMDM2LDcgJiM0MzsyMDM2LDcgQEAgaW50IGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLAogCiAJZm9yIChjcCA9IDA7IGNwICZsdDsgbWF4X2NvdW50OyBjcCYjNDM7JiM0MzspIHsKIAkJZXJyID0gLUVGQVVMVDsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyAmIzQzOyBjcCAqIG1hcC0mZ3Q7a2V5X3NpemUsCiYjNDM7CQlpZiAoY29weV9mcm9tX3VzZXIoa2V5LCBrZXlzICYjNDM7IChzaXplX3QpY3AgKiBtYXAtJmd0O2tleV9zaXplLAogCQkJCSAgIG1hcC0mZ3Q7a2V5X3NpemUpKQogCQkJYnJlYWs7CiAKQEAgLTIwOTgsOSAmIzQzOzIwOTgsOSBAQCBpbnQgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSwKIAogCWZvciAoY3AgPSAwOyBjcCAmbHQ7IG1heF9jb3VudDsgY3AmIzQzOyYjNDM7KSB7CiAJCWVyciA9IC1FRkFVTFQ7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcihrZXksIGtleXMgJiM0MzsgY3AgKiBtYXAtJmd0O2tleV9zaXplLAomIzQzOwkJaWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyAmIzQzOyAoc2l6ZV90KWNwICogbWFwLSZndDtrZXlfc2l6ZSwKIAkJICAgIG1hcC0mZ3Q7a2V5X3NpemUpIHx8Ci0JCSAgICBjb3B5X2Zyb21fdXNlcih2YWx1ZSwgdmFsdWVzICYjNDM7IGNwICogdmFsdWVfc2l6ZSwgdmFsdWVfc2l6ZSkpCiYjNDM7CQkgICAgY29weV9mcm9tX3VzZXIodmFsdWUsIHZhbHVlcyAmIzQzOyAoc2l6ZV90KWNwICogdmFsdWVfc2l6ZSwgdmFsdWVfc2l6ZSkpCiAJCQlicmVhazsKIAogCQllcnIgPSBicGZfbWFwX3VwZGF0ZV92YWx1ZShtYXAsIG1hcF9maWxlLCBrZXksIHZhbHVlLApAQCAtMjE3OSwxMiAmIzQzOzIxNzksMTIgQEAgaW50IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLAogCQlpZiAoZXJyKQogCQkJZ290byBmcmVlX2J1ZjsKIAotCQlpZiAoY29weV90b191c2VyKGtleXMgJiM0MzsgY3AgKiBtYXAtJmd0O2tleV9zaXplLCBrZXksCiYjNDM7CQlpZiAoY29weV90b191c2VyKGtleXMgJiM0MzsgKHNpemVfdCljcCAqIG1hcC0mZ3Q7a2V5X3NpemUsIGtleSwKIAkJCQkgbWFwLSZndDtrZXlfc2l6ZSkpIHsKIAkJCWVyciA9IC1FRkFVTFQ7CiAJCQlnb3RvIGZyZWVfYnVmOwogCQl9Ci0JCWlmIChjb3B5X3RvX3VzZXIodmFsdWVzICYjNDM7IGNwICogdmFsdWVfc2l6ZSwgdmFsdWUsIHZhbHVlX3NpemUpKSB7CiYjNDM7CQlpZiAoY29weV90b191c2VyKHZhbHVlcyAmIzQzOyAoc2l6ZV90KWNwICogdmFsdWVfc2l6ZSwgdmFsdWUsIHZhbHVlX3NpemUpKSB7CiAJCQllcnIgPSAtRUZBVUxUOwogCQkJZ290byBmcmVlX2J1ZjsKIAkJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjQxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBCUEYgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIFRoaXMgcGF0Y2ggbG9va3MgbGlrZSBpdCYjMzk7cyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHksIHNwZWNpZmljYWxseSBpbnRlZ2VyIG92ZXJmbG93cywgd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLCB3aGljaCBpcyBhbHdheXMgaW50ZXJlc3RpbmcuIFRoZSBtb2RpZmljYXRpb25zIGFyZSBmb2N1c2VkIG9uIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgYW5kIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AsIHdoaWNoIGltbWVkaWF0ZWx5IHJhaXNlcyBteSBhbnRlbm5hcyBiZWNhdXNlIHRob3NlIGFyZSBjb3JlIGNvbXBvbmVudHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kICpleGFjdGx5KiBob3cgdGhlc2UgaW50ZWdlciBvdmVyZmxvd3MgYXJlIGJlaW5nIGFkZHJlc3NlZC4gSXQgc2VlbXMgcmVsYXRlZCB0byBjYWxjdWxhdGlvbnMgaW52b2x2ZWQgd2l0aCBiYXRjaCBtYXAgb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5IGludm9sdmluZyBgY29weV90b191c2VyYCBhbmQgYGNvcHlfZnJvbV91c2VyYCBhbmQgY2FsY3VsYXRpb25zIGxpa2UgYHRvdGFsICoga2V5X3NpemVgIG9yIGBjcCAqIG1hcC0mZ3Q7a2V5X3NpemVgLCB3aGVyZSBhIGBzaXplX3RgIGNhc3QgaXMgYmVpbmcgYXBwbGllZC4gVGhhdCBtYWtlcyBzZW5zZTsgaW50ZWdlciBvdmVyZmxvd3MgaW4gbWVtb3J5IGFsbG9jYXRpb24gb3Igb2Zmc2V0IGNhbGN1bGF0aW9ucyBhcmUgYSBjbGFzc2ljIHNvdXJjZSBvZiBzZWN1cml0eSBpc3N1ZXMuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGZpbGVzIGFuZCBmdW5jdGlvbnMgY2hhbmdlZCwgcHJvYmFibHkgdXNpbmcgYGdyZXBgIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGNvZGUsIG9yIHBlcmhhcHMgYHJlYWQtZmlsZWAgZGVwZW5kaW5nIG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJIG5lZWQgdG8gc2VlIHRoZSBiZWZvcmUtYW5kLWFmdGVyIGFuZCB1bmRlcnN0YW5kICpleGFjdGx5KiBob3cgdGhlIGNvZGUgaXMgYmVpbmcgZ3VhcmRlZCBub3cuIElzIGl0IHVzaW5nIGEgc2F0dXJhdGlvbiBhcml0aG1ldGljLCBjaGVja2luZyBmb3Igb3ZlcmZsb3csIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBVbmRlcnN0YW5kaW5nIHRoZSBjaG9zZW4gbWl0aWdhdGlvbiBzdHJhdGVneSBpcyBjcml0aWNhbC4gVGhpcyBpcyBhIHBvdGVudGlhbGx5IGNyaXRpY2FsIGZpeCwgYW5kIEkgbmVlZCB0byBhc3Nlc3MgaXRzIGNvcnJlY3RuZXNzIGFuZCBjb21wbGV0ZW5lc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hhc2h0YWIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTk3MDpcdFx0LyogSWYgd2UgYXJlIG5vdCBjb3B5aW5nIGRhdGEsIHdlIGNhbiBnbyB0byBuZXh0IGJ1Y2tldCBhbmQgYXZvaWRcbjE5NzE6XHRcdCAqIHVubG9ja2luZyB0aGUgcmN1LlxuMTk3MjpcdFx0ICovXG4xOTczOlx0XHRpZiAoIWJ1Y2tldF9jbnQgXHUwMDI2XHUwMDI2IChiYXRjaCAmIzQzOyAxIFx1MDAzYyBodGFiLVx1MDAzZW5fYnVja2V0cykpIHtcbjE5NzQ6XHRcdFx0YmF0Y2gmIzQzOyYjNDM7O1xuMTk3NTpcdFx0XHRnb3RvIGFnYWluX25vY29weTtcbjE5NzY6XHRcdH1cbjE5Nzc6XHRcbjE5Nzg6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMTk3OTpcdFx0YnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcbjE5ODA6XHRcdGlmIChidWNrZXRfY250IFx1MDAyNlx1MDAyNiAoY29weV90b191c2VyKHVrZXlzICYjNDM7IChzaXplX3QpdG90YWwgKiBrZXlfc2l6ZSwga2V5cyxcbjE5ODE6XHRcdCAgICAoc2l6ZV90KWtleV9zaXplICogYnVja2V0X2NudCkgfHxcbjE5ODI6XHRcdCAgICBjb3B5X3RvX3VzZXIodXZhbHVlcyAmIzQzOyAoc2l6ZV90KXRvdGFsICogdmFsdWVfc2l6ZSwgdmFsdWVzLFxuMTk4MzpcdFx0ICAgIChzaXplX3QpdmFsdWVfc2l6ZSAqIGJ1Y2tldF9jbnQpKSkge1xuMTk4NDpcdFx0XHRyZXQgPSAtRUZBVUxUO1xuMTk4NTpcdFx0XHRnb3RvIGFmdGVyX2xvb3A7XG4xOTg2Olx0XHR9XG4xOTg3Olx0XG4xOTg4Olx0XHR0b3RhbCAmIzQzOz0gYnVja2V0X2NudDtcbjE5ODk6XHRcdGJhdGNoJiM0MzsmIzQzOztcbjE5OTA6XHRcdGlmIChiYXRjaCBcdTAwM2U9IGh0YWItXHUwMDNlbl9idWNrZXRzKSB7XG4xOTkxOlx0XHRcdHJldCA9IC1FTk9FTlQ7XG4xOTkyOlx0XHRcdGdvdG8gYWZ0ZXJfbG9vcDtcbjE5OTM6XHRcdH1cbjE5OTQ6XHRcdGdvdG8gYWdhaW47XG4xOTk1Olx0XG4xOTk2Olx0YWZ0ZXJfbG9vcDpcbjE5OTc6XHRcdGlmIChyZXQgPT0gLUVGQVVMVClcbjE5OTg6XHRcdFx0Z290byBvdXQ7XG4xOTk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDUxNAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEJQRiBTeXN0ZW0gQ2FsbCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCB0cmFjayBkb3duIGEgc3BlY2lmaWMgYmVoYXZpb3IgaW4gdGhlIEJQRiBzeXN0ZW0gY2FsbCBoYW5kbGluZy4gTXkgaW5zdGluY3RzIHRlbGwgbWUgdGhlIGlzc3VlIGxpa2VseSBsaWVzIHdpdGhpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLCBwcm9iYWJseSBhcm91bmQgdGhlIGNvcmUgbG9naWMgb2YgaG93IHRoZXNlIGNhbGxzIGFyZSBwcm9jZXNzZWQuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGZldyBzdHJhdGVnaWMgYnJlYWtwb2ludHM6IEkmIzM5O20gdGhpbmtpbmcgdGhlIGNvZGUgYmxvY2tzIGF0IG9yIGFyb3VuZCBsaW5lIG51bWJlcnMgMjAzNiwgMjA5OCwgYW5kIDIxNzkgYXJlIGdvb2Qgc3RhcnRpbmcgcG9pbnRzLiBUaGV5IGxpa2VseSBkZWFsIHdpdGgga2V5IGFzcGVjdHMgb2YgdGhlIHN5c3RlbSBjYWxsIGZsb3csIGFuZCBtaWdodCBzaGVkIGxpZ2h0IG9uIHdoYXRldmVyIGlzc3VlIEkmIzM5O20gZGVidWdnaW5nLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIwMzA6XHRcdGlmIChwdXRfdXNlcigwLCBcdTAwMjZ1YXR0ci1cdTAwM2ViYXRjaC5jb3VudCkpXG4yMDMxOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuMjAzMjpcdFxuMjAzMzpcdFx0a2V5ID0ga3ZtYWxsb2MobWFwLVx1MDAzZWtleV9zaXplLCBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7XG4yMDM0Olx0XHRpZiAoIWtleSlcbjIwMzU6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4yMDM2Olx0XG4yMDM3Olx0XHRmb3IgKGNwID0gMDsgY3AgXHUwMDNjIG1heF9jb3VudDsgY3AmIzQzOyYjNDM7KSB7XG4yMDM4Olx0XHRcdGVyciA9IC1FRkFVTFQ7XG4yMDM5Olx0XHRcdGlmIChjb3B5X2Zyb21fdXNlcihrZXksIGtleXMgJiM0MzsgKHNpemVfdCljcCAqIG1hcC1cdTAwM2VrZXlfc2l6ZSxcbjIwNDA6XHRcdFx0XHRcdCAgIG1hcC1cdTAwM2VrZXlfc2l6ZSkpXG4yMDQxOlx0XHRcdFx0YnJlYWs7XG4yMDQyOlx0XG4yMDQzOlx0XHRcdGlmIChicGZfbWFwX2lzX29mZmxvYWRlZChtYXApKSB7XG4yMDQ0Olx0XHRcdFx0ZXJyID0gYnBmX21hcF9vZmZsb2FkX2RlbGV0ZV9lbGVtKG1hcCwga2V5KTtcbjIwNDU6XHRcdFx0XHRicmVhaztcbjIwNDY6XHRcdFx0fVxuMjA0NzpcdFxuMjA0ODpcdFx0XHRicGZfZGlzYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcbjIwNDk6XHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuMjA1MDpcdFx0XHRlcnIgPSBtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9kZWxldGVfZWxlbShtYXAsIGtleSk7XG4yMDUxOlx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMjA1MjpcdFx0XHRicGZfZW5hYmxlX2luc3RydW1lbnRhdGlvbigpO1xuMjA1MzpcdFx0XHRpZiAoZXJyKVxuMjA1NDpcdFx0XHRcdGJyZWFrO1xuMjA1NTpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbjIwNTY6XHRcdH1cbjIwNTc6XHRcdGlmIChjb3B5X3RvX3VzZXIoXHUwMDI2dWF0dHItXHUwMDNlYmF0Y2guY291bnQsIFx1MDAyNmNwLCBzaXplb2YoY3ApKSlcbjIwNTg6XHRcdFx0ZXJyID0gLUVGQVVMVDtcbjIwNTk6XHRcbjIwNjA6XHRcdGt2ZnJlZShrZXkpO1xuMjA2MTpcdFxuMjA2MjpcdFx0cmV0dXJuIGVycjtcbjIwNjM6XHR9XG4yMDY0Olx0XG4yMDY1Olx0aW50IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqbWFwX2ZpbGUsXG4yMDY2Olx0XHRcdFx0ICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbjIwNjc6XHRcdFx0XHQgICAgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpXG4yMDY4Olx0e1xuMjA2OTpcdFx0dm9pZCBfX3VzZXIgKnZhbHVlcyA9IHU2NF90b191c2VyX3B0cihhdHRyLVx1MDAzZWJhdGNoLnZhbHVlcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM0NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBmb3JtIG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqUmV2aWV3aW5nIEtleSBGdW5jdGlvbnMqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IHNvbWUgcGVyZm9ybWFuY2Ugb3IgZGVzaWduIGNvbnNpZGVyYXRpb25zLCBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgY292ZXJlZCBvdXIgYmFzZXMuIEkga25vdyB3ZSYjMzk7dmUgYWxyZWFkeSBsb29rZWQgYXQgWCwgWSwgYW5kIFosIGJ1dCBpdCYjMzk7cyBjcnVjaWFsIHRvIGJlIHRob3JvdWdoLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmV2aXNpdCBgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoYCBhbmQgYGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaGAuIFRoZXkmIzM5O3JlIGNvcmUgdG8gdGhlIHN5c3RlbSwgYW5kIGl0IHdvdWxkIGJlIGEgaHVnZSBtaXNzIGlmIGEgYm90dGxlbmVjayBvciBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdHkgaGFkIGJlZW4gb3Zlcmxvb2tlZCB0aGVyZS4gVGhlc2UgYmF0Y2ggb3BlcmF0aW9ucyBhcmUgZ2VuZXJhbGx5IGNvbXBsZXggYW5kIGNhbiBiZSBwZXJmb3JtYW5jZSBzZW5zaXRpdmUsIHNvIHRoYXQmIzM5O3MgdGhlIGZvY3VzLiBMZXQmIzM5O3Mgc2VlIGlmIGFueSBpbnNpZ2h0cyBwb3AgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjA5MDpcdFx0aWYgKCFrZXkpXG4yMDkxOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMjA5MjpcdFxuMjA5MzpcdFx0dmFsdWUgPSBrdm1hbGxvYyh2YWx1ZV9zaXplLCBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7XG4yMDk0Olx0XHRpZiAoIXZhbHVlKSB7XG4yMDk1Olx0XHRcdGt2ZnJlZShrZXkpO1xuMjA5NjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjIwOTc6XHRcdH1cbjIwOTg6XHRcbjIwOTk6XHRcdGZvciAoY3AgPSAwOyBjcCBcdTAwM2MgbWF4X2NvdW50OyBjcCYjNDM7JiM0MzspIHtcbjIxMDA6XHRcdFx0ZXJyID0gLUVGQVVMVDtcbjIxMDE6XHRcdFx0aWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyAmIzQzOyAoc2l6ZV90KWNwICogbWFwLVx1MDAzZWtleV9zaXplLFxuMjEwMjpcdFx0XHQgICAgbWFwLVx1MDAzZWtleV9zaXplKSB8fFxuMjEwMzpcdFx0XHQgICAgY29weV9mcm9tX3VzZXIodmFsdWUsIHZhbHVlcyAmIzQzOyAoc2l6ZV90KWNwICogdmFsdWVfc2l6ZSwgdmFsdWVfc2l6ZSkpXG4yMTA0Olx0XHRcdFx0YnJlYWs7XG4yMTA1Olx0XG4yMTA2Olx0XHRcdGVyciA9IGJwZl9tYXBfdXBkYXRlX3ZhbHVlKG1hcCwgbWFwX2ZpbGUsIGtleSwgdmFsdWUsXG4yMTA3Olx0XHRcdFx0XHRcdCAgIGF0dHItXHUwMDNlYmF0Y2guZWxlbV9mbGFncyk7XG4yMTA4Olx0XG4yMTA5Olx0XHRcdGlmIChlcnIpXG4yMTEwOlx0XHRcdFx0YnJlYWs7XG4yMTExOlx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuMjExMjpcdFx0fVxuMjExMzpcdFxuMjExNDpcdFx0aWYgKGNvcHlfdG9fdXNlcihcdTAwMjZ1YXR0ci1cdTAwM2ViYXRjaC5jb3VudCwgXHUwMDI2Y3AsIHNpemVvZihjcCkpKVxuMjExNTpcdFx0XHRlcnIgPSAtRUZBVUxUO1xuMjExNjpcdFxuMjExNzpcdFx0a3ZmcmVlKHZhbHVlKTtcbjIxMTg6XHRcdGt2ZnJlZShrZXkpO1xuMjExOTpcdFxuMjEyMDpcdFx0cmV0dXJuIGVycjtcbjIxMjE6XHR9XG4yMTIyOlx0XG4yMTIzOlx0aW50IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuMjEyNDpcdFx0XHRcdFx0ICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuMjEyNTpcdFx0XHRcdFx0ICAgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpXG4yMTI2Olx0e1xuMjEyNzpcdFx0dm9pZCBfX3VzZXIgKnVvYmF0Y2ggPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cdTAwM2ViYXRjaC5vdXRfYmF0Y2gpO1xuMjEyODpcdFx0dm9pZCBfX3VzZXIgKnViYXRjaCA9IHU2NF90b191c2VyX3B0cihhdHRyLVx1MDAzZWJhdGNoLmluX2JhdGNoKTtcbjIxMjk6XHRcdHZvaWQgX191c2VyICp2YWx1ZXMgPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cdTAwM2ViYXRjaC52YWx1ZXMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxOTIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkV4YW1pbmluZyBLZXJuZWwgQlBGIFN5c2NhbGwgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkZWVwIGRpdmluZyBpbnRvIHRoaXMgQlBGIGludmVzdGlnYXRpb24uIEkmIzM5O3ZlIGdvdCBhIGh1bmNoIGFib3V0IHRoZSBpc3N1ZSwgYW5kIEkgbmVlZCB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0gY2FsbHMgaW52b2x2ZWQuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIExldCBtZSBqdXN0IGp1bXAgb3ZlciB0byBsaW5lcyAyMTcwLTIyMDAgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB0aGVyZS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgY2FsbCBwYXRoIHdoZXJlLi4uICpbdGhpbmtpbmcgYWJvdXQgc3BlY2lmaWMgc3lzdGVtIGNhbGxzIGFuZCB0aGVpciBleHBlY3RlZCBiZWhhdmlvciBhbmQgd2hlcmUgdGhlIHBvdGVudGlhbCBwcm9ibGVtIGlzXSouLi4gdGhhdCYjMzk7cyBwcm9iYWJseSB0aGUgbW9zdCByZWxldmFudCBzZWN0aW9uIGZvciB0aGlzIHBhcnRpY3VsYXIgdXNlIGNhc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYXJndW1lbnRzIGFyZSBiZWluZyBoYW5kbGVkLCBob3cgdGhlIEJQRiBwcm9ncmFtcyBhcmUgYmVpbmcgbG9hZGVkIGFuZCB2ZXJpZmllZCwgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgYXJvdW5kLi4uICpbY29uc2lkZXJpbmcgc3BlY2lmaWMgY29kZSBlbGVtZW50cyBhbmQgc2VjdXJpdHkgY29uY2VybnNdKi4uLiBvciBhbnkgdW5leHBlY3RlZCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IHRoZXJlLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjE3MDpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjIxNzE6XHRcdFx0aWYgKGVycilcbjIxNzI6XHRcdFx0XHRicmVhaztcbjIxNzM6XHRcdFx0ZXJyID0gYnBmX21hcF9jb3B5X3ZhbHVlKG1hcCwga2V5LCB2YWx1ZSxcbjIxNzQ6XHRcdFx0XHRcdFx0IGF0dHItXHUwMDNlYmF0Y2guZWxlbV9mbGFncyk7XG4yMTc1Olx0XG4yMTc2Olx0XHRcdGlmIChlcnIgPT0gLUVOT0VOVClcbjIxNzc6XHRcdFx0XHRnb3RvIG5leHRfa2V5O1xuMjE3ODpcdFxuMjE3OTpcdFx0XHRpZiAoZXJyKVxuMjE4MDpcdFx0XHRcdGdvdG8gZnJlZV9idWY7XG4yMTgxOlx0XG4yMTgyOlx0XHRcdGlmIChjb3B5X3RvX3VzZXIoa2V5cyAmIzQzOyAoc2l6ZV90KWNwICogbWFwLVx1MDAzZWtleV9zaXplLCBrZXksXG4yMTgzOlx0XHRcdFx0XHQgbWFwLVx1MDAzZWtleV9zaXplKSkge1xuMjE4NDpcdFx0XHRcdGVyciA9IC1FRkFVTFQ7XG4yMTg1Olx0XHRcdFx0Z290byBmcmVlX2J1ZjtcbjIxODY6XHRcdFx0fVxuMjE4NzpcdFx0XHRpZiAoY29weV90b191c2VyKHZhbHVlcyAmIzQzOyAoc2l6ZV90KWNwICogdmFsdWVfc2l6ZSwgdmFsdWUsIHZhbHVlX3NpemUpKSB7XG4yMTg4Olx0XHRcdFx0ZXJyID0gLUVGQVVMVDtcbjIxODk6XHRcdFx0XHRnb3RvIGZyZWVfYnVmO1xuMjE5MDpcdFx0XHR9XG4yMTkxOlx0XG4yMTkyOlx0XHRcdGNwJiM0MzsmIzQzOztcbjIxOTM6XHRuZXh0X2tleTpcbjIxOTQ6XHRcdFx0aWYgKCFwcmV2X2tleSlcbjIxOTU6XHRcdFx0XHRwcmV2X2tleSA9IGJ1Zl9wcmV2a2V5O1xuMjE5NjpcdFxuMjE5NzpcdFx0XHRzd2FwKHByZXZfa2V5LCBrZXkpO1xuMjE5ODpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbjIxOTk6XHRcdH1cbjIyMDA6XHRcbjIyMDE6XHRcdGlmIChlcnIgPT0gLUVGQVVMVClcbjIyMDI6XHRcdFx0Z290byBmcmVlX2J1ZjtcbjIyMDM6XHRcbjIyMDQ6XHRcdGlmICgoY29weV90b191c2VyKFx1MDAyNnVhdHRyLVx1MDAzZWJhdGNoLmNvdW50LCBcdTAwMjZjcCwgc2l6ZW9mKGNwKSkgfHxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjkzNwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMga2VybmVsIGNvbmZpZ3VyYXRpb24gcHV6emxlLgoKKipGaW5kaW5nIHRoZSBCUEYgU3lzY2FsbCBhbmQgSGFzaHRhYmxlIENvbmZpZ3VyYXRpb24gRmxhZ3MqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIEtjb25maWcgZmxhZ3MgYXJlIHJlc3BvbnNpYmxlIGZvciBlbmFibGluZyB0aGUgQlBGIHN5c2NhbGxzIGFuZCBoYXNodGFibGVzLiBJJiMzOTttIHRoaW5raW5nLCB0aGUgbW9zdCBzdHJhaWdodGZvcndhcmQgYXBwcm9hY2ggaXMgdG8gaHVudCBmb3IgdGhvc2UgQlBGLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgZGlyZWN0bHkgd2l0aGluIHRoZSBLY29uZmlnIGZpbGVzLiBUaGUga2VybmVsIGJ1aWxkIHN5c3RlbSBzaG91bGQgbWFrZSB0aGF0IHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBvYnZpb3VzIHBsYWNlczogYGluaXQvS2NvbmZpZ2AgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBib290LXJlbGF0ZWQgZmVhdHVyZXMsIGFuZCB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgIHNob3VsZCBjb250YWluIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gYml0cyBnaXZlbiBCUEYmIzM5O3MgaW5jcmVhc2luZyBpbXBvcnRhbmNlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBncmVwIHVuY292ZXJzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoYXNodGFiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT0xMD1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfaXRlci5vIG1hcF9pdGVyLm8gdGFza19pdGVyLm8gcHJvZ19pdGVyLm8gbGlua19pdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gaGFzaHRhYi5vIGFycmF5bWFwLm8gcGVyY3B1X2ZyZWVsaXN0Lm8gYnBmX2xydV9saXN0Lm8gbHBtX3RyaWUubyBtYXBfaW5fbWFwLm8gYmxvb21fZmlsdGVyLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMTItb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gbG9jYWxfc3RvcmFnZS5vIHF1ZXVlX3N0YWNrX21hcHMubyByaW5nYnVmLm8gYnBmX2luc25fYXJyYXkub1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTExLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3JhbmRvbS5oXHUwMDNlXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoxMjojaW5jbHVkZSBcdTAwM2NsaW51eC9yaGFzaHRhYmxlLmhcdTAwM2Vcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTEzLSNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvYnRmLmhcdTAwM2Vcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz04Nj1zdHJ1Y3QgYnBmX2h0YWIge1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTk2LVx0c3RydWN0IGh0YWJfZWxlbSAqX19wZXJjcHUgKmV4dHJhX2VsZW1zO1xua2VybmVsL2JwZi9oYXNodGFiLmM6OTc6XHQvKiBudW1iZXIgb2YgZWxlbWVudHMgaW4gbm9uLXByZWFsbG9jYXRlZCBoYXNodGFibGUgYXJlIGtlcHRcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTk4LVx0ICogaW4gZWl0aGVyIHBjb3VudCBvciBjb3VudFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI3Mz1zdGF0aWMgdm9pZCBodGFiX2ZyZWVfZWxlbXMoc3RydWN0IGJwZl9odGFiICpodGFiKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5OC0gKlxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk5OiAqIEluIGhhc2h0YWIuYywgdG8gYXZvaWQgZGVhZGxvY2ssIGxvY2sgYWNxdWlzaXRpb24gb2Zcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwMC0gKiBidWNrZXRfbG9jayBmb2xsb3dlZCBieSBscnVfbG9jayBpcyBub3QgYWxsb3dlZC4gSW4gc3VjaCBjYXNlcyxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNzUxPXN0cnVjdCBicGZfcmh0YWIge1xua2VybmVsL2JwZi9oYXNodGFiLmMtMjc1Mi1cdHN0cnVjdCBicGZfbWFwIG1hcDtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI3NTM6XHRzdHJ1Y3Qgcmhhc2h0YWJsZSBodDtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3NTQtXHRzdHJ1Y3QgYnBmX21lbV9hbGxvYyBtYTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzU4LVxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjc1OTpzdGF0aWMgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHJodGFiX3BhcmFtcyA9IHtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3NjAtXHQuaGVhZF9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3Qgcmh0YWJfZWxlbSwgbm9kZSksXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9Mjc2ND1zdGF0aWMgaW5saW5lIHZvaWQgKnJodGFiX2VsZW1fdmFsdWUoc3RydWN0IHJodGFiX2VsZW0gKmwsIHUzMiBrZXlfc2l6ZSlcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzY5LS8qIFNwZWNpYWxpemUgaGFzaCBmdW5jdGlvbiBhbmQgb2JqY21wIGZvciBsb25nIHNpemVkIGtleSAqL1xua2VybmVsL2JwZi9oYXNodGFiLmM6Mjc3MDpzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCByaHRhYl9rZXlfY21wX2xvbmcoc3RydWN0IHJoYXNodGFibGVfY29tcGFyZV9hcmcgKmFyZyxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3NzEtXHRcdFx0XHRcdCAgICAgIGNvbnN0IHZvaWQgKnB0cilcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNzc5PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTMyIHJodGFiX2hhc2hmbl9sb25nKGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBsZW4sIHUzMiBzZWVkKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3ODUtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNzg2OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgcmh0YWJfcGFyYW1zX2xvbmcgPSB7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzg3LVx0LmhlYWRfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHJodGFiX2VsZW0sIG5vZGUpLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI3OTQ9c3RhdGljIHN0cnVjdCBicGZfbWFwICpyaHRhYl9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzk1LXtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI3OTY6XHRzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgcGFyYW1zO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMjc5Ny1cdHN0cnVjdCBicGZfcmh0YWIgKnJodGFiO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4MjMtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyODI0Olx0ZXJyID0gcmhhc2h0YWJsZV9pbml0KFx1MDAyNnJodGFiLVx1MDAzZWh0LCBcdTAwMjZwYXJhbXMpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMjgyNS1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjgyNy1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI4Mjg6XHQvKiBTZXQgbWF4X2VsZW1zIGFmdGVyIHJoYXNodGFibGVfaW5pdCgpIHNpbmNlIGluaXQgemVyb2VzIHRoZSBzdHJ1Y3QgKi9cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4MjktXHRyaHRhYi1cdTAwM2VodC5tYXhfZWxlbXMgPSByaHRhYi1cdTAwM2VtYXAubWF4X2VudHJpZXM7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjgzNy1kZXN0cm95X3JodGFiOlxua2VybmVsL2JwZi9oYXNodGFiLmM6MjgzODpcdHJoYXNodGFibGVfZGVzdHJveShcdTAwMjZyaHRhYi1cdTAwM2VodCk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yODM5LWZyZWVfcmh0YWI6XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9Mjg5OD1zdGF0aWMgdm9pZCByaHRhYl9tYXBfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5MDEtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTAyOlx0cmhhc2h0YWJsZV9mcmVlX2FuZF9kZXN0cm95KFx1MDAyNnJodGFiLVx1MDAzZWh0LCByaHRhYl9mcmVlX2VsZW0sIHJodGFiKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5MDMtXHRicGZfbWVtX2FsbG9jX2Rlc3Ryb3koXHUwMDI2cmh0YWItXHUwMDNlbWEpO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI5MDc9c3RhdGljIHZvaWQgKnJodGFiX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTE0LVx0aWYgKG1hcC1cdTAwM2VrZXlfc2l6ZSA9PSBzaXplb2YobG9uZykpXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTE1Olx0XHRyZXR1cm4gcmhhc2h0YWJsZV9sb29rdXBfbGlrZWx5KFx1MDAyNnJodGFiLVx1MDAzZWh0LCBrZXksIHJodGFiX3BhcmFtc19sb25nKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5MTYtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTE3Olx0cmV0dXJuIHJoYXNodGFibGVfbG9va3VwX2xpa2VseShcdTAwMjZyaHRhYi1cdTAwM2VodCwga2V5LCByaHRhYl9wYXJhbXMpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMjkxOC19XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjkzOT1zdGF0aWMgaW50IHJodGFiX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfcmh0YWIgKnJodGFiLCBzdHJ1Y3Qgcmh0YWJfZWxlbSAqZWxlbSwgdm9pZCAqY29weSxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTQ1LVx0ICogZGlzYWJsZV9pbnN0cnVtZW50YXRpb24oKSBtaXRpZ2F0ZXMgdGhlIGRlYWRsb2NrIGZvciBwcm9ncmFtcyBydW5uaW5nIGluIE5NSSBjb250ZXh0Llxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk0NjpcdCAqIHJoYXNodGFibGUgbG9ja3MgYnVja2V0IHdpdGggbG9jYWxfaXJxX3NhdmUoKS4gT25seSBOTUkgcHJvZ3JhbXMgbWF5IHJlZW50ZXJcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5NDc6XHQgKiByaGFzaHRhYmxlIGNvZGUsIGJwZl9kaXNhYmxlX2luc3RydW1lbnRhdGlvbigpIGRpc2FibGVzIHByb2dyYW1zIHJ1bm5pbmcgaW4gTk1JLCBleGNlcHRcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5NDg6XHQgKiByYXcgdHJhY2Vwb2ludHMsIHdoaWNoIHdlIGRvbiYjMzk7dCBoYXZlIGluIHJoYXNodGFibGUuXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTQ5LVx0ICovXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjk1Mi1cdGlmIChyaHRhYi1cdTAwM2VtYXAua2V5X3NpemUgPT0gc2l6ZW9mKGxvbmcpKVxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk1MzpcdFx0ZXJyID0gcmhhc2h0YWJsZV9yZW1vdmVfZmFzdChcdTAwMjZyaHRhYi1cdTAwM2VodCwgXHUwMDI2ZWxlbS1cdTAwM2Vub2RlLCByaHRhYl9wYXJhbXNfbG9uZyk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTU0LVx0ZWxzZVxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk1NTpcdFx0ZXJyID0gcmhhc2h0YWJsZV9yZW1vdmVfZmFzdChcdTAwMjZyaHRhYi1cdTAwM2VodCwgXHUwMDI2ZWxlbS1cdTAwM2Vub2RlLCByaHRhYl9wYXJhbXMpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMjk1Ni1cbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMDMyPXN0YXRpYyBsb25nIHJodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLCB1NjQgbWFwX2ZsYWdzKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwNzQtXHRpZiAobWFwLVx1MDAzZWtleV9zaXplID09IHNpemVvZihsb25nKSlcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMwNzU6XHRcdHRtcCA9IHJoYXNodGFibGVfbG9va3VwX2dldF9pbnNlcnRfZmFzdChcdTAwMjZyaHRhYi1cdTAwM2VodCwgXHUwMDI2ZWxlbS1cdTAwM2Vub2RlLCByaHRhYl9wYXJhbXNfbG9uZyk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMDc2LVx0ZWxzZVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzA3NzpcdFx0dG1wID0gcmhhc2h0YWJsZV9sb29rdXBfZ2V0X2luc2VydF9mYXN0KFx1MDAyNnJodGFiLVx1MDAzZWh0LCBcdTAwMjZlbGVtLVx1MDAzZW5vZGUsIHJodGFiX3BhcmFtcyk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMDc4LVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMxMTY9c3RhdGljIHZvaWQgcmh0YWJfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cyhzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxMTgtXHRzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfcmh0YWIsIG1hcCk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTE5Olx0c3RydWN0IHJoYXNodGFibGVfaXRlciBpdGVyO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzEyMC1cdHN0cnVjdCByaHRhYl9lbGVtICplbGVtO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxMzItXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTMzOlx0cmhhc2h0YWJsZV93YWxrX2VudGVyKFx1MDAyNnJodGFiLVx1MDAzZWh0LCBcdTAwMjZpdGVyKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxMzQ6XHRyaGFzaHRhYmxlX3dhbGtfc3RhcnQoXHUwMDI2aXRlcik7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTM1LVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzEzNjpcdHdoaWxlICgoZWxlbSA9IHJoYXNodGFibGVfd2Fsa19uZXh0KFx1MDAyNml0ZXIpKSkge1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzEzNy1cdFx0aWYgKElTX0VSUihlbGVtKSkge1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxNDUtXHRcdGlmIChuZWVkX3Jlc2NoZWQoKSkgeyAvKiBBdm9pZCBzdGFsbHMgb24gbGFyZ2UgbWFwcyAqL1xua2VybmVsL2JwZi9oYXNodGFiLmM6MzE0NjpcdFx0XHRyaGFzaHRhYmxlX3dhbGtfc3RvcChcdTAwMjZpdGVyKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxNDctXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTQ4Olx0XHRcdHJoYXNodGFibGVfd2Fsa19zdGFydChcdTAwMjZpdGVyKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxNDktXHRcdH1cbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTUxLVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzE1MjpcdHJoYXNodGFibGVfd2Fsa19zdG9wKFx1MDAyNml0ZXIpO1xua2VybmVsL2JwZi9oYXNodGFiLmM6MzE1MzpcdHJoYXNodGFibGVfd2Fsa19leGl0KFx1MDAyNml0ZXIpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzE1NC1cdFdSSVRFX09OQ0Uocmh0YWItXHUwMDNlZnJlZWluZ19pbnRlcm5hbCwgZmFsc2UpO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMxNTc9c3RhdGljIGludCByaHRhYl9tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dF9rZXkpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzE2Mi1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxNjM6XHRlbGVtID0gcmhhc2h0YWJsZV9uZXh0X2tleShcdTAwMjZyaHRhYi1cdTAwM2VodCwga2V5KTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxNjQtXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzE2Ni1cdGlmIChQVFJfRVJSKGVsZW0pID09IC1FTk9FTlQpXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTY3Olx0XHRlbGVtID0gcmhhc2h0YWJsZV9uZXh0X2tleShcdTAwMjZyaHRhYi1cdTAwM2VodCwgTlVMTCk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTY4LVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMxNzg9c3RhdGljIHZvaWQgcmh0YWJfbWFwX3NlcV9zaG93X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzE4MS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxODI6XHQvKiBHdWFyYW50ZWUgdGhhdCBoYXNodGFiIHZhbHVlIGlzIG5vdCBmcmVlZCAqL1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzE4My1cdGd1YXJkKHJjdSkoKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMTk1PXN0YXRpYyBsb25nIGJwZl9lYWNoX3JoYXNoX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgYnBmX2NhbGxiYWNrX3QgY2FsbGJhY2tfZm4sXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzIxMC1cdC8qXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMjExOlx0ICogQmVzdC1lZmZvcnQgaXRlcmF0aW9uOiBpZiByaGFzaHRhYmxlIGlzIGNvbmN1cnJlbnRseSByZXNpemVkIG9yXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMjEyLVx0ICogZWxlbWVudHMgYXJlIGRlbGV0ZWQvaW5zZXJ0ZWQsIHRoZXJlIG1heSBiZSBtaXNzZWQgb3IgZHVwbGljYXRlXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzIxNC1cdCAqL1xua2VybmVsL2JwZi9oYXNodGFiLmM6MzIxNTpcdHdoaWxlICgoZWxlbSA9IHJoYXNodGFibGVfbmV4dF9rZXkoXHUwMDI2cmh0YWItXHUwMDNlaHQsIHByZXZfa2V5KSkpIHtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyMTYtXHRcdGlmIChJU19FUlIoZWxlbSkpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzIzMz1zdGF0aWMgdTY0IHJodGFiX21hcF9tZW1fdXNhZ2UoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcClcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMjM3LVxua2VybmVsL2JwZi9oYXNodGFiLmM6MzIzODpcdC8qIEV4Y2x1ZGVzIHJoYXNodGFibGUgYnVja2V0IG92ZXJoZWFkICh+IG5lbGVtcyAqIHNpemVvZih2b2lkICopIGF0IDc1JSBsb2FkKS4gKi9cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyMzktXHRudW1fZW50cmllcyA9IGF0b21pY19yZWFkKFx1MDAyNnJodGFiLVx1MDAzZWh0Lm5lbGVtcyk7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzI0Mz1zdGF0aWMgaW50IF9fcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzMxNy1cdH0gZWxzZSB7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMzE4Olx0XHRlbGVtID0gcmhhc2h0YWJsZV9uZXh0X2tleShcdTAwMjZyaHRhYi1cdTAwM2VodCwgTlVMTCk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzE5LVx0fVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzMjgtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMzI5Olx0XHRlbGVtID0gcmhhc2h0YWJsZV9uZXh0X2tleShcdTAwMjZyaHRhYi1cdTAwM2VodCwgZHN0X2tleSk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzMwLVx0XHRkc3Rfa2V5ICYjNDM7PSBrZXlfc2l6ZTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMzkxPXN0cnVjdCBicGZfaXRlcl9zZXFfcmhhc2hfbWFwX2luZm8ge1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzOTMtXHRzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYjtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMzOTQ6XHRzdHJ1Y3Qgcmhhc2h0YWJsZV9pdGVyIGl0ZXI7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzk1LX07XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzM5Nz1zdGF0aWMgdm9pZCAqYnBmX3JoYXNoX21hcF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0MDItXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNDAzOlx0cmhhc2h0YWJsZV93YWxrX3N0YXJ0KFx1MDAyNmluZm8tXHUwMDNlaXRlcik7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNDA0LVx0Lypcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNDA5LVx0ZG8ge1xua2VybmVsL2JwZi9oYXNodGFiLmM6MzQxMDpcdFx0ZWxlbSA9IHJoYXNodGFibGVfd2Fsa19wZWVrKFx1MDAyNmluZm8tXHUwMDNlaXRlcik7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNDExLVx0fSB3aGlsZSAoUFRSX0VSUihlbGVtKSA9PSAtRUFHQUlOKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zNDIxPXN0YXRpYyB2b2lkICpicGZfcmhhc2hfbWFwX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcylcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNDI5LVx0ZG8ge1xua2VybmVsL2JwZi9oYXNodGFiLmM6MzQzMDpcdFx0ZWxlbSA9IHJoYXNodGFibGVfd2Fsa19uZXh0KFx1MDAyNmluZm8tXHUwMDNlaXRlcik7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNDMxLVx0fSB3aGlsZSAoUFRSX0VSUihlbGVtKSA9PSAtRUFHQUlOKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zNDY3PXN0YXRpYyB2b2lkIGJwZl9yaGFzaF9tYXBfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzQ3NC1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjM0NzU6XHRyaGFzaHRhYmxlX3dhbGtfc3RvcChcdTAwMjZpbmZvLVx1MDAzZWl0ZXIpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzQ3Ni19XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzQ3OD1zdGF0aWMgaW50IGJwZl9pdGVyX2luaXRfcmhhc2hfbWFwKHZvaWQgKnByaXZfZGF0YSwgc3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvICphdXgpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMzQ4NS1cdGluZm8tXHUwMDNlcmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3JodGFiLCBtYXApO1xua2VybmVsL2JwZi9oYXNodGFiLmM6MzQ4NjpcdHJoYXNodGFibGVfd2Fsa19lbnRlcihcdTAwMjZpbmZvLVx1MDAzZXJodGFiLVx1MDAzZWh0LCBcdTAwMjZpbmZvLVx1MDAzZWl0ZXIpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMzQ4Ny1cdHJldHVybiAwO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTM0OTA9c3RhdGljIHZvaWQgYnBmX2l0ZXJfZmluaV9yaGFzaF9tYXAodm9pZCAqcHJpdl9kYXRhKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0OTMtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNDk0Olx0cmhhc2h0YWJsZV93YWxrX2V4aXQoXHUwMDI2aW5mby1cdTAwM2VpdGVyKTtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0OTUtXHRicGZfbWFwX3B1dF93aXRoX3VyZWYoaW5mby1cdTAwM2VtYXApO1xuLS1cbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy01LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2J0Zi5oXHUwMDNlXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NjojaW5jbHVkZSBcdTAwM2NsaW51eC9oYXNodGFibGUuaFx1MDAzZVxua2VybmVsL2JwZi9saXZlbmVzcy5jLTctI2luY2x1ZGUgXHUwMDNjbGludXgvamhhc2guaFx1MDAzZVxuLS1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTE0LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb2NfbnMuaFx1MDAzZVxua2VybmVsL2JwZi9vZmZsb2FkLmM6MTU6I2luY2x1ZGUgXHUwMDNjbGludXgvcmhhc2h0YWJsZS5oXHUwMDNlXG5rZXJuZWwvYnBmL29mZmxvYWQuYy0xNi0jaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuLS1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jPTMzPXN0cnVjdCBicGZfb2ZmbG9hZF9uZXRkZXYge1xuLS1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTQxLVxua2VybmVsL2JwZi9vZmZsb2FkLmM6NDI6c3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBvZmZkZXZzX3BhcmFtcyA9IHtcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTQzLVx0Lm5lbGVtX2hpbnRcdFx0PSA0LFxuLS1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTQ5LVxua2VybmVsL2JwZi9vZmZsb2FkLmM6NTA6c3RhdGljIHN0cnVjdCByaGFzaHRhYmxlIG9mZmRldnM7XG5rZXJuZWwvYnBmL29mZmxvYWQuYy01MS1cbi0tXG5rZXJuZWwvYnBmL29mZmxvYWQuYz02Mj1icGZfb2ZmbG9hZF9maW5kX25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuLS1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTY1LVxua2VybmVsL2JwZi9vZmZsb2FkLmM6NjY6XHRyZXR1cm4gcmhhc2h0YWJsZV9sb29rdXBfZmFzdChcdTAwMjZvZmZkZXZzLCBcdTAwMjZuZXRkZXYsIG9mZmRldnNfcGFyYW1zKTtcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTY3LX1cbi0tXG5rZXJuZWwvYnBmL29mZmxvYWQuYz02OT1zdGF0aWMgaW50IF9fYnBmX29mZmxvYWRfZGV2X25ldGRldl9yZWdpc3RlcihzdHJ1Y3QgYnBmX29mZmxvYWRfZGV2ICpvZmZkZXYsXG4tLVxua2VybmVsL2JwZi9vZmZsb2FkLmMtODMtXG5rZXJuZWwvYnBmL29mZmxvYWQuYzo4NDpcdGVyciA9IHJoYXNodGFibGVfaW5zZXJ0X2Zhc3QoXHUwMDI2b2ZmZGV2cywgXHUwMDI2b25kZXYtXHUwMDNlbCwgb2ZmZGV2c19wYXJhbXMpO1xua2VybmVsL2JwZi9vZmZsb2FkLmMtODUtXHRpZiAoZXJyKSB7XG4tLVxua2VybmVsL2JwZi9vZmZsb2FkLmM9MTM2PXN0YXRpYyB2b2lkIF9fYnBmX29mZmxvYWRfZGV2X25ldGRldl91bnJlZ2lzdGVyKHN0cnVjdCBicGZfb2ZmbG9hZF9kZXYgKm9mZmRldixcbi0tXG5rZXJuZWwvYnBmL29mZmxvYWQuYy0xNDQtXG5rZXJuZWwvYnBmL29mZmxvYWQuYzoxNDU6XHRvbmRldiA9IHJoYXNodGFibGVfbG9va3VwX2Zhc3QoXHUwMDI2b2ZmZGV2cywgXHUwMDI2bmV0ZGV2LCBvZmZkZXZzX3BhcmFtcyk7XG5rZXJuZWwvYnBmL29mZmxvYWQuYy0xNDYtXHRpZiAoV0FSTl9PTighb25kZXYpKVxuLS1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTE0OC1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjE0OTpcdFdBUk5fT04ocmhhc2h0YWJsZV9yZW1vdmVfZmFzdChcdTAwMjZvZmZkZXZzLCBcdTAwMjZvbmRldi1cdTAwM2VsLCBvZmZkZXZzX3BhcmFtcykpO1xua2VybmVsL2JwZi9vZmZsb2FkLmMtMTUwLVxuLS1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jPTE3OT1zdGF0aWMgaW50IF9fYnBmX3Byb2dfZGV2X2JvdW5kX2luaXQoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuLS1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTIwMS1cdFx0LyogV2hlbiBvbmx5IGJpbmRpbmcgdG8gdGhlIGRldmljZSwgZXhwbGljaXRseVxua2VybmVsL2JwZi9vZmZsb2FkLmM6MjAyOlx0XHQgKiBjcmVhdGUgYW4gZW50cnkgaW4gdGhlIGhhc2h0YWJsZS5cbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTIwMy1cdFx0ICovXG4tLVxua2VybmVsL2JwZi9vZmZsb2FkLmM9ODYxPXN0YXRpYyBpbnQgX19pbml0IGJwZl9vZmZsb2FkX2luaXQodm9pZClcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTg2Mi17XG5rZXJuZWwvYnBmL29mZmxvYWQuYzo4NjM6XHRyZXR1cm4gcmhhc2h0YWJsZV9pbml0KFx1MDAyNm9mZmRldnMsIFx1MDAyNm9mZmRldnNfcGFyYW1zKTtcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTg2NC19XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTM4Mj1zdGF0aWMgaW50IG1hcF9jcmVhdGVfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE0MzMtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxNDM0Olx0LyogZmluZCBtYXAgdHlwZSBhbmQgaW5pdCBtYXA6IGhhc2h0YWJsZSB2cyByYnRyZWUgdnMgYmxvb20gdnMgLi4uICovXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNDM1LVx0bWFwX3R5cGUgPSBhdHRyLVx1MDAzZW1hcF90eXBlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjYwNAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQlBGIEhhc2h0YWJsZSBCYXRjaCBPcGVyYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYmF0Y2ggb3BlcmF0aW9uIGltcGxlbWVudGF0aW9ucyBmb3IgQlBGIGhhc2h0YWJsZXMsIHNwZWNpZmljYWxseSB0aGUgZGVsZXRlLCB1cGRhdGUsIGFuZCBsb29rdXAgZnVuY3Rpb25zLiBJJiMzOTtsbCBzdGFydCB3aXRoIHRoZSBkZWZpbml0aW9ucyBvZjoKCiogICBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAgd2l0aGluIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AKKiAgIGBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2hgIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AKKiAgIGBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hgIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AKKiAgIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AKCk15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAuIEkgbmVlZCB0byBkZXRlcm1pbmUgaG93IGl0JiMzOTtzIHVzZWQgYW5kIHdoZXRoZXIgaXQmIzM5O3Mgc3RhdGljYWxseSBsaW5rZWQgd2l0aGluIGl0cyBtb2R1bGUgb3IgZXhwb3NlZCBmb3IgZXh0ZXJuYWwgY2FsbHMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgY29udHJvbCBhbmQgdXNlIG9mIGJhdGNoIG9wZXJhdGlvbnMuIEtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgb2YgYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgIHdpbGwgaGlnaGxpZ2h0IGhvdyBhbmQgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIEJQRiBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hhc2h0YWIuYz0xNzcxPXN0YXRpYyBpbnRcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjE3NzI6X19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTc3My1cdFx0XHRcdCAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIwMTM9aHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDE1LXtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwMTY6XHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCBmYWxzZSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwMTctXHRcdFx0XHRcdFx0ICBmYWxzZSwgdHJ1ZSk7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjAyMT1odGFiX3BlcmNwdV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDI0LXtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwMjU6XHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCB0cnVlLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjAyNi1cdFx0XHRcdFx0XHQgIGZhbHNlLCB0cnVlKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDMwPWh0YWJfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDMyLXtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwMzM6XHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCBmYWxzZSxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwMzQtXHRcdFx0XHRcdFx0ICBmYWxzZSwgZmFsc2UpO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIwMzg9aHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDQxLXtcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwNDI6XHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCB0cnVlLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA0My1cdFx0XHRcdFx0XHQgIGZhbHNlLCBmYWxzZSk7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjA0Nz1odGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNTAte1xua2VybmVsL2JwZi9oYXNodGFiLmM6MjA1MTpcdHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIGZhbHNlLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA1Mi1cdFx0XHRcdFx0XHQgIHRydWUsIHRydWUpO1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIwNTY9aHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNTkte1xua2VybmVsL2JwZi9oYXNodGFiLmM6MjA2MDpcdHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIHRydWUsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDYxLVx0XHRcdFx0XHRcdCAgdHJ1ZSwgdHJ1ZSk7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjA2NT1odGFiX2xydV9tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNjcte1xua2VybmVsL2JwZi9oYXNodGFiLmM6MjA2ODpcdHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIGZhbHNlLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA2OS1cdFx0XHRcdFx0XHQgIHRydWUsIGZhbHNlKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yMDczPWh0YWJfbHJ1X21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNzYte1xua2VybmVsL2JwZi9oYXNodGFiLmM6MjA3NzpcdHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIHRydWUsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDc4LVx0XHRcdFx0XHRcdCAgdHJ1ZSwgZmFsc2UpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDEyNQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQmF0Y2ggT3BlcmF0aW9ucyBpbiBCUEYgTWFwcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGJhdGNoIG9wZXJhdGlvbnMgYXJlIGltcGxlbWVudGVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIEJQRiBtYXBzLiBJIHNlZSBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0JiMzOTtzIGxpa2VseSBhbiBpbnRlcm5hbCB1dGlsaXR5LiBIb3dldmVyLCBvdGhlciBmdW5jdGlvbnMgbGlrZSBgaHRhYl9tYXBfbG9va3VwX2JhdGNoYCwgYW5kIGBodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAgY2FsbCBpdCwgc28gaXQmIzM5O3MgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlLiBOb3csIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGdlbmVyaWMgYmF0Y2ggb3BlcmF0aW9ucyBhcmUgc2V0IHVwLCBJIHNob3VsZCBjaGVjayBvdXQgYGtlcm5lbC9icGYvc3lzY2FsbC5jYCBmb3IgdGhlIGltcGxlbWVudGF0aW9ucyBvZiBgZ2VuZXJpY19tYXBfZGVsZXRlX2JhdGNoYCwgYGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaGAsIGFuZCBgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoYC4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlc2UgYGdlbmVyaWNfKl9iYXRjaGAgZnVuY3Rpb25zIGFyZSBub24tc3RhdGljOyBpZiB0aGV5IGFyZSwgdGhhdCYjMzk7cyBpbXBvcnRhbnQgZm9yIGhvdyB0aGV5JiMzOTtyZSBleHBvc2VkIGFuZCB1dGlsaXplZCBpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZWlyIGRlY2xhcmF0aW9ucy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGNvcmUgYmF0Y2ggZnVuY3Rpb25hbGl0eSBpcyBzdHJ1Y3R1cmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZW5lcmljX21hcF8uKl9iYXRjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYXJyYXltYXAuYz04NTg9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFycmF5X21hcF9vcHMgPSB7XG4tLVxua2VybmVsL2JwZi9hcnJheW1hcC5jLTg3NC1cdC5tYXBfY2hlY2tfYnRmID0gYXJyYXlfbWFwX2NoZWNrX2J0Zixcbmtlcm5lbC9icGYvYXJyYXltYXAuYzo4NzU6XHQubWFwX2xvb2t1cF9iYXRjaCA9IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCxcbmtlcm5lbC9icGYvYXJyYXltYXAuYzo4NzY6XHQubWFwX3VwZGF0ZV9iYXRjaCA9IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy04NzctXHQubWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzID0gbWFwX3NldF9mb3JfZWFjaF9jYWxsYmFja19hcmdzLFxuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYz04ODU9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHBlcmNwdV9hcnJheV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYy04OTktXHQubWFwX2NoZWNrX2J0ZiA9IGFycmF5X21hcF9jaGVja19idGYsXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6OTAwOlx0Lm1hcF9sb29rdXBfYmF0Y2ggPSBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2gsXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6OTAxOlx0Lm1hcF91cGRhdGVfYmF0Y2ggPSBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2gsXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtOTAyLVx0Lm1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyA9IG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyxcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM9MTUwND1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgYXJyYXlfb2ZfbWFwc19tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvYXJyYXltYXAuYy0xNTE0LVx0Lm1hcF9nZW5fbG9va3VwID0gYXJyYXlfb2ZfbWFwX2dlbl9sb29rdXAsXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6MTUxNTpcdC5tYXBfbG9va3VwX2JhdGNoID0gZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoLFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjE1MTY6XHQubWFwX3VwZGF0ZV9iYXRjaCA9IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0xNTE3LVx0Lm1hcF9jaGVja19idGYgPSBtYXBfY2hlY2tfbm9fYnRmLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxLVx0Lm1hcF91cGRhdGVfYmF0Y2ggPVx0XHRcdFxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMjpcdGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCxcdFx0XFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzLVx0Lm1hcF9kZWxldGVfYmF0Y2ggPVx0XHRcdFxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNDpcdGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzUtXG4tLVxua2VybmVsL2JwZi9scG1fdHJpZS5jPTc3NT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgdHJpZV9tYXBfb3BzID0ge1xuLS1cbmtlcm5lbC9icGYvbHBtX3RyaWUuYy03ODItXHQubWFwX2RlbGV0ZV9lbGVtID0gdHJpZV9kZWxldGVfZWxlbSxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYzo3ODM6XHQubWFwX2xvb2t1cF9iYXRjaCA9IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYzo3ODQ6XHQubWFwX3VwZGF0ZV9iYXRjaCA9IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYzo3ODU6XHQubWFwX2RlbGV0ZV9iYXRjaCA9IGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaCxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYy03ODYtXHQubWFwX2NoZWNrX2J0ZiA9IHRyaWVfY2hlY2tfYnRmLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTE5NTM9c3RhdGljIGludCBtYXBfZ2V0X25leHRfa2V5KHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTIwMDgtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyMDA5OmludCBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTIwMTAtXHRcdFx0ICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMDY0LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MjA2NTppbnQgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTIwNjYtXHRcdFx0ICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMTIyLVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MjEyMzppbnQgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMTI0LVx0XHRcdFx0ICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY0NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBCUEYgQmF0Y2ggT3BlcmF0aW9uIEVudHJ5cG9pbnQqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZXNlIEJQRiBiYXRjaCBvcGVyYXRpb25zLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB0cmFjZSB0aGUgcGF0aCBmcm9tIGEgc3lzdGVtIGNhbGwgYWxsIHRoZSB3YXkgZG93biBpbnRvIHRoZSBrZXJuZWwgY29kZSB0aGF0IGhhbmRsZXMgdGhlc2UgYmF0Y2hlcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgYGJwZl9tYXBfZG9fYmF0Y2hgIOKAkyB0aGF0IG5hbWUganVzdCBzY3JlYW1zICYjMzQ7YmF0Y2ggb3BlcmF0aW9uJiMzNDsg4oCTIGFuZCB3aGVyZSYjMzk7cyB0aGUgbW9zdCBsaWtlbHkgcGxhY2U/IFRoZSB1c3VhbCBzdXNwZWN0OiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGUgc3lzY2FsbCBtZWNoYW5pc20gZnVubmVscyBpbnRvIHRoZSBoZWFydCBvZiB0aGlzIGZ1bmN0aW9uYWxpdHkuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBoaWdoLWxldmVsIGZsb3cgYW5kIHdoZXJlIHRvIGxvb2sgZm9yIHRoZSBsb3dlci1sZXZlbCBkZXRhaWxzIG9mIHRoZSBiYXRjaCBwcm9jZXNzaW5nIGl0c2VsZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX21hcF9kb19iYXRjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jPTU2NjQ9c3RhdGljIGludCBicGZfdGFza19mZF9xdWVyeShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NzQ2LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTc0NzpzdGF0aWMgaW50IGJwZl9tYXBfZG9fYmF0Y2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NzQ4LVx0XHRcdCAgICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYzMDM9c3RhdGljIGludCBfX3N5c19icGYoZW51bSBicGZfY21kIGNtZCwgYnBmcHRyX3QgdWF0dHIsIHVuc2lnbmVkIGludCBzaXplLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0MjgtXHRjYXNlIEJQRl9NQVBfTE9PS1VQX0JBVENIOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjQyOTpcdFx0ZXJyID0gYnBmX21hcF9kb19iYXRjaChcdTAwMjZhdHRyLCB1YXR0ci51c2VyLCBCUEZfTUFQX0xPT0tVUF9CQVRDSCk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDMwLVx0XHRicmVhaztcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0MzEtXHRjYXNlIEJQRl9NQVBfTE9PS1VQX0FORF9ERUxFVEVfQkFUQ0g6XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2NDMyOlx0XHRlcnIgPSBicGZfbWFwX2RvX2JhdGNoKFx1MDAyNmF0dHIsIHVhdHRyLnVzZXIsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDMzLVx0XHRcdFx0ICAgICAgIEJQRl9NQVBfTE9PS1VQX0FORF9ERUxFVEVfQkFUQ0gpO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0MzUtXHRjYXNlIEJQRl9NQVBfVVBEQVRFX0JBVENIOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjQzNjpcdFx0ZXJyID0gYnBmX21hcF9kb19iYXRjaChcdTAwMjZhdHRyLCB1YXR0ci51c2VyLCBCUEZfTUFQX1VQREFURV9CQVRDSCk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDM3LVx0XHRicmVhaztcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0MzgtXHRjYXNlIEJQRl9NQVBfREVMRVRFX0JBVENIOlxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjQzOTpcdFx0ZXJyID0gYnBmX21hcF9kb19iYXRjaChcdTAwMjZhdHRyLCB1YXR0ci51c2VyLCBCUEZfTUFQX0RFTEVURV9CQVRDSCk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDQwLVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0MjAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmllZDogQlBGIEludGVnZXIgT3ZlcmZsb3cqKgoKT2theSwgdGhpcyBpcyBwcmltZSBmdXp6aW5nIG1hdGVyaWFsLiBBIGNyaXRpY2FsIGludGVnZXIgb3ZlcmZsb3cgd2l0aGluIHRoZSBCUEYgY29yZSBzdWJzeXN0ZW0g4oCTIGV4Y2VsbGVudCEgVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIGBicGYoMilgIHN5c2NhbGxzIHdpdGggdGhvc2UgYEJQRl9NQVBfKl9CQVRDSGAgY29tbWFuZHMgbWFrZXMgaXQgZXZlbiBtb3JlIGFwcGVhbGluZy4gRWFzeSBhY2Nlc3MgaXMga2V5IGZvciBmdXp6aW5nLgoKTXkgaW5pdGlhbCBzY2FuIGZvY3VzZXMgb24gdGhlIGZpeGVzOiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGludGVnZXIgb3ZlcmZsb3dzIGluIGFyaXRobWV0aWMgb2Zmc2V0IGNhbGN1bGF0aW9ucyDigJMgc3BlY2lmaWNhbGx5LCBgdG90YWwgKiBrZXlfc2l6ZWAgdHJhbnNmb3JtYXRpb25zIHRvIGAoc2l6ZV90KXRvdGFsICoga2V5X3NpemVgIHdpdGhpbiBmdW5jdGlvbnMgbGlrZSBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAsIGBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoYCwgYW5kIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgLiBUaGlzIGlzIHdoZXJlIHRoZSB2dWxuZXJhYmlsaXRpZXMgd2lsbCBsaWtlbHkgYmUuCgpOb3csIGJlZm9yZSBJIGRpZyBpbnRvIGNyYWZ0aW5nIHRoZSBmdXp6ZXIsIEkgbmVlZCB0byB2ZXJpZnkgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucy4gTGV0IG1lIGNoZWNrIGBpbml0L0tjb25maWdgIG9yLCBtb3JlIGxpa2VseSwgYGtlcm5lbC9icGYvS2NvbmZpZ2AgdG8gZW5zdXJlIHRoZSBjb2RlIGlzIGFjdHVhbGx5IGVuYWJsZWQgYW5kIHRoYXQgYW55IGRlcGVuZGVuY2llcyBhcmUgc2F0aXNmaWVkLiBHb3R0YSBtYWtlIHN1cmUgSSYjMzk7bSB0YXJnZXRpbmcgdGhlIHJpZ2h0IGNvZGUgcGF0aCBhbmQgdW5kZXJzdGFuZCB0aGUgY29tcGlsYXRpb24gZW52aXJvbm1lbnQgYmVmb3JlIEkgd2FzdGUgYW55IHRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjg3NQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gSHVudGluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYEJQRl9TWVNDQUxMYCB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJiMzOTttIHRoaW5raW5nLCBhIHF1aWNrIGBncmVwYCB0aHJvdWdoIHRoZSBrZXJuZWwgc291cmNlIGlzIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gc3RhcnQsIGxpa2VseSB0YXJnZXRpbmcgdGhlIGBjb25maWdgIGZpbGVzIGRpcmVjdGx5LiBJIHdhbnQgdG8gc2VlIHdoZXJlIHRoaXMgb3B0aW9uIGlzIGRlZmluZWQsIGhvdyBpdCYjMzk7cyB1c2VkLCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gVGhpcyBzaG91bGQgcXVpY2tseSByZXZlYWwgaWYgaXQmIzM5O3MgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIGJ1aWx0IGFzIGEgbW9kdWxlIGluIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zIG9yIG90aGVyIGtlcm5lbCBzdWItYXJjaGl0ZWN0dXJlcyBJIHdhbnQgdG8gZXhhbWluZS4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0byBjaGVjayB0aGUgYEtjb25maWdgIGZpbGVzLCBidXQgYWxzbyBsb29rIGZvciByZWZlcmVuY2VzIGluIGJ1aWxkIGZpbGVzIGFuZCBoZWFkZXJzIHRvIGFzc2VzcyB1c2FnZSBhbmQgaW5jbHVzaW9uIHBvaW50cy4gVGhpcyBzaG91bGQgdGVsbCBtZSBxdWlja2x5IHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBkZWVwZXIgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMjYtXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzE4OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byB0aGUgQlBGIEtlcm5lbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgQlBGIHN1YnN5c3RlbSBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLiBJJiMzOTttIGdvaW5nIHRvIG5hdmlnYXRlIGRpcmVjdGx5IHRvIGBrZXJuZWwvYnBmL0tjb25maWdgLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBzZWN0aW9uIGFyb3VuZCBsaW5lIDI3LiBIb3BlZnVsbHksIHRoaXMgd2lsbCBwcm92aWRlIHRoZSBpbml0aWFsIGNvbnRleHQgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuIFRoaXMgS2NvbmZpZyBmaWxlIHdpbGwgYmUgdGhlIHBlcmZlY3QgcGxhY2UgdG8gc3RhcnQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDIwOlx0IyBVc2VkIGJ5IGFyY2hzIHRvIHRlbGwgdGhhdCB0aGV5IHdhbnQgdGhlIEJQRiBKSVQgY29tcGlsZXIgZW5hYmxlZCBieVxuICAyMTpcdCMgZGVmYXVsdCBmb3Iga2VybmVscyB0aGF0IHdlcmUgY29tcGlsZWQgd2l0aCBCUEYgSklUIHN1cHBvcnQuXG4gIDIyOlx0Y29uZmlnIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVRcbiAgMjM6XHRcdGJvb2xcbiAgMjQ6XHRcbiAgMjU6XHRtZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbiAgMjY6XHRcbiAgMjc6XHRjb25maWcgQlBGX1NZU0NBTExcbiAgMjg6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4gIDI5Olx0XHRzZWxlY3QgQlBGXG4gIDMwOlx0XHRzZWxlY3QgSVJRX1dPUktcbiAgMzE6XHRcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxuICAzMjpcdFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxuICAzMzpcdFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcbiAgMzQ6XHRcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXG4gIDM1Olx0XHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcbiAgMzY6XHRcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXG4gIDM3Olx0XHRkZWZhdWx0IG5cbiAgMzg6XHRcdGhlbHBcbiAgMzk6XHRcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xuICA0MDpcdFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cbiAgNDE6XHRcbiAgNDI6XHRjb25maWcgQlBGX0pJVFxuICA0MzpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclwmIzM0O1xuICA0NDpcdFx0ZGVwZW5kcyBvbiBCUEZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2OTkKCQkJCQkJCW91dHB1dDogMTc0CgkJCQkJCQl0aG91Z2h0czogNDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzIFN5bWJvbCBhbmQgSW5zdHJ1Y3Rpb24gUmV2aWV3KioKCk9rYXksIGxldCYjMzk7cyBzZWUsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBmb2N1cyBzeW1ib2xzIHRvIHVzZSBoZXJlLiBJJiMzOTt2ZSBpZGVudGlmaWVkIHNldmVyYWwgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkOiBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAgKHN0YXRpYyB3aXRoaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYCksIGFuZCB0aGVuIGBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoYCwgYW5kIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgLCBhbGwgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYC4gQW5kIGEgYnVuY2ggb2YgY2FsbGVycyB0byB0aGUgZmlyc3Qgb25lOiBgaHRhYl9tYXBfbG9va3VwX2JhdGNoYCwgYGh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGh0YWJfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2hgLCBhbmQgb3RoZXJzLgoKTm93LCBhIGNyaXRpY2FsIHN0ZXA6IEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgYGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaGAsIGBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoYCwgYGh0YWJfbWFwX2xvb2t1cF9iYXRjaGAsIGFuZCBgaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgIGFyZSB0aGUgcmlnaHQgb25lcyB0byBmb2N1cyBvbi4gWWVwLCB0aGVzZSBzZWVtIHBlcmZlY3QuIFRoZXkmIzM5O3JlIHNwZWNpZmljIHRvIEJQRiBiYXRjaCBvcGVyYXRpb25zIGFuZCBkaXJlY3RseSBjYWxsIGludG8gdGhlIGNvZGUgdGhhdCYjMzk7cyBiZWVuIGNoYW5nZWQuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCBldmVyeXRoaW5nIHN0cmFpZ2h0IGluIHRoZSBpbnN0cnVjdGlvbnMuIGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byB0cnVlLiBUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIG5vbi11YmlxdWl0b3VzLCBhbmQgdGhlIGtlcm5lbCBmdW5jdGlvbnMgZGlyZWN0bHkgaGl0IHRoZSBtb2RpZmllZCBsb2dpYywgYXMgd2UganVzdCBlc3RhYmxpc2hlZC4gU3BlY2lmaWNhbGx5OiBgZ2VuZXJpY19tYXBfZGVsZXRlX2JhdGNoYCwgYGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaGAsIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgLCBgaHRhYl9tYXBfbG9va3VwX2JhdGNoYCwgYW5kIGBodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAuIFRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGNvcnJlY3RseSBzcGVjaWZpZWQgYXMgYEJQRl9TWVNDQUxMYCAod2l0aG91dCB0aGUgYENPTkZJR19gIHByZWZpeCkuIFRoZSByZWFzb25pbmcgaXMgYWxzbyBjbGVhciBhbmQgY29uY2lzZS4KCkFsbCBzZWVtcyB0byBiZSBpbiBvcmRlci4gUmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtnZW5lcmljX21hcF9kZWxldGVfYmF0Y2gmIzM0OywKICAgICYjMzQ7Z2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoJiMzNDssCiAgICAmIzM0O2dlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCYjMzQ7LAogICAgJiMzNDtodGFiX21hcF9sb29rdXBfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYXJpdGhtZXRpYyBvZmZzZXQgY29tcHV0YXRpb25zIGR1cmluZyB1c2VyIG1lbW9yeSBjb3B5aW5nIGluIEJQRiBiYXRjaCBtYXAgb3BlcmF0aW9ucyAoZ2VuZXJpYyBtYXAgZGVsZXRlL3VwZGF0ZS9sb29rdXAgYmF0Y2ggaGFuZGxlcnMgYW5kIGhhc2ggdGFibGUgYmF0Y2ggbG9va3VwLWFuZC1kZWxldGUpIHRvIGNhc3QgaW5kaWNlcy9tdWx0aXBsaWVycyB0byBzaXplX3QgdG8gcHJldmVudCBwb3RlbnRpYWwgaW50ZWdlciB0cnVuY2F0aW9uIG9yIG92ZXJmbG93LiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB3aXRoIEJQRl9NQVBfKl9CQVRDSCBjb21tYW5kcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtnZW5lcmljX21hcF9kZWxldGVfYmF0Y2gmIzM0OywKICAgICYjMzQ7Z2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoJiMzNDssCiAgICAmIzM0O2dlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCYjMzQ7LAogICAgJiMzNDtodGFiX21hcF9sb29rdXBfYmF0Y2gmIzM0OywKICAgICYjMzQ7aHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYXJpdGhtZXRpYyBvZmZzZXQgY29tcHV0YXRpb25zIGR1cmluZyB1c2VyIG1lbW9yeSBjb3B5aW5nIGluIEJQRiBiYXRjaCBtYXAgb3BlcmF0aW9ucyAoZ2VuZXJpYyBtYXAgZGVsZXRlL3VwZGF0ZS9sb29rdXAgYmF0Y2ggaGFuZGxlcnMgYW5kIGhhc2ggdGFibGUgYmF0Y2ggbG9va3VwLWFuZC1kZWxldGUpIHRvIGNhc3QgaW5kaWNlcy9tdWx0aXBsaWVycyB0byBzaXplX3QgdG8gcHJldmVudCBwb3RlbnRpYWwgaW50ZWdlciB0cnVuY2F0aW9uIG9yIG92ZXJmbG93LiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB3aXRoIEJQRl9NQVBfKl9CQVRDSCBjb21tYW5kcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoxMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZXhwbGljaXQgYChzaXplX3QpYCBjYXN0cyB0byB1c2VyIHBvaW50ZXIgb2Zmc2V0IGFuZCBsZW5ndGggY2FsY3VsYXRpb25zIGluIEJQRiBiYXRjaCBvcGVyYXRpb25zIChzdWNoIGFzIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaGAsIGBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hgLCBhbmQgYGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaGApIHRvIHByZXZlbnQgMzItYml0IGludGVnZXIgbXVsdGlwbGljYXRpb24gb3ZlcmZsb3dzIG9uIDY0LWJpdCBzeXN0ZW1zLlxuXG5UaGVzZSBjaGFuZ2VzIHN0cmljdGx5IGZpeCBpbnRlZ2VyIGFyaXRobWV0aWMgYW5kIHVzZXIgc3BhY2UgYWRkcmVzcyBjYWxjdWxhdGlvbnMuIFRoZXkgZG8gbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMvcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCBkYXRhIGxlYWtzIHRvIHVzZXIgc3BhY2UuIEFueSBtZW1vcnkgc2FmZXR5IG9yIGFyaXRobWV0aWMgaXNzdWVzIHJlbGF0ZWQgdG8gdGhlc2UgY2FsY3VsYXRpb25zIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL1VCU0FOIGJ1aWxkcy4gSGVuY2UsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDNlMGQ3ODUwNjcxNjBhMjczOTE1MzU1YmFkNjRhZDdiMTJhNTNhNmQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDIwOjA5OjE3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuYwppbmRleCBkNDBjYjVkZDQ0NmNhLi5iZDM3MDRlZDkzMzNlIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2hhc2h0YWIuYwpAQCAtMTk3NywxMCAmIzQzOzE5NzcsMTAgQEAgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLAogCiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJYnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKTsKLQlpZiAoYnVja2V0X2NudCAmYW1wOyZhbXA7IChjb3B5X3RvX3VzZXIodWtleXMgJiM0MzsgdG90YWwgKiBrZXlfc2l6ZSwga2V5cywKLQkgICAga2V5X3NpemUgKiBidWNrZXRfY250KSB8fAotCSAgICBjb3B5X3RvX3VzZXIodXZhbHVlcyAmIzQzOyB0b3RhbCAqIHZhbHVlX3NpemUsIHZhbHVlcywKLQkgICAgdmFsdWVfc2l6ZSAqIGJ1Y2tldF9jbnQpKSkgewomIzQzOwlpZiAoYnVja2V0X2NudCAmYW1wOyZhbXA7IChjb3B5X3RvX3VzZXIodWtleXMgJiM0MzsgKHNpemVfdCl0b3RhbCAqIGtleV9zaXplLCBrZXlzLAomIzQzOwkgICAgKHNpemVfdClrZXlfc2l6ZSAqIGJ1Y2tldF9jbnQpIHx8CiYjNDM7CSAgICBjb3B5X3RvX3VzZXIodXZhbHVlcyAmIzQzOyAoc2l6ZV90KXRvdGFsICogdmFsdWVfc2l6ZSwgdmFsdWVzLAomIzQzOwkgICAgKHNpemVfdCl2YWx1ZV9zaXplICogYnVja2V0X2NudCkpKSB7CiAJCXJldCA9IC1FRkFVTFQ7CiAJCWdvdG8gYWZ0ZXJfbG9vcDsKIAl9CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jCmluZGV4IDY4NzRiYTE0MjRhZjAuLjczMTM4OGFlMDBhZDEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jCkBAIC0yMDM2LDcgJiM0MzsyMDM2LDcgQEAgaW50IGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLAogCiAJZm9yIChjcCA9IDA7IGNwICZsdDsgbWF4X2NvdW50OyBjcCYjNDM7JiM0MzspIHsKIAkJZXJyID0gLUVGQVVMVDsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyAmIzQzOyBjcCAqIG1hcC0mZ3Q7a2V5X3NpemUsCiYjNDM7CQlpZiAoY29weV9mcm9tX3VzZXIoa2V5LCBrZXlzICYjNDM7IChzaXplX3QpY3AgKiBtYXAtJmd0O2tleV9zaXplLAogCQkJCSAgIG1hcC0mZ3Q7a2V5X3NpemUpKQogCQkJYnJlYWs7CiAKQEAgLTIwOTgsOSAmIzQzOzIwOTgsOSBAQCBpbnQgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSwKIAogCWZvciAoY3AgPSAwOyBjcCAmbHQ7IG1heF9jb3VudDsgY3AmIzQzOyYjNDM7KSB7CiAJCWVyciA9IC1FRkFVTFQ7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcihrZXksIGtleXMgJiM0MzsgY3AgKiBtYXAtJmd0O2tleV9zaXplLAomIzQzOwkJaWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyAmIzQzOyAoc2l6ZV90KWNwICogbWFwLSZndDtrZXlfc2l6ZSwKIAkJICAgIG1hcC0mZ3Q7a2V5X3NpemUpIHx8Ci0JCSAgICBjb3B5X2Zyb21fdXNlcih2YWx1ZSwgdmFsdWVzICYjNDM7IGNwICogdmFsdWVfc2l6ZSwgdmFsdWVfc2l6ZSkpCiYjNDM7CQkgICAgY29weV9mcm9tX3VzZXIodmFsdWUsIHZhbHVlcyAmIzQzOyAoc2l6ZV90KWNwICogdmFsdWVfc2l6ZSwgdmFsdWVfc2l6ZSkpCiAJCQlicmVhazsKIAogCQllcnIgPSBicGZfbWFwX3VwZGF0ZV92YWx1ZShtYXAsIG1hcF9maWxlLCBrZXksIHZhbHVlLApAQCAtMjE3OSwxMiAmIzQzOzIxNzksMTIgQEAgaW50IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLAogCQlpZiAoZXJyKQogCQkJZ290byBmcmVlX2J1ZjsKIAotCQlpZiAoY29weV90b191c2VyKGtleXMgJiM0MzsgY3AgKiBtYXAtJmd0O2tleV9zaXplLCBrZXksCiYjNDM7CQlpZiAoY29weV90b191c2VyKGtleXMgJiM0MzsgKHNpemVfdCljcCAqIG1hcC0mZ3Q7a2V5X3NpemUsIGtleSwKIAkJCQkgbWFwLSZndDtrZXlfc2l6ZSkpIHsKIAkJCWVyciA9IC1FRkFVTFQ7CiAJCQlnb3RvIGZyZWVfYnVmOwogCQl9Ci0JCWlmIChjb3B5X3RvX3VzZXIodmFsdWVzICYjNDM7IGNwICogdmFsdWVfc2l6ZSwgdmFsdWUsIHZhbHVlX3NpemUpKSB7CiYjNDM7CQlpZiAoY29weV90b191c2VyKHZhbHVlcyAmIzQzOyAoc2l6ZV90KWNwICogdmFsdWVfc2l6ZSwgdmFsdWUsIHZhbHVlX3NpemUpKSB7CiAJCQllcnIgPSAtRUZBVUxUOwogCQkJZ290byBmcmVlX2J1ZjsKIAkJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg1MwoJCQkJCQkJb3V0cHV0OiA3NQoJCQkJCQkJdGhvdWdodHM6IDQzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIEV2YWx1YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIG5lY2Vzc2l0YXRlcyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIE15IGZpcnN0IHN0ZXAgaXMgdG8gcmV2aXNpdCB0aGUgZXN0YWJsaXNoZWQgcmlzayBhbmQgc2FmZXR5IHBvbGljaWVzIHRvIGdldCBhIGNsZWFyIHBlcnNwZWN0aXZlLgoKRnJvbSBhIHNhZmV0eSBldmFsdWF0aW9uIHN0YW5kcG9pbnQsIHRoZSB0YXNrIGNsZWFybHkgZmFsbHMgdW5kZXIgdGhlIHB1cnZpZXcgb2YgY29kZSByZXZpZXcgYW5kIHRyaWFnZSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gc2FuaXRpemVycyDigJMgS0FTQU4gdmVyc3VzIEtNU0FOIGluIHRoaXMgY2FzZS4gSXQmIzM5O3MgYSBtYXR0ZXIgb2YgZGVmZW5zaXZlIHNlY3VyaXR5IGVuZ2luZWVyaW5nLCBxdWFsaXR5IGFzc3VyYW5jZSwgYW5kIGluLWRlcHRoIGNvZGUgYW5hbHlzaXMuIEJhc2VkIG9uIG15IGluaXRpYWwgdW5kZXJzdGFuZGluZywgdGhlIGNsYXNzaWZpY2F0aW9uIGhlcmUgaXMgJiMzNDtCZW5pZ24mIzM0OyBvciAmIzM0O05vbmUmIzM0OyBzZXZlcml0eS4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgcGF0Y2ggaXRzZWxmLiBJdCBzZWVtcyB0aGUgY29yZSBjaGFuZ2UgaW52b2x2ZXMgYWRkaW5nIGAoc2l6ZV90KWAgY2FzdHMgdG8gcG9pbnRlciBvZmZzZXQgYW5kIHNpemUgY2FsY3VsYXRpb25zIHdpdGhpbiBCUEYgYmF0Y2ggb3BlcmF0aW9ucy4gU3BlY2lmaWNhbGx5LCB0aGVzZSBjYXN0cyBhcmUgcHJlc2VudCBpbiBga2VybmVsL2JwZi9oYXNodGFiLmNgLCBpbiB0aGUgYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgIGZ1bmN0aW9uLCBhbmQgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCB3aXRoaW4gdGhlIGBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoYCwgYW5kIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgIGZ1bmN0aW9ucy4gVGhlIGNhc3RzIGFyZSBiZWluZyBhZGRlZCB0byBlbnN1cmUgdGhhdCBtdWx0aXBsaWNhdGlvbnMgb2YgaW50ZWdlcnMgdGhhdCBjb3VsZCBvdmVyZmxvdyB3aGVuIGNhbGN1bGF0aW5nIHRoZSBsb2NhdGlvbiB0byByZWFkIGZyb20vd3JpdGUgdG8gaW4gdXNlcnNwYWNlIG1lbW9yeSB3aWxsIGJlIGNhc3QgdG8gYSBzaXplX3QsIHdoaWNoIGlzIChwcm9iYWJseSkgbGFyZ2VyLgoKSW4gbW9yZSBkZXRhaWwsIHRoZSBmdW5jdGlvbnMgYWZmZWN0ZWQgaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYCBhcmUgdXNpbmcgaW50ZWdlciBhcml0aG1ldGljIHRoYXQgY291bGQgaGF2ZSBwb3RlbnRpYWxseSBvdmVyZmxvd2VkLCBhcyB3ZXJlIHRoZSBmdW5jdGlvbnMgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYC4KClRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGltcGxpY2F0aW9ucywgSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IGluIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgYW5kIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIEkmIzM5O2xsIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgZm9yIHRoYXQsIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgdHlwZXMgaW52b2x2ZWQsIHRoZSByYW5nZXMgb2YgdmFsdWVzIHRoZXkgbWlnaHQgaG9sZCwgYW5kIGhvdyB0aGVzZSBjYWxjdWxhdGlvbnMgYXJlIHVzZWQuIE9uY2UgSSBoYXZlIHRoYXQgY29udGV4dCwgSSBjYW4gbWFrZSBhIG11Y2ggbW9yZSBpbmZvcm1lZCBkZWNpc2lvbiBhYm91dCB3aGV0aGVyIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgYWN0dWFsbHkgbmVlZGVkIG9yIGlmIHRoaXMgaXMsIGFzIGl0IGFwcGVhcnMsIGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgc2FmZXR5IGZpeC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjA6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hhc2h0YWIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTk3MDpcdFx0LyogSWYgd2UgYXJlIG5vdCBjb3B5aW5nIGRhdGEsIHdlIGNhbiBnbyB0byBuZXh0IGJ1Y2tldCBhbmQgYXZvaWRcbjE5NzE6XHRcdCAqIHVubG9ja2luZyB0aGUgcmN1LlxuMTk3MjpcdFx0ICovXG4xOTczOlx0XHRpZiAoIWJ1Y2tldF9jbnQgXHUwMDI2XHUwMDI2IChiYXRjaCAmIzQzOyAxIFx1MDAzYyBodGFiLVx1MDAzZW5fYnVja2V0cykpIHtcbjE5NzQ6XHRcdFx0YmF0Y2gmIzQzOyYjNDM7O1xuMTk3NTpcdFx0XHRnb3RvIGFnYWluX25vY29weTtcbjE5NzY6XHRcdH1cbjE5Nzc6XHRcbjE5Nzg6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMTk3OTpcdFx0YnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcbjE5ODA6XHRcdGlmIChidWNrZXRfY250IFx1MDAyNlx1MDAyNiAoY29weV90b191c2VyKHVrZXlzICYjNDM7IChzaXplX3QpdG90YWwgKiBrZXlfc2l6ZSwga2V5cyxcbjE5ODE6XHRcdCAgICAoc2l6ZV90KWtleV9zaXplICogYnVja2V0X2NudCkgfHxcbjE5ODI6XHRcdCAgICBjb3B5X3RvX3VzZXIodXZhbHVlcyAmIzQzOyAoc2l6ZV90KXRvdGFsICogdmFsdWVfc2l6ZSwgdmFsdWVzLFxuMTk4MzpcdFx0ICAgIChzaXplX3QpdmFsdWVfc2l6ZSAqIGJ1Y2tldF9jbnQpKSkge1xuMTk4NDpcdFx0XHRyZXQgPSAtRUZBVUxUO1xuMTk4NTpcdFx0XHRnb3RvIGFmdGVyX2xvb3A7XG4xOTg2Olx0XHR9XG4xOTg3Olx0XG4xOTg4Olx0XHR0b3RhbCAmIzQzOz0gYnVja2V0X2NudDtcbjE5ODk6XHRcdGJhdGNoJiM0MzsmIzQzOztcbjE5OTA6XHRcdGlmIChiYXRjaCBcdTAwM2U9IGh0YWItXHUwMDNlbl9idWNrZXRzKSB7XG4xOTkxOlx0XHRcdHJldCA9IC1FTk9FTlQ7XG4xOTkyOlx0XHRcdGdvdG8gYWZ0ZXJfbG9vcDtcbjE5OTM6XHRcdH1cbjE5OTQ6XHRcdGdvdG8gYWdhaW47XG4xOTk1Olx0XG4xOTk2Olx0YWZ0ZXJfbG9vcDpcbjE5OTc6XHRcdGlmIChyZXQgPT0gLUVGQVVMVClcbjE5OTg6XHRcdFx0Z290byBvdXQ7XG4xOTk5Olx0XG4yMDAwOlx0XHQvKiBjb3B5ICMgb2YgZW50cmllcyBhbmQgbmV4dCBiYXRjaCAqL1xuMjAwMTpcdFx0dWJhdGNoID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXHUwMDNlYmF0Y2gub3V0X2JhdGNoKTtcbjIwMDI6XHRcdGlmIChjb3B5X3RvX3VzZXIodWJhdGNoLCBcdTAwMjZiYXRjaCwgc2l6ZW9mKGJhdGNoKSkgfHxcbjIwMDM6XHRcdCAgICBwdXRfdXNlcih0b3RhbCwgXHUwMDI2dWF0dHItXHUwMDNlYmF0Y2guY291bnQpKVxuMjAwNDpcdFx0XHRyZXQgPSAtRUZBVUxUO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMDMwOlx0XHRpZiAocHV0X3VzZXIoMCwgXHUwMDI2dWF0dHItXHUwMDNlYmF0Y2guY291bnQpKVxuMjAzMTpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjIwMzI6XHRcbjIwMzM6XHRcdGtleSA9IGt2bWFsbG9jKG1hcC1cdTAwM2VrZXlfc2l6ZSwgR0ZQX1VTRVIgfCBfX0dGUF9OT1dBUk4pO1xuMjAzNDpcdFx0aWYgKCFrZXkpXG4yMDM1Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMjAzNjpcdFxuMjAzNzpcdFx0Zm9yIChjcCA9IDA7IGNwIFx1MDAzYyBtYXhfY291bnQ7IGNwJiM0MzsmIzQzOykge1xuMjAzODpcdFx0XHRlcnIgPSAtRUZBVUxUO1xuMjAzOTpcdFx0XHRpZiAoY29weV9mcm9tX3VzZXIoa2V5LCBrZXlzICYjNDM7IChzaXplX3QpY3AgKiBtYXAtXHUwMDNla2V5X3NpemUsXG4yMDQwOlx0XHRcdFx0XHQgICBtYXAtXHUwMDNla2V5X3NpemUpKVxuMjA0MTpcdFx0XHRcdGJyZWFrO1xuMjA0MjpcdFxuMjA0MzpcdFx0XHRpZiAoYnBmX21hcF9pc19vZmZsb2FkZWQobWFwKSkge1xuMjA0NDpcdFx0XHRcdGVyciA9IGJwZl9tYXBfb2ZmbG9hZF9kZWxldGVfZWxlbShtYXAsIGtleSk7XG4yMDQ1Olx0XHRcdFx0YnJlYWs7XG4yMDQ2Olx0XHRcdH1cbjIwNDc6XHRcbjIwNDg6XHRcdFx0YnBmX2Rpc2FibGVfaW5zdHJ1bWVudGF0aW9uKCk7XG4yMDQ5Olx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbjIwNTA6XHRcdFx0ZXJyID0gbWFwLVx1MDAzZW9wcy1cdTAwM2VtYXBfZGVsZXRlX2VsZW0obWFwLCBrZXkpO1xuMjA1MTpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjIwNTI6XHRcdFx0YnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcbjIwNTM6XHRcdFx0aWYgKGVycilcbjIwNTQ6XHRcdFx0XHRicmVhaztcbjIwNTU6XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4yMDU2Olx0XHR9XG4yMDU3Olx0XHRpZiAoY29weV90b191c2VyKFx1MDAyNnVhdHRyLVx1MDAzZWJhdGNoLmNvdW50LCBcdTAwMjZjcCwgc2l6ZW9mKGNwKSkpXG4yMDU4Olx0XHRcdGVyciA9IC1FRkFVTFQ7XG4yMDU5Olx0XG4yMDYwOlx0XHRrdmZyZWUoa2V5KTtcbjIwNjE6XHRcbjIwNjI6XHRcdHJldHVybiBlcnI7XG4yMDYzOlx0fVxuMjA2NDpcdFxuMjA2NTpcdGludCBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGZpbGUgKm1hcF9maWxlLFxuMjA2NjpcdFx0XHRcdCAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4yMDY3Olx0XHRcdFx0ICAgICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKVxuMjA2ODpcdHtcbjIwNjk6XHRcdHZvaWQgX191c2VyICp2YWx1ZXMgPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cdTAwM2ViYXRjaC52YWx1ZXMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTYzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IGFzIGEgc3VtbWFyeSwgd3JpdHRlbiBhcyBpZiBpdCYjMzk7cyBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIEJQIEYgSXNzdWUqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyB3ZSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgY29kZSBhIGJpdCBtb3JlIG9uIHRoaXMgb25lLiBJJiMzOTt2ZSBnb3QgYSBodW5jaCBhYm91dCB0aGUgQlBGIHN5c3RlbSBjYWxsIGltcGxlbWVudGF0aW9uLCBhbmQgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgc3BlY2lmaWMuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGNsb3NlbHkgYXQgdGhlIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gbGluZXMgMjE3MCB0aHJvdWdoIDIyMDAuIFRoYXQgc2VjdGlvbiBsaWtlbHkgZGVhbHMgd2l0aCBbaW5zZXJ0IHlvdXIgZXhwZXJ0IGtub3dsZWRnZSBoZXJlLCBlLmcuLCBlcnJvciBoYW5kbGluZywgYSBzcGVjaWZpYyBpbnN0cnVjdGlvbiBzZXQsIHJlc291cmNlIGFsbG9jYXRpb24sIGV0Yy5dLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBbbWVudGlvbiB3aGF0IHlvdSYjMzk7cmUgc3BlY2lmaWNhbGx5IHNlYXJjaGluZyBmb3IsIGUuZy4sIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGJvdW5kYXJ5IGNvbmRpdGlvbnMsIHVuZXhwZWN0ZWQgcmV0dXJuIHZhbHVlcywgZXRjLl0gaW4gdGhhdCByZWdpb24uIExldCYjMzk7cyBzZWUgaWYgdGhpcyBhbGlnbnMgd2l0aCB0aGUgc3ltcHRvbXMgd2UmIzM5O3JlIG9ic2VydmluZy4gSXQgaXMgbGlrZWx5IHRoZSBhcmVhIG9mIGNvZGUgdGhhdCBJIGhhdmUgaGFkIGNvbmNlcm5zIGFib3V0IGdpdmVuIFtyZWFzb25dLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTcwOlx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMjE3MTpcdFx0XHRpZiAoZXJyKVxuMjE3MjpcdFx0XHRcdGJyZWFrO1xuMjE3MzpcdFx0XHRlcnIgPSBicGZfbWFwX2NvcHlfdmFsdWUobWFwLCBrZXksIHZhbHVlLFxuMjE3NDpcdFx0XHRcdFx0XHQgYXR0ci1cdTAwM2ViYXRjaC5lbGVtX2ZsYWdzKTtcbjIxNzU6XHRcbjIxNzY6XHRcdFx0aWYgKGVyciA9PSAtRU5PRU5UKVxuMjE3NzpcdFx0XHRcdGdvdG8gbmV4dF9rZXk7XG4yMTc4Olx0XG4yMTc5Olx0XHRcdGlmIChlcnIpXG4yMTgwOlx0XHRcdFx0Z290byBmcmVlX2J1ZjtcbjIxODE6XHRcbjIxODI6XHRcdFx0aWYgKGNvcHlfdG9fdXNlcihrZXlzICYjNDM7IChzaXplX3QpY3AgKiBtYXAtXHUwMDNla2V5X3NpemUsIGtleSxcbjIxODM6XHRcdFx0XHRcdCBtYXAtXHUwMDNla2V5X3NpemUpKSB7XG4yMTg0Olx0XHRcdFx0ZXJyID0gLUVGQVVMVDtcbjIxODU6XHRcdFx0XHRnb3RvIGZyZWVfYnVmO1xuMjE4NjpcdFx0XHR9XG4yMTg3Olx0XHRcdGlmIChjb3B5X3RvX3VzZXIodmFsdWVzICYjNDM7IChzaXplX3QpY3AgKiB2YWx1ZV9zaXplLCB2YWx1ZSwgdmFsdWVfc2l6ZSkpIHtcbjIxODg6XHRcdFx0XHRlcnIgPSAtRUZBVUxUO1xuMjE4OTpcdFx0XHRcdGdvdG8gZnJlZV9idWY7XG4yMTkwOlx0XHRcdH1cbjIxOTE6XHRcbjIxOTI6XHRcdFx0Y3AmIzQzOyYjNDM7O1xuMjE5MzpcdG5leHRfa2V5OlxuMjE5NDpcdFx0XHRpZiAoIXByZXZfa2V5KVxuMjE5NTpcdFx0XHRcdHByZXZfa2V5ID0gYnVmX3ByZXZrZXk7XG4yMTk2Olx0XG4yMTk3Olx0XHRcdHN3YXAocHJldl9rZXksIGtleSk7XG4yMTk4Olx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuMjE5OTpcdFx0fVxuMjIwMDpcdFxuMjIwMTpcdFx0aWYgKGVyciA9PSAtRUZBVUxUKVxuMjIwMjpcdFx0XHRnb3RvIGZyZWVfYnVmO1xuMjIwMzpcdFxuMjIwNDpcdFx0aWYgKChjb3B5X3RvX3VzZXIoXHUwMDI2dWF0dHItXHUwMDNlYmF0Y2guY291bnQsIFx1MDAyNmNwLCBzaXplb2YoY3ApKSB8fFxuMjIwNTpcdFx0XHQgICAgKGNwIFx1MDAyNlx1MDAyNiBjb3B5X3RvX3VzZXIodW9iYXRjaCwgcHJldl9rZXksIG1hcC1cdTAwM2VrZXlfc2l6ZSkpKSlcbjIyMDY6XHRcdFx0ZXJyID0gLUVGQVVMVDtcbjIyMDc6XHRcbjIyMDg6XHRmcmVlX2J1ZjpcbjIyMDk6XHRcdGt2ZnJlZShidWZfcHJldmtleSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3OTgKCQkJCQkJCW91dHB1dDogMTkwCgkJCQkJCQl0aG91Z2h0czogNzM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEludGVnZXIgT3ZlcmZsb3cgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgaXNzdWUgaXMgaW50ZWdlciBvdmVyZmxvdyBpbiA2NC1iaXQgYXJjaGl0ZWN0dXJlcyB3aGVuIGNhbGN1bGF0aW5nIG9mZnNldHMgYW5kIHNpemVzIGZvciBCUEYgbWFwIGJhdGNoIG9wZXJhdGlvbnMuIFNwZWNpZmljYWxseSwgdGhlIG11bHRpcGxpY2F0aW9uIG9mIGBjcCAqIG1hcC0mZ3Q7a2V5X3NpemVgIChhbmQgc2ltaWxhciBjYWxjdWxhdGlvbnMpIGlzIHBlcmZvcm1lZCB1c2luZyAzMi1iaXQgYXJpdGhtZXRpYywgcG90ZW50aWFsbHkgb3ZlcmZsb3dpbmcgYmVmb3JlIGJlaW5nIGNhc3QgdG8gYSBgc2l6ZV90YCBmb3IgcG9pbnRlciBhcml0aG1ldGljLiBUaGlzIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IHBvaW50ZXIgY2FsY3VsYXRpb25zIGFuZCwgY29uc2VxdWVudGx5LCBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHdyaXRlcyBpbiB1c2VyIHNwYWNlIOKAkyBhIGRlZmluaXRlIGNvbmNlcm4uCgpNeSBpbW1lZGlhdGUgcmVhY3Rpb24gaXMgdG8gZXZhbHVhdGUgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBMZXQmIzM5O3Mgc2VlOiBhcmUgd2UgcmVhZGluZyBmcm9tIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyIHNwYWNlLCBvciB1c2luZyB1bmluaXRpYWxpemVkIGRhdGEgaW4gY29udHJvbCBmbG93PyBJJiMzOTttIHByZXR0eSBjb25maWRlbnQgd2UmIzM5O3JlIG5vdC4gRXhhbWluaW5nIHRoZSBjb2RlLCBga2V5c2AgYW5kIGB2YWx1ZXNgIGFyZSBhbGxvY2F0ZWQgYW5kIHBvcHVsYXRlZCBkdXJpbmcgYnVja2V0IGl0ZXJhdGlvbiBpbiBgaGFzaHRhYi5jYC4gSW4gYHN5c2NhbGwuY2AsIHRoZSBga2V5YCBhbmQgYHZhbHVlYCBidWZmZXJzIGFyZSBoYW5kbGVkIGJ5IGBjb3B5X2Zyb21fdXNlcmAgb3IgdGhlIEJQRiBtYXAgb3BlcmF0aW9ucy4gVGhlIHBhdGNoIHNvbGVseSBhZGRyZXNzZXMgaW50ZWdlciBvdmVyZmxvdyBkdXJpbmcgcG9pbnRlciBjYWxjdWxhdGlvbiBhbmQgc2l6ZSBkZXRlcm1pbmF0aW9uIGZvciBCUEYgbWFwIGJhdGNoIG9wZXJhdGlvbnMuIEl0JiMzOTtzIGEgcHJldmVudGl2ZSBtZWFzdXJlOyBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb24sIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcsIGFuZCBubyBsZWFrYWdlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBNb3Jlb3Zlciwgc3RhbmRhcmQgc2FuaXRpemVycyBsaWtlIEtBU0FOIGFuZCBVQlNBTiwgYWxvbmcgd2l0aCBnZW5lcmFsIHRlc3RpbmcsIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGNhdGNoIG1lbW9yeSBhY2Nlc3MgYnVncyBhbmQgaW50ZWdlciBvdmVyZmxvd3MuIEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYW5kIGxlYWtzLgoKVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtsbCBkb3VibGUtY2hlY2s6IGFyZSBhbnkga2VybmVsIGJ1ZmZlcnMgb3IgdmFyaWFibGVzIHVuaW5pdGlhbGl6ZWQ/IE5vLCBub25lIG9mIHRoZXNlIGFyZS4gVGhleSBhcmUgaW5pdGlhbGl6ZWQvY29waWVkIGZyb20gdGhlIG1hcCBvciB1c2VyLgoKTGV0JiMzOTtzIHJ1biB0aHJvdWdoIGEgY2hlY2tsaXN0IHRvIGVuc3VyZSB3ZSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmc6IERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHdoZXJlIHBhZGRpbmcvZmllbGRzIG1pZ2h0IG5vdCBiZSBpbml0aWFsaXplZD8gTm8uIERvZXMgaXQgaW50cm9kdWNlIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm8uIERvZXMgaXQgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnM/IE5vLiBEb2VzIGl0IGFsdGVyIGJvdW5kcyBjaGVja3MgaW4gYSB3YXkgdGhhdCBhbGxvd3MgYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/IE5vLgoKR2l2ZW4gYWxsIG9mIHRoaXMsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBmYWxzZS4KCk5vdywgdG8gc29saWRpZnkgdGhlIHJlYXNvbmluZywgbGV0JiMzOTtzIGNvbnRyYXN0IEtBU0FOIGFuZCBLTVNBTi4gS0FTQU4vVUJTQU4gYXJlIGRpcmVjdGx5IHJlbGV2YW50IGhlcmUuIFRoZSBwYXRjaCBkZWFscyB3aXRoIGEgMzItYml0IGludGVnZXIgbXVsdGlwbGljYXRpb24gb3ZlcmZsb3cgd2hlbiBjYWxjdWxhdGluZyB1c2VyIHBvaW50ZXIgb2Zmc2V0cyBhbmQgY29weSBsZW5ndGhzIGZvciB0aGUgQlBGIGJhdGNoIG9wZXJhdGlvbnMuIEludGVnZXIgb3ZlcmZsb3csIGFuZCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgb3IgaW52YWxpZCBhZGRyZXNzIGNhbGN1bGF0aW9ucywgYXJlIHRoZSBkb21haW4gb2YgVUJTQU4vS0FTQU4uIEtNU0FOLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgc3BlY2lmaWNhbGx5IGdlYXJlZCB0b3dhcmRzIGRldGVjdGluZyB0aGUgdXNlIGFuZCBsZWFrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBwYXRjaCBvbmx5IGFkZHMgYChzaXplX3QpYCBjYXN0cyB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3cgaW4gdXNlciBwb2ludGVyIGFyaXRobWV0aWMgYW5kIHNpemUgY2FsY3VsYXRpb25zLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0ZWQsIHJlYWQsIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSYjMzk7cyBubyBuZWVkIGZvciBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGV4cGxpY2l0IGAoc2l6ZV90KWAgY2FzdHMgdG8gdXNlciBwb2ludGVyIG9mZnNldCBhbmQgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiBCUEYgYmF0Y2ggb3BlcmF0aW9ucyAoc3VjaCBhcyBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAsIGBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoYCwgYW5kIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgKSB0byBwcmV2ZW50IDMyLWJpdCBpbnRlZ2VyIG11bHRpcGxpY2F0aW9uIG92ZXJmbG93cyBvbiA2NC1iaXQgc3lzdGVtcy5cblxuVGhlc2UgY2hhbmdlcyBzdHJpY3RseSBmaXggaW50ZWdlciBhcml0aG1ldGljIGFuZCB1c2VyIHNwYWNlIGFkZHJlc3MgY2FsY3VsYXRpb25zLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzL3BhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgZGF0YSBsZWFrcyB0byB1c2VyIHNwYWNlLiBBbnkgbWVtb3J5IHNhZmV0eSBvciBhcml0aG1ldGljIGlzc3VlcyByZWxhdGVkIHRvIHRoZXNlIGNhbGN1bGF0aW9ucyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9VQlNBTiBidWlsZHMuIEhlbmNlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGV4cGxpY2l0IGAoc2l6ZV90KWAgY2FzdHMgdG8gdXNlciBwb2ludGVyIG9mZnNldCBhbmQgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiBCUEYgYmF0Y2ggb3BlcmF0aW9ucyAoc3VjaCBhcyBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAsIGBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoYCwgYW5kIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgKSB0byBwcmV2ZW50IDMyLWJpdCBpbnRlZ2VyIG11bHRpcGxpY2F0aW9uIG92ZXJmbG93cyBvbiA2NC1iaXQgc3lzdGVtcy5cblxuVGhlc2UgY2hhbmdlcyBzdHJpY3RseSBmaXggaW50ZWdlciBhcml0aG1ldGljIGFuZCB1c2VyIHNwYWNlIGFkZHJlc3MgY2FsY3VsYXRpb25zLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzL3BhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgZGF0YSBsZWFrcyB0byB1c2VyIHNwYWNlLiBBbnkgbWVtb3J5IHNhZmV0eSBvciBhcml0aG1ldGljIGlzc3VlcyByZWxhdGVkIHRvIHRoZXNlIGNhbGN1bGF0aW9ucyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9VQlNBTiBidWlsZHMuIEhlbmNlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjA5OjE4LjM3NDMyMTU4NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5NjU1NzY1NjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2VuZXJpY19tYXBfZGVsZXRlX2JhdGNoXCIsXG4gICAgXCJnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hcIixcbiAgICBcImdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaFwiLFxuICAgIFwiaHRhYl9tYXBfbG9va3VwX2JhdGNoXCIsXG4gICAgXCJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBleHBsaWNpdCBgKHNpemVfdClgIGNhc3RzIHRvIHVzZXIgcG9pbnRlciBvZmZzZXQgYW5kIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gQlBGIGJhdGNoIG9wZXJhdGlvbnMgKHN1Y2ggYXMgYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfZGVsZXRlX2JhdGNoYCwgYGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaGAsIGFuZCBgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoYCkgdG8gcHJldmVudCAzMi1iaXQgaW50ZWdlciBtdWx0aXBsaWNhdGlvbiBvdmVyZmxvd3Mgb24gNjQtYml0IHN5c3RlbXMuXFxuXFxuVGhlc2UgY2hhbmdlcyBzdHJpY3RseSBmaXggaW50ZWdlciBhcml0aG1ldGljIGFuZCB1c2VyIHNwYWNlIGFkZHJlc3MgY2FsY3VsYXRpb25zLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzL3BhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgZGF0YSBsZWFrcyB0byB1c2VyIHNwYWNlLiBBbnkgbWVtb3J5IHNhZmV0eSBvciBhcml0aG1ldGljIGlzc3VlcyByZWxhdGVkIHRvIHRoZXNlIGNhbGN1bGF0aW9ucyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTi9VQlNBTiBidWlsZHMuIEhlbmNlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYXJpdGhtZXRpYyBvZmZzZXQgY29tcHV0YXRpb25zIGR1cmluZyB1c2VyIG1lbW9yeSBjb3B5aW5nIGluIEJQRiBiYXRjaCBtYXAgb3BlcmF0aW9ucyAoZ2VuZXJpYyBtYXAgZGVsZXRlL3VwZGF0ZS9sb29rdXAgYmF0Y2ggaGFuZGxlcnMgYW5kIGhhc2ggdGFibGUgYmF0Y2ggbG9va3VwLWFuZC1kZWxldGUpIHRvIGNhc3QgaW5kaWNlcy9tdWx0aXBsaWVycyB0byBzaXplX3QgdG8gcHJldmVudCBwb3RlbnRpYWwgaW50ZWdlciB0cnVuY2F0aW9uIG9yIG92ZXJmbG93LiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB3aXRoIEJQRl9NQVBfKl9CQVRDSCBjb21tYW5kcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MDk6MTguMzc0MzI3NDM2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzg2NzQwODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzZTBkNzg1MDY3MTYwYTI3MzkxNTM1NWJhZDY0YWQ3YjEyYTUzYTZkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDMgMjA6MDk6MTcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xcbmluZGV4IGQ0MGNiNWRkNDQ2Y2EuLmJkMzcwNGVkOTMzM2UgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9oYXNodGFiLmNcXG4rKysgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xcbkBAIC0xOTc3LDEwICsxOTc3LDEwIEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4gXFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHRicGZfZW5hYmxlX2luc3RydW1lbnRhdGlvbigpO1xcbi1cXHRpZiAoYnVja2V0X2NudCBcXHUwMDI2XFx1MDAyNiAoY29weV90b191c2VyKHVrZXlzICsgdG90YWwgKiBrZXlfc2l6ZSwga2V5cyxcXG4tXFx0ICAgIGtleV9zaXplICogYnVja2V0X2NudCkgfHxcXG4tXFx0ICAgIGNvcHlfdG9fdXNlcih1dmFsdWVzICsgdG90YWwgKiB2YWx1ZV9zaXplLCB2YWx1ZXMsXFxuLVxcdCAgICB2YWx1ZV9zaXplICogYnVja2V0X2NudCkpKSB7XFxuK1xcdGlmIChidWNrZXRfY250IFxcdTAwMjZcXHUwMDI2IChjb3B5X3RvX3VzZXIodWtleXMgKyAoc2l6ZV90KXRvdGFsICoga2V5X3NpemUsIGtleXMsXFxuK1xcdCAgICAoc2l6ZV90KWtleV9zaXplICogYnVja2V0X2NudCkgfHxcXG4rXFx0ICAgIGNvcHlfdG9fdXNlcih1dmFsdWVzICsgKHNpemVfdCl0b3RhbCAqIHZhbHVlX3NpemUsIHZhbHVlcyxcXG4rXFx0ICAgIChzaXplX3QpdmFsdWVfc2l6ZSAqIGJ1Y2tldF9jbnQpKSkge1xcbiBcXHRcXHRyZXQgPSAtRUZBVUxUO1xcbiBcXHRcXHRnb3RvIGFmdGVyX2xvb3A7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xcbmluZGV4IDY4NzRiYTE0MjRhZjAuLjczMTM4OGFlMDBhZDEgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmNcXG4rKysgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xcbkBAIC0yMDM2LDcgKzIwMzYsNyBAQCBpbnQgZ2VuZXJpY19tYXBfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXFxuIFxcbiBcXHRmb3IgKGNwID0gMDsgY3AgXFx1MDAzYyBtYXhfY291bnQ7IGNwKyspIHtcXG4gXFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4tXFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyArIGNwICogbWFwLVxcdTAwM2VrZXlfc2l6ZSxcXG4rXFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyArIChzaXplX3QpY3AgKiBtYXAtXFx1MDAzZWtleV9zaXplLFxcbiBcXHRcXHRcXHRcXHQgICBtYXAtXFx1MDAzZWtleV9zaXplKSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbkBAIC0yMDk4LDkgKzIwOTgsOSBAQCBpbnQgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSxcXG4gXFxuIFxcdGZvciAoY3AgPSAwOyBjcCBcXHUwMDNjIG1heF9jb3VudDsgY3ArKykge1xcbiBcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbi1cXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoa2V5LCBrZXlzICsgY3AgKiBtYXAtXFx1MDAzZWtleV9zaXplLFxcbitcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoa2V5LCBrZXlzICsgKHNpemVfdCljcCAqIG1hcC1cXHUwMDNla2V5X3NpemUsXFxuIFxcdFxcdCAgICBtYXAtXFx1MDAzZWtleV9zaXplKSB8fFxcbi1cXHRcXHQgICAgY29weV9mcm9tX3VzZXIodmFsdWUsIHZhbHVlcyArIGNwICogdmFsdWVfc2l6ZSwgdmFsdWVfc2l6ZSkpXFxuK1xcdFxcdCAgICBjb3B5X2Zyb21fdXNlcih2YWx1ZSwgdmFsdWVzICsgKHNpemVfdCljcCAqIHZhbHVlX3NpemUsIHZhbHVlX3NpemUpKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuIFxcdFxcdGVyciA9IGJwZl9tYXBfdXBkYXRlX3ZhbHVlKG1hcCwgbWFwX2ZpbGUsIGtleSwgdmFsdWUsXFxuQEAgLTIxNzksMTIgKzIxNzksMTIgQEAgaW50IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRnb3RvIGZyZWVfYnVmO1xcbiBcXG4tXFx0XFx0aWYgKGNvcHlfdG9fdXNlcihrZXlzICsgY3AgKiBtYXAtXFx1MDAzZWtleV9zaXplLCBrZXksXFxuK1xcdFxcdGlmIChjb3B5X3RvX3VzZXIoa2V5cyArIChzaXplX3QpY3AgKiBtYXAtXFx1MDAzZWtleV9zaXplLCBrZXksXFxuIFxcdFxcdFxcdFxcdCBtYXAtXFx1MDAzZWtleV9zaXplKSkge1xcbiBcXHRcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbiBcXHRcXHRcXHRnb3RvIGZyZWVfYnVmO1xcbiBcXHRcXHR9XFxuLVxcdFxcdGlmIChjb3B5X3RvX3VzZXIodmFsdWVzICsgY3AgKiB2YWx1ZV9zaXplLCB2YWx1ZSwgdmFsdWVfc2l6ZSkpIHtcXG4rXFx0XFx0aWYgKGNvcHlfdG9fdXNlcih2YWx1ZXMgKyAoc2l6ZV90KWNwICogdmFsdWVfc2l6ZSwgdmFsdWUsIHZhbHVlX3NpemUpKSB7XFxuIFxcdFxcdFxcdGVyciA9IC1FRkFVTFQ7XFxuIFxcdFxcdFxcdGdvdG8gZnJlZV9idWY7XFxuIFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MDk6MTguNzUzNzg0MTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ1Mzc5MDEzOTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2VuZXJpY19tYXBfZGVsZXRlX2JhdGNoXCIsXG4gICAgXCJnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hcIixcbiAgICBcImdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaFwiLFxuICAgIFwiaHRhYl9tYXBfbG9va3VwX2JhdGNoXCIsXG4gICAgXCJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGFyaXRobWV0aWMgb2Zmc2V0IGNvbXB1dGF0aW9ucyBkdXJpbmcgdXNlciBtZW1vcnkgY29weWluZyBpbiBCUEYgYmF0Y2ggbWFwIG9wZXJhdGlvbnMgKGdlbmVyaWMgbWFwIGRlbGV0ZS91cGRhdGUvbG9va3VwIGJhdGNoIGhhbmRsZXJzIGFuZCBoYXNoIHRhYmxlIGJhdGNoIGxvb2t1cC1hbmQtZGVsZXRlKSB0byBjYXN0IGluZGljZXMvbXVsdGlwbGllcnMgdG8gc2l6ZV90IHRvIHByZXZlbnQgcG90ZW50aWFsIGludGVnZXIgdHJ1bmNhdGlvbiBvciBvdmVyZmxvdy4gVGhlc2UgY29kZSBwYXRocyBhcmUgZnVsbHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgd2l0aCBCUEZfTUFQXypfQkFUQ0ggY29tbWFuZHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2UwZDc4NTA2NzE2MGEyNzM5MTUzNTViYWQ2NGFkN2IxMmE1M2E2ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMjA6MDk6MTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hhc2h0YWIuYyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jXG5pbmRleCBkNDBjYjVkZDQ0NmNhLi5iZDM3MDRlZDkzMzNlIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9oYXNodGFiLmNcbisrKyBiL2tlcm5lbC9icGYvaGFzaHRhYi5jXG5AQCAtMTk3NywxMCArMTk3NywxMCBAQCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdGJwZl9lbmFibGVfaW5zdHJ1bWVudGF0aW9uKCk7XG4tXHRpZiAoYnVja2V0X2NudCBcdTAwMjZcdTAwMjYgKGNvcHlfdG9fdXNlcih1a2V5cyArIHRvdGFsICoga2V5X3NpemUsIGtleXMsXG4tXHQgICAga2V5X3NpemUgKiBidWNrZXRfY250KSB8fFxuLVx0ICAgIGNvcHlfdG9fdXNlcih1dmFsdWVzICsgdG90YWwgKiB2YWx1ZV9zaXplLCB2YWx1ZXMsXG4tXHQgICAgdmFsdWVfc2l6ZSAqIGJ1Y2tldF9jbnQpKSkge1xuK1x0aWYgKGJ1Y2tldF9jbnQgXHUwMDI2XHUwMDI2IChjb3B5X3RvX3VzZXIodWtleXMgKyAoc2l6ZV90KXRvdGFsICoga2V5X3NpemUsIGtleXMsXG4rXHQgICAgKHNpemVfdClrZXlfc2l6ZSAqIGJ1Y2tldF9jbnQpIHx8XG4rXHQgICAgY29weV90b191c2VyKHV2YWx1ZXMgKyAoc2l6ZV90KXRvdGFsICogdmFsdWVfc2l6ZSwgdmFsdWVzLFxuK1x0ICAgIChzaXplX3QpdmFsdWVfc2l6ZSAqIGJ1Y2tldF9jbnQpKSkge1xuIFx0XHRyZXQgPSAtRUZBVUxUO1xuIFx0XHRnb3RvIGFmdGVyX2xvb3A7XG4gXHR9XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuaW5kZXggNjg3NGJhMTQyNGFmMC4uNzMxMzg4YWUwMGFkMSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jXG4rKysgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuQEAgLTIwMzYsNyArMjAzNiw3IEBAIGludCBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcbiBcdGZvciAoY3AgPSAwOyBjcCBcdTAwM2MgbWF4X2NvdW50OyBjcCsrKSB7XG4gXHRcdGVyciA9IC1FRkFVTFQ7XG4tXHRcdGlmIChjb3B5X2Zyb21fdXNlcihrZXksIGtleXMgKyBjcCAqIG1hcC1cdTAwM2VrZXlfc2l6ZSxcbitcdFx0aWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyArIChzaXplX3QpY3AgKiBtYXAtXHUwMDNla2V5X3NpemUsXG4gXHRcdFx0XHQgICBtYXAtXHUwMDNla2V5X3NpemUpKVxuIFx0XHRcdGJyZWFrO1xuIFxuQEAgLTIwOTgsOSArMjA5OCw5IEBAIGludCBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGZpbGUgKm1hcF9maWxlLFxuIFxuIFx0Zm9yIChjcCA9IDA7IGNwIFx1MDAzYyBtYXhfY291bnQ7IGNwKyspIHtcbiBcdFx0ZXJyID0gLUVGQVVMVDtcbi1cdFx0aWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyArIGNwICogbWFwLVx1MDAzZWtleV9zaXplLFxuK1x0XHRpZiAoY29weV9mcm9tX3VzZXIoa2V5LCBrZXlzICsgKHNpemVfdCljcCAqIG1hcC1cdTAwM2VrZXlfc2l6ZSxcbiBcdFx0ICAgIG1hcC1cdTAwM2VrZXlfc2l6ZSkgfHxcbi1cdFx0ICAgIGNvcHlfZnJvbV91c2VyKHZhbHVlLCB2YWx1ZXMgKyBjcCAqIHZhbHVlX3NpemUsIHZhbHVlX3NpemUpKVxuK1x0XHQgICAgY29weV9mcm9tX3VzZXIodmFsdWUsIHZhbHVlcyArIChzaXplX3QpY3AgKiB2YWx1ZV9zaXplLCB2YWx1ZV9zaXplKSlcbiBcdFx0XHRicmVhaztcbiBcbiBcdFx0ZXJyID0gYnBmX21hcF91cGRhdGVfdmFsdWUobWFwLCBtYXBfZmlsZSwga2V5LCB2YWx1ZSxcbkBAIC0yMTc5LDEyICsyMTc5LDEyIEBAIGludCBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRnb3RvIGZyZWVfYnVmO1xuIFxuLVx0XHRpZiAoY29weV90b191c2VyKGtleXMgKyBjcCAqIG1hcC1cdTAwM2VrZXlfc2l6ZSwga2V5LFxuK1x0XHRpZiAoY29weV90b191c2VyKGtleXMgKyAoc2l6ZV90KWNwICogbWFwLVx1MDAzZWtleV9zaXplLCBrZXksXG4gXHRcdFx0XHQgbWFwLVx1MDAzZWtleV9zaXplKSkge1xuIFx0XHRcdGVyciA9IC1FRkFVTFQ7XG4gXHRcdFx0Z290byBmcmVlX2J1ZjtcbiBcdFx0fVxuLVx0XHRpZiAoY29weV90b191c2VyKHZhbHVlcyArIGNwICogdmFsdWVfc2l6ZSwgdmFsdWUsIHZhbHVlX3NpemUpKSB7XG4rXHRcdGlmIChjb3B5X3RvX3VzZXIodmFsdWVzICsgKHNpemVfdCljcCAqIHZhbHVlX3NpemUsIHZhbHVlLCB2YWx1ZV9zaXplKSkge1xuIFx0XHRcdGVyciA9IC1FRkFVTFQ7XG4gXHRcdFx0Z290byBmcmVlX2J1ZjtcbiBcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MDk6MTguNzUzNzg1NzhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDI1NjY2MDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBCUEYgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBUaGlzIHBhdGNoIGxvb2tzIGxpa2UgaXQncyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHksIHNwZWNpZmljYWxseSBpbnRlZ2VyIG92ZXJmbG93cywgd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLCB3aGljaCBpcyBhbHdheXMgaW50ZXJlc3RpbmcuIFRoZSBtb2RpZmljYXRpb25zIGFyZSBmb2N1c2VkIG9uIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgYW5kIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AsIHdoaWNoIGltbWVkaWF0ZWx5IHJhaXNlcyBteSBhbnRlbm5hcyBiZWNhdXNlIHRob3NlIGFyZSBjb3JlIGNvbXBvbmVudHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kICpleGFjdGx5KiBob3cgdGhlc2UgaW50ZWdlciBvdmVyZmxvd3MgYXJlIGJlaW5nIGFkZHJlc3NlZC4gSXQgc2VlbXMgcmVsYXRlZCB0byBjYWxjdWxhdGlvbnMgaW52b2x2ZWQgd2l0aCBiYXRjaCBtYXAgb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5IGludm9sdmluZyBgY29weV90b191c2VyYCBhbmQgYGNvcHlfZnJvbV91c2VyYCBhbmQgY2FsY3VsYXRpb25zIGxpa2UgYHRvdGFsICoga2V5X3NpemVgIG9yIGBjcCAqIG1hcC1cdTAwM2VrZXlfc2l6ZWAsIHdoZXJlIGEgYHNpemVfdGAgY2FzdCBpcyBiZWluZyBhcHBsaWVkLiBUaGF0IG1ha2VzIHNlbnNlOyBpbnRlZ2VyIG92ZXJmbG93cyBpbiBtZW1vcnkgYWxsb2NhdGlvbiBvciBvZmZzZXQgY2FsY3VsYXRpb25zIGFyZSBhIGNsYXNzaWMgc291cmNlIG9mIHNlY3VyaXR5IGlzc3Vlcy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGZpbGVzIGFuZCBmdW5jdGlvbnMgY2hhbmdlZCwgcHJvYmFibHkgdXNpbmcgYGdyZXBgIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGNvZGUsIG9yIHBlcmhhcHMgYHJlYWQtZmlsZWAgZGVwZW5kaW5nIG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJIG5lZWQgdG8gc2VlIHRoZSBiZWZvcmUtYW5kLWFmdGVyIGFuZCB1bmRlcnN0YW5kICpleGFjdGx5KiBob3cgdGhlIGNvZGUgaXMgYmVpbmcgZ3VhcmRlZCBub3cuIElzIGl0IHVzaW5nIGEgc2F0dXJhdGlvbiBhcml0aG1ldGljLCBjaGVja2luZyBmb3Igb3ZlcmZsb3csIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBVbmRlcnN0YW5kaW5nIHRoZSBjaG9zZW4gbWl0aWdhdGlvbiBzdHJhdGVneSBpcyBjcml0aWNhbC4gVGhpcyBpcyBhIHBvdGVudGlhbGx5IGNyaXRpY2FsIGZpeCwgYW5kIEkgbmVlZCB0byBhc3Nlc3MgaXRzIGNvcnJlY3RuZXNzIGFuZCBjb21wbGV0ZW5lc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NDEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDowOToyMy4xNzk0NTQ3MjJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzM0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9oYXNodGFiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTk3MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTk3MDpcXHRcXHQvKiBJZiB3ZSBhcmUgbm90IGNvcHlpbmcgZGF0YSwgd2UgY2FuIGdvIHRvIG5leHQgYnVja2V0IGFuZCBhdm9pZFxcbjE5NzE6XFx0XFx0ICogdW5sb2NraW5nIHRoZSByY3UuXFxuMTk3MjpcXHRcXHQgKi9cXG4xOTczOlxcdFxcdGlmICghYnVja2V0X2NudCBcXHUwMDI2XFx1MDAyNiAoYmF0Y2ggKyAxIFxcdTAwM2MgaHRhYi1cXHUwMDNlbl9idWNrZXRzKSkge1xcbjE5NzQ6XFx0XFx0XFx0YmF0Y2grKztcXG4xOTc1OlxcdFxcdFxcdGdvdG8gYWdhaW5fbm9jb3B5O1xcbjE5NzY6XFx0XFx0fVxcbjE5Nzc6XFx0XFxuMTk3ODpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4xOTc5OlxcdFxcdGJwZl9lbmFibGVfaW5zdHJ1bWVudGF0aW9uKCk7XFxuMTk4MDpcXHRcXHRpZiAoYnVja2V0X2NudCBcXHUwMDI2XFx1MDAyNiAoY29weV90b191c2VyKHVrZXlzICsgKHNpemVfdCl0b3RhbCAqIGtleV9zaXplLCBrZXlzLFxcbjE5ODE6XFx0XFx0ICAgIChzaXplX3Qpa2V5X3NpemUgKiBidWNrZXRfY250KSB8fFxcbjE5ODI6XFx0XFx0ICAgIGNvcHlfdG9fdXNlcih1dmFsdWVzICsgKHNpemVfdCl0b3RhbCAqIHZhbHVlX3NpemUsIHZhbHVlcyxcXG4xOTgzOlxcdFxcdCAgICAoc2l6ZV90KXZhbHVlX3NpemUgKiBidWNrZXRfY250KSkpIHtcXG4xOTg0OlxcdFxcdFxcdHJldCA9IC1FRkFVTFQ7XFxuMTk4NTpcXHRcXHRcXHRnb3RvIGFmdGVyX2xvb3A7XFxuMTk4NjpcXHRcXHR9XFxuMTk4NzpcXHRcXG4xOTg4OlxcdFxcdHRvdGFsICs9IGJ1Y2tldF9jbnQ7XFxuMTk4OTpcXHRcXHRiYXRjaCsrO1xcbjE5OTA6XFx0XFx0aWYgKGJhdGNoIFxcdTAwM2U9IGh0YWItXFx1MDAzZW5fYnVja2V0cykge1xcbjE5OTE6XFx0XFx0XFx0cmV0ID0gLUVOT0VOVDtcXG4xOTkyOlxcdFxcdFxcdGdvdG8gYWZ0ZXJfbG9vcDtcXG4xOTkzOlxcdFxcdH1cXG4xOTk0OlxcdFxcdGdvdG8gYWdhaW47XFxuMTk5NTpcXHRcXG4xOTk2OlxcdGFmdGVyX2xvb3A6XFxuMTk5NzpcXHRcXHRpZiAocmV0ID09IC1FRkFVTFQpXFxuMTk5ODpcXHRcXHRcXHRnb3RvIG91dDtcXG4xOTk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDowOToyMy4xNzk1OTAyMTJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjMyNjg0MTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgU3lzdGVtIENhbGwgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCB0cmFjayBkb3duIGEgc3BlY2lmaWMgYmVoYXZpb3IgaW4gdGhlIEJQRiBzeXN0ZW0gY2FsbCBoYW5kbGluZy4gTXkgaW5zdGluY3RzIHRlbGwgbWUgdGhlIGlzc3VlIGxpa2VseSBsaWVzIHdpdGhpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLCBwcm9iYWJseSBhcm91bmQgdGhlIGNvcmUgbG9naWMgb2YgaG93IHRoZXNlIGNhbGxzIGFyZSBwcm9jZXNzZWQuIEknbSBnb2luZyB0byBzdGFydCB3aXRoIGEgZmV3IHN0cmF0ZWdpYyBicmVha3BvaW50czogSSdtIHRoaW5raW5nIHRoZSBjb2RlIGJsb2NrcyBhdCBvciBhcm91bmQgbGluZSBudW1iZXJzIDIwMzYsIDIwOTgsIGFuZCAyMTc5IGFyZSBnb29kIHN0YXJ0aW5nIHBvaW50cy4gVGhleSBsaWtlbHkgZGVhbCB3aXRoIGtleSBhc3BlY3RzIG9mIHRoZSBzeXN0ZW0gY2FsbCBmbG93LCBhbmQgbWlnaHQgc2hlZCBsaWdodCBvbiB3aGF0ZXZlciBpc3N1ZSBJJ20gZGVidWdnaW5nLiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUxNCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MDk6MjUuNDEyMjc2NDg4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI2MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwMzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwMzA6XFx0XFx0aWYgKHB1dF91c2VyKDAsIFxcdTAwMjZ1YXR0ci1cXHUwMDNlYmF0Y2guY291bnQpKVxcbjIwMzE6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMjAzMjpcXHRcXG4yMDMzOlxcdFxcdGtleSA9IGt2bWFsbG9jKG1hcC1cXHUwMDNla2V5X3NpemUsIEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOKTtcXG4yMDM0OlxcdFxcdGlmICgha2V5KVxcbjIwMzU6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjAzNjpcXHRcXG4yMDM3OlxcdFxcdGZvciAoY3AgPSAwOyBjcCBcXHUwMDNjIG1heF9jb3VudDsgY3ArKykge1xcbjIwMzg6XFx0XFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4yMDM5OlxcdFxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihrZXksIGtleXMgKyAoc2l6ZV90KWNwICogbWFwLVxcdTAwM2VrZXlfc2l6ZSxcXG4yMDQwOlxcdFxcdFxcdFxcdFxcdCAgIG1hcC1cXHUwMDNla2V5X3NpemUpKVxcbjIwNDE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjA0MjpcXHRcXG4yMDQzOlxcdFxcdFxcdGlmIChicGZfbWFwX2lzX29mZmxvYWRlZChtYXApKSB7XFxuMjA0NDpcXHRcXHRcXHRcXHRlcnIgPSBicGZfbWFwX29mZmxvYWRfZGVsZXRlX2VsZW0obWFwLCBrZXkpO1xcbjIwNDU6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjA0NjpcXHRcXHRcXHR9XFxuMjA0NzpcXHRcXG4yMDQ4OlxcdFxcdFxcdGJwZl9kaXNhYmxlX2luc3RydW1lbnRhdGlvbigpO1xcbjIwNDk6XFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbjIwNTA6XFx0XFx0XFx0ZXJyID0gbWFwLVxcdTAwM2VvcHMtXFx1MDAzZW1hcF9kZWxldGVfZWxlbShtYXAsIGtleSk7XFxuMjA1MTpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4yMDUyOlxcdFxcdFxcdGJwZl9lbmFibGVfaW5zdHJ1bWVudGF0aW9uKCk7XFxuMjA1MzpcXHRcXHRcXHRpZiAoZXJyKVxcbjIwNTQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjA1NTpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4yMDU2OlxcdFxcdH1cXG4yMDU3OlxcdFxcdGlmIChjb3B5X3RvX3VzZXIoXFx1MDAyNnVhdHRyLVxcdTAwM2ViYXRjaC5jb3VudCwgXFx1MDAyNmNwLCBzaXplb2YoY3ApKSlcXG4yMDU4OlxcdFxcdFxcdGVyciA9IC1FRkFVTFQ7XFxuMjA1OTpcXHRcXG4yMDYwOlxcdFxcdGt2ZnJlZShrZXkpO1xcbjIwNjE6XFx0XFxuMjA2MjpcXHRcXHRyZXR1cm4gZXJyO1xcbjIwNjM6XFx0fVxcbjIwNjQ6XFx0XFxuMjA2NTpcXHRpbnQgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSxcXG4yMDY2OlxcdFxcdFxcdFxcdCAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuMjA2NzpcXHRcXHRcXHRcXHQgICAgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpXFxuMjA2ODpcXHR7XFxuMjA2OTpcXHRcXHR2b2lkIF9fdXNlciAqdmFsdWVzID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXFx1MDAzZWJhdGNoLnZhbHVlcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjA5OjI1LjQxMjUwNDk1N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NjQzMjU0NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBmb3JtIG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipSZXZpZXdpbmcgS2V5IEZ1bmN0aW9ucyoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IHNvbWUgcGVyZm9ybWFuY2Ugb3IgZGVzaWduIGNvbnNpZGVyYXRpb25zLCBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSd2ZSBjb3ZlcmVkIG91ciBiYXNlcy4gSSBrbm93IHdlJ3ZlIGFscmVhZHkgbG9va2VkIGF0IFgsIFksIGFuZCBaLCBidXQgaXQncyBjcnVjaWFsIHRvIGJlIHRob3JvdWdoLiBJJ20gZ29pbmcgdG8gcXVpY2tseSByZXZpc2l0IGBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hgIGFuZCBgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoYC4gVGhleSdyZSBjb3JlIHRvIHRoZSBzeXN0ZW0sIGFuZCBpdCB3b3VsZCBiZSBhIGh1Z2UgbWlzcyBpZiBhIGJvdHRsZW5lY2sgb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5IGhhZCBiZWVuIG92ZXJsb29rZWQgdGhlcmUuIFRoZXNlIGJhdGNoIG9wZXJhdGlvbnMgYXJlIGdlbmVyYWxseSBjb21wbGV4IGFuZCBjYW4gYmUgcGVyZm9ybWFuY2Ugc2Vuc2l0aXZlLCBzbyB0aGF0J3MgdGhlIGZvY3VzLiBMZXQncyBzZWUgaWYgYW55IGluc2lnaHRzIHBvcCB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM0NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MDk6MjcuMzc2ODMyNjk0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI2NTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwOTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwOTA6XFx0XFx0aWYgKCFrZXkpXFxuMjA5MTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4yMDkyOlxcdFxcbjIwOTM6XFx0XFx0dmFsdWUgPSBrdm1hbGxvYyh2YWx1ZV9zaXplLCBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7XFxuMjA5NDpcXHRcXHRpZiAoIXZhbHVlKSB7XFxuMjA5NTpcXHRcXHRcXHRrdmZyZWUoa2V5KTtcXG4yMDk2OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjIwOTc6XFx0XFx0fVxcbjIwOTg6XFx0XFxuMjA5OTpcXHRcXHRmb3IgKGNwID0gMDsgY3AgXFx1MDAzYyBtYXhfY291bnQ7IGNwKyspIHtcXG4yMTAwOlxcdFxcdFxcdGVyciA9IC1FRkFVTFQ7XFxuMjEwMTpcXHRcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoa2V5LCBrZXlzICsgKHNpemVfdCljcCAqIG1hcC1cXHUwMDNla2V5X3NpemUsXFxuMjEwMjpcXHRcXHRcXHQgICAgbWFwLVxcdTAwM2VrZXlfc2l6ZSkgfHxcXG4yMTAzOlxcdFxcdFxcdCAgICBjb3B5X2Zyb21fdXNlcih2YWx1ZSwgdmFsdWVzICsgKHNpemVfdCljcCAqIHZhbHVlX3NpemUsIHZhbHVlX3NpemUpKVxcbjIxMDQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjEwNTpcXHRcXG4yMTA2OlxcdFxcdFxcdGVyciA9IGJwZl9tYXBfdXBkYXRlX3ZhbHVlKG1hcCwgbWFwX2ZpbGUsIGtleSwgdmFsdWUsXFxuMjEwNzpcXHRcXHRcXHRcXHRcXHRcXHQgICBhdHRyLVxcdTAwM2ViYXRjaC5lbGVtX2ZsYWdzKTtcXG4yMTA4OlxcdFxcbjIxMDk6XFx0XFx0XFx0aWYgKGVycilcXG4yMTEwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjIxMTE6XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuMjExMjpcXHRcXHR9XFxuMjExMzpcXHRcXG4yMTE0OlxcdFxcdGlmIChjb3B5X3RvX3VzZXIoXFx1MDAyNnVhdHRyLVxcdTAwM2ViYXRjaC5jb3VudCwgXFx1MDAyNmNwLCBzaXplb2YoY3ApKSlcXG4yMTE1OlxcdFxcdFxcdGVyciA9IC1FRkFVTFQ7XFxuMjExNjpcXHRcXG4yMTE3OlxcdFxcdGt2ZnJlZSh2YWx1ZSk7XFxuMjExODpcXHRcXHRrdmZyZWUoa2V5KTtcXG4yMTE5OlxcdFxcbjIxMjA6XFx0XFx0cmV0dXJuIGVycjtcXG4yMTIxOlxcdH1cXG4yMTIyOlxcdFxcbjIxMjM6XFx0aW50IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbjIxMjQ6XFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbjIxMjU6XFx0XFx0XFx0XFx0XFx0ICAgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpXFxuMjEyNjpcXHR7XFxuMjEyNzpcXHRcXHR2b2lkIF9fdXNlciAqdW9iYXRjaCA9IHU2NF90b191c2VyX3B0cihhdHRyLVxcdTAwM2ViYXRjaC5vdXRfYmF0Y2gpO1xcbjIxMjg6XFx0XFx0dm9pZCBfX3VzZXIgKnViYXRjaCA9IHU2NF90b191c2VyX3B0cihhdHRyLVxcdTAwM2ViYXRjaC5pbl9iYXRjaCk7XFxuMjEyOTpcXHRcXHR2b2lkIF9fdXNlciAqdmFsdWVzID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXFx1MDAzZWJhdGNoLnZhbHVlcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjA5OjI3LjM3NzA2MTI2NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU2MTI4MDk2MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIEtlcm5lbCBCUEYgU3lzY2FsbCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkZWVwIGRpdmluZyBpbnRvIHRoaXMgQlBGIGludmVzdGlnYXRpb24uIEkndmUgZ290IGEgaHVuY2ggYWJvdXQgdGhlIGlzc3VlLCBhbmQgSSBuZWVkIHRvIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSBjYWxscyBpbnZvbHZlZC4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYC4gTGV0IG1lIGp1c3QganVtcCBvdmVyIHRvIGxpbmVzIDIxNzAtMjIwMCBhbmQgc2VlIHdoYXQncyBoYXBwZW5pbmcgdGhlcmUuIEknbSBsb29raW5nIGZvciB0aGUgY2FsbCBwYXRoIHdoZXJlLi4uICpbdGhpbmtpbmcgYWJvdXQgc3BlY2lmaWMgc3lzdGVtIGNhbGxzIGFuZCB0aGVpciBleHBlY3RlZCBiZWhhdmlvciBhbmQgd2hlcmUgdGhlIHBvdGVudGlhbCBwcm9ibGVtIGlzXSouLi4gdGhhdCdzIHByb2JhYmx5IHRoZSBtb3N0IHJlbGV2YW50IHNlY3Rpb24gZm9yIHRoaXMgcGFydGljdWxhciB1c2UgY2FzZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBhcmd1bWVudHMgYXJlIGJlaW5nIGhhbmRsZWQsIGhvdyB0aGUgQlBGIHByb2dyYW1zIGFyZSBiZWluZyBsb2FkZWQgYW5kIHZlcmlmaWVkLCBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBhcm91bmQuLi4gKltjb25zaWRlcmluZyBzcGVjaWZpYyBjb2RlIGVsZW1lbnRzIGFuZCBzZWN1cml0eSBjb25jZXJuc10qLi4uIG9yIGFueSB1bmV4cGVjdGVkIGludGVyYWN0aW9ucyB3aXRoIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudCB0aGVyZS4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxOTIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjA5OjMyLjk4OTg3NDM2NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTE1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjE3MCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjE3MDpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4yMTcxOlxcdFxcdFxcdGlmIChlcnIpXFxuMjE3MjpcXHRcXHRcXHRcXHRicmVhaztcXG4yMTczOlxcdFxcdFxcdGVyciA9IGJwZl9tYXBfY29weV92YWx1ZShtYXAsIGtleSwgdmFsdWUsXFxuMjE3NDpcXHRcXHRcXHRcXHRcXHRcXHQgYXR0ci1cXHUwMDNlYmF0Y2guZWxlbV9mbGFncyk7XFxuMjE3NTpcXHRcXG4yMTc2OlxcdFxcdFxcdGlmIChlcnIgPT0gLUVOT0VOVClcXG4yMTc3OlxcdFxcdFxcdFxcdGdvdG8gbmV4dF9rZXk7XFxuMjE3ODpcXHRcXG4yMTc5OlxcdFxcdFxcdGlmIChlcnIpXFxuMjE4MDpcXHRcXHRcXHRcXHRnb3RvIGZyZWVfYnVmO1xcbjIxODE6XFx0XFxuMjE4MjpcXHRcXHRcXHRpZiAoY29weV90b191c2VyKGtleXMgKyAoc2l6ZV90KWNwICogbWFwLVxcdTAwM2VrZXlfc2l6ZSwga2V5LFxcbjIxODM6XFx0XFx0XFx0XFx0XFx0IG1hcC1cXHUwMDNla2V5X3NpemUpKSB7XFxuMjE4NDpcXHRcXHRcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbjIxODU6XFx0XFx0XFx0XFx0Z290byBmcmVlX2J1ZjtcXG4yMTg2OlxcdFxcdFxcdH1cXG4yMTg3OlxcdFxcdFxcdGlmIChjb3B5X3RvX3VzZXIodmFsdWVzICsgKHNpemVfdCljcCAqIHZhbHVlX3NpemUsIHZhbHVlLCB2YWx1ZV9zaXplKSkge1xcbjIxODg6XFx0XFx0XFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4yMTg5OlxcdFxcdFxcdFxcdGdvdG8gZnJlZV9idWY7XFxuMjE5MDpcXHRcXHRcXHR9XFxuMjE5MTpcXHRcXG4yMTkyOlxcdFxcdFxcdGNwKys7XFxuMjE5MzpcXHRuZXh0X2tleTpcXG4yMTk0OlxcdFxcdFxcdGlmICghcHJldl9rZXkpXFxuMjE5NTpcXHRcXHRcXHRcXHRwcmV2X2tleSA9IGJ1Zl9wcmV2a2V5O1xcbjIxOTY6XFx0XFxuMjE5NzpcXHRcXHRcXHRzd2FwKHByZXZfa2V5LCBrZXkpO1xcbjIxOTg6XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuMjE5OTpcXHRcXHR9XFxuMjIwMDpcXHRcXG4yMjAxOlxcdFxcdGlmIChlcnIgPT0gLUVGQVVMVClcXG4yMjAyOlxcdFxcdFxcdGdvdG8gZnJlZV9idWY7XFxuMjIwMzpcXHRcXG4yMjA0OlxcdFxcdGlmICgoY29weV90b191c2VyKFxcdTAwMjZ1YXR0ci1cXHUwMDNlYmF0Y2guY291bnQsIFxcdTAwMjZjcCwgc2l6ZW9mKGNwKSkgfHxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MDk6MzIuOTkwMDg3NzQ2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3MzgyNzczMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGtlcm5lbCBjb25maWd1cmF0aW9uIHB1enpsZS5cblxuKipGaW5kaW5nIHRoZSBCUEYgU3lzY2FsbCBhbmQgSGFzaHRhYmxlIENvbmZpZ3VyYXRpb24gRmxhZ3MqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggS2NvbmZpZyBmbGFncyBhcmUgcmVzcG9uc2libGUgZm9yIGVuYWJsaW5nIHRoZSBCUEYgc3lzY2FsbHMgYW5kIGhhc2h0YWJsZXMuIEknbSB0aGlua2luZywgdGhlIG1vc3Qgc3RyYWlnaHRmb3J3YXJkIGFwcHJvYWNoIGlzIHRvIGh1bnQgZm9yIHRob3NlIEJQRi1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGRpcmVjdGx5IHdpdGhpbiB0aGUgS2NvbmZpZyBmaWxlcy4gVGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gc2hvdWxkIG1ha2UgdGhhdCBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBvYnZpb3VzIHBsYWNlczogYGluaXQvS2NvbmZpZ2AgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBib290LXJlbGF0ZWQgZmVhdHVyZXMsIGFuZCB0aGUgYGtlcm5lbC9icGYvTWFrZWZpbGVgIHNob3VsZCBjb250YWluIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gYml0cyBnaXZlbiBCUEYncyBpbmNyZWFzaW5nIGltcG9ydGFuY2UuIExldCdzIHNlZSB3aGF0IHRoYXQgZ3JlcCB1bmNvdmVycyFcblxuXG4iLCJJbnB1dFRva2VucyI6NjkzNywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MDk6MzUuNzI4MzY4NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk5MDIyMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGFzaHRhYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTEwPW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGhhc2h0YWIubyBhcnJheW1hcC5vIHBlcmNwdV9mcmVlbGlzdC5vIGJwZl9scnVfbGlzdC5vIGxwbV90cmllLm8gbWFwX2luX21hcC5vIGJsb29tX2ZpbHRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xMi1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGxvY2FsX3N0b3JhZ2UubyBxdWV1ZV9zdGFja19tYXBzLm8gcmluZ2J1Zi5vIGJwZl9pbnNuX2FycmF5Lm9cXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTExLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9yYW5kb20uaFxcdTAwM2VcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoxMjojaW5jbHVkZSBcXHUwMDNjbGludXgvcmhhc2h0YWJsZS5oXFx1MDAzZVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTEzLSNpbmNsdWRlIFxcdTAwM2N1YXBpL2xpbnV4L2J0Zi5oXFx1MDAzZVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9ODY9c3RydWN0IGJwZl9odGFiIHtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTk2LVxcdHN0cnVjdCBodGFiX2VsZW0gKl9fcGVyY3B1ICpleHRyYV9lbGVtcztcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzo5NzpcXHQvKiBudW1iZXIgb2YgZWxlbWVudHMgaW4gbm9uLXByZWFsbG9jYXRlZCBoYXNodGFibGUgYXJlIGtlcHRcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy05OC1cXHQgKiBpbiBlaXRoZXIgcGNvdW50IG9yIGNvdW50XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNzM9c3RhdGljIHZvaWQgaHRhYl9mcmVlX2VsZW1zKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5OC0gKlxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5OTogKiBJbiBoYXNodGFiLmMsIHRvIGF2b2lkIGRlYWRsb2NrLCBsb2NrIGFjcXVpc2l0aW9uIG9mXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzAwLSAqIGJ1Y2tldF9sb2NrIGZvbGxvd2VkIGJ5IGxydV9sb2NrIGlzIG5vdCBhbGxvd2VkLiBJbiBzdWNoIGNhc2VzLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9Mjc1MT1zdHJ1Y3QgYnBmX3JodGFiIHtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzUyLVxcdHN0cnVjdCBicGZfbWFwIG1hcDtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNzUzOlxcdHN0cnVjdCByaGFzaHRhYmxlIGh0O1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3NTQtXFx0c3RydWN0IGJwZl9tZW1fYWxsb2MgbWE7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzU4LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI3NTk6c3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyByaHRhYl9wYXJhbXMgPSB7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjc2MC1cXHQuaGVhZF9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3Qgcmh0YWJfZWxlbSwgbm9kZSksXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNzY0PXN0YXRpYyBpbmxpbmUgdm9pZCAqcmh0YWJfZWxlbV92YWx1ZShzdHJ1Y3Qgcmh0YWJfZWxlbSAqbCwgdTMyIGtleV9zaXplKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjc2OS0vKiBTcGVjaWFsaXplIGhhc2ggZnVuY3Rpb24gYW5kIG9iamNtcCBmb3IgbG9uZyBzaXplZCBrZXkgKi9cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNzcwOnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IHJodGFiX2tleV9jbXBfbG9uZyhzdHJ1Y3Qgcmhhc2h0YWJsZV9jb21wYXJlX2FyZyAqYXJnLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3NzEtXFx0XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgdm9pZCAqcHRyKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9Mjc3OT1zdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiByaHRhYl9oYXNoZm5fbG9uZyhjb25zdCB2b2lkICpkYXRhLCB1MzIgbGVuLCB1MzIgc2VlZClcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3ODUtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjc4NjpzdGF0aWMgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHJodGFiX3BhcmFtc19sb25nID0ge1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3ODctXFx0LmhlYWRfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHJodGFiX2VsZW0sIG5vZGUpLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9Mjc5ND1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKnJodGFiX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzk1LXtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNzk2OlxcdHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBwYXJhbXM7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjc5Ny1cXHRzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYjtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4MjMtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjgyNDpcXHRlcnIgPSByaGFzaHRhYmxlX2luaXQoXFx1MDAyNnJodGFiLVxcdTAwM2VodCwgXFx1MDAyNnBhcmFtcyk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjgyNS1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjgyNy1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyODI4OlxcdC8qIFNldCBtYXhfZWxlbXMgYWZ0ZXIgcmhhc2h0YWJsZV9pbml0KCkgc2luY2UgaW5pdCB6ZXJvZXMgdGhlIHN0cnVjdCAqL1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI4MjktXFx0cmh0YWItXFx1MDAzZWh0Lm1heF9lbGVtcyA9IHJodGFiLVxcdTAwM2VtYXAubWF4X2VudHJpZXM7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yODM3LWRlc3Ryb3lfcmh0YWI6XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjgzODpcXHRyaGFzaHRhYmxlX2Rlc3Ryb3koXFx1MDAyNnJodGFiLVxcdTAwM2VodCk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjgzOS1mcmVlX3JodGFiOlxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9Mjg5OD1zdGF0aWMgdm9pZCByaHRhYl9tYXBfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjkwMS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTAyOlxcdHJoYXNodGFibGVfZnJlZV9hbmRfZGVzdHJveShcXHUwMDI2cmh0YWItXFx1MDAzZWh0LCByaHRhYl9mcmVlX2VsZW0sIHJodGFiKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTAzLVxcdGJwZl9tZW1fYWxsb2NfZGVzdHJveShcXHUwMDI2cmh0YWItXFx1MDAzZW1hKTtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI5MDc9c3RhdGljIHZvaWQgKnJodGFiX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5MTQtXFx0aWYgKG1hcC1cXHUwMDNla2V5X3NpemUgPT0gc2l6ZW9mKGxvbmcpKVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5MTU6XFx0XFx0cmV0dXJuIHJoYXNodGFibGVfbG9va3VwX2xpa2VseShcXHUwMDI2cmh0YWItXFx1MDAzZWh0LCBrZXksIHJodGFiX3BhcmFtc19sb25nKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTE2LVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5MTc6XFx0cmV0dXJuIHJoYXNodGFibGVfbG9va3VwX2xpa2VseShcXHUwMDI2cmh0YWItXFx1MDAzZWh0LCBrZXksIHJodGFiX3BhcmFtcyk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjkxOC19XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yOTM5PXN0YXRpYyBpbnQgcmh0YWJfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9yaHRhYiAqcmh0YWIsIHN0cnVjdCByaHRhYl9lbGVtICplbGVtLCB2b2lkICpjb3B5LFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjk0NS1cXHQgKiBkaXNhYmxlX2luc3RydW1lbnRhdGlvbigpIG1pdGlnYXRlcyB0aGUgZGVhZGxvY2sgZm9yIHByb2dyYW1zIHJ1bm5pbmcgaW4gTk1JIGNvbnRleHQuXFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk0NjpcXHQgKiByaGFzaHRhYmxlIGxvY2tzIGJ1Y2tldCB3aXRoIGxvY2FsX2lycV9zYXZlKCkuIE9ubHkgTk1JIHByb2dyYW1zIG1heSByZWVudGVyXFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk0NzpcXHQgKiByaGFzaHRhYmxlIGNvZGUsIGJwZl9kaXNhYmxlX2luc3RydW1lbnRhdGlvbigpIGRpc2FibGVzIHByb2dyYW1zIHJ1bm5pbmcgaW4gTk1JLCBleGNlcHRcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTQ4OlxcdCAqIHJhdyB0cmFjZXBvaW50cywgd2hpY2ggd2UgZG9uJ3QgaGF2ZSBpbiByaGFzaHRhYmxlLlxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5NDktXFx0ICovXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTUyLVxcdGlmIChyaHRhYi1cXHUwMDNlbWFwLmtleV9zaXplID09IHNpemVvZihsb25nKSlcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTUzOlxcdFxcdGVyciA9IHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXFx1MDAyNnJodGFiLVxcdTAwM2VodCwgXFx1MDAyNmVsZW0tXFx1MDAzZW5vZGUsIHJodGFiX3BhcmFtc19sb25nKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTU0LVxcdGVsc2VcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTU1OlxcdFxcdGVyciA9IHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXFx1MDAyNnJodGFiLVxcdTAwM2VodCwgXFx1MDAyNmVsZW0tXFx1MDAzZW5vZGUsIHJodGFiX3BhcmFtcyk7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjk1Ni1cXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTMwMzI9c3RhdGljIGxvbmcgcmh0YWJfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsIHU2NCBtYXBfZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMDc0LVxcdGlmIChtYXAtXFx1MDAzZWtleV9zaXplID09IHNpemVvZihsb25nKSlcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMDc1OlxcdFxcdHRtcCA9IHJoYXNodGFibGVfbG9va3VwX2dldF9pbnNlcnRfZmFzdChcXHUwMDI2cmh0YWItXFx1MDAzZWh0LCBcXHUwMDI2ZWxlbS1cXHUwMDNlbm9kZSwgcmh0YWJfcGFyYW1zX2xvbmcpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwNzYtXFx0ZWxzZVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMwNzc6XFx0XFx0dG1wID0gcmhhc2h0YWJsZV9sb29rdXBfZ2V0X2luc2VydF9mYXN0KFxcdTAwMjZyaHRhYi1cXHUwMDNlaHQsIFxcdTAwMjZlbGVtLVxcdTAwM2Vub2RlLCByaHRhYl9wYXJhbXMpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMwNzgtXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMTE2PXN0YXRpYyB2b2lkIHJodGFiX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoc3RydWN0IGJwZl9tYXAgKm1hcClcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxMTgtXFx0c3RydWN0IGJwZl9yaHRhYiAqcmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3JodGFiLCBtYXApO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxMTk6XFx0c3RydWN0IHJoYXNodGFibGVfaXRlciBpdGVyO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxMjAtXFx0c3RydWN0IHJodGFiX2VsZW0gKmVsZW07XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTMyLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxMzM6XFx0cmhhc2h0YWJsZV93YWxrX2VudGVyKFxcdTAwMjZyaHRhYi1cXHUwMDNlaHQsIFxcdTAwMjZpdGVyKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTM0OlxcdHJoYXNodGFibGVfd2Fsa19zdGFydChcXHUwMDI2aXRlcik7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzEzNS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTM2OlxcdHdoaWxlICgoZWxlbSA9IHJoYXNodGFibGVfd2Fsa19uZXh0KFxcdTAwMjZpdGVyKSkpIHtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTM3LVxcdFxcdGlmIChJU19FUlIoZWxlbSkpIHtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxNDUtXFx0XFx0aWYgKG5lZWRfcmVzY2hlZCgpKSB7IC8qIEF2b2lkIHN0YWxscyBvbiBsYXJnZSBtYXBzICovXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzE0NjpcXHRcXHRcXHRyaGFzaHRhYmxlX3dhbGtfc3RvcChcXHUwMDI2aXRlcik7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzE0Ny1cXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMTQ4OlxcdFxcdFxcdHJoYXNodGFibGVfd2Fsa19zdGFydChcXHUwMDI2aXRlcik7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzE0OS1cXHRcXHR9XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTUxLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxNTI6XFx0cmhhc2h0YWJsZV93YWxrX3N0b3AoXFx1MDAyNml0ZXIpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMxNTM6XFx0cmhhc2h0YWJsZV93YWxrX2V4aXQoXFx1MDAyNml0ZXIpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxNTQtXFx0V1JJVEVfT05DRShyaHRhYi1cXHUwMDNlZnJlZWluZ19pbnRlcm5hbCwgZmFsc2UpO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzE1Nz1zdGF0aWMgaW50IHJodGFiX21hcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICpuZXh0X2tleSlcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxNjItXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzE2MzpcXHRlbGVtID0gcmhhc2h0YWJsZV9uZXh0X2tleShcXHUwMDI2cmh0YWItXFx1MDAzZWh0LCBrZXkpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxNjQtXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTY2LVxcdGlmIChQVFJfRVJSKGVsZW0pID09IC1FTk9FTlQpXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzE2NzpcXHRcXHRlbGVtID0gcmhhc2h0YWJsZV9uZXh0X2tleShcXHUwMDI2cmh0YWItXFx1MDAzZWh0LCBOVUxMKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMTY4LVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzE3OD1zdGF0aWMgdm9pZCByaHRhYl9tYXBfc2VxX3Nob3dfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHN0cnVjdCBzZXFfZmlsZSAqbSlcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxODEtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzE4MjpcXHQvKiBHdWFyYW50ZWUgdGhhdCBoYXNodGFiIHZhbHVlIGlzIG5vdCBmcmVlZCAqL1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMxODMtXFx0Z3VhcmQocmN1KSgpO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzE5NT1zdGF0aWMgbG9uZyBicGZfZWFjaF9yaGFzaF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIGJwZl9jYWxsYmFja190IGNhbGxiYWNrX2ZuLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzIxMC1cXHQvKlxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMyMTE6XFx0ICogQmVzdC1lZmZvcnQgaXRlcmF0aW9uOiBpZiByaGFzaHRhYmxlIGlzIGNvbmN1cnJlbnRseSByZXNpemVkIG9yXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzIxMi1cXHQgKiBlbGVtZW50cyBhcmUgZGVsZXRlZC9pbnNlcnRlZCwgdGhlcmUgbWF5IGJlIG1pc3NlZCBvciBkdXBsaWNhdGVcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMyMTQtXFx0ICovXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzIxNTpcXHR3aGlsZSAoKGVsZW0gPSByaGFzaHRhYmxlX25leHRfa2V5KFxcdTAwMjZyaHRhYi1cXHUwMDNlaHQsIHByZXZfa2V5KSkpIHtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMjE2LVxcdFxcdGlmIChJU19FUlIoZWxlbSkpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMjMzPXN0YXRpYyB1NjQgcmh0YWJfbWFwX21lbV91c2FnZShjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzIzNy1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMjM4OlxcdC8qIEV4Y2x1ZGVzIHJoYXNodGFibGUgYnVja2V0IG92ZXJoZWFkICh+IG5lbGVtcyAqIHNpemVvZih2b2lkICopIGF0IDc1JSBsb2FkKS4gKi9cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMjM5LVxcdG51bV9lbnRyaWVzID0gYXRvbWljX3JlYWQoXFx1MDAyNnJodGFiLVxcdTAwM2VodC5uZWxlbXMpO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzI0Mz1zdGF0aWMgaW50IF9fcmh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzE3LVxcdH0gZWxzZSB7XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzMxODpcXHRcXHRlbGVtID0gcmhhc2h0YWJsZV9uZXh0X2tleShcXHUwMDI2cmh0YWItXFx1MDAzZWh0LCBOVUxMKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzE5LVxcdH1cXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTMzMjgtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzMyOTpcXHRcXHRlbGVtID0gcmhhc2h0YWJsZV9uZXh0X2tleShcXHUwMDI2cmh0YWItXFx1MDAzZWh0LCBkc3Rfa2V5KTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzMwLVxcdFxcdGRzdF9rZXkgKz0ga2V5X3NpemU7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMzkxPXN0cnVjdCBicGZfaXRlcl9zZXFfcmhhc2hfbWFwX2luZm8ge1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzM5My1cXHRzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYjtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozMzk0OlxcdHN0cnVjdCByaGFzaHRhYmxlX2l0ZXIgaXRlcjtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMzk1LX07XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zMzk3PXN0YXRpYyB2b2lkICpicGZfcmhhc2hfbWFwX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNDAyLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjM0MDM6XFx0cmhhc2h0YWJsZV93YWxrX3N0YXJ0KFxcdTAwMjZpbmZvLVxcdTAwM2VpdGVyKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNDA0LVxcdC8qXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNDA5LVxcdGRvIHtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNDEwOlxcdFxcdGVsZW0gPSByaGFzaHRhYmxlX3dhbGtfcGVlayhcXHUwMDI2aW5mby1cXHUwMDNlaXRlcik7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzQxMS1cXHR9IHdoaWxlIChQVFJfRVJSKGVsZW0pID09IC1FQUdBSU4pO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzQyMT1zdGF0aWMgdm9pZCAqYnBmX3JoYXNoX21hcF9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNDI5LVxcdGRvIHtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNDMwOlxcdFxcdGVsZW0gPSByaGFzaHRhYmxlX3dhbGtfbmV4dChcXHUwMDI2aW5mby1cXHUwMDNlaXRlcik7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzQzMS1cXHR9IHdoaWxlIChQVFJfRVJSKGVsZW0pID09IC1FQUdBSU4pO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MzQ2Nz1zdGF0aWMgdm9pZCBicGZfcmhhc2hfbWFwX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzQ3NC1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNDc1OlxcdHJoYXNodGFibGVfd2Fsa19zdG9wKFxcdTAwMjZpbmZvLVxcdTAwM2VpdGVyKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNDc2LX1cXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTM0Nzg9c3RhdGljIGludCBicGZfaXRlcl9pbml0X3JoYXNoX21hcCh2b2lkICpwcml2X2RhdGEsIHN0cnVjdCBicGZfaXRlcl9hdXhfaW5mbyAqYXV4KVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzQ4NS1cXHRpbmZvLVxcdTAwM2VyaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfcmh0YWIsIG1hcCk7XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzQ4NjpcXHRyaGFzaHRhYmxlX3dhbGtfZW50ZXIoXFx1MDAyNmluZm8tXFx1MDAzZXJodGFiLVxcdTAwM2VodCwgXFx1MDAyNmluZm8tXFx1MDAzZWl0ZXIpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0ODctXFx0cmV0dXJuIDA7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zNDkwPXN0YXRpYyB2b2lkIGJwZl9pdGVyX2Zpbmlfcmhhc2hfbWFwKHZvaWQgKnByaXZfZGF0YSlcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM0OTMtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MzQ5NDpcXHRyaGFzaHRhYmxlX3dhbGtfZXhpdChcXHUwMDI2aW5mby1cXHUwMDNlaXRlcik7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzQ5NS1cXHRicGZfbWFwX3B1dF93aXRoX3VyZWYoaW5mby1cXHUwMDNlbWFwKTtcXG4tLVxcbmtlcm5lbC9icGYvbGl2ZW5lc3MuYy01LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9idGYuaFxcdTAwM2VcXG5rZXJuZWwvYnBmL2xpdmVuZXNzLmM6NjojaW5jbHVkZSBcXHUwMDNjbGludXgvaGFzaHRhYmxlLmhcXHUwMDNlXFxua2VybmVsL2JwZi9saXZlbmVzcy5jLTctI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2poYXNoLmhcXHUwMDNlXFxuLS1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYy0xNC0jaW5jbHVkZSBcXHUwMDNjbGludXgvcHJvY19ucy5oXFx1MDAzZVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjE1OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9yaGFzaHRhYmxlLmhcXHUwMDNlXFxua2VybmVsL2JwZi9vZmZsb2FkLmMtMTYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXFx1MDAzZVxcbi0tXFxua2VybmVsL2JwZi9vZmZsb2FkLmM9MzM9c3RydWN0IGJwZl9vZmZsb2FkX25ldGRldiB7XFxuLS1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYy00MS1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYzo0MjpzdGF0aWMgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIG9mZmRldnNfcGFyYW1zID0ge1xcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTQzLVxcdC5uZWxlbV9oaW50XFx0XFx0PSA0LFxcbi0tXFxua2VybmVsL2JwZi9vZmZsb2FkLmMtNDktXFxua2VybmVsL2JwZi9vZmZsb2FkLmM6NTA6c3RhdGljIHN0cnVjdCByaGFzaHRhYmxlIG9mZmRldnM7XFxua2VybmVsL2JwZi9vZmZsb2FkLmMtNTEtXFxuLS1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYz02Mj1icGZfb2ZmbG9hZF9maW5kX25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbi0tXFxua2VybmVsL2JwZi9vZmZsb2FkLmMtNjUtXFxua2VybmVsL2JwZi9vZmZsb2FkLmM6NjY6XFx0cmV0dXJuIHJoYXNodGFibGVfbG9va3VwX2Zhc3QoXFx1MDAyNm9mZmRldnMsIFxcdTAwMjZuZXRkZXYsIG9mZmRldnNfcGFyYW1zKTtcXG5rZXJuZWwvYnBmL29mZmxvYWQuYy02Ny19XFxuLS1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYz02OT1zdGF0aWMgaW50IF9fYnBmX29mZmxvYWRfZGV2X25ldGRldl9yZWdpc3RlcihzdHJ1Y3QgYnBmX29mZmxvYWRfZGV2ICpvZmZkZXYsXFxuLS1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYy04My1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYzo4NDpcXHRlcnIgPSByaGFzaHRhYmxlX2luc2VydF9mYXN0KFxcdTAwMjZvZmZkZXZzLCBcXHUwMDI2b25kZXYtXFx1MDAzZWwsIG9mZmRldnNfcGFyYW1zKTtcXG5rZXJuZWwvYnBmL29mZmxvYWQuYy04NS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYz0xMzY9c3RhdGljIHZvaWQgX19icGZfb2ZmbG9hZF9kZXZfbmV0ZGV2X3VucmVnaXN0ZXIoc3RydWN0IGJwZl9vZmZsb2FkX2RldiAqb2ZmZGV2LFxcbi0tXFxua2VybmVsL2JwZi9vZmZsb2FkLmMtMTQ0LVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjE0NTpcXHRvbmRldiA9IHJoYXNodGFibGVfbG9va3VwX2Zhc3QoXFx1MDAyNm9mZmRldnMsIFxcdTAwMjZuZXRkZXYsIG9mZmRldnNfcGFyYW1zKTtcXG5rZXJuZWwvYnBmL29mZmxvYWQuYy0xNDYtXFx0aWYgKFdBUk5fT04oIW9uZGV2KSlcXG4tLVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTE0OC1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYzoxNDk6XFx0V0FSTl9PTihyaGFzaHRhYmxlX3JlbW92ZV9mYXN0KFxcdTAwMjZvZmZkZXZzLCBcXHUwMDI2b25kZXYtXFx1MDAzZWwsIG9mZmRldnNfcGFyYW1zKSk7XFxua2VybmVsL2JwZi9vZmZsb2FkLmMtMTUwLVxcbi0tXFxua2VybmVsL2JwZi9vZmZsb2FkLmM9MTc5PXN0YXRpYyBpbnQgX19icGZfcHJvZ19kZXZfYm91bmRfaW5pdChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuLS1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYy0yMDEtXFx0XFx0LyogV2hlbiBvbmx5IGJpbmRpbmcgdG8gdGhlIGRldmljZSwgZXhwbGljaXRseVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjIwMjpcXHRcXHQgKiBjcmVhdGUgYW4gZW50cnkgaW4gdGhlIGhhc2h0YWJsZS5cXG5rZXJuZWwvYnBmL29mZmxvYWQuYy0yMDMtXFx0XFx0ICovXFxuLS1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYz04NjE9c3RhdGljIGludCBfX2luaXQgYnBmX29mZmxvYWRfaW5pdCh2b2lkKVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTg2Mi17XFxua2VybmVsL2JwZi9vZmZsb2FkLmM6ODYzOlxcdHJldHVybiByaGFzaHRhYmxlX2luaXQoXFx1MDAyNm9mZmRldnMsIFxcdTAwMjZvZmZkZXZzX3BhcmFtcyk7XFxua2VybmVsL2JwZi9vZmZsb2FkLmMtODY0LX1cXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTEzODI9c3RhdGljIGludCBtYXBfY3JlYXRlX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwgc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTE0MzMtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTQzNDpcXHQvKiBmaW5kIG1hcCB0eXBlIGFuZCBpbml0IG1hcDogaGFzaHRhYmxlIHZzIHJidHJlZSB2cyBibG9vbSB2cyAuLi4gKi9cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0xNDM1LVxcdG1hcF90eXBlID0gYXR0ci1cXHUwMDNlbWFwX3R5cGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjA5OjM1Ljc4ODI3ODc0OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzU4NTA5NzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCUEYgSGFzaHRhYmxlIEJhdGNoIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYmF0Y2ggb3BlcmF0aW9uIGltcGxlbWVudGF0aW9ucyBmb3IgQlBGIGhhc2h0YWJsZXMsIHNwZWNpZmljYWxseSB0aGUgZGVsZXRlLCB1cGRhdGUsIGFuZCBsb29rdXAgZnVuY3Rpb25zLiBJJ2xsIHN0YXJ0IHdpdGggdGhlIGRlZmluaXRpb25zIG9mOlxuXG4qICAgYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgIHdpdGhpbiBga2VybmVsL2JwZi9oYXNodGFiLmNgXG4qICAgYGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaGAgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYFxuKiAgIGBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hgIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2BcbiogICBgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoYCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgXG5cbk15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAuIEkgbmVlZCB0byBkZXRlcm1pbmUgaG93IGl0J3MgdXNlZCBhbmQgd2hldGhlciBpdCdzIHN0YXRpY2FsbHkgbGlua2VkIHdpdGhpbiBpdHMgbW9kdWxlIG9yIGV4cG9zZWQgZm9yIGV4dGVybmFsIGNhbGxzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIGNvbnRyb2wgYW5kIHVzZSBvZiBiYXRjaCBvcGVyYXRpb25zLiBLbm93aW5nIHRoZSBjYWxsIHNpdGVzIG9mIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCB3aWxsIGhpZ2hsaWdodCBob3cgYW5kIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBCUEYgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjYwNCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDowOTozOS4xNDY3OTE3NDVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MjM2MjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9oYXNodGFiLmM9MTc3MT1zdGF0aWMgaW50XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MTc3MjpfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTc3My1cXHRcXHRcXHRcXHQgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIwMTM9aHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwMTUte1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwMTY6XFx0cmV0dXJuIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgZmFsc2UsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjAxNy1cXHRcXHRcXHRcXHRcXHRcXHQgIGZhbHNlLCB0cnVlKTtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIwMjE9aHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDI0LXtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMDI1OlxcdHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIHRydWUsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjAyNi1cXHRcXHRcXHRcXHRcXHRcXHQgIGZhbHNlLCB0cnVlKTtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIwMzA9aHRhYl9tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjAzMi17XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjAzMzpcXHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCBmYWxzZSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDM0LVxcdFxcdFxcdFxcdFxcdFxcdCAgZmFsc2UsIGZhbHNlKTtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIwMzg9aHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNDEte1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwNDI6XFx0cmV0dXJuIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgdHJ1ZSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDQzLVxcdFxcdFxcdFxcdFxcdFxcdCAgZmFsc2UsIGZhbHNlKTtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTIwNDc9aHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNTAte1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwNTE6XFx0cmV0dXJuIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgZmFsc2UsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA1Mi1cXHRcXHRcXHRcXHRcXHRcXHQgIHRydWUsIHRydWUpO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjA1Nj1odGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDU5LXtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyMDYwOlxcdHJldHVybiBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKG1hcCwgYXR0ciwgdWF0dHIsIHRydWUsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA2MS1cXHRcXHRcXHRcXHRcXHRcXHQgIHRydWUsIHRydWUpO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjA2NT1odGFiX2xydV9tYXBfbG9va3VwX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjA2Ny17XFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjA2ODpcXHRyZXR1cm4gX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChtYXAsIGF0dHIsIHVhdHRyLCBmYWxzZSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDY5LVxcdFxcdFxcdFxcdFxcdFxcdCAgdHJ1ZSwgZmFsc2UpO1xcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjA3Mz1odGFiX2xydV9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTIwNzYte1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjIwNzc6XFx0cmV0dXJuIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gobWFwLCBhdHRyLCB1YXR0ciwgdHJ1ZSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yMDc4LVxcdFxcdFxcdFxcdFxcdFxcdCAgdHJ1ZSwgZmFsc2UpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDowOTozOS4xOTQwMzA2MTNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQ4NDA2MDI3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQmF0Y2ggT3BlcmF0aW9ucyBpbiBCUEYgTWFwcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgaG93IGJhdGNoIG9wZXJhdGlvbnMgYXJlIGltcGxlbWVudGVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIEJQRiBtYXBzLiBJIHNlZSBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0J3MgbGlrZWx5IGFuIGludGVybmFsIHV0aWxpdHkuIEhvd2V2ZXIsIG90aGVyIGZ1bmN0aW9ucyBsaWtlIGBodGFiX21hcF9sb29rdXBfYmF0Y2hgLCBhbmQgYGh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCBjYWxsIGl0LCBzbyBpdCdzIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZS4gTm93LCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBnZW5lcmljIGJhdGNoIG9wZXJhdGlvbnMgYXJlIHNldCB1cCwgSSBzaG91bGQgY2hlY2sgb3V0IGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgYGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaGAsIGBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hgLCBhbmQgYGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaGAuIEkgbmVlZCB0byBjb25maXJtIGlmIHRoZXNlIGBnZW5lcmljXypfYmF0Y2hgIGZ1bmN0aW9ucyBhcmUgbm9uLXN0YXRpYzsgaWYgdGhleSBhcmUsIHRoYXQncyBpbXBvcnRhbnQgZm9yIGhvdyB0aGV5J3JlIGV4cG9zZWQgYW5kIHV0aWxpemVkIGluIHRoZSBvdmVyYWxsIHN5c3RlbS4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGVpciBkZWNsYXJhdGlvbnMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBjb3JlIGJhdGNoIGZ1bmN0aW9uYWxpdHkgaXMgc3RydWN0dXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxMjUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MDk6NDIuNjc4MDkzNDM1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njk3ODYzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZW5lcmljX21hcF8uKl9iYXRjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2FycmF5bWFwLmM9ODU4PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcnJheV9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTg3NC1cXHQubWFwX2NoZWNrX2J0ZiA9IGFycmF5X21hcF9jaGVja19idGYsXFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjg3NTpcXHQubWFwX2xvb2t1cF9iYXRjaCA9IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6ODc2OlxcdC5tYXBfdXBkYXRlX2JhdGNoID0gZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy04NzctXFx0Lm1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyA9IG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyxcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYz04ODU9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHBlcmNwdV9hcnJheV9tYXBfb3BzID0ge1xcbi0tXFxua2VybmVsL2JwZi9hcnJheW1hcC5jLTg5OS1cXHQubWFwX2NoZWNrX2J0ZiA9IGFycmF5X21hcF9jaGVja19idGYsXFxua2VybmVsL2JwZi9hcnJheW1hcC5jOjkwMDpcXHQubWFwX2xvb2t1cF9iYXRjaCA9IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6OTAxOlxcdC5tYXBfdXBkYXRlX2JhdGNoID0gZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoLFxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy05MDItXFx0Lm1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyA9IG1hcF9zZXRfZm9yX2VhY2hfY2FsbGJhY2tfYXJncyxcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYz0xNTA0PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcnJheV9vZl9tYXBzX21hcF9vcHMgPSB7XFxuLS1cXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMTUxNC1cXHQubWFwX2dlbl9sb29rdXAgPSBhcnJheV9vZl9tYXBfZ2VuX2xvb2t1cCxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6MTUxNTpcXHQubWFwX2xvb2t1cF9iYXRjaCA9IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6MTUxNjpcXHQubWFwX3VwZGF0ZV9iYXRjaCA9IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCxcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMTUxNy1cXHQubWFwX2NoZWNrX2J0ZiA9IG1hcF9jaGVja19ub19idGYsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zMS1cXHQubWFwX3VwZGF0ZV9iYXRjaCA9XFx0XFx0XFx0XFxcXFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjMyOlxcdGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaCxcXHRcXHRcXFxcXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzMtXFx0Lm1hcF9kZWxldGVfYmF0Y2ggPVxcdFxcdFxcdFxcXFxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNDpcXHRnZW5lcmljX21hcF9kZWxldGVfYmF0Y2hcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNS1cXG4tLVxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYz03NzU9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHRyaWVfbWFwX29wcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYy03ODItXFx0Lm1hcF9kZWxldGVfZWxlbSA9IHRyaWVfZGVsZXRlX2VsZW0sXFxua2VybmVsL2JwZi9scG1fdHJpZS5jOjc4MzpcXHQubWFwX2xvb2t1cF9iYXRjaCA9IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaCxcXG5rZXJuZWwvYnBmL2xwbV90cmllLmM6Nzg0OlxcdC5tYXBfdXBkYXRlX2JhdGNoID0gZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoLFxcbmtlcm5lbC9icGYvbHBtX3RyaWUuYzo3ODU6XFx0Lm1hcF9kZWxldGVfYmF0Y2ggPSBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2gsXFxua2VybmVsL2JwZi9scG1fdHJpZS5jLTc4Ni1cXHQubWFwX2NoZWNrX2J0ZiA9IHRyaWVfY2hlY2tfYnRmLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTk1Mz1zdGF0aWMgaW50IG1hcF9nZXRfbmV4dF9rZXkodW5pb24gYnBmX2F0dHIgKmF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMDA4LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjIwMDk6aW50IGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTIwMTAtXFx0XFx0XFx0ICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTIwNjQtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MjA2NTppbnQgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBmaWxlICptYXBfZmlsZSxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMDY2LVxcdFxcdFxcdCAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yMTIyLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjIxMjM6aW50IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTIxMjQtXFx0XFx0XFx0XFx0ICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDowOTo0Mi43MjUwNzU3NDNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzYxOTQzNjY4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQlBGIEJhdGNoIE9wZXJhdGlvbiBFbnRyeXBvaW50KipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZXNlIEJQRiBiYXRjaCBvcGVyYXRpb25zLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB0cmFjZSB0aGUgcGF0aCBmcm9tIGEgc3lzdGVtIGNhbGwgYWxsIHRoZSB3YXkgZG93biBpbnRvIHRoZSBrZXJuZWwgY29kZSB0aGF0IGhhbmRsZXMgdGhlc2UgYmF0Y2hlcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgYGJwZl9tYXBfZG9fYmF0Y2hgIOKAkyB0aGF0IG5hbWUganVzdCBzY3JlYW1zIFwiYmF0Y2ggb3BlcmF0aW9uXCIg4oCTIGFuZCB3aGVyZSdzIHRoZSBtb3N0IGxpa2VseSBwbGFjZT8gVGhlIHVzdWFsIHN1c3BlY3Q6IGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIExldCdzIHNlZSBob3cgdGhlIHN5c2NhbGwgbWVjaGFuaXNtIGZ1bm5lbHMgaW50byB0aGUgaGVhcnQgb2YgdGhpcyBmdW5jdGlvbmFsaXR5LiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgaGlnaC1sZXZlbCBmbG93IGFuZCB3aGVyZSB0byBsb29rIGZvciB0aGUgbG93ZXItbGV2ZWwgZGV0YWlscyBvZiB0aGUgYmF0Y2ggcHJvY2Vzc2luZyBpdHNlbGYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjQ0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MDk6NDYuMzQ0NTE1NzNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3Nzg5NDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9tYXBfZG9fYmF0Y2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmM9NTY2ND1zdGF0aWMgaW50IGJwZl90YXNrX2ZkX3F1ZXJ5KGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTc0Ni1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1NzQ3OnN0YXRpYyBpbnQgYnBmX21hcF9kb19iYXRjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NzQ4LVxcdFxcdFxcdCAgICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjMwMz1zdGF0aWMgaW50IF9fc3lzX2JwZihlbnVtIGJwZl9jbWQgY21kLCBicGZwdHJfdCB1YXR0ciwgdW5zaWduZWQgaW50IHNpemUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDI4LVxcdGNhc2UgQlBGX01BUF9MT09LVVBfQkFUQ0g6XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjQyOTpcXHRcXHRlcnIgPSBicGZfbWFwX2RvX2JhdGNoKFxcdTAwMjZhdHRyLCB1YXR0ci51c2VyLCBCUEZfTUFQX0xPT0tVUF9CQVRDSCk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQzMC1cXHRcXHRicmVhaztcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDMxLVxcdGNhc2UgQlBGX01BUF9MT09LVVBfQU5EX0RFTEVURV9CQVRDSDpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2NDMyOlxcdFxcdGVyciA9IGJwZl9tYXBfZG9fYmF0Y2goXFx1MDAyNmF0dHIsIHVhdHRyLnVzZXIsXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQzMy1cXHRcXHRcXHRcXHQgICAgICAgQlBGX01BUF9MT09LVVBfQU5EX0RFTEVURV9CQVRDSCk7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDM1LVxcdGNhc2UgQlBGX01BUF9VUERBVEVfQkFUQ0g6XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjQzNjpcXHRcXHRlcnIgPSBicGZfbWFwX2RvX2JhdGNoKFxcdTAwMjZhdHRyLCB1YXR0ci51c2VyLCBCUEZfTUFQX1VQREFURV9CQVRDSCk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQzNy1cXHRcXHRicmVhaztcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDM4LVxcdGNhc2UgQlBGX01BUF9ERUxFVEVfQkFUQ0g6XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjQzOTpcXHRcXHRlcnIgPSBicGZfbWFwX2RvX2JhdGNoKFxcdTAwMjZhdHRyLCB1YXR0ci51c2VyLCBCUEZfTUFQX0RFTEVURV9CQVRDSCk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ0MC1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MDk6NDYuMzkyMzE0NzE4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2NzU5OTgyMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmllZDogQlBGIEludGVnZXIgT3ZlcmZsb3cqKlxuXG5Pa2F5LCB0aGlzIGlzIHByaW1lIGZ1enppbmcgbWF0ZXJpYWwuIEEgY3JpdGljYWwgaW50ZWdlciBvdmVyZmxvdyB3aXRoaW4gdGhlIEJQRiBjb3JlIHN1YnN5c3RlbSDigJMgZXhjZWxsZW50ISBUaGUgZmFjdCB0aGF0IGl0J3MgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBgYnBmKDIpYCBzeXNjYWxscyB3aXRoIHRob3NlIGBCUEZfTUFQXypfQkFUQ0hgIGNvbW1hbmRzIG1ha2VzIGl0IGV2ZW4gbW9yZSBhcHBlYWxpbmcuIEVhc3kgYWNjZXNzIGlzIGtleSBmb3IgZnV6emluZy5cblxuTXkgaW5pdGlhbCBzY2FuIGZvY3VzZXMgb24gdGhlIGZpeGVzOiB3ZSdyZSBkZWFsaW5nIHdpdGggaW50ZWdlciBvdmVyZmxvd3MgaW4gYXJpdGhtZXRpYyBvZmZzZXQgY2FsY3VsYXRpb25zIOKAkyBzcGVjaWZpY2FsbHksIGB0b3RhbCAqIGtleV9zaXplYCB0cmFuc2Zvcm1hdGlvbnMgdG8gYChzaXplX3QpdG90YWwgKiBrZXlfc2l6ZWAgd2l0aGluIGZ1bmN0aW9ucyBsaWtlIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCwgYGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaGAsIGBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hgLCBhbmQgYGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaGAuIFRoaXMgaXMgd2hlcmUgdGhlIHZ1bG5lcmFiaWxpdGllcyB3aWxsIGxpa2VseSBiZS5cblxuTm93LCBiZWZvcmUgSSBkaWcgaW50byBjcmFmdGluZyB0aGUgZnV6emVyLCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMuIExldCBtZSBjaGVjayBgaW5pdC9LY29uZmlnYCBvciwgbW9yZSBsaWtlbHksIGBrZXJuZWwvYnBmL0tjb25maWdgIHRvIGVuc3VyZSB0aGUgY29kZSBpcyBhY3R1YWxseSBlbmFibGVkIGFuZCB0aGF0IGFueSBkZXBlbmRlbmNpZXMgYXJlIHNhdGlzZmllZC4gR290dGEgbWFrZSBzdXJlIEknbSB0YXJnZXRpbmcgdGhlIHJpZ2h0IGNvZGUgcGF0aCBhbmQgdW5kZXJzdGFuZCB0aGUgY29tcGlsYXRpb24gZW52aXJvbm1lbnQgYmVmb3JlIEkgd2FzdGUgYW55IHRpbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDIwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjA5OjUxLjA2ODMxNTQ3OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxMTE0NzksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MDk6NTEuMTEyNDM0NDM4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3MjI2NzQ3MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gSHVudGluZyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBmaWd1cmUgb3V0IHRoZSBjdXJyZW50IHN0YXRlIG9mIGBCUEZfU1lTQ0FMTGAgd2l0aGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSdtIHRoaW5raW5nLCBhIHF1aWNrIGBncmVwYCB0aHJvdWdoIHRoZSBrZXJuZWwgc291cmNlIGlzIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gc3RhcnQsIGxpa2VseSB0YXJnZXRpbmcgdGhlIGBjb25maWdgIGZpbGVzIGRpcmVjdGx5LiBJIHdhbnQgdG8gc2VlIHdoZXJlIHRoaXMgb3B0aW9uIGlzIGRlZmluZWQsIGhvdyBpdCdzIHVzZWQsIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLiBUaGlzIHNob3VsZCBxdWlja2x5IHJldmVhbCBpZiBpdCdzIGVuYWJsZWQsIGRpc2FibGVkLCBvciBidWlsdCBhcyBhIG1vZHVsZSBpbiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9ucyBvciBvdGhlciBrZXJuZWwgc3ViLWFyY2hpdGVjdHVyZXMgSSB3YW50IHRvIGV4YW1pbmUuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBjaGVjayB0aGUgYEtjb25maWdgIGZpbGVzLCBidXQgYWxzbyBsb29rIGZvciByZWZlcmVuY2VzIGluIGJ1aWxkIGZpbGVzIGFuZCBoZWFkZXJzIHRvIGFzc2VzcyB1c2FnZSBhbmQgaW5jbHVzaW9uIHBvaW50cy4gVGhpcyBzaG91bGQgdGVsbCBtZSBxdWlja2x5IHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBkZWVwZXIgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODc1LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MDk6NTMuODM1MTExNTkyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTkxMTQxNTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjA5OjU1LjQyNjI1ODI1NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzg4MTcxMjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEJQRiBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgQlBGIHN1YnN5c3RlbSBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLiBJJ20gZ29pbmcgdG8gbmF2aWdhdGUgZGlyZWN0bHkgdG8gYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IHNlY3Rpb24gYXJvdW5kIGxpbmUgMjcuIEhvcGVmdWxseSwgdGhpcyB3aWxsIHByb3ZpZGUgdGhlIGluaXRpYWwgY29udGV4dCBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcy4gVGhpcyBLY29uZmlnIGZpbGUgd2lsbCBiZSB0aGUgcGVyZmVjdCBwbGFjZSB0byBzdGFydC4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTg4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MDk6NTcuODE0NDMxNDYzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyMDpcXHQjIFVzZWQgYnkgYXJjaHMgdG8gdGVsbCB0aGF0IHRoZXkgd2FudCB0aGUgQlBGIEpJVCBjb21waWxlciBlbmFibGVkIGJ5XFxuICAyMTpcXHQjIGRlZmF1bHQgZm9yIGtlcm5lbHMgdGhhdCB3ZXJlIGNvbXBpbGVkIHdpdGggQlBGIEpJVCBzdXBwb3J0LlxcbiAgMjI6XFx0Y29uZmlnIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVRcXG4gIDIzOlxcdFxcdGJvb2xcXG4gIDI0OlxcdFxcbiAgMjU6XFx0bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG4gIDI2OlxcdFxcbiAgMjc6XFx0Y29uZmlnIEJQRl9TWVNDQUxMXFxuICAyODpcXHRcXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuICAyOTpcXHRcXHRzZWxlY3QgQlBGXFxuICAzMDpcXHRcXHRzZWxlY3QgSVJRX1dPUktcXG4gIDMxOlxcdFxcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxcbiAgMzI6XFx0XFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxcbiAgMzM6XFx0XFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcXG4gIDM0OlxcdFxcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXFxuICAzNTpcXHRcXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcXG4gIDM2OlxcdFxcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXFxuICAzNzpcXHRcXHRkZWZhdWx0IG5cXG4gIDM4OlxcdFxcdGhlbHBcXG4gIDM5OlxcdFxcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xcbiAgNDA6XFx0XFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cXG4gIDQxOlxcdFxcbiAgNDI6XFx0Y29uZmlnIEJQRl9KSVRcXG4gIDQzOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbiAgNDQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MDk6NTcuODE0NDk2NjIzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYyNDM2MjM4MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXMgU3ltYm9sIGFuZCBJbnN0cnVjdGlvbiBSZXZpZXcqKlxuXG5Pa2F5LCBsZXQncyBzZWUsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBmb2N1cyBzeW1ib2xzIHRvIHVzZSBoZXJlLiBJJ3ZlIGlkZW50aWZpZWQgc2V2ZXJhbCBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQ6IGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCAoc3RhdGljIHdpdGhpbiBga2VybmVsL2JwZi9oYXNodGFiLmNgKSwgYW5kIHRoZW4gYGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaGAsIGBnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hgLCBhbmQgYGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaGAsIGFsbCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBBbmQgYSBidW5jaCBvZiBjYWxsZXJzIHRvIHRoZSBmaXJzdCBvbmU6IGBodGFiX21hcF9sb29rdXBfYmF0Y2hgLCBgaHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgLCBgaHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9iYXRjaGAsIGFuZCBvdGhlcnMuXG5cbk5vdywgYSBjcml0aWNhbCBzdGVwOiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoYCwgYGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaGAsIGBodGFiX21hcF9sb29rdXBfYmF0Y2hgLCBhbmQgYGh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCBhcmUgdGhlIHJpZ2h0IG9uZXMgdG8gZm9jdXMgb24uIFllcCwgdGhlc2Ugc2VlbSBwZXJmZWN0LiBUaGV5J3JlIHNwZWNpZmljIHRvIEJQRiBiYXRjaCBvcGVyYXRpb25zIGFuZCBkaXJlY3RseSBjYWxsIGludG8gdGhlIGNvZGUgdGhhdCdzIGJlZW4gY2hhbmdlZC5cblxuQWxyaWdodCwgbGV0J3MgbWFrZSBzdXJlIEkndmUgZ290IGV2ZXJ5dGhpbmcgc3RyYWlnaHQgaW4gdGhlIGluc3RydWN0aW9ucy4gYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIHRydWUuIFRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgbm9uLXViaXF1aXRvdXMsIGFuZCB0aGUga2VybmVsIGZ1bmN0aW9ucyBkaXJlY3RseSBoaXQgdGhlIG1vZGlmaWVkIGxvZ2ljLCBhcyB3ZSBqdXN0IGVzdGFibGlzaGVkLiBTcGVjaWZpY2FsbHk6IGBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoYCwgYGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaGAsIGBodGFiX21hcF9sb29rdXBfYmF0Y2hgLCBhbmQgYGh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYC4gVGhlIGBFbmFibGVDb25maWdzYCBhcmUgY29ycmVjdGx5IHNwZWNpZmllZCBhcyBgQlBGX1NZU0NBTExgICh3aXRob3V0IHRoZSBgQ09ORklHX2AgcHJlZml4KS4gVGhlIHJlYXNvbmluZyBpcyBhbHNvIGNsZWFyIGFuZCBjb25jaXNlLlxuXG5BbGwgc2VlbXMgdG8gYmUgaW4gb3JkZXIuIFJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2OTksIk91dHB1dFRva2VucyI6MTc0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDk0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MTA6MDQuMDU4MTIzMzA4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ2NzE5NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2VuZXJpY19tYXBfZGVsZXRlX2JhdGNoXCIsXG4gICAgXCJnZW5lcmljX21hcF91cGRhdGVfYmF0Y2hcIixcbiAgICBcImdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaFwiLFxuICAgIFwiaHRhYl9tYXBfbG9va3VwX2JhdGNoXCIsXG4gICAgXCJodGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGFyaXRobWV0aWMgb2Zmc2V0IGNvbXB1dGF0aW9ucyBkdXJpbmcgdXNlciBtZW1vcnkgY29weWluZyBpbiBCUEYgYmF0Y2ggbWFwIG9wZXJhdGlvbnMgKGdlbmVyaWMgbWFwIGRlbGV0ZS91cGRhdGUvbG9va3VwIGJhdGNoIGhhbmRsZXJzIGFuZCBoYXNoIHRhYmxlIGJhdGNoIGxvb2t1cC1hbmQtZGVsZXRlKSB0byBjYXN0IGluZGljZXMvbXVsdGlwbGllcnMgdG8gc2l6ZV90IHRvIHByZXZlbnQgcG90ZW50aWFsIGludGVnZXIgdHJ1bmNhdGlvbiBvciBvdmVyZmxvdy4gVGhlc2UgY29kZSBwYXRocyBhcmUgZnVsbHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgd2l0aCBCUEZfTUFQXypfQkFUQ0ggY29tbWFuZHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZW5lcmljX21hcF9kZWxldGVfYmF0Y2hcIixcbiAgICBcImdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaFwiLFxuICAgIFwiZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoXCIsXG4gICAgXCJodGFiX21hcF9sb29rdXBfYmF0Y2hcIixcbiAgICBcImh0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYXJpdGhtZXRpYyBvZmZzZXQgY29tcHV0YXRpb25zIGR1cmluZyB1c2VyIG1lbW9yeSBjb3B5aW5nIGluIEJQRiBiYXRjaCBtYXAgb3BlcmF0aW9ucyAoZ2VuZXJpYyBtYXAgZGVsZXRlL3VwZGF0ZS9sb29rdXAgYmF0Y2ggaGFuZGxlcnMgYW5kIGhhc2ggdGFibGUgYmF0Y2ggbG9va3VwLWFuZC1kZWxldGUpIHRvIGNhc3QgaW5kaWNlcy9tdWx0aXBsaWVycyB0byBzaXplX3QgdG8gcHJldmVudCBwb3RlbnRpYWwgaW50ZWdlciB0cnVuY2F0aW9uIG9yIG92ZXJmbG93LiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBmdWxseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB3aXRoIEJQRl9NQVBfKl9CQVRDSCBjb21tYW5kcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MTA6MDQuMTMyODAxMzY1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzg5NzI3NDM5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjEwOjA0LjEzMzI1MzkzNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMzODk2ODE2NDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGV4cGxpY2l0IGAoc2l6ZV90KWAgY2FzdHMgdG8gdXNlciBwb2ludGVyIG9mZnNldCBhbmQgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiBCUEYgYmF0Y2ggb3BlcmF0aW9ucyAoc3VjaCBhcyBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAsIGBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoYCwgYW5kIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgKSB0byBwcmV2ZW50IDMyLWJpdCBpbnRlZ2VyIG11bHRpcGxpY2F0aW9uIG92ZXJmbG93cyBvbiA2NC1iaXQgc3lzdGVtcy5cXG5cXG5UaGVzZSBjaGFuZ2VzIHN0cmljdGx5IGZpeCBpbnRlZ2VyIGFyaXRobWV0aWMgYW5kIHVzZXIgc3BhY2UgYWRkcmVzcyBjYWxjdWxhdGlvbnMuIFRoZXkgZG8gbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMvcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCBkYXRhIGxlYWtzIHRvIHVzZXIgc3BhY2UuIEFueSBtZW1vcnkgc2FmZXR5IG9yIGFyaXRobWV0aWMgaXNzdWVzIHJlbGF0ZWQgdG8gdGhlc2UgY2FsY3VsYXRpb25zIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL1VCU0FOIGJ1aWxkcy4gSGVuY2UsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzZTBkNzg1MDY3MTYwYTI3MzkxNTM1NWJhZDY0YWQ3YjEyYTUzYTZkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAyMDowOToxNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGFzaHRhYi5jIGIva2VybmVsL2JwZi9oYXNodGFiLmNcbmluZGV4IGQ0MGNiNWRkNDQ2Y2EuLmJkMzcwNGVkOTMzM2UgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuKysrIGIva2VybmVsL2JwZi9oYXNodGFiLmNcbkBAIC0xOTc3LDEwICsxOTc3LDEwIEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0YnBmX2VuYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcbi1cdGlmIChidWNrZXRfY250IFx1MDAyNlx1MDAyNiAoY29weV90b191c2VyKHVrZXlzICsgdG90YWwgKiBrZXlfc2l6ZSwga2V5cyxcbi1cdCAgICBrZXlfc2l6ZSAqIGJ1Y2tldF9jbnQpIHx8XG4tXHQgICAgY29weV90b191c2VyKHV2YWx1ZXMgKyB0b3RhbCAqIHZhbHVlX3NpemUsIHZhbHVlcyxcbi1cdCAgICB2YWx1ZV9zaXplICogYnVja2V0X2NudCkpKSB7XG4rXHRpZiAoYnVja2V0X2NudCBcdTAwMjZcdTAwMjYgKGNvcHlfdG9fdXNlcih1a2V5cyArIChzaXplX3QpdG90YWwgKiBrZXlfc2l6ZSwga2V5cyxcbitcdCAgICAoc2l6ZV90KWtleV9zaXplICogYnVja2V0X2NudCkgfHxcbitcdCAgICBjb3B5X3RvX3VzZXIodXZhbHVlcyArIChzaXplX3QpdG90YWwgKiB2YWx1ZV9zaXplLCB2YWx1ZXMsXG4rXHQgICAgKHNpemVfdCl2YWx1ZV9zaXplICogYnVja2V0X2NudCkpKSB7XG4gXHRcdHJldCA9IC1FRkFVTFQ7XG4gXHRcdGdvdG8gYWZ0ZXJfbG9vcDtcbiBcdH1cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5pbmRleCA2ODc0YmExNDI0YWYwLi43MzEzODhhZTAwYWQxIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9zeXNjYWxsLmNcbisrKyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXG5AQCAtMjAzNiw3ICsyMDM2LDcgQEAgaW50IGdlbmVyaWNfbWFwX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIFxuIFx0Zm9yIChjcCA9IDA7IGNwIFx1MDAzYyBtYXhfY291bnQ7IGNwKyspIHtcbiBcdFx0ZXJyID0gLUVGQVVMVDtcbi1cdFx0aWYgKGNvcHlfZnJvbV91c2VyKGtleSwga2V5cyArIGNwICogbWFwLVx1MDAzZWtleV9zaXplLFxuK1x0XHRpZiAoY29weV9mcm9tX3VzZXIoa2V5LCBrZXlzICsgKHNpemVfdCljcCAqIG1hcC1cdTAwM2VrZXlfc2l6ZSxcbiBcdFx0XHRcdCAgIG1hcC1cdTAwM2VrZXlfc2l6ZSkpXG4gXHRcdFx0YnJlYWs7XG4gXG5AQCAtMjA5OCw5ICsyMDk4LDkgQEAgaW50IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqbWFwX2ZpbGUsXG4gXG4gXHRmb3IgKGNwID0gMDsgY3AgXHUwMDNjIG1heF9jb3VudDsgY3ArKykge1xuIFx0XHRlcnIgPSAtRUZBVUxUO1xuLVx0XHRpZiAoY29weV9mcm9tX3VzZXIoa2V5LCBrZXlzICsgY3AgKiBtYXAtXHUwMDNla2V5X3NpemUsXG4rXHRcdGlmIChjb3B5X2Zyb21fdXNlcihrZXksIGtleXMgKyAoc2l6ZV90KWNwICogbWFwLVx1MDAzZWtleV9zaXplLFxuIFx0XHQgICAgbWFwLVx1MDAzZWtleV9zaXplKSB8fFxuLVx0XHQgICAgY29weV9mcm9tX3VzZXIodmFsdWUsIHZhbHVlcyArIGNwICogdmFsdWVfc2l6ZSwgdmFsdWVfc2l6ZSkpXG4rXHRcdCAgICBjb3B5X2Zyb21fdXNlcih2YWx1ZSwgdmFsdWVzICsgKHNpemVfdCljcCAqIHZhbHVlX3NpemUsIHZhbHVlX3NpemUpKVxuIFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRlcnIgPSBicGZfbWFwX3VwZGF0ZV92YWx1ZShtYXAsIG1hcF9maWxlLCBrZXksIHZhbHVlLFxuQEAgLTIxNzksMTIgKzIxNzksMTIgQEAgaW50IGdlbmVyaWNfbWFwX2xvb2t1cF9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gZnJlZV9idWY7XG4gXG4tXHRcdGlmIChjb3B5X3RvX3VzZXIoa2V5cyArIGNwICogbWFwLVx1MDAzZWtleV9zaXplLCBrZXksXG4rXHRcdGlmIChjb3B5X3RvX3VzZXIoa2V5cyArIChzaXplX3QpY3AgKiBtYXAtXHUwMDNla2V5X3NpemUsIGtleSxcbiBcdFx0XHRcdCBtYXAtXHUwMDNla2V5X3NpemUpKSB7XG4gXHRcdFx0ZXJyID0gLUVGQVVMVDtcbiBcdFx0XHRnb3RvIGZyZWVfYnVmO1xuIFx0XHR9XG4tXHRcdGlmIChjb3B5X3RvX3VzZXIodmFsdWVzICsgY3AgKiB2YWx1ZV9zaXplLCB2YWx1ZSwgdmFsdWVfc2l6ZSkpIHtcbitcdFx0aWYgKGNvcHlfdG9fdXNlcih2YWx1ZXMgKyAoc2l6ZV90KWNwICogdmFsdWVfc2l6ZSwgdmFsdWUsIHZhbHVlX3NpemUpKSB7XG4gXHRcdFx0ZXJyID0gLUVGQVVMVDtcbiBcdFx0XHRnb3RvIGZyZWVfYnVmO1xuIFx0XHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoxMDowNC4xMzMyNTcwMjVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTM3NDIwMjg4NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggbmVjZXNzaXRhdGVzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTXkgZmlyc3Qgc3RlcCBpcyB0byByZXZpc2l0IHRoZSBlc3RhYmxpc2hlZCByaXNrIGFuZCBzYWZldHkgcG9saWNpZXMgdG8gZ2V0IGEgY2xlYXIgcGVyc3BlY3RpdmUuXG5cbkZyb20gYSBzYWZldHkgZXZhbHVhdGlvbiBzdGFuZHBvaW50LCB0aGUgdGFzayBjbGVhcmx5IGZhbGxzIHVuZGVyIHRoZSBwdXJ2aWV3IG9mIGNvZGUgcmV2aWV3IGFuZCB0cmlhZ2UsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHNhbml0aXplcnMg4oCTIEtBU0FOIHZlcnN1cyBLTVNBTiBpbiB0aGlzIGNhc2UuIEl0J3MgYSBtYXR0ZXIgb2YgZGVmZW5zaXZlIHNlY3VyaXR5IGVuZ2luZWVyaW5nLCBxdWFsaXR5IGFzc3VyYW5jZSwgYW5kIGluLWRlcHRoIGNvZGUgYW5hbHlzaXMuIEJhc2VkIG9uIG15IGluaXRpYWwgdW5kZXJzdGFuZGluZywgdGhlIGNsYXNzaWZpY2F0aW9uIGhlcmUgaXMgXCJCZW5pZ25cIiBvciBcIk5vbmVcIiBzZXZlcml0eS5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIHBhdGNoIGl0c2VsZi4gSXQgc2VlbXMgdGhlIGNvcmUgY2hhbmdlIGludm9sdmVzIGFkZGluZyBgKHNpemVfdClgIGNhc3RzIHRvIHBvaW50ZXIgb2Zmc2V0IGFuZCBzaXplIGNhbGN1bGF0aW9ucyB3aXRoaW4gQlBGIGJhdGNoIG9wZXJhdGlvbnMuIFNwZWNpZmljYWxseSwgdGhlc2UgY2FzdHMgYXJlIHByZXNlbnQgaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYCwgaW4gdGhlIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYCBmdW5jdGlvbiwgYW5kIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2Agd2l0aGluIHRoZSBgZ2VuZXJpY19tYXBfZGVsZXRlX2JhdGNoYCwgYGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaGAsIGFuZCBgZ2VuZXJpY19tYXBfbG9va3VwX2JhdGNoYCBmdW5jdGlvbnMuIFRoZSBjYXN0cyBhcmUgYmVpbmcgYWRkZWQgdG8gZW5zdXJlIHRoYXQgbXVsdGlwbGljYXRpb25zIG9mIGludGVnZXJzIHRoYXQgY291bGQgb3ZlcmZsb3cgd2hlbiBjYWxjdWxhdGluZyB0aGUgbG9jYXRpb24gdG8gcmVhZCBmcm9tL3dyaXRlIHRvIGluIHVzZXJzcGFjZSBtZW1vcnkgd2lsbCBiZSBjYXN0IHRvIGEgc2l6ZV90LCB3aGljaCBpcyAocHJvYmFibHkpIGxhcmdlci5cblxuSW4gbW9yZSBkZXRhaWwsIHRoZSBmdW5jdGlvbnMgYWZmZWN0ZWQgaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYCBhcmUgdXNpbmcgaW50ZWdlciBhcml0aG1ldGljIHRoYXQgY291bGQgaGF2ZSBwb3RlbnRpYWxseSBvdmVyZmxvd2VkLCBhcyB3ZXJlIHRoZSBmdW5jdGlvbnMgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYC5cblxuVG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgaW1wbGljYXRpb25zLCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYCBhbmQgYGtlcm5lbC9icGYvc3lzY2FsbC5jYC4gSSdsbCB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIGZvciB0aGF0LCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIHR5cGVzIGludm9sdmVkLCB0aGUgcmFuZ2VzIG9mIHZhbHVlcyB0aGV5IG1pZ2h0IGhvbGQsIGFuZCBob3cgdGhlc2UgY2FsY3VsYXRpb25zIGFyZSB1c2VkLiBPbmNlIEkgaGF2ZSB0aGF0IGNvbnRleHQsIEkgY2FuIG1ha2UgYSBtdWNoIG1vcmUgaW5mb3JtZWQgZGVjaXNpb24gYWJvdXQgd2hldGhlciBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIGFjdHVhbGx5IG5lZWRlZCBvciBpZiB0aGlzIGlzLCBhcyBpdCBhcHBlYXJzLCBhIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkIHNhZmV0eSBmaXguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NTMsIk91dHB1dFRva2VucyI6NzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoxMDoxNy44NzUyODg1OTJaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwNDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvaGFzaHRhYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5NzAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE5NzA6XFx0XFx0LyogSWYgd2UgYXJlIG5vdCBjb3B5aW5nIGRhdGEsIHdlIGNhbiBnbyB0byBuZXh0IGJ1Y2tldCBhbmQgYXZvaWRcXG4xOTcxOlxcdFxcdCAqIHVubG9ja2luZyB0aGUgcmN1LlxcbjE5NzI6XFx0XFx0ICovXFxuMTk3MzpcXHRcXHRpZiAoIWJ1Y2tldF9jbnQgXFx1MDAyNlxcdTAwMjYgKGJhdGNoICsgMSBcXHUwMDNjIGh0YWItXFx1MDAzZW5fYnVja2V0cykpIHtcXG4xOTc0OlxcdFxcdFxcdGJhdGNoKys7XFxuMTk3NTpcXHRcXHRcXHRnb3RvIGFnYWluX25vY29weTtcXG4xOTc2OlxcdFxcdH1cXG4xOTc3OlxcdFxcbjE5Nzg6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMTk3OTpcXHRcXHRicGZfZW5hYmxlX2luc3RydW1lbnRhdGlvbigpO1xcbjE5ODA6XFx0XFx0aWYgKGJ1Y2tldF9jbnQgXFx1MDAyNlxcdTAwMjYgKGNvcHlfdG9fdXNlcih1a2V5cyArIChzaXplX3QpdG90YWwgKiBrZXlfc2l6ZSwga2V5cyxcXG4xOTgxOlxcdFxcdCAgICAoc2l6ZV90KWtleV9zaXplICogYnVja2V0X2NudCkgfHxcXG4xOTgyOlxcdFxcdCAgICBjb3B5X3RvX3VzZXIodXZhbHVlcyArIChzaXplX3QpdG90YWwgKiB2YWx1ZV9zaXplLCB2YWx1ZXMsXFxuMTk4MzpcXHRcXHQgICAgKHNpemVfdCl2YWx1ZV9zaXplICogYnVja2V0X2NudCkpKSB7XFxuMTk4NDpcXHRcXHRcXHRyZXQgPSAtRUZBVUxUO1xcbjE5ODU6XFx0XFx0XFx0Z290byBhZnRlcl9sb29wO1xcbjE5ODY6XFx0XFx0fVxcbjE5ODc6XFx0XFxuMTk4ODpcXHRcXHR0b3RhbCArPSBidWNrZXRfY250O1xcbjE5ODk6XFx0XFx0YmF0Y2grKztcXG4xOTkwOlxcdFxcdGlmIChiYXRjaCBcXHUwMDNlPSBodGFiLVxcdTAwM2VuX2J1Y2tldHMpIHtcXG4xOTkxOlxcdFxcdFxcdHJldCA9IC1FTk9FTlQ7XFxuMTk5MjpcXHRcXHRcXHRnb3RvIGFmdGVyX2xvb3A7XFxuMTk5MzpcXHRcXHR9XFxuMTk5NDpcXHRcXHRnb3RvIGFnYWluO1xcbjE5OTU6XFx0XFxuMTk5NjpcXHRhZnRlcl9sb29wOlxcbjE5OTc6XFx0XFx0aWYgKHJldCA9PSAtRUZBVUxUKVxcbjE5OTg6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTk5OTpcXHRcXG4yMDAwOlxcdFxcdC8qIGNvcHkgIyBvZiBlbnRyaWVzIGFuZCBuZXh0IGJhdGNoICovXFxuMjAwMTpcXHRcXHR1YmF0Y2ggPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cXHUwMDNlYmF0Y2gub3V0X2JhdGNoKTtcXG4yMDAyOlxcdFxcdGlmIChjb3B5X3RvX3VzZXIodWJhdGNoLCBcXHUwMDI2YmF0Y2gsIHNpemVvZihiYXRjaCkpIHx8XFxuMjAwMzpcXHRcXHQgICAgcHV0X3VzZXIodG90YWwsIFxcdTAwMjZ1YXR0ci1cXHUwMDNlYmF0Y2guY291bnQpKVxcbjIwMDQ6XFx0XFx0XFx0cmV0ID0gLUVGQVVMVDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MTA6MTcuODc1NTIwODgyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzMzQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDMwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMDMwOlxcdFxcdGlmIChwdXRfdXNlcigwLCBcXHUwMDI2dWF0dHItXFx1MDAzZWJhdGNoLmNvdW50KSlcXG4yMDMxOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjIwMzI6XFx0XFxuMjAzMzpcXHRcXHRrZXkgPSBrdm1hbGxvYyhtYXAtXFx1MDAzZWtleV9zaXplLCBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7XFxuMjAzNDpcXHRcXHRpZiAoIWtleSlcXG4yMDM1OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjIwMzY6XFx0XFxuMjAzNzpcXHRcXHRmb3IgKGNwID0gMDsgY3AgXFx1MDAzYyBtYXhfY291bnQ7IGNwKyspIHtcXG4yMDM4OlxcdFxcdFxcdGVyciA9IC1FRkFVTFQ7XFxuMjAzOTpcXHRcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoa2V5LCBrZXlzICsgKHNpemVfdCljcCAqIG1hcC1cXHUwMDNla2V5X3NpemUsXFxuMjA0MDpcXHRcXHRcXHRcXHRcXHQgICBtYXAtXFx1MDAzZWtleV9zaXplKSlcXG4yMDQxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjIwNDI6XFx0XFxuMjA0MzpcXHRcXHRcXHRpZiAoYnBmX21hcF9pc19vZmZsb2FkZWQobWFwKSkge1xcbjIwNDQ6XFx0XFx0XFx0XFx0ZXJyID0gYnBmX21hcF9vZmZsb2FkX2RlbGV0ZV9lbGVtKG1hcCwga2V5KTtcXG4yMDQ1OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjIwNDY6XFx0XFx0XFx0fVxcbjIwNDc6XFx0XFxuMjA0ODpcXHRcXHRcXHRicGZfZGlzYWJsZV9pbnN0cnVtZW50YXRpb24oKTtcXG4yMDQ5OlxcdFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4yMDUwOlxcdFxcdFxcdGVyciA9IG1hcC1cXHUwMDNlb3BzLVxcdTAwM2VtYXBfZGVsZXRlX2VsZW0obWFwLCBrZXkpO1xcbjIwNTE6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMjA1MjpcXHRcXHRcXHRicGZfZW5hYmxlX2luc3RydW1lbnRhdGlvbigpO1xcbjIwNTM6XFx0XFx0XFx0aWYgKGVycilcXG4yMDU0OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjIwNTU6XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuMjA1NjpcXHRcXHR9XFxuMjA1NzpcXHRcXHRpZiAoY29weV90b191c2VyKFxcdTAwMjZ1YXR0ci1cXHUwMDNlYmF0Y2guY291bnQsIFxcdTAwMjZjcCwgc2l6ZW9mKGNwKSkpXFxuMjA1ODpcXHRcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbjIwNTk6XFx0XFxuMjA2MDpcXHRcXHRrdmZyZWUoa2V5KTtcXG4yMDYxOlxcdFxcbjIwNjI6XFx0XFx0cmV0dXJuIGVycjtcXG4yMDYzOlxcdH1cXG4yMDY0OlxcdFxcbjIwNjU6XFx0aW50IGdlbmVyaWNfbWFwX3VwZGF0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqbWFwX2ZpbGUsXFxuMjA2NjpcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbjIwNjc6XFx0XFx0XFx0XFx0ICAgICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKVxcbjIwNjg6XFx0e1xcbjIwNjk6XFx0XFx0dm9pZCBfX3VzZXIgKnZhbHVlcyA9IHU2NF90b191c2VyX3B0cihhdHRyLVxcdTAwM2ViYXRjaC52YWx1ZXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoxMDoxNy44NzU4NTYyNzJaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI3NDIyNzcxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBhcyBhIHN1bW1hcnksIHdyaXR0ZW4gYXMgaWYgaXQncyBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgQlAgRiBJc3N1ZSoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZyB3ZSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgY29kZSBhIGJpdCBtb3JlIG9uIHRoaXMgb25lLiBJJ3ZlIGdvdCBhIGh1bmNoIGFib3V0IHRoZSBCUEYgc3lzdGVtIGNhbGwgaW1wbGVtZW50YXRpb24sIGFuZCBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBzcGVjaWZpYy4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBjbG9zZWx5IGF0IHRoZSBga2VybmVsL2JwZi9zeXNjYWxsLmNgIGZpbGUuIEknbSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gbGluZXMgMjE3MCB0aHJvdWdoIDIyMDAuIFRoYXQgc2VjdGlvbiBsaWtlbHkgZGVhbHMgd2l0aCBbaW5zZXJ0IHlvdXIgZXhwZXJ0IGtub3dsZWRnZSBoZXJlLCBlLmcuLCBlcnJvciBoYW5kbGluZywgYSBzcGVjaWZpYyBpbnN0cnVjdGlvbiBzZXQsIHJlc291cmNlIGFsbG9jYXRpb24sIGV0Yy5dLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIFttZW50aW9uIHdoYXQgeW91J3JlIHNwZWNpZmljYWxseSBzZWFyY2hpbmcgZm9yLCBlLmcuLCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBib3VuZGFyeSBjb25kaXRpb25zLCB1bmV4cGVjdGVkIHJldHVybiB2YWx1ZXMsIGV0Yy5dIGluIHRoYXQgcmVnaW9uLiBMZXQncyBzZWUgaWYgdGhpcyBhbGlnbnMgd2l0aCB0aGUgc3ltcHRvbXMgd2UncmUgb2JzZXJ2aW5nLiBJdCBpcyBsaWtlbHkgdGhlIGFyZWEgb2YgY29kZSB0aGF0IEkgaGF2ZSBoYWQgY29uY2VybnMgYWJvdXQgZ2l2ZW4gW3JlYXNvbl0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NjMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSIsInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIwOjEwOjIwLjE1MDA4OTI0NloiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzI3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjE3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjE3MDpcXHRcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4yMTcxOlxcdFxcdFxcdGlmIChlcnIpXFxuMjE3MjpcXHRcXHRcXHRcXHRicmVhaztcXG4yMTczOlxcdFxcdFxcdGVyciA9IGJwZl9tYXBfY29weV92YWx1ZShtYXAsIGtleSwgdmFsdWUsXFxuMjE3NDpcXHRcXHRcXHRcXHRcXHRcXHQgYXR0ci1cXHUwMDNlYmF0Y2guZWxlbV9mbGFncyk7XFxuMjE3NTpcXHRcXG4yMTc2OlxcdFxcdFxcdGlmIChlcnIgPT0gLUVOT0VOVClcXG4yMTc3OlxcdFxcdFxcdFxcdGdvdG8gbmV4dF9rZXk7XFxuMjE3ODpcXHRcXG4yMTc5OlxcdFxcdFxcdGlmIChlcnIpXFxuMjE4MDpcXHRcXHRcXHRcXHRnb3RvIGZyZWVfYnVmO1xcbjIxODE6XFx0XFxuMjE4MjpcXHRcXHRcXHRpZiAoY29weV90b191c2VyKGtleXMgKyAoc2l6ZV90KWNwICogbWFwLVxcdTAwM2VrZXlfc2l6ZSwga2V5LFxcbjIxODM6XFx0XFx0XFx0XFx0XFx0IG1hcC1cXHUwMDNla2V5X3NpemUpKSB7XFxuMjE4NDpcXHRcXHRcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbjIxODU6XFx0XFx0XFx0XFx0Z290byBmcmVlX2J1ZjtcXG4yMTg2OlxcdFxcdFxcdH1cXG4yMTg3OlxcdFxcdFxcdGlmIChjb3B5X3RvX3VzZXIodmFsdWVzICsgKHNpemVfdCljcCAqIHZhbHVlX3NpemUsIHZhbHVlLCB2YWx1ZV9zaXplKSkge1xcbjIxODg6XFx0XFx0XFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4yMTg5OlxcdFxcdFxcdFxcdGdvdG8gZnJlZV9idWY7XFxuMjE5MDpcXHRcXHRcXHR9XFxuMjE5MTpcXHRcXG4yMTkyOlxcdFxcdFxcdGNwKys7XFxuMjE5MzpcXHRuZXh0X2tleTpcXG4yMTk0OlxcdFxcdFxcdGlmICghcHJldl9rZXkpXFxuMjE5NTpcXHRcXHRcXHRcXHRwcmV2X2tleSA9IGJ1Zl9wcmV2a2V5O1xcbjIxOTY6XFx0XFxuMjE5NzpcXHRcXHRcXHRzd2FwKHByZXZfa2V5LCBrZXkpO1xcbjIxOTg6XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuMjE5OTpcXHRcXHR9XFxuMjIwMDpcXHRcXG4yMjAxOlxcdFxcdGlmIChlcnIgPT0gLUVGQVVMVClcXG4yMjAyOlxcdFxcdFxcdGdvdG8gZnJlZV9idWY7XFxuMjIwMzpcXHRcXG4yMjA0OlxcdFxcdGlmICgoY29weV90b191c2VyKFxcdTAwMjZ1YXR0ci1cXHUwMDNlYmF0Y2guY291bnQsIFxcdTAwMjZjcCwgc2l6ZW9mKGNwKSkgfHxcXG4yMjA1OlxcdFxcdFxcdCAgICAoY3AgXFx1MDAyNlxcdTAwMjYgY29weV90b191c2VyKHVvYmF0Y2gsIHByZXZfa2V5LCBtYXAtXFx1MDAzZWtleV9zaXplKSkpKVxcbjIyMDY6XFx0XFx0XFx0ZXJyID0gLUVGQVVMVDtcXG4yMjA3OlxcdFxcbjIyMDg6XFx0ZnJlZV9idWY6XFxuMjIwOTpcXHRcXHRrdmZyZWUoYnVmX3ByZXZrZXkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMDoxMDoyMC4xNTA0NjQ3OTZaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc4Nzk1ODE0MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSW50ZWdlciBPdmVyZmxvdyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgaXNzdWUgaXMgaW50ZWdlciBvdmVyZmxvdyBpbiA2NC1iaXQgYXJjaGl0ZWN0dXJlcyB3aGVuIGNhbGN1bGF0aW5nIG9mZnNldHMgYW5kIHNpemVzIGZvciBCUEYgbWFwIGJhdGNoIG9wZXJhdGlvbnMuIFNwZWNpZmljYWxseSwgdGhlIG11bHRpcGxpY2F0aW9uIG9mIGBjcCAqIG1hcC1cdTAwM2VrZXlfc2l6ZWAgKGFuZCBzaW1pbGFyIGNhbGN1bGF0aW9ucykgaXMgcGVyZm9ybWVkIHVzaW5nIDMyLWJpdCBhcml0aG1ldGljLCBwb3RlbnRpYWxseSBvdmVyZmxvd2luZyBiZWZvcmUgYmVpbmcgY2FzdCB0byBhIGBzaXplX3RgIGZvciBwb2ludGVyIGFyaXRobWV0aWMuIFRoaXMgY291bGQgbGVhZCB0byBpbmNvcnJlY3QgcG9pbnRlciBjYWxjdWxhdGlvbnMgYW5kLCBjb25zZXF1ZW50bHksIG91dC1vZi1ib3VuZHMgcmVhZHMgb3Igd3JpdGVzIGluIHVzZXIgc3BhY2Ug4oCTIGEgZGVmaW5pdGUgY29uY2Vybi5cblxuTXkgaW1tZWRpYXRlIHJlYWN0aW9uIGlzIHRvIGV2YWx1YXRlIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gTGV0J3Mgc2VlOiBhcmUgd2UgcmVhZGluZyBmcm9tIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyIHNwYWNlLCBvciB1c2luZyB1bmluaXRpYWxpemVkIGRhdGEgaW4gY29udHJvbCBmbG93PyBJJ20gcHJldHR5IGNvbmZpZGVudCB3ZSdyZSBub3QuIEV4YW1pbmluZyB0aGUgY29kZSwgYGtleXNgIGFuZCBgdmFsdWVzYCBhcmUgYWxsb2NhdGVkIGFuZCBwb3B1bGF0ZWQgZHVyaW5nIGJ1Y2tldCBpdGVyYXRpb24gaW4gYGhhc2h0YWIuY2AuIEluIGBzeXNjYWxsLmNgLCB0aGUgYGtleWAgYW5kIGB2YWx1ZWAgYnVmZmVycyBhcmUgaGFuZGxlZCBieSBgY29weV9mcm9tX3VzZXJgIG9yIHRoZSBCUEYgbWFwIG9wZXJhdGlvbnMuIFRoZSBwYXRjaCBzb2xlbHkgYWRkcmVzc2VzIGludGVnZXIgb3ZlcmZsb3cgZHVyaW5nIHBvaW50ZXIgY2FsY3VsYXRpb24gYW5kIHNpemUgZGV0ZXJtaW5hdGlvbiBmb3IgQlBGIG1hcCBiYXRjaCBvcGVyYXRpb25zLiBJdCdzIGEgcHJldmVudGl2ZSBtZWFzdXJlOyBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb24sIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcsIGFuZCBubyBsZWFrYWdlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBNb3Jlb3Zlciwgc3RhbmRhcmQgc2FuaXRpemVycyBsaWtlIEtBU0FOIGFuZCBVQlNBTiwgYWxvbmcgd2l0aCBnZW5lcmFsIHRlc3RpbmcsIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGNhdGNoIG1lbW9yeSBhY2Nlc3MgYnVncyBhbmQgaW50ZWdlciBvdmVyZmxvd3MuIEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYW5kIGxlYWtzLlxuXG5UbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbGwgZG91YmxlLWNoZWNrOiBhcmUgYW55IGtlcm5lbCBidWZmZXJzIG9yIHZhcmlhYmxlcyB1bmluaXRpYWxpemVkPyBObywgbm9uZSBvZiB0aGVzZSBhcmUuIFRoZXkgYXJlIGluaXRpYWxpemVkL2NvcGllZCBmcm9tIHRoZSBtYXAgb3IgdXNlci5cblxuTGV0J3MgcnVuIHRocm91Z2ggYSBjaGVja2xpc3QgdG8gZW5zdXJlIHdlIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nOiBEb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIG9yIG1vZGlmeSBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aGVyZSBwYWRkaW5nL2ZpZWxkcyBtaWdodCBub3QgYmUgaW5pdGlhbGl6ZWQ/IE5vLiBEb2VzIGl0IGludHJvZHVjZSBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vLiBEb2VzIGl0IGludHJvZHVjZSB1bmluaXRpYWxpemVkIGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zPyBOby4gRG9lcyBpdCBhbHRlciBib3VuZHMgY2hlY2tzIGluIGEgd2F5IHRoYXQgYWxsb3dzIGFjY2Vzc2luZyB1bmluaXRpYWxpemVkIGJ5dGVzPyBOby5cblxuR2l2ZW4gYWxsIG9mIHRoaXMsIEknbSBjb25maWRlbnQgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGZhbHNlLlxuXG5Ob3csIHRvIHNvbGlkaWZ5IHRoZSByZWFzb25pbmcsIGxldCdzIGNvbnRyYXN0IEtBU0FOIGFuZCBLTVNBTi4gS0FTQU4vVUJTQU4gYXJlIGRpcmVjdGx5IHJlbGV2YW50IGhlcmUuIFRoZSBwYXRjaCBkZWFscyB3aXRoIGEgMzItYml0IGludGVnZXIgbXVsdGlwbGljYXRpb24gb3ZlcmZsb3cgd2hlbiBjYWxjdWxhdGluZyB1c2VyIHBvaW50ZXIgb2Zmc2V0cyBhbmQgY29weSBsZW5ndGhzIGZvciB0aGUgQlBGIGJhdGNoIG9wZXJhdGlvbnMuIEludGVnZXIgb3ZlcmZsb3csIGFuZCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgb3IgaW52YWxpZCBhZGRyZXNzIGNhbGN1bGF0aW9ucywgYXJlIHRoZSBkb21haW4gb2YgVUJTQU4vS0FTQU4uIEtNU0FOLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgc3BlY2lmaWNhbGx5IGdlYXJlZCB0b3dhcmRzIGRldGVjdGluZyB0aGUgdXNlIGFuZCBsZWFrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBwYXRjaCBvbmx5IGFkZHMgYChzaXplX3QpYCBjYXN0cyB0byBwcmV2ZW50IGludGVnZXIgb3ZlcmZsb3cgaW4gdXNlciBwb2ludGVyIGFyaXRobWV0aWMgYW5kIHNpemUgY2FsY3VsYXRpb25zLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0ZWQsIHJlYWQsIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSdzIG5vIG5lZWQgZm9yIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3OTgsIk91dHB1dFRva2VucyI6MTkwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjA6MTA6MzguMDMwMDQ4MTk3WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGV4cGxpY2l0IGAoc2l6ZV90KWAgY2FzdHMgdG8gdXNlciBwb2ludGVyIG9mZnNldCBhbmQgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiBCUEYgYmF0Y2ggb3BlcmF0aW9ucyAoc3VjaCBhcyBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAsIGBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoYCwgYW5kIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgKSB0byBwcmV2ZW50IDMyLWJpdCBpbnRlZ2VyIG11bHRpcGxpY2F0aW9uIG92ZXJmbG93cyBvbiA2NC1iaXQgc3lzdGVtcy5cXG5cXG5UaGVzZSBjaGFuZ2VzIHN0cmljdGx5IGZpeCBpbnRlZ2VyIGFyaXRobWV0aWMgYW5kIHVzZXIgc3BhY2UgYWRkcmVzcyBjYWxjdWxhdGlvbnMuIFRoZXkgZG8gbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMvcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCBkYXRhIGxlYWtzIHRvIHVzZXIgc3BhY2UuIEFueSBtZW1vcnkgc2FmZXR5IG9yIGFyaXRobWV0aWMgaXNzdWVzIHJlbGF0ZWQgdG8gdGhlc2UgY2FsY3VsYXRpb25zIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL1VCU0FOIGJ1aWxkcy4gSGVuY2UsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGV4cGxpY2l0IGAoc2l6ZV90KWAgY2FzdHMgdG8gdXNlciBwb2ludGVyIG9mZnNldCBhbmQgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiBCUEYgYmF0Y2ggb3BlcmF0aW9ucyAoc3VjaCBhcyBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAsIGBnZW5lcmljX21hcF9kZWxldGVfYmF0Y2hgLCBgZ2VuZXJpY19tYXBfdXBkYXRlX2JhdGNoYCwgYW5kIGBnZW5lcmljX21hcF9sb29rdXBfYmF0Y2hgKSB0byBwcmV2ZW50IDMyLWJpdCBpbnRlZ2VyIG11bHRpcGxpY2F0aW9uIG92ZXJmbG93cyBvbiA2NC1iaXQgc3lzdGVtcy5cXG5cXG5UaGVzZSBjaGFuZ2VzIHN0cmljdGx5IGZpeCBpbnRlZ2VyIGFyaXRobWV0aWMgYW5kIHVzZXIgc3BhY2UgYWRkcmVzcyBjYWxjdWxhdGlvbnMuIFRoZXkgZG8gbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMvcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCBkYXRhIGxlYWtzIHRvIHVzZXIgc3BhY2UuIEFueSBtZW1vcnkgc2FmZXR5IG9yIGFyaXRobWV0aWMgaXNzdWVzIHJlbGF0ZWQgdG8gdGhlc2UgY2FsY3VsYXRpb25zIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOL1VCU0FOIGJ1aWxkcy4gSGVuY2UsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowqsjdm[1] Phase: Succeeded StartedAt: 2026-09-03 20:10:49 +0000 UTC FinishedAt: 2026-09-03 20:10:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqsjdm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-03 20:10:49 +0000 UTC FinishedAt: 2026-09-03 20:10:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqsjdm[2] Phase: Succeeded StartedAt: 2026-09-03 20:10:49 +0000 UTC FinishedAt: 2026-09-03 23:55:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqsjdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2672e84b-ebd0-404c-83a0-816cd0835854","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-03 20:10:49 +0000 UTC FinishedAt: 2026-09-03 23:55:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2672e84b-ebd0-404c-83a0-816cd0835854","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowqsjdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2672e84b-ebd0-404c-83a0-816cd0835854","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-03 20:10:49 +0000 UTC FinishedAt: 2026-09-03 20:10:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqsjdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2672e84b-ebd0-404c-83a0-816cd0835854","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-03 20:10:49 +0000 UTC FinishedAt: 2026-09-03 20:10:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqsjdm/series-workflowqsjdm-convert-artifact-3430911681/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqsjdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2672e84b-ebd0-404c-83a0-816cd0835854","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-03 20:10:59 +0000 UTC FinishedAt: 2026-09-03 20:27:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqsjdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2672e84b-ebd0-404c-83a0-816cd0835854","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-03 20:10:59 +0000 UTC FinishedAt: 2026-09-03 20:27:00 +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:*c7edf079-b16c-4380-90d2-ee60aba9918e,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-workflowqsjdm/series-workflowqsjdm-convert-artifact-3430911681/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": "f1dcb3b3-7056-42e4-af34-885ef4434289", "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-workflowqsjdm/series-workflowqsjdm-build-action-2257368303/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqsjdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2672e84b-ebd0-404c-83a0-816cd0835854","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-03 20:10:59 +0000 UTC FinishedAt: 2026-09-03 20:26:50 +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:*c7edf079-b16c-4380-90d2-ee60aba9918e,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-workflowqsjdm/series-workflowqsjdm-convert-artifact-3430911681/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": "f1dcb3b3-7056-42e4-af34-885ef4434289", "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-workflowqsjdm/series-workflowqsjdm-build-action-2257368303/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqsjdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2672e84b-ebd0-404c-83a0-816cd0835854","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-03 20:27:00 +0000 UTC FinishedAt: 2026-09-03 20:27:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqsjdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2672e84b-ebd0-404c-83a0-816cd0835854","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-03 20:27:00 +0000 UTC FinishedAt: 2026-09-03 20:27:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqsjdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2672e84b-ebd0-404c-83a0-816cd0835854","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-03 20:27:00 +0000 UTC FinishedAt: 2026-09-03 20:27:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqsjdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2672e84b-ebd0-404c-83a0-816cd0835854","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-03 20:27:00 +0000 UTC FinishedAt: 2026-09-03 20:27:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2672e84b-ebd0-404c-83a0-816cd0835854","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqsjdm/series-workflowqsjdm-convert-artifact-508098452/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqsjdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2672e84b-ebd0-404c-83a0-816cd0835854","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-03 20:27:10 +0000 UTC FinishedAt: 2026-09-03 20:29:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqsjdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2672e84b-ebd0-404c-83a0-816cd0835854","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-03 20:27:10 +0000 UTC FinishedAt: 2026-09-03 20:29:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f1dcb3b3-7056-42e4-af34-885ef4434289,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-workflowqsjdm/series-workflowqsjdm-build-action-2257368303/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-workflowqsjdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2672e84b-ebd0-404c-83a0-816cd0835854","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-03 20:29:18 +0000 UTC FinishedAt: 2026-09-03 20:29:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqsjdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2672e84b-ebd0-404c-83a0-816cd0835854","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-03 20:29:18 +0000 UTC FinishedAt: 2026-09-03 20:29:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqsjdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2672e84b-ebd0-404c-83a0-816cd0835854","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-03 20:29:18 +0000 UTC FinishedAt: 2026-09-03 20:49:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqsjdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2672e84b-ebd0-404c-83a0-816cd0835854","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-03 20:29:18 +0000 UTC FinishedAt: 2026-09-03 20:49:30 +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:*c7edf079-b16c-4380-90d2-ee60aba9918e,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-workflowqsjdm/series-workflowqsjdm-convert-artifact-508098452/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": "f094a486-662d-4e71-aa00-3ffb5a82d7b0", "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-workflowqsjdm/series-workflowqsjdm-build-action-2475778144/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqsjdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2672e84b-ebd0-404c-83a0-816cd0835854","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-03 20:29:18 +0000 UTC FinishedAt: 2026-09-03 20:49:20 +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:*c7edf079-b16c-4380-90d2-ee60aba9918e,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-workflowqsjdm/series-workflowqsjdm-convert-artifact-508098452/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": "f094a486-662d-4e71-aa00-3ffb5a82d7b0", "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-workflowqsjdm/series-workflowqsjdm-build-action-2475778144/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqsjdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2672e84b-ebd0-404c-83a0-816cd0835854","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-03 20:49:30 +0000 UTC FinishedAt: 2026-09-03 20:49:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqsjdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2672e84b-ebd0-404c-83a0-816cd0835854","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-03 20:49:30 +0000 UTC FinishedAt: 2026-09-03 20:49:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqsjdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2672e84b-ebd0-404c-83a0-816cd0835854","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-03 20:49:30 +0000 UTC FinishedAt: 2026-09-03 20:51:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqsjdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2672e84b-ebd0-404c-83a0-816cd0835854","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-03 20:49:30 +0000 UTC FinishedAt: 2026-09-03 20:51:35 +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:*f094a486-662d-4e71-aa00-3ffb5a82d7b0,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-workflowqsjdm/series-workflowqsjdm-build-action-2475778144/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-workflowqsjdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2672e84b-ebd0-404c-83a0-816cd0835854","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-03 20:51:57 +0000 UTC FinishedAt: 2026-09-03 23:55:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqsjdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2672e84b-ebd0-404c-83a0-816cd0835854","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-03 20:51:57 +0000 UTC FinishedAt: 2026-09-03 23:55:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch"],"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:*f1dcb3b3-7056-42e4-af34-885ef4434289,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f094a486-662d-4e71-aa00-3ffb5a82d7b0,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-workflowqsjdm/series-workflowqsjdm-build-action-2257368303/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-workflowqsjdm/series-workflowqsjdm-build-action-2475778144/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowqsjdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2672e84b-ebd0-404c-83a0-816cd0835854","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-03 20:51:57 +0000 UTC FinishedAt: 2026-09-03 20:52:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqsjdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2672e84b-ebd0-404c-83a0-816cd0835854","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-03 20:51:57 +0000 UTC FinishedAt: 2026-09-03 20:52:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch"],"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-workflowqsjdm/series-workflowqsjdm-convert-artifact-1236249789/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqsjdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2672e84b-ebd0-404c-83a0-816cd0835854","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-03 20:51:57 +0000 UTC FinishedAt: 2026-09-03 20:51:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqsjdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2672e84b-ebd0-404c-83a0-816cd0835854","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-03 20:51:57 +0000 UTC FinishedAt: 2026-09-03 20:51:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqsjdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2672e84b-ebd0-404c-83a0-816cd0835854","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-03 20:51:57 +0000 UTC FinishedAt: 2026-09-03 20:51:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqsjdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2672e84b-ebd0-404c-83a0-816cd0835854","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-03 20:52:19 +0000 UTC FinishedAt: 2026-09-03 23:55:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqsjdm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["generic_map_delete_batch","generic_map_update_batch","generic_map_lookup_batch","htab_map_lookup_batch","htab_map_lookup_and_delete_batch"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7bf591f26545f5776a4e42d08c06fd94469766dd","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"2672e84b-ebd0-404c-83a0-816cd0835854","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-03 20:52:20 +0000 UTC FinishedAt: 2026-09-03 23:55:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f1dcb3b3-7056-42e4-af34-885ef4434289,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f094a486-662d-4e71-aa00-3ffb5a82d7b0,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-workflowqsjdm/series-workflowqsjdm-build-action-2257368303/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-workflowqsjdm/series-workflowqsjdm-build-action-2475778144/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-workflowqsjdm/series-workflowqsjdm-convert-artifact-1236249789/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,}