Name: series-workflowbmktt Phase: Succeeded StartedAt: 2026-08-19 02:41:05 +0000 UTC FinishedAt: 2026-08-19 04:29:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmktt[0] Phase: Succeeded StartedAt: 2026-08-19 02:41:05 +0000 UTC FinishedAt: 2026-08-19 03:01:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmktt[0].run-triage Phase: Succeeded StartedAt: 2026-08-19 02:41:05 +0000 UTC FinishedAt: 2026-08-19 03:01:48 +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": "c71bf113dfdf426bdaf106636f573ef87b6613a0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SMC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "c71bf113dfdf426bdaf106636f573ef87b6613a0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SMC" ], "series_id": "8e513e93-1cee-48d0-8217-e5a656ff8207" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "smc_llc_cli_add_link", "smc_llc_srv_add_link", "smc_llc_add_link_local", "smc_llc_srv_delete_link_local" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE5IDAyOjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NNQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NtY19sbGNfY2xpX2FkZF9saW5rJiMzNDssCiAgICAmIzM0O3NtY19sbGNfc3J2X2FkZF9saW5rJiMzNDssCiAgICAmIzM0O3NtY19sbGNfYWRkX2xpbmtfbG9jYWwmIzM0OywKICAgICYjMzQ7c21jX2xsY19zcnZfZGVsZXRlX2xpbmtfbG9jYWwmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIFNNQy1SdjIgTExDIG1lc3NhZ2UgaGFuZGxpbmcgd2hlcmUgYSBzaGFyZWQgRE1BIHJlY2VpdmUgYnVmZmVyIChgd3JfcnhfYnVmX3YyYCkgY291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgYSBuZXcgaW5jb21pbmcgbWVzc2FnZSBiZWZvcmUgdGhlIHdvcmtlciB0aHJlYWQgcHJvY2Vzc2VkIHRoZSBwcmV2aW91cyBvbmUuIEl0IHJlc29sdmVzIHRoaXMgYnkgY29weWluZyB0aGUgc3BpbGxvdmVyIGJ5dGVzIG9mIHRoZSBtZXNzYWdlIGludG8gYSBmbGV4aWJsZSBhcnJheSBpbiBgc3RydWN0IHNtY19sbGNfcWVudHJ5YCBhdCB0aGUgdGltZSBvZiByZWNlcHRpb24uIEl0IGFsc28gYWRkcyBib3VuZHMgY2hlY2tzIHRvIGVuc3VyZSBtZXNzYWdlIHBhcnNpbmcgZG9lcyBub3QgcmVhZCBwYXN0IHRoZSBhY3R1YWwgcmVjZWl2ZWQgbGVuZ3RoLlxuXG5CZWZvcmUgdGhpcyBwYXRjaCwgcmVhZGluZyBwYXN0IHRoZSByZWNlaXZlZCBsZW5ndGggd291bGQgcmVhZCBmcm9tIHRoZSByZW1haW5kZXIgb2YgdGhlIHJlY2VpdmUgYnVmZmVyLiBTaW5jZSB0aGlzIGJ1ZmZlciBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AgKG9yIGBrY2FsbG9jYCksIHRoZSBtZW1vcnkgd2FzIHplcm8taW5pdGlhbGl6ZWQsIG1lYW5pbmcgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgd2FzIGFjY2Vzc2VkLiBcblxuVGhlIG5ld2x5IGludHJvZHVjZWQgYHN0cnVjdCBzbWNfbGxjX3FlbnRyeWAgaXMgc3RyaWN0bHkgYW4gaW50ZXJuYWwga2VybmVsIHN0cnVjdHVyZSB1c2VkIGZvciBxdWV1aW5nIG1lc3NhZ2VzIHRvIGEgd29ya2VyIHRocmVhZC4gSXQgaXMgbmV2ZXIgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3Igc2VudCBvdmVyIHRoZSBuZXR3b3JrLCBzbyBhbnkgc3RydWN0IHBhZGRpbmcgY2Fubm90IGNhdXNlIGFuIGluZm8tbGVhay4gRnVydGhlcm1vcmUsIGFsbCBmaWVsZHMgYW5kIHRoZSBmbGV4aWJsZSBhcnJheSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBkdXJpbmcgYWxsb2NhdGlvbiBpbiBgc21jX2xsY19lbnF1ZXVlYC4gTWVzc2FnZXMgZ2VuZXJhdGVkIGxvY2FsbHkgYW5kIHNlbnQgb3ZlciB0aGUgbmV0d29yayBhcmUgZnVsbHkgemVyb2VkIHVzaW5nIGBtZW1zZXRgIGJlZm9yZSB0cmFuc21pc3Npb24uXG5cblNpbmNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2VzIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgcGF0Y2gsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBTTUMgTExDIG1lc3NhZ2UgZW5xdWV1ZWluZyB3aGVyZSBsYXJnZSBTTUMtUnYyIG1lc3NhZ2VzIChsaWtlIEFERF9MSU5LIGFuZCBERUxFVEVfUktFWV9WMikgd2VyZSBvdmVyZmxvd2luZyB0aGUgYWxsb2NhdGVkIHNtY19sbGNfcWVudHJ5IGJ1ZmZlci4gSXQgaW50cm9kdWNlcyBhIGZsZXhpYmxlIGFycmF5IG1lbWJlciB0byBkeW5hbWljYWxseSBhbGxvY2F0ZSB0aGUgYnVmZmVyIGJhc2VkIG9uIHRoZSBtZXNzYWdlIHNpemUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBTTUMgTExDIHByb2Nlc3NpbmcgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgQUZfU01DIHNvY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDI6NTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2ZjJhODYwOTNjZGExNGQ2ZjQ3ZmQ5OTdiY2Q1M2JlZDFlM2RiMWRlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTkgMDI6NTc6NDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfbGxjLmMgYi9uZXQvc21jL3NtY19sbGMuY1xuaW5kZXggOTU0YjJmZjE4MTVjMi4uMzkzYWEwYWYxOGQxZCAxMDA2NDRcbi0tLSBhL25ldC9zbWMvc21jX2xsYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL3NtY19sbGMuY1xuQEAgLTE1Nyw2ICYjNDM7MTU3LDcgQEAgc3RydWN0IHNtY19sbGNfbXNnX2NvbmZpcm1fcmtleSB7XHQvKiB0eXBlIDB4MDYgKi9cbiB9O1xuIFxuICNkZWZpbmUgU01DX0xMQ19ERUxfUktFWV9NQVhcdDhcbiYjNDM7I2RlZmluZSBTTUNfTExDX0RFTF9SS0VZX1YyX0lOTElORVx0OVxuICNkZWZpbmUgU01DX0xMQ19GTEFHX1JLRVlfUkVUUllcdDB4MTBcbiAjZGVmaW5lIFNNQ19MTENfRkxBR19SS0VZX05FR1x0MHgyMFxuIFxuQEAgLTE3Nyw2ICYjNDM7MTc4LDE1IEBAIHN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92MiB7XHQvKiB0eXBlIDB4MjkgKi9cbiBcdF9fYmUzMiBya2V5W107XG4gfTtcbiBcbiYjNDM7LyogdGhlIGxlYWRpbmcgcmtleXMgb2YgYSBERUxFVEVfUktFWV9WMiBmaXQgaW50byB1bmlvbiBzbWNfbGxjX21zZyAqL1xuJiM0MztzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXlfdjJfaW5saW5lIHtcdC8qIHR5cGUgMHgyOSAqL1xuJiM0MztcdHN0cnVjdCBzbWNfbGxjX2hkciBoZDtcbiYjNDM7XHR1OCBudW1fcmtleXM7XG4mIzQzO1x0dTggbnVtX2ludmFsX3JrZXlzO1xuJiM0MztcdHU4IHJlc2VydmVkWzJdO1xuJiM0MztcdF9fYmUzMiBya2V5W1NNQ19MTENfREVMX1JLRVlfVjJfSU5MSU5FXTtcbiYjNDM7fTtcbiYjNDM7XG4gdW5pb24gc21jX2xsY19tc2cge1xuIFx0c3RydWN0IHNtY19sbGNfbXNnX2NvbmZpcm1fbGluayBjb25maXJtX2xpbms7XG4gXHRzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmsgYWRkX2xpbms7XG5AQCAtMTg2LDYgJiM0MzsxOTYsNyBAQCB1bmlvbiBzbWNfbGxjX21zZyB7XG4gXG4gXHRzdHJ1Y3Qgc21jX2xsY19tc2dfY29uZmlybV9ya2V5IGNvbmZpcm1fcmtleTtcbiBcdHN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleSBkZWxldGVfcmtleTtcbiYjNDM7XHRzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXlfdjJfaW5saW5lIGRlbGV0ZV9ya2V5X3YyO1xuIFxuIFx0c3RydWN0IHNtY19sbGNfbXNnX3Rlc3RfbGluayB0ZXN0X2xpbms7XG4gXHRzdHJ1Y3Qge1xuQEAgLTE5NCwxNSAmIzQzOzIwNSwyNSBAQCB1bmlvbiBzbWNfbGxjX21zZyB7XG4gXHR9IHJhdztcbiB9O1xuIFxuJiM0MztzdGF0aWNfYXNzZXJ0KFNNQ19MTENfREVMX1JLRVlfVjJfSU5MSU5FID09XG4mIzQzO1x0ICAgICAgKHNpemVvZih1bmlvbiBzbWNfbGxjX21zZykgLVxuJiM0MztcdCAgICAgICBvZmZzZXRvZihzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXlfdjIsIHJrZXkpKSAvXG4mIzQzO1x0ICAgICAgc2l6ZW9mKF9fYmUzMikpO1xuJiM0MztzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKHN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92Ml9pbmxpbmUsIHJrZXkpID09XG4mIzQzO1x0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyLCBya2V5KSk7XG4mIzQzO1xuICNkZWZpbmUgU01DX0xMQ19GTEFHX1JFU1BcdFx0MHg4MFxuIFxuIHN0cnVjdCBzbWNfbGxjX3FlbnRyeSB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4gXHRzdHJ1Y3Qgc21jX2xpbmsgKmxpbms7XG4mIzQzO1x0dTE2IGJvZHlfbGVuO1xuIFx0dW5pb24gc21jX2xsY19tc2cgbXNnO1xuJiM0MztcdHU4IGJvZHlbXSBfX2NvdW50ZWRfYnkoYm9keV9sZW4pO1xuIH07XG4gXG4tc3RhdGljIHZvaWQgc21jX2xsY19lbnF1ZXVlKHN0cnVjdCBzbWNfbGluayAqbGluaywgdW5pb24gc21jX2xsY19tc2cgKmxsYyk7XG4mIzQzO3N0YXRpYyB2b2lkIHNtY19sbGNfZW5xdWV1ZShzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHVuaW9uIHNtY19sbGNfbXNnICpsbGMsXG4mIzQzO1x0XHRcdCAgICB1MzIgYnl0ZV9sZW4pO1xuIFxuIHN0cnVjdCBzbWNfbGxjX3FlbnRyeSAqc21jX2xsY19mbG93X3FlbnRyeV9jbHIoc3RydWN0IHNtY19sbGNfZmxvdyAqZmxvdylcbiB7XG5AQCAtOTk4LDE1ICYjNDM7MTAxOSwyMCBAQCBzdGF0aWMgaW50IHNtY19sbGNfY2xpX2NvbmZfbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG4gXG4gc3RhdGljIHZvaWQgc21jX2xsY19zYXZlX2FkZF9saW5rX3JrZXlzKHN0cnVjdCBzbWNfbGluayAqbGluayxcbiBcdFx0XHRcdFx0c3RydWN0IHNtY19saW5rICpsaW5rX25ldyxcbi1cdFx0XHRcdFx0dTggKmxsY19tc2cpXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnFlbnRyeSlcbiB7XG4mIzQzO1x0Y29uc3QgdTMyIHJ0X29mZiA9IG9mZnNldG9mKHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua192Ml9leHQsIHJ0KTtcbiBcdHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua192Ml9leHQgKmV4dDtcbiBcdHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyID0gbGluay1cdTAwM2VsZ3I7XG4gXHRpbnQgbWF4LCBpO1xuIFxuLVx0ZXh0ID0gKHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua192Ml9leHQgKikobGxjX21zZyAmIzQzO1xuLVx0XHRcdFx0XHRcdCAgICAgU01DX1dSX1RYX1NJWkUpO1xuJiM0MztcdC8qIHRoZSBya2V5IGNvdW50IGl0c2VsZiBpcyBvbmx5IHRoZXJlIGlmIGVub3VnaCBieXRlcyBhcnJpdmVkICovXG4mIzQzO1x0aWYgKHFlbnRyeS1cdTAwM2Vib2R5X2xlbiBcdTAwM2MgcnRfb2ZmKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGV4dCA9IChzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfdjJfZXh0ICopcWVudHJ5LVx1MDAzZWJvZHk7XG4gXHRtYXggPSBtaW5fdCh1OCwgZXh0LVx1MDAzZW51bV9ya2V5cywgU01DX0xMQ19SS0VZU19QRVJfTVNHX1YyKTtcbiYjNDM7XHRtYXggPSBtaW5fdCh1MzIsIG1heCwgKHFlbnRyeS1cdTAwM2Vib2R5X2xlbiAtIHJ0X29mZikgL1xuJiM0MztcdFx0XHQgICAgICBzaXplb2YoZXh0LVx1MDAzZXJ0WzBdKSk7XG4gXHRkb3duX3dyaXRlKFx1MDAyNmxnci1cdTAwM2VybWJzX2xvY2spO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbWF4OyBpJiM0MzsmIzQzOykge1xuIFx0XHRzbWNfcnRva2VuX3NldChsZ3IsIGxpbmstXHUwMDNlbGlua19pZHgsIGxpbmtfbmV3LVx1MDAzZWxpbmtfaWR4LFxuQEAgLTEwOTksOSAmIzQzOzExMjUsNyBAQCBpbnQgc21jX2xsY19jbGlfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLCBzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnFlbnRyeSlcbiBcdGlmIChyYylcbiBcdFx0Z290byBvdXRfY2xlYXJfbG5rO1xuIFx0aWYgKGxnci1cdTAwM2VzbWNfdmVyc2lvbiA9PSBTTUNfVjIpIHtcbi1cdFx0dTggKmxsY19tc2cgPSBzbWNfbGlua19zaGFyZWRfdjJfcnhidWYobGluaykgP1xuLVx0XHRcdCh1OCAqKWxnci1cdTAwM2V3cl9yeF9idWZfdjIgOiAodTggKilsbGM7XG4tXHRcdHNtY19sbGNfc2F2ZV9hZGRfbGlua19ya2V5cyhsaW5rLCBsbmtfbmV3LCBsbGNfbXNnKTtcbiYjNDM7XHRcdHNtY19sbGNfc2F2ZV9hZGRfbGlua19ya2V5cyhsaW5rLCBsbmtfbmV3LCBxZW50cnkpO1xuIFx0fSBlbHNlIHtcbiBcdFx0cmMgPSBzbWNfbGxjX2NsaV9ya2V5X2V4Y2hhbmdlKGxpbmssIGxua19uZXcpO1xuIFx0XHRpZiAocmMpIHtcbkBAIC0xNDgxLDcgJiM0MzsxNTA1LDcgQEAgaW50IHNtY19sbGNfc3J2X2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluayxcbiBcdH1cbiBcdGFkZF9sbGMgPSBcdTAwMjZxZW50cnktXHUwMDNlbXNnLmFkZF9saW5rO1xuIFx0aWYgKGFkZF9sbGMtXHUwMDNlaGQuZmxhZ3MgXHUwMDI2IFNNQ19MTENfRkxBR19BRERfTE5LX1JFSikge1xuLVx0XHRzbWNfbGxjX2Zsb3dfcWVudHJ5X2RlbChcdTAwMjZsZ3ItXHUwMDNlbGxjX2Zsb3dfbGNsKTtcbiYjNDM7XHRcdHNtY19sbGNfZmxvd19xZW50cnlfY2xyKFx1MDAyNmxnci1cdTAwM2VsbGNfZmxvd19sY2wpO1xuIFx0XHRyYyA9IC1FTk9MSU5LO1xuIFx0XHRnb3RvIG91dF9lcnI7XG4gXHR9XG5AQCAtMTQ5Miw3ICYjNDM7MTUxNiw4IEBAIGludCBzbWNfbGxjX3Nydl9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG4gXHRcdGxncl9uZXdfdCA9IFNNQ19MR1JfQVNZTU1FVFJJQ19QRUVSO1xuIFx0fVxuIFx0c21jX2xsY19zYXZlX2FkZF9saW5rX2luZm8obGlua19uZXcsIGFkZF9sbGMpO1xuLVx0c21jX2xsY19mbG93X3FlbnRyeV9kZWwoXHUwMDI2bGdyLVx1MDAzZWxsY19mbG93X2xjbCk7XG4mIzQzO1x0LyogYWRkX2xsYyBzdGlsbCBwb2ludHMgaW50byBxZW50cnksIHNvIG9ubHkgZGV0YWNoIGl0IGhlcmUgKi9cbiYjNDM7XHRzbWNfbGxjX2Zsb3dfcWVudHJ5X2NscihcdTAwMjZsZ3ItXHUwMDNlbGxjX2Zsb3dfbGNsKTtcbiBcbiBcdHJjID0gc21jX2liX3JlYWR5X2xpbmsobGlua19uZXcpO1xuIFx0aWYgKHJjKVxuQEAgLTE1MDEsOSAmIzQzOzE1MjYsNyBAQCBpbnQgc21jX2xsY19zcnZfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLFxuIFx0aWYgKHJjKVxuIFx0XHRnb3RvIG91dF9lcnI7XG4gXHRpZiAobGdyLVx1MDAzZXNtY192ZXJzaW9uID09IFNNQ19WMikge1xuLVx0XHR1OCAqbGxjX21zZyA9IHNtY19saW5rX3NoYXJlZF92Ml9yeGJ1ZihsaW5rKSA/XG4tXHRcdFx0KHU4ICopbGdyLVx1MDAzZXdyX3J4X2J1Zl92MiA6ICh1OCAqKWFkZF9sbGM7XG4tXHRcdHNtY19sbGNfc2F2ZV9hZGRfbGlua19ya2V5cyhsaW5rLCBsaW5rX25ldywgbGxjX21zZyk7XG4mIzQzO1x0XHRzbWNfbGxjX3NhdmVfYWRkX2xpbmtfcmtleXMobGluaywgbGlua19uZXcsIHFlbnRyeSk7XG4gXHR9IGVsc2Uge1xuIFx0XHRyYyA9IHNtY19sbGNfc3J2X3JrZXlfZXhjaGFuZ2UobGluaywgbGlua19uZXcpO1xuIFx0XHRpZiAocmMpXG5AQCAtMTUxMiwxNCAmIzQzOzE1MzUsMTQgQEAgaW50IHNtY19sbGNfc3J2X2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluayxcbiBcdHJjID0gc21jX2xsY19zcnZfY29uZl9saW5rKGxpbmssIGxpbmtfbmV3LCBsZ3JfbmV3X3QpO1xuIFx0aWYgKHJjKVxuIFx0XHRnb3RvIG91dF9lcnI7XG4tXHRrZnJlZShpbmkpO1xuLVx0cmV0dXJuIDA7XG4mIzQzO1x0Z290byBvdXQ7XG4gb3V0X2VycjpcbiBcdGlmIChsaW5rX25ldykge1xuIFx0XHRsaW5rX25ldy1cdTAwM2VzdGF0ZSA9IFNNQ19MTktfSU5BQ1RJVkU7XG4gXHRcdHNtY3JfbGlua19jbGVhcihsaW5rX25ldywgZmFsc2UpO1xuIFx0fVxuIG91dDpcbiYjNDM7XHRrZnJlZShxZW50cnkpO1xuIFx0a2ZyZWUoaW5pKTtcbiBcdGlmIChzZW5kX3JlcV9hZGRfbGlua19yZXNwKVxuIFx0XHRzbWNfbGxjX3NlbmRfcmVxX2FkZF9saW5rX3Jlc3BvbnNlKHJlcV9xZW50cnkpO1xuQEAgLTE1NTIsNyAmIzQzOzE1NzUsOCBAQCB2b2lkIHNtY19sbGNfYWRkX2xpbmtfbG9jYWwoc3RydWN0IHNtY19saW5rICpsaW5rKVxuIFx0YWRkX2xsYy5oZC5jb21tb24ubGxjX3R5cGUgPSBTTUNfTExDX0FERF9MSU5LO1xuIFx0c21jX2xsY19pbml0X21zZ19oZHIoXHUwMDI2YWRkX2xsYy5oZCwgbGluay1cdTAwM2VsZ3IsIHNpemVvZihhZGRfbGxjKSk7XG4gXHQvKiBubyBkZXYgYW5kIHBvcnQgbmVlZGVkICovXG4tXHRzbWNfbGxjX2VucXVldWUobGluaywgKHVuaW9uIHNtY19sbGNfbXNnICopXHUwMDI2YWRkX2xsYyk7XG4mIzQzO1x0c21jX2xsY19lbnF1ZXVlKGxpbmssICh1bmlvbiBzbWNfbGxjX21zZyAqKVx1MDAyNmFkZF9sbGMsXG4mIzQzO1x0XHRcdHNpemVvZih1bmlvbiBzbWNfbGxjX21zZykpO1xuIH1cbiBcbiAvKiB3b3JrZXIgdG8gcHJvY2VzcyBhbiBhZGQgbGluayBtZXNzYWdlICovXG5AQCAtMTU4OCw3ICYjNDM7MTYxMiw4IEBAIHZvaWQgc21jX2xsY19zcnZfZGVsZXRlX2xpbmtfbG9jYWwoc3RydWN0IHNtY19saW5rICpsaW5rLCB1OCBkZWxfbGlua19pZClcbiBcdGRlbF9sbGMubGlua19udW0gPSBkZWxfbGlua19pZDtcbiBcdGRlbF9sbGMucmVhc29uID0gaHRvbmwoU01DX0xMQ19ERUxfTE9TVF9QQVRIKTtcbiBcdGRlbF9sbGMuaGQuZmxhZ3MgfD0gU01DX0xMQ19GTEFHX0RFTF9MSU5LX09SREVSTFk7XG4tXHRzbWNfbGxjX2VucXVldWUobGluaywgKHVuaW9uIHNtY19sbGNfbXNnICopXHUwMDI2ZGVsX2xsYyk7XG4mIzQzO1x0c21jX2xsY19lbnF1ZXVlKGxpbmssICh1bmlvbiBzbWNfbGxjX21zZyAqKVx1MDAyNmRlbF9sbGMsXG4mIzQzO1x0XHRcdHNpemVvZih1bmlvbiBzbWNfbGxjX21zZykpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBzbWNfbGxjX3Byb2Nlc3NfY2xpX2RlbGV0ZV9saW5rKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyKVxuQEAgLTE4MTAsMTkgJiM0MzsxODM1LDI4IEBAIHN0YXRpYyB2b2lkIHNtY19sbGNfcm10X2RlbGV0ZV9ya2V5KHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyKVxuIFx0bGluayA9IHFlbnRyeS1cdTAwM2VsaW5rO1xuIFxuIFx0aWYgKGxnci1cdTAwM2VzbWNfdmVyc2lvbiA9PSBTTUNfVjIpIHtcbi1cdFx0c3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyICpsbGN2MjtcbiYjNDM7XHRcdHN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92Ml9pbmxpbmUgKmxsY3YyO1xuIFxuLVx0XHRpZiAoc21jX2xpbmtfc2hhcmVkX3YyX3J4YnVmKGxpbmspKSB7XG4tXHRcdFx0bWVtY3B5KGxnci1cdTAwM2V3cl9yeF9idWZfdjIsIGxsYywgc2l6ZW9mKCpsbGMpKTtcbi1cdFx0XHRsbGN2MiA9IChzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXlfdjIgKilsZ3ItXHUwMDNld3JfcnhfYnVmX3YyO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdGxsY3YyID0gKHN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92MiAqKWxsYztcbi1cdFx0fVxuJiM0MztcdFx0LyogVGhlIGxlYWRpbmcgU01DX0xMQ19ERUxfUktFWV9WMl9JTkxJTkUgcmtleXMgYXJlIGRlY2xhcmVkIGluXG4mIzQzO1x0XHQgKiB0aGUgbWVzc2FnZSBpdHNlbGYsIGFueSBmdXJ0aGVyIG9uZXMgd2VyZSByZWNlaXZlZCBpbnRvXG4mIzQzO1x0XHQgKiBxZW50cnktXHUwMDNlYm9keS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0bGxjdjIgPSBcdTAwMjZxZW50cnktXHUwMDNlbXNnLmRlbGV0ZV9ya2V5X3YyO1xuIFx0XHRsbGN2Mi1cdTAwM2VudW1faW52YWxfcmtleXMgPSAwO1xuIFxuIFx0XHRtYXggPSBtaW5fdCh1OCwgbGxjdjItXHUwMDNlbnVtX3JrZXlzLCBTTUNfTExDX1JLRVlTX1BFUl9NU0dfVjIpO1xuJiM0MztcdFx0bWF4ID0gbWluX3QodTMyLCBtYXgsIFNNQ19MTENfREVMX1JLRVlfVjJfSU5MSU5FICYjNDM7XG4mIzQzO1x0XHRcdFx0ICAgICAgcWVudHJ5LVx1MDAzZWJvZHlfbGVuIC8gc2l6ZW9mKF9fYmUzMikpO1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtYXg7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdFx0aWYgKHNtY19ydG9rZW5fZGVsZXRlKGxpbmssIGxsY3YyLVx1MDAzZXJrZXlbaV0pKVxuJiM0MztcdFx0XHRfX2JlMzIgcmtleTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChpIFx1MDAzYyBTTUNfTExDX0RFTF9SS0VZX1YyX0lOTElORSlcbiYjNDM7XHRcdFx0XHRya2V5ID0gbGxjdjItXHUwMDNlcmtleVtpXTtcbiYjNDM7XHRcdFx0ZWxzZVxuJiM0MztcdFx0XHRcdG1lbWNweShcdTAwMjZya2V5LCBxZW50cnktXHUwMDNlYm9keSAmIzQzO1xuJiM0MztcdFx0XHRcdFx0ICAgICAgKGkgLSBTTUNfTExDX0RFTF9SS0VZX1YyX0lOTElORSkgKlxuJiM0MztcdFx0XHRcdFx0ICAgICAgc2l6ZW9mKHJrZXkpLCBzaXplb2YocmtleSkpO1xuJiM0MztcdFx0XHRpZiAoc21jX3J0b2tlbl9kZWxldGUobGluaywgcmtleSkpXG4gXHRcdFx0XHRsbGN2Mi1cdTAwM2VudW1faW52YWxfcmtleXMmIzQzOyYjNDM7O1xuIFx0XHR9XG4gXHRcdG1lbXNldChcdTAwMjZsbGMtXHUwMDNlcmtleVswXSwgMCwgc2l6ZW9mKGxsYy1cdTAwM2Vya2V5KSk7XG5AQCAtMjA2MywxOCAmIzQzOzIwOTcsNTIgQEAgc3RhdGljIHZvaWQgc21jX2xsY19yeF9yZXNwb25zZShzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG4gXHR3YWtlX3VwKFx1MDAyNmxpbmstXHUwMDNlbGdyLVx1MDAzZWxsY19tc2dfd2FpdGVyKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgc21jX2xsY19lbnF1ZXVlKHN0cnVjdCBzbWNfbGluayAqbGluaywgdW5pb24gc21jX2xsY19tc2cgKmxsYylcbiYjNDM7LyogdGhlIGxvbmdlc3QgdGFpbCBlaXRoZXIgcmVhZGVyIG9mIHFlbnRyeS1cdTAwM2Vib2R5IGNhbiB1c2UgKi9cbiYjNDM7c3RhdGljIHUzMiBzbWNfbGxjX21heF9ib2R5X2xlbih1bmlvbiBzbWNfbGxjX21zZyAqbGxjKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChsbGMtXHUwMDNlcmF3Lmhkci5jb21tb24ubGxjX3R5cGUpIHtcbiYjNDM7XHRjYXNlIFNNQ19MTENfQUREX0xJTks6XG4mIzQzO1x0XHRyZXR1cm4gb2Zmc2V0b2Yoc3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rX3YyX2V4dCwgcnQpICYjNDM7XG4mIzQzO1x0XHQgICAgICAgU01DX0xMQ19SS0VZU19QRVJfTVNHX1YyICpcbiYjNDM7XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rX2NvbnRfcnQpO1xuJiM0MztcdGNhc2UgU01DX0xMQ19ERUxFVEVfUktFWTpcbiYjNDM7XHRcdHJldHVybiAoU01DX0xMQ19SS0VZU19QRVJfTVNHX1YyIC1cbiYjNDM7XHRcdFx0U01DX0xMQ19ERUxfUktFWV9WMl9JTkxJTkUpICogc2l6ZW9mKF9fYmUzMik7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgc21jX2xsY19lbnF1ZXVlKHN0cnVjdCBzbWNfbGluayAqbGluaywgdW5pb24gc21jX2xsY19tc2cgKmxsYyxcbiYjNDM7XHRcdFx0ICAgIHUzMiBieXRlX2xlbilcbiB7XG4gXHRzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxnciA9IGxpbmstXHUwMDNlbGdyO1xuIFx0c3RydWN0IHNtY19sbGNfcWVudHJ5ICpxZW50cnk7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcdHUxNiBib2R5X2xlbiA9IDA7XG4mIzQzO1xuJiM0MztcdC8qIFYyIG1lc3NhZ2VzIGNhbiBiZSBsb25nZXIgdGhhbiB0aGUgaW5saW5lIHVuaW9uIHNtY19sbGNfbXNnLiBDYXJyeVxuJiM0MztcdCAqIHRoZSByZW1haW5kZXIgaW4gdGhlIHFlbnRyeSBpdHNlbGYsIHNvIHRoYXQgaXRzIGxpZmV0aW1lIGFuZCBpdHNcbiYjNDM7XHQgKiBsZW5ndGggbWF0Y2ggdGhlIG1lc3NhZ2UgdGhlIHBlZXIgYWN0dWFsbHkgc2VudC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAobGdyLVx1MDAzZXNtY192ZXJzaW9uID09IFNNQ19WMiBcdTAwMjZcdTAwMjYgYnl0ZV9sZW4gXHUwMDNlIFNNQ19XUl9UWF9TSVpFKVxuJiM0MztcdFx0Ym9keV9sZW4gPSBtaW5fdCh1MzIsIGJ5dGVfbGVuLCBTTUNfV1JfQlVGX1YyX1NJWkUpIC1cbiYjNDM7XHRcdFx0ICAgU01DX1dSX1RYX1NJWkU7XG4mIzQzO1x0Ym9keV9sZW4gPSBtaW5fdCh1MzIsIGJvZHlfbGVuLCBzbWNfbGxjX21heF9ib2R5X2xlbihsbGMpKTtcbiBcbi1cdHFlbnRyeSA9IGttYWxsb2Nfb2JqKCpxZW50cnksIEdGUF9BVE9NSUMpO1xuJiM0MztcdHFlbnRyeSA9IGttYWxsb2NfZmxleCgqcWVudHJ5LCBib2R5LCBib2R5X2xlbiwgR0ZQX0FUT01JQyk7XG4gXHRpZiAoIXFlbnRyeSlcbiBcdFx0cmV0dXJuO1xuJiM0MztcdHFlbnRyeS1cdTAwM2Vib2R5X2xlbiA9IGJvZHlfbGVuO1xuIFx0cWVudHJ5LVx1MDAzZWxpbmsgPSBsaW5rO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cWVudHJ5LVx1MDAzZWxpc3QpO1xuIFx0bWVtY3B5KFx1MDAyNnFlbnRyeS1cdTAwM2Vtc2csIGxsYywgc2l6ZW9mKHVuaW9uIHNtY19sbGNfbXNnKSk7XG4mIzQzO1x0aWYgKGJvZHlfbGVuKSB7XG4mIzQzO1x0XHR1OCAqc3JjID0gc21jX2xpbmtfc2hhcmVkX3YyX3J4YnVmKGxpbmspID9cbiYjNDM7XHRcdFx0KHU4ICopbGdyLVx1MDAzZXdyX3J4X2J1Zl92MiA6ICh1OCAqKWxsYztcbiYjNDM7XG4mIzQzO1x0XHRtZW1jcHkocWVudHJ5LVx1MDAzZWJvZHksIHNyYyAmIzQzOyBTTUNfV1JfVFhfU0laRSwgYm9keV9sZW4pO1xuJiM0MztcdH1cbiBcbiBcdC8qIHByb2Nlc3MgcmVzcG9uc2VzIGltbWVkaWF0ZWx5ICovXG4gXHRpZiAoKGxsYy1cdTAwM2VyYXcuaGRyLmZsYWdzIFx1MDAyNiBTTUNfTExDX0ZMQUdfUkVTUCkgXHUwMDI2XHUwMDI2XG5AQCAtMjEwNiw3ICYjNDM7MjE3NCw3IEBAIHN0YXRpYyB2b2lkIHNtY19sbGNfcnhfaGFuZGxlcihzdHJ1Y3QgaWJfd2MgKndjLCB2b2lkICpidWYpXG4gXHRcdFx0cmV0dXJuOyAvKiBpbnZhbGlkIG1lc3NhZ2UgKi9cbiBcdH1cbiBcbi1cdHNtY19sbGNfZW5xdWV1ZShsaW5rLCBsbGMpO1xuJiM0MztcdHNtY19sbGNfZW5xdWV1ZShsaW5rLCBsbGMsIHdjLVx1MDAzZWJ5dGVfbGVuKTtcbiB9XG4gXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqIHdvcmtlciwgdXRpbHMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX3dyLmMgYi9uZXQvc21jL3NtY193ci5jXG5pbmRleCA1OWM5MmI0Njk0NWM1Li45N2JhNDY4OTNiMTdmIDEwMDY0NFxuLS0tIGEvbmV0L3NtYy9zbWNfd3IuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NtYy9zbWNfd3IuY1xuQEAgLTYwMiw5ICYjNDM7NjAyLDkgQEAgc3RhdGljIHZvaWQgc21jX3dyX2luaXRfc2dlKHN0cnVjdCBzbWNfbGluayAqbG5rKVxuIFxuIFx0LyogV2l0aCBTTUMtUnYyIHRoZXJlIGNhbiBiZSBtZXNzYWdlcyBsYXJnZXIgdGhhbiBTTUNfV1JfVFhfU0laRS5cbiBcdCAqIEVhY2ggaWJfcmVjdl93ciBnZXRzIDIgc2dlcywgdGhlIHNlY29uZCBvbmUgaXMgYSBzcGlsbG92ZXIgYnVmZmVyXG4tXHQgKiBhbmQgdGhlIHNhbWUgYnVmZmVyIGZvciBhbGwgc2dlcy4gV2hlbiBhIGxhcmdlciBtZXNzYWdlIGFycml2ZWQgdGhlblxuLVx0ICogdGhlIGNvbnRlbnQgb2YgdGhlIGZpcnN0IHNtYWxsIHNnZSBpcyBjb3BpZWQgdG8gdGhlIGJlZ2lubmluZyBvZlxuLVx0ICogdGhlIGxhcmdlciBzcGlsbG92ZXIgYnVmZmVyLCBhbGxvd2luZyBlYXN5IGRhdGEgbWFwcGluZy5cbiYjNDM7XHQgKiBhbmQgdGhlIHNhbWUgYnVmZmVyIGZvciBhbGwgc2dlcy4gVGhlIHNwaWxsb3ZlciBzZ2Ugc3RhcnRzIGF0XG4mIzQzO1x0ICogU01DX1dSX1RYX1NJWkUsIHNvIHRoZSBsZWFkaW5nIGJ5dGVzIG9mIHRoYXQgYnVmZmVyIGFyZSBuZXZlclxuJiM0MztcdCAqIHdyaXR0ZW4uXG4gXHQgKi9cbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxuay1cdTAwM2V3cl9yeF9jbnQ7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGludCB4ID0gaSAqIGxuay1cdTAwM2V3cl9yeF9zZ2VfY250O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAyOjU3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTTUMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzbWNfbGxjX2NsaV9hZGRfbGluayYjMzQ7LAogICAgJiMzNDtzbWNfbGxjX3Nydl9hZGRfbGluayYjMzQ7LAogICAgJiMzNDtzbWNfbGxjX2FkZF9saW5rX2xvY2FsJiMzNDssCiAgICAmIzM0O3NtY19sbGNfc3J2X2RlbGV0ZV9saW5rX2xvY2FsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIFNNQyBMTEMgbWVzc2FnZSBlbnF1ZXVlaW5nIHdoZXJlIGxhcmdlIFNNQy1SdjIgbWVzc2FnZXMgKGxpa2UgQUREX0xJTksgYW5kIERFTEVURV9SS0VZX1YyKSB3ZXJlIG92ZXJmbG93aW5nIHRoZSBhbGxvY2F0ZWQgc21jX2xsY19xZW50cnkgYnVmZmVyLiBJdCBpbnRyb2R1Y2VzIGEgZmxleGlibGUgYXJyYXkgbWVtYmVyIHRvIGR5bmFtaWNhbGx5IGFsbG9jYXRlIHRoZSBidWZmZXIgYmFzZWQgb24gdGhlIG1lc3NhZ2Ugc2l6ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIFNNQyBMTEMgcHJvY2Vzc2luZyBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHZpYSBBRl9TTUMgc29ja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZmMmE4NjA5M2NkYTE0ZDZmNDdmZDk5N2JjZDUzYmVkMWUzZGIxZGUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxOSAwMjo1Nzo0NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX2xsYy5jIGIvbmV0L3NtYy9zbWNfbGxjLmMKaW5kZXggOTU0YjJmZjE4MTVjMi4uMzkzYWEwYWYxOGQxZCAxMDA2NDQKLS0tIGEvbmV0L3NtYy9zbWNfbGxjLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NtYy9zbWNfbGxjLmMKQEAgLTE1Nyw2ICYjNDM7MTU3LDcgQEAgc3RydWN0IHNtY19sbGNfbXNnX2NvbmZpcm1fcmtleSB7CS8qIHR5cGUgMHgwNiAqLwogfTsKIAogI2RlZmluZSBTTUNfTExDX0RFTF9SS0VZX01BWAk4CiYjNDM7I2RlZmluZSBTTUNfTExDX0RFTF9SS0VZX1YyX0lOTElORQk5CiAjZGVmaW5lIFNNQ19MTENfRkxBR19SS0VZX1JFVFJZCTB4MTAKICNkZWZpbmUgU01DX0xMQ19GTEFHX1JLRVlfTkVHCTB4MjAKIApAQCAtMTc3LDYgJiM0MzsxNzgsMTUgQEAgc3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyIHsJLyogdHlwZSAweDI5ICovCiAJX19iZTMyIHJrZXlbXTsKIH07CiAKJiM0MzsvKiB0aGUgbGVhZGluZyBya2V5cyBvZiBhIERFTEVURV9SS0VZX1YyIGZpdCBpbnRvIHVuaW9uIHNtY19sbGNfbXNnICovCiYjNDM7c3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyX2lubGluZSB7CS8qIHR5cGUgMHgyOSAqLwomIzQzOwlzdHJ1Y3Qgc21jX2xsY19oZHIgaGQ7CiYjNDM7CXU4IG51bV9ya2V5czsKJiM0MzsJdTggbnVtX2ludmFsX3JrZXlzOwomIzQzOwl1OCByZXNlcnZlZFsyXTsKJiM0MzsJX19iZTMyIHJrZXlbU01DX0xMQ19ERUxfUktFWV9WMl9JTkxJTkVdOwomIzQzO307CiYjNDM7CiB1bmlvbiBzbWNfbGxjX21zZyB7CiAJc3RydWN0IHNtY19sbGNfbXNnX2NvbmZpcm1fbGluayBjb25maXJtX2xpbms7CiAJc3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rIGFkZF9saW5rOwpAQCAtMTg2LDYgJiM0MzsxOTYsNyBAQCB1bmlvbiBzbWNfbGxjX21zZyB7CiAKIAlzdHJ1Y3Qgc21jX2xsY19tc2dfY29uZmlybV9ya2V5IGNvbmZpcm1fcmtleTsKIAlzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXkgZGVsZXRlX3JrZXk7CiYjNDM7CXN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92Ml9pbmxpbmUgZGVsZXRlX3JrZXlfdjI7CiAKIAlzdHJ1Y3Qgc21jX2xsY19tc2dfdGVzdF9saW5rIHRlc3RfbGluazsKIAlzdHJ1Y3QgewpAQCAtMTk0LDE1ICYjNDM7MjA1LDI1IEBAIHVuaW9uIHNtY19sbGNfbXNnIHsKIAl9IHJhdzsKIH07CiAKJiM0MztzdGF0aWNfYXNzZXJ0KFNNQ19MTENfREVMX1JLRVlfVjJfSU5MSU5FID09CiYjNDM7CSAgICAgIChzaXplb2YodW5pb24gc21jX2xsY19tc2cpIC0KJiM0MzsJICAgICAgIG9mZnNldG9mKHN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92MiwgcmtleSkpIC8KJiM0MzsJICAgICAgc2l6ZW9mKF9fYmUzMikpOwomIzQzO3N0YXRpY19hc3NlcnQob2Zmc2V0b2Yoc3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyX2lubGluZSwgcmtleSkgPT0KJiM0MzsJICAgICAgb2Zmc2V0b2Yoc3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyLCBya2V5KSk7CiYjNDM7CiAjZGVmaW5lIFNNQ19MTENfRkxBR19SRVNQCQkweDgwCiAKIHN0cnVjdCBzbWNfbGxjX3FlbnRyeSB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCXN0cnVjdCBzbWNfbGluayAqbGluazsKJiM0MzsJdTE2IGJvZHlfbGVuOwogCXVuaW9uIHNtY19sbGNfbXNnIG1zZzsKJiM0MzsJdTggYm9keVtdIF9fY291bnRlZF9ieShib2R5X2xlbik7CiB9OwogCi1zdGF0aWMgdm9pZCBzbWNfbGxjX2VucXVldWUoc3RydWN0IHNtY19saW5rICpsaW5rLCB1bmlvbiBzbWNfbGxjX21zZyAqbGxjKTsKJiM0MztzdGF0aWMgdm9pZCBzbWNfbGxjX2VucXVldWUoc3RydWN0IHNtY19saW5rICpsaW5rLCB1bmlvbiBzbWNfbGxjX21zZyAqbGxjLAomIzQzOwkJCSAgICB1MzIgYnl0ZV9sZW4pOwogCiBzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnNtY19sbGNfZmxvd19xZW50cnlfY2xyKHN0cnVjdCBzbWNfbGxjX2Zsb3cgKmZsb3cpCiB7CkBAIC05OTgsMTUgJiM0MzsxMDE5LDIwIEBAIHN0YXRpYyBpbnQgc21jX2xsY19jbGlfY29uZl9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluaywKIAogc3RhdGljIHZvaWQgc21jX2xsY19zYXZlX2FkZF9saW5rX3JrZXlzKHN0cnVjdCBzbWNfbGluayAqbGluaywKIAkJCQkJc3RydWN0IHNtY19saW5rICpsaW5rX25ldywKLQkJCQkJdTggKmxsY19tc2cpCiYjNDM7CQkJCQlzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnFlbnRyeSkKIHsKJiM0MzsJY29uc3QgdTMyIHJ0X29mZiA9IG9mZnNldG9mKHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua192Ml9leHQsIHJ0KTsKIAlzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfdjJfZXh0ICpleHQ7CiAJc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IgPSBsaW5rLSZndDtsZ3I7CiAJaW50IG1heCwgaTsKIAotCWV4dCA9IChzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfdjJfZXh0ICopKGxsY19tc2cgJiM0MzsKLQkJCQkJCSAgICAgU01DX1dSX1RYX1NJWkUpOwomIzQzOwkvKiB0aGUgcmtleSBjb3VudCBpdHNlbGYgaXMgb25seSB0aGVyZSBpZiBlbm91Z2ggYnl0ZXMgYXJyaXZlZCAqLwomIzQzOwlpZiAocWVudHJ5LSZndDtib2R5X2xlbiAmbHQ7IHJ0X29mZikKJiM0MzsJCXJldHVybjsKJiM0MzsJZXh0ID0gKHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua192Ml9leHQgKilxZW50cnktJmd0O2JvZHk7CiAJbWF4ID0gbWluX3QodTgsIGV4dC0mZ3Q7bnVtX3JrZXlzLCBTTUNfTExDX1JLRVlTX1BFUl9NU0dfVjIpOwomIzQzOwltYXggPSBtaW5fdCh1MzIsIG1heCwgKHFlbnRyeS0mZ3Q7Ym9keV9sZW4gLSBydF9vZmYpIC8KJiM0MzsJCQkgICAgICBzaXplb2YoZXh0LSZndDtydFswXSkpOwogCWRvd25fd3JpdGUoJmFtcDtsZ3ItJmd0O3JtYnNfbG9jayk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IG1heDsgaSYjNDM7JiM0MzspIHsKIAkJc21jX3J0b2tlbl9zZXQobGdyLCBsaW5rLSZndDtsaW5rX2lkeCwgbGlua19uZXctJmd0O2xpbmtfaWR4LApAQCAtMTA5OSw5ICYjNDM7MTEyNSw3IEBAIGludCBzbWNfbGxjX2NsaV9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHN0cnVjdCBzbWNfbGxjX3FlbnRyeSAqcWVudHJ5KQogCWlmIChyYykKIAkJZ290byBvdXRfY2xlYXJfbG5rOwogCWlmIChsZ3ItJmd0O3NtY192ZXJzaW9uID09IFNNQ19WMikgewotCQl1OCAqbGxjX21zZyA9IHNtY19saW5rX3NoYXJlZF92Ml9yeGJ1ZihsaW5rKSA/Ci0JCQkodTggKilsZ3ItJmd0O3dyX3J4X2J1Zl92MiA6ICh1OCAqKWxsYzsKLQkJc21jX2xsY19zYXZlX2FkZF9saW5rX3JrZXlzKGxpbmssIGxua19uZXcsIGxsY19tc2cpOwomIzQzOwkJc21jX2xsY19zYXZlX2FkZF9saW5rX3JrZXlzKGxpbmssIGxua19uZXcsIHFlbnRyeSk7CiAJfSBlbHNlIHsKIAkJcmMgPSBzbWNfbGxjX2NsaV9ya2V5X2V4Y2hhbmdlKGxpbmssIGxua19uZXcpOwogCQlpZiAocmMpIHsKQEAgLTE0ODEsNyAmIzQzOzE1MDUsNyBAQCBpbnQgc21jX2xsY19zcnZfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLAogCX0KIAlhZGRfbGxjID0gJmFtcDtxZW50cnktJmd0O21zZy5hZGRfbGluazsKIAlpZiAoYWRkX2xsYy0mZ3Q7aGQuZmxhZ3MgJmFtcDsgU01DX0xMQ19GTEFHX0FERF9MTktfUkVKKSB7Ci0JCXNtY19sbGNfZmxvd19xZW50cnlfZGVsKCZhbXA7bGdyLSZndDtsbGNfZmxvd19sY2wpOwomIzQzOwkJc21jX2xsY19mbG93X3FlbnRyeV9jbHIoJmFtcDtsZ3ItJmd0O2xsY19mbG93X2xjbCk7CiAJCXJjID0gLUVOT0xJTks7CiAJCWdvdG8gb3V0X2VycjsKIAl9CkBAIC0xNDkyLDcgJiM0MzsxNTE2LDggQEAgaW50IHNtY19sbGNfc3J2X2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluaywKIAkJbGdyX25ld190ID0gU01DX0xHUl9BU1lNTUVUUklDX1BFRVI7CiAJfQogCXNtY19sbGNfc2F2ZV9hZGRfbGlua19pbmZvKGxpbmtfbmV3LCBhZGRfbGxjKTsKLQlzbWNfbGxjX2Zsb3dfcWVudHJ5X2RlbCgmYW1wO2xnci0mZ3Q7bGxjX2Zsb3dfbGNsKTsKJiM0MzsJLyogYWRkX2xsYyBzdGlsbCBwb2ludHMgaW50byBxZW50cnksIHNvIG9ubHkgZGV0YWNoIGl0IGhlcmUgKi8KJiM0MzsJc21jX2xsY19mbG93X3FlbnRyeV9jbHIoJmFtcDtsZ3ItJmd0O2xsY19mbG93X2xjbCk7CiAKIAlyYyA9IHNtY19pYl9yZWFkeV9saW5rKGxpbmtfbmV3KTsKIAlpZiAocmMpCkBAIC0xNTAxLDkgJiM0MzsxNTI2LDcgQEAgaW50IHNtY19sbGNfc3J2X2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluaywKIAlpZiAocmMpCiAJCWdvdG8gb3V0X2VycjsKIAlpZiAobGdyLSZndDtzbWNfdmVyc2lvbiA9PSBTTUNfVjIpIHsKLQkJdTggKmxsY19tc2cgPSBzbWNfbGlua19zaGFyZWRfdjJfcnhidWYobGluaykgPwotCQkJKHU4ICopbGdyLSZndDt3cl9yeF9idWZfdjIgOiAodTggKilhZGRfbGxjOwotCQlzbWNfbGxjX3NhdmVfYWRkX2xpbmtfcmtleXMobGluaywgbGlua19uZXcsIGxsY19tc2cpOwomIzQzOwkJc21jX2xsY19zYXZlX2FkZF9saW5rX3JrZXlzKGxpbmssIGxpbmtfbmV3LCBxZW50cnkpOwogCX0gZWxzZSB7CiAJCXJjID0gc21jX2xsY19zcnZfcmtleV9leGNoYW5nZShsaW5rLCBsaW5rX25ldyk7CiAJCWlmIChyYykKQEAgLTE1MTIsMTQgJiM0MzsxNTM1LDE0IEBAIGludCBzbWNfbGxjX3Nydl9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssCiAJcmMgPSBzbWNfbGxjX3Nydl9jb25mX2xpbmsobGluaywgbGlua19uZXcsIGxncl9uZXdfdCk7CiAJaWYgKHJjKQogCQlnb3RvIG91dF9lcnI7Ci0Ja2ZyZWUoaW5pKTsKLQlyZXR1cm4gMDsKJiM0MzsJZ290byBvdXQ7CiBvdXRfZXJyOgogCWlmIChsaW5rX25ldykgewogCQlsaW5rX25ldy0mZ3Q7c3RhdGUgPSBTTUNfTE5LX0lOQUNUSVZFOwogCQlzbWNyX2xpbmtfY2xlYXIobGlua19uZXcsIGZhbHNlKTsKIAl9CiBvdXQ6CiYjNDM7CWtmcmVlKHFlbnRyeSk7CiAJa2ZyZWUoaW5pKTsKIAlpZiAoc2VuZF9yZXFfYWRkX2xpbmtfcmVzcCkKIAkJc21jX2xsY19zZW5kX3JlcV9hZGRfbGlua19yZXNwb25zZShyZXFfcWVudHJ5KTsKQEAgLTE1NTIsNyAmIzQzOzE1NzUsOCBAQCB2b2lkIHNtY19sbGNfYWRkX2xpbmtfbG9jYWwoc3RydWN0IHNtY19saW5rICpsaW5rKQogCWFkZF9sbGMuaGQuY29tbW9uLmxsY190eXBlID0gU01DX0xMQ19BRERfTElOSzsKIAlzbWNfbGxjX2luaXRfbXNnX2hkcigmYW1wO2FkZF9sbGMuaGQsIGxpbmstJmd0O2xnciwgc2l6ZW9mKGFkZF9sbGMpKTsKIAkvKiBubyBkZXYgYW5kIHBvcnQgbmVlZGVkICovCi0Jc21jX2xsY19lbnF1ZXVlKGxpbmssICh1bmlvbiBzbWNfbGxjX21zZyAqKSZhbXA7YWRkX2xsYyk7CiYjNDM7CXNtY19sbGNfZW5xdWV1ZShsaW5rLCAodW5pb24gc21jX2xsY19tc2cgKikmYW1wO2FkZF9sbGMsCiYjNDM7CQkJc2l6ZW9mKHVuaW9uIHNtY19sbGNfbXNnKSk7CiB9CiAKIC8qIHdvcmtlciB0byBwcm9jZXNzIGFuIGFkZCBsaW5rIG1lc3NhZ2UgKi8KQEAgLTE1ODgsNyAmIzQzOzE2MTIsOCBAQCB2b2lkIHNtY19sbGNfc3J2X2RlbGV0ZV9saW5rX2xvY2FsKHN0cnVjdCBzbWNfbGluayAqbGluaywgdTggZGVsX2xpbmtfaWQpCiAJZGVsX2xsYy5saW5rX251bSA9IGRlbF9saW5rX2lkOwogCWRlbF9sbGMucmVhc29uID0gaHRvbmwoU01DX0xMQ19ERUxfTE9TVF9QQVRIKTsKIAlkZWxfbGxjLmhkLmZsYWdzIHw9IFNNQ19MTENfRkxBR19ERUxfTElOS19PUkRFUkxZOwotCXNtY19sbGNfZW5xdWV1ZShsaW5rLCAodW5pb24gc21jX2xsY19tc2cgKikmYW1wO2RlbF9sbGMpOwomIzQzOwlzbWNfbGxjX2VucXVldWUobGluaywgKHVuaW9uIHNtY19sbGNfbXNnICopJmFtcDtkZWxfbGxjLAomIzQzOwkJCXNpemVvZih1bmlvbiBzbWNfbGxjX21zZykpOwogfQogCiBzdGF0aWMgdm9pZCBzbWNfbGxjX3Byb2Nlc3NfY2xpX2RlbGV0ZV9saW5rKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyKQpAQCAtMTgxMCwxOSAmIzQzOzE4MzUsMjggQEAgc3RhdGljIHZvaWQgc21jX2xsY19ybXRfZGVsZXRlX3JrZXkoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IpCiAJbGluayA9IHFlbnRyeS0mZ3Q7bGluazsKIAogCWlmIChsZ3ItJmd0O3NtY192ZXJzaW9uID09IFNNQ19WMikgewotCQlzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXlfdjIgKmxsY3YyOwomIzQzOwkJc3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyX2lubGluZSAqbGxjdjI7CiAKLQkJaWYgKHNtY19saW5rX3NoYXJlZF92Ml9yeGJ1ZihsaW5rKSkgewotCQkJbWVtY3B5KGxnci0mZ3Q7d3JfcnhfYnVmX3YyLCBsbGMsIHNpemVvZigqbGxjKSk7Ci0JCQlsbGN2MiA9IChzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXlfdjIgKilsZ3ItJmd0O3dyX3J4X2J1Zl92MjsKLQkJfSBlbHNlIHsKLQkJCWxsY3YyID0gKHN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92MiAqKWxsYzsKLQkJfQomIzQzOwkJLyogVGhlIGxlYWRpbmcgU01DX0xMQ19ERUxfUktFWV9WMl9JTkxJTkUgcmtleXMgYXJlIGRlY2xhcmVkIGluCiYjNDM7CQkgKiB0aGUgbWVzc2FnZSBpdHNlbGYsIGFueSBmdXJ0aGVyIG9uZXMgd2VyZSByZWNlaXZlZCBpbnRvCiYjNDM7CQkgKiBxZW50cnktJmd0O2JvZHkuCiYjNDM7CQkgKi8KJiM0MzsJCWxsY3YyID0gJmFtcDtxZW50cnktJmd0O21zZy5kZWxldGVfcmtleV92MjsKIAkJbGxjdjItJmd0O251bV9pbnZhbF9ya2V5cyA9IDA7CiAKIAkJbWF4ID0gbWluX3QodTgsIGxsY3YyLSZndDtudW1fcmtleXMsIFNNQ19MTENfUktFWVNfUEVSX01TR19WMik7CiYjNDM7CQltYXggPSBtaW5fdCh1MzIsIG1heCwgU01DX0xMQ19ERUxfUktFWV9WMl9JTkxJTkUgJiM0MzsKJiM0MzsJCQkJICAgICAgcWVudHJ5LSZndDtib2R5X2xlbiAvIHNpemVvZihfX2JlMzIpKTsKIAkJZm9yIChpID0gMDsgaSAmbHQ7IG1heDsgaSYjNDM7JiM0MzspIHsKLQkJCWlmIChzbWNfcnRva2VuX2RlbGV0ZShsaW5rLCBsbGN2Mi0mZ3Q7cmtleVtpXSkpCiYjNDM7CQkJX19iZTMyIHJrZXk7CiYjNDM7CiYjNDM7CQkJaWYgKGkgJmx0OyBTTUNfTExDX0RFTF9SS0VZX1YyX0lOTElORSkKJiM0MzsJCQkJcmtleSA9IGxsY3YyLSZndDtya2V5W2ldOwomIzQzOwkJCWVsc2UKJiM0MzsJCQkJbWVtY3B5KCZhbXA7cmtleSwgcWVudHJ5LSZndDtib2R5ICYjNDM7CiYjNDM7CQkJCQkgICAgICAoaSAtIFNNQ19MTENfREVMX1JLRVlfVjJfSU5MSU5FKSAqCiYjNDM7CQkJCQkgICAgICBzaXplb2YocmtleSksIHNpemVvZihya2V5KSk7CiYjNDM7CQkJaWYgKHNtY19ydG9rZW5fZGVsZXRlKGxpbmssIHJrZXkpKQogCQkJCWxsY3YyLSZndDtudW1faW52YWxfcmtleXMmIzQzOyYjNDM7OwogCQl9CiAJCW1lbXNldCgmYW1wO2xsYy0mZ3Q7cmtleVswXSwgMCwgc2l6ZW9mKGxsYy0mZ3Q7cmtleSkpOwpAQCAtMjA2MywxOCAmIzQzOzIwOTcsNTIgQEAgc3RhdGljIHZvaWQgc21jX2xsY19yeF9yZXNwb25zZShzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssCiAJd2FrZV91cCgmYW1wO2xpbmstJmd0O2xnci0mZ3Q7bGxjX21zZ193YWl0ZXIpOwogfQogCi1zdGF0aWMgdm9pZCBzbWNfbGxjX2VucXVldWUoc3RydWN0IHNtY19saW5rICpsaW5rLCB1bmlvbiBzbWNfbGxjX21zZyAqbGxjKQomIzQzOy8qIHRoZSBsb25nZXN0IHRhaWwgZWl0aGVyIHJlYWRlciBvZiBxZW50cnktJmd0O2JvZHkgY2FuIHVzZSAqLwomIzQzO3N0YXRpYyB1MzIgc21jX2xsY19tYXhfYm9keV9sZW4odW5pb24gc21jX2xsY19tc2cgKmxsYykKJiM0Mzt7CiYjNDM7CXN3aXRjaCAobGxjLSZndDtyYXcuaGRyLmNvbW1vbi5sbGNfdHlwZSkgewomIzQzOwljYXNlIFNNQ19MTENfQUREX0xJTks6CiYjNDM7CQlyZXR1cm4gb2Zmc2V0b2Yoc3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rX3YyX2V4dCwgcnQpICYjNDM7CiYjNDM7CQkgICAgICAgU01DX0xMQ19SS0VZU19QRVJfTVNHX1YyICoKJiM0MzsJCSAgICAgICBzaXplb2Yoc3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rX2NvbnRfcnQpOwomIzQzOwljYXNlIFNNQ19MTENfREVMRVRFX1JLRVk6CiYjNDM7CQlyZXR1cm4gKFNNQ19MTENfUktFWVNfUEVSX01TR19WMiAtCiYjNDM7CQkJU01DX0xMQ19ERUxfUktFWV9WMl9JTkxJTkUpICogc2l6ZW9mKF9fYmUzMik7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBzbWNfbGxjX2VucXVldWUoc3RydWN0IHNtY19saW5rICpsaW5rLCB1bmlvbiBzbWNfbGxjX21zZyAqbGxjLAomIzQzOwkJCSAgICB1MzIgYnl0ZV9sZW4pCiB7CiAJc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IgPSBsaW5rLSZndDtsZ3I7CiAJc3RydWN0IHNtY19sbGNfcWVudHJ5ICpxZW50cnk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsJdTE2IGJvZHlfbGVuID0gMDsKJiM0MzsKJiM0MzsJLyogVjIgbWVzc2FnZXMgY2FuIGJlIGxvbmdlciB0aGFuIHRoZSBpbmxpbmUgdW5pb24gc21jX2xsY19tc2cuIENhcnJ5CiYjNDM7CSAqIHRoZSByZW1haW5kZXIgaW4gdGhlIHFlbnRyeSBpdHNlbGYsIHNvIHRoYXQgaXRzIGxpZmV0aW1lIGFuZCBpdHMKJiM0MzsJICogbGVuZ3RoIG1hdGNoIHRoZSBtZXNzYWdlIHRoZSBwZWVyIGFjdHVhbGx5IHNlbnQuCiYjNDM7CSAqLwomIzQzOwlpZiAobGdyLSZndDtzbWNfdmVyc2lvbiA9PSBTTUNfVjIgJmFtcDsmYW1wOyBieXRlX2xlbiAmZ3Q7IFNNQ19XUl9UWF9TSVpFKQomIzQzOwkJYm9keV9sZW4gPSBtaW5fdCh1MzIsIGJ5dGVfbGVuLCBTTUNfV1JfQlVGX1YyX1NJWkUpIC0KJiM0MzsJCQkgICBTTUNfV1JfVFhfU0laRTsKJiM0MzsJYm9keV9sZW4gPSBtaW5fdCh1MzIsIGJvZHlfbGVuLCBzbWNfbGxjX21heF9ib2R5X2xlbihsbGMpKTsKIAotCXFlbnRyeSA9IGttYWxsb2Nfb2JqKCpxZW50cnksIEdGUF9BVE9NSUMpOwomIzQzOwlxZW50cnkgPSBrbWFsbG9jX2ZsZXgoKnFlbnRyeSwgYm9keSwgYm9keV9sZW4sIEdGUF9BVE9NSUMpOwogCWlmICghcWVudHJ5KQogCQlyZXR1cm47CiYjNDM7CXFlbnRyeS0mZ3Q7Ym9keV9sZW4gPSBib2R5X2xlbjsKIAlxZW50cnktJmd0O2xpbmsgPSBsaW5rOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7cWVudHJ5LSZndDtsaXN0KTsKIAltZW1jcHkoJmFtcDtxZW50cnktJmd0O21zZywgbGxjLCBzaXplb2YodW5pb24gc21jX2xsY19tc2cpKTsKJiM0MzsJaWYgKGJvZHlfbGVuKSB7CiYjNDM7CQl1OCAqc3JjID0gc21jX2xpbmtfc2hhcmVkX3YyX3J4YnVmKGxpbmspID8KJiM0MzsJCQkodTggKilsZ3ItJmd0O3dyX3J4X2J1Zl92MiA6ICh1OCAqKWxsYzsKJiM0MzsKJiM0MzsJCW1lbWNweShxZW50cnktJmd0O2JvZHksIHNyYyAmIzQzOyBTTUNfV1JfVFhfU0laRSwgYm9keV9sZW4pOwomIzQzOwl9CiAKIAkvKiBwcm9jZXNzIHJlc3BvbnNlcyBpbW1lZGlhdGVseSAqLwogCWlmICgobGxjLSZndDtyYXcuaGRyLmZsYWdzICZhbXA7IFNNQ19MTENfRkxBR19SRVNQKSAmYW1wOyZhbXA7CkBAIC0yMTA2LDcgJiM0MzsyMTc0LDcgQEAgc3RhdGljIHZvaWQgc21jX2xsY19yeF9oYW5kbGVyKHN0cnVjdCBpYl93YyAqd2MsIHZvaWQgKmJ1ZikKIAkJCXJldHVybjsgLyogaW52YWxpZCBtZXNzYWdlICovCiAJfQogCi0Jc21jX2xsY19lbnF1ZXVlKGxpbmssIGxsYyk7CiYjNDM7CXNtY19sbGNfZW5xdWV1ZShsaW5rLCBsbGMsIHdjLSZndDtieXRlX2xlbik7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiB3b3JrZXIsIHV0aWxzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX3dyLmMgYi9uZXQvc21jL3NtY193ci5jCmluZGV4IDU5YzkyYjQ2OTQ1YzUuLjk3YmE0Njg5M2IxN2YgMTAwNjQ0Ci0tLSBhL25ldC9zbWMvc21jX3dyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NtYy9zbWNfd3IuYwpAQCAtNjAyLDkgJiM0Mzs2MDIsOSBAQCBzdGF0aWMgdm9pZCBzbWNfd3JfaW5pdF9zZ2Uoc3RydWN0IHNtY19saW5rICpsbmspCiAKIAkvKiBXaXRoIFNNQy1SdjIgdGhlcmUgY2FuIGJlIG1lc3NhZ2VzIGxhcmdlciB0aGFuIFNNQ19XUl9UWF9TSVpFLgogCSAqIEVhY2ggaWJfcmVjdl93ciBnZXRzIDIgc2dlcywgdGhlIHNlY29uZCBvbmUgaXMgYSBzcGlsbG92ZXIgYnVmZmVyCi0JICogYW5kIHRoZSBzYW1lIGJ1ZmZlciBmb3IgYWxsIHNnZXMuIFdoZW4gYSBsYXJnZXIgbWVzc2FnZSBhcnJpdmVkIHRoZW4KLQkgKiB0aGUgY29udGVudCBvZiB0aGUgZmlyc3Qgc21hbGwgc2dlIGlzIGNvcGllZCB0byB0aGUgYmVnaW5uaW5nIG9mCi0JICogdGhlIGxhcmdlciBzcGlsbG92ZXIgYnVmZmVyLCBhbGxvd2luZyBlYXN5IGRhdGEgbWFwcGluZy4KJiM0MzsJICogYW5kIHRoZSBzYW1lIGJ1ZmZlciBmb3IgYWxsIHNnZXMuIFRoZSBzcGlsbG92ZXIgc2dlIHN0YXJ0cyBhdAomIzQzOwkgKiBTTUNfV1JfVFhfU0laRSwgc28gdGhlIGxlYWRpbmcgYnl0ZXMgb2YgdGhhdCBidWZmZXIgYXJlIG5ldmVyCiYjNDM7CSAqIHdyaXR0ZW4uCiAJICovCiAJZm9yIChpID0gMDsgaSAmbHQ7IGxuay0mZ3Q7d3JfcnhfY250OyBpJiM0MzsmIzQzOykgewogCQlpbnQgeCA9IGkgKiBsbmstJmd0O3dyX3J4X3NnZV9jbnQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAyOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1MTQKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA1NDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTTUMgTExDIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgYG5ldC9zbWMvc21jX2xsYy5jYCBhbmQgYG5ldC9zbWMvc21jX3dyLmNgIGZpbGVzLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFib3V0IGhhbmRsaW5nIGxhcmdlciBTTUMtUnYyIG1lc3NhZ2VzLCBzcGVjaWZpY2FsbHkgdGhvc2UgZXhjZWVkaW5nIGBTTUNfV1JfVFhfU0laRWAuIEl0JiMzOTtzIGludHJvZHVjaW5nIGEgbmV3IHN0cnVjdCwgYHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyX2lubGluZWAsIGFuZCBtb2RpZnlpbmcgYHNtY19sbGNfZW5xdWV1ZWAgdG8gaGFuZGxlIGxhcmdlciBtZXNzYWdlcyBieSBkeW5hbWljYWxseSBhbGxvY2F0aW5nIGEgYHN0cnVjdCBzbWNfbGxjX3FlbnRyeWAgd2l0aCBhIGZsZXhpYmxlIGFycmF5IG1lbWJlciwgYGJvZHlbXWAsIHRvIGFjY29tbW9kYXRlIHRoZSBvdmVyZmxvdyBkYXRhLiBUaGlzIGlzIGludGVyZXN0aW5nLCBpdCBsaWtlbHkgZGVhbHMgd2l0aCB0aGUgYEFERF9MSU5LYCBhbmQgYERFTEVURV9SS0VZX1YyYCBtZXNzYWdlcywgd2hpY2ggYXJlIGNhbmRpZGF0ZXMgZm9yIHNpemUtcmVsYXRlZCBidWdzLgoKRmlyc3QsIGxldCYjMzk7cyBlc3RhYmxpc2ggaWYgdGhpcyBpcyBldmVuIGZ1enphYmxlIGFuZCB3b3J0aCB0aGUgZWZmb3J0LiBTTUMgaXMgYSBuZXR3b3JrIHByb3RvY29sLCBzbyBpdCYjMzk7cyB1bmRlciB0aGUgYEFGX1NNQ2AgZmFtaWx5LiBHb29kLiBXZSBjYW4gYWJzb2x1dGVseSB0ZXN0IHRoaXMsIGVpdGhlciBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBXZSBoYXZlIGxvb3BiYWNrLCBkdW1teSBkZXZpY2VzLCBvciBldmVuIHZldGggY2FuIGJlIHVzZWQuIFNNQy1EIGlzIHJlbGF0ZWQgdG8gSVNNLCB3aGljaCBjYW4gYmUgaGFuZGxlZCBieSBgc21jX2xvb3BiYWNrYC4gU01DLVIgdXNlcyBSRE1BLCB3aGljaCBjYW4gYmUgZW11bGF0ZWQgdXNpbmcgYHJkbWFfcnhlYCBvciBgc2l3YC4gVGhhdCBjb25maXJtcyBpdCwgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSBjYW4gdGFyZ2V0IHdpdGggc3l6a2FsbGVyLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cy4gVGhlIHBhdGNoIHRvdWNoZXMgYSBmZXcga2V5IGZ1bmN0aW9uczoKLSAgIGBzbWNfbGxjX2VucXVldWVgIChhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggb2Z0ZW4gaXMgYSBoZWFkYWNoZSwgYnV0IGxldCYjMzk7cyBzZWUgaG93IGl0JiMzOTtzIHVzZWQpCi0gICBgc21jX2xsY19yeF9oYW5kbGVyYCAoYW5vdGhlciBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIGEgY2FsbGJhY2sgZm9yIFJETUEgcmVjZWl2ZS4gSXQgaXMgYW4gZW50cnkgcG9pbnQsIGFuZCBpcyBhIHN0cm9uZyBjYW5kaWRhdGUpCi0gICBgc21jX2xsY19jbGlfYWRkX2xpbmtgCi0gICBgc21jX2xsY19zcnZfYWRkX2xpbmtgCi0gICBgc21jX2xsY19hZGRfbGlua19sb2NhbGAKLSAgIGBzbWNfbGxjX3Nydl9kZWxldGVfbGlua19sb2NhbGAKLSAgIGBzbWNfbGxjX3JtdF9kZWxldGVfcmtleWAgKHN0YXRpYyBhcyB3ZWxsKQotICAgYHNtY19sbGNfcnhfcmVzcG9uc2VgIChhbm90aGVyIHN0YXRpYywgd2UmIzM5O2xsIHNlZSBob3cgaXQgZml0cykKCkxldCYjMzk7cyBwcmlvcml0aXplIHRob3NlIGxhc3QgdHdvLiBgc21jX2xsY19jbGlfYWRkX2xpbmtgIGFuZCBgc21jX2xsY19zcnZfYWRkX2xpbmtgIGFyZSBpbnRlcmVzdGluZyBiZWNhdXNlIHRoZXkgc2VlbSB0byBiZSB0aGUgY2xpZW50IGFuZCBzZXJ2ZXIgc2lkZS4gV2UmIzM5O3JlIGludGVyZXN0ZWQgaW4gdGhlIHNpemUuICBgc21jX2xsY19yeF9oYW5kbGVyYCAqc2hvdWxkKiBiZSB0aGUgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIExMQyBtZXNzYWdlcy4gVGhvdWdoIGl0IGlzIGEgc3RhdGljIGZ1bmN0aW9uLCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcXVldWUgYW5kIG5ldyBkeW5hbWljIGFsbG9jYXRpb24gaXMgdGhlIGNvcmUgcGFydCBvZiB0aGlzIGNoYW5nZS4gSXMgdGhlcmUgYW4gZXhwb3NlZCBlbnRyeSBwb2ludCBmb3IgdGhlIHN0YXRpYyBmdW5jdGlvbnM/CgpMZXQgbWUgZG8gYSBxdWljayBzZWFyY2ggb24gdGhvc2UgYGNsaV9hZGRfbGlua2AgYW5kIGBzcnZfYWRkX2xpbmtgIGZ1bmN0aW9ucyB0byBzZWUgaG93IHRoZXkmIzM5O3JlIHVzZWQuIFdlIHdpbGwgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aG9zZSB0byBmaW5kIHRoZSBhdHRhY2sgc3VyZmFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMjo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfbGxjX2NsaV9hZGRfbGluayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL2FmX3NtYy5jPTYxOD1zdGF0aWMgaW50IHNtY3JfY2xudF9jb25mX2ZpcnN0X2xpbmsoc3RydWN0IHNtY19zb2NrICpzbWMpXG4tLVxubmV0L3NtYy9hZl9zbWMuYy02ODQtXHRcdHNtY19sbGNfZmxvd19xZW50cnlfY2xyKFx1MDAyNmxpbmstXHUwMDNlbGdyLVx1MDAzZWxsY19mbG93X2xjbCk7XG5uZXQvc21jL2FmX3NtYy5jOjY4NTpcdFx0c21jX2xsY19jbGlfYWRkX2xpbmsobGluaywgcWVudHJ5KTtcbm5ldC9zbWMvYWZfc21jLmMtNjg2LVx0fVxuLS1cbm5ldC9zbWMvc21jX2xsYy5jPTkwOD1zdGF0aWMgaW50IHNtY19sbGNfY2xpX3JrZXlfZXhjaGFuZ2Uoc3RydWN0IHNtY19saW5rICpsaW5rLFxuLS1cbm5ldC9zbWMvc21jX2xsYy5jLTk1MS0vKiBwcmVwYXJlIGFuZCBzZW5kIGFuIGFkZCBsaW5rIHJlamVjdCByZXNwb25zZSAqL1xubmV0L3NtYy9zbWNfbGxjLmM6OTUyOnN0YXRpYyBpbnQgc21jX2xsY19jbGlfYWRkX2xpbmtfcmVqZWN0KHN0cnVjdCBzbWNfbGxjX3FlbnRyeSAqcWVudHJ5KVxubmV0L3NtYy9zbWNfbGxjLmMtOTUzLXtcbi0tXG5uZXQvc21jL3NtY19sbGMuYz0xMDQ2PXN0YXRpYyB2b2lkIHNtY19sbGNfc2F2ZV9hZGRfbGlua19pbmZvKHN0cnVjdCBzbWNfbGluayAqbGluayxcbi0tXG5uZXQvc21jL3NtY19sbGMuYy0xMDU2LS8qIGFzIGFuIFNNQyBjbGllbnQsIHByb2Nlc3MgYW4gYWRkIGxpbmsgcmVxdWVzdCAqL1xubmV0L3NtYy9zbWNfbGxjLmM6MTA1NzppbnQgc21jX2xsY19jbGlfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLCBzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnFlbnRyeSlcbm5ldC9zbWMvc21jX2xsYy5jLTEwNTgte1xuLS1cbm5ldC9zbWMvc21jX2xsYy5jLTExNDItb3V0X3JlamVjdDpcbm5ldC9zbWMvc21jX2xsYy5jOjExNDM6XHRzbWNfbGxjX2NsaV9hZGRfbGlua19yZWplY3QocWVudHJ5KTtcbm5ldC9zbWMvc21jX2xsYy5jLTExNDQtb3V0OlxuLS1cbm5ldC9zbWMvc21jX2xsYy5jPTExNTA9c3RhdGljIHZvaWQgc21jX2xsY19zZW5kX3JlcXVlc3RfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rKVxuLS1cbm5ldC9zbWMvc21jX2xsYy5jLTExODgtLyogYXMgYW4gU01DIGNsaWVudCwgaW52aXRlIHNlcnZlciB0byBzdGFydCB0aGUgYWRkX2xpbmsgcHJvY2Vzc2luZyAqL1xubmV0L3NtYy9zbWNfbGxjLmM6MTE4OTpzdGF0aWMgdm9pZCBzbWNfbGxjX2NsaV9hZGRfbGlua19pbnZpdGUoc3RydWN0IHNtY19saW5rICpsaW5rLFxubmV0L3NtYy9zbWNfbGxjLmMtMTE5MC1cdFx0XHRcdFx0c3RydWN0IHNtY19sbGNfcWVudHJ5ICpxZW50cnkpXG4tLVxubmV0L3NtYy9zbWNfbGxjLmM9MTI0MT1zdGF0aWMgdm9pZCBzbWNfbGxjX3Byb2Nlc3NfY2xpX2FkZF9saW5rKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyKVxuLS1cbm5ldC9zbWMvc21jX2xsYy5jLTEyNDgtXHRpZiAoc21jX2xsY19pc19sb2NhbF9hZGRfbGluayhcdTAwMjZxZW50cnktXHUwMDNlbXNnKSlcbm5ldC9zbWMvc21jX2xsYy5jOjEyNDk6XHRcdHNtY19sbGNfY2xpX2FkZF9saW5rX2ludml0ZShxZW50cnktXHUwMDNlbGluaywgcWVudHJ5KTtcbm5ldC9zbWMvc21jX2xsYy5jLTEyNTAtXHRlbHNlXG5uZXQvc21jL3NtY19sbGMuYzoxMjUxOlx0XHRzbWNfbGxjX2NsaV9hZGRfbGluayhxZW50cnktXHUwMDNlbGluaywgcWVudHJ5KTtcbm5ldC9zbWMvc21jX2xsYy5jLTEyNTItXHR1cF93cml0ZShcdTAwMjZsZ3ItXHUwMDNlbGxjX2NvbmZfbXV0ZXgpO1xuLS1cbm5ldC9zbWMvc21jX2xsYy5oPTExMj12b2lkIHNtY19sbGNfc2VuZF9saW5rX2RlbGV0ZV9hbGwoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsIGJvb2wgb3JkLFxubmV0L3NtYy9zbWNfbGxjLmgtMTEzLVx0XHRcdFx0ICB1MzIgcnNuKTtcbm5ldC9zbWMvc21jX2xsYy5oOjExNDppbnQgc21jX2xsY19jbGlfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLCBzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnFlbnRyeSk7XG5uZXQvc21jL3NtY19sbGMuaC0xMTUtaW50IHNtY19sbGNfc3J2X2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODU3CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipEaXZpbmcgaW50byBgc21jX2xsY19zcnZfYWRkX2xpbmtgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIGl0LiBMZXQmIzM5O3MgZGlnIGludG8gYHNtY19sbGNfc3J2X2FkZF9saW5rYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBmdW5jdGlvbiBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmV2aWV3IGl0cyBpbXBsZW1lbnRhdGlvbiwgZm9jdXNpbmcgb24gdGhlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBhbmQgbGluayBjcmVhdGlvbiBwcm9jZXNzLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgaGVyZSwgYW5kIHdhbnQgdG8gY2hlY2sgaG93IHRoZSBzZXJ2ZXIgc2lkZSByZXNvdXJjZSBhbGxvY2F0aW9ucyBhcmUgbWFuYWdlZCB0byBhdm9pZCBhbnkgbGVha3Mgb3IgdW5leHBlY3RlZCByZXNvdXJjZSBleGhhdXN0aW9uLiBUaGlua2luZyBiYWNrLCBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgSSBzaG91bGQgYmUgb24gdGhlIGxvb2tvdXQgZm9yLCBwYXJ0aWN1bGFybHkgaW4gYSBtdWx0aS10aHJlYWRlZCBlbnZpcm9ubWVudD8gSSBhbHNvIG5lZWQgdG8gYXNzZXNzIHRoZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIGVzcGVjaWFsbHkgcmVsYXRlZCB0byBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyB0aGlzIGZ1bmN0aW9uIGludHJvZHVjZXMgdG8gb3VyIHN5c3RlbS4gU28sIGxldCYjMzk7cyBnZXQgc3RhcnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfbGxjX3Nydl9hZGRfbGluayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL2FmX3NtYy5jPTE4NzI9c3RhdGljIGludCBzbWNyX3NlcnZfY29uZl9maXJzdF9saW5rKHN0cnVjdCBzbWNfc29jayAqc21jKVxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMTkxNy1cdFx0LyogaW5pdGlhbCBjb250YWN0IC0gdHJ5IHRvIGVzdGFibGlzaCBzZWNvbmQgbGluayAqL1xubmV0L3NtYy9hZl9zbWMuYzoxOTE4Olx0XHRzbWNfbGxjX3Nydl9hZGRfbGluayhsaW5rLCBOVUxMKTtcbm5ldC9zbWMvYWZfc21jLmMtMTkxOS1cdFx0dXBfd3JpdGUoXHUwMDI2bGluay1cdTAwM2VsZ3ItXHUwMDNlbGxjX2NvbmZfbXV0ZXgpO1xuLS1cbm5ldC9zbWMvc21jX2xsYy5jPTE0MjE9c3RhdGljIHZvaWQgc21jX2xsY19zZW5kX3JlcV9hZGRfbGlua19yZXNwb25zZShzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnFlbnRyeSlcbi0tXG5uZXQvc21jL3NtY19sbGMuYy0xNDI5LVxubmV0L3NtYy9zbWNfbGxjLmM6MTQzMDppbnQgc21jX2xsY19zcnZfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLFxubmV0L3NtYy9zbWNfbGxjLmMtMTQzMS1cdFx0XHQgc3RydWN0IHNtY19sbGNfcWVudHJ5ICpyZXFfcWVudHJ5KVxuLS1cbm5ldC9zbWMvc21jX2xsYy5jPTE1NTI9c3RhdGljIHZvaWQgc21jX2xsY19wcm9jZXNzX3Nydl9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncilcbi0tXG5uZXQvc21jL3NtY19sbGMuYy0xNTYwLVx0ZG93bl93cml0ZShcdTAwMjZsZ3ItXHUwMDNlbGxjX2NvbmZfbXV0ZXgpO1xubmV0L3NtYy9zbWNfbGxjLmM6MTU2MTpcdHJjID0gc21jX2xsY19zcnZfYWRkX2xpbmsobGluaywgcWVudHJ5KTtcbm5ldC9zbWMvc21jX2xsYy5jLTE1NjItXHRpZiAoIXJjIFx1MDAyNlx1MDAyNiBsZ3ItXHUwMDNldHlwZSA9PSBTTUNfTEdSX1NZTU1FVFJJQykge1xuLS1cbm5ldC9zbWMvc21jX2xsYy5oPTExND1pbnQgc21jX2xsY19jbGlfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLCBzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnFlbnRyeSk7XG5uZXQvc21jL3NtY19sbGMuaDoxMTU6aW50IHNtY19sbGNfc3J2X2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluayxcbm5ldC9zbWMvc21jX2xsYy5oLTExNi1cdFx0XHQgc3RydWN0IHNtY19sbGNfcWVudHJ5ICpyZXFfcWVudHJ5KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjkwCgkJCQkJCQlvdXRwdXQ6IDE2CgkJCQkJCQl0aG91Z2h0czogMjE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZpeGluZyB0aGUgU01DIExMQyBNZXNzYWdlIEhhbmRsaW5nOiBBIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRhY2tsaW5nIGEgcHJldHR5IGNyaXRpY2FsIGJ1ZyB3aXRoaW4gdGhlIFNNQyBMTEMgbGF5ZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gYHNtY19sbGNfZW5xdWV1ZWAgYW5kIGBzbWNfbGxjX3NhdmVfYWRkX2xpbmtfcmtleXNgLiBJdCBzZWVtcyB3ZSYjMzk7dmUgZ290IGFuIG92ZXJmbG93IGlzc3VlIHdpdGggbGFyZ2UgU01DLVJ2MiBtZXNzYWdlcywgcGFydGljdWxhcmx5IGBBRERfTElOS2AgYW5kIGBERUxFVEVfUktFWV9WMmAuIEJhc2ljYWxseSwgd2UmIzM5O3JlIHJ1bm5pbmcgaW50byBidWZmZXIgbGltaXRhdGlvbnMgd2l0aGluIHRoZSBgc21jX2xsY19xZW50cnlgIHN0cnVjdC4gVGhlIGV4aXN0aW5nIGFsbG9jYXRpb24gaXMgc2ltcGx5IHRvbyBzbWFsbCB0byBoYW5kbGUgdGhlIG1lc3NhZ2UgcGF5bG9hZCwgd2hpY2ggY2FuIGxlYWQgdG8gZGF0YSBjb3JydXB0aW9uIG9yIG91dHJpZ2h0IGZhaWx1cmUgdG8gcHJvY2VzcyB0aGVzZSBjb21tYW5kcy4KClRoZSBnZW5pdXMgb2YgdGhpcyBmaXggaXMgdGhlIGludHJvZHVjdGlvbiBvZiBhIGZsZXhpYmxlIGFycmF5IG1lbWJlciwgYGJvZHlbXWAsIHdpdGhpbiB0aGUgYHN0cnVjdCBzbWNfbGxjX3FlbnRyeWAuIFRoaXMgaXMgcmVhbGx5IHNtYXJ0OyBieSBkeW5hbWljYWxseSBhbGxvY2F0aW5nIHRoZSBidWZmZXIgYmFzZWQgb24gdGhlIGFjdHVhbCBtZXNzYWdlIHNpemUsIHdlIGd1YXJhbnRlZSB0aGF0IHdl4oCZdmUgZ290IGVub3VnaCBzcGFjZSB0byB3b3JrIHdpdGgsIHdoaWNoIHByZXZlbnRzIHRob3NlIG92ZXJmbG93cy4KClRoaXMgaXMgYSBwcmV0dHkgZnVuZGFtZW50YWwgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0JiMzOTtzIHRvdWNoaW5nIHRoZSBjb3JlIG9mIHRoZSBMTEMgcHJvY2Vzc2luZyBsb2dpYy4gVGhlIGNvZGUgaXMgZ2V0dGluZyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzbyBpdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIHNvbWUgc2VyaW91cyBmdXp6aW5nLgoKTXkgcHJpbWFyeSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOiBgc21jX2xsY19jbGlfYWRkX2xpbmtgLCBgc21jX2xsY19zcnZfYWRkX2xpbmtgLCBgc21jX2xsY19hZGRfbGlua19sb2NhbGAsIGFuZCBgc21jX2xsY19zcnZfZGVsZXRlX2xpbmtfbG9jYWxgLiBUaGVzZSBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHMgZm9yIHRoZSBwcm9ibGVtYXRpYyBjb21tYW5kcy4gSeKAmWxsIG1ha2Ugc3VyZSB0byBleHBsb3JlIGFsbCBwYXRocyB3aXRoaW4gdGhlc2UgZnVuY3Rpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHdheSB0aGUgbmV3IGBib2R5W11gIG1lbWJlciBpcyB1c2VkIGFuZCBlbnN1cmUgdGhlcmUgYXJlIG5vIG9mZi1ieS1vbmUgZXJyb3JzIG9yIG90aGVyIHZ1bG5lcmFiaWxpdGllcyBpbnRyb2R1Y2VkIGJ5IHRoZSBkeW5hbWljIGFsbG9jYXRpb24uCgpOb3csIGxldCYjMzk7cyBnbyBiYWNrIGFuZCBkb3VibGUgY2hlY2sgdGhlIFNNQyBjb25maWd1cmF0aW9uIG9wdGlvbnMsIG1ha2luZyBzdXJlIHdlIGhhdmVuJiMzOTt0IGluYWR2ZXJ0ZW50bHkgYnJva2VuIGFueSBleGlzdGluZyBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU01DJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L0tjb25maWc9MTQ2PWNvbmZpZyBJMkNfU1BJX1NNQzFfVUNPREVfUEFUQ0hcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzh4eC9LY29uZmlnLTE1MC1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L0tjb25maWc6MTUxOmNvbmZpZyBTTUNfVUNPREVfUEFUQ0hcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L0tjb25maWctMTUyLVx0Ym9vbCBcJiMzNDtTTUMgcmVsb2NhdGlvbiBwYXRjaFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2MvS2NvbmZpZz0yMD1pZiBORVRfVkVORE9SX1NNU0NcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2MvS2NvbmZpZy0yMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2MvS2NvbmZpZzoyMjpjb25maWcgU01DOTFYXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL0tjb25maWctMjMtXHR0cmlzdGF0ZSBcJiMzNDtTTUMgOTFDOXgvOTFDMXh4eCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3NtYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvc21jL0tjb25maWc6Mjpjb25maWcgU01DXG5uZXQvc21jL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1NNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XCYjMzQ7XG4tLVxubmV0L3NtYy9LY29uZmlnLTEzLVxubmV0L3NtYy9LY29uZmlnOjE0OmNvbmZpZyBTTUNfRElBR1xubmV0L3NtYy9LY29uZmlnLTE1LVx0dHJpc3RhdGUgXCYjMzQ7U01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQvc21jL0tjb25maWctMjItXG5uZXQvc21jL0tjb25maWc6MjM6Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxubmV0L3NtYy9LY29uZmlnLTI0LVx0Ym9vbCBcJiMzNDtHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3MjYKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgdGhlIGNvbmZpZ3VyYXRpb24gaW4gZnJvbnQgb2YgbWUgaXMgYFNNQ2AuIFRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBCdXQsIGFzIHdlIGFsbCBrbm93LCBub3RoaW5nIGV4aXN0cyBpbiBhIHZhY3V1bSwgZXNwZWNpYWxseSBpbiB0aGlzIGZpZWxkLiBNeSBpbW1lZGlhdGUgbmV4dCB0aG91Z2h0IGlzIHRvIGRpZyBkZWVwZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB3aWRlciBjb250ZXh0LiBBcmUgdGhlcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcyB3b3ZlbiBpbiBoZXJlPyBXaGF0IGVsc2UgZG9lcyBgU01DYCByZWx5IG9uIHRvIGZ1bmN0aW9uIGNvcnJlY3RseT8gV2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBtdXN0IEkgY29uc2lkZXI/IEJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyIEkgbXVzdCBlbnN1cmUgSSBoYXZlIGEgY29tcGxldGUgcGljdHVyZS4gTGV0JiMzOTtzIGRlbHZlIGluIGFuZCBmaW5kIHRoZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24uKlNNQyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybS9LY29uZmlnPTEwNjk9Y29uZmlnIEFSTV9QU0NJXG5hcmNoL2FybS9LY29uZmlnLTEwNzAtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHRoZSBBUk0gUG93ZXIgU3RhdGUgQ29vcmRpbmF0aW9uIEludGVyZmFjZSAoUFNDSSlcJiMzNDtcbmFyY2gvYXJtL0tjb25maWc6MTA3MTpcdGRlcGVuZHMgb24gSEFWRV9BUk1fU01DQ0NcbmFyY2gvYXJtL0tjb25maWctMTA3Mi1cdHNlbGVjdCBBUk1fUFNDSV9GV1xuLS1cbmFyY2gvYXJtNjQva3ZtL3BzY2kuYz0zMjE9c3RhdGljIGludCBrdm1fcHNjaV8xX3hfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtaW5vcilcbi0tXG5hcmNoL2FybTY0L2t2bS9wc2NpLmMtMzc5LVx0XHQgKiBSZXR1cm4gZGlyZWN0bHkgdG8gdXNlcnNwYWNlIHdpdGhvdXQgY2hhbmdpbmcgdGhlIHZDUFUmIzM5O3NcbmFyY2gvYXJtNjQva3ZtL3BzY2kuYzozODA6XHRcdCAqIHJlZ2lzdGVycy4gVXNlcnNwYWNlIGRlcGVuZHMgb24gcmVhZGluZyB0aGUgU01DQ0MgcGFyYW1ldGVyc1xuYXJjaC9hcm02NC9rdm0vcHNjaS5jLTM4MS1cdFx0ICogdG8gaW1wbGVtZW50IFNZU1RFTV9TVVNQRU5ELlxuLS1cbmRyaXZlcnMvY2hhci9od19yYW5kb20vS2NvbmZpZz01Nzg9Y29uZmlnIEhXX1JBTkRPTV9BUk1fU01DQ0NfVFJOR1xuZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9LY29uZmlnLTU3OS1cdHRyaXN0YXRlIFwmIzM0O0FybSBTTUNDQyBUUk5HIGZpcm13YXJlIGludGVyZmFjZSBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL0tjb25maWc6NTgwOlx0ZGVwZW5kcyBvbiBIQVZFX0FSTV9TTUNDQ19ESVNDT1ZFUllcbmRyaXZlcnMvY2hhci9od19yYW5kb20vS2NvbmZpZy01ODEtXHRkZWZhdWx0IEhXX1JBTkRPTVxuLS1cbmRyaXZlcnMvY2xrL2lteC9LY29uZmlnPTk1PWNvbmZpZyBDTEtfSU1YOFFYUFxuLS1cbmRyaXZlcnMvY2xrL2lteC9LY29uZmlnLTk3LVx0ZGVwZW5kcyBvbiAoQVJDSF9NWEMgXHUwMDI2XHUwMDI2IEFSTTY0KSB8fCBDT01QSUxFX1RFU1RcbmRyaXZlcnMvY2xrL2lteC9LY29uZmlnOjk4Olx0ZGVwZW5kcyBvbiBJTVhfU0NVIFx1MDAyNlx1MDAyNiBIQVZFX0FSTV9TTUNDQ1xuZHJpdmVycy9jbGsvaW14L0tjb25maWctOTktXHRzZWxlY3QgTVhDX0NMS19TQ1Vcbi0tXG5kcml2ZXJzL2RldmZyZXEvS2NvbmZpZz0xMTI9Y29uZmlnIEFSTV9JTVg4TV9ERFJDX0RFVkZSRVFcbmRyaXZlcnMvZGV2ZnJlcS9LY29uZmlnLTExMy1cdHRyaXN0YXRlIFwmIzM0O2kuTVg4TSBERFJDIERFVkZSRVEgRHJpdmVyXCYjMzQ7XG5kcml2ZXJzL2RldmZyZXEvS2NvbmZpZzoxMTQ6XHRkZXBlbmRzIG9uIChBUkNIX01YQyBcdTAwMjZcdTAwMjYgSEFWRV9BUk1fU01DQ0MpIHx8IFxcXG5kcml2ZXJzL2RldmZyZXEvS2NvbmZpZy0xMTUtXHRcdChDT01QSUxFX1RFU1QgXHUwMDI2XHUwMDI2IEhBVkVfQVJNX1NNQ0NDKVxuLS1cbmRyaXZlcnMvZGV2ZnJlcS9LY29uZmlnPTE0Mz1jb25maWcgQVJNX1JLMzM5OV9ETUNfREVWRlJFUVxuZHJpdmVycy9kZXZmcmVxL0tjb25maWctMTQ0LVx0dHJpc3RhdGUgXCYjMzQ7QVJNIFJLMzM5OSBETUMgREVWRlJFUSBEcml2ZXJcJiMzNDtcbmRyaXZlcnMvZGV2ZnJlcS9LY29uZmlnOjE0NTpcdGRlcGVuZHMgb24gKEFSQ0hfUk9DS0NISVAgXHUwMDI2XHUwMDI2IEhBVkVfQVJNX1NNQ0NDKSB8fCBcXFxuZHJpdmVycy9kZXZmcmVxL0tjb25maWctMTQ2LVx0XHQoQ09NUElMRV9URVNUIFx1MDAyNlx1MDAyNiBIQVZFX0FSTV9TTUNDQylcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL0tjb25maWc9MTQyPWNvbmZpZyBJTlRFTF9TVFJBVElYMTBfU0VSVklDRVxuZHJpdmVycy9maXJtd2FyZS9LY29uZmlnLTE0My1cdHRyaXN0YXRlIFwmIzM0O0ludGVsIFN0cmF0aXgxMCBTZXJ2aWNlIExheWVyXCYjMzQ7XG5kcml2ZXJzL2Zpcm13YXJlL0tjb25maWc6MTQ0Olx0ZGVwZW5kcyBvbiBBUkNIX0lOVEVMX1NPQ0ZQR0EgXHUwMDI2XHUwMDI2IEFSTTY0IFx1MDAyNlx1MDAyNiBIQVZFX0FSTV9TTUNDQ1xuZHJpdmVycy9maXJtd2FyZS9LY29uZmlnLTE0NS1cdGRlZmF1bHQgblxuLS1cbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9LY29uZmlnPTE4PWNvbmZpZyBBUk1fRkZBX1NNQ0NDXG4tLVxuZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL0tjb25maWctMjAtXHRkZWZhdWx0IEFSTV9GRkFfVFJBTlNQT1JUXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvS2NvbmZpZzoyMTpcdGRlcGVuZHMgb24gQVJNNjQgXHUwMDI2XHUwMDI2IEhBVkVfQVJNX1NNQ0NDX0RJU0NPVkVSWVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvdHJhbnNwb3J0cy9LY29uZmlnPTM3PWNvbmZpZyBBUk1fU0NNSV9UUkFOU1BPUlRfU01DXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9zY21pL3RyYW5zcG9ydHMvS2NvbmZpZy0zOC1cdHRyaXN0YXRlIFwmIzM0O1NDTUkgdHJhbnNwb3J0IGJhc2VkIG9uIFNNQ1wmIzM0O1xuZHJpdmVycy9maXJtd2FyZS9hcm1fc2NtaS90cmFuc3BvcnRzL0tjb25maWc6Mzk6XHRkZXBlbmRzIG9uIEhBVkVfQVJNX1NNQ0NDX0RJU0NPVkVSWVxuZHJpdmVycy9maXJtd2FyZS9hcm1fc2NtaS90cmFuc3BvcnRzL0tjb25maWctNDAtXHRzZWxlY3QgQVJNX1NDTUlfSEFWRV9UUkFOU1BPUlRcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9zY21pL3RyYW5zcG9ydHMvS2NvbmZpZz01MT1jb25maWcgQVJNX1NDTUlfVFJBTlNQT1JUX1NNQ19BVE9NSUNfRU5BQkxFXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9zY21pL3RyYW5zcG9ydHMvS2NvbmZpZy01Mi1cdGJvb2wgXCYjMzQ7RW5hYmxlIGF0b21pYyBtb2RlIHN1cHBvcnQgZm9yIFNDTUkgU01DIHRyYW5zcG9ydFwmIzM0O1xuZHJpdmVycy9maXJtd2FyZS9hcm1fc2NtaS90cmFuc3BvcnRzL0tjb25maWc6NTM6XHRkZXBlbmRzIG9uIEFSTV9TQ01JX1RSQU5TUE9SVF9TTUNcbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvdHJhbnNwb3J0cy9LY29uZmlnLTU0LVx0aGVscFxuLS1cbmRyaXZlcnMvZmlybXdhcmUvc21jY2MvS2NvbmZpZz0xOD1jb25maWcgQVJNX1NNQ0NDX1NPQ19JRFxuZHJpdmVycy9maXJtd2FyZS9zbWNjYy9LY29uZmlnLTE5LVx0Ym9vbCBcJiMzNDtTb0MgYnVzIGRldmljZSBmb3IgdGhlIEFSTSBTTUNDQyBTT0NfSURcJiMzNDtcbmRyaXZlcnMvZmlybXdhcmUvc21jY2MvS2NvbmZpZzoyMDpcdGRlcGVuZHMgb24gSEFWRV9BUk1fU01DQ0NfRElTQ09WRVJZXG5kcml2ZXJzL2Zpcm13YXJlL3NtY2NjL0tjb25maWctMjEtXHRkZWZhdWx0IHlcbi0tXG5kcml2ZXJzL2dwaW8vS2NvbmZpZz0xNTI4PWNvbmZpZyBHUElPX01BQ1NNQ1xuZHJpdmVycy9ncGlvL0tjb25maWctMTUyOS1cdHRyaXN0YXRlIFwmIzM0O0FwcGxlIE1hYyBTTUMgR1BJT1wmIzM0O1xuZHJpdmVycy9ncGlvL0tjb25maWc6MTUzMDpcdGRlcGVuZHMgb24gTUZEX01BQ1NNQ1xuZHJpdmVycy9ncGlvL0tjb25maWctMTUzMS1cdGhlbHBcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZz0yPWNvbmZpZyBEUk1fTUVESUFURUtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZy02LVx0ZGVwZW5kcyBvbiBDT01NT05fQ0xLXG5kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZzo3Olx0ZGVwZW5kcyBvbiBIQVZFX0FSTV9TTUNDQyB8fCBDT01QSUxFX1RFU1RcbmRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnLTgtXHRkZXBlbmRzIG9uIE9GXG4tLVxuZHJpdmVycy9od21vbi9LY29uZmlnPTExOTE9Y29uZmlnIFNFTlNPUlNfTUFDU01DX0hXTU9OXG5kcml2ZXJzL2h3bW9uL0tjb25maWctMTE5Mi1cdHRyaXN0YXRlIFwmIzM0O0FwcGxlIFNNQyAoQXBwbGUgU2lsaWNvbilcJiMzNDtcbmRyaXZlcnMvaHdtb24vS2NvbmZpZzoxMTkzOlx0ZGVwZW5kcyBvbiBNRkRfTUFDU01DIFx1MDAyNlx1MDAyNiBPRlxuZHJpdmVycy9od21vbi9LY29uZmlnLTExOTQtXHRoZWxwXG4tLVxuZHJpdmVycy9tdGQvbmFuZC9yYXcvS2NvbmZpZz00MTA9Y29uZmlnIE1URF9OQU5EX1BMMzVYXG4tLVxuZHJpdmVycy9tdGQvbmFuZC9yYXcvS2NvbmZpZy00MTItXHRkZXBlbmRzIG9uIE9GXG5kcml2ZXJzL210ZC9uYW5kL3Jhdy9LY29uZmlnOjQxMzpcdGRlcGVuZHMgb24gUEwzNTNfU01DXG5kcml2ZXJzL210ZC9uYW5kL3Jhdy9LY29uZmlnLTQxNC1cdGhlbHBcbi0tXG5kcml2ZXJzL252bWVtL0tjb25maWc9MTE5PWNvbmZpZyBOVk1FTV9JTVhfT0NPVFBfU0NVXG4tLVxuZHJpdmVycy9udm1lbS9LY29uZmlnLTEyMS1cdGRlcGVuZHMgb24gSU1YX1NDVVxuZHJpdmVycy9udm1lbS9LY29uZmlnOjEyMjpcdGRlcGVuZHMgb24gSEFWRV9BUk1fU01DQ0NcbmRyaXZlcnMvbnZtZW0vS2NvbmZpZy0xMjMtXHRoZWxwXG4tLVxuZHJpdmVycy9wY2kvaG90cGx1Zy9LY29uZmlnPTY0PWNvbmZpZyBIT1RQTFVHX1BDSV9BQ1BJX0FNUEVSRV9BTFRSQVxuLS1cbmRyaXZlcnMvcGNpL2hvdHBsdWcvS2NvbmZpZy02Ni1cdGRlcGVuZHMgb24gSE9UUExVR19QQ0lfQUNQSVxuZHJpdmVycy9wY2kvaG90cGx1Zy9LY29uZmlnOjY3Olx0ZGVwZW5kcyBvbiBIQVZFX0FSTV9TTUNDQ19ESVNDT1ZFUllcbmRyaXZlcnMvcGNpL2hvdHBsdWcvS2NvbmZpZy02OC1cdGhlbHBcbi0tXG5kcml2ZXJzL3BoeS9tYXJ2ZWxsL0tjb25maWc9Mjc9Y29uZmlnIFBIWV9NVkVCVV9BMzcwMF9DT01QSFlcbi0tXG5kcml2ZXJzL3BoeS9tYXJ2ZWxsL0tjb25maWctMzAtXHRkZXBlbmRzIG9uIE9GXG5kcml2ZXJzL3BoeS9tYXJ2ZWxsL0tjb25maWc6MzE6XHRkZXBlbmRzIG9uIEhBVkVfQVJNX1NNQ0NDXG5kcml2ZXJzL3BoeS9tYXJ2ZWxsL0tjb25maWctMzItXHRkZWZhdWx0IEFSQ0hfTVZFQlVcbi0tXG5kcml2ZXJzL3BoeS9tYXJ2ZWxsL0tjb25maWc9NTg9Y29uZmlnIFBIWV9NVkVCVV9DUDExMF9DT01QSFlcbi0tXG5kcml2ZXJzL3BoeS9tYXJ2ZWxsL0tjb25maWctNjEtXHRkZXBlbmRzIG9uIE9GXG5kcml2ZXJzL3BoeS9tYXJ2ZWxsL0tjb25maWc6NjI6XHRkZXBlbmRzIG9uIEhBVkVfQVJNX1NNQ0NDXG5kcml2ZXJzL3BoeS9tYXJ2ZWxsL0tjb25maWctNjMtXHRzZWxlY3QgR0VORVJJQ19QSFlcbi0tXG5kcml2ZXJzL3BtZG9tYWluL2FtbG9naWMvS2NvbmZpZz0xNT1jb25maWcgTUVTT05fU0VDVVJFX1BNX0RPTUFJTlNcbi0tXG5kcml2ZXJzL3BtZG9tYWluL2FtbG9naWMvS2NvbmZpZy0xOC1cdGRlcGVuZHMgb24gUE0gXHUwMDI2XHUwMDI2IE9GXG5kcml2ZXJzL3BtZG9tYWluL2FtbG9naWMvS2NvbmZpZzoxOTpcdGRlcGVuZHMgb24gSEFWRV9BUk1fU01DQ0NcbmRyaXZlcnMvcG1kb21haW4vYW1sb2dpYy9LY29uZmlnLTIwLVx0ZGVmYXVsdCBBUkNIX01FU09OXG4tLVxuZHJpdmVycy9wbWRvbWFpbi9tZWRpYXRlay9LY29uZmlnPTQ2PWNvbmZpZyBBSVJPSEFfQ1BVX1BNX0RPTUFJTlxuLS1cbmRyaXZlcnMvcG1kb21haW4vbWVkaWF0ZWsvS2NvbmZpZy00OC1cdGRlZmF1bHQgQVJDSF9BSVJPSEFcbmRyaXZlcnMvcG1kb21haW4vbWVkaWF0ZWsvS2NvbmZpZzo0OTpcdGRlcGVuZHMgb24gSEFWRV9BUk1fU01DQ0NcbmRyaXZlcnMvcG1kb21haW4vbWVkaWF0ZWsvS2NvbmZpZy01MC1cdGRlcGVuZHMgb24gUE1cbi0tXG5kcml2ZXJzL3BtZG9tYWluL3JvY2tjaGlwL0tjb25maWc9ND1jb25maWcgUk9DS0NISVBfUE1fRE9NQUlOU1xuLS1cbmRyaXZlcnMvcG1kb21haW4vcm9ja2NoaXAvS2NvbmZpZy03LVx0ZGVwZW5kcyBvbiBQTVxuZHJpdmVycy9wbWRvbWFpbi9yb2NrY2hpcC9LY29uZmlnOjg6XHRkZXBlbmRzIG9uIEhBVkVfQVJNX1NNQ0NDX0RJU0NPVkVSWVxuZHJpdmVycy9wbWRvbWFpbi9yb2NrY2hpcC9LY29uZmlnLTktXHRkZXBlbmRzIG9uIFJFR1VMQVRPUlxuLS1cbmRyaXZlcnMvcG93ZXIvcmVzZXQvS2NvbmZpZz0xMzE9Y29uZmlnIFBPV0VSX1JFU0VUX01BQ1NNQ1xuZHJpdmVycy9wb3dlci9yZXNldC9LY29uZmlnLTEzMi1cdHRyaXN0YXRlIFwmIzM0O0FwcGxlIFNNQyByZXNldC9wb3dlci1vZmYgZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL3Bvd2VyL3Jlc2V0L0tjb25maWc6MTMzOlx0ZGVwZW5kcyBvbiBNRkRfTUFDU01DXG5kcml2ZXJzL3Bvd2VyL3Jlc2V0L0tjb25maWctMTM0LVx0aGVscFxuLS1cbmRyaXZlcnMvcG93ZXIvc3VwcGx5L0tjb25maWc9MTE1Nz1jb25maWcgTUFDU01DX1BPV0VSXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9LY29uZmlnLTExNTgtXHR0cmlzdGF0ZSBcJiMzNDtBcHBsZSBTTUMgQmF0dGVyeSBhbmQgUG93ZXIgRHJpdmVyXCYjMzQ7XG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9LY29uZmlnOjExNTk6XHRkZXBlbmRzIG9uIE1GRF9NQUNTTUNcbmRyaXZlcnMvcG93ZXIvc3VwcGx5L0tjb25maWctMTE2MC1cdGhlbHBcbi0tXG5kcml2ZXJzL3B0cC9LY29uZmlnPTEyMj1jb25maWcgUFRQXzE1ODhfQ0xPQ0tfS1ZNXG4tLVxuZHJpdmVycy9wdHAvS2NvbmZpZy0xMjQtXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLXG5kcml2ZXJzL3B0cC9LY29uZmlnOjEyNTpcdGRlcGVuZHMgb24gKEtWTV9HVUVTVCBcdTAwMjZcdTAwMjYgWDg2KSB8fCAoSEFWRV9BUk1fU01DQ0NfRElTQ09WRVJZIFx1MDAyNlx1MDAyNiBBUk1fQVJDSF9USU1FUilcbmRyaXZlcnMvcHRwL0tjb25maWctMTI2LVx0ZGVmYXVsdCB5XG4tLVxuZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWc9MjY9Y29uZmlnIElNWF9SRU1PVEVQUk9DXG4tLVxuZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWctMjgtXHRkZXBlbmRzIG9uIEFSQ0hfTVhDXG5kcml2ZXJzL3JlbW90ZXByb2MvS2NvbmZpZzoyOTpcdGRlcGVuZHMgb24gSEFWRV9BUk1fU01DQ0NcbmRyaXZlcnMvcmVtb3RlcHJvYy9LY29uZmlnLTMwLVx0ZGVwZW5kcyBvbiBJTVhfU0NNSV9DUFVfRFJWIHx8ICFJTVhfU0NNSV9DUFVfRFJWXG4tLVxuZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWc9Mzk9Y29uZmlnIElNWF9EU1BfUkVNT1RFUFJPQ1xuLS1cbmRyaXZlcnMvcmVtb3RlcHJvYy9LY29uZmlnLTQxLVx0ZGVwZW5kcyBvbiBBUkNIX01YQ1xuZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWc6NDI6XHRkZXBlbmRzIG9uIEhBVkVfQVJNX1NNQ0NDXG5kcml2ZXJzL3JlbW90ZXByb2MvS2NvbmZpZy00My1cdHNlbGVjdCBNQUlMQk9YXG4tLVxuZHJpdmVycy9yZXNldC9LY29uZmlnPTExNz1jb25maWcgUkVTRVRfSU1YX1NDVVxuZHJpdmVycy9yZXNldC9LY29uZmlnLTExOC1cdHRyaXN0YXRlIFwmIzM0O2kuTVg4USBSZXNldCBEcml2ZXJcJiMzNDtcbmRyaXZlcnMvcmVzZXQvS2NvbmZpZzoxMTk6XHRkZXBlbmRzIG9uIElNWF9TQ1UgXHUwMDI2XHUwMDI2IEhBVkVfQVJNX1NNQ0NDXG5kcml2ZXJzL3Jlc2V0L0tjb25maWctMTIwLVx0ZGVwZW5kcyBvbiAoQVJNNjQgXHUwMDI2XHUwMDI2IEFSQ0hfTVhDKSB8fCBDT01QSUxFX1RFU1Rcbi0tXG5kcml2ZXJzL3J0Yy9LY29uZmlnPTE5MTY9Y29uZmlnIFJUQ19EUlZfSU1YX1NDXG5kcml2ZXJzL3J0Yy9LY29uZmlnLTE5MTctXHRkZXBlbmRzIG9uIElNWF9TQ1VcbmRyaXZlcnMvcnRjL0tjb25maWc6MTkxODpcdGRlcGVuZHMgb24gSEFWRV9BUk1fU01DQ0NcbmRyaXZlcnMvcnRjL0tjb25maWctMTkxOS1cdHRyaXN0YXRlIFwmIzM0O05YUCBpLk1YIFN5c3RlbSBDb250cm9sbGVyIFJUQyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9ydGMvS2NvbmZpZz0yMTAzPWNvbmZpZyBSVENfRFJWX01BQ1NNQ1xuZHJpdmVycy9ydGMvS2NvbmZpZy0yMTA0LVx0dHJpc3RhdGUgXCYjMzQ7QXBwbGUgTWFjIFN5c3RlbSBNYW5hZ2VtZW50IENvbnRyb2xsZXIgUlRDXCYjMzQ7XG5kcml2ZXJzL3J0Yy9LY29uZmlnOjIxMDU6XHRkZXBlbmRzIG9uIE1GRF9NQUNTTUNcbmRyaXZlcnMvcnRjL0tjb25maWctMjEwNi1cdGhlbHBcbi0tXG5kcml2ZXJzL3RlZS9LY29uZmlnPTM9bWVudWNvbmZpZyBURUVcbmRyaXZlcnMvdGVlL0tjb25maWctNC1cdHRyaXN0YXRlIFwmIzM0O1RydXN0ZWQgRXhlY3V0aW9uIEVudmlyb25tZW50IHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvdGVlL0tjb25maWc6NTpcdGRlcGVuZHMgb24gSEFWRV9BUk1fU01DQ0MgfHwgQ09NUElMRV9URVNUIHx8IENQVV9TVVBfQU1EXG5kcml2ZXJzL3RlZS9LY29uZmlnLTYtXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEExXG4tLVxuZHJpdmVycy90ZWUvb3B0ZWUvS2NvbmZpZz0zPWNvbmZpZyBPUFRFRVxuZHJpdmVycy90ZWUvb3B0ZWUvS2NvbmZpZy00LVx0dHJpc3RhdGUgXCYjMzQ7T1AtVEVFXCYjMzQ7XG5kcml2ZXJzL3RlZS9vcHRlZS9LY29uZmlnOjU6XHRkZXBlbmRzIG9uIEhBVkVfQVJNX1NNQ0NDXG5kcml2ZXJzL3RlZS9vcHRlZS9LY29uZmlnLTYtXHRkZXBlbmRzIG9uIE1NVVxuLS1cbmRyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZz03ODg9Y29uZmlnIElNWF9TQ19XRFRcbmRyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZy03ODktXHR0cmlzdGF0ZSBcJiMzNDtJTVggU0MgV2F0Y2hkb2dcJiMzNDtcbmRyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZzo3OTA6XHRkZXBlbmRzIG9uIEhBVkVfQVJNX1NNQ0NDXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWctNzkxLVx0ZGVwZW5kcyBvbiBJTVhfU0NVIHx8IENPTVBJTEVfVEVTVFxuLS1cbmRyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZz05Mzk9Y29uZmlnIEFSTV9TTUNfV0FUQ0hET0dcbi0tXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWctOTQyLVx0ZGVwZW5kcyBvbiBPRlxuZHJpdmVycy93YXRjaGRvZy9LY29uZmlnOjk0MzpcdGRlcGVuZHMgb24gSEFWRV9BUk1fU01DQ0NcbmRyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZy05NDQtXHRzZWxlY3QgV0FUQ0hET0dfQ09SRVxuLS1cbmRyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZz0yMzQyPWNvbmZpZyBHVU5ZQUhfV0FUQ0hET0dcbi0tXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWctMjM0NC1cdGRlcGVuZHMgb24gQVJDSF9RQ09NIHx8IENPTVBJTEVfVEVTVFxuZHJpdmVycy93YXRjaGRvZy9LY29uZmlnOjIzNDU6XHRkZXBlbmRzIG9uIEhBVkVfQVJNX1NNQ0NDXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWctMjM0Ni1cdHNlbGVjdCBXQVRDSERPR19DT1JFXG4tLVxubmV0L3NtYy9LY29uZmlnPTE0PWNvbmZpZyBTTUNfRElBR1xubmV0L3NtYy9LY29uZmlnLTE1LVx0dHJpc3RhdGUgXCYjMzQ7U01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbm5ldC9zbWMvS2NvbmZpZzoxNjpcdGRlcGVuZHMgb24gU01DXG5uZXQvc21jL0tjb25maWctMTctXHRoZWxwXG4tLVxubmV0L3NtYy9LY29uZmlnPTIzPWNvbmZpZyBTTUNfSFNfQ1RSTF9CUEZcbm5ldC9zbWMvS2NvbmZpZy0yNC1cdGJvb2wgXCYjMzQ7R2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQyBoYW5kc2hha2UgZmxvd1wmIzM0O1xubmV0L3NtYy9LY29uZmlnOjI1Olx0ZGVwZW5kcyBvbiBTTUMgXHUwMDI2XHUwMDI2IEJQRl9KSVQgXHUwMDI2XHUwMDI2IEJQRl9TWVNDQUxMXG5uZXQvc21jL0tjb25maWctMjYtXHRkZWZhdWx0IHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1NTMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmV2aWV3aW5nIHRoZSBTTUMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGlzIHN0cmFpZ2h0Zm9yd2FyZCwganVzdCBgU01DYC4gVGhhdCBtYWtlcyB0aGluZ3MgYSBiaXQgZWFzaWVyIHRvIGRpZ2VzdC4gTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgYXJlIHJlbGV2YW50IGhlcmUuIEkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZToKCiogICBgc21jX2xsY19jbGlfYWRkX2xpbmtgCiogICBgc21jX2xsY19zcnZfYWRkX2xpbmtgCiogICBgc21jX2xsY19hZGRfbGlua19sb2NhbGAKKiAgIGBzbWNfbGxjX3Nydl9kZWxldGVfbGlua19sb2NhbGAKCkFscmlnaHQsIGluaXRpYWxseSBgc21jX2xsY19jbGlfYWRkX2xpbmtgIGFuZCBgc21jX2xsY19zcnZfYWRkX2xpbmtgIHNlZW0gbGlrZSBzb2xpZCBjYW5kaWRhdGVzIHRvIGV4YW1pbmUuIEhvbGQgb24gYSBzZWNvbmQsIHRob3VnaC4uLiBJIG5lZWQgdG8gYWxzbyBjb25zaWRlciBwb3RlbnRpYWwgaW1wYWN0cyBmcm9tIHN0YXRpYyBmdW5jdGlvbnMuIFdoYXQgYWJvdXQgYHNtY19sbGNfcnhfaGFuZGxlcmA/IEl0IGlzIHN0YXRpYyB3aGljaCBuZWVkcyBjb25zaWRlcmF0aW9uLiBBbmQgd2hhdCBhYm91dCBgc21jX2xsY19ybXRfZGVsZXRlX3JrZXlgPyBBbHNvIHN0YXRpYywgc28gaXQgcmVxdWlyZXMgYXR0ZW50aW9uLiBBbmQsIG9mIGNvdXJzZSwgdGhlcmUmIzM5O3MgYHNtY19sbGNfZW5xdWV1ZWAsIGFub3RoZXIgc3RhdGljIG9uZS4KCk9rYXksIGxldCYjMzk7cyBzdGVwIGJhY2ssIGFuZCBjaGVjayB0aG9zZSByZW1haW5pbmcgZnVuY3Rpb25zLCBgc21jX2xsY19hZGRfbGlua19sb2NhbGAgYW5kIGBzbWNfbGxjX3Nydl9kZWxldGVfbGlua19sb2NhbGAuIFRoZSBrZXkgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIHRoZXkgYXJlIGV4cG9ydGVkIG9yIG5vbi1zdGF0aWMuIFRoZSBhbnN3ZXIgdG8gdGhhdCBxdWVzdGlvbiB3aWxsIGluZmx1ZW5jZSB0aGUgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NtY19sbGNfYWRkX2xpbmtfbG9jYWwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfY29yZS5jPTE3NTc9dm9pZCBzbWNyX3BvcnRfYWRkKHN0cnVjdCBzbWNfaWJfZGV2aWNlICpzbWNpYmRldiwgdTggaWJwb3J0KVxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0xNzc3LVx0XHRpZiAobGluaylcbm5ldC9zbWMvc21jX2NvcmUuYzoxNzc4Olx0XHRcdHNtY19sbGNfYWRkX2xpbmtfbG9jYWwobGluayk7XG5uZXQvc21jL3NtY19jb3JlLmMtMTc3OS1cdH1cbi0tXG5uZXQvc21jL3NtY19sbGMuYz0xNTUyPXN0YXRpYyB2b2lkIHNtY19sbGNfcHJvY2Vzc19zcnZfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IpXG4tLVxubmV0L3NtYy9zbWNfbGxjLmMtMTU3MC0vKiBlbnF1ZXVlIGEgbG9jYWwgYWRkX2xpbmsgcmVxIHRvIHRyaWdnZXIgYSBuZXcgYWRkX2xpbmsgZmxvdyAqL1xubmV0L3NtYy9zbWNfbGxjLmM6MTU3MTp2b2lkIHNtY19sbGNfYWRkX2xpbmtfbG9jYWwoc3RydWN0IHNtY19saW5rICpsaW5rKVxubmV0L3NtYy9zbWNfbGxjLmMtMTU3Mi17XG4tLVxubmV0L3NtYy9zbWNfbGxjLmM9MTY5Nz1zdGF0aWMgdm9pZCBzbWNfbGxjX3Byb2Nlc3Nfc3J2X2RlbGV0ZV9saW5rKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyKVxuLS1cbm5ldC9zbWMvc21jX2xsYy5jLTE3NTctXHRcdC8qIHRyaWdnZXIgc2V0dXAgb2YgYXN5bW0gYWx0IGxpbmsgKi9cbm5ldC9zbWMvc21jX2xsYy5jOjE3NTg6XHRcdHNtY19sbGNfYWRkX2xpbmtfbG9jYWwobG5rKTtcbm5ldC9zbWMvc21jX2xsYy5jLTE3NTktXHR9XG4tLVxubmV0L3NtYy9zbWNfbGxjLmg9MTE1PWludCBzbWNfbGxjX3Nydl9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG5uZXQvc21jL3NtY19sbGMuaC0xMTYtXHRcdFx0IHN0cnVjdCBzbWNfbGxjX3FlbnRyeSAqcmVxX3FlbnRyeSk7XG5uZXQvc21jL3NtY19sbGMuaDoxMTc6dm9pZCBzbWNfbGxjX2FkZF9saW5rX2xvY2FsKHN0cnVjdCBzbWNfbGluayAqbGluayk7XG5uZXQvc21jL3NtY19sbGMuaC0xMTgtaW50IHNtY19sbGNfaW5pdCh2b2lkKSBfX2luaXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjY4CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgTGluay1Mb2NhbCBTTUMgTExDIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gYHNtY19sbGNfYWRkX2xpbmtfbG9jYWxgIGlzbiYjMzk7dCBzdGF0aWMuIFRoYXQmIzM5O3MgZ29vZCB0byBub3RlLCBpbXBvcnRhbnQgZm9yIGhvdyBpdCYjMzk7cyBoYW5kbGVkLCB3aGVyZSBpdCBjYW4gYmUgY2FsbGVkIGZyb20sIGFuZCBvZiBjb3Vyc2UsIHdoYXQgc2NvcGUgaXQgZXhpc3RzIHdpdGhpbi4gVGhpcyBpc24mIzM5O3QganVzdCBhIHNpbXBsZSBoZWxwZXIgZnVuY3Rpb24uIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCB3aGVuIEkmIzM5O20gYXNzZXNzaW5nIGl0cyBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gYW5kLCBlc3BlY2lhbGx5LCB3aGVuIHRoaW5raW5nIGFib3V0IGl0cyBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIG9yIHJlZW50cmFuY3kgaXNzdWVzLgoKQW5kIHRoZW4sIGp1c3QgdG8gYmUgdGhvcm91Z2gsIHdoYXQgYWJvdXQgYHNtY19sbGNfc3J2X2RlbGV0ZV9saW5rX2xvY2FsYD8gSXMgKnRoYXQqIGFsc28gbm9uLXN0YXRpYz8gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdCBiZWZvcmUgSSBtb3ZlIG9uLiBUaGUgc3RhdGljL25vbi1zdGF0aWMgc3RhdHVzIG9mIHRoZXNlIGZ1bmN0aW9ucywgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiBzZXJ2aWNlIGFuZCBsaW5rIG1hbmFnZW1lbnQsIGRpY3RhdGVzIGEgbG90IGFib3V0IHRoZSBkZXNpZ24gYW5kIHBvdGVudGlhbCBwaXRmYWxscyB3aXRoaW4gdGhpcyBMTEMgbGF5ZXIuIEkgbmVlZCB0byBrbm93IHRoZSBzY29wZSBvZiBib3RoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMgYW5kIG1ha2UgdGhlIHJpZ2h0IGFzc3VtcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfbGxjX3Nydl9kZWxldGVfbGlua19sb2NhbCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19jb3JlLmM9MTc4Nj1zdGF0aWMgdm9pZCBzbWNyX2xpbmtfZG93bihzdHJ1Y3Qgc21jX2xpbmsgKmxuaylcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMTgwNC1cdFx0LyogdHJpZ2dlciBsb2NhbCBkZWxldGUgbGluayBwcm9jZXNzaW5nICovXG5uZXQvc21jL3NtY19jb3JlLmM6MTgwNTpcdFx0c21jX2xsY19zcnZfZGVsZXRlX2xpbmtfbG9jYWwodG9fbG5rLCBkZWxfbGlua19pZCk7XG5uZXQvc21jL3NtY19jb3JlLmMtMTgwNi1cdH0gZWxzZSB7XG4tLVxubmV0L3NtYy9zbWNfbGxjLmM9MTU4Mz1zdGF0aWMgdm9pZCBzbWNfbGxjX2FkZF9saW5rX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9zbWMvc21jX2xsYy5jLTE2MDUtICovXG5uZXQvc21jL3NtY19sbGMuYzoxNjA2OnZvaWQgc21jX2xsY19zcnZfZGVsZXRlX2xpbmtfbG9jYWwoc3RydWN0IHNtY19saW5rICpsaW5rLCB1OCBkZWxfbGlua19pZClcbm5ldC9zbWMvc21jX2xsYy5jLTE2MDcte1xuLS1cbm5ldC9zbWMvc21jX2xsYy5oPTg3PWludCBzbWNfbGxjX3NlbmRfZGVsZXRlX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLCB1OCBsaW5rX2RlbF9pZCxcbi0tXG5uZXQvc21jL3NtY19sbGMuaC04OS1cdFx0XHQgICAgIHUzMiByZWFzb24pO1xubmV0L3NtYy9zbWNfbGxjLmg6OTA6dm9pZCBzbWNfbGxjX3Nydl9kZWxldGVfbGlua19sb2NhbChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHU4IGRlbF9saW5rX2lkKTtcbm5ldC9zbWMvc21jX2xsYy5oLTkxLXZvaWQgc21jX2xsY19sZ3JfaW5pdChzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxnciwgc3RydWN0IHNtY19zb2NrICpzbWMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQxMAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBjb25zaWRlcmluZyB3aGF0IEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpcyBjb2RlOgoKKipBbmFseXppbmcgU01DIExMQyBMaW5rIE1hbmFnZW1lbnQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYHNtY19sbGNfc3J2X2RlbGV0ZV9saW5rX2xvY2FsYCBpc24mIzM5O3QgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIHVzZWZ1bCBpbmZvcm1hdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYnJvYWRlciBzY29wZSBvZiBpdHMgdXNlLiBNeSBtYWluIGZvY3VzLCB0aGVuLCBzaG91bGQgYmUgb24gdGhlc2UgZm91ciBrZXkgZnVuY3Rpb25zLCB1bmRlcnN0YW5kaW5nIGhvdyB0aGV5IGludGVyYWN0IHdpdGhpbiB0aGUgU01DIExMQyBsYXllcjogYHNtY19sbGNfY2xpX2FkZF9saW5rYCwgYHNtY19sbGNfc3J2X2FkZF9saW5rYCwgYHNtY19sbGNfYWRkX2xpbmtfbG9jYWxgLCBhbmQgYHNtY19sbGNfc3J2X2RlbGV0ZV9saW5rX2xvY2FsYC4gVGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBpcyBkZWZpbml0ZWx5IGBTTUNgLiBJJiMzOTtsbCB3YW50IHRvIGVuc3VyZSBgU01DYCBpcyB0aGUgb25seSBjb25maWcgaW1wYWN0aW5nIGNvbXBpbGF0aW9uIG9mIGBuZXQvc21jL3NtY19sbGMuY2AuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IG90aGVyIHBvdGVudGlhbCBjb25maWd1cmF0aW9ucy4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgdG8gYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NtY19sbGMubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL01ha2VmaWxlPTQ9b2JqLSQoQ09ORklHX1NNQ19ESUFHKVx0JiM0Mzs9IHNtY19kaWFnLm9cbm5ldC9zbWMvTWFrZWZpbGU6NTpzbWMteSA6PSBhZl9zbWMubyBzbWNfcG5ldC5vIHNtY19pYi5vIHNtY19jbGMubyBzbWNfY29yZS5vIHNtY193ci5vIHNtY19sbGMub1xubmV0L3NtYy9NYWtlZmlsZS02LXNtYy15ICYjNDM7PSBzbWNfY2RjLm8gc21jX3R4Lm8gc21jX3J4Lm8gc21jX2Nsb3NlLm8gc21jX2lzbS5vIHNtY19uZXRsaW5rLm8gc21jX3N0YXRzLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY5NTEKCQkJCQkJCW91dHB1dDogMTc3CgkJCQkJCQl0aG91Z2h0czogMTg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBTTUMgTExDIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGV4YW1pbmVkIHRoaXMgcGF0Y2gsIGFuZCBoZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmc6IGl0JiMzOTtzIGRlZmluaXRlbHkgdGFyZ2V0aW5nIHRoZSBgc21jLXlgIG1vZHVsZSwgd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZCB3aGVuIEkgc2F3IGBDT05GSUdfU01DYCBtZW50aW9uZWQuIFRoZXJlZm9yZSwgbXkgZXhwZWN0ZWQgcmVzdWx0cyBhbGlnbiBwZXJmZWN0bHkuIFdlIHNob3VsZCBzZWUgYFdvcnRoRnV6emluZzogdHJ1ZWAgYmVjYXVzZSB0aGlzIHBhdGNoIGRpcmVjdGx5IGltcGFjdHMgdGhlIFNNQyBMTEMgbWVzc2FnZSBwcm9jZXNzaW5nIGxvZ2ljLCBhIGNyaXRpY2FsIHBhcnQgb2YgdGhlIFNNQyBzdGFjay4KClRoZSBgRm9jdXNTeW1ib2xzYCBhbHNvIGxvb2sgc3BvdCBvbjsgdGhlc2UgZnVuY3Rpb25zIChgc21jX2xsY19jbGlfYWRkX2xpbmtgLCBgc21jX2xsY19zcnZfYWRkX2xpbmtgLCBgc21jX2xsY19hZGRfbGlua19sb2NhbGAsIGBzbWNfbGxjX3Nydl9kZWxldGVfbGlua19sb2NhbGApIGFyZSBleGFjdGx5IHdoZXJlIEkgd291bGQgZXhwZWN0IHRvIGZpbmQgdGhlIHZ1bG5lcmFiaWxpdHkuIFRoZXNlIGFyZSB0aGUgY29yZSBmdW5jdGlvbnMgcmVsYXRlZCB0byBsaW5rIG1hbmFnZW1lbnQsIGFuZCB0aGUgYFJlYXNvbmluZ2Agc2VjdGlvbiBjb25maXJtcyB0aGF0IGxhcmdlIG1lc3NhZ2VzIHdlcmUgY2F1c2luZyBidWZmZXIgb3ZlcmZsb3dzIHdpdGhpbiB0aGUgYHNtY19sbGNfcWVudHJ5YCBidWZmZXIsIHNvIHRoZXNlIGFyZSB0aGUgY2FuZGlkYXRlcy4KCkZ1cnRoZXJtb3JlLCBgRW5hYmxlQ29uZmlnczogLSBTTUNgIGlzIGFsc28gY29ycmVjdC4gVGhlIHBhdGNoIGRlcGVuZHMgb24gdGhlIFNNQyBmZWF0dXJlIGJlaW5nIGVuYWJsZWQuCgpUaGUgcmVhc29uaW5nIHByb3ZpZGVkIGlzIHNvbGlkOyBpdCBkZXRhaWxzIHRoZSBpc3N1ZeKAlGxhcmdlIFNNQy1SdjIgbWVzc2FnZXMsIHNwZWNpZmljYWxseSB0aGUgQUREX0xJTksgYW5kIERFTEVURV9SS0VZX1YyIHR5cGVzLCBvdmVyZmxvd2luZyB0aGUgYWxsb2NhdGVkIGJ1ZmZlci4gVGhlIGZpeCwgd2hpY2ggdXNlcyBhIGZsZXhpYmxlIGFycmF5IG1lbWJlciB0byBhbGxvY2F0ZSB0aGUgYnVmZmVyIGR5bmFtaWNhbGx5IGJhc2VkIG9uIHRoZSBtZXNzYWdlIHNpemUsIGlzIGV4YWN0bHkgdGhlIHJpZ2h0IGFwcHJvYWNoIHRvIGFkZHJlc3MgdGhpcyB0eXBlIG9mIG92ZXJmbG93IHZ1bG5lcmFiaWxpdHkuIFRoZSBtZW50aW9uIG9mIGl0IGJlaW5nIHJlYWNoYWJsZSB2aWEgQUZfU01DIHNvY2tldHMgaXMgYWxzbyBpbXBvcnRhbnQsIGVzdGFibGlzaGluZyB0aGUgcHJhY3RpY2FsIGltcGFjdCBhbmQgc3VnZ2VzdGluZyB3YXlzIHRvIGFjdHVhbGx5IHRyaWdnZXIgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTTUMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzbWNfbGxjX2NsaV9hZGRfbGluayYjMzQ7LAogICAgJiMzNDtzbWNfbGxjX3Nydl9hZGRfbGluayYjMzQ7LAogICAgJiMzNDtzbWNfbGxjX2FkZF9saW5rX2xvY2FsJiMzNDssCiAgICAmIzM0O3NtY19sbGNfc3J2X2RlbGV0ZV9saW5rX2xvY2FsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIFNNQyBMTEMgbWVzc2FnZSBlbnF1ZXVlaW5nIHdoZXJlIGxhcmdlIFNNQy1SdjIgbWVzc2FnZXMgKGxpa2UgQUREX0xJTksgYW5kIERFTEVURV9SS0VZX1YyKSB3ZXJlIG92ZXJmbG93aW5nIHRoZSBhbGxvY2F0ZWQgc21jX2xsY19xZW50cnkgYnVmZmVyLiBJdCBpbnRyb2R1Y2VzIGEgZmxleGlibGUgYXJyYXkgbWVtYmVyIHRvIGR5bmFtaWNhbGx5IGFsbG9jYXRlIHRoZSBidWZmZXIgYmFzZWQgb24gdGhlIG1lc3NhZ2Ugc2l6ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIFNNQyBMTEMgcHJvY2Vzc2luZyBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHZpYSBBRl9TTUMgc29ja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U01DJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c21jX2xsY19jbGlfYWRkX2xpbmsmIzM0OywKICAgICYjMzQ7c21jX2xsY19zcnZfYWRkX2xpbmsmIzM0OywKICAgICYjMzQ7c21jX2xsY19hZGRfbGlua19sb2NhbCYjMzQ7LAogICAgJiMzNDtzbWNfbGxjX3Nydl9kZWxldGVfbGlua19sb2NhbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBTTUMgTExDIG1lc3NhZ2UgZW5xdWV1ZWluZyB3aGVyZSBsYXJnZSBTTUMtUnYyIG1lc3NhZ2VzIChsaWtlIEFERF9MSU5LIGFuZCBERUxFVEVfUktFWV9WMikgd2VyZSBvdmVyZmxvd2luZyB0aGUgYWxsb2NhdGVkIHNtY19sbGNfcWVudHJ5IGJ1ZmZlci4gSXQgaW50cm9kdWNlcyBhIGZsZXhpYmxlIGFycmF5IG1lbWJlciB0byBkeW5hbWljYWxseSBhbGxvY2F0ZSB0aGUgYnVmZmVyIGJhc2VkIG9uIHRoZSBtZXNzYWdlIHNpemUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBTTUMgTExDIHByb2Nlc3NpbmcgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgQUZfU01DIHNvY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAyOjU4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDI6NTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBTTUMtUnYyIExMQyBtZXNzYWdlIGhhbmRsaW5nIHdoZXJlIGEgc2hhcmVkIERNQSByZWNlaXZlIGJ1ZmZlciAoYHdyX3J4X2J1Zl92MmApIGNvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGEgbmV3IGluY29taW5nIG1lc3NhZ2UgYmVmb3JlIHRoZSB3b3JrZXIgdGhyZWFkIHByb2Nlc3NlZCB0aGUgcHJldmlvdXMgb25lLiBJdCByZXNvbHZlcyB0aGlzIGJ5IGNvcHlpbmcgdGhlIHNwaWxsb3ZlciBieXRlcyBvZiB0aGUgbWVzc2FnZSBpbnRvIGEgZmxleGlibGUgYXJyYXkgaW4gYHN0cnVjdCBzbWNfbGxjX3FlbnRyeWAgYXQgdGhlIHRpbWUgb2YgcmVjZXB0aW9uLiBJdCBhbHNvIGFkZHMgYm91bmRzIGNoZWNrcyB0byBlbnN1cmUgbWVzc2FnZSBwYXJzaW5nIGRvZXMgbm90IHJlYWQgcGFzdCB0aGUgYWN0dWFsIHJlY2VpdmVkIGxlbmd0aC5cblxuQmVmb3JlIHRoaXMgcGF0Y2gsIHJlYWRpbmcgcGFzdCB0aGUgcmVjZWl2ZWQgbGVuZ3RoIHdvdWxkIHJlYWQgZnJvbSB0aGUgcmVtYWluZGVyIG9mIHRoZSByZWNlaXZlIGJ1ZmZlci4gU2luY2UgdGhpcyBidWZmZXIgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgIChvciBga2NhbGxvY2ApLCB0aGUgbWVtb3J5IHdhcyB6ZXJvLWluaXRpYWxpemVkLCBtZWFuaW5nIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdhcyBhY2Nlc3NlZC4gXG5cblRoZSBuZXdseSBpbnRyb2R1Y2VkIGBzdHJ1Y3Qgc21jX2xsY19xZW50cnlgIGlzIHN0cmljdGx5IGFuIGludGVybmFsIGtlcm5lbCBzdHJ1Y3R1cmUgdXNlZCBmb3IgcXVldWluZyBtZXNzYWdlcyB0byBhIHdvcmtlciB0aHJlYWQuIEl0IGlzIG5ldmVyIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yaywgc28gYW55IHN0cnVjdCBwYWRkaW5nIGNhbm5vdCBjYXVzZSBhbiBpbmZvLWxlYWsuIEZ1cnRoZXJtb3JlLCBhbGwgZmllbGRzIGFuZCB0aGUgZmxleGlibGUgYXJyYXkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgZHVyaW5nIGFsbG9jYXRpb24gaW4gYHNtY19sbGNfZW5xdWV1ZWAuIE1lc3NhZ2VzIGdlbmVyYXRlZCBsb2NhbGx5IGFuZCBzZW50IG92ZXIgdGhlIG5ldHdvcmsgYXJlIGZ1bGx5IHplcm9lZCB1c2luZyBgbWVtc2V0YCBiZWZvcmUgdHJhbnNtaXNzaW9uLlxuXG5TaW5jZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlcyBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGlzIHBhdGNoLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmYyYTg2MDkzY2RhMTRkNmY0N2ZkOTk3YmNkNTNiZWQxZTNkYjFkZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDE5IDAyOjU3OjQ2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfbGxjLmMgYi9uZXQvc21jL3NtY19sbGMuYwppbmRleCA5NTRiMmZmMTgxNWMyLi4zOTNhYTBhZjE4ZDFkIDEwMDY0NAotLS0gYS9uZXQvc21jL3NtY19sbGMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL3NtY19sbGMuYwpAQCAtMTU3LDYgJiM0MzsxNTcsNyBAQCBzdHJ1Y3Qgc21jX2xsY19tc2dfY29uZmlybV9ya2V5IHsJLyogdHlwZSAweDA2ICovCiB9OwogCiAjZGVmaW5lIFNNQ19MTENfREVMX1JLRVlfTUFYCTgKJiM0MzsjZGVmaW5lIFNNQ19MTENfREVMX1JLRVlfVjJfSU5MSU5FCTkKICNkZWZpbmUgU01DX0xMQ19GTEFHX1JLRVlfUkVUUlkJMHgxMAogI2RlZmluZSBTTUNfTExDX0ZMQUdfUktFWV9ORUcJMHgyMAogCkBAIC0xNzcsNiAmIzQzOzE3OCwxNSBAQCBzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXlfdjIgewkvKiB0eXBlIDB4MjkgKi8KIAlfX2JlMzIgcmtleVtdOwogfTsKIAomIzQzOy8qIHRoZSBsZWFkaW5nIHJrZXlzIG9mIGEgREVMRVRFX1JLRVlfVjIgZml0IGludG8gdW5pb24gc21jX2xsY19tc2cgKi8KJiM0MztzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXlfdjJfaW5saW5lIHsJLyogdHlwZSAweDI5ICovCiYjNDM7CXN0cnVjdCBzbWNfbGxjX2hkciBoZDsKJiM0MzsJdTggbnVtX3JrZXlzOwomIzQzOwl1OCBudW1faW52YWxfcmtleXM7CiYjNDM7CXU4IHJlc2VydmVkWzJdOwomIzQzOwlfX2JlMzIgcmtleVtTTUNfTExDX0RFTF9SS0VZX1YyX0lOTElORV07CiYjNDM7fTsKJiM0MzsKIHVuaW9uIHNtY19sbGNfbXNnIHsKIAlzdHJ1Y3Qgc21jX2xsY19tc2dfY29uZmlybV9saW5rIGNvbmZpcm1fbGluazsKIAlzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmsgYWRkX2xpbms7CkBAIC0xODYsNiAmIzQzOzE5Niw3IEBAIHVuaW9uIHNtY19sbGNfbXNnIHsKIAogCXN0cnVjdCBzbWNfbGxjX21zZ19jb25maXJtX3JrZXkgY29uZmlybV9ya2V5OwogCXN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleSBkZWxldGVfcmtleTsKJiM0MzsJc3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyX2lubGluZSBkZWxldGVfcmtleV92MjsKIAogCXN0cnVjdCBzbWNfbGxjX21zZ190ZXN0X2xpbmsgdGVzdF9saW5rOwogCXN0cnVjdCB7CkBAIC0xOTQsMTUgJiM0MzsyMDUsMjUgQEAgdW5pb24gc21jX2xsY19tc2cgewogCX0gcmF3OwogfTsKIAomIzQzO3N0YXRpY19hc3NlcnQoU01DX0xMQ19ERUxfUktFWV9WMl9JTkxJTkUgPT0KJiM0MzsJICAgICAgKHNpemVvZih1bmlvbiBzbWNfbGxjX21zZykgLQomIzQzOwkgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyLCBya2V5KSkgLwomIzQzOwkgICAgICBzaXplb2YoX19iZTMyKSk7CiYjNDM7c3RhdGljX2Fzc2VydChvZmZzZXRvZihzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXlfdjJfaW5saW5lLCBya2V5KSA9PQomIzQzOwkgICAgICBvZmZzZXRvZihzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXlfdjIsIHJrZXkpKTsKJiM0MzsKICNkZWZpbmUgU01DX0xMQ19GTEFHX1JFU1AJCTB4ODAKIAogc3RydWN0IHNtY19sbGNfcWVudHJ5IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJc3RydWN0IHNtY19saW5rICpsaW5rOwomIzQzOwl1MTYgYm9keV9sZW47CiAJdW5pb24gc21jX2xsY19tc2cgbXNnOwomIzQzOwl1OCBib2R5W10gX19jb3VudGVkX2J5KGJvZHlfbGVuKTsKIH07CiAKLXN0YXRpYyB2b2lkIHNtY19sbGNfZW5xdWV1ZShzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHVuaW9uIHNtY19sbGNfbXNnICpsbGMpOwomIzQzO3N0YXRpYyB2b2lkIHNtY19sbGNfZW5xdWV1ZShzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHVuaW9uIHNtY19sbGNfbXNnICpsbGMsCiYjNDM7CQkJICAgIHUzMiBieXRlX2xlbik7CiAKIHN0cnVjdCBzbWNfbGxjX3FlbnRyeSAqc21jX2xsY19mbG93X3FlbnRyeV9jbHIoc3RydWN0IHNtY19sbGNfZmxvdyAqZmxvdykKIHsKQEAgLTk5OCwxNSAmIzQzOzEwMTksMjAgQEAgc3RhdGljIGludCBzbWNfbGxjX2NsaV9jb25mX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLAogCiBzdGF0aWMgdm9pZCBzbWNfbGxjX3NhdmVfYWRkX2xpbmtfcmtleXMoc3RydWN0IHNtY19saW5rICpsaW5rLAogCQkJCQlzdHJ1Y3Qgc21jX2xpbmsgKmxpbmtfbmV3LAotCQkJCQl1OCAqbGxjX21zZykKJiM0MzsJCQkJCXN0cnVjdCBzbWNfbGxjX3FlbnRyeSAqcWVudHJ5KQogewomIzQzOwljb25zdCB1MzIgcnRfb2ZmID0gb2Zmc2V0b2Yoc3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rX3YyX2V4dCwgcnQpOwogCXN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua192Ml9leHQgKmV4dDsKIAlzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxnciA9IGxpbmstJmd0O2xncjsKIAlpbnQgbWF4LCBpOwogCi0JZXh0ID0gKHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua192Ml9leHQgKikobGxjX21zZyAmIzQzOwotCQkJCQkJICAgICBTTUNfV1JfVFhfU0laRSk7CiYjNDM7CS8qIHRoZSBya2V5IGNvdW50IGl0c2VsZiBpcyBvbmx5IHRoZXJlIGlmIGVub3VnaCBieXRlcyBhcnJpdmVkICovCiYjNDM7CWlmIChxZW50cnktJmd0O2JvZHlfbGVuICZsdDsgcnRfb2ZmKQomIzQzOwkJcmV0dXJuOwomIzQzOwlleHQgPSAoc3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rX3YyX2V4dCAqKXFlbnRyeS0mZ3Q7Ym9keTsKIAltYXggPSBtaW5fdCh1OCwgZXh0LSZndDtudW1fcmtleXMsIFNNQ19MTENfUktFWVNfUEVSX01TR19WMik7CiYjNDM7CW1heCA9IG1pbl90KHUzMiwgbWF4LCAocWVudHJ5LSZndDtib2R5X2xlbiAtIHJ0X29mZikgLwomIzQzOwkJCSAgICAgIHNpemVvZihleHQtJmd0O3J0WzBdKSk7CiAJZG93bl93cml0ZSgmYW1wO2xnci0mZ3Q7cm1ic19sb2NrKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgbWF4OyBpJiM0MzsmIzQzOykgewogCQlzbWNfcnRva2VuX3NldChsZ3IsIGxpbmstJmd0O2xpbmtfaWR4LCBsaW5rX25ldy0mZ3Q7bGlua19pZHgsCkBAIC0xMDk5LDkgJiM0MzsxMTI1LDcgQEAgaW50IHNtY19sbGNfY2xpX2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluaywgc3RydWN0IHNtY19sbGNfcWVudHJ5ICpxZW50cnkpCiAJaWYgKHJjKQogCQlnb3RvIG91dF9jbGVhcl9sbms7CiAJaWYgKGxnci0mZ3Q7c21jX3ZlcnNpb24gPT0gU01DX1YyKSB7Ci0JCXU4ICpsbGNfbXNnID0gc21jX2xpbmtfc2hhcmVkX3YyX3J4YnVmKGxpbmspID8KLQkJCSh1OCAqKWxnci0mZ3Q7d3JfcnhfYnVmX3YyIDogKHU4ICopbGxjOwotCQlzbWNfbGxjX3NhdmVfYWRkX2xpbmtfcmtleXMobGluaywgbG5rX25ldywgbGxjX21zZyk7CiYjNDM7CQlzbWNfbGxjX3NhdmVfYWRkX2xpbmtfcmtleXMobGluaywgbG5rX25ldywgcWVudHJ5KTsKIAl9IGVsc2UgewogCQlyYyA9IHNtY19sbGNfY2xpX3JrZXlfZXhjaGFuZ2UobGluaywgbG5rX25ldyk7CiAJCWlmIChyYykgewpAQCAtMTQ4MSw3ICYjNDM7MTUwNSw3IEBAIGludCBzbWNfbGxjX3Nydl9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssCiAJfQogCWFkZF9sbGMgPSAmYW1wO3FlbnRyeS0mZ3Q7bXNnLmFkZF9saW5rOwogCWlmIChhZGRfbGxjLSZndDtoZC5mbGFncyAmYW1wOyBTTUNfTExDX0ZMQUdfQUREX0xOS19SRUopIHsKLQkJc21jX2xsY19mbG93X3FlbnRyeV9kZWwoJmFtcDtsZ3ItJmd0O2xsY19mbG93X2xjbCk7CiYjNDM7CQlzbWNfbGxjX2Zsb3dfcWVudHJ5X2NscigmYW1wO2xnci0mZ3Q7bGxjX2Zsb3dfbGNsKTsKIAkJcmMgPSAtRU5PTElOSzsKIAkJZ290byBvdXRfZXJyOwogCX0KQEAgLTE0OTIsNyAmIzQzOzE1MTYsOCBAQCBpbnQgc21jX2xsY19zcnZfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLAogCQlsZ3JfbmV3X3QgPSBTTUNfTEdSX0FTWU1NRVRSSUNfUEVFUjsKIAl9CiAJc21jX2xsY19zYXZlX2FkZF9saW5rX2luZm8obGlua19uZXcsIGFkZF9sbGMpOwotCXNtY19sbGNfZmxvd19xZW50cnlfZGVsKCZhbXA7bGdyLSZndDtsbGNfZmxvd19sY2wpOwomIzQzOwkvKiBhZGRfbGxjIHN0aWxsIHBvaW50cyBpbnRvIHFlbnRyeSwgc28gb25seSBkZXRhY2ggaXQgaGVyZSAqLwomIzQzOwlzbWNfbGxjX2Zsb3dfcWVudHJ5X2NscigmYW1wO2xnci0mZ3Q7bGxjX2Zsb3dfbGNsKTsKIAogCXJjID0gc21jX2liX3JlYWR5X2xpbmsobGlua19uZXcpOwogCWlmIChyYykKQEAgLTE1MDEsOSAmIzQzOzE1MjYsNyBAQCBpbnQgc21jX2xsY19zcnZfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLAogCWlmIChyYykKIAkJZ290byBvdXRfZXJyOwogCWlmIChsZ3ItJmd0O3NtY192ZXJzaW9uID09IFNNQ19WMikgewotCQl1OCAqbGxjX21zZyA9IHNtY19saW5rX3NoYXJlZF92Ml9yeGJ1ZihsaW5rKSA/Ci0JCQkodTggKilsZ3ItJmd0O3dyX3J4X2J1Zl92MiA6ICh1OCAqKWFkZF9sbGM7Ci0JCXNtY19sbGNfc2F2ZV9hZGRfbGlua19ya2V5cyhsaW5rLCBsaW5rX25ldywgbGxjX21zZyk7CiYjNDM7CQlzbWNfbGxjX3NhdmVfYWRkX2xpbmtfcmtleXMobGluaywgbGlua19uZXcsIHFlbnRyeSk7CiAJfSBlbHNlIHsKIAkJcmMgPSBzbWNfbGxjX3Nydl9ya2V5X2V4Y2hhbmdlKGxpbmssIGxpbmtfbmV3KTsKIAkJaWYgKHJjKQpAQCAtMTUxMiwxNCAmIzQzOzE1MzUsMTQgQEAgaW50IHNtY19sbGNfc3J2X2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluaywKIAlyYyA9IHNtY19sbGNfc3J2X2NvbmZfbGluayhsaW5rLCBsaW5rX25ldywgbGdyX25ld190KTsKIAlpZiAocmMpCiAJCWdvdG8gb3V0X2VycjsKLQlrZnJlZShpbmkpOwotCXJldHVybiAwOwomIzQzOwlnb3RvIG91dDsKIG91dF9lcnI6CiAJaWYgKGxpbmtfbmV3KSB7CiAJCWxpbmtfbmV3LSZndDtzdGF0ZSA9IFNNQ19MTktfSU5BQ1RJVkU7CiAJCXNtY3JfbGlua19jbGVhcihsaW5rX25ldywgZmFsc2UpOwogCX0KIG91dDoKJiM0MzsJa2ZyZWUocWVudHJ5KTsKIAlrZnJlZShpbmkpOwogCWlmIChzZW5kX3JlcV9hZGRfbGlua19yZXNwKQogCQlzbWNfbGxjX3NlbmRfcmVxX2FkZF9saW5rX3Jlc3BvbnNlKHJlcV9xZW50cnkpOwpAQCAtMTU1Miw3ICYjNDM7MTU3NSw4IEBAIHZvaWQgc21jX2xsY19hZGRfbGlua19sb2NhbChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmspCiAJYWRkX2xsYy5oZC5jb21tb24ubGxjX3R5cGUgPSBTTUNfTExDX0FERF9MSU5LOwogCXNtY19sbGNfaW5pdF9tc2dfaGRyKCZhbXA7YWRkX2xsYy5oZCwgbGluay0mZ3Q7bGdyLCBzaXplb2YoYWRkX2xsYykpOwogCS8qIG5vIGRldiBhbmQgcG9ydCBuZWVkZWQgKi8KLQlzbWNfbGxjX2VucXVldWUobGluaywgKHVuaW9uIHNtY19sbGNfbXNnICopJmFtcDthZGRfbGxjKTsKJiM0MzsJc21jX2xsY19lbnF1ZXVlKGxpbmssICh1bmlvbiBzbWNfbGxjX21zZyAqKSZhbXA7YWRkX2xsYywKJiM0MzsJCQlzaXplb2YodW5pb24gc21jX2xsY19tc2cpKTsKIH0KIAogLyogd29ya2VyIHRvIHByb2Nlc3MgYW4gYWRkIGxpbmsgbWVzc2FnZSAqLwpAQCAtMTU4OCw3ICYjNDM7MTYxMiw4IEBAIHZvaWQgc21jX2xsY19zcnZfZGVsZXRlX2xpbmtfbG9jYWwoc3RydWN0IHNtY19saW5rICpsaW5rLCB1OCBkZWxfbGlua19pZCkKIAlkZWxfbGxjLmxpbmtfbnVtID0gZGVsX2xpbmtfaWQ7CiAJZGVsX2xsYy5yZWFzb24gPSBodG9ubChTTUNfTExDX0RFTF9MT1NUX1BBVEgpOwogCWRlbF9sbGMuaGQuZmxhZ3MgfD0gU01DX0xMQ19GTEFHX0RFTF9MSU5LX09SREVSTFk7Ci0Jc21jX2xsY19lbnF1ZXVlKGxpbmssICh1bmlvbiBzbWNfbGxjX21zZyAqKSZhbXA7ZGVsX2xsYyk7CiYjNDM7CXNtY19sbGNfZW5xdWV1ZShsaW5rLCAodW5pb24gc21jX2xsY19tc2cgKikmYW1wO2RlbF9sbGMsCiYjNDM7CQkJc2l6ZW9mKHVuaW9uIHNtY19sbGNfbXNnKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNtY19sbGNfcHJvY2Vzc19jbGlfZGVsZXRlX2xpbmsoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IpCkBAIC0xODEwLDE5ICYjNDM7MTgzNSwyOCBAQCBzdGF0aWMgdm9pZCBzbWNfbGxjX3JtdF9kZWxldGVfcmtleShzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncikKIAlsaW5rID0gcWVudHJ5LSZndDtsaW5rOwogCiAJaWYgKGxnci0mZ3Q7c21jX3ZlcnNpb24gPT0gU01DX1YyKSB7Ci0JCXN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92MiAqbGxjdjI7CiYjNDM7CQlzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXlfdjJfaW5saW5lICpsbGN2MjsKIAotCQlpZiAoc21jX2xpbmtfc2hhcmVkX3YyX3J4YnVmKGxpbmspKSB7Ci0JCQltZW1jcHkobGdyLSZndDt3cl9yeF9idWZfdjIsIGxsYywgc2l6ZW9mKCpsbGMpKTsKLQkJCWxsY3YyID0gKHN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92MiAqKWxnci0mZ3Q7d3JfcnhfYnVmX3YyOwotCQl9IGVsc2UgewotCQkJbGxjdjIgPSAoc3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyICopbGxjOwotCQl9CiYjNDM7CQkvKiBUaGUgbGVhZGluZyBTTUNfTExDX0RFTF9SS0VZX1YyX0lOTElORSBya2V5cyBhcmUgZGVjbGFyZWQgaW4KJiM0MzsJCSAqIHRoZSBtZXNzYWdlIGl0c2VsZiwgYW55IGZ1cnRoZXIgb25lcyB3ZXJlIHJlY2VpdmVkIGludG8KJiM0MzsJCSAqIHFlbnRyeS0mZ3Q7Ym9keS4KJiM0MzsJCSAqLwomIzQzOwkJbGxjdjIgPSAmYW1wO3FlbnRyeS0mZ3Q7bXNnLmRlbGV0ZV9ya2V5X3YyOwogCQlsbGN2Mi0mZ3Q7bnVtX2ludmFsX3JrZXlzID0gMDsKIAogCQltYXggPSBtaW5fdCh1OCwgbGxjdjItJmd0O251bV9ya2V5cywgU01DX0xMQ19SS0VZU19QRVJfTVNHX1YyKTsKJiM0MzsJCW1heCA9IG1pbl90KHUzMiwgbWF4LCBTTUNfTExDX0RFTF9SS0VZX1YyX0lOTElORSAmIzQzOwomIzQzOwkJCQkgICAgICBxZW50cnktJmd0O2JvZHlfbGVuIC8gc2l6ZW9mKF9fYmUzMikpOwogCQlmb3IgKGkgPSAwOyBpICZsdDsgbWF4OyBpJiM0MzsmIzQzOykgewotCQkJaWYgKHNtY19ydG9rZW5fZGVsZXRlKGxpbmssIGxsY3YyLSZndDtya2V5W2ldKSkKJiM0MzsJCQlfX2JlMzIgcmtleTsKJiM0MzsKJiM0MzsJCQlpZiAoaSAmbHQ7IFNNQ19MTENfREVMX1JLRVlfVjJfSU5MSU5FKQomIzQzOwkJCQlya2V5ID0gbGxjdjItJmd0O3JrZXlbaV07CiYjNDM7CQkJZWxzZQomIzQzOwkJCQltZW1jcHkoJmFtcDtya2V5LCBxZW50cnktJmd0O2JvZHkgJiM0MzsKJiM0MzsJCQkJCSAgICAgIChpIC0gU01DX0xMQ19ERUxfUktFWV9WMl9JTkxJTkUpICoKJiM0MzsJCQkJCSAgICAgIHNpemVvZihya2V5KSwgc2l6ZW9mKHJrZXkpKTsKJiM0MzsJCQlpZiAoc21jX3J0b2tlbl9kZWxldGUobGluaywgcmtleSkpCiAJCQkJbGxjdjItJmd0O251bV9pbnZhbF9ya2V5cyYjNDM7JiM0Mzs7CiAJCX0KIAkJbWVtc2V0KCZhbXA7bGxjLSZndDtya2V5WzBdLCAwLCBzaXplb2YobGxjLSZndDtya2V5KSk7CkBAIC0yMDYzLDE4ICYjNDM7MjA5Nyw1MiBAQCBzdGF0aWMgdm9pZCBzbWNfbGxjX3J4X3Jlc3BvbnNlKHN0cnVjdCBzbWNfbGluayAqbGluaywKIAl3YWtlX3VwKCZhbXA7bGluay0mZ3Q7bGdyLSZndDtsbGNfbXNnX3dhaXRlcik7CiB9CiAKLXN0YXRpYyB2b2lkIHNtY19sbGNfZW5xdWV1ZShzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHVuaW9uIHNtY19sbGNfbXNnICpsbGMpCiYjNDM7LyogdGhlIGxvbmdlc3QgdGFpbCBlaXRoZXIgcmVhZGVyIG9mIHFlbnRyeS0mZ3Q7Ym9keSBjYW4gdXNlICovCiYjNDM7c3RhdGljIHUzMiBzbWNfbGxjX21heF9ib2R5X2xlbih1bmlvbiBzbWNfbGxjX21zZyAqbGxjKQomIzQzO3sKJiM0MzsJc3dpdGNoIChsbGMtJmd0O3Jhdy5oZHIuY29tbW9uLmxsY190eXBlKSB7CiYjNDM7CWNhc2UgU01DX0xMQ19BRERfTElOSzoKJiM0MzsJCXJldHVybiBvZmZzZXRvZihzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfdjJfZXh0LCBydCkgJiM0MzsKJiM0MzsJCSAgICAgICBTTUNfTExDX1JLRVlTX1BFUl9NU0dfVjIgKgomIzQzOwkJICAgICAgIHNpemVvZihzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfY29udF9ydCk7CiYjNDM7CWNhc2UgU01DX0xMQ19ERUxFVEVfUktFWToKJiM0MzsJCXJldHVybiAoU01DX0xMQ19SS0VZU19QRVJfTVNHX1YyIC0KJiM0MzsJCQlTTUNfTExDX0RFTF9SS0VZX1YyX0lOTElORSkgKiBzaXplb2YoX19iZTMyKTsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHNtY19sbGNfZW5xdWV1ZShzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHVuaW9uIHNtY19sbGNfbXNnICpsbGMsCiYjNDM7CQkJICAgIHUzMiBieXRlX2xlbikKIHsKIAlzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxnciA9IGxpbmstJmd0O2xncjsKIAlzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnFlbnRyeTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwl1MTYgYm9keV9sZW4gPSAwOwomIzQzOwomIzQzOwkvKiBWMiBtZXNzYWdlcyBjYW4gYmUgbG9uZ2VyIHRoYW4gdGhlIGlubGluZSB1bmlvbiBzbWNfbGxjX21zZy4gQ2FycnkKJiM0MzsJICogdGhlIHJlbWFpbmRlciBpbiB0aGUgcWVudHJ5IGl0c2VsZiwgc28gdGhhdCBpdHMgbGlmZXRpbWUgYW5kIGl0cwomIzQzOwkgKiBsZW5ndGggbWF0Y2ggdGhlIG1lc3NhZ2UgdGhlIHBlZXIgYWN0dWFsbHkgc2VudC4KJiM0MzsJICovCiYjNDM7CWlmIChsZ3ItJmd0O3NtY192ZXJzaW9uID09IFNNQ19WMiAmYW1wOyZhbXA7IGJ5dGVfbGVuICZndDsgU01DX1dSX1RYX1NJWkUpCiYjNDM7CQlib2R5X2xlbiA9IG1pbl90KHUzMiwgYnl0ZV9sZW4sIFNNQ19XUl9CVUZfVjJfU0laRSkgLQomIzQzOwkJCSAgIFNNQ19XUl9UWF9TSVpFOwomIzQzOwlib2R5X2xlbiA9IG1pbl90KHUzMiwgYm9keV9sZW4sIHNtY19sbGNfbWF4X2JvZHlfbGVuKGxsYykpOwogCi0JcWVudHJ5ID0ga21hbGxvY19vYmooKnFlbnRyeSwgR0ZQX0FUT01JQyk7CiYjNDM7CXFlbnRyeSA9IGttYWxsb2NfZmxleCgqcWVudHJ5LCBib2R5LCBib2R5X2xlbiwgR0ZQX0FUT01JQyk7CiAJaWYgKCFxZW50cnkpCiAJCXJldHVybjsKJiM0MzsJcWVudHJ5LSZndDtib2R5X2xlbiA9IGJvZHlfbGVuOwogCXFlbnRyeS0mZ3Q7bGluayA9IGxpbms7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtxZW50cnktJmd0O2xpc3QpOwogCW1lbWNweSgmYW1wO3FlbnRyeS0mZ3Q7bXNnLCBsbGMsIHNpemVvZih1bmlvbiBzbWNfbGxjX21zZykpOwomIzQzOwlpZiAoYm9keV9sZW4pIHsKJiM0MzsJCXU4ICpzcmMgPSBzbWNfbGlua19zaGFyZWRfdjJfcnhidWYobGluaykgPwomIzQzOwkJCSh1OCAqKWxnci0mZ3Q7d3JfcnhfYnVmX3YyIDogKHU4ICopbGxjOwomIzQzOwomIzQzOwkJbWVtY3B5KHFlbnRyeS0mZ3Q7Ym9keSwgc3JjICYjNDM7IFNNQ19XUl9UWF9TSVpFLCBib2R5X2xlbik7CiYjNDM7CX0KIAogCS8qIHByb2Nlc3MgcmVzcG9uc2VzIGltbWVkaWF0ZWx5ICovCiAJaWYgKChsbGMtJmd0O3Jhdy5oZHIuZmxhZ3MgJmFtcDsgU01DX0xMQ19GTEFHX1JFU1ApICZhbXA7JmFtcDsKQEAgLTIxMDYsNyAmIzQzOzIxNzQsNyBAQCBzdGF0aWMgdm9pZCBzbWNfbGxjX3J4X2hhbmRsZXIoc3RydWN0IGliX3djICp3Yywgdm9pZCAqYnVmKQogCQkJcmV0dXJuOyAvKiBpbnZhbGlkIG1lc3NhZ2UgKi8KIAl9CiAKLQlzbWNfbGxjX2VucXVldWUobGluaywgbGxjKTsKJiM0MzsJc21jX2xsY19lbnF1ZXVlKGxpbmssIGxsYywgd2MtJmd0O2J5dGVfbGVuKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqIHdvcmtlciwgdXRpbHMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfd3IuYyBiL25ldC9zbWMvc21jX3dyLmMKaW5kZXggNTljOTJiNDY5NDVjNS4uOTdiYTQ2ODkzYjE3ZiAxMDA2NDQKLS0tIGEvbmV0L3NtYy9zbWNfd3IuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL3NtY193ci5jCkBAIC02MDIsOSAmIzQzOzYwMiw5IEBAIHN0YXRpYyB2b2lkIHNtY193cl9pbml0X3NnZShzdHJ1Y3Qgc21jX2xpbmsgKmxuaykKIAogCS8qIFdpdGggU01DLVJ2MiB0aGVyZSBjYW4gYmUgbWVzc2FnZXMgbGFyZ2VyIHRoYW4gU01DX1dSX1RYX1NJWkUuCiAJICogRWFjaCBpYl9yZWN2X3dyIGdldHMgMiBzZ2VzLCB0aGUgc2Vjb25kIG9uZSBpcyBhIHNwaWxsb3ZlciBidWZmZXIKLQkgKiBhbmQgdGhlIHNhbWUgYnVmZmVyIGZvciBhbGwgc2dlcy4gV2hlbiBhIGxhcmdlciBtZXNzYWdlIGFycml2ZWQgdGhlbgotCSAqIHRoZSBjb250ZW50IG9mIHRoZSBmaXJzdCBzbWFsbCBzZ2UgaXMgY29waWVkIHRvIHRoZSBiZWdpbm5pbmcgb2YKLQkgKiB0aGUgbGFyZ2VyIHNwaWxsb3ZlciBidWZmZXIsIGFsbG93aW5nIGVhc3kgZGF0YSBtYXBwaW5nLgomIzQzOwkgKiBhbmQgdGhlIHNhbWUgYnVmZmVyIGZvciBhbGwgc2dlcy4gVGhlIHNwaWxsb3ZlciBzZ2Ugc3RhcnRzIGF0CiYjNDM7CSAqIFNNQ19XUl9UWF9TSVpFLCBzbyB0aGUgbGVhZGluZyBieXRlcyBvZiB0aGF0IGJ1ZmZlciBhcmUgbmV2ZXIKJiM0MzsJICogd3JpdHRlbi4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpICZsdDsgbG5rLSZndDt3cl9yeF9jbnQ7IGkmIzQzOyYjNDM7KSB7CiAJCWludCB4ID0gaSAqIGxuay0mZ3Q7d3Jfcnhfc2dlX2NudDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1MTEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNzk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBKdXN0aWZpY2F0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggbmVlZHMgYSBjbG9zZXIgbG9vayB0byBzZWUgaWYgaXQgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGUgY2hhbmdlcyBhcmUgaW4gYG5ldC9zbWMvc21jX2xsYy5jYCBhbmQgYG5ldC9zbWMvc21jX3dyLmNgLCBhbmQgdGhleSYjMzk7cmUgZm9jdXNlZCBvbiBob3cgU01DIExMQyBtZXNzYWdlcyBhcmUgaGFuZGxlZCwgZXNwZWNpYWxseSBmb3IgU01DLVJ2Miwgd2hlcmUgbWVzc2FnZSBzaXplcyBjYW4gYmUgbGFyZ2VyIHRoYW4gd2hhdCYjMzk7cyBub3JtYWxseSBleHBlY3RlZCAoYFNNQ19XUl9UWF9TSVpFYCkuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gc2NydXRpbml6ZSBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZSBrZXkgYXJlYSBpcyBob3cgZGF0YSBpcyByZWNlaXZlZCBmcm9tIHRoZSBuZXR3b3JrIGFuZCBzdG9yZWQgd2l0aGluIHRoZSBgcWVudHJ5YCBzdHJ1Y3R1cmUuIGBzbWNfbGxjX2VucXVldWVgIHVzZXMgYGttYWxsb2NfZmxleGAuIE5vdywgYGttYWxsb2NfZmxleGAgZG9lcyAqbm90KiB6ZXJvIHRoZSBtZW1vcnksIGl0IGFsbG9jYXRlcyBtZW1vcnkgd2l0aCBgR0ZQX0FUT01JQ2Agd2l0aG91dCBgX19HRlBfWkVST2AuIEhvd2V2ZXIsIGl0ICpzZWVtcyogbGlrZSBldmVyeXRoaW5nIHdpdGhpbiBgcWVudHJ5YCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBvciBjb3BpZWQgZnJvbSBhbiBlc3RhYmxpc2hlZCBzb3VyY2U6CiogICBgYm9keV9sZW5gIGlzIGFzc2lnbmVkLgoqICAgYGxpbmtgIGlzIGFzc2lnbmVkLgoqICAgYGxpc3RgIGlzIGluaXRpYWxpemVkLgoqICAgYG1zZ2AgaXMgY29waWVkIGZyb20gYGxsY2AKKiAgIGBib2R5YCBpcyBjb3BpZWQgZnJvbSBgc3JjICYjNDM7IFNNQ19XUl9UWF9TSVpFYCBmb3IgYGJvZHlfbGVuYCBieXRlcy4KCkkgbmVlZCB0byBjb25maXJtIGlmIHRoYXQmIzM5O3MgYWNjdXJhdGUuCgpOb3csIHBhZGRpbmcgaW4gYHN0cnVjdCBzbWNfbGxjX3FlbnRyeWAgY291bGQgYWxzbyBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIExldCYjMzk7cyBicmVhayBpdCBkb3duOiBgbGlzdGAgaXMgMTYgYnl0ZXMuIGBsaW5rYCBpcyA4IGJ5dGVzLiBgYm9keV9sZW5gIGlzIDIgYnl0ZXMuIFNvIHRoZXJlIHdvdWxkIGJlIDYgYnl0ZXMgb2YgcGFkZGluZyBiZWZvcmUgYG1zZ2AgKGFzc3VtaW5nIGFuIDgtYnl0ZSBhbGlnbm1lbnQgaXMgcmVxdWlyZWQuIEhvd2V2ZXIsIHRoZXJlIG1pZ2h0IGJlIHNtYWxsZXIgYWxpZ25tZW50IHJlcXVpcmVtZW50cy4pIEkgc2hvdWxkIGNoZWNrIHRoZSBhbGlnbm1lbnQgb2YgYHVuaW9uIHNtY19sbGNfbXNnYCB0byBtYWtlIHN1cmUgdGhlcmUmIzM5O3Mgbm8gc3VidGxlIGlzc3VlIHRoZXJlLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgdXAgdGhlIGNvbnRlbnRzIG9mIGB1bmlvbiBzbWNfbGxjX21zZ2AuCgpEb2VzIHRoaXMgc3RydWN0IGV2ZXIgbGVhdmUgdGhlIGtlcm5lbD8gSXQgbG9va3MgbGlrZSBgcWVudHJ5YCBpcyBpbnRlcm5hbCBhbmQgdXNlZCB0byBxdWV1ZSBtZXNzYWdlcyBmb3Igd29ya2VyIHRocmVhZHMuIEl0JiMzOTtzIGFsbG9jYXRlZCwgcG9wdWxhdGVkLCBwcm9jZXNzZWQsIGFuZCB0aGVuIGZyZWVkLiBGb3IgZXhhbXBsZSwgYHNtY19sbGNfc3J2X2FkZF9saW5rYCBmcmVlcyB0aGUgYHFlbnRyeWAuCgpJcyB0aGUgZGF0YSBldmVyIGNvcGllZCBiYWNrIG91dD8gTm8sIGl0IGRvZXNuJiMzOTt0IGxvb2sgbGlrZSBgcWVudHJ5YCBpdHNlbGYgaXMgc2VudCBvdmVyIHRoZSBuZXR3b3JrLiBJbiBgc21jX2xsY19zcnZfYWRkX2xpbmtgLCBpdCBsb29rcyBsaWtlIGZpZWxkcyBvZiBgcWVudHJ5LSZndDttc2dgIGFyZSBhY2Nlc3NlZCwgYnV0IHRoZSBmdWxsIHN0cnVjdHVyZSBpc24mIzM5O3QuCgpOb3csIGEgcG90ZW50aWFsIGlzc3VlIGFyaXNlcyB3aXRoIGBzbWNfbGxjX2FkZF9saW5rX2xvY2FsYC4gQSBsb2NhbCB2YXJpYWJsZSBgYWRkX2xsY2AgaXMgY3JlYXRlZCwgYW5kIHRoZW4gcGFzc2VkIHRvIGBzbWNfbGxjX2VucXVldWVgLiBUaGVyZSYjMzk7cyBhIGBtZW1jcHlgIGZyb20gdGhlIHN0YWNrIHZhcmlhYmxlIGBhZGRfbGxjYCB0byBgcWVudHJ5LSZndDttc2dgIHVzaW5nIGBzaXplb2YodW5pb24gc21jX2xsY19tc2cpYC4gSWYgYGFkZF9sbGNgIGlzIHNtYWxsZXIsIHRoZW4gdGhpcyB3b3VsZCByZXN1bHQgaW4gYW4gb3V0LW9mLWJvdW5kcyByZWFkISBJIG5lZWQgdG8gdmVyaWZ5IHNpemVzIG9mIGBzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtgIGFuZCBgdW5pb24gc21jX2xsY19tc2dgLiBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIHNlYXJjaCBmb3IgYHNtY19sbGNfbXNnX2FkZF9saW5rYCBhbmQgYHVuaW9uIHNtY19sbGNfbXNnYCBhbmQgdGhlaXIgZGVmaW5pdGlvbnMgaW4gdGhlIGNvZGUuIFRoaXMgaXMgdGhlIGNydWNpYWwgcG9pbnQgZm9yIGEgcG90ZW50aWFsIEtNU0FOIGlzc3VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmsgXFx7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfbGxjLmM9NDc9c3RydWN0IHNtY19sbGNfbXNnX2NvbmZpcm1fbGluayB7XHQvKiB0eXBlIDB4MDEgKi9cbi0tXG5uZXQvc21jL3NtY19sbGMuYy02MS1cbm5ldC9zbWMvc21jX2xsYy5jOjYyOnN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGluayB7XHRcdC8qIHR5cGUgMHgwMiAqL1xubmV0L3NtYy9zbWNfbGxjLmMtNjMtXHRzdHJ1Y3Qgc21jX2xsY19oZHIgaGQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyMzMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIGBzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtgKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua2AuIFRpbWUgdG8gZGlnIGludG8gdGhlIGRldGFpbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb21wbGV0ZSBkZWZpbml0aW9uLCBpbnNpZGUgYW5kIG91dC4gSXQmIzM5O3Mgbm90IGVub3VnaCB0byBoYXZlIGEgZ2VuZXJhbCBpZGVhOyBJIG5lZWQgdGhlIGZ1bGwgcGljdHVyZSwgYWxsIHRoZSBtZW1iZXIgdmFyaWFibGVzLCBkYXRhIHR5cGVzLCBhbmQgYW55IGFzc29jaWF0ZWQgY29tbWVudHMuIEkgbmVlZCB0byBzZWUgZXhhY3RseSAqaG93KiB0aGlzIHN0cnVjdCBpcyBkZWZpbmVkLiBXaGF0IGFyZSBpdHMgY29tcG9uZW50cz8gV2hhdCBpbmZvcm1hdGlvbiBkb2VzIGl0IGNhcnJ5PyBJcyB0aGVyZSBhbnl0aGluZyBzdWJ0bGUgb3Igbm9uLW9idmlvdXMgdGhhdCBJIG1pZ2h0IG1pc3MgaWYgSSBqdXN0IHNraW0gdGhlIHN1cmZhY2U/IFRoaXMgdW5kZXJzdGFuZGluZyBpcyBmb3VuZGF0aW9uYWwgdG8gd29ya2luZyB3aXRoIHRoZSBtZXNzYWdlIGFuZCBrbm93aW5nIHdoYXQgdGhlIHN0cnVjdCBpcyBkZXNpZ25lZCB0byBkby4gTXkgam9iIGlzIHRvIGtub3cgZXZlcnkgbm9vayBhbmQgY3Jhbm55IG9mIHRoaXMgc3RydWN0LCBJJiMzOTttIG5vdCBnb2luZyB0byBsZWF2ZSBpdCB1cCB0byBhc3N1bXB0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGluayBcXHsuKlxcfSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUwMwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFNNQyBMTEMgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBtdWx0aS1saW5lIGNvbnRleHQuIExldCYjMzk7cyBnZXQgc3RyYWlnaHQgdG8gdGhlIHBvaW50OiBJJiMzOTttIHB1bGxpbmcgdXAgYG5ldC9zbWMvc21jX2xsYy5jYCDigJMgc3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXJvdW5kIGxpbmUgNjIuIEkmIzM5O20gcHJvYmFibHkgYWZ0ZXIgc29tZXRoaW5nIHNwZWNpZmljIGluIHRoZSBMb3dlciBMYXllciBDb250cm9sIChMTEMpIG1vZHVsZTsgbGlrZWx5IGRlYWxpbmcgd2l0aCBob3cgU01DIGhhbmRsZXMgbG93ZXItbGV2ZWwgbGluayBjb250cm9sIHdpdGhpbiB0aGUgbmV0d29yayBzdGFjay4gSSBhbnRpY2lwYXRlIHRoZXJlIG1pZ2h0IGJlIHNvbWUgc3VidGxldHkgdGhlcmUsIG9yIEkmIzM5O3ZlIGhhZCBhIHJlY2VudCBkaXNjdXNzaW9uIGFuZCBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoYXQgcGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc21jL3NtY19sbGMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNTA6XHRcdHU4IHNlbmRlcl9naWRbU01DX0dJRF9TSVpFXTtcbiAgNTE6XHRcdHU4IHNlbmRlcl9xcF9udW1bM107XG4gIDUyOlx0XHR1OCBsaW5rX251bTtcbiAgNTM6XHRcdHU4IGxpbmtfdWlkW1NNQ19MR1JfSURfU0laRV07XG4gIDU0Olx0XHR1OCBtYXhfbGlua3M7XG4gIDU1Olx0XHR1OCBtYXhfY29ubnM7XG4gIDU2Olx0XHR1OCByZXNlcnZlZFs4XTtcbiAgNTc6XHR9O1xuICA1ODpcdFxuICA1OTpcdCNkZWZpbmUgU01DX0xMQ19GTEFHX0FERF9MTktfUkVKXHQweDQwXG4gIDYwOlx0I2RlZmluZSBTTUNfTExDX1JFSl9SU05fTk9fQUxUX1BBVEhcdDFcbiAgNjE6XHRcbiAgNjI6XHRzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmsge1x0XHQvKiB0eXBlIDB4MDIgKi9cbiAgNjM6XHRcdHN0cnVjdCBzbWNfbGxjX2hkciBoZDtcbiAgNjQ6XHRcdHU4IHNlbmRlcl9tYWNbRVRIX0FMRU5dO1xuICA2NTpcdFx0dTggcmVzZXJ2ZWQyWzJdO1xuICA2NjpcdFx0dTggc2VuZGVyX2dpZFtTTUNfR0lEX1NJWkVdO1xuICA2NzpcdFx0dTggc2VuZGVyX3FwX251bVszXTtcbiAgNjg6XHRcdHU4IGxpbmtfbnVtO1xuICA2OTpcdCNpZiBkZWZpbmVkKF9fQklHX0VORElBTl9CSVRGSUVMRClcbiAgNzA6XHRcdHU4IHJlc2VydmVkMyA6IDQsXG4gIDcxOlx0XHQgICBxcF9tdHUgICA6IDQ7XG4gIDcyOlx0I2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpXG4gIDczOlx0XHR1OCBxcF9tdHUgICA6IDQsXG4gIDc0Olx0XHQgICByZXNlcnZlZDMgOiA0O1xuICA3NTpcdCNlbmRpZlxuICA3NjpcdFx0dTggaW5pdGlhbF9wc25bM107XG4gIDc3Olx0XHR1OCByZXNlcnZlZFs4XTtcbiAgNzg6XHR9O1xuICA3OTpcdFxuICA4MDpcdHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua19jb250X3J0IHtcbiAgODE6XHRcdF9fYmUzMiBybWJfa2V5O1xuICA4MjpcdFx0X19iZTMyIHJtYl9rZXlfbmV3O1xuICA4MzpcdFx0X19iZTY0IHJtYl92YWRkcl9uZXc7XG4gIDg0Olx0fTtcbiAgODU6XHRcbiAgODY6XHRzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfdjJfZXh0IHtcbiAgODc6XHQjaWYgZGVmaW5lZChfX0JJR19FTkRJQU5fQklURklFTEQpXG4gIDg4Olx0XHR1OCB2Ml9kaXJlY3QgOiAxLFxuICA4OTpcdFx0ICAgcmVzZXJ2ZWQgIDogNztcbiAgOTA6XHQjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRClcbiAgOTE6XHRcdHU4IHJlc2VydmVkICA6IDcsXG4gIDkyOlx0XHQgICB2Ml9kaXJlY3QgOiAxO1xuICA5MzpcdCNlbmRpZlxuICA5NDpcdFx0dTggcmVzZXJ2ZWQyO1xuICA5NTpcdFx0dTggY2xpZW50X3RhcmdldF9naWRbU01DX0dJRF9TSVpFXTtcbiAgOTY6XHRcdHU4IHJlc2VydmVkM1s4XTtcbiAgOTc6XHRcdHUxNiBudW1fcmtleXM7XG4gIDk4Olx0XHRzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfY29udF9ydCBydFtdO1xuICA5OTpcdH0gX19wYWNrZWQ7XHRcdC8qIGZvcm1hdCBkZWZpbmVkIGluXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDg4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgYHVuaW9uIHNtY19sbGNfbXNnYCBTdHJ1Y3R1cmUqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYHVuaW9uIHNtY19sbGNfbXNnYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdGhpbmsgYWJvdXQgdGhlIHR5cGljYWwgdXNlLWNhc2VzIHRoaXMga2luZCBvZiBzdHJ1Y3R1cmUgc3VnZ2VzdHMuIEl0JiMzOTtzIGEgdW5pb24sIHdoaWNoIHNjcmVhbXMgJiMzNDttZW1vcnkgZWZmaWNpZW5jeSYjMzQ7IGFuZCAmIzM0O2FsdGVybmF0aXZlIGludGVycHJldGF0aW9ucyBvZiB0aGUgc2FtZSBtZW1vcnkgbG9jYXRpb24uJiMzNDsgSW4gYSBTeXN0ZW0gTWFuYWdlbWVudCBDb250cm9sbGVyIChTTUMpIG9yIExvdy1MZXZlbCBMaW5rIENvbnRyb2xsZXIgKExMQykgY29udGV4dCwgSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBkaWZmZXJlbnQgbWVzc2FnZSB0eXBlcyB0aGF0IG1pZ2h0IHNoYXJlIHNvbWUgY29tbW9uIGhlYWRlciBpbmZvcm1hdGlvbiwgYnV0IGhhdmUgZGlzdGluY3QgZGF0YSBwYXlsb2FkcyBkZXBlbmRpbmcgb24gdGhlIHNwZWNpZmljIGNvbW1hbmQgb3IgZXZlbnQuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSBkaWZmZXJlbnQgbWVtYmVycyByZXByZXNlbnQuIElzIGl0IGEgdW5pb24gb2YgZGF0YSBzdHJ1Y3R1cmVzLCBvZiBwcmltaXRpdmUgdHlwZXMsIG9yIGEgY29tYmluYXRpb24/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIHNpemU/IFRoZSBzaXplIHdpbGwgZGljdGF0ZSBob3cgbXVjaCBpbmZvcm1hdGlvbiBjYW4gYmUgY29udmV5ZWQgaW4gYSBzaW5nbGUgbWVzc2FnZS4gQXJlIHRoZXJlIGFsaWdubWVudCBjb25zaWRlcmF0aW9ucyBoZXJlLCB0b28/IEkmIzM5O2xsIHByb2JhYmx5IG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBwbGF0Zm9ybSBhbmQgdGhlIGNvbW11bmljYXRpb24gcHJvdG9jb2wgdG8gdHJ1bHkgZ3Jhc3AgdGhlIHN0cnVjdHVyZSYjMzk7cyByb2xlLgoKSSYjMzk7bSBzdGFydGluZyB0byBmb3JtdWxhdGUgcXVlc3Rpb25zIGluIG15IGhlYWQ6IFdoYXQgaXMgdGhlIG92ZXJhbGwgbWVzc2FnZSBmb3JtYXQ/IFdoYXQgYXJlIHRoZSB2YWxpZCBtZXNzYWdlIHR5cGVzPyBIb3cgYXJlIHRoZXkgZGlzdGluZ3Vpc2hlZD8gSXMgdGhlcmUgYSB0eXBlIGZpZWxkLCBvciBkbyB3ZSByZWx5IG9uIGltcGxpY2l0IGtub3dsZWRnZSBvZiB0aGUgc2VuZGluZy9yZWNlaXZpbmcgbW9kdWxlcz8gSG93IGRvZXMgdGhpcyBzdHJ1Y3R1cmUgaW50ZXJhY3Qgd2l0aCB0aGUgcmVzdCBvZiB0aGUgU01DL0xMQyBpbnRlcmZhY2UsIHN1Y2ggYXMgdGhlIGhhcmR3YXJlIHJlZ2lzdGVycz8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBhcmVhcyBmb3IgcG9pbnRlciBhbGlhc2luZyBjb25mbGljdHM/IEFyZSB0aGVyZSBhbnkgY29tcGlsZXIgb3B0aW1pemF0aW9ucyB0aGF0IG1pZ2h0IGludGVyZmVyZSB3aXRoIGludGVuZGVkIHVzYWdlPyBXaGF0IGlzIHRoZSByYXRpb25hbGUgYmVoaW5kIHNlbGVjdGluZyBhIHVuaW9uIGZvciB0aGlzIG1lc3NhZ2Ugc3RydWN0dXJlPyBJdCBpbXBsaWVzIHRoZXJlIHdpbGwgYmUgYSBjb21tb24gaGVhZGVyIHdpdGggdHlwZSBpbmZvcm1hdGlvbiwgYW5kIHRoZW4gZWFjaCBtZXNzYWdlIHR5cGUgY2FuIGhhdmUgdGhlaXIgb3duIHNldCBvZiBkYXRhIGZpZWxkcy4gSG93IGRvZXMgdGhpcyBjb21wYXJlIHdpdGggb3RoZXIgYXBwcm9hY2hlcywgc3VjaCBhcyBoYXZpbmcgYSBzZXBhcmF0ZSBzdHJ1Y3QgZm9yIGVhY2ggbWVzc2FnZSB0eXBlPyBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgY29kZSB0byBnZXQgdGhlIGFuc3dlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dW5pb24gc21jX2xsY19tc2cgXFx7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfbGxjLmM9MTgyPXN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92Ml9pbmxpbmUge1x0LyogdHlwZSAweDI5ICovXG4tLVxubmV0L3NtYy9zbWNfbGxjLmMtMTg5LVxubmV0L3NtYy9zbWNfbGxjLmM6MTkwOnVuaW9uIHNtY19sbGNfbXNnIHtcbm5ldC9zbWMvc21jX2xsYy5jLTE5MS1cdHN0cnVjdCBzbWNfbGxjX21zZ19jb25maXJtX2xpbmsgY29uZmlybV9saW5rO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA3NwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGF0IGNvZGUgc25pcHBldDoKCioqRGl2aW5nIGludG8gYHVuaW9uIHNtY19sbGNfbXNnYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGlzLiAmIzM0O0xldCYjMzk7cyByZWFkIGB1bmlvbiBzbWNfbGxjX21zZ2AuJiMzNDsgVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgaW1tZWRpYXRlbHkga25vdyB0aGlzIGlzIGxpa2VseSBhIEMgb3IgQyYjNDM7JiM0MzsgdW5pb24gZGVmaW5pdGlvbiwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgYSBtZW1vcnktZWZmaWNpZW50IHdheSB0byByZXByZXNlbnQgZGlmZmVyZW50IGRhdGEgc3RydWN0dXJlcyBvciBtZXNzYWdlIGZvcm1hdHMsIGFsbCBvY2N1cHlpbmcgdGhlIHNhbWUgbWVtb3J5IGxvY2F0aW9uLiBUaGUgbmFtZSBgc21jX2xsY19tc2dgIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgdGhpcyB1bmlvbiBpcyByZWxhdGVkIHRvIHRoZSBTdWItTWVkaXVtIEFjY2VzcyBDb250cm9sIChTTUMpIGFuZCBMb2dpY2FsIExpbmsgQ29udHJvbCAoTExDKSBsYXllcnMsIGxpa2VseSBpbiBhIG5ldHdvcmsgY29tbXVuaWNhdGlvbiBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRpZmZlcmVudCBtZW1iZXJzIHdpdGhpbiB0aGlzIHVuaW9uIHRvIGZ1bGx5IGdyYXNwIGl0cyBwdXJwb3NlLiBXaGF0IHBvc3NpYmxlIG1lc3NhZ2UgdHlwZXMgb3IgZGF0YSBzdHJ1Y3R1cmVzIGNvdWxkIHRoaXMgYmUgaGFuZGxpbmcgYXQgdGhhdCBsYXllcj8gTGlrZWx5LCBJJiMzOTtsbCBmaW5kIGRpZmZlcmVudCBzdHJ1Y3R1cmVzIHJlcHJlc2VudGluZyB0aGluZ3MgbGlrZSBjb250cm9sIGZyYW1lcywgZGF0YSBmcmFtZXMsIGFja25vd2xlZGdtZW50cywgb3IgdmFyaW91cyBwcm90b2NvbC1zcGVjaWZpYyBtZXNzYWdlcy4gVGhlIGNsZXZlciB1c2Ugb2YgYSB1bmlvbiBzdWdnZXN0cyBhIGRlbGliZXJhdGUgZGVzaWduIGNob2ljZSB0byBzYXZlIHNwYWNlIG9yIGhhbmRsZSBtZXNzYWdlIHZhcmlhdGlvbnMgZWZmZWN0aXZlbHkuIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhhdCBkZWNvZGluZyB0aGUgdW5pb24gd2lsbCByZXF1aXJlIGNoZWNraW5nIGEgdHlwZSBmaWVsZCBvciBhIGRpc2NyaW1pbmF0b3IgdG8gdW5kZXJzdGFuZCB3aGljaCBkYXRhIHN0cnVjdHVyZSBpcyBjdXJyZW50bHkgYWN0aXZlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW5zaWRlIGFuZCB3aGF0IGl0JiMzOTtzIHJlYWxseSBhYm91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc21jL3NtY19sbGMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTkwOlx0dW5pb24gc21jX2xsY19tc2cge1xuIDE5MTpcdFx0c3RydWN0IHNtY19sbGNfbXNnX2NvbmZpcm1fbGluayBjb25maXJtX2xpbms7XG4gMTkyOlx0XHRzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmsgYWRkX2xpbms7XG4gMTkzOlx0XHRzdHJ1Y3Qgc21jX2xsY19tc2dfcmVxX2FkZF9saW5rX3YyIHJlcV9hZGRfbGluaztcbiAxOTQ6XHRcdHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua19jb250IGFkZF9saW5rX2NvbnQ7XG4gMTk1Olx0XHRzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsX2xpbmsgZGVsZXRlX2xpbms7XG4gMTk2Olx0XG4gMTk3Olx0XHRzdHJ1Y3Qgc21jX2xsY19tc2dfY29uZmlybV9ya2V5IGNvbmZpcm1fcmtleTtcbiAxOTg6XHRcdHN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleSBkZWxldGVfcmtleTtcbiAxOTk6XHRcdHN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92Ml9pbmxpbmUgZGVsZXRlX3JrZXlfdjI7XG4gMjAwOlx0XG4gMjAxOlx0XHRzdHJ1Y3Qgc21jX2xsY19tc2dfdGVzdF9saW5rIHRlc3RfbGluaztcbiAyMDI6XHRcdHN0cnVjdCB7XG4gMjAzOlx0XHRcdHN0cnVjdCBzbWNfbGxjX2hkciBoZHI7XG4gMjA0Olx0XHRcdHU4IGRhdGFbU01DX0xMQ19EQVRBX0xFTl07XG4gMjA1Olx0XHR9IHJhdztcbiAyMDY6XHR9O1xuIDIwNzpcdFxuIDIwODpcdHN0YXRpY19hc3NlcnQoU01DX0xMQ19ERUxfUktFWV9WMl9JTkxJTkUgPT1cbiAyMDk6XHRcdCAgICAgIChzaXplb2YodW5pb24gc21jX2xsY19tc2cpIC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MDQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBzbWNfbGxjX21zZ2AgU3RydWN0dXJlKioKCk9rYXksIHNvIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCB0aGlzIGB1bmlvbiBzbWNfbGxjX21zZ2AsIGFuZCBteSBpbml0aWFsIGd1dCBmZWVsaW5nIGlzIHRoYXQgaXQmIzM5O3MgZ29pbmcgdG8gYmUgcHJlY2lzZWx5IDQ0IGJ5dGVzIGluIHNpemUuIFRoZSByZWFzb24/IFdlbGwsIGJhc2VkIG9uIG15IGV4cGVyaWVuY2UsIEkmIzM5O20gYmV0dGluZyB0aGF0IGBTTUNfTExDX0RBVEFfTEVOYCBpcyBsaWtlbHkgZGVmaW5lZCBhcyA0MCBieXRlcy4gQW5kIHdlIGtub3cgdGhhdCBgc3RydWN0IHNtY19sbGNfaGRyYCwgd2hpY2ggaXMgcGFydCBvZiB0aGlzIG92ZXJhbGwgc3RydWN0dXJlLCBpcyA0IGJ5dGVzLiA0MCBwbHVzIDQgZXF1YWxzIDQ0LCBzbyB0aGF0JiMzOTtzIHRoZSBsaWtlbHkgb3V0Y29tZS4KCkJ1dCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4gSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhlIGFjdHVhbCBkZWZpbml0aW9uIG9mIGBTTUNfTExDX0RBVEFfTEVOYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIFRoZXJlJiMzOTtzIG5vIHJvb20gZm9yIGd1ZXNzaW5nIGhlcmU7IEkmIzM5O2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYXNzdW1wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBTTUNfTExDX0RBVEFfTEVOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfbGxjLmMtMjEtXG5uZXQvc21jL3NtY19sbGMuYzoyMjojZGVmaW5lIFNNQ19MTENfREFUQV9MRU5cdFx0NDBcbm5ldC9zbWMvc21jX2xsYy5jLTIzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE3NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU01DLUxMQyBNZXNzYWdlIFNpemVzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBgdW5pb24gc21jX2xsY19tc2dgIGlzIGluZGVlZCA0NCBieXRlcy4gTXkgbmV4dCB0aG91Z2h0IGlzLCBob3cgZG9lcyB0aGlzIHNpemUgY29tcGFyZSB0byB0aGUgb3RoZXIgc3RydWN0dXJlcyB0aGF0IGFyZSB1c2VkIHdpdGhpbiB0aGF0IHVuaW9uPyBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgc3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rYC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgc3RydWN0dXJlJiMzOTtzIHNpemUgaXMgYWxzbyA0NCBieXRlcy4gTG9va2luZyBhdCB0aGUgZGVmaW5pdGlvbiwgSSYjMzk7bGwgY2FsY3VsYXRlIHRoZSBzaXplIGZpZWxkIGJ5IGZpZWxkOiBXZSYjMzk7dmUgZ290IGBzdHJ1Y3Qgc21jX2xsY19oZHIgaGRgLCB3aGljaCBpcyA0IGJ5dGVzLiBUaGVuIGB1OCBzZW5kZXJfbWFjW0VUSF9BTEVOXWAgaXMgNiBieXRlcy4gRm9sbG93aW5nIHRoYXQsIHRoZXJlJiMzOTtzIGB1OCByZXNlcnZlZDJbMl1gIGZvciAyIGJ5dGVzLCBgdTggc2VuZGVyX2dpZFtTTUNfR0lEX1NJWkVdYCBmb3IgMTYgYnl0ZXMsIGB1OCBzZW5kZXJfcXBfbnVtWzNdYCBmb3IgMyBieXRlcywgYHU4IGxpbmtfbnVtYCBmb3IgMSBieXRlLCBgdTggcXBfbXR1IDogNCwgcmVzZXJ2ZWQzIDogNGAgd2hpY2ggaXMgMSBieXRlLCBgdTggaW5pdGlhbF9wc25bM11gIGZvciAzIGJ5dGVzLCBhbmQgZmluYWxseSBgdTggcmVzZXJ2ZWRbOF1gIHdoaWNoIGlzIDggYnl0ZXMuIEFkZGluZyB0aGF0IHVwLCA0ICYjNDM7IDYgJiM0MzsgMiAmIzQzOyAxNiAmIzQzOyAzICYjNDM7IDEgJiM0MzsgMSAmIzQzOyAzICYjNDM7IDgsIGNvbWVzIG91dCB0byA0NCBieXRlcy4gVGhlcmVmb3JlLCB0aGUgYHNpemVvZihzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmspYCBpcyBhbHNvIDQ0IGJ5dGVzLiBUaGF0IGFsaWducyB3aXRoIG15IGV4cGVjdGF0aW9ucy4gTm93LCBJIHNob3VsZCBsb29rIGF0IGBzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsX2xpbmtgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsX2xpbmsgXFx7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfbGxjLmM9MTE0PXN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua19jb250IHtcdC8qIHR5cGUgMHgwMyAqL1xuLS1cbm5ldC9zbWMvc21jX2xsYy5jLTEyNS1cbm5ldC9zbWMvc21jX2xsYy5jOjEyNjpzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsX2xpbmsge1x0XHQvKiB0eXBlIDB4MDQgKi9cbm5ldC9zbWMvc21jX2xsYy5jLTEyNy1cdHN0cnVjdCBzbWNfbGxjX2hkciBoZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwMDUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsX2xpbmtgKioKCk9rYXksIHNvIHRoZSB0YXNrIGF0IGhhbmQgaW52b2x2ZXMgZXhhbWluaW5nIGBzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsX2xpbmtgLiBUaGlzIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIFNNQy1EIGFyY2hpdGVjdHVyZSBhbmQgc3BlY2lmaWNhbGx5LCBpdHMgcmVzcG9uc2liaWxpdHkgaW4gaGFuZGxpbmcgbGluayBkZWxldGlvbiBtZXNzYWdlcy4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBhIGZldyBrZXkgZmllbGRzIHRoYXQgKnNob3VsZCogYmUgcHJlc2VudCwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGF0YSBmbG93IGFuZCBwcm90b2NvbCBkZXNpZ246IEkmIzM5O2xsIGV4cGVjdCBhIGxpbmsgSUQgb2Ygc29tZSBraW5kLCBwcm9iYWJseSBhIGNvbm5lY3Rpb24gaWRlbnRpZmllciBvciBzb21lIG90aGVyIGZpZWxkIGlkZW50aWZ5aW5nIHRoZSBzcGVjaWZpYyBjb25uZWN0aW9uIHRoZSBjb21tYW5kIGlzIHJlZmVycmluZyB0by4gSSYjMzk7ZCBiZSBpbnRlcmVzdGVkIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgc2VxdWVuY2luZyBpbmZvIG9yIGZsYWdzIGFzc29jaWF0ZWQuCgpNeSBpbml0aWFsIGxpbmUgb2YgdGhvdWdodCwgaXMgYXJvdW5kIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zOyB0aGlzIGlzIGEgZGVsZXRlIGNvbW1hbmQsIHdoaWNoIGluaGVyZW50bHkgaGFzIGhpZ2hlciBwcml2aWxlZ2VzIGFzc29jaWF0ZWQgd2l0aCBpdCB0aGFuIGNvbW1hbmRzIHRoYXQgb25seSByZWFkIGRhdGEuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYW55IGZpZWxkcyByZWxhdGVkIHRvIGF1dGhvcml6YXRpb24gb3IgYXV0aGVudGljYXRpb24gb2YgdGhpcyBjb21tYW5kLCBvciB3aGV0aGVyIGF1dGhvcml6YXRpb24gaXMgaGFuZGxlZCBlbHNld2hlcmUgaW4gdGhlIHN0YWNrLgoKSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgaW1wbGljYXRpb25zIGZvciBzdGF0ZSBtYW5hZ2VtZW50IGluIHRoZSBsaW5rIGxheWVyIGNvbnRyb2wgbG9naWMuIEhvdyBkb2VzIHRoaXMgbWVzc2FnZSBpbXBhY3QgY29ubmVjdGlvbiBzdGF0ZXMsIHJlc291cmNlIGRlYWxsb2NhdGlvbiwgYW5kIHBvdGVudGlhbCBlcnJvciBoYW5kbGluZz8gQXJlIHRoZXJlIGFueSByYWNlIGNvbmRpdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIGlmIG11bHRpcGxlIGRlbGV0ZSBtZXNzYWdlcyBhcmUgaW4tZmxpZ2h0IGNvbmN1cnJlbnRseT8gQXJlIHRoZXJlIGFueSBmaWVsZHMgdGhhdCBzdWdnZXN0IGVycm9yIHJlcG9ydGluZyBvciBhY2tub3dsZWRnZW1lbnRzIHJlbGF0ZWQgdG8gdGhlIGRlbGV0aW9uIHJlcXVlc3Q/CgpFc3NlbnRpYWxseSwgSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBzdHJ1Y3R1cmUgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJhY3QgaXQgZGVmaW5lcyDigJMgdGhlIGluZm9ybWF0aW9uIGl0ICptdXN0KiBjb250YWluIGZvciBhIHN1Y2Nlc3NmdWwgbGluayBkZWxldGlvbiwgYW5kIHRoZSBndWFyYW50ZWVzIGl0IHByb3ZpZGVzIChvciBkb2VzbiYjMzk7dCBwcm92aWRlKSBhYm91dCB0aGUgcHJvY2Vzcy4gSSYjMzk7bSBhbHNvIHByaW1lZCB0byBsb29rIGZvciBhbnkgcG90ZW50aWFsIHJlZCBmbGFncyBvciBhcmVhcyB3aGVyZSB0aGUgZGVzaWduIGNvdWxkIGJlIGltcHJvdmVkLCBlc3BlY2lhbGx5IHdpdGggcmVzcGVjdCB0byByb2J1c3RuZXNzIGFuZCBzZWN1cml0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc21jL3NtY19sbGMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTI2Olx0c3RydWN0IHNtY19sbGNfbXNnX2RlbF9saW5rIHtcdFx0LyogdHlwZSAweDA0ICovXG4gMTI3Olx0XHRzdHJ1Y3Qgc21jX2xsY19oZHIgaGQ7XG4gMTI4Olx0XHR1OCBsaW5rX251bTtcbiAxMjk6XHRcdF9fYmUzMiByZWFzb247XG4gMTMwOlx0XHR1OCByZXNlcnZlZFszNV07XG4gMTMxOlx0fSBfX3BhY2tlZDtcdFx0XHQvKiBmb3JtYXQgZGVmaW5lZCBpbiBSRkM3NjA5ICovXG4gMTMyOlx0XG4gMTMzOlx0c3RydWN0IHNtY19sbGNfbXNnX3Rlc3RfbGluayB7XHRcdC8qIHR5cGUgMHgwNyAqL1xuIDEzNDpcdFx0c3RydWN0IHNtY19sbGNfaGRyIGhkO1xuIDEzNTpcdFx0dTggdXNlcl9kYXRhWzE2XTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2MjgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEYXRhIENvcHkgaW4gYHNtY19sbGNfZW5xdWV1ZWAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkmIzM5O3ZlIGNhbGN1bGF0ZWQgdGhlIHRvdGFsIHNpemUgb2YgdGhlc2Ugc3RydWN0dXJlcyDigJMgdGhlIHN1bSBvZiB0aGVpciBpbmRpdmlkdWFsIG1lbWJlcnMgZ2l2ZXMgbWUgNDQgYnl0ZXMuIEtub3dpbmcgdGhpcywgY29weWluZyBgc2l6ZW9mKHVuaW9uIHNtY19sbGNfbXNnKWAgZnJvbSBlaXRoZXIgYCZhbXA7YWRkX2xsY2Agb3IgYCZhbXA7ZGVsX2xsY2Agd2l0aGluIGBzbWNfbGxjX2VucXVldWVgIGlzIGNvbXBsZXRlbHkgc2FmZTsgbm8gd29ycmllcyBhYm91dCBvdXQtb2YtYm91bmRzIHJlYWRzLiBUaGUgbWVtb3J5IGFjY2VzcyB3aWxsIHN0YXkgd2l0aGluIHRoZSBkZWZpbmVkIGJvdW5kcy4KCkJ1dCwgaG9sZCBvbiwgYSBxdWljayBzYW5pdHkgY2hlY2sgaXMgYWx3YXlzIHdpc2UuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYGFkZF9sbGNgIGlzIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB0aGUgY29weS4gT2gsIHJpZ2h0LCB0aGUgY29kZSBleHBsaWNpdGx5IHplcm9lcyB0aGUgc3RydWN0OgoKYGBgYwoJc3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rIGFkZF9sbGM7CgoJbWVtc2V0KCZhbXA7YWRkX2xsYywgMCwgc2l6ZW9mKGFkZF9sbGMpKTsKYGBgCgpFeGNlbGxlbnQuIEl0JiMzOTtzIHplcm9lZCwgc28gdGhhdCYjMzk7cyBnb29kLiBBbmQgYGRlbF9sbGNgIGlzIHRoZSBzYW1lLCBtYWtpbmcgdGhpcyBwZXJmZWN0bHkgc2FmZToKCmBgYGMKCXN0cnVjdCBzbWNfbGxjX21zZ19kZWxfbGluayBkZWxfbGxjOwoKCW1lbXNldCgmYW1wO2RlbF9sbGMsIDAsIHNpemVvZihkZWxfbGxjKSk7CmBgYAoKT2theSwgdGhlIG1lbW9yeSBhY2Nlc3MgaXMgc2FmZSwgdGhlIGRhdGEgaXMgaW5pdGlhbGl6ZWQuIEkgdGhpbmsgSSB3aWxsIGp1c3QgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY2FsbGVycyBvZiB0aGF0IGZ1bmN0aW9uLCBqdXN0IHRvIGJlIHN1cmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c21jX2xsY19lbnF1ZXVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfbGxjLmM9MjE3PXN0cnVjdCBzbWNfbGxjX3FlbnRyeSB7XG4tLVxubmV0L3NtYy9zbWNfbGxjLmMtMjI0LVxubmV0L3NtYy9zbWNfbGxjLmM6MjI1OnN0YXRpYyB2b2lkIHNtY19sbGNfZW5xdWV1ZShzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHVuaW9uIHNtY19sbGNfbXNnICpsbGMsXG5uZXQvc21jL3NtY19sbGMuYy0yMjYtXHRcdFx0ICAgIHUzMiBieXRlX2xlbik7XG4tLVxubmV0L3NtYy9zbWNfbGxjLmM9MTU3MT12b2lkIHNtY19sbGNfYWRkX2xpbmtfbG9jYWwoc3RydWN0IHNtY19saW5rICpsaW5rKVxuLS1cbm5ldC9zbWMvc21jX2xsYy5jLTE1NzctXHQvKiBubyBkZXYgYW5kIHBvcnQgbmVlZGVkICovXG5uZXQvc21jL3NtY19sbGMuYzoxNTc4Olx0c21jX2xsY19lbnF1ZXVlKGxpbmssICh1bmlvbiBzbWNfbGxjX21zZyAqKVx1MDAyNmFkZF9sbGMsXG5uZXQvc21jL3NtY19sbGMuYy0xNTc5LVx0XHRcdHNpemVvZih1bmlvbiBzbWNfbGxjX21zZykpO1xuLS1cbm5ldC9zbWMvc21jX2xsYy5jPTE2MDY9dm9pZCBzbWNfbGxjX3Nydl9kZWxldGVfbGlua19sb2NhbChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHU4IGRlbF9saW5rX2lkKVxuLS1cbm5ldC9zbWMvc21jX2xsYy5jLTE2MTQtXHRkZWxfbGxjLmhkLmZsYWdzIHw9IFNNQ19MTENfRkxBR19ERUxfTElOS19PUkRFUkxZO1xubmV0L3NtYy9zbWNfbGxjLmM6MTYxNTpcdHNtY19sbGNfZW5xdWV1ZShsaW5rLCAodW5pb24gc21jX2xsY19tc2cgKilcdTAwMjZkZWxfbGxjLFxubmV0L3NtYy9zbWNfbGxjLmMtMTYxNi1cdFx0XHRzaXplb2YodW5pb24gc21jX2xsY19tc2cpKTtcbi0tXG5uZXQvc21jL3NtY19sbGMuYz0yMTAxPXN0YXRpYyB1MzIgc21jX2xsY19tYXhfYm9keV9sZW4odW5pb24gc21jX2xsY19tc2cgKmxsYylcbi0tXG5uZXQvc21jL3NtY19sbGMuYy0yMTE1LVxubmV0L3NtYy9zbWNfbGxjLmM6MjExNjpzdGF0aWMgdm9pZCBzbWNfbGxjX2VucXVldWUoc3RydWN0IHNtY19saW5rICpsaW5rLCB1bmlvbiBzbWNfbGxjX21zZyAqbGxjLFxubmV0L3NtYy9zbWNfbGxjLmMtMjExNy1cdFx0XHQgICAgdTMyIGJ5dGVfbGVuKVxuLS1cbm5ldC9zbWMvc21jX2xsYy5jPTIxNjI9c3RhdGljIHZvaWQgc21jX2xsY19yeF9oYW5kbGVyKHN0cnVjdCBpYl93YyAqd2MsIHZvaWQgKmJ1Zilcbi0tXG5uZXQvc21jL3NtY19sbGMuYy0yMTc2LVxubmV0L3NtYy9zbWNfbGxjLmM6MjE3NzpcdHNtY19sbGNfZW5xdWV1ZShsaW5rLCBsbGMsIHdjLVx1MDAzZWJ5dGVfbGVuKTtcbm5ldC9zbWMvc21jX2xsYy5jLTIxNzgtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDkzNAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDQ3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQb3RlbnRpYWwgQnVmZmVyIE92ZXJmbG93IGluIFNNQyBMTEMgUlggSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHNtY19sbGNfcnhfaGFuZGxlcmAgZnVuY3Rpb24gYW5kIHRoZSBzdWJzZXF1ZW50IHByb2Nlc3Npbmcgb2YgcmVjZWl2ZWQgTExDIG1lc3NhZ2VzLiBUaGUgYHNtY19sbGNfcnhfaGFuZGxlcmAgZ2V0cyBpdHMgZGF0YSwgcG9pbnRlZCB0byBieSBgbGxjYCwgZnJvbSB0aGUgbmV0d29yayB2aWEgYGliX3djYC4gVGhlIGtleSBpcyBgd2MtJmd0O2J5dGVfbGVuYCwgd2hpY2ggaXMgdGhlIGFjdHVhbCBudW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQsIGFuZCBgbGxjYCB0aGF0IHBvaW50cyB0byB0aGUgZGF0YSBidWZmZXIuIFRoZW4sIGl0IGVucXVldWVzIHRoZSBMTEMgbWVzc2FnZS4KCk5vdywgaW4gYHNtY19sbGNfZW5xdWV1ZWAsIGl0IHNlZW1zIHdlJiMzOTtyZSBhbGxvY2F0aW5nIGEgcXVldWUgZW50cnkgYW5kIGNvcHlpbmcgdGhlIHJlY2VpdmVkIGRhdGEgaW50byBpdC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGNvbmNlcm5lZCBhYm91dCB0aGlzIGBtZW1jcHkoJmFtcDtxZW50cnktJmd0O21zZywgbGxjLCBzaXplb2YodW5pb24gc21jX2xsY19tc2cpKTtgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXYWl0IGEgbWludXRlLi4uIGlzIGl0ICpwb3NzaWJsZSogdGhhdCBgd2MtJmd0O2J5dGVfbGVuYCAodGhlIHJlY2VpdmVkIHNpemUpIGlzICpzbWFsbGVyKiB0aGFuIGBzaXplb2YodW5pb24gc21jX2xsY19tc2cpYD8mIzM0Oy4gQmVjYXVzZSBpZiB0aGF0JiMzOTtzIHRoZSBjYXNlLCB3ZSYjMzk7cmUgZ29pbmcgdG8gaGF2ZSBhIGNsYXNzaWMgYnVmZmVyIG92ZXJmbG93IHNpdHVhdGlvbi4gYG1lbWNweWAgd291bGQgYmUgcmVhZGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIGBsbGNgIGJ1ZmZlci4KCkkgbmVlZCB0byBjb25maXJtIHRoaXMgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuIEkgbmVlZCB0byBnbyBiYWNrIGFuZCBkb3VibGUtY2hlY2sgaG93IGBzbWNfbGxjX3J4X2hhbmRsZXJgIGhhbmRsZXMgdGhlIHJlY2VpdmVkIGJ5dGUgbGVuZ3RoIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGd1YXJkcyBpbiBwbGFjZSwgYnV0IEkgaGF2ZSBhIHN0cm9uZyBmZWVsaW5nIHdlIGhhdmUgYSBwcm9ibGVtIGhlcmUuIEkgc3VzcGVjdCB0aGF0IHRoZSBzaXplIGNoZWNrIG1pZ2h0IGJlIG1pc3Npbmcgb3IgaW5zdWZmaWNpZW50LCB3aGljaCBjcmVhdGVzIGEgcG9zc2libGUgdnVsbmVyYWJpbGl0eSwgYW5kIG15IG5leHQgc3RlcCBpcyB0byB2ZXJpZnkgd2hldGhlciB0aGF0JiMzOTtzIHRoZSBjYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2xsYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE2MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTYyOlx0c3RhdGljIHZvaWQgc21jX2xsY19yeF9oYW5kbGVyKHN0cnVjdCBpYl93YyAqd2MsIHZvaWQgKmJ1ZilcbjIxNjM6XHR7XG4yMTY0Olx0XHRzdHJ1Y3Qgc21jX2xpbmsgKmxpbmsgPSAoc3RydWN0IHNtY19saW5rICopd2MtXHUwMDNlcXAtXHUwMDNlcXBfY29udGV4dDtcbjIxNjU6XHRcdHVuaW9uIHNtY19sbGNfbXNnICpsbGMgPSBidWY7XG4yMTY2Olx0XG4yMTY3Olx0XHRpZiAod2MtXHUwMDNlYnl0ZV9sZW4gXHUwMDNjIHNpemVvZigqbGxjKSlcbjIxNjg6XHRcdFx0cmV0dXJuOyAvKiBzaG9ydCBtZXNzYWdlICovXG4yMTY5Olx0XHRpZiAoIWxsYy1cdTAwM2VyYXcuaGRyLmNvbW1vbi5sbGNfdmVyc2lvbikge1xuMjE3MDpcdFx0XHRpZiAobGxjLVx1MDAzZXJhdy5oZHIubGVuZ3RoICE9IHNpemVvZigqbGxjKSlcbjIxNzE6XHRcdFx0XHRyZXR1cm47IC8qIGludmFsaWQgbWVzc2FnZSAqL1xuMjE3MjpcdFx0fSBlbHNlIHtcbjIxNzM6XHRcdFx0aWYgKGxsYy1cdTAwM2VyYXcuaGRyLmxlbmd0aF92MiBcdTAwM2Mgc2l6ZW9mKCpsbGMpKVxuMjE3NDpcdFx0XHRcdHJldHVybjsgLyogaW52YWxpZCBtZXNzYWdlICovXG4yMTc1Olx0XHR9XG4yMTc2Olx0XG4yMTc3Olx0XHRzbWNfbGxjX2VucXVldWUobGluaywgbGxjLCB3Yy1cdTAwM2VieXRlX2xlbik7XG4yMTc4Olx0fVxuMjE3OTpcdFxuMjE4MDpcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiB3b3JrZXIsIHV0aWxzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbjIxODE6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxMjkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCeXRlIExlbmd0aCBDaGVjayoqCgpPa2F5LCBzbyB0aGUgY29kZSBzdGFydHMgd2l0aCBhIHF1aWNrIGNoZWNrOiBgaWYgKHdjLSZndDtieXRlX2xlbiAmbHQ7IHNpemVvZigqbGxjKSlgLiBNeSBmaXJzdCB0aG91Z2h0IGlzLCB0aGF0JiMzOTtzIGdvb2Q7IGl0JiMzOTtzIGFuIG9wdGltaXphdGlvbi4gSXQgZW5zdXJlcyB0aGF0IGBsbGNgLCB3aGljaCBpcyBwcmVzdW1hYmx5IHNvbWUga2luZCBvZiBzdHJ1Y3R1cmUsIGhhcyBlbm91Z2ggYnl0ZXMgYWxsb2NhdGVkIHRvIGl0LiBTcGVjaWZpY2FsbHksIGl0IGd1YXJhbnRlZXMgdGhhdCBgbGxjYCBoYXMgYXQgbGVhc3QgdGhlIHNpemUgb2YgYHNpemVvZih1bmlvbiBzbWNfbGxjX21zZylgLiBNYWtlcyBzZW5zZS4KCkJ1dCB0aGVuLCBhIHJlZCBmbGFnLiBXaGF0IGhhcHBlbnMgaWYgYGJ5dGVfbGVuYCBpcyAqbGFyZ2VyKiB0aGFuIGEgY2VydGFpbiBzaXplPyBUaGF0IGNvdWxkIGxlYWQgdG8gcHJvYmxlbXMuIExldCBtZSBzZWUuLi4gdGhlIGNvZGUgZGVmaW5lcyBgU01DX1dSX1RYX1NJWkVgLiBBaCwgaXQmIzM5O3MgNDQgYnl0ZXM6CmBgYGMKI2RlZmluZSBTTUNfV1JfVFhfU0laRSA0NApgYGAKSSYjMzk7ZCBiZXR0ZXIgdmVyaWZ5IHdoZXJlIGBTTUNfV1JfVFhfU0laRWAgaXMgZGVmaW5lZCB0aG91Z2gsIGxldCBtZSBkb3VibGUtY2hlY2sgYG5ldC9zbWMvc21jX3dyLmhgIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgY29udGV4dCBJJiMzOTttIG1pc3NpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNkZWZpbmUgU01DX1dSX1RYX1NJWkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY193ci5oLTIzLVxubmV0L3NtYy9zbWNfd3IuaDoyNDojZGVmaW5lIFNNQ19XUl9UWF9TSVpFIDQ0IC8qIGFjdHVhbCBzaXplIG9mIHdyX3NlbmQgZGF0YSAoXHUwMDNjPVNNQ19XUl9CVUZfU0laRSkgKi9cbm5ldC9zbWMvc21jX3dyLmgtMjUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjEzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTTUMgV3JpdGUgQnVmZmVyIEFsbG9jYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgU01DX1dSX1RYX1NJWkVgIHRoaW5nLCBhbmQgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyA0NCBieXRlcywgd2hpY2ggaXMgc3BvdCBvbiBmb3IgdGhlIHNpemUgb2YgdGhhdCBgc21jX2xsY19tc2dgIHVuaW9uLiBUaGF0IG1ha2VzIHNlbnNlLiBTbywgYGJ5dGVfbGVuYCBoYXMgdG8gYmUgYXQgbGVhc3QgdGhhdC4gVGhlbiwgYGJvZHlfbGVuYCBpcyBkZXJpdmVkIGJ5IHN1YnRyYWN0aW5nIGBTTUNfV1JfVFhfU0laRWAgZnJvbSBgYnl0ZV9sZW5gLCB3aXRoIHNvbWUgdXBwZXIgYm91bmQgaW1wb3NlZCBieSBgU01DX1dSX0JVRl9WMl9TSVpFIC0gU01DX1dSX1RYX1NJWkVgLiBJdCYjMzk7cyBhbHNvIGNvbnN0cmFpbmVkIGZ1cnRoZXIgYnkgYHNtY19sbGNfbWF4X2JvZHlfbGVuKGxsYylgLgoKVGhlbiwgd2UmIzM5O3JlIGFsbG9jYXRpbmcgYSBgcWVudHJ5YCBhbmQgY29weWluZyBgYm9keV9sZW5gIGJ5dGVzIGZyb20gYHNyYyAmIzQzOyBTTUNfV1JfVFhfU0laRWAuIFRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHdlJiMzOTtyZSBndWFyYW50ZWVkIHRvIGhhdmUgZW5vdWdoIGRhdGEgaW4gYHNyY2AsIGEgbWluaW11bSBvZiBgU01DX1dSX1RYX1NJWkUgJiM0MzsgYm9keV9sZW5gIGJ5dGVzPyBJZiBgc21jX2xpbmtfc2hhcmVkX3YyX3J4YnVmKGxpbmspYCBpcyB0cnVlLCB0aGVuIGBzcmNgIHBvaW50cyB0byBgbGdyLSZndDt3cl9yeF9idWZfdjJgLiBJZiBub3QsIGBzcmNgIHBvaW50cyB0byBgbGxjYC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBgbGxjYCBpcyB0aGUgcmlnaHQgc2l6ZSBpbiB0aGUgbGF0dGVyIGNhc2UuCgpBaCwgSSByZW1lbWJlciB0aGF0IGNvbW1lbnQgZnJvbSBgc21jX3dyX2luaXRfc2dlYDogJiMzNDsuLi5tZXNzYWdlcyBsYXJnZXIgdGhhbiBgU01DX1dSX1RYX1NJWkVgLi4uIHNwaWxsb3ZlciBidWZmZXIuLi4mIzM0OyBSaWdodCwgZm9yIFNNQy1SdjIsIHRoZSBzZWNvbmQgU0dFIGluIGVhY2ggYGliX3JlY3Zfd3JgIGlzIGEgc3BpbGxvdmVyIGJ1ZmZlci4gSXQgc3RhcnRzIGF0IGBTTUNfV1JfVFhfU0laRWAsIHdoaWNoIGlzIHdoeSB0aGUgbGVhZGluZyBieXRlcyBvZiB0aGF0IGJ1ZmZlciBhcmUgbmV2ZXIgd3JpdHRlbi4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHNtY193cl9pbml0X3NnZWAgaW4gYG5ldC9zbWMvc21jX3dyLmNgIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfd3IuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTk1Olx0XHRcdGxuay1cdTAwM2V3cl90eF92Ml9pYi1cdTAwM2VuZXh0ID0gTlVMTDtcbiA1OTY6XHRcdFx0bG5rLVx1MDAzZXdyX3R4X3YyX2liLVx1MDAzZXNnX2xpc3QgPSBsbmstXHUwMDNld3JfdHhfdjJfc2dlO1xuIDU5NzpcdFx0XHRsbmstXHUwMDNld3JfdHhfdjJfaWItXHUwMDNlbnVtX3NnZSA9IDE7XG4gNTk4Olx0XHRcdGxuay1cdTAwM2V3cl90eF92Ml9pYi1cdTAwM2VvcGNvZGUgPSBJQl9XUl9TRU5EO1xuIDU5OTpcdFx0XHRsbmstXHUwMDNld3JfdHhfdjJfaWItXHUwMDNlc2VuZF9mbGFncyA9XG4gNjAwOlx0XHRcdFx0SUJfU0VORF9TSUdOQUxFRCB8IElCX1NFTkRfU09MSUNJVEVEO1xuIDYwMTpcdFx0fVxuIDYwMjpcdFxuIDYwMzpcdFx0LyogV2l0aCBTTUMtUnYyIHRoZXJlIGNhbiBiZSBtZXNzYWdlcyBsYXJnZXIgdGhhbiBTTUNfV1JfVFhfU0laRS5cbiA2MDQ6XHRcdCAqIEVhY2ggaWJfcmVjdl93ciBnZXRzIDIgc2dlcywgdGhlIHNlY29uZCBvbmUgaXMgYSBzcGlsbG92ZXIgYnVmZmVyXG4gNjA1Olx0XHQgKiBhbmQgdGhlIHNhbWUgYnVmZmVyIGZvciBhbGwgc2dlcy4gVGhlIHNwaWxsb3ZlciBzZ2Ugc3RhcnRzIGF0XG4gNjA2Olx0XHQgKiBTTUNfV1JfVFhfU0laRSwgc28gdGhlIGxlYWRpbmcgYnl0ZXMgb2YgdGhhdCBidWZmZXIgYXJlIG5ldmVyXG4gNjA3Olx0XHQgKiB3cml0dGVuLlxuIDYwODpcdFx0ICovXG4gNjA5Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBsbmstXHUwMDNld3JfcnhfY250OyBpJiM0MzsmIzQzOykge1xuIDYxMDpcdFx0XHRpbnQgeCA9IGkgKiBsbmstXHUwMDNld3Jfcnhfc2dlX2NudDtcbiA2MTE6XHRcbiA2MTI6XHRcdFx0bG5rLVx1MDAzZXdyX3J4X3NnZXNbeF0uYWRkciA9XG4gNjEzOlx0XHRcdFx0bG5rLVx1MDAzZXdyX3J4X2RtYV9hZGRyICYjNDM7IGkgKiBsbmstXHUwMDNld3JfcnhfYnVmbGVuO1xuIDYxNDpcdFx0XHRsbmstXHUwMDNld3Jfcnhfc2dlc1t4XS5sZW5ndGggPSBzbWNfbGlua19zaGFyZWRfdjJfcnhidWYobG5rKSA/XG4gNjE1Olx0XHRcdFx0U01DX1dSX1RYX1NJWkUgOiBsbmstXHUwMDNld3JfcnhfYnVmbGVuO1xuIDYxNjpcdFx0XHRsbmstXHUwMDNld3Jfcnhfc2dlc1t4XS5sa2V5ID0gbG5rLVx1MDAzZXJvY2VfcGQtXHUwMDNlbG9jYWxfZG1hX2xrZXk7XG4gNjE3Olx0XHRcdGlmIChsbmstXHUwMDNlbGdyLVx1MDAzZXNtY192ZXJzaW9uID09IFNNQ19WMiBcdTAwMjZcdTAwMjYgc21jX2xpbmtfc2hhcmVkX3YyX3J4YnVmKGxuaykpIHtcbiA2MTg6XHRcdFx0XHRsbmstXHUwMDNld3Jfcnhfc2dlc1t4ICYjNDM7IDFdLmFkZHIgPVxuIDYxOTpcdFx0XHRcdFx0XHRsbmstXHUwMDNld3JfcnhfdjJfZG1hX2FkZHIgJiM0MzsgU01DX1dSX1RYX1NJWkU7XG4gNjIwOlx0XHRcdFx0bG5rLVx1MDAzZXdyX3J4X3NnZXNbeCAmIzQzOyAxXS5sZW5ndGggPVxuIDYyMTpcdFx0XHRcdFx0XHRTTUNfV1JfQlVGX1YyX1NJWkUgLSBTTUNfV1JfVFhfU0laRTtcbiA2MjI6XHRcdFx0XHRsbmstXHUwMDNld3Jfcnhfc2dlc1t4ICYjNDM7IDFdLmxrZXkgPVxuIDYyMzpcdFx0XHRcdFx0XHRsbmstXHUwMDNlcm9jZV9wZC1cdTAwM2Vsb2NhbF9kbWFfbGtleTtcbiA2MjQ6XHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODE5NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI4NDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJlYWRzIGluIFNNQy1MTEMgTWVzc2FnZSBIYW5kbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBlbnN1cmluZyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBldmVyIHJlYWQgd2hlbiBwcm9jZXNzaW5nIFNNQy1MTEMgbWVzc2FnZXMsIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiBzcGlsbG92ZXIgYnVmZmVycyBhbmQgcmtleSBoYW5kbGluZy4gSSYjMzk7dmUgY29uc2lkZXJlZCBzZXZlcmFsIGNvZGUgcGF0aHMgaW4gZGV0YWlsLCBhbmQgaGVyZSBhcmUgbXkgY29uY2x1c2lvbnMuCgpGaXJzdCwgSSBleGFtaW5lZCB0aGUgYHNtY19saW5rX3NoYXJlZF92Ml9yeGJ1ZmAgY2FzZS4gSWYgdHJ1ZSwgdGhlIHNwaWxsb3ZlciBpcyB3cml0dGVuIGRpcmVjdGx5IGludG8gYGxnci0mZ3Q7d3JfcnhfYnVmX3YyICYjNDM7IFNNQ19XUl9UWF9TSVpFYCwgYW5kIHdoZW4gZmFsc2UsIHRoZSBTR0UgYnVmZmVycyBhcmUgbGFyZ2UgZW5vdWdoLiBUaGUgY3J1Y2lhbCBwYXJ0IGhlcmUgaXMgdGhlIGBtZW1jcHkocWVudHJ5LSZndDtib2R5LCBzcmMgJiM0MzsgU01DX1dSX1RYX1NJWkUsIGJvZHlfbGVuKTtgLiAgSSB2ZXJpZmllZCB0aGF0IGBib2R5X2xlbmAgKHRoZSBudW1iZXIgb2Ygc3BpbGxvdmVyIGJ5dGVzKSBpcyBjYXBwZWQgYnkgdGhlIGFjdHVhbCBudW1iZXIgb2YgcmVjZWl2ZWQgYnl0ZXMsIHByZXZlbnRpbmcgcmVhZHMgYmV5b25kIHRoZSB2YWxpZCBidWZmZXIuIFRoZSBjYWxjdWxhdGlvbiBlbnN1cmVzIG5vIHJlYWQgcGFzdCB0aGUgZW5kIG9mIGRhdGEuCgpOZXh0LCBJIHNjcnV0aW5pemVkIGBzbWNfbGxjX3NhdmVfYWRkX2xpbmtfcmtleXNgLiAgSGVyZSwgYHFlbnRyeS0mZ3Q7Ym9keWAgY29udGFpbnMgdGhlIHNwaWxsb3ZlciBkYXRhLiBJIGNvbmZpcm1lZCB0aGF0IHRoZSBjb2RlIGZpcnN0IGNoZWNrcyB0aGF0IGBxZW50cnktJmd0O2JvZHlfbGVuYCBpcyBzdWZmaWNpZW50LCB0aGVuIHByb3Blcmx5IGxpbWl0cyB0aGUgbG9vcCBpdGVyYXRpb24gY291bnQgYmFzZWQgb24gdGhlIG51bWJlciBvZiBya2V5cyAqYW5kKiB0aGUgYXZhaWxhYmxlIGJ5dGVzIGluIGBxZW50cnktJmd0O2JvZHlgLiBUaGlzIGVuc3VyZXMgYGV4dC0mZ3Q7cnRbaV1gIGVsZW1lbnRzIGFyZSB3aXRoaW4gdGhlIGJvdW5kcyBvZiB0aGUgcmVjZWl2ZWQgZGF0YTsgbm8gb3V0LW9mLWJvdW5kcyByZWFkcyBvY2N1ci4KClRoZW4sIEkgZm9jdXNlZCBvbiBgc21jX2xsY19ybXRfZGVsZXRlX3JrZXlgLiAgVGhlIGtleSBoZXJlIGlzIHRoZSBoYW5kbGluZyBvZiBpbmxpbmUgcmtleXMgYW5kIHNwaWxsb3ZlciBya2V5cy4gVGhlIGNvZGUgdXNlcyBgU01DX0xMQ19ERUxfUktFWV9WMl9JTkxJTkVgIHRvIHN0b3JlIHNvbWUgcmtleXMgaW5saW5lLiBDcnVjaWFsbHksIHRoZSBjYWxjdWxhdGlvbiBvZiBgbWF4YCAodGhlIGxvb3AgY291bnQpIGlzIGJvdW5kZWQgYnkgYm90aCBpbmxpbmUgcmtleSBjb3VudCBhbmQgcmVjZWl2ZWQgYnl0ZSBjb3VudC4gVGhlIGBtZW1jcHlgIGZyb20gYHFlbnRyeS0mZ3Q7Ym9keWAgaXMgdGhlcmVmb3JlIGd1YXJhbnRlZWQgdG8gc3RheSB3aXRoaW4gdGhlIGJvdW5kcyBvZiB0aGUgcmVjZWl2ZWQgZGF0YS4gQW5kIHRoZSBya2V5IHZhbHVlcyBpbiBgbGxjdjItJmd0O3JrZXlgIGFyZSBpbmRlZWQgaW5pdGlhbGl6ZWQgZnJvbSB0aGUgcmVjZWl2ZWQgbWVzc2FnZSAoYGxsY2ApLCB3aGljaCBpcyBjb25maXJtZWQgdG8gaGF2ZSBzaXplIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgc2l6ZW9mKHVuaW9uIHNtY19sbGNfbXNnKWAgYW5kIGlzIGNvcGllZCBmcm9tIG5ldHdvcmsgZGF0YS4KCkZpbmFsbHksIEkgY2hlY2tlZCBmb3IgdW5pbml0aWFsaXplZCBtZXNzYWdlcyBzZW50IHRvIHRoZSBuZXR3b3JrLiBCb3RoIGBzbWNfbGxjX2FkZF9saW5rX2xvY2FsYCBhbmQgYHNtY19sbGNfc3J2X2RlbGV0ZV9saW5rX2xvY2FsYCBpbml0aWFsaXplIHRoZWlyIG1lc3NhZ2VzIHZpYSBgbWVtc2V0YC4gQmVjYXVzZSBgc2l6ZW9mKGFkZF9sbGMpYCBhbmQgYHNpemVvZihkZWxfbGxjKWAgbWF0Y2ggYHNpemVvZih1bmlvbiBzbWNfbGxjX21zZylgLCBJ4oCZbSBjb25maWRlbnQgYWxsIGRhdGEgc2VudCB0byB0aGUgbmV0d29yayB3aWxsIGJlIGluaXRpYWxpemVkLiBBbHRob3VnaCwgSSB3aWxsIGRvdWJsZSBjaGVjayB0aGUgc2l6ZXMgZm9yIGFic29sdXRlIHN1cmV0eS4KClRoZXJlZm9yZSwgYWZ0ZXIgdGhpcyBkZXRhaWxlZCBhbmFseXNpcywgSSYjMzk7bSBmYWlybHkgY29uZmlkZW50IHRoYXQgdGhlc2UgY29kZSBwYXRocywgYXMgY3VycmVudGx5IHdyaXR0ZW4sIGFyZSBzYWZlIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NpemVvZlxcKHVuaW9uIHNtY19sbGNfbXNnXFwpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfbGxjLmM9MjA4PXN0YXRpY19hc3NlcnQoU01DX0xMQ19ERUxfUktFWV9WMl9JTkxJTkUgPT1cbm5ldC9zbWMvc21jX2xsYy5jOjIwOTpcdCAgICAgIChzaXplb2YodW5pb24gc21jX2xsY19tc2cpIC1cbm5ldC9zbWMvc21jX2xsYy5jLTIxMC1cdCAgICAgICBvZmZzZXRvZihzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXlfdjIsIHJrZXkpKSAvXG4tLVxubmV0L3NtYy9zbWNfbGxjLmM9NDIxPXN0YXRpYyBpbnQgc21jX2xsY19hZGRfcGVuZGluZ19zZW5kKHN0cnVjdCBzbWNfbGluayAqbGluayxcbi0tXG5uZXQvc21jL3NtY19sbGMuYy00MzEtXHRCVUlMRF9CVUdfT05fTVNHKFxubmV0L3NtYy9zbWNfbGxjLmM6NDMyOlx0XHRzaXplb2YodW5pb24gc21jX2xsY19tc2cpIFx1MDAzZSBTTUNfV1JfQlVGX1NJWkUsXG5uZXQvc21jL3NtY19sbGMuYy00MzMtXHRcdFwmIzM0O211c3QgaW5jcmVhc2UgU01DX1dSX0JVRl9TSVpFIHRvIGF0IGxlYXN0IHNpemVvZihzdHJ1Y3Qgc21jX2xsY19tc2cpXCYjMzQ7KTtcbm5ldC9zbWMvc21jX2xsYy5jLTQzNC1cdEJVSUxEX0JVR19PTl9NU0coXG5uZXQvc21jL3NtY19sbGMuYzo0MzU6XHRcdHNpemVvZih1bmlvbiBzbWNfbGxjX21zZykgIT0gU01DX1dSX1RYX1NJWkUsXG5uZXQvc21jL3NtY19sbGMuYy00MzYtXHRcdFwmIzM0O211c3QgYWRhcHQgU01DX1dSX1RYX1NJWkUgdG8gc2l6ZW9mKHN0cnVjdCBzbWNfbGxjX21zZyk7IGlmIG5vdCBhbGwgc21jX3dyIHVwcGVyIGxheWVyIHByb3RvY29scyB1c2UgdGhlIHNhbWUgbWVzc2FnZSBzaXplIGFueSBtb3JlLCBtdXN0IHN0YXJ0IHRvIHNldCBsaW5rLVx1MDAzZXdyX3R4X3NnZXNbaV0ubGVuZy4uLlxuLS1cbm5ldC9zbWMvc21jX2xsYy5jPTc4Nj1zdGF0aWMgaW50IHNtY19sbGNfc2VuZF9tZXNzYWdlKHN0cnVjdCBzbWNfbGluayAqbGluaywgdm9pZCAqbGxjYnVmKVxuLS1cbm5ldC9zbWMvc21jX2xsYy5jLTc5Ni1cdFx0Z290byBwdXRfb3V0O1xubmV0L3NtYy9zbWNfbGxjLmM6Nzk3Olx0bWVtY3B5KHdyX2J1ZiwgbGxjYnVmLCBzaXplb2YodW5pb24gc21jX2xsY19tc2cpKTtcbm5ldC9zbWMvc21jX2xsYy5jLTc5OC1cdHJjID0gc21jX3dyX3R4X3NlbmQobGluaywgcGVuZCk7XG4tLVxubmV0L3NtYy9zbWNfbGxjLmM9ODA4PXN0YXRpYyBpbnQgc21jX2xsY19zZW5kX21lc3NhZ2Vfd2FpdChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHZvaWQgKmxsY2J1Zilcbi0tXG5uZXQvc21jL3NtY19sbGMuYy04MTgtXHRcdGdvdG8gcHV0X291dDtcbm5ldC9zbWMvc21jX2xsYy5jOjgxOTpcdG1lbWNweSh3cl9idWYsIGxsY2J1Ziwgc2l6ZW9mKHVuaW9uIHNtY19sbGNfbXNnKSk7XG5uZXQvc21jL3NtY19sbGMuYy04MjAtXHRyYyA9IHNtY193cl90eF9zZW5kX3dhaXQobGluaywgcGVuZCwgU01DX0xMQ19XQUlUX1RJTUUpO1xuLS1cbm5ldC9zbWMvc21jX2xsYy5jPTE1NzE9dm9pZCBzbWNfbGxjX2FkZF9saW5rX2xvY2FsKHN0cnVjdCBzbWNfbGluayAqbGluaylcbi0tXG5uZXQvc21jL3NtY19sbGMuYy0xNTc4LVx0c21jX2xsY19lbnF1ZXVlKGxpbmssICh1bmlvbiBzbWNfbGxjX21zZyAqKVx1MDAyNmFkZF9sbGMsXG5uZXQvc21jL3NtY19sbGMuYzoxNTc5Olx0XHRcdHNpemVvZih1bmlvbiBzbWNfbGxjX21zZykpO1xubmV0L3NtYy9zbWNfbGxjLmMtMTU4MC19XG4tLVxubmV0L3NtYy9zbWNfbGxjLmM9MTYwNj12b2lkIHNtY19sbGNfc3J2X2RlbGV0ZV9saW5rX2xvY2FsKHN0cnVjdCBzbWNfbGluayAqbGluaywgdTggZGVsX2xpbmtfaWQpXG4tLVxubmV0L3NtYy9zbWNfbGxjLmMtMTYxNS1cdHNtY19sbGNfZW5xdWV1ZShsaW5rLCAodW5pb24gc21jX2xsY19tc2cgKilcdTAwMjZkZWxfbGxjLFxubmV0L3NtYy9zbWNfbGxjLmM6MTYxNjpcdFx0XHRzaXplb2YodW5pb24gc21jX2xsY19tc2cpKTtcbm5ldC9zbWMvc21jX2xsYy5jLTE2MTctfVxuLS1cbm5ldC9zbWMvc21jX2xsYy5jPTIxMTY9c3RhdGljIHZvaWQgc21jX2xsY19lbnF1ZXVlKHN0cnVjdCBzbWNfbGluayAqbGluaywgdW5pb24gc21jX2xsY19tc2cgKmxsYyxcbi0tXG5uZXQvc21jL3NtY19sbGMuYy0yMTM4LVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cWVudHJ5LVx1MDAzZWxpc3QpO1xubmV0L3NtYy9zbWNfbGxjLmM6MjEzOTpcdG1lbWNweShcdTAwMjZxZW50cnktXHUwMDNlbXNnLCBsbGMsIHNpemVvZih1bmlvbiBzbWNfbGxjX21zZykpO1xubmV0L3NtYy9zbWNfbGxjLmMtMjE0MC1cdGlmIChib2R5X2xlbikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjg3OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDc2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXR3b3JrIFN0YWNrIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBgQlVJTERfQlVHX09OX01TR2AgY2hlY2sgY29uZmlybXMgYSBjcml0aWNhbCBzaXppbmcgcmVsYXRpb25zaGlwOiB0aGUgc2l6ZSBvZiBgdW5pb24gc21jX2xsY19tc2dgIGlzIHByZWNpc2VseSBgU01DX1dSX1RYX1NJWkVgLCB3aGljaCB3ZSBrbm93IHRvIGJlIDQ0IGJ5dGVzLiAgV2UgY2FuIHNhZmVseSBhc3N1bWUgdGhhdCBhbnkgc3RydWN0IHdpdGggdGhlIHNhbWUgc2l6ZSAobGlrZSBgYWRkX2xsY2ApIHdpbGwgYmUgZnVsbHkgaW5pdGlhbGl6ZWQgd2hlbiBjb3BpZWQgaW50byB0aGUgdW5pb24gdmlhIGBtZW1jcHlgLCBhdm9pZGluZyBhbnkgcG90ZW50aWFsIGZvciByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKSG93ZXZlciwgdGhlIG1vcmUgZGV0YWlsZWQgYHN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92Ml9pbmxpbmVgIGltbWVkaWF0ZWx5IHBvcHMgdXAuIFdlIGhhdmUgdG8gdmVyaWZ5IHRoaXMgZG9lc24mIzM5O3QgZXhjZWVkIHRoZSBib3VuZHMgb2YgYHVuaW9uIHNtY19sbGNfbXNnYC4gIEl0JiMzOTtzIHNpemUgaXMgY2FsY3VsYXRlZCBhcyA0IChoZWFkZXIpICYjNDM7IDEgJiM0MzsgMSAmIzQzOyAyICYjNDM7ICg5ICogNCkgPSA0NCBieXRlcy4gIFNvLCB5ZXMsIGl0IGFsc28gZml0cyBuZWF0bHkgd2l0aGluIHRoZSB1bmlvbi4gR29vZC4KCk5vdywgbGV0JiMzOTtzIGdldCB0byB0aGUgYWN0dWFsIHByb2JsZW0gdGhpcyBwYXRjaCBhaW1zIHRvIGZpeC4gVGhlIHBhdGNoIG1lc3NhZ2UgaXRzZWxmIGlzIGEgbGl0dGxlIHZhZ3VlLCBidXQgdGhlIGNvZGUgY2hhbmdlcyB0aGVtc2VsdmVzIGdpdmUgYSBncmVhdCBkZWFsIG9mIGluZm9ybWF0aW9uLiAgQmVmb3JlIHRoaXMgcGF0Y2gsIGBzbWNfbGxjX2VucXVldWVgIGhhZCBhIHByb2JsZW06IEl0IHdhcyBhbGxvY2F0aW5nIGBxZW50cnlgIHdpdGggYGttYWxsb2Nfb2JqYCwgd2hpY2ggaW5jbHVkZXMgYSBgdW5pb24gc21jX2xsY19tc2dgLiBJZiBhIG1lc3NhZ2Ugd2FzIGxhcmdlciB0aGFuIDQ0IGJ5dGVzIChvdXIgYFNNQ19XUl9UWF9TSVpFYCksIGFueSBleHRyYSBkYXRhIHdvdWxkIGJlIGxlZnQgaW4gYGxnci0mZ3Q7d3JfcnhfYnVmX3YyYC4gIFRoZSBwcm9ibGVtLCBmcm9tIHdoYXQgSSYjMzk7bSBnYXRoZXJpbmcsIGlzIHRoYXQgdGhlIHN1YnNlcXVlbnQgZnVuY3Rpb25zLCBgc21jX2xsY19zYXZlX2FkZF9saW5rX3JrZXlzYCBhbmQgYHNtY19sbGNfcm10X2RlbGV0ZV9ya2V5YCwgd291bGQgZGlyZWN0bHkgcmVhZCBmcm9tIHRoaXMgYGxnci0mZ3Q7d3JfcnhfYnVmX3YyYC4KClRoZSBwcm9ibGVtPyBgc21jX2xsY19lbnF1ZXVlYCBxdWV1ZXMgdGhlIG1lc3NhZ2UgZm9yIGRlZmVycmVkIHByb2Nlc3NpbmcgYnkgYSB3b3JrZXIgdGhyZWFkIChgc21jX2xsY19ldmVudF93b3JrYCkuIENyaXRpY2FsbHksIHdoaWxlIHRoZSBtZXNzYWdlIGlzIHF1ZXVlZCwgKmFub3RoZXIqIG1lc3NhZ2UgY291bGQgYXJyaXZlIGFuZCBvdmVyd3JpdGUgYGxnci0mZ3Q7d3JfcnhfYnVmX3YyYCEgVGhlIGB3cl9yeF9idWZfdjJgIGFwcGVhcnMgdG8gYmUgYSBzaGFyZWQgYnVmZmVyIGF0IHRoZSBsaW5rIGdyb3VwIGxldmVsLCB3aGljaCBtZWFucyBpdCYjMzk7cyBhIHJhY2UgY29uZGl0aW9uIHdhaXRpbmcgdG8gaGFwcGVuLiBJdCBpcyBzdXNjZXB0aWJsZSB0byBwb3RlbnRpYWwgb3ZlcndyaXRlcywgd2hlcmUgdGhlIHdvcmtlciB0aHJlYWQgY291bGQgdGhlbiBwcm9jZXNzIGluY29ycmVjdCBvciBwYXJ0aWFsbHkgY29ycmVjdCBkYXRhLCBsZWFkaW5nIHRvIHZhcmlvdXMgaXNzdWVzLiAgVGhlIGNoYW5nZXMgaW4gdGhpcyBwYXRjaCBhcmUgbGlrZWx5IGFpbWVkIGF0IGVuc3VyaW5nIHRoZSBkYXRhIGlzIHByb3Blcmx5IGNvcGllZCBhbmQgaXNvbGF0ZWQsIHNvIHRoYXQgYSBkZWxheWVkIHdvcmtlciBjYW4gcmVhZCB3aXRob3V0IHBvdGVudGlhbCBmb3IgY29ycnVwdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d3JfcnhfYnVmX3YyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfY29yZS5oPTI4Nj1zdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAge1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuaC0zMjAtXHRcdFx0XHRcdFx0Lyogc21jIGxpbmsgKi9cbm5ldC9zbWMvc21jX2NvcmUuaDozMjE6XHRcdFx0c3RydWN0IHNtY193cl92Ml9idWZcdCp3cl9yeF9idWZfdjI7XG5uZXQvc21jL3NtY19jb3JlLmgtMzIyLVx0XHRcdFx0XHRcdC8qIFdSIHYyIHJlY3YgcGF5bG9hZCBidWZmZXIgKi9cbi0tXG5uZXQvc21jL3NtY19sbGMuYz0yMTE2PXN0YXRpYyB2b2lkIHNtY19sbGNfZW5xdWV1ZShzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHVuaW9uIHNtY19sbGNfbXNnICpsbGMsXG4tLVxubmV0L3NtYy9zbWNfbGxjLmMtMjE0MS1cdFx0dTggKnNyYyA9IHNtY19saW5rX3NoYXJlZF92Ml9yeGJ1ZihsaW5rKSA/XG5uZXQvc21jL3NtY19sbGMuYzoyMTQyOlx0XHRcdCh1OCAqKWxnci1cdTAwM2V3cl9yeF9idWZfdjIgOiAodTggKilsbGM7XG5uZXQvc21jL3NtY19sbGMuYy0yMTQzLVxuLS1cbm5ldC9zbWMvc21jX3dyLmM9NjgyPXZvaWQgc21jX3dyX2ZyZWVfbGdyX21lbShzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncilcbi0tXG5uZXQvc21jL3NtY193ci5jLTY4Ni1cbm5ldC9zbWMvc21jX3dyLmM6Njg3Olx0a2ZyZWUobGdyLVx1MDAzZXdyX3J4X2J1Zl92Mik7XG5uZXQvc21jL3NtY193ci5jOjY4ODpcdGxnci1cdTAwM2V3cl9yeF9idWZfdjIgPSBOVUxMO1xubmV0L3NtYy9zbWNfd3IuYy02ODktXHRrZnJlZShsZ3ItXHUwMDNld3JfdHhfYnVmX3YyKTtcbi0tXG5uZXQvc21jL3NtY193ci5jPTcyNT1pbnQgc21jX3dyX2FsbG9jX2xncl9tZW0oc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IpXG4tLVxubmV0L3NtYy9zbWNfd3IuYy03MjktXG5uZXQvc21jL3NtY193ci5jOjczMDpcdGxnci1cdTAwM2V3cl9yeF9idWZfdjIgPSBremFsbG9jKFNNQ19XUl9CVUZfVjJfU0laRSwgR0ZQX0tFUk5FTCk7XG5uZXQvc21jL3NtY193ci5jOjczMTpcdGlmICghbGdyLVx1MDAzZXdyX3J4X2J1Zl92Milcbm5ldC9zbWMvc21jX3dyLmMtNzMyLVx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5uZXQvc21jL3NtY193ci5jLTczNC1cdGlmICghbGdyLVx1MDAzZXdyX3R4X2J1Zl92Mikge1xubmV0L3NtYy9zbWNfd3IuYzo3MzU6XHRcdGtmcmVlKGxnci1cdTAwM2V3cl9yeF9idWZfdjIpO1xubmV0L3NtYy9zbWNfd3IuYy03MzYtXHRcdHJldHVybiAtRU5PTUVNO1xuLS1cbm5ldC9zbWMvc21jX3dyLmM9ODU1PWludCBzbWNfd3JfY3JlYXRlX2xpbmsoc3RydWN0IHNtY19saW5rICpsbmspXG4tLVxubmV0L3NtYy9zbWNfd3IuYy04NzItXHRcdFx0bG5rLVx1MDAzZXdyX3J4X3YyX2RtYV9hZGRyID1cbm5ldC9zbWMvc21jX3dyLmM6ODczOlx0XHRcdFx0aWJfZG1hX21hcF9zaW5nbGUoaWJkZXYsIGxuay1cdTAwM2VsZ3ItXHUwMDNld3JfcnhfYnVmX3YyLFxubmV0L3NtYy9zbWNfd3IuYy04NzQtXHRcdFx0XHRcdFx0ICBTTUNfV1JfQlVGX1YyX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MDk4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQW5hbHlzaXMgb2YgdGhlIGB3cl9yeF9idWZfdjJgIEFsbG9jYXRpb24gYW5kIFVzYWdlKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBgd3JfcnhfYnVmX3YyYCBzdHJ1Y3R1cmUsIEkgc2VlIHRoYXQgaXQmIzM5O3MgYWxsb2NhdGVkIGFzIGEgc2luZ2xlIGJ1ZmZlciBwZXIgbGluayBncm91cCB1c2luZyBga3phbGxvY2AuIFRoYXQmIzM5O3Mgc3RhbmRhcmQgcHJhY3RpY2UsIGFuZCBpdCYjMzk7cyBtYXBwZWQgZm9yIERNQSwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZSBmb3IgZWZmaWNpZW50IGRhdGEgdHJhbnNmZXIuIEl0JiMzOTtzIGFsbG9jYXRlZCBhdCB0aGUgc2l6ZSBgU01DX1dSX0JVRl9WMl9TSVpFYCwgd2hpY2ggaXMgdHlwaWNhbC4KCkJ1dCBob2xkIG9u4oCmIHRoZSB3YXkgaXQmIzM5O3MgYmVpbmcgdXNlZCBpcyBhIGJpdCBjb25jZXJuaW5nLiBJdCBsb29rcyBsaWtlIHRoZSBmaXJzdCA0NCBieXRlcyBvZiBhbiBpbmNvbWluZyBtZXNzYWdlIGFyZSB3cml0dGVuIHRvIGBsbmstJmd0O3dyX3J4X3NnZXNbeF0uYWRkcmAsIGFuZCB0aGVuIHRoZSByZW1haW5kZXIgb2YgdGhlIGRhdGEgZ29lcyBpbnRvIHRoZSBidWZmZXIgYXQgYW4gb2Zmc2V0OiBgbG5rLSZndDt3cl9yeF92Ml9kbWFfYWRkciAmIzQzOyBTTUNfV1JfVFhfU0laRWAuCgpUaGUgcHJvYmxlbSBpcyBpbW1lZGlhdGVseSBhcHBhcmVudC4gSWYgbXVsdGlwbGUgbWVzc2FnZXMgY29tZSBpbiBzaW11bHRhbmVvdXNseSDigJMgb3IgZXZlbiBzZXF1ZW50aWFsbHkgYmVmb3JlIHRoZSBwcmV2aW91cyBtZXNzYWdlIGlzIGZ1bGx5IHByb2Nlc3NlZCDigJMgdGhleSYjMzk7cmUgZ29pbmcgdG8gb3ZlcndyaXRlIHRoZSBzYW1lIGB3cl9yeF9idWZfdjJgISBUaGlzIGlzIGJlY2F1c2UgYGxuay0mZ3Q7d3Jfcnhfc2dlc1t4ICYjNDM7IDFdLmFkZHJgIGlzIGFsd2F5cyBjYWxjdWxhdGVkIGFzIGBsbmstJmd0O3dyX3J4X3YyX2RtYV9hZGRyICYjNDM7IFNNQ19XUl9UWF9TSVpFYC4gVGhpcyBpcyBoaWdobHkgcHJvYmxlbWF0aWMsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gZGF0YSBjb3JydXB0aW9uIGFuZCBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBpc3N1ZXMuCgpJIG5lZWQgdG8gcmV2aXNpdCB0aGUgYHNtY193cl9pbml0X3NnZWAgZnVuY3Rpb247IHRoZXJlIGlzIGNsZWFybHkgc29tZSBhc3BlY3Qgb2YgdGhlIGRlc2lnbiB0aGF0IEkgYW0gbWlzc2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc21jL3NtY193ci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjA5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MDk6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxuay1cdTAwM2V3cl9yeF9jbnQ7IGkmIzQzOyYjNDM7KSB7XG4gNjEwOlx0XHRcdGludCB4ID0gaSAqIGxuay1cdTAwM2V3cl9yeF9zZ2VfY250O1xuIDYxMTpcdFxuIDYxMjpcdFx0XHRsbmstXHUwMDNld3Jfcnhfc2dlc1t4XS5hZGRyID1cbiA2MTM6XHRcdFx0XHRsbmstXHUwMDNld3JfcnhfZG1hX2FkZHIgJiM0MzsgaSAqIGxuay1cdTAwM2V3cl9yeF9idWZsZW47XG4gNjE0Olx0XHRcdGxuay1cdTAwM2V3cl9yeF9zZ2VzW3hdLmxlbmd0aCA9IHNtY19saW5rX3NoYXJlZF92Ml9yeGJ1ZihsbmspID9cbiA2MTU6XHRcdFx0XHRTTUNfV1JfVFhfU0laRSA6IGxuay1cdTAwM2V3cl9yeF9idWZsZW47XG4gNjE2Olx0XHRcdGxuay1cdTAwM2V3cl9yeF9zZ2VzW3hdLmxrZXkgPSBsbmstXHUwMDNlcm9jZV9wZC1cdTAwM2Vsb2NhbF9kbWFfbGtleTtcbiA2MTc6XHRcdFx0aWYgKGxuay1cdTAwM2VsZ3ItXHUwMDNlc21jX3ZlcnNpb24gPT0gU01DX1YyIFx1MDAyNlx1MDAyNiBzbWNfbGlua19zaGFyZWRfdjJfcnhidWYobG5rKSkge1xuIDYxODpcdFx0XHRcdGxuay1cdTAwM2V3cl9yeF9zZ2VzW3ggJiM0MzsgMV0uYWRkciA9XG4gNjE5Olx0XHRcdFx0XHRcdGxuay1cdTAwM2V3cl9yeF92Ml9kbWFfYWRkciAmIzQzOyBTTUNfV1JfVFhfU0laRTtcbiA2MjA6XHRcdFx0XHRsbmstXHUwMDNld3Jfcnhfc2dlc1t4ICYjNDM7IDFdLmxlbmd0aCA9XG4gNjIxOlx0XHRcdFx0XHRcdFNNQ19XUl9CVUZfVjJfU0laRSAtIFNNQ19XUl9UWF9TSVpFO1xuIDYyMjpcdFx0XHRcdGxuay1cdTAwM2V3cl9yeF9zZ2VzW3ggJiM0MzsgMV0ubGtleSA9XG4gNjIzOlx0XHRcdFx0XHRcdGxuay1cdTAwM2Vyb2NlX3BkLVx1MDAzZWxvY2FsX2RtYV9sa2V5O1xuIDYyNDpcdFx0XHR9XG4gNjI1Olx0XHRcdGxuay1cdTAwM2V3cl9yeF9pYnNbaV0ubmV4dCA9IE5VTEw7XG4gNjI2Olx0XHRcdGxuay1cdTAwM2V3cl9yeF9pYnNbaV0uc2dfbGlzdCA9IFx1MDAyNmxuay1cdTAwM2V3cl9yeF9zZ2VzW3hdO1xuIDYyNzpcdFx0XHRsbmstXHUwMDNld3JfcnhfaWJzW2ldLm51bV9zZ2UgPSBsbmstXHUwMDNld3Jfcnhfc2dlX2NudDtcbiA2Mjg6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYxNzMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA4NjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUmFjZSBDb25kaXRpb24gYW5kIFBvdGVudGlhbCBEYXRhIENvcnJ1cHRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBjb2RlLCBhbmQgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHdoYXQgdGhlIHByb2JsZW0gaXMuIEZvciBldmVyeSBpbmRleCBgaWAsIHRoZSBhZGRyZXNzIGBsbmstJmd0O3dyX3J4X3NnZXNbeCAmIzQzOyAxXS5hZGRyYCBpcyBjb25zaXN0ZW50IOKAkyBpdCYjMzk7cyBhY3R1YWxseSBgbG5rLSZndDt3cl9yeF92Ml9kbWFfYWRkciAmIzQzOyBTTUNfV1JfVFhfU0laRWAuIFRoYXQgbWVhbnMgYWxsIGluY29taW5nIG1lc3NhZ2VzIHNoYXJlIHRoZSBzYW1lIHNwaWxsb3ZlciBidWZmZXIuIFRoYXQmIzM5O3MgbXkgZmlyc3QgY2x1ZS4KClRoZSBgc21jX2xsY19yeF9oYW5kbGVyYCBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQgd2hlbiBhIG1lc3NhZ2UgYXJyaXZlcy4gSXQgZW5xdWV1ZXMgdGhlIG1lc3NhZ2UsIHdoaWNoIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIEJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgYHNtY19sbGNfZW5xdWV1ZWAgZnVuY3Rpb24gd291bGQgY29weSBvbmx5IHRoZSBmaXJzdCA0NCBieXRlcyAodGhlIGB1bmlvbiBzbWNfbGxjX21zZ2ApIG9mIHRoZSBtZXNzYWdlIGludG8gYSBuZXdseSBhbGxvY2F0ZWQgYHFlbnRyeWAuIFRoZSAqc3BpbGxvdmVyKiBieXRlcywgdGhvdWdoLCB0aG9zZSB3ZXJlIGxlZnQgcmVzaWRpbmcgaW4gYGxnci0mZ3Q7d3JfcnhfYnVmX3YyYC4gVGhlIHdvcmtlciB0aHJlYWQgbGF0ZXIgcHJvY2Vzc2VkIHRoaXMgYHFlbnRyeWAgYW5kIHJlYWQgdGhlIHNwaWxsb3ZlciBieXRlcyBmcm9tIHRoYXQgc2hhcmVkIGBsZ3ItJmd0O3dyX3J4X2J1Zl92MmAgYnVmZmVyLgoKVGhlIHByb2JsZW0/IElmIGEgc2Vjb25kIG1lc3NhZ2UgY2FtZSBpbiBiZWZvcmUgdGhlIHdvcmtlciB0aHJlYWQgaGFkIGEgY2hhbmNlIHRvIHByb2Nlc3MgdGhlIGZpcnN0LCB0aGUgc3BpbGxvdmVyIGJ5dGVzIGluIGBsZ3ItJmd0O3dyX3J4X2J1Zl92MmAgd291bGQgZ2V0IG92ZXJ3cml0dGVuIGJ5IHRoZSBzZWNvbmQgbWVzc2FnZS4gUHVyZSByYWNlIGNvbmRpdGlvbiwgY2xhc3NpYyBkYXRhIGNvcnJ1cHRpb24uIFRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IGNvcHlpbmcgdGhlICplbnRpcmUqIG1lc3NhZ2UsIGluY2x1ZGluZyB0aGUgc3BpbGxvdmVyIGRhdGEsIGludG8gdGhlIGBxZW50cnlgLiBFYWNoIGBxZW50cnlgIG5vdyBnZXRzIGl0cyBvd24gY29weSwgZWxpbWluYXRpbmcgdGhlIHNoYXJlZCBidWZmZXIgYW5kIHRoZSByYWNlLgoKTm93LCBteSBtaW5kIHNoaWZ0cyB0byBob3cgdGhpcyByYWNlIG1pZ2h0IGhhdmUgbWFuaWZlc3RlZCBpbiB3YXlzIEkgY2FuIGFuYWx5emUgZnVydGhlci4gVGhpcyByYWNlIGRvZXNuJiMzOTt0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggaXMgZ29vZC4gRXZlbiBpZiB0aGUgc2Vjb25kIG1lc3NhZ2UgaXMgc2hvcnRlciwgdGhlIHNwaWxsb3ZlciBidWZmZXIgaXMgaW5pdGlhbGl6ZWQgbWVtb3J5LCBqdXN0IHBvdGVudGlhbGx5IGNvcnJ1cHRlZC4gSG93ZXZlciwgaXQmIzM5O3MgcG9zc2libGUgZm9yIHRoZSB3b3JrZXIgdGhyZWFkIHRvIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBkYXRhLgoKSSBzdGFydCB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zLiBCZWZvcmUgdGhlIHBhdGNoLCBpbiBgc21jX2xsY19zYXZlX2FkZF9saW5rX3JrZXlzYCwgdGhlcmUmIzM5O3MgdGhpcyBjb2RlIHNuaXBwZXQ6CgpgYGBjCglleHQgPSAoc3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rX3YyX2V4dCAqKShsbGNfbXNnICYjNDM7CgkJCQkJCSAgICAgU01DX1dSX1RYX1NJWkUpOwoJbWF4ID0gbWluX3QodTgsIGV4dC0mZ3Q7bnVtX3JrZXlzLCBTTUNfTExDX1JLRVlTX1BFUl9NU0dfVjIpOwoJZG93bl93cml0ZSgmYW1wO2xnci0mZ3Q7cm1ic19sb2NrKTsKCWZvciAoaSA9IDA7IGkgJmx0OyBtYXg7IGkmIzQzOyYjNDM7KSB7CgkJc21jX3J0b2tlbl9zZXQobGdyLCBsaW5rLSZndDtsaW5rX2lkeCwgbGlua19uZXctJmd0O2xpbmtfaWR4LAoJCQkgICAgICAgZXh0LSZndDtydFtpXS5ybWJfa2V5LAoJCQkgICAgICAgZXh0LSZndDtydFtpXS5ybWJfdmFkZHJfbmV3LAoJCQkgICAgICAgZXh0LSZndDtydFtpXS5ybWJfa2V5X25ldyk7Cgl9CmBgYAoKVGhpcyBjb2RlICpkaWRuJiMzOTt0KiBjaGVjayBpZiB0aGUgcmVjZWl2ZWQgbWVzc2FnZSB3YXMgbG9uZyBlbm91Z2ggdG8gY29udGFpbiB0aGUgbnVtYmVyIG9mIHJrZXlzIGluZGljYXRlZCBieSBgZXh0LSZndDtudW1fcmtleXNgISBJdCBqdXN0IGJsaW5kbHkgdHJ1c3RzIHRoYXQgdmFsdWUsIHRoZW4gcmVhZHMgdXAgdG8gYFNNQ19MTENfUktFWVNfUEVSX01TR19WMmAgcmtleXMgZnJvbSB0aGUgc2hhcmVkIGBsbGNfbXNnICYjNDM7IFNNQ19XUl9UWF9TSVpFYCBidWZmZXIuIElmIHRoZSBwZWVyIHNlbmRzIGEgc2hvcnQgbWVzc2FnZSBidXQgc3BlY2lmaWVzIGEgbGFyZ2UgYG51bV9ya2V5c2AsIHRoZSBjb2RlIHdpbGwgcmVhZCBwYXN0IHRoZSBhY3R1YWwgcmVjZWl2ZWQgZGF0YSBpbiBgbGdyLSZndDt3cl9yeF9idWZfdjJgLiBCZWNhdXNlIGBsZ3ItJmd0O3dyX3J4X2J1Zl92MmAgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgLCBpdCYjMzk7cyB6ZXJvZWQgb24gYWxsb2NhdGlvbi4gU28gdGhlIG1lbW9yeSByZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgbWVzc2FnZSB3aWxsIGNvbnRhaW4gZWl0aGVyIHplcm9zIG9yIGRhdGEgZnJvbSBwcmV2aW91cyBtZXNzYWdlcy4gVGhpcyBpcyBzdGlsbCBub3QgKnVuaW5pdGlhbGl6ZWQqIG1lbW9yeSwgYnV0IGl0JiMzOTtzIGNsZWFybHkgY29ycnVwdGVkIGFuZCBjb3VsZCBsZWFkIHRvIGlzc3Vlcy4KCk5vdywgSSBuZWVkIHRvIGNvbnNpZGVyIGEgZGlmZmVyZW50IHBhdGguIFdoYXQgaGFwcGVucyBpZiBgc21jX2xpbmtfc2hhcmVkX3YyX3J4YnVmKGxpbmspYCBpcyBmYWxzZT8gVGhlbiwgYGxsY19tc2dgIHBvaW50cyB0byBgbG5rLSZndDt3cl9yeF9zZ2VzW3hdLmFkZHJgLCB3aGljaCBpcyBhbGxvY2F0ZWQgaW4gYHNtY193cl9hbGxvY19saW5rX21lbWAuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaG93IHRoYXQgYnVmZmVyIGlzIGFsbG9jYXRlZCB0byBjb25maXJtIHRoYXQgdGhlIHNhbWUgYXNzdW1wdGlvbnMgYWJvdXQgaW5pdGlhbGl6YXRpb24gYXBwbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dyX3J4X2RtYV9hZGRyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfY29yZS5oPTk3PXN0cnVjdCBzbWNfbGluayB7XG4tLVxubmV0L3NtYy9zbWNfY29yZS5oLTEzNS1cdFx0XHRcdFx0XHQgKi9cbm5ldC9zbWMvc21jX2NvcmUuaDoxMzY6XHRkbWFfYWRkcl90XHRcdHdyX3J4X2RtYV9hZGRyO1x0LyogRE1BIGFkZHJlc3Mgb2Ygd3JfcnhfYnVmcyAqL1xubmV0L3NtYy9zbWNfY29yZS5oLTEzNy1cdGRtYV9hZGRyX3RcdFx0d3JfcnhfdjJfZG1hX2FkZHI7IC8qIERNQSBhZGRyZXNzIG9mIHYyIHJ4IGJ1ZiovXG4tLVxubmV0L3NtYy9zbWNfd3IuYz01NTY9c3RhdGljIHZvaWQgc21jX3dyX2luaXRfc2dlKHN0cnVjdCBzbWNfbGluayAqbG5rKVxuLS1cbm5ldC9zbWMvc21jX3dyLmMtNjEyLVx0XHRsbmstXHUwMDNld3Jfcnhfc2dlc1t4XS5hZGRyID1cbm5ldC9zbWMvc21jX3dyLmM6NjEzOlx0XHRcdGxuay1cdTAwM2V3cl9yeF9kbWFfYWRkciAmIzQzOyBpICogbG5rLVx1MDAzZXdyX3J4X2J1Zmxlbjtcbm5ldC9zbWMvc21jX3dyLmMtNjE0LVx0XHRsbmstXHUwMDNld3Jfcnhfc2dlc1t4XS5sZW5ndGggPSBzbWNfbGlua19zaGFyZWRfdjJfcnhidWYobG5rKSA/XG4tLVxubmV0L3NtYy9zbWNfd3IuYz02MzY9dm9pZCBzbWNfd3JfZnJlZV9saW5rKHN0cnVjdCBzbWNfbGluayAqbG5rKVxuLS1cbm5ldC9zbWMvc21jX3dyLmMtNjU1LVxubmV0L3NtYy9zbWNfd3IuYzo2NTY6XHRpZiAobG5rLVx1MDAzZXdyX3J4X2RtYV9hZGRyKSB7XG5uZXQvc21jL3NtY193ci5jOjY1NzpcdFx0aWJfZG1hX3VubWFwX3NpbmdsZShpYmRldiwgbG5rLVx1MDAzZXdyX3J4X2RtYV9hZGRyLFxubmV0L3NtYy9zbWNfd3IuYy02NTgtXHRcdFx0XHQgICAgbG5rLVx1MDAzZXdyX3J4X2J1ZmxlbiAqIGxuay1cdTAwM2V3cl9yeF9jbnQsXG5uZXQvc21jL3NtY193ci5jLTY1OS1cdFx0XHRcdCAgICBETUFfRlJPTV9ERVZJQ0UpO1xubmV0L3NtYy9zbWNfd3IuYzo2NjA6XHRcdGxuay1cdTAwM2V3cl9yeF9kbWFfYWRkciA9IDA7XG5uZXQvc21jL3NtY193ci5jLTY2MS1cdH1cbi0tXG5uZXQvc21jL3NtY193ci5jPTg1NT1pbnQgc21jX3dyX2NyZWF0ZV9saW5rKHN0cnVjdCBzbWNfbGluayAqbG5rKVxuLS1cbm5ldC9zbWMvc21jX3dyLmMtODYxLVx0bG5rLVx1MDAzZXdyX3J4X2lkID0gMDtcbm5ldC9zbWMvc21jX3dyLmM6ODYyOlx0bG5rLVx1MDAzZXdyX3J4X2RtYV9hZGRyID0gaWJfZG1hX21hcF9zaW5nbGUoXG5uZXQvc21jL3NtY193ci5jLTg2My1cdFx0aWJkZXYsIGxuay1cdTAwM2V3cl9yeF9idWZzLFx0bG5rLVx1MDAzZXdyX3J4X2J1ZmxlbiAqIGxuay1cdTAwM2V3cl9yeF9jbnQsXG5uZXQvc21jL3NtY193ci5jLTg2NC1cdFx0RE1BX0ZST01fREVWSUNFKTtcbm5ldC9zbWMvc21jX3dyLmM6ODY1Olx0aWYgKGliX2RtYV9tYXBwaW5nX2Vycm9yKGliZGV2LCBsbmstXHUwMDNld3JfcnhfZG1hX2FkZHIpKSB7XG5uZXQvc21jL3NtY193ci5jOjg2NjpcdFx0bG5rLVx1MDAzZXdyX3J4X2RtYV9hZGRyID0gMDtcbm5ldC9zbWMvc21jX3dyLmMtODY3LVx0XHRyYyA9IC1FSU87XG4tLVxubmV0L3NtYy9zbWNfd3IuYy05MjYtXHR9XG5uZXQvc21jL3NtY193ci5jOjkyNzpcdGliX2RtYV91bm1hcF9zaW5nbGUoaWJkZXYsIGxuay1cdTAwM2V3cl9yeF9kbWFfYWRkcixcbm5ldC9zbWMvc21jX3dyLmMtOTI4LVx0XHRcdCAgICBsbmstXHUwMDNld3JfcnhfYnVmbGVuICogbG5rLVx1MDAzZXdyX3J4X2NudCxcbm5ldC9zbWMvc21jX3dyLmMtOTI5LVx0XHRcdCAgICBETUFfRlJPTV9ERVZJQ0UpO1xubmV0L3NtYy9zbWNfd3IuYzo5MzA6XHRsbmstXHUwMDNld3JfcnhfZG1hX2FkZHIgPSAwO1xubmV0L3NtYy9zbWNfd3IuYy05MzEtb3V0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTAxMgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGB3cl9yeF9idWZzYCBBbGxvY2F0aW9uKioKCk9rYXksIHNvIGBsbmstJmd0O3dyX3J4X2J1ZnNgIGlzIG1hcHBlZC4gVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIE15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHRyYWNlIGJhY2sgYW5kIGRldGVybWluZSAqd2hlcmUqIHRoaXMgYHdyX3J4X2J1ZnNgIGJ1ZmZlciBpdHNlbGYgaXMgYWN0dWFsbHkgYWxsb2NhdGVkLiBLbm93aW5nIHRoZSBhbGxvY2F0aW9uIGNvbnRleHQgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UsIHBvdGVudGlhbCBib3R0bGVuZWNrcywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIG9yaWdpbiBvZiB0aGlzIHBhcnRpY3VsYXIgbWVtb3J5IGJsb2NrLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBjb2RlIHJlYWRpbHkgcmV2ZWFscyBpdHMgYWxsb2NhdGlvbiBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d3JfcnhfYnVmcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2NvcmUuaD05Nz1zdHJ1Y3Qgc21jX2xpbmsge1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuaC0xMjctXG5uZXQvc21jL3NtY19jb3JlLmg6MTI4Olx0dThcdFx0XHQqd3JfcnhfYnVmcztcdC8qIFdSIHJlY3YgcGF5bG9hZCBidWZmZXJzICovXG5uZXQvc21jL3NtY19jb3JlLmgtMTI5LVx0c3RydWN0IGliX3JlY3Zfd3JcdCp3cl9yeF9pYnM7XHQvKiBXUiByZWN2IG1ldGEgZGF0YSAqL1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuaC0xMzUtXHRcdFx0XHRcdFx0ICovXG5uZXQvc21jL3NtY19jb3JlLmg6MTM2Olx0ZG1hX2FkZHJfdFx0XHR3cl9yeF9kbWFfYWRkcjtcdC8qIERNQSBhZGRyZXNzIG9mIHdyX3J4X2J1ZnMgKi9cbm5ldC9zbWMvc21jX2NvcmUuaC0xMzctXHRkbWFfYWRkcl90XHRcdHdyX3J4X3YyX2RtYV9hZGRyOyAvKiBETUEgYWRkcmVzcyBvZiB2MiByeCBidWYqL1xuLS1cbm5ldC9zbWMvc21jX3dyLmM9NDMwPXN0YXRpYyBpbmxpbmUgdm9pZCBzbWNfd3JfcnhfZGVtdWx0aXBsZXgoc3RydWN0IGliX3djICp3Yylcbi0tXG5uZXQvc21jL3NtY193ci5jLTQ0MS1cdGluZGV4ID0gZG9fZGl2KHRlbXBfd3JfaWQsIGxpbmstXHUwMDNld3JfcnhfY250KTtcbm5ldC9zbWMvc21jX3dyLmM6NDQyOlx0d3JfcnggPSAoc3RydWN0IHNtY193cl9yeF9oZHIgKikobGluay1cdTAwM2V3cl9yeF9idWZzICYjNDM7IGluZGV4ICogbGluay1cdTAwM2V3cl9yeF9idWZsZW4pO1xubmV0L3NtYy9zbWNfd3IuYy00NDMtXHRoYXNoX2Zvcl9lYWNoX3Bvc3NpYmxlKHNtY193cl9yeF9oYXNoLCBoYW5kbGVyLCBsaXN0LCB3cl9yeC1cdTAwM2V0eXBlKSB7XG4tLVxubmV0L3NtYy9zbWNfd3IuYz02OTM9dm9pZCBzbWNfd3JfZnJlZV9saW5rX21lbShzdHJ1Y3Qgc21jX2xpbmsgKmxuaylcbi0tXG5uZXQvc21jL3NtY193ci5jLTcyMC1cdGxuay1cdTAwM2V3cl90eF9idWZzID0gTlVMTDtcbm5ldC9zbWMvc21jX3dyLmM6NzIxOlx0a2ZyZWUobG5rLVx1MDAzZXdyX3J4X2J1ZnMpO1xubmV0L3NtYy9zbWNfd3IuYzo3MjI6XHRsbmstXHUwMDNld3JfcnhfYnVmcyA9IE5VTEw7XG5uZXQvc21jL3NtY193ci5jLTcyMy19XG4tLVxubmV0L3NtYy9zbWNfd3IuYz03NDE9aW50IHNtY193cl9hbGxvY19saW5rX21lbShzdHJ1Y3Qgc21jX2xpbmsgKmxpbmspXG4tLVxubmV0L3NtYy9zbWNfd3IuYy03NDctXHRcdGdvdG8gbm9fbWVtO1xubmV0L3NtYy9zbWNfd3IuYzo3NDg6XHRsaW5rLVx1MDAzZXdyX3J4X2J1ZnMgPSBrY2FsbG9jKGxpbmstXHUwMDNlbWF4X3JlY3Zfd3IsIGxpbmstXHUwMDNld3JfcnhfYnVmbGVuLFxubmV0L3NtYy9zbWNfd3IuYy03NDktXHRcdFx0XHQgICBHRlBfS0VSTkVMKTtcbm5ldC9zbWMvc21jX3dyLmM6NzUwOlx0aWYgKCFsaW5rLVx1MDAzZXdyX3J4X2J1ZnMpXG5uZXQvc21jL3NtY193ci5jLTc1MS1cdFx0Z290byBub19tZW1fd3JfdHhfYnVmcztcbi0tXG5uZXQvc21jL3NtY193ci5jLTc1My1cdGlmICghbGluay1cdTAwM2V3cl90eF9pYnMpXG5uZXQvc21jL3NtY193ci5jOjc1NDpcdFx0Z290byBub19tZW1fd3JfcnhfYnVmcztcbm5ldC9zbWMvc21jX3dyLmMtNzU1LVx0bGluay1cdTAwM2V3cl9yeF9pYnMgPSBremFsbG9jX29ianMobGluay1cdTAwM2V3cl9yeF9pYnNbMF0sIGxpbmstXHUwMDNlbWF4X3JlY3Zfd3IpO1xuLS1cbm5ldC9zbWMvc21jX3dyLmMtODIwLVx0a2ZyZWUobGluay1cdTAwM2V3cl90eF9pYnMpO1xubmV0L3NtYy9zbWNfd3IuYzo4MjE6bm9fbWVtX3dyX3J4X2J1ZnM6XG5uZXQvc21jL3NtY193ci5jOjgyMjpcdGtmcmVlKGxpbmstXHUwMDNld3JfcnhfYnVmcyk7XG5uZXQvc21jL3NtY193ci5jLTgyMy1ub19tZW1fd3JfdHhfYnVmczpcbi0tXG5uZXQvc21jL3NtY193ci5jPTg1NT1pbnQgc21jX3dyX2NyZWF0ZV9saW5rKHN0cnVjdCBzbWNfbGluayAqbG5rKVxuLS1cbm5ldC9zbWMvc21jX3dyLmMtODYyLVx0bG5rLVx1MDAzZXdyX3J4X2RtYV9hZGRyID0gaWJfZG1hX21hcF9zaW5nbGUoXG5uZXQvc21jL3NtY193ci5jOjg2MzpcdFx0aWJkZXYsIGxuay1cdTAwM2V3cl9yeF9idWZzLFx0bG5rLVx1MDAzZXdyX3J4X2J1ZmxlbiAqIGxuay1cdTAwM2V3cl9yeF9jbnQsXG5uZXQvc21jL3NtY193ci5jLTg2NC1cdFx0RE1BX0ZST01fREVWSUNFKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAzMjcKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgRGF0YSBDb3JydXB0aW9uIEJ1ZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbGluay0mZ3Q7d3JfcnhfYnVmc2AgYWxsb2NhdGlvbi4gSXQmIzM5O3MgYWxsb2NhdGVkIHVzaW5nIGBrY2FsbG9jYCwgbWVhbmluZyBpdCYjMzk7cyBpbml0aWFsaXplZCB0byB6ZXJvLiBUaGlzIGlzIGNydWNpYWwuIElmIHdlIGdldCBhIHNob3J0IG1lc3NhZ2UsIHRoZSByZW1haW5pbmcgYnl0ZXMgaW4gdGhlIGJ1ZmZlciAqYXJlbiYjMzk7dCogdW5pbml0aWFsaXplZCBnYXJiYWdlOyB0aGV5JiMzOTtyZSBlaXRoZXIgemVyb2VzIG9yIGxlZnRvdmVyIGRhdGEgZnJvbSBwcmV2aW91cyBtZXNzYWdlcy4gVGhpcyBjaGFuZ2VzIHRoZSB3aG9sZSBwaWN0dXJlLgoKVGhlcmVmb3JlLCB0aGUgcHJvYmxlbSBpc24mIzM5O3QgYWJvdXQgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgdGhhdCYjMzk7cyBub3QgdGhlIGJ1Zy4gVGhlIHBhdGNoIG11c3QgYmUgYWRkcmVzc2luZyBkYXRhIGNvcnJ1cHRpb24gZHVlIHRvIGEgcmFjZS4gQSBzaGFyZWQgcmVjZWl2ZSBidWZmZXIgaXMgYmVpbmcgb3ZlcndyaXR0ZW4gYnkgYSBuZXcgbWVzc2FnZSBiZWZvcmUgdGhlIG9sZCBvbmUgaXMgZnVsbHkgcHJvY2Vzc2VkLiBJdCYjMzk7cyBhIGNsYXNzaWMgbG9naWMgYnVnLCBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIHRoZSB3b3JrZXIgdGhyZWFkIGVuZHMgdXAgcmVhZGluZyB0aGUgbmV3LCBwb3RlbnRpYWxseSBpbmNvbXBsZXRlLCBkYXRhIGluc3RlYWQgb2YgdGhlIGRhdGEgaXQgd2FzIGV4cGVjdGluZy4gS0FTQU4gcHJvYmFibHkgaXNuJiMzOTt0IGZsYWdnaW5nIHRoaXMgYmVjYXVzZSwgdGVjaG5pY2FsbHksIHRoZSByZWFkcyBhcmUgKndpdGhpbiogdGhlIGFsbG9jYXRlZCBidWZmZXIuIFRoZSBidWZmZXImIzM5O3Mgc2l6ZSwgYFNNQ19XUl9CVUZfVjJfU0laRWAsIGFuZCB0aGUgcmVhZCBsaW1pdCwgYFNNQ19MTENfUktFWVNfUEVSX01TR19WMmAsIGFyZSBib3RoIHdpdGhpbiBib3VuZHMuCgpXYWl0IGEgc2Vjb25kLCB0aG91Z2guIEFyZSB3ZSAqYWJzb2x1dGVseSogc3VyZSBhYm91dCB0aGF0PyBMZXQmIzM5O3MgZG91YmxlLWNoZWNrLiBUaGUgY29kZSB1c2VzIGBtaW5fdGAgdG8gZGV0ZXJtaW5lIHRoZSByZWFkIGxpbWl0LCBhbmQgSSBzZWUgYFNNQ19MTENfUktFWVNfUEVSX01TR19WMmAgaW4gdGhlcmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB2YWx1ZSBpcyB3aGF0IEkgdGhpbmsgaXQgaXMsIHRoYXQmIzM5O3MgaG93IHdlIGZpbmQgb3V0IGlmIGl0IGlzIHBvdGVudGlhbGx5IHJlYWRpbmcgb3V0IG9mIGJvdW5kcy4gVGhlIGJlaGF2aW9yIG9mIHRoaXMgaXMgYmFzZWQgb24gdGhpcyBudW1iZXIsIHRpbWUgdG8gY29uZmlybS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBTTUNfTExDX1JLRVlTX1BFUl9NU0dfVjImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19sbGMuYz0xMzk9c3RydWN0IHNtY19ybWJfcnRva2VuIHtcbi0tXG5uZXQvc21jL3NtY19sbGMuYy0xNTAtI2RlZmluZSBTTUNfTExDX1JLRVlTX1BFUl9NU0dcdFx0M1xubmV0L3NtYy9zbWNfbGxjLmM6MTUxOiNkZWZpbmUgU01DX0xMQ19SS0VZU19QRVJfTVNHX1YyXHQyNTVcbm5ldC9zbWMvc21jX2xsYy5jLTE1Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzExNTAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1MTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBCdWZmZXIgT3ZlcmZsb3dzIGluIFNNQyBMaW5rIEFkZGl0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYHNtY19sbGNfc2F2ZV9hZGRfbGlua19ya2V5c2AgZnVuY3Rpb24gYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuIElmIGBTTUNfTExDX1JLRVlTX1BFUl9NU0dfVjJgIGlzIHNldCB0byAyNTUsIHRoZW4gYG1heGAgY2FuIGFsc28gYmUgMjU1IHdpdGhpbiB0aGUgbG9vcC4gVGhlIGNvZGUgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgYGV4dC0mZ3Q7cnRgIGFycmF5LCByZWFkaW5nIGBtYXhgIG51bWJlciBvZiBlbGVtZW50cy4gRWFjaCBvZiB0aG9zZSBlbGVtZW50cyBpcyBhIGBzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfY29udF9ydGAuCgpOb3csIGVhY2ggb2YgdGhlc2UgYHJ0YCBlbGVtZW50cyBpcyAxNiBieXRlczogdHdvIDMyLWJpdCBrZXlzIGFuZCBhIDY0LWJpdCB2aXJ0dWFsIGFkZHJlc3MuIElmIGBtYXhgIGlzIDI1NSwgdGhhdCBtZWFucyB0aGUgY29kZSBpcyBnb2luZyB0byByZWFkIDI1NSAqIDE2ID0gNDA4MCBieXRlcy4gSG93ZXZlciwgd2hlbiB3ZSBhZGQgdGhlIG9mZnNldCB0byB0aGUgc3RydWN0LCB0aGUgYWN0dWFsIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIHRoZSBhcnJheSBpcyBhdCAxNiwgcmVzdWx0aW5nIGluIGEgcmVhZCBvZiA0MDk2IGJ5dGVzIGZyb20gdGhlIGBleHRgIHN0cnVjdHVyZS4KCk5vdywgd2hlcmUgZG9lcyBgZXh0YCBsaXZlPyBXZWxsLCBpdCYjMzk7cyBjYWxjdWxhdGVkIGFzIGBsbGNfbXNnICYjNDM7IFNNQ19XUl9UWF9TSVpFYC4gVGhlIHZhbHVlIG9mIGBsbGNfbXNnYCBpcyBlZmZlY3RpdmVseSBgbGdyLSZndDt3cl9yeF9idWZfdjIgJiM0MzsgU01DX1dSX1RYX1NJWkVgLiBgbGdyLSZndDt3cl9yeF9idWZfdjJgIGlzIGFsbG9jYXRlZCB3aXRoIGBTTUNfV1JfQlVGX1YyX1NJWkVgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYFNNQ19XUl9CVUZfVjJfU0laRWAgaXMgbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gdGhlIGJ1ZmZlciBhbGxvY2F0ZWQgZm9yIHRoZSBgcnRgIGFycmF5IHdpdGhpbiBgZXh0YCBhbmQgYFNNQ19XUl9UWF9TSVpFYCB3aWxsIG5vdCBjYXVzZSBhbiBvdmVyZmxvdy4gSWYgbm90LCB0aGlzIGxvb3AgY291bGQgcG90ZW50aWFsbHkgcmVhZCBiZXlvbmQgdGhlIGFsbG9jYXRlZCBidWZmZXIsIG9wZW5pbmcgdGhlIGRvb3IgdG8gYSBidWZmZXIgb3ZlcmZsb3cuIE5lZWQgdG8gY2hlY2sgd2hhdCBgU01DX1dSX0JVRl9WMl9TSVpFYCBhY3R1YWxseSByZXNvbHZlcyB0by4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBTTUNfV1JfQlVGX1YyX1NJWkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19jb3JlLmg9NTE9ZW51bSBzbWNfbGlua19zdGF0ZSB7XHRcdFx0LyogcG9zc2libGUgc3RhdGVzIG9mIGEgbGluayAqL1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuaC01OC0jZGVmaW5lIFNNQ19XUl9CVUZfU0laRVx0XHQ0OFx0Lyogc2l6ZSBvZiB3b3JrIHJlcXVlc3QgYnVmZmVyICovXG5uZXQvc21jL3NtY19jb3JlLmg6NTk6I2RlZmluZSBTTUNfV1JfQlVGX1YyX1NJWkVcdDgxOTJcdC8qIHNpemUgb2YgdjIgd29yayByZXF1ZXN0IGJ1ZmZlciAqL1xubmV0L3NtYy9zbWNfY29yZS5oLTYwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjI2OAoJCQkJCQkJb3V0cHV0OiAzMDYKCQkJCQkJCXRob3VnaHRzOiAyMzc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBTTUMtUnYyIExMQyBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgSXNzdWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2gsIHdoaWxlIGFkZHJlc3NpbmcgYSBjcml0aWNhbCByYWNlIGNvbmRpdGlvbiwgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgYXZlbnVlcyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MgdGhhdCB3b3VsZCB3YXJyYW50IEtNU0FOIHNjcnV0aW55LiBIZXJlJiMzOTtzIG15IHJlYXNvbmluZywgcGllY2UgYnkgcGllY2U6CgpGaXJzdCwgYFNNQ19XUl9CVUZfVjJfU0laRWAgaXMgODE5MiBieXRlcywgYSBmYWN0LiBBbmQgc2luY2UgNDA5NiBieXRlcyBpcyBtdWNoIGxlc3MgdGhhbiB0aGF0LCBhbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZCB3aXRoaW4gdGhhdCBjb250ZXh0IHdvdWxkIGF0IHdvcnN0IHJlYWQgZnJvbSB6ZXJvZWQgbWVtb3J5LiBQcmV2aW91c2x5IHRoZSBjb2RlIHJlbGllZCBvbiByZWFkaW5nIHRoZSBzaGFyZWQgRE1BIGJ1ZmZlci4gSXQmIzM5O3MgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgLiBTbywgaWYgYSBwZWVyIHNlbnQgYSBzaG9ydCBtZXNzYWdlIHdpdGggbGFyZ2UgYG51bV9ya2V5c2AsIHRoZSBleHRyYSBzcGFjZSByZWFkIHdvdWxkIGJlIHplcm9lZCBkYXRhLiBJJiMzOTttIHNhdGlzZmllZCB0aGF0IHRoaXMgaXNuJiMzOTt0IGEgdnVsbmVyYWJpbGl0eS4gVGhlIGluaXRpYWwgcmVhZHMgYXJlIHJlYWRpbmcgemVyb3Mgbm90IHJhbmRvbSB2YWx1ZXMuIGBzbWNfcnRva2VuX3NldGAgd291bGQgY29ycmVjdGx5IHNldCB0aGUgcnRva2VuIHRvIDAgYW5kIHRoZSBjb2RlIHdvdWxkIHJ1biB3aXRob3V0IGFuIGVycm9yLgoKVGhlIHBhdGNoIGludHJvZHVjZXMgYm91bmRzIGNoZWNrcyB0byByZXN0cmljdCByZWFkcyB0byB0aGUgYWN0dWFsIGxlbmd0aCBvZiB0aGUgcmVjZWl2ZWQgZGF0YS4gVGhlIGNvZGUgbm93IHVzZXMgYG1pbl90YCB0byBsaW1pdCByZWFkcyB0byB0aGUgcmVjZWl2ZWQgbWVzc2FnZSBzaXplLiBUaGlzIGlzIGEgdmVyeSBjbGVhciBpbXByb3ZlbWVudCwgcHJldmVudGluZyByZWFkcyBwYXN0IHRoZSBib3VuZGFyaWVzIG9mIHRoZSByZWNlaXZlZCBkYXRhLCBub3QgdGhlIGFsbG9jYXRlZCBidWZmZXIuIFRoaXMgZW5zdXJlcyB0aGF0IGV2ZW4gaWYgYSBtYWxpY2lvdXMgcGVlciBzZW5kcyBhIHRydW5jYXRlZCBtZXNzYWdlIHdpdGggYSBsYXJnZSBgbnVtX3JrZXlzYCB2YWx1ZSwgdGhlIGNvZGUgd29uJiMzOTt0IGF0dGVtcHQgdG8gcmVhZCBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlY2F1c2UgYWxsIG1lbW9yeSB1cCB0byB0aGUgZW5kIG9mIHRoZSBidWZmZXIgaXMgY29uc2lkZXJlZCBpbml0aWFsaXplZC4KClNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGVuc3VyZXMgdGhhdCB0aGUgcmVhZCBkb2VzbiYjMzk7dCBnbyBiZXlvbmQgdGhlIHJlY2VpdmVkIG1lc3NhZ2UgbGVuZ3RoLCB3aGljaCBpcyBnb29kLiBLTVNBTiYjMzk7cyBjb25jZXJucyBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBkb24mIzM5O3QgYXBwbHkgaGVyZS4gRXZlbiBpZiB0aGUgbmV0d29yayBkZXZpY2Ugd3JvdGUgdG8gdGhlIGJ1ZmZlciB2aWEgRE1BLCB0aGUgbWVtb3J5IGlzIGNvbnNpZGVyZWQgaW5pdGlhbGl6ZWQuIEtNU0FOJiMzOTtzIGdvaW5nIHRvIGJlIGhhcHB5IGJlY2F1c2Ugb2YgYGt6YWxsb2NgLgoKTmV4dCwgSSBleGFtaW5lZCBgc21jX2xsY19ybXRfZGVsZXRlX3JrZXlgLiBJdCB1c2VzIHRoZSBzYW1lIGJvdW5kcyBjaGVjayBhcHByb2FjaC4gVGhlIHNhbWUgcmVhc29uaW5nIGFwcGxpZXMgaGVyZSBhcyB3ZWxsLiBUaGUgY2hlY2tzIHByZXZlbnQgcmVhZGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlICpyZWNlaXZlZCogZGF0YS4KClRoZSBjcml0aWNhbCBwb2ludCBpcyB0aGF0IHRoZXNlIHN0cnVjdHVyZXMgYXJlbiYjMzk7dCBzZW50IHRvIHVzZXIgc3BhY2UuIEl0IGlzIGtlcm5lbC10by1rZXJuZWwgY29tbXVuaWNhdGlvbiBvdmVyIFJvQ0UvSUIuIFRoZSBtZXNzYWdlcyBhcmUgc2VudCB0byB0aGUgcGVlciBrZXJuZWwsIG5vdCB1c2VyIHNwYWNlLiBLTVNBTiYjMzk7cyBnb2luZyB0byBiZSB0cmlnZ2VyZWQgb24gbGVha3MgdG8gdXNlciBzcGFjZS4gS01TQU4gd291bGQgZGV0ZWN0IGEgcmVtb3RlIGluZm8tbGVhayBpZiB0aGUgYnVmZmVyIHdhcyB1bmluaXRpYWxpemVkLiBUaGVzZSBidWZmZXJzIGFyZSB6ZXJvZWQgYmVmb3JlIGJlaW5nIHNlbnQuIEFuZCB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgY2hhbmdlIHRoYXQuCgpUaGUgcGF0Y2ggY2hhbmdlcyBgc21jX2xsY19lbnF1ZXVlYCB0byBhbGxvY2F0ZSBgcWVudHJ5YCB3aXRoIGBrbWFsbG9jX2ZsZXhgLiBXaGlsZSBga21hbGxvY19mbGV4YCBkb2VzbiYjMzk7dCB6ZXJvIHRoZSBtZW1vcnksIHRoZSBwYXRjaCBleHBsaWNpdGx5IGluaXRpYWxpemVzIGFsbCBmaWVsZHMuIEFuZCBJIGNoZWNrZWQgdGhlIGBzdHJ1Y3Qgc21jX2xsY19xZW50cnlgIHBhZGRpbmcuIFRoZXJlIGFyZSA2IGJ5dGVzIG9mIHBhZGRpbmcuIFRoZSBgcWVudHJ5YCBpcyB1c2VkIGludGVybmFsbHkgYnkgdGhlIHdvcmtlciB0aHJlYWQgYW5kIG5ldmVyIGV4cG9zZWQgdG8gdXNlcnNwYWNlLiBUaG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgYnl0ZXMgYXJlIG5vdCBsZWFrZWQgYmVjYXVzZSB0aGUgY29kZSBpcyBpbnRlcm5hbC4KCkFmdGVyIGNhcmVmdWxseSBjaGVja2luZyBhbGwgdXNlcywgdGhlIGBxZW50cnlgIHN0cnVjdHVyZSBpcyB1c2VkIHN0cmljdGx5IGFzIGFuIGludGVybmFsIGRhdGEgc3RydWN0dXJlIGFuZCB0aGUgY29udGVudHMgYXJlIHVzZWQgb25seSB3aXRoaW4gdGhlIGtlcm5lbC4gYGFkZF9sbGNgIGlzIHVzZWQgaW4gYHNtY19sbGNfc3J2X2FkZF9saW5rYC4gSXQgc2ltcGx5IHJlYWRzIGZpZWxkcyBmcm9tIGBxZW50cnktJmd0O21zZ2AsIHdoaWNoIGFyZSBpbml0aWFsaXplZC4gVGhlbiBpbiBgc21jX2xsY19wcm9jZXNzX2NsaV9hZGRfbGlua2AgdGhlIGJvZHkgaXMgcmVhZCB2aWEgYHFlbnRyeS0mZ3Q7Ym9keWAuCgpUaGUgY2FsY3VsYXRpb24gb2YgYHNtY19sbGNfbWF4X2JvZHlfbGVuYCBpcyBqdXN0IGEgY2FwIG9uIHRoZSBtYXhpbXVtIGJvZHkgbGVuZ3RoLiBUaGlzIHByZXZlbnRzIG92ZXItYWxsb2NhdGlvbnMgd2hlbiBhIHZlcnkgbGFyZ2UgYGJvZHlfbGVuYCBpcyByZWNlaXZlZC4gSXQgaGVscHMgd2l0aCBzYWZldHkuIEl0JiMzOTtzIGEgc2Vuc2libGUgY2hlY2suCgpJbiBlc3NlbmNlLCB0aGlzIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gd2hlcmUgYSBzaGFyZWQgcmVjZWl2ZSBidWZmZXIgaXMgb3ZlcndyaXR0ZW4gYmVmb3JlIGl0JiMzOTtzIHByb2Nlc3NlZCwgYW5kIGluIGRvaW5nIHNvLCBpdCBpbnRyb2R1Y2VzIGEgYHFlbnRyeWAgc3RydWN0dXJlLiBUaGUgZGF0YSBpbiBgcWVudHJ5YCBpcyBjb3BpZWQgZnJvbSB0aGUgc2hhcmVkIGJ1ZmZlciBhbmQgdGhlIGNvZGUgY29ycmVjdGx5IHZhbGlkYXRlcyB0aGUgbGVuZ3RoIG9mIHRoZSByZWNlaXZlZCBtZXNzYWdlLiBJdCBmaXhlcyB0aGUgcmFjZSBieSBjb3B5aW5nIHRoZSByZWxldmFudCBkYXRhIGludG8gYSBgcWVudHJ5YCBzdHJ1Y3R1cmUuIFRoZSBwYXRjaCBhbHNvIGFkZHMgYm91bmRzIGNoZWNrcyB0byBlbnN1cmUgdGhhdCB0aGUgcGFyc2luZyBkb2VzbiYjMzk7dCByZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgZGF0YS4gVGhlIGRhdGEgcGFzdCB0aGUgbWVzc2FnZSBib3VuZGFyeSwgaWYgcmVhZCwgaXMgYWxyZWFkeSB6ZXJvZWQgKG9yIG9sZCBhbmQgaW5pdGlhbGl6ZWQpLiBUaGUgbmV3IGludGVybmFsIHN0cnVjdHVyZXMgYXJlIGFsbCBpbml0aWFsaXplZC4gVGhlIHBhZGRpbmcgd2l0aGluIHRoZSBgcWVudHJ5YCBpcyBuZXZlciBsZWFrZWQgYW5kIHRoZSBzaGFyZWQgRE1BIGJ1ZmZlciBpcyBwcm9wZXJseSBpbml0aWFsaXplZC4gVGhlcmUgYXJlIG5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQuIFRoZSB3b3JrZXIgdGhyZWFkIHdpbGwgb25seSByZWFkIGluaXRpYWxpemVkIGRhdGEuIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4KClRoZXJlZm9yZSwgdGhlIGFwcHJvcHJpYXRlIGFjdGlvbiBpcyBgTmVlZHNLTVNBTj1mYWxzZWAgd2l0aCB0aGUgYWJvdmUgcmVhc29uaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIFNNQy1SdjIgTExDIG1lc3NhZ2UgaGFuZGxpbmcgd2hlcmUgYSBzaGFyZWQgRE1BIHJlY2VpdmUgYnVmZmVyIChgd3JfcnhfYnVmX3YyYCkgY291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgYSBuZXcgaW5jb21pbmcgbWVzc2FnZSBiZWZvcmUgdGhlIHdvcmtlciB0aHJlYWQgcHJvY2Vzc2VkIHRoZSBwcmV2aW91cyBvbmUuIEl0IHJlc29sdmVzIHRoaXMgYnkgY29weWluZyB0aGUgc3BpbGxvdmVyIGJ5dGVzIG9mIHRoZSBtZXNzYWdlIGludG8gYSBmbGV4aWJsZSBhcnJheSBpbiBgc3RydWN0IHNtY19sbGNfcWVudHJ5YCBhdCB0aGUgdGltZSBvZiByZWNlcHRpb24uIEl0IGFsc28gYWRkcyBib3VuZHMgY2hlY2tzIHRvIGVuc3VyZSBtZXNzYWdlIHBhcnNpbmcgZG9lcyBub3QgcmVhZCBwYXN0IHRoZSBhY3R1YWwgcmVjZWl2ZWQgbGVuZ3RoLlxuXG5CZWZvcmUgdGhpcyBwYXRjaCwgcmVhZGluZyBwYXN0IHRoZSByZWNlaXZlZCBsZW5ndGggd291bGQgcmVhZCBmcm9tIHRoZSByZW1haW5kZXIgb2YgdGhlIHJlY2VpdmUgYnVmZmVyLiBTaW5jZSB0aGlzIGJ1ZmZlciBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AgKG9yIGBrY2FsbG9jYCksIHRoZSBtZW1vcnkgd2FzIHplcm8taW5pdGlhbGl6ZWQsIG1lYW5pbmcgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgd2FzIGFjY2Vzc2VkLiBcblxuVGhlIG5ld2x5IGludHJvZHVjZWQgYHN0cnVjdCBzbWNfbGxjX3FlbnRyeWAgaXMgc3RyaWN0bHkgYW4gaW50ZXJuYWwga2VybmVsIHN0cnVjdHVyZSB1c2VkIGZvciBxdWV1aW5nIG1lc3NhZ2VzIHRvIGEgd29ya2VyIHRocmVhZC4gSXQgaXMgbmV2ZXIgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3Igc2VudCBvdmVyIHRoZSBuZXR3b3JrLCBzbyBhbnkgc3RydWN0IHBhZGRpbmcgY2Fubm90IGNhdXNlIGFuIGluZm8tbGVhay4gRnVydGhlcm1vcmUsIGFsbCBmaWVsZHMgYW5kIHRoZSBmbGV4aWJsZSBhcnJheSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBkdXJpbmcgYWxsb2NhdGlvbiBpbiBgc21jX2xsY19lbnF1ZXVlYC4gTWVzc2FnZXMgZ2VuZXJhdGVkIGxvY2FsbHkgYW5kIHNlbnQgb3ZlciB0aGUgbmV0d29yayBhcmUgZnVsbHkgemVyb2VkIHVzaW5nIGBtZW1zZXRgIGJlZm9yZSB0cmFuc21pc3Npb24uXG5cblNpbmNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2VzIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgcGF0Y2gsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBTTUMtUnYyIExMQyBtZXNzYWdlIGhhbmRsaW5nIHdoZXJlIGEgc2hhcmVkIERNQSByZWNlaXZlIGJ1ZmZlciAoYHdyX3J4X2J1Zl92MmApIGNvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGEgbmV3IGluY29taW5nIG1lc3NhZ2UgYmVmb3JlIHRoZSB3b3JrZXIgdGhyZWFkIHByb2Nlc3NlZCB0aGUgcHJldmlvdXMgb25lLiBJdCByZXNvbHZlcyB0aGlzIGJ5IGNvcHlpbmcgdGhlIHNwaWxsb3ZlciBieXRlcyBvZiB0aGUgbWVzc2FnZSBpbnRvIGEgZmxleGlibGUgYXJyYXkgaW4gYHN0cnVjdCBzbWNfbGxjX3FlbnRyeWAgYXQgdGhlIHRpbWUgb2YgcmVjZXB0aW9uLiBJdCBhbHNvIGFkZHMgYm91bmRzIGNoZWNrcyB0byBlbnN1cmUgbWVzc2FnZSBwYXJzaW5nIGRvZXMgbm90IHJlYWQgcGFzdCB0aGUgYWN0dWFsIHJlY2VpdmVkIGxlbmd0aC5cblxuQmVmb3JlIHRoaXMgcGF0Y2gsIHJlYWRpbmcgcGFzdCB0aGUgcmVjZWl2ZWQgbGVuZ3RoIHdvdWxkIHJlYWQgZnJvbSB0aGUgcmVtYWluZGVyIG9mIHRoZSByZWNlaXZlIGJ1ZmZlci4gU2luY2UgdGhpcyBidWZmZXIgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgIChvciBga2NhbGxvY2ApLCB0aGUgbWVtb3J5IHdhcyB6ZXJvLWluaXRpYWxpemVkLCBtZWFuaW5nIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdhcyBhY2Nlc3NlZC4gXG5cblRoZSBuZXdseSBpbnRyb2R1Y2VkIGBzdHJ1Y3Qgc21jX2xsY19xZW50cnlgIGlzIHN0cmljdGx5IGFuIGludGVybmFsIGtlcm5lbCBzdHJ1Y3R1cmUgdXNlZCBmb3IgcXVldWluZyBtZXNzYWdlcyB0byBhIHdvcmtlciB0aHJlYWQuIEl0IGlzIG5ldmVyIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yaywgc28gYW55IHN0cnVjdCBwYWRkaW5nIGNhbm5vdCBjYXVzZSBhbiBpbmZvLWxlYWsuIEZ1cnRoZXJtb3JlLCBhbGwgZmllbGRzIGFuZCB0aGUgZmxleGlibGUgYXJyYXkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgZHVyaW5nIGFsbG9jYXRpb24gaW4gYHNtY19sbGNfZW5xdWV1ZWAuIE1lc3NhZ2VzIGdlbmVyYXRlZCBsb2NhbGx5IGFuZCBzZW50IG92ZXIgdGhlIG5ldHdvcmsgYXJlIGZ1bGx5IHplcm9lZCB1c2luZyBgbWVtc2V0YCBiZWZvcmUgdHJhbnNtaXNzaW9uLlxuXG5TaW5jZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlcyBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGlzIHBhdGNoLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDI6NTc6NDcuMjIxMjg3OTc3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI4NDA3MzczODk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNNQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNtY19sbGNfY2xpX2FkZF9saW5rXCIsXG4gICAgXCJzbWNfbGxjX3Nydl9hZGRfbGlua1wiLFxuICAgIFwic21jX2xsY19hZGRfbGlua19sb2NhbFwiLFxuICAgIFwic21jX2xsY19zcnZfZGVsZXRlX2xpbmtfbG9jYWxcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gU01DLVJ2MiBMTEMgbWVzc2FnZSBoYW5kbGluZyB3aGVyZSBhIHNoYXJlZCBETUEgcmVjZWl2ZSBidWZmZXIgKGB3cl9yeF9idWZfdjJgKSBjb3VsZCBiZSBvdmVyd3JpdHRlbiBieSBhIG5ldyBpbmNvbWluZyBtZXNzYWdlIGJlZm9yZSB0aGUgd29ya2VyIHRocmVhZCBwcm9jZXNzZWQgdGhlIHByZXZpb3VzIG9uZS4gSXQgcmVzb2x2ZXMgdGhpcyBieSBjb3B5aW5nIHRoZSBzcGlsbG92ZXIgYnl0ZXMgb2YgdGhlIG1lc3NhZ2UgaW50byBhIGZsZXhpYmxlIGFycmF5IGluIGBzdHJ1Y3Qgc21jX2xsY19xZW50cnlgIGF0IHRoZSB0aW1lIG9mIHJlY2VwdGlvbi4gSXQgYWxzbyBhZGRzIGJvdW5kcyBjaGVja3MgdG8gZW5zdXJlIG1lc3NhZ2UgcGFyc2luZyBkb2VzIG5vdCByZWFkIHBhc3QgdGhlIGFjdHVhbCByZWNlaXZlZCBsZW5ndGguXFxuXFxuQmVmb3JlIHRoaXMgcGF0Y2gsIHJlYWRpbmcgcGFzdCB0aGUgcmVjZWl2ZWQgbGVuZ3RoIHdvdWxkIHJlYWQgZnJvbSB0aGUgcmVtYWluZGVyIG9mIHRoZSByZWNlaXZlIGJ1ZmZlci4gU2luY2UgdGhpcyBidWZmZXIgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgIChvciBga2NhbGxvY2ApLCB0aGUgbWVtb3J5IHdhcyB6ZXJvLWluaXRpYWxpemVkLCBtZWFuaW5nIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdhcyBhY2Nlc3NlZC4gXFxuXFxuVGhlIG5ld2x5IGludHJvZHVjZWQgYHN0cnVjdCBzbWNfbGxjX3FlbnRyeWAgaXMgc3RyaWN0bHkgYW4gaW50ZXJuYWwga2VybmVsIHN0cnVjdHVyZSB1c2VkIGZvciBxdWV1aW5nIG1lc3NhZ2VzIHRvIGEgd29ya2VyIHRocmVhZC4gSXQgaXMgbmV2ZXIgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3Igc2VudCBvdmVyIHRoZSBuZXR3b3JrLCBzbyBhbnkgc3RydWN0IHBhZGRpbmcgY2Fubm90IGNhdXNlIGFuIGluZm8tbGVhay4gRnVydGhlcm1vcmUsIGFsbCBmaWVsZHMgYW5kIHRoZSBmbGV4aWJsZSBhcnJheSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBkdXJpbmcgYWxsb2NhdGlvbiBpbiBgc21jX2xsY19lbnF1ZXVlYC4gTWVzc2FnZXMgZ2VuZXJhdGVkIGxvY2FsbHkgYW5kIHNlbnQgb3ZlciB0aGUgbmV0d29yayBhcmUgZnVsbHkgemVyb2VkIHVzaW5nIGBtZW1zZXRgIGJlZm9yZSB0cmFuc21pc3Npb24uXFxuXFxuU2luY2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZXMgb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBwYXRjaCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gU01DIExMQyBtZXNzYWdlIGVucXVldWVpbmcgd2hlcmUgbGFyZ2UgU01DLVJ2MiBtZXNzYWdlcyAobGlrZSBBRERfTElOSyBhbmQgREVMRVRFX1JLRVlfVjIpIHdlcmUgb3ZlcmZsb3dpbmcgdGhlIGFsbG9jYXRlZCBzbWNfbGxjX3FlbnRyeSBidWZmZXIuIEl0IGludHJvZHVjZXMgYSBmbGV4aWJsZSBhcnJheSBtZW1iZXIgdG8gZHluYW1pY2FsbHkgYWxsb2NhdGUgdGhlIGJ1ZmZlciBiYXNlZCBvbiB0aGUgbWVzc2FnZSBzaXplLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgU01DIExMQyBwcm9jZXNzaW5nIGxvZ2ljIGFuZCBpcyByZWFjaGFibGUgdmlhIEFGX1NNQyBzb2NrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMjo1Nzo0Ny4yMjEyOTU0NTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMDk4MzYwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDZmMmE4NjA5M2NkYTE0ZDZmNDdmZDk5N2JjZDUzYmVkMWUzZGIxZGVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMTkgMDI6NTc6NDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfbGxjLmMgYi9uZXQvc21jL3NtY19sbGMuY1xcbmluZGV4IDk1NGIyZmYxODE1YzIuLjM5M2FhMGFmMThkMWQgMTAwNjQ0XFxuLS0tIGEvbmV0L3NtYy9zbWNfbGxjLmNcXG4rKysgYi9uZXQvc21jL3NtY19sbGMuY1xcbkBAIC0xNTcsNiArMTU3LDcgQEAgc3RydWN0IHNtY19sbGNfbXNnX2NvbmZpcm1fcmtleSB7XFx0LyogdHlwZSAweDA2ICovXFxuIH07XFxuIFxcbiAjZGVmaW5lIFNNQ19MTENfREVMX1JLRVlfTUFYXFx0OFxcbisjZGVmaW5lIFNNQ19MTENfREVMX1JLRVlfVjJfSU5MSU5FXFx0OVxcbiAjZGVmaW5lIFNNQ19MTENfRkxBR19SS0VZX1JFVFJZXFx0MHgxMFxcbiAjZGVmaW5lIFNNQ19MTENfRkxBR19SS0VZX05FR1xcdDB4MjBcXG4gXFxuQEAgLTE3Nyw2ICsxNzgsMTUgQEAgc3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyIHtcXHQvKiB0eXBlIDB4MjkgKi9cXG4gXFx0X19iZTMyIHJrZXlbXTtcXG4gfTtcXG4gXFxuKy8qIHRoZSBsZWFkaW5nIHJrZXlzIG9mIGEgREVMRVRFX1JLRVlfVjIgZml0IGludG8gdW5pb24gc21jX2xsY19tc2cgKi9cXG4rc3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyX2lubGluZSB7XFx0LyogdHlwZSAweDI5ICovXFxuK1xcdHN0cnVjdCBzbWNfbGxjX2hkciBoZDtcXG4rXFx0dTggbnVtX3JrZXlzO1xcbitcXHR1OCBudW1faW52YWxfcmtleXM7XFxuK1xcdHU4IHJlc2VydmVkWzJdO1xcbitcXHRfX2JlMzIgcmtleVtTTUNfTExDX0RFTF9SS0VZX1YyX0lOTElORV07XFxuK307XFxuK1xcbiB1bmlvbiBzbWNfbGxjX21zZyB7XFxuIFxcdHN0cnVjdCBzbWNfbGxjX21zZ19jb25maXJtX2xpbmsgY29uZmlybV9saW5rO1xcbiBcXHRzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmsgYWRkX2xpbms7XFxuQEAgLTE4Niw2ICsxOTYsNyBAQCB1bmlvbiBzbWNfbGxjX21zZyB7XFxuIFxcbiBcXHRzdHJ1Y3Qgc21jX2xsY19tc2dfY29uZmlybV9ya2V5IGNvbmZpcm1fcmtleTtcXG4gXFx0c3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5IGRlbGV0ZV9ya2V5O1xcbitcXHRzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXlfdjJfaW5saW5lIGRlbGV0ZV9ya2V5X3YyO1xcbiBcXG4gXFx0c3RydWN0IHNtY19sbGNfbXNnX3Rlc3RfbGluayB0ZXN0X2xpbms7XFxuIFxcdHN0cnVjdCB7XFxuQEAgLTE5NCwxNSArMjA1LDI1IEBAIHVuaW9uIHNtY19sbGNfbXNnIHtcXG4gXFx0fSByYXc7XFxuIH07XFxuIFxcbitzdGF0aWNfYXNzZXJ0KFNNQ19MTENfREVMX1JLRVlfVjJfSU5MSU5FID09XFxuK1xcdCAgICAgIChzaXplb2YodW5pb24gc21jX2xsY19tc2cpIC1cXG4rXFx0ICAgICAgIG9mZnNldG9mKHN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92MiwgcmtleSkpIC9cXG4rXFx0ICAgICAgc2l6ZW9mKF9fYmUzMikpO1xcbitzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKHN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92Ml9pbmxpbmUsIHJrZXkpID09XFxuK1xcdCAgICAgIG9mZnNldG9mKHN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92MiwgcmtleSkpO1xcbitcXG4gI2RlZmluZSBTTUNfTExDX0ZMQUdfUkVTUFxcdFxcdDB4ODBcXG4gXFxuIHN0cnVjdCBzbWNfbGxjX3FlbnRyeSB7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG4gXFx0c3RydWN0IHNtY19saW5rICpsaW5rO1xcbitcXHR1MTYgYm9keV9sZW47XFxuIFxcdHVuaW9uIHNtY19sbGNfbXNnIG1zZztcXG4rXFx0dTggYm9keVtdIF9fY291bnRlZF9ieShib2R5X2xlbik7XFxuIH07XFxuIFxcbi1zdGF0aWMgdm9pZCBzbWNfbGxjX2VucXVldWUoc3RydWN0IHNtY19saW5rICpsaW5rLCB1bmlvbiBzbWNfbGxjX21zZyAqbGxjKTtcXG4rc3RhdGljIHZvaWQgc21jX2xsY19lbnF1ZXVlKHN0cnVjdCBzbWNfbGluayAqbGluaywgdW5pb24gc21jX2xsY19tc2cgKmxsYyxcXG4rXFx0XFx0XFx0ICAgIHUzMiBieXRlX2xlbik7XFxuIFxcbiBzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnNtY19sbGNfZmxvd19xZW50cnlfY2xyKHN0cnVjdCBzbWNfbGxjX2Zsb3cgKmZsb3cpXFxuIHtcXG5AQCAtOTk4LDE1ICsxMDE5LDIwIEBAIHN0YXRpYyBpbnQgc21jX2xsY19jbGlfY29uZl9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluayxcXG4gXFxuIHN0YXRpYyB2b2lkIHNtY19sbGNfc2F2ZV9hZGRfbGlua19ya2V5cyhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXFxuIFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBzbWNfbGluayAqbGlua19uZXcsXFxuLVxcdFxcdFxcdFxcdFxcdHU4ICpsbGNfbXNnKVxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnFlbnRyeSlcXG4ge1xcbitcXHRjb25zdCB1MzIgcnRfb2ZmID0gb2Zmc2V0b2Yoc3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rX3YyX2V4dCwgcnQpO1xcbiBcXHRzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfdjJfZXh0ICpleHQ7XFxuIFxcdHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyID0gbGluay1cXHUwMDNlbGdyO1xcbiBcXHRpbnQgbWF4LCBpO1xcbiBcXG4tXFx0ZXh0ID0gKHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua192Ml9leHQgKikobGxjX21zZyArXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgU01DX1dSX1RYX1NJWkUpO1xcbitcXHQvKiB0aGUgcmtleSBjb3VudCBpdHNlbGYgaXMgb25seSB0aGVyZSBpZiBlbm91Z2ggYnl0ZXMgYXJyaXZlZCAqL1xcbitcXHRpZiAocWVudHJ5LVxcdTAwM2Vib2R5X2xlbiBcXHUwMDNjIHJ0X29mZilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRleHQgPSAoc3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rX3YyX2V4dCAqKXFlbnRyeS1cXHUwMDNlYm9keTtcXG4gXFx0bWF4ID0gbWluX3QodTgsIGV4dC1cXHUwMDNlbnVtX3JrZXlzLCBTTUNfTExDX1JLRVlTX1BFUl9NU0dfVjIpO1xcbitcXHRtYXggPSBtaW5fdCh1MzIsIG1heCwgKHFlbnRyeS1cXHUwMDNlYm9keV9sZW4gLSBydF9vZmYpIC9cXG4rXFx0XFx0XFx0ICAgICAgc2l6ZW9mKGV4dC1cXHUwMDNlcnRbMF0pKTtcXG4gXFx0ZG93bl93cml0ZShcXHUwMDI2bGdyLVxcdTAwM2VybWJzX2xvY2spO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbWF4OyBpKyspIHtcXG4gXFx0XFx0c21jX3J0b2tlbl9zZXQobGdyLCBsaW5rLVxcdTAwM2VsaW5rX2lkeCwgbGlua19uZXctXFx1MDAzZWxpbmtfaWR4LFxcbkBAIC0xMDk5LDkgKzExMjUsNyBAQCBpbnQgc21jX2xsY19jbGlfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLCBzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnFlbnRyeSlcXG4gXFx0aWYgKHJjKVxcbiBcXHRcXHRnb3RvIG91dF9jbGVhcl9sbms7XFxuIFxcdGlmIChsZ3ItXFx1MDAzZXNtY192ZXJzaW9uID09IFNNQ19WMikge1xcbi1cXHRcXHR1OCAqbGxjX21zZyA9IHNtY19saW5rX3NoYXJlZF92Ml9yeGJ1ZihsaW5rKSA/XFxuLVxcdFxcdFxcdCh1OCAqKWxnci1cXHUwMDNld3JfcnhfYnVmX3YyIDogKHU4ICopbGxjO1xcbi1cXHRcXHRzbWNfbGxjX3NhdmVfYWRkX2xpbmtfcmtleXMobGluaywgbG5rX25ldywgbGxjX21zZyk7XFxuK1xcdFxcdHNtY19sbGNfc2F2ZV9hZGRfbGlua19ya2V5cyhsaW5rLCBsbmtfbmV3LCBxZW50cnkpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRyYyA9IHNtY19sbGNfY2xpX3JrZXlfZXhjaGFuZ2UobGluaywgbG5rX25ldyk7XFxuIFxcdFxcdGlmIChyYykge1xcbkBAIC0xNDgxLDcgKzE1MDUsNyBAQCBpbnQgc21jX2xsY19zcnZfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLFxcbiBcXHR9XFxuIFxcdGFkZF9sbGMgPSBcXHUwMDI2cWVudHJ5LVxcdTAwM2Vtc2cuYWRkX2xpbms7XFxuIFxcdGlmIChhZGRfbGxjLVxcdTAwM2VoZC5mbGFncyBcXHUwMDI2IFNNQ19MTENfRkxBR19BRERfTE5LX1JFSikge1xcbi1cXHRcXHRzbWNfbGxjX2Zsb3dfcWVudHJ5X2RlbChcXHUwMDI2bGdyLVxcdTAwM2VsbGNfZmxvd19sY2wpO1xcbitcXHRcXHRzbWNfbGxjX2Zsb3dfcWVudHJ5X2NscihcXHUwMDI2bGdyLVxcdTAwM2VsbGNfZmxvd19sY2wpO1xcbiBcXHRcXHRyYyA9IC1FTk9MSU5LO1xcbiBcXHRcXHRnb3RvIG91dF9lcnI7XFxuIFxcdH1cXG5AQCAtMTQ5Miw3ICsxNTE2LDggQEAgaW50IHNtY19sbGNfc3J2X2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluayxcXG4gXFx0XFx0bGdyX25ld190ID0gU01DX0xHUl9BU1lNTUVUUklDX1BFRVI7XFxuIFxcdH1cXG4gXFx0c21jX2xsY19zYXZlX2FkZF9saW5rX2luZm8obGlua19uZXcsIGFkZF9sbGMpO1xcbi1cXHRzbWNfbGxjX2Zsb3dfcWVudHJ5X2RlbChcXHUwMDI2bGdyLVxcdTAwM2VsbGNfZmxvd19sY2wpO1xcbitcXHQvKiBhZGRfbGxjIHN0aWxsIHBvaW50cyBpbnRvIHFlbnRyeSwgc28gb25seSBkZXRhY2ggaXQgaGVyZSAqL1xcbitcXHRzbWNfbGxjX2Zsb3dfcWVudHJ5X2NscihcXHUwMDI2bGdyLVxcdTAwM2VsbGNfZmxvd19sY2wpO1xcbiBcXG4gXFx0cmMgPSBzbWNfaWJfcmVhZHlfbGluayhsaW5rX25ldyk7XFxuIFxcdGlmIChyYylcXG5AQCAtMTUwMSw5ICsxNTI2LDcgQEAgaW50IHNtY19sbGNfc3J2X2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluayxcXG4gXFx0aWYgKHJjKVxcbiBcXHRcXHRnb3RvIG91dF9lcnI7XFxuIFxcdGlmIChsZ3ItXFx1MDAzZXNtY192ZXJzaW9uID09IFNNQ19WMikge1xcbi1cXHRcXHR1OCAqbGxjX21zZyA9IHNtY19saW5rX3NoYXJlZF92Ml9yeGJ1ZihsaW5rKSA/XFxuLVxcdFxcdFxcdCh1OCAqKWxnci1cXHUwMDNld3JfcnhfYnVmX3YyIDogKHU4ICopYWRkX2xsYztcXG4tXFx0XFx0c21jX2xsY19zYXZlX2FkZF9saW5rX3JrZXlzKGxpbmssIGxpbmtfbmV3LCBsbGNfbXNnKTtcXG4rXFx0XFx0c21jX2xsY19zYXZlX2FkZF9saW5rX3JrZXlzKGxpbmssIGxpbmtfbmV3LCBxZW50cnkpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRyYyA9IHNtY19sbGNfc3J2X3JrZXlfZXhjaGFuZ2UobGluaywgbGlua19uZXcpO1xcbiBcXHRcXHRpZiAocmMpXFxuQEAgLTE1MTIsMTQgKzE1MzUsMTQgQEAgaW50IHNtY19sbGNfc3J2X2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluayxcXG4gXFx0cmMgPSBzbWNfbGxjX3Nydl9jb25mX2xpbmsobGluaywgbGlua19uZXcsIGxncl9uZXdfdCk7XFxuIFxcdGlmIChyYylcXG4gXFx0XFx0Z290byBvdXRfZXJyO1xcbi1cXHRrZnJlZShpbmkpO1xcbi1cXHRyZXR1cm4gMDtcXG4rXFx0Z290byBvdXQ7XFxuIG91dF9lcnI6XFxuIFxcdGlmIChsaW5rX25ldykge1xcbiBcXHRcXHRsaW5rX25ldy1cXHUwMDNlc3RhdGUgPSBTTUNfTE5LX0lOQUNUSVZFO1xcbiBcXHRcXHRzbWNyX2xpbmtfY2xlYXIobGlua19uZXcsIGZhbHNlKTtcXG4gXFx0fVxcbiBvdXQ6XFxuK1xcdGtmcmVlKHFlbnRyeSk7XFxuIFxcdGtmcmVlKGluaSk7XFxuIFxcdGlmIChzZW5kX3JlcV9hZGRfbGlua19yZXNwKVxcbiBcXHRcXHRzbWNfbGxjX3NlbmRfcmVxX2FkZF9saW5rX3Jlc3BvbnNlKHJlcV9xZW50cnkpO1xcbkBAIC0xNTUyLDcgKzE1NzUsOCBAQCB2b2lkIHNtY19sbGNfYWRkX2xpbmtfbG9jYWwoc3RydWN0IHNtY19saW5rICpsaW5rKVxcbiBcXHRhZGRfbGxjLmhkLmNvbW1vbi5sbGNfdHlwZSA9IFNNQ19MTENfQUREX0xJTks7XFxuIFxcdHNtY19sbGNfaW5pdF9tc2dfaGRyKFxcdTAwMjZhZGRfbGxjLmhkLCBsaW5rLVxcdTAwM2VsZ3IsIHNpemVvZihhZGRfbGxjKSk7XFxuIFxcdC8qIG5vIGRldiBhbmQgcG9ydCBuZWVkZWQgKi9cXG4tXFx0c21jX2xsY19lbnF1ZXVlKGxpbmssICh1bmlvbiBzbWNfbGxjX21zZyAqKVxcdTAwMjZhZGRfbGxjKTtcXG4rXFx0c21jX2xsY19lbnF1ZXVlKGxpbmssICh1bmlvbiBzbWNfbGxjX21zZyAqKVxcdTAwMjZhZGRfbGxjLFxcbitcXHRcXHRcXHRzaXplb2YodW5pb24gc21jX2xsY19tc2cpKTtcXG4gfVxcbiBcXG4gLyogd29ya2VyIHRvIHByb2Nlc3MgYW4gYWRkIGxpbmsgbWVzc2FnZSAqL1xcbkBAIC0xNTg4LDcgKzE2MTIsOCBAQCB2b2lkIHNtY19sbGNfc3J2X2RlbGV0ZV9saW5rX2xvY2FsKHN0cnVjdCBzbWNfbGluayAqbGluaywgdTggZGVsX2xpbmtfaWQpXFxuIFxcdGRlbF9sbGMubGlua19udW0gPSBkZWxfbGlua19pZDtcXG4gXFx0ZGVsX2xsYy5yZWFzb24gPSBodG9ubChTTUNfTExDX0RFTF9MT1NUX1BBVEgpO1xcbiBcXHRkZWxfbGxjLmhkLmZsYWdzIHw9IFNNQ19MTENfRkxBR19ERUxfTElOS19PUkRFUkxZO1xcbi1cXHRzbWNfbGxjX2VucXVldWUobGluaywgKHVuaW9uIHNtY19sbGNfbXNnICopXFx1MDAyNmRlbF9sbGMpO1xcbitcXHRzbWNfbGxjX2VucXVldWUobGluaywgKHVuaW9uIHNtY19sbGNfbXNnICopXFx1MDAyNmRlbF9sbGMsXFxuK1xcdFxcdFxcdHNpemVvZih1bmlvbiBzbWNfbGxjX21zZykpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBzbWNfbGxjX3Byb2Nlc3NfY2xpX2RlbGV0ZV9saW5rKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyKVxcbkBAIC0xODEwLDE5ICsxODM1LDI4IEBAIHN0YXRpYyB2b2lkIHNtY19sbGNfcm10X2RlbGV0ZV9ya2V5KHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyKVxcbiBcXHRsaW5rID0gcWVudHJ5LVxcdTAwM2VsaW5rO1xcbiBcXG4gXFx0aWYgKGxnci1cXHUwMDNlc21jX3ZlcnNpb24gPT0gU01DX1YyKSB7XFxuLVxcdFxcdHN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92MiAqbGxjdjI7XFxuK1xcdFxcdHN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92Ml9pbmxpbmUgKmxsY3YyO1xcbiBcXG4tXFx0XFx0aWYgKHNtY19saW5rX3NoYXJlZF92Ml9yeGJ1ZihsaW5rKSkge1xcbi1cXHRcXHRcXHRtZW1jcHkobGdyLVxcdTAwM2V3cl9yeF9idWZfdjIsIGxsYywgc2l6ZW9mKCpsbGMpKTtcXG4tXFx0XFx0XFx0bGxjdjIgPSAoc3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyICopbGdyLVxcdTAwM2V3cl9yeF9idWZfdjI7XFxuLVxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdGxsY3YyID0gKHN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92MiAqKWxsYztcXG4tXFx0XFx0fVxcbitcXHRcXHQvKiBUaGUgbGVhZGluZyBTTUNfTExDX0RFTF9SS0VZX1YyX0lOTElORSBya2V5cyBhcmUgZGVjbGFyZWQgaW5cXG4rXFx0XFx0ICogdGhlIG1lc3NhZ2UgaXRzZWxmLCBhbnkgZnVydGhlciBvbmVzIHdlcmUgcmVjZWl2ZWQgaW50b1xcbitcXHRcXHQgKiBxZW50cnktXFx1MDAzZWJvZHkuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRsbGN2MiA9IFxcdTAwMjZxZW50cnktXFx1MDAzZW1zZy5kZWxldGVfcmtleV92MjtcXG4gXFx0XFx0bGxjdjItXFx1MDAzZW51bV9pbnZhbF9ya2V5cyA9IDA7XFxuIFxcbiBcXHRcXHRtYXggPSBtaW5fdCh1OCwgbGxjdjItXFx1MDAzZW51bV9ya2V5cywgU01DX0xMQ19SS0VZU19QRVJfTVNHX1YyKTtcXG4rXFx0XFx0bWF4ID0gbWluX3QodTMyLCBtYXgsIFNNQ19MTENfREVMX1JLRVlfVjJfSU5MSU5FICtcXG4rXFx0XFx0XFx0XFx0ICAgICAgcWVudHJ5LVxcdTAwM2Vib2R5X2xlbiAvIHNpemVvZihfX2JlMzIpKTtcXG4gXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG1heDsgaSsrKSB7XFxuLVxcdFxcdFxcdGlmIChzbWNfcnRva2VuX2RlbGV0ZShsaW5rLCBsbGN2Mi1cXHUwMDNlcmtleVtpXSkpXFxuK1xcdFxcdFxcdF9fYmUzMiBya2V5O1xcbitcXG4rXFx0XFx0XFx0aWYgKGkgXFx1MDAzYyBTTUNfTExDX0RFTF9SS0VZX1YyX0lOTElORSlcXG4rXFx0XFx0XFx0XFx0cmtleSA9IGxsY3YyLVxcdTAwM2Vya2V5W2ldO1xcbitcXHRcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdFxcdG1lbWNweShcXHUwMDI2cmtleSwgcWVudHJ5LVxcdTAwM2Vib2R5ICtcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgKGkgLSBTTUNfTExDX0RFTF9SS0VZX1YyX0lOTElORSkgKlxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBzaXplb2YocmtleSksIHNpemVvZihya2V5KSk7XFxuK1xcdFxcdFxcdGlmIChzbWNfcnRva2VuX2RlbGV0ZShsaW5rLCBya2V5KSlcXG4gXFx0XFx0XFx0XFx0bGxjdjItXFx1MDAzZW51bV9pbnZhbF9ya2V5cysrO1xcbiBcXHRcXHR9XFxuIFxcdFxcdG1lbXNldChcXHUwMDI2bGxjLVxcdTAwM2Vya2V5WzBdLCAwLCBzaXplb2YobGxjLVxcdTAwM2Vya2V5KSk7XFxuQEAgLTIwNjMsMTggKzIwOTcsNTIgQEAgc3RhdGljIHZvaWQgc21jX2xsY19yeF9yZXNwb25zZShzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXFxuIFxcdHdha2VfdXAoXFx1MDAyNmxpbmstXFx1MDAzZWxnci1cXHUwMDNlbGxjX21zZ193YWl0ZXIpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBzbWNfbGxjX2VucXVldWUoc3RydWN0IHNtY19saW5rICpsaW5rLCB1bmlvbiBzbWNfbGxjX21zZyAqbGxjKVxcbisvKiB0aGUgbG9uZ2VzdCB0YWlsIGVpdGhlciByZWFkZXIgb2YgcWVudHJ5LVxcdTAwM2Vib2R5IGNhbiB1c2UgKi9cXG4rc3RhdGljIHUzMiBzbWNfbGxjX21heF9ib2R5X2xlbih1bmlvbiBzbWNfbGxjX21zZyAqbGxjKVxcbit7XFxuK1xcdHN3aXRjaCAobGxjLVxcdTAwM2VyYXcuaGRyLmNvbW1vbi5sbGNfdHlwZSkge1xcbitcXHRjYXNlIFNNQ19MTENfQUREX0xJTks6XFxuK1xcdFxcdHJldHVybiBvZmZzZXRvZihzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfdjJfZXh0LCBydCkgK1xcbitcXHRcXHQgICAgICAgU01DX0xMQ19SS0VZU19QRVJfTVNHX1YyICpcXG4rXFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfY29udF9ydCk7XFxuK1xcdGNhc2UgU01DX0xMQ19ERUxFVEVfUktFWTpcXG4rXFx0XFx0cmV0dXJuIChTTUNfTExDX1JLRVlTX1BFUl9NU0dfVjIgLVxcbitcXHRcXHRcXHRTTUNfTExDX0RFTF9SS0VZX1YyX0lOTElORSkgKiBzaXplb2YoX19iZTMyKTtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgc21jX2xsY19lbnF1ZXVlKHN0cnVjdCBzbWNfbGluayAqbGluaywgdW5pb24gc21jX2xsY19tc2cgKmxsYyxcXG4rXFx0XFx0XFx0ICAgIHUzMiBieXRlX2xlbilcXG4ge1xcbiBcXHRzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxnciA9IGxpbmstXFx1MDAzZWxncjtcXG4gXFx0c3RydWN0IHNtY19sbGNfcWVudHJ5ICpxZW50cnk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcdHUxNiBib2R5X2xlbiA9IDA7XFxuK1xcbitcXHQvKiBWMiBtZXNzYWdlcyBjYW4gYmUgbG9uZ2VyIHRoYW4gdGhlIGlubGluZSB1bmlvbiBzbWNfbGxjX21zZy4gQ2FycnlcXG4rXFx0ICogdGhlIHJlbWFpbmRlciBpbiB0aGUgcWVudHJ5IGl0c2VsZiwgc28gdGhhdCBpdHMgbGlmZXRpbWUgYW5kIGl0c1xcbitcXHQgKiBsZW5ndGggbWF0Y2ggdGhlIG1lc3NhZ2UgdGhlIHBlZXIgYWN0dWFsbHkgc2VudC5cXG4rXFx0ICovXFxuK1xcdGlmIChsZ3ItXFx1MDAzZXNtY192ZXJzaW9uID09IFNNQ19WMiBcXHUwMDI2XFx1MDAyNiBieXRlX2xlbiBcXHUwMDNlIFNNQ19XUl9UWF9TSVpFKVxcbitcXHRcXHRib2R5X2xlbiA9IG1pbl90KHUzMiwgYnl0ZV9sZW4sIFNNQ19XUl9CVUZfVjJfU0laRSkgLVxcbitcXHRcXHRcXHQgICBTTUNfV1JfVFhfU0laRTtcXG4rXFx0Ym9keV9sZW4gPSBtaW5fdCh1MzIsIGJvZHlfbGVuLCBzbWNfbGxjX21heF9ib2R5X2xlbihsbGMpKTtcXG4gXFxuLVxcdHFlbnRyeSA9IGttYWxsb2Nfb2JqKCpxZW50cnksIEdGUF9BVE9NSUMpO1xcbitcXHRxZW50cnkgPSBrbWFsbG9jX2ZsZXgoKnFlbnRyeSwgYm9keSwgYm9keV9sZW4sIEdGUF9BVE9NSUMpO1xcbiBcXHRpZiAoIXFlbnRyeSlcXG4gXFx0XFx0cmV0dXJuO1xcbitcXHRxZW50cnktXFx1MDAzZWJvZHlfbGVuID0gYm9keV9sZW47XFxuIFxcdHFlbnRyeS1cXHUwMDNlbGluayA9IGxpbms7XFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZxZW50cnktXFx1MDAzZWxpc3QpO1xcbiBcXHRtZW1jcHkoXFx1MDAyNnFlbnRyeS1cXHUwMDNlbXNnLCBsbGMsIHNpemVvZih1bmlvbiBzbWNfbGxjX21zZykpO1xcbitcXHRpZiAoYm9keV9sZW4pIHtcXG4rXFx0XFx0dTggKnNyYyA9IHNtY19saW5rX3NoYXJlZF92Ml9yeGJ1ZihsaW5rKSA/XFxuK1xcdFxcdFxcdCh1OCAqKWxnci1cXHUwMDNld3JfcnhfYnVmX3YyIDogKHU4ICopbGxjO1xcbitcXG4rXFx0XFx0bWVtY3B5KHFlbnRyeS1cXHUwMDNlYm9keSwgc3JjICsgU01DX1dSX1RYX1NJWkUsIGJvZHlfbGVuKTtcXG4rXFx0fVxcbiBcXG4gXFx0LyogcHJvY2VzcyByZXNwb25zZXMgaW1tZWRpYXRlbHkgKi9cXG4gXFx0aWYgKChsbGMtXFx1MDAzZXJhdy5oZHIuZmxhZ3MgXFx1MDAyNiBTTUNfTExDX0ZMQUdfUkVTUCkgXFx1MDAyNlxcdTAwMjZcXG5AQCAtMjEwNiw3ICsyMTc0LDcgQEAgc3RhdGljIHZvaWQgc21jX2xsY19yeF9oYW5kbGVyKHN0cnVjdCBpYl93YyAqd2MsIHZvaWQgKmJ1ZilcXG4gXFx0XFx0XFx0cmV0dXJuOyAvKiBpbnZhbGlkIG1lc3NhZ2UgKi9cXG4gXFx0fVxcbiBcXG4tXFx0c21jX2xsY19lbnF1ZXVlKGxpbmssIGxsYyk7XFxuK1xcdHNtY19sbGNfZW5xdWV1ZShsaW5rLCBsbGMsIHdjLVxcdTAwM2VieXRlX2xlbik7XFxuIH1cXG4gXFxuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiB3b3JrZXIsIHV0aWxzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfd3IuYyBiL25ldC9zbWMvc21jX3dyLmNcXG5pbmRleCA1OWM5MmI0Njk0NWM1Li45N2JhNDY4OTNiMTdmIDEwMDY0NFxcbi0tLSBhL25ldC9zbWMvc21jX3dyLmNcXG4rKysgYi9uZXQvc21jL3NtY193ci5jXFxuQEAgLTYwMiw5ICs2MDIsOSBAQCBzdGF0aWMgdm9pZCBzbWNfd3JfaW5pdF9zZ2Uoc3RydWN0IHNtY19saW5rICpsbmspXFxuIFxcbiBcXHQvKiBXaXRoIFNNQy1SdjIgdGhlcmUgY2FuIGJlIG1lc3NhZ2VzIGxhcmdlciB0aGFuIFNNQ19XUl9UWF9TSVpFLlxcbiBcXHQgKiBFYWNoIGliX3JlY3Zfd3IgZ2V0cyAyIHNnZXMsIHRoZSBzZWNvbmQgb25lIGlzIGEgc3BpbGxvdmVyIGJ1ZmZlclxcbi1cXHQgKiBhbmQgdGhlIHNhbWUgYnVmZmVyIGZvciBhbGwgc2dlcy4gV2hlbiBhIGxhcmdlciBtZXNzYWdlIGFycml2ZWQgdGhlblxcbi1cXHQgKiB0aGUgY29udGVudCBvZiB0aGUgZmlyc3Qgc21hbGwgc2dlIGlzIGNvcGllZCB0byB0aGUgYmVnaW5uaW5nIG9mXFxuLVxcdCAqIHRoZSBsYXJnZXIgc3BpbGxvdmVyIGJ1ZmZlciwgYWxsb3dpbmcgZWFzeSBkYXRhIG1hcHBpbmcuXFxuK1xcdCAqIGFuZCB0aGUgc2FtZSBidWZmZXIgZm9yIGFsbCBzZ2VzLiBUaGUgc3BpbGxvdmVyIHNnZSBzdGFydHMgYXRcXG4rXFx0ICogU01DX1dSX1RYX1NJWkUsIHNvIHRoZSBsZWFkaW5nIGJ5dGVzIG9mIHRoYXQgYnVmZmVyIGFyZSBuZXZlclxcbitcXHQgKiB3cml0dGVuLlxcbiBcXHQgKi9cXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGxuay1cXHUwMDNld3JfcnhfY250OyBpKyspIHtcXG4gXFx0XFx0aW50IHggPSBpICogbG5rLVxcdTAwM2V3cl9yeF9zZ2VfY250O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMjo1Nzo0Ny42NDI5MzA2ODVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1NDMwMjA5NjUwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTTUNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzbWNfbGxjX2NsaV9hZGRfbGlua1wiLFxuICAgIFwic21jX2xsY19zcnZfYWRkX2xpbmtcIixcbiAgICBcInNtY19sbGNfYWRkX2xpbmtfbG9jYWxcIixcbiAgICBcInNtY19sbGNfc3J2X2RlbGV0ZV9saW5rX2xvY2FsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gU01DIExMQyBtZXNzYWdlIGVucXVldWVpbmcgd2hlcmUgbGFyZ2UgU01DLVJ2MiBtZXNzYWdlcyAobGlrZSBBRERfTElOSyBhbmQgREVMRVRFX1JLRVlfVjIpIHdlcmUgb3ZlcmZsb3dpbmcgdGhlIGFsbG9jYXRlZCBzbWNfbGxjX3FlbnRyeSBidWZmZXIuIEl0IGludHJvZHVjZXMgYSBmbGV4aWJsZSBhcnJheSBtZW1iZXIgdG8gZHluYW1pY2FsbHkgYWxsb2NhdGUgdGhlIGJ1ZmZlciBiYXNlZCBvbiB0aGUgbWVzc2FnZSBzaXplLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgU01DIExMQyBwcm9jZXNzaW5nIGxvZ2ljIGFuZCBpcyByZWFjaGFibGUgdmlhIEFGX1NNQyBzb2NrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2ZjJhODYwOTNjZGExNGQ2ZjQ3ZmQ5OTdiY2Q1M2JlZDFlM2RiMWRlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTkgMDI6NTc6NDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19sbGMuYyBiL25ldC9zbWMvc21jX2xsYy5jXG5pbmRleCA5NTRiMmZmMTgxNWMyLi4zOTNhYTBhZjE4ZDFkIDEwMDY0NFxuLS0tIGEvbmV0L3NtYy9zbWNfbGxjLmNcbisrKyBiL25ldC9zbWMvc21jX2xsYy5jXG5AQCAtMTU3LDYgKzE1Nyw3IEBAIHN0cnVjdCBzbWNfbGxjX21zZ19jb25maXJtX3JrZXkge1x0LyogdHlwZSAweDA2ICovXG4gfTtcbiBcbiAjZGVmaW5lIFNNQ19MTENfREVMX1JLRVlfTUFYXHQ4XG4rI2RlZmluZSBTTUNfTExDX0RFTF9SS0VZX1YyX0lOTElORVx0OVxuICNkZWZpbmUgU01DX0xMQ19GTEFHX1JLRVlfUkVUUllcdDB4MTBcbiAjZGVmaW5lIFNNQ19MTENfRkxBR19SS0VZX05FR1x0MHgyMFxuIFxuQEAgLTE3Nyw2ICsxNzgsMTUgQEAgc3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyIHtcdC8qIHR5cGUgMHgyOSAqL1xuIFx0X19iZTMyIHJrZXlbXTtcbiB9O1xuIFxuKy8qIHRoZSBsZWFkaW5nIHJrZXlzIG9mIGEgREVMRVRFX1JLRVlfVjIgZml0IGludG8gdW5pb24gc21jX2xsY19tc2cgKi9cbitzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXlfdjJfaW5saW5lIHtcdC8qIHR5cGUgMHgyOSAqL1xuK1x0c3RydWN0IHNtY19sbGNfaGRyIGhkO1xuK1x0dTggbnVtX3JrZXlzO1xuK1x0dTggbnVtX2ludmFsX3JrZXlzO1xuK1x0dTggcmVzZXJ2ZWRbMl07XG4rXHRfX2JlMzIgcmtleVtTTUNfTExDX0RFTF9SS0VZX1YyX0lOTElORV07XG4rfTtcbitcbiB1bmlvbiBzbWNfbGxjX21zZyB7XG4gXHRzdHJ1Y3Qgc21jX2xsY19tc2dfY29uZmlybV9saW5rIGNvbmZpcm1fbGluaztcbiBcdHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGluayBhZGRfbGluaztcbkBAIC0xODYsNiArMTk2LDcgQEAgdW5pb24gc21jX2xsY19tc2cge1xuIFxuIFx0c3RydWN0IHNtY19sbGNfbXNnX2NvbmZpcm1fcmtleSBjb25maXJtX3JrZXk7XG4gXHRzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXkgZGVsZXRlX3JrZXk7XG4rXHRzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXlfdjJfaW5saW5lIGRlbGV0ZV9ya2V5X3YyO1xuIFxuIFx0c3RydWN0IHNtY19sbGNfbXNnX3Rlc3RfbGluayB0ZXN0X2xpbms7XG4gXHRzdHJ1Y3Qge1xuQEAgLTE5NCwxNSArMjA1LDI1IEBAIHVuaW9uIHNtY19sbGNfbXNnIHtcbiBcdH0gcmF3O1xuIH07XG4gXG4rc3RhdGljX2Fzc2VydChTTUNfTExDX0RFTF9SS0VZX1YyX0lOTElORSA9PVxuK1x0ICAgICAgKHNpemVvZih1bmlvbiBzbWNfbGxjX21zZykgLVxuK1x0ICAgICAgIG9mZnNldG9mKHN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92MiwgcmtleSkpIC9cbitcdCAgICAgIHNpemVvZihfX2JlMzIpKTtcbitzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKHN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92Ml9pbmxpbmUsIHJrZXkpID09XG4rXHQgICAgICBvZmZzZXRvZihzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXlfdjIsIHJrZXkpKTtcbitcbiAjZGVmaW5lIFNNQ19MTENfRkxBR19SRVNQXHRcdDB4ODBcbiBcbiBzdHJ1Y3Qgc21jX2xsY19xZW50cnkge1xuIFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuIFx0c3RydWN0IHNtY19saW5rICpsaW5rO1xuK1x0dTE2IGJvZHlfbGVuO1xuIFx0dW5pb24gc21jX2xsY19tc2cgbXNnO1xuK1x0dTggYm9keVtdIF9fY291bnRlZF9ieShib2R5X2xlbik7XG4gfTtcbiBcbi1zdGF0aWMgdm9pZCBzbWNfbGxjX2VucXVldWUoc3RydWN0IHNtY19saW5rICpsaW5rLCB1bmlvbiBzbWNfbGxjX21zZyAqbGxjKTtcbitzdGF0aWMgdm9pZCBzbWNfbGxjX2VucXVldWUoc3RydWN0IHNtY19saW5rICpsaW5rLCB1bmlvbiBzbWNfbGxjX21zZyAqbGxjLFxuK1x0XHRcdCAgICB1MzIgYnl0ZV9sZW4pO1xuIFxuIHN0cnVjdCBzbWNfbGxjX3FlbnRyeSAqc21jX2xsY19mbG93X3FlbnRyeV9jbHIoc3RydWN0IHNtY19sbGNfZmxvdyAqZmxvdylcbiB7XG5AQCAtOTk4LDE1ICsxMDE5LDIwIEBAIHN0YXRpYyBpbnQgc21jX2xsY19jbGlfY29uZl9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluayxcbiBcbiBzdGF0aWMgdm9pZCBzbWNfbGxjX3NhdmVfYWRkX2xpbmtfcmtleXMoc3RydWN0IHNtY19saW5rICpsaW5rLFxuIFx0XHRcdFx0XHRzdHJ1Y3Qgc21jX2xpbmsgKmxpbmtfbmV3LFxuLVx0XHRcdFx0XHR1OCAqbGxjX21zZylcbitcdFx0XHRcdFx0c3RydWN0IHNtY19sbGNfcWVudHJ5ICpxZW50cnkpXG4ge1xuK1x0Y29uc3QgdTMyIHJ0X29mZiA9IG9mZnNldG9mKHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua192Ml9leHQsIHJ0KTtcbiBcdHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua192Ml9leHQgKmV4dDtcbiBcdHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyID0gbGluay1cdTAwM2VsZ3I7XG4gXHRpbnQgbWF4LCBpO1xuIFxuLVx0ZXh0ID0gKHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua192Ml9leHQgKikobGxjX21zZyArXG4tXHRcdFx0XHRcdFx0ICAgICBTTUNfV1JfVFhfU0laRSk7XG4rXHQvKiB0aGUgcmtleSBjb3VudCBpdHNlbGYgaXMgb25seSB0aGVyZSBpZiBlbm91Z2ggYnl0ZXMgYXJyaXZlZCAqL1xuK1x0aWYgKHFlbnRyeS1cdTAwM2Vib2R5X2xlbiBcdTAwM2MgcnRfb2ZmKVxuK1x0XHRyZXR1cm47XG4rXHRleHQgPSAoc3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rX3YyX2V4dCAqKXFlbnRyeS1cdTAwM2Vib2R5O1xuIFx0bWF4ID0gbWluX3QodTgsIGV4dC1cdTAwM2VudW1fcmtleXMsIFNNQ19MTENfUktFWVNfUEVSX01TR19WMik7XG4rXHRtYXggPSBtaW5fdCh1MzIsIG1heCwgKHFlbnRyeS1cdTAwM2Vib2R5X2xlbiAtIHJ0X29mZikgL1xuK1x0XHRcdCAgICAgIHNpemVvZihleHQtXHUwMDNlcnRbMF0pKTtcbiBcdGRvd25fd3JpdGUoXHUwMDI2bGdyLVx1MDAzZXJtYnNfbG9jayk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtYXg7IGkrKykge1xuIFx0XHRzbWNfcnRva2VuX3NldChsZ3IsIGxpbmstXHUwMDNlbGlua19pZHgsIGxpbmtfbmV3LVx1MDAzZWxpbmtfaWR4LFxuQEAgLTEwOTksOSArMTEyNSw3IEBAIGludCBzbWNfbGxjX2NsaV9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHN0cnVjdCBzbWNfbGxjX3FlbnRyeSAqcWVudHJ5KVxuIFx0aWYgKHJjKVxuIFx0XHRnb3RvIG91dF9jbGVhcl9sbms7XG4gXHRpZiAobGdyLVx1MDAzZXNtY192ZXJzaW9uID09IFNNQ19WMikge1xuLVx0XHR1OCAqbGxjX21zZyA9IHNtY19saW5rX3NoYXJlZF92Ml9yeGJ1ZihsaW5rKSA/XG4tXHRcdFx0KHU4ICopbGdyLVx1MDAzZXdyX3J4X2J1Zl92MiA6ICh1OCAqKWxsYztcbi1cdFx0c21jX2xsY19zYXZlX2FkZF9saW5rX3JrZXlzKGxpbmssIGxua19uZXcsIGxsY19tc2cpO1xuK1x0XHRzbWNfbGxjX3NhdmVfYWRkX2xpbmtfcmtleXMobGluaywgbG5rX25ldywgcWVudHJ5KTtcbiBcdH0gZWxzZSB7XG4gXHRcdHJjID0gc21jX2xsY19jbGlfcmtleV9leGNoYW5nZShsaW5rLCBsbmtfbmV3KTtcbiBcdFx0aWYgKHJjKSB7XG5AQCAtMTQ4MSw3ICsxNTA1LDcgQEAgaW50IHNtY19sbGNfc3J2X2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluayxcbiBcdH1cbiBcdGFkZF9sbGMgPSBcdTAwMjZxZW50cnktXHUwMDNlbXNnLmFkZF9saW5rO1xuIFx0aWYgKGFkZF9sbGMtXHUwMDNlaGQuZmxhZ3MgXHUwMDI2IFNNQ19MTENfRkxBR19BRERfTE5LX1JFSikge1xuLVx0XHRzbWNfbGxjX2Zsb3dfcWVudHJ5X2RlbChcdTAwMjZsZ3ItXHUwMDNlbGxjX2Zsb3dfbGNsKTtcbitcdFx0c21jX2xsY19mbG93X3FlbnRyeV9jbHIoXHUwMDI2bGdyLVx1MDAzZWxsY19mbG93X2xjbCk7XG4gXHRcdHJjID0gLUVOT0xJTks7XG4gXHRcdGdvdG8gb3V0X2VycjtcbiBcdH1cbkBAIC0xNDkyLDcgKzE1MTYsOCBAQCBpbnQgc21jX2xsY19zcnZfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLFxuIFx0XHRsZ3JfbmV3X3QgPSBTTUNfTEdSX0FTWU1NRVRSSUNfUEVFUjtcbiBcdH1cbiBcdHNtY19sbGNfc2F2ZV9hZGRfbGlua19pbmZvKGxpbmtfbmV3LCBhZGRfbGxjKTtcbi1cdHNtY19sbGNfZmxvd19xZW50cnlfZGVsKFx1MDAyNmxnci1cdTAwM2VsbGNfZmxvd19sY2wpO1xuK1x0LyogYWRkX2xsYyBzdGlsbCBwb2ludHMgaW50byBxZW50cnksIHNvIG9ubHkgZGV0YWNoIGl0IGhlcmUgKi9cbitcdHNtY19sbGNfZmxvd19xZW50cnlfY2xyKFx1MDAyNmxnci1cdTAwM2VsbGNfZmxvd19sY2wpO1xuIFxuIFx0cmMgPSBzbWNfaWJfcmVhZHlfbGluayhsaW5rX25ldyk7XG4gXHRpZiAocmMpXG5AQCAtMTUwMSw5ICsxNTI2LDcgQEAgaW50IHNtY19sbGNfc3J2X2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluayxcbiBcdGlmIChyYylcbiBcdFx0Z290byBvdXRfZXJyO1xuIFx0aWYgKGxnci1cdTAwM2VzbWNfdmVyc2lvbiA9PSBTTUNfVjIpIHtcbi1cdFx0dTggKmxsY19tc2cgPSBzbWNfbGlua19zaGFyZWRfdjJfcnhidWYobGluaykgP1xuLVx0XHRcdCh1OCAqKWxnci1cdTAwM2V3cl9yeF9idWZfdjIgOiAodTggKilhZGRfbGxjO1xuLVx0XHRzbWNfbGxjX3NhdmVfYWRkX2xpbmtfcmtleXMobGluaywgbGlua19uZXcsIGxsY19tc2cpO1xuK1x0XHRzbWNfbGxjX3NhdmVfYWRkX2xpbmtfcmtleXMobGluaywgbGlua19uZXcsIHFlbnRyeSk7XG4gXHR9IGVsc2Uge1xuIFx0XHRyYyA9IHNtY19sbGNfc3J2X3JrZXlfZXhjaGFuZ2UobGluaywgbGlua19uZXcpO1xuIFx0XHRpZiAocmMpXG5AQCAtMTUxMiwxNCArMTUzNSwxNCBAQCBpbnQgc21jX2xsY19zcnZfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLFxuIFx0cmMgPSBzbWNfbGxjX3Nydl9jb25mX2xpbmsobGluaywgbGlua19uZXcsIGxncl9uZXdfdCk7XG4gXHRpZiAocmMpXG4gXHRcdGdvdG8gb3V0X2Vycjtcbi1cdGtmcmVlKGluaSk7XG4tXHRyZXR1cm4gMDtcbitcdGdvdG8gb3V0O1xuIG91dF9lcnI6XG4gXHRpZiAobGlua19uZXcpIHtcbiBcdFx0bGlua19uZXctXHUwMDNlc3RhdGUgPSBTTUNfTE5LX0lOQUNUSVZFO1xuIFx0XHRzbWNyX2xpbmtfY2xlYXIobGlua19uZXcsIGZhbHNlKTtcbiBcdH1cbiBvdXQ6XG4rXHRrZnJlZShxZW50cnkpO1xuIFx0a2ZyZWUoaW5pKTtcbiBcdGlmIChzZW5kX3JlcV9hZGRfbGlua19yZXNwKVxuIFx0XHRzbWNfbGxjX3NlbmRfcmVxX2FkZF9saW5rX3Jlc3BvbnNlKHJlcV9xZW50cnkpO1xuQEAgLTE1NTIsNyArMTU3NSw4IEBAIHZvaWQgc21jX2xsY19hZGRfbGlua19sb2NhbChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmspXG4gXHRhZGRfbGxjLmhkLmNvbW1vbi5sbGNfdHlwZSA9IFNNQ19MTENfQUREX0xJTks7XG4gXHRzbWNfbGxjX2luaXRfbXNnX2hkcihcdTAwMjZhZGRfbGxjLmhkLCBsaW5rLVx1MDAzZWxnciwgc2l6ZW9mKGFkZF9sbGMpKTtcbiBcdC8qIG5vIGRldiBhbmQgcG9ydCBuZWVkZWQgKi9cbi1cdHNtY19sbGNfZW5xdWV1ZShsaW5rLCAodW5pb24gc21jX2xsY19tc2cgKilcdTAwMjZhZGRfbGxjKTtcbitcdHNtY19sbGNfZW5xdWV1ZShsaW5rLCAodW5pb24gc21jX2xsY19tc2cgKilcdTAwMjZhZGRfbGxjLFxuK1x0XHRcdHNpemVvZih1bmlvbiBzbWNfbGxjX21zZykpO1xuIH1cbiBcbiAvKiB3b3JrZXIgdG8gcHJvY2VzcyBhbiBhZGQgbGluayBtZXNzYWdlICovXG5AQCAtMTU4OCw3ICsxNjEyLDggQEAgdm9pZCBzbWNfbGxjX3Nydl9kZWxldGVfbGlua19sb2NhbChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHU4IGRlbF9saW5rX2lkKVxuIFx0ZGVsX2xsYy5saW5rX251bSA9IGRlbF9saW5rX2lkO1xuIFx0ZGVsX2xsYy5yZWFzb24gPSBodG9ubChTTUNfTExDX0RFTF9MT1NUX1BBVEgpO1xuIFx0ZGVsX2xsYy5oZC5mbGFncyB8PSBTTUNfTExDX0ZMQUdfREVMX0xJTktfT1JERVJMWTtcbi1cdHNtY19sbGNfZW5xdWV1ZShsaW5rLCAodW5pb24gc21jX2xsY19tc2cgKilcdTAwMjZkZWxfbGxjKTtcbitcdHNtY19sbGNfZW5xdWV1ZShsaW5rLCAodW5pb24gc21jX2xsY19tc2cgKilcdTAwMjZkZWxfbGxjLFxuK1x0XHRcdHNpemVvZih1bmlvbiBzbWNfbGxjX21zZykpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBzbWNfbGxjX3Byb2Nlc3NfY2xpX2RlbGV0ZV9saW5rKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyKVxuQEAgLTE4MTAsMTkgKzE4MzUsMjggQEAgc3RhdGljIHZvaWQgc21jX2xsY19ybXRfZGVsZXRlX3JrZXkoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IpXG4gXHRsaW5rID0gcWVudHJ5LVx1MDAzZWxpbms7XG4gXG4gXHRpZiAobGdyLVx1MDAzZXNtY192ZXJzaW9uID09IFNNQ19WMikge1xuLVx0XHRzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXlfdjIgKmxsY3YyO1xuK1x0XHRzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXlfdjJfaW5saW5lICpsbGN2MjtcbiBcbi1cdFx0aWYgKHNtY19saW5rX3NoYXJlZF92Ml9yeGJ1ZihsaW5rKSkge1xuLVx0XHRcdG1lbWNweShsZ3ItXHUwMDNld3JfcnhfYnVmX3YyLCBsbGMsIHNpemVvZigqbGxjKSk7XG4tXHRcdFx0bGxjdjIgPSAoc3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyICopbGdyLVx1MDAzZXdyX3J4X2J1Zl92Mjtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRsbGN2MiA9IChzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXlfdjIgKilsbGM7XG4tXHRcdH1cbitcdFx0LyogVGhlIGxlYWRpbmcgU01DX0xMQ19ERUxfUktFWV9WMl9JTkxJTkUgcmtleXMgYXJlIGRlY2xhcmVkIGluXG4rXHRcdCAqIHRoZSBtZXNzYWdlIGl0c2VsZiwgYW55IGZ1cnRoZXIgb25lcyB3ZXJlIHJlY2VpdmVkIGludG9cbitcdFx0ICogcWVudHJ5LVx1MDAzZWJvZHkuXG4rXHRcdCAqL1xuK1x0XHRsbGN2MiA9IFx1MDAyNnFlbnRyeS1cdTAwM2Vtc2cuZGVsZXRlX3JrZXlfdjI7XG4gXHRcdGxsY3YyLVx1MDAzZW51bV9pbnZhbF9ya2V5cyA9IDA7XG4gXG4gXHRcdG1heCA9IG1pbl90KHU4LCBsbGN2Mi1cdTAwM2VudW1fcmtleXMsIFNNQ19MTENfUktFWVNfUEVSX01TR19WMik7XG4rXHRcdG1heCA9IG1pbl90KHUzMiwgbWF4LCBTTUNfTExDX0RFTF9SS0VZX1YyX0lOTElORSArXG4rXHRcdFx0XHQgICAgICBxZW50cnktXHUwMDNlYm9keV9sZW4gLyBzaXplb2YoX19iZTMyKSk7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG1heDsgaSsrKSB7XG4tXHRcdFx0aWYgKHNtY19ydG9rZW5fZGVsZXRlKGxpbmssIGxsY3YyLVx1MDAzZXJrZXlbaV0pKVxuK1x0XHRcdF9fYmUzMiBya2V5O1xuK1xuK1x0XHRcdGlmIChpIFx1MDAzYyBTTUNfTExDX0RFTF9SS0VZX1YyX0lOTElORSlcbitcdFx0XHRcdHJrZXkgPSBsbGN2Mi1cdTAwM2Vya2V5W2ldO1xuK1x0XHRcdGVsc2VcbitcdFx0XHRcdG1lbWNweShcdTAwMjZya2V5LCBxZW50cnktXHUwMDNlYm9keSArXG4rXHRcdFx0XHRcdCAgICAgIChpIC0gU01DX0xMQ19ERUxfUktFWV9WMl9JTkxJTkUpICpcbitcdFx0XHRcdFx0ICAgICAgc2l6ZW9mKHJrZXkpLCBzaXplb2YocmtleSkpO1xuK1x0XHRcdGlmIChzbWNfcnRva2VuX2RlbGV0ZShsaW5rLCBya2V5KSlcbiBcdFx0XHRcdGxsY3YyLVx1MDAzZW51bV9pbnZhbF9ya2V5cysrO1xuIFx0XHR9XG4gXHRcdG1lbXNldChcdTAwMjZsbGMtXHUwMDNlcmtleVswXSwgMCwgc2l6ZW9mKGxsYy1cdTAwM2Vya2V5KSk7XG5AQCAtMjA2MywxOCArMjA5Nyw1MiBAQCBzdGF0aWMgdm9pZCBzbWNfbGxjX3J4X3Jlc3BvbnNlKHN0cnVjdCBzbWNfbGluayAqbGluayxcbiBcdHdha2VfdXAoXHUwMDI2bGluay1cdTAwM2VsZ3ItXHUwMDNlbGxjX21zZ193YWl0ZXIpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBzbWNfbGxjX2VucXVldWUoc3RydWN0IHNtY19saW5rICpsaW5rLCB1bmlvbiBzbWNfbGxjX21zZyAqbGxjKVxuKy8qIHRoZSBsb25nZXN0IHRhaWwgZWl0aGVyIHJlYWRlciBvZiBxZW50cnktXHUwMDNlYm9keSBjYW4gdXNlICovXG4rc3RhdGljIHUzMiBzbWNfbGxjX21heF9ib2R5X2xlbih1bmlvbiBzbWNfbGxjX21zZyAqbGxjKVxuK3tcbitcdHN3aXRjaCAobGxjLVx1MDAzZXJhdy5oZHIuY29tbW9uLmxsY190eXBlKSB7XG4rXHRjYXNlIFNNQ19MTENfQUREX0xJTks6XG4rXHRcdHJldHVybiBvZmZzZXRvZihzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfdjJfZXh0LCBydCkgK1xuK1x0XHQgICAgICAgU01DX0xMQ19SS0VZU19QRVJfTVNHX1YyICpcbitcdFx0ICAgICAgIHNpemVvZihzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfY29udF9ydCk7XG4rXHRjYXNlIFNNQ19MTENfREVMRVRFX1JLRVk6XG4rXHRcdHJldHVybiAoU01DX0xMQ19SS0VZU19QRVJfTVNHX1YyIC1cbitcdFx0XHRTTUNfTExDX0RFTF9SS0VZX1YyX0lOTElORSkgKiBzaXplb2YoX19iZTMyKTtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBzbWNfbGxjX2VucXVldWUoc3RydWN0IHNtY19saW5rICpsaW5rLCB1bmlvbiBzbWNfbGxjX21zZyAqbGxjLFxuK1x0XHRcdCAgICB1MzIgYnl0ZV9sZW4pXG4ge1xuIFx0c3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IgPSBsaW5rLVx1MDAzZWxncjtcbiBcdHN0cnVjdCBzbWNfbGxjX3FlbnRyeSAqcWVudHJ5O1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdHUxNiBib2R5X2xlbiA9IDA7XG4rXG4rXHQvKiBWMiBtZXNzYWdlcyBjYW4gYmUgbG9uZ2VyIHRoYW4gdGhlIGlubGluZSB1bmlvbiBzbWNfbGxjX21zZy4gQ2FycnlcbitcdCAqIHRoZSByZW1haW5kZXIgaW4gdGhlIHFlbnRyeSBpdHNlbGYsIHNvIHRoYXQgaXRzIGxpZmV0aW1lIGFuZCBpdHNcbitcdCAqIGxlbmd0aCBtYXRjaCB0aGUgbWVzc2FnZSB0aGUgcGVlciBhY3R1YWxseSBzZW50LlxuK1x0ICovXG4rXHRpZiAobGdyLVx1MDAzZXNtY192ZXJzaW9uID09IFNNQ19WMiBcdTAwMjZcdTAwMjYgYnl0ZV9sZW4gXHUwMDNlIFNNQ19XUl9UWF9TSVpFKVxuK1x0XHRib2R5X2xlbiA9IG1pbl90KHUzMiwgYnl0ZV9sZW4sIFNNQ19XUl9CVUZfVjJfU0laRSkgLVxuK1x0XHRcdCAgIFNNQ19XUl9UWF9TSVpFO1xuK1x0Ym9keV9sZW4gPSBtaW5fdCh1MzIsIGJvZHlfbGVuLCBzbWNfbGxjX21heF9ib2R5X2xlbihsbGMpKTtcbiBcbi1cdHFlbnRyeSA9IGttYWxsb2Nfb2JqKCpxZW50cnksIEdGUF9BVE9NSUMpO1xuK1x0cWVudHJ5ID0ga21hbGxvY19mbGV4KCpxZW50cnksIGJvZHksIGJvZHlfbGVuLCBHRlBfQVRPTUlDKTtcbiBcdGlmICghcWVudHJ5KVxuIFx0XHRyZXR1cm47XG4rXHRxZW50cnktXHUwMDNlYm9keV9sZW4gPSBib2R5X2xlbjtcbiBcdHFlbnRyeS1cdTAwM2VsaW5rID0gbGluaztcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnFlbnRyeS1cdTAwM2VsaXN0KTtcbiBcdG1lbWNweShcdTAwMjZxZW50cnktXHUwMDNlbXNnLCBsbGMsIHNpemVvZih1bmlvbiBzbWNfbGxjX21zZykpO1xuK1x0aWYgKGJvZHlfbGVuKSB7XG4rXHRcdHU4ICpzcmMgPSBzbWNfbGlua19zaGFyZWRfdjJfcnhidWYobGluaykgP1xuK1x0XHRcdCh1OCAqKWxnci1cdTAwM2V3cl9yeF9idWZfdjIgOiAodTggKilsbGM7XG4rXG4rXHRcdG1lbWNweShxZW50cnktXHUwMDNlYm9keSwgc3JjICsgU01DX1dSX1RYX1NJWkUsIGJvZHlfbGVuKTtcbitcdH1cbiBcbiBcdC8qIHByb2Nlc3MgcmVzcG9uc2VzIGltbWVkaWF0ZWx5ICovXG4gXHRpZiAoKGxsYy1cdTAwM2VyYXcuaGRyLmZsYWdzIFx1MDAyNiBTTUNfTExDX0ZMQUdfUkVTUCkgXHUwMDI2XHUwMDI2XG5AQCAtMjEwNiw3ICsyMTc0LDcgQEAgc3RhdGljIHZvaWQgc21jX2xsY19yeF9oYW5kbGVyKHN0cnVjdCBpYl93YyAqd2MsIHZvaWQgKmJ1ZilcbiBcdFx0XHRyZXR1cm47IC8qIGludmFsaWQgbWVzc2FnZSAqL1xuIFx0fVxuIFxuLVx0c21jX2xsY19lbnF1ZXVlKGxpbmssIGxsYyk7XG4rXHRzbWNfbGxjX2VucXVldWUobGluaywgbGxjLCB3Yy1cdTAwM2VieXRlX2xlbik7XG4gfVxuIFxuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiB3b3JrZXIsIHV0aWxzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY193ci5jIGIvbmV0L3NtYy9zbWNfd3IuY1xuaW5kZXggNTljOTJiNDY5NDVjNS4uOTdiYTQ2ODkzYjE3ZiAxMDA2NDRcbi0tLSBhL25ldC9zbWMvc21jX3dyLmNcbisrKyBiL25ldC9zbWMvc21jX3dyLmNcbkBAIC02MDIsOSArNjAyLDkgQEAgc3RhdGljIHZvaWQgc21jX3dyX2luaXRfc2dlKHN0cnVjdCBzbWNfbGluayAqbG5rKVxuIFxuIFx0LyogV2l0aCBTTUMtUnYyIHRoZXJlIGNhbiBiZSBtZXNzYWdlcyBsYXJnZXIgdGhhbiBTTUNfV1JfVFhfU0laRS5cbiBcdCAqIEVhY2ggaWJfcmVjdl93ciBnZXRzIDIgc2dlcywgdGhlIHNlY29uZCBvbmUgaXMgYSBzcGlsbG92ZXIgYnVmZmVyXG4tXHQgKiBhbmQgdGhlIHNhbWUgYnVmZmVyIGZvciBhbGwgc2dlcy4gV2hlbiBhIGxhcmdlciBtZXNzYWdlIGFycml2ZWQgdGhlblxuLVx0ICogdGhlIGNvbnRlbnQgb2YgdGhlIGZpcnN0IHNtYWxsIHNnZSBpcyBjb3BpZWQgdG8gdGhlIGJlZ2lubmluZyBvZlxuLVx0ICogdGhlIGxhcmdlciBzcGlsbG92ZXIgYnVmZmVyLCBhbGxvd2luZyBlYXN5IGRhdGEgbWFwcGluZy5cbitcdCAqIGFuZCB0aGUgc2FtZSBidWZmZXIgZm9yIGFsbCBzZ2VzLiBUaGUgc3BpbGxvdmVyIHNnZSBzdGFydHMgYXRcbitcdCAqIFNNQ19XUl9UWF9TSVpFLCBzbyB0aGUgbGVhZGluZyBieXRlcyBvZiB0aGF0IGJ1ZmZlciBhcmUgbmV2ZXJcbitcdCAqIHdyaXR0ZW4uXG4gXHQgKi9cbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxuay1cdTAwM2V3cl9yeF9jbnQ7IGkrKykge1xuIFx0XHRpbnQgeCA9IGkgKiBsbmstXHUwMDNld3Jfcnhfc2dlX2NudDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAyOjU3OjQ3LjY0MjkzMjQ1NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMjk4NTQ2NzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU01DIExMQyBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBgbmV0L3NtYy9zbWNfbGxjLmNgIGFuZCBgbmV0L3NtYy9zbWNfd3IuY2AgZmlsZXMuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYWJvdXQgaGFuZGxpbmcgbGFyZ2VyIFNNQy1SdjIgbWVzc2FnZXMsIHNwZWNpZmljYWxseSB0aG9zZSBleGNlZWRpbmcgYFNNQ19XUl9UWF9TSVpFYC4gSXQncyBpbnRyb2R1Y2luZyBhIG5ldyBzdHJ1Y3QsIGBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92Ml9pbmxpbmVgLCBhbmQgbW9kaWZ5aW5nIGBzbWNfbGxjX2VucXVldWVgIHRvIGhhbmRsZSBsYXJnZXIgbWVzc2FnZXMgYnkgZHluYW1pY2FsbHkgYWxsb2NhdGluZyBhIGBzdHJ1Y3Qgc21jX2xsY19xZW50cnlgIHdpdGggYSBmbGV4aWJsZSBhcnJheSBtZW1iZXIsIGBib2R5W11gLCB0byBhY2NvbW1vZGF0ZSB0aGUgb3ZlcmZsb3cgZGF0YS4gVGhpcyBpcyBpbnRlcmVzdGluZywgaXQgbGlrZWx5IGRlYWxzIHdpdGggdGhlIGBBRERfTElOS2AgYW5kIGBERUxFVEVfUktFWV9WMmAgbWVzc2FnZXMsIHdoaWNoIGFyZSBjYW5kaWRhdGVzIGZvciBzaXplLXJlbGF0ZWQgYnVncy5cblxuRmlyc3QsIGxldCdzIGVzdGFibGlzaCBpZiB0aGlzIGlzIGV2ZW4gZnV6emFibGUgYW5kIHdvcnRoIHRoZSBlZmZvcnQuIFNNQyBpcyBhIG5ldHdvcmsgcHJvdG9jb2wsIHNvIGl0J3MgdW5kZXIgdGhlIGBBRl9TTUNgIGZhbWlseS4gR29vZC4gV2UgY2FuIGFic29sdXRlbHkgdGVzdCB0aGlzLCBlaXRoZXIgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gV2UgaGF2ZSBsb29wYmFjaywgZHVtbXkgZGV2aWNlcywgb3IgZXZlbiB2ZXRoIGNhbiBiZSB1c2VkLiBTTUMtRCBpcyByZWxhdGVkIHRvIElTTSwgd2hpY2ggY2FuIGJlIGhhbmRsZWQgYnkgYHNtY19sb29wYmFja2AuIFNNQy1SIHVzZXMgUkRNQSwgd2hpY2ggY2FuIGJlIGVtdWxhdGVkIHVzaW5nIGByZG1hX3J4ZWAgb3IgYHNpd2AuIFRoYXQgY29uZmlybXMgaXQsIHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgd2UgY2FuIHRhcmdldCB3aXRoIHN5emthbGxlci5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvdXIgZnV6emluZyBlZmZvcnRzLiBUaGUgcGF0Y2ggdG91Y2hlcyBhIGZldyBrZXkgZnVuY3Rpb25zOlxuLSAgIGBzbWNfbGxjX2VucXVldWVgIChhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggb2Z0ZW4gaXMgYSBoZWFkYWNoZSwgYnV0IGxldCdzIHNlZSBob3cgaXQncyB1c2VkKVxuLSAgIGBzbWNfbGxjX3J4X2hhbmRsZXJgIChhbm90aGVyIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgYSBjYWxsYmFjayBmb3IgUkRNQSByZWNlaXZlLiBJdCBpcyBhbiBlbnRyeSBwb2ludCwgYW5kIGlzIGEgc3Ryb25nIGNhbmRpZGF0ZSlcbi0gICBgc21jX2xsY19jbGlfYWRkX2xpbmtgXG4tICAgYHNtY19sbGNfc3J2X2FkZF9saW5rYFxuLSAgIGBzbWNfbGxjX2FkZF9saW5rX2xvY2FsYFxuLSAgIGBzbWNfbGxjX3Nydl9kZWxldGVfbGlua19sb2NhbGBcbi0gICBgc21jX2xsY19ybXRfZGVsZXRlX3JrZXlgIChzdGF0aWMgYXMgd2VsbClcbi0gICBgc21jX2xsY19yeF9yZXNwb25zZWAgKGFub3RoZXIgc3RhdGljLCB3ZSdsbCBzZWUgaG93IGl0IGZpdHMpXG5cbkxldCdzIHByaW9yaXRpemUgdGhvc2UgbGFzdCB0d28uIGBzbWNfbGxjX2NsaV9hZGRfbGlua2AgYW5kIGBzbWNfbGxjX3Nydl9hZGRfbGlua2AgYXJlIGludGVyZXN0aW5nIGJlY2F1c2UgdGhleSBzZWVtIHRvIGJlIHRoZSBjbGllbnQgYW5kIHNlcnZlciBzaWRlLiBXZSdyZSBpbnRlcmVzdGVkIGluIHRoZSBzaXplLiAgYHNtY19sbGNfcnhfaGFuZGxlcmAgKnNob3VsZCogYmUgdGhlIGVudHJ5IHBvaW50IGZvciBoYW5kbGluZyBMTEMgbWVzc2FnZXMuIFRob3VnaCBpdCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIHF1ZXVlIGFuZCBuZXcgZHluYW1pYyBhbGxvY2F0aW9uIGlzIHRoZSBjb3JlIHBhcnQgb2YgdGhpcyBjaGFuZ2UuIElzIHRoZXJlIGFuIGV4cG9zZWQgZW50cnkgcG9pbnQgZm9yIHRoZSBzdGF0aWMgZnVuY3Rpb25zP1xuXG5MZXQgbWUgZG8gYSBxdWljayBzZWFyY2ggb24gdGhvc2UgYGNsaV9hZGRfbGlua2AgYW5kIGBzcnZfYWRkX2xpbmtgIGZ1bmN0aW9ucyB0byBzZWUgaG93IHRoZXkncmUgdXNlZC4gV2Ugd2lsbCBuZWVkIHRvIGludmVzdGlnYXRlIHRob3NlIHRvIGZpbmQgdGhlIGF0dGFjayBzdXJmYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTE0LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQ2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDI6NTc6NTcuOTQxNDgyNzk4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNjI5NjIxNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic21jX2xsY19jbGlfYWRkX2xpbmtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9hZl9zbWMuYz02MTg9c3RhdGljIGludCBzbWNyX2NsbnRfY29uZl9maXJzdF9saW5rKHN0cnVjdCBzbWNfc29jayAqc21jKVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy02ODQtXFx0XFx0c21jX2xsY19mbG93X3FlbnRyeV9jbHIoXFx1MDAyNmxpbmstXFx1MDAzZWxnci1cXHUwMDNlbGxjX2Zsb3dfbGNsKTtcXG5uZXQvc21jL2FmX3NtYy5jOjY4NTpcXHRcXHRzbWNfbGxjX2NsaV9hZGRfbGluayhsaW5rLCBxZW50cnkpO1xcbm5ldC9zbWMvYWZfc21jLmMtNjg2LVxcdH1cXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jPTkwOD1zdGF0aWMgaW50IHNtY19sbGNfY2xpX3JrZXlfZXhjaGFuZ2Uoc3RydWN0IHNtY19saW5rICpsaW5rLFxcbi0tXFxubmV0L3NtYy9zbWNfbGxjLmMtOTUxLS8qIHByZXBhcmUgYW5kIHNlbmQgYW4gYWRkIGxpbmsgcmVqZWN0IHJlc3BvbnNlICovXFxubmV0L3NtYy9zbWNfbGxjLmM6OTUyOnN0YXRpYyBpbnQgc21jX2xsY19jbGlfYWRkX2xpbmtfcmVqZWN0KHN0cnVjdCBzbWNfbGxjX3FlbnRyeSAqcWVudHJ5KVxcbm5ldC9zbWMvc21jX2xsYy5jLTk1My17XFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYz0xMDQ2PXN0YXRpYyB2b2lkIHNtY19sbGNfc2F2ZV9hZGRfbGlua19pbmZvKHN0cnVjdCBzbWNfbGluayAqbGluayxcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTEwNTYtLyogYXMgYW4gU01DIGNsaWVudCwgcHJvY2VzcyBhbiBhZGQgbGluayByZXF1ZXN0ICovXFxubmV0L3NtYy9zbWNfbGxjLmM6MTA1NzppbnQgc21jX2xsY19jbGlfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLCBzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnFlbnRyeSlcXG5uZXQvc21jL3NtY19sbGMuYy0xMDU4LXtcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTExNDItb3V0X3JlamVjdDpcXG5uZXQvc21jL3NtY19sbGMuYzoxMTQzOlxcdHNtY19sbGNfY2xpX2FkZF9saW5rX3JlamVjdChxZW50cnkpO1xcbm5ldC9zbWMvc21jX2xsYy5jLTExNDQtb3V0Olxcbi0tXFxubmV0L3NtYy9zbWNfbGxjLmM9MTE1MD1zdGF0aWMgdm9pZCBzbWNfbGxjX3NlbmRfcmVxdWVzdF9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmspXFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYy0xMTg4LS8qIGFzIGFuIFNNQyBjbGllbnQsIGludml0ZSBzZXJ2ZXIgdG8gc3RhcnQgdGhlIGFkZF9saW5rIHByb2Nlc3NpbmcgKi9cXG5uZXQvc21jL3NtY19sbGMuYzoxMTg5OnN0YXRpYyB2b2lkIHNtY19sbGNfY2xpX2FkZF9saW5rX2ludml0ZShzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXFxubmV0L3NtYy9zbWNfbGxjLmMtMTE5MC1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnFlbnRyeSlcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jPTEyNDE9c3RhdGljIHZvaWQgc21jX2xsY19wcm9jZXNzX2NsaV9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncilcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTEyNDgtXFx0aWYgKHNtY19sbGNfaXNfbG9jYWxfYWRkX2xpbmsoXFx1MDAyNnFlbnRyeS1cXHUwMDNlbXNnKSlcXG5uZXQvc21jL3NtY19sbGMuYzoxMjQ5OlxcdFxcdHNtY19sbGNfY2xpX2FkZF9saW5rX2ludml0ZShxZW50cnktXFx1MDAzZWxpbmssIHFlbnRyeSk7XFxubmV0L3NtYy9zbWNfbGxjLmMtMTI1MC1cXHRlbHNlXFxubmV0L3NtYy9zbWNfbGxjLmM6MTI1MTpcXHRcXHRzbWNfbGxjX2NsaV9hZGRfbGluayhxZW50cnktXFx1MDAzZWxpbmssIHFlbnRyeSk7XFxubmV0L3NtYy9zbWNfbGxjLmMtMTI1Mi1cXHR1cF93cml0ZShcXHUwMDI2bGdyLVxcdTAwM2VsbGNfY29uZl9tdXRleCk7XFxuLS1cXG5uZXQvc21jL3NtY19sbGMuaD0xMTI9dm9pZCBzbWNfbGxjX3NlbmRfbGlua19kZWxldGVfYWxsKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLCBib29sIG9yZCxcXG5uZXQvc21jL3NtY19sbGMuaC0xMTMtXFx0XFx0XFx0XFx0ICB1MzIgcnNuKTtcXG5uZXQvc21jL3NtY19sbGMuaDoxMTQ6aW50IHNtY19sbGNfY2xpX2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluaywgc3RydWN0IHNtY19sbGNfcWVudHJ5ICpxZW50cnkpO1xcbm5ldC9zbWMvc21jX2xsYy5oLTExNS1pbnQgc21jX2xsY19zcnZfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMjo1ODowMC4xMDQ0NTMxOTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjczMzE5MjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gYHNtY19sbGNfc3J2X2FkZF9saW5rYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIGl0LiBMZXQncyBkaWcgaW50byBgc21jX2xsY19zcnZfYWRkX2xpbmtgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiB0aGlzIGZ1bmN0aW9uIGFuZCBob3cgaXQgcmVsYXRlcyB0byB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIEknbSBnb2luZyB0byBxdWlja2x5IHJldmlldyBpdHMgaW1wbGVtZW50YXRpb24sIGZvY3VzaW5nIG9uIHRoZSBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYW5kIGxpbmsgY3JlYXRpb24gcHJvY2Vzcy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgaGVyZSwgYW5kIHdhbnQgdG8gY2hlY2sgaG93IHRoZSBzZXJ2ZXIgc2lkZSByZXNvdXJjZSBhbGxvY2F0aW9ucyBhcmUgbWFuYWdlZCB0byBhdm9pZCBhbnkgbGVha3Mgb3IgdW5leHBlY3RlZCByZXNvdXJjZSBleGhhdXN0aW9uLiBUaGlua2luZyBiYWNrLCBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgSSBzaG91bGQgYmUgb24gdGhlIGxvb2tvdXQgZm9yLCBwYXJ0aWN1bGFybHkgaW4gYSBtdWx0aS10aHJlYWRlZCBlbnZpcm9ubWVudD8gSSBhbHNvIG5lZWQgdG8gYXNzZXNzIHRoZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIGVzcGVjaWFsbHkgcmVsYXRlZCB0byBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyB0aGlzIGZ1bmN0aW9uIGludHJvZHVjZXMgdG8gb3VyIHN5c3RlbS4gU28sIGxldCdzIGdldCBzdGFydGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODU3LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDI6NTg6MDMuMzc3Nzc0Njk2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzA4OTk4NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic21jX2xsY19zcnZfYWRkX2xpbmtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9hZl9zbWMuYz0xODcyPXN0YXRpYyBpbnQgc21jcl9zZXJ2X2NvbmZfZmlyc3RfbGluayhzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMTkxNy1cXHRcXHQvKiBpbml0aWFsIGNvbnRhY3QgLSB0cnkgdG8gZXN0YWJsaXNoIHNlY29uZCBsaW5rICovXFxubmV0L3NtYy9hZl9zbWMuYzoxOTE4OlxcdFxcdHNtY19sbGNfc3J2X2FkZF9saW5rKGxpbmssIE5VTEwpO1xcbm5ldC9zbWMvYWZfc21jLmMtMTkxOS1cXHRcXHR1cF93cml0ZShcXHUwMDI2bGluay1cXHUwMDNlbGdyLVxcdTAwM2VsbGNfY29uZl9tdXRleCk7XFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYz0xNDIxPXN0YXRpYyB2b2lkIHNtY19sbGNfc2VuZF9yZXFfYWRkX2xpbmtfcmVzcG9uc2Uoc3RydWN0IHNtY19sbGNfcWVudHJ5ICpxZW50cnkpXFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYy0xNDI5LVxcbm5ldC9zbWMvc21jX2xsYy5jOjE0MzA6aW50IHNtY19sbGNfc3J2X2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluayxcXG5uZXQvc21jL3NtY19sbGMuYy0xNDMxLVxcdFxcdFxcdCBzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnJlcV9xZW50cnkpXFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYz0xNTUyPXN0YXRpYyB2b2lkIHNtY19sbGNfcHJvY2Vzc19zcnZfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IpXFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYy0xNTYwLVxcdGRvd25fd3JpdGUoXFx1MDAyNmxnci1cXHUwMDNlbGxjX2NvbmZfbXV0ZXgpO1xcbm5ldC9zbWMvc21jX2xsYy5jOjE1NjE6XFx0cmMgPSBzbWNfbGxjX3Nydl9hZGRfbGluayhsaW5rLCBxZW50cnkpO1xcbm5ldC9zbWMvc21jX2xsYy5jLTE1NjItXFx0aWYgKCFyYyBcXHUwMDI2XFx1MDAyNiBsZ3ItXFx1MDAzZXR5cGUgPT0gU01DX0xHUl9TWU1NRVRSSUMpIHtcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5oPTExND1pbnQgc21jX2xsY19jbGlfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLCBzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnFlbnRyeSk7XFxubmV0L3NtYy9zbWNfbGxjLmg6MTE1OmludCBzbWNfbGxjX3Nydl9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXFxubmV0L3NtYy9zbWNfbGxjLmgtMTE2LVxcdFxcdFxcdCBzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnJlcV9xZW50cnkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMjo1ODowNS4wNDg2Nzk4M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1MzMzMTI0OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRml4aW5nIHRoZSBTTUMgTExDIE1lc3NhZ2UgSGFuZGxpbmc6IEEgRGVlcCBEaXZlKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0YWNrbGluZyBhIHByZXR0eSBjcml0aWNhbCBidWcgd2l0aGluIHRoZSBTTUMgTExDIGxheWVyLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBzbWNfbGxjX2VucXVldWVgIGFuZCBgc21jX2xsY19zYXZlX2FkZF9saW5rX3JrZXlzYC4gSXQgc2VlbXMgd2UndmUgZ290IGFuIG92ZXJmbG93IGlzc3VlIHdpdGggbGFyZ2UgU01DLVJ2MiBtZXNzYWdlcywgcGFydGljdWxhcmx5IGBBRERfTElOS2AgYW5kIGBERUxFVEVfUktFWV9WMmAuIEJhc2ljYWxseSwgd2UncmUgcnVubmluZyBpbnRvIGJ1ZmZlciBsaW1pdGF0aW9ucyB3aXRoaW4gdGhlIGBzbWNfbGxjX3FlbnRyeWAgc3RydWN0LiBUaGUgZXhpc3RpbmcgYWxsb2NhdGlvbiBpcyBzaW1wbHkgdG9vIHNtYWxsIHRvIGhhbmRsZSB0aGUgbWVzc2FnZSBwYXlsb2FkLCB3aGljaCBjYW4gbGVhZCB0byBkYXRhIGNvcnJ1cHRpb24gb3Igb3V0cmlnaHQgZmFpbHVyZSB0byBwcm9jZXNzIHRoZXNlIGNvbW1hbmRzLlxuXG5UaGUgZ2VuaXVzIG9mIHRoaXMgZml4IGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBmbGV4aWJsZSBhcnJheSBtZW1iZXIsIGBib2R5W11gLCB3aXRoaW4gdGhlIGBzdHJ1Y3Qgc21jX2xsY19xZW50cnlgLiBUaGlzIGlzIHJlYWxseSBzbWFydDsgYnkgZHluYW1pY2FsbHkgYWxsb2NhdGluZyB0aGUgYnVmZmVyIGJhc2VkIG9uIHRoZSBhY3R1YWwgbWVzc2FnZSBzaXplLCB3ZSBndWFyYW50ZWUgdGhhdCB3ZeKAmXZlIGdvdCBlbm91Z2ggc3BhY2UgdG8gd29yayB3aXRoLCB3aGljaCBwcmV2ZW50cyB0aG9zZSBvdmVyZmxvd3MuXG5cblRoaXMgaXMgYSBwcmV0dHkgZnVuZGFtZW50YWwgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0J3MgdG91Y2hpbmcgdGhlIGNvcmUgb2YgdGhlIExMQyBwcm9jZXNzaW5nIGxvZ2ljLiBUaGUgY29kZSBpcyBnZXR0aW5nIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHNvIGl0J3MgZGVmaW5pdGVseSB3b3J0aCBzb21lIHNlcmlvdXMgZnV6emluZy5cblxuTXkgcHJpbWFyeSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOiBgc21jX2xsY19jbGlfYWRkX2xpbmtgLCBgc21jX2xsY19zcnZfYWRkX2xpbmtgLCBgc21jX2xsY19hZGRfbGlua19sb2NhbGAsIGFuZCBgc21jX2xsY19zcnZfZGVsZXRlX2xpbmtfbG9jYWxgLiBUaGVzZSBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHMgZm9yIHRoZSBwcm9ibGVtYXRpYyBjb21tYW5kcy4gSeKAmWxsIG1ha2Ugc3VyZSB0byBleHBsb3JlIGFsbCBwYXRocyB3aXRoaW4gdGhlc2UgZnVuY3Rpb25zLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgd2F5IHRoZSBuZXcgYGJvZHlbXWAgbWVtYmVyIGlzIHVzZWQgYW5kIGVuc3VyZSB0aGVyZSBhcmUgbm8gb2ZmLWJ5LW9uZSBlcnJvcnMgb3Igb3RoZXIgdnVsbmVyYWJpbGl0aWVzIGludHJvZHVjZWQgYnkgdGhlIGR5bmFtaWMgYWxsb2NhdGlvbi5cblxuTm93LCBsZXQncyBnbyBiYWNrIGFuZCBkb3VibGUgY2hlY2sgdGhlIFNNQyBjb25maWd1cmF0aW9uIG9wdGlvbnMsIG1ha2luZyBzdXJlIHdlIGhhdmVuJ3QgaW5hZHZlcnRlbnRseSBicm9rZW4gYW55IGV4aXN0aW5nIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjkwLCJPdXRwdXRUb2tlbnMiOjE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAyOjU4OjEwLjU4MTk5NDQ3NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY4OTY2NDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTTUNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvS2NvbmZpZz0xNDY9Y29uZmlnIEkyQ19TUElfU01DMV9VQ09ERV9QQVRDSFxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvS2NvbmZpZy0xNTAtXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvS2NvbmZpZzoxNTE6Y29uZmlnIFNNQ19VQ09ERV9QQVRDSFxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L0tjb25maWctMTUyLVxcdGJvb2wgXFxcIlNNQyByZWxvY2F0aW9uIHBhdGNoXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9LY29uZmlnPTIwPWlmIE5FVF9WRU5ET1JfU01TQ1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2MvS2NvbmZpZy0yMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL0tjb25maWc6MjI6Y29uZmlnIFNNQzkxWFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2MvS2NvbmZpZy0yMy1cXHR0cmlzdGF0ZSBcXFwiU01DIDkxQzl4LzkxQzF4eHggc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9zbWMvS2NvbmZpZzoyOmNvbmZpZyBTTUNcXG5uZXQvc21jL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiU01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcXFwiXFxuLS1cXG5uZXQvc21jL0tjb25maWctMTMtXFxubmV0L3NtYy9LY29uZmlnOjE0OmNvbmZpZyBTTUNfRElBR1xcbm5ldC9zbWMvS2NvbmZpZy0xNS1cXHR0cmlzdGF0ZSBcXFwiU01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvc21jL0tjb25maWctMjItXFxubmV0L3NtYy9LY29uZmlnOjIzOmNvbmZpZyBTTUNfSFNfQ1RSTF9CUEZcXG5uZXQvc21jL0tjb25maWctMjQtXFx0Ym9vbCBcXFwiR2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQyBoYW5kc2hha2UgZmxvd1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDI6NTg6MTIuMTUwOTY1MjAxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAyODk3NjY0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgdGhlIGNvbmZpZ3VyYXRpb24gaW4gZnJvbnQgb2YgbWUgaXMgYFNNQ2AuIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIEJ1dCwgYXMgd2UgYWxsIGtub3csIG5vdGhpbmcgZXhpc3RzIGluIGEgdmFjdXVtLCBlc3BlY2lhbGx5IGluIHRoaXMgZmllbGQuIE15IGltbWVkaWF0ZSBuZXh0IHRob3VnaHQgaXMgdG8gZGlnIGRlZXBlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHdpZGVyIGNvbnRleHQuIEFyZSB0aGVyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIHdvdmVuIGluIGhlcmU/IFdoYXQgZWxzZSBkb2VzIGBTTUNgIHJlbHkgb24gdG8gZnVuY3Rpb24gY29ycmVjdGx5PyBXaGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIG11c3QgSSBjb25zaWRlcj8gQmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgSSBtdXN0IGVuc3VyZSBJIGhhdmUgYSBjb21wbGV0ZSBwaWN0dXJlLiBMZXQncyBkZWx2ZSBpbiBhbmQgZmluZCB0aGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDcyNiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAyOjU4OjE1LjE3OTk0NTc0N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2MDcwNDQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uLipTTUNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm0vS2NvbmZpZz0xMDY5PWNvbmZpZyBBUk1fUFNDSVxcbmFyY2gvYXJtL0tjb25maWctMTA3MC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciB0aGUgQVJNIFBvd2VyIFN0YXRlIENvb3JkaW5hdGlvbiBJbnRlcmZhY2UgKFBTQ0kpXFxcIlxcbmFyY2gvYXJtL0tjb25maWc6MTA3MTpcXHRkZXBlbmRzIG9uIEhBVkVfQVJNX1NNQ0NDXFxuYXJjaC9hcm0vS2NvbmZpZy0xMDcyLVxcdHNlbGVjdCBBUk1fUFNDSV9GV1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vcHNjaS5jPTMyMT1zdGF0aWMgaW50IGt2bV9wc2NpXzFfeF9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1pbm9yKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vcHNjaS5jLTM3OS1cXHRcXHQgKiBSZXR1cm4gZGlyZWN0bHkgdG8gdXNlcnNwYWNlIHdpdGhvdXQgY2hhbmdpbmcgdGhlIHZDUFUnc1xcbmFyY2gvYXJtNjQva3ZtL3BzY2kuYzozODA6XFx0XFx0ICogcmVnaXN0ZXJzLiBVc2Vyc3BhY2UgZGVwZW5kcyBvbiByZWFkaW5nIHRoZSBTTUNDQyBwYXJhbWV0ZXJzXFxuYXJjaC9hcm02NC9rdm0vcHNjaS5jLTM4MS1cXHRcXHQgKiB0byBpbXBsZW1lbnQgU1lTVEVNX1NVU1BFTkQuXFxuLS1cXG5kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL0tjb25maWc9NTc4PWNvbmZpZyBIV19SQU5ET01fQVJNX1NNQ0NDX1RSTkdcXG5kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL0tjb25maWctNTc5LVxcdHRyaXN0YXRlIFxcXCJBcm0gU01DQ0MgVFJORyBmaXJtd2FyZSBpbnRlcmZhY2Ugc3VwcG9ydFxcXCJcXG5kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL0tjb25maWc6NTgwOlxcdGRlcGVuZHMgb24gSEFWRV9BUk1fU01DQ0NfRElTQ09WRVJZXFxuZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9LY29uZmlnLTU4MS1cXHRkZWZhdWx0IEhXX1JBTkRPTVxcbi0tXFxuZHJpdmVycy9jbGsvaW14L0tjb25maWc9OTU9Y29uZmlnIENMS19JTVg4UVhQXFxuLS1cXG5kcml2ZXJzL2Nsay9pbXgvS2NvbmZpZy05Ny1cXHRkZXBlbmRzIG9uIChBUkNIX01YQyBcXHUwMDI2XFx1MDAyNiBBUk02NCkgfHwgQ09NUElMRV9URVNUXFxuZHJpdmVycy9jbGsvaW14L0tjb25maWc6OTg6XFx0ZGVwZW5kcyBvbiBJTVhfU0NVIFxcdTAwMjZcXHUwMDI2IEhBVkVfQVJNX1NNQ0NDXFxuZHJpdmVycy9jbGsvaW14L0tjb25maWctOTktXFx0c2VsZWN0IE1YQ19DTEtfU0NVXFxuLS1cXG5kcml2ZXJzL2RldmZyZXEvS2NvbmZpZz0xMTI9Y29uZmlnIEFSTV9JTVg4TV9ERFJDX0RFVkZSRVFcXG5kcml2ZXJzL2RldmZyZXEvS2NvbmZpZy0xMTMtXFx0dHJpc3RhdGUgXFxcImkuTVg4TSBERFJDIERFVkZSRVEgRHJpdmVyXFxcIlxcbmRyaXZlcnMvZGV2ZnJlcS9LY29uZmlnOjExNDpcXHRkZXBlbmRzIG9uIChBUkNIX01YQyBcXHUwMDI2XFx1MDAyNiBIQVZFX0FSTV9TTUNDQykgfHwgXFxcXFxcbmRyaXZlcnMvZGV2ZnJlcS9LY29uZmlnLTExNS1cXHRcXHQoQ09NUElMRV9URVNUIFxcdTAwMjZcXHUwMDI2IEhBVkVfQVJNX1NNQ0NDKVxcbi0tXFxuZHJpdmVycy9kZXZmcmVxL0tjb25maWc9MTQzPWNvbmZpZyBBUk1fUkszMzk5X0RNQ19ERVZGUkVRXFxuZHJpdmVycy9kZXZmcmVxL0tjb25maWctMTQ0LVxcdHRyaXN0YXRlIFxcXCJBUk0gUkszMzk5IERNQyBERVZGUkVRIERyaXZlclxcXCJcXG5kcml2ZXJzL2RldmZyZXEvS2NvbmZpZzoxNDU6XFx0ZGVwZW5kcyBvbiAoQVJDSF9ST0NLQ0hJUCBcXHUwMDI2XFx1MDAyNiBIQVZFX0FSTV9TTUNDQykgfHwgXFxcXFxcbmRyaXZlcnMvZGV2ZnJlcS9LY29uZmlnLTE0Ni1cXHRcXHQoQ09NUElMRV9URVNUIFxcdTAwMjZcXHUwMDI2IEhBVkVfQVJNX1NNQ0NDKVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9LY29uZmlnPTE0Mj1jb25maWcgSU5URUxfU1RSQVRJWDEwX1NFUlZJQ0VcXG5kcml2ZXJzL2Zpcm13YXJlL0tjb25maWctMTQzLVxcdHRyaXN0YXRlIFxcXCJJbnRlbCBTdHJhdGl4MTAgU2VydmljZSBMYXllclxcXCJcXG5kcml2ZXJzL2Zpcm13YXJlL0tjb25maWc6MTQ0OlxcdGRlcGVuZHMgb24gQVJDSF9JTlRFTF9TT0NGUEdBIFxcdTAwMjZcXHUwMDI2IEFSTTY0IFxcdTAwMjZcXHUwMDI2IEhBVkVfQVJNX1NNQ0NDXFxuZHJpdmVycy9maXJtd2FyZS9LY29uZmlnLTE0NS1cXHRkZWZhdWx0IG5cXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9LY29uZmlnPTE4PWNvbmZpZyBBUk1fRkZBX1NNQ0NDXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvS2NvbmZpZy0yMC1cXHRkZWZhdWx0IEFSTV9GRkFfVFJBTlNQT1JUXFxuZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL0tjb25maWc6MjE6XFx0ZGVwZW5kcyBvbiBBUk02NCBcXHUwMDI2XFx1MDAyNiBIQVZFX0FSTV9TTUNDQ19ESVNDT1ZFUllcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvdHJhbnNwb3J0cy9LY29uZmlnPTM3PWNvbmZpZyBBUk1fU0NNSV9UUkFOU1BPUlRfU01DXFxuZHJpdmVycy9maXJtd2FyZS9hcm1fc2NtaS90cmFuc3BvcnRzL0tjb25maWctMzgtXFx0dHJpc3RhdGUgXFxcIlNDTUkgdHJhbnNwb3J0IGJhc2VkIG9uIFNNQ1xcXCJcXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9zY21pL3RyYW5zcG9ydHMvS2NvbmZpZzozOTpcXHRkZXBlbmRzIG9uIEhBVkVfQVJNX1NNQ0NDX0RJU0NPVkVSWVxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvdHJhbnNwb3J0cy9LY29uZmlnLTQwLVxcdHNlbGVjdCBBUk1fU0NNSV9IQVZFX1RSQU5TUE9SVFxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9hcm1fc2NtaS90cmFuc3BvcnRzL0tjb25maWc9NTE9Y29uZmlnIEFSTV9TQ01JX1RSQU5TUE9SVF9TTUNfQVRPTUlDX0VOQUJMRVxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvdHJhbnNwb3J0cy9LY29uZmlnLTUyLVxcdGJvb2wgXFxcIkVuYWJsZSBhdG9taWMgbW9kZSBzdXBwb3J0IGZvciBTQ01JIFNNQyB0cmFuc3BvcnRcXFwiXFxuZHJpdmVycy9maXJtd2FyZS9hcm1fc2NtaS90cmFuc3BvcnRzL0tjb25maWc6NTM6XFx0ZGVwZW5kcyBvbiBBUk1fU0NNSV9UUkFOU1BPUlRfU01DXFxuZHJpdmVycy9maXJtd2FyZS9hcm1fc2NtaS90cmFuc3BvcnRzL0tjb25maWctNTQtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9zbWNjYy9LY29uZmlnPTE4PWNvbmZpZyBBUk1fU01DQ0NfU09DX0lEXFxuZHJpdmVycy9maXJtd2FyZS9zbWNjYy9LY29uZmlnLTE5LVxcdGJvb2wgXFxcIlNvQyBidXMgZGV2aWNlIGZvciB0aGUgQVJNIFNNQ0NDIFNPQ19JRFxcXCJcXG5kcml2ZXJzL2Zpcm13YXJlL3NtY2NjL0tjb25maWc6MjA6XFx0ZGVwZW5kcyBvbiBIQVZFX0FSTV9TTUNDQ19ESVNDT1ZFUllcXG5kcml2ZXJzL2Zpcm13YXJlL3NtY2NjL0tjb25maWctMjEtXFx0ZGVmYXVsdCB5XFxuLS1cXG5kcml2ZXJzL2dwaW8vS2NvbmZpZz0xNTI4PWNvbmZpZyBHUElPX01BQ1NNQ1xcbmRyaXZlcnMvZ3Bpby9LY29uZmlnLTE1MjktXFx0dHJpc3RhdGUgXFxcIkFwcGxlIE1hYyBTTUMgR1BJT1xcXCJcXG5kcml2ZXJzL2dwaW8vS2NvbmZpZzoxNTMwOlxcdGRlcGVuZHMgb24gTUZEX01BQ1NNQ1xcbmRyaXZlcnMvZ3Bpby9LY29uZmlnLTE1MzEtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWc9Mj1jb25maWcgRFJNX01FRElBVEVLXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZy02LVxcdGRlcGVuZHMgb24gQ09NTU9OX0NMS1xcbmRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnOjc6XFx0ZGVwZW5kcyBvbiBIQVZFX0FSTV9TTUNDQyB8fCBDT01QSUxFX1RFU1RcXG5kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZy04LVxcdGRlcGVuZHMgb24gT0ZcXG4tLVxcbmRyaXZlcnMvaHdtb24vS2NvbmZpZz0xMTkxPWNvbmZpZyBTRU5TT1JTX01BQ1NNQ19IV01PTlxcbmRyaXZlcnMvaHdtb24vS2NvbmZpZy0xMTkyLVxcdHRyaXN0YXRlIFxcXCJBcHBsZSBTTUMgKEFwcGxlIFNpbGljb24pXFxcIlxcbmRyaXZlcnMvaHdtb24vS2NvbmZpZzoxMTkzOlxcdGRlcGVuZHMgb24gTUZEX01BQ1NNQyBcXHUwMDI2XFx1MDAyNiBPRlxcbmRyaXZlcnMvaHdtb24vS2NvbmZpZy0xMTk0LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbXRkL25hbmQvcmF3L0tjb25maWc9NDEwPWNvbmZpZyBNVERfTkFORF9QTDM1WFxcbi0tXFxuZHJpdmVycy9tdGQvbmFuZC9yYXcvS2NvbmZpZy00MTItXFx0ZGVwZW5kcyBvbiBPRlxcbmRyaXZlcnMvbXRkL25hbmQvcmF3L0tjb25maWc6NDEzOlxcdGRlcGVuZHMgb24gUEwzNTNfU01DXFxuZHJpdmVycy9tdGQvbmFuZC9yYXcvS2NvbmZpZy00MTQtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9udm1lbS9LY29uZmlnPTExOT1jb25maWcgTlZNRU1fSU1YX09DT1RQX1NDVVxcbi0tXFxuZHJpdmVycy9udm1lbS9LY29uZmlnLTEyMS1cXHRkZXBlbmRzIG9uIElNWF9TQ1VcXG5kcml2ZXJzL252bWVtL0tjb25maWc6MTIyOlxcdGRlcGVuZHMgb24gSEFWRV9BUk1fU01DQ0NcXG5kcml2ZXJzL252bWVtL0tjb25maWctMTIzLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvcGNpL2hvdHBsdWcvS2NvbmZpZz02ND1jb25maWcgSE9UUExVR19QQ0lfQUNQSV9BTVBFUkVfQUxUUkFcXG4tLVxcbmRyaXZlcnMvcGNpL2hvdHBsdWcvS2NvbmZpZy02Ni1cXHRkZXBlbmRzIG9uIEhPVFBMVUdfUENJX0FDUElcXG5kcml2ZXJzL3BjaS9ob3RwbHVnL0tjb25maWc6Njc6XFx0ZGVwZW5kcyBvbiBIQVZFX0FSTV9TTUNDQ19ESVNDT1ZFUllcXG5kcml2ZXJzL3BjaS9ob3RwbHVnL0tjb25maWctNjgtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9waHkvbWFydmVsbC9LY29uZmlnPTI3PWNvbmZpZyBQSFlfTVZFQlVfQTM3MDBfQ09NUEhZXFxuLS1cXG5kcml2ZXJzL3BoeS9tYXJ2ZWxsL0tjb25maWctMzAtXFx0ZGVwZW5kcyBvbiBPRlxcbmRyaXZlcnMvcGh5L21hcnZlbGwvS2NvbmZpZzozMTpcXHRkZXBlbmRzIG9uIEhBVkVfQVJNX1NNQ0NDXFxuZHJpdmVycy9waHkvbWFydmVsbC9LY29uZmlnLTMyLVxcdGRlZmF1bHQgQVJDSF9NVkVCVVxcbi0tXFxuZHJpdmVycy9waHkvbWFydmVsbC9LY29uZmlnPTU4PWNvbmZpZyBQSFlfTVZFQlVfQ1AxMTBfQ09NUEhZXFxuLS1cXG5kcml2ZXJzL3BoeS9tYXJ2ZWxsL0tjb25maWctNjEtXFx0ZGVwZW5kcyBvbiBPRlxcbmRyaXZlcnMvcGh5L21hcnZlbGwvS2NvbmZpZzo2MjpcXHRkZXBlbmRzIG9uIEhBVkVfQVJNX1NNQ0NDXFxuZHJpdmVycy9waHkvbWFydmVsbC9LY29uZmlnLTYzLVxcdHNlbGVjdCBHRU5FUklDX1BIWVxcbi0tXFxuZHJpdmVycy9wbWRvbWFpbi9hbWxvZ2ljL0tjb25maWc9MTU9Y29uZmlnIE1FU09OX1NFQ1VSRV9QTV9ET01BSU5TXFxuLS1cXG5kcml2ZXJzL3BtZG9tYWluL2FtbG9naWMvS2NvbmZpZy0xOC1cXHRkZXBlbmRzIG9uIFBNIFxcdTAwMjZcXHUwMDI2IE9GXFxuZHJpdmVycy9wbWRvbWFpbi9hbWxvZ2ljL0tjb25maWc6MTk6XFx0ZGVwZW5kcyBvbiBIQVZFX0FSTV9TTUNDQ1xcbmRyaXZlcnMvcG1kb21haW4vYW1sb2dpYy9LY29uZmlnLTIwLVxcdGRlZmF1bHQgQVJDSF9NRVNPTlxcbi0tXFxuZHJpdmVycy9wbWRvbWFpbi9tZWRpYXRlay9LY29uZmlnPTQ2PWNvbmZpZyBBSVJPSEFfQ1BVX1BNX0RPTUFJTlxcbi0tXFxuZHJpdmVycy9wbWRvbWFpbi9tZWRpYXRlay9LY29uZmlnLTQ4LVxcdGRlZmF1bHQgQVJDSF9BSVJPSEFcXG5kcml2ZXJzL3BtZG9tYWluL21lZGlhdGVrL0tjb25maWc6NDk6XFx0ZGVwZW5kcyBvbiBIQVZFX0FSTV9TTUNDQ1xcbmRyaXZlcnMvcG1kb21haW4vbWVkaWF0ZWsvS2NvbmZpZy01MC1cXHRkZXBlbmRzIG9uIFBNXFxuLS1cXG5kcml2ZXJzL3BtZG9tYWluL3JvY2tjaGlwL0tjb25maWc9ND1jb25maWcgUk9DS0NISVBfUE1fRE9NQUlOU1xcbi0tXFxuZHJpdmVycy9wbWRvbWFpbi9yb2NrY2hpcC9LY29uZmlnLTctXFx0ZGVwZW5kcyBvbiBQTVxcbmRyaXZlcnMvcG1kb21haW4vcm9ja2NoaXAvS2NvbmZpZzo4OlxcdGRlcGVuZHMgb24gSEFWRV9BUk1fU01DQ0NfRElTQ09WRVJZXFxuZHJpdmVycy9wbWRvbWFpbi9yb2NrY2hpcC9LY29uZmlnLTktXFx0ZGVwZW5kcyBvbiBSRUdVTEFUT1JcXG4tLVxcbmRyaXZlcnMvcG93ZXIvcmVzZXQvS2NvbmZpZz0xMzE9Y29uZmlnIFBPV0VSX1JFU0VUX01BQ1NNQ1xcbmRyaXZlcnMvcG93ZXIvcmVzZXQvS2NvbmZpZy0xMzItXFx0dHJpc3RhdGUgXFxcIkFwcGxlIFNNQyByZXNldC9wb3dlci1vZmYgZHJpdmVyXFxcIlxcbmRyaXZlcnMvcG93ZXIvcmVzZXQvS2NvbmZpZzoxMzM6XFx0ZGVwZW5kcyBvbiBNRkRfTUFDU01DXFxuZHJpdmVycy9wb3dlci9yZXNldC9LY29uZmlnLTEzNC1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9LY29uZmlnPTExNTc9Y29uZmlnIE1BQ1NNQ19QT1dFUlxcbmRyaXZlcnMvcG93ZXIvc3VwcGx5L0tjb25maWctMTE1OC1cXHR0cmlzdGF0ZSBcXFwiQXBwbGUgU01DIEJhdHRlcnkgYW5kIFBvd2VyIERyaXZlclxcXCJcXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9LY29uZmlnOjExNTk6XFx0ZGVwZW5kcyBvbiBNRkRfTUFDU01DXFxuZHJpdmVycy9wb3dlci9zdXBwbHkvS2NvbmZpZy0xMTYwLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvcHRwL0tjb25maWc9MTIyPWNvbmZpZyBQVFBfMTU4OF9DTE9DS19LVk1cXG4tLVxcbmRyaXZlcnMvcHRwL0tjb25maWctMTI0LVxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tcXG5kcml2ZXJzL3B0cC9LY29uZmlnOjEyNTpcXHRkZXBlbmRzIG9uIChLVk1fR1VFU1QgXFx1MDAyNlxcdTAwMjYgWDg2KSB8fCAoSEFWRV9BUk1fU01DQ0NfRElTQ09WRVJZIFxcdTAwMjZcXHUwMDI2IEFSTV9BUkNIX1RJTUVSKVxcbmRyaXZlcnMvcHRwL0tjb25maWctMTI2LVxcdGRlZmF1bHQgeVxcbi0tXFxuZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWc9MjY9Y29uZmlnIElNWF9SRU1PVEVQUk9DXFxuLS1cXG5kcml2ZXJzL3JlbW90ZXByb2MvS2NvbmZpZy0yOC1cXHRkZXBlbmRzIG9uIEFSQ0hfTVhDXFxuZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWc6Mjk6XFx0ZGVwZW5kcyBvbiBIQVZFX0FSTV9TTUNDQ1xcbmRyaXZlcnMvcmVtb3RlcHJvYy9LY29uZmlnLTMwLVxcdGRlcGVuZHMgb24gSU1YX1NDTUlfQ1BVX0RSViB8fCAhSU1YX1NDTUlfQ1BVX0RSVlxcbi0tXFxuZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWc9Mzk9Y29uZmlnIElNWF9EU1BfUkVNT1RFUFJPQ1xcbi0tXFxuZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWctNDEtXFx0ZGVwZW5kcyBvbiBBUkNIX01YQ1xcbmRyaXZlcnMvcmVtb3RlcHJvYy9LY29uZmlnOjQyOlxcdGRlcGVuZHMgb24gSEFWRV9BUk1fU01DQ0NcXG5kcml2ZXJzL3JlbW90ZXByb2MvS2NvbmZpZy00My1cXHRzZWxlY3QgTUFJTEJPWFxcbi0tXFxuZHJpdmVycy9yZXNldC9LY29uZmlnPTExNz1jb25maWcgUkVTRVRfSU1YX1NDVVxcbmRyaXZlcnMvcmVzZXQvS2NvbmZpZy0xMTgtXFx0dHJpc3RhdGUgXFxcImkuTVg4USBSZXNldCBEcml2ZXJcXFwiXFxuZHJpdmVycy9yZXNldC9LY29uZmlnOjExOTpcXHRkZXBlbmRzIG9uIElNWF9TQ1UgXFx1MDAyNlxcdTAwMjYgSEFWRV9BUk1fU01DQ0NcXG5kcml2ZXJzL3Jlc2V0L0tjb25maWctMTIwLVxcdGRlcGVuZHMgb24gKEFSTTY0IFxcdTAwMjZcXHUwMDI2IEFSQ0hfTVhDKSB8fCBDT01QSUxFX1RFU1RcXG4tLVxcbmRyaXZlcnMvcnRjL0tjb25maWc9MTkxNj1jb25maWcgUlRDX0RSVl9JTVhfU0NcXG5kcml2ZXJzL3J0Yy9LY29uZmlnLTE5MTctXFx0ZGVwZW5kcyBvbiBJTVhfU0NVXFxuZHJpdmVycy9ydGMvS2NvbmZpZzoxOTE4OlxcdGRlcGVuZHMgb24gSEFWRV9BUk1fU01DQ0NcXG5kcml2ZXJzL3J0Yy9LY29uZmlnLTE5MTktXFx0dHJpc3RhdGUgXFxcIk5YUCBpLk1YIFN5c3RlbSBDb250cm9sbGVyIFJUQyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9ydGMvS2NvbmZpZz0yMTAzPWNvbmZpZyBSVENfRFJWX01BQ1NNQ1xcbmRyaXZlcnMvcnRjL0tjb25maWctMjEwNC1cXHR0cmlzdGF0ZSBcXFwiQXBwbGUgTWFjIFN5c3RlbSBNYW5hZ2VtZW50IENvbnRyb2xsZXIgUlRDXFxcIlxcbmRyaXZlcnMvcnRjL0tjb25maWc6MjEwNTpcXHRkZXBlbmRzIG9uIE1GRF9NQUNTTUNcXG5kcml2ZXJzL3J0Yy9LY29uZmlnLTIxMDYtXFx0aGVscFxcbi0tXFxuZHJpdmVycy90ZWUvS2NvbmZpZz0zPW1lbnVjb25maWcgVEVFXFxuZHJpdmVycy90ZWUvS2NvbmZpZy00LVxcdHRyaXN0YXRlIFxcXCJUcnVzdGVkIEV4ZWN1dGlvbiBFbnZpcm9ubWVudCBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvdGVlL0tjb25maWc6NTpcXHRkZXBlbmRzIG9uIEhBVkVfQVJNX1NNQ0NDIHx8IENPTVBJTEVfVEVTVCB8fCBDUFVfU1VQX0FNRFxcbmRyaXZlcnMvdGVlL0tjb25maWctNi1cXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEExXFxuLS1cXG5kcml2ZXJzL3RlZS9vcHRlZS9LY29uZmlnPTM9Y29uZmlnIE9QVEVFXFxuZHJpdmVycy90ZWUvb3B0ZWUvS2NvbmZpZy00LVxcdHRyaXN0YXRlIFxcXCJPUC1URUVcXFwiXFxuZHJpdmVycy90ZWUvb3B0ZWUvS2NvbmZpZzo1OlxcdGRlcGVuZHMgb24gSEFWRV9BUk1fU01DQ0NcXG5kcml2ZXJzL3RlZS9vcHRlZS9LY29uZmlnLTYtXFx0ZGVwZW5kcyBvbiBNTVVcXG4tLVxcbmRyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZz03ODg9Y29uZmlnIElNWF9TQ19XRFRcXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWctNzg5LVxcdHRyaXN0YXRlIFxcXCJJTVggU0MgV2F0Y2hkb2dcXFwiXFxuZHJpdmVycy93YXRjaGRvZy9LY29uZmlnOjc5MDpcXHRkZXBlbmRzIG9uIEhBVkVfQVJNX1NNQ0NDXFxuZHJpdmVycy93YXRjaGRvZy9LY29uZmlnLTc5MS1cXHRkZXBlbmRzIG9uIElNWF9TQ1UgfHwgQ09NUElMRV9URVNUXFxuLS1cXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWc9OTM5PWNvbmZpZyBBUk1fU01DX1dBVENIRE9HXFxuLS1cXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWctOTQyLVxcdGRlcGVuZHMgb24gT0ZcXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWc6OTQzOlxcdGRlcGVuZHMgb24gSEFWRV9BUk1fU01DQ0NcXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWctOTQ0LVxcdHNlbGVjdCBXQVRDSERPR19DT1JFXFxuLS1cXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWc9MjM0Mj1jb25maWcgR1VOWUFIX1dBVENIRE9HXFxuLS1cXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWctMjM0NC1cXHRkZXBlbmRzIG9uIEFSQ0hfUUNPTSB8fCBDT01QSUxFX1RFU1RcXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWc6MjM0NTpcXHRkZXBlbmRzIG9uIEhBVkVfQVJNX1NNQ0NDXFxuZHJpdmVycy93YXRjaGRvZy9LY29uZmlnLTIzNDYtXFx0c2VsZWN0IFdBVENIRE9HX0NPUkVcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZz0xND1jb25maWcgU01DX0RJQUdcXG5uZXQvc21jL0tjb25maWctMTUtXFx0dHJpc3RhdGUgXFxcIlNNQzogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbm5ldC9zbWMvS2NvbmZpZzoxNjpcXHRkZXBlbmRzIG9uIFNNQ1xcbm5ldC9zbWMvS2NvbmZpZy0xNy1cXHRoZWxwXFxuLS1cXG5uZXQvc21jL0tjb25maWc9MjM9Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxcbm5ldC9zbWMvS2NvbmZpZy0yNC1cXHRib29sIFxcXCJHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XFxcIlxcbm5ldC9zbWMvS2NvbmZpZzoyNTpcXHRkZXBlbmRzIG9uIFNNQyBcXHUwMDI2XFx1MDAyNiBCUEZfSklUIFxcdTAwMjZcXHUwMDI2IEJQRl9TWVNDQUxMXFxubmV0L3NtYy9LY29uZmlnLTI2LVxcdGRlZmF1bHQgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMjo1ODoxNy4zNDA2NjE2MDdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUxNDg5ODE0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZXZpZXdpbmcgdGhlIFNNQyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBpcyBzdHJhaWdodGZvcndhcmQsIGp1c3QgYFNNQ2AuIFRoYXQgbWFrZXMgdGhpbmdzIGEgYml0IGVhc2llciB0byBkaWdlc3QuIE5vdywgbGV0J3MgZHJpbGwgZG93biBpbnRvIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgYXJlIHJlbGV2YW50IGhlcmUuIEkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZTpcblxuKiAgIGBzbWNfbGxjX2NsaV9hZGRfbGlua2BcbiogICBgc21jX2xsY19zcnZfYWRkX2xpbmtgXG4qICAgYHNtY19sbGNfYWRkX2xpbmtfbG9jYWxgXG4qICAgYHNtY19sbGNfc3J2X2RlbGV0ZV9saW5rX2xvY2FsYFxuXG5BbHJpZ2h0LCBpbml0aWFsbHkgYHNtY19sbGNfY2xpX2FkZF9saW5rYCBhbmQgYHNtY19sbGNfc3J2X2FkZF9saW5rYCBzZWVtIGxpa2Ugc29saWQgY2FuZGlkYXRlcyB0byBleGFtaW5lLiBIb2xkIG9uIGEgc2Vjb25kLCB0aG91Z2guLi4gSSBuZWVkIHRvIGFsc28gY29uc2lkZXIgcG90ZW50aWFsIGltcGFjdHMgZnJvbSBzdGF0aWMgZnVuY3Rpb25zLiBXaGF0IGFib3V0IGBzbWNfbGxjX3J4X2hhbmRsZXJgPyBJdCBpcyBzdGF0aWMgd2hpY2ggbmVlZHMgY29uc2lkZXJhdGlvbi4gQW5kIHdoYXQgYWJvdXQgYHNtY19sbGNfcm10X2RlbGV0ZV9ya2V5YD8gQWxzbyBzdGF0aWMsIHNvIGl0IHJlcXVpcmVzIGF0dGVudGlvbi4gQW5kLCBvZiBjb3Vyc2UsIHRoZXJlJ3MgYHNtY19sbGNfZW5xdWV1ZWAsIGFub3RoZXIgc3RhdGljIG9uZS5cblxuT2theSwgbGV0J3Mgc3RlcCBiYWNrLCBhbmQgY2hlY2sgdGhvc2UgcmVtYWluaW5nIGZ1bmN0aW9ucywgYHNtY19sbGNfYWRkX2xpbmtfbG9jYWxgIGFuZCBgc21jX2xsY19zcnZfZGVsZXRlX2xpbmtfbG9jYWxgLiBUaGUga2V5IHF1ZXN0aW9uIGhlcmUgaXMgd2hldGhlciB0aGV5IGFyZSBleHBvcnRlZCBvciBub24tc3RhdGljLiBUaGUgYW5zd2VyIHRvIHRoYXQgcXVlc3Rpb24gd2lsbCBpbmZsdWVuY2UgdGhlIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDU1MywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMjo1ODoyMS44NTU1NjIyMjFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDg4NTYwMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic21jX2xsY19hZGRfbGlua19sb2NhbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL3NtY19jb3JlLmM9MTc1Nz12b2lkIHNtY3JfcG9ydF9hZGQoc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY2liZGV2LCB1OCBpYnBvcnQpXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMTc3Ny1cXHRcXHRpZiAobGluaylcXG5uZXQvc21jL3NtY19jb3JlLmM6MTc3ODpcXHRcXHRcXHRzbWNfbGxjX2FkZF9saW5rX2xvY2FsKGxpbmspO1xcbm5ldC9zbWMvc21jX2NvcmUuYy0xNzc5LVxcdH1cXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jPTE1NTI9c3RhdGljIHZvaWQgc21jX2xsY19wcm9jZXNzX3Nydl9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncilcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTE1NzAtLyogZW5xdWV1ZSBhIGxvY2FsIGFkZF9saW5rIHJlcSB0byB0cmlnZ2VyIGEgbmV3IGFkZF9saW5rIGZsb3cgKi9cXG5uZXQvc21jL3NtY19sbGMuYzoxNTcxOnZvaWQgc21jX2xsY19hZGRfbGlua19sb2NhbChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmspXFxubmV0L3NtYy9zbWNfbGxjLmMtMTU3Mi17XFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYz0xNjk3PXN0YXRpYyB2b2lkIHNtY19sbGNfcHJvY2Vzc19zcnZfZGVsZXRlX2xpbmsoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IpXFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYy0xNzU3LVxcdFxcdC8qIHRyaWdnZXIgc2V0dXAgb2YgYXN5bW0gYWx0IGxpbmsgKi9cXG5uZXQvc21jL3NtY19sbGMuYzoxNzU4OlxcdFxcdHNtY19sbGNfYWRkX2xpbmtfbG9jYWwobG5rKTtcXG5uZXQvc21jL3NtY19sbGMuYy0xNzU5LVxcdH1cXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5oPTExNT1pbnQgc21jX2xsY19zcnZfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLFxcbm5ldC9zbWMvc21jX2xsYy5oLTExNi1cXHRcXHRcXHQgc3RydWN0IHNtY19sbGNfcWVudHJ5ICpyZXFfcWVudHJ5KTtcXG5uZXQvc21jL3NtY19sbGMuaDoxMTc6dm9pZCBzbWNfbGxjX2FkZF9saW5rX2xvY2FsKHN0cnVjdCBzbWNfbGluayAqbGluayk7XFxubmV0L3NtYy9zbWNfbGxjLmgtMTE4LWludCBzbWNfbGxjX2luaXQodm9pZCkgX19pbml0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMjo1ODoyMy40MDQ0MjMwMjdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc5MTkwNjc1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgTGluay1Mb2NhbCBTTUMgTExDIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyBgc21jX2xsY19hZGRfbGlua19sb2NhbGAgaXNuJ3Qgc3RhdGljLiBUaGF0J3MgZ29vZCB0byBub3RlLCBpbXBvcnRhbnQgZm9yIGhvdyBpdCdzIGhhbmRsZWQsIHdoZXJlIGl0IGNhbiBiZSBjYWxsZWQgZnJvbSwgYW5kIG9mIGNvdXJzZSwgd2hhdCBzY29wZSBpdCBleGlzdHMgd2l0aGluLiBUaGlzIGlzbid0IGp1c3QgYSBzaW1wbGUgaGVscGVyIGZ1bmN0aW9uLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgd2hlbiBJJ20gYXNzZXNzaW5nIGl0cyBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gYW5kLCBlc3BlY2lhbGx5LCB3aGVuIHRoaW5raW5nIGFib3V0IGl0cyBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIG9yIHJlZW50cmFuY3kgaXNzdWVzLlxuXG5BbmQgdGhlbiwganVzdCB0byBiZSB0aG9yb3VnaCwgd2hhdCBhYm91dCBgc21jX2xsY19zcnZfZGVsZXRlX2xpbmtfbG9jYWxgPyBJcyAqdGhhdCogYWxzbyBub24tc3RhdGljPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGF0IGJlZm9yZSBJIG1vdmUgb24uIFRoZSBzdGF0aWMvbm9uLXN0YXRpYyBzdGF0dXMgb2YgdGhlc2UgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIHNlcnZpY2UgYW5kIGxpbmsgbWFuYWdlbWVudCwgZGljdGF0ZXMgYSBsb3QgYWJvdXQgdGhlIGRlc2lnbiBhbmQgcG90ZW50aWFsIHBpdGZhbGxzIHdpdGhpbiB0aGlzIExMQyBsYXllci4gSSBuZWVkIHRvIGtub3cgdGhlIHNjb3BlIG9mIGJvdGguIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGltcGxpY2F0aW9ucyBhbmQgbWFrZSB0aGUgcmlnaHQgYXNzdW1wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjY4LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDI6NTg6MjcuMTk2MzMxNjMyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTA3NjY4NDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtY19sbGNfc3J2X2RlbGV0ZV9saW5rX2xvY2FsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX2NvcmUuYz0xNzg2PXN0YXRpYyB2b2lkIHNtY3JfbGlua19kb3duKHN0cnVjdCBzbWNfbGluayAqbG5rKVxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTE4MDQtXFx0XFx0LyogdHJpZ2dlciBsb2NhbCBkZWxldGUgbGluayBwcm9jZXNzaW5nICovXFxubmV0L3NtYy9zbWNfY29yZS5jOjE4MDU6XFx0XFx0c21jX2xsY19zcnZfZGVsZXRlX2xpbmtfbG9jYWwodG9fbG5rLCBkZWxfbGlua19pZCk7XFxubmV0L3NtYy9zbWNfY29yZS5jLTE4MDYtXFx0fSBlbHNlIHtcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jPTE1ODM9c3RhdGljIHZvaWQgc21jX2xsY19hZGRfbGlua193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTE2MDUtICovXFxubmV0L3NtYy9zbWNfbGxjLmM6MTYwNjp2b2lkIHNtY19sbGNfc3J2X2RlbGV0ZV9saW5rX2xvY2FsKHN0cnVjdCBzbWNfbGluayAqbGluaywgdTggZGVsX2xpbmtfaWQpXFxubmV0L3NtYy9zbWNfbGxjLmMtMTYwNy17XFxuLS1cXG5uZXQvc21jL3NtY19sbGMuaD04Nz1pbnQgc21jX2xsY19zZW5kX2RlbGV0ZV9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluaywgdTggbGlua19kZWxfaWQsXFxuLS1cXG5uZXQvc21jL3NtY19sbGMuaC04OS1cXHRcXHRcXHQgICAgIHUzMiByZWFzb24pO1xcbm5ldC9zbWMvc21jX2xsYy5oOjkwOnZvaWQgc21jX2xsY19zcnZfZGVsZXRlX2xpbmtfbG9jYWwoc3RydWN0IHNtY19saW5rICpsaW5rLCB1OCBkZWxfbGlua19pZCk7XFxubmV0L3NtYy9zbWNfbGxjLmgtOTEtdm9pZCBzbWNfbGxjX2xncl9pbml0KHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLCBzdHJ1Y3Qgc21jX3NvY2sgKnNtYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAyOjU4OjI4LjcwNDAwNTYzOVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTQ3MzI4MDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgd2hhdCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBjb2RlOlxuXG4qKkFuYWx5emluZyBTTUMgTExDIExpbmsgTWFuYWdlbWVudCoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4gSSd2ZSBjb25maXJtZWQgdGhhdCBgc21jX2xsY19zcnZfZGVsZXRlX2xpbmtfbG9jYWxgIGlzbid0IGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyB1c2VmdWwgaW5mb3JtYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGJyb2FkZXIgc2NvcGUgb2YgaXRzIHVzZS4gTXkgbWFpbiBmb2N1cywgdGhlbiwgc2hvdWxkIGJlIG9uIHRoZXNlIGZvdXIga2V5IGZ1bmN0aW9ucywgdW5kZXJzdGFuZGluZyBob3cgdGhleSBpbnRlcmFjdCB3aXRoaW4gdGhlIFNNQyBMTEMgbGF5ZXI6IGBzbWNfbGxjX2NsaV9hZGRfbGlua2AsIGBzbWNfbGxjX3Nydl9hZGRfbGlua2AsIGBzbWNfbGxjX2FkZF9saW5rX2xvY2FsYCwgYW5kIGBzbWNfbGxjX3Nydl9kZWxldGVfbGlua19sb2NhbGAuIFRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gaXMgZGVmaW5pdGVseSBgU01DYC4gSSdsbCB3YW50IHRvIGVuc3VyZSBgU01DYCBpcyB0aGUgb25seSBjb25maWcgaW1wYWN0aW5nIGNvbXBpbGF0aW9uIG9mIGBuZXQvc21jL3NtY19sbGMuY2AuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgb3RoZXIgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb25zLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0MTAsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDI6NTg6MzIuODUxMzM2MDU0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTg1NDQ0ODk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtY19sbGMub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL01ha2VmaWxlPTQ9b2JqLSQoQ09ORklHX1NNQ19ESUFHKVxcdCs9IHNtY19kaWFnLm9cXG5uZXQvc21jL01ha2VmaWxlOjU6c21jLXkgOj0gYWZfc21jLm8gc21jX3BuZXQubyBzbWNfaWIubyBzbWNfY2xjLm8gc21jX2NvcmUubyBzbWNfd3IubyBzbWNfbGxjLm9cXG5uZXQvc21jL01ha2VmaWxlLTYtc21jLXkgKz0gc21jX2NkYy5vIHNtY190eC5vIHNtY19yeC5vIHNtY19jbG9zZS5vIHNtY19pc20ubyBzbWNfbmV0bGluay5vIHNtY19zdGF0cy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAyOjU4OjM1LjAzNjc4NTUzM1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODMwOTczOTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBTTUMgTExDIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBleGFtaW5lZCB0aGlzIHBhdGNoLCBhbmQgaGVyZSdzIG15IHVuZGVyc3RhbmRpbmc6IGl0J3MgZGVmaW5pdGVseSB0YXJnZXRpbmcgdGhlIGBzbWMteWAgbW9kdWxlLCB3aGljaCBpcyB3aGF0IEkgc3VzcGVjdGVkIHdoZW4gSSBzYXcgYENPTkZJR19TTUNgIG1lbnRpb25lZC4gVGhlcmVmb3JlLCBteSBleHBlY3RlZCByZXN1bHRzIGFsaWduIHBlcmZlY3RseS4gV2Ugc2hvdWxkIHNlZSBgV29ydGhGdXp6aW5nOiB0cnVlYCBiZWNhdXNlIHRoaXMgcGF0Y2ggZGlyZWN0bHkgaW1wYWN0cyB0aGUgU01DIExMQyBtZXNzYWdlIHByb2Nlc3NpbmcgbG9naWMsIGEgY3JpdGljYWwgcGFydCBvZiB0aGUgU01DIHN0YWNrLlxuXG5UaGUgYEZvY3VzU3ltYm9sc2AgYWxzbyBsb29rIHNwb3Qgb247IHRoZXNlIGZ1bmN0aW9ucyAoYHNtY19sbGNfY2xpX2FkZF9saW5rYCwgYHNtY19sbGNfc3J2X2FkZF9saW5rYCwgYHNtY19sbGNfYWRkX2xpbmtfbG9jYWxgLCBgc21jX2xsY19zcnZfZGVsZXRlX2xpbmtfbG9jYWxgKSBhcmUgZXhhY3RseSB3aGVyZSBJIHdvdWxkIGV4cGVjdCB0byBmaW5kIHRoZSB2dWxuZXJhYmlsaXR5LiBUaGVzZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gbGluayBtYW5hZ2VtZW50LCBhbmQgdGhlIGBSZWFzb25pbmdgIHNlY3Rpb24gY29uZmlybXMgdGhhdCBsYXJnZSBtZXNzYWdlcyB3ZXJlIGNhdXNpbmcgYnVmZmVyIG92ZXJmbG93cyB3aXRoaW4gdGhlIGBzbWNfbGxjX3FlbnRyeWAgYnVmZmVyLCBzbyB0aGVzZSBhcmUgdGhlIGNhbmRpZGF0ZXMuXG5cbkZ1cnRoZXJtb3JlLCBgRW5hYmxlQ29uZmlnczogLSBTTUNgIGlzIGFsc28gY29ycmVjdC4gVGhlIHBhdGNoIGRlcGVuZHMgb24gdGhlIFNNQyBmZWF0dXJlIGJlaW5nIGVuYWJsZWQuXG5cblRoZSByZWFzb25pbmcgcHJvdmlkZWQgaXMgc29saWQ7IGl0IGRldGFpbHMgdGhlIGlzc3Vl4oCUbGFyZ2UgU01DLVJ2MiBtZXNzYWdlcywgc3BlY2lmaWNhbGx5IHRoZSBBRERfTElOSyBhbmQgREVMRVRFX1JLRVlfVjIgdHlwZXMsIG92ZXJmbG93aW5nIHRoZSBhbGxvY2F0ZWQgYnVmZmVyLiBUaGUgZml4LCB3aGljaCB1c2VzIGEgZmxleGlibGUgYXJyYXkgbWVtYmVyIHRvIGFsbG9jYXRlIHRoZSBidWZmZXIgZHluYW1pY2FsbHkgYmFzZWQgb24gdGhlIG1lc3NhZ2Ugc2l6ZSwgaXMgZXhhY3RseSB0aGUgcmlnaHQgYXBwcm9hY2ggdG8gYWRkcmVzcyB0aGlzIHR5cGUgb2Ygb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eS4gVGhlIG1lbnRpb24gb2YgaXQgYmVpbmcgcmVhY2hhYmxlIHZpYSBBRl9TTUMgc29ja2V0cyBpcyBhbHNvIGltcG9ydGFudCwgZXN0YWJsaXNoaW5nIHRoZSBwcmFjdGljYWwgaW1wYWN0IGFuZCBzdWdnZXN0aW5nIHdheXMgdG8gYWN0dWFsbHkgdHJpZ2dlciBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5NTEsIk91dHB1dFRva2VucyI6MTc3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAyOjU4OjQxLjg2Nzc2MjA4MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MjYxNzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTTUNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzbWNfbGxjX2NsaV9hZGRfbGlua1wiLFxuICAgIFwic21jX2xsY19zcnZfYWRkX2xpbmtcIixcbiAgICBcInNtY19sbGNfYWRkX2xpbmtfbG9jYWxcIixcbiAgICBcInNtY19sbGNfc3J2X2RlbGV0ZV9saW5rX2xvY2FsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gU01DIExMQyBtZXNzYWdlIGVucXVldWVpbmcgd2hlcmUgbGFyZ2UgU01DLVJ2MiBtZXNzYWdlcyAobGlrZSBBRERfTElOSyBhbmQgREVMRVRFX1JLRVlfVjIpIHdlcmUgb3ZlcmZsb3dpbmcgdGhlIGFsbG9jYXRlZCBzbWNfbGxjX3FlbnRyeSBidWZmZXIuIEl0IGludHJvZHVjZXMgYSBmbGV4aWJsZSBhcnJheSBtZW1iZXIgdG8gZHluYW1pY2FsbHkgYWxsb2NhdGUgdGhlIGJ1ZmZlciBiYXNlZCBvbiB0aGUgbWVzc2FnZSBzaXplLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgU01DIExMQyBwcm9jZXNzaW5nIGxvZ2ljIGFuZCBpcyByZWFjaGFibGUgdmlhIEFGX1NNQyBzb2NrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNNQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNtY19sbGNfY2xpX2FkZF9saW5rXCIsXG4gICAgXCJzbWNfbGxjX3Nydl9hZGRfbGlua1wiLFxuICAgIFwic21jX2xsY19hZGRfbGlua19sb2NhbFwiLFxuICAgIFwic21jX2xsY19zcnZfZGVsZXRlX2xpbmtfbG9jYWxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBTTUMgTExDIG1lc3NhZ2UgZW5xdWV1ZWluZyB3aGVyZSBsYXJnZSBTTUMtUnYyIG1lc3NhZ2VzIChsaWtlIEFERF9MSU5LIGFuZCBERUxFVEVfUktFWV9WMikgd2VyZSBvdmVyZmxvd2luZyB0aGUgYWxsb2NhdGVkIHNtY19sbGNfcWVudHJ5IGJ1ZmZlci4gSXQgaW50cm9kdWNlcyBhIGZsZXhpYmxlIGFycmF5IG1lbWJlciB0byBkeW5hbWljYWxseSBhbGxvY2F0ZSB0aGUgYnVmZmVyIGJhc2VkIG9uIHRoZSBtZXNzYWdlIHNpemUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBTTUMgTExDIHByb2Nlc3NpbmcgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgQUZfU01DIHNvY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAyOjU4OjQxLjk0NTAzMTcxWiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzM2ODM2MTYwMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMjo1ODo0MS45NDU2NTk1OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNzM2ODI5ODQyMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gU01DLVJ2MiBMTEMgbWVzc2FnZSBoYW5kbGluZyB3aGVyZSBhIHNoYXJlZCBETUEgcmVjZWl2ZSBidWZmZXIgKGB3cl9yeF9idWZfdjJgKSBjb3VsZCBiZSBvdmVyd3JpdHRlbiBieSBhIG5ldyBpbmNvbWluZyBtZXNzYWdlIGJlZm9yZSB0aGUgd29ya2VyIHRocmVhZCBwcm9jZXNzZWQgdGhlIHByZXZpb3VzIG9uZS4gSXQgcmVzb2x2ZXMgdGhpcyBieSBjb3B5aW5nIHRoZSBzcGlsbG92ZXIgYnl0ZXMgb2YgdGhlIG1lc3NhZ2UgaW50byBhIGZsZXhpYmxlIGFycmF5IGluIGBzdHJ1Y3Qgc21jX2xsY19xZW50cnlgIGF0IHRoZSB0aW1lIG9mIHJlY2VwdGlvbi4gSXQgYWxzbyBhZGRzIGJvdW5kcyBjaGVja3MgdG8gZW5zdXJlIG1lc3NhZ2UgcGFyc2luZyBkb2VzIG5vdCByZWFkIHBhc3QgdGhlIGFjdHVhbCByZWNlaXZlZCBsZW5ndGguXFxuXFxuQmVmb3JlIHRoaXMgcGF0Y2gsIHJlYWRpbmcgcGFzdCB0aGUgcmVjZWl2ZWQgbGVuZ3RoIHdvdWxkIHJlYWQgZnJvbSB0aGUgcmVtYWluZGVyIG9mIHRoZSByZWNlaXZlIGJ1ZmZlci4gU2luY2UgdGhpcyBidWZmZXIgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgIChvciBga2NhbGxvY2ApLCB0aGUgbWVtb3J5IHdhcyB6ZXJvLWluaXRpYWxpemVkLCBtZWFuaW5nIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdhcyBhY2Nlc3NlZC4gXFxuXFxuVGhlIG5ld2x5IGludHJvZHVjZWQgYHN0cnVjdCBzbWNfbGxjX3FlbnRyeWAgaXMgc3RyaWN0bHkgYW4gaW50ZXJuYWwga2VybmVsIHN0cnVjdHVyZSB1c2VkIGZvciBxdWV1aW5nIG1lc3NhZ2VzIHRvIGEgd29ya2VyIHRocmVhZC4gSXQgaXMgbmV2ZXIgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3Igc2VudCBvdmVyIHRoZSBuZXR3b3JrLCBzbyBhbnkgc3RydWN0IHBhZGRpbmcgY2Fubm90IGNhdXNlIGFuIGluZm8tbGVhay4gRnVydGhlcm1vcmUsIGFsbCBmaWVsZHMgYW5kIHRoZSBmbGV4aWJsZSBhcnJheSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBkdXJpbmcgYWxsb2NhdGlvbiBpbiBgc21jX2xsY19lbnF1ZXVlYC4gTWVzc2FnZXMgZ2VuZXJhdGVkIGxvY2FsbHkgYW5kIHNlbnQgb3ZlciB0aGUgbmV0d29yayBhcmUgZnVsbHkgemVyb2VkIHVzaW5nIGBtZW1zZXRgIGJlZm9yZSB0cmFuc21pc3Npb24uXFxuXFxuU2luY2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZXMgb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBwYXRjaCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmYyYTg2MDkzY2RhMTRkNmY0N2ZkOTk3YmNkNTNiZWQxZTNkYjFkZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDAyOjU3OjQ2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfbGxjLmMgYi9uZXQvc21jL3NtY19sbGMuY1xuaW5kZXggOTU0YjJmZjE4MTVjMi4uMzkzYWEwYWYxOGQxZCAxMDA2NDRcbi0tLSBhL25ldC9zbWMvc21jX2xsYy5jXG4rKysgYi9uZXQvc21jL3NtY19sbGMuY1xuQEAgLTE1Nyw2ICsxNTcsNyBAQCBzdHJ1Y3Qgc21jX2xsY19tc2dfY29uZmlybV9ya2V5IHtcdC8qIHR5cGUgMHgwNiAqL1xuIH07XG4gXG4gI2RlZmluZSBTTUNfTExDX0RFTF9SS0VZX01BWFx0OFxuKyNkZWZpbmUgU01DX0xMQ19ERUxfUktFWV9WMl9JTkxJTkVcdDlcbiAjZGVmaW5lIFNNQ19MTENfRkxBR19SS0VZX1JFVFJZXHQweDEwXG4gI2RlZmluZSBTTUNfTExDX0ZMQUdfUktFWV9ORUdcdDB4MjBcbiBcbkBAIC0xNzcsNiArMTc4LDE1IEBAIHN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92MiB7XHQvKiB0eXBlIDB4MjkgKi9cbiBcdF9fYmUzMiBya2V5W107XG4gfTtcbiBcbisvKiB0aGUgbGVhZGluZyBya2V5cyBvZiBhIERFTEVURV9SS0VZX1YyIGZpdCBpbnRvIHVuaW9uIHNtY19sbGNfbXNnICovXG4rc3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyX2lubGluZSB7XHQvKiB0eXBlIDB4MjkgKi9cbitcdHN0cnVjdCBzbWNfbGxjX2hkciBoZDtcbitcdHU4IG51bV9ya2V5cztcbitcdHU4IG51bV9pbnZhbF9ya2V5cztcbitcdHU4IHJlc2VydmVkWzJdO1xuK1x0X19iZTMyIHJrZXlbU01DX0xMQ19ERUxfUktFWV9WMl9JTkxJTkVdO1xuK307XG4rXG4gdW5pb24gc21jX2xsY19tc2cge1xuIFx0c3RydWN0IHNtY19sbGNfbXNnX2NvbmZpcm1fbGluayBjb25maXJtX2xpbms7XG4gXHRzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmsgYWRkX2xpbms7XG5AQCAtMTg2LDYgKzE5Niw3IEBAIHVuaW9uIHNtY19sbGNfbXNnIHtcbiBcbiBcdHN0cnVjdCBzbWNfbGxjX21zZ19jb25maXJtX3JrZXkgY29uZmlybV9ya2V5O1xuIFx0c3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5IGRlbGV0ZV9ya2V5O1xuK1x0c3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyX2lubGluZSBkZWxldGVfcmtleV92MjtcbiBcbiBcdHN0cnVjdCBzbWNfbGxjX21zZ190ZXN0X2xpbmsgdGVzdF9saW5rO1xuIFx0c3RydWN0IHtcbkBAIC0xOTQsMTUgKzIwNSwyNSBAQCB1bmlvbiBzbWNfbGxjX21zZyB7XG4gXHR9IHJhdztcbiB9O1xuIFxuK3N0YXRpY19hc3NlcnQoU01DX0xMQ19ERUxfUktFWV9WMl9JTkxJTkUgPT1cbitcdCAgICAgIChzaXplb2YodW5pb24gc21jX2xsY19tc2cpIC1cbitcdCAgICAgICBvZmZzZXRvZihzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXlfdjIsIHJrZXkpKSAvXG4rXHQgICAgICBzaXplb2YoX19iZTMyKSk7XG4rc3RhdGljX2Fzc2VydChvZmZzZXRvZihzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXlfdjJfaW5saW5lLCBya2V5KSA9PVxuK1x0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyLCBya2V5KSk7XG4rXG4gI2RlZmluZSBTTUNfTExDX0ZMQUdfUkVTUFx0XHQweDgwXG4gXG4gc3RydWN0IHNtY19sbGNfcWVudHJ5IHtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiBcdHN0cnVjdCBzbWNfbGluayAqbGluaztcbitcdHUxNiBib2R5X2xlbjtcbiBcdHVuaW9uIHNtY19sbGNfbXNnIG1zZztcbitcdHU4IGJvZHlbXSBfX2NvdW50ZWRfYnkoYm9keV9sZW4pO1xuIH07XG4gXG4tc3RhdGljIHZvaWQgc21jX2xsY19lbnF1ZXVlKHN0cnVjdCBzbWNfbGluayAqbGluaywgdW5pb24gc21jX2xsY19tc2cgKmxsYyk7XG4rc3RhdGljIHZvaWQgc21jX2xsY19lbnF1ZXVlKHN0cnVjdCBzbWNfbGluayAqbGluaywgdW5pb24gc21jX2xsY19tc2cgKmxsYyxcbitcdFx0XHQgICAgdTMyIGJ5dGVfbGVuKTtcbiBcbiBzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnNtY19sbGNfZmxvd19xZW50cnlfY2xyKHN0cnVjdCBzbWNfbGxjX2Zsb3cgKmZsb3cpXG4ge1xuQEAgLTk5OCwxNSArMTAxOSwyMCBAQCBzdGF0aWMgaW50IHNtY19sbGNfY2xpX2NvbmZfbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG4gXG4gc3RhdGljIHZvaWQgc21jX2xsY19zYXZlX2FkZF9saW5rX3JrZXlzKHN0cnVjdCBzbWNfbGluayAqbGluayxcbiBcdFx0XHRcdFx0c3RydWN0IHNtY19saW5rICpsaW5rX25ldyxcbi1cdFx0XHRcdFx0dTggKmxsY19tc2cpXG4rXHRcdFx0XHRcdHN0cnVjdCBzbWNfbGxjX3FlbnRyeSAqcWVudHJ5KVxuIHtcbitcdGNvbnN0IHUzMiBydF9vZmYgPSBvZmZzZXRvZihzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfdjJfZXh0LCBydCk7XG4gXHRzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfdjJfZXh0ICpleHQ7XG4gXHRzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxnciA9IGxpbmstXHUwMDNlbGdyO1xuIFx0aW50IG1heCwgaTtcbiBcbi1cdGV4dCA9IChzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfdjJfZXh0ICopKGxsY19tc2cgK1xuLVx0XHRcdFx0XHRcdCAgICAgU01DX1dSX1RYX1NJWkUpO1xuK1x0LyogdGhlIHJrZXkgY291bnQgaXRzZWxmIGlzIG9ubHkgdGhlcmUgaWYgZW5vdWdoIGJ5dGVzIGFycml2ZWQgKi9cbitcdGlmIChxZW50cnktXHUwMDNlYm9keV9sZW4gXHUwMDNjIHJ0X29mZilcbitcdFx0cmV0dXJuO1xuK1x0ZXh0ID0gKHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua192Ml9leHQgKilxZW50cnktXHUwMDNlYm9keTtcbiBcdG1heCA9IG1pbl90KHU4LCBleHQtXHUwMDNlbnVtX3JrZXlzLCBTTUNfTExDX1JLRVlTX1BFUl9NU0dfVjIpO1xuK1x0bWF4ID0gbWluX3QodTMyLCBtYXgsIChxZW50cnktXHUwMDNlYm9keV9sZW4gLSBydF9vZmYpIC9cbitcdFx0XHQgICAgICBzaXplb2YoZXh0LVx1MDAzZXJ0WzBdKSk7XG4gXHRkb3duX3dyaXRlKFx1MDAyNmxnci1cdTAwM2VybWJzX2xvY2spO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbWF4OyBpKyspIHtcbiBcdFx0c21jX3J0b2tlbl9zZXQobGdyLCBsaW5rLVx1MDAzZWxpbmtfaWR4LCBsaW5rX25ldy1cdTAwM2VsaW5rX2lkeCxcbkBAIC0xMDk5LDkgKzExMjUsNyBAQCBpbnQgc21jX2xsY19jbGlfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLCBzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnFlbnRyeSlcbiBcdGlmIChyYylcbiBcdFx0Z290byBvdXRfY2xlYXJfbG5rO1xuIFx0aWYgKGxnci1cdTAwM2VzbWNfdmVyc2lvbiA9PSBTTUNfVjIpIHtcbi1cdFx0dTggKmxsY19tc2cgPSBzbWNfbGlua19zaGFyZWRfdjJfcnhidWYobGluaykgP1xuLVx0XHRcdCh1OCAqKWxnci1cdTAwM2V3cl9yeF9idWZfdjIgOiAodTggKilsbGM7XG4tXHRcdHNtY19sbGNfc2F2ZV9hZGRfbGlua19ya2V5cyhsaW5rLCBsbmtfbmV3LCBsbGNfbXNnKTtcbitcdFx0c21jX2xsY19zYXZlX2FkZF9saW5rX3JrZXlzKGxpbmssIGxua19uZXcsIHFlbnRyeSk7XG4gXHR9IGVsc2Uge1xuIFx0XHRyYyA9IHNtY19sbGNfY2xpX3JrZXlfZXhjaGFuZ2UobGluaywgbG5rX25ldyk7XG4gXHRcdGlmIChyYykge1xuQEAgLTE0ODEsNyArMTUwNSw3IEBAIGludCBzbWNfbGxjX3Nydl9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG4gXHR9XG4gXHRhZGRfbGxjID0gXHUwMDI2cWVudHJ5LVx1MDAzZW1zZy5hZGRfbGluaztcbiBcdGlmIChhZGRfbGxjLVx1MDAzZWhkLmZsYWdzIFx1MDAyNiBTTUNfTExDX0ZMQUdfQUREX0xOS19SRUopIHtcbi1cdFx0c21jX2xsY19mbG93X3FlbnRyeV9kZWwoXHUwMDI2bGdyLVx1MDAzZWxsY19mbG93X2xjbCk7XG4rXHRcdHNtY19sbGNfZmxvd19xZW50cnlfY2xyKFx1MDAyNmxnci1cdTAwM2VsbGNfZmxvd19sY2wpO1xuIFx0XHRyYyA9IC1FTk9MSU5LO1xuIFx0XHRnb3RvIG91dF9lcnI7XG4gXHR9XG5AQCAtMTQ5Miw3ICsxNTE2LDggQEAgaW50IHNtY19sbGNfc3J2X2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluayxcbiBcdFx0bGdyX25ld190ID0gU01DX0xHUl9BU1lNTUVUUklDX1BFRVI7XG4gXHR9XG4gXHRzbWNfbGxjX3NhdmVfYWRkX2xpbmtfaW5mbyhsaW5rX25ldywgYWRkX2xsYyk7XG4tXHRzbWNfbGxjX2Zsb3dfcWVudHJ5X2RlbChcdTAwMjZsZ3ItXHUwMDNlbGxjX2Zsb3dfbGNsKTtcbitcdC8qIGFkZF9sbGMgc3RpbGwgcG9pbnRzIGludG8gcWVudHJ5LCBzbyBvbmx5IGRldGFjaCBpdCBoZXJlICovXG4rXHRzbWNfbGxjX2Zsb3dfcWVudHJ5X2NscihcdTAwMjZsZ3ItXHUwMDNlbGxjX2Zsb3dfbGNsKTtcbiBcbiBcdHJjID0gc21jX2liX3JlYWR5X2xpbmsobGlua19uZXcpO1xuIFx0aWYgKHJjKVxuQEAgLTE1MDEsOSArMTUyNiw3IEBAIGludCBzbWNfbGxjX3Nydl9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG4gXHRpZiAocmMpXG4gXHRcdGdvdG8gb3V0X2VycjtcbiBcdGlmIChsZ3ItXHUwMDNlc21jX3ZlcnNpb24gPT0gU01DX1YyKSB7XG4tXHRcdHU4ICpsbGNfbXNnID0gc21jX2xpbmtfc2hhcmVkX3YyX3J4YnVmKGxpbmspID9cbi1cdFx0XHQodTggKilsZ3ItXHUwMDNld3JfcnhfYnVmX3YyIDogKHU4ICopYWRkX2xsYztcbi1cdFx0c21jX2xsY19zYXZlX2FkZF9saW5rX3JrZXlzKGxpbmssIGxpbmtfbmV3LCBsbGNfbXNnKTtcbitcdFx0c21jX2xsY19zYXZlX2FkZF9saW5rX3JrZXlzKGxpbmssIGxpbmtfbmV3LCBxZW50cnkpO1xuIFx0fSBlbHNlIHtcbiBcdFx0cmMgPSBzbWNfbGxjX3Nydl9ya2V5X2V4Y2hhbmdlKGxpbmssIGxpbmtfbmV3KTtcbiBcdFx0aWYgKHJjKVxuQEAgLTE1MTIsMTQgKzE1MzUsMTQgQEAgaW50IHNtY19sbGNfc3J2X2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluayxcbiBcdHJjID0gc21jX2xsY19zcnZfY29uZl9saW5rKGxpbmssIGxpbmtfbmV3LCBsZ3JfbmV3X3QpO1xuIFx0aWYgKHJjKVxuIFx0XHRnb3RvIG91dF9lcnI7XG4tXHRrZnJlZShpbmkpO1xuLVx0cmV0dXJuIDA7XG4rXHRnb3RvIG91dDtcbiBvdXRfZXJyOlxuIFx0aWYgKGxpbmtfbmV3KSB7XG4gXHRcdGxpbmtfbmV3LVx1MDAzZXN0YXRlID0gU01DX0xOS19JTkFDVElWRTtcbiBcdFx0c21jcl9saW5rX2NsZWFyKGxpbmtfbmV3LCBmYWxzZSk7XG4gXHR9XG4gb3V0OlxuK1x0a2ZyZWUocWVudHJ5KTtcbiBcdGtmcmVlKGluaSk7XG4gXHRpZiAoc2VuZF9yZXFfYWRkX2xpbmtfcmVzcClcbiBcdFx0c21jX2xsY19zZW5kX3JlcV9hZGRfbGlua19yZXNwb25zZShyZXFfcWVudHJ5KTtcbkBAIC0xNTUyLDcgKzE1NzUsOCBAQCB2b2lkIHNtY19sbGNfYWRkX2xpbmtfbG9jYWwoc3RydWN0IHNtY19saW5rICpsaW5rKVxuIFx0YWRkX2xsYy5oZC5jb21tb24ubGxjX3R5cGUgPSBTTUNfTExDX0FERF9MSU5LO1xuIFx0c21jX2xsY19pbml0X21zZ19oZHIoXHUwMDI2YWRkX2xsYy5oZCwgbGluay1cdTAwM2VsZ3IsIHNpemVvZihhZGRfbGxjKSk7XG4gXHQvKiBubyBkZXYgYW5kIHBvcnQgbmVlZGVkICovXG4tXHRzbWNfbGxjX2VucXVldWUobGluaywgKHVuaW9uIHNtY19sbGNfbXNnICopXHUwMDI2YWRkX2xsYyk7XG4rXHRzbWNfbGxjX2VucXVldWUobGluaywgKHVuaW9uIHNtY19sbGNfbXNnICopXHUwMDI2YWRkX2xsYyxcbitcdFx0XHRzaXplb2YodW5pb24gc21jX2xsY19tc2cpKTtcbiB9XG4gXG4gLyogd29ya2VyIHRvIHByb2Nlc3MgYW4gYWRkIGxpbmsgbWVzc2FnZSAqL1xuQEAgLTE1ODgsNyArMTYxMiw4IEBAIHZvaWQgc21jX2xsY19zcnZfZGVsZXRlX2xpbmtfbG9jYWwoc3RydWN0IHNtY19saW5rICpsaW5rLCB1OCBkZWxfbGlua19pZClcbiBcdGRlbF9sbGMubGlua19udW0gPSBkZWxfbGlua19pZDtcbiBcdGRlbF9sbGMucmVhc29uID0gaHRvbmwoU01DX0xMQ19ERUxfTE9TVF9QQVRIKTtcbiBcdGRlbF9sbGMuaGQuZmxhZ3MgfD0gU01DX0xMQ19GTEFHX0RFTF9MSU5LX09SREVSTFk7XG4tXHRzbWNfbGxjX2VucXVldWUobGluaywgKHVuaW9uIHNtY19sbGNfbXNnICopXHUwMDI2ZGVsX2xsYyk7XG4rXHRzbWNfbGxjX2VucXVldWUobGluaywgKHVuaW9uIHNtY19sbGNfbXNnICopXHUwMDI2ZGVsX2xsYyxcbitcdFx0XHRzaXplb2YodW5pb24gc21jX2xsY19tc2cpKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgc21jX2xsY19wcm9jZXNzX2NsaV9kZWxldGVfbGluayhzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncilcbkBAIC0xODEwLDE5ICsxODM1LDI4IEBAIHN0YXRpYyB2b2lkIHNtY19sbGNfcm10X2RlbGV0ZV9ya2V5KHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyKVxuIFx0bGluayA9IHFlbnRyeS1cdTAwM2VsaW5rO1xuIFxuIFx0aWYgKGxnci1cdTAwM2VzbWNfdmVyc2lvbiA9PSBTTUNfVjIpIHtcbi1cdFx0c3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyICpsbGN2MjtcbitcdFx0c3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyX2lubGluZSAqbGxjdjI7XG4gXG4tXHRcdGlmIChzbWNfbGlua19zaGFyZWRfdjJfcnhidWYobGluaykpIHtcbi1cdFx0XHRtZW1jcHkobGdyLVx1MDAzZXdyX3J4X2J1Zl92MiwgbGxjLCBzaXplb2YoKmxsYykpO1xuLVx0XHRcdGxsY3YyID0gKHN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92MiAqKWxnci1cdTAwM2V3cl9yeF9idWZfdjI7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0bGxjdjIgPSAoc3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyICopbGxjO1xuLVx0XHR9XG4rXHRcdC8qIFRoZSBsZWFkaW5nIFNNQ19MTENfREVMX1JLRVlfVjJfSU5MSU5FIHJrZXlzIGFyZSBkZWNsYXJlZCBpblxuK1x0XHQgKiB0aGUgbWVzc2FnZSBpdHNlbGYsIGFueSBmdXJ0aGVyIG9uZXMgd2VyZSByZWNlaXZlZCBpbnRvXG4rXHRcdCAqIHFlbnRyeS1cdTAwM2Vib2R5LlxuK1x0XHQgKi9cbitcdFx0bGxjdjIgPSBcdTAwMjZxZW50cnktXHUwMDNlbXNnLmRlbGV0ZV9ya2V5X3YyO1xuIFx0XHRsbGN2Mi1cdTAwM2VudW1faW52YWxfcmtleXMgPSAwO1xuIFxuIFx0XHRtYXggPSBtaW5fdCh1OCwgbGxjdjItXHUwMDNlbnVtX3JrZXlzLCBTTUNfTExDX1JLRVlTX1BFUl9NU0dfVjIpO1xuK1x0XHRtYXggPSBtaW5fdCh1MzIsIG1heCwgU01DX0xMQ19ERUxfUktFWV9WMl9JTkxJTkUgK1xuK1x0XHRcdFx0ICAgICAgcWVudHJ5LVx1MDAzZWJvZHlfbGVuIC8gc2l6ZW9mKF9fYmUzMikpO1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtYXg7IGkrKykge1xuLVx0XHRcdGlmIChzbWNfcnRva2VuX2RlbGV0ZShsaW5rLCBsbGN2Mi1cdTAwM2Vya2V5W2ldKSlcbitcdFx0XHRfX2JlMzIgcmtleTtcbitcbitcdFx0XHRpZiAoaSBcdTAwM2MgU01DX0xMQ19ERUxfUktFWV9WMl9JTkxJTkUpXG4rXHRcdFx0XHRya2V5ID0gbGxjdjItXHUwMDNlcmtleVtpXTtcbitcdFx0XHRlbHNlXG4rXHRcdFx0XHRtZW1jcHkoXHUwMDI2cmtleSwgcWVudHJ5LVx1MDAzZWJvZHkgK1xuK1x0XHRcdFx0XHQgICAgICAoaSAtIFNNQ19MTENfREVMX1JLRVlfVjJfSU5MSU5FKSAqXG4rXHRcdFx0XHRcdCAgICAgIHNpemVvZihya2V5KSwgc2l6ZW9mKHJrZXkpKTtcbitcdFx0XHRpZiAoc21jX3J0b2tlbl9kZWxldGUobGluaywgcmtleSkpXG4gXHRcdFx0XHRsbGN2Mi1cdTAwM2VudW1faW52YWxfcmtleXMrKztcbiBcdFx0fVxuIFx0XHRtZW1zZXQoXHUwMDI2bGxjLVx1MDAzZXJrZXlbMF0sIDAsIHNpemVvZihsbGMtXHUwMDNlcmtleSkpO1xuQEAgLTIwNjMsMTggKzIwOTcsNTIgQEAgc3RhdGljIHZvaWQgc21jX2xsY19yeF9yZXNwb25zZShzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG4gXHR3YWtlX3VwKFx1MDAyNmxpbmstXHUwMDNlbGdyLVx1MDAzZWxsY19tc2dfd2FpdGVyKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgc21jX2xsY19lbnF1ZXVlKHN0cnVjdCBzbWNfbGluayAqbGluaywgdW5pb24gc21jX2xsY19tc2cgKmxsYylcbisvKiB0aGUgbG9uZ2VzdCB0YWlsIGVpdGhlciByZWFkZXIgb2YgcWVudHJ5LVx1MDAzZWJvZHkgY2FuIHVzZSAqL1xuK3N0YXRpYyB1MzIgc21jX2xsY19tYXhfYm9keV9sZW4odW5pb24gc21jX2xsY19tc2cgKmxsYylcbit7XG4rXHRzd2l0Y2ggKGxsYy1cdTAwM2VyYXcuaGRyLmNvbW1vbi5sbGNfdHlwZSkge1xuK1x0Y2FzZSBTTUNfTExDX0FERF9MSU5LOlxuK1x0XHRyZXR1cm4gb2Zmc2V0b2Yoc3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rX3YyX2V4dCwgcnQpICtcbitcdFx0ICAgICAgIFNNQ19MTENfUktFWVNfUEVSX01TR19WMiAqXG4rXHRcdCAgICAgICBzaXplb2Yoc3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rX2NvbnRfcnQpO1xuK1x0Y2FzZSBTTUNfTExDX0RFTEVURV9SS0VZOlxuK1x0XHRyZXR1cm4gKFNNQ19MTENfUktFWVNfUEVSX01TR19WMiAtXG4rXHRcdFx0U01DX0xMQ19ERUxfUktFWV9WMl9JTkxJTkUpICogc2l6ZW9mKF9fYmUzMik7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gMDtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgc21jX2xsY19lbnF1ZXVlKHN0cnVjdCBzbWNfbGluayAqbGluaywgdW5pb24gc21jX2xsY19tc2cgKmxsYyxcbitcdFx0XHQgICAgdTMyIGJ5dGVfbGVuKVxuIHtcbiBcdHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyID0gbGluay1cdTAwM2VsZ3I7XG4gXHRzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnFlbnRyeTtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHR1MTYgYm9keV9sZW4gPSAwO1xuK1xuK1x0LyogVjIgbWVzc2FnZXMgY2FuIGJlIGxvbmdlciB0aGFuIHRoZSBpbmxpbmUgdW5pb24gc21jX2xsY19tc2cuIENhcnJ5XG4rXHQgKiB0aGUgcmVtYWluZGVyIGluIHRoZSBxZW50cnkgaXRzZWxmLCBzbyB0aGF0IGl0cyBsaWZldGltZSBhbmQgaXRzXG4rXHQgKiBsZW5ndGggbWF0Y2ggdGhlIG1lc3NhZ2UgdGhlIHBlZXIgYWN0dWFsbHkgc2VudC5cbitcdCAqL1xuK1x0aWYgKGxnci1cdTAwM2VzbWNfdmVyc2lvbiA9PSBTTUNfVjIgXHUwMDI2XHUwMDI2IGJ5dGVfbGVuIFx1MDAzZSBTTUNfV1JfVFhfU0laRSlcbitcdFx0Ym9keV9sZW4gPSBtaW5fdCh1MzIsIGJ5dGVfbGVuLCBTTUNfV1JfQlVGX1YyX1NJWkUpIC1cbitcdFx0XHQgICBTTUNfV1JfVFhfU0laRTtcbitcdGJvZHlfbGVuID0gbWluX3QodTMyLCBib2R5X2xlbiwgc21jX2xsY19tYXhfYm9keV9sZW4obGxjKSk7XG4gXG4tXHRxZW50cnkgPSBrbWFsbG9jX29iaigqcWVudHJ5LCBHRlBfQVRPTUlDKTtcbitcdHFlbnRyeSA9IGttYWxsb2NfZmxleCgqcWVudHJ5LCBib2R5LCBib2R5X2xlbiwgR0ZQX0FUT01JQyk7XG4gXHRpZiAoIXFlbnRyeSlcbiBcdFx0cmV0dXJuO1xuK1x0cWVudHJ5LVx1MDAzZWJvZHlfbGVuID0gYm9keV9sZW47XG4gXHRxZW50cnktXHUwMDNlbGluayA9IGxpbms7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZxZW50cnktXHUwMDNlbGlzdCk7XG4gXHRtZW1jcHkoXHUwMDI2cWVudHJ5LVx1MDAzZW1zZywgbGxjLCBzaXplb2YodW5pb24gc21jX2xsY19tc2cpKTtcbitcdGlmIChib2R5X2xlbikge1xuK1x0XHR1OCAqc3JjID0gc21jX2xpbmtfc2hhcmVkX3YyX3J4YnVmKGxpbmspID9cbitcdFx0XHQodTggKilsZ3ItXHUwMDNld3JfcnhfYnVmX3YyIDogKHU4ICopbGxjO1xuK1xuK1x0XHRtZW1jcHkocWVudHJ5LVx1MDAzZWJvZHksIHNyYyArIFNNQ19XUl9UWF9TSVpFLCBib2R5X2xlbik7XG4rXHR9XG4gXG4gXHQvKiBwcm9jZXNzIHJlc3BvbnNlcyBpbW1lZGlhdGVseSAqL1xuIFx0aWYgKChsbGMtXHUwMDNlcmF3Lmhkci5mbGFncyBcdTAwMjYgU01DX0xMQ19GTEFHX1JFU1ApIFx1MDAyNlx1MDAyNlxuQEAgLTIxMDYsNyArMjE3NCw3IEBAIHN0YXRpYyB2b2lkIHNtY19sbGNfcnhfaGFuZGxlcihzdHJ1Y3QgaWJfd2MgKndjLCB2b2lkICpidWYpXG4gXHRcdFx0cmV0dXJuOyAvKiBpbnZhbGlkIG1lc3NhZ2UgKi9cbiBcdH1cbiBcbi1cdHNtY19sbGNfZW5xdWV1ZShsaW5rLCBsbGMpO1xuK1x0c21jX2xsY19lbnF1ZXVlKGxpbmssIGxsYywgd2MtXHUwMDNlYnl0ZV9sZW4pO1xuIH1cbiBcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogd29ya2VyLCB1dGlscyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfd3IuYyBiL25ldC9zbWMvc21jX3dyLmNcbmluZGV4IDU5YzkyYjQ2OTQ1YzUuLjk3YmE0Njg5M2IxN2YgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL3NtY193ci5jXG4rKysgYi9uZXQvc21jL3NtY193ci5jXG5AQCAtNjAyLDkgKzYwMiw5IEBAIHN0YXRpYyB2b2lkIHNtY193cl9pbml0X3NnZShzdHJ1Y3Qgc21jX2xpbmsgKmxuaylcbiBcbiBcdC8qIFdpdGggU01DLVJ2MiB0aGVyZSBjYW4gYmUgbWVzc2FnZXMgbGFyZ2VyIHRoYW4gU01DX1dSX1RYX1NJWkUuXG4gXHQgKiBFYWNoIGliX3JlY3Zfd3IgZ2V0cyAyIHNnZXMsIHRoZSBzZWNvbmQgb25lIGlzIGEgc3BpbGxvdmVyIGJ1ZmZlclxuLVx0ICogYW5kIHRoZSBzYW1lIGJ1ZmZlciBmb3IgYWxsIHNnZXMuIFdoZW4gYSBsYXJnZXIgbWVzc2FnZSBhcnJpdmVkIHRoZW5cbi1cdCAqIHRoZSBjb250ZW50IG9mIHRoZSBmaXJzdCBzbWFsbCBzZ2UgaXMgY29waWVkIHRvIHRoZSBiZWdpbm5pbmcgb2Zcbi1cdCAqIHRoZSBsYXJnZXIgc3BpbGxvdmVyIGJ1ZmZlciwgYWxsb3dpbmcgZWFzeSBkYXRhIG1hcHBpbmcuXG4rXHQgKiBhbmQgdGhlIHNhbWUgYnVmZmVyIGZvciBhbGwgc2dlcy4gVGhlIHNwaWxsb3ZlciBzZ2Ugc3RhcnRzIGF0XG4rXHQgKiBTTUNfV1JfVFhfU0laRSwgc28gdGhlIGxlYWRpbmcgYnl0ZXMgb2YgdGhhdCBidWZmZXIgYXJlIG5ldmVyXG4rXHQgKiB3cml0dGVuLlxuIFx0ICovXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBsbmstXHUwMDNld3JfcnhfY250OyBpKyspIHtcbiBcdFx0aW50IHggPSBpICogbG5rLVx1MDAzZXdyX3J4X3NnZV9jbnQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMjo1ODo0MS45NDU2NjA1OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTAxNzQzNDU3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gSnVzdGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggbmVlZHMgYSBjbG9zZXIgbG9vayB0byBzZWUgaWYgaXQgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGUgY2hhbmdlcyBhcmUgaW4gYG5ldC9zbWMvc21jX2xsYy5jYCBhbmQgYG5ldC9zbWMvc21jX3dyLmNgLCBhbmQgdGhleSdyZSBmb2N1c2VkIG9uIGhvdyBTTUMgTExDIG1lc3NhZ2VzIGFyZSBoYW5kbGVkLCBlc3BlY2lhbGx5IGZvciBTTUMtUnYyLCB3aGVyZSBtZXNzYWdlIHNpemVzIGNhbiBiZSBsYXJnZXIgdGhhbiB3aGF0J3Mgbm9ybWFsbHkgZXhwZWN0ZWQgKGBTTUNfV1JfVFhfU0laRWApLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gc2NydXRpbml6ZSBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZSBrZXkgYXJlYSBpcyBob3cgZGF0YSBpcyByZWNlaXZlZCBmcm9tIHRoZSBuZXR3b3JrIGFuZCBzdG9yZWQgd2l0aGluIHRoZSBgcWVudHJ5YCBzdHJ1Y3R1cmUuIGBzbWNfbGxjX2VucXVldWVgIHVzZXMgYGttYWxsb2NfZmxleGAuIE5vdywgYGttYWxsb2NfZmxleGAgZG9lcyAqbm90KiB6ZXJvIHRoZSBtZW1vcnksIGl0IGFsbG9jYXRlcyBtZW1vcnkgd2l0aCBgR0ZQX0FUT01JQ2Agd2l0aG91dCBgX19HRlBfWkVST2AuIEhvd2V2ZXIsIGl0ICpzZWVtcyogbGlrZSBldmVyeXRoaW5nIHdpdGhpbiBgcWVudHJ5YCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBvciBjb3BpZWQgZnJvbSBhbiBlc3RhYmxpc2hlZCBzb3VyY2U6XG4qICAgYGJvZHlfbGVuYCBpcyBhc3NpZ25lZC5cbiogICBgbGlua2AgaXMgYXNzaWduZWQuXG4qICAgYGxpc3RgIGlzIGluaXRpYWxpemVkLlxuKiAgIGBtc2dgIGlzIGNvcGllZCBmcm9tIGBsbGNgXG4qICAgYGJvZHlgIGlzIGNvcGllZCBmcm9tIGBzcmMgKyBTTUNfV1JfVFhfU0laRWAgZm9yIGBib2R5X2xlbmAgYnl0ZXMuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIHRoYXQncyBhY2N1cmF0ZS5cblxuTm93LCBwYWRkaW5nIGluIGBzdHJ1Y3Qgc21jX2xsY19xZW50cnlgIGNvdWxkIGFsc28gZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQncyBicmVhayBpdCBkb3duOiBgbGlzdGAgaXMgMTYgYnl0ZXMuIGBsaW5rYCBpcyA4IGJ5dGVzLiBgYm9keV9sZW5gIGlzIDIgYnl0ZXMuIFNvIHRoZXJlIHdvdWxkIGJlIDYgYnl0ZXMgb2YgcGFkZGluZyBiZWZvcmUgYG1zZ2AgKGFzc3VtaW5nIGFuIDgtYnl0ZSBhbGlnbm1lbnQgaXMgcmVxdWlyZWQuIEhvd2V2ZXIsIHRoZXJlIG1pZ2h0IGJlIHNtYWxsZXIgYWxpZ25tZW50IHJlcXVpcmVtZW50cy4pIEkgc2hvdWxkIGNoZWNrIHRoZSBhbGlnbm1lbnQgb2YgYHVuaW9uIHNtY19sbGNfbXNnYCB0byBtYWtlIHN1cmUgdGhlcmUncyBubyBzdWJ0bGUgaXNzdWUgdGhlcmUuIEknbSBnb2luZyB0byBsb29rIHVwIHRoZSBjb250ZW50cyBvZiBgdW5pb24gc21jX2xsY19tc2dgLlxuXG5Eb2VzIHRoaXMgc3RydWN0IGV2ZXIgbGVhdmUgdGhlIGtlcm5lbD8gSXQgbG9va3MgbGlrZSBgcWVudHJ5YCBpcyBpbnRlcm5hbCBhbmQgdXNlZCB0byBxdWV1ZSBtZXNzYWdlcyBmb3Igd29ya2VyIHRocmVhZHMuIEl0J3MgYWxsb2NhdGVkLCBwb3B1bGF0ZWQsIHByb2Nlc3NlZCwgYW5kIHRoZW4gZnJlZWQuIEZvciBleGFtcGxlLCBgc21jX2xsY19zcnZfYWRkX2xpbmtgIGZyZWVzIHRoZSBgcWVudHJ5YC5cblxuSXMgdGhlIGRhdGEgZXZlciBjb3BpZWQgYmFjayBvdXQ/IE5vLCBpdCBkb2Vzbid0IGxvb2sgbGlrZSBgcWVudHJ5YCBpdHNlbGYgaXMgc2VudCBvdmVyIHRoZSBuZXR3b3JrLiBJbiBgc21jX2xsY19zcnZfYWRkX2xpbmtgLCBpdCBsb29rcyBsaWtlIGZpZWxkcyBvZiBgcWVudHJ5LVx1MDAzZW1zZ2AgYXJlIGFjY2Vzc2VkLCBidXQgdGhlIGZ1bGwgc3RydWN0dXJlIGlzbid0LlxuXG5Ob3csIGEgcG90ZW50aWFsIGlzc3VlIGFyaXNlcyB3aXRoIGBzbWNfbGxjX2FkZF9saW5rX2xvY2FsYC4gQSBsb2NhbCB2YXJpYWJsZSBgYWRkX2xsY2AgaXMgY3JlYXRlZCwgYW5kIHRoZW4gcGFzc2VkIHRvIGBzbWNfbGxjX2VucXVldWVgLiBUaGVyZSdzIGEgYG1lbWNweWAgZnJvbSB0aGUgc3RhY2sgdmFyaWFibGUgYGFkZF9sbGNgIHRvIGBxZW50cnktXHUwMDNlbXNnYCB1c2luZyBgc2l6ZW9mKHVuaW9uIHNtY19sbGNfbXNnKWAuIElmIGBhZGRfbGxjYCBpcyBzbWFsbGVyLCB0aGVuIHRoaXMgd291bGQgcmVzdWx0IGluIGFuIG91dC1vZi1ib3VuZHMgcmVhZCEgSSBuZWVkIHRvIHZlcmlmeSBzaXplcyBvZiBgc3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rYCBhbmQgYHVuaW9uIHNtY19sbGNfbXNnYC4gSSdsbCB1c2UgYGdyZXBwZXJgIHRvIHNlYXJjaCBmb3IgYHNtY19sbGNfbXNnX2FkZF9saW5rYCBhbmQgYHVuaW9uIHNtY19sbGNfbXNnYCBhbmQgdGhlaXIgZGVmaW5pdGlvbnMgaW4gdGhlIGNvZGUuIFRoaXMgaXMgdGhlIGNydWNpYWwgcG9pbnQgZm9yIGEgcG90ZW50aWFsIEtNU0FOIGlzc3VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTExLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc5NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAyOjU4OjU2Ljk2MzA5ODc1MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc4MjI0ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rIFxcXFx7XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX2xsYy5jPTQ3PXN0cnVjdCBzbWNfbGxjX21zZ19jb25maXJtX2xpbmsge1xcdC8qIHR5cGUgMHgwMSAqL1xcbi0tXFxubmV0L3NtYy9zbWNfbGxjLmMtNjEtXFxubmV0L3NtYy9zbWNfbGxjLmM6NjI6c3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rIHtcXHRcXHQvKiB0eXBlIDB4MDIgKi9cXG5uZXQvc21jL3NtY19sbGMuYy02My1cXHRzdHJ1Y3Qgc21jX2xsY19oZHIgaGQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAyOjU4OjU3LjAxMDkyNzczWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNzM2OTc5OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua2AqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgYHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua2AuIFRpbWUgdG8gZGlnIGludG8gdGhlIGRldGFpbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb21wbGV0ZSBkZWZpbml0aW9uLCBpbnNpZGUgYW5kIG91dC4gSXQncyBub3QgZW5vdWdoIHRvIGhhdmUgYSBnZW5lcmFsIGlkZWE7IEkgbmVlZCB0aGUgZnVsbCBwaWN0dXJlLCBhbGwgdGhlIG1lbWJlciB2YXJpYWJsZXMsIGRhdGEgdHlwZXMsIGFuZCBhbnkgYXNzb2NpYXRlZCBjb21tZW50cy4gSSBuZWVkIHRvIHNlZSBleGFjdGx5ICpob3cqIHRoaXMgc3RydWN0IGlzIGRlZmluZWQuIFdoYXQgYXJlIGl0cyBjb21wb25lbnRzPyBXaGF0IGluZm9ybWF0aW9uIGRvZXMgaXQgY2Fycnk/IElzIHRoZXJlIGFueXRoaW5nIHN1YnRsZSBvciBub24tb2J2aW91cyB0aGF0IEkgbWlnaHQgbWlzcyBpZiBJIGp1c3Qgc2tpbSB0aGUgc3VyZmFjZT8gVGhpcyB1bmRlcnN0YW5kaW5nIGlzIGZvdW5kYXRpb25hbCB0byB3b3JraW5nIHdpdGggdGhlIG1lc3NhZ2UgYW5kIGtub3dpbmcgd2hhdCB0aGUgc3RydWN0IGlzIGRlc2lnbmVkIHRvIGRvLiBNeSBqb2IgaXMgdG8ga25vdyBldmVyeSBub29rIGFuZCBjcmFubnkgb2YgdGhpcyBzdHJ1Y3QsIEknbSBub3QgZ29pbmcgdG8gbGVhdmUgaXQgdXAgdG8gYXNzdW1wdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTIzMywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAyOjU5OjAwLjE4NDYyODE4MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5ODUxMjksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGluayBcXFxcey4qXFxcXH1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAyOjU5OjAwLjIzMTYyNDY2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NTY1MzU3NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIFNNQyBMTEMgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGEgbXVsdGktbGluZSBjb250ZXh0LiBMZXQncyBnZXQgc3RyYWlnaHQgdG8gdGhlIHBvaW50OiBJJ20gcHVsbGluZyB1cCBgbmV0L3NtYy9zbWNfbGxjLmNgIOKAkyBzcGVjaWZpY2FsbHksIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhcm91bmQgbGluZSA2Mi4gSSdtIHByb2JhYmx5IGFmdGVyIHNvbWV0aGluZyBzcGVjaWZpYyBpbiB0aGUgTG93ZXIgTGF5ZXIgQ29udHJvbCAoTExDKSBtb2R1bGU7IGxpa2VseSBkZWFsaW5nIHdpdGggaG93IFNNQyBoYW5kbGVzIGxvd2VyLWxldmVsIGxpbmsgY29udHJvbCB3aXRoaW4gdGhlIG5ldHdvcmsgc3RhY2suIEkgYW50aWNpcGF0ZSB0aGVyZSBtaWdodCBiZSBzb21lIHN1YnRsZXR5IHRoZXJlLCBvciBJJ3ZlIGhhZCBhIHJlY2VudCBkaXNjdXNzaW9uIGFuZCBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoYXQgcGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUwMywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAyOjU5OjAzLjk4ODE2Mzc1NVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzc4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NtYy9zbWNfbGxjLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTA6XFx0XFx0dTggc2VuZGVyX2dpZFtTTUNfR0lEX1NJWkVdO1xcbiAgNTE6XFx0XFx0dTggc2VuZGVyX3FwX251bVszXTtcXG4gIDUyOlxcdFxcdHU4IGxpbmtfbnVtO1xcbiAgNTM6XFx0XFx0dTggbGlua191aWRbU01DX0xHUl9JRF9TSVpFXTtcXG4gIDU0OlxcdFxcdHU4IG1heF9saW5rcztcXG4gIDU1OlxcdFxcdHU4IG1heF9jb25ucztcXG4gIDU2OlxcdFxcdHU4IHJlc2VydmVkWzhdO1xcbiAgNTc6XFx0fTtcXG4gIDU4OlxcdFxcbiAgNTk6XFx0I2RlZmluZSBTTUNfTExDX0ZMQUdfQUREX0xOS19SRUpcXHQweDQwXFxuICA2MDpcXHQjZGVmaW5lIFNNQ19MTENfUkVKX1JTTl9OT19BTFRfUEFUSFxcdDFcXG4gIDYxOlxcdFxcbiAgNjI6XFx0c3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rIHtcXHRcXHQvKiB0eXBlIDB4MDIgKi9cXG4gIDYzOlxcdFxcdHN0cnVjdCBzbWNfbGxjX2hkciBoZDtcXG4gIDY0OlxcdFxcdHU4IHNlbmRlcl9tYWNbRVRIX0FMRU5dO1xcbiAgNjU6XFx0XFx0dTggcmVzZXJ2ZWQyWzJdO1xcbiAgNjY6XFx0XFx0dTggc2VuZGVyX2dpZFtTTUNfR0lEX1NJWkVdO1xcbiAgNjc6XFx0XFx0dTggc2VuZGVyX3FwX251bVszXTtcXG4gIDY4OlxcdFxcdHU4IGxpbmtfbnVtO1xcbiAgNjk6XFx0I2lmIGRlZmluZWQoX19CSUdfRU5ESUFOX0JJVEZJRUxEKVxcbiAgNzA6XFx0XFx0dTggcmVzZXJ2ZWQzIDogNCxcXG4gIDcxOlxcdFxcdCAgIHFwX210dSAgIDogNDtcXG4gIDcyOlxcdCNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKVxcbiAgNzM6XFx0XFx0dTggcXBfbXR1ICAgOiA0LFxcbiAgNzQ6XFx0XFx0ICAgcmVzZXJ2ZWQzIDogNDtcXG4gIDc1OlxcdCNlbmRpZlxcbiAgNzY6XFx0XFx0dTggaW5pdGlhbF9wc25bM107XFxuICA3NzpcXHRcXHR1OCByZXNlcnZlZFs4XTtcXG4gIDc4OlxcdH07XFxuICA3OTpcXHRcXG4gIDgwOlxcdHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua19jb250X3J0IHtcXG4gIDgxOlxcdFxcdF9fYmUzMiBybWJfa2V5O1xcbiAgODI6XFx0XFx0X19iZTMyIHJtYl9rZXlfbmV3O1xcbiAgODM6XFx0XFx0X19iZTY0IHJtYl92YWRkcl9uZXc7XFxuICA4NDpcXHR9O1xcbiAgODU6XFx0XFxuICA4NjpcXHRzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfdjJfZXh0IHtcXG4gIDg3OlxcdCNpZiBkZWZpbmVkKF9fQklHX0VORElBTl9CSVRGSUVMRClcXG4gIDg4OlxcdFxcdHU4IHYyX2RpcmVjdCA6IDEsXFxuICA4OTpcXHRcXHQgICByZXNlcnZlZCAgOiA3O1xcbiAgOTA6XFx0I2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpXFxuICA5MTpcXHRcXHR1OCByZXNlcnZlZCAgOiA3LFxcbiAgOTI6XFx0XFx0ICAgdjJfZGlyZWN0IDogMTtcXG4gIDkzOlxcdCNlbmRpZlxcbiAgOTQ6XFx0XFx0dTggcmVzZXJ2ZWQyO1xcbiAgOTU6XFx0XFx0dTggY2xpZW50X3RhcmdldF9naWRbU01DX0dJRF9TSVpFXTtcXG4gIDk2OlxcdFxcdHU4IHJlc2VydmVkM1s4XTtcXG4gIDk3OlxcdFxcdHUxNiBudW1fcmtleXM7XFxuICA5ODpcXHRcXHRzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfY29udF9ydCBydFtdO1xcbiAgOTk6XFx0fSBfX3BhY2tlZDtcXHRcXHQvKiBmb3JtYXQgZGVmaW5lZCBpblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMjo1OTowMy45ODgzMDM1MjVaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcwNjY0NjIyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgYHVuaW9uIHNtY19sbGNfbXNnYCBTdHJ1Y3R1cmUqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGB1bmlvbiBzbWNfbGxjX21zZ2AuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHRoaW5rIGFib3V0IHRoZSB0eXBpY2FsIHVzZS1jYXNlcyB0aGlzIGtpbmQgb2Ygc3RydWN0dXJlIHN1Z2dlc3RzLiBJdCdzIGEgdW5pb24sIHdoaWNoIHNjcmVhbXMgXCJtZW1vcnkgZWZmaWNpZW5jeVwiIGFuZCBcImFsdGVybmF0aXZlIGludGVycHJldGF0aW9ucyBvZiB0aGUgc2FtZSBtZW1vcnkgbG9jYXRpb24uXCIgSW4gYSBTeXN0ZW0gTWFuYWdlbWVudCBDb250cm9sbGVyIChTTUMpIG9yIExvdy1MZXZlbCBMaW5rIENvbnRyb2xsZXIgKExMQykgY29udGV4dCwgSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IGRpZmZlcmVudCBtZXNzYWdlIHR5cGVzIHRoYXQgbWlnaHQgc2hhcmUgc29tZSBjb21tb24gaGVhZGVyIGluZm9ybWF0aW9uLCBidXQgaGF2ZSBkaXN0aW5jdCBkYXRhIHBheWxvYWRzIGRlcGVuZGluZyBvbiB0aGUgc3BlY2lmaWMgY29tbWFuZCBvciBldmVudC5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgZGlmZmVyZW50IG1lbWJlcnMgcmVwcmVzZW50LiBJcyBpdCBhIHVuaW9uIG9mIGRhdGEgc3RydWN0dXJlcywgb2YgcHJpbWl0aXZlIHR5cGVzLCBvciBhIGNvbWJpbmF0aW9uPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBzaXplPyBUaGUgc2l6ZSB3aWxsIGRpY3RhdGUgaG93IG11Y2ggaW5mb3JtYXRpb24gY2FuIGJlIGNvbnZleWVkIGluIGEgc2luZ2xlIG1lc3NhZ2UuIEFyZSB0aGVyZSBhbGlnbm1lbnQgY29uc2lkZXJhdGlvbnMgaGVyZSwgdG9vPyBJJ2xsIHByb2JhYmx5IG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBwbGF0Zm9ybSBhbmQgdGhlIGNvbW11bmljYXRpb24gcHJvdG9jb2wgdG8gdHJ1bHkgZ3Jhc3AgdGhlIHN0cnVjdHVyZSdzIHJvbGUuXG5cbkknbSBzdGFydGluZyB0byBmb3JtdWxhdGUgcXVlc3Rpb25zIGluIG15IGhlYWQ6IFdoYXQgaXMgdGhlIG92ZXJhbGwgbWVzc2FnZSBmb3JtYXQ/IFdoYXQgYXJlIHRoZSB2YWxpZCBtZXNzYWdlIHR5cGVzPyBIb3cgYXJlIHRoZXkgZGlzdGluZ3Vpc2hlZD8gSXMgdGhlcmUgYSB0eXBlIGZpZWxkLCBvciBkbyB3ZSByZWx5IG9uIGltcGxpY2l0IGtub3dsZWRnZSBvZiB0aGUgc2VuZGluZy9yZWNlaXZpbmcgbW9kdWxlcz8gSG93IGRvZXMgdGhpcyBzdHJ1Y3R1cmUgaW50ZXJhY3Qgd2l0aCB0aGUgcmVzdCBvZiB0aGUgU01DL0xMQyBpbnRlcmZhY2UsIHN1Y2ggYXMgdGhlIGhhcmR3YXJlIHJlZ2lzdGVycz8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBhcmVhcyBmb3IgcG9pbnRlciBhbGlhc2luZyBjb25mbGljdHM/IEFyZSB0aGVyZSBhbnkgY29tcGlsZXIgb3B0aW1pemF0aW9ucyB0aGF0IG1pZ2h0IGludGVyZmVyZSB3aXRoIGludGVuZGVkIHVzYWdlPyBXaGF0IGlzIHRoZSByYXRpb25hbGUgYmVoaW5kIHNlbGVjdGluZyBhIHVuaW9uIGZvciB0aGlzIG1lc3NhZ2Ugc3RydWN0dXJlPyBJdCBpbXBsaWVzIHRoZXJlIHdpbGwgYmUgYSBjb21tb24gaGVhZGVyIHdpdGggdHlwZSBpbmZvcm1hdGlvbiwgYW5kIHRoZW4gZWFjaCBtZXNzYWdlIHR5cGUgY2FuIGhhdmUgdGhlaXIgb3duIHNldCBvZiBkYXRhIGZpZWxkcy4gSG93IGRvZXMgdGhpcyBjb21wYXJlIHdpdGggb3RoZXIgYXBwcm9hY2hlcywgc3VjaCBhcyBoYXZpbmcgYSBzZXBhcmF0ZSBzdHJ1Y3QgZm9yIGVhY2ggbWVzc2FnZSB0eXBlPyBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBjb2RlIHRvIGdldCB0aGUgYW5zd2VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQ4OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDI6NTk6MDguNjk0OTUyNDQ0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTY5NzM5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1bmlvbiBzbWNfbGxjX21zZyBcXFxce1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL3NtY19sbGMuYz0xODI9c3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyX2lubGluZSB7XFx0LyogdHlwZSAweDI5ICovXFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYy0xODktXFxubmV0L3NtYy9zbWNfbGxjLmM6MTkwOnVuaW9uIHNtY19sbGNfbXNnIHtcXG5uZXQvc21jL3NtY19sbGMuYy0xOTEtXFx0c3RydWN0IHNtY19sbGNfbXNnX2NvbmZpcm1fbGluayBjb25maXJtX2xpbms7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAyOjU5OjA4Ljc1MDY1NTM0MloiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzI1NjI4MDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoYXQgY29kZSBzbmlwcGV0OlxuXG4qKkRpdmluZyBpbnRvIGB1bmlvbiBzbWNfbGxjX21zZ2AqKlxuXG5Pa2F5LCBsZXQncyBkaXNzZWN0IHRoaXMuIFwiTGV0J3MgcmVhZCBgdW5pb24gc21jX2xsY19tc2dgLlwiIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgaW1tZWRpYXRlbHkga25vdyB0aGlzIGlzIGxpa2VseSBhIEMgb3IgQysrIHVuaW9uIGRlZmluaXRpb24sIHdoaWNoIG1lYW5zIGl0J3MgYSBtZW1vcnktZWZmaWNpZW50IHdheSB0byByZXByZXNlbnQgZGlmZmVyZW50IGRhdGEgc3RydWN0dXJlcyBvciBtZXNzYWdlIGZvcm1hdHMsIGFsbCBvY2N1cHlpbmcgdGhlIHNhbWUgbWVtb3J5IGxvY2F0aW9uLiBUaGUgbmFtZSBgc21jX2xsY19tc2dgIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgdGhpcyB1bmlvbiBpcyByZWxhdGVkIHRvIHRoZSBTdWItTWVkaXVtIEFjY2VzcyBDb250cm9sIChTTUMpIGFuZCBMb2dpY2FsIExpbmsgQ29udHJvbCAoTExDKSBsYXllcnMsIGxpa2VseSBpbiBhIG5ldHdvcmsgY29tbXVuaWNhdGlvbiBjb250ZXh0LiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGlmZmVyZW50IG1lbWJlcnMgd2l0aGluIHRoaXMgdW5pb24gdG8gZnVsbHkgZ3Jhc3AgaXRzIHB1cnBvc2UuIFdoYXQgcG9zc2libGUgbWVzc2FnZSB0eXBlcyBvciBkYXRhIHN0cnVjdHVyZXMgY291bGQgdGhpcyBiZSBoYW5kbGluZyBhdCB0aGF0IGxheWVyPyBMaWtlbHksIEknbGwgZmluZCBkaWZmZXJlbnQgc3RydWN0dXJlcyByZXByZXNlbnRpbmcgdGhpbmdzIGxpa2UgY29udHJvbCBmcmFtZXMsIGRhdGEgZnJhbWVzLCBhY2tub3dsZWRnbWVudHMsIG9yIHZhcmlvdXMgcHJvdG9jb2wtc3BlY2lmaWMgbWVzc2FnZXMuIFRoZSBjbGV2ZXIgdXNlIG9mIGEgdW5pb24gc3VnZ2VzdHMgYSBkZWxpYmVyYXRlIGRlc2lnbiBjaG9pY2UgdG8gc2F2ZSBzcGFjZSBvciBoYW5kbGUgbWVzc2FnZSB2YXJpYXRpb25zIGVmZmVjdGl2ZWx5LiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhhdCBkZWNvZGluZyB0aGUgdW5pb24gd2lsbCByZXF1aXJlIGNoZWNraW5nIGEgdHlwZSBmaWVsZCBvciBhIGRpc2NyaW1pbmF0b3IgdG8gdW5kZXJzdGFuZCB3aGljaCBkYXRhIHN0cnVjdHVyZSBpcyBjdXJyZW50bHkgYWN0aXZlLiBMZXQncyBzZWUgd2hhdCdzIGluc2lkZSBhbmQgd2hhdCBpdCdzIHJlYWxseSBhYm91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwNzcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMjo1OToxNC4wNzYyODg0MjRaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxOTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zbWMvc21jX2xsYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5MDpcXHR1bmlvbiBzbWNfbGxjX21zZyB7XFxuIDE5MTpcXHRcXHRzdHJ1Y3Qgc21jX2xsY19tc2dfY29uZmlybV9saW5rIGNvbmZpcm1fbGluaztcXG4gMTkyOlxcdFxcdHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGluayBhZGRfbGluaztcXG4gMTkzOlxcdFxcdHN0cnVjdCBzbWNfbGxjX21zZ19yZXFfYWRkX2xpbmtfdjIgcmVxX2FkZF9saW5rO1xcbiAxOTQ6XFx0XFx0c3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rX2NvbnQgYWRkX2xpbmtfY29udDtcXG4gMTk1OlxcdFxcdHN0cnVjdCBzbWNfbGxjX21zZ19kZWxfbGluayBkZWxldGVfbGluaztcXG4gMTk2OlxcdFxcbiAxOTc6XFx0XFx0c3RydWN0IHNtY19sbGNfbXNnX2NvbmZpcm1fcmtleSBjb25maXJtX3JrZXk7XFxuIDE5ODpcXHRcXHRzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXkgZGVsZXRlX3JrZXk7XFxuIDE5OTpcXHRcXHRzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXlfdjJfaW5saW5lIGRlbGV0ZV9ya2V5X3YyO1xcbiAyMDA6XFx0XFxuIDIwMTpcXHRcXHRzdHJ1Y3Qgc21jX2xsY19tc2dfdGVzdF9saW5rIHRlc3RfbGluaztcXG4gMjAyOlxcdFxcdHN0cnVjdCB7XFxuIDIwMzpcXHRcXHRcXHRzdHJ1Y3Qgc21jX2xsY19oZHIgaGRyO1xcbiAyMDQ6XFx0XFx0XFx0dTggZGF0YVtTTUNfTExDX0RBVEFfTEVOXTtcXG4gMjA1OlxcdFxcdH0gcmF3O1xcbiAyMDY6XFx0fTtcXG4gMjA3OlxcdFxcbiAyMDg6XFx0c3RhdGljX2Fzc2VydChTTUNfTExDX0RFTF9SS0VZX1YyX0lOTElORSA9PVxcbiAyMDk6XFx0XFx0ICAgICAgKHNpemVvZih1bmlvbiBzbWNfbGxjX21zZykgLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMjo1OToxNC4wNzY0NDI2NzRaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0OTE4NjU1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBzbWNfbGxjX21zZ2AgU3RydWN0dXJlKipcblxuT2theSwgc28gSSdtIHRha2luZyBhIGxvb2sgYXQgdGhpcyBgdW5pb24gc21jX2xsY19tc2dgLCBhbmQgbXkgaW5pdGlhbCBndXQgZmVlbGluZyBpcyB0aGF0IGl0J3MgZ29pbmcgdG8gYmUgcHJlY2lzZWx5IDQ0IGJ5dGVzIGluIHNpemUuIFRoZSByZWFzb24/IFdlbGwsIGJhc2VkIG9uIG15IGV4cGVyaWVuY2UsIEknbSBiZXR0aW5nIHRoYXQgYFNNQ19MTENfREFUQV9MRU5gIGlzIGxpa2VseSBkZWZpbmVkIGFzIDQwIGJ5dGVzLiBBbmQgd2Uga25vdyB0aGF0IGBzdHJ1Y3Qgc21jX2xsY19oZHJgLCB3aGljaCBpcyBwYXJ0IG9mIHRoaXMgb3ZlcmFsbCBzdHJ1Y3R1cmUsIGlzIDQgYnl0ZXMuIDQwIHBsdXMgNCBlcXVhbHMgNDQsIHNvIHRoYXQncyB0aGUgbGlrZWx5IG91dGNvbWUuXG5cbkJ1dCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4gSSdtIGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0aGUgYWN0dWFsIGRlZmluaXRpb24gb2YgYFNNQ19MTENfREFUQV9MRU5gIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gVGhlcmUncyBubyByb29tIGZvciBndWVzc2luZyBoZXJlOyBJJ2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYXNzdW1wdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4MDQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAyOjU5OjE3LjUyNTYzMjE1N1oiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwNDA4MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2RlZmluZSBTTUNfTExDX0RBVEFfTEVOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX2xsYy5jLTIxLVxcbm5ldC9zbWMvc21jX2xsYy5jOjIyOiNkZWZpbmUgU01DX0xMQ19EQVRBX0xFTlxcdFxcdDQwXFxubmV0L3NtYy9zbWNfbGxjLmMtMjMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAyOjU5OjE3LjU3MjY4MTQ5NloiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDQyMzY5NjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTTUMtTExDIE1lc3NhZ2UgU2l6ZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBgdW5pb24gc21jX2xsY19tc2dgIGlzIGluZGVlZCA0NCBieXRlcy4gTXkgbmV4dCB0aG91Z2h0IGlzLCBob3cgZG9lcyB0aGlzIHNpemUgY29tcGFyZSB0byB0aGUgb3RoZXIgc3RydWN0dXJlcyB0aGF0IGFyZSB1c2VkIHdpdGhpbiB0aGF0IHVuaW9uPyBMZXQncyBzdGFydCB3aXRoIGBzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBzdHJ1Y3R1cmUncyBzaXplIGlzIGFsc28gNDQgYnl0ZXMuIExvb2tpbmcgYXQgdGhlIGRlZmluaXRpb24sIEknbGwgY2FsY3VsYXRlIHRoZSBzaXplIGZpZWxkIGJ5IGZpZWxkOiBXZSd2ZSBnb3QgYHN0cnVjdCBzbWNfbGxjX2hkciBoZGAsIHdoaWNoIGlzIDQgYnl0ZXMuIFRoZW4gYHU4IHNlbmRlcl9tYWNbRVRIX0FMRU5dYCBpcyA2IGJ5dGVzLiBGb2xsb3dpbmcgdGhhdCwgdGhlcmUncyBgdTggcmVzZXJ2ZWQyWzJdYCBmb3IgMiBieXRlcywgYHU4IHNlbmRlcl9naWRbU01DX0dJRF9TSVpFXWAgZm9yIDE2IGJ5dGVzLCBgdTggc2VuZGVyX3FwX251bVszXWAgZm9yIDMgYnl0ZXMsIGB1OCBsaW5rX251bWAgZm9yIDEgYnl0ZSwgYHU4IHFwX210dSA6IDQsIHJlc2VydmVkMyA6IDRgIHdoaWNoIGlzIDEgYnl0ZSwgYHU4IGluaXRpYWxfcHNuWzNdYCBmb3IgMyBieXRlcywgYW5kIGZpbmFsbHkgYHU4IHJlc2VydmVkWzhdYCB3aGljaCBpcyA4IGJ5dGVzLiBBZGRpbmcgdGhhdCB1cCwgNCArIDYgKyAyICsgMTYgKyAzICsgMSArIDEgKyAzICsgOCwgY29tZXMgb3V0IHRvIDQ0IGJ5dGVzLiBUaGVyZWZvcmUsIHRoZSBgc2l6ZW9mKHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGluaylgIGlzIGFsc28gNDQgYnl0ZXMuIFRoYXQgYWxpZ25zIHdpdGggbXkgZXhwZWN0YXRpb25zLiBOb3csIEkgc2hvdWxkIGxvb2sgYXQgYHN0cnVjdCBzbWNfbGxjX21zZ19kZWxfbGlua2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTc0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAyOjU5OjIzLjYxNTA1NDY5OFoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2OTk1ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHNtY19sbGNfbXNnX2RlbF9saW5rIFxcXFx7XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX2xsYy5jPTExND1zdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfY29udCB7XFx0LyogdHlwZSAweDAzICovXFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYy0xMjUtXFxubmV0L3NtYy9zbWNfbGxjLmM6MTI2OnN0cnVjdCBzbWNfbGxjX21zZ19kZWxfbGluayB7XFx0XFx0LyogdHlwZSAweDA0ICovXFxubmV0L3NtYy9zbWNfbGxjLmMtMTI3LVxcdHN0cnVjdCBzbWNfbGxjX2hkciBoZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDI6NTk6MjMuNjYxNzU4OTA2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0Mjg3NTUwNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYHN0cnVjdCBzbWNfbGxjX21zZ19kZWxfbGlua2AqKlxuXG5Pa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGludm9sdmVzIGV4YW1pbmluZyBgc3RydWN0IHNtY19sbGNfbXNnX2RlbF9saW5rYC4gVGhpcyBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBTTUMtRCBhcmNoaXRlY3R1cmUgYW5kIHNwZWNpZmljYWxseSwgaXRzIHJlc3BvbnNpYmlsaXR5IGluIGhhbmRsaW5nIGxpbmsgZGVsZXRpb24gbWVzc2FnZXMuIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBhIGZldyBrZXkgZmllbGRzIHRoYXQgKnNob3VsZCogYmUgcHJlc2VudCwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGF0YSBmbG93IGFuZCBwcm90b2NvbCBkZXNpZ246IEknbGwgZXhwZWN0IGEgbGluayBJRCBvZiBzb21lIGtpbmQsIHByb2JhYmx5IGEgY29ubmVjdGlvbiBpZGVudGlmaWVyIG9yIHNvbWUgb3RoZXIgZmllbGQgaWRlbnRpZnlpbmcgdGhlIHNwZWNpZmljIGNvbm5lY3Rpb24gdGhlIGNvbW1hbmQgaXMgcmVmZXJyaW5nIHRvLiBJJ2QgYmUgaW50ZXJlc3RlZCB0byBzZWUgaWYgdGhlcmUgaXMgYW55IHNlcXVlbmNpbmcgaW5mbyBvciBmbGFncyBhc3NvY2lhdGVkLlxuXG5NeSBpbml0aWFsIGxpbmUgb2YgdGhvdWdodCwgaXMgYXJvdW5kIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zOyB0aGlzIGlzIGEgZGVsZXRlIGNvbW1hbmQsIHdoaWNoIGluaGVyZW50bHkgaGFzIGhpZ2hlciBwcml2aWxlZ2VzIGFzc29jaWF0ZWQgd2l0aCBpdCB0aGFuIGNvbW1hbmRzIHRoYXQgb25seSByZWFkIGRhdGEuIEknbSBnb2luZyB0byBsb29rIGZvciBhbnkgZmllbGRzIHJlbGF0ZWQgdG8gYXV0aG9yaXphdGlvbiBvciBhdXRoZW50aWNhdGlvbiBvZiB0aGlzIGNvbW1hbmQsIG9yIHdoZXRoZXIgYXV0aG9yaXphdGlvbiBpcyBoYW5kbGVkIGVsc2V3aGVyZSBpbiB0aGUgc3RhY2suXG5cbkknbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgaW1wbGljYXRpb25zIGZvciBzdGF0ZSBtYW5hZ2VtZW50IGluIHRoZSBsaW5rIGxheWVyIGNvbnRyb2wgbG9naWMuIEhvdyBkb2VzIHRoaXMgbWVzc2FnZSBpbXBhY3QgY29ubmVjdGlvbiBzdGF0ZXMsIHJlc291cmNlIGRlYWxsb2NhdGlvbiwgYW5kIHBvdGVudGlhbCBlcnJvciBoYW5kbGluZz8gQXJlIHRoZXJlIGFueSByYWNlIGNvbmRpdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIGlmIG11bHRpcGxlIGRlbGV0ZSBtZXNzYWdlcyBhcmUgaW4tZmxpZ2h0IGNvbmN1cnJlbnRseT8gQXJlIHRoZXJlIGFueSBmaWVsZHMgdGhhdCBzdWdnZXN0IGVycm9yIHJlcG9ydGluZyBvciBhY2tub3dsZWRnZW1lbnRzIHJlbGF0ZWQgdG8gdGhlIGRlbGV0aW9uIHJlcXVlc3Q/XG5cbkVzc2VudGlhbGx5LCBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgc3RydWN0dXJlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyYWN0IGl0IGRlZmluZXMg4oCTIHRoZSBpbmZvcm1hdGlvbiBpdCAqbXVzdCogY29udGFpbiBmb3IgYSBzdWNjZXNzZnVsIGxpbmsgZGVsZXRpb24sIGFuZCB0aGUgZ3VhcmFudGVlcyBpdCBwcm92aWRlcyAob3IgZG9lc24ndCBwcm92aWRlKSBhYm91dCB0aGUgcHJvY2Vzcy4gSSdtIGFsc28gcHJpbWVkIHRvIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgcmVkIGZsYWdzIG9yIGFyZWFzIHdoZXJlIHRoZSBkZXNpZ24gY291bGQgYmUgaW1wcm92ZWQsIGVzcGVjaWFsbHkgd2l0aCByZXNwZWN0IHRvIHJvYnVzdG5lc3MgYW5kIHNlY3VyaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzAwNSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAyOjU5OjI4LjA5MDUxNjk2M1oiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NtYy9zbWNfbGxjLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI2LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTI2OlxcdHN0cnVjdCBzbWNfbGxjX21zZ19kZWxfbGluayB7XFx0XFx0LyogdHlwZSAweDA0ICovXFxuIDEyNzpcXHRcXHRzdHJ1Y3Qgc21jX2xsY19oZHIgaGQ7XFxuIDEyODpcXHRcXHR1OCBsaW5rX251bTtcXG4gMTI5OlxcdFxcdF9fYmUzMiByZWFzb247XFxuIDEzMDpcXHRcXHR1OCByZXNlcnZlZFszNV07XFxuIDEzMTpcXHR9IF9fcGFja2VkO1xcdFxcdFxcdC8qIGZvcm1hdCBkZWZpbmVkIGluIFJGQzc2MDkgKi9cXG4gMTMyOlxcdFxcbiAxMzM6XFx0c3RydWN0IHNtY19sbGNfbXNnX3Rlc3RfbGluayB7XFx0XFx0LyogdHlwZSAweDA3ICovXFxuIDEzNDpcXHRcXHRzdHJ1Y3Qgc21jX2xsY19oZHIgaGQ7XFxuIDEzNTpcXHRcXHR1OCB1c2VyX2RhdGFbMTZdO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMjo1OToyOC4wOTA2Mzc2NjNaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk4MzYxMzk4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERhdGEgQ29weSBpbiBgc21jX2xsY19lbnF1ZXVlYCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkndmUgY2FsY3VsYXRlZCB0aGUgdG90YWwgc2l6ZSBvZiB0aGVzZSBzdHJ1Y3R1cmVzIOKAkyB0aGUgc3VtIG9mIHRoZWlyIGluZGl2aWR1YWwgbWVtYmVycyBnaXZlcyBtZSA0NCBieXRlcy4gS25vd2luZyB0aGlzLCBjb3B5aW5nIGBzaXplb2YodW5pb24gc21jX2xsY19tc2cpYCBmcm9tIGVpdGhlciBgXHUwMDI2YWRkX2xsY2Agb3IgYFx1MDAyNmRlbF9sbGNgIHdpdGhpbiBgc21jX2xsY19lbnF1ZXVlYCBpcyBjb21wbGV0ZWx5IHNhZmU7IG5vIHdvcnJpZXMgYWJvdXQgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhlIG1lbW9yeSBhY2Nlc3Mgd2lsbCBzdGF5IHdpdGhpbiB0aGUgZGVmaW5lZCBib3VuZHMuXG5cbkJ1dCwgaG9sZCBvbiwgYSBxdWljayBzYW5pdHkgY2hlY2sgaXMgYWx3YXlzIHdpc2UuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYGFkZF9sbGNgIGlzIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB0aGUgY29weS4gT2gsIHJpZ2h0LCB0aGUgY29kZSBleHBsaWNpdGx5IHplcm9lcyB0aGUgc3RydWN0OlxuXG5gYGBjXG5cdHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGluayBhZGRfbGxjO1xuXG5cdG1lbXNldChcdTAwMjZhZGRfbGxjLCAwLCBzaXplb2YoYWRkX2xsYykpO1xuYGBgXG5cbkV4Y2VsbGVudC4gSXQncyB6ZXJvZWQsIHNvIHRoYXQncyBnb29kLiBBbmQgYGRlbF9sbGNgIGlzIHRoZSBzYW1lLCBtYWtpbmcgdGhpcyBwZXJmZWN0bHkgc2FmZTpcblxuYGBgY1xuXHRzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsX2xpbmsgZGVsX2xsYztcblxuXHRtZW1zZXQoXHUwMDI2ZGVsX2xsYywgMCwgc2l6ZW9mKGRlbF9sbGMpKTtcbmBgYFxuXG5Pa2F5LCB0aGUgbWVtb3J5IGFjY2VzcyBpcyBzYWZlLCB0aGUgZGF0YSBpcyBpbml0aWFsaXplZC4gSSB0aGluayBJIHdpbGwganVzdCBjaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjYWxsZXJzIG9mIHRoYXQgZnVuY3Rpb24sIGp1c3QgdG8gYmUgc3VyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzYyOCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAyOjU5OjM0LjA3NDI1Njk3NloiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4NTk5MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic21jX2xsY19lbnF1ZXVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX2xsYy5jPTIxNz1zdHJ1Y3Qgc21jX2xsY19xZW50cnkge1xcbi0tXFxubmV0L3NtYy9zbWNfbGxjLmMtMjI0LVxcbm5ldC9zbWMvc21jX2xsYy5jOjIyNTpzdGF0aWMgdm9pZCBzbWNfbGxjX2VucXVldWUoc3RydWN0IHNtY19saW5rICpsaW5rLCB1bmlvbiBzbWNfbGxjX21zZyAqbGxjLFxcbm5ldC9zbWMvc21jX2xsYy5jLTIyNi1cXHRcXHRcXHQgICAgdTMyIGJ5dGVfbGVuKTtcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jPTE1NzE9dm9pZCBzbWNfbGxjX2FkZF9saW5rX2xvY2FsKHN0cnVjdCBzbWNfbGluayAqbGluaylcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTE1NzctXFx0Lyogbm8gZGV2IGFuZCBwb3J0IG5lZWRlZCAqL1xcbm5ldC9zbWMvc21jX2xsYy5jOjE1Nzg6XFx0c21jX2xsY19lbnF1ZXVlKGxpbmssICh1bmlvbiBzbWNfbGxjX21zZyAqKVxcdTAwMjZhZGRfbGxjLFxcbm5ldC9zbWMvc21jX2xsYy5jLTE1NzktXFx0XFx0XFx0c2l6ZW9mKHVuaW9uIHNtY19sbGNfbXNnKSk7XFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYz0xNjA2PXZvaWQgc21jX2xsY19zcnZfZGVsZXRlX2xpbmtfbG9jYWwoc3RydWN0IHNtY19saW5rICpsaW5rLCB1OCBkZWxfbGlua19pZClcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTE2MTQtXFx0ZGVsX2xsYy5oZC5mbGFncyB8PSBTTUNfTExDX0ZMQUdfREVMX0xJTktfT1JERVJMWTtcXG5uZXQvc21jL3NtY19sbGMuYzoxNjE1OlxcdHNtY19sbGNfZW5xdWV1ZShsaW5rLCAodW5pb24gc21jX2xsY19tc2cgKilcXHUwMDI2ZGVsX2xsYyxcXG5uZXQvc21jL3NtY19sbGMuYy0xNjE2LVxcdFxcdFxcdHNpemVvZih1bmlvbiBzbWNfbGxjX21zZykpO1xcbi0tXFxubmV0L3NtYy9zbWNfbGxjLmM9MjEwMT1zdGF0aWMgdTMyIHNtY19sbGNfbWF4X2JvZHlfbGVuKHVuaW9uIHNtY19sbGNfbXNnICpsbGMpXFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYy0yMTE1LVxcbm5ldC9zbWMvc21jX2xsYy5jOjIxMTY6c3RhdGljIHZvaWQgc21jX2xsY19lbnF1ZXVlKHN0cnVjdCBzbWNfbGluayAqbGluaywgdW5pb24gc21jX2xsY19tc2cgKmxsYyxcXG5uZXQvc21jL3NtY19sbGMuYy0yMTE3LVxcdFxcdFxcdCAgICB1MzIgYnl0ZV9sZW4pXFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYz0yMTYyPXN0YXRpYyB2b2lkIHNtY19sbGNfcnhfaGFuZGxlcihzdHJ1Y3QgaWJfd2MgKndjLCB2b2lkICpidWYpXFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYy0yMTc2LVxcbm5ldC9zbWMvc21jX2xsYy5jOjIxNzc6XFx0c21jX2xsY19lbnF1ZXVlKGxpbmssIGxsYywgd2MtXFx1MDAzZWJ5dGVfbGVuKTtcXG5uZXQvc21jL3NtY19sbGMuYy0yMTc4LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDI6NTk6MzQuMTIxMTIyNzc1WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5OTUzMzc2MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUG90ZW50aWFsIEJ1ZmZlciBPdmVyZmxvdyBpbiBTTUMgTExDIFJYIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgc21jX2xsY19yeF9oYW5kbGVyYCBmdW5jdGlvbiBhbmQgdGhlIHN1YnNlcXVlbnQgcHJvY2Vzc2luZyBvZiByZWNlaXZlZCBMTEMgbWVzc2FnZXMuIFRoZSBgc21jX2xsY19yeF9oYW5kbGVyYCBnZXRzIGl0cyBkYXRhLCBwb2ludGVkIHRvIGJ5IGBsbGNgLCBmcm9tIHRoZSBuZXR3b3JrIHZpYSBgaWJfd2NgLiBUaGUga2V5IGlzIGB3Yy1cdTAwM2VieXRlX2xlbmAsIHdoaWNoIGlzIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkLCBhbmQgYGxsY2AgdGhhdCBwb2ludHMgdG8gdGhlIGRhdGEgYnVmZmVyLiBUaGVuLCBpdCBlbnF1ZXVlcyB0aGUgTExDIG1lc3NhZ2UuXG5cbk5vdywgaW4gYHNtY19sbGNfZW5xdWV1ZWAsIGl0IHNlZW1zIHdlJ3JlIGFsbG9jYXRpbmcgYSBxdWV1ZSBlbnRyeSBhbmQgY29weWluZyB0aGUgcmVjZWl2ZWQgZGF0YSBpbnRvIGl0LiBTcGVjaWZpY2FsbHksIEknbSBjb25jZXJuZWQgYWJvdXQgdGhpcyBgbWVtY3B5KFx1MDAyNnFlbnRyeS1cdTAwM2Vtc2csIGxsYywgc2l6ZW9mKHVuaW9uIHNtY19sbGNfbXNnKSk7YC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2FpdCBhIG1pbnV0ZS4uLiBpcyBpdCAqcG9zc2libGUqIHRoYXQgYHdjLVx1MDAzZWJ5dGVfbGVuYCAodGhlIHJlY2VpdmVkIHNpemUpIGlzICpzbWFsbGVyKiB0aGFuIGBzaXplb2YodW5pb24gc21jX2xsY19tc2cpYD9cIi4gQmVjYXVzZSBpZiB0aGF0J3MgdGhlIGNhc2UsIHdlJ3JlIGdvaW5nIHRvIGhhdmUgYSBjbGFzc2ljIGJ1ZmZlciBvdmVyZmxvdyBzaXR1YXRpb24uIGBtZW1jcHlgIHdvdWxkIGJlIHJlYWRpbmcgcGFzdCB0aGUgZW5kIG9mIHRoZSBgbGxjYCBidWZmZXIuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoaXMgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuIEkgbmVlZCB0byBnbyBiYWNrIGFuZCBkb3VibGUtY2hlY2sgaG93IGBzbWNfbGxjX3J4X2hhbmRsZXJgIGhhbmRsZXMgdGhlIHJlY2VpdmVkIGJ5dGUgbGVuZ3RoIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGd1YXJkcyBpbiBwbGFjZSwgYnV0IEkgaGF2ZSBhIHN0cm9uZyBmZWVsaW5nIHdlIGhhdmUgYSBwcm9ibGVtIGhlcmUuIEkgc3VzcGVjdCB0aGF0IHRoZSBzaXplIGNoZWNrIG1pZ2h0IGJlIG1pc3Npbmcgb3IgaW5zdWZmaWNpZW50LCB3aGljaCBjcmVhdGVzIGEgcG9zc2libGUgdnVsbmVyYWJpbGl0eSwgYW5kIG15IG5leHQgc3RlcCBpcyB0byB2ZXJpZnkgd2hldGhlciB0aGF0J3MgdGhlIGNhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTM0LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAyOjU5OjQyLjExNjQ2MzU5MloiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzAyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NtYy9zbWNfbGxjLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjE2MixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjE2MjpcXHRzdGF0aWMgdm9pZCBzbWNfbGxjX3J4X2hhbmRsZXIoc3RydWN0IGliX3djICp3Yywgdm9pZCAqYnVmKVxcbjIxNjM6XFx0e1xcbjIxNjQ6XFx0XFx0c3RydWN0IHNtY19saW5rICpsaW5rID0gKHN0cnVjdCBzbWNfbGluayAqKXdjLVxcdTAwM2VxcC1cXHUwMDNlcXBfY29udGV4dDtcXG4yMTY1OlxcdFxcdHVuaW9uIHNtY19sbGNfbXNnICpsbGMgPSBidWY7XFxuMjE2NjpcXHRcXG4yMTY3OlxcdFxcdGlmICh3Yy1cXHUwMDNlYnl0ZV9sZW4gXFx1MDAzYyBzaXplb2YoKmxsYykpXFxuMjE2ODpcXHRcXHRcXHRyZXR1cm47IC8qIHNob3J0IG1lc3NhZ2UgKi9cXG4yMTY5OlxcdFxcdGlmICghbGxjLVxcdTAwM2VyYXcuaGRyLmNvbW1vbi5sbGNfdmVyc2lvbikge1xcbjIxNzA6XFx0XFx0XFx0aWYgKGxsYy1cXHUwMDNlcmF3Lmhkci5sZW5ndGggIT0gc2l6ZW9mKCpsbGMpKVxcbjIxNzE6XFx0XFx0XFx0XFx0cmV0dXJuOyAvKiBpbnZhbGlkIG1lc3NhZ2UgKi9cXG4yMTcyOlxcdFxcdH0gZWxzZSB7XFxuMjE3MzpcXHRcXHRcXHRpZiAobGxjLVxcdTAwM2VyYXcuaGRyLmxlbmd0aF92MiBcXHUwMDNjIHNpemVvZigqbGxjKSlcXG4yMTc0OlxcdFxcdFxcdFxcdHJldHVybjsgLyogaW52YWxpZCBtZXNzYWdlICovXFxuMjE3NTpcXHRcXHR9XFxuMjE3NjpcXHRcXG4yMTc3OlxcdFxcdHNtY19sbGNfZW5xdWV1ZShsaW5rLCBsbGMsIHdjLVxcdTAwM2VieXRlX2xlbik7XFxuMjE3ODpcXHR9XFxuMjE3OTpcXHRcXG4yMTgwOlxcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiB3b3JrZXIsIHV0aWxzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4yMTgxOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMjo1OTo0Mi4xMTY1OTU2NTJaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY1NTQ3NDU2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJ5dGUgTGVuZ3RoIENoZWNrKipcblxuT2theSwgc28gdGhlIGNvZGUgc3RhcnRzIHdpdGggYSBxdWljayBjaGVjazogYGlmICh3Yy1cdTAwM2VieXRlX2xlbiBcdTAwM2Mgc2l6ZW9mKCpsbGMpKWAuIE15IGZpcnN0IHRob3VnaHQgaXMsIHRoYXQncyBnb29kOyBpdCdzIGFuIG9wdGltaXphdGlvbi4gSXQgZW5zdXJlcyB0aGF0IGBsbGNgLCB3aGljaCBpcyBwcmVzdW1hYmx5IHNvbWUga2luZCBvZiBzdHJ1Y3R1cmUsIGhhcyBlbm91Z2ggYnl0ZXMgYWxsb2NhdGVkIHRvIGl0LiBTcGVjaWZpY2FsbHksIGl0IGd1YXJhbnRlZXMgdGhhdCBgbGxjYCBoYXMgYXQgbGVhc3QgdGhlIHNpemUgb2YgYHNpemVvZih1bmlvbiBzbWNfbGxjX21zZylgLiBNYWtlcyBzZW5zZS5cblxuQnV0IHRoZW4sIGEgcmVkIGZsYWcuIFdoYXQgaGFwcGVucyBpZiBgYnl0ZV9sZW5gIGlzICpsYXJnZXIqIHRoYW4gYSBjZXJ0YWluIHNpemU/IFRoYXQgY291bGQgbGVhZCB0byBwcm9ibGVtcy4gTGV0IG1lIHNlZS4uLiB0aGUgY29kZSBkZWZpbmVzIGBTTUNfV1JfVFhfU0laRWAuIEFoLCBpdCdzIDQ0IGJ5dGVzOlxuYGBgY1xuI2RlZmluZSBTTUNfV1JfVFhfU0laRSA0NFxuYGBgXG5JJ2QgYmV0dGVyIHZlcmlmeSB3aGVyZSBgU01DX1dSX1RYX1NJWkVgIGlzIGRlZmluZWQgdGhvdWdoLCBsZXQgbWUgZG91YmxlLWNoZWNrIGBuZXQvc21jL3NtY193ci5oYCB0byBzZWUgaWYgdGhlcmUncyBhbnkgY29udGV4dCBJJ20gbWlzc2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxMjksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMjo1OTo0Ni43NzIwNzMwOTJaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTk0ODI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUgU01DX1dSX1RYX1NJWkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9zbWNfd3IuaC0yMy1cXG5uZXQvc21jL3NtY193ci5oOjI0OiNkZWZpbmUgU01DX1dSX1RYX1NJWkUgNDQgLyogYWN0dWFsIHNpemUgb2Ygd3Jfc2VuZCBkYXRhIChcXHUwMDNjPVNNQ19XUl9CVUZfU0laRSkgKi9cXG5uZXQvc21jL3NtY193ci5oLTI1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMjo1OTo0Ni44MTc2NzM3MTFaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU0MzA5NTQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU01DIFdyaXRlIEJ1ZmZlciBBbGxvY2F0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBTTUNfV1JfVFhfU0laRWAgdGhpbmcsIGFuZCBpdCBsb29rcyBsaWtlIGl0J3MgNDQgYnl0ZXMsIHdoaWNoIGlzIHNwb3Qgb24gZm9yIHRoZSBzaXplIG9mIHRoYXQgYHNtY19sbGNfbXNnYCB1bmlvbi4gVGhhdCBtYWtlcyBzZW5zZS4gU28sIGBieXRlX2xlbmAgaGFzIHRvIGJlIGF0IGxlYXN0IHRoYXQuIFRoZW4sIGBib2R5X2xlbmAgaXMgZGVyaXZlZCBieSBzdWJ0cmFjdGluZyBgU01DX1dSX1RYX1NJWkVgIGZyb20gYGJ5dGVfbGVuYCwgd2l0aCBzb21lIHVwcGVyIGJvdW5kIGltcG9zZWQgYnkgYFNNQ19XUl9CVUZfVjJfU0laRSAtIFNNQ19XUl9UWF9TSVpFYC4gSXQncyBhbHNvIGNvbnN0cmFpbmVkIGZ1cnRoZXIgYnkgYHNtY19sbGNfbWF4X2JvZHlfbGVuKGxsYylgLlxuXG5UaGVuLCB3ZSdyZSBhbGxvY2F0aW5nIGEgYHFlbnRyeWAgYW5kIGNvcHlpbmcgYGJvZHlfbGVuYCBieXRlcyBmcm9tIGBzcmMgKyBTTUNfV1JfVFhfU0laRWAuIFRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHdlJ3JlIGd1YXJhbnRlZWQgdG8gaGF2ZSBlbm91Z2ggZGF0YSBpbiBgc3JjYCwgYSBtaW5pbXVtIG9mIGBTTUNfV1JfVFhfU0laRSArIGJvZHlfbGVuYCBieXRlcz8gSWYgYHNtY19saW5rX3NoYXJlZF92Ml9yeGJ1ZihsaW5rKWAgaXMgdHJ1ZSwgdGhlbiBgc3JjYCBwb2ludHMgdG8gYGxnci1cdTAwM2V3cl9yeF9idWZfdjJgLiBJZiBub3QsIGBzcmNgIHBvaW50cyB0byBgbGxjYC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBgbGxjYCBpcyB0aGUgcmlnaHQgc2l6ZSBpbiB0aGUgbGF0dGVyIGNhc2UuXG5cbkFoLCBJIHJlbWVtYmVyIHRoYXQgY29tbWVudCBmcm9tIGBzbWNfd3JfaW5pdF9zZ2VgOiBcIi4uLm1lc3NhZ2VzIGxhcmdlciB0aGFuIGBTTUNfV1JfVFhfU0laRWAuLi4gc3BpbGxvdmVyIGJ1ZmZlci4uLlwiIFJpZ2h0LCBmb3IgU01DLVJ2MiwgdGhlIHNlY29uZCBTR0UgaW4gZWFjaCBgaWJfcmVjdl93cmAgaXMgYSBzcGlsbG92ZXIgYnVmZmVyLiBJdCBzdGFydHMgYXQgYFNNQ19XUl9UWF9TSVpFYCwgd2hpY2ggaXMgd2h5IHRoZSBsZWFkaW5nIGJ5dGVzIG9mIHRoYXQgYnVmZmVyIGFyZSBuZXZlciB3cml0dGVuLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBzbWNfd3JfaW5pdF9zZ2VgIGluIGBuZXQvc21jL3NtY193ci5jYCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjYxMywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMjo1OTo1My4zNjA3NzI0OThaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzMTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zbWMvc21jX3dyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTk1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTk1OlxcdFxcdFxcdGxuay1cXHUwMDNld3JfdHhfdjJfaWItXFx1MDAzZW5leHQgPSBOVUxMO1xcbiA1OTY6XFx0XFx0XFx0bG5rLVxcdTAwM2V3cl90eF92Ml9pYi1cXHUwMDNlc2dfbGlzdCA9IGxuay1cXHUwMDNld3JfdHhfdjJfc2dlO1xcbiA1OTc6XFx0XFx0XFx0bG5rLVxcdTAwM2V3cl90eF92Ml9pYi1cXHUwMDNlbnVtX3NnZSA9IDE7XFxuIDU5ODpcXHRcXHRcXHRsbmstXFx1MDAzZXdyX3R4X3YyX2liLVxcdTAwM2VvcGNvZGUgPSBJQl9XUl9TRU5EO1xcbiA1OTk6XFx0XFx0XFx0bG5rLVxcdTAwM2V3cl90eF92Ml9pYi1cXHUwMDNlc2VuZF9mbGFncyA9XFxuIDYwMDpcXHRcXHRcXHRcXHRJQl9TRU5EX1NJR05BTEVEIHwgSUJfU0VORF9TT0xJQ0lURUQ7XFxuIDYwMTpcXHRcXHR9XFxuIDYwMjpcXHRcXG4gNjAzOlxcdFxcdC8qIFdpdGggU01DLVJ2MiB0aGVyZSBjYW4gYmUgbWVzc2FnZXMgbGFyZ2VyIHRoYW4gU01DX1dSX1RYX1NJWkUuXFxuIDYwNDpcXHRcXHQgKiBFYWNoIGliX3JlY3Zfd3IgZ2V0cyAyIHNnZXMsIHRoZSBzZWNvbmQgb25lIGlzIGEgc3BpbGxvdmVyIGJ1ZmZlclxcbiA2MDU6XFx0XFx0ICogYW5kIHRoZSBzYW1lIGJ1ZmZlciBmb3IgYWxsIHNnZXMuIFRoZSBzcGlsbG92ZXIgc2dlIHN0YXJ0cyBhdFxcbiA2MDY6XFx0XFx0ICogU01DX1dSX1RYX1NJWkUsIHNvIHRoZSBsZWFkaW5nIGJ5dGVzIG9mIHRoYXQgYnVmZmVyIGFyZSBuZXZlclxcbiA2MDc6XFx0XFx0ICogd3JpdHRlbi5cXG4gNjA4OlxcdFxcdCAqL1xcbiA2MDk6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGxuay1cXHUwMDNld3JfcnhfY250OyBpKyspIHtcXG4gNjEwOlxcdFxcdFxcdGludCB4ID0gaSAqIGxuay1cXHUwMDNld3Jfcnhfc2dlX2NudDtcXG4gNjExOlxcdFxcbiA2MTI6XFx0XFx0XFx0bG5rLVxcdTAwM2V3cl9yeF9zZ2VzW3hdLmFkZHIgPVxcbiA2MTM6XFx0XFx0XFx0XFx0bG5rLVxcdTAwM2V3cl9yeF9kbWFfYWRkciArIGkgKiBsbmstXFx1MDAzZXdyX3J4X2J1ZmxlbjtcXG4gNjE0OlxcdFxcdFxcdGxuay1cXHUwMDNld3Jfcnhfc2dlc1t4XS5sZW5ndGggPSBzbWNfbGlua19zaGFyZWRfdjJfcnhidWYobG5rKSA/XFxuIDYxNTpcXHRcXHRcXHRcXHRTTUNfV1JfVFhfU0laRSA6IGxuay1cXHUwMDNld3JfcnhfYnVmbGVuO1xcbiA2MTY6XFx0XFx0XFx0bG5rLVxcdTAwM2V3cl9yeF9zZ2VzW3hdLmxrZXkgPSBsbmstXFx1MDAzZXJvY2VfcGQtXFx1MDAzZWxvY2FsX2RtYV9sa2V5O1xcbiA2MTc6XFx0XFx0XFx0aWYgKGxuay1cXHUwMDNlbGdyLVxcdTAwM2VzbWNfdmVyc2lvbiA9PSBTTUNfVjIgXFx1MDAyNlxcdTAwMjYgc21jX2xpbmtfc2hhcmVkX3YyX3J4YnVmKGxuaykpIHtcXG4gNjE4OlxcdFxcdFxcdFxcdGxuay1cXHUwMDNld3Jfcnhfc2dlc1t4ICsgMV0uYWRkciA9XFxuIDYxOTpcXHRcXHRcXHRcXHRcXHRcXHRsbmstXFx1MDAzZXdyX3J4X3YyX2RtYV9hZGRyICsgU01DX1dSX1RYX1NJWkU7XFxuIDYyMDpcXHRcXHRcXHRcXHRsbmstXFx1MDAzZXdyX3J4X3NnZXNbeCArIDFdLmxlbmd0aCA9XFxuIDYyMTpcXHRcXHRcXHRcXHRcXHRcXHRTTUNfV1JfQlVGX1YyX1NJWkUgLSBTTUNfV1JfVFhfU0laRTtcXG4gNjIyOlxcdFxcdFxcdFxcdGxuay1cXHUwMDNld3Jfcnhfc2dlc1t4ICsgMV0ubGtleSA9XFxuIDYyMzpcXHRcXHRcXHRcXHRcXHRcXHRsbmstXFx1MDAzZXJvY2VfcGQtXFx1MDAzZWxvY2FsX2RtYV9sa2V5O1xcbiA2MjQ6XFx0XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMjo1OTo1My4zNjA4NzczMThaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjUzMDQ5ODA4MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJlYWRzIGluIFNNQy1MTEMgTWVzc2FnZSBIYW5kbGluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgZW5zdXJpbmcgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZXZlciByZWFkIHdoZW4gcHJvY2Vzc2luZyBTTUMtTExDIG1lc3NhZ2VzLCBwYXJ0aWN1bGFybHkgaW4gdGhlIGNvbnRleHQgb2Ygc3BpbGxvdmVyIGJ1ZmZlcnMgYW5kIHJrZXkgaGFuZGxpbmcuIEkndmUgY29uc2lkZXJlZCBzZXZlcmFsIGNvZGUgcGF0aHMgaW4gZGV0YWlsLCBhbmQgaGVyZSBhcmUgbXkgY29uY2x1c2lvbnMuXG5cbkZpcnN0LCBJIGV4YW1pbmVkIHRoZSBgc21jX2xpbmtfc2hhcmVkX3YyX3J4YnVmYCBjYXNlLiBJZiB0cnVlLCB0aGUgc3BpbGxvdmVyIGlzIHdyaXR0ZW4gZGlyZWN0bHkgaW50byBgbGdyLVx1MDAzZXdyX3J4X2J1Zl92MiArIFNNQ19XUl9UWF9TSVpFYCwgYW5kIHdoZW4gZmFsc2UsIHRoZSBTR0UgYnVmZmVycyBhcmUgbGFyZ2UgZW5vdWdoLiBUaGUgY3J1Y2lhbCBwYXJ0IGhlcmUgaXMgdGhlIGBtZW1jcHkocWVudHJ5LVx1MDAzZWJvZHksIHNyYyArIFNNQ19XUl9UWF9TSVpFLCBib2R5X2xlbik7YC4gIEkgdmVyaWZpZWQgdGhhdCBgYm9keV9sZW5gICh0aGUgbnVtYmVyIG9mIHNwaWxsb3ZlciBieXRlcykgaXMgY2FwcGVkIGJ5IHRoZSBhY3R1YWwgbnVtYmVyIG9mIHJlY2VpdmVkIGJ5dGVzLCBwcmV2ZW50aW5nIHJlYWRzIGJleW9uZCB0aGUgdmFsaWQgYnVmZmVyLiBUaGUgY2FsY3VsYXRpb24gZW5zdXJlcyBubyByZWFkIHBhc3QgdGhlIGVuZCBvZiBkYXRhLlxuXG5OZXh0LCBJIHNjcnV0aW5pemVkIGBzbWNfbGxjX3NhdmVfYWRkX2xpbmtfcmtleXNgLiAgSGVyZSwgYHFlbnRyeS1cdTAwM2Vib2R5YCBjb250YWlucyB0aGUgc3BpbGxvdmVyIGRhdGEuIEkgY29uZmlybWVkIHRoYXQgdGhlIGNvZGUgZmlyc3QgY2hlY2tzIHRoYXQgYHFlbnRyeS1cdTAwM2Vib2R5X2xlbmAgaXMgc3VmZmljaWVudCwgdGhlbiBwcm9wZXJseSBsaW1pdHMgdGhlIGxvb3AgaXRlcmF0aW9uIGNvdW50IGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgcmtleXMgKmFuZCogdGhlIGF2YWlsYWJsZSBieXRlcyBpbiBgcWVudHJ5LVx1MDAzZWJvZHlgLiBUaGlzIGVuc3VyZXMgYGV4dC1cdTAwM2VydFtpXWAgZWxlbWVudHMgYXJlIHdpdGhpbiB0aGUgYm91bmRzIG9mIHRoZSByZWNlaXZlZCBkYXRhOyBubyBvdXQtb2YtYm91bmRzIHJlYWRzIG9jY3VyLlxuXG5UaGVuLCBJIGZvY3VzZWQgb24gYHNtY19sbGNfcm10X2RlbGV0ZV9ya2V5YC4gIFRoZSBrZXkgaGVyZSBpcyB0aGUgaGFuZGxpbmcgb2YgaW5saW5lIHJrZXlzIGFuZCBzcGlsbG92ZXIgcmtleXMuIFRoZSBjb2RlIHVzZXMgYFNNQ19MTENfREVMX1JLRVlfVjJfSU5MSU5FYCB0byBzdG9yZSBzb21lIHJrZXlzIGlubGluZS4gQ3J1Y2lhbGx5LCB0aGUgY2FsY3VsYXRpb24gb2YgYG1heGAgKHRoZSBsb29wIGNvdW50KSBpcyBib3VuZGVkIGJ5IGJvdGggaW5saW5lIHJrZXkgY291bnQgYW5kIHJlY2VpdmVkIGJ5dGUgY291bnQuIFRoZSBgbWVtY3B5YCBmcm9tIGBxZW50cnktXHUwMDNlYm9keWAgaXMgdGhlcmVmb3JlIGd1YXJhbnRlZWQgdG8gc3RheSB3aXRoaW4gdGhlIGJvdW5kcyBvZiB0aGUgcmVjZWl2ZWQgZGF0YS4gQW5kIHRoZSBya2V5IHZhbHVlcyBpbiBgbGxjdjItXHUwMDNlcmtleWAgYXJlIGluZGVlZCBpbml0aWFsaXplZCBmcm9tIHRoZSByZWNlaXZlZCBtZXNzYWdlIChgbGxjYCksIHdoaWNoIGlzIGNvbmZpcm1lZCB0byBoYXZlIHNpemUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGBzaXplb2YodW5pb24gc21jX2xsY19tc2cpYCBhbmQgaXMgY29waWVkIGZyb20gbmV0d29yayBkYXRhLlxuXG5GaW5hbGx5LCBJIGNoZWNrZWQgZm9yIHVuaW5pdGlhbGl6ZWQgbWVzc2FnZXMgc2VudCB0byB0aGUgbmV0d29yay4gQm90aCBgc21jX2xsY19hZGRfbGlua19sb2NhbGAgYW5kIGBzbWNfbGxjX3Nydl9kZWxldGVfbGlua19sb2NhbGAgaW5pdGlhbGl6ZSB0aGVpciBtZXNzYWdlcyB2aWEgYG1lbXNldGAuIEJlY2F1c2UgYHNpemVvZihhZGRfbGxjKWAgYW5kIGBzaXplb2YoZGVsX2xsYylgIG1hdGNoIGBzaXplb2YodW5pb24gc21jX2xsY19tc2cpYCwgSeKAmW0gY29uZmlkZW50IGFsbCBkYXRhIHNlbnQgdG8gdGhlIG5ldHdvcmsgd2lsbCBiZSBpbml0aWFsaXplZC4gQWx0aG91Z2gsIEkgd2lsbCBkb3VibGUgY2hlY2sgdGhlIHNpemVzIGZvciBhYnNvbHV0ZSBzdXJldHkuXG5cblRoZXJlZm9yZSwgYWZ0ZXIgdGhpcyBkZXRhaWxlZCBhbmFseXNpcywgSSdtIGZhaXJseSBjb25maWRlbnQgdGhhdCB0aGVzZSBjb2RlIHBhdGhzLCBhcyBjdXJyZW50bHkgd3JpdHRlbiwgYXJlIHNhZmUgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgxOTUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6MDA6MTguNjY1ODYyMTQyWiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjY3NzI0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaXplb2ZcXFxcKHVuaW9uIHNtY19sbGNfbXNnXFxcXClcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9zbWNfbGxjLmM9MjA4PXN0YXRpY19hc3NlcnQoU01DX0xMQ19ERUxfUktFWV9WMl9JTkxJTkUgPT1cXG5uZXQvc21jL3NtY19sbGMuYzoyMDk6XFx0ICAgICAgKHNpemVvZih1bmlvbiBzbWNfbGxjX21zZykgLVxcbm5ldC9zbWMvc21jX2xsYy5jLTIxMC1cXHQgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyLCBya2V5KSkgL1xcbi0tXFxubmV0L3NtYy9zbWNfbGxjLmM9NDIxPXN0YXRpYyBpbnQgc21jX2xsY19hZGRfcGVuZGluZ19zZW5kKHN0cnVjdCBzbWNfbGluayAqbGluayxcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTQzMS1cXHRCVUlMRF9CVUdfT05fTVNHKFxcbm5ldC9zbWMvc21jX2xsYy5jOjQzMjpcXHRcXHRzaXplb2YodW5pb24gc21jX2xsY19tc2cpIFxcdTAwM2UgU01DX1dSX0JVRl9TSVpFLFxcbm5ldC9zbWMvc21jX2xsYy5jLTQzMy1cXHRcXHRcXFwibXVzdCBpbmNyZWFzZSBTTUNfV1JfQlVGX1NJWkUgdG8gYXQgbGVhc3Qgc2l6ZW9mKHN0cnVjdCBzbWNfbGxjX21zZylcXFwiKTtcXG5uZXQvc21jL3NtY19sbGMuYy00MzQtXFx0QlVJTERfQlVHX09OX01TRyhcXG5uZXQvc21jL3NtY19sbGMuYzo0MzU6XFx0XFx0c2l6ZW9mKHVuaW9uIHNtY19sbGNfbXNnKSAhPSBTTUNfV1JfVFhfU0laRSxcXG5uZXQvc21jL3NtY19sbGMuYy00MzYtXFx0XFx0XFxcIm11c3QgYWRhcHQgU01DX1dSX1RYX1NJWkUgdG8gc2l6ZW9mKHN0cnVjdCBzbWNfbGxjX21zZyk7IGlmIG5vdCBhbGwgc21jX3dyIHVwcGVyIGxheWVyIHByb3RvY29scyB1c2UgdGhlIHNhbWUgbWVzc2FnZSBzaXplIGFueSBtb3JlLCBtdXN0IHN0YXJ0IHRvIHNldCBsaW5rLVxcdTAwM2V3cl90eF9zZ2VzW2ldLmxlbmcuLi5cXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jPTc4Nj1zdGF0aWMgaW50IHNtY19sbGNfc2VuZF9tZXNzYWdlKHN0cnVjdCBzbWNfbGluayAqbGluaywgdm9pZCAqbGxjYnVmKVxcbi0tXFxubmV0L3NtYy9zbWNfbGxjLmMtNzk2LVxcdFxcdGdvdG8gcHV0X291dDtcXG5uZXQvc21jL3NtY19sbGMuYzo3OTc6XFx0bWVtY3B5KHdyX2J1ZiwgbGxjYnVmLCBzaXplb2YodW5pb24gc21jX2xsY19tc2cpKTtcXG5uZXQvc21jL3NtY19sbGMuYy03OTgtXFx0cmMgPSBzbWNfd3JfdHhfc2VuZChsaW5rLCBwZW5kKTtcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jPTgwOD1zdGF0aWMgaW50IHNtY19sbGNfc2VuZF9tZXNzYWdlX3dhaXQoc3RydWN0IHNtY19saW5rICpsaW5rLCB2b2lkICpsbGNidWYpXFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYy04MTgtXFx0XFx0Z290byBwdXRfb3V0O1xcbm5ldC9zbWMvc21jX2xsYy5jOjgxOTpcXHRtZW1jcHkod3JfYnVmLCBsbGNidWYsIHNpemVvZih1bmlvbiBzbWNfbGxjX21zZykpO1xcbm5ldC9zbWMvc21jX2xsYy5jLTgyMC1cXHRyYyA9IHNtY193cl90eF9zZW5kX3dhaXQobGluaywgcGVuZCwgU01DX0xMQ19XQUlUX1RJTUUpO1xcbi0tXFxubmV0L3NtYy9zbWNfbGxjLmM9MTU3MT12b2lkIHNtY19sbGNfYWRkX2xpbmtfbG9jYWwoc3RydWN0IHNtY19saW5rICpsaW5rKVxcbi0tXFxubmV0L3NtYy9zbWNfbGxjLmMtMTU3OC1cXHRzbWNfbGxjX2VucXVldWUobGluaywgKHVuaW9uIHNtY19sbGNfbXNnICopXFx1MDAyNmFkZF9sbGMsXFxubmV0L3NtYy9zbWNfbGxjLmM6MTU3OTpcXHRcXHRcXHRzaXplb2YodW5pb24gc21jX2xsY19tc2cpKTtcXG5uZXQvc21jL3NtY19sbGMuYy0xNTgwLX1cXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jPTE2MDY9dm9pZCBzbWNfbGxjX3Nydl9kZWxldGVfbGlua19sb2NhbChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHU4IGRlbF9saW5rX2lkKVxcbi0tXFxubmV0L3NtYy9zbWNfbGxjLmMtMTYxNS1cXHRzbWNfbGxjX2VucXVldWUobGluaywgKHVuaW9uIHNtY19sbGNfbXNnICopXFx1MDAyNmRlbF9sbGMsXFxubmV0L3NtYy9zbWNfbGxjLmM6MTYxNjpcXHRcXHRcXHRzaXplb2YodW5pb24gc21jX2xsY19tc2cpKTtcXG5uZXQvc21jL3NtY19sbGMuYy0xNjE3LX1cXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jPTIxMTY9c3RhdGljIHZvaWQgc21jX2xsY19lbnF1ZXVlKHN0cnVjdCBzbWNfbGluayAqbGluaywgdW5pb24gc21jX2xsY19tc2cgKmxsYyxcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTIxMzgtXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnFlbnRyeS1cXHUwMDNlbGlzdCk7XFxubmV0L3NtYy9zbWNfbGxjLmM6MjEzOTpcXHRtZW1jcHkoXFx1MDAyNnFlbnRyeS1cXHUwMDNlbXNnLCBsbGMsIHNpemVvZih1bmlvbiBzbWNfbGxjX21zZykpO1xcbm5ldC9zbWMvc21jX2xsYy5jLTIxNDAtXFx0aWYgKGJvZHlfbGVuKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjAwOjE4LjcxMjU0MzcxMVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDQ3Mzk4MjAyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXR3b3JrIFN0YWNrIFZ1bG5lcmFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgYEJVSUxEX0JVR19PTl9NU0dgIGNoZWNrIGNvbmZpcm1zIGEgY3JpdGljYWwgc2l6aW5nIHJlbGF0aW9uc2hpcDogdGhlIHNpemUgb2YgYHVuaW9uIHNtY19sbGNfbXNnYCBpcyBwcmVjaXNlbHkgYFNNQ19XUl9UWF9TSVpFYCwgd2hpY2ggd2Uga25vdyB0byBiZSA0NCBieXRlcy4gIFdlIGNhbiBzYWZlbHkgYXNzdW1lIHRoYXQgYW55IHN0cnVjdCB3aXRoIHRoZSBzYW1lIHNpemUgKGxpa2UgYGFkZF9sbGNgKSB3aWxsIGJlIGZ1bGx5IGluaXRpYWxpemVkIHdoZW4gY29waWVkIGludG8gdGhlIHVuaW9uIHZpYSBgbWVtY3B5YCwgYXZvaWRpbmcgYW55IHBvdGVudGlhbCBmb3IgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuSG93ZXZlciwgdGhlIG1vcmUgZGV0YWlsZWQgYHN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92Ml9pbmxpbmVgIGltbWVkaWF0ZWx5IHBvcHMgdXAuIFdlIGhhdmUgdG8gdmVyaWZ5IHRoaXMgZG9lc24ndCBleGNlZWQgdGhlIGJvdW5kcyBvZiBgdW5pb24gc21jX2xsY19tc2dgLiAgSXQncyBzaXplIGlzIGNhbGN1bGF0ZWQgYXMgNCAoaGVhZGVyKSArIDEgKyAxICsgMiArICg5ICogNCkgPSA0NCBieXRlcy4gIFNvLCB5ZXMsIGl0IGFsc28gZml0cyBuZWF0bHkgd2l0aGluIHRoZSB1bmlvbi4gR29vZC5cblxuTm93LCBsZXQncyBnZXQgdG8gdGhlIGFjdHVhbCBwcm9ibGVtIHRoaXMgcGF0Y2ggYWltcyB0byBmaXguIFRoZSBwYXRjaCBtZXNzYWdlIGl0c2VsZiBpcyBhIGxpdHRsZSB2YWd1ZSwgYnV0IHRoZSBjb2RlIGNoYW5nZXMgdGhlbXNlbHZlcyBnaXZlIGEgZ3JlYXQgZGVhbCBvZiBpbmZvcm1hdGlvbi4gIEJlZm9yZSB0aGlzIHBhdGNoLCBgc21jX2xsY19lbnF1ZXVlYCBoYWQgYSBwcm9ibGVtOiBJdCB3YXMgYWxsb2NhdGluZyBgcWVudHJ5YCB3aXRoIGBrbWFsbG9jX29iamAsIHdoaWNoIGluY2x1ZGVzIGEgYHVuaW9uIHNtY19sbGNfbXNnYC4gSWYgYSBtZXNzYWdlIHdhcyBsYXJnZXIgdGhhbiA0NCBieXRlcyAob3VyIGBTTUNfV1JfVFhfU0laRWApLCBhbnkgZXh0cmEgZGF0YSB3b3VsZCBiZSBsZWZ0IGluIGBsZ3ItXHUwMDNld3JfcnhfYnVmX3YyYC4gIFRoZSBwcm9ibGVtLCBmcm9tIHdoYXQgSSdtIGdhdGhlcmluZywgaXMgdGhhdCB0aGUgc3Vic2VxdWVudCBmdW5jdGlvbnMsIGBzbWNfbGxjX3NhdmVfYWRkX2xpbmtfcmtleXNgIGFuZCBgc21jX2xsY19ybXRfZGVsZXRlX3JrZXlgLCB3b3VsZCBkaXJlY3RseSByZWFkIGZyb20gdGhpcyBgbGdyLVx1MDAzZXdyX3J4X2J1Zl92MmAuXG5cblRoZSBwcm9ibGVtPyBgc21jX2xsY19lbnF1ZXVlYCBxdWV1ZXMgdGhlIG1lc3NhZ2UgZm9yIGRlZmVycmVkIHByb2Nlc3NpbmcgYnkgYSB3b3JrZXIgdGhyZWFkIChgc21jX2xsY19ldmVudF93b3JrYCkuIENyaXRpY2FsbHksIHdoaWxlIHRoZSBtZXNzYWdlIGlzIHF1ZXVlZCwgKmFub3RoZXIqIG1lc3NhZ2UgY291bGQgYXJyaXZlIGFuZCBvdmVyd3JpdGUgYGxnci1cdTAwM2V3cl9yeF9idWZfdjJgISBUaGUgYHdyX3J4X2J1Zl92MmAgYXBwZWFycyB0byBiZSBhIHNoYXJlZCBidWZmZXIgYXQgdGhlIGxpbmsgZ3JvdXAgbGV2ZWwsIHdoaWNoIG1lYW5zIGl0J3MgYSByYWNlIGNvbmRpdGlvbiB3YWl0aW5nIHRvIGhhcHBlbi4gSXQgaXMgc3VzY2VwdGlibGUgdG8gcG90ZW50aWFsIG92ZXJ3cml0ZXMsIHdoZXJlIHRoZSB3b3JrZXIgdGhyZWFkIGNvdWxkIHRoZW4gcHJvY2VzcyBpbmNvcnJlY3Qgb3IgcGFydGlhbGx5IGNvcnJlY3QgZGF0YSwgbGVhZGluZyB0byB2YXJpb3VzIGlzc3Vlcy4gIFRoZSBjaGFuZ2VzIGluIHRoaXMgcGF0Y2ggYXJlIGxpa2VseSBhaW1lZCBhdCBlbnN1cmluZyB0aGUgZGF0YSBpcyBwcm9wZXJseSBjb3BpZWQgYW5kIGlzb2xhdGVkLCBzbyB0aGF0IGEgZGVsYXllZCB3b3JrZXIgY2FuIHJlYWQgd2l0aG91dCBwb3RlbnRpYWwgZm9yIGNvcnJ1cHRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODc5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjAwOjI5LjE4NjUyODcxOFoiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0NTAyODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid3JfcnhfYnVmX3YyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX2NvcmUuaD0yODY9c3RydWN0IHNtY19saW5rX2dyb3VwIHtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuaC0zMjAtXFx0XFx0XFx0XFx0XFx0XFx0Lyogc21jIGxpbmsgKi9cXG5uZXQvc21jL3NtY19jb3JlLmg6MzIxOlxcdFxcdFxcdHN0cnVjdCBzbWNfd3JfdjJfYnVmXFx0KndyX3J4X2J1Zl92MjtcXG5uZXQvc21jL3NtY19jb3JlLmgtMzIyLVxcdFxcdFxcdFxcdFxcdFxcdC8qIFdSIHYyIHJlY3YgcGF5bG9hZCBidWZmZXIgKi9cXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jPTIxMTY9c3RhdGljIHZvaWQgc21jX2xsY19lbnF1ZXVlKHN0cnVjdCBzbWNfbGluayAqbGluaywgdW5pb24gc21jX2xsY19tc2cgKmxsYyxcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTIxNDEtXFx0XFx0dTggKnNyYyA9IHNtY19saW5rX3NoYXJlZF92Ml9yeGJ1ZihsaW5rKSA/XFxubmV0L3NtYy9zbWNfbGxjLmM6MjE0MjpcXHRcXHRcXHQodTggKilsZ3ItXFx1MDAzZXdyX3J4X2J1Zl92MiA6ICh1OCAqKWxsYztcXG5uZXQvc21jL3NtY19sbGMuYy0yMTQzLVxcbi0tXFxubmV0L3NtYy9zbWNfd3IuYz02ODI9dm9pZCBzbWNfd3JfZnJlZV9sZ3JfbWVtKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyKVxcbi0tXFxubmV0L3NtYy9zbWNfd3IuYy02ODYtXFxubmV0L3NtYy9zbWNfd3IuYzo2ODc6XFx0a2ZyZWUobGdyLVxcdTAwM2V3cl9yeF9idWZfdjIpO1xcbm5ldC9zbWMvc21jX3dyLmM6Njg4OlxcdGxnci1cXHUwMDNld3JfcnhfYnVmX3YyID0gTlVMTDtcXG5uZXQvc21jL3NtY193ci5jLTY4OS1cXHRrZnJlZShsZ3ItXFx1MDAzZXdyX3R4X2J1Zl92Mik7XFxuLS1cXG5uZXQvc21jL3NtY193ci5jPTcyNT1pbnQgc21jX3dyX2FsbG9jX2xncl9tZW0oc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IpXFxuLS1cXG5uZXQvc21jL3NtY193ci5jLTcyOS1cXG5uZXQvc21jL3NtY193ci5jOjczMDpcXHRsZ3ItXFx1MDAzZXdyX3J4X2J1Zl92MiA9IGt6YWxsb2MoU01DX1dSX0JVRl9WMl9TSVpFLCBHRlBfS0VSTkVMKTtcXG5uZXQvc21jL3NtY193ci5jOjczMTpcXHRpZiAoIWxnci1cXHUwMDNld3JfcnhfYnVmX3YyKVxcbm5ldC9zbWMvc21jX3dyLmMtNzMyLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi0tXFxubmV0L3NtYy9zbWNfd3IuYy03MzQtXFx0aWYgKCFsZ3ItXFx1MDAzZXdyX3R4X2J1Zl92Mikge1xcbm5ldC9zbWMvc21jX3dyLmM6NzM1OlxcdFxcdGtmcmVlKGxnci1cXHUwMDNld3JfcnhfYnVmX3YyKTtcXG5uZXQvc21jL3NtY193ci5jLTczNi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmM9ODU1PWludCBzbWNfd3JfY3JlYXRlX2xpbmsoc3RydWN0IHNtY19saW5rICpsbmspXFxuLS1cXG5uZXQvc21jL3NtY193ci5jLTg3Mi1cXHRcXHRcXHRsbmstXFx1MDAzZXdyX3J4X3YyX2RtYV9hZGRyID1cXG5uZXQvc21jL3NtY193ci5jOjg3MzpcXHRcXHRcXHRcXHRpYl9kbWFfbWFwX3NpbmdsZShpYmRldiwgbG5rLVxcdTAwM2VsZ3ItXFx1MDAzZXdyX3J4X2J1Zl92MixcXG5uZXQvc21jL3NtY193ci5jLTg3NC1cXHRcXHRcXHRcXHRcXHRcXHQgIFNNQ19XUl9CVUZfVjJfU0laRSwgRE1BX0ZST01fREVWSUNFKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6MDA6MjkuMjMzOTkyMjQ3WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0OTEzODgyMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBbmFseXNpcyBvZiB0aGUgYHdyX3J4X2J1Zl92MmAgQWxsb2NhdGlvbiBhbmQgVXNhZ2UqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgYHdyX3J4X2J1Zl92MmAgc3RydWN0dXJlLCBJIHNlZSB0aGF0IGl0J3MgYWxsb2NhdGVkIGFzIGEgc2luZ2xlIGJ1ZmZlciBwZXIgbGluayBncm91cCB1c2luZyBga3phbGxvY2AuIFRoYXQncyBzdGFuZGFyZCBwcmFjdGljZSwgYW5kIGl0J3MgbWFwcGVkIGZvciBETUEsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgZm9yIGVmZmljaWVudCBkYXRhIHRyYW5zZmVyLiBJdCdzIGFsbG9jYXRlZCBhdCB0aGUgc2l6ZSBgU01DX1dSX0JVRl9WMl9TSVpFYCwgd2hpY2ggaXMgdHlwaWNhbC5cblxuQnV0IGhvbGQgb27igKYgdGhlIHdheSBpdCdzIGJlaW5nIHVzZWQgaXMgYSBiaXQgY29uY2VybmluZy4gSXQgbG9va3MgbGlrZSB0aGUgZmlyc3QgNDQgYnl0ZXMgb2YgYW4gaW5jb21pbmcgbWVzc2FnZSBhcmUgd3JpdHRlbiB0byBgbG5rLVx1MDAzZXdyX3J4X3NnZXNbeF0uYWRkcmAsIGFuZCB0aGVuIHRoZSByZW1haW5kZXIgb2YgdGhlIGRhdGEgZ29lcyBpbnRvIHRoZSBidWZmZXIgYXQgYW4gb2Zmc2V0OiBgbG5rLVx1MDAzZXdyX3J4X3YyX2RtYV9hZGRyICsgU01DX1dSX1RYX1NJWkVgLlxuXG5UaGUgcHJvYmxlbSBpcyBpbW1lZGlhdGVseSBhcHBhcmVudC4gSWYgbXVsdGlwbGUgbWVzc2FnZXMgY29tZSBpbiBzaW11bHRhbmVvdXNseSDigJMgb3IgZXZlbiBzZXF1ZW50aWFsbHkgYmVmb3JlIHRoZSBwcmV2aW91cyBtZXNzYWdlIGlzIGZ1bGx5IHByb2Nlc3NlZCDigJMgdGhleSdyZSBnb2luZyB0byBvdmVyd3JpdGUgdGhlIHNhbWUgYHdyX3J4X2J1Zl92MmAhIFRoaXMgaXMgYmVjYXVzZSBgbG5rLVx1MDAzZXdyX3J4X3NnZXNbeCArIDFdLmFkZHJgIGlzIGFsd2F5cyBjYWxjdWxhdGVkIGFzIGBsbmstXHUwMDNld3JfcnhfdjJfZG1hX2FkZHIgKyBTTUNfV1JfVFhfU0laRWAuIFRoaXMgaXMgaGlnaGx5IHByb2JsZW1hdGljLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGRhdGEgY29ycnVwdGlvbiBhbmQgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgaXNzdWVzLlxuXG5JIG5lZWQgdG8gcmV2aXNpdCB0aGUgYHNtY193cl9pbml0X3NnZWAgZnVuY3Rpb247IHRoZXJlIGlzIGNsZWFybHkgc29tZSBhc3BlY3Qgb2YgdGhlIGRlc2lnbiB0aGF0IEkgYW0gbWlzc2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUwOTgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6MDA6MzQuNzI1Mzg0MDY0WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc21jL3NtY193ci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwOSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYwOTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbG5rLVxcdTAwM2V3cl9yeF9jbnQ7IGkrKykge1xcbiA2MTA6XFx0XFx0XFx0aW50IHggPSBpICogbG5rLVxcdTAwM2V3cl9yeF9zZ2VfY250O1xcbiA2MTE6XFx0XFxuIDYxMjpcXHRcXHRcXHRsbmstXFx1MDAzZXdyX3J4X3NnZXNbeF0uYWRkciA9XFxuIDYxMzpcXHRcXHRcXHRcXHRsbmstXFx1MDAzZXdyX3J4X2RtYV9hZGRyICsgaSAqIGxuay1cXHUwMDNld3JfcnhfYnVmbGVuO1xcbiA2MTQ6XFx0XFx0XFx0bG5rLVxcdTAwM2V3cl9yeF9zZ2VzW3hdLmxlbmd0aCA9IHNtY19saW5rX3NoYXJlZF92Ml9yeGJ1ZihsbmspID9cXG4gNjE1OlxcdFxcdFxcdFxcdFNNQ19XUl9UWF9TSVpFIDogbG5rLVxcdTAwM2V3cl9yeF9idWZsZW47XFxuIDYxNjpcXHRcXHRcXHRsbmstXFx1MDAzZXdyX3J4X3NnZXNbeF0ubGtleSA9IGxuay1cXHUwMDNlcm9jZV9wZC1cXHUwMDNlbG9jYWxfZG1hX2xrZXk7XFxuIDYxNzpcXHRcXHRcXHRpZiAobG5rLVxcdTAwM2VsZ3ItXFx1MDAzZXNtY192ZXJzaW9uID09IFNNQ19WMiBcXHUwMDI2XFx1MDAyNiBzbWNfbGlua19zaGFyZWRfdjJfcnhidWYobG5rKSkge1xcbiA2MTg6XFx0XFx0XFx0XFx0bG5rLVxcdTAwM2V3cl9yeF9zZ2VzW3ggKyAxXS5hZGRyID1cXG4gNjE5OlxcdFxcdFxcdFxcdFxcdFxcdGxuay1cXHUwMDNld3JfcnhfdjJfZG1hX2FkZHIgKyBTTUNfV1JfVFhfU0laRTtcXG4gNjIwOlxcdFxcdFxcdFxcdGxuay1cXHUwMDNld3Jfcnhfc2dlc1t4ICsgMV0ubGVuZ3RoID1cXG4gNjIxOlxcdFxcdFxcdFxcdFxcdFxcdFNNQ19XUl9CVUZfVjJfU0laRSAtIFNNQ19XUl9UWF9TSVpFO1xcbiA2MjI6XFx0XFx0XFx0XFx0bG5rLVxcdTAwM2V3cl9yeF9zZ2VzW3ggKyAxXS5sa2V5ID1cXG4gNjIzOlxcdFxcdFxcdFxcdFxcdFxcdGxuay1cXHUwMDNlcm9jZV9wZC1cXHUwMDNlbG9jYWxfZG1hX2xrZXk7XFxuIDYyNDpcXHRcXHRcXHR9XFxuIDYyNTpcXHRcXHRcXHRsbmstXFx1MDAzZXdyX3J4X2lic1tpXS5uZXh0ID0gTlVMTDtcXG4gNjI2OlxcdFxcdFxcdGxuay1cXHUwMDNld3JfcnhfaWJzW2ldLnNnX2xpc3QgPSBcXHUwMDI2bG5rLVxcdTAwM2V3cl9yeF9zZ2VzW3hdO1xcbiA2Mjc6XFx0XFx0XFx0bG5rLVxcdTAwM2V3cl9yeF9pYnNbaV0ubnVtX3NnZSA9IGxuay1cXHUwMDNld3Jfcnhfc2dlX2NudDtcXG4gNjI4OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6MDA6MzQuNzI1NDk5NjI0WiIsIlNlcSI6NTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNjMyODc2Mzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFJhY2UgQ29uZGl0aW9uIGFuZCBQb3RlbnRpYWwgRGF0YSBDb3JydXB0aW9uKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBpdCdzIHByZXR0eSBjbGVhciB3aGF0IHRoZSBwcm9ibGVtIGlzLiBGb3IgZXZlcnkgaW5kZXggYGlgLCB0aGUgYWRkcmVzcyBgbG5rLVx1MDAzZXdyX3J4X3NnZXNbeCArIDFdLmFkZHJgIGlzIGNvbnNpc3RlbnQg4oCTIGl0J3MgYWN0dWFsbHkgYGxuay1cdTAwM2V3cl9yeF92Ml9kbWFfYWRkciArIFNNQ19XUl9UWF9TSVpFYC4gVGhhdCBtZWFucyBhbGwgaW5jb21pbmcgbWVzc2FnZXMgc2hhcmUgdGhlIHNhbWUgc3BpbGxvdmVyIGJ1ZmZlci4gVGhhdCdzIG15IGZpcnN0IGNsdWUuXG5cblRoZSBgc21jX2xsY19yeF9oYW5kbGVyYCBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQgd2hlbiBhIG1lc3NhZ2UgYXJyaXZlcy4gSXQgZW5xdWV1ZXMgdGhlIG1lc3NhZ2UsIHdoaWNoIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIEJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgYHNtY19sbGNfZW5xdWV1ZWAgZnVuY3Rpb24gd291bGQgY29weSBvbmx5IHRoZSBmaXJzdCA0NCBieXRlcyAodGhlIGB1bmlvbiBzbWNfbGxjX21zZ2ApIG9mIHRoZSBtZXNzYWdlIGludG8gYSBuZXdseSBhbGxvY2F0ZWQgYHFlbnRyeWAuIFRoZSAqc3BpbGxvdmVyKiBieXRlcywgdGhvdWdoLCB0aG9zZSB3ZXJlIGxlZnQgcmVzaWRpbmcgaW4gYGxnci1cdTAwM2V3cl9yeF9idWZfdjJgLiBUaGUgd29ya2VyIHRocmVhZCBsYXRlciBwcm9jZXNzZWQgdGhpcyBgcWVudHJ5YCBhbmQgcmVhZCB0aGUgc3BpbGxvdmVyIGJ5dGVzIGZyb20gdGhhdCBzaGFyZWQgYGxnci1cdTAwM2V3cl9yeF9idWZfdjJgIGJ1ZmZlci5cblxuVGhlIHByb2JsZW0/IElmIGEgc2Vjb25kIG1lc3NhZ2UgY2FtZSBpbiBiZWZvcmUgdGhlIHdvcmtlciB0aHJlYWQgaGFkIGEgY2hhbmNlIHRvIHByb2Nlc3MgdGhlIGZpcnN0LCB0aGUgc3BpbGxvdmVyIGJ5dGVzIGluIGBsZ3ItXHUwMDNld3JfcnhfYnVmX3YyYCB3b3VsZCBnZXQgb3ZlcndyaXR0ZW4gYnkgdGhlIHNlY29uZCBtZXNzYWdlLiBQdXJlIHJhY2UgY29uZGl0aW9uLCBjbGFzc2ljIGRhdGEgY29ycnVwdGlvbi4gVGhlIHBhdGNoIGZpeGVzIHRoaXMgYnkgY29weWluZyB0aGUgKmVudGlyZSogbWVzc2FnZSwgaW5jbHVkaW5nIHRoZSBzcGlsbG92ZXIgZGF0YSwgaW50byB0aGUgYHFlbnRyeWAuIEVhY2ggYHFlbnRyeWAgbm93IGdldHMgaXRzIG93biBjb3B5LCBlbGltaW5hdGluZyB0aGUgc2hhcmVkIGJ1ZmZlciBhbmQgdGhlIHJhY2UuXG5cbk5vdywgbXkgbWluZCBzaGlmdHMgdG8gaG93IHRoaXMgcmFjZSBtaWdodCBoYXZlIG1hbmlmZXN0ZWQgaW4gd2F5cyBJIGNhbiBhbmFseXplIGZ1cnRoZXIuIFRoaXMgcmFjZSBkb2Vzbid0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggaXMgZ29vZC4gRXZlbiBpZiB0aGUgc2Vjb25kIG1lc3NhZ2UgaXMgc2hvcnRlciwgdGhlIHNwaWxsb3ZlciBidWZmZXIgaXMgaW5pdGlhbGl6ZWQgbWVtb3J5LCBqdXN0IHBvdGVudGlhbGx5IGNvcnJ1cHRlZC4gSG93ZXZlciwgaXQncyBwb3NzaWJsZSBmb3IgdGhlIHdvcmtlciB0aHJlYWQgdG8gcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGRhdGEuXG5cbkkgc3RhcnQgdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy4gQmVmb3JlIHRoZSBwYXRjaCwgaW4gYHNtY19sbGNfc2F2ZV9hZGRfbGlua19ya2V5c2AsIHRoZXJlJ3MgdGhpcyBjb2RlIHNuaXBwZXQ6XG5cbmBgYGNcblx0ZXh0ID0gKHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua192Ml9leHQgKikobGxjX21zZyArXG5cdFx0XHRcdFx0XHQgICAgIFNNQ19XUl9UWF9TSVpFKTtcblx0bWF4ID0gbWluX3QodTgsIGV4dC1cdTAwM2VudW1fcmtleXMsIFNNQ19MTENfUktFWVNfUEVSX01TR19WMik7XG5cdGRvd25fd3JpdGUoXHUwMDI2bGdyLVx1MDAzZXJtYnNfbG9jayk7XG5cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG1heDsgaSsrKSB7XG5cdFx0c21jX3J0b2tlbl9zZXQobGdyLCBsaW5rLVx1MDAzZWxpbmtfaWR4LCBsaW5rX25ldy1cdTAwM2VsaW5rX2lkeCxcblx0XHRcdCAgICAgICBleHQtXHUwMDNlcnRbaV0ucm1iX2tleSxcblx0XHRcdCAgICAgICBleHQtXHUwMDNlcnRbaV0ucm1iX3ZhZGRyX25ldyxcblx0XHRcdCAgICAgICBleHQtXHUwMDNlcnRbaV0ucm1iX2tleV9uZXcpO1xuXHR9XG5gYGBcblxuVGhpcyBjb2RlICpkaWRuJ3QqIGNoZWNrIGlmIHRoZSByZWNlaXZlZCBtZXNzYWdlIHdhcyBsb25nIGVub3VnaCB0byBjb250YWluIHRoZSBudW1iZXIgb2YgcmtleXMgaW5kaWNhdGVkIGJ5IGBleHQtXHUwMDNlbnVtX3JrZXlzYCEgSXQganVzdCBibGluZGx5IHRydXN0cyB0aGF0IHZhbHVlLCB0aGVuIHJlYWRzIHVwIHRvIGBTTUNfTExDX1JLRVlTX1BFUl9NU0dfVjJgIHJrZXlzIGZyb20gdGhlIHNoYXJlZCBgbGxjX21zZyArIFNNQ19XUl9UWF9TSVpFYCBidWZmZXIuIElmIHRoZSBwZWVyIHNlbmRzIGEgc2hvcnQgbWVzc2FnZSBidXQgc3BlY2lmaWVzIGEgbGFyZ2UgYG51bV9ya2V5c2AsIHRoZSBjb2RlIHdpbGwgcmVhZCBwYXN0IHRoZSBhY3R1YWwgcmVjZWl2ZWQgZGF0YSBpbiBgbGdyLVx1MDAzZXdyX3J4X2J1Zl92MmAuIEJlY2F1c2UgYGxnci1cdTAwM2V3cl9yeF9idWZfdjJgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCwgaXQncyB6ZXJvZWQgb24gYWxsb2NhdGlvbi4gU28gdGhlIG1lbW9yeSByZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgbWVzc2FnZSB3aWxsIGNvbnRhaW4gZWl0aGVyIHplcm9zIG9yIGRhdGEgZnJvbSBwcmV2aW91cyBtZXNzYWdlcy4gVGhpcyBpcyBzdGlsbCBub3QgKnVuaW5pdGlhbGl6ZWQqIG1lbW9yeSwgYnV0IGl0J3MgY2xlYXJseSBjb3JydXB0ZWQgYW5kIGNvdWxkIGxlYWQgdG8gaXNzdWVzLlxuXG5Ob3csIEkgbmVlZCB0byBjb25zaWRlciBhIGRpZmZlcmVudCBwYXRoLiBXaGF0IGhhcHBlbnMgaWYgYHNtY19saW5rX3NoYXJlZF92Ml9yeGJ1ZihsaW5rKWAgaXMgZmFsc2U/IFRoZW4sIGBsbGNfbXNnYCBwb2ludHMgdG8gYGxuay1cdTAwM2V3cl9yeF9zZ2VzW3hdLmFkZHJgLCB3aGljaCBpcyBhbGxvY2F0ZWQgaW4gYHNtY193cl9hbGxvY19saW5rX21lbWAuIEknbGwgbmVlZCB0byBjaGVjayBob3cgdGhhdCBidWZmZXIgaXMgYWxsb2NhdGVkIHRvIGNvbmZpcm0gdGhhdCB0aGUgc2FtZSBhc3N1bXB0aW9ucyBhYm91dCBpbml0aWFsaXphdGlvbiBhcHBseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYxNzMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzowMDo0Ny4zNTgzODAwMDJaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTAzNTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndyX3J4X2RtYV9hZGRyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX2NvcmUuaD05Nz1zdHJ1Y3Qgc21jX2xpbmsge1xcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5oLTEzNS1cXHRcXHRcXHRcXHRcXHRcXHQgKi9cXG5uZXQvc21jL3NtY19jb3JlLmg6MTM2OlxcdGRtYV9hZGRyX3RcXHRcXHR3cl9yeF9kbWFfYWRkcjtcXHQvKiBETUEgYWRkcmVzcyBvZiB3cl9yeF9idWZzICovXFxubmV0L3NtYy9zbWNfY29yZS5oLTEzNy1cXHRkbWFfYWRkcl90XFx0XFx0d3JfcnhfdjJfZG1hX2FkZHI7IC8qIERNQSBhZGRyZXNzIG9mIHYyIHJ4IGJ1ZiovXFxuLS1cXG5uZXQvc21jL3NtY193ci5jPTU1Nj1zdGF0aWMgdm9pZCBzbWNfd3JfaW5pdF9zZ2Uoc3RydWN0IHNtY19saW5rICpsbmspXFxuLS1cXG5uZXQvc21jL3NtY193ci5jLTYxMi1cXHRcXHRsbmstXFx1MDAzZXdyX3J4X3NnZXNbeF0uYWRkciA9XFxubmV0L3NtYy9zbWNfd3IuYzo2MTM6XFx0XFx0XFx0bG5rLVxcdTAwM2V3cl9yeF9kbWFfYWRkciArIGkgKiBsbmstXFx1MDAzZXdyX3J4X2J1ZmxlbjtcXG5uZXQvc21jL3NtY193ci5jLTYxNC1cXHRcXHRsbmstXFx1MDAzZXdyX3J4X3NnZXNbeF0ubGVuZ3RoID0gc21jX2xpbmtfc2hhcmVkX3YyX3J4YnVmKGxuaykgP1xcbi0tXFxubmV0L3NtYy9zbWNfd3IuYz02MzY9dm9pZCBzbWNfd3JfZnJlZV9saW5rKHN0cnVjdCBzbWNfbGluayAqbG5rKVxcbi0tXFxubmV0L3NtYy9zbWNfd3IuYy02NTUtXFxubmV0L3NtYy9zbWNfd3IuYzo2NTY6XFx0aWYgKGxuay1cXHUwMDNld3JfcnhfZG1hX2FkZHIpIHtcXG5uZXQvc21jL3NtY193ci5jOjY1NzpcXHRcXHRpYl9kbWFfdW5tYXBfc2luZ2xlKGliZGV2LCBsbmstXFx1MDAzZXdyX3J4X2RtYV9hZGRyLFxcbm5ldC9zbWMvc21jX3dyLmMtNjU4LVxcdFxcdFxcdFxcdCAgICBsbmstXFx1MDAzZXdyX3J4X2J1ZmxlbiAqIGxuay1cXHUwMDNld3JfcnhfY250LFxcbm5ldC9zbWMvc21jX3dyLmMtNjU5LVxcdFxcdFxcdFxcdCAgICBETUFfRlJPTV9ERVZJQ0UpO1xcbm5ldC9zbWMvc21jX3dyLmM6NjYwOlxcdFxcdGxuay1cXHUwMDNld3JfcnhfZG1hX2FkZHIgPSAwO1xcbm5ldC9zbWMvc21jX3dyLmMtNjYxLVxcdH1cXG4tLVxcbm5ldC9zbWMvc21jX3dyLmM9ODU1PWludCBzbWNfd3JfY3JlYXRlX2xpbmsoc3RydWN0IHNtY19saW5rICpsbmspXFxuLS1cXG5uZXQvc21jL3NtY193ci5jLTg2MS1cXHRsbmstXFx1MDAzZXdyX3J4X2lkID0gMDtcXG5uZXQvc21jL3NtY193ci5jOjg2MjpcXHRsbmstXFx1MDAzZXdyX3J4X2RtYV9hZGRyID0gaWJfZG1hX21hcF9zaW5nbGUoXFxubmV0L3NtYy9zbWNfd3IuYy04NjMtXFx0XFx0aWJkZXYsIGxuay1cXHUwMDNld3JfcnhfYnVmcyxcXHRsbmstXFx1MDAzZXdyX3J4X2J1ZmxlbiAqIGxuay1cXHUwMDNld3JfcnhfY250LFxcbm5ldC9zbWMvc21jX3dyLmMtODY0LVxcdFxcdERNQV9GUk9NX0RFVklDRSk7XFxubmV0L3NtYy9zbWNfd3IuYzo4NjU6XFx0aWYgKGliX2RtYV9tYXBwaW5nX2Vycm9yKGliZGV2LCBsbmstXFx1MDAzZXdyX3J4X2RtYV9hZGRyKSkge1xcbm5ldC9zbWMvc21jX3dyLmM6ODY2OlxcdFxcdGxuay1cXHUwMDNld3JfcnhfZG1hX2FkZHIgPSAwO1xcbm5ldC9zbWMvc21jX3dyLmMtODY3LVxcdFxcdHJjID0gLUVJTztcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmMtOTI2LVxcdH1cXG5uZXQvc21jL3NtY193ci5jOjkyNzpcXHRpYl9kbWFfdW5tYXBfc2luZ2xlKGliZGV2LCBsbmstXFx1MDAzZXdyX3J4X2RtYV9hZGRyLFxcbm5ldC9zbWMvc21jX3dyLmMtOTI4LVxcdFxcdFxcdCAgICBsbmstXFx1MDAzZXdyX3J4X2J1ZmxlbiAqIGxuay1cXHUwMDNld3JfcnhfY250LFxcbm5ldC9zbWMvc21jX3dyLmMtOTI5LVxcdFxcdFxcdCAgICBETUFfRlJPTV9ERVZJQ0UpO1xcbm5ldC9zbWMvc21jX3dyLmM6OTMwOlxcdGxuay1cXHUwMDNld3JfcnhfZG1hX2FkZHIgPSAwO1xcbm5ldC9zbWMvc21jX3dyLmMtOTMxLW91dDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6MDA6NDcuNDA1Mjk0NDlaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI3OTUzMjk1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYHdyX3J4X2J1ZnNgIEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBgbG5rLVx1MDAzZXdyX3J4X2J1ZnNgIGlzIG1hcHBlZC4gVGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gdHJhY2UgYmFjayBhbmQgZGV0ZXJtaW5lICp3aGVyZSogdGhpcyBgd3JfcnhfYnVmc2AgYnVmZmVyIGl0c2VsZiBpcyBhY3R1YWxseSBhbGxvY2F0ZWQuIEtub3dpbmcgdGhlIGFsbG9jYXRpb24gY29udGV4dCBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSwgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBvcmlnaW4gb2YgdGhpcyBwYXJ0aWN1bGFyIG1lbW9yeSBibG9jay4gTGV0J3Mgc2VlIGlmIHRoZSBjb2RlIHJlYWRpbHkgcmV2ZWFscyBpdHMgYWxsb2NhdGlvbiBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkwMTIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzowMDo1MC42ODQ4MzA4NzlaIiwiU2VxIjo1NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NjYzMTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndyX3J4X2J1ZnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9zbWNfY29yZS5oPTk3PXN0cnVjdCBzbWNfbGluayB7XFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmgtMTI3LVxcbm5ldC9zbWMvc21jX2NvcmUuaDoxMjg6XFx0dThcXHRcXHRcXHQqd3JfcnhfYnVmcztcXHQvKiBXUiByZWN2IHBheWxvYWQgYnVmZmVycyAqL1xcbm5ldC9zbWMvc21jX2NvcmUuaC0xMjktXFx0c3RydWN0IGliX3JlY3Zfd3JcXHQqd3JfcnhfaWJzO1xcdC8qIFdSIHJlY3YgbWV0YSBkYXRhICovXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmgtMTM1LVxcdFxcdFxcdFxcdFxcdFxcdCAqL1xcbm5ldC9zbWMvc21jX2NvcmUuaDoxMzY6XFx0ZG1hX2FkZHJfdFxcdFxcdHdyX3J4X2RtYV9hZGRyO1xcdC8qIERNQSBhZGRyZXNzIG9mIHdyX3J4X2J1ZnMgKi9cXG5uZXQvc21jL3NtY19jb3JlLmgtMTM3LVxcdGRtYV9hZGRyX3RcXHRcXHR3cl9yeF92Ml9kbWFfYWRkcjsgLyogRE1BIGFkZHJlc3Mgb2YgdjIgcnggYnVmKi9cXG4tLVxcbm5ldC9zbWMvc21jX3dyLmM9NDMwPXN0YXRpYyBpbmxpbmUgdm9pZCBzbWNfd3JfcnhfZGVtdWx0aXBsZXgoc3RydWN0IGliX3djICp3YylcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmMtNDQxLVxcdGluZGV4ID0gZG9fZGl2KHRlbXBfd3JfaWQsIGxpbmstXFx1MDAzZXdyX3J4X2NudCk7XFxubmV0L3NtYy9zbWNfd3IuYzo0NDI6XFx0d3JfcnggPSAoc3RydWN0IHNtY193cl9yeF9oZHIgKikobGluay1cXHUwMDNld3JfcnhfYnVmcyArIGluZGV4ICogbGluay1cXHUwMDNld3JfcnhfYnVmbGVuKTtcXG5uZXQvc21jL3NtY193ci5jLTQ0My1cXHRoYXNoX2Zvcl9lYWNoX3Bvc3NpYmxlKHNtY193cl9yeF9oYXNoLCBoYW5kbGVyLCBsaXN0LCB3cl9yeC1cXHUwMDNldHlwZSkge1xcbi0tXFxubmV0L3NtYy9zbWNfd3IuYz02OTM9dm9pZCBzbWNfd3JfZnJlZV9saW5rX21lbShzdHJ1Y3Qgc21jX2xpbmsgKmxuaylcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmMtNzIwLVxcdGxuay1cXHUwMDNld3JfdHhfYnVmcyA9IE5VTEw7XFxubmV0L3NtYy9zbWNfd3IuYzo3MjE6XFx0a2ZyZWUobG5rLVxcdTAwM2V3cl9yeF9idWZzKTtcXG5uZXQvc21jL3NtY193ci5jOjcyMjpcXHRsbmstXFx1MDAzZXdyX3J4X2J1ZnMgPSBOVUxMO1xcbm5ldC9zbWMvc21jX3dyLmMtNzIzLX1cXG4tLVxcbm5ldC9zbWMvc21jX3dyLmM9NzQxPWludCBzbWNfd3JfYWxsb2NfbGlua19tZW0oc3RydWN0IHNtY19saW5rICpsaW5rKVxcbi0tXFxubmV0L3NtYy9zbWNfd3IuYy03NDctXFx0XFx0Z290byBub19tZW07XFxubmV0L3NtYy9zbWNfd3IuYzo3NDg6XFx0bGluay1cXHUwMDNld3JfcnhfYnVmcyA9IGtjYWxsb2MobGluay1cXHUwMDNlbWF4X3JlY3Zfd3IsIGxpbmstXFx1MDAzZXdyX3J4X2J1ZmxlbixcXG5uZXQvc21jL3NtY193ci5jLTc0OS1cXHRcXHRcXHRcXHQgICBHRlBfS0VSTkVMKTtcXG5uZXQvc21jL3NtY193ci5jOjc1MDpcXHRpZiAoIWxpbmstXFx1MDAzZXdyX3J4X2J1ZnMpXFxubmV0L3NtYy9zbWNfd3IuYy03NTEtXFx0XFx0Z290byBub19tZW1fd3JfdHhfYnVmcztcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmMtNzUzLVxcdGlmICghbGluay1cXHUwMDNld3JfdHhfaWJzKVxcbm5ldC9zbWMvc21jX3dyLmM6NzU0OlxcdFxcdGdvdG8gbm9fbWVtX3dyX3J4X2J1ZnM7XFxubmV0L3NtYy9zbWNfd3IuYy03NTUtXFx0bGluay1cXHUwMDNld3JfcnhfaWJzID0ga3phbGxvY19vYmpzKGxpbmstXFx1MDAzZXdyX3J4X2lic1swXSwgbGluay1cXHUwMDNlbWF4X3JlY3Zfd3IpO1xcbi0tXFxubmV0L3NtYy9zbWNfd3IuYy04MjAtXFx0a2ZyZWUobGluay1cXHUwMDNld3JfdHhfaWJzKTtcXG5uZXQvc21jL3NtY193ci5jOjgyMTpub19tZW1fd3JfcnhfYnVmczpcXG5uZXQvc21jL3NtY193ci5jOjgyMjpcXHRrZnJlZShsaW5rLVxcdTAwM2V3cl9yeF9idWZzKTtcXG5uZXQvc21jL3NtY193ci5jLTgyMy1ub19tZW1fd3JfdHhfYnVmczpcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmM9ODU1PWludCBzbWNfd3JfY3JlYXRlX2xpbmsoc3RydWN0IHNtY19saW5rICpsbmspXFxuLS1cXG5uZXQvc21jL3NtY193ci5jLTg2Mi1cXHRsbmstXFx1MDAzZXdyX3J4X2RtYV9hZGRyID0gaWJfZG1hX21hcF9zaW5nbGUoXFxubmV0L3NtYy9zbWNfd3IuYzo4NjM6XFx0XFx0aWJkZXYsIGxuay1cXHUwMDNld3JfcnhfYnVmcyxcXHRsbmstXFx1MDAzZXdyX3J4X2J1ZmxlbiAqIGxuay1cXHUwMDNld3JfcnhfY250LFxcbm5ldC9zbWMvc21jX3dyLmMtODY0LVxcdFxcdERNQV9GUk9NX0RFVklDRSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjAwOjUwLjczMDQ5ODk2OFoiLCJTZXEiOjU1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzE2NTM5MjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIERhdGEgQ29ycnVwdGlvbiBCdWcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBsaW5rLVx1MDAzZXdyX3J4X2J1ZnNgIGFsbG9jYXRpb24uIEl0J3MgYWxsb2NhdGVkIHVzaW5nIGBrY2FsbG9jYCwgbWVhbmluZyBpdCdzIGluaXRpYWxpemVkIHRvIHplcm8uIFRoaXMgaXMgY3J1Y2lhbC4gSWYgd2UgZ2V0IGEgc2hvcnQgbWVzc2FnZSwgdGhlIHJlbWFpbmluZyBieXRlcyBpbiB0aGUgYnVmZmVyICphcmVuJ3QqIHVuaW5pdGlhbGl6ZWQgZ2FyYmFnZTsgdGhleSdyZSBlaXRoZXIgemVyb2VzIG9yIGxlZnRvdmVyIGRhdGEgZnJvbSBwcmV2aW91cyBtZXNzYWdlcy4gVGhpcyBjaGFuZ2VzIHRoZSB3aG9sZSBwaWN0dXJlLlxuXG5UaGVyZWZvcmUsIHRoZSBwcm9ibGVtIGlzbid0IGFib3V0IHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIHRoYXQncyBub3QgdGhlIGJ1Zy4gVGhlIHBhdGNoIG11c3QgYmUgYWRkcmVzc2luZyBkYXRhIGNvcnJ1cHRpb24gZHVlIHRvIGEgcmFjZS4gQSBzaGFyZWQgcmVjZWl2ZSBidWZmZXIgaXMgYmVpbmcgb3ZlcndyaXR0ZW4gYnkgYSBuZXcgbWVzc2FnZSBiZWZvcmUgdGhlIG9sZCBvbmUgaXMgZnVsbHkgcHJvY2Vzc2VkLiBJdCdzIGEgY2xhc3NpYyBsb2dpYyBidWcsIGEgcmFjZSBjb25kaXRpb24gd2hlcmUgdGhlIHdvcmtlciB0aHJlYWQgZW5kcyB1cCByZWFkaW5nIHRoZSBuZXcsIHBvdGVudGlhbGx5IGluY29tcGxldGUsIGRhdGEgaW5zdGVhZCBvZiB0aGUgZGF0YSBpdCB3YXMgZXhwZWN0aW5nLiBLQVNBTiBwcm9iYWJseSBpc24ndCBmbGFnZ2luZyB0aGlzIGJlY2F1c2UsIHRlY2huaWNhbGx5LCB0aGUgcmVhZHMgYXJlICp3aXRoaW4qIHRoZSBhbGxvY2F0ZWQgYnVmZmVyLiBUaGUgYnVmZmVyJ3Mgc2l6ZSwgYFNNQ19XUl9CVUZfVjJfU0laRWAsIGFuZCB0aGUgcmVhZCBsaW1pdCwgYFNNQ19MTENfUktFWVNfUEVSX01TR19WMmAsIGFyZSBib3RoIHdpdGhpbiBib3VuZHMuXG5cbldhaXQgYSBzZWNvbmQsIHRob3VnaC4gQXJlIHdlICphYnNvbHV0ZWx5KiBzdXJlIGFib3V0IHRoYXQ/IExldCdzIGRvdWJsZS1jaGVjay4gVGhlIGNvZGUgdXNlcyBgbWluX3RgIHRvIGRldGVybWluZSB0aGUgcmVhZCBsaW1pdCwgYW5kIEkgc2VlIGBTTUNfTExDX1JLRVlTX1BFUl9NU0dfVjJgIGluIHRoZXJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdmFsdWUgaXMgd2hhdCBJIHRoaW5rIGl0IGlzLCB0aGF0J3MgaG93IHdlIGZpbmQgb3V0IGlmIGl0IGlzIHBvdGVudGlhbGx5IHJlYWRpbmcgb3V0IG9mIGJvdW5kcy4gVGhlIGJlaGF2aW9yIG9mIHRoaXMgaXMgYmFzZWQgb24gdGhpcyBudW1iZXIsIHRpbWUgdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAzMjcsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6MDA6NTcuMDQ3MDQxODYxWiIsIlNlcSI6NTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTMyMTM1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIFNNQ19MTENfUktFWVNfUEVSX01TR19WMlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL3NtY19sbGMuYz0xMzk9c3RydWN0IHNtY19ybWJfcnRva2VuIHtcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTE1MC0jZGVmaW5lIFNNQ19MTENfUktFWVNfUEVSX01TR1xcdFxcdDNcXG5uZXQvc21jL3NtY19sbGMuYzoxNTE6I2RlZmluZSBTTUNfTExDX1JLRVlTX1BFUl9NU0dfVjJcXHQyNTVcXG5uZXQvc21jL3NtY19sbGMuYy0xNTItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjAwOjU3LjA5MjM3MDk5WiIsIlNlcSI6NTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyNDM2OTQ4MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBCdWZmZXIgT3ZlcmZsb3dzIGluIFNNQyBMaW5rIEFkZGl0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBzbWNfbGxjX3NhdmVfYWRkX2xpbmtfcmtleXNgIGZ1bmN0aW9uIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LiBJZiBgU01DX0xMQ19SS0VZU19QRVJfTVNHX1YyYCBpcyBzZXQgdG8gMjU1LCB0aGVuIGBtYXhgIGNhbiBhbHNvIGJlIDI1NSB3aXRoaW4gdGhlIGxvb3AuIFRoZSBjb2RlIGl0ZXJhdGVzIHRocm91Z2ggdGhlIGBleHQtXHUwMDNlcnRgIGFycmF5LCByZWFkaW5nIGBtYXhgIG51bWJlciBvZiBlbGVtZW50cy4gRWFjaCBvZiB0aG9zZSBlbGVtZW50cyBpcyBhIGBzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfY29udF9ydGAuXG5cbk5vdywgZWFjaCBvZiB0aGVzZSBgcnRgIGVsZW1lbnRzIGlzIDE2IGJ5dGVzOiB0d28gMzItYml0IGtleXMgYW5kIGEgNjQtYml0IHZpcnR1YWwgYWRkcmVzcy4gSWYgYG1heGAgaXMgMjU1LCB0aGF0IG1lYW5zIHRoZSBjb2RlIGlzIGdvaW5nIHRvIHJlYWQgMjU1ICogMTYgPSA0MDgwIGJ5dGVzLiBIb3dldmVyLCB3aGVuIHdlIGFkZCB0aGUgb2Zmc2V0IHRvIHRoZSBzdHJ1Y3QsIHRoZSBhY3R1YWwgc3RhcnRpbmcgcG9zaXRpb24gb2YgdGhlIGFycmF5IGlzIGF0IDE2LCByZXN1bHRpbmcgaW4gYSByZWFkIG9mIDQwOTYgYnl0ZXMgZnJvbSB0aGUgYGV4dGAgc3RydWN0dXJlLlxuXG5Ob3csIHdoZXJlIGRvZXMgYGV4dGAgbGl2ZT8gV2VsbCwgaXQncyBjYWxjdWxhdGVkIGFzIGBsbGNfbXNnICsgU01DX1dSX1RYX1NJWkVgLiBUaGUgdmFsdWUgb2YgYGxsY19tc2dgIGlzIGVmZmVjdGl2ZWx5IGBsZ3ItXHUwMDNld3JfcnhfYnVmX3YyICsgU01DX1dSX1RYX1NJWkVgLiBgbGdyLVx1MDAzZXdyX3J4X2J1Zl92MmAgaXMgYWxsb2NhdGVkIHdpdGggYFNNQ19XUl9CVUZfVjJfU0laRWAuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgU01DX1dSX0JVRl9WMl9TSVpFYCBpcyBsYXJnZSBlbm91Z2ggdG8gY29udGFpbiB0aGUgYnVmZmVyIGFsbG9jYXRlZCBmb3IgdGhlIGBydGAgYXJyYXkgd2l0aGluIGBleHRgIGFuZCBgU01DX1dSX1RYX1NJWkVgIHdpbGwgbm90IGNhdXNlIGFuIG92ZXJmbG93LiBJZiBub3QsIHRoaXMgbG9vcCBjb3VsZCBwb3RlbnRpYWxseSByZWFkIGJleW9uZCB0aGUgYWxsb2NhdGVkIGJ1ZmZlciwgb3BlbmluZyB0aGUgZG9vciB0byBhIGJ1ZmZlciBvdmVyZmxvdy4gTmVlZCB0byBjaGVjayB3aGF0IGBTTUNfV1JfQlVGX1YyX1NJWkVgIGFjdHVhbGx5IHJlc29sdmVzIHRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTE1MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzowMTowNC4zMzYwNjkzMjhaIiwiU2VxIjo1OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3Njk5NzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUgU01DX1dSX0JVRl9WMl9TSVpFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX2NvcmUuaD01MT1lbnVtIHNtY19saW5rX3N0YXRlIHtcXHRcXHRcXHQvKiBwb3NzaWJsZSBzdGF0ZXMgb2YgYSBsaW5rICovXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmgtNTgtI2RlZmluZSBTTUNfV1JfQlVGX1NJWkVcXHRcXHQ0OFxcdC8qIHNpemUgb2Ygd29yayByZXF1ZXN0IGJ1ZmZlciAqL1xcbm5ldC9zbWMvc21jX2NvcmUuaDo1OTojZGVmaW5lIFNNQ19XUl9CVUZfVjJfU0laRVxcdDgxOTJcXHQvKiBzaXplIG9mIHYyIHdvcmsgcmVxdWVzdCBidWZmZXIgKi9cXG5uZXQvc21jL3NtY19jb3JlLmgtNjAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjAxOjA0LjM4Mzc3NDI0N1oiLCJTZXEiOjU5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTI0NDg0MzcwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgU01DLVJ2MiBMTEMgUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IElzc3VlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCwgd2hpbGUgYWRkcmVzc2luZyBhIGNyaXRpY2FsIHJhY2UgY29uZGl0aW9uLCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGF2ZW51ZXMgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzIHRoYXQgd291bGQgd2FycmFudCBLTVNBTiBzY3J1dGlueS4gSGVyZSdzIG15IHJlYXNvbmluZywgcGllY2UgYnkgcGllY2U6XG5cbkZpcnN0LCBgU01DX1dSX0JVRl9WMl9TSVpFYCBpcyA4MTkyIGJ5dGVzLCBhIGZhY3QuIEFuZCBzaW5jZSA0MDk2IGJ5dGVzIGlzIG11Y2ggbGVzcyB0aGFuIHRoYXQsIGFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkIHdpdGhpbiB0aGF0IGNvbnRleHQgd291bGQgYXQgd29yc3QgcmVhZCBmcm9tIHplcm9lZCBtZW1vcnkuIFByZXZpb3VzbHkgdGhlIGNvZGUgcmVsaWVkIG9uIHJlYWRpbmcgdGhlIHNoYXJlZCBETUEgYnVmZmVyLiBJdCdzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYC4gU28sIGlmIGEgcGVlciBzZW50IGEgc2hvcnQgbWVzc2FnZSB3aXRoIGxhcmdlIGBudW1fcmtleXNgLCB0aGUgZXh0cmEgc3BhY2UgcmVhZCB3b3VsZCBiZSB6ZXJvZWQgZGF0YS4gSSdtIHNhdGlzZmllZCB0aGF0IHRoaXMgaXNuJ3QgYSB2dWxuZXJhYmlsaXR5LiBUaGUgaW5pdGlhbCByZWFkcyBhcmUgcmVhZGluZyB6ZXJvcyBub3QgcmFuZG9tIHZhbHVlcy4gYHNtY19ydG9rZW5fc2V0YCB3b3VsZCBjb3JyZWN0bHkgc2V0IHRoZSBydG9rZW4gdG8gMCBhbmQgdGhlIGNvZGUgd291bGQgcnVuIHdpdGhvdXQgYW4gZXJyb3IuXG5cblRoZSBwYXRjaCBpbnRyb2R1Y2VzIGJvdW5kcyBjaGVja3MgdG8gcmVzdHJpY3QgcmVhZHMgdG8gdGhlIGFjdHVhbCBsZW5ndGggb2YgdGhlIHJlY2VpdmVkIGRhdGEuIFRoZSBjb2RlIG5vdyB1c2VzIGBtaW5fdGAgdG8gbGltaXQgcmVhZHMgdG8gdGhlIHJlY2VpdmVkIG1lc3NhZ2Ugc2l6ZS4gVGhpcyBpcyBhIHZlcnkgY2xlYXIgaW1wcm92ZW1lbnQsIHByZXZlbnRpbmcgcmVhZHMgcGFzdCB0aGUgYm91bmRhcmllcyBvZiB0aGUgcmVjZWl2ZWQgZGF0YSwgbm90IHRoZSBhbGxvY2F0ZWQgYnVmZmVyLiBUaGlzIGVuc3VyZXMgdGhhdCBldmVuIGlmIGEgbWFsaWNpb3VzIHBlZXIgc2VuZHMgYSB0cnVuY2F0ZWQgbWVzc2FnZSB3aXRoIGEgbGFyZ2UgYG51bV9ya2V5c2AgdmFsdWUsIHRoZSBjb2RlIHdvbid0IGF0dGVtcHQgdG8gcmVhZCBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlY2F1c2UgYWxsIG1lbW9yeSB1cCB0byB0aGUgZW5kIG9mIHRoZSBidWZmZXIgaXMgY29uc2lkZXJlZCBpbml0aWFsaXplZC5cblxuU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggZW5zdXJlcyB0aGF0IHRoZSByZWFkIGRvZXNuJ3QgZ28gYmV5b25kIHRoZSByZWNlaXZlZCBtZXNzYWdlIGxlbmd0aCwgd2hpY2ggaXMgZ29vZC4gS01TQU4ncyBjb25jZXJucyBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBkb24ndCBhcHBseSBoZXJlLiBFdmVuIGlmIHRoZSBuZXR3b3JrIGRldmljZSB3cm90ZSB0byB0aGUgYnVmZmVyIHZpYSBETUEsIHRoZSBtZW1vcnkgaXMgY29uc2lkZXJlZCBpbml0aWFsaXplZC4gS01TQU4ncyBnb2luZyB0byBiZSBoYXBweSBiZWNhdXNlIG9mIGBremFsbG9jYC5cblxuTmV4dCwgSSBleGFtaW5lZCBgc21jX2xsY19ybXRfZGVsZXRlX3JrZXlgLiBJdCB1c2VzIHRoZSBzYW1lIGJvdW5kcyBjaGVjayBhcHByb2FjaC4gVGhlIHNhbWUgcmVhc29uaW5nIGFwcGxpZXMgaGVyZSBhcyB3ZWxsLiBUaGUgY2hlY2tzIHByZXZlbnQgcmVhZGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlICpyZWNlaXZlZCogZGF0YS5cblxuVGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoYXQgdGhlc2Ugc3RydWN0dXJlcyBhcmVuJ3Qgc2VudCB0byB1c2VyIHNwYWNlLiBJdCBpcyBrZXJuZWwtdG8ta2VybmVsIGNvbW11bmljYXRpb24gb3ZlciBSb0NFL0lCLiBUaGUgbWVzc2FnZXMgYXJlIHNlbnQgdG8gdGhlIHBlZXIga2VybmVsLCBub3QgdXNlciBzcGFjZS4gS01TQU4ncyBnb2luZyB0byBiZSB0cmlnZ2VyZWQgb24gbGVha3MgdG8gdXNlciBzcGFjZS4gS01TQU4gd291bGQgZGV0ZWN0IGEgcmVtb3RlIGluZm8tbGVhayBpZiB0aGUgYnVmZmVyIHdhcyB1bmluaXRpYWxpemVkLiBUaGVzZSBidWZmZXJzIGFyZSB6ZXJvZWQgYmVmb3JlIGJlaW5nIHNlbnQuIEFuZCB0aGUgcGF0Y2ggZG9lc24ndCBjaGFuZ2UgdGhhdC5cblxuVGhlIHBhdGNoIGNoYW5nZXMgYHNtY19sbGNfZW5xdWV1ZWAgdG8gYWxsb2NhdGUgYHFlbnRyeWAgd2l0aCBga21hbGxvY19mbGV4YC4gV2hpbGUgYGttYWxsb2NfZmxleGAgZG9lc24ndCB6ZXJvIHRoZSBtZW1vcnksIHRoZSBwYXRjaCBleHBsaWNpdGx5IGluaXRpYWxpemVzIGFsbCBmaWVsZHMuIEFuZCBJIGNoZWNrZWQgdGhlIGBzdHJ1Y3Qgc21jX2xsY19xZW50cnlgIHBhZGRpbmcuIFRoZXJlIGFyZSA2IGJ5dGVzIG9mIHBhZGRpbmcuIFRoZSBgcWVudHJ5YCBpcyB1c2VkIGludGVybmFsbHkgYnkgdGhlIHdvcmtlciB0aHJlYWQgYW5kIG5ldmVyIGV4cG9zZWQgdG8gdXNlcnNwYWNlLiBUaG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgYnl0ZXMgYXJlIG5vdCBsZWFrZWQgYmVjYXVzZSB0aGUgY29kZSBpcyBpbnRlcm5hbC5cblxuQWZ0ZXIgY2FyZWZ1bGx5IGNoZWNraW5nIGFsbCB1c2VzLCB0aGUgYHFlbnRyeWAgc3RydWN0dXJlIGlzIHVzZWQgc3RyaWN0bHkgYXMgYW4gaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUgYW5kIHRoZSBjb250ZW50cyBhcmUgdXNlZCBvbmx5IHdpdGhpbiB0aGUga2VybmVsLiBgYWRkX2xsY2AgaXMgdXNlZCBpbiBgc21jX2xsY19zcnZfYWRkX2xpbmtgLiBJdCBzaW1wbHkgcmVhZHMgZmllbGRzIGZyb20gYHFlbnRyeS1cdTAwM2Vtc2dgLCB3aGljaCBhcmUgaW5pdGlhbGl6ZWQuIFRoZW4gaW4gYHNtY19sbGNfcHJvY2Vzc19jbGlfYWRkX2xpbmtgIHRoZSBib2R5IGlzIHJlYWQgdmlhIGBxZW50cnktXHUwMDNlYm9keWAuXG5cblRoZSBjYWxjdWxhdGlvbiBvZiBgc21jX2xsY19tYXhfYm9keV9sZW5gIGlzIGp1c3QgYSBjYXAgb24gdGhlIG1heGltdW0gYm9keSBsZW5ndGguIFRoaXMgcHJldmVudHMgb3Zlci1hbGxvY2F0aW9ucyB3aGVuIGEgdmVyeSBsYXJnZSBgYm9keV9sZW5gIGlzIHJlY2VpdmVkLiBJdCBoZWxwcyB3aXRoIHNhZmV0eS4gSXQncyBhIHNlbnNpYmxlIGNoZWNrLlxuXG5JbiBlc3NlbmNlLCB0aGlzIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gd2hlcmUgYSBzaGFyZWQgcmVjZWl2ZSBidWZmZXIgaXMgb3ZlcndyaXR0ZW4gYmVmb3JlIGl0J3MgcHJvY2Vzc2VkLCBhbmQgaW4gZG9pbmcgc28sIGl0IGludHJvZHVjZXMgYSBgcWVudHJ5YCBzdHJ1Y3R1cmUuIFRoZSBkYXRhIGluIGBxZW50cnlgIGlzIGNvcGllZCBmcm9tIHRoZSBzaGFyZWQgYnVmZmVyIGFuZCB0aGUgY29kZSBjb3JyZWN0bHkgdmFsaWRhdGVzIHRoZSBsZW5ndGggb2YgdGhlIHJlY2VpdmVkIG1lc3NhZ2UuIEl0IGZpeGVzIHRoZSByYWNlIGJ5IGNvcHlpbmcgdGhlIHJlbGV2YW50IGRhdGEgaW50byBhIGBxZW50cnlgIHN0cnVjdHVyZS4gVGhlIHBhdGNoIGFsc28gYWRkcyBib3VuZHMgY2hlY2tzIHRvIGVuc3VyZSB0aGF0IHRoZSBwYXJzaW5nIGRvZXNuJ3QgcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGRhdGEuIFRoZSBkYXRhIHBhc3QgdGhlIG1lc3NhZ2UgYm91bmRhcnksIGlmIHJlYWQsIGlzIGFscmVhZHkgemVyb2VkIChvciBvbGQgYW5kIGluaXRpYWxpemVkKS4gVGhlIG5ldyBpbnRlcm5hbCBzdHJ1Y3R1cmVzIGFyZSBhbGwgaW5pdGlhbGl6ZWQuIFRoZSBwYWRkaW5nIHdpdGhpbiB0aGUgYHFlbnRyeWAgaXMgbmV2ZXIgbGVha2VkIGFuZCB0aGUgc2hhcmVkIERNQSBidWZmZXIgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIFRoZXJlIGFyZSBubyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50LiBUaGUgd29ya2VyIHRocmVhZCB3aWxsIG9ubHkgcmVhZCBpbml0aWFsaXplZCBkYXRhLiBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5IGhlcmUuXG5cblRoZXJlZm9yZSwgdGhlIGFwcHJvcHJpYXRlIGFjdGlvbiBpcyBgTmVlZHNLTVNBTj1mYWxzZWAgd2l0aCB0aGUgYWJvdmUgcmVhc29uaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjI2OCwiT3V0cHV0VG9rZW5zIjozMDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjAxOjM1LjYyODYyMDk4NVoiLCJTZXEiOjYwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBTTUMtUnYyIExMQyBtZXNzYWdlIGhhbmRsaW5nIHdoZXJlIGEgc2hhcmVkIERNQSByZWNlaXZlIGJ1ZmZlciAoYHdyX3J4X2J1Zl92MmApIGNvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGEgbmV3IGluY29taW5nIG1lc3NhZ2UgYmVmb3JlIHRoZSB3b3JrZXIgdGhyZWFkIHByb2Nlc3NlZCB0aGUgcHJldmlvdXMgb25lLiBJdCByZXNvbHZlcyB0aGlzIGJ5IGNvcHlpbmcgdGhlIHNwaWxsb3ZlciBieXRlcyBvZiB0aGUgbWVzc2FnZSBpbnRvIGEgZmxleGlibGUgYXJyYXkgaW4gYHN0cnVjdCBzbWNfbGxjX3FlbnRyeWAgYXQgdGhlIHRpbWUgb2YgcmVjZXB0aW9uLiBJdCBhbHNvIGFkZHMgYm91bmRzIGNoZWNrcyB0byBlbnN1cmUgbWVzc2FnZSBwYXJzaW5nIGRvZXMgbm90IHJlYWQgcGFzdCB0aGUgYWN0dWFsIHJlY2VpdmVkIGxlbmd0aC5cXG5cXG5CZWZvcmUgdGhpcyBwYXRjaCwgcmVhZGluZyBwYXN0IHRoZSByZWNlaXZlZCBsZW5ndGggd291bGQgcmVhZCBmcm9tIHRoZSByZW1haW5kZXIgb2YgdGhlIHJlY2VpdmUgYnVmZmVyLiBTaW5jZSB0aGlzIGJ1ZmZlciBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AgKG9yIGBrY2FsbG9jYCksIHRoZSBtZW1vcnkgd2FzIHplcm8taW5pdGlhbGl6ZWQsIG1lYW5pbmcgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgd2FzIGFjY2Vzc2VkLiBcXG5cXG5UaGUgbmV3bHkgaW50cm9kdWNlZCBgc3RydWN0IHNtY19sbGNfcWVudHJ5YCBpcyBzdHJpY3RseSBhbiBpbnRlcm5hbCBrZXJuZWwgc3RydWN0dXJlIHVzZWQgZm9yIHF1ZXVpbmcgbWVzc2FnZXMgdG8gYSB3b3JrZXIgdGhyZWFkLiBJdCBpcyBuZXZlciBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBzZW50IG92ZXIgdGhlIG5ldHdvcmssIHNvIGFueSBzdHJ1Y3QgcGFkZGluZyBjYW5ub3QgY2F1c2UgYW4gaW5mby1sZWFrLiBGdXJ0aGVybW9yZSwgYWxsIGZpZWxkcyBhbmQgdGhlIGZsZXhpYmxlIGFycmF5IGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGR1cmluZyBhbGxvY2F0aW9uIGluIGBzbWNfbGxjX2VucXVldWVgLiBNZXNzYWdlcyBnZW5lcmF0ZWQgbG9jYWxseSBhbmQgc2VudCBvdmVyIHRoZSBuZXR3b3JrIGFyZSBmdWxseSB6ZXJvZWQgdXNpbmcgYG1lbXNldGAgYmVmb3JlIHRyYW5zbWlzc2lvbi5cXG5cXG5TaW5jZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlcyBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGlzIHBhdGNoLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIFNNQy1SdjIgTExDIG1lc3NhZ2UgaGFuZGxpbmcgd2hlcmUgYSBzaGFyZWQgRE1BIHJlY2VpdmUgYnVmZmVyIChgd3JfcnhfYnVmX3YyYCkgY291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgYSBuZXcgaW5jb21pbmcgbWVzc2FnZSBiZWZvcmUgdGhlIHdvcmtlciB0aHJlYWQgcHJvY2Vzc2VkIHRoZSBwcmV2aW91cyBvbmUuIEl0IHJlc29sdmVzIHRoaXMgYnkgY29weWluZyB0aGUgc3BpbGxvdmVyIGJ5dGVzIG9mIHRoZSBtZXNzYWdlIGludG8gYSBmbGV4aWJsZSBhcnJheSBpbiBgc3RydWN0IHNtY19sbGNfcWVudHJ5YCBhdCB0aGUgdGltZSBvZiByZWNlcHRpb24uIEl0IGFsc28gYWRkcyBib3VuZHMgY2hlY2tzIHRvIGVuc3VyZSBtZXNzYWdlIHBhcnNpbmcgZG9lcyBub3QgcmVhZCBwYXN0IHRoZSBhY3R1YWwgcmVjZWl2ZWQgbGVuZ3RoLlxcblxcbkJlZm9yZSB0aGlzIHBhdGNoLCByZWFkaW5nIHBhc3QgdGhlIHJlY2VpdmVkIGxlbmd0aCB3b3VsZCByZWFkIGZyb20gdGhlIHJlbWFpbmRlciBvZiB0aGUgcmVjZWl2ZSBidWZmZXIuIFNpbmNlIHRoaXMgYnVmZmVyIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCAob3IgYGtjYWxsb2NgKSwgdGhlIG1lbW9yeSB3YXMgemVyby1pbml0aWFsaXplZCwgbWVhbmluZyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB3YXMgYWNjZXNzZWQuIFxcblxcblRoZSBuZXdseSBpbnRyb2R1Y2VkIGBzdHJ1Y3Qgc21jX2xsY19xZW50cnlgIGlzIHN0cmljdGx5IGFuIGludGVybmFsIGtlcm5lbCBzdHJ1Y3R1cmUgdXNlZCBmb3IgcXVldWluZyBtZXNzYWdlcyB0byBhIHdvcmtlciB0aHJlYWQuIEl0IGlzIG5ldmVyIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yaywgc28gYW55IHN0cnVjdCBwYWRkaW5nIGNhbm5vdCBjYXVzZSBhbiBpbmZvLWxlYWsuIEZ1cnRoZXJtb3JlLCBhbGwgZmllbGRzIGFuZCB0aGUgZmxleGlibGUgYXJyYXkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgZHVyaW5nIGFsbG9jYXRpb24gaW4gYHNtY19sbGNfZW5xdWV1ZWAuIE1lc3NhZ2VzIGdlbmVyYXRlZCBsb2NhbGx5IGFuZCBzZW50IG92ZXIgdGhlIG5ldHdvcmsgYXJlIGZ1bGx5IHplcm9lZCB1c2luZyBgbWVtc2V0YCBiZWZvcmUgdHJhbnNtaXNzaW9uLlxcblxcblNpbmNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2VzIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgcGF0Y2gsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowbmktt[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-19 02:41:05 +0000 UTC FinishedAt: 2026-08-19 03:01:38 +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": "c71bf113dfdf426bdaf106636f573ef87b6613a0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SMC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "c71bf113dfdf426bdaf106636f573ef87b6613a0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SMC" ], "series_id": "8e513e93-1cee-48d0-8217-e5a656ff8207" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "smc_llc_cli_add_link", "smc_llc_srv_add_link", "smc_llc_add_link_local", "smc_llc_srv_delete_link_local" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE5IDAyOjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NNQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NtY19sbGNfY2xpX2FkZF9saW5rJiMzNDssCiAgICAmIzM0O3NtY19sbGNfc3J2X2FkZF9saW5rJiMzNDssCiAgICAmIzM0O3NtY19sbGNfYWRkX2xpbmtfbG9jYWwmIzM0OywKICAgICYjMzQ7c21jX2xsY19zcnZfZGVsZXRlX2xpbmtfbG9jYWwmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIFNNQy1SdjIgTExDIG1lc3NhZ2UgaGFuZGxpbmcgd2hlcmUgYSBzaGFyZWQgRE1BIHJlY2VpdmUgYnVmZmVyIChgd3JfcnhfYnVmX3YyYCkgY291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgYSBuZXcgaW5jb21pbmcgbWVzc2FnZSBiZWZvcmUgdGhlIHdvcmtlciB0aHJlYWQgcHJvY2Vzc2VkIHRoZSBwcmV2aW91cyBvbmUuIEl0IHJlc29sdmVzIHRoaXMgYnkgY29weWluZyB0aGUgc3BpbGxvdmVyIGJ5dGVzIG9mIHRoZSBtZXNzYWdlIGludG8gYSBmbGV4aWJsZSBhcnJheSBpbiBgc3RydWN0IHNtY19sbGNfcWVudHJ5YCBhdCB0aGUgdGltZSBvZiByZWNlcHRpb24uIEl0IGFsc28gYWRkcyBib3VuZHMgY2hlY2tzIHRvIGVuc3VyZSBtZXNzYWdlIHBhcnNpbmcgZG9lcyBub3QgcmVhZCBwYXN0IHRoZSBhY3R1YWwgcmVjZWl2ZWQgbGVuZ3RoLlxuXG5CZWZvcmUgdGhpcyBwYXRjaCwgcmVhZGluZyBwYXN0IHRoZSByZWNlaXZlZCBsZW5ndGggd291bGQgcmVhZCBmcm9tIHRoZSByZW1haW5kZXIgb2YgdGhlIHJlY2VpdmUgYnVmZmVyLiBTaW5jZSB0aGlzIGJ1ZmZlciBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AgKG9yIGBrY2FsbG9jYCksIHRoZSBtZW1vcnkgd2FzIHplcm8taW5pdGlhbGl6ZWQsIG1lYW5pbmcgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgd2FzIGFjY2Vzc2VkLiBcblxuVGhlIG5ld2x5IGludHJvZHVjZWQgYHN0cnVjdCBzbWNfbGxjX3FlbnRyeWAgaXMgc3RyaWN0bHkgYW4gaW50ZXJuYWwga2VybmVsIHN0cnVjdHVyZSB1c2VkIGZvciBxdWV1aW5nIG1lc3NhZ2VzIHRvIGEgd29ya2VyIHRocmVhZC4gSXQgaXMgbmV2ZXIgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3Igc2VudCBvdmVyIHRoZSBuZXR3b3JrLCBzbyBhbnkgc3RydWN0IHBhZGRpbmcgY2Fubm90IGNhdXNlIGFuIGluZm8tbGVhay4gRnVydGhlcm1vcmUsIGFsbCBmaWVsZHMgYW5kIHRoZSBmbGV4aWJsZSBhcnJheSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBkdXJpbmcgYWxsb2NhdGlvbiBpbiBgc21jX2xsY19lbnF1ZXVlYC4gTWVzc2FnZXMgZ2VuZXJhdGVkIGxvY2FsbHkgYW5kIHNlbnQgb3ZlciB0aGUgbmV0d29yayBhcmUgZnVsbHkgemVyb2VkIHVzaW5nIGBtZW1zZXRgIGJlZm9yZSB0cmFuc21pc3Npb24uXG5cblNpbmNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2VzIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgcGF0Y2gsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBTTUMgTExDIG1lc3NhZ2UgZW5xdWV1ZWluZyB3aGVyZSBsYXJnZSBTTUMtUnYyIG1lc3NhZ2VzIChsaWtlIEFERF9MSU5LIGFuZCBERUxFVEVfUktFWV9WMikgd2VyZSBvdmVyZmxvd2luZyB0aGUgYWxsb2NhdGVkIHNtY19sbGNfcWVudHJ5IGJ1ZmZlci4gSXQgaW50cm9kdWNlcyBhIGZsZXhpYmxlIGFycmF5IG1lbWJlciB0byBkeW5hbWljYWxseSBhbGxvY2F0ZSB0aGUgYnVmZmVyIGJhc2VkIG9uIHRoZSBtZXNzYWdlIHNpemUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBTTUMgTExDIHByb2Nlc3NpbmcgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgQUZfU01DIHNvY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDI6NTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2ZjJhODYwOTNjZGExNGQ2ZjQ3ZmQ5OTdiY2Q1M2JlZDFlM2RiMWRlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTkgMDI6NTc6NDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfbGxjLmMgYi9uZXQvc21jL3NtY19sbGMuY1xuaW5kZXggOTU0YjJmZjE4MTVjMi4uMzkzYWEwYWYxOGQxZCAxMDA2NDRcbi0tLSBhL25ldC9zbWMvc21jX2xsYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL3NtY19sbGMuY1xuQEAgLTE1Nyw2ICYjNDM7MTU3LDcgQEAgc3RydWN0IHNtY19sbGNfbXNnX2NvbmZpcm1fcmtleSB7XHQvKiB0eXBlIDB4MDYgKi9cbiB9O1xuIFxuICNkZWZpbmUgU01DX0xMQ19ERUxfUktFWV9NQVhcdDhcbiYjNDM7I2RlZmluZSBTTUNfTExDX0RFTF9SS0VZX1YyX0lOTElORVx0OVxuICNkZWZpbmUgU01DX0xMQ19GTEFHX1JLRVlfUkVUUllcdDB4MTBcbiAjZGVmaW5lIFNNQ19MTENfRkxBR19SS0VZX05FR1x0MHgyMFxuIFxuQEAgLTE3Nyw2ICYjNDM7MTc4LDE1IEBAIHN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92MiB7XHQvKiB0eXBlIDB4MjkgKi9cbiBcdF9fYmUzMiBya2V5W107XG4gfTtcbiBcbiYjNDM7LyogdGhlIGxlYWRpbmcgcmtleXMgb2YgYSBERUxFVEVfUktFWV9WMiBmaXQgaW50byB1bmlvbiBzbWNfbGxjX21zZyAqL1xuJiM0MztzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXlfdjJfaW5saW5lIHtcdC8qIHR5cGUgMHgyOSAqL1xuJiM0MztcdHN0cnVjdCBzbWNfbGxjX2hkciBoZDtcbiYjNDM7XHR1OCBudW1fcmtleXM7XG4mIzQzO1x0dTggbnVtX2ludmFsX3JrZXlzO1xuJiM0MztcdHU4IHJlc2VydmVkWzJdO1xuJiM0MztcdF9fYmUzMiBya2V5W1NNQ19MTENfREVMX1JLRVlfVjJfSU5MSU5FXTtcbiYjNDM7fTtcbiYjNDM7XG4gdW5pb24gc21jX2xsY19tc2cge1xuIFx0c3RydWN0IHNtY19sbGNfbXNnX2NvbmZpcm1fbGluayBjb25maXJtX2xpbms7XG4gXHRzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmsgYWRkX2xpbms7XG5AQCAtMTg2LDYgJiM0MzsxOTYsNyBAQCB1bmlvbiBzbWNfbGxjX21zZyB7XG4gXG4gXHRzdHJ1Y3Qgc21jX2xsY19tc2dfY29uZmlybV9ya2V5IGNvbmZpcm1fcmtleTtcbiBcdHN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleSBkZWxldGVfcmtleTtcbiYjNDM7XHRzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXlfdjJfaW5saW5lIGRlbGV0ZV9ya2V5X3YyO1xuIFxuIFx0c3RydWN0IHNtY19sbGNfbXNnX3Rlc3RfbGluayB0ZXN0X2xpbms7XG4gXHRzdHJ1Y3Qge1xuQEAgLTE5NCwxNSAmIzQzOzIwNSwyNSBAQCB1bmlvbiBzbWNfbGxjX21zZyB7XG4gXHR9IHJhdztcbiB9O1xuIFxuJiM0MztzdGF0aWNfYXNzZXJ0KFNNQ19MTENfREVMX1JLRVlfVjJfSU5MSU5FID09XG4mIzQzO1x0ICAgICAgKHNpemVvZih1bmlvbiBzbWNfbGxjX21zZykgLVxuJiM0MztcdCAgICAgICBvZmZzZXRvZihzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXlfdjIsIHJrZXkpKSAvXG4mIzQzO1x0ICAgICAgc2l6ZW9mKF9fYmUzMikpO1xuJiM0MztzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKHN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92Ml9pbmxpbmUsIHJrZXkpID09XG4mIzQzO1x0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyLCBya2V5KSk7XG4mIzQzO1xuICNkZWZpbmUgU01DX0xMQ19GTEFHX1JFU1BcdFx0MHg4MFxuIFxuIHN0cnVjdCBzbWNfbGxjX3FlbnRyeSB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4gXHRzdHJ1Y3Qgc21jX2xpbmsgKmxpbms7XG4mIzQzO1x0dTE2IGJvZHlfbGVuO1xuIFx0dW5pb24gc21jX2xsY19tc2cgbXNnO1xuJiM0MztcdHU4IGJvZHlbXSBfX2NvdW50ZWRfYnkoYm9keV9sZW4pO1xuIH07XG4gXG4tc3RhdGljIHZvaWQgc21jX2xsY19lbnF1ZXVlKHN0cnVjdCBzbWNfbGluayAqbGluaywgdW5pb24gc21jX2xsY19tc2cgKmxsYyk7XG4mIzQzO3N0YXRpYyB2b2lkIHNtY19sbGNfZW5xdWV1ZShzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHVuaW9uIHNtY19sbGNfbXNnICpsbGMsXG4mIzQzO1x0XHRcdCAgICB1MzIgYnl0ZV9sZW4pO1xuIFxuIHN0cnVjdCBzbWNfbGxjX3FlbnRyeSAqc21jX2xsY19mbG93X3FlbnRyeV9jbHIoc3RydWN0IHNtY19sbGNfZmxvdyAqZmxvdylcbiB7XG5AQCAtOTk4LDE1ICYjNDM7MTAxOSwyMCBAQCBzdGF0aWMgaW50IHNtY19sbGNfY2xpX2NvbmZfbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG4gXG4gc3RhdGljIHZvaWQgc21jX2xsY19zYXZlX2FkZF9saW5rX3JrZXlzKHN0cnVjdCBzbWNfbGluayAqbGluayxcbiBcdFx0XHRcdFx0c3RydWN0IHNtY19saW5rICpsaW5rX25ldyxcbi1cdFx0XHRcdFx0dTggKmxsY19tc2cpXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnFlbnRyeSlcbiB7XG4mIzQzO1x0Y29uc3QgdTMyIHJ0X29mZiA9IG9mZnNldG9mKHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua192Ml9leHQsIHJ0KTtcbiBcdHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua192Ml9leHQgKmV4dDtcbiBcdHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyID0gbGluay1cdTAwM2VsZ3I7XG4gXHRpbnQgbWF4LCBpO1xuIFxuLVx0ZXh0ID0gKHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua192Ml9leHQgKikobGxjX21zZyAmIzQzO1xuLVx0XHRcdFx0XHRcdCAgICAgU01DX1dSX1RYX1NJWkUpO1xuJiM0MztcdC8qIHRoZSBya2V5IGNvdW50IGl0c2VsZiBpcyBvbmx5IHRoZXJlIGlmIGVub3VnaCBieXRlcyBhcnJpdmVkICovXG4mIzQzO1x0aWYgKHFlbnRyeS1cdTAwM2Vib2R5X2xlbiBcdTAwM2MgcnRfb2ZmKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGV4dCA9IChzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfdjJfZXh0ICopcWVudHJ5LVx1MDAzZWJvZHk7XG4gXHRtYXggPSBtaW5fdCh1OCwgZXh0LVx1MDAzZW51bV9ya2V5cywgU01DX0xMQ19SS0VZU19QRVJfTVNHX1YyKTtcbiYjNDM7XHRtYXggPSBtaW5fdCh1MzIsIG1heCwgKHFlbnRyeS1cdTAwM2Vib2R5X2xlbiAtIHJ0X29mZikgL1xuJiM0MztcdFx0XHQgICAgICBzaXplb2YoZXh0LVx1MDAzZXJ0WzBdKSk7XG4gXHRkb3duX3dyaXRlKFx1MDAyNmxnci1cdTAwM2VybWJzX2xvY2spO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbWF4OyBpJiM0MzsmIzQzOykge1xuIFx0XHRzbWNfcnRva2VuX3NldChsZ3IsIGxpbmstXHUwMDNlbGlua19pZHgsIGxpbmtfbmV3LVx1MDAzZWxpbmtfaWR4LFxuQEAgLTEwOTksOSAmIzQzOzExMjUsNyBAQCBpbnQgc21jX2xsY19jbGlfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLCBzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnFlbnRyeSlcbiBcdGlmIChyYylcbiBcdFx0Z290byBvdXRfY2xlYXJfbG5rO1xuIFx0aWYgKGxnci1cdTAwM2VzbWNfdmVyc2lvbiA9PSBTTUNfVjIpIHtcbi1cdFx0dTggKmxsY19tc2cgPSBzbWNfbGlua19zaGFyZWRfdjJfcnhidWYobGluaykgP1xuLVx0XHRcdCh1OCAqKWxnci1cdTAwM2V3cl9yeF9idWZfdjIgOiAodTggKilsbGM7XG4tXHRcdHNtY19sbGNfc2F2ZV9hZGRfbGlua19ya2V5cyhsaW5rLCBsbmtfbmV3LCBsbGNfbXNnKTtcbiYjNDM7XHRcdHNtY19sbGNfc2F2ZV9hZGRfbGlua19ya2V5cyhsaW5rLCBsbmtfbmV3LCBxZW50cnkpO1xuIFx0fSBlbHNlIHtcbiBcdFx0cmMgPSBzbWNfbGxjX2NsaV9ya2V5X2V4Y2hhbmdlKGxpbmssIGxua19uZXcpO1xuIFx0XHRpZiAocmMpIHtcbkBAIC0xNDgxLDcgJiM0MzsxNTA1LDcgQEAgaW50IHNtY19sbGNfc3J2X2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluayxcbiBcdH1cbiBcdGFkZF9sbGMgPSBcdTAwMjZxZW50cnktXHUwMDNlbXNnLmFkZF9saW5rO1xuIFx0aWYgKGFkZF9sbGMtXHUwMDNlaGQuZmxhZ3MgXHUwMDI2IFNNQ19MTENfRkxBR19BRERfTE5LX1JFSikge1xuLVx0XHRzbWNfbGxjX2Zsb3dfcWVudHJ5X2RlbChcdTAwMjZsZ3ItXHUwMDNlbGxjX2Zsb3dfbGNsKTtcbiYjNDM7XHRcdHNtY19sbGNfZmxvd19xZW50cnlfY2xyKFx1MDAyNmxnci1cdTAwM2VsbGNfZmxvd19sY2wpO1xuIFx0XHRyYyA9IC1FTk9MSU5LO1xuIFx0XHRnb3RvIG91dF9lcnI7XG4gXHR9XG5AQCAtMTQ5Miw3ICYjNDM7MTUxNiw4IEBAIGludCBzbWNfbGxjX3Nydl9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG4gXHRcdGxncl9uZXdfdCA9IFNNQ19MR1JfQVNZTU1FVFJJQ19QRUVSO1xuIFx0fVxuIFx0c21jX2xsY19zYXZlX2FkZF9saW5rX2luZm8obGlua19uZXcsIGFkZF9sbGMpO1xuLVx0c21jX2xsY19mbG93X3FlbnRyeV9kZWwoXHUwMDI2bGdyLVx1MDAzZWxsY19mbG93X2xjbCk7XG4mIzQzO1x0LyogYWRkX2xsYyBzdGlsbCBwb2ludHMgaW50byBxZW50cnksIHNvIG9ubHkgZGV0YWNoIGl0IGhlcmUgKi9cbiYjNDM7XHRzbWNfbGxjX2Zsb3dfcWVudHJ5X2NscihcdTAwMjZsZ3ItXHUwMDNlbGxjX2Zsb3dfbGNsKTtcbiBcbiBcdHJjID0gc21jX2liX3JlYWR5X2xpbmsobGlua19uZXcpO1xuIFx0aWYgKHJjKVxuQEAgLTE1MDEsOSAmIzQzOzE1MjYsNyBAQCBpbnQgc21jX2xsY19zcnZfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLFxuIFx0aWYgKHJjKVxuIFx0XHRnb3RvIG91dF9lcnI7XG4gXHRpZiAobGdyLVx1MDAzZXNtY192ZXJzaW9uID09IFNNQ19WMikge1xuLVx0XHR1OCAqbGxjX21zZyA9IHNtY19saW5rX3NoYXJlZF92Ml9yeGJ1ZihsaW5rKSA/XG4tXHRcdFx0KHU4ICopbGdyLVx1MDAzZXdyX3J4X2J1Zl92MiA6ICh1OCAqKWFkZF9sbGM7XG4tXHRcdHNtY19sbGNfc2F2ZV9hZGRfbGlua19ya2V5cyhsaW5rLCBsaW5rX25ldywgbGxjX21zZyk7XG4mIzQzO1x0XHRzbWNfbGxjX3NhdmVfYWRkX2xpbmtfcmtleXMobGluaywgbGlua19uZXcsIHFlbnRyeSk7XG4gXHR9IGVsc2Uge1xuIFx0XHRyYyA9IHNtY19sbGNfc3J2X3JrZXlfZXhjaGFuZ2UobGluaywgbGlua19uZXcpO1xuIFx0XHRpZiAocmMpXG5AQCAtMTUxMiwxNCAmIzQzOzE1MzUsMTQgQEAgaW50IHNtY19sbGNfc3J2X2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluayxcbiBcdHJjID0gc21jX2xsY19zcnZfY29uZl9saW5rKGxpbmssIGxpbmtfbmV3LCBsZ3JfbmV3X3QpO1xuIFx0aWYgKHJjKVxuIFx0XHRnb3RvIG91dF9lcnI7XG4tXHRrZnJlZShpbmkpO1xuLVx0cmV0dXJuIDA7XG4mIzQzO1x0Z290byBvdXQ7XG4gb3V0X2VycjpcbiBcdGlmIChsaW5rX25ldykge1xuIFx0XHRsaW5rX25ldy1cdTAwM2VzdGF0ZSA9IFNNQ19MTktfSU5BQ1RJVkU7XG4gXHRcdHNtY3JfbGlua19jbGVhcihsaW5rX25ldywgZmFsc2UpO1xuIFx0fVxuIG91dDpcbiYjNDM7XHRrZnJlZShxZW50cnkpO1xuIFx0a2ZyZWUoaW5pKTtcbiBcdGlmIChzZW5kX3JlcV9hZGRfbGlua19yZXNwKVxuIFx0XHRzbWNfbGxjX3NlbmRfcmVxX2FkZF9saW5rX3Jlc3BvbnNlKHJlcV9xZW50cnkpO1xuQEAgLTE1NTIsNyAmIzQzOzE1NzUsOCBAQCB2b2lkIHNtY19sbGNfYWRkX2xpbmtfbG9jYWwoc3RydWN0IHNtY19saW5rICpsaW5rKVxuIFx0YWRkX2xsYy5oZC5jb21tb24ubGxjX3R5cGUgPSBTTUNfTExDX0FERF9MSU5LO1xuIFx0c21jX2xsY19pbml0X21zZ19oZHIoXHUwMDI2YWRkX2xsYy5oZCwgbGluay1cdTAwM2VsZ3IsIHNpemVvZihhZGRfbGxjKSk7XG4gXHQvKiBubyBkZXYgYW5kIHBvcnQgbmVlZGVkICovXG4tXHRzbWNfbGxjX2VucXVldWUobGluaywgKHVuaW9uIHNtY19sbGNfbXNnICopXHUwMDI2YWRkX2xsYyk7XG4mIzQzO1x0c21jX2xsY19lbnF1ZXVlKGxpbmssICh1bmlvbiBzbWNfbGxjX21zZyAqKVx1MDAyNmFkZF9sbGMsXG4mIzQzO1x0XHRcdHNpemVvZih1bmlvbiBzbWNfbGxjX21zZykpO1xuIH1cbiBcbiAvKiB3b3JrZXIgdG8gcHJvY2VzcyBhbiBhZGQgbGluayBtZXNzYWdlICovXG5AQCAtMTU4OCw3ICYjNDM7MTYxMiw4IEBAIHZvaWQgc21jX2xsY19zcnZfZGVsZXRlX2xpbmtfbG9jYWwoc3RydWN0IHNtY19saW5rICpsaW5rLCB1OCBkZWxfbGlua19pZClcbiBcdGRlbF9sbGMubGlua19udW0gPSBkZWxfbGlua19pZDtcbiBcdGRlbF9sbGMucmVhc29uID0gaHRvbmwoU01DX0xMQ19ERUxfTE9TVF9QQVRIKTtcbiBcdGRlbF9sbGMuaGQuZmxhZ3MgfD0gU01DX0xMQ19GTEFHX0RFTF9MSU5LX09SREVSTFk7XG4tXHRzbWNfbGxjX2VucXVldWUobGluaywgKHVuaW9uIHNtY19sbGNfbXNnICopXHUwMDI2ZGVsX2xsYyk7XG4mIzQzO1x0c21jX2xsY19lbnF1ZXVlKGxpbmssICh1bmlvbiBzbWNfbGxjX21zZyAqKVx1MDAyNmRlbF9sbGMsXG4mIzQzO1x0XHRcdHNpemVvZih1bmlvbiBzbWNfbGxjX21zZykpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBzbWNfbGxjX3Byb2Nlc3NfY2xpX2RlbGV0ZV9saW5rKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyKVxuQEAgLTE4MTAsMTkgJiM0MzsxODM1LDI4IEBAIHN0YXRpYyB2b2lkIHNtY19sbGNfcm10X2RlbGV0ZV9ya2V5KHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyKVxuIFx0bGluayA9IHFlbnRyeS1cdTAwM2VsaW5rO1xuIFxuIFx0aWYgKGxnci1cdTAwM2VzbWNfdmVyc2lvbiA9PSBTTUNfVjIpIHtcbi1cdFx0c3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyICpsbGN2MjtcbiYjNDM7XHRcdHN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92Ml9pbmxpbmUgKmxsY3YyO1xuIFxuLVx0XHRpZiAoc21jX2xpbmtfc2hhcmVkX3YyX3J4YnVmKGxpbmspKSB7XG4tXHRcdFx0bWVtY3B5KGxnci1cdTAwM2V3cl9yeF9idWZfdjIsIGxsYywgc2l6ZW9mKCpsbGMpKTtcbi1cdFx0XHRsbGN2MiA9IChzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXlfdjIgKilsZ3ItXHUwMDNld3JfcnhfYnVmX3YyO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdGxsY3YyID0gKHN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92MiAqKWxsYztcbi1cdFx0fVxuJiM0MztcdFx0LyogVGhlIGxlYWRpbmcgU01DX0xMQ19ERUxfUktFWV9WMl9JTkxJTkUgcmtleXMgYXJlIGRlY2xhcmVkIGluXG4mIzQzO1x0XHQgKiB0aGUgbWVzc2FnZSBpdHNlbGYsIGFueSBmdXJ0aGVyIG9uZXMgd2VyZSByZWNlaXZlZCBpbnRvXG4mIzQzO1x0XHQgKiBxZW50cnktXHUwMDNlYm9keS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0bGxjdjIgPSBcdTAwMjZxZW50cnktXHUwMDNlbXNnLmRlbGV0ZV9ya2V5X3YyO1xuIFx0XHRsbGN2Mi1cdTAwM2VudW1faW52YWxfcmtleXMgPSAwO1xuIFxuIFx0XHRtYXggPSBtaW5fdCh1OCwgbGxjdjItXHUwMDNlbnVtX3JrZXlzLCBTTUNfTExDX1JLRVlTX1BFUl9NU0dfVjIpO1xuJiM0MztcdFx0bWF4ID0gbWluX3QodTMyLCBtYXgsIFNNQ19MTENfREVMX1JLRVlfVjJfSU5MSU5FICYjNDM7XG4mIzQzO1x0XHRcdFx0ICAgICAgcWVudHJ5LVx1MDAzZWJvZHlfbGVuIC8gc2l6ZW9mKF9fYmUzMikpO1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtYXg7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdFx0aWYgKHNtY19ydG9rZW5fZGVsZXRlKGxpbmssIGxsY3YyLVx1MDAzZXJrZXlbaV0pKVxuJiM0MztcdFx0XHRfX2JlMzIgcmtleTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChpIFx1MDAzYyBTTUNfTExDX0RFTF9SS0VZX1YyX0lOTElORSlcbiYjNDM7XHRcdFx0XHRya2V5ID0gbGxjdjItXHUwMDNlcmtleVtpXTtcbiYjNDM7XHRcdFx0ZWxzZVxuJiM0MztcdFx0XHRcdG1lbWNweShcdTAwMjZya2V5LCBxZW50cnktXHUwMDNlYm9keSAmIzQzO1xuJiM0MztcdFx0XHRcdFx0ICAgICAgKGkgLSBTTUNfTExDX0RFTF9SS0VZX1YyX0lOTElORSkgKlxuJiM0MztcdFx0XHRcdFx0ICAgICAgc2l6ZW9mKHJrZXkpLCBzaXplb2YocmtleSkpO1xuJiM0MztcdFx0XHRpZiAoc21jX3J0b2tlbl9kZWxldGUobGluaywgcmtleSkpXG4gXHRcdFx0XHRsbGN2Mi1cdTAwM2VudW1faW52YWxfcmtleXMmIzQzOyYjNDM7O1xuIFx0XHR9XG4gXHRcdG1lbXNldChcdTAwMjZsbGMtXHUwMDNlcmtleVswXSwgMCwgc2l6ZW9mKGxsYy1cdTAwM2Vya2V5KSk7XG5AQCAtMjA2MywxOCAmIzQzOzIwOTcsNTIgQEAgc3RhdGljIHZvaWQgc21jX2xsY19yeF9yZXNwb25zZShzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG4gXHR3YWtlX3VwKFx1MDAyNmxpbmstXHUwMDNlbGdyLVx1MDAzZWxsY19tc2dfd2FpdGVyKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgc21jX2xsY19lbnF1ZXVlKHN0cnVjdCBzbWNfbGluayAqbGluaywgdW5pb24gc21jX2xsY19tc2cgKmxsYylcbiYjNDM7LyogdGhlIGxvbmdlc3QgdGFpbCBlaXRoZXIgcmVhZGVyIG9mIHFlbnRyeS1cdTAwM2Vib2R5IGNhbiB1c2UgKi9cbiYjNDM7c3RhdGljIHUzMiBzbWNfbGxjX21heF9ib2R5X2xlbih1bmlvbiBzbWNfbGxjX21zZyAqbGxjKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChsbGMtXHUwMDNlcmF3Lmhkci5jb21tb24ubGxjX3R5cGUpIHtcbiYjNDM7XHRjYXNlIFNNQ19MTENfQUREX0xJTks6XG4mIzQzO1x0XHRyZXR1cm4gb2Zmc2V0b2Yoc3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rX3YyX2V4dCwgcnQpICYjNDM7XG4mIzQzO1x0XHQgICAgICAgU01DX0xMQ19SS0VZU19QRVJfTVNHX1YyICpcbiYjNDM7XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rX2NvbnRfcnQpO1xuJiM0MztcdGNhc2UgU01DX0xMQ19ERUxFVEVfUktFWTpcbiYjNDM7XHRcdHJldHVybiAoU01DX0xMQ19SS0VZU19QRVJfTVNHX1YyIC1cbiYjNDM7XHRcdFx0U01DX0xMQ19ERUxfUktFWV9WMl9JTkxJTkUpICogc2l6ZW9mKF9fYmUzMik7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgc21jX2xsY19lbnF1ZXVlKHN0cnVjdCBzbWNfbGluayAqbGluaywgdW5pb24gc21jX2xsY19tc2cgKmxsYyxcbiYjNDM7XHRcdFx0ICAgIHUzMiBieXRlX2xlbilcbiB7XG4gXHRzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxnciA9IGxpbmstXHUwMDNlbGdyO1xuIFx0c3RydWN0IHNtY19sbGNfcWVudHJ5ICpxZW50cnk7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcdHUxNiBib2R5X2xlbiA9IDA7XG4mIzQzO1xuJiM0MztcdC8qIFYyIG1lc3NhZ2VzIGNhbiBiZSBsb25nZXIgdGhhbiB0aGUgaW5saW5lIHVuaW9uIHNtY19sbGNfbXNnLiBDYXJyeVxuJiM0MztcdCAqIHRoZSByZW1haW5kZXIgaW4gdGhlIHFlbnRyeSBpdHNlbGYsIHNvIHRoYXQgaXRzIGxpZmV0aW1lIGFuZCBpdHNcbiYjNDM7XHQgKiBsZW5ndGggbWF0Y2ggdGhlIG1lc3NhZ2UgdGhlIHBlZXIgYWN0dWFsbHkgc2VudC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAobGdyLVx1MDAzZXNtY192ZXJzaW9uID09IFNNQ19WMiBcdTAwMjZcdTAwMjYgYnl0ZV9sZW4gXHUwMDNlIFNNQ19XUl9UWF9TSVpFKVxuJiM0MztcdFx0Ym9keV9sZW4gPSBtaW5fdCh1MzIsIGJ5dGVfbGVuLCBTTUNfV1JfQlVGX1YyX1NJWkUpIC1cbiYjNDM7XHRcdFx0ICAgU01DX1dSX1RYX1NJWkU7XG4mIzQzO1x0Ym9keV9sZW4gPSBtaW5fdCh1MzIsIGJvZHlfbGVuLCBzbWNfbGxjX21heF9ib2R5X2xlbihsbGMpKTtcbiBcbi1cdHFlbnRyeSA9IGttYWxsb2Nfb2JqKCpxZW50cnksIEdGUF9BVE9NSUMpO1xuJiM0MztcdHFlbnRyeSA9IGttYWxsb2NfZmxleCgqcWVudHJ5LCBib2R5LCBib2R5X2xlbiwgR0ZQX0FUT01JQyk7XG4gXHRpZiAoIXFlbnRyeSlcbiBcdFx0cmV0dXJuO1xuJiM0MztcdHFlbnRyeS1cdTAwM2Vib2R5X2xlbiA9IGJvZHlfbGVuO1xuIFx0cWVudHJ5LVx1MDAzZWxpbmsgPSBsaW5rO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cWVudHJ5LVx1MDAzZWxpc3QpO1xuIFx0bWVtY3B5KFx1MDAyNnFlbnRyeS1cdTAwM2Vtc2csIGxsYywgc2l6ZW9mKHVuaW9uIHNtY19sbGNfbXNnKSk7XG4mIzQzO1x0aWYgKGJvZHlfbGVuKSB7XG4mIzQzO1x0XHR1OCAqc3JjID0gc21jX2xpbmtfc2hhcmVkX3YyX3J4YnVmKGxpbmspID9cbiYjNDM7XHRcdFx0KHU4ICopbGdyLVx1MDAzZXdyX3J4X2J1Zl92MiA6ICh1OCAqKWxsYztcbiYjNDM7XG4mIzQzO1x0XHRtZW1jcHkocWVudHJ5LVx1MDAzZWJvZHksIHNyYyAmIzQzOyBTTUNfV1JfVFhfU0laRSwgYm9keV9sZW4pO1xuJiM0MztcdH1cbiBcbiBcdC8qIHByb2Nlc3MgcmVzcG9uc2VzIGltbWVkaWF0ZWx5ICovXG4gXHRpZiAoKGxsYy1cdTAwM2VyYXcuaGRyLmZsYWdzIFx1MDAyNiBTTUNfTExDX0ZMQUdfUkVTUCkgXHUwMDI2XHUwMDI2XG5AQCAtMjEwNiw3ICYjNDM7MjE3NCw3IEBAIHN0YXRpYyB2b2lkIHNtY19sbGNfcnhfaGFuZGxlcihzdHJ1Y3QgaWJfd2MgKndjLCB2b2lkICpidWYpXG4gXHRcdFx0cmV0dXJuOyAvKiBpbnZhbGlkIG1lc3NhZ2UgKi9cbiBcdH1cbiBcbi1cdHNtY19sbGNfZW5xdWV1ZShsaW5rLCBsbGMpO1xuJiM0MztcdHNtY19sbGNfZW5xdWV1ZShsaW5rLCBsbGMsIHdjLVx1MDAzZWJ5dGVfbGVuKTtcbiB9XG4gXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqIHdvcmtlciwgdXRpbHMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX3dyLmMgYi9uZXQvc21jL3NtY193ci5jXG5pbmRleCA1OWM5MmI0Njk0NWM1Li45N2JhNDY4OTNiMTdmIDEwMDY0NFxuLS0tIGEvbmV0L3NtYy9zbWNfd3IuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NtYy9zbWNfd3IuY1xuQEAgLTYwMiw5ICYjNDM7NjAyLDkgQEAgc3RhdGljIHZvaWQgc21jX3dyX2luaXRfc2dlKHN0cnVjdCBzbWNfbGluayAqbG5rKVxuIFxuIFx0LyogV2l0aCBTTUMtUnYyIHRoZXJlIGNhbiBiZSBtZXNzYWdlcyBsYXJnZXIgdGhhbiBTTUNfV1JfVFhfU0laRS5cbiBcdCAqIEVhY2ggaWJfcmVjdl93ciBnZXRzIDIgc2dlcywgdGhlIHNlY29uZCBvbmUgaXMgYSBzcGlsbG92ZXIgYnVmZmVyXG4tXHQgKiBhbmQgdGhlIHNhbWUgYnVmZmVyIGZvciBhbGwgc2dlcy4gV2hlbiBhIGxhcmdlciBtZXNzYWdlIGFycml2ZWQgdGhlblxuLVx0ICogdGhlIGNvbnRlbnQgb2YgdGhlIGZpcnN0IHNtYWxsIHNnZSBpcyBjb3BpZWQgdG8gdGhlIGJlZ2lubmluZyBvZlxuLVx0ICogdGhlIGxhcmdlciBzcGlsbG92ZXIgYnVmZmVyLCBhbGxvd2luZyBlYXN5IGRhdGEgbWFwcGluZy5cbiYjNDM7XHQgKiBhbmQgdGhlIHNhbWUgYnVmZmVyIGZvciBhbGwgc2dlcy4gVGhlIHNwaWxsb3ZlciBzZ2Ugc3RhcnRzIGF0XG4mIzQzO1x0ICogU01DX1dSX1RYX1NJWkUsIHNvIHRoZSBsZWFkaW5nIGJ5dGVzIG9mIHRoYXQgYnVmZmVyIGFyZSBuZXZlclxuJiM0MztcdCAqIHdyaXR0ZW4uXG4gXHQgKi9cbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxuay1cdTAwM2V3cl9yeF9jbnQ7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGludCB4ID0gaSAqIGxuay1cdTAwM2V3cl9yeF9zZ2VfY250O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAyOjU3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTTUMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzbWNfbGxjX2NsaV9hZGRfbGluayYjMzQ7LAogICAgJiMzNDtzbWNfbGxjX3Nydl9hZGRfbGluayYjMzQ7LAogICAgJiMzNDtzbWNfbGxjX2FkZF9saW5rX2xvY2FsJiMzNDssCiAgICAmIzM0O3NtY19sbGNfc3J2X2RlbGV0ZV9saW5rX2xvY2FsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIFNNQyBMTEMgbWVzc2FnZSBlbnF1ZXVlaW5nIHdoZXJlIGxhcmdlIFNNQy1SdjIgbWVzc2FnZXMgKGxpa2UgQUREX0xJTksgYW5kIERFTEVURV9SS0VZX1YyKSB3ZXJlIG92ZXJmbG93aW5nIHRoZSBhbGxvY2F0ZWQgc21jX2xsY19xZW50cnkgYnVmZmVyLiBJdCBpbnRyb2R1Y2VzIGEgZmxleGlibGUgYXJyYXkgbWVtYmVyIHRvIGR5bmFtaWNhbGx5IGFsbG9jYXRlIHRoZSBidWZmZXIgYmFzZWQgb24gdGhlIG1lc3NhZ2Ugc2l6ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIFNNQyBMTEMgcHJvY2Vzc2luZyBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHZpYSBBRl9TTUMgc29ja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZmMmE4NjA5M2NkYTE0ZDZmNDdmZDk5N2JjZDUzYmVkMWUzZGIxZGUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxOSAwMjo1Nzo0NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX2xsYy5jIGIvbmV0L3NtYy9zbWNfbGxjLmMKaW5kZXggOTU0YjJmZjE4MTVjMi4uMzkzYWEwYWYxOGQxZCAxMDA2NDQKLS0tIGEvbmV0L3NtYy9zbWNfbGxjLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NtYy9zbWNfbGxjLmMKQEAgLTE1Nyw2ICYjNDM7MTU3LDcgQEAgc3RydWN0IHNtY19sbGNfbXNnX2NvbmZpcm1fcmtleSB7CS8qIHR5cGUgMHgwNiAqLwogfTsKIAogI2RlZmluZSBTTUNfTExDX0RFTF9SS0VZX01BWAk4CiYjNDM7I2RlZmluZSBTTUNfTExDX0RFTF9SS0VZX1YyX0lOTElORQk5CiAjZGVmaW5lIFNNQ19MTENfRkxBR19SS0VZX1JFVFJZCTB4MTAKICNkZWZpbmUgU01DX0xMQ19GTEFHX1JLRVlfTkVHCTB4MjAKIApAQCAtMTc3LDYgJiM0MzsxNzgsMTUgQEAgc3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyIHsJLyogdHlwZSAweDI5ICovCiAJX19iZTMyIHJrZXlbXTsKIH07CiAKJiM0MzsvKiB0aGUgbGVhZGluZyBya2V5cyBvZiBhIERFTEVURV9SS0VZX1YyIGZpdCBpbnRvIHVuaW9uIHNtY19sbGNfbXNnICovCiYjNDM7c3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyX2lubGluZSB7CS8qIHR5cGUgMHgyOSAqLwomIzQzOwlzdHJ1Y3Qgc21jX2xsY19oZHIgaGQ7CiYjNDM7CXU4IG51bV9ya2V5czsKJiM0MzsJdTggbnVtX2ludmFsX3JrZXlzOwomIzQzOwl1OCByZXNlcnZlZFsyXTsKJiM0MzsJX19iZTMyIHJrZXlbU01DX0xMQ19ERUxfUktFWV9WMl9JTkxJTkVdOwomIzQzO307CiYjNDM7CiB1bmlvbiBzbWNfbGxjX21zZyB7CiAJc3RydWN0IHNtY19sbGNfbXNnX2NvbmZpcm1fbGluayBjb25maXJtX2xpbms7CiAJc3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rIGFkZF9saW5rOwpAQCAtMTg2LDYgJiM0MzsxOTYsNyBAQCB1bmlvbiBzbWNfbGxjX21zZyB7CiAKIAlzdHJ1Y3Qgc21jX2xsY19tc2dfY29uZmlybV9ya2V5IGNvbmZpcm1fcmtleTsKIAlzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXkgZGVsZXRlX3JrZXk7CiYjNDM7CXN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92Ml9pbmxpbmUgZGVsZXRlX3JrZXlfdjI7CiAKIAlzdHJ1Y3Qgc21jX2xsY19tc2dfdGVzdF9saW5rIHRlc3RfbGluazsKIAlzdHJ1Y3QgewpAQCAtMTk0LDE1ICYjNDM7MjA1LDI1IEBAIHVuaW9uIHNtY19sbGNfbXNnIHsKIAl9IHJhdzsKIH07CiAKJiM0MztzdGF0aWNfYXNzZXJ0KFNNQ19MTENfREVMX1JLRVlfVjJfSU5MSU5FID09CiYjNDM7CSAgICAgIChzaXplb2YodW5pb24gc21jX2xsY19tc2cpIC0KJiM0MzsJICAgICAgIG9mZnNldG9mKHN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92MiwgcmtleSkpIC8KJiM0MzsJICAgICAgc2l6ZW9mKF9fYmUzMikpOwomIzQzO3N0YXRpY19hc3NlcnQob2Zmc2V0b2Yoc3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyX2lubGluZSwgcmtleSkgPT0KJiM0MzsJICAgICAgb2Zmc2V0b2Yoc3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyLCBya2V5KSk7CiYjNDM7CiAjZGVmaW5lIFNNQ19MTENfRkxBR19SRVNQCQkweDgwCiAKIHN0cnVjdCBzbWNfbGxjX3FlbnRyeSB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCXN0cnVjdCBzbWNfbGluayAqbGluazsKJiM0MzsJdTE2IGJvZHlfbGVuOwogCXVuaW9uIHNtY19sbGNfbXNnIG1zZzsKJiM0MzsJdTggYm9keVtdIF9fY291bnRlZF9ieShib2R5X2xlbik7CiB9OwogCi1zdGF0aWMgdm9pZCBzbWNfbGxjX2VucXVldWUoc3RydWN0IHNtY19saW5rICpsaW5rLCB1bmlvbiBzbWNfbGxjX21zZyAqbGxjKTsKJiM0MztzdGF0aWMgdm9pZCBzbWNfbGxjX2VucXVldWUoc3RydWN0IHNtY19saW5rICpsaW5rLCB1bmlvbiBzbWNfbGxjX21zZyAqbGxjLAomIzQzOwkJCSAgICB1MzIgYnl0ZV9sZW4pOwogCiBzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnNtY19sbGNfZmxvd19xZW50cnlfY2xyKHN0cnVjdCBzbWNfbGxjX2Zsb3cgKmZsb3cpCiB7CkBAIC05OTgsMTUgJiM0MzsxMDE5LDIwIEBAIHN0YXRpYyBpbnQgc21jX2xsY19jbGlfY29uZl9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluaywKIAogc3RhdGljIHZvaWQgc21jX2xsY19zYXZlX2FkZF9saW5rX3JrZXlzKHN0cnVjdCBzbWNfbGluayAqbGluaywKIAkJCQkJc3RydWN0IHNtY19saW5rICpsaW5rX25ldywKLQkJCQkJdTggKmxsY19tc2cpCiYjNDM7CQkJCQlzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnFlbnRyeSkKIHsKJiM0MzsJY29uc3QgdTMyIHJ0X29mZiA9IG9mZnNldG9mKHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua192Ml9leHQsIHJ0KTsKIAlzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfdjJfZXh0ICpleHQ7CiAJc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IgPSBsaW5rLSZndDtsZ3I7CiAJaW50IG1heCwgaTsKIAotCWV4dCA9IChzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfdjJfZXh0ICopKGxsY19tc2cgJiM0MzsKLQkJCQkJCSAgICAgU01DX1dSX1RYX1NJWkUpOwomIzQzOwkvKiB0aGUgcmtleSBjb3VudCBpdHNlbGYgaXMgb25seSB0aGVyZSBpZiBlbm91Z2ggYnl0ZXMgYXJyaXZlZCAqLwomIzQzOwlpZiAocWVudHJ5LSZndDtib2R5X2xlbiAmbHQ7IHJ0X29mZikKJiM0MzsJCXJldHVybjsKJiM0MzsJZXh0ID0gKHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua192Ml9leHQgKilxZW50cnktJmd0O2JvZHk7CiAJbWF4ID0gbWluX3QodTgsIGV4dC0mZ3Q7bnVtX3JrZXlzLCBTTUNfTExDX1JLRVlTX1BFUl9NU0dfVjIpOwomIzQzOwltYXggPSBtaW5fdCh1MzIsIG1heCwgKHFlbnRyeS0mZ3Q7Ym9keV9sZW4gLSBydF9vZmYpIC8KJiM0MzsJCQkgICAgICBzaXplb2YoZXh0LSZndDtydFswXSkpOwogCWRvd25fd3JpdGUoJmFtcDtsZ3ItJmd0O3JtYnNfbG9jayk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IG1heDsgaSYjNDM7JiM0MzspIHsKIAkJc21jX3J0b2tlbl9zZXQobGdyLCBsaW5rLSZndDtsaW5rX2lkeCwgbGlua19uZXctJmd0O2xpbmtfaWR4LApAQCAtMTA5OSw5ICYjNDM7MTEyNSw3IEBAIGludCBzbWNfbGxjX2NsaV9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHN0cnVjdCBzbWNfbGxjX3FlbnRyeSAqcWVudHJ5KQogCWlmIChyYykKIAkJZ290byBvdXRfY2xlYXJfbG5rOwogCWlmIChsZ3ItJmd0O3NtY192ZXJzaW9uID09IFNNQ19WMikgewotCQl1OCAqbGxjX21zZyA9IHNtY19saW5rX3NoYXJlZF92Ml9yeGJ1ZihsaW5rKSA/Ci0JCQkodTggKilsZ3ItJmd0O3dyX3J4X2J1Zl92MiA6ICh1OCAqKWxsYzsKLQkJc21jX2xsY19zYXZlX2FkZF9saW5rX3JrZXlzKGxpbmssIGxua19uZXcsIGxsY19tc2cpOwomIzQzOwkJc21jX2xsY19zYXZlX2FkZF9saW5rX3JrZXlzKGxpbmssIGxua19uZXcsIHFlbnRyeSk7CiAJfSBlbHNlIHsKIAkJcmMgPSBzbWNfbGxjX2NsaV9ya2V5X2V4Y2hhbmdlKGxpbmssIGxua19uZXcpOwogCQlpZiAocmMpIHsKQEAgLTE0ODEsNyAmIzQzOzE1MDUsNyBAQCBpbnQgc21jX2xsY19zcnZfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLAogCX0KIAlhZGRfbGxjID0gJmFtcDtxZW50cnktJmd0O21zZy5hZGRfbGluazsKIAlpZiAoYWRkX2xsYy0mZ3Q7aGQuZmxhZ3MgJmFtcDsgU01DX0xMQ19GTEFHX0FERF9MTktfUkVKKSB7Ci0JCXNtY19sbGNfZmxvd19xZW50cnlfZGVsKCZhbXA7bGdyLSZndDtsbGNfZmxvd19sY2wpOwomIzQzOwkJc21jX2xsY19mbG93X3FlbnRyeV9jbHIoJmFtcDtsZ3ItJmd0O2xsY19mbG93X2xjbCk7CiAJCXJjID0gLUVOT0xJTks7CiAJCWdvdG8gb3V0X2VycjsKIAl9CkBAIC0xNDkyLDcgJiM0MzsxNTE2LDggQEAgaW50IHNtY19sbGNfc3J2X2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluaywKIAkJbGdyX25ld190ID0gU01DX0xHUl9BU1lNTUVUUklDX1BFRVI7CiAJfQogCXNtY19sbGNfc2F2ZV9hZGRfbGlua19pbmZvKGxpbmtfbmV3LCBhZGRfbGxjKTsKLQlzbWNfbGxjX2Zsb3dfcWVudHJ5X2RlbCgmYW1wO2xnci0mZ3Q7bGxjX2Zsb3dfbGNsKTsKJiM0MzsJLyogYWRkX2xsYyBzdGlsbCBwb2ludHMgaW50byBxZW50cnksIHNvIG9ubHkgZGV0YWNoIGl0IGhlcmUgKi8KJiM0MzsJc21jX2xsY19mbG93X3FlbnRyeV9jbHIoJmFtcDtsZ3ItJmd0O2xsY19mbG93X2xjbCk7CiAKIAlyYyA9IHNtY19pYl9yZWFkeV9saW5rKGxpbmtfbmV3KTsKIAlpZiAocmMpCkBAIC0xNTAxLDkgJiM0MzsxNTI2LDcgQEAgaW50IHNtY19sbGNfc3J2X2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluaywKIAlpZiAocmMpCiAJCWdvdG8gb3V0X2VycjsKIAlpZiAobGdyLSZndDtzbWNfdmVyc2lvbiA9PSBTTUNfVjIpIHsKLQkJdTggKmxsY19tc2cgPSBzbWNfbGlua19zaGFyZWRfdjJfcnhidWYobGluaykgPwotCQkJKHU4ICopbGdyLSZndDt3cl9yeF9idWZfdjIgOiAodTggKilhZGRfbGxjOwotCQlzbWNfbGxjX3NhdmVfYWRkX2xpbmtfcmtleXMobGluaywgbGlua19uZXcsIGxsY19tc2cpOwomIzQzOwkJc21jX2xsY19zYXZlX2FkZF9saW5rX3JrZXlzKGxpbmssIGxpbmtfbmV3LCBxZW50cnkpOwogCX0gZWxzZSB7CiAJCXJjID0gc21jX2xsY19zcnZfcmtleV9leGNoYW5nZShsaW5rLCBsaW5rX25ldyk7CiAJCWlmIChyYykKQEAgLTE1MTIsMTQgJiM0MzsxNTM1LDE0IEBAIGludCBzbWNfbGxjX3Nydl9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssCiAJcmMgPSBzbWNfbGxjX3Nydl9jb25mX2xpbmsobGluaywgbGlua19uZXcsIGxncl9uZXdfdCk7CiAJaWYgKHJjKQogCQlnb3RvIG91dF9lcnI7Ci0Ja2ZyZWUoaW5pKTsKLQlyZXR1cm4gMDsKJiM0MzsJZ290byBvdXQ7CiBvdXRfZXJyOgogCWlmIChsaW5rX25ldykgewogCQlsaW5rX25ldy0mZ3Q7c3RhdGUgPSBTTUNfTE5LX0lOQUNUSVZFOwogCQlzbWNyX2xpbmtfY2xlYXIobGlua19uZXcsIGZhbHNlKTsKIAl9CiBvdXQ6CiYjNDM7CWtmcmVlKHFlbnRyeSk7CiAJa2ZyZWUoaW5pKTsKIAlpZiAoc2VuZF9yZXFfYWRkX2xpbmtfcmVzcCkKIAkJc21jX2xsY19zZW5kX3JlcV9hZGRfbGlua19yZXNwb25zZShyZXFfcWVudHJ5KTsKQEAgLTE1NTIsNyAmIzQzOzE1NzUsOCBAQCB2b2lkIHNtY19sbGNfYWRkX2xpbmtfbG9jYWwoc3RydWN0IHNtY19saW5rICpsaW5rKQogCWFkZF9sbGMuaGQuY29tbW9uLmxsY190eXBlID0gU01DX0xMQ19BRERfTElOSzsKIAlzbWNfbGxjX2luaXRfbXNnX2hkcigmYW1wO2FkZF9sbGMuaGQsIGxpbmstJmd0O2xnciwgc2l6ZW9mKGFkZF9sbGMpKTsKIAkvKiBubyBkZXYgYW5kIHBvcnQgbmVlZGVkICovCi0Jc21jX2xsY19lbnF1ZXVlKGxpbmssICh1bmlvbiBzbWNfbGxjX21zZyAqKSZhbXA7YWRkX2xsYyk7CiYjNDM7CXNtY19sbGNfZW5xdWV1ZShsaW5rLCAodW5pb24gc21jX2xsY19tc2cgKikmYW1wO2FkZF9sbGMsCiYjNDM7CQkJc2l6ZW9mKHVuaW9uIHNtY19sbGNfbXNnKSk7CiB9CiAKIC8qIHdvcmtlciB0byBwcm9jZXNzIGFuIGFkZCBsaW5rIG1lc3NhZ2UgKi8KQEAgLTE1ODgsNyAmIzQzOzE2MTIsOCBAQCB2b2lkIHNtY19sbGNfc3J2X2RlbGV0ZV9saW5rX2xvY2FsKHN0cnVjdCBzbWNfbGluayAqbGluaywgdTggZGVsX2xpbmtfaWQpCiAJZGVsX2xsYy5saW5rX251bSA9IGRlbF9saW5rX2lkOwogCWRlbF9sbGMucmVhc29uID0gaHRvbmwoU01DX0xMQ19ERUxfTE9TVF9QQVRIKTsKIAlkZWxfbGxjLmhkLmZsYWdzIHw9IFNNQ19MTENfRkxBR19ERUxfTElOS19PUkRFUkxZOwotCXNtY19sbGNfZW5xdWV1ZShsaW5rLCAodW5pb24gc21jX2xsY19tc2cgKikmYW1wO2RlbF9sbGMpOwomIzQzOwlzbWNfbGxjX2VucXVldWUobGluaywgKHVuaW9uIHNtY19sbGNfbXNnICopJmFtcDtkZWxfbGxjLAomIzQzOwkJCXNpemVvZih1bmlvbiBzbWNfbGxjX21zZykpOwogfQogCiBzdGF0aWMgdm9pZCBzbWNfbGxjX3Byb2Nlc3NfY2xpX2RlbGV0ZV9saW5rKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyKQpAQCAtMTgxMCwxOSAmIzQzOzE4MzUsMjggQEAgc3RhdGljIHZvaWQgc21jX2xsY19ybXRfZGVsZXRlX3JrZXkoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IpCiAJbGluayA9IHFlbnRyeS0mZ3Q7bGluazsKIAogCWlmIChsZ3ItJmd0O3NtY192ZXJzaW9uID09IFNNQ19WMikgewotCQlzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXlfdjIgKmxsY3YyOwomIzQzOwkJc3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyX2lubGluZSAqbGxjdjI7CiAKLQkJaWYgKHNtY19saW5rX3NoYXJlZF92Ml9yeGJ1ZihsaW5rKSkgewotCQkJbWVtY3B5KGxnci0mZ3Q7d3JfcnhfYnVmX3YyLCBsbGMsIHNpemVvZigqbGxjKSk7Ci0JCQlsbGN2MiA9IChzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXlfdjIgKilsZ3ItJmd0O3dyX3J4X2J1Zl92MjsKLQkJfSBlbHNlIHsKLQkJCWxsY3YyID0gKHN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92MiAqKWxsYzsKLQkJfQomIzQzOwkJLyogVGhlIGxlYWRpbmcgU01DX0xMQ19ERUxfUktFWV9WMl9JTkxJTkUgcmtleXMgYXJlIGRlY2xhcmVkIGluCiYjNDM7CQkgKiB0aGUgbWVzc2FnZSBpdHNlbGYsIGFueSBmdXJ0aGVyIG9uZXMgd2VyZSByZWNlaXZlZCBpbnRvCiYjNDM7CQkgKiBxZW50cnktJmd0O2JvZHkuCiYjNDM7CQkgKi8KJiM0MzsJCWxsY3YyID0gJmFtcDtxZW50cnktJmd0O21zZy5kZWxldGVfcmtleV92MjsKIAkJbGxjdjItJmd0O251bV9pbnZhbF9ya2V5cyA9IDA7CiAKIAkJbWF4ID0gbWluX3QodTgsIGxsY3YyLSZndDtudW1fcmtleXMsIFNNQ19MTENfUktFWVNfUEVSX01TR19WMik7CiYjNDM7CQltYXggPSBtaW5fdCh1MzIsIG1heCwgU01DX0xMQ19ERUxfUktFWV9WMl9JTkxJTkUgJiM0MzsKJiM0MzsJCQkJICAgICAgcWVudHJ5LSZndDtib2R5X2xlbiAvIHNpemVvZihfX2JlMzIpKTsKIAkJZm9yIChpID0gMDsgaSAmbHQ7IG1heDsgaSYjNDM7JiM0MzspIHsKLQkJCWlmIChzbWNfcnRva2VuX2RlbGV0ZShsaW5rLCBsbGN2Mi0mZ3Q7cmtleVtpXSkpCiYjNDM7CQkJX19iZTMyIHJrZXk7CiYjNDM7CiYjNDM7CQkJaWYgKGkgJmx0OyBTTUNfTExDX0RFTF9SS0VZX1YyX0lOTElORSkKJiM0MzsJCQkJcmtleSA9IGxsY3YyLSZndDtya2V5W2ldOwomIzQzOwkJCWVsc2UKJiM0MzsJCQkJbWVtY3B5KCZhbXA7cmtleSwgcWVudHJ5LSZndDtib2R5ICYjNDM7CiYjNDM7CQkJCQkgICAgICAoaSAtIFNNQ19MTENfREVMX1JLRVlfVjJfSU5MSU5FKSAqCiYjNDM7CQkJCQkgICAgICBzaXplb2YocmtleSksIHNpemVvZihya2V5KSk7CiYjNDM7CQkJaWYgKHNtY19ydG9rZW5fZGVsZXRlKGxpbmssIHJrZXkpKQogCQkJCWxsY3YyLSZndDtudW1faW52YWxfcmtleXMmIzQzOyYjNDM7OwogCQl9CiAJCW1lbXNldCgmYW1wO2xsYy0mZ3Q7cmtleVswXSwgMCwgc2l6ZW9mKGxsYy0mZ3Q7cmtleSkpOwpAQCAtMjA2MywxOCAmIzQzOzIwOTcsNTIgQEAgc3RhdGljIHZvaWQgc21jX2xsY19yeF9yZXNwb25zZShzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssCiAJd2FrZV91cCgmYW1wO2xpbmstJmd0O2xnci0mZ3Q7bGxjX21zZ193YWl0ZXIpOwogfQogCi1zdGF0aWMgdm9pZCBzbWNfbGxjX2VucXVldWUoc3RydWN0IHNtY19saW5rICpsaW5rLCB1bmlvbiBzbWNfbGxjX21zZyAqbGxjKQomIzQzOy8qIHRoZSBsb25nZXN0IHRhaWwgZWl0aGVyIHJlYWRlciBvZiBxZW50cnktJmd0O2JvZHkgY2FuIHVzZSAqLwomIzQzO3N0YXRpYyB1MzIgc21jX2xsY19tYXhfYm9keV9sZW4odW5pb24gc21jX2xsY19tc2cgKmxsYykKJiM0Mzt7CiYjNDM7CXN3aXRjaCAobGxjLSZndDtyYXcuaGRyLmNvbW1vbi5sbGNfdHlwZSkgewomIzQzOwljYXNlIFNNQ19MTENfQUREX0xJTks6CiYjNDM7CQlyZXR1cm4gb2Zmc2V0b2Yoc3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rX3YyX2V4dCwgcnQpICYjNDM7CiYjNDM7CQkgICAgICAgU01DX0xMQ19SS0VZU19QRVJfTVNHX1YyICoKJiM0MzsJCSAgICAgICBzaXplb2Yoc3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rX2NvbnRfcnQpOwomIzQzOwljYXNlIFNNQ19MTENfREVMRVRFX1JLRVk6CiYjNDM7CQlyZXR1cm4gKFNNQ19MTENfUktFWVNfUEVSX01TR19WMiAtCiYjNDM7CQkJU01DX0xMQ19ERUxfUktFWV9WMl9JTkxJTkUpICogc2l6ZW9mKF9fYmUzMik7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBzbWNfbGxjX2VucXVldWUoc3RydWN0IHNtY19saW5rICpsaW5rLCB1bmlvbiBzbWNfbGxjX21zZyAqbGxjLAomIzQzOwkJCSAgICB1MzIgYnl0ZV9sZW4pCiB7CiAJc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IgPSBsaW5rLSZndDtsZ3I7CiAJc3RydWN0IHNtY19sbGNfcWVudHJ5ICpxZW50cnk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsJdTE2IGJvZHlfbGVuID0gMDsKJiM0MzsKJiM0MzsJLyogVjIgbWVzc2FnZXMgY2FuIGJlIGxvbmdlciB0aGFuIHRoZSBpbmxpbmUgdW5pb24gc21jX2xsY19tc2cuIENhcnJ5CiYjNDM7CSAqIHRoZSByZW1haW5kZXIgaW4gdGhlIHFlbnRyeSBpdHNlbGYsIHNvIHRoYXQgaXRzIGxpZmV0aW1lIGFuZCBpdHMKJiM0MzsJICogbGVuZ3RoIG1hdGNoIHRoZSBtZXNzYWdlIHRoZSBwZWVyIGFjdHVhbGx5IHNlbnQuCiYjNDM7CSAqLwomIzQzOwlpZiAobGdyLSZndDtzbWNfdmVyc2lvbiA9PSBTTUNfVjIgJmFtcDsmYW1wOyBieXRlX2xlbiAmZ3Q7IFNNQ19XUl9UWF9TSVpFKQomIzQzOwkJYm9keV9sZW4gPSBtaW5fdCh1MzIsIGJ5dGVfbGVuLCBTTUNfV1JfQlVGX1YyX1NJWkUpIC0KJiM0MzsJCQkgICBTTUNfV1JfVFhfU0laRTsKJiM0MzsJYm9keV9sZW4gPSBtaW5fdCh1MzIsIGJvZHlfbGVuLCBzbWNfbGxjX21heF9ib2R5X2xlbihsbGMpKTsKIAotCXFlbnRyeSA9IGttYWxsb2Nfb2JqKCpxZW50cnksIEdGUF9BVE9NSUMpOwomIzQzOwlxZW50cnkgPSBrbWFsbG9jX2ZsZXgoKnFlbnRyeSwgYm9keSwgYm9keV9sZW4sIEdGUF9BVE9NSUMpOwogCWlmICghcWVudHJ5KQogCQlyZXR1cm47CiYjNDM7CXFlbnRyeS0mZ3Q7Ym9keV9sZW4gPSBib2R5X2xlbjsKIAlxZW50cnktJmd0O2xpbmsgPSBsaW5rOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7cWVudHJ5LSZndDtsaXN0KTsKIAltZW1jcHkoJmFtcDtxZW50cnktJmd0O21zZywgbGxjLCBzaXplb2YodW5pb24gc21jX2xsY19tc2cpKTsKJiM0MzsJaWYgKGJvZHlfbGVuKSB7CiYjNDM7CQl1OCAqc3JjID0gc21jX2xpbmtfc2hhcmVkX3YyX3J4YnVmKGxpbmspID8KJiM0MzsJCQkodTggKilsZ3ItJmd0O3dyX3J4X2J1Zl92MiA6ICh1OCAqKWxsYzsKJiM0MzsKJiM0MzsJCW1lbWNweShxZW50cnktJmd0O2JvZHksIHNyYyAmIzQzOyBTTUNfV1JfVFhfU0laRSwgYm9keV9sZW4pOwomIzQzOwl9CiAKIAkvKiBwcm9jZXNzIHJlc3BvbnNlcyBpbW1lZGlhdGVseSAqLwogCWlmICgobGxjLSZndDtyYXcuaGRyLmZsYWdzICZhbXA7IFNNQ19MTENfRkxBR19SRVNQKSAmYW1wOyZhbXA7CkBAIC0yMTA2LDcgJiM0MzsyMTc0LDcgQEAgc3RhdGljIHZvaWQgc21jX2xsY19yeF9oYW5kbGVyKHN0cnVjdCBpYl93YyAqd2MsIHZvaWQgKmJ1ZikKIAkJCXJldHVybjsgLyogaW52YWxpZCBtZXNzYWdlICovCiAJfQogCi0Jc21jX2xsY19lbnF1ZXVlKGxpbmssIGxsYyk7CiYjNDM7CXNtY19sbGNfZW5xdWV1ZShsaW5rLCBsbGMsIHdjLSZndDtieXRlX2xlbik7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiB3b3JrZXIsIHV0aWxzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX3dyLmMgYi9uZXQvc21jL3NtY193ci5jCmluZGV4IDU5YzkyYjQ2OTQ1YzUuLjk3YmE0Njg5M2IxN2YgMTAwNjQ0Ci0tLSBhL25ldC9zbWMvc21jX3dyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NtYy9zbWNfd3IuYwpAQCAtNjAyLDkgJiM0Mzs2MDIsOSBAQCBzdGF0aWMgdm9pZCBzbWNfd3JfaW5pdF9zZ2Uoc3RydWN0IHNtY19saW5rICpsbmspCiAKIAkvKiBXaXRoIFNNQy1SdjIgdGhlcmUgY2FuIGJlIG1lc3NhZ2VzIGxhcmdlciB0aGFuIFNNQ19XUl9UWF9TSVpFLgogCSAqIEVhY2ggaWJfcmVjdl93ciBnZXRzIDIgc2dlcywgdGhlIHNlY29uZCBvbmUgaXMgYSBzcGlsbG92ZXIgYnVmZmVyCi0JICogYW5kIHRoZSBzYW1lIGJ1ZmZlciBmb3IgYWxsIHNnZXMuIFdoZW4gYSBsYXJnZXIgbWVzc2FnZSBhcnJpdmVkIHRoZW4KLQkgKiB0aGUgY29udGVudCBvZiB0aGUgZmlyc3Qgc21hbGwgc2dlIGlzIGNvcGllZCB0byB0aGUgYmVnaW5uaW5nIG9mCi0JICogdGhlIGxhcmdlciBzcGlsbG92ZXIgYnVmZmVyLCBhbGxvd2luZyBlYXN5IGRhdGEgbWFwcGluZy4KJiM0MzsJICogYW5kIHRoZSBzYW1lIGJ1ZmZlciBmb3IgYWxsIHNnZXMuIFRoZSBzcGlsbG92ZXIgc2dlIHN0YXJ0cyBhdAomIzQzOwkgKiBTTUNfV1JfVFhfU0laRSwgc28gdGhlIGxlYWRpbmcgYnl0ZXMgb2YgdGhhdCBidWZmZXIgYXJlIG5ldmVyCiYjNDM7CSAqIHdyaXR0ZW4uCiAJICovCiAJZm9yIChpID0gMDsgaSAmbHQ7IGxuay0mZ3Q7d3JfcnhfY250OyBpJiM0MzsmIzQzOykgewogCQlpbnQgeCA9IGkgKiBsbmstJmd0O3dyX3J4X3NnZV9jbnQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAyOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1MTQKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA1NDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTTUMgTExDIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgYG5ldC9zbWMvc21jX2xsYy5jYCBhbmQgYG5ldC9zbWMvc21jX3dyLmNgIGZpbGVzLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFib3V0IGhhbmRsaW5nIGxhcmdlciBTTUMtUnYyIG1lc3NhZ2VzLCBzcGVjaWZpY2FsbHkgdGhvc2UgZXhjZWVkaW5nIGBTTUNfV1JfVFhfU0laRWAuIEl0JiMzOTtzIGludHJvZHVjaW5nIGEgbmV3IHN0cnVjdCwgYHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyX2lubGluZWAsIGFuZCBtb2RpZnlpbmcgYHNtY19sbGNfZW5xdWV1ZWAgdG8gaGFuZGxlIGxhcmdlciBtZXNzYWdlcyBieSBkeW5hbWljYWxseSBhbGxvY2F0aW5nIGEgYHN0cnVjdCBzbWNfbGxjX3FlbnRyeWAgd2l0aCBhIGZsZXhpYmxlIGFycmF5IG1lbWJlciwgYGJvZHlbXWAsIHRvIGFjY29tbW9kYXRlIHRoZSBvdmVyZmxvdyBkYXRhLiBUaGlzIGlzIGludGVyZXN0aW5nLCBpdCBsaWtlbHkgZGVhbHMgd2l0aCB0aGUgYEFERF9MSU5LYCBhbmQgYERFTEVURV9SS0VZX1YyYCBtZXNzYWdlcywgd2hpY2ggYXJlIGNhbmRpZGF0ZXMgZm9yIHNpemUtcmVsYXRlZCBidWdzLgoKRmlyc3QsIGxldCYjMzk7cyBlc3RhYmxpc2ggaWYgdGhpcyBpcyBldmVuIGZ1enphYmxlIGFuZCB3b3J0aCB0aGUgZWZmb3J0LiBTTUMgaXMgYSBuZXR3b3JrIHByb3RvY29sLCBzbyBpdCYjMzk7cyB1bmRlciB0aGUgYEFGX1NNQ2AgZmFtaWx5LiBHb29kLiBXZSBjYW4gYWJzb2x1dGVseSB0ZXN0IHRoaXMsIGVpdGhlciBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBXZSBoYXZlIGxvb3BiYWNrLCBkdW1teSBkZXZpY2VzLCBvciBldmVuIHZldGggY2FuIGJlIHVzZWQuIFNNQy1EIGlzIHJlbGF0ZWQgdG8gSVNNLCB3aGljaCBjYW4gYmUgaGFuZGxlZCBieSBgc21jX2xvb3BiYWNrYC4gU01DLVIgdXNlcyBSRE1BLCB3aGljaCBjYW4gYmUgZW11bGF0ZWQgdXNpbmcgYHJkbWFfcnhlYCBvciBgc2l3YC4gVGhhdCBjb25maXJtcyBpdCwgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSBjYW4gdGFyZ2V0IHdpdGggc3l6a2FsbGVyLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb3VyIGZ1enppbmcgZWZmb3J0cy4gVGhlIHBhdGNoIHRvdWNoZXMgYSBmZXcga2V5IGZ1bmN0aW9uczoKLSAgIGBzbWNfbGxjX2VucXVldWVgIChhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggb2Z0ZW4gaXMgYSBoZWFkYWNoZSwgYnV0IGxldCYjMzk7cyBzZWUgaG93IGl0JiMzOTtzIHVzZWQpCi0gICBgc21jX2xsY19yeF9oYW5kbGVyYCAoYW5vdGhlciBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIGEgY2FsbGJhY2sgZm9yIFJETUEgcmVjZWl2ZS4gSXQgaXMgYW4gZW50cnkgcG9pbnQsIGFuZCBpcyBhIHN0cm9uZyBjYW5kaWRhdGUpCi0gICBgc21jX2xsY19jbGlfYWRkX2xpbmtgCi0gICBgc21jX2xsY19zcnZfYWRkX2xpbmtgCi0gICBgc21jX2xsY19hZGRfbGlua19sb2NhbGAKLSAgIGBzbWNfbGxjX3Nydl9kZWxldGVfbGlua19sb2NhbGAKLSAgIGBzbWNfbGxjX3JtdF9kZWxldGVfcmtleWAgKHN0YXRpYyBhcyB3ZWxsKQotICAgYHNtY19sbGNfcnhfcmVzcG9uc2VgIChhbm90aGVyIHN0YXRpYywgd2UmIzM5O2xsIHNlZSBob3cgaXQgZml0cykKCkxldCYjMzk7cyBwcmlvcml0aXplIHRob3NlIGxhc3QgdHdvLiBgc21jX2xsY19jbGlfYWRkX2xpbmtgIGFuZCBgc21jX2xsY19zcnZfYWRkX2xpbmtgIGFyZSBpbnRlcmVzdGluZyBiZWNhdXNlIHRoZXkgc2VlbSB0byBiZSB0aGUgY2xpZW50IGFuZCBzZXJ2ZXIgc2lkZS4gV2UmIzM5O3JlIGludGVyZXN0ZWQgaW4gdGhlIHNpemUuICBgc21jX2xsY19yeF9oYW5kbGVyYCAqc2hvdWxkKiBiZSB0aGUgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIExMQyBtZXNzYWdlcy4gVGhvdWdoIGl0IGlzIGEgc3RhdGljIGZ1bmN0aW9uLCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcXVldWUgYW5kIG5ldyBkeW5hbWljIGFsbG9jYXRpb24gaXMgdGhlIGNvcmUgcGFydCBvZiB0aGlzIGNoYW5nZS4gSXMgdGhlcmUgYW4gZXhwb3NlZCBlbnRyeSBwb2ludCBmb3IgdGhlIHN0YXRpYyBmdW5jdGlvbnM/CgpMZXQgbWUgZG8gYSBxdWljayBzZWFyY2ggb24gdGhvc2UgYGNsaV9hZGRfbGlua2AgYW5kIGBzcnZfYWRkX2xpbmtgIGZ1bmN0aW9ucyB0byBzZWUgaG93IHRoZXkmIzM5O3JlIHVzZWQuIFdlIHdpbGwgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aG9zZSB0byBmaW5kIHRoZSBhdHRhY2sgc3VyZmFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMjo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfbGxjX2NsaV9hZGRfbGluayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL2FmX3NtYy5jPTYxOD1zdGF0aWMgaW50IHNtY3JfY2xudF9jb25mX2ZpcnN0X2xpbmsoc3RydWN0IHNtY19zb2NrICpzbWMpXG4tLVxubmV0L3NtYy9hZl9zbWMuYy02ODQtXHRcdHNtY19sbGNfZmxvd19xZW50cnlfY2xyKFx1MDAyNmxpbmstXHUwMDNlbGdyLVx1MDAzZWxsY19mbG93X2xjbCk7XG5uZXQvc21jL2FmX3NtYy5jOjY4NTpcdFx0c21jX2xsY19jbGlfYWRkX2xpbmsobGluaywgcWVudHJ5KTtcbm5ldC9zbWMvYWZfc21jLmMtNjg2LVx0fVxuLS1cbm5ldC9zbWMvc21jX2xsYy5jPTkwOD1zdGF0aWMgaW50IHNtY19sbGNfY2xpX3JrZXlfZXhjaGFuZ2Uoc3RydWN0IHNtY19saW5rICpsaW5rLFxuLS1cbm5ldC9zbWMvc21jX2xsYy5jLTk1MS0vKiBwcmVwYXJlIGFuZCBzZW5kIGFuIGFkZCBsaW5rIHJlamVjdCByZXNwb25zZSAqL1xubmV0L3NtYy9zbWNfbGxjLmM6OTUyOnN0YXRpYyBpbnQgc21jX2xsY19jbGlfYWRkX2xpbmtfcmVqZWN0KHN0cnVjdCBzbWNfbGxjX3FlbnRyeSAqcWVudHJ5KVxubmV0L3NtYy9zbWNfbGxjLmMtOTUzLXtcbi0tXG5uZXQvc21jL3NtY19sbGMuYz0xMDQ2PXN0YXRpYyB2b2lkIHNtY19sbGNfc2F2ZV9hZGRfbGlua19pbmZvKHN0cnVjdCBzbWNfbGluayAqbGluayxcbi0tXG5uZXQvc21jL3NtY19sbGMuYy0xMDU2LS8qIGFzIGFuIFNNQyBjbGllbnQsIHByb2Nlc3MgYW4gYWRkIGxpbmsgcmVxdWVzdCAqL1xubmV0L3NtYy9zbWNfbGxjLmM6MTA1NzppbnQgc21jX2xsY19jbGlfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLCBzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnFlbnRyeSlcbm5ldC9zbWMvc21jX2xsYy5jLTEwNTgte1xuLS1cbm5ldC9zbWMvc21jX2xsYy5jLTExNDItb3V0X3JlamVjdDpcbm5ldC9zbWMvc21jX2xsYy5jOjExNDM6XHRzbWNfbGxjX2NsaV9hZGRfbGlua19yZWplY3QocWVudHJ5KTtcbm5ldC9zbWMvc21jX2xsYy5jLTExNDQtb3V0OlxuLS1cbm5ldC9zbWMvc21jX2xsYy5jPTExNTA9c3RhdGljIHZvaWQgc21jX2xsY19zZW5kX3JlcXVlc3RfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rKVxuLS1cbm5ldC9zbWMvc21jX2xsYy5jLTExODgtLyogYXMgYW4gU01DIGNsaWVudCwgaW52aXRlIHNlcnZlciB0byBzdGFydCB0aGUgYWRkX2xpbmsgcHJvY2Vzc2luZyAqL1xubmV0L3NtYy9zbWNfbGxjLmM6MTE4OTpzdGF0aWMgdm9pZCBzbWNfbGxjX2NsaV9hZGRfbGlua19pbnZpdGUoc3RydWN0IHNtY19saW5rICpsaW5rLFxubmV0L3NtYy9zbWNfbGxjLmMtMTE5MC1cdFx0XHRcdFx0c3RydWN0IHNtY19sbGNfcWVudHJ5ICpxZW50cnkpXG4tLVxubmV0L3NtYy9zbWNfbGxjLmM9MTI0MT1zdGF0aWMgdm9pZCBzbWNfbGxjX3Byb2Nlc3NfY2xpX2FkZF9saW5rKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyKVxuLS1cbm5ldC9zbWMvc21jX2xsYy5jLTEyNDgtXHRpZiAoc21jX2xsY19pc19sb2NhbF9hZGRfbGluayhcdTAwMjZxZW50cnktXHUwMDNlbXNnKSlcbm5ldC9zbWMvc21jX2xsYy5jOjEyNDk6XHRcdHNtY19sbGNfY2xpX2FkZF9saW5rX2ludml0ZShxZW50cnktXHUwMDNlbGluaywgcWVudHJ5KTtcbm5ldC9zbWMvc21jX2xsYy5jLTEyNTAtXHRlbHNlXG5uZXQvc21jL3NtY19sbGMuYzoxMjUxOlx0XHRzbWNfbGxjX2NsaV9hZGRfbGluayhxZW50cnktXHUwMDNlbGluaywgcWVudHJ5KTtcbm5ldC9zbWMvc21jX2xsYy5jLTEyNTItXHR1cF93cml0ZShcdTAwMjZsZ3ItXHUwMDNlbGxjX2NvbmZfbXV0ZXgpO1xuLS1cbm5ldC9zbWMvc21jX2xsYy5oPTExMj12b2lkIHNtY19sbGNfc2VuZF9saW5rX2RlbGV0ZV9hbGwoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsIGJvb2wgb3JkLFxubmV0L3NtYy9zbWNfbGxjLmgtMTEzLVx0XHRcdFx0ICB1MzIgcnNuKTtcbm5ldC9zbWMvc21jX2xsYy5oOjExNDppbnQgc21jX2xsY19jbGlfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLCBzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnFlbnRyeSk7XG5uZXQvc21jL3NtY19sbGMuaC0xMTUtaW50IHNtY19sbGNfc3J2X2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODU3CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipEaXZpbmcgaW50byBgc21jX2xsY19zcnZfYWRkX2xpbmtgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIGl0LiBMZXQmIzM5O3MgZGlnIGludG8gYHNtY19sbGNfc3J2X2FkZF9saW5rYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBmdW5jdGlvbiBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmV2aWV3IGl0cyBpbXBsZW1lbnRhdGlvbiwgZm9jdXNpbmcgb24gdGhlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBhbmQgbGluayBjcmVhdGlvbiBwcm9jZXNzLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgaGVyZSwgYW5kIHdhbnQgdG8gY2hlY2sgaG93IHRoZSBzZXJ2ZXIgc2lkZSByZXNvdXJjZSBhbGxvY2F0aW9ucyBhcmUgbWFuYWdlZCB0byBhdm9pZCBhbnkgbGVha3Mgb3IgdW5leHBlY3RlZCByZXNvdXJjZSBleGhhdXN0aW9uLiBUaGlua2luZyBiYWNrLCBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgSSBzaG91bGQgYmUgb24gdGhlIGxvb2tvdXQgZm9yLCBwYXJ0aWN1bGFybHkgaW4gYSBtdWx0aS10aHJlYWRlZCBlbnZpcm9ubWVudD8gSSBhbHNvIG5lZWQgdG8gYXNzZXNzIHRoZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIGVzcGVjaWFsbHkgcmVsYXRlZCB0byBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyB0aGlzIGZ1bmN0aW9uIGludHJvZHVjZXMgdG8gb3VyIHN5c3RlbS4gU28sIGxldCYjMzk7cyBnZXQgc3RhcnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfbGxjX3Nydl9hZGRfbGluayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL2FmX3NtYy5jPTE4NzI9c3RhdGljIGludCBzbWNyX3NlcnZfY29uZl9maXJzdF9saW5rKHN0cnVjdCBzbWNfc29jayAqc21jKVxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMTkxNy1cdFx0LyogaW5pdGlhbCBjb250YWN0IC0gdHJ5IHRvIGVzdGFibGlzaCBzZWNvbmQgbGluayAqL1xubmV0L3NtYy9hZl9zbWMuYzoxOTE4Olx0XHRzbWNfbGxjX3Nydl9hZGRfbGluayhsaW5rLCBOVUxMKTtcbm5ldC9zbWMvYWZfc21jLmMtMTkxOS1cdFx0dXBfd3JpdGUoXHUwMDI2bGluay1cdTAwM2VsZ3ItXHUwMDNlbGxjX2NvbmZfbXV0ZXgpO1xuLS1cbm5ldC9zbWMvc21jX2xsYy5jPTE0MjE9c3RhdGljIHZvaWQgc21jX2xsY19zZW5kX3JlcV9hZGRfbGlua19yZXNwb25zZShzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnFlbnRyeSlcbi0tXG5uZXQvc21jL3NtY19sbGMuYy0xNDI5LVxubmV0L3NtYy9zbWNfbGxjLmM6MTQzMDppbnQgc21jX2xsY19zcnZfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLFxubmV0L3NtYy9zbWNfbGxjLmMtMTQzMS1cdFx0XHQgc3RydWN0IHNtY19sbGNfcWVudHJ5ICpyZXFfcWVudHJ5KVxuLS1cbm5ldC9zbWMvc21jX2xsYy5jPTE1NTI9c3RhdGljIHZvaWQgc21jX2xsY19wcm9jZXNzX3Nydl9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncilcbi0tXG5uZXQvc21jL3NtY19sbGMuYy0xNTYwLVx0ZG93bl93cml0ZShcdTAwMjZsZ3ItXHUwMDNlbGxjX2NvbmZfbXV0ZXgpO1xubmV0L3NtYy9zbWNfbGxjLmM6MTU2MTpcdHJjID0gc21jX2xsY19zcnZfYWRkX2xpbmsobGluaywgcWVudHJ5KTtcbm5ldC9zbWMvc21jX2xsYy5jLTE1NjItXHRpZiAoIXJjIFx1MDAyNlx1MDAyNiBsZ3ItXHUwMDNldHlwZSA9PSBTTUNfTEdSX1NZTU1FVFJJQykge1xuLS1cbm5ldC9zbWMvc21jX2xsYy5oPTExND1pbnQgc21jX2xsY19jbGlfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLCBzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnFlbnRyeSk7XG5uZXQvc21jL3NtY19sbGMuaDoxMTU6aW50IHNtY19sbGNfc3J2X2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluayxcbm5ldC9zbWMvc21jX2xsYy5oLTExNi1cdFx0XHQgc3RydWN0IHNtY19sbGNfcWVudHJ5ICpyZXFfcWVudHJ5KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjkwCgkJCQkJCQlvdXRwdXQ6IDE2CgkJCQkJCQl0aG91Z2h0czogMjE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZpeGluZyB0aGUgU01DIExMQyBNZXNzYWdlIEhhbmRsaW5nOiBBIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRhY2tsaW5nIGEgcHJldHR5IGNyaXRpY2FsIGJ1ZyB3aXRoaW4gdGhlIFNNQyBMTEMgbGF5ZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gYHNtY19sbGNfZW5xdWV1ZWAgYW5kIGBzbWNfbGxjX3NhdmVfYWRkX2xpbmtfcmtleXNgLiBJdCBzZWVtcyB3ZSYjMzk7dmUgZ290IGFuIG92ZXJmbG93IGlzc3VlIHdpdGggbGFyZ2UgU01DLVJ2MiBtZXNzYWdlcywgcGFydGljdWxhcmx5IGBBRERfTElOS2AgYW5kIGBERUxFVEVfUktFWV9WMmAuIEJhc2ljYWxseSwgd2UmIzM5O3JlIHJ1bm5pbmcgaW50byBidWZmZXIgbGltaXRhdGlvbnMgd2l0aGluIHRoZSBgc21jX2xsY19xZW50cnlgIHN0cnVjdC4gVGhlIGV4aXN0aW5nIGFsbG9jYXRpb24gaXMgc2ltcGx5IHRvbyBzbWFsbCB0byBoYW5kbGUgdGhlIG1lc3NhZ2UgcGF5bG9hZCwgd2hpY2ggY2FuIGxlYWQgdG8gZGF0YSBjb3JydXB0aW9uIG9yIG91dHJpZ2h0IGZhaWx1cmUgdG8gcHJvY2VzcyB0aGVzZSBjb21tYW5kcy4KClRoZSBnZW5pdXMgb2YgdGhpcyBmaXggaXMgdGhlIGludHJvZHVjdGlvbiBvZiBhIGZsZXhpYmxlIGFycmF5IG1lbWJlciwgYGJvZHlbXWAsIHdpdGhpbiB0aGUgYHN0cnVjdCBzbWNfbGxjX3FlbnRyeWAuIFRoaXMgaXMgcmVhbGx5IHNtYXJ0OyBieSBkeW5hbWljYWxseSBhbGxvY2F0aW5nIHRoZSBidWZmZXIgYmFzZWQgb24gdGhlIGFjdHVhbCBtZXNzYWdlIHNpemUsIHdlIGd1YXJhbnRlZSB0aGF0IHdl4oCZdmUgZ290IGVub3VnaCBzcGFjZSB0byB3b3JrIHdpdGgsIHdoaWNoIHByZXZlbnRzIHRob3NlIG92ZXJmbG93cy4KClRoaXMgaXMgYSBwcmV0dHkgZnVuZGFtZW50YWwgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0JiMzOTtzIHRvdWNoaW5nIHRoZSBjb3JlIG9mIHRoZSBMTEMgcHJvY2Vzc2luZyBsb2dpYy4gVGhlIGNvZGUgaXMgZ2V0dGluZyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzbyBpdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIHNvbWUgc2VyaW91cyBmdXp6aW5nLgoKTXkgcHJpbWFyeSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOiBgc21jX2xsY19jbGlfYWRkX2xpbmtgLCBgc21jX2xsY19zcnZfYWRkX2xpbmtgLCBgc21jX2xsY19hZGRfbGlua19sb2NhbGAsIGFuZCBgc21jX2xsY19zcnZfZGVsZXRlX2xpbmtfbG9jYWxgLiBUaGVzZSBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHMgZm9yIHRoZSBwcm9ibGVtYXRpYyBjb21tYW5kcy4gSeKAmWxsIG1ha2Ugc3VyZSB0byBleHBsb3JlIGFsbCBwYXRocyB3aXRoaW4gdGhlc2UgZnVuY3Rpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHdheSB0aGUgbmV3IGBib2R5W11gIG1lbWJlciBpcyB1c2VkIGFuZCBlbnN1cmUgdGhlcmUgYXJlIG5vIG9mZi1ieS1vbmUgZXJyb3JzIG9yIG90aGVyIHZ1bG5lcmFiaWxpdGllcyBpbnRyb2R1Y2VkIGJ5IHRoZSBkeW5hbWljIGFsbG9jYXRpb24uCgpOb3csIGxldCYjMzk7cyBnbyBiYWNrIGFuZCBkb3VibGUgY2hlY2sgdGhlIFNNQyBjb25maWd1cmF0aW9uIG9wdGlvbnMsIG1ha2luZyBzdXJlIHdlIGhhdmVuJiMzOTt0IGluYWR2ZXJ0ZW50bHkgYnJva2VuIGFueSBleGlzdGluZyBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU01DJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L0tjb25maWc9MTQ2PWNvbmZpZyBJMkNfU1BJX1NNQzFfVUNPREVfUEFUQ0hcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzh4eC9LY29uZmlnLTE1MC1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L0tjb25maWc6MTUxOmNvbmZpZyBTTUNfVUNPREVfUEFUQ0hcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L0tjb25maWctMTUyLVx0Ym9vbCBcJiMzNDtTTUMgcmVsb2NhdGlvbiBwYXRjaFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2MvS2NvbmZpZz0yMD1pZiBORVRfVkVORE9SX1NNU0NcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2MvS2NvbmZpZy0yMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2MvS2NvbmZpZzoyMjpjb25maWcgU01DOTFYXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL0tjb25maWctMjMtXHR0cmlzdGF0ZSBcJiMzNDtTTUMgOTFDOXgvOTFDMXh4eCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3NtYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvc21jL0tjb25maWc6Mjpjb25maWcgU01DXG5uZXQvc21jL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1NNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XCYjMzQ7XG4tLVxubmV0L3NtYy9LY29uZmlnLTEzLVxubmV0L3NtYy9LY29uZmlnOjE0OmNvbmZpZyBTTUNfRElBR1xubmV0L3NtYy9LY29uZmlnLTE1LVx0dHJpc3RhdGUgXCYjMzQ7U01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQvc21jL0tjb25maWctMjItXG5uZXQvc21jL0tjb25maWc6MjM6Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxubmV0L3NtYy9LY29uZmlnLTI0LVx0Ym9vbCBcJiMzNDtHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3MjYKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgdGhlIGNvbmZpZ3VyYXRpb24gaW4gZnJvbnQgb2YgbWUgaXMgYFNNQ2AuIFRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBCdXQsIGFzIHdlIGFsbCBrbm93LCBub3RoaW5nIGV4aXN0cyBpbiBhIHZhY3V1bSwgZXNwZWNpYWxseSBpbiB0aGlzIGZpZWxkLiBNeSBpbW1lZGlhdGUgbmV4dCB0aG91Z2h0IGlzIHRvIGRpZyBkZWVwZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB3aWRlciBjb250ZXh0LiBBcmUgdGhlcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcyB3b3ZlbiBpbiBoZXJlPyBXaGF0IGVsc2UgZG9lcyBgU01DYCByZWx5IG9uIHRvIGZ1bmN0aW9uIGNvcnJlY3RseT8gV2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBtdXN0IEkgY29uc2lkZXI/IEJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyIEkgbXVzdCBlbnN1cmUgSSBoYXZlIGEgY29tcGxldGUgcGljdHVyZS4gTGV0JiMzOTtzIGRlbHZlIGluIGFuZCBmaW5kIHRoZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24uKlNNQyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybS9LY29uZmlnPTEwNjk9Y29uZmlnIEFSTV9QU0NJXG5hcmNoL2FybS9LY29uZmlnLTEwNzAtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHRoZSBBUk0gUG93ZXIgU3RhdGUgQ29vcmRpbmF0aW9uIEludGVyZmFjZSAoUFNDSSlcJiMzNDtcbmFyY2gvYXJtL0tjb25maWc6MTA3MTpcdGRlcGVuZHMgb24gSEFWRV9BUk1fU01DQ0NcbmFyY2gvYXJtL0tjb25maWctMTA3Mi1cdHNlbGVjdCBBUk1fUFNDSV9GV1xuLS1cbmFyY2gvYXJtNjQva3ZtL3BzY2kuYz0zMjE9c3RhdGljIGludCBrdm1fcHNjaV8xX3hfY2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtaW5vcilcbi0tXG5hcmNoL2FybTY0L2t2bS9wc2NpLmMtMzc5LVx0XHQgKiBSZXR1cm4gZGlyZWN0bHkgdG8gdXNlcnNwYWNlIHdpdGhvdXQgY2hhbmdpbmcgdGhlIHZDUFUmIzM5O3NcbmFyY2gvYXJtNjQva3ZtL3BzY2kuYzozODA6XHRcdCAqIHJlZ2lzdGVycy4gVXNlcnNwYWNlIGRlcGVuZHMgb24gcmVhZGluZyB0aGUgU01DQ0MgcGFyYW1ldGVyc1xuYXJjaC9hcm02NC9rdm0vcHNjaS5jLTM4MS1cdFx0ICogdG8gaW1wbGVtZW50IFNZU1RFTV9TVVNQRU5ELlxuLS1cbmRyaXZlcnMvY2hhci9od19yYW5kb20vS2NvbmZpZz01Nzg9Y29uZmlnIEhXX1JBTkRPTV9BUk1fU01DQ0NfVFJOR1xuZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9LY29uZmlnLTU3OS1cdHRyaXN0YXRlIFwmIzM0O0FybSBTTUNDQyBUUk5HIGZpcm13YXJlIGludGVyZmFjZSBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL0tjb25maWc6NTgwOlx0ZGVwZW5kcyBvbiBIQVZFX0FSTV9TTUNDQ19ESVNDT1ZFUllcbmRyaXZlcnMvY2hhci9od19yYW5kb20vS2NvbmZpZy01ODEtXHRkZWZhdWx0IEhXX1JBTkRPTVxuLS1cbmRyaXZlcnMvY2xrL2lteC9LY29uZmlnPTk1PWNvbmZpZyBDTEtfSU1YOFFYUFxuLS1cbmRyaXZlcnMvY2xrL2lteC9LY29uZmlnLTk3LVx0ZGVwZW5kcyBvbiAoQVJDSF9NWEMgXHUwMDI2XHUwMDI2IEFSTTY0KSB8fCBDT01QSUxFX1RFU1RcbmRyaXZlcnMvY2xrL2lteC9LY29uZmlnOjk4Olx0ZGVwZW5kcyBvbiBJTVhfU0NVIFx1MDAyNlx1MDAyNiBIQVZFX0FSTV9TTUNDQ1xuZHJpdmVycy9jbGsvaW14L0tjb25maWctOTktXHRzZWxlY3QgTVhDX0NMS19TQ1Vcbi0tXG5kcml2ZXJzL2RldmZyZXEvS2NvbmZpZz0xMTI9Y29uZmlnIEFSTV9JTVg4TV9ERFJDX0RFVkZSRVFcbmRyaXZlcnMvZGV2ZnJlcS9LY29uZmlnLTExMy1cdHRyaXN0YXRlIFwmIzM0O2kuTVg4TSBERFJDIERFVkZSRVEgRHJpdmVyXCYjMzQ7XG5kcml2ZXJzL2RldmZyZXEvS2NvbmZpZzoxMTQ6XHRkZXBlbmRzIG9uIChBUkNIX01YQyBcdTAwMjZcdTAwMjYgSEFWRV9BUk1fU01DQ0MpIHx8IFxcXG5kcml2ZXJzL2RldmZyZXEvS2NvbmZpZy0xMTUtXHRcdChDT01QSUxFX1RFU1QgXHUwMDI2XHUwMDI2IEhBVkVfQVJNX1NNQ0NDKVxuLS1cbmRyaXZlcnMvZGV2ZnJlcS9LY29uZmlnPTE0Mz1jb25maWcgQVJNX1JLMzM5OV9ETUNfREVWRlJFUVxuZHJpdmVycy9kZXZmcmVxL0tjb25maWctMTQ0LVx0dHJpc3RhdGUgXCYjMzQ7QVJNIFJLMzM5OSBETUMgREVWRlJFUSBEcml2ZXJcJiMzNDtcbmRyaXZlcnMvZGV2ZnJlcS9LY29uZmlnOjE0NTpcdGRlcGVuZHMgb24gKEFSQ0hfUk9DS0NISVAgXHUwMDI2XHUwMDI2IEhBVkVfQVJNX1NNQ0NDKSB8fCBcXFxuZHJpdmVycy9kZXZmcmVxL0tjb25maWctMTQ2LVx0XHQoQ09NUElMRV9URVNUIFx1MDAyNlx1MDAyNiBIQVZFX0FSTV9TTUNDQylcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL0tjb25maWc9MTQyPWNvbmZpZyBJTlRFTF9TVFJBVElYMTBfU0VSVklDRVxuZHJpdmVycy9maXJtd2FyZS9LY29uZmlnLTE0My1cdHRyaXN0YXRlIFwmIzM0O0ludGVsIFN0cmF0aXgxMCBTZXJ2aWNlIExheWVyXCYjMzQ7XG5kcml2ZXJzL2Zpcm13YXJlL0tjb25maWc6MTQ0Olx0ZGVwZW5kcyBvbiBBUkNIX0lOVEVMX1NPQ0ZQR0EgXHUwMDI2XHUwMDI2IEFSTTY0IFx1MDAyNlx1MDAyNiBIQVZFX0FSTV9TTUNDQ1xuZHJpdmVycy9maXJtd2FyZS9LY29uZmlnLTE0NS1cdGRlZmF1bHQgblxuLS1cbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9LY29uZmlnPTE4PWNvbmZpZyBBUk1fRkZBX1NNQ0NDXG4tLVxuZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL0tjb25maWctMjAtXHRkZWZhdWx0IEFSTV9GRkFfVFJBTlNQT1JUXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvS2NvbmZpZzoyMTpcdGRlcGVuZHMgb24gQVJNNjQgXHUwMDI2XHUwMDI2IEhBVkVfQVJNX1NNQ0NDX0RJU0NPVkVSWVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvdHJhbnNwb3J0cy9LY29uZmlnPTM3PWNvbmZpZyBBUk1fU0NNSV9UUkFOU1BPUlRfU01DXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9zY21pL3RyYW5zcG9ydHMvS2NvbmZpZy0zOC1cdHRyaXN0YXRlIFwmIzM0O1NDTUkgdHJhbnNwb3J0IGJhc2VkIG9uIFNNQ1wmIzM0O1xuZHJpdmVycy9maXJtd2FyZS9hcm1fc2NtaS90cmFuc3BvcnRzL0tjb25maWc6Mzk6XHRkZXBlbmRzIG9uIEhBVkVfQVJNX1NNQ0NDX0RJU0NPVkVSWVxuZHJpdmVycy9maXJtd2FyZS9hcm1fc2NtaS90cmFuc3BvcnRzL0tjb25maWctNDAtXHRzZWxlY3QgQVJNX1NDTUlfSEFWRV9UUkFOU1BPUlRcbi0tXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9zY21pL3RyYW5zcG9ydHMvS2NvbmZpZz01MT1jb25maWcgQVJNX1NDTUlfVFJBTlNQT1JUX1NNQ19BVE9NSUNfRU5BQkxFXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9zY21pL3RyYW5zcG9ydHMvS2NvbmZpZy01Mi1cdGJvb2wgXCYjMzQ7RW5hYmxlIGF0b21pYyBtb2RlIHN1cHBvcnQgZm9yIFNDTUkgU01DIHRyYW5zcG9ydFwmIzM0O1xuZHJpdmVycy9maXJtd2FyZS9hcm1fc2NtaS90cmFuc3BvcnRzL0tjb25maWc6NTM6XHRkZXBlbmRzIG9uIEFSTV9TQ01JX1RSQU5TUE9SVF9TTUNcbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvdHJhbnNwb3J0cy9LY29uZmlnLTU0LVx0aGVscFxuLS1cbmRyaXZlcnMvZmlybXdhcmUvc21jY2MvS2NvbmZpZz0xOD1jb25maWcgQVJNX1NNQ0NDX1NPQ19JRFxuZHJpdmVycy9maXJtd2FyZS9zbWNjYy9LY29uZmlnLTE5LVx0Ym9vbCBcJiMzNDtTb0MgYnVzIGRldmljZSBmb3IgdGhlIEFSTSBTTUNDQyBTT0NfSURcJiMzNDtcbmRyaXZlcnMvZmlybXdhcmUvc21jY2MvS2NvbmZpZzoyMDpcdGRlcGVuZHMgb24gSEFWRV9BUk1fU01DQ0NfRElTQ09WRVJZXG5kcml2ZXJzL2Zpcm13YXJlL3NtY2NjL0tjb25maWctMjEtXHRkZWZhdWx0IHlcbi0tXG5kcml2ZXJzL2dwaW8vS2NvbmZpZz0xNTI4PWNvbmZpZyBHUElPX01BQ1NNQ1xuZHJpdmVycy9ncGlvL0tjb25maWctMTUyOS1cdHRyaXN0YXRlIFwmIzM0O0FwcGxlIE1hYyBTTUMgR1BJT1wmIzM0O1xuZHJpdmVycy9ncGlvL0tjb25maWc6MTUzMDpcdGRlcGVuZHMgb24gTUZEX01BQ1NNQ1xuZHJpdmVycy9ncGlvL0tjb25maWctMTUzMS1cdGhlbHBcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZz0yPWNvbmZpZyBEUk1fTUVESUFURUtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZy02LVx0ZGVwZW5kcyBvbiBDT01NT05fQ0xLXG5kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZzo3Olx0ZGVwZW5kcyBvbiBIQVZFX0FSTV9TTUNDQyB8fCBDT01QSUxFX1RFU1RcbmRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnLTgtXHRkZXBlbmRzIG9uIE9GXG4tLVxuZHJpdmVycy9od21vbi9LY29uZmlnPTExOTE9Y29uZmlnIFNFTlNPUlNfTUFDU01DX0hXTU9OXG5kcml2ZXJzL2h3bW9uL0tjb25maWctMTE5Mi1cdHRyaXN0YXRlIFwmIzM0O0FwcGxlIFNNQyAoQXBwbGUgU2lsaWNvbilcJiMzNDtcbmRyaXZlcnMvaHdtb24vS2NvbmZpZzoxMTkzOlx0ZGVwZW5kcyBvbiBNRkRfTUFDU01DIFx1MDAyNlx1MDAyNiBPRlxuZHJpdmVycy9od21vbi9LY29uZmlnLTExOTQtXHRoZWxwXG4tLVxuZHJpdmVycy9tdGQvbmFuZC9yYXcvS2NvbmZpZz00MTA9Y29uZmlnIE1URF9OQU5EX1BMMzVYXG4tLVxuZHJpdmVycy9tdGQvbmFuZC9yYXcvS2NvbmZpZy00MTItXHRkZXBlbmRzIG9uIE9GXG5kcml2ZXJzL210ZC9uYW5kL3Jhdy9LY29uZmlnOjQxMzpcdGRlcGVuZHMgb24gUEwzNTNfU01DXG5kcml2ZXJzL210ZC9uYW5kL3Jhdy9LY29uZmlnLTQxNC1cdGhlbHBcbi0tXG5kcml2ZXJzL252bWVtL0tjb25maWc9MTE5PWNvbmZpZyBOVk1FTV9JTVhfT0NPVFBfU0NVXG4tLVxuZHJpdmVycy9udm1lbS9LY29uZmlnLTEyMS1cdGRlcGVuZHMgb24gSU1YX1NDVVxuZHJpdmVycy9udm1lbS9LY29uZmlnOjEyMjpcdGRlcGVuZHMgb24gSEFWRV9BUk1fU01DQ0NcbmRyaXZlcnMvbnZtZW0vS2NvbmZpZy0xMjMtXHRoZWxwXG4tLVxuZHJpdmVycy9wY2kvaG90cGx1Zy9LY29uZmlnPTY0PWNvbmZpZyBIT1RQTFVHX1BDSV9BQ1BJX0FNUEVSRV9BTFRSQVxuLS1cbmRyaXZlcnMvcGNpL2hvdHBsdWcvS2NvbmZpZy02Ni1cdGRlcGVuZHMgb24gSE9UUExVR19QQ0lfQUNQSVxuZHJpdmVycy9wY2kvaG90cGx1Zy9LY29uZmlnOjY3Olx0ZGVwZW5kcyBvbiBIQVZFX0FSTV9TTUNDQ19ESVNDT1ZFUllcbmRyaXZlcnMvcGNpL2hvdHBsdWcvS2NvbmZpZy02OC1cdGhlbHBcbi0tXG5kcml2ZXJzL3BoeS9tYXJ2ZWxsL0tjb25maWc9Mjc9Y29uZmlnIFBIWV9NVkVCVV9BMzcwMF9DT01QSFlcbi0tXG5kcml2ZXJzL3BoeS9tYXJ2ZWxsL0tjb25maWctMzAtXHRkZXBlbmRzIG9uIE9GXG5kcml2ZXJzL3BoeS9tYXJ2ZWxsL0tjb25maWc6MzE6XHRkZXBlbmRzIG9uIEhBVkVfQVJNX1NNQ0NDXG5kcml2ZXJzL3BoeS9tYXJ2ZWxsL0tjb25maWctMzItXHRkZWZhdWx0IEFSQ0hfTVZFQlVcbi0tXG5kcml2ZXJzL3BoeS9tYXJ2ZWxsL0tjb25maWc9NTg9Y29uZmlnIFBIWV9NVkVCVV9DUDExMF9DT01QSFlcbi0tXG5kcml2ZXJzL3BoeS9tYXJ2ZWxsL0tjb25maWctNjEtXHRkZXBlbmRzIG9uIE9GXG5kcml2ZXJzL3BoeS9tYXJ2ZWxsL0tjb25maWc6NjI6XHRkZXBlbmRzIG9uIEhBVkVfQVJNX1NNQ0NDXG5kcml2ZXJzL3BoeS9tYXJ2ZWxsL0tjb25maWctNjMtXHRzZWxlY3QgR0VORVJJQ19QSFlcbi0tXG5kcml2ZXJzL3BtZG9tYWluL2FtbG9naWMvS2NvbmZpZz0xNT1jb25maWcgTUVTT05fU0VDVVJFX1BNX0RPTUFJTlNcbi0tXG5kcml2ZXJzL3BtZG9tYWluL2FtbG9naWMvS2NvbmZpZy0xOC1cdGRlcGVuZHMgb24gUE0gXHUwMDI2XHUwMDI2IE9GXG5kcml2ZXJzL3BtZG9tYWluL2FtbG9naWMvS2NvbmZpZzoxOTpcdGRlcGVuZHMgb24gSEFWRV9BUk1fU01DQ0NcbmRyaXZlcnMvcG1kb21haW4vYW1sb2dpYy9LY29uZmlnLTIwLVx0ZGVmYXVsdCBBUkNIX01FU09OXG4tLVxuZHJpdmVycy9wbWRvbWFpbi9tZWRpYXRlay9LY29uZmlnPTQ2PWNvbmZpZyBBSVJPSEFfQ1BVX1BNX0RPTUFJTlxuLS1cbmRyaXZlcnMvcG1kb21haW4vbWVkaWF0ZWsvS2NvbmZpZy00OC1cdGRlZmF1bHQgQVJDSF9BSVJPSEFcbmRyaXZlcnMvcG1kb21haW4vbWVkaWF0ZWsvS2NvbmZpZzo0OTpcdGRlcGVuZHMgb24gSEFWRV9BUk1fU01DQ0NcbmRyaXZlcnMvcG1kb21haW4vbWVkaWF0ZWsvS2NvbmZpZy01MC1cdGRlcGVuZHMgb24gUE1cbi0tXG5kcml2ZXJzL3BtZG9tYWluL3JvY2tjaGlwL0tjb25maWc9ND1jb25maWcgUk9DS0NISVBfUE1fRE9NQUlOU1xuLS1cbmRyaXZlcnMvcG1kb21haW4vcm9ja2NoaXAvS2NvbmZpZy03LVx0ZGVwZW5kcyBvbiBQTVxuZHJpdmVycy9wbWRvbWFpbi9yb2NrY2hpcC9LY29uZmlnOjg6XHRkZXBlbmRzIG9uIEhBVkVfQVJNX1NNQ0NDX0RJU0NPVkVSWVxuZHJpdmVycy9wbWRvbWFpbi9yb2NrY2hpcC9LY29uZmlnLTktXHRkZXBlbmRzIG9uIFJFR1VMQVRPUlxuLS1cbmRyaXZlcnMvcG93ZXIvcmVzZXQvS2NvbmZpZz0xMzE9Y29uZmlnIFBPV0VSX1JFU0VUX01BQ1NNQ1xuZHJpdmVycy9wb3dlci9yZXNldC9LY29uZmlnLTEzMi1cdHRyaXN0YXRlIFwmIzM0O0FwcGxlIFNNQyByZXNldC9wb3dlci1vZmYgZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL3Bvd2VyL3Jlc2V0L0tjb25maWc6MTMzOlx0ZGVwZW5kcyBvbiBNRkRfTUFDU01DXG5kcml2ZXJzL3Bvd2VyL3Jlc2V0L0tjb25maWctMTM0LVx0aGVscFxuLS1cbmRyaXZlcnMvcG93ZXIvc3VwcGx5L0tjb25maWc9MTE1Nz1jb25maWcgTUFDU01DX1BPV0VSXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9LY29uZmlnLTExNTgtXHR0cmlzdGF0ZSBcJiMzNDtBcHBsZSBTTUMgQmF0dGVyeSBhbmQgUG93ZXIgRHJpdmVyXCYjMzQ7XG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9LY29uZmlnOjExNTk6XHRkZXBlbmRzIG9uIE1GRF9NQUNTTUNcbmRyaXZlcnMvcG93ZXIvc3VwcGx5L0tjb25maWctMTE2MC1cdGhlbHBcbi0tXG5kcml2ZXJzL3B0cC9LY29uZmlnPTEyMj1jb25maWcgUFRQXzE1ODhfQ0xPQ0tfS1ZNXG4tLVxuZHJpdmVycy9wdHAvS2NvbmZpZy0xMjQtXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLXG5kcml2ZXJzL3B0cC9LY29uZmlnOjEyNTpcdGRlcGVuZHMgb24gKEtWTV9HVUVTVCBcdTAwMjZcdTAwMjYgWDg2KSB8fCAoSEFWRV9BUk1fU01DQ0NfRElTQ09WRVJZIFx1MDAyNlx1MDAyNiBBUk1fQVJDSF9USU1FUilcbmRyaXZlcnMvcHRwL0tjb25maWctMTI2LVx0ZGVmYXVsdCB5XG4tLVxuZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWc9MjY9Y29uZmlnIElNWF9SRU1PVEVQUk9DXG4tLVxuZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWctMjgtXHRkZXBlbmRzIG9uIEFSQ0hfTVhDXG5kcml2ZXJzL3JlbW90ZXByb2MvS2NvbmZpZzoyOTpcdGRlcGVuZHMgb24gSEFWRV9BUk1fU01DQ0NcbmRyaXZlcnMvcmVtb3RlcHJvYy9LY29uZmlnLTMwLVx0ZGVwZW5kcyBvbiBJTVhfU0NNSV9DUFVfRFJWIHx8ICFJTVhfU0NNSV9DUFVfRFJWXG4tLVxuZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWc9Mzk9Y29uZmlnIElNWF9EU1BfUkVNT1RFUFJPQ1xuLS1cbmRyaXZlcnMvcmVtb3RlcHJvYy9LY29uZmlnLTQxLVx0ZGVwZW5kcyBvbiBBUkNIX01YQ1xuZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWc6NDI6XHRkZXBlbmRzIG9uIEhBVkVfQVJNX1NNQ0NDXG5kcml2ZXJzL3JlbW90ZXByb2MvS2NvbmZpZy00My1cdHNlbGVjdCBNQUlMQk9YXG4tLVxuZHJpdmVycy9yZXNldC9LY29uZmlnPTExNz1jb25maWcgUkVTRVRfSU1YX1NDVVxuZHJpdmVycy9yZXNldC9LY29uZmlnLTExOC1cdHRyaXN0YXRlIFwmIzM0O2kuTVg4USBSZXNldCBEcml2ZXJcJiMzNDtcbmRyaXZlcnMvcmVzZXQvS2NvbmZpZzoxMTk6XHRkZXBlbmRzIG9uIElNWF9TQ1UgXHUwMDI2XHUwMDI2IEhBVkVfQVJNX1NNQ0NDXG5kcml2ZXJzL3Jlc2V0L0tjb25maWctMTIwLVx0ZGVwZW5kcyBvbiAoQVJNNjQgXHUwMDI2XHUwMDI2IEFSQ0hfTVhDKSB8fCBDT01QSUxFX1RFU1Rcbi0tXG5kcml2ZXJzL3J0Yy9LY29uZmlnPTE5MTY9Y29uZmlnIFJUQ19EUlZfSU1YX1NDXG5kcml2ZXJzL3J0Yy9LY29uZmlnLTE5MTctXHRkZXBlbmRzIG9uIElNWF9TQ1VcbmRyaXZlcnMvcnRjL0tjb25maWc6MTkxODpcdGRlcGVuZHMgb24gSEFWRV9BUk1fU01DQ0NcbmRyaXZlcnMvcnRjL0tjb25maWctMTkxOS1cdHRyaXN0YXRlIFwmIzM0O05YUCBpLk1YIFN5c3RlbSBDb250cm9sbGVyIFJUQyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9ydGMvS2NvbmZpZz0yMTAzPWNvbmZpZyBSVENfRFJWX01BQ1NNQ1xuZHJpdmVycy9ydGMvS2NvbmZpZy0yMTA0LVx0dHJpc3RhdGUgXCYjMzQ7QXBwbGUgTWFjIFN5c3RlbSBNYW5hZ2VtZW50IENvbnRyb2xsZXIgUlRDXCYjMzQ7XG5kcml2ZXJzL3J0Yy9LY29uZmlnOjIxMDU6XHRkZXBlbmRzIG9uIE1GRF9NQUNTTUNcbmRyaXZlcnMvcnRjL0tjb25maWctMjEwNi1cdGhlbHBcbi0tXG5kcml2ZXJzL3RlZS9LY29uZmlnPTM9bWVudWNvbmZpZyBURUVcbmRyaXZlcnMvdGVlL0tjb25maWctNC1cdHRyaXN0YXRlIFwmIzM0O1RydXN0ZWQgRXhlY3V0aW9uIEVudmlyb25tZW50IHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvdGVlL0tjb25maWc6NTpcdGRlcGVuZHMgb24gSEFWRV9BUk1fU01DQ0MgfHwgQ09NUElMRV9URVNUIHx8IENQVV9TVVBfQU1EXG5kcml2ZXJzL3RlZS9LY29uZmlnLTYtXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEExXG4tLVxuZHJpdmVycy90ZWUvb3B0ZWUvS2NvbmZpZz0zPWNvbmZpZyBPUFRFRVxuZHJpdmVycy90ZWUvb3B0ZWUvS2NvbmZpZy00LVx0dHJpc3RhdGUgXCYjMzQ7T1AtVEVFXCYjMzQ7XG5kcml2ZXJzL3RlZS9vcHRlZS9LY29uZmlnOjU6XHRkZXBlbmRzIG9uIEhBVkVfQVJNX1NNQ0NDXG5kcml2ZXJzL3RlZS9vcHRlZS9LY29uZmlnLTYtXHRkZXBlbmRzIG9uIE1NVVxuLS1cbmRyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZz03ODg9Y29uZmlnIElNWF9TQ19XRFRcbmRyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZy03ODktXHR0cmlzdGF0ZSBcJiMzNDtJTVggU0MgV2F0Y2hkb2dcJiMzNDtcbmRyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZzo3OTA6XHRkZXBlbmRzIG9uIEhBVkVfQVJNX1NNQ0NDXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWctNzkxLVx0ZGVwZW5kcyBvbiBJTVhfU0NVIHx8IENPTVBJTEVfVEVTVFxuLS1cbmRyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZz05Mzk9Y29uZmlnIEFSTV9TTUNfV0FUQ0hET0dcbi0tXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWctOTQyLVx0ZGVwZW5kcyBvbiBPRlxuZHJpdmVycy93YXRjaGRvZy9LY29uZmlnOjk0MzpcdGRlcGVuZHMgb24gSEFWRV9BUk1fU01DQ0NcbmRyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZy05NDQtXHRzZWxlY3QgV0FUQ0hET0dfQ09SRVxuLS1cbmRyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZz0yMzQyPWNvbmZpZyBHVU5ZQUhfV0FUQ0hET0dcbi0tXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWctMjM0NC1cdGRlcGVuZHMgb24gQVJDSF9RQ09NIHx8IENPTVBJTEVfVEVTVFxuZHJpdmVycy93YXRjaGRvZy9LY29uZmlnOjIzNDU6XHRkZXBlbmRzIG9uIEhBVkVfQVJNX1NNQ0NDXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWctMjM0Ni1cdHNlbGVjdCBXQVRDSERPR19DT1JFXG4tLVxubmV0L3NtYy9LY29uZmlnPTE0PWNvbmZpZyBTTUNfRElBR1xubmV0L3NtYy9LY29uZmlnLTE1LVx0dHJpc3RhdGUgXCYjMzQ7U01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbm5ldC9zbWMvS2NvbmZpZzoxNjpcdGRlcGVuZHMgb24gU01DXG5uZXQvc21jL0tjb25maWctMTctXHRoZWxwXG4tLVxubmV0L3NtYy9LY29uZmlnPTIzPWNvbmZpZyBTTUNfSFNfQ1RSTF9CUEZcbm5ldC9zbWMvS2NvbmZpZy0yNC1cdGJvb2wgXCYjMzQ7R2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQyBoYW5kc2hha2UgZmxvd1wmIzM0O1xubmV0L3NtYy9LY29uZmlnOjI1Olx0ZGVwZW5kcyBvbiBTTUMgXHUwMDI2XHUwMDI2IEJQRl9KSVQgXHUwMDI2XHUwMDI2IEJQRl9TWVNDQUxMXG5uZXQvc21jL0tjb25maWctMjYtXHRkZWZhdWx0IHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1NTMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmV2aWV3aW5nIHRoZSBTTUMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGlzIHN0cmFpZ2h0Zm9yd2FyZCwganVzdCBgU01DYC4gVGhhdCBtYWtlcyB0aGluZ3MgYSBiaXQgZWFzaWVyIHRvIGRpZ2VzdC4gTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgYXJlIHJlbGV2YW50IGhlcmUuIEkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZToKCiogICBgc21jX2xsY19jbGlfYWRkX2xpbmtgCiogICBgc21jX2xsY19zcnZfYWRkX2xpbmtgCiogICBgc21jX2xsY19hZGRfbGlua19sb2NhbGAKKiAgIGBzbWNfbGxjX3Nydl9kZWxldGVfbGlua19sb2NhbGAKCkFscmlnaHQsIGluaXRpYWxseSBgc21jX2xsY19jbGlfYWRkX2xpbmtgIGFuZCBgc21jX2xsY19zcnZfYWRkX2xpbmtgIHNlZW0gbGlrZSBzb2xpZCBjYW5kaWRhdGVzIHRvIGV4YW1pbmUuIEhvbGQgb24gYSBzZWNvbmQsIHRob3VnaC4uLiBJIG5lZWQgdG8gYWxzbyBjb25zaWRlciBwb3RlbnRpYWwgaW1wYWN0cyBmcm9tIHN0YXRpYyBmdW5jdGlvbnMuIFdoYXQgYWJvdXQgYHNtY19sbGNfcnhfaGFuZGxlcmA/IEl0IGlzIHN0YXRpYyB3aGljaCBuZWVkcyBjb25zaWRlcmF0aW9uLiBBbmQgd2hhdCBhYm91dCBgc21jX2xsY19ybXRfZGVsZXRlX3JrZXlgPyBBbHNvIHN0YXRpYywgc28gaXQgcmVxdWlyZXMgYXR0ZW50aW9uLiBBbmQsIG9mIGNvdXJzZSwgdGhlcmUmIzM5O3MgYHNtY19sbGNfZW5xdWV1ZWAsIGFub3RoZXIgc3RhdGljIG9uZS4KCk9rYXksIGxldCYjMzk7cyBzdGVwIGJhY2ssIGFuZCBjaGVjayB0aG9zZSByZW1haW5pbmcgZnVuY3Rpb25zLCBgc21jX2xsY19hZGRfbGlua19sb2NhbGAgYW5kIGBzbWNfbGxjX3Nydl9kZWxldGVfbGlua19sb2NhbGAuIFRoZSBrZXkgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIHRoZXkgYXJlIGV4cG9ydGVkIG9yIG5vbi1zdGF0aWMuIFRoZSBhbnN3ZXIgdG8gdGhhdCBxdWVzdGlvbiB3aWxsIGluZmx1ZW5jZSB0aGUgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NtY19sbGNfYWRkX2xpbmtfbG9jYWwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfY29yZS5jPTE3NTc9dm9pZCBzbWNyX3BvcnRfYWRkKHN0cnVjdCBzbWNfaWJfZGV2aWNlICpzbWNpYmRldiwgdTggaWJwb3J0KVxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0xNzc3LVx0XHRpZiAobGluaylcbm5ldC9zbWMvc21jX2NvcmUuYzoxNzc4Olx0XHRcdHNtY19sbGNfYWRkX2xpbmtfbG9jYWwobGluayk7XG5uZXQvc21jL3NtY19jb3JlLmMtMTc3OS1cdH1cbi0tXG5uZXQvc21jL3NtY19sbGMuYz0xNTUyPXN0YXRpYyB2b2lkIHNtY19sbGNfcHJvY2Vzc19zcnZfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IpXG4tLVxubmV0L3NtYy9zbWNfbGxjLmMtMTU3MC0vKiBlbnF1ZXVlIGEgbG9jYWwgYWRkX2xpbmsgcmVxIHRvIHRyaWdnZXIgYSBuZXcgYWRkX2xpbmsgZmxvdyAqL1xubmV0L3NtYy9zbWNfbGxjLmM6MTU3MTp2b2lkIHNtY19sbGNfYWRkX2xpbmtfbG9jYWwoc3RydWN0IHNtY19saW5rICpsaW5rKVxubmV0L3NtYy9zbWNfbGxjLmMtMTU3Mi17XG4tLVxubmV0L3NtYy9zbWNfbGxjLmM9MTY5Nz1zdGF0aWMgdm9pZCBzbWNfbGxjX3Byb2Nlc3Nfc3J2X2RlbGV0ZV9saW5rKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyKVxuLS1cbm5ldC9zbWMvc21jX2xsYy5jLTE3NTctXHRcdC8qIHRyaWdnZXIgc2V0dXAgb2YgYXN5bW0gYWx0IGxpbmsgKi9cbm5ldC9zbWMvc21jX2xsYy5jOjE3NTg6XHRcdHNtY19sbGNfYWRkX2xpbmtfbG9jYWwobG5rKTtcbm5ldC9zbWMvc21jX2xsYy5jLTE3NTktXHR9XG4tLVxubmV0L3NtYy9zbWNfbGxjLmg9MTE1PWludCBzbWNfbGxjX3Nydl9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG5uZXQvc21jL3NtY19sbGMuaC0xMTYtXHRcdFx0IHN0cnVjdCBzbWNfbGxjX3FlbnRyeSAqcmVxX3FlbnRyeSk7XG5uZXQvc21jL3NtY19sbGMuaDoxMTc6dm9pZCBzbWNfbGxjX2FkZF9saW5rX2xvY2FsKHN0cnVjdCBzbWNfbGluayAqbGluayk7XG5uZXQvc21jL3NtY19sbGMuaC0xMTgtaW50IHNtY19sbGNfaW5pdCh2b2lkKSBfX2luaXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjY4CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgTGluay1Mb2NhbCBTTUMgTExDIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gYHNtY19sbGNfYWRkX2xpbmtfbG9jYWxgIGlzbiYjMzk7dCBzdGF0aWMuIFRoYXQmIzM5O3MgZ29vZCB0byBub3RlLCBpbXBvcnRhbnQgZm9yIGhvdyBpdCYjMzk7cyBoYW5kbGVkLCB3aGVyZSBpdCBjYW4gYmUgY2FsbGVkIGZyb20sIGFuZCBvZiBjb3Vyc2UsIHdoYXQgc2NvcGUgaXQgZXhpc3RzIHdpdGhpbi4gVGhpcyBpc24mIzM5O3QganVzdCBhIHNpbXBsZSBoZWxwZXIgZnVuY3Rpb24uIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCB3aGVuIEkmIzM5O20gYXNzZXNzaW5nIGl0cyBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gYW5kLCBlc3BlY2lhbGx5LCB3aGVuIHRoaW5raW5nIGFib3V0IGl0cyBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIG9yIHJlZW50cmFuY3kgaXNzdWVzLgoKQW5kIHRoZW4sIGp1c3QgdG8gYmUgdGhvcm91Z2gsIHdoYXQgYWJvdXQgYHNtY19sbGNfc3J2X2RlbGV0ZV9saW5rX2xvY2FsYD8gSXMgKnRoYXQqIGFsc28gbm9uLXN0YXRpYz8gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdCBiZWZvcmUgSSBtb3ZlIG9uLiBUaGUgc3RhdGljL25vbi1zdGF0aWMgc3RhdHVzIG9mIHRoZXNlIGZ1bmN0aW9ucywgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiBzZXJ2aWNlIGFuZCBsaW5rIG1hbmFnZW1lbnQsIGRpY3RhdGVzIGEgbG90IGFib3V0IHRoZSBkZXNpZ24gYW5kIHBvdGVudGlhbCBwaXRmYWxscyB3aXRoaW4gdGhpcyBMTEMgbGF5ZXIuIEkgbmVlZCB0byBrbm93IHRoZSBzY29wZSBvZiBib3RoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMgYW5kIG1ha2UgdGhlIHJpZ2h0IGFzc3VtcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfbGxjX3Nydl9kZWxldGVfbGlua19sb2NhbCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19jb3JlLmM9MTc4Nj1zdGF0aWMgdm9pZCBzbWNyX2xpbmtfZG93bihzdHJ1Y3Qgc21jX2xpbmsgKmxuaylcbi0tXG5uZXQvc21jL3NtY19jb3JlLmMtMTgwNC1cdFx0LyogdHJpZ2dlciBsb2NhbCBkZWxldGUgbGluayBwcm9jZXNzaW5nICovXG5uZXQvc21jL3NtY19jb3JlLmM6MTgwNTpcdFx0c21jX2xsY19zcnZfZGVsZXRlX2xpbmtfbG9jYWwodG9fbG5rLCBkZWxfbGlua19pZCk7XG5uZXQvc21jL3NtY19jb3JlLmMtMTgwNi1cdH0gZWxzZSB7XG4tLVxubmV0L3NtYy9zbWNfbGxjLmM9MTU4Mz1zdGF0aWMgdm9pZCBzbWNfbGxjX2FkZF9saW5rX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9zbWMvc21jX2xsYy5jLTE2MDUtICovXG5uZXQvc21jL3NtY19sbGMuYzoxNjA2OnZvaWQgc21jX2xsY19zcnZfZGVsZXRlX2xpbmtfbG9jYWwoc3RydWN0IHNtY19saW5rICpsaW5rLCB1OCBkZWxfbGlua19pZClcbm5ldC9zbWMvc21jX2xsYy5jLTE2MDcte1xuLS1cbm5ldC9zbWMvc21jX2xsYy5oPTg3PWludCBzbWNfbGxjX3NlbmRfZGVsZXRlX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLCB1OCBsaW5rX2RlbF9pZCxcbi0tXG5uZXQvc21jL3NtY19sbGMuaC04OS1cdFx0XHQgICAgIHUzMiByZWFzb24pO1xubmV0L3NtYy9zbWNfbGxjLmg6OTA6dm9pZCBzbWNfbGxjX3Nydl9kZWxldGVfbGlua19sb2NhbChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHU4IGRlbF9saW5rX2lkKTtcbm5ldC9zbWMvc21jX2xsYy5oLTkxLXZvaWQgc21jX2xsY19sZ3JfaW5pdChzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxnciwgc3RydWN0IHNtY19zb2NrICpzbWMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQxMAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBjb25zaWRlcmluZyB3aGF0IEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpcyBjb2RlOgoKKipBbmFseXppbmcgU01DIExMQyBMaW5rIE1hbmFnZW1lbnQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYHNtY19sbGNfc3J2X2RlbGV0ZV9saW5rX2xvY2FsYCBpc24mIzM5O3QgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIHVzZWZ1bCBpbmZvcm1hdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYnJvYWRlciBzY29wZSBvZiBpdHMgdXNlLiBNeSBtYWluIGZvY3VzLCB0aGVuLCBzaG91bGQgYmUgb24gdGhlc2UgZm91ciBrZXkgZnVuY3Rpb25zLCB1bmRlcnN0YW5kaW5nIGhvdyB0aGV5IGludGVyYWN0IHdpdGhpbiB0aGUgU01DIExMQyBsYXllcjogYHNtY19sbGNfY2xpX2FkZF9saW5rYCwgYHNtY19sbGNfc3J2X2FkZF9saW5rYCwgYHNtY19sbGNfYWRkX2xpbmtfbG9jYWxgLCBhbmQgYHNtY19sbGNfc3J2X2RlbGV0ZV9saW5rX2xvY2FsYC4gVGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBpcyBkZWZpbml0ZWx5IGBTTUNgLiBJJiMzOTtsbCB3YW50IHRvIGVuc3VyZSBgU01DYCBpcyB0aGUgb25seSBjb25maWcgaW1wYWN0aW5nIGNvbXBpbGF0aW9uIG9mIGBuZXQvc21jL3NtY19sbGMuY2AuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IG90aGVyIHBvdGVudGlhbCBjb25maWd1cmF0aW9ucy4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgdG8gYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NtY19sbGMubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL01ha2VmaWxlPTQ9b2JqLSQoQ09ORklHX1NNQ19ESUFHKVx0JiM0Mzs9IHNtY19kaWFnLm9cbm5ldC9zbWMvTWFrZWZpbGU6NTpzbWMteSA6PSBhZl9zbWMubyBzbWNfcG5ldC5vIHNtY19pYi5vIHNtY19jbGMubyBzbWNfY29yZS5vIHNtY193ci5vIHNtY19sbGMub1xubmV0L3NtYy9NYWtlZmlsZS02LXNtYy15ICYjNDM7PSBzbWNfY2RjLm8gc21jX3R4Lm8gc21jX3J4Lm8gc21jX2Nsb3NlLm8gc21jX2lzbS5vIHNtY19uZXRsaW5rLm8gc21jX3N0YXRzLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY5NTEKCQkJCQkJCW91dHB1dDogMTc3CgkJCQkJCQl0aG91Z2h0czogMTg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBTTUMgTExDIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGV4YW1pbmVkIHRoaXMgcGF0Y2gsIGFuZCBoZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmc6IGl0JiMzOTtzIGRlZmluaXRlbHkgdGFyZ2V0aW5nIHRoZSBgc21jLXlgIG1vZHVsZSwgd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZCB3aGVuIEkgc2F3IGBDT05GSUdfU01DYCBtZW50aW9uZWQuIFRoZXJlZm9yZSwgbXkgZXhwZWN0ZWQgcmVzdWx0cyBhbGlnbiBwZXJmZWN0bHkuIFdlIHNob3VsZCBzZWUgYFdvcnRoRnV6emluZzogdHJ1ZWAgYmVjYXVzZSB0aGlzIHBhdGNoIGRpcmVjdGx5IGltcGFjdHMgdGhlIFNNQyBMTEMgbWVzc2FnZSBwcm9jZXNzaW5nIGxvZ2ljLCBhIGNyaXRpY2FsIHBhcnQgb2YgdGhlIFNNQyBzdGFjay4KClRoZSBgRm9jdXNTeW1ib2xzYCBhbHNvIGxvb2sgc3BvdCBvbjsgdGhlc2UgZnVuY3Rpb25zIChgc21jX2xsY19jbGlfYWRkX2xpbmtgLCBgc21jX2xsY19zcnZfYWRkX2xpbmtgLCBgc21jX2xsY19hZGRfbGlua19sb2NhbGAsIGBzbWNfbGxjX3Nydl9kZWxldGVfbGlua19sb2NhbGApIGFyZSBleGFjdGx5IHdoZXJlIEkgd291bGQgZXhwZWN0IHRvIGZpbmQgdGhlIHZ1bG5lcmFiaWxpdHkuIFRoZXNlIGFyZSB0aGUgY29yZSBmdW5jdGlvbnMgcmVsYXRlZCB0byBsaW5rIG1hbmFnZW1lbnQsIGFuZCB0aGUgYFJlYXNvbmluZ2Agc2VjdGlvbiBjb25maXJtcyB0aGF0IGxhcmdlIG1lc3NhZ2VzIHdlcmUgY2F1c2luZyBidWZmZXIgb3ZlcmZsb3dzIHdpdGhpbiB0aGUgYHNtY19sbGNfcWVudHJ5YCBidWZmZXIsIHNvIHRoZXNlIGFyZSB0aGUgY2FuZGlkYXRlcy4KCkZ1cnRoZXJtb3JlLCBgRW5hYmxlQ29uZmlnczogLSBTTUNgIGlzIGFsc28gY29ycmVjdC4gVGhlIHBhdGNoIGRlcGVuZHMgb24gdGhlIFNNQyBmZWF0dXJlIGJlaW5nIGVuYWJsZWQuCgpUaGUgcmVhc29uaW5nIHByb3ZpZGVkIGlzIHNvbGlkOyBpdCBkZXRhaWxzIHRoZSBpc3N1ZeKAlGxhcmdlIFNNQy1SdjIgbWVzc2FnZXMsIHNwZWNpZmljYWxseSB0aGUgQUREX0xJTksgYW5kIERFTEVURV9SS0VZX1YyIHR5cGVzLCBvdmVyZmxvd2luZyB0aGUgYWxsb2NhdGVkIGJ1ZmZlci4gVGhlIGZpeCwgd2hpY2ggdXNlcyBhIGZsZXhpYmxlIGFycmF5IG1lbWJlciB0byBhbGxvY2F0ZSB0aGUgYnVmZmVyIGR5bmFtaWNhbGx5IGJhc2VkIG9uIHRoZSBtZXNzYWdlIHNpemUsIGlzIGV4YWN0bHkgdGhlIHJpZ2h0IGFwcHJvYWNoIHRvIGFkZHJlc3MgdGhpcyB0eXBlIG9mIG92ZXJmbG93IHZ1bG5lcmFiaWxpdHkuIFRoZSBtZW50aW9uIG9mIGl0IGJlaW5nIHJlYWNoYWJsZSB2aWEgQUZfU01DIHNvY2tldHMgaXMgYWxzbyBpbXBvcnRhbnQsIGVzdGFibGlzaGluZyB0aGUgcHJhY3RpY2FsIGltcGFjdCBhbmQgc3VnZ2VzdGluZyB3YXlzIHRvIGFjdHVhbGx5IHRyaWdnZXIgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTTUMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzbWNfbGxjX2NsaV9hZGRfbGluayYjMzQ7LAogICAgJiMzNDtzbWNfbGxjX3Nydl9hZGRfbGluayYjMzQ7LAogICAgJiMzNDtzbWNfbGxjX2FkZF9saW5rX2xvY2FsJiMzNDssCiAgICAmIzM0O3NtY19sbGNfc3J2X2RlbGV0ZV9saW5rX2xvY2FsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIFNNQyBMTEMgbWVzc2FnZSBlbnF1ZXVlaW5nIHdoZXJlIGxhcmdlIFNNQy1SdjIgbWVzc2FnZXMgKGxpa2UgQUREX0xJTksgYW5kIERFTEVURV9SS0VZX1YyKSB3ZXJlIG92ZXJmbG93aW5nIHRoZSBhbGxvY2F0ZWQgc21jX2xsY19xZW50cnkgYnVmZmVyLiBJdCBpbnRyb2R1Y2VzIGEgZmxleGlibGUgYXJyYXkgbWVtYmVyIHRvIGR5bmFtaWNhbGx5IGFsbG9jYXRlIHRoZSBidWZmZXIgYmFzZWQgb24gdGhlIG1lc3NhZ2Ugc2l6ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIFNNQyBMTEMgcHJvY2Vzc2luZyBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHZpYSBBRl9TTUMgc29ja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U01DJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c21jX2xsY19jbGlfYWRkX2xpbmsmIzM0OywKICAgICYjMzQ7c21jX2xsY19zcnZfYWRkX2xpbmsmIzM0OywKICAgICYjMzQ7c21jX2xsY19hZGRfbGlua19sb2NhbCYjMzQ7LAogICAgJiMzNDtzbWNfbGxjX3Nydl9kZWxldGVfbGlua19sb2NhbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBTTUMgTExDIG1lc3NhZ2UgZW5xdWV1ZWluZyB3aGVyZSBsYXJnZSBTTUMtUnYyIG1lc3NhZ2VzIChsaWtlIEFERF9MSU5LIGFuZCBERUxFVEVfUktFWV9WMikgd2VyZSBvdmVyZmxvd2luZyB0aGUgYWxsb2NhdGVkIHNtY19sbGNfcWVudHJ5IGJ1ZmZlci4gSXQgaW50cm9kdWNlcyBhIGZsZXhpYmxlIGFycmF5IG1lbWJlciB0byBkeW5hbWljYWxseSBhbGxvY2F0ZSB0aGUgYnVmZmVyIGJhc2VkIG9uIHRoZSBtZXNzYWdlIHNpemUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBTTUMgTExDIHByb2Nlc3NpbmcgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgQUZfU01DIHNvY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAyOjU4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDI6NTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBTTUMtUnYyIExMQyBtZXNzYWdlIGhhbmRsaW5nIHdoZXJlIGEgc2hhcmVkIERNQSByZWNlaXZlIGJ1ZmZlciAoYHdyX3J4X2J1Zl92MmApIGNvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGEgbmV3IGluY29taW5nIG1lc3NhZ2UgYmVmb3JlIHRoZSB3b3JrZXIgdGhyZWFkIHByb2Nlc3NlZCB0aGUgcHJldmlvdXMgb25lLiBJdCByZXNvbHZlcyB0aGlzIGJ5IGNvcHlpbmcgdGhlIHNwaWxsb3ZlciBieXRlcyBvZiB0aGUgbWVzc2FnZSBpbnRvIGEgZmxleGlibGUgYXJyYXkgaW4gYHN0cnVjdCBzbWNfbGxjX3FlbnRyeWAgYXQgdGhlIHRpbWUgb2YgcmVjZXB0aW9uLiBJdCBhbHNvIGFkZHMgYm91bmRzIGNoZWNrcyB0byBlbnN1cmUgbWVzc2FnZSBwYXJzaW5nIGRvZXMgbm90IHJlYWQgcGFzdCB0aGUgYWN0dWFsIHJlY2VpdmVkIGxlbmd0aC5cblxuQmVmb3JlIHRoaXMgcGF0Y2gsIHJlYWRpbmcgcGFzdCB0aGUgcmVjZWl2ZWQgbGVuZ3RoIHdvdWxkIHJlYWQgZnJvbSB0aGUgcmVtYWluZGVyIG9mIHRoZSByZWNlaXZlIGJ1ZmZlci4gU2luY2UgdGhpcyBidWZmZXIgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgIChvciBga2NhbGxvY2ApLCB0aGUgbWVtb3J5IHdhcyB6ZXJvLWluaXRpYWxpemVkLCBtZWFuaW5nIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdhcyBhY2Nlc3NlZC4gXG5cblRoZSBuZXdseSBpbnRyb2R1Y2VkIGBzdHJ1Y3Qgc21jX2xsY19xZW50cnlgIGlzIHN0cmljdGx5IGFuIGludGVybmFsIGtlcm5lbCBzdHJ1Y3R1cmUgdXNlZCBmb3IgcXVldWluZyBtZXNzYWdlcyB0byBhIHdvcmtlciB0aHJlYWQuIEl0IGlzIG5ldmVyIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yaywgc28gYW55IHN0cnVjdCBwYWRkaW5nIGNhbm5vdCBjYXVzZSBhbiBpbmZvLWxlYWsuIEZ1cnRoZXJtb3JlLCBhbGwgZmllbGRzIGFuZCB0aGUgZmxleGlibGUgYXJyYXkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgZHVyaW5nIGFsbG9jYXRpb24gaW4gYHNtY19sbGNfZW5xdWV1ZWAuIE1lc3NhZ2VzIGdlbmVyYXRlZCBsb2NhbGx5IGFuZCBzZW50IG92ZXIgdGhlIG5ldHdvcmsgYXJlIGZ1bGx5IHplcm9lZCB1c2luZyBgbWVtc2V0YCBiZWZvcmUgdHJhbnNtaXNzaW9uLlxuXG5TaW5jZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlcyBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGlzIHBhdGNoLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmYyYTg2MDkzY2RhMTRkNmY0N2ZkOTk3YmNkNTNiZWQxZTNkYjFkZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDE5IDAyOjU3OjQ2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfbGxjLmMgYi9uZXQvc21jL3NtY19sbGMuYwppbmRleCA5NTRiMmZmMTgxNWMyLi4zOTNhYTBhZjE4ZDFkIDEwMDY0NAotLS0gYS9uZXQvc21jL3NtY19sbGMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL3NtY19sbGMuYwpAQCAtMTU3LDYgJiM0MzsxNTcsNyBAQCBzdHJ1Y3Qgc21jX2xsY19tc2dfY29uZmlybV9ya2V5IHsJLyogdHlwZSAweDA2ICovCiB9OwogCiAjZGVmaW5lIFNNQ19MTENfREVMX1JLRVlfTUFYCTgKJiM0MzsjZGVmaW5lIFNNQ19MTENfREVMX1JLRVlfVjJfSU5MSU5FCTkKICNkZWZpbmUgU01DX0xMQ19GTEFHX1JLRVlfUkVUUlkJMHgxMAogI2RlZmluZSBTTUNfTExDX0ZMQUdfUktFWV9ORUcJMHgyMAogCkBAIC0xNzcsNiAmIzQzOzE3OCwxNSBAQCBzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXlfdjIgewkvKiB0eXBlIDB4MjkgKi8KIAlfX2JlMzIgcmtleVtdOwogfTsKIAomIzQzOy8qIHRoZSBsZWFkaW5nIHJrZXlzIG9mIGEgREVMRVRFX1JLRVlfVjIgZml0IGludG8gdW5pb24gc21jX2xsY19tc2cgKi8KJiM0MztzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXlfdjJfaW5saW5lIHsJLyogdHlwZSAweDI5ICovCiYjNDM7CXN0cnVjdCBzbWNfbGxjX2hkciBoZDsKJiM0MzsJdTggbnVtX3JrZXlzOwomIzQzOwl1OCBudW1faW52YWxfcmtleXM7CiYjNDM7CXU4IHJlc2VydmVkWzJdOwomIzQzOwlfX2JlMzIgcmtleVtTTUNfTExDX0RFTF9SS0VZX1YyX0lOTElORV07CiYjNDM7fTsKJiM0MzsKIHVuaW9uIHNtY19sbGNfbXNnIHsKIAlzdHJ1Y3Qgc21jX2xsY19tc2dfY29uZmlybV9saW5rIGNvbmZpcm1fbGluazsKIAlzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmsgYWRkX2xpbms7CkBAIC0xODYsNiAmIzQzOzE5Niw3IEBAIHVuaW9uIHNtY19sbGNfbXNnIHsKIAogCXN0cnVjdCBzbWNfbGxjX21zZ19jb25maXJtX3JrZXkgY29uZmlybV9ya2V5OwogCXN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleSBkZWxldGVfcmtleTsKJiM0MzsJc3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyX2lubGluZSBkZWxldGVfcmtleV92MjsKIAogCXN0cnVjdCBzbWNfbGxjX21zZ190ZXN0X2xpbmsgdGVzdF9saW5rOwogCXN0cnVjdCB7CkBAIC0xOTQsMTUgJiM0MzsyMDUsMjUgQEAgdW5pb24gc21jX2xsY19tc2cgewogCX0gcmF3OwogfTsKIAomIzQzO3N0YXRpY19hc3NlcnQoU01DX0xMQ19ERUxfUktFWV9WMl9JTkxJTkUgPT0KJiM0MzsJICAgICAgKHNpemVvZih1bmlvbiBzbWNfbGxjX21zZykgLQomIzQzOwkgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyLCBya2V5KSkgLwomIzQzOwkgICAgICBzaXplb2YoX19iZTMyKSk7CiYjNDM7c3RhdGljX2Fzc2VydChvZmZzZXRvZihzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXlfdjJfaW5saW5lLCBya2V5KSA9PQomIzQzOwkgICAgICBvZmZzZXRvZihzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXlfdjIsIHJrZXkpKTsKJiM0MzsKICNkZWZpbmUgU01DX0xMQ19GTEFHX1JFU1AJCTB4ODAKIAogc3RydWN0IHNtY19sbGNfcWVudHJ5IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJc3RydWN0IHNtY19saW5rICpsaW5rOwomIzQzOwl1MTYgYm9keV9sZW47CiAJdW5pb24gc21jX2xsY19tc2cgbXNnOwomIzQzOwl1OCBib2R5W10gX19jb3VudGVkX2J5KGJvZHlfbGVuKTsKIH07CiAKLXN0YXRpYyB2b2lkIHNtY19sbGNfZW5xdWV1ZShzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHVuaW9uIHNtY19sbGNfbXNnICpsbGMpOwomIzQzO3N0YXRpYyB2b2lkIHNtY19sbGNfZW5xdWV1ZShzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHVuaW9uIHNtY19sbGNfbXNnICpsbGMsCiYjNDM7CQkJICAgIHUzMiBieXRlX2xlbik7CiAKIHN0cnVjdCBzbWNfbGxjX3FlbnRyeSAqc21jX2xsY19mbG93X3FlbnRyeV9jbHIoc3RydWN0IHNtY19sbGNfZmxvdyAqZmxvdykKIHsKQEAgLTk5OCwxNSAmIzQzOzEwMTksMjAgQEAgc3RhdGljIGludCBzbWNfbGxjX2NsaV9jb25mX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLAogCiBzdGF0aWMgdm9pZCBzbWNfbGxjX3NhdmVfYWRkX2xpbmtfcmtleXMoc3RydWN0IHNtY19saW5rICpsaW5rLAogCQkJCQlzdHJ1Y3Qgc21jX2xpbmsgKmxpbmtfbmV3LAotCQkJCQl1OCAqbGxjX21zZykKJiM0MzsJCQkJCXN0cnVjdCBzbWNfbGxjX3FlbnRyeSAqcWVudHJ5KQogewomIzQzOwljb25zdCB1MzIgcnRfb2ZmID0gb2Zmc2V0b2Yoc3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rX3YyX2V4dCwgcnQpOwogCXN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua192Ml9leHQgKmV4dDsKIAlzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxnciA9IGxpbmstJmd0O2xncjsKIAlpbnQgbWF4LCBpOwogCi0JZXh0ID0gKHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua192Ml9leHQgKikobGxjX21zZyAmIzQzOwotCQkJCQkJICAgICBTTUNfV1JfVFhfU0laRSk7CiYjNDM7CS8qIHRoZSBya2V5IGNvdW50IGl0c2VsZiBpcyBvbmx5IHRoZXJlIGlmIGVub3VnaCBieXRlcyBhcnJpdmVkICovCiYjNDM7CWlmIChxZW50cnktJmd0O2JvZHlfbGVuICZsdDsgcnRfb2ZmKQomIzQzOwkJcmV0dXJuOwomIzQzOwlleHQgPSAoc3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rX3YyX2V4dCAqKXFlbnRyeS0mZ3Q7Ym9keTsKIAltYXggPSBtaW5fdCh1OCwgZXh0LSZndDtudW1fcmtleXMsIFNNQ19MTENfUktFWVNfUEVSX01TR19WMik7CiYjNDM7CW1heCA9IG1pbl90KHUzMiwgbWF4LCAocWVudHJ5LSZndDtib2R5X2xlbiAtIHJ0X29mZikgLwomIzQzOwkJCSAgICAgIHNpemVvZihleHQtJmd0O3J0WzBdKSk7CiAJZG93bl93cml0ZSgmYW1wO2xnci0mZ3Q7cm1ic19sb2NrKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgbWF4OyBpJiM0MzsmIzQzOykgewogCQlzbWNfcnRva2VuX3NldChsZ3IsIGxpbmstJmd0O2xpbmtfaWR4LCBsaW5rX25ldy0mZ3Q7bGlua19pZHgsCkBAIC0xMDk5LDkgJiM0MzsxMTI1LDcgQEAgaW50IHNtY19sbGNfY2xpX2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluaywgc3RydWN0IHNtY19sbGNfcWVudHJ5ICpxZW50cnkpCiAJaWYgKHJjKQogCQlnb3RvIG91dF9jbGVhcl9sbms7CiAJaWYgKGxnci0mZ3Q7c21jX3ZlcnNpb24gPT0gU01DX1YyKSB7Ci0JCXU4ICpsbGNfbXNnID0gc21jX2xpbmtfc2hhcmVkX3YyX3J4YnVmKGxpbmspID8KLQkJCSh1OCAqKWxnci0mZ3Q7d3JfcnhfYnVmX3YyIDogKHU4ICopbGxjOwotCQlzbWNfbGxjX3NhdmVfYWRkX2xpbmtfcmtleXMobGluaywgbG5rX25ldywgbGxjX21zZyk7CiYjNDM7CQlzbWNfbGxjX3NhdmVfYWRkX2xpbmtfcmtleXMobGluaywgbG5rX25ldywgcWVudHJ5KTsKIAl9IGVsc2UgewogCQlyYyA9IHNtY19sbGNfY2xpX3JrZXlfZXhjaGFuZ2UobGluaywgbG5rX25ldyk7CiAJCWlmIChyYykgewpAQCAtMTQ4MSw3ICYjNDM7MTUwNSw3IEBAIGludCBzbWNfbGxjX3Nydl9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssCiAJfQogCWFkZF9sbGMgPSAmYW1wO3FlbnRyeS0mZ3Q7bXNnLmFkZF9saW5rOwogCWlmIChhZGRfbGxjLSZndDtoZC5mbGFncyAmYW1wOyBTTUNfTExDX0ZMQUdfQUREX0xOS19SRUopIHsKLQkJc21jX2xsY19mbG93X3FlbnRyeV9kZWwoJmFtcDtsZ3ItJmd0O2xsY19mbG93X2xjbCk7CiYjNDM7CQlzbWNfbGxjX2Zsb3dfcWVudHJ5X2NscigmYW1wO2xnci0mZ3Q7bGxjX2Zsb3dfbGNsKTsKIAkJcmMgPSAtRU5PTElOSzsKIAkJZ290byBvdXRfZXJyOwogCX0KQEAgLTE0OTIsNyAmIzQzOzE1MTYsOCBAQCBpbnQgc21jX2xsY19zcnZfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLAogCQlsZ3JfbmV3X3QgPSBTTUNfTEdSX0FTWU1NRVRSSUNfUEVFUjsKIAl9CiAJc21jX2xsY19zYXZlX2FkZF9saW5rX2luZm8obGlua19uZXcsIGFkZF9sbGMpOwotCXNtY19sbGNfZmxvd19xZW50cnlfZGVsKCZhbXA7bGdyLSZndDtsbGNfZmxvd19sY2wpOwomIzQzOwkvKiBhZGRfbGxjIHN0aWxsIHBvaW50cyBpbnRvIHFlbnRyeSwgc28gb25seSBkZXRhY2ggaXQgaGVyZSAqLwomIzQzOwlzbWNfbGxjX2Zsb3dfcWVudHJ5X2NscigmYW1wO2xnci0mZ3Q7bGxjX2Zsb3dfbGNsKTsKIAogCXJjID0gc21jX2liX3JlYWR5X2xpbmsobGlua19uZXcpOwogCWlmIChyYykKQEAgLTE1MDEsOSAmIzQzOzE1MjYsNyBAQCBpbnQgc21jX2xsY19zcnZfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLAogCWlmIChyYykKIAkJZ290byBvdXRfZXJyOwogCWlmIChsZ3ItJmd0O3NtY192ZXJzaW9uID09IFNNQ19WMikgewotCQl1OCAqbGxjX21zZyA9IHNtY19saW5rX3NoYXJlZF92Ml9yeGJ1ZihsaW5rKSA/Ci0JCQkodTggKilsZ3ItJmd0O3dyX3J4X2J1Zl92MiA6ICh1OCAqKWFkZF9sbGM7Ci0JCXNtY19sbGNfc2F2ZV9hZGRfbGlua19ya2V5cyhsaW5rLCBsaW5rX25ldywgbGxjX21zZyk7CiYjNDM7CQlzbWNfbGxjX3NhdmVfYWRkX2xpbmtfcmtleXMobGluaywgbGlua19uZXcsIHFlbnRyeSk7CiAJfSBlbHNlIHsKIAkJcmMgPSBzbWNfbGxjX3Nydl9ya2V5X2V4Y2hhbmdlKGxpbmssIGxpbmtfbmV3KTsKIAkJaWYgKHJjKQpAQCAtMTUxMiwxNCAmIzQzOzE1MzUsMTQgQEAgaW50IHNtY19sbGNfc3J2X2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluaywKIAlyYyA9IHNtY19sbGNfc3J2X2NvbmZfbGluayhsaW5rLCBsaW5rX25ldywgbGdyX25ld190KTsKIAlpZiAocmMpCiAJCWdvdG8gb3V0X2VycjsKLQlrZnJlZShpbmkpOwotCXJldHVybiAwOwomIzQzOwlnb3RvIG91dDsKIG91dF9lcnI6CiAJaWYgKGxpbmtfbmV3KSB7CiAJCWxpbmtfbmV3LSZndDtzdGF0ZSA9IFNNQ19MTktfSU5BQ1RJVkU7CiAJCXNtY3JfbGlua19jbGVhcihsaW5rX25ldywgZmFsc2UpOwogCX0KIG91dDoKJiM0MzsJa2ZyZWUocWVudHJ5KTsKIAlrZnJlZShpbmkpOwogCWlmIChzZW5kX3JlcV9hZGRfbGlua19yZXNwKQogCQlzbWNfbGxjX3NlbmRfcmVxX2FkZF9saW5rX3Jlc3BvbnNlKHJlcV9xZW50cnkpOwpAQCAtMTU1Miw3ICYjNDM7MTU3NSw4IEBAIHZvaWQgc21jX2xsY19hZGRfbGlua19sb2NhbChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmspCiAJYWRkX2xsYy5oZC5jb21tb24ubGxjX3R5cGUgPSBTTUNfTExDX0FERF9MSU5LOwogCXNtY19sbGNfaW5pdF9tc2dfaGRyKCZhbXA7YWRkX2xsYy5oZCwgbGluay0mZ3Q7bGdyLCBzaXplb2YoYWRkX2xsYykpOwogCS8qIG5vIGRldiBhbmQgcG9ydCBuZWVkZWQgKi8KLQlzbWNfbGxjX2VucXVldWUobGluaywgKHVuaW9uIHNtY19sbGNfbXNnICopJmFtcDthZGRfbGxjKTsKJiM0MzsJc21jX2xsY19lbnF1ZXVlKGxpbmssICh1bmlvbiBzbWNfbGxjX21zZyAqKSZhbXA7YWRkX2xsYywKJiM0MzsJCQlzaXplb2YodW5pb24gc21jX2xsY19tc2cpKTsKIH0KIAogLyogd29ya2VyIHRvIHByb2Nlc3MgYW4gYWRkIGxpbmsgbWVzc2FnZSAqLwpAQCAtMTU4OCw3ICYjNDM7MTYxMiw4IEBAIHZvaWQgc21jX2xsY19zcnZfZGVsZXRlX2xpbmtfbG9jYWwoc3RydWN0IHNtY19saW5rICpsaW5rLCB1OCBkZWxfbGlua19pZCkKIAlkZWxfbGxjLmxpbmtfbnVtID0gZGVsX2xpbmtfaWQ7CiAJZGVsX2xsYy5yZWFzb24gPSBodG9ubChTTUNfTExDX0RFTF9MT1NUX1BBVEgpOwogCWRlbF9sbGMuaGQuZmxhZ3MgfD0gU01DX0xMQ19GTEFHX0RFTF9MSU5LX09SREVSTFk7Ci0Jc21jX2xsY19lbnF1ZXVlKGxpbmssICh1bmlvbiBzbWNfbGxjX21zZyAqKSZhbXA7ZGVsX2xsYyk7CiYjNDM7CXNtY19sbGNfZW5xdWV1ZShsaW5rLCAodW5pb24gc21jX2xsY19tc2cgKikmYW1wO2RlbF9sbGMsCiYjNDM7CQkJc2l6ZW9mKHVuaW9uIHNtY19sbGNfbXNnKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNtY19sbGNfcHJvY2Vzc19jbGlfZGVsZXRlX2xpbmsoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IpCkBAIC0xODEwLDE5ICYjNDM7MTgzNSwyOCBAQCBzdGF0aWMgdm9pZCBzbWNfbGxjX3JtdF9kZWxldGVfcmtleShzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncikKIAlsaW5rID0gcWVudHJ5LSZndDtsaW5rOwogCiAJaWYgKGxnci0mZ3Q7c21jX3ZlcnNpb24gPT0gU01DX1YyKSB7Ci0JCXN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92MiAqbGxjdjI7CiYjNDM7CQlzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXlfdjJfaW5saW5lICpsbGN2MjsKIAotCQlpZiAoc21jX2xpbmtfc2hhcmVkX3YyX3J4YnVmKGxpbmspKSB7Ci0JCQltZW1jcHkobGdyLSZndDt3cl9yeF9idWZfdjIsIGxsYywgc2l6ZW9mKCpsbGMpKTsKLQkJCWxsY3YyID0gKHN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92MiAqKWxnci0mZ3Q7d3JfcnhfYnVmX3YyOwotCQl9IGVsc2UgewotCQkJbGxjdjIgPSAoc3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyICopbGxjOwotCQl9CiYjNDM7CQkvKiBUaGUgbGVhZGluZyBTTUNfTExDX0RFTF9SS0VZX1YyX0lOTElORSBya2V5cyBhcmUgZGVjbGFyZWQgaW4KJiM0MzsJCSAqIHRoZSBtZXNzYWdlIGl0c2VsZiwgYW55IGZ1cnRoZXIgb25lcyB3ZXJlIHJlY2VpdmVkIGludG8KJiM0MzsJCSAqIHFlbnRyeS0mZ3Q7Ym9keS4KJiM0MzsJCSAqLwomIzQzOwkJbGxjdjIgPSAmYW1wO3FlbnRyeS0mZ3Q7bXNnLmRlbGV0ZV9ya2V5X3YyOwogCQlsbGN2Mi0mZ3Q7bnVtX2ludmFsX3JrZXlzID0gMDsKIAogCQltYXggPSBtaW5fdCh1OCwgbGxjdjItJmd0O251bV9ya2V5cywgU01DX0xMQ19SS0VZU19QRVJfTVNHX1YyKTsKJiM0MzsJCW1heCA9IG1pbl90KHUzMiwgbWF4LCBTTUNfTExDX0RFTF9SS0VZX1YyX0lOTElORSAmIzQzOwomIzQzOwkJCQkgICAgICBxZW50cnktJmd0O2JvZHlfbGVuIC8gc2l6ZW9mKF9fYmUzMikpOwogCQlmb3IgKGkgPSAwOyBpICZsdDsgbWF4OyBpJiM0MzsmIzQzOykgewotCQkJaWYgKHNtY19ydG9rZW5fZGVsZXRlKGxpbmssIGxsY3YyLSZndDtya2V5W2ldKSkKJiM0MzsJCQlfX2JlMzIgcmtleTsKJiM0MzsKJiM0MzsJCQlpZiAoaSAmbHQ7IFNNQ19MTENfREVMX1JLRVlfVjJfSU5MSU5FKQomIzQzOwkJCQlya2V5ID0gbGxjdjItJmd0O3JrZXlbaV07CiYjNDM7CQkJZWxzZQomIzQzOwkJCQltZW1jcHkoJmFtcDtya2V5LCBxZW50cnktJmd0O2JvZHkgJiM0MzsKJiM0MzsJCQkJCSAgICAgIChpIC0gU01DX0xMQ19ERUxfUktFWV9WMl9JTkxJTkUpICoKJiM0MzsJCQkJCSAgICAgIHNpemVvZihya2V5KSwgc2l6ZW9mKHJrZXkpKTsKJiM0MzsJCQlpZiAoc21jX3J0b2tlbl9kZWxldGUobGluaywgcmtleSkpCiAJCQkJbGxjdjItJmd0O251bV9pbnZhbF9ya2V5cyYjNDM7JiM0Mzs7CiAJCX0KIAkJbWVtc2V0KCZhbXA7bGxjLSZndDtya2V5WzBdLCAwLCBzaXplb2YobGxjLSZndDtya2V5KSk7CkBAIC0yMDYzLDE4ICYjNDM7MjA5Nyw1MiBAQCBzdGF0aWMgdm9pZCBzbWNfbGxjX3J4X3Jlc3BvbnNlKHN0cnVjdCBzbWNfbGluayAqbGluaywKIAl3YWtlX3VwKCZhbXA7bGluay0mZ3Q7bGdyLSZndDtsbGNfbXNnX3dhaXRlcik7CiB9CiAKLXN0YXRpYyB2b2lkIHNtY19sbGNfZW5xdWV1ZShzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHVuaW9uIHNtY19sbGNfbXNnICpsbGMpCiYjNDM7LyogdGhlIGxvbmdlc3QgdGFpbCBlaXRoZXIgcmVhZGVyIG9mIHFlbnRyeS0mZ3Q7Ym9keSBjYW4gdXNlICovCiYjNDM7c3RhdGljIHUzMiBzbWNfbGxjX21heF9ib2R5X2xlbih1bmlvbiBzbWNfbGxjX21zZyAqbGxjKQomIzQzO3sKJiM0MzsJc3dpdGNoIChsbGMtJmd0O3Jhdy5oZHIuY29tbW9uLmxsY190eXBlKSB7CiYjNDM7CWNhc2UgU01DX0xMQ19BRERfTElOSzoKJiM0MzsJCXJldHVybiBvZmZzZXRvZihzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfdjJfZXh0LCBydCkgJiM0MzsKJiM0MzsJCSAgICAgICBTTUNfTExDX1JLRVlTX1BFUl9NU0dfVjIgKgomIzQzOwkJICAgICAgIHNpemVvZihzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfY29udF9ydCk7CiYjNDM7CWNhc2UgU01DX0xMQ19ERUxFVEVfUktFWToKJiM0MzsJCXJldHVybiAoU01DX0xMQ19SS0VZU19QRVJfTVNHX1YyIC0KJiM0MzsJCQlTTUNfTExDX0RFTF9SS0VZX1YyX0lOTElORSkgKiBzaXplb2YoX19iZTMyKTsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHNtY19sbGNfZW5xdWV1ZShzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHVuaW9uIHNtY19sbGNfbXNnICpsbGMsCiYjNDM7CQkJICAgIHUzMiBieXRlX2xlbikKIHsKIAlzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxnciA9IGxpbmstJmd0O2xncjsKIAlzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnFlbnRyeTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwl1MTYgYm9keV9sZW4gPSAwOwomIzQzOwomIzQzOwkvKiBWMiBtZXNzYWdlcyBjYW4gYmUgbG9uZ2VyIHRoYW4gdGhlIGlubGluZSB1bmlvbiBzbWNfbGxjX21zZy4gQ2FycnkKJiM0MzsJICogdGhlIHJlbWFpbmRlciBpbiB0aGUgcWVudHJ5IGl0c2VsZiwgc28gdGhhdCBpdHMgbGlmZXRpbWUgYW5kIGl0cwomIzQzOwkgKiBsZW5ndGggbWF0Y2ggdGhlIG1lc3NhZ2UgdGhlIHBlZXIgYWN0dWFsbHkgc2VudC4KJiM0MzsJICovCiYjNDM7CWlmIChsZ3ItJmd0O3NtY192ZXJzaW9uID09IFNNQ19WMiAmYW1wOyZhbXA7IGJ5dGVfbGVuICZndDsgU01DX1dSX1RYX1NJWkUpCiYjNDM7CQlib2R5X2xlbiA9IG1pbl90KHUzMiwgYnl0ZV9sZW4sIFNNQ19XUl9CVUZfVjJfU0laRSkgLQomIzQzOwkJCSAgIFNNQ19XUl9UWF9TSVpFOwomIzQzOwlib2R5X2xlbiA9IG1pbl90KHUzMiwgYm9keV9sZW4sIHNtY19sbGNfbWF4X2JvZHlfbGVuKGxsYykpOwogCi0JcWVudHJ5ID0ga21hbGxvY19vYmooKnFlbnRyeSwgR0ZQX0FUT01JQyk7CiYjNDM7CXFlbnRyeSA9IGttYWxsb2NfZmxleCgqcWVudHJ5LCBib2R5LCBib2R5X2xlbiwgR0ZQX0FUT01JQyk7CiAJaWYgKCFxZW50cnkpCiAJCXJldHVybjsKJiM0MzsJcWVudHJ5LSZndDtib2R5X2xlbiA9IGJvZHlfbGVuOwogCXFlbnRyeS0mZ3Q7bGluayA9IGxpbms7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtxZW50cnktJmd0O2xpc3QpOwogCW1lbWNweSgmYW1wO3FlbnRyeS0mZ3Q7bXNnLCBsbGMsIHNpemVvZih1bmlvbiBzbWNfbGxjX21zZykpOwomIzQzOwlpZiAoYm9keV9sZW4pIHsKJiM0MzsJCXU4ICpzcmMgPSBzbWNfbGlua19zaGFyZWRfdjJfcnhidWYobGluaykgPwomIzQzOwkJCSh1OCAqKWxnci0mZ3Q7d3JfcnhfYnVmX3YyIDogKHU4ICopbGxjOwomIzQzOwomIzQzOwkJbWVtY3B5KHFlbnRyeS0mZ3Q7Ym9keSwgc3JjICYjNDM7IFNNQ19XUl9UWF9TSVpFLCBib2R5X2xlbik7CiYjNDM7CX0KIAogCS8qIHByb2Nlc3MgcmVzcG9uc2VzIGltbWVkaWF0ZWx5ICovCiAJaWYgKChsbGMtJmd0O3Jhdy5oZHIuZmxhZ3MgJmFtcDsgU01DX0xMQ19GTEFHX1JFU1ApICZhbXA7JmFtcDsKQEAgLTIxMDYsNyAmIzQzOzIxNzQsNyBAQCBzdGF0aWMgdm9pZCBzbWNfbGxjX3J4X2hhbmRsZXIoc3RydWN0IGliX3djICp3Yywgdm9pZCAqYnVmKQogCQkJcmV0dXJuOyAvKiBpbnZhbGlkIG1lc3NhZ2UgKi8KIAl9CiAKLQlzbWNfbGxjX2VucXVldWUobGluaywgbGxjKTsKJiM0MzsJc21jX2xsY19lbnF1ZXVlKGxpbmssIGxsYywgd2MtJmd0O2J5dGVfbGVuKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqIHdvcmtlciwgdXRpbHMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfd3IuYyBiL25ldC9zbWMvc21jX3dyLmMKaW5kZXggNTljOTJiNDY5NDVjNS4uOTdiYTQ2ODkzYjE3ZiAxMDA2NDQKLS0tIGEvbmV0L3NtYy9zbWNfd3IuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL3NtY193ci5jCkBAIC02MDIsOSAmIzQzOzYwMiw5IEBAIHN0YXRpYyB2b2lkIHNtY193cl9pbml0X3NnZShzdHJ1Y3Qgc21jX2xpbmsgKmxuaykKIAogCS8qIFdpdGggU01DLVJ2MiB0aGVyZSBjYW4gYmUgbWVzc2FnZXMgbGFyZ2VyIHRoYW4gU01DX1dSX1RYX1NJWkUuCiAJICogRWFjaCBpYl9yZWN2X3dyIGdldHMgMiBzZ2VzLCB0aGUgc2Vjb25kIG9uZSBpcyBhIHNwaWxsb3ZlciBidWZmZXIKLQkgKiBhbmQgdGhlIHNhbWUgYnVmZmVyIGZvciBhbGwgc2dlcy4gV2hlbiBhIGxhcmdlciBtZXNzYWdlIGFycml2ZWQgdGhlbgotCSAqIHRoZSBjb250ZW50IG9mIHRoZSBmaXJzdCBzbWFsbCBzZ2UgaXMgY29waWVkIHRvIHRoZSBiZWdpbm5pbmcgb2YKLQkgKiB0aGUgbGFyZ2VyIHNwaWxsb3ZlciBidWZmZXIsIGFsbG93aW5nIGVhc3kgZGF0YSBtYXBwaW5nLgomIzQzOwkgKiBhbmQgdGhlIHNhbWUgYnVmZmVyIGZvciBhbGwgc2dlcy4gVGhlIHNwaWxsb3ZlciBzZ2Ugc3RhcnRzIGF0CiYjNDM7CSAqIFNNQ19XUl9UWF9TSVpFLCBzbyB0aGUgbGVhZGluZyBieXRlcyBvZiB0aGF0IGJ1ZmZlciBhcmUgbmV2ZXIKJiM0MzsJICogd3JpdHRlbi4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpICZsdDsgbG5rLSZndDt3cl9yeF9jbnQ7IGkmIzQzOyYjNDM7KSB7CiAJCWludCB4ID0gaSAqIGxuay0mZ3Q7d3Jfcnhfc2dlX2NudDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1MTEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNzk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBKdXN0aWZpY2F0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggbmVlZHMgYSBjbG9zZXIgbG9vayB0byBzZWUgaWYgaXQgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGUgY2hhbmdlcyBhcmUgaW4gYG5ldC9zbWMvc21jX2xsYy5jYCBhbmQgYG5ldC9zbWMvc21jX3dyLmNgLCBhbmQgdGhleSYjMzk7cmUgZm9jdXNlZCBvbiBob3cgU01DIExMQyBtZXNzYWdlcyBhcmUgaGFuZGxlZCwgZXNwZWNpYWxseSBmb3IgU01DLVJ2Miwgd2hlcmUgbWVzc2FnZSBzaXplcyBjYW4gYmUgbGFyZ2VyIHRoYW4gd2hhdCYjMzk7cyBub3JtYWxseSBleHBlY3RlZCAoYFNNQ19XUl9UWF9TSVpFYCkuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gc2NydXRpbml6ZSBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZSBrZXkgYXJlYSBpcyBob3cgZGF0YSBpcyByZWNlaXZlZCBmcm9tIHRoZSBuZXR3b3JrIGFuZCBzdG9yZWQgd2l0aGluIHRoZSBgcWVudHJ5YCBzdHJ1Y3R1cmUuIGBzbWNfbGxjX2VucXVldWVgIHVzZXMgYGttYWxsb2NfZmxleGAuIE5vdywgYGttYWxsb2NfZmxleGAgZG9lcyAqbm90KiB6ZXJvIHRoZSBtZW1vcnksIGl0IGFsbG9jYXRlcyBtZW1vcnkgd2l0aCBgR0ZQX0FUT01JQ2Agd2l0aG91dCBgX19HRlBfWkVST2AuIEhvd2V2ZXIsIGl0ICpzZWVtcyogbGlrZSBldmVyeXRoaW5nIHdpdGhpbiBgcWVudHJ5YCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBvciBjb3BpZWQgZnJvbSBhbiBlc3RhYmxpc2hlZCBzb3VyY2U6CiogICBgYm9keV9sZW5gIGlzIGFzc2lnbmVkLgoqICAgYGxpbmtgIGlzIGFzc2lnbmVkLgoqICAgYGxpc3RgIGlzIGluaXRpYWxpemVkLgoqICAgYG1zZ2AgaXMgY29waWVkIGZyb20gYGxsY2AKKiAgIGBib2R5YCBpcyBjb3BpZWQgZnJvbSBgc3JjICYjNDM7IFNNQ19XUl9UWF9TSVpFYCBmb3IgYGJvZHlfbGVuYCBieXRlcy4KCkkgbmVlZCB0byBjb25maXJtIGlmIHRoYXQmIzM5O3MgYWNjdXJhdGUuCgpOb3csIHBhZGRpbmcgaW4gYHN0cnVjdCBzbWNfbGxjX3FlbnRyeWAgY291bGQgYWxzbyBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIExldCYjMzk7cyBicmVhayBpdCBkb3duOiBgbGlzdGAgaXMgMTYgYnl0ZXMuIGBsaW5rYCBpcyA4IGJ5dGVzLiBgYm9keV9sZW5gIGlzIDIgYnl0ZXMuIFNvIHRoZXJlIHdvdWxkIGJlIDYgYnl0ZXMgb2YgcGFkZGluZyBiZWZvcmUgYG1zZ2AgKGFzc3VtaW5nIGFuIDgtYnl0ZSBhbGlnbm1lbnQgaXMgcmVxdWlyZWQuIEhvd2V2ZXIsIHRoZXJlIG1pZ2h0IGJlIHNtYWxsZXIgYWxpZ25tZW50IHJlcXVpcmVtZW50cy4pIEkgc2hvdWxkIGNoZWNrIHRoZSBhbGlnbm1lbnQgb2YgYHVuaW9uIHNtY19sbGNfbXNnYCB0byBtYWtlIHN1cmUgdGhlcmUmIzM5O3Mgbm8gc3VidGxlIGlzc3VlIHRoZXJlLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgdXAgdGhlIGNvbnRlbnRzIG9mIGB1bmlvbiBzbWNfbGxjX21zZ2AuCgpEb2VzIHRoaXMgc3RydWN0IGV2ZXIgbGVhdmUgdGhlIGtlcm5lbD8gSXQgbG9va3MgbGlrZSBgcWVudHJ5YCBpcyBpbnRlcm5hbCBhbmQgdXNlZCB0byBxdWV1ZSBtZXNzYWdlcyBmb3Igd29ya2VyIHRocmVhZHMuIEl0JiMzOTtzIGFsbG9jYXRlZCwgcG9wdWxhdGVkLCBwcm9jZXNzZWQsIGFuZCB0aGVuIGZyZWVkLiBGb3IgZXhhbXBsZSwgYHNtY19sbGNfc3J2X2FkZF9saW5rYCBmcmVlcyB0aGUgYHFlbnRyeWAuCgpJcyB0aGUgZGF0YSBldmVyIGNvcGllZCBiYWNrIG91dD8gTm8sIGl0IGRvZXNuJiMzOTt0IGxvb2sgbGlrZSBgcWVudHJ5YCBpdHNlbGYgaXMgc2VudCBvdmVyIHRoZSBuZXR3b3JrLiBJbiBgc21jX2xsY19zcnZfYWRkX2xpbmtgLCBpdCBsb29rcyBsaWtlIGZpZWxkcyBvZiBgcWVudHJ5LSZndDttc2dgIGFyZSBhY2Nlc3NlZCwgYnV0IHRoZSBmdWxsIHN0cnVjdHVyZSBpc24mIzM5O3QuCgpOb3csIGEgcG90ZW50aWFsIGlzc3VlIGFyaXNlcyB3aXRoIGBzbWNfbGxjX2FkZF9saW5rX2xvY2FsYC4gQSBsb2NhbCB2YXJpYWJsZSBgYWRkX2xsY2AgaXMgY3JlYXRlZCwgYW5kIHRoZW4gcGFzc2VkIHRvIGBzbWNfbGxjX2VucXVldWVgLiBUaGVyZSYjMzk7cyBhIGBtZW1jcHlgIGZyb20gdGhlIHN0YWNrIHZhcmlhYmxlIGBhZGRfbGxjYCB0byBgcWVudHJ5LSZndDttc2dgIHVzaW5nIGBzaXplb2YodW5pb24gc21jX2xsY19tc2cpYC4gSWYgYGFkZF9sbGNgIGlzIHNtYWxsZXIsIHRoZW4gdGhpcyB3b3VsZCByZXN1bHQgaW4gYW4gb3V0LW9mLWJvdW5kcyByZWFkISBJIG5lZWQgdG8gdmVyaWZ5IHNpemVzIG9mIGBzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtgIGFuZCBgdW5pb24gc21jX2xsY19tc2dgLiBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIHNlYXJjaCBmb3IgYHNtY19sbGNfbXNnX2FkZF9saW5rYCBhbmQgYHVuaW9uIHNtY19sbGNfbXNnYCBhbmQgdGhlaXIgZGVmaW5pdGlvbnMgaW4gdGhlIGNvZGUuIFRoaXMgaXMgdGhlIGNydWNpYWwgcG9pbnQgZm9yIGEgcG90ZW50aWFsIEtNU0FOIGlzc3VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmsgXFx7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfbGxjLmM9NDc9c3RydWN0IHNtY19sbGNfbXNnX2NvbmZpcm1fbGluayB7XHQvKiB0eXBlIDB4MDEgKi9cbi0tXG5uZXQvc21jL3NtY19sbGMuYy02MS1cbm5ldC9zbWMvc21jX2xsYy5jOjYyOnN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGluayB7XHRcdC8qIHR5cGUgMHgwMiAqL1xubmV0L3NtYy9zbWNfbGxjLmMtNjMtXHRzdHJ1Y3Qgc21jX2xsY19oZHIgaGQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyMzMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIGBzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtgKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua2AuIFRpbWUgdG8gZGlnIGludG8gdGhlIGRldGFpbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb21wbGV0ZSBkZWZpbml0aW9uLCBpbnNpZGUgYW5kIG91dC4gSXQmIzM5O3Mgbm90IGVub3VnaCB0byBoYXZlIGEgZ2VuZXJhbCBpZGVhOyBJIG5lZWQgdGhlIGZ1bGwgcGljdHVyZSwgYWxsIHRoZSBtZW1iZXIgdmFyaWFibGVzLCBkYXRhIHR5cGVzLCBhbmQgYW55IGFzc29jaWF0ZWQgY29tbWVudHMuIEkgbmVlZCB0byBzZWUgZXhhY3RseSAqaG93KiB0aGlzIHN0cnVjdCBpcyBkZWZpbmVkLiBXaGF0IGFyZSBpdHMgY29tcG9uZW50cz8gV2hhdCBpbmZvcm1hdGlvbiBkb2VzIGl0IGNhcnJ5PyBJcyB0aGVyZSBhbnl0aGluZyBzdWJ0bGUgb3Igbm9uLW9idmlvdXMgdGhhdCBJIG1pZ2h0IG1pc3MgaWYgSSBqdXN0IHNraW0gdGhlIHN1cmZhY2U/IFRoaXMgdW5kZXJzdGFuZGluZyBpcyBmb3VuZGF0aW9uYWwgdG8gd29ya2luZyB3aXRoIHRoZSBtZXNzYWdlIGFuZCBrbm93aW5nIHdoYXQgdGhlIHN0cnVjdCBpcyBkZXNpZ25lZCB0byBkby4gTXkgam9iIGlzIHRvIGtub3cgZXZlcnkgbm9vayBhbmQgY3Jhbm55IG9mIHRoaXMgc3RydWN0LCBJJiMzOTttIG5vdCBnb2luZyB0byBsZWF2ZSBpdCB1cCB0byBhc3N1bXB0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGluayBcXHsuKlxcfSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUwMwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFNNQyBMTEMgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBtdWx0aS1saW5lIGNvbnRleHQuIExldCYjMzk7cyBnZXQgc3RyYWlnaHQgdG8gdGhlIHBvaW50OiBJJiMzOTttIHB1bGxpbmcgdXAgYG5ldC9zbWMvc21jX2xsYy5jYCDigJMgc3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXJvdW5kIGxpbmUgNjIuIEkmIzM5O20gcHJvYmFibHkgYWZ0ZXIgc29tZXRoaW5nIHNwZWNpZmljIGluIHRoZSBMb3dlciBMYXllciBDb250cm9sIChMTEMpIG1vZHVsZTsgbGlrZWx5IGRlYWxpbmcgd2l0aCBob3cgU01DIGhhbmRsZXMgbG93ZXItbGV2ZWwgbGluayBjb250cm9sIHdpdGhpbiB0aGUgbmV0d29yayBzdGFjay4gSSBhbnRpY2lwYXRlIHRoZXJlIG1pZ2h0IGJlIHNvbWUgc3VidGxldHkgdGhlcmUsIG9yIEkmIzM5O3ZlIGhhZCBhIHJlY2VudCBkaXNjdXNzaW9uIGFuZCBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoYXQgcGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc21jL3NtY19sbGMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNTA6XHRcdHU4IHNlbmRlcl9naWRbU01DX0dJRF9TSVpFXTtcbiAgNTE6XHRcdHU4IHNlbmRlcl9xcF9udW1bM107XG4gIDUyOlx0XHR1OCBsaW5rX251bTtcbiAgNTM6XHRcdHU4IGxpbmtfdWlkW1NNQ19MR1JfSURfU0laRV07XG4gIDU0Olx0XHR1OCBtYXhfbGlua3M7XG4gIDU1Olx0XHR1OCBtYXhfY29ubnM7XG4gIDU2Olx0XHR1OCByZXNlcnZlZFs4XTtcbiAgNTc6XHR9O1xuICA1ODpcdFxuICA1OTpcdCNkZWZpbmUgU01DX0xMQ19GTEFHX0FERF9MTktfUkVKXHQweDQwXG4gIDYwOlx0I2RlZmluZSBTTUNfTExDX1JFSl9SU05fTk9fQUxUX1BBVEhcdDFcbiAgNjE6XHRcbiAgNjI6XHRzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmsge1x0XHQvKiB0eXBlIDB4MDIgKi9cbiAgNjM6XHRcdHN0cnVjdCBzbWNfbGxjX2hkciBoZDtcbiAgNjQ6XHRcdHU4IHNlbmRlcl9tYWNbRVRIX0FMRU5dO1xuICA2NTpcdFx0dTggcmVzZXJ2ZWQyWzJdO1xuICA2NjpcdFx0dTggc2VuZGVyX2dpZFtTTUNfR0lEX1NJWkVdO1xuICA2NzpcdFx0dTggc2VuZGVyX3FwX251bVszXTtcbiAgNjg6XHRcdHU4IGxpbmtfbnVtO1xuICA2OTpcdCNpZiBkZWZpbmVkKF9fQklHX0VORElBTl9CSVRGSUVMRClcbiAgNzA6XHRcdHU4IHJlc2VydmVkMyA6IDQsXG4gIDcxOlx0XHQgICBxcF9tdHUgICA6IDQ7XG4gIDcyOlx0I2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpXG4gIDczOlx0XHR1OCBxcF9tdHUgICA6IDQsXG4gIDc0Olx0XHQgICByZXNlcnZlZDMgOiA0O1xuICA3NTpcdCNlbmRpZlxuICA3NjpcdFx0dTggaW5pdGlhbF9wc25bM107XG4gIDc3Olx0XHR1OCByZXNlcnZlZFs4XTtcbiAgNzg6XHR9O1xuICA3OTpcdFxuICA4MDpcdHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua19jb250X3J0IHtcbiAgODE6XHRcdF9fYmUzMiBybWJfa2V5O1xuICA4MjpcdFx0X19iZTMyIHJtYl9rZXlfbmV3O1xuICA4MzpcdFx0X19iZTY0IHJtYl92YWRkcl9uZXc7XG4gIDg0Olx0fTtcbiAgODU6XHRcbiAgODY6XHRzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfdjJfZXh0IHtcbiAgODc6XHQjaWYgZGVmaW5lZChfX0JJR19FTkRJQU5fQklURklFTEQpXG4gIDg4Olx0XHR1OCB2Ml9kaXJlY3QgOiAxLFxuICA4OTpcdFx0ICAgcmVzZXJ2ZWQgIDogNztcbiAgOTA6XHQjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRClcbiAgOTE6XHRcdHU4IHJlc2VydmVkICA6IDcsXG4gIDkyOlx0XHQgICB2Ml9kaXJlY3QgOiAxO1xuICA5MzpcdCNlbmRpZlxuICA5NDpcdFx0dTggcmVzZXJ2ZWQyO1xuICA5NTpcdFx0dTggY2xpZW50X3RhcmdldF9naWRbU01DX0dJRF9TSVpFXTtcbiAgOTY6XHRcdHU4IHJlc2VydmVkM1s4XTtcbiAgOTc6XHRcdHUxNiBudW1fcmtleXM7XG4gIDk4Olx0XHRzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfY29udF9ydCBydFtdO1xuICA5OTpcdH0gX19wYWNrZWQ7XHRcdC8qIGZvcm1hdCBkZWZpbmVkIGluXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDg4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgYHVuaW9uIHNtY19sbGNfbXNnYCBTdHJ1Y3R1cmUqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYHVuaW9uIHNtY19sbGNfbXNnYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdGhpbmsgYWJvdXQgdGhlIHR5cGljYWwgdXNlLWNhc2VzIHRoaXMga2luZCBvZiBzdHJ1Y3R1cmUgc3VnZ2VzdHMuIEl0JiMzOTtzIGEgdW5pb24sIHdoaWNoIHNjcmVhbXMgJiMzNDttZW1vcnkgZWZmaWNpZW5jeSYjMzQ7IGFuZCAmIzM0O2FsdGVybmF0aXZlIGludGVycHJldGF0aW9ucyBvZiB0aGUgc2FtZSBtZW1vcnkgbG9jYXRpb24uJiMzNDsgSW4gYSBTeXN0ZW0gTWFuYWdlbWVudCBDb250cm9sbGVyIChTTUMpIG9yIExvdy1MZXZlbCBMaW5rIENvbnRyb2xsZXIgKExMQykgY29udGV4dCwgSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBkaWZmZXJlbnQgbWVzc2FnZSB0eXBlcyB0aGF0IG1pZ2h0IHNoYXJlIHNvbWUgY29tbW9uIGhlYWRlciBpbmZvcm1hdGlvbiwgYnV0IGhhdmUgZGlzdGluY3QgZGF0YSBwYXlsb2FkcyBkZXBlbmRpbmcgb24gdGhlIHNwZWNpZmljIGNvbW1hbmQgb3IgZXZlbnQuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSBkaWZmZXJlbnQgbWVtYmVycyByZXByZXNlbnQuIElzIGl0IGEgdW5pb24gb2YgZGF0YSBzdHJ1Y3R1cmVzLCBvZiBwcmltaXRpdmUgdHlwZXMsIG9yIGEgY29tYmluYXRpb24/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIHNpemU/IFRoZSBzaXplIHdpbGwgZGljdGF0ZSBob3cgbXVjaCBpbmZvcm1hdGlvbiBjYW4gYmUgY29udmV5ZWQgaW4gYSBzaW5nbGUgbWVzc2FnZS4gQXJlIHRoZXJlIGFsaWdubWVudCBjb25zaWRlcmF0aW9ucyBoZXJlLCB0b28/IEkmIzM5O2xsIHByb2JhYmx5IG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBwbGF0Zm9ybSBhbmQgdGhlIGNvbW11bmljYXRpb24gcHJvdG9jb2wgdG8gdHJ1bHkgZ3Jhc3AgdGhlIHN0cnVjdHVyZSYjMzk7cyByb2xlLgoKSSYjMzk7bSBzdGFydGluZyB0byBmb3JtdWxhdGUgcXVlc3Rpb25zIGluIG15IGhlYWQ6IFdoYXQgaXMgdGhlIG92ZXJhbGwgbWVzc2FnZSBmb3JtYXQ/IFdoYXQgYXJlIHRoZSB2YWxpZCBtZXNzYWdlIHR5cGVzPyBIb3cgYXJlIHRoZXkgZGlzdGluZ3Vpc2hlZD8gSXMgdGhlcmUgYSB0eXBlIGZpZWxkLCBvciBkbyB3ZSByZWx5IG9uIGltcGxpY2l0IGtub3dsZWRnZSBvZiB0aGUgc2VuZGluZy9yZWNlaXZpbmcgbW9kdWxlcz8gSG93IGRvZXMgdGhpcyBzdHJ1Y3R1cmUgaW50ZXJhY3Qgd2l0aCB0aGUgcmVzdCBvZiB0aGUgU01DL0xMQyBpbnRlcmZhY2UsIHN1Y2ggYXMgdGhlIGhhcmR3YXJlIHJlZ2lzdGVycz8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBhcmVhcyBmb3IgcG9pbnRlciBhbGlhc2luZyBjb25mbGljdHM/IEFyZSB0aGVyZSBhbnkgY29tcGlsZXIgb3B0aW1pemF0aW9ucyB0aGF0IG1pZ2h0IGludGVyZmVyZSB3aXRoIGludGVuZGVkIHVzYWdlPyBXaGF0IGlzIHRoZSByYXRpb25hbGUgYmVoaW5kIHNlbGVjdGluZyBhIHVuaW9uIGZvciB0aGlzIG1lc3NhZ2Ugc3RydWN0dXJlPyBJdCBpbXBsaWVzIHRoZXJlIHdpbGwgYmUgYSBjb21tb24gaGVhZGVyIHdpdGggdHlwZSBpbmZvcm1hdGlvbiwgYW5kIHRoZW4gZWFjaCBtZXNzYWdlIHR5cGUgY2FuIGhhdmUgdGhlaXIgb3duIHNldCBvZiBkYXRhIGZpZWxkcy4gSG93IGRvZXMgdGhpcyBjb21wYXJlIHdpdGggb3RoZXIgYXBwcm9hY2hlcywgc3VjaCBhcyBoYXZpbmcgYSBzZXBhcmF0ZSBzdHJ1Y3QgZm9yIGVhY2ggbWVzc2FnZSB0eXBlPyBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgY29kZSB0byBnZXQgdGhlIGFuc3dlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dW5pb24gc21jX2xsY19tc2cgXFx7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfbGxjLmM9MTgyPXN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92Ml9pbmxpbmUge1x0LyogdHlwZSAweDI5ICovXG4tLVxubmV0L3NtYy9zbWNfbGxjLmMtMTg5LVxubmV0L3NtYy9zbWNfbGxjLmM6MTkwOnVuaW9uIHNtY19sbGNfbXNnIHtcbm5ldC9zbWMvc21jX2xsYy5jLTE5MS1cdHN0cnVjdCBzbWNfbGxjX21zZ19jb25maXJtX2xpbmsgY29uZmlybV9saW5rO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA3NwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGF0IGNvZGUgc25pcHBldDoKCioqRGl2aW5nIGludG8gYHVuaW9uIHNtY19sbGNfbXNnYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGlzLiAmIzM0O0xldCYjMzk7cyByZWFkIGB1bmlvbiBzbWNfbGxjX21zZ2AuJiMzNDsgVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgaW1tZWRpYXRlbHkga25vdyB0aGlzIGlzIGxpa2VseSBhIEMgb3IgQyYjNDM7JiM0MzsgdW5pb24gZGVmaW5pdGlvbiwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgYSBtZW1vcnktZWZmaWNpZW50IHdheSB0byByZXByZXNlbnQgZGlmZmVyZW50IGRhdGEgc3RydWN0dXJlcyBvciBtZXNzYWdlIGZvcm1hdHMsIGFsbCBvY2N1cHlpbmcgdGhlIHNhbWUgbWVtb3J5IGxvY2F0aW9uLiBUaGUgbmFtZSBgc21jX2xsY19tc2dgIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgdGhpcyB1bmlvbiBpcyByZWxhdGVkIHRvIHRoZSBTdWItTWVkaXVtIEFjY2VzcyBDb250cm9sIChTTUMpIGFuZCBMb2dpY2FsIExpbmsgQ29udHJvbCAoTExDKSBsYXllcnMsIGxpa2VseSBpbiBhIG5ldHdvcmsgY29tbXVuaWNhdGlvbiBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRpZmZlcmVudCBtZW1iZXJzIHdpdGhpbiB0aGlzIHVuaW9uIHRvIGZ1bGx5IGdyYXNwIGl0cyBwdXJwb3NlLiBXaGF0IHBvc3NpYmxlIG1lc3NhZ2UgdHlwZXMgb3IgZGF0YSBzdHJ1Y3R1cmVzIGNvdWxkIHRoaXMgYmUgaGFuZGxpbmcgYXQgdGhhdCBsYXllcj8gTGlrZWx5LCBJJiMzOTtsbCBmaW5kIGRpZmZlcmVudCBzdHJ1Y3R1cmVzIHJlcHJlc2VudGluZyB0aGluZ3MgbGlrZSBjb250cm9sIGZyYW1lcywgZGF0YSBmcmFtZXMsIGFja25vd2xlZGdtZW50cywgb3IgdmFyaW91cyBwcm90b2NvbC1zcGVjaWZpYyBtZXNzYWdlcy4gVGhlIGNsZXZlciB1c2Ugb2YgYSB1bmlvbiBzdWdnZXN0cyBhIGRlbGliZXJhdGUgZGVzaWduIGNob2ljZSB0byBzYXZlIHNwYWNlIG9yIGhhbmRsZSBtZXNzYWdlIHZhcmlhdGlvbnMgZWZmZWN0aXZlbHkuIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhhdCBkZWNvZGluZyB0aGUgdW5pb24gd2lsbCByZXF1aXJlIGNoZWNraW5nIGEgdHlwZSBmaWVsZCBvciBhIGRpc2NyaW1pbmF0b3IgdG8gdW5kZXJzdGFuZCB3aGljaCBkYXRhIHN0cnVjdHVyZSBpcyBjdXJyZW50bHkgYWN0aXZlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW5zaWRlIGFuZCB3aGF0IGl0JiMzOTtzIHJlYWxseSBhYm91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc21jL3NtY19sbGMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTkwOlx0dW5pb24gc21jX2xsY19tc2cge1xuIDE5MTpcdFx0c3RydWN0IHNtY19sbGNfbXNnX2NvbmZpcm1fbGluayBjb25maXJtX2xpbms7XG4gMTkyOlx0XHRzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmsgYWRkX2xpbms7XG4gMTkzOlx0XHRzdHJ1Y3Qgc21jX2xsY19tc2dfcmVxX2FkZF9saW5rX3YyIHJlcV9hZGRfbGluaztcbiAxOTQ6XHRcdHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua19jb250IGFkZF9saW5rX2NvbnQ7XG4gMTk1Olx0XHRzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsX2xpbmsgZGVsZXRlX2xpbms7XG4gMTk2Olx0XG4gMTk3Olx0XHRzdHJ1Y3Qgc21jX2xsY19tc2dfY29uZmlybV9ya2V5IGNvbmZpcm1fcmtleTtcbiAxOTg6XHRcdHN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleSBkZWxldGVfcmtleTtcbiAxOTk6XHRcdHN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92Ml9pbmxpbmUgZGVsZXRlX3JrZXlfdjI7XG4gMjAwOlx0XG4gMjAxOlx0XHRzdHJ1Y3Qgc21jX2xsY19tc2dfdGVzdF9saW5rIHRlc3RfbGluaztcbiAyMDI6XHRcdHN0cnVjdCB7XG4gMjAzOlx0XHRcdHN0cnVjdCBzbWNfbGxjX2hkciBoZHI7XG4gMjA0Olx0XHRcdHU4IGRhdGFbU01DX0xMQ19EQVRBX0xFTl07XG4gMjA1Olx0XHR9IHJhdztcbiAyMDY6XHR9O1xuIDIwNzpcdFxuIDIwODpcdHN0YXRpY19hc3NlcnQoU01DX0xMQ19ERUxfUktFWV9WMl9JTkxJTkUgPT1cbiAyMDk6XHRcdCAgICAgIChzaXplb2YodW5pb24gc21jX2xsY19tc2cpIC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4MDQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBzbWNfbGxjX21zZ2AgU3RydWN0dXJlKioKCk9rYXksIHNvIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCB0aGlzIGB1bmlvbiBzbWNfbGxjX21zZ2AsIGFuZCBteSBpbml0aWFsIGd1dCBmZWVsaW5nIGlzIHRoYXQgaXQmIzM5O3MgZ29pbmcgdG8gYmUgcHJlY2lzZWx5IDQ0IGJ5dGVzIGluIHNpemUuIFRoZSByZWFzb24/IFdlbGwsIGJhc2VkIG9uIG15IGV4cGVyaWVuY2UsIEkmIzM5O20gYmV0dGluZyB0aGF0IGBTTUNfTExDX0RBVEFfTEVOYCBpcyBsaWtlbHkgZGVmaW5lZCBhcyA0MCBieXRlcy4gQW5kIHdlIGtub3cgdGhhdCBgc3RydWN0IHNtY19sbGNfaGRyYCwgd2hpY2ggaXMgcGFydCBvZiB0aGlzIG92ZXJhbGwgc3RydWN0dXJlLCBpcyA0IGJ5dGVzLiA0MCBwbHVzIDQgZXF1YWxzIDQ0LCBzbyB0aGF0JiMzOTtzIHRoZSBsaWtlbHkgb3V0Y29tZS4KCkJ1dCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4gSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhlIGFjdHVhbCBkZWZpbml0aW9uIG9mIGBTTUNfTExDX0RBVEFfTEVOYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIFRoZXJlJiMzOTtzIG5vIHJvb20gZm9yIGd1ZXNzaW5nIGhlcmU7IEkmIzM5O2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYXNzdW1wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBTTUNfTExDX0RBVEFfTEVOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfbGxjLmMtMjEtXG5uZXQvc21jL3NtY19sbGMuYzoyMjojZGVmaW5lIFNNQ19MTENfREFUQV9MRU5cdFx0NDBcbm5ldC9zbWMvc21jX2xsYy5jLTIzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE3NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU01DLUxMQyBNZXNzYWdlIFNpemVzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBgdW5pb24gc21jX2xsY19tc2dgIGlzIGluZGVlZCA0NCBieXRlcy4gTXkgbmV4dCB0aG91Z2h0IGlzLCBob3cgZG9lcyB0aGlzIHNpemUgY29tcGFyZSB0byB0aGUgb3RoZXIgc3RydWN0dXJlcyB0aGF0IGFyZSB1c2VkIHdpdGhpbiB0aGF0IHVuaW9uPyBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgc3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rYC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgc3RydWN0dXJlJiMzOTtzIHNpemUgaXMgYWxzbyA0NCBieXRlcy4gTG9va2luZyBhdCB0aGUgZGVmaW5pdGlvbiwgSSYjMzk7bGwgY2FsY3VsYXRlIHRoZSBzaXplIGZpZWxkIGJ5IGZpZWxkOiBXZSYjMzk7dmUgZ290IGBzdHJ1Y3Qgc21jX2xsY19oZHIgaGRgLCB3aGljaCBpcyA0IGJ5dGVzLiBUaGVuIGB1OCBzZW5kZXJfbWFjW0VUSF9BTEVOXWAgaXMgNiBieXRlcy4gRm9sbG93aW5nIHRoYXQsIHRoZXJlJiMzOTtzIGB1OCByZXNlcnZlZDJbMl1gIGZvciAyIGJ5dGVzLCBgdTggc2VuZGVyX2dpZFtTTUNfR0lEX1NJWkVdYCBmb3IgMTYgYnl0ZXMsIGB1OCBzZW5kZXJfcXBfbnVtWzNdYCBmb3IgMyBieXRlcywgYHU4IGxpbmtfbnVtYCBmb3IgMSBieXRlLCBgdTggcXBfbXR1IDogNCwgcmVzZXJ2ZWQzIDogNGAgd2hpY2ggaXMgMSBieXRlLCBgdTggaW5pdGlhbF9wc25bM11gIGZvciAzIGJ5dGVzLCBhbmQgZmluYWxseSBgdTggcmVzZXJ2ZWRbOF1gIHdoaWNoIGlzIDggYnl0ZXMuIEFkZGluZyB0aGF0IHVwLCA0ICYjNDM7IDYgJiM0MzsgMiAmIzQzOyAxNiAmIzQzOyAzICYjNDM7IDEgJiM0MzsgMSAmIzQzOyAzICYjNDM7IDgsIGNvbWVzIG91dCB0byA0NCBieXRlcy4gVGhlcmVmb3JlLCB0aGUgYHNpemVvZihzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmspYCBpcyBhbHNvIDQ0IGJ5dGVzLiBUaGF0IGFsaWducyB3aXRoIG15IGV4cGVjdGF0aW9ucy4gTm93LCBJIHNob3VsZCBsb29rIGF0IGBzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsX2xpbmtgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsX2xpbmsgXFx7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfbGxjLmM9MTE0PXN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua19jb250IHtcdC8qIHR5cGUgMHgwMyAqL1xuLS1cbm5ldC9zbWMvc21jX2xsYy5jLTEyNS1cbm5ldC9zbWMvc21jX2xsYy5jOjEyNjpzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsX2xpbmsge1x0XHQvKiB0eXBlIDB4MDQgKi9cbm5ldC9zbWMvc21jX2xsYy5jLTEyNy1cdHN0cnVjdCBzbWNfbGxjX2hkciBoZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwMDUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsX2xpbmtgKioKCk9rYXksIHNvIHRoZSB0YXNrIGF0IGhhbmQgaW52b2x2ZXMgZXhhbWluaW5nIGBzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsX2xpbmtgLiBUaGlzIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIFNNQy1EIGFyY2hpdGVjdHVyZSBhbmQgc3BlY2lmaWNhbGx5LCBpdHMgcmVzcG9uc2liaWxpdHkgaW4gaGFuZGxpbmcgbGluayBkZWxldGlvbiBtZXNzYWdlcy4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBhIGZldyBrZXkgZmllbGRzIHRoYXQgKnNob3VsZCogYmUgcHJlc2VudCwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGF0YSBmbG93IGFuZCBwcm90b2NvbCBkZXNpZ246IEkmIzM5O2xsIGV4cGVjdCBhIGxpbmsgSUQgb2Ygc29tZSBraW5kLCBwcm9iYWJseSBhIGNvbm5lY3Rpb24gaWRlbnRpZmllciBvciBzb21lIG90aGVyIGZpZWxkIGlkZW50aWZ5aW5nIHRoZSBzcGVjaWZpYyBjb25uZWN0aW9uIHRoZSBjb21tYW5kIGlzIHJlZmVycmluZyB0by4gSSYjMzk7ZCBiZSBpbnRlcmVzdGVkIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgc2VxdWVuY2luZyBpbmZvIG9yIGZsYWdzIGFzc29jaWF0ZWQuCgpNeSBpbml0aWFsIGxpbmUgb2YgdGhvdWdodCwgaXMgYXJvdW5kIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zOyB0aGlzIGlzIGEgZGVsZXRlIGNvbW1hbmQsIHdoaWNoIGluaGVyZW50bHkgaGFzIGhpZ2hlciBwcml2aWxlZ2VzIGFzc29jaWF0ZWQgd2l0aCBpdCB0aGFuIGNvbW1hbmRzIHRoYXQgb25seSByZWFkIGRhdGEuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYW55IGZpZWxkcyByZWxhdGVkIHRvIGF1dGhvcml6YXRpb24gb3IgYXV0aGVudGljYXRpb24gb2YgdGhpcyBjb21tYW5kLCBvciB3aGV0aGVyIGF1dGhvcml6YXRpb24gaXMgaGFuZGxlZCBlbHNld2hlcmUgaW4gdGhlIHN0YWNrLgoKSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgaW1wbGljYXRpb25zIGZvciBzdGF0ZSBtYW5hZ2VtZW50IGluIHRoZSBsaW5rIGxheWVyIGNvbnRyb2wgbG9naWMuIEhvdyBkb2VzIHRoaXMgbWVzc2FnZSBpbXBhY3QgY29ubmVjdGlvbiBzdGF0ZXMsIHJlc291cmNlIGRlYWxsb2NhdGlvbiwgYW5kIHBvdGVudGlhbCBlcnJvciBoYW5kbGluZz8gQXJlIHRoZXJlIGFueSByYWNlIGNvbmRpdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIGlmIG11bHRpcGxlIGRlbGV0ZSBtZXNzYWdlcyBhcmUgaW4tZmxpZ2h0IGNvbmN1cnJlbnRseT8gQXJlIHRoZXJlIGFueSBmaWVsZHMgdGhhdCBzdWdnZXN0IGVycm9yIHJlcG9ydGluZyBvciBhY2tub3dsZWRnZW1lbnRzIHJlbGF0ZWQgdG8gdGhlIGRlbGV0aW9uIHJlcXVlc3Q/CgpFc3NlbnRpYWxseSwgSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBzdHJ1Y3R1cmUgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJhY3QgaXQgZGVmaW5lcyDigJMgdGhlIGluZm9ybWF0aW9uIGl0ICptdXN0KiBjb250YWluIGZvciBhIHN1Y2Nlc3NmdWwgbGluayBkZWxldGlvbiwgYW5kIHRoZSBndWFyYW50ZWVzIGl0IHByb3ZpZGVzIChvciBkb2VzbiYjMzk7dCBwcm92aWRlKSBhYm91dCB0aGUgcHJvY2Vzcy4gSSYjMzk7bSBhbHNvIHByaW1lZCB0byBsb29rIGZvciBhbnkgcG90ZW50aWFsIHJlZCBmbGFncyBvciBhcmVhcyB3aGVyZSB0aGUgZGVzaWduIGNvdWxkIGJlIGltcHJvdmVkLCBlc3BlY2lhbGx5IHdpdGggcmVzcGVjdCB0byByb2J1c3RuZXNzIGFuZCBzZWN1cml0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc21jL3NtY19sbGMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTI2Olx0c3RydWN0IHNtY19sbGNfbXNnX2RlbF9saW5rIHtcdFx0LyogdHlwZSAweDA0ICovXG4gMTI3Olx0XHRzdHJ1Y3Qgc21jX2xsY19oZHIgaGQ7XG4gMTI4Olx0XHR1OCBsaW5rX251bTtcbiAxMjk6XHRcdF9fYmUzMiByZWFzb247XG4gMTMwOlx0XHR1OCByZXNlcnZlZFszNV07XG4gMTMxOlx0fSBfX3BhY2tlZDtcdFx0XHQvKiBmb3JtYXQgZGVmaW5lZCBpbiBSRkM3NjA5ICovXG4gMTMyOlx0XG4gMTMzOlx0c3RydWN0IHNtY19sbGNfbXNnX3Rlc3RfbGluayB7XHRcdC8qIHR5cGUgMHgwNyAqL1xuIDEzNDpcdFx0c3RydWN0IHNtY19sbGNfaGRyIGhkO1xuIDEzNTpcdFx0dTggdXNlcl9kYXRhWzE2XTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2MjgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEYXRhIENvcHkgaW4gYHNtY19sbGNfZW5xdWV1ZWAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkmIzM5O3ZlIGNhbGN1bGF0ZWQgdGhlIHRvdGFsIHNpemUgb2YgdGhlc2Ugc3RydWN0dXJlcyDigJMgdGhlIHN1bSBvZiB0aGVpciBpbmRpdmlkdWFsIG1lbWJlcnMgZ2l2ZXMgbWUgNDQgYnl0ZXMuIEtub3dpbmcgdGhpcywgY29weWluZyBgc2l6ZW9mKHVuaW9uIHNtY19sbGNfbXNnKWAgZnJvbSBlaXRoZXIgYCZhbXA7YWRkX2xsY2Agb3IgYCZhbXA7ZGVsX2xsY2Agd2l0aGluIGBzbWNfbGxjX2VucXVldWVgIGlzIGNvbXBsZXRlbHkgc2FmZTsgbm8gd29ycmllcyBhYm91dCBvdXQtb2YtYm91bmRzIHJlYWRzLiBUaGUgbWVtb3J5IGFjY2VzcyB3aWxsIHN0YXkgd2l0aGluIHRoZSBkZWZpbmVkIGJvdW5kcy4KCkJ1dCwgaG9sZCBvbiwgYSBxdWljayBzYW5pdHkgY2hlY2sgaXMgYWx3YXlzIHdpc2UuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYGFkZF9sbGNgIGlzIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB0aGUgY29weS4gT2gsIHJpZ2h0LCB0aGUgY29kZSBleHBsaWNpdGx5IHplcm9lcyB0aGUgc3RydWN0OgoKYGBgYwoJc3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rIGFkZF9sbGM7CgoJbWVtc2V0KCZhbXA7YWRkX2xsYywgMCwgc2l6ZW9mKGFkZF9sbGMpKTsKYGBgCgpFeGNlbGxlbnQuIEl0JiMzOTtzIHplcm9lZCwgc28gdGhhdCYjMzk7cyBnb29kLiBBbmQgYGRlbF9sbGNgIGlzIHRoZSBzYW1lLCBtYWtpbmcgdGhpcyBwZXJmZWN0bHkgc2FmZToKCmBgYGMKCXN0cnVjdCBzbWNfbGxjX21zZ19kZWxfbGluayBkZWxfbGxjOwoKCW1lbXNldCgmYW1wO2RlbF9sbGMsIDAsIHNpemVvZihkZWxfbGxjKSk7CmBgYAoKT2theSwgdGhlIG1lbW9yeSBhY2Nlc3MgaXMgc2FmZSwgdGhlIGRhdGEgaXMgaW5pdGlhbGl6ZWQuIEkgdGhpbmsgSSB3aWxsIGp1c3QgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY2FsbGVycyBvZiB0aGF0IGZ1bmN0aW9uLCBqdXN0IHRvIGJlIHN1cmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c21jX2xsY19lbnF1ZXVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfbGxjLmM9MjE3PXN0cnVjdCBzbWNfbGxjX3FlbnRyeSB7XG4tLVxubmV0L3NtYy9zbWNfbGxjLmMtMjI0LVxubmV0L3NtYy9zbWNfbGxjLmM6MjI1OnN0YXRpYyB2b2lkIHNtY19sbGNfZW5xdWV1ZShzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHVuaW9uIHNtY19sbGNfbXNnICpsbGMsXG5uZXQvc21jL3NtY19sbGMuYy0yMjYtXHRcdFx0ICAgIHUzMiBieXRlX2xlbik7XG4tLVxubmV0L3NtYy9zbWNfbGxjLmM9MTU3MT12b2lkIHNtY19sbGNfYWRkX2xpbmtfbG9jYWwoc3RydWN0IHNtY19saW5rICpsaW5rKVxuLS1cbm5ldC9zbWMvc21jX2xsYy5jLTE1NzctXHQvKiBubyBkZXYgYW5kIHBvcnQgbmVlZGVkICovXG5uZXQvc21jL3NtY19sbGMuYzoxNTc4Olx0c21jX2xsY19lbnF1ZXVlKGxpbmssICh1bmlvbiBzbWNfbGxjX21zZyAqKVx1MDAyNmFkZF9sbGMsXG5uZXQvc21jL3NtY19sbGMuYy0xNTc5LVx0XHRcdHNpemVvZih1bmlvbiBzbWNfbGxjX21zZykpO1xuLS1cbm5ldC9zbWMvc21jX2xsYy5jPTE2MDY9dm9pZCBzbWNfbGxjX3Nydl9kZWxldGVfbGlua19sb2NhbChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHU4IGRlbF9saW5rX2lkKVxuLS1cbm5ldC9zbWMvc21jX2xsYy5jLTE2MTQtXHRkZWxfbGxjLmhkLmZsYWdzIHw9IFNNQ19MTENfRkxBR19ERUxfTElOS19PUkRFUkxZO1xubmV0L3NtYy9zbWNfbGxjLmM6MTYxNTpcdHNtY19sbGNfZW5xdWV1ZShsaW5rLCAodW5pb24gc21jX2xsY19tc2cgKilcdTAwMjZkZWxfbGxjLFxubmV0L3NtYy9zbWNfbGxjLmMtMTYxNi1cdFx0XHRzaXplb2YodW5pb24gc21jX2xsY19tc2cpKTtcbi0tXG5uZXQvc21jL3NtY19sbGMuYz0yMTAxPXN0YXRpYyB1MzIgc21jX2xsY19tYXhfYm9keV9sZW4odW5pb24gc21jX2xsY19tc2cgKmxsYylcbi0tXG5uZXQvc21jL3NtY19sbGMuYy0yMTE1LVxubmV0L3NtYy9zbWNfbGxjLmM6MjExNjpzdGF0aWMgdm9pZCBzbWNfbGxjX2VucXVldWUoc3RydWN0IHNtY19saW5rICpsaW5rLCB1bmlvbiBzbWNfbGxjX21zZyAqbGxjLFxubmV0L3NtYy9zbWNfbGxjLmMtMjExNy1cdFx0XHQgICAgdTMyIGJ5dGVfbGVuKVxuLS1cbm5ldC9zbWMvc21jX2xsYy5jPTIxNjI9c3RhdGljIHZvaWQgc21jX2xsY19yeF9oYW5kbGVyKHN0cnVjdCBpYl93YyAqd2MsIHZvaWQgKmJ1Zilcbi0tXG5uZXQvc21jL3NtY19sbGMuYy0yMTc2LVxubmV0L3NtYy9zbWNfbGxjLmM6MjE3NzpcdHNtY19sbGNfZW5xdWV1ZShsaW5rLCBsbGMsIHdjLVx1MDAzZWJ5dGVfbGVuKTtcbm5ldC9zbWMvc21jX2xsYy5jLTIxNzgtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDkzNAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDQ3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQb3RlbnRpYWwgQnVmZmVyIE92ZXJmbG93IGluIFNNQyBMTEMgUlggSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHNtY19sbGNfcnhfaGFuZGxlcmAgZnVuY3Rpb24gYW5kIHRoZSBzdWJzZXF1ZW50IHByb2Nlc3Npbmcgb2YgcmVjZWl2ZWQgTExDIG1lc3NhZ2VzLiBUaGUgYHNtY19sbGNfcnhfaGFuZGxlcmAgZ2V0cyBpdHMgZGF0YSwgcG9pbnRlZCB0byBieSBgbGxjYCwgZnJvbSB0aGUgbmV0d29yayB2aWEgYGliX3djYC4gVGhlIGtleSBpcyBgd2MtJmd0O2J5dGVfbGVuYCwgd2hpY2ggaXMgdGhlIGFjdHVhbCBudW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQsIGFuZCBgbGxjYCB0aGF0IHBvaW50cyB0byB0aGUgZGF0YSBidWZmZXIuIFRoZW4sIGl0IGVucXVldWVzIHRoZSBMTEMgbWVzc2FnZS4KCk5vdywgaW4gYHNtY19sbGNfZW5xdWV1ZWAsIGl0IHNlZW1zIHdlJiMzOTtyZSBhbGxvY2F0aW5nIGEgcXVldWUgZW50cnkgYW5kIGNvcHlpbmcgdGhlIHJlY2VpdmVkIGRhdGEgaW50byBpdC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGNvbmNlcm5lZCBhYm91dCB0aGlzIGBtZW1jcHkoJmFtcDtxZW50cnktJmd0O21zZywgbGxjLCBzaXplb2YodW5pb24gc21jX2xsY19tc2cpKTtgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXYWl0IGEgbWludXRlLi4uIGlzIGl0ICpwb3NzaWJsZSogdGhhdCBgd2MtJmd0O2J5dGVfbGVuYCAodGhlIHJlY2VpdmVkIHNpemUpIGlzICpzbWFsbGVyKiB0aGFuIGBzaXplb2YodW5pb24gc21jX2xsY19tc2cpYD8mIzM0Oy4gQmVjYXVzZSBpZiB0aGF0JiMzOTtzIHRoZSBjYXNlLCB3ZSYjMzk7cmUgZ29pbmcgdG8gaGF2ZSBhIGNsYXNzaWMgYnVmZmVyIG92ZXJmbG93IHNpdHVhdGlvbi4gYG1lbWNweWAgd291bGQgYmUgcmVhZGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIGBsbGNgIGJ1ZmZlci4KCkkgbmVlZCB0byBjb25maXJtIHRoaXMgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuIEkgbmVlZCB0byBnbyBiYWNrIGFuZCBkb3VibGUtY2hlY2sgaG93IGBzbWNfbGxjX3J4X2hhbmRsZXJgIGhhbmRsZXMgdGhlIHJlY2VpdmVkIGJ5dGUgbGVuZ3RoIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGd1YXJkcyBpbiBwbGFjZSwgYnV0IEkgaGF2ZSBhIHN0cm9uZyBmZWVsaW5nIHdlIGhhdmUgYSBwcm9ibGVtIGhlcmUuIEkgc3VzcGVjdCB0aGF0IHRoZSBzaXplIGNoZWNrIG1pZ2h0IGJlIG1pc3Npbmcgb3IgaW5zdWZmaWNpZW50LCB3aGljaCBjcmVhdGVzIGEgcG9zc2libGUgdnVsbmVyYWJpbGl0eSwgYW5kIG15IG5leHQgc3RlcCBpcyB0byB2ZXJpZnkgd2hldGhlciB0aGF0JiMzOTtzIHRoZSBjYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2xsYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE2MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTYyOlx0c3RhdGljIHZvaWQgc21jX2xsY19yeF9oYW5kbGVyKHN0cnVjdCBpYl93YyAqd2MsIHZvaWQgKmJ1ZilcbjIxNjM6XHR7XG4yMTY0Olx0XHRzdHJ1Y3Qgc21jX2xpbmsgKmxpbmsgPSAoc3RydWN0IHNtY19saW5rICopd2MtXHUwMDNlcXAtXHUwMDNlcXBfY29udGV4dDtcbjIxNjU6XHRcdHVuaW9uIHNtY19sbGNfbXNnICpsbGMgPSBidWY7XG4yMTY2Olx0XG4yMTY3Olx0XHRpZiAod2MtXHUwMDNlYnl0ZV9sZW4gXHUwMDNjIHNpemVvZigqbGxjKSlcbjIxNjg6XHRcdFx0cmV0dXJuOyAvKiBzaG9ydCBtZXNzYWdlICovXG4yMTY5Olx0XHRpZiAoIWxsYy1cdTAwM2VyYXcuaGRyLmNvbW1vbi5sbGNfdmVyc2lvbikge1xuMjE3MDpcdFx0XHRpZiAobGxjLVx1MDAzZXJhdy5oZHIubGVuZ3RoICE9IHNpemVvZigqbGxjKSlcbjIxNzE6XHRcdFx0XHRyZXR1cm47IC8qIGludmFsaWQgbWVzc2FnZSAqL1xuMjE3MjpcdFx0fSBlbHNlIHtcbjIxNzM6XHRcdFx0aWYgKGxsYy1cdTAwM2VyYXcuaGRyLmxlbmd0aF92MiBcdTAwM2Mgc2l6ZW9mKCpsbGMpKVxuMjE3NDpcdFx0XHRcdHJldHVybjsgLyogaW52YWxpZCBtZXNzYWdlICovXG4yMTc1Olx0XHR9XG4yMTc2Olx0XG4yMTc3Olx0XHRzbWNfbGxjX2VucXVldWUobGluaywgbGxjLCB3Yy1cdTAwM2VieXRlX2xlbik7XG4yMTc4Olx0fVxuMjE3OTpcdFxuMjE4MDpcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiB3b3JrZXIsIHV0aWxzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbjIxODE6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxMjkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCeXRlIExlbmd0aCBDaGVjayoqCgpPa2F5LCBzbyB0aGUgY29kZSBzdGFydHMgd2l0aCBhIHF1aWNrIGNoZWNrOiBgaWYgKHdjLSZndDtieXRlX2xlbiAmbHQ7IHNpemVvZigqbGxjKSlgLiBNeSBmaXJzdCB0aG91Z2h0IGlzLCB0aGF0JiMzOTtzIGdvb2Q7IGl0JiMzOTtzIGFuIG9wdGltaXphdGlvbi4gSXQgZW5zdXJlcyB0aGF0IGBsbGNgLCB3aGljaCBpcyBwcmVzdW1hYmx5IHNvbWUga2luZCBvZiBzdHJ1Y3R1cmUsIGhhcyBlbm91Z2ggYnl0ZXMgYWxsb2NhdGVkIHRvIGl0LiBTcGVjaWZpY2FsbHksIGl0IGd1YXJhbnRlZXMgdGhhdCBgbGxjYCBoYXMgYXQgbGVhc3QgdGhlIHNpemUgb2YgYHNpemVvZih1bmlvbiBzbWNfbGxjX21zZylgLiBNYWtlcyBzZW5zZS4KCkJ1dCB0aGVuLCBhIHJlZCBmbGFnLiBXaGF0IGhhcHBlbnMgaWYgYGJ5dGVfbGVuYCBpcyAqbGFyZ2VyKiB0aGFuIGEgY2VydGFpbiBzaXplPyBUaGF0IGNvdWxkIGxlYWQgdG8gcHJvYmxlbXMuIExldCBtZSBzZWUuLi4gdGhlIGNvZGUgZGVmaW5lcyBgU01DX1dSX1RYX1NJWkVgLiBBaCwgaXQmIzM5O3MgNDQgYnl0ZXM6CmBgYGMKI2RlZmluZSBTTUNfV1JfVFhfU0laRSA0NApgYGAKSSYjMzk7ZCBiZXR0ZXIgdmVyaWZ5IHdoZXJlIGBTTUNfV1JfVFhfU0laRWAgaXMgZGVmaW5lZCB0aG91Z2gsIGxldCBtZSBkb3VibGUtY2hlY2sgYG5ldC9zbWMvc21jX3dyLmhgIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgY29udGV4dCBJJiMzOTttIG1pc3NpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNkZWZpbmUgU01DX1dSX1RYX1NJWkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY193ci5oLTIzLVxubmV0L3NtYy9zbWNfd3IuaDoyNDojZGVmaW5lIFNNQ19XUl9UWF9TSVpFIDQ0IC8qIGFjdHVhbCBzaXplIG9mIHdyX3NlbmQgZGF0YSAoXHUwMDNjPVNNQ19XUl9CVUZfU0laRSkgKi9cbm5ldC9zbWMvc21jX3dyLmgtMjUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjEzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTTUMgV3JpdGUgQnVmZmVyIEFsbG9jYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgU01DX1dSX1RYX1NJWkVgIHRoaW5nLCBhbmQgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyA0NCBieXRlcywgd2hpY2ggaXMgc3BvdCBvbiBmb3IgdGhlIHNpemUgb2YgdGhhdCBgc21jX2xsY19tc2dgIHVuaW9uLiBUaGF0IG1ha2VzIHNlbnNlLiBTbywgYGJ5dGVfbGVuYCBoYXMgdG8gYmUgYXQgbGVhc3QgdGhhdC4gVGhlbiwgYGJvZHlfbGVuYCBpcyBkZXJpdmVkIGJ5IHN1YnRyYWN0aW5nIGBTTUNfV1JfVFhfU0laRWAgZnJvbSBgYnl0ZV9sZW5gLCB3aXRoIHNvbWUgdXBwZXIgYm91bmQgaW1wb3NlZCBieSBgU01DX1dSX0JVRl9WMl9TSVpFIC0gU01DX1dSX1RYX1NJWkVgLiBJdCYjMzk7cyBhbHNvIGNvbnN0cmFpbmVkIGZ1cnRoZXIgYnkgYHNtY19sbGNfbWF4X2JvZHlfbGVuKGxsYylgLgoKVGhlbiwgd2UmIzM5O3JlIGFsbG9jYXRpbmcgYSBgcWVudHJ5YCBhbmQgY29weWluZyBgYm9keV9sZW5gIGJ5dGVzIGZyb20gYHNyYyAmIzQzOyBTTUNfV1JfVFhfU0laRWAuIFRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHdlJiMzOTtyZSBndWFyYW50ZWVkIHRvIGhhdmUgZW5vdWdoIGRhdGEgaW4gYHNyY2AsIGEgbWluaW11bSBvZiBgU01DX1dSX1RYX1NJWkUgJiM0MzsgYm9keV9sZW5gIGJ5dGVzPyBJZiBgc21jX2xpbmtfc2hhcmVkX3YyX3J4YnVmKGxpbmspYCBpcyB0cnVlLCB0aGVuIGBzcmNgIHBvaW50cyB0byBgbGdyLSZndDt3cl9yeF9idWZfdjJgLiBJZiBub3QsIGBzcmNgIHBvaW50cyB0byBgbGxjYC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBgbGxjYCBpcyB0aGUgcmlnaHQgc2l6ZSBpbiB0aGUgbGF0dGVyIGNhc2UuCgpBaCwgSSByZW1lbWJlciB0aGF0IGNvbW1lbnQgZnJvbSBgc21jX3dyX2luaXRfc2dlYDogJiMzNDsuLi5tZXNzYWdlcyBsYXJnZXIgdGhhbiBgU01DX1dSX1RYX1NJWkVgLi4uIHNwaWxsb3ZlciBidWZmZXIuLi4mIzM0OyBSaWdodCwgZm9yIFNNQy1SdjIsIHRoZSBzZWNvbmQgU0dFIGluIGVhY2ggYGliX3JlY3Zfd3JgIGlzIGEgc3BpbGxvdmVyIGJ1ZmZlci4gSXQgc3RhcnRzIGF0IGBTTUNfV1JfVFhfU0laRWAsIHdoaWNoIGlzIHdoeSB0aGUgbGVhZGluZyBieXRlcyBvZiB0aGF0IGJ1ZmZlciBhcmUgbmV2ZXIgd3JpdHRlbi4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHNtY193cl9pbml0X3NnZWAgaW4gYG5ldC9zbWMvc21jX3dyLmNgIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfd3IuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTk1Olx0XHRcdGxuay1cdTAwM2V3cl90eF92Ml9pYi1cdTAwM2VuZXh0ID0gTlVMTDtcbiA1OTY6XHRcdFx0bG5rLVx1MDAzZXdyX3R4X3YyX2liLVx1MDAzZXNnX2xpc3QgPSBsbmstXHUwMDNld3JfdHhfdjJfc2dlO1xuIDU5NzpcdFx0XHRsbmstXHUwMDNld3JfdHhfdjJfaWItXHUwMDNlbnVtX3NnZSA9IDE7XG4gNTk4Olx0XHRcdGxuay1cdTAwM2V3cl90eF92Ml9pYi1cdTAwM2VvcGNvZGUgPSBJQl9XUl9TRU5EO1xuIDU5OTpcdFx0XHRsbmstXHUwMDNld3JfdHhfdjJfaWItXHUwMDNlc2VuZF9mbGFncyA9XG4gNjAwOlx0XHRcdFx0SUJfU0VORF9TSUdOQUxFRCB8IElCX1NFTkRfU09MSUNJVEVEO1xuIDYwMTpcdFx0fVxuIDYwMjpcdFxuIDYwMzpcdFx0LyogV2l0aCBTTUMtUnYyIHRoZXJlIGNhbiBiZSBtZXNzYWdlcyBsYXJnZXIgdGhhbiBTTUNfV1JfVFhfU0laRS5cbiA2MDQ6XHRcdCAqIEVhY2ggaWJfcmVjdl93ciBnZXRzIDIgc2dlcywgdGhlIHNlY29uZCBvbmUgaXMgYSBzcGlsbG92ZXIgYnVmZmVyXG4gNjA1Olx0XHQgKiBhbmQgdGhlIHNhbWUgYnVmZmVyIGZvciBhbGwgc2dlcy4gVGhlIHNwaWxsb3ZlciBzZ2Ugc3RhcnRzIGF0XG4gNjA2Olx0XHQgKiBTTUNfV1JfVFhfU0laRSwgc28gdGhlIGxlYWRpbmcgYnl0ZXMgb2YgdGhhdCBidWZmZXIgYXJlIG5ldmVyXG4gNjA3Olx0XHQgKiB3cml0dGVuLlxuIDYwODpcdFx0ICovXG4gNjA5Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBsbmstXHUwMDNld3JfcnhfY250OyBpJiM0MzsmIzQzOykge1xuIDYxMDpcdFx0XHRpbnQgeCA9IGkgKiBsbmstXHUwMDNld3Jfcnhfc2dlX2NudDtcbiA2MTE6XHRcbiA2MTI6XHRcdFx0bG5rLVx1MDAzZXdyX3J4X3NnZXNbeF0uYWRkciA9XG4gNjEzOlx0XHRcdFx0bG5rLVx1MDAzZXdyX3J4X2RtYV9hZGRyICYjNDM7IGkgKiBsbmstXHUwMDNld3JfcnhfYnVmbGVuO1xuIDYxNDpcdFx0XHRsbmstXHUwMDNld3Jfcnhfc2dlc1t4XS5sZW5ndGggPSBzbWNfbGlua19zaGFyZWRfdjJfcnhidWYobG5rKSA/XG4gNjE1Olx0XHRcdFx0U01DX1dSX1RYX1NJWkUgOiBsbmstXHUwMDNld3JfcnhfYnVmbGVuO1xuIDYxNjpcdFx0XHRsbmstXHUwMDNld3Jfcnhfc2dlc1t4XS5sa2V5ID0gbG5rLVx1MDAzZXJvY2VfcGQtXHUwMDNlbG9jYWxfZG1hX2xrZXk7XG4gNjE3Olx0XHRcdGlmIChsbmstXHUwMDNlbGdyLVx1MDAzZXNtY192ZXJzaW9uID09IFNNQ19WMiBcdTAwMjZcdTAwMjYgc21jX2xpbmtfc2hhcmVkX3YyX3J4YnVmKGxuaykpIHtcbiA2MTg6XHRcdFx0XHRsbmstXHUwMDNld3Jfcnhfc2dlc1t4ICYjNDM7IDFdLmFkZHIgPVxuIDYxOTpcdFx0XHRcdFx0XHRsbmstXHUwMDNld3JfcnhfdjJfZG1hX2FkZHIgJiM0MzsgU01DX1dSX1RYX1NJWkU7XG4gNjIwOlx0XHRcdFx0bG5rLVx1MDAzZXdyX3J4X3NnZXNbeCAmIzQzOyAxXS5sZW5ndGggPVxuIDYyMTpcdFx0XHRcdFx0XHRTTUNfV1JfQlVGX1YyX1NJWkUgLSBTTUNfV1JfVFhfU0laRTtcbiA2MjI6XHRcdFx0XHRsbmstXHUwMDNld3Jfcnhfc2dlc1t4ICYjNDM7IDFdLmxrZXkgPVxuIDYyMzpcdFx0XHRcdFx0XHRsbmstXHUwMDNlcm9jZV9wZC1cdTAwM2Vsb2NhbF9kbWFfbGtleTtcbiA2MjQ6XHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODE5NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI4NDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJlYWRzIGluIFNNQy1MTEMgTWVzc2FnZSBIYW5kbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBlbnN1cmluZyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBldmVyIHJlYWQgd2hlbiBwcm9jZXNzaW5nIFNNQy1MTEMgbWVzc2FnZXMsIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiBzcGlsbG92ZXIgYnVmZmVycyBhbmQgcmtleSBoYW5kbGluZy4gSSYjMzk7dmUgY29uc2lkZXJlZCBzZXZlcmFsIGNvZGUgcGF0aHMgaW4gZGV0YWlsLCBhbmQgaGVyZSBhcmUgbXkgY29uY2x1c2lvbnMuCgpGaXJzdCwgSSBleGFtaW5lZCB0aGUgYHNtY19saW5rX3NoYXJlZF92Ml9yeGJ1ZmAgY2FzZS4gSWYgdHJ1ZSwgdGhlIHNwaWxsb3ZlciBpcyB3cml0dGVuIGRpcmVjdGx5IGludG8gYGxnci0mZ3Q7d3JfcnhfYnVmX3YyICYjNDM7IFNNQ19XUl9UWF9TSVpFYCwgYW5kIHdoZW4gZmFsc2UsIHRoZSBTR0UgYnVmZmVycyBhcmUgbGFyZ2UgZW5vdWdoLiBUaGUgY3J1Y2lhbCBwYXJ0IGhlcmUgaXMgdGhlIGBtZW1jcHkocWVudHJ5LSZndDtib2R5LCBzcmMgJiM0MzsgU01DX1dSX1RYX1NJWkUsIGJvZHlfbGVuKTtgLiAgSSB2ZXJpZmllZCB0aGF0IGBib2R5X2xlbmAgKHRoZSBudW1iZXIgb2Ygc3BpbGxvdmVyIGJ5dGVzKSBpcyBjYXBwZWQgYnkgdGhlIGFjdHVhbCBudW1iZXIgb2YgcmVjZWl2ZWQgYnl0ZXMsIHByZXZlbnRpbmcgcmVhZHMgYmV5b25kIHRoZSB2YWxpZCBidWZmZXIuIFRoZSBjYWxjdWxhdGlvbiBlbnN1cmVzIG5vIHJlYWQgcGFzdCB0aGUgZW5kIG9mIGRhdGEuCgpOZXh0LCBJIHNjcnV0aW5pemVkIGBzbWNfbGxjX3NhdmVfYWRkX2xpbmtfcmtleXNgLiAgSGVyZSwgYHFlbnRyeS0mZ3Q7Ym9keWAgY29udGFpbnMgdGhlIHNwaWxsb3ZlciBkYXRhLiBJIGNvbmZpcm1lZCB0aGF0IHRoZSBjb2RlIGZpcnN0IGNoZWNrcyB0aGF0IGBxZW50cnktJmd0O2JvZHlfbGVuYCBpcyBzdWZmaWNpZW50LCB0aGVuIHByb3Blcmx5IGxpbWl0cyB0aGUgbG9vcCBpdGVyYXRpb24gY291bnQgYmFzZWQgb24gdGhlIG51bWJlciBvZiBya2V5cyAqYW5kKiB0aGUgYXZhaWxhYmxlIGJ5dGVzIGluIGBxZW50cnktJmd0O2JvZHlgLiBUaGlzIGVuc3VyZXMgYGV4dC0mZ3Q7cnRbaV1gIGVsZW1lbnRzIGFyZSB3aXRoaW4gdGhlIGJvdW5kcyBvZiB0aGUgcmVjZWl2ZWQgZGF0YTsgbm8gb3V0LW9mLWJvdW5kcyByZWFkcyBvY2N1ci4KClRoZW4sIEkgZm9jdXNlZCBvbiBgc21jX2xsY19ybXRfZGVsZXRlX3JrZXlgLiAgVGhlIGtleSBoZXJlIGlzIHRoZSBoYW5kbGluZyBvZiBpbmxpbmUgcmtleXMgYW5kIHNwaWxsb3ZlciBya2V5cy4gVGhlIGNvZGUgdXNlcyBgU01DX0xMQ19ERUxfUktFWV9WMl9JTkxJTkVgIHRvIHN0b3JlIHNvbWUgcmtleXMgaW5saW5lLiBDcnVjaWFsbHksIHRoZSBjYWxjdWxhdGlvbiBvZiBgbWF4YCAodGhlIGxvb3AgY291bnQpIGlzIGJvdW5kZWQgYnkgYm90aCBpbmxpbmUgcmtleSBjb3VudCBhbmQgcmVjZWl2ZWQgYnl0ZSBjb3VudC4gVGhlIGBtZW1jcHlgIGZyb20gYHFlbnRyeS0mZ3Q7Ym9keWAgaXMgdGhlcmVmb3JlIGd1YXJhbnRlZWQgdG8gc3RheSB3aXRoaW4gdGhlIGJvdW5kcyBvZiB0aGUgcmVjZWl2ZWQgZGF0YS4gQW5kIHRoZSBya2V5IHZhbHVlcyBpbiBgbGxjdjItJmd0O3JrZXlgIGFyZSBpbmRlZWQgaW5pdGlhbGl6ZWQgZnJvbSB0aGUgcmVjZWl2ZWQgbWVzc2FnZSAoYGxsY2ApLCB3aGljaCBpcyBjb25maXJtZWQgdG8gaGF2ZSBzaXplIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgc2l6ZW9mKHVuaW9uIHNtY19sbGNfbXNnKWAgYW5kIGlzIGNvcGllZCBmcm9tIG5ldHdvcmsgZGF0YS4KCkZpbmFsbHksIEkgY2hlY2tlZCBmb3IgdW5pbml0aWFsaXplZCBtZXNzYWdlcyBzZW50IHRvIHRoZSBuZXR3b3JrLiBCb3RoIGBzbWNfbGxjX2FkZF9saW5rX2xvY2FsYCBhbmQgYHNtY19sbGNfc3J2X2RlbGV0ZV9saW5rX2xvY2FsYCBpbml0aWFsaXplIHRoZWlyIG1lc3NhZ2VzIHZpYSBgbWVtc2V0YC4gQmVjYXVzZSBgc2l6ZW9mKGFkZF9sbGMpYCBhbmQgYHNpemVvZihkZWxfbGxjKWAgbWF0Y2ggYHNpemVvZih1bmlvbiBzbWNfbGxjX21zZylgLCBJ4oCZbSBjb25maWRlbnQgYWxsIGRhdGEgc2VudCB0byB0aGUgbmV0d29yayB3aWxsIGJlIGluaXRpYWxpemVkLiBBbHRob3VnaCwgSSB3aWxsIGRvdWJsZSBjaGVjayB0aGUgc2l6ZXMgZm9yIGFic29sdXRlIHN1cmV0eS4KClRoZXJlZm9yZSwgYWZ0ZXIgdGhpcyBkZXRhaWxlZCBhbmFseXNpcywgSSYjMzk7bSBmYWlybHkgY29uZmlkZW50IHRoYXQgdGhlc2UgY29kZSBwYXRocywgYXMgY3VycmVudGx5IHdyaXR0ZW4sIGFyZSBzYWZlIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NpemVvZlxcKHVuaW9uIHNtY19sbGNfbXNnXFwpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfbGxjLmM9MjA4PXN0YXRpY19hc3NlcnQoU01DX0xMQ19ERUxfUktFWV9WMl9JTkxJTkUgPT1cbm5ldC9zbWMvc21jX2xsYy5jOjIwOTpcdCAgICAgIChzaXplb2YodW5pb24gc21jX2xsY19tc2cpIC1cbm5ldC9zbWMvc21jX2xsYy5jLTIxMC1cdCAgICAgICBvZmZzZXRvZihzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXlfdjIsIHJrZXkpKSAvXG4tLVxubmV0L3NtYy9zbWNfbGxjLmM9NDIxPXN0YXRpYyBpbnQgc21jX2xsY19hZGRfcGVuZGluZ19zZW5kKHN0cnVjdCBzbWNfbGluayAqbGluayxcbi0tXG5uZXQvc21jL3NtY19sbGMuYy00MzEtXHRCVUlMRF9CVUdfT05fTVNHKFxubmV0L3NtYy9zbWNfbGxjLmM6NDMyOlx0XHRzaXplb2YodW5pb24gc21jX2xsY19tc2cpIFx1MDAzZSBTTUNfV1JfQlVGX1NJWkUsXG5uZXQvc21jL3NtY19sbGMuYy00MzMtXHRcdFwmIzM0O211c3QgaW5jcmVhc2UgU01DX1dSX0JVRl9TSVpFIHRvIGF0IGxlYXN0IHNpemVvZihzdHJ1Y3Qgc21jX2xsY19tc2cpXCYjMzQ7KTtcbm5ldC9zbWMvc21jX2xsYy5jLTQzNC1cdEJVSUxEX0JVR19PTl9NU0coXG5uZXQvc21jL3NtY19sbGMuYzo0MzU6XHRcdHNpemVvZih1bmlvbiBzbWNfbGxjX21zZykgIT0gU01DX1dSX1RYX1NJWkUsXG5uZXQvc21jL3NtY19sbGMuYy00MzYtXHRcdFwmIzM0O211c3QgYWRhcHQgU01DX1dSX1RYX1NJWkUgdG8gc2l6ZW9mKHN0cnVjdCBzbWNfbGxjX21zZyk7IGlmIG5vdCBhbGwgc21jX3dyIHVwcGVyIGxheWVyIHByb3RvY29scyB1c2UgdGhlIHNhbWUgbWVzc2FnZSBzaXplIGFueSBtb3JlLCBtdXN0IHN0YXJ0IHRvIHNldCBsaW5rLVx1MDAzZXdyX3R4X3NnZXNbaV0ubGVuZy4uLlxuLS1cbm5ldC9zbWMvc21jX2xsYy5jPTc4Nj1zdGF0aWMgaW50IHNtY19sbGNfc2VuZF9tZXNzYWdlKHN0cnVjdCBzbWNfbGluayAqbGluaywgdm9pZCAqbGxjYnVmKVxuLS1cbm5ldC9zbWMvc21jX2xsYy5jLTc5Ni1cdFx0Z290byBwdXRfb3V0O1xubmV0L3NtYy9zbWNfbGxjLmM6Nzk3Olx0bWVtY3B5KHdyX2J1ZiwgbGxjYnVmLCBzaXplb2YodW5pb24gc21jX2xsY19tc2cpKTtcbm5ldC9zbWMvc21jX2xsYy5jLTc5OC1cdHJjID0gc21jX3dyX3R4X3NlbmQobGluaywgcGVuZCk7XG4tLVxubmV0L3NtYy9zbWNfbGxjLmM9ODA4PXN0YXRpYyBpbnQgc21jX2xsY19zZW5kX21lc3NhZ2Vfd2FpdChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHZvaWQgKmxsY2J1Zilcbi0tXG5uZXQvc21jL3NtY19sbGMuYy04MTgtXHRcdGdvdG8gcHV0X291dDtcbm5ldC9zbWMvc21jX2xsYy5jOjgxOTpcdG1lbWNweSh3cl9idWYsIGxsY2J1Ziwgc2l6ZW9mKHVuaW9uIHNtY19sbGNfbXNnKSk7XG5uZXQvc21jL3NtY19sbGMuYy04MjAtXHRyYyA9IHNtY193cl90eF9zZW5kX3dhaXQobGluaywgcGVuZCwgU01DX0xMQ19XQUlUX1RJTUUpO1xuLS1cbm5ldC9zbWMvc21jX2xsYy5jPTE1NzE9dm9pZCBzbWNfbGxjX2FkZF9saW5rX2xvY2FsKHN0cnVjdCBzbWNfbGluayAqbGluaylcbi0tXG5uZXQvc21jL3NtY19sbGMuYy0xNTc4LVx0c21jX2xsY19lbnF1ZXVlKGxpbmssICh1bmlvbiBzbWNfbGxjX21zZyAqKVx1MDAyNmFkZF9sbGMsXG5uZXQvc21jL3NtY19sbGMuYzoxNTc5Olx0XHRcdHNpemVvZih1bmlvbiBzbWNfbGxjX21zZykpO1xubmV0L3NtYy9zbWNfbGxjLmMtMTU4MC19XG4tLVxubmV0L3NtYy9zbWNfbGxjLmM9MTYwNj12b2lkIHNtY19sbGNfc3J2X2RlbGV0ZV9saW5rX2xvY2FsKHN0cnVjdCBzbWNfbGluayAqbGluaywgdTggZGVsX2xpbmtfaWQpXG4tLVxubmV0L3NtYy9zbWNfbGxjLmMtMTYxNS1cdHNtY19sbGNfZW5xdWV1ZShsaW5rLCAodW5pb24gc21jX2xsY19tc2cgKilcdTAwMjZkZWxfbGxjLFxubmV0L3NtYy9zbWNfbGxjLmM6MTYxNjpcdFx0XHRzaXplb2YodW5pb24gc21jX2xsY19tc2cpKTtcbm5ldC9zbWMvc21jX2xsYy5jLTE2MTctfVxuLS1cbm5ldC9zbWMvc21jX2xsYy5jPTIxMTY9c3RhdGljIHZvaWQgc21jX2xsY19lbnF1ZXVlKHN0cnVjdCBzbWNfbGluayAqbGluaywgdW5pb24gc21jX2xsY19tc2cgKmxsYyxcbi0tXG5uZXQvc21jL3NtY19sbGMuYy0yMTM4LVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cWVudHJ5LVx1MDAzZWxpc3QpO1xubmV0L3NtYy9zbWNfbGxjLmM6MjEzOTpcdG1lbWNweShcdTAwMjZxZW50cnktXHUwMDNlbXNnLCBsbGMsIHNpemVvZih1bmlvbiBzbWNfbGxjX21zZykpO1xubmV0L3NtYy9zbWNfbGxjLmMtMjE0MC1cdGlmIChib2R5X2xlbikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjg3OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDc2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXR3b3JrIFN0YWNrIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBgQlVJTERfQlVHX09OX01TR2AgY2hlY2sgY29uZmlybXMgYSBjcml0aWNhbCBzaXppbmcgcmVsYXRpb25zaGlwOiB0aGUgc2l6ZSBvZiBgdW5pb24gc21jX2xsY19tc2dgIGlzIHByZWNpc2VseSBgU01DX1dSX1RYX1NJWkVgLCB3aGljaCB3ZSBrbm93IHRvIGJlIDQ0IGJ5dGVzLiAgV2UgY2FuIHNhZmVseSBhc3N1bWUgdGhhdCBhbnkgc3RydWN0IHdpdGggdGhlIHNhbWUgc2l6ZSAobGlrZSBgYWRkX2xsY2ApIHdpbGwgYmUgZnVsbHkgaW5pdGlhbGl6ZWQgd2hlbiBjb3BpZWQgaW50byB0aGUgdW5pb24gdmlhIGBtZW1jcHlgLCBhdm9pZGluZyBhbnkgcG90ZW50aWFsIGZvciByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKSG93ZXZlciwgdGhlIG1vcmUgZGV0YWlsZWQgYHN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92Ml9pbmxpbmVgIGltbWVkaWF0ZWx5IHBvcHMgdXAuIFdlIGhhdmUgdG8gdmVyaWZ5IHRoaXMgZG9lc24mIzM5O3QgZXhjZWVkIHRoZSBib3VuZHMgb2YgYHVuaW9uIHNtY19sbGNfbXNnYC4gIEl0JiMzOTtzIHNpemUgaXMgY2FsY3VsYXRlZCBhcyA0IChoZWFkZXIpICYjNDM7IDEgJiM0MzsgMSAmIzQzOyAyICYjNDM7ICg5ICogNCkgPSA0NCBieXRlcy4gIFNvLCB5ZXMsIGl0IGFsc28gZml0cyBuZWF0bHkgd2l0aGluIHRoZSB1bmlvbi4gR29vZC4KCk5vdywgbGV0JiMzOTtzIGdldCB0byB0aGUgYWN0dWFsIHByb2JsZW0gdGhpcyBwYXRjaCBhaW1zIHRvIGZpeC4gVGhlIHBhdGNoIG1lc3NhZ2UgaXRzZWxmIGlzIGEgbGl0dGxlIHZhZ3VlLCBidXQgdGhlIGNvZGUgY2hhbmdlcyB0aGVtc2VsdmVzIGdpdmUgYSBncmVhdCBkZWFsIG9mIGluZm9ybWF0aW9uLiAgQmVmb3JlIHRoaXMgcGF0Y2gsIGBzbWNfbGxjX2VucXVldWVgIGhhZCBhIHByb2JsZW06IEl0IHdhcyBhbGxvY2F0aW5nIGBxZW50cnlgIHdpdGggYGttYWxsb2Nfb2JqYCwgd2hpY2ggaW5jbHVkZXMgYSBgdW5pb24gc21jX2xsY19tc2dgLiBJZiBhIG1lc3NhZ2Ugd2FzIGxhcmdlciB0aGFuIDQ0IGJ5dGVzIChvdXIgYFNNQ19XUl9UWF9TSVpFYCksIGFueSBleHRyYSBkYXRhIHdvdWxkIGJlIGxlZnQgaW4gYGxnci0mZ3Q7d3JfcnhfYnVmX3YyYC4gIFRoZSBwcm9ibGVtLCBmcm9tIHdoYXQgSSYjMzk7bSBnYXRoZXJpbmcsIGlzIHRoYXQgdGhlIHN1YnNlcXVlbnQgZnVuY3Rpb25zLCBgc21jX2xsY19zYXZlX2FkZF9saW5rX3JrZXlzYCBhbmQgYHNtY19sbGNfcm10X2RlbGV0ZV9ya2V5YCwgd291bGQgZGlyZWN0bHkgcmVhZCBmcm9tIHRoaXMgYGxnci0mZ3Q7d3JfcnhfYnVmX3YyYC4KClRoZSBwcm9ibGVtPyBgc21jX2xsY19lbnF1ZXVlYCBxdWV1ZXMgdGhlIG1lc3NhZ2UgZm9yIGRlZmVycmVkIHByb2Nlc3NpbmcgYnkgYSB3b3JrZXIgdGhyZWFkIChgc21jX2xsY19ldmVudF93b3JrYCkuIENyaXRpY2FsbHksIHdoaWxlIHRoZSBtZXNzYWdlIGlzIHF1ZXVlZCwgKmFub3RoZXIqIG1lc3NhZ2UgY291bGQgYXJyaXZlIGFuZCBvdmVyd3JpdGUgYGxnci0mZ3Q7d3JfcnhfYnVmX3YyYCEgVGhlIGB3cl9yeF9idWZfdjJgIGFwcGVhcnMgdG8gYmUgYSBzaGFyZWQgYnVmZmVyIGF0IHRoZSBsaW5rIGdyb3VwIGxldmVsLCB3aGljaCBtZWFucyBpdCYjMzk7cyBhIHJhY2UgY29uZGl0aW9uIHdhaXRpbmcgdG8gaGFwcGVuLiBJdCBpcyBzdXNjZXB0aWJsZSB0byBwb3RlbnRpYWwgb3ZlcndyaXRlcywgd2hlcmUgdGhlIHdvcmtlciB0aHJlYWQgY291bGQgdGhlbiBwcm9jZXNzIGluY29ycmVjdCBvciBwYXJ0aWFsbHkgY29ycmVjdCBkYXRhLCBsZWFkaW5nIHRvIHZhcmlvdXMgaXNzdWVzLiAgVGhlIGNoYW5nZXMgaW4gdGhpcyBwYXRjaCBhcmUgbGlrZWx5IGFpbWVkIGF0IGVuc3VyaW5nIHRoZSBkYXRhIGlzIHByb3Blcmx5IGNvcGllZCBhbmQgaXNvbGF0ZWQsIHNvIHRoYXQgYSBkZWxheWVkIHdvcmtlciBjYW4gcmVhZCB3aXRob3V0IHBvdGVudGlhbCBmb3IgY29ycnVwdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d3JfcnhfYnVmX3YyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfY29yZS5oPTI4Nj1zdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAge1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuaC0zMjAtXHRcdFx0XHRcdFx0Lyogc21jIGxpbmsgKi9cbm5ldC9zbWMvc21jX2NvcmUuaDozMjE6XHRcdFx0c3RydWN0IHNtY193cl92Ml9idWZcdCp3cl9yeF9idWZfdjI7XG5uZXQvc21jL3NtY19jb3JlLmgtMzIyLVx0XHRcdFx0XHRcdC8qIFdSIHYyIHJlY3YgcGF5bG9hZCBidWZmZXIgKi9cbi0tXG5uZXQvc21jL3NtY19sbGMuYz0yMTE2PXN0YXRpYyB2b2lkIHNtY19sbGNfZW5xdWV1ZShzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHVuaW9uIHNtY19sbGNfbXNnICpsbGMsXG4tLVxubmV0L3NtYy9zbWNfbGxjLmMtMjE0MS1cdFx0dTggKnNyYyA9IHNtY19saW5rX3NoYXJlZF92Ml9yeGJ1ZihsaW5rKSA/XG5uZXQvc21jL3NtY19sbGMuYzoyMTQyOlx0XHRcdCh1OCAqKWxnci1cdTAwM2V3cl9yeF9idWZfdjIgOiAodTggKilsbGM7XG5uZXQvc21jL3NtY19sbGMuYy0yMTQzLVxuLS1cbm5ldC9zbWMvc21jX3dyLmM9NjgyPXZvaWQgc21jX3dyX2ZyZWVfbGdyX21lbShzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncilcbi0tXG5uZXQvc21jL3NtY193ci5jLTY4Ni1cbm5ldC9zbWMvc21jX3dyLmM6Njg3Olx0a2ZyZWUobGdyLVx1MDAzZXdyX3J4X2J1Zl92Mik7XG5uZXQvc21jL3NtY193ci5jOjY4ODpcdGxnci1cdTAwM2V3cl9yeF9idWZfdjIgPSBOVUxMO1xubmV0L3NtYy9zbWNfd3IuYy02ODktXHRrZnJlZShsZ3ItXHUwMDNld3JfdHhfYnVmX3YyKTtcbi0tXG5uZXQvc21jL3NtY193ci5jPTcyNT1pbnQgc21jX3dyX2FsbG9jX2xncl9tZW0oc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IpXG4tLVxubmV0L3NtYy9zbWNfd3IuYy03MjktXG5uZXQvc21jL3NtY193ci5jOjczMDpcdGxnci1cdTAwM2V3cl9yeF9idWZfdjIgPSBremFsbG9jKFNNQ19XUl9CVUZfVjJfU0laRSwgR0ZQX0tFUk5FTCk7XG5uZXQvc21jL3NtY193ci5jOjczMTpcdGlmICghbGdyLVx1MDAzZXdyX3J4X2J1Zl92Milcbm5ldC9zbWMvc21jX3dyLmMtNzMyLVx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5uZXQvc21jL3NtY193ci5jLTczNC1cdGlmICghbGdyLVx1MDAzZXdyX3R4X2J1Zl92Mikge1xubmV0L3NtYy9zbWNfd3IuYzo3MzU6XHRcdGtmcmVlKGxnci1cdTAwM2V3cl9yeF9idWZfdjIpO1xubmV0L3NtYy9zbWNfd3IuYy03MzYtXHRcdHJldHVybiAtRU5PTUVNO1xuLS1cbm5ldC9zbWMvc21jX3dyLmM9ODU1PWludCBzbWNfd3JfY3JlYXRlX2xpbmsoc3RydWN0IHNtY19saW5rICpsbmspXG4tLVxubmV0L3NtYy9zbWNfd3IuYy04NzItXHRcdFx0bG5rLVx1MDAzZXdyX3J4X3YyX2RtYV9hZGRyID1cbm5ldC9zbWMvc21jX3dyLmM6ODczOlx0XHRcdFx0aWJfZG1hX21hcF9zaW5nbGUoaWJkZXYsIGxuay1cdTAwM2VsZ3ItXHUwMDNld3JfcnhfYnVmX3YyLFxubmV0L3NtYy9zbWNfd3IuYy04NzQtXHRcdFx0XHRcdFx0ICBTTUNfV1JfQlVGX1YyX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MDk4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQW5hbHlzaXMgb2YgdGhlIGB3cl9yeF9idWZfdjJgIEFsbG9jYXRpb24gYW5kIFVzYWdlKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBgd3JfcnhfYnVmX3YyYCBzdHJ1Y3R1cmUsIEkgc2VlIHRoYXQgaXQmIzM5O3MgYWxsb2NhdGVkIGFzIGEgc2luZ2xlIGJ1ZmZlciBwZXIgbGluayBncm91cCB1c2luZyBga3phbGxvY2AuIFRoYXQmIzM5O3Mgc3RhbmRhcmQgcHJhY3RpY2UsIGFuZCBpdCYjMzk7cyBtYXBwZWQgZm9yIERNQSwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZSBmb3IgZWZmaWNpZW50IGRhdGEgdHJhbnNmZXIuIEl0JiMzOTtzIGFsbG9jYXRlZCBhdCB0aGUgc2l6ZSBgU01DX1dSX0JVRl9WMl9TSVpFYCwgd2hpY2ggaXMgdHlwaWNhbC4KCkJ1dCBob2xkIG9u4oCmIHRoZSB3YXkgaXQmIzM5O3MgYmVpbmcgdXNlZCBpcyBhIGJpdCBjb25jZXJuaW5nLiBJdCBsb29rcyBsaWtlIHRoZSBmaXJzdCA0NCBieXRlcyBvZiBhbiBpbmNvbWluZyBtZXNzYWdlIGFyZSB3cml0dGVuIHRvIGBsbmstJmd0O3dyX3J4X3NnZXNbeF0uYWRkcmAsIGFuZCB0aGVuIHRoZSByZW1haW5kZXIgb2YgdGhlIGRhdGEgZ29lcyBpbnRvIHRoZSBidWZmZXIgYXQgYW4gb2Zmc2V0OiBgbG5rLSZndDt3cl9yeF92Ml9kbWFfYWRkciAmIzQzOyBTTUNfV1JfVFhfU0laRWAuCgpUaGUgcHJvYmxlbSBpcyBpbW1lZGlhdGVseSBhcHBhcmVudC4gSWYgbXVsdGlwbGUgbWVzc2FnZXMgY29tZSBpbiBzaW11bHRhbmVvdXNseSDigJMgb3IgZXZlbiBzZXF1ZW50aWFsbHkgYmVmb3JlIHRoZSBwcmV2aW91cyBtZXNzYWdlIGlzIGZ1bGx5IHByb2Nlc3NlZCDigJMgdGhleSYjMzk7cmUgZ29pbmcgdG8gb3ZlcndyaXRlIHRoZSBzYW1lIGB3cl9yeF9idWZfdjJgISBUaGlzIGlzIGJlY2F1c2UgYGxuay0mZ3Q7d3Jfcnhfc2dlc1t4ICYjNDM7IDFdLmFkZHJgIGlzIGFsd2F5cyBjYWxjdWxhdGVkIGFzIGBsbmstJmd0O3dyX3J4X3YyX2RtYV9hZGRyICYjNDM7IFNNQ19XUl9UWF9TSVpFYC4gVGhpcyBpcyBoaWdobHkgcHJvYmxlbWF0aWMsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gZGF0YSBjb3JydXB0aW9uIGFuZCBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBpc3N1ZXMuCgpJIG5lZWQgdG8gcmV2aXNpdCB0aGUgYHNtY193cl9pbml0X3NnZWAgZnVuY3Rpb247IHRoZXJlIGlzIGNsZWFybHkgc29tZSBhc3BlY3Qgb2YgdGhlIGRlc2lnbiB0aGF0IEkgYW0gbWlzc2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc21jL3NtY193ci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjA5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MDk6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxuay1cdTAwM2V3cl9yeF9jbnQ7IGkmIzQzOyYjNDM7KSB7XG4gNjEwOlx0XHRcdGludCB4ID0gaSAqIGxuay1cdTAwM2V3cl9yeF9zZ2VfY250O1xuIDYxMTpcdFxuIDYxMjpcdFx0XHRsbmstXHUwMDNld3Jfcnhfc2dlc1t4XS5hZGRyID1cbiA2MTM6XHRcdFx0XHRsbmstXHUwMDNld3JfcnhfZG1hX2FkZHIgJiM0MzsgaSAqIGxuay1cdTAwM2V3cl9yeF9idWZsZW47XG4gNjE0Olx0XHRcdGxuay1cdTAwM2V3cl9yeF9zZ2VzW3hdLmxlbmd0aCA9IHNtY19saW5rX3NoYXJlZF92Ml9yeGJ1ZihsbmspID9cbiA2MTU6XHRcdFx0XHRTTUNfV1JfVFhfU0laRSA6IGxuay1cdTAwM2V3cl9yeF9idWZsZW47XG4gNjE2Olx0XHRcdGxuay1cdTAwM2V3cl9yeF9zZ2VzW3hdLmxrZXkgPSBsbmstXHUwMDNlcm9jZV9wZC1cdTAwM2Vsb2NhbF9kbWFfbGtleTtcbiA2MTc6XHRcdFx0aWYgKGxuay1cdTAwM2VsZ3ItXHUwMDNlc21jX3ZlcnNpb24gPT0gU01DX1YyIFx1MDAyNlx1MDAyNiBzbWNfbGlua19zaGFyZWRfdjJfcnhidWYobG5rKSkge1xuIDYxODpcdFx0XHRcdGxuay1cdTAwM2V3cl9yeF9zZ2VzW3ggJiM0MzsgMV0uYWRkciA9XG4gNjE5Olx0XHRcdFx0XHRcdGxuay1cdTAwM2V3cl9yeF92Ml9kbWFfYWRkciAmIzQzOyBTTUNfV1JfVFhfU0laRTtcbiA2MjA6XHRcdFx0XHRsbmstXHUwMDNld3Jfcnhfc2dlc1t4ICYjNDM7IDFdLmxlbmd0aCA9XG4gNjIxOlx0XHRcdFx0XHRcdFNNQ19XUl9CVUZfVjJfU0laRSAtIFNNQ19XUl9UWF9TSVpFO1xuIDYyMjpcdFx0XHRcdGxuay1cdTAwM2V3cl9yeF9zZ2VzW3ggJiM0MzsgMV0ubGtleSA9XG4gNjIzOlx0XHRcdFx0XHRcdGxuay1cdTAwM2Vyb2NlX3BkLVx1MDAzZWxvY2FsX2RtYV9sa2V5O1xuIDYyNDpcdFx0XHR9XG4gNjI1Olx0XHRcdGxuay1cdTAwM2V3cl9yeF9pYnNbaV0ubmV4dCA9IE5VTEw7XG4gNjI2Olx0XHRcdGxuay1cdTAwM2V3cl9yeF9pYnNbaV0uc2dfbGlzdCA9IFx1MDAyNmxuay1cdTAwM2V3cl9yeF9zZ2VzW3hdO1xuIDYyNzpcdFx0XHRsbmstXHUwMDNld3JfcnhfaWJzW2ldLm51bV9zZ2UgPSBsbmstXHUwMDNld3Jfcnhfc2dlX2NudDtcbiA2Mjg6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYxNzMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA4NjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUmFjZSBDb25kaXRpb24gYW5kIFBvdGVudGlhbCBEYXRhIENvcnJ1cHRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBjb2RlLCBhbmQgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHdoYXQgdGhlIHByb2JsZW0gaXMuIEZvciBldmVyeSBpbmRleCBgaWAsIHRoZSBhZGRyZXNzIGBsbmstJmd0O3dyX3J4X3NnZXNbeCAmIzQzOyAxXS5hZGRyYCBpcyBjb25zaXN0ZW50IOKAkyBpdCYjMzk7cyBhY3R1YWxseSBgbG5rLSZndDt3cl9yeF92Ml9kbWFfYWRkciAmIzQzOyBTTUNfV1JfVFhfU0laRWAuIFRoYXQgbWVhbnMgYWxsIGluY29taW5nIG1lc3NhZ2VzIHNoYXJlIHRoZSBzYW1lIHNwaWxsb3ZlciBidWZmZXIuIFRoYXQmIzM5O3MgbXkgZmlyc3QgY2x1ZS4KClRoZSBgc21jX2xsY19yeF9oYW5kbGVyYCBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQgd2hlbiBhIG1lc3NhZ2UgYXJyaXZlcy4gSXQgZW5xdWV1ZXMgdGhlIG1lc3NhZ2UsIHdoaWNoIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIEJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgYHNtY19sbGNfZW5xdWV1ZWAgZnVuY3Rpb24gd291bGQgY29weSBvbmx5IHRoZSBmaXJzdCA0NCBieXRlcyAodGhlIGB1bmlvbiBzbWNfbGxjX21zZ2ApIG9mIHRoZSBtZXNzYWdlIGludG8gYSBuZXdseSBhbGxvY2F0ZWQgYHFlbnRyeWAuIFRoZSAqc3BpbGxvdmVyKiBieXRlcywgdGhvdWdoLCB0aG9zZSB3ZXJlIGxlZnQgcmVzaWRpbmcgaW4gYGxnci0mZ3Q7d3JfcnhfYnVmX3YyYC4gVGhlIHdvcmtlciB0aHJlYWQgbGF0ZXIgcHJvY2Vzc2VkIHRoaXMgYHFlbnRyeWAgYW5kIHJlYWQgdGhlIHNwaWxsb3ZlciBieXRlcyBmcm9tIHRoYXQgc2hhcmVkIGBsZ3ItJmd0O3dyX3J4X2J1Zl92MmAgYnVmZmVyLgoKVGhlIHByb2JsZW0/IElmIGEgc2Vjb25kIG1lc3NhZ2UgY2FtZSBpbiBiZWZvcmUgdGhlIHdvcmtlciB0aHJlYWQgaGFkIGEgY2hhbmNlIHRvIHByb2Nlc3MgdGhlIGZpcnN0LCB0aGUgc3BpbGxvdmVyIGJ5dGVzIGluIGBsZ3ItJmd0O3dyX3J4X2J1Zl92MmAgd291bGQgZ2V0IG92ZXJ3cml0dGVuIGJ5IHRoZSBzZWNvbmQgbWVzc2FnZS4gUHVyZSByYWNlIGNvbmRpdGlvbiwgY2xhc3NpYyBkYXRhIGNvcnJ1cHRpb24uIFRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IGNvcHlpbmcgdGhlICplbnRpcmUqIG1lc3NhZ2UsIGluY2x1ZGluZyB0aGUgc3BpbGxvdmVyIGRhdGEsIGludG8gdGhlIGBxZW50cnlgLiBFYWNoIGBxZW50cnlgIG5vdyBnZXRzIGl0cyBvd24gY29weSwgZWxpbWluYXRpbmcgdGhlIHNoYXJlZCBidWZmZXIgYW5kIHRoZSByYWNlLgoKTm93LCBteSBtaW5kIHNoaWZ0cyB0byBob3cgdGhpcyByYWNlIG1pZ2h0IGhhdmUgbWFuaWZlc3RlZCBpbiB3YXlzIEkgY2FuIGFuYWx5emUgZnVydGhlci4gVGhpcyByYWNlIGRvZXNuJiMzOTt0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggaXMgZ29vZC4gRXZlbiBpZiB0aGUgc2Vjb25kIG1lc3NhZ2UgaXMgc2hvcnRlciwgdGhlIHNwaWxsb3ZlciBidWZmZXIgaXMgaW5pdGlhbGl6ZWQgbWVtb3J5LCBqdXN0IHBvdGVudGlhbGx5IGNvcnJ1cHRlZC4gSG93ZXZlciwgaXQmIzM5O3MgcG9zc2libGUgZm9yIHRoZSB3b3JrZXIgdGhyZWFkIHRvIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBkYXRhLgoKSSBzdGFydCB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zLiBCZWZvcmUgdGhlIHBhdGNoLCBpbiBgc21jX2xsY19zYXZlX2FkZF9saW5rX3JrZXlzYCwgdGhlcmUmIzM5O3MgdGhpcyBjb2RlIHNuaXBwZXQ6CgpgYGBjCglleHQgPSAoc3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rX3YyX2V4dCAqKShsbGNfbXNnICYjNDM7CgkJCQkJCSAgICAgU01DX1dSX1RYX1NJWkUpOwoJbWF4ID0gbWluX3QodTgsIGV4dC0mZ3Q7bnVtX3JrZXlzLCBTTUNfTExDX1JLRVlTX1BFUl9NU0dfVjIpOwoJZG93bl93cml0ZSgmYW1wO2xnci0mZ3Q7cm1ic19sb2NrKTsKCWZvciAoaSA9IDA7IGkgJmx0OyBtYXg7IGkmIzQzOyYjNDM7KSB7CgkJc21jX3J0b2tlbl9zZXQobGdyLCBsaW5rLSZndDtsaW5rX2lkeCwgbGlua19uZXctJmd0O2xpbmtfaWR4LAoJCQkgICAgICAgZXh0LSZndDtydFtpXS5ybWJfa2V5LAoJCQkgICAgICAgZXh0LSZndDtydFtpXS5ybWJfdmFkZHJfbmV3LAoJCQkgICAgICAgZXh0LSZndDtydFtpXS5ybWJfa2V5X25ldyk7Cgl9CmBgYAoKVGhpcyBjb2RlICpkaWRuJiMzOTt0KiBjaGVjayBpZiB0aGUgcmVjZWl2ZWQgbWVzc2FnZSB3YXMgbG9uZyBlbm91Z2ggdG8gY29udGFpbiB0aGUgbnVtYmVyIG9mIHJrZXlzIGluZGljYXRlZCBieSBgZXh0LSZndDtudW1fcmtleXNgISBJdCBqdXN0IGJsaW5kbHkgdHJ1c3RzIHRoYXQgdmFsdWUsIHRoZW4gcmVhZHMgdXAgdG8gYFNNQ19MTENfUktFWVNfUEVSX01TR19WMmAgcmtleXMgZnJvbSB0aGUgc2hhcmVkIGBsbGNfbXNnICYjNDM7IFNNQ19XUl9UWF9TSVpFYCBidWZmZXIuIElmIHRoZSBwZWVyIHNlbmRzIGEgc2hvcnQgbWVzc2FnZSBidXQgc3BlY2lmaWVzIGEgbGFyZ2UgYG51bV9ya2V5c2AsIHRoZSBjb2RlIHdpbGwgcmVhZCBwYXN0IHRoZSBhY3R1YWwgcmVjZWl2ZWQgZGF0YSBpbiBgbGdyLSZndDt3cl9yeF9idWZfdjJgLiBCZWNhdXNlIGBsZ3ItJmd0O3dyX3J4X2J1Zl92MmAgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgLCBpdCYjMzk7cyB6ZXJvZWQgb24gYWxsb2NhdGlvbi4gU28gdGhlIG1lbW9yeSByZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgbWVzc2FnZSB3aWxsIGNvbnRhaW4gZWl0aGVyIHplcm9zIG9yIGRhdGEgZnJvbSBwcmV2aW91cyBtZXNzYWdlcy4gVGhpcyBpcyBzdGlsbCBub3QgKnVuaW5pdGlhbGl6ZWQqIG1lbW9yeSwgYnV0IGl0JiMzOTtzIGNsZWFybHkgY29ycnVwdGVkIGFuZCBjb3VsZCBsZWFkIHRvIGlzc3Vlcy4KCk5vdywgSSBuZWVkIHRvIGNvbnNpZGVyIGEgZGlmZmVyZW50IHBhdGguIFdoYXQgaGFwcGVucyBpZiBgc21jX2xpbmtfc2hhcmVkX3YyX3J4YnVmKGxpbmspYCBpcyBmYWxzZT8gVGhlbiwgYGxsY19tc2dgIHBvaW50cyB0byBgbG5rLSZndDt3cl9yeF9zZ2VzW3hdLmFkZHJgLCB3aGljaCBpcyBhbGxvY2F0ZWQgaW4gYHNtY193cl9hbGxvY19saW5rX21lbWAuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaG93IHRoYXQgYnVmZmVyIGlzIGFsbG9jYXRlZCB0byBjb25maXJtIHRoYXQgdGhlIHNhbWUgYXNzdW1wdGlvbnMgYWJvdXQgaW5pdGlhbGl6YXRpb24gYXBwbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDAzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dyX3J4X2RtYV9hZGRyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfY29yZS5oPTk3PXN0cnVjdCBzbWNfbGluayB7XG4tLVxubmV0L3NtYy9zbWNfY29yZS5oLTEzNS1cdFx0XHRcdFx0XHQgKi9cbm5ldC9zbWMvc21jX2NvcmUuaDoxMzY6XHRkbWFfYWRkcl90XHRcdHdyX3J4X2RtYV9hZGRyO1x0LyogRE1BIGFkZHJlc3Mgb2Ygd3JfcnhfYnVmcyAqL1xubmV0L3NtYy9zbWNfY29yZS5oLTEzNy1cdGRtYV9hZGRyX3RcdFx0d3JfcnhfdjJfZG1hX2FkZHI7IC8qIERNQSBhZGRyZXNzIG9mIHYyIHJ4IGJ1ZiovXG4tLVxubmV0L3NtYy9zbWNfd3IuYz01NTY9c3RhdGljIHZvaWQgc21jX3dyX2luaXRfc2dlKHN0cnVjdCBzbWNfbGluayAqbG5rKVxuLS1cbm5ldC9zbWMvc21jX3dyLmMtNjEyLVx0XHRsbmstXHUwMDNld3Jfcnhfc2dlc1t4XS5hZGRyID1cbm5ldC9zbWMvc21jX3dyLmM6NjEzOlx0XHRcdGxuay1cdTAwM2V3cl9yeF9kbWFfYWRkciAmIzQzOyBpICogbG5rLVx1MDAzZXdyX3J4X2J1Zmxlbjtcbm5ldC9zbWMvc21jX3dyLmMtNjE0LVx0XHRsbmstXHUwMDNld3Jfcnhfc2dlc1t4XS5sZW5ndGggPSBzbWNfbGlua19zaGFyZWRfdjJfcnhidWYobG5rKSA/XG4tLVxubmV0L3NtYy9zbWNfd3IuYz02MzY9dm9pZCBzbWNfd3JfZnJlZV9saW5rKHN0cnVjdCBzbWNfbGluayAqbG5rKVxuLS1cbm5ldC9zbWMvc21jX3dyLmMtNjU1LVxubmV0L3NtYy9zbWNfd3IuYzo2NTY6XHRpZiAobG5rLVx1MDAzZXdyX3J4X2RtYV9hZGRyKSB7XG5uZXQvc21jL3NtY193ci5jOjY1NzpcdFx0aWJfZG1hX3VubWFwX3NpbmdsZShpYmRldiwgbG5rLVx1MDAzZXdyX3J4X2RtYV9hZGRyLFxubmV0L3NtYy9zbWNfd3IuYy02NTgtXHRcdFx0XHQgICAgbG5rLVx1MDAzZXdyX3J4X2J1ZmxlbiAqIGxuay1cdTAwM2V3cl9yeF9jbnQsXG5uZXQvc21jL3NtY193ci5jLTY1OS1cdFx0XHRcdCAgICBETUFfRlJPTV9ERVZJQ0UpO1xubmV0L3NtYy9zbWNfd3IuYzo2NjA6XHRcdGxuay1cdTAwM2V3cl9yeF9kbWFfYWRkciA9IDA7XG5uZXQvc21jL3NtY193ci5jLTY2MS1cdH1cbi0tXG5uZXQvc21jL3NtY193ci5jPTg1NT1pbnQgc21jX3dyX2NyZWF0ZV9saW5rKHN0cnVjdCBzbWNfbGluayAqbG5rKVxuLS1cbm5ldC9zbWMvc21jX3dyLmMtODYxLVx0bG5rLVx1MDAzZXdyX3J4X2lkID0gMDtcbm5ldC9zbWMvc21jX3dyLmM6ODYyOlx0bG5rLVx1MDAzZXdyX3J4X2RtYV9hZGRyID0gaWJfZG1hX21hcF9zaW5nbGUoXG5uZXQvc21jL3NtY193ci5jLTg2My1cdFx0aWJkZXYsIGxuay1cdTAwM2V3cl9yeF9idWZzLFx0bG5rLVx1MDAzZXdyX3J4X2J1ZmxlbiAqIGxuay1cdTAwM2V3cl9yeF9jbnQsXG5uZXQvc21jL3NtY193ci5jLTg2NC1cdFx0RE1BX0ZST01fREVWSUNFKTtcbm5ldC9zbWMvc21jX3dyLmM6ODY1Olx0aWYgKGliX2RtYV9tYXBwaW5nX2Vycm9yKGliZGV2LCBsbmstXHUwMDNld3JfcnhfZG1hX2FkZHIpKSB7XG5uZXQvc21jL3NtY193ci5jOjg2NjpcdFx0bG5rLVx1MDAzZXdyX3J4X2RtYV9hZGRyID0gMDtcbm5ldC9zbWMvc21jX3dyLmMtODY3LVx0XHRyYyA9IC1FSU87XG4tLVxubmV0L3NtYy9zbWNfd3IuYy05MjYtXHR9XG5uZXQvc21jL3NtY193ci5jOjkyNzpcdGliX2RtYV91bm1hcF9zaW5nbGUoaWJkZXYsIGxuay1cdTAwM2V3cl9yeF9kbWFfYWRkcixcbm5ldC9zbWMvc21jX3dyLmMtOTI4LVx0XHRcdCAgICBsbmstXHUwMDNld3JfcnhfYnVmbGVuICogbG5rLVx1MDAzZXdyX3J4X2NudCxcbm5ldC9zbWMvc21jX3dyLmMtOTI5LVx0XHRcdCAgICBETUFfRlJPTV9ERVZJQ0UpO1xubmV0L3NtYy9zbWNfd3IuYzo5MzA6XHRsbmstXHUwMDNld3JfcnhfZG1hX2FkZHIgPSAwO1xubmV0L3NtYy9zbWNfd3IuYy05MzEtb3V0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTAxMgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGB3cl9yeF9idWZzYCBBbGxvY2F0aW9uKioKCk9rYXksIHNvIGBsbmstJmd0O3dyX3J4X2J1ZnNgIGlzIG1hcHBlZC4gVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIE15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHRyYWNlIGJhY2sgYW5kIGRldGVybWluZSAqd2hlcmUqIHRoaXMgYHdyX3J4X2J1ZnNgIGJ1ZmZlciBpdHNlbGYgaXMgYWN0dWFsbHkgYWxsb2NhdGVkLiBLbm93aW5nIHRoZSBhbGxvY2F0aW9uIGNvbnRleHQgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UsIHBvdGVudGlhbCBib3R0bGVuZWNrcywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIG9yaWdpbiBvZiB0aGlzIHBhcnRpY3VsYXIgbWVtb3J5IGJsb2NrLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBjb2RlIHJlYWRpbHkgcmV2ZWFscyBpdHMgYWxsb2NhdGlvbiBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d3JfcnhfYnVmcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2NvcmUuaD05Nz1zdHJ1Y3Qgc21jX2xpbmsge1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuaC0xMjctXG5uZXQvc21jL3NtY19jb3JlLmg6MTI4Olx0dThcdFx0XHQqd3JfcnhfYnVmcztcdC8qIFdSIHJlY3YgcGF5bG9hZCBidWZmZXJzICovXG5uZXQvc21jL3NtY19jb3JlLmgtMTI5LVx0c3RydWN0IGliX3JlY3Zfd3JcdCp3cl9yeF9pYnM7XHQvKiBXUiByZWN2IG1ldGEgZGF0YSAqL1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuaC0xMzUtXHRcdFx0XHRcdFx0ICovXG5uZXQvc21jL3NtY19jb3JlLmg6MTM2Olx0ZG1hX2FkZHJfdFx0XHR3cl9yeF9kbWFfYWRkcjtcdC8qIERNQSBhZGRyZXNzIG9mIHdyX3J4X2J1ZnMgKi9cbm5ldC9zbWMvc21jX2NvcmUuaC0xMzctXHRkbWFfYWRkcl90XHRcdHdyX3J4X3YyX2RtYV9hZGRyOyAvKiBETUEgYWRkcmVzcyBvZiB2MiByeCBidWYqL1xuLS1cbm5ldC9zbWMvc21jX3dyLmM9NDMwPXN0YXRpYyBpbmxpbmUgdm9pZCBzbWNfd3JfcnhfZGVtdWx0aXBsZXgoc3RydWN0IGliX3djICp3Yylcbi0tXG5uZXQvc21jL3NtY193ci5jLTQ0MS1cdGluZGV4ID0gZG9fZGl2KHRlbXBfd3JfaWQsIGxpbmstXHUwMDNld3JfcnhfY250KTtcbm5ldC9zbWMvc21jX3dyLmM6NDQyOlx0d3JfcnggPSAoc3RydWN0IHNtY193cl9yeF9oZHIgKikobGluay1cdTAwM2V3cl9yeF9idWZzICYjNDM7IGluZGV4ICogbGluay1cdTAwM2V3cl9yeF9idWZsZW4pO1xubmV0L3NtYy9zbWNfd3IuYy00NDMtXHRoYXNoX2Zvcl9lYWNoX3Bvc3NpYmxlKHNtY193cl9yeF9oYXNoLCBoYW5kbGVyLCBsaXN0LCB3cl9yeC1cdTAwM2V0eXBlKSB7XG4tLVxubmV0L3NtYy9zbWNfd3IuYz02OTM9dm9pZCBzbWNfd3JfZnJlZV9saW5rX21lbShzdHJ1Y3Qgc21jX2xpbmsgKmxuaylcbi0tXG5uZXQvc21jL3NtY193ci5jLTcyMC1cdGxuay1cdTAwM2V3cl90eF9idWZzID0gTlVMTDtcbm5ldC9zbWMvc21jX3dyLmM6NzIxOlx0a2ZyZWUobG5rLVx1MDAzZXdyX3J4X2J1ZnMpO1xubmV0L3NtYy9zbWNfd3IuYzo3MjI6XHRsbmstXHUwMDNld3JfcnhfYnVmcyA9IE5VTEw7XG5uZXQvc21jL3NtY193ci5jLTcyMy19XG4tLVxubmV0L3NtYy9zbWNfd3IuYz03NDE9aW50IHNtY193cl9hbGxvY19saW5rX21lbShzdHJ1Y3Qgc21jX2xpbmsgKmxpbmspXG4tLVxubmV0L3NtYy9zbWNfd3IuYy03NDctXHRcdGdvdG8gbm9fbWVtO1xubmV0L3NtYy9zbWNfd3IuYzo3NDg6XHRsaW5rLVx1MDAzZXdyX3J4X2J1ZnMgPSBrY2FsbG9jKGxpbmstXHUwMDNlbWF4X3JlY3Zfd3IsIGxpbmstXHUwMDNld3JfcnhfYnVmbGVuLFxubmV0L3NtYy9zbWNfd3IuYy03NDktXHRcdFx0XHQgICBHRlBfS0VSTkVMKTtcbm5ldC9zbWMvc21jX3dyLmM6NzUwOlx0aWYgKCFsaW5rLVx1MDAzZXdyX3J4X2J1ZnMpXG5uZXQvc21jL3NtY193ci5jLTc1MS1cdFx0Z290byBub19tZW1fd3JfdHhfYnVmcztcbi0tXG5uZXQvc21jL3NtY193ci5jLTc1My1cdGlmICghbGluay1cdTAwM2V3cl90eF9pYnMpXG5uZXQvc21jL3NtY193ci5jOjc1NDpcdFx0Z290byBub19tZW1fd3JfcnhfYnVmcztcbm5ldC9zbWMvc21jX3dyLmMtNzU1LVx0bGluay1cdTAwM2V3cl9yeF9pYnMgPSBremFsbG9jX29ianMobGluay1cdTAwM2V3cl9yeF9pYnNbMF0sIGxpbmstXHUwMDNlbWF4X3JlY3Zfd3IpO1xuLS1cbm5ldC9zbWMvc21jX3dyLmMtODIwLVx0a2ZyZWUobGluay1cdTAwM2V3cl90eF9pYnMpO1xubmV0L3NtYy9zbWNfd3IuYzo4MjE6bm9fbWVtX3dyX3J4X2J1ZnM6XG5uZXQvc21jL3NtY193ci5jOjgyMjpcdGtmcmVlKGxpbmstXHUwMDNld3JfcnhfYnVmcyk7XG5uZXQvc21jL3NtY193ci5jLTgyMy1ub19tZW1fd3JfdHhfYnVmczpcbi0tXG5uZXQvc21jL3NtY193ci5jPTg1NT1pbnQgc21jX3dyX2NyZWF0ZV9saW5rKHN0cnVjdCBzbWNfbGluayAqbG5rKVxuLS1cbm5ldC9zbWMvc21jX3dyLmMtODYyLVx0bG5rLVx1MDAzZXdyX3J4X2RtYV9hZGRyID0gaWJfZG1hX21hcF9zaW5nbGUoXG5uZXQvc21jL3NtY193ci5jOjg2MzpcdFx0aWJkZXYsIGxuay1cdTAwM2V3cl9yeF9idWZzLFx0bG5rLVx1MDAzZXdyX3J4X2J1ZmxlbiAqIGxuay1cdTAwM2V3cl9yeF9jbnQsXG5uZXQvc21jL3NtY193ci5jLTg2NC1cdFx0RE1BX0ZST01fREVWSUNFKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAzMjcKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgRGF0YSBDb3JydXB0aW9uIEJ1ZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbGluay0mZ3Q7d3JfcnhfYnVmc2AgYWxsb2NhdGlvbi4gSXQmIzM5O3MgYWxsb2NhdGVkIHVzaW5nIGBrY2FsbG9jYCwgbWVhbmluZyBpdCYjMzk7cyBpbml0aWFsaXplZCB0byB6ZXJvLiBUaGlzIGlzIGNydWNpYWwuIElmIHdlIGdldCBhIHNob3J0IG1lc3NhZ2UsIHRoZSByZW1haW5pbmcgYnl0ZXMgaW4gdGhlIGJ1ZmZlciAqYXJlbiYjMzk7dCogdW5pbml0aWFsaXplZCBnYXJiYWdlOyB0aGV5JiMzOTtyZSBlaXRoZXIgemVyb2VzIG9yIGxlZnRvdmVyIGRhdGEgZnJvbSBwcmV2aW91cyBtZXNzYWdlcy4gVGhpcyBjaGFuZ2VzIHRoZSB3aG9sZSBwaWN0dXJlLgoKVGhlcmVmb3JlLCB0aGUgcHJvYmxlbSBpc24mIzM5O3QgYWJvdXQgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgdGhhdCYjMzk7cyBub3QgdGhlIGJ1Zy4gVGhlIHBhdGNoIG11c3QgYmUgYWRkcmVzc2luZyBkYXRhIGNvcnJ1cHRpb24gZHVlIHRvIGEgcmFjZS4gQSBzaGFyZWQgcmVjZWl2ZSBidWZmZXIgaXMgYmVpbmcgb3ZlcndyaXR0ZW4gYnkgYSBuZXcgbWVzc2FnZSBiZWZvcmUgdGhlIG9sZCBvbmUgaXMgZnVsbHkgcHJvY2Vzc2VkLiBJdCYjMzk7cyBhIGNsYXNzaWMgbG9naWMgYnVnLCBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIHRoZSB3b3JrZXIgdGhyZWFkIGVuZHMgdXAgcmVhZGluZyB0aGUgbmV3LCBwb3RlbnRpYWxseSBpbmNvbXBsZXRlLCBkYXRhIGluc3RlYWQgb2YgdGhlIGRhdGEgaXQgd2FzIGV4cGVjdGluZy4gS0FTQU4gcHJvYmFibHkgaXNuJiMzOTt0IGZsYWdnaW5nIHRoaXMgYmVjYXVzZSwgdGVjaG5pY2FsbHksIHRoZSByZWFkcyBhcmUgKndpdGhpbiogdGhlIGFsbG9jYXRlZCBidWZmZXIuIFRoZSBidWZmZXImIzM5O3Mgc2l6ZSwgYFNNQ19XUl9CVUZfVjJfU0laRWAsIGFuZCB0aGUgcmVhZCBsaW1pdCwgYFNNQ19MTENfUktFWVNfUEVSX01TR19WMmAsIGFyZSBib3RoIHdpdGhpbiBib3VuZHMuCgpXYWl0IGEgc2Vjb25kLCB0aG91Z2guIEFyZSB3ZSAqYWJzb2x1dGVseSogc3VyZSBhYm91dCB0aGF0PyBMZXQmIzM5O3MgZG91YmxlLWNoZWNrLiBUaGUgY29kZSB1c2VzIGBtaW5fdGAgdG8gZGV0ZXJtaW5lIHRoZSByZWFkIGxpbWl0LCBhbmQgSSBzZWUgYFNNQ19MTENfUktFWVNfUEVSX01TR19WMmAgaW4gdGhlcmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB2YWx1ZSBpcyB3aGF0IEkgdGhpbmsgaXQgaXMsIHRoYXQmIzM5O3MgaG93IHdlIGZpbmQgb3V0IGlmIGl0IGlzIHBvdGVudGlhbGx5IHJlYWRpbmcgb3V0IG9mIGJvdW5kcy4gVGhlIGJlaGF2aW9yIG9mIHRoaXMgaXMgYmFzZWQgb24gdGhpcyBudW1iZXIsIHRpbWUgdG8gY29uZmlybS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBTTUNfTExDX1JLRVlTX1BFUl9NU0dfVjImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19sbGMuYz0xMzk9c3RydWN0IHNtY19ybWJfcnRva2VuIHtcbi0tXG5uZXQvc21jL3NtY19sbGMuYy0xNTAtI2RlZmluZSBTTUNfTExDX1JLRVlTX1BFUl9NU0dcdFx0M1xubmV0L3NtYy9zbWNfbGxjLmM6MTUxOiNkZWZpbmUgU01DX0xMQ19SS0VZU19QRVJfTVNHX1YyXHQyNTVcbm5ldC9zbWMvc21jX2xsYy5jLTE1Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzExNTAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1MTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBCdWZmZXIgT3ZlcmZsb3dzIGluIFNNQyBMaW5rIEFkZGl0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYHNtY19sbGNfc2F2ZV9hZGRfbGlua19ya2V5c2AgZnVuY3Rpb24gYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuIElmIGBTTUNfTExDX1JLRVlTX1BFUl9NU0dfVjJgIGlzIHNldCB0byAyNTUsIHRoZW4gYG1heGAgY2FuIGFsc28gYmUgMjU1IHdpdGhpbiB0aGUgbG9vcC4gVGhlIGNvZGUgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgYGV4dC0mZ3Q7cnRgIGFycmF5LCByZWFkaW5nIGBtYXhgIG51bWJlciBvZiBlbGVtZW50cy4gRWFjaCBvZiB0aG9zZSBlbGVtZW50cyBpcyBhIGBzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfY29udF9ydGAuCgpOb3csIGVhY2ggb2YgdGhlc2UgYHJ0YCBlbGVtZW50cyBpcyAxNiBieXRlczogdHdvIDMyLWJpdCBrZXlzIGFuZCBhIDY0LWJpdCB2aXJ0dWFsIGFkZHJlc3MuIElmIGBtYXhgIGlzIDI1NSwgdGhhdCBtZWFucyB0aGUgY29kZSBpcyBnb2luZyB0byByZWFkIDI1NSAqIDE2ID0gNDA4MCBieXRlcy4gSG93ZXZlciwgd2hlbiB3ZSBhZGQgdGhlIG9mZnNldCB0byB0aGUgc3RydWN0LCB0aGUgYWN0dWFsIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIHRoZSBhcnJheSBpcyBhdCAxNiwgcmVzdWx0aW5nIGluIGEgcmVhZCBvZiA0MDk2IGJ5dGVzIGZyb20gdGhlIGBleHRgIHN0cnVjdHVyZS4KCk5vdywgd2hlcmUgZG9lcyBgZXh0YCBsaXZlPyBXZWxsLCBpdCYjMzk7cyBjYWxjdWxhdGVkIGFzIGBsbGNfbXNnICYjNDM7IFNNQ19XUl9UWF9TSVpFYC4gVGhlIHZhbHVlIG9mIGBsbGNfbXNnYCBpcyBlZmZlY3RpdmVseSBgbGdyLSZndDt3cl9yeF9idWZfdjIgJiM0MzsgU01DX1dSX1RYX1NJWkVgLiBgbGdyLSZndDt3cl9yeF9idWZfdjJgIGlzIGFsbG9jYXRlZCB3aXRoIGBTTUNfV1JfQlVGX1YyX1NJWkVgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYFNNQ19XUl9CVUZfVjJfU0laRWAgaXMgbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gdGhlIGJ1ZmZlciBhbGxvY2F0ZWQgZm9yIHRoZSBgcnRgIGFycmF5IHdpdGhpbiBgZXh0YCBhbmQgYFNNQ19XUl9UWF9TSVpFYCB3aWxsIG5vdCBjYXVzZSBhbiBvdmVyZmxvdy4gSWYgbm90LCB0aGlzIGxvb3AgY291bGQgcG90ZW50aWFsbHkgcmVhZCBiZXlvbmQgdGhlIGFsbG9jYXRlZCBidWZmZXIsIG9wZW5pbmcgdGhlIGRvb3IgdG8gYSBidWZmZXIgb3ZlcmZsb3cuIE5lZWQgdG8gY2hlY2sgd2hhdCBgU01DX1dSX0JVRl9WMl9TSVpFYCBhY3R1YWxseSByZXNvbHZlcyB0by4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMDM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBTTUNfV1JfQlVGX1YyX1NJWkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19jb3JlLmg9NTE9ZW51bSBzbWNfbGlua19zdGF0ZSB7XHRcdFx0LyogcG9zc2libGUgc3RhdGVzIG9mIGEgbGluayAqL1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuaC01OC0jZGVmaW5lIFNNQ19XUl9CVUZfU0laRVx0XHQ0OFx0Lyogc2l6ZSBvZiB3b3JrIHJlcXVlc3QgYnVmZmVyICovXG5uZXQvc21jL3NtY19jb3JlLmg6NTk6I2RlZmluZSBTTUNfV1JfQlVGX1YyX1NJWkVcdDgxOTJcdC8qIHNpemUgb2YgdjIgd29yayByZXF1ZXN0IGJ1ZmZlciAqL1xubmV0L3NtYy9zbWNfY29yZS5oLTYwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjI2OAoJCQkJCQkJb3V0cHV0OiAzMDYKCQkJCQkJCXRob3VnaHRzOiAyMzc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBTTUMtUnYyIExMQyBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgSXNzdWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2gsIHdoaWxlIGFkZHJlc3NpbmcgYSBjcml0aWNhbCByYWNlIGNvbmRpdGlvbiwgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgYXZlbnVlcyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MgdGhhdCB3b3VsZCB3YXJyYW50IEtNU0FOIHNjcnV0aW55LiBIZXJlJiMzOTtzIG15IHJlYXNvbmluZywgcGllY2UgYnkgcGllY2U6CgpGaXJzdCwgYFNNQ19XUl9CVUZfVjJfU0laRWAgaXMgODE5MiBieXRlcywgYSBmYWN0LiBBbmQgc2luY2UgNDA5NiBieXRlcyBpcyBtdWNoIGxlc3MgdGhhbiB0aGF0LCBhbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZCB3aXRoaW4gdGhhdCBjb250ZXh0IHdvdWxkIGF0IHdvcnN0IHJlYWQgZnJvbSB6ZXJvZWQgbWVtb3J5LiBQcmV2aW91c2x5IHRoZSBjb2RlIHJlbGllZCBvbiByZWFkaW5nIHRoZSBzaGFyZWQgRE1BIGJ1ZmZlci4gSXQmIzM5O3MgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgLiBTbywgaWYgYSBwZWVyIHNlbnQgYSBzaG9ydCBtZXNzYWdlIHdpdGggbGFyZ2UgYG51bV9ya2V5c2AsIHRoZSBleHRyYSBzcGFjZSByZWFkIHdvdWxkIGJlIHplcm9lZCBkYXRhLiBJJiMzOTttIHNhdGlzZmllZCB0aGF0IHRoaXMgaXNuJiMzOTt0IGEgdnVsbmVyYWJpbGl0eS4gVGhlIGluaXRpYWwgcmVhZHMgYXJlIHJlYWRpbmcgemVyb3Mgbm90IHJhbmRvbSB2YWx1ZXMuIGBzbWNfcnRva2VuX3NldGAgd291bGQgY29ycmVjdGx5IHNldCB0aGUgcnRva2VuIHRvIDAgYW5kIHRoZSBjb2RlIHdvdWxkIHJ1biB3aXRob3V0IGFuIGVycm9yLgoKVGhlIHBhdGNoIGludHJvZHVjZXMgYm91bmRzIGNoZWNrcyB0byByZXN0cmljdCByZWFkcyB0byB0aGUgYWN0dWFsIGxlbmd0aCBvZiB0aGUgcmVjZWl2ZWQgZGF0YS4gVGhlIGNvZGUgbm93IHVzZXMgYG1pbl90YCB0byBsaW1pdCByZWFkcyB0byB0aGUgcmVjZWl2ZWQgbWVzc2FnZSBzaXplLiBUaGlzIGlzIGEgdmVyeSBjbGVhciBpbXByb3ZlbWVudCwgcHJldmVudGluZyByZWFkcyBwYXN0IHRoZSBib3VuZGFyaWVzIG9mIHRoZSByZWNlaXZlZCBkYXRhLCBub3QgdGhlIGFsbG9jYXRlZCBidWZmZXIuIFRoaXMgZW5zdXJlcyB0aGF0IGV2ZW4gaWYgYSBtYWxpY2lvdXMgcGVlciBzZW5kcyBhIHRydW5jYXRlZCBtZXNzYWdlIHdpdGggYSBsYXJnZSBgbnVtX3JrZXlzYCB2YWx1ZSwgdGhlIGNvZGUgd29uJiMzOTt0IGF0dGVtcHQgdG8gcmVhZCBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlY2F1c2UgYWxsIG1lbW9yeSB1cCB0byB0aGUgZW5kIG9mIHRoZSBidWZmZXIgaXMgY29uc2lkZXJlZCBpbml0aWFsaXplZC4KClNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGVuc3VyZXMgdGhhdCB0aGUgcmVhZCBkb2VzbiYjMzk7dCBnbyBiZXlvbmQgdGhlIHJlY2VpdmVkIG1lc3NhZ2UgbGVuZ3RoLCB3aGljaCBpcyBnb29kLiBLTVNBTiYjMzk7cyBjb25jZXJucyBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBkb24mIzM5O3QgYXBwbHkgaGVyZS4gRXZlbiBpZiB0aGUgbmV0d29yayBkZXZpY2Ugd3JvdGUgdG8gdGhlIGJ1ZmZlciB2aWEgRE1BLCB0aGUgbWVtb3J5IGlzIGNvbnNpZGVyZWQgaW5pdGlhbGl6ZWQuIEtNU0FOJiMzOTtzIGdvaW5nIHRvIGJlIGhhcHB5IGJlY2F1c2Ugb2YgYGt6YWxsb2NgLgoKTmV4dCwgSSBleGFtaW5lZCBgc21jX2xsY19ybXRfZGVsZXRlX3JrZXlgLiBJdCB1c2VzIHRoZSBzYW1lIGJvdW5kcyBjaGVjayBhcHByb2FjaC4gVGhlIHNhbWUgcmVhc29uaW5nIGFwcGxpZXMgaGVyZSBhcyB3ZWxsLiBUaGUgY2hlY2tzIHByZXZlbnQgcmVhZGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlICpyZWNlaXZlZCogZGF0YS4KClRoZSBjcml0aWNhbCBwb2ludCBpcyB0aGF0IHRoZXNlIHN0cnVjdHVyZXMgYXJlbiYjMzk7dCBzZW50IHRvIHVzZXIgc3BhY2UuIEl0IGlzIGtlcm5lbC10by1rZXJuZWwgY29tbXVuaWNhdGlvbiBvdmVyIFJvQ0UvSUIuIFRoZSBtZXNzYWdlcyBhcmUgc2VudCB0byB0aGUgcGVlciBrZXJuZWwsIG5vdCB1c2VyIHNwYWNlLiBLTVNBTiYjMzk7cyBnb2luZyB0byBiZSB0cmlnZ2VyZWQgb24gbGVha3MgdG8gdXNlciBzcGFjZS4gS01TQU4gd291bGQgZGV0ZWN0IGEgcmVtb3RlIGluZm8tbGVhayBpZiB0aGUgYnVmZmVyIHdhcyB1bmluaXRpYWxpemVkLiBUaGVzZSBidWZmZXJzIGFyZSB6ZXJvZWQgYmVmb3JlIGJlaW5nIHNlbnQuIEFuZCB0aGUgcGF0Y2ggZG9lc24mIzM5O3QgY2hhbmdlIHRoYXQuCgpUaGUgcGF0Y2ggY2hhbmdlcyBgc21jX2xsY19lbnF1ZXVlYCB0byBhbGxvY2F0ZSBgcWVudHJ5YCB3aXRoIGBrbWFsbG9jX2ZsZXhgLiBXaGlsZSBga21hbGxvY19mbGV4YCBkb2VzbiYjMzk7dCB6ZXJvIHRoZSBtZW1vcnksIHRoZSBwYXRjaCBleHBsaWNpdGx5IGluaXRpYWxpemVzIGFsbCBmaWVsZHMuIEFuZCBJIGNoZWNrZWQgdGhlIGBzdHJ1Y3Qgc21jX2xsY19xZW50cnlgIHBhZGRpbmcuIFRoZXJlIGFyZSA2IGJ5dGVzIG9mIHBhZGRpbmcuIFRoZSBgcWVudHJ5YCBpcyB1c2VkIGludGVybmFsbHkgYnkgdGhlIHdvcmtlciB0aHJlYWQgYW5kIG5ldmVyIGV4cG9zZWQgdG8gdXNlcnNwYWNlLiBUaG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgYnl0ZXMgYXJlIG5vdCBsZWFrZWQgYmVjYXVzZSB0aGUgY29kZSBpcyBpbnRlcm5hbC4KCkFmdGVyIGNhcmVmdWxseSBjaGVja2luZyBhbGwgdXNlcywgdGhlIGBxZW50cnlgIHN0cnVjdHVyZSBpcyB1c2VkIHN0cmljdGx5IGFzIGFuIGludGVybmFsIGRhdGEgc3RydWN0dXJlIGFuZCB0aGUgY29udGVudHMgYXJlIHVzZWQgb25seSB3aXRoaW4gdGhlIGtlcm5lbC4gYGFkZF9sbGNgIGlzIHVzZWQgaW4gYHNtY19sbGNfc3J2X2FkZF9saW5rYC4gSXQgc2ltcGx5IHJlYWRzIGZpZWxkcyBmcm9tIGBxZW50cnktJmd0O21zZ2AsIHdoaWNoIGFyZSBpbml0aWFsaXplZC4gVGhlbiBpbiBgc21jX2xsY19wcm9jZXNzX2NsaV9hZGRfbGlua2AgdGhlIGJvZHkgaXMgcmVhZCB2aWEgYHFlbnRyeS0mZ3Q7Ym9keWAuCgpUaGUgY2FsY3VsYXRpb24gb2YgYHNtY19sbGNfbWF4X2JvZHlfbGVuYCBpcyBqdXN0IGEgY2FwIG9uIHRoZSBtYXhpbXVtIGJvZHkgbGVuZ3RoLiBUaGlzIHByZXZlbnRzIG92ZXItYWxsb2NhdGlvbnMgd2hlbiBhIHZlcnkgbGFyZ2UgYGJvZHlfbGVuYCBpcyByZWNlaXZlZC4gSXQgaGVscHMgd2l0aCBzYWZldHkuIEl0JiMzOTtzIGEgc2Vuc2libGUgY2hlY2suCgpJbiBlc3NlbmNlLCB0aGlzIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gd2hlcmUgYSBzaGFyZWQgcmVjZWl2ZSBidWZmZXIgaXMgb3ZlcndyaXR0ZW4gYmVmb3JlIGl0JiMzOTtzIHByb2Nlc3NlZCwgYW5kIGluIGRvaW5nIHNvLCBpdCBpbnRyb2R1Y2VzIGEgYHFlbnRyeWAgc3RydWN0dXJlLiBUaGUgZGF0YSBpbiBgcWVudHJ5YCBpcyBjb3BpZWQgZnJvbSB0aGUgc2hhcmVkIGJ1ZmZlciBhbmQgdGhlIGNvZGUgY29ycmVjdGx5IHZhbGlkYXRlcyB0aGUgbGVuZ3RoIG9mIHRoZSByZWNlaXZlZCBtZXNzYWdlLiBJdCBmaXhlcyB0aGUgcmFjZSBieSBjb3B5aW5nIHRoZSByZWxldmFudCBkYXRhIGludG8gYSBgcWVudHJ5YCBzdHJ1Y3R1cmUuIFRoZSBwYXRjaCBhbHNvIGFkZHMgYm91bmRzIGNoZWNrcyB0byBlbnN1cmUgdGhhdCB0aGUgcGFyc2luZyBkb2VzbiYjMzk7dCByZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgZGF0YS4gVGhlIGRhdGEgcGFzdCB0aGUgbWVzc2FnZSBib3VuZGFyeSwgaWYgcmVhZCwgaXMgYWxyZWFkeSB6ZXJvZWQgKG9yIG9sZCBhbmQgaW5pdGlhbGl6ZWQpLiBUaGUgbmV3IGludGVybmFsIHN0cnVjdHVyZXMgYXJlIGFsbCBpbml0aWFsaXplZC4gVGhlIHBhZGRpbmcgd2l0aGluIHRoZSBgcWVudHJ5YCBpcyBuZXZlciBsZWFrZWQgYW5kIHRoZSBzaGFyZWQgRE1BIGJ1ZmZlciBpcyBwcm9wZXJseSBpbml0aWFsaXplZC4gVGhlcmUgYXJlIG5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQuIFRoZSB3b3JrZXIgdGhyZWFkIHdpbGwgb25seSByZWFkIGluaXRpYWxpemVkIGRhdGEuIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4KClRoZXJlZm9yZSwgdGhlIGFwcHJvcHJpYXRlIGFjdGlvbiBpcyBgTmVlZHNLTVNBTj1mYWxzZWAgd2l0aCB0aGUgYWJvdmUgcmVhc29uaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAwMzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIFNNQy1SdjIgTExDIG1lc3NhZ2UgaGFuZGxpbmcgd2hlcmUgYSBzaGFyZWQgRE1BIHJlY2VpdmUgYnVmZmVyIChgd3JfcnhfYnVmX3YyYCkgY291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgYSBuZXcgaW5jb21pbmcgbWVzc2FnZSBiZWZvcmUgdGhlIHdvcmtlciB0aHJlYWQgcHJvY2Vzc2VkIHRoZSBwcmV2aW91cyBvbmUuIEl0IHJlc29sdmVzIHRoaXMgYnkgY29weWluZyB0aGUgc3BpbGxvdmVyIGJ5dGVzIG9mIHRoZSBtZXNzYWdlIGludG8gYSBmbGV4aWJsZSBhcnJheSBpbiBgc3RydWN0IHNtY19sbGNfcWVudHJ5YCBhdCB0aGUgdGltZSBvZiByZWNlcHRpb24uIEl0IGFsc28gYWRkcyBib3VuZHMgY2hlY2tzIHRvIGVuc3VyZSBtZXNzYWdlIHBhcnNpbmcgZG9lcyBub3QgcmVhZCBwYXN0IHRoZSBhY3R1YWwgcmVjZWl2ZWQgbGVuZ3RoLlxuXG5CZWZvcmUgdGhpcyBwYXRjaCwgcmVhZGluZyBwYXN0IHRoZSByZWNlaXZlZCBsZW5ndGggd291bGQgcmVhZCBmcm9tIHRoZSByZW1haW5kZXIgb2YgdGhlIHJlY2VpdmUgYnVmZmVyLiBTaW5jZSB0aGlzIGJ1ZmZlciBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AgKG9yIGBrY2FsbG9jYCksIHRoZSBtZW1vcnkgd2FzIHplcm8taW5pdGlhbGl6ZWQsIG1lYW5pbmcgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgd2FzIGFjY2Vzc2VkLiBcblxuVGhlIG5ld2x5IGludHJvZHVjZWQgYHN0cnVjdCBzbWNfbGxjX3FlbnRyeWAgaXMgc3RyaWN0bHkgYW4gaW50ZXJuYWwga2VybmVsIHN0cnVjdHVyZSB1c2VkIGZvciBxdWV1aW5nIG1lc3NhZ2VzIHRvIGEgd29ya2VyIHRocmVhZC4gSXQgaXMgbmV2ZXIgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3Igc2VudCBvdmVyIHRoZSBuZXR3b3JrLCBzbyBhbnkgc3RydWN0IHBhZGRpbmcgY2Fubm90IGNhdXNlIGFuIGluZm8tbGVhay4gRnVydGhlcm1vcmUsIGFsbCBmaWVsZHMgYW5kIHRoZSBmbGV4aWJsZSBhcnJheSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBkdXJpbmcgYWxsb2NhdGlvbiBpbiBgc21jX2xsY19lbnF1ZXVlYC4gTWVzc2FnZXMgZ2VuZXJhdGVkIGxvY2FsbHkgYW5kIHNlbnQgb3ZlciB0aGUgbmV0d29yayBhcmUgZnVsbHkgemVyb2VkIHVzaW5nIGBtZW1zZXRgIGJlZm9yZSB0cmFuc21pc3Npb24uXG5cblNpbmNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2VzIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgcGF0Y2gsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBTTUMtUnYyIExMQyBtZXNzYWdlIGhhbmRsaW5nIHdoZXJlIGEgc2hhcmVkIERNQSByZWNlaXZlIGJ1ZmZlciAoYHdyX3J4X2J1Zl92MmApIGNvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGEgbmV3IGluY29taW5nIG1lc3NhZ2UgYmVmb3JlIHRoZSB3b3JrZXIgdGhyZWFkIHByb2Nlc3NlZCB0aGUgcHJldmlvdXMgb25lLiBJdCByZXNvbHZlcyB0aGlzIGJ5IGNvcHlpbmcgdGhlIHNwaWxsb3ZlciBieXRlcyBvZiB0aGUgbWVzc2FnZSBpbnRvIGEgZmxleGlibGUgYXJyYXkgaW4gYHN0cnVjdCBzbWNfbGxjX3FlbnRyeWAgYXQgdGhlIHRpbWUgb2YgcmVjZXB0aW9uLiBJdCBhbHNvIGFkZHMgYm91bmRzIGNoZWNrcyB0byBlbnN1cmUgbWVzc2FnZSBwYXJzaW5nIGRvZXMgbm90IHJlYWQgcGFzdCB0aGUgYWN0dWFsIHJlY2VpdmVkIGxlbmd0aC5cblxuQmVmb3JlIHRoaXMgcGF0Y2gsIHJlYWRpbmcgcGFzdCB0aGUgcmVjZWl2ZWQgbGVuZ3RoIHdvdWxkIHJlYWQgZnJvbSB0aGUgcmVtYWluZGVyIG9mIHRoZSByZWNlaXZlIGJ1ZmZlci4gU2luY2UgdGhpcyBidWZmZXIgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgIChvciBga2NhbGxvY2ApLCB0aGUgbWVtb3J5IHdhcyB6ZXJvLWluaXRpYWxpemVkLCBtZWFuaW5nIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdhcyBhY2Nlc3NlZC4gXG5cblRoZSBuZXdseSBpbnRyb2R1Y2VkIGBzdHJ1Y3Qgc21jX2xsY19xZW50cnlgIGlzIHN0cmljdGx5IGFuIGludGVybmFsIGtlcm5lbCBzdHJ1Y3R1cmUgdXNlZCBmb3IgcXVldWluZyBtZXNzYWdlcyB0byBhIHdvcmtlciB0aHJlYWQuIEl0IGlzIG5ldmVyIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yaywgc28gYW55IHN0cnVjdCBwYWRkaW5nIGNhbm5vdCBjYXVzZSBhbiBpbmZvLWxlYWsuIEZ1cnRoZXJtb3JlLCBhbGwgZmllbGRzIGFuZCB0aGUgZmxleGlibGUgYXJyYXkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgZHVyaW5nIGFsbG9jYXRpb24gaW4gYHNtY19sbGNfZW5xdWV1ZWAuIE1lc3NhZ2VzIGdlbmVyYXRlZCBsb2NhbGx5IGFuZCBzZW50IG92ZXIgdGhlIG5ldHdvcmsgYXJlIGZ1bGx5IHplcm9lZCB1c2luZyBgbWVtc2V0YCBiZWZvcmUgdHJhbnNtaXNzaW9uLlxuXG5TaW5jZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlcyBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGlzIHBhdGNoLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDI6NTc6NDcuMjIxMjg3OTc3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI4NDA3MzczODk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNNQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNtY19sbGNfY2xpX2FkZF9saW5rXCIsXG4gICAgXCJzbWNfbGxjX3Nydl9hZGRfbGlua1wiLFxuICAgIFwic21jX2xsY19hZGRfbGlua19sb2NhbFwiLFxuICAgIFwic21jX2xsY19zcnZfZGVsZXRlX2xpbmtfbG9jYWxcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gU01DLVJ2MiBMTEMgbWVzc2FnZSBoYW5kbGluZyB3aGVyZSBhIHNoYXJlZCBETUEgcmVjZWl2ZSBidWZmZXIgKGB3cl9yeF9idWZfdjJgKSBjb3VsZCBiZSBvdmVyd3JpdHRlbiBieSBhIG5ldyBpbmNvbWluZyBtZXNzYWdlIGJlZm9yZSB0aGUgd29ya2VyIHRocmVhZCBwcm9jZXNzZWQgdGhlIHByZXZpb3VzIG9uZS4gSXQgcmVzb2x2ZXMgdGhpcyBieSBjb3B5aW5nIHRoZSBzcGlsbG92ZXIgYnl0ZXMgb2YgdGhlIG1lc3NhZ2UgaW50byBhIGZsZXhpYmxlIGFycmF5IGluIGBzdHJ1Y3Qgc21jX2xsY19xZW50cnlgIGF0IHRoZSB0aW1lIG9mIHJlY2VwdGlvbi4gSXQgYWxzbyBhZGRzIGJvdW5kcyBjaGVja3MgdG8gZW5zdXJlIG1lc3NhZ2UgcGFyc2luZyBkb2VzIG5vdCByZWFkIHBhc3QgdGhlIGFjdHVhbCByZWNlaXZlZCBsZW5ndGguXFxuXFxuQmVmb3JlIHRoaXMgcGF0Y2gsIHJlYWRpbmcgcGFzdCB0aGUgcmVjZWl2ZWQgbGVuZ3RoIHdvdWxkIHJlYWQgZnJvbSB0aGUgcmVtYWluZGVyIG9mIHRoZSByZWNlaXZlIGJ1ZmZlci4gU2luY2UgdGhpcyBidWZmZXIgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgIChvciBga2NhbGxvY2ApLCB0aGUgbWVtb3J5IHdhcyB6ZXJvLWluaXRpYWxpemVkLCBtZWFuaW5nIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdhcyBhY2Nlc3NlZC4gXFxuXFxuVGhlIG5ld2x5IGludHJvZHVjZWQgYHN0cnVjdCBzbWNfbGxjX3FlbnRyeWAgaXMgc3RyaWN0bHkgYW4gaW50ZXJuYWwga2VybmVsIHN0cnVjdHVyZSB1c2VkIGZvciBxdWV1aW5nIG1lc3NhZ2VzIHRvIGEgd29ya2VyIHRocmVhZC4gSXQgaXMgbmV2ZXIgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3Igc2VudCBvdmVyIHRoZSBuZXR3b3JrLCBzbyBhbnkgc3RydWN0IHBhZGRpbmcgY2Fubm90IGNhdXNlIGFuIGluZm8tbGVhay4gRnVydGhlcm1vcmUsIGFsbCBmaWVsZHMgYW5kIHRoZSBmbGV4aWJsZSBhcnJheSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBkdXJpbmcgYWxsb2NhdGlvbiBpbiBgc21jX2xsY19lbnF1ZXVlYC4gTWVzc2FnZXMgZ2VuZXJhdGVkIGxvY2FsbHkgYW5kIHNlbnQgb3ZlciB0aGUgbmV0d29yayBhcmUgZnVsbHkgemVyb2VkIHVzaW5nIGBtZW1zZXRgIGJlZm9yZSB0cmFuc21pc3Npb24uXFxuXFxuU2luY2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZXMgb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBwYXRjaCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gU01DIExMQyBtZXNzYWdlIGVucXVldWVpbmcgd2hlcmUgbGFyZ2UgU01DLVJ2MiBtZXNzYWdlcyAobGlrZSBBRERfTElOSyBhbmQgREVMRVRFX1JLRVlfVjIpIHdlcmUgb3ZlcmZsb3dpbmcgdGhlIGFsbG9jYXRlZCBzbWNfbGxjX3FlbnRyeSBidWZmZXIuIEl0IGludHJvZHVjZXMgYSBmbGV4aWJsZSBhcnJheSBtZW1iZXIgdG8gZHluYW1pY2FsbHkgYWxsb2NhdGUgdGhlIGJ1ZmZlciBiYXNlZCBvbiB0aGUgbWVzc2FnZSBzaXplLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgU01DIExMQyBwcm9jZXNzaW5nIGxvZ2ljIGFuZCBpcyByZWFjaGFibGUgdmlhIEFGX1NNQyBzb2NrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMjo1Nzo0Ny4yMjEyOTU0NTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMDk4MzYwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDZmMmE4NjA5M2NkYTE0ZDZmNDdmZDk5N2JjZDUzYmVkMWUzZGIxZGVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMTkgMDI6NTc6NDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfbGxjLmMgYi9uZXQvc21jL3NtY19sbGMuY1xcbmluZGV4IDk1NGIyZmYxODE1YzIuLjM5M2FhMGFmMThkMWQgMTAwNjQ0XFxuLS0tIGEvbmV0L3NtYy9zbWNfbGxjLmNcXG4rKysgYi9uZXQvc21jL3NtY19sbGMuY1xcbkBAIC0xNTcsNiArMTU3LDcgQEAgc3RydWN0IHNtY19sbGNfbXNnX2NvbmZpcm1fcmtleSB7XFx0LyogdHlwZSAweDA2ICovXFxuIH07XFxuIFxcbiAjZGVmaW5lIFNNQ19MTENfREVMX1JLRVlfTUFYXFx0OFxcbisjZGVmaW5lIFNNQ19MTENfREVMX1JLRVlfVjJfSU5MSU5FXFx0OVxcbiAjZGVmaW5lIFNNQ19MTENfRkxBR19SS0VZX1JFVFJZXFx0MHgxMFxcbiAjZGVmaW5lIFNNQ19MTENfRkxBR19SS0VZX05FR1xcdDB4MjBcXG4gXFxuQEAgLTE3Nyw2ICsxNzgsMTUgQEAgc3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyIHtcXHQvKiB0eXBlIDB4MjkgKi9cXG4gXFx0X19iZTMyIHJrZXlbXTtcXG4gfTtcXG4gXFxuKy8qIHRoZSBsZWFkaW5nIHJrZXlzIG9mIGEgREVMRVRFX1JLRVlfVjIgZml0IGludG8gdW5pb24gc21jX2xsY19tc2cgKi9cXG4rc3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyX2lubGluZSB7XFx0LyogdHlwZSAweDI5ICovXFxuK1xcdHN0cnVjdCBzbWNfbGxjX2hkciBoZDtcXG4rXFx0dTggbnVtX3JrZXlzO1xcbitcXHR1OCBudW1faW52YWxfcmtleXM7XFxuK1xcdHU4IHJlc2VydmVkWzJdO1xcbitcXHRfX2JlMzIgcmtleVtTTUNfTExDX0RFTF9SS0VZX1YyX0lOTElORV07XFxuK307XFxuK1xcbiB1bmlvbiBzbWNfbGxjX21zZyB7XFxuIFxcdHN0cnVjdCBzbWNfbGxjX21zZ19jb25maXJtX2xpbmsgY29uZmlybV9saW5rO1xcbiBcXHRzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmsgYWRkX2xpbms7XFxuQEAgLTE4Niw2ICsxOTYsNyBAQCB1bmlvbiBzbWNfbGxjX21zZyB7XFxuIFxcbiBcXHRzdHJ1Y3Qgc21jX2xsY19tc2dfY29uZmlybV9ya2V5IGNvbmZpcm1fcmtleTtcXG4gXFx0c3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5IGRlbGV0ZV9ya2V5O1xcbitcXHRzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXlfdjJfaW5saW5lIGRlbGV0ZV9ya2V5X3YyO1xcbiBcXG4gXFx0c3RydWN0IHNtY19sbGNfbXNnX3Rlc3RfbGluayB0ZXN0X2xpbms7XFxuIFxcdHN0cnVjdCB7XFxuQEAgLTE5NCwxNSArMjA1LDI1IEBAIHVuaW9uIHNtY19sbGNfbXNnIHtcXG4gXFx0fSByYXc7XFxuIH07XFxuIFxcbitzdGF0aWNfYXNzZXJ0KFNNQ19MTENfREVMX1JLRVlfVjJfSU5MSU5FID09XFxuK1xcdCAgICAgIChzaXplb2YodW5pb24gc21jX2xsY19tc2cpIC1cXG4rXFx0ICAgICAgIG9mZnNldG9mKHN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92MiwgcmtleSkpIC9cXG4rXFx0ICAgICAgc2l6ZW9mKF9fYmUzMikpO1xcbitzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKHN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92Ml9pbmxpbmUsIHJrZXkpID09XFxuK1xcdCAgICAgIG9mZnNldG9mKHN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92MiwgcmtleSkpO1xcbitcXG4gI2RlZmluZSBTTUNfTExDX0ZMQUdfUkVTUFxcdFxcdDB4ODBcXG4gXFxuIHN0cnVjdCBzbWNfbGxjX3FlbnRyeSB7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG4gXFx0c3RydWN0IHNtY19saW5rICpsaW5rO1xcbitcXHR1MTYgYm9keV9sZW47XFxuIFxcdHVuaW9uIHNtY19sbGNfbXNnIG1zZztcXG4rXFx0dTggYm9keVtdIF9fY291bnRlZF9ieShib2R5X2xlbik7XFxuIH07XFxuIFxcbi1zdGF0aWMgdm9pZCBzbWNfbGxjX2VucXVldWUoc3RydWN0IHNtY19saW5rICpsaW5rLCB1bmlvbiBzbWNfbGxjX21zZyAqbGxjKTtcXG4rc3RhdGljIHZvaWQgc21jX2xsY19lbnF1ZXVlKHN0cnVjdCBzbWNfbGluayAqbGluaywgdW5pb24gc21jX2xsY19tc2cgKmxsYyxcXG4rXFx0XFx0XFx0ICAgIHUzMiBieXRlX2xlbik7XFxuIFxcbiBzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnNtY19sbGNfZmxvd19xZW50cnlfY2xyKHN0cnVjdCBzbWNfbGxjX2Zsb3cgKmZsb3cpXFxuIHtcXG5AQCAtOTk4LDE1ICsxMDE5LDIwIEBAIHN0YXRpYyBpbnQgc21jX2xsY19jbGlfY29uZl9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluayxcXG4gXFxuIHN0YXRpYyB2b2lkIHNtY19sbGNfc2F2ZV9hZGRfbGlua19ya2V5cyhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXFxuIFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBzbWNfbGluayAqbGlua19uZXcsXFxuLVxcdFxcdFxcdFxcdFxcdHU4ICpsbGNfbXNnKVxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnFlbnRyeSlcXG4ge1xcbitcXHRjb25zdCB1MzIgcnRfb2ZmID0gb2Zmc2V0b2Yoc3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rX3YyX2V4dCwgcnQpO1xcbiBcXHRzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfdjJfZXh0ICpleHQ7XFxuIFxcdHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyID0gbGluay1cXHUwMDNlbGdyO1xcbiBcXHRpbnQgbWF4LCBpO1xcbiBcXG4tXFx0ZXh0ID0gKHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua192Ml9leHQgKikobGxjX21zZyArXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgU01DX1dSX1RYX1NJWkUpO1xcbitcXHQvKiB0aGUgcmtleSBjb3VudCBpdHNlbGYgaXMgb25seSB0aGVyZSBpZiBlbm91Z2ggYnl0ZXMgYXJyaXZlZCAqL1xcbitcXHRpZiAocWVudHJ5LVxcdTAwM2Vib2R5X2xlbiBcXHUwMDNjIHJ0X29mZilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRleHQgPSAoc3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rX3YyX2V4dCAqKXFlbnRyeS1cXHUwMDNlYm9keTtcXG4gXFx0bWF4ID0gbWluX3QodTgsIGV4dC1cXHUwMDNlbnVtX3JrZXlzLCBTTUNfTExDX1JLRVlTX1BFUl9NU0dfVjIpO1xcbitcXHRtYXggPSBtaW5fdCh1MzIsIG1heCwgKHFlbnRyeS1cXHUwMDNlYm9keV9sZW4gLSBydF9vZmYpIC9cXG4rXFx0XFx0XFx0ICAgICAgc2l6ZW9mKGV4dC1cXHUwMDNlcnRbMF0pKTtcXG4gXFx0ZG93bl93cml0ZShcXHUwMDI2bGdyLVxcdTAwM2VybWJzX2xvY2spO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbWF4OyBpKyspIHtcXG4gXFx0XFx0c21jX3J0b2tlbl9zZXQobGdyLCBsaW5rLVxcdTAwM2VsaW5rX2lkeCwgbGlua19uZXctXFx1MDAzZWxpbmtfaWR4LFxcbkBAIC0xMDk5LDkgKzExMjUsNyBAQCBpbnQgc21jX2xsY19jbGlfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLCBzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnFlbnRyeSlcXG4gXFx0aWYgKHJjKVxcbiBcXHRcXHRnb3RvIG91dF9jbGVhcl9sbms7XFxuIFxcdGlmIChsZ3ItXFx1MDAzZXNtY192ZXJzaW9uID09IFNNQ19WMikge1xcbi1cXHRcXHR1OCAqbGxjX21zZyA9IHNtY19saW5rX3NoYXJlZF92Ml9yeGJ1ZihsaW5rKSA/XFxuLVxcdFxcdFxcdCh1OCAqKWxnci1cXHUwMDNld3JfcnhfYnVmX3YyIDogKHU4ICopbGxjO1xcbi1cXHRcXHRzbWNfbGxjX3NhdmVfYWRkX2xpbmtfcmtleXMobGluaywgbG5rX25ldywgbGxjX21zZyk7XFxuK1xcdFxcdHNtY19sbGNfc2F2ZV9hZGRfbGlua19ya2V5cyhsaW5rLCBsbmtfbmV3LCBxZW50cnkpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRyYyA9IHNtY19sbGNfY2xpX3JrZXlfZXhjaGFuZ2UobGluaywgbG5rX25ldyk7XFxuIFxcdFxcdGlmIChyYykge1xcbkBAIC0xNDgxLDcgKzE1MDUsNyBAQCBpbnQgc21jX2xsY19zcnZfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLFxcbiBcXHR9XFxuIFxcdGFkZF9sbGMgPSBcXHUwMDI2cWVudHJ5LVxcdTAwM2Vtc2cuYWRkX2xpbms7XFxuIFxcdGlmIChhZGRfbGxjLVxcdTAwM2VoZC5mbGFncyBcXHUwMDI2IFNNQ19MTENfRkxBR19BRERfTE5LX1JFSikge1xcbi1cXHRcXHRzbWNfbGxjX2Zsb3dfcWVudHJ5X2RlbChcXHUwMDI2bGdyLVxcdTAwM2VsbGNfZmxvd19sY2wpO1xcbitcXHRcXHRzbWNfbGxjX2Zsb3dfcWVudHJ5X2NscihcXHUwMDI2bGdyLVxcdTAwM2VsbGNfZmxvd19sY2wpO1xcbiBcXHRcXHRyYyA9IC1FTk9MSU5LO1xcbiBcXHRcXHRnb3RvIG91dF9lcnI7XFxuIFxcdH1cXG5AQCAtMTQ5Miw3ICsxNTE2LDggQEAgaW50IHNtY19sbGNfc3J2X2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluayxcXG4gXFx0XFx0bGdyX25ld190ID0gU01DX0xHUl9BU1lNTUVUUklDX1BFRVI7XFxuIFxcdH1cXG4gXFx0c21jX2xsY19zYXZlX2FkZF9saW5rX2luZm8obGlua19uZXcsIGFkZF9sbGMpO1xcbi1cXHRzbWNfbGxjX2Zsb3dfcWVudHJ5X2RlbChcXHUwMDI2bGdyLVxcdTAwM2VsbGNfZmxvd19sY2wpO1xcbitcXHQvKiBhZGRfbGxjIHN0aWxsIHBvaW50cyBpbnRvIHFlbnRyeSwgc28gb25seSBkZXRhY2ggaXQgaGVyZSAqL1xcbitcXHRzbWNfbGxjX2Zsb3dfcWVudHJ5X2NscihcXHUwMDI2bGdyLVxcdTAwM2VsbGNfZmxvd19sY2wpO1xcbiBcXG4gXFx0cmMgPSBzbWNfaWJfcmVhZHlfbGluayhsaW5rX25ldyk7XFxuIFxcdGlmIChyYylcXG5AQCAtMTUwMSw5ICsxNTI2LDcgQEAgaW50IHNtY19sbGNfc3J2X2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluayxcXG4gXFx0aWYgKHJjKVxcbiBcXHRcXHRnb3RvIG91dF9lcnI7XFxuIFxcdGlmIChsZ3ItXFx1MDAzZXNtY192ZXJzaW9uID09IFNNQ19WMikge1xcbi1cXHRcXHR1OCAqbGxjX21zZyA9IHNtY19saW5rX3NoYXJlZF92Ml9yeGJ1ZihsaW5rKSA/XFxuLVxcdFxcdFxcdCh1OCAqKWxnci1cXHUwMDNld3JfcnhfYnVmX3YyIDogKHU4ICopYWRkX2xsYztcXG4tXFx0XFx0c21jX2xsY19zYXZlX2FkZF9saW5rX3JrZXlzKGxpbmssIGxpbmtfbmV3LCBsbGNfbXNnKTtcXG4rXFx0XFx0c21jX2xsY19zYXZlX2FkZF9saW5rX3JrZXlzKGxpbmssIGxpbmtfbmV3LCBxZW50cnkpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRyYyA9IHNtY19sbGNfc3J2X3JrZXlfZXhjaGFuZ2UobGluaywgbGlua19uZXcpO1xcbiBcXHRcXHRpZiAocmMpXFxuQEAgLTE1MTIsMTQgKzE1MzUsMTQgQEAgaW50IHNtY19sbGNfc3J2X2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluayxcXG4gXFx0cmMgPSBzbWNfbGxjX3Nydl9jb25mX2xpbmsobGluaywgbGlua19uZXcsIGxncl9uZXdfdCk7XFxuIFxcdGlmIChyYylcXG4gXFx0XFx0Z290byBvdXRfZXJyO1xcbi1cXHRrZnJlZShpbmkpO1xcbi1cXHRyZXR1cm4gMDtcXG4rXFx0Z290byBvdXQ7XFxuIG91dF9lcnI6XFxuIFxcdGlmIChsaW5rX25ldykge1xcbiBcXHRcXHRsaW5rX25ldy1cXHUwMDNlc3RhdGUgPSBTTUNfTE5LX0lOQUNUSVZFO1xcbiBcXHRcXHRzbWNyX2xpbmtfY2xlYXIobGlua19uZXcsIGZhbHNlKTtcXG4gXFx0fVxcbiBvdXQ6XFxuK1xcdGtmcmVlKHFlbnRyeSk7XFxuIFxcdGtmcmVlKGluaSk7XFxuIFxcdGlmIChzZW5kX3JlcV9hZGRfbGlua19yZXNwKVxcbiBcXHRcXHRzbWNfbGxjX3NlbmRfcmVxX2FkZF9saW5rX3Jlc3BvbnNlKHJlcV9xZW50cnkpO1xcbkBAIC0xNTUyLDcgKzE1NzUsOCBAQCB2b2lkIHNtY19sbGNfYWRkX2xpbmtfbG9jYWwoc3RydWN0IHNtY19saW5rICpsaW5rKVxcbiBcXHRhZGRfbGxjLmhkLmNvbW1vbi5sbGNfdHlwZSA9IFNNQ19MTENfQUREX0xJTks7XFxuIFxcdHNtY19sbGNfaW5pdF9tc2dfaGRyKFxcdTAwMjZhZGRfbGxjLmhkLCBsaW5rLVxcdTAwM2VsZ3IsIHNpemVvZihhZGRfbGxjKSk7XFxuIFxcdC8qIG5vIGRldiBhbmQgcG9ydCBuZWVkZWQgKi9cXG4tXFx0c21jX2xsY19lbnF1ZXVlKGxpbmssICh1bmlvbiBzbWNfbGxjX21zZyAqKVxcdTAwMjZhZGRfbGxjKTtcXG4rXFx0c21jX2xsY19lbnF1ZXVlKGxpbmssICh1bmlvbiBzbWNfbGxjX21zZyAqKVxcdTAwMjZhZGRfbGxjLFxcbitcXHRcXHRcXHRzaXplb2YodW5pb24gc21jX2xsY19tc2cpKTtcXG4gfVxcbiBcXG4gLyogd29ya2VyIHRvIHByb2Nlc3MgYW4gYWRkIGxpbmsgbWVzc2FnZSAqL1xcbkBAIC0xNTg4LDcgKzE2MTIsOCBAQCB2b2lkIHNtY19sbGNfc3J2X2RlbGV0ZV9saW5rX2xvY2FsKHN0cnVjdCBzbWNfbGluayAqbGluaywgdTggZGVsX2xpbmtfaWQpXFxuIFxcdGRlbF9sbGMubGlua19udW0gPSBkZWxfbGlua19pZDtcXG4gXFx0ZGVsX2xsYy5yZWFzb24gPSBodG9ubChTTUNfTExDX0RFTF9MT1NUX1BBVEgpO1xcbiBcXHRkZWxfbGxjLmhkLmZsYWdzIHw9IFNNQ19MTENfRkxBR19ERUxfTElOS19PUkRFUkxZO1xcbi1cXHRzbWNfbGxjX2VucXVldWUobGluaywgKHVuaW9uIHNtY19sbGNfbXNnICopXFx1MDAyNmRlbF9sbGMpO1xcbitcXHRzbWNfbGxjX2VucXVldWUobGluaywgKHVuaW9uIHNtY19sbGNfbXNnICopXFx1MDAyNmRlbF9sbGMsXFxuK1xcdFxcdFxcdHNpemVvZih1bmlvbiBzbWNfbGxjX21zZykpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBzbWNfbGxjX3Byb2Nlc3NfY2xpX2RlbGV0ZV9saW5rKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyKVxcbkBAIC0xODEwLDE5ICsxODM1LDI4IEBAIHN0YXRpYyB2b2lkIHNtY19sbGNfcm10X2RlbGV0ZV9ya2V5KHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyKVxcbiBcXHRsaW5rID0gcWVudHJ5LVxcdTAwM2VsaW5rO1xcbiBcXG4gXFx0aWYgKGxnci1cXHUwMDNlc21jX3ZlcnNpb24gPT0gU01DX1YyKSB7XFxuLVxcdFxcdHN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92MiAqbGxjdjI7XFxuK1xcdFxcdHN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92Ml9pbmxpbmUgKmxsY3YyO1xcbiBcXG4tXFx0XFx0aWYgKHNtY19saW5rX3NoYXJlZF92Ml9yeGJ1ZihsaW5rKSkge1xcbi1cXHRcXHRcXHRtZW1jcHkobGdyLVxcdTAwM2V3cl9yeF9idWZfdjIsIGxsYywgc2l6ZW9mKCpsbGMpKTtcXG4tXFx0XFx0XFx0bGxjdjIgPSAoc3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyICopbGdyLVxcdTAwM2V3cl9yeF9idWZfdjI7XFxuLVxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdGxsY3YyID0gKHN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92MiAqKWxsYztcXG4tXFx0XFx0fVxcbitcXHRcXHQvKiBUaGUgbGVhZGluZyBTTUNfTExDX0RFTF9SS0VZX1YyX0lOTElORSBya2V5cyBhcmUgZGVjbGFyZWQgaW5cXG4rXFx0XFx0ICogdGhlIG1lc3NhZ2UgaXRzZWxmLCBhbnkgZnVydGhlciBvbmVzIHdlcmUgcmVjZWl2ZWQgaW50b1xcbitcXHRcXHQgKiBxZW50cnktXFx1MDAzZWJvZHkuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRsbGN2MiA9IFxcdTAwMjZxZW50cnktXFx1MDAzZW1zZy5kZWxldGVfcmtleV92MjtcXG4gXFx0XFx0bGxjdjItXFx1MDAzZW51bV9pbnZhbF9ya2V5cyA9IDA7XFxuIFxcbiBcXHRcXHRtYXggPSBtaW5fdCh1OCwgbGxjdjItXFx1MDAzZW51bV9ya2V5cywgU01DX0xMQ19SS0VZU19QRVJfTVNHX1YyKTtcXG4rXFx0XFx0bWF4ID0gbWluX3QodTMyLCBtYXgsIFNNQ19MTENfREVMX1JLRVlfVjJfSU5MSU5FICtcXG4rXFx0XFx0XFx0XFx0ICAgICAgcWVudHJ5LVxcdTAwM2Vib2R5X2xlbiAvIHNpemVvZihfX2JlMzIpKTtcXG4gXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG1heDsgaSsrKSB7XFxuLVxcdFxcdFxcdGlmIChzbWNfcnRva2VuX2RlbGV0ZShsaW5rLCBsbGN2Mi1cXHUwMDNlcmtleVtpXSkpXFxuK1xcdFxcdFxcdF9fYmUzMiBya2V5O1xcbitcXG4rXFx0XFx0XFx0aWYgKGkgXFx1MDAzYyBTTUNfTExDX0RFTF9SS0VZX1YyX0lOTElORSlcXG4rXFx0XFx0XFx0XFx0cmtleSA9IGxsY3YyLVxcdTAwM2Vya2V5W2ldO1xcbitcXHRcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdFxcdG1lbWNweShcXHUwMDI2cmtleSwgcWVudHJ5LVxcdTAwM2Vib2R5ICtcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgKGkgLSBTTUNfTExDX0RFTF9SS0VZX1YyX0lOTElORSkgKlxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBzaXplb2YocmtleSksIHNpemVvZihya2V5KSk7XFxuK1xcdFxcdFxcdGlmIChzbWNfcnRva2VuX2RlbGV0ZShsaW5rLCBya2V5KSlcXG4gXFx0XFx0XFx0XFx0bGxjdjItXFx1MDAzZW51bV9pbnZhbF9ya2V5cysrO1xcbiBcXHRcXHR9XFxuIFxcdFxcdG1lbXNldChcXHUwMDI2bGxjLVxcdTAwM2Vya2V5WzBdLCAwLCBzaXplb2YobGxjLVxcdTAwM2Vya2V5KSk7XFxuQEAgLTIwNjMsMTggKzIwOTcsNTIgQEAgc3RhdGljIHZvaWQgc21jX2xsY19yeF9yZXNwb25zZShzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXFxuIFxcdHdha2VfdXAoXFx1MDAyNmxpbmstXFx1MDAzZWxnci1cXHUwMDNlbGxjX21zZ193YWl0ZXIpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBzbWNfbGxjX2VucXVldWUoc3RydWN0IHNtY19saW5rICpsaW5rLCB1bmlvbiBzbWNfbGxjX21zZyAqbGxjKVxcbisvKiB0aGUgbG9uZ2VzdCB0YWlsIGVpdGhlciByZWFkZXIgb2YgcWVudHJ5LVxcdTAwM2Vib2R5IGNhbiB1c2UgKi9cXG4rc3RhdGljIHUzMiBzbWNfbGxjX21heF9ib2R5X2xlbih1bmlvbiBzbWNfbGxjX21zZyAqbGxjKVxcbit7XFxuK1xcdHN3aXRjaCAobGxjLVxcdTAwM2VyYXcuaGRyLmNvbW1vbi5sbGNfdHlwZSkge1xcbitcXHRjYXNlIFNNQ19MTENfQUREX0xJTks6XFxuK1xcdFxcdHJldHVybiBvZmZzZXRvZihzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfdjJfZXh0LCBydCkgK1xcbitcXHRcXHQgICAgICAgU01DX0xMQ19SS0VZU19QRVJfTVNHX1YyICpcXG4rXFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfY29udF9ydCk7XFxuK1xcdGNhc2UgU01DX0xMQ19ERUxFVEVfUktFWTpcXG4rXFx0XFx0cmV0dXJuIChTTUNfTExDX1JLRVlTX1BFUl9NU0dfVjIgLVxcbitcXHRcXHRcXHRTTUNfTExDX0RFTF9SS0VZX1YyX0lOTElORSkgKiBzaXplb2YoX19iZTMyKTtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgc21jX2xsY19lbnF1ZXVlKHN0cnVjdCBzbWNfbGluayAqbGluaywgdW5pb24gc21jX2xsY19tc2cgKmxsYyxcXG4rXFx0XFx0XFx0ICAgIHUzMiBieXRlX2xlbilcXG4ge1xcbiBcXHRzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxnciA9IGxpbmstXFx1MDAzZWxncjtcXG4gXFx0c3RydWN0IHNtY19sbGNfcWVudHJ5ICpxZW50cnk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcdHUxNiBib2R5X2xlbiA9IDA7XFxuK1xcbitcXHQvKiBWMiBtZXNzYWdlcyBjYW4gYmUgbG9uZ2VyIHRoYW4gdGhlIGlubGluZSB1bmlvbiBzbWNfbGxjX21zZy4gQ2FycnlcXG4rXFx0ICogdGhlIHJlbWFpbmRlciBpbiB0aGUgcWVudHJ5IGl0c2VsZiwgc28gdGhhdCBpdHMgbGlmZXRpbWUgYW5kIGl0c1xcbitcXHQgKiBsZW5ndGggbWF0Y2ggdGhlIG1lc3NhZ2UgdGhlIHBlZXIgYWN0dWFsbHkgc2VudC5cXG4rXFx0ICovXFxuK1xcdGlmIChsZ3ItXFx1MDAzZXNtY192ZXJzaW9uID09IFNNQ19WMiBcXHUwMDI2XFx1MDAyNiBieXRlX2xlbiBcXHUwMDNlIFNNQ19XUl9UWF9TSVpFKVxcbitcXHRcXHRib2R5X2xlbiA9IG1pbl90KHUzMiwgYnl0ZV9sZW4sIFNNQ19XUl9CVUZfVjJfU0laRSkgLVxcbitcXHRcXHRcXHQgICBTTUNfV1JfVFhfU0laRTtcXG4rXFx0Ym9keV9sZW4gPSBtaW5fdCh1MzIsIGJvZHlfbGVuLCBzbWNfbGxjX21heF9ib2R5X2xlbihsbGMpKTtcXG4gXFxuLVxcdHFlbnRyeSA9IGttYWxsb2Nfb2JqKCpxZW50cnksIEdGUF9BVE9NSUMpO1xcbitcXHRxZW50cnkgPSBrbWFsbG9jX2ZsZXgoKnFlbnRyeSwgYm9keSwgYm9keV9sZW4sIEdGUF9BVE9NSUMpO1xcbiBcXHRpZiAoIXFlbnRyeSlcXG4gXFx0XFx0cmV0dXJuO1xcbitcXHRxZW50cnktXFx1MDAzZWJvZHlfbGVuID0gYm9keV9sZW47XFxuIFxcdHFlbnRyeS1cXHUwMDNlbGluayA9IGxpbms7XFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZxZW50cnktXFx1MDAzZWxpc3QpO1xcbiBcXHRtZW1jcHkoXFx1MDAyNnFlbnRyeS1cXHUwMDNlbXNnLCBsbGMsIHNpemVvZih1bmlvbiBzbWNfbGxjX21zZykpO1xcbitcXHRpZiAoYm9keV9sZW4pIHtcXG4rXFx0XFx0dTggKnNyYyA9IHNtY19saW5rX3NoYXJlZF92Ml9yeGJ1ZihsaW5rKSA/XFxuK1xcdFxcdFxcdCh1OCAqKWxnci1cXHUwMDNld3JfcnhfYnVmX3YyIDogKHU4ICopbGxjO1xcbitcXG4rXFx0XFx0bWVtY3B5KHFlbnRyeS1cXHUwMDNlYm9keSwgc3JjICsgU01DX1dSX1RYX1NJWkUsIGJvZHlfbGVuKTtcXG4rXFx0fVxcbiBcXG4gXFx0LyogcHJvY2VzcyByZXNwb25zZXMgaW1tZWRpYXRlbHkgKi9cXG4gXFx0aWYgKChsbGMtXFx1MDAzZXJhdy5oZHIuZmxhZ3MgXFx1MDAyNiBTTUNfTExDX0ZMQUdfUkVTUCkgXFx1MDAyNlxcdTAwMjZcXG5AQCAtMjEwNiw3ICsyMTc0LDcgQEAgc3RhdGljIHZvaWQgc21jX2xsY19yeF9oYW5kbGVyKHN0cnVjdCBpYl93YyAqd2MsIHZvaWQgKmJ1ZilcXG4gXFx0XFx0XFx0cmV0dXJuOyAvKiBpbnZhbGlkIG1lc3NhZ2UgKi9cXG4gXFx0fVxcbiBcXG4tXFx0c21jX2xsY19lbnF1ZXVlKGxpbmssIGxsYyk7XFxuK1xcdHNtY19sbGNfZW5xdWV1ZShsaW5rLCBsbGMsIHdjLVxcdTAwM2VieXRlX2xlbik7XFxuIH1cXG4gXFxuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiB3b3JrZXIsIHV0aWxzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfd3IuYyBiL25ldC9zbWMvc21jX3dyLmNcXG5pbmRleCA1OWM5MmI0Njk0NWM1Li45N2JhNDY4OTNiMTdmIDEwMDY0NFxcbi0tLSBhL25ldC9zbWMvc21jX3dyLmNcXG4rKysgYi9uZXQvc21jL3NtY193ci5jXFxuQEAgLTYwMiw5ICs2MDIsOSBAQCBzdGF0aWMgdm9pZCBzbWNfd3JfaW5pdF9zZ2Uoc3RydWN0IHNtY19saW5rICpsbmspXFxuIFxcbiBcXHQvKiBXaXRoIFNNQy1SdjIgdGhlcmUgY2FuIGJlIG1lc3NhZ2VzIGxhcmdlciB0aGFuIFNNQ19XUl9UWF9TSVpFLlxcbiBcXHQgKiBFYWNoIGliX3JlY3Zfd3IgZ2V0cyAyIHNnZXMsIHRoZSBzZWNvbmQgb25lIGlzIGEgc3BpbGxvdmVyIGJ1ZmZlclxcbi1cXHQgKiBhbmQgdGhlIHNhbWUgYnVmZmVyIGZvciBhbGwgc2dlcy4gV2hlbiBhIGxhcmdlciBtZXNzYWdlIGFycml2ZWQgdGhlblxcbi1cXHQgKiB0aGUgY29udGVudCBvZiB0aGUgZmlyc3Qgc21hbGwgc2dlIGlzIGNvcGllZCB0byB0aGUgYmVnaW5uaW5nIG9mXFxuLVxcdCAqIHRoZSBsYXJnZXIgc3BpbGxvdmVyIGJ1ZmZlciwgYWxsb3dpbmcgZWFzeSBkYXRhIG1hcHBpbmcuXFxuK1xcdCAqIGFuZCB0aGUgc2FtZSBidWZmZXIgZm9yIGFsbCBzZ2VzLiBUaGUgc3BpbGxvdmVyIHNnZSBzdGFydHMgYXRcXG4rXFx0ICogU01DX1dSX1RYX1NJWkUsIHNvIHRoZSBsZWFkaW5nIGJ5dGVzIG9mIHRoYXQgYnVmZmVyIGFyZSBuZXZlclxcbitcXHQgKiB3cml0dGVuLlxcbiBcXHQgKi9cXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGxuay1cXHUwMDNld3JfcnhfY250OyBpKyspIHtcXG4gXFx0XFx0aW50IHggPSBpICogbG5rLVxcdTAwM2V3cl9yeF9zZ2VfY250O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMjo1Nzo0Ny42NDI5MzA2ODVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1NDMwMjA5NjUwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTTUNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzbWNfbGxjX2NsaV9hZGRfbGlua1wiLFxuICAgIFwic21jX2xsY19zcnZfYWRkX2xpbmtcIixcbiAgICBcInNtY19sbGNfYWRkX2xpbmtfbG9jYWxcIixcbiAgICBcInNtY19sbGNfc3J2X2RlbGV0ZV9saW5rX2xvY2FsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gU01DIExMQyBtZXNzYWdlIGVucXVldWVpbmcgd2hlcmUgbGFyZ2UgU01DLVJ2MiBtZXNzYWdlcyAobGlrZSBBRERfTElOSyBhbmQgREVMRVRFX1JLRVlfVjIpIHdlcmUgb3ZlcmZsb3dpbmcgdGhlIGFsbG9jYXRlZCBzbWNfbGxjX3FlbnRyeSBidWZmZXIuIEl0IGludHJvZHVjZXMgYSBmbGV4aWJsZSBhcnJheSBtZW1iZXIgdG8gZHluYW1pY2FsbHkgYWxsb2NhdGUgdGhlIGJ1ZmZlciBiYXNlZCBvbiB0aGUgbWVzc2FnZSBzaXplLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgU01DIExMQyBwcm9jZXNzaW5nIGxvZ2ljIGFuZCBpcyByZWFjaGFibGUgdmlhIEFGX1NNQyBzb2NrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2ZjJhODYwOTNjZGExNGQ2ZjQ3ZmQ5OTdiY2Q1M2JlZDFlM2RiMWRlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTkgMDI6NTc6NDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19sbGMuYyBiL25ldC9zbWMvc21jX2xsYy5jXG5pbmRleCA5NTRiMmZmMTgxNWMyLi4zOTNhYTBhZjE4ZDFkIDEwMDY0NFxuLS0tIGEvbmV0L3NtYy9zbWNfbGxjLmNcbisrKyBiL25ldC9zbWMvc21jX2xsYy5jXG5AQCAtMTU3LDYgKzE1Nyw3IEBAIHN0cnVjdCBzbWNfbGxjX21zZ19jb25maXJtX3JrZXkge1x0LyogdHlwZSAweDA2ICovXG4gfTtcbiBcbiAjZGVmaW5lIFNNQ19MTENfREVMX1JLRVlfTUFYXHQ4XG4rI2RlZmluZSBTTUNfTExDX0RFTF9SS0VZX1YyX0lOTElORVx0OVxuICNkZWZpbmUgU01DX0xMQ19GTEFHX1JLRVlfUkVUUllcdDB4MTBcbiAjZGVmaW5lIFNNQ19MTENfRkxBR19SS0VZX05FR1x0MHgyMFxuIFxuQEAgLTE3Nyw2ICsxNzgsMTUgQEAgc3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyIHtcdC8qIHR5cGUgMHgyOSAqL1xuIFx0X19iZTMyIHJrZXlbXTtcbiB9O1xuIFxuKy8qIHRoZSBsZWFkaW5nIHJrZXlzIG9mIGEgREVMRVRFX1JLRVlfVjIgZml0IGludG8gdW5pb24gc21jX2xsY19tc2cgKi9cbitzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXlfdjJfaW5saW5lIHtcdC8qIHR5cGUgMHgyOSAqL1xuK1x0c3RydWN0IHNtY19sbGNfaGRyIGhkO1xuK1x0dTggbnVtX3JrZXlzO1xuK1x0dTggbnVtX2ludmFsX3JrZXlzO1xuK1x0dTggcmVzZXJ2ZWRbMl07XG4rXHRfX2JlMzIgcmtleVtTTUNfTExDX0RFTF9SS0VZX1YyX0lOTElORV07XG4rfTtcbitcbiB1bmlvbiBzbWNfbGxjX21zZyB7XG4gXHRzdHJ1Y3Qgc21jX2xsY19tc2dfY29uZmlybV9saW5rIGNvbmZpcm1fbGluaztcbiBcdHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGluayBhZGRfbGluaztcbkBAIC0xODYsNiArMTk2LDcgQEAgdW5pb24gc21jX2xsY19tc2cge1xuIFxuIFx0c3RydWN0IHNtY19sbGNfbXNnX2NvbmZpcm1fcmtleSBjb25maXJtX3JrZXk7XG4gXHRzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXkgZGVsZXRlX3JrZXk7XG4rXHRzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXlfdjJfaW5saW5lIGRlbGV0ZV9ya2V5X3YyO1xuIFxuIFx0c3RydWN0IHNtY19sbGNfbXNnX3Rlc3RfbGluayB0ZXN0X2xpbms7XG4gXHRzdHJ1Y3Qge1xuQEAgLTE5NCwxNSArMjA1LDI1IEBAIHVuaW9uIHNtY19sbGNfbXNnIHtcbiBcdH0gcmF3O1xuIH07XG4gXG4rc3RhdGljX2Fzc2VydChTTUNfTExDX0RFTF9SS0VZX1YyX0lOTElORSA9PVxuK1x0ICAgICAgKHNpemVvZih1bmlvbiBzbWNfbGxjX21zZykgLVxuK1x0ICAgICAgIG9mZnNldG9mKHN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92MiwgcmtleSkpIC9cbitcdCAgICAgIHNpemVvZihfX2JlMzIpKTtcbitzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKHN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92Ml9pbmxpbmUsIHJrZXkpID09XG4rXHQgICAgICBvZmZzZXRvZihzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXlfdjIsIHJrZXkpKTtcbitcbiAjZGVmaW5lIFNNQ19MTENfRkxBR19SRVNQXHRcdDB4ODBcbiBcbiBzdHJ1Y3Qgc21jX2xsY19xZW50cnkge1xuIFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuIFx0c3RydWN0IHNtY19saW5rICpsaW5rO1xuK1x0dTE2IGJvZHlfbGVuO1xuIFx0dW5pb24gc21jX2xsY19tc2cgbXNnO1xuK1x0dTggYm9keVtdIF9fY291bnRlZF9ieShib2R5X2xlbik7XG4gfTtcbiBcbi1zdGF0aWMgdm9pZCBzbWNfbGxjX2VucXVldWUoc3RydWN0IHNtY19saW5rICpsaW5rLCB1bmlvbiBzbWNfbGxjX21zZyAqbGxjKTtcbitzdGF0aWMgdm9pZCBzbWNfbGxjX2VucXVldWUoc3RydWN0IHNtY19saW5rICpsaW5rLCB1bmlvbiBzbWNfbGxjX21zZyAqbGxjLFxuK1x0XHRcdCAgICB1MzIgYnl0ZV9sZW4pO1xuIFxuIHN0cnVjdCBzbWNfbGxjX3FlbnRyeSAqc21jX2xsY19mbG93X3FlbnRyeV9jbHIoc3RydWN0IHNtY19sbGNfZmxvdyAqZmxvdylcbiB7XG5AQCAtOTk4LDE1ICsxMDE5LDIwIEBAIHN0YXRpYyBpbnQgc21jX2xsY19jbGlfY29uZl9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluayxcbiBcbiBzdGF0aWMgdm9pZCBzbWNfbGxjX3NhdmVfYWRkX2xpbmtfcmtleXMoc3RydWN0IHNtY19saW5rICpsaW5rLFxuIFx0XHRcdFx0XHRzdHJ1Y3Qgc21jX2xpbmsgKmxpbmtfbmV3LFxuLVx0XHRcdFx0XHR1OCAqbGxjX21zZylcbitcdFx0XHRcdFx0c3RydWN0IHNtY19sbGNfcWVudHJ5ICpxZW50cnkpXG4ge1xuK1x0Y29uc3QgdTMyIHJ0X29mZiA9IG9mZnNldG9mKHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua192Ml9leHQsIHJ0KTtcbiBcdHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua192Ml9leHQgKmV4dDtcbiBcdHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyID0gbGluay1cdTAwM2VsZ3I7XG4gXHRpbnQgbWF4LCBpO1xuIFxuLVx0ZXh0ID0gKHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua192Ml9leHQgKikobGxjX21zZyArXG4tXHRcdFx0XHRcdFx0ICAgICBTTUNfV1JfVFhfU0laRSk7XG4rXHQvKiB0aGUgcmtleSBjb3VudCBpdHNlbGYgaXMgb25seSB0aGVyZSBpZiBlbm91Z2ggYnl0ZXMgYXJyaXZlZCAqL1xuK1x0aWYgKHFlbnRyeS1cdTAwM2Vib2R5X2xlbiBcdTAwM2MgcnRfb2ZmKVxuK1x0XHRyZXR1cm47XG4rXHRleHQgPSAoc3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rX3YyX2V4dCAqKXFlbnRyeS1cdTAwM2Vib2R5O1xuIFx0bWF4ID0gbWluX3QodTgsIGV4dC1cdTAwM2VudW1fcmtleXMsIFNNQ19MTENfUktFWVNfUEVSX01TR19WMik7XG4rXHRtYXggPSBtaW5fdCh1MzIsIG1heCwgKHFlbnRyeS1cdTAwM2Vib2R5X2xlbiAtIHJ0X29mZikgL1xuK1x0XHRcdCAgICAgIHNpemVvZihleHQtXHUwMDNlcnRbMF0pKTtcbiBcdGRvd25fd3JpdGUoXHUwMDI2bGdyLVx1MDAzZXJtYnNfbG9jayk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtYXg7IGkrKykge1xuIFx0XHRzbWNfcnRva2VuX3NldChsZ3IsIGxpbmstXHUwMDNlbGlua19pZHgsIGxpbmtfbmV3LVx1MDAzZWxpbmtfaWR4LFxuQEAgLTEwOTksOSArMTEyNSw3IEBAIGludCBzbWNfbGxjX2NsaV9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHN0cnVjdCBzbWNfbGxjX3FlbnRyeSAqcWVudHJ5KVxuIFx0aWYgKHJjKVxuIFx0XHRnb3RvIG91dF9jbGVhcl9sbms7XG4gXHRpZiAobGdyLVx1MDAzZXNtY192ZXJzaW9uID09IFNNQ19WMikge1xuLVx0XHR1OCAqbGxjX21zZyA9IHNtY19saW5rX3NoYXJlZF92Ml9yeGJ1ZihsaW5rKSA/XG4tXHRcdFx0KHU4ICopbGdyLVx1MDAzZXdyX3J4X2J1Zl92MiA6ICh1OCAqKWxsYztcbi1cdFx0c21jX2xsY19zYXZlX2FkZF9saW5rX3JrZXlzKGxpbmssIGxua19uZXcsIGxsY19tc2cpO1xuK1x0XHRzbWNfbGxjX3NhdmVfYWRkX2xpbmtfcmtleXMobGluaywgbG5rX25ldywgcWVudHJ5KTtcbiBcdH0gZWxzZSB7XG4gXHRcdHJjID0gc21jX2xsY19jbGlfcmtleV9leGNoYW5nZShsaW5rLCBsbmtfbmV3KTtcbiBcdFx0aWYgKHJjKSB7XG5AQCAtMTQ4MSw3ICsxNTA1LDcgQEAgaW50IHNtY19sbGNfc3J2X2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluayxcbiBcdH1cbiBcdGFkZF9sbGMgPSBcdTAwMjZxZW50cnktXHUwMDNlbXNnLmFkZF9saW5rO1xuIFx0aWYgKGFkZF9sbGMtXHUwMDNlaGQuZmxhZ3MgXHUwMDI2IFNNQ19MTENfRkxBR19BRERfTE5LX1JFSikge1xuLVx0XHRzbWNfbGxjX2Zsb3dfcWVudHJ5X2RlbChcdTAwMjZsZ3ItXHUwMDNlbGxjX2Zsb3dfbGNsKTtcbitcdFx0c21jX2xsY19mbG93X3FlbnRyeV9jbHIoXHUwMDI2bGdyLVx1MDAzZWxsY19mbG93X2xjbCk7XG4gXHRcdHJjID0gLUVOT0xJTks7XG4gXHRcdGdvdG8gb3V0X2VycjtcbiBcdH1cbkBAIC0xNDkyLDcgKzE1MTYsOCBAQCBpbnQgc21jX2xsY19zcnZfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLFxuIFx0XHRsZ3JfbmV3X3QgPSBTTUNfTEdSX0FTWU1NRVRSSUNfUEVFUjtcbiBcdH1cbiBcdHNtY19sbGNfc2F2ZV9hZGRfbGlua19pbmZvKGxpbmtfbmV3LCBhZGRfbGxjKTtcbi1cdHNtY19sbGNfZmxvd19xZW50cnlfZGVsKFx1MDAyNmxnci1cdTAwM2VsbGNfZmxvd19sY2wpO1xuK1x0LyogYWRkX2xsYyBzdGlsbCBwb2ludHMgaW50byBxZW50cnksIHNvIG9ubHkgZGV0YWNoIGl0IGhlcmUgKi9cbitcdHNtY19sbGNfZmxvd19xZW50cnlfY2xyKFx1MDAyNmxnci1cdTAwM2VsbGNfZmxvd19sY2wpO1xuIFxuIFx0cmMgPSBzbWNfaWJfcmVhZHlfbGluayhsaW5rX25ldyk7XG4gXHRpZiAocmMpXG5AQCAtMTUwMSw5ICsxNTI2LDcgQEAgaW50IHNtY19sbGNfc3J2X2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluayxcbiBcdGlmIChyYylcbiBcdFx0Z290byBvdXRfZXJyO1xuIFx0aWYgKGxnci1cdTAwM2VzbWNfdmVyc2lvbiA9PSBTTUNfVjIpIHtcbi1cdFx0dTggKmxsY19tc2cgPSBzbWNfbGlua19zaGFyZWRfdjJfcnhidWYobGluaykgP1xuLVx0XHRcdCh1OCAqKWxnci1cdTAwM2V3cl9yeF9idWZfdjIgOiAodTggKilhZGRfbGxjO1xuLVx0XHRzbWNfbGxjX3NhdmVfYWRkX2xpbmtfcmtleXMobGluaywgbGlua19uZXcsIGxsY19tc2cpO1xuK1x0XHRzbWNfbGxjX3NhdmVfYWRkX2xpbmtfcmtleXMobGluaywgbGlua19uZXcsIHFlbnRyeSk7XG4gXHR9IGVsc2Uge1xuIFx0XHRyYyA9IHNtY19sbGNfc3J2X3JrZXlfZXhjaGFuZ2UobGluaywgbGlua19uZXcpO1xuIFx0XHRpZiAocmMpXG5AQCAtMTUxMiwxNCArMTUzNSwxNCBAQCBpbnQgc21jX2xsY19zcnZfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLFxuIFx0cmMgPSBzbWNfbGxjX3Nydl9jb25mX2xpbmsobGluaywgbGlua19uZXcsIGxncl9uZXdfdCk7XG4gXHRpZiAocmMpXG4gXHRcdGdvdG8gb3V0X2Vycjtcbi1cdGtmcmVlKGluaSk7XG4tXHRyZXR1cm4gMDtcbitcdGdvdG8gb3V0O1xuIG91dF9lcnI6XG4gXHRpZiAobGlua19uZXcpIHtcbiBcdFx0bGlua19uZXctXHUwMDNlc3RhdGUgPSBTTUNfTE5LX0lOQUNUSVZFO1xuIFx0XHRzbWNyX2xpbmtfY2xlYXIobGlua19uZXcsIGZhbHNlKTtcbiBcdH1cbiBvdXQ6XG4rXHRrZnJlZShxZW50cnkpO1xuIFx0a2ZyZWUoaW5pKTtcbiBcdGlmIChzZW5kX3JlcV9hZGRfbGlua19yZXNwKVxuIFx0XHRzbWNfbGxjX3NlbmRfcmVxX2FkZF9saW5rX3Jlc3BvbnNlKHJlcV9xZW50cnkpO1xuQEAgLTE1NTIsNyArMTU3NSw4IEBAIHZvaWQgc21jX2xsY19hZGRfbGlua19sb2NhbChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmspXG4gXHRhZGRfbGxjLmhkLmNvbW1vbi5sbGNfdHlwZSA9IFNNQ19MTENfQUREX0xJTks7XG4gXHRzbWNfbGxjX2luaXRfbXNnX2hkcihcdTAwMjZhZGRfbGxjLmhkLCBsaW5rLVx1MDAzZWxnciwgc2l6ZW9mKGFkZF9sbGMpKTtcbiBcdC8qIG5vIGRldiBhbmQgcG9ydCBuZWVkZWQgKi9cbi1cdHNtY19sbGNfZW5xdWV1ZShsaW5rLCAodW5pb24gc21jX2xsY19tc2cgKilcdTAwMjZhZGRfbGxjKTtcbitcdHNtY19sbGNfZW5xdWV1ZShsaW5rLCAodW5pb24gc21jX2xsY19tc2cgKilcdTAwMjZhZGRfbGxjLFxuK1x0XHRcdHNpemVvZih1bmlvbiBzbWNfbGxjX21zZykpO1xuIH1cbiBcbiAvKiB3b3JrZXIgdG8gcHJvY2VzcyBhbiBhZGQgbGluayBtZXNzYWdlICovXG5AQCAtMTU4OCw3ICsxNjEyLDggQEAgdm9pZCBzbWNfbGxjX3Nydl9kZWxldGVfbGlua19sb2NhbChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHU4IGRlbF9saW5rX2lkKVxuIFx0ZGVsX2xsYy5saW5rX251bSA9IGRlbF9saW5rX2lkO1xuIFx0ZGVsX2xsYy5yZWFzb24gPSBodG9ubChTTUNfTExDX0RFTF9MT1NUX1BBVEgpO1xuIFx0ZGVsX2xsYy5oZC5mbGFncyB8PSBTTUNfTExDX0ZMQUdfREVMX0xJTktfT1JERVJMWTtcbi1cdHNtY19sbGNfZW5xdWV1ZShsaW5rLCAodW5pb24gc21jX2xsY19tc2cgKilcdTAwMjZkZWxfbGxjKTtcbitcdHNtY19sbGNfZW5xdWV1ZShsaW5rLCAodW5pb24gc21jX2xsY19tc2cgKilcdTAwMjZkZWxfbGxjLFxuK1x0XHRcdHNpemVvZih1bmlvbiBzbWNfbGxjX21zZykpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBzbWNfbGxjX3Byb2Nlc3NfY2xpX2RlbGV0ZV9saW5rKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyKVxuQEAgLTE4MTAsMTkgKzE4MzUsMjggQEAgc3RhdGljIHZvaWQgc21jX2xsY19ybXRfZGVsZXRlX3JrZXkoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IpXG4gXHRsaW5rID0gcWVudHJ5LVx1MDAzZWxpbms7XG4gXG4gXHRpZiAobGdyLVx1MDAzZXNtY192ZXJzaW9uID09IFNNQ19WMikge1xuLVx0XHRzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXlfdjIgKmxsY3YyO1xuK1x0XHRzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXlfdjJfaW5saW5lICpsbGN2MjtcbiBcbi1cdFx0aWYgKHNtY19saW5rX3NoYXJlZF92Ml9yeGJ1ZihsaW5rKSkge1xuLVx0XHRcdG1lbWNweShsZ3ItXHUwMDNld3JfcnhfYnVmX3YyLCBsbGMsIHNpemVvZigqbGxjKSk7XG4tXHRcdFx0bGxjdjIgPSAoc3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyICopbGdyLVx1MDAzZXdyX3J4X2J1Zl92Mjtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRsbGN2MiA9IChzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXlfdjIgKilsbGM7XG4tXHRcdH1cbitcdFx0LyogVGhlIGxlYWRpbmcgU01DX0xMQ19ERUxfUktFWV9WMl9JTkxJTkUgcmtleXMgYXJlIGRlY2xhcmVkIGluXG4rXHRcdCAqIHRoZSBtZXNzYWdlIGl0c2VsZiwgYW55IGZ1cnRoZXIgb25lcyB3ZXJlIHJlY2VpdmVkIGludG9cbitcdFx0ICogcWVudHJ5LVx1MDAzZWJvZHkuXG4rXHRcdCAqL1xuK1x0XHRsbGN2MiA9IFx1MDAyNnFlbnRyeS1cdTAwM2Vtc2cuZGVsZXRlX3JrZXlfdjI7XG4gXHRcdGxsY3YyLVx1MDAzZW51bV9pbnZhbF9ya2V5cyA9IDA7XG4gXG4gXHRcdG1heCA9IG1pbl90KHU4LCBsbGN2Mi1cdTAwM2VudW1fcmtleXMsIFNNQ19MTENfUktFWVNfUEVSX01TR19WMik7XG4rXHRcdG1heCA9IG1pbl90KHUzMiwgbWF4LCBTTUNfTExDX0RFTF9SS0VZX1YyX0lOTElORSArXG4rXHRcdFx0XHQgICAgICBxZW50cnktXHUwMDNlYm9keV9sZW4gLyBzaXplb2YoX19iZTMyKSk7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG1heDsgaSsrKSB7XG4tXHRcdFx0aWYgKHNtY19ydG9rZW5fZGVsZXRlKGxpbmssIGxsY3YyLVx1MDAzZXJrZXlbaV0pKVxuK1x0XHRcdF9fYmUzMiBya2V5O1xuK1xuK1x0XHRcdGlmIChpIFx1MDAzYyBTTUNfTExDX0RFTF9SS0VZX1YyX0lOTElORSlcbitcdFx0XHRcdHJrZXkgPSBsbGN2Mi1cdTAwM2Vya2V5W2ldO1xuK1x0XHRcdGVsc2VcbitcdFx0XHRcdG1lbWNweShcdTAwMjZya2V5LCBxZW50cnktXHUwMDNlYm9keSArXG4rXHRcdFx0XHRcdCAgICAgIChpIC0gU01DX0xMQ19ERUxfUktFWV9WMl9JTkxJTkUpICpcbitcdFx0XHRcdFx0ICAgICAgc2l6ZW9mKHJrZXkpLCBzaXplb2YocmtleSkpO1xuK1x0XHRcdGlmIChzbWNfcnRva2VuX2RlbGV0ZShsaW5rLCBya2V5KSlcbiBcdFx0XHRcdGxsY3YyLVx1MDAzZW51bV9pbnZhbF9ya2V5cysrO1xuIFx0XHR9XG4gXHRcdG1lbXNldChcdTAwMjZsbGMtXHUwMDNlcmtleVswXSwgMCwgc2l6ZW9mKGxsYy1cdTAwM2Vya2V5KSk7XG5AQCAtMjA2MywxOCArMjA5Nyw1MiBAQCBzdGF0aWMgdm9pZCBzbWNfbGxjX3J4X3Jlc3BvbnNlKHN0cnVjdCBzbWNfbGluayAqbGluayxcbiBcdHdha2VfdXAoXHUwMDI2bGluay1cdTAwM2VsZ3ItXHUwMDNlbGxjX21zZ193YWl0ZXIpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBzbWNfbGxjX2VucXVldWUoc3RydWN0IHNtY19saW5rICpsaW5rLCB1bmlvbiBzbWNfbGxjX21zZyAqbGxjKVxuKy8qIHRoZSBsb25nZXN0IHRhaWwgZWl0aGVyIHJlYWRlciBvZiBxZW50cnktXHUwMDNlYm9keSBjYW4gdXNlICovXG4rc3RhdGljIHUzMiBzbWNfbGxjX21heF9ib2R5X2xlbih1bmlvbiBzbWNfbGxjX21zZyAqbGxjKVxuK3tcbitcdHN3aXRjaCAobGxjLVx1MDAzZXJhdy5oZHIuY29tbW9uLmxsY190eXBlKSB7XG4rXHRjYXNlIFNNQ19MTENfQUREX0xJTks6XG4rXHRcdHJldHVybiBvZmZzZXRvZihzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfdjJfZXh0LCBydCkgK1xuK1x0XHQgICAgICAgU01DX0xMQ19SS0VZU19QRVJfTVNHX1YyICpcbitcdFx0ICAgICAgIHNpemVvZihzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfY29udF9ydCk7XG4rXHRjYXNlIFNNQ19MTENfREVMRVRFX1JLRVk6XG4rXHRcdHJldHVybiAoU01DX0xMQ19SS0VZU19QRVJfTVNHX1YyIC1cbitcdFx0XHRTTUNfTExDX0RFTF9SS0VZX1YyX0lOTElORSkgKiBzaXplb2YoX19iZTMyKTtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBzbWNfbGxjX2VucXVldWUoc3RydWN0IHNtY19saW5rICpsaW5rLCB1bmlvbiBzbWNfbGxjX21zZyAqbGxjLFxuK1x0XHRcdCAgICB1MzIgYnl0ZV9sZW4pXG4ge1xuIFx0c3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IgPSBsaW5rLVx1MDAzZWxncjtcbiBcdHN0cnVjdCBzbWNfbGxjX3FlbnRyeSAqcWVudHJ5O1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdHUxNiBib2R5X2xlbiA9IDA7XG4rXG4rXHQvKiBWMiBtZXNzYWdlcyBjYW4gYmUgbG9uZ2VyIHRoYW4gdGhlIGlubGluZSB1bmlvbiBzbWNfbGxjX21zZy4gQ2FycnlcbitcdCAqIHRoZSByZW1haW5kZXIgaW4gdGhlIHFlbnRyeSBpdHNlbGYsIHNvIHRoYXQgaXRzIGxpZmV0aW1lIGFuZCBpdHNcbitcdCAqIGxlbmd0aCBtYXRjaCB0aGUgbWVzc2FnZSB0aGUgcGVlciBhY3R1YWxseSBzZW50LlxuK1x0ICovXG4rXHRpZiAobGdyLVx1MDAzZXNtY192ZXJzaW9uID09IFNNQ19WMiBcdTAwMjZcdTAwMjYgYnl0ZV9sZW4gXHUwMDNlIFNNQ19XUl9UWF9TSVpFKVxuK1x0XHRib2R5X2xlbiA9IG1pbl90KHUzMiwgYnl0ZV9sZW4sIFNNQ19XUl9CVUZfVjJfU0laRSkgLVxuK1x0XHRcdCAgIFNNQ19XUl9UWF9TSVpFO1xuK1x0Ym9keV9sZW4gPSBtaW5fdCh1MzIsIGJvZHlfbGVuLCBzbWNfbGxjX21heF9ib2R5X2xlbihsbGMpKTtcbiBcbi1cdHFlbnRyeSA9IGttYWxsb2Nfb2JqKCpxZW50cnksIEdGUF9BVE9NSUMpO1xuK1x0cWVudHJ5ID0ga21hbGxvY19mbGV4KCpxZW50cnksIGJvZHksIGJvZHlfbGVuLCBHRlBfQVRPTUlDKTtcbiBcdGlmICghcWVudHJ5KVxuIFx0XHRyZXR1cm47XG4rXHRxZW50cnktXHUwMDNlYm9keV9sZW4gPSBib2R5X2xlbjtcbiBcdHFlbnRyeS1cdTAwM2VsaW5rID0gbGluaztcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnFlbnRyeS1cdTAwM2VsaXN0KTtcbiBcdG1lbWNweShcdTAwMjZxZW50cnktXHUwMDNlbXNnLCBsbGMsIHNpemVvZih1bmlvbiBzbWNfbGxjX21zZykpO1xuK1x0aWYgKGJvZHlfbGVuKSB7XG4rXHRcdHU4ICpzcmMgPSBzbWNfbGlua19zaGFyZWRfdjJfcnhidWYobGluaykgP1xuK1x0XHRcdCh1OCAqKWxnci1cdTAwM2V3cl9yeF9idWZfdjIgOiAodTggKilsbGM7XG4rXG4rXHRcdG1lbWNweShxZW50cnktXHUwMDNlYm9keSwgc3JjICsgU01DX1dSX1RYX1NJWkUsIGJvZHlfbGVuKTtcbitcdH1cbiBcbiBcdC8qIHByb2Nlc3MgcmVzcG9uc2VzIGltbWVkaWF0ZWx5ICovXG4gXHRpZiAoKGxsYy1cdTAwM2VyYXcuaGRyLmZsYWdzIFx1MDAyNiBTTUNfTExDX0ZMQUdfUkVTUCkgXHUwMDI2XHUwMDI2XG5AQCAtMjEwNiw3ICsyMTc0LDcgQEAgc3RhdGljIHZvaWQgc21jX2xsY19yeF9oYW5kbGVyKHN0cnVjdCBpYl93YyAqd2MsIHZvaWQgKmJ1ZilcbiBcdFx0XHRyZXR1cm47IC8qIGludmFsaWQgbWVzc2FnZSAqL1xuIFx0fVxuIFxuLVx0c21jX2xsY19lbnF1ZXVlKGxpbmssIGxsYyk7XG4rXHRzbWNfbGxjX2VucXVldWUobGluaywgbGxjLCB3Yy1cdTAwM2VieXRlX2xlbik7XG4gfVxuIFxuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiB3b3JrZXIsIHV0aWxzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY193ci5jIGIvbmV0L3NtYy9zbWNfd3IuY1xuaW5kZXggNTljOTJiNDY5NDVjNS4uOTdiYTQ2ODkzYjE3ZiAxMDA2NDRcbi0tLSBhL25ldC9zbWMvc21jX3dyLmNcbisrKyBiL25ldC9zbWMvc21jX3dyLmNcbkBAIC02MDIsOSArNjAyLDkgQEAgc3RhdGljIHZvaWQgc21jX3dyX2luaXRfc2dlKHN0cnVjdCBzbWNfbGluayAqbG5rKVxuIFxuIFx0LyogV2l0aCBTTUMtUnYyIHRoZXJlIGNhbiBiZSBtZXNzYWdlcyBsYXJnZXIgdGhhbiBTTUNfV1JfVFhfU0laRS5cbiBcdCAqIEVhY2ggaWJfcmVjdl93ciBnZXRzIDIgc2dlcywgdGhlIHNlY29uZCBvbmUgaXMgYSBzcGlsbG92ZXIgYnVmZmVyXG4tXHQgKiBhbmQgdGhlIHNhbWUgYnVmZmVyIGZvciBhbGwgc2dlcy4gV2hlbiBhIGxhcmdlciBtZXNzYWdlIGFycml2ZWQgdGhlblxuLVx0ICogdGhlIGNvbnRlbnQgb2YgdGhlIGZpcnN0IHNtYWxsIHNnZSBpcyBjb3BpZWQgdG8gdGhlIGJlZ2lubmluZyBvZlxuLVx0ICogdGhlIGxhcmdlciBzcGlsbG92ZXIgYnVmZmVyLCBhbGxvd2luZyBlYXN5IGRhdGEgbWFwcGluZy5cbitcdCAqIGFuZCB0aGUgc2FtZSBidWZmZXIgZm9yIGFsbCBzZ2VzLiBUaGUgc3BpbGxvdmVyIHNnZSBzdGFydHMgYXRcbitcdCAqIFNNQ19XUl9UWF9TSVpFLCBzbyB0aGUgbGVhZGluZyBieXRlcyBvZiB0aGF0IGJ1ZmZlciBhcmUgbmV2ZXJcbitcdCAqIHdyaXR0ZW4uXG4gXHQgKi9cbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxuay1cdTAwM2V3cl9yeF9jbnQ7IGkrKykge1xuIFx0XHRpbnQgeCA9IGkgKiBsbmstXHUwMDNld3Jfcnhfc2dlX2NudDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAyOjU3OjQ3LjY0MjkzMjQ1NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMjk4NTQ2NzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU01DIExMQyBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBgbmV0L3NtYy9zbWNfbGxjLmNgIGFuZCBgbmV0L3NtYy9zbWNfd3IuY2AgZmlsZXMuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYWJvdXQgaGFuZGxpbmcgbGFyZ2VyIFNNQy1SdjIgbWVzc2FnZXMsIHNwZWNpZmljYWxseSB0aG9zZSBleGNlZWRpbmcgYFNNQ19XUl9UWF9TSVpFYC4gSXQncyBpbnRyb2R1Y2luZyBhIG5ldyBzdHJ1Y3QsIGBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92Ml9pbmxpbmVgLCBhbmQgbW9kaWZ5aW5nIGBzbWNfbGxjX2VucXVldWVgIHRvIGhhbmRsZSBsYXJnZXIgbWVzc2FnZXMgYnkgZHluYW1pY2FsbHkgYWxsb2NhdGluZyBhIGBzdHJ1Y3Qgc21jX2xsY19xZW50cnlgIHdpdGggYSBmbGV4aWJsZSBhcnJheSBtZW1iZXIsIGBib2R5W11gLCB0byBhY2NvbW1vZGF0ZSB0aGUgb3ZlcmZsb3cgZGF0YS4gVGhpcyBpcyBpbnRlcmVzdGluZywgaXQgbGlrZWx5IGRlYWxzIHdpdGggdGhlIGBBRERfTElOS2AgYW5kIGBERUxFVEVfUktFWV9WMmAgbWVzc2FnZXMsIHdoaWNoIGFyZSBjYW5kaWRhdGVzIGZvciBzaXplLXJlbGF0ZWQgYnVncy5cblxuRmlyc3QsIGxldCdzIGVzdGFibGlzaCBpZiB0aGlzIGlzIGV2ZW4gZnV6emFibGUgYW5kIHdvcnRoIHRoZSBlZmZvcnQuIFNNQyBpcyBhIG5ldHdvcmsgcHJvdG9jb2wsIHNvIGl0J3MgdW5kZXIgdGhlIGBBRl9TTUNgIGZhbWlseS4gR29vZC4gV2UgY2FuIGFic29sdXRlbHkgdGVzdCB0aGlzLCBlaXRoZXIgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gV2UgaGF2ZSBsb29wYmFjaywgZHVtbXkgZGV2aWNlcywgb3IgZXZlbiB2ZXRoIGNhbiBiZSB1c2VkLiBTTUMtRCBpcyByZWxhdGVkIHRvIElTTSwgd2hpY2ggY2FuIGJlIGhhbmRsZWQgYnkgYHNtY19sb29wYmFja2AuIFNNQy1SIHVzZXMgUkRNQSwgd2hpY2ggY2FuIGJlIGVtdWxhdGVkIHVzaW5nIGByZG1hX3J4ZWAgb3IgYHNpd2AuIFRoYXQgY29uZmlybXMgaXQsIHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgd2UgY2FuIHRhcmdldCB3aXRoIHN5emthbGxlci5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvdXIgZnV6emluZyBlZmZvcnRzLiBUaGUgcGF0Y2ggdG91Y2hlcyBhIGZldyBrZXkgZnVuY3Rpb25zOlxuLSAgIGBzbWNfbGxjX2VucXVldWVgIChhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggb2Z0ZW4gaXMgYSBoZWFkYWNoZSwgYnV0IGxldCdzIHNlZSBob3cgaXQncyB1c2VkKVxuLSAgIGBzbWNfbGxjX3J4X2hhbmRsZXJgIChhbm90aGVyIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgYSBjYWxsYmFjayBmb3IgUkRNQSByZWNlaXZlLiBJdCBpcyBhbiBlbnRyeSBwb2ludCwgYW5kIGlzIGEgc3Ryb25nIGNhbmRpZGF0ZSlcbi0gICBgc21jX2xsY19jbGlfYWRkX2xpbmtgXG4tICAgYHNtY19sbGNfc3J2X2FkZF9saW5rYFxuLSAgIGBzbWNfbGxjX2FkZF9saW5rX2xvY2FsYFxuLSAgIGBzbWNfbGxjX3Nydl9kZWxldGVfbGlua19sb2NhbGBcbi0gICBgc21jX2xsY19ybXRfZGVsZXRlX3JrZXlgIChzdGF0aWMgYXMgd2VsbClcbi0gICBgc21jX2xsY19yeF9yZXNwb25zZWAgKGFub3RoZXIgc3RhdGljLCB3ZSdsbCBzZWUgaG93IGl0IGZpdHMpXG5cbkxldCdzIHByaW9yaXRpemUgdGhvc2UgbGFzdCB0d28uIGBzbWNfbGxjX2NsaV9hZGRfbGlua2AgYW5kIGBzbWNfbGxjX3Nydl9hZGRfbGlua2AgYXJlIGludGVyZXN0aW5nIGJlY2F1c2UgdGhleSBzZWVtIHRvIGJlIHRoZSBjbGllbnQgYW5kIHNlcnZlciBzaWRlLiBXZSdyZSBpbnRlcmVzdGVkIGluIHRoZSBzaXplLiAgYHNtY19sbGNfcnhfaGFuZGxlcmAgKnNob3VsZCogYmUgdGhlIGVudHJ5IHBvaW50IGZvciBoYW5kbGluZyBMTEMgbWVzc2FnZXMuIFRob3VnaCBpdCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIHF1ZXVlIGFuZCBuZXcgZHluYW1pYyBhbGxvY2F0aW9uIGlzIHRoZSBjb3JlIHBhcnQgb2YgdGhpcyBjaGFuZ2UuIElzIHRoZXJlIGFuIGV4cG9zZWQgZW50cnkgcG9pbnQgZm9yIHRoZSBzdGF0aWMgZnVuY3Rpb25zP1xuXG5MZXQgbWUgZG8gYSBxdWljayBzZWFyY2ggb24gdGhvc2UgYGNsaV9hZGRfbGlua2AgYW5kIGBzcnZfYWRkX2xpbmtgIGZ1bmN0aW9ucyB0byBzZWUgaG93IHRoZXkncmUgdXNlZC4gV2Ugd2lsbCBuZWVkIHRvIGludmVzdGlnYXRlIHRob3NlIHRvIGZpbmQgdGhlIGF0dGFjayBzdXJmYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTE0LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQ2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDI6NTc6NTcuOTQxNDgyNzk4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNjI5NjIxNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic21jX2xsY19jbGlfYWRkX2xpbmtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9hZl9zbWMuYz02MTg9c3RhdGljIGludCBzbWNyX2NsbnRfY29uZl9maXJzdF9saW5rKHN0cnVjdCBzbWNfc29jayAqc21jKVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy02ODQtXFx0XFx0c21jX2xsY19mbG93X3FlbnRyeV9jbHIoXFx1MDAyNmxpbmstXFx1MDAzZWxnci1cXHUwMDNlbGxjX2Zsb3dfbGNsKTtcXG5uZXQvc21jL2FmX3NtYy5jOjY4NTpcXHRcXHRzbWNfbGxjX2NsaV9hZGRfbGluayhsaW5rLCBxZW50cnkpO1xcbm5ldC9zbWMvYWZfc21jLmMtNjg2LVxcdH1cXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jPTkwOD1zdGF0aWMgaW50IHNtY19sbGNfY2xpX3JrZXlfZXhjaGFuZ2Uoc3RydWN0IHNtY19saW5rICpsaW5rLFxcbi0tXFxubmV0L3NtYy9zbWNfbGxjLmMtOTUxLS8qIHByZXBhcmUgYW5kIHNlbmQgYW4gYWRkIGxpbmsgcmVqZWN0IHJlc3BvbnNlICovXFxubmV0L3NtYy9zbWNfbGxjLmM6OTUyOnN0YXRpYyBpbnQgc21jX2xsY19jbGlfYWRkX2xpbmtfcmVqZWN0KHN0cnVjdCBzbWNfbGxjX3FlbnRyeSAqcWVudHJ5KVxcbm5ldC9zbWMvc21jX2xsYy5jLTk1My17XFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYz0xMDQ2PXN0YXRpYyB2b2lkIHNtY19sbGNfc2F2ZV9hZGRfbGlua19pbmZvKHN0cnVjdCBzbWNfbGluayAqbGluayxcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTEwNTYtLyogYXMgYW4gU01DIGNsaWVudCwgcHJvY2VzcyBhbiBhZGQgbGluayByZXF1ZXN0ICovXFxubmV0L3NtYy9zbWNfbGxjLmM6MTA1NzppbnQgc21jX2xsY19jbGlfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLCBzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnFlbnRyeSlcXG5uZXQvc21jL3NtY19sbGMuYy0xMDU4LXtcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTExNDItb3V0X3JlamVjdDpcXG5uZXQvc21jL3NtY19sbGMuYzoxMTQzOlxcdHNtY19sbGNfY2xpX2FkZF9saW5rX3JlamVjdChxZW50cnkpO1xcbm5ldC9zbWMvc21jX2xsYy5jLTExNDQtb3V0Olxcbi0tXFxubmV0L3NtYy9zbWNfbGxjLmM9MTE1MD1zdGF0aWMgdm9pZCBzbWNfbGxjX3NlbmRfcmVxdWVzdF9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmspXFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYy0xMTg4LS8qIGFzIGFuIFNNQyBjbGllbnQsIGludml0ZSBzZXJ2ZXIgdG8gc3RhcnQgdGhlIGFkZF9saW5rIHByb2Nlc3NpbmcgKi9cXG5uZXQvc21jL3NtY19sbGMuYzoxMTg5OnN0YXRpYyB2b2lkIHNtY19sbGNfY2xpX2FkZF9saW5rX2ludml0ZShzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXFxubmV0L3NtYy9zbWNfbGxjLmMtMTE5MC1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnFlbnRyeSlcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jPTEyNDE9c3RhdGljIHZvaWQgc21jX2xsY19wcm9jZXNzX2NsaV9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncilcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTEyNDgtXFx0aWYgKHNtY19sbGNfaXNfbG9jYWxfYWRkX2xpbmsoXFx1MDAyNnFlbnRyeS1cXHUwMDNlbXNnKSlcXG5uZXQvc21jL3NtY19sbGMuYzoxMjQ5OlxcdFxcdHNtY19sbGNfY2xpX2FkZF9saW5rX2ludml0ZShxZW50cnktXFx1MDAzZWxpbmssIHFlbnRyeSk7XFxubmV0L3NtYy9zbWNfbGxjLmMtMTI1MC1cXHRlbHNlXFxubmV0L3NtYy9zbWNfbGxjLmM6MTI1MTpcXHRcXHRzbWNfbGxjX2NsaV9hZGRfbGluayhxZW50cnktXFx1MDAzZWxpbmssIHFlbnRyeSk7XFxubmV0L3NtYy9zbWNfbGxjLmMtMTI1Mi1cXHR1cF93cml0ZShcXHUwMDI2bGdyLVxcdTAwM2VsbGNfY29uZl9tdXRleCk7XFxuLS1cXG5uZXQvc21jL3NtY19sbGMuaD0xMTI9dm9pZCBzbWNfbGxjX3NlbmRfbGlua19kZWxldGVfYWxsKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLCBib29sIG9yZCxcXG5uZXQvc21jL3NtY19sbGMuaC0xMTMtXFx0XFx0XFx0XFx0ICB1MzIgcnNuKTtcXG5uZXQvc21jL3NtY19sbGMuaDoxMTQ6aW50IHNtY19sbGNfY2xpX2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluaywgc3RydWN0IHNtY19sbGNfcWVudHJ5ICpxZW50cnkpO1xcbm5ldC9zbWMvc21jX2xsYy5oLTExNS1pbnQgc21jX2xsY19zcnZfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMjo1ODowMC4xMDQ0NTMxOTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjczMzE5MjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gYHNtY19sbGNfc3J2X2FkZF9saW5rYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIGl0LiBMZXQncyBkaWcgaW50byBgc21jX2xsY19zcnZfYWRkX2xpbmtgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiB0aGlzIGZ1bmN0aW9uIGFuZCBob3cgaXQgcmVsYXRlcyB0byB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIEknbSBnb2luZyB0byBxdWlja2x5IHJldmlldyBpdHMgaW1wbGVtZW50YXRpb24sIGZvY3VzaW5nIG9uIHRoZSBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYW5kIGxpbmsgY3JlYXRpb24gcHJvY2Vzcy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgaGVyZSwgYW5kIHdhbnQgdG8gY2hlY2sgaG93IHRoZSBzZXJ2ZXIgc2lkZSByZXNvdXJjZSBhbGxvY2F0aW9ucyBhcmUgbWFuYWdlZCB0byBhdm9pZCBhbnkgbGVha3Mgb3IgdW5leHBlY3RlZCByZXNvdXJjZSBleGhhdXN0aW9uLiBUaGlua2luZyBiYWNrLCBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgSSBzaG91bGQgYmUgb24gdGhlIGxvb2tvdXQgZm9yLCBwYXJ0aWN1bGFybHkgaW4gYSBtdWx0aS10aHJlYWRlZCBlbnZpcm9ubWVudD8gSSBhbHNvIG5lZWQgdG8gYXNzZXNzIHRoZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIGVzcGVjaWFsbHkgcmVsYXRlZCB0byBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyB0aGlzIGZ1bmN0aW9uIGludHJvZHVjZXMgdG8gb3VyIHN5c3RlbS4gU28sIGxldCdzIGdldCBzdGFydGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODU3LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDI6NTg6MDMuMzc3Nzc0Njk2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzA4OTk4NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic21jX2xsY19zcnZfYWRkX2xpbmtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9hZl9zbWMuYz0xODcyPXN0YXRpYyBpbnQgc21jcl9zZXJ2X2NvbmZfZmlyc3RfbGluayhzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMTkxNy1cXHRcXHQvKiBpbml0aWFsIGNvbnRhY3QgLSB0cnkgdG8gZXN0YWJsaXNoIHNlY29uZCBsaW5rICovXFxubmV0L3NtYy9hZl9zbWMuYzoxOTE4OlxcdFxcdHNtY19sbGNfc3J2X2FkZF9saW5rKGxpbmssIE5VTEwpO1xcbm5ldC9zbWMvYWZfc21jLmMtMTkxOS1cXHRcXHR1cF93cml0ZShcXHUwMDI2bGluay1cXHUwMDNlbGdyLVxcdTAwM2VsbGNfY29uZl9tdXRleCk7XFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYz0xNDIxPXN0YXRpYyB2b2lkIHNtY19sbGNfc2VuZF9yZXFfYWRkX2xpbmtfcmVzcG9uc2Uoc3RydWN0IHNtY19sbGNfcWVudHJ5ICpxZW50cnkpXFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYy0xNDI5LVxcbm5ldC9zbWMvc21jX2xsYy5jOjE0MzA6aW50IHNtY19sbGNfc3J2X2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluayxcXG5uZXQvc21jL3NtY19sbGMuYy0xNDMxLVxcdFxcdFxcdCBzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnJlcV9xZW50cnkpXFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYz0xNTUyPXN0YXRpYyB2b2lkIHNtY19sbGNfcHJvY2Vzc19zcnZfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IpXFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYy0xNTYwLVxcdGRvd25fd3JpdGUoXFx1MDAyNmxnci1cXHUwMDNlbGxjX2NvbmZfbXV0ZXgpO1xcbm5ldC9zbWMvc21jX2xsYy5jOjE1NjE6XFx0cmMgPSBzbWNfbGxjX3Nydl9hZGRfbGluayhsaW5rLCBxZW50cnkpO1xcbm5ldC9zbWMvc21jX2xsYy5jLTE1NjItXFx0aWYgKCFyYyBcXHUwMDI2XFx1MDAyNiBsZ3ItXFx1MDAzZXR5cGUgPT0gU01DX0xHUl9TWU1NRVRSSUMpIHtcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5oPTExND1pbnQgc21jX2xsY19jbGlfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLCBzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnFlbnRyeSk7XFxubmV0L3NtYy9zbWNfbGxjLmg6MTE1OmludCBzbWNfbGxjX3Nydl9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXFxubmV0L3NtYy9zbWNfbGxjLmgtMTE2LVxcdFxcdFxcdCBzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnJlcV9xZW50cnkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMjo1ODowNS4wNDg2Nzk4M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1MzMzMTI0OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRml4aW5nIHRoZSBTTUMgTExDIE1lc3NhZ2UgSGFuZGxpbmc6IEEgRGVlcCBEaXZlKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0YWNrbGluZyBhIHByZXR0eSBjcml0aWNhbCBidWcgd2l0aGluIHRoZSBTTUMgTExDIGxheWVyLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBzbWNfbGxjX2VucXVldWVgIGFuZCBgc21jX2xsY19zYXZlX2FkZF9saW5rX3JrZXlzYC4gSXQgc2VlbXMgd2UndmUgZ290IGFuIG92ZXJmbG93IGlzc3VlIHdpdGggbGFyZ2UgU01DLVJ2MiBtZXNzYWdlcywgcGFydGljdWxhcmx5IGBBRERfTElOS2AgYW5kIGBERUxFVEVfUktFWV9WMmAuIEJhc2ljYWxseSwgd2UncmUgcnVubmluZyBpbnRvIGJ1ZmZlciBsaW1pdGF0aW9ucyB3aXRoaW4gdGhlIGBzbWNfbGxjX3FlbnRyeWAgc3RydWN0LiBUaGUgZXhpc3RpbmcgYWxsb2NhdGlvbiBpcyBzaW1wbHkgdG9vIHNtYWxsIHRvIGhhbmRsZSB0aGUgbWVzc2FnZSBwYXlsb2FkLCB3aGljaCBjYW4gbGVhZCB0byBkYXRhIGNvcnJ1cHRpb24gb3Igb3V0cmlnaHQgZmFpbHVyZSB0byBwcm9jZXNzIHRoZXNlIGNvbW1hbmRzLlxuXG5UaGUgZ2VuaXVzIG9mIHRoaXMgZml4IGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBmbGV4aWJsZSBhcnJheSBtZW1iZXIsIGBib2R5W11gLCB3aXRoaW4gdGhlIGBzdHJ1Y3Qgc21jX2xsY19xZW50cnlgLiBUaGlzIGlzIHJlYWxseSBzbWFydDsgYnkgZHluYW1pY2FsbHkgYWxsb2NhdGluZyB0aGUgYnVmZmVyIGJhc2VkIG9uIHRoZSBhY3R1YWwgbWVzc2FnZSBzaXplLCB3ZSBndWFyYW50ZWUgdGhhdCB3ZeKAmXZlIGdvdCBlbm91Z2ggc3BhY2UgdG8gd29yayB3aXRoLCB3aGljaCBwcmV2ZW50cyB0aG9zZSBvdmVyZmxvd3MuXG5cblRoaXMgaXMgYSBwcmV0dHkgZnVuZGFtZW50YWwgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0J3MgdG91Y2hpbmcgdGhlIGNvcmUgb2YgdGhlIExMQyBwcm9jZXNzaW5nIGxvZ2ljLiBUaGUgY29kZSBpcyBnZXR0aW5nIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHNvIGl0J3MgZGVmaW5pdGVseSB3b3J0aCBzb21lIHNlcmlvdXMgZnV6emluZy5cblxuTXkgcHJpbWFyeSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOiBgc21jX2xsY19jbGlfYWRkX2xpbmtgLCBgc21jX2xsY19zcnZfYWRkX2xpbmtgLCBgc21jX2xsY19hZGRfbGlua19sb2NhbGAsIGFuZCBgc21jX2xsY19zcnZfZGVsZXRlX2xpbmtfbG9jYWxgLiBUaGVzZSBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHMgZm9yIHRoZSBwcm9ibGVtYXRpYyBjb21tYW5kcy4gSeKAmWxsIG1ha2Ugc3VyZSB0byBleHBsb3JlIGFsbCBwYXRocyB3aXRoaW4gdGhlc2UgZnVuY3Rpb25zLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgd2F5IHRoZSBuZXcgYGJvZHlbXWAgbWVtYmVyIGlzIHVzZWQgYW5kIGVuc3VyZSB0aGVyZSBhcmUgbm8gb2ZmLWJ5LW9uZSBlcnJvcnMgb3Igb3RoZXIgdnVsbmVyYWJpbGl0aWVzIGludHJvZHVjZWQgYnkgdGhlIGR5bmFtaWMgYWxsb2NhdGlvbi5cblxuTm93LCBsZXQncyBnbyBiYWNrIGFuZCBkb3VibGUgY2hlY2sgdGhlIFNNQyBjb25maWd1cmF0aW9uIG9wdGlvbnMsIG1ha2luZyBzdXJlIHdlIGhhdmVuJ3QgaW5hZHZlcnRlbnRseSBicm9rZW4gYW55IGV4aXN0aW5nIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjkwLCJPdXRwdXRUb2tlbnMiOjE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAyOjU4OjEwLjU4MTk5NDQ3NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY4OTY2NDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTTUNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvS2NvbmZpZz0xNDY9Y29uZmlnIEkyQ19TUElfU01DMV9VQ09ERV9QQVRDSFxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvS2NvbmZpZy0xNTAtXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvS2NvbmZpZzoxNTE6Y29uZmlnIFNNQ19VQ09ERV9QQVRDSFxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L0tjb25maWctMTUyLVxcdGJvb2wgXFxcIlNNQyByZWxvY2F0aW9uIHBhdGNoXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9LY29uZmlnPTIwPWlmIE5FVF9WRU5ET1JfU01TQ1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2MvS2NvbmZpZy0yMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL0tjb25maWc6MjI6Y29uZmlnIFNNQzkxWFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2MvS2NvbmZpZy0yMy1cXHR0cmlzdGF0ZSBcXFwiU01DIDkxQzl4LzkxQzF4eHggc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9zbWMvS2NvbmZpZzoyOmNvbmZpZyBTTUNcXG5uZXQvc21jL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiU01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcXFwiXFxuLS1cXG5uZXQvc21jL0tjb25maWctMTMtXFxubmV0L3NtYy9LY29uZmlnOjE0OmNvbmZpZyBTTUNfRElBR1xcbm5ldC9zbWMvS2NvbmZpZy0xNS1cXHR0cmlzdGF0ZSBcXFwiU01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvc21jL0tjb25maWctMjItXFxubmV0L3NtYy9LY29uZmlnOjIzOmNvbmZpZyBTTUNfSFNfQ1RSTF9CUEZcXG5uZXQvc21jL0tjb25maWctMjQtXFx0Ym9vbCBcXFwiR2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQyBoYW5kc2hha2UgZmxvd1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDI6NTg6MTIuMTUwOTY1MjAxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAyODk3NjY0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgdGhlIGNvbmZpZ3VyYXRpb24gaW4gZnJvbnQgb2YgbWUgaXMgYFNNQ2AuIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIEJ1dCwgYXMgd2UgYWxsIGtub3csIG5vdGhpbmcgZXhpc3RzIGluIGEgdmFjdXVtLCBlc3BlY2lhbGx5IGluIHRoaXMgZmllbGQuIE15IGltbWVkaWF0ZSBuZXh0IHRob3VnaHQgaXMgdG8gZGlnIGRlZXBlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHdpZGVyIGNvbnRleHQuIEFyZSB0aGVyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIHdvdmVuIGluIGhlcmU/IFdoYXQgZWxzZSBkb2VzIGBTTUNgIHJlbHkgb24gdG8gZnVuY3Rpb24gY29ycmVjdGx5PyBXaGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIG11c3QgSSBjb25zaWRlcj8gQmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgSSBtdXN0IGVuc3VyZSBJIGhhdmUgYSBjb21wbGV0ZSBwaWN0dXJlLiBMZXQncyBkZWx2ZSBpbiBhbmQgZmluZCB0aGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDcyNiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAyOjU4OjE1LjE3OTk0NTc0N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2MDcwNDQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uLipTTUNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm0vS2NvbmZpZz0xMDY5PWNvbmZpZyBBUk1fUFNDSVxcbmFyY2gvYXJtL0tjb25maWctMTA3MC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciB0aGUgQVJNIFBvd2VyIFN0YXRlIENvb3JkaW5hdGlvbiBJbnRlcmZhY2UgKFBTQ0kpXFxcIlxcbmFyY2gvYXJtL0tjb25maWc6MTA3MTpcXHRkZXBlbmRzIG9uIEhBVkVfQVJNX1NNQ0NDXFxuYXJjaC9hcm0vS2NvbmZpZy0xMDcyLVxcdHNlbGVjdCBBUk1fUFNDSV9GV1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vcHNjaS5jPTMyMT1zdGF0aWMgaW50IGt2bV9wc2NpXzFfeF9jYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1pbm9yKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vcHNjaS5jLTM3OS1cXHRcXHQgKiBSZXR1cm4gZGlyZWN0bHkgdG8gdXNlcnNwYWNlIHdpdGhvdXQgY2hhbmdpbmcgdGhlIHZDUFUnc1xcbmFyY2gvYXJtNjQva3ZtL3BzY2kuYzozODA6XFx0XFx0ICogcmVnaXN0ZXJzLiBVc2Vyc3BhY2UgZGVwZW5kcyBvbiByZWFkaW5nIHRoZSBTTUNDQyBwYXJhbWV0ZXJzXFxuYXJjaC9hcm02NC9rdm0vcHNjaS5jLTM4MS1cXHRcXHQgKiB0byBpbXBsZW1lbnQgU1lTVEVNX1NVU1BFTkQuXFxuLS1cXG5kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL0tjb25maWc9NTc4PWNvbmZpZyBIV19SQU5ET01fQVJNX1NNQ0NDX1RSTkdcXG5kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL0tjb25maWctNTc5LVxcdHRyaXN0YXRlIFxcXCJBcm0gU01DQ0MgVFJORyBmaXJtd2FyZSBpbnRlcmZhY2Ugc3VwcG9ydFxcXCJcXG5kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL0tjb25maWc6NTgwOlxcdGRlcGVuZHMgb24gSEFWRV9BUk1fU01DQ0NfRElTQ09WRVJZXFxuZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9LY29uZmlnLTU4MS1cXHRkZWZhdWx0IEhXX1JBTkRPTVxcbi0tXFxuZHJpdmVycy9jbGsvaW14L0tjb25maWc9OTU9Y29uZmlnIENMS19JTVg4UVhQXFxuLS1cXG5kcml2ZXJzL2Nsay9pbXgvS2NvbmZpZy05Ny1cXHRkZXBlbmRzIG9uIChBUkNIX01YQyBcXHUwMDI2XFx1MDAyNiBBUk02NCkgfHwgQ09NUElMRV9URVNUXFxuZHJpdmVycy9jbGsvaW14L0tjb25maWc6OTg6XFx0ZGVwZW5kcyBvbiBJTVhfU0NVIFxcdTAwMjZcXHUwMDI2IEhBVkVfQVJNX1NNQ0NDXFxuZHJpdmVycy9jbGsvaW14L0tjb25maWctOTktXFx0c2VsZWN0IE1YQ19DTEtfU0NVXFxuLS1cXG5kcml2ZXJzL2RldmZyZXEvS2NvbmZpZz0xMTI9Y29uZmlnIEFSTV9JTVg4TV9ERFJDX0RFVkZSRVFcXG5kcml2ZXJzL2RldmZyZXEvS2NvbmZpZy0xMTMtXFx0dHJpc3RhdGUgXFxcImkuTVg4TSBERFJDIERFVkZSRVEgRHJpdmVyXFxcIlxcbmRyaXZlcnMvZGV2ZnJlcS9LY29uZmlnOjExNDpcXHRkZXBlbmRzIG9uIChBUkNIX01YQyBcXHUwMDI2XFx1MDAyNiBIQVZFX0FSTV9TTUNDQykgfHwgXFxcXFxcbmRyaXZlcnMvZGV2ZnJlcS9LY29uZmlnLTExNS1cXHRcXHQoQ09NUElMRV9URVNUIFxcdTAwMjZcXHUwMDI2IEhBVkVfQVJNX1NNQ0NDKVxcbi0tXFxuZHJpdmVycy9kZXZmcmVxL0tjb25maWc9MTQzPWNvbmZpZyBBUk1fUkszMzk5X0RNQ19ERVZGUkVRXFxuZHJpdmVycy9kZXZmcmVxL0tjb25maWctMTQ0LVxcdHRyaXN0YXRlIFxcXCJBUk0gUkszMzk5IERNQyBERVZGUkVRIERyaXZlclxcXCJcXG5kcml2ZXJzL2RldmZyZXEvS2NvbmZpZzoxNDU6XFx0ZGVwZW5kcyBvbiAoQVJDSF9ST0NLQ0hJUCBcXHUwMDI2XFx1MDAyNiBIQVZFX0FSTV9TTUNDQykgfHwgXFxcXFxcbmRyaXZlcnMvZGV2ZnJlcS9LY29uZmlnLTE0Ni1cXHRcXHQoQ09NUElMRV9URVNUIFxcdTAwMjZcXHUwMDI2IEhBVkVfQVJNX1NNQ0NDKVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9LY29uZmlnPTE0Mj1jb25maWcgSU5URUxfU1RSQVRJWDEwX1NFUlZJQ0VcXG5kcml2ZXJzL2Zpcm13YXJlL0tjb25maWctMTQzLVxcdHRyaXN0YXRlIFxcXCJJbnRlbCBTdHJhdGl4MTAgU2VydmljZSBMYXllclxcXCJcXG5kcml2ZXJzL2Zpcm13YXJlL0tjb25maWc6MTQ0OlxcdGRlcGVuZHMgb24gQVJDSF9JTlRFTF9TT0NGUEdBIFxcdTAwMjZcXHUwMDI2IEFSTTY0IFxcdTAwMjZcXHUwMDI2IEhBVkVfQVJNX1NNQ0NDXFxuZHJpdmVycy9maXJtd2FyZS9LY29uZmlnLTE0NS1cXHRkZWZhdWx0IG5cXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX2ZmYS9LY29uZmlnPTE4PWNvbmZpZyBBUk1fRkZBX1NNQ0NDXFxuLS1cXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9mZmEvS2NvbmZpZy0yMC1cXHRkZWZhdWx0IEFSTV9GRkFfVFJBTlNQT1JUXFxuZHJpdmVycy9maXJtd2FyZS9hcm1fZmZhL0tjb25maWc6MjE6XFx0ZGVwZW5kcyBvbiBBUk02NCBcXHUwMDI2XFx1MDAyNiBIQVZFX0FSTV9TTUNDQ19ESVNDT1ZFUllcXG4tLVxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvdHJhbnNwb3J0cy9LY29uZmlnPTM3PWNvbmZpZyBBUk1fU0NNSV9UUkFOU1BPUlRfU01DXFxuZHJpdmVycy9maXJtd2FyZS9hcm1fc2NtaS90cmFuc3BvcnRzL0tjb25maWctMzgtXFx0dHJpc3RhdGUgXFxcIlNDTUkgdHJhbnNwb3J0IGJhc2VkIG9uIFNNQ1xcXCJcXG5kcml2ZXJzL2Zpcm13YXJlL2FybV9zY21pL3RyYW5zcG9ydHMvS2NvbmZpZzozOTpcXHRkZXBlbmRzIG9uIEhBVkVfQVJNX1NNQ0NDX0RJU0NPVkVSWVxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvdHJhbnNwb3J0cy9LY29uZmlnLTQwLVxcdHNlbGVjdCBBUk1fU0NNSV9IQVZFX1RSQU5TUE9SVFxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9hcm1fc2NtaS90cmFuc3BvcnRzL0tjb25maWc9NTE9Y29uZmlnIEFSTV9TQ01JX1RSQU5TUE9SVF9TTUNfQVRPTUlDX0VOQUJMRVxcbmRyaXZlcnMvZmlybXdhcmUvYXJtX3NjbWkvdHJhbnNwb3J0cy9LY29uZmlnLTUyLVxcdGJvb2wgXFxcIkVuYWJsZSBhdG9taWMgbW9kZSBzdXBwb3J0IGZvciBTQ01JIFNNQyB0cmFuc3BvcnRcXFwiXFxuZHJpdmVycy9maXJtd2FyZS9hcm1fc2NtaS90cmFuc3BvcnRzL0tjb25maWc6NTM6XFx0ZGVwZW5kcyBvbiBBUk1fU0NNSV9UUkFOU1BPUlRfU01DXFxuZHJpdmVycy9maXJtd2FyZS9hcm1fc2NtaS90cmFuc3BvcnRzL0tjb25maWctNTQtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9zbWNjYy9LY29uZmlnPTE4PWNvbmZpZyBBUk1fU01DQ0NfU09DX0lEXFxuZHJpdmVycy9maXJtd2FyZS9zbWNjYy9LY29uZmlnLTE5LVxcdGJvb2wgXFxcIlNvQyBidXMgZGV2aWNlIGZvciB0aGUgQVJNIFNNQ0NDIFNPQ19JRFxcXCJcXG5kcml2ZXJzL2Zpcm13YXJlL3NtY2NjL0tjb25maWc6MjA6XFx0ZGVwZW5kcyBvbiBIQVZFX0FSTV9TTUNDQ19ESVNDT1ZFUllcXG5kcml2ZXJzL2Zpcm13YXJlL3NtY2NjL0tjb25maWctMjEtXFx0ZGVmYXVsdCB5XFxuLS1cXG5kcml2ZXJzL2dwaW8vS2NvbmZpZz0xNTI4PWNvbmZpZyBHUElPX01BQ1NNQ1xcbmRyaXZlcnMvZ3Bpby9LY29uZmlnLTE1MjktXFx0dHJpc3RhdGUgXFxcIkFwcGxlIE1hYyBTTUMgR1BJT1xcXCJcXG5kcml2ZXJzL2dwaW8vS2NvbmZpZzoxNTMwOlxcdGRlcGVuZHMgb24gTUZEX01BQ1NNQ1xcbmRyaXZlcnMvZ3Bpby9LY29uZmlnLTE1MzEtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWc9Mj1jb25maWcgRFJNX01FRElBVEVLXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZy02LVxcdGRlcGVuZHMgb24gQ09NTU9OX0NMS1xcbmRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnOjc6XFx0ZGVwZW5kcyBvbiBIQVZFX0FSTV9TTUNDQyB8fCBDT01QSUxFX1RFU1RcXG5kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZy04LVxcdGRlcGVuZHMgb24gT0ZcXG4tLVxcbmRyaXZlcnMvaHdtb24vS2NvbmZpZz0xMTkxPWNvbmZpZyBTRU5TT1JTX01BQ1NNQ19IV01PTlxcbmRyaXZlcnMvaHdtb24vS2NvbmZpZy0xMTkyLVxcdHRyaXN0YXRlIFxcXCJBcHBsZSBTTUMgKEFwcGxlIFNpbGljb24pXFxcIlxcbmRyaXZlcnMvaHdtb24vS2NvbmZpZzoxMTkzOlxcdGRlcGVuZHMgb24gTUZEX01BQ1NNQyBcXHUwMDI2XFx1MDAyNiBPRlxcbmRyaXZlcnMvaHdtb24vS2NvbmZpZy0xMTk0LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbXRkL25hbmQvcmF3L0tjb25maWc9NDEwPWNvbmZpZyBNVERfTkFORF9QTDM1WFxcbi0tXFxuZHJpdmVycy9tdGQvbmFuZC9yYXcvS2NvbmZpZy00MTItXFx0ZGVwZW5kcyBvbiBPRlxcbmRyaXZlcnMvbXRkL25hbmQvcmF3L0tjb25maWc6NDEzOlxcdGRlcGVuZHMgb24gUEwzNTNfU01DXFxuZHJpdmVycy9tdGQvbmFuZC9yYXcvS2NvbmZpZy00MTQtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9udm1lbS9LY29uZmlnPTExOT1jb25maWcgTlZNRU1fSU1YX09DT1RQX1NDVVxcbi0tXFxuZHJpdmVycy9udm1lbS9LY29uZmlnLTEyMS1cXHRkZXBlbmRzIG9uIElNWF9TQ1VcXG5kcml2ZXJzL252bWVtL0tjb25maWc6MTIyOlxcdGRlcGVuZHMgb24gSEFWRV9BUk1fU01DQ0NcXG5kcml2ZXJzL252bWVtL0tjb25maWctMTIzLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvcGNpL2hvdHBsdWcvS2NvbmZpZz02ND1jb25maWcgSE9UUExVR19QQ0lfQUNQSV9BTVBFUkVfQUxUUkFcXG4tLVxcbmRyaXZlcnMvcGNpL2hvdHBsdWcvS2NvbmZpZy02Ni1cXHRkZXBlbmRzIG9uIEhPVFBMVUdfUENJX0FDUElcXG5kcml2ZXJzL3BjaS9ob3RwbHVnL0tjb25maWc6Njc6XFx0ZGVwZW5kcyBvbiBIQVZFX0FSTV9TTUNDQ19ESVNDT1ZFUllcXG5kcml2ZXJzL3BjaS9ob3RwbHVnL0tjb25maWctNjgtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9waHkvbWFydmVsbC9LY29uZmlnPTI3PWNvbmZpZyBQSFlfTVZFQlVfQTM3MDBfQ09NUEhZXFxuLS1cXG5kcml2ZXJzL3BoeS9tYXJ2ZWxsL0tjb25maWctMzAtXFx0ZGVwZW5kcyBvbiBPRlxcbmRyaXZlcnMvcGh5L21hcnZlbGwvS2NvbmZpZzozMTpcXHRkZXBlbmRzIG9uIEhBVkVfQVJNX1NNQ0NDXFxuZHJpdmVycy9waHkvbWFydmVsbC9LY29uZmlnLTMyLVxcdGRlZmF1bHQgQVJDSF9NVkVCVVxcbi0tXFxuZHJpdmVycy9waHkvbWFydmVsbC9LY29uZmlnPTU4PWNvbmZpZyBQSFlfTVZFQlVfQ1AxMTBfQ09NUEhZXFxuLS1cXG5kcml2ZXJzL3BoeS9tYXJ2ZWxsL0tjb25maWctNjEtXFx0ZGVwZW5kcyBvbiBPRlxcbmRyaXZlcnMvcGh5L21hcnZlbGwvS2NvbmZpZzo2MjpcXHRkZXBlbmRzIG9uIEhBVkVfQVJNX1NNQ0NDXFxuZHJpdmVycy9waHkvbWFydmVsbC9LY29uZmlnLTYzLVxcdHNlbGVjdCBHRU5FUklDX1BIWVxcbi0tXFxuZHJpdmVycy9wbWRvbWFpbi9hbWxvZ2ljL0tjb25maWc9MTU9Y29uZmlnIE1FU09OX1NFQ1VSRV9QTV9ET01BSU5TXFxuLS1cXG5kcml2ZXJzL3BtZG9tYWluL2FtbG9naWMvS2NvbmZpZy0xOC1cXHRkZXBlbmRzIG9uIFBNIFxcdTAwMjZcXHUwMDI2IE9GXFxuZHJpdmVycy9wbWRvbWFpbi9hbWxvZ2ljL0tjb25maWc6MTk6XFx0ZGVwZW5kcyBvbiBIQVZFX0FSTV9TTUNDQ1xcbmRyaXZlcnMvcG1kb21haW4vYW1sb2dpYy9LY29uZmlnLTIwLVxcdGRlZmF1bHQgQVJDSF9NRVNPTlxcbi0tXFxuZHJpdmVycy9wbWRvbWFpbi9tZWRpYXRlay9LY29uZmlnPTQ2PWNvbmZpZyBBSVJPSEFfQ1BVX1BNX0RPTUFJTlxcbi0tXFxuZHJpdmVycy9wbWRvbWFpbi9tZWRpYXRlay9LY29uZmlnLTQ4LVxcdGRlZmF1bHQgQVJDSF9BSVJPSEFcXG5kcml2ZXJzL3BtZG9tYWluL21lZGlhdGVrL0tjb25maWc6NDk6XFx0ZGVwZW5kcyBvbiBIQVZFX0FSTV9TTUNDQ1xcbmRyaXZlcnMvcG1kb21haW4vbWVkaWF0ZWsvS2NvbmZpZy01MC1cXHRkZXBlbmRzIG9uIFBNXFxuLS1cXG5kcml2ZXJzL3BtZG9tYWluL3JvY2tjaGlwL0tjb25maWc9ND1jb25maWcgUk9DS0NISVBfUE1fRE9NQUlOU1xcbi0tXFxuZHJpdmVycy9wbWRvbWFpbi9yb2NrY2hpcC9LY29uZmlnLTctXFx0ZGVwZW5kcyBvbiBQTVxcbmRyaXZlcnMvcG1kb21haW4vcm9ja2NoaXAvS2NvbmZpZzo4OlxcdGRlcGVuZHMgb24gSEFWRV9BUk1fU01DQ0NfRElTQ09WRVJZXFxuZHJpdmVycy9wbWRvbWFpbi9yb2NrY2hpcC9LY29uZmlnLTktXFx0ZGVwZW5kcyBvbiBSRUdVTEFUT1JcXG4tLVxcbmRyaXZlcnMvcG93ZXIvcmVzZXQvS2NvbmZpZz0xMzE9Y29uZmlnIFBPV0VSX1JFU0VUX01BQ1NNQ1xcbmRyaXZlcnMvcG93ZXIvcmVzZXQvS2NvbmZpZy0xMzItXFx0dHJpc3RhdGUgXFxcIkFwcGxlIFNNQyByZXNldC9wb3dlci1vZmYgZHJpdmVyXFxcIlxcbmRyaXZlcnMvcG93ZXIvcmVzZXQvS2NvbmZpZzoxMzM6XFx0ZGVwZW5kcyBvbiBNRkRfTUFDU01DXFxuZHJpdmVycy9wb3dlci9yZXNldC9LY29uZmlnLTEzNC1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9LY29uZmlnPTExNTc9Y29uZmlnIE1BQ1NNQ19QT1dFUlxcbmRyaXZlcnMvcG93ZXIvc3VwcGx5L0tjb25maWctMTE1OC1cXHR0cmlzdGF0ZSBcXFwiQXBwbGUgU01DIEJhdHRlcnkgYW5kIFBvd2VyIERyaXZlclxcXCJcXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9LY29uZmlnOjExNTk6XFx0ZGVwZW5kcyBvbiBNRkRfTUFDU01DXFxuZHJpdmVycy9wb3dlci9zdXBwbHkvS2NvbmZpZy0xMTYwLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvcHRwL0tjb25maWc9MTIyPWNvbmZpZyBQVFBfMTU4OF9DTE9DS19LVk1cXG4tLVxcbmRyaXZlcnMvcHRwL0tjb25maWctMTI0LVxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tcXG5kcml2ZXJzL3B0cC9LY29uZmlnOjEyNTpcXHRkZXBlbmRzIG9uIChLVk1fR1VFU1QgXFx1MDAyNlxcdTAwMjYgWDg2KSB8fCAoSEFWRV9BUk1fU01DQ0NfRElTQ09WRVJZIFxcdTAwMjZcXHUwMDI2IEFSTV9BUkNIX1RJTUVSKVxcbmRyaXZlcnMvcHRwL0tjb25maWctMTI2LVxcdGRlZmF1bHQgeVxcbi0tXFxuZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWc9MjY9Y29uZmlnIElNWF9SRU1PVEVQUk9DXFxuLS1cXG5kcml2ZXJzL3JlbW90ZXByb2MvS2NvbmZpZy0yOC1cXHRkZXBlbmRzIG9uIEFSQ0hfTVhDXFxuZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWc6Mjk6XFx0ZGVwZW5kcyBvbiBIQVZFX0FSTV9TTUNDQ1xcbmRyaXZlcnMvcmVtb3RlcHJvYy9LY29uZmlnLTMwLVxcdGRlcGVuZHMgb24gSU1YX1NDTUlfQ1BVX0RSViB8fCAhSU1YX1NDTUlfQ1BVX0RSVlxcbi0tXFxuZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWc9Mzk9Y29uZmlnIElNWF9EU1BfUkVNT1RFUFJPQ1xcbi0tXFxuZHJpdmVycy9yZW1vdGVwcm9jL0tjb25maWctNDEtXFx0ZGVwZW5kcyBvbiBBUkNIX01YQ1xcbmRyaXZlcnMvcmVtb3RlcHJvYy9LY29uZmlnOjQyOlxcdGRlcGVuZHMgb24gSEFWRV9BUk1fU01DQ0NcXG5kcml2ZXJzL3JlbW90ZXByb2MvS2NvbmZpZy00My1cXHRzZWxlY3QgTUFJTEJPWFxcbi0tXFxuZHJpdmVycy9yZXNldC9LY29uZmlnPTExNz1jb25maWcgUkVTRVRfSU1YX1NDVVxcbmRyaXZlcnMvcmVzZXQvS2NvbmZpZy0xMTgtXFx0dHJpc3RhdGUgXFxcImkuTVg4USBSZXNldCBEcml2ZXJcXFwiXFxuZHJpdmVycy9yZXNldC9LY29uZmlnOjExOTpcXHRkZXBlbmRzIG9uIElNWF9TQ1UgXFx1MDAyNlxcdTAwMjYgSEFWRV9BUk1fU01DQ0NcXG5kcml2ZXJzL3Jlc2V0L0tjb25maWctMTIwLVxcdGRlcGVuZHMgb24gKEFSTTY0IFxcdTAwMjZcXHUwMDI2IEFSQ0hfTVhDKSB8fCBDT01QSUxFX1RFU1RcXG4tLVxcbmRyaXZlcnMvcnRjL0tjb25maWc9MTkxNj1jb25maWcgUlRDX0RSVl9JTVhfU0NcXG5kcml2ZXJzL3J0Yy9LY29uZmlnLTE5MTctXFx0ZGVwZW5kcyBvbiBJTVhfU0NVXFxuZHJpdmVycy9ydGMvS2NvbmZpZzoxOTE4OlxcdGRlcGVuZHMgb24gSEFWRV9BUk1fU01DQ0NcXG5kcml2ZXJzL3J0Yy9LY29uZmlnLTE5MTktXFx0dHJpc3RhdGUgXFxcIk5YUCBpLk1YIFN5c3RlbSBDb250cm9sbGVyIFJUQyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9ydGMvS2NvbmZpZz0yMTAzPWNvbmZpZyBSVENfRFJWX01BQ1NNQ1xcbmRyaXZlcnMvcnRjL0tjb25maWctMjEwNC1cXHR0cmlzdGF0ZSBcXFwiQXBwbGUgTWFjIFN5c3RlbSBNYW5hZ2VtZW50IENvbnRyb2xsZXIgUlRDXFxcIlxcbmRyaXZlcnMvcnRjL0tjb25maWc6MjEwNTpcXHRkZXBlbmRzIG9uIE1GRF9NQUNTTUNcXG5kcml2ZXJzL3J0Yy9LY29uZmlnLTIxMDYtXFx0aGVscFxcbi0tXFxuZHJpdmVycy90ZWUvS2NvbmZpZz0zPW1lbnVjb25maWcgVEVFXFxuZHJpdmVycy90ZWUvS2NvbmZpZy00LVxcdHRyaXN0YXRlIFxcXCJUcnVzdGVkIEV4ZWN1dGlvbiBFbnZpcm9ubWVudCBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvdGVlL0tjb25maWc6NTpcXHRkZXBlbmRzIG9uIEhBVkVfQVJNX1NNQ0NDIHx8IENPTVBJTEVfVEVTVCB8fCBDUFVfU1VQX0FNRFxcbmRyaXZlcnMvdGVlL0tjb25maWctNi1cXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEExXFxuLS1cXG5kcml2ZXJzL3RlZS9vcHRlZS9LY29uZmlnPTM9Y29uZmlnIE9QVEVFXFxuZHJpdmVycy90ZWUvb3B0ZWUvS2NvbmZpZy00LVxcdHRyaXN0YXRlIFxcXCJPUC1URUVcXFwiXFxuZHJpdmVycy90ZWUvb3B0ZWUvS2NvbmZpZzo1OlxcdGRlcGVuZHMgb24gSEFWRV9BUk1fU01DQ0NcXG5kcml2ZXJzL3RlZS9vcHRlZS9LY29uZmlnLTYtXFx0ZGVwZW5kcyBvbiBNTVVcXG4tLVxcbmRyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZz03ODg9Y29uZmlnIElNWF9TQ19XRFRcXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWctNzg5LVxcdHRyaXN0YXRlIFxcXCJJTVggU0MgV2F0Y2hkb2dcXFwiXFxuZHJpdmVycy93YXRjaGRvZy9LY29uZmlnOjc5MDpcXHRkZXBlbmRzIG9uIEhBVkVfQVJNX1NNQ0NDXFxuZHJpdmVycy93YXRjaGRvZy9LY29uZmlnLTc5MS1cXHRkZXBlbmRzIG9uIElNWF9TQ1UgfHwgQ09NUElMRV9URVNUXFxuLS1cXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWc9OTM5PWNvbmZpZyBBUk1fU01DX1dBVENIRE9HXFxuLS1cXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWctOTQyLVxcdGRlcGVuZHMgb24gT0ZcXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWc6OTQzOlxcdGRlcGVuZHMgb24gSEFWRV9BUk1fU01DQ0NcXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWctOTQ0LVxcdHNlbGVjdCBXQVRDSERPR19DT1JFXFxuLS1cXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWc9MjM0Mj1jb25maWcgR1VOWUFIX1dBVENIRE9HXFxuLS1cXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWctMjM0NC1cXHRkZXBlbmRzIG9uIEFSQ0hfUUNPTSB8fCBDT01QSUxFX1RFU1RcXG5kcml2ZXJzL3dhdGNoZG9nL0tjb25maWc6MjM0NTpcXHRkZXBlbmRzIG9uIEhBVkVfQVJNX1NNQ0NDXFxuZHJpdmVycy93YXRjaGRvZy9LY29uZmlnLTIzNDYtXFx0c2VsZWN0IFdBVENIRE9HX0NPUkVcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZz0xND1jb25maWcgU01DX0RJQUdcXG5uZXQvc21jL0tjb25maWctMTUtXFx0dHJpc3RhdGUgXFxcIlNNQzogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbm5ldC9zbWMvS2NvbmZpZzoxNjpcXHRkZXBlbmRzIG9uIFNNQ1xcbm5ldC9zbWMvS2NvbmZpZy0xNy1cXHRoZWxwXFxuLS1cXG5uZXQvc21jL0tjb25maWc9MjM9Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxcbm5ldC9zbWMvS2NvbmZpZy0yNC1cXHRib29sIFxcXCJHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XFxcIlxcbm5ldC9zbWMvS2NvbmZpZzoyNTpcXHRkZXBlbmRzIG9uIFNNQyBcXHUwMDI2XFx1MDAyNiBCUEZfSklUIFxcdTAwMjZcXHUwMDI2IEJQRl9TWVNDQUxMXFxubmV0L3NtYy9LY29uZmlnLTI2LVxcdGRlZmF1bHQgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMjo1ODoxNy4zNDA2NjE2MDdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUxNDg5ODE0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZXZpZXdpbmcgdGhlIFNNQyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBpcyBzdHJhaWdodGZvcndhcmQsIGp1c3QgYFNNQ2AuIFRoYXQgbWFrZXMgdGhpbmdzIGEgYml0IGVhc2llciB0byBkaWdlc3QuIE5vdywgbGV0J3MgZHJpbGwgZG93biBpbnRvIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgYXJlIHJlbGV2YW50IGhlcmUuIEkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZTpcblxuKiAgIGBzbWNfbGxjX2NsaV9hZGRfbGlua2BcbiogICBgc21jX2xsY19zcnZfYWRkX2xpbmtgXG4qICAgYHNtY19sbGNfYWRkX2xpbmtfbG9jYWxgXG4qICAgYHNtY19sbGNfc3J2X2RlbGV0ZV9saW5rX2xvY2FsYFxuXG5BbHJpZ2h0LCBpbml0aWFsbHkgYHNtY19sbGNfY2xpX2FkZF9saW5rYCBhbmQgYHNtY19sbGNfc3J2X2FkZF9saW5rYCBzZWVtIGxpa2Ugc29saWQgY2FuZGlkYXRlcyB0byBleGFtaW5lLiBIb2xkIG9uIGEgc2Vjb25kLCB0aG91Z2guLi4gSSBuZWVkIHRvIGFsc28gY29uc2lkZXIgcG90ZW50aWFsIGltcGFjdHMgZnJvbSBzdGF0aWMgZnVuY3Rpb25zLiBXaGF0IGFib3V0IGBzbWNfbGxjX3J4X2hhbmRsZXJgPyBJdCBpcyBzdGF0aWMgd2hpY2ggbmVlZHMgY29uc2lkZXJhdGlvbi4gQW5kIHdoYXQgYWJvdXQgYHNtY19sbGNfcm10X2RlbGV0ZV9ya2V5YD8gQWxzbyBzdGF0aWMsIHNvIGl0IHJlcXVpcmVzIGF0dGVudGlvbi4gQW5kLCBvZiBjb3Vyc2UsIHRoZXJlJ3MgYHNtY19sbGNfZW5xdWV1ZWAsIGFub3RoZXIgc3RhdGljIG9uZS5cblxuT2theSwgbGV0J3Mgc3RlcCBiYWNrLCBhbmQgY2hlY2sgdGhvc2UgcmVtYWluaW5nIGZ1bmN0aW9ucywgYHNtY19sbGNfYWRkX2xpbmtfbG9jYWxgIGFuZCBgc21jX2xsY19zcnZfZGVsZXRlX2xpbmtfbG9jYWxgLiBUaGUga2V5IHF1ZXN0aW9uIGhlcmUgaXMgd2hldGhlciB0aGV5IGFyZSBleHBvcnRlZCBvciBub24tc3RhdGljLiBUaGUgYW5zd2VyIHRvIHRoYXQgcXVlc3Rpb24gd2lsbCBpbmZsdWVuY2UgdGhlIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDU1MywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMjo1ODoyMS44NTU1NjIyMjFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDg4NTYwMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic21jX2xsY19hZGRfbGlua19sb2NhbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL3NtY19jb3JlLmM9MTc1Nz12b2lkIHNtY3JfcG9ydF9hZGQoc3RydWN0IHNtY19pYl9kZXZpY2UgKnNtY2liZGV2LCB1OCBpYnBvcnQpXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMTc3Ny1cXHRcXHRpZiAobGluaylcXG5uZXQvc21jL3NtY19jb3JlLmM6MTc3ODpcXHRcXHRcXHRzbWNfbGxjX2FkZF9saW5rX2xvY2FsKGxpbmspO1xcbm5ldC9zbWMvc21jX2NvcmUuYy0xNzc5LVxcdH1cXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jPTE1NTI9c3RhdGljIHZvaWQgc21jX2xsY19wcm9jZXNzX3Nydl9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncilcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTE1NzAtLyogZW5xdWV1ZSBhIGxvY2FsIGFkZF9saW5rIHJlcSB0byB0cmlnZ2VyIGEgbmV3IGFkZF9saW5rIGZsb3cgKi9cXG5uZXQvc21jL3NtY19sbGMuYzoxNTcxOnZvaWQgc21jX2xsY19hZGRfbGlua19sb2NhbChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmspXFxubmV0L3NtYy9zbWNfbGxjLmMtMTU3Mi17XFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYz0xNjk3PXN0YXRpYyB2b2lkIHNtY19sbGNfcHJvY2Vzc19zcnZfZGVsZXRlX2xpbmsoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IpXFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYy0xNzU3LVxcdFxcdC8qIHRyaWdnZXIgc2V0dXAgb2YgYXN5bW0gYWx0IGxpbmsgKi9cXG5uZXQvc21jL3NtY19sbGMuYzoxNzU4OlxcdFxcdHNtY19sbGNfYWRkX2xpbmtfbG9jYWwobG5rKTtcXG5uZXQvc21jL3NtY19sbGMuYy0xNzU5LVxcdH1cXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5oPTExNT1pbnQgc21jX2xsY19zcnZfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLFxcbm5ldC9zbWMvc21jX2xsYy5oLTExNi1cXHRcXHRcXHQgc3RydWN0IHNtY19sbGNfcWVudHJ5ICpyZXFfcWVudHJ5KTtcXG5uZXQvc21jL3NtY19sbGMuaDoxMTc6dm9pZCBzbWNfbGxjX2FkZF9saW5rX2xvY2FsKHN0cnVjdCBzbWNfbGluayAqbGluayk7XFxubmV0L3NtYy9zbWNfbGxjLmgtMTE4LWludCBzbWNfbGxjX2luaXQodm9pZCkgX19pbml0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMjo1ODoyMy40MDQ0MjMwMjdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc5MTkwNjc1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgTGluay1Mb2NhbCBTTUMgTExDIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyBgc21jX2xsY19hZGRfbGlua19sb2NhbGAgaXNuJ3Qgc3RhdGljLiBUaGF0J3MgZ29vZCB0byBub3RlLCBpbXBvcnRhbnQgZm9yIGhvdyBpdCdzIGhhbmRsZWQsIHdoZXJlIGl0IGNhbiBiZSBjYWxsZWQgZnJvbSwgYW5kIG9mIGNvdXJzZSwgd2hhdCBzY29wZSBpdCBleGlzdHMgd2l0aGluLiBUaGlzIGlzbid0IGp1c3QgYSBzaW1wbGUgaGVscGVyIGZ1bmN0aW9uLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgd2hlbiBJJ20gYXNzZXNzaW5nIGl0cyBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gYW5kLCBlc3BlY2lhbGx5LCB3aGVuIHRoaW5raW5nIGFib3V0IGl0cyBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIG9yIHJlZW50cmFuY3kgaXNzdWVzLlxuXG5BbmQgdGhlbiwganVzdCB0byBiZSB0aG9yb3VnaCwgd2hhdCBhYm91dCBgc21jX2xsY19zcnZfZGVsZXRlX2xpbmtfbG9jYWxgPyBJcyAqdGhhdCogYWxzbyBub24tc3RhdGljPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGF0IGJlZm9yZSBJIG1vdmUgb24uIFRoZSBzdGF0aWMvbm9uLXN0YXRpYyBzdGF0dXMgb2YgdGhlc2UgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIHNlcnZpY2UgYW5kIGxpbmsgbWFuYWdlbWVudCwgZGljdGF0ZXMgYSBsb3QgYWJvdXQgdGhlIGRlc2lnbiBhbmQgcG90ZW50aWFsIHBpdGZhbGxzIHdpdGhpbiB0aGlzIExMQyBsYXllci4gSSBuZWVkIHRvIGtub3cgdGhlIHNjb3BlIG9mIGJvdGguIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGltcGxpY2F0aW9ucyBhbmQgbWFrZSB0aGUgcmlnaHQgYXNzdW1wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjY4LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDI6NTg6MjcuMTk2MzMxNjMyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTA3NjY4NDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtY19sbGNfc3J2X2RlbGV0ZV9saW5rX2xvY2FsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX2NvcmUuYz0xNzg2PXN0YXRpYyB2b2lkIHNtY3JfbGlua19kb3duKHN0cnVjdCBzbWNfbGluayAqbG5rKVxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTE4MDQtXFx0XFx0LyogdHJpZ2dlciBsb2NhbCBkZWxldGUgbGluayBwcm9jZXNzaW5nICovXFxubmV0L3NtYy9zbWNfY29yZS5jOjE4MDU6XFx0XFx0c21jX2xsY19zcnZfZGVsZXRlX2xpbmtfbG9jYWwodG9fbG5rLCBkZWxfbGlua19pZCk7XFxubmV0L3NtYy9zbWNfY29yZS5jLTE4MDYtXFx0fSBlbHNlIHtcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jPTE1ODM9c3RhdGljIHZvaWQgc21jX2xsY19hZGRfbGlua193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTE2MDUtICovXFxubmV0L3NtYy9zbWNfbGxjLmM6MTYwNjp2b2lkIHNtY19sbGNfc3J2X2RlbGV0ZV9saW5rX2xvY2FsKHN0cnVjdCBzbWNfbGluayAqbGluaywgdTggZGVsX2xpbmtfaWQpXFxubmV0L3NtYy9zbWNfbGxjLmMtMTYwNy17XFxuLS1cXG5uZXQvc21jL3NtY19sbGMuaD04Nz1pbnQgc21jX2xsY19zZW5kX2RlbGV0ZV9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluaywgdTggbGlua19kZWxfaWQsXFxuLS1cXG5uZXQvc21jL3NtY19sbGMuaC04OS1cXHRcXHRcXHQgICAgIHUzMiByZWFzb24pO1xcbm5ldC9zbWMvc21jX2xsYy5oOjkwOnZvaWQgc21jX2xsY19zcnZfZGVsZXRlX2xpbmtfbG9jYWwoc3RydWN0IHNtY19saW5rICpsaW5rLCB1OCBkZWxfbGlua19pZCk7XFxubmV0L3NtYy9zbWNfbGxjLmgtOTEtdm9pZCBzbWNfbGxjX2xncl9pbml0KHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLCBzdHJ1Y3Qgc21jX3NvY2sgKnNtYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAyOjU4OjI4LjcwNDAwNTYzOVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTQ3MzI4MDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgd2hhdCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBjb2RlOlxuXG4qKkFuYWx5emluZyBTTUMgTExDIExpbmsgTWFuYWdlbWVudCoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4gSSd2ZSBjb25maXJtZWQgdGhhdCBgc21jX2xsY19zcnZfZGVsZXRlX2xpbmtfbG9jYWxgIGlzbid0IGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyB1c2VmdWwgaW5mb3JtYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGJyb2FkZXIgc2NvcGUgb2YgaXRzIHVzZS4gTXkgbWFpbiBmb2N1cywgdGhlbiwgc2hvdWxkIGJlIG9uIHRoZXNlIGZvdXIga2V5IGZ1bmN0aW9ucywgdW5kZXJzdGFuZGluZyBob3cgdGhleSBpbnRlcmFjdCB3aXRoaW4gdGhlIFNNQyBMTEMgbGF5ZXI6IGBzbWNfbGxjX2NsaV9hZGRfbGlua2AsIGBzbWNfbGxjX3Nydl9hZGRfbGlua2AsIGBzbWNfbGxjX2FkZF9saW5rX2xvY2FsYCwgYW5kIGBzbWNfbGxjX3Nydl9kZWxldGVfbGlua19sb2NhbGAuIFRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gaXMgZGVmaW5pdGVseSBgU01DYC4gSSdsbCB3YW50IHRvIGVuc3VyZSBgU01DYCBpcyB0aGUgb25seSBjb25maWcgaW1wYWN0aW5nIGNvbXBpbGF0aW9uIG9mIGBuZXQvc21jL3NtY19sbGMuY2AuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgb3RoZXIgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb25zLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0MTAsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDI6NTg6MzIuODUxMzM2MDU0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTg1NDQ0ODk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtY19sbGMub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL01ha2VmaWxlPTQ9b2JqLSQoQ09ORklHX1NNQ19ESUFHKVxcdCs9IHNtY19kaWFnLm9cXG5uZXQvc21jL01ha2VmaWxlOjU6c21jLXkgOj0gYWZfc21jLm8gc21jX3BuZXQubyBzbWNfaWIubyBzbWNfY2xjLm8gc21jX2NvcmUubyBzbWNfd3IubyBzbWNfbGxjLm9cXG5uZXQvc21jL01ha2VmaWxlLTYtc21jLXkgKz0gc21jX2NkYy5vIHNtY190eC5vIHNtY19yeC5vIHNtY19jbG9zZS5vIHNtY19pc20ubyBzbWNfbmV0bGluay5vIHNtY19zdGF0cy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAyOjU4OjM1LjAzNjc4NTUzM1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODMwOTczOTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBTTUMgTExDIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBleGFtaW5lZCB0aGlzIHBhdGNoLCBhbmQgaGVyZSdzIG15IHVuZGVyc3RhbmRpbmc6IGl0J3MgZGVmaW5pdGVseSB0YXJnZXRpbmcgdGhlIGBzbWMteWAgbW9kdWxlLCB3aGljaCBpcyB3aGF0IEkgc3VzcGVjdGVkIHdoZW4gSSBzYXcgYENPTkZJR19TTUNgIG1lbnRpb25lZC4gVGhlcmVmb3JlLCBteSBleHBlY3RlZCByZXN1bHRzIGFsaWduIHBlcmZlY3RseS4gV2Ugc2hvdWxkIHNlZSBgV29ydGhGdXp6aW5nOiB0cnVlYCBiZWNhdXNlIHRoaXMgcGF0Y2ggZGlyZWN0bHkgaW1wYWN0cyB0aGUgU01DIExMQyBtZXNzYWdlIHByb2Nlc3NpbmcgbG9naWMsIGEgY3JpdGljYWwgcGFydCBvZiB0aGUgU01DIHN0YWNrLlxuXG5UaGUgYEZvY3VzU3ltYm9sc2AgYWxzbyBsb29rIHNwb3Qgb247IHRoZXNlIGZ1bmN0aW9ucyAoYHNtY19sbGNfY2xpX2FkZF9saW5rYCwgYHNtY19sbGNfc3J2X2FkZF9saW5rYCwgYHNtY19sbGNfYWRkX2xpbmtfbG9jYWxgLCBgc21jX2xsY19zcnZfZGVsZXRlX2xpbmtfbG9jYWxgKSBhcmUgZXhhY3RseSB3aGVyZSBJIHdvdWxkIGV4cGVjdCB0byBmaW5kIHRoZSB2dWxuZXJhYmlsaXR5LiBUaGVzZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gbGluayBtYW5hZ2VtZW50LCBhbmQgdGhlIGBSZWFzb25pbmdgIHNlY3Rpb24gY29uZmlybXMgdGhhdCBsYXJnZSBtZXNzYWdlcyB3ZXJlIGNhdXNpbmcgYnVmZmVyIG92ZXJmbG93cyB3aXRoaW4gdGhlIGBzbWNfbGxjX3FlbnRyeWAgYnVmZmVyLCBzbyB0aGVzZSBhcmUgdGhlIGNhbmRpZGF0ZXMuXG5cbkZ1cnRoZXJtb3JlLCBgRW5hYmxlQ29uZmlnczogLSBTTUNgIGlzIGFsc28gY29ycmVjdC4gVGhlIHBhdGNoIGRlcGVuZHMgb24gdGhlIFNNQyBmZWF0dXJlIGJlaW5nIGVuYWJsZWQuXG5cblRoZSByZWFzb25pbmcgcHJvdmlkZWQgaXMgc29saWQ7IGl0IGRldGFpbHMgdGhlIGlzc3Vl4oCUbGFyZ2UgU01DLVJ2MiBtZXNzYWdlcywgc3BlY2lmaWNhbGx5IHRoZSBBRERfTElOSyBhbmQgREVMRVRFX1JLRVlfVjIgdHlwZXMsIG92ZXJmbG93aW5nIHRoZSBhbGxvY2F0ZWQgYnVmZmVyLiBUaGUgZml4LCB3aGljaCB1c2VzIGEgZmxleGlibGUgYXJyYXkgbWVtYmVyIHRvIGFsbG9jYXRlIHRoZSBidWZmZXIgZHluYW1pY2FsbHkgYmFzZWQgb24gdGhlIG1lc3NhZ2Ugc2l6ZSwgaXMgZXhhY3RseSB0aGUgcmlnaHQgYXBwcm9hY2ggdG8gYWRkcmVzcyB0aGlzIHR5cGUgb2Ygb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eS4gVGhlIG1lbnRpb24gb2YgaXQgYmVpbmcgcmVhY2hhYmxlIHZpYSBBRl9TTUMgc29ja2V0cyBpcyBhbHNvIGltcG9ydGFudCwgZXN0YWJsaXNoaW5nIHRoZSBwcmFjdGljYWwgaW1wYWN0IGFuZCBzdWdnZXN0aW5nIHdheXMgdG8gYWN0dWFsbHkgdHJpZ2dlciBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5NTEsIk91dHB1dFRva2VucyI6MTc3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAyOjU4OjQxLjg2Nzc2MjA4MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MjYxNzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTTUNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzbWNfbGxjX2NsaV9hZGRfbGlua1wiLFxuICAgIFwic21jX2xsY19zcnZfYWRkX2xpbmtcIixcbiAgICBcInNtY19sbGNfYWRkX2xpbmtfbG9jYWxcIixcbiAgICBcInNtY19sbGNfc3J2X2RlbGV0ZV9saW5rX2xvY2FsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gU01DIExMQyBtZXNzYWdlIGVucXVldWVpbmcgd2hlcmUgbGFyZ2UgU01DLVJ2MiBtZXNzYWdlcyAobGlrZSBBRERfTElOSyBhbmQgREVMRVRFX1JLRVlfVjIpIHdlcmUgb3ZlcmZsb3dpbmcgdGhlIGFsbG9jYXRlZCBzbWNfbGxjX3FlbnRyeSBidWZmZXIuIEl0IGludHJvZHVjZXMgYSBmbGV4aWJsZSBhcnJheSBtZW1iZXIgdG8gZHluYW1pY2FsbHkgYWxsb2NhdGUgdGhlIGJ1ZmZlciBiYXNlZCBvbiB0aGUgbWVzc2FnZSBzaXplLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgU01DIExMQyBwcm9jZXNzaW5nIGxvZ2ljIGFuZCBpcyByZWFjaGFibGUgdmlhIEFGX1NNQyBzb2NrZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNNQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNtY19sbGNfY2xpX2FkZF9saW5rXCIsXG4gICAgXCJzbWNfbGxjX3Nydl9hZGRfbGlua1wiLFxuICAgIFwic21jX2xsY19hZGRfbGlua19sb2NhbFwiLFxuICAgIFwic21jX2xsY19zcnZfZGVsZXRlX2xpbmtfbG9jYWxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBTTUMgTExDIG1lc3NhZ2UgZW5xdWV1ZWluZyB3aGVyZSBsYXJnZSBTTUMtUnYyIG1lc3NhZ2VzIChsaWtlIEFERF9MSU5LIGFuZCBERUxFVEVfUktFWV9WMikgd2VyZSBvdmVyZmxvd2luZyB0aGUgYWxsb2NhdGVkIHNtY19sbGNfcWVudHJ5IGJ1ZmZlci4gSXQgaW50cm9kdWNlcyBhIGZsZXhpYmxlIGFycmF5IG1lbWJlciB0byBkeW5hbWljYWxseSBhbGxvY2F0ZSB0aGUgYnVmZmVyIGJhc2VkIG9uIHRoZSBtZXNzYWdlIHNpemUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBTTUMgTExDIHByb2Nlc3NpbmcgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgQUZfU01DIHNvY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAyOjU4OjQxLjk0NTAzMTcxWiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzM2ODM2MTYwMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMjo1ODo0MS45NDU2NTk1OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNzM2ODI5ODQyMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gU01DLVJ2MiBMTEMgbWVzc2FnZSBoYW5kbGluZyB3aGVyZSBhIHNoYXJlZCBETUEgcmVjZWl2ZSBidWZmZXIgKGB3cl9yeF9idWZfdjJgKSBjb3VsZCBiZSBvdmVyd3JpdHRlbiBieSBhIG5ldyBpbmNvbWluZyBtZXNzYWdlIGJlZm9yZSB0aGUgd29ya2VyIHRocmVhZCBwcm9jZXNzZWQgdGhlIHByZXZpb3VzIG9uZS4gSXQgcmVzb2x2ZXMgdGhpcyBieSBjb3B5aW5nIHRoZSBzcGlsbG92ZXIgYnl0ZXMgb2YgdGhlIG1lc3NhZ2UgaW50byBhIGZsZXhpYmxlIGFycmF5IGluIGBzdHJ1Y3Qgc21jX2xsY19xZW50cnlgIGF0IHRoZSB0aW1lIG9mIHJlY2VwdGlvbi4gSXQgYWxzbyBhZGRzIGJvdW5kcyBjaGVja3MgdG8gZW5zdXJlIG1lc3NhZ2UgcGFyc2luZyBkb2VzIG5vdCByZWFkIHBhc3QgdGhlIGFjdHVhbCByZWNlaXZlZCBsZW5ndGguXFxuXFxuQmVmb3JlIHRoaXMgcGF0Y2gsIHJlYWRpbmcgcGFzdCB0aGUgcmVjZWl2ZWQgbGVuZ3RoIHdvdWxkIHJlYWQgZnJvbSB0aGUgcmVtYWluZGVyIG9mIHRoZSByZWNlaXZlIGJ1ZmZlci4gU2luY2UgdGhpcyBidWZmZXIgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgIChvciBga2NhbGxvY2ApLCB0aGUgbWVtb3J5IHdhcyB6ZXJvLWluaXRpYWxpemVkLCBtZWFuaW5nIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdhcyBhY2Nlc3NlZC4gXFxuXFxuVGhlIG5ld2x5IGludHJvZHVjZWQgYHN0cnVjdCBzbWNfbGxjX3FlbnRyeWAgaXMgc3RyaWN0bHkgYW4gaW50ZXJuYWwga2VybmVsIHN0cnVjdHVyZSB1c2VkIGZvciBxdWV1aW5nIG1lc3NhZ2VzIHRvIGEgd29ya2VyIHRocmVhZC4gSXQgaXMgbmV2ZXIgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3Igc2VudCBvdmVyIHRoZSBuZXR3b3JrLCBzbyBhbnkgc3RydWN0IHBhZGRpbmcgY2Fubm90IGNhdXNlIGFuIGluZm8tbGVhay4gRnVydGhlcm1vcmUsIGFsbCBmaWVsZHMgYW5kIHRoZSBmbGV4aWJsZSBhcnJheSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBkdXJpbmcgYWxsb2NhdGlvbiBpbiBgc21jX2xsY19lbnF1ZXVlYC4gTWVzc2FnZXMgZ2VuZXJhdGVkIGxvY2FsbHkgYW5kIHNlbnQgb3ZlciB0aGUgbmV0d29yayBhcmUgZnVsbHkgemVyb2VkIHVzaW5nIGBtZW1zZXRgIGJlZm9yZSB0cmFuc21pc3Npb24uXFxuXFxuU2luY2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZXMgb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBwYXRjaCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmYyYTg2MDkzY2RhMTRkNmY0N2ZkOTk3YmNkNTNiZWQxZTNkYjFkZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDAyOjU3OjQ2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfbGxjLmMgYi9uZXQvc21jL3NtY19sbGMuY1xuaW5kZXggOTU0YjJmZjE4MTVjMi4uMzkzYWEwYWYxOGQxZCAxMDA2NDRcbi0tLSBhL25ldC9zbWMvc21jX2xsYy5jXG4rKysgYi9uZXQvc21jL3NtY19sbGMuY1xuQEAgLTE1Nyw2ICsxNTcsNyBAQCBzdHJ1Y3Qgc21jX2xsY19tc2dfY29uZmlybV9ya2V5IHtcdC8qIHR5cGUgMHgwNiAqL1xuIH07XG4gXG4gI2RlZmluZSBTTUNfTExDX0RFTF9SS0VZX01BWFx0OFxuKyNkZWZpbmUgU01DX0xMQ19ERUxfUktFWV9WMl9JTkxJTkVcdDlcbiAjZGVmaW5lIFNNQ19MTENfRkxBR19SS0VZX1JFVFJZXHQweDEwXG4gI2RlZmluZSBTTUNfTExDX0ZMQUdfUktFWV9ORUdcdDB4MjBcbiBcbkBAIC0xNzcsNiArMTc4LDE1IEBAIHN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92MiB7XHQvKiB0eXBlIDB4MjkgKi9cbiBcdF9fYmUzMiBya2V5W107XG4gfTtcbiBcbisvKiB0aGUgbGVhZGluZyBya2V5cyBvZiBhIERFTEVURV9SS0VZX1YyIGZpdCBpbnRvIHVuaW9uIHNtY19sbGNfbXNnICovXG4rc3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyX2lubGluZSB7XHQvKiB0eXBlIDB4MjkgKi9cbitcdHN0cnVjdCBzbWNfbGxjX2hkciBoZDtcbitcdHU4IG51bV9ya2V5cztcbitcdHU4IG51bV9pbnZhbF9ya2V5cztcbitcdHU4IHJlc2VydmVkWzJdO1xuK1x0X19iZTMyIHJrZXlbU01DX0xMQ19ERUxfUktFWV9WMl9JTkxJTkVdO1xuK307XG4rXG4gdW5pb24gc21jX2xsY19tc2cge1xuIFx0c3RydWN0IHNtY19sbGNfbXNnX2NvbmZpcm1fbGluayBjb25maXJtX2xpbms7XG4gXHRzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmsgYWRkX2xpbms7XG5AQCAtMTg2LDYgKzE5Niw3IEBAIHVuaW9uIHNtY19sbGNfbXNnIHtcbiBcbiBcdHN0cnVjdCBzbWNfbGxjX21zZ19jb25maXJtX3JrZXkgY29uZmlybV9ya2V5O1xuIFx0c3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5IGRlbGV0ZV9ya2V5O1xuK1x0c3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyX2lubGluZSBkZWxldGVfcmtleV92MjtcbiBcbiBcdHN0cnVjdCBzbWNfbGxjX21zZ190ZXN0X2xpbmsgdGVzdF9saW5rO1xuIFx0c3RydWN0IHtcbkBAIC0xOTQsMTUgKzIwNSwyNSBAQCB1bmlvbiBzbWNfbGxjX21zZyB7XG4gXHR9IHJhdztcbiB9O1xuIFxuK3N0YXRpY19hc3NlcnQoU01DX0xMQ19ERUxfUktFWV9WMl9JTkxJTkUgPT1cbitcdCAgICAgIChzaXplb2YodW5pb24gc21jX2xsY19tc2cpIC1cbitcdCAgICAgICBvZmZzZXRvZihzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXlfdjIsIHJrZXkpKSAvXG4rXHQgICAgICBzaXplb2YoX19iZTMyKSk7XG4rc3RhdGljX2Fzc2VydChvZmZzZXRvZihzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXlfdjJfaW5saW5lLCBya2V5KSA9PVxuK1x0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyLCBya2V5KSk7XG4rXG4gI2RlZmluZSBTTUNfTExDX0ZMQUdfUkVTUFx0XHQweDgwXG4gXG4gc3RydWN0IHNtY19sbGNfcWVudHJ5IHtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiBcdHN0cnVjdCBzbWNfbGluayAqbGluaztcbitcdHUxNiBib2R5X2xlbjtcbiBcdHVuaW9uIHNtY19sbGNfbXNnIG1zZztcbitcdHU4IGJvZHlbXSBfX2NvdW50ZWRfYnkoYm9keV9sZW4pO1xuIH07XG4gXG4tc3RhdGljIHZvaWQgc21jX2xsY19lbnF1ZXVlKHN0cnVjdCBzbWNfbGluayAqbGluaywgdW5pb24gc21jX2xsY19tc2cgKmxsYyk7XG4rc3RhdGljIHZvaWQgc21jX2xsY19lbnF1ZXVlKHN0cnVjdCBzbWNfbGluayAqbGluaywgdW5pb24gc21jX2xsY19tc2cgKmxsYyxcbitcdFx0XHQgICAgdTMyIGJ5dGVfbGVuKTtcbiBcbiBzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnNtY19sbGNfZmxvd19xZW50cnlfY2xyKHN0cnVjdCBzbWNfbGxjX2Zsb3cgKmZsb3cpXG4ge1xuQEAgLTk5OCwxNSArMTAxOSwyMCBAQCBzdGF0aWMgaW50IHNtY19sbGNfY2xpX2NvbmZfbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG4gXG4gc3RhdGljIHZvaWQgc21jX2xsY19zYXZlX2FkZF9saW5rX3JrZXlzKHN0cnVjdCBzbWNfbGluayAqbGluayxcbiBcdFx0XHRcdFx0c3RydWN0IHNtY19saW5rICpsaW5rX25ldyxcbi1cdFx0XHRcdFx0dTggKmxsY19tc2cpXG4rXHRcdFx0XHRcdHN0cnVjdCBzbWNfbGxjX3FlbnRyeSAqcWVudHJ5KVxuIHtcbitcdGNvbnN0IHUzMiBydF9vZmYgPSBvZmZzZXRvZihzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfdjJfZXh0LCBydCk7XG4gXHRzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfdjJfZXh0ICpleHQ7XG4gXHRzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxnciA9IGxpbmstXHUwMDNlbGdyO1xuIFx0aW50IG1heCwgaTtcbiBcbi1cdGV4dCA9IChzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfdjJfZXh0ICopKGxsY19tc2cgK1xuLVx0XHRcdFx0XHRcdCAgICAgU01DX1dSX1RYX1NJWkUpO1xuK1x0LyogdGhlIHJrZXkgY291bnQgaXRzZWxmIGlzIG9ubHkgdGhlcmUgaWYgZW5vdWdoIGJ5dGVzIGFycml2ZWQgKi9cbitcdGlmIChxZW50cnktXHUwMDNlYm9keV9sZW4gXHUwMDNjIHJ0X29mZilcbitcdFx0cmV0dXJuO1xuK1x0ZXh0ID0gKHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua192Ml9leHQgKilxZW50cnktXHUwMDNlYm9keTtcbiBcdG1heCA9IG1pbl90KHU4LCBleHQtXHUwMDNlbnVtX3JrZXlzLCBTTUNfTExDX1JLRVlTX1BFUl9NU0dfVjIpO1xuK1x0bWF4ID0gbWluX3QodTMyLCBtYXgsIChxZW50cnktXHUwMDNlYm9keV9sZW4gLSBydF9vZmYpIC9cbitcdFx0XHQgICAgICBzaXplb2YoZXh0LVx1MDAzZXJ0WzBdKSk7XG4gXHRkb3duX3dyaXRlKFx1MDAyNmxnci1cdTAwM2VybWJzX2xvY2spO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbWF4OyBpKyspIHtcbiBcdFx0c21jX3J0b2tlbl9zZXQobGdyLCBsaW5rLVx1MDAzZWxpbmtfaWR4LCBsaW5rX25ldy1cdTAwM2VsaW5rX2lkeCxcbkBAIC0xMDk5LDkgKzExMjUsNyBAQCBpbnQgc21jX2xsY19jbGlfYWRkX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLCBzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnFlbnRyeSlcbiBcdGlmIChyYylcbiBcdFx0Z290byBvdXRfY2xlYXJfbG5rO1xuIFx0aWYgKGxnci1cdTAwM2VzbWNfdmVyc2lvbiA9PSBTTUNfVjIpIHtcbi1cdFx0dTggKmxsY19tc2cgPSBzbWNfbGlua19zaGFyZWRfdjJfcnhidWYobGluaykgP1xuLVx0XHRcdCh1OCAqKWxnci1cdTAwM2V3cl9yeF9idWZfdjIgOiAodTggKilsbGM7XG4tXHRcdHNtY19sbGNfc2F2ZV9hZGRfbGlua19ya2V5cyhsaW5rLCBsbmtfbmV3LCBsbGNfbXNnKTtcbitcdFx0c21jX2xsY19zYXZlX2FkZF9saW5rX3JrZXlzKGxpbmssIGxua19uZXcsIHFlbnRyeSk7XG4gXHR9IGVsc2Uge1xuIFx0XHRyYyA9IHNtY19sbGNfY2xpX3JrZXlfZXhjaGFuZ2UobGluaywgbG5rX25ldyk7XG4gXHRcdGlmIChyYykge1xuQEAgLTE0ODEsNyArMTUwNSw3IEBAIGludCBzbWNfbGxjX3Nydl9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG4gXHR9XG4gXHRhZGRfbGxjID0gXHUwMDI2cWVudHJ5LVx1MDAzZW1zZy5hZGRfbGluaztcbiBcdGlmIChhZGRfbGxjLVx1MDAzZWhkLmZsYWdzIFx1MDAyNiBTTUNfTExDX0ZMQUdfQUREX0xOS19SRUopIHtcbi1cdFx0c21jX2xsY19mbG93X3FlbnRyeV9kZWwoXHUwMDI2bGdyLVx1MDAzZWxsY19mbG93X2xjbCk7XG4rXHRcdHNtY19sbGNfZmxvd19xZW50cnlfY2xyKFx1MDAyNmxnci1cdTAwM2VsbGNfZmxvd19sY2wpO1xuIFx0XHRyYyA9IC1FTk9MSU5LO1xuIFx0XHRnb3RvIG91dF9lcnI7XG4gXHR9XG5AQCAtMTQ5Miw3ICsxNTE2LDggQEAgaW50IHNtY19sbGNfc3J2X2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluayxcbiBcdFx0bGdyX25ld190ID0gU01DX0xHUl9BU1lNTUVUUklDX1BFRVI7XG4gXHR9XG4gXHRzbWNfbGxjX3NhdmVfYWRkX2xpbmtfaW5mbyhsaW5rX25ldywgYWRkX2xsYyk7XG4tXHRzbWNfbGxjX2Zsb3dfcWVudHJ5X2RlbChcdTAwMjZsZ3ItXHUwMDNlbGxjX2Zsb3dfbGNsKTtcbitcdC8qIGFkZF9sbGMgc3RpbGwgcG9pbnRzIGludG8gcWVudHJ5LCBzbyBvbmx5IGRldGFjaCBpdCBoZXJlICovXG4rXHRzbWNfbGxjX2Zsb3dfcWVudHJ5X2NscihcdTAwMjZsZ3ItXHUwMDNlbGxjX2Zsb3dfbGNsKTtcbiBcbiBcdHJjID0gc21jX2liX3JlYWR5X2xpbmsobGlua19uZXcpO1xuIFx0aWYgKHJjKVxuQEAgLTE1MDEsOSArMTUyNiw3IEBAIGludCBzbWNfbGxjX3Nydl9hZGRfbGluayhzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG4gXHRpZiAocmMpXG4gXHRcdGdvdG8gb3V0X2VycjtcbiBcdGlmIChsZ3ItXHUwMDNlc21jX3ZlcnNpb24gPT0gU01DX1YyKSB7XG4tXHRcdHU4ICpsbGNfbXNnID0gc21jX2xpbmtfc2hhcmVkX3YyX3J4YnVmKGxpbmspID9cbi1cdFx0XHQodTggKilsZ3ItXHUwMDNld3JfcnhfYnVmX3YyIDogKHU4ICopYWRkX2xsYztcbi1cdFx0c21jX2xsY19zYXZlX2FkZF9saW5rX3JrZXlzKGxpbmssIGxpbmtfbmV3LCBsbGNfbXNnKTtcbitcdFx0c21jX2xsY19zYXZlX2FkZF9saW5rX3JrZXlzKGxpbmssIGxpbmtfbmV3LCBxZW50cnkpO1xuIFx0fSBlbHNlIHtcbiBcdFx0cmMgPSBzbWNfbGxjX3Nydl9ya2V5X2V4Y2hhbmdlKGxpbmssIGxpbmtfbmV3KTtcbiBcdFx0aWYgKHJjKVxuQEAgLTE1MTIsMTQgKzE1MzUsMTQgQEAgaW50IHNtY19sbGNfc3J2X2FkZF9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluayxcbiBcdHJjID0gc21jX2xsY19zcnZfY29uZl9saW5rKGxpbmssIGxpbmtfbmV3LCBsZ3JfbmV3X3QpO1xuIFx0aWYgKHJjKVxuIFx0XHRnb3RvIG91dF9lcnI7XG4tXHRrZnJlZShpbmkpO1xuLVx0cmV0dXJuIDA7XG4rXHRnb3RvIG91dDtcbiBvdXRfZXJyOlxuIFx0aWYgKGxpbmtfbmV3KSB7XG4gXHRcdGxpbmtfbmV3LVx1MDAzZXN0YXRlID0gU01DX0xOS19JTkFDVElWRTtcbiBcdFx0c21jcl9saW5rX2NsZWFyKGxpbmtfbmV3LCBmYWxzZSk7XG4gXHR9XG4gb3V0OlxuK1x0a2ZyZWUocWVudHJ5KTtcbiBcdGtmcmVlKGluaSk7XG4gXHRpZiAoc2VuZF9yZXFfYWRkX2xpbmtfcmVzcClcbiBcdFx0c21jX2xsY19zZW5kX3JlcV9hZGRfbGlua19yZXNwb25zZShyZXFfcWVudHJ5KTtcbkBAIC0xNTUyLDcgKzE1NzUsOCBAQCB2b2lkIHNtY19sbGNfYWRkX2xpbmtfbG9jYWwoc3RydWN0IHNtY19saW5rICpsaW5rKVxuIFx0YWRkX2xsYy5oZC5jb21tb24ubGxjX3R5cGUgPSBTTUNfTExDX0FERF9MSU5LO1xuIFx0c21jX2xsY19pbml0X21zZ19oZHIoXHUwMDI2YWRkX2xsYy5oZCwgbGluay1cdTAwM2VsZ3IsIHNpemVvZihhZGRfbGxjKSk7XG4gXHQvKiBubyBkZXYgYW5kIHBvcnQgbmVlZGVkICovXG4tXHRzbWNfbGxjX2VucXVldWUobGluaywgKHVuaW9uIHNtY19sbGNfbXNnICopXHUwMDI2YWRkX2xsYyk7XG4rXHRzbWNfbGxjX2VucXVldWUobGluaywgKHVuaW9uIHNtY19sbGNfbXNnICopXHUwMDI2YWRkX2xsYyxcbitcdFx0XHRzaXplb2YodW5pb24gc21jX2xsY19tc2cpKTtcbiB9XG4gXG4gLyogd29ya2VyIHRvIHByb2Nlc3MgYW4gYWRkIGxpbmsgbWVzc2FnZSAqL1xuQEAgLTE1ODgsNyArMTYxMiw4IEBAIHZvaWQgc21jX2xsY19zcnZfZGVsZXRlX2xpbmtfbG9jYWwoc3RydWN0IHNtY19saW5rICpsaW5rLCB1OCBkZWxfbGlua19pZClcbiBcdGRlbF9sbGMubGlua19udW0gPSBkZWxfbGlua19pZDtcbiBcdGRlbF9sbGMucmVhc29uID0gaHRvbmwoU01DX0xMQ19ERUxfTE9TVF9QQVRIKTtcbiBcdGRlbF9sbGMuaGQuZmxhZ3MgfD0gU01DX0xMQ19GTEFHX0RFTF9MSU5LX09SREVSTFk7XG4tXHRzbWNfbGxjX2VucXVldWUobGluaywgKHVuaW9uIHNtY19sbGNfbXNnICopXHUwMDI2ZGVsX2xsYyk7XG4rXHRzbWNfbGxjX2VucXVldWUobGluaywgKHVuaW9uIHNtY19sbGNfbXNnICopXHUwMDI2ZGVsX2xsYyxcbitcdFx0XHRzaXplb2YodW5pb24gc21jX2xsY19tc2cpKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgc21jX2xsY19wcm9jZXNzX2NsaV9kZWxldGVfbGluayhzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncilcbkBAIC0xODEwLDE5ICsxODM1LDI4IEBAIHN0YXRpYyB2b2lkIHNtY19sbGNfcm10X2RlbGV0ZV9ya2V5KHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyKVxuIFx0bGluayA9IHFlbnRyeS1cdTAwM2VsaW5rO1xuIFxuIFx0aWYgKGxnci1cdTAwM2VzbWNfdmVyc2lvbiA9PSBTTUNfVjIpIHtcbi1cdFx0c3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyICpsbGN2MjtcbitcdFx0c3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyX2lubGluZSAqbGxjdjI7XG4gXG4tXHRcdGlmIChzbWNfbGlua19zaGFyZWRfdjJfcnhidWYobGluaykpIHtcbi1cdFx0XHRtZW1jcHkobGdyLVx1MDAzZXdyX3J4X2J1Zl92MiwgbGxjLCBzaXplb2YoKmxsYykpO1xuLVx0XHRcdGxsY3YyID0gKHN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92MiAqKWxnci1cdTAwM2V3cl9yeF9idWZfdjI7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0bGxjdjIgPSAoc3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyICopbGxjO1xuLVx0XHR9XG4rXHRcdC8qIFRoZSBsZWFkaW5nIFNNQ19MTENfREVMX1JLRVlfVjJfSU5MSU5FIHJrZXlzIGFyZSBkZWNsYXJlZCBpblxuK1x0XHQgKiB0aGUgbWVzc2FnZSBpdHNlbGYsIGFueSBmdXJ0aGVyIG9uZXMgd2VyZSByZWNlaXZlZCBpbnRvXG4rXHRcdCAqIHFlbnRyeS1cdTAwM2Vib2R5LlxuK1x0XHQgKi9cbitcdFx0bGxjdjIgPSBcdTAwMjZxZW50cnktXHUwMDNlbXNnLmRlbGV0ZV9ya2V5X3YyO1xuIFx0XHRsbGN2Mi1cdTAwM2VudW1faW52YWxfcmtleXMgPSAwO1xuIFxuIFx0XHRtYXggPSBtaW5fdCh1OCwgbGxjdjItXHUwMDNlbnVtX3JrZXlzLCBTTUNfTExDX1JLRVlTX1BFUl9NU0dfVjIpO1xuK1x0XHRtYXggPSBtaW5fdCh1MzIsIG1heCwgU01DX0xMQ19ERUxfUktFWV9WMl9JTkxJTkUgK1xuK1x0XHRcdFx0ICAgICAgcWVudHJ5LVx1MDAzZWJvZHlfbGVuIC8gc2l6ZW9mKF9fYmUzMikpO1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtYXg7IGkrKykge1xuLVx0XHRcdGlmIChzbWNfcnRva2VuX2RlbGV0ZShsaW5rLCBsbGN2Mi1cdTAwM2Vya2V5W2ldKSlcbitcdFx0XHRfX2JlMzIgcmtleTtcbitcbitcdFx0XHRpZiAoaSBcdTAwM2MgU01DX0xMQ19ERUxfUktFWV9WMl9JTkxJTkUpXG4rXHRcdFx0XHRya2V5ID0gbGxjdjItXHUwMDNlcmtleVtpXTtcbitcdFx0XHRlbHNlXG4rXHRcdFx0XHRtZW1jcHkoXHUwMDI2cmtleSwgcWVudHJ5LVx1MDAzZWJvZHkgK1xuK1x0XHRcdFx0XHQgICAgICAoaSAtIFNNQ19MTENfREVMX1JLRVlfVjJfSU5MSU5FKSAqXG4rXHRcdFx0XHRcdCAgICAgIHNpemVvZihya2V5KSwgc2l6ZW9mKHJrZXkpKTtcbitcdFx0XHRpZiAoc21jX3J0b2tlbl9kZWxldGUobGluaywgcmtleSkpXG4gXHRcdFx0XHRsbGN2Mi1cdTAwM2VudW1faW52YWxfcmtleXMrKztcbiBcdFx0fVxuIFx0XHRtZW1zZXQoXHUwMDI2bGxjLVx1MDAzZXJrZXlbMF0sIDAsIHNpemVvZihsbGMtXHUwMDNlcmtleSkpO1xuQEAgLTIwNjMsMTggKzIwOTcsNTIgQEAgc3RhdGljIHZvaWQgc21jX2xsY19yeF9yZXNwb25zZShzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssXG4gXHR3YWtlX3VwKFx1MDAyNmxpbmstXHUwMDNlbGdyLVx1MDAzZWxsY19tc2dfd2FpdGVyKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgc21jX2xsY19lbnF1ZXVlKHN0cnVjdCBzbWNfbGluayAqbGluaywgdW5pb24gc21jX2xsY19tc2cgKmxsYylcbisvKiB0aGUgbG9uZ2VzdCB0YWlsIGVpdGhlciByZWFkZXIgb2YgcWVudHJ5LVx1MDAzZWJvZHkgY2FuIHVzZSAqL1xuK3N0YXRpYyB1MzIgc21jX2xsY19tYXhfYm9keV9sZW4odW5pb24gc21jX2xsY19tc2cgKmxsYylcbit7XG4rXHRzd2l0Y2ggKGxsYy1cdTAwM2VyYXcuaGRyLmNvbW1vbi5sbGNfdHlwZSkge1xuK1x0Y2FzZSBTTUNfTExDX0FERF9MSU5LOlxuK1x0XHRyZXR1cm4gb2Zmc2V0b2Yoc3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rX3YyX2V4dCwgcnQpICtcbitcdFx0ICAgICAgIFNNQ19MTENfUktFWVNfUEVSX01TR19WMiAqXG4rXHRcdCAgICAgICBzaXplb2Yoc3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rX2NvbnRfcnQpO1xuK1x0Y2FzZSBTTUNfTExDX0RFTEVURV9SS0VZOlxuK1x0XHRyZXR1cm4gKFNNQ19MTENfUktFWVNfUEVSX01TR19WMiAtXG4rXHRcdFx0U01DX0xMQ19ERUxfUktFWV9WMl9JTkxJTkUpICogc2l6ZW9mKF9fYmUzMik7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gMDtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgc21jX2xsY19lbnF1ZXVlKHN0cnVjdCBzbWNfbGluayAqbGluaywgdW5pb24gc21jX2xsY19tc2cgKmxsYyxcbitcdFx0XHQgICAgdTMyIGJ5dGVfbGVuKVxuIHtcbiBcdHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyID0gbGluay1cdTAwM2VsZ3I7XG4gXHRzdHJ1Y3Qgc21jX2xsY19xZW50cnkgKnFlbnRyeTtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHR1MTYgYm9keV9sZW4gPSAwO1xuK1xuK1x0LyogVjIgbWVzc2FnZXMgY2FuIGJlIGxvbmdlciB0aGFuIHRoZSBpbmxpbmUgdW5pb24gc21jX2xsY19tc2cuIENhcnJ5XG4rXHQgKiB0aGUgcmVtYWluZGVyIGluIHRoZSBxZW50cnkgaXRzZWxmLCBzbyB0aGF0IGl0cyBsaWZldGltZSBhbmQgaXRzXG4rXHQgKiBsZW5ndGggbWF0Y2ggdGhlIG1lc3NhZ2UgdGhlIHBlZXIgYWN0dWFsbHkgc2VudC5cbitcdCAqL1xuK1x0aWYgKGxnci1cdTAwM2VzbWNfdmVyc2lvbiA9PSBTTUNfVjIgXHUwMDI2XHUwMDI2IGJ5dGVfbGVuIFx1MDAzZSBTTUNfV1JfVFhfU0laRSlcbitcdFx0Ym9keV9sZW4gPSBtaW5fdCh1MzIsIGJ5dGVfbGVuLCBTTUNfV1JfQlVGX1YyX1NJWkUpIC1cbitcdFx0XHQgICBTTUNfV1JfVFhfU0laRTtcbitcdGJvZHlfbGVuID0gbWluX3QodTMyLCBib2R5X2xlbiwgc21jX2xsY19tYXhfYm9keV9sZW4obGxjKSk7XG4gXG4tXHRxZW50cnkgPSBrbWFsbG9jX29iaigqcWVudHJ5LCBHRlBfQVRPTUlDKTtcbitcdHFlbnRyeSA9IGttYWxsb2NfZmxleCgqcWVudHJ5LCBib2R5LCBib2R5X2xlbiwgR0ZQX0FUT01JQyk7XG4gXHRpZiAoIXFlbnRyeSlcbiBcdFx0cmV0dXJuO1xuK1x0cWVudHJ5LVx1MDAzZWJvZHlfbGVuID0gYm9keV9sZW47XG4gXHRxZW50cnktXHUwMDNlbGluayA9IGxpbms7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZxZW50cnktXHUwMDNlbGlzdCk7XG4gXHRtZW1jcHkoXHUwMDI2cWVudHJ5LVx1MDAzZW1zZywgbGxjLCBzaXplb2YodW5pb24gc21jX2xsY19tc2cpKTtcbitcdGlmIChib2R5X2xlbikge1xuK1x0XHR1OCAqc3JjID0gc21jX2xpbmtfc2hhcmVkX3YyX3J4YnVmKGxpbmspID9cbitcdFx0XHQodTggKilsZ3ItXHUwMDNld3JfcnhfYnVmX3YyIDogKHU4ICopbGxjO1xuK1xuK1x0XHRtZW1jcHkocWVudHJ5LVx1MDAzZWJvZHksIHNyYyArIFNNQ19XUl9UWF9TSVpFLCBib2R5X2xlbik7XG4rXHR9XG4gXG4gXHQvKiBwcm9jZXNzIHJlc3BvbnNlcyBpbW1lZGlhdGVseSAqL1xuIFx0aWYgKChsbGMtXHUwMDNlcmF3Lmhkci5mbGFncyBcdTAwMjYgU01DX0xMQ19GTEFHX1JFU1ApIFx1MDAyNlx1MDAyNlxuQEAgLTIxMDYsNyArMjE3NCw3IEBAIHN0YXRpYyB2b2lkIHNtY19sbGNfcnhfaGFuZGxlcihzdHJ1Y3QgaWJfd2MgKndjLCB2b2lkICpidWYpXG4gXHRcdFx0cmV0dXJuOyAvKiBpbnZhbGlkIG1lc3NhZ2UgKi9cbiBcdH1cbiBcbi1cdHNtY19sbGNfZW5xdWV1ZShsaW5rLCBsbGMpO1xuK1x0c21jX2xsY19lbnF1ZXVlKGxpbmssIGxsYywgd2MtXHUwMDNlYnl0ZV9sZW4pO1xuIH1cbiBcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogd29ya2VyLCB1dGlscyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfd3IuYyBiL25ldC9zbWMvc21jX3dyLmNcbmluZGV4IDU5YzkyYjQ2OTQ1YzUuLjk3YmE0Njg5M2IxN2YgMTAwNjQ0XG4tLS0gYS9uZXQvc21jL3NtY193ci5jXG4rKysgYi9uZXQvc21jL3NtY193ci5jXG5AQCAtNjAyLDkgKzYwMiw5IEBAIHN0YXRpYyB2b2lkIHNtY193cl9pbml0X3NnZShzdHJ1Y3Qgc21jX2xpbmsgKmxuaylcbiBcbiBcdC8qIFdpdGggU01DLVJ2MiB0aGVyZSBjYW4gYmUgbWVzc2FnZXMgbGFyZ2VyIHRoYW4gU01DX1dSX1RYX1NJWkUuXG4gXHQgKiBFYWNoIGliX3JlY3Zfd3IgZ2V0cyAyIHNnZXMsIHRoZSBzZWNvbmQgb25lIGlzIGEgc3BpbGxvdmVyIGJ1ZmZlclxuLVx0ICogYW5kIHRoZSBzYW1lIGJ1ZmZlciBmb3IgYWxsIHNnZXMuIFdoZW4gYSBsYXJnZXIgbWVzc2FnZSBhcnJpdmVkIHRoZW5cbi1cdCAqIHRoZSBjb250ZW50IG9mIHRoZSBmaXJzdCBzbWFsbCBzZ2UgaXMgY29waWVkIHRvIHRoZSBiZWdpbm5pbmcgb2Zcbi1cdCAqIHRoZSBsYXJnZXIgc3BpbGxvdmVyIGJ1ZmZlciwgYWxsb3dpbmcgZWFzeSBkYXRhIG1hcHBpbmcuXG4rXHQgKiBhbmQgdGhlIHNhbWUgYnVmZmVyIGZvciBhbGwgc2dlcy4gVGhlIHNwaWxsb3ZlciBzZ2Ugc3RhcnRzIGF0XG4rXHQgKiBTTUNfV1JfVFhfU0laRSwgc28gdGhlIGxlYWRpbmcgYnl0ZXMgb2YgdGhhdCBidWZmZXIgYXJlIG5ldmVyXG4rXHQgKiB3cml0dGVuLlxuIFx0ICovXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBsbmstXHUwMDNld3JfcnhfY250OyBpKyspIHtcbiBcdFx0aW50IHggPSBpICogbG5rLVx1MDAzZXdyX3J4X3NnZV9jbnQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMjo1ODo0MS45NDU2NjA1OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTAxNzQzNDU3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gSnVzdGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggbmVlZHMgYSBjbG9zZXIgbG9vayB0byBzZWUgaWYgaXQgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGUgY2hhbmdlcyBhcmUgaW4gYG5ldC9zbWMvc21jX2xsYy5jYCBhbmQgYG5ldC9zbWMvc21jX3dyLmNgLCBhbmQgdGhleSdyZSBmb2N1c2VkIG9uIGhvdyBTTUMgTExDIG1lc3NhZ2VzIGFyZSBoYW5kbGVkLCBlc3BlY2lhbGx5IGZvciBTTUMtUnYyLCB3aGVyZSBtZXNzYWdlIHNpemVzIGNhbiBiZSBsYXJnZXIgdGhhbiB3aGF0J3Mgbm9ybWFsbHkgZXhwZWN0ZWQgKGBTTUNfV1JfVFhfU0laRWApLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gc2NydXRpbml6ZSBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZSBrZXkgYXJlYSBpcyBob3cgZGF0YSBpcyByZWNlaXZlZCBmcm9tIHRoZSBuZXR3b3JrIGFuZCBzdG9yZWQgd2l0aGluIHRoZSBgcWVudHJ5YCBzdHJ1Y3R1cmUuIGBzbWNfbGxjX2VucXVldWVgIHVzZXMgYGttYWxsb2NfZmxleGAuIE5vdywgYGttYWxsb2NfZmxleGAgZG9lcyAqbm90KiB6ZXJvIHRoZSBtZW1vcnksIGl0IGFsbG9jYXRlcyBtZW1vcnkgd2l0aCBgR0ZQX0FUT01JQ2Agd2l0aG91dCBgX19HRlBfWkVST2AuIEhvd2V2ZXIsIGl0ICpzZWVtcyogbGlrZSBldmVyeXRoaW5nIHdpdGhpbiBgcWVudHJ5YCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBvciBjb3BpZWQgZnJvbSBhbiBlc3RhYmxpc2hlZCBzb3VyY2U6XG4qICAgYGJvZHlfbGVuYCBpcyBhc3NpZ25lZC5cbiogICBgbGlua2AgaXMgYXNzaWduZWQuXG4qICAgYGxpc3RgIGlzIGluaXRpYWxpemVkLlxuKiAgIGBtc2dgIGlzIGNvcGllZCBmcm9tIGBsbGNgXG4qICAgYGJvZHlgIGlzIGNvcGllZCBmcm9tIGBzcmMgKyBTTUNfV1JfVFhfU0laRWAgZm9yIGBib2R5X2xlbmAgYnl0ZXMuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIHRoYXQncyBhY2N1cmF0ZS5cblxuTm93LCBwYWRkaW5nIGluIGBzdHJ1Y3Qgc21jX2xsY19xZW50cnlgIGNvdWxkIGFsc28gZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQncyBicmVhayBpdCBkb3duOiBgbGlzdGAgaXMgMTYgYnl0ZXMuIGBsaW5rYCBpcyA4IGJ5dGVzLiBgYm9keV9sZW5gIGlzIDIgYnl0ZXMuIFNvIHRoZXJlIHdvdWxkIGJlIDYgYnl0ZXMgb2YgcGFkZGluZyBiZWZvcmUgYG1zZ2AgKGFzc3VtaW5nIGFuIDgtYnl0ZSBhbGlnbm1lbnQgaXMgcmVxdWlyZWQuIEhvd2V2ZXIsIHRoZXJlIG1pZ2h0IGJlIHNtYWxsZXIgYWxpZ25tZW50IHJlcXVpcmVtZW50cy4pIEkgc2hvdWxkIGNoZWNrIHRoZSBhbGlnbm1lbnQgb2YgYHVuaW9uIHNtY19sbGNfbXNnYCB0byBtYWtlIHN1cmUgdGhlcmUncyBubyBzdWJ0bGUgaXNzdWUgdGhlcmUuIEknbSBnb2luZyB0byBsb29rIHVwIHRoZSBjb250ZW50cyBvZiBgdW5pb24gc21jX2xsY19tc2dgLlxuXG5Eb2VzIHRoaXMgc3RydWN0IGV2ZXIgbGVhdmUgdGhlIGtlcm5lbD8gSXQgbG9va3MgbGlrZSBgcWVudHJ5YCBpcyBpbnRlcm5hbCBhbmQgdXNlZCB0byBxdWV1ZSBtZXNzYWdlcyBmb3Igd29ya2VyIHRocmVhZHMuIEl0J3MgYWxsb2NhdGVkLCBwb3B1bGF0ZWQsIHByb2Nlc3NlZCwgYW5kIHRoZW4gZnJlZWQuIEZvciBleGFtcGxlLCBgc21jX2xsY19zcnZfYWRkX2xpbmtgIGZyZWVzIHRoZSBgcWVudHJ5YC5cblxuSXMgdGhlIGRhdGEgZXZlciBjb3BpZWQgYmFjayBvdXQ/IE5vLCBpdCBkb2Vzbid0IGxvb2sgbGlrZSBgcWVudHJ5YCBpdHNlbGYgaXMgc2VudCBvdmVyIHRoZSBuZXR3b3JrLiBJbiBgc21jX2xsY19zcnZfYWRkX2xpbmtgLCBpdCBsb29rcyBsaWtlIGZpZWxkcyBvZiBgcWVudHJ5LVx1MDAzZW1zZ2AgYXJlIGFjY2Vzc2VkLCBidXQgdGhlIGZ1bGwgc3RydWN0dXJlIGlzbid0LlxuXG5Ob3csIGEgcG90ZW50aWFsIGlzc3VlIGFyaXNlcyB3aXRoIGBzbWNfbGxjX2FkZF9saW5rX2xvY2FsYC4gQSBsb2NhbCB2YXJpYWJsZSBgYWRkX2xsY2AgaXMgY3JlYXRlZCwgYW5kIHRoZW4gcGFzc2VkIHRvIGBzbWNfbGxjX2VucXVldWVgLiBUaGVyZSdzIGEgYG1lbWNweWAgZnJvbSB0aGUgc3RhY2sgdmFyaWFibGUgYGFkZF9sbGNgIHRvIGBxZW50cnktXHUwMDNlbXNnYCB1c2luZyBgc2l6ZW9mKHVuaW9uIHNtY19sbGNfbXNnKWAuIElmIGBhZGRfbGxjYCBpcyBzbWFsbGVyLCB0aGVuIHRoaXMgd291bGQgcmVzdWx0IGluIGFuIG91dC1vZi1ib3VuZHMgcmVhZCEgSSBuZWVkIHRvIHZlcmlmeSBzaXplcyBvZiBgc3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rYCBhbmQgYHVuaW9uIHNtY19sbGNfbXNnYC4gSSdsbCB1c2UgYGdyZXBwZXJgIHRvIHNlYXJjaCBmb3IgYHNtY19sbGNfbXNnX2FkZF9saW5rYCBhbmQgYHVuaW9uIHNtY19sbGNfbXNnYCBhbmQgdGhlaXIgZGVmaW5pdGlvbnMgaW4gdGhlIGNvZGUuIFRoaXMgaXMgdGhlIGNydWNpYWwgcG9pbnQgZm9yIGEgcG90ZW50aWFsIEtNU0FOIGlzc3VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTExLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc5NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAyOjU4OjU2Ljk2MzA5ODc1MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc4MjI0ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rIFxcXFx7XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX2xsYy5jPTQ3PXN0cnVjdCBzbWNfbGxjX21zZ19jb25maXJtX2xpbmsge1xcdC8qIHR5cGUgMHgwMSAqL1xcbi0tXFxubmV0L3NtYy9zbWNfbGxjLmMtNjEtXFxubmV0L3NtYy9zbWNfbGxjLmM6NjI6c3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rIHtcXHRcXHQvKiB0eXBlIDB4MDIgKi9cXG5uZXQvc21jL3NtY19sbGMuYy02My1cXHRzdHJ1Y3Qgc21jX2xsY19oZHIgaGQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAyOjU4OjU3LjAxMDkyNzczWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNzM2OTc5OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua2AqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgYHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua2AuIFRpbWUgdG8gZGlnIGludG8gdGhlIGRldGFpbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb21wbGV0ZSBkZWZpbml0aW9uLCBpbnNpZGUgYW5kIG91dC4gSXQncyBub3QgZW5vdWdoIHRvIGhhdmUgYSBnZW5lcmFsIGlkZWE7IEkgbmVlZCB0aGUgZnVsbCBwaWN0dXJlLCBhbGwgdGhlIG1lbWJlciB2YXJpYWJsZXMsIGRhdGEgdHlwZXMsIGFuZCBhbnkgYXNzb2NpYXRlZCBjb21tZW50cy4gSSBuZWVkIHRvIHNlZSBleGFjdGx5ICpob3cqIHRoaXMgc3RydWN0IGlzIGRlZmluZWQuIFdoYXQgYXJlIGl0cyBjb21wb25lbnRzPyBXaGF0IGluZm9ybWF0aW9uIGRvZXMgaXQgY2Fycnk/IElzIHRoZXJlIGFueXRoaW5nIHN1YnRsZSBvciBub24tb2J2aW91cyB0aGF0IEkgbWlnaHQgbWlzcyBpZiBJIGp1c3Qgc2tpbSB0aGUgc3VyZmFjZT8gVGhpcyB1bmRlcnN0YW5kaW5nIGlzIGZvdW5kYXRpb25hbCB0byB3b3JraW5nIHdpdGggdGhlIG1lc3NhZ2UgYW5kIGtub3dpbmcgd2hhdCB0aGUgc3RydWN0IGlzIGRlc2lnbmVkIHRvIGRvLiBNeSBqb2IgaXMgdG8ga25vdyBldmVyeSBub29rIGFuZCBjcmFubnkgb2YgdGhpcyBzdHJ1Y3QsIEknbSBub3QgZ29pbmcgdG8gbGVhdmUgaXQgdXAgdG8gYXNzdW1wdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTIzMywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAyOjU5OjAwLjE4NDYyODE4MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5ODUxMjksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGluayBcXFxcey4qXFxcXH1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAyOjU5OjAwLjIzMTYyNDY2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NTY1MzU3NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIFNNQyBMTEMgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGEgbXVsdGktbGluZSBjb250ZXh0LiBMZXQncyBnZXQgc3RyYWlnaHQgdG8gdGhlIHBvaW50OiBJJ20gcHVsbGluZyB1cCBgbmV0L3NtYy9zbWNfbGxjLmNgIOKAkyBzcGVjaWZpY2FsbHksIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhcm91bmQgbGluZSA2Mi4gSSdtIHByb2JhYmx5IGFmdGVyIHNvbWV0aGluZyBzcGVjaWZpYyBpbiB0aGUgTG93ZXIgTGF5ZXIgQ29udHJvbCAoTExDKSBtb2R1bGU7IGxpa2VseSBkZWFsaW5nIHdpdGggaG93IFNNQyBoYW5kbGVzIGxvd2VyLWxldmVsIGxpbmsgY29udHJvbCB3aXRoaW4gdGhlIG5ldHdvcmsgc3RhY2suIEkgYW50aWNpcGF0ZSB0aGVyZSBtaWdodCBiZSBzb21lIHN1YnRsZXR5IHRoZXJlLCBvciBJJ3ZlIGhhZCBhIHJlY2VudCBkaXNjdXNzaW9uIGFuZCBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoYXQgcGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUwMywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAyOjU5OjAzLjk4ODE2Mzc1NVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzc4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NtYy9zbWNfbGxjLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTA6XFx0XFx0dTggc2VuZGVyX2dpZFtTTUNfR0lEX1NJWkVdO1xcbiAgNTE6XFx0XFx0dTggc2VuZGVyX3FwX251bVszXTtcXG4gIDUyOlxcdFxcdHU4IGxpbmtfbnVtO1xcbiAgNTM6XFx0XFx0dTggbGlua191aWRbU01DX0xHUl9JRF9TSVpFXTtcXG4gIDU0OlxcdFxcdHU4IG1heF9saW5rcztcXG4gIDU1OlxcdFxcdHU4IG1heF9jb25ucztcXG4gIDU2OlxcdFxcdHU4IHJlc2VydmVkWzhdO1xcbiAgNTc6XFx0fTtcXG4gIDU4OlxcdFxcbiAgNTk6XFx0I2RlZmluZSBTTUNfTExDX0ZMQUdfQUREX0xOS19SRUpcXHQweDQwXFxuICA2MDpcXHQjZGVmaW5lIFNNQ19MTENfUkVKX1JTTl9OT19BTFRfUEFUSFxcdDFcXG4gIDYxOlxcdFxcbiAgNjI6XFx0c3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rIHtcXHRcXHQvKiB0eXBlIDB4MDIgKi9cXG4gIDYzOlxcdFxcdHN0cnVjdCBzbWNfbGxjX2hkciBoZDtcXG4gIDY0OlxcdFxcdHU4IHNlbmRlcl9tYWNbRVRIX0FMRU5dO1xcbiAgNjU6XFx0XFx0dTggcmVzZXJ2ZWQyWzJdO1xcbiAgNjY6XFx0XFx0dTggc2VuZGVyX2dpZFtTTUNfR0lEX1NJWkVdO1xcbiAgNjc6XFx0XFx0dTggc2VuZGVyX3FwX251bVszXTtcXG4gIDY4OlxcdFxcdHU4IGxpbmtfbnVtO1xcbiAgNjk6XFx0I2lmIGRlZmluZWQoX19CSUdfRU5ESUFOX0JJVEZJRUxEKVxcbiAgNzA6XFx0XFx0dTggcmVzZXJ2ZWQzIDogNCxcXG4gIDcxOlxcdFxcdCAgIHFwX210dSAgIDogNDtcXG4gIDcyOlxcdCNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKVxcbiAgNzM6XFx0XFx0dTggcXBfbXR1ICAgOiA0LFxcbiAgNzQ6XFx0XFx0ICAgcmVzZXJ2ZWQzIDogNDtcXG4gIDc1OlxcdCNlbmRpZlxcbiAgNzY6XFx0XFx0dTggaW5pdGlhbF9wc25bM107XFxuICA3NzpcXHRcXHR1OCByZXNlcnZlZFs4XTtcXG4gIDc4OlxcdH07XFxuICA3OTpcXHRcXG4gIDgwOlxcdHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua19jb250X3J0IHtcXG4gIDgxOlxcdFxcdF9fYmUzMiBybWJfa2V5O1xcbiAgODI6XFx0XFx0X19iZTMyIHJtYl9rZXlfbmV3O1xcbiAgODM6XFx0XFx0X19iZTY0IHJtYl92YWRkcl9uZXc7XFxuICA4NDpcXHR9O1xcbiAgODU6XFx0XFxuICA4NjpcXHRzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfdjJfZXh0IHtcXG4gIDg3OlxcdCNpZiBkZWZpbmVkKF9fQklHX0VORElBTl9CSVRGSUVMRClcXG4gIDg4OlxcdFxcdHU4IHYyX2RpcmVjdCA6IDEsXFxuICA4OTpcXHRcXHQgICByZXNlcnZlZCAgOiA3O1xcbiAgOTA6XFx0I2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpXFxuICA5MTpcXHRcXHR1OCByZXNlcnZlZCAgOiA3LFxcbiAgOTI6XFx0XFx0ICAgdjJfZGlyZWN0IDogMTtcXG4gIDkzOlxcdCNlbmRpZlxcbiAgOTQ6XFx0XFx0dTggcmVzZXJ2ZWQyO1xcbiAgOTU6XFx0XFx0dTggY2xpZW50X3RhcmdldF9naWRbU01DX0dJRF9TSVpFXTtcXG4gIDk2OlxcdFxcdHU4IHJlc2VydmVkM1s4XTtcXG4gIDk3OlxcdFxcdHUxNiBudW1fcmtleXM7XFxuICA5ODpcXHRcXHRzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfY29udF9ydCBydFtdO1xcbiAgOTk6XFx0fSBfX3BhY2tlZDtcXHRcXHQvKiBmb3JtYXQgZGVmaW5lZCBpblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMjo1OTowMy45ODgzMDM1MjVaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcwNjY0NjIyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgYHVuaW9uIHNtY19sbGNfbXNnYCBTdHJ1Y3R1cmUqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGB1bmlvbiBzbWNfbGxjX21zZ2AuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHRoaW5rIGFib3V0IHRoZSB0eXBpY2FsIHVzZS1jYXNlcyB0aGlzIGtpbmQgb2Ygc3RydWN0dXJlIHN1Z2dlc3RzLiBJdCdzIGEgdW5pb24sIHdoaWNoIHNjcmVhbXMgXCJtZW1vcnkgZWZmaWNpZW5jeVwiIGFuZCBcImFsdGVybmF0aXZlIGludGVycHJldGF0aW9ucyBvZiB0aGUgc2FtZSBtZW1vcnkgbG9jYXRpb24uXCIgSW4gYSBTeXN0ZW0gTWFuYWdlbWVudCBDb250cm9sbGVyIChTTUMpIG9yIExvdy1MZXZlbCBMaW5rIENvbnRyb2xsZXIgKExMQykgY29udGV4dCwgSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IGRpZmZlcmVudCBtZXNzYWdlIHR5cGVzIHRoYXQgbWlnaHQgc2hhcmUgc29tZSBjb21tb24gaGVhZGVyIGluZm9ybWF0aW9uLCBidXQgaGF2ZSBkaXN0aW5jdCBkYXRhIHBheWxvYWRzIGRlcGVuZGluZyBvbiB0aGUgc3BlY2lmaWMgY29tbWFuZCBvciBldmVudC5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgZGlmZmVyZW50IG1lbWJlcnMgcmVwcmVzZW50LiBJcyBpdCBhIHVuaW9uIG9mIGRhdGEgc3RydWN0dXJlcywgb2YgcHJpbWl0aXZlIHR5cGVzLCBvciBhIGNvbWJpbmF0aW9uPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBzaXplPyBUaGUgc2l6ZSB3aWxsIGRpY3RhdGUgaG93IG11Y2ggaW5mb3JtYXRpb24gY2FuIGJlIGNvbnZleWVkIGluIGEgc2luZ2xlIG1lc3NhZ2UuIEFyZSB0aGVyZSBhbGlnbm1lbnQgY29uc2lkZXJhdGlvbnMgaGVyZSwgdG9vPyBJJ2xsIHByb2JhYmx5IG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBwbGF0Zm9ybSBhbmQgdGhlIGNvbW11bmljYXRpb24gcHJvdG9jb2wgdG8gdHJ1bHkgZ3Jhc3AgdGhlIHN0cnVjdHVyZSdzIHJvbGUuXG5cbkknbSBzdGFydGluZyB0byBmb3JtdWxhdGUgcXVlc3Rpb25zIGluIG15IGhlYWQ6IFdoYXQgaXMgdGhlIG92ZXJhbGwgbWVzc2FnZSBmb3JtYXQ/IFdoYXQgYXJlIHRoZSB2YWxpZCBtZXNzYWdlIHR5cGVzPyBIb3cgYXJlIHRoZXkgZGlzdGluZ3Vpc2hlZD8gSXMgdGhlcmUgYSB0eXBlIGZpZWxkLCBvciBkbyB3ZSByZWx5IG9uIGltcGxpY2l0IGtub3dsZWRnZSBvZiB0aGUgc2VuZGluZy9yZWNlaXZpbmcgbW9kdWxlcz8gSG93IGRvZXMgdGhpcyBzdHJ1Y3R1cmUgaW50ZXJhY3Qgd2l0aCB0aGUgcmVzdCBvZiB0aGUgU01DL0xMQyBpbnRlcmZhY2UsIHN1Y2ggYXMgdGhlIGhhcmR3YXJlIHJlZ2lzdGVycz8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBhcmVhcyBmb3IgcG9pbnRlciBhbGlhc2luZyBjb25mbGljdHM/IEFyZSB0aGVyZSBhbnkgY29tcGlsZXIgb3B0aW1pemF0aW9ucyB0aGF0IG1pZ2h0IGludGVyZmVyZSB3aXRoIGludGVuZGVkIHVzYWdlPyBXaGF0IGlzIHRoZSByYXRpb25hbGUgYmVoaW5kIHNlbGVjdGluZyBhIHVuaW9uIGZvciB0aGlzIG1lc3NhZ2Ugc3RydWN0dXJlPyBJdCBpbXBsaWVzIHRoZXJlIHdpbGwgYmUgYSBjb21tb24gaGVhZGVyIHdpdGggdHlwZSBpbmZvcm1hdGlvbiwgYW5kIHRoZW4gZWFjaCBtZXNzYWdlIHR5cGUgY2FuIGhhdmUgdGhlaXIgb3duIHNldCBvZiBkYXRhIGZpZWxkcy4gSG93IGRvZXMgdGhpcyBjb21wYXJlIHdpdGggb3RoZXIgYXBwcm9hY2hlcywgc3VjaCBhcyBoYXZpbmcgYSBzZXBhcmF0ZSBzdHJ1Y3QgZm9yIGVhY2ggbWVzc2FnZSB0eXBlPyBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBjb2RlIHRvIGdldCB0aGUgYW5zd2VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQ4OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDI6NTk6MDguNjk0OTUyNDQ0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTY5NzM5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1bmlvbiBzbWNfbGxjX21zZyBcXFxce1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL3NtY19sbGMuYz0xODI9c3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyX2lubGluZSB7XFx0LyogdHlwZSAweDI5ICovXFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYy0xODktXFxubmV0L3NtYy9zbWNfbGxjLmM6MTkwOnVuaW9uIHNtY19sbGNfbXNnIHtcXG5uZXQvc21jL3NtY19sbGMuYy0xOTEtXFx0c3RydWN0IHNtY19sbGNfbXNnX2NvbmZpcm1fbGluayBjb25maXJtX2xpbms7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAyOjU5OjA4Ljc1MDY1NTM0MloiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzI1NjI4MDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoYXQgY29kZSBzbmlwcGV0OlxuXG4qKkRpdmluZyBpbnRvIGB1bmlvbiBzbWNfbGxjX21zZ2AqKlxuXG5Pa2F5LCBsZXQncyBkaXNzZWN0IHRoaXMuIFwiTGV0J3MgcmVhZCBgdW5pb24gc21jX2xsY19tc2dgLlwiIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgaW1tZWRpYXRlbHkga25vdyB0aGlzIGlzIGxpa2VseSBhIEMgb3IgQysrIHVuaW9uIGRlZmluaXRpb24sIHdoaWNoIG1lYW5zIGl0J3MgYSBtZW1vcnktZWZmaWNpZW50IHdheSB0byByZXByZXNlbnQgZGlmZmVyZW50IGRhdGEgc3RydWN0dXJlcyBvciBtZXNzYWdlIGZvcm1hdHMsIGFsbCBvY2N1cHlpbmcgdGhlIHNhbWUgbWVtb3J5IGxvY2F0aW9uLiBUaGUgbmFtZSBgc21jX2xsY19tc2dgIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgdGhpcyB1bmlvbiBpcyByZWxhdGVkIHRvIHRoZSBTdWItTWVkaXVtIEFjY2VzcyBDb250cm9sIChTTUMpIGFuZCBMb2dpY2FsIExpbmsgQ29udHJvbCAoTExDKSBsYXllcnMsIGxpa2VseSBpbiBhIG5ldHdvcmsgY29tbXVuaWNhdGlvbiBjb250ZXh0LiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGlmZmVyZW50IG1lbWJlcnMgd2l0aGluIHRoaXMgdW5pb24gdG8gZnVsbHkgZ3Jhc3AgaXRzIHB1cnBvc2UuIFdoYXQgcG9zc2libGUgbWVzc2FnZSB0eXBlcyBvciBkYXRhIHN0cnVjdHVyZXMgY291bGQgdGhpcyBiZSBoYW5kbGluZyBhdCB0aGF0IGxheWVyPyBMaWtlbHksIEknbGwgZmluZCBkaWZmZXJlbnQgc3RydWN0dXJlcyByZXByZXNlbnRpbmcgdGhpbmdzIGxpa2UgY29udHJvbCBmcmFtZXMsIGRhdGEgZnJhbWVzLCBhY2tub3dsZWRnbWVudHMsIG9yIHZhcmlvdXMgcHJvdG9jb2wtc3BlY2lmaWMgbWVzc2FnZXMuIFRoZSBjbGV2ZXIgdXNlIG9mIGEgdW5pb24gc3VnZ2VzdHMgYSBkZWxpYmVyYXRlIGRlc2lnbiBjaG9pY2UgdG8gc2F2ZSBzcGFjZSBvciBoYW5kbGUgbWVzc2FnZSB2YXJpYXRpb25zIGVmZmVjdGl2ZWx5LiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhhdCBkZWNvZGluZyB0aGUgdW5pb24gd2lsbCByZXF1aXJlIGNoZWNraW5nIGEgdHlwZSBmaWVsZCBvciBhIGRpc2NyaW1pbmF0b3IgdG8gdW5kZXJzdGFuZCB3aGljaCBkYXRhIHN0cnVjdHVyZSBpcyBjdXJyZW50bHkgYWN0aXZlLiBMZXQncyBzZWUgd2hhdCdzIGluc2lkZSBhbmQgd2hhdCBpdCdzIHJlYWxseSBhYm91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwNzcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMjo1OToxNC4wNzYyODg0MjRaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxOTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zbWMvc21jX2xsYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5MDpcXHR1bmlvbiBzbWNfbGxjX21zZyB7XFxuIDE5MTpcXHRcXHRzdHJ1Y3Qgc21jX2xsY19tc2dfY29uZmlybV9saW5rIGNvbmZpcm1fbGluaztcXG4gMTkyOlxcdFxcdHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGluayBhZGRfbGluaztcXG4gMTkzOlxcdFxcdHN0cnVjdCBzbWNfbGxjX21zZ19yZXFfYWRkX2xpbmtfdjIgcmVxX2FkZF9saW5rO1xcbiAxOTQ6XFx0XFx0c3RydWN0IHNtY19sbGNfbXNnX2FkZF9saW5rX2NvbnQgYWRkX2xpbmtfY29udDtcXG4gMTk1OlxcdFxcdHN0cnVjdCBzbWNfbGxjX21zZ19kZWxfbGluayBkZWxldGVfbGluaztcXG4gMTk2OlxcdFxcbiAxOTc6XFx0XFx0c3RydWN0IHNtY19sbGNfbXNnX2NvbmZpcm1fcmtleSBjb25maXJtX3JrZXk7XFxuIDE5ODpcXHRcXHRzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXkgZGVsZXRlX3JrZXk7XFxuIDE5OTpcXHRcXHRzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsZXRlX3JrZXlfdjJfaW5saW5lIGRlbGV0ZV9ya2V5X3YyO1xcbiAyMDA6XFx0XFxuIDIwMTpcXHRcXHRzdHJ1Y3Qgc21jX2xsY19tc2dfdGVzdF9saW5rIHRlc3RfbGluaztcXG4gMjAyOlxcdFxcdHN0cnVjdCB7XFxuIDIwMzpcXHRcXHRcXHRzdHJ1Y3Qgc21jX2xsY19oZHIgaGRyO1xcbiAyMDQ6XFx0XFx0XFx0dTggZGF0YVtTTUNfTExDX0RBVEFfTEVOXTtcXG4gMjA1OlxcdFxcdH0gcmF3O1xcbiAyMDY6XFx0fTtcXG4gMjA3OlxcdFxcbiAyMDg6XFx0c3RhdGljX2Fzc2VydChTTUNfTExDX0RFTF9SS0VZX1YyX0lOTElORSA9PVxcbiAyMDk6XFx0XFx0ICAgICAgKHNpemVvZih1bmlvbiBzbWNfbGxjX21zZykgLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMjo1OToxNC4wNzY0NDI2NzRaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0OTE4NjU1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBzbWNfbGxjX21zZ2AgU3RydWN0dXJlKipcblxuT2theSwgc28gSSdtIHRha2luZyBhIGxvb2sgYXQgdGhpcyBgdW5pb24gc21jX2xsY19tc2dgLCBhbmQgbXkgaW5pdGlhbCBndXQgZmVlbGluZyBpcyB0aGF0IGl0J3MgZ29pbmcgdG8gYmUgcHJlY2lzZWx5IDQ0IGJ5dGVzIGluIHNpemUuIFRoZSByZWFzb24/IFdlbGwsIGJhc2VkIG9uIG15IGV4cGVyaWVuY2UsIEknbSBiZXR0aW5nIHRoYXQgYFNNQ19MTENfREFUQV9MRU5gIGlzIGxpa2VseSBkZWZpbmVkIGFzIDQwIGJ5dGVzLiBBbmQgd2Uga25vdyB0aGF0IGBzdHJ1Y3Qgc21jX2xsY19oZHJgLCB3aGljaCBpcyBwYXJ0IG9mIHRoaXMgb3ZlcmFsbCBzdHJ1Y3R1cmUsIGlzIDQgYnl0ZXMuIDQwIHBsdXMgNCBlcXVhbHMgNDQsIHNvIHRoYXQncyB0aGUgbGlrZWx5IG91dGNvbWUuXG5cbkJ1dCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4gSSdtIGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0aGUgYWN0dWFsIGRlZmluaXRpb24gb2YgYFNNQ19MTENfREFUQV9MRU5gIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gVGhlcmUncyBubyByb29tIGZvciBndWVzc2luZyBoZXJlOyBJJ2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYXNzdW1wdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4MDQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAyOjU5OjE3LjUyNTYzMjE1N1oiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwNDA4MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2RlZmluZSBTTUNfTExDX0RBVEFfTEVOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX2xsYy5jLTIxLVxcbm5ldC9zbWMvc21jX2xsYy5jOjIyOiNkZWZpbmUgU01DX0xMQ19EQVRBX0xFTlxcdFxcdDQwXFxubmV0L3NtYy9zbWNfbGxjLmMtMjMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAyOjU5OjE3LjU3MjY4MTQ5NloiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDQyMzY5NjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTTUMtTExDIE1lc3NhZ2UgU2l6ZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBgdW5pb24gc21jX2xsY19tc2dgIGlzIGluZGVlZCA0NCBieXRlcy4gTXkgbmV4dCB0aG91Z2h0IGlzLCBob3cgZG9lcyB0aGlzIHNpemUgY29tcGFyZSB0byB0aGUgb3RoZXIgc3RydWN0dXJlcyB0aGF0IGFyZSB1c2VkIHdpdGhpbiB0aGF0IHVuaW9uPyBMZXQncyBzdGFydCB3aXRoIGBzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBzdHJ1Y3R1cmUncyBzaXplIGlzIGFsc28gNDQgYnl0ZXMuIExvb2tpbmcgYXQgdGhlIGRlZmluaXRpb24sIEknbGwgY2FsY3VsYXRlIHRoZSBzaXplIGZpZWxkIGJ5IGZpZWxkOiBXZSd2ZSBnb3QgYHN0cnVjdCBzbWNfbGxjX2hkciBoZGAsIHdoaWNoIGlzIDQgYnl0ZXMuIFRoZW4gYHU4IHNlbmRlcl9tYWNbRVRIX0FMRU5dYCBpcyA2IGJ5dGVzLiBGb2xsb3dpbmcgdGhhdCwgdGhlcmUncyBgdTggcmVzZXJ2ZWQyWzJdYCBmb3IgMiBieXRlcywgYHU4IHNlbmRlcl9naWRbU01DX0dJRF9TSVpFXWAgZm9yIDE2IGJ5dGVzLCBgdTggc2VuZGVyX3FwX251bVszXWAgZm9yIDMgYnl0ZXMsIGB1OCBsaW5rX251bWAgZm9yIDEgYnl0ZSwgYHU4IHFwX210dSA6IDQsIHJlc2VydmVkMyA6IDRgIHdoaWNoIGlzIDEgYnl0ZSwgYHU4IGluaXRpYWxfcHNuWzNdYCBmb3IgMyBieXRlcywgYW5kIGZpbmFsbHkgYHU4IHJlc2VydmVkWzhdYCB3aGljaCBpcyA4IGJ5dGVzLiBBZGRpbmcgdGhhdCB1cCwgNCArIDYgKyAyICsgMTYgKyAzICsgMSArIDEgKyAzICsgOCwgY29tZXMgb3V0IHRvIDQ0IGJ5dGVzLiBUaGVyZWZvcmUsIHRoZSBgc2l6ZW9mKHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGluaylgIGlzIGFsc28gNDQgYnl0ZXMuIFRoYXQgYWxpZ25zIHdpdGggbXkgZXhwZWN0YXRpb25zLiBOb3csIEkgc2hvdWxkIGxvb2sgYXQgYHN0cnVjdCBzbWNfbGxjX21zZ19kZWxfbGlua2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTc0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAyOjU5OjIzLjYxNTA1NDY5OFoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2OTk1ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHNtY19sbGNfbXNnX2RlbF9saW5rIFxcXFx7XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX2xsYy5jPTExND1zdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfY29udCB7XFx0LyogdHlwZSAweDAzICovXFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYy0xMjUtXFxubmV0L3NtYy9zbWNfbGxjLmM6MTI2OnN0cnVjdCBzbWNfbGxjX21zZ19kZWxfbGluayB7XFx0XFx0LyogdHlwZSAweDA0ICovXFxubmV0L3NtYy9zbWNfbGxjLmMtMTI3LVxcdHN0cnVjdCBzbWNfbGxjX2hkciBoZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDI6NTk6MjMuNjYxNzU4OTA2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0Mjg3NTUwNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYHN0cnVjdCBzbWNfbGxjX21zZ19kZWxfbGlua2AqKlxuXG5Pa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGludm9sdmVzIGV4YW1pbmluZyBgc3RydWN0IHNtY19sbGNfbXNnX2RlbF9saW5rYC4gVGhpcyBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBTTUMtRCBhcmNoaXRlY3R1cmUgYW5kIHNwZWNpZmljYWxseSwgaXRzIHJlc3BvbnNpYmlsaXR5IGluIGhhbmRsaW5nIGxpbmsgZGVsZXRpb24gbWVzc2FnZXMuIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBhIGZldyBrZXkgZmllbGRzIHRoYXQgKnNob3VsZCogYmUgcHJlc2VudCwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGF0YSBmbG93IGFuZCBwcm90b2NvbCBkZXNpZ246IEknbGwgZXhwZWN0IGEgbGluayBJRCBvZiBzb21lIGtpbmQsIHByb2JhYmx5IGEgY29ubmVjdGlvbiBpZGVudGlmaWVyIG9yIHNvbWUgb3RoZXIgZmllbGQgaWRlbnRpZnlpbmcgdGhlIHNwZWNpZmljIGNvbm5lY3Rpb24gdGhlIGNvbW1hbmQgaXMgcmVmZXJyaW5nIHRvLiBJJ2QgYmUgaW50ZXJlc3RlZCB0byBzZWUgaWYgdGhlcmUgaXMgYW55IHNlcXVlbmNpbmcgaW5mbyBvciBmbGFncyBhc3NvY2lhdGVkLlxuXG5NeSBpbml0aWFsIGxpbmUgb2YgdGhvdWdodCwgaXMgYXJvdW5kIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zOyB0aGlzIGlzIGEgZGVsZXRlIGNvbW1hbmQsIHdoaWNoIGluaGVyZW50bHkgaGFzIGhpZ2hlciBwcml2aWxlZ2VzIGFzc29jaWF0ZWQgd2l0aCBpdCB0aGFuIGNvbW1hbmRzIHRoYXQgb25seSByZWFkIGRhdGEuIEknbSBnb2luZyB0byBsb29rIGZvciBhbnkgZmllbGRzIHJlbGF0ZWQgdG8gYXV0aG9yaXphdGlvbiBvciBhdXRoZW50aWNhdGlvbiBvZiB0aGlzIGNvbW1hbmQsIG9yIHdoZXRoZXIgYXV0aG9yaXphdGlvbiBpcyBoYW5kbGVkIGVsc2V3aGVyZSBpbiB0aGUgc3RhY2suXG5cbkknbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgaW1wbGljYXRpb25zIGZvciBzdGF0ZSBtYW5hZ2VtZW50IGluIHRoZSBsaW5rIGxheWVyIGNvbnRyb2wgbG9naWMuIEhvdyBkb2VzIHRoaXMgbWVzc2FnZSBpbXBhY3QgY29ubmVjdGlvbiBzdGF0ZXMsIHJlc291cmNlIGRlYWxsb2NhdGlvbiwgYW5kIHBvdGVudGlhbCBlcnJvciBoYW5kbGluZz8gQXJlIHRoZXJlIGFueSByYWNlIGNvbmRpdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mIGlmIG11bHRpcGxlIGRlbGV0ZSBtZXNzYWdlcyBhcmUgaW4tZmxpZ2h0IGNvbmN1cnJlbnRseT8gQXJlIHRoZXJlIGFueSBmaWVsZHMgdGhhdCBzdWdnZXN0IGVycm9yIHJlcG9ydGluZyBvciBhY2tub3dsZWRnZW1lbnRzIHJlbGF0ZWQgdG8gdGhlIGRlbGV0aW9uIHJlcXVlc3Q/XG5cbkVzc2VudGlhbGx5LCBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgc3RydWN0dXJlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyYWN0IGl0IGRlZmluZXMg4oCTIHRoZSBpbmZvcm1hdGlvbiBpdCAqbXVzdCogY29udGFpbiBmb3IgYSBzdWNjZXNzZnVsIGxpbmsgZGVsZXRpb24sIGFuZCB0aGUgZ3VhcmFudGVlcyBpdCBwcm92aWRlcyAob3IgZG9lc24ndCBwcm92aWRlKSBhYm91dCB0aGUgcHJvY2Vzcy4gSSdtIGFsc28gcHJpbWVkIHRvIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgcmVkIGZsYWdzIG9yIGFyZWFzIHdoZXJlIHRoZSBkZXNpZ24gY291bGQgYmUgaW1wcm92ZWQsIGVzcGVjaWFsbHkgd2l0aCByZXNwZWN0IHRvIHJvYnVzdG5lc3MgYW5kIHNlY3VyaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzAwNSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAyOjU5OjI4LjA5MDUxNjk2M1oiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NtYy9zbWNfbGxjLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI2LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTI2OlxcdHN0cnVjdCBzbWNfbGxjX21zZ19kZWxfbGluayB7XFx0XFx0LyogdHlwZSAweDA0ICovXFxuIDEyNzpcXHRcXHRzdHJ1Y3Qgc21jX2xsY19oZHIgaGQ7XFxuIDEyODpcXHRcXHR1OCBsaW5rX251bTtcXG4gMTI5OlxcdFxcdF9fYmUzMiByZWFzb247XFxuIDEzMDpcXHRcXHR1OCByZXNlcnZlZFszNV07XFxuIDEzMTpcXHR9IF9fcGFja2VkO1xcdFxcdFxcdC8qIGZvcm1hdCBkZWZpbmVkIGluIFJGQzc2MDkgKi9cXG4gMTMyOlxcdFxcbiAxMzM6XFx0c3RydWN0IHNtY19sbGNfbXNnX3Rlc3RfbGluayB7XFx0XFx0LyogdHlwZSAweDA3ICovXFxuIDEzNDpcXHRcXHRzdHJ1Y3Qgc21jX2xsY19oZHIgaGQ7XFxuIDEzNTpcXHRcXHR1OCB1c2VyX2RhdGFbMTZdO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMjo1OToyOC4wOTA2Mzc2NjNaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk4MzYxMzk4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERhdGEgQ29weSBpbiBgc21jX2xsY19lbnF1ZXVlYCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkndmUgY2FsY3VsYXRlZCB0aGUgdG90YWwgc2l6ZSBvZiB0aGVzZSBzdHJ1Y3R1cmVzIOKAkyB0aGUgc3VtIG9mIHRoZWlyIGluZGl2aWR1YWwgbWVtYmVycyBnaXZlcyBtZSA0NCBieXRlcy4gS25vd2luZyB0aGlzLCBjb3B5aW5nIGBzaXplb2YodW5pb24gc21jX2xsY19tc2cpYCBmcm9tIGVpdGhlciBgXHUwMDI2YWRkX2xsY2Agb3IgYFx1MDAyNmRlbF9sbGNgIHdpdGhpbiBgc21jX2xsY19lbnF1ZXVlYCBpcyBjb21wbGV0ZWx5IHNhZmU7IG5vIHdvcnJpZXMgYWJvdXQgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhlIG1lbW9yeSBhY2Nlc3Mgd2lsbCBzdGF5IHdpdGhpbiB0aGUgZGVmaW5lZCBib3VuZHMuXG5cbkJ1dCwgaG9sZCBvbiwgYSBxdWljayBzYW5pdHkgY2hlY2sgaXMgYWx3YXlzIHdpc2UuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYGFkZF9sbGNgIGlzIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB0aGUgY29weS4gT2gsIHJpZ2h0LCB0aGUgY29kZSBleHBsaWNpdGx5IHplcm9lcyB0aGUgc3RydWN0OlxuXG5gYGBjXG5cdHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGluayBhZGRfbGxjO1xuXG5cdG1lbXNldChcdTAwMjZhZGRfbGxjLCAwLCBzaXplb2YoYWRkX2xsYykpO1xuYGBgXG5cbkV4Y2VsbGVudC4gSXQncyB6ZXJvZWQsIHNvIHRoYXQncyBnb29kLiBBbmQgYGRlbF9sbGNgIGlzIHRoZSBzYW1lLCBtYWtpbmcgdGhpcyBwZXJmZWN0bHkgc2FmZTpcblxuYGBgY1xuXHRzdHJ1Y3Qgc21jX2xsY19tc2dfZGVsX2xpbmsgZGVsX2xsYztcblxuXHRtZW1zZXQoXHUwMDI2ZGVsX2xsYywgMCwgc2l6ZW9mKGRlbF9sbGMpKTtcbmBgYFxuXG5Pa2F5LCB0aGUgbWVtb3J5IGFjY2VzcyBpcyBzYWZlLCB0aGUgZGF0YSBpcyBpbml0aWFsaXplZC4gSSB0aGluayBJIHdpbGwganVzdCBjaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjYWxsZXJzIG9mIHRoYXQgZnVuY3Rpb24sIGp1c3QgdG8gYmUgc3VyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzYyOCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAyOjU5OjM0LjA3NDI1Njk3NloiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4NTk5MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic21jX2xsY19lbnF1ZXVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX2xsYy5jPTIxNz1zdHJ1Y3Qgc21jX2xsY19xZW50cnkge1xcbi0tXFxubmV0L3NtYy9zbWNfbGxjLmMtMjI0LVxcbm5ldC9zbWMvc21jX2xsYy5jOjIyNTpzdGF0aWMgdm9pZCBzbWNfbGxjX2VucXVldWUoc3RydWN0IHNtY19saW5rICpsaW5rLCB1bmlvbiBzbWNfbGxjX21zZyAqbGxjLFxcbm5ldC9zbWMvc21jX2xsYy5jLTIyNi1cXHRcXHRcXHQgICAgdTMyIGJ5dGVfbGVuKTtcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jPTE1NzE9dm9pZCBzbWNfbGxjX2FkZF9saW5rX2xvY2FsKHN0cnVjdCBzbWNfbGluayAqbGluaylcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTE1NzctXFx0Lyogbm8gZGV2IGFuZCBwb3J0IG5lZWRlZCAqL1xcbm5ldC9zbWMvc21jX2xsYy5jOjE1Nzg6XFx0c21jX2xsY19lbnF1ZXVlKGxpbmssICh1bmlvbiBzbWNfbGxjX21zZyAqKVxcdTAwMjZhZGRfbGxjLFxcbm5ldC9zbWMvc21jX2xsYy5jLTE1NzktXFx0XFx0XFx0c2l6ZW9mKHVuaW9uIHNtY19sbGNfbXNnKSk7XFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYz0xNjA2PXZvaWQgc21jX2xsY19zcnZfZGVsZXRlX2xpbmtfbG9jYWwoc3RydWN0IHNtY19saW5rICpsaW5rLCB1OCBkZWxfbGlua19pZClcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTE2MTQtXFx0ZGVsX2xsYy5oZC5mbGFncyB8PSBTTUNfTExDX0ZMQUdfREVMX0xJTktfT1JERVJMWTtcXG5uZXQvc21jL3NtY19sbGMuYzoxNjE1OlxcdHNtY19sbGNfZW5xdWV1ZShsaW5rLCAodW5pb24gc21jX2xsY19tc2cgKilcXHUwMDI2ZGVsX2xsYyxcXG5uZXQvc21jL3NtY19sbGMuYy0xNjE2LVxcdFxcdFxcdHNpemVvZih1bmlvbiBzbWNfbGxjX21zZykpO1xcbi0tXFxubmV0L3NtYy9zbWNfbGxjLmM9MjEwMT1zdGF0aWMgdTMyIHNtY19sbGNfbWF4X2JvZHlfbGVuKHVuaW9uIHNtY19sbGNfbXNnICpsbGMpXFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYy0yMTE1LVxcbm5ldC9zbWMvc21jX2xsYy5jOjIxMTY6c3RhdGljIHZvaWQgc21jX2xsY19lbnF1ZXVlKHN0cnVjdCBzbWNfbGluayAqbGluaywgdW5pb24gc21jX2xsY19tc2cgKmxsYyxcXG5uZXQvc21jL3NtY19sbGMuYy0yMTE3LVxcdFxcdFxcdCAgICB1MzIgYnl0ZV9sZW4pXFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYz0yMTYyPXN0YXRpYyB2b2lkIHNtY19sbGNfcnhfaGFuZGxlcihzdHJ1Y3QgaWJfd2MgKndjLCB2b2lkICpidWYpXFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYy0yMTc2LVxcbm5ldC9zbWMvc21jX2xsYy5jOjIxNzc6XFx0c21jX2xsY19lbnF1ZXVlKGxpbmssIGxsYywgd2MtXFx1MDAzZWJ5dGVfbGVuKTtcXG5uZXQvc21jL3NtY19sbGMuYy0yMTc4LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDI6NTk6MzQuMTIxMTIyNzc1WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5OTUzMzc2MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUG90ZW50aWFsIEJ1ZmZlciBPdmVyZmxvdyBpbiBTTUMgTExDIFJYIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgc21jX2xsY19yeF9oYW5kbGVyYCBmdW5jdGlvbiBhbmQgdGhlIHN1YnNlcXVlbnQgcHJvY2Vzc2luZyBvZiByZWNlaXZlZCBMTEMgbWVzc2FnZXMuIFRoZSBgc21jX2xsY19yeF9oYW5kbGVyYCBnZXRzIGl0cyBkYXRhLCBwb2ludGVkIHRvIGJ5IGBsbGNgLCBmcm9tIHRoZSBuZXR3b3JrIHZpYSBgaWJfd2NgLiBUaGUga2V5IGlzIGB3Yy1cdTAwM2VieXRlX2xlbmAsIHdoaWNoIGlzIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkLCBhbmQgYGxsY2AgdGhhdCBwb2ludHMgdG8gdGhlIGRhdGEgYnVmZmVyLiBUaGVuLCBpdCBlbnF1ZXVlcyB0aGUgTExDIG1lc3NhZ2UuXG5cbk5vdywgaW4gYHNtY19sbGNfZW5xdWV1ZWAsIGl0IHNlZW1zIHdlJ3JlIGFsbG9jYXRpbmcgYSBxdWV1ZSBlbnRyeSBhbmQgY29weWluZyB0aGUgcmVjZWl2ZWQgZGF0YSBpbnRvIGl0LiBTcGVjaWZpY2FsbHksIEknbSBjb25jZXJuZWQgYWJvdXQgdGhpcyBgbWVtY3B5KFx1MDAyNnFlbnRyeS1cdTAwM2Vtc2csIGxsYywgc2l6ZW9mKHVuaW9uIHNtY19sbGNfbXNnKSk7YC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2FpdCBhIG1pbnV0ZS4uLiBpcyBpdCAqcG9zc2libGUqIHRoYXQgYHdjLVx1MDAzZWJ5dGVfbGVuYCAodGhlIHJlY2VpdmVkIHNpemUpIGlzICpzbWFsbGVyKiB0aGFuIGBzaXplb2YodW5pb24gc21jX2xsY19tc2cpYD9cIi4gQmVjYXVzZSBpZiB0aGF0J3MgdGhlIGNhc2UsIHdlJ3JlIGdvaW5nIHRvIGhhdmUgYSBjbGFzc2ljIGJ1ZmZlciBvdmVyZmxvdyBzaXR1YXRpb24uIGBtZW1jcHlgIHdvdWxkIGJlIHJlYWRpbmcgcGFzdCB0aGUgZW5kIG9mIHRoZSBgbGxjYCBidWZmZXIuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoaXMgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuIEkgbmVlZCB0byBnbyBiYWNrIGFuZCBkb3VibGUtY2hlY2sgaG93IGBzbWNfbGxjX3J4X2hhbmRsZXJgIGhhbmRsZXMgdGhlIHJlY2VpdmVkIGJ5dGUgbGVuZ3RoIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGd1YXJkcyBpbiBwbGFjZSwgYnV0IEkgaGF2ZSBhIHN0cm9uZyBmZWVsaW5nIHdlIGhhdmUgYSBwcm9ibGVtIGhlcmUuIEkgc3VzcGVjdCB0aGF0IHRoZSBzaXplIGNoZWNrIG1pZ2h0IGJlIG1pc3Npbmcgb3IgaW5zdWZmaWNpZW50LCB3aGljaCBjcmVhdGVzIGEgcG9zc2libGUgdnVsbmVyYWJpbGl0eSwgYW5kIG15IG5leHQgc3RlcCBpcyB0byB2ZXJpZnkgd2hldGhlciB0aGF0J3MgdGhlIGNhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTM0LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAyOjU5OjQyLjExNjQ2MzU5MloiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzAyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NtYy9zbWNfbGxjLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjE2MixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjE2MjpcXHRzdGF0aWMgdm9pZCBzbWNfbGxjX3J4X2hhbmRsZXIoc3RydWN0IGliX3djICp3Yywgdm9pZCAqYnVmKVxcbjIxNjM6XFx0e1xcbjIxNjQ6XFx0XFx0c3RydWN0IHNtY19saW5rICpsaW5rID0gKHN0cnVjdCBzbWNfbGluayAqKXdjLVxcdTAwM2VxcC1cXHUwMDNlcXBfY29udGV4dDtcXG4yMTY1OlxcdFxcdHVuaW9uIHNtY19sbGNfbXNnICpsbGMgPSBidWY7XFxuMjE2NjpcXHRcXG4yMTY3OlxcdFxcdGlmICh3Yy1cXHUwMDNlYnl0ZV9sZW4gXFx1MDAzYyBzaXplb2YoKmxsYykpXFxuMjE2ODpcXHRcXHRcXHRyZXR1cm47IC8qIHNob3J0IG1lc3NhZ2UgKi9cXG4yMTY5OlxcdFxcdGlmICghbGxjLVxcdTAwM2VyYXcuaGRyLmNvbW1vbi5sbGNfdmVyc2lvbikge1xcbjIxNzA6XFx0XFx0XFx0aWYgKGxsYy1cXHUwMDNlcmF3Lmhkci5sZW5ndGggIT0gc2l6ZW9mKCpsbGMpKVxcbjIxNzE6XFx0XFx0XFx0XFx0cmV0dXJuOyAvKiBpbnZhbGlkIG1lc3NhZ2UgKi9cXG4yMTcyOlxcdFxcdH0gZWxzZSB7XFxuMjE3MzpcXHRcXHRcXHRpZiAobGxjLVxcdTAwM2VyYXcuaGRyLmxlbmd0aF92MiBcXHUwMDNjIHNpemVvZigqbGxjKSlcXG4yMTc0OlxcdFxcdFxcdFxcdHJldHVybjsgLyogaW52YWxpZCBtZXNzYWdlICovXFxuMjE3NTpcXHRcXHR9XFxuMjE3NjpcXHRcXG4yMTc3OlxcdFxcdHNtY19sbGNfZW5xdWV1ZShsaW5rLCBsbGMsIHdjLVxcdTAwM2VieXRlX2xlbik7XFxuMjE3ODpcXHR9XFxuMjE3OTpcXHRcXG4yMTgwOlxcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiB3b3JrZXIsIHV0aWxzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4yMTgxOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMjo1OTo0Mi4xMTY1OTU2NTJaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY1NTQ3NDU2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJ5dGUgTGVuZ3RoIENoZWNrKipcblxuT2theSwgc28gdGhlIGNvZGUgc3RhcnRzIHdpdGggYSBxdWljayBjaGVjazogYGlmICh3Yy1cdTAwM2VieXRlX2xlbiBcdTAwM2Mgc2l6ZW9mKCpsbGMpKWAuIE15IGZpcnN0IHRob3VnaHQgaXMsIHRoYXQncyBnb29kOyBpdCdzIGFuIG9wdGltaXphdGlvbi4gSXQgZW5zdXJlcyB0aGF0IGBsbGNgLCB3aGljaCBpcyBwcmVzdW1hYmx5IHNvbWUga2luZCBvZiBzdHJ1Y3R1cmUsIGhhcyBlbm91Z2ggYnl0ZXMgYWxsb2NhdGVkIHRvIGl0LiBTcGVjaWZpY2FsbHksIGl0IGd1YXJhbnRlZXMgdGhhdCBgbGxjYCBoYXMgYXQgbGVhc3QgdGhlIHNpemUgb2YgYHNpemVvZih1bmlvbiBzbWNfbGxjX21zZylgLiBNYWtlcyBzZW5zZS5cblxuQnV0IHRoZW4sIGEgcmVkIGZsYWcuIFdoYXQgaGFwcGVucyBpZiBgYnl0ZV9sZW5gIGlzICpsYXJnZXIqIHRoYW4gYSBjZXJ0YWluIHNpemU/IFRoYXQgY291bGQgbGVhZCB0byBwcm9ibGVtcy4gTGV0IG1lIHNlZS4uLiB0aGUgY29kZSBkZWZpbmVzIGBTTUNfV1JfVFhfU0laRWAuIEFoLCBpdCdzIDQ0IGJ5dGVzOlxuYGBgY1xuI2RlZmluZSBTTUNfV1JfVFhfU0laRSA0NFxuYGBgXG5JJ2QgYmV0dGVyIHZlcmlmeSB3aGVyZSBgU01DX1dSX1RYX1NJWkVgIGlzIGRlZmluZWQgdGhvdWdoLCBsZXQgbWUgZG91YmxlLWNoZWNrIGBuZXQvc21jL3NtY193ci5oYCB0byBzZWUgaWYgdGhlcmUncyBhbnkgY29udGV4dCBJJ20gbWlzc2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxMjksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMjo1OTo0Ni43NzIwNzMwOTJaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTk0ODI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUgU01DX1dSX1RYX1NJWkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9zbWNfd3IuaC0yMy1cXG5uZXQvc21jL3NtY193ci5oOjI0OiNkZWZpbmUgU01DX1dSX1RYX1NJWkUgNDQgLyogYWN0dWFsIHNpemUgb2Ygd3Jfc2VuZCBkYXRhIChcXHUwMDNjPVNNQ19XUl9CVUZfU0laRSkgKi9cXG5uZXQvc21jL3NtY193ci5oLTI1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMjo1OTo0Ni44MTc2NzM3MTFaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU0MzA5NTQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU01DIFdyaXRlIEJ1ZmZlciBBbGxvY2F0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBTTUNfV1JfVFhfU0laRWAgdGhpbmcsIGFuZCBpdCBsb29rcyBsaWtlIGl0J3MgNDQgYnl0ZXMsIHdoaWNoIGlzIHNwb3Qgb24gZm9yIHRoZSBzaXplIG9mIHRoYXQgYHNtY19sbGNfbXNnYCB1bmlvbi4gVGhhdCBtYWtlcyBzZW5zZS4gU28sIGBieXRlX2xlbmAgaGFzIHRvIGJlIGF0IGxlYXN0IHRoYXQuIFRoZW4sIGBib2R5X2xlbmAgaXMgZGVyaXZlZCBieSBzdWJ0cmFjdGluZyBgU01DX1dSX1RYX1NJWkVgIGZyb20gYGJ5dGVfbGVuYCwgd2l0aCBzb21lIHVwcGVyIGJvdW5kIGltcG9zZWQgYnkgYFNNQ19XUl9CVUZfVjJfU0laRSAtIFNNQ19XUl9UWF9TSVpFYC4gSXQncyBhbHNvIGNvbnN0cmFpbmVkIGZ1cnRoZXIgYnkgYHNtY19sbGNfbWF4X2JvZHlfbGVuKGxsYylgLlxuXG5UaGVuLCB3ZSdyZSBhbGxvY2F0aW5nIGEgYHFlbnRyeWAgYW5kIGNvcHlpbmcgYGJvZHlfbGVuYCBieXRlcyBmcm9tIGBzcmMgKyBTTUNfV1JfVFhfU0laRWAuIFRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHdlJ3JlIGd1YXJhbnRlZWQgdG8gaGF2ZSBlbm91Z2ggZGF0YSBpbiBgc3JjYCwgYSBtaW5pbXVtIG9mIGBTTUNfV1JfVFhfU0laRSArIGJvZHlfbGVuYCBieXRlcz8gSWYgYHNtY19saW5rX3NoYXJlZF92Ml9yeGJ1ZihsaW5rKWAgaXMgdHJ1ZSwgdGhlbiBgc3JjYCBwb2ludHMgdG8gYGxnci1cdTAwM2V3cl9yeF9idWZfdjJgLiBJZiBub3QsIGBzcmNgIHBvaW50cyB0byBgbGxjYC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBgbGxjYCBpcyB0aGUgcmlnaHQgc2l6ZSBpbiB0aGUgbGF0dGVyIGNhc2UuXG5cbkFoLCBJIHJlbWVtYmVyIHRoYXQgY29tbWVudCBmcm9tIGBzbWNfd3JfaW5pdF9zZ2VgOiBcIi4uLm1lc3NhZ2VzIGxhcmdlciB0aGFuIGBTTUNfV1JfVFhfU0laRWAuLi4gc3BpbGxvdmVyIGJ1ZmZlci4uLlwiIFJpZ2h0LCBmb3IgU01DLVJ2MiwgdGhlIHNlY29uZCBTR0UgaW4gZWFjaCBgaWJfcmVjdl93cmAgaXMgYSBzcGlsbG92ZXIgYnVmZmVyLiBJdCBzdGFydHMgYXQgYFNNQ19XUl9UWF9TSVpFYCwgd2hpY2ggaXMgd2h5IHRoZSBsZWFkaW5nIGJ5dGVzIG9mIHRoYXQgYnVmZmVyIGFyZSBuZXZlciB3cml0dGVuLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBzbWNfd3JfaW5pdF9zZ2VgIGluIGBuZXQvc21jL3NtY193ci5jYCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjYxMywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMjo1OTo1My4zNjA3NzI0OThaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzMTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zbWMvc21jX3dyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTk1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTk1OlxcdFxcdFxcdGxuay1cXHUwMDNld3JfdHhfdjJfaWItXFx1MDAzZW5leHQgPSBOVUxMO1xcbiA1OTY6XFx0XFx0XFx0bG5rLVxcdTAwM2V3cl90eF92Ml9pYi1cXHUwMDNlc2dfbGlzdCA9IGxuay1cXHUwMDNld3JfdHhfdjJfc2dlO1xcbiA1OTc6XFx0XFx0XFx0bG5rLVxcdTAwM2V3cl90eF92Ml9pYi1cXHUwMDNlbnVtX3NnZSA9IDE7XFxuIDU5ODpcXHRcXHRcXHRsbmstXFx1MDAzZXdyX3R4X3YyX2liLVxcdTAwM2VvcGNvZGUgPSBJQl9XUl9TRU5EO1xcbiA1OTk6XFx0XFx0XFx0bG5rLVxcdTAwM2V3cl90eF92Ml9pYi1cXHUwMDNlc2VuZF9mbGFncyA9XFxuIDYwMDpcXHRcXHRcXHRcXHRJQl9TRU5EX1NJR05BTEVEIHwgSUJfU0VORF9TT0xJQ0lURUQ7XFxuIDYwMTpcXHRcXHR9XFxuIDYwMjpcXHRcXG4gNjAzOlxcdFxcdC8qIFdpdGggU01DLVJ2MiB0aGVyZSBjYW4gYmUgbWVzc2FnZXMgbGFyZ2VyIHRoYW4gU01DX1dSX1RYX1NJWkUuXFxuIDYwNDpcXHRcXHQgKiBFYWNoIGliX3JlY3Zfd3IgZ2V0cyAyIHNnZXMsIHRoZSBzZWNvbmQgb25lIGlzIGEgc3BpbGxvdmVyIGJ1ZmZlclxcbiA2MDU6XFx0XFx0ICogYW5kIHRoZSBzYW1lIGJ1ZmZlciBmb3IgYWxsIHNnZXMuIFRoZSBzcGlsbG92ZXIgc2dlIHN0YXJ0cyBhdFxcbiA2MDY6XFx0XFx0ICogU01DX1dSX1RYX1NJWkUsIHNvIHRoZSBsZWFkaW5nIGJ5dGVzIG9mIHRoYXQgYnVmZmVyIGFyZSBuZXZlclxcbiA2MDc6XFx0XFx0ICogd3JpdHRlbi5cXG4gNjA4OlxcdFxcdCAqL1xcbiA2MDk6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGxuay1cXHUwMDNld3JfcnhfY250OyBpKyspIHtcXG4gNjEwOlxcdFxcdFxcdGludCB4ID0gaSAqIGxuay1cXHUwMDNld3Jfcnhfc2dlX2NudDtcXG4gNjExOlxcdFxcbiA2MTI6XFx0XFx0XFx0bG5rLVxcdTAwM2V3cl9yeF9zZ2VzW3hdLmFkZHIgPVxcbiA2MTM6XFx0XFx0XFx0XFx0bG5rLVxcdTAwM2V3cl9yeF9kbWFfYWRkciArIGkgKiBsbmstXFx1MDAzZXdyX3J4X2J1ZmxlbjtcXG4gNjE0OlxcdFxcdFxcdGxuay1cXHUwMDNld3Jfcnhfc2dlc1t4XS5sZW5ndGggPSBzbWNfbGlua19zaGFyZWRfdjJfcnhidWYobG5rKSA/XFxuIDYxNTpcXHRcXHRcXHRcXHRTTUNfV1JfVFhfU0laRSA6IGxuay1cXHUwMDNld3JfcnhfYnVmbGVuO1xcbiA2MTY6XFx0XFx0XFx0bG5rLVxcdTAwM2V3cl9yeF9zZ2VzW3hdLmxrZXkgPSBsbmstXFx1MDAzZXJvY2VfcGQtXFx1MDAzZWxvY2FsX2RtYV9sa2V5O1xcbiA2MTc6XFx0XFx0XFx0aWYgKGxuay1cXHUwMDNlbGdyLVxcdTAwM2VzbWNfdmVyc2lvbiA9PSBTTUNfVjIgXFx1MDAyNlxcdTAwMjYgc21jX2xpbmtfc2hhcmVkX3YyX3J4YnVmKGxuaykpIHtcXG4gNjE4OlxcdFxcdFxcdFxcdGxuay1cXHUwMDNld3Jfcnhfc2dlc1t4ICsgMV0uYWRkciA9XFxuIDYxOTpcXHRcXHRcXHRcXHRcXHRcXHRsbmstXFx1MDAzZXdyX3J4X3YyX2RtYV9hZGRyICsgU01DX1dSX1RYX1NJWkU7XFxuIDYyMDpcXHRcXHRcXHRcXHRsbmstXFx1MDAzZXdyX3J4X3NnZXNbeCArIDFdLmxlbmd0aCA9XFxuIDYyMTpcXHRcXHRcXHRcXHRcXHRcXHRTTUNfV1JfQlVGX1YyX1NJWkUgLSBTTUNfV1JfVFhfU0laRTtcXG4gNjIyOlxcdFxcdFxcdFxcdGxuay1cXHUwMDNld3Jfcnhfc2dlc1t4ICsgMV0ubGtleSA9XFxuIDYyMzpcXHRcXHRcXHRcXHRcXHRcXHRsbmstXFx1MDAzZXJvY2VfcGQtXFx1MDAzZWxvY2FsX2RtYV9sa2V5O1xcbiA2MjQ6XFx0XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMjo1OTo1My4zNjA4NzczMThaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjUzMDQ5ODA4MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJlYWRzIGluIFNNQy1MTEMgTWVzc2FnZSBIYW5kbGluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgZW5zdXJpbmcgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZXZlciByZWFkIHdoZW4gcHJvY2Vzc2luZyBTTUMtTExDIG1lc3NhZ2VzLCBwYXJ0aWN1bGFybHkgaW4gdGhlIGNvbnRleHQgb2Ygc3BpbGxvdmVyIGJ1ZmZlcnMgYW5kIHJrZXkgaGFuZGxpbmcuIEkndmUgY29uc2lkZXJlZCBzZXZlcmFsIGNvZGUgcGF0aHMgaW4gZGV0YWlsLCBhbmQgaGVyZSBhcmUgbXkgY29uY2x1c2lvbnMuXG5cbkZpcnN0LCBJIGV4YW1pbmVkIHRoZSBgc21jX2xpbmtfc2hhcmVkX3YyX3J4YnVmYCBjYXNlLiBJZiB0cnVlLCB0aGUgc3BpbGxvdmVyIGlzIHdyaXR0ZW4gZGlyZWN0bHkgaW50byBgbGdyLVx1MDAzZXdyX3J4X2J1Zl92MiArIFNNQ19XUl9UWF9TSVpFYCwgYW5kIHdoZW4gZmFsc2UsIHRoZSBTR0UgYnVmZmVycyBhcmUgbGFyZ2UgZW5vdWdoLiBUaGUgY3J1Y2lhbCBwYXJ0IGhlcmUgaXMgdGhlIGBtZW1jcHkocWVudHJ5LVx1MDAzZWJvZHksIHNyYyArIFNNQ19XUl9UWF9TSVpFLCBib2R5X2xlbik7YC4gIEkgdmVyaWZpZWQgdGhhdCBgYm9keV9sZW5gICh0aGUgbnVtYmVyIG9mIHNwaWxsb3ZlciBieXRlcykgaXMgY2FwcGVkIGJ5IHRoZSBhY3R1YWwgbnVtYmVyIG9mIHJlY2VpdmVkIGJ5dGVzLCBwcmV2ZW50aW5nIHJlYWRzIGJleW9uZCB0aGUgdmFsaWQgYnVmZmVyLiBUaGUgY2FsY3VsYXRpb24gZW5zdXJlcyBubyByZWFkIHBhc3QgdGhlIGVuZCBvZiBkYXRhLlxuXG5OZXh0LCBJIHNjcnV0aW5pemVkIGBzbWNfbGxjX3NhdmVfYWRkX2xpbmtfcmtleXNgLiAgSGVyZSwgYHFlbnRyeS1cdTAwM2Vib2R5YCBjb250YWlucyB0aGUgc3BpbGxvdmVyIGRhdGEuIEkgY29uZmlybWVkIHRoYXQgdGhlIGNvZGUgZmlyc3QgY2hlY2tzIHRoYXQgYHFlbnRyeS1cdTAwM2Vib2R5X2xlbmAgaXMgc3VmZmljaWVudCwgdGhlbiBwcm9wZXJseSBsaW1pdHMgdGhlIGxvb3AgaXRlcmF0aW9uIGNvdW50IGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgcmtleXMgKmFuZCogdGhlIGF2YWlsYWJsZSBieXRlcyBpbiBgcWVudHJ5LVx1MDAzZWJvZHlgLiBUaGlzIGVuc3VyZXMgYGV4dC1cdTAwM2VydFtpXWAgZWxlbWVudHMgYXJlIHdpdGhpbiB0aGUgYm91bmRzIG9mIHRoZSByZWNlaXZlZCBkYXRhOyBubyBvdXQtb2YtYm91bmRzIHJlYWRzIG9jY3VyLlxuXG5UaGVuLCBJIGZvY3VzZWQgb24gYHNtY19sbGNfcm10X2RlbGV0ZV9ya2V5YC4gIFRoZSBrZXkgaGVyZSBpcyB0aGUgaGFuZGxpbmcgb2YgaW5saW5lIHJrZXlzIGFuZCBzcGlsbG92ZXIgcmtleXMuIFRoZSBjb2RlIHVzZXMgYFNNQ19MTENfREVMX1JLRVlfVjJfSU5MSU5FYCB0byBzdG9yZSBzb21lIHJrZXlzIGlubGluZS4gQ3J1Y2lhbGx5LCB0aGUgY2FsY3VsYXRpb24gb2YgYG1heGAgKHRoZSBsb29wIGNvdW50KSBpcyBib3VuZGVkIGJ5IGJvdGggaW5saW5lIHJrZXkgY291bnQgYW5kIHJlY2VpdmVkIGJ5dGUgY291bnQuIFRoZSBgbWVtY3B5YCBmcm9tIGBxZW50cnktXHUwMDNlYm9keWAgaXMgdGhlcmVmb3JlIGd1YXJhbnRlZWQgdG8gc3RheSB3aXRoaW4gdGhlIGJvdW5kcyBvZiB0aGUgcmVjZWl2ZWQgZGF0YS4gQW5kIHRoZSBya2V5IHZhbHVlcyBpbiBgbGxjdjItXHUwMDNlcmtleWAgYXJlIGluZGVlZCBpbml0aWFsaXplZCBmcm9tIHRoZSByZWNlaXZlZCBtZXNzYWdlIChgbGxjYCksIHdoaWNoIGlzIGNvbmZpcm1lZCB0byBoYXZlIHNpemUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGBzaXplb2YodW5pb24gc21jX2xsY19tc2cpYCBhbmQgaXMgY29waWVkIGZyb20gbmV0d29yayBkYXRhLlxuXG5GaW5hbGx5LCBJIGNoZWNrZWQgZm9yIHVuaW5pdGlhbGl6ZWQgbWVzc2FnZXMgc2VudCB0byB0aGUgbmV0d29yay4gQm90aCBgc21jX2xsY19hZGRfbGlua19sb2NhbGAgYW5kIGBzbWNfbGxjX3Nydl9kZWxldGVfbGlua19sb2NhbGAgaW5pdGlhbGl6ZSB0aGVpciBtZXNzYWdlcyB2aWEgYG1lbXNldGAuIEJlY2F1c2UgYHNpemVvZihhZGRfbGxjKWAgYW5kIGBzaXplb2YoZGVsX2xsYylgIG1hdGNoIGBzaXplb2YodW5pb24gc21jX2xsY19tc2cpYCwgSeKAmW0gY29uZmlkZW50IGFsbCBkYXRhIHNlbnQgdG8gdGhlIG5ldHdvcmsgd2lsbCBiZSBpbml0aWFsaXplZC4gQWx0aG91Z2gsIEkgd2lsbCBkb3VibGUgY2hlY2sgdGhlIHNpemVzIGZvciBhYnNvbHV0ZSBzdXJldHkuXG5cblRoZXJlZm9yZSwgYWZ0ZXIgdGhpcyBkZXRhaWxlZCBhbmFseXNpcywgSSdtIGZhaXJseSBjb25maWRlbnQgdGhhdCB0aGVzZSBjb2RlIHBhdGhzLCBhcyBjdXJyZW50bHkgd3JpdHRlbiwgYXJlIHNhZmUgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgxOTUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6MDA6MTguNjY1ODYyMTQyWiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjY3NzI0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaXplb2ZcXFxcKHVuaW9uIHNtY19sbGNfbXNnXFxcXClcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9zbWNfbGxjLmM9MjA4PXN0YXRpY19hc3NlcnQoU01DX0xMQ19ERUxfUktFWV9WMl9JTkxJTkUgPT1cXG5uZXQvc21jL3NtY19sbGMuYzoyMDk6XFx0ICAgICAgKHNpemVvZih1bmlvbiBzbWNfbGxjX21zZykgLVxcbm5ldC9zbWMvc21jX2xsYy5jLTIxMC1cXHQgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHNtY19sbGNfbXNnX2RlbGV0ZV9ya2V5X3YyLCBya2V5KSkgL1xcbi0tXFxubmV0L3NtYy9zbWNfbGxjLmM9NDIxPXN0YXRpYyBpbnQgc21jX2xsY19hZGRfcGVuZGluZ19zZW5kKHN0cnVjdCBzbWNfbGluayAqbGluayxcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTQzMS1cXHRCVUlMRF9CVUdfT05fTVNHKFxcbm5ldC9zbWMvc21jX2xsYy5jOjQzMjpcXHRcXHRzaXplb2YodW5pb24gc21jX2xsY19tc2cpIFxcdTAwM2UgU01DX1dSX0JVRl9TSVpFLFxcbm5ldC9zbWMvc21jX2xsYy5jLTQzMy1cXHRcXHRcXFwibXVzdCBpbmNyZWFzZSBTTUNfV1JfQlVGX1NJWkUgdG8gYXQgbGVhc3Qgc2l6ZW9mKHN0cnVjdCBzbWNfbGxjX21zZylcXFwiKTtcXG5uZXQvc21jL3NtY19sbGMuYy00MzQtXFx0QlVJTERfQlVHX09OX01TRyhcXG5uZXQvc21jL3NtY19sbGMuYzo0MzU6XFx0XFx0c2l6ZW9mKHVuaW9uIHNtY19sbGNfbXNnKSAhPSBTTUNfV1JfVFhfU0laRSxcXG5uZXQvc21jL3NtY19sbGMuYy00MzYtXFx0XFx0XFxcIm11c3QgYWRhcHQgU01DX1dSX1RYX1NJWkUgdG8gc2l6ZW9mKHN0cnVjdCBzbWNfbGxjX21zZyk7IGlmIG5vdCBhbGwgc21jX3dyIHVwcGVyIGxheWVyIHByb3RvY29scyB1c2UgdGhlIHNhbWUgbWVzc2FnZSBzaXplIGFueSBtb3JlLCBtdXN0IHN0YXJ0IHRvIHNldCBsaW5rLVxcdTAwM2V3cl90eF9zZ2VzW2ldLmxlbmcuLi5cXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jPTc4Nj1zdGF0aWMgaW50IHNtY19sbGNfc2VuZF9tZXNzYWdlKHN0cnVjdCBzbWNfbGluayAqbGluaywgdm9pZCAqbGxjYnVmKVxcbi0tXFxubmV0L3NtYy9zbWNfbGxjLmMtNzk2LVxcdFxcdGdvdG8gcHV0X291dDtcXG5uZXQvc21jL3NtY19sbGMuYzo3OTc6XFx0bWVtY3B5KHdyX2J1ZiwgbGxjYnVmLCBzaXplb2YodW5pb24gc21jX2xsY19tc2cpKTtcXG5uZXQvc21jL3NtY19sbGMuYy03OTgtXFx0cmMgPSBzbWNfd3JfdHhfc2VuZChsaW5rLCBwZW5kKTtcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jPTgwOD1zdGF0aWMgaW50IHNtY19sbGNfc2VuZF9tZXNzYWdlX3dhaXQoc3RydWN0IHNtY19saW5rICpsaW5rLCB2b2lkICpsbGNidWYpXFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYy04MTgtXFx0XFx0Z290byBwdXRfb3V0O1xcbm5ldC9zbWMvc21jX2xsYy5jOjgxOTpcXHRtZW1jcHkod3JfYnVmLCBsbGNidWYsIHNpemVvZih1bmlvbiBzbWNfbGxjX21zZykpO1xcbm5ldC9zbWMvc21jX2xsYy5jLTgyMC1cXHRyYyA9IHNtY193cl90eF9zZW5kX3dhaXQobGluaywgcGVuZCwgU01DX0xMQ19XQUlUX1RJTUUpO1xcbi0tXFxubmV0L3NtYy9zbWNfbGxjLmM9MTU3MT12b2lkIHNtY19sbGNfYWRkX2xpbmtfbG9jYWwoc3RydWN0IHNtY19saW5rICpsaW5rKVxcbi0tXFxubmV0L3NtYy9zbWNfbGxjLmMtMTU3OC1cXHRzbWNfbGxjX2VucXVldWUobGluaywgKHVuaW9uIHNtY19sbGNfbXNnICopXFx1MDAyNmFkZF9sbGMsXFxubmV0L3NtYy9zbWNfbGxjLmM6MTU3OTpcXHRcXHRcXHRzaXplb2YodW5pb24gc21jX2xsY19tc2cpKTtcXG5uZXQvc21jL3NtY19sbGMuYy0xNTgwLX1cXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jPTE2MDY9dm9pZCBzbWNfbGxjX3Nydl9kZWxldGVfbGlua19sb2NhbChzdHJ1Y3Qgc21jX2xpbmsgKmxpbmssIHU4IGRlbF9saW5rX2lkKVxcbi0tXFxubmV0L3NtYy9zbWNfbGxjLmMtMTYxNS1cXHRzbWNfbGxjX2VucXVldWUobGluaywgKHVuaW9uIHNtY19sbGNfbXNnICopXFx1MDAyNmRlbF9sbGMsXFxubmV0L3NtYy9zbWNfbGxjLmM6MTYxNjpcXHRcXHRcXHRzaXplb2YodW5pb24gc21jX2xsY19tc2cpKTtcXG5uZXQvc21jL3NtY19sbGMuYy0xNjE3LX1cXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jPTIxMTY9c3RhdGljIHZvaWQgc21jX2xsY19lbnF1ZXVlKHN0cnVjdCBzbWNfbGluayAqbGluaywgdW5pb24gc21jX2xsY19tc2cgKmxsYyxcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTIxMzgtXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnFlbnRyeS1cXHUwMDNlbGlzdCk7XFxubmV0L3NtYy9zbWNfbGxjLmM6MjEzOTpcXHRtZW1jcHkoXFx1MDAyNnFlbnRyeS1cXHUwMDNlbXNnLCBsbGMsIHNpemVvZih1bmlvbiBzbWNfbGxjX21zZykpO1xcbm5ldC9zbWMvc21jX2xsYy5jLTIxNDAtXFx0aWYgKGJvZHlfbGVuKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjAwOjE4LjcxMjU0MzcxMVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDQ3Mzk4MjAyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXR3b3JrIFN0YWNrIFZ1bG5lcmFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgYEJVSUxEX0JVR19PTl9NU0dgIGNoZWNrIGNvbmZpcm1zIGEgY3JpdGljYWwgc2l6aW5nIHJlbGF0aW9uc2hpcDogdGhlIHNpemUgb2YgYHVuaW9uIHNtY19sbGNfbXNnYCBpcyBwcmVjaXNlbHkgYFNNQ19XUl9UWF9TSVpFYCwgd2hpY2ggd2Uga25vdyB0byBiZSA0NCBieXRlcy4gIFdlIGNhbiBzYWZlbHkgYXNzdW1lIHRoYXQgYW55IHN0cnVjdCB3aXRoIHRoZSBzYW1lIHNpemUgKGxpa2UgYGFkZF9sbGNgKSB3aWxsIGJlIGZ1bGx5IGluaXRpYWxpemVkIHdoZW4gY29waWVkIGludG8gdGhlIHVuaW9uIHZpYSBgbWVtY3B5YCwgYXZvaWRpbmcgYW55IHBvdGVudGlhbCBmb3IgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuSG93ZXZlciwgdGhlIG1vcmUgZGV0YWlsZWQgYHN0cnVjdCBzbWNfbGxjX21zZ19kZWxldGVfcmtleV92Ml9pbmxpbmVgIGltbWVkaWF0ZWx5IHBvcHMgdXAuIFdlIGhhdmUgdG8gdmVyaWZ5IHRoaXMgZG9lc24ndCBleGNlZWQgdGhlIGJvdW5kcyBvZiBgdW5pb24gc21jX2xsY19tc2dgLiAgSXQncyBzaXplIGlzIGNhbGN1bGF0ZWQgYXMgNCAoaGVhZGVyKSArIDEgKyAxICsgMiArICg5ICogNCkgPSA0NCBieXRlcy4gIFNvLCB5ZXMsIGl0IGFsc28gZml0cyBuZWF0bHkgd2l0aGluIHRoZSB1bmlvbi4gR29vZC5cblxuTm93LCBsZXQncyBnZXQgdG8gdGhlIGFjdHVhbCBwcm9ibGVtIHRoaXMgcGF0Y2ggYWltcyB0byBmaXguIFRoZSBwYXRjaCBtZXNzYWdlIGl0c2VsZiBpcyBhIGxpdHRsZSB2YWd1ZSwgYnV0IHRoZSBjb2RlIGNoYW5nZXMgdGhlbXNlbHZlcyBnaXZlIGEgZ3JlYXQgZGVhbCBvZiBpbmZvcm1hdGlvbi4gIEJlZm9yZSB0aGlzIHBhdGNoLCBgc21jX2xsY19lbnF1ZXVlYCBoYWQgYSBwcm9ibGVtOiBJdCB3YXMgYWxsb2NhdGluZyBgcWVudHJ5YCB3aXRoIGBrbWFsbG9jX29iamAsIHdoaWNoIGluY2x1ZGVzIGEgYHVuaW9uIHNtY19sbGNfbXNnYC4gSWYgYSBtZXNzYWdlIHdhcyBsYXJnZXIgdGhhbiA0NCBieXRlcyAob3VyIGBTTUNfV1JfVFhfU0laRWApLCBhbnkgZXh0cmEgZGF0YSB3b3VsZCBiZSBsZWZ0IGluIGBsZ3ItXHUwMDNld3JfcnhfYnVmX3YyYC4gIFRoZSBwcm9ibGVtLCBmcm9tIHdoYXQgSSdtIGdhdGhlcmluZywgaXMgdGhhdCB0aGUgc3Vic2VxdWVudCBmdW5jdGlvbnMsIGBzbWNfbGxjX3NhdmVfYWRkX2xpbmtfcmtleXNgIGFuZCBgc21jX2xsY19ybXRfZGVsZXRlX3JrZXlgLCB3b3VsZCBkaXJlY3RseSByZWFkIGZyb20gdGhpcyBgbGdyLVx1MDAzZXdyX3J4X2J1Zl92MmAuXG5cblRoZSBwcm9ibGVtPyBgc21jX2xsY19lbnF1ZXVlYCBxdWV1ZXMgdGhlIG1lc3NhZ2UgZm9yIGRlZmVycmVkIHByb2Nlc3NpbmcgYnkgYSB3b3JrZXIgdGhyZWFkIChgc21jX2xsY19ldmVudF93b3JrYCkuIENyaXRpY2FsbHksIHdoaWxlIHRoZSBtZXNzYWdlIGlzIHF1ZXVlZCwgKmFub3RoZXIqIG1lc3NhZ2UgY291bGQgYXJyaXZlIGFuZCBvdmVyd3JpdGUgYGxnci1cdTAwM2V3cl9yeF9idWZfdjJgISBUaGUgYHdyX3J4X2J1Zl92MmAgYXBwZWFycyB0byBiZSBhIHNoYXJlZCBidWZmZXIgYXQgdGhlIGxpbmsgZ3JvdXAgbGV2ZWwsIHdoaWNoIG1lYW5zIGl0J3MgYSByYWNlIGNvbmRpdGlvbiB3YWl0aW5nIHRvIGhhcHBlbi4gSXQgaXMgc3VzY2VwdGlibGUgdG8gcG90ZW50aWFsIG92ZXJ3cml0ZXMsIHdoZXJlIHRoZSB3b3JrZXIgdGhyZWFkIGNvdWxkIHRoZW4gcHJvY2VzcyBpbmNvcnJlY3Qgb3IgcGFydGlhbGx5IGNvcnJlY3QgZGF0YSwgbGVhZGluZyB0byB2YXJpb3VzIGlzc3Vlcy4gIFRoZSBjaGFuZ2VzIGluIHRoaXMgcGF0Y2ggYXJlIGxpa2VseSBhaW1lZCBhdCBlbnN1cmluZyB0aGUgZGF0YSBpcyBwcm9wZXJseSBjb3BpZWQgYW5kIGlzb2xhdGVkLCBzbyB0aGF0IGEgZGVsYXllZCB3b3JrZXIgY2FuIHJlYWQgd2l0aG91dCBwb3RlbnRpYWwgZm9yIGNvcnJ1cHRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODc5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjAwOjI5LjE4NjUyODcxOFoiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0NTAyODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid3JfcnhfYnVmX3YyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX2NvcmUuaD0yODY9c3RydWN0IHNtY19saW5rX2dyb3VwIHtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuaC0zMjAtXFx0XFx0XFx0XFx0XFx0XFx0Lyogc21jIGxpbmsgKi9cXG5uZXQvc21jL3NtY19jb3JlLmg6MzIxOlxcdFxcdFxcdHN0cnVjdCBzbWNfd3JfdjJfYnVmXFx0KndyX3J4X2J1Zl92MjtcXG5uZXQvc21jL3NtY19jb3JlLmgtMzIyLVxcdFxcdFxcdFxcdFxcdFxcdC8qIFdSIHYyIHJlY3YgcGF5bG9hZCBidWZmZXIgKi9cXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jPTIxMTY9c3RhdGljIHZvaWQgc21jX2xsY19lbnF1ZXVlKHN0cnVjdCBzbWNfbGluayAqbGluaywgdW5pb24gc21jX2xsY19tc2cgKmxsYyxcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTIxNDEtXFx0XFx0dTggKnNyYyA9IHNtY19saW5rX3NoYXJlZF92Ml9yeGJ1ZihsaW5rKSA/XFxubmV0L3NtYy9zbWNfbGxjLmM6MjE0MjpcXHRcXHRcXHQodTggKilsZ3ItXFx1MDAzZXdyX3J4X2J1Zl92MiA6ICh1OCAqKWxsYztcXG5uZXQvc21jL3NtY19sbGMuYy0yMTQzLVxcbi0tXFxubmV0L3NtYy9zbWNfd3IuYz02ODI9dm9pZCBzbWNfd3JfZnJlZV9sZ3JfbWVtKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyKVxcbi0tXFxubmV0L3NtYy9zbWNfd3IuYy02ODYtXFxubmV0L3NtYy9zbWNfd3IuYzo2ODc6XFx0a2ZyZWUobGdyLVxcdTAwM2V3cl9yeF9idWZfdjIpO1xcbm5ldC9zbWMvc21jX3dyLmM6Njg4OlxcdGxnci1cXHUwMDNld3JfcnhfYnVmX3YyID0gTlVMTDtcXG5uZXQvc21jL3NtY193ci5jLTY4OS1cXHRrZnJlZShsZ3ItXFx1MDAzZXdyX3R4X2J1Zl92Mik7XFxuLS1cXG5uZXQvc21jL3NtY193ci5jPTcyNT1pbnQgc21jX3dyX2FsbG9jX2xncl9tZW0oc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IpXFxuLS1cXG5uZXQvc21jL3NtY193ci5jLTcyOS1cXG5uZXQvc21jL3NtY193ci5jOjczMDpcXHRsZ3ItXFx1MDAzZXdyX3J4X2J1Zl92MiA9IGt6YWxsb2MoU01DX1dSX0JVRl9WMl9TSVpFLCBHRlBfS0VSTkVMKTtcXG5uZXQvc21jL3NtY193ci5jOjczMTpcXHRpZiAoIWxnci1cXHUwMDNld3JfcnhfYnVmX3YyKVxcbm5ldC9zbWMvc21jX3dyLmMtNzMyLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi0tXFxubmV0L3NtYy9zbWNfd3IuYy03MzQtXFx0aWYgKCFsZ3ItXFx1MDAzZXdyX3R4X2J1Zl92Mikge1xcbm5ldC9zbWMvc21jX3dyLmM6NzM1OlxcdFxcdGtmcmVlKGxnci1cXHUwMDNld3JfcnhfYnVmX3YyKTtcXG5uZXQvc21jL3NtY193ci5jLTczNi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmM9ODU1PWludCBzbWNfd3JfY3JlYXRlX2xpbmsoc3RydWN0IHNtY19saW5rICpsbmspXFxuLS1cXG5uZXQvc21jL3NtY193ci5jLTg3Mi1cXHRcXHRcXHRsbmstXFx1MDAzZXdyX3J4X3YyX2RtYV9hZGRyID1cXG5uZXQvc21jL3NtY193ci5jOjg3MzpcXHRcXHRcXHRcXHRpYl9kbWFfbWFwX3NpbmdsZShpYmRldiwgbG5rLVxcdTAwM2VsZ3ItXFx1MDAzZXdyX3J4X2J1Zl92MixcXG5uZXQvc21jL3NtY193ci5jLTg3NC1cXHRcXHRcXHRcXHRcXHRcXHQgIFNNQ19XUl9CVUZfVjJfU0laRSwgRE1BX0ZST01fREVWSUNFKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6MDA6MjkuMjMzOTkyMjQ3WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0OTEzODgyMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBbmFseXNpcyBvZiB0aGUgYHdyX3J4X2J1Zl92MmAgQWxsb2NhdGlvbiBhbmQgVXNhZ2UqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgYHdyX3J4X2J1Zl92MmAgc3RydWN0dXJlLCBJIHNlZSB0aGF0IGl0J3MgYWxsb2NhdGVkIGFzIGEgc2luZ2xlIGJ1ZmZlciBwZXIgbGluayBncm91cCB1c2luZyBga3phbGxvY2AuIFRoYXQncyBzdGFuZGFyZCBwcmFjdGljZSwgYW5kIGl0J3MgbWFwcGVkIGZvciBETUEsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgZm9yIGVmZmljaWVudCBkYXRhIHRyYW5zZmVyLiBJdCdzIGFsbG9jYXRlZCBhdCB0aGUgc2l6ZSBgU01DX1dSX0JVRl9WMl9TSVpFYCwgd2hpY2ggaXMgdHlwaWNhbC5cblxuQnV0IGhvbGQgb27igKYgdGhlIHdheSBpdCdzIGJlaW5nIHVzZWQgaXMgYSBiaXQgY29uY2VybmluZy4gSXQgbG9va3MgbGlrZSB0aGUgZmlyc3QgNDQgYnl0ZXMgb2YgYW4gaW5jb21pbmcgbWVzc2FnZSBhcmUgd3JpdHRlbiB0byBgbG5rLVx1MDAzZXdyX3J4X3NnZXNbeF0uYWRkcmAsIGFuZCB0aGVuIHRoZSByZW1haW5kZXIgb2YgdGhlIGRhdGEgZ29lcyBpbnRvIHRoZSBidWZmZXIgYXQgYW4gb2Zmc2V0OiBgbG5rLVx1MDAzZXdyX3J4X3YyX2RtYV9hZGRyICsgU01DX1dSX1RYX1NJWkVgLlxuXG5UaGUgcHJvYmxlbSBpcyBpbW1lZGlhdGVseSBhcHBhcmVudC4gSWYgbXVsdGlwbGUgbWVzc2FnZXMgY29tZSBpbiBzaW11bHRhbmVvdXNseSDigJMgb3IgZXZlbiBzZXF1ZW50aWFsbHkgYmVmb3JlIHRoZSBwcmV2aW91cyBtZXNzYWdlIGlzIGZ1bGx5IHByb2Nlc3NlZCDigJMgdGhleSdyZSBnb2luZyB0byBvdmVyd3JpdGUgdGhlIHNhbWUgYHdyX3J4X2J1Zl92MmAhIFRoaXMgaXMgYmVjYXVzZSBgbG5rLVx1MDAzZXdyX3J4X3NnZXNbeCArIDFdLmFkZHJgIGlzIGFsd2F5cyBjYWxjdWxhdGVkIGFzIGBsbmstXHUwMDNld3JfcnhfdjJfZG1hX2FkZHIgKyBTTUNfV1JfVFhfU0laRWAuIFRoaXMgaXMgaGlnaGx5IHByb2JsZW1hdGljLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGRhdGEgY29ycnVwdGlvbiBhbmQgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgaXNzdWVzLlxuXG5JIG5lZWQgdG8gcmV2aXNpdCB0aGUgYHNtY193cl9pbml0X3NnZWAgZnVuY3Rpb247IHRoZXJlIGlzIGNsZWFybHkgc29tZSBhc3BlY3Qgb2YgdGhlIGRlc2lnbiB0aGF0IEkgYW0gbWlzc2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUwOTgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6MDA6MzQuNzI1Mzg0MDY0WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc21jL3NtY193ci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwOSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYwOTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbG5rLVxcdTAwM2V3cl9yeF9jbnQ7IGkrKykge1xcbiA2MTA6XFx0XFx0XFx0aW50IHggPSBpICogbG5rLVxcdTAwM2V3cl9yeF9zZ2VfY250O1xcbiA2MTE6XFx0XFxuIDYxMjpcXHRcXHRcXHRsbmstXFx1MDAzZXdyX3J4X3NnZXNbeF0uYWRkciA9XFxuIDYxMzpcXHRcXHRcXHRcXHRsbmstXFx1MDAzZXdyX3J4X2RtYV9hZGRyICsgaSAqIGxuay1cXHUwMDNld3JfcnhfYnVmbGVuO1xcbiA2MTQ6XFx0XFx0XFx0bG5rLVxcdTAwM2V3cl9yeF9zZ2VzW3hdLmxlbmd0aCA9IHNtY19saW5rX3NoYXJlZF92Ml9yeGJ1ZihsbmspID9cXG4gNjE1OlxcdFxcdFxcdFxcdFNNQ19XUl9UWF9TSVpFIDogbG5rLVxcdTAwM2V3cl9yeF9idWZsZW47XFxuIDYxNjpcXHRcXHRcXHRsbmstXFx1MDAzZXdyX3J4X3NnZXNbeF0ubGtleSA9IGxuay1cXHUwMDNlcm9jZV9wZC1cXHUwMDNlbG9jYWxfZG1hX2xrZXk7XFxuIDYxNzpcXHRcXHRcXHRpZiAobG5rLVxcdTAwM2VsZ3ItXFx1MDAzZXNtY192ZXJzaW9uID09IFNNQ19WMiBcXHUwMDI2XFx1MDAyNiBzbWNfbGlua19zaGFyZWRfdjJfcnhidWYobG5rKSkge1xcbiA2MTg6XFx0XFx0XFx0XFx0bG5rLVxcdTAwM2V3cl9yeF9zZ2VzW3ggKyAxXS5hZGRyID1cXG4gNjE5OlxcdFxcdFxcdFxcdFxcdFxcdGxuay1cXHUwMDNld3JfcnhfdjJfZG1hX2FkZHIgKyBTTUNfV1JfVFhfU0laRTtcXG4gNjIwOlxcdFxcdFxcdFxcdGxuay1cXHUwMDNld3Jfcnhfc2dlc1t4ICsgMV0ubGVuZ3RoID1cXG4gNjIxOlxcdFxcdFxcdFxcdFxcdFxcdFNNQ19XUl9CVUZfVjJfU0laRSAtIFNNQ19XUl9UWF9TSVpFO1xcbiA2MjI6XFx0XFx0XFx0XFx0bG5rLVxcdTAwM2V3cl9yeF9zZ2VzW3ggKyAxXS5sa2V5ID1cXG4gNjIzOlxcdFxcdFxcdFxcdFxcdFxcdGxuay1cXHUwMDNlcm9jZV9wZC1cXHUwMDNlbG9jYWxfZG1hX2xrZXk7XFxuIDYyNDpcXHRcXHRcXHR9XFxuIDYyNTpcXHRcXHRcXHRsbmstXFx1MDAzZXdyX3J4X2lic1tpXS5uZXh0ID0gTlVMTDtcXG4gNjI2OlxcdFxcdFxcdGxuay1cXHUwMDNld3JfcnhfaWJzW2ldLnNnX2xpc3QgPSBcXHUwMDI2bG5rLVxcdTAwM2V3cl9yeF9zZ2VzW3hdO1xcbiA2Mjc6XFx0XFx0XFx0bG5rLVxcdTAwM2V3cl9yeF9pYnNbaV0ubnVtX3NnZSA9IGxuay1cXHUwMDNld3Jfcnhfc2dlX2NudDtcXG4gNjI4OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6MDA6MzQuNzI1NDk5NjI0WiIsIlNlcSI6NTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNjMyODc2Mzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFJhY2UgQ29uZGl0aW9uIGFuZCBQb3RlbnRpYWwgRGF0YSBDb3JydXB0aW9uKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBpdCdzIHByZXR0eSBjbGVhciB3aGF0IHRoZSBwcm9ibGVtIGlzLiBGb3IgZXZlcnkgaW5kZXggYGlgLCB0aGUgYWRkcmVzcyBgbG5rLVx1MDAzZXdyX3J4X3NnZXNbeCArIDFdLmFkZHJgIGlzIGNvbnNpc3RlbnQg4oCTIGl0J3MgYWN0dWFsbHkgYGxuay1cdTAwM2V3cl9yeF92Ml9kbWFfYWRkciArIFNNQ19XUl9UWF9TSVpFYC4gVGhhdCBtZWFucyBhbGwgaW5jb21pbmcgbWVzc2FnZXMgc2hhcmUgdGhlIHNhbWUgc3BpbGxvdmVyIGJ1ZmZlci4gVGhhdCdzIG15IGZpcnN0IGNsdWUuXG5cblRoZSBgc21jX2xsY19yeF9oYW5kbGVyYCBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQgd2hlbiBhIG1lc3NhZ2UgYXJyaXZlcy4gSXQgZW5xdWV1ZXMgdGhlIG1lc3NhZ2UsIHdoaWNoIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIEJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgYHNtY19sbGNfZW5xdWV1ZWAgZnVuY3Rpb24gd291bGQgY29weSBvbmx5IHRoZSBmaXJzdCA0NCBieXRlcyAodGhlIGB1bmlvbiBzbWNfbGxjX21zZ2ApIG9mIHRoZSBtZXNzYWdlIGludG8gYSBuZXdseSBhbGxvY2F0ZWQgYHFlbnRyeWAuIFRoZSAqc3BpbGxvdmVyKiBieXRlcywgdGhvdWdoLCB0aG9zZSB3ZXJlIGxlZnQgcmVzaWRpbmcgaW4gYGxnci1cdTAwM2V3cl9yeF9idWZfdjJgLiBUaGUgd29ya2VyIHRocmVhZCBsYXRlciBwcm9jZXNzZWQgdGhpcyBgcWVudHJ5YCBhbmQgcmVhZCB0aGUgc3BpbGxvdmVyIGJ5dGVzIGZyb20gdGhhdCBzaGFyZWQgYGxnci1cdTAwM2V3cl9yeF9idWZfdjJgIGJ1ZmZlci5cblxuVGhlIHByb2JsZW0/IElmIGEgc2Vjb25kIG1lc3NhZ2UgY2FtZSBpbiBiZWZvcmUgdGhlIHdvcmtlciB0aHJlYWQgaGFkIGEgY2hhbmNlIHRvIHByb2Nlc3MgdGhlIGZpcnN0LCB0aGUgc3BpbGxvdmVyIGJ5dGVzIGluIGBsZ3ItXHUwMDNld3JfcnhfYnVmX3YyYCB3b3VsZCBnZXQgb3ZlcndyaXR0ZW4gYnkgdGhlIHNlY29uZCBtZXNzYWdlLiBQdXJlIHJhY2UgY29uZGl0aW9uLCBjbGFzc2ljIGRhdGEgY29ycnVwdGlvbi4gVGhlIHBhdGNoIGZpeGVzIHRoaXMgYnkgY29weWluZyB0aGUgKmVudGlyZSogbWVzc2FnZSwgaW5jbHVkaW5nIHRoZSBzcGlsbG92ZXIgZGF0YSwgaW50byB0aGUgYHFlbnRyeWAuIEVhY2ggYHFlbnRyeWAgbm93IGdldHMgaXRzIG93biBjb3B5LCBlbGltaW5hdGluZyB0aGUgc2hhcmVkIGJ1ZmZlciBhbmQgdGhlIHJhY2UuXG5cbk5vdywgbXkgbWluZCBzaGlmdHMgdG8gaG93IHRoaXMgcmFjZSBtaWdodCBoYXZlIG1hbmlmZXN0ZWQgaW4gd2F5cyBJIGNhbiBhbmFseXplIGZ1cnRoZXIuIFRoaXMgcmFjZSBkb2Vzbid0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggaXMgZ29vZC4gRXZlbiBpZiB0aGUgc2Vjb25kIG1lc3NhZ2UgaXMgc2hvcnRlciwgdGhlIHNwaWxsb3ZlciBidWZmZXIgaXMgaW5pdGlhbGl6ZWQgbWVtb3J5LCBqdXN0IHBvdGVudGlhbGx5IGNvcnJ1cHRlZC4gSG93ZXZlciwgaXQncyBwb3NzaWJsZSBmb3IgdGhlIHdvcmtlciB0aHJlYWQgdG8gcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGRhdGEuXG5cbkkgc3RhcnQgdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy4gQmVmb3JlIHRoZSBwYXRjaCwgaW4gYHNtY19sbGNfc2F2ZV9hZGRfbGlua19ya2V5c2AsIHRoZXJlJ3MgdGhpcyBjb2RlIHNuaXBwZXQ6XG5cbmBgYGNcblx0ZXh0ID0gKHN0cnVjdCBzbWNfbGxjX21zZ19hZGRfbGlua192Ml9leHQgKikobGxjX21zZyArXG5cdFx0XHRcdFx0XHQgICAgIFNNQ19XUl9UWF9TSVpFKTtcblx0bWF4ID0gbWluX3QodTgsIGV4dC1cdTAwM2VudW1fcmtleXMsIFNNQ19MTENfUktFWVNfUEVSX01TR19WMik7XG5cdGRvd25fd3JpdGUoXHUwMDI2bGdyLVx1MDAzZXJtYnNfbG9jayk7XG5cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG1heDsgaSsrKSB7XG5cdFx0c21jX3J0b2tlbl9zZXQobGdyLCBsaW5rLVx1MDAzZWxpbmtfaWR4LCBsaW5rX25ldy1cdTAwM2VsaW5rX2lkeCxcblx0XHRcdCAgICAgICBleHQtXHUwMDNlcnRbaV0ucm1iX2tleSxcblx0XHRcdCAgICAgICBleHQtXHUwMDNlcnRbaV0ucm1iX3ZhZGRyX25ldyxcblx0XHRcdCAgICAgICBleHQtXHUwMDNlcnRbaV0ucm1iX2tleV9uZXcpO1xuXHR9XG5gYGBcblxuVGhpcyBjb2RlICpkaWRuJ3QqIGNoZWNrIGlmIHRoZSByZWNlaXZlZCBtZXNzYWdlIHdhcyBsb25nIGVub3VnaCB0byBjb250YWluIHRoZSBudW1iZXIgb2YgcmtleXMgaW5kaWNhdGVkIGJ5IGBleHQtXHUwMDNlbnVtX3JrZXlzYCEgSXQganVzdCBibGluZGx5IHRydXN0cyB0aGF0IHZhbHVlLCB0aGVuIHJlYWRzIHVwIHRvIGBTTUNfTExDX1JLRVlTX1BFUl9NU0dfVjJgIHJrZXlzIGZyb20gdGhlIHNoYXJlZCBgbGxjX21zZyArIFNNQ19XUl9UWF9TSVpFYCBidWZmZXIuIElmIHRoZSBwZWVyIHNlbmRzIGEgc2hvcnQgbWVzc2FnZSBidXQgc3BlY2lmaWVzIGEgbGFyZ2UgYG51bV9ya2V5c2AsIHRoZSBjb2RlIHdpbGwgcmVhZCBwYXN0IHRoZSBhY3R1YWwgcmVjZWl2ZWQgZGF0YSBpbiBgbGdyLVx1MDAzZXdyX3J4X2J1Zl92MmAuIEJlY2F1c2UgYGxnci1cdTAwM2V3cl9yeF9idWZfdjJgIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCwgaXQncyB6ZXJvZWQgb24gYWxsb2NhdGlvbi4gU28gdGhlIG1lbW9yeSByZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgbWVzc2FnZSB3aWxsIGNvbnRhaW4gZWl0aGVyIHplcm9zIG9yIGRhdGEgZnJvbSBwcmV2aW91cyBtZXNzYWdlcy4gVGhpcyBpcyBzdGlsbCBub3QgKnVuaW5pdGlhbGl6ZWQqIG1lbW9yeSwgYnV0IGl0J3MgY2xlYXJseSBjb3JydXB0ZWQgYW5kIGNvdWxkIGxlYWQgdG8gaXNzdWVzLlxuXG5Ob3csIEkgbmVlZCB0byBjb25zaWRlciBhIGRpZmZlcmVudCBwYXRoLiBXaGF0IGhhcHBlbnMgaWYgYHNtY19saW5rX3NoYXJlZF92Ml9yeGJ1ZihsaW5rKWAgaXMgZmFsc2U/IFRoZW4sIGBsbGNfbXNnYCBwb2ludHMgdG8gYGxuay1cdTAwM2V3cl9yeF9zZ2VzW3hdLmFkZHJgLCB3aGljaCBpcyBhbGxvY2F0ZWQgaW4gYHNtY193cl9hbGxvY19saW5rX21lbWAuIEknbGwgbmVlZCB0byBjaGVjayBob3cgdGhhdCBidWZmZXIgaXMgYWxsb2NhdGVkIHRvIGNvbmZpcm0gdGhhdCB0aGUgc2FtZSBhc3N1bXB0aW9ucyBhYm91dCBpbml0aWFsaXphdGlvbiBhcHBseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYxNzMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzowMDo0Ny4zNTgzODAwMDJaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTAzNTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndyX3J4X2RtYV9hZGRyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX2NvcmUuaD05Nz1zdHJ1Y3Qgc21jX2xpbmsge1xcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5oLTEzNS1cXHRcXHRcXHRcXHRcXHRcXHQgKi9cXG5uZXQvc21jL3NtY19jb3JlLmg6MTM2OlxcdGRtYV9hZGRyX3RcXHRcXHR3cl9yeF9kbWFfYWRkcjtcXHQvKiBETUEgYWRkcmVzcyBvZiB3cl9yeF9idWZzICovXFxubmV0L3NtYy9zbWNfY29yZS5oLTEzNy1cXHRkbWFfYWRkcl90XFx0XFx0d3JfcnhfdjJfZG1hX2FkZHI7IC8qIERNQSBhZGRyZXNzIG9mIHYyIHJ4IGJ1ZiovXFxuLS1cXG5uZXQvc21jL3NtY193ci5jPTU1Nj1zdGF0aWMgdm9pZCBzbWNfd3JfaW5pdF9zZ2Uoc3RydWN0IHNtY19saW5rICpsbmspXFxuLS1cXG5uZXQvc21jL3NtY193ci5jLTYxMi1cXHRcXHRsbmstXFx1MDAzZXdyX3J4X3NnZXNbeF0uYWRkciA9XFxubmV0L3NtYy9zbWNfd3IuYzo2MTM6XFx0XFx0XFx0bG5rLVxcdTAwM2V3cl9yeF9kbWFfYWRkciArIGkgKiBsbmstXFx1MDAzZXdyX3J4X2J1ZmxlbjtcXG5uZXQvc21jL3NtY193ci5jLTYxNC1cXHRcXHRsbmstXFx1MDAzZXdyX3J4X3NnZXNbeF0ubGVuZ3RoID0gc21jX2xpbmtfc2hhcmVkX3YyX3J4YnVmKGxuaykgP1xcbi0tXFxubmV0L3NtYy9zbWNfd3IuYz02MzY9dm9pZCBzbWNfd3JfZnJlZV9saW5rKHN0cnVjdCBzbWNfbGluayAqbG5rKVxcbi0tXFxubmV0L3NtYy9zbWNfd3IuYy02NTUtXFxubmV0L3NtYy9zbWNfd3IuYzo2NTY6XFx0aWYgKGxuay1cXHUwMDNld3JfcnhfZG1hX2FkZHIpIHtcXG5uZXQvc21jL3NtY193ci5jOjY1NzpcXHRcXHRpYl9kbWFfdW5tYXBfc2luZ2xlKGliZGV2LCBsbmstXFx1MDAzZXdyX3J4X2RtYV9hZGRyLFxcbm5ldC9zbWMvc21jX3dyLmMtNjU4LVxcdFxcdFxcdFxcdCAgICBsbmstXFx1MDAzZXdyX3J4X2J1ZmxlbiAqIGxuay1cXHUwMDNld3JfcnhfY250LFxcbm5ldC9zbWMvc21jX3dyLmMtNjU5LVxcdFxcdFxcdFxcdCAgICBETUFfRlJPTV9ERVZJQ0UpO1xcbm5ldC9zbWMvc21jX3dyLmM6NjYwOlxcdFxcdGxuay1cXHUwMDNld3JfcnhfZG1hX2FkZHIgPSAwO1xcbm5ldC9zbWMvc21jX3dyLmMtNjYxLVxcdH1cXG4tLVxcbm5ldC9zbWMvc21jX3dyLmM9ODU1PWludCBzbWNfd3JfY3JlYXRlX2xpbmsoc3RydWN0IHNtY19saW5rICpsbmspXFxuLS1cXG5uZXQvc21jL3NtY193ci5jLTg2MS1cXHRsbmstXFx1MDAzZXdyX3J4X2lkID0gMDtcXG5uZXQvc21jL3NtY193ci5jOjg2MjpcXHRsbmstXFx1MDAzZXdyX3J4X2RtYV9hZGRyID0gaWJfZG1hX21hcF9zaW5nbGUoXFxubmV0L3NtYy9zbWNfd3IuYy04NjMtXFx0XFx0aWJkZXYsIGxuay1cXHUwMDNld3JfcnhfYnVmcyxcXHRsbmstXFx1MDAzZXdyX3J4X2J1ZmxlbiAqIGxuay1cXHUwMDNld3JfcnhfY250LFxcbm5ldC9zbWMvc21jX3dyLmMtODY0LVxcdFxcdERNQV9GUk9NX0RFVklDRSk7XFxubmV0L3NtYy9zbWNfd3IuYzo4NjU6XFx0aWYgKGliX2RtYV9tYXBwaW5nX2Vycm9yKGliZGV2LCBsbmstXFx1MDAzZXdyX3J4X2RtYV9hZGRyKSkge1xcbm5ldC9zbWMvc21jX3dyLmM6ODY2OlxcdFxcdGxuay1cXHUwMDNld3JfcnhfZG1hX2FkZHIgPSAwO1xcbm5ldC9zbWMvc21jX3dyLmMtODY3LVxcdFxcdHJjID0gLUVJTztcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmMtOTI2LVxcdH1cXG5uZXQvc21jL3NtY193ci5jOjkyNzpcXHRpYl9kbWFfdW5tYXBfc2luZ2xlKGliZGV2LCBsbmstXFx1MDAzZXdyX3J4X2RtYV9hZGRyLFxcbm5ldC9zbWMvc21jX3dyLmMtOTI4LVxcdFxcdFxcdCAgICBsbmstXFx1MDAzZXdyX3J4X2J1ZmxlbiAqIGxuay1cXHUwMDNld3JfcnhfY250LFxcbm5ldC9zbWMvc21jX3dyLmMtOTI5LVxcdFxcdFxcdCAgICBETUFfRlJPTV9ERVZJQ0UpO1xcbm5ldC9zbWMvc21jX3dyLmM6OTMwOlxcdGxuay1cXHUwMDNld3JfcnhfZG1hX2FkZHIgPSAwO1xcbm5ldC9zbWMvc21jX3dyLmMtOTMxLW91dDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6MDA6NDcuNDA1Mjk0NDlaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI3OTUzMjk1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYHdyX3J4X2J1ZnNgIEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBgbG5rLVx1MDAzZXdyX3J4X2J1ZnNgIGlzIG1hcHBlZC4gVGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gdHJhY2UgYmFjayBhbmQgZGV0ZXJtaW5lICp3aGVyZSogdGhpcyBgd3JfcnhfYnVmc2AgYnVmZmVyIGl0c2VsZiBpcyBhY3R1YWxseSBhbGxvY2F0ZWQuIEtub3dpbmcgdGhlIGFsbG9jYXRpb24gY29udGV4dCBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSwgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBvcmlnaW4gb2YgdGhpcyBwYXJ0aWN1bGFyIG1lbW9yeSBibG9jay4gTGV0J3Mgc2VlIGlmIHRoZSBjb2RlIHJlYWRpbHkgcmV2ZWFscyBpdHMgYWxsb2NhdGlvbiBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkwMTIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzowMDo1MC42ODQ4MzA4NzlaIiwiU2VxIjo1NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NjYzMTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndyX3J4X2J1ZnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9zbWNfY29yZS5oPTk3PXN0cnVjdCBzbWNfbGluayB7XFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmgtMTI3LVxcbm5ldC9zbWMvc21jX2NvcmUuaDoxMjg6XFx0dThcXHRcXHRcXHQqd3JfcnhfYnVmcztcXHQvKiBXUiByZWN2IHBheWxvYWQgYnVmZmVycyAqL1xcbm5ldC9zbWMvc21jX2NvcmUuaC0xMjktXFx0c3RydWN0IGliX3JlY3Zfd3JcXHQqd3JfcnhfaWJzO1xcdC8qIFdSIHJlY3YgbWV0YSBkYXRhICovXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmgtMTM1LVxcdFxcdFxcdFxcdFxcdFxcdCAqL1xcbm5ldC9zbWMvc21jX2NvcmUuaDoxMzY6XFx0ZG1hX2FkZHJfdFxcdFxcdHdyX3J4X2RtYV9hZGRyO1xcdC8qIERNQSBhZGRyZXNzIG9mIHdyX3J4X2J1ZnMgKi9cXG5uZXQvc21jL3NtY19jb3JlLmgtMTM3LVxcdGRtYV9hZGRyX3RcXHRcXHR3cl9yeF92Ml9kbWFfYWRkcjsgLyogRE1BIGFkZHJlc3Mgb2YgdjIgcnggYnVmKi9cXG4tLVxcbm5ldC9zbWMvc21jX3dyLmM9NDMwPXN0YXRpYyBpbmxpbmUgdm9pZCBzbWNfd3JfcnhfZGVtdWx0aXBsZXgoc3RydWN0IGliX3djICp3YylcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmMtNDQxLVxcdGluZGV4ID0gZG9fZGl2KHRlbXBfd3JfaWQsIGxpbmstXFx1MDAzZXdyX3J4X2NudCk7XFxubmV0L3NtYy9zbWNfd3IuYzo0NDI6XFx0d3JfcnggPSAoc3RydWN0IHNtY193cl9yeF9oZHIgKikobGluay1cXHUwMDNld3JfcnhfYnVmcyArIGluZGV4ICogbGluay1cXHUwMDNld3JfcnhfYnVmbGVuKTtcXG5uZXQvc21jL3NtY193ci5jLTQ0My1cXHRoYXNoX2Zvcl9lYWNoX3Bvc3NpYmxlKHNtY193cl9yeF9oYXNoLCBoYW5kbGVyLCBsaXN0LCB3cl9yeC1cXHUwMDNldHlwZSkge1xcbi0tXFxubmV0L3NtYy9zbWNfd3IuYz02OTM9dm9pZCBzbWNfd3JfZnJlZV9saW5rX21lbShzdHJ1Y3Qgc21jX2xpbmsgKmxuaylcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmMtNzIwLVxcdGxuay1cXHUwMDNld3JfdHhfYnVmcyA9IE5VTEw7XFxubmV0L3NtYy9zbWNfd3IuYzo3MjE6XFx0a2ZyZWUobG5rLVxcdTAwM2V3cl9yeF9idWZzKTtcXG5uZXQvc21jL3NtY193ci5jOjcyMjpcXHRsbmstXFx1MDAzZXdyX3J4X2J1ZnMgPSBOVUxMO1xcbm5ldC9zbWMvc21jX3dyLmMtNzIzLX1cXG4tLVxcbm5ldC9zbWMvc21jX3dyLmM9NzQxPWludCBzbWNfd3JfYWxsb2NfbGlua19tZW0oc3RydWN0IHNtY19saW5rICpsaW5rKVxcbi0tXFxubmV0L3NtYy9zbWNfd3IuYy03NDctXFx0XFx0Z290byBub19tZW07XFxubmV0L3NtYy9zbWNfd3IuYzo3NDg6XFx0bGluay1cXHUwMDNld3JfcnhfYnVmcyA9IGtjYWxsb2MobGluay1cXHUwMDNlbWF4X3JlY3Zfd3IsIGxpbmstXFx1MDAzZXdyX3J4X2J1ZmxlbixcXG5uZXQvc21jL3NtY193ci5jLTc0OS1cXHRcXHRcXHRcXHQgICBHRlBfS0VSTkVMKTtcXG5uZXQvc21jL3NtY193ci5jOjc1MDpcXHRpZiAoIWxpbmstXFx1MDAzZXdyX3J4X2J1ZnMpXFxubmV0L3NtYy9zbWNfd3IuYy03NTEtXFx0XFx0Z290byBub19tZW1fd3JfdHhfYnVmcztcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmMtNzUzLVxcdGlmICghbGluay1cXHUwMDNld3JfdHhfaWJzKVxcbm5ldC9zbWMvc21jX3dyLmM6NzU0OlxcdFxcdGdvdG8gbm9fbWVtX3dyX3J4X2J1ZnM7XFxubmV0L3NtYy9zbWNfd3IuYy03NTUtXFx0bGluay1cXHUwMDNld3JfcnhfaWJzID0ga3phbGxvY19vYmpzKGxpbmstXFx1MDAzZXdyX3J4X2lic1swXSwgbGluay1cXHUwMDNlbWF4X3JlY3Zfd3IpO1xcbi0tXFxubmV0L3NtYy9zbWNfd3IuYy04MjAtXFx0a2ZyZWUobGluay1cXHUwMDNld3JfdHhfaWJzKTtcXG5uZXQvc21jL3NtY193ci5jOjgyMTpub19tZW1fd3JfcnhfYnVmczpcXG5uZXQvc21jL3NtY193ci5jOjgyMjpcXHRrZnJlZShsaW5rLVxcdTAwM2V3cl9yeF9idWZzKTtcXG5uZXQvc21jL3NtY193ci5jLTgyMy1ub19tZW1fd3JfdHhfYnVmczpcXG4tLVxcbm5ldC9zbWMvc21jX3dyLmM9ODU1PWludCBzbWNfd3JfY3JlYXRlX2xpbmsoc3RydWN0IHNtY19saW5rICpsbmspXFxuLS1cXG5uZXQvc21jL3NtY193ci5jLTg2Mi1cXHRsbmstXFx1MDAzZXdyX3J4X2RtYV9hZGRyID0gaWJfZG1hX21hcF9zaW5nbGUoXFxubmV0L3NtYy9zbWNfd3IuYzo4NjM6XFx0XFx0aWJkZXYsIGxuay1cXHUwMDNld3JfcnhfYnVmcyxcXHRsbmstXFx1MDAzZXdyX3J4X2J1ZmxlbiAqIGxuay1cXHUwMDNld3JfcnhfY250LFxcbm5ldC9zbWMvc21jX3dyLmMtODY0LVxcdFxcdERNQV9GUk9NX0RFVklDRSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjAwOjUwLjczMDQ5ODk2OFoiLCJTZXEiOjU1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzE2NTM5MjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIERhdGEgQ29ycnVwdGlvbiBCdWcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBsaW5rLVx1MDAzZXdyX3J4X2J1ZnNgIGFsbG9jYXRpb24uIEl0J3MgYWxsb2NhdGVkIHVzaW5nIGBrY2FsbG9jYCwgbWVhbmluZyBpdCdzIGluaXRpYWxpemVkIHRvIHplcm8uIFRoaXMgaXMgY3J1Y2lhbC4gSWYgd2UgZ2V0IGEgc2hvcnQgbWVzc2FnZSwgdGhlIHJlbWFpbmluZyBieXRlcyBpbiB0aGUgYnVmZmVyICphcmVuJ3QqIHVuaW5pdGlhbGl6ZWQgZ2FyYmFnZTsgdGhleSdyZSBlaXRoZXIgemVyb2VzIG9yIGxlZnRvdmVyIGRhdGEgZnJvbSBwcmV2aW91cyBtZXNzYWdlcy4gVGhpcyBjaGFuZ2VzIHRoZSB3aG9sZSBwaWN0dXJlLlxuXG5UaGVyZWZvcmUsIHRoZSBwcm9ibGVtIGlzbid0IGFib3V0IHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIHRoYXQncyBub3QgdGhlIGJ1Zy4gVGhlIHBhdGNoIG11c3QgYmUgYWRkcmVzc2luZyBkYXRhIGNvcnJ1cHRpb24gZHVlIHRvIGEgcmFjZS4gQSBzaGFyZWQgcmVjZWl2ZSBidWZmZXIgaXMgYmVpbmcgb3ZlcndyaXR0ZW4gYnkgYSBuZXcgbWVzc2FnZSBiZWZvcmUgdGhlIG9sZCBvbmUgaXMgZnVsbHkgcHJvY2Vzc2VkLiBJdCdzIGEgY2xhc3NpYyBsb2dpYyBidWcsIGEgcmFjZSBjb25kaXRpb24gd2hlcmUgdGhlIHdvcmtlciB0aHJlYWQgZW5kcyB1cCByZWFkaW5nIHRoZSBuZXcsIHBvdGVudGlhbGx5IGluY29tcGxldGUsIGRhdGEgaW5zdGVhZCBvZiB0aGUgZGF0YSBpdCB3YXMgZXhwZWN0aW5nLiBLQVNBTiBwcm9iYWJseSBpc24ndCBmbGFnZ2luZyB0aGlzIGJlY2F1c2UsIHRlY2huaWNhbGx5LCB0aGUgcmVhZHMgYXJlICp3aXRoaW4qIHRoZSBhbGxvY2F0ZWQgYnVmZmVyLiBUaGUgYnVmZmVyJ3Mgc2l6ZSwgYFNNQ19XUl9CVUZfVjJfU0laRWAsIGFuZCB0aGUgcmVhZCBsaW1pdCwgYFNNQ19MTENfUktFWVNfUEVSX01TR19WMmAsIGFyZSBib3RoIHdpdGhpbiBib3VuZHMuXG5cbldhaXQgYSBzZWNvbmQsIHRob3VnaC4gQXJlIHdlICphYnNvbHV0ZWx5KiBzdXJlIGFib3V0IHRoYXQ/IExldCdzIGRvdWJsZS1jaGVjay4gVGhlIGNvZGUgdXNlcyBgbWluX3RgIHRvIGRldGVybWluZSB0aGUgcmVhZCBsaW1pdCwgYW5kIEkgc2VlIGBTTUNfTExDX1JLRVlTX1BFUl9NU0dfVjJgIGluIHRoZXJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdmFsdWUgaXMgd2hhdCBJIHRoaW5rIGl0IGlzLCB0aGF0J3MgaG93IHdlIGZpbmQgb3V0IGlmIGl0IGlzIHBvdGVudGlhbGx5IHJlYWRpbmcgb3V0IG9mIGJvdW5kcy4gVGhlIGJlaGF2aW9yIG9mIHRoaXMgaXMgYmFzZWQgb24gdGhpcyBudW1iZXIsIHRpbWUgdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAzMjcsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMDM6MDA6NTcuMDQ3MDQxODYxWiIsIlNlcSI6NTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTMyMTM1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIFNNQ19MTENfUktFWVNfUEVSX01TR19WMlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL3NtY19sbGMuYz0xMzk9c3RydWN0IHNtY19ybWJfcnRva2VuIHtcXG4tLVxcbm5ldC9zbWMvc21jX2xsYy5jLTE1MC0jZGVmaW5lIFNNQ19MTENfUktFWVNfUEVSX01TR1xcdFxcdDNcXG5uZXQvc21jL3NtY19sbGMuYzoxNTE6I2RlZmluZSBTTUNfTExDX1JLRVlTX1BFUl9NU0dfVjJcXHQyNTVcXG5uZXQvc21jL3NtY19sbGMuYy0xNTItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjAwOjU3LjA5MjM3MDk5WiIsIlNlcSI6NTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyNDM2OTQ4MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBCdWZmZXIgT3ZlcmZsb3dzIGluIFNNQyBMaW5rIEFkZGl0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBzbWNfbGxjX3NhdmVfYWRkX2xpbmtfcmtleXNgIGZ1bmN0aW9uIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LiBJZiBgU01DX0xMQ19SS0VZU19QRVJfTVNHX1YyYCBpcyBzZXQgdG8gMjU1LCB0aGVuIGBtYXhgIGNhbiBhbHNvIGJlIDI1NSB3aXRoaW4gdGhlIGxvb3AuIFRoZSBjb2RlIGl0ZXJhdGVzIHRocm91Z2ggdGhlIGBleHQtXHUwMDNlcnRgIGFycmF5LCByZWFkaW5nIGBtYXhgIG51bWJlciBvZiBlbGVtZW50cy4gRWFjaCBvZiB0aG9zZSBlbGVtZW50cyBpcyBhIGBzdHJ1Y3Qgc21jX2xsY19tc2dfYWRkX2xpbmtfY29udF9ydGAuXG5cbk5vdywgZWFjaCBvZiB0aGVzZSBgcnRgIGVsZW1lbnRzIGlzIDE2IGJ5dGVzOiB0d28gMzItYml0IGtleXMgYW5kIGEgNjQtYml0IHZpcnR1YWwgYWRkcmVzcy4gSWYgYG1heGAgaXMgMjU1LCB0aGF0IG1lYW5zIHRoZSBjb2RlIGlzIGdvaW5nIHRvIHJlYWQgMjU1ICogMTYgPSA0MDgwIGJ5dGVzLiBIb3dldmVyLCB3aGVuIHdlIGFkZCB0aGUgb2Zmc2V0IHRvIHRoZSBzdHJ1Y3QsIHRoZSBhY3R1YWwgc3RhcnRpbmcgcG9zaXRpb24gb2YgdGhlIGFycmF5IGlzIGF0IDE2LCByZXN1bHRpbmcgaW4gYSByZWFkIG9mIDQwOTYgYnl0ZXMgZnJvbSB0aGUgYGV4dGAgc3RydWN0dXJlLlxuXG5Ob3csIHdoZXJlIGRvZXMgYGV4dGAgbGl2ZT8gV2VsbCwgaXQncyBjYWxjdWxhdGVkIGFzIGBsbGNfbXNnICsgU01DX1dSX1RYX1NJWkVgLiBUaGUgdmFsdWUgb2YgYGxsY19tc2dgIGlzIGVmZmVjdGl2ZWx5IGBsZ3ItXHUwMDNld3JfcnhfYnVmX3YyICsgU01DX1dSX1RYX1NJWkVgLiBgbGdyLVx1MDAzZXdyX3J4X2J1Zl92MmAgaXMgYWxsb2NhdGVkIHdpdGggYFNNQ19XUl9CVUZfVjJfU0laRWAuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgU01DX1dSX0JVRl9WMl9TSVpFYCBpcyBsYXJnZSBlbm91Z2ggdG8gY29udGFpbiB0aGUgYnVmZmVyIGFsbG9jYXRlZCBmb3IgdGhlIGBydGAgYXJyYXkgd2l0aGluIGBleHRgIGFuZCBgU01DX1dSX1RYX1NJWkVgIHdpbGwgbm90IGNhdXNlIGFuIG92ZXJmbG93LiBJZiBub3QsIHRoaXMgbG9vcCBjb3VsZCBwb3RlbnRpYWxseSByZWFkIGJleW9uZCB0aGUgYWxsb2NhdGVkIGJ1ZmZlciwgb3BlbmluZyB0aGUgZG9vciB0byBhIGJ1ZmZlciBvdmVyZmxvdy4gTmVlZCB0byBjaGVjayB3aGF0IGBTTUNfV1JfQlVGX1YyX1NJWkVgIGFjdHVhbGx5IHJlc29sdmVzIHRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTE1MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQwMzowMTowNC4zMzYwNjkzMjhaIiwiU2VxIjo1OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3Njk5NzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNkZWZpbmUgU01DX1dSX0JVRl9WMl9TSVpFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX2NvcmUuaD01MT1lbnVtIHNtY19saW5rX3N0YXRlIHtcXHRcXHRcXHQvKiBwb3NzaWJsZSBzdGF0ZXMgb2YgYSBsaW5rICovXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmgtNTgtI2RlZmluZSBTTUNfV1JfQlVGX1NJWkVcXHRcXHQ0OFxcdC8qIHNpemUgb2Ygd29yayByZXF1ZXN0IGJ1ZmZlciAqL1xcbm5ldC9zbWMvc21jX2NvcmUuaDo1OTojZGVmaW5lIFNNQ19XUl9CVUZfVjJfU0laRVxcdDgxOTJcXHQvKiBzaXplIG9mIHYyIHdvcmsgcmVxdWVzdCBidWZmZXIgKi9cXG5uZXQvc21jL3NtY19jb3JlLmgtNjAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjAxOjA0LjM4Mzc3NDI0N1oiLCJTZXEiOjU5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTI0NDg0MzcwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgU01DLVJ2MiBMTEMgUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IElzc3VlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCwgd2hpbGUgYWRkcmVzc2luZyBhIGNyaXRpY2FsIHJhY2UgY29uZGl0aW9uLCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGF2ZW51ZXMgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzIHRoYXQgd291bGQgd2FycmFudCBLTVNBTiBzY3J1dGlueS4gSGVyZSdzIG15IHJlYXNvbmluZywgcGllY2UgYnkgcGllY2U6XG5cbkZpcnN0LCBgU01DX1dSX0JVRl9WMl9TSVpFYCBpcyA4MTkyIGJ5dGVzLCBhIGZhY3QuIEFuZCBzaW5jZSA0MDk2IGJ5dGVzIGlzIG11Y2ggbGVzcyB0aGFuIHRoYXQsIGFueSBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkIHdpdGhpbiB0aGF0IGNvbnRleHQgd291bGQgYXQgd29yc3QgcmVhZCBmcm9tIHplcm9lZCBtZW1vcnkuIFByZXZpb3VzbHkgdGhlIGNvZGUgcmVsaWVkIG9uIHJlYWRpbmcgdGhlIHNoYXJlZCBETUEgYnVmZmVyLiBJdCdzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYC4gU28sIGlmIGEgcGVlciBzZW50IGEgc2hvcnQgbWVzc2FnZSB3aXRoIGxhcmdlIGBudW1fcmtleXNgLCB0aGUgZXh0cmEgc3BhY2UgcmVhZCB3b3VsZCBiZSB6ZXJvZWQgZGF0YS4gSSdtIHNhdGlzZmllZCB0aGF0IHRoaXMgaXNuJ3QgYSB2dWxuZXJhYmlsaXR5LiBUaGUgaW5pdGlhbCByZWFkcyBhcmUgcmVhZGluZyB6ZXJvcyBub3QgcmFuZG9tIHZhbHVlcy4gYHNtY19ydG9rZW5fc2V0YCB3b3VsZCBjb3JyZWN0bHkgc2V0IHRoZSBydG9rZW4gdG8gMCBhbmQgdGhlIGNvZGUgd291bGQgcnVuIHdpdGhvdXQgYW4gZXJyb3IuXG5cblRoZSBwYXRjaCBpbnRyb2R1Y2VzIGJvdW5kcyBjaGVja3MgdG8gcmVzdHJpY3QgcmVhZHMgdG8gdGhlIGFjdHVhbCBsZW5ndGggb2YgdGhlIHJlY2VpdmVkIGRhdGEuIFRoZSBjb2RlIG5vdyB1c2VzIGBtaW5fdGAgdG8gbGltaXQgcmVhZHMgdG8gdGhlIHJlY2VpdmVkIG1lc3NhZ2Ugc2l6ZS4gVGhpcyBpcyBhIHZlcnkgY2xlYXIgaW1wcm92ZW1lbnQsIHByZXZlbnRpbmcgcmVhZHMgcGFzdCB0aGUgYm91bmRhcmllcyBvZiB0aGUgcmVjZWl2ZWQgZGF0YSwgbm90IHRoZSBhbGxvY2F0ZWQgYnVmZmVyLiBUaGlzIGVuc3VyZXMgdGhhdCBldmVuIGlmIGEgbWFsaWNpb3VzIHBlZXIgc2VuZHMgYSB0cnVuY2F0ZWQgbWVzc2FnZSB3aXRoIGEgbGFyZ2UgYG51bV9ya2V5c2AgdmFsdWUsIHRoZSBjb2RlIHdvbid0IGF0dGVtcHQgdG8gcmVhZCBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlY2F1c2UgYWxsIG1lbW9yeSB1cCB0byB0aGUgZW5kIG9mIHRoZSBidWZmZXIgaXMgY29uc2lkZXJlZCBpbml0aWFsaXplZC5cblxuU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggZW5zdXJlcyB0aGF0IHRoZSByZWFkIGRvZXNuJ3QgZ28gYmV5b25kIHRoZSByZWNlaXZlZCBtZXNzYWdlIGxlbmd0aCwgd2hpY2ggaXMgZ29vZC4gS01TQU4ncyBjb25jZXJucyBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBkb24ndCBhcHBseSBoZXJlLiBFdmVuIGlmIHRoZSBuZXR3b3JrIGRldmljZSB3cm90ZSB0byB0aGUgYnVmZmVyIHZpYSBETUEsIHRoZSBtZW1vcnkgaXMgY29uc2lkZXJlZCBpbml0aWFsaXplZC4gS01TQU4ncyBnb2luZyB0byBiZSBoYXBweSBiZWNhdXNlIG9mIGBremFsbG9jYC5cblxuTmV4dCwgSSBleGFtaW5lZCBgc21jX2xsY19ybXRfZGVsZXRlX3JrZXlgLiBJdCB1c2VzIHRoZSBzYW1lIGJvdW5kcyBjaGVjayBhcHByb2FjaC4gVGhlIHNhbWUgcmVhc29uaW5nIGFwcGxpZXMgaGVyZSBhcyB3ZWxsLiBUaGUgY2hlY2tzIHByZXZlbnQgcmVhZGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlICpyZWNlaXZlZCogZGF0YS5cblxuVGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoYXQgdGhlc2Ugc3RydWN0dXJlcyBhcmVuJ3Qgc2VudCB0byB1c2VyIHNwYWNlLiBJdCBpcyBrZXJuZWwtdG8ta2VybmVsIGNvbW11bmljYXRpb24gb3ZlciBSb0NFL0lCLiBUaGUgbWVzc2FnZXMgYXJlIHNlbnQgdG8gdGhlIHBlZXIga2VybmVsLCBub3QgdXNlciBzcGFjZS4gS01TQU4ncyBnb2luZyB0byBiZSB0cmlnZ2VyZWQgb24gbGVha3MgdG8gdXNlciBzcGFjZS4gS01TQU4gd291bGQgZGV0ZWN0IGEgcmVtb3RlIGluZm8tbGVhayBpZiB0aGUgYnVmZmVyIHdhcyB1bmluaXRpYWxpemVkLiBUaGVzZSBidWZmZXJzIGFyZSB6ZXJvZWQgYmVmb3JlIGJlaW5nIHNlbnQuIEFuZCB0aGUgcGF0Y2ggZG9lc24ndCBjaGFuZ2UgdGhhdC5cblxuVGhlIHBhdGNoIGNoYW5nZXMgYHNtY19sbGNfZW5xdWV1ZWAgdG8gYWxsb2NhdGUgYHFlbnRyeWAgd2l0aCBga21hbGxvY19mbGV4YC4gV2hpbGUgYGttYWxsb2NfZmxleGAgZG9lc24ndCB6ZXJvIHRoZSBtZW1vcnksIHRoZSBwYXRjaCBleHBsaWNpdGx5IGluaXRpYWxpemVzIGFsbCBmaWVsZHMuIEFuZCBJIGNoZWNrZWQgdGhlIGBzdHJ1Y3Qgc21jX2xsY19xZW50cnlgIHBhZGRpbmcuIFRoZXJlIGFyZSA2IGJ5dGVzIG9mIHBhZGRpbmcuIFRoZSBgcWVudHJ5YCBpcyB1c2VkIGludGVybmFsbHkgYnkgdGhlIHdvcmtlciB0aHJlYWQgYW5kIG5ldmVyIGV4cG9zZWQgdG8gdXNlcnNwYWNlLiBUaG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgYnl0ZXMgYXJlIG5vdCBsZWFrZWQgYmVjYXVzZSB0aGUgY29kZSBpcyBpbnRlcm5hbC5cblxuQWZ0ZXIgY2FyZWZ1bGx5IGNoZWNraW5nIGFsbCB1c2VzLCB0aGUgYHFlbnRyeWAgc3RydWN0dXJlIGlzIHVzZWQgc3RyaWN0bHkgYXMgYW4gaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUgYW5kIHRoZSBjb250ZW50cyBhcmUgdXNlZCBvbmx5IHdpdGhpbiB0aGUga2VybmVsLiBgYWRkX2xsY2AgaXMgdXNlZCBpbiBgc21jX2xsY19zcnZfYWRkX2xpbmtgLiBJdCBzaW1wbHkgcmVhZHMgZmllbGRzIGZyb20gYHFlbnRyeS1cdTAwM2Vtc2dgLCB3aGljaCBhcmUgaW5pdGlhbGl6ZWQuIFRoZW4gaW4gYHNtY19sbGNfcHJvY2Vzc19jbGlfYWRkX2xpbmtgIHRoZSBib2R5IGlzIHJlYWQgdmlhIGBxZW50cnktXHUwMDNlYm9keWAuXG5cblRoZSBjYWxjdWxhdGlvbiBvZiBgc21jX2xsY19tYXhfYm9keV9sZW5gIGlzIGp1c3QgYSBjYXAgb24gdGhlIG1heGltdW0gYm9keSBsZW5ndGguIFRoaXMgcHJldmVudHMgb3Zlci1hbGxvY2F0aW9ucyB3aGVuIGEgdmVyeSBsYXJnZSBgYm9keV9sZW5gIGlzIHJlY2VpdmVkLiBJdCBoZWxwcyB3aXRoIHNhZmV0eS4gSXQncyBhIHNlbnNpYmxlIGNoZWNrLlxuXG5JbiBlc3NlbmNlLCB0aGlzIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gd2hlcmUgYSBzaGFyZWQgcmVjZWl2ZSBidWZmZXIgaXMgb3ZlcndyaXR0ZW4gYmVmb3JlIGl0J3MgcHJvY2Vzc2VkLCBhbmQgaW4gZG9pbmcgc28sIGl0IGludHJvZHVjZXMgYSBgcWVudHJ5YCBzdHJ1Y3R1cmUuIFRoZSBkYXRhIGluIGBxZW50cnlgIGlzIGNvcGllZCBmcm9tIHRoZSBzaGFyZWQgYnVmZmVyIGFuZCB0aGUgY29kZSBjb3JyZWN0bHkgdmFsaWRhdGVzIHRoZSBsZW5ndGggb2YgdGhlIHJlY2VpdmVkIG1lc3NhZ2UuIEl0IGZpeGVzIHRoZSByYWNlIGJ5IGNvcHlpbmcgdGhlIHJlbGV2YW50IGRhdGEgaW50byBhIGBxZW50cnlgIHN0cnVjdHVyZS4gVGhlIHBhdGNoIGFsc28gYWRkcyBib3VuZHMgY2hlY2tzIHRvIGVuc3VyZSB0aGF0IHRoZSBwYXJzaW5nIGRvZXNuJ3QgcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGRhdGEuIFRoZSBkYXRhIHBhc3QgdGhlIG1lc3NhZ2UgYm91bmRhcnksIGlmIHJlYWQsIGlzIGFscmVhZHkgemVyb2VkIChvciBvbGQgYW5kIGluaXRpYWxpemVkKS4gVGhlIG5ldyBpbnRlcm5hbCBzdHJ1Y3R1cmVzIGFyZSBhbGwgaW5pdGlhbGl6ZWQuIFRoZSBwYWRkaW5nIHdpdGhpbiB0aGUgYHFlbnRyeWAgaXMgbmV2ZXIgbGVha2VkIGFuZCB0aGUgc2hhcmVkIERNQSBidWZmZXIgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIFRoZXJlIGFyZSBubyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50LiBUaGUgd29ya2VyIHRocmVhZCB3aWxsIG9ubHkgcmVhZCBpbml0aWFsaXplZCBkYXRhLiBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5IGhlcmUuXG5cblRoZXJlZm9yZSwgdGhlIGFwcHJvcHJpYXRlIGFjdGlvbiBpcyBgTmVlZHNLTVNBTj1mYWxzZWAgd2l0aCB0aGUgYWJvdmUgcmVhc29uaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjI2OCwiT3V0cHV0VG9rZW5zIjozMDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDAzOjAxOjM1LjYyODYyMDk4NVoiLCJTZXEiOjYwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBTTUMtUnYyIExMQyBtZXNzYWdlIGhhbmRsaW5nIHdoZXJlIGEgc2hhcmVkIERNQSByZWNlaXZlIGJ1ZmZlciAoYHdyX3J4X2J1Zl92MmApIGNvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGEgbmV3IGluY29taW5nIG1lc3NhZ2UgYmVmb3JlIHRoZSB3b3JrZXIgdGhyZWFkIHByb2Nlc3NlZCB0aGUgcHJldmlvdXMgb25lLiBJdCByZXNvbHZlcyB0aGlzIGJ5IGNvcHlpbmcgdGhlIHNwaWxsb3ZlciBieXRlcyBvZiB0aGUgbWVzc2FnZSBpbnRvIGEgZmxleGlibGUgYXJyYXkgaW4gYHN0cnVjdCBzbWNfbGxjX3FlbnRyeWAgYXQgdGhlIHRpbWUgb2YgcmVjZXB0aW9uLiBJdCBhbHNvIGFkZHMgYm91bmRzIGNoZWNrcyB0byBlbnN1cmUgbWVzc2FnZSBwYXJzaW5nIGRvZXMgbm90IHJlYWQgcGFzdCB0aGUgYWN0dWFsIHJlY2VpdmVkIGxlbmd0aC5cXG5cXG5CZWZvcmUgdGhpcyBwYXRjaCwgcmVhZGluZyBwYXN0IHRoZSByZWNlaXZlZCBsZW5ndGggd291bGQgcmVhZCBmcm9tIHRoZSByZW1haW5kZXIgb2YgdGhlIHJlY2VpdmUgYnVmZmVyLiBTaW5jZSB0aGlzIGJ1ZmZlciBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AgKG9yIGBrY2FsbG9jYCksIHRoZSBtZW1vcnkgd2FzIHplcm8taW5pdGlhbGl6ZWQsIG1lYW5pbmcgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgd2FzIGFjY2Vzc2VkLiBcXG5cXG5UaGUgbmV3bHkgaW50cm9kdWNlZCBgc3RydWN0IHNtY19sbGNfcWVudHJ5YCBpcyBzdHJpY3RseSBhbiBpbnRlcm5hbCBrZXJuZWwgc3RydWN0dXJlIHVzZWQgZm9yIHF1ZXVpbmcgbWVzc2FnZXMgdG8gYSB3b3JrZXIgdGhyZWFkLiBJdCBpcyBuZXZlciBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBzZW50IG92ZXIgdGhlIG5ldHdvcmssIHNvIGFueSBzdHJ1Y3QgcGFkZGluZyBjYW5ub3QgY2F1c2UgYW4gaW5mby1sZWFrLiBGdXJ0aGVybW9yZSwgYWxsIGZpZWxkcyBhbmQgdGhlIGZsZXhpYmxlIGFycmF5IGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGR1cmluZyBhbGxvY2F0aW9uIGluIGBzbWNfbGxjX2VucXVldWVgLiBNZXNzYWdlcyBnZW5lcmF0ZWQgbG9jYWxseSBhbmQgc2VudCBvdmVyIHRoZSBuZXR3b3JrIGFyZSBmdWxseSB6ZXJvZWQgdXNpbmcgYG1lbXNldGAgYmVmb3JlIHRyYW5zbWlzc2lvbi5cXG5cXG5TaW5jZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlcyBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGlzIHBhdGNoLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIFNNQy1SdjIgTExDIG1lc3NhZ2UgaGFuZGxpbmcgd2hlcmUgYSBzaGFyZWQgRE1BIHJlY2VpdmUgYnVmZmVyIChgd3JfcnhfYnVmX3YyYCkgY291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgYSBuZXcgaW5jb21pbmcgbWVzc2FnZSBiZWZvcmUgdGhlIHdvcmtlciB0aHJlYWQgcHJvY2Vzc2VkIHRoZSBwcmV2aW91cyBvbmUuIEl0IHJlc29sdmVzIHRoaXMgYnkgY29weWluZyB0aGUgc3BpbGxvdmVyIGJ5dGVzIG9mIHRoZSBtZXNzYWdlIGludG8gYSBmbGV4aWJsZSBhcnJheSBpbiBgc3RydWN0IHNtY19sbGNfcWVudHJ5YCBhdCB0aGUgdGltZSBvZiByZWNlcHRpb24uIEl0IGFsc28gYWRkcyBib3VuZHMgY2hlY2tzIHRvIGVuc3VyZSBtZXNzYWdlIHBhcnNpbmcgZG9lcyBub3QgcmVhZCBwYXN0IHRoZSBhY3R1YWwgcmVjZWl2ZWQgbGVuZ3RoLlxcblxcbkJlZm9yZSB0aGlzIHBhdGNoLCByZWFkaW5nIHBhc3QgdGhlIHJlY2VpdmVkIGxlbmd0aCB3b3VsZCByZWFkIGZyb20gdGhlIHJlbWFpbmRlciBvZiB0aGUgcmVjZWl2ZSBidWZmZXIuIFNpbmNlIHRoaXMgYnVmZmVyIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCAob3IgYGtjYWxsb2NgKSwgdGhlIG1lbW9yeSB3YXMgemVyby1pbml0aWFsaXplZCwgbWVhbmluZyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB3YXMgYWNjZXNzZWQuIFxcblxcblRoZSBuZXdseSBpbnRyb2R1Y2VkIGBzdHJ1Y3Qgc21jX2xsY19xZW50cnlgIGlzIHN0cmljdGx5IGFuIGludGVybmFsIGtlcm5lbCBzdHJ1Y3R1cmUgdXNlZCBmb3IgcXVldWluZyBtZXNzYWdlcyB0byBhIHdvcmtlciB0aHJlYWQuIEl0IGlzIG5ldmVyIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yaywgc28gYW55IHN0cnVjdCBwYWRkaW5nIGNhbm5vdCBjYXVzZSBhbiBpbmZvLWxlYWsuIEZ1cnRoZXJtb3JlLCBhbGwgZmllbGRzIGFuZCB0aGUgZmxleGlibGUgYXJyYXkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgZHVyaW5nIGFsbG9jYXRpb24gaW4gYHNtY19sbGNfZW5xdWV1ZWAuIE1lc3NhZ2VzIGdlbmVyYXRlZCBsb2NhbGx5IGFuZCBzZW50IG92ZXIgdGhlIG5ldHdvcmsgYXJlIGZ1bGx5IHplcm9lZCB1c2luZyBgbWVtc2V0YCBiZWZvcmUgdHJhbnNtaXNzaW9uLlxcblxcblNpbmNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2VzIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgcGF0Y2gsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowbmktt[1] Phase: Succeeded StartedAt: 2026-08-19 03:01:48 +0000 UTC FinishedAt: 2026-08-19 03:01:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmktt[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-19 03:01:48 +0000 UTC FinishedAt: 2026-08-19 03:01:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmktt[2] Phase: Succeeded StartedAt: 2026-08-19 03:01:48 +0000 UTC FinishedAt: 2026-08-19 04:29:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmktt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"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":["smc_llc_cli_add_link","smc_llc_srv_add_link","smc_llc_add_link_local","smc_llc_srv_delete_link_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"8e513e93-1cee-48d0-8217-e5a656ff8207","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-19 03:01:48 +0000 UTC FinishedAt: 2026-08-19 04:29:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"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":["smc_llc_cli_add_link","smc_llc_srv_add_link","smc_llc_add_link_local","smc_llc_srv_delete_link_local"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"8e513e93-1cee-48d0-8217-e5a656ff8207","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-workflowbmktt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"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":["smc_llc_cli_add_link","smc_llc_srv_add_link","smc_llc_add_link_local","smc_llc_srv_delete_link_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"8e513e93-1cee-48d0-8217-e5a656ff8207","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-19 03:01:48 +0000 UTC FinishedAt: 2026-08-19 03:01:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmktt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"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":["smc_llc_cli_add_link","smc_llc_srv_add_link","smc_llc_add_link_local","smc_llc_srv_delete_link_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"8e513e93-1cee-48d0-8217-e5a656ff8207","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-19 03:01:48 +0000 UTC FinishedAt: 2026-08-19 03:01:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"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-workflowbmktt/series-workflowbmktt-convert-artifact-4137670192/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbmktt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"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":["smc_llc_cli_add_link","smc_llc_srv_add_link","smc_llc_add_link_local","smc_llc_srv_delete_link_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"8e513e93-1cee-48d0-8217-e5a656ff8207","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-19 03:01:58 +0000 UTC FinishedAt: 2026-08-19 03:18:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmktt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"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":["smc_llc_cli_add_link","smc_llc_srv_add_link","smc_llc_add_link_local","smc_llc_srv_delete_link_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"8e513e93-1cee-48d0-8217-e5a656ff8207","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-19 03:01:58 +0000 UTC FinishedAt: 2026-08-19 03:18:27 +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:*e8aa5514-7a47-43ea-983f-851d1a090741,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-workflowbmktt/series-workflowbmktt-convert-artifact-4137670192/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": "2ec48d28-a777-4f7d-bc7a-1cb31fc4b8f0", "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-workflowbmktt/series-workflowbmktt-build-action-2267005750/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbmktt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"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":["smc_llc_cli_add_link","smc_llc_srv_add_link","smc_llc_add_link_local","smc_llc_srv_delete_link_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"8e513e93-1cee-48d0-8217-e5a656ff8207","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-19 03:01:58 +0000 UTC FinishedAt: 2026-08-19 03:18:17 +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:*e8aa5514-7a47-43ea-983f-851d1a090741,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-workflowbmktt/series-workflowbmktt-convert-artifact-4137670192/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": "2ec48d28-a777-4f7d-bc7a-1cb31fc4b8f0", "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-workflowbmktt/series-workflowbmktt-build-action-2267005750/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbmktt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"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":["smc_llc_cli_add_link","smc_llc_srv_add_link","smc_llc_add_link_local","smc_llc_srv_delete_link_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"8e513e93-1cee-48d0-8217-e5a656ff8207","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-19 03:18:27 +0000 UTC FinishedAt: 2026-08-19 03:18:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmktt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"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":["smc_llc_cli_add_link","smc_llc_srv_add_link","smc_llc_add_link_local","smc_llc_srv_delete_link_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"8e513e93-1cee-48d0-8217-e5a656ff8207","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-19 03:18:27 +0000 UTC FinishedAt: 2026-08-19 03:18:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmktt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"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":["smc_llc_cli_add_link","smc_llc_srv_add_link","smc_llc_add_link_local","smc_llc_srv_delete_link_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"8e513e93-1cee-48d0-8217-e5a656ff8207","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-19 03:18:27 +0000 UTC FinishedAt: 2026-08-19 03:18:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmktt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"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":["smc_llc_cli_add_link","smc_llc_srv_add_link","smc_llc_add_link_local","smc_llc_srv_delete_link_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"8e513e93-1cee-48d0-8217-e5a656ff8207","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-19 03:18:27 +0000 UTC FinishedAt: 2026-08-19 03:18:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"8e513e93-1cee-48d0-8217-e5a656ff8207","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-workflowbmktt/series-workflowbmktt-convert-artifact-136694039/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbmktt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"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":["smc_llc_cli_add_link","smc_llc_srv_add_link","smc_llc_add_link_local","smc_llc_srv_delete_link_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"8e513e93-1cee-48d0-8217-e5a656ff8207","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-19 03:18:37 +0000 UTC FinishedAt: 2026-08-19 03:20:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmktt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"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":["smc_llc_cli_add_link","smc_llc_srv_add_link","smc_llc_add_link_local","smc_llc_srv_delete_link_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"8e513e93-1cee-48d0-8217-e5a656ff8207","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-19 03:18:37 +0000 UTC FinishedAt: 2026-08-19 03:20:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2ec48d28-a777-4f7d-bc7a-1cb31fc4b8f0,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-workflowbmktt/series-workflowbmktt-build-action-2267005750/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-workflowbmktt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"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":["smc_llc_cli_add_link","smc_llc_srv_add_link","smc_llc_add_link_local","smc_llc_srv_delete_link_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"8e513e93-1cee-48d0-8217-e5a656ff8207","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-19 03:20:17 +0000 UTC FinishedAt: 2026-08-19 03:20:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmktt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"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":["smc_llc_cli_add_link","smc_llc_srv_add_link","smc_llc_add_link_local","smc_llc_srv_delete_link_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"8e513e93-1cee-48d0-8217-e5a656ff8207","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-19 03:20:17 +0000 UTC FinishedAt: 2026-08-19 03:20:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmktt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"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":["smc_llc_cli_add_link","smc_llc_srv_add_link","smc_llc_add_link_local","smc_llc_srv_delete_link_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"8e513e93-1cee-48d0-8217-e5a656ff8207","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-19 03:20:17 +0000 UTC FinishedAt: 2026-08-19 03:36:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmktt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"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":["smc_llc_cli_add_link","smc_llc_srv_add_link","smc_llc_add_link_local","smc_llc_srv_delete_link_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"8e513e93-1cee-48d0-8217-e5a656ff8207","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-19 03:20:17 +0000 UTC FinishedAt: 2026-08-19 03:36:31 +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:*e8aa5514-7a47-43ea-983f-851d1a090741,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-workflowbmktt/series-workflowbmktt-convert-artifact-136694039/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": "d2e819a7-9469-41e0-a748-a9bdcc61be7b", "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-workflowbmktt/series-workflowbmktt-build-action-1477508955/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbmktt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"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":["smc_llc_cli_add_link","smc_llc_srv_add_link","smc_llc_add_link_local","smc_llc_srv_delete_link_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"8e513e93-1cee-48d0-8217-e5a656ff8207","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-19 03:20:17 +0000 UTC FinishedAt: 2026-08-19 03:36:21 +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:*e8aa5514-7a47-43ea-983f-851d1a090741,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-workflowbmktt/series-workflowbmktt-convert-artifact-136694039/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": "d2e819a7-9469-41e0-a748-a9bdcc61be7b", "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-workflowbmktt/series-workflowbmktt-build-action-1477508955/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbmktt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"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":["smc_llc_cli_add_link","smc_llc_srv_add_link","smc_llc_add_link_local","smc_llc_srv_delete_link_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"8e513e93-1cee-48d0-8217-e5a656ff8207","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-19 03:36:31 +0000 UTC FinishedAt: 2026-08-19 03:36:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmktt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"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":["smc_llc_cli_add_link","smc_llc_srv_add_link","smc_llc_add_link_local","smc_llc_srv_delete_link_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"8e513e93-1cee-48d0-8217-e5a656ff8207","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-19 03:36:31 +0000 UTC FinishedAt: 2026-08-19 03:36:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmktt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"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":["smc_llc_cli_add_link","smc_llc_srv_add_link","smc_llc_add_link_local","smc_llc_srv_delete_link_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"8e513e93-1cee-48d0-8217-e5a656ff8207","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-19 03:36:31 +0000 UTC FinishedAt: 2026-08-19 03:38:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmktt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"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":["smc_llc_cli_add_link","smc_llc_srv_add_link","smc_llc_add_link_local","smc_llc_srv_delete_link_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"8e513e93-1cee-48d0-8217-e5a656ff8207","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-19 03:36:31 +0000 UTC FinishedAt: 2026-08-19 03:38:18 +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:*d2e819a7-9469-41e0-a748-a9bdcc61be7b,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-workflowbmktt/series-workflowbmktt-build-action-1477508955/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-workflowbmktt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"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":["smc_llc_cli_add_link","smc_llc_srv_add_link","smc_llc_add_link_local","smc_llc_srv_delete_link_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"8e513e93-1cee-48d0-8217-e5a656ff8207","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-19 03:38:28 +0000 UTC FinishedAt: 2026-08-19 04:29:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmktt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"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":["smc_llc_cli_add_link","smc_llc_srv_add_link","smc_llc_add_link_local","smc_llc_srv_delete_link_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"8e513e93-1cee-48d0-8217-e5a656ff8207","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-19 03:38:28 +0000 UTC FinishedAt: 2026-08-19 04:29:08 +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":["smc_llc_cli_add_link","smc_llc_srv_add_link","smc_llc_add_link_local","smc_llc_srv_delete_link_local"],"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:*2ec48d28-a777-4f7d-bc7a-1cb31fc4b8f0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d2e819a7-9469-41e0-a748-a9bdcc61be7b,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-workflowbmktt/series-workflowbmktt-build-action-2267005750/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-workflowbmktt/series-workflowbmktt-build-action-1477508955/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowbmktt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"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":["smc_llc_cli_add_link","smc_llc_srv_add_link","smc_llc_add_link_local","smc_llc_srv_delete_link_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"8e513e93-1cee-48d0-8217-e5a656ff8207","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-19 03:38:28 +0000 UTC FinishedAt: 2026-08-19 03:38:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmktt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"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":["smc_llc_cli_add_link","smc_llc_srv_add_link","smc_llc_add_link_local","smc_llc_srv_delete_link_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"8e513e93-1cee-48d0-8217-e5a656ff8207","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-19 03:38:28 +0000 UTC FinishedAt: 2026-08-19 03:38:32 +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":["smc_llc_cli_add_link","smc_llc_srv_add_link","smc_llc_add_link_local","smc_llc_srv_delete_link_local"],"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-workflowbmktt/series-workflowbmktt-convert-artifact-2144618960/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbmktt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"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":["smc_llc_cli_add_link","smc_llc_srv_add_link","smc_llc_add_link_local","smc_llc_srv_delete_link_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"8e513e93-1cee-48d0-8217-e5a656ff8207","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-19 03:38:28 +0000 UTC FinishedAt: 2026-08-19 03:38:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmktt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"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":["smc_llc_cli_add_link","smc_llc_srv_add_link","smc_llc_add_link_local","smc_llc_srv_delete_link_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"8e513e93-1cee-48d0-8217-e5a656ff8207","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-19 03:38:28 +0000 UTC FinishedAt: 2026-08-19 03:38:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmktt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"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":["smc_llc_cli_add_link","smc_llc_srv_add_link","smc_llc_add_link_local","smc_llc_srv_delete_link_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"8e513e93-1cee-48d0-8217-e5a656ff8207","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-19 03:38:28 +0000 UTC FinishedAt: 2026-08-19 03:38:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmktt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"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":["smc_llc_cli_add_link","smc_llc_srv_add_link","smc_llc_add_link_local","smc_llc_srv_delete_link_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"8e513e93-1cee-48d0-8217-e5a656ff8207","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-19 03:38:38 +0000 UTC FinishedAt: 2026-08-19 04:29:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmktt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"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":["smc_llc_cli_add_link","smc_llc_srv_add_link","smc_llc_add_link_local","smc_llc_srv_delete_link_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c71bf113dfdf426bdaf106636f573ef87b6613a0","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC"],"series_id":"8e513e93-1cee-48d0-8217-e5a656ff8207","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-19 03:38:38 +0000 UTC FinishedAt: 2026-08-19 04:28:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2ec48d28-a777-4f7d-bc7a-1cb31fc4b8f0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d2e819a7-9469-41e0-a748-a9bdcc61be7b,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-workflowbmktt/series-workflowbmktt-build-action-2267005750/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-workflowbmktt/series-workflowbmktt-build-action-1477508955/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-workflowbmktt/series-workflowbmktt-convert-artifact-2144618960/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,}