Name: series-workflow5wshz Phase: Succeeded StartedAt: 2026-06-19 23:53:43 +0000 UTC FinishedAt: 2026-06-20 04:12:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wshz[0] Phase: Succeeded StartedAt: 2026-06-19 23:53:43 +0000 UTC FinishedAt: 2026-06-20 00:04:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wshz[0].run-triage Phase: Succeeded StartedAt: 2026-06-19 23:53:43 +0000 UTC FinishedAt: 2026-06-20 00:04:37 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_PADDR", "DAMON_RECLAIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_PADDR", "DAMON_RECLAIM" ], "series_id": "d47984e3-6b48-4ce7-945a-46a44139d9d8" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_reclaim_apply_parameters", "damon_reclaim_init", "damon_reclaim_commit_inputs_store", "damon_reclaim_turn", "damon_reclaim_enabled_store" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAwOjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1JFQ0xBSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnMmIzM0OywKICAgICYjMzQ7ZGFtb25fcmVjbGFpbV9pbml0JiMzNDssCiAgICAmIzM0O2RhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZSYjMzQ7LAogICAgJiMzNDtkYW1vbl9yZWNsYWltX3R1cm4mIzM0OywKICAgICYjMzQ7ZGFtb25fcmVjbGFpbV9lbmFibGVkX3N0b3JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBleGVjdXRpb24gZmxvdyBpbiBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCBhbmQgYGRhbW9uX3JlY2xhaW1faW5pdGAuIFNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBhIG1lbW9yeSBsZWFrIGluIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgIGJ5IHNraXBwaW5nIGBkYW1vbl9kZXN0cm95X2N0eChwYXJhbV9jdHgpYCBvbiBzdWNjZXNzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvZGUgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBtb2R1bGUgcGFyYW1ldGVycywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgdG8gZGV0ZWN0IHRoZSBtZW1vcnkgbGVhay4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAwMDowMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDA3YjdkZTJjNTk4N2IwMzNjM2NkMTUxYjFiYzU2ZDQ3NGQ5YTAxMGRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1biAyMCAwMDowMTo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9yZWNsYWltLmMgYi9tbS9kYW1vbi9yZWNsYWltLmNcbmluZGV4IGNlNDQ5OWNmNGI4YjA1Li5kZmU1MjcxN2Q5MmNmZCAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3JlY2xhaW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vcmVjbGFpbS5jXG5AQCAtMjY4LDYgJiM0MzsyNjgsOSBAQCBzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxuIFx0aWYgKGVycilcbiBcdFx0Z290byBvdXQ7XG4gXHRlcnIgPSBkYW1vbl9jb21taXRfY3R4KGN0eCwgcGFyYW1fY3R4KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFlcnIpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBvdXQ6XG4gXHRkYW1vbl9kZXN0cm95X2N0eChwYXJhbV9jdHgpO1xuIFx0cmV0dXJuIGVycjtcbkBAIC00NzgsNiAmIzQzOzQ4MSwxMCBAQCBzdGF0aWMgaW50IF9faW5pdCBkYW1vbl9yZWNsYWltX2luaXQodm9pZClcbiBvdXQ6XG4gXHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBlbmFibGVkKVxuIFx0XHRlbmFibGVkID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdC8qIFByZXZlbnQgcG90ZW5pYWwgbWVtb3J5IGxlYWthZ2UgKi9cbiYjNDM7XHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBjdHgpXG4mIzQzO1x0XHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDA6MDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fUkVDTEFJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyYjMzQ7LAogICAgJiMzNDtkYW1vbl9yZWNsYWltX2luaXQmIzM0OywKICAgICYjMzQ7ZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlJiMzNDssCiAgICAmIzM0O2RhbW9uX3JlY2xhaW1fdHVybiYjMzQ7LAogICAgJiMzNDtkYW1vbl9yZWNsYWltX2VuYWJsZWRfc3RvcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGV4ZWN1dGlvbiBmbG93IGluIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgIGFuZCBgZGFtb25fcmVjbGFpbV9pbml0YC4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGEgbWVtb3J5IGxlYWsgaW4gYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AgYnkgc2tpcHBpbmcgYGRhbW9uX2Rlc3Ryb3lfY3R4KHBhcmFtX2N0eClgIG9uIHN1Y2Nlc3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29kZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgdmlhIG1vZHVsZSBwYXJhbWV0ZXJzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyB0byBkZXRlY3QgdGhlIG1lbW9yeSBsZWFrLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwN2I3ZGUyYzU5ODdiMDMzYzNjZDE1MWIxYmM1NmQ0NzRkOWEwMTBkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdW4gMjAgMDA6MDE6NDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9yZWNsYWltLmMgYi9tbS9kYW1vbi9yZWNsYWltLmMKaW5kZXggY2U0NDk5Y2Y0YjhiMDUuLmRmZTUyNzE3ZDkyY2ZkIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9yZWNsYWltLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vcmVjbGFpbS5jCkBAIC0yNjgsNiAmIzQzOzI2OCw5IEBAIHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpCiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAJZXJyID0gZGFtb25fY29tbWl0X2N0eChjdHgsIHBhcmFtX2N0eCk7CiYjNDM7CiYjNDM7CWlmICghZXJyKQomIzQzOwkJcmV0dXJuIDA7CiBvdXQ6CiAJZGFtb25fZGVzdHJveV9jdHgocGFyYW1fY3R4KTsKIAlyZXR1cm4gZXJyOwpAQCAtNDc4LDYgJiM0Mzs0ODEsMTAgQEAgc3RhdGljIGludCBfX2luaXQgZGFtb25fcmVjbGFpbV9pbml0KHZvaWQpCiBvdXQ6CiAJaWYgKGVyciAmYW1wOyZhbXA7IGVuYWJsZWQpCiAJCWVuYWJsZWQgPSBmYWxzZTsKJiM0MzsKJiM0MzsJLyogUHJldmVudCBwb3RlbmlhbCBtZW1vcnkgbGVha2FnZSAqLwomIzQzOwlpZiAoZXJyICZhbXA7JmFtcDsgY3R4KQomIzQzOwkJZGFtb25fZGVzdHJveV9jdHgoY3R4KTsKIAlyZXR1cm4gZXJyOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDEKCQkJCQkJCW91dHB1dDogMTM3CgkJCQkJCQl0aG91Z2h0czogMTgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFNT04gUmVjbGFpbSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG1tL2RhbW9uL3JlY2xhaW0uY2AsIGFuZCBpbW1lZGlhdGVseSBJIHNwb3Qgc29tZSBmdW5jdGlvbmFsIGNoYW5nZXMuIFRoZSBmaXJzdCBvbmUgaW4gYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AgaXMgaW50ZXJlc3RpbmcuIEFkZGluZyBgaWYgKCFlcnIpIHJldHVybiAwO2AgYmVmb3JlIHRoZSBgb3V0OmAgbGFiZWwgZGVmaW5pdGVseSBhbHRlcnMgdGhlIGV4aXN0aW5nIGZsb3cuIEl0IHNlZW1zIHRoZSBpbnRlbnRpb24gaXMgdG8gYXZvaWQgY2FsbGluZyBgZGFtb25fZGVzdHJveV9jdHgocGFyYW1fY3R4KWAgaWYgZXZlcnl0aGluZyB3ZW50IHNtb290aGx5LCBpLmUuLCBgZXJyYCBpcyAwLiBXYWl0LCB0aGF0JiMzOTtzIGNvcnJlY3QsIHJldHVybmluZyAwIG9uIHN1Y2Nlc3MgKnNob3VsZG4mIzM5O3QqIGRlc3Ryb3kgdGhlIGNvbnRleHQhIEl0JiMzOTtzIGEgYmVoYXZpb3IgY2hhbmdlLCBhbmQgSSBuZWVkIHRvIGFzc2VzcyB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzLiBJcyBpdCBhYm91dCBwZXJmb3JtYW5jZT8gUmVzb3VyY2UgbWFuYWdlbWVudD8gQXZvaWRpbmcgdW5uZWNlc3Nhcnkgb3ZlcmhlYWQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGFsdGVyYXRpb24gd2FzIGRlZW1lZCBuZWNlc3NhcnkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0IGZ1bGx5LCBiZWNhdXNlIHRoYXQmIzM5O3MgYSBzdWJ0bGUgY2hhbmdlLgoKVGhlIHNlY29uZCBjaGFuZ2UsIHdpdGhpbiBgZGFtb25fcmVjbGFpbV9pbml0YCwgdGhlIGFkZGl0aW9uIG9mIGBpZiAoZXJyICZhbXA7JmFtcDsgY3R4KSBkYW1vbl9kZXN0cm95X2N0eChjdHgpO2AgbG9va3MgbGlrZSBhIGRlZmVuc2l2ZSBtZWFzdXJlIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzIHdoZW4gaW5pdGlhbGl6YXRpb24gZmFpbHMuIFRoaXMgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLCB3aGljaCBpcyBnb29kLgoKQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSBkZWVwZXIgaW50byB0aGUgcGF0Y2gmIzM5O3MgaW1wYWN0LCBJJiMzOTtsbCBuZWVkIHRvIG9wZW4gdXAgYG1tL2RhbW9uL3JlY2xhaW0uY2AgYW5kIHVuZGVyc3RhbmQgdGhlIGJpZ2dlciBwaWN0dXJlLiBJIG5lZWQgdG8gZ3Jhc3AgdGhlIGNvbmZpZ3VyYXRpb25zIGFzc29jaWF0ZWQgd2l0aCBpdCwgYW5kIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGFyZSByZWxldmFudC4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dHMgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucyB3aWxsIGJlIGtleSB0byBkZXRlcm1pbmluZyB0aGUgcGF0Y2gmIzM5O3MgY29ycmVjdG5lc3MgYW5kIHBvdGVudGlhbCBkb3duc3RyZWFtIGVmZmVjdHMuIFRoaXMgaXMgYSBzdWJ0bGUgY2hhbmdlIHRoYXQgd2lsbCByZXF1aXJlIG15IGZ1bGwgYXR0ZW50aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL3JlY2xhaW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9yZWNsYWltLmM9MTY5PXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX3JlY2xhaW1fbmV3X3NjaGVtZSh1bnNpZ25lZCBsb25nIGFnZ3JfaW50ZXJ2YWwpXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTE5NS1cbm1tL2RhbW9uL3JlY2xhaW0uYzoxOTY6c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcbm1tL2RhbW9uL3JlY2xhaW0uYy0xOTcte1xuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz0yNzk9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfZm4odm9pZCAqYXJnKVxubW0vZGFtb24vcmVjbGFpbS5jLTI4MC17XG5tbS9kYW1vbi9yZWNsYWltLmM6MjgxOlx0cmV0dXJuIGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycygpO1xubW0vZGFtb24vcmVjbGFpbS5jLTI4Mi19XG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTM0MT1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fdHVybihib29sIG9uKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy0zNDctXG5tbS9kYW1vbi9yZWNsYWltLmM6MzQ4Olx0ZXJyID0gZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKCk7XG5tbS9kYW1vbi9yZWNsYWltLmMtMzQ5LVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAwMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9yZWNsYWltX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9yZWNsYWltLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vcmVjbGFpbS5jPTQ2MT1tb2R1bGVfcGFyYW1fY2Ioa2RhbW9uZF9waWQsIFx1MDAyNmtkYW1vbmRfcGlkX3BhcmFtX29wcywgTlVMTCwgMDQwMCk7XG5tbS9kYW1vbi9yZWNsYWltLmMtNDYyLVxubW0vZGFtb24vcmVjbGFpbS5jOjQ2MzpzdGF0aWMgaW50IF9faW5pdCBkYW1vbl9yZWNsYWltX2luaXQodm9pZClcbm1tL2RhbW9uL3JlY2xhaW0uYy00NjQte1xuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy00OTAtXG5tbS9kYW1vbi9yZWNsYWltLmM6NDkxOm1vZHVsZV9pbml0KGRhbW9uX3JlY2xhaW1faW5pdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDA6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERBTU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcJiMzNDtEYXRhIEFjY2VzcyBNb25pdG9yaW5nXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnLTQtXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTYtXHRib29sIFwmIzM0O0RBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1wmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTQtXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcbm1tL2RhbW9uL0tjb25maWctMTYtXHRib29sIFwmIzM0O0NoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0yNS1cbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctMjctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcbm1tL2RhbW9uL0tjb25maWctMzktXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1wmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNDYtXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxubW0vZGFtb24vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNTUtXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTU3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcbm1tL2RhbW9uL0tjb25maWctNjktXHRib29sIFwmIzM0O0RBTU9OIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNzUtXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTc3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctODctXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXG5tbS9kYW1vbi9LY29uZmlnLTg5LVx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctOTktXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcbm1tL2RhbW9uL0tjb25maWctMTAxLVx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMDctXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxubW0vZGFtb24vS2NvbmZpZy0xMDktXHRib29sIFwmIzM0O0J1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxubW0vZGFtb24vS2NvbmZpZy0xMTctXHRib29sIFwmIzM0O0VuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAwMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREFNT05fUkVDTEFJTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZz03Nj1jb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxuLS1cbm1tL2RhbW9uL0tjb25maWctODctXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXG5tbS9kYW1vbi9LY29uZmlnLTg5LVx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NTMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEQU1PTiBSZWNsYWltIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggdGFyZ2V0aW5nIGBtbS9kYW1vbi9yZWNsYWltLmNgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgaXQmIzM5O3MgYWJvdXQgdGhlIERBTU9OIHJlY2xhaW0gZnVuY3Rpb25hbGl0eSwgd2hpY2ggbWVhbnMgYERBTU9OYCBhbmQgYERBTU9OX1JFQ0xBSU1gIGNvbmZpZ3MgYXJlIGVzc2VudGlhbCBmb3IgdGhpcyB0byBldmVuICpiZSogYWN0aXZlLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gaG93IHRoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlY2xhaW0gYmVoYXZpb3IsIGFuZCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgZXZlcnl0aGluZyBpcyB3b3JraW5nIGFzIGV4cGVjdGVkLgoKSSYjMzk7bSBzZWVpbmcgY2hhbmdlcyB0byBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCBhbmQgYGRhbW9uX3JlY2xhaW1faW5pdGAuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLiBTaW5jZSBgZGFtb25fcmVjbGFpbV9pbml0YCBpcyBhIGBtb2R1bGVfaW5pdGAgZnVuY3Rpb24sIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQgdG8gc2VlICpob3cqIGl0JiMzOTtzIGluaXRpYWxpemVkOiB0aGF0IHBhcnQgaXMgYmFzaWMgbW9kdWxlIGhhbmRsaW5nLgoKTm93LCBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCBpcyBhIGtleSBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlbiBhbmQgaG93IG9mdGVuIGl04oCZcyBjYWxsZWQuIEl0IGxvb2tzIGxpa2UgYGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19mbmAgYW5kIGBkYW1vbl9yZWNsYWltX3R1cm5gIGNhbGwgaXQuIEFuZCwgSSBzZWUgdGhhdCBgZGFtb25fcmVjbGFpbV90dXJuYCBpcyBpbnZva2VkIHdoZW4gd2Ugc3dpdGNoIHJlY2xhaW0gb24gb3Igb2ZmIHZpYSBtb2R1bGUgcGFyYW1ldGVycy4gU28sIG15IGFuYWx5c2lzIGhhcyB0byBhY2NvdW50IGZvciBhbGwgdGhlc2UgY2FzZXMuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIHNwZWNpZmljIGNvZGUgY2hhbmdlcyB3aXRoaW4gYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhlIGZ1bmN0aW9uIGlzIGluZGVlZCByZWFjaGFibGUgdW5kZXIgdmFyaW91cyBjb25kaXRpb25zIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKnByZWNpc2VseSogd2hhdCBmdW5jdGlvbmFsaXR5IGlzIGJlaW5nIGNoYW5nZWQgaGVyZS4gQXJlIHdlIHR3ZWFraW5nIHJlY2xhaW0gdGhyZXNob2xkcywgc2NoZWR1bGluZyBwYXJhbWV0ZXJzLCBvciBvdGhlciByZWNsYWltIGxvZ2ljPyBBIGRlZXAgZGl2ZSBpbnRvIHRoZSBjb2RlIGlzIG5lZWRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAwMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3JlY2xhaW0uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjUwOlx0XHRpZiAocXVvdGFfYXV0b3R1bmVfZmVlZGJhY2spIHtcbiAyNTE6XHRcdFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX1VTRVJfSU5QVVQsIDEwMDAwKTtcbiAyNTI6XHRcdFx0aWYgKCFnb2FsKVxuIDI1MzpcdFx0XHRcdGdvdG8gb3V0O1xuIDI1NDpcdFx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBxdW90YV9hdXRvdHVuZV9mZWVkYmFjaztcbiAyNTU6XHRcdFx0ZGFtb3NfYWRkX3F1b3RhX2dvYWwoXHUwMDI2c2NoZW1lLVx1MDAzZXF1b3RhLCBnb2FsKTtcbiAyNTY6XHRcdH1cbiAyNTc6XHRcbiAyNTg6XHRcdGlmIChza2lwX2Fub24pIHtcbiAyNTk6XHRcdFx0ZmlsdGVyID0gZGFtb3NfbmV3X2ZpbHRlcihEQU1PU19GSUxURVJfVFlQRV9BTk9OLCB0cnVlLCBmYWxzZSk7XG4gMjYwOlx0XHRcdGlmICghZmlsdGVyKVxuIDI2MTpcdFx0XHRcdGdvdG8gb3V0O1xuIDI2MjpcdFx0XHRkYW1vc19hZGRfZmlsdGVyKHNjaGVtZSwgZmlsdGVyKTtcbiAyNjM6XHRcdH1cbiAyNjQ6XHRcbiAyNjU6XHRcdGVyciA9IGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdChwYXJhbV90YXJnZXQsXG4gMjY2Olx0XHRcdFx0XHUwMDI2bW9uaXRvcl9yZWdpb25fc3RhcnQsIFx1MDAyNm1vbml0b3JfcmVnaW9uX2VuZCxcbiAyNjc6XHRcdFx0XHRwYXJhbV9jdHgtXHUwMDNlYWRkcl91bml0LCBwYXJhbV9jdHgtXHUwMDNlbWluX3JlZ2lvbl9zeik7XG4gMjY4Olx0XHRpZiAoZXJyKVxuIDI2OTpcdFx0XHRnb3RvIG91dDtcbiAyNzA6XHRcdGVyciA9IGRhbW9uX2NvbW1pdF9jdHgoY3R4LCBwYXJhbV9jdHgpO1xuIDI3MTpcdFxuIDI3MjpcdFx0aWYgKCFlcnIpXG4gMjczOlx0XHRcdHJldHVybiAwO1xuIDI3NDpcdG91dDpcbiAyNzU6XHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KHBhcmFtX2N0eCk7XG4gMjc2Olx0XHRyZXR1cm4gZXJyO1xuIDI3NzpcdH1cbiAyNzg6XHRcbiAyNzk6XHRzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19mbih2b2lkICphcmcpXG4gMjgwOlx0e1xuIDI4MTpcdFx0cmV0dXJuIGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycygpO1xuIDI4MjpcdH1cbiAyODM6XHRcbiAyODQ6XHRzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXG4gMjg1Olx0XHRcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4gMjg2Olx0e1xuIDI4NzpcdFx0Ym9vbCBjb21taXRfaW5wdXRzX3JlcXVlc3Q7XG4gMjg4Olx0XHRpbnQgZXJyO1xuIDI4OTpcdFx0c3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCBjb250cm9sID0ge1xuIDI5MDpcdFx0XHQuZm4gPSBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfZm4sXG4gMjkxOlx0XHR9O1xuIDI5MjpcdFxuIDI5MzpcdFx0aWYgKCF2YWwpIHtcbiAyOTQ6XHRcdFx0Y29tbWl0X2lucHV0c19yZXF1ZXN0ID0gdHJ1ZTtcbiAyOTU6XHRcdH0gZWxzZSB7XG4gMjk2Olx0XHRcdGVyciA9IGtzdHJ0b2Jvb2wodmFsLCBcdTAwMjZjb21taXRfaW5wdXRzX3JlcXVlc3QpO1xuIDI5NzpcdFx0XHRpZiAoZXJyKVxuIDI5ODpcdFx0XHRcdHJldHVybiBlcnI7XG4gMjk5Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNDgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTWVtb3J5IExlYWsgYW5kIEJ1ZyBGaXggaW4gREFNT04qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIGFkZHJlc3NpbmcgYSBtZW1vcnkgbGVhayBhbmQgYSBwb3RlbnRpYWwgYnVnLiBTcGVjaWZpY2FsbHksIHRoZSBpc3N1ZSBpcyB0aGF0IGBkYW1vbl9kZXN0cm95X2N0eChwYXJhbV9jdHgpYCB3YXMgYmVpbmcgY2FsbGVkIHVuY29uZGl0aW9uYWxseSwgZXZlbiB3aGVuIGBkYW1vbl9jb21taXRfY3R4YCBoYWQgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZC4gTm93LCB0aGF0IGltbWVkaWF0ZWx5IGZsYWdzIHNvbWV0aGluZzogSWYgYGRhbW9uX2NvbW1pdF9jdHhgIHdvcmtzIGNvcnJlY3RseSwgaXQgc2hvdWxkIHJldHVybiAwLCByaWdodD8KCkxvb2tpbmcgYXQgdGhlIHByZS1wYXRjaCBjb2RlLCBJIHNlZSB0aGUgcGF0dGVybi4gYGVycmAgZ2V0cyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBkYW1vbl9jb21taXRfY3R4YC4gVGhlbiwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IHN1Y2NlZWRlZCBvciBmYWlsZWQsIGBkYW1vbl9kZXN0cm95X2N0eChwYXJhbV9jdHgpYCBpcyBhbHdheXMgY2FsbGVkLCBhbmQgZmluYWxseSBgZXJyYCBpcyByZXR1cm5lZC4gU28sIGlmIGBkYW1vbl9jb21taXRfY3R4YCAqZGlkKiBzdWNjZWVkLCBgZXJyYCB3b3VsZCBiZSAwLCBpdCBjYWxscyBgZGFtb25fZGVzdHJveV9jdHgocGFyYW1fY3R4KWAgYW5kIHJldHVybnMgMCBhbnl3YXkuIFRoYXQgc2VlbXMgd3JvbmcsIGJlY2F1c2UgYHBhcmFtX2N0eGAgYXBwZWFycyB0byBob2xkIHJlc291cmNlcy4gVGhhdCYjMzk7cyBhIHRleHRib29rIG1lbW9yeSBsZWFrIHdhaXRpbmcgdG8gaGFwcGVuIGlmIGBwYXJhbV9jdHhgIHdhc24mIzM5O3QgcHJvcGVybHkgbWFuYWdlZCBieSB0aGUgYGNvbW1pdGAgZnVuY3Rpb24uCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHBhcmFtX2N0eGAgYWN0dWFsbHkgKmlzKi4gV2hlcmUgZG9lcyBpdCBjb21lIGZyb20/IEl0JiMzOTtzIGNyZWF0ZWQgaW4gYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AuIEkmIzM5O2xsIG5lZWQgdG8gZ28gYmFjayBhbmQgY2hlY2sgdGhlIGNvZGUgaW4gdGhhdCBmdW5jdGlvbiB0byBlbnN1cmUgdGhhdCBJIHVuZGVyc3RhbmQgaG93IHRob3NlIGNvbnRleHRzIHdvcmsuIExldCBtZSBzdGFydCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9yZWNsYWltLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE5MDpcdFx0XHRcdFx1MDAyNmRhbW9uX3JlY2xhaW1fcXVvdGEsXG4gMTkxOlx0XHRcdFx0LyogKERlKWFjdGl2YXRlIHRoaXMgYWNjb3JkaW5nIHRvIHRoZSB3YXRlcm1hcmtzLiAqL1xuIDE5MjpcdFx0XHRcdFx1MDAyNmRhbW9uX3JlY2xhaW1fd21hcmtzLFxuIDE5MzpcdFx0XHRcdE5VTUFfTk9fTk9ERSk7XG4gMTk0Olx0fVxuIDE5NTpcdFxuIDE5NjpcdHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4gMTk3Olx0e1xuIDE5ODpcdFx0c3RydWN0IGRhbW9uX2N0eCAqcGFyYW1fY3R4O1xuIDE5OTpcdFx0c3RydWN0IGRhbW9uX3RhcmdldCAqcGFyYW1fdGFyZ2V0O1xuIDIwMDpcdFx0c3RydWN0IGRhbW9uX2F0dHJzIGF0dHJzO1xuIDIwMTpcdFx0c3RydWN0IGRhbW9zICpzY2hlbWU7XG4gMjAyOlx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcbiAyMDM6XHRcdHN0cnVjdCBkYW1vc19maWx0ZXIgKmZpbHRlcjtcbiAyMDQ6XHRcdGludCBlcnI7XG4gMjA1Olx0XG4gMjA2Olx0XHRlcnIgPSBkYW1vbl9tb2R1bGVzX25ld19wYWRkcl9jdHhfdGFyZ2V0KFx1MDAyNnBhcmFtX2N0eCwgXHUwMDI2cGFyYW1fdGFyZ2V0KTtcbiAyMDc6XHRcdGlmIChlcnIpXG4gMjA4Olx0XHRcdHJldHVybiBlcnI7XG4gMjA5Olx0XG4gMjEwOlx0XHRwYXJhbV9jdHgtXHUwMDNlYWRkcl91bml0ID0gYWRkcl91bml0O1xuIDIxMTpcdFx0cGFyYW1fY3R4LVx1MDAzZW1pbl9yZWdpb25fc3ogPSBtYXgoREFNT05fTUlOX1JFR0lPTl9TWiAvIGFkZHJfdW5pdCwgMSk7XG4gMjEyOlx0XG4gMjEzOlx0XHRpZiAoIWlzX3Bvd2VyX29mXzIocGFyYW1fY3R4LVx1MDAzZW1pbl9yZWdpb25fc3opKSB7XG4gMjE0Olx0XHRcdGVyciA9IC1FSU5WQUw7XG4gMjE1Olx0XHRcdGdvdG8gb3V0O1xuIDIxNjpcdFx0fVxuIDIxNzpcdFxuIDIxODpcdFx0aWYgKCFkYW1vbl9yZWNsYWltX21vbl9hdHRycy5hZ2dyX2ludGVydmFsKSB7XG4gMjE5Olx0XHRcdGVyciA9IC1FSU5WQUw7XG4gMjIwOlx0XHRcdGdvdG8gb3V0O1xuIDIyMTpcdFx0fVxuIDIyMjpcdFxuIDIyMzpcdFx0YXR0cnMgPSBkYW1vbl9yZWNsYWltX21vbl9hdHRycztcbiAyMjQ6XHRcdGlmIChhdXRvdHVuZV9tb25pdG9yaW5nX2ludGVydmFscykge1xuIDIyNTpcdFx0XHRhdHRycy5zYW1wbGVfaW50ZXJ2YWwgPSA1MDAwO1xuIDIyNjpcdFx0XHRhdHRycy5hZ2dyX2ludGVydmFsID0gMTAwMDAwO1xuIDIyNzpcdFx0XHRhdHRycy5pbnRlcnZhbHNfZ29hbC5hY2Nlc3NfYnAgPSA0MDtcbiAyMjg6XHRcdFx0YXR0cnMuaW50ZXJ2YWxzX2dvYWwuYWdncnMgPSAzO1xuIDIyOTpcdFx0XHRhdHRycy5pbnRlcnZhbHNfZ29hbC5taW5fc2FtcGxlX3VzID0gNTAwMDtcbiAyMzA6XHRcdFx0YXR0cnMuaW50ZXJ2YWxzX2dvYWwubWF4X3NhbXBsZV91cyA9IDEwICogMTAwMCAqIDEwMDA7XG4gMjMxOlx0XHR9XG4gMjMyOlx0XHRlcnIgPSBkYW1vbl9zZXRfYXR0cnMocGFyYW1fY3R4LCBcdTAwMjZhdHRycyk7XG4gMjMzOlx0XHRpZiAoZXJyKVxuIDIzNDpcdFx0XHRnb3RvIG91dDtcbiAyMzU6XHRcbiAyMzY6XHRcdGVyciA9IC1FTk9NRU07XG4gMjM3Olx0XHRzY2hlbWUgPSBkYW1vbl9yZWNsYWltX25ld19zY2hlbWUoYXR0cnMuYWdncl9pbnRlcnZhbCk7XG4gMjM4Olx0XHRpZiAoIXNjaGVtZSlcbiAyMzk6XHRcdFx0Z290byBvdXQ7XG4gMjQwOlx0XHRkYW1vbl9zZXRfc2NoZW1lcyhwYXJhbV9jdHgsIFx1MDAyNnNjaGVtZSwgMSk7XG4gMjQxOlx0XG4gMjQyOlx0XHRpZiAocXVvdGFfbWVtX3ByZXNzdXJlX3VzKSB7XG4gMjQzOlx0XHRcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMsXG4gMjQ0Olx0XHRcdFx0XHRxdW90YV9tZW1fcHJlc3N1cmVfdXMpO1xuIDI0NTpcdFx0XHRpZiAoIWdvYWwpXG4gMjQ2Olx0XHRcdFx0Z290byBvdXQ7XG4gMjQ3Olx0XHRcdGRhbW9zX2FkZF9xdW90YV9nb2FsKFx1MDAyNnNjaGVtZS1cdTAwM2VxdW90YSwgZ29hbCk7XG4gMjQ4Olx0XHR9XG4gMjQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2MzMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgcGFyYW1fY3R4YCBDb25maWd1cmF0aW9uIFByb2Nlc3MqKgoKT2theSwgc28gSSYjMzk7bSBzZWVpbmcgdGhhdCBgcGFyYW1fY3R4YCBpcyBpbml0aWFsaXplZCBhbmQgc2V0IHVwLCBhbmQgdGhlbiBgZGFtb25fY29tbWl0X2N0eChjdHgsIHBhcmFtX2N0eClgIGlzIGNhbGxlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYGRhbW9uX2NvbW1pdF9jdHhgIHByb2JhYmx5IHRha2VzIHRoZSBjb25maWd1cmF0aW9uIGZyb20gYHBhcmFtX2N0eGAgYW5kIGludGVncmF0ZXMgaXQgaW50byBgY3R4YC4gQnV0IHRoZW4gSSBoYXZlIHRvIGFzayBteXNlbGYsIGRvZXMgYGRhbW9uX2NvbW1pdF9jdHhgIGFjdHVhbGx5ICp0YWtlIG93bmVyc2hpcCogb2YgYHBhcmFtX2N0eGA/ICBJdCBzZWVtcyBsaWtlIHRoZSB0ZXh0IGltcGxpZXMgYSBjb3B5LCB3aGljaCBtZWFucyBgY3R4YCBpcyBiZWluZyB1cGRhdGVkIHdpdGggdGhlIGNvbmZpZ3VyYXRpb24gZGF0YS4KCklmIGl0ICpjb3BpZXMqIHRoZSBjb25maWd1cmF0aW9uLCB0aGVuIHdoeSBpcyBgcGFyYW1fY3R4YCBzdGlsbCBoYW5naW5nIGFyb3VuZD8gU2hvdWxkbiYjMzk7dCBpdCBiZSBmcmVlZD8gSSYjMzk7bSBtaXNzaW5nIHNvbWV0aGluZyBoZXJlLiBUbyBjbGFyaWZ5IHRoZSBvd25lcnNoaXAgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IG9mIGBwYXJhbV9jdHhgIGZvbGxvd2luZyB0aGlzLCBJIHRoaW5rIEkgbmVlZCB0byBsb29rIGRpcmVjdGx5IGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZGFtb25fY29tbWl0X2N0eGAuIExldCBtZSBwdWxsIHVwIGBtbS9kYW1vbi9jb3JlLmNgIGFuZCBjb25maXJtIGV4YWN0bHkgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIHRoYXQgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAwOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX2NvbW1pdF9jdHgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTE1Mjk9c3RhdGljIGludCBkYW1vbl9jb21taXRfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNTYwLS8qKlxubW0vZGFtb24vY29yZS5jOjE1NjE6ICogZGFtb25fY29tbWl0X2N0eCgpIC0gQ29tbWl0IHBhcmFtZXRlcnMgb2YgYSBEQU1PTiBjb250ZXh0IHRvIGFub3RoZXIuXG5tbS9kYW1vbi9jb3JlLmMtMTU2Mi0gKiBAZHN0Olx0VGhlIGNvbW1pdCBkZXN0aW5hdGlvbiBEQU1PTiBjb250ZXh0LlxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNTcyLSAqL1xubW0vZGFtb24vY29yZS5jOjE1NzM6aW50IGRhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG5tbS9kYW1vbi9jb3JlLmMtMTU3NC17XG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz0yNzM9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNDItXHRcdGdvdG8gb3V0O1xubW0vZGFtb24vbHJ1X3NvcnQuYzozNDM6XHRlcnIgPSBkYW1vbl9jb21taXRfY3R4KGN0eCwgcGFyYW1fY3R4KTtcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzQ0LW91dDpcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MTk2PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTI2OS1cdFx0Z290byBvdXQ7XG5tbS9kYW1vbi9yZWNsYWltLmM6MjcwOlx0ZXJyID0gZGFtb25fY29tbWl0X2N0eChjdHgsIHBhcmFtX2N0eCk7XG5tbS9kYW1vbi9yZWNsYWltLmMtMjcxLVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjA3Nj1zdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fc3lzZnNfbmV3X3Rlc3RfY3R4KFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjA4NC1cdFx0cmV0dXJuIE5VTEw7XG5tbS9kYW1vbi9zeXNmcy5jOjIwODU6XHRlcnIgPSBkYW1vbl9jb21taXRfY3R4KHRlc3RfY3R4LCBydW5uaW5nX2N0eCk7XG5tbS9kYW1vbi9zeXNmcy5jLTIwODYtXHRpZiAoZXJyKSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0yMDk5PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfY29tbWl0X2lucHV0KHZvaWQgKmRhdGEpXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMTE4LVx0fVxubW0vZGFtb24vc3lzZnMuYzoyMTE5Olx0ZXJyID0gZGFtb25fY29tbWl0X2N0eCh0ZXN0X2N0eCwgcGFyYW1fY3R4KTtcbm1tL2RhbW9uL3N5c2ZzLmMtMjEyMC1cdGlmIChlcnIpXG5tbS9kYW1vbi9zeXNmcy5jLTIxMjEtXHRcdGdvdG8gb3V0O1xubW0vZGFtb24vc3lzZnMuYzoyMTIyOlx0ZXJyID0gZGFtb25fY29tbWl0X2N0eChrZGFtb25kLVx1MDAzZWRhbW9uX2N0eCwgcGFyYW1fY3R4KTtcbm1tL2RhbW9uL3N5c2ZzLmMtMjEyMy1vdXQ6XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTExODM9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfY3R4KHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTE5Ni1cdHNyYy1cdTAwM2VtaW5fcmVnaW9uX3N6ID0gNDA5Njtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMTk3Olx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX2NvbW1pdF9jdHgoZHN0LCBzcmMpLCAwKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMTk4LVx0c3JjLVx1MDAzZW1pbl9yZWdpb25fc3ogPSA0MDk1O1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjExOTk6XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fY29tbWl0X2N0eChkc3QsIHNyYyksIC1FSU5WQUwpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEyMDAtXHRzcmMtXHUwMDNlbWluX3JlZ2lvbl9zeiA9IDQwOTY7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTIwMS1cdHNyYy1cdTAwM2VwYXVzZSA9IHRydWU7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTIwMjpcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9jb21taXRfY3R4KGRzdCwgc3JjKSwgMCk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTIwMy1cdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIGRzdC1cdTAwM2VwYXVzZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwNzEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBkYW1vbl9jb21taXRfY3R4YCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgYGRhbW9uX2NvbW1pdF9jdHhgIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHN0cnVjdHVyZSBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIGNvbmZpcm0gdGhhdCB0aGUgd2F5IGl0IGhhbmRsZXMgY29udGV4dCB3aXRoaW4gREFNT04gYWxpZ25zIHdpdGggbXkgZXhwZWN0ZWQgbW9kZWwuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBzdWJ0bGUgaXNzdWVzIGluIG1lbW9yeSBtYW5hZ2VtZW50LCBjb25jdXJyZW5jeSBpZiBhcHBsaWNhYmxlLCBhbmQgaWYgaXQgaW50ZXJhY3RzIHByb3Blcmx5IHdpdGggdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCBpbiB0cmFja2luZyBhbmQgc2NoZWR1bGluZyByZWdpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBkYXRhIGZsb3cgd2l0aGluIHRoZSBjb21taXQgb3BlcmF0aW9uLCBmb2N1c2luZyBvbiBkYXRhIGNvbnNpc3RlbmN5IHVuZGVyIGNvbmN1cnJlbnQgYWNjZXNzIGZyb20gbXVsdGlwbGUgdGhyZWFkcy9DUFVzLiBJIGFtIGxvb2tpbmcgZm9yIHRoZSB1c2FnZSBvZiBhdG9taWMgb3BlcmF0aW9ucywgbXV0ZXhlcywgYW5kIG90aGVyIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgY29kZSBwbGF5cyBuaWNlbHkgd2l0aCBvdGhlciBhcmVhcyBvZiBEQU1PTiB0aGF0IG1hbmFnZSBtZXRhZGF0YS4gQXJlIHRoZXJlIGFueSBjb3JuZXIgY2FzZXMgdGhhdCBtaWdodCBsZWFkIHRvIGRhdGEgY29ycnVwdGlvbiBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLCBlc3BlY2lhbGx5IGluIGhpZ2gtY29udGVudGlvbiBzY2VuYXJpb3M/IEZpbmFsbHksIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIC0gYXJlIGV4Y2VwdGlvbnMgcHJvcGVybHkgbWFuYWdlZCBhbmQgdGhlIHN5c3RlbSByZW1haW5zIHN0YWJsZT8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE1NjA6XHQvKipcbjE1NjE6XHQgKiBkYW1vbl9jb21taXRfY3R4KCkgLSBDb21taXQgcGFyYW1ldGVycyBvZiBhIERBTU9OIGNvbnRleHQgdG8gYW5vdGhlci5cbjE1NjI6XHQgKiBAZHN0Olx0VGhlIGNvbW1pdCBkZXN0aW5hdGlvbiBEQU1PTiBjb250ZXh0LlxuMTU2MzpcdCAqIEBzcmM6XHRUaGUgY29tbWl0IHNvdXJjZSBEQU1PTiBjb250ZXh0LlxuMTU2NDpcdCAqXG4xNTY1Olx0ICogVGhpcyBmdW5jdGlvbiBjb3BpZXMgdXNlci1zcGVjaWZpZWQgcGFyYW1ldGVycyBmcm9tIEBzcmMgdG8gQGRzdCBhbmQgdXBkYXRlXG4xNTY2Olx0ICogdGhlIGludGVybmFsIHN0YXR1cyBhbmQgcmVzdWx0cyBhY2NvcmRpbmdseS4gIFVzZXJzIHNob3VsZCB1c2UgdGhpcyBmdW5jdGlvblxuMTU2NzpcdCAqIGZvciBjb250ZXh0LWxldmVsIHBhcmFtZXRlcnMgdXBkYXRlIG9mIHJ1bm5pbmcgY29udGV4dCwgaW5zdGVhZCBvZiBtYW51YWxcbjE1Njg6XHQgKiBpbi1wbGFjZSB1cGRhdGVzLlxuMTU2OTpcdCAqXG4xNTcwOlx0ICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGZyb20gcGFyYW1ldGVycy11cGRhdGUgc2FmZSBjb250ZXh0LCBsaWtlXG4xNTcxOlx0ICogZGFtb25fY2FsbCgpLlxuMTU3MjpcdCAqL1xuMTU3MzpcdGludCBkYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxuMTU3NDpcdHtcbjE1NzU6XHRcdGludCBlcnI7XG4xNTc2Olx0XHRzdHJ1Y3QgZGFtb3MgKnNjaGVtZTtcbjE1Nzc6XHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsO1xuMTU3ODpcdFxuMTU3OTpcdFx0ZHN0LVx1MDAzZW1heWJlX2NvcnJ1cHRlZCA9IHRydWU7XG4xNTgwOlx0XHRpZiAoIWlzX3Bvd2VyX29mXzIoc3JjLVx1MDAzZW1pbl9yZWdpb25fc3opKVxuMTU4MTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE1ODI6XHRcbjE1ODM6XHRcdC8qIG5vZGVfZWxpZ2libGVfbWVtX2JwIG1ldHJpYyByZXF1aXJlcyBQQUREUiBvcHMgKi9cbjE1ODQ6XHRcdGlmIChzcmMtXHUwMDNlb3BzLmlkICE9IERBTU9OX09QU19QQUREUikge1xuMTU4NTpcdFx0XHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUoc2NoZW1lLCBzcmMpIHtcbjE1ODY6XHRcdFx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXHUwMDI2c2NoZW1lLVx1MDAzZXF1b3RhO1xuMTU4NzpcdFxuMTU4ODpcdFx0XHRcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgcXVvdGEpIHtcbjE1ODk6XHRcdFx0XHRcdGlmIChnb2FsLVx1MDAzZW1ldHJpYyA9PVxuMTU5MDpcdFx0XHRcdFx0XHRcdERBTU9TX1FVT1RBX05PREVfRUxJR0lCTEVfTUVNX0JQKVxuMTU5MTpcdFx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE1OTI6XHRcdFx0XHR9XG4xNTkzOlx0XHRcdH1cbjE1OTQ6XHRcdH1cbjE1OTU6XHRcbjE1OTY6XHRcdGVyciA9IGRhbW9uX2NvbW1pdF9zY2hlbWVzKGRzdCwgc3JjKTtcbjE1OTc6XHRcdGlmIChlcnIpXG4xNTk4Olx0XHRcdHJldHVybiBlcnI7XG4xNTk5Olx0XHRlcnIgPSBkYW1vbl9jb21taXRfdGFyZ2V0cyhkc3QsIHNyYyk7XG4xNjAwOlx0XHRpZiAoZXJyKVxuMTYwMTpcdFx0XHRyZXR1cm4gZXJyO1xuMTYwMjpcdFx0LypcbjE2MDM6XHRcdCAqIHNjaGVtZXMgYW5kIHRhcmdldHMgc2hvdWxkIGJlIHVwZGF0ZWQgZmlyc3QsIHNpbmNlXG4xNjA0Olx0XHQgKiAxLiBkYW1vbl9zZXRfYXR0cnMoKSB1cGRhdGVzIG1vbml0b3JpbmcgcmVzdWx0cyBvZiB0YXJnZXRzIGFuZFxuMTYwNTpcdFx0ICogbmV4dF9hcHBseV9zaXMgb2Ygc2NoZW1lcywgYW5kXG4xNjA2Olx0XHQgKiAyLiBvcHMgdXBkYXRlIHNob3VsZCBiZSBkb25lIGFmdGVyIHBpZCBoYW5kbGluZyBpcyBkb25lICh0YXJnZXRcbjE2MDc6XHRcdCAqICAgIGNvbW1pdHRpbmcgcmVxdWlyZSBwdXR0aW5nIHBpZHMpLlxuMTYwODpcdFx0ICovXG4xNjA5Olx0XHRpZiAoIWRhbW9uX2F0dHJzX2VxdWFscyhcdTAwMjZkc3QtXHUwMDNlYXR0cnMsIFx1MDAyNnNyYy1cdTAwM2VhdHRycykpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDA6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTEyOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgYGRhbW9uX2NvbW1pdF9jdHhgIGFuZCBQb3RlbnRpYWwgT3duZXJzaGlwKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuLi4gKmBkYW1vbl9jb21taXRfY3R4YCogaXMgY29weWluZyBzY2hlbWVzIGFuZCB0YXJnZXRzLiBIbW0sIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byBjbGFyaWZ5IHdoZXRoZXIgaXQmIzM5O3MgdHJ1bHkgbWFraW5nIGNvcGllcyBvciBpZiBpdCBtaWdodCBiZSB0cmFuc2ZlcnJpbmcgb3duZXJzaGlwIG9mIHRoZSB1bmRlcmx5aW5nIGRhdGEuIFRoYXQmIzM5O3MgYSBjcnVjaWFsIGRpc3RpbmN0aW9uIGZvciBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcG90ZW50aWFsIGRhdGEgY29ycnVwdGlvbiBpc3N1ZXMsIGVzcGVjaWFsbHkgaW4gYSBzeXN0ZW0gbGlrZSB0aGlzLgoKT2theSwgbXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJJiMzOTt2ZSBnb3QgdG8gZGl2ZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgYGRhbW9uX2NvbW1pdF9zY2hlbWVzYCBhbmQgYGRhbW9uX2NvbW1pdF90YXJnZXRzYC4gVGhvc2UgYXJlIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdG8gY2hlY2sgbm93LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhleSYjMzk7cmUgZG9pbmcgd2l0aCB0aG9zZSBjb3BpZWQgc2NoZW1lcyBhbmQgdGFyZ2V0cy4gQXJlIHRoZXkgb3BlcmF0aW5nIG9uIHRoZW0gZGlyZWN0bHksIHBvdGVudGlhbGx5IG1vZGlmeWluZyBzaGFyZWQgZGF0YT8gQXJlIHRoZXkgY3JlYXRpbmcgbmV3LCBpbmRlcGVuZGVudCBjb3BpZXM/IFRoZSBkZXZpbCBpcyBkZWZpbml0ZWx5IGluIHRoZSBkZXRhaWxzIGhlcmUsIHNvIHRoZSBjb2RlIHdhbGsgYmVnaW5zIG5vdy4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgZmlndXJlIG91dCB0aGUgbWVtb3J5IHNlbWFudGljcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0NDA6XHRcdFx0XHRkYW1vbl9kZXN0cm95X3RhcmdldChkc3RfdGFyZ2V0LCBkc3QpO1xuMTQ0MTpcdFx0XHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBkc3QpIHtcbjE0NDI6XHRcdFx0XHRcdGlmIChzLVx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSA9PSBkc3RfdGFyZ2V0KSB7XG4xNDQzOlx0XHRcdFx0XHRcdHMtXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbjE0NDQ6XHRcdFx0XHRcdFx0cy1cdTAwM2VxdW90YS5jaGFyZ2VfYWRkcl9mcm9tID0gMDtcbjE0NDU6XHRcdFx0XHRcdH1cbjE0NDY6XHRcdFx0XHR9XG4xNDQ3Olx0XHRcdH1cbjE0NDg6XHRcdH1cbjE0NDk6XHRcbjE0NTA6XHRcdGZhaWxlZCA9IE5VTEw7XG4xNDUxOlx0XHRkYW1vbl9mb3JfZWFjaF90YXJnZXRfc2FmZShzcmNfdGFyZ2V0LCBuZXh0LCBzcmMpIHtcbjE0NTI6XHRcdFx0aWYgKGomIzQzOyYjNDM7IFx1MDAzYyBpKVxuMTQ1MzpcdFx0XHRcdGNvbnRpbnVlO1xuMTQ1NDpcdFx0XHQvKiB0YXJnZXQgdG8gcmVtb3ZlIGhhcyBubyBtYXRjaGluZyBkc3QgKi9cbjE0NTU6XHRcdFx0aWYgKHNyY190YXJnZXQtXHUwMDNlb2Jzb2xldGUpIHtcbjE0NTY6XHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMTQ1NzpcdFx0XHRcdGdvdG8gb3V0O1xuMTQ1ODpcdFx0XHR9XG4xNDU5Olx0XHRcdG5ld190YXJnZXQgPSBkYW1vbl9uZXdfdGFyZ2V0KCk7XG4xNDYwOlx0XHRcdGlmICghbmV3X3RhcmdldCkge1xuMTQ2MTpcdFx0XHRcdGVyciA9IC1FTk9NRU07XG4xNDYyOlx0XHRcdFx0Z290byBvdXQ7XG4xNDYzOlx0XHRcdH1cbjE0NjQ6XHRcdFx0ZXJyID0gZGFtb25fY29tbWl0X3RhcmdldChuZXdfdGFyZ2V0LCBmYWxzZSxcbjE0NjU6XHRcdFx0XHRcdHNyY190YXJnZXQsIGRhbW9uX3RhcmdldF9oYXNfcGlkKHNyYyksXG4xNDY2Olx0XHRcdFx0XHRzcmMtXHUwMDNlbWluX3JlZ2lvbl9zeik7XG4xNDY3Olx0XHRcdGlmIChlcnIpIHtcbjE0Njg6XHRcdFx0XHRkYW1vbl9kZXN0cm95X3RhcmdldChuZXdfdGFyZ2V0LCBOVUxMKTtcbjE0Njk6XHRcdFx0XHRnb3RvIG91dDtcbjE0NzA6XHRcdFx0fVxuMTQ3MTpcdFx0XHRkYW1vbl9hZGRfdGFyZ2V0KGRzdCwgbmV3X3RhcmdldCk7XG4xNDcyOlx0XHR9XG4xNDczOlx0XHRyZXR1cm4gMDtcbjE0NzQ6XHRcbjE0NzU6XHRvdXQ6XG4xNDc2Olx0XHRkYW1vbl9yZXZlcnRfdGFyZ2V0X2NvbW1pdHMoZHN0LCBmYWlsZWQsIHNyYyk7XG4xNDc3Olx0XHRyZXR1cm4gZXJyO1xuMTQ3ODpcdH1cbjE0Nzk6XHRcbjE0ODA6XHRzdGF0aWMgdm9pZCBkYW1vbl9jb21taXRfZmlsdGVyKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmRzdCxcbjE0ODE6XHRcdFx0c3RydWN0IGRhbW9uX2ZpbHRlciAqc3JjKVxuMTQ4MjpcdHtcbjE0ODM6XHRcdGRzdC1cdTAwM2V0eXBlID0gc3JjLVx1MDAzZXR5cGU7XG4xNDg0Olx0XHRkc3QtXHUwMDNlbWF0Y2hpbmcgPSBzcmMtXHUwMDNlbWF0Y2hpbmc7XG4xNDg1Olx0XHRkc3QtXHUwMDNlYWxsb3cgPSBzcmMtXHUwMDNlYWxsb3c7XG4xNDg2Olx0XHRzd2l0Y2ggKGRzdC1cdTAwM2V0eXBlKSB7XG4xNDg3Olx0XHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHOlxuMTQ4ODpcdFx0XHRkc3QtXHUwMDNlbWVtY2dfaWQgPSBzcmMtXHUwMDNlbWVtY2dfaWQ7XG4xNDg5Olx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAwMDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDEzOQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIE1lbW9yeSBMZWFrcyBpbiBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCBmdW5jdGlvbiBhbmQgdGhlIHdheSBpdCBoYW5kbGVzIGBwYXJhbV9jdHhgLiBNeSBpbml0aWFsIHVuZGVyc3RhbmRpbmcsIGJhc2VkIG9uIHRoZSBmdW5jdGlvbiYjMzk7cyBzdHJ1Y3R1cmUsIHdhcyB0aGF0IGBkYW1vbl9jb21taXRfY3R4YCBjcmVhdGVzIG5ldyB0YXJnZXRzIGFuZCBjb3BpZXMgZGF0YSwgaW1wbHlpbmcgaXQgKmRvZXNuJiMzOTt0KiB0YWtlIG93bmVyc2hpcCBvZiBgcGFyYW1fY3R4YC4gVGhpcyBtZWFucyBgcGFyYW1fY3R4YCBuZWVkcyB0byBiZSBjbGVhbmVkIHVwIGFmdGVyIHRoZSBjYWxsLCByZWdhcmRsZXNzIG9mIHN1Y2Nlc3Mgb3IgZmFpbHVyZS4gQnV0IEkmIzM5O20gc2VlaW5nIHNvbWV0aGluZyB0aGF0JiMzOTtzIG1ha2luZyBtZSBwYXVzZS4KCkxvb2tpbmcgYXQgdGhlIHBhdGNoIHNuaXBwZXQgYWdhaW46IEkgYW0gbm93IG5vdGljaW5nIHRoZSBjb25kaXRpb25hbCByZXR1cm46IGlmIGBkYW1vbl9jb21taXRfY3R4YCAqc3VjY2VlZHMqIChpLmUuLCBgZXJyYCBpcyAwLCB0aHVzIGAhZXJyYCBpcyB0cnVlKSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgaW1tZWRpYXRlbHkgd2l0aCBgcmV0dXJuIDA7YCwgKmJ5cGFzc2luZyogdGhlIGNhbGwgdG8gYGRhbW9uX2Rlc3Ryb3lfY3R4KHBhcmFtX2N0eClgLgoKSXMgdGhpcyBhIHBvdGVudGlhbCBtZW1vcnkgbGVhaz8gSWYgYGRhbW9uX2NvbW1pdF9jdHhgICpjb3BpZXMqIGV2ZXJ5dGhpbmcgZnJvbSBgcGFyYW1fY3R4YCwgdGhlbiBgcGFyYW1fY3R4YCAqc2hvdWxkKiBiZSBkZXN0cm95ZWQuIElmLCBvbiB0aGUgb3RoZXIgaGFuZCwgYGRhbW9uX2NvbW1pdF9jdHhgICp0YWtlcyogb3duZXJzaGlwLCB0aGVuIGBwYXJhbV9jdHhgICpzaG91bGRuJiMzOTt0KiBiZSBkZXN0cm95ZWQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGlzIGhhcHBlbmluZy4gSSByZWFsbHkgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGJlaGF2aW9yIG9mIGBkYW1vbl9jb21taXRfY3R4YCBhbmQgbW9yZSBpbXBvcnRhbnRseSBgZGFtb25fZGVzdHJveV9jdHhgIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAwOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NjA6XHRcdGRlZmF1bHQ6XG4gNDYxOlx0XHRcdGJyZWFrO1xuIDQ2MjpcdFx0fVxuIDQ2MzpcdFx0cmV0dXJuIHRydWU7XG4gNDY0Olx0fVxuIDQ2NTpcdFxuIDQ2NjpcdHZvaWQgZGFtb3NfYWRkX2ZpbHRlcihzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vc19maWx0ZXIgKmYpXG4gNDY3Olx0e1xuIDQ2ODpcdFx0aWYgKGRhbW9zX2ZpbHRlcl9mb3Jfb3BzKGYtXHUwMDNldHlwZSkpXG4gNDY5Olx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2Zi1cdTAwM2VsaXN0LCBcdTAwMjZzLVx1MDAzZW9wc19maWx0ZXJzKTtcbiA0NzA6XHRcdGVsc2VcbiA0NzE6XHRcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZmLVx1MDAzZWxpc3QsIFx1MDAyNnMtXHUwMDNlY29yZV9maWx0ZXJzKTtcbiA0NzI6XHR9XG4gNDczOlx0XG4gNDc0Olx0c3RhdGljIHZvaWQgZGFtb3NfZGVsX2ZpbHRlcihzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmKVxuIDQ3NTpcdHtcbiA0NzY6XHRcdGxpc3RfZGVsKFx1MDAyNmYtXHUwMDNlbGlzdCk7XG4gNDc3Olx0fVxuIDQ3ODpcdFxuIDQ3OTpcdHN0YXRpYyB2b2lkIGRhbW9zX2ZyZWVfZmlsdGVyKHN0cnVjdCBkYW1vc19maWx0ZXIgKmYpXG4gNDgwOlx0e1xuIDQ4MTpcdFx0a2ZyZWUoZik7XG4gNDgyOlx0fVxuIDQ4MzpcdFxuIDQ4NDpcdHZvaWQgZGFtb3NfZGVzdHJveV9maWx0ZXIoc3RydWN0IGRhbW9zX2ZpbHRlciAqZilcbiA0ODU6XHR7XG4gNDg2Olx0XHRkYW1vc19kZWxfZmlsdGVyKGYpO1xuIDQ4NzpcdFx0ZGFtb3NfZnJlZV9maWx0ZXIoZik7XG4gNDg4Olx0fVxuIDQ4OTpcdFxuIDQ5MDpcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19uZXdfcXVvdGFfZ29hbChcbiA0OTE6XHRcdFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyBtZXRyaWMsXG4gNDkyOlx0XHRcdHVuc2lnbmVkIGxvbmcgdGFyZ2V0X3ZhbHVlKVxuIDQ5MzpcdHtcbiA0OTQ6XHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsO1xuIDQ5NTpcdFxuIDQ5NjpcdFx0Z29hbCA9IGttYWxsb2Nfb2JqKCpnb2FsKTtcbiA0OTc6XHRcdGlmICghZ29hbClcbiA0OTg6XHRcdFx0cmV0dXJuIE5VTEw7XG4gNDk5Olx0XHRnb2FsLVx1MDAzZW1ldHJpYyA9IG1ldHJpYztcbiA1MDA6XHRcdGdvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlID0gdGFyZ2V0X3ZhbHVlO1xuIDUwMTpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2Z29hbC1cdTAwM2VsaXN0KTtcbiA1MDI6XHRcdHJldHVybiBnb2FsO1xuIDUwMzpcdH1cbiA1MDQ6XHRcbiA1MDU6XHR2b2lkIGRhbW9zX2FkZF9xdW90YV9nb2FsKHN0cnVjdCBkYW1vc19xdW90YSAqcSwgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmcpXG4gNTA2Olx0e1xuIDUwNzpcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZnLVx1MDAzZWxpc3QsIFx1MDAyNnEtXHUwMDNlZ29hbHMpO1xuIDUwODpcdH1cbiA1MDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDA6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0NjQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzOgoKKipBbmFseXppbmcgYGRhbW9uX2Rlc3Ryb3lfY3R4YCoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciBkb3duIHRoaXMgcmFiYml0IGhvbGUsIEkgbmVlZCB0byB0YWtlIGEgc3RlcCBiYWNrIGFuZCBleGFtaW5lIHRoZSBjb3JlIG9mIHRoaXMuIFRoZSBmaXJzdCB0aGluZyB0aGF0IG5lZWRzIHRvIGhhcHBlbiBpcyBhIGRpcmVjdCBleGFtaW5hdGlvbiBvZiBgZGFtb25fZGVzdHJveV9jdHhgIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHN0cnVjdHVyZSwgaXRzIGRlcGVuZGVuY2llcywgd2hhdCBpdCYjMzk7cyBzdXBwb3NlZCB0byBkbywgYW5kIG1vc3QgaW1wb3J0YW50bHksICpob3cqIGl0JiMzOTtzIHN1cHBvc2VkIHRvIGRvIGl0LiBPbmx5IHRoZW4gY2FuIEkgcmVhc29uYWJseSB0cm91Ymxlc2hvb3QgYW55IGlzc3Vlcy4gSSYjMzk7bGwgc3RhcnQgd2l0aCBhIGNvZGUtbGV2ZWwgcmV2aWV3IG9mIHRoZSBmdW5jdGlvbi9vYmplY3QgZGVmaW5pdGlvbiB0byBhc3Nlc3MgaWYgaXQmIzM5O3Mgb3BlcmF0aW5nIGFzIGludGVuZGVkLiBJdCYjMzk7cyB0aGUgb25seSB3YXkgdG8gYmUgY29uZmlkZW50IHRoYXQgb3RoZXIgYXNzb2NpYXRlZCBsb2dpYyBpcyBub3Qgc2ltcGx5IG1hc2tpbmcgYW4gaW5pdGlhbCBwcm9ibGVtIHRoYXQgbmVlZHMgdG8gYmUgc29sdmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAwMDowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIGRhbW9uX2Rlc3Ryb3lfY3R4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz03MzQ9c3RhdGljIHZvaWQgZGFtb25fZGVzdHJveV90YXJnZXRzKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzQxLVxubW0vZGFtb24vY29yZS5jOjc0Mjp2b2lkIGRhbW9uX2Rlc3Ryb3lfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL2NvcmUuYy03NDMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAwMDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc4NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB3aGF0JiMzOTtzIGdvaW5nIG9uOgoKKipBbmFseXppbmcgdGhlIENvbnRleHQgb2YgJiMzNDtkYW1vbl9kZXN0cm95X2N0eCYjMzQ7KioKCkFscmlnaHQsIEkmIzM5O20gc3RhcnRpbmcgd2l0aCBgZGFtb25fZGVzdHJveV9jdHhgLiBJIHNlZSB0aGF0IG5hbWUgYW5kIGltbWVkaWF0ZWx5IHN0YXJ0IHRvIHRoaW5rIGFib3V0IHRoZSBwb3NzaWJsZSBpbXBsaWNhdGlvbnMuIENvbnRleHQgaXMga2V5LCBzbyBJJiMzOTttIHRyeWluZyB0byBtZW50YWxseSBtYXAgb3V0IHdoYXQgJiMzOTtkYW1vbiYjMzk7IGNvdWxkIHJlcHJlc2VudC4gSXMgaXQgYSBkZW1vbiwgYSBkYXRhIHN0cnVjdHVyZSwgYSBwcm9jZXNzLCBhIHVzZXI/ICYjMzk7RGVzdHJveSYjMzk7IGltcGxpZXMgc29tZSBraW5kIG9mIHRlcm1pbmF0aW9uIG9yIGNsZWFudXAgb3BlcmF0aW9uLiBBbmQgJiMzOTtjdHgmIzM5Oy4uLiB0aGF0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgc2hvcnQgZm9yIGNvbnRleHQuIE5vdywgY29udGV4dCBjYW4gbWVhbiBhIG11bHRpdHVkZSBvZiB0aGluZ3MgZGVwZW5kaW5nIG9uIHRoZSBzeXN0ZW0gYW5kIGRvbWFpbiwgcmFuZ2luZyBmcm9tIHNpbXBsZSBleGVjdXRpb24gZW52aXJvbm1lbnQgdG8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBuZWVkIHRvIGJlIG1hbmFnZWQuIFRoZXJlZm9yZSwgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgZnVuY3Rpb24mIzM5O3MgcHVycG9zZSBpcyB0byBjbGVhbmx5IGRpc3Bvc2Ugb2Ygb3IgbnVsbGlmeSB0aGUgJiMzOTtjb250ZXh0JiMzOTsgYXNzb2NpYXRlZCB3aXRoIHRoaXMgJiMzOTtkYW1vbiYjMzk7LiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZGVlcGVyIGludG8gdGhlIGltcGxlbWVudGF0aW9uIHRvIHBpbnBvaW50IHRoZSBzcGVjaWZpY3MsIHRoZSBzY29wZSwgdGhlIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMsIGFuZCBvZiBjb3Vyc2UsIHRoZSBlcnJvciBoYW5kbGluZyBpbnZvbHZlZC4gVGhpcyBjb3VsZCBiZSBhIGNyaXRpY2FsIHBhcnQgb2YgYSBsYXJnZXIgcHJvY2VzcywgYW5kIHVuZGVyc3RhbmRpbmcgaXRzIGZ1bmN0aW9uIHRob3JvdWdobHkgaXMgcGFyYW1vdW50IGJlZm9yZSBtYWtpbmcgY2hhbmdlcyBvciBldmVuIGludGVncmF0aW5nIGl0IGludG8gYSBicm9hZGVyIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc0MDpcdH1cbiA3NDE6XHRcbiA3NDI6XHR2b2lkIGRhbW9uX2Rlc3Ryb3lfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiA3NDM6XHR7XG4gNzQ0Olx0XHRzdHJ1Y3QgZGFtb3MgKnMsICpuZXh0X3M7XG4gNzQ1Olx0XHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnAsICpuZXh0X3A7XG4gNzQ2Olx0XG4gNzQ3Olx0XHRkYW1vbl9kZXN0cm95X3RhcmdldHMoY3R4KTtcbiA3NDg6XHRcbiA3NDk6XHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZV9zYWZlKHMsIG5leHRfcywgY3R4KVxuIDc1MDpcdFx0XHRkYW1vbl9kZXN0cm95X3NjaGVtZShzKTtcbiA3NTE6XHRcbiA3NTI6XHRcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlX3NhZmUocCwgbmV4dF9wLCBjdHgpXG4gNzUzOlx0XHRcdGRhbW9uX2Rlc3Ryb3lfcHJvYmUocCk7XG4gNzU0Olx0XG4gNzU1Olx0XHRrZnJlZShjdHgpO1xuIDc1NjpcdH1cbiA3NTc6XHRcbiA3NTg6XHRzdGF0aWMgYm9vbCBkYW1vbl9hdHRyc19lcXVhbHMoY29uc3Qgc3RydWN0IGRhbW9uX2F0dHJzICphdHRyczEsXG4gNzU5Olx0XHRcdGNvbnN0IHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMyKVxuIDc2MDpcdHtcbiA3NjE6XHRcdGNvbnN0IHN0cnVjdCBkYW1vbl9pbnRlcnZhbHNfZ29hbCAqaWcxID0gXHUwMDI2YXR0cnMxLVx1MDAzZWludGVydmFsc19nb2FsO1xuIDc2MjpcdFx0Y29uc3Qgc3RydWN0IGRhbW9uX2ludGVydmFsc19nb2FsICppZzIgPSBcdTAwMjZhdHRyczItXHUwMDNlaW50ZXJ2YWxzX2dvYWw7XG4gNzYzOlx0XG4gNzY0Olx0XHRyZXR1cm4gYXR0cnMxLVx1MDAzZXNhbXBsZV9pbnRlcnZhbCA9PSBhdHRyczItXHUwMDNlc2FtcGxlX2ludGVydmFsIFx1MDAyNlx1MDAyNlxuIDc2NTpcdFx0XHRhdHRyczEtXHUwMDNlYWdncl9pbnRlcnZhbCA9PSBhdHRyczItXHUwMDNlYWdncl9pbnRlcnZhbCBcdTAwMjZcdTAwMjZcbiA3NjY6XHRcdFx0YXR0cnMxLVx1MDAzZW9wc191cGRhdGVfaW50ZXJ2YWwgPT0gYXR0cnMyLVx1MDAzZW9wc191cGRhdGVfaW50ZXJ2YWwgXHUwMDI2XHUwMDI2XG4gNzY3Olx0XHRcdGF0dHJzMS1cdTAwM2VtaW5fbnJfcmVnaW9ucyA9PSBhdHRyczItXHUwMDNlbWluX25yX3JlZ2lvbnMgXHUwMDI2XHUwMDI2XG4gNzY4Olx0XHRcdGF0dHJzMS1cdTAwM2VtYXhfbnJfcmVnaW9ucyA9PSBhdHRyczItXHUwMDNlbWF4X25yX3JlZ2lvbnMgXHUwMDI2XHUwMDI2XG4gNzY5Olx0XHRcdGlnMS1cdTAwM2VhY2Nlc3NfYnAgPT0gaWcyLVx1MDAzZWFjY2Vzc19icCBcdTAwMjZcdTAwMjZcbiA3NzA6XHRcdFx0aWcxLVx1MDAzZWFnZ3JzID09IGlnMi1cdTAwM2VhZ2dycyBcdTAwMjZcdTAwMjZcbiA3NzE6XHRcdFx0aWcxLVx1MDAzZW1pbl9zYW1wbGVfdXMgPT0gaWcyLVx1MDAzZW1pbl9zYW1wbGVfdXMgXHUwMDI2XHUwMDI2XG4gNzcyOlx0XHRcdGlnMS1cdTAwM2VtYXhfc2FtcGxlX3VzID09IGlnMi1cdTAwM2VtYXhfc2FtcGxlX3VzO1xuIDc3MzpcdH1cbiA3NzQ6XHRcbiA3NzU6XHRzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX2FnZV9mb3JfbmV3X2F0dHJzKHVuc2lnbmVkIGludCBhZ2UsXG4gNzc2Olx0XHRcdHN0cnVjdCBkYW1vbl9hdHRycyAqb2xkX2F0dHJzLCBzdHJ1Y3QgZGFtb25fYXR0cnMgKm5ld19hdHRycylcbiA3Nzc6XHR7XG4gNzc4Olx0XHRyZXR1cm4gYWdlICogb2xkX2F0dHJzLVx1MDAzZWFnZ3JfaW50ZXJ2YWwgLyBuZXdfYXR0cnMtXHUwMDNlYWdncl9pbnRlcnZhbDtcbiA3Nzk6XHR9XG4gNzgwOlx0XG4gNzgxOlx0LyogY29udmVydCBhY2Nlc3MgcmF0aW8gaW4gYnAgKHBlciAxMCwwMDApIHRvIG5yX2FjY2Vzc2VzICovXG4gNzgyOlx0c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9hY2Nlc3Nlc19icF90b19ucl9hY2Nlc3NlcyhcbiA3ODM6XHRcdFx0dW5zaWduZWQgaW50IGFjY2Vzc2VzX2JwLCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxuIDc4NDpcdHtcbiA3ODU6XHRcdHJldHVybiBhY2Nlc3Nlc19icCAqIGRhbW9uX21heF9ucl9hY2Nlc3NlcyhhdHRycykgLyAxMDAwMDtcbiA3ODY6XHR9XG4gNzg3Olx0XG4gNzg4Olx0LypcbiA3ODk6XHQgKiBDb252ZXJ0IG5yX2FjY2Vzc2VzIHRvIGFjY2VzcyByYXRpbyBpbiBicCAocGVyIDEwLDAwMCkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTQ2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBgZGFtb25fY29tbWl0X2N0eGAgQmVoYXZpb3IqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBgZGFtb25fY29tbWl0X2N0eGAgaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgbGlrZWx5IGludm9sdmVkIGluIGNvcHlpbmcgc2NoZW1lcyBhbmQgdGFyZ2V0cy4gVGhhdCYjMzk7cyBhIGNvbW1vbiBwYXR0ZXJuIGluIHRoaXMga2luZCBvZiBjb250ZXh0LiBMZXQmIzM5O3Mgbm90IG1ha2UgYW55IGFzc3VtcHRpb25zIHRob3VnaCwgaXQmIzM5O3MgYWx3YXlzIGJlc3QgdG8gYmUgcHJlY2lzZS4gVG8gY29uZmlybSB0aGlzLCBJIG5lZWQgdG8gbG9vayBkaXJlY3RseSBhdCBob3cgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgc2NoZW1lcy4gVGhlIGtleSBwbGFjZSB0byBzdGFydCBsb29raW5nIGlzIGBkYW1vbl9jb21taXRfc2NoZW1lc2AuIFRoYXQgc2hvdWxkIHRlbGwgdGhlIHdob2xlIHN0b3J5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAwMDowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTMzMDpcdHN0YXRpYyBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpkYW1vbl9udGhfdGFyZ2V0KGludCBuLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4xMzMxOlx0e1xuMTMzMjpcdFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbjEzMzM6XHRcdGludCBpID0gMDtcbjEzMzQ6XHRcbjEzMzU6XHRcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjdHgpIHtcbjEzMzY6XHRcdFx0aWYgKGkmIzQzOyYjNDM7ID09IG4pXG4xMzM3Olx0XHRcdFx0cmV0dXJuIHQ7XG4xMzM4Olx0XHR9XG4xMzM5Olx0XHRyZXR1cm4gTlVMTDtcbjEzNDA6XHR9XG4xMzQxOlx0XG4xMzQyOlx0LypcbjEzNDM6XHQgKiBUaGUgY2FsbGVyIHNob3VsZCBlbnN1cmUgdGhlIHJlZ2lvbnMgb2YgQHNyYyBhcmVcbjEzNDQ6XHQgKiAxLiB2YWxpZCAoZW5kIFx1MDAzZT0gc3JjKSBhbmRcbjEzNDU6XHQgKiAyLiBzb3J0ZWQgYnkgc3RhcnRpbmcgYWRkcmVzcy5cbjEzNDY6XHQgKlxuMTM0NzpcdCAqIElmIEBzcmMgaGFzIG5vIHJlZ2lvbiwgQGRzdCBrZWVwcyBjdXJyZW50IHJlZ2lvbnMuXG4xMzQ4Olx0ICovXG4xMzQ5Olx0c3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqZHN0LFxuMTM1MDpcdFx0XHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpzcmMsIHVuc2lnbmVkIGxvbmcgc3JjX21pbl9yZWdpb25fc3opXG4xMzUxOlx0e1xuMTM1MjpcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqc3JjX3JlZ2lvbjtcbjEzNTM6XHRcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXM7XG4xMzU0Olx0XHRpbnQgaSA9IDAsIGVycjtcbjEzNTU6XHRcbjEzNTY6XHRcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihzcmNfcmVnaW9uLCBzcmMpXG4xMzU3Olx0XHRcdGkmIzQzOyYjNDM7O1xuMTM1ODpcdFx0aWYgKCFpKVxuMTM1OTpcdFx0XHRyZXR1cm4gMDtcbjEzNjA6XHRcbjEzNjE6XHRcdHJhbmdlcyA9IGttYWxsb2Nfb2JqcygqcmFuZ2VzLCBpLCBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcbjEzNjI6XHRcdGlmICghcmFuZ2VzKVxuMTM2MzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjEzNjQ6XHRcdGkgPSAwO1xuMTM2NTpcdFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHNyY19yZWdpb24sIHNyYylcbjEzNjY6XHRcdFx0cmFuZ2VzW2kmIzQzOyYjNDM7XSA9IHNyY19yZWdpb24tXHUwMDNlYXI7XG4xMzY3Olx0XHRlcnIgPSBkYW1vbl9zZXRfcmVnaW9ucyhkc3QsIHJhbmdlcywgaSwgc3JjX21pbl9yZWdpb25fc3opO1xuMTM2ODpcdFx0a2ZyZWUocmFuZ2VzKTtcbjEzNjk6XHRcdHJldHVybiBlcnI7XG4xMzcwOlx0fVxuMTM3MTpcdFxuMTM3MjpcdHN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3RhcmdldChcbjEzNzM6XHRcdFx0c3RydWN0IGRhbW9uX3RhcmdldCAqZHN0LCBib29sIGRzdF9oYXNfcGlkLFxuMTM3NDpcdFx0XHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpzcmMsIGJvb2wgc3JjX2hhc19waWQsXG4xMzc1Olx0XHRcdHVuc2lnbmVkIGxvbmcgc3JjX21pbl9yZWdpb25fc3opXG4xMzc2Olx0e1xuMTM3NzpcdFx0aW50IGVycjtcbjEzNzg6XHRcbjEzNzk6XHRcdGVyciA9IGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9ucyhkc3QsIHNyYywgc3JjX21pbl9yZWdpb25fc3opO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAwMDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg4OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQganVzdCBoYXBwZW5lZDoKCioqRGFtb24gQ29udGV4dCBNZW1vcnkgTGVhayBTdXNwZWN0ZWQqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBgZGFtb25fY29tbWl0X2N0eGAgaXMgYmVoYXZpbmcgaGVyZS4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBjb3B5aW5nIGRhdGEgZnJvbSBgcGFyYW1fY3R4YCB0byBgY3R4YC4gVGhlIGNydWNpYWwgdGhpbmcgSSYjMzk7bSBmb2N1c2luZyBvbiBpcyB3aGV0aGVyIGl0JiMzOTtzIHRyYW5zZmVycmluZyBvd25lcnNoaXAgb2YgdGhlIG1lbW9yeS4gSWYgaXQgKmRvZXNuJiMzOTt0KiB0YWtlIG93bmVyc2hpcCwgYW5kIGlmIGBwYXJhbV9jdHhgIGlzbiYjMzk7dCBwcm9wZXJseSBkZXN0cm95ZWQgYWZ0ZXJ3YXJkcywgd2UmIzM5O3JlIGdvaW5nIHRvIGhhdmUgYSBjbGFzc2ljIG1lbW9yeSBsZWFrLiBJdCYjMzk7cyBhIHRleHRib29rIHNpdHVhdGlvbiEgSSBuZWVkIHRvIHZlcmlmeSBob3cgYHBhcmFtX2N0eGAgaXMgaGFuZGxlZCBhZnRlciB0aGlzIGNvcHkuIFJpZ2h0IG5vdywgSSYjMzk7bSBsZWFuaW5nIHRvd2FyZCB0aGlua2luZyBpdCYjMzk7cyBub3QgYmVpbmcgZnJlZWQsIGFuZCB3ZSYjMzk7cmUgbGVha2luZy4KCkxldCYjMzk7cyBxdWlja2x5IGNoZWNrIGBkYW1vbl9zeXNmc19jb21taXRfaW5wdXRgIGluIGBtbS9kYW1vbi9zeXNmcy5jYC4gVGhhdCBzaG91bGQgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoaXMuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIGNvbmZpcm0gdGhpcyBzdXNwZWN0ZWQgb3ZlcnNpZ2h0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAwMDowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxMTA6XHRcbjIxMTE6XHRcdHBhcmFtX2N0eCA9IGRhbW9uX3N5c2ZzX2J1aWxkX2N0eChrZGFtb25kLVx1MDAzZWNvbnRleHRzLVx1MDAzZWNvbnRleHRzX2FyclswXSk7XG4yMTEyOlx0XHRpZiAoSVNfRVJSKHBhcmFtX2N0eCkpXG4yMTEzOlx0XHRcdHJldHVybiBQVFJfRVJSKHBhcmFtX2N0eCk7XG4yMTE0Olx0XHR0ZXN0X2N0eCA9IGRhbW9uX3N5c2ZzX25ld190ZXN0X2N0eChrZGFtb25kLVx1MDAzZWRhbW9uX2N0eCk7XG4yMTE1Olx0XHRpZiAoIXRlc3RfY3R4KSB7XG4yMTE2Olx0XHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KHBhcmFtX2N0eCk7XG4yMTE3Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMjExODpcdFx0fVxuMjExOTpcdFx0ZXJyID0gZGFtb25fY29tbWl0X2N0eCh0ZXN0X2N0eCwgcGFyYW1fY3R4KTtcbjIxMjA6XHRcdGlmIChlcnIpXG4yMTIxOlx0XHRcdGdvdG8gb3V0O1xuMjEyMjpcdFx0ZXJyID0gZGFtb25fY29tbWl0X2N0eChrZGFtb25kLVx1MDAzZWRhbW9uX2N0eCwgcGFyYW1fY3R4KTtcbjIxMjM6XHRvdXQ6XG4yMTI0Olx0XHRkYW1vbl9kZXN0cm95X2N0eCh0ZXN0X2N0eCk7XG4yMTI1Olx0XHRkYW1vbl9kZXN0cm95X2N0eChwYXJhbV9jdHgpO1xuMjEyNjpcdFx0cmV0dXJuIGVycjtcbjIxMjc6XHR9XG4yMTI4Olx0XG4yMTI5Olx0c3RhdGljIGludCBkYW1vbl9zeXNmc19jb21taXRfc2NoZW1lc19xdW90YV9nb2Fscyh2b2lkICpkYXRhKVxuMjEzMDpcdHtcbjIxMzE6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICpzeXNmc19rZGFtb25kID0gZGF0YTtcbjIxMzI6XHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcbjIxMzM6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0ICpzeXNmc19jdHg7XG4yMTM0Olx0XG4yMTM1Olx0XHRpZiAoIWRhbW9uX3N5c2ZzX2tkYW1vbmRfcnVubmluZyhzeXNmc19rZGFtb25kKSlcbjIxMzY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yMTM3Olx0XHQvKiBUT0RPOiBTdXBwb3J0IG11bHRpcGxlIGNvbnRleHRzIHBlciBrZGFtb25kICovXG4yMTM4Olx0XHRpZiAoc3lzZnNfa2RhbW9uZC1cdTAwM2Vjb250ZXh0cy1cdTAwM2VuciAhPSAxKVxuMjEzOTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjIxNDA6XHRcbjIxNDE6XHRcdGN0eCA9IHN5c2ZzX2tkYW1vbmQtXHUwMDNlZGFtb25fY3R4O1xuMjE0MjpcdFx0c3lzZnNfY3R4ID0gc3lzZnNfa2RhbW9uZC1cdTAwM2Vjb250ZXh0cy1cdTAwM2Vjb250ZXh0c19hcnJbMF07XG4yMTQzOlx0XHRyZXR1cm4gZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzeXNmc19jdHgtXHUwMDNlc2NoZW1lcywgY3R4KTtcbjIxNDQ6XHR9XG4yMTQ1Olx0XG4yMTQ2Olx0LypcbjIxNDc6XHQgKiBkYW1vbl9zeXNmc191cGRfc2NoZW1lc19lZmZlY3RpdmVfcXVvdGFzKCkgLSBVcGRhdGUgc2NoZW1lcyBlZmZlY3RpdmUgcXVvdGFzXG4yMTQ4Olx0ICogc3lzZnMgZmlsZXMuXG4yMTQ5Olx0ICogQGRhdGE6XHRUaGUga29iamVjdCB3cmFwcGVyIHRoYXQgYXNzb2NpYXRlZCB0byB0aGUga2RhbW9uZCB0aHJlYWQuXG4yMTUwOlx0ICpcbjIxNTE6XHQgKiBUaGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSBzY2hlbWVzJiMzOTsgZWZmZWN0aXZlIHF1b3RhcyBvZiBzcGVjaWZpYyBrZGFtb25kIGFuZFxuMjE1MjpcdCAqIHVwZGF0ZSB0aGUgcmVsYXRlZCB2YWx1ZXMgZm9yIHN5c2ZzIGZpbGVzLiAgVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkXG4yMTUzOlx0ICogZnJvbSBEQU1PTiBjYWxsYmFja3Mgd2hpbGUgaG9sZGluZyBgYGRhbW9uX3N5ZnNfbG9ja2BgLCB0byBzYWZlbHkgYWNjZXNzIHRoZVxuMjE1NDpcdCAqIERBTU9OIGNvbnRleHRzLWludGVybmFsIGRhdGEgYW5kIERBTU9OIHN5c2ZzIHZhcmlhYmxlcy5cbjIxNTU6XHQgKi9cbjIxNTY6XHRzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3VwZF9zY2hlbWVzX2VmZmVjdGl2ZV9xdW90YXModm9pZCAqZGF0YSlcbjIxNTc6XHR7XG4yMTU4Olx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZCA9IGRhdGE7XG4yMTU5Olx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHggPSBrZGFtb25kLVx1MDAzZWRhbW9uX2N0eDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDA6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxMTAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA4MDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIE1lbW9yeSBMZWFrIGluIERBTU9OIFJlY2xhbWF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgcmVsYXRlZCB0byBEQU1PTiYjMzk7cyByZWNsYW1hdGlvbiBtZWNoYW5pc20uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGluIGBkYW1vbl9zeXNmc19jb21taXRfaW5wdXRgLCBgZGFtb25fZGVzdHJveV9jdHgocGFyYW1fY3R4KWAgaXMgYWx3YXlzIGNhbGxlZCBhdCB0aGUgZW5kLCByZWdhcmRsZXNzIG9mIHRoZSBzdWNjZXNzIG9mIGBkYW1vbl9jb21taXRfY3R4YC4gTm93LCBJJiMzOTttIGV4YW1pbmluZyBhIHNwZWNpZmljIHBhdGNoIHdpdGhpbiBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYC4gSSBzZWUgdGhhdCB0aGUgY29kZSBhdHRlbXB0cyB0byBjb21taXQgYSBjb250ZXh0LCBidXQgdGhlbiB0aGVyZSYjMzk7cyBhbiBgaWYgKCFlcnIpIHJldHVybiAwO2Agc3RhdGVtZW50ICpiZWZvcmUqIHRoZSBjYWxsIHRvIGBkYW1vbl9kZXN0cm95X2N0eChwYXJhbV9jdHgpYC4KCk15IGNvbmNlcm4gaW1tZWRpYXRlbHkgaXMsICYjMzQ7V2FpdCwgaWYgYGRhbW9uX2NvbW1pdF9jdHhgIHN1Y2NlZWRzIChtZWFuaW5nIGBlcnJgIGlzIHplcm8pLCB3ZSAqc2tpcCogZGVzdHJveWluZyBgcGFyYW1fY3R4YD8gVGhhdCYjMzk7cyBhIG1lbW9yeSBsZWFrISYjMzQ7IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhpcywgc28gSSByZS1yZWFkIHRoYXQgc2VjdGlvbiBvZiB0aGUgcGF0Y2gsIGFuZCB5ZXMsIGl0JiMzOTtzIGNsZWFyOiBpZiBubyBlcnJvciwgd2Ugc2hvcnQtY2lyY3VpdCB0aGUgZnVuY3Rpb24gYW5kIHJldHVybiB3aXRob3V0IGZyZWVpbmcgdGhlIG1lbW9yeS4KCk5vdyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgZGVzaWduLiBXaHkgd291bGRuJiMzOTt0IHdlIHdhbnQgdG8gZGVzdHJveSB0aGUgY29udGV4dCAqZXZlcnkqIHRpbWU/IERvZXMgYGRhbW9uX2NvbW1pdF9jdHhgIG1heWJlIHRha2Ugb3duZXJzaGlwIG9mIHRoZSBjb250ZXh0IGluIHNvbWUgY2lyY3Vtc3RhbmNlcz8gTm8sIHRoYXQmIzM5O3Mgbm90IHJpZ2h0LCBiZWNhdXNlIGBkYW1vbl9zeXNmc19jb21taXRfaW5wdXRgIGhhbmRsZXMgaXRzIGRlc3RydWN0aW9uLgoKT2theSwgbGV0JiMzOTtzIGxvb2sgYXQgYGRhbW9uX3JlY2xhaW1faW5pdGAgYmVjYXVzZSBpdCBoYXMgdGhlIGNvbnRleHQgaW5pdGlhbGl6YXRpb24uIEkgc2VlIHRoYXQgdGhlcmUmIzM5O3MgYSBzYWZldHkgbmV0IHdoZXJlIGBjdHhgIGlzIGRlc3Ryb3llZCBpZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIGluaXRpYWxpemF0aW9uLiBJJiMzOTttIHN0YXJ0aW5nIHRvIHRoaW5rLCBpcyB0aGlzIHBhdGNoIGFjdHVhbGx5IGludHJvZHVjaW5nIGEgbGVhaz8KClRoZSBjb21taXQgbWVzc2FnZSBpcyB0aGUgbmV4dCB0aGluZyBJIG5lZWQgdG8gY2hlY2suIE9rYXksIGl0IHNheXMgJiMzNDtzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcuJiMzNDsgV2FpdCwgdGhlIGNvbW1pdCBtZXNzYWdlIGluIGBkYW1vbl9yZWNsYWltX2luaXRgIHNheXMgJiMzNDtQcmV2ZW50IHBvdGVudGlhbCBtZW1vcnkgbGVha2FnZS4mIzM0OyBCdXQgdGhpcyBwYXRjaCYjMzk7cyBhZGRlZCBjb25kaXRpb25hbCBzdGF0ZW1lbnQgaW4gYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AgaXMgZXhhY3RseSB0aGUgb3Bwb3NpdGU6IGl0IGFkZHMgYW4gZWFybHkgcmV0dXJuIHRoYXQgc2tpcHMgdGhlIGNsZWFudXAuIFNvLCBpZiBgZGFtb25fY29tbWl0X2N0eGAgcmV0dXJucyBhbiBlcnJvciwgd2UgY29ycmVjdGx5IGRlc3Ryb3kgYHBhcmFtX2N0eGAsIGJ1dCBpZiBpdCBzdWNjZWVkcywgd2UgbGVhayBpdC4KClNvLCAqdGhpcyBpcyBhYnNvbHV0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UuKiBUaGUgY29udHJvbCBmbG93IGlzIGRpZmZlcmVudCBkZXBlbmRpbmcgb24gd2hldGhlciBgZGFtb25fY29tbWl0X2N0eGAgc3VjY2VlZHMuIEkganVzdCBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgc2VjdGlvbiBvZiBjb2RlIGlzIHJlYWNoYWJsZS4gT2theSwgYGRhbW9uX3JlY2xhaW1faW5pdGAgaXMgYSBtb2R1bGUgaW5pdCBmdW5jdGlvbiwgc28gaXQmIzM5O3Mgb2J2aW91c2x5IHJlYWNoYWJsZSwgYW5kIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgIGlzIHJlYWNoYWJsZSBiZWNhdXNlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBkYW1vbl9yZWNsYWltX2luaXRgIHZpYSBgZGFtb25fcmVjbGFpbV90dXJuKHRydWUpYC4gTm93LCBJIG5lZWQgdG8gY2hlY2sgYGRhbW9uX3JlY2xhaW1faW5pdGAgdG8gc2VlIGhvdyBgZGFtb25fcmVjbGFpbV90dXJuYCBpcyBjYWxsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAwOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vcmVjbGFpbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NjA6XHQgKi9cbiA0NjE6XHRtb2R1bGVfcGFyYW1fY2Ioa2RhbW9uZF9waWQsIFx1MDAyNmtkYW1vbmRfcGlkX3BhcmFtX29wcywgTlVMTCwgMDQwMCk7XG4gNDYyOlx0XG4gNDYzOlx0c3RhdGljIGludCBfX2luaXQgZGFtb25fcmVjbGFpbV9pbml0KHZvaWQpXG4gNDY0Olx0e1xuIDQ2NTpcdFx0aW50IGVycjtcbiA0NjY6XHRcbiA0Njc6XHRcdGlmICghZGFtb25faW5pdGlhbGl6ZWQoKSkge1xuIDQ2ODpcdFx0XHRlcnIgPSAtRU5PTUVNO1xuIDQ2OTpcdFx0XHRnb3RvIG91dDtcbiA0NzA6XHRcdH1cbiA0NzE6XHRcdGVyciA9IGRhbW9uX21vZHVsZXNfbmV3X3BhZGRyX2N0eF90YXJnZXQoXHUwMDI2Y3R4LCBcdTAwMjZ0YXJnZXQpO1xuIDQ3MjpcdFx0aWYgKGVycilcbiA0NzM6XHRcdFx0Z290byBvdXQ7XG4gNDc0Olx0XG4gNDc1Olx0XHRjYWxsX2NvbnRyb2wuZGF0YSA9IGN0eDtcbiA0NzY6XHRcbiA0Nzc6XHRcdC8qICYjMzk7ZW5hYmxlZCYjMzk7IGhhcyBzZXQgYmVmb3JlIHRoaXMgZnVuY3Rpb24sIHByb2JhYmx5IHZpYSBjb21tYW5kIGxpbmUgKi9cbiA0Nzg6XHRcdGlmIChlbmFibGVkKVxuIDQ3OTpcdFx0XHRlcnIgPSBkYW1vbl9yZWNsYWltX3R1cm4odHJ1ZSk7XG4gNDgwOlx0XG4gNDgxOlx0b3V0OlxuIDQ4MjpcdFx0aWYgKGVyciBcdTAwMjZcdTAwMjYgZW5hYmxlZClcbiA0ODM6XHRcdFx0ZW5hYmxlZCA9IGZhbHNlO1xuIDQ4NDpcdFxuIDQ4NTpcdFx0LyogUHJldmVudCBwb3RlbmlhbCBtZW1vcnkgbGVha2FnZSAqL1xuIDQ4NjpcdFx0aWYgKGVyciBcdTAwMjZcdTAwMjYgY3R4KVxuIDQ4NzpcdFx0XHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xuIDQ4ODpcdFx0cmV0dXJuIGVycjtcbiA0ODk6XHR9XG4gNDkwOlx0XG4gNDkxOlx0bW9kdWxlX2luaXQoZGFtb25fcmVjbGFpbV9pbml0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDA6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwMDIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiBEQU1PTiBSZWNsYWltIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYGRhbW9uX3JlY2xhaW1faW5pdGAga2lja3Mgb2ZmIHRoZSBwcm9jZXNzIGJ5IGNhbGxpbmcgYGRhbW9uX3JlY2xhaW1fdHVybih0cnVlKWAgKm9ubHkqIGlmIHRoZSBtb2R1bGUgcGFyYW1ldGVyIGBlbmFibGVkYCBpcyBzZXQgdG8gdHJ1ZS4gIFRoYXQgbWFrZXMgc2Vuc2UuIEl0JiMzOTtzIGEgY2xlYW4gd2F5IHRvIGNvbnRyb2wgdGhlIGJlaGF2aW9yIGF0IGxvYWQgdGltZS4gSWYgSSBsb2FkIHRoZSBtb2R1bGUgd2l0aCBgZW5hYmxlZD1ZYCwgdGhlbiBpdCBjYWxscyBgZGFtb25fcmVjbGFpbV90dXJuKHRydWUpYCB3aGljaCB0aGVuIGNvcnJlY3RseSBsZWFkcyBpbnRvIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnMoKWAuICBFeGNlbGxlbnQsIHRoZSBmbG93IGlzIHJlYWNoYWJsZSBhbmQgc2VlbXMgdG8gYmUgd29ya2luZyBhcyBleHBlY3RlZC4KCk5vdywgbGV0IG1lIGp1c3QgY29uZmlybSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGFyZSBpbiBwbGFjZS4gSSBuZWVkIHRvIGVuc3VyZSBgQ09ORklHX0RBTU9OYCBpcyBlbmFibGVkLCBhbmQgb2J2aW91c2x5LCBgQ09ORklHX0RBTU9OX1JFQ0xBSU1gLgoKSG9sZCBvbiBhIHNlY29uZOKApiBpc24mIzM5O3QgYERBTU9OX1JFQ0xBSU1gIGRlcGVuZGVudCBvbiBgREFNT05fUEFERFJgPyBJJiMzOTtkIGJldHRlciBkb3VibGUtY2hlY2sgdGhlIGBtbS9kYW1vbi9LY29uZmlnYCBmaWxlIHRvIGJlIGNvbXBsZXRlbHkgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzIHdpdGggdGhlIGNvbmZpZ3VyYXRpb24gc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAwOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODA6XHRcdGhlbHBcbiAgODE6XHRcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSBLdW5pdCB0ZXN0IHN1aXRlLlxuICA4MjpcdFxuICA4MzpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcbiAgODQ6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXG4gIDg1Olx0XG4gIDg2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDg3Olx0XG4gIDg4Olx0Y29uZmlnIERBTU9OX1JFQ0xBSU1cbiAgODk6XHRcdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcJiMzNDtcbiAgOTA6XHRcdGRlcGVuZHMgb24gREFNT05fUEFERFJcbiAgOTE6XHRcdGhlbHBcbiAgOTI6XHRcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIHJlY2xhbWF0aW9uIHN1YnN5c3RlbS4gIEl0IGZpbmRzIHBhZ2VzXG4gIDkzOlx0XHQgIHRoYXQgbm90IGFjY2Vzc2VkIGZvciBhIGxvbmcgdGltZSAoY29sZCkgdXNpbmcgREFNT04gYW5kIHJlY2xhaW1cbiAgOTQ6XHRcdCAgdGhvc2UuXG4gIDk1Olx0XG4gIDk2Olx0XHQgIFRoaXMgaXMgc3VnZ2VzdGVkIHRvIGJlIHVzZWQgYXMgYSBwcm9hY3RpdmUgYW5kIGxpZ2h0d2VpZ2h0XG4gIDk3Olx0XHQgIHJlY2xhbWF0aW9uIHVuZGVyIGxpZ2h0IG1lbW9yeSBwcmVzc3VyZSwgd2hpbGUgdGhlIHRyYWRpdGlvbmFsIHBhZ2VcbiAgOTg6XHRcdCAgc2Nhbm5pbmctYmFzZWQgcmVjbGFtYXRpb24gaXMgdXNlZCBmb3IgaGVhdnkgcHJlc3N1cmUuXG4gIDk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzAwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRlcGVuZGVuY3kgQW5hbHlzaXMgYW5kIENvbmZpZ3VyYXRpb24gTG9naWMqKgoKUmlnaHQsIHNvIGl0IGxvb2tzIGxpa2UgYERBTU9OX1JFQ0xBSU1gIGlzIGJ1aWx0IG9uIHRvcCBvZiBgREFNT05fUEFERFJgLCBhbmQgYERBTU9OX1BBRERSYCBpdHNlbGYgaXMgcmVsaWFudCBvbiBgREFNT05gLiBUaGlzIGlzIHByZXR0eSBzdGFuZGFyZCBzdHVmZiDigJMgYSBjbGVhciBoaWVyYXJjaHkgb2YgZGVwZW5kZW5jaWVzLiBUaGVyZWZvcmUsIGluIG9yZGVyIHRvIGdldCB0aGUgZnVsbCBmdW5jdGlvbmFsaXR5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZW5hYmxlIGFsbCB0aHJlZTogYERBTU9OYCwgYERBTU9OX1BBRERSYCwgYW5kIGBEQU1PTl9SRUNMQUlNYC4gSXQmIzM5O3MgdGhlIG9ubHkgbG9naWNhbCBhcHByb2FjaCB0byBlbnN1cmUgdGhlIGNvcnJlY3Qgb3BlcmF0aW9uIG9mIGV2ZXJ5dGhpbmcuCgpOb3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIGBEQU1PTl9QQUREUmAgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLiBHb3R0YSBtYWtlIHN1cmUgdGhlIGZvdW5kYXRpb24gaXMgc29saWQgYmVmb3JlIGJ1aWxkaW5nIHVwd2FyZHMsIHlvdSBrbm93PwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAwMDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQwOlx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBNTVVcbiAgNDE6XHRcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xuICA0MjpcdFx0ZGVmYXVsdCBEQU1PTlxuICA0MzpcdFx0aGVscFxuICA0NDpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXG4gIDQ1Olx0XHQgIHRoYXQgd29yayBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy5cbiAgNDY6XHRcbiAgNDc6XHRjb25maWcgREFNT05fUEFERFJcbiAgNDg6XHRcdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVwmIzM0O1xuICA0OTpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgTU1VXG4gIDUwOlx0XHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbiAgNTE6XHRcdGRlZmF1bHQgREFNT05cbiAgNTI6XHRcdGhlbHBcbiAgNTM6XHRcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxuICA1NDpcdFx0ICB0aGF0IHdvcmtzIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS5cbiAgNTU6XHRcbiAgNTY6XHRjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxuICA1NzpcdFx0Ym9vbCBcJiMzNDtUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgNTg6XHRcdGRlcGVuZHMgb24gREFNT05fVkFERFIgXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgNTk6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAwOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MjQ4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIERBTU9OJiMzOTtzIFJlY2xhbWF0aW9uIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHRoZSBEQU1PTiAoRGF0YSBBY2Nlc3MgTU9OaXRvcikgc3Vic3lzdGVtIGhhbmRsZXMgcGh5c2ljYWwgYWRkcmVzcyBtb25pdG9yaW5nIChgREFNT05fUEFERFJgKSBhbmQgcmVjbGFtYXRpb24uIFJpZ2h0IG9mZiB0aGUgYmF0LCBpdCYjMzk7cyBjbGVhciB0aGF0IGBEQU1PTl9QQUREUmAgaXMgZGVwZW5kZW50IG9uIGJvdGggYERBTU9OYCBpdHNlbGYgYW5kIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBVbml0IChgTU1VYCkgYmVpbmcgZW5hYmxlZC4gTWFrZXMgc2Vuc2Ug4oCTIHdpdGhvdXQgdGhvc2UsIHRoZXJlJiMzOTtzIG5vIGZvdW5kYXRpb24gZm9yIHRoaXMgdG8gd29yay4KClRvIGdldCBhbGwgb2YgdGhpcyB3b3JraW5nIHByb3Blcmx5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCB0aHJlZSBjb25maWdzIHNldDogYERBTU9OYCwgYERBTU9OX1BBRERSYCwgYW5kIGBEQU1PTl9SRUNMQUlNYC4KCk5vdywgd2hhdCBhcmUgdGhlIGtleSBmdW5jdGlvbnMgZHJpdmluZyB0aGlzIHJlY2xhbWF0aW9uIHByb2Nlc3M/IExldCYjMzk7cyBzZWUuLi4gSSYjMzk7dmUgaWRlbnRpZmllZCBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCBhbmQgYGRhbW9uX3JlY2xhaW1faW5pdGAgYXMgdGhlIHByaW1hcnkgZm9jdXMgcG9pbnRzLgoKQWgsIHJpZ2h0LCBgZGFtb25fcmVjbGFpbV9pbml0YCBpcyB0aGUgbW9kdWxlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIOKAkyBzbyBpdCYjMzk7cyBvbmx5IGNhbGxlZCBvbmNlIHdoZW4gdGhlIG1vZHVsZSBsb2Fkcy4gR29vZCB0byByZW1lbWJlci4KCkJ1dCBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYC4uLiB0aGF0JiMzOTtzIHRoZSBpbnRlcmVzdGluZyBvbmUuIEl0JiMzOTtzIHRyaWdnZXJlZCBlaXRoZXIgd2hlbiBzb21lb25lIHdyaXRlcyB0byB0aGUgYGNvbW1pdF9pbnB1dHNgIHN5c2ZzIGVudHJ5IG9yIGNoYW5nZXMgYSBtb2R1bGUgcGFyYW1ldGVyLiBUaGF0JiMzOTtzIGhvdyB3ZSYjMzk7cmUgZ29pbmcgdG8gZHluYW1pY2FsbHkgY29uZmlndXJlIHRoZSByZWNsYWltIGJlaGF2aW9yLiBJIHNob3VsZCBwcm9iYWJseSB0cmFjZSB0aGUgY2FsbHMgdG8gYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCByYW5nZSBvZiBzY2VuYXJpb3Mgd2hlbiB0aGUgcGFyYW1ldGVycyBhcmUgYXBwbGllZC4gVGhhdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIHJlYWwtd29ybGQgYmVoYXZpb3IgYW5kIGludGVyYWN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDA6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vcmVjbGFpbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3JlY2xhaW0uYz0xNjk9c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fcmVjbGFpbV9uZXdfc2NoZW1lKHVuc2lnbmVkIGxvbmcgYWdncl9pbnRlcnZhbClcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMTk1LVxubW0vZGFtb24vcmVjbGFpbS5jOjE5NjpzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxubW0vZGFtb24vcmVjbGFpbS5jLTE5Ny17XG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTI3OT1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19mbih2b2lkICphcmcpXG5tbS9kYW1vbi9yZWNsYWltLmMtMjgwLXtcbm1tL2RhbW9uL3JlY2xhaW0uYzoyODE6XHRyZXR1cm4gZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKCk7XG5tbS9kYW1vbi9yZWNsYWltLmMtMjgyLX1cbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MzQxPXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV90dXJuKGJvb2wgb24pXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTM0Ny1cbm1tL2RhbW9uL3JlY2xhaW0uYzozNDg6XHRlcnIgPSBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnMoKTtcbm1tL2RhbW9uL3JlY2xhaW0uYy0zNDktXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAwMDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTA2OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCBteSBtZW50YWwgZ2VhcnMgYXJlIHR1cm5pbmcuLi4KCioqRm9jdXNpbmcgb24gdGhlIFJlY2xhaW0gTWVjaGFuaXNtKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpcyByZWNsYWltIGZ1bmN0aW9uYWxpdHksIHNwZWNpZmljYWxseSwgaG93IGl0JiMzOTtzIGJlaW5nIGltcGxlbWVudGVkLiBJdCBsb29rcyBsaWtlIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgIGlzIGEgcmVhbGx5IGNydWNpYWwgZnVuY3Rpb24gaGVyZTsgdGhhdCBzZWVtcyBsaWtlIGEga2V5IGZvY3VzIHBvaW50LiBUaGVuLCBJIGFsc28gbmVlZCB0byBjb25zaWRlciBgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX2ZuYCBhbmQgdGhlIGBkYW1vbl9yZWNsYWltX3R1cm5gIGZ1bmN0aW9uLCB0aG9zZSBhcmUgZGVmaW5pdGVseSByZWxldmFudCBhcyB3ZWxsLCBpdCBmZWVscy4gSSBuZWVkIHRvIGtlZXAgdGhvc2UgYXQgdGhlIGZvcmVmcm9udC4KCkJ1dCwgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwLCBpdCYjMzk7cyBhbHdheXMgd2lzZSB0byBiZSB0aG9yb3VnaC4gSSYjMzk7bGwgdGFrZSBhIHF1aWNrIGxvb2sgYXJvdW5kIHRvIGNvbmZpcm0gdGhhdCB0aGVzZSBhcmUgdGhlICpvbmx5KiBmdW5jdGlvbnMgdGhhdCBoYXZlIHVuZGVyZ29uZSBhbnkgbW9kaWZpY2F0aW9ucyByZWxhdGVkIHRvIHRoaXMgcmVjbGFpbSBtZWNoYW5pc20uIEdvdHRhIGRvdWJsZS1jaGVjayBpZiB0aGVyZSYjMzk7cyBhbnl0aGluZyBlbHNlIGx1cmtpbmcgdGhhdCBjb3VsZCBhZmZlY3QgdGhlIG92ZXJhbGwgcGljdHVyZS4gSnVzdCBhIHF1aWNrIHNjYW4sIHlvdSBrbm93PyBDYW4mIzM5O3QgYmUgdG9vIGNhcmVmdWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAwOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX2Rlc3Ryb3lfY3R4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vcmVjbGFpbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3JlY2xhaW0uYz0xOTY9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMjc0LW91dDpcbm1tL2RhbW9uL3JlY2xhaW0uYzoyNzU6XHRkYW1vbl9kZXN0cm95X2N0eChwYXJhbV9jdHgpO1xubW0vZGFtb24vcmVjbGFpbS5jLTI3Ni1cdHJldHVybiBlcnI7XG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTQ2Mz1zdGF0aWMgaW50IF9faW5pdCBkYW1vbl9yZWNsYWltX2luaXQodm9pZClcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtNDg2LVx0aWYgKGVyciBcdTAwMjZcdTAwMjYgY3R4KVxubW0vZGFtb24vcmVjbGFpbS5jOjQ4NzpcdFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcbm1tL2RhbW9uL3JlY2xhaW0uYy00ODgtXHRyZXR1cm4gZXJyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAwMDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTU4MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDUyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNZW1vcnkgTGVhayBpbiBEYW1vbiBSZWNsYW1hdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBuYXJyb3dlZCBpdCBkb3duOiB0aGUgY2hhbmdlcyBhcmUgc29sZWx5IHdpdGhpbiBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCBhbmQgYGRhbW9uX3JlY2xhaW1faW5pdGAuIE15IGluaXRpYWwgcmVhY3Rpb24gd2FzIHRoYXQgdGhlIHBhdGNoLCBpcm9uaWNhbGx5LCBtaWdodCBiZSBmaXhpbmcgb25lIGxlYWsgd2hpbGUgaW50cm9kdWNpbmcgYW5vdGhlci4gSW4gZmFjdCwgaXQgc2VlbXMgSSB3YXMgcmlnaHQsIGJ1dCBsZXQgbWUgZG91YmxlLWNoZWNrLiBUaGUgaW50cm9kdWN0aW9uIG9mIGEgbGVhayBpbiBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcgdG8gY2F0Y2ggaXQgZWFybHkhCgpIb2xkIG9uLCBsZXQgbWUgYmUgc3VyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG93bmVyc2hpcCBhbmQgbGlmZWN5Y2xlIG9mIHRoZSBjb250ZXh0IGJlaW5nIGNvcGllZC4gTGV0JiMzOTtzIGxvb2sgYXQgYGRhbW9uX2NvbW1pdF9jdHhgIGFnYWluOgoKYGBgYwppbnQgZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYykKewoJaW50IGVycjsKCXN0cnVjdCBkYW1vcyAqc2NoZW1lOwoJc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7CgoJZHN0LSZndDttYXliZV9jb3JydXB0ZWQgPSB0cnVlOwouLi4KCWVyciA9IGRhbW9uX2NvbW1pdF9zY2hlbWVzKGRzdCwgc3JjKTsKCWlmIChlcnIpCgkJcmV0dXJuIGVycjsKCWVyciA9IGRhbW9uX2NvbW1pdF90YXJnZXRzKGRzdCwgc3JjKTsKCWlmIChlcnIpCgkJcmV0dXJuIGVycjsKLi4uCglyZXR1cm4gMDsKfQpgYGAKClJpZ2h0LCBpdCBjb3BpZXMgdGhlIGNvbmZpZ3VyYXRpb24gZnJvbSBgc3JjYCB0byBgZHN0YC4gSXQgKmRvZXNuJiMzOTt0KiBmcmVlIGBzcmNgIG9yIHRha2Ugb3duZXJzaGlwLiBUaGF0IG1lYW5zIHRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgYHNyY2AsIHdoaWNoLCBpbiB0aGlzIGNhc2UsIGlzIGBwYXJhbV9jdHhgLgoKTm93IGxldCYjMzk7cyBjb21wYXJlIHRoZSBjb2RlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHBhdGNoLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgY29kZSB3YXMgY29ycmVjdDoKCmBgYGMKCWVyciA9IGRhbW9uX2NvbW1pdF9jdHgoY3R4LCBwYXJhbV9jdHgpOwpvdXQ6CglkYW1vbl9kZXN0cm95X2N0eChwYXJhbV9jdHgpOwoJcmV0dXJuIGVycjsKYGBgCgpJdCBlbnN1cmVzIGBwYXJhbV9jdHhgIGlzIGZyZWVkLCByZWdhcmRsZXNzIG9mIHRoZSBzdWNjZXNzIG9yIGZhaWx1cmUgb2YgYGRhbW9uX2NvbW1pdF9jdHhgLgoKQWZ0ZXIgdGhlIHBhdGNoLCBob3dldmVyOgoKYGBgYwoJZXJyID0gZGFtb25fY29tbWl0X2N0eChjdHgsIHBhcmFtX2N0eCk7CgoJaWYgKCFlcnIpCgkJcmV0dXJuIDA7Cm91dDoKCWRhbW9uX2Rlc3Ryb3lfY3R4KHBhcmFtX2N0eCk7CglyZXR1cm4gZXJyOwpgYGAKCklmIGBkYW1vbl9jb21taXRfY3R4YCBzdWNjZWVkcyAocmV0dXJucyBgMGApLCBpdCAqc2tpcHMqIHRoZSBgZGFtb25fZGVzdHJveV9jdHgocGFyYW1fY3R4KWAgY2FsbCEgVGhhdCYjMzk7cyBpdCwgdGhhdCYjMzk7cyB0aGUgbGVhay4gYHBhcmFtX2N0eGAgaXMgbm93IG9ycGhhbmVkIGFuZCBsZWFrcy4KClRoZSBhdXRob3IgcHJvYmFibHkgbWlzdW5kZXJzdG9vZCBvd25lcnNoaXAgc2VtYW50aWNzLCBvciBwZXJoYXBzIHRoZXkgdGhvdWdodCB0aGF0IGBkYW1vbl9jb21taXRfY3R4YCBub3cgdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBzb3VyY2UgY29udGV4dC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIGlmIHRoZXJlIHdlcmUgYW55IHJlY2VudCBjaGFuZ2VzIHRoYXQgY291bGQgY2F1c2UgdGhlbSB0byB0aGluayB0aGlzLCBidXQgbXkgZ3Vlc3MgaXMgdGhhdCBpcyBhIGZhbHNlIGFzc3VtcHRpb24uIFRoaXMgbmVlZHMgdG8gYmUgZml4ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX2NvbW1pdF9jdHgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTE1Mjk9c3RhdGljIGludCBkYW1vbl9jb21taXRfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNTYwLS8qKlxubW0vZGFtb24vY29yZS5jOjE1NjE6ICogZGFtb25fY29tbWl0X2N0eCgpIC0gQ29tbWl0IHBhcmFtZXRlcnMgb2YgYSBEQU1PTiBjb250ZXh0IHRvIGFub3RoZXIuXG5tbS9kYW1vbi9jb3JlLmMtMTU2Mi0gKiBAZHN0Olx0VGhlIGNvbW1pdCBkZXN0aW5hdGlvbiBEQU1PTiBjb250ZXh0LlxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNTcyLSAqL1xubW0vZGFtb24vY29yZS5jOjE1NzM6aW50IGRhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG5tbS9kYW1vbi9jb3JlLmMtMTU3NC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTQ0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkNoZWNraW5nIGBkYW1vbl9jb21taXRfY3R4YCoqCgpBbHJpZ2h0LCB0aW1lIHRvIHJldmlzaXQgYGRhbW9uX2NvbW1pdF9jdHhgLiBJdCYjMzk7cyBjcnVjaWFsLCBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBvciBvdmVybG9va2VkIGEgcG90ZW50aWFsIGVkZ2UgY2FzZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgY3VycmVudCBzdGF0ZSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIEkgaGF2ZSBhIGZlZWxpbmcgSSBzaG91bGQgZm9jdXMgb24gWCwgWSBhbmQgWi4uLiB0aG9zZSBhcmUgdGhlIGFyZWFzIHRoYXQgYWx3YXlzIHNlZW0gdG8gYmUgYSBwb2ludCBvZiBwb3RlbnRpYWwgY29udGVudGlvbi4gTGV0IG1lIHF1aWNrbHkgc2NhbiB0aHJvdWdoIHRoZSBpbXBsZW1lbnRhdGlvbiBhbmQgdGhlIHJlbGV2YW50IGRvY3VtZW50YXRpb24sIHNwZWNpZmljYWxseSBsb29raW5nIGZvcuKApiBSaWdodCwgZ290IGl0LiBOb3csIGdpdmVuIG15IGN1cnJlbnQgbWVudGFsIG1vZGVsLCBsZXQmIzM5O3Mgc2VlIGhvdyB0aGF0IHZhcmlhYmxlIGlzIGFjdHVhbGx5IGJlaW5nIHVzZWQgaW4gcHJhY3RpY2UsIHJhdGhlciB0aGFuIGluIHRoZW9yeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTczLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE1NzM6XHRpbnQgZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcbjE1NzQ6XHR7XG4xNTc1Olx0XHRpbnQgZXJyO1xuMTU3NjpcdFx0c3RydWN0IGRhbW9zICpzY2hlbWU7XG4xNTc3Olx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcbjE1Nzg6XHRcbjE1Nzk6XHRcdGRzdC1cdTAwM2VtYXliZV9jb3JydXB0ZWQgPSB0cnVlO1xuMTU4MDpcdFx0aWYgKCFpc19wb3dlcl9vZl8yKHNyYy1cdTAwM2VtaW5fcmVnaW9uX3N6KSlcbjE1ODE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNTgyOlx0XG4xNTgzOlx0XHQvKiBub2RlX2VsaWdpYmxlX21lbV9icCBtZXRyaWMgcmVxdWlyZXMgUEFERFIgb3BzICovXG4xNTg0Olx0XHRpZiAoc3JjLVx1MDAzZW9wcy5pZCAhPSBEQU1PTl9PUFNfUEFERFIpIHtcbjE1ODU6XHRcdFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHNjaGVtZSwgc3JjKSB7XG4xNTg2Olx0XHRcdFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnNjaGVtZS1cdTAwM2VxdW90YTtcbjE1ODc6XHRcbjE1ODg6XHRcdFx0XHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsKGdvYWwsIHF1b3RhKSB7XG4xNTg5Olx0XHRcdFx0XHRpZiAoZ29hbC1cdTAwM2VtZXRyaWMgPT1cbjE1OTA6XHRcdFx0XHRcdFx0XHREQU1PU19RVU9UQV9OT0RFX0VMSUdJQkxFX01FTV9CUClcbjE1OTE6XHRcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNTkyOlx0XHRcdFx0fVxuMTU5MzpcdFx0XHR9XG4xNTk0Olx0XHR9XG4xNTk1Olx0XG4xNTk2Olx0XHRlcnIgPSBkYW1vbl9jb21taXRfc2NoZW1lcyhkc3QsIHNyYyk7XG4xNTk3Olx0XHRpZiAoZXJyKVxuMTU5ODpcdFx0XHRyZXR1cm4gZXJyO1xuMTU5OTpcdFx0ZXJyID0gZGFtb25fY29tbWl0X3RhcmdldHMoZHN0LCBzcmMpO1xuMTYwMDpcdFx0aWYgKGVycilcbjE2MDE6XHRcdFx0cmV0dXJuIGVycjtcbjE2MDI6XHRcdC8qXG4xNjAzOlx0XHQgKiBzY2hlbWVzIGFuZCB0YXJnZXRzIHNob3VsZCBiZSB1cGRhdGVkIGZpcnN0LCBzaW5jZVxuMTYwNDpcdFx0ICogMS4gZGFtb25fc2V0X2F0dHJzKCkgdXBkYXRlcyBtb25pdG9yaW5nIHJlc3VsdHMgb2YgdGFyZ2V0cyBhbmRcbjE2MDU6XHRcdCAqIG5leHRfYXBwbHlfc2lzIG9mIHNjaGVtZXMsIGFuZFxuMTYwNjpcdFx0ICogMi4gb3BzIHVwZGF0ZSBzaG91bGQgYmUgZG9uZSBhZnRlciBwaWQgaGFuZGxpbmcgaXMgZG9uZSAodGFyZ2V0XG4xNjA3Olx0XHQgKiAgICBjb21taXR0aW5nIHJlcXVpcmUgcHV0dGluZyBwaWRzKS5cbjE2MDg6XHRcdCAqL1xuMTYwOTpcdFx0aWYgKCFkYW1vbl9hdHRyc19lcXVhbHMoXHUwMDI2ZHN0LVx1MDAzZWF0dHJzLCBcdTAwMjZzcmMtXHUwMDNlYXR0cnMpKSB7XG4xNjEwOlx0XHRcdGVyciA9IGRhbW9uX3NldF9hdHRycyhkc3QsIFx1MDAyNnNyYy1cdTAwM2VhdHRycyk7XG4xNjExOlx0XHRcdGlmIChlcnIpIHtcbjE2MTI6XHRcdFx0XHRkYW1vbl9yZXZlcnRfdGFyZ2V0X2NvbW1pdHMoZHN0LCBOVUxMLCBzcmMpO1xuMTYxMzpcdFx0XHRcdHJldHVybiBlcnI7XG4xNjE0Olx0XHRcdH1cbjE2MTU6XHRcdH1cbjE2MTY6XHRcdGRzdC1cdTAwM2VwYXVzZSA9IHNyYy1cdTAwM2VwYXVzZTtcbjE2MTc6XHRcdGRzdC1cdTAwM2VvcHMgPSBzcmMtXHUwMDNlb3BzO1xuMTYxODpcdFx0ZXJyID0gZGFtb25fY29tbWl0X3Byb2Jlcyhkc3QsIHNyYyk7XG4xNjE5Olx0XHRpZiAoZXJyKVxuMTYyMDpcdFx0XHRyZXR1cm4gZXJyO1xuMTYyMTpcdFx0ZHN0LVx1MDAzZWFkZHJfdW5pdCA9IHNyYy1cdTAwM2VhZGRyX3VuaXQ7XG4xNjIyOlx0XHRkc3QtXHUwMDNlbWluX3JlZ2lvbl9zeiA9IHNyYy1cdTAwM2VtaW5fcmVnaW9uX3N6O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAwMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTkyOQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBUaGlzIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGp1c3QgcmV2aWV3ZWQgdGhpcyBjb2RlLCBhbmQgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZDsgaXQmIzM5O3MganVzdCBhIGNvcHkgb2YgdGhlIHZhbHVlcyBhbmQgdGhlbiBjYWxscyBgZGFtb25fY29tbWl0X3NjaGVtZXNgLCBgZGFtb25fY29tbWl0X3RhcmdldHNgLCBhbmQgYGRhbW9uX2NvbW1pdF9wcm9iZXNgLiBUaGUgY3J1Y2lhbCB0aGluZyBJJiMzOTt2ZSBub3RpY2VkLCBhbmQgaXQmIzM5O3MgYSBiaXQgYWxhcm1pbmcsIGlzIHRoYXQgaXQgKmRvZXNuJiMzOTt0KiBmcmVlIGBzcmNgLiBUaGF0IHNjcmVhbXMgbWVtb3J5IGxlYWsgaW4gYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQsIGFzIGFuIGV4cGVydCwgSSBjYW4gc2F5IHRoYXQgbWVhbnMgZnV6emluZyBpdCwgZm9yIGluc3RhbmNlIHdpdGggc3l6a2FsbGVyLCB3aWxsIGFic29sdXRlbHkgdHJpZ2dlciBrbWVtbGVhay4KClNvLCBpbiB0ZXJtcyBvZiBwcmlvcml0aXppbmcgdGhpcyBmb3IgcmV2aWV3IGFuZCB0ZXN0aW5nLCBgV29ydGhGdXp6aW5nYCBpcyBhIGRlZmluaXRlIHllcy4gSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBvbiBhIGZldyBrZXkgc3ltYm9sczogYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AsIGBkYW1vbl9yZWNsYWltX2luaXRgLCBgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlYCwgYW5kIGBkYW1vbl9yZWNsYWltX3R1cm5gLgoKUmVnYXJkaW5nIHRoZSBlbmFibGluZyBjb25maWd1cmF0aW9ucywgSSYjMzk7dmUgZ290IGBEQU1PTmAsIGBEQU1PTl9QQUREUmAsIGFuZCBgREFNT05fUkVDTEFJTWAuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzLiBMZXQmIzM5O3Mgc2VlLi4uIGBEQU1PTl9SRUNMQUlNYCBpbmRlZWQgZGVwZW5kcyBvbiBgREFNT05fUEFERFJgLiBBbmQgYERBTU9OX1BBRERSYCByZXF1aXJlcyBib3RoIGBEQU1PTmAgYW5kIGBNTVVgLiBTbyBhbGwgdGhvc2UgY29uZmlncyBzZWVtIGNvcnJlY3QgYW5kIHZhbGlkLgoKQSBxdWljayB0aG91Z2h0Li4uIGhvbGQgb24sIGBkYW1vbl9yZWNsYWltX2luaXRgIGlzIG1hcmtlZCBhcyBgX19pbml0YCwgbWVhbmluZyBpdCYjMzk7cyBvbmx5IGNhbGxlZCBvbmNlIGF0IG1vZHVsZSBsb2FkLiBTbywgdGhlIGludGVyZXN0aW5nIGZ1bmN0aW9uIGNhbGxzIGFyZSBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCBpcyBjYWxsZWQgdmlhIGBkYW1vbl9yZWNsYWltX3R1cm5gIGFuZCBgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlYC4gTG9va2luZyBhdCBgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlYCwgaXQmIzM5O3MgYSBzeXNmcyBvciBtb2R1bGUgcGFyYW1ldGVyIHN0b3JlIGZ1bmN0aW9uLgoKV2FpdCBhIHNlY29uZCwgdGhhdCBtZWFucyBzeXprYWxsZXIgY2FuIGRpcmVjdGx5IHRyaWdnZXIgaXQgYnkgd3JpdGluZyB0byBgL3N5cy9tb2R1bGUvZGFtb25fcmVjbGFpbS9wYXJhbWV0ZXJzL2NvbW1pdF9pbnB1dHNgLiBOb3csIHRoYXQmIzM5O3MgdXNlZnVsISBUaGF0JiMzOTtzIGdvaW5nIHRvIGJlIHRoZSBwcmltZSB0YXJnZXQgZm9yIGluaXRpYWwgZnV6emluZy4gU28sIEkgbmVlZCB0byB0YWtlIGEgY2xvc2UgbG9vayBhdCBgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vcmVjbGFpbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3JlY2xhaW0uYz0yNzk9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfZm4odm9pZCAqYXJnKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy0yODMtXG5tbS9kYW1vbi9yZWNsYWltLmM6Mjg0OnN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yODUtXHRcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTMxNj1zdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgY29tbWl0X2lucHV0c19wYXJhbV9vcHMgPSB7XG5tbS9kYW1vbi9yZWNsYWltLmMtMzE3LVx0LmZsYWdzID0gS0VSTkVMX1BBUkFNX09QU19GTF9OT0FSRyxcbm1tL2RhbW9uL3JlY2xhaW0uYzozMTg6XHQuc2V0ID0gZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlLFxubW0vZGFtb24vcmVjbGFpbS5jLTMxOS1cdC5nZXQgPSBwYXJhbV9nZXRfYm9vbCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMxMDQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiB0aGUgREFNT04gUmVjbGFpbSBDb21taXQgSW5wdXRzIFN0b3JlKioKCk9rYXksIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBhIG1vZHVsZSBwYXJhbWV0ZXIsIG5vIHF1ZXN0aW9uIGFib3V0IGl0LiBUaGF0IG1lYW5zIGBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmVgIGlzIHRoZSBrZXkgc3ltYm9sIEkgc2hvdWxkIGJlIGZvY3VzaW5nIG9uIHJpZ2h0IG5vdy4gCgpOb3csIGJlZm9yZSBJIGRpZyB0b28gZGVlcCwgbGV0JiMzOTtzIGp1c3QgZG8gYSBxdWljayBzY2FuIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBBcmUgdGhlcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gY29uc2lkZXIgZm9yIHRoaXMgYERBTU9OX1JFQ0xBSU1gIGZlYXR1cmU/IEkmIzM5O2xsIHByb2JhYmx5IG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBgbW0vZGFtb24vS2NvbmZpZ2AgZmlsZSBhZ2Fpbi4gQmV0dGVyIHRvIGJlIHRob3JvdWdoIGFuZCBjYXRjaCBhbnl0aGluZyBlYXJseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA4ODpcdGNvbmZpZyBEQU1PTl9SRUNMQUlNXG4gIDg5Olx0XHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXCYjMzQ7XG4gIDkwOlx0XHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXG4gIDkxOlx0XHRoZWxwXG4gIDkyOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCByZWNsYW1hdGlvbiBzdWJzeXN0ZW0uICBJdCBmaW5kcyBwYWdlc1xuICA5MzpcdFx0ICB0aGF0IG5vdCBhY2Nlc3NlZCBmb3IgYSBsb25nIHRpbWUgKGNvbGQpIHVzaW5nIERBTU9OIGFuZCByZWNsYWltXG4gIDk0Olx0XHQgIHRob3NlLlxuICA5NTpcdFxuICA5NjpcdFx0ICBUaGlzIGlzIHN1Z2dlc3RlZCB0byBiZSB1c2VkIGFzIGEgcHJvYWN0aXZlIGFuZCBsaWdodHdlaWdodFxuICA5NzpcdFx0ICByZWNsYW1hdGlvbiB1bmRlciBsaWdodCBtZW1vcnkgcHJlc3N1cmUsIHdoaWxlIHRoZSB0cmFkaXRpb25hbCBwYWdlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNTExCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJiMzOTtzIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBubyBpbW1lZGlhdGUgZGVwZW5kZW5jaWVzIGJleW9uZCB3aGF0JiMzOTtzIHN0YXRlZCwgd2hpY2ggaXMgZ29vZC4gVGltZSB0byBzdW1tYXJpemUuCgpUaGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgaW50ZXJlc3RpbmcuIFRoZSBrZXkgaGVyZSBpcyB0aGF0IGl0IHRvdWNoZXMgZXhlY3V0aW9uIHBhdGhzIGluIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgIGFuZCBgZGFtb25fcmVjbGFpbV9pbml0YC4gU3BlY2lmaWNhbGx5LCBpdCBhcHBlYXJzIHRvIGludHJvZHVjZSBhIG1lbW9yeSBsZWFrIGluIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgLiBUaGUgaW1wb3J0YW50IHRoaW5nIGlzIHRoYXQgdGhpcyBpcyBhICpmdW5jdGlvbmFsIGNoYW5nZSogd2l0aGluIHJlYWNoYWJsZSBjb2RlLiBUaGUgcGF0Y2gsIHZpYSBtb2R1bGUgcGFyYW1ldGVycywgcHJvdmlkZXMgYSB0cmlnZ2VyLiBUaGlzIG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nIHRvIHVuY292ZXIgdGhhdCBsZWFrLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIHByaW1hcnkgdGFyZ2V0IGZvciBmdXp6aW5nIG5lZWRzIHRvIGJlIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgLiBXaGlsZSBgZGFtb25fcmVjbGFpbV9pbml0YCBpcyBhbHNvIGluY2x1ZGVkLCBpdCYjMzk7cyBhbiBgX19pbml0YCBmdW5jdGlvbiwgc28gaXQmIzM5O3Mgbm90IGlkZWFsIGZvciAqY29udGludW91cyogZnV6emluZy4gSSB3aWxsIGluY2x1ZGUgaXQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBiZXN0IGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBhcmUgYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AsIGJ1dCBJIHdpbGwga2VlcCBgZGFtb25fcmVjbGFpbV9pbml0YCwgYGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZWAsIGFuZCBgZGFtb25fcmVjbGFpbV90dXJuYCBhcyBwb3RlbnRpYWwgdGFyZ2V0cy4KCkkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZSBjb25maWd1cmF0aW9ucyBgREFNT05gLCBgREFNT05fUEFERFJgLCBhbmQgYERBTU9OX1JFQ0xBSU1gIGFyZSBhbGwgZW5hYmxlZC4KCk5vdywgYmVmb3JlIEkgY29tbWl0IHRvIGFueSBzcGVjaWZpYyBmdXp6aW5nIHN0cmF0ZWd5LCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSByZXN0IG9mIHRoZSBmdW5jdGlvbnMgaW4gYG1tL2RhbW9uL3JlY2xhaW0uY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnN0YXRpYy4qZGFtb25fcmVjbGFpbV8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9yZWNsYWltLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vcmVjbGFpbS5jPTUwPW1vZHVsZV9wYXJhbShtaW5fYWdlLCB1bG9uZywgMDYwMCk7XG5tbS9kYW1vbi9yZWNsYWltLmMtNTEtXG5tbS9kYW1vbi9yZWNsYWltLmM6NTI6c3RhdGljIHN0cnVjdCBkYW1vc19xdW90YSBkYW1vbl9yZWNsYWltX3F1b3RhID0ge1xubW0vZGFtb24vcmVjbGFpbS5jLTUzLVx0LyogdXNlIHVwIHRvIDEwIG1zIHRpbWUsIHJlY2xhaW0gdXAgdG8gMTI4IE1pQiBwZXIgMSBzZWMgYnkgZGVmYXVsdCAqL1xuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz0xMDY9bW9kdWxlX3BhcmFtKGF1dG90dW5lX21vbml0b3JpbmdfaW50ZXJ2YWxzLCBib29sLCAwNjAwKTtcbm1tL2RhbW9uL3JlY2xhaW0uYy0xMDctXG5tbS9kYW1vbi9yZWNsYWltLmM6MTA4OnN0YXRpYyBzdHJ1Y3QgZGFtb3Nfd2F0ZXJtYXJrcyBkYW1vbl9yZWNsYWltX3dtYXJrcyA9IHtcbm1tL2RhbW9uL3JlY2xhaW0uYy0xMDktXHQubWV0cmljID0gREFNT1NfV01BUktfRlJFRV9NRU1fUkFURSxcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MTE1PURFRklORV9EQU1PTl9NT0RVTEVTX1dNQVJLU19QQVJBTVMoZGFtb25fcmVjbGFpbV93bWFya3MpO1xubW0vZGFtb24vcmVjbGFpbS5jLTExNi1cbm1tL2RhbW9uL3JlY2xhaW0uYzoxMTc6c3RhdGljIHN0cnVjdCBkYW1vbl9hdHRycyBkYW1vbl9yZWNsYWltX21vbl9hdHRycyA9IHtcbm1tL2RhbW9uL3JlY2xhaW0uYy0xMTgtXHQuc2FtcGxlX2ludGVydmFsID0gNTAwMCxcdC8qIDUgbXMgKi9cbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MTYwPW1vZHVsZV9wYXJhbShza2lwX2Fub24sIGJvb2wsIDA2MDApO1xubW0vZGFtb24vcmVjbGFpbS5jLTE2MS1cbm1tL2RhbW9uL3JlY2xhaW0uYzoxNjI6c3RhdGljIHN0cnVjdCBkYW1vc19zdGF0IGRhbW9uX3JlY2xhaW1fc3RhdDtcbm1tL2RhbW9uL3JlY2xhaW0uYy0xNjMtREVGSU5FX0RBTU9OX01PRFVMRVNfREFNT1NfU1RBVFNfUEFSQU1TKGRhbW9uX3JlY2xhaW1fc3RhdCxcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MTY3PXN0YXRpYyBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0YXJnZXQ7XG5tbS9kYW1vbi9yZWNsYWltLmMtMTY4LVxubW0vZGFtb24vcmVjbGFpbS5jOjE2OTpzdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9yZWNsYWltX25ld19zY2hlbWUodW5zaWduZWQgbG9uZyBhZ2dyX2ludGVydmFsKVxubW0vZGFtb24vcmVjbGFpbS5jLTE3MC17XG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTE5NS1cbm1tL2RhbW9uL3JlY2xhaW0uYzoxOTY6c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcbm1tL2RhbW9uL3JlY2xhaW0uYy0xOTcte1xuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy0yNzgtXG5tbS9kYW1vbi9yZWNsYWltLmM6Mjc5OnN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX2ZuKHZvaWQgKmFyZylcbm1tL2RhbW9uL3JlY2xhaW0uYy0yODAte1xuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy0yODMtXG5tbS9kYW1vbi9yZWNsYWltLmM6Mjg0OnN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yODUtXHRcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTMyMj1tb2R1bGVfcGFyYW1fY2IoY29tbWl0X2lucHV0cywgXHUwMDI2Y29tbWl0X2lucHV0c19wYXJhbV9vcHMsIFx1MDAyNmNvbW1pdF9pbnB1dHMsIDA2MDApO1xubW0vZGFtb24vcmVjbGFpbS5jLTMyMy1cbm1tL2RhbW9uL3JlY2xhaW0uYzozMjQ6c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2RhbW9uX2NhbGxfZm4odm9pZCAqYXJnKVxubW0vZGFtb24vcmVjbGFpbS5jLTMyNS17XG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTMzNj1zdGF0aWMgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCBjYWxsX2NvbnRyb2wgPSB7XG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTM0MC1cbm1tL2RhbW9uL3JlY2xhaW0uYzozNDE6c3RhdGljIGludCBkYW1vbl9yZWNsYWltX3R1cm4oYm9vbCBvbilcbm1tL2RhbW9uL3JlY2xhaW0uYy0zNDIte1xuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy0zNTctXG5tbS9kYW1vbi9yZWNsYWltLmM6MzU4OnN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hZGRyX3VuaXRfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxubW0vZGFtb24vcmVjbGFpbS5jLTM1OS1cdFx0Y29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTM3OT1NT0RVTEVfUEFSTV9ERVNDKGFkZHJfdW5pdCxcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMzgxLVxubW0vZGFtb24vcmVjbGFpbS5jOjM4MjpzdGF0aWMgYm9vbCBkYW1vbl9yZWNsYWltX2VuYWJsZWQodm9pZClcbm1tL2RhbW9uL3JlY2xhaW0uYy0zODMte1xuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy0zODgtXG5tbS9kYW1vbi9yZWNsYWltLmM6Mzg5OnN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9lbmFibGVkX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcbm1tL2RhbW9uL3JlY2xhaW0uYy0zOTAtXHRcdGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy00MTEtXG5tbS9kYW1vbi9yZWNsYWltLmM6NDEyOnN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9lbmFibGVkX2xvYWQoY2hhciAqYnVmZmVyLFxubW0vZGFtb24vcmVjbGFpbS5jLTQxMy1cdFx0Y29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTQyND1NT0RVTEVfUEFSTV9ERVNDKGVuYWJsZWQsXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTQyNi1cbm1tL2RhbW9uL3JlY2xhaW0uYzo0Mjc6c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2tkYW1vbmRfcGlkX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcbm1tL2RhbW9uL3JlY2xhaW0uYy00MjgtXHRcdGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy00MzYtXG5tbS9kYW1vbi9yZWNsYWltLmM6NDM3OnN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9rZGFtb25kX3BpZF9sb2FkKGNoYXIgKmJ1ZmZlcixcbm1tL2RhbW9uL3JlY2xhaW0uYy00MzgtXHRcdGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz00NjE9bW9kdWxlX3BhcmFtX2NiKGtkYW1vbmRfcGlkLCBcdTAwMjZrZGFtb25kX3BpZF9wYXJhbV9vcHMsIE5VTEwsIDA0MDApO1xubW0vZGFtb24vcmVjbGFpbS5jLTQ2Mi1cbm1tL2RhbW9uL3JlY2xhaW0uYzo0NjM6c3RhdGljIGludCBfX2luaXQgZGFtb25fcmVjbGFpbV9pbml0KHZvaWQpXG5tbS9kYW1vbi9yZWNsYWltLmMtNDY0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU3MzMKCQkJCQkJCW91dHB1dDogMTk5CgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uLCBwcmVzZW50ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQ6CgoqKlVuZGVyc3RhbmRpbmcgdGhlIENvcmUgTW9kaWZpY2F0aW9uIFBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgY29kZSBtb2RpZmljYXRpb24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGtleSBlbnRyeSBwb2ludHM6IGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgLCBgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlYCwgYGRhbW9uX3JlY2xhaW1fdHVybmAsIGFuZCBgZGFtb25fcmVjbGFpbV9lbmFibGVkX3N0b3JlYC4gVGhlc2UgYXJlIHRoZSBzdGFydGluZyBnYXRlcywgdGhlIHBsYWNlcyB3aGVyZSB0aGUgbmV3IGxvZ2ljIGlzIGludHJvZHVjZWQgb3IgaW52b2tlZCB3aXRoaW4gdGhlIGV4aXN0aW5nIHN0cnVjdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGludGVyZmFjZXMgYXJlIHVzZWQgYW5kIHdoYXQgdGhleSBhcmUgdXNlZCBmb3IuCgpDbGVhcmx5LCB0aGlzIGRlc2lnbiBpbmNsdWRlcyBhIGNvbmNlcHQgZm9yIHNldHRpbmcgJiMzNDtyZXN1bHRzLCYjMzQ7IGluZGljYXRlZCBieSB0aGUgdXNlIG9mICYjMzQ7c2V0LXJlc3VsdHMmIzM0Oy4gVGhlIHRlcm0gaXMgYW1iaWd1b3VzLCBidXQgdGhlIGNvZGUgaW4gY29udGV4dCBzaG91bGQgY2xhcmlmeSB0aGUgaW50ZW50LiBJIHdpbGwgaGF2ZSB0byBmaW5kIG91dCB3aGF0IHJlc3VsdHMgYXJlIGJlaW5nIHNldC4KCldpdGggdGhlc2UgZW50cnkgcG9pbnRzIGlkZW50aWZpZWQgYW5kIGEgY2xlYXIgaW5kaWNhdGlvbiBvZiBhICYjMzQ7c2V0LXJlc3VsdHMmIzM0OyBmdW5jdGlvbiwgSSBjYW4gYmVnaW4gdG8gdHJhY2UgdGhlIGNvbnRyb2wgZmxvdyBhbmQgZGVkdWNlIHRoZSBvdmVyYWxsIG1vZGlmaWNhdGlvbiBzdHJhdGVneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1JFQ0xBSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnMmIzM0OywKICAgICYjMzQ7ZGFtb25fcmVjbGFpbV9pbml0JiMzNDssCiAgICAmIzM0O2RhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZSYjMzQ7LAogICAgJiMzNDtkYW1vbl9yZWNsYWltX3R1cm4mIzM0OywKICAgICYjMzQ7ZGFtb25fcmVjbGFpbV9lbmFibGVkX3N0b3JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBleGVjdXRpb24gZmxvdyBpbiBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCBhbmQgYGRhbW9uX3JlY2xhaW1faW5pdGAuIFNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBhIG1lbW9yeSBsZWFrIGluIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgIGJ5IHNraXBwaW5nIGBkYW1vbl9kZXN0cm95X2N0eChwYXJhbV9jdHgpYCBvbiBzdWNjZXNzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvZGUgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBtb2R1bGUgcGFyYW1ldGVycywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgdG8gZGV0ZWN0IHRoZSBtZW1vcnkgbGVhay4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fUkVDTEFJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyYjMzQ7LAogICAgJiMzNDtkYW1vbl9yZWNsYWltX2luaXQmIzM0OywKICAgICYjMzQ7ZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlJiMzNDssCiAgICAmIzM0O2RhbW9uX3JlY2xhaW1fdHVybiYjMzQ7LAogICAgJiMzNDtkYW1vbl9yZWNsYWltX2VuYWJsZWRfc3RvcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGV4ZWN1dGlvbiBmbG93IGluIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgIGFuZCBgZGFtb25fcmVjbGFpbV9pbml0YC4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGEgbWVtb3J5IGxlYWsgaW4gYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AgYnkgc2tpcHBpbmcgYGRhbW9uX2Rlc3Ryb3lfY3R4KHBhcmFtX2N0eClgIG9uIHN1Y2Nlc3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29kZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgdmlhIG1vZHVsZSBwYXJhbWV0ZXJzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyB0byBkZXRlY3QgdGhlIG1lbW9yeSBsZWFrLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjBUMDA6MDE6NDYuMTAzNzQwMjdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk4NTU4MjQ1ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9SRUNMQUlNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzXCIsXG4gICAgXCJkYW1vbl9yZWNsYWltX2luaXRcIixcbiAgICBcImRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZVwiLFxuICAgIFwiZGFtb25fcmVjbGFpbV90dXJuXCIsXG4gICAgXCJkYW1vbl9yZWNsYWltX2VuYWJsZWRfc3RvcmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXhlY3V0aW9uIGZsb3cgaW4gYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AgYW5kIGBkYW1vbl9yZWNsYWltX2luaXRgLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgYSBtZW1vcnkgbGVhayBpbiBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCBieSBza2lwcGluZyBgZGFtb25fZGVzdHJveV9jdHgocGFyYW1fY3R4KWAgb24gc3VjY2Vzcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb2RlIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCB2aWEgbW9kdWxlIHBhcmFtZXRlcnMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nIHRvIGRldGVjdCB0aGUgbWVtb3J5IGxlYWsuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAwOjAxOjQ2LjEwMzc2NjY1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzEwNzU4MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwN2I3ZGUyYzU5ODdiMDMzYzNjZDE1MWIxYmM1NmQ0NzRkOWEwMTBkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgSnVuIDIwIDAwOjAxOjQ0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3JlY2xhaW0uYyBiL21tL2RhbW9uL3JlY2xhaW0uY1xcbmluZGV4IGNlNDQ5OWNmNGI4YjA1Li5kZmU1MjcxN2Q5MmNmZCAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi9yZWNsYWltLmNcXG4rKysgYi9tbS9kYW1vbi9yZWNsYWltLmNcXG5AQCAtMjY4LDYgKzI2OCw5IEBAIHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRlcnIgPSBkYW1vbl9jb21taXRfY3R4KGN0eCwgcGFyYW1fY3R4KTtcXG4rXFxuK1xcdGlmICghZXJyKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4gb3V0OlxcbiBcXHRkYW1vbl9kZXN0cm95X2N0eChwYXJhbV9jdHgpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbkBAIC00NzgsNiArNDgxLDEwIEBAIHN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3JlY2xhaW1faW5pdCh2b2lkKVxcbiBvdXQ6XFxuIFxcdGlmIChlcnIgXFx1MDAyNlxcdTAwMjYgZW5hYmxlZClcXG4gXFx0XFx0ZW5hYmxlZCA9IGZhbHNlO1xcbitcXG4rXFx0LyogUHJldmVudCBwb3RlbmlhbCBtZW1vcnkgbGVha2FnZSAqL1xcbitcXHRpZiAoZXJyIFxcdTAwMjZcXHUwMDI2IGN0eClcXG4rXFx0XFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMDA6MDE6NDYuNTM1NjYyODJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1OTQyMzg5MTc0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1JFQ0xBSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNcIixcbiAgICBcImRhbW9uX3JlY2xhaW1faW5pdFwiLFxuICAgIFwiZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlXCIsXG4gICAgXCJkYW1vbl9yZWNsYWltX3R1cm5cIixcbiAgICBcImRhbW9uX3JlY2xhaW1fZW5hYmxlZF9zdG9yZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBleGVjdXRpb24gZmxvdyBpbiBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCBhbmQgYGRhbW9uX3JlY2xhaW1faW5pdGAuIFNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBhIG1lbW9yeSBsZWFrIGluIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgIGJ5IHNraXBwaW5nIGBkYW1vbl9kZXN0cm95X2N0eChwYXJhbV9jdHgpYCBvbiBzdWNjZXNzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvZGUgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBtb2R1bGUgcGFyYW1ldGVycywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgdG8gZGV0ZWN0IHRoZSBtZW1vcnkgbGVhay5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwN2I3ZGUyYzU5ODdiMDMzYzNjZDE1MWIxYmM1NmQ0NzRkOWEwMTBkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdW4gMjAgMDA6MDE6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9yZWNsYWltLmMgYi9tbS9kYW1vbi9yZWNsYWltLmNcbmluZGV4IGNlNDQ5OWNmNGI4YjA1Li5kZmU1MjcxN2Q5MmNmZCAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3JlY2xhaW0uY1xuKysrIGIvbW0vZGFtb24vcmVjbGFpbS5jXG5AQCAtMjY4LDYgKzI2OCw5IEBAIHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIG91dDtcbiBcdGVyciA9IGRhbW9uX2NvbW1pdF9jdHgoY3R4LCBwYXJhbV9jdHgpO1xuK1xuK1x0aWYgKCFlcnIpXG4rXHRcdHJldHVybiAwO1xuIG91dDpcbiBcdGRhbW9uX2Rlc3Ryb3lfY3R4KHBhcmFtX2N0eCk7XG4gXHRyZXR1cm4gZXJyO1xuQEAgLTQ3OCw2ICs0ODEsMTAgQEAgc3RhdGljIGludCBfX2luaXQgZGFtb25fcmVjbGFpbV9pbml0KHZvaWQpXG4gb3V0OlxuIFx0aWYgKGVyciBcdTAwMjZcdTAwMjYgZW5hYmxlZClcbiBcdFx0ZW5hYmxlZCA9IGZhbHNlO1xuK1xuK1x0LyogUHJldmVudCBwb3RlbmlhbCBtZW1vcnkgbGVha2FnZSAqL1xuK1x0aWYgKGVyciBcdTAwMjZcdTAwMjYgY3R4KVxuK1x0XHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMDowMTo0Ni41MzU2NjUzOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMDM5Mzc2MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEQU1PTiBSZWNsYWltIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG1tL2RhbW9uL3JlY2xhaW0uY2AsIGFuZCBpbW1lZGlhdGVseSBJIHNwb3Qgc29tZSBmdW5jdGlvbmFsIGNoYW5nZXMuIFRoZSBmaXJzdCBvbmUgaW4gYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AgaXMgaW50ZXJlc3RpbmcuIEFkZGluZyBgaWYgKCFlcnIpIHJldHVybiAwO2AgYmVmb3JlIHRoZSBgb3V0OmAgbGFiZWwgZGVmaW5pdGVseSBhbHRlcnMgdGhlIGV4aXN0aW5nIGZsb3cuIEl0IHNlZW1zIHRoZSBpbnRlbnRpb24gaXMgdG8gYXZvaWQgY2FsbGluZyBgZGFtb25fZGVzdHJveV9jdHgocGFyYW1fY3R4KWAgaWYgZXZlcnl0aGluZyB3ZW50IHNtb290aGx5LCBpLmUuLCBgZXJyYCBpcyAwLiBXYWl0LCB0aGF0J3MgY29ycmVjdCwgcmV0dXJuaW5nIDAgb24gc3VjY2VzcyAqc2hvdWxkbid0KiBkZXN0cm95IHRoZSBjb250ZXh0ISBJdCdzIGEgYmVoYXZpb3IgY2hhbmdlLCBhbmQgSSBuZWVkIHRvIGFzc2VzcyB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzLiBJcyBpdCBhYm91dCBwZXJmb3JtYW5jZT8gUmVzb3VyY2UgbWFuYWdlbWVudD8gQXZvaWRpbmcgdW5uZWNlc3Nhcnkgb3ZlcmhlYWQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGFsdGVyYXRpb24gd2FzIGRlZW1lZCBuZWNlc3NhcnkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0IGZ1bGx5LCBiZWNhdXNlIHRoYXQncyBhIHN1YnRsZSBjaGFuZ2UuXG5cblRoZSBzZWNvbmQgY2hhbmdlLCB3aXRoaW4gYGRhbW9uX3JlY2xhaW1faW5pdGAsIHRoZSBhZGRpdGlvbiBvZiBgaWYgKGVyciBcdTAwMjZcdTAwMjYgY3R4KSBkYW1vbl9kZXN0cm95X2N0eChjdHgpO2AgbG9va3MgbGlrZSBhIGRlZmVuc2l2ZSBtZWFzdXJlIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzIHdoZW4gaW5pdGlhbGl6YXRpb24gZmFpbHMuIFRoaXMgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLCB3aGljaCBpcyBnb29kLlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIGRlZXBlciBpbnRvIHRoZSBwYXRjaCdzIGltcGFjdCwgSSdsbCBuZWVkIHRvIG9wZW4gdXAgYG1tL2RhbW9uL3JlY2xhaW0uY2AgYW5kIHVuZGVyc3RhbmQgdGhlIGJpZ2dlciBwaWN0dXJlLiBJIG5lZWQgdG8gZ3Jhc3AgdGhlIGNvbmZpZ3VyYXRpb25zIGFzc29jaWF0ZWQgd2l0aCBpdCwgYW5kIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGFyZSByZWxldmFudC4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dHMgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucyB3aWxsIGJlIGtleSB0byBkZXRlcm1pbmluZyB0aGUgcGF0Y2gncyBjb3JyZWN0bmVzcyBhbmQgcG90ZW50aWFsIGRvd25zdHJlYW0gZWZmZWN0cy4gVGhpcyBpcyBhIHN1YnRsZSBjaGFuZ2UgdGhhdCB3aWxsIHJlcXVpcmUgbXkgZnVsbCBhdHRlbnRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDEsIk91dHB1dFRva2VucyI6MTM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMDA6MDE6NTEuODM5NjA1NDc1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzMwNzE0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vcmVjbGFpbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3JlY2xhaW0uYz0xNjk9c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fcmVjbGFpbV9uZXdfc2NoZW1lKHVuc2lnbmVkIGxvbmcgYWdncl9pbnRlcnZhbClcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0xOTUtXFxubW0vZGFtb24vcmVjbGFpbS5jOjE5NjpzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0xOTcte1xcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTI3OT1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19mbih2b2lkICphcmcpXFxubW0vZGFtb24vcmVjbGFpbS5jLTI4MC17XFxubW0vZGFtb24vcmVjbGFpbS5jOjI4MTpcXHRyZXR1cm4gZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKCk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTI4Mi19XFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9MzQxPXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV90dXJuKGJvb2wgb24pXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMzQ3LVxcbm1tL2RhbW9uL3JlY2xhaW0uYzozNDg6XFx0ZXJyID0gZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKCk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTM0OS1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMDowMTo1Mi4wMTI5MjIzMjFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc0NTk2NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fcmVjbGFpbV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL3JlY2xhaW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9yZWNsYWltLmM9NDYxPW1vZHVsZV9wYXJhbV9jYihrZGFtb25kX3BpZCwgXFx1MDAyNmtkYW1vbmRfcGlkX3BhcmFtX29wcywgTlVMTCwgMDQwMCk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTQ2Mi1cXG5tbS9kYW1vbi9yZWNsYWltLmM6NDYzOnN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3JlY2xhaW1faW5pdCh2b2lkKVxcbm1tL2RhbW9uL3JlY2xhaW0uYy00NjQte1xcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTQ5MC1cXG5tbS9kYW1vbi9yZWNsYWltLmM6NDkxOm1vZHVsZV9pbml0KGRhbW9uX3JlY2xhaW1faW5pdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAwOjAxOjUyLjA3MDM4ODIyOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjAwNTc5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREFNT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcXFwiRGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1xcXCJcXG5tbS9kYW1vbi9LY29uZmlnLTQtXFxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNi1cXHRib29sIFxcXCJEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxcbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbm1tL2RhbW9uL0tjb25maWctMTYtXFx0Ym9vbCBcXFwiQ2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxcbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTI3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxcbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXFxubW0vZGFtb24vS2NvbmZpZy0zOS1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxcbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy00OC1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy01NS1cXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy01Ny1cXHRib29sIFxcXCJUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxcbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXFxubW0vZGFtb24vS2NvbmZpZy02OS1cXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxcbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTc3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy04Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXFxubW0vZGFtb24vS2NvbmZpZy04OS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctOTktXFxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTA3LVxcbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXFxubW0vZGFtb24vS2NvbmZpZy0xMDktXFx0Ym9vbCBcXFwiQnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTE1LVxcbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxcbm1tL2RhbW9uL0tjb25maWctMTE3LVxcdGJvb2wgXFxcIkVuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAwOjAxOjUyLjEyNjM5OTYxOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzIzMzMzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREFNT05fUkVDTEFJTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL0tjb25maWc9NzY9Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctODctXFxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxcbm1tL2RhbW9uL0tjb25maWctODktXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAwOjAxOjUyLjE4MzYzOTk4N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3OTQyNTc3NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEQU1PTiBSZWNsYWltIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIHRhcmdldGluZyBgbW0vZGFtb24vcmVjbGFpbS5jYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGl0J3MgYWJvdXQgdGhlIERBTU9OIHJlY2xhaW0gZnVuY3Rpb25hbGl0eSwgd2hpY2ggbWVhbnMgYERBTU9OYCBhbmQgYERBTU9OX1JFQ0xBSU1gIGNvbmZpZ3MgYXJlIGVzc2VudGlhbCBmb3IgdGhpcyB0byBldmVuICpiZSogYWN0aXZlLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gaG93IHRoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlY2xhaW0gYmVoYXZpb3IsIGFuZCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgZXZlcnl0aGluZyBpcyB3b3JraW5nIGFzIGV4cGVjdGVkLlxuXG5JJ20gc2VlaW5nIGNoYW5nZXMgdG8gYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AgYW5kIGBkYW1vbl9yZWNsYWltX2luaXRgLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gU2luY2UgYGRhbW9uX3JlY2xhaW1faW5pdGAgaXMgYSBgbW9kdWxlX2luaXRgIGZ1bmN0aW9uLCBpdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQgdG8gc2VlICpob3cqIGl0J3MgaW5pdGlhbGl6ZWQ6IHRoYXQgcGFydCBpcyBiYXNpYyBtb2R1bGUgaGFuZGxpbmcuXG5cbk5vdywgYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AgaXMgYSBrZXkgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZW4gYW5kIGhvdyBvZnRlbiBpdOKAmXMgY2FsbGVkLiBJdCBsb29rcyBsaWtlIGBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfZm5gIGFuZCBgZGFtb25fcmVjbGFpbV90dXJuYCBjYWxsIGl0LiBBbmQsIEkgc2VlIHRoYXQgYGRhbW9uX3JlY2xhaW1fdHVybmAgaXMgaW52b2tlZCB3aGVuIHdlIHN3aXRjaCByZWNsYWltIG9uIG9yIG9mZiB2aWEgbW9kdWxlIHBhcmFtZXRlcnMuIFNvLCBteSBhbmFseXNpcyBoYXMgdG8gYWNjb3VudCBmb3IgYWxsIHRoZXNlIGNhc2VzLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIHNwZWNpZmljIGNvZGUgY2hhbmdlcyB3aXRoaW4gYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhlIGZ1bmN0aW9uIGlzIGluZGVlZCByZWFjaGFibGUgdW5kZXIgdmFyaW91cyBjb25kaXRpb25zIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKnByZWNpc2VseSogd2hhdCBmdW5jdGlvbmFsaXR5IGlzIGJlaW5nIGNoYW5nZWQgaGVyZS4gQXJlIHdlIHR3ZWFraW5nIHJlY2xhaW0gdGhyZXNob2xkcywgc2NoZWR1bGluZyBwYXJhbWV0ZXJzLCBvciBvdGhlciByZWNsYWltIGxvZ2ljPyBBIGRlZXAgZGl2ZSBpbnRvIHRoZSBjb2RlIGlzIG5lZWRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg1MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MywiVG9vbENhbGxzIjpbImdyZXBwZXIiLCJncmVwcGVyIiwiZ3JlcHBlciIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMDowMTo1Ni45Nzc5MDAwOTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQ5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vcmVjbGFpbS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI1MDpcXHRcXHRpZiAocXVvdGFfYXV0b3R1bmVfZmVlZGJhY2spIHtcXG4gMjUxOlxcdFxcdFxcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9VU0VSX0lOUFVULCAxMDAwMCk7XFxuIDI1MjpcXHRcXHRcXHRpZiAoIWdvYWwpXFxuIDI1MzpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gMjU0OlxcdFxcdFxcdGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBxdW90YV9hdXRvdHVuZV9mZWVkYmFjaztcXG4gMjU1OlxcdFxcdFxcdGRhbW9zX2FkZF9xdW90YV9nb2FsKFxcdTAwMjZzY2hlbWUtXFx1MDAzZXF1b3RhLCBnb2FsKTtcXG4gMjU2OlxcdFxcdH1cXG4gMjU3OlxcdFxcbiAyNTg6XFx0XFx0aWYgKHNraXBfYW5vbikge1xcbiAyNTk6XFx0XFx0XFx0ZmlsdGVyID0gZGFtb3NfbmV3X2ZpbHRlcihEQU1PU19GSUxURVJfVFlQRV9BTk9OLCB0cnVlLCBmYWxzZSk7XFxuIDI2MDpcXHRcXHRcXHRpZiAoIWZpbHRlcilcXG4gMjYxOlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiAyNjI6XFx0XFx0XFx0ZGFtb3NfYWRkX2ZpbHRlcihzY2hlbWUsIGZpbHRlcik7XFxuIDI2MzpcXHRcXHR9XFxuIDI2NDpcXHRcXG4gMjY1OlxcdFxcdGVyciA9IGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdChwYXJhbV90YXJnZXQsXFxuIDI2NjpcXHRcXHRcXHRcXHRcXHUwMDI2bW9uaXRvcl9yZWdpb25fc3RhcnQsIFxcdTAwMjZtb25pdG9yX3JlZ2lvbl9lbmQsXFxuIDI2NzpcXHRcXHRcXHRcXHRwYXJhbV9jdHgtXFx1MDAzZWFkZHJfdW5pdCwgcGFyYW1fY3R4LVxcdTAwM2VtaW5fcmVnaW9uX3N6KTtcXG4gMjY4OlxcdFxcdGlmIChlcnIpXFxuIDI2OTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMjcwOlxcdFxcdGVyciA9IGRhbW9uX2NvbW1pdF9jdHgoY3R4LCBwYXJhbV9jdHgpO1xcbiAyNzE6XFx0XFxuIDI3MjpcXHRcXHRpZiAoIWVycilcXG4gMjczOlxcdFxcdFxcdHJldHVybiAwO1xcbiAyNzQ6XFx0b3V0OlxcbiAyNzU6XFx0XFx0ZGFtb25fZGVzdHJveV9jdHgocGFyYW1fY3R4KTtcXG4gMjc2OlxcdFxcdHJldHVybiBlcnI7XFxuIDI3NzpcXHR9XFxuIDI3ODpcXHRcXG4gMjc5OlxcdHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX2ZuKHZvaWQgKmFyZylcXG4gMjgwOlxcdHtcXG4gMjgxOlxcdFxcdHJldHVybiBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnMoKTtcXG4gMjgyOlxcdH1cXG4gMjgzOlxcdFxcbiAyODQ6XFx0c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxcbiAyODU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4gMjg2OlxcdHtcXG4gMjg3OlxcdFxcdGJvb2wgY29tbWl0X2lucHV0c19yZXF1ZXN0O1xcbiAyODg6XFx0XFx0aW50IGVycjtcXG4gMjg5OlxcdFxcdHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgY29udHJvbCA9IHtcXG4gMjkwOlxcdFxcdFxcdC5mbiA9IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19mbixcXG4gMjkxOlxcdFxcdH07XFxuIDI5MjpcXHRcXG4gMjkzOlxcdFxcdGlmICghdmFsKSB7XFxuIDI5NDpcXHRcXHRcXHRjb21taXRfaW5wdXRzX3JlcXVlc3QgPSB0cnVlO1xcbiAyOTU6XFx0XFx0fSBlbHNlIHtcXG4gMjk2OlxcdFxcdFxcdGVyciA9IGtzdHJ0b2Jvb2wodmFsLCBcXHUwMDI2Y29tbWl0X2lucHV0c19yZXF1ZXN0KTtcXG4gMjk3OlxcdFxcdFxcdGlmIChlcnIpXFxuIDI5ODpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiAyOTk6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMDowMTo1Ni45NzgwNzY3MTNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc3NjM4MjgzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNZW1vcnkgTGVhayBhbmQgQnVnIEZpeCBpbiBEQU1PTioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgYWRkcmVzc2luZyBhIG1lbW9yeSBsZWFrIGFuZCBhIHBvdGVudGlhbCBidWcuIFNwZWNpZmljYWxseSwgdGhlIGlzc3VlIGlzIHRoYXQgYGRhbW9uX2Rlc3Ryb3lfY3R4KHBhcmFtX2N0eClgIHdhcyBiZWluZyBjYWxsZWQgdW5jb25kaXRpb25hbGx5LCBldmVuIHdoZW4gYGRhbW9uX2NvbW1pdF9jdHhgIGhhZCBzdWNjZXNzZnVsbHkgY29tcGxldGVkLiBOb3csIHRoYXQgaW1tZWRpYXRlbHkgZmxhZ3Mgc29tZXRoaW5nOiBJZiBgZGFtb25fY29tbWl0X2N0eGAgd29ya3MgY29ycmVjdGx5LCBpdCBzaG91bGQgcmV0dXJuIDAsIHJpZ2h0P1xuXG5Mb29raW5nIGF0IHRoZSBwcmUtcGF0Y2ggY29kZSwgSSBzZWUgdGhlIHBhdHRlcm4uIGBlcnJgIGdldHMgdGhlIHJldHVybiB2YWx1ZSBvZiBgZGFtb25fY29tbWl0X2N0eGAuIFRoZW4sIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBzdWNjZWVkZWQgb3IgZmFpbGVkLCBgZGFtb25fZGVzdHJveV9jdHgocGFyYW1fY3R4KWAgaXMgYWx3YXlzIGNhbGxlZCwgYW5kIGZpbmFsbHkgYGVycmAgaXMgcmV0dXJuZWQuIFNvLCBpZiBgZGFtb25fY29tbWl0X2N0eGAgKmRpZCogc3VjY2VlZCwgYGVycmAgd291bGQgYmUgMCwgaXQgY2FsbHMgYGRhbW9uX2Rlc3Ryb3lfY3R4KHBhcmFtX2N0eClgIGFuZCByZXR1cm5zIDAgYW55d2F5LiBUaGF0IHNlZW1zIHdyb25nLCBiZWNhdXNlIGBwYXJhbV9jdHhgIGFwcGVhcnMgdG8gaG9sZCByZXNvdXJjZXMuIFRoYXQncyBhIHRleHRib29rIG1lbW9yeSBsZWFrIHdhaXRpbmcgdG8gaGFwcGVuIGlmIGBwYXJhbV9jdHhgIHdhc24ndCBwcm9wZXJseSBtYW5hZ2VkIGJ5IHRoZSBgY29tbWl0YCBmdW5jdGlvbi5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBwYXJhbV9jdHhgIGFjdHVhbGx5ICppcyouIFdoZXJlIGRvZXMgaXQgY29tZSBmcm9tPyBJdCdzIGNyZWF0ZWQgaW4gYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AuIEknbGwgbmVlZCB0byBnbyBiYWNrIGFuZCBjaGVjayB0aGUgY29kZSBpbiB0aGF0IGZ1bmN0aW9uIHRvIGVuc3VyZSB0aGF0IEkgdW5kZXJzdGFuZCBob3cgdGhvc2UgY29udGV4dHMgd29yay4gTGV0IG1lIHN0YXJ0IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTQ4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMDA6MDI6MDEuNzU0NDYxOTZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vcmVjbGFpbS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5MDpcXHRcXHRcXHRcXHRcXHUwMDI2ZGFtb25fcmVjbGFpbV9xdW90YSxcXG4gMTkxOlxcdFxcdFxcdFxcdC8qIChEZSlhY3RpdmF0ZSB0aGlzIGFjY29yZGluZyB0byB0aGUgd2F0ZXJtYXJrcy4gKi9cXG4gMTkyOlxcdFxcdFxcdFxcdFxcdTAwMjZkYW1vbl9yZWNsYWltX3dtYXJrcyxcXG4gMTkzOlxcdFxcdFxcdFxcdE5VTUFfTk9fTk9ERSk7XFxuIDE5NDpcXHR9XFxuIDE5NTpcXHRcXG4gMTk2OlxcdHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXFxuIDE5NzpcXHR7XFxuIDE5ODpcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpwYXJhbV9jdHg7XFxuIDE5OTpcXHRcXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpwYXJhbV90YXJnZXQ7XFxuIDIwMDpcXHRcXHRzdHJ1Y3QgZGFtb25fYXR0cnMgYXR0cnM7XFxuIDIwMTpcXHRcXHRzdHJ1Y3QgZGFtb3MgKnNjaGVtZTtcXG4gMjAyOlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsO1xcbiAyMDM6XFx0XFx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyO1xcbiAyMDQ6XFx0XFx0aW50IGVycjtcXG4gMjA1OlxcdFxcbiAyMDY6XFx0XFx0ZXJyID0gZGFtb25fbW9kdWxlc19uZXdfcGFkZHJfY3R4X3RhcmdldChcXHUwMDI2cGFyYW1fY3R4LCBcXHUwMDI2cGFyYW1fdGFyZ2V0KTtcXG4gMjA3OlxcdFxcdGlmIChlcnIpXFxuIDIwODpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiAyMDk6XFx0XFxuIDIxMDpcXHRcXHRwYXJhbV9jdHgtXFx1MDAzZWFkZHJfdW5pdCA9IGFkZHJfdW5pdDtcXG4gMjExOlxcdFxcdHBhcmFtX2N0eC1cXHUwMDNlbWluX3JlZ2lvbl9zeiA9IG1heChEQU1PTl9NSU5fUkVHSU9OX1NaIC8gYWRkcl91bml0LCAxKTtcXG4gMjEyOlxcdFxcbiAyMTM6XFx0XFx0aWYgKCFpc19wb3dlcl9vZl8yKHBhcmFtX2N0eC1cXHUwMDNlbWluX3JlZ2lvbl9zeikpIHtcXG4gMjE0OlxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuIDIxNTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMjE2OlxcdFxcdH1cXG4gMjE3OlxcdFxcbiAyMTg6XFx0XFx0aWYgKCFkYW1vbl9yZWNsYWltX21vbl9hdHRycy5hZ2dyX2ludGVydmFsKSB7XFxuIDIxOTpcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiAyMjA6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDIyMTpcXHRcXHR9XFxuIDIyMjpcXHRcXG4gMjIzOlxcdFxcdGF0dHJzID0gZGFtb25fcmVjbGFpbV9tb25fYXR0cnM7XFxuIDIyNDpcXHRcXHRpZiAoYXV0b3R1bmVfbW9uaXRvcmluZ19pbnRlcnZhbHMpIHtcXG4gMjI1OlxcdFxcdFxcdGF0dHJzLnNhbXBsZV9pbnRlcnZhbCA9IDUwMDA7XFxuIDIyNjpcXHRcXHRcXHRhdHRycy5hZ2dyX2ludGVydmFsID0gMTAwMDAwO1xcbiAyMjc6XFx0XFx0XFx0YXR0cnMuaW50ZXJ2YWxzX2dvYWwuYWNjZXNzX2JwID0gNDA7XFxuIDIyODpcXHRcXHRcXHRhdHRycy5pbnRlcnZhbHNfZ29hbC5hZ2dycyA9IDM7XFxuIDIyOTpcXHRcXHRcXHRhdHRycy5pbnRlcnZhbHNfZ29hbC5taW5fc2FtcGxlX3VzID0gNTAwMDtcXG4gMjMwOlxcdFxcdFxcdGF0dHJzLmludGVydmFsc19nb2FsLm1heF9zYW1wbGVfdXMgPSAxMCAqIDEwMDAgKiAxMDAwO1xcbiAyMzE6XFx0XFx0fVxcbiAyMzI6XFx0XFx0ZXJyID0gZGFtb25fc2V0X2F0dHJzKHBhcmFtX2N0eCwgXFx1MDAyNmF0dHJzKTtcXG4gMjMzOlxcdFxcdGlmIChlcnIpXFxuIDIzNDpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMjM1OlxcdFxcbiAyMzY6XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4gMjM3OlxcdFxcdHNjaGVtZSA9IGRhbW9uX3JlY2xhaW1fbmV3X3NjaGVtZShhdHRycy5hZ2dyX2ludGVydmFsKTtcXG4gMjM4OlxcdFxcdGlmICghc2NoZW1lKVxcbiAyMzk6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDI0MDpcXHRcXHRkYW1vbl9zZXRfc2NoZW1lcyhwYXJhbV9jdHgsIFxcdTAwMjZzY2hlbWUsIDEpO1xcbiAyNDE6XFx0XFxuIDI0MjpcXHRcXHRpZiAocXVvdGFfbWVtX3ByZXNzdXJlX3VzKSB7XFxuIDI0MzpcXHRcXHRcXHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLFxcbiAyNDQ6XFx0XFx0XFx0XFx0XFx0cXVvdGFfbWVtX3ByZXNzdXJlX3VzKTtcXG4gMjQ1OlxcdFxcdFxcdGlmICghZ29hbClcXG4gMjQ2OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiAyNDc6XFx0XFx0XFx0ZGFtb3NfYWRkX3F1b3RhX2dvYWwoXFx1MDAyNnNjaGVtZS1cXHUwMDNlcXVvdGEsIGdvYWwpO1xcbiAyNDg6XFx0XFx0fVxcbiAyNDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAwOjAyOjAxLjc1NDU1MDg5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NjQ0MDcxNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgcGFyYW1fY3R4YCBDb25maWd1cmF0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gc2VlaW5nIHRoYXQgYHBhcmFtX2N0eGAgaXMgaW5pdGlhbGl6ZWQgYW5kIHNldCB1cCwgYW5kIHRoZW4gYGRhbW9uX2NvbW1pdF9jdHgoY3R4LCBwYXJhbV9jdHgpYCBpcyBjYWxsZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBkYW1vbl9jb21taXRfY3R4YCBwcm9iYWJseSB0YWtlcyB0aGUgY29uZmlndXJhdGlvbiBmcm9tIGBwYXJhbV9jdHhgIGFuZCBpbnRlZ3JhdGVzIGl0IGludG8gYGN0eGAuIEJ1dCB0aGVuIEkgaGF2ZSB0byBhc2sgbXlzZWxmLCBkb2VzIGBkYW1vbl9jb21taXRfY3R4YCBhY3R1YWxseSAqdGFrZSBvd25lcnNoaXAqIG9mIGBwYXJhbV9jdHhgPyAgSXQgc2VlbXMgbGlrZSB0aGUgdGV4dCBpbXBsaWVzIGEgY29weSwgd2hpY2ggbWVhbnMgYGN0eGAgaXMgYmVpbmcgdXBkYXRlZCB3aXRoIHRoZSBjb25maWd1cmF0aW9uIGRhdGEuXG5cbklmIGl0ICpjb3BpZXMqIHRoZSBjb25maWd1cmF0aW9uLCB0aGVuIHdoeSBpcyBgcGFyYW1fY3R4YCBzdGlsbCBoYW5naW5nIGFyb3VuZD8gU2hvdWxkbid0IGl0IGJlIGZyZWVkPyBJJ20gbWlzc2luZyBzb21ldGhpbmcgaGVyZS4gVG8gY2xhcmlmeSB0aGUgb3duZXJzaGlwIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBvZiBgcGFyYW1fY3R4YCBmb2xsb3dpbmcgdGhpcywgSSB0aGluayBJIG5lZWQgdG8gbG9vayBkaXJlY3RseSBhdCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGRhbW9uX2NvbW1pdF9jdHhgLiBMZXQgbWUgcHVsbCB1cCBgbW0vZGFtb24vY29yZS5jYCBhbmQgY29uZmlybSBleGFjdGx5IHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIHRoYXQgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2MzMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMDowMjowNS40MTg5NjAxODRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTQzNzYzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9jb21taXRfY3R4XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MTUyOT1zdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTU2MC0vKipcXG5tbS9kYW1vbi9jb3JlLmM6MTU2MTogKiBkYW1vbl9jb21taXRfY3R4KCkgLSBDb21taXQgcGFyYW1ldGVycyBvZiBhIERBTU9OIGNvbnRleHQgdG8gYW5vdGhlci5cXG5tbS9kYW1vbi9jb3JlLmMtMTU2Mi0gKiBAZHN0OlxcdFRoZSBjb21taXQgZGVzdGluYXRpb24gREFNT04gY29udGV4dC5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNTcyLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxNTczOmludCBkYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xNTc0LXtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9MjczPXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNDItXFx0XFx0Z290byBvdXQ7XFxubW0vZGFtb24vbHJ1X3NvcnQuYzozNDM6XFx0ZXJyID0gZGFtb25fY29tbWl0X2N0eChjdHgsIHBhcmFtX2N0eCk7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNDQtb3V0Olxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTE5Nj1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTI2OS1cXHRcXHRnb3RvIG91dDtcXG5tbS9kYW1vbi9yZWNsYWltLmM6MjcwOlxcdGVyciA9IGRhbW9uX2NvbW1pdF9jdHgoY3R4LCBwYXJhbV9jdHgpO1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNzEtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIwNzY9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3N5c2ZzX25ld190ZXN0X2N0eChcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjA4NC1cXHRcXHRyZXR1cm4gTlVMTDtcXG5tbS9kYW1vbi9zeXNmcy5jOjIwODU6XFx0ZXJyID0gZGFtb25fY29tbWl0X2N0eCh0ZXN0X2N0eCwgcnVubmluZ19jdHgpO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjA4Ni1cXHRpZiAoZXJyKSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIwOTk9c3RhdGljIGludCBkYW1vbl9zeXNmc19jb21taXRfaW5wdXQodm9pZCAqZGF0YSlcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjExOC1cXHR9XFxubW0vZGFtb24vc3lzZnMuYzoyMTE5OlxcdGVyciA9IGRhbW9uX2NvbW1pdF9jdHgodGVzdF9jdHgsIHBhcmFtX2N0eCk7XFxubW0vZGFtb24vc3lzZnMuYy0yMTIwLVxcdGlmIChlcnIpXFxubW0vZGFtb24vc3lzZnMuYy0yMTIxLVxcdFxcdGdvdG8gb3V0O1xcbm1tL2RhbW9uL3N5c2ZzLmM6MjEyMjpcXHRlcnIgPSBkYW1vbl9jb21taXRfY3R4KGtkYW1vbmQtXFx1MDAzZWRhbW9uX2N0eCwgcGFyYW1fY3R4KTtcXG5tbS9kYW1vbi9zeXNmcy5jLTIxMjMtb3V0Olxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTExODM9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfY3R4KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMTk2LVxcdHNyYy1cXHUwMDNlbWluX3JlZ2lvbl9zeiA9IDQwOTY7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjExOTc6XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX2NvbW1pdF9jdHgoZHN0LCBzcmMpLCAwKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTE5OC1cXHRzcmMtXFx1MDAzZW1pbl9yZWdpb25fc3ogPSA0MDk1O1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMTk5OlxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9jb21taXRfY3R4KGRzdCwgc3JjKSwgLUVJTlZBTCk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEyMDAtXFx0c3JjLVxcdTAwM2VtaW5fcmVnaW9uX3N6ID0gNDA5NjtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTIwMS1cXHRzcmMtXFx1MDAzZXBhdXNlID0gdHJ1ZTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTIwMjpcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fY29tbWl0X2N0eChkc3QsIHNyYyksIDApO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMjAzLVxcdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIGRzdC1cXHUwMDNlcGF1c2UpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMDowMjowNS41ODA0MDM1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODczMDk0NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYGRhbW9uX2NvbW1pdF9jdHhgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzIGBkYW1vbl9jb21taXRfY3R4YCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBzdHJ1Y3R1cmUgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBjb25maXJtIHRoYXQgdGhlIHdheSBpdCBoYW5kbGVzIGNvbnRleHQgd2l0aGluIERBTU9OIGFsaWducyB3aXRoIG15IGV4cGVjdGVkIG1vZGVsLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBzdWJ0bGUgaXNzdWVzIGluIG1lbW9yeSBtYW5hZ2VtZW50LCBjb25jdXJyZW5jeSBpZiBhcHBsaWNhYmxlLCBhbmQgaWYgaXQgaW50ZXJhY3RzIHByb3Blcmx5IHdpdGggdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCBpbiB0cmFja2luZyBhbmQgc2NoZWR1bGluZyByZWdpb25zLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRhdGEgZmxvdyB3aXRoaW4gdGhlIGNvbW1pdCBvcGVyYXRpb24sIGZvY3VzaW5nIG9uIGRhdGEgY29uc2lzdGVuY3kgdW5kZXIgY29uY3VycmVudCBhY2Nlc3MgZnJvbSBtdWx0aXBsZSB0aHJlYWRzL0NQVXMuIEkgYW0gbG9va2luZyBmb3IgdGhlIHVzYWdlIG9mIGF0b21pYyBvcGVyYXRpb25zLCBtdXRleGVzLCBhbmQgb3RoZXIgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjb2RlIHBsYXlzIG5pY2VseSB3aXRoIG90aGVyIGFyZWFzIG9mIERBTU9OIHRoYXQgbWFuYWdlIG1ldGFkYXRhLiBBcmUgdGhlcmUgYW55IGNvcm5lciBjYXNlcyB0aGF0IG1pZ2h0IGxlYWQgdG8gZGF0YSBjb3JydXB0aW9uIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IsIGVzcGVjaWFsbHkgaW4gaGlnaC1jb250ZW50aW9uIHNjZW5hcmlvcz8gRmluYWxseSwgSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyAtIGFyZSBleGNlcHRpb25zIHByb3Blcmx5IG1hbmFnZWQgYW5kIHRoZSBzeXN0ZW0gcmVtYWlucyBzdGFibGU/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwNzEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMDowMjowOC44Njc3MTUxMTJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTYwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNTYwOlxcdC8qKlxcbjE1NjE6XFx0ICogZGFtb25fY29tbWl0X2N0eCgpIC0gQ29tbWl0IHBhcmFtZXRlcnMgb2YgYSBEQU1PTiBjb250ZXh0IHRvIGFub3RoZXIuXFxuMTU2MjpcXHQgKiBAZHN0OlxcdFRoZSBjb21taXQgZGVzdGluYXRpb24gREFNT04gY29udGV4dC5cXG4xNTYzOlxcdCAqIEBzcmM6XFx0VGhlIGNvbW1pdCBzb3VyY2UgREFNT04gY29udGV4dC5cXG4xNTY0OlxcdCAqXFxuMTU2NTpcXHQgKiBUaGlzIGZ1bmN0aW9uIGNvcGllcyB1c2VyLXNwZWNpZmllZCBwYXJhbWV0ZXJzIGZyb20gQHNyYyB0byBAZHN0IGFuZCB1cGRhdGVcXG4xNTY2OlxcdCAqIHRoZSBpbnRlcm5hbCBzdGF0dXMgYW5kIHJlc3VsdHMgYWNjb3JkaW5nbHkuICBVc2VycyBzaG91bGQgdXNlIHRoaXMgZnVuY3Rpb25cXG4xNTY3OlxcdCAqIGZvciBjb250ZXh0LWxldmVsIHBhcmFtZXRlcnMgdXBkYXRlIG9mIHJ1bm5pbmcgY29udGV4dCwgaW5zdGVhZCBvZiBtYW51YWxcXG4xNTY4OlxcdCAqIGluLXBsYWNlIHVwZGF0ZXMuXFxuMTU2OTpcXHQgKlxcbjE1NzA6XFx0ICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGZyb20gcGFyYW1ldGVycy11cGRhdGUgc2FmZSBjb250ZXh0LCBsaWtlXFxuMTU3MTpcXHQgKiBkYW1vbl9jYWxsKCkuXFxuMTU3MjpcXHQgKi9cXG4xNTczOlxcdGludCBkYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxcbjE1NzQ6XFx0e1xcbjE1NzU6XFx0XFx0aW50IGVycjtcXG4xNTc2OlxcdFxcdHN0cnVjdCBkYW1vcyAqc2NoZW1lO1xcbjE1Nzc6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7XFxuMTU3ODpcXHRcXG4xNTc5OlxcdFxcdGRzdC1cXHUwMDNlbWF5YmVfY29ycnVwdGVkID0gdHJ1ZTtcXG4xNTgwOlxcdFxcdGlmICghaXNfcG93ZXJfb2ZfMihzcmMtXFx1MDAzZW1pbl9yZWdpb25fc3opKVxcbjE1ODE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTU4MjpcXHRcXG4xNTgzOlxcdFxcdC8qIG5vZGVfZWxpZ2libGVfbWVtX2JwIG1ldHJpYyByZXF1aXJlcyBQQUREUiBvcHMgKi9cXG4xNTg0OlxcdFxcdGlmIChzcmMtXFx1MDAzZW9wcy5pZCAhPSBEQU1PTl9PUFNfUEFERFIpIHtcXG4xNTg1OlxcdFxcdFxcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzY2hlbWUsIHNyYykge1xcbjE1ODY6XFx0XFx0XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFxcdTAwMjZzY2hlbWUtXFx1MDAzZXF1b3RhO1xcbjE1ODc6XFx0XFxuMTU4ODpcXHRcXHRcXHRcXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsKGdvYWwsIHF1b3RhKSB7XFxuMTU4OTpcXHRcXHRcXHRcXHRcXHRpZiAoZ29hbC1cXHUwMDNlbWV0cmljID09XFxuMTU5MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHREQU1PU19RVU9UQV9OT0RFX0VMSUdJQkxFX01FTV9CUClcXG4xNTkxOlxcdFxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE1OTI6XFx0XFx0XFx0XFx0fVxcbjE1OTM6XFx0XFx0XFx0fVxcbjE1OTQ6XFx0XFx0fVxcbjE1OTU6XFx0XFxuMTU5NjpcXHRcXHRlcnIgPSBkYW1vbl9jb21taXRfc2NoZW1lcyhkc3QsIHNyYyk7XFxuMTU5NzpcXHRcXHRpZiAoZXJyKVxcbjE1OTg6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xNTk5OlxcdFxcdGVyciA9IGRhbW9uX2NvbW1pdF90YXJnZXRzKGRzdCwgc3JjKTtcXG4xNjAwOlxcdFxcdGlmIChlcnIpXFxuMTYwMTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjE2MDI6XFx0XFx0LypcXG4xNjAzOlxcdFxcdCAqIHNjaGVtZXMgYW5kIHRhcmdldHMgc2hvdWxkIGJlIHVwZGF0ZWQgZmlyc3QsIHNpbmNlXFxuMTYwNDpcXHRcXHQgKiAxLiBkYW1vbl9zZXRfYXR0cnMoKSB1cGRhdGVzIG1vbml0b3JpbmcgcmVzdWx0cyBvZiB0YXJnZXRzIGFuZFxcbjE2MDU6XFx0XFx0ICogbmV4dF9hcHBseV9zaXMgb2Ygc2NoZW1lcywgYW5kXFxuMTYwNjpcXHRcXHQgKiAyLiBvcHMgdXBkYXRlIHNob3VsZCBiZSBkb25lIGFmdGVyIHBpZCBoYW5kbGluZyBpcyBkb25lICh0YXJnZXRcXG4xNjA3OlxcdFxcdCAqICAgIGNvbW1pdHRpbmcgcmVxdWlyZSBwdXR0aW5nIHBpZHMpLlxcbjE2MDg6XFx0XFx0ICovXFxuMTYwOTpcXHRcXHRpZiAoIWRhbW9uX2F0dHJzX2VxdWFscyhcXHUwMDI2ZHN0LVxcdTAwM2VhdHRycywgXFx1MDAyNnNyYy1cXHUwMDNlYXR0cnMpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAwOjAyOjA4Ljg2NzkzODg4MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDQ1OTg1MDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIGBkYW1vbl9jb21taXRfY3R4YCBhbmQgUG90ZW50aWFsIE93bmVyc2hpcCoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4uLiAqYGRhbW9uX2NvbW1pdF9jdHhgKiBpcyBjb3B5aW5nIHNjaGVtZXMgYW5kIHRhcmdldHMuIEhtbSwgdGhhdCdzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gY2xhcmlmeSB3aGV0aGVyIGl0J3MgdHJ1bHkgbWFraW5nIGNvcGllcyBvciBpZiBpdCBtaWdodCBiZSB0cmFuc2ZlcnJpbmcgb3duZXJzaGlwIG9mIHRoZSB1bmRlcmx5aW5nIGRhdGEuIFRoYXQncyBhIGNydWNpYWwgZGlzdGluY3Rpb24gZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwb3RlbnRpYWwgZGF0YSBjb3JydXB0aW9uIGlzc3VlcywgZXNwZWNpYWxseSBpbiBhIHN5c3RlbSBsaWtlIHRoaXMuXG5cbk9rYXksIG15IG5leHQgc3RlcCBpcyBjbGVhcjogSSd2ZSBnb3QgdG8gZGl2ZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgYGRhbW9uX2NvbW1pdF9zY2hlbWVzYCBhbmQgYGRhbW9uX2NvbW1pdF90YXJnZXRzYC4gVGhvc2UgYXJlIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdG8gY2hlY2sgbm93LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhleSdyZSBkb2luZyB3aXRoIHRob3NlIGNvcGllZCBzY2hlbWVzIGFuZCB0YXJnZXRzLiBBcmUgdGhleSBvcGVyYXRpbmcgb24gdGhlbSBkaXJlY3RseSwgcG90ZW50aWFsbHkgbW9kaWZ5aW5nIHNoYXJlZCBkYXRhPyBBcmUgdGhleSBjcmVhdGluZyBuZXcsIGluZGVwZW5kZW50IGNvcGllcz8gVGhlIGRldmlsIGlzIGRlZmluaXRlbHkgaW4gdGhlIGRldGFpbHMgaGVyZSwgc28gdGhlIGNvZGUgd2FsayBiZWdpbnMgbm93LiBMZXQncyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgdGhlIG1lbW9yeSBzZW1hbnRpY3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxMjksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAwOjAyOjEyLjMxMzkyNjE3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3Njg0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ0MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQ0MDpcXHRcXHRcXHRcXHRkYW1vbl9kZXN0cm95X3RhcmdldChkc3RfdGFyZ2V0LCBkc3QpO1xcbjE0NDE6XFx0XFx0XFx0XFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGRzdCkge1xcbjE0NDI6XFx0XFx0XFx0XFx0XFx0aWYgKHMtXFx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSA9PSBkc3RfdGFyZ2V0KSB7XFxuMTQ0MzpcXHRcXHRcXHRcXHRcXHRcXHRzLVxcdTAwM2VxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xcbjE0NDQ6XFx0XFx0XFx0XFx0XFx0XFx0cy1cXHUwMDNlcXVvdGEuY2hhcmdlX2FkZHJfZnJvbSA9IDA7XFxuMTQ0NTpcXHRcXHRcXHRcXHRcXHR9XFxuMTQ0NjpcXHRcXHRcXHRcXHR9XFxuMTQ0NzpcXHRcXHRcXHR9XFxuMTQ0ODpcXHRcXHR9XFxuMTQ0OTpcXHRcXG4xNDUwOlxcdFxcdGZhaWxlZCA9IE5VTEw7XFxuMTQ1MTpcXHRcXHRkYW1vbl9mb3JfZWFjaF90YXJnZXRfc2FmZShzcmNfdGFyZ2V0LCBuZXh0LCBzcmMpIHtcXG4xNDUyOlxcdFxcdFxcdGlmIChqKysgXFx1MDAzYyBpKVxcbjE0NTM6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTQ1NDpcXHRcXHRcXHQvKiB0YXJnZXQgdG8gcmVtb3ZlIGhhcyBubyBtYXRjaGluZyBkc3QgKi9cXG4xNDU1OlxcdFxcdFxcdGlmIChzcmNfdGFyZ2V0LVxcdTAwM2VvYnNvbGV0ZSkge1xcbjE0NTY6XFx0XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4xNDU3OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjE0NTg6XFx0XFx0XFx0fVxcbjE0NTk6XFx0XFx0XFx0bmV3X3RhcmdldCA9IGRhbW9uX25ld190YXJnZXQoKTtcXG4xNDYwOlxcdFxcdFxcdGlmICghbmV3X3RhcmdldCkge1xcbjE0NjE6XFx0XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4xNDYyOlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjE0NjM6XFx0XFx0XFx0fVxcbjE0NjQ6XFx0XFx0XFx0ZXJyID0gZGFtb25fY29tbWl0X3RhcmdldChuZXdfdGFyZ2V0LCBmYWxzZSxcXG4xNDY1OlxcdFxcdFxcdFxcdFxcdHNyY190YXJnZXQsIGRhbW9uX3RhcmdldF9oYXNfcGlkKHNyYyksXFxuMTQ2NjpcXHRcXHRcXHRcXHRcXHRzcmMtXFx1MDAzZW1pbl9yZWdpb25fc3opO1xcbjE0Njc6XFx0XFx0XFx0aWYgKGVycikge1xcbjE0Njg6XFx0XFx0XFx0XFx0ZGFtb25fZGVzdHJveV90YXJnZXQobmV3X3RhcmdldCwgTlVMTCk7XFxuMTQ2OTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4xNDcwOlxcdFxcdFxcdH1cXG4xNDcxOlxcdFxcdFxcdGRhbW9uX2FkZF90YXJnZXQoZHN0LCBuZXdfdGFyZ2V0KTtcXG4xNDcyOlxcdFxcdH1cXG4xNDczOlxcdFxcdHJldHVybiAwO1xcbjE0NzQ6XFx0XFxuMTQ3NTpcXHRvdXQ6XFxuMTQ3NjpcXHRcXHRkYW1vbl9yZXZlcnRfdGFyZ2V0X2NvbW1pdHMoZHN0LCBmYWlsZWQsIHNyYyk7XFxuMTQ3NzpcXHRcXHRyZXR1cm4gZXJyO1xcbjE0Nzg6XFx0fVxcbjE0Nzk6XFx0XFxuMTQ4MDpcXHRzdGF0aWMgdm9pZCBkYW1vbl9jb21taXRfZmlsdGVyKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmRzdCxcXG4xNDgxOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9maWx0ZXIgKnNyYylcXG4xNDgyOlxcdHtcXG4xNDgzOlxcdFxcdGRzdC1cXHUwMDNldHlwZSA9IHNyYy1cXHUwMDNldHlwZTtcXG4xNDg0OlxcdFxcdGRzdC1cXHUwMDNlbWF0Y2hpbmcgPSBzcmMtXFx1MDAzZW1hdGNoaW5nO1xcbjE0ODU6XFx0XFx0ZHN0LVxcdTAwM2VhbGxvdyA9IHNyYy1cXHUwMDNlYWxsb3c7XFxuMTQ4NjpcXHRcXHRzd2l0Y2ggKGRzdC1cXHUwMDNldHlwZSkge1xcbjE0ODc6XFx0XFx0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRzpcXG4xNDg4OlxcdFxcdFxcdGRzdC1cXHUwMDNlbWVtY2dfaWQgPSBzcmMtXFx1MDAzZW1lbWNnX2lkO1xcbjE0ODk6XFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAwOjAyOjEyLjMxNDIwNDU0MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTU0NjM3MzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgTWVtb3J5IExlYWtzIGluIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCBmdW5jdGlvbiBhbmQgdGhlIHdheSBpdCBoYW5kbGVzIGBwYXJhbV9jdHhgLiBNeSBpbml0aWFsIHVuZGVyc3RhbmRpbmcsIGJhc2VkIG9uIHRoZSBmdW5jdGlvbidzIHN0cnVjdHVyZSwgd2FzIHRoYXQgYGRhbW9uX2NvbW1pdF9jdHhgIGNyZWF0ZXMgbmV3IHRhcmdldHMgYW5kIGNvcGllcyBkYXRhLCBpbXBseWluZyBpdCAqZG9lc24ndCogdGFrZSBvd25lcnNoaXAgb2YgYHBhcmFtX2N0eGAuIFRoaXMgbWVhbnMgYHBhcmFtX2N0eGAgbmVlZHMgdG8gYmUgY2xlYW5lZCB1cCBhZnRlciB0aGUgY2FsbCwgcmVnYXJkbGVzcyBvZiBzdWNjZXNzIG9yIGZhaWx1cmUuIEJ1dCBJJ20gc2VlaW5nIHNvbWV0aGluZyB0aGF0J3MgbWFraW5nIG1lIHBhdXNlLlxuXG5Mb29raW5nIGF0IHRoZSBwYXRjaCBzbmlwcGV0IGFnYWluOiBJIGFtIG5vdyBub3RpY2luZyB0aGUgY29uZGl0aW9uYWwgcmV0dXJuOiBpZiBgZGFtb25fY29tbWl0X2N0eGAgKnN1Y2NlZWRzKiAoaS5lLiwgYGVycmAgaXMgMCwgdGh1cyBgIWVycmAgaXMgdHJ1ZSksIHRoZSBmdW5jdGlvbiByZXR1cm5zIGltbWVkaWF0ZWx5IHdpdGggYHJldHVybiAwO2AsICpieXBhc3NpbmcqIHRoZSBjYWxsIHRvIGBkYW1vbl9kZXN0cm95X2N0eChwYXJhbV9jdHgpYC5cblxuSXMgdGhpcyBhIHBvdGVudGlhbCBtZW1vcnkgbGVhaz8gSWYgYGRhbW9uX2NvbW1pdF9jdHhgICpjb3BpZXMqIGV2ZXJ5dGhpbmcgZnJvbSBgcGFyYW1fY3R4YCwgdGhlbiBgcGFyYW1fY3R4YCAqc2hvdWxkKiBiZSBkZXN0cm95ZWQuIElmLCBvbiB0aGUgb3RoZXIgaGFuZCwgYGRhbW9uX2NvbW1pdF9jdHhgICp0YWtlcyogb3duZXJzaGlwLCB0aGVuIGBwYXJhbV9jdHhgICpzaG91bGRuJ3QqIGJlIGRlc3Ryb3llZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggaXMgaGFwcGVuaW5nLiBJIHJlYWxseSBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgYmVoYXZpb3Igb2YgYGRhbW9uX2NvbW1pdF9jdHhgIGFuZCBtb3JlIGltcG9ydGFudGx5IGBkYW1vbl9kZXN0cm95X2N0eGAgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxMzksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMDowMjoxNy44Njg4NDUwNjlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzcyNDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NjA6XFx0XFx0ZGVmYXVsdDpcXG4gNDYxOlxcdFxcdFxcdGJyZWFrO1xcbiA0NjI6XFx0XFx0fVxcbiA0NjM6XFx0XFx0cmV0dXJuIHRydWU7XFxuIDQ2NDpcXHR9XFxuIDQ2NTpcXHRcXG4gNDY2OlxcdHZvaWQgZGFtb3NfYWRkX2ZpbHRlcihzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vc19maWx0ZXIgKmYpXFxuIDQ2NzpcXHR7XFxuIDQ2ODpcXHRcXHRpZiAoZGFtb3NfZmlsdGVyX2Zvcl9vcHMoZi1cXHUwMDNldHlwZSkpXFxuIDQ2OTpcXHRcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZmLVxcdTAwM2VsaXN0LCBcXHUwMDI2cy1cXHUwMDNlb3BzX2ZpbHRlcnMpO1xcbiA0NzA6XFx0XFx0ZWxzZVxcbiA0NzE6XFx0XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2Zi1cXHUwMDNlbGlzdCwgXFx1MDAyNnMtXFx1MDAzZWNvcmVfZmlsdGVycyk7XFxuIDQ3MjpcXHR9XFxuIDQ3MzpcXHRcXG4gNDc0OlxcdHN0YXRpYyB2b2lkIGRhbW9zX2RlbF9maWx0ZXIoc3RydWN0IGRhbW9zX2ZpbHRlciAqZilcXG4gNDc1OlxcdHtcXG4gNDc2OlxcdFxcdGxpc3RfZGVsKFxcdTAwMjZmLVxcdTAwM2VsaXN0KTtcXG4gNDc3OlxcdH1cXG4gNDc4OlxcdFxcbiA0Nzk6XFx0c3RhdGljIHZvaWQgZGFtb3NfZnJlZV9maWx0ZXIoc3RydWN0IGRhbW9zX2ZpbHRlciAqZilcXG4gNDgwOlxcdHtcXG4gNDgxOlxcdFxcdGtmcmVlKGYpO1xcbiA0ODI6XFx0fVxcbiA0ODM6XFx0XFxuIDQ4NDpcXHR2b2lkIGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKHN0cnVjdCBkYW1vc19maWx0ZXIgKmYpXFxuIDQ4NTpcXHR7XFxuIDQ4NjpcXHRcXHRkYW1vc19kZWxfZmlsdGVyKGYpO1xcbiA0ODc6XFx0XFx0ZGFtb3NfZnJlZV9maWx0ZXIoZik7XFxuIDQ4ODpcXHR9XFxuIDQ4OTpcXHRcXG4gNDkwOlxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19uZXdfcXVvdGFfZ29hbChcXG4gNDkxOlxcdFxcdFxcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljLFxcbiA0OTI6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyB0YXJnZXRfdmFsdWUpXFxuIDQ5MzpcXHR7XFxuIDQ5NDpcXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcXG4gNDk1OlxcdFxcbiA0OTY6XFx0XFx0Z29hbCA9IGttYWxsb2Nfb2JqKCpnb2FsKTtcXG4gNDk3OlxcdFxcdGlmICghZ29hbClcXG4gNDk4OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA0OTk6XFx0XFx0Z29hbC1cXHUwMDNlbWV0cmljID0gbWV0cmljO1xcbiA1MDA6XFx0XFx0Z29hbC1cXHUwMDNldGFyZ2V0X3ZhbHVlID0gdGFyZ2V0X3ZhbHVlO1xcbiA1MDE6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmdvYWwtXFx1MDAzZWxpc3QpO1xcbiA1MDI6XFx0XFx0cmV0dXJuIGdvYWw7XFxuIDUwMzpcXHR9XFxuIDUwNDpcXHRcXG4gNTA1OlxcdHZvaWQgZGFtb3NfYWRkX3F1b3RhX2dvYWwoc3RydWN0IGRhbW9zX3F1b3RhICpxLCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZylcXG4gNTA2OlxcdHtcXG4gNTA3OlxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmctXFx1MDAzZWxpc3QsIFxcdTAwMjZxLVxcdTAwM2Vnb2Fscyk7XFxuIDUwODpcXHR9XFxuIDUwOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMDA6MDI6MTcuODY5MjE5NTk5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNzI0NDM5NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXM6XG5cbioqQW5hbHl6aW5nIGBkYW1vbl9kZXN0cm95X2N0eGAqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciBkb3duIHRoaXMgcmFiYml0IGhvbGUsIEkgbmVlZCB0byB0YWtlIGEgc3RlcCBiYWNrIGFuZCBleGFtaW5lIHRoZSBjb3JlIG9mIHRoaXMuIFRoZSBmaXJzdCB0aGluZyB0aGF0IG5lZWRzIHRvIGhhcHBlbiBpcyBhIGRpcmVjdCBleGFtaW5hdGlvbiBvZiBgZGFtb25fZGVzdHJveV9jdHhgIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHN0cnVjdHVyZSwgaXRzIGRlcGVuZGVuY2llcywgd2hhdCBpdCdzIHN1cHBvc2VkIHRvIGRvLCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgKmhvdyogaXQncyBzdXBwb3NlZCB0byBkbyBpdC4gT25seSB0aGVuIGNhbiBJIHJlYXNvbmFibHkgdHJvdWJsZXNob290IGFueSBpc3N1ZXMuIEknbGwgc3RhcnQgd2l0aCBhIGNvZGUtbGV2ZWwgcmV2aWV3IG9mIHRoZSBmdW5jdGlvbi9vYmplY3QgZGVmaW5pdGlvbiB0byBhc3Nlc3MgaWYgaXQncyBvcGVyYXRpbmcgYXMgaW50ZW5kZWQuIEl0J3MgdGhlIG9ubHkgd2F5IHRvIGJlIGNvbmZpZGVudCB0aGF0IG90aGVyIGFzc29jaWF0ZWQgbG9naWMgaXMgbm90IHNpbXBseSBtYXNraW5nIGFuIGluaXRpYWwgcHJvYmxlbSB0aGF0IG5lZWRzIHRvIGJlIHNvbHZlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NjQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAwOjAyOjIwLjk0MTY2Njg4NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU0MTUzMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBkYW1vbl9kZXN0cm95X2N0eFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTczND1zdGF0aWMgdm9pZCBkYW1vbl9kZXN0cm95X3RhcmdldHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTc0MS1cXG5tbS9kYW1vbi9jb3JlLmM6NzQyOnZvaWQgZGFtb25fZGVzdHJveV9jdHgoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbm1tL2RhbW9uL2NvcmUuYy03NDMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMDowMjoyMC45OTcwOTM2MzVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk0MzA3MzkxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHdoYXQncyBnb2luZyBvbjpcblxuKipBbmFseXppbmcgdGhlIENvbnRleHQgb2YgXCJkYW1vbl9kZXN0cm95X2N0eFwiKipcblxuQWxyaWdodCwgSSdtIHN0YXJ0aW5nIHdpdGggYGRhbW9uX2Rlc3Ryb3lfY3R4YC4gSSBzZWUgdGhhdCBuYW1lIGFuZCBpbW1lZGlhdGVseSBzdGFydCB0byB0aGluayBhYm91dCB0aGUgcG9zc2libGUgaW1wbGljYXRpb25zLiBDb250ZXh0IGlzIGtleSwgc28gSSdtIHRyeWluZyB0byBtZW50YWxseSBtYXAgb3V0IHdoYXQgJ2RhbW9uJyBjb3VsZCByZXByZXNlbnQuIElzIGl0IGEgZGVtb24sIGEgZGF0YSBzdHJ1Y3R1cmUsIGEgcHJvY2VzcywgYSB1c2VyPyAnRGVzdHJveScgaW1wbGllcyBzb21lIGtpbmQgb2YgdGVybWluYXRpb24gb3IgY2xlYW51cCBvcGVyYXRpb24uIEFuZCAnY3R4Jy4uLiB0aGF0J3MgYWxtb3N0IGNlcnRhaW5seSBzaG9ydCBmb3IgY29udGV4dC4gTm93LCBjb250ZXh0IGNhbiBtZWFuIGEgbXVsdGl0dWRlIG9mIHRoaW5ncyBkZXBlbmRpbmcgb24gdGhlIHN5c3RlbSBhbmQgZG9tYWluLCByYW5naW5nIGZyb20gc2ltcGxlIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCB0byBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IG5lZWQgdG8gYmUgbWFuYWdlZC4gVGhlcmVmb3JlLCBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIGZ1bmN0aW9uJ3MgcHVycG9zZSBpcyB0byBjbGVhbmx5IGRpc3Bvc2Ugb2Ygb3IgbnVsbGlmeSB0aGUgJ2NvbnRleHQnIGFzc29jaWF0ZWQgd2l0aCB0aGlzICdkYW1vbicuIEknbGwgbmVlZCB0byBsb29rIGRlZXBlciBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiB0byBwaW5wb2ludCB0aGUgc3BlY2lmaWNzLCB0aGUgc2NvcGUsIHRoZSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLCBhbmQgb2YgY291cnNlLCB0aGUgZXJyb3IgaGFuZGxpbmcgaW52b2x2ZWQuIFRoaXMgY291bGQgYmUgYSBjcml0aWNhbCBwYXJ0IG9mIGEgbGFyZ2VyIHByb2Nlc3MsIGFuZCB1bmRlcnN0YW5kaW5nIGl0cyBmdW5jdGlvbiB0aG9yb3VnaGx5IGlzIHBhcmFtb3VudCBiZWZvcmUgbWFraW5nIGNoYW5nZXMgb3IgZXZlbiBpbnRlZ3JhdGluZyBpdCBpbnRvIGEgYnJvYWRlciBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzg3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMDA6MDI6MjMuOTQwMTcxMTA2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5OTcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzQwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzQwOlxcdH1cXG4gNzQxOlxcdFxcbiA3NDI6XFx0dm9pZCBkYW1vbl9kZXN0cm95X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuIDc0MzpcXHR7XFxuIDc0NDpcXHRcXHRzdHJ1Y3QgZGFtb3MgKnMsICpuZXh0X3M7XFxuIDc0NTpcXHRcXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnAsICpuZXh0X3A7XFxuIDc0NjpcXHRcXG4gNzQ3OlxcdFxcdGRhbW9uX2Rlc3Ryb3lfdGFyZ2V0cyhjdHgpO1xcbiA3NDg6XFx0XFxuIDc0OTpcXHRcXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWVfc2FmZShzLCBuZXh0X3MsIGN0eClcXG4gNzUwOlxcdFxcdFxcdGRhbW9uX2Rlc3Ryb3lfc2NoZW1lKHMpO1xcbiA3NTE6XFx0XFxuIDc1MjpcXHRcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZV9zYWZlKHAsIG5leHRfcCwgY3R4KVxcbiA3NTM6XFx0XFx0XFx0ZGFtb25fZGVzdHJveV9wcm9iZShwKTtcXG4gNzU0OlxcdFxcbiA3NTU6XFx0XFx0a2ZyZWUoY3R4KTtcXG4gNzU2OlxcdH1cXG4gNzU3OlxcdFxcbiA3NTg6XFx0c3RhdGljIGJvb2wgZGFtb25fYXR0cnNfZXF1YWxzKGNvbnN0IHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMxLFxcbiA3NTk6XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGRhbW9uX2F0dHJzICphdHRyczIpXFxuIDc2MDpcXHR7XFxuIDc2MTpcXHRcXHRjb25zdCBzdHJ1Y3QgZGFtb25faW50ZXJ2YWxzX2dvYWwgKmlnMSA9IFxcdTAwMjZhdHRyczEtXFx1MDAzZWludGVydmFsc19nb2FsO1xcbiA3NjI6XFx0XFx0Y29uc3Qgc3RydWN0IGRhbW9uX2ludGVydmFsc19nb2FsICppZzIgPSBcXHUwMDI2YXR0cnMyLVxcdTAwM2VpbnRlcnZhbHNfZ29hbDtcXG4gNzYzOlxcdFxcbiA3NjQ6XFx0XFx0cmV0dXJuIGF0dHJzMS1cXHUwMDNlc2FtcGxlX2ludGVydmFsID09IGF0dHJzMi1cXHUwMDNlc2FtcGxlX2ludGVydmFsIFxcdTAwMjZcXHUwMDI2XFxuIDc2NTpcXHRcXHRcXHRhdHRyczEtXFx1MDAzZWFnZ3JfaW50ZXJ2YWwgPT0gYXR0cnMyLVxcdTAwM2VhZ2dyX2ludGVydmFsIFxcdTAwMjZcXHUwMDI2XFxuIDc2NjpcXHRcXHRcXHRhdHRyczEtXFx1MDAzZW9wc191cGRhdGVfaW50ZXJ2YWwgPT0gYXR0cnMyLVxcdTAwM2VvcHNfdXBkYXRlX2ludGVydmFsIFxcdTAwMjZcXHUwMDI2XFxuIDc2NzpcXHRcXHRcXHRhdHRyczEtXFx1MDAzZW1pbl9ucl9yZWdpb25zID09IGF0dHJzMi1cXHUwMDNlbWluX25yX3JlZ2lvbnMgXFx1MDAyNlxcdTAwMjZcXG4gNzY4OlxcdFxcdFxcdGF0dHJzMS1cXHUwMDNlbWF4X25yX3JlZ2lvbnMgPT0gYXR0cnMyLVxcdTAwM2VtYXhfbnJfcmVnaW9ucyBcXHUwMDI2XFx1MDAyNlxcbiA3Njk6XFx0XFx0XFx0aWcxLVxcdTAwM2VhY2Nlc3NfYnAgPT0gaWcyLVxcdTAwM2VhY2Nlc3NfYnAgXFx1MDAyNlxcdTAwMjZcXG4gNzcwOlxcdFxcdFxcdGlnMS1cXHUwMDNlYWdncnMgPT0gaWcyLVxcdTAwM2VhZ2dycyBcXHUwMDI2XFx1MDAyNlxcbiA3NzE6XFx0XFx0XFx0aWcxLVxcdTAwM2VtaW5fc2FtcGxlX3VzID09IGlnMi1cXHUwMDNlbWluX3NhbXBsZV91cyBcXHUwMDI2XFx1MDAyNlxcbiA3NzI6XFx0XFx0XFx0aWcxLVxcdTAwM2VtYXhfc2FtcGxlX3VzID09IGlnMi1cXHUwMDNlbWF4X3NhbXBsZV91cztcXG4gNzczOlxcdH1cXG4gNzc0OlxcdFxcbiA3NzU6XFx0c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9hZ2VfZm9yX25ld19hdHRycyh1bnNpZ25lZCBpbnQgYWdlLFxcbiA3NzY6XFx0XFx0XFx0c3RydWN0IGRhbW9uX2F0dHJzICpvbGRfYXR0cnMsIHN0cnVjdCBkYW1vbl9hdHRycyAqbmV3X2F0dHJzKVxcbiA3Nzc6XFx0e1xcbiA3Nzg6XFx0XFx0cmV0dXJuIGFnZSAqIG9sZF9hdHRycy1cXHUwMDNlYWdncl9pbnRlcnZhbCAvIG5ld19hdHRycy1cXHUwMDNlYWdncl9pbnRlcnZhbDtcXG4gNzc5OlxcdH1cXG4gNzgwOlxcdFxcbiA3ODE6XFx0LyogY29udmVydCBhY2Nlc3MgcmF0aW8gaW4gYnAgKHBlciAxMCwwMDApIHRvIG5yX2FjY2Vzc2VzICovXFxuIDc4MjpcXHRzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX2FjY2Vzc2VzX2JwX3RvX25yX2FjY2Vzc2VzKFxcbiA3ODM6XFx0XFx0XFx0dW5zaWduZWQgaW50IGFjY2Vzc2VzX2JwLCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxcbiA3ODQ6XFx0e1xcbiA3ODU6XFx0XFx0cmV0dXJuIGFjY2Vzc2VzX2JwICogZGFtb25fbWF4X25yX2FjY2Vzc2VzKGF0dHJzKSAvIDEwMDAwO1xcbiA3ODY6XFx0fVxcbiA3ODc6XFx0XFxuIDc4ODpcXHQvKlxcbiA3ODk6XFx0ICogQ29udmVydCBucl9hY2Nlc3NlcyB0byBhY2Nlc3MgcmF0aW8gaW4gYnAgKHBlciAxMCwwMDApLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMDowMjoyMy45NDAzNzI0OTVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjcwNDA2Mjc3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBgZGFtb25fY29tbWl0X2N0eGAgQmVoYXZpb3IqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gYGRhbW9uX2NvbW1pdF9jdHhgIGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgbGlrZWx5IGludm9sdmVkIGluIGNvcHlpbmcgc2NoZW1lcyBhbmQgdGFyZ2V0cy4gVGhhdCdzIGEgY29tbW9uIHBhdHRlcm4gaW4gdGhpcyBraW5kIG9mIGNvbnRleHQuIExldCdzIG5vdCBtYWtlIGFueSBhc3N1bXB0aW9ucyB0aG91Z2gsIGl0J3MgYWx3YXlzIGJlc3QgdG8gYmUgcHJlY2lzZS4gVG8gY29uZmlybSB0aGlzLCBJIG5lZWQgdG8gbG9vayBkaXJlY3RseSBhdCBob3cgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgc2NoZW1lcy4gVGhlIGtleSBwbGFjZSB0byBzdGFydCBsb29raW5nIGlzIGBkYW1vbl9jb21taXRfc2NoZW1lc2AuIFRoYXQgc2hvdWxkIHRlbGwgdGhlIHdob2xlIHN0b3J5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk0NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMDA6MDI6MjYuNjQ0NDM4OTIyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4Njc5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTMzMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTMzMDpcXHRzdGF0aWMgc3RydWN0IGRhbW9uX3RhcmdldCAqZGFtb25fbnRoX3RhcmdldChpbnQgbiwgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbjEzMzE6XFx0e1xcbjEzMzI6XFx0XFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcXG4xMzMzOlxcdFxcdGludCBpID0gMDtcXG4xMzM0OlxcdFxcbjEzMzU6XFx0XFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGN0eCkge1xcbjEzMzY6XFx0XFx0XFx0aWYgKGkrKyA9PSBuKVxcbjEzMzc6XFx0XFx0XFx0XFx0cmV0dXJuIHQ7XFxuMTMzODpcXHRcXHR9XFxuMTMzOTpcXHRcXHRyZXR1cm4gTlVMTDtcXG4xMzQwOlxcdH1cXG4xMzQxOlxcdFxcbjEzNDI6XFx0LypcXG4xMzQzOlxcdCAqIFRoZSBjYWxsZXIgc2hvdWxkIGVuc3VyZSB0aGUgcmVnaW9ucyBvZiBAc3JjIGFyZVxcbjEzNDQ6XFx0ICogMS4gdmFsaWQgKGVuZCBcXHUwMDNlPSBzcmMpIGFuZFxcbjEzNDU6XFx0ICogMi4gc29ydGVkIGJ5IHN0YXJ0aW5nIGFkZHJlc3MuXFxuMTM0NjpcXHQgKlxcbjEzNDc6XFx0ICogSWYgQHNyYyBoYXMgbm8gcmVnaW9uLCBAZHN0IGtlZXBzIGN1cnJlbnQgcmVnaW9ucy5cXG4xMzQ4OlxcdCAqL1xcbjEzNDk6XFx0c3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqZHN0LFxcbjEzNTA6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3RhcmdldCAqc3JjLCB1bnNpZ25lZCBsb25nIHNyY19taW5fcmVnaW9uX3N6KVxcbjEzNTE6XFx0e1xcbjEzNTI6XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqc3JjX3JlZ2lvbjtcXG4xMzUzOlxcdFxcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXM7XFxuMTM1NDpcXHRcXHRpbnQgaSA9IDAsIGVycjtcXG4xMzU1OlxcdFxcbjEzNTY6XFx0XFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHNyY19yZWdpb24sIHNyYylcXG4xMzU3OlxcdFxcdFxcdGkrKztcXG4xMzU4OlxcdFxcdGlmICghaSlcXG4xMzU5OlxcdFxcdFxcdHJldHVybiAwO1xcbjEzNjA6XFx0XFxuMTM2MTpcXHRcXHRyYW5nZXMgPSBrbWFsbG9jX29ianMoKnJhbmdlcywgaSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTik7XFxuMTM2MjpcXHRcXHRpZiAoIXJhbmdlcylcXG4xMzYzOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjEzNjQ6XFx0XFx0aSA9IDA7XFxuMTM2NTpcXHRcXHRkYW1vbl9mb3JfZWFjaF9yZWdpb24oc3JjX3JlZ2lvbiwgc3JjKVxcbjEzNjY6XFx0XFx0XFx0cmFuZ2VzW2krK10gPSBzcmNfcmVnaW9uLVxcdTAwM2VhcjtcXG4xMzY3OlxcdFxcdGVyciA9IGRhbW9uX3NldF9yZWdpb25zKGRzdCwgcmFuZ2VzLCBpLCBzcmNfbWluX3JlZ2lvbl9zeik7XFxuMTM2ODpcXHRcXHRrZnJlZShyYW5nZXMpO1xcbjEzNjk6XFx0XFx0cmV0dXJuIGVycjtcXG4xMzcwOlxcdH1cXG4xMzcxOlxcdFxcbjEzNzI6XFx0c3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0KFxcbjEzNzM6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3RhcmdldCAqZHN0LCBib29sIGRzdF9oYXNfcGlkLFxcbjEzNzQ6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3RhcmdldCAqc3JjLCBib29sIHNyY19oYXNfcGlkLFxcbjEzNzU6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBzcmNfbWluX3JlZ2lvbl9zeilcXG4xMzc2OlxcdHtcXG4xMzc3OlxcdFxcdGludCBlcnI7XFxuMTM3ODpcXHRcXG4xMzc5OlxcdFxcdGVyciA9IGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9ucyhkc3QsIHNyYywgc3JjX21pbl9yZWdpb25fc3opO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMDowMjoyNi42NDQ2Mjc2NjJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQwNDEwMjYxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQganVzdCBoYXBwZW5lZDpcblxuKipEYW1vbiBDb250ZXh0IE1lbW9yeSBMZWFrIFN1c3BlY3RlZCoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEknbSBsb29raW5nIGF0IGhvdyBgZGFtb25fY29tbWl0X2N0eGAgaXMgYmVoYXZpbmcgaGVyZS4gSXQgbG9va3MgbGlrZSBpdCdzIGNvcHlpbmcgZGF0YSBmcm9tIGBwYXJhbV9jdHhgIHRvIGBjdHhgLiBUaGUgY3J1Y2lhbCB0aGluZyBJJ20gZm9jdXNpbmcgb24gaXMgd2hldGhlciBpdCdzIHRyYW5zZmVycmluZyBvd25lcnNoaXAgb2YgdGhlIG1lbW9yeS4gSWYgaXQgKmRvZXNuJ3QqIHRha2Ugb3duZXJzaGlwLCBhbmQgaWYgYHBhcmFtX2N0eGAgaXNuJ3QgcHJvcGVybHkgZGVzdHJveWVkIGFmdGVyd2FyZHMsIHdlJ3JlIGdvaW5nIHRvIGhhdmUgYSBjbGFzc2ljIG1lbW9yeSBsZWFrLiBJdCdzIGEgdGV4dGJvb2sgc2l0dWF0aW9uISBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgcGFyYW1fY3R4YCBpcyBoYW5kbGVkIGFmdGVyIHRoaXMgY29weS4gUmlnaHQgbm93LCBJJ20gbGVhbmluZyB0b3dhcmQgdGhpbmtpbmcgaXQncyBub3QgYmVpbmcgZnJlZWQsIGFuZCB3ZSdyZSBsZWFraW5nLlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIGBkYW1vbl9zeXNmc19jb21taXRfaW5wdXRgIGluIGBtbS9kYW1vbi9zeXNmcy5jYC4gVGhhdCBzaG91bGQgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoaXMuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIGNvbmZpcm0gdGhpcyBzdXNwZWN0ZWQgb3ZlcnNpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzg4OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMDA6MDI6MzAuMDQ4NzMzNzgxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9zeXNmcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxMTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIxMTA6XFx0XFxuMjExMTpcXHRcXHRwYXJhbV9jdHggPSBkYW1vbl9zeXNmc19idWlsZF9jdHgoa2RhbW9uZC1cXHUwMDNlY29udGV4dHMtXFx1MDAzZWNvbnRleHRzX2FyclswXSk7XFxuMjExMjpcXHRcXHRpZiAoSVNfRVJSKHBhcmFtX2N0eCkpXFxuMjExMzpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihwYXJhbV9jdHgpO1xcbjIxMTQ6XFx0XFx0dGVzdF9jdHggPSBkYW1vbl9zeXNmc19uZXdfdGVzdF9jdHgoa2RhbW9uZC1cXHUwMDNlZGFtb25fY3R4KTtcXG4yMTE1OlxcdFxcdGlmICghdGVzdF9jdHgpIHtcXG4yMTE2OlxcdFxcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KHBhcmFtX2N0eCk7XFxuMjExNzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4yMTE4OlxcdFxcdH1cXG4yMTE5OlxcdFxcdGVyciA9IGRhbW9uX2NvbW1pdF9jdHgodGVzdF9jdHgsIHBhcmFtX2N0eCk7XFxuMjEyMDpcXHRcXHRpZiAoZXJyKVxcbjIxMjE6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjEyMjpcXHRcXHRlcnIgPSBkYW1vbl9jb21taXRfY3R4KGtkYW1vbmQtXFx1MDAzZWRhbW9uX2N0eCwgcGFyYW1fY3R4KTtcXG4yMTIzOlxcdG91dDpcXG4yMTI0OlxcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KHRlc3RfY3R4KTtcXG4yMTI1OlxcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KHBhcmFtX2N0eCk7XFxuMjEyNjpcXHRcXHRyZXR1cm4gZXJyO1xcbjIxMjc6XFx0fVxcbjIxMjg6XFx0XFxuMjEyOTpcXHRzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2NvbW1pdF9zY2hlbWVzX3F1b3RhX2dvYWxzKHZvaWQgKmRhdGEpXFxuMjEzMDpcXHR7XFxuMjEzMTpcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqc3lzZnNfa2RhbW9uZCA9IGRhdGE7XFxuMjEzMjpcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7XFxuMjEzMzpcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfY29udGV4dCAqc3lzZnNfY3R4O1xcbjIxMzQ6XFx0XFxuMjEzNTpcXHRcXHRpZiAoIWRhbW9uX3N5c2ZzX2tkYW1vbmRfcnVubmluZyhzeXNmc19rZGFtb25kKSlcXG4yMTM2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjIxMzc6XFx0XFx0LyogVE9ETzogU3VwcG9ydCBtdWx0aXBsZSBjb250ZXh0cyBwZXIga2RhbW9uZCAqL1xcbjIxMzg6XFx0XFx0aWYgKHN5c2ZzX2tkYW1vbmQtXFx1MDAzZWNvbnRleHRzLVxcdTAwM2VuciAhPSAxKVxcbjIxMzk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjE0MDpcXHRcXG4yMTQxOlxcdFxcdGN0eCA9IHN5c2ZzX2tkYW1vbmQtXFx1MDAzZWRhbW9uX2N0eDtcXG4yMTQyOlxcdFxcdHN5c2ZzX2N0eCA9IHN5c2ZzX2tkYW1vbmQtXFx1MDAzZWNvbnRleHRzLVxcdTAwM2Vjb250ZXh0c19hcnJbMF07XFxuMjE0MzpcXHRcXHRyZXR1cm4gZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzeXNmc19jdHgtXFx1MDAzZXNjaGVtZXMsIGN0eCk7XFxuMjE0NDpcXHR9XFxuMjE0NTpcXHRcXG4yMTQ2OlxcdC8qXFxuMjE0NzpcXHQgKiBkYW1vbl9zeXNmc191cGRfc2NoZW1lc19lZmZlY3RpdmVfcXVvdGFzKCkgLSBVcGRhdGUgc2NoZW1lcyBlZmZlY3RpdmUgcXVvdGFzXFxuMjE0ODpcXHQgKiBzeXNmcyBmaWxlcy5cXG4yMTQ5OlxcdCAqIEBkYXRhOlxcdFRoZSBrb2JqZWN0IHdyYXBwZXIgdGhhdCBhc3NvY2lhdGVkIHRvIHRoZSBrZGFtb25kIHRocmVhZC5cXG4yMTUwOlxcdCAqXFxuMjE1MTpcXHQgKiBUaGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSBzY2hlbWVzJyBlZmZlY3RpdmUgcXVvdGFzIG9mIHNwZWNpZmljIGtkYW1vbmQgYW5kXFxuMjE1MjpcXHQgKiB1cGRhdGUgdGhlIHJlbGF0ZWQgdmFsdWVzIGZvciBzeXNmcyBmaWxlcy4gIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZFxcbjIxNTM6XFx0ICogZnJvbSBEQU1PTiBjYWxsYmFja3Mgd2hpbGUgaG9sZGluZyBgYGRhbW9uX3N5ZnNfbG9ja2BgLCB0byBzYWZlbHkgYWNjZXNzIHRoZVxcbjIxNTQ6XFx0ICogREFNT04gY29udGV4dHMtaW50ZXJuYWwgZGF0YSBhbmQgREFNT04gc3lzZnMgdmFyaWFibGVzLlxcbjIxNTU6XFx0ICovXFxuMjE1NjpcXHRzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3VwZF9zY2hlbWVzX2VmZmVjdGl2ZV9xdW90YXModm9pZCAqZGF0YSlcXG4yMTU3OlxcdHtcXG4yMTU4OlxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kID0gZGF0YTtcXG4yMTU5OlxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCA9IGtkYW1vbmQtXFx1MDAzZWRhbW9uX2N0eDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMDA6MDI6MzAuMDQ4OTEwMjAxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMzMxNTkwMDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBNZW1vcnkgTGVhayBpbiBEQU1PTiBSZWNsYW1hdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSByZWxhdGVkIHRvIERBTU9OJ3MgcmVjbGFtYXRpb24gbWVjaGFuaXNtLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpbiBgZGFtb25fc3lzZnNfY29tbWl0X2lucHV0YCwgYGRhbW9uX2Rlc3Ryb3lfY3R4KHBhcmFtX2N0eClgIGlzIGFsd2F5cyBjYWxsZWQgYXQgdGhlIGVuZCwgcmVnYXJkbGVzcyBvZiB0aGUgc3VjY2VzcyBvZiBgZGFtb25fY29tbWl0X2N0eGAuIE5vdywgSSdtIGV4YW1pbmluZyBhIHNwZWNpZmljIHBhdGNoIHdpdGhpbiBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYC4gSSBzZWUgdGhhdCB0aGUgY29kZSBhdHRlbXB0cyB0byBjb21taXQgYSBjb250ZXh0LCBidXQgdGhlbiB0aGVyZSdzIGFuIGBpZiAoIWVycikgcmV0dXJuIDA7YCBzdGF0ZW1lbnQgKmJlZm9yZSogdGhlIGNhbGwgdG8gYGRhbW9uX2Rlc3Ryb3lfY3R4KHBhcmFtX2N0eClgLlxuXG5NeSBjb25jZXJuIGltbWVkaWF0ZWx5IGlzLCBcIldhaXQsIGlmIGBkYW1vbl9jb21taXRfY3R4YCBzdWNjZWVkcyAobWVhbmluZyBgZXJyYCBpcyB6ZXJvKSwgd2UgKnNraXAqIGRlc3Ryb3lpbmcgYHBhcmFtX2N0eGA/IFRoYXQncyBhIG1lbW9yeSBsZWFrIVwiIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhpcywgc28gSSByZS1yZWFkIHRoYXQgc2VjdGlvbiBvZiB0aGUgcGF0Y2gsIGFuZCB5ZXMsIGl0J3MgY2xlYXI6IGlmIG5vIGVycm9yLCB3ZSBzaG9ydC1jaXJjdWl0IHRoZSBmdW5jdGlvbiBhbmQgcmV0dXJuIHdpdGhvdXQgZnJlZWluZyB0aGUgbWVtb3J5LlxuXG5Ob3cgSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgZGVzaWduLiBXaHkgd291bGRuJ3Qgd2Ugd2FudCB0byBkZXN0cm95IHRoZSBjb250ZXh0ICpldmVyeSogdGltZT8gRG9lcyBgZGFtb25fY29tbWl0X2N0eGAgbWF5YmUgdGFrZSBvd25lcnNoaXAgb2YgdGhlIGNvbnRleHQgaW4gc29tZSBjaXJjdW1zdGFuY2VzPyBObywgdGhhdCdzIG5vdCByaWdodCwgYmVjYXVzZSBgZGFtb25fc3lzZnNfY29tbWl0X2lucHV0YCBoYW5kbGVzIGl0cyBkZXN0cnVjdGlvbi5cblxuT2theSwgbGV0J3MgbG9vayBhdCBgZGFtb25fcmVjbGFpbV9pbml0YCBiZWNhdXNlIGl0IGhhcyB0aGUgY29udGV4dCBpbml0aWFsaXphdGlvbi4gSSBzZWUgdGhhdCB0aGVyZSdzIGEgc2FmZXR5IG5ldCB3aGVyZSBgY3R4YCBpcyBkZXN0cm95ZWQgaWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyBpbml0aWFsaXphdGlvbi4gSSdtIHN0YXJ0aW5nIHRvIHRoaW5rLCBpcyB0aGlzIHBhdGNoIGFjdHVhbGx5IGludHJvZHVjaW5nIGEgbGVhaz9cblxuVGhlIGNvbW1pdCBtZXNzYWdlIGlzIHRoZSBuZXh0IHRoaW5nIEkgbmVlZCB0byBjaGVjay4gT2theSwgaXQgc2F5cyBcInN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldy5cIiBXYWl0LCB0aGUgY29tbWl0IG1lc3NhZ2UgaW4gYGRhbW9uX3JlY2xhaW1faW5pdGAgc2F5cyBcIlByZXZlbnQgcG90ZW50aWFsIG1lbW9yeSBsZWFrYWdlLlwiIEJ1dCB0aGlzIHBhdGNoJ3MgYWRkZWQgY29uZGl0aW9uYWwgc3RhdGVtZW50IGluIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgIGlzIGV4YWN0bHkgdGhlIG9wcG9zaXRlOiBpdCBhZGRzIGFuIGVhcmx5IHJldHVybiB0aGF0IHNraXBzIHRoZSBjbGVhbnVwLiBTbywgaWYgYGRhbW9uX2NvbW1pdF9jdHhgIHJldHVybnMgYW4gZXJyb3IsIHdlIGNvcnJlY3RseSBkZXN0cm95IGBwYXJhbV9jdHhgLCBidXQgaWYgaXQgc3VjY2VlZHMsIHdlIGxlYWsgaXQuXG5cblNvLCAqdGhpcyBpcyBhYnNvbHV0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UuKiBUaGUgY29udHJvbCBmbG93IGlzIGRpZmZlcmVudCBkZXBlbmRpbmcgb24gd2hldGhlciBgZGFtb25fY29tbWl0X2N0eGAgc3VjY2VlZHMuIEkganVzdCBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgc2VjdGlvbiBvZiBjb2RlIGlzIHJlYWNoYWJsZS4gT2theSwgYGRhbW9uX3JlY2xhaW1faW5pdGAgaXMgYSBtb2R1bGUgaW5pdCBmdW5jdGlvbiwgc28gaXQncyBvYnZpb3VzbHkgcmVhY2hhYmxlLCBhbmQgYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AgaXMgcmVhY2hhYmxlIGJlY2F1c2UgaXQncyBjYWxsZWQgZnJvbSBgZGFtb25fcmVjbGFpbV9pbml0YCB2aWEgYGRhbW9uX3JlY2xhaW1fdHVybih0cnVlKWAuIE5vdywgSSBuZWVkIHRvIGNoZWNrIGBkYW1vbl9yZWNsYWltX2luaXRgIHRvIHNlZSBob3cgYGRhbW9uX3JlY2xhaW1fdHVybmAgaXMgY2FsbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTExMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAwOjAyOjQwLjM4MDUwNDA0N1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9yZWNsYWltLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDYwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDYwOlxcdCAqL1xcbiA0NjE6XFx0bW9kdWxlX3BhcmFtX2NiKGtkYW1vbmRfcGlkLCBcXHUwMDI2a2RhbW9uZF9waWRfcGFyYW1fb3BzLCBOVUxMLCAwNDAwKTtcXG4gNDYyOlxcdFxcbiA0NjM6XFx0c3RhdGljIGludCBfX2luaXQgZGFtb25fcmVjbGFpbV9pbml0KHZvaWQpXFxuIDQ2NDpcXHR7XFxuIDQ2NTpcXHRcXHRpbnQgZXJyO1xcbiA0NjY6XFx0XFxuIDQ2NzpcXHRcXHRpZiAoIWRhbW9uX2luaXRpYWxpemVkKCkpIHtcXG4gNDY4OlxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuIDQ2OTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gNDcwOlxcdFxcdH1cXG4gNDcxOlxcdFxcdGVyciA9IGRhbW9uX21vZHVsZXNfbmV3X3BhZGRyX2N0eF90YXJnZXQoXFx1MDAyNmN0eCwgXFx1MDAyNnRhcmdldCk7XFxuIDQ3MjpcXHRcXHRpZiAoZXJyKVxcbiA0NzM6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDQ3NDpcXHRcXG4gNDc1OlxcdFxcdGNhbGxfY29udHJvbC5kYXRhID0gY3R4O1xcbiA0NzY6XFx0XFxuIDQ3NzpcXHRcXHQvKiAnZW5hYmxlZCcgaGFzIHNldCBiZWZvcmUgdGhpcyBmdW5jdGlvbiwgcHJvYmFibHkgdmlhIGNvbW1hbmQgbGluZSAqL1xcbiA0Nzg6XFx0XFx0aWYgKGVuYWJsZWQpXFxuIDQ3OTpcXHRcXHRcXHRlcnIgPSBkYW1vbl9yZWNsYWltX3R1cm4odHJ1ZSk7XFxuIDQ4MDpcXHRcXG4gNDgxOlxcdG91dDpcXG4gNDgyOlxcdFxcdGlmIChlcnIgXFx1MDAyNlxcdTAwMjYgZW5hYmxlZClcXG4gNDgzOlxcdFxcdFxcdGVuYWJsZWQgPSBmYWxzZTtcXG4gNDg0OlxcdFxcbiA0ODU6XFx0XFx0LyogUHJldmVudCBwb3RlbmlhbCBtZW1vcnkgbGVha2FnZSAqL1xcbiA0ODY6XFx0XFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNiBjdHgpXFxuIDQ4NzpcXHRcXHRcXHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xcbiA0ODg6XFx0XFx0cmV0dXJuIGVycjtcXG4gNDg5OlxcdH1cXG4gNDkwOlxcdFxcbiA0OTE6XFx0bW9kdWxlX2luaXQoZGFtb25fcmVjbGFpbV9pbml0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMDA6MDI6NDAuMzgwNTk5NjE3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMzY1MTEzOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBEQU1PTiBSZWNsYWltIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgZGFtb25fcmVjbGFpbV9pbml0YCBraWNrcyBvZmYgdGhlIHByb2Nlc3MgYnkgY2FsbGluZyBgZGFtb25fcmVjbGFpbV90dXJuKHRydWUpYCAqb25seSogaWYgdGhlIG1vZHVsZSBwYXJhbWV0ZXIgYGVuYWJsZWRgIGlzIHNldCB0byB0cnVlLiAgVGhhdCBtYWtlcyBzZW5zZS4gSXQncyBhIGNsZWFuIHdheSB0byBjb250cm9sIHRoZSBiZWhhdmlvciBhdCBsb2FkIHRpbWUuIElmIEkgbG9hZCB0aGUgbW9kdWxlIHdpdGggYGVuYWJsZWQ9WWAsIHRoZW4gaXQgY2FsbHMgYGRhbW9uX3JlY2xhaW1fdHVybih0cnVlKWAgd2hpY2ggdGhlbiBjb3JyZWN0bHkgbGVhZHMgaW50byBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKClgLiAgRXhjZWxsZW50LCB0aGUgZmxvdyBpcyByZWFjaGFibGUgYW5kIHNlZW1zIHRvIGJlIHdvcmtpbmcgYXMgZXhwZWN0ZWQuXG5cbk5vdywgbGV0IG1lIGp1c3QgY29uZmlybSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGFyZSBpbiBwbGFjZS4gSSBuZWVkIHRvIGVuc3VyZSBgQ09ORklHX0RBTU9OYCBpcyBlbmFibGVkLCBhbmQgb2J2aW91c2x5LCBgQ09ORklHX0RBTU9OX1JFQ0xBSU1gLlxuXG5Ib2xkIG9uIGEgc2Vjb25k4oCmIGlzbid0IGBEQU1PTl9SRUNMQUlNYCBkZXBlbmRlbnQgb24gYERBTU9OX1BBRERSYD8gSSdkIGJldHRlciBkb3VibGUtY2hlY2sgdGhlIGBtbS9kYW1vbi9LY29uZmlnYCBmaWxlIHRvIGJlIGNvbXBsZXRlbHkgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMgd2l0aCB0aGUgY29uZmlndXJhdGlvbiBzZXR1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcwMDIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMDowMjo0NC41MTcxMTU1NTlaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MDpcXHRcXHRoZWxwXFxuICA4MTpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgS3VuaXQgdGVzdCBzdWl0ZS5cXG4gIDgyOlxcdFxcbiAgODM6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcXG4gIDg0OlxcdFxcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXFxuICA4NTpcXHRcXG4gIDg2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDg3OlxcdFxcbiAgODg6XFx0Y29uZmlnIERBTU9OX1JFQ0xBSU1cXG4gIDg5OlxcdFxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXFxcIlxcbiAgOTA6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxcbiAgOTE6XFx0XFx0aGVscFxcbiAgOTI6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgcmVjbGFtYXRpb24gc3Vic3lzdGVtLiAgSXQgZmluZHMgcGFnZXNcXG4gIDkzOlxcdFxcdCAgdGhhdCBub3QgYWNjZXNzZWQgZm9yIGEgbG9uZyB0aW1lIChjb2xkKSB1c2luZyBEQU1PTiBhbmQgcmVjbGFpbVxcbiAgOTQ6XFx0XFx0ICB0aG9zZS5cXG4gIDk1OlxcdFxcbiAgOTY6XFx0XFx0ICBUaGlzIGlzIHN1Z2dlc3RlZCB0byBiZSB1c2VkIGFzIGEgcHJvYWN0aXZlIGFuZCBsaWdodHdlaWdodFxcbiAgOTc6XFx0XFx0ICByZWNsYW1hdGlvbiB1bmRlciBsaWdodCBtZW1vcnkgcHJlc3N1cmUsIHdoaWxlIHRoZSB0cmFkaXRpb25hbCBwYWdlXFxuICA5ODpcXHRcXHQgIHNjYW5uaW5nLWJhc2VkIHJlY2xhbWF0aW9uIGlzIHVzZWQgZm9yIGhlYXZ5IHByZXNzdXJlLlxcbiAgOTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAwOjAyOjQ0LjUxNzIwMDk0OVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzEzNTczNjI0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRlcGVuZGVuY3kgQW5hbHlzaXMgYW5kIENvbmZpZ3VyYXRpb24gTG9naWMqKlxuXG5SaWdodCwgc28gaXQgbG9va3MgbGlrZSBgREFNT05fUkVDTEFJTWAgaXMgYnVpbHQgb24gdG9wIG9mIGBEQU1PTl9QQUREUmAsIGFuZCBgREFNT05fUEFERFJgIGl0c2VsZiBpcyByZWxpYW50IG9uIGBEQU1PTmAuIFRoaXMgaXMgcHJldHR5IHN0YW5kYXJkIHN0dWZmIOKAkyBhIGNsZWFyIGhpZXJhcmNoeSBvZiBkZXBlbmRlbmNpZXMuIFRoZXJlZm9yZSwgaW4gb3JkZXIgdG8gZ2V0IHRoZSBmdWxsIGZ1bmN0aW9uYWxpdHksIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBlbmFibGUgYWxsIHRocmVlOiBgREFNT05gLCBgREFNT05fUEFERFJgLCBhbmQgYERBTU9OX1JFQ0xBSU1gLiBJdCdzIHRoZSBvbmx5IGxvZ2ljYWwgYXBwcm9hY2ggdG8gZW5zdXJlIHRoZSBjb3JyZWN0IG9wZXJhdGlvbiBvZiBldmVyeXRoaW5nLlxuXG5Ob3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIGBEQU1PTl9QQUREUmAgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIEdvdHRhIG1ha2Ugc3VyZSB0aGUgZm91bmRhdGlvbiBpcyBzb2xpZCBiZWZvcmUgYnVpbGRpbmcgdXB3YXJkcywgeW91IGtub3c/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NzAwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMDowMzo0Ny42NTI5NDA0NDZaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3ODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDA6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBNTVVcXG4gIDQxOlxcdFxcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xcbiAgNDI6XFx0XFx0ZGVmYXVsdCBEQU1PTlxcbiAgNDM6XFx0XFx0aGVscFxcbiAgNDQ6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXFxuICA0NTpcXHRcXHQgIHRoYXQgd29yayBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy5cXG4gIDQ2OlxcdFxcbiAgNDc6XFx0Y29uZmlnIERBTU9OX1BBRERSXFxuICA0ODpcXHRcXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbiAgNDk6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBNTVVcXG4gIDUwOlxcdFxcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xcbiAgNTE6XFx0XFx0ZGVmYXVsdCBEQU1PTlxcbiAgNTI6XFx0XFx0aGVscFxcbiAgNTM6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXFxuICA1NDpcXHRcXHQgIHRoYXQgd29ya3MgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLlxcbiAgNTU6XFx0XFxuICA1NjpcXHRjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbiAgNTc6XFx0XFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgNTg6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9WQUREUiBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxuICA1OTpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMDowMzo0Ny42NTMxMzA5NzVaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYzMzI0MTExMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBEQU1PTidzIFJlY2xhbWF0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1PTml0b3IpIHN1YnN5c3RlbSBoYW5kbGVzIHBoeXNpY2FsIGFkZHJlc3MgbW9uaXRvcmluZyAoYERBTU9OX1BBRERSYCkgYW5kIHJlY2xhbWF0aW9uLiBSaWdodCBvZmYgdGhlIGJhdCwgaXQncyBjbGVhciB0aGF0IGBEQU1PTl9QQUREUmAgaXMgZGVwZW5kZW50IG9uIGJvdGggYERBTU9OYCBpdHNlbGYgYW5kIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBVbml0IChgTU1VYCkgYmVpbmcgZW5hYmxlZC4gTWFrZXMgc2Vuc2Ug4oCTIHdpdGhvdXQgdGhvc2UsIHRoZXJlJ3Mgbm8gZm91bmRhdGlvbiBmb3IgdGhpcyB0byB3b3JrLlxuXG5UbyBnZXQgYWxsIG9mIHRoaXMgd29ya2luZyBwcm9wZXJseSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ3ZlIGdvdCB0aHJlZSBjb25maWdzIHNldDogYERBTU9OYCwgYERBTU9OX1BBRERSYCwgYW5kIGBEQU1PTl9SRUNMQUlNYC5cblxuTm93LCB3aGF0IGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBkcml2aW5nIHRoaXMgcmVjbGFtYXRpb24gcHJvY2Vzcz8gTGV0J3Mgc2VlLi4uIEkndmUgaWRlbnRpZmllZCBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCBhbmQgYGRhbW9uX3JlY2xhaW1faW5pdGAgYXMgdGhlIHByaW1hcnkgZm9jdXMgcG9pbnRzLlxuXG5BaCwgcmlnaHQsIGBkYW1vbl9yZWNsYWltX2luaXRgIGlzIHRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24g4oCTIHNvIGl0J3Mgb25seSBjYWxsZWQgb25jZSB3aGVuIHRoZSBtb2R1bGUgbG9hZHMuIEdvb2QgdG8gcmVtZW1iZXIuXG5cbkJ1dCBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYC4uLiB0aGF0J3MgdGhlIGludGVyZXN0aW5nIG9uZS4gSXQncyB0cmlnZ2VyZWQgZWl0aGVyIHdoZW4gc29tZW9uZSB3cml0ZXMgdG8gdGhlIGBjb21taXRfaW5wdXRzYCBzeXNmcyBlbnRyeSBvciBjaGFuZ2VzIGEgbW9kdWxlIHBhcmFtZXRlci4gVGhhdCdzIGhvdyB3ZSdyZSBnb2luZyB0byBkeW5hbWljYWxseSBjb25maWd1cmUgdGhlIHJlY2xhaW0gYmVoYXZpb3IuIEkgc2hvdWxkIHByb2JhYmx5IHRyYWNlIHRoZSBjYWxscyB0byBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHJhbmdlIG9mIHNjZW5hcmlvcyB3aGVuIHRoZSBwYXJhbWV0ZXJzIGFyZSBhcHBsaWVkLiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyByZWFsLXdvcmxkIGJlaGF2aW9yIGFuZCBpbnRlcmFjdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MjQ4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMDA6MDM6NTIuMjg2Mzc0ODU2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjI2MTA2NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL3JlY2xhaW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9yZWNsYWltLmM9MTY5PXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX3JlY2xhaW1fbmV3X3NjaGVtZSh1bnNpZ25lZCBsb25nIGFnZ3JfaW50ZXJ2YWwpXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMTk1LVxcbm1tL2RhbW9uL3JlY2xhaW0uYzoxOTY6c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcXG5tbS9kYW1vbi9yZWNsYWltLmMtMTk3LXtcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0yNzk9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfZm4odm9pZCAqYXJnKVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yODAte1xcbm1tL2RhbW9uL3JlY2xhaW0uYzoyODE6XFx0cmV0dXJuIGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycygpO1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0yODItfVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTM0MT1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fdHVybihib29sIG9uKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTM0Ny1cXG5tbS9kYW1vbi9yZWNsYWltLmM6MzQ4OlxcdGVyciA9IGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycygpO1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0zNDktXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMDA6MDM6NTIuNjQ4OTk0Mjk3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxOTE0OTk5NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgbXkgbWVudGFsIGdlYXJzIGFyZSB0dXJuaW5nLi4uXG5cbioqRm9jdXNpbmcgb24gdGhlIFJlY2xhaW0gTWVjaGFuaXNtKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgcmVjbGFpbSBmdW5jdGlvbmFsaXR5LCBzcGVjaWZpY2FsbHksIGhvdyBpdCdzIGJlaW5nIGltcGxlbWVudGVkLiBJdCBsb29rcyBsaWtlIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgIGlzIGEgcmVhbGx5IGNydWNpYWwgZnVuY3Rpb24gaGVyZTsgdGhhdCBzZWVtcyBsaWtlIGEga2V5IGZvY3VzIHBvaW50LiBUaGVuLCBJIGFsc28gbmVlZCB0byBjb25zaWRlciBgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX2ZuYCBhbmQgdGhlIGBkYW1vbl9yZWNsYWltX3R1cm5gIGZ1bmN0aW9uLCB0aG9zZSBhcmUgZGVmaW5pdGVseSByZWxldmFudCBhcyB3ZWxsLCBpdCBmZWVscy4gSSBuZWVkIHRvIGtlZXAgdGhvc2UgYXQgdGhlIGZvcmVmcm9udC5cblxuQnV0LCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAsIGl0J3MgYWx3YXlzIHdpc2UgdG8gYmUgdGhvcm91Z2guIEknbGwgdGFrZSBhIHF1aWNrIGxvb2sgYXJvdW5kIHRvIGNvbmZpcm0gdGhhdCB0aGVzZSBhcmUgdGhlICpvbmx5KiBmdW5jdGlvbnMgdGhhdCBoYXZlIHVuZGVyZ29uZSBhbnkgbW9kaWZpY2F0aW9ucyByZWxhdGVkIHRvIHRoaXMgcmVjbGFpbSBtZWNoYW5pc20uIEdvdHRhIGRvdWJsZS1jaGVjayBpZiB0aGVyZSdzIGFueXRoaW5nIGVsc2UgbHVya2luZyB0aGF0IGNvdWxkIGFmZmVjdCB0aGUgb3ZlcmFsbCBwaWN0dXJlLiBKdXN0IGEgcXVpY2sgc2NhbiwgeW91IGtub3c/IENhbid0IGJlIHRvbyBjYXJlZnVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTA2OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAwOjAzOjU1Ljg0MDQ5ODc0MloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY4MTUyMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fZGVzdHJveV9jdHhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vcmVjbGFpbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3JlY2xhaW0uYz0xOTY9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNzQtb3V0Olxcbm1tL2RhbW9uL3JlY2xhaW0uYzoyNzU6XFx0ZGFtb25fZGVzdHJveV9jdHgocGFyYW1fY3R4KTtcXG5tbS9kYW1vbi9yZWNsYWltLmMtMjc2LVxcdHJldHVybiBlcnI7XFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9NDYzPXN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3JlY2xhaW1faW5pdCh2b2lkKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTQ4Ni1cXHRpZiAoZXJyIFxcdTAwMjZcXHUwMDI2IGN0eClcXG5tbS9kYW1vbi9yZWNsYWltLmM6NDg3OlxcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTQ4OC1cXHRyZXR1cm4gZXJyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMDowMzo1NS44OTczMjA0MloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTM2MTAwNTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE1lbW9yeSBMZWFrIGluIERhbW9uIFJlY2xhbWF0aW9uKipcblxuT2theSwgc28gSSd2ZSBuYXJyb3dlZCBpdCBkb3duOiB0aGUgY2hhbmdlcyBhcmUgc29sZWx5IHdpdGhpbiBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCBhbmQgYGRhbW9uX3JlY2xhaW1faW5pdGAuIE15IGluaXRpYWwgcmVhY3Rpb24gd2FzIHRoYXQgdGhlIHBhdGNoLCBpcm9uaWNhbGx5LCBtaWdodCBiZSBmaXhpbmcgb25lIGxlYWsgd2hpbGUgaW50cm9kdWNpbmcgYW5vdGhlci4gSW4gZmFjdCwgaXQgc2VlbXMgSSB3YXMgcmlnaHQsIGJ1dCBsZXQgbWUgZG91YmxlLWNoZWNrLiBUaGUgaW50cm9kdWN0aW9uIG9mIGEgbGVhayBpbiBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcgdG8gY2F0Y2ggaXQgZWFybHkhXG5cbkhvbGQgb24sIGxldCBtZSBiZSBzdXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgb3duZXJzaGlwIGFuZCBsaWZlY3ljbGUgb2YgdGhlIGNvbnRleHQgYmVpbmcgY29waWVkLiBMZXQncyBsb29rIGF0IGBkYW1vbl9jb21taXRfY3R4YCBhZ2FpbjpcblxuYGBgY1xuaW50IGRhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG57XG5cdGludCBlcnI7XG5cdHN0cnVjdCBkYW1vcyAqc2NoZW1lO1xuXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcblxuXHRkc3QtXHUwMDNlbWF5YmVfY29ycnVwdGVkID0gdHJ1ZTtcbi4uLlxuXHRlcnIgPSBkYW1vbl9jb21taXRfc2NoZW1lcyhkc3QsIHNyYyk7XG5cdGlmIChlcnIpXG5cdFx0cmV0dXJuIGVycjtcblx0ZXJyID0gZGFtb25fY29tbWl0X3RhcmdldHMoZHN0LCBzcmMpO1xuXHRpZiAoZXJyKVxuXHRcdHJldHVybiBlcnI7XG4uLi5cblx0cmV0dXJuIDA7XG59XG5gYGBcblxuUmlnaHQsIGl0IGNvcGllcyB0aGUgY29uZmlndXJhdGlvbiBmcm9tIGBzcmNgIHRvIGBkc3RgLiBJdCAqZG9lc24ndCogZnJlZSBgc3JjYCBvciB0YWtlIG93bmVyc2hpcC4gVGhhdCBtZWFucyB0aGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nIGBzcmNgLCB3aGljaCwgaW4gdGhpcyBjYXNlLCBpcyBgcGFyYW1fY3R4YC5cblxuTm93IGxldCdzIGNvbXBhcmUgdGhlIGNvZGUgYmVmb3JlIGFuZCBhZnRlciB0aGUgcGF0Y2guIEJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBjb2RlIHdhcyBjb3JyZWN0OlxuXG5gYGBjXG5cdGVyciA9IGRhbW9uX2NvbW1pdF9jdHgoY3R4LCBwYXJhbV9jdHgpO1xub3V0OlxuXHRkYW1vbl9kZXN0cm95X2N0eChwYXJhbV9jdHgpO1xuXHRyZXR1cm4gZXJyO1xuYGBgXG5cbkl0IGVuc3VyZXMgYHBhcmFtX2N0eGAgaXMgZnJlZWQsIHJlZ2FyZGxlc3Mgb2YgdGhlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiBgZGFtb25fY29tbWl0X2N0eGAuXG5cbkFmdGVyIHRoZSBwYXRjaCwgaG93ZXZlcjpcblxuYGBgY1xuXHRlcnIgPSBkYW1vbl9jb21taXRfY3R4KGN0eCwgcGFyYW1fY3R4KTtcblxuXHRpZiAoIWVycilcblx0XHRyZXR1cm4gMDtcbm91dDpcblx0ZGFtb25fZGVzdHJveV9jdHgocGFyYW1fY3R4KTtcblx0cmV0dXJuIGVycjtcbmBgYFxuXG5JZiBgZGFtb25fY29tbWl0X2N0eGAgc3VjY2VlZHMgKHJldHVybnMgYDBgKSwgaXQgKnNraXBzKiB0aGUgYGRhbW9uX2Rlc3Ryb3lfY3R4KHBhcmFtX2N0eClgIGNhbGwhIFRoYXQncyBpdCwgdGhhdCdzIHRoZSBsZWFrLiBgcGFyYW1fY3R4YCBpcyBub3cgb3JwaGFuZWQgYW5kIGxlYWtzLlxuXG5UaGUgYXV0aG9yIHByb2JhYmx5IG1pc3VuZGVyc3Rvb2Qgb3duZXJzaGlwIHNlbWFudGljcywgb3IgcGVyaGFwcyB0aGV5IHRob3VnaHQgdGhhdCBgZGFtb25fY29tbWl0X2N0eGAgbm93IHRha2VzIG93bmVyc2hpcCBvZiB0aGUgc291cmNlIGNvbnRleHQuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayBpZiB0aGVyZSB3ZXJlIGFueSByZWNlbnQgY2hhbmdlcyB0aGF0IGNvdWxkIGNhdXNlIHRoZW0gdG8gdGhpbmsgdGhpcywgYnV0IG15IGd1ZXNzIGlzIHRoYXQgaXMgYSBmYWxzZSBhc3N1bXB0aW9uLiBUaGlzIG5lZWRzIHRvIGJlIGZpeGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTU4MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMDowNDowMy44MzM0MjMzNDNaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NjA3NTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX2NvbW1pdF9jdHhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0xNTI5PXN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNTYwLS8qKlxcbm1tL2RhbW9uL2NvcmUuYzoxNTYxOiAqIGRhbW9uX2NvbW1pdF9jdHgoKSAtIENvbW1pdCBwYXJhbWV0ZXJzIG9mIGEgREFNT04gY29udGV4dCB0byBhbm90aGVyLlxcbm1tL2RhbW9uL2NvcmUuYy0xNTYyLSAqIEBkc3Q6XFx0VGhlIGNvbW1pdCBkZXN0aW5hdGlvbiBEQU1PTiBjb250ZXh0Llxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE1NzItICovXFxubW0vZGFtb24vY29yZS5jOjE1NzM6aW50IGRhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXFxubW0vZGFtb24vY29yZS5jLTE1NzQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMDowNDowMy45MDkwMzY2ODFaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc2NTA1Mzg2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkNoZWNraW5nIGBkYW1vbl9jb21taXRfY3R4YCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gcmV2aXNpdCBgZGFtb25fY29tbWl0X2N0eGAuIEl0J3MgY3J1Y2lhbCwgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBvciBvdmVybG9va2VkIGEgcG90ZW50aWFsIGVkZ2UgY2FzZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgY3VycmVudCBzdGF0ZSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIEkgaGF2ZSBhIGZlZWxpbmcgSSBzaG91bGQgZm9jdXMgb24gWCwgWSBhbmQgWi4uLiB0aG9zZSBhcmUgdGhlIGFyZWFzIHRoYXQgYWx3YXlzIHNlZW0gdG8gYmUgYSBwb2ludCBvZiBwb3RlbnRpYWwgY29udGVudGlvbi4gTGV0IG1lIHF1aWNrbHkgc2NhbiB0aHJvdWdoIHRoZSBpbXBsZW1lbnRhdGlvbiBhbmQgdGhlIHJlbGV2YW50IGRvY3VtZW50YXRpb24sIHNwZWNpZmljYWxseSBsb29raW5nIGZvcuKApiBSaWdodCwgZ290IGl0LiBOb3csIGdpdmVuIG15IGN1cnJlbnQgbWVudGFsIG1vZGVsLCBsZXQncyBzZWUgaG93IHRoYXQgdmFyaWFibGUgaXMgYWN0dWFsbHkgYmVpbmcgdXNlZCBpbiBwcmFjdGljZSwgcmF0aGVyIHRoYW4gaW4gdGhlb3J5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk0NCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAwOjA0OjA2LjY3NDA5MzA1NloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzM1OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1NzMsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE1NzM6XFx0aW50IGRhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXFxuMTU3NDpcXHR7XFxuMTU3NTpcXHRcXHRpbnQgZXJyO1xcbjE1NzY6XFx0XFx0c3RydWN0IGRhbW9zICpzY2hlbWU7XFxuMTU3NzpcXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcXG4xNTc4OlxcdFxcbjE1Nzk6XFx0XFx0ZHN0LVxcdTAwM2VtYXliZV9jb3JydXB0ZWQgPSB0cnVlO1xcbjE1ODA6XFx0XFx0aWYgKCFpc19wb3dlcl9vZl8yKHNyYy1cXHUwMDNlbWluX3JlZ2lvbl9zeikpXFxuMTU4MTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNTgyOlxcdFxcbjE1ODM6XFx0XFx0Lyogbm9kZV9lbGlnaWJsZV9tZW1fYnAgbWV0cmljIHJlcXVpcmVzIFBBRERSIG9wcyAqL1xcbjE1ODQ6XFx0XFx0aWYgKHNyYy1cXHUwMDNlb3BzLmlkICE9IERBTU9OX09QU19QQUREUikge1xcbjE1ODU6XFx0XFx0XFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHNjaGVtZSwgc3JjKSB7XFxuMTU4NjpcXHRcXHRcXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXFx1MDAyNnNjaGVtZS1cXHUwMDNlcXVvdGE7XFxuMTU4NzpcXHRcXG4xNTg4OlxcdFxcdFxcdFxcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgcXVvdGEpIHtcXG4xNTg5OlxcdFxcdFxcdFxcdFxcdGlmIChnb2FsLVxcdTAwM2VtZXRyaWMgPT1cXG4xNTkwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdERBTU9TX1FVT1RBX05PREVfRUxJR0lCTEVfTUVNX0JQKVxcbjE1OTE6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTU5MjpcXHRcXHRcXHRcXHR9XFxuMTU5MzpcXHRcXHRcXHR9XFxuMTU5NDpcXHRcXHR9XFxuMTU5NTpcXHRcXG4xNTk2OlxcdFxcdGVyciA9IGRhbW9uX2NvbW1pdF9zY2hlbWVzKGRzdCwgc3JjKTtcXG4xNTk3OlxcdFxcdGlmIChlcnIpXFxuMTU5ODpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjE1OTk6XFx0XFx0ZXJyID0gZGFtb25fY29tbWl0X3RhcmdldHMoZHN0LCBzcmMpO1xcbjE2MDA6XFx0XFx0aWYgKGVycilcXG4xNjAxOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTYwMjpcXHRcXHQvKlxcbjE2MDM6XFx0XFx0ICogc2NoZW1lcyBhbmQgdGFyZ2V0cyBzaG91bGQgYmUgdXBkYXRlZCBmaXJzdCwgc2luY2VcXG4xNjA0OlxcdFxcdCAqIDEuIGRhbW9uX3NldF9hdHRycygpIHVwZGF0ZXMgbW9uaXRvcmluZyByZXN1bHRzIG9mIHRhcmdldHMgYW5kXFxuMTYwNTpcXHRcXHQgKiBuZXh0X2FwcGx5X3NpcyBvZiBzY2hlbWVzLCBhbmRcXG4xNjA2OlxcdFxcdCAqIDIuIG9wcyB1cGRhdGUgc2hvdWxkIGJlIGRvbmUgYWZ0ZXIgcGlkIGhhbmRsaW5nIGlzIGRvbmUgKHRhcmdldFxcbjE2MDc6XFx0XFx0ICogICAgY29tbWl0dGluZyByZXF1aXJlIHB1dHRpbmcgcGlkcykuXFxuMTYwODpcXHRcXHQgKi9cXG4xNjA5OlxcdFxcdGlmICghZGFtb25fYXR0cnNfZXF1YWxzKFxcdTAwMjZkc3QtXFx1MDAzZWF0dHJzLCBcXHUwMDI2c3JjLVxcdTAwM2VhdHRycykpIHtcXG4xNjEwOlxcdFxcdFxcdGVyciA9IGRhbW9uX3NldF9hdHRycyhkc3QsIFxcdTAwMjZzcmMtXFx1MDAzZWF0dHJzKTtcXG4xNjExOlxcdFxcdFxcdGlmIChlcnIpIHtcXG4xNjEyOlxcdFxcdFxcdFxcdGRhbW9uX3JldmVydF90YXJnZXRfY29tbWl0cyhkc3QsIE5VTEwsIHNyYyk7XFxuMTYxMzpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjE2MTQ6XFx0XFx0XFx0fVxcbjE2MTU6XFx0XFx0fVxcbjE2MTY6XFx0XFx0ZHN0LVxcdTAwM2VwYXVzZSA9IHNyYy1cXHUwMDNlcGF1c2U7XFxuMTYxNzpcXHRcXHRkc3QtXFx1MDAzZW9wcyA9IHNyYy1cXHUwMDNlb3BzO1xcbjE2MTg6XFx0XFx0ZXJyID0gZGFtb25fY29tbWl0X3Byb2Jlcyhkc3QsIHNyYyk7XFxuMTYxOTpcXHRcXHRpZiAoZXJyKVxcbjE2MjA6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xNjIxOlxcdFxcdGRzdC1cXHUwMDNlYWRkcl91bml0ID0gc3JjLVxcdTAwM2VhZGRyX3VuaXQ7XFxuMTYyMjpcXHRcXHRkc3QtXFx1MDAzZW1pbl9yZWdpb25fc3ogPSBzcmMtXFx1MDAzZW1pbl9yZWdpb25fc3o7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAwOjA0OjA2LjY3NDI2ODk4NVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mzg2MzYwNTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGp1c3QgcmV2aWV3ZWQgdGhpcyBjb2RlLCBhbmQgaGVyZSdzIG15IGJyZWFrZG93biBvZiB3aGF0J3MgaGFwcGVuaW5nLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCdzIHN0cmFpZ2h0Zm9yd2FyZDsgaXQncyBqdXN0IGEgY29weSBvZiB0aGUgdmFsdWVzIGFuZCB0aGVuIGNhbGxzIGBkYW1vbl9jb21taXRfc2NoZW1lc2AsIGBkYW1vbl9jb21taXRfdGFyZ2V0c2AsIGFuZCBgZGFtb25fY29tbWl0X3Byb2Jlc2AuIFRoZSBjcnVjaWFsIHRoaW5nIEkndmUgbm90aWNlZCwgYW5kIGl0J3MgYSBiaXQgYWxhcm1pbmcsIGlzIHRoYXQgaXQgKmRvZXNuJ3QqIGZyZWUgYHNyY2AuIFRoYXQgc2NyZWFtcyBtZW1vcnkgbGVhayBpbiBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCwgYXMgYW4gZXhwZXJ0LCBJIGNhbiBzYXkgdGhhdCBtZWFucyBmdXp6aW5nIGl0LCBmb3IgaW5zdGFuY2Ugd2l0aCBzeXprYWxsZXIsIHdpbGwgYWJzb2x1dGVseSB0cmlnZ2VyIGttZW1sZWFrLlxuXG5TbywgaW4gdGVybXMgb2YgcHJpb3JpdGl6aW5nIHRoaXMgZm9yIHJldmlldyBhbmQgdGVzdGluZywgYFdvcnRoRnV6emluZ2AgaXMgYSBkZWZpbml0ZSB5ZXMuIEknbGwgbmVlZCB0byBmb2N1cyBvbiBhIGZldyBrZXkgc3ltYm9sczogYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AsIGBkYW1vbl9yZWNsYWltX2luaXRgLCBgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlYCwgYW5kIGBkYW1vbl9yZWNsYWltX3R1cm5gLlxuXG5SZWdhcmRpbmcgdGhlIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zLCBJJ3ZlIGdvdCBgREFNT05gLCBgREFNT05fUEFERFJgLCBhbmQgYERBTU9OX1JFQ0xBSU1gLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gTGV0J3Mgc2VlLi4uIGBEQU1PTl9SRUNMQUlNYCBpbmRlZWQgZGVwZW5kcyBvbiBgREFNT05fUEFERFJgLiBBbmQgYERBTU9OX1BBRERSYCByZXF1aXJlcyBib3RoIGBEQU1PTmAgYW5kIGBNTVVgLiBTbyBhbGwgdGhvc2UgY29uZmlncyBzZWVtIGNvcnJlY3QgYW5kIHZhbGlkLlxuXG5BIHF1aWNrIHRob3VnaHQuLi4gaG9sZCBvbiwgYGRhbW9uX3JlY2xhaW1faW5pdGAgaXMgbWFya2VkIGFzIGBfX2luaXRgLCBtZWFuaW5nIGl0J3Mgb25seSBjYWxsZWQgb25jZSBhdCBtb2R1bGUgbG9hZC4gU28sIHRoZSBpbnRlcmVzdGluZyBmdW5jdGlvbiBjYWxscyBhcmUgYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AgaXMgY2FsbGVkIHZpYSBgZGFtb25fcmVjbGFpbV90dXJuYCBhbmQgYGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZWAuIExvb2tpbmcgYXQgYGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZWAsIGl0J3MgYSBzeXNmcyBvciBtb2R1bGUgcGFyYW1ldGVyIHN0b3JlIGZ1bmN0aW9uLlxuXG5XYWl0IGEgc2Vjb25kLCB0aGF0IG1lYW5zIHN5emthbGxlciBjYW4gZGlyZWN0bHkgdHJpZ2dlciBpdCBieSB3cml0aW5nIHRvIGAvc3lzL21vZHVsZS9kYW1vbl9yZWNsYWltL3BhcmFtZXRlcnMvY29tbWl0X2lucHV0c2AuIE5vdywgdGhhdCdzIHVzZWZ1bCEgVGhhdCdzIGdvaW5nIHRvIGJlIHRoZSBwcmltZSB0YXJnZXQgZm9yIGluaXRpYWwgZnV6emluZy4gU28sIEkgbmVlZCB0byB0YWtlIGEgY2xvc2UgbG9vayBhdCBgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE5MjksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMDowNDoxMy4wNjA2MzI5MzRaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0OTE0MDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9yZWNsYWltLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vcmVjbGFpbS5jPTI3OT1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19mbih2b2lkICphcmcpXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMjgzLVxcbm1tL2RhbW9uL3JlY2xhaW0uYzoyODQ6c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yODUtXFx0XFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0zMTY9c3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIGNvbW1pdF9pbnB1dHNfcGFyYW1fb3BzID0ge1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0zMTctXFx0LmZsYWdzID0gS0VSTkVMX1BBUkFNX09QU19GTF9OT0FSRyxcXG5tbS9kYW1vbi9yZWNsYWltLmM6MzE4OlxcdC5zZXQgPSBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmUsXFxubW0vZGFtb24vcmVjbGFpbS5jLTMxOS1cXHQuZ2V0ID0gcGFyYW1fZ2V0X2Jvb2wsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAwOjA0OjEzLjEyNTU1MzIzM1oiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDE5NTU0MTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIHRoZSBEQU1PTiBSZWNsYWltIENvbW1pdCBJbnB1dHMgU3RvcmUqKlxuXG5Pa2F5LCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgYSBtb2R1bGUgcGFyYW1ldGVyLCBubyBxdWVzdGlvbiBhYm91dCBpdC4gVGhhdCBtZWFucyBgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlYCBpcyB0aGUga2V5IHN5bWJvbCBJIHNob3VsZCBiZSBmb2N1c2luZyBvbiByaWdodCBub3cuIFxuXG5Ob3csIGJlZm9yZSBJIGRpZyB0b28gZGVlcCwgbGV0J3MganVzdCBkbyBhIHF1aWNrIHNjYW4gdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gQXJlIHRoZXJlIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGNvbnNpZGVyIGZvciB0aGlzIGBEQU1PTl9SRUNMQUlNYCBmZWF0dXJlPyBJJ2xsIHByb2JhYmx5IG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBgbW0vZGFtb24vS2NvbmZpZ2AgZmlsZSBhZ2Fpbi4gQmV0dGVyIHRvIGJlIHRob3JvdWdoIGFuZCBjYXRjaCBhbnl0aGluZyBlYXJseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMxMDQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMDowNDoxNi4xNDUxMDkzMzJaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5MDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODgsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODg6XFx0Y29uZmlnIERBTU9OX1JFQ0xBSU1cXG4gIDg5OlxcdFxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXFxcIlxcbiAgOTA6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxcbiAgOTE6XFx0XFx0aGVscFxcbiAgOTI6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgcmVjbGFtYXRpb24gc3Vic3lzdGVtLiAgSXQgZmluZHMgcGFnZXNcXG4gIDkzOlxcdFxcdCAgdGhhdCBub3QgYWNjZXNzZWQgZm9yIGEgbG9uZyB0aW1lIChjb2xkKSB1c2luZyBEQU1PTiBhbmQgcmVjbGFpbVxcbiAgOTQ6XFx0XFx0ICB0aG9zZS5cXG4gIDk1OlxcdFxcbiAgOTY6XFx0XFx0ICBUaGlzIGlzIHN1Z2dlc3RlZCB0byBiZSB1c2VkIGFzIGEgcHJvYWN0aXZlIGFuZCBsaWdodHdlaWdodFxcbiAgOTc6XFx0XFx0ICByZWNsYW1hdGlvbiB1bmRlciBsaWdodCBtZW1vcnkgcHJlc3N1cmUsIHdoaWxlIHRoZSB0cmFkaXRpb25hbCBwYWdlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAwOjA0OjE2LjE0NTIyOTk5MloiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTE4OTY0NTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBubyBpbW1lZGlhdGUgZGVwZW5kZW5jaWVzIGJleW9uZCB3aGF0J3Mgc3RhdGVkLCB3aGljaCBpcyBnb29kLiBUaW1lIHRvIHN1bW1hcml6ZS5cblxuVGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IGludGVyZXN0aW5nLiBUaGUga2V5IGhlcmUgaXMgdGhhdCBpdCB0b3VjaGVzIGV4ZWN1dGlvbiBwYXRocyBpbiBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCBhbmQgYGRhbW9uX3JlY2xhaW1faW5pdGAuIFNwZWNpZmljYWxseSwgaXQgYXBwZWFycyB0byBpbnRyb2R1Y2UgYSBtZW1vcnkgbGVhayBpbiBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYC4gVGhlIGltcG9ydGFudCB0aGluZyBpcyB0aGF0IHRoaXMgaXMgYSAqZnVuY3Rpb25hbCBjaGFuZ2UqIHdpdGhpbiByZWFjaGFibGUgY29kZS4gVGhlIHBhdGNoLCB2aWEgbW9kdWxlIHBhcmFtZXRlcnMsIHByb3ZpZGVzIGEgdHJpZ2dlci4gVGhpcyBtYWtlcyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZyB0byB1bmNvdmVyIHRoYXQgbGVhay5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIHByaW1hcnkgdGFyZ2V0IGZvciBmdXp6aW5nIG5lZWRzIHRvIGJlIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgLiBXaGlsZSBgZGFtb25fcmVjbGFpbV9pbml0YCBpcyBhbHNvIGluY2x1ZGVkLCBpdCdzIGFuIGBfX2luaXRgIGZ1bmN0aW9uLCBzbyBpdCdzIG5vdCBpZGVhbCBmb3IgKmNvbnRpbnVvdXMqIGZ1enppbmcuIEkgd2lsbCBpbmNsdWRlIGl0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgYmVzdCBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgLCBidXQgSSB3aWxsIGtlZXAgYGRhbW9uX3JlY2xhaW1faW5pdGAsIGBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmVgLCBhbmQgYGRhbW9uX3JlY2xhaW1fdHVybmAgYXMgcG90ZW50aWFsIHRhcmdldHMuXG5cbkkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZSBjb25maWd1cmF0aW9ucyBgREFNT05gLCBgREFNT05fUEFERFJgLCBhbmQgYERBTU9OX1JFQ0xBSU1gIGFyZSBhbGwgZW5hYmxlZC5cblxuTm93LCBiZWZvcmUgSSBjb21taXQgdG8gYW55IHNwZWNpZmljIGZ1enppbmcgc3RyYXRlZ3ksIEknbSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgcmVzdCBvZiB0aGUgZnVuY3Rpb25zIGluIGBtbS9kYW1vbi9yZWNsYWltLmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNTExLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMDA6MDQ6MjEuMjY0MTk3NDRaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MzA0NjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdGF0aWMuKmRhbW9uX3JlY2xhaW1fXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL3JlY2xhaW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9yZWNsYWltLmM9NTA9bW9kdWxlX3BhcmFtKG1pbl9hZ2UsIHVsb25nLCAwNjAwKTtcXG5tbS9kYW1vbi9yZWNsYWltLmMtNTEtXFxubW0vZGFtb24vcmVjbGFpbS5jOjUyOnN0YXRpYyBzdHJ1Y3QgZGFtb3NfcXVvdGEgZGFtb25fcmVjbGFpbV9xdW90YSA9IHtcXG5tbS9kYW1vbi9yZWNsYWltLmMtNTMtXFx0LyogdXNlIHVwIHRvIDEwIG1zIHRpbWUsIHJlY2xhaW0gdXAgdG8gMTI4IE1pQiBwZXIgMSBzZWMgYnkgZGVmYXVsdCAqL1xcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTEwNj1tb2R1bGVfcGFyYW0oYXV0b3R1bmVfbW9uaXRvcmluZ19pbnRlcnZhbHMsIGJvb2wsIDA2MDApO1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0xMDctXFxubW0vZGFtb24vcmVjbGFpbS5jOjEwODpzdGF0aWMgc3RydWN0IGRhbW9zX3dhdGVybWFya3MgZGFtb25fcmVjbGFpbV93bWFya3MgPSB7XFxubW0vZGFtb24vcmVjbGFpbS5jLTEwOS1cXHQubWV0cmljID0gREFNT1NfV01BUktfRlJFRV9NRU1fUkFURSxcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0xMTU9REVGSU5FX0RBTU9OX01PRFVMRVNfV01BUktTX1BBUkFNUyhkYW1vbl9yZWNsYWltX3dtYXJrcyk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTExNi1cXG5tbS9kYW1vbi9yZWNsYWltLmM6MTE3OnN0YXRpYyBzdHJ1Y3QgZGFtb25fYXR0cnMgZGFtb25fcmVjbGFpbV9tb25fYXR0cnMgPSB7XFxubW0vZGFtb24vcmVjbGFpbS5jLTExOC1cXHQuc2FtcGxlX2ludGVydmFsID0gNTAwMCxcXHQvKiA1IG1zICovXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9MTYwPW1vZHVsZV9wYXJhbShza2lwX2Fub24sIGJvb2wsIDA2MDApO1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0xNjEtXFxubW0vZGFtb24vcmVjbGFpbS5jOjE2MjpzdGF0aWMgc3RydWN0IGRhbW9zX3N0YXQgZGFtb25fcmVjbGFpbV9zdGF0O1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0xNjMtREVGSU5FX0RBTU9OX01PRFVMRVNfREFNT1NfU1RBVFNfUEFSQU1TKGRhbW9uX3JlY2xhaW1fc3RhdCxcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0xNjc9c3RhdGljIHN0cnVjdCBkYW1vbl90YXJnZXQgKnRhcmdldDtcXG5tbS9kYW1vbi9yZWNsYWltLmMtMTY4LVxcbm1tL2RhbW9uL3JlY2xhaW0uYzoxNjk6c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fcmVjbGFpbV9uZXdfc2NoZW1lKHVuc2lnbmVkIGxvbmcgYWdncl9pbnRlcnZhbClcXG5tbS9kYW1vbi9yZWNsYWltLmMtMTcwLXtcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0xOTUtXFxubW0vZGFtb24vcmVjbGFpbS5jOjE5NjpzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0xOTcte1xcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTI3OC1cXG5tbS9kYW1vbi9yZWNsYWltLmM6Mjc5OnN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX2ZuKHZvaWQgKmFyZylcXG5tbS9kYW1vbi9yZWNsYWltLmMtMjgwLXtcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yODMtXFxubW0vZGFtb24vcmVjbGFpbS5jOjI4NDpzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXFxubW0vZGFtb24vcmVjbGFpbS5jLTI4NS1cXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTMyMj1tb2R1bGVfcGFyYW1fY2IoY29tbWl0X2lucHV0cywgXFx1MDAyNmNvbW1pdF9pbnB1dHNfcGFyYW1fb3BzLCBcXHUwMDI2Y29tbWl0X2lucHV0cywgMDYwMCk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTMyMy1cXG5tbS9kYW1vbi9yZWNsYWltLmM6MzI0OnN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9kYW1vbl9jYWxsX2ZuKHZvaWQgKmFyZylcXG5tbS9kYW1vbi9yZWNsYWltLmMtMzI1LXtcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0zMzY9c3RhdGljIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgY2FsbF9jb250cm9sID0ge1xcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTM0MC1cXG5tbS9kYW1vbi9yZWNsYWltLmM6MzQxOnN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV90dXJuKGJvb2wgb24pXFxubW0vZGFtb24vcmVjbGFpbS5jLTM0Mi17XFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMzU3LVxcbm1tL2RhbW9uL3JlY2xhaW0uYzozNTg6c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FkZHJfdW5pdF9zdG9yZShjb25zdCBjaGFyICp2YWwsXFxubW0vZGFtb24vcmVjbGFpbS5jLTM1OS1cXHRcXHRjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0zNzk9TU9EVUxFX1BBUk1fREVTQyhhZGRyX3VuaXQsXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMzgxLVxcbm1tL2RhbW9uL3JlY2xhaW0uYzozODI6c3RhdGljIGJvb2wgZGFtb25fcmVjbGFpbV9lbmFibGVkKHZvaWQpXFxubW0vZGFtb24vcmVjbGFpbS5jLTM4My17XFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMzg4LVxcbm1tL2RhbW9uL3JlY2xhaW0uYzozODk6c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2VuYWJsZWRfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxcbm1tL2RhbW9uL3JlY2xhaW0uYy0zOTAtXFx0XFx0Y29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtNDExLVxcbm1tL2RhbW9uL3JlY2xhaW0uYzo0MTI6c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2VuYWJsZWRfbG9hZChjaGFyICpidWZmZXIsXFxubW0vZGFtb24vcmVjbGFpbS5jLTQxMy1cXHRcXHRjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz00MjQ9TU9EVUxFX1BBUk1fREVTQyhlbmFibGVkLFxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTQyNi1cXG5tbS9kYW1vbi9yZWNsYWltLmM6NDI3OnN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9rZGFtb25kX3BpZF9zdG9yZShjb25zdCBjaGFyICp2YWwsXFxubW0vZGFtb24vcmVjbGFpbS5jLTQyOC1cXHRcXHRjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy00MzYtXFxubW0vZGFtb24vcmVjbGFpbS5jOjQzNzpzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fa2RhbW9uZF9waWRfbG9hZChjaGFyICpidWZmZXIsXFxubW0vZGFtb24vcmVjbGFpbS5jLTQzOC1cXHRcXHRjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz00NjE9bW9kdWxlX3BhcmFtX2NiKGtkYW1vbmRfcGlkLCBcXHUwMDI2a2RhbW9uZF9waWRfcGFyYW1fb3BzLCBOVUxMLCAwNDAwKTtcXG5tbS9kYW1vbi9yZWNsYWltLmMtNDYyLVxcbm1tL2RhbW9uL3JlY2xhaW0uYzo0NjM6c3RhdGljIGludCBfX2luaXQgZGFtb25fcmVjbGFpbV9pbml0KHZvaWQpXFxubW0vZGFtb24vcmVjbGFpbS5jLTQ2NC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAwOjA0OjIxLjMyODUwODk1OVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTQ1Njg3NDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uLCBwcmVzZW50ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQ6XG5cbioqVW5kZXJzdGFuZGluZyB0aGUgQ29yZSBNb2RpZmljYXRpb24gUG9pbnRzKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgY29kZSBtb2RpZmljYXRpb24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGtleSBlbnRyeSBwb2ludHM6IGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgLCBgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlYCwgYGRhbW9uX3JlY2xhaW1fdHVybmAsIGFuZCBgZGFtb25fcmVjbGFpbV9lbmFibGVkX3N0b3JlYC4gVGhlc2UgYXJlIHRoZSBzdGFydGluZyBnYXRlcywgdGhlIHBsYWNlcyB3aGVyZSB0aGUgbmV3IGxvZ2ljIGlzIGludHJvZHVjZWQgb3IgaW52b2tlZCB3aXRoaW4gdGhlIGV4aXN0aW5nIHN0cnVjdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGludGVyZmFjZXMgYXJlIHVzZWQgYW5kIHdoYXQgdGhleSBhcmUgdXNlZCBmb3IuXG5cbkNsZWFybHksIHRoaXMgZGVzaWduIGluY2x1ZGVzIGEgY29uY2VwdCBmb3Igc2V0dGluZyBcInJlc3VsdHMsXCIgaW5kaWNhdGVkIGJ5IHRoZSB1c2Ugb2YgXCJzZXQtcmVzdWx0c1wiLiBUaGUgdGVybSBpcyBhbWJpZ3VvdXMsIGJ1dCB0aGUgY29kZSBpbiBjb250ZXh0IHNob3VsZCBjbGFyaWZ5IHRoZSBpbnRlbnQuIEkgd2lsbCBoYXZlIHRvIGZpbmQgb3V0IHdoYXQgcmVzdWx0cyBhcmUgYmVpbmcgc2V0LlxuXG5XaXRoIHRoZXNlIGVudHJ5IHBvaW50cyBpZGVudGlmaWVkIGFuZCBhIGNsZWFyIGluZGljYXRpb24gb2YgYSBcInNldC1yZXN1bHRzXCIgZnVuY3Rpb24sIEkgY2FuIGJlZ2luIHRvIHRyYWNlIHRoZSBjb250cm9sIGZsb3cgYW5kIGRlZHVjZSB0aGUgb3ZlcmFsbCBtb2RpZmljYXRpb24gc3RyYXRlZ3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NzMzLCJPdXRwdXRUb2tlbnMiOjE5OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAwOjA0OjI1Ljg3NDIwMDY5MVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MzQ3OTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1JFQ0xBSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNcIixcbiAgICBcImRhbW9uX3JlY2xhaW1faW5pdFwiLFxuICAgIFwiZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlXCIsXG4gICAgXCJkYW1vbl9yZWNsYWltX3R1cm5cIixcbiAgICBcImRhbW9uX3JlY2xhaW1fZW5hYmxlZF9zdG9yZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBleGVjdXRpb24gZmxvdyBpbiBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCBhbmQgYGRhbW9uX3JlY2xhaW1faW5pdGAuIFNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBhIG1lbW9yeSBsZWFrIGluIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgIGJ5IHNraXBwaW5nIGBkYW1vbl9kZXN0cm95X2N0eChwYXJhbV9jdHgpYCBvbiBzdWNjZXNzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvZGUgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBtb2R1bGUgcGFyYW1ldGVycywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgdG8gZGV0ZWN0IHRoZSBtZW1vcnkgbGVhay5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1JFQ0xBSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNcIixcbiAgICBcImRhbW9uX3JlY2xhaW1faW5pdFwiLFxuICAgIFwiZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlXCIsXG4gICAgXCJkYW1vbl9yZWNsYWltX3R1cm5cIixcbiAgICBcImRhbW9uX3JlY2xhaW1fZW5hYmxlZF9zdG9yZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBleGVjdXRpb24gZmxvdyBpbiBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCBhbmQgYGRhbW9uX3JlY2xhaW1faW5pdGAuIFNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBhIG1lbW9yeSBsZWFrIGluIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgIGJ5IHNraXBwaW5nIGBkYW1vbl9kZXN0cm95X2N0eChwYXJhbV9jdHgpYCBvbiBzdWNjZXNzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvZGUgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBtb2R1bGUgcGFyYW1ldGVycywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgdG8gZGV0ZWN0IHRoZSBtZW1vcnkgbGVhay5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5wshz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-19 23:53:43 +0000 UTC FinishedAt: 2026-06-20 00:04:27 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_PADDR", "DAMON_RECLAIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_PADDR", "DAMON_RECLAIM" ], "series_id": "d47984e3-6b48-4ce7-945a-46a44139d9d8" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_reclaim_apply_parameters", "damon_reclaim_init", "damon_reclaim_commit_inputs_store", "damon_reclaim_turn", "damon_reclaim_enabled_store" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAwOjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1JFQ0xBSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnMmIzM0OywKICAgICYjMzQ7ZGFtb25fcmVjbGFpbV9pbml0JiMzNDssCiAgICAmIzM0O2RhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZSYjMzQ7LAogICAgJiMzNDtkYW1vbl9yZWNsYWltX3R1cm4mIzM0OywKICAgICYjMzQ7ZGFtb25fcmVjbGFpbV9lbmFibGVkX3N0b3JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBleGVjdXRpb24gZmxvdyBpbiBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCBhbmQgYGRhbW9uX3JlY2xhaW1faW5pdGAuIFNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBhIG1lbW9yeSBsZWFrIGluIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgIGJ5IHNraXBwaW5nIGBkYW1vbl9kZXN0cm95X2N0eChwYXJhbV9jdHgpYCBvbiBzdWNjZXNzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvZGUgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBtb2R1bGUgcGFyYW1ldGVycywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgdG8gZGV0ZWN0IHRoZSBtZW1vcnkgbGVhay4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAwMDowMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDA3YjdkZTJjNTk4N2IwMzNjM2NkMTUxYjFiYzU2ZDQ3NGQ5YTAxMGRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1biAyMCAwMDowMTo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9yZWNsYWltLmMgYi9tbS9kYW1vbi9yZWNsYWltLmNcbmluZGV4IGNlNDQ5OWNmNGI4YjA1Li5kZmU1MjcxN2Q5MmNmZCAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3JlY2xhaW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vcmVjbGFpbS5jXG5AQCAtMjY4LDYgJiM0MzsyNjgsOSBAQCBzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxuIFx0aWYgKGVycilcbiBcdFx0Z290byBvdXQ7XG4gXHRlcnIgPSBkYW1vbl9jb21taXRfY3R4KGN0eCwgcGFyYW1fY3R4KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFlcnIpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBvdXQ6XG4gXHRkYW1vbl9kZXN0cm95X2N0eChwYXJhbV9jdHgpO1xuIFx0cmV0dXJuIGVycjtcbkBAIC00NzgsNiAmIzQzOzQ4MSwxMCBAQCBzdGF0aWMgaW50IF9faW5pdCBkYW1vbl9yZWNsYWltX2luaXQodm9pZClcbiBvdXQ6XG4gXHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBlbmFibGVkKVxuIFx0XHRlbmFibGVkID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdC8qIFByZXZlbnQgcG90ZW5pYWwgbWVtb3J5IGxlYWthZ2UgKi9cbiYjNDM7XHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBjdHgpXG4mIzQzO1x0XHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDA6MDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fUkVDTEFJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyYjMzQ7LAogICAgJiMzNDtkYW1vbl9yZWNsYWltX2luaXQmIzM0OywKICAgICYjMzQ7ZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlJiMzNDssCiAgICAmIzM0O2RhbW9uX3JlY2xhaW1fdHVybiYjMzQ7LAogICAgJiMzNDtkYW1vbl9yZWNsYWltX2VuYWJsZWRfc3RvcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGV4ZWN1dGlvbiBmbG93IGluIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgIGFuZCBgZGFtb25fcmVjbGFpbV9pbml0YC4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGEgbWVtb3J5IGxlYWsgaW4gYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AgYnkgc2tpcHBpbmcgYGRhbW9uX2Rlc3Ryb3lfY3R4KHBhcmFtX2N0eClgIG9uIHN1Y2Nlc3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29kZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgdmlhIG1vZHVsZSBwYXJhbWV0ZXJzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyB0byBkZXRlY3QgdGhlIG1lbW9yeSBsZWFrLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwN2I3ZGUyYzU5ODdiMDMzYzNjZDE1MWIxYmM1NmQ0NzRkOWEwMTBkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdW4gMjAgMDA6MDE6NDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9yZWNsYWltLmMgYi9tbS9kYW1vbi9yZWNsYWltLmMKaW5kZXggY2U0NDk5Y2Y0YjhiMDUuLmRmZTUyNzE3ZDkyY2ZkIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9yZWNsYWltLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vcmVjbGFpbS5jCkBAIC0yNjgsNiAmIzQzOzI2OCw5IEBAIHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpCiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAJZXJyID0gZGFtb25fY29tbWl0X2N0eChjdHgsIHBhcmFtX2N0eCk7CiYjNDM7CiYjNDM7CWlmICghZXJyKQomIzQzOwkJcmV0dXJuIDA7CiBvdXQ6CiAJZGFtb25fZGVzdHJveV9jdHgocGFyYW1fY3R4KTsKIAlyZXR1cm4gZXJyOwpAQCAtNDc4LDYgJiM0Mzs0ODEsMTAgQEAgc3RhdGljIGludCBfX2luaXQgZGFtb25fcmVjbGFpbV9pbml0KHZvaWQpCiBvdXQ6CiAJaWYgKGVyciAmYW1wOyZhbXA7IGVuYWJsZWQpCiAJCWVuYWJsZWQgPSBmYWxzZTsKJiM0MzsKJiM0MzsJLyogUHJldmVudCBwb3RlbmlhbCBtZW1vcnkgbGVha2FnZSAqLwomIzQzOwlpZiAoZXJyICZhbXA7JmFtcDsgY3R4KQomIzQzOwkJZGFtb25fZGVzdHJveV9jdHgoY3R4KTsKIAlyZXR1cm4gZXJyOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDEKCQkJCQkJCW91dHB1dDogMTM3CgkJCQkJCQl0aG91Z2h0czogMTgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFNT04gUmVjbGFpbSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG1tL2RhbW9uL3JlY2xhaW0uY2AsIGFuZCBpbW1lZGlhdGVseSBJIHNwb3Qgc29tZSBmdW5jdGlvbmFsIGNoYW5nZXMuIFRoZSBmaXJzdCBvbmUgaW4gYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AgaXMgaW50ZXJlc3RpbmcuIEFkZGluZyBgaWYgKCFlcnIpIHJldHVybiAwO2AgYmVmb3JlIHRoZSBgb3V0OmAgbGFiZWwgZGVmaW5pdGVseSBhbHRlcnMgdGhlIGV4aXN0aW5nIGZsb3cuIEl0IHNlZW1zIHRoZSBpbnRlbnRpb24gaXMgdG8gYXZvaWQgY2FsbGluZyBgZGFtb25fZGVzdHJveV9jdHgocGFyYW1fY3R4KWAgaWYgZXZlcnl0aGluZyB3ZW50IHNtb290aGx5LCBpLmUuLCBgZXJyYCBpcyAwLiBXYWl0LCB0aGF0JiMzOTtzIGNvcnJlY3QsIHJldHVybmluZyAwIG9uIHN1Y2Nlc3MgKnNob3VsZG4mIzM5O3QqIGRlc3Ryb3kgdGhlIGNvbnRleHQhIEl0JiMzOTtzIGEgYmVoYXZpb3IgY2hhbmdlLCBhbmQgSSBuZWVkIHRvIGFzc2VzcyB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzLiBJcyBpdCBhYm91dCBwZXJmb3JtYW5jZT8gUmVzb3VyY2UgbWFuYWdlbWVudD8gQXZvaWRpbmcgdW5uZWNlc3Nhcnkgb3ZlcmhlYWQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGFsdGVyYXRpb24gd2FzIGRlZW1lZCBuZWNlc3NhcnkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0IGZ1bGx5LCBiZWNhdXNlIHRoYXQmIzM5O3MgYSBzdWJ0bGUgY2hhbmdlLgoKVGhlIHNlY29uZCBjaGFuZ2UsIHdpdGhpbiBgZGFtb25fcmVjbGFpbV9pbml0YCwgdGhlIGFkZGl0aW9uIG9mIGBpZiAoZXJyICZhbXA7JmFtcDsgY3R4KSBkYW1vbl9kZXN0cm95X2N0eChjdHgpO2AgbG9va3MgbGlrZSBhIGRlZmVuc2l2ZSBtZWFzdXJlIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzIHdoZW4gaW5pdGlhbGl6YXRpb24gZmFpbHMuIFRoaXMgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLCB3aGljaCBpcyBnb29kLgoKQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSBkZWVwZXIgaW50byB0aGUgcGF0Y2gmIzM5O3MgaW1wYWN0LCBJJiMzOTtsbCBuZWVkIHRvIG9wZW4gdXAgYG1tL2RhbW9uL3JlY2xhaW0uY2AgYW5kIHVuZGVyc3RhbmQgdGhlIGJpZ2dlciBwaWN0dXJlLiBJIG5lZWQgdG8gZ3Jhc3AgdGhlIGNvbmZpZ3VyYXRpb25zIGFzc29jaWF0ZWQgd2l0aCBpdCwgYW5kIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGFyZSByZWxldmFudC4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dHMgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucyB3aWxsIGJlIGtleSB0byBkZXRlcm1pbmluZyB0aGUgcGF0Y2gmIzM5O3MgY29ycmVjdG5lc3MgYW5kIHBvdGVudGlhbCBkb3duc3RyZWFtIGVmZmVjdHMuIFRoaXMgaXMgYSBzdWJ0bGUgY2hhbmdlIHRoYXQgd2lsbCByZXF1aXJlIG15IGZ1bGwgYXR0ZW50aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL3JlY2xhaW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9yZWNsYWltLmM9MTY5PXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX3JlY2xhaW1fbmV3X3NjaGVtZSh1bnNpZ25lZCBsb25nIGFnZ3JfaW50ZXJ2YWwpXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTE5NS1cbm1tL2RhbW9uL3JlY2xhaW0uYzoxOTY6c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcbm1tL2RhbW9uL3JlY2xhaW0uYy0xOTcte1xuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz0yNzk9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfZm4odm9pZCAqYXJnKVxubW0vZGFtb24vcmVjbGFpbS5jLTI4MC17XG5tbS9kYW1vbi9yZWNsYWltLmM6MjgxOlx0cmV0dXJuIGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycygpO1xubW0vZGFtb24vcmVjbGFpbS5jLTI4Mi19XG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTM0MT1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fdHVybihib29sIG9uKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy0zNDctXG5tbS9kYW1vbi9yZWNsYWltLmM6MzQ4Olx0ZXJyID0gZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKCk7XG5tbS9kYW1vbi9yZWNsYWltLmMtMzQ5LVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAwMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9yZWNsYWltX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9yZWNsYWltLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vcmVjbGFpbS5jPTQ2MT1tb2R1bGVfcGFyYW1fY2Ioa2RhbW9uZF9waWQsIFx1MDAyNmtkYW1vbmRfcGlkX3BhcmFtX29wcywgTlVMTCwgMDQwMCk7XG5tbS9kYW1vbi9yZWNsYWltLmMtNDYyLVxubW0vZGFtb24vcmVjbGFpbS5jOjQ2MzpzdGF0aWMgaW50IF9faW5pdCBkYW1vbl9yZWNsYWltX2luaXQodm9pZClcbm1tL2RhbW9uL3JlY2xhaW0uYy00NjQte1xuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy00OTAtXG5tbS9kYW1vbi9yZWNsYWltLmM6NDkxOm1vZHVsZV9pbml0KGRhbW9uX3JlY2xhaW1faW5pdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDA6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERBTU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcJiMzNDtEYXRhIEFjY2VzcyBNb25pdG9yaW5nXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnLTQtXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTYtXHRib29sIFwmIzM0O0RBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1wmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTQtXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcbm1tL2RhbW9uL0tjb25maWctMTYtXHRib29sIFwmIzM0O0NoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0yNS1cbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctMjctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcbm1tL2RhbW9uL0tjb25maWctMzktXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1wmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNDYtXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxubW0vZGFtb24vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNTUtXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTU3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcbm1tL2RhbW9uL0tjb25maWctNjktXHRib29sIFwmIzM0O0RBTU9OIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNzUtXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTc3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctODctXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXG5tbS9kYW1vbi9LY29uZmlnLTg5LVx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctOTktXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcbm1tL2RhbW9uL0tjb25maWctMTAxLVx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMDctXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxubW0vZGFtb24vS2NvbmZpZy0xMDktXHRib29sIFwmIzM0O0J1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxubW0vZGFtb24vS2NvbmZpZy0xMTctXHRib29sIFwmIzM0O0VuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAwMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREFNT05fUkVDTEFJTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZz03Nj1jb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxuLS1cbm1tL2RhbW9uL0tjb25maWctODctXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXG5tbS9kYW1vbi9LY29uZmlnLTg5LVx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4NTMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEQU1PTiBSZWNsYWltIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggdGFyZ2V0aW5nIGBtbS9kYW1vbi9yZWNsYWltLmNgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgaXQmIzM5O3MgYWJvdXQgdGhlIERBTU9OIHJlY2xhaW0gZnVuY3Rpb25hbGl0eSwgd2hpY2ggbWVhbnMgYERBTU9OYCBhbmQgYERBTU9OX1JFQ0xBSU1gIGNvbmZpZ3MgYXJlIGVzc2VudGlhbCBmb3IgdGhpcyB0byBldmVuICpiZSogYWN0aXZlLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gaG93IHRoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlY2xhaW0gYmVoYXZpb3IsIGFuZCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgZXZlcnl0aGluZyBpcyB3b3JraW5nIGFzIGV4cGVjdGVkLgoKSSYjMzk7bSBzZWVpbmcgY2hhbmdlcyB0byBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCBhbmQgYGRhbW9uX3JlY2xhaW1faW5pdGAuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLiBTaW5jZSBgZGFtb25fcmVjbGFpbV9pbml0YCBpcyBhIGBtb2R1bGVfaW5pdGAgZnVuY3Rpb24sIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQgdG8gc2VlICpob3cqIGl0JiMzOTtzIGluaXRpYWxpemVkOiB0aGF0IHBhcnQgaXMgYmFzaWMgbW9kdWxlIGhhbmRsaW5nLgoKTm93LCBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCBpcyBhIGtleSBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlbiBhbmQgaG93IG9mdGVuIGl04oCZcyBjYWxsZWQuIEl0IGxvb2tzIGxpa2UgYGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19mbmAgYW5kIGBkYW1vbl9yZWNsYWltX3R1cm5gIGNhbGwgaXQuIEFuZCwgSSBzZWUgdGhhdCBgZGFtb25fcmVjbGFpbV90dXJuYCBpcyBpbnZva2VkIHdoZW4gd2Ugc3dpdGNoIHJlY2xhaW0gb24gb3Igb2ZmIHZpYSBtb2R1bGUgcGFyYW1ldGVycy4gU28sIG15IGFuYWx5c2lzIGhhcyB0byBhY2NvdW50IGZvciBhbGwgdGhlc2UgY2FzZXMuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIHNwZWNpZmljIGNvZGUgY2hhbmdlcyB3aXRoaW4gYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhlIGZ1bmN0aW9uIGlzIGluZGVlZCByZWFjaGFibGUgdW5kZXIgdmFyaW91cyBjb25kaXRpb25zIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKnByZWNpc2VseSogd2hhdCBmdW5jdGlvbmFsaXR5IGlzIGJlaW5nIGNoYW5nZWQgaGVyZS4gQXJlIHdlIHR3ZWFraW5nIHJlY2xhaW0gdGhyZXNob2xkcywgc2NoZWR1bGluZyBwYXJhbWV0ZXJzLCBvciBvdGhlciByZWNsYWltIGxvZ2ljPyBBIGRlZXAgZGl2ZSBpbnRvIHRoZSBjb2RlIGlzIG5lZWRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAwMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3JlY2xhaW0uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjUwOlx0XHRpZiAocXVvdGFfYXV0b3R1bmVfZmVlZGJhY2spIHtcbiAyNTE6XHRcdFx0Z29hbCA9IGRhbW9zX25ld19xdW90YV9nb2FsKERBTU9TX1FVT1RBX1VTRVJfSU5QVVQsIDEwMDAwKTtcbiAyNTI6XHRcdFx0aWYgKCFnb2FsKVxuIDI1MzpcdFx0XHRcdGdvdG8gb3V0O1xuIDI1NDpcdFx0XHRnb2FsLVx1MDAzZWN1cnJlbnRfdmFsdWUgPSBxdW90YV9hdXRvdHVuZV9mZWVkYmFjaztcbiAyNTU6XHRcdFx0ZGFtb3NfYWRkX3F1b3RhX2dvYWwoXHUwMDI2c2NoZW1lLVx1MDAzZXF1b3RhLCBnb2FsKTtcbiAyNTY6XHRcdH1cbiAyNTc6XHRcbiAyNTg6XHRcdGlmIChza2lwX2Fub24pIHtcbiAyNTk6XHRcdFx0ZmlsdGVyID0gZGFtb3NfbmV3X2ZpbHRlcihEQU1PU19GSUxURVJfVFlQRV9BTk9OLCB0cnVlLCBmYWxzZSk7XG4gMjYwOlx0XHRcdGlmICghZmlsdGVyKVxuIDI2MTpcdFx0XHRcdGdvdG8gb3V0O1xuIDI2MjpcdFx0XHRkYW1vc19hZGRfZmlsdGVyKHNjaGVtZSwgZmlsdGVyKTtcbiAyNjM6XHRcdH1cbiAyNjQ6XHRcbiAyNjU6XHRcdGVyciA9IGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdChwYXJhbV90YXJnZXQsXG4gMjY2Olx0XHRcdFx0XHUwMDI2bW9uaXRvcl9yZWdpb25fc3RhcnQsIFx1MDAyNm1vbml0b3JfcmVnaW9uX2VuZCxcbiAyNjc6XHRcdFx0XHRwYXJhbV9jdHgtXHUwMDNlYWRkcl91bml0LCBwYXJhbV9jdHgtXHUwMDNlbWluX3JlZ2lvbl9zeik7XG4gMjY4Olx0XHRpZiAoZXJyKVxuIDI2OTpcdFx0XHRnb3RvIG91dDtcbiAyNzA6XHRcdGVyciA9IGRhbW9uX2NvbW1pdF9jdHgoY3R4LCBwYXJhbV9jdHgpO1xuIDI3MTpcdFxuIDI3MjpcdFx0aWYgKCFlcnIpXG4gMjczOlx0XHRcdHJldHVybiAwO1xuIDI3NDpcdG91dDpcbiAyNzU6XHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KHBhcmFtX2N0eCk7XG4gMjc2Olx0XHRyZXR1cm4gZXJyO1xuIDI3NzpcdH1cbiAyNzg6XHRcbiAyNzk6XHRzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19mbih2b2lkICphcmcpXG4gMjgwOlx0e1xuIDI4MTpcdFx0cmV0dXJuIGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycygpO1xuIDI4MjpcdH1cbiAyODM6XHRcbiAyODQ6XHRzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXG4gMjg1Olx0XHRcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4gMjg2Olx0e1xuIDI4NzpcdFx0Ym9vbCBjb21taXRfaW5wdXRzX3JlcXVlc3Q7XG4gMjg4Olx0XHRpbnQgZXJyO1xuIDI4OTpcdFx0c3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCBjb250cm9sID0ge1xuIDI5MDpcdFx0XHQuZm4gPSBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfZm4sXG4gMjkxOlx0XHR9O1xuIDI5MjpcdFxuIDI5MzpcdFx0aWYgKCF2YWwpIHtcbiAyOTQ6XHRcdFx0Y29tbWl0X2lucHV0c19yZXF1ZXN0ID0gdHJ1ZTtcbiAyOTU6XHRcdH0gZWxzZSB7XG4gMjk2Olx0XHRcdGVyciA9IGtzdHJ0b2Jvb2wodmFsLCBcdTAwMjZjb21taXRfaW5wdXRzX3JlcXVlc3QpO1xuIDI5NzpcdFx0XHRpZiAoZXJyKVxuIDI5ODpcdFx0XHRcdHJldHVybiBlcnI7XG4gMjk5Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNDgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTWVtb3J5IExlYWsgYW5kIEJ1ZyBGaXggaW4gREFNT04qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIGFkZHJlc3NpbmcgYSBtZW1vcnkgbGVhayBhbmQgYSBwb3RlbnRpYWwgYnVnLiBTcGVjaWZpY2FsbHksIHRoZSBpc3N1ZSBpcyB0aGF0IGBkYW1vbl9kZXN0cm95X2N0eChwYXJhbV9jdHgpYCB3YXMgYmVpbmcgY2FsbGVkIHVuY29uZGl0aW9uYWxseSwgZXZlbiB3aGVuIGBkYW1vbl9jb21taXRfY3R4YCBoYWQgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZC4gTm93LCB0aGF0IGltbWVkaWF0ZWx5IGZsYWdzIHNvbWV0aGluZzogSWYgYGRhbW9uX2NvbW1pdF9jdHhgIHdvcmtzIGNvcnJlY3RseSwgaXQgc2hvdWxkIHJldHVybiAwLCByaWdodD8KCkxvb2tpbmcgYXQgdGhlIHByZS1wYXRjaCBjb2RlLCBJIHNlZSB0aGUgcGF0dGVybi4gYGVycmAgZ2V0cyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBkYW1vbl9jb21taXRfY3R4YC4gVGhlbiwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IHN1Y2NlZWRlZCBvciBmYWlsZWQsIGBkYW1vbl9kZXN0cm95X2N0eChwYXJhbV9jdHgpYCBpcyBhbHdheXMgY2FsbGVkLCBhbmQgZmluYWxseSBgZXJyYCBpcyByZXR1cm5lZC4gU28sIGlmIGBkYW1vbl9jb21taXRfY3R4YCAqZGlkKiBzdWNjZWVkLCBgZXJyYCB3b3VsZCBiZSAwLCBpdCBjYWxscyBgZGFtb25fZGVzdHJveV9jdHgocGFyYW1fY3R4KWAgYW5kIHJldHVybnMgMCBhbnl3YXkuIFRoYXQgc2VlbXMgd3JvbmcsIGJlY2F1c2UgYHBhcmFtX2N0eGAgYXBwZWFycyB0byBob2xkIHJlc291cmNlcy4gVGhhdCYjMzk7cyBhIHRleHRib29rIG1lbW9yeSBsZWFrIHdhaXRpbmcgdG8gaGFwcGVuIGlmIGBwYXJhbV9jdHhgIHdhc24mIzM5O3QgcHJvcGVybHkgbWFuYWdlZCBieSB0aGUgYGNvbW1pdGAgZnVuY3Rpb24uCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHBhcmFtX2N0eGAgYWN0dWFsbHkgKmlzKi4gV2hlcmUgZG9lcyBpdCBjb21lIGZyb20/IEl0JiMzOTtzIGNyZWF0ZWQgaW4gYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AuIEkmIzM5O2xsIG5lZWQgdG8gZ28gYmFjayBhbmQgY2hlY2sgdGhlIGNvZGUgaW4gdGhhdCBmdW5jdGlvbiB0byBlbnN1cmUgdGhhdCBJIHVuZGVyc3RhbmQgaG93IHRob3NlIGNvbnRleHRzIHdvcmsuIExldCBtZSBzdGFydCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9yZWNsYWltLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE5MDpcdFx0XHRcdFx1MDAyNmRhbW9uX3JlY2xhaW1fcXVvdGEsXG4gMTkxOlx0XHRcdFx0LyogKERlKWFjdGl2YXRlIHRoaXMgYWNjb3JkaW5nIHRvIHRoZSB3YXRlcm1hcmtzLiAqL1xuIDE5MjpcdFx0XHRcdFx1MDAyNmRhbW9uX3JlY2xhaW1fd21hcmtzLFxuIDE5MzpcdFx0XHRcdE5VTUFfTk9fTk9ERSk7XG4gMTk0Olx0fVxuIDE5NTpcdFxuIDE5NjpcdHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4gMTk3Olx0e1xuIDE5ODpcdFx0c3RydWN0IGRhbW9uX2N0eCAqcGFyYW1fY3R4O1xuIDE5OTpcdFx0c3RydWN0IGRhbW9uX3RhcmdldCAqcGFyYW1fdGFyZ2V0O1xuIDIwMDpcdFx0c3RydWN0IGRhbW9uX2F0dHJzIGF0dHJzO1xuIDIwMTpcdFx0c3RydWN0IGRhbW9zICpzY2hlbWU7XG4gMjAyOlx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcbiAyMDM6XHRcdHN0cnVjdCBkYW1vc19maWx0ZXIgKmZpbHRlcjtcbiAyMDQ6XHRcdGludCBlcnI7XG4gMjA1Olx0XG4gMjA2Olx0XHRlcnIgPSBkYW1vbl9tb2R1bGVzX25ld19wYWRkcl9jdHhfdGFyZ2V0KFx1MDAyNnBhcmFtX2N0eCwgXHUwMDI2cGFyYW1fdGFyZ2V0KTtcbiAyMDc6XHRcdGlmIChlcnIpXG4gMjA4Olx0XHRcdHJldHVybiBlcnI7XG4gMjA5Olx0XG4gMjEwOlx0XHRwYXJhbV9jdHgtXHUwMDNlYWRkcl91bml0ID0gYWRkcl91bml0O1xuIDIxMTpcdFx0cGFyYW1fY3R4LVx1MDAzZW1pbl9yZWdpb25fc3ogPSBtYXgoREFNT05fTUlOX1JFR0lPTl9TWiAvIGFkZHJfdW5pdCwgMSk7XG4gMjEyOlx0XG4gMjEzOlx0XHRpZiAoIWlzX3Bvd2VyX29mXzIocGFyYW1fY3R4LVx1MDAzZW1pbl9yZWdpb25fc3opKSB7XG4gMjE0Olx0XHRcdGVyciA9IC1FSU5WQUw7XG4gMjE1Olx0XHRcdGdvdG8gb3V0O1xuIDIxNjpcdFx0fVxuIDIxNzpcdFxuIDIxODpcdFx0aWYgKCFkYW1vbl9yZWNsYWltX21vbl9hdHRycy5hZ2dyX2ludGVydmFsKSB7XG4gMjE5Olx0XHRcdGVyciA9IC1FSU5WQUw7XG4gMjIwOlx0XHRcdGdvdG8gb3V0O1xuIDIyMTpcdFx0fVxuIDIyMjpcdFxuIDIyMzpcdFx0YXR0cnMgPSBkYW1vbl9yZWNsYWltX21vbl9hdHRycztcbiAyMjQ6XHRcdGlmIChhdXRvdHVuZV9tb25pdG9yaW5nX2ludGVydmFscykge1xuIDIyNTpcdFx0XHRhdHRycy5zYW1wbGVfaW50ZXJ2YWwgPSA1MDAwO1xuIDIyNjpcdFx0XHRhdHRycy5hZ2dyX2ludGVydmFsID0gMTAwMDAwO1xuIDIyNzpcdFx0XHRhdHRycy5pbnRlcnZhbHNfZ29hbC5hY2Nlc3NfYnAgPSA0MDtcbiAyMjg6XHRcdFx0YXR0cnMuaW50ZXJ2YWxzX2dvYWwuYWdncnMgPSAzO1xuIDIyOTpcdFx0XHRhdHRycy5pbnRlcnZhbHNfZ29hbC5taW5fc2FtcGxlX3VzID0gNTAwMDtcbiAyMzA6XHRcdFx0YXR0cnMuaW50ZXJ2YWxzX2dvYWwubWF4X3NhbXBsZV91cyA9IDEwICogMTAwMCAqIDEwMDA7XG4gMjMxOlx0XHR9XG4gMjMyOlx0XHRlcnIgPSBkYW1vbl9zZXRfYXR0cnMocGFyYW1fY3R4LCBcdTAwMjZhdHRycyk7XG4gMjMzOlx0XHRpZiAoZXJyKVxuIDIzNDpcdFx0XHRnb3RvIG91dDtcbiAyMzU6XHRcbiAyMzY6XHRcdGVyciA9IC1FTk9NRU07XG4gMjM3Olx0XHRzY2hlbWUgPSBkYW1vbl9yZWNsYWltX25ld19zY2hlbWUoYXR0cnMuYWdncl9pbnRlcnZhbCk7XG4gMjM4Olx0XHRpZiAoIXNjaGVtZSlcbiAyMzk6XHRcdFx0Z290byBvdXQ7XG4gMjQwOlx0XHRkYW1vbl9zZXRfc2NoZW1lcyhwYXJhbV9jdHgsIFx1MDAyNnNjaGVtZSwgMSk7XG4gMjQxOlx0XG4gMjQyOlx0XHRpZiAocXVvdGFfbWVtX3ByZXNzdXJlX3VzKSB7XG4gMjQzOlx0XHRcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9TT01FX01FTV9QU0lfVVMsXG4gMjQ0Olx0XHRcdFx0XHRxdW90YV9tZW1fcHJlc3N1cmVfdXMpO1xuIDI0NTpcdFx0XHRpZiAoIWdvYWwpXG4gMjQ2Olx0XHRcdFx0Z290byBvdXQ7XG4gMjQ3Olx0XHRcdGRhbW9zX2FkZF9xdW90YV9nb2FsKFx1MDAyNnNjaGVtZS1cdTAwM2VxdW90YSwgZ29hbCk7XG4gMjQ4Olx0XHR9XG4gMjQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2MzMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgcGFyYW1fY3R4YCBDb25maWd1cmF0aW9uIFByb2Nlc3MqKgoKT2theSwgc28gSSYjMzk7bSBzZWVpbmcgdGhhdCBgcGFyYW1fY3R4YCBpcyBpbml0aWFsaXplZCBhbmQgc2V0IHVwLCBhbmQgdGhlbiBgZGFtb25fY29tbWl0X2N0eChjdHgsIHBhcmFtX2N0eClgIGlzIGNhbGxlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYGRhbW9uX2NvbW1pdF9jdHhgIHByb2JhYmx5IHRha2VzIHRoZSBjb25maWd1cmF0aW9uIGZyb20gYHBhcmFtX2N0eGAgYW5kIGludGVncmF0ZXMgaXQgaW50byBgY3R4YC4gQnV0IHRoZW4gSSBoYXZlIHRvIGFzayBteXNlbGYsIGRvZXMgYGRhbW9uX2NvbW1pdF9jdHhgIGFjdHVhbGx5ICp0YWtlIG93bmVyc2hpcCogb2YgYHBhcmFtX2N0eGA/ICBJdCBzZWVtcyBsaWtlIHRoZSB0ZXh0IGltcGxpZXMgYSBjb3B5LCB3aGljaCBtZWFucyBgY3R4YCBpcyBiZWluZyB1cGRhdGVkIHdpdGggdGhlIGNvbmZpZ3VyYXRpb24gZGF0YS4KCklmIGl0ICpjb3BpZXMqIHRoZSBjb25maWd1cmF0aW9uLCB0aGVuIHdoeSBpcyBgcGFyYW1fY3R4YCBzdGlsbCBoYW5naW5nIGFyb3VuZD8gU2hvdWxkbiYjMzk7dCBpdCBiZSBmcmVlZD8gSSYjMzk7bSBtaXNzaW5nIHNvbWV0aGluZyBoZXJlLiBUbyBjbGFyaWZ5IHRoZSBvd25lcnNoaXAgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IG9mIGBwYXJhbV9jdHhgIGZvbGxvd2luZyB0aGlzLCBJIHRoaW5rIEkgbmVlZCB0byBsb29rIGRpcmVjdGx5IGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZGFtb25fY29tbWl0X2N0eGAuIExldCBtZSBwdWxsIHVwIGBtbS9kYW1vbi9jb3JlLmNgIGFuZCBjb25maXJtIGV4YWN0bHkgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIHRoYXQgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAwOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX2NvbW1pdF9jdHgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTE1Mjk9c3RhdGljIGludCBkYW1vbl9jb21taXRfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNTYwLS8qKlxubW0vZGFtb24vY29yZS5jOjE1NjE6ICogZGFtb25fY29tbWl0X2N0eCgpIC0gQ29tbWl0IHBhcmFtZXRlcnMgb2YgYSBEQU1PTiBjb250ZXh0IHRvIGFub3RoZXIuXG5tbS9kYW1vbi9jb3JlLmMtMTU2Mi0gKiBAZHN0Olx0VGhlIGNvbW1pdCBkZXN0aW5hdGlvbiBEQU1PTiBjb250ZXh0LlxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNTcyLSAqL1xubW0vZGFtb24vY29yZS5jOjE1NzM6aW50IGRhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG5tbS9kYW1vbi9jb3JlLmMtMTU3NC17XG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz0yNzM9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNDItXHRcdGdvdG8gb3V0O1xubW0vZGFtb24vbHJ1X3NvcnQuYzozNDM6XHRlcnIgPSBkYW1vbl9jb21taXRfY3R4KGN0eCwgcGFyYW1fY3R4KTtcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzQ0LW91dDpcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MTk2PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTI2OS1cdFx0Z290byBvdXQ7XG5tbS9kYW1vbi9yZWNsYWltLmM6MjcwOlx0ZXJyID0gZGFtb25fY29tbWl0X2N0eChjdHgsIHBhcmFtX2N0eCk7XG5tbS9kYW1vbi9yZWNsYWltLmMtMjcxLVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjA3Nj1zdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fc3lzZnNfbmV3X3Rlc3RfY3R4KFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjA4NC1cdFx0cmV0dXJuIE5VTEw7XG5tbS9kYW1vbi9zeXNmcy5jOjIwODU6XHRlcnIgPSBkYW1vbl9jb21taXRfY3R4KHRlc3RfY3R4LCBydW5uaW5nX2N0eCk7XG5tbS9kYW1vbi9zeXNmcy5jLTIwODYtXHRpZiAoZXJyKSB7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0yMDk5PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfY29tbWl0X2lucHV0KHZvaWQgKmRhdGEpXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMTE4LVx0fVxubW0vZGFtb24vc3lzZnMuYzoyMTE5Olx0ZXJyID0gZGFtb25fY29tbWl0X2N0eCh0ZXN0X2N0eCwgcGFyYW1fY3R4KTtcbm1tL2RhbW9uL3N5c2ZzLmMtMjEyMC1cdGlmIChlcnIpXG5tbS9kYW1vbi9zeXNmcy5jLTIxMjEtXHRcdGdvdG8gb3V0O1xubW0vZGFtb24vc3lzZnMuYzoyMTIyOlx0ZXJyID0gZGFtb25fY29tbWl0X2N0eChrZGFtb25kLVx1MDAzZWRhbW9uX2N0eCwgcGFyYW1fY3R4KTtcbm1tL2RhbW9uL3N5c2ZzLmMtMjEyMy1vdXQ6XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTExODM9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfY3R4KHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTE5Ni1cdHNyYy1cdTAwM2VtaW5fcmVnaW9uX3N6ID0gNDA5Njtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMTk3Olx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX2NvbW1pdF9jdHgoZHN0LCBzcmMpLCAwKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMTk4LVx0c3JjLVx1MDAzZW1pbl9yZWdpb25fc3ogPSA0MDk1O1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjExOTk6XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fY29tbWl0X2N0eChkc3QsIHNyYyksIC1FSU5WQUwpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEyMDAtXHRzcmMtXHUwMDNlbWluX3JlZ2lvbl9zeiA9IDQwOTY7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTIwMS1cdHNyYy1cdTAwM2VwYXVzZSA9IHRydWU7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTIwMjpcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9jb21taXRfY3R4KGRzdCwgc3JjKSwgMCk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTIwMy1cdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIGRzdC1cdTAwM2VwYXVzZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwNzEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBkYW1vbl9jb21taXRfY3R4YCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgYGRhbW9uX2NvbW1pdF9jdHhgIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHN0cnVjdHVyZSBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIGNvbmZpcm0gdGhhdCB0aGUgd2F5IGl0IGhhbmRsZXMgY29udGV4dCB3aXRoaW4gREFNT04gYWxpZ25zIHdpdGggbXkgZXhwZWN0ZWQgbW9kZWwuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBzdWJ0bGUgaXNzdWVzIGluIG1lbW9yeSBtYW5hZ2VtZW50LCBjb25jdXJyZW5jeSBpZiBhcHBsaWNhYmxlLCBhbmQgaWYgaXQgaW50ZXJhY3RzIHByb3Blcmx5IHdpdGggdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCBpbiB0cmFja2luZyBhbmQgc2NoZWR1bGluZyByZWdpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBkYXRhIGZsb3cgd2l0aGluIHRoZSBjb21taXQgb3BlcmF0aW9uLCBmb2N1c2luZyBvbiBkYXRhIGNvbnNpc3RlbmN5IHVuZGVyIGNvbmN1cnJlbnQgYWNjZXNzIGZyb20gbXVsdGlwbGUgdGhyZWFkcy9DUFVzLiBJIGFtIGxvb2tpbmcgZm9yIHRoZSB1c2FnZSBvZiBhdG9taWMgb3BlcmF0aW9ucywgbXV0ZXhlcywgYW5kIG90aGVyIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgY29kZSBwbGF5cyBuaWNlbHkgd2l0aCBvdGhlciBhcmVhcyBvZiBEQU1PTiB0aGF0IG1hbmFnZSBtZXRhZGF0YS4gQXJlIHRoZXJlIGFueSBjb3JuZXIgY2FzZXMgdGhhdCBtaWdodCBsZWFkIHRvIGRhdGEgY29ycnVwdGlvbiBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLCBlc3BlY2lhbGx5IGluIGhpZ2gtY29udGVudGlvbiBzY2VuYXJpb3M/IEZpbmFsbHksIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIC0gYXJlIGV4Y2VwdGlvbnMgcHJvcGVybHkgbWFuYWdlZCBhbmQgdGhlIHN5c3RlbSByZW1haW5zIHN0YWJsZT8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE1NjA6XHQvKipcbjE1NjE6XHQgKiBkYW1vbl9jb21taXRfY3R4KCkgLSBDb21taXQgcGFyYW1ldGVycyBvZiBhIERBTU9OIGNvbnRleHQgdG8gYW5vdGhlci5cbjE1NjI6XHQgKiBAZHN0Olx0VGhlIGNvbW1pdCBkZXN0aW5hdGlvbiBEQU1PTiBjb250ZXh0LlxuMTU2MzpcdCAqIEBzcmM6XHRUaGUgY29tbWl0IHNvdXJjZSBEQU1PTiBjb250ZXh0LlxuMTU2NDpcdCAqXG4xNTY1Olx0ICogVGhpcyBmdW5jdGlvbiBjb3BpZXMgdXNlci1zcGVjaWZpZWQgcGFyYW1ldGVycyBmcm9tIEBzcmMgdG8gQGRzdCBhbmQgdXBkYXRlXG4xNTY2Olx0ICogdGhlIGludGVybmFsIHN0YXR1cyBhbmQgcmVzdWx0cyBhY2NvcmRpbmdseS4gIFVzZXJzIHNob3VsZCB1c2UgdGhpcyBmdW5jdGlvblxuMTU2NzpcdCAqIGZvciBjb250ZXh0LWxldmVsIHBhcmFtZXRlcnMgdXBkYXRlIG9mIHJ1bm5pbmcgY29udGV4dCwgaW5zdGVhZCBvZiBtYW51YWxcbjE1Njg6XHQgKiBpbi1wbGFjZSB1cGRhdGVzLlxuMTU2OTpcdCAqXG4xNTcwOlx0ICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGZyb20gcGFyYW1ldGVycy11cGRhdGUgc2FmZSBjb250ZXh0LCBsaWtlXG4xNTcxOlx0ICogZGFtb25fY2FsbCgpLlxuMTU3MjpcdCAqL1xuMTU3MzpcdGludCBkYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxuMTU3NDpcdHtcbjE1NzU6XHRcdGludCBlcnI7XG4xNTc2Olx0XHRzdHJ1Y3QgZGFtb3MgKnNjaGVtZTtcbjE1Nzc6XHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsO1xuMTU3ODpcdFxuMTU3OTpcdFx0ZHN0LVx1MDAzZW1heWJlX2NvcnJ1cHRlZCA9IHRydWU7XG4xNTgwOlx0XHRpZiAoIWlzX3Bvd2VyX29mXzIoc3JjLVx1MDAzZW1pbl9yZWdpb25fc3opKVxuMTU4MTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE1ODI6XHRcbjE1ODM6XHRcdC8qIG5vZGVfZWxpZ2libGVfbWVtX2JwIG1ldHJpYyByZXF1aXJlcyBQQUREUiBvcHMgKi9cbjE1ODQ6XHRcdGlmIChzcmMtXHUwMDNlb3BzLmlkICE9IERBTU9OX09QU19QQUREUikge1xuMTU4NTpcdFx0XHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUoc2NoZW1lLCBzcmMpIHtcbjE1ODY6XHRcdFx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXHUwMDI2c2NoZW1lLVx1MDAzZXF1b3RhO1xuMTU4NzpcdFxuMTU4ODpcdFx0XHRcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgcXVvdGEpIHtcbjE1ODk6XHRcdFx0XHRcdGlmIChnb2FsLVx1MDAzZW1ldHJpYyA9PVxuMTU5MDpcdFx0XHRcdFx0XHRcdERBTU9TX1FVT1RBX05PREVfRUxJR0lCTEVfTUVNX0JQKVxuMTU5MTpcdFx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE1OTI6XHRcdFx0XHR9XG4xNTkzOlx0XHRcdH1cbjE1OTQ6XHRcdH1cbjE1OTU6XHRcbjE1OTY6XHRcdGVyciA9IGRhbW9uX2NvbW1pdF9zY2hlbWVzKGRzdCwgc3JjKTtcbjE1OTc6XHRcdGlmIChlcnIpXG4xNTk4Olx0XHRcdHJldHVybiBlcnI7XG4xNTk5Olx0XHRlcnIgPSBkYW1vbl9jb21taXRfdGFyZ2V0cyhkc3QsIHNyYyk7XG4xNjAwOlx0XHRpZiAoZXJyKVxuMTYwMTpcdFx0XHRyZXR1cm4gZXJyO1xuMTYwMjpcdFx0LypcbjE2MDM6XHRcdCAqIHNjaGVtZXMgYW5kIHRhcmdldHMgc2hvdWxkIGJlIHVwZGF0ZWQgZmlyc3QsIHNpbmNlXG4xNjA0Olx0XHQgKiAxLiBkYW1vbl9zZXRfYXR0cnMoKSB1cGRhdGVzIG1vbml0b3JpbmcgcmVzdWx0cyBvZiB0YXJnZXRzIGFuZFxuMTYwNTpcdFx0ICogbmV4dF9hcHBseV9zaXMgb2Ygc2NoZW1lcywgYW5kXG4xNjA2Olx0XHQgKiAyLiBvcHMgdXBkYXRlIHNob3VsZCBiZSBkb25lIGFmdGVyIHBpZCBoYW5kbGluZyBpcyBkb25lICh0YXJnZXRcbjE2MDc6XHRcdCAqICAgIGNvbW1pdHRpbmcgcmVxdWlyZSBwdXR0aW5nIHBpZHMpLlxuMTYwODpcdFx0ICovXG4xNjA5Olx0XHRpZiAoIWRhbW9uX2F0dHJzX2VxdWFscyhcdTAwMjZkc3QtXHUwMDNlYXR0cnMsIFx1MDAyNnNyYy1cdTAwM2VhdHRycykpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDA6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTEyOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgYGRhbW9uX2NvbW1pdF9jdHhgIGFuZCBQb3RlbnRpYWwgT3duZXJzaGlwKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuLi4gKmBkYW1vbl9jb21taXRfY3R4YCogaXMgY29weWluZyBzY2hlbWVzIGFuZCB0YXJnZXRzLiBIbW0sIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byBjbGFyaWZ5IHdoZXRoZXIgaXQmIzM5O3MgdHJ1bHkgbWFraW5nIGNvcGllcyBvciBpZiBpdCBtaWdodCBiZSB0cmFuc2ZlcnJpbmcgb3duZXJzaGlwIG9mIHRoZSB1bmRlcmx5aW5nIGRhdGEuIFRoYXQmIzM5O3MgYSBjcnVjaWFsIGRpc3RpbmN0aW9uIGZvciBtZW1vcnkgbWFuYWdlbWVudCBhbmQgcG90ZW50aWFsIGRhdGEgY29ycnVwdGlvbiBpc3N1ZXMsIGVzcGVjaWFsbHkgaW4gYSBzeXN0ZW0gbGlrZSB0aGlzLgoKT2theSwgbXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJJiMzOTt2ZSBnb3QgdG8gZGl2ZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgYGRhbW9uX2NvbW1pdF9zY2hlbWVzYCBhbmQgYGRhbW9uX2NvbW1pdF90YXJnZXRzYC4gVGhvc2UgYXJlIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdG8gY2hlY2sgbm93LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhleSYjMzk7cmUgZG9pbmcgd2l0aCB0aG9zZSBjb3BpZWQgc2NoZW1lcyBhbmQgdGFyZ2V0cy4gQXJlIHRoZXkgb3BlcmF0aW5nIG9uIHRoZW0gZGlyZWN0bHksIHBvdGVudGlhbGx5IG1vZGlmeWluZyBzaGFyZWQgZGF0YT8gQXJlIHRoZXkgY3JlYXRpbmcgbmV3LCBpbmRlcGVuZGVudCBjb3BpZXM/IFRoZSBkZXZpbCBpcyBkZWZpbml0ZWx5IGluIHRoZSBkZXRhaWxzIGhlcmUsIHNvIHRoZSBjb2RlIHdhbGsgYmVnaW5zIG5vdy4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgZmlndXJlIG91dCB0aGUgbWVtb3J5IHNlbWFudGljcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0NDA6XHRcdFx0XHRkYW1vbl9kZXN0cm95X3RhcmdldChkc3RfdGFyZ2V0LCBkc3QpO1xuMTQ0MTpcdFx0XHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBkc3QpIHtcbjE0NDI6XHRcdFx0XHRcdGlmIChzLVx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSA9PSBkc3RfdGFyZ2V0KSB7XG4xNDQzOlx0XHRcdFx0XHRcdHMtXHUwMDNlcXVvdGEuY2hhcmdlX3RhcmdldF9mcm9tID0gTlVMTDtcbjE0NDQ6XHRcdFx0XHRcdFx0cy1cdTAwM2VxdW90YS5jaGFyZ2VfYWRkcl9mcm9tID0gMDtcbjE0NDU6XHRcdFx0XHRcdH1cbjE0NDY6XHRcdFx0XHR9XG4xNDQ3Olx0XHRcdH1cbjE0NDg6XHRcdH1cbjE0NDk6XHRcbjE0NTA6XHRcdGZhaWxlZCA9IE5VTEw7XG4xNDUxOlx0XHRkYW1vbl9mb3JfZWFjaF90YXJnZXRfc2FmZShzcmNfdGFyZ2V0LCBuZXh0LCBzcmMpIHtcbjE0NTI6XHRcdFx0aWYgKGomIzQzOyYjNDM7IFx1MDAzYyBpKVxuMTQ1MzpcdFx0XHRcdGNvbnRpbnVlO1xuMTQ1NDpcdFx0XHQvKiB0YXJnZXQgdG8gcmVtb3ZlIGhhcyBubyBtYXRjaGluZyBkc3QgKi9cbjE0NTU6XHRcdFx0aWYgKHNyY190YXJnZXQtXHUwMDNlb2Jzb2xldGUpIHtcbjE0NTY6XHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMTQ1NzpcdFx0XHRcdGdvdG8gb3V0O1xuMTQ1ODpcdFx0XHR9XG4xNDU5Olx0XHRcdG5ld190YXJnZXQgPSBkYW1vbl9uZXdfdGFyZ2V0KCk7XG4xNDYwOlx0XHRcdGlmICghbmV3X3RhcmdldCkge1xuMTQ2MTpcdFx0XHRcdGVyciA9IC1FTk9NRU07XG4xNDYyOlx0XHRcdFx0Z290byBvdXQ7XG4xNDYzOlx0XHRcdH1cbjE0NjQ6XHRcdFx0ZXJyID0gZGFtb25fY29tbWl0X3RhcmdldChuZXdfdGFyZ2V0LCBmYWxzZSxcbjE0NjU6XHRcdFx0XHRcdHNyY190YXJnZXQsIGRhbW9uX3RhcmdldF9oYXNfcGlkKHNyYyksXG4xNDY2Olx0XHRcdFx0XHRzcmMtXHUwMDNlbWluX3JlZ2lvbl9zeik7XG4xNDY3Olx0XHRcdGlmIChlcnIpIHtcbjE0Njg6XHRcdFx0XHRkYW1vbl9kZXN0cm95X3RhcmdldChuZXdfdGFyZ2V0LCBOVUxMKTtcbjE0Njk6XHRcdFx0XHRnb3RvIG91dDtcbjE0NzA6XHRcdFx0fVxuMTQ3MTpcdFx0XHRkYW1vbl9hZGRfdGFyZ2V0KGRzdCwgbmV3X3RhcmdldCk7XG4xNDcyOlx0XHR9XG4xNDczOlx0XHRyZXR1cm4gMDtcbjE0NzQ6XHRcbjE0NzU6XHRvdXQ6XG4xNDc2Olx0XHRkYW1vbl9yZXZlcnRfdGFyZ2V0X2NvbW1pdHMoZHN0LCBmYWlsZWQsIHNyYyk7XG4xNDc3Olx0XHRyZXR1cm4gZXJyO1xuMTQ3ODpcdH1cbjE0Nzk6XHRcbjE0ODA6XHRzdGF0aWMgdm9pZCBkYW1vbl9jb21taXRfZmlsdGVyKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmRzdCxcbjE0ODE6XHRcdFx0c3RydWN0IGRhbW9uX2ZpbHRlciAqc3JjKVxuMTQ4MjpcdHtcbjE0ODM6XHRcdGRzdC1cdTAwM2V0eXBlID0gc3JjLVx1MDAzZXR5cGU7XG4xNDg0Olx0XHRkc3QtXHUwMDNlbWF0Y2hpbmcgPSBzcmMtXHUwMDNlbWF0Y2hpbmc7XG4xNDg1Olx0XHRkc3QtXHUwMDNlYWxsb3cgPSBzcmMtXHUwMDNlYWxsb3c7XG4xNDg2Olx0XHRzd2l0Y2ggKGRzdC1cdTAwM2V0eXBlKSB7XG4xNDg3Olx0XHRjYXNlIERBTU9OX0ZJTFRFUl9UWVBFX01FTUNHOlxuMTQ4ODpcdFx0XHRkc3QtXHUwMDNlbWVtY2dfaWQgPSBzcmMtXHUwMDNlbWVtY2dfaWQ7XG4xNDg5Olx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAwMDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDEzOQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIE1lbW9yeSBMZWFrcyBpbiBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCBmdW5jdGlvbiBhbmQgdGhlIHdheSBpdCBoYW5kbGVzIGBwYXJhbV9jdHhgLiBNeSBpbml0aWFsIHVuZGVyc3RhbmRpbmcsIGJhc2VkIG9uIHRoZSBmdW5jdGlvbiYjMzk7cyBzdHJ1Y3R1cmUsIHdhcyB0aGF0IGBkYW1vbl9jb21taXRfY3R4YCBjcmVhdGVzIG5ldyB0YXJnZXRzIGFuZCBjb3BpZXMgZGF0YSwgaW1wbHlpbmcgaXQgKmRvZXNuJiMzOTt0KiB0YWtlIG93bmVyc2hpcCBvZiBgcGFyYW1fY3R4YC4gVGhpcyBtZWFucyBgcGFyYW1fY3R4YCBuZWVkcyB0byBiZSBjbGVhbmVkIHVwIGFmdGVyIHRoZSBjYWxsLCByZWdhcmRsZXNzIG9mIHN1Y2Nlc3Mgb3IgZmFpbHVyZS4gQnV0IEkmIzM5O20gc2VlaW5nIHNvbWV0aGluZyB0aGF0JiMzOTtzIG1ha2luZyBtZSBwYXVzZS4KCkxvb2tpbmcgYXQgdGhlIHBhdGNoIHNuaXBwZXQgYWdhaW46IEkgYW0gbm93IG5vdGljaW5nIHRoZSBjb25kaXRpb25hbCByZXR1cm46IGlmIGBkYW1vbl9jb21taXRfY3R4YCAqc3VjY2VlZHMqIChpLmUuLCBgZXJyYCBpcyAwLCB0aHVzIGAhZXJyYCBpcyB0cnVlKSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgaW1tZWRpYXRlbHkgd2l0aCBgcmV0dXJuIDA7YCwgKmJ5cGFzc2luZyogdGhlIGNhbGwgdG8gYGRhbW9uX2Rlc3Ryb3lfY3R4KHBhcmFtX2N0eClgLgoKSXMgdGhpcyBhIHBvdGVudGlhbCBtZW1vcnkgbGVhaz8gSWYgYGRhbW9uX2NvbW1pdF9jdHhgICpjb3BpZXMqIGV2ZXJ5dGhpbmcgZnJvbSBgcGFyYW1fY3R4YCwgdGhlbiBgcGFyYW1fY3R4YCAqc2hvdWxkKiBiZSBkZXN0cm95ZWQuIElmLCBvbiB0aGUgb3RoZXIgaGFuZCwgYGRhbW9uX2NvbW1pdF9jdHhgICp0YWtlcyogb3duZXJzaGlwLCB0aGVuIGBwYXJhbV9jdHhgICpzaG91bGRuJiMzOTt0KiBiZSBkZXN0cm95ZWQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGlzIGhhcHBlbmluZy4gSSByZWFsbHkgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGJlaGF2aW9yIG9mIGBkYW1vbl9jb21taXRfY3R4YCBhbmQgbW9yZSBpbXBvcnRhbnRseSBgZGFtb25fZGVzdHJveV9jdHhgIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAwOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NjA6XHRcdGRlZmF1bHQ6XG4gNDYxOlx0XHRcdGJyZWFrO1xuIDQ2MjpcdFx0fVxuIDQ2MzpcdFx0cmV0dXJuIHRydWU7XG4gNDY0Olx0fVxuIDQ2NTpcdFxuIDQ2NjpcdHZvaWQgZGFtb3NfYWRkX2ZpbHRlcihzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vc19maWx0ZXIgKmYpXG4gNDY3Olx0e1xuIDQ2ODpcdFx0aWYgKGRhbW9zX2ZpbHRlcl9mb3Jfb3BzKGYtXHUwMDNldHlwZSkpXG4gNDY5Olx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2Zi1cdTAwM2VsaXN0LCBcdTAwMjZzLVx1MDAzZW9wc19maWx0ZXJzKTtcbiA0NzA6XHRcdGVsc2VcbiA0NzE6XHRcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZmLVx1MDAzZWxpc3QsIFx1MDAyNnMtXHUwMDNlY29yZV9maWx0ZXJzKTtcbiA0NzI6XHR9XG4gNDczOlx0XG4gNDc0Olx0c3RhdGljIHZvaWQgZGFtb3NfZGVsX2ZpbHRlcihzdHJ1Y3QgZGFtb3NfZmlsdGVyICpmKVxuIDQ3NTpcdHtcbiA0NzY6XHRcdGxpc3RfZGVsKFx1MDAyNmYtXHUwMDNlbGlzdCk7XG4gNDc3Olx0fVxuIDQ3ODpcdFxuIDQ3OTpcdHN0YXRpYyB2b2lkIGRhbW9zX2ZyZWVfZmlsdGVyKHN0cnVjdCBkYW1vc19maWx0ZXIgKmYpXG4gNDgwOlx0e1xuIDQ4MTpcdFx0a2ZyZWUoZik7XG4gNDgyOlx0fVxuIDQ4MzpcdFxuIDQ4NDpcdHZvaWQgZGFtb3NfZGVzdHJveV9maWx0ZXIoc3RydWN0IGRhbW9zX2ZpbHRlciAqZilcbiA0ODU6XHR7XG4gNDg2Olx0XHRkYW1vc19kZWxfZmlsdGVyKGYpO1xuIDQ4NzpcdFx0ZGFtb3NfZnJlZV9maWx0ZXIoZik7XG4gNDg4Olx0fVxuIDQ4OTpcdFxuIDQ5MDpcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19uZXdfcXVvdGFfZ29hbChcbiA0OTE6XHRcdFx0ZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyBtZXRyaWMsXG4gNDkyOlx0XHRcdHVuc2lnbmVkIGxvbmcgdGFyZ2V0X3ZhbHVlKVxuIDQ5MzpcdHtcbiA0OTQ6XHRcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsO1xuIDQ5NTpcdFxuIDQ5NjpcdFx0Z29hbCA9IGttYWxsb2Nfb2JqKCpnb2FsKTtcbiA0OTc6XHRcdGlmICghZ29hbClcbiA0OTg6XHRcdFx0cmV0dXJuIE5VTEw7XG4gNDk5Olx0XHRnb2FsLVx1MDAzZW1ldHJpYyA9IG1ldHJpYztcbiA1MDA6XHRcdGdvYWwtXHUwMDNldGFyZ2V0X3ZhbHVlID0gdGFyZ2V0X3ZhbHVlO1xuIDUwMTpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2Z29hbC1cdTAwM2VsaXN0KTtcbiA1MDI6XHRcdHJldHVybiBnb2FsO1xuIDUwMzpcdH1cbiA1MDQ6XHRcbiA1MDU6XHR2b2lkIGRhbW9zX2FkZF9xdW90YV9nb2FsKHN0cnVjdCBkYW1vc19xdW90YSAqcSwgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmcpXG4gNTA2Olx0e1xuIDUwNzpcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZnLVx1MDAzZWxpc3QsIFx1MDAyNnEtXHUwMDNlZ29hbHMpO1xuIDUwODpcdH1cbiA1MDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDA6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0NjQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzOgoKKipBbmFseXppbmcgYGRhbW9uX2Rlc3Ryb3lfY3R4YCoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciBkb3duIHRoaXMgcmFiYml0IGhvbGUsIEkgbmVlZCB0byB0YWtlIGEgc3RlcCBiYWNrIGFuZCBleGFtaW5lIHRoZSBjb3JlIG9mIHRoaXMuIFRoZSBmaXJzdCB0aGluZyB0aGF0IG5lZWRzIHRvIGhhcHBlbiBpcyBhIGRpcmVjdCBleGFtaW5hdGlvbiBvZiBgZGFtb25fZGVzdHJveV9jdHhgIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHN0cnVjdHVyZSwgaXRzIGRlcGVuZGVuY2llcywgd2hhdCBpdCYjMzk7cyBzdXBwb3NlZCB0byBkbywgYW5kIG1vc3QgaW1wb3J0YW50bHksICpob3cqIGl0JiMzOTtzIHN1cHBvc2VkIHRvIGRvIGl0LiBPbmx5IHRoZW4gY2FuIEkgcmVhc29uYWJseSB0cm91Ymxlc2hvb3QgYW55IGlzc3Vlcy4gSSYjMzk7bGwgc3RhcnQgd2l0aCBhIGNvZGUtbGV2ZWwgcmV2aWV3IG9mIHRoZSBmdW5jdGlvbi9vYmplY3QgZGVmaW5pdGlvbiB0byBhc3Nlc3MgaWYgaXQmIzM5O3Mgb3BlcmF0aW5nIGFzIGludGVuZGVkLiBJdCYjMzk7cyB0aGUgb25seSB3YXkgdG8gYmUgY29uZmlkZW50IHRoYXQgb3RoZXIgYXNzb2NpYXRlZCBsb2dpYyBpcyBub3Qgc2ltcGx5IG1hc2tpbmcgYW4gaW5pdGlhbCBwcm9ibGVtIHRoYXQgbmVlZHMgdG8gYmUgc29sdmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAwMDowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIGRhbW9uX2Rlc3Ryb3lfY3R4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz03MzQ9c3RhdGljIHZvaWQgZGFtb25fZGVzdHJveV90YXJnZXRzKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzQxLVxubW0vZGFtb24vY29yZS5jOjc0Mjp2b2lkIGRhbW9uX2Rlc3Ryb3lfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL2NvcmUuYy03NDMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAwMDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc4NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB3aGF0JiMzOTtzIGdvaW5nIG9uOgoKKipBbmFseXppbmcgdGhlIENvbnRleHQgb2YgJiMzNDtkYW1vbl9kZXN0cm95X2N0eCYjMzQ7KioKCkFscmlnaHQsIEkmIzM5O20gc3RhcnRpbmcgd2l0aCBgZGFtb25fZGVzdHJveV9jdHhgLiBJIHNlZSB0aGF0IG5hbWUgYW5kIGltbWVkaWF0ZWx5IHN0YXJ0IHRvIHRoaW5rIGFib3V0IHRoZSBwb3NzaWJsZSBpbXBsaWNhdGlvbnMuIENvbnRleHQgaXMga2V5LCBzbyBJJiMzOTttIHRyeWluZyB0byBtZW50YWxseSBtYXAgb3V0IHdoYXQgJiMzOTtkYW1vbiYjMzk7IGNvdWxkIHJlcHJlc2VudC4gSXMgaXQgYSBkZW1vbiwgYSBkYXRhIHN0cnVjdHVyZSwgYSBwcm9jZXNzLCBhIHVzZXI/ICYjMzk7RGVzdHJveSYjMzk7IGltcGxpZXMgc29tZSBraW5kIG9mIHRlcm1pbmF0aW9uIG9yIGNsZWFudXAgb3BlcmF0aW9uLiBBbmQgJiMzOTtjdHgmIzM5Oy4uLiB0aGF0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgc2hvcnQgZm9yIGNvbnRleHQuIE5vdywgY29udGV4dCBjYW4gbWVhbiBhIG11bHRpdHVkZSBvZiB0aGluZ3MgZGVwZW5kaW5nIG9uIHRoZSBzeXN0ZW0gYW5kIGRvbWFpbiwgcmFuZ2luZyBmcm9tIHNpbXBsZSBleGVjdXRpb24gZW52aXJvbm1lbnQgdG8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBuZWVkIHRvIGJlIG1hbmFnZWQuIFRoZXJlZm9yZSwgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgZnVuY3Rpb24mIzM5O3MgcHVycG9zZSBpcyB0byBjbGVhbmx5IGRpc3Bvc2Ugb2Ygb3IgbnVsbGlmeSB0aGUgJiMzOTtjb250ZXh0JiMzOTsgYXNzb2NpYXRlZCB3aXRoIHRoaXMgJiMzOTtkYW1vbiYjMzk7LiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZGVlcGVyIGludG8gdGhlIGltcGxlbWVudGF0aW9uIHRvIHBpbnBvaW50IHRoZSBzcGVjaWZpY3MsIHRoZSBzY29wZSwgdGhlIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMsIGFuZCBvZiBjb3Vyc2UsIHRoZSBlcnJvciBoYW5kbGluZyBpbnZvbHZlZC4gVGhpcyBjb3VsZCBiZSBhIGNyaXRpY2FsIHBhcnQgb2YgYSBsYXJnZXIgcHJvY2VzcywgYW5kIHVuZGVyc3RhbmRpbmcgaXRzIGZ1bmN0aW9uIHRob3JvdWdobHkgaXMgcGFyYW1vdW50IGJlZm9yZSBtYWtpbmcgY2hhbmdlcyBvciBldmVuIGludGVncmF0aW5nIGl0IGludG8gYSBicm9hZGVyIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc0MDpcdH1cbiA3NDE6XHRcbiA3NDI6XHR2b2lkIGRhbW9uX2Rlc3Ryb3lfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiA3NDM6XHR7XG4gNzQ0Olx0XHRzdHJ1Y3QgZGFtb3MgKnMsICpuZXh0X3M7XG4gNzQ1Olx0XHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnAsICpuZXh0X3A7XG4gNzQ2Olx0XG4gNzQ3Olx0XHRkYW1vbl9kZXN0cm95X3RhcmdldHMoY3R4KTtcbiA3NDg6XHRcbiA3NDk6XHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZV9zYWZlKHMsIG5leHRfcywgY3R4KVxuIDc1MDpcdFx0XHRkYW1vbl9kZXN0cm95X3NjaGVtZShzKTtcbiA3NTE6XHRcbiA3NTI6XHRcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlX3NhZmUocCwgbmV4dF9wLCBjdHgpXG4gNzUzOlx0XHRcdGRhbW9uX2Rlc3Ryb3lfcHJvYmUocCk7XG4gNzU0Olx0XG4gNzU1Olx0XHRrZnJlZShjdHgpO1xuIDc1NjpcdH1cbiA3NTc6XHRcbiA3NTg6XHRzdGF0aWMgYm9vbCBkYW1vbl9hdHRyc19lcXVhbHMoY29uc3Qgc3RydWN0IGRhbW9uX2F0dHJzICphdHRyczEsXG4gNzU5Olx0XHRcdGNvbnN0IHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMyKVxuIDc2MDpcdHtcbiA3NjE6XHRcdGNvbnN0IHN0cnVjdCBkYW1vbl9pbnRlcnZhbHNfZ29hbCAqaWcxID0gXHUwMDI2YXR0cnMxLVx1MDAzZWludGVydmFsc19nb2FsO1xuIDc2MjpcdFx0Y29uc3Qgc3RydWN0IGRhbW9uX2ludGVydmFsc19nb2FsICppZzIgPSBcdTAwMjZhdHRyczItXHUwMDNlaW50ZXJ2YWxzX2dvYWw7XG4gNzYzOlx0XG4gNzY0Olx0XHRyZXR1cm4gYXR0cnMxLVx1MDAzZXNhbXBsZV9pbnRlcnZhbCA9PSBhdHRyczItXHUwMDNlc2FtcGxlX2ludGVydmFsIFx1MDAyNlx1MDAyNlxuIDc2NTpcdFx0XHRhdHRyczEtXHUwMDNlYWdncl9pbnRlcnZhbCA9PSBhdHRyczItXHUwMDNlYWdncl9pbnRlcnZhbCBcdTAwMjZcdTAwMjZcbiA3NjY6XHRcdFx0YXR0cnMxLVx1MDAzZW9wc191cGRhdGVfaW50ZXJ2YWwgPT0gYXR0cnMyLVx1MDAzZW9wc191cGRhdGVfaW50ZXJ2YWwgXHUwMDI2XHUwMDI2XG4gNzY3Olx0XHRcdGF0dHJzMS1cdTAwM2VtaW5fbnJfcmVnaW9ucyA9PSBhdHRyczItXHUwMDNlbWluX25yX3JlZ2lvbnMgXHUwMDI2XHUwMDI2XG4gNzY4Olx0XHRcdGF0dHJzMS1cdTAwM2VtYXhfbnJfcmVnaW9ucyA9PSBhdHRyczItXHUwMDNlbWF4X25yX3JlZ2lvbnMgXHUwMDI2XHUwMDI2XG4gNzY5Olx0XHRcdGlnMS1cdTAwM2VhY2Nlc3NfYnAgPT0gaWcyLVx1MDAzZWFjY2Vzc19icCBcdTAwMjZcdTAwMjZcbiA3NzA6XHRcdFx0aWcxLVx1MDAzZWFnZ3JzID09IGlnMi1cdTAwM2VhZ2dycyBcdTAwMjZcdTAwMjZcbiA3NzE6XHRcdFx0aWcxLVx1MDAzZW1pbl9zYW1wbGVfdXMgPT0gaWcyLVx1MDAzZW1pbl9zYW1wbGVfdXMgXHUwMDI2XHUwMDI2XG4gNzcyOlx0XHRcdGlnMS1cdTAwM2VtYXhfc2FtcGxlX3VzID09IGlnMi1cdTAwM2VtYXhfc2FtcGxlX3VzO1xuIDc3MzpcdH1cbiA3NzQ6XHRcbiA3NzU6XHRzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX2FnZV9mb3JfbmV3X2F0dHJzKHVuc2lnbmVkIGludCBhZ2UsXG4gNzc2Olx0XHRcdHN0cnVjdCBkYW1vbl9hdHRycyAqb2xkX2F0dHJzLCBzdHJ1Y3QgZGFtb25fYXR0cnMgKm5ld19hdHRycylcbiA3Nzc6XHR7XG4gNzc4Olx0XHRyZXR1cm4gYWdlICogb2xkX2F0dHJzLVx1MDAzZWFnZ3JfaW50ZXJ2YWwgLyBuZXdfYXR0cnMtXHUwMDNlYWdncl9pbnRlcnZhbDtcbiA3Nzk6XHR9XG4gNzgwOlx0XG4gNzgxOlx0LyogY29udmVydCBhY2Nlc3MgcmF0aW8gaW4gYnAgKHBlciAxMCwwMDApIHRvIG5yX2FjY2Vzc2VzICovXG4gNzgyOlx0c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9hY2Nlc3Nlc19icF90b19ucl9hY2Nlc3NlcyhcbiA3ODM6XHRcdFx0dW5zaWduZWQgaW50IGFjY2Vzc2VzX2JwLCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxuIDc4NDpcdHtcbiA3ODU6XHRcdHJldHVybiBhY2Nlc3Nlc19icCAqIGRhbW9uX21heF9ucl9hY2Nlc3NlcyhhdHRycykgLyAxMDAwMDtcbiA3ODY6XHR9XG4gNzg3Olx0XG4gNzg4Olx0LypcbiA3ODk6XHQgKiBDb252ZXJ0IG5yX2FjY2Vzc2VzIHRvIGFjY2VzcyByYXRpbyBpbiBicCAocGVyIDEwLDAwMCkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTQ2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBgZGFtb25fY29tbWl0X2N0eGAgQmVoYXZpb3IqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBgZGFtb25fY29tbWl0X2N0eGAgaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgbGlrZWx5IGludm9sdmVkIGluIGNvcHlpbmcgc2NoZW1lcyBhbmQgdGFyZ2V0cy4gVGhhdCYjMzk7cyBhIGNvbW1vbiBwYXR0ZXJuIGluIHRoaXMga2luZCBvZiBjb250ZXh0LiBMZXQmIzM5O3Mgbm90IG1ha2UgYW55IGFzc3VtcHRpb25zIHRob3VnaCwgaXQmIzM5O3MgYWx3YXlzIGJlc3QgdG8gYmUgcHJlY2lzZS4gVG8gY29uZmlybSB0aGlzLCBJIG5lZWQgdG8gbG9vayBkaXJlY3RseSBhdCBob3cgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgc2NoZW1lcy4gVGhlIGtleSBwbGFjZSB0byBzdGFydCBsb29raW5nIGlzIGBkYW1vbl9jb21taXRfc2NoZW1lc2AuIFRoYXQgc2hvdWxkIHRlbGwgdGhlIHdob2xlIHN0b3J5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAwMDowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTMzMDpcdHN0YXRpYyBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpkYW1vbl9udGhfdGFyZ2V0KGludCBuLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4xMzMxOlx0e1xuMTMzMjpcdFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbjEzMzM6XHRcdGludCBpID0gMDtcbjEzMzQ6XHRcbjEzMzU6XHRcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjdHgpIHtcbjEzMzY6XHRcdFx0aWYgKGkmIzQzOyYjNDM7ID09IG4pXG4xMzM3Olx0XHRcdFx0cmV0dXJuIHQ7XG4xMzM4Olx0XHR9XG4xMzM5Olx0XHRyZXR1cm4gTlVMTDtcbjEzNDA6XHR9XG4xMzQxOlx0XG4xMzQyOlx0LypcbjEzNDM6XHQgKiBUaGUgY2FsbGVyIHNob3VsZCBlbnN1cmUgdGhlIHJlZ2lvbnMgb2YgQHNyYyBhcmVcbjEzNDQ6XHQgKiAxLiB2YWxpZCAoZW5kIFx1MDAzZT0gc3JjKSBhbmRcbjEzNDU6XHQgKiAyLiBzb3J0ZWQgYnkgc3RhcnRpbmcgYWRkcmVzcy5cbjEzNDY6XHQgKlxuMTM0NzpcdCAqIElmIEBzcmMgaGFzIG5vIHJlZ2lvbiwgQGRzdCBrZWVwcyBjdXJyZW50IHJlZ2lvbnMuXG4xMzQ4Olx0ICovXG4xMzQ5Olx0c3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqZHN0LFxuMTM1MDpcdFx0XHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpzcmMsIHVuc2lnbmVkIGxvbmcgc3JjX21pbl9yZWdpb25fc3opXG4xMzUxOlx0e1xuMTM1MjpcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqc3JjX3JlZ2lvbjtcbjEzNTM6XHRcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXM7XG4xMzU0Olx0XHRpbnQgaSA9IDAsIGVycjtcbjEzNTU6XHRcbjEzNTY6XHRcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihzcmNfcmVnaW9uLCBzcmMpXG4xMzU3Olx0XHRcdGkmIzQzOyYjNDM7O1xuMTM1ODpcdFx0aWYgKCFpKVxuMTM1OTpcdFx0XHRyZXR1cm4gMDtcbjEzNjA6XHRcbjEzNjE6XHRcdHJhbmdlcyA9IGttYWxsb2Nfb2JqcygqcmFuZ2VzLCBpLCBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTtcbjEzNjI6XHRcdGlmICghcmFuZ2VzKVxuMTM2MzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjEzNjQ6XHRcdGkgPSAwO1xuMTM2NTpcdFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHNyY19yZWdpb24sIHNyYylcbjEzNjY6XHRcdFx0cmFuZ2VzW2kmIzQzOyYjNDM7XSA9IHNyY19yZWdpb24tXHUwMDNlYXI7XG4xMzY3Olx0XHRlcnIgPSBkYW1vbl9zZXRfcmVnaW9ucyhkc3QsIHJhbmdlcywgaSwgc3JjX21pbl9yZWdpb25fc3opO1xuMTM2ODpcdFx0a2ZyZWUocmFuZ2VzKTtcbjEzNjk6XHRcdHJldHVybiBlcnI7XG4xMzcwOlx0fVxuMTM3MTpcdFxuMTM3MjpcdHN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3RhcmdldChcbjEzNzM6XHRcdFx0c3RydWN0IGRhbW9uX3RhcmdldCAqZHN0LCBib29sIGRzdF9oYXNfcGlkLFxuMTM3NDpcdFx0XHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpzcmMsIGJvb2wgc3JjX2hhc19waWQsXG4xMzc1Olx0XHRcdHVuc2lnbmVkIGxvbmcgc3JjX21pbl9yZWdpb25fc3opXG4xMzc2Olx0e1xuMTM3NzpcdFx0aW50IGVycjtcbjEzNzg6XHRcbjEzNzk6XHRcdGVyciA9IGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9ucyhkc3QsIHNyYywgc3JjX21pbl9yZWdpb25fc3opO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAwMDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg4OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQganVzdCBoYXBwZW5lZDoKCioqRGFtb24gQ29udGV4dCBNZW1vcnkgTGVhayBTdXNwZWN0ZWQqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBgZGFtb25fY29tbWl0X2N0eGAgaXMgYmVoYXZpbmcgaGVyZS4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBjb3B5aW5nIGRhdGEgZnJvbSBgcGFyYW1fY3R4YCB0byBgY3R4YC4gVGhlIGNydWNpYWwgdGhpbmcgSSYjMzk7bSBmb2N1c2luZyBvbiBpcyB3aGV0aGVyIGl0JiMzOTtzIHRyYW5zZmVycmluZyBvd25lcnNoaXAgb2YgdGhlIG1lbW9yeS4gSWYgaXQgKmRvZXNuJiMzOTt0KiB0YWtlIG93bmVyc2hpcCwgYW5kIGlmIGBwYXJhbV9jdHhgIGlzbiYjMzk7dCBwcm9wZXJseSBkZXN0cm95ZWQgYWZ0ZXJ3YXJkcywgd2UmIzM5O3JlIGdvaW5nIHRvIGhhdmUgYSBjbGFzc2ljIG1lbW9yeSBsZWFrLiBJdCYjMzk7cyBhIHRleHRib29rIHNpdHVhdGlvbiEgSSBuZWVkIHRvIHZlcmlmeSBob3cgYHBhcmFtX2N0eGAgaXMgaGFuZGxlZCBhZnRlciB0aGlzIGNvcHkuIFJpZ2h0IG5vdywgSSYjMzk7bSBsZWFuaW5nIHRvd2FyZCB0aGlua2luZyBpdCYjMzk7cyBub3QgYmVpbmcgZnJlZWQsIGFuZCB3ZSYjMzk7cmUgbGVha2luZy4KCkxldCYjMzk7cyBxdWlja2x5IGNoZWNrIGBkYW1vbl9zeXNmc19jb21taXRfaW5wdXRgIGluIGBtbS9kYW1vbi9zeXNmcy5jYC4gVGhhdCBzaG91bGQgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoaXMuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIGNvbmZpcm0gdGhpcyBzdXNwZWN0ZWQgb3ZlcnNpZ2h0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAwMDowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxMTA6XHRcbjIxMTE6XHRcdHBhcmFtX2N0eCA9IGRhbW9uX3N5c2ZzX2J1aWxkX2N0eChrZGFtb25kLVx1MDAzZWNvbnRleHRzLVx1MDAzZWNvbnRleHRzX2FyclswXSk7XG4yMTEyOlx0XHRpZiAoSVNfRVJSKHBhcmFtX2N0eCkpXG4yMTEzOlx0XHRcdHJldHVybiBQVFJfRVJSKHBhcmFtX2N0eCk7XG4yMTE0Olx0XHR0ZXN0X2N0eCA9IGRhbW9uX3N5c2ZzX25ld190ZXN0X2N0eChrZGFtb25kLVx1MDAzZWRhbW9uX2N0eCk7XG4yMTE1Olx0XHRpZiAoIXRlc3RfY3R4KSB7XG4yMTE2Olx0XHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KHBhcmFtX2N0eCk7XG4yMTE3Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMjExODpcdFx0fVxuMjExOTpcdFx0ZXJyID0gZGFtb25fY29tbWl0X2N0eCh0ZXN0X2N0eCwgcGFyYW1fY3R4KTtcbjIxMjA6XHRcdGlmIChlcnIpXG4yMTIxOlx0XHRcdGdvdG8gb3V0O1xuMjEyMjpcdFx0ZXJyID0gZGFtb25fY29tbWl0X2N0eChrZGFtb25kLVx1MDAzZWRhbW9uX2N0eCwgcGFyYW1fY3R4KTtcbjIxMjM6XHRvdXQ6XG4yMTI0Olx0XHRkYW1vbl9kZXN0cm95X2N0eCh0ZXN0X2N0eCk7XG4yMTI1Olx0XHRkYW1vbl9kZXN0cm95X2N0eChwYXJhbV9jdHgpO1xuMjEyNjpcdFx0cmV0dXJuIGVycjtcbjIxMjc6XHR9XG4yMTI4Olx0XG4yMTI5Olx0c3RhdGljIGludCBkYW1vbl9zeXNmc19jb21taXRfc2NoZW1lc19xdW90YV9nb2Fscyh2b2lkICpkYXRhKVxuMjEzMDpcdHtcbjIxMzE6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICpzeXNmc19rZGFtb25kID0gZGF0YTtcbjIxMzI6XHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcbjIxMzM6XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19jb250ZXh0ICpzeXNmc19jdHg7XG4yMTM0Olx0XG4yMTM1Olx0XHRpZiAoIWRhbW9uX3N5c2ZzX2tkYW1vbmRfcnVubmluZyhzeXNmc19rZGFtb25kKSlcbjIxMzY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yMTM3Olx0XHQvKiBUT0RPOiBTdXBwb3J0IG11bHRpcGxlIGNvbnRleHRzIHBlciBrZGFtb25kICovXG4yMTM4Olx0XHRpZiAoc3lzZnNfa2RhbW9uZC1cdTAwM2Vjb250ZXh0cy1cdTAwM2VuciAhPSAxKVxuMjEzOTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjIxNDA6XHRcbjIxNDE6XHRcdGN0eCA9IHN5c2ZzX2tkYW1vbmQtXHUwMDNlZGFtb25fY3R4O1xuMjE0MjpcdFx0c3lzZnNfY3R4ID0gc3lzZnNfa2RhbW9uZC1cdTAwM2Vjb250ZXh0cy1cdTAwM2Vjb250ZXh0c19hcnJbMF07XG4yMTQzOlx0XHRyZXR1cm4gZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzeXNmc19jdHgtXHUwMDNlc2NoZW1lcywgY3R4KTtcbjIxNDQ6XHR9XG4yMTQ1Olx0XG4yMTQ2Olx0LypcbjIxNDc6XHQgKiBkYW1vbl9zeXNmc191cGRfc2NoZW1lc19lZmZlY3RpdmVfcXVvdGFzKCkgLSBVcGRhdGUgc2NoZW1lcyBlZmZlY3RpdmUgcXVvdGFzXG4yMTQ4Olx0ICogc3lzZnMgZmlsZXMuXG4yMTQ5Olx0ICogQGRhdGE6XHRUaGUga29iamVjdCB3cmFwcGVyIHRoYXQgYXNzb2NpYXRlZCB0byB0aGUga2RhbW9uZCB0aHJlYWQuXG4yMTUwOlx0ICpcbjIxNTE6XHQgKiBUaGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSBzY2hlbWVzJiMzOTsgZWZmZWN0aXZlIHF1b3RhcyBvZiBzcGVjaWZpYyBrZGFtb25kIGFuZFxuMjE1MjpcdCAqIHVwZGF0ZSB0aGUgcmVsYXRlZCB2YWx1ZXMgZm9yIHN5c2ZzIGZpbGVzLiAgVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkXG4yMTUzOlx0ICogZnJvbSBEQU1PTiBjYWxsYmFja3Mgd2hpbGUgaG9sZGluZyBgYGRhbW9uX3N5ZnNfbG9ja2BgLCB0byBzYWZlbHkgYWNjZXNzIHRoZVxuMjE1NDpcdCAqIERBTU9OIGNvbnRleHRzLWludGVybmFsIGRhdGEgYW5kIERBTU9OIHN5c2ZzIHZhcmlhYmxlcy5cbjIxNTU6XHQgKi9cbjIxNTY6XHRzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3VwZF9zY2hlbWVzX2VmZmVjdGl2ZV9xdW90YXModm9pZCAqZGF0YSlcbjIxNTc6XHR7XG4yMTU4Olx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZCA9IGRhdGE7XG4yMTU5Olx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHggPSBrZGFtb25kLVx1MDAzZWRhbW9uX2N0eDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDA6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxMTAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA4MDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIE1lbW9yeSBMZWFrIGluIERBTU9OIFJlY2xhbWF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgcmVsYXRlZCB0byBEQU1PTiYjMzk7cyByZWNsYW1hdGlvbiBtZWNoYW5pc20uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGluIGBkYW1vbl9zeXNmc19jb21taXRfaW5wdXRgLCBgZGFtb25fZGVzdHJveV9jdHgocGFyYW1fY3R4KWAgaXMgYWx3YXlzIGNhbGxlZCBhdCB0aGUgZW5kLCByZWdhcmRsZXNzIG9mIHRoZSBzdWNjZXNzIG9mIGBkYW1vbl9jb21taXRfY3R4YC4gTm93LCBJJiMzOTttIGV4YW1pbmluZyBhIHNwZWNpZmljIHBhdGNoIHdpdGhpbiBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYC4gSSBzZWUgdGhhdCB0aGUgY29kZSBhdHRlbXB0cyB0byBjb21taXQgYSBjb250ZXh0LCBidXQgdGhlbiB0aGVyZSYjMzk7cyBhbiBgaWYgKCFlcnIpIHJldHVybiAwO2Agc3RhdGVtZW50ICpiZWZvcmUqIHRoZSBjYWxsIHRvIGBkYW1vbl9kZXN0cm95X2N0eChwYXJhbV9jdHgpYC4KCk15IGNvbmNlcm4gaW1tZWRpYXRlbHkgaXMsICYjMzQ7V2FpdCwgaWYgYGRhbW9uX2NvbW1pdF9jdHhgIHN1Y2NlZWRzIChtZWFuaW5nIGBlcnJgIGlzIHplcm8pLCB3ZSAqc2tpcCogZGVzdHJveWluZyBgcGFyYW1fY3R4YD8gVGhhdCYjMzk7cyBhIG1lbW9yeSBsZWFrISYjMzQ7IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhpcywgc28gSSByZS1yZWFkIHRoYXQgc2VjdGlvbiBvZiB0aGUgcGF0Y2gsIGFuZCB5ZXMsIGl0JiMzOTtzIGNsZWFyOiBpZiBubyBlcnJvciwgd2Ugc2hvcnQtY2lyY3VpdCB0aGUgZnVuY3Rpb24gYW5kIHJldHVybiB3aXRob3V0IGZyZWVpbmcgdGhlIG1lbW9yeS4KCk5vdyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgZGVzaWduLiBXaHkgd291bGRuJiMzOTt0IHdlIHdhbnQgdG8gZGVzdHJveSB0aGUgY29udGV4dCAqZXZlcnkqIHRpbWU/IERvZXMgYGRhbW9uX2NvbW1pdF9jdHhgIG1heWJlIHRha2Ugb3duZXJzaGlwIG9mIHRoZSBjb250ZXh0IGluIHNvbWUgY2lyY3Vtc3RhbmNlcz8gTm8sIHRoYXQmIzM5O3Mgbm90IHJpZ2h0LCBiZWNhdXNlIGBkYW1vbl9zeXNmc19jb21taXRfaW5wdXRgIGhhbmRsZXMgaXRzIGRlc3RydWN0aW9uLgoKT2theSwgbGV0JiMzOTtzIGxvb2sgYXQgYGRhbW9uX3JlY2xhaW1faW5pdGAgYmVjYXVzZSBpdCBoYXMgdGhlIGNvbnRleHQgaW5pdGlhbGl6YXRpb24uIEkgc2VlIHRoYXQgdGhlcmUmIzM5O3MgYSBzYWZldHkgbmV0IHdoZXJlIGBjdHhgIGlzIGRlc3Ryb3llZCBpZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIGluaXRpYWxpemF0aW9uLiBJJiMzOTttIHN0YXJ0aW5nIHRvIHRoaW5rLCBpcyB0aGlzIHBhdGNoIGFjdHVhbGx5IGludHJvZHVjaW5nIGEgbGVhaz8KClRoZSBjb21taXQgbWVzc2FnZSBpcyB0aGUgbmV4dCB0aGluZyBJIG5lZWQgdG8gY2hlY2suIE9rYXksIGl0IHNheXMgJiMzNDtzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcuJiMzNDsgV2FpdCwgdGhlIGNvbW1pdCBtZXNzYWdlIGluIGBkYW1vbl9yZWNsYWltX2luaXRgIHNheXMgJiMzNDtQcmV2ZW50IHBvdGVudGlhbCBtZW1vcnkgbGVha2FnZS4mIzM0OyBCdXQgdGhpcyBwYXRjaCYjMzk7cyBhZGRlZCBjb25kaXRpb25hbCBzdGF0ZW1lbnQgaW4gYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AgaXMgZXhhY3RseSB0aGUgb3Bwb3NpdGU6IGl0IGFkZHMgYW4gZWFybHkgcmV0dXJuIHRoYXQgc2tpcHMgdGhlIGNsZWFudXAuIFNvLCBpZiBgZGFtb25fY29tbWl0X2N0eGAgcmV0dXJucyBhbiBlcnJvciwgd2UgY29ycmVjdGx5IGRlc3Ryb3kgYHBhcmFtX2N0eGAsIGJ1dCBpZiBpdCBzdWNjZWVkcywgd2UgbGVhayBpdC4KClNvLCAqdGhpcyBpcyBhYnNvbHV0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UuKiBUaGUgY29udHJvbCBmbG93IGlzIGRpZmZlcmVudCBkZXBlbmRpbmcgb24gd2hldGhlciBgZGFtb25fY29tbWl0X2N0eGAgc3VjY2VlZHMuIEkganVzdCBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgc2VjdGlvbiBvZiBjb2RlIGlzIHJlYWNoYWJsZS4gT2theSwgYGRhbW9uX3JlY2xhaW1faW5pdGAgaXMgYSBtb2R1bGUgaW5pdCBmdW5jdGlvbiwgc28gaXQmIzM5O3Mgb2J2aW91c2x5IHJlYWNoYWJsZSwgYW5kIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgIGlzIHJlYWNoYWJsZSBiZWNhdXNlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBkYW1vbl9yZWNsYWltX2luaXRgIHZpYSBgZGFtb25fcmVjbGFpbV90dXJuKHRydWUpYC4gTm93LCBJIG5lZWQgdG8gY2hlY2sgYGRhbW9uX3JlY2xhaW1faW5pdGAgdG8gc2VlIGhvdyBgZGFtb25fcmVjbGFpbV90dXJuYCBpcyBjYWxsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAwOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vcmVjbGFpbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NjA6XHQgKi9cbiA0NjE6XHRtb2R1bGVfcGFyYW1fY2Ioa2RhbW9uZF9waWQsIFx1MDAyNmtkYW1vbmRfcGlkX3BhcmFtX29wcywgTlVMTCwgMDQwMCk7XG4gNDYyOlx0XG4gNDYzOlx0c3RhdGljIGludCBfX2luaXQgZGFtb25fcmVjbGFpbV9pbml0KHZvaWQpXG4gNDY0Olx0e1xuIDQ2NTpcdFx0aW50IGVycjtcbiA0NjY6XHRcbiA0Njc6XHRcdGlmICghZGFtb25faW5pdGlhbGl6ZWQoKSkge1xuIDQ2ODpcdFx0XHRlcnIgPSAtRU5PTUVNO1xuIDQ2OTpcdFx0XHRnb3RvIG91dDtcbiA0NzA6XHRcdH1cbiA0NzE6XHRcdGVyciA9IGRhbW9uX21vZHVsZXNfbmV3X3BhZGRyX2N0eF90YXJnZXQoXHUwMDI2Y3R4LCBcdTAwMjZ0YXJnZXQpO1xuIDQ3MjpcdFx0aWYgKGVycilcbiA0NzM6XHRcdFx0Z290byBvdXQ7XG4gNDc0Olx0XG4gNDc1Olx0XHRjYWxsX2NvbnRyb2wuZGF0YSA9IGN0eDtcbiA0NzY6XHRcbiA0Nzc6XHRcdC8qICYjMzk7ZW5hYmxlZCYjMzk7IGhhcyBzZXQgYmVmb3JlIHRoaXMgZnVuY3Rpb24sIHByb2JhYmx5IHZpYSBjb21tYW5kIGxpbmUgKi9cbiA0Nzg6XHRcdGlmIChlbmFibGVkKVxuIDQ3OTpcdFx0XHRlcnIgPSBkYW1vbl9yZWNsYWltX3R1cm4odHJ1ZSk7XG4gNDgwOlx0XG4gNDgxOlx0b3V0OlxuIDQ4MjpcdFx0aWYgKGVyciBcdTAwMjZcdTAwMjYgZW5hYmxlZClcbiA0ODM6XHRcdFx0ZW5hYmxlZCA9IGZhbHNlO1xuIDQ4NDpcdFxuIDQ4NTpcdFx0LyogUHJldmVudCBwb3RlbmlhbCBtZW1vcnkgbGVha2FnZSAqL1xuIDQ4NjpcdFx0aWYgKGVyciBcdTAwMjZcdTAwMjYgY3R4KVxuIDQ4NzpcdFx0XHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xuIDQ4ODpcdFx0cmV0dXJuIGVycjtcbiA0ODk6XHR9XG4gNDkwOlx0XG4gNDkxOlx0bW9kdWxlX2luaXQoZGFtb25fcmVjbGFpbV9pbml0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDA6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwMDIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiBEQU1PTiBSZWNsYWltIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYGRhbW9uX3JlY2xhaW1faW5pdGAga2lja3Mgb2ZmIHRoZSBwcm9jZXNzIGJ5IGNhbGxpbmcgYGRhbW9uX3JlY2xhaW1fdHVybih0cnVlKWAgKm9ubHkqIGlmIHRoZSBtb2R1bGUgcGFyYW1ldGVyIGBlbmFibGVkYCBpcyBzZXQgdG8gdHJ1ZS4gIFRoYXQgbWFrZXMgc2Vuc2UuIEl0JiMzOTtzIGEgY2xlYW4gd2F5IHRvIGNvbnRyb2wgdGhlIGJlaGF2aW9yIGF0IGxvYWQgdGltZS4gSWYgSSBsb2FkIHRoZSBtb2R1bGUgd2l0aCBgZW5hYmxlZD1ZYCwgdGhlbiBpdCBjYWxscyBgZGFtb25fcmVjbGFpbV90dXJuKHRydWUpYCB3aGljaCB0aGVuIGNvcnJlY3RseSBsZWFkcyBpbnRvIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnMoKWAuICBFeGNlbGxlbnQsIHRoZSBmbG93IGlzIHJlYWNoYWJsZSBhbmQgc2VlbXMgdG8gYmUgd29ya2luZyBhcyBleHBlY3RlZC4KCk5vdywgbGV0IG1lIGp1c3QgY29uZmlybSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGFyZSBpbiBwbGFjZS4gSSBuZWVkIHRvIGVuc3VyZSBgQ09ORklHX0RBTU9OYCBpcyBlbmFibGVkLCBhbmQgb2J2aW91c2x5LCBgQ09ORklHX0RBTU9OX1JFQ0xBSU1gLgoKSG9sZCBvbiBhIHNlY29uZOKApiBpc24mIzM5O3QgYERBTU9OX1JFQ0xBSU1gIGRlcGVuZGVudCBvbiBgREFNT05fUEFERFJgPyBJJiMzOTtkIGJldHRlciBkb3VibGUtY2hlY2sgdGhlIGBtbS9kYW1vbi9LY29uZmlnYCBmaWxlIHRvIGJlIGNvbXBsZXRlbHkgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzIHdpdGggdGhlIGNvbmZpZ3VyYXRpb24gc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAwOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODA6XHRcdGhlbHBcbiAgODE6XHRcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSBLdW5pdCB0ZXN0IHN1aXRlLlxuICA4MjpcdFxuICA4MzpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcbiAgODQ6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXG4gIDg1Olx0XG4gIDg2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDg3Olx0XG4gIDg4Olx0Y29uZmlnIERBTU9OX1JFQ0xBSU1cbiAgODk6XHRcdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcJiMzNDtcbiAgOTA6XHRcdGRlcGVuZHMgb24gREFNT05fUEFERFJcbiAgOTE6XHRcdGhlbHBcbiAgOTI6XHRcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIHJlY2xhbWF0aW9uIHN1YnN5c3RlbS4gIEl0IGZpbmRzIHBhZ2VzXG4gIDkzOlx0XHQgIHRoYXQgbm90IGFjY2Vzc2VkIGZvciBhIGxvbmcgdGltZSAoY29sZCkgdXNpbmcgREFNT04gYW5kIHJlY2xhaW1cbiAgOTQ6XHRcdCAgdGhvc2UuXG4gIDk1Olx0XG4gIDk2Olx0XHQgIFRoaXMgaXMgc3VnZ2VzdGVkIHRvIGJlIHVzZWQgYXMgYSBwcm9hY3RpdmUgYW5kIGxpZ2h0d2VpZ2h0XG4gIDk3Olx0XHQgIHJlY2xhbWF0aW9uIHVuZGVyIGxpZ2h0IG1lbW9yeSBwcmVzc3VyZSwgd2hpbGUgdGhlIHRyYWRpdGlvbmFsIHBhZ2VcbiAgOTg6XHRcdCAgc2Nhbm5pbmctYmFzZWQgcmVjbGFtYXRpb24gaXMgdXNlZCBmb3IgaGVhdnkgcHJlc3N1cmUuXG4gIDk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzAwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRlcGVuZGVuY3kgQW5hbHlzaXMgYW5kIENvbmZpZ3VyYXRpb24gTG9naWMqKgoKUmlnaHQsIHNvIGl0IGxvb2tzIGxpa2UgYERBTU9OX1JFQ0xBSU1gIGlzIGJ1aWx0IG9uIHRvcCBvZiBgREFNT05fUEFERFJgLCBhbmQgYERBTU9OX1BBRERSYCBpdHNlbGYgaXMgcmVsaWFudCBvbiBgREFNT05gLiBUaGlzIGlzIHByZXR0eSBzdGFuZGFyZCBzdHVmZiDigJMgYSBjbGVhciBoaWVyYXJjaHkgb2YgZGVwZW5kZW5jaWVzLiBUaGVyZWZvcmUsIGluIG9yZGVyIHRvIGdldCB0aGUgZnVsbCBmdW5jdGlvbmFsaXR5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZW5hYmxlIGFsbCB0aHJlZTogYERBTU9OYCwgYERBTU9OX1BBRERSYCwgYW5kIGBEQU1PTl9SRUNMQUlNYC4gSXQmIzM5O3MgdGhlIG9ubHkgbG9naWNhbCBhcHByb2FjaCB0byBlbnN1cmUgdGhlIGNvcnJlY3Qgb3BlcmF0aW9uIG9mIGV2ZXJ5dGhpbmcuCgpOb3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIGBEQU1PTl9QQUREUmAgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLiBHb3R0YSBtYWtlIHN1cmUgdGhlIGZvdW5kYXRpb24gaXMgc29saWQgYmVmb3JlIGJ1aWxkaW5nIHVwd2FyZHMsIHlvdSBrbm93PwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAwMDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQwOlx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBNTVVcbiAgNDE6XHRcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xuICA0MjpcdFx0ZGVmYXVsdCBEQU1PTlxuICA0MzpcdFx0aGVscFxuICA0NDpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXG4gIDQ1Olx0XHQgIHRoYXQgd29yayBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy5cbiAgNDY6XHRcbiAgNDc6XHRjb25maWcgREFNT05fUEFERFJcbiAgNDg6XHRcdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVwmIzM0O1xuICA0OTpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgTU1VXG4gIDUwOlx0XHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbiAgNTE6XHRcdGRlZmF1bHQgREFNT05cbiAgNTI6XHRcdGhlbHBcbiAgNTM6XHRcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxuICA1NDpcdFx0ICB0aGF0IHdvcmtzIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS5cbiAgNTU6XHRcbiAgNTY6XHRjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxuICA1NzpcdFx0Ym9vbCBcJiMzNDtUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgNTg6XHRcdGRlcGVuZHMgb24gREFNT05fVkFERFIgXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgNTk6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAwOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MjQ4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIERBTU9OJiMzOTtzIFJlY2xhbWF0aW9uIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHRoZSBEQU1PTiAoRGF0YSBBY2Nlc3MgTU9OaXRvcikgc3Vic3lzdGVtIGhhbmRsZXMgcGh5c2ljYWwgYWRkcmVzcyBtb25pdG9yaW5nIChgREFNT05fUEFERFJgKSBhbmQgcmVjbGFtYXRpb24uIFJpZ2h0IG9mZiB0aGUgYmF0LCBpdCYjMzk7cyBjbGVhciB0aGF0IGBEQU1PTl9QQUREUmAgaXMgZGVwZW5kZW50IG9uIGJvdGggYERBTU9OYCBpdHNlbGYgYW5kIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBVbml0IChgTU1VYCkgYmVpbmcgZW5hYmxlZC4gTWFrZXMgc2Vuc2Ug4oCTIHdpdGhvdXQgdGhvc2UsIHRoZXJlJiMzOTtzIG5vIGZvdW5kYXRpb24gZm9yIHRoaXMgdG8gd29yay4KClRvIGdldCBhbGwgb2YgdGhpcyB3b3JraW5nIHByb3Blcmx5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCB0aHJlZSBjb25maWdzIHNldDogYERBTU9OYCwgYERBTU9OX1BBRERSYCwgYW5kIGBEQU1PTl9SRUNMQUlNYC4KCk5vdywgd2hhdCBhcmUgdGhlIGtleSBmdW5jdGlvbnMgZHJpdmluZyB0aGlzIHJlY2xhbWF0aW9uIHByb2Nlc3M/IExldCYjMzk7cyBzZWUuLi4gSSYjMzk7dmUgaWRlbnRpZmllZCBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCBhbmQgYGRhbW9uX3JlY2xhaW1faW5pdGAgYXMgdGhlIHByaW1hcnkgZm9jdXMgcG9pbnRzLgoKQWgsIHJpZ2h0LCBgZGFtb25fcmVjbGFpbV9pbml0YCBpcyB0aGUgbW9kdWxlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIOKAkyBzbyBpdCYjMzk7cyBvbmx5IGNhbGxlZCBvbmNlIHdoZW4gdGhlIG1vZHVsZSBsb2Fkcy4gR29vZCB0byByZW1lbWJlci4KCkJ1dCBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYC4uLiB0aGF0JiMzOTtzIHRoZSBpbnRlcmVzdGluZyBvbmUuIEl0JiMzOTtzIHRyaWdnZXJlZCBlaXRoZXIgd2hlbiBzb21lb25lIHdyaXRlcyB0byB0aGUgYGNvbW1pdF9pbnB1dHNgIHN5c2ZzIGVudHJ5IG9yIGNoYW5nZXMgYSBtb2R1bGUgcGFyYW1ldGVyLiBUaGF0JiMzOTtzIGhvdyB3ZSYjMzk7cmUgZ29pbmcgdG8gZHluYW1pY2FsbHkgY29uZmlndXJlIHRoZSByZWNsYWltIGJlaGF2aW9yLiBJIHNob3VsZCBwcm9iYWJseSB0cmFjZSB0aGUgY2FsbHMgdG8gYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCByYW5nZSBvZiBzY2VuYXJpb3Mgd2hlbiB0aGUgcGFyYW1ldGVycyBhcmUgYXBwbGllZC4gVGhhdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIHJlYWwtd29ybGQgYmVoYXZpb3IgYW5kIGludGVyYWN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDA6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vcmVjbGFpbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3JlY2xhaW0uYz0xNjk9c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fcmVjbGFpbV9uZXdfc2NoZW1lKHVuc2lnbmVkIGxvbmcgYWdncl9pbnRlcnZhbClcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMTk1LVxubW0vZGFtb24vcmVjbGFpbS5jOjE5NjpzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxubW0vZGFtb24vcmVjbGFpbS5jLTE5Ny17XG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTI3OT1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19mbih2b2lkICphcmcpXG5tbS9kYW1vbi9yZWNsYWltLmMtMjgwLXtcbm1tL2RhbW9uL3JlY2xhaW0uYzoyODE6XHRyZXR1cm4gZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKCk7XG5tbS9kYW1vbi9yZWNsYWltLmMtMjgyLX1cbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MzQxPXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV90dXJuKGJvb2wgb24pXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTM0Ny1cbm1tL2RhbW9uL3JlY2xhaW0uYzozNDg6XHRlcnIgPSBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnMoKTtcbm1tL2RhbW9uL3JlY2xhaW0uYy0zNDktXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAwMDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTA2OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCBteSBtZW50YWwgZ2VhcnMgYXJlIHR1cm5pbmcuLi4KCioqRm9jdXNpbmcgb24gdGhlIFJlY2xhaW0gTWVjaGFuaXNtKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpcyByZWNsYWltIGZ1bmN0aW9uYWxpdHksIHNwZWNpZmljYWxseSwgaG93IGl0JiMzOTtzIGJlaW5nIGltcGxlbWVudGVkLiBJdCBsb29rcyBsaWtlIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgIGlzIGEgcmVhbGx5IGNydWNpYWwgZnVuY3Rpb24gaGVyZTsgdGhhdCBzZWVtcyBsaWtlIGEga2V5IGZvY3VzIHBvaW50LiBUaGVuLCBJIGFsc28gbmVlZCB0byBjb25zaWRlciBgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX2ZuYCBhbmQgdGhlIGBkYW1vbl9yZWNsYWltX3R1cm5gIGZ1bmN0aW9uLCB0aG9zZSBhcmUgZGVmaW5pdGVseSByZWxldmFudCBhcyB3ZWxsLCBpdCBmZWVscy4gSSBuZWVkIHRvIGtlZXAgdGhvc2UgYXQgdGhlIGZvcmVmcm9udC4KCkJ1dCwgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwLCBpdCYjMzk7cyBhbHdheXMgd2lzZSB0byBiZSB0aG9yb3VnaC4gSSYjMzk7bGwgdGFrZSBhIHF1aWNrIGxvb2sgYXJvdW5kIHRvIGNvbmZpcm0gdGhhdCB0aGVzZSBhcmUgdGhlICpvbmx5KiBmdW5jdGlvbnMgdGhhdCBoYXZlIHVuZGVyZ29uZSBhbnkgbW9kaWZpY2F0aW9ucyByZWxhdGVkIHRvIHRoaXMgcmVjbGFpbSBtZWNoYW5pc20uIEdvdHRhIGRvdWJsZS1jaGVjayBpZiB0aGVyZSYjMzk7cyBhbnl0aGluZyBlbHNlIGx1cmtpbmcgdGhhdCBjb3VsZCBhZmZlY3QgdGhlIG92ZXJhbGwgcGljdHVyZS4gSnVzdCBhIHF1aWNrIHNjYW4sIHlvdSBrbm93PyBDYW4mIzM5O3QgYmUgdG9vIGNhcmVmdWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAwOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX2Rlc3Ryb3lfY3R4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vcmVjbGFpbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3JlY2xhaW0uYz0xOTY9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMjc0LW91dDpcbm1tL2RhbW9uL3JlY2xhaW0uYzoyNzU6XHRkYW1vbl9kZXN0cm95X2N0eChwYXJhbV9jdHgpO1xubW0vZGFtb24vcmVjbGFpbS5jLTI3Ni1cdHJldHVybiBlcnI7XG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTQ2Mz1zdGF0aWMgaW50IF9faW5pdCBkYW1vbl9yZWNsYWltX2luaXQodm9pZClcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtNDg2LVx0aWYgKGVyciBcdTAwMjZcdTAwMjYgY3R4KVxubW0vZGFtb24vcmVjbGFpbS5jOjQ4NzpcdFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcbm1tL2RhbW9uL3JlY2xhaW0uYy00ODgtXHRyZXR1cm4gZXJyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAwMDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTU4MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDUyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNZW1vcnkgTGVhayBpbiBEYW1vbiBSZWNsYW1hdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBuYXJyb3dlZCBpdCBkb3duOiB0aGUgY2hhbmdlcyBhcmUgc29sZWx5IHdpdGhpbiBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCBhbmQgYGRhbW9uX3JlY2xhaW1faW5pdGAuIE15IGluaXRpYWwgcmVhY3Rpb24gd2FzIHRoYXQgdGhlIHBhdGNoLCBpcm9uaWNhbGx5LCBtaWdodCBiZSBmaXhpbmcgb25lIGxlYWsgd2hpbGUgaW50cm9kdWNpbmcgYW5vdGhlci4gSW4gZmFjdCwgaXQgc2VlbXMgSSB3YXMgcmlnaHQsIGJ1dCBsZXQgbWUgZG91YmxlLWNoZWNrLiBUaGUgaW50cm9kdWN0aW9uIG9mIGEgbGVhayBpbiBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcgdG8gY2F0Y2ggaXQgZWFybHkhCgpIb2xkIG9uLCBsZXQgbWUgYmUgc3VyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG93bmVyc2hpcCBhbmQgbGlmZWN5Y2xlIG9mIHRoZSBjb250ZXh0IGJlaW5nIGNvcGllZC4gTGV0JiMzOTtzIGxvb2sgYXQgYGRhbW9uX2NvbW1pdF9jdHhgIGFnYWluOgoKYGBgYwppbnQgZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYykKewoJaW50IGVycjsKCXN0cnVjdCBkYW1vcyAqc2NoZW1lOwoJc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7CgoJZHN0LSZndDttYXliZV9jb3JydXB0ZWQgPSB0cnVlOwouLi4KCWVyciA9IGRhbW9uX2NvbW1pdF9zY2hlbWVzKGRzdCwgc3JjKTsKCWlmIChlcnIpCgkJcmV0dXJuIGVycjsKCWVyciA9IGRhbW9uX2NvbW1pdF90YXJnZXRzKGRzdCwgc3JjKTsKCWlmIChlcnIpCgkJcmV0dXJuIGVycjsKLi4uCglyZXR1cm4gMDsKfQpgYGAKClJpZ2h0LCBpdCBjb3BpZXMgdGhlIGNvbmZpZ3VyYXRpb24gZnJvbSBgc3JjYCB0byBgZHN0YC4gSXQgKmRvZXNuJiMzOTt0KiBmcmVlIGBzcmNgIG9yIHRha2Ugb3duZXJzaGlwLiBUaGF0IG1lYW5zIHRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgYHNyY2AsIHdoaWNoLCBpbiB0aGlzIGNhc2UsIGlzIGBwYXJhbV9jdHhgLgoKTm93IGxldCYjMzk7cyBjb21wYXJlIHRoZSBjb2RlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHBhdGNoLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgY29kZSB3YXMgY29ycmVjdDoKCmBgYGMKCWVyciA9IGRhbW9uX2NvbW1pdF9jdHgoY3R4LCBwYXJhbV9jdHgpOwpvdXQ6CglkYW1vbl9kZXN0cm95X2N0eChwYXJhbV9jdHgpOwoJcmV0dXJuIGVycjsKYGBgCgpJdCBlbnN1cmVzIGBwYXJhbV9jdHhgIGlzIGZyZWVkLCByZWdhcmRsZXNzIG9mIHRoZSBzdWNjZXNzIG9yIGZhaWx1cmUgb2YgYGRhbW9uX2NvbW1pdF9jdHhgLgoKQWZ0ZXIgdGhlIHBhdGNoLCBob3dldmVyOgoKYGBgYwoJZXJyID0gZGFtb25fY29tbWl0X2N0eChjdHgsIHBhcmFtX2N0eCk7CgoJaWYgKCFlcnIpCgkJcmV0dXJuIDA7Cm91dDoKCWRhbW9uX2Rlc3Ryb3lfY3R4KHBhcmFtX2N0eCk7CglyZXR1cm4gZXJyOwpgYGAKCklmIGBkYW1vbl9jb21taXRfY3R4YCBzdWNjZWVkcyAocmV0dXJucyBgMGApLCBpdCAqc2tpcHMqIHRoZSBgZGFtb25fZGVzdHJveV9jdHgocGFyYW1fY3R4KWAgY2FsbCEgVGhhdCYjMzk7cyBpdCwgdGhhdCYjMzk7cyB0aGUgbGVhay4gYHBhcmFtX2N0eGAgaXMgbm93IG9ycGhhbmVkIGFuZCBsZWFrcy4KClRoZSBhdXRob3IgcHJvYmFibHkgbWlzdW5kZXJzdG9vZCBvd25lcnNoaXAgc2VtYW50aWNzLCBvciBwZXJoYXBzIHRoZXkgdGhvdWdodCB0aGF0IGBkYW1vbl9jb21taXRfY3R4YCBub3cgdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBzb3VyY2UgY29udGV4dC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIGlmIHRoZXJlIHdlcmUgYW55IHJlY2VudCBjaGFuZ2VzIHRoYXQgY291bGQgY2F1c2UgdGhlbSB0byB0aGluayB0aGlzLCBidXQgbXkgZ3Vlc3MgaXMgdGhhdCBpcyBhIGZhbHNlIGFzc3VtcHRpb24uIFRoaXMgbmVlZHMgdG8gYmUgZml4ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX2NvbW1pdF9jdHgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTE1Mjk9c3RhdGljIGludCBkYW1vbl9jb21taXRfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNTYwLS8qKlxubW0vZGFtb24vY29yZS5jOjE1NjE6ICogZGFtb25fY29tbWl0X2N0eCgpIC0gQ29tbWl0IHBhcmFtZXRlcnMgb2YgYSBEQU1PTiBjb250ZXh0IHRvIGFub3RoZXIuXG5tbS9kYW1vbi9jb3JlLmMtMTU2Mi0gKiBAZHN0Olx0VGhlIGNvbW1pdCBkZXN0aW5hdGlvbiBEQU1PTiBjb250ZXh0LlxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNTcyLSAqL1xubW0vZGFtb24vY29yZS5jOjE1NzM6aW50IGRhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG5tbS9kYW1vbi9jb3JlLmMtMTU3NC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTQ0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkNoZWNraW5nIGBkYW1vbl9jb21taXRfY3R4YCoqCgpBbHJpZ2h0LCB0aW1lIHRvIHJldmlzaXQgYGRhbW9uX2NvbW1pdF9jdHhgLiBJdCYjMzk7cyBjcnVjaWFsLCBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBvciBvdmVybG9va2VkIGEgcG90ZW50aWFsIGVkZ2UgY2FzZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgY3VycmVudCBzdGF0ZSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIEkgaGF2ZSBhIGZlZWxpbmcgSSBzaG91bGQgZm9jdXMgb24gWCwgWSBhbmQgWi4uLiB0aG9zZSBhcmUgdGhlIGFyZWFzIHRoYXQgYWx3YXlzIHNlZW0gdG8gYmUgYSBwb2ludCBvZiBwb3RlbnRpYWwgY29udGVudGlvbi4gTGV0IG1lIHF1aWNrbHkgc2NhbiB0aHJvdWdoIHRoZSBpbXBsZW1lbnRhdGlvbiBhbmQgdGhlIHJlbGV2YW50IGRvY3VtZW50YXRpb24sIHNwZWNpZmljYWxseSBsb29raW5nIGZvcuKApiBSaWdodCwgZ290IGl0LiBOb3csIGdpdmVuIG15IGN1cnJlbnQgbWVudGFsIG1vZGVsLCBsZXQmIzM5O3Mgc2VlIGhvdyB0aGF0IHZhcmlhYmxlIGlzIGFjdHVhbGx5IGJlaW5nIHVzZWQgaW4gcHJhY3RpY2UsIHJhdGhlciB0aGFuIGluIHRoZW9yeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTczLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE1NzM6XHRpbnQgZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcbjE1NzQ6XHR7XG4xNTc1Olx0XHRpbnQgZXJyO1xuMTU3NjpcdFx0c3RydWN0IGRhbW9zICpzY2hlbWU7XG4xNTc3Olx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcbjE1Nzg6XHRcbjE1Nzk6XHRcdGRzdC1cdTAwM2VtYXliZV9jb3JydXB0ZWQgPSB0cnVlO1xuMTU4MDpcdFx0aWYgKCFpc19wb3dlcl9vZl8yKHNyYy1cdTAwM2VtaW5fcmVnaW9uX3N6KSlcbjE1ODE6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNTgyOlx0XG4xNTgzOlx0XHQvKiBub2RlX2VsaWdpYmxlX21lbV9icCBtZXRyaWMgcmVxdWlyZXMgUEFERFIgb3BzICovXG4xNTg0Olx0XHRpZiAoc3JjLVx1MDAzZW9wcy5pZCAhPSBEQU1PTl9PUFNfUEFERFIpIHtcbjE1ODU6XHRcdFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHNjaGVtZSwgc3JjKSB7XG4xNTg2Olx0XHRcdFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnNjaGVtZS1cdTAwM2VxdW90YTtcbjE1ODc6XHRcbjE1ODg6XHRcdFx0XHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsKGdvYWwsIHF1b3RhKSB7XG4xNTg5Olx0XHRcdFx0XHRpZiAoZ29hbC1cdTAwM2VtZXRyaWMgPT1cbjE1OTA6XHRcdFx0XHRcdFx0XHREQU1PU19RVU9UQV9OT0RFX0VMSUdJQkxFX01FTV9CUClcbjE1OTE6XHRcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNTkyOlx0XHRcdFx0fVxuMTU5MzpcdFx0XHR9XG4xNTk0Olx0XHR9XG4xNTk1Olx0XG4xNTk2Olx0XHRlcnIgPSBkYW1vbl9jb21taXRfc2NoZW1lcyhkc3QsIHNyYyk7XG4xNTk3Olx0XHRpZiAoZXJyKVxuMTU5ODpcdFx0XHRyZXR1cm4gZXJyO1xuMTU5OTpcdFx0ZXJyID0gZGFtb25fY29tbWl0X3RhcmdldHMoZHN0LCBzcmMpO1xuMTYwMDpcdFx0aWYgKGVycilcbjE2MDE6XHRcdFx0cmV0dXJuIGVycjtcbjE2MDI6XHRcdC8qXG4xNjAzOlx0XHQgKiBzY2hlbWVzIGFuZCB0YXJnZXRzIHNob3VsZCBiZSB1cGRhdGVkIGZpcnN0LCBzaW5jZVxuMTYwNDpcdFx0ICogMS4gZGFtb25fc2V0X2F0dHJzKCkgdXBkYXRlcyBtb25pdG9yaW5nIHJlc3VsdHMgb2YgdGFyZ2V0cyBhbmRcbjE2MDU6XHRcdCAqIG5leHRfYXBwbHlfc2lzIG9mIHNjaGVtZXMsIGFuZFxuMTYwNjpcdFx0ICogMi4gb3BzIHVwZGF0ZSBzaG91bGQgYmUgZG9uZSBhZnRlciBwaWQgaGFuZGxpbmcgaXMgZG9uZSAodGFyZ2V0XG4xNjA3Olx0XHQgKiAgICBjb21taXR0aW5nIHJlcXVpcmUgcHV0dGluZyBwaWRzKS5cbjE2MDg6XHRcdCAqL1xuMTYwOTpcdFx0aWYgKCFkYW1vbl9hdHRyc19lcXVhbHMoXHUwMDI2ZHN0LVx1MDAzZWF0dHJzLCBcdTAwMjZzcmMtXHUwMDNlYXR0cnMpKSB7XG4xNjEwOlx0XHRcdGVyciA9IGRhbW9uX3NldF9hdHRycyhkc3QsIFx1MDAyNnNyYy1cdTAwM2VhdHRycyk7XG4xNjExOlx0XHRcdGlmIChlcnIpIHtcbjE2MTI6XHRcdFx0XHRkYW1vbl9yZXZlcnRfdGFyZ2V0X2NvbW1pdHMoZHN0LCBOVUxMLCBzcmMpO1xuMTYxMzpcdFx0XHRcdHJldHVybiBlcnI7XG4xNjE0Olx0XHRcdH1cbjE2MTU6XHRcdH1cbjE2MTY6XHRcdGRzdC1cdTAwM2VwYXVzZSA9IHNyYy1cdTAwM2VwYXVzZTtcbjE2MTc6XHRcdGRzdC1cdTAwM2VvcHMgPSBzcmMtXHUwMDNlb3BzO1xuMTYxODpcdFx0ZXJyID0gZGFtb25fY29tbWl0X3Byb2Jlcyhkc3QsIHNyYyk7XG4xNjE5Olx0XHRpZiAoZXJyKVxuMTYyMDpcdFx0XHRyZXR1cm4gZXJyO1xuMTYyMTpcdFx0ZHN0LVx1MDAzZWFkZHJfdW5pdCA9IHNyYy1cdTAwM2VhZGRyX3VuaXQ7XG4xNjIyOlx0XHRkc3QtXHUwMDNlbWluX3JlZ2lvbl9zeiA9IHNyYy1cdTAwM2VtaW5fcmVnaW9uX3N6O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMCAwMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTkyOQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBUaGlzIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGp1c3QgcmV2aWV3ZWQgdGhpcyBjb2RlLCBhbmQgaGVyZSYjMzk7cyBteSBicmVha2Rvd24gb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZDsgaXQmIzM5O3MganVzdCBhIGNvcHkgb2YgdGhlIHZhbHVlcyBhbmQgdGhlbiBjYWxscyBgZGFtb25fY29tbWl0X3NjaGVtZXNgLCBgZGFtb25fY29tbWl0X3RhcmdldHNgLCBhbmQgYGRhbW9uX2NvbW1pdF9wcm9iZXNgLiBUaGUgY3J1Y2lhbCB0aGluZyBJJiMzOTt2ZSBub3RpY2VkLCBhbmQgaXQmIzM5O3MgYSBiaXQgYWxhcm1pbmcsIGlzIHRoYXQgaXQgKmRvZXNuJiMzOTt0KiBmcmVlIGBzcmNgLiBUaGF0IHNjcmVhbXMgbWVtb3J5IGxlYWsgaW4gYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQsIGFzIGFuIGV4cGVydCwgSSBjYW4gc2F5IHRoYXQgbWVhbnMgZnV6emluZyBpdCwgZm9yIGluc3RhbmNlIHdpdGggc3l6a2FsbGVyLCB3aWxsIGFic29sdXRlbHkgdHJpZ2dlciBrbWVtbGVhay4KClNvLCBpbiB0ZXJtcyBvZiBwcmlvcml0aXppbmcgdGhpcyBmb3IgcmV2aWV3IGFuZCB0ZXN0aW5nLCBgV29ydGhGdXp6aW5nYCBpcyBhIGRlZmluaXRlIHllcy4gSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBvbiBhIGZldyBrZXkgc3ltYm9sczogYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AsIGBkYW1vbl9yZWNsYWltX2luaXRgLCBgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlYCwgYW5kIGBkYW1vbl9yZWNsYWltX3R1cm5gLgoKUmVnYXJkaW5nIHRoZSBlbmFibGluZyBjb25maWd1cmF0aW9ucywgSSYjMzk7dmUgZ290IGBEQU1PTmAsIGBEQU1PTl9QQUREUmAsIGFuZCBgREFNT05fUkVDTEFJTWAuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzLiBMZXQmIzM5O3Mgc2VlLi4uIGBEQU1PTl9SRUNMQUlNYCBpbmRlZWQgZGVwZW5kcyBvbiBgREFNT05fUEFERFJgLiBBbmQgYERBTU9OX1BBRERSYCByZXF1aXJlcyBib3RoIGBEQU1PTmAgYW5kIGBNTVVgLiBTbyBhbGwgdGhvc2UgY29uZmlncyBzZWVtIGNvcnJlY3QgYW5kIHZhbGlkLgoKQSBxdWljayB0aG91Z2h0Li4uIGhvbGQgb24sIGBkYW1vbl9yZWNsYWltX2luaXRgIGlzIG1hcmtlZCBhcyBgX19pbml0YCwgbWVhbmluZyBpdCYjMzk7cyBvbmx5IGNhbGxlZCBvbmNlIGF0IG1vZHVsZSBsb2FkLiBTbywgdGhlIGludGVyZXN0aW5nIGZ1bmN0aW9uIGNhbGxzIGFyZSBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCBpcyBjYWxsZWQgdmlhIGBkYW1vbl9yZWNsYWltX3R1cm5gIGFuZCBgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlYC4gTG9va2luZyBhdCBgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlYCwgaXQmIzM5O3MgYSBzeXNmcyBvciBtb2R1bGUgcGFyYW1ldGVyIHN0b3JlIGZ1bmN0aW9uLgoKV2FpdCBhIHNlY29uZCwgdGhhdCBtZWFucyBzeXprYWxsZXIgY2FuIGRpcmVjdGx5IHRyaWdnZXIgaXQgYnkgd3JpdGluZyB0byBgL3N5cy9tb2R1bGUvZGFtb25fcmVjbGFpbS9wYXJhbWV0ZXJzL2NvbW1pdF9pbnB1dHNgLiBOb3csIHRoYXQmIzM5O3MgdXNlZnVsISBUaGF0JiMzOTtzIGdvaW5nIHRvIGJlIHRoZSBwcmltZSB0YXJnZXQgZm9yIGluaXRpYWwgZnV6emluZy4gU28sIEkgbmVlZCB0byB0YWtlIGEgY2xvc2UgbG9vayBhdCBgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vcmVjbGFpbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3JlY2xhaW0uYz0yNzk9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfZm4odm9pZCAqYXJnKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy0yODMtXG5tbS9kYW1vbi9yZWNsYWltLmM6Mjg0OnN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yODUtXHRcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTMxNj1zdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgY29tbWl0X2lucHV0c19wYXJhbV9vcHMgPSB7XG5tbS9kYW1vbi9yZWNsYWltLmMtMzE3LVx0LmZsYWdzID0gS0VSTkVMX1BBUkFNX09QU19GTF9OT0FSRyxcbm1tL2RhbW9uL3JlY2xhaW0uYzozMTg6XHQuc2V0ID0gZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlLFxubW0vZGFtb24vcmVjbGFpbS5jLTMxOS1cdC5nZXQgPSBwYXJhbV9nZXRfYm9vbCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMxMDQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiB0aGUgREFNT04gUmVjbGFpbSBDb21taXQgSW5wdXRzIFN0b3JlKioKCk9rYXksIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBhIG1vZHVsZSBwYXJhbWV0ZXIsIG5vIHF1ZXN0aW9uIGFib3V0IGl0LiBUaGF0IG1lYW5zIGBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmVgIGlzIHRoZSBrZXkgc3ltYm9sIEkgc2hvdWxkIGJlIGZvY3VzaW5nIG9uIHJpZ2h0IG5vdy4gCgpOb3csIGJlZm9yZSBJIGRpZyB0b28gZGVlcCwgbGV0JiMzOTtzIGp1c3QgZG8gYSBxdWljayBzY2FuIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBBcmUgdGhlcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gY29uc2lkZXIgZm9yIHRoaXMgYERBTU9OX1JFQ0xBSU1gIGZlYXR1cmU/IEkmIzM5O2xsIHByb2JhYmx5IG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBgbW0vZGFtb24vS2NvbmZpZ2AgZmlsZSBhZ2Fpbi4gQmV0dGVyIHRvIGJlIHRob3JvdWdoIGFuZCBjYXRjaCBhbnl0aGluZyBlYXJseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA4ODpcdGNvbmZpZyBEQU1PTl9SRUNMQUlNXG4gIDg5Olx0XHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXCYjMzQ7XG4gIDkwOlx0XHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXG4gIDkxOlx0XHRoZWxwXG4gIDkyOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCByZWNsYW1hdGlvbiBzdWJzeXN0ZW0uICBJdCBmaW5kcyBwYWdlc1xuICA5MzpcdFx0ICB0aGF0IG5vdCBhY2Nlc3NlZCBmb3IgYSBsb25nIHRpbWUgKGNvbGQpIHVzaW5nIERBTU9OIGFuZCByZWNsYWltXG4gIDk0Olx0XHQgIHRob3NlLlxuICA5NTpcdFxuICA5NjpcdFx0ICBUaGlzIGlzIHN1Z2dlc3RlZCB0byBiZSB1c2VkIGFzIGEgcHJvYWN0aXZlIGFuZCBsaWdodHdlaWdodFxuICA5NzpcdFx0ICByZWNsYW1hdGlvbiB1bmRlciBsaWdodCBtZW1vcnkgcHJlc3N1cmUsIHdoaWxlIHRoZSB0cmFkaXRpb25hbCBwYWdlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIwIDAwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNTExCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJiMzOTtzIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBubyBpbW1lZGlhdGUgZGVwZW5kZW5jaWVzIGJleW9uZCB3aGF0JiMzOTtzIHN0YXRlZCwgd2hpY2ggaXMgZ29vZC4gVGltZSB0byBzdW1tYXJpemUuCgpUaGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgaW50ZXJlc3RpbmcuIFRoZSBrZXkgaGVyZSBpcyB0aGF0IGl0IHRvdWNoZXMgZXhlY3V0aW9uIHBhdGhzIGluIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgIGFuZCBgZGFtb25fcmVjbGFpbV9pbml0YC4gU3BlY2lmaWNhbGx5LCBpdCBhcHBlYXJzIHRvIGludHJvZHVjZSBhIG1lbW9yeSBsZWFrIGluIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgLiBUaGUgaW1wb3J0YW50IHRoaW5nIGlzIHRoYXQgdGhpcyBpcyBhICpmdW5jdGlvbmFsIGNoYW5nZSogd2l0aGluIHJlYWNoYWJsZSBjb2RlLiBUaGUgcGF0Y2gsIHZpYSBtb2R1bGUgcGFyYW1ldGVycywgcHJvdmlkZXMgYSB0cmlnZ2VyLiBUaGlzIG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nIHRvIHVuY292ZXIgdGhhdCBsZWFrLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIHByaW1hcnkgdGFyZ2V0IGZvciBmdXp6aW5nIG5lZWRzIHRvIGJlIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgLiBXaGlsZSBgZGFtb25fcmVjbGFpbV9pbml0YCBpcyBhbHNvIGluY2x1ZGVkLCBpdCYjMzk7cyBhbiBgX19pbml0YCBmdW5jdGlvbiwgc28gaXQmIzM5O3Mgbm90IGlkZWFsIGZvciAqY29udGludW91cyogZnV6emluZy4gSSB3aWxsIGluY2x1ZGUgaXQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZSBiZXN0IGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBhcmUgYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AsIGJ1dCBJIHdpbGwga2VlcCBgZGFtb25fcmVjbGFpbV9pbml0YCwgYGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZWAsIGFuZCBgZGFtb25fcmVjbGFpbV90dXJuYCBhcyBwb3RlbnRpYWwgdGFyZ2V0cy4KCkkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZSBjb25maWd1cmF0aW9ucyBgREFNT05gLCBgREFNT05fUEFERFJgLCBhbmQgYERBTU9OX1JFQ0xBSU1gIGFyZSBhbGwgZW5hYmxlZC4KCk5vdywgYmVmb3JlIEkgY29tbWl0IHRvIGFueSBzcGVjaWZpYyBmdXp6aW5nIHN0cmF0ZWd5LCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSByZXN0IG9mIHRoZSBmdW5jdGlvbnMgaW4gYG1tL2RhbW9uL3JlY2xhaW0uY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnN0YXRpYy4qZGFtb25fcmVjbGFpbV8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9yZWNsYWltLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vcmVjbGFpbS5jPTUwPW1vZHVsZV9wYXJhbShtaW5fYWdlLCB1bG9uZywgMDYwMCk7XG5tbS9kYW1vbi9yZWNsYWltLmMtNTEtXG5tbS9kYW1vbi9yZWNsYWltLmM6NTI6c3RhdGljIHN0cnVjdCBkYW1vc19xdW90YSBkYW1vbl9yZWNsYWltX3F1b3RhID0ge1xubW0vZGFtb24vcmVjbGFpbS5jLTUzLVx0LyogdXNlIHVwIHRvIDEwIG1zIHRpbWUsIHJlY2xhaW0gdXAgdG8gMTI4IE1pQiBwZXIgMSBzZWMgYnkgZGVmYXVsdCAqL1xuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz0xMDY9bW9kdWxlX3BhcmFtKGF1dG90dW5lX21vbml0b3JpbmdfaW50ZXJ2YWxzLCBib29sLCAwNjAwKTtcbm1tL2RhbW9uL3JlY2xhaW0uYy0xMDctXG5tbS9kYW1vbi9yZWNsYWltLmM6MTA4OnN0YXRpYyBzdHJ1Y3QgZGFtb3Nfd2F0ZXJtYXJrcyBkYW1vbl9yZWNsYWltX3dtYXJrcyA9IHtcbm1tL2RhbW9uL3JlY2xhaW0uYy0xMDktXHQubWV0cmljID0gREFNT1NfV01BUktfRlJFRV9NRU1fUkFURSxcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MTE1PURFRklORV9EQU1PTl9NT0RVTEVTX1dNQVJLU19QQVJBTVMoZGFtb25fcmVjbGFpbV93bWFya3MpO1xubW0vZGFtb24vcmVjbGFpbS5jLTExNi1cbm1tL2RhbW9uL3JlY2xhaW0uYzoxMTc6c3RhdGljIHN0cnVjdCBkYW1vbl9hdHRycyBkYW1vbl9yZWNsYWltX21vbl9hdHRycyA9IHtcbm1tL2RhbW9uL3JlY2xhaW0uYy0xMTgtXHQuc2FtcGxlX2ludGVydmFsID0gNTAwMCxcdC8qIDUgbXMgKi9cbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MTYwPW1vZHVsZV9wYXJhbShza2lwX2Fub24sIGJvb2wsIDA2MDApO1xubW0vZGFtb24vcmVjbGFpbS5jLTE2MS1cbm1tL2RhbW9uL3JlY2xhaW0uYzoxNjI6c3RhdGljIHN0cnVjdCBkYW1vc19zdGF0IGRhbW9uX3JlY2xhaW1fc3RhdDtcbm1tL2RhbW9uL3JlY2xhaW0uYy0xNjMtREVGSU5FX0RBTU9OX01PRFVMRVNfREFNT1NfU1RBVFNfUEFSQU1TKGRhbW9uX3JlY2xhaW1fc3RhdCxcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MTY3PXN0YXRpYyBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0YXJnZXQ7XG5tbS9kYW1vbi9yZWNsYWltLmMtMTY4LVxubW0vZGFtb24vcmVjbGFpbS5jOjE2OTpzdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9yZWNsYWltX25ld19zY2hlbWUodW5zaWduZWQgbG9uZyBhZ2dyX2ludGVydmFsKVxubW0vZGFtb24vcmVjbGFpbS5jLTE3MC17XG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTE5NS1cbm1tL2RhbW9uL3JlY2xhaW0uYzoxOTY6c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcbm1tL2RhbW9uL3JlY2xhaW0uYy0xOTcte1xuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy0yNzgtXG5tbS9kYW1vbi9yZWNsYWltLmM6Mjc5OnN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX2ZuKHZvaWQgKmFyZylcbm1tL2RhbW9uL3JlY2xhaW0uYy0yODAte1xuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy0yODMtXG5tbS9kYW1vbi9yZWNsYWltLmM6Mjg0OnN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yODUtXHRcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTMyMj1tb2R1bGVfcGFyYW1fY2IoY29tbWl0X2lucHV0cywgXHUwMDI2Y29tbWl0X2lucHV0c19wYXJhbV9vcHMsIFx1MDAyNmNvbW1pdF9pbnB1dHMsIDA2MDApO1xubW0vZGFtb24vcmVjbGFpbS5jLTMyMy1cbm1tL2RhbW9uL3JlY2xhaW0uYzozMjQ6c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2RhbW9uX2NhbGxfZm4odm9pZCAqYXJnKVxubW0vZGFtb24vcmVjbGFpbS5jLTMyNS17XG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTMzNj1zdGF0aWMgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCBjYWxsX2NvbnRyb2wgPSB7XG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTM0MC1cbm1tL2RhbW9uL3JlY2xhaW0uYzozNDE6c3RhdGljIGludCBkYW1vbl9yZWNsYWltX3R1cm4oYm9vbCBvbilcbm1tL2RhbW9uL3JlY2xhaW0uYy0zNDIte1xuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy0zNTctXG5tbS9kYW1vbi9yZWNsYWltLmM6MzU4OnN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hZGRyX3VuaXRfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxubW0vZGFtb24vcmVjbGFpbS5jLTM1OS1cdFx0Y29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTM3OT1NT0RVTEVfUEFSTV9ERVNDKGFkZHJfdW5pdCxcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMzgxLVxubW0vZGFtb24vcmVjbGFpbS5jOjM4MjpzdGF0aWMgYm9vbCBkYW1vbl9yZWNsYWltX2VuYWJsZWQodm9pZClcbm1tL2RhbW9uL3JlY2xhaW0uYy0zODMte1xuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy0zODgtXG5tbS9kYW1vbi9yZWNsYWltLmM6Mzg5OnN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9lbmFibGVkX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcbm1tL2RhbW9uL3JlY2xhaW0uYy0zOTAtXHRcdGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy00MTEtXG5tbS9kYW1vbi9yZWNsYWltLmM6NDEyOnN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9lbmFibGVkX2xvYWQoY2hhciAqYnVmZmVyLFxubW0vZGFtb24vcmVjbGFpbS5jLTQxMy1cdFx0Y29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTQyND1NT0RVTEVfUEFSTV9ERVNDKGVuYWJsZWQsXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTQyNi1cbm1tL2RhbW9uL3JlY2xhaW0uYzo0Mjc6c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2tkYW1vbmRfcGlkX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcbm1tL2RhbW9uL3JlY2xhaW0uYy00MjgtXHRcdGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy00MzYtXG5tbS9kYW1vbi9yZWNsYWltLmM6NDM3OnN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9rZGFtb25kX3BpZF9sb2FkKGNoYXIgKmJ1ZmZlcixcbm1tL2RhbW9uL3JlY2xhaW0uYy00MzgtXHRcdGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz00NjE9bW9kdWxlX3BhcmFtX2NiKGtkYW1vbmRfcGlkLCBcdTAwMjZrZGFtb25kX3BpZF9wYXJhbV9vcHMsIE5VTEwsIDA0MDApO1xubW0vZGFtb24vcmVjbGFpbS5jLTQ2Mi1cbm1tL2RhbW9uL3JlY2xhaW0uYzo0NjM6c3RhdGljIGludCBfX2luaXQgZGFtb25fcmVjbGFpbV9pbml0KHZvaWQpXG5tbS9kYW1vbi9yZWNsYWltLmMtNDY0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU3MzMKCQkJCQkJCW91dHB1dDogMTk5CgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uLCBwcmVzZW50ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQ6CgoqKlVuZGVyc3RhbmRpbmcgdGhlIENvcmUgTW9kaWZpY2F0aW9uIFBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgY29kZSBtb2RpZmljYXRpb24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGtleSBlbnRyeSBwb2ludHM6IGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgLCBgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlYCwgYGRhbW9uX3JlY2xhaW1fdHVybmAsIGFuZCBgZGFtb25fcmVjbGFpbV9lbmFibGVkX3N0b3JlYC4gVGhlc2UgYXJlIHRoZSBzdGFydGluZyBnYXRlcywgdGhlIHBsYWNlcyB3aGVyZSB0aGUgbmV3IGxvZ2ljIGlzIGludHJvZHVjZWQgb3IgaW52b2tlZCB3aXRoaW4gdGhlIGV4aXN0aW5nIHN0cnVjdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGludGVyZmFjZXMgYXJlIHVzZWQgYW5kIHdoYXQgdGhleSBhcmUgdXNlZCBmb3IuCgpDbGVhcmx5LCB0aGlzIGRlc2lnbiBpbmNsdWRlcyBhIGNvbmNlcHQgZm9yIHNldHRpbmcgJiMzNDtyZXN1bHRzLCYjMzQ7IGluZGljYXRlZCBieSB0aGUgdXNlIG9mICYjMzQ7c2V0LXJlc3VsdHMmIzM0Oy4gVGhlIHRlcm0gaXMgYW1iaWd1b3VzLCBidXQgdGhlIGNvZGUgaW4gY29udGV4dCBzaG91bGQgY2xhcmlmeSB0aGUgaW50ZW50LiBJIHdpbGwgaGF2ZSB0byBmaW5kIG91dCB3aGF0IHJlc3VsdHMgYXJlIGJlaW5nIHNldC4KCldpdGggdGhlc2UgZW50cnkgcG9pbnRzIGlkZW50aWZpZWQgYW5kIGEgY2xlYXIgaW5kaWNhdGlvbiBvZiBhICYjMzQ7c2V0LXJlc3VsdHMmIzM0OyBmdW5jdGlvbiwgSSBjYW4gYmVnaW4gdG8gdHJhY2UgdGhlIGNvbnRyb2wgZmxvdyBhbmQgZGVkdWNlIHRoZSBvdmVyYWxsIG1vZGlmaWNhdGlvbiBzdHJhdGVneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjAgMDA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1JFQ0xBSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnMmIzM0OywKICAgICYjMzQ7ZGFtb25fcmVjbGFpbV9pbml0JiMzNDssCiAgICAmIzM0O2RhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZSYjMzQ7LAogICAgJiMzNDtkYW1vbl9yZWNsYWltX3R1cm4mIzM0OywKICAgICYjMzQ7ZGFtb25fcmVjbGFpbV9lbmFibGVkX3N0b3JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBleGVjdXRpb24gZmxvdyBpbiBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCBhbmQgYGRhbW9uX3JlY2xhaW1faW5pdGAuIFNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBhIG1lbW9yeSBsZWFrIGluIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgIGJ5IHNraXBwaW5nIGBkYW1vbl9kZXN0cm95X2N0eChwYXJhbV9jdHgpYCBvbiBzdWNjZXNzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvZGUgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBtb2R1bGUgcGFyYW1ldGVycywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgdG8gZGV0ZWN0IHRoZSBtZW1vcnkgbGVhay4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fUkVDTEFJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyYjMzQ7LAogICAgJiMzNDtkYW1vbl9yZWNsYWltX2luaXQmIzM0OywKICAgICYjMzQ7ZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlJiMzNDssCiAgICAmIzM0O2RhbW9uX3JlY2xhaW1fdHVybiYjMzQ7LAogICAgJiMzNDtkYW1vbl9yZWNsYWltX2VuYWJsZWRfc3RvcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGV4ZWN1dGlvbiBmbG93IGluIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgIGFuZCBgZGFtb25fcmVjbGFpbV9pbml0YC4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGEgbWVtb3J5IGxlYWsgaW4gYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AgYnkgc2tpcHBpbmcgYGRhbW9uX2Rlc3Ryb3lfY3R4KHBhcmFtX2N0eClgIG9uIHN1Y2Nlc3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29kZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgdmlhIG1vZHVsZSBwYXJhbWV0ZXJzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyB0byBkZXRlY3QgdGhlIG1lbW9yeSBsZWFrLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjBUMDA6MDE6NDYuMTAzNzQwMjdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk4NTU4MjQ1ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9SRUNMQUlNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzXCIsXG4gICAgXCJkYW1vbl9yZWNsYWltX2luaXRcIixcbiAgICBcImRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZVwiLFxuICAgIFwiZGFtb25fcmVjbGFpbV90dXJuXCIsXG4gICAgXCJkYW1vbl9yZWNsYWltX2VuYWJsZWRfc3RvcmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXhlY3V0aW9uIGZsb3cgaW4gYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AgYW5kIGBkYW1vbl9yZWNsYWltX2luaXRgLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgYSBtZW1vcnkgbGVhayBpbiBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCBieSBza2lwcGluZyBgZGFtb25fZGVzdHJveV9jdHgocGFyYW1fY3R4KWAgb24gc3VjY2Vzcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb2RlIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCB2aWEgbW9kdWxlIHBhcmFtZXRlcnMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nIHRvIGRldGVjdCB0aGUgbWVtb3J5IGxlYWsuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAwOjAxOjQ2LjEwMzc2NjY1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzEwNzU4MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwN2I3ZGUyYzU5ODdiMDMzYzNjZDE1MWIxYmM1NmQ0NzRkOWEwMTBkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgSnVuIDIwIDAwOjAxOjQ0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3JlY2xhaW0uYyBiL21tL2RhbW9uL3JlY2xhaW0uY1xcbmluZGV4IGNlNDQ5OWNmNGI4YjA1Li5kZmU1MjcxN2Q5MmNmZCAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi9yZWNsYWltLmNcXG4rKysgYi9tbS9kYW1vbi9yZWNsYWltLmNcXG5AQCAtMjY4LDYgKzI2OCw5IEBAIHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRlcnIgPSBkYW1vbl9jb21taXRfY3R4KGN0eCwgcGFyYW1fY3R4KTtcXG4rXFxuK1xcdGlmICghZXJyKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4gb3V0OlxcbiBcXHRkYW1vbl9kZXN0cm95X2N0eChwYXJhbV9jdHgpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbkBAIC00NzgsNiArNDgxLDEwIEBAIHN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3JlY2xhaW1faW5pdCh2b2lkKVxcbiBvdXQ6XFxuIFxcdGlmIChlcnIgXFx1MDAyNlxcdTAwMjYgZW5hYmxlZClcXG4gXFx0XFx0ZW5hYmxlZCA9IGZhbHNlO1xcbitcXG4rXFx0LyogUHJldmVudCBwb3RlbmlhbCBtZW1vcnkgbGVha2FnZSAqL1xcbitcXHRpZiAoZXJyIFxcdTAwMjZcXHUwMDI2IGN0eClcXG4rXFx0XFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMDA6MDE6NDYuNTM1NjYyODJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1OTQyMzg5MTc0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1JFQ0xBSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNcIixcbiAgICBcImRhbW9uX3JlY2xhaW1faW5pdFwiLFxuICAgIFwiZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlXCIsXG4gICAgXCJkYW1vbl9yZWNsYWltX3R1cm5cIixcbiAgICBcImRhbW9uX3JlY2xhaW1fZW5hYmxlZF9zdG9yZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBleGVjdXRpb24gZmxvdyBpbiBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCBhbmQgYGRhbW9uX3JlY2xhaW1faW5pdGAuIFNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBhIG1lbW9yeSBsZWFrIGluIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgIGJ5IHNraXBwaW5nIGBkYW1vbl9kZXN0cm95X2N0eChwYXJhbV9jdHgpYCBvbiBzdWNjZXNzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvZGUgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBtb2R1bGUgcGFyYW1ldGVycywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgdG8gZGV0ZWN0IHRoZSBtZW1vcnkgbGVhay5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwN2I3ZGUyYzU5ODdiMDMzYzNjZDE1MWIxYmM1NmQ0NzRkOWEwMTBkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdW4gMjAgMDA6MDE6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9yZWNsYWltLmMgYi9tbS9kYW1vbi9yZWNsYWltLmNcbmluZGV4IGNlNDQ5OWNmNGI4YjA1Li5kZmU1MjcxN2Q5MmNmZCAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3JlY2xhaW0uY1xuKysrIGIvbW0vZGFtb24vcmVjbGFpbS5jXG5AQCAtMjY4LDYgKzI2OCw5IEBAIHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIG91dDtcbiBcdGVyciA9IGRhbW9uX2NvbW1pdF9jdHgoY3R4LCBwYXJhbV9jdHgpO1xuK1xuK1x0aWYgKCFlcnIpXG4rXHRcdHJldHVybiAwO1xuIG91dDpcbiBcdGRhbW9uX2Rlc3Ryb3lfY3R4KHBhcmFtX2N0eCk7XG4gXHRyZXR1cm4gZXJyO1xuQEAgLTQ3OCw2ICs0ODEsMTAgQEAgc3RhdGljIGludCBfX2luaXQgZGFtb25fcmVjbGFpbV9pbml0KHZvaWQpXG4gb3V0OlxuIFx0aWYgKGVyciBcdTAwMjZcdTAwMjYgZW5hYmxlZClcbiBcdFx0ZW5hYmxlZCA9IGZhbHNlO1xuK1xuK1x0LyogUHJldmVudCBwb3RlbmlhbCBtZW1vcnkgbGVha2FnZSAqL1xuK1x0aWYgKGVyciBcdTAwMjZcdTAwMjYgY3R4KVxuK1x0XHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMDowMTo0Ni41MzU2NjUzOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMDM5Mzc2MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEQU1PTiBSZWNsYWltIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG1tL2RhbW9uL3JlY2xhaW0uY2AsIGFuZCBpbW1lZGlhdGVseSBJIHNwb3Qgc29tZSBmdW5jdGlvbmFsIGNoYW5nZXMuIFRoZSBmaXJzdCBvbmUgaW4gYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AgaXMgaW50ZXJlc3RpbmcuIEFkZGluZyBgaWYgKCFlcnIpIHJldHVybiAwO2AgYmVmb3JlIHRoZSBgb3V0OmAgbGFiZWwgZGVmaW5pdGVseSBhbHRlcnMgdGhlIGV4aXN0aW5nIGZsb3cuIEl0IHNlZW1zIHRoZSBpbnRlbnRpb24gaXMgdG8gYXZvaWQgY2FsbGluZyBgZGFtb25fZGVzdHJveV9jdHgocGFyYW1fY3R4KWAgaWYgZXZlcnl0aGluZyB3ZW50IHNtb290aGx5LCBpLmUuLCBgZXJyYCBpcyAwLiBXYWl0LCB0aGF0J3MgY29ycmVjdCwgcmV0dXJuaW5nIDAgb24gc3VjY2VzcyAqc2hvdWxkbid0KiBkZXN0cm95IHRoZSBjb250ZXh0ISBJdCdzIGEgYmVoYXZpb3IgY2hhbmdlLCBhbmQgSSBuZWVkIHRvIGFzc2VzcyB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzLiBJcyBpdCBhYm91dCBwZXJmb3JtYW5jZT8gUmVzb3VyY2UgbWFuYWdlbWVudD8gQXZvaWRpbmcgdW5uZWNlc3Nhcnkgb3ZlcmhlYWQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGFsdGVyYXRpb24gd2FzIGRlZW1lZCBuZWNlc3NhcnkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0IGZ1bGx5LCBiZWNhdXNlIHRoYXQncyBhIHN1YnRsZSBjaGFuZ2UuXG5cblRoZSBzZWNvbmQgY2hhbmdlLCB3aXRoaW4gYGRhbW9uX3JlY2xhaW1faW5pdGAsIHRoZSBhZGRpdGlvbiBvZiBgaWYgKGVyciBcdTAwMjZcdTAwMjYgY3R4KSBkYW1vbl9kZXN0cm95X2N0eChjdHgpO2AgbG9va3MgbGlrZSBhIGRlZmVuc2l2ZSBtZWFzdXJlIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzIHdoZW4gaW5pdGlhbGl6YXRpb24gZmFpbHMuIFRoaXMgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLCB3aGljaCBpcyBnb29kLlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIGRlZXBlciBpbnRvIHRoZSBwYXRjaCdzIGltcGFjdCwgSSdsbCBuZWVkIHRvIG9wZW4gdXAgYG1tL2RhbW9uL3JlY2xhaW0uY2AgYW5kIHVuZGVyc3RhbmQgdGhlIGJpZ2dlciBwaWN0dXJlLiBJIG5lZWQgdG8gZ3Jhc3AgdGhlIGNvbmZpZ3VyYXRpb25zIGFzc29jaWF0ZWQgd2l0aCBpdCwgYW5kIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGFyZSByZWxldmFudC4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dHMgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucyB3aWxsIGJlIGtleSB0byBkZXRlcm1pbmluZyB0aGUgcGF0Y2gncyBjb3JyZWN0bmVzcyBhbmQgcG90ZW50aWFsIGRvd25zdHJlYW0gZWZmZWN0cy4gVGhpcyBpcyBhIHN1YnRsZSBjaGFuZ2UgdGhhdCB3aWxsIHJlcXVpcmUgbXkgZnVsbCBhdHRlbnRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDEsIk91dHB1dFRva2VucyI6MTM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMDA6MDE6NTEuODM5NjA1NDc1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MzMwNzE0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vcmVjbGFpbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3JlY2xhaW0uYz0xNjk9c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fcmVjbGFpbV9uZXdfc2NoZW1lKHVuc2lnbmVkIGxvbmcgYWdncl9pbnRlcnZhbClcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0xOTUtXFxubW0vZGFtb24vcmVjbGFpbS5jOjE5NjpzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0xOTcte1xcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTI3OT1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19mbih2b2lkICphcmcpXFxubW0vZGFtb24vcmVjbGFpbS5jLTI4MC17XFxubW0vZGFtb24vcmVjbGFpbS5jOjI4MTpcXHRyZXR1cm4gZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKCk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTI4Mi19XFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9MzQxPXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV90dXJuKGJvb2wgb24pXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMzQ3LVxcbm1tL2RhbW9uL3JlY2xhaW0uYzozNDg6XFx0ZXJyID0gZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKCk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTM0OS1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMDowMTo1Mi4wMTI5MjIzMjFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc0NTk2NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fcmVjbGFpbV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL3JlY2xhaW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9yZWNsYWltLmM9NDYxPW1vZHVsZV9wYXJhbV9jYihrZGFtb25kX3BpZCwgXFx1MDAyNmtkYW1vbmRfcGlkX3BhcmFtX29wcywgTlVMTCwgMDQwMCk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTQ2Mi1cXG5tbS9kYW1vbi9yZWNsYWltLmM6NDYzOnN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3JlY2xhaW1faW5pdCh2b2lkKVxcbm1tL2RhbW9uL3JlY2xhaW0uYy00NjQte1xcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTQ5MC1cXG5tbS9kYW1vbi9yZWNsYWltLmM6NDkxOm1vZHVsZV9pbml0KGRhbW9uX3JlY2xhaW1faW5pdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAwOjAxOjUyLjA3MDM4ODIyOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjAwNTc5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREFNT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcXFwiRGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1xcXCJcXG5tbS9kYW1vbi9LY29uZmlnLTQtXFxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNi1cXHRib29sIFxcXCJEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxcbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbm1tL2RhbW9uL0tjb25maWctMTYtXFx0Ym9vbCBcXFwiQ2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxcbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTI3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxcbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXFxubW0vZGFtb24vS2NvbmZpZy0zOS1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxcbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy00OC1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy01NS1cXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy01Ny1cXHRib29sIFxcXCJUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxcbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXFxubW0vZGFtb24vS2NvbmZpZy02OS1cXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxcbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTc3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy04Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXFxubW0vZGFtb24vS2NvbmZpZy04OS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctOTktXFxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTA3LVxcbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXFxubW0vZGFtb24vS2NvbmZpZy0xMDktXFx0Ym9vbCBcXFwiQnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTE1LVxcbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxcbm1tL2RhbW9uL0tjb25maWctMTE3LVxcdGJvb2wgXFxcIkVuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAwOjAxOjUyLjEyNjM5OTYxOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzIzMzMzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREFNT05fUkVDTEFJTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL0tjb25maWc9NzY9Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctODctXFxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxcbm1tL2RhbW9uL0tjb25maWctODktXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAwOjAxOjUyLjE4MzYzOTk4N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3OTQyNTc3NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEQU1PTiBSZWNsYWltIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIHRhcmdldGluZyBgbW0vZGFtb24vcmVjbGFpbS5jYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGl0J3MgYWJvdXQgdGhlIERBTU9OIHJlY2xhaW0gZnVuY3Rpb25hbGl0eSwgd2hpY2ggbWVhbnMgYERBTU9OYCBhbmQgYERBTU9OX1JFQ0xBSU1gIGNvbmZpZ3MgYXJlIGVzc2VudGlhbCBmb3IgdGhpcyB0byBldmVuICpiZSogYWN0aXZlLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gaG93IHRoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlY2xhaW0gYmVoYXZpb3IsIGFuZCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgZXZlcnl0aGluZyBpcyB3b3JraW5nIGFzIGV4cGVjdGVkLlxuXG5JJ20gc2VlaW5nIGNoYW5nZXMgdG8gYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AgYW5kIGBkYW1vbl9yZWNsYWltX2luaXRgLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gU2luY2UgYGRhbW9uX3JlY2xhaW1faW5pdGAgaXMgYSBgbW9kdWxlX2luaXRgIGZ1bmN0aW9uLCBpdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQgdG8gc2VlICpob3cqIGl0J3MgaW5pdGlhbGl6ZWQ6IHRoYXQgcGFydCBpcyBiYXNpYyBtb2R1bGUgaGFuZGxpbmcuXG5cbk5vdywgYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AgaXMgYSBrZXkgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZW4gYW5kIGhvdyBvZnRlbiBpdOKAmXMgY2FsbGVkLiBJdCBsb29rcyBsaWtlIGBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfZm5gIGFuZCBgZGFtb25fcmVjbGFpbV90dXJuYCBjYWxsIGl0LiBBbmQsIEkgc2VlIHRoYXQgYGRhbW9uX3JlY2xhaW1fdHVybmAgaXMgaW52b2tlZCB3aGVuIHdlIHN3aXRjaCByZWNsYWltIG9uIG9yIG9mZiB2aWEgbW9kdWxlIHBhcmFtZXRlcnMuIFNvLCBteSBhbmFseXNpcyBoYXMgdG8gYWNjb3VudCBmb3IgYWxsIHRoZXNlIGNhc2VzLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIHNwZWNpZmljIGNvZGUgY2hhbmdlcyB3aXRoaW4gYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhlIGZ1bmN0aW9uIGlzIGluZGVlZCByZWFjaGFibGUgdW5kZXIgdmFyaW91cyBjb25kaXRpb25zIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKnByZWNpc2VseSogd2hhdCBmdW5jdGlvbmFsaXR5IGlzIGJlaW5nIGNoYW5nZWQgaGVyZS4gQXJlIHdlIHR3ZWFraW5nIHJlY2xhaW0gdGhyZXNob2xkcywgc2NoZWR1bGluZyBwYXJhbWV0ZXJzLCBvciBvdGhlciByZWNsYWltIGxvZ2ljPyBBIGRlZXAgZGl2ZSBpbnRvIHRoZSBjb2RlIGlzIG5lZWRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg1MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MywiVG9vbENhbGxzIjpbImdyZXBwZXIiLCJncmVwcGVyIiwiZ3JlcHBlciIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMDowMTo1Ni45Nzc5MDAwOTNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQ5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vcmVjbGFpbS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI1MDpcXHRcXHRpZiAocXVvdGFfYXV0b3R1bmVfZmVlZGJhY2spIHtcXG4gMjUxOlxcdFxcdFxcdGdvYWwgPSBkYW1vc19uZXdfcXVvdGFfZ29hbChEQU1PU19RVU9UQV9VU0VSX0lOUFVULCAxMDAwMCk7XFxuIDI1MjpcXHRcXHRcXHRpZiAoIWdvYWwpXFxuIDI1MzpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gMjU0OlxcdFxcdFxcdGdvYWwtXFx1MDAzZWN1cnJlbnRfdmFsdWUgPSBxdW90YV9hdXRvdHVuZV9mZWVkYmFjaztcXG4gMjU1OlxcdFxcdFxcdGRhbW9zX2FkZF9xdW90YV9nb2FsKFxcdTAwMjZzY2hlbWUtXFx1MDAzZXF1b3RhLCBnb2FsKTtcXG4gMjU2OlxcdFxcdH1cXG4gMjU3OlxcdFxcbiAyNTg6XFx0XFx0aWYgKHNraXBfYW5vbikge1xcbiAyNTk6XFx0XFx0XFx0ZmlsdGVyID0gZGFtb3NfbmV3X2ZpbHRlcihEQU1PU19GSUxURVJfVFlQRV9BTk9OLCB0cnVlLCBmYWxzZSk7XFxuIDI2MDpcXHRcXHRcXHRpZiAoIWZpbHRlcilcXG4gMjYxOlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiAyNjI6XFx0XFx0XFx0ZGFtb3NfYWRkX2ZpbHRlcihzY2hlbWUsIGZpbHRlcik7XFxuIDI2MzpcXHRcXHR9XFxuIDI2NDpcXHRcXG4gMjY1OlxcdFxcdGVyciA9IGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdChwYXJhbV90YXJnZXQsXFxuIDI2NjpcXHRcXHRcXHRcXHRcXHUwMDI2bW9uaXRvcl9yZWdpb25fc3RhcnQsIFxcdTAwMjZtb25pdG9yX3JlZ2lvbl9lbmQsXFxuIDI2NzpcXHRcXHRcXHRcXHRwYXJhbV9jdHgtXFx1MDAzZWFkZHJfdW5pdCwgcGFyYW1fY3R4LVxcdTAwM2VtaW5fcmVnaW9uX3N6KTtcXG4gMjY4OlxcdFxcdGlmIChlcnIpXFxuIDI2OTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMjcwOlxcdFxcdGVyciA9IGRhbW9uX2NvbW1pdF9jdHgoY3R4LCBwYXJhbV9jdHgpO1xcbiAyNzE6XFx0XFxuIDI3MjpcXHRcXHRpZiAoIWVycilcXG4gMjczOlxcdFxcdFxcdHJldHVybiAwO1xcbiAyNzQ6XFx0b3V0OlxcbiAyNzU6XFx0XFx0ZGFtb25fZGVzdHJveV9jdHgocGFyYW1fY3R4KTtcXG4gMjc2OlxcdFxcdHJldHVybiBlcnI7XFxuIDI3NzpcXHR9XFxuIDI3ODpcXHRcXG4gMjc5OlxcdHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX2ZuKHZvaWQgKmFyZylcXG4gMjgwOlxcdHtcXG4gMjgxOlxcdFxcdHJldHVybiBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnMoKTtcXG4gMjgyOlxcdH1cXG4gMjgzOlxcdFxcbiAyODQ6XFx0c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxcbiAyODU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4gMjg2OlxcdHtcXG4gMjg3OlxcdFxcdGJvb2wgY29tbWl0X2lucHV0c19yZXF1ZXN0O1xcbiAyODg6XFx0XFx0aW50IGVycjtcXG4gMjg5OlxcdFxcdHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgY29udHJvbCA9IHtcXG4gMjkwOlxcdFxcdFxcdC5mbiA9IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19mbixcXG4gMjkxOlxcdFxcdH07XFxuIDI5MjpcXHRcXG4gMjkzOlxcdFxcdGlmICghdmFsKSB7XFxuIDI5NDpcXHRcXHRcXHRjb21taXRfaW5wdXRzX3JlcXVlc3QgPSB0cnVlO1xcbiAyOTU6XFx0XFx0fSBlbHNlIHtcXG4gMjk2OlxcdFxcdFxcdGVyciA9IGtzdHJ0b2Jvb2wodmFsLCBcXHUwMDI2Y29tbWl0X2lucHV0c19yZXF1ZXN0KTtcXG4gMjk3OlxcdFxcdFxcdGlmIChlcnIpXFxuIDI5ODpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiAyOTk6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMDowMTo1Ni45NzgwNzY3MTNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc3NjM4MjgzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNZW1vcnkgTGVhayBhbmQgQnVnIEZpeCBpbiBEQU1PTioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgYWRkcmVzc2luZyBhIG1lbW9yeSBsZWFrIGFuZCBhIHBvdGVudGlhbCBidWcuIFNwZWNpZmljYWxseSwgdGhlIGlzc3VlIGlzIHRoYXQgYGRhbW9uX2Rlc3Ryb3lfY3R4KHBhcmFtX2N0eClgIHdhcyBiZWluZyBjYWxsZWQgdW5jb25kaXRpb25hbGx5LCBldmVuIHdoZW4gYGRhbW9uX2NvbW1pdF9jdHhgIGhhZCBzdWNjZXNzZnVsbHkgY29tcGxldGVkLiBOb3csIHRoYXQgaW1tZWRpYXRlbHkgZmxhZ3Mgc29tZXRoaW5nOiBJZiBgZGFtb25fY29tbWl0X2N0eGAgd29ya3MgY29ycmVjdGx5LCBpdCBzaG91bGQgcmV0dXJuIDAsIHJpZ2h0P1xuXG5Mb29raW5nIGF0IHRoZSBwcmUtcGF0Y2ggY29kZSwgSSBzZWUgdGhlIHBhdHRlcm4uIGBlcnJgIGdldHMgdGhlIHJldHVybiB2YWx1ZSBvZiBgZGFtb25fY29tbWl0X2N0eGAuIFRoZW4sIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBzdWNjZWVkZWQgb3IgZmFpbGVkLCBgZGFtb25fZGVzdHJveV9jdHgocGFyYW1fY3R4KWAgaXMgYWx3YXlzIGNhbGxlZCwgYW5kIGZpbmFsbHkgYGVycmAgaXMgcmV0dXJuZWQuIFNvLCBpZiBgZGFtb25fY29tbWl0X2N0eGAgKmRpZCogc3VjY2VlZCwgYGVycmAgd291bGQgYmUgMCwgaXQgY2FsbHMgYGRhbW9uX2Rlc3Ryb3lfY3R4KHBhcmFtX2N0eClgIGFuZCByZXR1cm5zIDAgYW55d2F5LiBUaGF0IHNlZW1zIHdyb25nLCBiZWNhdXNlIGBwYXJhbV9jdHhgIGFwcGVhcnMgdG8gaG9sZCByZXNvdXJjZXMuIFRoYXQncyBhIHRleHRib29rIG1lbW9yeSBsZWFrIHdhaXRpbmcgdG8gaGFwcGVuIGlmIGBwYXJhbV9jdHhgIHdhc24ndCBwcm9wZXJseSBtYW5hZ2VkIGJ5IHRoZSBgY29tbWl0YCBmdW5jdGlvbi5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBwYXJhbV9jdHhgIGFjdHVhbGx5ICppcyouIFdoZXJlIGRvZXMgaXQgY29tZSBmcm9tPyBJdCdzIGNyZWF0ZWQgaW4gYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AuIEknbGwgbmVlZCB0byBnbyBiYWNrIGFuZCBjaGVjayB0aGUgY29kZSBpbiB0aGF0IGZ1bmN0aW9uIHRvIGVuc3VyZSB0aGF0IEkgdW5kZXJzdGFuZCBob3cgdGhvc2UgY29udGV4dHMgd29yay4gTGV0IG1lIHN0YXJ0IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTQ4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMDA6MDI6MDEuNzU0NDYxOTZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vcmVjbGFpbS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5MDpcXHRcXHRcXHRcXHRcXHUwMDI2ZGFtb25fcmVjbGFpbV9xdW90YSxcXG4gMTkxOlxcdFxcdFxcdFxcdC8qIChEZSlhY3RpdmF0ZSB0aGlzIGFjY29yZGluZyB0byB0aGUgd2F0ZXJtYXJrcy4gKi9cXG4gMTkyOlxcdFxcdFxcdFxcdFxcdTAwMjZkYW1vbl9yZWNsYWltX3dtYXJrcyxcXG4gMTkzOlxcdFxcdFxcdFxcdE5VTUFfTk9fTk9ERSk7XFxuIDE5NDpcXHR9XFxuIDE5NTpcXHRcXG4gMTk2OlxcdHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXFxuIDE5NzpcXHR7XFxuIDE5ODpcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpwYXJhbV9jdHg7XFxuIDE5OTpcXHRcXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICpwYXJhbV90YXJnZXQ7XFxuIDIwMDpcXHRcXHRzdHJ1Y3QgZGFtb25fYXR0cnMgYXR0cnM7XFxuIDIwMTpcXHRcXHRzdHJ1Y3QgZGFtb3MgKnNjaGVtZTtcXG4gMjAyOlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsO1xcbiAyMDM6XFx0XFx0c3RydWN0IGRhbW9zX2ZpbHRlciAqZmlsdGVyO1xcbiAyMDQ6XFx0XFx0aW50IGVycjtcXG4gMjA1OlxcdFxcbiAyMDY6XFx0XFx0ZXJyID0gZGFtb25fbW9kdWxlc19uZXdfcGFkZHJfY3R4X3RhcmdldChcXHUwMDI2cGFyYW1fY3R4LCBcXHUwMDI2cGFyYW1fdGFyZ2V0KTtcXG4gMjA3OlxcdFxcdGlmIChlcnIpXFxuIDIwODpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiAyMDk6XFx0XFxuIDIxMDpcXHRcXHRwYXJhbV9jdHgtXFx1MDAzZWFkZHJfdW5pdCA9IGFkZHJfdW5pdDtcXG4gMjExOlxcdFxcdHBhcmFtX2N0eC1cXHUwMDNlbWluX3JlZ2lvbl9zeiA9IG1heChEQU1PTl9NSU5fUkVHSU9OX1NaIC8gYWRkcl91bml0LCAxKTtcXG4gMjEyOlxcdFxcbiAyMTM6XFx0XFx0aWYgKCFpc19wb3dlcl9vZl8yKHBhcmFtX2N0eC1cXHUwMDNlbWluX3JlZ2lvbl9zeikpIHtcXG4gMjE0OlxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuIDIxNTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMjE2OlxcdFxcdH1cXG4gMjE3OlxcdFxcbiAyMTg6XFx0XFx0aWYgKCFkYW1vbl9yZWNsYWltX21vbl9hdHRycy5hZ2dyX2ludGVydmFsKSB7XFxuIDIxOTpcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiAyMjA6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDIyMTpcXHRcXHR9XFxuIDIyMjpcXHRcXG4gMjIzOlxcdFxcdGF0dHJzID0gZGFtb25fcmVjbGFpbV9tb25fYXR0cnM7XFxuIDIyNDpcXHRcXHRpZiAoYXV0b3R1bmVfbW9uaXRvcmluZ19pbnRlcnZhbHMpIHtcXG4gMjI1OlxcdFxcdFxcdGF0dHJzLnNhbXBsZV9pbnRlcnZhbCA9IDUwMDA7XFxuIDIyNjpcXHRcXHRcXHRhdHRycy5hZ2dyX2ludGVydmFsID0gMTAwMDAwO1xcbiAyMjc6XFx0XFx0XFx0YXR0cnMuaW50ZXJ2YWxzX2dvYWwuYWNjZXNzX2JwID0gNDA7XFxuIDIyODpcXHRcXHRcXHRhdHRycy5pbnRlcnZhbHNfZ29hbC5hZ2dycyA9IDM7XFxuIDIyOTpcXHRcXHRcXHRhdHRycy5pbnRlcnZhbHNfZ29hbC5taW5fc2FtcGxlX3VzID0gNTAwMDtcXG4gMjMwOlxcdFxcdFxcdGF0dHJzLmludGVydmFsc19nb2FsLm1heF9zYW1wbGVfdXMgPSAxMCAqIDEwMDAgKiAxMDAwO1xcbiAyMzE6XFx0XFx0fVxcbiAyMzI6XFx0XFx0ZXJyID0gZGFtb25fc2V0X2F0dHJzKHBhcmFtX2N0eCwgXFx1MDAyNmF0dHJzKTtcXG4gMjMzOlxcdFxcdGlmIChlcnIpXFxuIDIzNDpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMjM1OlxcdFxcbiAyMzY6XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4gMjM3OlxcdFxcdHNjaGVtZSA9IGRhbW9uX3JlY2xhaW1fbmV3X3NjaGVtZShhdHRycy5hZ2dyX2ludGVydmFsKTtcXG4gMjM4OlxcdFxcdGlmICghc2NoZW1lKVxcbiAyMzk6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDI0MDpcXHRcXHRkYW1vbl9zZXRfc2NoZW1lcyhwYXJhbV9jdHgsIFxcdTAwMjZzY2hlbWUsIDEpO1xcbiAyNDE6XFx0XFxuIDI0MjpcXHRcXHRpZiAocXVvdGFfbWVtX3ByZXNzdXJlX3VzKSB7XFxuIDI0MzpcXHRcXHRcXHRnb2FsID0gZGFtb3NfbmV3X3F1b3RhX2dvYWwoREFNT1NfUVVPVEFfU09NRV9NRU1fUFNJX1VTLFxcbiAyNDQ6XFx0XFx0XFx0XFx0XFx0cXVvdGFfbWVtX3ByZXNzdXJlX3VzKTtcXG4gMjQ1OlxcdFxcdFxcdGlmICghZ29hbClcXG4gMjQ2OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiAyNDc6XFx0XFx0XFx0ZGFtb3NfYWRkX3F1b3RhX2dvYWwoXFx1MDAyNnNjaGVtZS1cXHUwMDNlcXVvdGEsIGdvYWwpO1xcbiAyNDg6XFx0XFx0fVxcbiAyNDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAwOjAyOjAxLjc1NDU1MDg5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NjQ0MDcxNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgcGFyYW1fY3R4YCBDb25maWd1cmF0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gc2VlaW5nIHRoYXQgYHBhcmFtX2N0eGAgaXMgaW5pdGlhbGl6ZWQgYW5kIHNldCB1cCwgYW5kIHRoZW4gYGRhbW9uX2NvbW1pdF9jdHgoY3R4LCBwYXJhbV9jdHgpYCBpcyBjYWxsZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBkYW1vbl9jb21taXRfY3R4YCBwcm9iYWJseSB0YWtlcyB0aGUgY29uZmlndXJhdGlvbiBmcm9tIGBwYXJhbV9jdHhgIGFuZCBpbnRlZ3JhdGVzIGl0IGludG8gYGN0eGAuIEJ1dCB0aGVuIEkgaGF2ZSB0byBhc2sgbXlzZWxmLCBkb2VzIGBkYW1vbl9jb21taXRfY3R4YCBhY3R1YWxseSAqdGFrZSBvd25lcnNoaXAqIG9mIGBwYXJhbV9jdHhgPyAgSXQgc2VlbXMgbGlrZSB0aGUgdGV4dCBpbXBsaWVzIGEgY29weSwgd2hpY2ggbWVhbnMgYGN0eGAgaXMgYmVpbmcgdXBkYXRlZCB3aXRoIHRoZSBjb25maWd1cmF0aW9uIGRhdGEuXG5cbklmIGl0ICpjb3BpZXMqIHRoZSBjb25maWd1cmF0aW9uLCB0aGVuIHdoeSBpcyBgcGFyYW1fY3R4YCBzdGlsbCBoYW5naW5nIGFyb3VuZD8gU2hvdWxkbid0IGl0IGJlIGZyZWVkPyBJJ20gbWlzc2luZyBzb21ldGhpbmcgaGVyZS4gVG8gY2xhcmlmeSB0aGUgb3duZXJzaGlwIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBvZiBgcGFyYW1fY3R4YCBmb2xsb3dpbmcgdGhpcywgSSB0aGluayBJIG5lZWQgdG8gbG9vayBkaXJlY3RseSBhdCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGRhbW9uX2NvbW1pdF9jdHhgLiBMZXQgbWUgcHVsbCB1cCBgbW0vZGFtb24vY29yZS5jYCBhbmQgY29uZmlybSBleGFjdGx5IHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIHRoYXQgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2MzMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMDowMjowNS40MTg5NjAxODRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTQzNzYzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9jb21taXRfY3R4XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MTUyOT1zdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTU2MC0vKipcXG5tbS9kYW1vbi9jb3JlLmM6MTU2MTogKiBkYW1vbl9jb21taXRfY3R4KCkgLSBDb21taXQgcGFyYW1ldGVycyBvZiBhIERBTU9OIGNvbnRleHQgdG8gYW5vdGhlci5cXG5tbS9kYW1vbi9jb3JlLmMtMTU2Mi0gKiBAZHN0OlxcdFRoZSBjb21taXQgZGVzdGluYXRpb24gREFNT04gY29udGV4dC5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNTcyLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxNTczOmludCBkYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xNTc0LXtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9MjczPXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNDItXFx0XFx0Z290byBvdXQ7XFxubW0vZGFtb24vbHJ1X3NvcnQuYzozNDM6XFx0ZXJyID0gZGFtb25fY29tbWl0X2N0eChjdHgsIHBhcmFtX2N0eCk7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNDQtb3V0Olxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTE5Nj1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTI2OS1cXHRcXHRnb3RvIG91dDtcXG5tbS9kYW1vbi9yZWNsYWltLmM6MjcwOlxcdGVyciA9IGRhbW9uX2NvbW1pdF9jdHgoY3R4LCBwYXJhbV9jdHgpO1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNzEtXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIwNzY9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3N5c2ZzX25ld190ZXN0X2N0eChcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjA4NC1cXHRcXHRyZXR1cm4gTlVMTDtcXG5tbS9kYW1vbi9zeXNmcy5jOjIwODU6XFx0ZXJyID0gZGFtb25fY29tbWl0X2N0eCh0ZXN0X2N0eCwgcnVubmluZ19jdHgpO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjA4Ni1cXHRpZiAoZXJyKSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTIwOTk9c3RhdGljIGludCBkYW1vbl9zeXNmc19jb21taXRfaW5wdXQodm9pZCAqZGF0YSlcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjExOC1cXHR9XFxubW0vZGFtb24vc3lzZnMuYzoyMTE5OlxcdGVyciA9IGRhbW9uX2NvbW1pdF9jdHgodGVzdF9jdHgsIHBhcmFtX2N0eCk7XFxubW0vZGFtb24vc3lzZnMuYy0yMTIwLVxcdGlmIChlcnIpXFxubW0vZGFtb24vc3lzZnMuYy0yMTIxLVxcdFxcdGdvdG8gb3V0O1xcbm1tL2RhbW9uL3N5c2ZzLmM6MjEyMjpcXHRlcnIgPSBkYW1vbl9jb21taXRfY3R4KGtkYW1vbmQtXFx1MDAzZWRhbW9uX2N0eCwgcGFyYW1fY3R4KTtcXG5tbS9kYW1vbi9zeXNmcy5jLTIxMjMtb3V0Olxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTExODM9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9jb21taXRfY3R4KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMTk2LVxcdHNyYy1cXHUwMDNlbWluX3JlZ2lvbl9zeiA9IDQwOTY7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjExOTc6XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX2NvbW1pdF9jdHgoZHN0LCBzcmMpLCAwKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTE5OC1cXHRzcmMtXFx1MDAzZW1pbl9yZWdpb25fc3ogPSA0MDk1O1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMTk5OlxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9jb21taXRfY3R4KGRzdCwgc3JjKSwgLUVJTlZBTCk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEyMDAtXFx0c3JjLVxcdTAwM2VtaW5fcmVnaW9uX3N6ID0gNDA5NjtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTIwMS1cXHRzcmMtXFx1MDAzZXBhdXNlID0gdHJ1ZTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTIwMjpcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fY29tbWl0X2N0eChkc3QsIHNyYyksIDApO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMjAzLVxcdEtVTklUX0VYUEVDVF9UUlVFKHRlc3QsIGRzdC1cXHUwMDNlcGF1c2UpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMDowMjowNS41ODA0MDM1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODczMDk0NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYGRhbW9uX2NvbW1pdF9jdHhgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzIGBkYW1vbl9jb21taXRfY3R4YCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBzdHJ1Y3R1cmUgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBjb25maXJtIHRoYXQgdGhlIHdheSBpdCBoYW5kbGVzIGNvbnRleHQgd2l0aGluIERBTU9OIGFsaWducyB3aXRoIG15IGV4cGVjdGVkIG1vZGVsLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBzdWJ0bGUgaXNzdWVzIGluIG1lbW9yeSBtYW5hZ2VtZW50LCBjb25jdXJyZW5jeSBpZiBhcHBsaWNhYmxlLCBhbmQgaWYgaXQgaW50ZXJhY3RzIHByb3Blcmx5IHdpdGggdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCBpbiB0cmFja2luZyBhbmQgc2NoZWR1bGluZyByZWdpb25zLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRhdGEgZmxvdyB3aXRoaW4gdGhlIGNvbW1pdCBvcGVyYXRpb24sIGZvY3VzaW5nIG9uIGRhdGEgY29uc2lzdGVuY3kgdW5kZXIgY29uY3VycmVudCBhY2Nlc3MgZnJvbSBtdWx0aXBsZSB0aHJlYWRzL0NQVXMuIEkgYW0gbG9va2luZyBmb3IgdGhlIHVzYWdlIG9mIGF0b21pYyBvcGVyYXRpb25zLCBtdXRleGVzLCBhbmQgb3RoZXIgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjb2RlIHBsYXlzIG5pY2VseSB3aXRoIG90aGVyIGFyZWFzIG9mIERBTU9OIHRoYXQgbWFuYWdlIG1ldGFkYXRhLiBBcmUgdGhlcmUgYW55IGNvcm5lciBjYXNlcyB0aGF0IG1pZ2h0IGxlYWQgdG8gZGF0YSBjb3JydXB0aW9uIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IsIGVzcGVjaWFsbHkgaW4gaGlnaC1jb250ZW50aW9uIHNjZW5hcmlvcz8gRmluYWxseSwgSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyAtIGFyZSBleGNlcHRpb25zIHByb3Blcmx5IG1hbmFnZWQgYW5kIHRoZSBzeXN0ZW0gcmVtYWlucyBzdGFibGU/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwNzEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMDowMjowOC44Njc3MTUxMTJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTYwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNTYwOlxcdC8qKlxcbjE1NjE6XFx0ICogZGFtb25fY29tbWl0X2N0eCgpIC0gQ29tbWl0IHBhcmFtZXRlcnMgb2YgYSBEQU1PTiBjb250ZXh0IHRvIGFub3RoZXIuXFxuMTU2MjpcXHQgKiBAZHN0OlxcdFRoZSBjb21taXQgZGVzdGluYXRpb24gREFNT04gY29udGV4dC5cXG4xNTYzOlxcdCAqIEBzcmM6XFx0VGhlIGNvbW1pdCBzb3VyY2UgREFNT04gY29udGV4dC5cXG4xNTY0OlxcdCAqXFxuMTU2NTpcXHQgKiBUaGlzIGZ1bmN0aW9uIGNvcGllcyB1c2VyLXNwZWNpZmllZCBwYXJhbWV0ZXJzIGZyb20gQHNyYyB0byBAZHN0IGFuZCB1cGRhdGVcXG4xNTY2OlxcdCAqIHRoZSBpbnRlcm5hbCBzdGF0dXMgYW5kIHJlc3VsdHMgYWNjb3JkaW5nbHkuICBVc2VycyBzaG91bGQgdXNlIHRoaXMgZnVuY3Rpb25cXG4xNTY3OlxcdCAqIGZvciBjb250ZXh0LWxldmVsIHBhcmFtZXRlcnMgdXBkYXRlIG9mIHJ1bm5pbmcgY29udGV4dCwgaW5zdGVhZCBvZiBtYW51YWxcXG4xNTY4OlxcdCAqIGluLXBsYWNlIHVwZGF0ZXMuXFxuMTU2OTpcXHQgKlxcbjE1NzA6XFx0ICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGZyb20gcGFyYW1ldGVycy11cGRhdGUgc2FmZSBjb250ZXh0LCBsaWtlXFxuMTU3MTpcXHQgKiBkYW1vbl9jYWxsKCkuXFxuMTU3MjpcXHQgKi9cXG4xNTczOlxcdGludCBkYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxcbjE1NzQ6XFx0e1xcbjE1NzU6XFx0XFx0aW50IGVycjtcXG4xNTc2OlxcdFxcdHN0cnVjdCBkYW1vcyAqc2NoZW1lO1xcbjE1Nzc6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWw7XFxuMTU3ODpcXHRcXG4xNTc5OlxcdFxcdGRzdC1cXHUwMDNlbWF5YmVfY29ycnVwdGVkID0gdHJ1ZTtcXG4xNTgwOlxcdFxcdGlmICghaXNfcG93ZXJfb2ZfMihzcmMtXFx1MDAzZW1pbl9yZWdpb25fc3opKVxcbjE1ODE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTU4MjpcXHRcXG4xNTgzOlxcdFxcdC8qIG5vZGVfZWxpZ2libGVfbWVtX2JwIG1ldHJpYyByZXF1aXJlcyBQQUREUiBvcHMgKi9cXG4xNTg0OlxcdFxcdGlmIChzcmMtXFx1MDAzZW9wcy5pZCAhPSBEQU1PTl9PUFNfUEFERFIpIHtcXG4xNTg1OlxcdFxcdFxcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzY2hlbWUsIHNyYykge1xcbjE1ODY6XFx0XFx0XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFxcdTAwMjZzY2hlbWUtXFx1MDAzZXF1b3RhO1xcbjE1ODc6XFx0XFxuMTU4ODpcXHRcXHRcXHRcXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsKGdvYWwsIHF1b3RhKSB7XFxuMTU4OTpcXHRcXHRcXHRcXHRcXHRpZiAoZ29hbC1cXHUwMDNlbWV0cmljID09XFxuMTU5MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHREQU1PU19RVU9UQV9OT0RFX0VMSUdJQkxFX01FTV9CUClcXG4xNTkxOlxcdFxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE1OTI6XFx0XFx0XFx0XFx0fVxcbjE1OTM6XFx0XFx0XFx0fVxcbjE1OTQ6XFx0XFx0fVxcbjE1OTU6XFx0XFxuMTU5NjpcXHRcXHRlcnIgPSBkYW1vbl9jb21taXRfc2NoZW1lcyhkc3QsIHNyYyk7XFxuMTU5NzpcXHRcXHRpZiAoZXJyKVxcbjE1OTg6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xNTk5OlxcdFxcdGVyciA9IGRhbW9uX2NvbW1pdF90YXJnZXRzKGRzdCwgc3JjKTtcXG4xNjAwOlxcdFxcdGlmIChlcnIpXFxuMTYwMTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjE2MDI6XFx0XFx0LypcXG4xNjAzOlxcdFxcdCAqIHNjaGVtZXMgYW5kIHRhcmdldHMgc2hvdWxkIGJlIHVwZGF0ZWQgZmlyc3QsIHNpbmNlXFxuMTYwNDpcXHRcXHQgKiAxLiBkYW1vbl9zZXRfYXR0cnMoKSB1cGRhdGVzIG1vbml0b3JpbmcgcmVzdWx0cyBvZiB0YXJnZXRzIGFuZFxcbjE2MDU6XFx0XFx0ICogbmV4dF9hcHBseV9zaXMgb2Ygc2NoZW1lcywgYW5kXFxuMTYwNjpcXHRcXHQgKiAyLiBvcHMgdXBkYXRlIHNob3VsZCBiZSBkb25lIGFmdGVyIHBpZCBoYW5kbGluZyBpcyBkb25lICh0YXJnZXRcXG4xNjA3OlxcdFxcdCAqICAgIGNvbW1pdHRpbmcgcmVxdWlyZSBwdXR0aW5nIHBpZHMpLlxcbjE2MDg6XFx0XFx0ICovXFxuMTYwOTpcXHRcXHRpZiAoIWRhbW9uX2F0dHJzX2VxdWFscyhcXHUwMDI2ZHN0LVxcdTAwM2VhdHRycywgXFx1MDAyNnNyYy1cXHUwMDNlYXR0cnMpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAwOjAyOjA4Ljg2NzkzODg4MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDQ1OTg1MDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIGBkYW1vbl9jb21taXRfY3R4YCBhbmQgUG90ZW50aWFsIE93bmVyc2hpcCoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4uLiAqYGRhbW9uX2NvbW1pdF9jdHhgKiBpcyBjb3B5aW5nIHNjaGVtZXMgYW5kIHRhcmdldHMuIEhtbSwgdGhhdCdzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gY2xhcmlmeSB3aGV0aGVyIGl0J3MgdHJ1bHkgbWFraW5nIGNvcGllcyBvciBpZiBpdCBtaWdodCBiZSB0cmFuc2ZlcnJpbmcgb3duZXJzaGlwIG9mIHRoZSB1bmRlcmx5aW5nIGRhdGEuIFRoYXQncyBhIGNydWNpYWwgZGlzdGluY3Rpb24gZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwb3RlbnRpYWwgZGF0YSBjb3JydXB0aW9uIGlzc3VlcywgZXNwZWNpYWxseSBpbiBhIHN5c3RlbSBsaWtlIHRoaXMuXG5cbk9rYXksIG15IG5leHQgc3RlcCBpcyBjbGVhcjogSSd2ZSBnb3QgdG8gZGl2ZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgYGRhbW9uX2NvbW1pdF9zY2hlbWVzYCBhbmQgYGRhbW9uX2NvbW1pdF90YXJnZXRzYC4gVGhvc2UgYXJlIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdG8gY2hlY2sgbm93LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhleSdyZSBkb2luZyB3aXRoIHRob3NlIGNvcGllZCBzY2hlbWVzIGFuZCB0YXJnZXRzLiBBcmUgdGhleSBvcGVyYXRpbmcgb24gdGhlbSBkaXJlY3RseSwgcG90ZW50aWFsbHkgbW9kaWZ5aW5nIHNoYXJlZCBkYXRhPyBBcmUgdGhleSBjcmVhdGluZyBuZXcsIGluZGVwZW5kZW50IGNvcGllcz8gVGhlIGRldmlsIGlzIGRlZmluaXRlbHkgaW4gdGhlIGRldGFpbHMgaGVyZSwgc28gdGhlIGNvZGUgd2FsayBiZWdpbnMgbm93LiBMZXQncyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgdGhlIG1lbW9yeSBzZW1hbnRpY3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxMjksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAwOjAyOjEyLjMxMzkyNjE3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3Njg0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ0MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQ0MDpcXHRcXHRcXHRcXHRkYW1vbl9kZXN0cm95X3RhcmdldChkc3RfdGFyZ2V0LCBkc3QpO1xcbjE0NDE6XFx0XFx0XFx0XFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHMsIGRzdCkge1xcbjE0NDI6XFx0XFx0XFx0XFx0XFx0aWYgKHMtXFx1MDAzZXF1b3RhLmNoYXJnZV90YXJnZXRfZnJvbSA9PSBkc3RfdGFyZ2V0KSB7XFxuMTQ0MzpcXHRcXHRcXHRcXHRcXHRcXHRzLVxcdTAwM2VxdW90YS5jaGFyZ2VfdGFyZ2V0X2Zyb20gPSBOVUxMO1xcbjE0NDQ6XFx0XFx0XFx0XFx0XFx0XFx0cy1cXHUwMDNlcXVvdGEuY2hhcmdlX2FkZHJfZnJvbSA9IDA7XFxuMTQ0NTpcXHRcXHRcXHRcXHRcXHR9XFxuMTQ0NjpcXHRcXHRcXHRcXHR9XFxuMTQ0NzpcXHRcXHRcXHR9XFxuMTQ0ODpcXHRcXHR9XFxuMTQ0OTpcXHRcXG4xNDUwOlxcdFxcdGZhaWxlZCA9IE5VTEw7XFxuMTQ1MTpcXHRcXHRkYW1vbl9mb3JfZWFjaF90YXJnZXRfc2FmZShzcmNfdGFyZ2V0LCBuZXh0LCBzcmMpIHtcXG4xNDUyOlxcdFxcdFxcdGlmIChqKysgXFx1MDAzYyBpKVxcbjE0NTM6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTQ1NDpcXHRcXHRcXHQvKiB0YXJnZXQgdG8gcmVtb3ZlIGhhcyBubyBtYXRjaGluZyBkc3QgKi9cXG4xNDU1OlxcdFxcdFxcdGlmIChzcmNfdGFyZ2V0LVxcdTAwM2VvYnNvbGV0ZSkge1xcbjE0NTY6XFx0XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4xNDU3OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjE0NTg6XFx0XFx0XFx0fVxcbjE0NTk6XFx0XFx0XFx0bmV3X3RhcmdldCA9IGRhbW9uX25ld190YXJnZXQoKTtcXG4xNDYwOlxcdFxcdFxcdGlmICghbmV3X3RhcmdldCkge1xcbjE0NjE6XFx0XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4xNDYyOlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjE0NjM6XFx0XFx0XFx0fVxcbjE0NjQ6XFx0XFx0XFx0ZXJyID0gZGFtb25fY29tbWl0X3RhcmdldChuZXdfdGFyZ2V0LCBmYWxzZSxcXG4xNDY1OlxcdFxcdFxcdFxcdFxcdHNyY190YXJnZXQsIGRhbW9uX3RhcmdldF9oYXNfcGlkKHNyYyksXFxuMTQ2NjpcXHRcXHRcXHRcXHRcXHRzcmMtXFx1MDAzZW1pbl9yZWdpb25fc3opO1xcbjE0Njc6XFx0XFx0XFx0aWYgKGVycikge1xcbjE0Njg6XFx0XFx0XFx0XFx0ZGFtb25fZGVzdHJveV90YXJnZXQobmV3X3RhcmdldCwgTlVMTCk7XFxuMTQ2OTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4xNDcwOlxcdFxcdFxcdH1cXG4xNDcxOlxcdFxcdFxcdGRhbW9uX2FkZF90YXJnZXQoZHN0LCBuZXdfdGFyZ2V0KTtcXG4xNDcyOlxcdFxcdH1cXG4xNDczOlxcdFxcdHJldHVybiAwO1xcbjE0NzQ6XFx0XFxuMTQ3NTpcXHRvdXQ6XFxuMTQ3NjpcXHRcXHRkYW1vbl9yZXZlcnRfdGFyZ2V0X2NvbW1pdHMoZHN0LCBmYWlsZWQsIHNyYyk7XFxuMTQ3NzpcXHRcXHRyZXR1cm4gZXJyO1xcbjE0Nzg6XFx0fVxcbjE0Nzk6XFx0XFxuMTQ4MDpcXHRzdGF0aWMgdm9pZCBkYW1vbl9jb21taXRfZmlsdGVyKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmRzdCxcXG4xNDgxOlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9maWx0ZXIgKnNyYylcXG4xNDgyOlxcdHtcXG4xNDgzOlxcdFxcdGRzdC1cXHUwMDNldHlwZSA9IHNyYy1cXHUwMDNldHlwZTtcXG4xNDg0OlxcdFxcdGRzdC1cXHUwMDNlbWF0Y2hpbmcgPSBzcmMtXFx1MDAzZW1hdGNoaW5nO1xcbjE0ODU6XFx0XFx0ZHN0LVxcdTAwM2VhbGxvdyA9IHNyYy1cXHUwMDNlYWxsb3c7XFxuMTQ4NjpcXHRcXHRzd2l0Y2ggKGRzdC1cXHUwMDNldHlwZSkge1xcbjE0ODc6XFx0XFx0Y2FzZSBEQU1PTl9GSUxURVJfVFlQRV9NRU1DRzpcXG4xNDg4OlxcdFxcdFxcdGRzdC1cXHUwMDNlbWVtY2dfaWQgPSBzcmMtXFx1MDAzZW1lbWNnX2lkO1xcbjE0ODk6XFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAwOjAyOjEyLjMxNDIwNDU0MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTU0NjM3MzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgTWVtb3J5IExlYWtzIGluIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCBmdW5jdGlvbiBhbmQgdGhlIHdheSBpdCBoYW5kbGVzIGBwYXJhbV9jdHhgLiBNeSBpbml0aWFsIHVuZGVyc3RhbmRpbmcsIGJhc2VkIG9uIHRoZSBmdW5jdGlvbidzIHN0cnVjdHVyZSwgd2FzIHRoYXQgYGRhbW9uX2NvbW1pdF9jdHhgIGNyZWF0ZXMgbmV3IHRhcmdldHMgYW5kIGNvcGllcyBkYXRhLCBpbXBseWluZyBpdCAqZG9lc24ndCogdGFrZSBvd25lcnNoaXAgb2YgYHBhcmFtX2N0eGAuIFRoaXMgbWVhbnMgYHBhcmFtX2N0eGAgbmVlZHMgdG8gYmUgY2xlYW5lZCB1cCBhZnRlciB0aGUgY2FsbCwgcmVnYXJkbGVzcyBvZiBzdWNjZXNzIG9yIGZhaWx1cmUuIEJ1dCBJJ20gc2VlaW5nIHNvbWV0aGluZyB0aGF0J3MgbWFraW5nIG1lIHBhdXNlLlxuXG5Mb29raW5nIGF0IHRoZSBwYXRjaCBzbmlwcGV0IGFnYWluOiBJIGFtIG5vdyBub3RpY2luZyB0aGUgY29uZGl0aW9uYWwgcmV0dXJuOiBpZiBgZGFtb25fY29tbWl0X2N0eGAgKnN1Y2NlZWRzKiAoaS5lLiwgYGVycmAgaXMgMCwgdGh1cyBgIWVycmAgaXMgdHJ1ZSksIHRoZSBmdW5jdGlvbiByZXR1cm5zIGltbWVkaWF0ZWx5IHdpdGggYHJldHVybiAwO2AsICpieXBhc3NpbmcqIHRoZSBjYWxsIHRvIGBkYW1vbl9kZXN0cm95X2N0eChwYXJhbV9jdHgpYC5cblxuSXMgdGhpcyBhIHBvdGVudGlhbCBtZW1vcnkgbGVhaz8gSWYgYGRhbW9uX2NvbW1pdF9jdHhgICpjb3BpZXMqIGV2ZXJ5dGhpbmcgZnJvbSBgcGFyYW1fY3R4YCwgdGhlbiBgcGFyYW1fY3R4YCAqc2hvdWxkKiBiZSBkZXN0cm95ZWQuIElmLCBvbiB0aGUgb3RoZXIgaGFuZCwgYGRhbW9uX2NvbW1pdF9jdHhgICp0YWtlcyogb3duZXJzaGlwLCB0aGVuIGBwYXJhbV9jdHhgICpzaG91bGRuJ3QqIGJlIGRlc3Ryb3llZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggaXMgaGFwcGVuaW5nLiBJIHJlYWxseSBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgYmVoYXZpb3Igb2YgYGRhbW9uX2NvbW1pdF9jdHhgIGFuZCBtb3JlIGltcG9ydGFudGx5IGBkYW1vbl9kZXN0cm95X2N0eGAgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxMzksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMDowMjoxNy44Njg4NDUwNjlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzcyNDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NjA6XFx0XFx0ZGVmYXVsdDpcXG4gNDYxOlxcdFxcdFxcdGJyZWFrO1xcbiA0NjI6XFx0XFx0fVxcbiA0NjM6XFx0XFx0cmV0dXJuIHRydWU7XFxuIDQ2NDpcXHR9XFxuIDQ2NTpcXHRcXG4gNDY2OlxcdHZvaWQgZGFtb3NfYWRkX2ZpbHRlcihzdHJ1Y3QgZGFtb3MgKnMsIHN0cnVjdCBkYW1vc19maWx0ZXIgKmYpXFxuIDQ2NzpcXHR7XFxuIDQ2ODpcXHRcXHRpZiAoZGFtb3NfZmlsdGVyX2Zvcl9vcHMoZi1cXHUwMDNldHlwZSkpXFxuIDQ2OTpcXHRcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZmLVxcdTAwM2VsaXN0LCBcXHUwMDI2cy1cXHUwMDNlb3BzX2ZpbHRlcnMpO1xcbiA0NzA6XFx0XFx0ZWxzZVxcbiA0NzE6XFx0XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2Zi1cXHUwMDNlbGlzdCwgXFx1MDAyNnMtXFx1MDAzZWNvcmVfZmlsdGVycyk7XFxuIDQ3MjpcXHR9XFxuIDQ3MzpcXHRcXG4gNDc0OlxcdHN0YXRpYyB2b2lkIGRhbW9zX2RlbF9maWx0ZXIoc3RydWN0IGRhbW9zX2ZpbHRlciAqZilcXG4gNDc1OlxcdHtcXG4gNDc2OlxcdFxcdGxpc3RfZGVsKFxcdTAwMjZmLVxcdTAwM2VsaXN0KTtcXG4gNDc3OlxcdH1cXG4gNDc4OlxcdFxcbiA0Nzk6XFx0c3RhdGljIHZvaWQgZGFtb3NfZnJlZV9maWx0ZXIoc3RydWN0IGRhbW9zX2ZpbHRlciAqZilcXG4gNDgwOlxcdHtcXG4gNDgxOlxcdFxcdGtmcmVlKGYpO1xcbiA0ODI6XFx0fVxcbiA0ODM6XFx0XFxuIDQ4NDpcXHR2b2lkIGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKHN0cnVjdCBkYW1vc19maWx0ZXIgKmYpXFxuIDQ4NTpcXHR7XFxuIDQ4NjpcXHRcXHRkYW1vc19kZWxfZmlsdGVyKGYpO1xcbiA0ODc6XFx0XFx0ZGFtb3NfZnJlZV9maWx0ZXIoZik7XFxuIDQ4ODpcXHR9XFxuIDQ4OTpcXHRcXG4gNDkwOlxcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19uZXdfcXVvdGFfZ29hbChcXG4gNDkxOlxcdFxcdFxcdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljLFxcbiA0OTI6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyB0YXJnZXRfdmFsdWUpXFxuIDQ5MzpcXHR7XFxuIDQ5NDpcXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcXG4gNDk1OlxcdFxcbiA0OTY6XFx0XFx0Z29hbCA9IGttYWxsb2Nfb2JqKCpnb2FsKTtcXG4gNDk3OlxcdFxcdGlmICghZ29hbClcXG4gNDk4OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA0OTk6XFx0XFx0Z29hbC1cXHUwMDNlbWV0cmljID0gbWV0cmljO1xcbiA1MDA6XFx0XFx0Z29hbC1cXHUwMDNldGFyZ2V0X3ZhbHVlID0gdGFyZ2V0X3ZhbHVlO1xcbiA1MDE6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmdvYWwtXFx1MDAzZWxpc3QpO1xcbiA1MDI6XFx0XFx0cmV0dXJuIGdvYWw7XFxuIDUwMzpcXHR9XFxuIDUwNDpcXHRcXG4gNTA1OlxcdHZvaWQgZGFtb3NfYWRkX3F1b3RhX2dvYWwoc3RydWN0IGRhbW9zX3F1b3RhICpxLCBzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZylcXG4gNTA2OlxcdHtcXG4gNTA3OlxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmctXFx1MDAzZWxpc3QsIFxcdTAwMjZxLVxcdTAwM2Vnb2Fscyk7XFxuIDUwODpcXHR9XFxuIDUwOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMDA6MDI6MTcuODY5MjE5NTk5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNzI0NDM5NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXM6XG5cbioqQW5hbHl6aW5nIGBkYW1vbl9kZXN0cm95X2N0eGAqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciBkb3duIHRoaXMgcmFiYml0IGhvbGUsIEkgbmVlZCB0byB0YWtlIGEgc3RlcCBiYWNrIGFuZCBleGFtaW5lIHRoZSBjb3JlIG9mIHRoaXMuIFRoZSBmaXJzdCB0aGluZyB0aGF0IG5lZWRzIHRvIGhhcHBlbiBpcyBhIGRpcmVjdCBleGFtaW5hdGlvbiBvZiBgZGFtb25fZGVzdHJveV9jdHhgIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHN0cnVjdHVyZSwgaXRzIGRlcGVuZGVuY2llcywgd2hhdCBpdCdzIHN1cHBvc2VkIHRvIGRvLCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgKmhvdyogaXQncyBzdXBwb3NlZCB0byBkbyBpdC4gT25seSB0aGVuIGNhbiBJIHJlYXNvbmFibHkgdHJvdWJsZXNob290IGFueSBpc3N1ZXMuIEknbGwgc3RhcnQgd2l0aCBhIGNvZGUtbGV2ZWwgcmV2aWV3IG9mIHRoZSBmdW5jdGlvbi9vYmplY3QgZGVmaW5pdGlvbiB0byBhc3Nlc3MgaWYgaXQncyBvcGVyYXRpbmcgYXMgaW50ZW5kZWQuIEl0J3MgdGhlIG9ubHkgd2F5IHRvIGJlIGNvbmZpZGVudCB0aGF0IG90aGVyIGFzc29jaWF0ZWQgbG9naWMgaXMgbm90IHNpbXBseSBtYXNraW5nIGFuIGluaXRpYWwgcHJvYmxlbSB0aGF0IG5lZWRzIHRvIGJlIHNvbHZlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NjQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAwOjAyOjIwLjk0MTY2Njg4NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU0MTUzMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBkYW1vbl9kZXN0cm95X2N0eFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTczND1zdGF0aWMgdm9pZCBkYW1vbl9kZXN0cm95X3RhcmdldHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTc0MS1cXG5tbS9kYW1vbi9jb3JlLmM6NzQyOnZvaWQgZGFtb25fZGVzdHJveV9jdHgoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbm1tL2RhbW9uL2NvcmUuYy03NDMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMDowMjoyMC45OTcwOTM2MzVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk0MzA3MzkxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHdoYXQncyBnb2luZyBvbjpcblxuKipBbmFseXppbmcgdGhlIENvbnRleHQgb2YgXCJkYW1vbl9kZXN0cm95X2N0eFwiKipcblxuQWxyaWdodCwgSSdtIHN0YXJ0aW5nIHdpdGggYGRhbW9uX2Rlc3Ryb3lfY3R4YC4gSSBzZWUgdGhhdCBuYW1lIGFuZCBpbW1lZGlhdGVseSBzdGFydCB0byB0aGluayBhYm91dCB0aGUgcG9zc2libGUgaW1wbGljYXRpb25zLiBDb250ZXh0IGlzIGtleSwgc28gSSdtIHRyeWluZyB0byBtZW50YWxseSBtYXAgb3V0IHdoYXQgJ2RhbW9uJyBjb3VsZCByZXByZXNlbnQuIElzIGl0IGEgZGVtb24sIGEgZGF0YSBzdHJ1Y3R1cmUsIGEgcHJvY2VzcywgYSB1c2VyPyAnRGVzdHJveScgaW1wbGllcyBzb21lIGtpbmQgb2YgdGVybWluYXRpb24gb3IgY2xlYW51cCBvcGVyYXRpb24uIEFuZCAnY3R4Jy4uLiB0aGF0J3MgYWxtb3N0IGNlcnRhaW5seSBzaG9ydCBmb3IgY29udGV4dC4gTm93LCBjb250ZXh0IGNhbiBtZWFuIGEgbXVsdGl0dWRlIG9mIHRoaW5ncyBkZXBlbmRpbmcgb24gdGhlIHN5c3RlbSBhbmQgZG9tYWluLCByYW5naW5nIGZyb20gc2ltcGxlIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCB0byBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IG5lZWQgdG8gYmUgbWFuYWdlZC4gVGhlcmVmb3JlLCBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIGZ1bmN0aW9uJ3MgcHVycG9zZSBpcyB0byBjbGVhbmx5IGRpc3Bvc2Ugb2Ygb3IgbnVsbGlmeSB0aGUgJ2NvbnRleHQnIGFzc29jaWF0ZWQgd2l0aCB0aGlzICdkYW1vbicuIEknbGwgbmVlZCB0byBsb29rIGRlZXBlciBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiB0byBwaW5wb2ludCB0aGUgc3BlY2lmaWNzLCB0aGUgc2NvcGUsIHRoZSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLCBhbmQgb2YgY291cnNlLCB0aGUgZXJyb3IgaGFuZGxpbmcgaW52b2x2ZWQuIFRoaXMgY291bGQgYmUgYSBjcml0aWNhbCBwYXJ0IG9mIGEgbGFyZ2VyIHByb2Nlc3MsIGFuZCB1bmRlcnN0YW5kaW5nIGl0cyBmdW5jdGlvbiB0aG9yb3VnaGx5IGlzIHBhcmFtb3VudCBiZWZvcmUgbWFraW5nIGNoYW5nZXMgb3IgZXZlbiBpbnRlZ3JhdGluZyBpdCBpbnRvIGEgYnJvYWRlciBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzg3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMDA6MDI6MjMuOTQwMTcxMTA2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5OTcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzQwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzQwOlxcdH1cXG4gNzQxOlxcdFxcbiA3NDI6XFx0dm9pZCBkYW1vbl9kZXN0cm95X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuIDc0MzpcXHR7XFxuIDc0NDpcXHRcXHRzdHJ1Y3QgZGFtb3MgKnMsICpuZXh0X3M7XFxuIDc0NTpcXHRcXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnAsICpuZXh0X3A7XFxuIDc0NjpcXHRcXG4gNzQ3OlxcdFxcdGRhbW9uX2Rlc3Ryb3lfdGFyZ2V0cyhjdHgpO1xcbiA3NDg6XFx0XFxuIDc0OTpcXHRcXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWVfc2FmZShzLCBuZXh0X3MsIGN0eClcXG4gNzUwOlxcdFxcdFxcdGRhbW9uX2Rlc3Ryb3lfc2NoZW1lKHMpO1xcbiA3NTE6XFx0XFxuIDc1MjpcXHRcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZV9zYWZlKHAsIG5leHRfcCwgY3R4KVxcbiA3NTM6XFx0XFx0XFx0ZGFtb25fZGVzdHJveV9wcm9iZShwKTtcXG4gNzU0OlxcdFxcbiA3NTU6XFx0XFx0a2ZyZWUoY3R4KTtcXG4gNzU2OlxcdH1cXG4gNzU3OlxcdFxcbiA3NTg6XFx0c3RhdGljIGJvb2wgZGFtb25fYXR0cnNfZXF1YWxzKGNvbnN0IHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMxLFxcbiA3NTk6XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGRhbW9uX2F0dHJzICphdHRyczIpXFxuIDc2MDpcXHR7XFxuIDc2MTpcXHRcXHRjb25zdCBzdHJ1Y3QgZGFtb25faW50ZXJ2YWxzX2dvYWwgKmlnMSA9IFxcdTAwMjZhdHRyczEtXFx1MDAzZWludGVydmFsc19nb2FsO1xcbiA3NjI6XFx0XFx0Y29uc3Qgc3RydWN0IGRhbW9uX2ludGVydmFsc19nb2FsICppZzIgPSBcXHUwMDI2YXR0cnMyLVxcdTAwM2VpbnRlcnZhbHNfZ29hbDtcXG4gNzYzOlxcdFxcbiA3NjQ6XFx0XFx0cmV0dXJuIGF0dHJzMS1cXHUwMDNlc2FtcGxlX2ludGVydmFsID09IGF0dHJzMi1cXHUwMDNlc2FtcGxlX2ludGVydmFsIFxcdTAwMjZcXHUwMDI2XFxuIDc2NTpcXHRcXHRcXHRhdHRyczEtXFx1MDAzZWFnZ3JfaW50ZXJ2YWwgPT0gYXR0cnMyLVxcdTAwM2VhZ2dyX2ludGVydmFsIFxcdTAwMjZcXHUwMDI2XFxuIDc2NjpcXHRcXHRcXHRhdHRyczEtXFx1MDAzZW9wc191cGRhdGVfaW50ZXJ2YWwgPT0gYXR0cnMyLVxcdTAwM2VvcHNfdXBkYXRlX2ludGVydmFsIFxcdTAwMjZcXHUwMDI2XFxuIDc2NzpcXHRcXHRcXHRhdHRyczEtXFx1MDAzZW1pbl9ucl9yZWdpb25zID09IGF0dHJzMi1cXHUwMDNlbWluX25yX3JlZ2lvbnMgXFx1MDAyNlxcdTAwMjZcXG4gNzY4OlxcdFxcdFxcdGF0dHJzMS1cXHUwMDNlbWF4X25yX3JlZ2lvbnMgPT0gYXR0cnMyLVxcdTAwM2VtYXhfbnJfcmVnaW9ucyBcXHUwMDI2XFx1MDAyNlxcbiA3Njk6XFx0XFx0XFx0aWcxLVxcdTAwM2VhY2Nlc3NfYnAgPT0gaWcyLVxcdTAwM2VhY2Nlc3NfYnAgXFx1MDAyNlxcdTAwMjZcXG4gNzcwOlxcdFxcdFxcdGlnMS1cXHUwMDNlYWdncnMgPT0gaWcyLVxcdTAwM2VhZ2dycyBcXHUwMDI2XFx1MDAyNlxcbiA3NzE6XFx0XFx0XFx0aWcxLVxcdTAwM2VtaW5fc2FtcGxlX3VzID09IGlnMi1cXHUwMDNlbWluX3NhbXBsZV91cyBcXHUwMDI2XFx1MDAyNlxcbiA3NzI6XFx0XFx0XFx0aWcxLVxcdTAwM2VtYXhfc2FtcGxlX3VzID09IGlnMi1cXHUwMDNlbWF4X3NhbXBsZV91cztcXG4gNzczOlxcdH1cXG4gNzc0OlxcdFxcbiA3NzU6XFx0c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9hZ2VfZm9yX25ld19hdHRycyh1bnNpZ25lZCBpbnQgYWdlLFxcbiA3NzY6XFx0XFx0XFx0c3RydWN0IGRhbW9uX2F0dHJzICpvbGRfYXR0cnMsIHN0cnVjdCBkYW1vbl9hdHRycyAqbmV3X2F0dHJzKVxcbiA3Nzc6XFx0e1xcbiA3Nzg6XFx0XFx0cmV0dXJuIGFnZSAqIG9sZF9hdHRycy1cXHUwMDNlYWdncl9pbnRlcnZhbCAvIG5ld19hdHRycy1cXHUwMDNlYWdncl9pbnRlcnZhbDtcXG4gNzc5OlxcdH1cXG4gNzgwOlxcdFxcbiA3ODE6XFx0LyogY29udmVydCBhY2Nlc3MgcmF0aW8gaW4gYnAgKHBlciAxMCwwMDApIHRvIG5yX2FjY2Vzc2VzICovXFxuIDc4MjpcXHRzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX2FjY2Vzc2VzX2JwX3RvX25yX2FjY2Vzc2VzKFxcbiA3ODM6XFx0XFx0XFx0dW5zaWduZWQgaW50IGFjY2Vzc2VzX2JwLCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxcbiA3ODQ6XFx0e1xcbiA3ODU6XFx0XFx0cmV0dXJuIGFjY2Vzc2VzX2JwICogZGFtb25fbWF4X25yX2FjY2Vzc2VzKGF0dHJzKSAvIDEwMDAwO1xcbiA3ODY6XFx0fVxcbiA3ODc6XFx0XFxuIDc4ODpcXHQvKlxcbiA3ODk6XFx0ICogQ29udmVydCBucl9hY2Nlc3NlcyB0byBhY2Nlc3MgcmF0aW8gaW4gYnAgKHBlciAxMCwwMDApLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMDowMjoyMy45NDAzNzI0OTVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjcwNDA2Mjc3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBgZGFtb25fY29tbWl0X2N0eGAgQmVoYXZpb3IqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gYGRhbW9uX2NvbW1pdF9jdHhgIGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgbGlrZWx5IGludm9sdmVkIGluIGNvcHlpbmcgc2NoZW1lcyBhbmQgdGFyZ2V0cy4gVGhhdCdzIGEgY29tbW9uIHBhdHRlcm4gaW4gdGhpcyBraW5kIG9mIGNvbnRleHQuIExldCdzIG5vdCBtYWtlIGFueSBhc3N1bXB0aW9ucyB0aG91Z2gsIGl0J3MgYWx3YXlzIGJlc3QgdG8gYmUgcHJlY2lzZS4gVG8gY29uZmlybSB0aGlzLCBJIG5lZWQgdG8gbG9vayBkaXJlY3RseSBhdCBob3cgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgc2NoZW1lcy4gVGhlIGtleSBwbGFjZSB0byBzdGFydCBsb29raW5nIGlzIGBkYW1vbl9jb21taXRfc2NoZW1lc2AuIFRoYXQgc2hvdWxkIHRlbGwgdGhlIHdob2xlIHN0b3J5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk0NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMDA6MDI6MjYuNjQ0NDM4OTIyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4Njc5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTMzMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTMzMDpcXHRzdGF0aWMgc3RydWN0IGRhbW9uX3RhcmdldCAqZGFtb25fbnRoX3RhcmdldChpbnQgbiwgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbjEzMzE6XFx0e1xcbjEzMzI6XFx0XFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcXG4xMzMzOlxcdFxcdGludCBpID0gMDtcXG4xMzM0OlxcdFxcbjEzMzU6XFx0XFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGN0eCkge1xcbjEzMzY6XFx0XFx0XFx0aWYgKGkrKyA9PSBuKVxcbjEzMzc6XFx0XFx0XFx0XFx0cmV0dXJuIHQ7XFxuMTMzODpcXHRcXHR9XFxuMTMzOTpcXHRcXHRyZXR1cm4gTlVMTDtcXG4xMzQwOlxcdH1cXG4xMzQxOlxcdFxcbjEzNDI6XFx0LypcXG4xMzQzOlxcdCAqIFRoZSBjYWxsZXIgc2hvdWxkIGVuc3VyZSB0aGUgcmVnaW9ucyBvZiBAc3JjIGFyZVxcbjEzNDQ6XFx0ICogMS4gdmFsaWQgKGVuZCBcXHUwMDNlPSBzcmMpIGFuZFxcbjEzNDU6XFx0ICogMi4gc29ydGVkIGJ5IHN0YXJ0aW5nIGFkZHJlc3MuXFxuMTM0NjpcXHQgKlxcbjEzNDc6XFx0ICogSWYgQHNyYyBoYXMgbm8gcmVnaW9uLCBAZHN0IGtlZXBzIGN1cnJlbnQgcmVnaW9ucy5cXG4xMzQ4OlxcdCAqL1xcbjEzNDk6XFx0c3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqZHN0LFxcbjEzNTA6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3RhcmdldCAqc3JjLCB1bnNpZ25lZCBsb25nIHNyY19taW5fcmVnaW9uX3N6KVxcbjEzNTE6XFx0e1xcbjEzNTI6XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqc3JjX3JlZ2lvbjtcXG4xMzUzOlxcdFxcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXM7XFxuMTM1NDpcXHRcXHRpbnQgaSA9IDAsIGVycjtcXG4xMzU1OlxcdFxcbjEzNTY6XFx0XFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHNyY19yZWdpb24sIHNyYylcXG4xMzU3OlxcdFxcdFxcdGkrKztcXG4xMzU4OlxcdFxcdGlmICghaSlcXG4xMzU5OlxcdFxcdFxcdHJldHVybiAwO1xcbjEzNjA6XFx0XFxuMTM2MTpcXHRcXHRyYW5nZXMgPSBrbWFsbG9jX29ianMoKnJhbmdlcywgaSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTik7XFxuMTM2MjpcXHRcXHRpZiAoIXJhbmdlcylcXG4xMzYzOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjEzNjQ6XFx0XFx0aSA9IDA7XFxuMTM2NTpcXHRcXHRkYW1vbl9mb3JfZWFjaF9yZWdpb24oc3JjX3JlZ2lvbiwgc3JjKVxcbjEzNjY6XFx0XFx0XFx0cmFuZ2VzW2krK10gPSBzcmNfcmVnaW9uLVxcdTAwM2VhcjtcXG4xMzY3OlxcdFxcdGVyciA9IGRhbW9uX3NldF9yZWdpb25zKGRzdCwgcmFuZ2VzLCBpLCBzcmNfbWluX3JlZ2lvbl9zeik7XFxuMTM2ODpcXHRcXHRrZnJlZShyYW5nZXMpO1xcbjEzNjk6XFx0XFx0cmV0dXJuIGVycjtcXG4xMzcwOlxcdH1cXG4xMzcxOlxcdFxcbjEzNzI6XFx0c3RhdGljIGludCBkYW1vbl9jb21taXRfdGFyZ2V0KFxcbjEzNzM6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3RhcmdldCAqZHN0LCBib29sIGRzdF9oYXNfcGlkLFxcbjEzNzQ6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3RhcmdldCAqc3JjLCBib29sIHNyY19oYXNfcGlkLFxcbjEzNzU6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBzcmNfbWluX3JlZ2lvbl9zeilcXG4xMzc2OlxcdHtcXG4xMzc3OlxcdFxcdGludCBlcnI7XFxuMTM3ODpcXHRcXG4xMzc5OlxcdFxcdGVyciA9IGRhbW9uX2NvbW1pdF90YXJnZXRfcmVnaW9ucyhkc3QsIHNyYywgc3JjX21pbl9yZWdpb25fc3opO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMDowMjoyNi42NDQ2Mjc2NjJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQwNDEwMjYxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQganVzdCBoYXBwZW5lZDpcblxuKipEYW1vbiBDb250ZXh0IE1lbW9yeSBMZWFrIFN1c3BlY3RlZCoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEknbSBsb29raW5nIGF0IGhvdyBgZGFtb25fY29tbWl0X2N0eGAgaXMgYmVoYXZpbmcgaGVyZS4gSXQgbG9va3MgbGlrZSBpdCdzIGNvcHlpbmcgZGF0YSBmcm9tIGBwYXJhbV9jdHhgIHRvIGBjdHhgLiBUaGUgY3J1Y2lhbCB0aGluZyBJJ20gZm9jdXNpbmcgb24gaXMgd2hldGhlciBpdCdzIHRyYW5zZmVycmluZyBvd25lcnNoaXAgb2YgdGhlIG1lbW9yeS4gSWYgaXQgKmRvZXNuJ3QqIHRha2Ugb3duZXJzaGlwLCBhbmQgaWYgYHBhcmFtX2N0eGAgaXNuJ3QgcHJvcGVybHkgZGVzdHJveWVkIGFmdGVyd2FyZHMsIHdlJ3JlIGdvaW5nIHRvIGhhdmUgYSBjbGFzc2ljIG1lbW9yeSBsZWFrLiBJdCdzIGEgdGV4dGJvb2sgc2l0dWF0aW9uISBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgcGFyYW1fY3R4YCBpcyBoYW5kbGVkIGFmdGVyIHRoaXMgY29weS4gUmlnaHQgbm93LCBJJ20gbGVhbmluZyB0b3dhcmQgdGhpbmtpbmcgaXQncyBub3QgYmVpbmcgZnJlZWQsIGFuZCB3ZSdyZSBsZWFraW5nLlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIGBkYW1vbl9zeXNmc19jb21taXRfaW5wdXRgIGluIGBtbS9kYW1vbi9zeXNmcy5jYC4gVGhhdCBzaG91bGQgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoaXMuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIGNvbmZpcm0gdGhpcyBzdXNwZWN0ZWQgb3ZlcnNpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzg4OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMDA6MDI6MzAuMDQ4NzMzNzgxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9zeXNmcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxMTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIxMTA6XFx0XFxuMjExMTpcXHRcXHRwYXJhbV9jdHggPSBkYW1vbl9zeXNmc19idWlsZF9jdHgoa2RhbW9uZC1cXHUwMDNlY29udGV4dHMtXFx1MDAzZWNvbnRleHRzX2FyclswXSk7XFxuMjExMjpcXHRcXHRpZiAoSVNfRVJSKHBhcmFtX2N0eCkpXFxuMjExMzpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihwYXJhbV9jdHgpO1xcbjIxMTQ6XFx0XFx0dGVzdF9jdHggPSBkYW1vbl9zeXNmc19uZXdfdGVzdF9jdHgoa2RhbW9uZC1cXHUwMDNlZGFtb25fY3R4KTtcXG4yMTE1OlxcdFxcdGlmICghdGVzdF9jdHgpIHtcXG4yMTE2OlxcdFxcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KHBhcmFtX2N0eCk7XFxuMjExNzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4yMTE4OlxcdFxcdH1cXG4yMTE5OlxcdFxcdGVyciA9IGRhbW9uX2NvbW1pdF9jdHgodGVzdF9jdHgsIHBhcmFtX2N0eCk7XFxuMjEyMDpcXHRcXHRpZiAoZXJyKVxcbjIxMjE6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjEyMjpcXHRcXHRlcnIgPSBkYW1vbl9jb21taXRfY3R4KGtkYW1vbmQtXFx1MDAzZWRhbW9uX2N0eCwgcGFyYW1fY3R4KTtcXG4yMTIzOlxcdG91dDpcXG4yMTI0OlxcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KHRlc3RfY3R4KTtcXG4yMTI1OlxcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KHBhcmFtX2N0eCk7XFxuMjEyNjpcXHRcXHRyZXR1cm4gZXJyO1xcbjIxMjc6XFx0fVxcbjIxMjg6XFx0XFxuMjEyOTpcXHRzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2NvbW1pdF9zY2hlbWVzX3F1b3RhX2dvYWxzKHZvaWQgKmRhdGEpXFxuMjEzMDpcXHR7XFxuMjEzMTpcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqc3lzZnNfa2RhbW9uZCA9IGRhdGE7XFxuMjEzMjpcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7XFxuMjEzMzpcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfY29udGV4dCAqc3lzZnNfY3R4O1xcbjIxMzQ6XFx0XFxuMjEzNTpcXHRcXHRpZiAoIWRhbW9uX3N5c2ZzX2tkYW1vbmRfcnVubmluZyhzeXNmc19rZGFtb25kKSlcXG4yMTM2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjIxMzc6XFx0XFx0LyogVE9ETzogU3VwcG9ydCBtdWx0aXBsZSBjb250ZXh0cyBwZXIga2RhbW9uZCAqL1xcbjIxMzg6XFx0XFx0aWYgKHN5c2ZzX2tkYW1vbmQtXFx1MDAzZWNvbnRleHRzLVxcdTAwM2VuciAhPSAxKVxcbjIxMzk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjE0MDpcXHRcXG4yMTQxOlxcdFxcdGN0eCA9IHN5c2ZzX2tkYW1vbmQtXFx1MDAzZWRhbW9uX2N0eDtcXG4yMTQyOlxcdFxcdHN5c2ZzX2N0eCA9IHN5c2ZzX2tkYW1vbmQtXFx1MDAzZWNvbnRleHRzLVxcdTAwM2Vjb250ZXh0c19hcnJbMF07XFxuMjE0MzpcXHRcXHRyZXR1cm4gZGFtb3Nfc3lzZnNfc2V0X3F1b3RhX3Njb3JlcyhzeXNmc19jdHgtXFx1MDAzZXNjaGVtZXMsIGN0eCk7XFxuMjE0NDpcXHR9XFxuMjE0NTpcXHRcXG4yMTQ2OlxcdC8qXFxuMjE0NzpcXHQgKiBkYW1vbl9zeXNmc191cGRfc2NoZW1lc19lZmZlY3RpdmVfcXVvdGFzKCkgLSBVcGRhdGUgc2NoZW1lcyBlZmZlY3RpdmUgcXVvdGFzXFxuMjE0ODpcXHQgKiBzeXNmcyBmaWxlcy5cXG4yMTQ5OlxcdCAqIEBkYXRhOlxcdFRoZSBrb2JqZWN0IHdyYXBwZXIgdGhhdCBhc3NvY2lhdGVkIHRvIHRoZSBrZGFtb25kIHRocmVhZC5cXG4yMTUwOlxcdCAqXFxuMjE1MTpcXHQgKiBUaGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSBzY2hlbWVzJyBlZmZlY3RpdmUgcXVvdGFzIG9mIHNwZWNpZmljIGtkYW1vbmQgYW5kXFxuMjE1MjpcXHQgKiB1cGRhdGUgdGhlIHJlbGF0ZWQgdmFsdWVzIGZvciBzeXNmcyBmaWxlcy4gIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZFxcbjIxNTM6XFx0ICogZnJvbSBEQU1PTiBjYWxsYmFja3Mgd2hpbGUgaG9sZGluZyBgYGRhbW9uX3N5ZnNfbG9ja2BgLCB0byBzYWZlbHkgYWNjZXNzIHRoZVxcbjIxNTQ6XFx0ICogREFNT04gY29udGV4dHMtaW50ZXJuYWwgZGF0YSBhbmQgREFNT04gc3lzZnMgdmFyaWFibGVzLlxcbjIxNTU6XFx0ICovXFxuMjE1NjpcXHRzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3VwZF9zY2hlbWVzX2VmZmVjdGl2ZV9xdW90YXModm9pZCAqZGF0YSlcXG4yMTU3OlxcdHtcXG4yMTU4OlxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kID0gZGF0YTtcXG4yMTU5OlxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCA9IGtkYW1vbmQtXFx1MDAzZWRhbW9uX2N0eDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMDA6MDI6MzAuMDQ4OTEwMjAxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMzMxNTkwMDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBNZW1vcnkgTGVhayBpbiBEQU1PTiBSZWNsYW1hdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSByZWxhdGVkIHRvIERBTU9OJ3MgcmVjbGFtYXRpb24gbWVjaGFuaXNtLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpbiBgZGFtb25fc3lzZnNfY29tbWl0X2lucHV0YCwgYGRhbW9uX2Rlc3Ryb3lfY3R4KHBhcmFtX2N0eClgIGlzIGFsd2F5cyBjYWxsZWQgYXQgdGhlIGVuZCwgcmVnYXJkbGVzcyBvZiB0aGUgc3VjY2VzcyBvZiBgZGFtb25fY29tbWl0X2N0eGAuIE5vdywgSSdtIGV4YW1pbmluZyBhIHNwZWNpZmljIHBhdGNoIHdpdGhpbiBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYC4gSSBzZWUgdGhhdCB0aGUgY29kZSBhdHRlbXB0cyB0byBjb21taXQgYSBjb250ZXh0LCBidXQgdGhlbiB0aGVyZSdzIGFuIGBpZiAoIWVycikgcmV0dXJuIDA7YCBzdGF0ZW1lbnQgKmJlZm9yZSogdGhlIGNhbGwgdG8gYGRhbW9uX2Rlc3Ryb3lfY3R4KHBhcmFtX2N0eClgLlxuXG5NeSBjb25jZXJuIGltbWVkaWF0ZWx5IGlzLCBcIldhaXQsIGlmIGBkYW1vbl9jb21taXRfY3R4YCBzdWNjZWVkcyAobWVhbmluZyBgZXJyYCBpcyB6ZXJvKSwgd2UgKnNraXAqIGRlc3Ryb3lpbmcgYHBhcmFtX2N0eGA/IFRoYXQncyBhIG1lbW9yeSBsZWFrIVwiIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhpcywgc28gSSByZS1yZWFkIHRoYXQgc2VjdGlvbiBvZiB0aGUgcGF0Y2gsIGFuZCB5ZXMsIGl0J3MgY2xlYXI6IGlmIG5vIGVycm9yLCB3ZSBzaG9ydC1jaXJjdWl0IHRoZSBmdW5jdGlvbiBhbmQgcmV0dXJuIHdpdGhvdXQgZnJlZWluZyB0aGUgbWVtb3J5LlxuXG5Ob3cgSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgZGVzaWduLiBXaHkgd291bGRuJ3Qgd2Ugd2FudCB0byBkZXN0cm95IHRoZSBjb250ZXh0ICpldmVyeSogdGltZT8gRG9lcyBgZGFtb25fY29tbWl0X2N0eGAgbWF5YmUgdGFrZSBvd25lcnNoaXAgb2YgdGhlIGNvbnRleHQgaW4gc29tZSBjaXJjdW1zdGFuY2VzPyBObywgdGhhdCdzIG5vdCByaWdodCwgYmVjYXVzZSBgZGFtb25fc3lzZnNfY29tbWl0X2lucHV0YCBoYW5kbGVzIGl0cyBkZXN0cnVjdGlvbi5cblxuT2theSwgbGV0J3MgbG9vayBhdCBgZGFtb25fcmVjbGFpbV9pbml0YCBiZWNhdXNlIGl0IGhhcyB0aGUgY29udGV4dCBpbml0aWFsaXphdGlvbi4gSSBzZWUgdGhhdCB0aGVyZSdzIGEgc2FmZXR5IG5ldCB3aGVyZSBgY3R4YCBpcyBkZXN0cm95ZWQgaWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyBpbml0aWFsaXphdGlvbi4gSSdtIHN0YXJ0aW5nIHRvIHRoaW5rLCBpcyB0aGlzIHBhdGNoIGFjdHVhbGx5IGludHJvZHVjaW5nIGEgbGVhaz9cblxuVGhlIGNvbW1pdCBtZXNzYWdlIGlzIHRoZSBuZXh0IHRoaW5nIEkgbmVlZCB0byBjaGVjay4gT2theSwgaXQgc2F5cyBcInN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldy5cIiBXYWl0LCB0aGUgY29tbWl0IG1lc3NhZ2UgaW4gYGRhbW9uX3JlY2xhaW1faW5pdGAgc2F5cyBcIlByZXZlbnQgcG90ZW50aWFsIG1lbW9yeSBsZWFrYWdlLlwiIEJ1dCB0aGlzIHBhdGNoJ3MgYWRkZWQgY29uZGl0aW9uYWwgc3RhdGVtZW50IGluIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgIGlzIGV4YWN0bHkgdGhlIG9wcG9zaXRlOiBpdCBhZGRzIGFuIGVhcmx5IHJldHVybiB0aGF0IHNraXBzIHRoZSBjbGVhbnVwLiBTbywgaWYgYGRhbW9uX2NvbW1pdF9jdHhgIHJldHVybnMgYW4gZXJyb3IsIHdlIGNvcnJlY3RseSBkZXN0cm95IGBwYXJhbV9jdHhgLCBidXQgaWYgaXQgc3VjY2VlZHMsIHdlIGxlYWsgaXQuXG5cblNvLCAqdGhpcyBpcyBhYnNvbHV0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UuKiBUaGUgY29udHJvbCBmbG93IGlzIGRpZmZlcmVudCBkZXBlbmRpbmcgb24gd2hldGhlciBgZGFtb25fY29tbWl0X2N0eGAgc3VjY2VlZHMuIEkganVzdCBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgc2VjdGlvbiBvZiBjb2RlIGlzIHJlYWNoYWJsZS4gT2theSwgYGRhbW9uX3JlY2xhaW1faW5pdGAgaXMgYSBtb2R1bGUgaW5pdCBmdW5jdGlvbiwgc28gaXQncyBvYnZpb3VzbHkgcmVhY2hhYmxlLCBhbmQgYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AgaXMgcmVhY2hhYmxlIGJlY2F1c2UgaXQncyBjYWxsZWQgZnJvbSBgZGFtb25fcmVjbGFpbV9pbml0YCB2aWEgYGRhbW9uX3JlY2xhaW1fdHVybih0cnVlKWAuIE5vdywgSSBuZWVkIHRvIGNoZWNrIGBkYW1vbl9yZWNsYWltX2luaXRgIHRvIHNlZSBob3cgYGRhbW9uX3JlY2xhaW1fdHVybmAgaXMgY2FsbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTExMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAwOjAyOjQwLjM4MDUwNDA0N1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9yZWNsYWltLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDYwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDYwOlxcdCAqL1xcbiA0NjE6XFx0bW9kdWxlX3BhcmFtX2NiKGtkYW1vbmRfcGlkLCBcXHUwMDI2a2RhbW9uZF9waWRfcGFyYW1fb3BzLCBOVUxMLCAwNDAwKTtcXG4gNDYyOlxcdFxcbiA0NjM6XFx0c3RhdGljIGludCBfX2luaXQgZGFtb25fcmVjbGFpbV9pbml0KHZvaWQpXFxuIDQ2NDpcXHR7XFxuIDQ2NTpcXHRcXHRpbnQgZXJyO1xcbiA0NjY6XFx0XFxuIDQ2NzpcXHRcXHRpZiAoIWRhbW9uX2luaXRpYWxpemVkKCkpIHtcXG4gNDY4OlxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuIDQ2OTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gNDcwOlxcdFxcdH1cXG4gNDcxOlxcdFxcdGVyciA9IGRhbW9uX21vZHVsZXNfbmV3X3BhZGRyX2N0eF90YXJnZXQoXFx1MDAyNmN0eCwgXFx1MDAyNnRhcmdldCk7XFxuIDQ3MjpcXHRcXHRpZiAoZXJyKVxcbiA0NzM6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDQ3NDpcXHRcXG4gNDc1OlxcdFxcdGNhbGxfY29udHJvbC5kYXRhID0gY3R4O1xcbiA0NzY6XFx0XFxuIDQ3NzpcXHRcXHQvKiAnZW5hYmxlZCcgaGFzIHNldCBiZWZvcmUgdGhpcyBmdW5jdGlvbiwgcHJvYmFibHkgdmlhIGNvbW1hbmQgbGluZSAqL1xcbiA0Nzg6XFx0XFx0aWYgKGVuYWJsZWQpXFxuIDQ3OTpcXHRcXHRcXHRlcnIgPSBkYW1vbl9yZWNsYWltX3R1cm4odHJ1ZSk7XFxuIDQ4MDpcXHRcXG4gNDgxOlxcdG91dDpcXG4gNDgyOlxcdFxcdGlmIChlcnIgXFx1MDAyNlxcdTAwMjYgZW5hYmxlZClcXG4gNDgzOlxcdFxcdFxcdGVuYWJsZWQgPSBmYWxzZTtcXG4gNDg0OlxcdFxcbiA0ODU6XFx0XFx0LyogUHJldmVudCBwb3RlbmlhbCBtZW1vcnkgbGVha2FnZSAqL1xcbiA0ODY6XFx0XFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNiBjdHgpXFxuIDQ4NzpcXHRcXHRcXHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xcbiA0ODg6XFx0XFx0cmV0dXJuIGVycjtcXG4gNDg5OlxcdH1cXG4gNDkwOlxcdFxcbiA0OTE6XFx0bW9kdWxlX2luaXQoZGFtb25fcmVjbGFpbV9pbml0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMDA6MDI6NDAuMzgwNTk5NjE3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMzY1MTEzOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBEQU1PTiBSZWNsYWltIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgZGFtb25fcmVjbGFpbV9pbml0YCBraWNrcyBvZmYgdGhlIHByb2Nlc3MgYnkgY2FsbGluZyBgZGFtb25fcmVjbGFpbV90dXJuKHRydWUpYCAqb25seSogaWYgdGhlIG1vZHVsZSBwYXJhbWV0ZXIgYGVuYWJsZWRgIGlzIHNldCB0byB0cnVlLiAgVGhhdCBtYWtlcyBzZW5zZS4gSXQncyBhIGNsZWFuIHdheSB0byBjb250cm9sIHRoZSBiZWhhdmlvciBhdCBsb2FkIHRpbWUuIElmIEkgbG9hZCB0aGUgbW9kdWxlIHdpdGggYGVuYWJsZWQ9WWAsIHRoZW4gaXQgY2FsbHMgYGRhbW9uX3JlY2xhaW1fdHVybih0cnVlKWAgd2hpY2ggdGhlbiBjb3JyZWN0bHkgbGVhZHMgaW50byBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKClgLiAgRXhjZWxsZW50LCB0aGUgZmxvdyBpcyByZWFjaGFibGUgYW5kIHNlZW1zIHRvIGJlIHdvcmtpbmcgYXMgZXhwZWN0ZWQuXG5cbk5vdywgbGV0IG1lIGp1c3QgY29uZmlybSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGFyZSBpbiBwbGFjZS4gSSBuZWVkIHRvIGVuc3VyZSBgQ09ORklHX0RBTU9OYCBpcyBlbmFibGVkLCBhbmQgb2J2aW91c2x5LCBgQ09ORklHX0RBTU9OX1JFQ0xBSU1gLlxuXG5Ib2xkIG9uIGEgc2Vjb25k4oCmIGlzbid0IGBEQU1PTl9SRUNMQUlNYCBkZXBlbmRlbnQgb24gYERBTU9OX1BBRERSYD8gSSdkIGJldHRlciBkb3VibGUtY2hlY2sgdGhlIGBtbS9kYW1vbi9LY29uZmlnYCBmaWxlIHRvIGJlIGNvbXBsZXRlbHkgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMgd2l0aCB0aGUgY29uZmlndXJhdGlvbiBzZXR1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcwMDIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMDowMjo0NC41MTcxMTU1NTlaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MDpcXHRcXHRoZWxwXFxuICA4MTpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgS3VuaXQgdGVzdCBzdWl0ZS5cXG4gIDgyOlxcdFxcbiAgODM6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcXG4gIDg0OlxcdFxcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXFxuICA4NTpcXHRcXG4gIDg2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDg3OlxcdFxcbiAgODg6XFx0Y29uZmlnIERBTU9OX1JFQ0xBSU1cXG4gIDg5OlxcdFxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXFxcIlxcbiAgOTA6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxcbiAgOTE6XFx0XFx0aGVscFxcbiAgOTI6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgcmVjbGFtYXRpb24gc3Vic3lzdGVtLiAgSXQgZmluZHMgcGFnZXNcXG4gIDkzOlxcdFxcdCAgdGhhdCBub3QgYWNjZXNzZWQgZm9yIGEgbG9uZyB0aW1lIChjb2xkKSB1c2luZyBEQU1PTiBhbmQgcmVjbGFpbVxcbiAgOTQ6XFx0XFx0ICB0aG9zZS5cXG4gIDk1OlxcdFxcbiAgOTY6XFx0XFx0ICBUaGlzIGlzIHN1Z2dlc3RlZCB0byBiZSB1c2VkIGFzIGEgcHJvYWN0aXZlIGFuZCBsaWdodHdlaWdodFxcbiAgOTc6XFx0XFx0ICByZWNsYW1hdGlvbiB1bmRlciBsaWdodCBtZW1vcnkgcHJlc3N1cmUsIHdoaWxlIHRoZSB0cmFkaXRpb25hbCBwYWdlXFxuICA5ODpcXHRcXHQgIHNjYW5uaW5nLWJhc2VkIHJlY2xhbWF0aW9uIGlzIHVzZWQgZm9yIGhlYXZ5IHByZXNzdXJlLlxcbiAgOTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAwOjAyOjQ0LjUxNzIwMDk0OVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzEzNTczNjI0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRlcGVuZGVuY3kgQW5hbHlzaXMgYW5kIENvbmZpZ3VyYXRpb24gTG9naWMqKlxuXG5SaWdodCwgc28gaXQgbG9va3MgbGlrZSBgREFNT05fUkVDTEFJTWAgaXMgYnVpbHQgb24gdG9wIG9mIGBEQU1PTl9QQUREUmAsIGFuZCBgREFNT05fUEFERFJgIGl0c2VsZiBpcyByZWxpYW50IG9uIGBEQU1PTmAuIFRoaXMgaXMgcHJldHR5IHN0YW5kYXJkIHN0dWZmIOKAkyBhIGNsZWFyIGhpZXJhcmNoeSBvZiBkZXBlbmRlbmNpZXMuIFRoZXJlZm9yZSwgaW4gb3JkZXIgdG8gZ2V0IHRoZSBmdWxsIGZ1bmN0aW9uYWxpdHksIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBlbmFibGUgYWxsIHRocmVlOiBgREFNT05gLCBgREFNT05fUEFERFJgLCBhbmQgYERBTU9OX1JFQ0xBSU1gLiBJdCdzIHRoZSBvbmx5IGxvZ2ljYWwgYXBwcm9hY2ggdG8gZW5zdXJlIHRoZSBjb3JyZWN0IG9wZXJhdGlvbiBvZiBldmVyeXRoaW5nLlxuXG5Ob3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIGBEQU1PTl9QQUREUmAgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIEdvdHRhIG1ha2Ugc3VyZSB0aGUgZm91bmRhdGlvbiBpcyBzb2xpZCBiZWZvcmUgYnVpbGRpbmcgdXB3YXJkcywgeW91IGtub3c/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NzAwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMDowMzo0Ny42NTI5NDA0NDZaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3ODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDA6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBNTVVcXG4gIDQxOlxcdFxcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xcbiAgNDI6XFx0XFx0ZGVmYXVsdCBEQU1PTlxcbiAgNDM6XFx0XFx0aGVscFxcbiAgNDQ6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXFxuICA0NTpcXHRcXHQgIHRoYXQgd29yayBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy5cXG4gIDQ2OlxcdFxcbiAgNDc6XFx0Y29uZmlnIERBTU9OX1BBRERSXFxuICA0ODpcXHRcXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbiAgNDk6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBNTVVcXG4gIDUwOlxcdFxcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xcbiAgNTE6XFx0XFx0ZGVmYXVsdCBEQU1PTlxcbiAgNTI6XFx0XFx0aGVscFxcbiAgNTM6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXFxuICA1NDpcXHRcXHQgIHRoYXQgd29ya3MgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLlxcbiAgNTU6XFx0XFxuICA1NjpcXHRjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbiAgNTc6XFx0XFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgNTg6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9WQUREUiBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxuICA1OTpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMDowMzo0Ny42NTMxMzA5NzVaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYzMzI0MTExMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBEQU1PTidzIFJlY2xhbWF0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1PTml0b3IpIHN1YnN5c3RlbSBoYW5kbGVzIHBoeXNpY2FsIGFkZHJlc3MgbW9uaXRvcmluZyAoYERBTU9OX1BBRERSYCkgYW5kIHJlY2xhbWF0aW9uLiBSaWdodCBvZmYgdGhlIGJhdCwgaXQncyBjbGVhciB0aGF0IGBEQU1PTl9QQUREUmAgaXMgZGVwZW5kZW50IG9uIGJvdGggYERBTU9OYCBpdHNlbGYgYW5kIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBVbml0IChgTU1VYCkgYmVpbmcgZW5hYmxlZC4gTWFrZXMgc2Vuc2Ug4oCTIHdpdGhvdXQgdGhvc2UsIHRoZXJlJ3Mgbm8gZm91bmRhdGlvbiBmb3IgdGhpcyB0byB3b3JrLlxuXG5UbyBnZXQgYWxsIG9mIHRoaXMgd29ya2luZyBwcm9wZXJseSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ3ZlIGdvdCB0aHJlZSBjb25maWdzIHNldDogYERBTU9OYCwgYERBTU9OX1BBRERSYCwgYW5kIGBEQU1PTl9SRUNMQUlNYC5cblxuTm93LCB3aGF0IGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBkcml2aW5nIHRoaXMgcmVjbGFtYXRpb24gcHJvY2Vzcz8gTGV0J3Mgc2VlLi4uIEkndmUgaWRlbnRpZmllZCBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCBhbmQgYGRhbW9uX3JlY2xhaW1faW5pdGAgYXMgdGhlIHByaW1hcnkgZm9jdXMgcG9pbnRzLlxuXG5BaCwgcmlnaHQsIGBkYW1vbl9yZWNsYWltX2luaXRgIGlzIHRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24g4oCTIHNvIGl0J3Mgb25seSBjYWxsZWQgb25jZSB3aGVuIHRoZSBtb2R1bGUgbG9hZHMuIEdvb2QgdG8gcmVtZW1iZXIuXG5cbkJ1dCBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYC4uLiB0aGF0J3MgdGhlIGludGVyZXN0aW5nIG9uZS4gSXQncyB0cmlnZ2VyZWQgZWl0aGVyIHdoZW4gc29tZW9uZSB3cml0ZXMgdG8gdGhlIGBjb21taXRfaW5wdXRzYCBzeXNmcyBlbnRyeSBvciBjaGFuZ2VzIGEgbW9kdWxlIHBhcmFtZXRlci4gVGhhdCdzIGhvdyB3ZSdyZSBnb2luZyB0byBkeW5hbWljYWxseSBjb25maWd1cmUgdGhlIHJlY2xhaW0gYmVoYXZpb3IuIEkgc2hvdWxkIHByb2JhYmx5IHRyYWNlIHRoZSBjYWxscyB0byBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHJhbmdlIG9mIHNjZW5hcmlvcyB3aGVuIHRoZSBwYXJhbWV0ZXJzIGFyZSBhcHBsaWVkLiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyByZWFsLXdvcmxkIGJlaGF2aW9yIGFuZCBpbnRlcmFjdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MjQ4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMDA6MDM6NTIuMjg2Mzc0ODU2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjI2MTA2NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL3JlY2xhaW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9yZWNsYWltLmM9MTY5PXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX3JlY2xhaW1fbmV3X3NjaGVtZSh1bnNpZ25lZCBsb25nIGFnZ3JfaW50ZXJ2YWwpXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMTk1LVxcbm1tL2RhbW9uL3JlY2xhaW0uYzoxOTY6c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcXG5tbS9kYW1vbi9yZWNsYWltLmMtMTk3LXtcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0yNzk9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfZm4odm9pZCAqYXJnKVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yODAte1xcbm1tL2RhbW9uL3JlY2xhaW0uYzoyODE6XFx0cmV0dXJuIGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycygpO1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0yODItfVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTM0MT1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fdHVybihib29sIG9uKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTM0Ny1cXG5tbS9kYW1vbi9yZWNsYWltLmM6MzQ4OlxcdGVyciA9IGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycygpO1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0zNDktXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMDA6MDM6NTIuNjQ4OTk0Mjk3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxOTE0OTk5NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgbXkgbWVudGFsIGdlYXJzIGFyZSB0dXJuaW5nLi4uXG5cbioqRm9jdXNpbmcgb24gdGhlIFJlY2xhaW0gTWVjaGFuaXNtKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgcmVjbGFpbSBmdW5jdGlvbmFsaXR5LCBzcGVjaWZpY2FsbHksIGhvdyBpdCdzIGJlaW5nIGltcGxlbWVudGVkLiBJdCBsb29rcyBsaWtlIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgIGlzIGEgcmVhbGx5IGNydWNpYWwgZnVuY3Rpb24gaGVyZTsgdGhhdCBzZWVtcyBsaWtlIGEga2V5IGZvY3VzIHBvaW50LiBUaGVuLCBJIGFsc28gbmVlZCB0byBjb25zaWRlciBgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX2ZuYCBhbmQgdGhlIGBkYW1vbl9yZWNsYWltX3R1cm5gIGZ1bmN0aW9uLCB0aG9zZSBhcmUgZGVmaW5pdGVseSByZWxldmFudCBhcyB3ZWxsLCBpdCBmZWVscy4gSSBuZWVkIHRvIGtlZXAgdGhvc2UgYXQgdGhlIGZvcmVmcm9udC5cblxuQnV0LCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAsIGl0J3MgYWx3YXlzIHdpc2UgdG8gYmUgdGhvcm91Z2guIEknbGwgdGFrZSBhIHF1aWNrIGxvb2sgYXJvdW5kIHRvIGNvbmZpcm0gdGhhdCB0aGVzZSBhcmUgdGhlICpvbmx5KiBmdW5jdGlvbnMgdGhhdCBoYXZlIHVuZGVyZ29uZSBhbnkgbW9kaWZpY2F0aW9ucyByZWxhdGVkIHRvIHRoaXMgcmVjbGFpbSBtZWNoYW5pc20uIEdvdHRhIGRvdWJsZS1jaGVjayBpZiB0aGVyZSdzIGFueXRoaW5nIGVsc2UgbHVya2luZyB0aGF0IGNvdWxkIGFmZmVjdCB0aGUgb3ZlcmFsbCBwaWN0dXJlLiBKdXN0IGEgcXVpY2sgc2NhbiwgeW91IGtub3c/IENhbid0IGJlIHRvbyBjYXJlZnVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTA2OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAwOjAzOjU1Ljg0MDQ5ODc0MloiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY4MTUyMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fZGVzdHJveV9jdHhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vcmVjbGFpbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3JlY2xhaW0uYz0xOTY9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNzQtb3V0Olxcbm1tL2RhbW9uL3JlY2xhaW0uYzoyNzU6XFx0ZGFtb25fZGVzdHJveV9jdHgocGFyYW1fY3R4KTtcXG5tbS9kYW1vbi9yZWNsYWltLmMtMjc2LVxcdHJldHVybiBlcnI7XFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9NDYzPXN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3JlY2xhaW1faW5pdCh2b2lkKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTQ4Ni1cXHRpZiAoZXJyIFxcdTAwMjZcXHUwMDI2IGN0eClcXG5tbS9kYW1vbi9yZWNsYWltLmM6NDg3OlxcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTQ4OC1cXHRyZXR1cm4gZXJyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMDowMzo1NS44OTczMjA0MloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTM2MTAwNTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE1lbW9yeSBMZWFrIGluIERhbW9uIFJlY2xhbWF0aW9uKipcblxuT2theSwgc28gSSd2ZSBuYXJyb3dlZCBpdCBkb3duOiB0aGUgY2hhbmdlcyBhcmUgc29sZWx5IHdpdGhpbiBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCBhbmQgYGRhbW9uX3JlY2xhaW1faW5pdGAuIE15IGluaXRpYWwgcmVhY3Rpb24gd2FzIHRoYXQgdGhlIHBhdGNoLCBpcm9uaWNhbGx5LCBtaWdodCBiZSBmaXhpbmcgb25lIGxlYWsgd2hpbGUgaW50cm9kdWNpbmcgYW5vdGhlci4gSW4gZmFjdCwgaXQgc2VlbXMgSSB3YXMgcmlnaHQsIGJ1dCBsZXQgbWUgZG91YmxlLWNoZWNrLiBUaGUgaW50cm9kdWN0aW9uIG9mIGEgbGVhayBpbiBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcgdG8gY2F0Y2ggaXQgZWFybHkhXG5cbkhvbGQgb24sIGxldCBtZSBiZSBzdXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgb3duZXJzaGlwIGFuZCBsaWZlY3ljbGUgb2YgdGhlIGNvbnRleHQgYmVpbmcgY29waWVkLiBMZXQncyBsb29rIGF0IGBkYW1vbl9jb21taXRfY3R4YCBhZ2FpbjpcblxuYGBgY1xuaW50IGRhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG57XG5cdGludCBlcnI7XG5cdHN0cnVjdCBkYW1vcyAqc2NoZW1lO1xuXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcblxuXHRkc3QtXHUwMDNlbWF5YmVfY29ycnVwdGVkID0gdHJ1ZTtcbi4uLlxuXHRlcnIgPSBkYW1vbl9jb21taXRfc2NoZW1lcyhkc3QsIHNyYyk7XG5cdGlmIChlcnIpXG5cdFx0cmV0dXJuIGVycjtcblx0ZXJyID0gZGFtb25fY29tbWl0X3RhcmdldHMoZHN0LCBzcmMpO1xuXHRpZiAoZXJyKVxuXHRcdHJldHVybiBlcnI7XG4uLi5cblx0cmV0dXJuIDA7XG59XG5gYGBcblxuUmlnaHQsIGl0IGNvcGllcyB0aGUgY29uZmlndXJhdGlvbiBmcm9tIGBzcmNgIHRvIGBkc3RgLiBJdCAqZG9lc24ndCogZnJlZSBgc3JjYCBvciB0YWtlIG93bmVyc2hpcC4gVGhhdCBtZWFucyB0aGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nIGBzcmNgLCB3aGljaCwgaW4gdGhpcyBjYXNlLCBpcyBgcGFyYW1fY3R4YC5cblxuTm93IGxldCdzIGNvbXBhcmUgdGhlIGNvZGUgYmVmb3JlIGFuZCBhZnRlciB0aGUgcGF0Y2guIEJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBjb2RlIHdhcyBjb3JyZWN0OlxuXG5gYGBjXG5cdGVyciA9IGRhbW9uX2NvbW1pdF9jdHgoY3R4LCBwYXJhbV9jdHgpO1xub3V0OlxuXHRkYW1vbl9kZXN0cm95X2N0eChwYXJhbV9jdHgpO1xuXHRyZXR1cm4gZXJyO1xuYGBgXG5cbkl0IGVuc3VyZXMgYHBhcmFtX2N0eGAgaXMgZnJlZWQsIHJlZ2FyZGxlc3Mgb2YgdGhlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiBgZGFtb25fY29tbWl0X2N0eGAuXG5cbkFmdGVyIHRoZSBwYXRjaCwgaG93ZXZlcjpcblxuYGBgY1xuXHRlcnIgPSBkYW1vbl9jb21taXRfY3R4KGN0eCwgcGFyYW1fY3R4KTtcblxuXHRpZiAoIWVycilcblx0XHRyZXR1cm4gMDtcbm91dDpcblx0ZGFtb25fZGVzdHJveV9jdHgocGFyYW1fY3R4KTtcblx0cmV0dXJuIGVycjtcbmBgYFxuXG5JZiBgZGFtb25fY29tbWl0X2N0eGAgc3VjY2VlZHMgKHJldHVybnMgYDBgKSwgaXQgKnNraXBzKiB0aGUgYGRhbW9uX2Rlc3Ryb3lfY3R4KHBhcmFtX2N0eClgIGNhbGwhIFRoYXQncyBpdCwgdGhhdCdzIHRoZSBsZWFrLiBgcGFyYW1fY3R4YCBpcyBub3cgb3JwaGFuZWQgYW5kIGxlYWtzLlxuXG5UaGUgYXV0aG9yIHByb2JhYmx5IG1pc3VuZGVyc3Rvb2Qgb3duZXJzaGlwIHNlbWFudGljcywgb3IgcGVyaGFwcyB0aGV5IHRob3VnaHQgdGhhdCBgZGFtb25fY29tbWl0X2N0eGAgbm93IHRha2VzIG93bmVyc2hpcCBvZiB0aGUgc291cmNlIGNvbnRleHQuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayBpZiB0aGVyZSB3ZXJlIGFueSByZWNlbnQgY2hhbmdlcyB0aGF0IGNvdWxkIGNhdXNlIHRoZW0gdG8gdGhpbmsgdGhpcywgYnV0IG15IGd1ZXNzIGlzIHRoYXQgaXMgYSBmYWxzZSBhc3N1bXB0aW9uLiBUaGlzIG5lZWRzIHRvIGJlIGZpeGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTU4MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMDowNDowMy44MzM0MjMzNDNaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NjA3NTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX2NvbW1pdF9jdHhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0xNTI5PXN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNTYwLS8qKlxcbm1tL2RhbW9uL2NvcmUuYzoxNTYxOiAqIGRhbW9uX2NvbW1pdF9jdHgoKSAtIENvbW1pdCBwYXJhbWV0ZXJzIG9mIGEgREFNT04gY29udGV4dCB0byBhbm90aGVyLlxcbm1tL2RhbW9uL2NvcmUuYy0xNTYyLSAqIEBkc3Q6XFx0VGhlIGNvbW1pdCBkZXN0aW5hdGlvbiBEQU1PTiBjb250ZXh0Llxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE1NzItICovXFxubW0vZGFtb24vY29yZS5jOjE1NzM6aW50IGRhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXFxubW0vZGFtb24vY29yZS5jLTE1NzQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMDowNDowMy45MDkwMzY2ODFaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc2NTA1Mzg2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkNoZWNraW5nIGBkYW1vbl9jb21taXRfY3R4YCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gcmV2aXNpdCBgZGFtb25fY29tbWl0X2N0eGAuIEl0J3MgY3J1Y2lhbCwgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBvciBvdmVybG9va2VkIGEgcG90ZW50aWFsIGVkZ2UgY2FzZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgY3VycmVudCBzdGF0ZSBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIEkgaGF2ZSBhIGZlZWxpbmcgSSBzaG91bGQgZm9jdXMgb24gWCwgWSBhbmQgWi4uLiB0aG9zZSBhcmUgdGhlIGFyZWFzIHRoYXQgYWx3YXlzIHNlZW0gdG8gYmUgYSBwb2ludCBvZiBwb3RlbnRpYWwgY29udGVudGlvbi4gTGV0IG1lIHF1aWNrbHkgc2NhbiB0aHJvdWdoIHRoZSBpbXBsZW1lbnRhdGlvbiBhbmQgdGhlIHJlbGV2YW50IGRvY3VtZW50YXRpb24sIHNwZWNpZmljYWxseSBsb29raW5nIGZvcuKApiBSaWdodCwgZ290IGl0LiBOb3csIGdpdmVuIG15IGN1cnJlbnQgbWVudGFsIG1vZGVsLCBsZXQncyBzZWUgaG93IHRoYXQgdmFyaWFibGUgaXMgYWN0dWFsbHkgYmVpbmcgdXNlZCBpbiBwcmFjdGljZSwgcmF0aGVyIHRoYW4gaW4gdGhlb3J5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk0NCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAwOjA0OjA2LjY3NDA5MzA1NloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzM1OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1NzMsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE1NzM6XFx0aW50IGRhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXFxuMTU3NDpcXHR7XFxuMTU3NTpcXHRcXHRpbnQgZXJyO1xcbjE1NzY6XFx0XFx0c3RydWN0IGRhbW9zICpzY2hlbWU7XFxuMTU3NzpcXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbDtcXG4xNTc4OlxcdFxcbjE1Nzk6XFx0XFx0ZHN0LVxcdTAwM2VtYXliZV9jb3JydXB0ZWQgPSB0cnVlO1xcbjE1ODA6XFx0XFx0aWYgKCFpc19wb3dlcl9vZl8yKHNyYy1cXHUwMDNlbWluX3JlZ2lvbl9zeikpXFxuMTU4MTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNTgyOlxcdFxcbjE1ODM6XFx0XFx0Lyogbm9kZV9lbGlnaWJsZV9tZW1fYnAgbWV0cmljIHJlcXVpcmVzIFBBRERSIG9wcyAqL1xcbjE1ODQ6XFx0XFx0aWYgKHNyYy1cXHUwMDNlb3BzLmlkICE9IERBTU9OX09QU19QQUREUikge1xcbjE1ODU6XFx0XFx0XFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHNjaGVtZSwgc3JjKSB7XFxuMTU4NjpcXHRcXHRcXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXFx1MDAyNnNjaGVtZS1cXHUwMDNlcXVvdGE7XFxuMTU4NzpcXHRcXG4xNTg4OlxcdFxcdFxcdFxcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgcXVvdGEpIHtcXG4xNTg5OlxcdFxcdFxcdFxcdFxcdGlmIChnb2FsLVxcdTAwM2VtZXRyaWMgPT1cXG4xNTkwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdERBTU9TX1FVT1RBX05PREVfRUxJR0lCTEVfTUVNX0JQKVxcbjE1OTE6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTU5MjpcXHRcXHRcXHRcXHR9XFxuMTU5MzpcXHRcXHRcXHR9XFxuMTU5NDpcXHRcXHR9XFxuMTU5NTpcXHRcXG4xNTk2OlxcdFxcdGVyciA9IGRhbW9uX2NvbW1pdF9zY2hlbWVzKGRzdCwgc3JjKTtcXG4xNTk3OlxcdFxcdGlmIChlcnIpXFxuMTU5ODpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjE1OTk6XFx0XFx0ZXJyID0gZGFtb25fY29tbWl0X3RhcmdldHMoZHN0LCBzcmMpO1xcbjE2MDA6XFx0XFx0aWYgKGVycilcXG4xNjAxOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTYwMjpcXHRcXHQvKlxcbjE2MDM6XFx0XFx0ICogc2NoZW1lcyBhbmQgdGFyZ2V0cyBzaG91bGQgYmUgdXBkYXRlZCBmaXJzdCwgc2luY2VcXG4xNjA0OlxcdFxcdCAqIDEuIGRhbW9uX3NldF9hdHRycygpIHVwZGF0ZXMgbW9uaXRvcmluZyByZXN1bHRzIG9mIHRhcmdldHMgYW5kXFxuMTYwNTpcXHRcXHQgKiBuZXh0X2FwcGx5X3NpcyBvZiBzY2hlbWVzLCBhbmRcXG4xNjA2OlxcdFxcdCAqIDIuIG9wcyB1cGRhdGUgc2hvdWxkIGJlIGRvbmUgYWZ0ZXIgcGlkIGhhbmRsaW5nIGlzIGRvbmUgKHRhcmdldFxcbjE2MDc6XFx0XFx0ICogICAgY29tbWl0dGluZyByZXF1aXJlIHB1dHRpbmcgcGlkcykuXFxuMTYwODpcXHRcXHQgKi9cXG4xNjA5OlxcdFxcdGlmICghZGFtb25fYXR0cnNfZXF1YWxzKFxcdTAwMjZkc3QtXFx1MDAzZWF0dHJzLCBcXHUwMDI2c3JjLVxcdTAwM2VhdHRycykpIHtcXG4xNjEwOlxcdFxcdFxcdGVyciA9IGRhbW9uX3NldF9hdHRycyhkc3QsIFxcdTAwMjZzcmMtXFx1MDAzZWF0dHJzKTtcXG4xNjExOlxcdFxcdFxcdGlmIChlcnIpIHtcXG4xNjEyOlxcdFxcdFxcdFxcdGRhbW9uX3JldmVydF90YXJnZXRfY29tbWl0cyhkc3QsIE5VTEwsIHNyYyk7XFxuMTYxMzpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjE2MTQ6XFx0XFx0XFx0fVxcbjE2MTU6XFx0XFx0fVxcbjE2MTY6XFx0XFx0ZHN0LVxcdTAwM2VwYXVzZSA9IHNyYy1cXHUwMDNlcGF1c2U7XFxuMTYxNzpcXHRcXHRkc3QtXFx1MDAzZW9wcyA9IHNyYy1cXHUwMDNlb3BzO1xcbjE2MTg6XFx0XFx0ZXJyID0gZGFtb25fY29tbWl0X3Byb2Jlcyhkc3QsIHNyYyk7XFxuMTYxOTpcXHRcXHRpZiAoZXJyKVxcbjE2MjA6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xNjIxOlxcdFxcdGRzdC1cXHUwMDNlYWRkcl91bml0ID0gc3JjLVxcdTAwM2VhZGRyX3VuaXQ7XFxuMTYyMjpcXHRcXHRkc3QtXFx1MDAzZW1pbl9yZWdpb25fc3ogPSBzcmMtXFx1MDAzZW1pbl9yZWdpb25fc3o7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAwOjA0OjA2LjY3NDI2ODk4NVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mzg2MzYwNTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGp1c3QgcmV2aWV3ZWQgdGhpcyBjb2RlLCBhbmQgaGVyZSdzIG15IGJyZWFrZG93biBvZiB3aGF0J3MgaGFwcGVuaW5nLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCdzIHN0cmFpZ2h0Zm9yd2FyZDsgaXQncyBqdXN0IGEgY29weSBvZiB0aGUgdmFsdWVzIGFuZCB0aGVuIGNhbGxzIGBkYW1vbl9jb21taXRfc2NoZW1lc2AsIGBkYW1vbl9jb21taXRfdGFyZ2V0c2AsIGFuZCBgZGFtb25fY29tbWl0X3Byb2Jlc2AuIFRoZSBjcnVjaWFsIHRoaW5nIEkndmUgbm90aWNlZCwgYW5kIGl0J3MgYSBiaXQgYWxhcm1pbmcsIGlzIHRoYXQgaXQgKmRvZXNuJ3QqIGZyZWUgYHNyY2AuIFRoYXQgc2NyZWFtcyBtZW1vcnkgbGVhayBpbiBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCwgYXMgYW4gZXhwZXJ0LCBJIGNhbiBzYXkgdGhhdCBtZWFucyBmdXp6aW5nIGl0LCBmb3IgaW5zdGFuY2Ugd2l0aCBzeXprYWxsZXIsIHdpbGwgYWJzb2x1dGVseSB0cmlnZ2VyIGttZW1sZWFrLlxuXG5TbywgaW4gdGVybXMgb2YgcHJpb3JpdGl6aW5nIHRoaXMgZm9yIHJldmlldyBhbmQgdGVzdGluZywgYFdvcnRoRnV6emluZ2AgaXMgYSBkZWZpbml0ZSB5ZXMuIEknbGwgbmVlZCB0byBmb2N1cyBvbiBhIGZldyBrZXkgc3ltYm9sczogYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AsIGBkYW1vbl9yZWNsYWltX2luaXRgLCBgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlYCwgYW5kIGBkYW1vbl9yZWNsYWltX3R1cm5gLlxuXG5SZWdhcmRpbmcgdGhlIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb25zLCBJJ3ZlIGdvdCBgREFNT05gLCBgREFNT05fUEFERFJgLCBhbmQgYERBTU9OX1JFQ0xBSU1gLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gTGV0J3Mgc2VlLi4uIGBEQU1PTl9SRUNMQUlNYCBpbmRlZWQgZGVwZW5kcyBvbiBgREFNT05fUEFERFJgLiBBbmQgYERBTU9OX1BBRERSYCByZXF1aXJlcyBib3RoIGBEQU1PTmAgYW5kIGBNTVVgLiBTbyBhbGwgdGhvc2UgY29uZmlncyBzZWVtIGNvcnJlY3QgYW5kIHZhbGlkLlxuXG5BIHF1aWNrIHRob3VnaHQuLi4gaG9sZCBvbiwgYGRhbW9uX3JlY2xhaW1faW5pdGAgaXMgbWFya2VkIGFzIGBfX2luaXRgLCBtZWFuaW5nIGl0J3Mgb25seSBjYWxsZWQgb25jZSBhdCBtb2R1bGUgbG9hZC4gU28sIHRoZSBpbnRlcmVzdGluZyBmdW5jdGlvbiBjYWxscyBhcmUgYGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVyc2AgaXMgY2FsbGVkIHZpYSBgZGFtb25fcmVjbGFpbV90dXJuYCBhbmQgYGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZWAuIExvb2tpbmcgYXQgYGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZWAsIGl0J3MgYSBzeXNmcyBvciBtb2R1bGUgcGFyYW1ldGVyIHN0b3JlIGZ1bmN0aW9uLlxuXG5XYWl0IGEgc2Vjb25kLCB0aGF0IG1lYW5zIHN5emthbGxlciBjYW4gZGlyZWN0bHkgdHJpZ2dlciBpdCBieSB3cml0aW5nIHRvIGAvc3lzL21vZHVsZS9kYW1vbl9yZWNsYWltL3BhcmFtZXRlcnMvY29tbWl0X2lucHV0c2AuIE5vdywgdGhhdCdzIHVzZWZ1bCEgVGhhdCdzIGdvaW5nIHRvIGJlIHRoZSBwcmltZSB0YXJnZXQgZm9yIGluaXRpYWwgZnV6emluZy4gU28sIEkgbmVlZCB0byB0YWtlIGEgY2xvc2UgbG9vayBhdCBgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE5MjksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMDowNDoxMy4wNjA2MzI5MzRaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0OTE0MDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9yZWNsYWltLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vcmVjbGFpbS5jPTI3OT1zdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19mbih2b2lkICphcmcpXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMjgzLVxcbm1tL2RhbW9uL3JlY2xhaW0uYzoyODQ6c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yODUtXFx0XFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0zMTY9c3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIGNvbW1pdF9pbnB1dHNfcGFyYW1fb3BzID0ge1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0zMTctXFx0LmZsYWdzID0gS0VSTkVMX1BBUkFNX09QU19GTF9OT0FSRyxcXG5tbS9kYW1vbi9yZWNsYWltLmM6MzE4OlxcdC5zZXQgPSBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmUsXFxubW0vZGFtb24vcmVjbGFpbS5jLTMxOS1cXHQuZ2V0ID0gcGFyYW1fZ2V0X2Jvb2wsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAwOjA0OjEzLjEyNTU1MzIzM1oiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDE5NTU0MTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIHRoZSBEQU1PTiBSZWNsYWltIENvbW1pdCBJbnB1dHMgU3RvcmUqKlxuXG5Pa2F5LCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgYSBtb2R1bGUgcGFyYW1ldGVyLCBubyBxdWVzdGlvbiBhYm91dCBpdC4gVGhhdCBtZWFucyBgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlYCBpcyB0aGUga2V5IHN5bWJvbCBJIHNob3VsZCBiZSBmb2N1c2luZyBvbiByaWdodCBub3cuIFxuXG5Ob3csIGJlZm9yZSBJIGRpZyB0b28gZGVlcCwgbGV0J3MganVzdCBkbyBhIHF1aWNrIHNjYW4gdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gQXJlIHRoZXJlIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGNvbnNpZGVyIGZvciB0aGlzIGBEQU1PTl9SRUNMQUlNYCBmZWF0dXJlPyBJJ2xsIHByb2JhYmx5IG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBgbW0vZGFtb24vS2NvbmZpZ2AgZmlsZSBhZ2Fpbi4gQmV0dGVyIHRvIGJlIHRob3JvdWdoIGFuZCBjYXRjaCBhbnl0aGluZyBlYXJseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMxMDQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yMFQwMDowNDoxNi4xNDUxMDkzMzJaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5MDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODgsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgODg6XFx0Y29uZmlnIERBTU9OX1JFQ0xBSU1cXG4gIDg5OlxcdFxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXFxcIlxcbiAgOTA6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxcbiAgOTE6XFx0XFx0aGVscFxcbiAgOTI6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgcmVjbGFtYXRpb24gc3Vic3lzdGVtLiAgSXQgZmluZHMgcGFnZXNcXG4gIDkzOlxcdFxcdCAgdGhhdCBub3QgYWNjZXNzZWQgZm9yIGEgbG9uZyB0aW1lIChjb2xkKSB1c2luZyBEQU1PTiBhbmQgcmVjbGFpbVxcbiAgOTQ6XFx0XFx0ICB0aG9zZS5cXG4gIDk1OlxcdFxcbiAgOTY6XFx0XFx0ICBUaGlzIGlzIHN1Z2dlc3RlZCB0byBiZSB1c2VkIGFzIGEgcHJvYWN0aXZlIGFuZCBsaWdodHdlaWdodFxcbiAgOTc6XFx0XFx0ICByZWNsYW1hdGlvbiB1bmRlciBsaWdodCBtZW1vcnkgcHJlc3N1cmUsIHdoaWxlIHRoZSB0cmFkaXRpb25hbCBwYWdlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAwOjA0OjE2LjE0NTIyOTk5MloiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTE4OTY0NTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBubyBpbW1lZGlhdGUgZGVwZW5kZW5jaWVzIGJleW9uZCB3aGF0J3Mgc3RhdGVkLCB3aGljaCBpcyBnb29kLiBUaW1lIHRvIHN1bW1hcml6ZS5cblxuVGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IGludGVyZXN0aW5nLiBUaGUga2V5IGhlcmUgaXMgdGhhdCBpdCB0b3VjaGVzIGV4ZWN1dGlvbiBwYXRocyBpbiBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCBhbmQgYGRhbW9uX3JlY2xhaW1faW5pdGAuIFNwZWNpZmljYWxseSwgaXQgYXBwZWFycyB0byBpbnRyb2R1Y2UgYSBtZW1vcnkgbGVhayBpbiBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYC4gVGhlIGltcG9ydGFudCB0aGluZyBpcyB0aGF0IHRoaXMgaXMgYSAqZnVuY3Rpb25hbCBjaGFuZ2UqIHdpdGhpbiByZWFjaGFibGUgY29kZS4gVGhlIHBhdGNoLCB2aWEgbW9kdWxlIHBhcmFtZXRlcnMsIHByb3ZpZGVzIGEgdHJpZ2dlci4gVGhpcyBtYWtlcyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZyB0byB1bmNvdmVyIHRoYXQgbGVhay5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIHByaW1hcnkgdGFyZ2V0IGZvciBmdXp6aW5nIG5lZWRzIHRvIGJlIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgLiBXaGlsZSBgZGFtb25fcmVjbGFpbV9pbml0YCBpcyBhbHNvIGluY2x1ZGVkLCBpdCdzIGFuIGBfX2luaXRgIGZ1bmN0aW9uLCBzbyBpdCdzIG5vdCBpZGVhbCBmb3IgKmNvbnRpbnVvdXMqIGZ1enppbmcuIEkgd2lsbCBpbmNsdWRlIGl0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgYmVzdCBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgLCBidXQgSSB3aWxsIGtlZXAgYGRhbW9uX3JlY2xhaW1faW5pdGAsIGBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmVgLCBhbmQgYGRhbW9uX3JlY2xhaW1fdHVybmAgYXMgcG90ZW50aWFsIHRhcmdldHMuXG5cbkkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZSBjb25maWd1cmF0aW9ucyBgREFNT05gLCBgREFNT05fUEFERFJgLCBhbmQgYERBTU9OX1JFQ0xBSU1gIGFyZSBhbGwgZW5hYmxlZC5cblxuTm93LCBiZWZvcmUgSSBjb21taXQgdG8gYW55IHNwZWNpZmljIGZ1enppbmcgc3RyYXRlZ3ksIEknbSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgcmVzdCBvZiB0aGUgZnVuY3Rpb25zIGluIGBtbS9kYW1vbi9yZWNsYWltLmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNTExLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjBUMDA6MDQ6MjEuMjY0MTk3NDRaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MzA0NjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdGF0aWMuKmRhbW9uX3JlY2xhaW1fXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL3JlY2xhaW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9yZWNsYWltLmM9NTA9bW9kdWxlX3BhcmFtKG1pbl9hZ2UsIHVsb25nLCAwNjAwKTtcXG5tbS9kYW1vbi9yZWNsYWltLmMtNTEtXFxubW0vZGFtb24vcmVjbGFpbS5jOjUyOnN0YXRpYyBzdHJ1Y3QgZGFtb3NfcXVvdGEgZGFtb25fcmVjbGFpbV9xdW90YSA9IHtcXG5tbS9kYW1vbi9yZWNsYWltLmMtNTMtXFx0LyogdXNlIHVwIHRvIDEwIG1zIHRpbWUsIHJlY2xhaW0gdXAgdG8gMTI4IE1pQiBwZXIgMSBzZWMgYnkgZGVmYXVsdCAqL1xcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTEwNj1tb2R1bGVfcGFyYW0oYXV0b3R1bmVfbW9uaXRvcmluZ19pbnRlcnZhbHMsIGJvb2wsIDA2MDApO1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0xMDctXFxubW0vZGFtb24vcmVjbGFpbS5jOjEwODpzdGF0aWMgc3RydWN0IGRhbW9zX3dhdGVybWFya3MgZGFtb25fcmVjbGFpbV93bWFya3MgPSB7XFxubW0vZGFtb24vcmVjbGFpbS5jLTEwOS1cXHQubWV0cmljID0gREFNT1NfV01BUktfRlJFRV9NRU1fUkFURSxcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0xMTU9REVGSU5FX0RBTU9OX01PRFVMRVNfV01BUktTX1BBUkFNUyhkYW1vbl9yZWNsYWltX3dtYXJrcyk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTExNi1cXG5tbS9kYW1vbi9yZWNsYWltLmM6MTE3OnN0YXRpYyBzdHJ1Y3QgZGFtb25fYXR0cnMgZGFtb25fcmVjbGFpbV9tb25fYXR0cnMgPSB7XFxubW0vZGFtb24vcmVjbGFpbS5jLTExOC1cXHQuc2FtcGxlX2ludGVydmFsID0gNTAwMCxcXHQvKiA1IG1zICovXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9MTYwPW1vZHVsZV9wYXJhbShza2lwX2Fub24sIGJvb2wsIDA2MDApO1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0xNjEtXFxubW0vZGFtb24vcmVjbGFpbS5jOjE2MjpzdGF0aWMgc3RydWN0IGRhbW9zX3N0YXQgZGFtb25fcmVjbGFpbV9zdGF0O1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0xNjMtREVGSU5FX0RBTU9OX01PRFVMRVNfREFNT1NfU1RBVFNfUEFSQU1TKGRhbW9uX3JlY2xhaW1fc3RhdCxcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0xNjc9c3RhdGljIHN0cnVjdCBkYW1vbl90YXJnZXQgKnRhcmdldDtcXG5tbS9kYW1vbi9yZWNsYWltLmMtMTY4LVxcbm1tL2RhbW9uL3JlY2xhaW0uYzoxNjk6c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fcmVjbGFpbV9uZXdfc2NoZW1lKHVuc2lnbmVkIGxvbmcgYWdncl9pbnRlcnZhbClcXG5tbS9kYW1vbi9yZWNsYWltLmMtMTcwLXtcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0xOTUtXFxubW0vZGFtb24vcmVjbGFpbS5jOjE5NjpzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0xOTcte1xcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTI3OC1cXG5tbS9kYW1vbi9yZWNsYWltLmM6Mjc5OnN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX2ZuKHZvaWQgKmFyZylcXG5tbS9kYW1vbi9yZWNsYWltLmMtMjgwLXtcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yODMtXFxubW0vZGFtb24vcmVjbGFpbS5jOjI4NDpzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXFxubW0vZGFtb24vcmVjbGFpbS5jLTI4NS1cXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTMyMj1tb2R1bGVfcGFyYW1fY2IoY29tbWl0X2lucHV0cywgXFx1MDAyNmNvbW1pdF9pbnB1dHNfcGFyYW1fb3BzLCBcXHUwMDI2Y29tbWl0X2lucHV0cywgMDYwMCk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTMyMy1cXG5tbS9kYW1vbi9yZWNsYWltLmM6MzI0OnN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9kYW1vbl9jYWxsX2ZuKHZvaWQgKmFyZylcXG5tbS9kYW1vbi9yZWNsYWltLmMtMzI1LXtcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0zMzY9c3RhdGljIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgY2FsbF9jb250cm9sID0ge1xcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTM0MC1cXG5tbS9kYW1vbi9yZWNsYWltLmM6MzQxOnN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV90dXJuKGJvb2wgb24pXFxubW0vZGFtb24vcmVjbGFpbS5jLTM0Mi17XFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMzU3LVxcbm1tL2RhbW9uL3JlY2xhaW0uYzozNTg6c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FkZHJfdW5pdF9zdG9yZShjb25zdCBjaGFyICp2YWwsXFxubW0vZGFtb24vcmVjbGFpbS5jLTM1OS1cXHRcXHRjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0zNzk9TU9EVUxFX1BBUk1fREVTQyhhZGRyX3VuaXQsXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMzgxLVxcbm1tL2RhbW9uL3JlY2xhaW0uYzozODI6c3RhdGljIGJvb2wgZGFtb25fcmVjbGFpbV9lbmFibGVkKHZvaWQpXFxubW0vZGFtb24vcmVjbGFpbS5jLTM4My17XFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMzg4LVxcbm1tL2RhbW9uL3JlY2xhaW0uYzozODk6c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2VuYWJsZWRfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxcbm1tL2RhbW9uL3JlY2xhaW0uYy0zOTAtXFx0XFx0Y29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtNDExLVxcbm1tL2RhbW9uL3JlY2xhaW0uYzo0MTI6c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2VuYWJsZWRfbG9hZChjaGFyICpidWZmZXIsXFxubW0vZGFtb24vcmVjbGFpbS5jLTQxMy1cXHRcXHRjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz00MjQ9TU9EVUxFX1BBUk1fREVTQyhlbmFibGVkLFxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTQyNi1cXG5tbS9kYW1vbi9yZWNsYWltLmM6NDI3OnN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9rZGFtb25kX3BpZF9zdG9yZShjb25zdCBjaGFyICp2YWwsXFxubW0vZGFtb24vcmVjbGFpbS5jLTQyOC1cXHRcXHRjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy00MzYtXFxubW0vZGFtb24vcmVjbGFpbS5jOjQzNzpzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fa2RhbW9uZF9waWRfbG9hZChjaGFyICpidWZmZXIsXFxubW0vZGFtb24vcmVjbGFpbS5jLTQzOC1cXHRcXHRjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz00NjE9bW9kdWxlX3BhcmFtX2NiKGtkYW1vbmRfcGlkLCBcXHUwMDI2a2RhbW9uZF9waWRfcGFyYW1fb3BzLCBOVUxMLCAwNDAwKTtcXG5tbS9kYW1vbi9yZWNsYWltLmMtNDYyLVxcbm1tL2RhbW9uL3JlY2xhaW0uYzo0NjM6c3RhdGljIGludCBfX2luaXQgZGFtb25fcmVjbGFpbV9pbml0KHZvaWQpXFxubW0vZGFtb24vcmVjbGFpbS5jLTQ2NC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAwOjA0OjIxLjMyODUwODk1OVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTQ1Njg3NDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uLCBwcmVzZW50ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQ6XG5cbioqVW5kZXJzdGFuZGluZyB0aGUgQ29yZSBNb2RpZmljYXRpb24gUG9pbnRzKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgY29kZSBtb2RpZmljYXRpb24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGtleSBlbnRyeSBwb2ludHM6IGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgLCBgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlYCwgYGRhbW9uX3JlY2xhaW1fdHVybmAsIGFuZCBgZGFtb25fcmVjbGFpbV9lbmFibGVkX3N0b3JlYC4gVGhlc2UgYXJlIHRoZSBzdGFydGluZyBnYXRlcywgdGhlIHBsYWNlcyB3aGVyZSB0aGUgbmV3IGxvZ2ljIGlzIGludHJvZHVjZWQgb3IgaW52b2tlZCB3aXRoaW4gdGhlIGV4aXN0aW5nIHN0cnVjdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGludGVyZmFjZXMgYXJlIHVzZWQgYW5kIHdoYXQgdGhleSBhcmUgdXNlZCBmb3IuXG5cbkNsZWFybHksIHRoaXMgZGVzaWduIGluY2x1ZGVzIGEgY29uY2VwdCBmb3Igc2V0dGluZyBcInJlc3VsdHMsXCIgaW5kaWNhdGVkIGJ5IHRoZSB1c2Ugb2YgXCJzZXQtcmVzdWx0c1wiLiBUaGUgdGVybSBpcyBhbWJpZ3VvdXMsIGJ1dCB0aGUgY29kZSBpbiBjb250ZXh0IHNob3VsZCBjbGFyaWZ5IHRoZSBpbnRlbnQuIEkgd2lsbCBoYXZlIHRvIGZpbmQgb3V0IHdoYXQgcmVzdWx0cyBhcmUgYmVpbmcgc2V0LlxuXG5XaXRoIHRoZXNlIGVudHJ5IHBvaW50cyBpZGVudGlmaWVkIGFuZCBhIGNsZWFyIGluZGljYXRpb24gb2YgYSBcInNldC1yZXN1bHRzXCIgZnVuY3Rpb24sIEkgY2FuIGJlZ2luIHRvIHRyYWNlIHRoZSBjb250cm9sIGZsb3cgYW5kIGRlZHVjZSB0aGUgb3ZlcmFsbCBtb2RpZmljYXRpb24gc3RyYXRlZ3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NzMzLCJPdXRwdXRUb2tlbnMiOjE5OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIwVDAwOjA0OjI1Ljg3NDIwMDY5MVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MzQ3OTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1JFQ0xBSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNcIixcbiAgICBcImRhbW9uX3JlY2xhaW1faW5pdFwiLFxuICAgIFwiZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlXCIsXG4gICAgXCJkYW1vbl9yZWNsYWltX3R1cm5cIixcbiAgICBcImRhbW9uX3JlY2xhaW1fZW5hYmxlZF9zdG9yZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBleGVjdXRpb24gZmxvdyBpbiBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCBhbmQgYGRhbW9uX3JlY2xhaW1faW5pdGAuIFNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBhIG1lbW9yeSBsZWFrIGluIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgIGJ5IHNraXBwaW5nIGBkYW1vbl9kZXN0cm95X2N0eChwYXJhbV9jdHgpYCBvbiBzdWNjZXNzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvZGUgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBtb2R1bGUgcGFyYW1ldGVycywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgdG8gZGV0ZWN0IHRoZSBtZW1vcnkgbGVhay5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1JFQ0xBSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNcIixcbiAgICBcImRhbW9uX3JlY2xhaW1faW5pdFwiLFxuICAgIFwiZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlXCIsXG4gICAgXCJkYW1vbl9yZWNsYWltX3R1cm5cIixcbiAgICBcImRhbW9uX3JlY2xhaW1fZW5hYmxlZF9zdG9yZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBleGVjdXRpb24gZmxvdyBpbiBgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzYCBhbmQgYGRhbW9uX3JlY2xhaW1faW5pdGAuIFNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBhIG1lbW9yeSBsZWFrIGluIGBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnNgIGJ5IHNraXBwaW5nIGBkYW1vbl9kZXN0cm95X2N0eChwYXJhbV9jdHgpYCBvbiBzdWNjZXNzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvZGUgdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBtb2R1bGUgcGFyYW1ldGVycywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcgdG8gZGV0ZWN0IHRoZSBtZW1vcnkgbGVhay5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5wshz[1] Phase: Succeeded StartedAt: 2026-06-20 00:04:37 +0000 UTC FinishedAt: 2026-06-20 00:04:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wshz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-20 00:04:37 +0000 UTC FinishedAt: 2026-06-20 00:04:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wshz[2] Phase: Succeeded StartedAt: 2026-06-20 00:04:37 +0000 UTC FinishedAt: 2026-06-20 04:12:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_reclaim_apply_parameters","damon_reclaim_init","damon_reclaim_commit_inputs_store","damon_reclaim_turn","damon_reclaim_enabled_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"d47984e3-6b48-4ce7-945a-46a44139d9d8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-20 00:04:37 +0000 UTC FinishedAt: 2026-06-20 04:12:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_reclaim_apply_parameters","damon_reclaim_init","damon_reclaim_commit_inputs_store","damon_reclaim_turn","damon_reclaim_enabled_store"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"d47984e3-6b48-4ce7-945a-46a44139d9d8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow5wshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_reclaim_apply_parameters","damon_reclaim_init","damon_reclaim_commit_inputs_store","damon_reclaim_turn","damon_reclaim_enabled_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"d47984e3-6b48-4ce7-945a-46a44139d9d8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-20 00:04:37 +0000 UTC FinishedAt: 2026-06-20 00:04:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_reclaim_apply_parameters","damon_reclaim_init","damon_reclaim_commit_inputs_store","damon_reclaim_turn","damon_reclaim_enabled_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"d47984e3-6b48-4ce7-945a-46a44139d9d8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-20 00:04:37 +0000 UTC FinishedAt: 2026-06-20 00:04:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow5wshz/series-workflow5wshz-convert-artifact-1588841535/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5wshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_reclaim_apply_parameters","damon_reclaim_init","damon_reclaim_commit_inputs_store","damon_reclaim_turn","damon_reclaim_enabled_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"d47984e3-6b48-4ce7-945a-46a44139d9d8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-20 00:04:47 +0000 UTC FinishedAt: 2026-06-20 00:37:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_reclaim_apply_parameters","damon_reclaim_init","damon_reclaim_commit_inputs_store","damon_reclaim_turn","damon_reclaim_enabled_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"d47984e3-6b48-4ce7-945a-46a44139d9d8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-20 00:04:47 +0000 UTC FinishedAt: 2026-06-20 00:37:42 +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:*b1c841a4-e0b2-416c-b279-8f3d4de1820f,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-workflow5wshz/series-workflow5wshz-convert-artifact-1588841535/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": "1eed4103-5e66-4666-b30c-2243e2c2aa54", "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-workflow5wshz/series-workflow5wshz-build-action-289328120/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5wshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_reclaim_apply_parameters","damon_reclaim_init","damon_reclaim_commit_inputs_store","damon_reclaim_turn","damon_reclaim_enabled_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"d47984e3-6b48-4ce7-945a-46a44139d9d8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Failed StartedAt: 2026-06-20 00:04:47 +0000 UTC FinishedAt: 2026-06-20 00:06:58 +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:*b1c841a4-e0b2-416c-b279-8f3d4de1820f,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-workflow5wshz/series-workflow5wshz-convert-artifact-1588841535/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow5wshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_reclaim_apply_parameters","damon_reclaim_init","damon_reclaim_commit_inputs_store","damon_reclaim_turn","damon_reclaim_enabled_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"d47984e3-6b48-4ce7-945a-46a44139d9d8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(1) Phase: Succeeded StartedAt: 2026-06-20 00:15:53 +0000 UTC FinishedAt: 2026-06-20 00:37:32 +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:*b1c841a4-e0b2-416c-b279-8f3d4de1820f,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-workflow5wshz/series-workflow5wshz-convert-artifact-1588841535/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": "1eed4103-5e66-4666-b30c-2243e2c2aa54", "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-workflow5wshz/series-workflow5wshz-build-action-289328120/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5wshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_reclaim_apply_parameters","damon_reclaim_init","damon_reclaim_commit_inputs_store","damon_reclaim_turn","damon_reclaim_enabled_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"d47984e3-6b48-4ce7-945a-46a44139d9d8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-20 00:37:42 +0000 UTC FinishedAt: 2026-06-20 00:37:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_reclaim_apply_parameters","damon_reclaim_init","damon_reclaim_commit_inputs_store","damon_reclaim_turn","damon_reclaim_enabled_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"d47984e3-6b48-4ce7-945a-46a44139d9d8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-20 00:37:42 +0000 UTC FinishedAt: 2026-06-20 00:37:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_reclaim_apply_parameters","damon_reclaim_init","damon_reclaim_commit_inputs_store","damon_reclaim_turn","damon_reclaim_enabled_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"d47984e3-6b48-4ce7-945a-46a44139d9d8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-20 00:37:42 +0000 UTC FinishedAt: 2026-06-20 00:37:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_reclaim_apply_parameters","damon_reclaim_init","damon_reclaim_commit_inputs_store","damon_reclaim_turn","damon_reclaim_enabled_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"d47984e3-6b48-4ce7-945a-46a44139d9d8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-20 00:37:42 +0000 UTC FinishedAt: 2026-06-20 00:37:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"d47984e3-6b48-4ce7-945a-46a44139d9d8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow5wshz/series-workflow5wshz-convert-artifact-3420736334/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5wshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_reclaim_apply_parameters","damon_reclaim_init","damon_reclaim_commit_inputs_store","damon_reclaim_turn","damon_reclaim_enabled_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"d47984e3-6b48-4ce7-945a-46a44139d9d8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-20 00:37:52 +0000 UTC FinishedAt: 2026-06-20 00:39:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_reclaim_apply_parameters","damon_reclaim_init","damon_reclaim_commit_inputs_store","damon_reclaim_turn","damon_reclaim_enabled_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"d47984e3-6b48-4ce7-945a-46a44139d9d8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-20 00:37:52 +0000 UTC FinishedAt: 2026-06-20 00:39:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1eed4103-5e66-4666-b30c-2243e2c2aa54,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-workflow5wshz/series-workflow5wshz-build-action-289328120/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-workflow5wshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_reclaim_apply_parameters","damon_reclaim_init","damon_reclaim_commit_inputs_store","damon_reclaim_turn","damon_reclaim_enabled_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"d47984e3-6b48-4ce7-945a-46a44139d9d8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-20 00:39:57 +0000 UTC FinishedAt: 2026-06-20 00:39:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_reclaim_apply_parameters","damon_reclaim_init","damon_reclaim_commit_inputs_store","damon_reclaim_turn","damon_reclaim_enabled_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"d47984e3-6b48-4ce7-945a-46a44139d9d8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-20 00:39:57 +0000 UTC FinishedAt: 2026-06-20 00:39:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_reclaim_apply_parameters","damon_reclaim_init","damon_reclaim_commit_inputs_store","damon_reclaim_turn","damon_reclaim_enabled_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"d47984e3-6b48-4ce7-945a-46a44139d9d8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-20 00:39:57 +0000 UTC FinishedAt: 2026-06-20 01:06:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_reclaim_apply_parameters","damon_reclaim_init","damon_reclaim_commit_inputs_store","damon_reclaim_turn","damon_reclaim_enabled_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"d47984e3-6b48-4ce7-945a-46a44139d9d8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-20 00:39:57 +0000 UTC FinishedAt: 2026-06-20 01:06:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b1c841a4-e0b2-416c-b279-8f3d4de1820f,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-workflow5wshz/series-workflow5wshz-convert-artifact-3420736334/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": "85529b74-c6de-4d3e-9a98-827b9adb9c4d", "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-workflow5wshz/series-workflow5wshz-build-action-3743083746/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5wshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_reclaim_apply_parameters","damon_reclaim_init","damon_reclaim_commit_inputs_store","damon_reclaim_turn","damon_reclaim_enabled_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"d47984e3-6b48-4ce7-945a-46a44139d9d8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-20 00:39:57 +0000 UTC FinishedAt: 2026-06-20 01:06:15 +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:*b1c841a4-e0b2-416c-b279-8f3d4de1820f,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-workflow5wshz/series-workflow5wshz-convert-artifact-3420736334/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": "85529b74-c6de-4d3e-9a98-827b9adb9c4d", "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-workflow5wshz/series-workflow5wshz-build-action-3743083746/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5wshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_reclaim_apply_parameters","damon_reclaim_init","damon_reclaim_commit_inputs_store","damon_reclaim_turn","damon_reclaim_enabled_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"d47984e3-6b48-4ce7-945a-46a44139d9d8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-20 01:06:25 +0000 UTC FinishedAt: 2026-06-20 01:06:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_reclaim_apply_parameters","damon_reclaim_init","damon_reclaim_commit_inputs_store","damon_reclaim_turn","damon_reclaim_enabled_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"d47984e3-6b48-4ce7-945a-46a44139d9d8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-20 01:06:25 +0000 UTC FinishedAt: 2026-06-20 01:06:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_reclaim_apply_parameters","damon_reclaim_init","damon_reclaim_commit_inputs_store","damon_reclaim_turn","damon_reclaim_enabled_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"d47984e3-6b48-4ce7-945a-46a44139d9d8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-20 01:06:25 +0000 UTC FinishedAt: 2026-06-20 01:08:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_reclaim_apply_parameters","damon_reclaim_init","damon_reclaim_commit_inputs_store","damon_reclaim_turn","damon_reclaim_enabled_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"d47984e3-6b48-4ce7-945a-46a44139d9d8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-20 01:06:25 +0000 UTC FinishedAt: 2026-06-20 01:08:42 +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:*85529b74-c6de-4d3e-9a98-827b9adb9c4d,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-workflow5wshz/series-workflow5wshz-build-action-3743083746/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-workflow5wshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_reclaim_apply_parameters","damon_reclaim_init","damon_reclaim_commit_inputs_store","damon_reclaim_turn","damon_reclaim_enabled_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"d47984e3-6b48-4ce7-945a-46a44139d9d8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-20 01:08:52 +0000 UTC FinishedAt: 2026-06-20 04:12:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_reclaim_apply_parameters","damon_reclaim_init","damon_reclaim_commit_inputs_store","damon_reclaim_turn","damon_reclaim_enabled_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"d47984e3-6b48-4ce7-945a-46a44139d9d8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-20 01:08:52 +0000 UTC FinishedAt: 2026-06-20 04:12:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_reclaim_apply_parameters","damon_reclaim_init","damon_reclaim_commit_inputs_store","damon_reclaim_turn","damon_reclaim_enabled_store"],"skip_cover_check":true},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:*1eed4103-5e66-4666-b30c-2243e2c2aa54,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*85529b74-c6de-4d3e-9a98-827b9adb9c4d,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-workflow5wshz/series-workflow5wshz-build-action-289328120/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-workflow5wshz/series-workflow5wshz-build-action-3743083746/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow5wshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_reclaim_apply_parameters","damon_reclaim_init","damon_reclaim_commit_inputs_store","damon_reclaim_turn","damon_reclaim_enabled_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"d47984e3-6b48-4ce7-945a-46a44139d9d8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-20 01:08:52 +0000 UTC FinishedAt: 2026-06-20 01:09:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_reclaim_apply_parameters","damon_reclaim_init","damon_reclaim_commit_inputs_store","damon_reclaim_turn","damon_reclaim_enabled_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"d47984e3-6b48-4ce7-945a-46a44139d9d8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-20 01:08:52 +0000 UTC FinishedAt: 2026-06-20 01:09:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_reclaim_apply_parameters","damon_reclaim_init","damon_reclaim_commit_inputs_store","damon_reclaim_turn","damon_reclaim_enabled_store"],"skip_cover_check":true},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-workflow5wshz/series-workflow5wshz-convert-artifact-2472759155/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5wshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_reclaim_apply_parameters","damon_reclaim_init","damon_reclaim_commit_inputs_store","damon_reclaim_turn","damon_reclaim_enabled_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"d47984e3-6b48-4ce7-945a-46a44139d9d8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-20 01:08:52 +0000 UTC FinishedAt: 2026-06-20 01:08:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_reclaim_apply_parameters","damon_reclaim_init","damon_reclaim_commit_inputs_store","damon_reclaim_turn","damon_reclaim_enabled_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"d47984e3-6b48-4ce7-945a-46a44139d9d8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-20 01:08:52 +0000 UTC FinishedAt: 2026-06-20 01:08:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_reclaim_apply_parameters","damon_reclaim_init","damon_reclaim_commit_inputs_store","damon_reclaim_turn","damon_reclaim_enabled_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"d47984e3-6b48-4ce7-945a-46a44139d9d8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-20 01:08:52 +0000 UTC FinishedAt: 2026-06-20 01:08:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_reclaim_apply_parameters","damon_reclaim_init","damon_reclaim_commit_inputs_store","damon_reclaim_turn","damon_reclaim_enabled_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"d47984e3-6b48-4ce7-945a-46a44139d9d8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-20 01:09:21 +0000 UTC FinishedAt: 2026-06-20 04:12:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5wshz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_reclaim_apply_parameters","damon_reclaim_init","damon_reclaim_commit_inputs_store","damon_reclaim_turn","damon_reclaim_enabled_store"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cdad4d4e4fc2e5acb9a8b2cac9af6ce87c92656f","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM"],"series_id":"d47984e3-6b48-4ce7-945a-46a44139d9d8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-20 01:09:21 +0000 UTC FinishedAt: 2026-06-20 04:12:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1eed4103-5e66-4666-b30c-2243e2c2aa54,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*85529b74-c6de-4d3e-9a98-827b9adb9c4d,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-workflow5wshz/series-workflow5wshz-build-action-289328120/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-workflow5wshz/series-workflow5wshz-build-action-3743083746/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-workflow5wshz/series-workflow5wshz-convert-artifact-2472759155/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,}