Name: series-workflowgv4ct Phase: Succeeded StartedAt: 2026-08-31 20:20:58 +0000 UTC FinishedAt: 2026-08-31 22:27:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv4ct[0] Phase: Succeeded StartedAt: 2026-08-31 20:20:58 +0000 UTC FinishedAt: 2026-08-31 20:46:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv4ct[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 20:20:58 +0000 UTC FinishedAt: 2026-08-31 20:46:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "881dc9dd66d2367e7fe1be0f953a8837cb3b26a9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "WLAN", "WLAN_VENDOR_RSI", "RSI_91X", "RSI_USB", "MAC80211", "USB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "881dc9dd66d2367e7fe1be0f953a8837cb3b26a9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "WLAN", "WLAN_VENDOR_RSI", "RSI_91X", "RSI_USB", "MAC80211", "USB" ], "series_id": "a2818165-0bcc-4e1f-9e41-ae6efb2e1020" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rsi_hal_load_key", "rsi_mac80211_set_key" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1dMQU4mIzM0OywKICAgICYjMzQ7V0xBTl9WRU5ET1JfUlNJJiMzNDssCiAgICAmIzM0O1JTSV85MVgmIzM0OywKICAgICYjMzQ7UlNJX1VTQiYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyc2lfaGFsX2xvYWRfa2V5JiMzNDssCiAgICAmIzM0O3JzaV9tYWM4MDIxMV9zZXRfa2V5JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGJ1ZyBpbiByc2lfaGFsX2xvYWRfa2V5KCkgd2hlcmUgOC1ieXRlIFRYIGFuZCBSWCBNSUMga2V5cyB3ZXJlIHVuY29uZGl0aW9uYWxseSByZWFkIGZyb20gXHUwMDI2ZGF0YVsxNl0gYW5kIFx1MDAyNmRhdGFbMjRdLCBldmVuIHdoZW4gdGhlIGNpcGhlciBzdWl0ZSB3YXMgbm90IFRLSVAgKHN1Y2ggYXMgQ0NNUC9BRVMgd2hlcmUgdGhlIGtleSBidWZmZXIgaXMgb25seSAxNiBieXRlcyBsb25nKS5cblxuMS4gS0FTQU4gYXBwbGljYWJpbGl0eTogT3V0LW9mLWJvdW5kcyByZWFkcyBvbiBoZWFwIG9yIHN0YWNrIGJ1ZmZlcnMgKHN1Y2ggYXMgYWNjZXNzaW5nIHBhc3QgdGhlIDE2LWJ5dGUga2V5IGJ1ZmZlcikgYXJlIGRpcmVjdGx5IGRldGVjdGFibGUgYnkgS0FTQU4uXG4yLiBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgZnJhbWUgYnVmZmVyIGluIHRoZSBza2IgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZCB1cGZyb250IHZpYSBgbWVtc2V0KHNrYi1cdTAwM2VkYXRhLCAwLCBmcmFtZV9sZW4pYC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LlxuXG5TaW5jZSB0aGUgaXNzdWUgaXMgc3RyaWN0bHkgYW4gb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzIGNhdWdodCBieSBLQVNBTiBhbmQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIG1lbW9yeSByZWFkIGJ1ZyBpbiByc2lfaGFsX2xvYWRfa2V5IGJ5IHJlc3RyaWN0aW5nIGNvcHlpbmcgb2YgdGhlIFRYIGFuZCBSWCBNSUMga2V5cyBmcm9tIHRoZSBkYXRhIGJ1ZmZlciB0byBvbmx5IHdoZW4gdGhlIGNpcGhlciBzdWl0ZSBpcyBXTEFOX0NJUEhFUl9TVUlURV9US0lQIChwcmV2ZW50aW5nIE9PQiByZWFkcyBmb3Iga2V5IGxlbmd0aHMgc2hvcnRlciB0aGFuIDMyIGJ5dGVzIGxpa2UgQUVTL0NDTVApLiBUaGlzIGRyaXZlciBsb2dpYyBpcyByZWFjaGFibGUgdmlhIG1hYzgwMjExIHNldF9rZXkgY2FsbGJhY2tzIHdpdGggZW11bGF0ZWQgVVNCIGRldmljZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkMzlkMjJmNWVkNmViMTVhMDQ1MzIzOWY0YmEwMjQ2YWYxYzg1OWFhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMjA6Mzk6MzkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jXG5pbmRleCA3ZjJjMTYwOGYyY2UzLi4yZGRmNGQxNThiZmUzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tZ210LmNcbkBAIC04NDgsOCAmIzQzOzg0OCwxMCBAQCBpbnQgcnNpX2hhbF9sb2FkX2tleShzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLFxuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdG1lbWNweShcdTAwMjZzZXRfa2V5LVx1MDAzZWtleVswXVswXSwgZGF0YSwga2V5X2xlbik7XG4gXHRcdH1cbi1cdFx0bWVtY3B5KHNldF9rZXktXHUwMDNldHhfbWljX2tleSwgXHUwMDI2ZGF0YVsxNl0sIDgpO1xuLVx0XHRtZW1jcHkoc2V0X2tleS1cdTAwM2VyeF9taWNfa2V5LCBcdTAwMjZkYXRhWzI0XSwgOCk7XG4mIzQzO1x0XHRpZiAoY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVApIHtcbiYjNDM7XHRcdFx0bWVtY3B5KHNldF9rZXktXHUwMDNldHhfbWljX2tleSwgXHUwMDI2ZGF0YVsxNl0sIDgpO1xuJiM0MztcdFx0XHRtZW1jcHkoc2V0X2tleS1cdTAwM2VyeF9taWNfa2V5LCBcdTAwMjZkYXRhWzI0XSwgOCk7XG4mIzQzO1x0XHR9XG4gXHR9IGVsc2Uge1xuIFx0XHRtZW1zZXQoXHUwMDI2c2V0X2tleVtGUkFNRV9ERVNDX1NaXSwgMCwgZnJhbWVfbGVuIC0gRlJBTUVfREVTQ19TWik7XG4gXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6Mzk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7V0xBTiYjMzQ7LAogICAgJiMzNDtXTEFOX1ZFTkRPUl9SU0kmIzM0OywKICAgICYjMzQ7UlNJXzkxWCYjMzQ7LAogICAgJiMzNDtSU0lfVVNCJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JzaV9oYWxfbG9hZF9rZXkmIzM0OywKICAgICYjMzQ7cnNpX21hYzgwMjExX3NldF9rZXkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyBtZW1vcnkgcmVhZCBidWcgaW4gcnNpX2hhbF9sb2FkX2tleSBieSByZXN0cmljdGluZyBjb3B5aW5nIG9mIHRoZSBUWCBhbmQgUlggTUlDIGtleXMgZnJvbSB0aGUgZGF0YSBidWZmZXIgdG8gb25seSB3aGVuIHRoZSBjaXBoZXIgc3VpdGUgaXMgV0xBTl9DSVBIRVJfU1VJVEVfVEtJUCAocHJldmVudGluZyBPT0IgcmVhZHMgZm9yIGtleSBsZW5ndGhzIHNob3J0ZXIgdGhhbiAzMiBieXRlcyBsaWtlIEFFUy9DQ01QKS4gVGhpcyBkcml2ZXIgbG9naWMgaXMgcmVhY2hhYmxlIHZpYSBtYWM4MDIxMSBzZXRfa2V5IGNhbGxiYWNrcyB3aXRoIGVtdWxhdGVkIFVTQiBkZXZpY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDM5ZDIyZjVlZDZlYjE1YTA0NTMyMzlmNGJhMDI0NmFmMWM4NTlhYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDIwOjM5OjM5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jCmluZGV4IDdmMmMxNjA4ZjJjZTMuLjJkZGY0ZDE1OGJmZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tZ210LmMKQEAgLTg0OCw4ICYjNDM7ODQ4LDEwIEBAIGludCByc2lfaGFsX2xvYWRfa2V5KHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sCiAJCX0gZWxzZSB7CiAJCQltZW1jcHkoJmFtcDtzZXRfa2V5LSZndDtrZXlbMF1bMF0sIGRhdGEsIGtleV9sZW4pOwogCQl9Ci0JCW1lbWNweShzZXRfa2V5LSZndDt0eF9taWNfa2V5LCAmYW1wO2RhdGFbMTZdLCA4KTsKLQkJbWVtY3B5KHNldF9rZXktJmd0O3J4X21pY19rZXksICZhbXA7ZGF0YVsyNF0sIDgpOwomIzQzOwkJaWYgKGNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9US0lQKSB7CiYjNDM7CQkJbWVtY3B5KHNldF9rZXktJmd0O3R4X21pY19rZXksICZhbXA7ZGF0YVsxNl0sIDgpOwomIzQzOwkJCW1lbWNweShzZXRfa2V5LSZndDtyeF9taWNfa2V5LCAmYW1wO2RhdGFbMjRdLCA4KTsKJiM0MzsJCX0KIAl9IGVsc2UgewogCQltZW1zZXQoJmFtcDtzZXRfa2V5W0ZSQU1FX0RFU0NfU1pdLCAwLCBmcmFtZV9sZW4gLSBGUkFNRV9ERVNDX1NaKTsKIAl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgV2lyZWxlc3MgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIGBkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tZ210LmNgLiBUaGUgc3BlY2lmaWMgZnVuY3Rpb24gYmVpbmcgbW9kaWZpZWQgaXMgYHJzaV9oYWxfbG9hZF9rZXlgLiBSaWdodCwgc28gdGhpcyBpcyBhYm91dCBSZWRwaW5lIFNpZ25hbHMgSW5jLCB0aGVpciA5MXggd2lyZWxlc3MgZHJpdmVyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGRldmljZXMgc3VwcG9ydGVkOyBVU0IsIFNESU8sIHByb2JhYmx5IG1vcmUuIFRoZSBrZXkgcXVlc3Rpb24gbm93IGlzLCBjYW4gSSByZWFjaCB0aGlzIGRyaXZlciBvciBkZXZpY2UgdGhyb3VnaCBVU0IgUmF3IEdhZGdldCBvciBzeXprYWxsZXImIzM5O3MgVVNCIGdhZGdldCBlbXVsYXRpb24/IFdvcnRoIGludmVzdGlnYXRpbmcuCgpMZXQmIzM5O3Mgc2VlLCB3aGF0JiMzOTtzIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvYCBjb25jZXJuaW5nIFVTQj8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIGBncmVwcGVyYCBzZWFyY2ggb3IganVzdCBzdGFydCByZWFkaW5nIHRoZSBmaWxlcyBkaXJlY3RseS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGF0dGFjayBzdXJmYWNlIGhlcmUgYW5kIGlmIHRoaXMgaXMgYSB2aWFibGUgdGFyZ2V0IGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JzaV85MXhfbWdtdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvTWFrZWZpbGU9ND1yc2lfOTF4LXlcdFx0XHQmIzQzOz0gcnNpXzkxeF9tYWM4MDIxMS5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvTWFrZWZpbGU6NTpyc2lfOTF4LXlcdFx0XHQmIzQzOz0gcnNpXzkxeF9tZ210Lm9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9NYWtlZmlsZS02LXJzaV85MXgteVx0XHRcdCYjNDM7PSByc2lfOTF4X2hhbC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY3NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhhdCBwcm9ibGVtLCBhcyB0aG91Z2ggaXQgd2VyZSBteSBvd24gdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgUlNJIERyaXZlciBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgUlNJIHdpcmVsZXNzIGRyaXZlciBpcyBjb25maWd1cmVkIGFuZCB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZS4gVGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHRoYXQsIGVzcGVjaWFsbHkgd2l0aGluIGEgTGludXgga2VybmVsIGNvbnRleHQsIGlzIGFsbW9zdCBhbHdheXMgdGhlIGBLY29uZmlnYCBmaWxlLiBJJiMzOTtsbCBnbyBzdHJhaWdodCB0byBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL2Ag4oCTIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgZHJpdmVyIHNvdXJjZSBhbmQsIGNyaXRpY2FsbHksIGl0cyBjb25maWd1cmF0aW9uIG1lY2hhbmlzbS4gVGhlIEtjb25maWcgZmlsZSBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZHJpdmVyIGlzIGJ1aWx0IGludG8gdGhlIGtlcm5lbCBvciBhcyBhIG1vZHVsZSwgYW5kIHdoYXQgYnVpbGQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hldGhlciB0aGlzIHBhcnRpY3VsYXIgUlNJIGRyaXZlciBzdXBwb3J0cyBkaWZmZXJlbnQgaGFyZHdhcmUgaW50ZXJmYWNlcyBsaWtlIFVTQiBhbmQgU0RJTywgb3IgcGVyaGFwcyBldmVuIG90aGVycyB0aGF0IEkgbWlnaHQgbm90IGJlIGltbWVkaWF0ZWx5IGF3YXJlIG9mLiBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgY29uZmlndXJhYmxlIGR1cmluZyB0aGUgYnVpbGQgcHJvY2Vzcy4gRnJvbSBoZXJlIEkgY2FuIHN0YXJ0IG1ha2luZyBkZWR1Y3Rpb25zIG9uIGhvdyB0byBtYW5pcHVsYXRlIGl0IHRvIGZpdCBvdXIgbmVlZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBXTEFOX1ZFTkRPUl9SU0lcbiAgIDM6XHRcdGJvb2wgXCYjMzQ7UmVkcGluZSBTaWduYWxzIEluYyBkZXZpY2VzXCYjMzQ7XG4gICA0Olx0XHRkZWZhdWx0IHlcbiAgIDU6XHRcdGhlbHBcbiAgIDY6XHRcdCAgSWYgeW91IGhhdmUgYSB3aXJlbGVzcyBjYXJkIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS5cbiAgIDc6XHRcbiAgIDg6XHRcdCAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2VzbiYjMzk7dCBkaXJlY3RseSBhZmZlY3QgdGhlXG4gICA5Olx0XHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGwgdGhlXG4gIDEwOlx0XHQgIHF1ZXN0aW9ucyBhYm91dCB0aGVzZSBjYXJkcy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZSBhc2tlZCBmb3JcbiAgMTE6XHRcdCAgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxuICAxMjpcdFxuICAxMzpcdGlmIFdMQU5fVkVORE9SX1JTSVxuICAxNDpcdFxuICAxNTpcdGNvbmZpZyBSU0lfOTFYXG4gIDE2Olx0XHR0cmlzdGF0ZSBcJiMzNDtSZWRwaW5lIFNpZ25hbHMgSW5jIDkxeCBXTEFOIGRyaXZlciBzdXBwb3J0XCYjMzQ7XG4gIDE3Olx0XHRzZWxlY3QgQlRfSENJUlNJIGlmIFJTSV9DT0VYXG4gIDE4Olx0XHRkZXBlbmRzIG9uIE1BQzgwMjExXG4gIDE5Olx0XHRoZWxwXG4gIDIwOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJlcyBzdXBwb3J0IGZvciBSU0kgMXgxIGRldmljZXMuXG4gIDIxOlx0XHQgIFNlbGVjdCBNIChyZWNvbW1lbmRlZCksIGlmIHlvdSBoYXZlIGEgUlNJIDF4MSB3aXJlbGVzcyBtb2R1bGUuXG4gIDIyOlx0XG4gIDIzOlx0Y29uZmlnIFJTSV9ERUJVR0ZTXG4gIDI0Olx0XHRib29sIFwmIzM0O1JlZHBpbmUgU2lnbmFscyBJbmMgZGVidWcgc3VwcG9ydFwmIzM0O1xuICAyNTpcdFx0ZGVwZW5kcyBvbiBSU0lfOTFYXG4gIDI2Olx0XHRkZWZhdWx0IHlcbiAgMjc6XHRcdGhlbHBcbiAgMjg6XHRcdCBTYXkgWSwgaWYgeW91IHdvdWxkIGxpa2UgdG8gZW5hYmxlIGRlYnVnIHN1cHBvcnQuIFRoaXMgb3B0aW9uXG4gIDI5Olx0XHQgY3JlYXRlcyBkZWJ1Z2ZzIGVudHJpZXNcbiAgMzA6XHRcbiAgMzE6XHRjb25maWcgUlNJX1NESU9cbiAgMzI6XHRcdHRyaXN0YXRlIFwmIzM0O1JlZHBpbmUgU2lnbmFscyBTRElPIGJ1cyBzdXBwb3J0XCYjMzQ7XG4gIDMzOlx0XHRkZXBlbmRzIG9uIE1NQyBcdTAwMjZcdTAwMjYgUlNJXzkxWFxuICAzNDpcdFx0ZGVmYXVsdCBtXG4gIDM1Olx0XHRoZWxwXG4gIDM2Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFNESU8gYnVzIHN1cHBvcnQgaW4gcnNpIGRyaXZlcnMuXG4gIDM3Olx0XHQgIFNlbGVjdCBNIChyZWNvbW1lbmRlZCksIGlmIHlvdSBoYXZlIGEgUlNJIDF4MSB3aXJlbGVzcyBtb2R1bGUuXG4gIDM4Olx0XG4gIDM5Olx0Y29uZmlnIFJTSV9VU0JcbiAgNDA6XHRcdHRyaXN0YXRlIFwmIzM0O1JlZHBpbmUgU2lnbmFscyBVU0IgYnVzIHN1cHBvcnRcJiMzNDtcbiAgNDE6XHRcdGRlcGVuZHMgb24gVVNCIFx1MDAyNlx1MDAyNiBSU0lfOTFYXG4gIDQyOlx0XHRkZWZhdWx0IG1cbiAgNDM6XHRcdGhlbHBcbiAgNDQ6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgVVNCIGJ1cyBzdXBwb3J0IGluIHJzaSBkcml2ZXJzLlxuICA0NTpcdFx0ICBTZWxlY3QgTSAocmVjb21tZW5kZWQpLCBpZiB5b3UgaGF2ZSBhIFJTSSAxeDEgd2lyZWxlc3MgbW9kdWxlLlxuICA0NjpcdFxuICA0NzpcdGNvbmZpZyBSU0lfQ09FWFxuICA0ODpcdFx0Ym9vbCBcJiMzNDtSZWRwaW5lIFNpZ25hbHMgV0xBTiBCVCBDb2V4aXN0ZW5jZSBzdXBwb3J0XCYjMzQ7XG4gIDQ5Olx0XHRkZXBlbmRzIG9uIEJUIFx1MDAyNlx1MDAyNiBSU0lfOTFYXG4gIDUwOlx0XHRkZXBlbmRzIG9uICEoQlQ9bSBcdTAwMjZcdTAwMjYgUlNJXzkxWD15KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NTAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFVTQiBEcml2ZXIgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gYFJTSV9VU0JgIGlzIHRoZSBrZXksIG1lYW5pbmcgdGhlIGNvZGUgdXNlcyB0aGUgVVNCIGJ1cyAoYENPTkZJR19SU0lfVVNCYCwgYENPTkZJR19SU0lfOTFYYCkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleHBsb3JlIHRoZSBVU0IgZHJpdmVycywgYW5kIEkga25vdyB0aGF0IEkgY2FuIGxldmVyYWdlIHRoZSBVU0IgUmF3IEdhZGdldCBvciBzeXprYWxsZXIgZnV6emluZywgZXNwZWNpYWxseSB3aXRoaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhhdCB3b3VsZCBhbGxvdyBmb3IgZW11bGF0aW9uIGFuZCBtb3JlIHJvYnVzdCB0ZXN0aW5nLiBCdXQgYmVmb3JlIEkgZGl2ZSBpbnRvIGFueSBvZiB0aGF0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhIHNwZWNpZmljIGZ1bmN0aW9uIGNhbGw6IGByc2lfaGFsX2xvYWRfa2V5YC4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBiZWluZyB1c2VkLiBUaW1lIHRvIGdyZXAgZm9yIGByc2lfaGFsX2xvYWRfa2V5YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgb2YgdGhhdCBmdW5jdGlvbiB0byBjb250aW51ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyc2lfaGFsX2xvYWRfa2V5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM9OTc2PXN0YXRpYyBpbnQgcnNpX2hhbF9rZXlfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTAwNS1cdFx0ICAgIChrZXktXHUwMDNlY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwKSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoxMDA2Olx0XHRcdHN0YXR1cyA9IHJzaV9oYWxfbG9hZF9rZXkoYWRhcHRlci1cdTAwM2Vwcml2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xMDA3LVx0XHRcdFx0XHRcdCAga2V5LVx1MDAzZWtleSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTEwMTgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjEwMTk6XHRzdGF0dXMgPSByc2lfaGFsX2xvYWRfa2V5KGFkYXB0ZXItXHUwMDNlcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTAyMC1cdFx0XHRcdCAga2V5LVx1MDAzZWtleSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jPTE0MjI9c3RhdGljIGludCByc2lfbWFjODAyMTFfc3RhX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTE0OTQtXHRcdFx0XHQgICAgKGtleS1cdTAwM2VjaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDApKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoxNDk1Olx0XHRcdFx0XHRyc2lfaGFsX2xvYWRfa2V5KGFkYXB0ZXItXHUwMDNlcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTQ5Ni1cdFx0XHRcdFx0XHRcdCBrZXktXHUwMDNla2V5LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYz03MTE9aW50IHJzaV9zZXRfdmFwX2NhcGFiaWxpdGllcyhzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYy03ODAtLyoqXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tZ210LmM6NzgxOiAqIHJzaV9oYWxfbG9hZF9rZXkoKSAtIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBsb2FkIGtleXMgd2l0aGluIHRoZSBmaXJtd2FyZS5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYy03ODItICogQGNvbW1vbjogUG9pbnRlciB0byB0aGUgZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlLlxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYy03OTItICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tZ210LmM6NzkzOmludCByc2lfaGFsX2xvYWRfa2V5KHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tZ210LmMtNzk0LVx0XHQgICAgIHU4ICpkYXRhLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfbWdtdC5oPTcxNz1pbnQgcnNpX3NlbmRfYWdncmVnYXRpb25fcGFyYW1zX2ZyYW1lKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sIHUxNiB0aWQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9tZ210LmgtNzE5LVx0XHRcdFx0ICAgICAgdTggc3RhX2lkKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfbWdtdC5oOjcyMDppbnQgcnNpX2hhbF9sb2FkX2tleShzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCB1OCAqZGF0YSwgdTE2IGtleV9sZW4sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX21nbXQuaC03MjEtXHRcdCAgICAgdTgga2V5X3R5cGUsIHU4IGtleV9pZCwgdTMyIGNpcGhlciwgczE2IHN0YV9pZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODQ3CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIENvZGU6IFVuZGVyc3RhbmRpbmcgdGhlIEtleSBDaGFuZ2UqKgoKT2theSwgc28gd2UmIzM5O3ZlIGdvdCBhIG1vZGlmaWNhdGlvbiBoZXJlLCBhbmQgbXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGJlaGluZCB0aGlzLiBUaGUgYmVzdCBhcHByb2FjaCBpcyB0byBleGFtaW5lIGByc2lfaGFsX2xvYWRfa2V5YCBhbmQgYHJzaV9oYWxfa2V5X2NvbmZpZ2AuIExvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dHVhbCBjbHVlcyBJIG5lZWQuIFNwZWNpZmljYWxseSwgYnkgcmV2aWV3aW5nIHRoZXNlLCBJJiMzOTttIGV4cGVjdGluZyB0byBnYWluIGluc2lnaHRzIGludG8gaG93IHRoZSBrZXkgbG9hZGluZyBwcm9jZXNzIGZ1bmN0aW9ucyB3aXRoaW4gdGhpcyBzcGVjaWZpYyBIQUwgKEhhcmR3YXJlIEFic3RyYWN0aW9uIExheWVyKS4gSSBhbnRpY2lwYXRlIGZpbmRpbmcgb3V0IHdoYXQgdGhlIGtleSBsb2FkaW5nIHJvdXRpbmVzIGRvLCB0aGUgY29uZmlnIHJlcXVpcmVtZW50cywgYW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgbW9kaWZpY2F0aW9uIHBsYXlzIGludG8gdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlLiBIb3BlZnVsbHkgSSBjYW4gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBjaGFuZ2Ugd2l0aCB0aGlzIGFwcHJvYWNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzkwOlx0ICpcbiA3OTE6XHQgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZS5cbiA3OTI6XHQgKi9cbiA3OTM6XHRpbnQgcnNpX2hhbF9sb2FkX2tleShzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLFxuIDc5NDpcdFx0XHQgICAgIHU4ICpkYXRhLFxuIDc5NTpcdFx0XHQgICAgIHUxNiBrZXlfbGVuLFxuIDc5NjpcdFx0XHQgICAgIHU4IGtleV90eXBlLFxuIDc5NzpcdFx0XHQgICAgIHU4IGtleV9pZCxcbiA3OTg6XHRcdFx0ICAgICB1MzIgY2lwaGVyLFxuIDc5OTpcdFx0XHQgICAgIHMxNiBzdGFfaWQsXG4gODAwOlx0XHRcdCAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZilcbiA4MDE6XHR7XG4gODAyOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcbiA4MDM6XHRcdHN0cnVjdCByc2lfc2V0X2tleSAqc2V0X2tleTtcbiA4MDQ6XHRcdHUxNiBrZXlfZGVzY3JpcHRvciA9IDA7XG4gODA1Olx0XHR1MTYgZnJhbWVfbGVuID0gc2l6ZW9mKHN0cnVjdCByc2lfc2V0X2tleSk7XG4gODA2Olx0XG4gODA3Olx0XHRyc2lfZGJnKE1HTVRfVFhfWk9ORSwgXCYjMzQ7JXM6IFNlbmRpbmcgbG9hZCBrZXkgZnJhbWVcXG5cJiMzNDssIF9fZnVuY19fKTtcbiA4MDg6XHRcbiA4MDk6XHRcdHNrYiA9IGRldl9hbGxvY19za2IoZnJhbWVfbGVuKTtcbiA4MTA6XHRcdGlmICghc2tiKSB7XG4gODExOlx0XHRcdHJzaV9kYmcoRVJSX1pPTkUsIFwmIzM0OyVzOiBGYWlsZWQgaW4gYWxsb2NhdGlvbiBvZiBza2JcXG5cJiMzNDssXG4gODEyOlx0XHRcdFx0X19mdW5jX18pO1xuIDgxMzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA4MTQ6XHRcdH1cbiA4MTU6XHRcbiA4MTY6XHRcdG1lbXNldChza2ItXHUwMDNlZGF0YSwgMCwgZnJhbWVfbGVuKTtcbiA4MTc6XHRcdHNldF9rZXkgPSAoc3RydWN0IHJzaV9zZXRfa2V5ICopc2tiLVx1MDAzZWRhdGE7XG4gODE4Olx0XG4gODE5Olx0XHRpZiAoa2V5X3R5cGUgPT0gUlNJX0dST1VQX0tFWSkge1xuIDgyMDpcdFx0XHRrZXlfZGVzY3JpcHRvciA9IFJTSV9LRVlfVFlQRV9CUk9BRENBU1Q7XG4gODIxOlx0XHRcdGlmICh2aWYtXHUwMDNldHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUClcbiA4MjI6XHRcdFx0XHRrZXlfZGVzY3JpcHRvciB8PSBSU0lfS0VZX01PREVfQVA7XG4gODIzOlx0XHR9XG4gODI0Olx0XHRpZiAoKGNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MCkgfHxcbiA4MjU6XHRcdCAgICAoY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNCkpIHtcbiA4MjY6XHRcdFx0a2V5X2lkID0gMDtcbiA4Mjc6XHRcdFx0a2V5X2Rlc2NyaXB0b3IgfD0gUlNJX1dFUF9LRVk7XG4gODI4Olx0XHRcdGlmIChrZXlfbGVuIFx1MDAzZT0gMTMpXG4gODI5Olx0XHRcdFx0a2V5X2Rlc2NyaXB0b3IgfD0gUlNJX1dFUF9LRVlfMTA0O1xuIDgzMDpcdFx0fSBlbHNlIGlmIChjaXBoZXIgIT0gS0VZX1RZUEVfQ0xFQVIpIHtcbiA4MzE6XHRcdFx0a2V5X2Rlc2NyaXB0b3IgfD0gUlNJX0NJUEhFUl9XUEE7XG4gODMyOlx0XHRcdGlmIChjaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfVEtJUClcbiA4MzM6XHRcdFx0XHRrZXlfZGVzY3JpcHRvciB8PSBSU0lfQ0lQSEVSX1RLSVA7XG4gODM0Olx0XHR9XG4gODM1Olx0XHRrZXlfZGVzY3JpcHRvciB8PSBSU0lfUFJPVEVDVF9EQVRBX0ZSQU1FUztcbiA4MzY6XHRcdGtleV9kZXNjcmlwdG9yIHw9IChrZXlfaWQgXHUwMDNjXHUwMDNjIFJTSV9LRVlfSURfT0ZGU0VUKTtcbiA4Mzc6XHRcbiA4Mzg6XHRcdHJzaV9zZXRfbGVuX3FubyhcdTAwMjZzZXRfa2V5LVx1MDAzZWRlc2NfZHdvcmQwLmxlbl9xbm8sXG4gODM5Olx0XHRcdFx0KGZyYW1lX2xlbiAtIEZSQU1FX0RFU0NfU1opLCBSU0lfV0lGSV9NR01UX1EpO1xuIDg0MDpcdFx0c2V0X2tleS1cdTAwM2VkZXNjX2R3b3JkMC5mcmFtZV90eXBlID0gU0VUX0tFWV9SRVE7XG4gODQxOlx0XHRzZXRfa2V5LVx1MDAzZWtleV9kZXNjID0gY3B1X3RvX2xlMTYoa2V5X2Rlc2NyaXB0b3IpO1xuIDg0MjpcdFx0c2V0X2tleS1cdTAwM2VzdGFfaWQgPSBzdGFfaWQ7XG4gODQzOlx0XG4gODQ0Olx0XHRpZiAoZGF0YSkge1xuIDg0NTpcdFx0XHRpZiAoKGNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MCkgfHxcbiA4NDY6XHRcdFx0ICAgIChjaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0KSkge1xuIDg0NzpcdFx0XHRcdG1lbWNweShcdTAwMjZzZXRfa2V5LVx1MDAzZWtleVtrZXlfaWRdWzFdLCBkYXRhLCBrZXlfbGVuICogMik7XG4gODQ4Olx0XHRcdH0gZWxzZSB7XG4gODQ5Olx0XHRcdFx0bWVtY3B5KFx1MDAyNnNldF9rZXktXHUwMDNla2V5WzBdWzBdLCBkYXRhLCBrZXlfbGVuKTtcbiA4NTA6XHRcdFx0fVxuIDg1MTpcdFx0XHRpZiAoY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVApIHtcbiA4NTI6XHRcdFx0XHRtZW1jcHkoc2V0X2tleS1cdTAwM2V0eF9taWNfa2V5LCBcdTAwMjZkYXRhWzE2XSwgOCk7XG4gODUzOlx0XHRcdFx0bWVtY3B5KHNldF9rZXktXHUwMDNlcnhfbWljX2tleSwgXHUwMDI2ZGF0YVsyNF0sIDgpO1xuIDg1NDpcdFx0XHR9XG4gODU1Olx0XHR9IGVsc2Uge1xuIDg1NjpcdFx0XHRtZW1zZXQoXHUwMDI2c2V0X2tleVtGUkFNRV9ERVNDX1NaXSwgMCwgZnJhbWVfbGVuIC0gRlJBTUVfREVTQ19TWik7XG4gODU3Olx0XHR9XG4gODU4Olx0XG4gODU5Olx0XHRza2JfcHV0KHNrYiwgZnJhbWVfbGVuKTtcbiA4NjA6XHRcbiA4NjE6XHRcdHJldHVybiByc2lfc2VuZF9pbnRlcm5hbF9tZ210X2ZyYW1lKGNvbW1vbiwgc2tiKTtcbiA4NjI6XHR9XG4gODYzOlx0XG4gODY0Olx0LypcbiA4NjU6XHQgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIHRoZSBjb21tb24gZGV2aWNlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB0byBkZXZpY2UuXG4gODY2Olx0ICogVGhpcyBmcmFtZSBpbmNsdWRlcyB0aGUgdXNlZnVsIGluZm9ybWF0aW9uIHRvIG1ha2UgZGV2aWNlIHdvcmtzIG9uXG4gODY3Olx0ICogc3BlY2lmaWMgb3BlcmF0aW5nIG1vZGUuXG4gODY4Olx0ICovXG4gODY5Olx0c3RhdGljIGludCByc2lfc2VuZF9jb21tb25fZGV2X3BhcmFtcyhzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDgyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgcnNpYCBLZXJuZWwgRHJpdmVyIEJ1Z2ZpeCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgYmVmb3JlIHRoZSBmaXgsIHRoZSBjb2RlIHdhcyBtYWtpbmcgdW5jb25kaXRpb25hbCBgbWVtY3B5YCBjYWxsczogYG1lbWNweShzZXRfa2V5LSZndDt0eF9taWNfa2V5LCAmYW1wO2RhdGFbMTZdLCA4KTtgIGFuZCBgbWVtY3B5KHNldF9rZXktJmd0O3J4X21pY19rZXksICZhbXA7ZGF0YVsyNF0sIDgpO2AuIFRoaXMgd2FzIHByb2JsZW1hdGljLiBUaGUgaXNzdWUgd2FzIHRoYXQgdGhlIGNvZGUgd2FzIGFzc3VtaW5nIGEgbWluaW11bSBkYXRhIHNpemUgKHNwZWNpZmljYWxseSwgdGhhdCBgZGF0YWAgd2FzIGF0IGxlYXN0IDMyIGJ5dGVzIGxvbmcpLiBJdCBkaWQgdGhpcyByZWdhcmRsZXNzIG9mIHRoZSBhY3R1YWwga2V5IGxlbmd0aCAoYGtleV9sZW5gKSwgd2hpY2ggY2FuIGJlIHNtYWxsZXIgKGUuZy4sIDE2IGJ5dGVzIGZvciBDQ01QL0FFUykuIFNvLCBpZiBga2V5X2xlbmAgd2FzIGxlc3MgdGhhbiAzMiwgaXQgd2FzIGRlZmluaXRlbHkgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIHJlYWRzLiBDbGFzc2ljIG1lbW9yeSBjb3JydXB0aW9uIHZ1bG5lcmFiaWxpdHkhCgpUaGUgZml4LCB0aGFuayBnb29kbmVzcywgYWRkcmVzc2VzIHRoaXMgYnkgYWRkaW5nIGEgY3J1Y2lhbCBjaGVjazogYGlmIChjaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfVEtJUClgLiBUaGF0JiMzOTtzIGEgc29saWQgZGVmZW5zZS4gQnkgb25seSBleGVjdXRpbmcgdGhvc2UgYG1lbWNweWAgY2FsbHMgd2hlbiB0aGUgY2lwaGVyIHN1aXRlIGlzIFRLSVAsIGl0IGVmZmVjdGl2ZWx5IHByZXZlbnRzIHRoZSBvdXQtb2YtYm91bmRzIHJlYWRzIGZvciBvdGhlciBjaXBoZXJzIHdoZXJlIHRoZSBkYXRhIGxlbmd0aCBpcyBzaG9ydGVyLiBUaGlzIGlzIGEgbGVnaXRpbWF0ZSBidWdmaXggYW5kIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBvbmUgYXQgdGhhdC4gQSBnb29kIGZpbmQuCgpOb3csIG15IG1pbmQgaXMgYWxyZWFkeSB0aGlua2luZyBhYm91dCBleHBsb2l0YWJpbGl0eS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHJlYWNoYWJsZSB0aGlzIGlzLiBJIG5lZWQgdG8gc2VlIGlmIGByc2lfaGFsX2xvYWRfa2V5YCBpcyBzb21ldGhpbmcgSSBjYW4gdHJpZ2dlciBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciB1c2luZyBVU0IgZW11bGF0aW9uIHRvb2xzIGxpa2UgU3l6a2FsbGVyLiBIbW0sIGFuZCB0aGUgYHJzaV85MXhgIGRyaXZlciwgaXQgKmRvZXMqIGhhdmUgVVNCIGludGVyZmFjZSBzdXBwb3J0IGFjY29yZGluZyB0byBgQ09ORklHX1JTSV9VU0JgLiBPa2F5LCBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBVU0IgZGV2aWNlIHByb2JlIHdvcmtzIGZvciBSU0kuIFRoYXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JzaV9wcm9iZXxyc2lfdXNiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9NYWtlZmlsZT05PXJzaV85MXgtJChDT05GSUdfUlNJX0RFQlVHRlMpXHQmIzQzOz0gcnNpXzkxeF9kZWJ1Z2ZzLm9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9NYWtlZmlsZS0xMC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9NYWtlZmlsZToxMTpyc2lfdXNiLXlcdFx0XHQmIzQzOz0gcnNpXzkxeF91c2IubyByc2lfOTF4X3VzYl9vcHMub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL01ha2VmaWxlLTEyLXJzaV9zZGlvLXlcdFx0XHQmIzQzOz0gcnNpXzkxeF9zZGlvLm8gcnNpXzkxeF9zZGlvX29wcy5vXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL01ha2VmaWxlPTE0PW9iai0kKENPTkZJR19SU0lfU0RJTylcdFx0JiM0Mzs9IHJzaV9zZGlvLm9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9NYWtlZmlsZToxNTpvYmotJChDT05GSUdfUlNJX1VTQilcdFx0JiM0Mzs9IHJzaV91c2Iub1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uYy0yNS0jaW5jbHVkZSBcJiMzNDtyc2lfaGFsLmhcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uYzoyNjojaW5jbHVkZSBcJiMzNDtyc2lfdXNiLmhcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uYy0yNy1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9zZGlvLmM9OTc5PXN0YXRpYyBzdHJ1Y3QgcnNpX2hvc3RfaW50Zl9vcHMgc2Rpb19ob3N0X2ludGZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3NkaW8uYy05OTItLyoqXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9zZGlvLmM6OTkzOiAqIHJzaV9wcm9iZSgpIC0gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkga2VybmVsIHdoZW4gdGhlIGRyaXZlciBwcm92aWRlZFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfc2Rpby5jLTk5NC0gKlx0XHQgVmVuZG9yIGFuZCBkZXZpY2UgSURzIGFyZSBtYXRjaGVkLiBBbGwgdGhlIGluaXRpYWxpemF0aW9uXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfc2Rpby5jLTEwMDAtICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9zZGlvLmM6MTAwMTpzdGF0aWMgaW50IHJzaV9wcm9iZShzdHJ1Y3Qgc2Rpb19mdW5jICpwZnVuY3Rpb24sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9zZGlvLmMtMTAwMi1cdFx0ICAgICBjb25zdCBzdHJ1Y3Qgc2Rpb19kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3NkaW8uYz0xNTA5PXN0YXRpYyBzdHJ1Y3Qgc2Rpb19kcml2ZXIgcnNpX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3NkaW8uYy0xNTEwLVx0Lm5hbWUgICAgICAgPSBcJiMzNDtSU0ktU0RJTyBXTEFOXCYjMzQ7LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfc2Rpby5jOjE1MTE6XHQucHJvYmUgICAgICA9IHJzaV9wcm9iZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3NkaW8uYy0xNTEyLVx0LnJlbW92ZSAgICAgPSByc2lfZGlzY29ubmVjdCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy0yMC0jaW5jbHVkZSBcdTAwM2NuZXQvcnNpXzkxeC5oXHUwMDNlXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzoyMTojaW5jbHVkZSBcJiMzNDtyc2lfdXNiLmhcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTIyLSNpbmNsdWRlIFwmIzM0O3JzaV9oYWwuaFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jPTMwPXN0YXRpYyBpbnQgcnNpX3J4X3VyYl9zdWJtaXQoc3RydWN0IHJzaV9odyAqYWRhcHRlciwgdTggZXBfbnVtLCBnZnBfdCBmbGFncyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtMzItLyoqXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzozMzogKiByc2lfdXNiX2NhcmRfd3JpdGUoKSAtIFRoaXMgZnVuY3Rpb24gd3JpdGVzIHRvIHRoZSBVU0IgQ2FyZC5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTM0LSAqIEBhZGFwdGVyOiBQb2ludGVyIHRvIHRoZSBhZGFwdGVyIHN0cnVjdHVyZS5cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy00MC0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjQxOnN0YXRpYyBpbnQgcnNpX3VzYl9jYXJkX3dyaXRlKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy00Mi1cdFx0XHQgICAgICB1OCAqYnVmLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jPTgxPXN0YXRpYyBpbnQgcnNpX3dyaXRlX211bHRpcGxlKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtOTctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo5ODpcdHJldHVybiByc2lfdXNiX2NhcmRfd3JpdGUoYWRhcHRlciwgZGF0YSwgY291bnQsIGVuZHBvaW50KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTk5LX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYz0xMDk9c3RhdGljIGludCByc2lfZmluZF9idWxrX2luX2FuZF9vdXRfZW5kcG9pbnRzKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtMTY2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6MTY3Oi8qIHJzaV91c2JfcmVnX3JlYWQoKSAtIFRoaXMgZnVuY3Rpb24gcmVhZHMgZGF0YSBmcm9tIGdpdmVuIHJlZ2lzdGVyIGFkZHJlc3MuXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy0xNjgtICogQHVzYmRldjogUG9pbnRlciB0byB0aGUgdXNiX2RldmljZSBzdHJ1Y3R1cmUuXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtMTc0LSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6MTc1OnN0YXRpYyBpbnQgcnNpX3VzYl9yZWdfcmVhZChzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtMTc2LVx0XHRcdCAgICB1MzIgcmVnLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTIxMC0vKipcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjIxMTogKiByc2lfdXNiX3JlZ193cml0ZSgpIC0gVGhpcyBmdW5jdGlvbiB3cml0ZXMgdGhlIGdpdmVuIGRhdGEgaW50byB0aGUgZ2l2ZW5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTIxMi0gKlx0XHRcdCByZWdpc3RlciBhZGRyZXNzLlxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTIxOS0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjIyMDpzdGF0aWMgaW50IHJzaV91c2JfcmVnX3dyaXRlKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy0yMjEtXHRcdFx0ICAgICB1MzIgcmVnLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jPTMyND1zdGF0aWMgaW50IHJzaV9yeF91cmJfc3VibWl0KHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIsIHU4IGVwX251bSwgZ2ZwX3QgbWVtX2ZsYWdzKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTM2MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjM2MjpzdGF0aWMgaW50IHJzaV91c2JfcmVhZF9yZWdpc3Rlcl9tdWx0aXBsZShzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyLCB1MzIgYWRkcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTM2My1cdFx0XHRcdFx0ICB1OCAqZGF0YSwgdTE2IGNvdW50KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTQwMi0vKipcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjQwMzogKiByc2lfdXNiX3dyaXRlX3JlZ2lzdGVyX211bHRpcGxlKCkgLSBUaGlzIGZ1bmN0aW9uIHdyaXRlcyBtdWx0aXBsZSBieXRlcyBvZlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNDA0LSAqXHRcdFx0XHQgICAgICAgaW5mb3JtYXRpb24gdG8gbXVsdGlwbGUgcmVnaXN0ZXJzLlxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTQxMS0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjQxMjpzdGF0aWMgaW50IHJzaV91c2Jfd3JpdGVfcmVnaXN0ZXJfbXVsdGlwbGUoc3RydWN0IHJzaV9odyAqYWRhcHRlciwgdTMyIGFkZHIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy00MTMtXHRcdFx0XHRcdCAgIHU4ICpkYXRhLCB1MTYgY291bnQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNDUyLS8qKlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6NDUzOiAqcnNpX3VzYl9ob3N0X2ludGZfd3JpdGVfcGt0KCkgLSBUaGlzIGZ1bmN0aW9uIHdyaXRlcyB0aGUgcGFja2V0IHRvIHRoZVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNDU0LSAqXHRcdFx0XHQgICBVU0IgY2FyZC5cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy00NjAtICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo0NjE6c3RhdGljIGludCByc2lfdXNiX2hvc3RfaW50Zl93cml0ZV9wa3Qoc3RydWN0IHJzaV9odyAqYWRhcHRlcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTQ2Mi1cdFx0XHRcdCAgICAgICB1OCAqcGt0LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTQ3Ni1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjQ3NzpzdGF0aWMgaW50IHJzaV91c2JfbWFzdGVyX3JlZ19yZWFkKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIsIHUzMiByZWcsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy00NzgtXHRcdFx0XHQgICB1MzIgKnZhbHVlLCB1MTYgbGVuKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTQ4NC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjQ4NTpcdHJldCA9IHJzaV91c2JfcmVnX3JlYWQodXNiZGV2LCByZWcsIFx1MDAyNnRlbXAsIGxlbik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy00ODYtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTQ5Mi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjQ5MzpzdGF0aWMgaW50IHJzaV91c2JfbWFzdGVyX3JlZ193cml0ZShzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNDk0LVx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgcmVnLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTQ5OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjUwMDpcdHJldHVybiByc2lfdXNiX3JlZ193cml0ZSh1c2JkZXYsIHJlZywgdmFsdWUsIGxlbik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy01MDEtfVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNTAyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6NTAzOnN0YXRpYyBpbnQgcnNpX3VzYl9sb2FkX2RhdGFfbWFzdGVyX3dyaXRlKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy01MDQtXHRcdFx0XHRcdCAgdTMyIGJhc2VfYWRkcmVzcyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy01MTctXHRcdG1lbWNweSh0ZW1wX2J1ZiwgdGFfZmlybXdhcmUgJiM0MzsgY3VyX2luZHgsIGJsb2NrX3NpemUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6NTE4Olx0XHRzdGF0dXMgPSByc2lfdXNiX3dyaXRlX3JlZ2lzdGVyX211bHRpcGxlKGFkYXB0ZXIsIGJhc2VfYWRkcmVzcyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTUxOS1cdFx0XHRcdFx0XHRcdCAodTggKikodGVtcF9idWYpLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTUzMS1cdFx0ICAgICAgIGluc3RydWN0aW9uc19zeiAlIGJsb2NrX3NpemUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6NTMyOlx0XHRzdGF0dXMgPSByc2lfdXNiX3dyaXRlX3JlZ2lzdGVyX211bHRpcGxlXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy01MzMtXHRcdFx0XHRcdFx0KGFkYXB0ZXIsIGJhc2VfYWRkcmVzcyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYz01NDU9c3RhdGljIHN0cnVjdCByc2lfaG9zdF9pbnRmX29wcyB1c2JfaG9zdF9pbnRmX29wcyA9IHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjU0NjpcdC53cml0ZV9wa3RcdFx0PSByc2lfdXNiX2hvc3RfaW50Zl93cml0ZV9wa3QsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo1NDc6XHQucmVhZF9yZWdfbXVsdGlwbGVcdD0gcnNpX3VzYl9yZWFkX3JlZ2lzdGVyX211bHRpcGxlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6NTQ4Olx0LndyaXRlX3JlZ19tdWx0aXBsZVx0PSByc2lfdXNiX3dyaXRlX3JlZ2lzdGVyX211bHRpcGxlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6NTQ5Olx0Lm1hc3Rlcl9yZWdfcmVhZFx0PSByc2lfdXNiX21hc3Rlcl9yZWdfcmVhZCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjU1MDpcdC5tYXN0ZXJfcmVnX3dyaXRlXHQ9IHJzaV91c2JfbWFzdGVyX3JlZ193cml0ZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjU1MTpcdC5sb2FkX2RhdGFfbWFzdGVyX3dyaXRlXHQ9IHJzaV91c2JfbG9hZF9kYXRhX21hc3Rlcl93cml0ZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTU1Mi19O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jPTU2MD1zdGF0aWMgdm9pZCByc2lfZGVpbml0X3VzYl9pbnRlcmZhY2Uoc3RydWN0IHJzaV9odyAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy01NzItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo1NzM6c3RhdGljIGludCByc2lfdXNiX2luaXRfcngoc3RydWN0IHJzaV9odyAqYWRhcHRlcilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTU3NC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNTk0LVx0aWYgKHJzaV9jcmVhdGVfa3RocmVhZChhZGFwdGVyLVx1MDAzZXByaXYsIFx1MDAyNmRldi1cdTAwM2VyeF90aHJlYWQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo1OTU6XHRcdFx0ICAgICAgIHJzaV91c2JfcnhfdGhyZWFkLCBcJiMzNDtSWC1UaHJlYWRcJiMzNDspKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy01OTYtXHRcdHJzaV9kYmcoRVJSX1pPTkUsIFwmIzM0OyVzOiBVbmFibGUgdG8gaW5pdCByeCB0aHJkXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM9NjE3PXN0YXRpYyBpbnQgcnNpX2luaXRfdXNiX2ludGVyZmFjZShzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTY0NC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjY0NTpcdGlmIChyc2lfdXNiX2luaXRfcngoYWRhcHRlcikpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTY0Ni1cdFx0cnNpX2RiZyhFUlJfWk9ORSwgXCYjMzQ7RmFpbGVkIHRvIGluaXQgUlggaGFuZGxlXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy02NTQtXHQvKiBJbml0aWFsaXppbmcgZnVuY3Rpb24gY2FsbGJhY2tzICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo2NTU6XHRhZGFwdGVyLVx1MDAzZWNoZWNrX2h3X3F1ZXVlX3N0YXR1cyA9IHJzaV91c2JfY2hlY2tfcXVldWVfc3RhdHVzO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6NjU2Olx0YWRhcHRlci1cdTAwM2VkZXRlcm1pbmVfZXZlbnRfdGltZW91dCA9IHJzaV91c2JfZXZlbnRfdGltZW91dDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTY1Ny1cdGFkYXB0ZXItXHUwMDNlcnNpX2hvc3RfaW50ZiA9IFJTSV9IT1NUX0lOVEZfVVNCO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jPTY3Nj1zdGF0aWMgaW50IHVzYl91bHBfcmVhZF93cml0ZShzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyLCB1MTYgYWRkciwgdTMyIGRhdGEsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNjgwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6NjgxOlx0cmV0ID0gcnNpX3VzYl9tYXN0ZXJfcmVnX3dyaXRlXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy02ODItXHRcdFx0KGFkYXB0ZXIsIFJTSV9HU1BJX0RBVEFfUkVHMSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy02ODYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo2ODc6XHRyZXQgPSByc2lfdXNiX21hc3Rlcl9yZWdfd3JpdGUoYWRhcHRlciwgUlNJX0dTUElfREFUQV9SRUcwLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNjg4LVx0XHRcdFx0ICAgICAgIChkYXRhIFx1MDAyNiAweGZmZmYpLCAyKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy02OTItXHQvKiBJbml0aWFsaXppbmcgR1NQSSBmb3IgVUxQIHJlYWQvd3JpdGVzICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo2OTM6XHRyc2lfdXNiX21hc3Rlcl9yZWdfd3JpdGUoYWRhcHRlciwgUlNJX0dTUElfQ1RSTF9SRUcwLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNjk0LVx0XHRcdFx0IFJTSV9HU1BJX0NUUkxfUkVHMF9WQUxVRSwgMik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy02OTUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo2OTY6XHRyZXQgPSByc2lfdXNiX21hc3Rlcl9yZWdfd3JpdGUoYWRhcHRlciwgUlNJX0dTUElfQ1RSTF9SRUcxLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNjk3LVx0XHRcdFx0ICAgICAgICgobGVuX2luX2JpdHMgLSAxKSB8IFJTSV9HU1BJX1RSSUcpLCAyKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYz03MDY9c3RhdGljIGludCByc2lfcmVzZXRfY2FyZChzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTcxMC1cdHJzaV9kYmcoSU5GT19aT05FLCBcJiMzNDtSZXNldHRpbmcgQ2FyZC4uLlxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo3MTE6XHRyc2lfdXNiX21hc3Rlcl9yZWdfd3JpdGUoYWRhcHRlciwgUlNJX1RBX0hPTERfUkVHLCAweEUsIDQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNzEyLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTcxNy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjcxODpcdHJldCA9IHJzaV91c2JfbWFzdGVyX3JlZ193cml0ZShhZGFwdGVyLCBTV0JMX1JFR09VVCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTcxOS1cdFx0XHRcdCAgICAgICBSU0lfRldfV0RUX0RJU0FCTEVfUkVRLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTc0Ny1cdH0gZWxzZSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo3NDg6XHRcdHJldCA9IHJzaV91c2JfbWFzdGVyX3JlZ193cml0ZShhZGFwdGVyLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNzQ5LVx0XHRcdFx0XHQgICAgICAgTldQX1dXRF9JTlRFUlJVUFRfVElNRVIsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNzUzLVx0XHRcdGdvdG8gZmFpbDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjc1NDpcdFx0cmV0ID0gcnNpX3VzYl9tYXN0ZXJfcmVnX3dyaXRlKGFkYXB0ZXIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy03NTUtXHRcdFx0XHRcdCAgICAgICBOV1BfV1dEX1NZU1RFTV9SRVNFVF9USU1FUixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy03NTktXHRcdFx0Z290byBmYWlsO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6NzYwOlx0XHRyZXQgPSByc2lfdXNiX21hc3Rlcl9yZWdfd3JpdGUoYWRhcHRlcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTc2MS1cdFx0XHRcdFx0ICAgICAgIE5XUF9XV0RfTU9ERV9BTkRfUlNUQVJULFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTc3Ni0vKipcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjc3NzogKiByc2lfcHJvYmUoKSAtIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGtlcm5lbCB3aGVuIHRoZSBkcml2ZXIgcHJvdmlkZWRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTc3OC0gKlx0XHQgVmVuZG9yIGFuZCBkZXZpY2UgSURzIGFyZSBtYXRjaGVkLiBBbGwgdGhlIGluaXRpYWxpemF0aW9uXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNzg0LSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6Nzg1OnN0YXRpYyBpbnQgcnNpX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICpwZnVuY3Rpb24sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy03ODYtXHRcdCAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTgyNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjgyNzpcdHN0YXR1cyA9IHJzaV91c2JfcmVnX3JlYWQoZGV2LVx1MDAzZXVzYmRldiwgRldfU1RBVFVTX1JFRywgXHUwMDI2Zndfc3RhdHVzLCAyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTgyOC1cdGlmIChzdGF0dXMgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM9OTIxPXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciByc2lfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtOTIyLVx0Lm5hbWUgICAgICAgPSBcJiMzNDtSU0ktVVNCIFdMQU5cJiMzNDssXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo5MjM6XHQucHJvYmUgICAgICA9IHJzaV9wcm9iZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTkyNC1cdC5kaXNjb25uZWN0ID0gcnNpX2Rpc2Nvbm5lY3QsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiX29wcy5jLTE4LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2Zpcm13YXJlLmhcdTAwM2VcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYl9vcHMuYzoxOTojaW5jbHVkZSBcJiMzNDtyc2lfdXNiLmhcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYl9vcHMuYy0yMC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYl9vcHMuYy0yMS0vKipcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYl9vcHMuYzoyMjogKiByc2lfdXNiX3J4X3RocmVhZCgpIC0gVGhpcyBpcyBhIGtlcm5lbCB0aHJlYWQgdG8gcmVjZWl2ZSB0aGUgcGFja2V0cyBmcm9tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2Jfb3BzLmMtMjMtICpcdFx0XHQgdGhlIFVTQiBkZXZpY2UuXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiX29wcy5jLTI3LSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiX29wcy5jOjI4OnZvaWQgcnNpX3VzYl9yeF90aHJlYWQoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYl9vcHMuYy0yOS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV91c2IuaD01Nj1zdHJ1Y3QgcnNpXzkxeF91c2JkZXYge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfdXNiLmgtNzItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX3VzYi5oOjczOnN0YXRpYyBpbmxpbmUgaW50IHJzaV91c2JfY2hlY2tfcXVldWVfc3RhdHVzKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIsIHU4IHFfbnVtKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV91c2IuaC03NC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV91c2IuaC03OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfdXNiLmg6Nzk6c3RhdGljIGlubGluZSBpbnQgcnNpX3VzYl9ldmVudF90aW1lb3V0KHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX3VzYi5oLTgwLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX3VzYi5oLTgzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV91c2IuaDo4NDp2b2lkIHJzaV91c2JfcnhfdGhyZWFkKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV91c2IuaC04NS0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwNzQKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIGludG8gdGhlIFJTSSBXaS1GaSBEcml2ZXIgS2V5IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGtleSBjb25maWd1cmF0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSBSU0kgV2ktRmkgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIDkxeCB2YXJpYW50LiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgcnNpX2hhbF9rZXlfY29uZmlnYCB3aXRoaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmNgLiBNeSBpbml0aWFsIHF1ZXN0aW9uIGlzIGhvdyB0aGlzIGtleSBjb25maWd1cmF0aW9uIGlzIGFjdHVhbGx5IHRyaWdnZXJlZC4gSSYjMzk7bSBiZXR0aW5nIGl0JiMzOTtzIGEgYG1hYzgwMjExYCBjYWxsYmFjay4gWWVzLCB0aGF0IG1ha2VzIHNlbnNlLiBJdCYjMzk7cyBsaWtlbHkgZ29pbmcgdG8gYmUgaGFuZGxlZCBieSB0aGUgYHNldF9rZXlgIGhhbmRsZXIgd2l0aGluIGByc2lfbWFjODAyMTFfb3BzYC4gTm93LCB0byBjb25maXJtIG15IGFzc3VtcHRpb25zIGFuZCBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGNhbGwgY2hhaW4sIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBncmVwIHRocm91Z2ggdGhlIGNvZGUgZm9yIGluc3RhbmNlcyBvZiBib3RoIGByc2lfaGFsX2tleV9jb25maWdgIGFuZCBgcnNpX21hYzgwMjExX29wc2AuIFRoYXQgc2hvdWxkIHF1aWNrbHkgaGlnaGxpZ2h0IHRoZSBjb25uZWN0aW9uIHBvaW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnNpX2hhbF9rZXlfY29uZmlnfHJzaV9tYWM4MDIxMV9vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYz05MTY9c3RhdGljIGludCByc2lfbWFjODAyMTFfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTk2Ny0vKipcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6OTY4OiAqIHJzaV9oYWxfa2V5X2NvbmZpZygpIC0gVGhpcyBmdW5jdGlvbiBsb2FkcyB0aGUga2V5cyBpbnRvIHRoZSBmaXJtd2FyZS5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtOTY5LSAqIEBodzogUG9pbnRlciB0byB0aGUgaWVlZTgwMjExX2h3IHN0cnVjdHVyZS5cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTk3NS0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6OTc2OnN0YXRpYyBpbnQgcnNpX2hhbF9rZXlfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy05NzctXHRcdFx0ICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jPTEwNTA9c3RhdGljIGludCByc2lfbWFjODAyMTFfc2V0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTEwNjMtXHRjYXNlIFNFVF9LRVk6XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjEwNjQ6XHRcdHN0YXR1cyA9IHJzaV9oYWxfa2V5X2NvbmZpZyhodywgdmlmLCBrZXksIHN0YSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTEwNjUtXHRcdGlmIChzdGF0dXMpIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTEwODMtXHRcdG1lbXNldChrZXksIDAsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mKSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjEwODQ6XHRcdHN0YXR1cyA9IHJzaV9oYWxfa2V5X2NvbmZpZyhodywgdmlmLCBrZXksIHN0YSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTEwODUtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDA2OAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gUlNJIEtleSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgUlNJIGRyaXZlciBpcyBtYW5hZ2luZyBpdHMga2V5cyB3aXRoaW4gdGhlIDgwMi4xMSBmcmFtZXdvcmsuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHR3byBrZXkgZnVuY3Rpb25zOiBgcnNpX21hYzgwMjExX3NldF9rZXlgIGFuZCwgbW9yZSBicm9hZGx5LCB0aGUgYHJzaV9tYWM4MDIxMV9vcHNgIHN0cnVjdHVyZS4gYHJzaV9tYWM4MDIxMV9zZXRfa2V5YCBpcyB0aGUgbGlrZWx5IHBvaW50IG9mIGludGVyYWN0aW9uIGZvciBzZXR0aW5nIG9yIHVwZGF0aW5nIHRob3NlIGtleXM7IGl0JiMzOTtsbCB0ZWxsIG1lIGhvdyB0aGV5IGFyZSBpbXBsZW1lbnRlZC4gRGlnZ2luZyBpbnRvIHRoZSBvcHMgc3RydWN0dXJlLCB0aGF0JiMzOTtzIHdoZXJlIEkgY2FuIGZpbmQgb3RoZXIgZnVuY3Rpb25zIHdoaWNoIGNvdWxkIGJlIHJlbGF0ZWQgdG8ga2V5IGhhbmRsaW5nLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiBob3cgdGhlIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgbWFjODAyMTEgY29yZSBmb3IgdGhpcyBjcml0aWNhbCBzZWN1cml0eSBmdW5jdGlvbi4gSSBleHBlY3QgdG8gc2VlIHRoZSB0eXBpY2FsIGFsbG9jYXRpb24sIHNldHVwLCBhbmQgaW5zZXJ0aW9uIG9mIHRoZSBrZXkgbWF0ZXJpYWwsIGxpa2VseSBpbnZvbHZpbmcgc29tZSBoYXJkd2FyZS1zcGVjaWZpYyBpbnRlcmFjdGlvbiB0aHJvdWdoIHRoZSBkcml2ZXImIzM5O3Mgb3duIG1lY2hhbmlzbXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgaGFyZHdhcmUgb2ZmbG9hZHMgdGhlIGVuY3J5cHRpb24vZGVjcnlwdGlvbiwgaWYgYXQgYWxsLCBhbmQgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBrZXkgZGVyaXZhdGlvbiBvciByb3RhdGlvbi4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBwcm9iYWJseSBmaW5kIHRoZSBrZXkgdG8gZXZlcnl0aGluZyBlbHNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyc2lfbWFjODAyMTFfc2V0X2tleSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jPTk3Nj1zdGF0aWMgaW50IHJzaV9oYWxfa2V5X2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTEwNDAtLyoqXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjEwNDE6ICogcnNpX21hYzgwMjExX3NldF9rZXkoKSAtIFRoaXMgZnVuY3Rpb24gc2V0cyB0eXBlIG9mIGtleSB0byBiZSBsb2FkZWQuXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTEwNDItICogQGh3OiBQb2ludGVyIHRvIHRoZSBpZWVlODAyMTFfaHcgc3RydWN0dXJlLlxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTA0OS0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTA1MDpzdGF0aWMgaW50IHJzaV9tYWM4MDIxMV9zZXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xMDUxLVx0XHRcdFx0ZW51bSBzZXRfa2V5X2NtZCBjbWQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYz0xOTgyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyBtYWM4MDIxMV9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xOTk2LVx0LmNvbmZpZ3VyZV9maWx0ZXIgPSByc2lfbWFjODAyMTFfY29uZl9maWx0ZXIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjE5OTc6XHQuc2V0X2tleSA9IHJzaV9tYWM4MDIxMV9zZXRfa2V5LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xOTk4LVx0LnNldF9ydHNfdGhyZXNob2xkID0gcnNpX21hYzgwMjExX3NldF9ydHNfdGhyZXNob2xkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDkzOAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJTSSBVU0IgRGV2aWNlIERyaXZlciBLZXkgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBSU0kgVVNCIGRldmljZSBkcml2ZXIuIEl0IHNlZW1zIGxpa2Ugd2hlbiBhIFVTQiBkZXZpY2UgaXMgcHJvYmVkIHVzaW5nIHN5emthbGxlciYjMzk7cyBgdXNiIHJhdyBnYWRnZXRgIChsaWtlIGByc2lfcHJvYmVgKSwgYHJzaV85MXhgIGdldHMgcmVnaXN0ZXJlZCB3aXRoIG1hYzgwMjExLiBNeSBpbW1lZGlhdGUgaW50ZXJlc3QgaXMgaW4gaG93IGVuY3J5cHRpb24ga2V5cyBhcmUgbWFuYWdlZCwgcGFydGljdWxhcmx5IGJlY2F1c2Ugb2YgdGhhdCBwYXRjaC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRyeWluZyB0byB0cmFjZSB0aGUgcGF0aCBmcm9tIHVzZXJzcGFjZSBjb21tYW5kcyB0byB0aGUga2V5IGxvYWRpbmcgZnVuY3Rpb24uCgpGcm9tIHdoYXQgSSBjYW4gdGVsbCwgdXNlcnNwYWNlIHVzZXMgbmw4MDIxMSB0byBpc3N1ZSBgbmV3X2tleWAgb3IgYHNldF9rZXlgIGNvbW1hbmRzLiBUaGVzZSB1bHRpbWF0ZWx5IGVuZCB1cCBjYWxsaW5nIGByc2lfbWFjODAyMTFfc2V0X2tleWAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYHJzaV9oYWxfa2V5X2NvbmZpZ2AsIGFuZCB0aGF0JiMzOTtzIHRoZSBvbmUgdGhhdCBjYWxscyBgcnNpX2hhbF9sb2FkX2tleWAuIE9rYXksIHNvIGByc2lfaGFsX2xvYWRfa2V5YCBpcyB0aGUgY3J1Y2lhbCBmdW5jdGlvbiwgYW5kIEkgbmVlZCB0byB2ZXJpZnkgaXRzIHZpc2liaWxpdHkuCgpMZXQmIzM5O3MgY2hlY2sgdGhlIGRlY2xhcmF0aW9uIGluIGByc2lfbWdtdC5oYC4gQWgsIHllcywgaXQmIzM5O3M6IGBpbnQgcnNpX2hhbF9sb2FkX2tleShzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCB1OCAqZGF0YSwgdTE2IGtleV9sZW4sIHU4IGtleV90eXBlLCB1OCBrZXlfaWQsIHUzMiBjaXBoZXIsIHMxNiBzdGFfaWQsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpO2AgVGhlIGZ1bmN0aW9uIGlzICpub3QqIHN0YXRpYywgc28gaXQgKmlzKiBleHBvc2VkIHdpdGhpbiB0aGUgYHJzaV85MXhgIG1vZHVsZS4gR29vZCwgdGhhdCBjb25maXJtcyBpdC4KClNvLCB0aGUga2V5IGZ1bmN0aW9ucyB0byB3YXRjaCBhcmU6IGByc2lfaGFsX2xvYWRfa2V5YCwgYHJzaV9oYWxfa2V5X2NvbmZpZ2AsIGByc2lfbWFjODAyMTFfc2V0X2tleWAgYW5kIGByc2lfbWFjODAyMTFfc3RhX2FkZGAuIEkmIzM5O2xsIHdhbnQgdG8gdHJhY2UgY2FsbHMgdG8gdGhvc2UuCgpCdXQgaG9sZCBvbiwgYHJzaV9oYWxfbG9hZF9rZXlgIGlzIHRoZSBzcGVjaWZpYyBmdW5jdGlvbiB0aGF0IHRoZSBwYXRjaCBtb2RpZmllcywgd2hpY2ggbWFrZXMgaXQgY2VudHJhbCB0byB0aGUgcHJvYmxlbS4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIEtjb25maWcgcmVxdWlyZW1lbnRzLiBgUlNJXzkxWGAgcmVxdWlyZXMgYE1BQzgwMjExYCBhbmQgYFdMQU5fVkVORE9SX1JTSWAuIGBSU0lfVVNCYCBkZXBlbmRzIG9uIGBVU0IgJmFtcDsmYW1wOyBSU0lfOTFYYC4gSSYjMzk7bGwgd2FudCB0byBjaGVjayBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWdgLgoKYGBgCmNvbmZpZyBXTEFOX1ZFTkRPUl9SU0kKCWJvb2wgJiMzNDtSZWRwaW5lIFNpZ25hbHMgSW5jIGRldmljZXMmIzM0OwoJZGVmYXVsdCB5CgppZiBXTEFOX1ZFTkRPUl9SU0kKCmNvbmZpZyBSU0lfOTFYCgl0cmlzdGF0ZSAmIzM0O1JlZHBpbmUgU2lnbmFscyBJbmMgOTF4IFdMQU4gZHJpdmVyIHN1cHBvcnQmIzM0OwoJc2VsZWN0IEJUX0hDSVJTSSBpZiBSU0lfQ09FWAoJZGVwZW5kcyBvbiBNQUM4MDIxMQoKY29uZmlnIFJTSV9VU0IKCXRyaXN0YXRlICYjMzQ7UmVkcGluZSBTaWduYWxzIFVTQiBidXMgc3VwcG9ydCYjMzQ7CglkZXBlbmRzIG9uIFVTQiAmYW1wOyZhbXA7IFJTSV85MVgKYGBgCk9rYXksIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBkZXBlbmRlbmN5IG9mIGBXTEFOX1ZFTkRPUl9SU0lgLCBzbyBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBtYWluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnYCBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtXTEFOX1ZFTkRPUl9SU0kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZT0xOD1vYmotJChDT05GSUdfV0xBTl9WRU5ET1JfUkVBTFRFSykgJiM0Mzs9IHJlYWx0ZWsvXG5kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZToxOTpvYmotJChDT05GSUdfV0xBTl9WRU5ET1JfUlNJKSAmIzQzOz0gcnNpL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvTWFrZWZpbGUtMjAtb2JqLSQoQ09ORklHX1dMQU5fVkVORE9SX1NJTEFCUykgJiM0Mzs9IHNpbGFicy9cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWc6Mjpjb25maWcgV0xBTl9WRU5ET1JfUlNJXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtSZWRwaW5lIFNpZ25hbHMgSW5jIGRldmljZXNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZy0xMi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnOjEzOmlmIFdMQU5fVkVORE9SX1JTSVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWctMTQtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWc9NDc9Y29uZmlnIFJTSV9DT0VYXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWctNTYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZzo1NzplbmRpZiAjIFdMQU5fVkVORE9SX1JTSVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQ2OQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgaXNzdWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIFJTSS9LY29uZmlnIFNvdXJjZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGUgUlNJIHdpcmVsZXNzIGRyaXZlci4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIHRoZSB0eXBpY2FsIGtlcm5lbCBidWlsZCBzdHJ1Y3R1cmUsIGlzIHRvIGhlYWQgZGlyZWN0bHkgdG8gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzc2AgZGlyZWN0b3J5LiBXaXRoaW4gdGhhdCwgSSYjMzk7bSBwcmV0dHkgY2VydGFpbiB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGUgUlNJIGRyaXZlciB3aWxsIGJlIGxvY2F0ZWQgdGhlcmUuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGVzZSB0aGluZ3MgbGl2ZS4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGNoZWNraW5nIGBkcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnYCBhbmQgc2VlIGlmIHRoZSBpbmNsdWRlcyBwb2ludCB0byBpdC4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnNpL0tjb25maWcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnPTMyPXNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWc6MzM6c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnLTM0LXNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjc1NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqS2NvbmZpZyBEaXZlKioKCk9rYXksIHRpbWUgdG8gZGlnIGluLiBUaGUgcHJvYmxlbSBsaWtlbHkgbGllcyB3aXRoaW4gdGhlIHdpcmVsZXNzIG5ldHdvcmsgY29uZmlndXJhdGlvbiwgc28gSSYjMzk7bSBmb2N1c2luZyBteSBhdHRlbnRpb24gb24gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWdgLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24gYXJvdW5kIGxpbmUgMzMgb2YgdGhhdCBmaWxlLiBUaGF0JiMzOTtzIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludCBnaXZlbiB0aGUgY29udGV4dCwgYW5kIEkmIzM5O20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1pZ2h0IGJlIGNvbnRyaWJ1dGluZyB0byB0aGUgaXNzdWUuIExpbmUgMzMgc2hvdWxkIGdpdmUgYSBzdGFydGluZyBwb2ludCB0byB0aGUgcmVsZXZhbnQga2NvbmZpZyBmbGFncywgYW5kIHdpbGwgZ3VpZGUgdGhlIG5leHQgbGV2ZWwgb2YgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgV2lyZWxlc3MgTEFOIGRldmljZSBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG1lbnVjb25maWcgV0xBTlxuICAgNzpcdFx0Ym9vbCBcJiMzNDtXaXJlbGVzcyBMQU5cJiMzNDtcbiAgIDg6XHRcdGRlcGVuZHMgb24gIVMzOTBcbiAgIDk6XHRcdGRlcGVuZHMgb24gTkVUXG4gIDEwOlx0XHRzZWxlY3QgV0lSRUxFU1NcbiAgMTE6XHRcdGRlZmF1bHQgeVxuICAxMjpcdFx0aGVscFxuICAxMzpcdFx0ICBUaGlzIHNlY3Rpb24gY29udGFpbnMgYWxsIHRoZSBwcmUgODAyLjExIGFuZCA4MDIuMTEgd2lyZWxlc3NcbiAgMTQ6XHRcdCAgZGV2aWNlIGRyaXZlcnMuIEZvciBhIGNvbXBsZXRlIGxpc3Qgb2YgZHJpdmVycyBhbmQgZG9jdW1lbnRhdGlvblxuICAxNTpcdFx0ICBvbiB0aGVtIHJlZmVyIHRvIHRoZSB3aXJlbGVzcyB3aWtpOlxuICAxNjpcdFxuICAxNzpcdFx0ICBodHRwczovL3dpcmVsZXNzLndpa2kua2VybmVsLm9yZy9lbi91c2Vycy9Ecml2ZXJzXG4gIDE4Olx0XG4gIDE5Olx0aWYgV0xBTlxuICAyMDpcdFxuICAyMTpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hZG10ZWsvS2NvbmZpZ1wmIzM0O1xuICAyMjpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvS2NvbmZpZ1wmIzM0O1xuICAyMzpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC9LY29uZmlnXCYjMzQ7XG4gIDI0Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL0tjb25maWdcJiMzNDtcbiAgMjU6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvS2NvbmZpZ1wmIzM0O1xuICAyNjpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9LY29uZmlnXCYjMzQ7XG4gIDI3Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvS2NvbmZpZ1wmIzM0O1xuICAyODpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9LY29uZmlnXCYjMzQ7XG4gIDI5Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21pY3JvY2hpcC9LY29uZmlnXCYjMzQ7XG4gIDMwOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL0tjb25maWdcJiMzNDtcbiAgMzE6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcmFsaW5rL0tjb25maWdcJiMzNDtcbiAgMzI6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9LY29uZmlnXCYjMzQ7XG4gIDMzOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnXCYjMzQ7XG4gIDM0Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy9LY29uZmlnXCYjMzQ7XG4gIDM1Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3N0L0tjb25maWdcJiMzNDtcbiAgMzY6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvS2NvbmZpZ1wmIzM0O1xuICAzNzpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy96eWRhcy9LY29uZmlnXCYjMzQ7XG4gIDM4Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3F1YW50ZW5uYS9LY29uZmlnXCYjMzQ7XG4gIDM5Olx0XG4gIDQwOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzU1MwoJCQkJCQkJb3V0cHV0OiAxOTMKCQkJCQkJCXRob3VnaHRzOiAzNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFdMQU4gUGF0Y2gqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhlIGVzc2VudGlhbCBvbmVzIGFyZSBwcmVzZW50OiBgV0xBTmAsIGBXTEFOX1ZFTkRPUl9SU0lgLCBgUlNJXzkxWGAsIGBSU0lfVVNCYCwgYE1BQzgwMjExYCwgYW5kIGBVU0JgLiBHb3QgaXQsIG5vdyB0byBkb3VibGUtY2hlY2sgZXZlcnl0aGluZy4KClRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJIHNlZSB0aGUgZGVwZW5kZW5jaWVzIGFyZSBjb3JyZWN0bHkgZGVmaW5lZCB3aXRoIGBXb3J0aEZ1enppbmc6IHRydWVgIGFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFycmF5IGNvdmVycyBhbGwgdGhlIHJlcXVpcmVkIG9wdGlvbnM6IGBXTEFOYCwgYFdMQU5fVkVORE9SX1JTSWAsIGBSU0lfOTFYYCwgYFJTSV9VU0JgLCBgTUFDODAyMTFgLCBhbmQgYFVTQmAuIFRoZSBmb2N1cyBpcyBjbGVhciB0b28sIGl0JiMzOTtzIHRob3NlIGNyaXRpY2FsIGZ1bmN0aW9ucyBgcnNpX2hhbF9sb2FkX2tleWAgYW5kIGByc2lfbWFjODAyMTFfc2V0X2tleWAuCgpUaGUgcmVhc29uaW5nIG1ha2VzIHNlbnNlOyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGFuIG91dC1vZi1ib3VuZHMgbWVtb3J5IHJlYWQgaW4gYHJzaV9oYWxfbG9hZF9rZXlgIGR1cmluZyBNSUMga2V5IGNvcHlpbmcsIGFuZCB0aGUgcGF0Y2ggYWRkcmVzc2VzIHRoaXMgYnkgYWRkaW5nIGEgY2hlY2sgZm9yIHRoZSBgV0xBTl9DSVBIRVJfU1VJVEVfVEtJUGAgY2lwaGVyIHN1aXRlLiBUaGlzIGltcGFjdHMgdGhlIFJlZHBpbmUgU2lnbmFscyA5MXggV0xBTiBkcml2ZXIsIHNwZWNpZmljYWxseSByZWFjaGFibGUgdGhyb3VnaCBgbWFjODAyMTFgIGtleSBjb25maWd1cmF0aW9uIG9wZXJhdGlvbnMsIGxpa2VseSBvbiBlbXVsYXRlZCBVU0IgZGV2aWNlcy4gQ2xhc3NpYy4KCkJlZm9yZSBJIHB1c2ggdGhlIHJlc3VsdHMsIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBvbmUgbGFzdCB0aW1lOiBgcnNpX2hhbF9sb2FkX2tleWAgYW5kIGByc2lfbWFjODAyMTFfc2V0X2tleWAgYXJlIHN0aWxsIHRoZSBjcml0aWNhbCBmb2N1cyBzeW1ib2xzLCBhbmQgdGhlIGNvbmZpZ3VyYXRpb25zIGFyZSB0aGUgc2FtZTogYFdMQU5fVkVORE9SX1JTSWAsIGBSU0lfOTFYYCwgYFJTSV9VU0JgLCBgTUFDODAyMTFgLCBhbmQgYFVTQmAuIEFscmlnaHQsIGxvb2tzIGdvb2QuIFRpbWUgdG8gaW52b2tlIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtXTEFOJiMzNDssCiAgICAmIzM0O1dMQU5fVkVORE9SX1JTSSYjMzQ7LAogICAgJiMzNDtSU0lfOTFYJiMzNDssCiAgICAmIzM0O1JTSV9VU0ImIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7VVNCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnNpX2hhbF9sb2FkX2tleSYjMzQ7LAogICAgJiMzNDtyc2lfbWFjODAyMTFfc2V0X2tleSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIG1lbW9yeSByZWFkIGJ1ZyBpbiByc2lfaGFsX2xvYWRfa2V5IGJ5IHJlc3RyaWN0aW5nIGNvcHlpbmcgb2YgdGhlIFRYIGFuZCBSWCBNSUMga2V5cyBmcm9tIHRoZSBkYXRhIGJ1ZmZlciB0byBvbmx5IHdoZW4gdGhlIGNpcGhlciBzdWl0ZSBpcyBXTEFOX0NJUEhFUl9TVUlURV9US0lQIChwcmV2ZW50aW5nIE9PQiByZWFkcyBmb3Iga2V5IGxlbmd0aHMgc2hvcnRlciB0aGFuIDMyIGJ5dGVzIGxpa2UgQUVTL0NDTVApLiBUaGlzIGRyaXZlciBsb2dpYyBpcyByZWFjaGFibGUgdmlhIG1hYzgwMjExIHNldF9rZXkgY2FsbGJhY2tzIHdpdGggZW11bGF0ZWQgVVNCIGRldmljZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1dMQU4mIzM0OywKICAgICYjMzQ7V0xBTl9WRU5ET1JfUlNJJiMzNDssCiAgICAmIzM0O1JTSV85MVgmIzM0OywKICAgICYjMzQ7UlNJX1VTQiYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyc2lfaGFsX2xvYWRfa2V5JiMzNDssCiAgICAmIzM0O3JzaV9tYWM4MDIxMV9zZXRfa2V5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgbWVtb3J5IHJlYWQgYnVnIGluIHJzaV9oYWxfbG9hZF9rZXkgYnkgcmVzdHJpY3RpbmcgY29weWluZyBvZiB0aGUgVFggYW5kIFJYIE1JQyBrZXlzIGZyb20gdGhlIGRhdGEgYnVmZmVyIHRvIG9ubHkgd2hlbiB0aGUgY2lwaGVyIHN1aXRlIGlzIFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVAgKHByZXZlbnRpbmcgT09CIHJlYWRzIGZvciBrZXkgbGVuZ3RocyBzaG9ydGVyIHRoYW4gMzIgYnl0ZXMgbGlrZSBBRVMvQ0NNUCkuIFRoaXMgZHJpdmVyIGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgbWFjODAyMTEgc2V0X2tleSBjYWxsYmFja3Mgd2l0aCBlbXVsYXRlZCBVU0IgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6NDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDo0NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBidWcgaW4gcnNpX2hhbF9sb2FkX2tleSgpIHdoZXJlIDgtYnl0ZSBUWCBhbmQgUlggTUlDIGtleXMgd2VyZSB1bmNvbmRpdGlvbmFsbHkgcmVhZCBmcm9tIFx1MDAyNmRhdGFbMTZdIGFuZCBcdTAwMjZkYXRhWzI0XSwgZXZlbiB3aGVuIHRoZSBjaXBoZXIgc3VpdGUgd2FzIG5vdCBUS0lQIChzdWNoIGFzIENDTVAvQUVTIHdoZXJlIHRoZSBrZXkgYnVmZmVyIGlzIG9ubHkgMTYgYnl0ZXMgbG9uZykuXG5cbjEuIEtBU0FOIGFwcGxpY2FiaWxpdHk6IE91dC1vZi1ib3VuZHMgcmVhZHMgb24gaGVhcCBvciBzdGFjayBidWZmZXJzIChzdWNoIGFzIGFjY2Vzc2luZyBwYXN0IHRoZSAxNi1ieXRlIGtleSBidWZmZXIpIGFyZSBkaXJlY3RseSBkZXRlY3RhYmxlIGJ5IEtBU0FOLlxuMi4gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIGZyYW1lIGJ1ZmZlciBpbiB0aGUgc2tiIGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgdXBmcm9udCB2aWEgYG1lbXNldChza2ItXHUwMDNlZGF0YSwgMCwgZnJhbWVfbGVuKWAuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy5cblxuU2luY2UgdGhlIGlzc3VlIGlzIHN0cmljdGx5IGFuIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcyBjYXVnaHQgYnkgS0FTQU4gYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDM5ZDIyZjVlZDZlYjE1YTA0NTMyMzlmNGJhMDI0NmFmMWM4NTlhYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDIwOjM5OjM5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jCmluZGV4IDdmMmMxNjA4ZjJjZTMuLjJkZGY0ZDE1OGJmZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tZ210LmMKQEAgLTg0OCw4ICYjNDM7ODQ4LDEwIEBAIGludCByc2lfaGFsX2xvYWRfa2V5KHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sCiAJCX0gZWxzZSB7CiAJCQltZW1jcHkoJmFtcDtzZXRfa2V5LSZndDtrZXlbMF1bMF0sIGRhdGEsIGtleV9sZW4pOwogCQl9Ci0JCW1lbWNweShzZXRfa2V5LSZndDt0eF9taWNfa2V5LCAmYW1wO2RhdGFbMTZdLCA4KTsKLQkJbWVtY3B5KHNldF9rZXktJmd0O3J4X21pY19rZXksICZhbXA7ZGF0YVsyNF0sIDgpOwomIzQzOwkJaWYgKGNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9US0lQKSB7CiYjNDM7CQkJbWVtY3B5KHNldF9rZXktJmd0O3R4X21pY19rZXksICZhbXA7ZGF0YVsxNl0sIDgpOwomIzQzOwkJCW1lbWNweShzZXRfa2V5LSZndDtyeF9taWNfa2V5LCAmYW1wO2RhdGFbMjRdLCA4KTsKJiM0MzsJCX0KIAl9IGVsc2UgewogCQltZW1zZXQoJmFtcDtzZXRfa2V5W0ZSQU1FX0RFU0NfU1pdLCAwLCBmcmFtZV9sZW4gLSBGUkFNRV9ERVNDX1NaKTsKIAl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjA1CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4KCioqRXhhbWluaW5nIHRoZSBLZXkgTG9hZGluZyBGdW5jdGlvbiBpbiB0aGUgUlNJIERyaXZlcioqCgpBbHJpZ2h0LCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgcnNpXzkxeF9tZ210LmNgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgYXJlYSBhcm91bmQgdGhlIGByc2lfaGFsX2xvYWRfa2V5YCBmdW5jdGlvbiB3aXRoaW4gdGhlIHdpcmVsZXNzIG5ldHdvcmtpbmcgZHJpdmVyLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBrZXkgbG9hZGluZyBwcm9jZXNzIHdvcmtzLCBhbmQgdGhlIGRldGFpbHMgc3Vycm91bmRpbmcgaXQuIEkmIzM5O20gZ29pbmcgdG8gdXNlIGByZWFkLWZpbGVgIHRvIGdldCB0aGUgc291cmNlIGNvZGUgb2YgYHJzaV9oYWxfbG9hZF9rZXlgLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MjA6XHRcdFx0a2V5X2Rlc2NyaXB0b3IgPSBSU0lfS0VZX1RZUEVfQlJPQURDQVNUO1xuIDgyMTpcdFx0XHRpZiAodmlmLVx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApXG4gODIyOlx0XHRcdFx0a2V5X2Rlc2NyaXB0b3IgfD0gUlNJX0tFWV9NT0RFX0FQO1xuIDgyMzpcdFx0fVxuIDgyNDpcdFx0aWYgKChjaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDApIHx8XG4gODI1Olx0XHQgICAgKGNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQpKSB7XG4gODI2Olx0XHRcdGtleV9pZCA9IDA7XG4gODI3Olx0XHRcdGtleV9kZXNjcmlwdG9yIHw9IFJTSV9XRVBfS0VZO1xuIDgyODpcdFx0XHRpZiAoa2V5X2xlbiBcdTAwM2U9IDEzKVxuIDgyOTpcdFx0XHRcdGtleV9kZXNjcmlwdG9yIHw9IFJTSV9XRVBfS0VZXzEwNDtcbiA4MzA6XHRcdH0gZWxzZSBpZiAoY2lwaGVyICE9IEtFWV9UWVBFX0NMRUFSKSB7XG4gODMxOlx0XHRcdGtleV9kZXNjcmlwdG9yIHw9IFJTSV9DSVBIRVJfV1BBO1xuIDgzMjpcdFx0XHRpZiAoY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVApXG4gODMzOlx0XHRcdFx0a2V5X2Rlc2NyaXB0b3IgfD0gUlNJX0NJUEhFUl9US0lQO1xuIDgzNDpcdFx0fVxuIDgzNTpcdFx0a2V5X2Rlc2NyaXB0b3IgfD0gUlNJX1BST1RFQ1RfREFUQV9GUkFNRVM7XG4gODM2Olx0XHRrZXlfZGVzY3JpcHRvciB8PSAoa2V5X2lkIFx1MDAzY1x1MDAzYyBSU0lfS0VZX0lEX09GRlNFVCk7XG4gODM3Olx0XG4gODM4Olx0XHRyc2lfc2V0X2xlbl9xbm8oXHUwMDI2c2V0X2tleS1cdTAwM2VkZXNjX2R3b3JkMC5sZW5fcW5vLFxuIDgzOTpcdFx0XHRcdChmcmFtZV9sZW4gLSBGUkFNRV9ERVNDX1NaKSwgUlNJX1dJRklfTUdNVF9RKTtcbiA4NDA6XHRcdHNldF9rZXktXHUwMDNlZGVzY19kd29yZDAuZnJhbWVfdHlwZSA9IFNFVF9LRVlfUkVRO1xuIDg0MTpcdFx0c2V0X2tleS1cdTAwM2VrZXlfZGVzYyA9IGNwdV90b19sZTE2KGtleV9kZXNjcmlwdG9yKTtcbiA4NDI6XHRcdHNldF9rZXktXHUwMDNlc3RhX2lkID0gc3RhX2lkO1xuIDg0MzpcdFxuIDg0NDpcdFx0aWYgKGRhdGEpIHtcbiA4NDU6XHRcdFx0aWYgKChjaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDApIHx8XG4gODQ2Olx0XHRcdCAgICAoY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNCkpIHtcbiA4NDc6XHRcdFx0XHRtZW1jcHkoXHUwMDI2c2V0X2tleS1cdTAwM2VrZXlba2V5X2lkXVsxXSwgZGF0YSwga2V5X2xlbiAqIDIpO1xuIDg0ODpcdFx0XHR9IGVsc2Uge1xuIDg0OTpcdFx0XHRcdG1lbWNweShcdTAwMjZzZXRfa2V5LVx1MDAzZWtleVswXVswXSwgZGF0YSwga2V5X2xlbik7XG4gODUwOlx0XHRcdH1cbiA4NTE6XHRcdFx0aWYgKGNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9US0lQKSB7XG4gODUyOlx0XHRcdFx0bWVtY3B5KHNldF9rZXktXHUwMDNldHhfbWljX2tleSwgXHUwMDI2ZGF0YVsxNl0sIDgpO1xuIDg1MzpcdFx0XHRcdG1lbWNweShzZXRfa2V5LVx1MDAzZXJ4X21pY19rZXksIFx1MDAyNmRhdGFbMjRdLCA4KTtcbiA4NTQ6XHRcdFx0fVxuIDg1NTpcdFx0fSBlbHNlIHtcbiA4NTY6XHRcdFx0bWVtc2V0KFx1MDAyNnNldF9rZXlbRlJBTUVfREVTQ19TWl0sIDAsIGZyYW1lX2xlbiAtIEZSQU1FX0RFU0NfU1opO1xuIDg1NzpcdFx0fVxuIDg1ODpcdFxuIDg1OTpcdFx0c2tiX3B1dChza2IsIGZyYW1lX2xlbik7XG4gODYwOlx0XG4gODYxOlx0XHRyZXR1cm4gcnNpX3NlbmRfaW50ZXJuYWxfbWdtdF9mcmFtZShjb21tb24sIHNrYik7XG4gODYyOlx0fVxuIDg2MzpcdFxuIDg2NDpcdC8qXG4gODY1Olx0ICogVGhpcyBmdW5jdGlvbiBzZW5kcyB0aGUgY29tbW9uIGRldmljZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgdG8gZGV2aWNlLlxuIDg2NjpcdCAqIFRoaXMgZnJhbWUgaW5jbHVkZXMgdGhlIHVzZWZ1bCBpbmZvcm1hdGlvbiB0byBtYWtlIGRldmljZSB3b3JrcyBvblxuIDg2NzpcdCAqIHNwZWNpZmljIG9wZXJhdGluZyBtb2RlLlxuIDg2ODpcdCAqL1xuIDg2OTpcdHN0YXRpYyBpbnQgcnNpX3NlbmRfY29tbW9uX2Rldl9wYXJhbXMoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbilcbiA4NzA6XHR7XG4gODcxOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIDg3MjpcdFx0dTE2IGZyYW1lX2xlbjtcbiA4NzM6XHRcdHN0cnVjdCByc2lfY29uZmlnX3ZhbHMgKmRldl9jZmdzO1xuIDg3NDpcdFxuIDg3NTpcdFx0ZnJhbWVfbGVuID0gc2l6ZW9mKHN0cnVjdCByc2lfY29uZmlnX3ZhbHMpO1xuIDg3NjpcdFxuIDg3NzpcdFx0cnNpX2RiZyhNR01UX1RYX1pPTkUsIFwmIzM0O1NlbmRpbmcgY29tbW9uIGRldmljZSBjb25maWcgcGFyYW1zXFxuXCYjMzQ7KTtcbiA4Nzg6XHRcdHNrYiA9IGRldl9hbGxvY19za2IoZnJhbWVfbGVuKTtcbiA4Nzk6XHRcdGlmICghc2tiKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MTMKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgZnVuY3Rpb246CgoqKkRpdmluZyBpbnRvIGByc2lfaGFsX2xvYWRfa2V5YCAtIENvbnRleHQgaXMgS2V5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgcnNpX2hhbF9sb2FkX2tleWAsIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSBkbyBpcyBtZW50YWxseSByZXdpbmQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgKnByZWNlZGluZyogdGhpcyBmdW5jdGlvbiBjYWxsLiBJIG5lZWQgdGhlIGNvbnRleHQuIFdoYXQmIzM5O3MgdGhlIGdlbmVyYWwgZmxvdyBvZiBleGVjdXRpb24gbGVhZGluZyB1cCB0byB0aGlzIHBvaW50PyBXaGF0JiMzOTtzIHRoZSBzeXN0ZW0gZG9pbmc/IFdoYXQgYXJlIHRoZSBoaWdoLWxldmVsIGdvYWxzIG9mIHRoZSBjb2RlPyBJcyB0aGlzIGEgY3JpdGljYWwgc2VjdXJpdHkgZnVuY3Rpb24sIG9yIGp1c3Qgc29tZSByb3V0aW5lIGluaXRpYWxpemF0aW9uPyBVbmRlcnN0YW5kaW5nIHRoZSBwcmVjZWRpbmcgbGluZXMgd2lsbCBpbnN0YW50bHkgaW5mb3JtIG15IG1lbnRhbCBtb2RlbCBvZiB3aGF0IGByc2lfaGFsX2xvYWRfa2V5YCAqc2hvdWxkKiBiZSBkb2luZy4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW5wdXRzIOKAkyB3aGF0IGRhdGEgaXMgYmVpbmcgcGFzc2VkIGluPyBLZXlzLCBjZXJ0aWZpY2F0ZXMsIHNvbWUgb3RoZXIgZm9ybSBvZiBhdXRob3JpemF0aW9uIGRhdGE/IEFuZCB0aGUgb3V0cHV0Li4uIHdoYXQmIzM5O3MgdGhlIGV4cGVjdGVkIHJlc3VsdD8gU3VjY2Vzc2Z1bCBrZXkgbG9hZCwgZXJyb3IgY29kZXM/IElzIHRoZXJlIGFueSBsb2dnaW5nIGJlaW5nIHVzZWQ/IFVuZGVyc3RhbmRpbmcgdGhlc2UgdGhpbmdzIHdvdWxkIG1ha2UgaXQgZWFzaWVyIHRvIGRlYnVnLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3ODA6XHQvKipcbiA3ODE6XHQgKiByc2lfaGFsX2xvYWRfa2V5KCkgLSBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gbG9hZCBrZXlzIHdpdGhpbiB0aGUgZmlybXdhcmUuXG4gNzgyOlx0ICogQGNvbW1vbjogUG9pbnRlciB0byB0aGUgZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlLlxuIDc4MzpcdCAqIEBkYXRhOiBQb2ludGVyIHRvIHRoZSBrZXkgZGF0YS5cbiA3ODQ6XHQgKiBAa2V5X2xlbjogS2V5IGxlbmd0aCB0byBiZSBsb2FkZWQuXG4gNzg1Olx0ICogQGtleV90eXBlOiBUeXBlIG9mIGtleTogR1JPVVAvUEFJUldJU0UuXG4gNzg2Olx0ICogQGtleV9pZDogS2V5IGluZGV4LlxuIDc4NzpcdCAqIEBjaXBoZXI6IFR5cGUgb2YgY2lwaGVyIHVzZWQuXG4gNzg4Olx0ICogQHN0YV9pZDogU3RhdGlvbiBpZC5cbiA3ODk6XHQgKiBAdmlmOiBQb2ludGVyIHRvIHRoZSBpZWVlODAyMTFfdmlmIHN0cnVjdHVyZS5cbiA3OTA6XHQgKlxuIDc5MTpcdCAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLlxuIDc5MjpcdCAqL1xuIDc5MzpcdGludCByc2lfaGFsX2xvYWRfa2V5KHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sXG4gNzk0Olx0XHRcdCAgICAgdTggKmRhdGEsXG4gNzk1Olx0XHRcdCAgICAgdTE2IGtleV9sZW4sXG4gNzk2Olx0XHRcdCAgICAgdTgga2V5X3R5cGUsXG4gNzk3Olx0XHRcdCAgICAgdTgga2V5X2lkLFxuIDc5ODpcdFx0XHQgICAgIHUzMiBjaXBoZXIsXG4gNzk5Olx0XHRcdCAgICAgczE2IHN0YV9pZCxcbiA4MDA6XHRcdFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKVxuIDgwMTpcdHtcbiA4MDI6XHRcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xuIDgwMzpcdFx0c3RydWN0IHJzaV9zZXRfa2V5ICpzZXRfa2V5O1xuIDgwNDpcdFx0dTE2IGtleV9kZXNjcmlwdG9yID0gMDtcbiA4MDU6XHRcdHUxNiBmcmFtZV9sZW4gPSBzaXplb2Yoc3RydWN0IHJzaV9zZXRfa2V5KTtcbiA4MDY6XHRcbiA4MDc6XHRcdHJzaV9kYmcoTUdNVF9UWF9aT05FLCBcJiMzNDslczogU2VuZGluZyBsb2FkIGtleSBmcmFtZVxcblwmIzM0OywgX19mdW5jX18pO1xuIDgwODpcdFxuIDgwOTpcdFx0c2tiID0gZGV2X2FsbG9jX3NrYihmcmFtZV9sZW4pO1xuIDgxMDpcdFx0aWYgKCFza2IpIHtcbiA4MTE6XHRcdFx0cnNpX2RiZyhFUlJfWk9ORSwgXCYjMzQ7JXM6IEZhaWxlZCBpbiBhbGxvY2F0aW9uIG9mIHNrYlxcblwmIzM0OyxcbiA4MTI6XHRcdFx0XHRfX2Z1bmNfXyk7XG4gODEzOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDgxNDpcdFx0fVxuIDgxNTpcdFxuIDgxNjpcdFx0bWVtc2V0KHNrYi1cdTAwM2VkYXRhLCAwLCBmcmFtZV9sZW4pO1xuIDgxNzpcdFx0c2V0X2tleSA9IChzdHJ1Y3QgcnNpX3NldF9rZXkgKilza2ItXHUwMDNlZGF0YTtcbiA4MTg6XHRcbiA4MTk6XHRcdGlmIChrZXlfdHlwZSA9PSBSU0lfR1JPVVBfS0VZKSB7XG4gODIwOlx0XHRcdGtleV9kZXNjcmlwdG9yID0gUlNJX0tFWV9UWVBFX0JST0FEQ0FTVDtcbiA4MjE6XHRcdFx0aWYgKHZpZi1cdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKVxuIDgyMjpcdFx0XHRcdGtleV9kZXNjcmlwdG9yIHw9IFJTSV9LRVlfTU9ERV9BUDtcbiA4MjM6XHRcdH1cbiA4MjQ6XHRcdGlmICgoY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwKSB8fFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTY3CgkJCQkJCQlvdXRwdXQ6IDI0MgoJCQkJCQkJdGhvdWdodHM6IDEwMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFdpcmVsZXNzIERyaXZlciBLZXkgTG9hZGluZyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgb2YgdGhpcyBwYXRjaCwgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIGByc2lfaGFsX2xvYWRfa2V5YCwgaXMgdGhhdCBpdCBhZGRyZXNzZXMgYSBjbGVhciBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eS4gSGVyZSYjMzk7cyB3aGF0IEkgc2VlOgoKVGhlIGNvZGUsIGJlZm9yZSB0aGUgcGF0Y2gsIGNvcGllcyB0aGUgdGVtcG9yYWwga2V5IGFuZCwgY3J1Y2lhbGx5LCB0aGUgTUlDIGtleXMgZnJvbSB0aGUgYGRhdGFgIGJ1ZmZlci4gVGhlIHByb2JsZW0gaXMsIHdoZW4gdGhlIGNpcGhlciBpc24mIzM5O3QgVEtJUCAodGhpbmsgQ0NNUCwgQUVTLCBldGMuKSwgdGhlIGBrZXlfbGVuYCBjYW4gYmUgYXMgc21hbGwgYXMgMTYgYnl0ZXMuIEhvd2V2ZXIsIHRoZSBjb2RlIHdvdWxkIHN0aWxsIGF0dGVtcHQgdG8gcmVhZCB0aGUgVFggYW5kIFJYIE1JQyBrZXlzIGZyb20gYCZhbXA7ZGF0YVsxNl1gIGFuZCBgJmFtcDtkYXRhWzI0XWAsIHJlc3BlY3RpdmVseS4gVGhpcyBpcyBhIGNsYXNzaWMgYnVmZmVyIG92ZXItcmVhZCwgYW5kIHNvbWV0aGluZyBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU0FOaXRpemVyKSBpcyBkZXNpZ25lZCB0byBjYXRjaCwgYW5kIGRpZCBjYXRjaC4gV2UgYXJlIHJlYWRpbmcgYmV5b25kIHRoZSBhbGxvY2F0ZWQgYm91bmRhcnkgb2YgYGRhdGFgLgoKVGhpcyBwYXRjaCBzb2x2ZXMgdGhpcyBieSAqb25seSogY29weWluZyB0aGUgTUlDIGtleXMgd2hlbiB0aGUgYGNpcGhlcmAgaXMgc3BlY2lmaWNhbGx5IGBXTEFOX0NJUEhFUl9TVUlURV9US0lQYCwgd2hlcmUgdGhlIGtleSBkYXRhIGlzIGV4cGVjdGVkIHRvIGJlIDMyIGJ5dGVzICgxNi1ieXRlIHRlbXBvcmFsIGtleSAmIzQzOyA4LWJ5dGUgVFggTUlDICYjNDM7IDgtYnl0ZSBSWCBNSUMpLiBJbiBhbGwgb3RoZXIgY2FzZXMsIGl0IGF2b2lkcyBhY2Nlc3NpbmcgdGhlc2Ugb3V0LW9mLWJvdW5kcyByZWdpb25zIG9mIGBkYXRhYC4KCk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBpcyB0aGlzIGEgS01TQU4gKEtlcm5lbCBNZW1vcnkgU0FOaXRpemVyKSBpc3N1ZT8gTm8sIGFuZCBoZXJlJiMzOTtzIHdoeS4gVGhlIGBza2ItJmd0O2RhdGFgIGJ1ZmZlciwgd2hpY2ggaXMgd2hlcmUgdGhpcyBkYXRhIGVuZHMgdXAsIGlzIGV4cGxpY2l0bHkgemVyb2VkIG91dCB3aXRoIGBtZW1zZXQoc2tiLSZndDtkYXRhLCAwLCBmcmFtZV9sZW4pYCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmdW5jdGlvbi4gVGhpcyBtZWFucyB0aGVyZSYjMzk7cyBubyBxdWVzdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkLCBsZWFrZWQsIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLiBLTVNBTiBpcyBmb3IgZGV0ZWN0aW5nIGFuZCBwcmV2ZW50aW5nIHRoZSB1c2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIGlzICpub3QqIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGhlcmUuIFRoZSBwcmV2aW91cyBjb2RlICpkaWQqIGhhdmUgYW4gb3V0LW9mLWJvdW5kcyByZWFkLCBkZXRlY3RlZCBieSBLQVNBTi4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2sgYWxsIGFzcGVjdHM6CgoxLiAgVGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZS4gSXQgc2VuZHMgYSBtYW5hZ2VtZW50IGZyYW1lIGludGVybmFsbHkgdG8gdGhlIHdpcmVsZXNzIGNhcmQgb3IgZmlybXdhcmUgdmlhIGByc2lfc2VuZF9pbnRlcm5hbF9tZ210X2ZyYW1lYC4KMi4gIEl0IGRvZXNuJiMzOTt0IHRvdWNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEuIFRoZSBgc2tiLSZndDtkYXRhYCBpcyBleHBsaWNpdGx5IHplcm9lZC4KMy4gIFRoZSBwcmV2aW91cyBidWcgd2FzIGFuIG91dC1vZi1ib3VuZHMgcmVhZC4gVGhpcyBwYXRjaCBwcmV2ZW50cyB0aGF0LiBLQVNBTiBjYXVnaHQgdGhlIGJ1ZyBpbiB0aGUgZmlyc3QgcGxhY2UsIGFuZCB0aGlzIHBhdGNoIGNvcnJlY3RseSBmaXhlcyBpdC4KNC4gIEtNU0FOIGlzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhpcyBwYXRjaCBpcyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBmaXguCgpTbywgaW4gc3VtbWFyeSwgd2UmIzM5O3JlIGZpeGluZyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eSBhbmQgaXQmIzM5O3MgYSBLQVNBTiBpc3N1ZSwgYW5kIHRoZXJlJiMzOTtzIG5vIEtNU0FOIGNvbmNlcm4uIFRoZSBrZXkgYXNwZWN0IGhlcmUgaXMgdGhlIGNsZWFyIGRpc3RpbmN0aW9uIGJldHdlZW4gYW4gb3V0LW9mLWJvdW5kcyByZWFkLCBhbmQgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZC4KCkxldCYjMzk7cyBzdW1tYXJpemUgdGhpcyBjbGVhcmx5OgoqICAgVGhlIHBhdGNoICpyZXN0cmljdHMqIHRoZSBNSUMga2V5IGNvcGllcyBvbmx5IHRvIHdoZW4gYGNpcGhlcmAgaXMgYFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVBgLiBUaGUgcHJldmlvdXMgY29kZSBkaWQgYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9uIGBkYXRhYCBmb3Igb3RoZXIgY2lwaGVycy4KKiAgIEtBU0FOIGRldGVjdHMgb3V0LW9mLWJvdW5kcyByZWFkcyB3aGljaCBpcyB0aGUgYnVnIGFuZCBpcyBmaXhlZCBoZXJlLgoqICAgVGhlIGBza2ItJmd0O2RhdGFgIGJ1ZmZlciBpcyB6ZXJvZWQsIGFuZCBub3RoaW5nIHVuaW5pdGlhbGl6ZWQgaXMgbGVha2VkLCB1c2VkIG9yIHJlYWQuCiogICBUaGVyZWZvcmUsIE5lZWRzS01TQU4gPSBgZmFsc2VgLgoKTm93LCB0byBzZXQgdGhlIHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBidWcgaW4gcnNpX2hhbF9sb2FkX2tleSgpIHdoZXJlIDgtYnl0ZSBUWCBhbmQgUlggTUlDIGtleXMgd2VyZSB1bmNvbmRpdGlvbmFsbHkgcmVhZCBmcm9tIFx1MDAyNmRhdGFbMTZdIGFuZCBcdTAwMjZkYXRhWzI0XSwgZXZlbiB3aGVuIHRoZSBjaXBoZXIgc3VpdGUgd2FzIG5vdCBUS0lQIChzdWNoIGFzIENDTVAvQUVTIHdoZXJlIHRoZSBrZXkgYnVmZmVyIGlzIG9ubHkgMTYgYnl0ZXMgbG9uZykuXG5cbjEuIEtBU0FOIGFwcGxpY2FiaWxpdHk6IE91dC1vZi1ib3VuZHMgcmVhZHMgb24gaGVhcCBvciBzdGFjayBidWZmZXJzIChzdWNoIGFzIGFjY2Vzc2luZyBwYXN0IHRoZSAxNi1ieXRlIGtleSBidWZmZXIpIGFyZSBkaXJlY3RseSBkZXRlY3RhYmxlIGJ5IEtBU0FOLlxuMi4gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIGZyYW1lIGJ1ZmZlciBpbiB0aGUgc2tiIGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgdXBmcm9udCB2aWEgYG1lbXNldChza2ItXHUwMDNlZGF0YSwgMCwgZnJhbWVfbGVuKWAuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy5cblxuU2luY2UgdGhlIGlzc3VlIGlzIHN0cmljdGx5IGFuIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcyBjYXVnaHQgYnkgS0FTQU4gYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBidWcgaW4gcnNpX2hhbF9sb2FkX2tleSgpIHdoZXJlIDgtYnl0ZSBUWCBhbmQgUlggTUlDIGtleXMgd2VyZSB1bmNvbmRpdGlvbmFsbHkgcmVhZCBmcm9tIFx1MDAyNmRhdGFbMTZdIGFuZCBcdTAwMjZkYXRhWzI0XSwgZXZlbiB3aGVuIHRoZSBjaXBoZXIgc3VpdGUgd2FzIG5vdCBUS0lQIChzdWNoIGFzIENDTVAvQUVTIHdoZXJlIHRoZSBrZXkgYnVmZmVyIGlzIG9ubHkgMTYgYnl0ZXMgbG9uZykuXG5cbjEuIEtBU0FOIGFwcGxpY2FiaWxpdHk6IE91dC1vZi1ib3VuZHMgcmVhZHMgb24gaGVhcCBvciBzdGFjayBidWZmZXJzIChzdWNoIGFzIGFjY2Vzc2luZyBwYXN0IHRoZSAxNi1ieXRlIGtleSBidWZmZXIpIGFyZSBkaXJlY3RseSBkZXRlY3RhYmxlIGJ5IEtBU0FOLlxuMi4gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIGZyYW1lIGJ1ZmZlciBpbiB0aGUgc2tiIGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgdXBmcm9udCB2aWEgYG1lbXNldChza2ItXHUwMDNlZGF0YSwgMCwgZnJhbWVfbGVuKWAuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy5cblxuU2luY2UgdGhlIGlzc3VlIGlzIHN0cmljdGx5IGFuIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcyBjYXVnaHQgYnkgS0FTQU4gYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6Mzk6NDAuNzg0NDgxNzQ2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzg5Mjc5NDYzMDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIldMQU5cIixcbiAgICBcIldMQU5fVkVORE9SX1JTSVwiLFxuICAgIFwiUlNJXzkxWFwiLFxuICAgIFwiUlNJX1VTQlwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIlVTQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJzaV9oYWxfbG9hZF9rZXlcIixcbiAgICBcInJzaV9tYWM4MDIxMV9zZXRfa2V5XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgYnVnIGluIHJzaV9oYWxfbG9hZF9rZXkoKSB3aGVyZSA4LWJ5dGUgVFggYW5kIFJYIE1JQyBrZXlzIHdlcmUgdW5jb25kaXRpb25hbGx5IHJlYWQgZnJvbSBcXHUwMDI2ZGF0YVsxNl0gYW5kIFxcdTAwMjZkYXRhWzI0XSwgZXZlbiB3aGVuIHRoZSBjaXBoZXIgc3VpdGUgd2FzIG5vdCBUS0lQIChzdWNoIGFzIENDTVAvQUVTIHdoZXJlIHRoZSBrZXkgYnVmZmVyIGlzIG9ubHkgMTYgYnl0ZXMgbG9uZykuXFxuXFxuMS4gS0FTQU4gYXBwbGljYWJpbGl0eTogT3V0LW9mLWJvdW5kcyByZWFkcyBvbiBoZWFwIG9yIHN0YWNrIGJ1ZmZlcnMgKHN1Y2ggYXMgYWNjZXNzaW5nIHBhc3QgdGhlIDE2LWJ5dGUga2V5IGJ1ZmZlcikgYXJlIGRpcmVjdGx5IGRldGVjdGFibGUgYnkgS0FTQU4uXFxuMi4gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIGZyYW1lIGJ1ZmZlciBpbiB0aGUgc2tiIGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgdXBmcm9udCB2aWEgYG1lbXNldChza2ItXFx1MDAzZWRhdGEsIDAsIGZyYW1lX2xlbilgLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuXFxuXFxuU2luY2UgdGhlIGlzc3VlIGlzIHN0cmljdGx5IGFuIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcyBjYXVnaHQgYnkgS0FTQU4gYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIG1lbW9yeSByZWFkIGJ1ZyBpbiByc2lfaGFsX2xvYWRfa2V5IGJ5IHJlc3RyaWN0aW5nIGNvcHlpbmcgb2YgdGhlIFRYIGFuZCBSWCBNSUMga2V5cyBmcm9tIHRoZSBkYXRhIGJ1ZmZlciB0byBvbmx5IHdoZW4gdGhlIGNpcGhlciBzdWl0ZSBpcyBXTEFOX0NJUEhFUl9TVUlURV9US0lQIChwcmV2ZW50aW5nIE9PQiByZWFkcyBmb3Iga2V5IGxlbmd0aHMgc2hvcnRlciB0aGFuIDMyIGJ5dGVzIGxpa2UgQUVTL0NDTVApLiBUaGlzIGRyaXZlciBsb2dpYyBpcyByZWFjaGFibGUgdmlhIG1hYzgwMjExIHNldF9rZXkgY2FsbGJhY2tzIHdpdGggZW11bGF0ZWQgVVNCIGRldmljZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjM5OjQwLjc4NDQ4ODEyNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ5ODA2NDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDM5ZDIyZjVlZDZlYjE1YTA0NTMyMzlmNGJhMDI0NmFmMWM4NTlhYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzMSAyMDozOTozOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tZ210LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tZ210LmNcXG5pbmRleCA3ZjJjMTYwOGYyY2UzLi4yZGRmNGQxNThiZmUzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuY1xcbkBAIC04NDgsOCArODQ4LDEwIEBAIGludCByc2lfaGFsX2xvYWRfa2V5KHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sXFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdG1lbWNweShcXHUwMDI2c2V0X2tleS1cXHUwMDNla2V5WzBdWzBdLCBkYXRhLCBrZXlfbGVuKTtcXG4gXFx0XFx0fVxcbi1cXHRcXHRtZW1jcHkoc2V0X2tleS1cXHUwMDNldHhfbWljX2tleSwgXFx1MDAyNmRhdGFbMTZdLCA4KTtcXG4tXFx0XFx0bWVtY3B5KHNldF9rZXktXFx1MDAzZXJ4X21pY19rZXksIFxcdTAwMjZkYXRhWzI0XSwgOCk7XFxuK1xcdFxcdGlmIChjaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfVEtJUCkge1xcbitcXHRcXHRcXHRtZW1jcHkoc2V0X2tleS1cXHUwMDNldHhfbWljX2tleSwgXFx1MDAyNmRhdGFbMTZdLCA4KTtcXG4rXFx0XFx0XFx0bWVtY3B5KHNldF9rZXktXFx1MDAzZXJ4X21pY19rZXksIFxcdTAwMjZkYXRhWzI0XSwgOCk7XFxuK1xcdFxcdH1cXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0bWVtc2V0KFxcdTAwMjZzZXRfa2V5W0ZSQU1FX0RFU0NfU1pdLCAwLCBmcmFtZV9sZW4gLSBGUkFNRV9ERVNDX1NaKTtcXG4gXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDozOTo0MS4zMzUyNjE0NTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM2NTg2NjUwMTMzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJXTEFOXCIsXG4gICAgXCJXTEFOX1ZFTkRPUl9SU0lcIixcbiAgICBcIlJTSV85MVhcIixcbiAgICBcIlJTSV9VU0JcIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJVU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyc2lfaGFsX2xvYWRfa2V5XCIsXG4gICAgXCJyc2lfbWFjODAyMTFfc2V0X2tleVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgbWVtb3J5IHJlYWQgYnVnIGluIHJzaV9oYWxfbG9hZF9rZXkgYnkgcmVzdHJpY3RpbmcgY29weWluZyBvZiB0aGUgVFggYW5kIFJYIE1JQyBrZXlzIGZyb20gdGhlIGRhdGEgYnVmZmVyIHRvIG9ubHkgd2hlbiB0aGUgY2lwaGVyIHN1aXRlIGlzIFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVAgKHByZXZlbnRpbmcgT09CIHJlYWRzIGZvciBrZXkgbGVuZ3RocyBzaG9ydGVyIHRoYW4gMzIgYnl0ZXMgbGlrZSBBRVMvQ0NNUCkuIFRoaXMgZHJpdmVyIGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgbWFjODAyMTEgc2V0X2tleSBjYWxsYmFja3Mgd2l0aCBlbXVsYXRlZCBVU0IgZGV2aWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDM5ZDIyZjVlZDZlYjE1YTA0NTMyMzlmNGJhMDI0NmFmMWM4NTlhYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDIwOjM5OjM5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jXG5pbmRleCA3ZjJjMTYwOGYyY2UzLi4yZGRmNGQxNThiZmUzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tZ210LmNcbkBAIC04NDgsOCArODQ4LDEwIEBAIGludCByc2lfaGFsX2xvYWRfa2V5KHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sXG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0bWVtY3B5KFx1MDAyNnNldF9rZXktXHUwMDNla2V5WzBdWzBdLCBkYXRhLCBrZXlfbGVuKTtcbiBcdFx0fVxuLVx0XHRtZW1jcHkoc2V0X2tleS1cdTAwM2V0eF9taWNfa2V5LCBcdTAwMjZkYXRhWzE2XSwgOCk7XG4tXHRcdG1lbWNweShzZXRfa2V5LVx1MDAzZXJ4X21pY19rZXksIFx1MDAyNmRhdGFbMjRdLCA4KTtcbitcdFx0aWYgKGNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9US0lQKSB7XG4rXHRcdFx0bWVtY3B5KHNldF9rZXktXHUwMDNldHhfbWljX2tleSwgXHUwMDI2ZGF0YVsxNl0sIDgpO1xuK1x0XHRcdG1lbWNweShzZXRfa2V5LVx1MDAzZXJ4X21pY19rZXksIFx1MDAyNmRhdGFbMjRdLCA4KTtcbitcdFx0fVxuIFx0fSBlbHNlIHtcbiBcdFx0bWVtc2V0KFx1MDAyNnNldF9rZXlbRlJBTUVfREVTQ19TWl0sIDAsIGZyYW1lX2xlbiAtIEZSQU1FX0RFU0NfU1opO1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6Mzk6NDEuMzM1MjYzNzgzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc5MTU4ODU4NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgV2lyZWxlc3MgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuY2AuIFRoZSBzcGVjaWZpYyBmdW5jdGlvbiBiZWluZyBtb2RpZmllZCBpcyBgcnNpX2hhbF9sb2FkX2tleWAuIFJpZ2h0LCBzbyB0aGlzIGlzIGFib3V0IFJlZHBpbmUgU2lnbmFscyBJbmMsIHRoZWlyIDkxeCB3aXJlbGVzcyBkcml2ZXIuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZGV2aWNlcyBzdXBwb3J0ZWQ7IFVTQiwgU0RJTywgcHJvYmFibHkgbW9yZS4gVGhlIGtleSBxdWVzdGlvbiBub3cgaXMsIGNhbiBJIHJlYWNoIHRoaXMgZHJpdmVyIG9yIGRldmljZSB0aHJvdWdoIFVTQiBSYXcgR2FkZ2V0IG9yIHN5emthbGxlcidzIFVTQiBnYWRnZXQgZW11bGF0aW9uPyBXb3J0aCBpbnZlc3RpZ2F0aW5nLlxuXG5MZXQncyBzZWUsIHdoYXQncyBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL2AgY29uY2VybmluZyBVU0I/IEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIGBncmVwcGVyYCBzZWFyY2ggb3IganVzdCBzdGFydCByZWFkaW5nIHRoZSBmaWxlcyBkaXJlY3RseS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGF0dGFjayBzdXJmYWNlIGhlcmUgYW5kIGlmIHRoaXMgaXMgYSB2aWFibGUgdGFyZ2V0IGZvciBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjA4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6NDA6MDkuMjUxMTUxNTg1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTE2MDM3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyc2lfOTF4X21nbXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9NYWtlZmlsZT00PXJzaV85MXgteVxcdFxcdFxcdCs9IHJzaV85MXhfbWFjODAyMTEub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9NYWtlZmlsZTo1OnJzaV85MXgteVxcdFxcdFxcdCs9IHJzaV85MXhfbWdtdC5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL01ha2VmaWxlLTYtcnNpXzkxeC15XFx0XFx0XFx0Kz0gcnNpXzkxeF9oYWwub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDo0MDowOS4zNjIzMTYxNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYyNDEwMDI4NjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCBwcm9ibGVtLCBhcyB0aG91Z2ggaXQgd2VyZSBteSBvd24gdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBSU0kgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFJTSSB3aXJlbGVzcyBkcml2ZXIgaXMgY29uZmlndXJlZCBhbmQgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUuIFRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB0aGF0LCBlc3BlY2lhbGx5IHdpdGhpbiBhIExpbnV4IGtlcm5lbCBjb250ZXh0LCBpcyBhbG1vc3QgYWx3YXlzIHRoZSBgS2NvbmZpZ2AgZmlsZS4gSSdsbCBnbyBzdHJhaWdodCB0byBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL2Ag4oCTIHRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGRyaXZlciBzb3VyY2UgYW5kLCBjcml0aWNhbGx5LCBpdHMgY29uZmlndXJhdGlvbiBtZWNoYW5pc20uIFRoZSBLY29uZmlnIGZpbGUgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGRyaXZlciBpcyBidWlsdCBpbnRvIHRoZSBrZXJuZWwgb3IgYXMgYSBtb2R1bGUsIGFuZCB3aGF0IGJ1aWxkIG9wdGlvbnMgYXJlIGF2YWlsYWJsZS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHdoZXRoZXIgdGhpcyBwYXJ0aWN1bGFyIFJTSSBkcml2ZXIgc3VwcG9ydHMgZGlmZmVyZW50IGhhcmR3YXJlIGludGVyZmFjZXMgbGlrZSBVU0IgYW5kIFNESU8sIG9yIHBlcmhhcHMgZXZlbiBvdGhlcnMgdGhhdCBJIG1pZ2h0IG5vdCBiZSBpbW1lZGlhdGVseSBhd2FyZSBvZi4gSSBuZWVkIHRvIHNlZSB3aGF0J3MgY29uZmlndXJhYmxlIGR1cmluZyB0aGUgYnVpbGQgcHJvY2Vzcy4gRnJvbSBoZXJlIEkgY2FuIHN0YXJ0IG1ha2luZyBkZWR1Y3Rpb25zIG9uIGhvdyB0byBtYW5pcHVsYXRlIGl0IHRvIGZpdCBvdXIgbmVlZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NzUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDo0MToxMS43NzIzNDcxMDdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFdMQU5fVkVORE9SX1JTSVxcbiAgIDM6XFx0XFx0Ym9vbCBcXFwiUmVkcGluZSBTaWduYWxzIEluYyBkZXZpY2VzXFxcIlxcbiAgIDQ6XFx0XFx0ZGVmYXVsdCB5XFxuICAgNTpcXHRcXHRoZWxwXFxuICAgNjpcXHRcXHQgIElmIHlvdSBoYXZlIGEgd2lyZWxlc3MgY2FyZCBiZWxvbmdpbmcgdG8gdGhpcyBjbGFzcywgc2F5IFkuXFxuICAgNzpcXHRcXG4gICA4OlxcdFxcdCAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2Vzbid0IGRpcmVjdGx5IGFmZmVjdCB0aGVcXG4gICA5OlxcdFxcdCAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbCB0aGVcXG4gIDEwOlxcdFxcdCAgcXVlc3Rpb25zIGFib3V0IHRoZXNlIGNhcmRzLiBJZiB5b3Ugc2F5IFksIHlvdSB3aWxsIGJlIGFza2VkIGZvclxcbiAgMTE6XFx0XFx0ICB5b3VyIHNwZWNpZmljIGNhcmQgaW4gdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMuXFxuICAxMjpcXHRcXG4gIDEzOlxcdGlmIFdMQU5fVkVORE9SX1JTSVxcbiAgMTQ6XFx0XFxuICAxNTpcXHRjb25maWcgUlNJXzkxWFxcbiAgMTY6XFx0XFx0dHJpc3RhdGUgXFxcIlJlZHBpbmUgU2lnbmFscyBJbmMgOTF4IFdMQU4gZHJpdmVyIHN1cHBvcnRcXFwiXFxuICAxNzpcXHRcXHRzZWxlY3QgQlRfSENJUlNJIGlmIFJTSV9DT0VYXFxuICAxODpcXHRcXHRkZXBlbmRzIG9uIE1BQzgwMjExXFxuICAxOTpcXHRcXHRoZWxwXFxuICAyMDpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJlcyBzdXBwb3J0IGZvciBSU0kgMXgxIGRldmljZXMuXFxuICAyMTpcXHRcXHQgIFNlbGVjdCBNIChyZWNvbW1lbmRlZCksIGlmIHlvdSBoYXZlIGEgUlNJIDF4MSB3aXJlbGVzcyBtb2R1bGUuXFxuICAyMjpcXHRcXG4gIDIzOlxcdGNvbmZpZyBSU0lfREVCVUdGU1xcbiAgMjQ6XFx0XFx0Ym9vbCBcXFwiUmVkcGluZSBTaWduYWxzIEluYyBkZWJ1ZyBzdXBwb3J0XFxcIlxcbiAgMjU6XFx0XFx0ZGVwZW5kcyBvbiBSU0lfOTFYXFxuICAyNjpcXHRcXHRkZWZhdWx0IHlcXG4gIDI3OlxcdFxcdGhlbHBcXG4gIDI4OlxcdFxcdCBTYXkgWSwgaWYgeW91IHdvdWxkIGxpa2UgdG8gZW5hYmxlIGRlYnVnIHN1cHBvcnQuIFRoaXMgb3B0aW9uXFxuICAyOTpcXHRcXHQgY3JlYXRlcyBkZWJ1Z2ZzIGVudHJpZXNcXG4gIDMwOlxcdFxcbiAgMzE6XFx0Y29uZmlnIFJTSV9TRElPXFxuICAzMjpcXHRcXHR0cmlzdGF0ZSBcXFwiUmVkcGluZSBTaWduYWxzIFNESU8gYnVzIHN1cHBvcnRcXFwiXFxuICAzMzpcXHRcXHRkZXBlbmRzIG9uIE1NQyBcXHUwMDI2XFx1MDAyNiBSU0lfOTFYXFxuICAzNDpcXHRcXHRkZWZhdWx0IG1cXG4gIDM1OlxcdFxcdGhlbHBcXG4gIDM2OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgU0RJTyBidXMgc3VwcG9ydCBpbiByc2kgZHJpdmVycy5cXG4gIDM3OlxcdFxcdCAgU2VsZWN0IE0gKHJlY29tbWVuZGVkKSwgaWYgeW91IGhhdmUgYSBSU0kgMXgxIHdpcmVsZXNzIG1vZHVsZS5cXG4gIDM4OlxcdFxcbiAgMzk6XFx0Y29uZmlnIFJTSV9VU0JcXG4gIDQwOlxcdFxcdHRyaXN0YXRlIFxcXCJSZWRwaW5lIFNpZ25hbHMgVVNCIGJ1cyBzdXBwb3J0XFxcIlxcbiAgNDE6XFx0XFx0ZGVwZW5kcyBvbiBVU0IgXFx1MDAyNlxcdTAwMjYgUlNJXzkxWFxcbiAgNDI6XFx0XFx0ZGVmYXVsdCBtXFxuICA0MzpcXHRcXHRoZWxwXFxuICA0NDpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFVTQiBidXMgc3VwcG9ydCBpbiByc2kgZHJpdmVycy5cXG4gIDQ1OlxcdFxcdCAgU2VsZWN0IE0gKHJlY29tbWVuZGVkKSwgaWYgeW91IGhhdmUgYSBSU0kgMXgxIHdpcmVsZXNzIG1vZHVsZS5cXG4gIDQ2OlxcdFxcbiAgNDc6XFx0Y29uZmlnIFJTSV9DT0VYXFxuICA0ODpcXHRcXHRib29sIFxcXCJSZWRwaW5lIFNpZ25hbHMgV0xBTiBCVCBDb2V4aXN0ZW5jZSBzdXBwb3J0XFxcIlxcbiAgNDk6XFx0XFx0ZGVwZW5kcyBvbiBCVCBcXHUwMDI2XFx1MDAyNiBSU0lfOTFYXFxuICA1MDpcXHRcXHRkZXBlbmRzIG9uICEoQlQ9bSBcXHUwMDI2XFx1MDAyNiBSU0lfOTFYPXkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjQxOjExLjc3MjQwODY5OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY2MTYyOTExNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBVU0IgRHJpdmVyIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gYFJTSV9VU0JgIGlzIHRoZSBrZXksIG1lYW5pbmcgdGhlIGNvZGUgdXNlcyB0aGUgVVNCIGJ1cyAoYENPTkZJR19SU0lfVVNCYCwgYENPTkZJR19SU0lfOTFYYCkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleHBsb3JlIHRoZSBVU0IgZHJpdmVycywgYW5kIEkga25vdyB0aGF0IEkgY2FuIGxldmVyYWdlIHRoZSBVU0IgUmF3IEdhZGdldCBvciBzeXprYWxsZXIgZnV6emluZywgZXNwZWNpYWxseSB3aXRoaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhhdCB3b3VsZCBhbGxvdyBmb3IgZW11bGF0aW9uIGFuZCBtb3JlIHJvYnVzdCB0ZXN0aW5nLiBCdXQgYmVmb3JlIEkgZGl2ZSBpbnRvIGFueSBvZiB0aGF0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhIHNwZWNpZmljIGZ1bmN0aW9uIGNhbGw6IGByc2lfaGFsX2xvYWRfa2V5YC4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBiZWluZyB1c2VkLiBUaW1lIHRvIGdyZXAgZm9yIGByc2lfaGFsX2xvYWRfa2V5YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgb2YgdGhhdCBmdW5jdGlvbiB0byBjb250aW51ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY1MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6NDE6MTguMzg4NzAxNjA4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTQxNTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJzaV9oYWxfbG9hZF9rZXlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM9OTc2PXN0YXRpYyBpbnQgcnNpX2hhbF9rZXlfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xMDA1LVxcdFxcdCAgICAoa2V5LVxcdTAwM2VjaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDApKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoxMDA2OlxcdFxcdFxcdHN0YXR1cyA9IHJzaV9oYWxfbG9hZF9rZXkoYWRhcHRlci1cXHUwMDNlcHJpdixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTEwMDctXFx0XFx0XFx0XFx0XFx0XFx0ICBrZXktXFx1MDAzZWtleSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTAxOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjEwMTk6XFx0c3RhdHVzID0gcnNpX2hhbF9sb2FkX2tleShhZGFwdGVyLVxcdTAwM2Vwcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTAyMC1cXHRcXHRcXHRcXHQgIGtleS1cXHUwMDNla2V5LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYz0xNDIyPXN0YXRpYyBpbnQgcnNpX21hYzgwMjExX3N0YV9hZGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTE0OTQtXFx0XFx0XFx0XFx0ICAgIChrZXktXFx1MDAzZWNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MCkpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoxNDk1OlxcdFxcdFxcdFxcdFxcdHJzaV9oYWxfbG9hZF9rZXkoYWRhcHRlci1cXHUwMDNlcHJpdixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTE0OTYtXFx0XFx0XFx0XFx0XFx0XFx0XFx0IGtleS1cXHUwMDNla2V5LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jPTcxMT1pbnQgcnNpX3NldF92YXBfY2FwYWJpbGl0aWVzKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tZ210LmMtNzgwLS8qKlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYzo3ODE6ICogcnNpX2hhbF9sb2FkX2tleSgpIC0gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGxvYWQga2V5cyB3aXRoaW4gdGhlIGZpcm13YXJlLlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYy03ODItICogQGNvbW1vbjogUG9pbnRlciB0byB0aGUgZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlLlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jLTc5Mi0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tZ210LmM6NzkzOmludCByc2lfaGFsX2xvYWRfa2V5KHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jLTc5NC1cXHRcXHQgICAgIHU4ICpkYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9tZ210Lmg9NzE3PWludCByc2lfc2VuZF9hZ2dyZWdhdGlvbl9wYXJhbXNfZnJhbWUoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbiwgdTE2IHRpZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfbWdtdC5oLTcxOS1cXHRcXHRcXHRcXHQgICAgICB1OCBzdGFfaWQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfbWdtdC5oOjcyMDppbnQgcnNpX2hhbF9sb2FkX2tleShzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCB1OCAqZGF0YSwgdTE2IGtleV9sZW4sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9tZ210LmgtNzIxLVxcdFxcdCAgICAgdTgga2V5X3R5cGUsIHU4IGtleV9pZCwgdTMyIGNpcGhlciwgczE2IHN0YV9pZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6NDE6MTguNDMyMjUwMjI2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU2NzAwODg4ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDb2RlOiBVbmRlcnN0YW5kaW5nIHRoZSBLZXkgQ2hhbmdlKipcblxuT2theSwgc28gd2UndmUgZ290IGEgbW9kaWZpY2F0aW9uIGhlcmUsIGFuZCBteSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogYmVoaW5kIHRoaXMuIFRoZSBiZXN0IGFwcHJvYWNoIGlzIHRvIGV4YW1pbmUgYHJzaV9oYWxfbG9hZF9rZXlgIGFuZCBgcnNpX2hhbF9rZXlfY29uZmlnYC4gTG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnMgd2lsbCBnaXZlIG1lIHRoZSBjb250ZXh0dWFsIGNsdWVzIEkgbmVlZC4gU3BlY2lmaWNhbGx5LCBieSByZXZpZXdpbmcgdGhlc2UsIEknbSBleHBlY3RpbmcgdG8gZ2FpbiBpbnNpZ2h0cyBpbnRvIGhvdyB0aGUga2V5IGxvYWRpbmcgcHJvY2VzcyBmdW5jdGlvbnMgd2l0aGluIHRoaXMgc3BlY2lmaWMgSEFMIChIYXJkd2FyZSBBYnN0cmFjdGlvbiBMYXllcikuIEkgYW50aWNpcGF0ZSBmaW5kaW5nIG91dCB3aGF0IHRoZSBrZXkgbG9hZGluZyByb3V0aW5lcyBkbywgdGhlIGNvbmZpZyByZXF1aXJlbWVudHMsIGFuZCBob3cgdGhpcyBwYXJ0aWN1bGFyIG1vZGlmaWNhdGlvbiBwbGF5cyBpbnRvIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZS4gSG9wZWZ1bGx5IEkgY2FuIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGUgY2hhbmdlIHdpdGggdGhpcyBhcHByb2FjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg0NywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjQxOjQ0LjEwMjM0MTMwM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc5MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc5MDpcXHQgKlxcbiA3OTE6XFx0ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuXFxuIDc5MjpcXHQgKi9cXG4gNzkzOlxcdGludCByc2lfaGFsX2xvYWRfa2V5KHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sXFxuIDc5NDpcXHRcXHRcXHQgICAgIHU4ICpkYXRhLFxcbiA3OTU6XFx0XFx0XFx0ICAgICB1MTYga2V5X2xlbixcXG4gNzk2OlxcdFxcdFxcdCAgICAgdTgga2V5X3R5cGUsXFxuIDc5NzpcXHRcXHRcXHQgICAgIHU4IGtleV9pZCxcXG4gNzk4OlxcdFxcdFxcdCAgICAgdTMyIGNpcGhlcixcXG4gNzk5OlxcdFxcdFxcdCAgICAgczE2IHN0YV9pZCxcXG4gODAwOlxcdFxcdFxcdCAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZilcXG4gODAxOlxcdHtcXG4gODAyOlxcdFxcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xcbiA4MDM6XFx0XFx0c3RydWN0IHJzaV9zZXRfa2V5ICpzZXRfa2V5O1xcbiA4MDQ6XFx0XFx0dTE2IGtleV9kZXNjcmlwdG9yID0gMDtcXG4gODA1OlxcdFxcdHUxNiBmcmFtZV9sZW4gPSBzaXplb2Yoc3RydWN0IHJzaV9zZXRfa2V5KTtcXG4gODA2OlxcdFxcbiA4MDc6XFx0XFx0cnNpX2RiZyhNR01UX1RYX1pPTkUsIFxcXCIlczogU2VuZGluZyBsb2FkIGtleSBmcmFtZVxcXFxuXFxcIiwgX19mdW5jX18pO1xcbiA4MDg6XFx0XFxuIDgwOTpcXHRcXHRza2IgPSBkZXZfYWxsb2Nfc2tiKGZyYW1lX2xlbik7XFxuIDgxMDpcXHRcXHRpZiAoIXNrYikge1xcbiA4MTE6XFx0XFx0XFx0cnNpX2RiZyhFUlJfWk9ORSwgXFxcIiVzOiBGYWlsZWQgaW4gYWxsb2NhdGlvbiBvZiBza2JcXFxcblxcXCIsXFxuIDgxMjpcXHRcXHRcXHRcXHRfX2Z1bmNfXyk7XFxuIDgxMzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gODE0OlxcdFxcdH1cXG4gODE1OlxcdFxcbiA4MTY6XFx0XFx0bWVtc2V0KHNrYi1cXHUwMDNlZGF0YSwgMCwgZnJhbWVfbGVuKTtcXG4gODE3OlxcdFxcdHNldF9rZXkgPSAoc3RydWN0IHJzaV9zZXRfa2V5ICopc2tiLVxcdTAwM2VkYXRhO1xcbiA4MTg6XFx0XFxuIDgxOTpcXHRcXHRpZiAoa2V5X3R5cGUgPT0gUlNJX0dST1VQX0tFWSkge1xcbiA4MjA6XFx0XFx0XFx0a2V5X2Rlc2NyaXB0b3IgPSBSU0lfS0VZX1RZUEVfQlJPQURDQVNUO1xcbiA4MjE6XFx0XFx0XFx0aWYgKHZpZi1cXHUwMDNldHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUClcXG4gODIyOlxcdFxcdFxcdFxcdGtleV9kZXNjcmlwdG9yIHw9IFJTSV9LRVlfTU9ERV9BUDtcXG4gODIzOlxcdFxcdH1cXG4gODI0OlxcdFxcdGlmICgoY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwKSB8fFxcbiA4MjU6XFx0XFx0ICAgIChjaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0KSkge1xcbiA4MjY6XFx0XFx0XFx0a2V5X2lkID0gMDtcXG4gODI3OlxcdFxcdFxcdGtleV9kZXNjcmlwdG9yIHw9IFJTSV9XRVBfS0VZO1xcbiA4Mjg6XFx0XFx0XFx0aWYgKGtleV9sZW4gXFx1MDAzZT0gMTMpXFxuIDgyOTpcXHRcXHRcXHRcXHRrZXlfZGVzY3JpcHRvciB8PSBSU0lfV0VQX0tFWV8xMDQ7XFxuIDgzMDpcXHRcXHR9IGVsc2UgaWYgKGNpcGhlciAhPSBLRVlfVFlQRV9DTEVBUikge1xcbiA4MzE6XFx0XFx0XFx0a2V5X2Rlc2NyaXB0b3IgfD0gUlNJX0NJUEhFUl9XUEE7XFxuIDgzMjpcXHRcXHRcXHRpZiAoY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVApXFxuIDgzMzpcXHRcXHRcXHRcXHRrZXlfZGVzY3JpcHRvciB8PSBSU0lfQ0lQSEVSX1RLSVA7XFxuIDgzNDpcXHRcXHR9XFxuIDgzNTpcXHRcXHRrZXlfZGVzY3JpcHRvciB8PSBSU0lfUFJPVEVDVF9EQVRBX0ZSQU1FUztcXG4gODM2OlxcdFxcdGtleV9kZXNjcmlwdG9yIHw9IChrZXlfaWQgXFx1MDAzY1xcdTAwM2MgUlNJX0tFWV9JRF9PRkZTRVQpO1xcbiA4Mzc6XFx0XFxuIDgzODpcXHRcXHRyc2lfc2V0X2xlbl9xbm8oXFx1MDAyNnNldF9rZXktXFx1MDAzZWRlc2NfZHdvcmQwLmxlbl9xbm8sXFxuIDgzOTpcXHRcXHRcXHRcXHQoZnJhbWVfbGVuIC0gRlJBTUVfREVTQ19TWiksIFJTSV9XSUZJX01HTVRfUSk7XFxuIDg0MDpcXHRcXHRzZXRfa2V5LVxcdTAwM2VkZXNjX2R3b3JkMC5mcmFtZV90eXBlID0gU0VUX0tFWV9SRVE7XFxuIDg0MTpcXHRcXHRzZXRfa2V5LVxcdTAwM2VrZXlfZGVzYyA9IGNwdV90b19sZTE2KGtleV9kZXNjcmlwdG9yKTtcXG4gODQyOlxcdFxcdHNldF9rZXktXFx1MDAzZXN0YV9pZCA9IHN0YV9pZDtcXG4gODQzOlxcdFxcbiA4NDQ6XFx0XFx0aWYgKGRhdGEpIHtcXG4gODQ1OlxcdFxcdFxcdGlmICgoY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwKSB8fFxcbiA4NDY6XFx0XFx0XFx0ICAgIChjaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0KSkge1xcbiA4NDc6XFx0XFx0XFx0XFx0bWVtY3B5KFxcdTAwMjZzZXRfa2V5LVxcdTAwM2VrZXlba2V5X2lkXVsxXSwgZGF0YSwga2V5X2xlbiAqIDIpO1xcbiA4NDg6XFx0XFx0XFx0fSBlbHNlIHtcXG4gODQ5OlxcdFxcdFxcdFxcdG1lbWNweShcXHUwMDI2c2V0X2tleS1cXHUwMDNla2V5WzBdWzBdLCBkYXRhLCBrZXlfbGVuKTtcXG4gODUwOlxcdFxcdFxcdH1cXG4gODUxOlxcdFxcdFxcdGlmIChjaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfVEtJUCkge1xcbiA4NTI6XFx0XFx0XFx0XFx0bWVtY3B5KHNldF9rZXktXFx1MDAzZXR4X21pY19rZXksIFxcdTAwMjZkYXRhWzE2XSwgOCk7XFxuIDg1MzpcXHRcXHRcXHRcXHRtZW1jcHkoc2V0X2tleS1cXHUwMDNlcnhfbWljX2tleSwgXFx1MDAyNmRhdGFbMjRdLCA4KTtcXG4gODU0OlxcdFxcdFxcdH1cXG4gODU1OlxcdFxcdH0gZWxzZSB7XFxuIDg1NjpcXHRcXHRcXHRtZW1zZXQoXFx1MDAyNnNldF9rZXlbRlJBTUVfREVTQ19TWl0sIDAsIGZyYW1lX2xlbiAtIEZSQU1FX0RFU0NfU1opO1xcbiA4NTc6XFx0XFx0fVxcbiA4NTg6XFx0XFxuIDg1OTpcXHRcXHRza2JfcHV0KHNrYiwgZnJhbWVfbGVuKTtcXG4gODYwOlxcdFxcbiA4NjE6XFx0XFx0cmV0dXJuIHJzaV9zZW5kX2ludGVybmFsX21nbXRfZnJhbWUoY29tbW9uLCBza2IpO1xcbiA4NjI6XFx0fVxcbiA4NjM6XFx0XFxuIDg2NDpcXHQvKlxcbiA4NjU6XFx0ICogVGhpcyBmdW5jdGlvbiBzZW5kcyB0aGUgY29tbW9uIGRldmljZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgdG8gZGV2aWNlLlxcbiA4NjY6XFx0ICogVGhpcyBmcmFtZSBpbmNsdWRlcyB0aGUgdXNlZnVsIGluZm9ybWF0aW9uIHRvIG1ha2UgZGV2aWNlIHdvcmtzIG9uXFxuIDg2NzpcXHQgKiBzcGVjaWZpYyBvcGVyYXRpbmcgbW9kZS5cXG4gODY4OlxcdCAqL1xcbiA4Njk6XFx0c3RhdGljIGludCByc2lfc2VuZF9jb21tb25fZGV2X3BhcmFtcyhzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDo0MTo0NC4xMDI1MDYyMzRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTIzOTQzOTgwMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGByc2lgIEtlcm5lbCBEcml2ZXIgQnVnZml4KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgYmVmb3JlIHRoZSBmaXgsIHRoZSBjb2RlIHdhcyBtYWtpbmcgdW5jb25kaXRpb25hbCBgbWVtY3B5YCBjYWxsczogYG1lbWNweShzZXRfa2V5LVx1MDAzZXR4X21pY19rZXksIFx1MDAyNmRhdGFbMTZdLCA4KTtgIGFuZCBgbWVtY3B5KHNldF9rZXktXHUwMDNlcnhfbWljX2tleSwgXHUwMDI2ZGF0YVsyNF0sIDgpO2AuIFRoaXMgd2FzIHByb2JsZW1hdGljLiBUaGUgaXNzdWUgd2FzIHRoYXQgdGhlIGNvZGUgd2FzIGFzc3VtaW5nIGEgbWluaW11bSBkYXRhIHNpemUgKHNwZWNpZmljYWxseSwgdGhhdCBgZGF0YWAgd2FzIGF0IGxlYXN0IDMyIGJ5dGVzIGxvbmcpLiBJdCBkaWQgdGhpcyByZWdhcmRsZXNzIG9mIHRoZSBhY3R1YWwga2V5IGxlbmd0aCAoYGtleV9sZW5gKSwgd2hpY2ggY2FuIGJlIHNtYWxsZXIgKGUuZy4sIDE2IGJ5dGVzIGZvciBDQ01QL0FFUykuIFNvLCBpZiBga2V5X2xlbmAgd2FzIGxlc3MgdGhhbiAzMiwgaXQgd2FzIGRlZmluaXRlbHkgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIHJlYWRzLiBDbGFzc2ljIG1lbW9yeSBjb3JydXB0aW9uIHZ1bG5lcmFiaWxpdHkhXG5cblRoZSBmaXgsIHRoYW5rIGdvb2RuZXNzLCBhZGRyZXNzZXMgdGhpcyBieSBhZGRpbmcgYSBjcnVjaWFsIGNoZWNrOiBgaWYgKGNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9US0lQKWAuIFRoYXQncyBhIHNvbGlkIGRlZmVuc2UuIEJ5IG9ubHkgZXhlY3V0aW5nIHRob3NlIGBtZW1jcHlgIGNhbGxzIHdoZW4gdGhlIGNpcGhlciBzdWl0ZSBpcyBUS0lQLCBpdCBlZmZlY3RpdmVseSBwcmV2ZW50cyB0aGUgb3V0LW9mLWJvdW5kcyByZWFkcyBmb3Igb3RoZXIgY2lwaGVycyB3aGVyZSB0aGUgZGF0YSBsZW5ndGggaXMgc2hvcnRlci4gVGhpcyBpcyBhIGxlZ2l0aW1hdGUgYnVnZml4IGFuZCBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgb25lIGF0IHRoYXQuIEEgZ29vZCBmaW5kLlxuXG5Ob3csIG15IG1pbmQgaXMgYWxyZWFkeSB0aGlua2luZyBhYm91dCBleHBsb2l0YWJpbGl0eS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHJlYWNoYWJsZSB0aGlzIGlzLiBJIG5lZWQgdG8gc2VlIGlmIGByc2lfaGFsX2xvYWRfa2V5YCBpcyBzb21ldGhpbmcgSSBjYW4gdHJpZ2dlciBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciB1c2luZyBVU0IgZW11bGF0aW9uIHRvb2xzIGxpa2UgU3l6a2FsbGVyLiBIbW0sIGFuZCB0aGUgYHJzaV85MXhgIGRyaXZlciwgaXQgKmRvZXMqIGhhdmUgVVNCIGludGVyZmFjZSBzdXBwb3J0IGFjY29yZGluZyB0byBgQ09ORklHX1JTSV9VU0JgLiBPa2F5LCBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBVU0IgZGV2aWNlIHByb2JlIHdvcmtzIGZvciBSU0kuIFRoYXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ4MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjQzOjE2LjQ5NjkwODA3NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3NDMzNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnNpX3Byb2JlfHJzaV91c2JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9NYWtlZmlsZT05PXJzaV85MXgtJChDT05GSUdfUlNJX0RFQlVHRlMpXFx0Kz0gcnNpXzkxeF9kZWJ1Z2ZzLm9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvTWFrZWZpbGUtMTAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL01ha2VmaWxlOjExOnJzaV91c2IteVxcdFxcdFxcdCs9IHJzaV85MXhfdXNiLm8gcnNpXzkxeF91c2Jfb3BzLm9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvTWFrZWZpbGUtMTItcnNpX3NkaW8teVxcdFxcdFxcdCs9IHJzaV85MXhfc2Rpby5vIHJzaV85MXhfc2Rpb19vcHMub1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL01ha2VmaWxlPTE0PW9iai0kKENPTkZJR19SU0lfU0RJTylcXHRcXHQrPSByc2lfc2Rpby5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL01ha2VmaWxlOjE1Om9iai0kKENPTkZJR19SU0lfVVNCKVxcdFxcdCs9IHJzaV91c2Iub1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFpbi5jLTI1LSNpbmNsdWRlIFxcXCJyc2lfaGFsLmhcXFwiXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFpbi5jOjI2OiNpbmNsdWRlIFxcXCJyc2lfdXNiLmhcXFwiXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFpbi5jLTI3LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfc2Rpby5jPTk3OT1zdGF0aWMgc3RydWN0IHJzaV9ob3N0X2ludGZfb3BzIHNkaW9faG9zdF9pbnRmX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3NkaW8uYy05OTItLyoqXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfc2Rpby5jOjk5MzogKiByc2lfcHJvYmUoKSAtIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGtlcm5lbCB3aGVuIHRoZSBkcml2ZXIgcHJvdmlkZWRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9zZGlvLmMtOTk0LSAqXFx0XFx0IFZlbmRvciBhbmQgZGV2aWNlIElEcyBhcmUgbWF0Y2hlZC4gQWxsIHRoZSBpbml0aWFsaXphdGlvblxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfc2Rpby5jLTEwMDAtICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfc2Rpby5jOjEwMDE6c3RhdGljIGludCByc2lfcHJvYmUoc3RydWN0IHNkaW9fZnVuYyAqcGZ1bmN0aW9uLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3NkaW8uYy0xMDAyLVxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHNkaW9fZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3NkaW8uYz0xNTA5PXN0YXRpYyBzdHJ1Y3Qgc2Rpb19kcml2ZXIgcnNpX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9zZGlvLmMtMTUxMC1cXHQubmFtZSAgICAgICA9IFxcXCJSU0ktU0RJTyBXTEFOXFxcIixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9zZGlvLmM6MTUxMTpcXHQucHJvYmUgICAgICA9IHJzaV9wcm9iZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9zZGlvLmMtMTUxMi1cXHQucmVtb3ZlICAgICA9IHJzaV9kaXNjb25uZWN0LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtMjAtI2luY2x1ZGUgXFx1MDAzY25ldC9yc2lfOTF4LmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6MjE6I2luY2x1ZGUgXFxcInJzaV91c2IuaFxcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy0yMi0jaW5jbHVkZSBcXFwicnNpX2hhbC5oXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM9MzA9c3RhdGljIGludCByc2lfcnhfdXJiX3N1Ym1pdChzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyLCB1OCBlcF9udW0sIGdmcF90IGZsYWdzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTMyLS8qKlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjMzOiAqIHJzaV91c2JfY2FyZF93cml0ZSgpIC0gVGhpcyBmdW5jdGlvbiB3cml0ZXMgdG8gdGhlIFVTQiBDYXJkLlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTM0LSAqIEBhZGFwdGVyOiBQb2ludGVyIHRvIHRoZSBhZGFwdGVyIHN0cnVjdHVyZS5cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTQwLSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjQxOnN0YXRpYyBpbnQgcnNpX3VzYl9jYXJkX3dyaXRlKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNDItXFx0XFx0XFx0ICAgICAgdTggKmJ1ZixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jPTgxPXN0YXRpYyBpbnQgcnNpX3dyaXRlX211bHRpcGxlKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy05Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo5ODpcXHRyZXR1cm4gcnNpX3VzYl9jYXJkX3dyaXRlKGFkYXB0ZXIsIGRhdGEsIGNvdW50LCBlbmRwb2ludCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtOTktfVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM9MTA5PXN0YXRpYyBpbnQgcnNpX2ZpbmRfYnVsa19pbl9hbmRfb3V0X2VuZHBvaW50cyhzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtMTY2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjE2NzovKiByc2lfdXNiX3JlZ19yZWFkKCkgLSBUaGlzIGZ1bmN0aW9uIHJlYWRzIGRhdGEgZnJvbSBnaXZlbiByZWdpc3RlciBhZGRyZXNzLlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTE2OC0gKiBAdXNiZGV2OiBQb2ludGVyIHRvIHRoZSB1c2JfZGV2aWNlIHN0cnVjdHVyZS5cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTE3NC0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzoxNzU6c3RhdGljIGludCByc2lfdXNiX3JlZ19yZWFkKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtMTc2LVxcdFxcdFxcdCAgICB1MzIgcmVnLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtMjEwLS8qKlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjIxMTogKiByc2lfdXNiX3JlZ193cml0ZSgpIC0gVGhpcyBmdW5jdGlvbiB3cml0ZXMgdGhlIGdpdmVuIGRhdGEgaW50byB0aGUgZ2l2ZW5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy0yMTItICpcXHRcXHRcXHQgcmVnaXN0ZXIgYWRkcmVzcy5cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTIxOS0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzoyMjA6c3RhdGljIGludCByc2lfdXNiX3JlZ193cml0ZShzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTIyMS1cXHRcXHRcXHQgICAgIHUzMiByZWcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYz0zMjQ9c3RhdGljIGludCByc2lfcnhfdXJiX3N1Ym1pdChzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyLCB1OCBlcF9udW0sIGdmcF90IG1lbV9mbGFncylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTM2MS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzozNjI6c3RhdGljIGludCByc2lfdXNiX3JlYWRfcmVnaXN0ZXJfbXVsdGlwbGUoc3RydWN0IHJzaV9odyAqYWRhcHRlciwgdTMyIGFkZHIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtMzYzLVxcdFxcdFxcdFxcdFxcdCAgdTggKmRhdGEsIHUxNiBjb3VudClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTQwMi0vKipcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo0MDM6ICogcnNpX3VzYl93cml0ZV9yZWdpc3Rlcl9tdWx0aXBsZSgpIC0gVGhpcyBmdW5jdGlvbiB3cml0ZXMgbXVsdGlwbGUgYnl0ZXMgb2ZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy00MDQtICpcXHRcXHRcXHRcXHQgICAgICAgaW5mb3JtYXRpb24gdG8gbXVsdGlwbGUgcmVnaXN0ZXJzLlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNDExLSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjQxMjpzdGF0aWMgaW50IHJzaV91c2Jfd3JpdGVfcmVnaXN0ZXJfbXVsdGlwbGUoc3RydWN0IHJzaV9odyAqYWRhcHRlciwgdTMyIGFkZHIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNDEzLVxcdFxcdFxcdFxcdFxcdCAgIHU4ICpkYXRhLCB1MTYgY291bnQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy00NTItLyoqXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6NDUzOiAqcnNpX3VzYl9ob3N0X2ludGZfd3JpdGVfcGt0KCkgLSBUaGlzIGZ1bmN0aW9uIHdyaXRlcyB0aGUgcGFja2V0IHRvIHRoZVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTQ1NC0gKlxcdFxcdFxcdFxcdCAgIFVTQiBjYXJkLlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNDYwLSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjQ2MTpzdGF0aWMgaW50IHJzaV91c2JfaG9zdF9pbnRmX3dyaXRlX3BrdChzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTQ2Mi1cXHRcXHRcXHRcXHQgICAgICAgdTggKnBrdCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTQ3Ni1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo0Nzc6c3RhdGljIGludCByc2lfdXNiX21hc3Rlcl9yZWdfcmVhZChzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyLCB1MzIgcmVnLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTQ3OC1cXHRcXHRcXHRcXHQgICB1MzIgKnZhbHVlLCB1MTYgbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNDg0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjQ4NTpcXHRyZXQgPSByc2lfdXNiX3JlZ19yZWFkKHVzYmRldiwgcmVnLCBcXHUwMDI2dGVtcCwgbGVuKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy00ODYtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy00OTItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6NDkzOnN0YXRpYyBpbnQgcnNpX3VzYl9tYXN0ZXJfcmVnX3dyaXRlKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNDk0LVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIHJlZyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTQ5OS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo1MDA6XFx0cmV0dXJuIHJzaV91c2JfcmVnX3dyaXRlKHVzYmRldiwgcmVnLCB2YWx1ZSwgbGVuKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy01MDEtfVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTUwMi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo1MDM6c3RhdGljIGludCByc2lfdXNiX2xvYWRfZGF0YV9tYXN0ZXJfd3JpdGUoc3RydWN0IHJzaV9odyAqYWRhcHRlcixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy01MDQtXFx0XFx0XFx0XFx0XFx0ICB1MzIgYmFzZV9hZGRyZXNzLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNTE3LVxcdFxcdG1lbWNweSh0ZW1wX2J1ZiwgdGFfZmlybXdhcmUgKyBjdXJfaW5keCwgYmxvY2tfc2l6ZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6NTE4OlxcdFxcdHN0YXR1cyA9IHJzaV91c2Jfd3JpdGVfcmVnaXN0ZXJfbXVsdGlwbGUoYWRhcHRlciwgYmFzZV9hZGRyZXNzLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTUxOS1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgKHU4ICopKHRlbXBfYnVmKSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTUzMS1cXHRcXHQgICAgICAgaW5zdHJ1Y3Rpb25zX3N6ICUgYmxvY2tfc2l6ZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6NTMyOlxcdFxcdHN0YXR1cyA9IHJzaV91c2Jfd3JpdGVfcmVnaXN0ZXJfbXVsdGlwbGVcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy01MzMtXFx0XFx0XFx0XFx0XFx0XFx0KGFkYXB0ZXIsIGJhc2VfYWRkcmVzcyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jPTU0NT1zdGF0aWMgc3RydWN0IHJzaV9ob3N0X2ludGZfb3BzIHVzYl9ob3N0X2ludGZfb3BzID0ge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjU0NjpcXHQud3JpdGVfcGt0XFx0XFx0PSByc2lfdXNiX2hvc3RfaW50Zl93cml0ZV9wa3QsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6NTQ3OlxcdC5yZWFkX3JlZ19tdWx0aXBsZVxcdD0gcnNpX3VzYl9yZWFkX3JlZ2lzdGVyX211bHRpcGxlLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjU0ODpcXHQud3JpdGVfcmVnX211bHRpcGxlXFx0PSByc2lfdXNiX3dyaXRlX3JlZ2lzdGVyX211bHRpcGxlLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjU0OTpcXHQubWFzdGVyX3JlZ19yZWFkXFx0PSByc2lfdXNiX21hc3Rlcl9yZWdfcmVhZCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo1NTA6XFx0Lm1hc3Rlcl9yZWdfd3JpdGVcXHQ9IHJzaV91c2JfbWFzdGVyX3JlZ193cml0ZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo1NTE6XFx0LmxvYWRfZGF0YV9tYXN0ZXJfd3JpdGVcXHQ9IHJzaV91c2JfbG9hZF9kYXRhX21hc3Rlcl93cml0ZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy01NTItfTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jPTU2MD1zdGF0aWMgdm9pZCByc2lfZGVpbml0X3VzYl9pbnRlcmZhY2Uoc3RydWN0IHJzaV9odyAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTU3Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo1NzM6c3RhdGljIGludCByc2lfdXNiX2luaXRfcngoc3RydWN0IHJzaV9odyAqYWRhcHRlcilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy01NzQte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNTk0LVxcdGlmIChyc2lfY3JlYXRlX2t0aHJlYWQoYWRhcHRlci1cXHUwMDNlcHJpdiwgXFx1MDAyNmRldi1cXHUwMDNlcnhfdGhyZWFkLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjU5NTpcXHRcXHRcXHQgICAgICAgcnNpX3VzYl9yeF90aHJlYWQsIFxcXCJSWC1UaHJlYWRcXFwiKSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTU5Ni1cXHRcXHRyc2lfZGJnKEVSUl9aT05FLCBcXFwiJXM6IFVuYWJsZSB0byBpbml0IHJ4IHRocmRcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jPTYxNz1zdGF0aWMgaW50IHJzaV9pbml0X3VzYl9pbnRlcmZhY2Uoc3RydWN0IHJzaV9odyAqYWRhcHRlcixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTY0NC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo2NDU6XFx0aWYgKHJzaV91c2JfaW5pdF9yeChhZGFwdGVyKSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTY0Ni1cXHRcXHRyc2lfZGJnKEVSUl9aT05FLCBcXFwiRmFpbGVkIHRvIGluaXQgUlggaGFuZGxlXFxcXG5cXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTY1NC1cXHQvKiBJbml0aWFsaXppbmcgZnVuY3Rpb24gY2FsbGJhY2tzICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6NjU1OlxcdGFkYXB0ZXItXFx1MDAzZWNoZWNrX2h3X3F1ZXVlX3N0YXR1cyA9IHJzaV91c2JfY2hlY2tfcXVldWVfc3RhdHVzO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjY1NjpcXHRhZGFwdGVyLVxcdTAwM2VkZXRlcm1pbmVfZXZlbnRfdGltZW91dCA9IHJzaV91c2JfZXZlbnRfdGltZW91dDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy02NTctXFx0YWRhcHRlci1cXHUwMDNlcnNpX2hvc3RfaW50ZiA9IFJTSV9IT1NUX0lOVEZfVVNCO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM9Njc2PXN0YXRpYyBpbnQgdXNiX3VscF9yZWFkX3dyaXRlKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIsIHUxNiBhZGRyLCB1MzIgZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTY4MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo2ODE6XFx0cmV0ID0gcnNpX3VzYl9tYXN0ZXJfcmVnX3dyaXRlXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNjgyLVxcdFxcdFxcdChhZGFwdGVyLCBSU0lfR1NQSV9EQVRBX1JFRzEsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy02ODYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6Njg3OlxcdHJldCA9IHJzaV91c2JfbWFzdGVyX3JlZ193cml0ZShhZGFwdGVyLCBSU0lfR1NQSV9EQVRBX1JFRzAsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNjg4LVxcdFxcdFxcdFxcdCAgICAgICAoZGF0YSBcXHUwMDI2IDB4ZmZmZiksIDIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNjkyLVxcdC8qIEluaXRpYWxpemluZyBHU1BJIGZvciBVTFAgcmVhZC93cml0ZXMgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo2OTM6XFx0cnNpX3VzYl9tYXN0ZXJfcmVnX3dyaXRlKGFkYXB0ZXIsIFJTSV9HU1BJX0NUUkxfUkVHMCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy02OTQtXFx0XFx0XFx0XFx0IFJTSV9HU1BJX0NUUkxfUkVHMF9WQUxVRSwgMik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNjk1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjY5NjpcXHRyZXQgPSByc2lfdXNiX21hc3Rlcl9yZWdfd3JpdGUoYWRhcHRlciwgUlNJX0dTUElfQ1RSTF9SRUcxLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTY5Ny1cXHRcXHRcXHRcXHQgICAgICAgKChsZW5faW5fYml0cyAtIDEpIHwgUlNJX0dTUElfVFJJRyksIDIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM9NzA2PXN0YXRpYyBpbnQgcnNpX3Jlc2V0X2NhcmQoc3RydWN0IHJzaV9odyAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTcxMC1cXHRyc2lfZGJnKElORk9fWk9ORSwgXFxcIlJlc2V0dGluZyBDYXJkLi4uXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo3MTE6XFx0cnNpX3VzYl9tYXN0ZXJfcmVnX3dyaXRlKGFkYXB0ZXIsIFJTSV9UQV9IT0xEX1JFRywgMHhFLCA0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy03MTItXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy03MTctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6NzE4OlxcdHJldCA9IHJzaV91c2JfbWFzdGVyX3JlZ193cml0ZShhZGFwdGVyLCBTV0JMX1JFR09VVCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy03MTktXFx0XFx0XFx0XFx0ICAgICAgIFJTSV9GV19XRFRfRElTQUJMRV9SRVEsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy03NDctXFx0fSBlbHNlIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo3NDg6XFx0XFx0cmV0ID0gcnNpX3VzYl9tYXN0ZXJfcmVnX3dyaXRlKGFkYXB0ZXIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNzQ5LVxcdFxcdFxcdFxcdFxcdCAgICAgICBOV1BfV1dEX0lOVEVSUlVQVF9USU1FUixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTc1My1cXHRcXHRcXHRnb3RvIGZhaWw7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6NzU0OlxcdFxcdHJldCA9IHJzaV91c2JfbWFzdGVyX3JlZ193cml0ZShhZGFwdGVyLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTc1NS1cXHRcXHRcXHRcXHRcXHQgICAgICAgTldQX1dXRF9TWVNURU1fUkVTRVRfVElNRVIsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy03NTktXFx0XFx0XFx0Z290byBmYWlsO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjc2MDpcXHRcXHRyZXQgPSByc2lfdXNiX21hc3Rlcl9yZWdfd3JpdGUoYWRhcHRlcixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy03NjEtXFx0XFx0XFx0XFx0XFx0ICAgICAgIE5XUF9XV0RfTU9ERV9BTkRfUlNUQVJULFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNzc2LS8qKlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjc3NzogKiByc2lfcHJvYmUoKSAtIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGtlcm5lbCB3aGVuIHRoZSBkcml2ZXIgcHJvdmlkZWRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy03NzgtICpcXHRcXHQgVmVuZG9yIGFuZCBkZXZpY2UgSURzIGFyZSBtYXRjaGVkLiBBbGwgdGhlIGluaXRpYWxpemF0aW9uXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy03ODQtICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6Nzg1OnN0YXRpYyBpbnQgcnNpX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICpwZnVuY3Rpb24sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNzg2LVxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtODI2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjgyNzpcXHRzdGF0dXMgPSByc2lfdXNiX3JlZ19yZWFkKGRldi1cXHUwMDNldXNiZGV2LCBGV19TVEFUVVNfUkVHLCBcXHUwMDI2Zndfc3RhdHVzLCAyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy04MjgtXFx0aWYgKHN0YXR1cyBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYz05MjE9c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHJzaV9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtOTIyLVxcdC5uYW1lICAgICAgID0gXFxcIlJTSS1VU0IgV0xBTlxcXCIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6OTIzOlxcdC5wcm9iZSAgICAgID0gcnNpX3Byb2JlLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTkyNC1cXHQuZGlzY29ubmVjdCA9IHJzaV9kaXNjb25uZWN0LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiX29wcy5jLTE4LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9maXJtd2FyZS5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYl9vcHMuYzoxOTojaW5jbHVkZSBcXFwicnNpX3VzYi5oXFxcIlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYl9vcHMuYy0yMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2Jfb3BzLmMtMjEtLyoqXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiX29wcy5jOjIyOiAqIHJzaV91c2JfcnhfdGhyZWFkKCkgLSBUaGlzIGlzIGEga2VybmVsIHRocmVhZCB0byByZWNlaXZlIHRoZSBwYWNrZXRzIGZyb21cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2Jfb3BzLmMtMjMtICpcXHRcXHRcXHQgdGhlIFVTQiBkZXZpY2UuXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2Jfb3BzLmMtMjctICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiX29wcy5jOjI4OnZvaWQgcnNpX3VzYl9yeF90aHJlYWQoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2Jfb3BzLmMtMjkte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV91c2IuaD01Nj1zdHJ1Y3QgcnNpXzkxeF91c2JkZXYge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV91c2IuaC03Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX3VzYi5oOjczOnN0YXRpYyBpbmxpbmUgaW50IHJzaV91c2JfY2hlY2tfcXVldWVfc3RhdHVzKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIsIHU4IHFfbnVtKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfdXNiLmgtNzQte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV91c2IuaC03OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX3VzYi5oOjc5OnN0YXRpYyBpbmxpbmUgaW50IHJzaV91c2JfZXZlbnRfdGltZW91dChzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfdXNiLmgtODAte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV91c2IuaC04My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX3VzYi5oOjg0OnZvaWQgcnNpX3VzYl9yeF90aHJlYWQoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV91c2IuaC04NS0jZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6NDM6MTYuNTQyNjc0NDIzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3MTM4NDY2NTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpdmluZyBpbnRvIHRoZSBSU0kgV2ktRmkgRHJpdmVyIEtleSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGtleSBjb25maWd1cmF0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSBSU0kgV2ktRmkgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIDkxeCB2YXJpYW50LiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGByc2lfaGFsX2tleV9jb25maWdgIHdpdGhpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuY2AuIE15IGluaXRpYWwgcXVlc3Rpb24gaXMgaG93IHRoaXMga2V5IGNvbmZpZ3VyYXRpb24gaXMgYWN0dWFsbHkgdHJpZ2dlcmVkLiBJJ20gYmV0dGluZyBpdCdzIGEgYG1hYzgwMjExYCBjYWxsYmFjay4gWWVzLCB0aGF0IG1ha2VzIHNlbnNlLiBJdCdzIGxpa2VseSBnb2luZyB0byBiZSBoYW5kbGVkIGJ5IHRoZSBgc2V0X2tleWAgaGFuZGxlciB3aXRoaW4gYHJzaV9tYWM4MDIxMV9vcHNgLiBOb3csIHRvIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMgYW5kIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgY2FsbCBjaGFpbiwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgZ3JlcCB0aHJvdWdoIHRoZSBjb2RlIGZvciBpbnN0YW5jZXMgb2YgYm90aCBgcnNpX2hhbF9rZXlfY29uZmlnYCBhbmQgYHJzaV9tYWM4MDIxMV9vcHNgLiBUaGF0IHNob3VsZCBxdWlja2x5IGhpZ2hsaWdodCB0aGUgY29ubmVjdGlvbiBwb2ludHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDc0LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjQzOjMzLjY4MTE0NTA4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjgyMDY1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyc2lfaGFsX2tleV9jb25maWd8cnNpX21hYzgwMjExX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9yc2lcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYz05MTY9c3RhdGljIGludCByc2lfbWFjODAyMTFfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtOTY3LS8qKlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6OTY4OiAqIHJzaV9oYWxfa2V5X2NvbmZpZygpIC0gVGhpcyBmdW5jdGlvbiBsb2FkcyB0aGUga2V5cyBpbnRvIHRoZSBmaXJtd2FyZS5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTk2OS0gKiBAaHc6IFBvaW50ZXIgdG8gdGhlIGllZWU4MDIxMV9odyBzdHJ1Y3R1cmUuXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTk3NS0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjk3NjpzdGF0aWMgaW50IHJzaV9oYWxfa2V5X2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTk3Ny1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYz0xMDUwPXN0YXRpYyBpbnQgcnNpX21hYzgwMjExX3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTEwNjMtXFx0Y2FzZSBTRVRfS0VZOlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTA2NDpcXHRcXHRzdGF0dXMgPSByc2lfaGFsX2tleV9jb25maWcoaHcsIHZpZiwga2V5LCBzdGEpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTA2NS1cXHRcXHRpZiAoc3RhdHVzKSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTEwODMtXFx0XFx0bWVtc2V0KGtleSwgMCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYpKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjEwODQ6XFx0XFx0c3RhdHVzID0gcnNpX2hhbF9rZXlfY29uZmlnKGh3LCB2aWYsIGtleSwgc3RhKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTEwODUtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjQzOjMzLjcyNzk3MTM1OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODMzNTcwNTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIFJTSSBLZXkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgUlNJIGRyaXZlciBpcyBtYW5hZ2luZyBpdHMga2V5cyB3aXRoaW4gdGhlIDgwMi4xMSBmcmFtZXdvcmsuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHR3byBrZXkgZnVuY3Rpb25zOiBgcnNpX21hYzgwMjExX3NldF9rZXlgIGFuZCwgbW9yZSBicm9hZGx5LCB0aGUgYHJzaV9tYWM4MDIxMV9vcHNgIHN0cnVjdHVyZS4gYHJzaV9tYWM4MDIxMV9zZXRfa2V5YCBpcyB0aGUgbGlrZWx5IHBvaW50IG9mIGludGVyYWN0aW9uIGZvciBzZXR0aW5nIG9yIHVwZGF0aW5nIHRob3NlIGtleXM7IGl0J2xsIHRlbGwgbWUgaG93IHRoZXkgYXJlIGltcGxlbWVudGVkLiBEaWdnaW5nIGludG8gdGhlIG9wcyBzdHJ1Y3R1cmUsIHRoYXQncyB3aGVyZSBJIGNhbiBmaW5kIG90aGVyIGZ1bmN0aW9ucyB3aGljaCBjb3VsZCBiZSByZWxhdGVkIHRvIGtleSBoYW5kbGluZy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgaG93IHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIG1hYzgwMjExIGNvcmUgZm9yIHRoaXMgY3JpdGljYWwgc2VjdXJpdHkgZnVuY3Rpb24uIEkgZXhwZWN0IHRvIHNlZSB0aGUgdHlwaWNhbCBhbGxvY2F0aW9uLCBzZXR1cCwgYW5kIGluc2VydGlvbiBvZiB0aGUga2V5IG1hdGVyaWFsLCBsaWtlbHkgaW52b2x2aW5nIHNvbWUgaGFyZHdhcmUtc3BlY2lmaWMgaW50ZXJhY3Rpb24gdGhyb3VnaCB0aGUgZHJpdmVyJ3Mgb3duIG1lY2hhbmlzbXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgaGFyZHdhcmUgb2ZmbG9hZHMgdGhlIGVuY3J5cHRpb24vZGVjcnlwdGlvbiwgaWYgYXQgYWxsLCBhbmQgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBrZXkgZGVyaXZhdGlvbiBvciByb3RhdGlvbi4gVGhpcyBpcyB3aGVyZSBJJ2xsIHByb2JhYmx5IGZpbmQgdGhlIGtleSB0byBldmVyeXRoaW5nIGVsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDY4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6NDM6MzYuNTYxNTQ1MTQ5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTg0MjYwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyc2lfbWFjODAyMTFfc2V0X2tleVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9yc2lcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYz05NzY9c3RhdGljIGludCByc2lfaGFsX2tleV9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTEwNDAtLyoqXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoxMDQxOiAqIHJzaV9tYWM4MDIxMV9zZXRfa2V5KCkgLSBUaGlzIGZ1bmN0aW9uIHNldHMgdHlwZSBvZiBrZXkgdG8gYmUgbG9hZGVkLlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTA0Mi0gKiBAaHc6IFBvaW50ZXIgdG8gdGhlIGllZWU4MDIxMV9odyBzdHJ1Y3R1cmUuXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTEwNDktICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoxMDUwOnN0YXRpYyBpbnQgcnNpX21hYzgwMjExX3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xMDUxLVxcdFxcdFxcdFxcdGVudW0gc2V0X2tleV9jbWQgY21kLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYz0xOTgyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyBtYWM4MDIxMV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTE5OTYtXFx0LmNvbmZpZ3VyZV9maWx0ZXIgPSByc2lfbWFjODAyMTFfY29uZl9maWx0ZXIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoxOTk3OlxcdC5zZXRfa2V5ID0gcnNpX21hYzgwMjExX3NldF9rZXksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xOTk4LVxcdC5zZXRfcnRzX3RocmVzaG9sZCA9IHJzaV9tYWM4MDIxMV9zZXRfcnRzX3RocmVzaG9sZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6NDM6MzYuNjA3MzkzMTk3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2MzIxNDk2ODgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUlNJIFVTQiBEZXZpY2UgRHJpdmVyIEtleSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBSU0kgVVNCIGRldmljZSBkcml2ZXIuIEl0IHNlZW1zIGxpa2Ugd2hlbiBhIFVTQiBkZXZpY2UgaXMgcHJvYmVkIHVzaW5nIHN5emthbGxlcidzIGB1c2IgcmF3IGdhZGdldGAgKGxpa2UgYHJzaV9wcm9iZWApLCBgcnNpXzkxeGAgZ2V0cyByZWdpc3RlcmVkIHdpdGggbWFjODAyMTEuIE15IGltbWVkaWF0ZSBpbnRlcmVzdCBpcyBpbiBob3cgZW5jcnlwdGlvbiBrZXlzIGFyZSBtYW5hZ2VkLCBwYXJ0aWN1bGFybHkgYmVjYXVzZSBvZiB0aGF0IHBhdGNoLiBTcGVjaWZpY2FsbHksIEknbSB0cnlpbmcgdG8gdHJhY2UgdGhlIHBhdGggZnJvbSB1c2Vyc3BhY2UgY29tbWFuZHMgdG8gdGhlIGtleSBsb2FkaW5nIGZ1bmN0aW9uLlxuXG5Gcm9tIHdoYXQgSSBjYW4gdGVsbCwgdXNlcnNwYWNlIHVzZXMgbmw4MDIxMSB0byBpc3N1ZSBgbmV3X2tleWAgb3IgYHNldF9rZXlgIGNvbW1hbmRzLiBUaGVzZSB1bHRpbWF0ZWx5IGVuZCB1cCBjYWxsaW5nIGByc2lfbWFjODAyMTFfc2V0X2tleWAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYHJzaV9oYWxfa2V5X2NvbmZpZ2AsIGFuZCB0aGF0J3MgdGhlIG9uZSB0aGF0IGNhbGxzIGByc2lfaGFsX2xvYWRfa2V5YC4gT2theSwgc28gYHJzaV9oYWxfbG9hZF9rZXlgIGlzIHRoZSBjcnVjaWFsIGZ1bmN0aW9uLCBhbmQgSSBuZWVkIHRvIHZlcmlmeSBpdHMgdmlzaWJpbGl0eS5cblxuTGV0J3MgY2hlY2sgdGhlIGRlY2xhcmF0aW9uIGluIGByc2lfbWdtdC5oYC4gQWgsIHllcywgaXQnczogYGludCByc2lfaGFsX2xvYWRfa2V5KHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sIHU4ICpkYXRhLCB1MTYga2V5X2xlbiwgdTgga2V5X3R5cGUsIHU4IGtleV9pZCwgdTMyIGNpcGhlciwgczE2IHN0YV9pZCwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7YCBUaGUgZnVuY3Rpb24gaXMgKm5vdCogc3RhdGljLCBzbyBpdCAqaXMqIGV4cG9zZWQgd2l0aGluIHRoZSBgcnNpXzkxeGAgbW9kdWxlLiBHb29kLCB0aGF0IGNvbmZpcm1zIGl0LlxuXG5TbywgdGhlIGtleSBmdW5jdGlvbnMgdG8gd2F0Y2ggYXJlOiBgcnNpX2hhbF9sb2FkX2tleWAsIGByc2lfaGFsX2tleV9jb25maWdgLCBgcnNpX21hYzgwMjExX3NldF9rZXlgIGFuZCBgcnNpX21hYzgwMjExX3N0YV9hZGRgLiBJJ2xsIHdhbnQgdG8gdHJhY2UgY2FsbHMgdG8gdGhvc2UuXG5cbkJ1dCBob2xkIG9uLCBgcnNpX2hhbF9sb2FkX2tleWAgaXMgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzLCB3aGljaCBtYWtlcyBpdCBjZW50cmFsIHRvIHRoZSBwcm9ibGVtLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIEtjb25maWcgcmVxdWlyZW1lbnRzLiBgUlNJXzkxWGAgcmVxdWlyZXMgYE1BQzgwMjExYCBhbmQgYFdMQU5fVkVORE9SX1JTSWAuIGBSU0lfVVNCYCBkZXBlbmRzIG9uIGBVU0IgXHUwMDI2XHUwMDI2IFJTSV85MVhgLiBJJ2xsIHdhbnQgdG8gY2hlY2sgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnYC5cblxuYGBgXG5jb25maWcgV0xBTl9WRU5ET1JfUlNJXG5cdGJvb2wgXCJSZWRwaW5lIFNpZ25hbHMgSW5jIGRldmljZXNcIlxuXHRkZWZhdWx0IHlcblxuaWYgV0xBTl9WRU5ET1JfUlNJXG5cbmNvbmZpZyBSU0lfOTFYXG5cdHRyaXN0YXRlIFwiUmVkcGluZSBTaWduYWxzIEluYyA5MXggV0xBTiBkcml2ZXIgc3VwcG9ydFwiXG5cdHNlbGVjdCBCVF9IQ0lSU0kgaWYgUlNJX0NPRVhcblx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxuXG5jb25maWcgUlNJX1VTQlxuXHR0cmlzdGF0ZSBcIlJlZHBpbmUgU2lnbmFscyBVU0IgYnVzIHN1cHBvcnRcIlxuXHRkZXBlbmRzIG9uIFVTQiBcdTAwMjZcdTAwMjYgUlNJXzkxWFxuYGBgXG5Pa2F5LCBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBkZXBlbmRlbmN5IG9mIGBXTEFOX1ZFTkRPUl9SU0lgLCBzbyBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIG1haW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWdgIGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTM4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjQzOjUyLjkyODg5Mzc1OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQwMzMxMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiV0xBTl9WRU5ET1JfUlNJXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL01ha2VmaWxlPTE4PW9iai0kKENPTkZJR19XTEFOX1ZFTkRPUl9SRUFMVEVLKSArPSByZWFsdGVrL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL01ha2VmaWxlOjE5Om9iai0kKENPTkZJR19XTEFOX1ZFTkRPUl9SU0kpICs9IHJzaS9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZS0yMC1vYmotJChDT05GSUdfV0xBTl9WRU5ET1JfU0lMQUJTKSArPSBzaWxhYnMvXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnOjI6Y29uZmlnIFdMQU5fVkVORE9SX1JTSVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTMtXFx0Ym9vbCBcXFwiUmVkcGluZSBTaWduYWxzIEluYyBkZXZpY2VzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWctMTItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWc6MTM6aWYgV0xBTl9WRU5ET1JfUlNJXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWctMTQtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZz00Nz1jb25maWcgUlNJX0NPRVhcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTU2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnOjU3OmVuZGlmICMgV0xBTl9WRU5ET1JfUlNJXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjQzOjUzLjAwMjkzMjMxNVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzEwOTEwMjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBpc3N1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBSU0kvS2NvbmZpZyBTb3VyY2UqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGUgUlNJIHdpcmVsZXNzIGRyaXZlci4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIHRoZSB0eXBpY2FsIGtlcm5lbCBidWlsZCBzdHJ1Y3R1cmUsIGlzIHRvIGhlYWQgZGlyZWN0bHkgdG8gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzc2AgZGlyZWN0b3J5LiBXaXRoaW4gdGhhdCwgSSdtIHByZXR0eSBjZXJ0YWluIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoZSBSU0kgZHJpdmVyIHdpbGwgYmUgbG9jYXRlZCB0aGVyZS4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlc2UgdGhpbmdzIGxpdmUuIExldCdzIHN0YXJ0IGJ5IGNoZWNraW5nIGBkcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnYCBhbmQgc2VlIGlmIHRoZSBpbmNsdWRlcyBwb2ludCB0byBpdC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCdzIHdoZXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDY5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6NDM6NTguNzEzODQ0NzY0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjM3MzM3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyc2kvS2NvbmZpZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnPTMyPXNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWc6MzM6c291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnLTM0LXNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL0tjb25maWdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjQzOjU4Ljc4NjIyMzg0MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzMwMjI2MTY5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipLY29uZmlnIERpdmUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbi4gVGhlIHByb2JsZW0gbGlrZWx5IGxpZXMgd2l0aGluIHRoZSB3aXJlbGVzcyBuZXR3b3JrIGNvbmZpZ3VyYXRpb24sIHNvIEknbSBmb2N1c2luZyBteSBhdHRlbnRpb24gb24gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWdgLiBJJ20gZ29pbmcgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbiBhcm91bmQgbGluZSAzMyBvZiB0aGF0IGZpbGUuIFRoYXQncyBhIHJlYXNvbmFibGUgc3RhcnRpbmcgcG9pbnQgZ2l2ZW4gdGhlIGNvbnRleHQsIGFuZCBJJ20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1pZ2h0IGJlIGNvbnRyaWJ1dGluZyB0byB0aGUgaXNzdWUuIExpbmUgMzMgc2hvdWxkIGdpdmUgYSBzdGFydGluZyBwb2ludCB0byB0aGUgcmVsZXZhbnQga2NvbmZpZyBmbGFncywgYW5kIHdpbGwgZ3VpZGUgdGhlIG5leHQgbGV2ZWwgb2YgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3NTcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDo0NDozMi4wODg0ODc5OTZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBXaXJlbGVzcyBMQU4gZGV2aWNlIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0bWVudWNvbmZpZyBXTEFOXFxuICAgNzpcXHRcXHRib29sIFxcXCJXaXJlbGVzcyBMQU5cXFwiXFxuICAgODpcXHRcXHRkZXBlbmRzIG9uICFTMzkwXFxuICAgOTpcXHRcXHRkZXBlbmRzIG9uIE5FVFxcbiAgMTA6XFx0XFx0c2VsZWN0IFdJUkVMRVNTXFxuICAxMTpcXHRcXHRkZWZhdWx0IHlcXG4gIDEyOlxcdFxcdGhlbHBcXG4gIDEzOlxcdFxcdCAgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGFsbCB0aGUgcHJlIDgwMi4xMSBhbmQgODAyLjExIHdpcmVsZXNzXFxuICAxNDpcXHRcXHQgIGRldmljZSBkcml2ZXJzLiBGb3IgYSBjb21wbGV0ZSBsaXN0IG9mIGRyaXZlcnMgYW5kIGRvY3VtZW50YXRpb25cXG4gIDE1OlxcdFxcdCAgb24gdGhlbSByZWZlciB0byB0aGUgd2lyZWxlc3Mgd2lraTpcXG4gIDE2OlxcdFxcbiAgMTc6XFx0XFx0ICBodHRwczovL3dpcmVsZXNzLndpa2kua2VybmVsLm9yZy9lbi91c2Vycy9Ecml2ZXJzXFxuICAxODpcXHRcXG4gIDE5OlxcdGlmIFdMQU5cXG4gIDIwOlxcdFxcbiAgMjE6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hZG10ZWsvS2NvbmZpZ1xcXCJcXG4gIDIyOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWdcXFwiXFxuICAyMzpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsL0tjb25maWdcXFwiXFxuICAyNDpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL0tjb25maWdcXFwiXFxuICAyNTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL0tjb25maWdcXFwiXFxuICAyNjpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL0tjb25maWdcXFwiXFxuICAyNzpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvS2NvbmZpZ1xcXCJcXG4gIDI4OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvS2NvbmZpZ1xcXCJcXG4gIDI5OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWljcm9jaGlwL0tjb25maWdcXFwiXFxuICAzMDpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL0tjb25maWdcXFwiXFxuICAzMTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3JhbGluay9LY29uZmlnXFxcIlxcbiAgMzI6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL0tjb25maWdcXFwiXFxuICAzMzpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnXFxcIlxcbiAgMzQ6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvS2NvbmZpZ1xcXCJcXG4gIDM1OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3QvS2NvbmZpZ1xcXCJcXG4gIDM2OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvS2NvbmZpZ1xcXCJcXG4gIDM3OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvenlkYXMvS2NvbmZpZ1xcXCJcXG4gIDM4OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcXVhbnRlbm5hL0tjb25maWdcXFwiXFxuICAzOTpcXHRcXG4gIDQwOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDo0NDozMi4wODg1NTI5MzZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzUwMzI1Nzk1OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFdMQU4gUGF0Y2gqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZC4gTGV0J3MgbWFrZSBzdXJlIHRoZSBlc3NlbnRpYWwgb25lcyBhcmUgcHJlc2VudDogYFdMQU5gLCBgV0xBTl9WRU5ET1JfUlNJYCwgYFJTSV85MVhgLCBgUlNJX1VTQmAsIGBNQUM4MDIxMWAsIGFuZCBgVVNCYC4gR290IGl0LCBub3cgdG8gZG91YmxlLWNoZWNrIGV2ZXJ5dGhpbmcuXG5cblRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJIHNlZSB0aGUgZGVwZW5kZW5jaWVzIGFyZSBjb3JyZWN0bHkgZGVmaW5lZCB3aXRoIGBXb3J0aEZ1enppbmc6IHRydWVgIGFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFycmF5IGNvdmVycyBhbGwgdGhlIHJlcXVpcmVkIG9wdGlvbnM6IGBXTEFOYCwgYFdMQU5fVkVORE9SX1JTSWAsIGBSU0lfOTFYYCwgYFJTSV9VU0JgLCBgTUFDODAyMTFgLCBhbmQgYFVTQmAuIFRoZSBmb2N1cyBpcyBjbGVhciB0b28sIGl0J3MgdGhvc2UgY3JpdGljYWwgZnVuY3Rpb25zIGByc2lfaGFsX2xvYWRfa2V5YCBhbmQgYHJzaV9tYWM4MDIxMV9zZXRfa2V5YC5cblxuVGhlIHJlYXNvbmluZyBtYWtlcyBzZW5zZTsgd2UncmUgZGVhbGluZyB3aXRoIGFuIG91dC1vZi1ib3VuZHMgbWVtb3J5IHJlYWQgaW4gYHJzaV9oYWxfbG9hZF9rZXlgIGR1cmluZyBNSUMga2V5IGNvcHlpbmcsIGFuZCB0aGUgcGF0Y2ggYWRkcmVzc2VzIHRoaXMgYnkgYWRkaW5nIGEgY2hlY2sgZm9yIHRoZSBgV0xBTl9DSVBIRVJfU1VJVEVfVEtJUGAgY2lwaGVyIHN1aXRlLiBUaGlzIGltcGFjdHMgdGhlIFJlZHBpbmUgU2lnbmFscyA5MXggV0xBTiBkcml2ZXIsIHNwZWNpZmljYWxseSByZWFjaGFibGUgdGhyb3VnaCBgbWFjODAyMTFgIGtleSBjb25maWd1cmF0aW9uIG9wZXJhdGlvbnMsIGxpa2VseSBvbiBlbXVsYXRlZCBVU0IgZGV2aWNlcy4gQ2xhc3NpYy5cblxuQmVmb3JlIEkgcHVzaCB0aGUgcmVzdWx0cywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIG9uZSBsYXN0IHRpbWU6IGByc2lfaGFsX2xvYWRfa2V5YCBhbmQgYHJzaV9tYWM4MDIxMV9zZXRfa2V5YCBhcmUgc3RpbGwgdGhlIGNyaXRpY2FsIGZvY3VzIHN5bWJvbHMsIGFuZCB0aGUgY29uZmlndXJhdGlvbnMgYXJlIHRoZSBzYW1lOiBgV0xBTl9WRU5ET1JfUlNJYCwgYFJTSV85MVhgLCBgUlNJX1VTQmAsIGBNQUM4MDIxMWAsIGFuZCBgVVNCYC4gQWxyaWdodCwgbG9va3MgZ29vZC4gVGltZSB0byBpbnZva2UgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1NTMsIk91dHB1dFRva2VucyI6MTkzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6NDU6NDcuMTIxMTM2NjIxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA2MjI2OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIldMQU5cIixcbiAgICBcIldMQU5fVkVORE9SX1JTSVwiLFxuICAgIFwiUlNJXzkxWFwiLFxuICAgIFwiUlNJX1VTQlwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIlVTQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJzaV9oYWxfbG9hZF9rZXlcIixcbiAgICBcInJzaV9tYWM4MDIxMV9zZXRfa2V5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyBtZW1vcnkgcmVhZCBidWcgaW4gcnNpX2hhbF9sb2FkX2tleSBieSByZXN0cmljdGluZyBjb3B5aW5nIG9mIHRoZSBUWCBhbmQgUlggTUlDIGtleXMgZnJvbSB0aGUgZGF0YSBidWZmZXIgdG8gb25seSB3aGVuIHRoZSBjaXBoZXIgc3VpdGUgaXMgV0xBTl9DSVBIRVJfU1VJVEVfVEtJUCAocHJldmVudGluZyBPT0IgcmVhZHMgZm9yIGtleSBsZW5ndGhzIHNob3J0ZXIgdGhhbiAzMiBieXRlcyBsaWtlIEFFUy9DQ01QKS4gVGhpcyBkcml2ZXIgbG9naWMgaXMgcmVhY2hhYmxlIHZpYSBtYWM4MDIxMSBzZXRfa2V5IGNhbGxiYWNrcyB3aXRoIGVtdWxhdGVkIFVTQiBkZXZpY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIldMQU5cIixcbiAgICBcIldMQU5fVkVORE9SX1JTSVwiLFxuICAgIFwiUlNJXzkxWFwiLFxuICAgIFwiUlNJX1VTQlwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIlVTQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJzaV9oYWxfbG9hZF9rZXlcIixcbiAgICBcInJzaV9tYWM4MDIxMV9zZXRfa2V5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyBtZW1vcnkgcmVhZCBidWcgaW4gcnNpX2hhbF9sb2FkX2tleSBieSByZXN0cmljdGluZyBjb3B5aW5nIG9mIHRoZSBUWCBhbmQgUlggTUlDIGtleXMgZnJvbSB0aGUgZGF0YSBidWZmZXIgdG8gb25seSB3aGVuIHRoZSBjaXBoZXIgc3VpdGUgaXMgV0xBTl9DSVBIRVJfU1VJVEVfVEtJUCAocHJldmVudGluZyBPT0IgcmVhZHMgZm9yIGtleSBsZW5ndGhzIHNob3J0ZXIgdGhhbiAzMiBieXRlcyBsaWtlIEFFUy9DQ01QKS4gVGhpcyBkcml2ZXIgbG9naWMgaXMgcmVhY2hhYmxlIHZpYSBtYWM4MDIxMSBzZXRfa2V5IGNhbGxiYWNrcyB3aXRoIGVtdWxhdGVkIFVTQiBkZXZpY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDo0NTo0Ny4yMDE3NjY3ODhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODYyMTY4ODU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6NDU6NDcuMjAyMzQyMTI4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjI4NjE1ODk2NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBidWcgaW4gcnNpX2hhbF9sb2FkX2tleSgpIHdoZXJlIDgtYnl0ZSBUWCBhbmQgUlggTUlDIGtleXMgd2VyZSB1bmNvbmRpdGlvbmFsbHkgcmVhZCBmcm9tIFxcdTAwMjZkYXRhWzE2XSBhbmQgXFx1MDAyNmRhdGFbMjRdLCBldmVuIHdoZW4gdGhlIGNpcGhlciBzdWl0ZSB3YXMgbm90IFRLSVAgKHN1Y2ggYXMgQ0NNUC9BRVMgd2hlcmUgdGhlIGtleSBidWZmZXIgaXMgb25seSAxNiBieXRlcyBsb25nKS5cXG5cXG4xLiBLQVNBTiBhcHBsaWNhYmlsaXR5OiBPdXQtb2YtYm91bmRzIHJlYWRzIG9uIGhlYXAgb3Igc3RhY2sgYnVmZmVycyAoc3VjaCBhcyBhY2Nlc3NpbmcgcGFzdCB0aGUgMTYtYnl0ZSBrZXkgYnVmZmVyKSBhcmUgZGlyZWN0bHkgZGV0ZWN0YWJsZSBieSBLQVNBTi5cXG4yLiBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgZnJhbWUgYnVmZmVyIGluIHRoZSBza2IgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZCB1cGZyb250IHZpYSBgbWVtc2V0KHNrYi1cXHUwMDNlZGF0YSwgMCwgZnJhbWVfbGVuKWAuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy5cXG5cXG5TaW5jZSB0aGUgaXNzdWUgaXMgc3RyaWN0bHkgYW4gb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzIGNhdWdodCBieSBLQVNBTiBhbmQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQzOWQyMmY1ZWQ2ZWIxNWEwNDUzMjM5ZjRiYTAyNDZhZjFjODU5YWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAyMDozOTozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuY1xuaW5kZXggN2YyYzE2MDhmMmNlMy4uMmRkZjRkMTU4YmZlMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jXG5AQCAtODQ4LDggKzg0OCwxMCBAQCBpbnQgcnNpX2hhbF9sb2FkX2tleShzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLFxuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdG1lbWNweShcdTAwMjZzZXRfa2V5LVx1MDAzZWtleVswXVswXSwgZGF0YSwga2V5X2xlbik7XG4gXHRcdH1cbi1cdFx0bWVtY3B5KHNldF9rZXktXHUwMDNldHhfbWljX2tleSwgXHUwMDI2ZGF0YVsxNl0sIDgpO1xuLVx0XHRtZW1jcHkoc2V0X2tleS1cdTAwM2VyeF9taWNfa2V5LCBcdTAwMjZkYXRhWzI0XSwgOCk7XG4rXHRcdGlmIChjaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfVEtJUCkge1xuK1x0XHRcdG1lbWNweShzZXRfa2V5LVx1MDAzZXR4X21pY19rZXksIFx1MDAyNmRhdGFbMTZdLCA4KTtcbitcdFx0XHRtZW1jcHkoc2V0X2tleS1cdTAwM2VyeF9taWNfa2V5LCBcdTAwMjZkYXRhWzI0XSwgOCk7XG4rXHRcdH1cbiBcdH0gZWxzZSB7XG4gXHRcdG1lbXNldChcdTAwMjZzZXRfa2V5W0ZSQU1FX0RFU0NfU1pdLCAwLCBmcmFtZV9sZW4gLSBGUkFNRV9ERVNDX1NaKTtcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjQ1OjQ3LjIwMjM0MzIwOFoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MjQ5MzUyNDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy5cblxuKipFeGFtaW5pbmcgdGhlIEtleSBMb2FkaW5nIEZ1bmN0aW9uIGluIHRoZSBSU0kgRHJpdmVyKipcblxuQWxyaWdodCwgSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgcnNpXzkxeF9tZ210LmNgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgYXJlYSBhcm91bmQgdGhlIGByc2lfaGFsX2xvYWRfa2V5YCBmdW5jdGlvbiB3aXRoaW4gdGhlIHdpcmVsZXNzIG5ldHdvcmtpbmcgZHJpdmVyLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBrZXkgbG9hZGluZyBwcm9jZXNzIHdvcmtzLCBhbmQgdGhlIGRldGFpbHMgc3Vycm91bmRpbmcgaXQuIEknbSBnb2luZyB0byB1c2UgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSBzb3VyY2UgY29kZSBvZiBgcnNpX2hhbF9sb2FkX2tleWAuIExldCdzIHNlZSB3aGF0J3MgZ29pbmcgb24gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDUsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjQ1OjU1LjQ1MTY5ODc0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tZ210LmNcIixcbiAgXCJGaXJzdExpbmVcIjogODIwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODIwOlxcdFxcdFxcdGtleV9kZXNjcmlwdG9yID0gUlNJX0tFWV9UWVBFX0JST0FEQ0FTVDtcXG4gODIxOlxcdFxcdFxcdGlmICh2aWYtXFx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApXFxuIDgyMjpcXHRcXHRcXHRcXHRrZXlfZGVzY3JpcHRvciB8PSBSU0lfS0VZX01PREVfQVA7XFxuIDgyMzpcXHRcXHR9XFxuIDgyNDpcXHRcXHRpZiAoKGNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MCkgfHxcXG4gODI1OlxcdFxcdCAgICAoY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNCkpIHtcXG4gODI2OlxcdFxcdFxcdGtleV9pZCA9IDA7XFxuIDgyNzpcXHRcXHRcXHRrZXlfZGVzY3JpcHRvciB8PSBSU0lfV0VQX0tFWTtcXG4gODI4OlxcdFxcdFxcdGlmIChrZXlfbGVuIFxcdTAwM2U9IDEzKVxcbiA4Mjk6XFx0XFx0XFx0XFx0a2V5X2Rlc2NyaXB0b3IgfD0gUlNJX1dFUF9LRVlfMTA0O1xcbiA4MzA6XFx0XFx0fSBlbHNlIGlmIChjaXBoZXIgIT0gS0VZX1RZUEVfQ0xFQVIpIHtcXG4gODMxOlxcdFxcdFxcdGtleV9kZXNjcmlwdG9yIHw9IFJTSV9DSVBIRVJfV1BBO1xcbiA4MzI6XFx0XFx0XFx0aWYgKGNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9US0lQKVxcbiA4MzM6XFx0XFx0XFx0XFx0a2V5X2Rlc2NyaXB0b3IgfD0gUlNJX0NJUEhFUl9US0lQO1xcbiA4MzQ6XFx0XFx0fVxcbiA4MzU6XFx0XFx0a2V5X2Rlc2NyaXB0b3IgfD0gUlNJX1BST1RFQ1RfREFUQV9GUkFNRVM7XFxuIDgzNjpcXHRcXHRrZXlfZGVzY3JpcHRvciB8PSAoa2V5X2lkIFxcdTAwM2NcXHUwMDNjIFJTSV9LRVlfSURfT0ZGU0VUKTtcXG4gODM3OlxcdFxcbiA4Mzg6XFx0XFx0cnNpX3NldF9sZW5fcW5vKFxcdTAwMjZzZXRfa2V5LVxcdTAwM2VkZXNjX2R3b3JkMC5sZW5fcW5vLFxcbiA4Mzk6XFx0XFx0XFx0XFx0KGZyYW1lX2xlbiAtIEZSQU1FX0RFU0NfU1opLCBSU0lfV0lGSV9NR01UX1EpO1xcbiA4NDA6XFx0XFx0c2V0X2tleS1cXHUwMDNlZGVzY19kd29yZDAuZnJhbWVfdHlwZSA9IFNFVF9LRVlfUkVRO1xcbiA4NDE6XFx0XFx0c2V0X2tleS1cXHUwMDNla2V5X2Rlc2MgPSBjcHVfdG9fbGUxNihrZXlfZGVzY3JpcHRvcik7XFxuIDg0MjpcXHRcXHRzZXRfa2V5LVxcdTAwM2VzdGFfaWQgPSBzdGFfaWQ7XFxuIDg0MzpcXHRcXG4gODQ0OlxcdFxcdGlmIChkYXRhKSB7XFxuIDg0NTpcXHRcXHRcXHRpZiAoKGNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MCkgfHxcXG4gODQ2OlxcdFxcdFxcdCAgICAoY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNCkpIHtcXG4gODQ3OlxcdFxcdFxcdFxcdG1lbWNweShcXHUwMDI2c2V0X2tleS1cXHUwMDNla2V5W2tleV9pZF1bMV0sIGRhdGEsIGtleV9sZW4gKiAyKTtcXG4gODQ4OlxcdFxcdFxcdH0gZWxzZSB7XFxuIDg0OTpcXHRcXHRcXHRcXHRtZW1jcHkoXFx1MDAyNnNldF9rZXktXFx1MDAzZWtleVswXVswXSwgZGF0YSwga2V5X2xlbik7XFxuIDg1MDpcXHRcXHRcXHR9XFxuIDg1MTpcXHRcXHRcXHRpZiAoY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVApIHtcXG4gODUyOlxcdFxcdFxcdFxcdG1lbWNweShzZXRfa2V5LVxcdTAwM2V0eF9taWNfa2V5LCBcXHUwMDI2ZGF0YVsxNl0sIDgpO1xcbiA4NTM6XFx0XFx0XFx0XFx0bWVtY3B5KHNldF9rZXktXFx1MDAzZXJ4X21pY19rZXksIFxcdTAwMjZkYXRhWzI0XSwgOCk7XFxuIDg1NDpcXHRcXHRcXHR9XFxuIDg1NTpcXHRcXHR9IGVsc2Uge1xcbiA4NTY6XFx0XFx0XFx0bWVtc2V0KFxcdTAwMjZzZXRfa2V5W0ZSQU1FX0RFU0NfU1pdLCAwLCBmcmFtZV9sZW4gLSBGUkFNRV9ERVNDX1NaKTtcXG4gODU3OlxcdFxcdH1cXG4gODU4OlxcdFxcbiA4NTk6XFx0XFx0c2tiX3B1dChza2IsIGZyYW1lX2xlbik7XFxuIDg2MDpcXHRcXG4gODYxOlxcdFxcdHJldHVybiByc2lfc2VuZF9pbnRlcm5hbF9tZ210X2ZyYW1lKGNvbW1vbiwgc2tiKTtcXG4gODYyOlxcdH1cXG4gODYzOlxcdFxcbiA4NjQ6XFx0LypcXG4gODY1OlxcdCAqIFRoaXMgZnVuY3Rpb24gc2VuZHMgdGhlIGNvbW1vbiBkZXZpY2UgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHRvIGRldmljZS5cXG4gODY2OlxcdCAqIFRoaXMgZnJhbWUgaW5jbHVkZXMgdGhlIHVzZWZ1bCBpbmZvcm1hdGlvbiB0byBtYWtlIGRldmljZSB3b3JrcyBvblxcbiA4Njc6XFx0ICogc3BlY2lmaWMgb3BlcmF0aW5nIG1vZGUuXFxuIDg2ODpcXHQgKi9cXG4gODY5OlxcdHN0YXRpYyBpbnQgcnNpX3NlbmRfY29tbW9uX2Rldl9wYXJhbXMoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbilcXG4gODcwOlxcdHtcXG4gODcxOlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIDg3MjpcXHRcXHR1MTYgZnJhbWVfbGVuO1xcbiA4NzM6XFx0XFx0c3RydWN0IHJzaV9jb25maWdfdmFscyAqZGV2X2NmZ3M7XFxuIDg3NDpcXHRcXG4gODc1OlxcdFxcdGZyYW1lX2xlbiA9IHNpemVvZihzdHJ1Y3QgcnNpX2NvbmZpZ192YWxzKTtcXG4gODc2OlxcdFxcbiA4Nzc6XFx0XFx0cnNpX2RiZyhNR01UX1RYX1pPTkUsIFxcXCJTZW5kaW5nIGNvbW1vbiBkZXZpY2UgY29uZmlnIHBhcmFtc1xcXFxuXFxcIik7XFxuIDg3ODpcXHRcXHRza2IgPSBkZXZfYWxsb2Nfc2tiKGZyYW1lX2xlbik7XFxuIDg3OTpcXHRcXHRpZiAoIXNrYikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDo0NTo1NS40NTE4NjIyNloiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTc4MTg5MTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGZ1bmN0aW9uOlxuXG4qKkRpdmluZyBpbnRvIGByc2lfaGFsX2xvYWRfa2V5YCAtIENvbnRleHQgaXMgS2V5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHJzaV9oYWxfbG9hZF9rZXlgLCBhbmQgdGhlIGZpcnN0IHRoaW5nIEkgZG8gaXMgbWVudGFsbHkgcmV3aW5kLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgKnByZWNlZGluZyogdGhpcyBmdW5jdGlvbiBjYWxsLiBJIG5lZWQgdGhlIGNvbnRleHQuIFdoYXQncyB0aGUgZ2VuZXJhbCBmbG93IG9mIGV4ZWN1dGlvbiBsZWFkaW5nIHVwIHRvIHRoaXMgcG9pbnQ/IFdoYXQncyB0aGUgc3lzdGVtIGRvaW5nPyBXaGF0IGFyZSB0aGUgaGlnaC1sZXZlbCBnb2FscyBvZiB0aGUgY29kZT8gSXMgdGhpcyBhIGNyaXRpY2FsIHNlY3VyaXR5IGZ1bmN0aW9uLCBvciBqdXN0IHNvbWUgcm91dGluZSBpbml0aWFsaXphdGlvbj8gVW5kZXJzdGFuZGluZyB0aGUgcHJlY2VkaW5nIGxpbmVzIHdpbGwgaW5zdGFudGx5IGluZm9ybSBteSBtZW50YWwgbW9kZWwgb2Ygd2hhdCBgcnNpX2hhbF9sb2FkX2tleWAgKnNob3VsZCogYmUgZG9pbmcuIEknbSB0aGlua2luZyBhYm91dCB0aGUgaW5wdXRzIOKAkyB3aGF0IGRhdGEgaXMgYmVpbmcgcGFzc2VkIGluPyBLZXlzLCBjZXJ0aWZpY2F0ZXMsIHNvbWUgb3RoZXIgZm9ybSBvZiBhdXRob3JpemF0aW9uIGRhdGE/IEFuZCB0aGUgb3V0cHV0Li4uIHdoYXQncyB0aGUgZXhwZWN0ZWQgcmVzdWx0PyBTdWNjZXNzZnVsIGtleSBsb2FkLCBlcnJvciBjb2Rlcz8gSXMgdGhlcmUgYW55IGxvZ2dpbmcgYmVpbmcgdXNlZD8gVW5kZXJzdGFuZGluZyB0aGVzZSB0aGluZ3Mgd291bGQgbWFrZSBpdCBlYXNpZXIgdG8gZGVidWcuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTEzLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDo0NTo1OS42MzAwNTQxMzRaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyOTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3ODAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3ODA6XFx0LyoqXFxuIDc4MTpcXHQgKiByc2lfaGFsX2xvYWRfa2V5KCkgLSBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gbG9hZCBrZXlzIHdpdGhpbiB0aGUgZmlybXdhcmUuXFxuIDc4MjpcXHQgKiBAY29tbW9uOiBQb2ludGVyIHRvIHRoZSBkcml2ZXIgcHJpdmF0ZSBzdHJ1Y3R1cmUuXFxuIDc4MzpcXHQgKiBAZGF0YTogUG9pbnRlciB0byB0aGUga2V5IGRhdGEuXFxuIDc4NDpcXHQgKiBAa2V5X2xlbjogS2V5IGxlbmd0aCB0byBiZSBsb2FkZWQuXFxuIDc4NTpcXHQgKiBAa2V5X3R5cGU6IFR5cGUgb2Yga2V5OiBHUk9VUC9QQUlSV0lTRS5cXG4gNzg2OlxcdCAqIEBrZXlfaWQ6IEtleSBpbmRleC5cXG4gNzg3OlxcdCAqIEBjaXBoZXI6IFR5cGUgb2YgY2lwaGVyIHVzZWQuXFxuIDc4ODpcXHQgKiBAc3RhX2lkOiBTdGF0aW9uIGlkLlxcbiA3ODk6XFx0ICogQHZpZjogUG9pbnRlciB0byB0aGUgaWVlZTgwMjExX3ZpZiBzdHJ1Y3R1cmUuXFxuIDc5MDpcXHQgKlxcbiA3OTE6XFx0ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuXFxuIDc5MjpcXHQgKi9cXG4gNzkzOlxcdGludCByc2lfaGFsX2xvYWRfa2V5KHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sXFxuIDc5NDpcXHRcXHRcXHQgICAgIHU4ICpkYXRhLFxcbiA3OTU6XFx0XFx0XFx0ICAgICB1MTYga2V5X2xlbixcXG4gNzk2OlxcdFxcdFxcdCAgICAgdTgga2V5X3R5cGUsXFxuIDc5NzpcXHRcXHRcXHQgICAgIHU4IGtleV9pZCxcXG4gNzk4OlxcdFxcdFxcdCAgICAgdTMyIGNpcGhlcixcXG4gNzk5OlxcdFxcdFxcdCAgICAgczE2IHN0YV9pZCxcXG4gODAwOlxcdFxcdFxcdCAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZilcXG4gODAxOlxcdHtcXG4gODAyOlxcdFxcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xcbiA4MDM6XFx0XFx0c3RydWN0IHJzaV9zZXRfa2V5ICpzZXRfa2V5O1xcbiA4MDQ6XFx0XFx0dTE2IGtleV9kZXNjcmlwdG9yID0gMDtcXG4gODA1OlxcdFxcdHUxNiBmcmFtZV9sZW4gPSBzaXplb2Yoc3RydWN0IHJzaV9zZXRfa2V5KTtcXG4gODA2OlxcdFxcbiA4MDc6XFx0XFx0cnNpX2RiZyhNR01UX1RYX1pPTkUsIFxcXCIlczogU2VuZGluZyBsb2FkIGtleSBmcmFtZVxcXFxuXFxcIiwgX19mdW5jX18pO1xcbiA4MDg6XFx0XFxuIDgwOTpcXHRcXHRza2IgPSBkZXZfYWxsb2Nfc2tiKGZyYW1lX2xlbik7XFxuIDgxMDpcXHRcXHRpZiAoIXNrYikge1xcbiA4MTE6XFx0XFx0XFx0cnNpX2RiZyhFUlJfWk9ORSwgXFxcIiVzOiBGYWlsZWQgaW4gYWxsb2NhdGlvbiBvZiBza2JcXFxcblxcXCIsXFxuIDgxMjpcXHRcXHRcXHRcXHRfX2Z1bmNfXyk7XFxuIDgxMzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gODE0OlxcdFxcdH1cXG4gODE1OlxcdFxcbiA4MTY6XFx0XFx0bWVtc2V0KHNrYi1cXHUwMDNlZGF0YSwgMCwgZnJhbWVfbGVuKTtcXG4gODE3OlxcdFxcdHNldF9rZXkgPSAoc3RydWN0IHJzaV9zZXRfa2V5ICopc2tiLVxcdTAwM2VkYXRhO1xcbiA4MTg6XFx0XFxuIDgxOTpcXHRcXHRpZiAoa2V5X3R5cGUgPT0gUlNJX0dST1VQX0tFWSkge1xcbiA4MjA6XFx0XFx0XFx0a2V5X2Rlc2NyaXB0b3IgPSBSU0lfS0VZX1RZUEVfQlJPQURDQVNUO1xcbiA4MjE6XFx0XFx0XFx0aWYgKHZpZi1cXHUwMDNldHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUClcXG4gODIyOlxcdFxcdFxcdFxcdGtleV9kZXNjcmlwdG9yIHw9IFJTSV9LRVlfTU9ERV9BUDtcXG4gODIzOlxcdFxcdH1cXG4gODI0OlxcdFxcdGlmICgoY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwKSB8fFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDo0NTo1OS42MzAyNDk4ODRaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA0MzM2NTk1NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFdpcmVsZXNzIERyaXZlciBLZXkgTG9hZGluZyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IG9mIHRoaXMgcGF0Y2gsIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiBgcnNpX2hhbF9sb2FkX2tleWAsIGlzIHRoYXQgaXQgYWRkcmVzc2VzIGEgY2xlYXIgb3V0LW9mLWJvdW5kcyByZWFkIHZ1bG5lcmFiaWxpdHkuIEhlcmUncyB3aGF0IEkgc2VlOlxuXG5UaGUgY29kZSwgYmVmb3JlIHRoZSBwYXRjaCwgY29waWVzIHRoZSB0ZW1wb3JhbCBrZXkgYW5kLCBjcnVjaWFsbHksIHRoZSBNSUMga2V5cyBmcm9tIHRoZSBgZGF0YWAgYnVmZmVyLiBUaGUgcHJvYmxlbSBpcywgd2hlbiB0aGUgY2lwaGVyIGlzbid0IFRLSVAgKHRoaW5rIENDTVAsIEFFUywgZXRjLiksIHRoZSBga2V5X2xlbmAgY2FuIGJlIGFzIHNtYWxsIGFzIDE2IGJ5dGVzLiBIb3dldmVyLCB0aGUgY29kZSB3b3VsZCBzdGlsbCBhdHRlbXB0IHRvIHJlYWQgdGhlIFRYIGFuZCBSWCBNSUMga2V5cyBmcm9tIGBcdTAwMjZkYXRhWzE2XWAgYW5kIGBcdTAwMjZkYXRhWzI0XWAsIHJlc3BlY3RpdmVseS4gVGhpcyBpcyBhIGNsYXNzaWMgYnVmZmVyIG92ZXItcmVhZCwgYW5kIHNvbWV0aGluZyBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU0FOaXRpemVyKSBpcyBkZXNpZ25lZCB0byBjYXRjaCwgYW5kIGRpZCBjYXRjaC4gV2UgYXJlIHJlYWRpbmcgYmV5b25kIHRoZSBhbGxvY2F0ZWQgYm91bmRhcnkgb2YgYGRhdGFgLlxuXG5UaGlzIHBhdGNoIHNvbHZlcyB0aGlzIGJ5ICpvbmx5KiBjb3B5aW5nIHRoZSBNSUMga2V5cyB3aGVuIHRoZSBgY2lwaGVyYCBpcyBzcGVjaWZpY2FsbHkgYFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVBgLCB3aGVyZSB0aGUga2V5IGRhdGEgaXMgZXhwZWN0ZWQgdG8gYmUgMzIgYnl0ZXMgKDE2LWJ5dGUgdGVtcG9yYWwga2V5ICsgOC1ieXRlIFRYIE1JQyArIDgtYnl0ZSBSWCBNSUMpLiBJbiBhbGwgb3RoZXIgY2FzZXMsIGl0IGF2b2lkcyBhY2Nlc3NpbmcgdGhlc2Ugb3V0LW9mLWJvdW5kcyByZWdpb25zIG9mIGBkYXRhYC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGlzIHRoaXMgYSBLTVNBTiAoS2VybmVsIE1lbW9yeSBTQU5pdGl6ZXIpIGlzc3VlPyBObywgYW5kIGhlcmUncyB3aHkuIFRoZSBgc2tiLVx1MDAzZWRhdGFgIGJ1ZmZlciwgd2hpY2ggaXMgd2hlcmUgdGhpcyBkYXRhIGVuZHMgdXAsIGlzIGV4cGxpY2l0bHkgemVyb2VkIG91dCB3aXRoIGBtZW1zZXQoc2tiLVx1MDAzZWRhdGEsIDAsIGZyYW1lX2xlbilgIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZ1bmN0aW9uLiBUaGlzIG1lYW5zIHRoZXJlJ3Mgbm8gcXVlc3Rpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCwgbGVha2VkLCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS4gS01TQU4gaXMgZm9yIGRldGVjdGluZyBhbmQgcHJldmVudGluZyB0aGUgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBpcyAqbm90KiB3aGF0J3MgaGFwcGVuaW5nIGhlcmUuIFRoZSBwcmV2aW91cyBjb2RlICpkaWQqIGhhdmUgYW4gb3V0LW9mLWJvdW5kcyByZWFkLCBkZXRlY3RlZCBieSBLQVNBTi5cblxuTGV0J3MgZG91YmxlLWNoZWNrIGFsbCBhc3BlY3RzOlxuXG4xLiAgVGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBvciBtb2RpZnkga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLiBJdCBzZW5kcyBhIG1hbmFnZW1lbnQgZnJhbWUgaW50ZXJuYWxseSB0byB0aGUgd2lyZWxlc3MgY2FyZCBvciBmaXJtd2FyZSB2aWEgYHJzaV9zZW5kX2ludGVybmFsX21nbXRfZnJhbWVgLlxuMi4gIEl0IGRvZXNuJ3QgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlIGBza2ItXHUwMDNlZGF0YWAgaXMgZXhwbGljaXRseSB6ZXJvZWQuXG4zLiAgVGhlIHByZXZpb3VzIGJ1ZyB3YXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkLiBUaGlzIHBhdGNoIHByZXZlbnRzIHRoYXQuIEtBU0FOIGNhdWdodCB0aGUgYnVnIGluIHRoZSBmaXJzdCBwbGFjZSwgYW5kIHRoaXMgcGF0Y2ggY29ycmVjdGx5IGZpeGVzIGl0LlxuNC4gIEtNU0FOIGlzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhpcyBwYXRjaCBpcyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBmaXguXG5cblNvLCBpbiBzdW1tYXJ5LCB3ZSdyZSBmaXhpbmcgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHZ1bG5lcmFiaWxpdHkgYW5kIGl0J3MgYSBLQVNBTiBpc3N1ZSwgYW5kIHRoZXJlJ3Mgbm8gS01TQU4gY29uY2Vybi4gVGhlIGtleSBhc3BlY3QgaGVyZSBpcyB0aGUgY2xlYXIgZGlzdGluY3Rpb24gYmV0d2VlbiBhbiBvdXQtb2YtYm91bmRzIHJlYWQsIGFuZCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLlxuXG5MZXQncyBzdW1tYXJpemUgdGhpcyBjbGVhcmx5OlxuKiAgIFRoZSBwYXRjaCAqcmVzdHJpY3RzKiB0aGUgTUlDIGtleSBjb3BpZXMgb25seSB0byB3aGVuIGBjaXBoZXJgIGlzIGBXTEFOX0NJUEhFUl9TVUlURV9US0lQYC4gVGhlIHByZXZpb3VzIGNvZGUgZGlkIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBvbiBgZGF0YWAgZm9yIG90aGVyIGNpcGhlcnMuXG4qICAgS0FTQU4gZGV0ZWN0cyBvdXQtb2YtYm91bmRzIHJlYWRzIHdoaWNoIGlzIHRoZSBidWcgYW5kIGlzIGZpeGVkIGhlcmUuXG4qICAgVGhlIGBza2ItXHUwMDNlZGF0YWAgYnVmZmVyIGlzIHplcm9lZCwgYW5kIG5vdGhpbmcgdW5pbml0aWFsaXplZCBpcyBsZWFrZWQsIHVzZWQgb3IgcmVhZC5cbiogICBUaGVyZWZvcmUsIE5lZWRzS01TQU4gPSBgZmFsc2VgLlxuXG5Ob3csIHRvIHNldCB0aGUgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU2NywiT3V0cHV0VG9rZW5zIjoyNDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6NDY6MTAuMDYzOTEyODY0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgYnVnIGluIHJzaV9oYWxfbG9hZF9rZXkoKSB3aGVyZSA4LWJ5dGUgVFggYW5kIFJYIE1JQyBrZXlzIHdlcmUgdW5jb25kaXRpb25hbGx5IHJlYWQgZnJvbSBcXHUwMDI2ZGF0YVsxNl0gYW5kIFxcdTAwMjZkYXRhWzI0XSwgZXZlbiB3aGVuIHRoZSBjaXBoZXIgc3VpdGUgd2FzIG5vdCBUS0lQIChzdWNoIGFzIENDTVAvQUVTIHdoZXJlIHRoZSBrZXkgYnVmZmVyIGlzIG9ubHkgMTYgYnl0ZXMgbG9uZykuXFxuXFxuMS4gS0FTQU4gYXBwbGljYWJpbGl0eTogT3V0LW9mLWJvdW5kcyByZWFkcyBvbiBoZWFwIG9yIHN0YWNrIGJ1ZmZlcnMgKHN1Y2ggYXMgYWNjZXNzaW5nIHBhc3QgdGhlIDE2LWJ5dGUga2V5IGJ1ZmZlcikgYXJlIGRpcmVjdGx5IGRldGVjdGFibGUgYnkgS0FTQU4uXFxuMi4gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIGZyYW1lIGJ1ZmZlciBpbiB0aGUgc2tiIGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgdXBmcm9udCB2aWEgYG1lbXNldChza2ItXFx1MDAzZWRhdGEsIDAsIGZyYW1lX2xlbilgLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuXFxuXFxuU2luY2UgdGhlIGlzc3VlIGlzIHN0cmljdGx5IGFuIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcyBjYXVnaHQgYnkgS0FTQU4gYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgYnVnIGluIHJzaV9oYWxfbG9hZF9rZXkoKSB3aGVyZSA4LWJ5dGUgVFggYW5kIFJYIE1JQyBrZXlzIHdlcmUgdW5jb25kaXRpb25hbGx5IHJlYWQgZnJvbSBcXHUwMDI2ZGF0YVsxNl0gYW5kIFxcdTAwMjZkYXRhWzI0XSwgZXZlbiB3aGVuIHRoZSBjaXBoZXIgc3VpdGUgd2FzIG5vdCBUS0lQIChzdWNoIGFzIENDTVAvQUVTIHdoZXJlIHRoZSBrZXkgYnVmZmVyIGlzIG9ubHkgMTYgYnl0ZXMgbG9uZykuXFxuXFxuMS4gS0FTQU4gYXBwbGljYWJpbGl0eTogT3V0LW9mLWJvdW5kcyByZWFkcyBvbiBoZWFwIG9yIHN0YWNrIGJ1ZmZlcnMgKHN1Y2ggYXMgYWNjZXNzaW5nIHBhc3QgdGhlIDE2LWJ5dGUga2V5IGJ1ZmZlcikgYXJlIGRpcmVjdGx5IGRldGVjdGFibGUgYnkgS0FTQU4uXFxuMi4gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIGZyYW1lIGJ1ZmZlciBpbiB0aGUgc2tiIGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgdXBmcm9udCB2aWEgYG1lbXNldChza2ItXFx1MDAzZWRhdGEsIDAsIGZyYW1lX2xlbilgLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuXFxuXFxuU2luY2UgdGhlIGlzc3VlIGlzIHN0cmljdGx5IGFuIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcyBjYXVnaHQgYnkgS0FTQU4gYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowgv4ct[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 20:20:58 +0000 UTC FinishedAt: 2026-08-31 20:46:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "881dc9dd66d2367e7fe1be0f953a8837cb3b26a9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "WLAN", "WLAN_VENDOR_RSI", "RSI_91X", "RSI_USB", "MAC80211", "USB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "881dc9dd66d2367e7fe1be0f953a8837cb3b26a9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "WLAN", "WLAN_VENDOR_RSI", "RSI_91X", "RSI_USB", "MAC80211", "USB" ], "series_id": "a2818165-0bcc-4e1f-9e41-ae6efb2e1020" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rsi_hal_load_key", "rsi_mac80211_set_key" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1dMQU4mIzM0OywKICAgICYjMzQ7V0xBTl9WRU5ET1JfUlNJJiMzNDssCiAgICAmIzM0O1JTSV85MVgmIzM0OywKICAgICYjMzQ7UlNJX1VTQiYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyc2lfaGFsX2xvYWRfa2V5JiMzNDssCiAgICAmIzM0O3JzaV9tYWM4MDIxMV9zZXRfa2V5JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGJ1ZyBpbiByc2lfaGFsX2xvYWRfa2V5KCkgd2hlcmUgOC1ieXRlIFRYIGFuZCBSWCBNSUMga2V5cyB3ZXJlIHVuY29uZGl0aW9uYWxseSByZWFkIGZyb20gXHUwMDI2ZGF0YVsxNl0gYW5kIFx1MDAyNmRhdGFbMjRdLCBldmVuIHdoZW4gdGhlIGNpcGhlciBzdWl0ZSB3YXMgbm90IFRLSVAgKHN1Y2ggYXMgQ0NNUC9BRVMgd2hlcmUgdGhlIGtleSBidWZmZXIgaXMgb25seSAxNiBieXRlcyBsb25nKS5cblxuMS4gS0FTQU4gYXBwbGljYWJpbGl0eTogT3V0LW9mLWJvdW5kcyByZWFkcyBvbiBoZWFwIG9yIHN0YWNrIGJ1ZmZlcnMgKHN1Y2ggYXMgYWNjZXNzaW5nIHBhc3QgdGhlIDE2LWJ5dGUga2V5IGJ1ZmZlcikgYXJlIGRpcmVjdGx5IGRldGVjdGFibGUgYnkgS0FTQU4uXG4yLiBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgZnJhbWUgYnVmZmVyIGluIHRoZSBza2IgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZCB1cGZyb250IHZpYSBgbWVtc2V0KHNrYi1cdTAwM2VkYXRhLCAwLCBmcmFtZV9sZW4pYC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LlxuXG5TaW5jZSB0aGUgaXNzdWUgaXMgc3RyaWN0bHkgYW4gb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzIGNhdWdodCBieSBLQVNBTiBhbmQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIG1lbW9yeSByZWFkIGJ1ZyBpbiByc2lfaGFsX2xvYWRfa2V5IGJ5IHJlc3RyaWN0aW5nIGNvcHlpbmcgb2YgdGhlIFRYIGFuZCBSWCBNSUMga2V5cyBmcm9tIHRoZSBkYXRhIGJ1ZmZlciB0byBvbmx5IHdoZW4gdGhlIGNpcGhlciBzdWl0ZSBpcyBXTEFOX0NJUEhFUl9TVUlURV9US0lQIChwcmV2ZW50aW5nIE9PQiByZWFkcyBmb3Iga2V5IGxlbmd0aHMgc2hvcnRlciB0aGFuIDMyIGJ5dGVzIGxpa2UgQUVTL0NDTVApLiBUaGlzIGRyaXZlciBsb2dpYyBpcyByZWFjaGFibGUgdmlhIG1hYzgwMjExIHNldF9rZXkgY2FsbGJhY2tzIHdpdGggZW11bGF0ZWQgVVNCIGRldmljZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6Mzk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkMzlkMjJmNWVkNmViMTVhMDQ1MzIzOWY0YmEwMjQ2YWYxYzg1OWFhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMjA6Mzk6MzkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jXG5pbmRleCA3ZjJjMTYwOGYyY2UzLi4yZGRmNGQxNThiZmUzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tZ210LmNcbkBAIC04NDgsOCAmIzQzOzg0OCwxMCBAQCBpbnQgcnNpX2hhbF9sb2FkX2tleShzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLFxuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdG1lbWNweShcdTAwMjZzZXRfa2V5LVx1MDAzZWtleVswXVswXSwgZGF0YSwga2V5X2xlbik7XG4gXHRcdH1cbi1cdFx0bWVtY3B5KHNldF9rZXktXHUwMDNldHhfbWljX2tleSwgXHUwMDI2ZGF0YVsxNl0sIDgpO1xuLVx0XHRtZW1jcHkoc2V0X2tleS1cdTAwM2VyeF9taWNfa2V5LCBcdTAwMjZkYXRhWzI0XSwgOCk7XG4mIzQzO1x0XHRpZiAoY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVApIHtcbiYjNDM7XHRcdFx0bWVtY3B5KHNldF9rZXktXHUwMDNldHhfbWljX2tleSwgXHUwMDI2ZGF0YVsxNl0sIDgpO1xuJiM0MztcdFx0XHRtZW1jcHkoc2V0X2tleS1cdTAwM2VyeF9taWNfa2V5LCBcdTAwMjZkYXRhWzI0XSwgOCk7XG4mIzQzO1x0XHR9XG4gXHR9IGVsc2Uge1xuIFx0XHRtZW1zZXQoXHUwMDI2c2V0X2tleVtGUkFNRV9ERVNDX1NaXSwgMCwgZnJhbWVfbGVuIC0gRlJBTUVfREVTQ19TWik7XG4gXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6Mzk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7V0xBTiYjMzQ7LAogICAgJiMzNDtXTEFOX1ZFTkRPUl9SU0kmIzM0OywKICAgICYjMzQ7UlNJXzkxWCYjMzQ7LAogICAgJiMzNDtSU0lfVVNCJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JzaV9oYWxfbG9hZF9rZXkmIzM0OywKICAgICYjMzQ7cnNpX21hYzgwMjExX3NldF9rZXkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyBtZW1vcnkgcmVhZCBidWcgaW4gcnNpX2hhbF9sb2FkX2tleSBieSByZXN0cmljdGluZyBjb3B5aW5nIG9mIHRoZSBUWCBhbmQgUlggTUlDIGtleXMgZnJvbSB0aGUgZGF0YSBidWZmZXIgdG8gb25seSB3aGVuIHRoZSBjaXBoZXIgc3VpdGUgaXMgV0xBTl9DSVBIRVJfU1VJVEVfVEtJUCAocHJldmVudGluZyBPT0IgcmVhZHMgZm9yIGtleSBsZW5ndGhzIHNob3J0ZXIgdGhhbiAzMiBieXRlcyBsaWtlIEFFUy9DQ01QKS4gVGhpcyBkcml2ZXIgbG9naWMgaXMgcmVhY2hhYmxlIHZpYSBtYWM4MDIxMSBzZXRfa2V5IGNhbGxiYWNrcyB3aXRoIGVtdWxhdGVkIFVTQiBkZXZpY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDM5ZDIyZjVlZDZlYjE1YTA0NTMyMzlmNGJhMDI0NmFmMWM4NTlhYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDIwOjM5OjM5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jCmluZGV4IDdmMmMxNjA4ZjJjZTMuLjJkZGY0ZDE1OGJmZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tZ210LmMKQEAgLTg0OCw4ICYjNDM7ODQ4LDEwIEBAIGludCByc2lfaGFsX2xvYWRfa2V5KHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sCiAJCX0gZWxzZSB7CiAJCQltZW1jcHkoJmFtcDtzZXRfa2V5LSZndDtrZXlbMF1bMF0sIGRhdGEsIGtleV9sZW4pOwogCQl9Ci0JCW1lbWNweShzZXRfa2V5LSZndDt0eF9taWNfa2V5LCAmYW1wO2RhdGFbMTZdLCA4KTsKLQkJbWVtY3B5KHNldF9rZXktJmd0O3J4X21pY19rZXksICZhbXA7ZGF0YVsyNF0sIDgpOwomIzQzOwkJaWYgKGNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9US0lQKSB7CiYjNDM7CQkJbWVtY3B5KHNldF9rZXktJmd0O3R4X21pY19rZXksICZhbXA7ZGF0YVsxNl0sIDgpOwomIzQzOwkJCW1lbWNweShzZXRfa2V5LSZndDtyeF9taWNfa2V5LCAmYW1wO2RhdGFbMjRdLCA4KTsKJiM0MzsJCX0KIAl9IGVsc2UgewogCQltZW1zZXQoJmFtcDtzZXRfa2V5W0ZSQU1FX0RFU0NfU1pdLCAwLCBmcmFtZV9sZW4gLSBGUkFNRV9ERVNDX1NaKTsKIAl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgV2lyZWxlc3MgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIGBkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tZ210LmNgLiBUaGUgc3BlY2lmaWMgZnVuY3Rpb24gYmVpbmcgbW9kaWZpZWQgaXMgYHJzaV9oYWxfbG9hZF9rZXlgLiBSaWdodCwgc28gdGhpcyBpcyBhYm91dCBSZWRwaW5lIFNpZ25hbHMgSW5jLCB0aGVpciA5MXggd2lyZWxlc3MgZHJpdmVyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGRldmljZXMgc3VwcG9ydGVkOyBVU0IsIFNESU8sIHByb2JhYmx5IG1vcmUuIFRoZSBrZXkgcXVlc3Rpb24gbm93IGlzLCBjYW4gSSByZWFjaCB0aGlzIGRyaXZlciBvciBkZXZpY2UgdGhyb3VnaCBVU0IgUmF3IEdhZGdldCBvciBzeXprYWxsZXImIzM5O3MgVVNCIGdhZGdldCBlbXVsYXRpb24/IFdvcnRoIGludmVzdGlnYXRpbmcuCgpMZXQmIzM5O3Mgc2VlLCB3aGF0JiMzOTtzIGluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvYCBjb25jZXJuaW5nIFVTQj8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIGBncmVwcGVyYCBzZWFyY2ggb3IganVzdCBzdGFydCByZWFkaW5nIHRoZSBmaWxlcyBkaXJlY3RseS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGF0dGFjayBzdXJmYWNlIGhlcmUgYW5kIGlmIHRoaXMgaXMgYSB2aWFibGUgdGFyZ2V0IGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JzaV85MXhfbWdtdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvTWFrZWZpbGU9ND1yc2lfOTF4LXlcdFx0XHQmIzQzOz0gcnNpXzkxeF9tYWM4MDIxMS5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvTWFrZWZpbGU6NTpyc2lfOTF4LXlcdFx0XHQmIzQzOz0gcnNpXzkxeF9tZ210Lm9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9NYWtlZmlsZS02LXJzaV85MXgteVx0XHRcdCYjNDM7PSByc2lfOTF4X2hhbC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY3NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhhdCBwcm9ibGVtLCBhcyB0aG91Z2ggaXQgd2VyZSBteSBvd24gdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgUlNJIERyaXZlciBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgUlNJIHdpcmVsZXNzIGRyaXZlciBpcyBjb25maWd1cmVkIGFuZCB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZS4gVGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHRoYXQsIGVzcGVjaWFsbHkgd2l0aGluIGEgTGludXgga2VybmVsIGNvbnRleHQsIGlzIGFsbW9zdCBhbHdheXMgdGhlIGBLY29uZmlnYCBmaWxlLiBJJiMzOTtsbCBnbyBzdHJhaWdodCB0byBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL2Ag4oCTIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgZHJpdmVyIHNvdXJjZSBhbmQsIGNyaXRpY2FsbHksIGl0cyBjb25maWd1cmF0aW9uIG1lY2hhbmlzbS4gVGhlIEtjb25maWcgZmlsZSBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZHJpdmVyIGlzIGJ1aWx0IGludG8gdGhlIGtlcm5lbCBvciBhcyBhIG1vZHVsZSwgYW5kIHdoYXQgYnVpbGQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hldGhlciB0aGlzIHBhcnRpY3VsYXIgUlNJIGRyaXZlciBzdXBwb3J0cyBkaWZmZXJlbnQgaGFyZHdhcmUgaW50ZXJmYWNlcyBsaWtlIFVTQiBhbmQgU0RJTywgb3IgcGVyaGFwcyBldmVuIG90aGVycyB0aGF0IEkgbWlnaHQgbm90IGJlIGltbWVkaWF0ZWx5IGF3YXJlIG9mLiBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgY29uZmlndXJhYmxlIGR1cmluZyB0aGUgYnVpbGQgcHJvY2Vzcy4gRnJvbSBoZXJlIEkgY2FuIHN0YXJ0IG1ha2luZyBkZWR1Y3Rpb25zIG9uIGhvdyB0byBtYW5pcHVsYXRlIGl0IHRvIGZpdCBvdXIgbmVlZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBXTEFOX1ZFTkRPUl9SU0lcbiAgIDM6XHRcdGJvb2wgXCYjMzQ7UmVkcGluZSBTaWduYWxzIEluYyBkZXZpY2VzXCYjMzQ7XG4gICA0Olx0XHRkZWZhdWx0IHlcbiAgIDU6XHRcdGhlbHBcbiAgIDY6XHRcdCAgSWYgeW91IGhhdmUgYSB3aXJlbGVzcyBjYXJkIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS5cbiAgIDc6XHRcbiAgIDg6XHRcdCAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2VzbiYjMzk7dCBkaXJlY3RseSBhZmZlY3QgdGhlXG4gICA5Olx0XHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGwgdGhlXG4gIDEwOlx0XHQgIHF1ZXN0aW9ucyBhYm91dCB0aGVzZSBjYXJkcy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZSBhc2tlZCBmb3JcbiAgMTE6XHRcdCAgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxuICAxMjpcdFxuICAxMzpcdGlmIFdMQU5fVkVORE9SX1JTSVxuICAxNDpcdFxuICAxNTpcdGNvbmZpZyBSU0lfOTFYXG4gIDE2Olx0XHR0cmlzdGF0ZSBcJiMzNDtSZWRwaW5lIFNpZ25hbHMgSW5jIDkxeCBXTEFOIGRyaXZlciBzdXBwb3J0XCYjMzQ7XG4gIDE3Olx0XHRzZWxlY3QgQlRfSENJUlNJIGlmIFJTSV9DT0VYXG4gIDE4Olx0XHRkZXBlbmRzIG9uIE1BQzgwMjExXG4gIDE5Olx0XHRoZWxwXG4gIDIwOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJlcyBzdXBwb3J0IGZvciBSU0kgMXgxIGRldmljZXMuXG4gIDIxOlx0XHQgIFNlbGVjdCBNIChyZWNvbW1lbmRlZCksIGlmIHlvdSBoYXZlIGEgUlNJIDF4MSB3aXJlbGVzcyBtb2R1bGUuXG4gIDIyOlx0XG4gIDIzOlx0Y29uZmlnIFJTSV9ERUJVR0ZTXG4gIDI0Olx0XHRib29sIFwmIzM0O1JlZHBpbmUgU2lnbmFscyBJbmMgZGVidWcgc3VwcG9ydFwmIzM0O1xuICAyNTpcdFx0ZGVwZW5kcyBvbiBSU0lfOTFYXG4gIDI2Olx0XHRkZWZhdWx0IHlcbiAgMjc6XHRcdGhlbHBcbiAgMjg6XHRcdCBTYXkgWSwgaWYgeW91IHdvdWxkIGxpa2UgdG8gZW5hYmxlIGRlYnVnIHN1cHBvcnQuIFRoaXMgb3B0aW9uXG4gIDI5Olx0XHQgY3JlYXRlcyBkZWJ1Z2ZzIGVudHJpZXNcbiAgMzA6XHRcbiAgMzE6XHRjb25maWcgUlNJX1NESU9cbiAgMzI6XHRcdHRyaXN0YXRlIFwmIzM0O1JlZHBpbmUgU2lnbmFscyBTRElPIGJ1cyBzdXBwb3J0XCYjMzQ7XG4gIDMzOlx0XHRkZXBlbmRzIG9uIE1NQyBcdTAwMjZcdTAwMjYgUlNJXzkxWFxuICAzNDpcdFx0ZGVmYXVsdCBtXG4gIDM1Olx0XHRoZWxwXG4gIDM2Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFNESU8gYnVzIHN1cHBvcnQgaW4gcnNpIGRyaXZlcnMuXG4gIDM3Olx0XHQgIFNlbGVjdCBNIChyZWNvbW1lbmRlZCksIGlmIHlvdSBoYXZlIGEgUlNJIDF4MSB3aXJlbGVzcyBtb2R1bGUuXG4gIDM4Olx0XG4gIDM5Olx0Y29uZmlnIFJTSV9VU0JcbiAgNDA6XHRcdHRyaXN0YXRlIFwmIzM0O1JlZHBpbmUgU2lnbmFscyBVU0IgYnVzIHN1cHBvcnRcJiMzNDtcbiAgNDE6XHRcdGRlcGVuZHMgb24gVVNCIFx1MDAyNlx1MDAyNiBSU0lfOTFYXG4gIDQyOlx0XHRkZWZhdWx0IG1cbiAgNDM6XHRcdGhlbHBcbiAgNDQ6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgVVNCIGJ1cyBzdXBwb3J0IGluIHJzaSBkcml2ZXJzLlxuICA0NTpcdFx0ICBTZWxlY3QgTSAocmVjb21tZW5kZWQpLCBpZiB5b3UgaGF2ZSBhIFJTSSAxeDEgd2lyZWxlc3MgbW9kdWxlLlxuICA0NjpcdFxuICA0NzpcdGNvbmZpZyBSU0lfQ09FWFxuICA0ODpcdFx0Ym9vbCBcJiMzNDtSZWRwaW5lIFNpZ25hbHMgV0xBTiBCVCBDb2V4aXN0ZW5jZSBzdXBwb3J0XCYjMzQ7XG4gIDQ5Olx0XHRkZXBlbmRzIG9uIEJUIFx1MDAyNlx1MDAyNiBSU0lfOTFYXG4gIDUwOlx0XHRkZXBlbmRzIG9uICEoQlQ9bSBcdTAwMjZcdTAwMjYgUlNJXzkxWD15KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NTAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFVTQiBEcml2ZXIgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gYFJTSV9VU0JgIGlzIHRoZSBrZXksIG1lYW5pbmcgdGhlIGNvZGUgdXNlcyB0aGUgVVNCIGJ1cyAoYENPTkZJR19SU0lfVVNCYCwgYENPTkZJR19SU0lfOTFYYCkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleHBsb3JlIHRoZSBVU0IgZHJpdmVycywgYW5kIEkga25vdyB0aGF0IEkgY2FuIGxldmVyYWdlIHRoZSBVU0IgUmF3IEdhZGdldCBvciBzeXprYWxsZXIgZnV6emluZywgZXNwZWNpYWxseSB3aXRoaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhhdCB3b3VsZCBhbGxvdyBmb3IgZW11bGF0aW9uIGFuZCBtb3JlIHJvYnVzdCB0ZXN0aW5nLiBCdXQgYmVmb3JlIEkgZGl2ZSBpbnRvIGFueSBvZiB0aGF0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhIHNwZWNpZmljIGZ1bmN0aW9uIGNhbGw6IGByc2lfaGFsX2xvYWRfa2V5YC4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBiZWluZyB1c2VkLiBUaW1lIHRvIGdyZXAgZm9yIGByc2lfaGFsX2xvYWRfa2V5YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgb2YgdGhhdCBmdW5jdGlvbiB0byBjb250aW51ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyc2lfaGFsX2xvYWRfa2V5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM9OTc2PXN0YXRpYyBpbnQgcnNpX2hhbF9rZXlfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTAwNS1cdFx0ICAgIChrZXktXHUwMDNlY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwKSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoxMDA2Olx0XHRcdHN0YXR1cyA9IHJzaV9oYWxfbG9hZF9rZXkoYWRhcHRlci1cdTAwM2Vwcml2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xMDA3LVx0XHRcdFx0XHRcdCAga2V5LVx1MDAzZWtleSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTEwMTgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjEwMTk6XHRzdGF0dXMgPSByc2lfaGFsX2xvYWRfa2V5KGFkYXB0ZXItXHUwMDNlcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTAyMC1cdFx0XHRcdCAga2V5LVx1MDAzZWtleSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jPTE0MjI9c3RhdGljIGludCByc2lfbWFjODAyMTFfc3RhX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTE0OTQtXHRcdFx0XHQgICAgKGtleS1cdTAwM2VjaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDApKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoxNDk1Olx0XHRcdFx0XHRyc2lfaGFsX2xvYWRfa2V5KGFkYXB0ZXItXHUwMDNlcHJpdixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTQ5Ni1cdFx0XHRcdFx0XHRcdCBrZXktXHUwMDNla2V5LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYz03MTE9aW50IHJzaV9zZXRfdmFwX2NhcGFiaWxpdGllcyhzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYy03ODAtLyoqXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tZ210LmM6NzgxOiAqIHJzaV9oYWxfbG9hZF9rZXkoKSAtIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBsb2FkIGtleXMgd2l0aGluIHRoZSBmaXJtd2FyZS5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYy03ODItICogQGNvbW1vbjogUG9pbnRlciB0byB0aGUgZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlLlxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYy03OTItICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tZ210LmM6NzkzOmludCByc2lfaGFsX2xvYWRfa2V5KHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tZ210LmMtNzk0LVx0XHQgICAgIHU4ICpkYXRhLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfbWdtdC5oPTcxNz1pbnQgcnNpX3NlbmRfYWdncmVnYXRpb25fcGFyYW1zX2ZyYW1lKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sIHUxNiB0aWQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9tZ210LmgtNzE5LVx0XHRcdFx0ICAgICAgdTggc3RhX2lkKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfbWdtdC5oOjcyMDppbnQgcnNpX2hhbF9sb2FkX2tleShzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCB1OCAqZGF0YSwgdTE2IGtleV9sZW4sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX21nbXQuaC03MjEtXHRcdCAgICAgdTgga2V5X3R5cGUsIHU4IGtleV9pZCwgdTMyIGNpcGhlciwgczE2IHN0YV9pZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODQ3CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIENvZGU6IFVuZGVyc3RhbmRpbmcgdGhlIEtleSBDaGFuZ2UqKgoKT2theSwgc28gd2UmIzM5O3ZlIGdvdCBhIG1vZGlmaWNhdGlvbiBoZXJlLCBhbmQgbXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGJlaGluZCB0aGlzLiBUaGUgYmVzdCBhcHByb2FjaCBpcyB0byBleGFtaW5lIGByc2lfaGFsX2xvYWRfa2V5YCBhbmQgYHJzaV9oYWxfa2V5X2NvbmZpZ2AuIExvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dHVhbCBjbHVlcyBJIG5lZWQuIFNwZWNpZmljYWxseSwgYnkgcmV2aWV3aW5nIHRoZXNlLCBJJiMzOTttIGV4cGVjdGluZyB0byBnYWluIGluc2lnaHRzIGludG8gaG93IHRoZSBrZXkgbG9hZGluZyBwcm9jZXNzIGZ1bmN0aW9ucyB3aXRoaW4gdGhpcyBzcGVjaWZpYyBIQUwgKEhhcmR3YXJlIEFic3RyYWN0aW9uIExheWVyKS4gSSBhbnRpY2lwYXRlIGZpbmRpbmcgb3V0IHdoYXQgdGhlIGtleSBsb2FkaW5nIHJvdXRpbmVzIGRvLCB0aGUgY29uZmlnIHJlcXVpcmVtZW50cywgYW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgbW9kaWZpY2F0aW9uIHBsYXlzIGludG8gdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlLiBIb3BlZnVsbHkgSSBjYW4gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBjaGFuZ2Ugd2l0aCB0aGlzIGFwcHJvYWNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzkwOlx0ICpcbiA3OTE6XHQgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZS5cbiA3OTI6XHQgKi9cbiA3OTM6XHRpbnQgcnNpX2hhbF9sb2FkX2tleShzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLFxuIDc5NDpcdFx0XHQgICAgIHU4ICpkYXRhLFxuIDc5NTpcdFx0XHQgICAgIHUxNiBrZXlfbGVuLFxuIDc5NjpcdFx0XHQgICAgIHU4IGtleV90eXBlLFxuIDc5NzpcdFx0XHQgICAgIHU4IGtleV9pZCxcbiA3OTg6XHRcdFx0ICAgICB1MzIgY2lwaGVyLFxuIDc5OTpcdFx0XHQgICAgIHMxNiBzdGFfaWQsXG4gODAwOlx0XHRcdCAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZilcbiA4MDE6XHR7XG4gODAyOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcbiA4MDM6XHRcdHN0cnVjdCByc2lfc2V0X2tleSAqc2V0X2tleTtcbiA4MDQ6XHRcdHUxNiBrZXlfZGVzY3JpcHRvciA9IDA7XG4gODA1Olx0XHR1MTYgZnJhbWVfbGVuID0gc2l6ZW9mKHN0cnVjdCByc2lfc2V0X2tleSk7XG4gODA2Olx0XG4gODA3Olx0XHRyc2lfZGJnKE1HTVRfVFhfWk9ORSwgXCYjMzQ7JXM6IFNlbmRpbmcgbG9hZCBrZXkgZnJhbWVcXG5cJiMzNDssIF9fZnVuY19fKTtcbiA4MDg6XHRcbiA4MDk6XHRcdHNrYiA9IGRldl9hbGxvY19za2IoZnJhbWVfbGVuKTtcbiA4MTA6XHRcdGlmICghc2tiKSB7XG4gODExOlx0XHRcdHJzaV9kYmcoRVJSX1pPTkUsIFwmIzM0OyVzOiBGYWlsZWQgaW4gYWxsb2NhdGlvbiBvZiBza2JcXG5cJiMzNDssXG4gODEyOlx0XHRcdFx0X19mdW5jX18pO1xuIDgxMzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA4MTQ6XHRcdH1cbiA4MTU6XHRcbiA4MTY6XHRcdG1lbXNldChza2ItXHUwMDNlZGF0YSwgMCwgZnJhbWVfbGVuKTtcbiA4MTc6XHRcdHNldF9rZXkgPSAoc3RydWN0IHJzaV9zZXRfa2V5ICopc2tiLVx1MDAzZWRhdGE7XG4gODE4Olx0XG4gODE5Olx0XHRpZiAoa2V5X3R5cGUgPT0gUlNJX0dST1VQX0tFWSkge1xuIDgyMDpcdFx0XHRrZXlfZGVzY3JpcHRvciA9IFJTSV9LRVlfVFlQRV9CUk9BRENBU1Q7XG4gODIxOlx0XHRcdGlmICh2aWYtXHUwMDNldHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUClcbiA4MjI6XHRcdFx0XHRrZXlfZGVzY3JpcHRvciB8PSBSU0lfS0VZX01PREVfQVA7XG4gODIzOlx0XHR9XG4gODI0Olx0XHRpZiAoKGNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MCkgfHxcbiA4MjU6XHRcdCAgICAoY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNCkpIHtcbiA4MjY6XHRcdFx0a2V5X2lkID0gMDtcbiA4Mjc6XHRcdFx0a2V5X2Rlc2NyaXB0b3IgfD0gUlNJX1dFUF9LRVk7XG4gODI4Olx0XHRcdGlmIChrZXlfbGVuIFx1MDAzZT0gMTMpXG4gODI5Olx0XHRcdFx0a2V5X2Rlc2NyaXB0b3IgfD0gUlNJX1dFUF9LRVlfMTA0O1xuIDgzMDpcdFx0fSBlbHNlIGlmIChjaXBoZXIgIT0gS0VZX1RZUEVfQ0xFQVIpIHtcbiA4MzE6XHRcdFx0a2V5X2Rlc2NyaXB0b3IgfD0gUlNJX0NJUEhFUl9XUEE7XG4gODMyOlx0XHRcdGlmIChjaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfVEtJUClcbiA4MzM6XHRcdFx0XHRrZXlfZGVzY3JpcHRvciB8PSBSU0lfQ0lQSEVSX1RLSVA7XG4gODM0Olx0XHR9XG4gODM1Olx0XHRrZXlfZGVzY3JpcHRvciB8PSBSU0lfUFJPVEVDVF9EQVRBX0ZSQU1FUztcbiA4MzY6XHRcdGtleV9kZXNjcmlwdG9yIHw9IChrZXlfaWQgXHUwMDNjXHUwMDNjIFJTSV9LRVlfSURfT0ZGU0VUKTtcbiA4Mzc6XHRcbiA4Mzg6XHRcdHJzaV9zZXRfbGVuX3FubyhcdTAwMjZzZXRfa2V5LVx1MDAzZWRlc2NfZHdvcmQwLmxlbl9xbm8sXG4gODM5Olx0XHRcdFx0KGZyYW1lX2xlbiAtIEZSQU1FX0RFU0NfU1opLCBSU0lfV0lGSV9NR01UX1EpO1xuIDg0MDpcdFx0c2V0X2tleS1cdTAwM2VkZXNjX2R3b3JkMC5mcmFtZV90eXBlID0gU0VUX0tFWV9SRVE7XG4gODQxOlx0XHRzZXRfa2V5LVx1MDAzZWtleV9kZXNjID0gY3B1X3RvX2xlMTYoa2V5X2Rlc2NyaXB0b3IpO1xuIDg0MjpcdFx0c2V0X2tleS1cdTAwM2VzdGFfaWQgPSBzdGFfaWQ7XG4gODQzOlx0XG4gODQ0Olx0XHRpZiAoZGF0YSkge1xuIDg0NTpcdFx0XHRpZiAoKGNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MCkgfHxcbiA4NDY6XHRcdFx0ICAgIChjaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0KSkge1xuIDg0NzpcdFx0XHRcdG1lbWNweShcdTAwMjZzZXRfa2V5LVx1MDAzZWtleVtrZXlfaWRdWzFdLCBkYXRhLCBrZXlfbGVuICogMik7XG4gODQ4Olx0XHRcdH0gZWxzZSB7XG4gODQ5Olx0XHRcdFx0bWVtY3B5KFx1MDAyNnNldF9rZXktXHUwMDNla2V5WzBdWzBdLCBkYXRhLCBrZXlfbGVuKTtcbiA4NTA6XHRcdFx0fVxuIDg1MTpcdFx0XHRpZiAoY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVApIHtcbiA4NTI6XHRcdFx0XHRtZW1jcHkoc2V0X2tleS1cdTAwM2V0eF9taWNfa2V5LCBcdTAwMjZkYXRhWzE2XSwgOCk7XG4gODUzOlx0XHRcdFx0bWVtY3B5KHNldF9rZXktXHUwMDNlcnhfbWljX2tleSwgXHUwMDI2ZGF0YVsyNF0sIDgpO1xuIDg1NDpcdFx0XHR9XG4gODU1Olx0XHR9IGVsc2Uge1xuIDg1NjpcdFx0XHRtZW1zZXQoXHUwMDI2c2V0X2tleVtGUkFNRV9ERVNDX1NaXSwgMCwgZnJhbWVfbGVuIC0gRlJBTUVfREVTQ19TWik7XG4gODU3Olx0XHR9XG4gODU4Olx0XG4gODU5Olx0XHRza2JfcHV0KHNrYiwgZnJhbWVfbGVuKTtcbiA4NjA6XHRcbiA4NjE6XHRcdHJldHVybiByc2lfc2VuZF9pbnRlcm5hbF9tZ210X2ZyYW1lKGNvbW1vbiwgc2tiKTtcbiA4NjI6XHR9XG4gODYzOlx0XG4gODY0Olx0LypcbiA4NjU6XHQgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIHRoZSBjb21tb24gZGV2aWNlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB0byBkZXZpY2UuXG4gODY2Olx0ICogVGhpcyBmcmFtZSBpbmNsdWRlcyB0aGUgdXNlZnVsIGluZm9ybWF0aW9uIHRvIG1ha2UgZGV2aWNlIHdvcmtzIG9uXG4gODY3Olx0ICogc3BlY2lmaWMgb3BlcmF0aW5nIG1vZGUuXG4gODY4Olx0ICovXG4gODY5Olx0c3RhdGljIGludCByc2lfc2VuZF9jb21tb25fZGV2X3BhcmFtcyhzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDgyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgcnNpYCBLZXJuZWwgRHJpdmVyIEJ1Z2ZpeCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgYmVmb3JlIHRoZSBmaXgsIHRoZSBjb2RlIHdhcyBtYWtpbmcgdW5jb25kaXRpb25hbCBgbWVtY3B5YCBjYWxsczogYG1lbWNweShzZXRfa2V5LSZndDt0eF9taWNfa2V5LCAmYW1wO2RhdGFbMTZdLCA4KTtgIGFuZCBgbWVtY3B5KHNldF9rZXktJmd0O3J4X21pY19rZXksICZhbXA7ZGF0YVsyNF0sIDgpO2AuIFRoaXMgd2FzIHByb2JsZW1hdGljLiBUaGUgaXNzdWUgd2FzIHRoYXQgdGhlIGNvZGUgd2FzIGFzc3VtaW5nIGEgbWluaW11bSBkYXRhIHNpemUgKHNwZWNpZmljYWxseSwgdGhhdCBgZGF0YWAgd2FzIGF0IGxlYXN0IDMyIGJ5dGVzIGxvbmcpLiBJdCBkaWQgdGhpcyByZWdhcmRsZXNzIG9mIHRoZSBhY3R1YWwga2V5IGxlbmd0aCAoYGtleV9sZW5gKSwgd2hpY2ggY2FuIGJlIHNtYWxsZXIgKGUuZy4sIDE2IGJ5dGVzIGZvciBDQ01QL0FFUykuIFNvLCBpZiBga2V5X2xlbmAgd2FzIGxlc3MgdGhhbiAzMiwgaXQgd2FzIGRlZmluaXRlbHkgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIHJlYWRzLiBDbGFzc2ljIG1lbW9yeSBjb3JydXB0aW9uIHZ1bG5lcmFiaWxpdHkhCgpUaGUgZml4LCB0aGFuayBnb29kbmVzcywgYWRkcmVzc2VzIHRoaXMgYnkgYWRkaW5nIGEgY3J1Y2lhbCBjaGVjazogYGlmIChjaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfVEtJUClgLiBUaGF0JiMzOTtzIGEgc29saWQgZGVmZW5zZS4gQnkgb25seSBleGVjdXRpbmcgdGhvc2UgYG1lbWNweWAgY2FsbHMgd2hlbiB0aGUgY2lwaGVyIHN1aXRlIGlzIFRLSVAsIGl0IGVmZmVjdGl2ZWx5IHByZXZlbnRzIHRoZSBvdXQtb2YtYm91bmRzIHJlYWRzIGZvciBvdGhlciBjaXBoZXJzIHdoZXJlIHRoZSBkYXRhIGxlbmd0aCBpcyBzaG9ydGVyLiBUaGlzIGlzIGEgbGVnaXRpbWF0ZSBidWdmaXggYW5kIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBvbmUgYXQgdGhhdC4gQSBnb29kIGZpbmQuCgpOb3csIG15IG1pbmQgaXMgYWxyZWFkeSB0aGlua2luZyBhYm91dCBleHBsb2l0YWJpbGl0eS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHJlYWNoYWJsZSB0aGlzIGlzLiBJIG5lZWQgdG8gc2VlIGlmIGByc2lfaGFsX2xvYWRfa2V5YCBpcyBzb21ldGhpbmcgSSBjYW4gdHJpZ2dlciBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciB1c2luZyBVU0IgZW11bGF0aW9uIHRvb2xzIGxpa2UgU3l6a2FsbGVyLiBIbW0sIGFuZCB0aGUgYHJzaV85MXhgIGRyaXZlciwgaXQgKmRvZXMqIGhhdmUgVVNCIGludGVyZmFjZSBzdXBwb3J0IGFjY29yZGluZyB0byBgQ09ORklHX1JTSV9VU0JgLiBPa2F5LCBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBVU0IgZGV2aWNlIHByb2JlIHdvcmtzIGZvciBSU0kuIFRoYXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JzaV9wcm9iZXxyc2lfdXNiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9NYWtlZmlsZT05PXJzaV85MXgtJChDT05GSUdfUlNJX0RFQlVHRlMpXHQmIzQzOz0gcnNpXzkxeF9kZWJ1Z2ZzLm9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9NYWtlZmlsZS0xMC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9NYWtlZmlsZToxMTpyc2lfdXNiLXlcdFx0XHQmIzQzOz0gcnNpXzkxeF91c2IubyByc2lfOTF4X3VzYl9vcHMub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL01ha2VmaWxlLTEyLXJzaV9zZGlvLXlcdFx0XHQmIzQzOz0gcnNpXzkxeF9zZGlvLm8gcnNpXzkxeF9zZGlvX29wcy5vXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL01ha2VmaWxlPTE0PW9iai0kKENPTkZJR19SU0lfU0RJTylcdFx0JiM0Mzs9IHJzaV9zZGlvLm9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9NYWtlZmlsZToxNTpvYmotJChDT05GSUdfUlNJX1VTQilcdFx0JiM0Mzs9IHJzaV91c2Iub1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uYy0yNS0jaW5jbHVkZSBcJiMzNDtyc2lfaGFsLmhcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uYzoyNjojaW5jbHVkZSBcJiMzNDtyc2lfdXNiLmhcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21haW4uYy0yNy1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9zZGlvLmM9OTc5PXN0YXRpYyBzdHJ1Y3QgcnNpX2hvc3RfaW50Zl9vcHMgc2Rpb19ob3N0X2ludGZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3NkaW8uYy05OTItLyoqXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9zZGlvLmM6OTkzOiAqIHJzaV9wcm9iZSgpIC0gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkga2VybmVsIHdoZW4gdGhlIGRyaXZlciBwcm92aWRlZFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfc2Rpby5jLTk5NC0gKlx0XHQgVmVuZG9yIGFuZCBkZXZpY2UgSURzIGFyZSBtYXRjaGVkLiBBbGwgdGhlIGluaXRpYWxpemF0aW9uXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfc2Rpby5jLTEwMDAtICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9zZGlvLmM6MTAwMTpzdGF0aWMgaW50IHJzaV9wcm9iZShzdHJ1Y3Qgc2Rpb19mdW5jICpwZnVuY3Rpb24sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9zZGlvLmMtMTAwMi1cdFx0ICAgICBjb25zdCBzdHJ1Y3Qgc2Rpb19kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3NkaW8uYz0xNTA5PXN0YXRpYyBzdHJ1Y3Qgc2Rpb19kcml2ZXIgcnNpX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3NkaW8uYy0xNTEwLVx0Lm5hbWUgICAgICAgPSBcJiMzNDtSU0ktU0RJTyBXTEFOXCYjMzQ7LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfc2Rpby5jOjE1MTE6XHQucHJvYmUgICAgICA9IHJzaV9wcm9iZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3NkaW8uYy0xNTEyLVx0LnJlbW92ZSAgICAgPSByc2lfZGlzY29ubmVjdCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy0yMC0jaW5jbHVkZSBcdTAwM2NuZXQvcnNpXzkxeC5oXHUwMDNlXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzoyMTojaW5jbHVkZSBcJiMzNDtyc2lfdXNiLmhcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTIyLSNpbmNsdWRlIFwmIzM0O3JzaV9oYWwuaFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jPTMwPXN0YXRpYyBpbnQgcnNpX3J4X3VyYl9zdWJtaXQoc3RydWN0IHJzaV9odyAqYWRhcHRlciwgdTggZXBfbnVtLCBnZnBfdCBmbGFncyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtMzItLyoqXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzozMzogKiByc2lfdXNiX2NhcmRfd3JpdGUoKSAtIFRoaXMgZnVuY3Rpb24gd3JpdGVzIHRvIHRoZSBVU0IgQ2FyZC5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTM0LSAqIEBhZGFwdGVyOiBQb2ludGVyIHRvIHRoZSBhZGFwdGVyIHN0cnVjdHVyZS5cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy00MC0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjQxOnN0YXRpYyBpbnQgcnNpX3VzYl9jYXJkX3dyaXRlKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy00Mi1cdFx0XHQgICAgICB1OCAqYnVmLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jPTgxPXN0YXRpYyBpbnQgcnNpX3dyaXRlX211bHRpcGxlKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtOTctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo5ODpcdHJldHVybiByc2lfdXNiX2NhcmRfd3JpdGUoYWRhcHRlciwgZGF0YSwgY291bnQsIGVuZHBvaW50KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTk5LX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYz0xMDk9c3RhdGljIGludCByc2lfZmluZF9idWxrX2luX2FuZF9vdXRfZW5kcG9pbnRzKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtMTY2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6MTY3Oi8qIHJzaV91c2JfcmVnX3JlYWQoKSAtIFRoaXMgZnVuY3Rpb24gcmVhZHMgZGF0YSBmcm9tIGdpdmVuIHJlZ2lzdGVyIGFkZHJlc3MuXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy0xNjgtICogQHVzYmRldjogUG9pbnRlciB0byB0aGUgdXNiX2RldmljZSBzdHJ1Y3R1cmUuXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtMTc0LSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6MTc1OnN0YXRpYyBpbnQgcnNpX3VzYl9yZWdfcmVhZChzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtMTc2LVx0XHRcdCAgICB1MzIgcmVnLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTIxMC0vKipcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjIxMTogKiByc2lfdXNiX3JlZ193cml0ZSgpIC0gVGhpcyBmdW5jdGlvbiB3cml0ZXMgdGhlIGdpdmVuIGRhdGEgaW50byB0aGUgZ2l2ZW5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTIxMi0gKlx0XHRcdCByZWdpc3RlciBhZGRyZXNzLlxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTIxOS0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjIyMDpzdGF0aWMgaW50IHJzaV91c2JfcmVnX3dyaXRlKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy0yMjEtXHRcdFx0ICAgICB1MzIgcmVnLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jPTMyND1zdGF0aWMgaW50IHJzaV9yeF91cmJfc3VibWl0KHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIsIHU4IGVwX251bSwgZ2ZwX3QgbWVtX2ZsYWdzKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTM2MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjM2MjpzdGF0aWMgaW50IHJzaV91c2JfcmVhZF9yZWdpc3Rlcl9tdWx0aXBsZShzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyLCB1MzIgYWRkcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTM2My1cdFx0XHRcdFx0ICB1OCAqZGF0YSwgdTE2IGNvdW50KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTQwMi0vKipcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjQwMzogKiByc2lfdXNiX3dyaXRlX3JlZ2lzdGVyX211bHRpcGxlKCkgLSBUaGlzIGZ1bmN0aW9uIHdyaXRlcyBtdWx0aXBsZSBieXRlcyBvZlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNDA0LSAqXHRcdFx0XHQgICAgICAgaW5mb3JtYXRpb24gdG8gbXVsdGlwbGUgcmVnaXN0ZXJzLlxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTQxMS0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjQxMjpzdGF0aWMgaW50IHJzaV91c2Jfd3JpdGVfcmVnaXN0ZXJfbXVsdGlwbGUoc3RydWN0IHJzaV9odyAqYWRhcHRlciwgdTMyIGFkZHIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy00MTMtXHRcdFx0XHRcdCAgIHU4ICpkYXRhLCB1MTYgY291bnQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNDUyLS8qKlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6NDUzOiAqcnNpX3VzYl9ob3N0X2ludGZfd3JpdGVfcGt0KCkgLSBUaGlzIGZ1bmN0aW9uIHdyaXRlcyB0aGUgcGFja2V0IHRvIHRoZVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNDU0LSAqXHRcdFx0XHQgICBVU0IgY2FyZC5cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy00NjAtICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo0NjE6c3RhdGljIGludCByc2lfdXNiX2hvc3RfaW50Zl93cml0ZV9wa3Qoc3RydWN0IHJzaV9odyAqYWRhcHRlcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTQ2Mi1cdFx0XHRcdCAgICAgICB1OCAqcGt0LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTQ3Ni1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjQ3NzpzdGF0aWMgaW50IHJzaV91c2JfbWFzdGVyX3JlZ19yZWFkKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIsIHUzMiByZWcsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy00NzgtXHRcdFx0XHQgICB1MzIgKnZhbHVlLCB1MTYgbGVuKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTQ4NC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjQ4NTpcdHJldCA9IHJzaV91c2JfcmVnX3JlYWQodXNiZGV2LCByZWcsIFx1MDAyNnRlbXAsIGxlbik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy00ODYtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTQ5Mi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjQ5MzpzdGF0aWMgaW50IHJzaV91c2JfbWFzdGVyX3JlZ193cml0ZShzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNDk0LVx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgcmVnLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTQ5OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjUwMDpcdHJldHVybiByc2lfdXNiX3JlZ193cml0ZSh1c2JkZXYsIHJlZywgdmFsdWUsIGxlbik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy01MDEtfVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNTAyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6NTAzOnN0YXRpYyBpbnQgcnNpX3VzYl9sb2FkX2RhdGFfbWFzdGVyX3dyaXRlKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy01MDQtXHRcdFx0XHRcdCAgdTMyIGJhc2VfYWRkcmVzcyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy01MTctXHRcdG1lbWNweSh0ZW1wX2J1ZiwgdGFfZmlybXdhcmUgJiM0MzsgY3VyX2luZHgsIGJsb2NrX3NpemUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6NTE4Olx0XHRzdGF0dXMgPSByc2lfdXNiX3dyaXRlX3JlZ2lzdGVyX211bHRpcGxlKGFkYXB0ZXIsIGJhc2VfYWRkcmVzcyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTUxOS1cdFx0XHRcdFx0XHRcdCAodTggKikodGVtcF9idWYpLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTUzMS1cdFx0ICAgICAgIGluc3RydWN0aW9uc19zeiAlIGJsb2NrX3NpemUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6NTMyOlx0XHRzdGF0dXMgPSByc2lfdXNiX3dyaXRlX3JlZ2lzdGVyX211bHRpcGxlXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy01MzMtXHRcdFx0XHRcdFx0KGFkYXB0ZXIsIGJhc2VfYWRkcmVzcyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYz01NDU9c3RhdGljIHN0cnVjdCByc2lfaG9zdF9pbnRmX29wcyB1c2JfaG9zdF9pbnRmX29wcyA9IHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjU0NjpcdC53cml0ZV9wa3RcdFx0PSByc2lfdXNiX2hvc3RfaW50Zl93cml0ZV9wa3QsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo1NDc6XHQucmVhZF9yZWdfbXVsdGlwbGVcdD0gcnNpX3VzYl9yZWFkX3JlZ2lzdGVyX211bHRpcGxlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6NTQ4Olx0LndyaXRlX3JlZ19tdWx0aXBsZVx0PSByc2lfdXNiX3dyaXRlX3JlZ2lzdGVyX211bHRpcGxlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6NTQ5Olx0Lm1hc3Rlcl9yZWdfcmVhZFx0PSByc2lfdXNiX21hc3Rlcl9yZWdfcmVhZCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjU1MDpcdC5tYXN0ZXJfcmVnX3dyaXRlXHQ9IHJzaV91c2JfbWFzdGVyX3JlZ193cml0ZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjU1MTpcdC5sb2FkX2RhdGFfbWFzdGVyX3dyaXRlXHQ9IHJzaV91c2JfbG9hZF9kYXRhX21hc3Rlcl93cml0ZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTU1Mi19O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jPTU2MD1zdGF0aWMgdm9pZCByc2lfZGVpbml0X3VzYl9pbnRlcmZhY2Uoc3RydWN0IHJzaV9odyAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy01NzItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo1NzM6c3RhdGljIGludCByc2lfdXNiX2luaXRfcngoc3RydWN0IHJzaV9odyAqYWRhcHRlcilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTU3NC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNTk0LVx0aWYgKHJzaV9jcmVhdGVfa3RocmVhZChhZGFwdGVyLVx1MDAzZXByaXYsIFx1MDAyNmRldi1cdTAwM2VyeF90aHJlYWQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo1OTU6XHRcdFx0ICAgICAgIHJzaV91c2JfcnhfdGhyZWFkLCBcJiMzNDtSWC1UaHJlYWRcJiMzNDspKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy01OTYtXHRcdHJzaV9kYmcoRVJSX1pPTkUsIFwmIzM0OyVzOiBVbmFibGUgdG8gaW5pdCByeCB0aHJkXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM9NjE3PXN0YXRpYyBpbnQgcnNpX2luaXRfdXNiX2ludGVyZmFjZShzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTY0NC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjY0NTpcdGlmIChyc2lfdXNiX2luaXRfcngoYWRhcHRlcikpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTY0Ni1cdFx0cnNpX2RiZyhFUlJfWk9ORSwgXCYjMzQ7RmFpbGVkIHRvIGluaXQgUlggaGFuZGxlXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy02NTQtXHQvKiBJbml0aWFsaXppbmcgZnVuY3Rpb24gY2FsbGJhY2tzICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo2NTU6XHRhZGFwdGVyLVx1MDAzZWNoZWNrX2h3X3F1ZXVlX3N0YXR1cyA9IHJzaV91c2JfY2hlY2tfcXVldWVfc3RhdHVzO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6NjU2Olx0YWRhcHRlci1cdTAwM2VkZXRlcm1pbmVfZXZlbnRfdGltZW91dCA9IHJzaV91c2JfZXZlbnRfdGltZW91dDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTY1Ny1cdGFkYXB0ZXItXHUwMDNlcnNpX2hvc3RfaW50ZiA9IFJTSV9IT1NUX0lOVEZfVVNCO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jPTY3Nj1zdGF0aWMgaW50IHVzYl91bHBfcmVhZF93cml0ZShzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyLCB1MTYgYWRkciwgdTMyIGRhdGEsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNjgwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6NjgxOlx0cmV0ID0gcnNpX3VzYl9tYXN0ZXJfcmVnX3dyaXRlXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy02ODItXHRcdFx0KGFkYXB0ZXIsIFJTSV9HU1BJX0RBVEFfUkVHMSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy02ODYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo2ODc6XHRyZXQgPSByc2lfdXNiX21hc3Rlcl9yZWdfd3JpdGUoYWRhcHRlciwgUlNJX0dTUElfREFUQV9SRUcwLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNjg4LVx0XHRcdFx0ICAgICAgIChkYXRhIFx1MDAyNiAweGZmZmYpLCAyKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy02OTItXHQvKiBJbml0aWFsaXppbmcgR1NQSSBmb3IgVUxQIHJlYWQvd3JpdGVzICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo2OTM6XHRyc2lfdXNiX21hc3Rlcl9yZWdfd3JpdGUoYWRhcHRlciwgUlNJX0dTUElfQ1RSTF9SRUcwLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNjk0LVx0XHRcdFx0IFJTSV9HU1BJX0NUUkxfUkVHMF9WQUxVRSwgMik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy02OTUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo2OTY6XHRyZXQgPSByc2lfdXNiX21hc3Rlcl9yZWdfd3JpdGUoYWRhcHRlciwgUlNJX0dTUElfQ1RSTF9SRUcxLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNjk3LVx0XHRcdFx0ICAgICAgICgobGVuX2luX2JpdHMgLSAxKSB8IFJTSV9HU1BJX1RSSUcpLCAyKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYz03MDY9c3RhdGljIGludCByc2lfcmVzZXRfY2FyZChzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTcxMC1cdHJzaV9kYmcoSU5GT19aT05FLCBcJiMzNDtSZXNldHRpbmcgQ2FyZC4uLlxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo3MTE6XHRyc2lfdXNiX21hc3Rlcl9yZWdfd3JpdGUoYWRhcHRlciwgUlNJX1RBX0hPTERfUkVHLCAweEUsIDQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNzEyLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTcxNy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjcxODpcdHJldCA9IHJzaV91c2JfbWFzdGVyX3JlZ193cml0ZShhZGFwdGVyLCBTV0JMX1JFR09VVCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTcxOS1cdFx0XHRcdCAgICAgICBSU0lfRldfV0RUX0RJU0FCTEVfUkVRLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTc0Ny1cdH0gZWxzZSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo3NDg6XHRcdHJldCA9IHJzaV91c2JfbWFzdGVyX3JlZ193cml0ZShhZGFwdGVyLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNzQ5LVx0XHRcdFx0XHQgICAgICAgTldQX1dXRF9JTlRFUlJVUFRfVElNRVIsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNzUzLVx0XHRcdGdvdG8gZmFpbDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjc1NDpcdFx0cmV0ID0gcnNpX3VzYl9tYXN0ZXJfcmVnX3dyaXRlKGFkYXB0ZXIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy03NTUtXHRcdFx0XHRcdCAgICAgICBOV1BfV1dEX1NZU1RFTV9SRVNFVF9USU1FUixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy03NTktXHRcdFx0Z290byBmYWlsO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6NzYwOlx0XHRyZXQgPSByc2lfdXNiX21hc3Rlcl9yZWdfd3JpdGUoYWRhcHRlcixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTc2MS1cdFx0XHRcdFx0ICAgICAgIE5XUF9XV0RfTU9ERV9BTkRfUlNUQVJULFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTc3Ni0vKipcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjc3NzogKiByc2lfcHJvYmUoKSAtIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGtlcm5lbCB3aGVuIHRoZSBkcml2ZXIgcHJvdmlkZWRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTc3OC0gKlx0XHQgVmVuZG9yIGFuZCBkZXZpY2UgSURzIGFyZSBtYXRjaGVkLiBBbGwgdGhlIGluaXRpYWxpemF0aW9uXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNzg0LSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6Nzg1OnN0YXRpYyBpbnQgcnNpX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICpwZnVuY3Rpb24sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy03ODYtXHRcdCAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTgyNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjgyNzpcdHN0YXR1cyA9IHJzaV91c2JfcmVnX3JlYWQoZGV2LVx1MDAzZXVzYmRldiwgRldfU1RBVFVTX1JFRywgXHUwMDI2Zndfc3RhdHVzLCAyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTgyOC1cdGlmIChzdGF0dXMgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM9OTIxPXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciByc2lfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtOTIyLVx0Lm5hbWUgICAgICAgPSBcJiMzNDtSU0ktVVNCIFdMQU5cJiMzNDssXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo5MjM6XHQucHJvYmUgICAgICA9IHJzaV9wcm9iZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTkyNC1cdC5kaXNjb25uZWN0ID0gcnNpX2Rpc2Nvbm5lY3QsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiX29wcy5jLTE4LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2Zpcm13YXJlLmhcdTAwM2VcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYl9vcHMuYzoxOTojaW5jbHVkZSBcJiMzNDtyc2lfdXNiLmhcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYl9vcHMuYy0yMC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYl9vcHMuYy0yMS0vKipcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYl9vcHMuYzoyMjogKiByc2lfdXNiX3J4X3RocmVhZCgpIC0gVGhpcyBpcyBhIGtlcm5lbCB0aHJlYWQgdG8gcmVjZWl2ZSB0aGUgcGFja2V0cyBmcm9tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2Jfb3BzLmMtMjMtICpcdFx0XHQgdGhlIFVTQiBkZXZpY2UuXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiX29wcy5jLTI3LSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiX29wcy5jOjI4OnZvaWQgcnNpX3VzYl9yeF90aHJlYWQoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYl9vcHMuYy0yOS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV91c2IuaD01Nj1zdHJ1Y3QgcnNpXzkxeF91c2JkZXYge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfdXNiLmgtNzItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX3VzYi5oOjczOnN0YXRpYyBpbmxpbmUgaW50IHJzaV91c2JfY2hlY2tfcXVldWVfc3RhdHVzKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIsIHU4IHFfbnVtKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV91c2IuaC03NC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV91c2IuaC03OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfdXNiLmg6Nzk6c3RhdGljIGlubGluZSBpbnQgcnNpX3VzYl9ldmVudF90aW1lb3V0KHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX3VzYi5oLTgwLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX3VzYi5oLTgzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV91c2IuaDo4NDp2b2lkIHJzaV91c2JfcnhfdGhyZWFkKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV91c2IuaC04NS0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwNzQKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGl2aW5nIGludG8gdGhlIFJTSSBXaS1GaSBEcml2ZXIgS2V5IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGtleSBjb25maWd1cmF0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSBSU0kgV2ktRmkgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIDkxeCB2YXJpYW50LiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgcnNpX2hhbF9rZXlfY29uZmlnYCB3aXRoaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmNgLiBNeSBpbml0aWFsIHF1ZXN0aW9uIGlzIGhvdyB0aGlzIGtleSBjb25maWd1cmF0aW9uIGlzIGFjdHVhbGx5IHRyaWdnZXJlZC4gSSYjMzk7bSBiZXR0aW5nIGl0JiMzOTtzIGEgYG1hYzgwMjExYCBjYWxsYmFjay4gWWVzLCB0aGF0IG1ha2VzIHNlbnNlLiBJdCYjMzk7cyBsaWtlbHkgZ29pbmcgdG8gYmUgaGFuZGxlZCBieSB0aGUgYHNldF9rZXlgIGhhbmRsZXIgd2l0aGluIGByc2lfbWFjODAyMTFfb3BzYC4gTm93LCB0byBjb25maXJtIG15IGFzc3VtcHRpb25zIGFuZCBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGNhbGwgY2hhaW4sIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBncmVwIHRocm91Z2ggdGhlIGNvZGUgZm9yIGluc3RhbmNlcyBvZiBib3RoIGByc2lfaGFsX2tleV9jb25maWdgIGFuZCBgcnNpX21hYzgwMjExX29wc2AuIFRoYXQgc2hvdWxkIHF1aWNrbHkgaGlnaGxpZ2h0IHRoZSBjb25uZWN0aW9uIHBvaW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnNpX2hhbF9rZXlfY29uZmlnfHJzaV9tYWM4MDIxMV9vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYz05MTY9c3RhdGljIGludCByc2lfbWFjODAyMTFfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTk2Ny0vKipcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6OTY4OiAqIHJzaV9oYWxfa2V5X2NvbmZpZygpIC0gVGhpcyBmdW5jdGlvbiBsb2FkcyB0aGUga2V5cyBpbnRvIHRoZSBmaXJtd2FyZS5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtOTY5LSAqIEBodzogUG9pbnRlciB0byB0aGUgaWVlZTgwMjExX2h3IHN0cnVjdHVyZS5cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTk3NS0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6OTc2OnN0YXRpYyBpbnQgcnNpX2hhbF9rZXlfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy05NzctXHRcdFx0ICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jPTEwNTA9c3RhdGljIGludCByc2lfbWFjODAyMTFfc2V0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTEwNjMtXHRjYXNlIFNFVF9LRVk6XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjEwNjQ6XHRcdHN0YXR1cyA9IHJzaV9oYWxfa2V5X2NvbmZpZyhodywgdmlmLCBrZXksIHN0YSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTEwNjUtXHRcdGlmIChzdGF0dXMpIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTEwODMtXHRcdG1lbXNldChrZXksIDAsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mKSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjEwODQ6XHRcdHN0YXR1cyA9IHJzaV9oYWxfa2V5X2NvbmZpZyhodywgdmlmLCBrZXksIHN0YSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTEwODUtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDA2OAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gUlNJIEtleSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgUlNJIGRyaXZlciBpcyBtYW5hZ2luZyBpdHMga2V5cyB3aXRoaW4gdGhlIDgwMi4xMSBmcmFtZXdvcmsuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHR3byBrZXkgZnVuY3Rpb25zOiBgcnNpX21hYzgwMjExX3NldF9rZXlgIGFuZCwgbW9yZSBicm9hZGx5LCB0aGUgYHJzaV9tYWM4MDIxMV9vcHNgIHN0cnVjdHVyZS4gYHJzaV9tYWM4MDIxMV9zZXRfa2V5YCBpcyB0aGUgbGlrZWx5IHBvaW50IG9mIGludGVyYWN0aW9uIGZvciBzZXR0aW5nIG9yIHVwZGF0aW5nIHRob3NlIGtleXM7IGl0JiMzOTtsbCB0ZWxsIG1lIGhvdyB0aGV5IGFyZSBpbXBsZW1lbnRlZC4gRGlnZ2luZyBpbnRvIHRoZSBvcHMgc3RydWN0dXJlLCB0aGF0JiMzOTtzIHdoZXJlIEkgY2FuIGZpbmQgb3RoZXIgZnVuY3Rpb25zIHdoaWNoIGNvdWxkIGJlIHJlbGF0ZWQgdG8ga2V5IGhhbmRsaW5nLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiBob3cgdGhlIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgbWFjODAyMTEgY29yZSBmb3IgdGhpcyBjcml0aWNhbCBzZWN1cml0eSBmdW5jdGlvbi4gSSBleHBlY3QgdG8gc2VlIHRoZSB0eXBpY2FsIGFsbG9jYXRpb24sIHNldHVwLCBhbmQgaW5zZXJ0aW9uIG9mIHRoZSBrZXkgbWF0ZXJpYWwsIGxpa2VseSBpbnZvbHZpbmcgc29tZSBoYXJkd2FyZS1zcGVjaWZpYyBpbnRlcmFjdGlvbiB0aHJvdWdoIHRoZSBkcml2ZXImIzM5O3Mgb3duIG1lY2hhbmlzbXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgaGFyZHdhcmUgb2ZmbG9hZHMgdGhlIGVuY3J5cHRpb24vZGVjcnlwdGlvbiwgaWYgYXQgYWxsLCBhbmQgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBrZXkgZGVyaXZhdGlvbiBvciByb3RhdGlvbi4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBwcm9iYWJseSBmaW5kIHRoZSBrZXkgdG8gZXZlcnl0aGluZyBlbHNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyc2lfbWFjODAyMTFfc2V0X2tleSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jPTk3Nj1zdGF0aWMgaW50IHJzaV9oYWxfa2V5X2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTEwNDAtLyoqXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjEwNDE6ICogcnNpX21hYzgwMjExX3NldF9rZXkoKSAtIFRoaXMgZnVuY3Rpb24gc2V0cyB0eXBlIG9mIGtleSB0byBiZSBsb2FkZWQuXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTEwNDItICogQGh3OiBQb2ludGVyIHRvIHRoZSBpZWVlODAyMTFfaHcgc3RydWN0dXJlLlxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTA0OS0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTA1MDpzdGF0aWMgaW50IHJzaV9tYWM4MDIxMV9zZXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xMDUxLVx0XHRcdFx0ZW51bSBzZXRfa2V5X2NtZCBjbWQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYz0xOTgyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyBtYWM4MDIxMV9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xOTk2LVx0LmNvbmZpZ3VyZV9maWx0ZXIgPSByc2lfbWFjODAyMTFfY29uZl9maWx0ZXIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjE5OTc6XHQuc2V0X2tleSA9IHJzaV9tYWM4MDIxMV9zZXRfa2V5LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xOTk4LVx0LnNldF9ydHNfdGhyZXNob2xkID0gcnNpX21hYzgwMjExX3NldF9ydHNfdGhyZXNob2xkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDkzOAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJTSSBVU0IgRGV2aWNlIERyaXZlciBLZXkgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBSU0kgVVNCIGRldmljZSBkcml2ZXIuIEl0IHNlZW1zIGxpa2Ugd2hlbiBhIFVTQiBkZXZpY2UgaXMgcHJvYmVkIHVzaW5nIHN5emthbGxlciYjMzk7cyBgdXNiIHJhdyBnYWRnZXRgIChsaWtlIGByc2lfcHJvYmVgKSwgYHJzaV85MXhgIGdldHMgcmVnaXN0ZXJlZCB3aXRoIG1hYzgwMjExLiBNeSBpbW1lZGlhdGUgaW50ZXJlc3QgaXMgaW4gaG93IGVuY3J5cHRpb24ga2V5cyBhcmUgbWFuYWdlZCwgcGFydGljdWxhcmx5IGJlY2F1c2Ugb2YgdGhhdCBwYXRjaC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRyeWluZyB0byB0cmFjZSB0aGUgcGF0aCBmcm9tIHVzZXJzcGFjZSBjb21tYW5kcyB0byB0aGUga2V5IGxvYWRpbmcgZnVuY3Rpb24uCgpGcm9tIHdoYXQgSSBjYW4gdGVsbCwgdXNlcnNwYWNlIHVzZXMgbmw4MDIxMSB0byBpc3N1ZSBgbmV3X2tleWAgb3IgYHNldF9rZXlgIGNvbW1hbmRzLiBUaGVzZSB1bHRpbWF0ZWx5IGVuZCB1cCBjYWxsaW5nIGByc2lfbWFjODAyMTFfc2V0X2tleWAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYHJzaV9oYWxfa2V5X2NvbmZpZ2AsIGFuZCB0aGF0JiMzOTtzIHRoZSBvbmUgdGhhdCBjYWxscyBgcnNpX2hhbF9sb2FkX2tleWAuIE9rYXksIHNvIGByc2lfaGFsX2xvYWRfa2V5YCBpcyB0aGUgY3J1Y2lhbCBmdW5jdGlvbiwgYW5kIEkgbmVlZCB0byB2ZXJpZnkgaXRzIHZpc2liaWxpdHkuCgpMZXQmIzM5O3MgY2hlY2sgdGhlIGRlY2xhcmF0aW9uIGluIGByc2lfbWdtdC5oYC4gQWgsIHllcywgaXQmIzM5O3M6IGBpbnQgcnNpX2hhbF9sb2FkX2tleShzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCB1OCAqZGF0YSwgdTE2IGtleV9sZW4sIHU4IGtleV90eXBlLCB1OCBrZXlfaWQsIHUzMiBjaXBoZXIsIHMxNiBzdGFfaWQsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpO2AgVGhlIGZ1bmN0aW9uIGlzICpub3QqIHN0YXRpYywgc28gaXQgKmlzKiBleHBvc2VkIHdpdGhpbiB0aGUgYHJzaV85MXhgIG1vZHVsZS4gR29vZCwgdGhhdCBjb25maXJtcyBpdC4KClNvLCB0aGUga2V5IGZ1bmN0aW9ucyB0byB3YXRjaCBhcmU6IGByc2lfaGFsX2xvYWRfa2V5YCwgYHJzaV9oYWxfa2V5X2NvbmZpZ2AsIGByc2lfbWFjODAyMTFfc2V0X2tleWAgYW5kIGByc2lfbWFjODAyMTFfc3RhX2FkZGAuIEkmIzM5O2xsIHdhbnQgdG8gdHJhY2UgY2FsbHMgdG8gdGhvc2UuCgpCdXQgaG9sZCBvbiwgYHJzaV9oYWxfbG9hZF9rZXlgIGlzIHRoZSBzcGVjaWZpYyBmdW5jdGlvbiB0aGF0IHRoZSBwYXRjaCBtb2RpZmllcywgd2hpY2ggbWFrZXMgaXQgY2VudHJhbCB0byB0aGUgcHJvYmxlbS4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIEtjb25maWcgcmVxdWlyZW1lbnRzLiBgUlNJXzkxWGAgcmVxdWlyZXMgYE1BQzgwMjExYCBhbmQgYFdMQU5fVkVORE9SX1JTSWAuIGBSU0lfVVNCYCBkZXBlbmRzIG9uIGBVU0IgJmFtcDsmYW1wOyBSU0lfOTFYYC4gSSYjMzk7bGwgd2FudCB0byBjaGVjayBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWdgLgoKYGBgCmNvbmZpZyBXTEFOX1ZFTkRPUl9SU0kKCWJvb2wgJiMzNDtSZWRwaW5lIFNpZ25hbHMgSW5jIGRldmljZXMmIzM0OwoJZGVmYXVsdCB5CgppZiBXTEFOX1ZFTkRPUl9SU0kKCmNvbmZpZyBSU0lfOTFYCgl0cmlzdGF0ZSAmIzM0O1JlZHBpbmUgU2lnbmFscyBJbmMgOTF4IFdMQU4gZHJpdmVyIHN1cHBvcnQmIzM0OwoJc2VsZWN0IEJUX0hDSVJTSSBpZiBSU0lfQ09FWAoJZGVwZW5kcyBvbiBNQUM4MDIxMQoKY29uZmlnIFJTSV9VU0IKCXRyaXN0YXRlICYjMzQ7UmVkcGluZSBTaWduYWxzIFVTQiBidXMgc3VwcG9ydCYjMzQ7CglkZXBlbmRzIG9uIFVTQiAmYW1wOyZhbXA7IFJTSV85MVgKYGBgCk9rYXksIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBkZXBlbmRlbmN5IG9mIGBXTEFOX1ZFTkRPUl9SU0lgLCBzbyBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBtYWluIGBkcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnYCBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtXTEFOX1ZFTkRPUl9SU0kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZT0xOD1vYmotJChDT05GSUdfV0xBTl9WRU5ET1JfUkVBTFRFSykgJiM0Mzs9IHJlYWx0ZWsvXG5kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZToxOTpvYmotJChDT05GSUdfV0xBTl9WRU5ET1JfUlNJKSAmIzQzOz0gcnNpL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvTWFrZWZpbGUtMjAtb2JqLSQoQ09ORklHX1dMQU5fVkVORE9SX1NJTEFCUykgJiM0Mzs9IHNpbGFicy9cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWc6Mjpjb25maWcgV0xBTl9WRU5ET1JfUlNJXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtSZWRwaW5lIFNpZ25hbHMgSW5jIGRldmljZXNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZy0xMi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnOjEzOmlmIFdMQU5fVkVORE9SX1JTSVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWctMTQtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWc9NDc9Y29uZmlnIFJTSV9DT0VYXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWctNTYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZzo1NzplbmRpZiAjIFdMQU5fVkVORE9SX1JTSVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQ2OQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgaXNzdWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIFJTSS9LY29uZmlnIFNvdXJjZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGUgUlNJIHdpcmVsZXNzIGRyaXZlci4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIHRoZSB0eXBpY2FsIGtlcm5lbCBidWlsZCBzdHJ1Y3R1cmUsIGlzIHRvIGhlYWQgZGlyZWN0bHkgdG8gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzc2AgZGlyZWN0b3J5LiBXaXRoaW4gdGhhdCwgSSYjMzk7bSBwcmV0dHkgY2VydGFpbiB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGUgUlNJIGRyaXZlciB3aWxsIGJlIGxvY2F0ZWQgdGhlcmUuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGVzZSB0aGluZ3MgbGl2ZS4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGNoZWNraW5nIGBkcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnYCBhbmQgc2VlIGlmIHRoZSBpbmNsdWRlcyBwb2ludCB0byBpdC4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnNpL0tjb25maWcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnPTMyPXNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWc6MzM6c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnLTM0LXNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjc1NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqS2NvbmZpZyBEaXZlKioKCk9rYXksIHRpbWUgdG8gZGlnIGluLiBUaGUgcHJvYmxlbSBsaWtlbHkgbGllcyB3aXRoaW4gdGhlIHdpcmVsZXNzIG5ldHdvcmsgY29uZmlndXJhdGlvbiwgc28gSSYjMzk7bSBmb2N1c2luZyBteSBhdHRlbnRpb24gb24gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWdgLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24gYXJvdW5kIGxpbmUgMzMgb2YgdGhhdCBmaWxlLiBUaGF0JiMzOTtzIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludCBnaXZlbiB0aGUgY29udGV4dCwgYW5kIEkmIzM5O20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1pZ2h0IGJlIGNvbnRyaWJ1dGluZyB0byB0aGUgaXNzdWUuIExpbmUgMzMgc2hvdWxkIGdpdmUgYSBzdGFydGluZyBwb2ludCB0byB0aGUgcmVsZXZhbnQga2NvbmZpZyBmbGFncywgYW5kIHdpbGwgZ3VpZGUgdGhlIG5leHQgbGV2ZWwgb2YgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgV2lyZWxlc3MgTEFOIGRldmljZSBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG1lbnVjb25maWcgV0xBTlxuICAgNzpcdFx0Ym9vbCBcJiMzNDtXaXJlbGVzcyBMQU5cJiMzNDtcbiAgIDg6XHRcdGRlcGVuZHMgb24gIVMzOTBcbiAgIDk6XHRcdGRlcGVuZHMgb24gTkVUXG4gIDEwOlx0XHRzZWxlY3QgV0lSRUxFU1NcbiAgMTE6XHRcdGRlZmF1bHQgeVxuICAxMjpcdFx0aGVscFxuICAxMzpcdFx0ICBUaGlzIHNlY3Rpb24gY29udGFpbnMgYWxsIHRoZSBwcmUgODAyLjExIGFuZCA4MDIuMTEgd2lyZWxlc3NcbiAgMTQ6XHRcdCAgZGV2aWNlIGRyaXZlcnMuIEZvciBhIGNvbXBsZXRlIGxpc3Qgb2YgZHJpdmVycyBhbmQgZG9jdW1lbnRhdGlvblxuICAxNTpcdFx0ICBvbiB0aGVtIHJlZmVyIHRvIHRoZSB3aXJlbGVzcyB3aWtpOlxuICAxNjpcdFxuICAxNzpcdFx0ICBodHRwczovL3dpcmVsZXNzLndpa2kua2VybmVsLm9yZy9lbi91c2Vycy9Ecml2ZXJzXG4gIDE4Olx0XG4gIDE5Olx0aWYgV0xBTlxuICAyMDpcdFxuICAyMTpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hZG10ZWsvS2NvbmZpZ1wmIzM0O1xuICAyMjpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvS2NvbmZpZ1wmIzM0O1xuICAyMzpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC9LY29uZmlnXCYjMzQ7XG4gIDI0Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL0tjb25maWdcJiMzNDtcbiAgMjU6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvS2NvbmZpZ1wmIzM0O1xuICAyNjpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9LY29uZmlnXCYjMzQ7XG4gIDI3Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvS2NvbmZpZ1wmIzM0O1xuICAyODpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9LY29uZmlnXCYjMzQ7XG4gIDI5Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21pY3JvY2hpcC9LY29uZmlnXCYjMzQ7XG4gIDMwOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL0tjb25maWdcJiMzNDtcbiAgMzE6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcmFsaW5rL0tjb25maWdcJiMzNDtcbiAgMzI6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9LY29uZmlnXCYjMzQ7XG4gIDMzOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnXCYjMzQ7XG4gIDM0Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy9LY29uZmlnXCYjMzQ7XG4gIDM1Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3N0L0tjb25maWdcJiMzNDtcbiAgMzY6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvS2NvbmZpZ1wmIzM0O1xuICAzNzpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy96eWRhcy9LY29uZmlnXCYjMzQ7XG4gIDM4Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3F1YW50ZW5uYS9LY29uZmlnXCYjMzQ7XG4gIDM5Olx0XG4gIDQwOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzU1MwoJCQkJCQkJb3V0cHV0OiAxOTMKCQkJCQkJCXRob3VnaHRzOiAzNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFdMQU4gUGF0Y2gqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhlIGVzc2VudGlhbCBvbmVzIGFyZSBwcmVzZW50OiBgV0xBTmAsIGBXTEFOX1ZFTkRPUl9SU0lgLCBgUlNJXzkxWGAsIGBSU0lfVVNCYCwgYE1BQzgwMjExYCwgYW5kIGBVU0JgLiBHb3QgaXQsIG5vdyB0byBkb3VibGUtY2hlY2sgZXZlcnl0aGluZy4KClRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJIHNlZSB0aGUgZGVwZW5kZW5jaWVzIGFyZSBjb3JyZWN0bHkgZGVmaW5lZCB3aXRoIGBXb3J0aEZ1enppbmc6IHRydWVgIGFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFycmF5IGNvdmVycyBhbGwgdGhlIHJlcXVpcmVkIG9wdGlvbnM6IGBXTEFOYCwgYFdMQU5fVkVORE9SX1JTSWAsIGBSU0lfOTFYYCwgYFJTSV9VU0JgLCBgTUFDODAyMTFgLCBhbmQgYFVTQmAuIFRoZSBmb2N1cyBpcyBjbGVhciB0b28sIGl0JiMzOTtzIHRob3NlIGNyaXRpY2FsIGZ1bmN0aW9ucyBgcnNpX2hhbF9sb2FkX2tleWAgYW5kIGByc2lfbWFjODAyMTFfc2V0X2tleWAuCgpUaGUgcmVhc29uaW5nIG1ha2VzIHNlbnNlOyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGFuIG91dC1vZi1ib3VuZHMgbWVtb3J5IHJlYWQgaW4gYHJzaV9oYWxfbG9hZF9rZXlgIGR1cmluZyBNSUMga2V5IGNvcHlpbmcsIGFuZCB0aGUgcGF0Y2ggYWRkcmVzc2VzIHRoaXMgYnkgYWRkaW5nIGEgY2hlY2sgZm9yIHRoZSBgV0xBTl9DSVBIRVJfU1VJVEVfVEtJUGAgY2lwaGVyIHN1aXRlLiBUaGlzIGltcGFjdHMgdGhlIFJlZHBpbmUgU2lnbmFscyA5MXggV0xBTiBkcml2ZXIsIHNwZWNpZmljYWxseSByZWFjaGFibGUgdGhyb3VnaCBgbWFjODAyMTFgIGtleSBjb25maWd1cmF0aW9uIG9wZXJhdGlvbnMsIGxpa2VseSBvbiBlbXVsYXRlZCBVU0IgZGV2aWNlcy4gQ2xhc3NpYy4KCkJlZm9yZSBJIHB1c2ggdGhlIHJlc3VsdHMsIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBvbmUgbGFzdCB0aW1lOiBgcnNpX2hhbF9sb2FkX2tleWAgYW5kIGByc2lfbWFjODAyMTFfc2V0X2tleWAgYXJlIHN0aWxsIHRoZSBjcml0aWNhbCBmb2N1cyBzeW1ib2xzLCBhbmQgdGhlIGNvbmZpZ3VyYXRpb25zIGFyZSB0aGUgc2FtZTogYFdMQU5fVkVORE9SX1JTSWAsIGBSU0lfOTFYYCwgYFJTSV9VU0JgLCBgTUFDODAyMTFgLCBhbmQgYFVTQmAuIEFscmlnaHQsIGxvb2tzIGdvb2QuIFRpbWUgdG8gaW52b2tlIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtXTEFOJiMzNDssCiAgICAmIzM0O1dMQU5fVkVORE9SX1JTSSYjMzQ7LAogICAgJiMzNDtSU0lfOTFYJiMzNDssCiAgICAmIzM0O1JTSV9VU0ImIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7VVNCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnNpX2hhbF9sb2FkX2tleSYjMzQ7LAogICAgJiMzNDtyc2lfbWFjODAyMTFfc2V0X2tleSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIG1lbW9yeSByZWFkIGJ1ZyBpbiByc2lfaGFsX2xvYWRfa2V5IGJ5IHJlc3RyaWN0aW5nIGNvcHlpbmcgb2YgdGhlIFRYIGFuZCBSWCBNSUMga2V5cyBmcm9tIHRoZSBkYXRhIGJ1ZmZlciB0byBvbmx5IHdoZW4gdGhlIGNpcGhlciBzdWl0ZSBpcyBXTEFOX0NJUEhFUl9TVUlURV9US0lQIChwcmV2ZW50aW5nIE9PQiByZWFkcyBmb3Iga2V5IGxlbmd0aHMgc2hvcnRlciB0aGFuIDMyIGJ5dGVzIGxpa2UgQUVTL0NDTVApLiBUaGlzIGRyaXZlciBsb2dpYyBpcyByZWFjaGFibGUgdmlhIG1hYzgwMjExIHNldF9rZXkgY2FsbGJhY2tzIHdpdGggZW11bGF0ZWQgVVNCIGRldmljZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1dMQU4mIzM0OywKICAgICYjMzQ7V0xBTl9WRU5ET1JfUlNJJiMzNDssCiAgICAmIzM0O1JTSV85MVgmIzM0OywKICAgICYjMzQ7UlNJX1VTQiYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyc2lfaGFsX2xvYWRfa2V5JiMzNDssCiAgICAmIzM0O3JzaV9tYWM4MDIxMV9zZXRfa2V5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgbWVtb3J5IHJlYWQgYnVnIGluIHJzaV9oYWxfbG9hZF9rZXkgYnkgcmVzdHJpY3RpbmcgY29weWluZyBvZiB0aGUgVFggYW5kIFJYIE1JQyBrZXlzIGZyb20gdGhlIGRhdGEgYnVmZmVyIHRvIG9ubHkgd2hlbiB0aGUgY2lwaGVyIHN1aXRlIGlzIFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVAgKHByZXZlbnRpbmcgT09CIHJlYWRzIGZvciBrZXkgbGVuZ3RocyBzaG9ydGVyIHRoYW4gMzIgYnl0ZXMgbGlrZSBBRVMvQ0NNUCkuIFRoaXMgZHJpdmVyIGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgbWFjODAyMTEgc2V0X2tleSBjYWxsYmFja3Mgd2l0aCBlbXVsYXRlZCBVU0IgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6NDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDo0NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBidWcgaW4gcnNpX2hhbF9sb2FkX2tleSgpIHdoZXJlIDgtYnl0ZSBUWCBhbmQgUlggTUlDIGtleXMgd2VyZSB1bmNvbmRpdGlvbmFsbHkgcmVhZCBmcm9tIFx1MDAyNmRhdGFbMTZdIGFuZCBcdTAwMjZkYXRhWzI0XSwgZXZlbiB3aGVuIHRoZSBjaXBoZXIgc3VpdGUgd2FzIG5vdCBUS0lQIChzdWNoIGFzIENDTVAvQUVTIHdoZXJlIHRoZSBrZXkgYnVmZmVyIGlzIG9ubHkgMTYgYnl0ZXMgbG9uZykuXG5cbjEuIEtBU0FOIGFwcGxpY2FiaWxpdHk6IE91dC1vZi1ib3VuZHMgcmVhZHMgb24gaGVhcCBvciBzdGFjayBidWZmZXJzIChzdWNoIGFzIGFjY2Vzc2luZyBwYXN0IHRoZSAxNi1ieXRlIGtleSBidWZmZXIpIGFyZSBkaXJlY3RseSBkZXRlY3RhYmxlIGJ5IEtBU0FOLlxuMi4gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIGZyYW1lIGJ1ZmZlciBpbiB0aGUgc2tiIGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgdXBmcm9udCB2aWEgYG1lbXNldChza2ItXHUwMDNlZGF0YSwgMCwgZnJhbWVfbGVuKWAuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy5cblxuU2luY2UgdGhlIGlzc3VlIGlzIHN0cmljdGx5IGFuIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcyBjYXVnaHQgYnkgS0FTQU4gYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDM5ZDIyZjVlZDZlYjE1YTA0NTMyMzlmNGJhMDI0NmFmMWM4NTlhYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDIwOjM5OjM5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jCmluZGV4IDdmMmMxNjA4ZjJjZTMuLjJkZGY0ZDE1OGJmZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tZ210LmMKQEAgLTg0OCw4ICYjNDM7ODQ4LDEwIEBAIGludCByc2lfaGFsX2xvYWRfa2V5KHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sCiAJCX0gZWxzZSB7CiAJCQltZW1jcHkoJmFtcDtzZXRfa2V5LSZndDtrZXlbMF1bMF0sIGRhdGEsIGtleV9sZW4pOwogCQl9Ci0JCW1lbWNweShzZXRfa2V5LSZndDt0eF9taWNfa2V5LCAmYW1wO2RhdGFbMTZdLCA4KTsKLQkJbWVtY3B5KHNldF9rZXktJmd0O3J4X21pY19rZXksICZhbXA7ZGF0YVsyNF0sIDgpOwomIzQzOwkJaWYgKGNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9US0lQKSB7CiYjNDM7CQkJbWVtY3B5KHNldF9rZXktJmd0O3R4X21pY19rZXksICZhbXA7ZGF0YVsxNl0sIDgpOwomIzQzOwkJCW1lbWNweShzZXRfa2V5LSZndDtyeF9taWNfa2V5LCAmYW1wO2RhdGFbMjRdLCA4KTsKJiM0MzsJCX0KIAl9IGVsc2UgewogCQltZW1zZXQoJmFtcDtzZXRfa2V5W0ZSQU1FX0RFU0NfU1pdLCAwLCBmcmFtZV9sZW4gLSBGUkFNRV9ERVNDX1NaKTsKIAl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjA1CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4KCioqRXhhbWluaW5nIHRoZSBLZXkgTG9hZGluZyBGdW5jdGlvbiBpbiB0aGUgUlNJIERyaXZlcioqCgpBbHJpZ2h0LCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgcnNpXzkxeF9tZ210LmNgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgYXJlYSBhcm91bmQgdGhlIGByc2lfaGFsX2xvYWRfa2V5YCBmdW5jdGlvbiB3aXRoaW4gdGhlIHdpcmVsZXNzIG5ldHdvcmtpbmcgZHJpdmVyLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBrZXkgbG9hZGluZyBwcm9jZXNzIHdvcmtzLCBhbmQgdGhlIGRldGFpbHMgc3Vycm91bmRpbmcgaXQuIEkmIzM5O20gZ29pbmcgdG8gdXNlIGByZWFkLWZpbGVgIHRvIGdldCB0aGUgc291cmNlIGNvZGUgb2YgYHJzaV9oYWxfbG9hZF9rZXlgLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MjA6XHRcdFx0a2V5X2Rlc2NyaXB0b3IgPSBSU0lfS0VZX1RZUEVfQlJPQURDQVNUO1xuIDgyMTpcdFx0XHRpZiAodmlmLVx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApXG4gODIyOlx0XHRcdFx0a2V5X2Rlc2NyaXB0b3IgfD0gUlNJX0tFWV9NT0RFX0FQO1xuIDgyMzpcdFx0fVxuIDgyNDpcdFx0aWYgKChjaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDApIHx8XG4gODI1Olx0XHQgICAgKGNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQpKSB7XG4gODI2Olx0XHRcdGtleV9pZCA9IDA7XG4gODI3Olx0XHRcdGtleV9kZXNjcmlwdG9yIHw9IFJTSV9XRVBfS0VZO1xuIDgyODpcdFx0XHRpZiAoa2V5X2xlbiBcdTAwM2U9IDEzKVxuIDgyOTpcdFx0XHRcdGtleV9kZXNjcmlwdG9yIHw9IFJTSV9XRVBfS0VZXzEwNDtcbiA4MzA6XHRcdH0gZWxzZSBpZiAoY2lwaGVyICE9IEtFWV9UWVBFX0NMRUFSKSB7XG4gODMxOlx0XHRcdGtleV9kZXNjcmlwdG9yIHw9IFJTSV9DSVBIRVJfV1BBO1xuIDgzMjpcdFx0XHRpZiAoY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVApXG4gODMzOlx0XHRcdFx0a2V5X2Rlc2NyaXB0b3IgfD0gUlNJX0NJUEhFUl9US0lQO1xuIDgzNDpcdFx0fVxuIDgzNTpcdFx0a2V5X2Rlc2NyaXB0b3IgfD0gUlNJX1BST1RFQ1RfREFUQV9GUkFNRVM7XG4gODM2Olx0XHRrZXlfZGVzY3JpcHRvciB8PSAoa2V5X2lkIFx1MDAzY1x1MDAzYyBSU0lfS0VZX0lEX09GRlNFVCk7XG4gODM3Olx0XG4gODM4Olx0XHRyc2lfc2V0X2xlbl9xbm8oXHUwMDI2c2V0X2tleS1cdTAwM2VkZXNjX2R3b3JkMC5sZW5fcW5vLFxuIDgzOTpcdFx0XHRcdChmcmFtZV9sZW4gLSBGUkFNRV9ERVNDX1NaKSwgUlNJX1dJRklfTUdNVF9RKTtcbiA4NDA6XHRcdHNldF9rZXktXHUwMDNlZGVzY19kd29yZDAuZnJhbWVfdHlwZSA9IFNFVF9LRVlfUkVRO1xuIDg0MTpcdFx0c2V0X2tleS1cdTAwM2VrZXlfZGVzYyA9IGNwdV90b19sZTE2KGtleV9kZXNjcmlwdG9yKTtcbiA4NDI6XHRcdHNldF9rZXktXHUwMDNlc3RhX2lkID0gc3RhX2lkO1xuIDg0MzpcdFxuIDg0NDpcdFx0aWYgKGRhdGEpIHtcbiA4NDU6XHRcdFx0aWYgKChjaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDApIHx8XG4gODQ2Olx0XHRcdCAgICAoY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNCkpIHtcbiA4NDc6XHRcdFx0XHRtZW1jcHkoXHUwMDI2c2V0X2tleS1cdTAwM2VrZXlba2V5X2lkXVsxXSwgZGF0YSwga2V5X2xlbiAqIDIpO1xuIDg0ODpcdFx0XHR9IGVsc2Uge1xuIDg0OTpcdFx0XHRcdG1lbWNweShcdTAwMjZzZXRfa2V5LVx1MDAzZWtleVswXVswXSwgZGF0YSwga2V5X2xlbik7XG4gODUwOlx0XHRcdH1cbiA4NTE6XHRcdFx0aWYgKGNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9US0lQKSB7XG4gODUyOlx0XHRcdFx0bWVtY3B5KHNldF9rZXktXHUwMDNldHhfbWljX2tleSwgXHUwMDI2ZGF0YVsxNl0sIDgpO1xuIDg1MzpcdFx0XHRcdG1lbWNweShzZXRfa2V5LVx1MDAzZXJ4X21pY19rZXksIFx1MDAyNmRhdGFbMjRdLCA4KTtcbiA4NTQ6XHRcdFx0fVxuIDg1NTpcdFx0fSBlbHNlIHtcbiA4NTY6XHRcdFx0bWVtc2V0KFx1MDAyNnNldF9rZXlbRlJBTUVfREVTQ19TWl0sIDAsIGZyYW1lX2xlbiAtIEZSQU1FX0RFU0NfU1opO1xuIDg1NzpcdFx0fVxuIDg1ODpcdFxuIDg1OTpcdFx0c2tiX3B1dChza2IsIGZyYW1lX2xlbik7XG4gODYwOlx0XG4gODYxOlx0XHRyZXR1cm4gcnNpX3NlbmRfaW50ZXJuYWxfbWdtdF9mcmFtZShjb21tb24sIHNrYik7XG4gODYyOlx0fVxuIDg2MzpcdFxuIDg2NDpcdC8qXG4gODY1Olx0ICogVGhpcyBmdW5jdGlvbiBzZW5kcyB0aGUgY29tbW9uIGRldmljZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgdG8gZGV2aWNlLlxuIDg2NjpcdCAqIFRoaXMgZnJhbWUgaW5jbHVkZXMgdGhlIHVzZWZ1bCBpbmZvcm1hdGlvbiB0byBtYWtlIGRldmljZSB3b3JrcyBvblxuIDg2NzpcdCAqIHNwZWNpZmljIG9wZXJhdGluZyBtb2RlLlxuIDg2ODpcdCAqL1xuIDg2OTpcdHN0YXRpYyBpbnQgcnNpX3NlbmRfY29tbW9uX2Rldl9wYXJhbXMoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbilcbiA4NzA6XHR7XG4gODcxOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIDg3MjpcdFx0dTE2IGZyYW1lX2xlbjtcbiA4NzM6XHRcdHN0cnVjdCByc2lfY29uZmlnX3ZhbHMgKmRldl9jZmdzO1xuIDg3NDpcdFxuIDg3NTpcdFx0ZnJhbWVfbGVuID0gc2l6ZW9mKHN0cnVjdCByc2lfY29uZmlnX3ZhbHMpO1xuIDg3NjpcdFxuIDg3NzpcdFx0cnNpX2RiZyhNR01UX1RYX1pPTkUsIFwmIzM0O1NlbmRpbmcgY29tbW9uIGRldmljZSBjb25maWcgcGFyYW1zXFxuXCYjMzQ7KTtcbiA4Nzg6XHRcdHNrYiA9IGRldl9hbGxvY19za2IoZnJhbWVfbGVuKTtcbiA4Nzk6XHRcdGlmICghc2tiKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MTMKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgZnVuY3Rpb246CgoqKkRpdmluZyBpbnRvIGByc2lfaGFsX2xvYWRfa2V5YCAtIENvbnRleHQgaXMgS2V5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgcnNpX2hhbF9sb2FkX2tleWAsIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSBkbyBpcyBtZW50YWxseSByZXdpbmQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgKnByZWNlZGluZyogdGhpcyBmdW5jdGlvbiBjYWxsLiBJIG5lZWQgdGhlIGNvbnRleHQuIFdoYXQmIzM5O3MgdGhlIGdlbmVyYWwgZmxvdyBvZiBleGVjdXRpb24gbGVhZGluZyB1cCB0byB0aGlzIHBvaW50PyBXaGF0JiMzOTtzIHRoZSBzeXN0ZW0gZG9pbmc/IFdoYXQgYXJlIHRoZSBoaWdoLWxldmVsIGdvYWxzIG9mIHRoZSBjb2RlPyBJcyB0aGlzIGEgY3JpdGljYWwgc2VjdXJpdHkgZnVuY3Rpb24sIG9yIGp1c3Qgc29tZSByb3V0aW5lIGluaXRpYWxpemF0aW9uPyBVbmRlcnN0YW5kaW5nIHRoZSBwcmVjZWRpbmcgbGluZXMgd2lsbCBpbnN0YW50bHkgaW5mb3JtIG15IG1lbnRhbCBtb2RlbCBvZiB3aGF0IGByc2lfaGFsX2xvYWRfa2V5YCAqc2hvdWxkKiBiZSBkb2luZy4gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaW5wdXRzIOKAkyB3aGF0IGRhdGEgaXMgYmVpbmcgcGFzc2VkIGluPyBLZXlzLCBjZXJ0aWZpY2F0ZXMsIHNvbWUgb3RoZXIgZm9ybSBvZiBhdXRob3JpemF0aW9uIGRhdGE/IEFuZCB0aGUgb3V0cHV0Li4uIHdoYXQmIzM5O3MgdGhlIGV4cGVjdGVkIHJlc3VsdD8gU3VjY2Vzc2Z1bCBrZXkgbG9hZCwgZXJyb3IgY29kZXM/IElzIHRoZXJlIGFueSBsb2dnaW5nIGJlaW5nIHVzZWQ/IFVuZGVyc3RhbmRpbmcgdGhlc2UgdGhpbmdzIHdvdWxkIG1ha2UgaXQgZWFzaWVyIHRvIGRlYnVnLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3ODA6XHQvKipcbiA3ODE6XHQgKiByc2lfaGFsX2xvYWRfa2V5KCkgLSBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gbG9hZCBrZXlzIHdpdGhpbiB0aGUgZmlybXdhcmUuXG4gNzgyOlx0ICogQGNvbW1vbjogUG9pbnRlciB0byB0aGUgZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlLlxuIDc4MzpcdCAqIEBkYXRhOiBQb2ludGVyIHRvIHRoZSBrZXkgZGF0YS5cbiA3ODQ6XHQgKiBAa2V5X2xlbjogS2V5IGxlbmd0aCB0byBiZSBsb2FkZWQuXG4gNzg1Olx0ICogQGtleV90eXBlOiBUeXBlIG9mIGtleTogR1JPVVAvUEFJUldJU0UuXG4gNzg2Olx0ICogQGtleV9pZDogS2V5IGluZGV4LlxuIDc4NzpcdCAqIEBjaXBoZXI6IFR5cGUgb2YgY2lwaGVyIHVzZWQuXG4gNzg4Olx0ICogQHN0YV9pZDogU3RhdGlvbiBpZC5cbiA3ODk6XHQgKiBAdmlmOiBQb2ludGVyIHRvIHRoZSBpZWVlODAyMTFfdmlmIHN0cnVjdHVyZS5cbiA3OTA6XHQgKlxuIDc5MTpcdCAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLlxuIDc5MjpcdCAqL1xuIDc5MzpcdGludCByc2lfaGFsX2xvYWRfa2V5KHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sXG4gNzk0Olx0XHRcdCAgICAgdTggKmRhdGEsXG4gNzk1Olx0XHRcdCAgICAgdTE2IGtleV9sZW4sXG4gNzk2Olx0XHRcdCAgICAgdTgga2V5X3R5cGUsXG4gNzk3Olx0XHRcdCAgICAgdTgga2V5X2lkLFxuIDc5ODpcdFx0XHQgICAgIHUzMiBjaXBoZXIsXG4gNzk5Olx0XHRcdCAgICAgczE2IHN0YV9pZCxcbiA4MDA6XHRcdFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKVxuIDgwMTpcdHtcbiA4MDI6XHRcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xuIDgwMzpcdFx0c3RydWN0IHJzaV9zZXRfa2V5ICpzZXRfa2V5O1xuIDgwNDpcdFx0dTE2IGtleV9kZXNjcmlwdG9yID0gMDtcbiA4MDU6XHRcdHUxNiBmcmFtZV9sZW4gPSBzaXplb2Yoc3RydWN0IHJzaV9zZXRfa2V5KTtcbiA4MDY6XHRcbiA4MDc6XHRcdHJzaV9kYmcoTUdNVF9UWF9aT05FLCBcJiMzNDslczogU2VuZGluZyBsb2FkIGtleSBmcmFtZVxcblwmIzM0OywgX19mdW5jX18pO1xuIDgwODpcdFxuIDgwOTpcdFx0c2tiID0gZGV2X2FsbG9jX3NrYihmcmFtZV9sZW4pO1xuIDgxMDpcdFx0aWYgKCFza2IpIHtcbiA4MTE6XHRcdFx0cnNpX2RiZyhFUlJfWk9ORSwgXCYjMzQ7JXM6IEZhaWxlZCBpbiBhbGxvY2F0aW9uIG9mIHNrYlxcblwmIzM0OyxcbiA4MTI6XHRcdFx0XHRfX2Z1bmNfXyk7XG4gODEzOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDgxNDpcdFx0fVxuIDgxNTpcdFxuIDgxNjpcdFx0bWVtc2V0KHNrYi1cdTAwM2VkYXRhLCAwLCBmcmFtZV9sZW4pO1xuIDgxNzpcdFx0c2V0X2tleSA9IChzdHJ1Y3QgcnNpX3NldF9rZXkgKilza2ItXHUwMDNlZGF0YTtcbiA4MTg6XHRcbiA4MTk6XHRcdGlmIChrZXlfdHlwZSA9PSBSU0lfR1JPVVBfS0VZKSB7XG4gODIwOlx0XHRcdGtleV9kZXNjcmlwdG9yID0gUlNJX0tFWV9UWVBFX0JST0FEQ0FTVDtcbiA4MjE6XHRcdFx0aWYgKHZpZi1cdTAwM2V0eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKVxuIDgyMjpcdFx0XHRcdGtleV9kZXNjcmlwdG9yIHw9IFJTSV9LRVlfTU9ERV9BUDtcbiA4MjM6XHRcdH1cbiA4MjQ6XHRcdGlmICgoY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwKSB8fFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTY3CgkJCQkJCQlvdXRwdXQ6IDI0MgoJCQkJCQkJdGhvdWdodHM6IDEwMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFdpcmVsZXNzIERyaXZlciBLZXkgTG9hZGluZyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgb2YgdGhpcyBwYXRjaCwgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIGByc2lfaGFsX2xvYWRfa2V5YCwgaXMgdGhhdCBpdCBhZGRyZXNzZXMgYSBjbGVhciBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eS4gSGVyZSYjMzk7cyB3aGF0IEkgc2VlOgoKVGhlIGNvZGUsIGJlZm9yZSB0aGUgcGF0Y2gsIGNvcGllcyB0aGUgdGVtcG9yYWwga2V5IGFuZCwgY3J1Y2lhbGx5LCB0aGUgTUlDIGtleXMgZnJvbSB0aGUgYGRhdGFgIGJ1ZmZlci4gVGhlIHByb2JsZW0gaXMsIHdoZW4gdGhlIGNpcGhlciBpc24mIzM5O3QgVEtJUCAodGhpbmsgQ0NNUCwgQUVTLCBldGMuKSwgdGhlIGBrZXlfbGVuYCBjYW4gYmUgYXMgc21hbGwgYXMgMTYgYnl0ZXMuIEhvd2V2ZXIsIHRoZSBjb2RlIHdvdWxkIHN0aWxsIGF0dGVtcHQgdG8gcmVhZCB0aGUgVFggYW5kIFJYIE1JQyBrZXlzIGZyb20gYCZhbXA7ZGF0YVsxNl1gIGFuZCBgJmFtcDtkYXRhWzI0XWAsIHJlc3BlY3RpdmVseS4gVGhpcyBpcyBhIGNsYXNzaWMgYnVmZmVyIG92ZXItcmVhZCwgYW5kIHNvbWV0aGluZyBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU0FOaXRpemVyKSBpcyBkZXNpZ25lZCB0byBjYXRjaCwgYW5kIGRpZCBjYXRjaC4gV2UgYXJlIHJlYWRpbmcgYmV5b25kIHRoZSBhbGxvY2F0ZWQgYm91bmRhcnkgb2YgYGRhdGFgLgoKVGhpcyBwYXRjaCBzb2x2ZXMgdGhpcyBieSAqb25seSogY29weWluZyB0aGUgTUlDIGtleXMgd2hlbiB0aGUgYGNpcGhlcmAgaXMgc3BlY2lmaWNhbGx5IGBXTEFOX0NJUEhFUl9TVUlURV9US0lQYCwgd2hlcmUgdGhlIGtleSBkYXRhIGlzIGV4cGVjdGVkIHRvIGJlIDMyIGJ5dGVzICgxNi1ieXRlIHRlbXBvcmFsIGtleSAmIzQzOyA4LWJ5dGUgVFggTUlDICYjNDM7IDgtYnl0ZSBSWCBNSUMpLiBJbiBhbGwgb3RoZXIgY2FzZXMsIGl0IGF2b2lkcyBhY2Nlc3NpbmcgdGhlc2Ugb3V0LW9mLWJvdW5kcyByZWdpb25zIG9mIGBkYXRhYC4KCk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBpcyB0aGlzIGEgS01TQU4gKEtlcm5lbCBNZW1vcnkgU0FOaXRpemVyKSBpc3N1ZT8gTm8sIGFuZCBoZXJlJiMzOTtzIHdoeS4gVGhlIGBza2ItJmd0O2RhdGFgIGJ1ZmZlciwgd2hpY2ggaXMgd2hlcmUgdGhpcyBkYXRhIGVuZHMgdXAsIGlzIGV4cGxpY2l0bHkgemVyb2VkIG91dCB3aXRoIGBtZW1zZXQoc2tiLSZndDtkYXRhLCAwLCBmcmFtZV9sZW4pYCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmdW5jdGlvbi4gVGhpcyBtZWFucyB0aGVyZSYjMzk7cyBubyBxdWVzdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkLCBsZWFrZWQsIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLiBLTVNBTiBpcyBmb3IgZGV0ZWN0aW5nIGFuZCBwcmV2ZW50aW5nIHRoZSB1c2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIGlzICpub3QqIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGhlcmUuIFRoZSBwcmV2aW91cyBjb2RlICpkaWQqIGhhdmUgYW4gb3V0LW9mLWJvdW5kcyByZWFkLCBkZXRlY3RlZCBieSBLQVNBTi4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2sgYWxsIGFzcGVjdHM6CgoxLiAgVGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZS4gSXQgc2VuZHMgYSBtYW5hZ2VtZW50IGZyYW1lIGludGVybmFsbHkgdG8gdGhlIHdpcmVsZXNzIGNhcmQgb3IgZmlybXdhcmUgdmlhIGByc2lfc2VuZF9pbnRlcm5hbF9tZ210X2ZyYW1lYC4KMi4gIEl0IGRvZXNuJiMzOTt0IHRvdWNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEuIFRoZSBgc2tiLSZndDtkYXRhYCBpcyBleHBsaWNpdGx5IHplcm9lZC4KMy4gIFRoZSBwcmV2aW91cyBidWcgd2FzIGFuIG91dC1vZi1ib3VuZHMgcmVhZC4gVGhpcyBwYXRjaCBwcmV2ZW50cyB0aGF0LiBLQVNBTiBjYXVnaHQgdGhlIGJ1ZyBpbiB0aGUgZmlyc3QgcGxhY2UsIGFuZCB0aGlzIHBhdGNoIGNvcnJlY3RseSBmaXhlcyBpdC4KNC4gIEtNU0FOIGlzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhpcyBwYXRjaCBpcyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBmaXguCgpTbywgaW4gc3VtbWFyeSwgd2UmIzM5O3JlIGZpeGluZyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eSBhbmQgaXQmIzM5O3MgYSBLQVNBTiBpc3N1ZSwgYW5kIHRoZXJlJiMzOTtzIG5vIEtNU0FOIGNvbmNlcm4uIFRoZSBrZXkgYXNwZWN0IGhlcmUgaXMgdGhlIGNsZWFyIGRpc3RpbmN0aW9uIGJldHdlZW4gYW4gb3V0LW9mLWJvdW5kcyByZWFkLCBhbmQgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZC4KCkxldCYjMzk7cyBzdW1tYXJpemUgdGhpcyBjbGVhcmx5OgoqICAgVGhlIHBhdGNoICpyZXN0cmljdHMqIHRoZSBNSUMga2V5IGNvcGllcyBvbmx5IHRvIHdoZW4gYGNpcGhlcmAgaXMgYFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVBgLiBUaGUgcHJldmlvdXMgY29kZSBkaWQgYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9uIGBkYXRhYCBmb3Igb3RoZXIgY2lwaGVycy4KKiAgIEtBU0FOIGRldGVjdHMgb3V0LW9mLWJvdW5kcyByZWFkcyB3aGljaCBpcyB0aGUgYnVnIGFuZCBpcyBmaXhlZCBoZXJlLgoqICAgVGhlIGBza2ItJmd0O2RhdGFgIGJ1ZmZlciBpcyB6ZXJvZWQsIGFuZCBub3RoaW5nIHVuaW5pdGlhbGl6ZWQgaXMgbGVha2VkLCB1c2VkIG9yIHJlYWQuCiogICBUaGVyZWZvcmUsIE5lZWRzS01TQU4gPSBgZmFsc2VgLgoKTm93LCB0byBzZXQgdGhlIHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBidWcgaW4gcnNpX2hhbF9sb2FkX2tleSgpIHdoZXJlIDgtYnl0ZSBUWCBhbmQgUlggTUlDIGtleXMgd2VyZSB1bmNvbmRpdGlvbmFsbHkgcmVhZCBmcm9tIFx1MDAyNmRhdGFbMTZdIGFuZCBcdTAwMjZkYXRhWzI0XSwgZXZlbiB3aGVuIHRoZSBjaXBoZXIgc3VpdGUgd2FzIG5vdCBUS0lQIChzdWNoIGFzIENDTVAvQUVTIHdoZXJlIHRoZSBrZXkgYnVmZmVyIGlzIG9ubHkgMTYgYnl0ZXMgbG9uZykuXG5cbjEuIEtBU0FOIGFwcGxpY2FiaWxpdHk6IE91dC1vZi1ib3VuZHMgcmVhZHMgb24gaGVhcCBvciBzdGFjayBidWZmZXJzIChzdWNoIGFzIGFjY2Vzc2luZyBwYXN0IHRoZSAxNi1ieXRlIGtleSBidWZmZXIpIGFyZSBkaXJlY3RseSBkZXRlY3RhYmxlIGJ5IEtBU0FOLlxuMi4gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIGZyYW1lIGJ1ZmZlciBpbiB0aGUgc2tiIGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgdXBmcm9udCB2aWEgYG1lbXNldChza2ItXHUwMDNlZGF0YSwgMCwgZnJhbWVfbGVuKWAuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy5cblxuU2luY2UgdGhlIGlzc3VlIGlzIHN0cmljdGx5IGFuIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcyBjYXVnaHQgYnkgS0FTQU4gYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBidWcgaW4gcnNpX2hhbF9sb2FkX2tleSgpIHdoZXJlIDgtYnl0ZSBUWCBhbmQgUlggTUlDIGtleXMgd2VyZSB1bmNvbmRpdGlvbmFsbHkgcmVhZCBmcm9tIFx1MDAyNmRhdGFbMTZdIGFuZCBcdTAwMjZkYXRhWzI0XSwgZXZlbiB3aGVuIHRoZSBjaXBoZXIgc3VpdGUgd2FzIG5vdCBUS0lQIChzdWNoIGFzIENDTVAvQUVTIHdoZXJlIHRoZSBrZXkgYnVmZmVyIGlzIG9ubHkgMTYgYnl0ZXMgbG9uZykuXG5cbjEuIEtBU0FOIGFwcGxpY2FiaWxpdHk6IE91dC1vZi1ib3VuZHMgcmVhZHMgb24gaGVhcCBvciBzdGFjayBidWZmZXJzIChzdWNoIGFzIGFjY2Vzc2luZyBwYXN0IHRoZSAxNi1ieXRlIGtleSBidWZmZXIpIGFyZSBkaXJlY3RseSBkZXRlY3RhYmxlIGJ5IEtBU0FOLlxuMi4gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIGZyYW1lIGJ1ZmZlciBpbiB0aGUgc2tiIGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgdXBmcm9udCB2aWEgYG1lbXNldChza2ItXHUwMDNlZGF0YSwgMCwgZnJhbWVfbGVuKWAuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy5cblxuU2luY2UgdGhlIGlzc3VlIGlzIHN0cmljdGx5IGFuIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcyBjYXVnaHQgYnkgS0FTQU4gYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6Mzk6NDAuNzg0NDgxNzQ2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzg5Mjc5NDYzMDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIldMQU5cIixcbiAgICBcIldMQU5fVkVORE9SX1JTSVwiLFxuICAgIFwiUlNJXzkxWFwiLFxuICAgIFwiUlNJX1VTQlwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIlVTQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJzaV9oYWxfbG9hZF9rZXlcIixcbiAgICBcInJzaV9tYWM4MDIxMV9zZXRfa2V5XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgYnVnIGluIHJzaV9oYWxfbG9hZF9rZXkoKSB3aGVyZSA4LWJ5dGUgVFggYW5kIFJYIE1JQyBrZXlzIHdlcmUgdW5jb25kaXRpb25hbGx5IHJlYWQgZnJvbSBcXHUwMDI2ZGF0YVsxNl0gYW5kIFxcdTAwMjZkYXRhWzI0XSwgZXZlbiB3aGVuIHRoZSBjaXBoZXIgc3VpdGUgd2FzIG5vdCBUS0lQIChzdWNoIGFzIENDTVAvQUVTIHdoZXJlIHRoZSBrZXkgYnVmZmVyIGlzIG9ubHkgMTYgYnl0ZXMgbG9uZykuXFxuXFxuMS4gS0FTQU4gYXBwbGljYWJpbGl0eTogT3V0LW9mLWJvdW5kcyByZWFkcyBvbiBoZWFwIG9yIHN0YWNrIGJ1ZmZlcnMgKHN1Y2ggYXMgYWNjZXNzaW5nIHBhc3QgdGhlIDE2LWJ5dGUga2V5IGJ1ZmZlcikgYXJlIGRpcmVjdGx5IGRldGVjdGFibGUgYnkgS0FTQU4uXFxuMi4gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIGZyYW1lIGJ1ZmZlciBpbiB0aGUgc2tiIGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgdXBmcm9udCB2aWEgYG1lbXNldChza2ItXFx1MDAzZWRhdGEsIDAsIGZyYW1lX2xlbilgLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuXFxuXFxuU2luY2UgdGhlIGlzc3VlIGlzIHN0cmljdGx5IGFuIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcyBjYXVnaHQgYnkgS0FTQU4gYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIG1lbW9yeSByZWFkIGJ1ZyBpbiByc2lfaGFsX2xvYWRfa2V5IGJ5IHJlc3RyaWN0aW5nIGNvcHlpbmcgb2YgdGhlIFRYIGFuZCBSWCBNSUMga2V5cyBmcm9tIHRoZSBkYXRhIGJ1ZmZlciB0byBvbmx5IHdoZW4gdGhlIGNpcGhlciBzdWl0ZSBpcyBXTEFOX0NJUEhFUl9TVUlURV9US0lQIChwcmV2ZW50aW5nIE9PQiByZWFkcyBmb3Iga2V5IGxlbmd0aHMgc2hvcnRlciB0aGFuIDMyIGJ5dGVzIGxpa2UgQUVTL0NDTVApLiBUaGlzIGRyaXZlciBsb2dpYyBpcyByZWFjaGFibGUgdmlhIG1hYzgwMjExIHNldF9rZXkgY2FsbGJhY2tzIHdpdGggZW11bGF0ZWQgVVNCIGRldmljZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjM5OjQwLjc4NDQ4ODEyNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ5ODA2NDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDM5ZDIyZjVlZDZlYjE1YTA0NTMyMzlmNGJhMDI0NmFmMWM4NTlhYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzMSAyMDozOTozOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tZ210LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tZ210LmNcXG5pbmRleCA3ZjJjMTYwOGYyY2UzLi4yZGRmNGQxNThiZmUzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuY1xcbkBAIC04NDgsOCArODQ4LDEwIEBAIGludCByc2lfaGFsX2xvYWRfa2V5KHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sXFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdG1lbWNweShcXHUwMDI2c2V0X2tleS1cXHUwMDNla2V5WzBdWzBdLCBkYXRhLCBrZXlfbGVuKTtcXG4gXFx0XFx0fVxcbi1cXHRcXHRtZW1jcHkoc2V0X2tleS1cXHUwMDNldHhfbWljX2tleSwgXFx1MDAyNmRhdGFbMTZdLCA4KTtcXG4tXFx0XFx0bWVtY3B5KHNldF9rZXktXFx1MDAzZXJ4X21pY19rZXksIFxcdTAwMjZkYXRhWzI0XSwgOCk7XFxuK1xcdFxcdGlmIChjaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfVEtJUCkge1xcbitcXHRcXHRcXHRtZW1jcHkoc2V0X2tleS1cXHUwMDNldHhfbWljX2tleSwgXFx1MDAyNmRhdGFbMTZdLCA4KTtcXG4rXFx0XFx0XFx0bWVtY3B5KHNldF9rZXktXFx1MDAzZXJ4X21pY19rZXksIFxcdTAwMjZkYXRhWzI0XSwgOCk7XFxuK1xcdFxcdH1cXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0bWVtc2V0KFxcdTAwMjZzZXRfa2V5W0ZSQU1FX0RFU0NfU1pdLCAwLCBmcmFtZV9sZW4gLSBGUkFNRV9ERVNDX1NaKTtcXG4gXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDozOTo0MS4zMzUyNjE0NTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM2NTg2NjUwMTMzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJXTEFOXCIsXG4gICAgXCJXTEFOX1ZFTkRPUl9SU0lcIixcbiAgICBcIlJTSV85MVhcIixcbiAgICBcIlJTSV9VU0JcIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJVU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyc2lfaGFsX2xvYWRfa2V5XCIsXG4gICAgXCJyc2lfbWFjODAyMTFfc2V0X2tleVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgbWVtb3J5IHJlYWQgYnVnIGluIHJzaV9oYWxfbG9hZF9rZXkgYnkgcmVzdHJpY3RpbmcgY29weWluZyBvZiB0aGUgVFggYW5kIFJYIE1JQyBrZXlzIGZyb20gdGhlIGRhdGEgYnVmZmVyIHRvIG9ubHkgd2hlbiB0aGUgY2lwaGVyIHN1aXRlIGlzIFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVAgKHByZXZlbnRpbmcgT09CIHJlYWRzIGZvciBrZXkgbGVuZ3RocyBzaG9ydGVyIHRoYW4gMzIgYnl0ZXMgbGlrZSBBRVMvQ0NNUCkuIFRoaXMgZHJpdmVyIGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgbWFjODAyMTEgc2V0X2tleSBjYWxsYmFja3Mgd2l0aCBlbXVsYXRlZCBVU0IgZGV2aWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDM5ZDIyZjVlZDZlYjE1YTA0NTMyMzlmNGJhMDI0NmFmMWM4NTlhYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDIwOjM5OjM5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jXG5pbmRleCA3ZjJjMTYwOGYyY2UzLi4yZGRmNGQxNThiZmUzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tZ210LmNcbkBAIC04NDgsOCArODQ4LDEwIEBAIGludCByc2lfaGFsX2xvYWRfa2V5KHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sXG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0bWVtY3B5KFx1MDAyNnNldF9rZXktXHUwMDNla2V5WzBdWzBdLCBkYXRhLCBrZXlfbGVuKTtcbiBcdFx0fVxuLVx0XHRtZW1jcHkoc2V0X2tleS1cdTAwM2V0eF9taWNfa2V5LCBcdTAwMjZkYXRhWzE2XSwgOCk7XG4tXHRcdG1lbWNweShzZXRfa2V5LVx1MDAzZXJ4X21pY19rZXksIFx1MDAyNmRhdGFbMjRdLCA4KTtcbitcdFx0aWYgKGNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9US0lQKSB7XG4rXHRcdFx0bWVtY3B5KHNldF9rZXktXHUwMDNldHhfbWljX2tleSwgXHUwMDI2ZGF0YVsxNl0sIDgpO1xuK1x0XHRcdG1lbWNweShzZXRfa2V5LVx1MDAzZXJ4X21pY19rZXksIFx1MDAyNmRhdGFbMjRdLCA4KTtcbitcdFx0fVxuIFx0fSBlbHNlIHtcbiBcdFx0bWVtc2V0KFx1MDAyNnNldF9rZXlbRlJBTUVfREVTQ19TWl0sIDAsIGZyYW1lX2xlbiAtIEZSQU1FX0RFU0NfU1opO1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6Mzk6NDEuMzM1MjYzNzgzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc5MTU4ODU4NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgV2lyZWxlc3MgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuY2AuIFRoZSBzcGVjaWZpYyBmdW5jdGlvbiBiZWluZyBtb2RpZmllZCBpcyBgcnNpX2hhbF9sb2FkX2tleWAuIFJpZ2h0LCBzbyB0aGlzIGlzIGFib3V0IFJlZHBpbmUgU2lnbmFscyBJbmMsIHRoZWlyIDkxeCB3aXJlbGVzcyBkcml2ZXIuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZGV2aWNlcyBzdXBwb3J0ZWQ7IFVTQiwgU0RJTywgcHJvYmFibHkgbW9yZS4gVGhlIGtleSBxdWVzdGlvbiBub3cgaXMsIGNhbiBJIHJlYWNoIHRoaXMgZHJpdmVyIG9yIGRldmljZSB0aHJvdWdoIFVTQiBSYXcgR2FkZ2V0IG9yIHN5emthbGxlcidzIFVTQiBnYWRnZXQgZW11bGF0aW9uPyBXb3J0aCBpbnZlc3RpZ2F0aW5nLlxuXG5MZXQncyBzZWUsIHdoYXQncyBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL2AgY29uY2VybmluZyBVU0I/IEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIGBncmVwcGVyYCBzZWFyY2ggb3IganVzdCBzdGFydCByZWFkaW5nIHRoZSBmaWxlcyBkaXJlY3RseS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGF0dGFjayBzdXJmYWNlIGhlcmUgYW5kIGlmIHRoaXMgaXMgYSB2aWFibGUgdGFyZ2V0IGZvciBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjA4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6NDA6MDkuMjUxMTUxNTg1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTE2MDM3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyc2lfOTF4X21nbXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9NYWtlZmlsZT00PXJzaV85MXgteVxcdFxcdFxcdCs9IHJzaV85MXhfbWFjODAyMTEub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9NYWtlZmlsZTo1OnJzaV85MXgteVxcdFxcdFxcdCs9IHJzaV85MXhfbWdtdC5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL01ha2VmaWxlLTYtcnNpXzkxeC15XFx0XFx0XFx0Kz0gcnNpXzkxeF9oYWwub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDo0MDowOS4zNjIzMTYxNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYyNDEwMDI4NjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhhdCBwcm9ibGVtLCBhcyB0aG91Z2ggaXQgd2VyZSBteSBvd24gdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBSU0kgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFJTSSB3aXJlbGVzcyBkcml2ZXIgaXMgY29uZmlndXJlZCBhbmQgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUuIFRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB0aGF0LCBlc3BlY2lhbGx5IHdpdGhpbiBhIExpbnV4IGtlcm5lbCBjb250ZXh0LCBpcyBhbG1vc3QgYWx3YXlzIHRoZSBgS2NvbmZpZ2AgZmlsZS4gSSdsbCBnbyBzdHJhaWdodCB0byBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL2Ag4oCTIHRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGRyaXZlciBzb3VyY2UgYW5kLCBjcml0aWNhbGx5LCBpdHMgY29uZmlndXJhdGlvbiBtZWNoYW5pc20uIFRoZSBLY29uZmlnIGZpbGUgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGRyaXZlciBpcyBidWlsdCBpbnRvIHRoZSBrZXJuZWwgb3IgYXMgYSBtb2R1bGUsIGFuZCB3aGF0IGJ1aWxkIG9wdGlvbnMgYXJlIGF2YWlsYWJsZS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHdoZXRoZXIgdGhpcyBwYXJ0aWN1bGFyIFJTSSBkcml2ZXIgc3VwcG9ydHMgZGlmZmVyZW50IGhhcmR3YXJlIGludGVyZmFjZXMgbGlrZSBVU0IgYW5kIFNESU8sIG9yIHBlcmhhcHMgZXZlbiBvdGhlcnMgdGhhdCBJIG1pZ2h0IG5vdCBiZSBpbW1lZGlhdGVseSBhd2FyZSBvZi4gSSBuZWVkIHRvIHNlZSB3aGF0J3MgY29uZmlndXJhYmxlIGR1cmluZyB0aGUgYnVpbGQgcHJvY2Vzcy4gRnJvbSBoZXJlIEkgY2FuIHN0YXJ0IG1ha2luZyBkZWR1Y3Rpb25zIG9uIGhvdyB0byBtYW5pcHVsYXRlIGl0IHRvIGZpdCBvdXIgbmVlZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NzUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDo0MToxMS43NzIzNDcxMDdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFdMQU5fVkVORE9SX1JTSVxcbiAgIDM6XFx0XFx0Ym9vbCBcXFwiUmVkcGluZSBTaWduYWxzIEluYyBkZXZpY2VzXFxcIlxcbiAgIDQ6XFx0XFx0ZGVmYXVsdCB5XFxuICAgNTpcXHRcXHRoZWxwXFxuICAgNjpcXHRcXHQgIElmIHlvdSBoYXZlIGEgd2lyZWxlc3MgY2FyZCBiZWxvbmdpbmcgdG8gdGhpcyBjbGFzcywgc2F5IFkuXFxuICAgNzpcXHRcXG4gICA4OlxcdFxcdCAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2Vzbid0IGRpcmVjdGx5IGFmZmVjdCB0aGVcXG4gICA5OlxcdFxcdCAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbCB0aGVcXG4gIDEwOlxcdFxcdCAgcXVlc3Rpb25zIGFib3V0IHRoZXNlIGNhcmRzLiBJZiB5b3Ugc2F5IFksIHlvdSB3aWxsIGJlIGFza2VkIGZvclxcbiAgMTE6XFx0XFx0ICB5b3VyIHNwZWNpZmljIGNhcmQgaW4gdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMuXFxuICAxMjpcXHRcXG4gIDEzOlxcdGlmIFdMQU5fVkVORE9SX1JTSVxcbiAgMTQ6XFx0XFxuICAxNTpcXHRjb25maWcgUlNJXzkxWFxcbiAgMTY6XFx0XFx0dHJpc3RhdGUgXFxcIlJlZHBpbmUgU2lnbmFscyBJbmMgOTF4IFdMQU4gZHJpdmVyIHN1cHBvcnRcXFwiXFxuICAxNzpcXHRcXHRzZWxlY3QgQlRfSENJUlNJIGlmIFJTSV9DT0VYXFxuICAxODpcXHRcXHRkZXBlbmRzIG9uIE1BQzgwMjExXFxuICAxOTpcXHRcXHRoZWxwXFxuICAyMDpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJlcyBzdXBwb3J0IGZvciBSU0kgMXgxIGRldmljZXMuXFxuICAyMTpcXHRcXHQgIFNlbGVjdCBNIChyZWNvbW1lbmRlZCksIGlmIHlvdSBoYXZlIGEgUlNJIDF4MSB3aXJlbGVzcyBtb2R1bGUuXFxuICAyMjpcXHRcXG4gIDIzOlxcdGNvbmZpZyBSU0lfREVCVUdGU1xcbiAgMjQ6XFx0XFx0Ym9vbCBcXFwiUmVkcGluZSBTaWduYWxzIEluYyBkZWJ1ZyBzdXBwb3J0XFxcIlxcbiAgMjU6XFx0XFx0ZGVwZW5kcyBvbiBSU0lfOTFYXFxuICAyNjpcXHRcXHRkZWZhdWx0IHlcXG4gIDI3OlxcdFxcdGhlbHBcXG4gIDI4OlxcdFxcdCBTYXkgWSwgaWYgeW91IHdvdWxkIGxpa2UgdG8gZW5hYmxlIGRlYnVnIHN1cHBvcnQuIFRoaXMgb3B0aW9uXFxuICAyOTpcXHRcXHQgY3JlYXRlcyBkZWJ1Z2ZzIGVudHJpZXNcXG4gIDMwOlxcdFxcbiAgMzE6XFx0Y29uZmlnIFJTSV9TRElPXFxuICAzMjpcXHRcXHR0cmlzdGF0ZSBcXFwiUmVkcGluZSBTaWduYWxzIFNESU8gYnVzIHN1cHBvcnRcXFwiXFxuICAzMzpcXHRcXHRkZXBlbmRzIG9uIE1NQyBcXHUwMDI2XFx1MDAyNiBSU0lfOTFYXFxuICAzNDpcXHRcXHRkZWZhdWx0IG1cXG4gIDM1OlxcdFxcdGhlbHBcXG4gIDM2OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgU0RJTyBidXMgc3VwcG9ydCBpbiByc2kgZHJpdmVycy5cXG4gIDM3OlxcdFxcdCAgU2VsZWN0IE0gKHJlY29tbWVuZGVkKSwgaWYgeW91IGhhdmUgYSBSU0kgMXgxIHdpcmVsZXNzIG1vZHVsZS5cXG4gIDM4OlxcdFxcbiAgMzk6XFx0Y29uZmlnIFJTSV9VU0JcXG4gIDQwOlxcdFxcdHRyaXN0YXRlIFxcXCJSZWRwaW5lIFNpZ25hbHMgVVNCIGJ1cyBzdXBwb3J0XFxcIlxcbiAgNDE6XFx0XFx0ZGVwZW5kcyBvbiBVU0IgXFx1MDAyNlxcdTAwMjYgUlNJXzkxWFxcbiAgNDI6XFx0XFx0ZGVmYXVsdCBtXFxuICA0MzpcXHRcXHRoZWxwXFxuICA0NDpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIFVTQiBidXMgc3VwcG9ydCBpbiByc2kgZHJpdmVycy5cXG4gIDQ1OlxcdFxcdCAgU2VsZWN0IE0gKHJlY29tbWVuZGVkKSwgaWYgeW91IGhhdmUgYSBSU0kgMXgxIHdpcmVsZXNzIG1vZHVsZS5cXG4gIDQ2OlxcdFxcbiAgNDc6XFx0Y29uZmlnIFJTSV9DT0VYXFxuICA0ODpcXHRcXHRib29sIFxcXCJSZWRwaW5lIFNpZ25hbHMgV0xBTiBCVCBDb2V4aXN0ZW5jZSBzdXBwb3J0XFxcIlxcbiAgNDk6XFx0XFx0ZGVwZW5kcyBvbiBCVCBcXHUwMDI2XFx1MDAyNiBSU0lfOTFYXFxuICA1MDpcXHRcXHRkZXBlbmRzIG9uICEoQlQ9bSBcXHUwMDI2XFx1MDAyNiBSU0lfOTFYPXkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjQxOjExLjc3MjQwODY5OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY2MTYyOTExNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBVU0IgRHJpdmVyIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gYFJTSV9VU0JgIGlzIHRoZSBrZXksIG1lYW5pbmcgdGhlIGNvZGUgdXNlcyB0aGUgVVNCIGJ1cyAoYENPTkZJR19SU0lfVVNCYCwgYENPTkZJR19SU0lfOTFYYCkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleHBsb3JlIHRoZSBVU0IgZHJpdmVycywgYW5kIEkga25vdyB0aGF0IEkgY2FuIGxldmVyYWdlIHRoZSBVU0IgUmF3IEdhZGdldCBvciBzeXprYWxsZXIgZnV6emluZywgZXNwZWNpYWxseSB3aXRoaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhhdCB3b3VsZCBhbGxvdyBmb3IgZW11bGF0aW9uIGFuZCBtb3JlIHJvYnVzdCB0ZXN0aW5nLiBCdXQgYmVmb3JlIEkgZGl2ZSBpbnRvIGFueSBvZiB0aGF0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhIHNwZWNpZmljIGZ1bmN0aW9uIGNhbGw6IGByc2lfaGFsX2xvYWRfa2V5YC4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyBiZWluZyB1c2VkLiBUaW1lIHRvIGdyZXAgZm9yIGByc2lfaGFsX2xvYWRfa2V5YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgb2YgdGhhdCBmdW5jdGlvbiB0byBjb250aW51ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY1MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6NDE6MTguMzg4NzAxNjA4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTQxNTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJzaV9oYWxfbG9hZF9rZXlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM9OTc2PXN0YXRpYyBpbnQgcnNpX2hhbF9rZXlfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xMDA1LVxcdFxcdCAgICAoa2V5LVxcdTAwM2VjaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDApKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoxMDA2OlxcdFxcdFxcdHN0YXR1cyA9IHJzaV9oYWxfbG9hZF9rZXkoYWRhcHRlci1cXHUwMDNlcHJpdixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTEwMDctXFx0XFx0XFx0XFx0XFx0XFx0ICBrZXktXFx1MDAzZWtleSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTAxOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjEwMTk6XFx0c3RhdHVzID0gcnNpX2hhbF9sb2FkX2tleShhZGFwdGVyLVxcdTAwM2Vwcml2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTAyMC1cXHRcXHRcXHRcXHQgIGtleS1cXHUwMDNla2V5LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYz0xNDIyPXN0YXRpYyBpbnQgcnNpX21hYzgwMjExX3N0YV9hZGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTE0OTQtXFx0XFx0XFx0XFx0ICAgIChrZXktXFx1MDAzZWNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MCkpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoxNDk1OlxcdFxcdFxcdFxcdFxcdHJzaV9oYWxfbG9hZF9rZXkoYWRhcHRlci1cXHUwMDNlcHJpdixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTE0OTYtXFx0XFx0XFx0XFx0XFx0XFx0XFx0IGtleS1cXHUwMDNla2V5LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jPTcxMT1pbnQgcnNpX3NldF92YXBfY2FwYWJpbGl0aWVzKHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tZ210LmMtNzgwLS8qKlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYzo3ODE6ICogcnNpX2hhbF9sb2FkX2tleSgpIC0gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGxvYWQga2V5cyB3aXRoaW4gdGhlIGZpcm13YXJlLlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYy03ODItICogQGNvbW1vbjogUG9pbnRlciB0byB0aGUgZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlLlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jLTc5Mi0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tZ210LmM6NzkzOmludCByc2lfaGFsX2xvYWRfa2V5KHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jLTc5NC1cXHRcXHQgICAgIHU4ICpkYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9tZ210Lmg9NzE3PWludCByc2lfc2VuZF9hZ2dyZWdhdGlvbl9wYXJhbXNfZnJhbWUoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbiwgdTE2IHRpZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfbWdtdC5oLTcxOS1cXHRcXHRcXHRcXHQgICAgICB1OCBzdGFfaWQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfbWdtdC5oOjcyMDppbnQgcnNpX2hhbF9sb2FkX2tleShzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLCB1OCAqZGF0YSwgdTE2IGtleV9sZW4sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV9tZ210LmgtNzIxLVxcdFxcdCAgICAgdTgga2V5X3R5cGUsIHU4IGtleV9pZCwgdTMyIGNpcGhlciwgczE2IHN0YV9pZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6NDE6MTguNDMyMjUwMjI2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU2NzAwODg4ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDb2RlOiBVbmRlcnN0YW5kaW5nIHRoZSBLZXkgQ2hhbmdlKipcblxuT2theSwgc28gd2UndmUgZ290IGEgbW9kaWZpY2F0aW9uIGhlcmUsIGFuZCBteSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogYmVoaW5kIHRoaXMuIFRoZSBiZXN0IGFwcHJvYWNoIGlzIHRvIGV4YW1pbmUgYHJzaV9oYWxfbG9hZF9rZXlgIGFuZCBgcnNpX2hhbF9rZXlfY29uZmlnYC4gTG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnMgd2lsbCBnaXZlIG1lIHRoZSBjb250ZXh0dWFsIGNsdWVzIEkgbmVlZC4gU3BlY2lmaWNhbGx5LCBieSByZXZpZXdpbmcgdGhlc2UsIEknbSBleHBlY3RpbmcgdG8gZ2FpbiBpbnNpZ2h0cyBpbnRvIGhvdyB0aGUga2V5IGxvYWRpbmcgcHJvY2VzcyBmdW5jdGlvbnMgd2l0aGluIHRoaXMgc3BlY2lmaWMgSEFMIChIYXJkd2FyZSBBYnN0cmFjdGlvbiBMYXllcikuIEkgYW50aWNpcGF0ZSBmaW5kaW5nIG91dCB3aGF0IHRoZSBrZXkgbG9hZGluZyByb3V0aW5lcyBkbywgdGhlIGNvbmZpZyByZXF1aXJlbWVudHMsIGFuZCBob3cgdGhpcyBwYXJ0aWN1bGFyIG1vZGlmaWNhdGlvbiBwbGF5cyBpbnRvIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZS4gSG9wZWZ1bGx5IEkgY2FuIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGUgY2hhbmdlIHdpdGggdGhpcyBhcHByb2FjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg0NywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjQxOjQ0LjEwMjM0MTMwM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc5MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc5MDpcXHQgKlxcbiA3OTE6XFx0ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuXFxuIDc5MjpcXHQgKi9cXG4gNzkzOlxcdGludCByc2lfaGFsX2xvYWRfa2V5KHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sXFxuIDc5NDpcXHRcXHRcXHQgICAgIHU4ICpkYXRhLFxcbiA3OTU6XFx0XFx0XFx0ICAgICB1MTYga2V5X2xlbixcXG4gNzk2OlxcdFxcdFxcdCAgICAgdTgga2V5X3R5cGUsXFxuIDc5NzpcXHRcXHRcXHQgICAgIHU4IGtleV9pZCxcXG4gNzk4OlxcdFxcdFxcdCAgICAgdTMyIGNpcGhlcixcXG4gNzk5OlxcdFxcdFxcdCAgICAgczE2IHN0YV9pZCxcXG4gODAwOlxcdFxcdFxcdCAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZilcXG4gODAxOlxcdHtcXG4gODAyOlxcdFxcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xcbiA4MDM6XFx0XFx0c3RydWN0IHJzaV9zZXRfa2V5ICpzZXRfa2V5O1xcbiA4MDQ6XFx0XFx0dTE2IGtleV9kZXNjcmlwdG9yID0gMDtcXG4gODA1OlxcdFxcdHUxNiBmcmFtZV9sZW4gPSBzaXplb2Yoc3RydWN0IHJzaV9zZXRfa2V5KTtcXG4gODA2OlxcdFxcbiA4MDc6XFx0XFx0cnNpX2RiZyhNR01UX1RYX1pPTkUsIFxcXCIlczogU2VuZGluZyBsb2FkIGtleSBmcmFtZVxcXFxuXFxcIiwgX19mdW5jX18pO1xcbiA4MDg6XFx0XFxuIDgwOTpcXHRcXHRza2IgPSBkZXZfYWxsb2Nfc2tiKGZyYW1lX2xlbik7XFxuIDgxMDpcXHRcXHRpZiAoIXNrYikge1xcbiA4MTE6XFx0XFx0XFx0cnNpX2RiZyhFUlJfWk9ORSwgXFxcIiVzOiBGYWlsZWQgaW4gYWxsb2NhdGlvbiBvZiBza2JcXFxcblxcXCIsXFxuIDgxMjpcXHRcXHRcXHRcXHRfX2Z1bmNfXyk7XFxuIDgxMzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gODE0OlxcdFxcdH1cXG4gODE1OlxcdFxcbiA4MTY6XFx0XFx0bWVtc2V0KHNrYi1cXHUwMDNlZGF0YSwgMCwgZnJhbWVfbGVuKTtcXG4gODE3OlxcdFxcdHNldF9rZXkgPSAoc3RydWN0IHJzaV9zZXRfa2V5ICopc2tiLVxcdTAwM2VkYXRhO1xcbiA4MTg6XFx0XFxuIDgxOTpcXHRcXHRpZiAoa2V5X3R5cGUgPT0gUlNJX0dST1VQX0tFWSkge1xcbiA4MjA6XFx0XFx0XFx0a2V5X2Rlc2NyaXB0b3IgPSBSU0lfS0VZX1RZUEVfQlJPQURDQVNUO1xcbiA4MjE6XFx0XFx0XFx0aWYgKHZpZi1cXHUwMDNldHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUClcXG4gODIyOlxcdFxcdFxcdFxcdGtleV9kZXNjcmlwdG9yIHw9IFJTSV9LRVlfTU9ERV9BUDtcXG4gODIzOlxcdFxcdH1cXG4gODI0OlxcdFxcdGlmICgoY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwKSB8fFxcbiA4MjU6XFx0XFx0ICAgIChjaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0KSkge1xcbiA4MjY6XFx0XFx0XFx0a2V5X2lkID0gMDtcXG4gODI3OlxcdFxcdFxcdGtleV9kZXNjcmlwdG9yIHw9IFJTSV9XRVBfS0VZO1xcbiA4Mjg6XFx0XFx0XFx0aWYgKGtleV9sZW4gXFx1MDAzZT0gMTMpXFxuIDgyOTpcXHRcXHRcXHRcXHRrZXlfZGVzY3JpcHRvciB8PSBSU0lfV0VQX0tFWV8xMDQ7XFxuIDgzMDpcXHRcXHR9IGVsc2UgaWYgKGNpcGhlciAhPSBLRVlfVFlQRV9DTEVBUikge1xcbiA4MzE6XFx0XFx0XFx0a2V5X2Rlc2NyaXB0b3IgfD0gUlNJX0NJUEhFUl9XUEE7XFxuIDgzMjpcXHRcXHRcXHRpZiAoY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVApXFxuIDgzMzpcXHRcXHRcXHRcXHRrZXlfZGVzY3JpcHRvciB8PSBSU0lfQ0lQSEVSX1RLSVA7XFxuIDgzNDpcXHRcXHR9XFxuIDgzNTpcXHRcXHRrZXlfZGVzY3JpcHRvciB8PSBSU0lfUFJPVEVDVF9EQVRBX0ZSQU1FUztcXG4gODM2OlxcdFxcdGtleV9kZXNjcmlwdG9yIHw9IChrZXlfaWQgXFx1MDAzY1xcdTAwM2MgUlNJX0tFWV9JRF9PRkZTRVQpO1xcbiA4Mzc6XFx0XFxuIDgzODpcXHRcXHRyc2lfc2V0X2xlbl9xbm8oXFx1MDAyNnNldF9rZXktXFx1MDAzZWRlc2NfZHdvcmQwLmxlbl9xbm8sXFxuIDgzOTpcXHRcXHRcXHRcXHQoZnJhbWVfbGVuIC0gRlJBTUVfREVTQ19TWiksIFJTSV9XSUZJX01HTVRfUSk7XFxuIDg0MDpcXHRcXHRzZXRfa2V5LVxcdTAwM2VkZXNjX2R3b3JkMC5mcmFtZV90eXBlID0gU0VUX0tFWV9SRVE7XFxuIDg0MTpcXHRcXHRzZXRfa2V5LVxcdTAwM2VrZXlfZGVzYyA9IGNwdV90b19sZTE2KGtleV9kZXNjcmlwdG9yKTtcXG4gODQyOlxcdFxcdHNldF9rZXktXFx1MDAzZXN0YV9pZCA9IHN0YV9pZDtcXG4gODQzOlxcdFxcbiA4NDQ6XFx0XFx0aWYgKGRhdGEpIHtcXG4gODQ1OlxcdFxcdFxcdGlmICgoY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwKSB8fFxcbiA4NDY6XFx0XFx0XFx0ICAgIChjaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0KSkge1xcbiA4NDc6XFx0XFx0XFx0XFx0bWVtY3B5KFxcdTAwMjZzZXRfa2V5LVxcdTAwM2VrZXlba2V5X2lkXVsxXSwgZGF0YSwga2V5X2xlbiAqIDIpO1xcbiA4NDg6XFx0XFx0XFx0fSBlbHNlIHtcXG4gODQ5OlxcdFxcdFxcdFxcdG1lbWNweShcXHUwMDI2c2V0X2tleS1cXHUwMDNla2V5WzBdWzBdLCBkYXRhLCBrZXlfbGVuKTtcXG4gODUwOlxcdFxcdFxcdH1cXG4gODUxOlxcdFxcdFxcdGlmIChjaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfVEtJUCkge1xcbiA4NTI6XFx0XFx0XFx0XFx0bWVtY3B5KHNldF9rZXktXFx1MDAzZXR4X21pY19rZXksIFxcdTAwMjZkYXRhWzE2XSwgOCk7XFxuIDg1MzpcXHRcXHRcXHRcXHRtZW1jcHkoc2V0X2tleS1cXHUwMDNlcnhfbWljX2tleSwgXFx1MDAyNmRhdGFbMjRdLCA4KTtcXG4gODU0OlxcdFxcdFxcdH1cXG4gODU1OlxcdFxcdH0gZWxzZSB7XFxuIDg1NjpcXHRcXHRcXHRtZW1zZXQoXFx1MDAyNnNldF9rZXlbRlJBTUVfREVTQ19TWl0sIDAsIGZyYW1lX2xlbiAtIEZSQU1FX0RFU0NfU1opO1xcbiA4NTc6XFx0XFx0fVxcbiA4NTg6XFx0XFxuIDg1OTpcXHRcXHRza2JfcHV0KHNrYiwgZnJhbWVfbGVuKTtcXG4gODYwOlxcdFxcbiA4NjE6XFx0XFx0cmV0dXJuIHJzaV9zZW5kX2ludGVybmFsX21nbXRfZnJhbWUoY29tbW9uLCBza2IpO1xcbiA4NjI6XFx0fVxcbiA4NjM6XFx0XFxuIDg2NDpcXHQvKlxcbiA4NjU6XFx0ICogVGhpcyBmdW5jdGlvbiBzZW5kcyB0aGUgY29tbW9uIGRldmljZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgdG8gZGV2aWNlLlxcbiA4NjY6XFx0ICogVGhpcyBmcmFtZSBpbmNsdWRlcyB0aGUgdXNlZnVsIGluZm9ybWF0aW9uIHRvIG1ha2UgZGV2aWNlIHdvcmtzIG9uXFxuIDg2NzpcXHQgKiBzcGVjaWZpYyBvcGVyYXRpbmcgbW9kZS5cXG4gODY4OlxcdCAqL1xcbiA4Njk6XFx0c3RhdGljIGludCByc2lfc2VuZF9jb21tb25fZGV2X3BhcmFtcyhzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDo0MTo0NC4xMDI1MDYyMzRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTIzOTQzOTgwMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGByc2lgIEtlcm5lbCBEcml2ZXIgQnVnZml4KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgYmVmb3JlIHRoZSBmaXgsIHRoZSBjb2RlIHdhcyBtYWtpbmcgdW5jb25kaXRpb25hbCBgbWVtY3B5YCBjYWxsczogYG1lbWNweShzZXRfa2V5LVx1MDAzZXR4X21pY19rZXksIFx1MDAyNmRhdGFbMTZdLCA4KTtgIGFuZCBgbWVtY3B5KHNldF9rZXktXHUwMDNlcnhfbWljX2tleSwgXHUwMDI2ZGF0YVsyNF0sIDgpO2AuIFRoaXMgd2FzIHByb2JsZW1hdGljLiBUaGUgaXNzdWUgd2FzIHRoYXQgdGhlIGNvZGUgd2FzIGFzc3VtaW5nIGEgbWluaW11bSBkYXRhIHNpemUgKHNwZWNpZmljYWxseSwgdGhhdCBgZGF0YWAgd2FzIGF0IGxlYXN0IDMyIGJ5dGVzIGxvbmcpLiBJdCBkaWQgdGhpcyByZWdhcmRsZXNzIG9mIHRoZSBhY3R1YWwga2V5IGxlbmd0aCAoYGtleV9sZW5gKSwgd2hpY2ggY2FuIGJlIHNtYWxsZXIgKGUuZy4sIDE2IGJ5dGVzIGZvciBDQ01QL0FFUykuIFNvLCBpZiBga2V5X2xlbmAgd2FzIGxlc3MgdGhhbiAzMiwgaXQgd2FzIGRlZmluaXRlbHkgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIHJlYWRzLiBDbGFzc2ljIG1lbW9yeSBjb3JydXB0aW9uIHZ1bG5lcmFiaWxpdHkhXG5cblRoZSBmaXgsIHRoYW5rIGdvb2RuZXNzLCBhZGRyZXNzZXMgdGhpcyBieSBhZGRpbmcgYSBjcnVjaWFsIGNoZWNrOiBgaWYgKGNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9US0lQKWAuIFRoYXQncyBhIHNvbGlkIGRlZmVuc2UuIEJ5IG9ubHkgZXhlY3V0aW5nIHRob3NlIGBtZW1jcHlgIGNhbGxzIHdoZW4gdGhlIGNpcGhlciBzdWl0ZSBpcyBUS0lQLCBpdCBlZmZlY3RpdmVseSBwcmV2ZW50cyB0aGUgb3V0LW9mLWJvdW5kcyByZWFkcyBmb3Igb3RoZXIgY2lwaGVycyB3aGVyZSB0aGUgZGF0YSBsZW5ndGggaXMgc2hvcnRlci4gVGhpcyBpcyBhIGxlZ2l0aW1hdGUgYnVnZml4IGFuZCBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgb25lIGF0IHRoYXQuIEEgZ29vZCBmaW5kLlxuXG5Ob3csIG15IG1pbmQgaXMgYWxyZWFkeSB0aGlua2luZyBhYm91dCBleHBsb2l0YWJpbGl0eS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHJlYWNoYWJsZSB0aGlzIGlzLiBJIG5lZWQgdG8gc2VlIGlmIGByc2lfaGFsX2xvYWRfa2V5YCBpcyBzb21ldGhpbmcgSSBjYW4gdHJpZ2dlciBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciB1c2luZyBVU0IgZW11bGF0aW9uIHRvb2xzIGxpa2UgU3l6a2FsbGVyLiBIbW0sIGFuZCB0aGUgYHJzaV85MXhgIGRyaXZlciwgaXQgKmRvZXMqIGhhdmUgVVNCIGludGVyZmFjZSBzdXBwb3J0IGFjY29yZGluZyB0byBgQ09ORklHX1JTSV9VU0JgLiBPa2F5LCBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBVU0IgZGV2aWNlIHByb2JlIHdvcmtzIGZvciBSU0kuIFRoYXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ4MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjQzOjE2LjQ5NjkwODA3NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3NDMzNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnNpX3Byb2JlfHJzaV91c2JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9NYWtlZmlsZT05PXJzaV85MXgtJChDT05GSUdfUlNJX0RFQlVHRlMpXFx0Kz0gcnNpXzkxeF9kZWJ1Z2ZzLm9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvTWFrZWZpbGUtMTAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL01ha2VmaWxlOjExOnJzaV91c2IteVxcdFxcdFxcdCs9IHJzaV85MXhfdXNiLm8gcnNpXzkxeF91c2Jfb3BzLm9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvTWFrZWZpbGUtMTItcnNpX3NkaW8teVxcdFxcdFxcdCs9IHJzaV85MXhfc2Rpby5vIHJzaV85MXhfc2Rpb19vcHMub1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL01ha2VmaWxlPTE0PW9iai0kKENPTkZJR19SU0lfU0RJTylcXHRcXHQrPSByc2lfc2Rpby5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL01ha2VmaWxlOjE1Om9iai0kKENPTkZJR19SU0lfVVNCKVxcdFxcdCs9IHJzaV91c2Iub1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFpbi5jLTI1LSNpbmNsdWRlIFxcXCJyc2lfaGFsLmhcXFwiXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFpbi5jOjI2OiNpbmNsdWRlIFxcXCJyc2lfdXNiLmhcXFwiXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFpbi5jLTI3LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfc2Rpby5jPTk3OT1zdGF0aWMgc3RydWN0IHJzaV9ob3N0X2ludGZfb3BzIHNkaW9faG9zdF9pbnRmX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3NkaW8uYy05OTItLyoqXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfc2Rpby5jOjk5MzogKiByc2lfcHJvYmUoKSAtIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGtlcm5lbCB3aGVuIHRoZSBkcml2ZXIgcHJvdmlkZWRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9zZGlvLmMtOTk0LSAqXFx0XFx0IFZlbmRvciBhbmQgZGV2aWNlIElEcyBhcmUgbWF0Y2hlZC4gQWxsIHRoZSBpbml0aWFsaXphdGlvblxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfc2Rpby5jLTEwMDAtICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfc2Rpby5jOjEwMDE6c3RhdGljIGludCByc2lfcHJvYmUoc3RydWN0IHNkaW9fZnVuYyAqcGZ1bmN0aW9uLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3NkaW8uYy0xMDAyLVxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHNkaW9fZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3NkaW8uYz0xNTA5PXN0YXRpYyBzdHJ1Y3Qgc2Rpb19kcml2ZXIgcnNpX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9zZGlvLmMtMTUxMC1cXHQubmFtZSAgICAgICA9IFxcXCJSU0ktU0RJTyBXTEFOXFxcIixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9zZGlvLmM6MTUxMTpcXHQucHJvYmUgICAgICA9IHJzaV9wcm9iZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9zZGlvLmMtMTUxMi1cXHQucmVtb3ZlICAgICA9IHJzaV9kaXNjb25uZWN0LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtMjAtI2luY2x1ZGUgXFx1MDAzY25ldC9yc2lfOTF4LmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6MjE6I2luY2x1ZGUgXFxcInJzaV91c2IuaFxcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy0yMi0jaW5jbHVkZSBcXFwicnNpX2hhbC5oXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM9MzA9c3RhdGljIGludCByc2lfcnhfdXJiX3N1Ym1pdChzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyLCB1OCBlcF9udW0sIGdmcF90IGZsYWdzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTMyLS8qKlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjMzOiAqIHJzaV91c2JfY2FyZF93cml0ZSgpIC0gVGhpcyBmdW5jdGlvbiB3cml0ZXMgdG8gdGhlIFVTQiBDYXJkLlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTM0LSAqIEBhZGFwdGVyOiBQb2ludGVyIHRvIHRoZSBhZGFwdGVyIHN0cnVjdHVyZS5cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTQwLSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjQxOnN0YXRpYyBpbnQgcnNpX3VzYl9jYXJkX3dyaXRlKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNDItXFx0XFx0XFx0ICAgICAgdTggKmJ1ZixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jPTgxPXN0YXRpYyBpbnQgcnNpX3dyaXRlX211bHRpcGxlKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy05Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo5ODpcXHRyZXR1cm4gcnNpX3VzYl9jYXJkX3dyaXRlKGFkYXB0ZXIsIGRhdGEsIGNvdW50LCBlbmRwb2ludCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtOTktfVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM9MTA5PXN0YXRpYyBpbnQgcnNpX2ZpbmRfYnVsa19pbl9hbmRfb3V0X2VuZHBvaW50cyhzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtMTY2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjE2NzovKiByc2lfdXNiX3JlZ19yZWFkKCkgLSBUaGlzIGZ1bmN0aW9uIHJlYWRzIGRhdGEgZnJvbSBnaXZlbiByZWdpc3RlciBhZGRyZXNzLlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTE2OC0gKiBAdXNiZGV2OiBQb2ludGVyIHRvIHRoZSB1c2JfZGV2aWNlIHN0cnVjdHVyZS5cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTE3NC0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzoxNzU6c3RhdGljIGludCByc2lfdXNiX3JlZ19yZWFkKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtMTc2LVxcdFxcdFxcdCAgICB1MzIgcmVnLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtMjEwLS8qKlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjIxMTogKiByc2lfdXNiX3JlZ193cml0ZSgpIC0gVGhpcyBmdW5jdGlvbiB3cml0ZXMgdGhlIGdpdmVuIGRhdGEgaW50byB0aGUgZ2l2ZW5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy0yMTItICpcXHRcXHRcXHQgcmVnaXN0ZXIgYWRkcmVzcy5cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTIxOS0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzoyMjA6c3RhdGljIGludCByc2lfdXNiX3JlZ193cml0ZShzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTIyMS1cXHRcXHRcXHQgICAgIHUzMiByZWcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYz0zMjQ9c3RhdGljIGludCByc2lfcnhfdXJiX3N1Ym1pdChzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyLCB1OCBlcF9udW0sIGdmcF90IG1lbV9mbGFncylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTM2MS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzozNjI6c3RhdGljIGludCByc2lfdXNiX3JlYWRfcmVnaXN0ZXJfbXVsdGlwbGUoc3RydWN0IHJzaV9odyAqYWRhcHRlciwgdTMyIGFkZHIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtMzYzLVxcdFxcdFxcdFxcdFxcdCAgdTggKmRhdGEsIHUxNiBjb3VudClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTQwMi0vKipcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo0MDM6ICogcnNpX3VzYl93cml0ZV9yZWdpc3Rlcl9tdWx0aXBsZSgpIC0gVGhpcyBmdW5jdGlvbiB3cml0ZXMgbXVsdGlwbGUgYnl0ZXMgb2ZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy00MDQtICpcXHRcXHRcXHRcXHQgICAgICAgaW5mb3JtYXRpb24gdG8gbXVsdGlwbGUgcmVnaXN0ZXJzLlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNDExLSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjQxMjpzdGF0aWMgaW50IHJzaV91c2Jfd3JpdGVfcmVnaXN0ZXJfbXVsdGlwbGUoc3RydWN0IHJzaV9odyAqYWRhcHRlciwgdTMyIGFkZHIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNDEzLVxcdFxcdFxcdFxcdFxcdCAgIHU4ICpkYXRhLCB1MTYgY291bnQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy00NTItLyoqXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6NDUzOiAqcnNpX3VzYl9ob3N0X2ludGZfd3JpdGVfcGt0KCkgLSBUaGlzIGZ1bmN0aW9uIHdyaXRlcyB0aGUgcGFja2V0IHRvIHRoZVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTQ1NC0gKlxcdFxcdFxcdFxcdCAgIFVTQiBjYXJkLlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNDYwLSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjQ2MTpzdGF0aWMgaW50IHJzaV91c2JfaG9zdF9pbnRmX3dyaXRlX3BrdChzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTQ2Mi1cXHRcXHRcXHRcXHQgICAgICAgdTggKnBrdCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTQ3Ni1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo0Nzc6c3RhdGljIGludCByc2lfdXNiX21hc3Rlcl9yZWdfcmVhZChzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyLCB1MzIgcmVnLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTQ3OC1cXHRcXHRcXHRcXHQgICB1MzIgKnZhbHVlLCB1MTYgbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNDg0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjQ4NTpcXHRyZXQgPSByc2lfdXNiX3JlZ19yZWFkKHVzYmRldiwgcmVnLCBcXHUwMDI2dGVtcCwgbGVuKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy00ODYtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy00OTItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6NDkzOnN0YXRpYyBpbnQgcnNpX3VzYl9tYXN0ZXJfcmVnX3dyaXRlKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNDk0LVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIHJlZyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTQ5OS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo1MDA6XFx0cmV0dXJuIHJzaV91c2JfcmVnX3dyaXRlKHVzYmRldiwgcmVnLCB2YWx1ZSwgbGVuKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy01MDEtfVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTUwMi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo1MDM6c3RhdGljIGludCByc2lfdXNiX2xvYWRfZGF0YV9tYXN0ZXJfd3JpdGUoc3RydWN0IHJzaV9odyAqYWRhcHRlcixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy01MDQtXFx0XFx0XFx0XFx0XFx0ICB1MzIgYmFzZV9hZGRyZXNzLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNTE3LVxcdFxcdG1lbWNweSh0ZW1wX2J1ZiwgdGFfZmlybXdhcmUgKyBjdXJfaW5keCwgYmxvY2tfc2l6ZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6NTE4OlxcdFxcdHN0YXR1cyA9IHJzaV91c2Jfd3JpdGVfcmVnaXN0ZXJfbXVsdGlwbGUoYWRhcHRlciwgYmFzZV9hZGRyZXNzLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTUxOS1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgKHU4ICopKHRlbXBfYnVmKSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTUzMS1cXHRcXHQgICAgICAgaW5zdHJ1Y3Rpb25zX3N6ICUgYmxvY2tfc2l6ZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6NTMyOlxcdFxcdHN0YXR1cyA9IHJzaV91c2Jfd3JpdGVfcmVnaXN0ZXJfbXVsdGlwbGVcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy01MzMtXFx0XFx0XFx0XFx0XFx0XFx0KGFkYXB0ZXIsIGJhc2VfYWRkcmVzcyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jPTU0NT1zdGF0aWMgc3RydWN0IHJzaV9ob3N0X2ludGZfb3BzIHVzYl9ob3N0X2ludGZfb3BzID0ge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjU0NjpcXHQud3JpdGVfcGt0XFx0XFx0PSByc2lfdXNiX2hvc3RfaW50Zl93cml0ZV9wa3QsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6NTQ3OlxcdC5yZWFkX3JlZ19tdWx0aXBsZVxcdD0gcnNpX3VzYl9yZWFkX3JlZ2lzdGVyX211bHRpcGxlLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjU0ODpcXHQud3JpdGVfcmVnX211bHRpcGxlXFx0PSByc2lfdXNiX3dyaXRlX3JlZ2lzdGVyX211bHRpcGxlLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjU0OTpcXHQubWFzdGVyX3JlZ19yZWFkXFx0PSByc2lfdXNiX21hc3Rlcl9yZWdfcmVhZCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo1NTA6XFx0Lm1hc3Rlcl9yZWdfd3JpdGVcXHQ9IHJzaV91c2JfbWFzdGVyX3JlZ193cml0ZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo1NTE6XFx0LmxvYWRfZGF0YV9tYXN0ZXJfd3JpdGVcXHQ9IHJzaV91c2JfbG9hZF9kYXRhX21hc3Rlcl93cml0ZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy01NTItfTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jPTU2MD1zdGF0aWMgdm9pZCByc2lfZGVpbml0X3VzYl9pbnRlcmZhY2Uoc3RydWN0IHJzaV9odyAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTU3Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo1NzM6c3RhdGljIGludCByc2lfdXNiX2luaXRfcngoc3RydWN0IHJzaV9odyAqYWRhcHRlcilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy01NzQte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNTk0LVxcdGlmIChyc2lfY3JlYXRlX2t0aHJlYWQoYWRhcHRlci1cXHUwMDNlcHJpdiwgXFx1MDAyNmRldi1cXHUwMDNlcnhfdGhyZWFkLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjU5NTpcXHRcXHRcXHQgICAgICAgcnNpX3VzYl9yeF90aHJlYWQsIFxcXCJSWC1UaHJlYWRcXFwiKSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTU5Ni1cXHRcXHRyc2lfZGJnKEVSUl9aT05FLCBcXFwiJXM6IFVuYWJsZSB0byBpbml0IHJ4IHRocmRcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jPTYxNz1zdGF0aWMgaW50IHJzaV9pbml0X3VzYl9pbnRlcmZhY2Uoc3RydWN0IHJzaV9odyAqYWRhcHRlcixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTY0NC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo2NDU6XFx0aWYgKHJzaV91c2JfaW5pdF9yeChhZGFwdGVyKSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTY0Ni1cXHRcXHRyc2lfZGJnKEVSUl9aT05FLCBcXFwiRmFpbGVkIHRvIGluaXQgUlggaGFuZGxlXFxcXG5cXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTY1NC1cXHQvKiBJbml0aWFsaXppbmcgZnVuY3Rpb24gY2FsbGJhY2tzICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6NjU1OlxcdGFkYXB0ZXItXFx1MDAzZWNoZWNrX2h3X3F1ZXVlX3N0YXR1cyA9IHJzaV91c2JfY2hlY2tfcXVldWVfc3RhdHVzO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjY1NjpcXHRhZGFwdGVyLVxcdTAwM2VkZXRlcm1pbmVfZXZlbnRfdGltZW91dCA9IHJzaV91c2JfZXZlbnRfdGltZW91dDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy02NTctXFx0YWRhcHRlci1cXHUwMDNlcnNpX2hvc3RfaW50ZiA9IFJTSV9IT1NUX0lOVEZfVVNCO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM9Njc2PXN0YXRpYyBpbnQgdXNiX3VscF9yZWFkX3dyaXRlKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIsIHUxNiBhZGRyLCB1MzIgZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTY4MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo2ODE6XFx0cmV0ID0gcnNpX3VzYl9tYXN0ZXJfcmVnX3dyaXRlXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNjgyLVxcdFxcdFxcdChhZGFwdGVyLCBSU0lfR1NQSV9EQVRBX1JFRzEsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy02ODYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6Njg3OlxcdHJldCA9IHJzaV91c2JfbWFzdGVyX3JlZ193cml0ZShhZGFwdGVyLCBSU0lfR1NQSV9EQVRBX1JFRzAsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNjg4LVxcdFxcdFxcdFxcdCAgICAgICAoZGF0YSBcXHUwMDI2IDB4ZmZmZiksIDIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNjkyLVxcdC8qIEluaXRpYWxpemluZyBHU1BJIGZvciBVTFAgcmVhZC93cml0ZXMgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo2OTM6XFx0cnNpX3VzYl9tYXN0ZXJfcmVnX3dyaXRlKGFkYXB0ZXIsIFJTSV9HU1BJX0NUUkxfUkVHMCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy02OTQtXFx0XFx0XFx0XFx0IFJTSV9HU1BJX0NUUkxfUkVHMF9WQUxVRSwgMik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNjk1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjY5NjpcXHRyZXQgPSByc2lfdXNiX21hc3Rlcl9yZWdfd3JpdGUoYWRhcHRlciwgUlNJX0dTUElfQ1RSTF9SRUcxLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTY5Ny1cXHRcXHRcXHRcXHQgICAgICAgKChsZW5faW5fYml0cyAtIDEpIHwgUlNJX0dTUElfVFJJRyksIDIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM9NzA2PXN0YXRpYyBpbnQgcnNpX3Jlc2V0X2NhcmQoc3RydWN0IHJzaV9odyAqYWRhcHRlcilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTcxMC1cXHRyc2lfZGJnKElORk9fWk9ORSwgXFxcIlJlc2V0dGluZyBDYXJkLi4uXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo3MTE6XFx0cnNpX3VzYl9tYXN0ZXJfcmVnX3dyaXRlKGFkYXB0ZXIsIFJTSV9UQV9IT0xEX1JFRywgMHhFLCA0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy03MTItXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy03MTctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6NzE4OlxcdHJldCA9IHJzaV91c2JfbWFzdGVyX3JlZ193cml0ZShhZGFwdGVyLCBTV0JMX1JFR09VVCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy03MTktXFx0XFx0XFx0XFx0ICAgICAgIFJTSV9GV19XRFRfRElTQUJMRV9SRVEsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy03NDctXFx0fSBlbHNlIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYzo3NDg6XFx0XFx0cmV0ID0gcnNpX3VzYl9tYXN0ZXJfcmVnX3dyaXRlKGFkYXB0ZXIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNzQ5LVxcdFxcdFxcdFxcdFxcdCAgICAgICBOV1BfV1dEX0lOVEVSUlVQVF9USU1FUixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTc1My1cXHRcXHRcXHRnb3RvIGZhaWw7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6NzU0OlxcdFxcdHJldCA9IHJzaV91c2JfbWFzdGVyX3JlZ193cml0ZShhZGFwdGVyLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTc1NS1cXHRcXHRcXHRcXHRcXHQgICAgICAgTldQX1dXRF9TWVNURU1fUkVTRVRfVElNRVIsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy03NTktXFx0XFx0XFx0Z290byBmYWlsO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjc2MDpcXHRcXHRyZXQgPSByc2lfdXNiX21hc3Rlcl9yZWdfd3JpdGUoYWRhcHRlcixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy03NjEtXFx0XFx0XFx0XFx0XFx0ICAgICAgIE5XUF9XV0RfTU9ERV9BTkRfUlNUQVJULFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNzc2LS8qKlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjc3NzogKiByc2lfcHJvYmUoKSAtIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGtlcm5lbCB3aGVuIHRoZSBkcml2ZXIgcHJvdmlkZWRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy03NzgtICpcXHRcXHQgVmVuZG9yIGFuZCBkZXZpY2UgSURzIGFyZSBtYXRjaGVkLiBBbGwgdGhlIGluaXRpYWxpemF0aW9uXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy03ODQtICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6Nzg1OnN0YXRpYyBpbnQgcnNpX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICpwZnVuY3Rpb24sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtNzg2LVxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtODI2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jOjgyNzpcXHRzdGF0dXMgPSByc2lfdXNiX3JlZ19yZWFkKGRldi1cXHUwMDNldXNiZGV2LCBGV19TVEFUVVNfUkVHLCBcXHUwMDI2Zndfc3RhdHVzLCAyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYy04MjgtXFx0aWYgKHN0YXR1cyBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2IuYz05MjE9c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHJzaV9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmMtOTIyLVxcdC5uYW1lICAgICAgID0gXFxcIlJTSS1VU0IgV0xBTlxcXCIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiLmM6OTIzOlxcdC5wcm9iZSAgICAgID0gcnNpX3Byb2JlLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYi5jLTkyNC1cXHQuZGlzY29ubmVjdCA9IHJzaV9kaXNjb25uZWN0LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiX29wcy5jLTE4LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9maXJtd2FyZS5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYl9vcHMuYzoxOTojaW5jbHVkZSBcXFwicnNpX3VzYi5oXFxcIlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3VzYl9vcHMuYy0yMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2Jfb3BzLmMtMjEtLyoqXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiX29wcy5jOjIyOiAqIHJzaV91c2JfcnhfdGhyZWFkKCkgLSBUaGlzIGlzIGEga2VybmVsIHRocmVhZCB0byByZWNlaXZlIHRoZSBwYWNrZXRzIGZyb21cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2Jfb3BzLmMtMjMtICpcXHRcXHRcXHQgdGhlIFVTQiBkZXZpY2UuXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2Jfb3BzLmMtMjctICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfdXNiX29wcy5jOjI4OnZvaWQgcnNpX3VzYl9yeF90aHJlYWQoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF91c2Jfb3BzLmMtMjkte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV91c2IuaD01Nj1zdHJ1Y3QgcnNpXzkxeF91c2JkZXYge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV91c2IuaC03Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX3VzYi5oOjczOnN0YXRpYyBpbmxpbmUgaW50IHJzaV91c2JfY2hlY2tfcXVldWVfc3RhdHVzKHN0cnVjdCByc2lfaHcgKmFkYXB0ZXIsIHU4IHFfbnVtKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfdXNiLmgtNzQte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV91c2IuaC03OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX3VzYi5oOjc5OnN0YXRpYyBpbmxpbmUgaW50IHJzaV91c2JfZXZlbnRfdGltZW91dChzdHJ1Y3QgcnNpX2h3ICphZGFwdGVyKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfdXNiLmgtODAte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV91c2IuaC04My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpX3VzYi5oOjg0OnZvaWQgcnNpX3VzYl9yeF90aHJlYWQoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV91c2IuaC04NS0jZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6NDM6MTYuNTQyNjc0NDIzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3MTM4NDY2NTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpdmluZyBpbnRvIHRoZSBSU0kgV2ktRmkgRHJpdmVyIEtleSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGtleSBjb25maWd1cmF0aW9uIHByb2Nlc3Mgd2l0aGluIHRoZSBSU0kgV2ktRmkgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIDkxeCB2YXJpYW50LiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGByc2lfaGFsX2tleV9jb25maWdgIHdpdGhpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuY2AuIE15IGluaXRpYWwgcXVlc3Rpb24gaXMgaG93IHRoaXMga2V5IGNvbmZpZ3VyYXRpb24gaXMgYWN0dWFsbHkgdHJpZ2dlcmVkLiBJJ20gYmV0dGluZyBpdCdzIGEgYG1hYzgwMjExYCBjYWxsYmFjay4gWWVzLCB0aGF0IG1ha2VzIHNlbnNlLiBJdCdzIGxpa2VseSBnb2luZyB0byBiZSBoYW5kbGVkIGJ5IHRoZSBgc2V0X2tleWAgaGFuZGxlciB3aXRoaW4gYHJzaV9tYWM4MDIxMV9vcHNgLiBOb3csIHRvIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMgYW5kIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgY2FsbCBjaGFpbiwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgZ3JlcCB0aHJvdWdoIHRoZSBjb2RlIGZvciBpbnN0YW5jZXMgb2YgYm90aCBgcnNpX2hhbF9rZXlfY29uZmlnYCBhbmQgYHJzaV9tYWM4MDIxMV9vcHNgLiBUaGF0IHNob3VsZCBxdWlja2x5IGhpZ2hsaWdodCB0aGUgY29ubmVjdGlvbiBwb2ludHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDc0LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjQzOjMzLjY4MTE0NTA4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjgyMDY1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyc2lfaGFsX2tleV9jb25maWd8cnNpX21hYzgwMjExX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9yc2lcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYz05MTY9c3RhdGljIGludCByc2lfbWFjODAyMTFfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtOTY3LS8qKlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6OTY4OiAqIHJzaV9oYWxfa2V5X2NvbmZpZygpIC0gVGhpcyBmdW5jdGlvbiBsb2FkcyB0aGUga2V5cyBpbnRvIHRoZSBmaXJtd2FyZS5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTk2OS0gKiBAaHc6IFBvaW50ZXIgdG8gdGhlIGllZWU4MDIxMV9odyBzdHJ1Y3R1cmUuXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTk3NS0gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjk3NjpzdGF0aWMgaW50IHJzaV9oYWxfa2V5X2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTk3Ny1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYz0xMDUwPXN0YXRpYyBpbnQgcnNpX21hYzgwMjExX3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTEwNjMtXFx0Y2FzZSBTRVRfS0VZOlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmM6MTA2NDpcXHRcXHRzdGF0dXMgPSByc2lfaGFsX2tleV9jb25maWcoaHcsIHZpZiwga2V5LCBzdGEpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTA2NS1cXHRcXHRpZiAoc3RhdHVzKSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTEwODMtXFx0XFx0bWVtc2V0KGtleSwgMCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYpKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jOjEwODQ6XFx0XFx0c3RhdHVzID0gcnNpX2hhbF9rZXlfY29uZmlnKGh3LCB2aWYsIGtleSwgc3RhKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTEwODUtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjQzOjMzLjcyNzk3MTM1OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODMzNTcwNTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIFJTSSBLZXkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgUlNJIGRyaXZlciBpcyBtYW5hZ2luZyBpdHMga2V5cyB3aXRoaW4gdGhlIDgwMi4xMSBmcmFtZXdvcmsuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHR3byBrZXkgZnVuY3Rpb25zOiBgcnNpX21hYzgwMjExX3NldF9rZXlgIGFuZCwgbW9yZSBicm9hZGx5LCB0aGUgYHJzaV9tYWM4MDIxMV9vcHNgIHN0cnVjdHVyZS4gYHJzaV9tYWM4MDIxMV9zZXRfa2V5YCBpcyB0aGUgbGlrZWx5IHBvaW50IG9mIGludGVyYWN0aW9uIGZvciBzZXR0aW5nIG9yIHVwZGF0aW5nIHRob3NlIGtleXM7IGl0J2xsIHRlbGwgbWUgaG93IHRoZXkgYXJlIGltcGxlbWVudGVkLiBEaWdnaW5nIGludG8gdGhlIG9wcyBzdHJ1Y3R1cmUsIHRoYXQncyB3aGVyZSBJIGNhbiBmaW5kIG90aGVyIGZ1bmN0aW9ucyB3aGljaCBjb3VsZCBiZSByZWxhdGVkIHRvIGtleSBoYW5kbGluZy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgaG93IHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIG1hYzgwMjExIGNvcmUgZm9yIHRoaXMgY3JpdGljYWwgc2VjdXJpdHkgZnVuY3Rpb24uIEkgZXhwZWN0IHRvIHNlZSB0aGUgdHlwaWNhbCBhbGxvY2F0aW9uLCBzZXR1cCwgYW5kIGluc2VydGlvbiBvZiB0aGUga2V5IG1hdGVyaWFsLCBsaWtlbHkgaW52b2x2aW5nIHNvbWUgaGFyZHdhcmUtc3BlY2lmaWMgaW50ZXJhY3Rpb24gdGhyb3VnaCB0aGUgZHJpdmVyJ3Mgb3duIG1lY2hhbmlzbXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgaGFyZHdhcmUgb2ZmbG9hZHMgdGhlIGVuY3J5cHRpb24vZGVjcnlwdGlvbiwgaWYgYXQgYWxsLCBhbmQgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBrZXkgZGVyaXZhdGlvbiBvciByb3RhdGlvbi4gVGhpcyBpcyB3aGVyZSBJJ2xsIHByb2JhYmx5IGZpbmQgdGhlIGtleSB0byBldmVyeXRoaW5nIGVsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDY4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6NDM6MzYuNTYxNTQ1MTQ5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTg0MjYwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyc2lfbWFjODAyMTFfc2V0X2tleVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9yc2lcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYz05NzY9c3RhdGljIGludCByc2lfaGFsX2tleV9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTEwNDAtLyoqXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoxMDQxOiAqIHJzaV9tYWM4MDIxMV9zZXRfa2V5KCkgLSBUaGlzIGZ1bmN0aW9uIHNldHMgdHlwZSBvZiBrZXkgdG8gYmUgbG9hZGVkLlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21hYzgwMjExLmMtMTA0Mi0gKiBAaHc6IFBvaW50ZXIgdG8gdGhlIGllZWU4MDIxMV9odyBzdHJ1Y3R1cmUuXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTEwNDktICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoxMDUwOnN0YXRpYyBpbnQgcnNpX21hYzgwMjExX3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xMDUxLVxcdFxcdFxcdFxcdGVudW0gc2V0X2tleV9jbWQgY21kLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYz0xOTgyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyBtYWM4MDIxMV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tYWM4MDIxMS5jLTE5OTYtXFx0LmNvbmZpZ3VyZV9maWx0ZXIgPSByc2lfbWFjODAyMTFfY29uZl9maWx0ZXIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYzoxOTk3OlxcdC5zZXRfa2V5ID0gcnNpX21hYzgwMjExX3NldF9rZXksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWFjODAyMTEuYy0xOTk4LVxcdC5zZXRfcnRzX3RocmVzaG9sZCA9IHJzaV9tYWM4MDIxMV9zZXRfcnRzX3RocmVzaG9sZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6NDM6MzYuNjA3MzkzMTk3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2MzIxNDk2ODgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUlNJIFVTQiBEZXZpY2UgRHJpdmVyIEtleSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBSU0kgVVNCIGRldmljZSBkcml2ZXIuIEl0IHNlZW1zIGxpa2Ugd2hlbiBhIFVTQiBkZXZpY2UgaXMgcHJvYmVkIHVzaW5nIHN5emthbGxlcidzIGB1c2IgcmF3IGdhZGdldGAgKGxpa2UgYHJzaV9wcm9iZWApLCBgcnNpXzkxeGAgZ2V0cyByZWdpc3RlcmVkIHdpdGggbWFjODAyMTEuIE15IGltbWVkaWF0ZSBpbnRlcmVzdCBpcyBpbiBob3cgZW5jcnlwdGlvbiBrZXlzIGFyZSBtYW5hZ2VkLCBwYXJ0aWN1bGFybHkgYmVjYXVzZSBvZiB0aGF0IHBhdGNoLiBTcGVjaWZpY2FsbHksIEknbSB0cnlpbmcgdG8gdHJhY2UgdGhlIHBhdGggZnJvbSB1c2Vyc3BhY2UgY29tbWFuZHMgdG8gdGhlIGtleSBsb2FkaW5nIGZ1bmN0aW9uLlxuXG5Gcm9tIHdoYXQgSSBjYW4gdGVsbCwgdXNlcnNwYWNlIHVzZXMgbmw4MDIxMSB0byBpc3N1ZSBgbmV3X2tleWAgb3IgYHNldF9rZXlgIGNvbW1hbmRzLiBUaGVzZSB1bHRpbWF0ZWx5IGVuZCB1cCBjYWxsaW5nIGByc2lfbWFjODAyMTFfc2V0X2tleWAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYHJzaV9oYWxfa2V5X2NvbmZpZ2AsIGFuZCB0aGF0J3MgdGhlIG9uZSB0aGF0IGNhbGxzIGByc2lfaGFsX2xvYWRfa2V5YC4gT2theSwgc28gYHJzaV9oYWxfbG9hZF9rZXlgIGlzIHRoZSBjcnVjaWFsIGZ1bmN0aW9uLCBhbmQgSSBuZWVkIHRvIHZlcmlmeSBpdHMgdmlzaWJpbGl0eS5cblxuTGV0J3MgY2hlY2sgdGhlIGRlY2xhcmF0aW9uIGluIGByc2lfbWdtdC5oYC4gQWgsIHllcywgaXQnczogYGludCByc2lfaGFsX2xvYWRfa2V5KHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sIHU4ICpkYXRhLCB1MTYga2V5X2xlbiwgdTgga2V5X3R5cGUsIHU4IGtleV9pZCwgdTMyIGNpcGhlciwgczE2IHN0YV9pZCwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7YCBUaGUgZnVuY3Rpb24gaXMgKm5vdCogc3RhdGljLCBzbyBpdCAqaXMqIGV4cG9zZWQgd2l0aGluIHRoZSBgcnNpXzkxeGAgbW9kdWxlLiBHb29kLCB0aGF0IGNvbmZpcm1zIGl0LlxuXG5TbywgdGhlIGtleSBmdW5jdGlvbnMgdG8gd2F0Y2ggYXJlOiBgcnNpX2hhbF9sb2FkX2tleWAsIGByc2lfaGFsX2tleV9jb25maWdgLCBgcnNpX21hYzgwMjExX3NldF9rZXlgIGFuZCBgcnNpX21hYzgwMjExX3N0YV9hZGRgLiBJJ2xsIHdhbnQgdG8gdHJhY2UgY2FsbHMgdG8gdGhvc2UuXG5cbkJ1dCBob2xkIG9uLCBgcnNpX2hhbF9sb2FkX2tleWAgaXMgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzLCB3aGljaCBtYWtlcyBpdCBjZW50cmFsIHRvIHRoZSBwcm9ibGVtLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIEtjb25maWcgcmVxdWlyZW1lbnRzLiBgUlNJXzkxWGAgcmVxdWlyZXMgYE1BQzgwMjExYCBhbmQgYFdMQU5fVkVORE9SX1JTSWAuIGBSU0lfVVNCYCBkZXBlbmRzIG9uIGBVU0IgXHUwMDI2XHUwMDI2IFJTSV85MVhgLiBJJ2xsIHdhbnQgdG8gY2hlY2sgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnYC5cblxuYGBgXG5jb25maWcgV0xBTl9WRU5ET1JfUlNJXG5cdGJvb2wgXCJSZWRwaW5lIFNpZ25hbHMgSW5jIGRldmljZXNcIlxuXHRkZWZhdWx0IHlcblxuaWYgV0xBTl9WRU5ET1JfUlNJXG5cbmNvbmZpZyBSU0lfOTFYXG5cdHRyaXN0YXRlIFwiUmVkcGluZSBTaWduYWxzIEluYyA5MXggV0xBTiBkcml2ZXIgc3VwcG9ydFwiXG5cdHNlbGVjdCBCVF9IQ0lSU0kgaWYgUlNJX0NPRVhcblx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxuXG5jb25maWcgUlNJX1VTQlxuXHR0cmlzdGF0ZSBcIlJlZHBpbmUgU2lnbmFscyBVU0IgYnVzIHN1cHBvcnRcIlxuXHRkZXBlbmRzIG9uIFVTQiBcdTAwMjZcdTAwMjYgUlNJXzkxWFxuYGBgXG5Pa2F5LCBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBkZXBlbmRlbmN5IG9mIGBXTEFOX1ZFTkRPUl9SU0lgLCBzbyBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIG1haW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWdgIGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTM4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjQzOjUyLjkyODg5Mzc1OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQwMzMxMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiV0xBTl9WRU5ET1JfUlNJXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL01ha2VmaWxlPTE4PW9iai0kKENPTkZJR19XTEFOX1ZFTkRPUl9SRUFMVEVLKSArPSByZWFsdGVrL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL01ha2VmaWxlOjE5Om9iai0kKENPTkZJR19XTEFOX1ZFTkRPUl9SU0kpICs9IHJzaS9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZS0yMC1vYmotJChDT05GSUdfV0xBTl9WRU5ET1JfU0lMQUJTKSArPSBzaWxhYnMvXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnOjI6Y29uZmlnIFdMQU5fVkVORE9SX1JTSVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTMtXFx0Ym9vbCBcXFwiUmVkcGluZSBTaWduYWxzIEluYyBkZXZpY2VzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWctMTItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWc6MTM6aWYgV0xBTl9WRU5ET1JfUlNJXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL0tjb25maWctMTQtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZz00Nz1jb25maWcgUlNJX0NPRVhcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnLTU2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnOjU3OmVuZGlmICMgV0xBTl9WRU5ET1JfUlNJXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjQzOjUzLjAwMjkzMjMxNVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzEwOTEwMjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBpc3N1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBSU0kvS2NvbmZpZyBTb3VyY2UqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGUgUlNJIHdpcmVsZXNzIGRyaXZlci4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIHRoZSB0eXBpY2FsIGtlcm5lbCBidWlsZCBzdHJ1Y3R1cmUsIGlzIHRvIGhlYWQgZGlyZWN0bHkgdG8gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzc2AgZGlyZWN0b3J5LiBXaXRoaW4gdGhhdCwgSSdtIHByZXR0eSBjZXJ0YWluIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoZSBSU0kgZHJpdmVyIHdpbGwgYmUgbG9jYXRlZCB0aGVyZS4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlc2UgdGhpbmdzIGxpdmUuIExldCdzIHN0YXJ0IGJ5IGNoZWNraW5nIGBkcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnYCBhbmQgc2VlIGlmIHRoZSBpbmNsdWRlcyBwb2ludCB0byBpdC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCdzIHdoZXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDY5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6NDM6NTguNzEzODQ0NzY0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjM3MzM3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyc2kvS2NvbmZpZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnPTMyPXNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWc6MzM6c291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnLTM0LXNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL0tjb25maWdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjQzOjU4Ljc4NjIyMzg0MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzMwMjI2MTY5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipLY29uZmlnIERpdmUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbi4gVGhlIHByb2JsZW0gbGlrZWx5IGxpZXMgd2l0aGluIHRoZSB3aXJlbGVzcyBuZXR3b3JrIGNvbmZpZ3VyYXRpb24sIHNvIEknbSBmb2N1c2luZyBteSBhdHRlbnRpb24gb24gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWdgLiBJJ20gZ29pbmcgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbiBhcm91bmQgbGluZSAzMyBvZiB0aGF0IGZpbGUuIFRoYXQncyBhIHJlYXNvbmFibGUgc3RhcnRpbmcgcG9pbnQgZ2l2ZW4gdGhlIGNvbnRleHQsIGFuZCBJJ20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1pZ2h0IGJlIGNvbnRyaWJ1dGluZyB0byB0aGUgaXNzdWUuIExpbmUgMzMgc2hvdWxkIGdpdmUgYSBzdGFydGluZyBwb2ludCB0byB0aGUgcmVsZXZhbnQga2NvbmZpZyBmbGFncywgYW5kIHdpbGwgZ3VpZGUgdGhlIG5leHQgbGV2ZWwgb2YgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3NTcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDo0NDozMi4wODg0ODc5OTZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBXaXJlbGVzcyBMQU4gZGV2aWNlIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0bWVudWNvbmZpZyBXTEFOXFxuICAgNzpcXHRcXHRib29sIFxcXCJXaXJlbGVzcyBMQU5cXFwiXFxuICAgODpcXHRcXHRkZXBlbmRzIG9uICFTMzkwXFxuICAgOTpcXHRcXHRkZXBlbmRzIG9uIE5FVFxcbiAgMTA6XFx0XFx0c2VsZWN0IFdJUkVMRVNTXFxuICAxMTpcXHRcXHRkZWZhdWx0IHlcXG4gIDEyOlxcdFxcdGhlbHBcXG4gIDEzOlxcdFxcdCAgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGFsbCB0aGUgcHJlIDgwMi4xMSBhbmQgODAyLjExIHdpcmVsZXNzXFxuICAxNDpcXHRcXHQgIGRldmljZSBkcml2ZXJzLiBGb3IgYSBjb21wbGV0ZSBsaXN0IG9mIGRyaXZlcnMgYW5kIGRvY3VtZW50YXRpb25cXG4gIDE1OlxcdFxcdCAgb24gdGhlbSByZWZlciB0byB0aGUgd2lyZWxlc3Mgd2lraTpcXG4gIDE2OlxcdFxcbiAgMTc6XFx0XFx0ICBodHRwczovL3dpcmVsZXNzLndpa2kua2VybmVsLm9yZy9lbi91c2Vycy9Ecml2ZXJzXFxuICAxODpcXHRcXG4gIDE5OlxcdGlmIFdMQU5cXG4gIDIwOlxcdFxcbiAgMjE6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hZG10ZWsvS2NvbmZpZ1xcXCJcXG4gIDIyOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWdcXFwiXFxuICAyMzpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsL0tjb25maWdcXFwiXFxuICAyNDpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL0tjb25maWdcXFwiXFxuICAyNTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL0tjb25maWdcXFwiXFxuICAyNjpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL0tjb25maWdcXFwiXFxuICAyNzpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvS2NvbmZpZ1xcXCJcXG4gIDI4OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvS2NvbmZpZ1xcXCJcXG4gIDI5OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWljcm9jaGlwL0tjb25maWdcXFwiXFxuICAzMDpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3B1cmVsaWZpL0tjb25maWdcXFwiXFxuICAzMTpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3JhbGluay9LY29uZmlnXFxcIlxcbiAgMzI6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL0tjb25maWdcXFwiXFxuICAzMzpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9LY29uZmlnXFxcIlxcbiAgMzQ6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvS2NvbmZpZ1xcXCJcXG4gIDM1OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3QvS2NvbmZpZ1xcXCJcXG4gIDM2OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvS2NvbmZpZ1xcXCJcXG4gIDM3OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvenlkYXMvS2NvbmZpZ1xcXCJcXG4gIDM4OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcXVhbnRlbm5hL0tjb25maWdcXFwiXFxuICAzOTpcXHRcXG4gIDQwOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDo0NDozMi4wODg1NTI5MzZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzUwMzI1Nzk1OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFdMQU4gUGF0Y2gqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZC4gTGV0J3MgbWFrZSBzdXJlIHRoZSBlc3NlbnRpYWwgb25lcyBhcmUgcHJlc2VudDogYFdMQU5gLCBgV0xBTl9WRU5ET1JfUlNJYCwgYFJTSV85MVhgLCBgUlNJX1VTQmAsIGBNQUM4MDIxMWAsIGFuZCBgVVNCYC4gR290IGl0LCBub3cgdG8gZG91YmxlLWNoZWNrIGV2ZXJ5dGhpbmcuXG5cblRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJIHNlZSB0aGUgZGVwZW5kZW5jaWVzIGFyZSBjb3JyZWN0bHkgZGVmaW5lZCB3aXRoIGBXb3J0aEZ1enppbmc6IHRydWVgIGFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFycmF5IGNvdmVycyBhbGwgdGhlIHJlcXVpcmVkIG9wdGlvbnM6IGBXTEFOYCwgYFdMQU5fVkVORE9SX1JTSWAsIGBSU0lfOTFYYCwgYFJTSV9VU0JgLCBgTUFDODAyMTFgLCBhbmQgYFVTQmAuIFRoZSBmb2N1cyBpcyBjbGVhciB0b28sIGl0J3MgdGhvc2UgY3JpdGljYWwgZnVuY3Rpb25zIGByc2lfaGFsX2xvYWRfa2V5YCBhbmQgYHJzaV9tYWM4MDIxMV9zZXRfa2V5YC5cblxuVGhlIHJlYXNvbmluZyBtYWtlcyBzZW5zZTsgd2UncmUgZGVhbGluZyB3aXRoIGFuIG91dC1vZi1ib3VuZHMgbWVtb3J5IHJlYWQgaW4gYHJzaV9oYWxfbG9hZF9rZXlgIGR1cmluZyBNSUMga2V5IGNvcHlpbmcsIGFuZCB0aGUgcGF0Y2ggYWRkcmVzc2VzIHRoaXMgYnkgYWRkaW5nIGEgY2hlY2sgZm9yIHRoZSBgV0xBTl9DSVBIRVJfU1VJVEVfVEtJUGAgY2lwaGVyIHN1aXRlLiBUaGlzIGltcGFjdHMgdGhlIFJlZHBpbmUgU2lnbmFscyA5MXggV0xBTiBkcml2ZXIsIHNwZWNpZmljYWxseSByZWFjaGFibGUgdGhyb3VnaCBgbWFjODAyMTFgIGtleSBjb25maWd1cmF0aW9uIG9wZXJhdGlvbnMsIGxpa2VseSBvbiBlbXVsYXRlZCBVU0IgZGV2aWNlcy4gQ2xhc3NpYy5cblxuQmVmb3JlIEkgcHVzaCB0aGUgcmVzdWx0cywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIG9uZSBsYXN0IHRpbWU6IGByc2lfaGFsX2xvYWRfa2V5YCBhbmQgYHJzaV9tYWM4MDIxMV9zZXRfa2V5YCBhcmUgc3RpbGwgdGhlIGNyaXRpY2FsIGZvY3VzIHN5bWJvbHMsIGFuZCB0aGUgY29uZmlndXJhdGlvbnMgYXJlIHRoZSBzYW1lOiBgV0xBTl9WRU5ET1JfUlNJYCwgYFJTSV85MVhgLCBgUlNJX1VTQmAsIGBNQUM4MDIxMWAsIGFuZCBgVVNCYC4gQWxyaWdodCwgbG9va3MgZ29vZC4gVGltZSB0byBpbnZva2UgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1NTMsIk91dHB1dFRva2VucyI6MTkzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6NDU6NDcuMTIxMTM2NjIxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA2MjI2OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIldMQU5cIixcbiAgICBcIldMQU5fVkVORE9SX1JTSVwiLFxuICAgIFwiUlNJXzkxWFwiLFxuICAgIFwiUlNJX1VTQlwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIlVTQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJzaV9oYWxfbG9hZF9rZXlcIixcbiAgICBcInJzaV9tYWM4MDIxMV9zZXRfa2V5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyBtZW1vcnkgcmVhZCBidWcgaW4gcnNpX2hhbF9sb2FkX2tleSBieSByZXN0cmljdGluZyBjb3B5aW5nIG9mIHRoZSBUWCBhbmQgUlggTUlDIGtleXMgZnJvbSB0aGUgZGF0YSBidWZmZXIgdG8gb25seSB3aGVuIHRoZSBjaXBoZXIgc3VpdGUgaXMgV0xBTl9DSVBIRVJfU1VJVEVfVEtJUCAocHJldmVudGluZyBPT0IgcmVhZHMgZm9yIGtleSBsZW5ndGhzIHNob3J0ZXIgdGhhbiAzMiBieXRlcyBsaWtlIEFFUy9DQ01QKS4gVGhpcyBkcml2ZXIgbG9naWMgaXMgcmVhY2hhYmxlIHZpYSBtYWM4MDIxMSBzZXRfa2V5IGNhbGxiYWNrcyB3aXRoIGVtdWxhdGVkIFVTQiBkZXZpY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIldMQU5cIixcbiAgICBcIldMQU5fVkVORE9SX1JTSVwiLFxuICAgIFwiUlNJXzkxWFwiLFxuICAgIFwiUlNJX1VTQlwiLFxuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIlVTQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJzaV9oYWxfbG9hZF9rZXlcIixcbiAgICBcInJzaV9tYWM4MDIxMV9zZXRfa2V5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyBtZW1vcnkgcmVhZCBidWcgaW4gcnNpX2hhbF9sb2FkX2tleSBieSByZXN0cmljdGluZyBjb3B5aW5nIG9mIHRoZSBUWCBhbmQgUlggTUlDIGtleXMgZnJvbSB0aGUgZGF0YSBidWZmZXIgdG8gb25seSB3aGVuIHRoZSBjaXBoZXIgc3VpdGUgaXMgV0xBTl9DSVBIRVJfU1VJVEVfVEtJUCAocHJldmVudGluZyBPT0IgcmVhZHMgZm9yIGtleSBsZW5ndGhzIHNob3J0ZXIgdGhhbiAzMiBieXRlcyBsaWtlIEFFUy9DQ01QKS4gVGhpcyBkcml2ZXIgbG9naWMgaXMgcmVhY2hhYmxlIHZpYSBtYWM4MDIxMSBzZXRfa2V5IGNhbGxiYWNrcyB3aXRoIGVtdWxhdGVkIFVTQiBkZXZpY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDo0NTo0Ny4yMDE3NjY3ODhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODYyMTY4ODU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6NDU6NDcuMjAyMzQyMTI4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjI4NjE1ODk2NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBidWcgaW4gcnNpX2hhbF9sb2FkX2tleSgpIHdoZXJlIDgtYnl0ZSBUWCBhbmQgUlggTUlDIGtleXMgd2VyZSB1bmNvbmRpdGlvbmFsbHkgcmVhZCBmcm9tIFxcdTAwMjZkYXRhWzE2XSBhbmQgXFx1MDAyNmRhdGFbMjRdLCBldmVuIHdoZW4gdGhlIGNpcGhlciBzdWl0ZSB3YXMgbm90IFRLSVAgKHN1Y2ggYXMgQ0NNUC9BRVMgd2hlcmUgdGhlIGtleSBidWZmZXIgaXMgb25seSAxNiBieXRlcyBsb25nKS5cXG5cXG4xLiBLQVNBTiBhcHBsaWNhYmlsaXR5OiBPdXQtb2YtYm91bmRzIHJlYWRzIG9uIGhlYXAgb3Igc3RhY2sgYnVmZmVycyAoc3VjaCBhcyBhY2Nlc3NpbmcgcGFzdCB0aGUgMTYtYnl0ZSBrZXkgYnVmZmVyKSBhcmUgZGlyZWN0bHkgZGV0ZWN0YWJsZSBieSBLQVNBTi5cXG4yLiBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgZnJhbWUgYnVmZmVyIGluIHRoZSBza2IgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZCB1cGZyb250IHZpYSBgbWVtc2V0KHNrYi1cXHUwMDNlZGF0YSwgMCwgZnJhbWVfbGVuKWAuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy5cXG5cXG5TaW5jZSB0aGUgaXNzdWUgaXMgc3RyaWN0bHkgYW4gb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzIGNhdWdodCBieSBLQVNBTiBhbmQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQzOWQyMmY1ZWQ2ZWIxNWEwNDUzMjM5ZjRiYTAyNDZhZjFjODU5YWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAyMDozOTozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuY1xuaW5kZXggN2YyYzE2MDhmMmNlMy4uMmRkZjRkMTU4YmZlMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfbWdtdC5jXG5AQCAtODQ4LDggKzg0OCwxMCBAQCBpbnQgcnNpX2hhbF9sb2FkX2tleShzdHJ1Y3QgcnNpX2NvbW1vbiAqY29tbW9uLFxuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdG1lbWNweShcdTAwMjZzZXRfa2V5LVx1MDAzZWtleVswXVswXSwgZGF0YSwga2V5X2xlbik7XG4gXHRcdH1cbi1cdFx0bWVtY3B5KHNldF9rZXktXHUwMDNldHhfbWljX2tleSwgXHUwMDI2ZGF0YVsxNl0sIDgpO1xuLVx0XHRtZW1jcHkoc2V0X2tleS1cdTAwM2VyeF9taWNfa2V5LCBcdTAwMjZkYXRhWzI0XSwgOCk7XG4rXHRcdGlmIChjaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfVEtJUCkge1xuK1x0XHRcdG1lbWNweShzZXRfa2V5LVx1MDAzZXR4X21pY19rZXksIFx1MDAyNmRhdGFbMTZdLCA4KTtcbitcdFx0XHRtZW1jcHkoc2V0X2tleS1cdTAwM2VyeF9taWNfa2V5LCBcdTAwMjZkYXRhWzI0XSwgOCk7XG4rXHRcdH1cbiBcdH0gZWxzZSB7XG4gXHRcdG1lbXNldChcdTAwMjZzZXRfa2V5W0ZSQU1FX0RFU0NfU1pdLCAwLCBmcmFtZV9sZW4gLSBGUkFNRV9ERVNDX1NaKTtcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjQ1OjQ3LjIwMjM0MzIwOFoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MjQ5MzUyNDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy5cblxuKipFeGFtaW5pbmcgdGhlIEtleSBMb2FkaW5nIEZ1bmN0aW9uIGluIHRoZSBSU0kgRHJpdmVyKipcblxuQWxyaWdodCwgSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgcnNpXzkxeF9tZ210LmNgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgYXJlYSBhcm91bmQgdGhlIGByc2lfaGFsX2xvYWRfa2V5YCBmdW5jdGlvbiB3aXRoaW4gdGhlIHdpcmVsZXNzIG5ldHdvcmtpbmcgZHJpdmVyLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBrZXkgbG9hZGluZyBwcm9jZXNzIHdvcmtzLCBhbmQgdGhlIGRldGFpbHMgc3Vycm91bmRpbmcgaXQuIEknbSBnb2luZyB0byB1c2UgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSBzb3VyY2UgY29kZSBvZiBgcnNpX2hhbF9sb2FkX2tleWAuIExldCdzIHNlZSB3aGF0J3MgZ29pbmcgb24gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDUsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjQ1OjU1LjQ1MTY5ODc0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9tZ210LmNcIixcbiAgXCJGaXJzdExpbmVcIjogODIwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODIwOlxcdFxcdFxcdGtleV9kZXNjcmlwdG9yID0gUlNJX0tFWV9UWVBFX0JST0FEQ0FTVDtcXG4gODIxOlxcdFxcdFxcdGlmICh2aWYtXFx1MDAzZXR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApXFxuIDgyMjpcXHRcXHRcXHRcXHRrZXlfZGVzY3JpcHRvciB8PSBSU0lfS0VZX01PREVfQVA7XFxuIDgyMzpcXHRcXHR9XFxuIDgyNDpcXHRcXHRpZiAoKGNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MCkgfHxcXG4gODI1OlxcdFxcdCAgICAoY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNCkpIHtcXG4gODI2OlxcdFxcdFxcdGtleV9pZCA9IDA7XFxuIDgyNzpcXHRcXHRcXHRrZXlfZGVzY3JpcHRvciB8PSBSU0lfV0VQX0tFWTtcXG4gODI4OlxcdFxcdFxcdGlmIChrZXlfbGVuIFxcdTAwM2U9IDEzKVxcbiA4Mjk6XFx0XFx0XFx0XFx0a2V5X2Rlc2NyaXB0b3IgfD0gUlNJX1dFUF9LRVlfMTA0O1xcbiA4MzA6XFx0XFx0fSBlbHNlIGlmIChjaXBoZXIgIT0gS0VZX1RZUEVfQ0xFQVIpIHtcXG4gODMxOlxcdFxcdFxcdGtleV9kZXNjcmlwdG9yIHw9IFJTSV9DSVBIRVJfV1BBO1xcbiA4MzI6XFx0XFx0XFx0aWYgKGNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9US0lQKVxcbiA4MzM6XFx0XFx0XFx0XFx0a2V5X2Rlc2NyaXB0b3IgfD0gUlNJX0NJUEhFUl9US0lQO1xcbiA4MzQ6XFx0XFx0fVxcbiA4MzU6XFx0XFx0a2V5X2Rlc2NyaXB0b3IgfD0gUlNJX1BST1RFQ1RfREFUQV9GUkFNRVM7XFxuIDgzNjpcXHRcXHRrZXlfZGVzY3JpcHRvciB8PSAoa2V5X2lkIFxcdTAwM2NcXHUwMDNjIFJTSV9LRVlfSURfT0ZGU0VUKTtcXG4gODM3OlxcdFxcbiA4Mzg6XFx0XFx0cnNpX3NldF9sZW5fcW5vKFxcdTAwMjZzZXRfa2V5LVxcdTAwM2VkZXNjX2R3b3JkMC5sZW5fcW5vLFxcbiA4Mzk6XFx0XFx0XFx0XFx0KGZyYW1lX2xlbiAtIEZSQU1FX0RFU0NfU1opLCBSU0lfV0lGSV9NR01UX1EpO1xcbiA4NDA6XFx0XFx0c2V0X2tleS1cXHUwMDNlZGVzY19kd29yZDAuZnJhbWVfdHlwZSA9IFNFVF9LRVlfUkVRO1xcbiA4NDE6XFx0XFx0c2V0X2tleS1cXHUwMDNla2V5X2Rlc2MgPSBjcHVfdG9fbGUxNihrZXlfZGVzY3JpcHRvcik7XFxuIDg0MjpcXHRcXHRzZXRfa2V5LVxcdTAwM2VzdGFfaWQgPSBzdGFfaWQ7XFxuIDg0MzpcXHRcXG4gODQ0OlxcdFxcdGlmIChkYXRhKSB7XFxuIDg0NTpcXHRcXHRcXHRpZiAoKGNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MCkgfHxcXG4gODQ2OlxcdFxcdFxcdCAgICAoY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNCkpIHtcXG4gODQ3OlxcdFxcdFxcdFxcdG1lbWNweShcXHUwMDI2c2V0X2tleS1cXHUwMDNla2V5W2tleV9pZF1bMV0sIGRhdGEsIGtleV9sZW4gKiAyKTtcXG4gODQ4OlxcdFxcdFxcdH0gZWxzZSB7XFxuIDg0OTpcXHRcXHRcXHRcXHRtZW1jcHkoXFx1MDAyNnNldF9rZXktXFx1MDAzZWtleVswXVswXSwgZGF0YSwga2V5X2xlbik7XFxuIDg1MDpcXHRcXHRcXHR9XFxuIDg1MTpcXHRcXHRcXHRpZiAoY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVApIHtcXG4gODUyOlxcdFxcdFxcdFxcdG1lbWNweShzZXRfa2V5LVxcdTAwM2V0eF9taWNfa2V5LCBcXHUwMDI2ZGF0YVsxNl0sIDgpO1xcbiA4NTM6XFx0XFx0XFx0XFx0bWVtY3B5KHNldF9rZXktXFx1MDAzZXJ4X21pY19rZXksIFxcdTAwMjZkYXRhWzI0XSwgOCk7XFxuIDg1NDpcXHRcXHRcXHR9XFxuIDg1NTpcXHRcXHR9IGVsc2Uge1xcbiA4NTY6XFx0XFx0XFx0bWVtc2V0KFxcdTAwMjZzZXRfa2V5W0ZSQU1FX0RFU0NfU1pdLCAwLCBmcmFtZV9sZW4gLSBGUkFNRV9ERVNDX1NaKTtcXG4gODU3OlxcdFxcdH1cXG4gODU4OlxcdFxcbiA4NTk6XFx0XFx0c2tiX3B1dChza2IsIGZyYW1lX2xlbik7XFxuIDg2MDpcXHRcXG4gODYxOlxcdFxcdHJldHVybiByc2lfc2VuZF9pbnRlcm5hbF9tZ210X2ZyYW1lKGNvbW1vbiwgc2tiKTtcXG4gODYyOlxcdH1cXG4gODYzOlxcdFxcbiA4NjQ6XFx0LypcXG4gODY1OlxcdCAqIFRoaXMgZnVuY3Rpb24gc2VuZHMgdGhlIGNvbW1vbiBkZXZpY2UgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHRvIGRldmljZS5cXG4gODY2OlxcdCAqIFRoaXMgZnJhbWUgaW5jbHVkZXMgdGhlIHVzZWZ1bCBpbmZvcm1hdGlvbiB0byBtYWtlIGRldmljZSB3b3JrcyBvblxcbiA4Njc6XFx0ICogc3BlY2lmaWMgb3BlcmF0aW5nIG1vZGUuXFxuIDg2ODpcXHQgKi9cXG4gODY5OlxcdHN0YXRpYyBpbnQgcnNpX3NlbmRfY29tbW9uX2Rldl9wYXJhbXMoc3RydWN0IHJzaV9jb21tb24gKmNvbW1vbilcXG4gODcwOlxcdHtcXG4gODcxOlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIDg3MjpcXHRcXHR1MTYgZnJhbWVfbGVuO1xcbiA4NzM6XFx0XFx0c3RydWN0IHJzaV9jb25maWdfdmFscyAqZGV2X2NmZ3M7XFxuIDg3NDpcXHRcXG4gODc1OlxcdFxcdGZyYW1lX2xlbiA9IHNpemVvZihzdHJ1Y3QgcnNpX2NvbmZpZ192YWxzKTtcXG4gODc2OlxcdFxcbiA4Nzc6XFx0XFx0cnNpX2RiZyhNR01UX1RYX1pPTkUsIFxcXCJTZW5kaW5nIGNvbW1vbiBkZXZpY2UgY29uZmlnIHBhcmFtc1xcXFxuXFxcIik7XFxuIDg3ODpcXHRcXHRza2IgPSBkZXZfYWxsb2Nfc2tiKGZyYW1lX2xlbik7XFxuIDg3OTpcXHRcXHRpZiAoIXNrYikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDo0NTo1NS40NTE4NjIyNloiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTc4MTg5MTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGZ1bmN0aW9uOlxuXG4qKkRpdmluZyBpbnRvIGByc2lfaGFsX2xvYWRfa2V5YCAtIENvbnRleHQgaXMgS2V5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHJzaV9oYWxfbG9hZF9rZXlgLCBhbmQgdGhlIGZpcnN0IHRoaW5nIEkgZG8gaXMgbWVudGFsbHkgcmV3aW5kLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgKnByZWNlZGluZyogdGhpcyBmdW5jdGlvbiBjYWxsLiBJIG5lZWQgdGhlIGNvbnRleHQuIFdoYXQncyB0aGUgZ2VuZXJhbCBmbG93IG9mIGV4ZWN1dGlvbiBsZWFkaW5nIHVwIHRvIHRoaXMgcG9pbnQ/IFdoYXQncyB0aGUgc3lzdGVtIGRvaW5nPyBXaGF0IGFyZSB0aGUgaGlnaC1sZXZlbCBnb2FscyBvZiB0aGUgY29kZT8gSXMgdGhpcyBhIGNyaXRpY2FsIHNlY3VyaXR5IGZ1bmN0aW9uLCBvciBqdXN0IHNvbWUgcm91dGluZSBpbml0aWFsaXphdGlvbj8gVW5kZXJzdGFuZGluZyB0aGUgcHJlY2VkaW5nIGxpbmVzIHdpbGwgaW5zdGFudGx5IGluZm9ybSBteSBtZW50YWwgbW9kZWwgb2Ygd2hhdCBgcnNpX2hhbF9sb2FkX2tleWAgKnNob3VsZCogYmUgZG9pbmcuIEknbSB0aGlua2luZyBhYm91dCB0aGUgaW5wdXRzIOKAkyB3aGF0IGRhdGEgaXMgYmVpbmcgcGFzc2VkIGluPyBLZXlzLCBjZXJ0aWZpY2F0ZXMsIHNvbWUgb3RoZXIgZm9ybSBvZiBhdXRob3JpemF0aW9uIGRhdGE/IEFuZCB0aGUgb3V0cHV0Li4uIHdoYXQncyB0aGUgZXhwZWN0ZWQgcmVzdWx0PyBTdWNjZXNzZnVsIGtleSBsb2FkLCBlcnJvciBjb2Rlcz8gSXMgdGhlcmUgYW55IGxvZ2dpbmcgYmVpbmcgdXNlZD8gVW5kZXJzdGFuZGluZyB0aGVzZSB0aGluZ3Mgd291bGQgbWFrZSBpdCBlYXNpZXIgdG8gZGVidWcuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTEzLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDo0NTo1OS42MzAwNTQxMzRaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyOTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X21nbXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3ODAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3ODA6XFx0LyoqXFxuIDc4MTpcXHQgKiByc2lfaGFsX2xvYWRfa2V5KCkgLSBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gbG9hZCBrZXlzIHdpdGhpbiB0aGUgZmlybXdhcmUuXFxuIDc4MjpcXHQgKiBAY29tbW9uOiBQb2ludGVyIHRvIHRoZSBkcml2ZXIgcHJpdmF0ZSBzdHJ1Y3R1cmUuXFxuIDc4MzpcXHQgKiBAZGF0YTogUG9pbnRlciB0byB0aGUga2V5IGRhdGEuXFxuIDc4NDpcXHQgKiBAa2V5X2xlbjogS2V5IGxlbmd0aCB0byBiZSBsb2FkZWQuXFxuIDc4NTpcXHQgKiBAa2V5X3R5cGU6IFR5cGUgb2Yga2V5OiBHUk9VUC9QQUlSV0lTRS5cXG4gNzg2OlxcdCAqIEBrZXlfaWQ6IEtleSBpbmRleC5cXG4gNzg3OlxcdCAqIEBjaXBoZXI6IFR5cGUgb2YgY2lwaGVyIHVzZWQuXFxuIDc4ODpcXHQgKiBAc3RhX2lkOiBTdGF0aW9uIGlkLlxcbiA3ODk6XFx0ICogQHZpZjogUG9pbnRlciB0byB0aGUgaWVlZTgwMjExX3ZpZiBzdHJ1Y3R1cmUuXFxuIDc5MDpcXHQgKlxcbiA3OTE6XFx0ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuXFxuIDc5MjpcXHQgKi9cXG4gNzkzOlxcdGludCByc2lfaGFsX2xvYWRfa2V5KHN0cnVjdCByc2lfY29tbW9uICpjb21tb24sXFxuIDc5NDpcXHRcXHRcXHQgICAgIHU4ICpkYXRhLFxcbiA3OTU6XFx0XFx0XFx0ICAgICB1MTYga2V5X2xlbixcXG4gNzk2OlxcdFxcdFxcdCAgICAgdTgga2V5X3R5cGUsXFxuIDc5NzpcXHRcXHRcXHQgICAgIHU4IGtleV9pZCxcXG4gNzk4OlxcdFxcdFxcdCAgICAgdTMyIGNpcGhlcixcXG4gNzk5OlxcdFxcdFxcdCAgICAgczE2IHN0YV9pZCxcXG4gODAwOlxcdFxcdFxcdCAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZilcXG4gODAxOlxcdHtcXG4gODAyOlxcdFxcdHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMO1xcbiA4MDM6XFx0XFx0c3RydWN0IHJzaV9zZXRfa2V5ICpzZXRfa2V5O1xcbiA4MDQ6XFx0XFx0dTE2IGtleV9kZXNjcmlwdG9yID0gMDtcXG4gODA1OlxcdFxcdHUxNiBmcmFtZV9sZW4gPSBzaXplb2Yoc3RydWN0IHJzaV9zZXRfa2V5KTtcXG4gODA2OlxcdFxcbiA4MDc6XFx0XFx0cnNpX2RiZyhNR01UX1RYX1pPTkUsIFxcXCIlczogU2VuZGluZyBsb2FkIGtleSBmcmFtZVxcXFxuXFxcIiwgX19mdW5jX18pO1xcbiA4MDg6XFx0XFxuIDgwOTpcXHRcXHRza2IgPSBkZXZfYWxsb2Nfc2tiKGZyYW1lX2xlbik7XFxuIDgxMDpcXHRcXHRpZiAoIXNrYikge1xcbiA4MTE6XFx0XFx0XFx0cnNpX2RiZyhFUlJfWk9ORSwgXFxcIiVzOiBGYWlsZWQgaW4gYWxsb2NhdGlvbiBvZiBza2JcXFxcblxcXCIsXFxuIDgxMjpcXHRcXHRcXHRcXHRfX2Z1bmNfXyk7XFxuIDgxMzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gODE0OlxcdFxcdH1cXG4gODE1OlxcdFxcbiA4MTY6XFx0XFx0bWVtc2V0KHNrYi1cXHUwMDNlZGF0YSwgMCwgZnJhbWVfbGVuKTtcXG4gODE3OlxcdFxcdHNldF9rZXkgPSAoc3RydWN0IHJzaV9zZXRfa2V5ICopc2tiLVxcdTAwM2VkYXRhO1xcbiA4MTg6XFx0XFxuIDgxOTpcXHRcXHRpZiAoa2V5X3R5cGUgPT0gUlNJX0dST1VQX0tFWSkge1xcbiA4MjA6XFx0XFx0XFx0a2V5X2Rlc2NyaXB0b3IgPSBSU0lfS0VZX1RZUEVfQlJPQURDQVNUO1xcbiA4MjE6XFx0XFx0XFx0aWYgKHZpZi1cXHUwMDNldHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUClcXG4gODIyOlxcdFxcdFxcdFxcdGtleV9kZXNjcmlwdG9yIHw9IFJTSV9LRVlfTU9ERV9BUDtcXG4gODIzOlxcdFxcdH1cXG4gODI0OlxcdFxcdGlmICgoY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwKSB8fFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDo0NTo1OS42MzAyNDk4ODRaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA0MzM2NTk1NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFdpcmVsZXNzIERyaXZlciBLZXkgTG9hZGluZyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IG9mIHRoaXMgcGF0Y2gsIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiBgcnNpX2hhbF9sb2FkX2tleWAsIGlzIHRoYXQgaXQgYWRkcmVzc2VzIGEgY2xlYXIgb3V0LW9mLWJvdW5kcyByZWFkIHZ1bG5lcmFiaWxpdHkuIEhlcmUncyB3aGF0IEkgc2VlOlxuXG5UaGUgY29kZSwgYmVmb3JlIHRoZSBwYXRjaCwgY29waWVzIHRoZSB0ZW1wb3JhbCBrZXkgYW5kLCBjcnVjaWFsbHksIHRoZSBNSUMga2V5cyBmcm9tIHRoZSBgZGF0YWAgYnVmZmVyLiBUaGUgcHJvYmxlbSBpcywgd2hlbiB0aGUgY2lwaGVyIGlzbid0IFRLSVAgKHRoaW5rIENDTVAsIEFFUywgZXRjLiksIHRoZSBga2V5X2xlbmAgY2FuIGJlIGFzIHNtYWxsIGFzIDE2IGJ5dGVzLiBIb3dldmVyLCB0aGUgY29kZSB3b3VsZCBzdGlsbCBhdHRlbXB0IHRvIHJlYWQgdGhlIFRYIGFuZCBSWCBNSUMga2V5cyBmcm9tIGBcdTAwMjZkYXRhWzE2XWAgYW5kIGBcdTAwMjZkYXRhWzI0XWAsIHJlc3BlY3RpdmVseS4gVGhpcyBpcyBhIGNsYXNzaWMgYnVmZmVyIG92ZXItcmVhZCwgYW5kIHNvbWV0aGluZyBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU0FOaXRpemVyKSBpcyBkZXNpZ25lZCB0byBjYXRjaCwgYW5kIGRpZCBjYXRjaC4gV2UgYXJlIHJlYWRpbmcgYmV5b25kIHRoZSBhbGxvY2F0ZWQgYm91bmRhcnkgb2YgYGRhdGFgLlxuXG5UaGlzIHBhdGNoIHNvbHZlcyB0aGlzIGJ5ICpvbmx5KiBjb3B5aW5nIHRoZSBNSUMga2V5cyB3aGVuIHRoZSBgY2lwaGVyYCBpcyBzcGVjaWZpY2FsbHkgYFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVBgLCB3aGVyZSB0aGUga2V5IGRhdGEgaXMgZXhwZWN0ZWQgdG8gYmUgMzIgYnl0ZXMgKDE2LWJ5dGUgdGVtcG9yYWwga2V5ICsgOC1ieXRlIFRYIE1JQyArIDgtYnl0ZSBSWCBNSUMpLiBJbiBhbGwgb3RoZXIgY2FzZXMsIGl0IGF2b2lkcyBhY2Nlc3NpbmcgdGhlc2Ugb3V0LW9mLWJvdW5kcyByZWdpb25zIG9mIGBkYXRhYC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGlzIHRoaXMgYSBLTVNBTiAoS2VybmVsIE1lbW9yeSBTQU5pdGl6ZXIpIGlzc3VlPyBObywgYW5kIGhlcmUncyB3aHkuIFRoZSBgc2tiLVx1MDAzZWRhdGFgIGJ1ZmZlciwgd2hpY2ggaXMgd2hlcmUgdGhpcyBkYXRhIGVuZHMgdXAsIGlzIGV4cGxpY2l0bHkgemVyb2VkIG91dCB3aXRoIGBtZW1zZXQoc2tiLVx1MDAzZWRhdGEsIDAsIGZyYW1lX2xlbilgIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZ1bmN0aW9uLiBUaGlzIG1lYW5zIHRoZXJlJ3Mgbm8gcXVlc3Rpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCwgbGVha2VkLCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS4gS01TQU4gaXMgZm9yIGRldGVjdGluZyBhbmQgcHJldmVudGluZyB0aGUgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBpcyAqbm90KiB3aGF0J3MgaGFwcGVuaW5nIGhlcmUuIFRoZSBwcmV2aW91cyBjb2RlICpkaWQqIGhhdmUgYW4gb3V0LW9mLWJvdW5kcyByZWFkLCBkZXRlY3RlZCBieSBLQVNBTi5cblxuTGV0J3MgZG91YmxlLWNoZWNrIGFsbCBhc3BlY3RzOlxuXG4xLiAgVGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBvciBtb2RpZnkga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLiBJdCBzZW5kcyBhIG1hbmFnZW1lbnQgZnJhbWUgaW50ZXJuYWxseSB0byB0aGUgd2lyZWxlc3MgY2FyZCBvciBmaXJtd2FyZSB2aWEgYHJzaV9zZW5kX2ludGVybmFsX21nbXRfZnJhbWVgLlxuMi4gIEl0IGRvZXNuJ3QgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlIGBza2ItXHUwMDNlZGF0YWAgaXMgZXhwbGljaXRseSB6ZXJvZWQuXG4zLiAgVGhlIHByZXZpb3VzIGJ1ZyB3YXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkLiBUaGlzIHBhdGNoIHByZXZlbnRzIHRoYXQuIEtBU0FOIGNhdWdodCB0aGUgYnVnIGluIHRoZSBmaXJzdCBwbGFjZSwgYW5kIHRoaXMgcGF0Y2ggY29ycmVjdGx5IGZpeGVzIGl0LlxuNC4gIEtNU0FOIGlzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhpcyBwYXRjaCBpcyBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyBmaXguXG5cblNvLCBpbiBzdW1tYXJ5LCB3ZSdyZSBmaXhpbmcgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHZ1bG5lcmFiaWxpdHkgYW5kIGl0J3MgYSBLQVNBTiBpc3N1ZSwgYW5kIHRoZXJlJ3Mgbm8gS01TQU4gY29uY2Vybi4gVGhlIGtleSBhc3BlY3QgaGVyZSBpcyB0aGUgY2xlYXIgZGlzdGluY3Rpb24gYmV0d2VlbiBhbiBvdXQtb2YtYm91bmRzIHJlYWQsIGFuZCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLlxuXG5MZXQncyBzdW1tYXJpemUgdGhpcyBjbGVhcmx5OlxuKiAgIFRoZSBwYXRjaCAqcmVzdHJpY3RzKiB0aGUgTUlDIGtleSBjb3BpZXMgb25seSB0byB3aGVuIGBjaXBoZXJgIGlzIGBXTEFOX0NJUEhFUl9TVUlURV9US0lQYC4gVGhlIHByZXZpb3VzIGNvZGUgZGlkIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBvbiBgZGF0YWAgZm9yIG90aGVyIGNpcGhlcnMuXG4qICAgS0FTQU4gZGV0ZWN0cyBvdXQtb2YtYm91bmRzIHJlYWRzIHdoaWNoIGlzIHRoZSBidWcgYW5kIGlzIGZpeGVkIGhlcmUuXG4qICAgVGhlIGBza2ItXHUwMDNlZGF0YWAgYnVmZmVyIGlzIHplcm9lZCwgYW5kIG5vdGhpbmcgdW5pbml0aWFsaXplZCBpcyBsZWFrZWQsIHVzZWQgb3IgcmVhZC5cbiogICBUaGVyZWZvcmUsIE5lZWRzS01TQU4gPSBgZmFsc2VgLlxuXG5Ob3csIHRvIHNldCB0aGUgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU2NywiT3V0cHV0VG9rZW5zIjoyNDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6NDY6MTAuMDYzOTEyODY0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgYnVnIGluIHJzaV9oYWxfbG9hZF9rZXkoKSB3aGVyZSA4LWJ5dGUgVFggYW5kIFJYIE1JQyBrZXlzIHdlcmUgdW5jb25kaXRpb25hbGx5IHJlYWQgZnJvbSBcXHUwMDI2ZGF0YVsxNl0gYW5kIFxcdTAwMjZkYXRhWzI0XSwgZXZlbiB3aGVuIHRoZSBjaXBoZXIgc3VpdGUgd2FzIG5vdCBUS0lQIChzdWNoIGFzIENDTVAvQUVTIHdoZXJlIHRoZSBrZXkgYnVmZmVyIGlzIG9ubHkgMTYgYnl0ZXMgbG9uZykuXFxuXFxuMS4gS0FTQU4gYXBwbGljYWJpbGl0eTogT3V0LW9mLWJvdW5kcyByZWFkcyBvbiBoZWFwIG9yIHN0YWNrIGJ1ZmZlcnMgKHN1Y2ggYXMgYWNjZXNzaW5nIHBhc3QgdGhlIDE2LWJ5dGUga2V5IGJ1ZmZlcikgYXJlIGRpcmVjdGx5IGRldGVjdGFibGUgYnkgS0FTQU4uXFxuMi4gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIGZyYW1lIGJ1ZmZlciBpbiB0aGUgc2tiIGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgdXBmcm9udCB2aWEgYG1lbXNldChza2ItXFx1MDAzZWRhdGEsIDAsIGZyYW1lX2xlbilgLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuXFxuXFxuU2luY2UgdGhlIGlzc3VlIGlzIHN0cmljdGx5IGFuIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcyBjYXVnaHQgYnkgS0FTQU4gYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgYnVnIGluIHJzaV9oYWxfbG9hZF9rZXkoKSB3aGVyZSA4LWJ5dGUgVFggYW5kIFJYIE1JQyBrZXlzIHdlcmUgdW5jb25kaXRpb25hbGx5IHJlYWQgZnJvbSBcXHUwMDI2ZGF0YVsxNl0gYW5kIFxcdTAwMjZkYXRhWzI0XSwgZXZlbiB3aGVuIHRoZSBjaXBoZXIgc3VpdGUgd2FzIG5vdCBUS0lQIChzdWNoIGFzIENDTVAvQUVTIHdoZXJlIHRoZSBrZXkgYnVmZmVyIGlzIG9ubHkgMTYgYnl0ZXMgbG9uZykuXFxuXFxuMS4gS0FTQU4gYXBwbGljYWJpbGl0eTogT3V0LW9mLWJvdW5kcyByZWFkcyBvbiBoZWFwIG9yIHN0YWNrIGJ1ZmZlcnMgKHN1Y2ggYXMgYWNjZXNzaW5nIHBhc3QgdGhlIDE2LWJ5dGUga2V5IGJ1ZmZlcikgYXJlIGRpcmVjdGx5IGRldGVjdGFibGUgYnkgS0FTQU4uXFxuMi4gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIGZyYW1lIGJ1ZmZlciBpbiB0aGUgc2tiIGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgdXBmcm9udCB2aWEgYG1lbXNldChza2ItXFx1MDAzZWRhdGEsIDAsIGZyYW1lX2xlbilgLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuXFxuXFxuU2luY2UgdGhlIGlzc3VlIGlzIHN0cmljdGx5IGFuIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcyBjYXVnaHQgYnkgS0FTQU4gYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowgv4ct[1] Phase: Succeeded StartedAt: 2026-08-31 20:46:21 +0000 UTC FinishedAt: 2026-08-31 20:46:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv4ct[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-31 20:46:21 +0000 UTC FinishedAt: 2026-08-31 20:46:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv4ct[2] Phase: Succeeded StartedAt: 2026-08-31 20:46:21 +0000 UTC FinishedAt: 2026-08-31 22:27:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv4ct[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_hal_load_key","rsi_mac80211_set_key"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"a2818165-0bcc-4e1f-9e41-ae6efb2e1020","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-31 20:46:21 +0000 UTC FinishedAt: 2026-08-31 22:27:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_hal_load_key","rsi_mac80211_set_key"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"a2818165-0bcc-4e1f-9e41-ae6efb2e1020","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowgv4ct[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_hal_load_key","rsi_mac80211_set_key"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"a2818165-0bcc-4e1f-9e41-ae6efb2e1020","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-31 20:46:21 +0000 UTC FinishedAt: 2026-08-31 20:46:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv4ct[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_hal_load_key","rsi_mac80211_set_key"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"a2818165-0bcc-4e1f-9e41-ae6efb2e1020","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-31 20:46:21 +0000 UTC FinishedAt: 2026-08-31 20:46:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowgv4ct/series-workflowgv4ct-convert-artifact-2927908033/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgv4ct[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_hal_load_key","rsi_mac80211_set_key"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"a2818165-0bcc-4e1f-9e41-ae6efb2e1020","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-31 20:46:31 +0000 UTC FinishedAt: 2026-08-31 21:04:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv4ct[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_hal_load_key","rsi_mac80211_set_key"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"a2818165-0bcc-4e1f-9e41-ae6efb2e1020","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-31 20:46:31 +0000 UTC FinishedAt: 2026-08-31 21:04:41 +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:*ebe72b70-a456-4e6d-84b8-44200b950952,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-workflowgv4ct/series-workflowgv4ct-convert-artifact-2927908033/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": "72d5720e-f763-4343-8bc0-a43f3e87ac96", "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-workflowgv4ct/series-workflowgv4ct-build-action-1754364655/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgv4ct[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_hal_load_key","rsi_mac80211_set_key"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"a2818165-0bcc-4e1f-9e41-ae6efb2e1020","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-31 20:46:31 +0000 UTC FinishedAt: 2026-08-31 21:04:31 +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:*ebe72b70-a456-4e6d-84b8-44200b950952,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-workflowgv4ct/series-workflowgv4ct-convert-artifact-2927908033/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": "72d5720e-f763-4343-8bc0-a43f3e87ac96", "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-workflowgv4ct/series-workflowgv4ct-build-action-1754364655/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgv4ct[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_hal_load_key","rsi_mac80211_set_key"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"a2818165-0bcc-4e1f-9e41-ae6efb2e1020","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-31 21:04:41 +0000 UTC FinishedAt: 2026-08-31 21:04:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv4ct[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_hal_load_key","rsi_mac80211_set_key"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"a2818165-0bcc-4e1f-9e41-ae6efb2e1020","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-31 21:04:41 +0000 UTC FinishedAt: 2026-08-31 21:04:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv4ct[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_hal_load_key","rsi_mac80211_set_key"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"a2818165-0bcc-4e1f-9e41-ae6efb2e1020","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-31 21:04:41 +0000 UTC FinishedAt: 2026-08-31 21:04:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv4ct[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_hal_load_key","rsi_mac80211_set_key"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"a2818165-0bcc-4e1f-9e41-ae6efb2e1020","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-31 21:04:41 +0000 UTC FinishedAt: 2026-08-31 21:04:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"a2818165-0bcc-4e1f-9e41-ae6efb2e1020","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowgv4ct/series-workflowgv4ct-convert-artifact-2418080148/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgv4ct[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_hal_load_key","rsi_mac80211_set_key"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"a2818165-0bcc-4e1f-9e41-ae6efb2e1020","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-31 21:04:51 +0000 UTC FinishedAt: 2026-08-31 21:07:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv4ct[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_hal_load_key","rsi_mac80211_set_key"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"a2818165-0bcc-4e1f-9e41-ae6efb2e1020","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-31 21:04:51 +0000 UTC FinishedAt: 2026-08-31 21:06:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*72d5720e-f763-4343-8bc0-a43f3e87ac96,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-workflowgv4ct/series-workflowgv4ct-build-action-1754364655/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-workflowgv4ct[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_hal_load_key","rsi_mac80211_set_key"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"a2818165-0bcc-4e1f-9e41-ae6efb2e1020","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-31 21:07:01 +0000 UTC FinishedAt: 2026-08-31 21:07:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv4ct[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_hal_load_key","rsi_mac80211_set_key"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"a2818165-0bcc-4e1f-9e41-ae6efb2e1020","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-31 21:07:01 +0000 UTC FinishedAt: 2026-08-31 21:07:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv4ct[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_hal_load_key","rsi_mac80211_set_key"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"a2818165-0bcc-4e1f-9e41-ae6efb2e1020","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-31 21:07:01 +0000 UTC FinishedAt: 2026-08-31 21:22:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv4ct[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_hal_load_key","rsi_mac80211_set_key"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"a2818165-0bcc-4e1f-9e41-ae6efb2e1020","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-31 21:07:01 +0000 UTC FinishedAt: 2026-08-31 21:22:43 +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:*ebe72b70-a456-4e6d-84b8-44200b950952,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-workflowgv4ct/series-workflowgv4ct-convert-artifact-2418080148/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": "e0d61840-c7d7-4027-aaa2-7092ff5a164d", "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-workflowgv4ct/series-workflowgv4ct-build-action-90792544/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgv4ct[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_hal_load_key","rsi_mac80211_set_key"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"a2818165-0bcc-4e1f-9e41-ae6efb2e1020","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-31 21:07:01 +0000 UTC FinishedAt: 2026-08-31 21:22:33 +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:*ebe72b70-a456-4e6d-84b8-44200b950952,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-workflowgv4ct/series-workflowgv4ct-convert-artifact-2418080148/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": "e0d61840-c7d7-4027-aaa2-7092ff5a164d", "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-workflowgv4ct/series-workflowgv4ct-build-action-90792544/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgv4ct[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_hal_load_key","rsi_mac80211_set_key"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"a2818165-0bcc-4e1f-9e41-ae6efb2e1020","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-31 21:22:43 +0000 UTC FinishedAt: 2026-08-31 21:22:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv4ct[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_hal_load_key","rsi_mac80211_set_key"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"a2818165-0bcc-4e1f-9e41-ae6efb2e1020","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-31 21:22:43 +0000 UTC FinishedAt: 2026-08-31 21:22:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv4ct[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_hal_load_key","rsi_mac80211_set_key"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"a2818165-0bcc-4e1f-9e41-ae6efb2e1020","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-31 21:22:43 +0000 UTC FinishedAt: 2026-08-31 21:24:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv4ct[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_hal_load_key","rsi_mac80211_set_key"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"a2818165-0bcc-4e1f-9e41-ae6efb2e1020","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-31 21:22:43 +0000 UTC FinishedAt: 2026-08-31 21:24:50 +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:*e0d61840-c7d7-4027-aaa2-7092ff5a164d,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-workflowgv4ct/series-workflowgv4ct-build-action-90792544/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-workflowgv4ct[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_hal_load_key","rsi_mac80211_set_key"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"a2818165-0bcc-4e1f-9e41-ae6efb2e1020","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-31 21:24:59 +0000 UTC FinishedAt: 2026-08-31 22:27:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv4ct[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_hal_load_key","rsi_mac80211_set_key"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"a2818165-0bcc-4e1f-9e41-ae6efb2e1020","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-31 21:24:59 +0000 UTC FinishedAt: 2026-08-31 22:27:11 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_hal_load_key","rsi_mac80211_set_key"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*72d5720e-f763-4343-8bc0-a43f3e87ac96,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e0d61840-c7d7-4027-aaa2-7092ff5a164d,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-workflowgv4ct/series-workflowgv4ct-build-action-1754364655/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-workflowgv4ct/series-workflowgv4ct-build-action-90792544/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowgv4ct[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_hal_load_key","rsi_mac80211_set_key"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"a2818165-0bcc-4e1f-9e41-ae6efb2e1020","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-31 21:24:59 +0000 UTC FinishedAt: 2026-08-31 21:25:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv4ct[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_hal_load_key","rsi_mac80211_set_key"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"a2818165-0bcc-4e1f-9e41-ae6efb2e1020","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-31 21:24:59 +0000 UTC FinishedAt: 2026-08-31 21:25:04 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_hal_load_key","rsi_mac80211_set_key"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowgv4ct/series-workflowgv4ct-convert-artifact-2071065277/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgv4ct[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_hal_load_key","rsi_mac80211_set_key"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"a2818165-0bcc-4e1f-9e41-ae6efb2e1020","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-31 21:24:59 +0000 UTC FinishedAt: 2026-08-31 21:24:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv4ct[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_hal_load_key","rsi_mac80211_set_key"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"a2818165-0bcc-4e1f-9e41-ae6efb2e1020","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-31 21:24:59 +0000 UTC FinishedAt: 2026-08-31 21:24:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv4ct[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_hal_load_key","rsi_mac80211_set_key"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"a2818165-0bcc-4e1f-9e41-ae6efb2e1020","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-31 21:24:59 +0000 UTC FinishedAt: 2026-08-31 21:24:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv4ct[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_hal_load_key","rsi_mac80211_set_key"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"a2818165-0bcc-4e1f-9e41-ae6efb2e1020","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-31 21:25:09 +0000 UTC FinishedAt: 2026-08-31 22:27:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgv4ct[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rsi_hal_load_key","rsi_mac80211_set_key"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"881dc9dd66d2367e7fe1be0f953a8837cb3b26a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_RSI","RSI_91X","RSI_USB","MAC80211","USB"],"series_id":"a2818165-0bcc-4e1f-9e41-ae6efb2e1020","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-31 21:25:09 +0000 UTC FinishedAt: 2026-08-31 22:27:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*72d5720e-f763-4343-8bc0-a43f3e87ac96,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e0d61840-c7d7-4027-aaa2-7092ff5a164d,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-workflowgv4ct/series-workflowgv4ct-build-action-1754364655/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-workflowgv4ct/series-workflowgv4ct-build-action-90792544/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-workflowgv4ct/series-workflowgv4ct-convert-artifact-2071065277/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,}