Name: series-workflow7hgpq Phase: Succeeded StartedAt: 2026-09-14 08:41:57 +0000 UTC FinishedAt: 2026-09-14 09:09:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7hgpq[0] Phase: Succeeded StartedAt: 2026-09-14 08:41:57 +0000 UTC FinishedAt: 2026-09-14 08:49:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7hgpq[0].run-triage Phase: Succeeded StartedAt: 2026-09-14 08:41:57 +0000 UTC FinishedAt: 2026-09-14 08:49:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CHR_DEV_SG", "SCSI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CHR_DEV_SG", "SCSI" ], "series_id": "2569b3d3-fe9c-474e-a8ef-e51fb581c3a9" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "sg_build_indirect", "sg_build_reserve", "sg_start_req" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "df2908090cda368b01ff43709f51890076c56157", "base_tree": "axboe" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NIUl9ERVZfU0cmIzM0OywKICAgICYjMzQ7U0NTSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NnX2J1aWxkX2luZGlyZWN0JiMzNDssCiAgICAmIzM0O3NnX2J1aWxkX3Jlc2VydmUmIzM0OywKICAgICYjMzQ7c2dfc3RhcnRfcmVxJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBzaWduZWRuZXNzIGlzc3VlIGluIGRyaXZlcnMvc2NzaS9zZy5jIChzZ19idWlsZF9pbmRpcmVjdCkuIFNwZWNpZmljYWxseSwgY29tcGFyaW5nIHRoZSBzaWduZWQgaW50ICYjMzk7bnVtJiMzOTsgdG8gdW5zaWduZWQgbG9uZyAmIzM5O1BBR0VfU0laRSYjMzk7IHJlc3VsdGVkIGluIHNpZ25lZC10by11bnNpZ25lZCB0eXBlIHByb21vdGlvbiwgYWxsb3dpbmcgbmVnYXRpdmUgdmFsdWVzIG9mIHRoZSAmIzM5O3NjYXR0ZXJfZWxlbV9zeiYjMzk7IG1vZHVsZSBwYXJhbWV0ZXIgdG8gYnlwYXNzIHRoZSBtaW5pbXVtIGJvdW5kIGNoZWNrIGFuZCBsZWFkIHRvIGludmFsaWQgcGFnZSBhbGxvY2F0aW9uIG9yZGVycyBhbmQgdW5kZWZpbmVkIHNoaWZ0IGJlaGF2aW9yLiBUaGUgcGF0Y2ggY2FzdHMgUEFHRV9TSVpFIHRvIGludCBhbmQgc2V0cyBudW0gPSBQQUdFX1NJWkUgd2hlbiBudW0gXHUwMDNjIChpbnQpUEFHRV9TSVpFLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OlxuMS4gJiMzOTtudW0mIzM5OyBhbmQgJiMzOTtzY2F0dGVyX2VsZW1fc3omIzM5OyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgdmFsdWVzLlxuMi4gVGhlIHNjYXR0ZXItZ2F0aGVyIGJ1ZmZlciBhbGxvY2F0aW9ucyBpbiBzZ19idWlsZF9pbmRpcmVjdCB1c2Uga3phbGxvYyBmb3IgdGhlIHBvaW50ZXIgYXJyYXkgYW5kIF9fR0ZQX1pFUk8gZm9yIHRoZSB1bmRlcmx5aW5nIHBhZ2UgYWxsb2NhdGlvbnMuXG4zLiBObyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIHN0YWNrIHZhcmlhYmxlcywgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCBidWZmZXJzIGNvcGllZCB0byB1c2Vyc3BhY2UgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC5cbkFueSBwb3RlbnRpYWwgaXNzdWVzIGZyb20gdGhlIGJ1ZyAoc3VjaCBhcyBpbnZhbGlkIGFsbG9jYXRpb24gb3JkZXJzIG9yIHNoaWZ0cykgZmFsbCB1bmRlciBzdGFuZGFyZCBVQlNBTi9LQVNBTiBkZXRlY3Rpb24gcmF0aGVyIHRoYW4gS01TQU4gdW5pbml0aWFsaXplZCBtZW1vcnkgdHJhY2tpbmcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHNnX2J1aWxkX2luZGlyZWN0KCkgaW4gdGhlIFNDU0kgZ2VuZXJpYyAoc2cpIGRyaXZlciB0byBwcm9wZXJseSBjbGFtcCBzY2F0dGVyX2VsZW1fc3ogd2hlbiBpdCBpcyBzbWFsbGVyIHRoYW4gUEFHRV9TSVpFIG9yIG5lZ2F0aXZlIChwcmV2ZW50aW5nIHNpZ25lZCBpbnRlZ2VyIGNvbXBhcmlzb24gaXNzdWVzIGFuZCBpbnZhbGlkIHBhZ2Ugb3JkZXJzIGZvciBnZXRfb3JkZXIpLiBUaGUgc2cgZHJpdmVyIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2l0aCBlbXVsYXRlZCBTQ1NJIGRldmljZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0MTM1Mjk0ODlmNmNjZTQyNTBmMzc1OTg3MzZjNjlmZWJlZjMwYjg4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMDg6NDQ6MjMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NnLmMgYi9kcml2ZXJzL3Njc2kvc2cuY1xuaW5kZXggNTQwOGYwMDJlNmMwMS4uMzljOGU1MmZhNmZmNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvc2NzaS9zZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Njc2kvc2cuY1xuQEAgLTE4NzUsOSAmIzQzOzE4NzUsMTAgQEAgc2dfYnVpbGRfaW5kaXJlY3QoU2dfc2NhdHRlcl9ob2xkICogc2NocCwgU2dfZmQgKiBzZnAsIGludCBidWZmX3NpemUpXG4gXG4gXHRudW0gPSBzY2F0dGVyX2VsZW1fc3o7XG4gXHRpZiAodW5saWtlbHkobnVtICE9IHNjYXR0ZXJfZWxlbV9zel9wcmV2KSkge1xuLVx0XHRpZiAobnVtIFx1MDAzYyBQQUdFX1NJWkUpIHtcbiYjNDM7XHRcdGlmIChudW0gXHUwMDNjIChpbnQpUEFHRV9TSVpFKSB7XG4gXHRcdFx0c2NhdHRlcl9lbGVtX3N6ID0gUEFHRV9TSVpFO1xuIFx0XHRcdHNjYXR0ZXJfZWxlbV9zel9wcmV2ID0gUEFHRV9TSVpFO1xuJiM0MztcdFx0XHRudW0gPSBQQUdFX1NJWkU7XG4gXHRcdH0gZWxzZVxuIFx0XHRcdHNjYXR0ZXJfZWxlbV9zel9wcmV2ID0gbnVtO1xuIFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NIUl9ERVZfU0cmIzM0OywKICAgICYjMzQ7U0NTSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NnX2J1aWxkX2luZGlyZWN0JiMzNDssCiAgICAmIzM0O3NnX2J1aWxkX3Jlc2VydmUmIzM0OywKICAgICYjMzQ7c2dfc3RhcnRfcmVxJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHNnX2J1aWxkX2luZGlyZWN0KCkgaW4gdGhlIFNDU0kgZ2VuZXJpYyAoc2cpIGRyaXZlciB0byBwcm9wZXJseSBjbGFtcCBzY2F0dGVyX2VsZW1fc3ogd2hlbiBpdCBpcyBzbWFsbGVyIHRoYW4gUEFHRV9TSVpFIG9yIG5lZ2F0aXZlIChwcmV2ZW50aW5nIHNpZ25lZCBpbnRlZ2VyIGNvbXBhcmlzb24gaXNzdWVzIGFuZCBpbnZhbGlkIHBhZ2Ugb3JkZXJzIGZvciBnZXRfb3JkZXIpLiBUaGUgc2cgZHJpdmVyIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2l0aCBlbXVsYXRlZCBTQ1NJIGRldmljZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0MTM1Mjk0ODlmNmNjZTQyNTBmMzc1OTg3MzZjNjlmZWJlZjMwYjg4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgMTQgMDg6NDQ6MjMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2cuYyBiL2RyaXZlcnMvc2NzaS9zZy5jCmluZGV4IDU0MDhmMDAyZTZjMDEuLjM5YzhlNTJmYTZmZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvc2NzaS9zZy5jCkBAIC0xODc1LDkgJiM0MzsxODc1LDEwIEBAIHNnX2J1aWxkX2luZGlyZWN0KFNnX3NjYXR0ZXJfaG9sZCAqIHNjaHAsIFNnX2ZkICogc2ZwLCBpbnQgYnVmZl9zaXplKQogCiAJbnVtID0gc2NhdHRlcl9lbGVtX3N6OwogCWlmICh1bmxpa2VseShudW0gIT0gc2NhdHRlcl9lbGVtX3N6X3ByZXYpKSB7Ci0JCWlmIChudW0gJmx0OyBQQUdFX1NJWkUpIHsKJiM0MzsJCWlmIChudW0gJmx0OyAoaW50KVBBR0VfU0laRSkgewogCQkJc2NhdHRlcl9lbGVtX3N6ID0gUEFHRV9TSVpFOwogCQkJc2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBQQUdFX1NJWkU7CiYjNDM7CQkJbnVtID0gUEFHRV9TSVpFOwogCQl9IGVsc2UKIAkJCXNjYXR0ZXJfZWxlbV9zel9wcmV2ID0gbnVtOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkxMAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBTQ1NJIERyaXZlciBNb2RpZmljYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvbW1pdC4gVGhlIGRpZmYgaW1tZWRpYXRlbHkgZmxhZ3MgYGRyaXZlcnMvc2NzaS9zZy5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBhIHNlY3Rpb24gY29uY2VybmluZyBzY2F0dGVyLWdhdGhlciBsaXN0IGJ1aWxkaW5nLiBJIHNlZSBhIGNoYW5nZSB3aXRoaW4gdGhlIGBzZ19idWlsZF9pbmRpcmVjdGAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgc2NhdHRlcl9lbGVtX3N6YCBhbmQgYSByZWxhdGVkIHZhcmlhYmxlLCBgc2NhdHRlcl9lbGVtX3N6X3ByZXZgLiBUaGUgY29yZSBsb2dpYyBoZXJlIGFwcGVhcnMgdG8gYmUgYWRqdXN0aW5nIGBzY2F0dGVyX2VsZW1fc3pgIGlmIGl0cyBpbml0aWFsIHZhbHVlIGBudW1gIGlzIHNtYWxsZXIgdGhhbiBgUEFHRV9TSVpFYC4gVGhlIGFkZGl0aW9uIG9mIHRoZSBjb25kaXRpb25hbCBgKGludClQQUdFX1NJWkVgIGNhc3RzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eSBmaXgsIG9yIGF0IGxlYXN0IGEgc2FmZWd1YXJkIHRvIGVuc3VyZSB0aGUgY29tcGFyaXNvbiB3b3JrcyBhcyBpbnRlbmRlZCBhY3Jvc3MgZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMuIFRoZSBgbnVtID0gUEFHRV9TSVpFO2AgYXNzaWdubWVudCB3aXRoaW4gdGhlIGBpZmAgYmxvY2sgY29uZmlybXMgdGhhdCBpdCB3aWxsIGJlIHVwZGF0ZWQuIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIFNDU0kgbGF5ZXIsIEkmIzM5O20gYWxyZWFkeSBmb3JtdWxhdGluZyBzb21lIGh5cG90aGVzZXMgYWJvdXQgdGhlIG9yaWdpbmFsIGlzc3VlIGFuZCB0aGUgaW50ZW50IG9mIHRoaXMgZml4LiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgcG9zc2libHkgcmVsYXRlZCBjb21taXRzIHRvIGZ1bGx5IGdyYXNwIHRoZSBjb250ZXh0IGFuZCBwb3RlbnRpYWwgcmFtaWZpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvc2NzaS9zZy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODYwOlx0XG4xODYxOlx0XHRpZiAoYmxrX3NpemUgXHUwMDNjIDApXG4xODYyOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuMTg2MzpcdFx0aWYgKDAgPT0gYmxrX3NpemUpXG4xODY0Olx0XHRcdCYjNDM7JiM0MztibGtfc2l6ZTtcdC8qIGRvbiYjMzk7dCBrbm93IHdoeSAqL1xuMTg2NTpcdFx0Lyogcm91bmQgcmVxdWVzdCB1cCB0byBuZXh0IGhpZ2hlc3QgU0dfU0VDVE9SX1NaIGJ5dGUgYm91bmRhcnkgKi9cbjE4NjY6XHRcdGJsa19zaXplID0gQUxJR04oYmxrX3NpemUsIFNHX1NFQ1RPUl9TWik7XG4xODY3Olx0XHRTQ1NJX0xPR19USU1FT1VUKDQsIHNnX3ByaW50ayhLRVJOX0lORk8sIHNmcC1cdTAwM2VwYXJlbnRkcCxcbjE4Njg6XHRcdFx0XCYjMzQ7c2dfYnVpbGRfaW5kaXJlY3Q6IGJ1ZmZfc2l6ZT0lZCwgYmxrX3NpemU9JWRcXG5cJiMzNDssXG4xODY5Olx0XHRcdGJ1ZmZfc2l6ZSwgYmxrX3NpemUpKTtcbjE4NzA6XHRcbjE4NzE6XHRcdC8qIE4uQi4gcmV0X3N6IGNhcnJpZWQgaW50byB0aGlzIGJsb2NrIC4uLiAqL1xuMTg3MjpcdFx0bXhfc2NfZWxlbXMgPSBzZ19idWlsZF9zZ2F0KHNjaHAsIHNmcCwgc2dfdGFibGVzaXplKTtcbjE4NzM6XHRcdGlmIChteF9zY19lbGVtcyBcdTAwM2MgMClcbjE4NzQ6XHRcdFx0cmV0dXJuIG14X3NjX2VsZW1zO1x0LyogbW9zdCBsaWtlbHkgLUVOT01FTSAqL1xuMTg3NTpcdFxuMTg3NjpcdFx0bnVtID0gc2NhdHRlcl9lbGVtX3N6O1xuMTg3NzpcdFx0aWYgKHVubGlrZWx5KG51bSAhPSBzY2F0dGVyX2VsZW1fc3pfcHJldikpIHtcbjE4Nzg6XHRcdFx0aWYgKG51bSBcdTAwM2MgKGludClQQUdFX1NJWkUpIHtcbjE4Nzk6XHRcdFx0XHRzY2F0dGVyX2VsZW1fc3ogPSBQQUdFX1NJWkU7XG4xODgwOlx0XHRcdFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBQQUdFX1NJWkU7XG4xODgxOlx0XHRcdFx0bnVtID0gUEFHRV9TSVpFO1xuMTg4MjpcdFx0XHR9IGVsc2VcbjE4ODM6XHRcdFx0XHRzY2F0dGVyX2VsZW1fc3pfcHJldiA9IG51bTtcbjE4ODQ6XHRcdH1cbjE4ODU6XHRcbjE4ODY6XHRcdG9yZGVyID0gZ2V0X29yZGVyKG51bSk7XG4xODg3Olx0cmV0cnk6XG4xODg4Olx0XHRyZXRfc3ogPSAxIFx1MDAzY1x1MDAzYyAoUEFHRV9TSElGVCAmIzQzOyBvcmRlcik7XG4xODg5Olx0XG4xODkwOlx0XHRmb3IgKGsgPSAwLCByZW1fc3ogPSBibGtfc2l6ZTsgcmVtX3N6IFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBrIFx1MDAzYyBteF9zY19lbGVtcztcbjE4OTE6XHRcdCAgICAgayYjNDM7JiM0MzssIHJlbV9zeiAtPSByZXRfc3opIHtcbjE4OTI6XHRcbjE4OTM6XHRcdFx0bnVtID0gKHJlbV9zeiBcdTAwM2Ugc2NhdHRlcl9lbGVtX3N6X3ByZXYpID9cbjE4OTQ6XHRcdFx0XHRzY2F0dGVyX2VsZW1fc3pfcHJldiA6IHJlbV9zejtcbjE4OTU6XHRcbjE4OTY6XHRcdFx0c2NocC1cdTAwM2VwYWdlc1trXSA9IGFsbG9jX3BhZ2VzKGdmcF9tYXNrLCBvcmRlcik7XG4xODk3Olx0XHRcdGlmICghc2NocC1cdTAwM2VwYWdlc1trXSlcbjE4OTg6XHRcdFx0XHRnb3RvIG91dDtcbjE4OTk6XHRcbjE5MDA6XHRcdFx0aWYgKG51bSA9PSBzY2F0dGVyX2VsZW1fc3pfcHJldikge1xuMTkwMTpcdFx0XHRcdGlmICh1bmxpa2VseShyZXRfc3ogXHUwMDNlIHNjYXR0ZXJfZWxlbV9zel9wcmV2KSkge1xuMTkwMjpcdFx0XHRcdFx0c2NhdHRlcl9lbGVtX3N6ID0gcmV0X3N6O1xuMTkwMzpcdFx0XHRcdFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgPSByZXRfc3o7XG4xOTA0Olx0XHRcdFx0fVxuMTkwNTpcdFx0XHR9XG4xOTA2Olx0XG4xOTA3Olx0XHRcdFNDU0lfTE9HX1RJTUVPVVQoNSwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc2ZwLVx1MDAzZXBhcmVudGRwLFxuMTkwODpcdFx0XHRcdFx0IFwmIzM0O3NnX2J1aWxkX2luZGlyZWN0OiBrPSVkLCBudW09JWQsIHJldF9zej0lZFxcblwmIzM0OyxcbjE5MDk6XHRcdFx0XHRcdCBrLCBudW0sIHJldF9zeikpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNDUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGluZWFnZSBvZiBgc2NhdHRlcl9lbGVtX3N6YCBhbmQgaG93IHRoZSBkcml2ZXIgYHNnLmNgIGFjdHVhbGx5IHV0aWxpemVzIGl0LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB0cmFjZSBiYWNrIHRoZSB2YXJpYWJsZSYjMzk7cyBkZWZpbml0aW9uIGFuZCB1c2FnZSwgc28gbGV0JiMzOTtzIGdldCB0aGF0IGRvbmUuCgoqKlRyYWNraW5nIHRoZSBgc2NhdHRlcl9lbGVtX3N6YCBWYXJpYWJsZSoqCgpSaWdodCwgbGV0IG1lIGtpY2sgb2ZmIGEgZ3JlcCBzZWFyY2gsIHNwZWNpZmljYWxseSBsb29raW5nIHdpdGhpbiBgZHJpdmVycy9zY3NpL3NnLmNgIGZvciBhbnkgaW5zdGFuY2VzIG9mIGBzY2F0dGVyX2VsZW1fc3pgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgaW4gdGhlIHN5c3RlbS4gSSYjMzk7bSBob3BpbmcgdGhpcyBzZWFyY2ggd2lsbCBsZWFkIG1lIHRvIHRoZSBrZXkgc2VjdGlvbnMgb2YgY29kZSB3aGVyZSB0aGUgdmFyaWFibGUgaXMgZWl0aGVyIGRlZmluZWQsIGFzc2lnbmVkIGEgdmFsdWUsIG9yIG1vc3QgaW1wb3J0YW50bHksICp1c2VkKi4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gZHJhdyBjb25uZWN0aW9ucyBhbmQgc2VlIGhvdyBkYXRhIGlzIHN0cnVjdHVyZWQgYW5kIHBhc3NlZCB0aHJvdWdoIHRoZSB2YXJpb3VzIGZ1bmN0aW9uIGNhbGxzLiBUaGlzIHdpbGwgcHJvdmlkZSBhIGNydWNpYWwgaW5zaWdodCBpbnRvIGRhdGEgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzY2F0dGVyX2VsZW1fc3omIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvc2cuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvc2cuYz05Mj1zdGF0aWMgaW50IHNnX2FsbG93X2RpbyA9IFNHX0FMTE9XX0RJT19ERUY7XG5kcml2ZXJzL3Njc2kvc2cuYy05My1cbmRyaXZlcnMvc2NzaS9zZy5jOjk0OnN0YXRpYyBpbnQgc2NhdHRlcl9lbGVtX3N6ID0gU0dfU0NBVFRFUl9TWjtcbmRyaXZlcnMvc2NzaS9zZy5jOjk1OnN0YXRpYyBpbnQgc2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBTR19TQ0FUVEVSX1NaO1xuZHJpdmVycy9zY3NpL3NnLmMtOTYtXG4tLVxuZHJpdmVycy9zY3NpL3NnLmM9MTU5MD1zZ19yZW1vdmVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmNsX2Rldilcbi0tXG5kcml2ZXJzL3Njc2kvc2cuYy0xNjIzLVxuZHJpdmVycy9zY3NpL3NnLmM6MTYyNDptb2R1bGVfcGFyYW1fbmFtZWQoc2NhdHRlcl9lbGVtX3N6LCBzY2F0dGVyX2VsZW1fc3osIGludCwgU19JUlVHTyB8IFNfSVdVU1IpO1xuZHJpdmVycy9zY3NpL3NnLmMtMTYyNS1tb2R1bGVfcGFyYW1fbmFtZWQoYWxsb3dfZGlvLCBzZ19hbGxvd19kaW8sIGludCwgU19JUlVHTyB8IFNfSVdVU1IpO1xuLS1cbmRyaXZlcnMvc2NzaS9zZy5jPTE2NTg9TU9EVUxFX0FMSUFTX0NIQVJERVZfTUFKT1IoU0NTSV9HRU5FUklDX01BSk9SKTtcbmRyaXZlcnMvc2NzaS9zZy5jLTE2NTktXG5kcml2ZXJzL3Njc2kvc2cuYzoxNjYwOk1PRFVMRV9QQVJNX0RFU0Moc2NhdHRlcl9lbGVtX3N6LCBcJiMzNDtzY2F0dGVyIGdhdGhlciBlbGVtZW50IFwmIzM0O1xuZHJpdmVycy9zY3NpL3NnLmMtMTY2MS0gICAgICAgICAgICAgICAgXCYjMzQ7c2l6ZSAoZGVmYXVsdDogbWF4KFNHX1NDQVRURVJfU1osIFBBR0VfU0laRSkpXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL3Njc2kvc2cuYz0xNjY2PWluaXRfc2codm9pZClcbi0tXG5kcml2ZXJzL3Njc2kvc2cuYy0xNjY5LVxuZHJpdmVycy9zY3NpL3NnLmM6MTY3MDpcdGlmIChzY2F0dGVyX2VsZW1fc3ogXHUwMDNjIFBBR0VfU0laRSkge1xuZHJpdmVycy9zY3NpL3NnLmM6MTY3MTpcdFx0c2NhdHRlcl9lbGVtX3N6ID0gUEFHRV9TSVpFO1xuZHJpdmVycy9zY3NpL3NnLmM6MTY3MjpcdFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBzY2F0dGVyX2VsZW1fc3o7XG5kcml2ZXJzL3Njc2kvc2cuYy0xNjczLVx0fVxuLS1cbmRyaXZlcnMvc2NzaS9zZy5jPTE4NTQ9c2dfYnVpbGRfaW5kaXJlY3QoU2dfc2NhdHRlcl9ob2xkICogc2NocCwgU2dfZmQgKiBzZnAsIGludCBidWZmX3NpemUpXG4tLVxuZHJpdmVycy9zY3NpL3NnLmMtMTg3NS1cbmRyaXZlcnMvc2NzaS9zZy5jOjE4NzY6XHRudW0gPSBzY2F0dGVyX2VsZW1fc3o7XG5kcml2ZXJzL3Njc2kvc2cuYzoxODc3Olx0aWYgKHVubGlrZWx5KG51bSAhPSBzY2F0dGVyX2VsZW1fc3pfcHJldikpIHtcbmRyaXZlcnMvc2NzaS9zZy5jLTE4NzgtXHRcdGlmIChudW0gXHUwMDNjIChpbnQpUEFHRV9TSVpFKSB7XG5kcml2ZXJzL3Njc2kvc2cuYzoxODc5Olx0XHRcdHNjYXR0ZXJfZWxlbV9zeiA9IFBBR0VfU0laRTtcbmRyaXZlcnMvc2NzaS9zZy5jOjE4ODA6XHRcdFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBQQUdFX1NJWkU7XG5kcml2ZXJzL3Njc2kvc2cuYy0xODgxLVx0XHRcdG51bSA9IFBBR0VfU0laRTtcbmRyaXZlcnMvc2NzaS9zZy5jLTE4ODItXHRcdH0gZWxzZVxuZHJpdmVycy9zY3NpL3NnLmM6MTg4MzpcdFx0XHRzY2F0dGVyX2VsZW1fc3pfcHJldiA9IG51bTtcbmRyaXZlcnMvc2NzaS9zZy5jLTE4ODQtXHR9XG4tLVxuZHJpdmVycy9zY3NpL3NnLmMtMTg5Mi1cbmRyaXZlcnMvc2NzaS9zZy5jOjE4OTM6XHRcdG51bSA9IChyZW1fc3ogXHUwMDNlIHNjYXR0ZXJfZWxlbV9zel9wcmV2KSA/XG5kcml2ZXJzL3Njc2kvc2cuYzoxODk0Olx0XHRcdHNjYXR0ZXJfZWxlbV9zel9wcmV2IDogcmVtX3N6O1xuZHJpdmVycy9zY3NpL3NnLmMtMTg5NS1cbi0tXG5kcml2ZXJzL3Njc2kvc2cuYy0xODk5LVxuZHJpdmVycy9zY3NpL3NnLmM6MTkwMDpcdFx0aWYgKG51bSA9PSBzY2F0dGVyX2VsZW1fc3pfcHJldikge1xuZHJpdmVycy9zY3NpL3NnLmM6MTkwMTpcdFx0XHRpZiAodW5saWtlbHkocmV0X3N6IFx1MDAzZSBzY2F0dGVyX2VsZW1fc3pfcHJldikpIHtcbmRyaXZlcnMvc2NzaS9zZy5jOjE5MDI6XHRcdFx0XHRzY2F0dGVyX2VsZW1fc3ogPSByZXRfc3o7XG5kcml2ZXJzL3Njc2kvc2cuYzoxOTAzOlx0XHRcdFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgPSByZXRfc3o7XG5kcml2ZXJzL3Njc2kvc2cuYy0xOTA0LVx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjY0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogODA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU2NhdHRlci9HYXRoZXIgRWxlbWVudCBTaXplIGluIHRoZSBTQ1NJIEdlbmVyaWMgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBzY2F0dGVyX2VsZW1fc3pgIHBhcmFtZXRlciBpbiB0aGUgYHNnLmNgIG1vZHVsZSwgd2hpY2ggaXMgdGhlIFNDU0kgR2VuZXJpYyBkcml2ZXIgYWNjZXNzaWJsZSB2aWEgYC9kZXYvc2cqYC4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgY2FuIEkgZXZlbiAqcmVhY2gqIHRoaXMgZHJpdmVyIGluIGEgdHlwaWNhbCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBZZXMsIHRoYW5rZnVsbHksIGBDT05GSUdfQ0hSX0RFVl9TR2AgbWFrZXMgaXQgYSBjbGFzc2ljIGRyaXZlci4gUUVNVSYjMzk7cyB2aXJ0aW8tc2NzaSwgU0NTSSBlbXVsYXRpb24sIGFuZCBVU0IgbWFzcyBzdG9yYWdlIFNDU0kgZGV2aWNlcyBhbGwgZXhwb3NlIGAvZGV2L3NnKmAuIEFuZCBJIGtub3cgc3l6a2FsbGVyIHNwZWNpZmljYWxseSB0ZXN0cyBTQ1NJIGFuZCBgL2Rldi9zZypgIHRocm91Z2ggaXRzIGRlc2NyaXB0aW9ucywgc28gaXQmIzM5O3MgYSB2YWxpZCB0YXJnZXQuCgpOb3csIGxldCYjMzk7cyB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZSBwYXRjaC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGlzc3VlIHRoaXMgaXMgZml4aW5nLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgc2dfYnVpbGRfaW5kaXJlY3RgIGZ1bmN0aW9uLiBJIHNlZSB0aGUgY29yZSBsb2dpYyBpbnZvbHZpbmcgYHNjYXR0ZXJfZWxlbV9zemAgYW5kIGhvdyBpdCYjMzk7cyBoYW5kbGVkLgoKT2theSwgaGVyZSYjMzk7cyB3aGF0JiMzOTtzIGhhcHBlbmluZy4gVGhlIGNvZGUgY2hlY2tzIGlmIGBudW1gIGlzIGRpZmZlcmVudCBmcm9tIGBzY2F0dGVyX2VsZW1fc3pfcHJldmAuIFRoZW4sIGl0IGNvbXBhcmVzIGlmIGBudW1gIGlzIGxlc3MgdGhhbiBgUEFHRV9TSVpFYC4gQmVmb3JlIHRoZSBmaXgsIGlmIGBudW0gJmx0OyBQQUdFX1NJWkVgLCB0aGUgY29kZSB3b3VsZCBzZXQgYHNjYXR0ZXJfZWxlbV9zemAgYW5kIGBzY2F0dGVyX2VsZW1fc3pfcHJldmAgdG8gYFBBR0VfU0laRWAsIGJ1dCBpdCAqZGlkbiYjMzk7dCogdXBkYXRlIGBudW1gISBUaGF0JiMzOTtzIGEgaHVnZSBvdmVyc2lnaHQuCgpUaGluayBhYm91dCB0aGlzLiAgYFBBR0VfU0laRWAgaXMgdW5zaWduZWQsIHJpZ2h0PyBBbmQgYG51bWAgaXMgYSBzaWduZWQgaW50ZWdlci4gIElmIGBzY2F0dGVyX2VsZW1fc3pgIChhbmQgaGVuY2UgYG51bWApIHdhcyBzZXQgdG8gYSBuZWdhdGl2ZSB2YWx1ZSwgdGhlIHVuc2lnbmVkIGNvbXBhcmlzb24gd291bGQgZmFpbCwgYW5kIGl0IHdvdWxkIHNraXAgdGhlIFBBR0VfU0laRSBhZGp1c3RtZW50LiBCdXQgZXZlbiBpZiB0aGUgY29tcGFyaXNvbiBzdWNjZWVkZWQsIHRoZSBjcml0aWNhbCBmbGF3IGlzIGBudW1gICp3YXNuJiMzOTt0KiB1cGRhdGVkLiBTbyB0aGUgc3Vic2VxdWVudCBgb3JkZXIgPSBnZXRfb3JkZXIobnVtKWAgY2FsbCBjb3VsZCBoYXZlIGJlZW4gdXNpbmcgYSBwb3RlbnRpYWxseSBpbnZhbGlkIGBudW1gLiBJdCBjb3VsZCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMCwgd2hpY2ggd291bGQgbGVhZCB0byB1bmRlZmluZWQgYmVoYXZpb3Igb3IgZXJyb3JzIHdpdGhpbiBgZ2V0X29yZGVyYCAobGlrZSBzaGlmdGluZyBieSBhIG5lZ2F0aXZlIGFtb3VudCkuICBUaGUgZml4IGFkZHJlc3NlcyB0aGlzIGJ5IHVzaW5nIGEgc2lnbmVkIGludGVnZXIgY29tcGFyaXNvbiAoYG51bSAmbHQ7IChpbnQpUEFHRV9TSVpFYCkgd2hpY2ggaXMgY29ycmVjdCwgYW5kIGNydWNpYWxseSBzZXRzIGBudW0gPSBQQUdFX1NJWkVgLCBndWFyYW50ZWVpbmcgYSB2YWxpZCB2YWx1ZSBpcyB1c2VkIGluIHRoZSBgZ2V0X29yZGVyYCBjYWxjdWxhdGlvbi4KCkkgd2FzIGhvcGluZyB0byBjaGVjayB0aGUgY29tbWl0IGxvZyBkaXJlY3RseSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LCBidXQgSSBkb24mIzM5O3QgaGF2ZSBkaXJlY3QgYWNjZXNzIHRvIGdpdC4gTm8gbWF0dGVyLCB0aGUgY29kZSB0ZWxscyB0aGUgc3RvcnkhICBUaGUgS2NvbmZpZyBvcHRpb25zIGFyZSBteSBuZXh0IHBvcnQgb2YgY2FsbC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhpcyBpcyBwcm9wZXJseSBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29iai0uKnNnXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvc2NzaSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvTWFrZWZpbGU9MTczPW9iai0kKENPTkZJR19CTEtfREVWX1NSKVx0JiM0Mzs9IHNyX21vZC5vXG5kcml2ZXJzL3Njc2kvTWFrZWZpbGU6MTc0Om9iai0kKENPTkZJR19DSFJfREVWX1NHKVx0JiM0Mzs9IHNnLm9cbmRyaXZlcnMvc2NzaS9NYWtlZmlsZS0xNzUtb2JqLSQoQ09ORklHX0NIUl9ERVZfU0NIKVx0JiM0Mzs9IGNoLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTY3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkNoZWNraW5nIFNDU0kgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB3aGVyZSB0aGUgYENPTkZJR19DSFJfREVWX1NHYCBzeW1ib2wgaXMgZGVmaW5lZC4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIGl0IGxpa2VseSByZWxhdGVzIHRvIFNDU0ksIGlzIHRvIGhlYWQgZGlyZWN0bHkgaW50byB0aGUga2VybmVsIHNvdXJjZSB0cmVlLCBzcGVjaWZpY2FsbHkgdGhlIGBkcml2ZXJzL3Njc2kvYCBkaXJlY3RvcnkuIFdpdGhpbiB0aGF0LCB0aGUgYEtjb25maWdgIGZpbGVzIGFyZSB1c3VhbGx5IHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBTbyBJJiMzOTtsbCBnbyBzdHJhaWdodCB0byBgZHJpdmVycy9zY3NpL0tjb25maWdgIGFuZCB0YWtlIGEgbG9vay4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBvZiBgQ09ORklHX0NIUl9ERVZfU0dgIGFuZCBhbnkgYXNzb2NpYXRlZCBkZXBlbmRlbmNpZXMsIGRlc2NyaXB0aW9ucywgYW5kIGRlZmF1bHRzIHRoZXJlLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4sIGFuZCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgcGFydGljdWxhciBmdW5jdGlvbmFsaXR5IGlzIGNvbnRyb2xsZWQgaW4gdGhlIGtlcm5lbCBidWlsZC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDSFJfREVWX1NHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvc2NzaS9LY29uZmlnPTExNj1jb25maWcgQkxLX0RFVl9TUlxuLS1cbmRyaXZlcnMvc2NzaS9LY29uZmlnLTEzMC1cbmRyaXZlcnMvc2NzaS9LY29uZmlnOjEzMTpjb25maWcgQ0hSX0RFVl9TR1xuZHJpdmVycy9zY3NpL0tjb25maWctMTMyLVx0dHJpc3RhdGUgXCYjMzQ7U0NTSSBnZW5lcmljIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ4NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIFNDU0kgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy9zY3NpL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyBkZWZpbmVkIGluIGxpbmVzIDEzMC0xNTAuIFNwZWNpZmljYWxseSwgSeKAmW0gaW50ZXJlc3RlZCBpbiB0aG9zZSBwYXJ0aWN1bGFyIGxpbmVzLCBhcyBzb21ldGhpbmcgbXVzdCBoYXZlIHRyaWdnZXJlZCBteSBpbnRlcmVzdCBpbiB0aGVtLiBXaGF04oCZcyBnb2luZyBvbiBpbiB0aGF0IHNwZWNpZmljIHNlY3Rpb24/IEFyZSB0aGV5IGRlZmluaW5nIG5ldyBTQ1NJIGhvc3QgYWRhcHRlcnMsIHBlcmhhcHM/IE9yIG1heWJlIHNvbWUgY29yZSBTQ1NJIG9wdGlvbnM/IEl04oCZcyBwcm9iYWJseSBhIGNvbmZpZ3VyYXRpb24gYmxvY2sgZm9yIGEgY2VydGFpbiB0eXBlIG9mIGNvbnRyb2xsZXIgb3Igc29tZSBmZWF0dXJlLCBnaXZlbiB0aGUgY29udGV4dCBvZiBhIEtjb25maWcgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHNlY3Rpb24gZW5hYmxlcyBvciBkaXNhYmxlcywgYW5kIHRoZSBkZXBlbmRlbmNpZXMgaXQgc2V0cy4gQWxyaWdodCwgbGV0JiMzOTtzIHBhcnNlIHRob3NlIGxpbmVzIGFuZCBzZWUgd2hhdCByZXZlbGF0aW9ucyBhcmUgaGlkZGVuIHRoZXJlLiBUaGUgZGV2aWwgaXMgYWx3YXlzIGluIHRoZSBkZXRhaWxzLCBzbyBsZXQmIzM5O3Mgc3RhcnQgcmVhZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTMwOlx0XG4gMTMxOlx0Y29uZmlnIENIUl9ERVZfU0dcbiAxMzI6XHRcdHRyaXN0YXRlIFwmIzM0O1NDU0kgZ2VuZXJpYyBzdXBwb3J0XCYjMzQ7XG4gMTMzOlx0XHRkZXBlbmRzIG9uIFNDU0lcbiAxMzQ6XHRcdGhlbHBcbiAxMzU6XHRcdCAgSWYgeW91IHdhbnQgdG8gdXNlIFNDU0kgc2Nhbm5lcnMsIHN5bnRoZXNpemVycyBvciBDRC13cml0ZXJzIG9yIGp1c3RcbiAxMzY6XHRcdCAgYWJvdXQgYW55dGhpbmcgaGF2aW5nIFwmIzM0O1NDU0lcJiMzNDsgaW4gaXRzIG5hbWUgb3RoZXIgdGhhbiBoYXJkIGRpc2tzLFxuIDEzNzpcdFx0ICBDRC1ST01zIG9yIHRhcGVzLCBzYXkgWSBoZXJlLiBUaGVzZSB3b24mIzM5O3QgYmUgc3VwcG9ydGVkIGJ5IHRoZSBrZXJuZWxcbiAxMzg6XHRcdCAgZGlyZWN0bHksIHNvIHlvdSBuZWVkIHNvbWUgYWRkaXRpb25hbCBzb2Z0d2FyZSB3aGljaCBrbm93cyBob3cgdG9cbiAxMzk6XHRcdCAgdGFsayB0byB0aGVzZSBkZXZpY2VzIHVzaW5nIHRoZSBTQ1NJIHByb3RvY29sOlxuIDE0MDpcdFxuIDE0MTpcdFx0ICBGb3Igc2Nhbm5lcnMsIGxvb2sgYXQgU0FORSAoXHUwMDNjaHR0cDovL3d3dy5zYW5lLXByb2plY3Qub3JnL1x1MDAzZSkuIEZvciBDRFxuIDE0MjpcdFx0ICB3cml0ZXIgc29mdHdhcmUgbG9vayBhdCBDZHJ0b29sc1xuIDE0MzpcdFx0ICAoXHUwMDNjaHR0cDovL2NkcnRvb2xzLnNvdXJjZWZvcmdlLm5ldC9cdTAwM2UpXG4gMTQ0Olx0XHQgIGFuZCBmb3IgYnVybmluZyBhIFwmIzM0O2Rpc2sgYXQgb25jZVwmIzM0OzogQ0RSREFPXG4gMTQ1Olx0XHQgIChcdTAwM2NodHRwOi8vY2RyZGFvLnNvdXJjZWZvcmdlLm5ldC9cdTAwM2UpLiBDZHBhcmFub2lhIGlzIGEgaGlnaFxuIDE0NjpcdFx0ICBxdWFsaXR5IGRpZ2l0YWwgcmVhZGVyIG9mIGF1ZGlvIENEcyAoXHUwMDNjaHR0cDovL3d3dy54aXBoLm9yZy9wYXJhbm9pYS9cdTAwM2UpLlxuIDE0NzpcdFx0ICBGb3Igb3RoZXIgZGV2aWNlcywgaXQmIzM5O3MgcG9zc2libGUgdGhhdCB5b3UmIzM5O2xsIGhhdmUgdG8gd3JpdGUgdGhlXG4gMTQ4Olx0XHQgIGRyaXZlciBzb2Z0d2FyZSB5b3Vyc2VsZi4gUGxlYXNlIHJlYWQgdGhlIGZpbGVcbiAxNDk6XHRcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL3Njc2kvc2NzaS1nZW5lcmljLnJzdFx1MDAzZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAxNTA6XHRcbiAxNTE6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZSBhbmQgcmVhZFxuIDE1MjpcdFx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vc2NzaS9zY3NpLnJzdFx1MDAzZS4gVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzZy5cbiAxNTM6XHRcbiAxNTQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE5NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBTQ1NJIFN1YnN5c3RlbSBEZXBlbmRlbmN5KioKClJpZ2h0LCBgQ09ORklHX0NIUl9ERVZfU0dgIGhpbmdlcyBvbiBgQ09ORklHX1NDU0lgLCB3aGljaCBpcyBleHBlY3RlZC4gVGhhdCYjMzk7cyBzdGFuZGFyZCBwcmFjdGljZSwgdGhlICYjMzQ7c2cmIzM0OyBkcml2ZXIgbGV2ZXJhZ2VzIHRoZSBTQ1NJIG1pZC1sYXllciwgc28gdGhhdCYjMzk7cyBub3RoaW5nIG5ldy4gTm93LCB0aGUgaW50ZXJlc3RpbmcgcXVlc3Rpb24gaXMgaG93IGBzZ19idWlsZF9pbmRpcmVjdGAgaXMgKmFjdHVhbGx5KiB1c2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBmbG93IHRocm91Z2ggYHNnX2J1aWxkX2luZGlyZWN0YC4gSSYjMzk7bSBjdXJpb3VzIGFib3V0IHRoZSBzcGVjaWZpYyBjb250ZXh0cyBhbmQgb3RoZXIgZGVwZW5kZW5jaWVzLiBMZXQmIzM5O3Mgc2VlIGhvdyBhbmQgd2hlbiB0aGF0IHJvdXRpbmUgZ2V0cyBpbnZva2VkLCBzbyBJIGNhbiBoYXZlIGFuIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgSS9PIGZsb3cuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hvJiMzOTtzIGNhbGxpbmcgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NnX2J1aWxkX2luZGlyZWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpL3NnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpL3NnLmM9MTgzPXN0YXRpYyBpbnQgc2dfZmluaXNoX3JlbV9yZXEoU2dfcmVxdWVzdCAqIHNycCk7XG5kcml2ZXJzL3Njc2kvc2cuYzoxODQ6c3RhdGljIGludCBzZ19idWlsZF9pbmRpcmVjdChTZ19zY2F0dGVyX2hvbGQgKiBzY2hwLCBTZ19mZCAqIHNmcCwgaW50IGJ1ZmZfc2l6ZSk7XG5kcml2ZXJzL3Njc2kvc2cuYy0xODUtc3RhdGljIHNzaXplX3Qgc2dfbmV3X3JlYWQoU2dfZmQgKiBzZnAsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCxcbi0tXG5kcml2ZXJzL3Njc2kvc2cuYz0xNzExPXNnX3N0YXJ0X3JlcShTZ19yZXF1ZXN0ICpzcnAsIHVuc2lnbmVkIGNoYXIgKmNtZClcbi0tXG5kcml2ZXJzL3Njc2kvc2cuYy0xNzgyLVx0XHR9IGVsc2Uge1xuZHJpdmVycy9zY3NpL3NnLmM6MTc4MzpcdFx0XHRyZXMgPSBzZ19idWlsZF9pbmRpcmVjdChyZXFfc2NocCwgc2ZwLCBkeGZlcl9sZW4pO1xuZHJpdmVycy9zY3NpL3NnLmMtMTc4NC1cdFx0XHRpZiAocmVzKSB7XG4tLVxuZHJpdmVycy9zY3NpL3NnLmM9MTg1Mz1zdGF0aWMgaW50XG5kcml2ZXJzL3Njc2kvc2cuYzoxODU0OnNnX2J1aWxkX2luZGlyZWN0KFNnX3NjYXR0ZXJfaG9sZCAqIHNjaHAsIFNnX2ZkICogc2ZwLCBpbnQgYnVmZl9zaXplKVxuZHJpdmVycy9zY3NpL3NnLmMtMTg1NS17XG4tLVxuZHJpdmVycy9zY3NpL3NnLmMtMTg2Ny1cdFNDU0lfTE9HX1RJTUVPVVQoNCwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc2ZwLVx1MDAzZXBhcmVudGRwLFxuZHJpdmVycy9zY3NpL3NnLmM6MTg2ODpcdFx0XCYjMzQ7c2dfYnVpbGRfaW5kaXJlY3Q6IGJ1ZmZfc2l6ZT0lZCwgYmxrX3NpemU9JWRcXG5cJiMzNDssXG5kcml2ZXJzL3Njc2kvc2cuYy0xODY5LVx0XHRidWZmX3NpemUsIGJsa19zaXplKSk7XG4tLVxuZHJpdmVycy9zY3NpL3NnLmMtMTkwNy1cdFx0U0NTSV9MT0dfVElNRU9VVCg1LCBzZ19wcmludGsoS0VSTl9JTkZPLCBzZnAtXHUwMDNlcGFyZW50ZHAsXG5kcml2ZXJzL3Njc2kvc2cuYzoxOTA4Olx0XHRcdFx0IFwmIzM0O3NnX2J1aWxkX2luZGlyZWN0OiBrPSVkLCBudW09JWQsIHJldF9zej0lZFxcblwmIzM0OyxcbmRyaXZlcnMvc2NzaS9zZy5jLTE5MDktXHRcdFx0XHQgaywgbnVtLCByZXRfc3opKTtcbi0tXG5kcml2ZXJzL3Njc2kvc2cuYy0xOTE0LVx0U0NTSV9MT0dfVElNRU9VVCg1LCBzZ19wcmludGsoS0VSTl9JTkZPLCBzZnAtXHUwMDNlcGFyZW50ZHAsXG5kcml2ZXJzL3Njc2kvc2cuYzoxOTE1Olx0XHRcdCBcJiMzNDtzZ19idWlsZF9pbmRpcmVjdDoga191c2Vfc2c9JWQsIHJlbV9zej0lZFxcblwmIzM0OyxcbmRyaXZlcnMvc2NzaS9zZy5jLTE5MTYtXHRcdFx0IGssIHJlbV9zeikpO1xuLS1cbmRyaXZlcnMvc2NzaS9zZy5jPTE5ODk9c2dfYnVpbGRfcmVzZXJ2ZShTZ19mZCAqIHNmcCwgaW50IHJlcV9zaXplKVxuLS1cbmRyaXZlcnMvc2NzaS9zZy5jLTE5OTctXHRcdFx0cmVxX3NpemUgPSBQQUdFX1NJWkU7XG5kcml2ZXJzL3Njc2kvc2cuYzoxOTk4Olx0XHRpZiAoMCA9PSBzZ19idWlsZF9pbmRpcmVjdChzY2hwLCBzZnAsIHJlcV9zaXplKSlcbmRyaXZlcnMvc2NzaS9zZy5jLTE5OTktXHRcdFx0cmV0dXJuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTgxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIERhdGEgRmxvdyoqCgpBbHJpZ2h0LCBzbyBgc2dfYnVpbGRfaW5kaXJlY3RgIGlzIGNsZWFybHkgYSBrZXkgZnVuY3Rpb24sIHRyaWdnZXJlZCBieSBib3RoIGBzZ19zdGFydF9yZXFgIGFuZCBgc2dfYnVpbGRfcmVzZXJ2ZWAuIFRoYXQgbWFrZXMgc2Vuc2U7IGluZGlyZWN0IGRlc2NyaXB0b3JzIGFyZSBmdW5kYW1lbnRhbCB0byBhIGxvdCBvZiBTQ1NJIG9wZXJhdGlvbnMsIGVzcGVjaWFsbHkgdGhvc2UgaW52b2x2aW5nIHNjYXR0ZXItZ2F0aGVyLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBmdW5jdGlvbnMsIHBhcnRpY3VsYXJseSB0aGUgcGF0aCB0aHJvdWdoIGBzZ19idWlsZF9yZXNlcnZlYC4gS25vd2luZyAqd2hhdCogY2FsbHMgYHNnX2J1aWxkX3Jlc2VydmVgIGlzIGdvaW5nIHRvIGlsbHVtaW5hdGUgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIGRldmljZSByZXNlcnZhdGlvbiBhbmQgcG90ZW50aWFsIGNvbmZsaWN0IHJlc29sdXRpb24sIEkmIzM5O2Qgd2FnZXIuIExldCYjMzk7cyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgdGhlIGNhbGwgZ3JhcGggZm9yIHRoYXQgZnVuY3Rpb24uIEl0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkYXRhIGZsb3cgYW5kIGhvdyB0aGUgZGlmZmVyZW50IGNvbXBvbmVudHMgaW50ZXJhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NnX2J1aWxkX3Jlc2VydmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvc2cuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvc2cuYz0xOTM9c3RhdGljIHZvaWQgc2dfcmVtb3ZlX3NjYXQoU2dfZmQgKiBzZnAsIFNnX3NjYXR0ZXJfaG9sZCAqIHNjaHApO1xuZHJpdmVycy9zY3NpL3NnLmM6MTk0OnN0YXRpYyB2b2lkIHNnX2J1aWxkX3Jlc2VydmUoU2dfZmQgKiBzZnAsIGludCByZXFfc2l6ZSk7XG5kcml2ZXJzL3Njc2kvc2cuYy0xOTUtc3RhdGljIHZvaWQgc2dfbGlua19yZXNlcnZlKFNnX2ZkICogc2ZwLCBTZ19yZXF1ZXN0ICogc3JwLCBpbnQgc2l6ZSk7XG4tLVxuZHJpdmVycy9zY3NpL3NnLmM9OTE0PXNnX2lvY3RsX2NvbW1vbihzdHJ1Y3QgZmlsZSAqZmlscCwgU2dfZGV2aWNlICpzZHAsIFNnX2ZkICpzZnAsXG4tLVxuZHJpdmVycy9zY3NpL3NnLmMtMTAzNS1cdFx0XHRzZ19yZW1vdmVfc2NhdChzZnAsIFx1MDAyNnNmcC1cdTAwM2VyZXNlcnZlKTtcbmRyaXZlcnMvc2NzaS9zZy5jOjEwMzY6XHRcdFx0c2dfYnVpbGRfcmVzZXJ2ZShzZnAsIHZhbCk7XG5kcml2ZXJzL3Njc2kvc2cuYy0xMDM3LVx0XHR9XG4tLVxuZHJpdmVycy9zY3NpL3NnLmM9MTk4OD1zdGF0aWMgdm9pZFxuZHJpdmVycy9zY3NpL3NnLmM6MTk4OTpzZ19idWlsZF9yZXNlcnZlKFNnX2ZkICogc2ZwLCBpbnQgcmVxX3NpemUpXG5kcml2ZXJzL3Njc2kvc2cuYy0xOTkwLXtcbi0tXG5kcml2ZXJzL3Njc2kvc2cuYy0xOTkzLVx0U0NTSV9MT0dfVElNRU9VVCg0LCBzZ19wcmludGsoS0VSTl9JTkZPLCBzZnAtXHUwMDNlcGFyZW50ZHAsXG5kcml2ZXJzL3Njc2kvc2cuYzoxOTk0Olx0XHRcdCBcJiMzNDtzZ19idWlsZF9yZXNlcnZlOiByZXFfc2l6ZT0lZFxcblwmIzM0OywgcmVxX3NpemUpKTtcbmRyaXZlcnMvc2NzaS9zZy5jLTE5OTUtXHRkbyB7XG4tLVxuZHJpdmVycy9zY3NpL3NnLmM9MjE0ND1zZ19hZGRfc2ZwKFNnX2RldmljZSAqIHNkcClcbi0tXG5kcml2ZXJzL3Njc2kvc2cuYy0yMTc3LVx0XHRcdG1heF9zZWN0b3JzX2J5dGVzKHNkcC1cdTAwM2VkZXZpY2UtXHUwMDNlcmVxdWVzdF9xdWV1ZSkpO1xuZHJpdmVycy9zY3NpL3NnLmM6MjE3ODpcdHNnX2J1aWxkX3Jlc2VydmUoc2ZwLCBidWZmbGVuKTtcbmRyaXZlcnMvc2NzaS9zZy5jLTIxNzktXHRTQ1NJX0xPR19USU1FT1VUKDMsIHNnX3ByaW50ayhLRVJOX0lORk8sIHNkcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk3MwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDEwNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQnVnIEZpeCBBbmFseXNpcyBhbmQgRnV6emluZyBTdHJhdGVneSBmb3IgU0NTSSBTY2F0dGVyL0dhdGhlciBEcml2ZXIqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgYW5hbHlzaXMgaW5kaWNhdGVzIGEgY3JpdGljYWwgYnVnIGZpeCB3aXRoaW4gdGhlIFNDU0kgc2NhdHRlci9nYXRoZXIgZHJpdmVyIChgZHJpdmVycy9zY3NpL3NnLmNgKS4gIFNwZWNpZmljYWxseSwgdGhlIHZ1bG5lcmFiaWxpdHkgbGllcyB3aXRoaW4gaG93IHRoZSBgc2NhdHRlcl9lbGVtX3N6YCBwYXJhbWV0ZXIgaXMgaGFuZGxlZCwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYHNnX2J1aWxkX2luZGlyZWN0YCBmdW5jdGlvbi4KCkkgc2VlIHRoYXQgYHNnX2J1aWxkX3Jlc2VydmVgIGlzIGNhbGxlZCB3aXRoaW4gYHNnX2FkZF9zZnBgLCB3aGljaCBpdHNlbGYgaXMgaW52b2tlZCBkdXJpbmcgYHNnX29wZW5gLiBBbHNvLCBgc2dfc3RhcnRfcmVxYCBpcyB1c2VkIGR1cmluZyB3cml0ZXMgYW5kIHJlcXVlc3RzIHRvIGAvZGV2L3NnKmAsIG1lYW5pbmcgaXQmIzM5O3MgcmVhY2hhYmxlLiBgc2NhdHRlcl9lbGVtX3N6YCwgY2FuIGJlIGNoYW5nZWQgdmlhIHRoZSBtb2R1bGUgcGFyYW1ldGVyIG9yIHRocm91Z2ggYC9zeXMvbW9kdWxlL3NnL3BhcmFtZXRlcnMvc2NhdHRlcl9lbGVtX3N6YC4gVGhlIGltcG9ydGFudCB0aGluZyBpcyB0aGF0IGEgc3RhbmRhcmQgTGludXggVk0gd2l0aCBzeXprYWxsZXIgYW5kIFNDU0kgb3IgdmlydGlvLXNjc2kgZHJpdmVzIG1ha2VzIGAvZGV2L3NnMGAgYXZhaWxhYmxlLiBUaGlzIG1lYW5zIHRoYXQgb3BlbmluZyBgL2Rldi9zZypgIHRyaWdnZXJzIGBzZ19vcGVuYCAtJmd0OyBgc2dfYWRkX3NmcGAgLSZndDsgYHNnX2J1aWxkX3Jlc2VydmVgIC0mZ3Q7IGBzZ19idWlsZF9pbmRpcmVjdGAuICBGdXJ0aGVybW9yZSwgd3JpdGluZyBTQ1NJIGNvbW1hbmRzIG9yIGlzc3VpbmcgdGhlIGBTR19JT2AgaW9jdGwgY2FsbHMgYHNnX3N0YXJ0X3JlcWAgLSZndDsgYHNnX2J1aWxkX2luZGlyZWN0YC4KCkkgaWRlbnRpZmllZCB0aGF0IGBpbml0X3NnYCBhdHRlbXB0cyB0byBjaGVjayBgc2NhdHRlcl9lbGVtX3N6ICZsdDsgUEFHRV9TSVpFYC4gIEhvd2V2ZXIsIHRoaXMgaW5pdGlhbGl6YXRpb24gb25seSBvY2N1cnMgYXQgbW9kdWxlIGxvYWQsIGFuZCB0aGUgYHNjYXR0ZXJfZWxlbV9zemAgcGFyYW1ldGVyIGlzIHdyaXRhYmxlIGF0IHJ1bnRpbWUuIElmIGEgc21hbGwgb3IgbmVnYXRpdmUgdmFsdWUgaXMgd3JpdHRlbiB0byBgL3N5cy9tb2R1bGUvc2cvcGFyYW1ldGVycy9zY2F0dGVyX2VsZW1fc3pgLCB0aGUgY29tcGFyaXNvbiBgc2NhdHRlcl9lbGVtX3N6ICE9IHNjYXR0ZXJfZWxlbV9zel9wcmV2YCBpbiBgc2dfYnVpbGRfaW5kaXJlY3RgIHdpbGwgdHJpZ2dlci4gVGhpcyBjb21wYXJpc29uIGlzIGRhbmdlcm91cyBiZWNhdXNlIGBQQUdFX1NJWkVgIGlzIHVuc2lnbmVkLCBzbyBjb21wYXJpbmcgc2lnbmVkIG51bWJlcnMgd2l0aCBpdCB3aWxsIGNvbnZlcnQgdGhlIHNpZ25lZCBudW1iZXIgdG8gdW5zaWduZWQsIHdoaWNoIGNhbiBsZWFkIHRvIGl0IGJlaW5nIGxhcmdlciB0aGFuIFBBR0VfU0laRSAoYmVjYXVzZSBpdCBjYW4gYmVjb21lIGEgdmVyeSBsYXJnZSBwb3NpdGl2ZSBudW1iZXIpLiBUaGlzIGxlYWRzIHRvIGEgY3Jhc2ggYmVjYXVzZSBuZWdhdGl2ZSBgc2NhdHRlcl9lbGVtX3N6YCB2YWx1ZXMgY2F1c2UgdW5kZWZpbmVkIGJlaGF2aW9yIGluIGBnZXRfb3JkZXIoKWAuIEV2ZW4gaWYgdGhlIGlucHV0IGlzIG9ubHkgKnNsaWdodGx5KiBzbWFsbGVyIHRoYW4gYFBBR0VfU0laRWAsIHRoZSBvcmlnaW5hbCBjb2RlIHdvdWxkIG5ldmVyIHVwZGF0ZSBpdCwgc28gYGdldF9vcmRlcmAgd291bGQgc3RpbGwgaGF2ZSBhIHNtYWxsIG51bWJlci4gVGhlIGZpeCBzZWVtcyB0byBhZGRyZXNzIGJvdGggc2NlbmFyaW9zIGJ5IGNhc3RpbmcgYFBBR0VfU0laRWAgdG8gYGludGAgZm9yIHRoZSBjb21wYXJpc29uIGFuZCB1cGRhdGluZyBgc2NhdHRlcl9lbGVtX3N6YCBhY2NvcmRpbmdseS4KClNpbmNlIHRoaXMgYnVnIGlzIGxvY2F0ZWQgaW4gdGhlIGNvcmUgYGRyaXZlcnMvc2NzaS9zZy5jYCwgaXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgcGF0Y2ggZGlyZWN0bHkgYWZmZWN0cyByZWFjaGFibGUgY29kZSBhbmQgaXMgdGhlcmVmb3JlIHdvcnRoIGZ1enppbmcuCgpNeSBhbmFseXNpcyBhbHNvIHRlbGxzIG1lIHRvIGNvbmZpcm0gdGhhdCB0aGUgYENIUl9ERVZfU0dgIGFuZCBgU0NTSWAga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcmVxdWlyZWQgdG8gZW5hYmxlIHRoaXMgYnVnLiBJJiMzOTtsbCBuZWVkIHRvIGVuYWJsZSBib3RoLgoKRmluYWxseSwgSSBuZWVkIHRvIGxpc3QgZnVuY3Rpb25zIHRoYXQgaW1wbGVtZW50IHRoZSBwYXRjaGVkIGxvZ2ljIG9yIGFyZSBlbnRyeSBwb2ludHMuIFRoZSBmb2N1cyBzaG91bGQgYmUgb24gYHNnX2J1aWxkX2luZGlyZWN0YCBiZWNhdXNlIHRoaXMgaXMgd2hlcmUgdGhlIHBhdGNoIHdhcyBhcHBsaWVkLCBhbmQgYWxzbyBgc2dfYnVpbGRfcmVzZXJ2ZWAgYW5kIGBzZ19zdGFydF9yZXFgIGFzIHRoZSBjYWxsZXJzIG9mIHRoZSBmdW5jdGlvbi4gIEkgY29uZmlybWVkIHRoYXQgYHNnX2J1aWxkX2luZGlyZWN0YCBpcyAqbm90KiBpbmxpbmVkIGFuZCBpcyBhIHN1YnN0YW50aWFsIHN0YXRpYyBDIGZ1bmN0aW9uLiBJdCYjMzk7cyBkZWZpbml0ZWx5IG5vdCBzdGF0aWMgaW5saW5lLCBzbyBpdCYjMzk7cyBhIGdvb2QgRm9jdXNTeW1ib2wuIEkgd2lsbCBkb3VibGUtY2hlY2sgYGRyaXZlcnMvc2NzaS9LY29uZmlnYCB0byBjb25maXJtIGFueSBvdGhlciBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTQ1NJXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvc2NzaS9LY29uZmlnPTE4PWNvbmZpZyBTQ1NJX0NPTU1PTlxuLS1cbmRyaXZlcnMvc2NzaS9LY29uZmlnLTIwLVxuZHJpdmVycy9zY3NpL0tjb25maWc6MjE6Y29uZmlnIFNDU0lcbmRyaXZlcnMvc2NzaS9LY29uZmlnLTIyLVx0dHJpc3RhdGUgXCYjMzQ7U0NTSSBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg4MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKlNjb3V0aW5nIHRoZSBTQ1NJIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIFNDU0kgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIE15IGluc3RpbmN0IHNheXMgdG8gc3RhcnQgd2l0aCBgZHJpdmVycy9zY3NpL0tjb25maWdgLiBMZXQmIzM5O3MgemVybyBpbiBvbiBsaW5lIDIxIHdpdGhpbiB0aGF0IGZpbGUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgU0NTSSBvcHRpb25zLCBhbmQgZnJvbSB0aGVyZSBJIGNhbiBob3BlZnVsbHkgdHJhY2Ugd2hhdCYjMzk7cyBlbmFibGVkLCBkaXNhYmxlZCwgYW5kIHdoYXQgbXkgY3VycmVudCBjb25maWd1cmF0aW9uJiMzOTtzIGRlYWxpbmcgd2l0aC4gVW5kZXJzdGFuZGluZyB0aG9zZSBjb3JlIEtjb25maWcgc2V0dGluZ3MgaXMgY3J1Y2lhbCBiZWZvcmUgSSBnZXQgYW55IGRlZXBlci4gSSYjMzk7bSBob3BpbmcgSSBjYW4gZ2xlYW4gYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIG92ZXJhbGwgc2V0dXAgcXVpY2tseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMTU6XHRcdGhlbHBcbiAgMTY6XHRcdCAgUHJvdmlkZXMgUkFJRFxuICAxNzpcdFxuICAxODpcdGNvbmZpZyBTQ1NJX0NPTU1PTlxuICAxOTpcdFx0dHJpc3RhdGVcbiAgMjA6XHRcbiAgMjE6XHRjb25maWcgU0NTSVxuICAyMjpcdFx0dHJpc3RhdGUgXCYjMzQ7U0NTSSBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuICAyMzpcdFx0ZGVwZW5kcyBvbiBCTE9DS1xuICAyNDpcdFx0c2VsZWN0IFNDU0lfRE1BIGlmIEhBU19ETUFcbiAgMjU6XHRcdHNlbGVjdCBTR19QT09MXG4gIDI2Olx0XHRzZWxlY3QgU0NTSV9DT01NT05cbiAgMjc6XHRcdHNlbGVjdCBCTEtfREVWX0JTR19DT01NT04gaWYgQkxLX0RFVl9CU0dcbiAgMjg6XHRcdGhlbHBcbiAgMjk6XHRcdCAgSWYgeW91IHdhbnQgdG8gdXNlIGEgU0NTSSBoYXJkIGRpc2ssIFNDU0kgdGFwZSBkcml2ZSwgU0NTSSBDRC1ST00gb3JcbiAgMzA6XHRcdCAgYW55IG90aGVyIFNDU0kgZGV2aWNlIHVuZGVyIExpbnV4LCBzYXkgWSBhbmQgbWFrZSBzdXJlIHRoYXQgeW91IGtub3dcbiAgMzE6XHRcdCAgdGhlIG5hbWUgb2YgeW91ciBTQ1NJIGhvc3QgYWRhcHRlciAodGhlIGNhcmQgaW5zaWRlIHlvdXIgY29tcHV0ZXJcbiAgMzI6XHRcdCAgdGhhdCBcJiMzNDtzcGVha3NcJiMzNDsgdGhlIFNDU0kgcHJvdG9jb2wsIGFsc28gY2FsbGVkIFNDU0kgY29udHJvbGxlciksXG4gIDMzOlx0XHQgIGJlY2F1c2UgeW91IHdpbGwgYmUgYXNrZWQgZm9yIGl0LlxuICAzNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjMyOAoJCQkJCQkJb3V0cHV0OiAxMzIKCQkJCQkJCXRob3VnaHRzOiAyNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgQ29uZmlndXJhdGlvbmFsIFJlcXVpcmVtZW50cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgdGhhdCBgQ09ORklHX1NDU0lgIHJlbGllcyBvbiBgQkxPQ0tgLCBhbmQgdGhlbiBgQ09ORklHX0NIUl9ERVZfU0dgIGRlcGVuZHMgb24gYFNDU0lgLiBTaW1wbGUgZGVwZW5kZW5jeSBjaGFpbjogYENIUl9ERVZfU0dgIG5lZWRzIGBTQ1NJYCwgd2hpY2ggbmVlZHMgYEJMT0NLYC4gQnV0IGhvbmVzdGx5LCBgQkxPQ0tgIGlzIHByZXR0eSBtdWNoIGEgZ2l2ZW4gaW4gYW55IHN0YW5kYXJkIExpbnV4IGtlcm5lbCBzZXR1cC4gU28sIHJlYWxseSwgdGhlIGltcG9ydGFudCBjb25maWd1cmF0aW9ucyB0byBmb2N1cyBvbiBoZXJlIGFyZSBgQ0hSX0RFVl9TR2AgYW5kIGBTQ1NJYC4KCk5vdywgbGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLiBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gYHRydWVgLCB3aGljaCBpcyBjb3JyZWN0IGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhpcyBidWcuIFRoZSBgUmVhc29uaW5nYCBzZWN0aW9uIGNvbmNpc2VseSBleHBsYWlucyB0aGF0IHRoZSBwYXRjaCBhZGRyZXNzZXMgYSBzaWduZWRuZXNzIGFuZCB1cGRhdGUgYnVnIGluIGBzZ19idWlsZF9pbmRpcmVjdCgpYCB3aXRoaW4gdGhlIFNDU0kgZ2VuZXJpYyBkcml2ZXIsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGBzY2F0dGVyX2VsZW1fc3pgIG1vZHVsZSBwYXJhbWV0ZXIgYW5kIHBvdGVudGlhbGx5IGludmFsaWQgcGFnZSBvcmRlciBjYWxjdWxhdGlvbnMuIFRoZSBqdXN0aWZpY2F0aW9uIGZvciBmdXp6aW5nIGlzIHNvdW5kLCBhbmQgdGhlIHN0YXRlbWVudCB0aGF0IHRoZSBTQ1NJIGdlbmVyaWMgZHJpdmVyIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2l0aCBlbXVsYXRlZCBTQ1NJIGRldmljZXMgaXMgYWJzb2x1dGVseSBzcG90LW9uIGFuZCByZWxldmFudCB0byB0aGUgZnV6emluZyBzdHJhdGVneS4KCkZpbmFsbHksIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0LCB3aXRoIGBzZ19idWlsZF9pbmRpcmVjdGAsIGBzZ19idWlsZF9yZXNlcnZlYCwgYW5kIGBzZ19zdGFydF9yZXFgIGFsbCBzZWVtIHByZWNpc2VseSB0YXJnZXRlZCBhdCB0aGUgY29yZSBhcmVhcyBhZmZlY3RlZCBieSB0aGlzIGJ1Zy4gQW5kIGBFbmFibGVDb25maWdzYCBjb3JyZWN0bHkgcG9pbnRzIHRvIHRoZSByZXF1aXJlZCBjb25maWdzIHRoYXQgdHJpZ2dlciB0aGUgY29kZSBpbiBxdWVzdGlvbi4KClllcCwgZXZlcnl0aGluZyBjaGVja3Mgb3V0LiBMZXQmIzM5O3MgZXhlY3V0ZSBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0hSX0RFVl9TRyYjMzQ7LAogICAgJiMzNDtTQ1NJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2dfYnVpbGRfaW5kaXJlY3QmIzM0OywKICAgICYjMzQ7c2dfYnVpbGRfcmVzZXJ2ZSYjMzQ7LAogICAgJiMzNDtzZ19zdGFydF9yZXEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc2dfYnVpbGRfaW5kaXJlY3QoKSBpbiB0aGUgU0NTSSBnZW5lcmljIChzZykgZHJpdmVyIHRvIHByb3Blcmx5IGNsYW1wIHNjYXR0ZXJfZWxlbV9zeiB3aGVuIGl0IGlzIHNtYWxsZXIgdGhhbiBQQUdFX1NJWkUgb3IgbmVnYXRpdmUgKHByZXZlbnRpbmcgc2lnbmVkIGludGVnZXIgY29tcGFyaXNvbiBpc3N1ZXMgYW5kIGludmFsaWQgcGFnZSBvcmRlcnMgZm9yIGdldF9vcmRlcikuIFRoZSBzZyBkcml2ZXIgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB3aXRoIGVtdWxhdGVkIFNDU0kgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0hSX0RFVl9TRyYjMzQ7LAogICAgJiMzNDtTQ1NJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2dfYnVpbGRfaW5kaXJlY3QmIzM0OywKICAgICYjMzQ7c2dfYnVpbGRfcmVzZXJ2ZSYjMzQ7LAogICAgJiMzNDtzZ19zdGFydF9yZXEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc2dfYnVpbGRfaW5kaXJlY3QoKSBpbiB0aGUgU0NTSSBnZW5lcmljIChzZykgZHJpdmVyIHRvIHByb3Blcmx5IGNsYW1wIHNjYXR0ZXJfZWxlbV9zeiB3aGVuIGl0IGlzIHNtYWxsZXIgdGhhbiBQQUdFX1NJWkUgb3IgbmVnYXRpdmUgKHByZXZlbnRpbmcgc2lnbmVkIGludGVnZXIgY29tcGFyaXNvbiBpc3N1ZXMgYW5kIGludmFsaWQgcGFnZSBvcmRlcnMgZm9yIGdldF9vcmRlcikuIFRoZSBzZyBkcml2ZXIgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB3aXRoIGVtdWxhdGVkIFNDU0kgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgc2lnbmVkbmVzcyBpc3N1ZSBpbiBkcml2ZXJzL3Njc2kvc2cuYyAoc2dfYnVpbGRfaW5kaXJlY3QpLiBTcGVjaWZpY2FsbHksIGNvbXBhcmluZyB0aGUgc2lnbmVkIGludCAmIzM5O251bSYjMzk7IHRvIHVuc2lnbmVkIGxvbmcgJiMzOTtQQUdFX1NJWkUmIzM5OyByZXN1bHRlZCBpbiBzaWduZWQtdG8tdW5zaWduZWQgdHlwZSBwcm9tb3Rpb24sIGFsbG93aW5nIG5lZ2F0aXZlIHZhbHVlcyBvZiB0aGUgJiMzOTtzY2F0dGVyX2VsZW1fc3omIzM5OyBtb2R1bGUgcGFyYW1ldGVyIHRvIGJ5cGFzcyB0aGUgbWluaW11bSBib3VuZCBjaGVjayBhbmQgbGVhZCB0byBpbnZhbGlkIHBhZ2UgYWxsb2NhdGlvbiBvcmRlcnMgYW5kIHVuZGVmaW5lZCBzaGlmdCBiZWhhdmlvci4gVGhlIHBhdGNoIGNhc3RzIFBBR0VfU0laRSB0byBpbnQgYW5kIHNldHMgbnVtID0gUEFHRV9TSVpFIHdoZW4gbnVtIFx1MDAzYyAoaW50KVBBR0VfU0laRS5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeTpcbjEuICYjMzk7bnVtJiMzOTsgYW5kICYjMzk7c2NhdHRlcl9lbGVtX3N6JiMzOTsgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHZhbHVlcy5cbjIuIFRoZSBzY2F0dGVyLWdhdGhlciBidWZmZXIgYWxsb2NhdGlvbnMgaW4gc2dfYnVpbGRfaW5kaXJlY3QgdXNlIGt6YWxsb2MgZm9yIHRoZSBwb2ludGVyIGFycmF5IGFuZCBfX0dGUF9aRVJPIGZvciB0aGUgdW5kZXJseWluZyBwYWdlIGFsbG9jYXRpb25zLlxuMy4gTm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBzdGFjayB2YXJpYWJsZXMsIHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBjb3BpZWQgdG8gdXNlcnNwYWNlIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuXG5BbnkgcG90ZW50aWFsIGlzc3VlcyBmcm9tIHRoZSBidWcgKHN1Y2ggYXMgaW52YWxpZCBhbGxvY2F0aW9uIG9yZGVycyBvciBzaGlmdHMpIGZhbGwgdW5kZXIgc3RhbmRhcmQgVUJTQU4vS0FTQU4gZGV0ZWN0aW9uIHJhdGhlciB0aGFuIEtNU0FOIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRyYWNraW5nLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDEzNTI5NDg5ZjZjY2U0MjUwZjM3NTk4NzM2YzY5ZmViZWYzMGI4OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDE0IDA4OjQ0OjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NnLmMgYi9kcml2ZXJzL3Njc2kvc2cuYwppbmRleCA1NDA4ZjAwMmU2YzAxLi4zOWM4ZTUyZmE2ZmY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2cuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Njc2kvc2cuYwpAQCAtMTg3NSw5ICYjNDM7MTg3NSwxMCBAQCBzZ19idWlsZF9pbmRpcmVjdChTZ19zY2F0dGVyX2hvbGQgKiBzY2hwLCBTZ19mZCAqIHNmcCwgaW50IGJ1ZmZfc2l6ZSkKIAogCW51bSA9IHNjYXR0ZXJfZWxlbV9zejsKIAlpZiAodW5saWtlbHkobnVtICE9IHNjYXR0ZXJfZWxlbV9zel9wcmV2KSkgewotCQlpZiAobnVtICZsdDsgUEFHRV9TSVpFKSB7CiYjNDM7CQlpZiAobnVtICZsdDsgKGludClQQUdFX1NJWkUpIHsKIAkJCXNjYXR0ZXJfZWxlbV9zeiA9IFBBR0VfU0laRTsKIAkJCXNjYXR0ZXJfZWxlbV9zel9wcmV2ID0gUEFHRV9TSVpFOwomIzQzOwkJCW51bSA9IFBBR0VfU0laRTsKIAkJfSBlbHNlCiAJCQlzY2F0dGVyX2VsZW1fc3pfcHJldiA9IG51bTsKIAl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTIyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFNDU0kgR2VuZXJpYyBEcml2ZXIqKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoaXMuIFRoZSBkaWZmIHBvaW50cyB1cyBkaXJlY3RseSB0byBgZHJpdmVycy9zY3NpL3NnLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTg3NS4gVGhpcyBwcm9iYWJseSBtZWFucyBhIHNwZWNpZmljIGNoYW5nZSB3YXMgbWFkZSBpbiB0aGlzIGFyZWEgb2YgdGhlIGRyaXZlciwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGN1cnJlbnQgY29kZS4gSSYjMzk7bGwgc3RhcnQgYnkgdXNpbmcgdGhlIGByZWFkLWZpbGVgIGNvbW1hbmQgdG8gcHVsbCB0aGUgY29kZSBhcm91bmQgdGhhdCBsaW5lIGludG8gdmlldy4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGltbWVkaWF0ZSBjb250ZXh0IEkgbmVlZCDigJMgdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9ucywgdmFyaWFibGVzLCBhbmQgcG90ZW50aWFsIGRhdGEgc3RydWN0dXJlcyDigJMgYmVmb3JlIEkgdHJ5IHRvIGludGVycHJldCB0aGUgZGlmZiBpdHNlbGYuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlICYjMzQ7YmVmb3JlJiMzNDsgc3RhdGUgdG8gdW5kZXJzdGFuZCB0aGUgJiMzNDthZnRlciYjMzQ7IHN0YXRlLiBUaGlzIGFwcHJvYWNoIGhlbHBzIG1lIHF1aWNrbHkgZ3Jhc3AgdGhlIGltcGFjdCBhbmQgcmVhc29uaW5nIGJlaGluZCB0aGUgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvc2NzaS9zZy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODYwOlx0XG4xODYxOlx0XHRpZiAoYmxrX3NpemUgXHUwMDNjIDApXG4xODYyOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuMTg2MzpcdFx0aWYgKDAgPT0gYmxrX3NpemUpXG4xODY0Olx0XHRcdCYjNDM7JiM0MztibGtfc2l6ZTtcdC8qIGRvbiYjMzk7dCBrbm93IHdoeSAqL1xuMTg2NTpcdFx0Lyogcm91bmQgcmVxdWVzdCB1cCB0byBuZXh0IGhpZ2hlc3QgU0dfU0VDVE9SX1NaIGJ5dGUgYm91bmRhcnkgKi9cbjE4NjY6XHRcdGJsa19zaXplID0gQUxJR04oYmxrX3NpemUsIFNHX1NFQ1RPUl9TWik7XG4xODY3Olx0XHRTQ1NJX0xPR19USU1FT1VUKDQsIHNnX3ByaW50ayhLRVJOX0lORk8sIHNmcC1cdTAwM2VwYXJlbnRkcCxcbjE4Njg6XHRcdFx0XCYjMzQ7c2dfYnVpbGRfaW5kaXJlY3Q6IGJ1ZmZfc2l6ZT0lZCwgYmxrX3NpemU9JWRcXG5cJiMzNDssXG4xODY5Olx0XHRcdGJ1ZmZfc2l6ZSwgYmxrX3NpemUpKTtcbjE4NzA6XHRcbjE4NzE6XHRcdC8qIE4uQi4gcmV0X3N6IGNhcnJpZWQgaW50byB0aGlzIGJsb2NrIC4uLiAqL1xuMTg3MjpcdFx0bXhfc2NfZWxlbXMgPSBzZ19idWlsZF9zZ2F0KHNjaHAsIHNmcCwgc2dfdGFibGVzaXplKTtcbjE4NzM6XHRcdGlmIChteF9zY19lbGVtcyBcdTAwM2MgMClcbjE4NzQ6XHRcdFx0cmV0dXJuIG14X3NjX2VsZW1zO1x0LyogbW9zdCBsaWtlbHkgLUVOT01FTSAqL1xuMTg3NTpcdFxuMTg3NjpcdFx0bnVtID0gc2NhdHRlcl9lbGVtX3N6O1xuMTg3NzpcdFx0aWYgKHVubGlrZWx5KG51bSAhPSBzY2F0dGVyX2VsZW1fc3pfcHJldikpIHtcbjE4Nzg6XHRcdFx0aWYgKG51bSBcdTAwM2MgKGludClQQUdFX1NJWkUpIHtcbjE4Nzk6XHRcdFx0XHRzY2F0dGVyX2VsZW1fc3ogPSBQQUdFX1NJWkU7XG4xODgwOlx0XHRcdFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBQQUdFX1NJWkU7XG4xODgxOlx0XHRcdFx0bnVtID0gUEFHRV9TSVpFO1xuMTg4MjpcdFx0XHR9IGVsc2VcbjE4ODM6XHRcdFx0XHRzY2F0dGVyX2VsZW1fc3pfcHJldiA9IG51bTtcbjE4ODQ6XHRcdH1cbjE4ODU6XHRcbjE4ODY6XHRcdG9yZGVyID0gZ2V0X29yZGVyKG51bSk7XG4xODg3Olx0cmV0cnk6XG4xODg4Olx0XHRyZXRfc3ogPSAxIFx1MDAzY1x1MDAzYyAoUEFHRV9TSElGVCAmIzQzOyBvcmRlcik7XG4xODg5Olx0XG4xODkwOlx0XHRmb3IgKGsgPSAwLCByZW1fc3ogPSBibGtfc2l6ZTsgcmVtX3N6IFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBrIFx1MDAzYyBteF9zY19lbGVtcztcbjE4OTE6XHRcdCAgICAgayYjNDM7JiM0MzssIHJlbV9zeiAtPSByZXRfc3opIHtcbjE4OTI6XHRcbjE4OTM6XHRcdFx0bnVtID0gKHJlbV9zeiBcdTAwM2Ugc2NhdHRlcl9lbGVtX3N6X3ByZXYpID9cbjE4OTQ6XHRcdFx0XHRzY2F0dGVyX2VsZW1fc3pfcHJldiA6IHJlbV9zejtcbjE4OTU6XHRcbjE4OTY6XHRcdFx0c2NocC1cdTAwM2VwYWdlc1trXSA9IGFsbG9jX3BhZ2VzKGdmcF9tYXNrLCBvcmRlcik7XG4xODk3Olx0XHRcdGlmICghc2NocC1cdTAwM2VwYWdlc1trXSlcbjE4OTg6XHRcdFx0XHRnb3RvIG91dDtcbjE4OTk6XHRcbjE5MDA6XHRcdFx0aWYgKG51bSA9PSBzY2F0dGVyX2VsZW1fc3pfcHJldikge1xuMTkwMTpcdFx0XHRcdGlmICh1bmxpa2VseShyZXRfc3ogXHUwMDNlIHNjYXR0ZXJfZWxlbV9zel9wcmV2KSkge1xuMTkwMjpcdFx0XHRcdFx0c2NhdHRlcl9lbGVtX3N6ID0gcmV0X3N6O1xuMTkwMzpcdFx0XHRcdFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgPSByZXRfc3o7XG4xOTA0Olx0XHRcdFx0fVxuMTkwNTpcdFx0XHR9XG4xOTA2Olx0XG4xOTA3Olx0XHRcdFNDU0lfTE9HX1RJTUVPVVQoNSwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc2ZwLVx1MDAzZXBhcmVudGRwLFxuMTkwODpcdFx0XHRcdFx0IFwmIzM0O3NnX2J1aWxkX2luZGlyZWN0OiBrPSVkLCBudW09JWQsIHJldF9zej0lZFxcblwmIzM0OyxcbjE5MDk6XHRcdFx0XHRcdCBrLCBudW0sIHJldF9zeikpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjM3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uOiBzZ19idWlsZF9pbmRpcmVjdCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBiYWNrIGludG8gdGhpcy4gSSYjMzk7bSBnb2luZyB0byByZXZpc2l0IGBzZ19idWlsZF9pbmRpcmVjdGAuIEkmIzM5O3ZlIGdvdCBhIGdvb2QgZ3Jhc3Agb2YgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQsIGJ1dCBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIHRoZSBleGFjdCBmdW5jdGlvbiBvZiBgc2dfYnVpbGRfaW5kaXJlY3RgLiBJIGtub3cgaXQmIzM5O3MgYSBrZXkgcGllY2UsIGFuZCBJIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnkgc28gSSBjYW4gdW5kZXJzdGFuZCBhbnkgcmVsYXRlZCBjb2RlIGNoYW5nZXMuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzIG9mIGl0cyBiZWhhdmlvcjogaXRzIGlucHV0cywgb3V0cHV0cywgc2lkZSBlZmZlY3RzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIHN5c3RlbS4gSSYjMzk7bGwgZm9jdXMgb24gaG93IHRoZSBjb2RlIGltcGxlbWVudHMgdGhlIGNvbmNlcHRzIEkgdW5kZXJzdGFuZCwgYW5kIGFueSBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpY3MgdGhhdCBhcmUgbmV3IHRvIG1lLiBFc3NlbnRpYWxseSwgSSYjMzk7bSByZWFkeSB0byByZS1leGFtaW5lIHRoZSBtZWNoYW5pY3Mgb2YgdGhpcyBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvc2cuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTgzMDpcdFx0XHRibGtfbXFfZnJlZV9yZXF1ZXN0KHNycC1cdTAwM2VycSk7XG4xODMxOlx0XG4xODMyOlx0XHRpZiAoc3JwLVx1MDAzZXJlc191c2VkKVxuMTgzMzpcdFx0XHRzZ191bmxpbmtfcmVzZXJ2ZShzZnAsIHNycCk7XG4xODM0Olx0XHRlbHNlXG4xODM1Olx0XHRcdHNnX3JlbW92ZV9zY2F0KHNmcCwgcmVxX3NjaHApO1xuMTgzNjpcdFxuMTgzNzpcdFx0cmV0dXJuIHJldDtcbjE4Mzg6XHR9XG4xODM5Olx0XG4xODQwOlx0c3RhdGljIGludFxuMTg0MTpcdHNnX2J1aWxkX3NnYXQoU2dfc2NhdHRlcl9ob2xkICogc2NocCwgY29uc3QgU2dfZmQgKiBzZnAsIGludCB0YWJsZXNpemUpXG4xODQyOlx0e1xuMTg0MzpcdFx0aW50IHNnX2J1ZmZsZW4gPSB0YWJsZXNpemUgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKik7XG4xODQ0Olx0XHRnZnBfdCBnZnBfZmxhZ3MgPSBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOO1xuMTg0NTpcdFxuMTg0NjpcdFx0c2NocC1cdTAwM2VwYWdlcyA9IGt6YWxsb2Moc2dfYnVmZmxlbiwgZ2ZwX2ZsYWdzKTtcbjE4NDc6XHRcdGlmICghc2NocC1cdTAwM2VwYWdlcylcbjE4NDg6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xODQ5Olx0XHRzY2hwLVx1MDAzZXNnbGlzdF9sZW4gPSBzZ19idWZmbGVuO1xuMTg1MDpcdFx0cmV0dXJuIHRhYmxlc2l6ZTtcdC8qIG51bWJlciBvZiBzY2F0X2dhdGggZWxlbWVudHMgYWxsb2NhdGVkICovXG4xODUxOlx0fVxuMTg1MjpcdFxuMTg1MzpcdHN0YXRpYyBpbnRcbjE4NTQ6XHRzZ19idWlsZF9pbmRpcmVjdChTZ19zY2F0dGVyX2hvbGQgKiBzY2hwLCBTZ19mZCAqIHNmcCwgaW50IGJ1ZmZfc2l6ZSlcbjE4NTU6XHR7XG4xODU2Olx0XHRpbnQgcmV0X3N6ID0gMCwgaSwgaywgcmVtX3N6LCBudW0sIG14X3NjX2VsZW1zO1xuMTg1NzpcdFx0aW50IHNnX3RhYmxlc2l6ZSA9IHNmcC1cdTAwM2VwYXJlbnRkcC1cdTAwM2VzZ190YWJsZXNpemU7XG4xODU4Olx0XHRpbnQgYmxrX3NpemUgPSBidWZmX3NpemUsIG9yZGVyO1xuMTg1OTpcdFx0Z2ZwX3QgZ2ZwX21hc2sgPSBHRlBfQVRPTUlDIHwgX19HRlBfQ09NUCB8IF9fR0ZQX05PV0FSTiB8IF9fR0ZQX1pFUk87XG4xODYwOlx0XG4xODYxOlx0XHRpZiAoYmxrX3NpemUgXHUwMDNjIDApXG4xODYyOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuMTg2MzpcdFx0aWYgKDAgPT0gYmxrX3NpemUpXG4xODY0Olx0XHRcdCYjNDM7JiM0MztibGtfc2l6ZTtcdC8qIGRvbiYjMzk7dCBrbm93IHdoeSAqL1xuMTg2NTpcdFx0Lyogcm91bmQgcmVxdWVzdCB1cCB0byBuZXh0IGhpZ2hlc3QgU0dfU0VDVE9SX1NaIGJ5dGUgYm91bmRhcnkgKi9cbjE4NjY6XHRcdGJsa19zaXplID0gQUxJR04oYmxrX3NpemUsIFNHX1NFQ1RPUl9TWik7XG4xODY3Olx0XHRTQ1NJX0xPR19USU1FT1VUKDQsIHNnX3ByaW50ayhLRVJOX0lORk8sIHNmcC1cdTAwM2VwYXJlbnRkcCxcbjE4Njg6XHRcdFx0XCYjMzQ7c2dfYnVpbGRfaW5kaXJlY3Q6IGJ1ZmZfc2l6ZT0lZCwgYmxrX3NpemU9JWRcXG5cJiMzNDssXG4xODY5Olx0XHRcdGJ1ZmZfc2l6ZSwgYmxrX3NpemUpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE5NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZywgcGlja2luZyB1cCBmcm9tIGxpbmUgMTkxMCBvbndhcmRzIHdpdGhpbiBgc2dfYnVpbGRfaW5kaXJlY3RgOgoKKipFeGFtaW5pbmcgdGhlIFRhaWwgRW5kIG9mIHNnX2J1aWxkX2luZGlyZWN0KioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGJhY2sgaW50byBgc2dfYnVpbGRfaW5kaXJlY3RgLCBzcGVjaWZpY2FsbHkgZnJvbSBsaW5lIDE5MTAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhpcyBmdW5jdGlvbiBjb25jbHVkZXMgaXRzIHdvcmsuIEkgcmVtZW1iZXIgdGhlIGNvcmUgb2YgaXQgaXMgc2V0dGluZyB1cCB0aGUgaW5kaXJlY3QgYnVmZmVyLCBidXQgdGhlIGRldGFpbHMgb2YgdGhlIGZpbmFsIHN0ZXBzIGFyZSBhIGJpdCBoYXp5LiBJJiMzOTttIGZvY3VzaW5nIG9uIHdoYXQgaGFwcGVucyAqYWZ0ZXIqIHRoZSBtYWluIGJ1ZmZlciBzZXR1cCwgY2hlY2tpbmcgZm9yIGFueSBlZGdlIGNhc2VzLCBlcnJvciBoYW5kbGluZywgb3IgY2xlYW51cCBwcm9jZWR1cmVzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB3aGVyZSB0aGUgZnVuY3Rpb24gcmV0dXJucywgd2hhdCB2YWx1ZXMgaXQmIzM5O3MgcmV0dXJuaW5nLCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zLiBBcmUgdGhlcmUgYW55IGZpbmFsIGNoZWNrcyBvciBzYW5pdHkgdmFsaWRhdGlvbnMgaGFwcGVuaW5nIGJlZm9yZSB0aGUgZGF0YSBpcyBoYW5kZWQgb2ZmPyBEb2VzIGl0IHJldHVybiBhIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBjb2RlPyBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IHRoaXMgaXMgd2hlcmUgYW55IGZpbmFsIHJlc291cmNlIG1hbmFnZW1lbnQgaGFwcGVucyBhcyB3ZWxsLCBtYXliZSBmcmVlaW5nIGFsbG9jYXRlZCBtZW1vcnkgb3IgcmVsZWFzaW5nIGxvY2tzIGlmIG5lY2Vzc2FyeS4gSXQmIzM5O3MgdGhlIGNyaXRpY2FsIGNsb3Npbmcgc3RhdGVtZW50LCBhbmQgdW5kZXJzdGFuZGluZyBpdCBpcyB2aXRhbCBmb3IgZW5zdXJpbmcgdGhlIHJvYnVzdG5lc3Mgb2YgdGhpcyBzeXN0ZW0uIEkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGhvdyB0byBkZWFsIHdpdGggdGhlIHJlc3VsdHMsIHNvIEkgY2FuIGVuc3VyZSBwcm9wZXIgb3BlcmF0aW9uIGluIGEgbGFyZ2VyIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpL3NnLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE5MTA6XHRcdH1cdFx0LyogZW5kIG9mIGZvciBsb29wICovXG4xOTExOlx0XG4xOTEyOlx0XHRzY2hwLVx1MDAzZXBhZ2Vfb3JkZXIgPSBvcmRlcjtcbjE5MTM6XHRcdHNjaHAtXHUwMDNla191c2Vfc2cgPSBrO1xuMTkxNDpcdFx0U0NTSV9MT0dfVElNRU9VVCg1LCBzZ19wcmludGsoS0VSTl9JTkZPLCBzZnAtXHUwMDNlcGFyZW50ZHAsXG4xOTE1Olx0XHRcdFx0IFwmIzM0O3NnX2J1aWxkX2luZGlyZWN0OiBrX3VzZV9zZz0lZCwgcmVtX3N6PSVkXFxuXCYjMzQ7LFxuMTkxNjpcdFx0XHRcdCBrLCByZW1fc3opKTtcbjE5MTc6XHRcbjE5MTg6XHRcdHNjaHAtXHUwMDNlYnVmZmxlbiA9IGJsa19zaXplO1xuMTkxOTpcdFx0aWYgKHJlbV9zeiBcdTAwM2UgMClcdC8qIG11c3QgaGF2ZSBmYWlsZWQgKi9cbjE5MjA6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xOTIxOlx0XHRyZXR1cm4gMDtcbjE5MjI6XHRvdXQ6XG4xOTIzOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBrOyBpJiM0MzsmIzQzOylcbjE5MjQ6XHRcdFx0X19mcmVlX3BhZ2VzKHNjaHAtXHUwMDNlcGFnZXNbaV0sIG9yZGVyKTtcbjE5MjU6XHRcbjE5MjY6XHRcdGlmICgtLW9yZGVyIFx1MDAzZT0gMClcbjE5Mjc6XHRcdFx0Z290byByZXRyeTtcbjE5Mjg6XHRcbjE5Mjk6XHRcdHJldHVybiAtRU5PTUVNO1xuMTkzMDpcdH1cbjE5MzE6XHRcbjE5MzI6XHRzdGF0aWMgdm9pZFxuMTkzMzpcdHNnX3JlbW92ZV9zY2F0KFNnX2ZkICogc2ZwLCBTZ19zY2F0dGVyX2hvbGQgKiBzY2hwKVxuMTkzNDpcdHtcbjE5MzU6XHRcdFNDU0lfTE9HX1RJTUVPVVQoNCwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc2ZwLVx1MDAzZXBhcmVudGRwLFxuMTkzNjpcdFx0XHRcdCBcJiMzNDtzZ19yZW1vdmVfc2NhdDoga191c2Vfc2c9JWRcXG5cJiMzNDssIHNjaHAtXHUwMDNla191c2Vfc2cpKTtcbjE5Mzc6XHRcdGlmIChzY2hwLVx1MDAzZXBhZ2VzIFx1MDAyNlx1MDAyNiBzY2hwLVx1MDAzZXNnbGlzdF9sZW4gXHUwMDNlIDApIHtcbjE5Mzg6XHRcdFx0aWYgKCFzY2hwLVx1MDAzZWRpb19pbl91c2UpIHtcbjE5Mzk6XHRcdFx0XHRpbnQgaztcbjE5NDA6XHRcbjE5NDE6XHRcdFx0XHRmb3IgKGsgPSAwOyBrIFx1MDAzYyBzY2hwLVx1MDAzZWtfdXNlX3NnIFx1MDAyNlx1MDAyNiBzY2hwLVx1MDAzZXBhZ2VzW2tdOyBrJiM0MzsmIzQzOykge1xuMTk0MjpcdFx0XHRcdFx0U0NTSV9MT0dfVElNRU9VVCg1LFxuMTk0MzpcdFx0XHRcdFx0XHRzZ19wcmludGsoS0VSTl9JTkZPLCBzZnAtXHUwMDNlcGFyZW50ZHAsXG4xOTQ0Olx0XHRcdFx0XHRcdFwmIzM0O3NnX3JlbW92ZV9zY2F0OiBrPSVkLCBwZz0weCVwXFxuXCYjMzQ7LFxuMTk0NTpcdFx0XHRcdFx0XHRrLCBzY2hwLVx1MDAzZXBhZ2VzW2tdKSk7XG4xOTQ2Olx0XHRcdFx0XHRfX2ZyZWVfcGFnZXMoc2NocC1cdTAwM2VwYWdlc1trXSwgc2NocC1cdTAwM2VwYWdlX29yZGVyKTtcbjE5NDc6XHRcdFx0XHR9XG4xOTQ4Olx0XG4xOTQ5Olx0XHRcdFx0a2ZyZWUoc2NocC1cdTAwM2VwYWdlcyk7XG4xOTUwOlx0XHRcdH1cbjE5NTE6XHRcdH1cbjE5NTI6XHRcdG1lbXNldChzY2hwLCAwLCBzaXplb2YgKCpzY2hwKSk7XG4xOTUzOlx0fVxuMTk1NDpcdFxuMTk1NTpcdHN0YXRpYyBpbnRcbjE5NTY6XHRzZ19yZWFkX294ZmVyKFNnX3JlcXVlc3QgKiBzcnAsIGNoYXIgX191c2VyICpvdXRwLCBpbnQgbnVtX3JlYWRfeGZlcilcbjE5NTc6XHR7XG4xOTU4Olx0XHRTZ19zY2F0dGVyX2hvbGQgKnNjaHAgPSBcdTAwMjZzcnAtXHUwMDNlZGF0YTtcbjE5NTk6XHRcdGludCBrLCBudW07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMjQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgT3JpZ2luIGFuZCBVc2FnZSBvZiBgc2NhdHRlcl9lbGVtX3N6YCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBkZXRhaWxzIHN1cnJvdW5kaW5nIGBzY2F0dGVyX2VsZW1fc3pgLiBNeSBpbml0aWFsIGZvY3VzIGlzIHRvIHRyYWNlIGl0cyBwcm92ZW5hbmNlIGFuZCB1bmRlcnN0YW5kIGl0cyBleGFjdCBkZWZpbml0aW9uLiBJIG5lZWQgdG8ga25vdyB3aGVyZSB0aGlzIHZhcmlhYmxlIGlzIGRlY2xhcmVkLCBpbml0aWFsaXplZCwgYW5kLCBjcml0aWNhbGx5LCBob3cgaXQmIzM5O3MgdWx0aW1hdGVseSB1c2VkIHdpdGhpbiB0aGUgY29kZS4gQ29udGV4dCBpcyBraW5nLCBhbmQga25vd2luZyB0aGUgc2NvcGUgYW5kIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgd2lsbCBiZSBjcnVjaWFsIGZvciBhIHRob3JvdWdoIGdyYXNwIG9mIGl0cyBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IGFueSBpbmNsdWRlIGZpbGVzLCBmdW5jdGlvbiBjYWxscywgYW5kIGFzc2lnbm1lbnRzIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLiBNeSBnb2FsIGlzIGEgZ3JhbnVsYXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW50ZW5kZWQgc2VtYW50aWNzIG9mIGBzY2F0dGVyX2VsZW1fc3pgIGluIHRoZSBncmVhdGVyIHN5c3RlbSBhcmNoaXRlY3R1cmUgYW5kIGhvdyBpdCBtaWdodCBpbXBhY3QgcmVzb3VyY2UgdXRpbGl6YXRpb24gb3IgcGVyZm9ybWFuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NjYXR0ZXJfZWxlbV9zeiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvc2NzaS9zZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvc2NzaS9zZy5jPTkyPXN0YXRpYyBpbnQgc2dfYWxsb3dfZGlvID0gU0dfQUxMT1dfRElPX0RFRjtcbmRyaXZlcnMvc2NzaS9zZy5jLTkzLVxuZHJpdmVycy9zY3NpL3NnLmM6OTQ6c3RhdGljIGludCBzY2F0dGVyX2VsZW1fc3ogPSBTR19TQ0FUVEVSX1NaO1xuZHJpdmVycy9zY3NpL3NnLmM6OTU6c3RhdGljIGludCBzY2F0dGVyX2VsZW1fc3pfcHJldiA9IFNHX1NDQVRURVJfU1o7XG5kcml2ZXJzL3Njc2kvc2cuYy05Ni1cbi0tXG5kcml2ZXJzL3Njc2kvc2cuYz0xNTkwPXNnX3JlbW92ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqY2xfZGV2KVxuLS1cbmRyaXZlcnMvc2NzaS9zZy5jLTE2MjMtXG5kcml2ZXJzL3Njc2kvc2cuYzoxNjI0Om1vZHVsZV9wYXJhbV9uYW1lZChzY2F0dGVyX2VsZW1fc3osIHNjYXR0ZXJfZWxlbV9zeiwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7XG5kcml2ZXJzL3Njc2kvc2cuYy0xNjI1LW1vZHVsZV9wYXJhbV9uYW1lZChhbGxvd19kaW8sIHNnX2FsbG93X2RpbywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7XG4tLVxuZHJpdmVycy9zY3NpL3NnLmM9MTY1OD1NT0RVTEVfQUxJQVNfQ0hBUkRFVl9NQUpPUihTQ1NJX0dFTkVSSUNfTUFKT1IpO1xuZHJpdmVycy9zY3NpL3NnLmMtMTY1OS1cbmRyaXZlcnMvc2NzaS9zZy5jOjE2NjA6TU9EVUxFX1BBUk1fREVTQyhzY2F0dGVyX2VsZW1fc3osIFwmIzM0O3NjYXR0ZXIgZ2F0aGVyIGVsZW1lbnQgXCYjMzQ7XG5kcml2ZXJzL3Njc2kvc2cuYy0xNjYxLSAgICAgICAgICAgICAgICBcJiMzNDtzaXplIChkZWZhdWx0OiBtYXgoU0dfU0NBVFRFUl9TWiwgUEFHRV9TSVpFKSlcJiMzNDspO1xuLS1cbmRyaXZlcnMvc2NzaS9zZy5jPTE2NjY9aW5pdF9zZyh2b2lkKVxuLS1cbmRyaXZlcnMvc2NzaS9zZy5jLTE2NjktXG5kcml2ZXJzL3Njc2kvc2cuYzoxNjcwOlx0aWYgKHNjYXR0ZXJfZWxlbV9zeiBcdTAwM2MgUEFHRV9TSVpFKSB7XG5kcml2ZXJzL3Njc2kvc2cuYzoxNjcxOlx0XHRzY2F0dGVyX2VsZW1fc3ogPSBQQUdFX1NJWkU7XG5kcml2ZXJzL3Njc2kvc2cuYzoxNjcyOlx0XHRzY2F0dGVyX2VsZW1fc3pfcHJldiA9IHNjYXR0ZXJfZWxlbV9zejtcbmRyaXZlcnMvc2NzaS9zZy5jLTE2NzMtXHR9XG4tLVxuZHJpdmVycy9zY3NpL3NnLmM9MTg1ND1zZ19idWlsZF9pbmRpcmVjdChTZ19zY2F0dGVyX2hvbGQgKiBzY2hwLCBTZ19mZCAqIHNmcCwgaW50IGJ1ZmZfc2l6ZSlcbi0tXG5kcml2ZXJzL3Njc2kvc2cuYy0xODc1LVxuZHJpdmVycy9zY3NpL3NnLmM6MTg3NjpcdG51bSA9IHNjYXR0ZXJfZWxlbV9zejtcbmRyaXZlcnMvc2NzaS9zZy5jOjE4Nzc6XHRpZiAodW5saWtlbHkobnVtICE9IHNjYXR0ZXJfZWxlbV9zel9wcmV2KSkge1xuZHJpdmVycy9zY3NpL3NnLmMtMTg3OC1cdFx0aWYgKG51bSBcdTAwM2MgKGludClQQUdFX1NJWkUpIHtcbmRyaXZlcnMvc2NzaS9zZy5jOjE4Nzk6XHRcdFx0c2NhdHRlcl9lbGVtX3N6ID0gUEFHRV9TSVpFO1xuZHJpdmVycy9zY3NpL3NnLmM6MTg4MDpcdFx0XHRzY2F0dGVyX2VsZW1fc3pfcHJldiA9IFBBR0VfU0laRTtcbmRyaXZlcnMvc2NzaS9zZy5jLTE4ODEtXHRcdFx0bnVtID0gUEFHRV9TSVpFO1xuZHJpdmVycy9zY3NpL3NnLmMtMTg4Mi1cdFx0fSBlbHNlXG5kcml2ZXJzL3Njc2kvc2cuYzoxODgzOlx0XHRcdHNjYXR0ZXJfZWxlbV9zel9wcmV2ID0gbnVtO1xuZHJpdmVycy9zY3NpL3NnLmMtMTg4NC1cdH1cbi0tXG5kcml2ZXJzL3Njc2kvc2cuYy0xODkyLVxuZHJpdmVycy9zY3NpL3NnLmM6MTg5MzpcdFx0bnVtID0gKHJlbV9zeiBcdTAwM2Ugc2NhdHRlcl9lbGVtX3N6X3ByZXYpID9cbmRyaXZlcnMvc2NzaS9zZy5jOjE4OTQ6XHRcdFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgOiByZW1fc3o7XG5kcml2ZXJzL3Njc2kvc2cuYy0xODk1LVxuLS1cbmRyaXZlcnMvc2NzaS9zZy5jLTE4OTktXG5kcml2ZXJzL3Njc2kvc2cuYzoxOTAwOlx0XHRpZiAobnVtID09IHNjYXR0ZXJfZWxlbV9zel9wcmV2KSB7XG5kcml2ZXJzL3Njc2kvc2cuYzoxOTAxOlx0XHRcdGlmICh1bmxpa2VseShyZXRfc3ogXHUwMDNlIHNjYXR0ZXJfZWxlbV9zel9wcmV2KSkge1xuZHJpdmVycy9zY3NpL3NnLmM6MTkwMjpcdFx0XHRcdHNjYXR0ZXJfZWxlbV9zeiA9IHJldF9zejtcbmRyaXZlcnMvc2NzaS9zZy5jOjE5MDM6XHRcdFx0XHRzY2F0dGVyX2VsZW1fc3pfcHJldiA9IHJldF9zejtcbmRyaXZlcnMvc2NzaS9zZy5jLTE5MDQtXHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTk3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNzA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBJbnRlZ2VyIE92ZXJmbG93IGluIGBkcml2ZXJzL3Njc2kvc2cuY2AqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGdpdCBjb21taXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB2dWxuZXJhYmlsaXR5IG9yIGJ1ZyBpdCBhZGRyZXNzZXMuIFNlZW1zIHdlIGFyZSBpbiBgZHJpdmVycy9zY3NpL3NnLmNgLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUgc2NhdHRlci1nYXRoZXIgbGlzdCBoYW5kbGluZy4KClJpZ2h0LCB0aGUga2V5IHNlY3Rpb24gaXMgdGhlIGNvbXBhcmlzb24gaW52b2x2aW5nIGBzY2F0dGVyX2VsZW1fc3pgIGFuZCBgUEFHRV9TSVpFYC4gQmVmb3JlIHRoZSBwYXRjaCwgdGhlIGNvZGUgd2FzIHN1c2NlcHRpYmxlIHRvIGFuIGludGVnZXIgb3ZlcmZsb3csIHBhcnRpY3VsYXJseSBpZiBhIHJvb3QgdXNlciB3YXMgYWJsZSB0byBtb2RpZnkgYHNjYXR0ZXJfZWxlbV9zemAgd2hpY2ggaXMgYSBtb2R1bGUgcGFyYW1ldGVyLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGF0IGlmIGEgbWFsaWNpb3VzIHZhbHVlIGxpa2UgYSBsYXJnZSBuZWdhdGl2ZSBudW1iZXIsIG9yIGEgc21hbGwgbnVtYmVyIGxlc3MgdGhhbiBgUEFHRV9TSVpFYCBsaWtlIDAsIGNvdWxkIGJlIHdyaXR0ZW4gdG8gYHNjYXR0ZXJfZWxlbV9zemAuCgpUaGUgY29yZSBpc3N1ZSBpcyBob3cgdGhlIHNpZ25lZCBpbnRlZ2VyIGBudW1gIGlzIGNvbXBhcmVkIHdpdGggdGhlIHVuc2lnbmVkIGBQQUdFX1NJWkVgLiBUaGUgb3JpZ2luYWwgYGlmIChudW0gJmx0OyBQQUdFX1NJWkUpYCB3b3VsZCBwcm9tb3RlIGEgbmVnYXRpdmUgYG51bWAgdG8gYW4gdW5zaWduZWQgbG9uZy4gIFNvIGlmIGBudW1gIHdhcyAtMSwgdGhlIGNvbXBhcmlzb24gd291bGQgZWZmZWN0aXZlbHkgYmVjb21lICBgMHhGRkZGRkZGRkZGRkZGRkZGVUwgJmx0OyBQQUdFX1NJWkVgLCB3aGljaCBpcyBhbHdheXMgZmFsc2UsIHNraXBwaW5nIHRoZSBpbnRlbmRlZCByZXNpemUgYW5kIGFsbG9jYXRpb24sIGFuZCBwb3RlbnRpYWxseSBjYXVzaW5nIGFuIHVuZGVmaW5lZCBiZWhhdmlvciBvbiBgZ2V0X29yZGVyKG51bSlgLiBDb252ZXJzZWx5LCBpZiBgbnVtYCB3YXMgYSB2YWx1ZSBsaWtlIDEwMCwgdGhlIGNvZGUgd291bGQgcHJvY2VlZCB0byBgc2NhdHRlcl9lbGVtX3N6ID0gUEFHRV9TSVpFYCwgYnV0IGBudW1gIHdvdWxkIG5vdCBiZSB1cGRhdGVkISBTdWJzZXF1ZW50IG9wZXJhdGlvbnMgd2l0aCB0aGUgb3JpZ2luYWwgc21hbGxlciBgbnVtYCBjb3VsZCBzdGlsbCBjYXVzZSBwcm9ibGVtcy4KClRoaXMgY291bGQgbGVhZCB0byB1c2luZyBhIG5lZ2F0aXZlIHZhbHVlIGluIGBnZXRfb3JkZXIoKWAsIHJlc3VsdGluZyBpbiBlaXRoZXIgYSBodWdlIG9yZGVyIHZhbHVlIG9yIGFuIHVuZGVmaW5lZCBzaGlmdCBpbiBgcmV0X3N6ID0gMSAmbHQ7Jmx0OyAoUEFHRV9TSElGVCAmIzQzOyBvcmRlcik7YC4gVGhpcyBjb3VsZCBjYXVzZSBhbGwgc29ydHMgb2YgbWVtb3J5IGNvcnJ1cHRpb24sIGluY2x1ZGluZyB1bmRlZmluZWQgYmVoYXZpb3Igb3IgY3Jhc2ggd2l0aCBwYWdlIGFsbG9jYXRpb24gd2FybmluZ3MuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgbWVtb3J5IHNhZmV0eS4gIExldCYjMzk7cyBjb25zaWRlciB0aGF0IHRoZSBjb2RlICpzaG91bGQqIGJlIHplcm8taW5pdGlhbGl6aW5nIGFueSBhbGxvY2F0ZWQgbWVtb3J5LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgdXNlcyBvZiBgc2NocC0mZ3Q7cGFnZXNgIGFuZCB0aGUgYWxsb2NhdGlvbi4gSSBzZWUgYSBgZ2ZwX21hc2tgIG9mIGBHRlBfQVRPTUlDIHwgX19HRlBfQ09NUCB8IF9fR0ZQX05PV0FSTiB8IF9fR0ZQX1pFUk9gLCBhbmQgYWxzbyBgc2NocC0mZ3Q7cGFnZXMgPSBremFsbG9jYC4gTG9va3MgbGlrZSBpdCYjMzk7cyB6ZXJvLWluaXRpYWxpemVkIGR1cmluZyBhbGxvY2F0aW9uIGluIGBzZ19idWlsZF9pbmRpcmVjdGAuICBJJiMzOTtsbCBzdGlsbCB2ZXJpZnkgYWxsIHJlYWQvd3JpdGUgYWNjZXNzZXMgdG8gdGhhdCBtZW1vcnksIGp1c3QgdG8gYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NnX2J1aWxkX2luZGlyZWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpL3NnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpL3NnLmM9MTgzPXN0YXRpYyBpbnQgc2dfZmluaXNoX3JlbV9yZXEoU2dfcmVxdWVzdCAqIHNycCk7XG5kcml2ZXJzL3Njc2kvc2cuYzoxODQ6c3RhdGljIGludCBzZ19idWlsZF9pbmRpcmVjdChTZ19zY2F0dGVyX2hvbGQgKiBzY2hwLCBTZ19mZCAqIHNmcCwgaW50IGJ1ZmZfc2l6ZSk7XG5kcml2ZXJzL3Njc2kvc2cuYy0xODUtc3RhdGljIHNzaXplX3Qgc2dfbmV3X3JlYWQoU2dfZmQgKiBzZnAsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCxcbi0tXG5kcml2ZXJzL3Njc2kvc2cuYz0xNzExPXNnX3N0YXJ0X3JlcShTZ19yZXF1ZXN0ICpzcnAsIHVuc2lnbmVkIGNoYXIgKmNtZClcbi0tXG5kcml2ZXJzL3Njc2kvc2cuYy0xNzgyLVx0XHR9IGVsc2Uge1xuZHJpdmVycy9zY3NpL3NnLmM6MTc4MzpcdFx0XHRyZXMgPSBzZ19idWlsZF9pbmRpcmVjdChyZXFfc2NocCwgc2ZwLCBkeGZlcl9sZW4pO1xuZHJpdmVycy9zY3NpL3NnLmMtMTc4NC1cdFx0XHRpZiAocmVzKSB7XG4tLVxuZHJpdmVycy9zY3NpL3NnLmM9MTg1Mz1zdGF0aWMgaW50XG5kcml2ZXJzL3Njc2kvc2cuYzoxODU0OnNnX2J1aWxkX2luZGlyZWN0KFNnX3NjYXR0ZXJfaG9sZCAqIHNjaHAsIFNnX2ZkICogc2ZwLCBpbnQgYnVmZl9zaXplKVxuZHJpdmVycy9zY3NpL3NnLmMtMTg1NS17XG4tLVxuZHJpdmVycy9zY3NpL3NnLmMtMTg2Ny1cdFNDU0lfTE9HX1RJTUVPVVQoNCwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc2ZwLVx1MDAzZXBhcmVudGRwLFxuZHJpdmVycy9zY3NpL3NnLmM6MTg2ODpcdFx0XCYjMzQ7c2dfYnVpbGRfaW5kaXJlY3Q6IGJ1ZmZfc2l6ZT0lZCwgYmxrX3NpemU9JWRcXG5cJiMzNDssXG5kcml2ZXJzL3Njc2kvc2cuYy0xODY5LVx0XHRidWZmX3NpemUsIGJsa19zaXplKSk7XG4tLVxuZHJpdmVycy9zY3NpL3NnLmMtMTkwNy1cdFx0U0NTSV9MT0dfVElNRU9VVCg1LCBzZ19wcmludGsoS0VSTl9JTkZPLCBzZnAtXHUwMDNlcGFyZW50ZHAsXG5kcml2ZXJzL3Njc2kvc2cuYzoxOTA4Olx0XHRcdFx0IFwmIzM0O3NnX2J1aWxkX2luZGlyZWN0OiBrPSVkLCBudW09JWQsIHJldF9zej0lZFxcblwmIzM0OyxcbmRyaXZlcnMvc2NzaS9zZy5jLTE5MDktXHRcdFx0XHQgaywgbnVtLCByZXRfc3opKTtcbi0tXG5kcml2ZXJzL3Njc2kvc2cuYy0xOTE0LVx0U0NTSV9MT0dfVElNRU9VVCg1LCBzZ19wcmludGsoS0VSTl9JTkZPLCBzZnAtXHUwMDNlcGFyZW50ZHAsXG5kcml2ZXJzL3Njc2kvc2cuYzoxOTE1Olx0XHRcdCBcJiMzNDtzZ19idWlsZF9pbmRpcmVjdDoga191c2Vfc2c9JWQsIHJlbV9zej0lZFxcblwmIzM0OyxcbmRyaXZlcnMvc2NzaS9zZy5jLTE5MTYtXHRcdFx0IGssIHJlbV9zeikpO1xuLS1cbmRyaXZlcnMvc2NzaS9zZy5jPTE5ODk9c2dfYnVpbGRfcmVzZXJ2ZShTZ19mZCAqIHNmcCwgaW50IHJlcV9zaXplKVxuLS1cbmRyaXZlcnMvc2NzaS9zZy5jLTE5OTctXHRcdFx0cmVxX3NpemUgPSBQQUdFX1NJWkU7XG5kcml2ZXJzL3Njc2kvc2cuYzoxOTk4Olx0XHRpZiAoMCA9PSBzZ19idWlsZF9pbmRpcmVjdChzY2hwLCBzZnAsIHJlcV9zaXplKSlcbmRyaXZlcnMvc2NzaS9zZy5jLTE5OTktXHRcdFx0cmV0dXJuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTk5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEluZGlyZWN0IFNjYXR0ZXIvR2F0aGVyIEJ1ZmZlcnMgaW4gYHNnLmNgKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgc2cuY2AgZmlsZSBhbmQgdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIG9mIGluZGlyZWN0IHNjYXR0ZXIvZ2F0aGVyIGJ1ZmZlcnMuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyBjZW50ZXJlZCBhcm91bmQgdGhlIGludGVyYWN0aW9uIHdpdGggdXNlciBzcGFjZSDigJMgd2hlcmUgYXJlIHRoZXNlIGRhdGEgdHJhbnNmZXJzIGhhcHBlbmluZz8gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBjYWxscyB0aGF0IG1hbmFnZSB0aGUgcGFnZSB0cmFuc2ZlcnMgdG8gYW5kIGZyb20gdXNlciBzcGFjZS4gSSYjMzk7bGwgbmVlZCB0byBsb2NhdGUgdGhlIGluc3RhbmNlcyBvZiBlaXRoZXIgYGNvcHlfdG9fdXNlcmAgb3IgdGhlIGBzZ19yZWFkX294ZmVyYCBmdW5jdGlvbnMgd2l0aGluIHRoZSBgZHJpdmVycy9zY3NpL3NnLmNgIGRpcmVjdG9yeS4gVGhpcyB3aWxsIHNoZWQgbGlnaHQgb24gdGhlIG1lY2hhbmljcyBvZiBob3cgdGhpcyBoYXBwZW5zLiBJJiMzOTttIGtlZW4gdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgcG9pbnRzIHdoZXJlIHRoaXMgaGFwcGVucywgYW5kIGhvdyBpdCBpcyBwcm90ZWN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NnX3JlYWRfb3hmZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvc2cuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvc2cuYz0xOTA9c3RhdGljIGludCBzZ19jb21tb25fd3JpdGUoU2dfZmQgKiBzZnAsIFNnX3JlcXVlc3QgKiBzcnAsXG5kcml2ZXJzL3Njc2kvc2cuYy0xOTEtXHRcdFx0ICAgdW5zaWduZWQgY2hhciAqY21uZCwgaW50IHRpbWVvdXQsIGludCBibG9ja2luZyk7XG5kcml2ZXJzL3Njc2kvc2cuYzoxOTI6c3RhdGljIGludCBzZ19yZWFkX294ZmVyKFNnX3JlcXVlc3QgKiBzcnAsIGNoYXIgX191c2VyICpvdXRwLCBpbnQgbnVtX3JlYWRfeGZlcik7XG5kcml2ZXJzL3Njc2kvc2cuYy0xOTMtc3RhdGljIHZvaWQgc2dfcmVtb3ZlX3NjYXQoU2dfZmQgKiBzZnAsIFNnX3NjYXR0ZXJfaG9sZCAqIHNjaHApO1xuLS1cbmRyaXZlcnMvc2NzaS9zZy5jPTQzOD1zZ19yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqIHBwb3MpXG4tLVxuZHJpdmVycy9zY3NpL3NnLmMtNTM4LVx0XHRpZiAoY291bnQgXHUwMDNlIFNaX1NHX0hFQURFUikge1xuZHJpdmVycy9zY3NpL3NnLmM6NTM5Olx0XHRcdGlmIChzZ19yZWFkX294ZmVyKHNycCwgYnVmLCBjb3VudCAtIFNaX1NHX0hFQURFUikpIHtcbmRyaXZlcnMvc2NzaS9zZy5jLTU0MC1cdFx0XHRcdHJldHZhbCA9IC1FRkFVTFQ7XG4tLVxuZHJpdmVycy9zY3NpL3NnLmM9MTk1NT1zdGF0aWMgaW50XG5kcml2ZXJzL3Njc2kvc2cuYzoxOTU2OnNnX3JlYWRfb3hmZXIoU2dfcmVxdWVzdCAqIHNycCwgY2hhciBfX3VzZXIgKm91dHAsIGludCBudW1fcmVhZF94ZmVyKVxuZHJpdmVycy9zY3NpL3NnLmMtMTk1Ny17XG4tLVxuZHJpdmVycy9zY3NpL3NnLmMtMTk2MS1cdFNDU0lfTE9HX1RJTUVPVVQoNCwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc3JwLVx1MDAzZXBhcmVudGZwLVx1MDAzZXBhcmVudGRwLFxuZHJpdmVycy9zY3NpL3NnLmM6MTk2MjpcdFx0XHQgXCYjMzQ7c2dfcmVhZF9veGZlcjogbnVtX3JlYWRfeGZlcj0lZFxcblwmIzM0OyxcbmRyaXZlcnMvc2NzaS9zZy5jLTE5NjMtXHRcdFx0IG51bV9yZWFkX3hmZXIpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTMyNgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHNnX3JlYWRfb3hmZXJgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBTQ1NJIGdlbmVyaWMgZHJpdmVycyBoYW5kbGUgdGhlIGBzZ19yZWFkX294ZmVyYCBmdW5jdGlvbi4gSSBrbm93IHRoaXMgaXMgYSBjb3JlIHBpZWNlIG9mIHRoZSBTQ1NJIGdlbmVyaWMgaW50ZXJmYWNlLCBsaWtlbHkgcmVsYXRlZCB0byByZWFkIG9wZXJhdGlvbnMgYW5kIGRhdGEgdHJhbnNmZXIsIHNvIGl0JiMzOTtzIHdvcnRoIGEgZGVlcCBkaXZlLiBJJiMzOTttIGhlYWRpbmcgdG8gYGRyaXZlcnMvc2NzaS9zZy5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDE5NTUuIFRoYXQmIzM5O3MgdXN1YWxseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuIEkgZXhwZWN0IHRvIGJlIGxvb2tpbmcgZm9yIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgaG93IHRoZSBkYXRhIHRyYW5zZmVyIGlzIGluaXRpYXRlZCwgYW5kIGFueSBlcnJvciBoYW5kbGluZyBvciBmbG93IGNvbnRyb2wgbWVjaGFuaXNtcyB0aGF0IGFyZSBpbiBwbGF5LiBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IHRoaXMgZnVuY3Rpb24gd2lsbCBiZSB0aGUgd29ya2hvcnNlIGZvciBoYW5kbGluZyB0aGUgYWN0dWFsIHJlYWQgb3BlcmF0aW9uIGFmdGVyIHRoZSBTQ1NJIGNvbW1hbmQgaGFzIGJlZW4gc2V0dXAuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZSwgcHJvYmFibHkgdXNpbmcgRE1BIG9yIG90aGVyIGRhdGEgdHJhbnNmZXIgbWVjaGFuaXNtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvc2cuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5NTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTk1NTpcdHN0YXRpYyBpbnRcbjE5NTY6XHRzZ19yZWFkX294ZmVyKFNnX3JlcXVlc3QgKiBzcnAsIGNoYXIgX191c2VyICpvdXRwLCBpbnQgbnVtX3JlYWRfeGZlcilcbjE5NTc6XHR7XG4xOTU4Olx0XHRTZ19zY2F0dGVyX2hvbGQgKnNjaHAgPSBcdTAwMjZzcnAtXHUwMDNlZGF0YTtcbjE5NTk6XHRcdGludCBrLCBudW07XG4xOTYwOlx0XG4xOTYxOlx0XHRTQ1NJX0xPR19USU1FT1VUKDQsIHNnX3ByaW50ayhLRVJOX0lORk8sIHNycC1cdTAwM2VwYXJlbnRmcC1cdTAwM2VwYXJlbnRkcCxcbjE5NjI6XHRcdFx0XHQgXCYjMzQ7c2dfcmVhZF9veGZlcjogbnVtX3JlYWRfeGZlcj0lZFxcblwmIzM0OyxcbjE5NjM6XHRcdFx0XHQgbnVtX3JlYWRfeGZlcikpO1xuMTk2NDpcdFx0aWYgKCghb3V0cCkgfHwgKG51bV9yZWFkX3hmZXIgXHUwMDNjPSAwKSlcbjE5NjU6XHRcdFx0cmV0dXJuIDA7XG4xOTY2Olx0XG4xOTY3Olx0XHRudW0gPSAxIFx1MDAzY1x1MDAzYyAoUEFHRV9TSElGVCAmIzQzOyBzY2hwLVx1MDAzZXBhZ2Vfb3JkZXIpO1xuMTk2ODpcdFx0Zm9yIChrID0gMDsgayBcdTAwM2Mgc2NocC1cdTAwM2VrX3VzZV9zZyBcdTAwMjZcdTAwMjYgc2NocC1cdTAwM2VwYWdlc1trXTsgayYjNDM7JiM0MzspIHtcbjE5Njk6XHRcdFx0aWYgKG51bSBcdTAwM2UgbnVtX3JlYWRfeGZlcikge1xuMTk3MDpcdFx0XHRcdGlmIChjb3B5X3RvX3VzZXIob3V0cCwgcGFnZV9hZGRyZXNzKHNjaHAtXHUwMDNlcGFnZXNba10pLFxuMTk3MTpcdFx0XHRcdFx0XHQgICBudW1fcmVhZF94ZmVyKSlcbjE5NzI6XHRcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuMTk3MzpcdFx0XHRcdGJyZWFrO1xuMTk3NDpcdFx0XHR9IGVsc2Uge1xuMTk3NTpcdFx0XHRcdGlmIChjb3B5X3RvX3VzZXIob3V0cCwgcGFnZV9hZGRyZXNzKHNjaHAtXHUwMDNlcGFnZXNba10pLFxuMTk3NjpcdFx0XHRcdFx0XHQgICBudW0pKVxuMTk3NzpcdFx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4xOTc4Olx0XHRcdFx0bnVtX3JlYWRfeGZlciAtPSBudW07XG4xOTc5Olx0XHRcdFx0aWYgKG51bV9yZWFkX3hmZXIgXHUwMDNjPSAwKVxuMTk4MDpcdFx0XHRcdFx0YnJlYWs7XG4xOTgxOlx0XHRcdFx0b3V0cCAmIzQzOz0gbnVtO1xuMTk4MjpcdFx0XHR9XG4xOTgzOlx0XHR9XG4xOTg0Olx0XG4xOTg1Olx0XHRyZXR1cm4gMDtcbjE5ODY6XHR9XG4xOTg3Olx0XG4xOTg4Olx0c3RhdGljIHZvaWRcbjE5ODk6XHRzZ19idWlsZF9yZXNlcnZlKFNnX2ZkICogc2ZwLCBpbnQgcmVxX3NpemUpXG4xOTkwOlx0e1xuMTk5MTpcdFx0U2dfc2NhdHRlcl9ob2xkICpzY2hwID0gXHUwMDI2c2ZwLVx1MDAzZXJlc2VydmU7XG4xOTkyOlx0XG4xOTkzOlx0XHRTQ1NJX0xPR19USU1FT1VUKDQsIHNnX3ByaW50ayhLRVJOX0lORk8sIHNmcC1cdTAwM2VwYXJlbnRkcCxcbjE5OTQ6XHRcdFx0XHQgXCYjMzQ7c2dfYnVpbGRfcmVzZXJ2ZTogcmVxX3NpemU9JWRcXG5cJiMzNDssIHJlcV9zaXplKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjY4CgkJCQkJCQlvdXRwdXQ6IDI3MQoJCQkJCQkJdGhvdWdodHM6IDE3OTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTRyBNb2R1bGUmIzM5O3MgU2NhdHRlci1HYXRoZXIgRWxlbWVudCBTaXplIEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIHRyeWluZyB0byByZXRyYWNlIHRoZSBjb21taXQgaGlzdG9yeSB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgY2hhbmdlIHdhcyBtYWRlIGluIHRoZSBrZXJuZWwuIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgc3RhbmRhcmQ6IEkgd2FudCB0byBmaW5kIHRoZSBjb21taXQgbWVzc2FnZSwgdGhlIGF1dGhvciwgYW5kIGFueSByZWxldmFudCBjb250ZXh0LiBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIGBnaXQgbG9nYCwgdGhlbiBjb25zaWRlciBgZ3JlcHBlcmAsIGFuZCBpZiB0aGF0IGRvZXNuJiMzOTt0IHlpZWxkIHJlc3VsdHMsIEkmIzM5O2xsIHN3aXRjaCB0byBkaXJlY3RseSBncmVwcGluZyB0aGUgY29tbWl0IG1lc3NhZ2VzLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIGNvZGUgaXRzZWxmLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaG93IGBzY2F0dGVyX2VsZW1fc3pgIGlzIHVzZWQgd2l0aGluIHRoZSBgZHJpdmVycy9zY3NpL3NnLmNgIG1vZHVsZS4gSSBzZWUgaXQgdXNlZCBpbiBgaW5pdF9zZ2AgYW5kIGBzZ19idWlsZF9pbmRpcmVjdGAuIE15IHRob3VnaHQgcHJvY2VzcyBpcyB0byBleGFtaW5lIHRoZXNlIGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZSBjaGFuZ2UuIAoKSW4gYGluaXRfc2dgLCB0aGUgY29kZSBjaGVja3MgaWYgYHNjYXR0ZXJfZWxlbV9zemAgaXMgbGVzcyB0aGFuIGBQQUdFX1NJWkVgLCBhbmQgaWYgc28sIGl0IHNldHMgaXQgdG8gYFBBR0VfU0laRWAuIFRoZSBuZXh0IHBpZWNlIG9mIGNvZGUgaXMgaW4gYHNnX2J1aWxkX2luZGlyZWN0YCwgd2hlcmUgaXQgYXBwZWFycyB0aGF0IHRoZSBjb3JlIGlzc3VlIGlzIHRoZSB0eXBlIG9mIGBzY2F0dGVyX2VsZW1fc3pgLgoKVGhlIGNvcmUgbG9naWMgcmV2b2x2ZXMgYXJvdW5kIHRoZSBjaGVjayBgbnVtICZsdDsgUEFHRV9TSVpFYC4gSSBzZWUgbm93IHRoYXQgYHNjYXR0ZXJfZWxlbV9zemAgaXMgYW4gaW50ZWdlciwgd2hpbGUgYFBBR0VfU0laRWAgaXMgYW4gdW5zaWduZWQgbG9uZy4gVGhpcyBpcyB0aGUgY3J1eCBvZiB0aGUgcHJvYmxlbSEgQyYjMzk7cyBpbnRlZ2VyIGNvbnZlcnNpb24gcnVsZXMgbWVhbiB0aGF0IGEgbmVnYXRpdmUgdmFsdWUgd3JpdHRlbiB0byBgc2NhdHRlcl9lbGVtX3N6YCB3aWxsIGNhdXNlIGNvbXBhcmlzb24gZmFpbHVyZXMuIEEgbmVnYXRpdmUgdmFsdWUgaXMgY29udmVydGVkIHRvIGEgdmVyeSBsYXJnZSB1bnNpZ25lZCBudW1iZXIgZHVyaW5nIGNvbXBhcmlzb24sIGFuZCB0aHVzIHRoZSBjb2RlIHdpbGwgYmVoYXZlIGluIHVuZXhwZWN0ZWQgd2F5cy4KClNwZWNpZmljYWxseSwgdGhlIGBudW0gJmx0OyBQQUdFX1NJWkVgIGNoZWNrIGNhbiBmYWlsIGlmIG51bSBpcyBuZWdhdGl2ZSwgb3IgaWYgbnVtIGlzIGEgc21hbGwgbnVtYmVyIGFuZCB0aGUgY29kZSB0aGVuIGdvZXMgb24gdG8gdXNlIHRoZSBgbnVtYCB2YXJpYWJsZSBpbiBgZ2V0X29yZGVyKClgIHdoaWNoIGlzIGludmFsaWQgZm9yIG5lZ2F0aXZlIG51bWJlcnMuCgpUaGlzIGxlYWRzIHRvIHVuZGVmaW5lZCBiZWhhdmlvci4gU3BlY2lmaWNhbGx5LCB0aGUgY2FsbCB0byBgZ2V0X29yZGVyYCB3aXRoIGFuIGludmFsaWQgaW5wdXQgb3IgdGhlIHNoaWZ0IHRoYXQgZm9sbG93cyB0aGUgYHJldF9zeiA9IDEgJmx0OyZsdDsgKFBBR0VfU0hJRlQgJiM0Mzsgb3JkZXIpYCBzdGF0ZW1lbnQuIEV2ZW4gYSBzbWFsbCBwb3NpdGl2ZSBudW1iZXIgY2FuIGNhdXNlIGEgcHJvYmxlbSBiZWNhdXNlIGBudW1gIGlzIG5vdCB1cGRhdGVkIGFmdGVyIHRoZSBjaGVjay4KClNvLCB0aGUgY3J1Y2lhbCBwYXJ0IGlzIHVuZGVyc3RhbmRpbmcgKndoeSogdGhpcyBpbnRlZ2VyIHNpZ25lZG5lc3MgYnVnIHdhcyBpbnRyb2R1Y2VkLCBhbmQgaG93IHRoZSBjaGFuZ2VzIGZpeCBpdC4gVGhlIHBhdGNoIGFkZHJlc3NlcyB0aGlzIGlzc3VlIGJ5IHBlcmZvcm1pbmcgYSBwcm9wZXIgc2lnbmVkIGNvbXBhcmlzb246IGBudW0gJmx0OyAoaW50KVBBR0VfU0laRWAuIFRoaXMgcHJldmVudHMgaW52YWxpZCBhbGxvY2F0aW9uIG9yZGVyIGNhbGN1bGF0aW9uIGJ5IGNvcnJlY3RpbmcgdGhlIGludGVnZXIgc2lnbmVkbmVzcyBidWcuCgpOb3csIHRoZSBuZXh0IHN0ZXAgaXMgdG8gZXZhbHVhdGUgd2hldGhlciB0aGlzIHBhdGNoIG5lY2Vzc2l0YXRlcyB0aGUgdXNlIG9mIEtNU0FOLiBNeSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjcml0ZXJpYSBmb3IgS01TQU4gaXMgcHJldHR5IHNvbGlkLiBJdCYjMzk7cyBub3QgYSBnZW5lcmFsIGRlYnVnZ2luZyB0b29sOyBpdCYjMzk7cyBzcGVjaWFsaXplZCBmb3IgZGV0ZWN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBUaGUgY3J1Y2lhbCBydWxlIGlzICYjMzQ7VEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwgTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4mIzM0OyBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBhbnkga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIGZpZWxkcyBtaWdodCBub3QgYmUgaW5pdGlhbGl6ZWQsIGNvbmRpdGlvbmFsIGxvZ2ljIHJlbHlpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHRoZSBhbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMgb3IgYWx0ZXJhdGlvbnMgdG8gYm91bmRzIGNoZWNrcy4KCk9rYXksIGxldCYjMzk7cyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3QgY2FyZWZ1bGx5LgoqICAgRG9lcyB0aGUgcGF0Y2ggdG91Y2ggYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGU/IE5vLgoqICAgRG9lcyB0aGUgcGF0Y2ggaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uIFRoZSBhbGxvY2F0ZWQgcGFnZXMgYXJlIHplcm9lZC4KKiAgIERvZXMgdGhlIHBhdGNoIGFsdGVyIGJvdW5kcyBjaGVja3Mgb3IgZGF0YSBsZW5ndGhzIGluIGEgd2F5IHRoYXQgYWxsb3dzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIGJlIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gY29uZGl0aW9uYWxzPyBOby4gVGhlIG1haW4gYnVnIGJlaW5nIGZpeGVkIGlzIGFuIGludGVnZXIgc2lnbmVkbmVzcyBpc3N1ZS4KClRoZXJlZm9yZSwgc2luY2UgdGhlIGNvZGUgZml4ZXMgYW4gaW50ZWdlciBzaWduZWRuZXNzIGJ1ZywgYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0dXJlcywgcGFkZGluZ3MsIG9yIGluZm8tbGVha3MgaW52b2x2ZWQsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiBUaGlzIHBhdGNoIGZvY3VzZXMgb24gcHJldmVudGluZyBpbnZhbGlkIG1lbW9yeSBhbGxvY2F0aW9uIG9yZGVyIGFuZCBkb2VzIG5vdCBjcmVhdGUgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgcmVsYXRlZCBpc3N1ZXMuIEhlbmNlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGZhbHNlLCBhbmQgSSBuZWVkIHRvIHdyaXRlIHRoaXMgZXhwbGFuYXRpb24gaW4gdGhlIHRvb2wgY2FsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBzaWduZWRuZXNzIGlzc3VlIGluIGRyaXZlcnMvc2NzaS9zZy5jIChzZ19idWlsZF9pbmRpcmVjdCkuIFNwZWNpZmljYWxseSwgY29tcGFyaW5nIHRoZSBzaWduZWQgaW50ICYjMzk7bnVtJiMzOTsgdG8gdW5zaWduZWQgbG9uZyAmIzM5O1BBR0VfU0laRSYjMzk7IHJlc3VsdGVkIGluIHNpZ25lZC10by11bnNpZ25lZCB0eXBlIHByb21vdGlvbiwgYWxsb3dpbmcgbmVnYXRpdmUgdmFsdWVzIG9mIHRoZSAmIzM5O3NjYXR0ZXJfZWxlbV9zeiYjMzk7IG1vZHVsZSBwYXJhbWV0ZXIgdG8gYnlwYXNzIHRoZSBtaW5pbXVtIGJvdW5kIGNoZWNrIGFuZCBsZWFkIHRvIGludmFsaWQgcGFnZSBhbGxvY2F0aW9uIG9yZGVycyBhbmQgdW5kZWZpbmVkIHNoaWZ0IGJlaGF2aW9yLiBUaGUgcGF0Y2ggY2FzdHMgUEFHRV9TSVpFIHRvIGludCBhbmQgc2V0cyBudW0gPSBQQUdFX1NJWkUgd2hlbiBudW0gXHUwMDNjIChpbnQpUEFHRV9TSVpFLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OlxuMS4gJiMzOTtudW0mIzM5OyBhbmQgJiMzOTtzY2F0dGVyX2VsZW1fc3omIzM5OyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgdmFsdWVzLlxuMi4gVGhlIHNjYXR0ZXItZ2F0aGVyIGJ1ZmZlciBhbGxvY2F0aW9ucyBpbiBzZ19idWlsZF9pbmRpcmVjdCB1c2Uga3phbGxvYyBmb3IgdGhlIHBvaW50ZXIgYXJyYXkgYW5kIF9fR0ZQX1pFUk8gZm9yIHRoZSB1bmRlcmx5aW5nIHBhZ2UgYWxsb2NhdGlvbnMuXG4zLiBObyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIHN0YWNrIHZhcmlhYmxlcywgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCBidWZmZXJzIGNvcGllZCB0byB1c2Vyc3BhY2UgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC5cbkFueSBwb3RlbnRpYWwgaXNzdWVzIGZyb20gdGhlIGJ1ZyAoc3VjaCBhcyBpbnZhbGlkIGFsbG9jYXRpb24gb3JkZXJzIG9yIHNoaWZ0cykgZmFsbCB1bmRlciBzdGFuZGFyZCBVQlNBTi9LQVNBTiBkZXRlY3Rpb24gcmF0aGVyIHRoYW4gS01TQU4gdW5pbml0aWFsaXplZCBtZW1vcnkgdHJhY2tpbmcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIHNpZ25lZG5lc3MgaXNzdWUgaW4gZHJpdmVycy9zY3NpL3NnLmMgKHNnX2J1aWxkX2luZGlyZWN0KS4gU3BlY2lmaWNhbGx5LCBjb21wYXJpbmcgdGhlIHNpZ25lZCBpbnQgJiMzOTtudW0mIzM5OyB0byB1bnNpZ25lZCBsb25nICYjMzk7UEFHRV9TSVpFJiMzOTsgcmVzdWx0ZWQgaW4gc2lnbmVkLXRvLXVuc2lnbmVkIHR5cGUgcHJvbW90aW9uLCBhbGxvd2luZyBuZWdhdGl2ZSB2YWx1ZXMgb2YgdGhlICYjMzk7c2NhdHRlcl9lbGVtX3N6JiMzOTsgbW9kdWxlIHBhcmFtZXRlciB0byBieXBhc3MgdGhlIG1pbmltdW0gYm91bmQgY2hlY2sgYW5kIGxlYWQgdG8gaW52YWxpZCBwYWdlIGFsbG9jYXRpb24gb3JkZXJzIGFuZCB1bmRlZmluZWQgc2hpZnQgYmVoYXZpb3IuIFRoZSBwYXRjaCBjYXN0cyBQQUdFX1NJWkUgdG8gaW50IGFuZCBzZXRzIG51bSA9IFBBR0VfU0laRSB3aGVuIG51bSBcdTAwM2MgKGludClQQUdFX1NJWkUuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnk6XG4xLiAmIzM5O251bSYjMzk7IGFuZCAmIzM5O3NjYXR0ZXJfZWxlbV9zeiYjMzk7IGFyZSBmdWxseSBpbml0aWFsaXplZCB2YWx1ZXMuXG4yLiBUaGUgc2NhdHRlci1nYXRoZXIgYnVmZmVyIGFsbG9jYXRpb25zIGluIHNnX2J1aWxkX2luZGlyZWN0IHVzZSBremFsbG9jIGZvciB0aGUgcG9pbnRlciBhcnJheSBhbmQgX19HRlBfWkVSTyBmb3IgdGhlIHVuZGVybHlpbmcgcGFnZSBhbGxvY2F0aW9ucy5cbjMuIE5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgc3RhY2sgdmFyaWFibGVzLCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgY29waWVkIHRvIHVzZXJzcGFjZSBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLlxuQW55IHBvdGVudGlhbCBpc3N1ZXMgZnJvbSB0aGUgYnVnIChzdWNoIGFzIGludmFsaWQgYWxsb2NhdGlvbiBvcmRlcnMgb3Igc2hpZnRzKSBmYWxsIHVuZGVyIHN0YW5kYXJkIFVCU0FOL0tBU0FOIGRldGVjdGlvbiByYXRoZXIgdGhhbiBLTVNBTiB1bmluaXRpYWxpemVkIG1lbW9yeSB0cmFja2luZy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDQ6MjQuMDE3Mjg4NzE3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkxOTYyMjA0OTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNIUl9ERVZfU0dcIixcbiAgICBcIlNDU0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZ19idWlsZF9pbmRpcmVjdFwiLFxuICAgIFwic2dfYnVpbGRfcmVzZXJ2ZVwiLFxuICAgIFwic2dfc3RhcnRfcmVxXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIHNpZ25lZG5lc3MgaXNzdWUgaW4gZHJpdmVycy9zY3NpL3NnLmMgKHNnX2J1aWxkX2luZGlyZWN0KS4gU3BlY2lmaWNhbGx5LCBjb21wYXJpbmcgdGhlIHNpZ25lZCBpbnQgJ251bScgdG8gdW5zaWduZWQgbG9uZyAnUEFHRV9TSVpFJyByZXN1bHRlZCBpbiBzaWduZWQtdG8tdW5zaWduZWQgdHlwZSBwcm9tb3Rpb24sIGFsbG93aW5nIG5lZ2F0aXZlIHZhbHVlcyBvZiB0aGUgJ3NjYXR0ZXJfZWxlbV9zeicgbW9kdWxlIHBhcmFtZXRlciB0byBieXBhc3MgdGhlIG1pbmltdW0gYm91bmQgY2hlY2sgYW5kIGxlYWQgdG8gaW52YWxpZCBwYWdlIGFsbG9jYXRpb24gb3JkZXJzIGFuZCB1bmRlZmluZWQgc2hpZnQgYmVoYXZpb3IuIFRoZSBwYXRjaCBjYXN0cyBQQUdFX1NJWkUgdG8gaW50IGFuZCBzZXRzIG51bSA9IFBBR0VfU0laRSB3aGVuIG51bSBcXHUwMDNjIChpbnQpUEFHRV9TSVpFLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnk6XFxuMS4gJ251bScgYW5kICdzY2F0dGVyX2VsZW1fc3onIGFyZSBmdWxseSBpbml0aWFsaXplZCB2YWx1ZXMuXFxuMi4gVGhlIHNjYXR0ZXItZ2F0aGVyIGJ1ZmZlciBhbGxvY2F0aW9ucyBpbiBzZ19idWlsZF9pbmRpcmVjdCB1c2Uga3phbGxvYyBmb3IgdGhlIHBvaW50ZXIgYXJyYXkgYW5kIF9fR0ZQX1pFUk8gZm9yIHRoZSB1bmRlcmx5aW5nIHBhZ2UgYWxsb2NhdGlvbnMuXFxuMy4gTm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBzdGFjayB2YXJpYWJsZXMsIHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBjb3BpZWQgdG8gdXNlcnNwYWNlIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuXFxuQW55IHBvdGVudGlhbCBpc3N1ZXMgZnJvbSB0aGUgYnVnIChzdWNoIGFzIGludmFsaWQgYWxsb2NhdGlvbiBvcmRlcnMgb3Igc2hpZnRzKSBmYWxsIHVuZGVyIHN0YW5kYXJkIFVCU0FOL0tBU0FOIGRldGVjdGlvbiByYXRoZXIgdGhhbiBLTVNBTiB1bmluaXRpYWxpemVkIG1lbW9yeSB0cmFja2luZy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzZ19idWlsZF9pbmRpcmVjdCgpIGluIHRoZSBTQ1NJIGdlbmVyaWMgKHNnKSBkcml2ZXIgdG8gcHJvcGVybHkgY2xhbXAgc2NhdHRlcl9lbGVtX3N6IHdoZW4gaXQgaXMgc21hbGxlciB0aGFuIFBBR0VfU0laRSBvciBuZWdhdGl2ZSAocHJldmVudGluZyBzaWduZWQgaW50ZWdlciBjb21wYXJpc29uIGlzc3VlcyBhbmQgaW52YWxpZCBwYWdlIG9yZGVycyBmb3IgZ2V0X29yZGVyKS4gVGhlIHNnIGRyaXZlciBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHdpdGggZW11bGF0ZWQgU0NTSSBkZXZpY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NDoyNC4wMTcyOTQ4MTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMzg1NDEyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQxMzUyOTQ4OWY2Y2NlNDI1MGYzNzU5ODczNmM2OWZlYmVmMzBiODhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgMTQgMDg6NDQ6MjMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NnLmMgYi9kcml2ZXJzL3Njc2kvc2cuY1xcbmluZGV4IDU0MDhmMDAyZTZjMDEuLjM5YzhlNTJmYTZmZjYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9zY3NpL3NnLmNcXG4rKysgYi9kcml2ZXJzL3Njc2kvc2cuY1xcbkBAIC0xODc1LDkgKzE4NzUsMTAgQEAgc2dfYnVpbGRfaW5kaXJlY3QoU2dfc2NhdHRlcl9ob2xkICogc2NocCwgU2dfZmQgKiBzZnAsIGludCBidWZmX3NpemUpXFxuIFxcbiBcXHRudW0gPSBzY2F0dGVyX2VsZW1fc3o7XFxuIFxcdGlmICh1bmxpa2VseShudW0gIT0gc2NhdHRlcl9lbGVtX3N6X3ByZXYpKSB7XFxuLVxcdFxcdGlmIChudW0gXFx1MDAzYyBQQUdFX1NJWkUpIHtcXG4rXFx0XFx0aWYgKG51bSBcXHUwMDNjIChpbnQpUEFHRV9TSVpFKSB7XFxuIFxcdFxcdFxcdHNjYXR0ZXJfZWxlbV9zeiA9IFBBR0VfU0laRTtcXG4gXFx0XFx0XFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBQQUdFX1NJWkU7XFxuK1xcdFxcdFxcdG51bSA9IFBBR0VfU0laRTtcXG4gXFx0XFx0fSBlbHNlXFxuIFxcdFxcdFxcdHNjYXR0ZXJfZWxlbV9zel9wcmV2ID0gbnVtO1xcbiBcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjQ0OjI0LjU1MTk1ODkxN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTUzOTk2MTI2MzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNIUl9ERVZfU0dcIixcbiAgICBcIlNDU0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZ19idWlsZF9pbmRpcmVjdFwiLFxuICAgIFwic2dfYnVpbGRfcmVzZXJ2ZVwiLFxuICAgIFwic2dfc3RhcnRfcmVxXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc2dfYnVpbGRfaW5kaXJlY3QoKSBpbiB0aGUgU0NTSSBnZW5lcmljIChzZykgZHJpdmVyIHRvIHByb3Blcmx5IGNsYW1wIHNjYXR0ZXJfZWxlbV9zeiB3aGVuIGl0IGlzIHNtYWxsZXIgdGhhbiBQQUdFX1NJWkUgb3IgbmVnYXRpdmUgKHByZXZlbnRpbmcgc2lnbmVkIGludGVnZXIgY29tcGFyaXNvbiBpc3N1ZXMgYW5kIGludmFsaWQgcGFnZSBvcmRlcnMgZm9yIGdldF9vcmRlcikuIFRoZSBzZyBkcml2ZXIgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB3aXRoIGVtdWxhdGVkIFNDU0kgZGV2aWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0MTM1Mjk0ODlmNmNjZTQyNTBmMzc1OTg3MzZjNjlmZWJlZjMwYjg4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMDg6NDQ6MjMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2cuYyBiL2RyaXZlcnMvc2NzaS9zZy5jXG5pbmRleCA1NDA4ZjAwMmU2YzAxLi4zOWM4ZTUyZmE2ZmY2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9zY3NpL3NnLmNcbisrKyBiL2RyaXZlcnMvc2NzaS9zZy5jXG5AQCAtMTg3NSw5ICsxODc1LDEwIEBAIHNnX2J1aWxkX2luZGlyZWN0KFNnX3NjYXR0ZXJfaG9sZCAqIHNjaHAsIFNnX2ZkICogc2ZwLCBpbnQgYnVmZl9zaXplKVxuIFxuIFx0bnVtID0gc2NhdHRlcl9lbGVtX3N6O1xuIFx0aWYgKHVubGlrZWx5KG51bSAhPSBzY2F0dGVyX2VsZW1fc3pfcHJldikpIHtcbi1cdFx0aWYgKG51bSBcdTAwM2MgUEFHRV9TSVpFKSB7XG4rXHRcdGlmIChudW0gXHUwMDNjIChpbnQpUEFHRV9TSVpFKSB7XG4gXHRcdFx0c2NhdHRlcl9lbGVtX3N6ID0gUEFHRV9TSVpFO1xuIFx0XHRcdHNjYXR0ZXJfZWxlbV9zel9wcmV2ID0gUEFHRV9TSVpFO1xuK1x0XHRcdG51bSA9IFBBR0VfU0laRTtcbiBcdFx0fSBlbHNlXG4gXHRcdFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBudW07XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NDoyNC41NTE5NjA1ODdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMzI0ODg1NjI2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTQ1NJIERyaXZlciBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBjb21taXQuIFRoZSBkaWZmIGltbWVkaWF0ZWx5IGZsYWdzIGBkcml2ZXJzL3Njc2kvc2cuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgYSBzZWN0aW9uIGNvbmNlcm5pbmcgc2NhdHRlci1nYXRoZXIgbGlzdCBidWlsZGluZy4gSSBzZWUgYSBjaGFuZ2Ugd2l0aGluIHRoZSBgc2dfYnVpbGRfaW5kaXJlY3RgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBgc2NhdHRlcl9lbGVtX3N6YCBhbmQgYSByZWxhdGVkIHZhcmlhYmxlLCBgc2NhdHRlcl9lbGVtX3N6X3ByZXZgLiBUaGUgY29yZSBsb2dpYyBoZXJlIGFwcGVhcnMgdG8gYmUgYWRqdXN0aW5nIGBzY2F0dGVyX2VsZW1fc3pgIGlmIGl0cyBpbml0aWFsIHZhbHVlIGBudW1gIGlzIHNtYWxsZXIgdGhhbiBgUEFHRV9TSVpFYC4gVGhlIGFkZGl0aW9uIG9mIHRoZSBjb25kaXRpb25hbCBgKGludClQQUdFX1NJWkVgIGNhc3RzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eSBmaXgsIG9yIGF0IGxlYXN0IGEgc2FmZWd1YXJkIHRvIGVuc3VyZSB0aGUgY29tcGFyaXNvbiB3b3JrcyBhcyBpbnRlbmRlZCBhY3Jvc3MgZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMuIFRoZSBgbnVtID0gUEFHRV9TSVpFO2AgYXNzaWdubWVudCB3aXRoaW4gdGhlIGBpZmAgYmxvY2sgY29uZmlybXMgdGhhdCBpdCB3aWxsIGJlIHVwZGF0ZWQuIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIFNDU0kgbGF5ZXIsIEknbSBhbHJlYWR5IGZvcm11bGF0aW5nIHNvbWUgaHlwb3RoZXNlcyBhYm91dCB0aGUgb3JpZ2luYWwgaXNzdWUgYW5kIHRoZSBpbnRlbnQgb2YgdGhpcyBmaXguIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHBvc3NpYmx5IHJlbGF0ZWQgY29tbWl0cyB0byBmdWxseSBncmFzcCB0aGUgY29udGV4dCBhbmQgcG90ZW50aWFsIHJhbWlmaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MTAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NDo1Ny44MDA4MjAxNzJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzYzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9zY3NpL3NnLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTg2MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTg2MDpcXHRcXG4xODYxOlxcdFxcdGlmIChibGtfc2l6ZSBcXHUwMDNjIDApXFxuMTg2MjpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4xODYzOlxcdFxcdGlmICgwID09IGJsa19zaXplKVxcbjE4NjQ6XFx0XFx0XFx0KytibGtfc2l6ZTtcXHQvKiBkb24ndCBrbm93IHdoeSAqL1xcbjE4NjU6XFx0XFx0Lyogcm91bmQgcmVxdWVzdCB1cCB0byBuZXh0IGhpZ2hlc3QgU0dfU0VDVE9SX1NaIGJ5dGUgYm91bmRhcnkgKi9cXG4xODY2OlxcdFxcdGJsa19zaXplID0gQUxJR04oYmxrX3NpemUsIFNHX1NFQ1RPUl9TWik7XFxuMTg2NzpcXHRcXHRTQ1NJX0xPR19USU1FT1VUKDQsIHNnX3ByaW50ayhLRVJOX0lORk8sIHNmcC1cXHUwMDNlcGFyZW50ZHAsXFxuMTg2ODpcXHRcXHRcXHRcXFwic2dfYnVpbGRfaW5kaXJlY3Q6IGJ1ZmZfc2l6ZT0lZCwgYmxrX3NpemU9JWRcXFxcblxcXCIsXFxuMTg2OTpcXHRcXHRcXHRidWZmX3NpemUsIGJsa19zaXplKSk7XFxuMTg3MDpcXHRcXG4xODcxOlxcdFxcdC8qIE4uQi4gcmV0X3N6IGNhcnJpZWQgaW50byB0aGlzIGJsb2NrIC4uLiAqL1xcbjE4NzI6XFx0XFx0bXhfc2NfZWxlbXMgPSBzZ19idWlsZF9zZ2F0KHNjaHAsIHNmcCwgc2dfdGFibGVzaXplKTtcXG4xODczOlxcdFxcdGlmIChteF9zY19lbGVtcyBcXHUwMDNjIDApXFxuMTg3NDpcXHRcXHRcXHRyZXR1cm4gbXhfc2NfZWxlbXM7XFx0LyogbW9zdCBsaWtlbHkgLUVOT01FTSAqL1xcbjE4NzU6XFx0XFxuMTg3NjpcXHRcXHRudW0gPSBzY2F0dGVyX2VsZW1fc3o7XFxuMTg3NzpcXHRcXHRpZiAodW5saWtlbHkobnVtICE9IHNjYXR0ZXJfZWxlbV9zel9wcmV2KSkge1xcbjE4Nzg6XFx0XFx0XFx0aWYgKG51bSBcXHUwMDNjIChpbnQpUEFHRV9TSVpFKSB7XFxuMTg3OTpcXHRcXHRcXHRcXHRzY2F0dGVyX2VsZW1fc3ogPSBQQUdFX1NJWkU7XFxuMTg4MDpcXHRcXHRcXHRcXHRzY2F0dGVyX2VsZW1fc3pfcHJldiA9IFBBR0VfU0laRTtcXG4xODgxOlxcdFxcdFxcdFxcdG51bSA9IFBBR0VfU0laRTtcXG4xODgyOlxcdFxcdFxcdH0gZWxzZVxcbjE4ODM6XFx0XFx0XFx0XFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBudW07XFxuMTg4NDpcXHRcXHR9XFxuMTg4NTpcXHRcXG4xODg2OlxcdFxcdG9yZGVyID0gZ2V0X29yZGVyKG51bSk7XFxuMTg4NzpcXHRyZXRyeTpcXG4xODg4OlxcdFxcdHJldF9zeiA9IDEgXFx1MDAzY1xcdTAwM2MgKFBBR0VfU0hJRlQgKyBvcmRlcik7XFxuMTg4OTpcXHRcXG4xODkwOlxcdFxcdGZvciAoayA9IDAsIHJlbV9zeiA9IGJsa19zaXplOyByZW1fc3ogXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IGsgXFx1MDAzYyBteF9zY19lbGVtcztcXG4xODkxOlxcdFxcdCAgICAgaysrLCByZW1fc3ogLT0gcmV0X3N6KSB7XFxuMTg5MjpcXHRcXG4xODkzOlxcdFxcdFxcdG51bSA9IChyZW1fc3ogXFx1MDAzZSBzY2F0dGVyX2VsZW1fc3pfcHJldikgP1xcbjE4OTQ6XFx0XFx0XFx0XFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgOiByZW1fc3o7XFxuMTg5NTpcXHRcXG4xODk2OlxcdFxcdFxcdHNjaHAtXFx1MDAzZXBhZ2VzW2tdID0gYWxsb2NfcGFnZXMoZ2ZwX21hc2ssIG9yZGVyKTtcXG4xODk3OlxcdFxcdFxcdGlmICghc2NocC1cXHUwMDNlcGFnZXNba10pXFxuMTg5ODpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4xODk5OlxcdFxcbjE5MDA6XFx0XFx0XFx0aWYgKG51bSA9PSBzY2F0dGVyX2VsZW1fc3pfcHJldikge1xcbjE5MDE6XFx0XFx0XFx0XFx0aWYgKHVubGlrZWx5KHJldF9zeiBcXHUwMDNlIHNjYXR0ZXJfZWxlbV9zel9wcmV2KSkge1xcbjE5MDI6XFx0XFx0XFx0XFx0XFx0c2NhdHRlcl9lbGVtX3N6ID0gcmV0X3N6O1xcbjE5MDM6XFx0XFx0XFx0XFx0XFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgPSByZXRfc3o7XFxuMTkwNDpcXHRcXHRcXHRcXHR9XFxuMTkwNTpcXHRcXHRcXHR9XFxuMTkwNjpcXHRcXG4xOTA3OlxcdFxcdFxcdFNDU0lfTE9HX1RJTUVPVVQoNSwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc2ZwLVxcdTAwM2VwYXJlbnRkcCxcXG4xOTA4OlxcdFxcdFxcdFxcdFxcdCBcXFwic2dfYnVpbGRfaW5kaXJlY3Q6IGs9JWQsIG51bT0lZCwgcmV0X3N6PSVkXFxcXG5cXFwiLFxcbjE5MDk6XFx0XFx0XFx0XFx0XFx0IGssIG51bSwgcmV0X3N6KSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjQ0OjU3LjgwMDk5OTU4MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIxOTYzNDgzOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGluZWFnZSBvZiBgc2NhdHRlcl9lbGVtX3N6YCBhbmQgaG93IHRoZSBkcml2ZXIgYHNnLmNgIGFjdHVhbGx5IHV0aWxpemVzIGl0LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB0cmFjZSBiYWNrIHRoZSB2YXJpYWJsZSdzIGRlZmluaXRpb24gYW5kIHVzYWdlLCBzbyBsZXQncyBnZXQgdGhhdCBkb25lLlxuXG4qKlRyYWNraW5nIHRoZSBgc2NhdHRlcl9lbGVtX3N6YCBWYXJpYWJsZSoqXG5cblJpZ2h0LCBsZXQgbWUga2ljayBvZmYgYSBncmVwIHNlYXJjaCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgd2l0aGluIGBkcml2ZXJzL3Njc2kvc2cuY2AgZm9yIGFueSBpbnN0YW5jZXMgb2YgYHNjYXR0ZXJfZWxlbV9zemAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBpbiB0aGUgc3lzdGVtLiBJJ20gaG9waW5nIHRoaXMgc2VhcmNoIHdpbGwgbGVhZCBtZSB0byB0aGUga2V5IHNlY3Rpb25zIG9mIGNvZGUgd2hlcmUgdGhlIHZhcmlhYmxlIGlzIGVpdGhlciBkZWZpbmVkLCBhc3NpZ25lZCBhIHZhbHVlLCBvciBtb3N0IGltcG9ydGFudGx5LCAqdXNlZCouIEZyb20gdGhlcmUsIEkgY2FuIGJlZ2luIHRvIGRyYXcgY29ubmVjdGlvbnMgYW5kIHNlZSBob3cgZGF0YSBpcyBzdHJ1Y3R1cmVkIGFuZCBwYXNzZWQgdGhyb3VnaCB0aGUgdmFyaW91cyBmdW5jdGlvbiBjYWxscy4gVGhpcyB3aWxsIHByb3ZpZGUgYSBjcnVjaWFsIGluc2lnaHQgaW50byBkYXRhIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNDUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjQ0OjU5Ljk5NzM1MTg5OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjAzMDQ1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY2F0dGVyX2VsZW1fc3pcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zY3NpL3NnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zY3NpL3NnLmM9OTI9c3RhdGljIGludCBzZ19hbGxvd19kaW8gPSBTR19BTExPV19ESU9fREVGO1xcbmRyaXZlcnMvc2NzaS9zZy5jLTkzLVxcbmRyaXZlcnMvc2NzaS9zZy5jOjk0OnN0YXRpYyBpbnQgc2NhdHRlcl9lbGVtX3N6ID0gU0dfU0NBVFRFUl9TWjtcXG5kcml2ZXJzL3Njc2kvc2cuYzo5NTpzdGF0aWMgaW50IHNjYXR0ZXJfZWxlbV9zel9wcmV2ID0gU0dfU0NBVFRFUl9TWjtcXG5kcml2ZXJzL3Njc2kvc2cuYy05Ni1cXG4tLVxcbmRyaXZlcnMvc2NzaS9zZy5jPTE1OTA9c2dfcmVtb3ZlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpjbF9kZXYpXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2cuYy0xNjIzLVxcbmRyaXZlcnMvc2NzaS9zZy5jOjE2MjQ6bW9kdWxlX3BhcmFtX25hbWVkKHNjYXR0ZXJfZWxlbV9zeiwgc2NhdHRlcl9lbGVtX3N6LCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTtcXG5kcml2ZXJzL3Njc2kvc2cuYy0xNjI1LW1vZHVsZV9wYXJhbV9uYW1lZChhbGxvd19kaW8sIHNnX2FsbG93X2RpbywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2cuYz0xNjU4PU1PRFVMRV9BTElBU19DSEFSREVWX01BSk9SKFNDU0lfR0VORVJJQ19NQUpPUik7XFxuZHJpdmVycy9zY3NpL3NnLmMtMTY1OS1cXG5kcml2ZXJzL3Njc2kvc2cuYzoxNjYwOk1PRFVMRV9QQVJNX0RFU0Moc2NhdHRlcl9lbGVtX3N6LCBcXFwic2NhdHRlciBnYXRoZXIgZWxlbWVudCBcXFwiXFxuZHJpdmVycy9zY3NpL3NnLmMtMTY2MS0gICAgICAgICAgICAgICAgXFxcInNpemUgKGRlZmF1bHQ6IG1heChTR19TQ0FUVEVSX1NaLCBQQUdFX1NJWkUpKVxcXCIpO1xcbi0tXFxuZHJpdmVycy9zY3NpL3NnLmM9MTY2Nj1pbml0X3NnKHZvaWQpXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2cuYy0xNjY5LVxcbmRyaXZlcnMvc2NzaS9zZy5jOjE2NzA6XFx0aWYgKHNjYXR0ZXJfZWxlbV9zeiBcXHUwMDNjIFBBR0VfU0laRSkge1xcbmRyaXZlcnMvc2NzaS9zZy5jOjE2NzE6XFx0XFx0c2NhdHRlcl9lbGVtX3N6ID0gUEFHRV9TSVpFO1xcbmRyaXZlcnMvc2NzaS9zZy5jOjE2NzI6XFx0XFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBzY2F0dGVyX2VsZW1fc3o7XFxuZHJpdmVycy9zY3NpL3NnLmMtMTY3My1cXHR9XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2cuYz0xODU0PXNnX2J1aWxkX2luZGlyZWN0KFNnX3NjYXR0ZXJfaG9sZCAqIHNjaHAsIFNnX2ZkICogc2ZwLCBpbnQgYnVmZl9zaXplKVxcbi0tXFxuZHJpdmVycy9zY3NpL3NnLmMtMTg3NS1cXG5kcml2ZXJzL3Njc2kvc2cuYzoxODc2OlxcdG51bSA9IHNjYXR0ZXJfZWxlbV9zejtcXG5kcml2ZXJzL3Njc2kvc2cuYzoxODc3OlxcdGlmICh1bmxpa2VseShudW0gIT0gc2NhdHRlcl9lbGVtX3N6X3ByZXYpKSB7XFxuZHJpdmVycy9zY3NpL3NnLmMtMTg3OC1cXHRcXHRpZiAobnVtIFxcdTAwM2MgKGludClQQUdFX1NJWkUpIHtcXG5kcml2ZXJzL3Njc2kvc2cuYzoxODc5OlxcdFxcdFxcdHNjYXR0ZXJfZWxlbV9zeiA9IFBBR0VfU0laRTtcXG5kcml2ZXJzL3Njc2kvc2cuYzoxODgwOlxcdFxcdFxcdHNjYXR0ZXJfZWxlbV9zel9wcmV2ID0gUEFHRV9TSVpFO1xcbmRyaXZlcnMvc2NzaS9zZy5jLTE4ODEtXFx0XFx0XFx0bnVtID0gUEFHRV9TSVpFO1xcbmRyaXZlcnMvc2NzaS9zZy5jLTE4ODItXFx0XFx0fSBlbHNlXFxuZHJpdmVycy9zY3NpL3NnLmM6MTg4MzpcXHRcXHRcXHRzY2F0dGVyX2VsZW1fc3pfcHJldiA9IG51bTtcXG5kcml2ZXJzL3Njc2kvc2cuYy0xODg0LVxcdH1cXG4tLVxcbmRyaXZlcnMvc2NzaS9zZy5jLTE4OTItXFxuZHJpdmVycy9zY3NpL3NnLmM6MTg5MzpcXHRcXHRudW0gPSAocmVtX3N6IFxcdTAwM2Ugc2NhdHRlcl9lbGVtX3N6X3ByZXYpID9cXG5kcml2ZXJzL3Njc2kvc2cuYzoxODk0OlxcdFxcdFxcdHNjYXR0ZXJfZWxlbV9zel9wcmV2IDogcmVtX3N6O1xcbmRyaXZlcnMvc2NzaS9zZy5jLTE4OTUtXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2cuYy0xODk5LVxcbmRyaXZlcnMvc2NzaS9zZy5jOjE5MDA6XFx0XFx0aWYgKG51bSA9PSBzY2F0dGVyX2VsZW1fc3pfcHJldikge1xcbmRyaXZlcnMvc2NzaS9zZy5jOjE5MDE6XFx0XFx0XFx0aWYgKHVubGlrZWx5KHJldF9zeiBcXHUwMDNlIHNjYXR0ZXJfZWxlbV9zel9wcmV2KSkge1xcbmRyaXZlcnMvc2NzaS9zZy5jOjE5MDI6XFx0XFx0XFx0XFx0c2NhdHRlcl9lbGVtX3N6ID0gcmV0X3N6O1xcbmRyaXZlcnMvc2NzaS9zZy5jOjE5MDM6XFx0XFx0XFx0XFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgPSByZXRfc3o7XFxuZHJpdmVycy9zY3NpL3NnLmMtMTkwNC1cXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjQ1OjAwLjA2MzM4ODM0M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIwODgzMzUzOTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU2NhdHRlci9HYXRoZXIgRWxlbWVudCBTaXplIGluIHRoZSBTQ1NJIEdlbmVyaWMgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgc2NhdHRlcl9lbGVtX3N6YCBwYXJhbWV0ZXIgaW4gdGhlIGBzZy5jYCBtb2R1bGUsIHdoaWNoIGlzIHRoZSBTQ1NJIEdlbmVyaWMgZHJpdmVyIGFjY2Vzc2libGUgdmlhIGAvZGV2L3NnKmAuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGNhbiBJIGV2ZW4gKnJlYWNoKiB0aGlzIGRyaXZlciBpbiBhIHR5cGljYWwgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gWWVzLCB0aGFua2Z1bGx5LCBgQ09ORklHX0NIUl9ERVZfU0dgIG1ha2VzIGl0IGEgY2xhc3NpYyBkcml2ZXIuIFFFTVUncyB2aXJ0aW8tc2NzaSwgU0NTSSBlbXVsYXRpb24sIGFuZCBVU0IgbWFzcyBzdG9yYWdlIFNDU0kgZGV2aWNlcyBhbGwgZXhwb3NlIGAvZGV2L3NnKmAuIEFuZCBJIGtub3cgc3l6a2FsbGVyIHNwZWNpZmljYWxseSB0ZXN0cyBTQ1NJIGFuZCBgL2Rldi9zZypgIHRocm91Z2ggaXRzIGRlc2NyaXB0aW9ucywgc28gaXQncyBhIHZhbGlkIHRhcmdldC5cblxuTm93LCBsZXQncyB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZSBwYXRjaC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGlzc3VlIHRoaXMgaXMgZml4aW5nLiBJJ20gZm9jdXNpbmcgb24gdGhlIGBzZ19idWlsZF9pbmRpcmVjdGAgZnVuY3Rpb24uIEkgc2VlIHRoZSBjb3JlIGxvZ2ljIGludm9sdmluZyBgc2NhdHRlcl9lbGVtX3N6YCBhbmQgaG93IGl0J3MgaGFuZGxlZC5cblxuT2theSwgaGVyZSdzIHdoYXQncyBoYXBwZW5pbmcuIFRoZSBjb2RlIGNoZWNrcyBpZiBgbnVtYCBpcyBkaWZmZXJlbnQgZnJvbSBgc2NhdHRlcl9lbGVtX3N6X3ByZXZgLiBUaGVuLCBpdCBjb21wYXJlcyBpZiBgbnVtYCBpcyBsZXNzIHRoYW4gYFBBR0VfU0laRWAuIEJlZm9yZSB0aGUgZml4LCBpZiBgbnVtIFx1MDAzYyBQQUdFX1NJWkVgLCB0aGUgY29kZSB3b3VsZCBzZXQgYHNjYXR0ZXJfZWxlbV9zemAgYW5kIGBzY2F0dGVyX2VsZW1fc3pfcHJldmAgdG8gYFBBR0VfU0laRWAsIGJ1dCBpdCAqZGlkbid0KiB1cGRhdGUgYG51bWAhIFRoYXQncyBhIGh1Z2Ugb3ZlcnNpZ2h0LlxuXG5UaGluayBhYm91dCB0aGlzLiAgYFBBR0VfU0laRWAgaXMgdW5zaWduZWQsIHJpZ2h0PyBBbmQgYG51bWAgaXMgYSBzaWduZWQgaW50ZWdlci4gIElmIGBzY2F0dGVyX2VsZW1fc3pgIChhbmQgaGVuY2UgYG51bWApIHdhcyBzZXQgdG8gYSBuZWdhdGl2ZSB2YWx1ZSwgdGhlIHVuc2lnbmVkIGNvbXBhcmlzb24gd291bGQgZmFpbCwgYW5kIGl0IHdvdWxkIHNraXAgdGhlIFBBR0VfU0laRSBhZGp1c3RtZW50LiBCdXQgZXZlbiBpZiB0aGUgY29tcGFyaXNvbiBzdWNjZWVkZWQsIHRoZSBjcml0aWNhbCBmbGF3IGlzIGBudW1gICp3YXNuJ3QqIHVwZGF0ZWQuIFNvIHRoZSBzdWJzZXF1ZW50IGBvcmRlciA9IGdldF9vcmRlcihudW0pYCBjYWxsIGNvdWxkIGhhdmUgYmVlbiB1c2luZyBhIHBvdGVudGlhbGx5IGludmFsaWQgYG51bWAuIEl0IGNvdWxkIGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAwLCB3aGljaCB3b3VsZCBsZWFkIHRvIHVuZGVmaW5lZCBiZWhhdmlvciBvciBlcnJvcnMgd2l0aGluIGBnZXRfb3JkZXJgIChsaWtlIHNoaWZ0aW5nIGJ5IGEgbmVnYXRpdmUgYW1vdW50KS4gIFRoZSBmaXggYWRkcmVzc2VzIHRoaXMgYnkgdXNpbmcgYSBzaWduZWQgaW50ZWdlciBjb21wYXJpc29uIChgbnVtIFx1MDAzYyAoaW50KVBBR0VfU0laRWApIHdoaWNoIGlzIGNvcnJlY3QsIGFuZCBjcnVjaWFsbHkgc2V0cyBgbnVtID0gUEFHRV9TSVpFYCwgZ3VhcmFudGVlaW5nIGEgdmFsaWQgdmFsdWUgaXMgdXNlZCBpbiB0aGUgYGdldF9vcmRlcmAgY2FsY3VsYXRpb24uXG5cbkkgd2FzIGhvcGluZyB0byBjaGVjayB0aGUgY29tbWl0IGxvZyBkaXJlY3RseSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LCBidXQgSSBkb24ndCBoYXZlIGRpcmVjdCBhY2Nlc3MgdG8gZ2l0LiBObyBtYXR0ZXIsIHRoZSBjb2RlIHRlbGxzIHRoZSBzdG9yeSEgIFRoZSBLY29uZmlnIG9wdGlvbnMgYXJlIG15IG5leHQgcG9ydCBvZiBjYWxsLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGlzIGlzIHByb3Blcmx5IGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NjQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDU6MjAuOTQ2NzQ1MTM4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNjQwMDgyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvYmotLipzZ1xcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Njc2lcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zY3NpL01ha2VmaWxlPTE3Mz1vYmotJChDT05GSUdfQkxLX0RFVl9TUilcXHQrPSBzcl9tb2Qub1xcbmRyaXZlcnMvc2NzaS9NYWtlZmlsZToxNzQ6b2JqLSQoQ09ORklHX0NIUl9ERVZfU0cpXFx0Kz0gc2cub1xcbmRyaXZlcnMvc2NzaS9NYWtlZmlsZS0xNzUtb2JqLSQoQ09ORklHX0NIUl9ERVZfU0NIKVxcdCs9IGNoLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDU6MjEuNDYzMTUyMzJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzM2NTQ5MTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQ2hlY2tpbmcgU0NTSSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpbmQgd2hlcmUgdGhlIGBDT05GSUdfQ0hSX0RFVl9TR2Agc3ltYm9sIGlzIGRlZmluZWQuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiBpdCBsaWtlbHkgcmVsYXRlcyB0byBTQ1NJLCBpcyB0byBoZWFkIGRpcmVjdGx5IGludG8gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSwgc3BlY2lmaWNhbGx5IHRoZSBgZHJpdmVycy9zY3NpL2AgZGlyZWN0b3J5LiBXaXRoaW4gdGhhdCwgdGhlIGBLY29uZmlnYCBmaWxlcyBhcmUgdXN1YWxseSB0aGUgYmVzdCBwbGFjZSB0byBmaW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gU28gSSdsbCBnbyBzdHJhaWdodCB0byBgZHJpdmVycy9zY3NpL0tjb25maWdgIGFuZCB0YWtlIGEgbG9vay4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIGBDT05GSUdfQ0hSX0RFVl9TR2AgYW5kIGFueSBhc3NvY2lhdGVkIGRlcGVuZGVuY2llcywgZGVzY3JpcHRpb25zLCBhbmQgZGVmYXVsdHMgdGhlcmUuIFRoaXMgaXMgYSBjb21tb24gcGF0dGVybiwgYW5kIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uYWxpdHkgaXMgY29udHJvbGxlZCBpbiB0aGUga2VybmVsIGJ1aWxkLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxNjcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NToyMy43OTk3MDQ3MTJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODE4OTEwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0hSX0RFVl9TR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Njc2lcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zY3NpL0tjb25maWc9MTE2PWNvbmZpZyBCTEtfREVWX1NSXFxuLS1cXG5kcml2ZXJzL3Njc2kvS2NvbmZpZy0xMzAtXFxuZHJpdmVycy9zY3NpL0tjb25maWc6MTMxOmNvbmZpZyBDSFJfREVWX1NHXFxuZHJpdmVycy9zY3NpL0tjb25maWctMTMyLVxcdHRyaXN0YXRlIFxcXCJTQ1NJIGdlbmVyaWMgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDU6MjMuOTA3OTAyMDg2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMwMjg2MjAwNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIFNDU0kgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGBkcml2ZXJzL3Njc2kvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgZGVmaW5lZCBpbiBsaW5lcyAxMzAtMTUwLiBTcGVjaWZpY2FsbHksIEnigJltIGludGVyZXN0ZWQgaW4gdGhvc2UgcGFydGljdWxhciBsaW5lcywgYXMgc29tZXRoaW5nIG11c3QgaGF2ZSB0cmlnZ2VyZWQgbXkgaW50ZXJlc3QgaW4gdGhlbS4gV2hhdOKAmXMgZ29pbmcgb24gaW4gdGhhdCBzcGVjaWZpYyBzZWN0aW9uPyBBcmUgdGhleSBkZWZpbmluZyBuZXcgU0NTSSBob3N0IGFkYXB0ZXJzLCBwZXJoYXBzPyBPciBtYXliZSBzb21lIGNvcmUgU0NTSSBvcHRpb25zPyBJdOKAmXMgcHJvYmFibHkgYSBjb25maWd1cmF0aW9uIGJsb2NrIGZvciBhIGNlcnRhaW4gdHlwZSBvZiBjb250cm9sbGVyIG9yIHNvbWUgZmVhdHVyZSwgZ2l2ZW4gdGhlIGNvbnRleHQgb2YgYSBLY29uZmlnIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBzZWN0aW9uIGVuYWJsZXMgb3IgZGlzYWJsZXMsIGFuZCB0aGUgZGVwZW5kZW5jaWVzIGl0IHNldHMuIEFscmlnaHQsIGxldCdzIHBhcnNlIHRob3NlIGxpbmVzIGFuZCBzZWUgd2hhdCByZXZlbGF0aW9ucyBhcmUgaGlkZGVuIHRoZXJlLiBUaGUgZGV2aWwgaXMgYWx3YXlzIGluIHRoZSBkZXRhaWxzLCBzbyBsZXQncyBzdGFydCByZWFkaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDg2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDU6MjYuOTM2NTI2MTU4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Njc2kvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzA6XFx0XFxuIDEzMTpcXHRjb25maWcgQ0hSX0RFVl9TR1xcbiAxMzI6XFx0XFx0dHJpc3RhdGUgXFxcIlNDU0kgZ2VuZXJpYyBzdXBwb3J0XFxcIlxcbiAxMzM6XFx0XFx0ZGVwZW5kcyBvbiBTQ1NJXFxuIDEzNDpcXHRcXHRoZWxwXFxuIDEzNTpcXHRcXHQgIElmIHlvdSB3YW50IHRvIHVzZSBTQ1NJIHNjYW5uZXJzLCBzeW50aGVzaXplcnMgb3IgQ0Qtd3JpdGVycyBvciBqdXN0XFxuIDEzNjpcXHRcXHQgIGFib3V0IGFueXRoaW5nIGhhdmluZyBcXFwiU0NTSVxcXCIgaW4gaXRzIG5hbWUgb3RoZXIgdGhhbiBoYXJkIGRpc2tzLFxcbiAxMzc6XFx0XFx0ICBDRC1ST01zIG9yIHRhcGVzLCBzYXkgWSBoZXJlLiBUaGVzZSB3b24ndCBiZSBzdXBwb3J0ZWQgYnkgdGhlIGtlcm5lbFxcbiAxMzg6XFx0XFx0ICBkaXJlY3RseSwgc28geW91IG5lZWQgc29tZSBhZGRpdGlvbmFsIHNvZnR3YXJlIHdoaWNoIGtub3dzIGhvdyB0b1xcbiAxMzk6XFx0XFx0ICB0YWxrIHRvIHRoZXNlIGRldmljZXMgdXNpbmcgdGhlIFNDU0kgcHJvdG9jb2w6XFxuIDE0MDpcXHRcXG4gMTQxOlxcdFxcdCAgRm9yIHNjYW5uZXJzLCBsb29rIGF0IFNBTkUgKFxcdTAwM2NodHRwOi8vd3d3LnNhbmUtcHJvamVjdC5vcmcvXFx1MDAzZSkuIEZvciBDRFxcbiAxNDI6XFx0XFx0ICB3cml0ZXIgc29mdHdhcmUgbG9vayBhdCBDZHJ0b29sc1xcbiAxNDM6XFx0XFx0ICAoXFx1MDAzY2h0dHA6Ly9jZHJ0b29scy5zb3VyY2Vmb3JnZS5uZXQvXFx1MDAzZSlcXG4gMTQ0OlxcdFxcdCAgYW5kIGZvciBidXJuaW5nIGEgXFxcImRpc2sgYXQgb25jZVxcXCI6IENEUkRBT1xcbiAxNDU6XFx0XFx0ICAoXFx1MDAzY2h0dHA6Ly9jZHJkYW8uc291cmNlZm9yZ2UubmV0L1xcdTAwM2UpLiBDZHBhcmFub2lhIGlzIGEgaGlnaFxcbiAxNDY6XFx0XFx0ICBxdWFsaXR5IGRpZ2l0YWwgcmVhZGVyIG9mIGF1ZGlvIENEcyAoXFx1MDAzY2h0dHA6Ly93d3cueGlwaC5vcmcvcGFyYW5vaWEvXFx1MDAzZSkuXFxuIDE0NzpcXHRcXHQgIEZvciBvdGhlciBkZXZpY2VzLCBpdCdzIHBvc3NpYmxlIHRoYXQgeW91J2xsIGhhdmUgdG8gd3JpdGUgdGhlXFxuIDE0ODpcXHRcXHQgIGRyaXZlciBzb2Z0d2FyZSB5b3Vyc2VsZi4gUGxlYXNlIHJlYWQgdGhlIGZpbGVcXG4gMTQ5OlxcdFxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9zY3NpL3Njc2ktZ2VuZXJpYy5yc3RcXHUwMDNlIGZvciBtb3JlIGluZm9ybWF0aW9uLlxcbiAxNTA6XFx0XFxuIDE1MTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUgYW5kIHJlYWRcXG4gMTUyOlxcdFxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9zY3NpL3Njc2kucnN0XFx1MDAzZS4gVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzZy5cXG4gMTUzOlxcdFxcbiAxNTQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NToyNi45MzY2NzYyMThaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDI2MjY4MDM0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFNDU0kgU3Vic3lzdGVtIERlcGVuZGVuY3kqKlxuXG5SaWdodCwgYENPTkZJR19DSFJfREVWX1NHYCBoaW5nZXMgb24gYENPTkZJR19TQ1NJYCwgd2hpY2ggaXMgZXhwZWN0ZWQuIFRoYXQncyBzdGFuZGFyZCBwcmFjdGljZSwgdGhlIFwic2dcIiBkcml2ZXIgbGV2ZXJhZ2VzIHRoZSBTQ1NJIG1pZC1sYXllciwgc28gdGhhdCdzIG5vdGhpbmcgbmV3LiBOb3csIHRoZSBpbnRlcmVzdGluZyBxdWVzdGlvbiBpcyBob3cgYHNnX2J1aWxkX2luZGlyZWN0YCBpcyAqYWN0dWFsbHkqIHVzZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGZsb3cgdGhyb3VnaCBgc2dfYnVpbGRfaW5kaXJlY3RgLiBJJ20gY3VyaW91cyBhYm91dCB0aGUgc3BlY2lmaWMgY29udGV4dHMgYW5kIG90aGVyIGRlcGVuZGVuY2llcy4gTGV0J3Mgc2VlIGhvdyBhbmQgd2hlbiB0aGF0IHJvdXRpbmUgZ2V0cyBpbnZva2VkLCBzbyBJIGNhbiBoYXZlIGFuIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgSS9PIGZsb3cuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hvJ3MgY2FsbGluZyBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE5NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDU6MzEuMTk5MzYxNDE5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDc3OTExMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZ19idWlsZF9pbmRpcmVjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Njc2kvc2cuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Njc2kvc2cuYz0xODM9c3RhdGljIGludCBzZ19maW5pc2hfcmVtX3JlcShTZ19yZXF1ZXN0ICogc3JwKTtcXG5kcml2ZXJzL3Njc2kvc2cuYzoxODQ6c3RhdGljIGludCBzZ19idWlsZF9pbmRpcmVjdChTZ19zY2F0dGVyX2hvbGQgKiBzY2hwLCBTZ19mZCAqIHNmcCwgaW50IGJ1ZmZfc2l6ZSk7XFxuZHJpdmVycy9zY3NpL3NnLmMtMTg1LXN0YXRpYyBzc2l6ZV90IHNnX25ld19yZWFkKFNnX2ZkICogc2ZwLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2cuYz0xNzExPXNnX3N0YXJ0X3JlcShTZ19yZXF1ZXN0ICpzcnAsIHVuc2lnbmVkIGNoYXIgKmNtZClcXG4tLVxcbmRyaXZlcnMvc2NzaS9zZy5jLTE3ODItXFx0XFx0fSBlbHNlIHtcXG5kcml2ZXJzL3Njc2kvc2cuYzoxNzgzOlxcdFxcdFxcdHJlcyA9IHNnX2J1aWxkX2luZGlyZWN0KHJlcV9zY2hwLCBzZnAsIGR4ZmVyX2xlbik7XFxuZHJpdmVycy9zY3NpL3NnLmMtMTc4NC1cXHRcXHRcXHRpZiAocmVzKSB7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2cuYz0xODUzPXN0YXRpYyBpbnRcXG5kcml2ZXJzL3Njc2kvc2cuYzoxODU0OnNnX2J1aWxkX2luZGlyZWN0KFNnX3NjYXR0ZXJfaG9sZCAqIHNjaHAsIFNnX2ZkICogc2ZwLCBpbnQgYnVmZl9zaXplKVxcbmRyaXZlcnMvc2NzaS9zZy5jLTE4NTUte1xcbi0tXFxuZHJpdmVycy9zY3NpL3NnLmMtMTg2Ny1cXHRTQ1NJX0xPR19USU1FT1VUKDQsIHNnX3ByaW50ayhLRVJOX0lORk8sIHNmcC1cXHUwMDNlcGFyZW50ZHAsXFxuZHJpdmVycy9zY3NpL3NnLmM6MTg2ODpcXHRcXHRcXFwic2dfYnVpbGRfaW5kaXJlY3Q6IGJ1ZmZfc2l6ZT0lZCwgYmxrX3NpemU9JWRcXFxcblxcXCIsXFxuZHJpdmVycy9zY3NpL3NnLmMtMTg2OS1cXHRcXHRidWZmX3NpemUsIGJsa19zaXplKSk7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2cuYy0xOTA3LVxcdFxcdFNDU0lfTE9HX1RJTUVPVVQoNSwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc2ZwLVxcdTAwM2VwYXJlbnRkcCxcXG5kcml2ZXJzL3Njc2kvc2cuYzoxOTA4OlxcdFxcdFxcdFxcdCBcXFwic2dfYnVpbGRfaW5kaXJlY3Q6IGs9JWQsIG51bT0lZCwgcmV0X3N6PSVkXFxcXG5cXFwiLFxcbmRyaXZlcnMvc2NzaS9zZy5jLTE5MDktXFx0XFx0XFx0XFx0IGssIG51bSwgcmV0X3N6KSk7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2cuYy0xOTE0LVxcdFNDU0lfTE9HX1RJTUVPVVQoNSwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc2ZwLVxcdTAwM2VwYXJlbnRkcCxcXG5kcml2ZXJzL3Njc2kvc2cuYzoxOTE1OlxcdFxcdFxcdCBcXFwic2dfYnVpbGRfaW5kaXJlY3Q6IGtfdXNlX3NnPSVkLCByZW1fc3o9JWRcXFxcblxcXCIsXFxuZHJpdmVycy9zY3NpL3NnLmMtMTkxNi1cXHRcXHRcXHQgaywgcmVtX3N6KSk7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2cuYz0xOTg5PXNnX2J1aWxkX3Jlc2VydmUoU2dfZmQgKiBzZnAsIGludCByZXFfc2l6ZSlcXG4tLVxcbmRyaXZlcnMvc2NzaS9zZy5jLTE5OTctXFx0XFx0XFx0cmVxX3NpemUgPSBQQUdFX1NJWkU7XFxuZHJpdmVycy9zY3NpL3NnLmM6MTk5ODpcXHRcXHRpZiAoMCA9PSBzZ19idWlsZF9pbmRpcmVjdChzY2hwLCBzZnAsIHJlcV9zaXplKSlcXG5kcml2ZXJzL3Njc2kvc2cuYy0xOTk5LVxcdFxcdFxcdHJldHVybjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDU6MzEuMjY0MTUwNTEyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjcyNDU5MzQzOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIERhdGEgRmxvdyoqXG5cbkFscmlnaHQsIHNvIGBzZ19idWlsZF9pbmRpcmVjdGAgaXMgY2xlYXJseSBhIGtleSBmdW5jdGlvbiwgdHJpZ2dlcmVkIGJ5IGJvdGggYHNnX3N0YXJ0X3JlcWAgYW5kIGBzZ19idWlsZF9yZXNlcnZlYC4gVGhhdCBtYWtlcyBzZW5zZTsgaW5kaXJlY3QgZGVzY3JpcHRvcnMgYXJlIGZ1bmRhbWVudGFsIHRvIGEgbG90IG9mIFNDU0kgb3BlcmF0aW9ucywgZXNwZWNpYWxseSB0aG9zZSBpbnZvbHZpbmcgc2NhdHRlci1nYXRoZXIuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucywgcGFydGljdWxhcmx5IHRoZSBwYXRoIHRocm91Z2ggYHNnX2J1aWxkX3Jlc2VydmVgLiBLbm93aW5nICp3aGF0KiBjYWxscyBgc2dfYnVpbGRfcmVzZXJ2ZWAgaXMgZ29pbmcgdG8gaWxsdW1pbmF0ZSBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgZGV2aWNlIHJlc2VydmF0aW9uIGFuZCBwb3RlbnRpYWwgY29uZmxpY3QgcmVzb2x1dGlvbiwgSSdkIHdhZ2VyLiBMZXQncyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgdGhlIGNhbGwgZ3JhcGggZm9yIHRoYXQgZnVuY3Rpb24uIEl0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkYXRhIGZsb3cgYW5kIGhvdyB0aGUgZGlmZmVyZW50IGNvbXBvbmVudHMgaW50ZXJhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxODEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NTozOC41MTAwODc3NDJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3OTgwNTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNnX2J1aWxkX3Jlc2VydmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zY3NpL3NnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zY3NpL3NnLmM9MTkzPXN0YXRpYyB2b2lkIHNnX3JlbW92ZV9zY2F0KFNnX2ZkICogc2ZwLCBTZ19zY2F0dGVyX2hvbGQgKiBzY2hwKTtcXG5kcml2ZXJzL3Njc2kvc2cuYzoxOTQ6c3RhdGljIHZvaWQgc2dfYnVpbGRfcmVzZXJ2ZShTZ19mZCAqIHNmcCwgaW50IHJlcV9zaXplKTtcXG5kcml2ZXJzL3Njc2kvc2cuYy0xOTUtc3RhdGljIHZvaWQgc2dfbGlua19yZXNlcnZlKFNnX2ZkICogc2ZwLCBTZ19yZXF1ZXN0ICogc3JwLCBpbnQgc2l6ZSk7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2cuYz05MTQ9c2dfaW9jdGxfY29tbW9uKHN0cnVjdCBmaWxlICpmaWxwLCBTZ19kZXZpY2UgKnNkcCwgU2dfZmQgKnNmcCxcXG4tLVxcbmRyaXZlcnMvc2NzaS9zZy5jLTEwMzUtXFx0XFx0XFx0c2dfcmVtb3ZlX3NjYXQoc2ZwLCBcXHUwMDI2c2ZwLVxcdTAwM2VyZXNlcnZlKTtcXG5kcml2ZXJzL3Njc2kvc2cuYzoxMDM2OlxcdFxcdFxcdHNnX2J1aWxkX3Jlc2VydmUoc2ZwLCB2YWwpO1xcbmRyaXZlcnMvc2NzaS9zZy5jLTEwMzctXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9zY3NpL3NnLmM9MTk4OD1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvc2NzaS9zZy5jOjE5ODk6c2dfYnVpbGRfcmVzZXJ2ZShTZ19mZCAqIHNmcCwgaW50IHJlcV9zaXplKVxcbmRyaXZlcnMvc2NzaS9zZy5jLTE5OTAte1xcbi0tXFxuZHJpdmVycy9zY3NpL3NnLmMtMTk5My1cXHRTQ1NJX0xPR19USU1FT1VUKDQsIHNnX3ByaW50ayhLRVJOX0lORk8sIHNmcC1cXHUwMDNlcGFyZW50ZHAsXFxuZHJpdmVycy9zY3NpL3NnLmM6MTk5NDpcXHRcXHRcXHQgXFxcInNnX2J1aWxkX3Jlc2VydmU6IHJlcV9zaXplPSVkXFxcXG5cXFwiLCByZXFfc2l6ZSkpO1xcbmRyaXZlcnMvc2NzaS9zZy5jLTE5OTUtXFx0ZG8ge1xcbi0tXFxuZHJpdmVycy9zY3NpL3NnLmM9MjE0ND1zZ19hZGRfc2ZwKFNnX2RldmljZSAqIHNkcClcXG4tLVxcbmRyaXZlcnMvc2NzaS9zZy5jLTIxNzctXFx0XFx0XFx0bWF4X3NlY3RvcnNfYnl0ZXMoc2RwLVxcdTAwM2VkZXZpY2UtXFx1MDAzZXJlcXVlc3RfcXVldWUpKTtcXG5kcml2ZXJzL3Njc2kvc2cuYzoyMTc4OlxcdHNnX2J1aWxkX3Jlc2VydmUoc2ZwLCBidWZmbGVuKTtcXG5kcml2ZXJzL3Njc2kvc2cuYy0yMTc5LVxcdFNDU0lfTE9HX1RJTUVPVVQoMywgc2dfcHJpbnRrKEtFUk5fSU5GTywgc2RwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NTozOC41NjgwNzQxMDdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTU3MzcxMDc1NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQnVnIEZpeCBBbmFseXNpcyBhbmQgRnV6emluZyBTdHJhdGVneSBmb3IgU0NTSSBTY2F0dGVyL0dhdGhlciBEcml2ZXIqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGFuYWx5c2lzIGluZGljYXRlcyBhIGNyaXRpY2FsIGJ1ZyBmaXggd2l0aGluIHRoZSBTQ1NJIHNjYXR0ZXIvZ2F0aGVyIGRyaXZlciAoYGRyaXZlcnMvc2NzaS9zZy5jYCkuICBTcGVjaWZpY2FsbHksIHRoZSB2dWxuZXJhYmlsaXR5IGxpZXMgd2l0aGluIGhvdyB0aGUgYHNjYXR0ZXJfZWxlbV9zemAgcGFyYW1ldGVyIGlzIGhhbmRsZWQsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGBzZ19idWlsZF9pbmRpcmVjdGAgZnVuY3Rpb24uXG5cbkkgc2VlIHRoYXQgYHNnX2J1aWxkX3Jlc2VydmVgIGlzIGNhbGxlZCB3aXRoaW4gYHNnX2FkZF9zZnBgLCB3aGljaCBpdHNlbGYgaXMgaW52b2tlZCBkdXJpbmcgYHNnX29wZW5gLiBBbHNvLCBgc2dfc3RhcnRfcmVxYCBpcyB1c2VkIGR1cmluZyB3cml0ZXMgYW5kIHJlcXVlc3RzIHRvIGAvZGV2L3NnKmAsIG1lYW5pbmcgaXQncyByZWFjaGFibGUuIGBzY2F0dGVyX2VsZW1fc3pgLCBjYW4gYmUgY2hhbmdlZCB2aWEgdGhlIG1vZHVsZSBwYXJhbWV0ZXIgb3IgdGhyb3VnaCBgL3N5cy9tb2R1bGUvc2cvcGFyYW1ldGVycy9zY2F0dGVyX2VsZW1fc3pgLiBUaGUgaW1wb3J0YW50IHRoaW5nIGlzIHRoYXQgYSBzdGFuZGFyZCBMaW51eCBWTSB3aXRoIHN5emthbGxlciBhbmQgU0NTSSBvciB2aXJ0aW8tc2NzaSBkcml2ZXMgbWFrZXMgYC9kZXYvc2cwYCBhdmFpbGFibGUuIFRoaXMgbWVhbnMgdGhhdCBvcGVuaW5nIGAvZGV2L3NnKmAgdHJpZ2dlcnMgYHNnX29wZW5gIC1cdTAwM2UgYHNnX2FkZF9zZnBgIC1cdTAwM2UgYHNnX2J1aWxkX3Jlc2VydmVgIC1cdTAwM2UgYHNnX2J1aWxkX2luZGlyZWN0YC4gIEZ1cnRoZXJtb3JlLCB3cml0aW5nIFNDU0kgY29tbWFuZHMgb3IgaXNzdWluZyB0aGUgYFNHX0lPYCBpb2N0bCBjYWxscyBgc2dfc3RhcnRfcmVxYCAtXHUwMDNlIGBzZ19idWlsZF9pbmRpcmVjdGAuXG5cbkkgaWRlbnRpZmllZCB0aGF0IGBpbml0X3NnYCBhdHRlbXB0cyB0byBjaGVjayBgc2NhdHRlcl9lbGVtX3N6IFx1MDAzYyBQQUdFX1NJWkVgLiAgSG93ZXZlciwgdGhpcyBpbml0aWFsaXphdGlvbiBvbmx5IG9jY3VycyBhdCBtb2R1bGUgbG9hZCwgYW5kIHRoZSBgc2NhdHRlcl9lbGVtX3N6YCBwYXJhbWV0ZXIgaXMgd3JpdGFibGUgYXQgcnVudGltZS4gSWYgYSBzbWFsbCBvciBuZWdhdGl2ZSB2YWx1ZSBpcyB3cml0dGVuIHRvIGAvc3lzL21vZHVsZS9zZy9wYXJhbWV0ZXJzL3NjYXR0ZXJfZWxlbV9zemAsIHRoZSBjb21wYXJpc29uIGBzY2F0dGVyX2VsZW1fc3ogIT0gc2NhdHRlcl9lbGVtX3N6X3ByZXZgIGluIGBzZ19idWlsZF9pbmRpcmVjdGAgd2lsbCB0cmlnZ2VyLiBUaGlzIGNvbXBhcmlzb24gaXMgZGFuZ2Vyb3VzIGJlY2F1c2UgYFBBR0VfU0laRWAgaXMgdW5zaWduZWQsIHNvIGNvbXBhcmluZyBzaWduZWQgbnVtYmVycyB3aXRoIGl0IHdpbGwgY29udmVydCB0aGUgc2lnbmVkIG51bWJlciB0byB1bnNpZ25lZCwgd2hpY2ggY2FuIGxlYWQgdG8gaXQgYmVpbmcgbGFyZ2VyIHRoYW4gUEFHRV9TSVpFIChiZWNhdXNlIGl0IGNhbiBiZWNvbWUgYSB2ZXJ5IGxhcmdlIHBvc2l0aXZlIG51bWJlcikuIFRoaXMgbGVhZHMgdG8gYSBjcmFzaCBiZWNhdXNlIG5lZ2F0aXZlIGBzY2F0dGVyX2VsZW1fc3pgIHZhbHVlcyBjYXVzZSB1bmRlZmluZWQgYmVoYXZpb3IgaW4gYGdldF9vcmRlcigpYC4gRXZlbiBpZiB0aGUgaW5wdXQgaXMgb25seSAqc2xpZ2h0bHkqIHNtYWxsZXIgdGhhbiBgUEFHRV9TSVpFYCwgdGhlIG9yaWdpbmFsIGNvZGUgd291bGQgbmV2ZXIgdXBkYXRlIGl0LCBzbyBgZ2V0X29yZGVyYCB3b3VsZCBzdGlsbCBoYXZlIGEgc21hbGwgbnVtYmVyLiBUaGUgZml4IHNlZW1zIHRvIGFkZHJlc3MgYm90aCBzY2VuYXJpb3MgYnkgY2FzdGluZyBgUEFHRV9TSVpFYCB0byBgaW50YCBmb3IgdGhlIGNvbXBhcmlzb24gYW5kIHVwZGF0aW5nIGBzY2F0dGVyX2VsZW1fc3pgIGFjY29yZGluZ2x5LlxuXG5TaW5jZSB0aGlzIGJ1ZyBpcyBsb2NhdGVkIGluIHRoZSBjb3JlIGBkcml2ZXJzL3Njc2kvc2cuY2AsIGl0J3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgcGF0Y2ggZGlyZWN0bHkgYWZmZWN0cyByZWFjaGFibGUgY29kZSBhbmQgaXMgdGhlcmVmb3JlIHdvcnRoIGZ1enppbmcuXG5cbk15IGFuYWx5c2lzIGFsc28gdGVsbHMgbWUgdG8gY29uZmlybSB0aGF0IHRoZSBgQ0hSX0RFVl9TR2AgYW5kIGBTQ1NJYCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSByZXF1aXJlZCB0byBlbmFibGUgdGhpcyBidWcuIEknbGwgbmVlZCB0byBlbmFibGUgYm90aC5cblxuRmluYWxseSwgSSBuZWVkIHRvIGxpc3QgZnVuY3Rpb25zIHRoYXQgaW1wbGVtZW50IHRoZSBwYXRjaGVkIGxvZ2ljIG9yIGFyZSBlbnRyeSBwb2ludHMuIFRoZSBmb2N1cyBzaG91bGQgYmUgb24gYHNnX2J1aWxkX2luZGlyZWN0YCBiZWNhdXNlIHRoaXMgaXMgd2hlcmUgdGhlIHBhdGNoIHdhcyBhcHBsaWVkLCBhbmQgYWxzbyBgc2dfYnVpbGRfcmVzZXJ2ZWAgYW5kIGBzZ19zdGFydF9yZXFgIGFzIHRoZSBjYWxsZXJzIG9mIHRoZSBmdW5jdGlvbi4gIEkgY29uZmlybWVkIHRoYXQgYHNnX2J1aWxkX2luZGlyZWN0YCBpcyAqbm90KiBpbmxpbmVkIGFuZCBpcyBhIHN1YnN0YW50aWFsIHN0YXRpYyBDIGZ1bmN0aW9uLiBJdCdzIGRlZmluaXRlbHkgbm90IHN0YXRpYyBpbmxpbmUsIHNvIGl0J3MgYSBnb29kIEZvY3VzU3ltYm9sLiBJIHdpbGwgZG91YmxlLWNoZWNrIGBkcml2ZXJzL3Njc2kvS2NvbmZpZ2AgdG8gY29uZmlybSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTczLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NjozNC4zMDUxODU2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDY0MjU0MjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNDU0lcXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Njc2lcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zY3NpL0tjb25maWc9MTg9Y29uZmlnIFNDU0lfQ09NTU9OXFxuLS1cXG5kcml2ZXJzL3Njc2kvS2NvbmZpZy0yMC1cXG5kcml2ZXJzL3Njc2kvS2NvbmZpZzoyMTpjb25maWcgU0NTSVxcbmRyaXZlcnMvc2NzaS9LY29uZmlnLTIyLVxcdHRyaXN0YXRlIFxcXCJTQ1NJIGRldmljZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NjozNC44NTE2MTk3MzJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTY2ODQwMTM0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqU2NvdXRpbmcgdGhlIFNDU0kgTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBTQ1NJIGRyaXZlciBjb25maWd1cmF0aW9uLiBNeSBpbnN0aW5jdCBzYXlzIHRvIHN0YXJ0IHdpdGggYGRyaXZlcnMvc2NzaS9LY29uZmlnYC4gTGV0J3MgemVybyBpbiBvbiBsaW5lIDIxIHdpdGhpbiB0aGF0IGZpbGUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgU0NTSSBvcHRpb25zLCBhbmQgZnJvbSB0aGVyZSBJIGNhbiBob3BlZnVsbHkgdHJhY2Ugd2hhdCdzIGVuYWJsZWQsIGRpc2FibGVkLCBhbmQgd2hhdCBteSBjdXJyZW50IGNvbmZpZ3VyYXRpb24ncyBkZWFsaW5nIHdpdGguIFVuZGVyc3RhbmRpbmcgdGhvc2UgY29yZSBLY29uZmlnIHNldHRpbmdzIGlzIGNydWNpYWwgYmVmb3JlIEkgZ2V0IGFueSBkZWVwZXIuIEknbSBob3BpbmcgSSBjYW4gZ2xlYW4gYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIG92ZXJhbGwgc2V0dXAgcXVpY2tseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4ODAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NjozNi41MjAwMjQ5NDVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxNjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvc2NzaS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDE1OlxcdFxcdGhlbHBcXG4gIDE2OlxcdFxcdCAgUHJvdmlkZXMgUkFJRFxcbiAgMTc6XFx0XFxuICAxODpcXHRjb25maWcgU0NTSV9DT01NT05cXG4gIDE5OlxcdFxcdHRyaXN0YXRlXFxuICAyMDpcXHRcXG4gIDIxOlxcdGNvbmZpZyBTQ1NJXFxuICAyMjpcXHRcXHR0cmlzdGF0ZSBcXFwiU0NTSSBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gIDIzOlxcdFxcdGRlcGVuZHMgb24gQkxPQ0tcXG4gIDI0OlxcdFxcdHNlbGVjdCBTQ1NJX0RNQSBpZiBIQVNfRE1BXFxuICAyNTpcXHRcXHRzZWxlY3QgU0dfUE9PTFxcbiAgMjY6XFx0XFx0c2VsZWN0IFNDU0lfQ09NTU9OXFxuICAyNzpcXHRcXHRzZWxlY3QgQkxLX0RFVl9CU0dfQ09NTU9OIGlmIEJMS19ERVZfQlNHXFxuICAyODpcXHRcXHRoZWxwXFxuICAyOTpcXHRcXHQgIElmIHlvdSB3YW50IHRvIHVzZSBhIFNDU0kgaGFyZCBkaXNrLCBTQ1NJIHRhcGUgZHJpdmUsIFNDU0kgQ0QtUk9NIG9yXFxuICAzMDpcXHRcXHQgIGFueSBvdGhlciBTQ1NJIGRldmljZSB1bmRlciBMaW51eCwgc2F5IFkgYW5kIG1ha2Ugc3VyZSB0aGF0IHlvdSBrbm93XFxuICAzMTpcXHRcXHQgIHRoZSBuYW1lIG9mIHlvdXIgU0NTSSBob3N0IGFkYXB0ZXIgKHRoZSBjYXJkIGluc2lkZSB5b3VyIGNvbXB1dGVyXFxuICAzMjpcXHRcXHQgIHRoYXQgXFxcInNwZWFrc1xcXCIgdGhlIFNDU0kgcHJvdG9jb2wsIGFsc28gY2FsbGVkIFNDU0kgY29udHJvbGxlciksXFxuICAzMzpcXHRcXHQgIGJlY2F1c2UgeW91IHdpbGwgYmUgYXNrZWQgZm9yIGl0LlxcbiAgMzQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjQ2OjM2LjUyMDE4OTYwNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTg4MjQ1MjM0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIENvbmZpZ3VyYXRpb25hbCBSZXF1aXJlbWVudHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGF0IGBDT05GSUdfU0NTSWAgcmVsaWVzIG9uIGBCTE9DS2AsIGFuZCB0aGVuIGBDT05GSUdfQ0hSX0RFVl9TR2AgZGVwZW5kcyBvbiBgU0NTSWAuIFNpbXBsZSBkZXBlbmRlbmN5IGNoYWluOiBgQ0hSX0RFVl9TR2AgbmVlZHMgYFNDU0lgLCB3aGljaCBuZWVkcyBgQkxPQ0tgLiBCdXQgaG9uZXN0bHksIGBCTE9DS2AgaXMgcHJldHR5IG11Y2ggYSBnaXZlbiBpbiBhbnkgc3RhbmRhcmQgTGludXgga2VybmVsIHNldHVwLiBTbywgcmVhbGx5LCB0aGUgaW1wb3J0YW50IGNvbmZpZ3VyYXRpb25zIHRvIGZvY3VzIG9uIGhlcmUgYXJlIGBDSFJfREVWX1NHYCBhbmQgYFNDU0lgLlxuXG5Ob3csIGxldCBtZSBkb3VibGUtY2hlY2sgdGhlIGBzZXQtcmVzdWx0c2AgcGFyYW1ldGVycy4gYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIGB0cnVlYCwgd2hpY2ggaXMgY29ycmVjdCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoaXMgYnVnLiBUaGUgYFJlYXNvbmluZ2Agc2VjdGlvbiBjb25jaXNlbHkgZXhwbGFpbnMgdGhhdCB0aGUgcGF0Y2ggYWRkcmVzc2VzIGEgc2lnbmVkbmVzcyBhbmQgdXBkYXRlIGJ1ZyBpbiBgc2dfYnVpbGRfaW5kaXJlY3QoKWAgd2l0aGluIHRoZSBTQ1NJIGdlbmVyaWMgZHJpdmVyLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBgc2NhdHRlcl9lbGVtX3N6YCBtb2R1bGUgcGFyYW1ldGVyIGFuZCBwb3RlbnRpYWxseSBpbnZhbGlkIHBhZ2Ugb3JkZXIgY2FsY3VsYXRpb25zLiBUaGUganVzdGlmaWNhdGlvbiBmb3IgZnV6emluZyBpcyBzb3VuZCwgYW5kIHRoZSBzdGF0ZW1lbnQgdGhhdCB0aGUgU0NTSSBnZW5lcmljIGRyaXZlciBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHdpdGggZW11bGF0ZWQgU0NTSSBkZXZpY2VzIGlzIGFic29sdXRlbHkgc3BvdC1vbiBhbmQgcmVsZXZhbnQgdG8gdGhlIGZ1enppbmcgc3RyYXRlZ3kuXG5cbkZpbmFsbHksIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0LCB3aXRoIGBzZ19idWlsZF9pbmRpcmVjdGAsIGBzZ19idWlsZF9yZXNlcnZlYCwgYW5kIGBzZ19zdGFydF9yZXFgIGFsbCBzZWVtIHByZWNpc2VseSB0YXJnZXRlZCBhdCB0aGUgY29yZSBhcmVhcyBhZmZlY3RlZCBieSB0aGlzIGJ1Zy4gQW5kIGBFbmFibGVDb25maWdzYCBjb3JyZWN0bHkgcG9pbnRzIHRvIHRoZSByZXF1aXJlZCBjb25maWdzIHRoYXQgdHJpZ2dlciB0aGUgY29kZSBpbiBxdWVzdGlvbi5cblxuWWVwLCBldmVyeXRoaW5nIGNoZWNrcyBvdXQuIExldCdzIGV4ZWN1dGUgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzMjgsIk91dHB1dFRva2VucyI6MTMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDY6NTguNDAyNjQ0ODM0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1NDM1MzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDSFJfREVWX1NHXCIsXG4gICAgXCJTQ1NJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2dfYnVpbGRfaW5kaXJlY3RcIixcbiAgICBcInNnX2J1aWxkX3Jlc2VydmVcIixcbiAgICBcInNnX3N0YXJ0X3JlcVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHNnX2J1aWxkX2luZGlyZWN0KCkgaW4gdGhlIFNDU0kgZ2VuZXJpYyAoc2cpIGRyaXZlciB0byBwcm9wZXJseSBjbGFtcCBzY2F0dGVyX2VsZW1fc3ogd2hlbiBpdCBpcyBzbWFsbGVyIHRoYW4gUEFHRV9TSVpFIG9yIG5lZ2F0aXZlIChwcmV2ZW50aW5nIHNpZ25lZCBpbnRlZ2VyIGNvbXBhcmlzb24gaXNzdWVzIGFuZCBpbnZhbGlkIHBhZ2Ugb3JkZXJzIGZvciBnZXRfb3JkZXIpLiBUaGUgc2cgZHJpdmVyIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2l0aCBlbXVsYXRlZCBTQ1NJIGRldmljZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0hSX0RFVl9TR1wiLFxuICAgIFwiU0NTSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNnX2J1aWxkX2luZGlyZWN0XCIsXG4gICAgXCJzZ19idWlsZF9yZXNlcnZlXCIsXG4gICAgXCJzZ19zdGFydF9yZXFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzZ19idWlsZF9pbmRpcmVjdCgpIGluIHRoZSBTQ1NJIGdlbmVyaWMgKHNnKSBkcml2ZXIgdG8gcHJvcGVybHkgY2xhbXAgc2NhdHRlcl9lbGVtX3N6IHdoZW4gaXQgaXMgc21hbGxlciB0aGFuIFBBR0VfU0laRSBvciBuZWdhdGl2ZSAocHJldmVudGluZyBzaWduZWQgaW50ZWdlciBjb21wYXJpc29uIGlzc3VlcyBhbmQgaW52YWxpZCBwYWdlIG9yZGVycyBmb3IgZ2V0X29yZGVyKS4gVGhlIHNnIGRyaXZlciBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHdpdGggZW11bGF0ZWQgU0NTSSBkZXZpY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0Njo1OC41NDgwODk5MDNaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzQzMTM4OTYwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjQ2OjU4LjU0ODc2NTQ1M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEzNzQzMDcwNzk2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBzaWduZWRuZXNzIGlzc3VlIGluIGRyaXZlcnMvc2NzaS9zZy5jIChzZ19idWlsZF9pbmRpcmVjdCkuIFNwZWNpZmljYWxseSwgY29tcGFyaW5nIHRoZSBzaWduZWQgaW50ICdudW0nIHRvIHVuc2lnbmVkIGxvbmcgJ1BBR0VfU0laRScgcmVzdWx0ZWQgaW4gc2lnbmVkLXRvLXVuc2lnbmVkIHR5cGUgcHJvbW90aW9uLCBhbGxvd2luZyBuZWdhdGl2ZSB2YWx1ZXMgb2YgdGhlICdzY2F0dGVyX2VsZW1fc3onIG1vZHVsZSBwYXJhbWV0ZXIgdG8gYnlwYXNzIHRoZSBtaW5pbXVtIGJvdW5kIGNoZWNrIGFuZCBsZWFkIHRvIGludmFsaWQgcGFnZSBhbGxvY2F0aW9uIG9yZGVycyBhbmQgdW5kZWZpbmVkIHNoaWZ0IGJlaGF2aW9yLiBUaGUgcGF0Y2ggY2FzdHMgUEFHRV9TSVpFIHRvIGludCBhbmQgc2V0cyBudW0gPSBQQUdFX1NJWkUgd2hlbiBudW0gXFx1MDAzYyAoaW50KVBBR0VfU0laRS5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OlxcbjEuICdudW0nIGFuZCAnc2NhdHRlcl9lbGVtX3N6JyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgdmFsdWVzLlxcbjIuIFRoZSBzY2F0dGVyLWdhdGhlciBidWZmZXIgYWxsb2NhdGlvbnMgaW4gc2dfYnVpbGRfaW5kaXJlY3QgdXNlIGt6YWxsb2MgZm9yIHRoZSBwb2ludGVyIGFycmF5IGFuZCBfX0dGUF9aRVJPIGZvciB0aGUgdW5kZXJseWluZyBwYWdlIGFsbG9jYXRpb25zLlxcbjMuIE5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgc3RhY2sgdmFyaWFibGVzLCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgY29waWVkIHRvIHVzZXJzcGFjZSBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLlxcbkFueSBwb3RlbnRpYWwgaXNzdWVzIGZyb20gdGhlIGJ1ZyAoc3VjaCBhcyBpbnZhbGlkIGFsbG9jYXRpb24gb3JkZXJzIG9yIHNoaWZ0cykgZmFsbCB1bmRlciBzdGFuZGFyZCBVQlNBTi9LQVNBTiBkZXRlY3Rpb24gcmF0aGVyIHRoYW4gS01TQU4gdW5pbml0aWFsaXplZCBtZW1vcnkgdHJhY2tpbmcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDEzNTI5NDg5ZjZjY2U0MjUwZjM3NTk4NzM2YzY5ZmViZWYzMGI4OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDE0IDA4OjQ0OjIzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NnLmMgYi9kcml2ZXJzL3Njc2kvc2cuY1xuaW5kZXggNTQwOGYwMDJlNmMwMS4uMzljOGU1MmZhNmZmNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvc2NzaS9zZy5jXG4rKysgYi9kcml2ZXJzL3Njc2kvc2cuY1xuQEAgLTE4NzUsOSArMTg3NSwxMCBAQCBzZ19idWlsZF9pbmRpcmVjdChTZ19zY2F0dGVyX2hvbGQgKiBzY2hwLCBTZ19mZCAqIHNmcCwgaW50IGJ1ZmZfc2l6ZSlcbiBcbiBcdG51bSA9IHNjYXR0ZXJfZWxlbV9zejtcbiBcdGlmICh1bmxpa2VseShudW0gIT0gc2NhdHRlcl9lbGVtX3N6X3ByZXYpKSB7XG4tXHRcdGlmIChudW0gXHUwMDNjIFBBR0VfU0laRSkge1xuK1x0XHRpZiAobnVtIFx1MDAzYyAoaW50KVBBR0VfU0laRSkge1xuIFx0XHRcdHNjYXR0ZXJfZWxlbV9zeiA9IFBBR0VfU0laRTtcbiBcdFx0XHRzY2F0dGVyX2VsZW1fc3pfcHJldiA9IFBBR0VfU0laRTtcbitcdFx0XHRudW0gPSBQQUdFX1NJWkU7XG4gXHRcdH0gZWxzZVxuIFx0XHRcdHNjYXR0ZXJfZWxlbV9zel9wcmV2ID0gbnVtO1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDY6NTguNTQ4NzY2NTUzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjk4MDYzNzUyNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTQ1NJIEdlbmVyaWMgRHJpdmVyKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoaXMuIFRoZSBkaWZmIHBvaW50cyB1cyBkaXJlY3RseSB0byBgZHJpdmVycy9zY3NpL3NnLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTg3NS4gVGhpcyBwcm9iYWJseSBtZWFucyBhIHNwZWNpZmljIGNoYW5nZSB3YXMgbWFkZSBpbiB0aGlzIGFyZWEgb2YgdGhlIGRyaXZlciwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGN1cnJlbnQgY29kZS4gSSdsbCBzdGFydCBieSB1c2luZyB0aGUgYHJlYWQtZmlsZWAgY29tbWFuZCB0byBwdWxsIHRoZSBjb2RlIGFyb3VuZCB0aGF0IGxpbmUgaW50byB2aWV3LiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgaW1tZWRpYXRlIGNvbnRleHQgSSBuZWVkIOKAkyB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb25zLCB2YXJpYWJsZXMsIGFuZCBwb3RlbnRpYWwgZGF0YSBzdHJ1Y3R1cmVzIOKAkyBiZWZvcmUgSSB0cnkgdG8gaW50ZXJwcmV0IHRoZSBkaWZmIGl0c2VsZi4gSSdtIGxvb2tpbmcgZm9yIHRoZSBcImJlZm9yZVwiIHN0YXRlIHRvIHVuZGVyc3RhbmQgdGhlIFwiYWZ0ZXJcIiBzdGF0ZS4gVGhpcyBhcHByb2FjaCBoZWxwcyBtZSBxdWlja2x5IGdyYXNwIHRoZSBpbXBhY3QgYW5kIHJlYXNvbmluZyBiZWhpbmQgdGhlIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEyMiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDc6MDguMzU1MTQ1MTM5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODkzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Njc2kvc2cuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODYwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODYwOlxcdFxcbjE4NjE6XFx0XFx0aWYgKGJsa19zaXplIFxcdTAwM2MgMClcXG4xODYyOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjE4NjM6XFx0XFx0aWYgKDAgPT0gYmxrX3NpemUpXFxuMTg2NDpcXHRcXHRcXHQrK2Jsa19zaXplO1xcdC8qIGRvbid0IGtub3cgd2h5ICovXFxuMTg2NTpcXHRcXHQvKiByb3VuZCByZXF1ZXN0IHVwIHRvIG5leHQgaGlnaGVzdCBTR19TRUNUT1JfU1ogYnl0ZSBib3VuZGFyeSAqL1xcbjE4NjY6XFx0XFx0YmxrX3NpemUgPSBBTElHTihibGtfc2l6ZSwgU0dfU0VDVE9SX1NaKTtcXG4xODY3OlxcdFxcdFNDU0lfTE9HX1RJTUVPVVQoNCwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc2ZwLVxcdTAwM2VwYXJlbnRkcCxcXG4xODY4OlxcdFxcdFxcdFxcXCJzZ19idWlsZF9pbmRpcmVjdDogYnVmZl9zaXplPSVkLCBibGtfc2l6ZT0lZFxcXFxuXFxcIixcXG4xODY5OlxcdFxcdFxcdGJ1ZmZfc2l6ZSwgYmxrX3NpemUpKTtcXG4xODcwOlxcdFxcbjE4NzE6XFx0XFx0LyogTi5CLiByZXRfc3ogY2FycmllZCBpbnRvIHRoaXMgYmxvY2sgLi4uICovXFxuMTg3MjpcXHRcXHRteF9zY19lbGVtcyA9IHNnX2J1aWxkX3NnYXQoc2NocCwgc2ZwLCBzZ190YWJsZXNpemUpO1xcbjE4NzM6XFx0XFx0aWYgKG14X3NjX2VsZW1zIFxcdTAwM2MgMClcXG4xODc0OlxcdFxcdFxcdHJldHVybiBteF9zY19lbGVtcztcXHQvKiBtb3N0IGxpa2VseSAtRU5PTUVNICovXFxuMTg3NTpcXHRcXG4xODc2OlxcdFxcdG51bSA9IHNjYXR0ZXJfZWxlbV9zejtcXG4xODc3OlxcdFxcdGlmICh1bmxpa2VseShudW0gIT0gc2NhdHRlcl9lbGVtX3N6X3ByZXYpKSB7XFxuMTg3ODpcXHRcXHRcXHRpZiAobnVtIFxcdTAwM2MgKGludClQQUdFX1NJWkUpIHtcXG4xODc5OlxcdFxcdFxcdFxcdHNjYXR0ZXJfZWxlbV9zeiA9IFBBR0VfU0laRTtcXG4xODgwOlxcdFxcdFxcdFxcdHNjYXR0ZXJfZWxlbV9zel9wcmV2ID0gUEFHRV9TSVpFO1xcbjE4ODE6XFx0XFx0XFx0XFx0bnVtID0gUEFHRV9TSVpFO1xcbjE4ODI6XFx0XFx0XFx0fSBlbHNlXFxuMTg4MzpcXHRcXHRcXHRcXHRzY2F0dGVyX2VsZW1fc3pfcHJldiA9IG51bTtcXG4xODg0OlxcdFxcdH1cXG4xODg1OlxcdFxcbjE4ODY6XFx0XFx0b3JkZXIgPSBnZXRfb3JkZXIobnVtKTtcXG4xODg3OlxcdHJldHJ5OlxcbjE4ODg6XFx0XFx0cmV0X3N6ID0gMSBcXHUwMDNjXFx1MDAzYyAoUEFHRV9TSElGVCArIG9yZGVyKTtcXG4xODg5OlxcdFxcbjE4OTA6XFx0XFx0Zm9yIChrID0gMCwgcmVtX3N6ID0gYmxrX3NpemU7IHJlbV9zeiBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgayBcXHUwMDNjIG14X3NjX2VsZW1zO1xcbjE4OTE6XFx0XFx0ICAgICBrKyssIHJlbV9zeiAtPSByZXRfc3opIHtcXG4xODkyOlxcdFxcbjE4OTM6XFx0XFx0XFx0bnVtID0gKHJlbV9zeiBcXHUwMDNlIHNjYXR0ZXJfZWxlbV9zel9wcmV2KSA/XFxuMTg5NDpcXHRcXHRcXHRcXHRzY2F0dGVyX2VsZW1fc3pfcHJldiA6IHJlbV9zejtcXG4xODk1OlxcdFxcbjE4OTY6XFx0XFx0XFx0c2NocC1cXHUwMDNlcGFnZXNba10gPSBhbGxvY19wYWdlcyhnZnBfbWFzaywgb3JkZXIpO1xcbjE4OTc6XFx0XFx0XFx0aWYgKCFzY2hwLVxcdTAwM2VwYWdlc1trXSlcXG4xODk4OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjE4OTk6XFx0XFxuMTkwMDpcXHRcXHRcXHRpZiAobnVtID09IHNjYXR0ZXJfZWxlbV9zel9wcmV2KSB7XFxuMTkwMTpcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkocmV0X3N6IFxcdTAwM2Ugc2NhdHRlcl9lbGVtX3N6X3ByZXYpKSB7XFxuMTkwMjpcXHRcXHRcXHRcXHRcXHRzY2F0dGVyX2VsZW1fc3ogPSByZXRfc3o7XFxuMTkwMzpcXHRcXHRcXHRcXHRcXHRzY2F0dGVyX2VsZW1fc3pfcHJldiA9IHJldF9zejtcXG4xOTA0OlxcdFxcdFxcdFxcdH1cXG4xOTA1OlxcdFxcdFxcdH1cXG4xOTA2OlxcdFxcbjE5MDc6XFx0XFx0XFx0U0NTSV9MT0dfVElNRU9VVCg1LCBzZ19wcmludGsoS0VSTl9JTkZPLCBzZnAtXFx1MDAzZXBhcmVudGRwLFxcbjE5MDg6XFx0XFx0XFx0XFx0XFx0IFxcXCJzZ19idWlsZF9pbmRpcmVjdDogaz0lZCwgbnVtPSVkLCByZXRfc3o9JWRcXFxcblxcXCIsXFxuMTkwOTpcXHRcXHRcXHRcXHRcXHQgaywgbnVtLCByZXRfc3opKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDc6MDguMzU1Mjg2NTE5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUwNzQ5MzEwMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbjogc2dfYnVpbGRfaW5kaXJlY3QqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGJhY2sgaW50byB0aGlzLiBJJ20gZ29pbmcgdG8gcmV2aXNpdCBgc2dfYnVpbGRfaW5kaXJlY3RgLiBJJ3ZlIGdvdCBhIGdvb2QgZ3Jhc3Agb2YgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQsIGJ1dCBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIHRoZSBleGFjdCBmdW5jdGlvbiBvZiBgc2dfYnVpbGRfaW5kaXJlY3RgLiBJIGtub3cgaXQncyBhIGtleSBwaWVjZSwgYW5kIEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBzbyBJIGNhbiB1bmRlcnN0YW5kIGFueSByZWxhdGVkIGNvZGUgY2hhbmdlcy4gSSdtIGxvb2tpbmcgZm9yIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscyBvZiBpdHMgYmVoYXZpb3I6IGl0cyBpbnB1dHMsIG91dHB1dHMsIHNpZGUgZWZmZWN0cywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBzeXN0ZW0uIEknbGwgZm9jdXMgb24gaG93IHRoZSBjb2RlIGltcGxlbWVudHMgdGhlIGNvbmNlcHRzIEkgdW5kZXJzdGFuZCwgYW5kIGFueSBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpY3MgdGhhdCBhcmUgbmV3IHRvIG1lLiBFc3NlbnRpYWxseSwgSSdtIHJlYWR5IHRvIHJlLWV4YW1pbmUgdGhlIG1lY2hhbmljcyBvZiB0aGlzIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjM3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NzoxMy40MzAyMjA3NTVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3NDExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvc2NzaS9zZy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4MzA6XFx0XFx0XFx0YmxrX21xX2ZyZWVfcmVxdWVzdChzcnAtXFx1MDAzZXJxKTtcXG4xODMxOlxcdFxcbjE4MzI6XFx0XFx0aWYgKHNycC1cXHUwMDNlcmVzX3VzZWQpXFxuMTgzMzpcXHRcXHRcXHRzZ191bmxpbmtfcmVzZXJ2ZShzZnAsIHNycCk7XFxuMTgzNDpcXHRcXHRlbHNlXFxuMTgzNTpcXHRcXHRcXHRzZ19yZW1vdmVfc2NhdChzZnAsIHJlcV9zY2hwKTtcXG4xODM2OlxcdFxcbjE4Mzc6XFx0XFx0cmV0dXJuIHJldDtcXG4xODM4OlxcdH1cXG4xODM5OlxcdFxcbjE4NDA6XFx0c3RhdGljIGludFxcbjE4NDE6XFx0c2dfYnVpbGRfc2dhdChTZ19zY2F0dGVyX2hvbGQgKiBzY2hwLCBjb25zdCBTZ19mZCAqIHNmcCwgaW50IHRhYmxlc2l6ZSlcXG4xODQyOlxcdHtcXG4xODQzOlxcdFxcdGludCBzZ19idWZmbGVuID0gdGFibGVzaXplICogc2l6ZW9mKHN0cnVjdCBwYWdlICopO1xcbjE4NDQ6XFx0XFx0Z2ZwX3QgZ2ZwX2ZsYWdzID0gR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTjtcXG4xODQ1OlxcdFxcbjE4NDY6XFx0XFx0c2NocC1cXHUwMDNlcGFnZXMgPSBremFsbG9jKHNnX2J1ZmZsZW4sIGdmcF9mbGFncyk7XFxuMTg0NzpcXHRcXHRpZiAoIXNjaHAtXFx1MDAzZXBhZ2VzKVxcbjE4NDg6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTg0OTpcXHRcXHRzY2hwLVxcdTAwM2VzZ2xpc3RfbGVuID0gc2dfYnVmZmxlbjtcXG4xODUwOlxcdFxcdHJldHVybiB0YWJsZXNpemU7XFx0LyogbnVtYmVyIG9mIHNjYXRfZ2F0aCBlbGVtZW50cyBhbGxvY2F0ZWQgKi9cXG4xODUxOlxcdH1cXG4xODUyOlxcdFxcbjE4NTM6XFx0c3RhdGljIGludFxcbjE4NTQ6XFx0c2dfYnVpbGRfaW5kaXJlY3QoU2dfc2NhdHRlcl9ob2xkICogc2NocCwgU2dfZmQgKiBzZnAsIGludCBidWZmX3NpemUpXFxuMTg1NTpcXHR7XFxuMTg1NjpcXHRcXHRpbnQgcmV0X3N6ID0gMCwgaSwgaywgcmVtX3N6LCBudW0sIG14X3NjX2VsZW1zO1xcbjE4NTc6XFx0XFx0aW50IHNnX3RhYmxlc2l6ZSA9IHNmcC1cXHUwMDNlcGFyZW50ZHAtXFx1MDAzZXNnX3RhYmxlc2l6ZTtcXG4xODU4OlxcdFxcdGludCBibGtfc2l6ZSA9IGJ1ZmZfc2l6ZSwgb3JkZXI7XFxuMTg1OTpcXHRcXHRnZnBfdCBnZnBfbWFzayA9IEdGUF9BVE9NSUMgfCBfX0dGUF9DT01QIHwgX19HRlBfTk9XQVJOIHwgX19HRlBfWkVSTztcXG4xODYwOlxcdFxcbjE4NjE6XFx0XFx0aWYgKGJsa19zaXplIFxcdTAwM2MgMClcXG4xODYyOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjE4NjM6XFx0XFx0aWYgKDAgPT0gYmxrX3NpemUpXFxuMTg2NDpcXHRcXHRcXHQrK2Jsa19zaXplO1xcdC8qIGRvbid0IGtub3cgd2h5ICovXFxuMTg2NTpcXHRcXHQvKiByb3VuZCByZXF1ZXN0IHVwIHRvIG5leHQgaGlnaGVzdCBTR19TRUNUT1JfU1ogYnl0ZSBib3VuZGFyeSAqL1xcbjE4NjY6XFx0XFx0YmxrX3NpemUgPSBBTElHTihibGtfc2l6ZSwgU0dfU0VDVE9SX1NaKTtcXG4xODY3OlxcdFxcdFNDU0lfTE9HX1RJTUVPVVQoNCwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc2ZwLVxcdTAwM2VwYXJlbnRkcCxcXG4xODY4OlxcdFxcdFxcdFxcXCJzZ19idWlsZF9pbmRpcmVjdDogYnVmZl9zaXplPSVkLCBibGtfc2l6ZT0lZFxcXFxuXFxcIixcXG4xODY5OlxcdFxcdFxcdGJ1ZmZfc2l6ZSwgYmxrX3NpemUpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDc6MTMuNDMwNDEyMDg2WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQwMjc3MTIxMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcsIHBpY2tpbmcgdXAgZnJvbSBsaW5lIDE5MTAgb253YXJkcyB3aXRoaW4gYHNnX2J1aWxkX2luZGlyZWN0YDpcblxuKipFeGFtaW5pbmcgdGhlIFRhaWwgRW5kIG9mIHNnX2J1aWxkX2luZGlyZWN0KipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBiYWNrIGludG8gYHNnX2J1aWxkX2luZGlyZWN0YCwgc3BlY2lmaWNhbGx5IGZyb20gbGluZSAxOTEwLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgZnVuY3Rpb24gY29uY2x1ZGVzIGl0cyB3b3JrLiBJIHJlbWVtYmVyIHRoZSBjb3JlIG9mIGl0IGlzIHNldHRpbmcgdXAgdGhlIGluZGlyZWN0IGJ1ZmZlciwgYnV0IHRoZSBkZXRhaWxzIG9mIHRoZSBmaW5hbCBzdGVwcyBhcmUgYSBiaXQgaGF6eS4gSSdtIGZvY3VzaW5nIG9uIHdoYXQgaGFwcGVucyAqYWZ0ZXIqIHRoZSBtYWluIGJ1ZmZlciBzZXR1cCwgY2hlY2tpbmcgZm9yIGFueSBlZGdlIGNhc2VzLCBlcnJvciBoYW5kbGluZywgb3IgY2xlYW51cCBwcm9jZWR1cmVzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHdoZXJlIHRoZSBmdW5jdGlvbiByZXR1cm5zLCB3aGF0IHZhbHVlcyBpdCdzIHJldHVybmluZywgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucy4gQXJlIHRoZXJlIGFueSBmaW5hbCBjaGVja3Mgb3Igc2FuaXR5IHZhbGlkYXRpb25zIGhhcHBlbmluZyBiZWZvcmUgdGhlIGRhdGEgaXMgaGFuZGVkIG9mZj8gRG9lcyBpdCByZXR1cm4gYSBzdWNjZXNzIG9yIGZhaWx1cmUgY29kZT8gSSdtIGFudGljaXBhdGluZyB0aGF0IHRoaXMgaXMgd2hlcmUgYW55IGZpbmFsIHJlc291cmNlIG1hbmFnZW1lbnQgaGFwcGVucyBhcyB3ZWxsLCBtYXliZSBmcmVlaW5nIGFsbG9jYXRlZCBtZW1vcnkgb3IgcmVsZWFzaW5nIGxvY2tzIGlmIG5lY2Vzc2FyeS4gSXQncyB0aGUgY3JpdGljYWwgY2xvc2luZyBzdGF0ZW1lbnQsIGFuZCB1bmRlcnN0YW5kaW5nIGl0IGlzIHZpdGFsIGZvciBlbnN1cmluZyB0aGUgcm9idXN0bmVzcyBvZiB0aGlzIHN5c3RlbS4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgaG93IHRvIGRlYWwgd2l0aCB0aGUgcmVzdWx0cywgc28gSSBjYW4gZW5zdXJlIHByb3BlciBvcGVyYXRpb24gaW4gYSBsYXJnZXIgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE5NCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDc6MTcuNDU4MTI2ODIyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0Mzg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Njc2kvc2cuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTEwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxOTEwOlxcdFxcdH1cXHRcXHQvKiBlbmQgb2YgZm9yIGxvb3AgKi9cXG4xOTExOlxcdFxcbjE5MTI6XFx0XFx0c2NocC1cXHUwMDNlcGFnZV9vcmRlciA9IG9yZGVyO1xcbjE5MTM6XFx0XFx0c2NocC1cXHUwMDNla191c2Vfc2cgPSBrO1xcbjE5MTQ6XFx0XFx0U0NTSV9MT0dfVElNRU9VVCg1LCBzZ19wcmludGsoS0VSTl9JTkZPLCBzZnAtXFx1MDAzZXBhcmVudGRwLFxcbjE5MTU6XFx0XFx0XFx0XFx0IFxcXCJzZ19idWlsZF9pbmRpcmVjdDoga191c2Vfc2c9JWQsIHJlbV9zej0lZFxcXFxuXFxcIixcXG4xOTE2OlxcdFxcdFxcdFxcdCBrLCByZW1fc3opKTtcXG4xOTE3OlxcdFxcbjE5MTg6XFx0XFx0c2NocC1cXHUwMDNlYnVmZmxlbiA9IGJsa19zaXplO1xcbjE5MTk6XFx0XFx0aWYgKHJlbV9zeiBcXHUwMDNlIDApXFx0LyogbXVzdCBoYXZlIGZhaWxlZCAqL1xcbjE5MjA6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTkyMTpcXHRcXHRyZXR1cm4gMDtcXG4xOTIyOlxcdG91dDpcXG4xOTIzOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBrOyBpKyspXFxuMTkyNDpcXHRcXHRcXHRfX2ZyZWVfcGFnZXMoc2NocC1cXHUwMDNlcGFnZXNbaV0sIG9yZGVyKTtcXG4xOTI1OlxcdFxcbjE5MjY6XFx0XFx0aWYgKC0tb3JkZXIgXFx1MDAzZT0gMClcXG4xOTI3OlxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuMTkyODpcXHRcXG4xOTI5OlxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjE5MzA6XFx0fVxcbjE5MzE6XFx0XFxuMTkzMjpcXHRzdGF0aWMgdm9pZFxcbjE5MzM6XFx0c2dfcmVtb3ZlX3NjYXQoU2dfZmQgKiBzZnAsIFNnX3NjYXR0ZXJfaG9sZCAqIHNjaHApXFxuMTkzNDpcXHR7XFxuMTkzNTpcXHRcXHRTQ1NJX0xPR19USU1FT1VUKDQsIHNnX3ByaW50ayhLRVJOX0lORk8sIHNmcC1cXHUwMDNlcGFyZW50ZHAsXFxuMTkzNjpcXHRcXHRcXHRcXHQgXFxcInNnX3JlbW92ZV9zY2F0OiBrX3VzZV9zZz0lZFxcXFxuXFxcIiwgc2NocC1cXHUwMDNla191c2Vfc2cpKTtcXG4xOTM3OlxcdFxcdGlmIChzY2hwLVxcdTAwM2VwYWdlcyBcXHUwMDI2XFx1MDAyNiBzY2hwLVxcdTAwM2VzZ2xpc3RfbGVuIFxcdTAwM2UgMCkge1xcbjE5Mzg6XFx0XFx0XFx0aWYgKCFzY2hwLVxcdTAwM2VkaW9faW5fdXNlKSB7XFxuMTkzOTpcXHRcXHRcXHRcXHRpbnQgaztcXG4xOTQwOlxcdFxcbjE5NDE6XFx0XFx0XFx0XFx0Zm9yIChrID0gMDsgayBcXHUwMDNjIHNjaHAtXFx1MDAzZWtfdXNlX3NnIFxcdTAwMjZcXHUwMDI2IHNjaHAtXFx1MDAzZXBhZ2VzW2tdOyBrKyspIHtcXG4xOTQyOlxcdFxcdFxcdFxcdFxcdFNDU0lfTE9HX1RJTUVPVVQoNSxcXG4xOTQzOlxcdFxcdFxcdFxcdFxcdFxcdHNnX3ByaW50ayhLRVJOX0lORk8sIHNmcC1cXHUwMDNlcGFyZW50ZHAsXFxuMTk0NDpcXHRcXHRcXHRcXHRcXHRcXHRcXFwic2dfcmVtb3ZlX3NjYXQ6IGs9JWQsIHBnPTB4JXBcXFxcblxcXCIsXFxuMTk0NTpcXHRcXHRcXHRcXHRcXHRcXHRrLCBzY2hwLVxcdTAwM2VwYWdlc1trXSkpO1xcbjE5NDY6XFx0XFx0XFx0XFx0XFx0X19mcmVlX3BhZ2VzKHNjaHAtXFx1MDAzZXBhZ2VzW2tdLCBzY2hwLVxcdTAwM2VwYWdlX29yZGVyKTtcXG4xOTQ3OlxcdFxcdFxcdFxcdH1cXG4xOTQ4OlxcdFxcbjE5NDk6XFx0XFx0XFx0XFx0a2ZyZWUoc2NocC1cXHUwMDNlcGFnZXMpO1xcbjE5NTA6XFx0XFx0XFx0fVxcbjE5NTE6XFx0XFx0fVxcbjE5NTI6XFx0XFx0bWVtc2V0KHNjaHAsIDAsIHNpemVvZiAoKnNjaHApKTtcXG4xOTUzOlxcdH1cXG4xOTU0OlxcdFxcbjE5NTU6XFx0c3RhdGljIGludFxcbjE5NTY6XFx0c2dfcmVhZF9veGZlcihTZ19yZXF1ZXN0ICogc3JwLCBjaGFyIF9fdXNlciAqb3V0cCwgaW50IG51bV9yZWFkX3hmZXIpXFxuMTk1NzpcXHR7XFxuMTk1ODpcXHRcXHRTZ19zY2F0dGVyX2hvbGQgKnNjaHAgPSBcXHUwMDI2c3JwLVxcdTAwM2VkYXRhO1xcbjE5NTk6XFx0XFx0aW50IGssIG51bTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDc6MTcuNDU4MjcyODAyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc2NDI3MDQyNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBPcmlnaW4gYW5kIFVzYWdlIG9mIGBzY2F0dGVyX2VsZW1fc3pgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBkZXRhaWxzIHN1cnJvdW5kaW5nIGBzY2F0dGVyX2VsZW1fc3pgLiBNeSBpbml0aWFsIGZvY3VzIGlzIHRvIHRyYWNlIGl0cyBwcm92ZW5hbmNlIGFuZCB1bmRlcnN0YW5kIGl0cyBleGFjdCBkZWZpbml0aW9uLiBJIG5lZWQgdG8ga25vdyB3aGVyZSB0aGlzIHZhcmlhYmxlIGlzIGRlY2xhcmVkLCBpbml0aWFsaXplZCwgYW5kLCBjcml0aWNhbGx5LCBob3cgaXQncyB1bHRpbWF0ZWx5IHVzZWQgd2l0aGluIHRoZSBjb2RlLiBDb250ZXh0IGlzIGtpbmcsIGFuZCBrbm93aW5nIHRoZSBzY29wZSBhbmQgcG90ZW50aWFsIGRlcGVuZGVuY2llcyB3aWxsIGJlIGNydWNpYWwgZm9yIGEgdGhvcm91Z2ggZ3Jhc3Agb2YgaXRzIGZ1bmN0aW9uLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCBhbnkgaW5jbHVkZSBmaWxlcywgZnVuY3Rpb24gY2FsbHMsIGFuZCBhc3NpZ25tZW50cyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4gTXkgZ29hbCBpcyBhIGdyYW51bGFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGludGVuZGVkIHNlbWFudGljcyBvZiBgc2NhdHRlcl9lbGVtX3N6YCBpbiB0aGUgZ3JlYXRlciBzeXN0ZW0gYXJjaGl0ZWN0dXJlIGFuZCBob3cgaXQgbWlnaHQgaW1wYWN0IHJlc291cmNlIHV0aWxpemF0aW9uIG9yIHBlcmZvcm1hbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzI0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NzoyNS4xMDA5ODExNTJaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMTkwMjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNjYXR0ZXJfZWxlbV9zelwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Njc2kvc2cuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Njc2kvc2cuYz05Mj1zdGF0aWMgaW50IHNnX2FsbG93X2RpbyA9IFNHX0FMTE9XX0RJT19ERUY7XFxuZHJpdmVycy9zY3NpL3NnLmMtOTMtXFxuZHJpdmVycy9zY3NpL3NnLmM6OTQ6c3RhdGljIGludCBzY2F0dGVyX2VsZW1fc3ogPSBTR19TQ0FUVEVSX1NaO1xcbmRyaXZlcnMvc2NzaS9zZy5jOjk1OnN0YXRpYyBpbnQgc2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBTR19TQ0FUVEVSX1NaO1xcbmRyaXZlcnMvc2NzaS9zZy5jLTk2LVxcbi0tXFxuZHJpdmVycy9zY3NpL3NnLmM9MTU5MD1zZ19yZW1vdmVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmNsX2RldilcXG4tLVxcbmRyaXZlcnMvc2NzaS9zZy5jLTE2MjMtXFxuZHJpdmVycy9zY3NpL3NnLmM6MTYyNDptb2R1bGVfcGFyYW1fbmFtZWQoc2NhdHRlcl9lbGVtX3N6LCBzY2F0dGVyX2VsZW1fc3osIGludCwgU19JUlVHTyB8IFNfSVdVU1IpO1xcbmRyaXZlcnMvc2NzaS9zZy5jLTE2MjUtbW9kdWxlX3BhcmFtX25hbWVkKGFsbG93X2Rpbywgc2dfYWxsb3dfZGlvLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTtcXG4tLVxcbmRyaXZlcnMvc2NzaS9zZy5jPTE2NTg9TU9EVUxFX0FMSUFTX0NIQVJERVZfTUFKT1IoU0NTSV9HRU5FUklDX01BSk9SKTtcXG5kcml2ZXJzL3Njc2kvc2cuYy0xNjU5LVxcbmRyaXZlcnMvc2NzaS9zZy5jOjE2NjA6TU9EVUxFX1BBUk1fREVTQyhzY2F0dGVyX2VsZW1fc3osIFxcXCJzY2F0dGVyIGdhdGhlciBlbGVtZW50IFxcXCJcXG5kcml2ZXJzL3Njc2kvc2cuYy0xNjYxLSAgICAgICAgICAgICAgICBcXFwic2l6ZSAoZGVmYXVsdDogbWF4KFNHX1NDQVRURVJfU1osIFBBR0VfU0laRSkpXFxcIik7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2cuYz0xNjY2PWluaXRfc2codm9pZClcXG4tLVxcbmRyaXZlcnMvc2NzaS9zZy5jLTE2NjktXFxuZHJpdmVycy9zY3NpL3NnLmM6MTY3MDpcXHRpZiAoc2NhdHRlcl9lbGVtX3N6IFxcdTAwM2MgUEFHRV9TSVpFKSB7XFxuZHJpdmVycy9zY3NpL3NnLmM6MTY3MTpcXHRcXHRzY2F0dGVyX2VsZW1fc3ogPSBQQUdFX1NJWkU7XFxuZHJpdmVycy9zY3NpL3NnLmM6MTY3MjpcXHRcXHRzY2F0dGVyX2VsZW1fc3pfcHJldiA9IHNjYXR0ZXJfZWxlbV9zejtcXG5kcml2ZXJzL3Njc2kvc2cuYy0xNjczLVxcdH1cXG4tLVxcbmRyaXZlcnMvc2NzaS9zZy5jPTE4NTQ9c2dfYnVpbGRfaW5kaXJlY3QoU2dfc2NhdHRlcl9ob2xkICogc2NocCwgU2dfZmQgKiBzZnAsIGludCBidWZmX3NpemUpXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2cuYy0xODc1LVxcbmRyaXZlcnMvc2NzaS9zZy5jOjE4NzY6XFx0bnVtID0gc2NhdHRlcl9lbGVtX3N6O1xcbmRyaXZlcnMvc2NzaS9zZy5jOjE4Nzc6XFx0aWYgKHVubGlrZWx5KG51bSAhPSBzY2F0dGVyX2VsZW1fc3pfcHJldikpIHtcXG5kcml2ZXJzL3Njc2kvc2cuYy0xODc4LVxcdFxcdGlmIChudW0gXFx1MDAzYyAoaW50KVBBR0VfU0laRSkge1xcbmRyaXZlcnMvc2NzaS9zZy5jOjE4Nzk6XFx0XFx0XFx0c2NhdHRlcl9lbGVtX3N6ID0gUEFHRV9TSVpFO1xcbmRyaXZlcnMvc2NzaS9zZy5jOjE4ODA6XFx0XFx0XFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBQQUdFX1NJWkU7XFxuZHJpdmVycy9zY3NpL3NnLmMtMTg4MS1cXHRcXHRcXHRudW0gPSBQQUdFX1NJWkU7XFxuZHJpdmVycy9zY3NpL3NnLmMtMTg4Mi1cXHRcXHR9IGVsc2VcXG5kcml2ZXJzL3Njc2kvc2cuYzoxODgzOlxcdFxcdFxcdHNjYXR0ZXJfZWxlbV9zel9wcmV2ID0gbnVtO1xcbmRyaXZlcnMvc2NzaS9zZy5jLTE4ODQtXFx0fVxcbi0tXFxuZHJpdmVycy9zY3NpL3NnLmMtMTg5Mi1cXG5kcml2ZXJzL3Njc2kvc2cuYzoxODkzOlxcdFxcdG51bSA9IChyZW1fc3ogXFx1MDAzZSBzY2F0dGVyX2VsZW1fc3pfcHJldikgP1xcbmRyaXZlcnMvc2NzaS9zZy5jOjE4OTQ6XFx0XFx0XFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgOiByZW1fc3o7XFxuZHJpdmVycy9zY3NpL3NnLmMtMTg5NS1cXG4tLVxcbmRyaXZlcnMvc2NzaS9zZy5jLTE4OTktXFxuZHJpdmVycy9zY3NpL3NnLmM6MTkwMDpcXHRcXHRpZiAobnVtID09IHNjYXR0ZXJfZWxlbV9zel9wcmV2KSB7XFxuZHJpdmVycy9zY3NpL3NnLmM6MTkwMTpcXHRcXHRcXHRpZiAodW5saWtlbHkocmV0X3N6IFxcdTAwM2Ugc2NhdHRlcl9lbGVtX3N6X3ByZXYpKSB7XFxuZHJpdmVycy9zY3NpL3NnLmM6MTkwMjpcXHRcXHRcXHRcXHRzY2F0dGVyX2VsZW1fc3ogPSByZXRfc3o7XFxuZHJpdmVycy9zY3NpL3NnLmM6MTkwMzpcXHRcXHRcXHRcXHRzY2F0dGVyX2VsZW1fc3pfcHJldiA9IHJldF9zejtcXG5kcml2ZXJzL3Njc2kvc2cuYy0xOTA0LVxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDc6MjUuMTY0MTc3NDAyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ5MDQyMDQ5Njk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBJbnRlZ2VyIE92ZXJmbG93IGluIGBkcml2ZXJzL3Njc2kvc2cuY2AqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBnaXQgY29tbWl0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdnVsbmVyYWJpbGl0eSBvciBidWcgaXQgYWRkcmVzc2VzLiBTZWVtcyB3ZSBhcmUgaW4gYGRyaXZlcnMvc2NzaS9zZy5jYCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgdGhlIHNjYXR0ZXItZ2F0aGVyIGxpc3QgaGFuZGxpbmcuXG5cblJpZ2h0LCB0aGUga2V5IHNlY3Rpb24gaXMgdGhlIGNvbXBhcmlzb24gaW52b2x2aW5nIGBzY2F0dGVyX2VsZW1fc3pgIGFuZCBgUEFHRV9TSVpFYC4gQmVmb3JlIHRoZSBwYXRjaCwgdGhlIGNvZGUgd2FzIHN1c2NlcHRpYmxlIHRvIGFuIGludGVnZXIgb3ZlcmZsb3csIHBhcnRpY3VsYXJseSBpZiBhIHJvb3QgdXNlciB3YXMgYWJsZSB0byBtb2RpZnkgYHNjYXR0ZXJfZWxlbV9zemAgd2hpY2ggaXMgYSBtb2R1bGUgcGFyYW1ldGVyLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGF0IGlmIGEgbWFsaWNpb3VzIHZhbHVlIGxpa2UgYSBsYXJnZSBuZWdhdGl2ZSBudW1iZXIsIG9yIGEgc21hbGwgbnVtYmVyIGxlc3MgdGhhbiBgUEFHRV9TSVpFYCBsaWtlIDAsIGNvdWxkIGJlIHdyaXR0ZW4gdG8gYHNjYXR0ZXJfZWxlbV9zemAuXG5cblRoZSBjb3JlIGlzc3VlIGlzIGhvdyB0aGUgc2lnbmVkIGludGVnZXIgYG51bWAgaXMgY29tcGFyZWQgd2l0aCB0aGUgdW5zaWduZWQgYFBBR0VfU0laRWAuIFRoZSBvcmlnaW5hbCBgaWYgKG51bSBcdTAwM2MgUEFHRV9TSVpFKWAgd291bGQgcHJvbW90ZSBhIG5lZ2F0aXZlIGBudW1gIHRvIGFuIHVuc2lnbmVkIGxvbmcuICBTbyBpZiBgbnVtYCB3YXMgLTEsIHRoZSBjb21wYXJpc29uIHdvdWxkIGVmZmVjdGl2ZWx5IGJlY29tZSAgYDB4RkZGRkZGRkZGRkZGRkZGRlVMIFx1MDAzYyBQQUdFX1NJWkVgLCB3aGljaCBpcyBhbHdheXMgZmFsc2UsIHNraXBwaW5nIHRoZSBpbnRlbmRlZCByZXNpemUgYW5kIGFsbG9jYXRpb24sIGFuZCBwb3RlbnRpYWxseSBjYXVzaW5nIGFuIHVuZGVmaW5lZCBiZWhhdmlvciBvbiBgZ2V0X29yZGVyKG51bSlgLiBDb252ZXJzZWx5LCBpZiBgbnVtYCB3YXMgYSB2YWx1ZSBsaWtlIDEwMCwgdGhlIGNvZGUgd291bGQgcHJvY2VlZCB0byBgc2NhdHRlcl9lbGVtX3N6ID0gUEFHRV9TSVpFYCwgYnV0IGBudW1gIHdvdWxkIG5vdCBiZSB1cGRhdGVkISBTdWJzZXF1ZW50IG9wZXJhdGlvbnMgd2l0aCB0aGUgb3JpZ2luYWwgc21hbGxlciBgbnVtYCBjb3VsZCBzdGlsbCBjYXVzZSBwcm9ibGVtcy5cblxuVGhpcyBjb3VsZCBsZWFkIHRvIHVzaW5nIGEgbmVnYXRpdmUgdmFsdWUgaW4gYGdldF9vcmRlcigpYCwgcmVzdWx0aW5nIGluIGVpdGhlciBhIGh1Z2Ugb3JkZXIgdmFsdWUgb3IgYW4gdW5kZWZpbmVkIHNoaWZ0IGluIGByZXRfc3ogPSAxIFx1MDAzY1x1MDAzYyAoUEFHRV9TSElGVCArIG9yZGVyKTtgLiBUaGlzIGNvdWxkIGNhdXNlIGFsbCBzb3J0cyBvZiBtZW1vcnkgY29ycnVwdGlvbiwgaW5jbHVkaW5nIHVuZGVmaW5lZCBiZWhhdmlvciBvciBjcmFzaCB3aXRoIHBhZ2UgYWxsb2NhdGlvbiB3YXJuaW5ncy5cblxuTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgbWVtb3J5IHNhZmV0eS4gIExldCdzIGNvbnNpZGVyIHRoYXQgdGhlIGNvZGUgKnNob3VsZCogYmUgemVyby1pbml0aWFsaXppbmcgYW55IGFsbG9jYXRlZCBtZW1vcnkuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSB1c2VzIG9mIGBzY2hwLVx1MDAzZXBhZ2VzYCBhbmQgdGhlIGFsbG9jYXRpb24uIEkgc2VlIGEgYGdmcF9tYXNrYCBvZiBgR0ZQX0FUT01JQyB8IF9fR0ZQX0NPTVAgfCBfX0dGUF9OT1dBUk4gfCBfX0dGUF9aRVJPYCwgYW5kIGFsc28gYHNjaHAtXHUwMDNlcGFnZXMgPSBremFsbG9jYC4gTG9va3MgbGlrZSBpdCdzIHplcm8taW5pdGlhbGl6ZWQgZHVyaW5nIGFsbG9jYXRpb24gaW4gYHNnX2J1aWxkX2luZGlyZWN0YC4gIEknbGwgc3RpbGwgdmVyaWZ5IGFsbCByZWFkL3dyaXRlIGFjY2Vzc2VzIHRvIHRoYXQgbWVtb3J5LCBqdXN0IHRvIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTk3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjQ4OjE0LjIwNjIyOTk5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDQ5MTczNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2dfYnVpbGRfaW5kaXJlY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zY3NpL3NnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zY3NpL3NnLmM9MTgzPXN0YXRpYyBpbnQgc2dfZmluaXNoX3JlbV9yZXEoU2dfcmVxdWVzdCAqIHNycCk7XFxuZHJpdmVycy9zY3NpL3NnLmM6MTg0OnN0YXRpYyBpbnQgc2dfYnVpbGRfaW5kaXJlY3QoU2dfc2NhdHRlcl9ob2xkICogc2NocCwgU2dfZmQgKiBzZnAsIGludCBidWZmX3NpemUpO1xcbmRyaXZlcnMvc2NzaS9zZy5jLTE4NS1zdGF0aWMgc3NpemVfdCBzZ19uZXdfcmVhZChTZ19mZCAqIHNmcCwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LFxcbi0tXFxuZHJpdmVycy9zY3NpL3NnLmM9MTcxMT1zZ19zdGFydF9yZXEoU2dfcmVxdWVzdCAqc3JwLCB1bnNpZ25lZCBjaGFyICpjbWQpXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2cuYy0xNzgyLVxcdFxcdH0gZWxzZSB7XFxuZHJpdmVycy9zY3NpL3NnLmM6MTc4MzpcXHRcXHRcXHRyZXMgPSBzZ19idWlsZF9pbmRpcmVjdChyZXFfc2NocCwgc2ZwLCBkeGZlcl9sZW4pO1xcbmRyaXZlcnMvc2NzaS9zZy5jLTE3ODQtXFx0XFx0XFx0aWYgKHJlcykge1xcbi0tXFxuZHJpdmVycy9zY3NpL3NnLmM9MTg1Mz1zdGF0aWMgaW50XFxuZHJpdmVycy9zY3NpL3NnLmM6MTg1NDpzZ19idWlsZF9pbmRpcmVjdChTZ19zY2F0dGVyX2hvbGQgKiBzY2hwLCBTZ19mZCAqIHNmcCwgaW50IGJ1ZmZfc2l6ZSlcXG5kcml2ZXJzL3Njc2kvc2cuYy0xODU1LXtcXG4tLVxcbmRyaXZlcnMvc2NzaS9zZy5jLTE4NjctXFx0U0NTSV9MT0dfVElNRU9VVCg0LCBzZ19wcmludGsoS0VSTl9JTkZPLCBzZnAtXFx1MDAzZXBhcmVudGRwLFxcbmRyaXZlcnMvc2NzaS9zZy5jOjE4Njg6XFx0XFx0XFxcInNnX2J1aWxkX2luZGlyZWN0OiBidWZmX3NpemU9JWQsIGJsa19zaXplPSVkXFxcXG5cXFwiLFxcbmRyaXZlcnMvc2NzaS9zZy5jLTE4NjktXFx0XFx0YnVmZl9zaXplLCBibGtfc2l6ZSkpO1xcbi0tXFxuZHJpdmVycy9zY3NpL3NnLmMtMTkwNy1cXHRcXHRTQ1NJX0xPR19USU1FT1VUKDUsIHNnX3ByaW50ayhLRVJOX0lORk8sIHNmcC1cXHUwMDNlcGFyZW50ZHAsXFxuZHJpdmVycy9zY3NpL3NnLmM6MTkwODpcXHRcXHRcXHRcXHQgXFxcInNnX2J1aWxkX2luZGlyZWN0OiBrPSVkLCBudW09JWQsIHJldF9zej0lZFxcXFxuXFxcIixcXG5kcml2ZXJzL3Njc2kvc2cuYy0xOTA5LVxcdFxcdFxcdFxcdCBrLCBudW0sIHJldF9zeikpO1xcbi0tXFxuZHJpdmVycy9zY3NpL3NnLmMtMTkxNC1cXHRTQ1NJX0xPR19USU1FT1VUKDUsIHNnX3ByaW50ayhLRVJOX0lORk8sIHNmcC1cXHUwMDNlcGFyZW50ZHAsXFxuZHJpdmVycy9zY3NpL3NnLmM6MTkxNTpcXHRcXHRcXHQgXFxcInNnX2J1aWxkX2luZGlyZWN0OiBrX3VzZV9zZz0lZCwgcmVtX3N6PSVkXFxcXG5cXFwiLFxcbmRyaXZlcnMvc2NzaS9zZy5jLTE5MTYtXFx0XFx0XFx0IGssIHJlbV9zeikpO1xcbi0tXFxuZHJpdmVycy9zY3NpL3NnLmM9MTk4OT1zZ19idWlsZF9yZXNlcnZlKFNnX2ZkICogc2ZwLCBpbnQgcmVxX3NpemUpXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2cuYy0xOTk3LVxcdFxcdFxcdHJlcV9zaXplID0gUEFHRV9TSVpFO1xcbmRyaXZlcnMvc2NzaS9zZy5jOjE5OTg6XFx0XFx0aWYgKDAgPT0gc2dfYnVpbGRfaW5kaXJlY3Qoc2NocCwgc2ZwLCByZXFfc2l6ZSkpXFxuZHJpdmVycy9zY3NpL3NnLmMtMTk5OS1cXHRcXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjQ4OjE0Ljc1MTE1MjQ2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ1NjMyMzI1MzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBJbmRpcmVjdCBTY2F0dGVyL0dhdGhlciBCdWZmZXJzIGluIGBzZy5jYCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBzZy5jYCBmaWxlIGFuZCB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgaW5kaXJlY3Qgc2NhdHRlci9nYXRoZXIgYnVmZmVycy4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIGNlbnRlcmVkIGFyb3VuZCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB1c2VyIHNwYWNlIOKAkyB3aGVyZSBhcmUgdGhlc2UgZGF0YSB0cmFuc2ZlcnMgaGFwcGVuaW5nPyBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGNhbGxzIHRoYXQgbWFuYWdlIHRoZSBwYWdlIHRyYW5zZmVycyB0byBhbmQgZnJvbSB1c2VyIHNwYWNlLiBJJ2xsIG5lZWQgdG8gbG9jYXRlIHRoZSBpbnN0YW5jZXMgb2YgZWl0aGVyIGBjb3B5X3RvX3VzZXJgIG9yIHRoZSBgc2dfcmVhZF9veGZlcmAgZnVuY3Rpb25zIHdpdGhpbiB0aGUgYGRyaXZlcnMvc2NzaS9zZy5jYCBkaXJlY3RvcnkuIFRoaXMgd2lsbCBzaGVkIGxpZ2h0IG9uIHRoZSBtZWNoYW5pY3Mgb2YgaG93IHRoaXMgaGFwcGVucy4gSSdtIGtlZW4gdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgcG9pbnRzIHdoZXJlIHRoaXMgaGFwcGVucywgYW5kIGhvdyBpdCBpcyBwcm90ZWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1OTksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0OTowMC4zODM0ODE1NDFaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5NDk1NjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNnX3JlYWRfb3hmZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zY3NpL3NnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zY3NpL3NnLmM9MTkwPXN0YXRpYyBpbnQgc2dfY29tbW9uX3dyaXRlKFNnX2ZkICogc2ZwLCBTZ19yZXF1ZXN0ICogc3JwLFxcbmRyaXZlcnMvc2NzaS9zZy5jLTE5MS1cXHRcXHRcXHQgICB1bnNpZ25lZCBjaGFyICpjbW5kLCBpbnQgdGltZW91dCwgaW50IGJsb2NraW5nKTtcXG5kcml2ZXJzL3Njc2kvc2cuYzoxOTI6c3RhdGljIGludCBzZ19yZWFkX294ZmVyKFNnX3JlcXVlc3QgKiBzcnAsIGNoYXIgX191c2VyICpvdXRwLCBpbnQgbnVtX3JlYWRfeGZlcik7XFxuZHJpdmVycy9zY3NpL3NnLmMtMTkzLXN0YXRpYyB2b2lkIHNnX3JlbW92ZV9zY2F0KFNnX2ZkICogc2ZwLCBTZ19zY2F0dGVyX2hvbGQgKiBzY2hwKTtcXG4tLVxcbmRyaXZlcnMvc2NzaS9zZy5jPTQzOD1zZ19yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqIHBwb3MpXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2cuYy01MzgtXFx0XFx0aWYgKGNvdW50IFxcdTAwM2UgU1pfU0dfSEVBREVSKSB7XFxuZHJpdmVycy9zY3NpL3NnLmM6NTM5OlxcdFxcdFxcdGlmIChzZ19yZWFkX294ZmVyKHNycCwgYnVmLCBjb3VudCAtIFNaX1NHX0hFQURFUikpIHtcXG5kcml2ZXJzL3Njc2kvc2cuYy01NDAtXFx0XFx0XFx0XFx0cmV0dmFsID0gLUVGQVVMVDtcXG4tLVxcbmRyaXZlcnMvc2NzaS9zZy5jPTE5NTU9c3RhdGljIGludFxcbmRyaXZlcnMvc2NzaS9zZy5jOjE5NTY6c2dfcmVhZF9veGZlcihTZ19yZXF1ZXN0ICogc3JwLCBjaGFyIF9fdXNlciAqb3V0cCwgaW50IG51bV9yZWFkX3hmZXIpXFxuZHJpdmVycy9zY3NpL3NnLmMtMTk1Ny17XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2cuYy0xOTYxLVxcdFNDU0lfTE9HX1RJTUVPVVQoNCwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc3JwLVxcdTAwM2VwYXJlbnRmcC1cXHUwMDNlcGFyZW50ZHAsXFxuZHJpdmVycy9zY3NpL3NnLmM6MTk2MjpcXHRcXHRcXHQgXFxcInNnX3JlYWRfb3hmZXI6IG51bV9yZWFkX3hmZXI9JWRcXFxcblxcXCIsXFxuZHJpdmVycy9zY3NpL3NnLmMtMTk2My1cXHRcXHRcXHQgbnVtX3JlYWRfeGZlcikpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0OTowMC40NTI5ODE4MjdaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjA1MzcxMTk1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgc2dfcmVhZF9veGZlcmAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgU0NTSSBnZW5lcmljIGRyaXZlcnMgaGFuZGxlIHRoZSBgc2dfcmVhZF9veGZlcmAgZnVuY3Rpb24uIEkga25vdyB0aGlzIGlzIGEgY29yZSBwaWVjZSBvZiB0aGUgU0NTSSBnZW5lcmljIGludGVyZmFjZSwgbGlrZWx5IHJlbGF0ZWQgdG8gcmVhZCBvcGVyYXRpb25zIGFuZCBkYXRhIHRyYW5zZmVyLCBzbyBpdCdzIHdvcnRoIGEgZGVlcCBkaXZlLiBJJ20gaGVhZGluZyB0byBgZHJpdmVycy9zY3NpL3NnLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTk1NS4gVGhhdCdzIHVzdWFsbHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24uIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuIEkgZXhwZWN0IHRvIGJlIGxvb2tpbmcgZm9yIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgaG93IHRoZSBkYXRhIHRyYW5zZmVyIGlzIGluaXRpYXRlZCwgYW5kIGFueSBlcnJvciBoYW5kbGluZyBvciBmbG93IGNvbnRyb2wgbWVjaGFuaXNtcyB0aGF0IGFyZSBpbiBwbGF5LiBJJ20gYW50aWNpcGF0aW5nIHRoYXQgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHRoZSB3b3JraG9yc2UgZm9yIGhhbmRsaW5nIHRoZSBhY3R1YWwgcmVhZCBvcGVyYXRpb24gYWZ0ZXIgdGhlIFNDU0kgY29tbWFuZCBoYXMgYmVlbiBzZXR1cC4gSSdsbCBiZSBsb29raW5nIGZvciBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgaGFyZHdhcmUsIHByb2JhYmx5IHVzaW5nIERNQSBvciBvdGhlciBkYXRhIHRyYW5zZmVyIG1lY2hhbmlzbXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzMjYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0OTowMi41MDY2OTc3MjlaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyOTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvc2NzaS9zZy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5NTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE5NTU6XFx0c3RhdGljIGludFxcbjE5NTY6XFx0c2dfcmVhZF9veGZlcihTZ19yZXF1ZXN0ICogc3JwLCBjaGFyIF9fdXNlciAqb3V0cCwgaW50IG51bV9yZWFkX3hmZXIpXFxuMTk1NzpcXHR7XFxuMTk1ODpcXHRcXHRTZ19zY2F0dGVyX2hvbGQgKnNjaHAgPSBcXHUwMDI2c3JwLVxcdTAwM2VkYXRhO1xcbjE5NTk6XFx0XFx0aW50IGssIG51bTtcXG4xOTYwOlxcdFxcbjE5NjE6XFx0XFx0U0NTSV9MT0dfVElNRU9VVCg0LCBzZ19wcmludGsoS0VSTl9JTkZPLCBzcnAtXFx1MDAzZXBhcmVudGZwLVxcdTAwM2VwYXJlbnRkcCxcXG4xOTYyOlxcdFxcdFxcdFxcdCBcXFwic2dfcmVhZF9veGZlcjogbnVtX3JlYWRfeGZlcj0lZFxcXFxuXFxcIixcXG4xOTYzOlxcdFxcdFxcdFxcdCBudW1fcmVhZF94ZmVyKSk7XFxuMTk2NDpcXHRcXHRpZiAoKCFvdXRwKSB8fCAobnVtX3JlYWRfeGZlciBcXHUwMDNjPSAwKSlcXG4xOTY1OlxcdFxcdFxcdHJldHVybiAwO1xcbjE5NjY6XFx0XFxuMTk2NzpcXHRcXHRudW0gPSAxIFxcdTAwM2NcXHUwMDNjIChQQUdFX1NISUZUICsgc2NocC1cXHUwMDNlcGFnZV9vcmRlcik7XFxuMTk2ODpcXHRcXHRmb3IgKGsgPSAwOyBrIFxcdTAwM2Mgc2NocC1cXHUwMDNla191c2Vfc2cgXFx1MDAyNlxcdTAwMjYgc2NocC1cXHUwMDNlcGFnZXNba107IGsrKykge1xcbjE5Njk6XFx0XFx0XFx0aWYgKG51bSBcXHUwMDNlIG51bV9yZWFkX3hmZXIpIHtcXG4xOTcwOlxcdFxcdFxcdFxcdGlmIChjb3B5X3RvX3VzZXIob3V0cCwgcGFnZV9hZGRyZXNzKHNjaHAtXFx1MDAzZXBhZ2VzW2tdKSxcXG4xOTcxOlxcdFxcdFxcdFxcdFxcdFxcdCAgIG51bV9yZWFkX3hmZXIpKVxcbjE5NzI6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMTk3MzpcXHRcXHRcXHRcXHRicmVhaztcXG4xOTc0OlxcdFxcdFxcdH0gZWxzZSB7XFxuMTk3NTpcXHRcXHRcXHRcXHRpZiAoY29weV90b191c2VyKG91dHAsIHBhZ2VfYWRkcmVzcyhzY2hwLVxcdTAwM2VwYWdlc1trXSksXFxuMTk3NjpcXHRcXHRcXHRcXHRcXHRcXHQgICBudW0pKVxcbjE5Nzc6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMTk3ODpcXHRcXHRcXHRcXHRudW1fcmVhZF94ZmVyIC09IG51bTtcXG4xOTc5OlxcdFxcdFxcdFxcdGlmIChudW1fcmVhZF94ZmVyIFxcdTAwM2M9IDApXFxuMTk4MDpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4xOTgxOlxcdFxcdFxcdFxcdG91dHAgKz0gbnVtO1xcbjE5ODI6XFx0XFx0XFx0fVxcbjE5ODM6XFx0XFx0fVxcbjE5ODQ6XFx0XFxuMTk4NTpcXHRcXHRyZXR1cm4gMDtcXG4xOTg2OlxcdH1cXG4xOTg3OlxcdFxcbjE5ODg6XFx0c3RhdGljIHZvaWRcXG4xOTg5OlxcdHNnX2J1aWxkX3Jlc2VydmUoU2dfZmQgKiBzZnAsIGludCByZXFfc2l6ZSlcXG4xOTkwOlxcdHtcXG4xOTkxOlxcdFxcdFNnX3NjYXR0ZXJfaG9sZCAqc2NocCA9IFxcdTAwMjZzZnAtXFx1MDAzZXJlc2VydmU7XFxuMTk5MjpcXHRcXG4xOTkzOlxcdFxcdFNDU0lfTE9HX1RJTUVPVVQoNCwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc2ZwLVxcdTAwM2VwYXJlbnRkcCxcXG4xOTk0OlxcdFxcdFxcdFxcdCBcXFwic2dfYnVpbGRfcmVzZXJ2ZTogcmVxX3NpemU9JWRcXFxcblxcXCIsIHJlcV9zaXplKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjQ5OjAyLjUwNjkzMzc3OVoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMzQ3MjUwODgzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNHIE1vZHVsZSdzIFNjYXR0ZXItR2F0aGVyIEVsZW1lbnQgU2l6ZSBIYW5kbGluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGZpcnN0IHRoaW5nIEknbSBkb2luZyBpcyB0cnlpbmcgdG8gcmV0cmFjZSB0aGUgY29tbWl0IGhpc3RvcnkgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGNoYW5nZSB3YXMgbWFkZSBpbiB0aGUga2VybmVsLiBNeSBpbml0aWFsIGFwcHJvYWNoIGlzIHN0YW5kYXJkOiBJIHdhbnQgdG8gZmluZCB0aGUgY29tbWl0IG1lc3NhZ2UsIHRoZSBhdXRob3IsIGFuZCBhbnkgcmVsZXZhbnQgY29udGV4dC4gSSdsbCBwcm9iYWJseSBzdGFydCB3aXRoIGBnaXQgbG9nYCwgdGhlbiBjb25zaWRlciBgZ3JlcHBlcmAsIGFuZCBpZiB0aGF0IGRvZXNuJ3QgeWllbGQgcmVzdWx0cywgSSdsbCBzd2l0Y2ggdG8gZGlyZWN0bHkgZ3JlcHBpbmcgdGhlIGNvbW1pdCBtZXNzYWdlcy5cblxuTm93LCBsZXQncyBnZXQgaW50byB0aGUgY29kZSBpdHNlbGYsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgYHNjYXR0ZXJfZWxlbV9zemAgaXMgdXNlZCB3aXRoaW4gdGhlIGBkcml2ZXJzL3Njc2kvc2cuY2AgbW9kdWxlLiBJIHNlZSBpdCB1c2VkIGluIGBpbml0X3NnYCBhbmQgYHNnX2J1aWxkX2luZGlyZWN0YC4gTXkgdGhvdWdodCBwcm9jZXNzIGlzIHRvIGV4YW1pbmUgdGhlc2UgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlIGNoYW5nZS4gXG5cbkluIGBpbml0X3NnYCwgdGhlIGNvZGUgY2hlY2tzIGlmIGBzY2F0dGVyX2VsZW1fc3pgIGlzIGxlc3MgdGhhbiBgUEFHRV9TSVpFYCwgYW5kIGlmIHNvLCBpdCBzZXRzIGl0IHRvIGBQQUdFX1NJWkVgLiBUaGUgbmV4dCBwaWVjZSBvZiBjb2RlIGlzIGluIGBzZ19idWlsZF9pbmRpcmVjdGAsIHdoZXJlIGl0IGFwcGVhcnMgdGhhdCB0aGUgY29yZSBpc3N1ZSBpcyB0aGUgdHlwZSBvZiBgc2NhdHRlcl9lbGVtX3N6YC5cblxuVGhlIGNvcmUgbG9naWMgcmV2b2x2ZXMgYXJvdW5kIHRoZSBjaGVjayBgbnVtIFx1MDAzYyBQQUdFX1NJWkVgLiBJIHNlZSBub3cgdGhhdCBgc2NhdHRlcl9lbGVtX3N6YCBpcyBhbiBpbnRlZ2VyLCB3aGlsZSBgUEFHRV9TSVpFYCBpcyBhbiB1bnNpZ25lZCBsb25nLiBUaGlzIGlzIHRoZSBjcnV4IG9mIHRoZSBwcm9ibGVtISBDJ3MgaW50ZWdlciBjb252ZXJzaW9uIHJ1bGVzIG1lYW4gdGhhdCBhIG5lZ2F0aXZlIHZhbHVlIHdyaXR0ZW4gdG8gYHNjYXR0ZXJfZWxlbV9zemAgd2lsbCBjYXVzZSBjb21wYXJpc29uIGZhaWx1cmVzLiBBIG5lZ2F0aXZlIHZhbHVlIGlzIGNvbnZlcnRlZCB0byBhIHZlcnkgbGFyZ2UgdW5zaWduZWQgbnVtYmVyIGR1cmluZyBjb21wYXJpc29uLCBhbmQgdGh1cyB0aGUgY29kZSB3aWxsIGJlaGF2ZSBpbiB1bmV4cGVjdGVkIHdheXMuXG5cblNwZWNpZmljYWxseSwgdGhlIGBudW0gXHUwMDNjIFBBR0VfU0laRWAgY2hlY2sgY2FuIGZhaWwgaWYgbnVtIGlzIG5lZ2F0aXZlLCBvciBpZiBudW0gaXMgYSBzbWFsbCBudW1iZXIgYW5kIHRoZSBjb2RlIHRoZW4gZ29lcyBvbiB0byB1c2UgdGhlIGBudW1gIHZhcmlhYmxlIGluIGBnZXRfb3JkZXIoKWAgd2hpY2ggaXMgaW52YWxpZCBmb3IgbmVnYXRpdmUgbnVtYmVycy5cblxuVGhpcyBsZWFkcyB0byB1bmRlZmluZWQgYmVoYXZpb3IuIFNwZWNpZmljYWxseSwgdGhlIGNhbGwgdG8gYGdldF9vcmRlcmAgd2l0aCBhbiBpbnZhbGlkIGlucHV0IG9yIHRoZSBzaGlmdCB0aGF0IGZvbGxvd3MgdGhlIGByZXRfc3ogPSAxIFx1MDAzY1x1MDAzYyAoUEFHRV9TSElGVCArIG9yZGVyKWAgc3RhdGVtZW50LiBFdmVuIGEgc21hbGwgcG9zaXRpdmUgbnVtYmVyIGNhbiBjYXVzZSBhIHByb2JsZW0gYmVjYXVzZSBgbnVtYCBpcyBub3QgdXBkYXRlZCBhZnRlciB0aGUgY2hlY2suXG5cblNvLCB0aGUgY3J1Y2lhbCBwYXJ0IGlzIHVuZGVyc3RhbmRpbmcgKndoeSogdGhpcyBpbnRlZ2VyIHNpZ25lZG5lc3MgYnVnIHdhcyBpbnRyb2R1Y2VkLCBhbmQgaG93IHRoZSBjaGFuZ2VzIGZpeCBpdC4gVGhlIHBhdGNoIGFkZHJlc3NlcyB0aGlzIGlzc3VlIGJ5IHBlcmZvcm1pbmcgYSBwcm9wZXIgc2lnbmVkIGNvbXBhcmlzb246IGBudW0gXHUwMDNjIChpbnQpUEFHRV9TSVpFYC4gVGhpcyBwcmV2ZW50cyBpbnZhbGlkIGFsbG9jYXRpb24gb3JkZXIgY2FsY3VsYXRpb24gYnkgY29ycmVjdGluZyB0aGUgaW50ZWdlciBzaWduZWRuZXNzIGJ1Zy5cblxuTm93LCB0aGUgbmV4dCBzdGVwIGlzIHRvIGV2YWx1YXRlIHdoZXRoZXIgdGhpcyBwYXRjaCBuZWNlc3NpdGF0ZXMgdGhlIHVzZSBvZiBLTVNBTi4gTXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY3JpdGVyaWEgZm9yIEtNU0FOIGlzIHByZXR0eSBzb2xpZC4gSXQncyBub3QgYSBnZW5lcmFsIGRlYnVnZ2luZyB0b29sOyBpdCdzIHNwZWNpYWxpemVkIGZvciBkZXRlY3RpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIFRoZSBjcnVjaWFsIHJ1bGUgaXMgXCJUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLCBMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlwiIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIGFueSBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgZmllbGRzIG1pZ2h0IG5vdCBiZSBpbml0aWFsaXplZCwgY29uZGl0aW9uYWwgbG9naWMgcmVseWluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgdGhlIGFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBhbHRlcmF0aW9ucyB0byBib3VuZHMgY2hlY2tzLlxuXG5Pa2F5LCBsZXQncyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3QgY2FyZWZ1bGx5LlxuKiAgIERvZXMgdGhlIHBhdGNoIHRvdWNoIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlPyBOby5cbiogICBEb2VzIHRoZSBwYXRjaCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gVGhlIGFsbG9jYXRlZCBwYWdlcyBhcmUgemVyb2VkLlxuKiAgIERvZXMgdGhlIHBhdGNoIGFsdGVyIGJvdW5kcyBjaGVja3Mgb3IgZGF0YSBsZW5ndGhzIGluIGEgd2F5IHRoYXQgYWxsb3dzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIGJlIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gY29uZGl0aW9uYWxzPyBOby4gVGhlIG1haW4gYnVnIGJlaW5nIGZpeGVkIGlzIGFuIGludGVnZXIgc2lnbmVkbmVzcyBpc3N1ZS5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGUgY29kZSBmaXhlcyBhbiBpbnRlZ2VyIHNpZ25lZG5lc3MgYnVnLCBhbmQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmVzLCBwYWRkaW5ncywgb3IgaW5mby1sZWFrcyBpbnZvbHZlZCwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuIFRoaXMgcGF0Y2ggZm9jdXNlcyBvbiBwcmV2ZW50aW5nIGludmFsaWQgbWVtb3J5IGFsbG9jYXRpb24gb3JkZXIgYW5kIGRvZXMgbm90IGNyZWF0ZSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBvciByZWxhdGVkIGlzc3Vlcy4gSGVuY2UsIGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgZmFsc2UsIGFuZCBJIG5lZWQgdG8gd3JpdGUgdGhpcyBleHBsYW5hdGlvbiBpbiB0aGUgdG9vbCBjYWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI2OCwiT3V0cHV0VG9rZW5zIjoyNzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzk2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDk6MTUuOTc5NDQ1OTA2WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIHNpZ25lZG5lc3MgaXNzdWUgaW4gZHJpdmVycy9zY3NpL3NnLmMgKHNnX2J1aWxkX2luZGlyZWN0KS4gU3BlY2lmaWNhbGx5LCBjb21wYXJpbmcgdGhlIHNpZ25lZCBpbnQgJ251bScgdG8gdW5zaWduZWQgbG9uZyAnUEFHRV9TSVpFJyByZXN1bHRlZCBpbiBzaWduZWQtdG8tdW5zaWduZWQgdHlwZSBwcm9tb3Rpb24sIGFsbG93aW5nIG5lZ2F0aXZlIHZhbHVlcyBvZiB0aGUgJ3NjYXR0ZXJfZWxlbV9zeicgbW9kdWxlIHBhcmFtZXRlciB0byBieXBhc3MgdGhlIG1pbmltdW0gYm91bmQgY2hlY2sgYW5kIGxlYWQgdG8gaW52YWxpZCBwYWdlIGFsbG9jYXRpb24gb3JkZXJzIGFuZCB1bmRlZmluZWQgc2hpZnQgYmVoYXZpb3IuIFRoZSBwYXRjaCBjYXN0cyBQQUdFX1NJWkUgdG8gaW50IGFuZCBzZXRzIG51bSA9IFBBR0VfU0laRSB3aGVuIG51bSBcXHUwMDNjIChpbnQpUEFHRV9TSVpFLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnk6XFxuMS4gJ251bScgYW5kICdzY2F0dGVyX2VsZW1fc3onIGFyZSBmdWxseSBpbml0aWFsaXplZCB2YWx1ZXMuXFxuMi4gVGhlIHNjYXR0ZXItZ2F0aGVyIGJ1ZmZlciBhbGxvY2F0aW9ucyBpbiBzZ19idWlsZF9pbmRpcmVjdCB1c2Uga3phbGxvYyBmb3IgdGhlIHBvaW50ZXIgYXJyYXkgYW5kIF9fR0ZQX1pFUk8gZm9yIHRoZSB1bmRlcmx5aW5nIHBhZ2UgYWxsb2NhdGlvbnMuXFxuMy4gTm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBzdGFjayB2YXJpYWJsZXMsIHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBjb3BpZWQgdG8gdXNlcnNwYWNlIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuXFxuQW55IHBvdGVudGlhbCBpc3N1ZXMgZnJvbSB0aGUgYnVnIChzdWNoIGFzIGludmFsaWQgYWxsb2NhdGlvbiBvcmRlcnMgb3Igc2hpZnRzKSBmYWxsIHVuZGVyIHN0YW5kYXJkIFVCU0FOL0tBU0FOIGRldGVjdGlvbiByYXRoZXIgdGhhbiBLTVNBTiB1bmluaXRpYWxpemVkIG1lbW9yeSB0cmFja2luZy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIHNpZ25lZG5lc3MgaXNzdWUgaW4gZHJpdmVycy9zY3NpL3NnLmMgKHNnX2J1aWxkX2luZGlyZWN0KS4gU3BlY2lmaWNhbGx5LCBjb21wYXJpbmcgdGhlIHNpZ25lZCBpbnQgJ251bScgdG8gdW5zaWduZWQgbG9uZyAnUEFHRV9TSVpFJyByZXN1bHRlZCBpbiBzaWduZWQtdG8tdW5zaWduZWQgdHlwZSBwcm9tb3Rpb24sIGFsbG93aW5nIG5lZ2F0aXZlIHZhbHVlcyBvZiB0aGUgJ3NjYXR0ZXJfZWxlbV9zeicgbW9kdWxlIHBhcmFtZXRlciB0byBieXBhc3MgdGhlIG1pbmltdW0gYm91bmQgY2hlY2sgYW5kIGxlYWQgdG8gaW52YWxpZCBwYWdlIGFsbG9jYXRpb24gb3JkZXJzIGFuZCB1bmRlZmluZWQgc2hpZnQgYmVoYXZpb3IuIFRoZSBwYXRjaCBjYXN0cyBQQUdFX1NJWkUgdG8gaW50IGFuZCBzZXRzIG51bSA9IFBBR0VfU0laRSB3aGVuIG51bSBcXHUwMDNjIChpbnQpUEFHRV9TSVpFLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnk6XFxuMS4gJ251bScgYW5kICdzY2F0dGVyX2VsZW1fc3onIGFyZSBmdWxseSBpbml0aWFsaXplZCB2YWx1ZXMuXFxuMi4gVGhlIHNjYXR0ZXItZ2F0aGVyIGJ1ZmZlciBhbGxvY2F0aW9ucyBpbiBzZ19idWlsZF9pbmRpcmVjdCB1c2Uga3phbGxvYyBmb3IgdGhlIHBvaW50ZXIgYXJyYXkgYW5kIF9fR0ZQX1pFUk8gZm9yIHRoZSB1bmRlcmx5aW5nIHBhZ2UgYWxsb2NhdGlvbnMuXFxuMy4gTm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBzdGFjayB2YXJpYWJsZXMsIHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBjb3BpZWQgdG8gdXNlcnNwYWNlIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuXFxuQW55IHBvdGVudGlhbCBpc3N1ZXMgZnJvbSB0aGUgYnVnIChzdWNoIGFzIGludmFsaWQgYWxsb2NhdGlvbiBvcmRlcnMgb3Igc2hpZnRzKSBmYWxsIHVuZGVyIHN0YW5kYXJkIFVCU0FOL0tBU0FOIGRldGVjdGlvbiByYXRoZXIgdGhhbiBLTVNBTiB1bmluaXRpYWxpemVkIG1lbW9yeSB0cmFja2luZy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7hgpq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-14 08:41:57 +0000 UTC FinishedAt: 2026-09-14 08:49:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CHR_DEV_SG", "SCSI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "df2908090cda368b01ff43709f51890076c56157", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CHR_DEV_SG", "SCSI" ], "series_id": "2569b3d3-fe9c-474e-a8ef-e51fb581c3a9" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "sg_build_indirect", "sg_build_reserve", "sg_start_req" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "df2908090cda368b01ff43709f51890076c56157", "base_tree": "axboe" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NIUl9ERVZfU0cmIzM0OywKICAgICYjMzQ7U0NTSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NnX2J1aWxkX2luZGlyZWN0JiMzNDssCiAgICAmIzM0O3NnX2J1aWxkX3Jlc2VydmUmIzM0OywKICAgICYjMzQ7c2dfc3RhcnRfcmVxJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBzaWduZWRuZXNzIGlzc3VlIGluIGRyaXZlcnMvc2NzaS9zZy5jIChzZ19idWlsZF9pbmRpcmVjdCkuIFNwZWNpZmljYWxseSwgY29tcGFyaW5nIHRoZSBzaWduZWQgaW50ICYjMzk7bnVtJiMzOTsgdG8gdW5zaWduZWQgbG9uZyAmIzM5O1BBR0VfU0laRSYjMzk7IHJlc3VsdGVkIGluIHNpZ25lZC10by11bnNpZ25lZCB0eXBlIHByb21vdGlvbiwgYWxsb3dpbmcgbmVnYXRpdmUgdmFsdWVzIG9mIHRoZSAmIzM5O3NjYXR0ZXJfZWxlbV9zeiYjMzk7IG1vZHVsZSBwYXJhbWV0ZXIgdG8gYnlwYXNzIHRoZSBtaW5pbXVtIGJvdW5kIGNoZWNrIGFuZCBsZWFkIHRvIGludmFsaWQgcGFnZSBhbGxvY2F0aW9uIG9yZGVycyBhbmQgdW5kZWZpbmVkIHNoaWZ0IGJlaGF2aW9yLiBUaGUgcGF0Y2ggY2FzdHMgUEFHRV9TSVpFIHRvIGludCBhbmQgc2V0cyBudW0gPSBQQUdFX1NJWkUgd2hlbiBudW0gXHUwMDNjIChpbnQpUEFHRV9TSVpFLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OlxuMS4gJiMzOTtudW0mIzM5OyBhbmQgJiMzOTtzY2F0dGVyX2VsZW1fc3omIzM5OyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgdmFsdWVzLlxuMi4gVGhlIHNjYXR0ZXItZ2F0aGVyIGJ1ZmZlciBhbGxvY2F0aW9ucyBpbiBzZ19idWlsZF9pbmRpcmVjdCB1c2Uga3phbGxvYyBmb3IgdGhlIHBvaW50ZXIgYXJyYXkgYW5kIF9fR0ZQX1pFUk8gZm9yIHRoZSB1bmRlcmx5aW5nIHBhZ2UgYWxsb2NhdGlvbnMuXG4zLiBObyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIHN0YWNrIHZhcmlhYmxlcywgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCBidWZmZXJzIGNvcGllZCB0byB1c2Vyc3BhY2UgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC5cbkFueSBwb3RlbnRpYWwgaXNzdWVzIGZyb20gdGhlIGJ1ZyAoc3VjaCBhcyBpbnZhbGlkIGFsbG9jYXRpb24gb3JkZXJzIG9yIHNoaWZ0cykgZmFsbCB1bmRlciBzdGFuZGFyZCBVQlNBTi9LQVNBTiBkZXRlY3Rpb24gcmF0aGVyIHRoYW4gS01TQU4gdW5pbml0aWFsaXplZCBtZW1vcnkgdHJhY2tpbmcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHNnX2J1aWxkX2luZGlyZWN0KCkgaW4gdGhlIFNDU0kgZ2VuZXJpYyAoc2cpIGRyaXZlciB0byBwcm9wZXJseSBjbGFtcCBzY2F0dGVyX2VsZW1fc3ogd2hlbiBpdCBpcyBzbWFsbGVyIHRoYW4gUEFHRV9TSVpFIG9yIG5lZ2F0aXZlIChwcmV2ZW50aW5nIHNpZ25lZCBpbnRlZ2VyIGNvbXBhcmlzb24gaXNzdWVzIGFuZCBpbnZhbGlkIHBhZ2Ugb3JkZXJzIGZvciBnZXRfb3JkZXIpLiBUaGUgc2cgZHJpdmVyIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2l0aCBlbXVsYXRlZCBTQ1NJIGRldmljZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0MTM1Mjk0ODlmNmNjZTQyNTBmMzc1OTg3MzZjNjlmZWJlZjMwYjg4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMDg6NDQ6MjMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NnLmMgYi9kcml2ZXJzL3Njc2kvc2cuY1xuaW5kZXggNTQwOGYwMDJlNmMwMS4uMzljOGU1MmZhNmZmNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvc2NzaS9zZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Njc2kvc2cuY1xuQEAgLTE4NzUsOSAmIzQzOzE4NzUsMTAgQEAgc2dfYnVpbGRfaW5kaXJlY3QoU2dfc2NhdHRlcl9ob2xkICogc2NocCwgU2dfZmQgKiBzZnAsIGludCBidWZmX3NpemUpXG4gXG4gXHRudW0gPSBzY2F0dGVyX2VsZW1fc3o7XG4gXHRpZiAodW5saWtlbHkobnVtICE9IHNjYXR0ZXJfZWxlbV9zel9wcmV2KSkge1xuLVx0XHRpZiAobnVtIFx1MDAzYyBQQUdFX1NJWkUpIHtcbiYjNDM7XHRcdGlmIChudW0gXHUwMDNjIChpbnQpUEFHRV9TSVpFKSB7XG4gXHRcdFx0c2NhdHRlcl9lbGVtX3N6ID0gUEFHRV9TSVpFO1xuIFx0XHRcdHNjYXR0ZXJfZWxlbV9zel9wcmV2ID0gUEFHRV9TSVpFO1xuJiM0MztcdFx0XHRudW0gPSBQQUdFX1NJWkU7XG4gXHRcdH0gZWxzZVxuIFx0XHRcdHNjYXR0ZXJfZWxlbV9zel9wcmV2ID0gbnVtO1xuIFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NIUl9ERVZfU0cmIzM0OywKICAgICYjMzQ7U0NTSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NnX2J1aWxkX2luZGlyZWN0JiMzNDssCiAgICAmIzM0O3NnX2J1aWxkX3Jlc2VydmUmIzM0OywKICAgICYjMzQ7c2dfc3RhcnRfcmVxJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHNnX2J1aWxkX2luZGlyZWN0KCkgaW4gdGhlIFNDU0kgZ2VuZXJpYyAoc2cpIGRyaXZlciB0byBwcm9wZXJseSBjbGFtcCBzY2F0dGVyX2VsZW1fc3ogd2hlbiBpdCBpcyBzbWFsbGVyIHRoYW4gUEFHRV9TSVpFIG9yIG5lZ2F0aXZlIChwcmV2ZW50aW5nIHNpZ25lZCBpbnRlZ2VyIGNvbXBhcmlzb24gaXNzdWVzIGFuZCBpbnZhbGlkIHBhZ2Ugb3JkZXJzIGZvciBnZXRfb3JkZXIpLiBUaGUgc2cgZHJpdmVyIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2l0aCBlbXVsYXRlZCBTQ1NJIGRldmljZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0MTM1Mjk0ODlmNmNjZTQyNTBmMzc1OTg3MzZjNjlmZWJlZjMwYjg4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgMTQgMDg6NDQ6MjMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2cuYyBiL2RyaXZlcnMvc2NzaS9zZy5jCmluZGV4IDU0MDhmMDAyZTZjMDEuLjM5YzhlNTJmYTZmZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvc2NzaS9zZy5jCkBAIC0xODc1LDkgJiM0MzsxODc1LDEwIEBAIHNnX2J1aWxkX2luZGlyZWN0KFNnX3NjYXR0ZXJfaG9sZCAqIHNjaHAsIFNnX2ZkICogc2ZwLCBpbnQgYnVmZl9zaXplKQogCiAJbnVtID0gc2NhdHRlcl9lbGVtX3N6OwogCWlmICh1bmxpa2VseShudW0gIT0gc2NhdHRlcl9lbGVtX3N6X3ByZXYpKSB7Ci0JCWlmIChudW0gJmx0OyBQQUdFX1NJWkUpIHsKJiM0MzsJCWlmIChudW0gJmx0OyAoaW50KVBBR0VfU0laRSkgewogCQkJc2NhdHRlcl9lbGVtX3N6ID0gUEFHRV9TSVpFOwogCQkJc2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBQQUdFX1NJWkU7CiYjNDM7CQkJbnVtID0gUEFHRV9TSVpFOwogCQl9IGVsc2UKIAkJCXNjYXR0ZXJfZWxlbV9zel9wcmV2ID0gbnVtOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkxMAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBTQ1NJIERyaXZlciBNb2RpZmljYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvbW1pdC4gVGhlIGRpZmYgaW1tZWRpYXRlbHkgZmxhZ3MgYGRyaXZlcnMvc2NzaS9zZy5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBhIHNlY3Rpb24gY29uY2VybmluZyBzY2F0dGVyLWdhdGhlciBsaXN0IGJ1aWxkaW5nLiBJIHNlZSBhIGNoYW5nZSB3aXRoaW4gdGhlIGBzZ19idWlsZF9pbmRpcmVjdGAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgc2NhdHRlcl9lbGVtX3N6YCBhbmQgYSByZWxhdGVkIHZhcmlhYmxlLCBgc2NhdHRlcl9lbGVtX3N6X3ByZXZgLiBUaGUgY29yZSBsb2dpYyBoZXJlIGFwcGVhcnMgdG8gYmUgYWRqdXN0aW5nIGBzY2F0dGVyX2VsZW1fc3pgIGlmIGl0cyBpbml0aWFsIHZhbHVlIGBudW1gIGlzIHNtYWxsZXIgdGhhbiBgUEFHRV9TSVpFYC4gVGhlIGFkZGl0aW9uIG9mIHRoZSBjb25kaXRpb25hbCBgKGludClQQUdFX1NJWkVgIGNhc3RzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eSBmaXgsIG9yIGF0IGxlYXN0IGEgc2FmZWd1YXJkIHRvIGVuc3VyZSB0aGUgY29tcGFyaXNvbiB3b3JrcyBhcyBpbnRlbmRlZCBhY3Jvc3MgZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMuIFRoZSBgbnVtID0gUEFHRV9TSVpFO2AgYXNzaWdubWVudCB3aXRoaW4gdGhlIGBpZmAgYmxvY2sgY29uZmlybXMgdGhhdCBpdCB3aWxsIGJlIHVwZGF0ZWQuIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIFNDU0kgbGF5ZXIsIEkmIzM5O20gYWxyZWFkeSBmb3JtdWxhdGluZyBzb21lIGh5cG90aGVzZXMgYWJvdXQgdGhlIG9yaWdpbmFsIGlzc3VlIGFuZCB0aGUgaW50ZW50IG9mIHRoaXMgZml4LiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgcG9zc2libHkgcmVsYXRlZCBjb21taXRzIHRvIGZ1bGx5IGdyYXNwIHRoZSBjb250ZXh0IGFuZCBwb3RlbnRpYWwgcmFtaWZpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvc2NzaS9zZy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODYwOlx0XG4xODYxOlx0XHRpZiAoYmxrX3NpemUgXHUwMDNjIDApXG4xODYyOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuMTg2MzpcdFx0aWYgKDAgPT0gYmxrX3NpemUpXG4xODY0Olx0XHRcdCYjNDM7JiM0MztibGtfc2l6ZTtcdC8qIGRvbiYjMzk7dCBrbm93IHdoeSAqL1xuMTg2NTpcdFx0Lyogcm91bmQgcmVxdWVzdCB1cCB0byBuZXh0IGhpZ2hlc3QgU0dfU0VDVE9SX1NaIGJ5dGUgYm91bmRhcnkgKi9cbjE4NjY6XHRcdGJsa19zaXplID0gQUxJR04oYmxrX3NpemUsIFNHX1NFQ1RPUl9TWik7XG4xODY3Olx0XHRTQ1NJX0xPR19USU1FT1VUKDQsIHNnX3ByaW50ayhLRVJOX0lORk8sIHNmcC1cdTAwM2VwYXJlbnRkcCxcbjE4Njg6XHRcdFx0XCYjMzQ7c2dfYnVpbGRfaW5kaXJlY3Q6IGJ1ZmZfc2l6ZT0lZCwgYmxrX3NpemU9JWRcXG5cJiMzNDssXG4xODY5Olx0XHRcdGJ1ZmZfc2l6ZSwgYmxrX3NpemUpKTtcbjE4NzA6XHRcbjE4NzE6XHRcdC8qIE4uQi4gcmV0X3N6IGNhcnJpZWQgaW50byB0aGlzIGJsb2NrIC4uLiAqL1xuMTg3MjpcdFx0bXhfc2NfZWxlbXMgPSBzZ19idWlsZF9zZ2F0KHNjaHAsIHNmcCwgc2dfdGFibGVzaXplKTtcbjE4NzM6XHRcdGlmIChteF9zY19lbGVtcyBcdTAwM2MgMClcbjE4NzQ6XHRcdFx0cmV0dXJuIG14X3NjX2VsZW1zO1x0LyogbW9zdCBsaWtlbHkgLUVOT01FTSAqL1xuMTg3NTpcdFxuMTg3NjpcdFx0bnVtID0gc2NhdHRlcl9lbGVtX3N6O1xuMTg3NzpcdFx0aWYgKHVubGlrZWx5KG51bSAhPSBzY2F0dGVyX2VsZW1fc3pfcHJldikpIHtcbjE4Nzg6XHRcdFx0aWYgKG51bSBcdTAwM2MgKGludClQQUdFX1NJWkUpIHtcbjE4Nzk6XHRcdFx0XHRzY2F0dGVyX2VsZW1fc3ogPSBQQUdFX1NJWkU7XG4xODgwOlx0XHRcdFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBQQUdFX1NJWkU7XG4xODgxOlx0XHRcdFx0bnVtID0gUEFHRV9TSVpFO1xuMTg4MjpcdFx0XHR9IGVsc2VcbjE4ODM6XHRcdFx0XHRzY2F0dGVyX2VsZW1fc3pfcHJldiA9IG51bTtcbjE4ODQ6XHRcdH1cbjE4ODU6XHRcbjE4ODY6XHRcdG9yZGVyID0gZ2V0X29yZGVyKG51bSk7XG4xODg3Olx0cmV0cnk6XG4xODg4Olx0XHRyZXRfc3ogPSAxIFx1MDAzY1x1MDAzYyAoUEFHRV9TSElGVCAmIzQzOyBvcmRlcik7XG4xODg5Olx0XG4xODkwOlx0XHRmb3IgKGsgPSAwLCByZW1fc3ogPSBibGtfc2l6ZTsgcmVtX3N6IFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBrIFx1MDAzYyBteF9zY19lbGVtcztcbjE4OTE6XHRcdCAgICAgayYjNDM7JiM0MzssIHJlbV9zeiAtPSByZXRfc3opIHtcbjE4OTI6XHRcbjE4OTM6XHRcdFx0bnVtID0gKHJlbV9zeiBcdTAwM2Ugc2NhdHRlcl9lbGVtX3N6X3ByZXYpID9cbjE4OTQ6XHRcdFx0XHRzY2F0dGVyX2VsZW1fc3pfcHJldiA6IHJlbV9zejtcbjE4OTU6XHRcbjE4OTY6XHRcdFx0c2NocC1cdTAwM2VwYWdlc1trXSA9IGFsbG9jX3BhZ2VzKGdmcF9tYXNrLCBvcmRlcik7XG4xODk3Olx0XHRcdGlmICghc2NocC1cdTAwM2VwYWdlc1trXSlcbjE4OTg6XHRcdFx0XHRnb3RvIG91dDtcbjE4OTk6XHRcbjE5MDA6XHRcdFx0aWYgKG51bSA9PSBzY2F0dGVyX2VsZW1fc3pfcHJldikge1xuMTkwMTpcdFx0XHRcdGlmICh1bmxpa2VseShyZXRfc3ogXHUwMDNlIHNjYXR0ZXJfZWxlbV9zel9wcmV2KSkge1xuMTkwMjpcdFx0XHRcdFx0c2NhdHRlcl9lbGVtX3N6ID0gcmV0X3N6O1xuMTkwMzpcdFx0XHRcdFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgPSByZXRfc3o7XG4xOTA0Olx0XHRcdFx0fVxuMTkwNTpcdFx0XHR9XG4xOTA2Olx0XG4xOTA3Olx0XHRcdFNDU0lfTE9HX1RJTUVPVVQoNSwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc2ZwLVx1MDAzZXBhcmVudGRwLFxuMTkwODpcdFx0XHRcdFx0IFwmIzM0O3NnX2J1aWxkX2luZGlyZWN0OiBrPSVkLCBudW09JWQsIHJldF9zej0lZFxcblwmIzM0OyxcbjE5MDk6XHRcdFx0XHRcdCBrLCBudW0sIHJldF9zeikpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNDUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGluZWFnZSBvZiBgc2NhdHRlcl9lbGVtX3N6YCBhbmQgaG93IHRoZSBkcml2ZXIgYHNnLmNgIGFjdHVhbGx5IHV0aWxpemVzIGl0LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB0cmFjZSBiYWNrIHRoZSB2YXJpYWJsZSYjMzk7cyBkZWZpbml0aW9uIGFuZCB1c2FnZSwgc28gbGV0JiMzOTtzIGdldCB0aGF0IGRvbmUuCgoqKlRyYWNraW5nIHRoZSBgc2NhdHRlcl9lbGVtX3N6YCBWYXJpYWJsZSoqCgpSaWdodCwgbGV0IG1lIGtpY2sgb2ZmIGEgZ3JlcCBzZWFyY2gsIHNwZWNpZmljYWxseSBsb29raW5nIHdpdGhpbiBgZHJpdmVycy9zY3NpL3NnLmNgIGZvciBhbnkgaW5zdGFuY2VzIG9mIGBzY2F0dGVyX2VsZW1fc3pgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgaW4gdGhlIHN5c3RlbS4gSSYjMzk7bSBob3BpbmcgdGhpcyBzZWFyY2ggd2lsbCBsZWFkIG1lIHRvIHRoZSBrZXkgc2VjdGlvbnMgb2YgY29kZSB3aGVyZSB0aGUgdmFyaWFibGUgaXMgZWl0aGVyIGRlZmluZWQsIGFzc2lnbmVkIGEgdmFsdWUsIG9yIG1vc3QgaW1wb3J0YW50bHksICp1c2VkKi4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gZHJhdyBjb25uZWN0aW9ucyBhbmQgc2VlIGhvdyBkYXRhIGlzIHN0cnVjdHVyZWQgYW5kIHBhc3NlZCB0aHJvdWdoIHRoZSB2YXJpb3VzIGZ1bmN0aW9uIGNhbGxzLiBUaGlzIHdpbGwgcHJvdmlkZSBhIGNydWNpYWwgaW5zaWdodCBpbnRvIGRhdGEgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzY2F0dGVyX2VsZW1fc3omIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvc2cuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvc2cuYz05Mj1zdGF0aWMgaW50IHNnX2FsbG93X2RpbyA9IFNHX0FMTE9XX0RJT19ERUY7XG5kcml2ZXJzL3Njc2kvc2cuYy05My1cbmRyaXZlcnMvc2NzaS9zZy5jOjk0OnN0YXRpYyBpbnQgc2NhdHRlcl9lbGVtX3N6ID0gU0dfU0NBVFRFUl9TWjtcbmRyaXZlcnMvc2NzaS9zZy5jOjk1OnN0YXRpYyBpbnQgc2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBTR19TQ0FUVEVSX1NaO1xuZHJpdmVycy9zY3NpL3NnLmMtOTYtXG4tLVxuZHJpdmVycy9zY3NpL3NnLmM9MTU5MD1zZ19yZW1vdmVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmNsX2Rldilcbi0tXG5kcml2ZXJzL3Njc2kvc2cuYy0xNjIzLVxuZHJpdmVycy9zY3NpL3NnLmM6MTYyNDptb2R1bGVfcGFyYW1fbmFtZWQoc2NhdHRlcl9lbGVtX3N6LCBzY2F0dGVyX2VsZW1fc3osIGludCwgU19JUlVHTyB8IFNfSVdVU1IpO1xuZHJpdmVycy9zY3NpL3NnLmMtMTYyNS1tb2R1bGVfcGFyYW1fbmFtZWQoYWxsb3dfZGlvLCBzZ19hbGxvd19kaW8sIGludCwgU19JUlVHTyB8IFNfSVdVU1IpO1xuLS1cbmRyaXZlcnMvc2NzaS9zZy5jPTE2NTg9TU9EVUxFX0FMSUFTX0NIQVJERVZfTUFKT1IoU0NTSV9HRU5FUklDX01BSk9SKTtcbmRyaXZlcnMvc2NzaS9zZy5jLTE2NTktXG5kcml2ZXJzL3Njc2kvc2cuYzoxNjYwOk1PRFVMRV9QQVJNX0RFU0Moc2NhdHRlcl9lbGVtX3N6LCBcJiMzNDtzY2F0dGVyIGdhdGhlciBlbGVtZW50IFwmIzM0O1xuZHJpdmVycy9zY3NpL3NnLmMtMTY2MS0gICAgICAgICAgICAgICAgXCYjMzQ7c2l6ZSAoZGVmYXVsdDogbWF4KFNHX1NDQVRURVJfU1osIFBBR0VfU0laRSkpXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL3Njc2kvc2cuYz0xNjY2PWluaXRfc2codm9pZClcbi0tXG5kcml2ZXJzL3Njc2kvc2cuYy0xNjY5LVxuZHJpdmVycy9zY3NpL3NnLmM6MTY3MDpcdGlmIChzY2F0dGVyX2VsZW1fc3ogXHUwMDNjIFBBR0VfU0laRSkge1xuZHJpdmVycy9zY3NpL3NnLmM6MTY3MTpcdFx0c2NhdHRlcl9lbGVtX3N6ID0gUEFHRV9TSVpFO1xuZHJpdmVycy9zY3NpL3NnLmM6MTY3MjpcdFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBzY2F0dGVyX2VsZW1fc3o7XG5kcml2ZXJzL3Njc2kvc2cuYy0xNjczLVx0fVxuLS1cbmRyaXZlcnMvc2NzaS9zZy5jPTE4NTQ9c2dfYnVpbGRfaW5kaXJlY3QoU2dfc2NhdHRlcl9ob2xkICogc2NocCwgU2dfZmQgKiBzZnAsIGludCBidWZmX3NpemUpXG4tLVxuZHJpdmVycy9zY3NpL3NnLmMtMTg3NS1cbmRyaXZlcnMvc2NzaS9zZy5jOjE4NzY6XHRudW0gPSBzY2F0dGVyX2VsZW1fc3o7XG5kcml2ZXJzL3Njc2kvc2cuYzoxODc3Olx0aWYgKHVubGlrZWx5KG51bSAhPSBzY2F0dGVyX2VsZW1fc3pfcHJldikpIHtcbmRyaXZlcnMvc2NzaS9zZy5jLTE4NzgtXHRcdGlmIChudW0gXHUwMDNjIChpbnQpUEFHRV9TSVpFKSB7XG5kcml2ZXJzL3Njc2kvc2cuYzoxODc5Olx0XHRcdHNjYXR0ZXJfZWxlbV9zeiA9IFBBR0VfU0laRTtcbmRyaXZlcnMvc2NzaS9zZy5jOjE4ODA6XHRcdFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBQQUdFX1NJWkU7XG5kcml2ZXJzL3Njc2kvc2cuYy0xODgxLVx0XHRcdG51bSA9IFBBR0VfU0laRTtcbmRyaXZlcnMvc2NzaS9zZy5jLTE4ODItXHRcdH0gZWxzZVxuZHJpdmVycy9zY3NpL3NnLmM6MTg4MzpcdFx0XHRzY2F0dGVyX2VsZW1fc3pfcHJldiA9IG51bTtcbmRyaXZlcnMvc2NzaS9zZy5jLTE4ODQtXHR9XG4tLVxuZHJpdmVycy9zY3NpL3NnLmMtMTg5Mi1cbmRyaXZlcnMvc2NzaS9zZy5jOjE4OTM6XHRcdG51bSA9IChyZW1fc3ogXHUwMDNlIHNjYXR0ZXJfZWxlbV9zel9wcmV2KSA/XG5kcml2ZXJzL3Njc2kvc2cuYzoxODk0Olx0XHRcdHNjYXR0ZXJfZWxlbV9zel9wcmV2IDogcmVtX3N6O1xuZHJpdmVycy9zY3NpL3NnLmMtMTg5NS1cbi0tXG5kcml2ZXJzL3Njc2kvc2cuYy0xODk5LVxuZHJpdmVycy9zY3NpL3NnLmM6MTkwMDpcdFx0aWYgKG51bSA9PSBzY2F0dGVyX2VsZW1fc3pfcHJldikge1xuZHJpdmVycy9zY3NpL3NnLmM6MTkwMTpcdFx0XHRpZiAodW5saWtlbHkocmV0X3N6IFx1MDAzZSBzY2F0dGVyX2VsZW1fc3pfcHJldikpIHtcbmRyaXZlcnMvc2NzaS9zZy5jOjE5MDI6XHRcdFx0XHRzY2F0dGVyX2VsZW1fc3ogPSByZXRfc3o7XG5kcml2ZXJzL3Njc2kvc2cuYzoxOTAzOlx0XHRcdFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgPSByZXRfc3o7XG5kcml2ZXJzL3Njc2kvc2cuYy0xOTA0LVx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjY0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogODA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU2NhdHRlci9HYXRoZXIgRWxlbWVudCBTaXplIGluIHRoZSBTQ1NJIEdlbmVyaWMgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBzY2F0dGVyX2VsZW1fc3pgIHBhcmFtZXRlciBpbiB0aGUgYHNnLmNgIG1vZHVsZSwgd2hpY2ggaXMgdGhlIFNDU0kgR2VuZXJpYyBkcml2ZXIgYWNjZXNzaWJsZSB2aWEgYC9kZXYvc2cqYC4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgY2FuIEkgZXZlbiAqcmVhY2gqIHRoaXMgZHJpdmVyIGluIGEgdHlwaWNhbCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBZZXMsIHRoYW5rZnVsbHksIGBDT05GSUdfQ0hSX0RFVl9TR2AgbWFrZXMgaXQgYSBjbGFzc2ljIGRyaXZlci4gUUVNVSYjMzk7cyB2aXJ0aW8tc2NzaSwgU0NTSSBlbXVsYXRpb24sIGFuZCBVU0IgbWFzcyBzdG9yYWdlIFNDU0kgZGV2aWNlcyBhbGwgZXhwb3NlIGAvZGV2L3NnKmAuIEFuZCBJIGtub3cgc3l6a2FsbGVyIHNwZWNpZmljYWxseSB0ZXN0cyBTQ1NJIGFuZCBgL2Rldi9zZypgIHRocm91Z2ggaXRzIGRlc2NyaXB0aW9ucywgc28gaXQmIzM5O3MgYSB2YWxpZCB0YXJnZXQuCgpOb3csIGxldCYjMzk7cyB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZSBwYXRjaC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGlzc3VlIHRoaXMgaXMgZml4aW5nLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgc2dfYnVpbGRfaW5kaXJlY3RgIGZ1bmN0aW9uLiBJIHNlZSB0aGUgY29yZSBsb2dpYyBpbnZvbHZpbmcgYHNjYXR0ZXJfZWxlbV9zemAgYW5kIGhvdyBpdCYjMzk7cyBoYW5kbGVkLgoKT2theSwgaGVyZSYjMzk7cyB3aGF0JiMzOTtzIGhhcHBlbmluZy4gVGhlIGNvZGUgY2hlY2tzIGlmIGBudW1gIGlzIGRpZmZlcmVudCBmcm9tIGBzY2F0dGVyX2VsZW1fc3pfcHJldmAuIFRoZW4sIGl0IGNvbXBhcmVzIGlmIGBudW1gIGlzIGxlc3MgdGhhbiBgUEFHRV9TSVpFYC4gQmVmb3JlIHRoZSBmaXgsIGlmIGBudW0gJmx0OyBQQUdFX1NJWkVgLCB0aGUgY29kZSB3b3VsZCBzZXQgYHNjYXR0ZXJfZWxlbV9zemAgYW5kIGBzY2F0dGVyX2VsZW1fc3pfcHJldmAgdG8gYFBBR0VfU0laRWAsIGJ1dCBpdCAqZGlkbiYjMzk7dCogdXBkYXRlIGBudW1gISBUaGF0JiMzOTtzIGEgaHVnZSBvdmVyc2lnaHQuCgpUaGluayBhYm91dCB0aGlzLiAgYFBBR0VfU0laRWAgaXMgdW5zaWduZWQsIHJpZ2h0PyBBbmQgYG51bWAgaXMgYSBzaWduZWQgaW50ZWdlci4gIElmIGBzY2F0dGVyX2VsZW1fc3pgIChhbmQgaGVuY2UgYG51bWApIHdhcyBzZXQgdG8gYSBuZWdhdGl2ZSB2YWx1ZSwgdGhlIHVuc2lnbmVkIGNvbXBhcmlzb24gd291bGQgZmFpbCwgYW5kIGl0IHdvdWxkIHNraXAgdGhlIFBBR0VfU0laRSBhZGp1c3RtZW50LiBCdXQgZXZlbiBpZiB0aGUgY29tcGFyaXNvbiBzdWNjZWVkZWQsIHRoZSBjcml0aWNhbCBmbGF3IGlzIGBudW1gICp3YXNuJiMzOTt0KiB1cGRhdGVkLiBTbyB0aGUgc3Vic2VxdWVudCBgb3JkZXIgPSBnZXRfb3JkZXIobnVtKWAgY2FsbCBjb3VsZCBoYXZlIGJlZW4gdXNpbmcgYSBwb3RlbnRpYWxseSBpbnZhbGlkIGBudW1gLiBJdCBjb3VsZCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMCwgd2hpY2ggd291bGQgbGVhZCB0byB1bmRlZmluZWQgYmVoYXZpb3Igb3IgZXJyb3JzIHdpdGhpbiBgZ2V0X29yZGVyYCAobGlrZSBzaGlmdGluZyBieSBhIG5lZ2F0aXZlIGFtb3VudCkuICBUaGUgZml4IGFkZHJlc3NlcyB0aGlzIGJ5IHVzaW5nIGEgc2lnbmVkIGludGVnZXIgY29tcGFyaXNvbiAoYG51bSAmbHQ7IChpbnQpUEFHRV9TSVpFYCkgd2hpY2ggaXMgY29ycmVjdCwgYW5kIGNydWNpYWxseSBzZXRzIGBudW0gPSBQQUdFX1NJWkVgLCBndWFyYW50ZWVpbmcgYSB2YWxpZCB2YWx1ZSBpcyB1c2VkIGluIHRoZSBgZ2V0X29yZGVyYCBjYWxjdWxhdGlvbi4KCkkgd2FzIGhvcGluZyB0byBjaGVjayB0aGUgY29tbWl0IGxvZyBkaXJlY3RseSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LCBidXQgSSBkb24mIzM5O3QgaGF2ZSBkaXJlY3QgYWNjZXNzIHRvIGdpdC4gTm8gbWF0dGVyLCB0aGUgY29kZSB0ZWxscyB0aGUgc3RvcnkhICBUaGUgS2NvbmZpZyBvcHRpb25zIGFyZSBteSBuZXh0IHBvcnQgb2YgY2FsbC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhpcyBpcyBwcm9wZXJseSBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29iai0uKnNnXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvc2NzaSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvTWFrZWZpbGU9MTczPW9iai0kKENPTkZJR19CTEtfREVWX1NSKVx0JiM0Mzs9IHNyX21vZC5vXG5kcml2ZXJzL3Njc2kvTWFrZWZpbGU6MTc0Om9iai0kKENPTkZJR19DSFJfREVWX1NHKVx0JiM0Mzs9IHNnLm9cbmRyaXZlcnMvc2NzaS9NYWtlZmlsZS0xNzUtb2JqLSQoQ09ORklHX0NIUl9ERVZfU0NIKVx0JiM0Mzs9IGNoLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTY3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkNoZWNraW5nIFNDU0kgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB3aGVyZSB0aGUgYENPTkZJR19DSFJfREVWX1NHYCBzeW1ib2wgaXMgZGVmaW5lZC4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIGl0IGxpa2VseSByZWxhdGVzIHRvIFNDU0ksIGlzIHRvIGhlYWQgZGlyZWN0bHkgaW50byB0aGUga2VybmVsIHNvdXJjZSB0cmVlLCBzcGVjaWZpY2FsbHkgdGhlIGBkcml2ZXJzL3Njc2kvYCBkaXJlY3RvcnkuIFdpdGhpbiB0aGF0LCB0aGUgYEtjb25maWdgIGZpbGVzIGFyZSB1c3VhbGx5IHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBTbyBJJiMzOTtsbCBnbyBzdHJhaWdodCB0byBgZHJpdmVycy9zY3NpL0tjb25maWdgIGFuZCB0YWtlIGEgbG9vay4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBvZiBgQ09ORklHX0NIUl9ERVZfU0dgIGFuZCBhbnkgYXNzb2NpYXRlZCBkZXBlbmRlbmNpZXMsIGRlc2NyaXB0aW9ucywgYW5kIGRlZmF1bHRzIHRoZXJlLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4sIGFuZCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgcGFydGljdWxhciBmdW5jdGlvbmFsaXR5IGlzIGNvbnRyb2xsZWQgaW4gdGhlIGtlcm5lbCBidWlsZC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDSFJfREVWX1NHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvc2NzaS9LY29uZmlnPTExNj1jb25maWcgQkxLX0RFVl9TUlxuLS1cbmRyaXZlcnMvc2NzaS9LY29uZmlnLTEzMC1cbmRyaXZlcnMvc2NzaS9LY29uZmlnOjEzMTpjb25maWcgQ0hSX0RFVl9TR1xuZHJpdmVycy9zY3NpL0tjb25maWctMTMyLVx0dHJpc3RhdGUgXCYjMzQ7U0NTSSBnZW5lcmljIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ4NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIFNDU0kgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy9zY3NpL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyBkZWZpbmVkIGluIGxpbmVzIDEzMC0xNTAuIFNwZWNpZmljYWxseSwgSeKAmW0gaW50ZXJlc3RlZCBpbiB0aG9zZSBwYXJ0aWN1bGFyIGxpbmVzLCBhcyBzb21ldGhpbmcgbXVzdCBoYXZlIHRyaWdnZXJlZCBteSBpbnRlcmVzdCBpbiB0aGVtLiBXaGF04oCZcyBnb2luZyBvbiBpbiB0aGF0IHNwZWNpZmljIHNlY3Rpb24/IEFyZSB0aGV5IGRlZmluaW5nIG5ldyBTQ1NJIGhvc3QgYWRhcHRlcnMsIHBlcmhhcHM/IE9yIG1heWJlIHNvbWUgY29yZSBTQ1NJIG9wdGlvbnM/IEl04oCZcyBwcm9iYWJseSBhIGNvbmZpZ3VyYXRpb24gYmxvY2sgZm9yIGEgY2VydGFpbiB0eXBlIG9mIGNvbnRyb2xsZXIgb3Igc29tZSBmZWF0dXJlLCBnaXZlbiB0aGUgY29udGV4dCBvZiBhIEtjb25maWcgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHNlY3Rpb24gZW5hYmxlcyBvciBkaXNhYmxlcywgYW5kIHRoZSBkZXBlbmRlbmNpZXMgaXQgc2V0cy4gQWxyaWdodCwgbGV0JiMzOTtzIHBhcnNlIHRob3NlIGxpbmVzIGFuZCBzZWUgd2hhdCByZXZlbGF0aW9ucyBhcmUgaGlkZGVuIHRoZXJlLiBUaGUgZGV2aWwgaXMgYWx3YXlzIGluIHRoZSBkZXRhaWxzLCBzbyBsZXQmIzM5O3Mgc3RhcnQgcmVhZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTMwOlx0XG4gMTMxOlx0Y29uZmlnIENIUl9ERVZfU0dcbiAxMzI6XHRcdHRyaXN0YXRlIFwmIzM0O1NDU0kgZ2VuZXJpYyBzdXBwb3J0XCYjMzQ7XG4gMTMzOlx0XHRkZXBlbmRzIG9uIFNDU0lcbiAxMzQ6XHRcdGhlbHBcbiAxMzU6XHRcdCAgSWYgeW91IHdhbnQgdG8gdXNlIFNDU0kgc2Nhbm5lcnMsIHN5bnRoZXNpemVycyBvciBDRC13cml0ZXJzIG9yIGp1c3RcbiAxMzY6XHRcdCAgYWJvdXQgYW55dGhpbmcgaGF2aW5nIFwmIzM0O1NDU0lcJiMzNDsgaW4gaXRzIG5hbWUgb3RoZXIgdGhhbiBoYXJkIGRpc2tzLFxuIDEzNzpcdFx0ICBDRC1ST01zIG9yIHRhcGVzLCBzYXkgWSBoZXJlLiBUaGVzZSB3b24mIzM5O3QgYmUgc3VwcG9ydGVkIGJ5IHRoZSBrZXJuZWxcbiAxMzg6XHRcdCAgZGlyZWN0bHksIHNvIHlvdSBuZWVkIHNvbWUgYWRkaXRpb25hbCBzb2Z0d2FyZSB3aGljaCBrbm93cyBob3cgdG9cbiAxMzk6XHRcdCAgdGFsayB0byB0aGVzZSBkZXZpY2VzIHVzaW5nIHRoZSBTQ1NJIHByb3RvY29sOlxuIDE0MDpcdFxuIDE0MTpcdFx0ICBGb3Igc2Nhbm5lcnMsIGxvb2sgYXQgU0FORSAoXHUwMDNjaHR0cDovL3d3dy5zYW5lLXByb2plY3Qub3JnL1x1MDAzZSkuIEZvciBDRFxuIDE0MjpcdFx0ICB3cml0ZXIgc29mdHdhcmUgbG9vayBhdCBDZHJ0b29sc1xuIDE0MzpcdFx0ICAoXHUwMDNjaHR0cDovL2NkcnRvb2xzLnNvdXJjZWZvcmdlLm5ldC9cdTAwM2UpXG4gMTQ0Olx0XHQgIGFuZCBmb3IgYnVybmluZyBhIFwmIzM0O2Rpc2sgYXQgb25jZVwmIzM0OzogQ0RSREFPXG4gMTQ1Olx0XHQgIChcdTAwM2NodHRwOi8vY2RyZGFvLnNvdXJjZWZvcmdlLm5ldC9cdTAwM2UpLiBDZHBhcmFub2lhIGlzIGEgaGlnaFxuIDE0NjpcdFx0ICBxdWFsaXR5IGRpZ2l0YWwgcmVhZGVyIG9mIGF1ZGlvIENEcyAoXHUwMDNjaHR0cDovL3d3dy54aXBoLm9yZy9wYXJhbm9pYS9cdTAwM2UpLlxuIDE0NzpcdFx0ICBGb3Igb3RoZXIgZGV2aWNlcywgaXQmIzM5O3MgcG9zc2libGUgdGhhdCB5b3UmIzM5O2xsIGhhdmUgdG8gd3JpdGUgdGhlXG4gMTQ4Olx0XHQgIGRyaXZlciBzb2Z0d2FyZSB5b3Vyc2VsZi4gUGxlYXNlIHJlYWQgdGhlIGZpbGVcbiAxNDk6XHRcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL3Njc2kvc2NzaS1nZW5lcmljLnJzdFx1MDAzZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAxNTA6XHRcbiAxNTE6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZSBhbmQgcmVhZFxuIDE1MjpcdFx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vc2NzaS9zY3NpLnJzdFx1MDAzZS4gVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzZy5cbiAxNTM6XHRcbiAxNTQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE5NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBTQ1NJIFN1YnN5c3RlbSBEZXBlbmRlbmN5KioKClJpZ2h0LCBgQ09ORklHX0NIUl9ERVZfU0dgIGhpbmdlcyBvbiBgQ09ORklHX1NDU0lgLCB3aGljaCBpcyBleHBlY3RlZC4gVGhhdCYjMzk7cyBzdGFuZGFyZCBwcmFjdGljZSwgdGhlICYjMzQ7c2cmIzM0OyBkcml2ZXIgbGV2ZXJhZ2VzIHRoZSBTQ1NJIG1pZC1sYXllciwgc28gdGhhdCYjMzk7cyBub3RoaW5nIG5ldy4gTm93LCB0aGUgaW50ZXJlc3RpbmcgcXVlc3Rpb24gaXMgaG93IGBzZ19idWlsZF9pbmRpcmVjdGAgaXMgKmFjdHVhbGx5KiB1c2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBmbG93IHRocm91Z2ggYHNnX2J1aWxkX2luZGlyZWN0YC4gSSYjMzk7bSBjdXJpb3VzIGFib3V0IHRoZSBzcGVjaWZpYyBjb250ZXh0cyBhbmQgb3RoZXIgZGVwZW5kZW5jaWVzLiBMZXQmIzM5O3Mgc2VlIGhvdyBhbmQgd2hlbiB0aGF0IHJvdXRpbmUgZ2V0cyBpbnZva2VkLCBzbyBJIGNhbiBoYXZlIGFuIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgSS9PIGZsb3cuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hvJiMzOTtzIGNhbGxpbmcgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NnX2J1aWxkX2luZGlyZWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpL3NnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpL3NnLmM9MTgzPXN0YXRpYyBpbnQgc2dfZmluaXNoX3JlbV9yZXEoU2dfcmVxdWVzdCAqIHNycCk7XG5kcml2ZXJzL3Njc2kvc2cuYzoxODQ6c3RhdGljIGludCBzZ19idWlsZF9pbmRpcmVjdChTZ19zY2F0dGVyX2hvbGQgKiBzY2hwLCBTZ19mZCAqIHNmcCwgaW50IGJ1ZmZfc2l6ZSk7XG5kcml2ZXJzL3Njc2kvc2cuYy0xODUtc3RhdGljIHNzaXplX3Qgc2dfbmV3X3JlYWQoU2dfZmQgKiBzZnAsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCxcbi0tXG5kcml2ZXJzL3Njc2kvc2cuYz0xNzExPXNnX3N0YXJ0X3JlcShTZ19yZXF1ZXN0ICpzcnAsIHVuc2lnbmVkIGNoYXIgKmNtZClcbi0tXG5kcml2ZXJzL3Njc2kvc2cuYy0xNzgyLVx0XHR9IGVsc2Uge1xuZHJpdmVycy9zY3NpL3NnLmM6MTc4MzpcdFx0XHRyZXMgPSBzZ19idWlsZF9pbmRpcmVjdChyZXFfc2NocCwgc2ZwLCBkeGZlcl9sZW4pO1xuZHJpdmVycy9zY3NpL3NnLmMtMTc4NC1cdFx0XHRpZiAocmVzKSB7XG4tLVxuZHJpdmVycy9zY3NpL3NnLmM9MTg1Mz1zdGF0aWMgaW50XG5kcml2ZXJzL3Njc2kvc2cuYzoxODU0OnNnX2J1aWxkX2luZGlyZWN0KFNnX3NjYXR0ZXJfaG9sZCAqIHNjaHAsIFNnX2ZkICogc2ZwLCBpbnQgYnVmZl9zaXplKVxuZHJpdmVycy9zY3NpL3NnLmMtMTg1NS17XG4tLVxuZHJpdmVycy9zY3NpL3NnLmMtMTg2Ny1cdFNDU0lfTE9HX1RJTUVPVVQoNCwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc2ZwLVx1MDAzZXBhcmVudGRwLFxuZHJpdmVycy9zY3NpL3NnLmM6MTg2ODpcdFx0XCYjMzQ7c2dfYnVpbGRfaW5kaXJlY3Q6IGJ1ZmZfc2l6ZT0lZCwgYmxrX3NpemU9JWRcXG5cJiMzNDssXG5kcml2ZXJzL3Njc2kvc2cuYy0xODY5LVx0XHRidWZmX3NpemUsIGJsa19zaXplKSk7XG4tLVxuZHJpdmVycy9zY3NpL3NnLmMtMTkwNy1cdFx0U0NTSV9MT0dfVElNRU9VVCg1LCBzZ19wcmludGsoS0VSTl9JTkZPLCBzZnAtXHUwMDNlcGFyZW50ZHAsXG5kcml2ZXJzL3Njc2kvc2cuYzoxOTA4Olx0XHRcdFx0IFwmIzM0O3NnX2J1aWxkX2luZGlyZWN0OiBrPSVkLCBudW09JWQsIHJldF9zej0lZFxcblwmIzM0OyxcbmRyaXZlcnMvc2NzaS9zZy5jLTE5MDktXHRcdFx0XHQgaywgbnVtLCByZXRfc3opKTtcbi0tXG5kcml2ZXJzL3Njc2kvc2cuYy0xOTE0LVx0U0NTSV9MT0dfVElNRU9VVCg1LCBzZ19wcmludGsoS0VSTl9JTkZPLCBzZnAtXHUwMDNlcGFyZW50ZHAsXG5kcml2ZXJzL3Njc2kvc2cuYzoxOTE1Olx0XHRcdCBcJiMzNDtzZ19idWlsZF9pbmRpcmVjdDoga191c2Vfc2c9JWQsIHJlbV9zej0lZFxcblwmIzM0OyxcbmRyaXZlcnMvc2NzaS9zZy5jLTE5MTYtXHRcdFx0IGssIHJlbV9zeikpO1xuLS1cbmRyaXZlcnMvc2NzaS9zZy5jPTE5ODk9c2dfYnVpbGRfcmVzZXJ2ZShTZ19mZCAqIHNmcCwgaW50IHJlcV9zaXplKVxuLS1cbmRyaXZlcnMvc2NzaS9zZy5jLTE5OTctXHRcdFx0cmVxX3NpemUgPSBQQUdFX1NJWkU7XG5kcml2ZXJzL3Njc2kvc2cuYzoxOTk4Olx0XHRpZiAoMCA9PSBzZ19idWlsZF9pbmRpcmVjdChzY2hwLCBzZnAsIHJlcV9zaXplKSlcbmRyaXZlcnMvc2NzaS9zZy5jLTE5OTktXHRcdFx0cmV0dXJuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTgxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIERhdGEgRmxvdyoqCgpBbHJpZ2h0LCBzbyBgc2dfYnVpbGRfaW5kaXJlY3RgIGlzIGNsZWFybHkgYSBrZXkgZnVuY3Rpb24sIHRyaWdnZXJlZCBieSBib3RoIGBzZ19zdGFydF9yZXFgIGFuZCBgc2dfYnVpbGRfcmVzZXJ2ZWAuIFRoYXQgbWFrZXMgc2Vuc2U7IGluZGlyZWN0IGRlc2NyaXB0b3JzIGFyZSBmdW5kYW1lbnRhbCB0byBhIGxvdCBvZiBTQ1NJIG9wZXJhdGlvbnMsIGVzcGVjaWFsbHkgdGhvc2UgaW52b2x2aW5nIHNjYXR0ZXItZ2F0aGVyLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBmdW5jdGlvbnMsIHBhcnRpY3VsYXJseSB0aGUgcGF0aCB0aHJvdWdoIGBzZ19idWlsZF9yZXNlcnZlYC4gS25vd2luZyAqd2hhdCogY2FsbHMgYHNnX2J1aWxkX3Jlc2VydmVgIGlzIGdvaW5nIHRvIGlsbHVtaW5hdGUgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIGRldmljZSByZXNlcnZhdGlvbiBhbmQgcG90ZW50aWFsIGNvbmZsaWN0IHJlc29sdXRpb24sIEkmIzM5O2Qgd2FnZXIuIExldCYjMzk7cyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgdGhlIGNhbGwgZ3JhcGggZm9yIHRoYXQgZnVuY3Rpb24uIEl0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkYXRhIGZsb3cgYW5kIGhvdyB0aGUgZGlmZmVyZW50IGNvbXBvbmVudHMgaW50ZXJhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NnX2J1aWxkX3Jlc2VydmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvc2cuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvc2cuYz0xOTM9c3RhdGljIHZvaWQgc2dfcmVtb3ZlX3NjYXQoU2dfZmQgKiBzZnAsIFNnX3NjYXR0ZXJfaG9sZCAqIHNjaHApO1xuZHJpdmVycy9zY3NpL3NnLmM6MTk0OnN0YXRpYyB2b2lkIHNnX2J1aWxkX3Jlc2VydmUoU2dfZmQgKiBzZnAsIGludCByZXFfc2l6ZSk7XG5kcml2ZXJzL3Njc2kvc2cuYy0xOTUtc3RhdGljIHZvaWQgc2dfbGlua19yZXNlcnZlKFNnX2ZkICogc2ZwLCBTZ19yZXF1ZXN0ICogc3JwLCBpbnQgc2l6ZSk7XG4tLVxuZHJpdmVycy9zY3NpL3NnLmM9OTE0PXNnX2lvY3RsX2NvbW1vbihzdHJ1Y3QgZmlsZSAqZmlscCwgU2dfZGV2aWNlICpzZHAsIFNnX2ZkICpzZnAsXG4tLVxuZHJpdmVycy9zY3NpL3NnLmMtMTAzNS1cdFx0XHRzZ19yZW1vdmVfc2NhdChzZnAsIFx1MDAyNnNmcC1cdTAwM2VyZXNlcnZlKTtcbmRyaXZlcnMvc2NzaS9zZy5jOjEwMzY6XHRcdFx0c2dfYnVpbGRfcmVzZXJ2ZShzZnAsIHZhbCk7XG5kcml2ZXJzL3Njc2kvc2cuYy0xMDM3LVx0XHR9XG4tLVxuZHJpdmVycy9zY3NpL3NnLmM9MTk4OD1zdGF0aWMgdm9pZFxuZHJpdmVycy9zY3NpL3NnLmM6MTk4OTpzZ19idWlsZF9yZXNlcnZlKFNnX2ZkICogc2ZwLCBpbnQgcmVxX3NpemUpXG5kcml2ZXJzL3Njc2kvc2cuYy0xOTkwLXtcbi0tXG5kcml2ZXJzL3Njc2kvc2cuYy0xOTkzLVx0U0NTSV9MT0dfVElNRU9VVCg0LCBzZ19wcmludGsoS0VSTl9JTkZPLCBzZnAtXHUwMDNlcGFyZW50ZHAsXG5kcml2ZXJzL3Njc2kvc2cuYzoxOTk0Olx0XHRcdCBcJiMzNDtzZ19idWlsZF9yZXNlcnZlOiByZXFfc2l6ZT0lZFxcblwmIzM0OywgcmVxX3NpemUpKTtcbmRyaXZlcnMvc2NzaS9zZy5jLTE5OTUtXHRkbyB7XG4tLVxuZHJpdmVycy9zY3NpL3NnLmM9MjE0ND1zZ19hZGRfc2ZwKFNnX2RldmljZSAqIHNkcClcbi0tXG5kcml2ZXJzL3Njc2kvc2cuYy0yMTc3LVx0XHRcdG1heF9zZWN0b3JzX2J5dGVzKHNkcC1cdTAwM2VkZXZpY2UtXHUwMDNlcmVxdWVzdF9xdWV1ZSkpO1xuZHJpdmVycy9zY3NpL3NnLmM6MjE3ODpcdHNnX2J1aWxkX3Jlc2VydmUoc2ZwLCBidWZmbGVuKTtcbmRyaXZlcnMvc2NzaS9zZy5jLTIxNzktXHRTQ1NJX0xPR19USU1FT1VUKDMsIHNnX3ByaW50ayhLRVJOX0lORk8sIHNkcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk3MwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDEwNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQnVnIEZpeCBBbmFseXNpcyBhbmQgRnV6emluZyBTdHJhdGVneSBmb3IgU0NTSSBTY2F0dGVyL0dhdGhlciBEcml2ZXIqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgYW5hbHlzaXMgaW5kaWNhdGVzIGEgY3JpdGljYWwgYnVnIGZpeCB3aXRoaW4gdGhlIFNDU0kgc2NhdHRlci9nYXRoZXIgZHJpdmVyIChgZHJpdmVycy9zY3NpL3NnLmNgKS4gIFNwZWNpZmljYWxseSwgdGhlIHZ1bG5lcmFiaWxpdHkgbGllcyB3aXRoaW4gaG93IHRoZSBgc2NhdHRlcl9lbGVtX3N6YCBwYXJhbWV0ZXIgaXMgaGFuZGxlZCwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYHNnX2J1aWxkX2luZGlyZWN0YCBmdW5jdGlvbi4KCkkgc2VlIHRoYXQgYHNnX2J1aWxkX3Jlc2VydmVgIGlzIGNhbGxlZCB3aXRoaW4gYHNnX2FkZF9zZnBgLCB3aGljaCBpdHNlbGYgaXMgaW52b2tlZCBkdXJpbmcgYHNnX29wZW5gLiBBbHNvLCBgc2dfc3RhcnRfcmVxYCBpcyB1c2VkIGR1cmluZyB3cml0ZXMgYW5kIHJlcXVlc3RzIHRvIGAvZGV2L3NnKmAsIG1lYW5pbmcgaXQmIzM5O3MgcmVhY2hhYmxlLiBgc2NhdHRlcl9lbGVtX3N6YCwgY2FuIGJlIGNoYW5nZWQgdmlhIHRoZSBtb2R1bGUgcGFyYW1ldGVyIG9yIHRocm91Z2ggYC9zeXMvbW9kdWxlL3NnL3BhcmFtZXRlcnMvc2NhdHRlcl9lbGVtX3N6YC4gVGhlIGltcG9ydGFudCB0aGluZyBpcyB0aGF0IGEgc3RhbmRhcmQgTGludXggVk0gd2l0aCBzeXprYWxsZXIgYW5kIFNDU0kgb3IgdmlydGlvLXNjc2kgZHJpdmVzIG1ha2VzIGAvZGV2L3NnMGAgYXZhaWxhYmxlLiBUaGlzIG1lYW5zIHRoYXQgb3BlbmluZyBgL2Rldi9zZypgIHRyaWdnZXJzIGBzZ19vcGVuYCAtJmd0OyBgc2dfYWRkX3NmcGAgLSZndDsgYHNnX2J1aWxkX3Jlc2VydmVgIC0mZ3Q7IGBzZ19idWlsZF9pbmRpcmVjdGAuICBGdXJ0aGVybW9yZSwgd3JpdGluZyBTQ1NJIGNvbW1hbmRzIG9yIGlzc3VpbmcgdGhlIGBTR19JT2AgaW9jdGwgY2FsbHMgYHNnX3N0YXJ0X3JlcWAgLSZndDsgYHNnX2J1aWxkX2luZGlyZWN0YC4KCkkgaWRlbnRpZmllZCB0aGF0IGBpbml0X3NnYCBhdHRlbXB0cyB0byBjaGVjayBgc2NhdHRlcl9lbGVtX3N6ICZsdDsgUEFHRV9TSVpFYC4gIEhvd2V2ZXIsIHRoaXMgaW5pdGlhbGl6YXRpb24gb25seSBvY2N1cnMgYXQgbW9kdWxlIGxvYWQsIGFuZCB0aGUgYHNjYXR0ZXJfZWxlbV9zemAgcGFyYW1ldGVyIGlzIHdyaXRhYmxlIGF0IHJ1bnRpbWUuIElmIGEgc21hbGwgb3IgbmVnYXRpdmUgdmFsdWUgaXMgd3JpdHRlbiB0byBgL3N5cy9tb2R1bGUvc2cvcGFyYW1ldGVycy9zY2F0dGVyX2VsZW1fc3pgLCB0aGUgY29tcGFyaXNvbiBgc2NhdHRlcl9lbGVtX3N6ICE9IHNjYXR0ZXJfZWxlbV9zel9wcmV2YCBpbiBgc2dfYnVpbGRfaW5kaXJlY3RgIHdpbGwgdHJpZ2dlci4gVGhpcyBjb21wYXJpc29uIGlzIGRhbmdlcm91cyBiZWNhdXNlIGBQQUdFX1NJWkVgIGlzIHVuc2lnbmVkLCBzbyBjb21wYXJpbmcgc2lnbmVkIG51bWJlcnMgd2l0aCBpdCB3aWxsIGNvbnZlcnQgdGhlIHNpZ25lZCBudW1iZXIgdG8gdW5zaWduZWQsIHdoaWNoIGNhbiBsZWFkIHRvIGl0IGJlaW5nIGxhcmdlciB0aGFuIFBBR0VfU0laRSAoYmVjYXVzZSBpdCBjYW4gYmVjb21lIGEgdmVyeSBsYXJnZSBwb3NpdGl2ZSBudW1iZXIpLiBUaGlzIGxlYWRzIHRvIGEgY3Jhc2ggYmVjYXVzZSBuZWdhdGl2ZSBgc2NhdHRlcl9lbGVtX3N6YCB2YWx1ZXMgY2F1c2UgdW5kZWZpbmVkIGJlaGF2aW9yIGluIGBnZXRfb3JkZXIoKWAuIEV2ZW4gaWYgdGhlIGlucHV0IGlzIG9ubHkgKnNsaWdodGx5KiBzbWFsbGVyIHRoYW4gYFBBR0VfU0laRWAsIHRoZSBvcmlnaW5hbCBjb2RlIHdvdWxkIG5ldmVyIHVwZGF0ZSBpdCwgc28gYGdldF9vcmRlcmAgd291bGQgc3RpbGwgaGF2ZSBhIHNtYWxsIG51bWJlci4gVGhlIGZpeCBzZWVtcyB0byBhZGRyZXNzIGJvdGggc2NlbmFyaW9zIGJ5IGNhc3RpbmcgYFBBR0VfU0laRWAgdG8gYGludGAgZm9yIHRoZSBjb21wYXJpc29uIGFuZCB1cGRhdGluZyBgc2NhdHRlcl9lbGVtX3N6YCBhY2NvcmRpbmdseS4KClNpbmNlIHRoaXMgYnVnIGlzIGxvY2F0ZWQgaW4gdGhlIGNvcmUgYGRyaXZlcnMvc2NzaS9zZy5jYCwgaXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgcGF0Y2ggZGlyZWN0bHkgYWZmZWN0cyByZWFjaGFibGUgY29kZSBhbmQgaXMgdGhlcmVmb3JlIHdvcnRoIGZ1enppbmcuCgpNeSBhbmFseXNpcyBhbHNvIHRlbGxzIG1lIHRvIGNvbmZpcm0gdGhhdCB0aGUgYENIUl9ERVZfU0dgIGFuZCBgU0NTSWAga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcmVxdWlyZWQgdG8gZW5hYmxlIHRoaXMgYnVnLiBJJiMzOTtsbCBuZWVkIHRvIGVuYWJsZSBib3RoLgoKRmluYWxseSwgSSBuZWVkIHRvIGxpc3QgZnVuY3Rpb25zIHRoYXQgaW1wbGVtZW50IHRoZSBwYXRjaGVkIGxvZ2ljIG9yIGFyZSBlbnRyeSBwb2ludHMuIFRoZSBmb2N1cyBzaG91bGQgYmUgb24gYHNnX2J1aWxkX2luZGlyZWN0YCBiZWNhdXNlIHRoaXMgaXMgd2hlcmUgdGhlIHBhdGNoIHdhcyBhcHBsaWVkLCBhbmQgYWxzbyBgc2dfYnVpbGRfcmVzZXJ2ZWAgYW5kIGBzZ19zdGFydF9yZXFgIGFzIHRoZSBjYWxsZXJzIG9mIHRoZSBmdW5jdGlvbi4gIEkgY29uZmlybWVkIHRoYXQgYHNnX2J1aWxkX2luZGlyZWN0YCBpcyAqbm90KiBpbmxpbmVkIGFuZCBpcyBhIHN1YnN0YW50aWFsIHN0YXRpYyBDIGZ1bmN0aW9uLiBJdCYjMzk7cyBkZWZpbml0ZWx5IG5vdCBzdGF0aWMgaW5saW5lLCBzbyBpdCYjMzk7cyBhIGdvb2QgRm9jdXNTeW1ib2wuIEkgd2lsbCBkb3VibGUtY2hlY2sgYGRyaXZlcnMvc2NzaS9LY29uZmlnYCB0byBjb25maXJtIGFueSBvdGhlciBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTQ1NJXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvc2NzaS9LY29uZmlnPTE4PWNvbmZpZyBTQ1NJX0NPTU1PTlxuLS1cbmRyaXZlcnMvc2NzaS9LY29uZmlnLTIwLVxuZHJpdmVycy9zY3NpL0tjb25maWc6MjE6Y29uZmlnIFNDU0lcbmRyaXZlcnMvc2NzaS9LY29uZmlnLTIyLVx0dHJpc3RhdGUgXCYjMzQ7U0NTSSBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg4MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKlNjb3V0aW5nIHRoZSBTQ1NJIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIFNDU0kgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIE15IGluc3RpbmN0IHNheXMgdG8gc3RhcnQgd2l0aCBgZHJpdmVycy9zY3NpL0tjb25maWdgLiBMZXQmIzM5O3MgemVybyBpbiBvbiBsaW5lIDIxIHdpdGhpbiB0aGF0IGZpbGUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgU0NTSSBvcHRpb25zLCBhbmQgZnJvbSB0aGVyZSBJIGNhbiBob3BlZnVsbHkgdHJhY2Ugd2hhdCYjMzk7cyBlbmFibGVkLCBkaXNhYmxlZCwgYW5kIHdoYXQgbXkgY3VycmVudCBjb25maWd1cmF0aW9uJiMzOTtzIGRlYWxpbmcgd2l0aC4gVW5kZXJzdGFuZGluZyB0aG9zZSBjb3JlIEtjb25maWcgc2V0dGluZ3MgaXMgY3J1Y2lhbCBiZWZvcmUgSSBnZXQgYW55IGRlZXBlci4gSSYjMzk7bSBob3BpbmcgSSBjYW4gZ2xlYW4gYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIG92ZXJhbGwgc2V0dXAgcXVpY2tseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMTU6XHRcdGhlbHBcbiAgMTY6XHRcdCAgUHJvdmlkZXMgUkFJRFxuICAxNzpcdFxuICAxODpcdGNvbmZpZyBTQ1NJX0NPTU1PTlxuICAxOTpcdFx0dHJpc3RhdGVcbiAgMjA6XHRcbiAgMjE6XHRjb25maWcgU0NTSVxuICAyMjpcdFx0dHJpc3RhdGUgXCYjMzQ7U0NTSSBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuICAyMzpcdFx0ZGVwZW5kcyBvbiBCTE9DS1xuICAyNDpcdFx0c2VsZWN0IFNDU0lfRE1BIGlmIEhBU19ETUFcbiAgMjU6XHRcdHNlbGVjdCBTR19QT09MXG4gIDI2Olx0XHRzZWxlY3QgU0NTSV9DT01NT05cbiAgMjc6XHRcdHNlbGVjdCBCTEtfREVWX0JTR19DT01NT04gaWYgQkxLX0RFVl9CU0dcbiAgMjg6XHRcdGhlbHBcbiAgMjk6XHRcdCAgSWYgeW91IHdhbnQgdG8gdXNlIGEgU0NTSSBoYXJkIGRpc2ssIFNDU0kgdGFwZSBkcml2ZSwgU0NTSSBDRC1ST00gb3JcbiAgMzA6XHRcdCAgYW55IG90aGVyIFNDU0kgZGV2aWNlIHVuZGVyIExpbnV4LCBzYXkgWSBhbmQgbWFrZSBzdXJlIHRoYXQgeW91IGtub3dcbiAgMzE6XHRcdCAgdGhlIG5hbWUgb2YgeW91ciBTQ1NJIGhvc3QgYWRhcHRlciAodGhlIGNhcmQgaW5zaWRlIHlvdXIgY29tcHV0ZXJcbiAgMzI6XHRcdCAgdGhhdCBcJiMzNDtzcGVha3NcJiMzNDsgdGhlIFNDU0kgcHJvdG9jb2wsIGFsc28gY2FsbGVkIFNDU0kgY29udHJvbGxlciksXG4gIDMzOlx0XHQgIGJlY2F1c2UgeW91IHdpbGwgYmUgYXNrZWQgZm9yIGl0LlxuICAzNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjMyOAoJCQkJCQkJb3V0cHV0OiAxMzIKCQkJCQkJCXRob3VnaHRzOiAyNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgQ29uZmlndXJhdGlvbmFsIFJlcXVpcmVtZW50cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgdGhhdCBgQ09ORklHX1NDU0lgIHJlbGllcyBvbiBgQkxPQ0tgLCBhbmQgdGhlbiBgQ09ORklHX0NIUl9ERVZfU0dgIGRlcGVuZHMgb24gYFNDU0lgLiBTaW1wbGUgZGVwZW5kZW5jeSBjaGFpbjogYENIUl9ERVZfU0dgIG5lZWRzIGBTQ1NJYCwgd2hpY2ggbmVlZHMgYEJMT0NLYC4gQnV0IGhvbmVzdGx5LCBgQkxPQ0tgIGlzIHByZXR0eSBtdWNoIGEgZ2l2ZW4gaW4gYW55IHN0YW5kYXJkIExpbnV4IGtlcm5lbCBzZXR1cC4gU28sIHJlYWxseSwgdGhlIGltcG9ydGFudCBjb25maWd1cmF0aW9ucyB0byBmb2N1cyBvbiBoZXJlIGFyZSBgQ0hSX0RFVl9TR2AgYW5kIGBTQ1NJYC4KCk5vdywgbGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLiBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gYHRydWVgLCB3aGljaCBpcyBjb3JyZWN0IGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhpcyBidWcuIFRoZSBgUmVhc29uaW5nYCBzZWN0aW9uIGNvbmNpc2VseSBleHBsYWlucyB0aGF0IHRoZSBwYXRjaCBhZGRyZXNzZXMgYSBzaWduZWRuZXNzIGFuZCB1cGRhdGUgYnVnIGluIGBzZ19idWlsZF9pbmRpcmVjdCgpYCB3aXRoaW4gdGhlIFNDU0kgZ2VuZXJpYyBkcml2ZXIsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGBzY2F0dGVyX2VsZW1fc3pgIG1vZHVsZSBwYXJhbWV0ZXIgYW5kIHBvdGVudGlhbGx5IGludmFsaWQgcGFnZSBvcmRlciBjYWxjdWxhdGlvbnMuIFRoZSBqdXN0aWZpY2F0aW9uIGZvciBmdXp6aW5nIGlzIHNvdW5kLCBhbmQgdGhlIHN0YXRlbWVudCB0aGF0IHRoZSBTQ1NJIGdlbmVyaWMgZHJpdmVyIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2l0aCBlbXVsYXRlZCBTQ1NJIGRldmljZXMgaXMgYWJzb2x1dGVseSBzcG90LW9uIGFuZCByZWxldmFudCB0byB0aGUgZnV6emluZyBzdHJhdGVneS4KCkZpbmFsbHksIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0LCB3aXRoIGBzZ19idWlsZF9pbmRpcmVjdGAsIGBzZ19idWlsZF9yZXNlcnZlYCwgYW5kIGBzZ19zdGFydF9yZXFgIGFsbCBzZWVtIHByZWNpc2VseSB0YXJnZXRlZCBhdCB0aGUgY29yZSBhcmVhcyBhZmZlY3RlZCBieSB0aGlzIGJ1Zy4gQW5kIGBFbmFibGVDb25maWdzYCBjb3JyZWN0bHkgcG9pbnRzIHRvIHRoZSByZXF1aXJlZCBjb25maWdzIHRoYXQgdHJpZ2dlciB0aGUgY29kZSBpbiBxdWVzdGlvbi4KClllcCwgZXZlcnl0aGluZyBjaGVja3Mgb3V0LiBMZXQmIzM5O3MgZXhlY3V0ZSBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0hSX0RFVl9TRyYjMzQ7LAogICAgJiMzNDtTQ1NJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2dfYnVpbGRfaW5kaXJlY3QmIzM0OywKICAgICYjMzQ7c2dfYnVpbGRfcmVzZXJ2ZSYjMzQ7LAogICAgJiMzNDtzZ19zdGFydF9yZXEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc2dfYnVpbGRfaW5kaXJlY3QoKSBpbiB0aGUgU0NTSSBnZW5lcmljIChzZykgZHJpdmVyIHRvIHByb3Blcmx5IGNsYW1wIHNjYXR0ZXJfZWxlbV9zeiB3aGVuIGl0IGlzIHNtYWxsZXIgdGhhbiBQQUdFX1NJWkUgb3IgbmVnYXRpdmUgKHByZXZlbnRpbmcgc2lnbmVkIGludGVnZXIgY29tcGFyaXNvbiBpc3N1ZXMgYW5kIGludmFsaWQgcGFnZSBvcmRlcnMgZm9yIGdldF9vcmRlcikuIFRoZSBzZyBkcml2ZXIgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB3aXRoIGVtdWxhdGVkIFNDU0kgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0hSX0RFVl9TRyYjMzQ7LAogICAgJiMzNDtTQ1NJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2dfYnVpbGRfaW5kaXJlY3QmIzM0OywKICAgICYjMzQ7c2dfYnVpbGRfcmVzZXJ2ZSYjMzQ7LAogICAgJiMzNDtzZ19zdGFydF9yZXEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc2dfYnVpbGRfaW5kaXJlY3QoKSBpbiB0aGUgU0NTSSBnZW5lcmljIChzZykgZHJpdmVyIHRvIHByb3Blcmx5IGNsYW1wIHNjYXR0ZXJfZWxlbV9zeiB3aGVuIGl0IGlzIHNtYWxsZXIgdGhhbiBQQUdFX1NJWkUgb3IgbmVnYXRpdmUgKHByZXZlbnRpbmcgc2lnbmVkIGludGVnZXIgY29tcGFyaXNvbiBpc3N1ZXMgYW5kIGludmFsaWQgcGFnZSBvcmRlcnMgZm9yIGdldF9vcmRlcikuIFRoZSBzZyBkcml2ZXIgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB3aXRoIGVtdWxhdGVkIFNDU0kgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgc2lnbmVkbmVzcyBpc3N1ZSBpbiBkcml2ZXJzL3Njc2kvc2cuYyAoc2dfYnVpbGRfaW5kaXJlY3QpLiBTcGVjaWZpY2FsbHksIGNvbXBhcmluZyB0aGUgc2lnbmVkIGludCAmIzM5O251bSYjMzk7IHRvIHVuc2lnbmVkIGxvbmcgJiMzOTtQQUdFX1NJWkUmIzM5OyByZXN1bHRlZCBpbiBzaWduZWQtdG8tdW5zaWduZWQgdHlwZSBwcm9tb3Rpb24sIGFsbG93aW5nIG5lZ2F0aXZlIHZhbHVlcyBvZiB0aGUgJiMzOTtzY2F0dGVyX2VsZW1fc3omIzM5OyBtb2R1bGUgcGFyYW1ldGVyIHRvIGJ5cGFzcyB0aGUgbWluaW11bSBib3VuZCBjaGVjayBhbmQgbGVhZCB0byBpbnZhbGlkIHBhZ2UgYWxsb2NhdGlvbiBvcmRlcnMgYW5kIHVuZGVmaW5lZCBzaGlmdCBiZWhhdmlvci4gVGhlIHBhdGNoIGNhc3RzIFBBR0VfU0laRSB0byBpbnQgYW5kIHNldHMgbnVtID0gUEFHRV9TSVpFIHdoZW4gbnVtIFx1MDAzYyAoaW50KVBBR0VfU0laRS5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeTpcbjEuICYjMzk7bnVtJiMzOTsgYW5kICYjMzk7c2NhdHRlcl9lbGVtX3N6JiMzOTsgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHZhbHVlcy5cbjIuIFRoZSBzY2F0dGVyLWdhdGhlciBidWZmZXIgYWxsb2NhdGlvbnMgaW4gc2dfYnVpbGRfaW5kaXJlY3QgdXNlIGt6YWxsb2MgZm9yIHRoZSBwb2ludGVyIGFycmF5IGFuZCBfX0dGUF9aRVJPIGZvciB0aGUgdW5kZXJseWluZyBwYWdlIGFsbG9jYXRpb25zLlxuMy4gTm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBzdGFjayB2YXJpYWJsZXMsIHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBjb3BpZWQgdG8gdXNlcnNwYWNlIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuXG5BbnkgcG90ZW50aWFsIGlzc3VlcyBmcm9tIHRoZSBidWcgKHN1Y2ggYXMgaW52YWxpZCBhbGxvY2F0aW9uIG9yZGVycyBvciBzaGlmdHMpIGZhbGwgdW5kZXIgc3RhbmRhcmQgVUJTQU4vS0FTQU4gZGV0ZWN0aW9uIHJhdGhlciB0aGFuIEtNU0FOIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRyYWNraW5nLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDEzNTI5NDg5ZjZjY2U0MjUwZjM3NTk4NzM2YzY5ZmViZWYzMGI4OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDE0IDA4OjQ0OjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NnLmMgYi9kcml2ZXJzL3Njc2kvc2cuYwppbmRleCA1NDA4ZjAwMmU2YzAxLi4zOWM4ZTUyZmE2ZmY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2cuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Njc2kvc2cuYwpAQCAtMTg3NSw5ICYjNDM7MTg3NSwxMCBAQCBzZ19idWlsZF9pbmRpcmVjdChTZ19zY2F0dGVyX2hvbGQgKiBzY2hwLCBTZ19mZCAqIHNmcCwgaW50IGJ1ZmZfc2l6ZSkKIAogCW51bSA9IHNjYXR0ZXJfZWxlbV9zejsKIAlpZiAodW5saWtlbHkobnVtICE9IHNjYXR0ZXJfZWxlbV9zel9wcmV2KSkgewotCQlpZiAobnVtICZsdDsgUEFHRV9TSVpFKSB7CiYjNDM7CQlpZiAobnVtICZsdDsgKGludClQQUdFX1NJWkUpIHsKIAkJCXNjYXR0ZXJfZWxlbV9zeiA9IFBBR0VfU0laRTsKIAkJCXNjYXR0ZXJfZWxlbV9zel9wcmV2ID0gUEFHRV9TSVpFOwomIzQzOwkJCW51bSA9IFBBR0VfU0laRTsKIAkJfSBlbHNlCiAJCQlzY2F0dGVyX2VsZW1fc3pfcHJldiA9IG51bTsKIAl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTIyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFNDU0kgR2VuZXJpYyBEcml2ZXIqKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoaXMuIFRoZSBkaWZmIHBvaW50cyB1cyBkaXJlY3RseSB0byBgZHJpdmVycy9zY3NpL3NnLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTg3NS4gVGhpcyBwcm9iYWJseSBtZWFucyBhIHNwZWNpZmljIGNoYW5nZSB3YXMgbWFkZSBpbiB0aGlzIGFyZWEgb2YgdGhlIGRyaXZlciwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGN1cnJlbnQgY29kZS4gSSYjMzk7bGwgc3RhcnQgYnkgdXNpbmcgdGhlIGByZWFkLWZpbGVgIGNvbW1hbmQgdG8gcHVsbCB0aGUgY29kZSBhcm91bmQgdGhhdCBsaW5lIGludG8gdmlldy4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGltbWVkaWF0ZSBjb250ZXh0IEkgbmVlZCDigJMgdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9ucywgdmFyaWFibGVzLCBhbmQgcG90ZW50aWFsIGRhdGEgc3RydWN0dXJlcyDigJMgYmVmb3JlIEkgdHJ5IHRvIGludGVycHJldCB0aGUgZGlmZiBpdHNlbGYuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlICYjMzQ7YmVmb3JlJiMzNDsgc3RhdGUgdG8gdW5kZXJzdGFuZCB0aGUgJiMzNDthZnRlciYjMzQ7IHN0YXRlLiBUaGlzIGFwcHJvYWNoIGhlbHBzIG1lIHF1aWNrbHkgZ3Jhc3AgdGhlIGltcGFjdCBhbmQgcmVhc29uaW5nIGJlaGluZCB0aGUgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvc2NzaS9zZy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODYwOlx0XG4xODYxOlx0XHRpZiAoYmxrX3NpemUgXHUwMDNjIDApXG4xODYyOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuMTg2MzpcdFx0aWYgKDAgPT0gYmxrX3NpemUpXG4xODY0Olx0XHRcdCYjNDM7JiM0MztibGtfc2l6ZTtcdC8qIGRvbiYjMzk7dCBrbm93IHdoeSAqL1xuMTg2NTpcdFx0Lyogcm91bmQgcmVxdWVzdCB1cCB0byBuZXh0IGhpZ2hlc3QgU0dfU0VDVE9SX1NaIGJ5dGUgYm91bmRhcnkgKi9cbjE4NjY6XHRcdGJsa19zaXplID0gQUxJR04oYmxrX3NpemUsIFNHX1NFQ1RPUl9TWik7XG4xODY3Olx0XHRTQ1NJX0xPR19USU1FT1VUKDQsIHNnX3ByaW50ayhLRVJOX0lORk8sIHNmcC1cdTAwM2VwYXJlbnRkcCxcbjE4Njg6XHRcdFx0XCYjMzQ7c2dfYnVpbGRfaW5kaXJlY3Q6IGJ1ZmZfc2l6ZT0lZCwgYmxrX3NpemU9JWRcXG5cJiMzNDssXG4xODY5Olx0XHRcdGJ1ZmZfc2l6ZSwgYmxrX3NpemUpKTtcbjE4NzA6XHRcbjE4NzE6XHRcdC8qIE4uQi4gcmV0X3N6IGNhcnJpZWQgaW50byB0aGlzIGJsb2NrIC4uLiAqL1xuMTg3MjpcdFx0bXhfc2NfZWxlbXMgPSBzZ19idWlsZF9zZ2F0KHNjaHAsIHNmcCwgc2dfdGFibGVzaXplKTtcbjE4NzM6XHRcdGlmIChteF9zY19lbGVtcyBcdTAwM2MgMClcbjE4NzQ6XHRcdFx0cmV0dXJuIG14X3NjX2VsZW1zO1x0LyogbW9zdCBsaWtlbHkgLUVOT01FTSAqL1xuMTg3NTpcdFxuMTg3NjpcdFx0bnVtID0gc2NhdHRlcl9lbGVtX3N6O1xuMTg3NzpcdFx0aWYgKHVubGlrZWx5KG51bSAhPSBzY2F0dGVyX2VsZW1fc3pfcHJldikpIHtcbjE4Nzg6XHRcdFx0aWYgKG51bSBcdTAwM2MgKGludClQQUdFX1NJWkUpIHtcbjE4Nzk6XHRcdFx0XHRzY2F0dGVyX2VsZW1fc3ogPSBQQUdFX1NJWkU7XG4xODgwOlx0XHRcdFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBQQUdFX1NJWkU7XG4xODgxOlx0XHRcdFx0bnVtID0gUEFHRV9TSVpFO1xuMTg4MjpcdFx0XHR9IGVsc2VcbjE4ODM6XHRcdFx0XHRzY2F0dGVyX2VsZW1fc3pfcHJldiA9IG51bTtcbjE4ODQ6XHRcdH1cbjE4ODU6XHRcbjE4ODY6XHRcdG9yZGVyID0gZ2V0X29yZGVyKG51bSk7XG4xODg3Olx0cmV0cnk6XG4xODg4Olx0XHRyZXRfc3ogPSAxIFx1MDAzY1x1MDAzYyAoUEFHRV9TSElGVCAmIzQzOyBvcmRlcik7XG4xODg5Olx0XG4xODkwOlx0XHRmb3IgKGsgPSAwLCByZW1fc3ogPSBibGtfc2l6ZTsgcmVtX3N6IFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBrIFx1MDAzYyBteF9zY19lbGVtcztcbjE4OTE6XHRcdCAgICAgayYjNDM7JiM0MzssIHJlbV9zeiAtPSByZXRfc3opIHtcbjE4OTI6XHRcbjE4OTM6XHRcdFx0bnVtID0gKHJlbV9zeiBcdTAwM2Ugc2NhdHRlcl9lbGVtX3N6X3ByZXYpID9cbjE4OTQ6XHRcdFx0XHRzY2F0dGVyX2VsZW1fc3pfcHJldiA6IHJlbV9zejtcbjE4OTU6XHRcbjE4OTY6XHRcdFx0c2NocC1cdTAwM2VwYWdlc1trXSA9IGFsbG9jX3BhZ2VzKGdmcF9tYXNrLCBvcmRlcik7XG4xODk3Olx0XHRcdGlmICghc2NocC1cdTAwM2VwYWdlc1trXSlcbjE4OTg6XHRcdFx0XHRnb3RvIG91dDtcbjE4OTk6XHRcbjE5MDA6XHRcdFx0aWYgKG51bSA9PSBzY2F0dGVyX2VsZW1fc3pfcHJldikge1xuMTkwMTpcdFx0XHRcdGlmICh1bmxpa2VseShyZXRfc3ogXHUwMDNlIHNjYXR0ZXJfZWxlbV9zel9wcmV2KSkge1xuMTkwMjpcdFx0XHRcdFx0c2NhdHRlcl9lbGVtX3N6ID0gcmV0X3N6O1xuMTkwMzpcdFx0XHRcdFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgPSByZXRfc3o7XG4xOTA0Olx0XHRcdFx0fVxuMTkwNTpcdFx0XHR9XG4xOTA2Olx0XG4xOTA3Olx0XHRcdFNDU0lfTE9HX1RJTUVPVVQoNSwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc2ZwLVx1MDAzZXBhcmVudGRwLFxuMTkwODpcdFx0XHRcdFx0IFwmIzM0O3NnX2J1aWxkX2luZGlyZWN0OiBrPSVkLCBudW09JWQsIHJldF9zej0lZFxcblwmIzM0OyxcbjE5MDk6XHRcdFx0XHRcdCBrLCBudW0sIHJldF9zeikpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjM3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uOiBzZ19idWlsZF9pbmRpcmVjdCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBiYWNrIGludG8gdGhpcy4gSSYjMzk7bSBnb2luZyB0byByZXZpc2l0IGBzZ19idWlsZF9pbmRpcmVjdGAuIEkmIzM5O3ZlIGdvdCBhIGdvb2QgZ3Jhc3Agb2YgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQsIGJ1dCBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIHRoZSBleGFjdCBmdW5jdGlvbiBvZiBgc2dfYnVpbGRfaW5kaXJlY3RgLiBJIGtub3cgaXQmIzM5O3MgYSBrZXkgcGllY2UsIGFuZCBJIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnkgc28gSSBjYW4gdW5kZXJzdGFuZCBhbnkgcmVsYXRlZCBjb2RlIGNoYW5nZXMuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzIG9mIGl0cyBiZWhhdmlvcjogaXRzIGlucHV0cywgb3V0cHV0cywgc2lkZSBlZmZlY3RzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIHN5c3RlbS4gSSYjMzk7bGwgZm9jdXMgb24gaG93IHRoZSBjb2RlIGltcGxlbWVudHMgdGhlIGNvbmNlcHRzIEkgdW5kZXJzdGFuZCwgYW5kIGFueSBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpY3MgdGhhdCBhcmUgbmV3IHRvIG1lLiBFc3NlbnRpYWxseSwgSSYjMzk7bSByZWFkeSB0byByZS1leGFtaW5lIHRoZSBtZWNoYW5pY3Mgb2YgdGhpcyBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvc2cuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTgzMDpcdFx0XHRibGtfbXFfZnJlZV9yZXF1ZXN0KHNycC1cdTAwM2VycSk7XG4xODMxOlx0XG4xODMyOlx0XHRpZiAoc3JwLVx1MDAzZXJlc191c2VkKVxuMTgzMzpcdFx0XHRzZ191bmxpbmtfcmVzZXJ2ZShzZnAsIHNycCk7XG4xODM0Olx0XHRlbHNlXG4xODM1Olx0XHRcdHNnX3JlbW92ZV9zY2F0KHNmcCwgcmVxX3NjaHApO1xuMTgzNjpcdFxuMTgzNzpcdFx0cmV0dXJuIHJldDtcbjE4Mzg6XHR9XG4xODM5Olx0XG4xODQwOlx0c3RhdGljIGludFxuMTg0MTpcdHNnX2J1aWxkX3NnYXQoU2dfc2NhdHRlcl9ob2xkICogc2NocCwgY29uc3QgU2dfZmQgKiBzZnAsIGludCB0YWJsZXNpemUpXG4xODQyOlx0e1xuMTg0MzpcdFx0aW50IHNnX2J1ZmZsZW4gPSB0YWJsZXNpemUgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKik7XG4xODQ0Olx0XHRnZnBfdCBnZnBfZmxhZ3MgPSBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOO1xuMTg0NTpcdFxuMTg0NjpcdFx0c2NocC1cdTAwM2VwYWdlcyA9IGt6YWxsb2Moc2dfYnVmZmxlbiwgZ2ZwX2ZsYWdzKTtcbjE4NDc6XHRcdGlmICghc2NocC1cdTAwM2VwYWdlcylcbjE4NDg6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xODQ5Olx0XHRzY2hwLVx1MDAzZXNnbGlzdF9sZW4gPSBzZ19idWZmbGVuO1xuMTg1MDpcdFx0cmV0dXJuIHRhYmxlc2l6ZTtcdC8qIG51bWJlciBvZiBzY2F0X2dhdGggZWxlbWVudHMgYWxsb2NhdGVkICovXG4xODUxOlx0fVxuMTg1MjpcdFxuMTg1MzpcdHN0YXRpYyBpbnRcbjE4NTQ6XHRzZ19idWlsZF9pbmRpcmVjdChTZ19zY2F0dGVyX2hvbGQgKiBzY2hwLCBTZ19mZCAqIHNmcCwgaW50IGJ1ZmZfc2l6ZSlcbjE4NTU6XHR7XG4xODU2Olx0XHRpbnQgcmV0X3N6ID0gMCwgaSwgaywgcmVtX3N6LCBudW0sIG14X3NjX2VsZW1zO1xuMTg1NzpcdFx0aW50IHNnX3RhYmxlc2l6ZSA9IHNmcC1cdTAwM2VwYXJlbnRkcC1cdTAwM2VzZ190YWJsZXNpemU7XG4xODU4Olx0XHRpbnQgYmxrX3NpemUgPSBidWZmX3NpemUsIG9yZGVyO1xuMTg1OTpcdFx0Z2ZwX3QgZ2ZwX21hc2sgPSBHRlBfQVRPTUlDIHwgX19HRlBfQ09NUCB8IF9fR0ZQX05PV0FSTiB8IF9fR0ZQX1pFUk87XG4xODYwOlx0XG4xODYxOlx0XHRpZiAoYmxrX3NpemUgXHUwMDNjIDApXG4xODYyOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuMTg2MzpcdFx0aWYgKDAgPT0gYmxrX3NpemUpXG4xODY0Olx0XHRcdCYjNDM7JiM0MztibGtfc2l6ZTtcdC8qIGRvbiYjMzk7dCBrbm93IHdoeSAqL1xuMTg2NTpcdFx0Lyogcm91bmQgcmVxdWVzdCB1cCB0byBuZXh0IGhpZ2hlc3QgU0dfU0VDVE9SX1NaIGJ5dGUgYm91bmRhcnkgKi9cbjE4NjY6XHRcdGJsa19zaXplID0gQUxJR04oYmxrX3NpemUsIFNHX1NFQ1RPUl9TWik7XG4xODY3Olx0XHRTQ1NJX0xPR19USU1FT1VUKDQsIHNnX3ByaW50ayhLRVJOX0lORk8sIHNmcC1cdTAwM2VwYXJlbnRkcCxcbjE4Njg6XHRcdFx0XCYjMzQ7c2dfYnVpbGRfaW5kaXJlY3Q6IGJ1ZmZfc2l6ZT0lZCwgYmxrX3NpemU9JWRcXG5cJiMzNDssXG4xODY5Olx0XHRcdGJ1ZmZfc2l6ZSwgYmxrX3NpemUpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE5NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZywgcGlja2luZyB1cCBmcm9tIGxpbmUgMTkxMCBvbndhcmRzIHdpdGhpbiBgc2dfYnVpbGRfaW5kaXJlY3RgOgoKKipFeGFtaW5pbmcgdGhlIFRhaWwgRW5kIG9mIHNnX2J1aWxkX2luZGlyZWN0KioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGJhY2sgaW50byBgc2dfYnVpbGRfaW5kaXJlY3RgLCBzcGVjaWZpY2FsbHkgZnJvbSBsaW5lIDE5MTAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhpcyBmdW5jdGlvbiBjb25jbHVkZXMgaXRzIHdvcmsuIEkgcmVtZW1iZXIgdGhlIGNvcmUgb2YgaXQgaXMgc2V0dGluZyB1cCB0aGUgaW5kaXJlY3QgYnVmZmVyLCBidXQgdGhlIGRldGFpbHMgb2YgdGhlIGZpbmFsIHN0ZXBzIGFyZSBhIGJpdCBoYXp5LiBJJiMzOTttIGZvY3VzaW5nIG9uIHdoYXQgaGFwcGVucyAqYWZ0ZXIqIHRoZSBtYWluIGJ1ZmZlciBzZXR1cCwgY2hlY2tpbmcgZm9yIGFueSBlZGdlIGNhc2VzLCBlcnJvciBoYW5kbGluZywgb3IgY2xlYW51cCBwcm9jZWR1cmVzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB3aGVyZSB0aGUgZnVuY3Rpb24gcmV0dXJucywgd2hhdCB2YWx1ZXMgaXQmIzM5O3MgcmV0dXJuaW5nLCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zLiBBcmUgdGhlcmUgYW55IGZpbmFsIGNoZWNrcyBvciBzYW5pdHkgdmFsaWRhdGlvbnMgaGFwcGVuaW5nIGJlZm9yZSB0aGUgZGF0YSBpcyBoYW5kZWQgb2ZmPyBEb2VzIGl0IHJldHVybiBhIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBjb2RlPyBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IHRoaXMgaXMgd2hlcmUgYW55IGZpbmFsIHJlc291cmNlIG1hbmFnZW1lbnQgaGFwcGVucyBhcyB3ZWxsLCBtYXliZSBmcmVlaW5nIGFsbG9jYXRlZCBtZW1vcnkgb3IgcmVsZWFzaW5nIGxvY2tzIGlmIG5lY2Vzc2FyeS4gSXQmIzM5O3MgdGhlIGNyaXRpY2FsIGNsb3Npbmcgc3RhdGVtZW50LCBhbmQgdW5kZXJzdGFuZGluZyBpdCBpcyB2aXRhbCBmb3IgZW5zdXJpbmcgdGhlIHJvYnVzdG5lc3Mgb2YgdGhpcyBzeXN0ZW0uIEkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGhvdyB0byBkZWFsIHdpdGggdGhlIHJlc3VsdHMsIHNvIEkgY2FuIGVuc3VyZSBwcm9wZXIgb3BlcmF0aW9uIGluIGEgbGFyZ2VyIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpL3NnLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE5MTA6XHRcdH1cdFx0LyogZW5kIG9mIGZvciBsb29wICovXG4xOTExOlx0XG4xOTEyOlx0XHRzY2hwLVx1MDAzZXBhZ2Vfb3JkZXIgPSBvcmRlcjtcbjE5MTM6XHRcdHNjaHAtXHUwMDNla191c2Vfc2cgPSBrO1xuMTkxNDpcdFx0U0NTSV9MT0dfVElNRU9VVCg1LCBzZ19wcmludGsoS0VSTl9JTkZPLCBzZnAtXHUwMDNlcGFyZW50ZHAsXG4xOTE1Olx0XHRcdFx0IFwmIzM0O3NnX2J1aWxkX2luZGlyZWN0OiBrX3VzZV9zZz0lZCwgcmVtX3N6PSVkXFxuXCYjMzQ7LFxuMTkxNjpcdFx0XHRcdCBrLCByZW1fc3opKTtcbjE5MTc6XHRcbjE5MTg6XHRcdHNjaHAtXHUwMDNlYnVmZmxlbiA9IGJsa19zaXplO1xuMTkxOTpcdFx0aWYgKHJlbV9zeiBcdTAwM2UgMClcdC8qIG11c3QgaGF2ZSBmYWlsZWQgKi9cbjE5MjA6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xOTIxOlx0XHRyZXR1cm4gMDtcbjE5MjI6XHRvdXQ6XG4xOTIzOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBrOyBpJiM0MzsmIzQzOylcbjE5MjQ6XHRcdFx0X19mcmVlX3BhZ2VzKHNjaHAtXHUwMDNlcGFnZXNbaV0sIG9yZGVyKTtcbjE5MjU6XHRcbjE5MjY6XHRcdGlmICgtLW9yZGVyIFx1MDAzZT0gMClcbjE5Mjc6XHRcdFx0Z290byByZXRyeTtcbjE5Mjg6XHRcbjE5Mjk6XHRcdHJldHVybiAtRU5PTUVNO1xuMTkzMDpcdH1cbjE5MzE6XHRcbjE5MzI6XHRzdGF0aWMgdm9pZFxuMTkzMzpcdHNnX3JlbW92ZV9zY2F0KFNnX2ZkICogc2ZwLCBTZ19zY2F0dGVyX2hvbGQgKiBzY2hwKVxuMTkzNDpcdHtcbjE5MzU6XHRcdFNDU0lfTE9HX1RJTUVPVVQoNCwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc2ZwLVx1MDAzZXBhcmVudGRwLFxuMTkzNjpcdFx0XHRcdCBcJiMzNDtzZ19yZW1vdmVfc2NhdDoga191c2Vfc2c9JWRcXG5cJiMzNDssIHNjaHAtXHUwMDNla191c2Vfc2cpKTtcbjE5Mzc6XHRcdGlmIChzY2hwLVx1MDAzZXBhZ2VzIFx1MDAyNlx1MDAyNiBzY2hwLVx1MDAzZXNnbGlzdF9sZW4gXHUwMDNlIDApIHtcbjE5Mzg6XHRcdFx0aWYgKCFzY2hwLVx1MDAzZWRpb19pbl91c2UpIHtcbjE5Mzk6XHRcdFx0XHRpbnQgaztcbjE5NDA6XHRcbjE5NDE6XHRcdFx0XHRmb3IgKGsgPSAwOyBrIFx1MDAzYyBzY2hwLVx1MDAzZWtfdXNlX3NnIFx1MDAyNlx1MDAyNiBzY2hwLVx1MDAzZXBhZ2VzW2tdOyBrJiM0MzsmIzQzOykge1xuMTk0MjpcdFx0XHRcdFx0U0NTSV9MT0dfVElNRU9VVCg1LFxuMTk0MzpcdFx0XHRcdFx0XHRzZ19wcmludGsoS0VSTl9JTkZPLCBzZnAtXHUwMDNlcGFyZW50ZHAsXG4xOTQ0Olx0XHRcdFx0XHRcdFwmIzM0O3NnX3JlbW92ZV9zY2F0OiBrPSVkLCBwZz0weCVwXFxuXCYjMzQ7LFxuMTk0NTpcdFx0XHRcdFx0XHRrLCBzY2hwLVx1MDAzZXBhZ2VzW2tdKSk7XG4xOTQ2Olx0XHRcdFx0XHRfX2ZyZWVfcGFnZXMoc2NocC1cdTAwM2VwYWdlc1trXSwgc2NocC1cdTAwM2VwYWdlX29yZGVyKTtcbjE5NDc6XHRcdFx0XHR9XG4xOTQ4Olx0XG4xOTQ5Olx0XHRcdFx0a2ZyZWUoc2NocC1cdTAwM2VwYWdlcyk7XG4xOTUwOlx0XHRcdH1cbjE5NTE6XHRcdH1cbjE5NTI6XHRcdG1lbXNldChzY2hwLCAwLCBzaXplb2YgKCpzY2hwKSk7XG4xOTUzOlx0fVxuMTk1NDpcdFxuMTk1NTpcdHN0YXRpYyBpbnRcbjE5NTY6XHRzZ19yZWFkX294ZmVyKFNnX3JlcXVlc3QgKiBzcnAsIGNoYXIgX191c2VyICpvdXRwLCBpbnQgbnVtX3JlYWRfeGZlcilcbjE5NTc6XHR7XG4xOTU4Olx0XHRTZ19zY2F0dGVyX2hvbGQgKnNjaHAgPSBcdTAwMjZzcnAtXHUwMDNlZGF0YTtcbjE5NTk6XHRcdGludCBrLCBudW07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMjQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgT3JpZ2luIGFuZCBVc2FnZSBvZiBgc2NhdHRlcl9lbGVtX3N6YCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBkZXRhaWxzIHN1cnJvdW5kaW5nIGBzY2F0dGVyX2VsZW1fc3pgLiBNeSBpbml0aWFsIGZvY3VzIGlzIHRvIHRyYWNlIGl0cyBwcm92ZW5hbmNlIGFuZCB1bmRlcnN0YW5kIGl0cyBleGFjdCBkZWZpbml0aW9uLiBJIG5lZWQgdG8ga25vdyB3aGVyZSB0aGlzIHZhcmlhYmxlIGlzIGRlY2xhcmVkLCBpbml0aWFsaXplZCwgYW5kLCBjcml0aWNhbGx5LCBob3cgaXQmIzM5O3MgdWx0aW1hdGVseSB1c2VkIHdpdGhpbiB0aGUgY29kZS4gQ29udGV4dCBpcyBraW5nLCBhbmQga25vd2luZyB0aGUgc2NvcGUgYW5kIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgd2lsbCBiZSBjcnVjaWFsIGZvciBhIHRob3JvdWdoIGdyYXNwIG9mIGl0cyBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IGFueSBpbmNsdWRlIGZpbGVzLCBmdW5jdGlvbiBjYWxscywgYW5kIGFzc2lnbm1lbnRzIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLiBNeSBnb2FsIGlzIGEgZ3JhbnVsYXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW50ZW5kZWQgc2VtYW50aWNzIG9mIGBzY2F0dGVyX2VsZW1fc3pgIGluIHRoZSBncmVhdGVyIHN5c3RlbSBhcmNoaXRlY3R1cmUgYW5kIGhvdyBpdCBtaWdodCBpbXBhY3QgcmVzb3VyY2UgdXRpbGl6YXRpb24gb3IgcGVyZm9ybWFuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NjYXR0ZXJfZWxlbV9zeiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvc2NzaS9zZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvc2NzaS9zZy5jPTkyPXN0YXRpYyBpbnQgc2dfYWxsb3dfZGlvID0gU0dfQUxMT1dfRElPX0RFRjtcbmRyaXZlcnMvc2NzaS9zZy5jLTkzLVxuZHJpdmVycy9zY3NpL3NnLmM6OTQ6c3RhdGljIGludCBzY2F0dGVyX2VsZW1fc3ogPSBTR19TQ0FUVEVSX1NaO1xuZHJpdmVycy9zY3NpL3NnLmM6OTU6c3RhdGljIGludCBzY2F0dGVyX2VsZW1fc3pfcHJldiA9IFNHX1NDQVRURVJfU1o7XG5kcml2ZXJzL3Njc2kvc2cuYy05Ni1cbi0tXG5kcml2ZXJzL3Njc2kvc2cuYz0xNTkwPXNnX3JlbW92ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqY2xfZGV2KVxuLS1cbmRyaXZlcnMvc2NzaS9zZy5jLTE2MjMtXG5kcml2ZXJzL3Njc2kvc2cuYzoxNjI0Om1vZHVsZV9wYXJhbV9uYW1lZChzY2F0dGVyX2VsZW1fc3osIHNjYXR0ZXJfZWxlbV9zeiwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7XG5kcml2ZXJzL3Njc2kvc2cuYy0xNjI1LW1vZHVsZV9wYXJhbV9uYW1lZChhbGxvd19kaW8sIHNnX2FsbG93X2RpbywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7XG4tLVxuZHJpdmVycy9zY3NpL3NnLmM9MTY1OD1NT0RVTEVfQUxJQVNfQ0hBUkRFVl9NQUpPUihTQ1NJX0dFTkVSSUNfTUFKT1IpO1xuZHJpdmVycy9zY3NpL3NnLmMtMTY1OS1cbmRyaXZlcnMvc2NzaS9zZy5jOjE2NjA6TU9EVUxFX1BBUk1fREVTQyhzY2F0dGVyX2VsZW1fc3osIFwmIzM0O3NjYXR0ZXIgZ2F0aGVyIGVsZW1lbnQgXCYjMzQ7XG5kcml2ZXJzL3Njc2kvc2cuYy0xNjYxLSAgICAgICAgICAgICAgICBcJiMzNDtzaXplIChkZWZhdWx0OiBtYXgoU0dfU0NBVFRFUl9TWiwgUEFHRV9TSVpFKSlcJiMzNDspO1xuLS1cbmRyaXZlcnMvc2NzaS9zZy5jPTE2NjY9aW5pdF9zZyh2b2lkKVxuLS1cbmRyaXZlcnMvc2NzaS9zZy5jLTE2NjktXG5kcml2ZXJzL3Njc2kvc2cuYzoxNjcwOlx0aWYgKHNjYXR0ZXJfZWxlbV9zeiBcdTAwM2MgUEFHRV9TSVpFKSB7XG5kcml2ZXJzL3Njc2kvc2cuYzoxNjcxOlx0XHRzY2F0dGVyX2VsZW1fc3ogPSBQQUdFX1NJWkU7XG5kcml2ZXJzL3Njc2kvc2cuYzoxNjcyOlx0XHRzY2F0dGVyX2VsZW1fc3pfcHJldiA9IHNjYXR0ZXJfZWxlbV9zejtcbmRyaXZlcnMvc2NzaS9zZy5jLTE2NzMtXHR9XG4tLVxuZHJpdmVycy9zY3NpL3NnLmM9MTg1ND1zZ19idWlsZF9pbmRpcmVjdChTZ19zY2F0dGVyX2hvbGQgKiBzY2hwLCBTZ19mZCAqIHNmcCwgaW50IGJ1ZmZfc2l6ZSlcbi0tXG5kcml2ZXJzL3Njc2kvc2cuYy0xODc1LVxuZHJpdmVycy9zY3NpL3NnLmM6MTg3NjpcdG51bSA9IHNjYXR0ZXJfZWxlbV9zejtcbmRyaXZlcnMvc2NzaS9zZy5jOjE4Nzc6XHRpZiAodW5saWtlbHkobnVtICE9IHNjYXR0ZXJfZWxlbV9zel9wcmV2KSkge1xuZHJpdmVycy9zY3NpL3NnLmMtMTg3OC1cdFx0aWYgKG51bSBcdTAwM2MgKGludClQQUdFX1NJWkUpIHtcbmRyaXZlcnMvc2NzaS9zZy5jOjE4Nzk6XHRcdFx0c2NhdHRlcl9lbGVtX3N6ID0gUEFHRV9TSVpFO1xuZHJpdmVycy9zY3NpL3NnLmM6MTg4MDpcdFx0XHRzY2F0dGVyX2VsZW1fc3pfcHJldiA9IFBBR0VfU0laRTtcbmRyaXZlcnMvc2NzaS9zZy5jLTE4ODEtXHRcdFx0bnVtID0gUEFHRV9TSVpFO1xuZHJpdmVycy9zY3NpL3NnLmMtMTg4Mi1cdFx0fSBlbHNlXG5kcml2ZXJzL3Njc2kvc2cuYzoxODgzOlx0XHRcdHNjYXR0ZXJfZWxlbV9zel9wcmV2ID0gbnVtO1xuZHJpdmVycy9zY3NpL3NnLmMtMTg4NC1cdH1cbi0tXG5kcml2ZXJzL3Njc2kvc2cuYy0xODkyLVxuZHJpdmVycy9zY3NpL3NnLmM6MTg5MzpcdFx0bnVtID0gKHJlbV9zeiBcdTAwM2Ugc2NhdHRlcl9lbGVtX3N6X3ByZXYpID9cbmRyaXZlcnMvc2NzaS9zZy5jOjE4OTQ6XHRcdFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgOiByZW1fc3o7XG5kcml2ZXJzL3Njc2kvc2cuYy0xODk1LVxuLS1cbmRyaXZlcnMvc2NzaS9zZy5jLTE4OTktXG5kcml2ZXJzL3Njc2kvc2cuYzoxOTAwOlx0XHRpZiAobnVtID09IHNjYXR0ZXJfZWxlbV9zel9wcmV2KSB7XG5kcml2ZXJzL3Njc2kvc2cuYzoxOTAxOlx0XHRcdGlmICh1bmxpa2VseShyZXRfc3ogXHUwMDNlIHNjYXR0ZXJfZWxlbV9zel9wcmV2KSkge1xuZHJpdmVycy9zY3NpL3NnLmM6MTkwMjpcdFx0XHRcdHNjYXR0ZXJfZWxlbV9zeiA9IHJldF9zejtcbmRyaXZlcnMvc2NzaS9zZy5jOjE5MDM6XHRcdFx0XHRzY2F0dGVyX2VsZW1fc3pfcHJldiA9IHJldF9zejtcbmRyaXZlcnMvc2NzaS9zZy5jLTE5MDQtXHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTk3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNzA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBJbnRlZ2VyIE92ZXJmbG93IGluIGBkcml2ZXJzL3Njc2kvc2cuY2AqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGdpdCBjb21taXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB2dWxuZXJhYmlsaXR5IG9yIGJ1ZyBpdCBhZGRyZXNzZXMuIFNlZW1zIHdlIGFyZSBpbiBgZHJpdmVycy9zY3NpL3NnLmNgLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUgc2NhdHRlci1nYXRoZXIgbGlzdCBoYW5kbGluZy4KClJpZ2h0LCB0aGUga2V5IHNlY3Rpb24gaXMgdGhlIGNvbXBhcmlzb24gaW52b2x2aW5nIGBzY2F0dGVyX2VsZW1fc3pgIGFuZCBgUEFHRV9TSVpFYC4gQmVmb3JlIHRoZSBwYXRjaCwgdGhlIGNvZGUgd2FzIHN1c2NlcHRpYmxlIHRvIGFuIGludGVnZXIgb3ZlcmZsb3csIHBhcnRpY3VsYXJseSBpZiBhIHJvb3QgdXNlciB3YXMgYWJsZSB0byBtb2RpZnkgYHNjYXR0ZXJfZWxlbV9zemAgd2hpY2ggaXMgYSBtb2R1bGUgcGFyYW1ldGVyLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGF0IGlmIGEgbWFsaWNpb3VzIHZhbHVlIGxpa2UgYSBsYXJnZSBuZWdhdGl2ZSBudW1iZXIsIG9yIGEgc21hbGwgbnVtYmVyIGxlc3MgdGhhbiBgUEFHRV9TSVpFYCBsaWtlIDAsIGNvdWxkIGJlIHdyaXR0ZW4gdG8gYHNjYXR0ZXJfZWxlbV9zemAuCgpUaGUgY29yZSBpc3N1ZSBpcyBob3cgdGhlIHNpZ25lZCBpbnRlZ2VyIGBudW1gIGlzIGNvbXBhcmVkIHdpdGggdGhlIHVuc2lnbmVkIGBQQUdFX1NJWkVgLiBUaGUgb3JpZ2luYWwgYGlmIChudW0gJmx0OyBQQUdFX1NJWkUpYCB3b3VsZCBwcm9tb3RlIGEgbmVnYXRpdmUgYG51bWAgdG8gYW4gdW5zaWduZWQgbG9uZy4gIFNvIGlmIGBudW1gIHdhcyAtMSwgdGhlIGNvbXBhcmlzb24gd291bGQgZWZmZWN0aXZlbHkgYmVjb21lICBgMHhGRkZGRkZGRkZGRkZGRkZGVUwgJmx0OyBQQUdFX1NJWkVgLCB3aGljaCBpcyBhbHdheXMgZmFsc2UsIHNraXBwaW5nIHRoZSBpbnRlbmRlZCByZXNpemUgYW5kIGFsbG9jYXRpb24sIGFuZCBwb3RlbnRpYWxseSBjYXVzaW5nIGFuIHVuZGVmaW5lZCBiZWhhdmlvciBvbiBgZ2V0X29yZGVyKG51bSlgLiBDb252ZXJzZWx5LCBpZiBgbnVtYCB3YXMgYSB2YWx1ZSBsaWtlIDEwMCwgdGhlIGNvZGUgd291bGQgcHJvY2VlZCB0byBgc2NhdHRlcl9lbGVtX3N6ID0gUEFHRV9TSVpFYCwgYnV0IGBudW1gIHdvdWxkIG5vdCBiZSB1cGRhdGVkISBTdWJzZXF1ZW50IG9wZXJhdGlvbnMgd2l0aCB0aGUgb3JpZ2luYWwgc21hbGxlciBgbnVtYCBjb3VsZCBzdGlsbCBjYXVzZSBwcm9ibGVtcy4KClRoaXMgY291bGQgbGVhZCB0byB1c2luZyBhIG5lZ2F0aXZlIHZhbHVlIGluIGBnZXRfb3JkZXIoKWAsIHJlc3VsdGluZyBpbiBlaXRoZXIgYSBodWdlIG9yZGVyIHZhbHVlIG9yIGFuIHVuZGVmaW5lZCBzaGlmdCBpbiBgcmV0X3N6ID0gMSAmbHQ7Jmx0OyAoUEFHRV9TSElGVCAmIzQzOyBvcmRlcik7YC4gVGhpcyBjb3VsZCBjYXVzZSBhbGwgc29ydHMgb2YgbWVtb3J5IGNvcnJ1cHRpb24sIGluY2x1ZGluZyB1bmRlZmluZWQgYmVoYXZpb3Igb3IgY3Jhc2ggd2l0aCBwYWdlIGFsbG9jYXRpb24gd2FybmluZ3MuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgbWVtb3J5IHNhZmV0eS4gIExldCYjMzk7cyBjb25zaWRlciB0aGF0IHRoZSBjb2RlICpzaG91bGQqIGJlIHplcm8taW5pdGlhbGl6aW5nIGFueSBhbGxvY2F0ZWQgbWVtb3J5LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgdXNlcyBvZiBgc2NocC0mZ3Q7cGFnZXNgIGFuZCB0aGUgYWxsb2NhdGlvbi4gSSBzZWUgYSBgZ2ZwX21hc2tgIG9mIGBHRlBfQVRPTUlDIHwgX19HRlBfQ09NUCB8IF9fR0ZQX05PV0FSTiB8IF9fR0ZQX1pFUk9gLCBhbmQgYWxzbyBgc2NocC0mZ3Q7cGFnZXMgPSBremFsbG9jYC4gTG9va3MgbGlrZSBpdCYjMzk7cyB6ZXJvLWluaXRpYWxpemVkIGR1cmluZyBhbGxvY2F0aW9uIGluIGBzZ19idWlsZF9pbmRpcmVjdGAuICBJJiMzOTtsbCBzdGlsbCB2ZXJpZnkgYWxsIHJlYWQvd3JpdGUgYWNjZXNzZXMgdG8gdGhhdCBtZW1vcnksIGp1c3QgdG8gYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NnX2J1aWxkX2luZGlyZWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpL3NnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zY3NpL3NnLmM9MTgzPXN0YXRpYyBpbnQgc2dfZmluaXNoX3JlbV9yZXEoU2dfcmVxdWVzdCAqIHNycCk7XG5kcml2ZXJzL3Njc2kvc2cuYzoxODQ6c3RhdGljIGludCBzZ19idWlsZF9pbmRpcmVjdChTZ19zY2F0dGVyX2hvbGQgKiBzY2hwLCBTZ19mZCAqIHNmcCwgaW50IGJ1ZmZfc2l6ZSk7XG5kcml2ZXJzL3Njc2kvc2cuYy0xODUtc3RhdGljIHNzaXplX3Qgc2dfbmV3X3JlYWQoU2dfZmQgKiBzZnAsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCxcbi0tXG5kcml2ZXJzL3Njc2kvc2cuYz0xNzExPXNnX3N0YXJ0X3JlcShTZ19yZXF1ZXN0ICpzcnAsIHVuc2lnbmVkIGNoYXIgKmNtZClcbi0tXG5kcml2ZXJzL3Njc2kvc2cuYy0xNzgyLVx0XHR9IGVsc2Uge1xuZHJpdmVycy9zY3NpL3NnLmM6MTc4MzpcdFx0XHRyZXMgPSBzZ19idWlsZF9pbmRpcmVjdChyZXFfc2NocCwgc2ZwLCBkeGZlcl9sZW4pO1xuZHJpdmVycy9zY3NpL3NnLmMtMTc4NC1cdFx0XHRpZiAocmVzKSB7XG4tLVxuZHJpdmVycy9zY3NpL3NnLmM9MTg1Mz1zdGF0aWMgaW50XG5kcml2ZXJzL3Njc2kvc2cuYzoxODU0OnNnX2J1aWxkX2luZGlyZWN0KFNnX3NjYXR0ZXJfaG9sZCAqIHNjaHAsIFNnX2ZkICogc2ZwLCBpbnQgYnVmZl9zaXplKVxuZHJpdmVycy9zY3NpL3NnLmMtMTg1NS17XG4tLVxuZHJpdmVycy9zY3NpL3NnLmMtMTg2Ny1cdFNDU0lfTE9HX1RJTUVPVVQoNCwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc2ZwLVx1MDAzZXBhcmVudGRwLFxuZHJpdmVycy9zY3NpL3NnLmM6MTg2ODpcdFx0XCYjMzQ7c2dfYnVpbGRfaW5kaXJlY3Q6IGJ1ZmZfc2l6ZT0lZCwgYmxrX3NpemU9JWRcXG5cJiMzNDssXG5kcml2ZXJzL3Njc2kvc2cuYy0xODY5LVx0XHRidWZmX3NpemUsIGJsa19zaXplKSk7XG4tLVxuZHJpdmVycy9zY3NpL3NnLmMtMTkwNy1cdFx0U0NTSV9MT0dfVElNRU9VVCg1LCBzZ19wcmludGsoS0VSTl9JTkZPLCBzZnAtXHUwMDNlcGFyZW50ZHAsXG5kcml2ZXJzL3Njc2kvc2cuYzoxOTA4Olx0XHRcdFx0IFwmIzM0O3NnX2J1aWxkX2luZGlyZWN0OiBrPSVkLCBudW09JWQsIHJldF9zej0lZFxcblwmIzM0OyxcbmRyaXZlcnMvc2NzaS9zZy5jLTE5MDktXHRcdFx0XHQgaywgbnVtLCByZXRfc3opKTtcbi0tXG5kcml2ZXJzL3Njc2kvc2cuYy0xOTE0LVx0U0NTSV9MT0dfVElNRU9VVCg1LCBzZ19wcmludGsoS0VSTl9JTkZPLCBzZnAtXHUwMDNlcGFyZW50ZHAsXG5kcml2ZXJzL3Njc2kvc2cuYzoxOTE1Olx0XHRcdCBcJiMzNDtzZ19idWlsZF9pbmRpcmVjdDoga191c2Vfc2c9JWQsIHJlbV9zej0lZFxcblwmIzM0OyxcbmRyaXZlcnMvc2NzaS9zZy5jLTE5MTYtXHRcdFx0IGssIHJlbV9zeikpO1xuLS1cbmRyaXZlcnMvc2NzaS9zZy5jPTE5ODk9c2dfYnVpbGRfcmVzZXJ2ZShTZ19mZCAqIHNmcCwgaW50IHJlcV9zaXplKVxuLS1cbmRyaXZlcnMvc2NzaS9zZy5jLTE5OTctXHRcdFx0cmVxX3NpemUgPSBQQUdFX1NJWkU7XG5kcml2ZXJzL3Njc2kvc2cuYzoxOTk4Olx0XHRpZiAoMCA9PSBzZ19idWlsZF9pbmRpcmVjdChzY2hwLCBzZnAsIHJlcV9zaXplKSlcbmRyaXZlcnMvc2NzaS9zZy5jLTE5OTktXHRcdFx0cmV0dXJuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAwODo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTk5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEluZGlyZWN0IFNjYXR0ZXIvR2F0aGVyIEJ1ZmZlcnMgaW4gYHNnLmNgKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgc2cuY2AgZmlsZSBhbmQgdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIG9mIGluZGlyZWN0IHNjYXR0ZXIvZ2F0aGVyIGJ1ZmZlcnMuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyBjZW50ZXJlZCBhcm91bmQgdGhlIGludGVyYWN0aW9uIHdpdGggdXNlciBzcGFjZSDigJMgd2hlcmUgYXJlIHRoZXNlIGRhdGEgdHJhbnNmZXJzIGhhcHBlbmluZz8gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBjYWxscyB0aGF0IG1hbmFnZSB0aGUgcGFnZSB0cmFuc2ZlcnMgdG8gYW5kIGZyb20gdXNlciBzcGFjZS4gSSYjMzk7bGwgbmVlZCB0byBsb2NhdGUgdGhlIGluc3RhbmNlcyBvZiBlaXRoZXIgYGNvcHlfdG9fdXNlcmAgb3IgdGhlIGBzZ19yZWFkX294ZmVyYCBmdW5jdGlvbnMgd2l0aGluIHRoZSBgZHJpdmVycy9zY3NpL3NnLmNgIGRpcmVjdG9yeS4gVGhpcyB3aWxsIHNoZWQgbGlnaHQgb24gdGhlIG1lY2hhbmljcyBvZiBob3cgdGhpcyBoYXBwZW5zLiBJJiMzOTttIGtlZW4gdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgcG9pbnRzIHdoZXJlIHRoaXMgaGFwcGVucywgYW5kIGhvdyBpdCBpcyBwcm90ZWN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NnX3JlYWRfb3hmZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvc2cuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvc2cuYz0xOTA9c3RhdGljIGludCBzZ19jb21tb25fd3JpdGUoU2dfZmQgKiBzZnAsIFNnX3JlcXVlc3QgKiBzcnAsXG5kcml2ZXJzL3Njc2kvc2cuYy0xOTEtXHRcdFx0ICAgdW5zaWduZWQgY2hhciAqY21uZCwgaW50IHRpbWVvdXQsIGludCBibG9ja2luZyk7XG5kcml2ZXJzL3Njc2kvc2cuYzoxOTI6c3RhdGljIGludCBzZ19yZWFkX294ZmVyKFNnX3JlcXVlc3QgKiBzcnAsIGNoYXIgX191c2VyICpvdXRwLCBpbnQgbnVtX3JlYWRfeGZlcik7XG5kcml2ZXJzL3Njc2kvc2cuYy0xOTMtc3RhdGljIHZvaWQgc2dfcmVtb3ZlX3NjYXQoU2dfZmQgKiBzZnAsIFNnX3NjYXR0ZXJfaG9sZCAqIHNjaHApO1xuLS1cbmRyaXZlcnMvc2NzaS9zZy5jPTQzOD1zZ19yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqIHBwb3MpXG4tLVxuZHJpdmVycy9zY3NpL3NnLmMtNTM4LVx0XHRpZiAoY291bnQgXHUwMDNlIFNaX1NHX0hFQURFUikge1xuZHJpdmVycy9zY3NpL3NnLmM6NTM5Olx0XHRcdGlmIChzZ19yZWFkX294ZmVyKHNycCwgYnVmLCBjb3VudCAtIFNaX1NHX0hFQURFUikpIHtcbmRyaXZlcnMvc2NzaS9zZy5jLTU0MC1cdFx0XHRcdHJldHZhbCA9IC1FRkFVTFQ7XG4tLVxuZHJpdmVycy9zY3NpL3NnLmM9MTk1NT1zdGF0aWMgaW50XG5kcml2ZXJzL3Njc2kvc2cuYzoxOTU2OnNnX3JlYWRfb3hmZXIoU2dfcmVxdWVzdCAqIHNycCwgY2hhciBfX3VzZXIgKm91dHAsIGludCBudW1fcmVhZF94ZmVyKVxuZHJpdmVycy9zY3NpL3NnLmMtMTk1Ny17XG4tLVxuZHJpdmVycy9zY3NpL3NnLmMtMTk2MS1cdFNDU0lfTE9HX1RJTUVPVVQoNCwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc3JwLVx1MDAzZXBhcmVudGZwLVx1MDAzZXBhcmVudGRwLFxuZHJpdmVycy9zY3NpL3NnLmM6MTk2MjpcdFx0XHQgXCYjMzQ7c2dfcmVhZF9veGZlcjogbnVtX3JlYWRfeGZlcj0lZFxcblwmIzM0OyxcbmRyaXZlcnMvc2NzaS9zZy5jLTE5NjMtXHRcdFx0IG51bV9yZWFkX3hmZXIpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTMyNgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHNnX3JlYWRfb3hmZXJgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBTQ1NJIGdlbmVyaWMgZHJpdmVycyBoYW5kbGUgdGhlIGBzZ19yZWFkX294ZmVyYCBmdW5jdGlvbi4gSSBrbm93IHRoaXMgaXMgYSBjb3JlIHBpZWNlIG9mIHRoZSBTQ1NJIGdlbmVyaWMgaW50ZXJmYWNlLCBsaWtlbHkgcmVsYXRlZCB0byByZWFkIG9wZXJhdGlvbnMgYW5kIGRhdGEgdHJhbnNmZXIsIHNvIGl0JiMzOTtzIHdvcnRoIGEgZGVlcCBkaXZlLiBJJiMzOTttIGhlYWRpbmcgdG8gYGRyaXZlcnMvc2NzaS9zZy5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDE5NTUuIFRoYXQmIzM5O3MgdXN1YWxseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuIEkgZXhwZWN0IHRvIGJlIGxvb2tpbmcgZm9yIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgaG93IHRoZSBkYXRhIHRyYW5zZmVyIGlzIGluaXRpYXRlZCwgYW5kIGFueSBlcnJvciBoYW5kbGluZyBvciBmbG93IGNvbnRyb2wgbWVjaGFuaXNtcyB0aGF0IGFyZSBpbiBwbGF5LiBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IHRoaXMgZnVuY3Rpb24gd2lsbCBiZSB0aGUgd29ya2hvcnNlIGZvciBoYW5kbGluZyB0aGUgYWN0dWFsIHJlYWQgb3BlcmF0aW9uIGFmdGVyIHRoZSBTQ1NJIGNvbW1hbmQgaGFzIGJlZW4gc2V0dXAuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZSwgcHJvYmFibHkgdXNpbmcgRE1BIG9yIG90aGVyIGRhdGEgdHJhbnNmZXIgbWVjaGFuaXNtcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3Njc2kvc2cuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5NTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTk1NTpcdHN0YXRpYyBpbnRcbjE5NTY6XHRzZ19yZWFkX294ZmVyKFNnX3JlcXVlc3QgKiBzcnAsIGNoYXIgX191c2VyICpvdXRwLCBpbnQgbnVtX3JlYWRfeGZlcilcbjE5NTc6XHR7XG4xOTU4Olx0XHRTZ19zY2F0dGVyX2hvbGQgKnNjaHAgPSBcdTAwMjZzcnAtXHUwMDNlZGF0YTtcbjE5NTk6XHRcdGludCBrLCBudW07XG4xOTYwOlx0XG4xOTYxOlx0XHRTQ1NJX0xPR19USU1FT1VUKDQsIHNnX3ByaW50ayhLRVJOX0lORk8sIHNycC1cdTAwM2VwYXJlbnRmcC1cdTAwM2VwYXJlbnRkcCxcbjE5NjI6XHRcdFx0XHQgXCYjMzQ7c2dfcmVhZF9veGZlcjogbnVtX3JlYWRfeGZlcj0lZFxcblwmIzM0OyxcbjE5NjM6XHRcdFx0XHQgbnVtX3JlYWRfeGZlcikpO1xuMTk2NDpcdFx0aWYgKCghb3V0cCkgfHwgKG51bV9yZWFkX3hmZXIgXHUwMDNjPSAwKSlcbjE5NjU6XHRcdFx0cmV0dXJuIDA7XG4xOTY2Olx0XG4xOTY3Olx0XHRudW0gPSAxIFx1MDAzY1x1MDAzYyAoUEFHRV9TSElGVCAmIzQzOyBzY2hwLVx1MDAzZXBhZ2Vfb3JkZXIpO1xuMTk2ODpcdFx0Zm9yIChrID0gMDsgayBcdTAwM2Mgc2NocC1cdTAwM2VrX3VzZV9zZyBcdTAwMjZcdTAwMjYgc2NocC1cdTAwM2VwYWdlc1trXTsgayYjNDM7JiM0MzspIHtcbjE5Njk6XHRcdFx0aWYgKG51bSBcdTAwM2UgbnVtX3JlYWRfeGZlcikge1xuMTk3MDpcdFx0XHRcdGlmIChjb3B5X3RvX3VzZXIob3V0cCwgcGFnZV9hZGRyZXNzKHNjaHAtXHUwMDNlcGFnZXNba10pLFxuMTk3MTpcdFx0XHRcdFx0XHQgICBudW1fcmVhZF94ZmVyKSlcbjE5NzI6XHRcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuMTk3MzpcdFx0XHRcdGJyZWFrO1xuMTk3NDpcdFx0XHR9IGVsc2Uge1xuMTk3NTpcdFx0XHRcdGlmIChjb3B5X3RvX3VzZXIob3V0cCwgcGFnZV9hZGRyZXNzKHNjaHAtXHUwMDNlcGFnZXNba10pLFxuMTk3NjpcdFx0XHRcdFx0XHQgICBudW0pKVxuMTk3NzpcdFx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4xOTc4Olx0XHRcdFx0bnVtX3JlYWRfeGZlciAtPSBudW07XG4xOTc5Olx0XHRcdFx0aWYgKG51bV9yZWFkX3hmZXIgXHUwMDNjPSAwKVxuMTk4MDpcdFx0XHRcdFx0YnJlYWs7XG4xOTgxOlx0XHRcdFx0b3V0cCAmIzQzOz0gbnVtO1xuMTk4MjpcdFx0XHR9XG4xOTgzOlx0XHR9XG4xOTg0Olx0XG4xOTg1Olx0XHRyZXR1cm4gMDtcbjE5ODY6XHR9XG4xOTg3Olx0XG4xOTg4Olx0c3RhdGljIHZvaWRcbjE5ODk6XHRzZ19idWlsZF9yZXNlcnZlKFNnX2ZkICogc2ZwLCBpbnQgcmVxX3NpemUpXG4xOTkwOlx0e1xuMTk5MTpcdFx0U2dfc2NhdHRlcl9ob2xkICpzY2hwID0gXHUwMDI2c2ZwLVx1MDAzZXJlc2VydmU7XG4xOTkyOlx0XG4xOTkzOlx0XHRTQ1NJX0xPR19USU1FT1VUKDQsIHNnX3ByaW50ayhLRVJOX0lORk8sIHNmcC1cdTAwM2VwYXJlbnRkcCxcbjE5OTQ6XHRcdFx0XHQgXCYjMzQ7c2dfYnVpbGRfcmVzZXJ2ZTogcmVxX3NpemU9JWRcXG5cJiMzNDssIHJlcV9zaXplKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDA4OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjY4CgkJCQkJCQlvdXRwdXQ6IDI3MQoJCQkJCQkJdGhvdWdodHM6IDE3OTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTRyBNb2R1bGUmIzM5O3MgU2NhdHRlci1HYXRoZXIgRWxlbWVudCBTaXplIEhhbmRsaW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIHRyeWluZyB0byByZXRyYWNlIHRoZSBjb21taXQgaGlzdG9yeSB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgY2hhbmdlIHdhcyBtYWRlIGluIHRoZSBrZXJuZWwuIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgc3RhbmRhcmQ6IEkgd2FudCB0byBmaW5kIHRoZSBjb21taXQgbWVzc2FnZSwgdGhlIGF1dGhvciwgYW5kIGFueSByZWxldmFudCBjb250ZXh0LiBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIGBnaXQgbG9nYCwgdGhlbiBjb25zaWRlciBgZ3JlcHBlcmAsIGFuZCBpZiB0aGF0IGRvZXNuJiMzOTt0IHlpZWxkIHJlc3VsdHMsIEkmIzM5O2xsIHN3aXRjaCB0byBkaXJlY3RseSBncmVwcGluZyB0aGUgY29tbWl0IG1lc3NhZ2VzLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIGNvZGUgaXRzZWxmLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaG93IGBzY2F0dGVyX2VsZW1fc3pgIGlzIHVzZWQgd2l0aGluIHRoZSBgZHJpdmVycy9zY3NpL3NnLmNgIG1vZHVsZS4gSSBzZWUgaXQgdXNlZCBpbiBgaW5pdF9zZ2AgYW5kIGBzZ19idWlsZF9pbmRpcmVjdGAuIE15IHRob3VnaHQgcHJvY2VzcyBpcyB0byBleGFtaW5lIHRoZXNlIGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZSBjaGFuZ2UuIAoKSW4gYGluaXRfc2dgLCB0aGUgY29kZSBjaGVja3MgaWYgYHNjYXR0ZXJfZWxlbV9zemAgaXMgbGVzcyB0aGFuIGBQQUdFX1NJWkVgLCBhbmQgaWYgc28sIGl0IHNldHMgaXQgdG8gYFBBR0VfU0laRWAuIFRoZSBuZXh0IHBpZWNlIG9mIGNvZGUgaXMgaW4gYHNnX2J1aWxkX2luZGlyZWN0YCwgd2hlcmUgaXQgYXBwZWFycyB0aGF0IHRoZSBjb3JlIGlzc3VlIGlzIHRoZSB0eXBlIG9mIGBzY2F0dGVyX2VsZW1fc3pgLgoKVGhlIGNvcmUgbG9naWMgcmV2b2x2ZXMgYXJvdW5kIHRoZSBjaGVjayBgbnVtICZsdDsgUEFHRV9TSVpFYC4gSSBzZWUgbm93IHRoYXQgYHNjYXR0ZXJfZWxlbV9zemAgaXMgYW4gaW50ZWdlciwgd2hpbGUgYFBBR0VfU0laRWAgaXMgYW4gdW5zaWduZWQgbG9uZy4gVGhpcyBpcyB0aGUgY3J1eCBvZiB0aGUgcHJvYmxlbSEgQyYjMzk7cyBpbnRlZ2VyIGNvbnZlcnNpb24gcnVsZXMgbWVhbiB0aGF0IGEgbmVnYXRpdmUgdmFsdWUgd3JpdHRlbiB0byBgc2NhdHRlcl9lbGVtX3N6YCB3aWxsIGNhdXNlIGNvbXBhcmlzb24gZmFpbHVyZXMuIEEgbmVnYXRpdmUgdmFsdWUgaXMgY29udmVydGVkIHRvIGEgdmVyeSBsYXJnZSB1bnNpZ25lZCBudW1iZXIgZHVyaW5nIGNvbXBhcmlzb24sIGFuZCB0aHVzIHRoZSBjb2RlIHdpbGwgYmVoYXZlIGluIHVuZXhwZWN0ZWQgd2F5cy4KClNwZWNpZmljYWxseSwgdGhlIGBudW0gJmx0OyBQQUdFX1NJWkVgIGNoZWNrIGNhbiBmYWlsIGlmIG51bSBpcyBuZWdhdGl2ZSwgb3IgaWYgbnVtIGlzIGEgc21hbGwgbnVtYmVyIGFuZCB0aGUgY29kZSB0aGVuIGdvZXMgb24gdG8gdXNlIHRoZSBgbnVtYCB2YXJpYWJsZSBpbiBgZ2V0X29yZGVyKClgIHdoaWNoIGlzIGludmFsaWQgZm9yIG5lZ2F0aXZlIG51bWJlcnMuCgpUaGlzIGxlYWRzIHRvIHVuZGVmaW5lZCBiZWhhdmlvci4gU3BlY2lmaWNhbGx5LCB0aGUgY2FsbCB0byBgZ2V0X29yZGVyYCB3aXRoIGFuIGludmFsaWQgaW5wdXQgb3IgdGhlIHNoaWZ0IHRoYXQgZm9sbG93cyB0aGUgYHJldF9zeiA9IDEgJmx0OyZsdDsgKFBBR0VfU0hJRlQgJiM0Mzsgb3JkZXIpYCBzdGF0ZW1lbnQuIEV2ZW4gYSBzbWFsbCBwb3NpdGl2ZSBudW1iZXIgY2FuIGNhdXNlIGEgcHJvYmxlbSBiZWNhdXNlIGBudW1gIGlzIG5vdCB1cGRhdGVkIGFmdGVyIHRoZSBjaGVjay4KClNvLCB0aGUgY3J1Y2lhbCBwYXJ0IGlzIHVuZGVyc3RhbmRpbmcgKndoeSogdGhpcyBpbnRlZ2VyIHNpZ25lZG5lc3MgYnVnIHdhcyBpbnRyb2R1Y2VkLCBhbmQgaG93IHRoZSBjaGFuZ2VzIGZpeCBpdC4gVGhlIHBhdGNoIGFkZHJlc3NlcyB0aGlzIGlzc3VlIGJ5IHBlcmZvcm1pbmcgYSBwcm9wZXIgc2lnbmVkIGNvbXBhcmlzb246IGBudW0gJmx0OyAoaW50KVBBR0VfU0laRWAuIFRoaXMgcHJldmVudHMgaW52YWxpZCBhbGxvY2F0aW9uIG9yZGVyIGNhbGN1bGF0aW9uIGJ5IGNvcnJlY3RpbmcgdGhlIGludGVnZXIgc2lnbmVkbmVzcyBidWcuCgpOb3csIHRoZSBuZXh0IHN0ZXAgaXMgdG8gZXZhbHVhdGUgd2hldGhlciB0aGlzIHBhdGNoIG5lY2Vzc2l0YXRlcyB0aGUgdXNlIG9mIEtNU0FOLiBNeSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjcml0ZXJpYSBmb3IgS01TQU4gaXMgcHJldHR5IHNvbGlkLiBJdCYjMzk7cyBub3QgYSBnZW5lcmFsIGRlYnVnZ2luZyB0b29sOyBpdCYjMzk7cyBzcGVjaWFsaXplZCBmb3IgZGV0ZWN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBUaGUgY3J1Y2lhbCBydWxlIGlzICYjMzQ7VEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwgTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4mIzM0OyBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBhbnkga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIGZpZWxkcyBtaWdodCBub3QgYmUgaW5pdGlhbGl6ZWQsIGNvbmRpdGlvbmFsIGxvZ2ljIHJlbHlpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHRoZSBhbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMgb3IgYWx0ZXJhdGlvbnMgdG8gYm91bmRzIGNoZWNrcy4KCk9rYXksIGxldCYjMzk7cyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3QgY2FyZWZ1bGx5LgoqICAgRG9lcyB0aGUgcGF0Y2ggdG91Y2ggYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGU/IE5vLgoqICAgRG9lcyB0aGUgcGF0Y2ggaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uIFRoZSBhbGxvY2F0ZWQgcGFnZXMgYXJlIHplcm9lZC4KKiAgIERvZXMgdGhlIHBhdGNoIGFsdGVyIGJvdW5kcyBjaGVja3Mgb3IgZGF0YSBsZW5ndGhzIGluIGEgd2F5IHRoYXQgYWxsb3dzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIGJlIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gY29uZGl0aW9uYWxzPyBOby4gVGhlIG1haW4gYnVnIGJlaW5nIGZpeGVkIGlzIGFuIGludGVnZXIgc2lnbmVkbmVzcyBpc3N1ZS4KClRoZXJlZm9yZSwgc2luY2UgdGhlIGNvZGUgZml4ZXMgYW4gaW50ZWdlciBzaWduZWRuZXNzIGJ1ZywgYW5kIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0dXJlcywgcGFkZGluZ3MsIG9yIGluZm8tbGVha3MgaW52b2x2ZWQsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiBUaGlzIHBhdGNoIGZvY3VzZXMgb24gcHJldmVudGluZyBpbnZhbGlkIG1lbW9yeSBhbGxvY2F0aW9uIG9yZGVyIGFuZCBkb2VzIG5vdCBjcmVhdGUgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgcmVsYXRlZCBpc3N1ZXMuIEhlbmNlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGZhbHNlLCBhbmQgSSBuZWVkIHRvIHdyaXRlIHRoaXMgZXhwbGFuYXRpb24gaW4gdGhlIHRvb2wgY2FsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMDg6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBzaWduZWRuZXNzIGlzc3VlIGluIGRyaXZlcnMvc2NzaS9zZy5jIChzZ19idWlsZF9pbmRpcmVjdCkuIFNwZWNpZmljYWxseSwgY29tcGFyaW5nIHRoZSBzaWduZWQgaW50ICYjMzk7bnVtJiMzOTsgdG8gdW5zaWduZWQgbG9uZyAmIzM5O1BBR0VfU0laRSYjMzk7IHJlc3VsdGVkIGluIHNpZ25lZC10by11bnNpZ25lZCB0eXBlIHByb21vdGlvbiwgYWxsb3dpbmcgbmVnYXRpdmUgdmFsdWVzIG9mIHRoZSAmIzM5O3NjYXR0ZXJfZWxlbV9zeiYjMzk7IG1vZHVsZSBwYXJhbWV0ZXIgdG8gYnlwYXNzIHRoZSBtaW5pbXVtIGJvdW5kIGNoZWNrIGFuZCBsZWFkIHRvIGludmFsaWQgcGFnZSBhbGxvY2F0aW9uIG9yZGVycyBhbmQgdW5kZWZpbmVkIHNoaWZ0IGJlaGF2aW9yLiBUaGUgcGF0Y2ggY2FzdHMgUEFHRV9TSVpFIHRvIGludCBhbmQgc2V0cyBudW0gPSBQQUdFX1NJWkUgd2hlbiBudW0gXHUwMDNjIChpbnQpUEFHRV9TSVpFLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OlxuMS4gJiMzOTtudW0mIzM5OyBhbmQgJiMzOTtzY2F0dGVyX2VsZW1fc3omIzM5OyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgdmFsdWVzLlxuMi4gVGhlIHNjYXR0ZXItZ2F0aGVyIGJ1ZmZlciBhbGxvY2F0aW9ucyBpbiBzZ19idWlsZF9pbmRpcmVjdCB1c2Uga3phbGxvYyBmb3IgdGhlIHBvaW50ZXIgYXJyYXkgYW5kIF9fR0ZQX1pFUk8gZm9yIHRoZSB1bmRlcmx5aW5nIHBhZ2UgYWxsb2NhdGlvbnMuXG4zLiBObyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIHN0YWNrIHZhcmlhYmxlcywgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCBidWZmZXJzIGNvcGllZCB0byB1c2Vyc3BhY2UgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC5cbkFueSBwb3RlbnRpYWwgaXNzdWVzIGZyb20gdGhlIGJ1ZyAoc3VjaCBhcyBpbnZhbGlkIGFsbG9jYXRpb24gb3JkZXJzIG9yIHNoaWZ0cykgZmFsbCB1bmRlciBzdGFuZGFyZCBVQlNBTi9LQVNBTiBkZXRlY3Rpb24gcmF0aGVyIHRoYW4gS01TQU4gdW5pbml0aWFsaXplZCBtZW1vcnkgdHJhY2tpbmcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIHNpZ25lZG5lc3MgaXNzdWUgaW4gZHJpdmVycy9zY3NpL3NnLmMgKHNnX2J1aWxkX2luZGlyZWN0KS4gU3BlY2lmaWNhbGx5LCBjb21wYXJpbmcgdGhlIHNpZ25lZCBpbnQgJiMzOTtudW0mIzM5OyB0byB1bnNpZ25lZCBsb25nICYjMzk7UEFHRV9TSVpFJiMzOTsgcmVzdWx0ZWQgaW4gc2lnbmVkLXRvLXVuc2lnbmVkIHR5cGUgcHJvbW90aW9uLCBhbGxvd2luZyBuZWdhdGl2ZSB2YWx1ZXMgb2YgdGhlICYjMzk7c2NhdHRlcl9lbGVtX3N6JiMzOTsgbW9kdWxlIHBhcmFtZXRlciB0byBieXBhc3MgdGhlIG1pbmltdW0gYm91bmQgY2hlY2sgYW5kIGxlYWQgdG8gaW52YWxpZCBwYWdlIGFsbG9jYXRpb24gb3JkZXJzIGFuZCB1bmRlZmluZWQgc2hpZnQgYmVoYXZpb3IuIFRoZSBwYXRjaCBjYXN0cyBQQUdFX1NJWkUgdG8gaW50IGFuZCBzZXRzIG51bSA9IFBBR0VfU0laRSB3aGVuIG51bSBcdTAwM2MgKGludClQQUdFX1NJWkUuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnk6XG4xLiAmIzM5O251bSYjMzk7IGFuZCAmIzM5O3NjYXR0ZXJfZWxlbV9zeiYjMzk7IGFyZSBmdWxseSBpbml0aWFsaXplZCB2YWx1ZXMuXG4yLiBUaGUgc2NhdHRlci1nYXRoZXIgYnVmZmVyIGFsbG9jYXRpb25zIGluIHNnX2J1aWxkX2luZGlyZWN0IHVzZSBremFsbG9jIGZvciB0aGUgcG9pbnRlciBhcnJheSBhbmQgX19HRlBfWkVSTyBmb3IgdGhlIHVuZGVybHlpbmcgcGFnZSBhbGxvY2F0aW9ucy5cbjMuIE5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgc3RhY2sgdmFyaWFibGVzLCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgY29waWVkIHRvIHVzZXJzcGFjZSBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLlxuQW55IHBvdGVudGlhbCBpc3N1ZXMgZnJvbSB0aGUgYnVnIChzdWNoIGFzIGludmFsaWQgYWxsb2NhdGlvbiBvcmRlcnMgb3Igc2hpZnRzKSBmYWxsIHVuZGVyIHN0YW5kYXJkIFVCU0FOL0tBU0FOIGRldGVjdGlvbiByYXRoZXIgdGhhbiBLTVNBTiB1bmluaXRpYWxpemVkIG1lbW9yeSB0cmFja2luZy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDQ6MjQuMDE3Mjg4NzE3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkxOTYyMjA0OTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNIUl9ERVZfU0dcIixcbiAgICBcIlNDU0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZ19idWlsZF9pbmRpcmVjdFwiLFxuICAgIFwic2dfYnVpbGRfcmVzZXJ2ZVwiLFxuICAgIFwic2dfc3RhcnRfcmVxXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIHNpZ25lZG5lc3MgaXNzdWUgaW4gZHJpdmVycy9zY3NpL3NnLmMgKHNnX2J1aWxkX2luZGlyZWN0KS4gU3BlY2lmaWNhbGx5LCBjb21wYXJpbmcgdGhlIHNpZ25lZCBpbnQgJ251bScgdG8gdW5zaWduZWQgbG9uZyAnUEFHRV9TSVpFJyByZXN1bHRlZCBpbiBzaWduZWQtdG8tdW5zaWduZWQgdHlwZSBwcm9tb3Rpb24sIGFsbG93aW5nIG5lZ2F0aXZlIHZhbHVlcyBvZiB0aGUgJ3NjYXR0ZXJfZWxlbV9zeicgbW9kdWxlIHBhcmFtZXRlciB0byBieXBhc3MgdGhlIG1pbmltdW0gYm91bmQgY2hlY2sgYW5kIGxlYWQgdG8gaW52YWxpZCBwYWdlIGFsbG9jYXRpb24gb3JkZXJzIGFuZCB1bmRlZmluZWQgc2hpZnQgYmVoYXZpb3IuIFRoZSBwYXRjaCBjYXN0cyBQQUdFX1NJWkUgdG8gaW50IGFuZCBzZXRzIG51bSA9IFBBR0VfU0laRSB3aGVuIG51bSBcXHUwMDNjIChpbnQpUEFHRV9TSVpFLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnk6XFxuMS4gJ251bScgYW5kICdzY2F0dGVyX2VsZW1fc3onIGFyZSBmdWxseSBpbml0aWFsaXplZCB2YWx1ZXMuXFxuMi4gVGhlIHNjYXR0ZXItZ2F0aGVyIGJ1ZmZlciBhbGxvY2F0aW9ucyBpbiBzZ19idWlsZF9pbmRpcmVjdCB1c2Uga3phbGxvYyBmb3IgdGhlIHBvaW50ZXIgYXJyYXkgYW5kIF9fR0ZQX1pFUk8gZm9yIHRoZSB1bmRlcmx5aW5nIHBhZ2UgYWxsb2NhdGlvbnMuXFxuMy4gTm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBzdGFjayB2YXJpYWJsZXMsIHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBjb3BpZWQgdG8gdXNlcnNwYWNlIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuXFxuQW55IHBvdGVudGlhbCBpc3N1ZXMgZnJvbSB0aGUgYnVnIChzdWNoIGFzIGludmFsaWQgYWxsb2NhdGlvbiBvcmRlcnMgb3Igc2hpZnRzKSBmYWxsIHVuZGVyIHN0YW5kYXJkIFVCU0FOL0tBU0FOIGRldGVjdGlvbiByYXRoZXIgdGhhbiBLTVNBTiB1bmluaXRpYWxpemVkIG1lbW9yeSB0cmFja2luZy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzZ19idWlsZF9pbmRpcmVjdCgpIGluIHRoZSBTQ1NJIGdlbmVyaWMgKHNnKSBkcml2ZXIgdG8gcHJvcGVybHkgY2xhbXAgc2NhdHRlcl9lbGVtX3N6IHdoZW4gaXQgaXMgc21hbGxlciB0aGFuIFBBR0VfU0laRSBvciBuZWdhdGl2ZSAocHJldmVudGluZyBzaWduZWQgaW50ZWdlciBjb21wYXJpc29uIGlzc3VlcyBhbmQgaW52YWxpZCBwYWdlIG9yZGVycyBmb3IgZ2V0X29yZGVyKS4gVGhlIHNnIGRyaXZlciBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHdpdGggZW11bGF0ZWQgU0NTSSBkZXZpY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NDoyNC4wMTcyOTQ4MTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMzg1NDEyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQxMzUyOTQ4OWY2Y2NlNDI1MGYzNzU5ODczNmM2OWZlYmVmMzBiODhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgMTQgMDg6NDQ6MjMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NnLmMgYi9kcml2ZXJzL3Njc2kvc2cuY1xcbmluZGV4IDU0MDhmMDAyZTZjMDEuLjM5YzhlNTJmYTZmZjYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9zY3NpL3NnLmNcXG4rKysgYi9kcml2ZXJzL3Njc2kvc2cuY1xcbkBAIC0xODc1LDkgKzE4NzUsMTAgQEAgc2dfYnVpbGRfaW5kaXJlY3QoU2dfc2NhdHRlcl9ob2xkICogc2NocCwgU2dfZmQgKiBzZnAsIGludCBidWZmX3NpemUpXFxuIFxcbiBcXHRudW0gPSBzY2F0dGVyX2VsZW1fc3o7XFxuIFxcdGlmICh1bmxpa2VseShudW0gIT0gc2NhdHRlcl9lbGVtX3N6X3ByZXYpKSB7XFxuLVxcdFxcdGlmIChudW0gXFx1MDAzYyBQQUdFX1NJWkUpIHtcXG4rXFx0XFx0aWYgKG51bSBcXHUwMDNjIChpbnQpUEFHRV9TSVpFKSB7XFxuIFxcdFxcdFxcdHNjYXR0ZXJfZWxlbV9zeiA9IFBBR0VfU0laRTtcXG4gXFx0XFx0XFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBQQUdFX1NJWkU7XFxuK1xcdFxcdFxcdG51bSA9IFBBR0VfU0laRTtcXG4gXFx0XFx0fSBlbHNlXFxuIFxcdFxcdFxcdHNjYXR0ZXJfZWxlbV9zel9wcmV2ID0gbnVtO1xcbiBcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjQ0OjI0LjU1MTk1ODkxN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTUzOTk2MTI2MzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNIUl9ERVZfU0dcIixcbiAgICBcIlNDU0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZ19idWlsZF9pbmRpcmVjdFwiLFxuICAgIFwic2dfYnVpbGRfcmVzZXJ2ZVwiLFxuICAgIFwic2dfc3RhcnRfcmVxXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc2dfYnVpbGRfaW5kaXJlY3QoKSBpbiB0aGUgU0NTSSBnZW5lcmljIChzZykgZHJpdmVyIHRvIHByb3Blcmx5IGNsYW1wIHNjYXR0ZXJfZWxlbV9zeiB3aGVuIGl0IGlzIHNtYWxsZXIgdGhhbiBQQUdFX1NJWkUgb3IgbmVnYXRpdmUgKHByZXZlbnRpbmcgc2lnbmVkIGludGVnZXIgY29tcGFyaXNvbiBpc3N1ZXMgYW5kIGludmFsaWQgcGFnZSBvcmRlcnMgZm9yIGdldF9vcmRlcikuIFRoZSBzZyBkcml2ZXIgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB3aXRoIGVtdWxhdGVkIFNDU0kgZGV2aWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0MTM1Mjk0ODlmNmNjZTQyNTBmMzc1OTg3MzZjNjlmZWJlZjMwYjg4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMDg6NDQ6MjMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2cuYyBiL2RyaXZlcnMvc2NzaS9zZy5jXG5pbmRleCA1NDA4ZjAwMmU2YzAxLi4zOWM4ZTUyZmE2ZmY2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9zY3NpL3NnLmNcbisrKyBiL2RyaXZlcnMvc2NzaS9zZy5jXG5AQCAtMTg3NSw5ICsxODc1LDEwIEBAIHNnX2J1aWxkX2luZGlyZWN0KFNnX3NjYXR0ZXJfaG9sZCAqIHNjaHAsIFNnX2ZkICogc2ZwLCBpbnQgYnVmZl9zaXplKVxuIFxuIFx0bnVtID0gc2NhdHRlcl9lbGVtX3N6O1xuIFx0aWYgKHVubGlrZWx5KG51bSAhPSBzY2F0dGVyX2VsZW1fc3pfcHJldikpIHtcbi1cdFx0aWYgKG51bSBcdTAwM2MgUEFHRV9TSVpFKSB7XG4rXHRcdGlmIChudW0gXHUwMDNjIChpbnQpUEFHRV9TSVpFKSB7XG4gXHRcdFx0c2NhdHRlcl9lbGVtX3N6ID0gUEFHRV9TSVpFO1xuIFx0XHRcdHNjYXR0ZXJfZWxlbV9zel9wcmV2ID0gUEFHRV9TSVpFO1xuK1x0XHRcdG51bSA9IFBBR0VfU0laRTtcbiBcdFx0fSBlbHNlXG4gXHRcdFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBudW07XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NDoyNC41NTE5NjA1ODdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMzI0ODg1NjI2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTQ1NJIERyaXZlciBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBjb21taXQuIFRoZSBkaWZmIGltbWVkaWF0ZWx5IGZsYWdzIGBkcml2ZXJzL3Njc2kvc2cuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgYSBzZWN0aW9uIGNvbmNlcm5pbmcgc2NhdHRlci1nYXRoZXIgbGlzdCBidWlsZGluZy4gSSBzZWUgYSBjaGFuZ2Ugd2l0aGluIHRoZSBgc2dfYnVpbGRfaW5kaXJlY3RgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBgc2NhdHRlcl9lbGVtX3N6YCBhbmQgYSByZWxhdGVkIHZhcmlhYmxlLCBgc2NhdHRlcl9lbGVtX3N6X3ByZXZgLiBUaGUgY29yZSBsb2dpYyBoZXJlIGFwcGVhcnMgdG8gYmUgYWRqdXN0aW5nIGBzY2F0dGVyX2VsZW1fc3pgIGlmIGl0cyBpbml0aWFsIHZhbHVlIGBudW1gIGlzIHNtYWxsZXIgdGhhbiBgUEFHRV9TSVpFYC4gVGhlIGFkZGl0aW9uIG9mIHRoZSBjb25kaXRpb25hbCBgKGludClQQUdFX1NJWkVgIGNhc3RzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0eSBmaXgsIG9yIGF0IGxlYXN0IGEgc2FmZWd1YXJkIHRvIGVuc3VyZSB0aGUgY29tcGFyaXNvbiB3b3JrcyBhcyBpbnRlbmRlZCBhY3Jvc3MgZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMuIFRoZSBgbnVtID0gUEFHRV9TSVpFO2AgYXNzaWdubWVudCB3aXRoaW4gdGhlIGBpZmAgYmxvY2sgY29uZmlybXMgdGhhdCBpdCB3aWxsIGJlIHVwZGF0ZWQuIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIFNDU0kgbGF5ZXIsIEknbSBhbHJlYWR5IGZvcm11bGF0aW5nIHNvbWUgaHlwb3RoZXNlcyBhYm91dCB0aGUgb3JpZ2luYWwgaXNzdWUgYW5kIHRoZSBpbnRlbnQgb2YgdGhpcyBmaXguIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHBvc3NpYmx5IHJlbGF0ZWQgY29tbWl0cyB0byBmdWxseSBncmFzcCB0aGUgY29udGV4dCBhbmQgcG90ZW50aWFsIHJhbWlmaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MTAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NDo1Ny44MDA4MjAxNzJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzYzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9zY3NpL3NnLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTg2MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTg2MDpcXHRcXG4xODYxOlxcdFxcdGlmIChibGtfc2l6ZSBcXHUwMDNjIDApXFxuMTg2MjpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4xODYzOlxcdFxcdGlmICgwID09IGJsa19zaXplKVxcbjE4NjQ6XFx0XFx0XFx0KytibGtfc2l6ZTtcXHQvKiBkb24ndCBrbm93IHdoeSAqL1xcbjE4NjU6XFx0XFx0Lyogcm91bmQgcmVxdWVzdCB1cCB0byBuZXh0IGhpZ2hlc3QgU0dfU0VDVE9SX1NaIGJ5dGUgYm91bmRhcnkgKi9cXG4xODY2OlxcdFxcdGJsa19zaXplID0gQUxJR04oYmxrX3NpemUsIFNHX1NFQ1RPUl9TWik7XFxuMTg2NzpcXHRcXHRTQ1NJX0xPR19USU1FT1VUKDQsIHNnX3ByaW50ayhLRVJOX0lORk8sIHNmcC1cXHUwMDNlcGFyZW50ZHAsXFxuMTg2ODpcXHRcXHRcXHRcXFwic2dfYnVpbGRfaW5kaXJlY3Q6IGJ1ZmZfc2l6ZT0lZCwgYmxrX3NpemU9JWRcXFxcblxcXCIsXFxuMTg2OTpcXHRcXHRcXHRidWZmX3NpemUsIGJsa19zaXplKSk7XFxuMTg3MDpcXHRcXG4xODcxOlxcdFxcdC8qIE4uQi4gcmV0X3N6IGNhcnJpZWQgaW50byB0aGlzIGJsb2NrIC4uLiAqL1xcbjE4NzI6XFx0XFx0bXhfc2NfZWxlbXMgPSBzZ19idWlsZF9zZ2F0KHNjaHAsIHNmcCwgc2dfdGFibGVzaXplKTtcXG4xODczOlxcdFxcdGlmIChteF9zY19lbGVtcyBcXHUwMDNjIDApXFxuMTg3NDpcXHRcXHRcXHRyZXR1cm4gbXhfc2NfZWxlbXM7XFx0LyogbW9zdCBsaWtlbHkgLUVOT01FTSAqL1xcbjE4NzU6XFx0XFxuMTg3NjpcXHRcXHRudW0gPSBzY2F0dGVyX2VsZW1fc3o7XFxuMTg3NzpcXHRcXHRpZiAodW5saWtlbHkobnVtICE9IHNjYXR0ZXJfZWxlbV9zel9wcmV2KSkge1xcbjE4Nzg6XFx0XFx0XFx0aWYgKG51bSBcXHUwMDNjIChpbnQpUEFHRV9TSVpFKSB7XFxuMTg3OTpcXHRcXHRcXHRcXHRzY2F0dGVyX2VsZW1fc3ogPSBQQUdFX1NJWkU7XFxuMTg4MDpcXHRcXHRcXHRcXHRzY2F0dGVyX2VsZW1fc3pfcHJldiA9IFBBR0VfU0laRTtcXG4xODgxOlxcdFxcdFxcdFxcdG51bSA9IFBBR0VfU0laRTtcXG4xODgyOlxcdFxcdFxcdH0gZWxzZVxcbjE4ODM6XFx0XFx0XFx0XFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBudW07XFxuMTg4NDpcXHRcXHR9XFxuMTg4NTpcXHRcXG4xODg2OlxcdFxcdG9yZGVyID0gZ2V0X29yZGVyKG51bSk7XFxuMTg4NzpcXHRyZXRyeTpcXG4xODg4OlxcdFxcdHJldF9zeiA9IDEgXFx1MDAzY1xcdTAwM2MgKFBBR0VfU0hJRlQgKyBvcmRlcik7XFxuMTg4OTpcXHRcXG4xODkwOlxcdFxcdGZvciAoayA9IDAsIHJlbV9zeiA9IGJsa19zaXplOyByZW1fc3ogXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IGsgXFx1MDAzYyBteF9zY19lbGVtcztcXG4xODkxOlxcdFxcdCAgICAgaysrLCByZW1fc3ogLT0gcmV0X3N6KSB7XFxuMTg5MjpcXHRcXG4xODkzOlxcdFxcdFxcdG51bSA9IChyZW1fc3ogXFx1MDAzZSBzY2F0dGVyX2VsZW1fc3pfcHJldikgP1xcbjE4OTQ6XFx0XFx0XFx0XFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgOiByZW1fc3o7XFxuMTg5NTpcXHRcXG4xODk2OlxcdFxcdFxcdHNjaHAtXFx1MDAzZXBhZ2VzW2tdID0gYWxsb2NfcGFnZXMoZ2ZwX21hc2ssIG9yZGVyKTtcXG4xODk3OlxcdFxcdFxcdGlmICghc2NocC1cXHUwMDNlcGFnZXNba10pXFxuMTg5ODpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4xODk5OlxcdFxcbjE5MDA6XFx0XFx0XFx0aWYgKG51bSA9PSBzY2F0dGVyX2VsZW1fc3pfcHJldikge1xcbjE5MDE6XFx0XFx0XFx0XFx0aWYgKHVubGlrZWx5KHJldF9zeiBcXHUwMDNlIHNjYXR0ZXJfZWxlbV9zel9wcmV2KSkge1xcbjE5MDI6XFx0XFx0XFx0XFx0XFx0c2NhdHRlcl9lbGVtX3N6ID0gcmV0X3N6O1xcbjE5MDM6XFx0XFx0XFx0XFx0XFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgPSByZXRfc3o7XFxuMTkwNDpcXHRcXHRcXHRcXHR9XFxuMTkwNTpcXHRcXHRcXHR9XFxuMTkwNjpcXHRcXG4xOTA3OlxcdFxcdFxcdFNDU0lfTE9HX1RJTUVPVVQoNSwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc2ZwLVxcdTAwM2VwYXJlbnRkcCxcXG4xOTA4OlxcdFxcdFxcdFxcdFxcdCBcXFwic2dfYnVpbGRfaW5kaXJlY3Q6IGs9JWQsIG51bT0lZCwgcmV0X3N6PSVkXFxcXG5cXFwiLFxcbjE5MDk6XFx0XFx0XFx0XFx0XFx0IGssIG51bSwgcmV0X3N6KSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjQ0OjU3LjgwMDk5OTU4MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIxOTYzNDgzOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGluZWFnZSBvZiBgc2NhdHRlcl9lbGVtX3N6YCBhbmQgaG93IHRoZSBkcml2ZXIgYHNnLmNgIGFjdHVhbGx5IHV0aWxpemVzIGl0LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB0cmFjZSBiYWNrIHRoZSB2YXJpYWJsZSdzIGRlZmluaXRpb24gYW5kIHVzYWdlLCBzbyBsZXQncyBnZXQgdGhhdCBkb25lLlxuXG4qKlRyYWNraW5nIHRoZSBgc2NhdHRlcl9lbGVtX3N6YCBWYXJpYWJsZSoqXG5cblJpZ2h0LCBsZXQgbWUga2ljayBvZmYgYSBncmVwIHNlYXJjaCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgd2l0aGluIGBkcml2ZXJzL3Njc2kvc2cuY2AgZm9yIGFueSBpbnN0YW5jZXMgb2YgYHNjYXR0ZXJfZWxlbV9zemAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBpbiB0aGUgc3lzdGVtLiBJJ20gaG9waW5nIHRoaXMgc2VhcmNoIHdpbGwgbGVhZCBtZSB0byB0aGUga2V5IHNlY3Rpb25zIG9mIGNvZGUgd2hlcmUgdGhlIHZhcmlhYmxlIGlzIGVpdGhlciBkZWZpbmVkLCBhc3NpZ25lZCBhIHZhbHVlLCBvciBtb3N0IGltcG9ydGFudGx5LCAqdXNlZCouIEZyb20gdGhlcmUsIEkgY2FuIGJlZ2luIHRvIGRyYXcgY29ubmVjdGlvbnMgYW5kIHNlZSBob3cgZGF0YSBpcyBzdHJ1Y3R1cmVkIGFuZCBwYXNzZWQgdGhyb3VnaCB0aGUgdmFyaW91cyBmdW5jdGlvbiBjYWxscy4gVGhpcyB3aWxsIHByb3ZpZGUgYSBjcnVjaWFsIGluc2lnaHQgaW50byBkYXRhIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNDUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjQ0OjU5Ljk5NzM1MTg5OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjAzMDQ1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY2F0dGVyX2VsZW1fc3pcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zY3NpL3NnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zY3NpL3NnLmM9OTI9c3RhdGljIGludCBzZ19hbGxvd19kaW8gPSBTR19BTExPV19ESU9fREVGO1xcbmRyaXZlcnMvc2NzaS9zZy5jLTkzLVxcbmRyaXZlcnMvc2NzaS9zZy5jOjk0OnN0YXRpYyBpbnQgc2NhdHRlcl9lbGVtX3N6ID0gU0dfU0NBVFRFUl9TWjtcXG5kcml2ZXJzL3Njc2kvc2cuYzo5NTpzdGF0aWMgaW50IHNjYXR0ZXJfZWxlbV9zel9wcmV2ID0gU0dfU0NBVFRFUl9TWjtcXG5kcml2ZXJzL3Njc2kvc2cuYy05Ni1cXG4tLVxcbmRyaXZlcnMvc2NzaS9zZy5jPTE1OTA9c2dfcmVtb3ZlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpjbF9kZXYpXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2cuYy0xNjIzLVxcbmRyaXZlcnMvc2NzaS9zZy5jOjE2MjQ6bW9kdWxlX3BhcmFtX25hbWVkKHNjYXR0ZXJfZWxlbV9zeiwgc2NhdHRlcl9lbGVtX3N6LCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTtcXG5kcml2ZXJzL3Njc2kvc2cuYy0xNjI1LW1vZHVsZV9wYXJhbV9uYW1lZChhbGxvd19kaW8sIHNnX2FsbG93X2RpbywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2cuYz0xNjU4PU1PRFVMRV9BTElBU19DSEFSREVWX01BSk9SKFNDU0lfR0VORVJJQ19NQUpPUik7XFxuZHJpdmVycy9zY3NpL3NnLmMtMTY1OS1cXG5kcml2ZXJzL3Njc2kvc2cuYzoxNjYwOk1PRFVMRV9QQVJNX0RFU0Moc2NhdHRlcl9lbGVtX3N6LCBcXFwic2NhdHRlciBnYXRoZXIgZWxlbWVudCBcXFwiXFxuZHJpdmVycy9zY3NpL3NnLmMtMTY2MS0gICAgICAgICAgICAgICAgXFxcInNpemUgKGRlZmF1bHQ6IG1heChTR19TQ0FUVEVSX1NaLCBQQUdFX1NJWkUpKVxcXCIpO1xcbi0tXFxuZHJpdmVycy9zY3NpL3NnLmM9MTY2Nj1pbml0X3NnKHZvaWQpXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2cuYy0xNjY5LVxcbmRyaXZlcnMvc2NzaS9zZy5jOjE2NzA6XFx0aWYgKHNjYXR0ZXJfZWxlbV9zeiBcXHUwMDNjIFBBR0VfU0laRSkge1xcbmRyaXZlcnMvc2NzaS9zZy5jOjE2NzE6XFx0XFx0c2NhdHRlcl9lbGVtX3N6ID0gUEFHRV9TSVpFO1xcbmRyaXZlcnMvc2NzaS9zZy5jOjE2NzI6XFx0XFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBzY2F0dGVyX2VsZW1fc3o7XFxuZHJpdmVycy9zY3NpL3NnLmMtMTY3My1cXHR9XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2cuYz0xODU0PXNnX2J1aWxkX2luZGlyZWN0KFNnX3NjYXR0ZXJfaG9sZCAqIHNjaHAsIFNnX2ZkICogc2ZwLCBpbnQgYnVmZl9zaXplKVxcbi0tXFxuZHJpdmVycy9zY3NpL3NnLmMtMTg3NS1cXG5kcml2ZXJzL3Njc2kvc2cuYzoxODc2OlxcdG51bSA9IHNjYXR0ZXJfZWxlbV9zejtcXG5kcml2ZXJzL3Njc2kvc2cuYzoxODc3OlxcdGlmICh1bmxpa2VseShudW0gIT0gc2NhdHRlcl9lbGVtX3N6X3ByZXYpKSB7XFxuZHJpdmVycy9zY3NpL3NnLmMtMTg3OC1cXHRcXHRpZiAobnVtIFxcdTAwM2MgKGludClQQUdFX1NJWkUpIHtcXG5kcml2ZXJzL3Njc2kvc2cuYzoxODc5OlxcdFxcdFxcdHNjYXR0ZXJfZWxlbV9zeiA9IFBBR0VfU0laRTtcXG5kcml2ZXJzL3Njc2kvc2cuYzoxODgwOlxcdFxcdFxcdHNjYXR0ZXJfZWxlbV9zel9wcmV2ID0gUEFHRV9TSVpFO1xcbmRyaXZlcnMvc2NzaS9zZy5jLTE4ODEtXFx0XFx0XFx0bnVtID0gUEFHRV9TSVpFO1xcbmRyaXZlcnMvc2NzaS9zZy5jLTE4ODItXFx0XFx0fSBlbHNlXFxuZHJpdmVycy9zY3NpL3NnLmM6MTg4MzpcXHRcXHRcXHRzY2F0dGVyX2VsZW1fc3pfcHJldiA9IG51bTtcXG5kcml2ZXJzL3Njc2kvc2cuYy0xODg0LVxcdH1cXG4tLVxcbmRyaXZlcnMvc2NzaS9zZy5jLTE4OTItXFxuZHJpdmVycy9zY3NpL3NnLmM6MTg5MzpcXHRcXHRudW0gPSAocmVtX3N6IFxcdTAwM2Ugc2NhdHRlcl9lbGVtX3N6X3ByZXYpID9cXG5kcml2ZXJzL3Njc2kvc2cuYzoxODk0OlxcdFxcdFxcdHNjYXR0ZXJfZWxlbV9zel9wcmV2IDogcmVtX3N6O1xcbmRyaXZlcnMvc2NzaS9zZy5jLTE4OTUtXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2cuYy0xODk5LVxcbmRyaXZlcnMvc2NzaS9zZy5jOjE5MDA6XFx0XFx0aWYgKG51bSA9PSBzY2F0dGVyX2VsZW1fc3pfcHJldikge1xcbmRyaXZlcnMvc2NzaS9zZy5jOjE5MDE6XFx0XFx0XFx0aWYgKHVubGlrZWx5KHJldF9zeiBcXHUwMDNlIHNjYXR0ZXJfZWxlbV9zel9wcmV2KSkge1xcbmRyaXZlcnMvc2NzaS9zZy5jOjE5MDI6XFx0XFx0XFx0XFx0c2NhdHRlcl9lbGVtX3N6ID0gcmV0X3N6O1xcbmRyaXZlcnMvc2NzaS9zZy5jOjE5MDM6XFx0XFx0XFx0XFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgPSByZXRfc3o7XFxuZHJpdmVycy9zY3NpL3NnLmMtMTkwNC1cXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjQ1OjAwLjA2MzM4ODM0M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIwODgzMzUzOTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU2NhdHRlci9HYXRoZXIgRWxlbWVudCBTaXplIGluIHRoZSBTQ1NJIEdlbmVyaWMgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgc2NhdHRlcl9lbGVtX3N6YCBwYXJhbWV0ZXIgaW4gdGhlIGBzZy5jYCBtb2R1bGUsIHdoaWNoIGlzIHRoZSBTQ1NJIEdlbmVyaWMgZHJpdmVyIGFjY2Vzc2libGUgdmlhIGAvZGV2L3NnKmAuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGNhbiBJIGV2ZW4gKnJlYWNoKiB0aGlzIGRyaXZlciBpbiBhIHR5cGljYWwgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gWWVzLCB0aGFua2Z1bGx5LCBgQ09ORklHX0NIUl9ERVZfU0dgIG1ha2VzIGl0IGEgY2xhc3NpYyBkcml2ZXIuIFFFTVUncyB2aXJ0aW8tc2NzaSwgU0NTSSBlbXVsYXRpb24sIGFuZCBVU0IgbWFzcyBzdG9yYWdlIFNDU0kgZGV2aWNlcyBhbGwgZXhwb3NlIGAvZGV2L3NnKmAuIEFuZCBJIGtub3cgc3l6a2FsbGVyIHNwZWNpZmljYWxseSB0ZXN0cyBTQ1NJIGFuZCBgL2Rldi9zZypgIHRocm91Z2ggaXRzIGRlc2NyaXB0aW9ucywgc28gaXQncyBhIHZhbGlkIHRhcmdldC5cblxuTm93LCBsZXQncyB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZSBwYXRjaC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGlzc3VlIHRoaXMgaXMgZml4aW5nLiBJJ20gZm9jdXNpbmcgb24gdGhlIGBzZ19idWlsZF9pbmRpcmVjdGAgZnVuY3Rpb24uIEkgc2VlIHRoZSBjb3JlIGxvZ2ljIGludm9sdmluZyBgc2NhdHRlcl9lbGVtX3N6YCBhbmQgaG93IGl0J3MgaGFuZGxlZC5cblxuT2theSwgaGVyZSdzIHdoYXQncyBoYXBwZW5pbmcuIFRoZSBjb2RlIGNoZWNrcyBpZiBgbnVtYCBpcyBkaWZmZXJlbnQgZnJvbSBgc2NhdHRlcl9lbGVtX3N6X3ByZXZgLiBUaGVuLCBpdCBjb21wYXJlcyBpZiBgbnVtYCBpcyBsZXNzIHRoYW4gYFBBR0VfU0laRWAuIEJlZm9yZSB0aGUgZml4LCBpZiBgbnVtIFx1MDAzYyBQQUdFX1NJWkVgLCB0aGUgY29kZSB3b3VsZCBzZXQgYHNjYXR0ZXJfZWxlbV9zemAgYW5kIGBzY2F0dGVyX2VsZW1fc3pfcHJldmAgdG8gYFBBR0VfU0laRWAsIGJ1dCBpdCAqZGlkbid0KiB1cGRhdGUgYG51bWAhIFRoYXQncyBhIGh1Z2Ugb3ZlcnNpZ2h0LlxuXG5UaGluayBhYm91dCB0aGlzLiAgYFBBR0VfU0laRWAgaXMgdW5zaWduZWQsIHJpZ2h0PyBBbmQgYG51bWAgaXMgYSBzaWduZWQgaW50ZWdlci4gIElmIGBzY2F0dGVyX2VsZW1fc3pgIChhbmQgaGVuY2UgYG51bWApIHdhcyBzZXQgdG8gYSBuZWdhdGl2ZSB2YWx1ZSwgdGhlIHVuc2lnbmVkIGNvbXBhcmlzb24gd291bGQgZmFpbCwgYW5kIGl0IHdvdWxkIHNraXAgdGhlIFBBR0VfU0laRSBhZGp1c3RtZW50LiBCdXQgZXZlbiBpZiB0aGUgY29tcGFyaXNvbiBzdWNjZWVkZWQsIHRoZSBjcml0aWNhbCBmbGF3IGlzIGBudW1gICp3YXNuJ3QqIHVwZGF0ZWQuIFNvIHRoZSBzdWJzZXF1ZW50IGBvcmRlciA9IGdldF9vcmRlcihudW0pYCBjYWxsIGNvdWxkIGhhdmUgYmVlbiB1c2luZyBhIHBvdGVudGlhbGx5IGludmFsaWQgYG51bWAuIEl0IGNvdWxkIGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAwLCB3aGljaCB3b3VsZCBsZWFkIHRvIHVuZGVmaW5lZCBiZWhhdmlvciBvciBlcnJvcnMgd2l0aGluIGBnZXRfb3JkZXJgIChsaWtlIHNoaWZ0aW5nIGJ5IGEgbmVnYXRpdmUgYW1vdW50KS4gIFRoZSBmaXggYWRkcmVzc2VzIHRoaXMgYnkgdXNpbmcgYSBzaWduZWQgaW50ZWdlciBjb21wYXJpc29uIChgbnVtIFx1MDAzYyAoaW50KVBBR0VfU0laRWApIHdoaWNoIGlzIGNvcnJlY3QsIGFuZCBjcnVjaWFsbHkgc2V0cyBgbnVtID0gUEFHRV9TSVpFYCwgZ3VhcmFudGVlaW5nIGEgdmFsaWQgdmFsdWUgaXMgdXNlZCBpbiB0aGUgYGdldF9vcmRlcmAgY2FsY3VsYXRpb24uXG5cbkkgd2FzIGhvcGluZyB0byBjaGVjayB0aGUgY29tbWl0IGxvZyBkaXJlY3RseSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LCBidXQgSSBkb24ndCBoYXZlIGRpcmVjdCBhY2Nlc3MgdG8gZ2l0LiBObyBtYXR0ZXIsIHRoZSBjb2RlIHRlbGxzIHRoZSBzdG9yeSEgIFRoZSBLY29uZmlnIG9wdGlvbnMgYXJlIG15IG5leHQgcG9ydCBvZiBjYWxsLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGlzIGlzIHByb3Blcmx5IGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NjQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDU6MjAuOTQ2NzQ1MTM4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNjQwMDgyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvYmotLipzZ1xcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Njc2lcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zY3NpL01ha2VmaWxlPTE3Mz1vYmotJChDT05GSUdfQkxLX0RFVl9TUilcXHQrPSBzcl9tb2Qub1xcbmRyaXZlcnMvc2NzaS9NYWtlZmlsZToxNzQ6b2JqLSQoQ09ORklHX0NIUl9ERVZfU0cpXFx0Kz0gc2cub1xcbmRyaXZlcnMvc2NzaS9NYWtlZmlsZS0xNzUtb2JqLSQoQ09ORklHX0NIUl9ERVZfU0NIKVxcdCs9IGNoLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDU6MjEuNDYzMTUyMzJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzM2NTQ5MTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQ2hlY2tpbmcgU0NTSSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpbmQgd2hlcmUgdGhlIGBDT05GSUdfQ0hSX0RFVl9TR2Agc3ltYm9sIGlzIGRlZmluZWQuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiBpdCBsaWtlbHkgcmVsYXRlcyB0byBTQ1NJLCBpcyB0byBoZWFkIGRpcmVjdGx5IGludG8gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSwgc3BlY2lmaWNhbGx5IHRoZSBgZHJpdmVycy9zY3NpL2AgZGlyZWN0b3J5LiBXaXRoaW4gdGhhdCwgdGhlIGBLY29uZmlnYCBmaWxlcyBhcmUgdXN1YWxseSB0aGUgYmVzdCBwbGFjZSB0byBmaW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gU28gSSdsbCBnbyBzdHJhaWdodCB0byBgZHJpdmVycy9zY3NpL0tjb25maWdgIGFuZCB0YWtlIGEgbG9vay4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIGBDT05GSUdfQ0hSX0RFVl9TR2AgYW5kIGFueSBhc3NvY2lhdGVkIGRlcGVuZGVuY2llcywgZGVzY3JpcHRpb25zLCBhbmQgZGVmYXVsdHMgdGhlcmUuIFRoaXMgaXMgYSBjb21tb24gcGF0dGVybiwgYW5kIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uYWxpdHkgaXMgY29udHJvbGxlZCBpbiB0aGUga2VybmVsIGJ1aWxkLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxNjcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NToyMy43OTk3MDQ3MTJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODE4OTEwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0hSX0RFVl9TR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Njc2lcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zY3NpL0tjb25maWc9MTE2PWNvbmZpZyBCTEtfREVWX1NSXFxuLS1cXG5kcml2ZXJzL3Njc2kvS2NvbmZpZy0xMzAtXFxuZHJpdmVycy9zY3NpL0tjb25maWc6MTMxOmNvbmZpZyBDSFJfREVWX1NHXFxuZHJpdmVycy9zY3NpL0tjb25maWctMTMyLVxcdHRyaXN0YXRlIFxcXCJTQ1NJIGdlbmVyaWMgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDU6MjMuOTA3OTAyMDg2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMwMjg2MjAwNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIFNDU0kgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGBkcml2ZXJzL3Njc2kvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgZGVmaW5lZCBpbiBsaW5lcyAxMzAtMTUwLiBTcGVjaWZpY2FsbHksIEnigJltIGludGVyZXN0ZWQgaW4gdGhvc2UgcGFydGljdWxhciBsaW5lcywgYXMgc29tZXRoaW5nIG11c3QgaGF2ZSB0cmlnZ2VyZWQgbXkgaW50ZXJlc3QgaW4gdGhlbS4gV2hhdOKAmXMgZ29pbmcgb24gaW4gdGhhdCBzcGVjaWZpYyBzZWN0aW9uPyBBcmUgdGhleSBkZWZpbmluZyBuZXcgU0NTSSBob3N0IGFkYXB0ZXJzLCBwZXJoYXBzPyBPciBtYXliZSBzb21lIGNvcmUgU0NTSSBvcHRpb25zPyBJdOKAmXMgcHJvYmFibHkgYSBjb25maWd1cmF0aW9uIGJsb2NrIGZvciBhIGNlcnRhaW4gdHlwZSBvZiBjb250cm9sbGVyIG9yIHNvbWUgZmVhdHVyZSwgZ2l2ZW4gdGhlIGNvbnRleHQgb2YgYSBLY29uZmlnIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBzZWN0aW9uIGVuYWJsZXMgb3IgZGlzYWJsZXMsIGFuZCB0aGUgZGVwZW5kZW5jaWVzIGl0IHNldHMuIEFscmlnaHQsIGxldCdzIHBhcnNlIHRob3NlIGxpbmVzIGFuZCBzZWUgd2hhdCByZXZlbGF0aW9ucyBhcmUgaGlkZGVuIHRoZXJlLiBUaGUgZGV2aWwgaXMgYWx3YXlzIGluIHRoZSBkZXRhaWxzLCBzbyBsZXQncyBzdGFydCByZWFkaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDg2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDU6MjYuOTM2NTI2MTU4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Njc2kvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzA6XFx0XFxuIDEzMTpcXHRjb25maWcgQ0hSX0RFVl9TR1xcbiAxMzI6XFx0XFx0dHJpc3RhdGUgXFxcIlNDU0kgZ2VuZXJpYyBzdXBwb3J0XFxcIlxcbiAxMzM6XFx0XFx0ZGVwZW5kcyBvbiBTQ1NJXFxuIDEzNDpcXHRcXHRoZWxwXFxuIDEzNTpcXHRcXHQgIElmIHlvdSB3YW50IHRvIHVzZSBTQ1NJIHNjYW5uZXJzLCBzeW50aGVzaXplcnMgb3IgQ0Qtd3JpdGVycyBvciBqdXN0XFxuIDEzNjpcXHRcXHQgIGFib3V0IGFueXRoaW5nIGhhdmluZyBcXFwiU0NTSVxcXCIgaW4gaXRzIG5hbWUgb3RoZXIgdGhhbiBoYXJkIGRpc2tzLFxcbiAxMzc6XFx0XFx0ICBDRC1ST01zIG9yIHRhcGVzLCBzYXkgWSBoZXJlLiBUaGVzZSB3b24ndCBiZSBzdXBwb3J0ZWQgYnkgdGhlIGtlcm5lbFxcbiAxMzg6XFx0XFx0ICBkaXJlY3RseSwgc28geW91IG5lZWQgc29tZSBhZGRpdGlvbmFsIHNvZnR3YXJlIHdoaWNoIGtub3dzIGhvdyB0b1xcbiAxMzk6XFx0XFx0ICB0YWxrIHRvIHRoZXNlIGRldmljZXMgdXNpbmcgdGhlIFNDU0kgcHJvdG9jb2w6XFxuIDE0MDpcXHRcXG4gMTQxOlxcdFxcdCAgRm9yIHNjYW5uZXJzLCBsb29rIGF0IFNBTkUgKFxcdTAwM2NodHRwOi8vd3d3LnNhbmUtcHJvamVjdC5vcmcvXFx1MDAzZSkuIEZvciBDRFxcbiAxNDI6XFx0XFx0ICB3cml0ZXIgc29mdHdhcmUgbG9vayBhdCBDZHJ0b29sc1xcbiAxNDM6XFx0XFx0ICAoXFx1MDAzY2h0dHA6Ly9jZHJ0b29scy5zb3VyY2Vmb3JnZS5uZXQvXFx1MDAzZSlcXG4gMTQ0OlxcdFxcdCAgYW5kIGZvciBidXJuaW5nIGEgXFxcImRpc2sgYXQgb25jZVxcXCI6IENEUkRBT1xcbiAxNDU6XFx0XFx0ICAoXFx1MDAzY2h0dHA6Ly9jZHJkYW8uc291cmNlZm9yZ2UubmV0L1xcdTAwM2UpLiBDZHBhcmFub2lhIGlzIGEgaGlnaFxcbiAxNDY6XFx0XFx0ICBxdWFsaXR5IGRpZ2l0YWwgcmVhZGVyIG9mIGF1ZGlvIENEcyAoXFx1MDAzY2h0dHA6Ly93d3cueGlwaC5vcmcvcGFyYW5vaWEvXFx1MDAzZSkuXFxuIDE0NzpcXHRcXHQgIEZvciBvdGhlciBkZXZpY2VzLCBpdCdzIHBvc3NpYmxlIHRoYXQgeW91J2xsIGhhdmUgdG8gd3JpdGUgdGhlXFxuIDE0ODpcXHRcXHQgIGRyaXZlciBzb2Z0d2FyZSB5b3Vyc2VsZi4gUGxlYXNlIHJlYWQgdGhlIGZpbGVcXG4gMTQ5OlxcdFxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9zY3NpL3Njc2ktZ2VuZXJpYy5yc3RcXHUwMDNlIGZvciBtb3JlIGluZm9ybWF0aW9uLlxcbiAxNTA6XFx0XFxuIDE1MTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUgYW5kIHJlYWRcXG4gMTUyOlxcdFxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9zY3NpL3Njc2kucnN0XFx1MDAzZS4gVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzZy5cXG4gMTUzOlxcdFxcbiAxNTQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NToyNi45MzY2NzYyMThaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDI2MjY4MDM0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFNDU0kgU3Vic3lzdGVtIERlcGVuZGVuY3kqKlxuXG5SaWdodCwgYENPTkZJR19DSFJfREVWX1NHYCBoaW5nZXMgb24gYENPTkZJR19TQ1NJYCwgd2hpY2ggaXMgZXhwZWN0ZWQuIFRoYXQncyBzdGFuZGFyZCBwcmFjdGljZSwgdGhlIFwic2dcIiBkcml2ZXIgbGV2ZXJhZ2VzIHRoZSBTQ1NJIG1pZC1sYXllciwgc28gdGhhdCdzIG5vdGhpbmcgbmV3LiBOb3csIHRoZSBpbnRlcmVzdGluZyBxdWVzdGlvbiBpcyBob3cgYHNnX2J1aWxkX2luZGlyZWN0YCBpcyAqYWN0dWFsbHkqIHVzZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGZsb3cgdGhyb3VnaCBgc2dfYnVpbGRfaW5kaXJlY3RgLiBJJ20gY3VyaW91cyBhYm91dCB0aGUgc3BlY2lmaWMgY29udGV4dHMgYW5kIG90aGVyIGRlcGVuZGVuY2llcy4gTGV0J3Mgc2VlIGhvdyBhbmQgd2hlbiB0aGF0IHJvdXRpbmUgZ2V0cyBpbnZva2VkLCBzbyBJIGNhbiBoYXZlIGFuIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgSS9PIGZsb3cuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hvJ3MgY2FsbGluZyBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE5NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDU6MzEuMTk5MzYxNDE5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDc3OTExMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZ19idWlsZF9pbmRpcmVjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Njc2kvc2cuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Njc2kvc2cuYz0xODM9c3RhdGljIGludCBzZ19maW5pc2hfcmVtX3JlcShTZ19yZXF1ZXN0ICogc3JwKTtcXG5kcml2ZXJzL3Njc2kvc2cuYzoxODQ6c3RhdGljIGludCBzZ19idWlsZF9pbmRpcmVjdChTZ19zY2F0dGVyX2hvbGQgKiBzY2hwLCBTZ19mZCAqIHNmcCwgaW50IGJ1ZmZfc2l6ZSk7XFxuZHJpdmVycy9zY3NpL3NnLmMtMTg1LXN0YXRpYyBzc2l6ZV90IHNnX25ld19yZWFkKFNnX2ZkICogc2ZwLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2cuYz0xNzExPXNnX3N0YXJ0X3JlcShTZ19yZXF1ZXN0ICpzcnAsIHVuc2lnbmVkIGNoYXIgKmNtZClcXG4tLVxcbmRyaXZlcnMvc2NzaS9zZy5jLTE3ODItXFx0XFx0fSBlbHNlIHtcXG5kcml2ZXJzL3Njc2kvc2cuYzoxNzgzOlxcdFxcdFxcdHJlcyA9IHNnX2J1aWxkX2luZGlyZWN0KHJlcV9zY2hwLCBzZnAsIGR4ZmVyX2xlbik7XFxuZHJpdmVycy9zY3NpL3NnLmMtMTc4NC1cXHRcXHRcXHRpZiAocmVzKSB7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2cuYz0xODUzPXN0YXRpYyBpbnRcXG5kcml2ZXJzL3Njc2kvc2cuYzoxODU0OnNnX2J1aWxkX2luZGlyZWN0KFNnX3NjYXR0ZXJfaG9sZCAqIHNjaHAsIFNnX2ZkICogc2ZwLCBpbnQgYnVmZl9zaXplKVxcbmRyaXZlcnMvc2NzaS9zZy5jLTE4NTUte1xcbi0tXFxuZHJpdmVycy9zY3NpL3NnLmMtMTg2Ny1cXHRTQ1NJX0xPR19USU1FT1VUKDQsIHNnX3ByaW50ayhLRVJOX0lORk8sIHNmcC1cXHUwMDNlcGFyZW50ZHAsXFxuZHJpdmVycy9zY3NpL3NnLmM6MTg2ODpcXHRcXHRcXFwic2dfYnVpbGRfaW5kaXJlY3Q6IGJ1ZmZfc2l6ZT0lZCwgYmxrX3NpemU9JWRcXFxcblxcXCIsXFxuZHJpdmVycy9zY3NpL3NnLmMtMTg2OS1cXHRcXHRidWZmX3NpemUsIGJsa19zaXplKSk7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2cuYy0xOTA3LVxcdFxcdFNDU0lfTE9HX1RJTUVPVVQoNSwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc2ZwLVxcdTAwM2VwYXJlbnRkcCxcXG5kcml2ZXJzL3Njc2kvc2cuYzoxOTA4OlxcdFxcdFxcdFxcdCBcXFwic2dfYnVpbGRfaW5kaXJlY3Q6IGs9JWQsIG51bT0lZCwgcmV0X3N6PSVkXFxcXG5cXFwiLFxcbmRyaXZlcnMvc2NzaS9zZy5jLTE5MDktXFx0XFx0XFx0XFx0IGssIG51bSwgcmV0X3N6KSk7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2cuYy0xOTE0LVxcdFNDU0lfTE9HX1RJTUVPVVQoNSwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc2ZwLVxcdTAwM2VwYXJlbnRkcCxcXG5kcml2ZXJzL3Njc2kvc2cuYzoxOTE1OlxcdFxcdFxcdCBcXFwic2dfYnVpbGRfaW5kaXJlY3Q6IGtfdXNlX3NnPSVkLCByZW1fc3o9JWRcXFxcblxcXCIsXFxuZHJpdmVycy9zY3NpL3NnLmMtMTkxNi1cXHRcXHRcXHQgaywgcmVtX3N6KSk7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2cuYz0xOTg5PXNnX2J1aWxkX3Jlc2VydmUoU2dfZmQgKiBzZnAsIGludCByZXFfc2l6ZSlcXG4tLVxcbmRyaXZlcnMvc2NzaS9zZy5jLTE5OTctXFx0XFx0XFx0cmVxX3NpemUgPSBQQUdFX1NJWkU7XFxuZHJpdmVycy9zY3NpL3NnLmM6MTk5ODpcXHRcXHRpZiAoMCA9PSBzZ19idWlsZF9pbmRpcmVjdChzY2hwLCBzZnAsIHJlcV9zaXplKSlcXG5kcml2ZXJzL3Njc2kvc2cuYy0xOTk5LVxcdFxcdFxcdHJldHVybjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDU6MzEuMjY0MTUwNTEyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjcyNDU5MzQzOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIERhdGEgRmxvdyoqXG5cbkFscmlnaHQsIHNvIGBzZ19idWlsZF9pbmRpcmVjdGAgaXMgY2xlYXJseSBhIGtleSBmdW5jdGlvbiwgdHJpZ2dlcmVkIGJ5IGJvdGggYHNnX3N0YXJ0X3JlcWAgYW5kIGBzZ19idWlsZF9yZXNlcnZlYC4gVGhhdCBtYWtlcyBzZW5zZTsgaW5kaXJlY3QgZGVzY3JpcHRvcnMgYXJlIGZ1bmRhbWVudGFsIHRvIGEgbG90IG9mIFNDU0kgb3BlcmF0aW9ucywgZXNwZWNpYWxseSB0aG9zZSBpbnZvbHZpbmcgc2NhdHRlci1nYXRoZXIuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucywgcGFydGljdWxhcmx5IHRoZSBwYXRoIHRocm91Z2ggYHNnX2J1aWxkX3Jlc2VydmVgLiBLbm93aW5nICp3aGF0KiBjYWxscyBgc2dfYnVpbGRfcmVzZXJ2ZWAgaXMgZ29pbmcgdG8gaWxsdW1pbmF0ZSBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgZGV2aWNlIHJlc2VydmF0aW9uIGFuZCBwb3RlbnRpYWwgY29uZmxpY3QgcmVzb2x1dGlvbiwgSSdkIHdhZ2VyLiBMZXQncyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgdGhlIGNhbGwgZ3JhcGggZm9yIHRoYXQgZnVuY3Rpb24uIEl0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkYXRhIGZsb3cgYW5kIGhvdyB0aGUgZGlmZmVyZW50IGNvbXBvbmVudHMgaW50ZXJhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxODEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NTozOC41MTAwODc3NDJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3OTgwNTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNnX2J1aWxkX3Jlc2VydmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zY3NpL3NnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zY3NpL3NnLmM9MTkzPXN0YXRpYyB2b2lkIHNnX3JlbW92ZV9zY2F0KFNnX2ZkICogc2ZwLCBTZ19zY2F0dGVyX2hvbGQgKiBzY2hwKTtcXG5kcml2ZXJzL3Njc2kvc2cuYzoxOTQ6c3RhdGljIHZvaWQgc2dfYnVpbGRfcmVzZXJ2ZShTZ19mZCAqIHNmcCwgaW50IHJlcV9zaXplKTtcXG5kcml2ZXJzL3Njc2kvc2cuYy0xOTUtc3RhdGljIHZvaWQgc2dfbGlua19yZXNlcnZlKFNnX2ZkICogc2ZwLCBTZ19yZXF1ZXN0ICogc3JwLCBpbnQgc2l6ZSk7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2cuYz05MTQ9c2dfaW9jdGxfY29tbW9uKHN0cnVjdCBmaWxlICpmaWxwLCBTZ19kZXZpY2UgKnNkcCwgU2dfZmQgKnNmcCxcXG4tLVxcbmRyaXZlcnMvc2NzaS9zZy5jLTEwMzUtXFx0XFx0XFx0c2dfcmVtb3ZlX3NjYXQoc2ZwLCBcXHUwMDI2c2ZwLVxcdTAwM2VyZXNlcnZlKTtcXG5kcml2ZXJzL3Njc2kvc2cuYzoxMDM2OlxcdFxcdFxcdHNnX2J1aWxkX3Jlc2VydmUoc2ZwLCB2YWwpO1xcbmRyaXZlcnMvc2NzaS9zZy5jLTEwMzctXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9zY3NpL3NnLmM9MTk4OD1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvc2NzaS9zZy5jOjE5ODk6c2dfYnVpbGRfcmVzZXJ2ZShTZ19mZCAqIHNmcCwgaW50IHJlcV9zaXplKVxcbmRyaXZlcnMvc2NzaS9zZy5jLTE5OTAte1xcbi0tXFxuZHJpdmVycy9zY3NpL3NnLmMtMTk5My1cXHRTQ1NJX0xPR19USU1FT1VUKDQsIHNnX3ByaW50ayhLRVJOX0lORk8sIHNmcC1cXHUwMDNlcGFyZW50ZHAsXFxuZHJpdmVycy9zY3NpL3NnLmM6MTk5NDpcXHRcXHRcXHQgXFxcInNnX2J1aWxkX3Jlc2VydmU6IHJlcV9zaXplPSVkXFxcXG5cXFwiLCByZXFfc2l6ZSkpO1xcbmRyaXZlcnMvc2NzaS9zZy5jLTE5OTUtXFx0ZG8ge1xcbi0tXFxuZHJpdmVycy9zY3NpL3NnLmM9MjE0ND1zZ19hZGRfc2ZwKFNnX2RldmljZSAqIHNkcClcXG4tLVxcbmRyaXZlcnMvc2NzaS9zZy5jLTIxNzctXFx0XFx0XFx0bWF4X3NlY3RvcnNfYnl0ZXMoc2RwLVxcdTAwM2VkZXZpY2UtXFx1MDAzZXJlcXVlc3RfcXVldWUpKTtcXG5kcml2ZXJzL3Njc2kvc2cuYzoyMTc4OlxcdHNnX2J1aWxkX3Jlc2VydmUoc2ZwLCBidWZmbGVuKTtcXG5kcml2ZXJzL3Njc2kvc2cuYy0yMTc5LVxcdFNDU0lfTE9HX1RJTUVPVVQoMywgc2dfcHJpbnRrKEtFUk5fSU5GTywgc2RwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NTozOC41NjgwNzQxMDdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTU3MzcxMDc1NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQnVnIEZpeCBBbmFseXNpcyBhbmQgRnV6emluZyBTdHJhdGVneSBmb3IgU0NTSSBTY2F0dGVyL0dhdGhlciBEcml2ZXIqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGFuYWx5c2lzIGluZGljYXRlcyBhIGNyaXRpY2FsIGJ1ZyBmaXggd2l0aGluIHRoZSBTQ1NJIHNjYXR0ZXIvZ2F0aGVyIGRyaXZlciAoYGRyaXZlcnMvc2NzaS9zZy5jYCkuICBTcGVjaWZpY2FsbHksIHRoZSB2dWxuZXJhYmlsaXR5IGxpZXMgd2l0aGluIGhvdyB0aGUgYHNjYXR0ZXJfZWxlbV9zemAgcGFyYW1ldGVyIGlzIGhhbmRsZWQsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGBzZ19idWlsZF9pbmRpcmVjdGAgZnVuY3Rpb24uXG5cbkkgc2VlIHRoYXQgYHNnX2J1aWxkX3Jlc2VydmVgIGlzIGNhbGxlZCB3aXRoaW4gYHNnX2FkZF9zZnBgLCB3aGljaCBpdHNlbGYgaXMgaW52b2tlZCBkdXJpbmcgYHNnX29wZW5gLiBBbHNvLCBgc2dfc3RhcnRfcmVxYCBpcyB1c2VkIGR1cmluZyB3cml0ZXMgYW5kIHJlcXVlc3RzIHRvIGAvZGV2L3NnKmAsIG1lYW5pbmcgaXQncyByZWFjaGFibGUuIGBzY2F0dGVyX2VsZW1fc3pgLCBjYW4gYmUgY2hhbmdlZCB2aWEgdGhlIG1vZHVsZSBwYXJhbWV0ZXIgb3IgdGhyb3VnaCBgL3N5cy9tb2R1bGUvc2cvcGFyYW1ldGVycy9zY2F0dGVyX2VsZW1fc3pgLiBUaGUgaW1wb3J0YW50IHRoaW5nIGlzIHRoYXQgYSBzdGFuZGFyZCBMaW51eCBWTSB3aXRoIHN5emthbGxlciBhbmQgU0NTSSBvciB2aXJ0aW8tc2NzaSBkcml2ZXMgbWFrZXMgYC9kZXYvc2cwYCBhdmFpbGFibGUuIFRoaXMgbWVhbnMgdGhhdCBvcGVuaW5nIGAvZGV2L3NnKmAgdHJpZ2dlcnMgYHNnX29wZW5gIC1cdTAwM2UgYHNnX2FkZF9zZnBgIC1cdTAwM2UgYHNnX2J1aWxkX3Jlc2VydmVgIC1cdTAwM2UgYHNnX2J1aWxkX2luZGlyZWN0YC4gIEZ1cnRoZXJtb3JlLCB3cml0aW5nIFNDU0kgY29tbWFuZHMgb3IgaXNzdWluZyB0aGUgYFNHX0lPYCBpb2N0bCBjYWxscyBgc2dfc3RhcnRfcmVxYCAtXHUwMDNlIGBzZ19idWlsZF9pbmRpcmVjdGAuXG5cbkkgaWRlbnRpZmllZCB0aGF0IGBpbml0X3NnYCBhdHRlbXB0cyB0byBjaGVjayBgc2NhdHRlcl9lbGVtX3N6IFx1MDAzYyBQQUdFX1NJWkVgLiAgSG93ZXZlciwgdGhpcyBpbml0aWFsaXphdGlvbiBvbmx5IG9jY3VycyBhdCBtb2R1bGUgbG9hZCwgYW5kIHRoZSBgc2NhdHRlcl9lbGVtX3N6YCBwYXJhbWV0ZXIgaXMgd3JpdGFibGUgYXQgcnVudGltZS4gSWYgYSBzbWFsbCBvciBuZWdhdGl2ZSB2YWx1ZSBpcyB3cml0dGVuIHRvIGAvc3lzL21vZHVsZS9zZy9wYXJhbWV0ZXJzL3NjYXR0ZXJfZWxlbV9zemAsIHRoZSBjb21wYXJpc29uIGBzY2F0dGVyX2VsZW1fc3ogIT0gc2NhdHRlcl9lbGVtX3N6X3ByZXZgIGluIGBzZ19idWlsZF9pbmRpcmVjdGAgd2lsbCB0cmlnZ2VyLiBUaGlzIGNvbXBhcmlzb24gaXMgZGFuZ2Vyb3VzIGJlY2F1c2UgYFBBR0VfU0laRWAgaXMgdW5zaWduZWQsIHNvIGNvbXBhcmluZyBzaWduZWQgbnVtYmVycyB3aXRoIGl0IHdpbGwgY29udmVydCB0aGUgc2lnbmVkIG51bWJlciB0byB1bnNpZ25lZCwgd2hpY2ggY2FuIGxlYWQgdG8gaXQgYmVpbmcgbGFyZ2VyIHRoYW4gUEFHRV9TSVpFIChiZWNhdXNlIGl0IGNhbiBiZWNvbWUgYSB2ZXJ5IGxhcmdlIHBvc2l0aXZlIG51bWJlcikuIFRoaXMgbGVhZHMgdG8gYSBjcmFzaCBiZWNhdXNlIG5lZ2F0aXZlIGBzY2F0dGVyX2VsZW1fc3pgIHZhbHVlcyBjYXVzZSB1bmRlZmluZWQgYmVoYXZpb3IgaW4gYGdldF9vcmRlcigpYC4gRXZlbiBpZiB0aGUgaW5wdXQgaXMgb25seSAqc2xpZ2h0bHkqIHNtYWxsZXIgdGhhbiBgUEFHRV9TSVpFYCwgdGhlIG9yaWdpbmFsIGNvZGUgd291bGQgbmV2ZXIgdXBkYXRlIGl0LCBzbyBgZ2V0X29yZGVyYCB3b3VsZCBzdGlsbCBoYXZlIGEgc21hbGwgbnVtYmVyLiBUaGUgZml4IHNlZW1zIHRvIGFkZHJlc3MgYm90aCBzY2VuYXJpb3MgYnkgY2FzdGluZyBgUEFHRV9TSVpFYCB0byBgaW50YCBmb3IgdGhlIGNvbXBhcmlzb24gYW5kIHVwZGF0aW5nIGBzY2F0dGVyX2VsZW1fc3pgIGFjY29yZGluZ2x5LlxuXG5TaW5jZSB0aGlzIGJ1ZyBpcyBsb2NhdGVkIGluIHRoZSBjb3JlIGBkcml2ZXJzL3Njc2kvc2cuY2AsIGl0J3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgcGF0Y2ggZGlyZWN0bHkgYWZmZWN0cyByZWFjaGFibGUgY29kZSBhbmQgaXMgdGhlcmVmb3JlIHdvcnRoIGZ1enppbmcuXG5cbk15IGFuYWx5c2lzIGFsc28gdGVsbHMgbWUgdG8gY29uZmlybSB0aGF0IHRoZSBgQ0hSX0RFVl9TR2AgYW5kIGBTQ1NJYCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSByZXF1aXJlZCB0byBlbmFibGUgdGhpcyBidWcuIEknbGwgbmVlZCB0byBlbmFibGUgYm90aC5cblxuRmluYWxseSwgSSBuZWVkIHRvIGxpc3QgZnVuY3Rpb25zIHRoYXQgaW1wbGVtZW50IHRoZSBwYXRjaGVkIGxvZ2ljIG9yIGFyZSBlbnRyeSBwb2ludHMuIFRoZSBmb2N1cyBzaG91bGQgYmUgb24gYHNnX2J1aWxkX2luZGlyZWN0YCBiZWNhdXNlIHRoaXMgaXMgd2hlcmUgdGhlIHBhdGNoIHdhcyBhcHBsaWVkLCBhbmQgYWxzbyBgc2dfYnVpbGRfcmVzZXJ2ZWAgYW5kIGBzZ19zdGFydF9yZXFgIGFzIHRoZSBjYWxsZXJzIG9mIHRoZSBmdW5jdGlvbi4gIEkgY29uZmlybWVkIHRoYXQgYHNnX2J1aWxkX2luZGlyZWN0YCBpcyAqbm90KiBpbmxpbmVkIGFuZCBpcyBhIHN1YnN0YW50aWFsIHN0YXRpYyBDIGZ1bmN0aW9uLiBJdCdzIGRlZmluaXRlbHkgbm90IHN0YXRpYyBpbmxpbmUsIHNvIGl0J3MgYSBnb29kIEZvY3VzU3ltYm9sLiBJIHdpbGwgZG91YmxlLWNoZWNrIGBkcml2ZXJzL3Njc2kvS2NvbmZpZ2AgdG8gY29uZmlybSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTczLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NjozNC4zMDUxODU2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDY0MjU0MjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNDU0lcXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Njc2lcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zY3NpL0tjb25maWc9MTg9Y29uZmlnIFNDU0lfQ09NTU9OXFxuLS1cXG5kcml2ZXJzL3Njc2kvS2NvbmZpZy0yMC1cXG5kcml2ZXJzL3Njc2kvS2NvbmZpZzoyMTpjb25maWcgU0NTSVxcbmRyaXZlcnMvc2NzaS9LY29uZmlnLTIyLVxcdHRyaXN0YXRlIFxcXCJTQ1NJIGRldmljZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NjozNC44NTE2MTk3MzJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTY2ODQwMTM0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqU2NvdXRpbmcgdGhlIFNDU0kgTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBTQ1NJIGRyaXZlciBjb25maWd1cmF0aW9uLiBNeSBpbnN0aW5jdCBzYXlzIHRvIHN0YXJ0IHdpdGggYGRyaXZlcnMvc2NzaS9LY29uZmlnYC4gTGV0J3MgemVybyBpbiBvbiBsaW5lIDIxIHdpdGhpbiB0aGF0IGZpbGUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgU0NTSSBvcHRpb25zLCBhbmQgZnJvbSB0aGVyZSBJIGNhbiBob3BlZnVsbHkgdHJhY2Ugd2hhdCdzIGVuYWJsZWQsIGRpc2FibGVkLCBhbmQgd2hhdCBteSBjdXJyZW50IGNvbmZpZ3VyYXRpb24ncyBkZWFsaW5nIHdpdGguIFVuZGVyc3RhbmRpbmcgdGhvc2UgY29yZSBLY29uZmlnIHNldHRpbmdzIGlzIGNydWNpYWwgYmVmb3JlIEkgZ2V0IGFueSBkZWVwZXIuIEknbSBob3BpbmcgSSBjYW4gZ2xlYW4gYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIG92ZXJhbGwgc2V0dXAgcXVpY2tseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4ODAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NjozNi41MjAwMjQ5NDVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxNjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvc2NzaS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDE1OlxcdFxcdGhlbHBcXG4gIDE2OlxcdFxcdCAgUHJvdmlkZXMgUkFJRFxcbiAgMTc6XFx0XFxuICAxODpcXHRjb25maWcgU0NTSV9DT01NT05cXG4gIDE5OlxcdFxcdHRyaXN0YXRlXFxuICAyMDpcXHRcXG4gIDIxOlxcdGNvbmZpZyBTQ1NJXFxuICAyMjpcXHRcXHR0cmlzdGF0ZSBcXFwiU0NTSSBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gIDIzOlxcdFxcdGRlcGVuZHMgb24gQkxPQ0tcXG4gIDI0OlxcdFxcdHNlbGVjdCBTQ1NJX0RNQSBpZiBIQVNfRE1BXFxuICAyNTpcXHRcXHRzZWxlY3QgU0dfUE9PTFxcbiAgMjY6XFx0XFx0c2VsZWN0IFNDU0lfQ09NTU9OXFxuICAyNzpcXHRcXHRzZWxlY3QgQkxLX0RFVl9CU0dfQ09NTU9OIGlmIEJMS19ERVZfQlNHXFxuICAyODpcXHRcXHRoZWxwXFxuICAyOTpcXHRcXHQgIElmIHlvdSB3YW50IHRvIHVzZSBhIFNDU0kgaGFyZCBkaXNrLCBTQ1NJIHRhcGUgZHJpdmUsIFNDU0kgQ0QtUk9NIG9yXFxuICAzMDpcXHRcXHQgIGFueSBvdGhlciBTQ1NJIGRldmljZSB1bmRlciBMaW51eCwgc2F5IFkgYW5kIG1ha2Ugc3VyZSB0aGF0IHlvdSBrbm93XFxuICAzMTpcXHRcXHQgIHRoZSBuYW1lIG9mIHlvdXIgU0NTSSBob3N0IGFkYXB0ZXIgKHRoZSBjYXJkIGluc2lkZSB5b3VyIGNvbXB1dGVyXFxuICAzMjpcXHRcXHQgIHRoYXQgXFxcInNwZWFrc1xcXCIgdGhlIFNDU0kgcHJvdG9jb2wsIGFsc28gY2FsbGVkIFNDU0kgY29udHJvbGxlciksXFxuICAzMzpcXHRcXHQgIGJlY2F1c2UgeW91IHdpbGwgYmUgYXNrZWQgZm9yIGl0LlxcbiAgMzQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjQ2OjM2LjUyMDE4OTYwNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTg4MjQ1MjM0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIENvbmZpZ3VyYXRpb25hbCBSZXF1aXJlbWVudHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGF0IGBDT05GSUdfU0NTSWAgcmVsaWVzIG9uIGBCTE9DS2AsIGFuZCB0aGVuIGBDT05GSUdfQ0hSX0RFVl9TR2AgZGVwZW5kcyBvbiBgU0NTSWAuIFNpbXBsZSBkZXBlbmRlbmN5IGNoYWluOiBgQ0hSX0RFVl9TR2AgbmVlZHMgYFNDU0lgLCB3aGljaCBuZWVkcyBgQkxPQ0tgLiBCdXQgaG9uZXN0bHksIGBCTE9DS2AgaXMgcHJldHR5IG11Y2ggYSBnaXZlbiBpbiBhbnkgc3RhbmRhcmQgTGludXgga2VybmVsIHNldHVwLiBTbywgcmVhbGx5LCB0aGUgaW1wb3J0YW50IGNvbmZpZ3VyYXRpb25zIHRvIGZvY3VzIG9uIGhlcmUgYXJlIGBDSFJfREVWX1NHYCBhbmQgYFNDU0lgLlxuXG5Ob3csIGxldCBtZSBkb3VibGUtY2hlY2sgdGhlIGBzZXQtcmVzdWx0c2AgcGFyYW1ldGVycy4gYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIGB0cnVlYCwgd2hpY2ggaXMgY29ycmVjdCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoaXMgYnVnLiBUaGUgYFJlYXNvbmluZ2Agc2VjdGlvbiBjb25jaXNlbHkgZXhwbGFpbnMgdGhhdCB0aGUgcGF0Y2ggYWRkcmVzc2VzIGEgc2lnbmVkbmVzcyBhbmQgdXBkYXRlIGJ1ZyBpbiBgc2dfYnVpbGRfaW5kaXJlY3QoKWAgd2l0aGluIHRoZSBTQ1NJIGdlbmVyaWMgZHJpdmVyLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBgc2NhdHRlcl9lbGVtX3N6YCBtb2R1bGUgcGFyYW1ldGVyIGFuZCBwb3RlbnRpYWxseSBpbnZhbGlkIHBhZ2Ugb3JkZXIgY2FsY3VsYXRpb25zLiBUaGUganVzdGlmaWNhdGlvbiBmb3IgZnV6emluZyBpcyBzb3VuZCwgYW5kIHRoZSBzdGF0ZW1lbnQgdGhhdCB0aGUgU0NTSSBnZW5lcmljIGRyaXZlciBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHdpdGggZW11bGF0ZWQgU0NTSSBkZXZpY2VzIGlzIGFic29sdXRlbHkgc3BvdC1vbiBhbmQgcmVsZXZhbnQgdG8gdGhlIGZ1enppbmcgc3RyYXRlZ3kuXG5cbkZpbmFsbHksIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0LCB3aXRoIGBzZ19idWlsZF9pbmRpcmVjdGAsIGBzZ19idWlsZF9yZXNlcnZlYCwgYW5kIGBzZ19zdGFydF9yZXFgIGFsbCBzZWVtIHByZWNpc2VseSB0YXJnZXRlZCBhdCB0aGUgY29yZSBhcmVhcyBhZmZlY3RlZCBieSB0aGlzIGJ1Zy4gQW5kIGBFbmFibGVDb25maWdzYCBjb3JyZWN0bHkgcG9pbnRzIHRvIHRoZSByZXF1aXJlZCBjb25maWdzIHRoYXQgdHJpZ2dlciB0aGUgY29kZSBpbiBxdWVzdGlvbi5cblxuWWVwLCBldmVyeXRoaW5nIGNoZWNrcyBvdXQuIExldCdzIGV4ZWN1dGUgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzMjgsIk91dHB1dFRva2VucyI6MTMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDY6NTguNDAyNjQ0ODM0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1NDM1MzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDSFJfREVWX1NHXCIsXG4gICAgXCJTQ1NJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2dfYnVpbGRfaW5kaXJlY3RcIixcbiAgICBcInNnX2J1aWxkX3Jlc2VydmVcIixcbiAgICBcInNnX3N0YXJ0X3JlcVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHNnX2J1aWxkX2luZGlyZWN0KCkgaW4gdGhlIFNDU0kgZ2VuZXJpYyAoc2cpIGRyaXZlciB0byBwcm9wZXJseSBjbGFtcCBzY2F0dGVyX2VsZW1fc3ogd2hlbiBpdCBpcyBzbWFsbGVyIHRoYW4gUEFHRV9TSVpFIG9yIG5lZ2F0aXZlIChwcmV2ZW50aW5nIHNpZ25lZCBpbnRlZ2VyIGNvbXBhcmlzb24gaXNzdWVzIGFuZCBpbnZhbGlkIHBhZ2Ugb3JkZXJzIGZvciBnZXRfb3JkZXIpLiBUaGUgc2cgZHJpdmVyIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2l0aCBlbXVsYXRlZCBTQ1NJIGRldmljZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0hSX0RFVl9TR1wiLFxuICAgIFwiU0NTSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNnX2J1aWxkX2luZGlyZWN0XCIsXG4gICAgXCJzZ19idWlsZF9yZXNlcnZlXCIsXG4gICAgXCJzZ19zdGFydF9yZXFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzZ19idWlsZF9pbmRpcmVjdCgpIGluIHRoZSBTQ1NJIGdlbmVyaWMgKHNnKSBkcml2ZXIgdG8gcHJvcGVybHkgY2xhbXAgc2NhdHRlcl9lbGVtX3N6IHdoZW4gaXQgaXMgc21hbGxlciB0aGFuIFBBR0VfU0laRSBvciBuZWdhdGl2ZSAocHJldmVudGluZyBzaWduZWQgaW50ZWdlciBjb21wYXJpc29uIGlzc3VlcyBhbmQgaW52YWxpZCBwYWdlIG9yZGVycyBmb3IgZ2V0X29yZGVyKS4gVGhlIHNnIGRyaXZlciBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHdpdGggZW11bGF0ZWQgU0NTSSBkZXZpY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0Njo1OC41NDgwODk5MDNaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzQzMTM4OTYwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjQ2OjU4LjU0ODc2NTQ1M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEzNzQzMDcwNzk2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBzaWduZWRuZXNzIGlzc3VlIGluIGRyaXZlcnMvc2NzaS9zZy5jIChzZ19idWlsZF9pbmRpcmVjdCkuIFNwZWNpZmljYWxseSwgY29tcGFyaW5nIHRoZSBzaWduZWQgaW50ICdudW0nIHRvIHVuc2lnbmVkIGxvbmcgJ1BBR0VfU0laRScgcmVzdWx0ZWQgaW4gc2lnbmVkLXRvLXVuc2lnbmVkIHR5cGUgcHJvbW90aW9uLCBhbGxvd2luZyBuZWdhdGl2ZSB2YWx1ZXMgb2YgdGhlICdzY2F0dGVyX2VsZW1fc3onIG1vZHVsZSBwYXJhbWV0ZXIgdG8gYnlwYXNzIHRoZSBtaW5pbXVtIGJvdW5kIGNoZWNrIGFuZCBsZWFkIHRvIGludmFsaWQgcGFnZSBhbGxvY2F0aW9uIG9yZGVycyBhbmQgdW5kZWZpbmVkIHNoaWZ0IGJlaGF2aW9yLiBUaGUgcGF0Y2ggY2FzdHMgUEFHRV9TSVpFIHRvIGludCBhbmQgc2V0cyBudW0gPSBQQUdFX1NJWkUgd2hlbiBudW0gXFx1MDAzYyAoaW50KVBBR0VfU0laRS5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OlxcbjEuICdudW0nIGFuZCAnc2NhdHRlcl9lbGVtX3N6JyBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgdmFsdWVzLlxcbjIuIFRoZSBzY2F0dGVyLWdhdGhlciBidWZmZXIgYWxsb2NhdGlvbnMgaW4gc2dfYnVpbGRfaW5kaXJlY3QgdXNlIGt6YWxsb2MgZm9yIHRoZSBwb2ludGVyIGFycmF5IGFuZCBfX0dGUF9aRVJPIGZvciB0aGUgdW5kZXJseWluZyBwYWdlIGFsbG9jYXRpb25zLlxcbjMuIE5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgc3RhY2sgdmFyaWFibGVzLCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgY29waWVkIHRvIHVzZXJzcGFjZSBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLlxcbkFueSBwb3RlbnRpYWwgaXNzdWVzIGZyb20gdGhlIGJ1ZyAoc3VjaCBhcyBpbnZhbGlkIGFsbG9jYXRpb24gb3JkZXJzIG9yIHNoaWZ0cykgZmFsbCB1bmRlciBzdGFuZGFyZCBVQlNBTi9LQVNBTiBkZXRlY3Rpb24gcmF0aGVyIHRoYW4gS01TQU4gdW5pbml0aWFsaXplZCBtZW1vcnkgdHJhY2tpbmcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDEzNTI5NDg5ZjZjY2U0MjUwZjM3NTk4NzM2YzY5ZmViZWYzMGI4OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDE0IDA4OjQ0OjIzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NnLmMgYi9kcml2ZXJzL3Njc2kvc2cuY1xuaW5kZXggNTQwOGYwMDJlNmMwMS4uMzljOGU1MmZhNmZmNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvc2NzaS9zZy5jXG4rKysgYi9kcml2ZXJzL3Njc2kvc2cuY1xuQEAgLTE4NzUsOSArMTg3NSwxMCBAQCBzZ19idWlsZF9pbmRpcmVjdChTZ19zY2F0dGVyX2hvbGQgKiBzY2hwLCBTZ19mZCAqIHNmcCwgaW50IGJ1ZmZfc2l6ZSlcbiBcbiBcdG51bSA9IHNjYXR0ZXJfZWxlbV9zejtcbiBcdGlmICh1bmxpa2VseShudW0gIT0gc2NhdHRlcl9lbGVtX3N6X3ByZXYpKSB7XG4tXHRcdGlmIChudW0gXHUwMDNjIFBBR0VfU0laRSkge1xuK1x0XHRpZiAobnVtIFx1MDAzYyAoaW50KVBBR0VfU0laRSkge1xuIFx0XHRcdHNjYXR0ZXJfZWxlbV9zeiA9IFBBR0VfU0laRTtcbiBcdFx0XHRzY2F0dGVyX2VsZW1fc3pfcHJldiA9IFBBR0VfU0laRTtcbitcdFx0XHRudW0gPSBQQUdFX1NJWkU7XG4gXHRcdH0gZWxzZVxuIFx0XHRcdHNjYXR0ZXJfZWxlbV9zel9wcmV2ID0gbnVtO1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDY6NTguNTQ4NzY2NTUzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjk4MDYzNzUyNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTQ1NJIEdlbmVyaWMgRHJpdmVyKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoaXMuIFRoZSBkaWZmIHBvaW50cyB1cyBkaXJlY3RseSB0byBgZHJpdmVycy9zY3NpL3NnLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTg3NS4gVGhpcyBwcm9iYWJseSBtZWFucyBhIHNwZWNpZmljIGNoYW5nZSB3YXMgbWFkZSBpbiB0aGlzIGFyZWEgb2YgdGhlIGRyaXZlciwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGN1cnJlbnQgY29kZS4gSSdsbCBzdGFydCBieSB1c2luZyB0aGUgYHJlYWQtZmlsZWAgY29tbWFuZCB0byBwdWxsIHRoZSBjb2RlIGFyb3VuZCB0aGF0IGxpbmUgaW50byB2aWV3LiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgaW1tZWRpYXRlIGNvbnRleHQgSSBuZWVkIOKAkyB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb25zLCB2YXJpYWJsZXMsIGFuZCBwb3RlbnRpYWwgZGF0YSBzdHJ1Y3R1cmVzIOKAkyBiZWZvcmUgSSB0cnkgdG8gaW50ZXJwcmV0IHRoZSBkaWZmIGl0c2VsZi4gSSdtIGxvb2tpbmcgZm9yIHRoZSBcImJlZm9yZVwiIHN0YXRlIHRvIHVuZGVyc3RhbmQgdGhlIFwiYWZ0ZXJcIiBzdGF0ZS4gVGhpcyBhcHByb2FjaCBoZWxwcyBtZSBxdWlja2x5IGdyYXNwIHRoZSBpbXBhY3QgYW5kIHJlYXNvbmluZyBiZWhpbmQgdGhlIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEyMiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDc6MDguMzU1MTQ1MTM5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODkzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Njc2kvc2cuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODYwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODYwOlxcdFxcbjE4NjE6XFx0XFx0aWYgKGJsa19zaXplIFxcdTAwM2MgMClcXG4xODYyOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjE4NjM6XFx0XFx0aWYgKDAgPT0gYmxrX3NpemUpXFxuMTg2NDpcXHRcXHRcXHQrK2Jsa19zaXplO1xcdC8qIGRvbid0IGtub3cgd2h5ICovXFxuMTg2NTpcXHRcXHQvKiByb3VuZCByZXF1ZXN0IHVwIHRvIG5leHQgaGlnaGVzdCBTR19TRUNUT1JfU1ogYnl0ZSBib3VuZGFyeSAqL1xcbjE4NjY6XFx0XFx0YmxrX3NpemUgPSBBTElHTihibGtfc2l6ZSwgU0dfU0VDVE9SX1NaKTtcXG4xODY3OlxcdFxcdFNDU0lfTE9HX1RJTUVPVVQoNCwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc2ZwLVxcdTAwM2VwYXJlbnRkcCxcXG4xODY4OlxcdFxcdFxcdFxcXCJzZ19idWlsZF9pbmRpcmVjdDogYnVmZl9zaXplPSVkLCBibGtfc2l6ZT0lZFxcXFxuXFxcIixcXG4xODY5OlxcdFxcdFxcdGJ1ZmZfc2l6ZSwgYmxrX3NpemUpKTtcXG4xODcwOlxcdFxcbjE4NzE6XFx0XFx0LyogTi5CLiByZXRfc3ogY2FycmllZCBpbnRvIHRoaXMgYmxvY2sgLi4uICovXFxuMTg3MjpcXHRcXHRteF9zY19lbGVtcyA9IHNnX2J1aWxkX3NnYXQoc2NocCwgc2ZwLCBzZ190YWJsZXNpemUpO1xcbjE4NzM6XFx0XFx0aWYgKG14X3NjX2VsZW1zIFxcdTAwM2MgMClcXG4xODc0OlxcdFxcdFxcdHJldHVybiBteF9zY19lbGVtcztcXHQvKiBtb3N0IGxpa2VseSAtRU5PTUVNICovXFxuMTg3NTpcXHRcXG4xODc2OlxcdFxcdG51bSA9IHNjYXR0ZXJfZWxlbV9zejtcXG4xODc3OlxcdFxcdGlmICh1bmxpa2VseShudW0gIT0gc2NhdHRlcl9lbGVtX3N6X3ByZXYpKSB7XFxuMTg3ODpcXHRcXHRcXHRpZiAobnVtIFxcdTAwM2MgKGludClQQUdFX1NJWkUpIHtcXG4xODc5OlxcdFxcdFxcdFxcdHNjYXR0ZXJfZWxlbV9zeiA9IFBBR0VfU0laRTtcXG4xODgwOlxcdFxcdFxcdFxcdHNjYXR0ZXJfZWxlbV9zel9wcmV2ID0gUEFHRV9TSVpFO1xcbjE4ODE6XFx0XFx0XFx0XFx0bnVtID0gUEFHRV9TSVpFO1xcbjE4ODI6XFx0XFx0XFx0fSBlbHNlXFxuMTg4MzpcXHRcXHRcXHRcXHRzY2F0dGVyX2VsZW1fc3pfcHJldiA9IG51bTtcXG4xODg0OlxcdFxcdH1cXG4xODg1OlxcdFxcbjE4ODY6XFx0XFx0b3JkZXIgPSBnZXRfb3JkZXIobnVtKTtcXG4xODg3OlxcdHJldHJ5OlxcbjE4ODg6XFx0XFx0cmV0X3N6ID0gMSBcXHUwMDNjXFx1MDAzYyAoUEFHRV9TSElGVCArIG9yZGVyKTtcXG4xODg5OlxcdFxcbjE4OTA6XFx0XFx0Zm9yIChrID0gMCwgcmVtX3N6ID0gYmxrX3NpemU7IHJlbV9zeiBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgayBcXHUwMDNjIG14X3NjX2VsZW1zO1xcbjE4OTE6XFx0XFx0ICAgICBrKyssIHJlbV9zeiAtPSByZXRfc3opIHtcXG4xODkyOlxcdFxcbjE4OTM6XFx0XFx0XFx0bnVtID0gKHJlbV9zeiBcXHUwMDNlIHNjYXR0ZXJfZWxlbV9zel9wcmV2KSA/XFxuMTg5NDpcXHRcXHRcXHRcXHRzY2F0dGVyX2VsZW1fc3pfcHJldiA6IHJlbV9zejtcXG4xODk1OlxcdFxcbjE4OTY6XFx0XFx0XFx0c2NocC1cXHUwMDNlcGFnZXNba10gPSBhbGxvY19wYWdlcyhnZnBfbWFzaywgb3JkZXIpO1xcbjE4OTc6XFx0XFx0XFx0aWYgKCFzY2hwLVxcdTAwM2VwYWdlc1trXSlcXG4xODk4OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjE4OTk6XFx0XFxuMTkwMDpcXHRcXHRcXHRpZiAobnVtID09IHNjYXR0ZXJfZWxlbV9zel9wcmV2KSB7XFxuMTkwMTpcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkocmV0X3N6IFxcdTAwM2Ugc2NhdHRlcl9lbGVtX3N6X3ByZXYpKSB7XFxuMTkwMjpcXHRcXHRcXHRcXHRcXHRzY2F0dGVyX2VsZW1fc3ogPSByZXRfc3o7XFxuMTkwMzpcXHRcXHRcXHRcXHRcXHRzY2F0dGVyX2VsZW1fc3pfcHJldiA9IHJldF9zejtcXG4xOTA0OlxcdFxcdFxcdFxcdH1cXG4xOTA1OlxcdFxcdFxcdH1cXG4xOTA2OlxcdFxcbjE5MDc6XFx0XFx0XFx0U0NTSV9MT0dfVElNRU9VVCg1LCBzZ19wcmludGsoS0VSTl9JTkZPLCBzZnAtXFx1MDAzZXBhcmVudGRwLFxcbjE5MDg6XFx0XFx0XFx0XFx0XFx0IFxcXCJzZ19idWlsZF9pbmRpcmVjdDogaz0lZCwgbnVtPSVkLCByZXRfc3o9JWRcXFxcblxcXCIsXFxuMTkwOTpcXHRcXHRcXHRcXHRcXHQgaywgbnVtLCByZXRfc3opKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDc6MDguMzU1Mjg2NTE5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUwNzQ5MzEwMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbjogc2dfYnVpbGRfaW5kaXJlY3QqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGJhY2sgaW50byB0aGlzLiBJJ20gZ29pbmcgdG8gcmV2aXNpdCBgc2dfYnVpbGRfaW5kaXJlY3RgLiBJJ3ZlIGdvdCBhIGdvb2QgZ3Jhc3Agb2YgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQsIGJ1dCBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYW5kIHRoZSBleGFjdCBmdW5jdGlvbiBvZiBgc2dfYnVpbGRfaW5kaXJlY3RgLiBJIGtub3cgaXQncyBhIGtleSBwaWVjZSwgYW5kIEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBzbyBJIGNhbiB1bmRlcnN0YW5kIGFueSByZWxhdGVkIGNvZGUgY2hhbmdlcy4gSSdtIGxvb2tpbmcgZm9yIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscyBvZiBpdHMgYmVoYXZpb3I6IGl0cyBpbnB1dHMsIG91dHB1dHMsIHNpZGUgZWZmZWN0cywgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBzeXN0ZW0uIEknbGwgZm9jdXMgb24gaG93IHRoZSBjb2RlIGltcGxlbWVudHMgdGhlIGNvbmNlcHRzIEkgdW5kZXJzdGFuZCwgYW5kIGFueSBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpY3MgdGhhdCBhcmUgbmV3IHRvIG1lLiBFc3NlbnRpYWxseSwgSSdtIHJlYWR5IHRvIHJlLWV4YW1pbmUgdGhlIG1lY2hhbmljcyBvZiB0aGlzIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjM3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NzoxMy40MzAyMjA3NTVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3NDExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvc2NzaS9zZy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4MzA6XFx0XFx0XFx0YmxrX21xX2ZyZWVfcmVxdWVzdChzcnAtXFx1MDAzZXJxKTtcXG4xODMxOlxcdFxcbjE4MzI6XFx0XFx0aWYgKHNycC1cXHUwMDNlcmVzX3VzZWQpXFxuMTgzMzpcXHRcXHRcXHRzZ191bmxpbmtfcmVzZXJ2ZShzZnAsIHNycCk7XFxuMTgzNDpcXHRcXHRlbHNlXFxuMTgzNTpcXHRcXHRcXHRzZ19yZW1vdmVfc2NhdChzZnAsIHJlcV9zY2hwKTtcXG4xODM2OlxcdFxcbjE4Mzc6XFx0XFx0cmV0dXJuIHJldDtcXG4xODM4OlxcdH1cXG4xODM5OlxcdFxcbjE4NDA6XFx0c3RhdGljIGludFxcbjE4NDE6XFx0c2dfYnVpbGRfc2dhdChTZ19zY2F0dGVyX2hvbGQgKiBzY2hwLCBjb25zdCBTZ19mZCAqIHNmcCwgaW50IHRhYmxlc2l6ZSlcXG4xODQyOlxcdHtcXG4xODQzOlxcdFxcdGludCBzZ19idWZmbGVuID0gdGFibGVzaXplICogc2l6ZW9mKHN0cnVjdCBwYWdlICopO1xcbjE4NDQ6XFx0XFx0Z2ZwX3QgZ2ZwX2ZsYWdzID0gR0ZQX0FUT01JQyB8IF9fR0ZQX05PV0FSTjtcXG4xODQ1OlxcdFxcbjE4NDY6XFx0XFx0c2NocC1cXHUwMDNlcGFnZXMgPSBremFsbG9jKHNnX2J1ZmZsZW4sIGdmcF9mbGFncyk7XFxuMTg0NzpcXHRcXHRpZiAoIXNjaHAtXFx1MDAzZXBhZ2VzKVxcbjE4NDg6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTg0OTpcXHRcXHRzY2hwLVxcdTAwM2VzZ2xpc3RfbGVuID0gc2dfYnVmZmxlbjtcXG4xODUwOlxcdFxcdHJldHVybiB0YWJsZXNpemU7XFx0LyogbnVtYmVyIG9mIHNjYXRfZ2F0aCBlbGVtZW50cyBhbGxvY2F0ZWQgKi9cXG4xODUxOlxcdH1cXG4xODUyOlxcdFxcbjE4NTM6XFx0c3RhdGljIGludFxcbjE4NTQ6XFx0c2dfYnVpbGRfaW5kaXJlY3QoU2dfc2NhdHRlcl9ob2xkICogc2NocCwgU2dfZmQgKiBzZnAsIGludCBidWZmX3NpemUpXFxuMTg1NTpcXHR7XFxuMTg1NjpcXHRcXHRpbnQgcmV0X3N6ID0gMCwgaSwgaywgcmVtX3N6LCBudW0sIG14X3NjX2VsZW1zO1xcbjE4NTc6XFx0XFx0aW50IHNnX3RhYmxlc2l6ZSA9IHNmcC1cXHUwMDNlcGFyZW50ZHAtXFx1MDAzZXNnX3RhYmxlc2l6ZTtcXG4xODU4OlxcdFxcdGludCBibGtfc2l6ZSA9IGJ1ZmZfc2l6ZSwgb3JkZXI7XFxuMTg1OTpcXHRcXHRnZnBfdCBnZnBfbWFzayA9IEdGUF9BVE9NSUMgfCBfX0dGUF9DT01QIHwgX19HRlBfTk9XQVJOIHwgX19HRlBfWkVSTztcXG4xODYwOlxcdFxcbjE4NjE6XFx0XFx0aWYgKGJsa19zaXplIFxcdTAwM2MgMClcXG4xODYyOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjE4NjM6XFx0XFx0aWYgKDAgPT0gYmxrX3NpemUpXFxuMTg2NDpcXHRcXHRcXHQrK2Jsa19zaXplO1xcdC8qIGRvbid0IGtub3cgd2h5ICovXFxuMTg2NTpcXHRcXHQvKiByb3VuZCByZXF1ZXN0IHVwIHRvIG5leHQgaGlnaGVzdCBTR19TRUNUT1JfU1ogYnl0ZSBib3VuZGFyeSAqL1xcbjE4NjY6XFx0XFx0YmxrX3NpemUgPSBBTElHTihibGtfc2l6ZSwgU0dfU0VDVE9SX1NaKTtcXG4xODY3OlxcdFxcdFNDU0lfTE9HX1RJTUVPVVQoNCwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc2ZwLVxcdTAwM2VwYXJlbnRkcCxcXG4xODY4OlxcdFxcdFxcdFxcXCJzZ19idWlsZF9pbmRpcmVjdDogYnVmZl9zaXplPSVkLCBibGtfc2l6ZT0lZFxcXFxuXFxcIixcXG4xODY5OlxcdFxcdFxcdGJ1ZmZfc2l6ZSwgYmxrX3NpemUpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDc6MTMuNDMwNDEyMDg2WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQwMjc3MTIxMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcsIHBpY2tpbmcgdXAgZnJvbSBsaW5lIDE5MTAgb253YXJkcyB3aXRoaW4gYHNnX2J1aWxkX2luZGlyZWN0YDpcblxuKipFeGFtaW5pbmcgdGhlIFRhaWwgRW5kIG9mIHNnX2J1aWxkX2luZGlyZWN0KipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBiYWNrIGludG8gYHNnX2J1aWxkX2luZGlyZWN0YCwgc3BlY2lmaWNhbGx5IGZyb20gbGluZSAxOTEwLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgZnVuY3Rpb24gY29uY2x1ZGVzIGl0cyB3b3JrLiBJIHJlbWVtYmVyIHRoZSBjb3JlIG9mIGl0IGlzIHNldHRpbmcgdXAgdGhlIGluZGlyZWN0IGJ1ZmZlciwgYnV0IHRoZSBkZXRhaWxzIG9mIHRoZSBmaW5hbCBzdGVwcyBhcmUgYSBiaXQgaGF6eS4gSSdtIGZvY3VzaW5nIG9uIHdoYXQgaGFwcGVucyAqYWZ0ZXIqIHRoZSBtYWluIGJ1ZmZlciBzZXR1cCwgY2hlY2tpbmcgZm9yIGFueSBlZGdlIGNhc2VzLCBlcnJvciBoYW5kbGluZywgb3IgY2xlYW51cCBwcm9jZWR1cmVzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHdoZXJlIHRoZSBmdW5jdGlvbiByZXR1cm5zLCB3aGF0IHZhbHVlcyBpdCdzIHJldHVybmluZywgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucy4gQXJlIHRoZXJlIGFueSBmaW5hbCBjaGVja3Mgb3Igc2FuaXR5IHZhbGlkYXRpb25zIGhhcHBlbmluZyBiZWZvcmUgdGhlIGRhdGEgaXMgaGFuZGVkIG9mZj8gRG9lcyBpdCByZXR1cm4gYSBzdWNjZXNzIG9yIGZhaWx1cmUgY29kZT8gSSdtIGFudGljaXBhdGluZyB0aGF0IHRoaXMgaXMgd2hlcmUgYW55IGZpbmFsIHJlc291cmNlIG1hbmFnZW1lbnQgaGFwcGVucyBhcyB3ZWxsLCBtYXliZSBmcmVlaW5nIGFsbG9jYXRlZCBtZW1vcnkgb3IgcmVsZWFzaW5nIGxvY2tzIGlmIG5lY2Vzc2FyeS4gSXQncyB0aGUgY3JpdGljYWwgY2xvc2luZyBzdGF0ZW1lbnQsIGFuZCB1bmRlcnN0YW5kaW5nIGl0IGlzIHZpdGFsIGZvciBlbnN1cmluZyB0aGUgcm9idXN0bmVzcyBvZiB0aGlzIHN5c3RlbS4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgaG93IHRvIGRlYWwgd2l0aCB0aGUgcmVzdWx0cywgc28gSSBjYW4gZW5zdXJlIHByb3BlciBvcGVyYXRpb24gaW4gYSBsYXJnZXIgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE5NCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDc6MTcuNDU4MTI2ODIyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0Mzg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3Njc2kvc2cuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTEwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxOTEwOlxcdFxcdH1cXHRcXHQvKiBlbmQgb2YgZm9yIGxvb3AgKi9cXG4xOTExOlxcdFxcbjE5MTI6XFx0XFx0c2NocC1cXHUwMDNlcGFnZV9vcmRlciA9IG9yZGVyO1xcbjE5MTM6XFx0XFx0c2NocC1cXHUwMDNla191c2Vfc2cgPSBrO1xcbjE5MTQ6XFx0XFx0U0NTSV9MT0dfVElNRU9VVCg1LCBzZ19wcmludGsoS0VSTl9JTkZPLCBzZnAtXFx1MDAzZXBhcmVudGRwLFxcbjE5MTU6XFx0XFx0XFx0XFx0IFxcXCJzZ19idWlsZF9pbmRpcmVjdDoga191c2Vfc2c9JWQsIHJlbV9zej0lZFxcXFxuXFxcIixcXG4xOTE2OlxcdFxcdFxcdFxcdCBrLCByZW1fc3opKTtcXG4xOTE3OlxcdFxcbjE5MTg6XFx0XFx0c2NocC1cXHUwMDNlYnVmZmxlbiA9IGJsa19zaXplO1xcbjE5MTk6XFx0XFx0aWYgKHJlbV9zeiBcXHUwMDNlIDApXFx0LyogbXVzdCBoYXZlIGZhaWxlZCAqL1xcbjE5MjA6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTkyMTpcXHRcXHRyZXR1cm4gMDtcXG4xOTIyOlxcdG91dDpcXG4xOTIzOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBrOyBpKyspXFxuMTkyNDpcXHRcXHRcXHRfX2ZyZWVfcGFnZXMoc2NocC1cXHUwMDNlcGFnZXNbaV0sIG9yZGVyKTtcXG4xOTI1OlxcdFxcbjE5MjY6XFx0XFx0aWYgKC0tb3JkZXIgXFx1MDAzZT0gMClcXG4xOTI3OlxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuMTkyODpcXHRcXG4xOTI5OlxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjE5MzA6XFx0fVxcbjE5MzE6XFx0XFxuMTkzMjpcXHRzdGF0aWMgdm9pZFxcbjE5MzM6XFx0c2dfcmVtb3ZlX3NjYXQoU2dfZmQgKiBzZnAsIFNnX3NjYXR0ZXJfaG9sZCAqIHNjaHApXFxuMTkzNDpcXHR7XFxuMTkzNTpcXHRcXHRTQ1NJX0xPR19USU1FT1VUKDQsIHNnX3ByaW50ayhLRVJOX0lORk8sIHNmcC1cXHUwMDNlcGFyZW50ZHAsXFxuMTkzNjpcXHRcXHRcXHRcXHQgXFxcInNnX3JlbW92ZV9zY2F0OiBrX3VzZV9zZz0lZFxcXFxuXFxcIiwgc2NocC1cXHUwMDNla191c2Vfc2cpKTtcXG4xOTM3OlxcdFxcdGlmIChzY2hwLVxcdTAwM2VwYWdlcyBcXHUwMDI2XFx1MDAyNiBzY2hwLVxcdTAwM2VzZ2xpc3RfbGVuIFxcdTAwM2UgMCkge1xcbjE5Mzg6XFx0XFx0XFx0aWYgKCFzY2hwLVxcdTAwM2VkaW9faW5fdXNlKSB7XFxuMTkzOTpcXHRcXHRcXHRcXHRpbnQgaztcXG4xOTQwOlxcdFxcbjE5NDE6XFx0XFx0XFx0XFx0Zm9yIChrID0gMDsgayBcXHUwMDNjIHNjaHAtXFx1MDAzZWtfdXNlX3NnIFxcdTAwMjZcXHUwMDI2IHNjaHAtXFx1MDAzZXBhZ2VzW2tdOyBrKyspIHtcXG4xOTQyOlxcdFxcdFxcdFxcdFxcdFNDU0lfTE9HX1RJTUVPVVQoNSxcXG4xOTQzOlxcdFxcdFxcdFxcdFxcdFxcdHNnX3ByaW50ayhLRVJOX0lORk8sIHNmcC1cXHUwMDNlcGFyZW50ZHAsXFxuMTk0NDpcXHRcXHRcXHRcXHRcXHRcXHRcXFwic2dfcmVtb3ZlX3NjYXQ6IGs9JWQsIHBnPTB4JXBcXFxcblxcXCIsXFxuMTk0NTpcXHRcXHRcXHRcXHRcXHRcXHRrLCBzY2hwLVxcdTAwM2VwYWdlc1trXSkpO1xcbjE5NDY6XFx0XFx0XFx0XFx0XFx0X19mcmVlX3BhZ2VzKHNjaHAtXFx1MDAzZXBhZ2VzW2tdLCBzY2hwLVxcdTAwM2VwYWdlX29yZGVyKTtcXG4xOTQ3OlxcdFxcdFxcdFxcdH1cXG4xOTQ4OlxcdFxcbjE5NDk6XFx0XFx0XFx0XFx0a2ZyZWUoc2NocC1cXHUwMDNlcGFnZXMpO1xcbjE5NTA6XFx0XFx0XFx0fVxcbjE5NTE6XFx0XFx0fVxcbjE5NTI6XFx0XFx0bWVtc2V0KHNjaHAsIDAsIHNpemVvZiAoKnNjaHApKTtcXG4xOTUzOlxcdH1cXG4xOTU0OlxcdFxcbjE5NTU6XFx0c3RhdGljIGludFxcbjE5NTY6XFx0c2dfcmVhZF9veGZlcihTZ19yZXF1ZXN0ICogc3JwLCBjaGFyIF9fdXNlciAqb3V0cCwgaW50IG51bV9yZWFkX3hmZXIpXFxuMTk1NzpcXHR7XFxuMTk1ODpcXHRcXHRTZ19zY2F0dGVyX2hvbGQgKnNjaHAgPSBcXHUwMDI2c3JwLVxcdTAwM2VkYXRhO1xcbjE5NTk6XFx0XFx0aW50IGssIG51bTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDc6MTcuNDU4MjcyODAyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc2NDI3MDQyNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBPcmlnaW4gYW5kIFVzYWdlIG9mIGBzY2F0dGVyX2VsZW1fc3pgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBkZXRhaWxzIHN1cnJvdW5kaW5nIGBzY2F0dGVyX2VsZW1fc3pgLiBNeSBpbml0aWFsIGZvY3VzIGlzIHRvIHRyYWNlIGl0cyBwcm92ZW5hbmNlIGFuZCB1bmRlcnN0YW5kIGl0cyBleGFjdCBkZWZpbml0aW9uLiBJIG5lZWQgdG8ga25vdyB3aGVyZSB0aGlzIHZhcmlhYmxlIGlzIGRlY2xhcmVkLCBpbml0aWFsaXplZCwgYW5kLCBjcml0aWNhbGx5LCBob3cgaXQncyB1bHRpbWF0ZWx5IHVzZWQgd2l0aGluIHRoZSBjb2RlLiBDb250ZXh0IGlzIGtpbmcsIGFuZCBrbm93aW5nIHRoZSBzY29wZSBhbmQgcG90ZW50aWFsIGRlcGVuZGVuY2llcyB3aWxsIGJlIGNydWNpYWwgZm9yIGEgdGhvcm91Z2ggZ3Jhc3Agb2YgaXRzIGZ1bmN0aW9uLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCBhbnkgaW5jbHVkZSBmaWxlcywgZnVuY3Rpb24gY2FsbHMsIGFuZCBhc3NpZ25tZW50cyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4gTXkgZ29hbCBpcyBhIGdyYW51bGFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGludGVuZGVkIHNlbWFudGljcyBvZiBgc2NhdHRlcl9lbGVtX3N6YCBpbiB0aGUgZ3JlYXRlciBzeXN0ZW0gYXJjaGl0ZWN0dXJlIGFuZCBob3cgaXQgbWlnaHQgaW1wYWN0IHJlc291cmNlIHV0aWxpemF0aW9uIG9yIHBlcmZvcm1hbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzI0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0NzoyNS4xMDA5ODExNTJaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMTkwMjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNjYXR0ZXJfZWxlbV9zelwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3Njc2kvc2cuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Njc2kvc2cuYz05Mj1zdGF0aWMgaW50IHNnX2FsbG93X2RpbyA9IFNHX0FMTE9XX0RJT19ERUY7XFxuZHJpdmVycy9zY3NpL3NnLmMtOTMtXFxuZHJpdmVycy9zY3NpL3NnLmM6OTQ6c3RhdGljIGludCBzY2F0dGVyX2VsZW1fc3ogPSBTR19TQ0FUVEVSX1NaO1xcbmRyaXZlcnMvc2NzaS9zZy5jOjk1OnN0YXRpYyBpbnQgc2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBTR19TQ0FUVEVSX1NaO1xcbmRyaXZlcnMvc2NzaS9zZy5jLTk2LVxcbi0tXFxuZHJpdmVycy9zY3NpL3NnLmM9MTU5MD1zZ19yZW1vdmVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmNsX2RldilcXG4tLVxcbmRyaXZlcnMvc2NzaS9zZy5jLTE2MjMtXFxuZHJpdmVycy9zY3NpL3NnLmM6MTYyNDptb2R1bGVfcGFyYW1fbmFtZWQoc2NhdHRlcl9lbGVtX3N6LCBzY2F0dGVyX2VsZW1fc3osIGludCwgU19JUlVHTyB8IFNfSVdVU1IpO1xcbmRyaXZlcnMvc2NzaS9zZy5jLTE2MjUtbW9kdWxlX3BhcmFtX25hbWVkKGFsbG93X2Rpbywgc2dfYWxsb3dfZGlvLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTtcXG4tLVxcbmRyaXZlcnMvc2NzaS9zZy5jPTE2NTg9TU9EVUxFX0FMSUFTX0NIQVJERVZfTUFKT1IoU0NTSV9HRU5FUklDX01BSk9SKTtcXG5kcml2ZXJzL3Njc2kvc2cuYy0xNjU5LVxcbmRyaXZlcnMvc2NzaS9zZy5jOjE2NjA6TU9EVUxFX1BBUk1fREVTQyhzY2F0dGVyX2VsZW1fc3osIFxcXCJzY2F0dGVyIGdhdGhlciBlbGVtZW50IFxcXCJcXG5kcml2ZXJzL3Njc2kvc2cuYy0xNjYxLSAgICAgICAgICAgICAgICBcXFwic2l6ZSAoZGVmYXVsdDogbWF4KFNHX1NDQVRURVJfU1osIFBBR0VfU0laRSkpXFxcIik7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2cuYz0xNjY2PWluaXRfc2codm9pZClcXG4tLVxcbmRyaXZlcnMvc2NzaS9zZy5jLTE2NjktXFxuZHJpdmVycy9zY3NpL3NnLmM6MTY3MDpcXHRpZiAoc2NhdHRlcl9lbGVtX3N6IFxcdTAwM2MgUEFHRV9TSVpFKSB7XFxuZHJpdmVycy9zY3NpL3NnLmM6MTY3MTpcXHRcXHRzY2F0dGVyX2VsZW1fc3ogPSBQQUdFX1NJWkU7XFxuZHJpdmVycy9zY3NpL3NnLmM6MTY3MjpcXHRcXHRzY2F0dGVyX2VsZW1fc3pfcHJldiA9IHNjYXR0ZXJfZWxlbV9zejtcXG5kcml2ZXJzL3Njc2kvc2cuYy0xNjczLVxcdH1cXG4tLVxcbmRyaXZlcnMvc2NzaS9zZy5jPTE4NTQ9c2dfYnVpbGRfaW5kaXJlY3QoU2dfc2NhdHRlcl9ob2xkICogc2NocCwgU2dfZmQgKiBzZnAsIGludCBidWZmX3NpemUpXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2cuYy0xODc1LVxcbmRyaXZlcnMvc2NzaS9zZy5jOjE4NzY6XFx0bnVtID0gc2NhdHRlcl9lbGVtX3N6O1xcbmRyaXZlcnMvc2NzaS9zZy5jOjE4Nzc6XFx0aWYgKHVubGlrZWx5KG51bSAhPSBzY2F0dGVyX2VsZW1fc3pfcHJldikpIHtcXG5kcml2ZXJzL3Njc2kvc2cuYy0xODc4LVxcdFxcdGlmIChudW0gXFx1MDAzYyAoaW50KVBBR0VfU0laRSkge1xcbmRyaXZlcnMvc2NzaS9zZy5jOjE4Nzk6XFx0XFx0XFx0c2NhdHRlcl9lbGVtX3N6ID0gUEFHRV9TSVpFO1xcbmRyaXZlcnMvc2NzaS9zZy5jOjE4ODA6XFx0XFx0XFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgPSBQQUdFX1NJWkU7XFxuZHJpdmVycy9zY3NpL3NnLmMtMTg4MS1cXHRcXHRcXHRudW0gPSBQQUdFX1NJWkU7XFxuZHJpdmVycy9zY3NpL3NnLmMtMTg4Mi1cXHRcXHR9IGVsc2VcXG5kcml2ZXJzL3Njc2kvc2cuYzoxODgzOlxcdFxcdFxcdHNjYXR0ZXJfZWxlbV9zel9wcmV2ID0gbnVtO1xcbmRyaXZlcnMvc2NzaS9zZy5jLTE4ODQtXFx0fVxcbi0tXFxuZHJpdmVycy9zY3NpL3NnLmMtMTg5Mi1cXG5kcml2ZXJzL3Njc2kvc2cuYzoxODkzOlxcdFxcdG51bSA9IChyZW1fc3ogXFx1MDAzZSBzY2F0dGVyX2VsZW1fc3pfcHJldikgP1xcbmRyaXZlcnMvc2NzaS9zZy5jOjE4OTQ6XFx0XFx0XFx0c2NhdHRlcl9lbGVtX3N6X3ByZXYgOiByZW1fc3o7XFxuZHJpdmVycy9zY3NpL3NnLmMtMTg5NS1cXG4tLVxcbmRyaXZlcnMvc2NzaS9zZy5jLTE4OTktXFxuZHJpdmVycy9zY3NpL3NnLmM6MTkwMDpcXHRcXHRpZiAobnVtID09IHNjYXR0ZXJfZWxlbV9zel9wcmV2KSB7XFxuZHJpdmVycy9zY3NpL3NnLmM6MTkwMTpcXHRcXHRcXHRpZiAodW5saWtlbHkocmV0X3N6IFxcdTAwM2Ugc2NhdHRlcl9lbGVtX3N6X3ByZXYpKSB7XFxuZHJpdmVycy9zY3NpL3NnLmM6MTkwMjpcXHRcXHRcXHRcXHRzY2F0dGVyX2VsZW1fc3ogPSByZXRfc3o7XFxuZHJpdmVycy9zY3NpL3NnLmM6MTkwMzpcXHRcXHRcXHRcXHRzY2F0dGVyX2VsZW1fc3pfcHJldiA9IHJldF9zejtcXG5kcml2ZXJzL3Njc2kvc2cuYy0xOTA0LVxcdFxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDc6MjUuMTY0MTc3NDAyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ5MDQyMDQ5Njk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBJbnRlZ2VyIE92ZXJmbG93IGluIGBkcml2ZXJzL3Njc2kvc2cuY2AqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBnaXQgY29tbWl0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdnVsbmVyYWJpbGl0eSBvciBidWcgaXQgYWRkcmVzc2VzLiBTZWVtcyB3ZSBhcmUgaW4gYGRyaXZlcnMvc2NzaS9zZy5jYCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgdGhlIHNjYXR0ZXItZ2F0aGVyIGxpc3QgaGFuZGxpbmcuXG5cblJpZ2h0LCB0aGUga2V5IHNlY3Rpb24gaXMgdGhlIGNvbXBhcmlzb24gaW52b2x2aW5nIGBzY2F0dGVyX2VsZW1fc3pgIGFuZCBgUEFHRV9TSVpFYC4gQmVmb3JlIHRoZSBwYXRjaCwgdGhlIGNvZGUgd2FzIHN1c2NlcHRpYmxlIHRvIGFuIGludGVnZXIgb3ZlcmZsb3csIHBhcnRpY3VsYXJseSBpZiBhIHJvb3QgdXNlciB3YXMgYWJsZSB0byBtb2RpZnkgYHNjYXR0ZXJfZWxlbV9zemAgd2hpY2ggaXMgYSBtb2R1bGUgcGFyYW1ldGVyLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGF0IGlmIGEgbWFsaWNpb3VzIHZhbHVlIGxpa2UgYSBsYXJnZSBuZWdhdGl2ZSBudW1iZXIsIG9yIGEgc21hbGwgbnVtYmVyIGxlc3MgdGhhbiBgUEFHRV9TSVpFYCBsaWtlIDAsIGNvdWxkIGJlIHdyaXR0ZW4gdG8gYHNjYXR0ZXJfZWxlbV9zemAuXG5cblRoZSBjb3JlIGlzc3VlIGlzIGhvdyB0aGUgc2lnbmVkIGludGVnZXIgYG51bWAgaXMgY29tcGFyZWQgd2l0aCB0aGUgdW5zaWduZWQgYFBBR0VfU0laRWAuIFRoZSBvcmlnaW5hbCBgaWYgKG51bSBcdTAwM2MgUEFHRV9TSVpFKWAgd291bGQgcHJvbW90ZSBhIG5lZ2F0aXZlIGBudW1gIHRvIGFuIHVuc2lnbmVkIGxvbmcuICBTbyBpZiBgbnVtYCB3YXMgLTEsIHRoZSBjb21wYXJpc29uIHdvdWxkIGVmZmVjdGl2ZWx5IGJlY29tZSAgYDB4RkZGRkZGRkZGRkZGRkZGRlVMIFx1MDAzYyBQQUdFX1NJWkVgLCB3aGljaCBpcyBhbHdheXMgZmFsc2UsIHNraXBwaW5nIHRoZSBpbnRlbmRlZCByZXNpemUgYW5kIGFsbG9jYXRpb24sIGFuZCBwb3RlbnRpYWxseSBjYXVzaW5nIGFuIHVuZGVmaW5lZCBiZWhhdmlvciBvbiBgZ2V0X29yZGVyKG51bSlgLiBDb252ZXJzZWx5LCBpZiBgbnVtYCB3YXMgYSB2YWx1ZSBsaWtlIDEwMCwgdGhlIGNvZGUgd291bGQgcHJvY2VlZCB0byBgc2NhdHRlcl9lbGVtX3N6ID0gUEFHRV9TSVpFYCwgYnV0IGBudW1gIHdvdWxkIG5vdCBiZSB1cGRhdGVkISBTdWJzZXF1ZW50IG9wZXJhdGlvbnMgd2l0aCB0aGUgb3JpZ2luYWwgc21hbGxlciBgbnVtYCBjb3VsZCBzdGlsbCBjYXVzZSBwcm9ibGVtcy5cblxuVGhpcyBjb3VsZCBsZWFkIHRvIHVzaW5nIGEgbmVnYXRpdmUgdmFsdWUgaW4gYGdldF9vcmRlcigpYCwgcmVzdWx0aW5nIGluIGVpdGhlciBhIGh1Z2Ugb3JkZXIgdmFsdWUgb3IgYW4gdW5kZWZpbmVkIHNoaWZ0IGluIGByZXRfc3ogPSAxIFx1MDAzY1x1MDAzYyAoUEFHRV9TSElGVCArIG9yZGVyKTtgLiBUaGlzIGNvdWxkIGNhdXNlIGFsbCBzb3J0cyBvZiBtZW1vcnkgY29ycnVwdGlvbiwgaW5jbHVkaW5nIHVuZGVmaW5lZCBiZWhhdmlvciBvciBjcmFzaCB3aXRoIHBhZ2UgYWxsb2NhdGlvbiB3YXJuaW5ncy5cblxuTm93LCBJJ20gdGhpbmtpbmcgYWJvdXQgbWVtb3J5IHNhZmV0eS4gIExldCdzIGNvbnNpZGVyIHRoYXQgdGhlIGNvZGUgKnNob3VsZCogYmUgemVyby1pbml0aWFsaXppbmcgYW55IGFsbG9jYXRlZCBtZW1vcnkuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSB1c2VzIG9mIGBzY2hwLVx1MDAzZXBhZ2VzYCBhbmQgdGhlIGFsbG9jYXRpb24uIEkgc2VlIGEgYGdmcF9tYXNrYCBvZiBgR0ZQX0FUT01JQyB8IF9fR0ZQX0NPTVAgfCBfX0dGUF9OT1dBUk4gfCBfX0dGUF9aRVJPYCwgYW5kIGFsc28gYHNjaHAtXHUwMDNlcGFnZXMgPSBremFsbG9jYC4gTG9va3MgbGlrZSBpdCdzIHplcm8taW5pdGlhbGl6ZWQgZHVyaW5nIGFsbG9jYXRpb24gaW4gYHNnX2J1aWxkX2luZGlyZWN0YC4gIEknbGwgc3RpbGwgdmVyaWZ5IGFsbCByZWFkL3dyaXRlIGFjY2Vzc2VzIHRvIHRoYXQgbWVtb3J5LCBqdXN0IHRvIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTk3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjQ4OjE0LjIwNjIyOTk5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDQ5MTczNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2dfYnVpbGRfaW5kaXJlY3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zY3NpL3NnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zY3NpL3NnLmM9MTgzPXN0YXRpYyBpbnQgc2dfZmluaXNoX3JlbV9yZXEoU2dfcmVxdWVzdCAqIHNycCk7XFxuZHJpdmVycy9zY3NpL3NnLmM6MTg0OnN0YXRpYyBpbnQgc2dfYnVpbGRfaW5kaXJlY3QoU2dfc2NhdHRlcl9ob2xkICogc2NocCwgU2dfZmQgKiBzZnAsIGludCBidWZmX3NpemUpO1xcbmRyaXZlcnMvc2NzaS9zZy5jLTE4NS1zdGF0aWMgc3NpemVfdCBzZ19uZXdfcmVhZChTZ19mZCAqIHNmcCwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LFxcbi0tXFxuZHJpdmVycy9zY3NpL3NnLmM9MTcxMT1zZ19zdGFydF9yZXEoU2dfcmVxdWVzdCAqc3JwLCB1bnNpZ25lZCBjaGFyICpjbWQpXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2cuYy0xNzgyLVxcdFxcdH0gZWxzZSB7XFxuZHJpdmVycy9zY3NpL3NnLmM6MTc4MzpcXHRcXHRcXHRyZXMgPSBzZ19idWlsZF9pbmRpcmVjdChyZXFfc2NocCwgc2ZwLCBkeGZlcl9sZW4pO1xcbmRyaXZlcnMvc2NzaS9zZy5jLTE3ODQtXFx0XFx0XFx0aWYgKHJlcykge1xcbi0tXFxuZHJpdmVycy9zY3NpL3NnLmM9MTg1Mz1zdGF0aWMgaW50XFxuZHJpdmVycy9zY3NpL3NnLmM6MTg1NDpzZ19idWlsZF9pbmRpcmVjdChTZ19zY2F0dGVyX2hvbGQgKiBzY2hwLCBTZ19mZCAqIHNmcCwgaW50IGJ1ZmZfc2l6ZSlcXG5kcml2ZXJzL3Njc2kvc2cuYy0xODU1LXtcXG4tLVxcbmRyaXZlcnMvc2NzaS9zZy5jLTE4NjctXFx0U0NTSV9MT0dfVElNRU9VVCg0LCBzZ19wcmludGsoS0VSTl9JTkZPLCBzZnAtXFx1MDAzZXBhcmVudGRwLFxcbmRyaXZlcnMvc2NzaS9zZy5jOjE4Njg6XFx0XFx0XFxcInNnX2J1aWxkX2luZGlyZWN0OiBidWZmX3NpemU9JWQsIGJsa19zaXplPSVkXFxcXG5cXFwiLFxcbmRyaXZlcnMvc2NzaS9zZy5jLTE4NjktXFx0XFx0YnVmZl9zaXplLCBibGtfc2l6ZSkpO1xcbi0tXFxuZHJpdmVycy9zY3NpL3NnLmMtMTkwNy1cXHRcXHRTQ1NJX0xPR19USU1FT1VUKDUsIHNnX3ByaW50ayhLRVJOX0lORk8sIHNmcC1cXHUwMDNlcGFyZW50ZHAsXFxuZHJpdmVycy9zY3NpL3NnLmM6MTkwODpcXHRcXHRcXHRcXHQgXFxcInNnX2J1aWxkX2luZGlyZWN0OiBrPSVkLCBudW09JWQsIHJldF9zej0lZFxcXFxuXFxcIixcXG5kcml2ZXJzL3Njc2kvc2cuYy0xOTA5LVxcdFxcdFxcdFxcdCBrLCBudW0sIHJldF9zeikpO1xcbi0tXFxuZHJpdmVycy9zY3NpL3NnLmMtMTkxNC1cXHRTQ1NJX0xPR19USU1FT1VUKDUsIHNnX3ByaW50ayhLRVJOX0lORk8sIHNmcC1cXHUwMDNlcGFyZW50ZHAsXFxuZHJpdmVycy9zY3NpL3NnLmM6MTkxNTpcXHRcXHRcXHQgXFxcInNnX2J1aWxkX2luZGlyZWN0OiBrX3VzZV9zZz0lZCwgcmVtX3N6PSVkXFxcXG5cXFwiLFxcbmRyaXZlcnMvc2NzaS9zZy5jLTE5MTYtXFx0XFx0XFx0IGssIHJlbV9zeikpO1xcbi0tXFxuZHJpdmVycy9zY3NpL3NnLmM9MTk4OT1zZ19idWlsZF9yZXNlcnZlKFNnX2ZkICogc2ZwLCBpbnQgcmVxX3NpemUpXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2cuYy0xOTk3LVxcdFxcdFxcdHJlcV9zaXplID0gUEFHRV9TSVpFO1xcbmRyaXZlcnMvc2NzaS9zZy5jOjE5OTg6XFx0XFx0aWYgKDAgPT0gc2dfYnVpbGRfaW5kaXJlY3Qoc2NocCwgc2ZwLCByZXFfc2l6ZSkpXFxuZHJpdmVycy9zY3NpL3NnLmMtMTk5OS1cXHRcXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjQ4OjE0Ljc1MTE1MjQ2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ1NjMyMzI1MzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBJbmRpcmVjdCBTY2F0dGVyL0dhdGhlciBCdWZmZXJzIGluIGBzZy5jYCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBzZy5jYCBmaWxlIGFuZCB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgaW5kaXJlY3Qgc2NhdHRlci9nYXRoZXIgYnVmZmVycy4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIGNlbnRlcmVkIGFyb3VuZCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB1c2VyIHNwYWNlIOKAkyB3aGVyZSBhcmUgdGhlc2UgZGF0YSB0cmFuc2ZlcnMgaGFwcGVuaW5nPyBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGNhbGxzIHRoYXQgbWFuYWdlIHRoZSBwYWdlIHRyYW5zZmVycyB0byBhbmQgZnJvbSB1c2VyIHNwYWNlLiBJJ2xsIG5lZWQgdG8gbG9jYXRlIHRoZSBpbnN0YW5jZXMgb2YgZWl0aGVyIGBjb3B5X3RvX3VzZXJgIG9yIHRoZSBgc2dfcmVhZF9veGZlcmAgZnVuY3Rpb25zIHdpdGhpbiB0aGUgYGRyaXZlcnMvc2NzaS9zZy5jYCBkaXJlY3RvcnkuIFRoaXMgd2lsbCBzaGVkIGxpZ2h0IG9uIHRoZSBtZWNoYW5pY3Mgb2YgaG93IHRoaXMgaGFwcGVucy4gSSdtIGtlZW4gdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgcG9pbnRzIHdoZXJlIHRoaXMgaGFwcGVucywgYW5kIGhvdyBpdCBpcyBwcm90ZWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1OTksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0OTowMC4zODM0ODE1NDFaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5NDk1NjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNnX3JlYWRfb3hmZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9zY3NpL3NnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zY3NpL3NnLmM9MTkwPXN0YXRpYyBpbnQgc2dfY29tbW9uX3dyaXRlKFNnX2ZkICogc2ZwLCBTZ19yZXF1ZXN0ICogc3JwLFxcbmRyaXZlcnMvc2NzaS9zZy5jLTE5MS1cXHRcXHRcXHQgICB1bnNpZ25lZCBjaGFyICpjbW5kLCBpbnQgdGltZW91dCwgaW50IGJsb2NraW5nKTtcXG5kcml2ZXJzL3Njc2kvc2cuYzoxOTI6c3RhdGljIGludCBzZ19yZWFkX294ZmVyKFNnX3JlcXVlc3QgKiBzcnAsIGNoYXIgX191c2VyICpvdXRwLCBpbnQgbnVtX3JlYWRfeGZlcik7XFxuZHJpdmVycy9zY3NpL3NnLmMtMTkzLXN0YXRpYyB2b2lkIHNnX3JlbW92ZV9zY2F0KFNnX2ZkICogc2ZwLCBTZ19zY2F0dGVyX2hvbGQgKiBzY2hwKTtcXG4tLVxcbmRyaXZlcnMvc2NzaS9zZy5jPTQzOD1zZ19yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqIHBwb3MpXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2cuYy01MzgtXFx0XFx0aWYgKGNvdW50IFxcdTAwM2UgU1pfU0dfSEVBREVSKSB7XFxuZHJpdmVycy9zY3NpL3NnLmM6NTM5OlxcdFxcdFxcdGlmIChzZ19yZWFkX294ZmVyKHNycCwgYnVmLCBjb3VudCAtIFNaX1NHX0hFQURFUikpIHtcXG5kcml2ZXJzL3Njc2kvc2cuYy01NDAtXFx0XFx0XFx0XFx0cmV0dmFsID0gLUVGQVVMVDtcXG4tLVxcbmRyaXZlcnMvc2NzaS9zZy5jPTE5NTU9c3RhdGljIGludFxcbmRyaXZlcnMvc2NzaS9zZy5jOjE5NTY6c2dfcmVhZF9veGZlcihTZ19yZXF1ZXN0ICogc3JwLCBjaGFyIF9fdXNlciAqb3V0cCwgaW50IG51bV9yZWFkX3hmZXIpXFxuZHJpdmVycy9zY3NpL3NnLmMtMTk1Ny17XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2cuYy0xOTYxLVxcdFNDU0lfTE9HX1RJTUVPVVQoNCwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc3JwLVxcdTAwM2VwYXJlbnRmcC1cXHUwMDNlcGFyZW50ZHAsXFxuZHJpdmVycy9zY3NpL3NnLmM6MTk2MjpcXHRcXHRcXHQgXFxcInNnX3JlYWRfb3hmZXI6IG51bV9yZWFkX3hmZXI9JWRcXFxcblxcXCIsXFxuZHJpdmVycy9zY3NpL3NnLmMtMTk2My1cXHRcXHRcXHQgbnVtX3JlYWRfeGZlcikpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0OTowMC40NTI5ODE4MjdaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjA1MzcxMTk1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgc2dfcmVhZF9veGZlcmAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgU0NTSSBnZW5lcmljIGRyaXZlcnMgaGFuZGxlIHRoZSBgc2dfcmVhZF9veGZlcmAgZnVuY3Rpb24uIEkga25vdyB0aGlzIGlzIGEgY29yZSBwaWVjZSBvZiB0aGUgU0NTSSBnZW5lcmljIGludGVyZmFjZSwgbGlrZWx5IHJlbGF0ZWQgdG8gcmVhZCBvcGVyYXRpb25zIGFuZCBkYXRhIHRyYW5zZmVyLCBzbyBpdCdzIHdvcnRoIGEgZGVlcCBkaXZlLiBJJ20gaGVhZGluZyB0byBgZHJpdmVycy9zY3NpL3NnLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMTk1NS4gVGhhdCdzIHVzdWFsbHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24uIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuIEkgZXhwZWN0IHRvIGJlIGxvb2tpbmcgZm9yIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgaG93IHRoZSBkYXRhIHRyYW5zZmVyIGlzIGluaXRpYXRlZCwgYW5kIGFueSBlcnJvciBoYW5kbGluZyBvciBmbG93IGNvbnRyb2wgbWVjaGFuaXNtcyB0aGF0IGFyZSBpbiBwbGF5LiBJJ20gYW50aWNpcGF0aW5nIHRoYXQgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHRoZSB3b3JraG9yc2UgZm9yIGhhbmRsaW5nIHRoZSBhY3R1YWwgcmVhZCBvcGVyYXRpb24gYWZ0ZXIgdGhlIFNDU0kgY29tbWFuZCBoYXMgYmVlbiBzZXR1cC4gSSdsbCBiZSBsb29raW5nIGZvciBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgaGFyZHdhcmUsIHByb2JhYmx5IHVzaW5nIERNQSBvciBvdGhlciBkYXRhIHRyYW5zZmVyIG1lY2hhbmlzbXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzMjYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQwODo0OTowMi41MDY2OTc3MjlaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyOTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvc2NzaS9zZy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5NTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE5NTU6XFx0c3RhdGljIGludFxcbjE5NTY6XFx0c2dfcmVhZF9veGZlcihTZ19yZXF1ZXN0ICogc3JwLCBjaGFyIF9fdXNlciAqb3V0cCwgaW50IG51bV9yZWFkX3hmZXIpXFxuMTk1NzpcXHR7XFxuMTk1ODpcXHRcXHRTZ19zY2F0dGVyX2hvbGQgKnNjaHAgPSBcXHUwMDI2c3JwLVxcdTAwM2VkYXRhO1xcbjE5NTk6XFx0XFx0aW50IGssIG51bTtcXG4xOTYwOlxcdFxcbjE5NjE6XFx0XFx0U0NTSV9MT0dfVElNRU9VVCg0LCBzZ19wcmludGsoS0VSTl9JTkZPLCBzcnAtXFx1MDAzZXBhcmVudGZwLVxcdTAwM2VwYXJlbnRkcCxcXG4xOTYyOlxcdFxcdFxcdFxcdCBcXFwic2dfcmVhZF9veGZlcjogbnVtX3JlYWRfeGZlcj0lZFxcXFxuXFxcIixcXG4xOTYzOlxcdFxcdFxcdFxcdCBudW1fcmVhZF94ZmVyKSk7XFxuMTk2NDpcXHRcXHRpZiAoKCFvdXRwKSB8fCAobnVtX3JlYWRfeGZlciBcXHUwMDNjPSAwKSlcXG4xOTY1OlxcdFxcdFxcdHJldHVybiAwO1xcbjE5NjY6XFx0XFxuMTk2NzpcXHRcXHRudW0gPSAxIFxcdTAwM2NcXHUwMDNjIChQQUdFX1NISUZUICsgc2NocC1cXHUwMDNlcGFnZV9vcmRlcik7XFxuMTk2ODpcXHRcXHRmb3IgKGsgPSAwOyBrIFxcdTAwM2Mgc2NocC1cXHUwMDNla191c2Vfc2cgXFx1MDAyNlxcdTAwMjYgc2NocC1cXHUwMDNlcGFnZXNba107IGsrKykge1xcbjE5Njk6XFx0XFx0XFx0aWYgKG51bSBcXHUwMDNlIG51bV9yZWFkX3hmZXIpIHtcXG4xOTcwOlxcdFxcdFxcdFxcdGlmIChjb3B5X3RvX3VzZXIob3V0cCwgcGFnZV9hZGRyZXNzKHNjaHAtXFx1MDAzZXBhZ2VzW2tdKSxcXG4xOTcxOlxcdFxcdFxcdFxcdFxcdFxcdCAgIG51bV9yZWFkX3hmZXIpKVxcbjE5NzI6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMTk3MzpcXHRcXHRcXHRcXHRicmVhaztcXG4xOTc0OlxcdFxcdFxcdH0gZWxzZSB7XFxuMTk3NTpcXHRcXHRcXHRcXHRpZiAoY29weV90b191c2VyKG91dHAsIHBhZ2VfYWRkcmVzcyhzY2hwLVxcdTAwM2VwYWdlc1trXSksXFxuMTk3NjpcXHRcXHRcXHRcXHRcXHRcXHQgICBudW0pKVxcbjE5Nzc6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMTk3ODpcXHRcXHRcXHRcXHRudW1fcmVhZF94ZmVyIC09IG51bTtcXG4xOTc5OlxcdFxcdFxcdFxcdGlmIChudW1fcmVhZF94ZmVyIFxcdTAwM2M9IDApXFxuMTk4MDpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4xOTgxOlxcdFxcdFxcdFxcdG91dHAgKz0gbnVtO1xcbjE5ODI6XFx0XFx0XFx0fVxcbjE5ODM6XFx0XFx0fVxcbjE5ODQ6XFx0XFxuMTk4NTpcXHRcXHRyZXR1cm4gMDtcXG4xOTg2OlxcdH1cXG4xOTg3OlxcdFxcbjE5ODg6XFx0c3RhdGljIHZvaWRcXG4xOTg5OlxcdHNnX2J1aWxkX3Jlc2VydmUoU2dfZmQgKiBzZnAsIGludCByZXFfc2l6ZSlcXG4xOTkwOlxcdHtcXG4xOTkxOlxcdFxcdFNnX3NjYXR0ZXJfaG9sZCAqc2NocCA9IFxcdTAwMjZzZnAtXFx1MDAzZXJlc2VydmU7XFxuMTk5MjpcXHRcXG4xOTkzOlxcdFxcdFNDU0lfTE9HX1RJTUVPVVQoNCwgc2dfcHJpbnRrKEtFUk5fSU5GTywgc2ZwLVxcdTAwM2VwYXJlbnRkcCxcXG4xOTk0OlxcdFxcdFxcdFxcdCBcXFwic2dfYnVpbGRfcmVzZXJ2ZTogcmVxX3NpemU9JWRcXFxcblxcXCIsIHJlcV9zaXplKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDA4OjQ5OjAyLjUwNjkzMzc3OVoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMzQ3MjUwODgzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNHIE1vZHVsZSdzIFNjYXR0ZXItR2F0aGVyIEVsZW1lbnQgU2l6ZSBIYW5kbGluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGZpcnN0IHRoaW5nIEknbSBkb2luZyBpcyB0cnlpbmcgdG8gcmV0cmFjZSB0aGUgY29tbWl0IGhpc3RvcnkgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGNoYW5nZSB3YXMgbWFkZSBpbiB0aGUga2VybmVsLiBNeSBpbml0aWFsIGFwcHJvYWNoIGlzIHN0YW5kYXJkOiBJIHdhbnQgdG8gZmluZCB0aGUgY29tbWl0IG1lc3NhZ2UsIHRoZSBhdXRob3IsIGFuZCBhbnkgcmVsZXZhbnQgY29udGV4dC4gSSdsbCBwcm9iYWJseSBzdGFydCB3aXRoIGBnaXQgbG9nYCwgdGhlbiBjb25zaWRlciBgZ3JlcHBlcmAsIGFuZCBpZiB0aGF0IGRvZXNuJ3QgeWllbGQgcmVzdWx0cywgSSdsbCBzd2l0Y2ggdG8gZGlyZWN0bHkgZ3JlcHBpbmcgdGhlIGNvbW1pdCBtZXNzYWdlcy5cblxuTm93LCBsZXQncyBnZXQgaW50byB0aGUgY29kZSBpdHNlbGYsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgYHNjYXR0ZXJfZWxlbV9zemAgaXMgdXNlZCB3aXRoaW4gdGhlIGBkcml2ZXJzL3Njc2kvc2cuY2AgbW9kdWxlLiBJIHNlZSBpdCB1c2VkIGluIGBpbml0X3NnYCBhbmQgYHNnX2J1aWxkX2luZGlyZWN0YC4gTXkgdGhvdWdodCBwcm9jZXNzIGlzIHRvIGV4YW1pbmUgdGhlc2UgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlIGNoYW5nZS4gXG5cbkluIGBpbml0X3NnYCwgdGhlIGNvZGUgY2hlY2tzIGlmIGBzY2F0dGVyX2VsZW1fc3pgIGlzIGxlc3MgdGhhbiBgUEFHRV9TSVpFYCwgYW5kIGlmIHNvLCBpdCBzZXRzIGl0IHRvIGBQQUdFX1NJWkVgLiBUaGUgbmV4dCBwaWVjZSBvZiBjb2RlIGlzIGluIGBzZ19idWlsZF9pbmRpcmVjdGAsIHdoZXJlIGl0IGFwcGVhcnMgdGhhdCB0aGUgY29yZSBpc3N1ZSBpcyB0aGUgdHlwZSBvZiBgc2NhdHRlcl9lbGVtX3N6YC5cblxuVGhlIGNvcmUgbG9naWMgcmV2b2x2ZXMgYXJvdW5kIHRoZSBjaGVjayBgbnVtIFx1MDAzYyBQQUdFX1NJWkVgLiBJIHNlZSBub3cgdGhhdCBgc2NhdHRlcl9lbGVtX3N6YCBpcyBhbiBpbnRlZ2VyLCB3aGlsZSBgUEFHRV9TSVpFYCBpcyBhbiB1bnNpZ25lZCBsb25nLiBUaGlzIGlzIHRoZSBjcnV4IG9mIHRoZSBwcm9ibGVtISBDJ3MgaW50ZWdlciBjb252ZXJzaW9uIHJ1bGVzIG1lYW4gdGhhdCBhIG5lZ2F0aXZlIHZhbHVlIHdyaXR0ZW4gdG8gYHNjYXR0ZXJfZWxlbV9zemAgd2lsbCBjYXVzZSBjb21wYXJpc29uIGZhaWx1cmVzLiBBIG5lZ2F0aXZlIHZhbHVlIGlzIGNvbnZlcnRlZCB0byBhIHZlcnkgbGFyZ2UgdW5zaWduZWQgbnVtYmVyIGR1cmluZyBjb21wYXJpc29uLCBhbmQgdGh1cyB0aGUgY29kZSB3aWxsIGJlaGF2ZSBpbiB1bmV4cGVjdGVkIHdheXMuXG5cblNwZWNpZmljYWxseSwgdGhlIGBudW0gXHUwMDNjIFBBR0VfU0laRWAgY2hlY2sgY2FuIGZhaWwgaWYgbnVtIGlzIG5lZ2F0aXZlLCBvciBpZiBudW0gaXMgYSBzbWFsbCBudW1iZXIgYW5kIHRoZSBjb2RlIHRoZW4gZ29lcyBvbiB0byB1c2UgdGhlIGBudW1gIHZhcmlhYmxlIGluIGBnZXRfb3JkZXIoKWAgd2hpY2ggaXMgaW52YWxpZCBmb3IgbmVnYXRpdmUgbnVtYmVycy5cblxuVGhpcyBsZWFkcyB0byB1bmRlZmluZWQgYmVoYXZpb3IuIFNwZWNpZmljYWxseSwgdGhlIGNhbGwgdG8gYGdldF9vcmRlcmAgd2l0aCBhbiBpbnZhbGlkIGlucHV0IG9yIHRoZSBzaGlmdCB0aGF0IGZvbGxvd3MgdGhlIGByZXRfc3ogPSAxIFx1MDAzY1x1MDAzYyAoUEFHRV9TSElGVCArIG9yZGVyKWAgc3RhdGVtZW50LiBFdmVuIGEgc21hbGwgcG9zaXRpdmUgbnVtYmVyIGNhbiBjYXVzZSBhIHByb2JsZW0gYmVjYXVzZSBgbnVtYCBpcyBub3QgdXBkYXRlZCBhZnRlciB0aGUgY2hlY2suXG5cblNvLCB0aGUgY3J1Y2lhbCBwYXJ0IGlzIHVuZGVyc3RhbmRpbmcgKndoeSogdGhpcyBpbnRlZ2VyIHNpZ25lZG5lc3MgYnVnIHdhcyBpbnRyb2R1Y2VkLCBhbmQgaG93IHRoZSBjaGFuZ2VzIGZpeCBpdC4gVGhlIHBhdGNoIGFkZHJlc3NlcyB0aGlzIGlzc3VlIGJ5IHBlcmZvcm1pbmcgYSBwcm9wZXIgc2lnbmVkIGNvbXBhcmlzb246IGBudW0gXHUwMDNjIChpbnQpUEFHRV9TSVpFYC4gVGhpcyBwcmV2ZW50cyBpbnZhbGlkIGFsbG9jYXRpb24gb3JkZXIgY2FsY3VsYXRpb24gYnkgY29ycmVjdGluZyB0aGUgaW50ZWdlciBzaWduZWRuZXNzIGJ1Zy5cblxuTm93LCB0aGUgbmV4dCBzdGVwIGlzIHRvIGV2YWx1YXRlIHdoZXRoZXIgdGhpcyBwYXRjaCBuZWNlc3NpdGF0ZXMgdGhlIHVzZSBvZiBLTVNBTi4gTXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY3JpdGVyaWEgZm9yIEtNU0FOIGlzIHByZXR0eSBzb2xpZC4gSXQncyBub3QgYSBnZW5lcmFsIGRlYnVnZ2luZyB0b29sOyBpdCdzIHNwZWNpYWxpemVkIGZvciBkZXRlY3RpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIFRoZSBjcnVjaWFsIHJ1bGUgaXMgXCJUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLCBMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlwiIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIGFueSBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgZmllbGRzIG1pZ2h0IG5vdCBiZSBpbml0aWFsaXplZCwgY29uZGl0aW9uYWwgbG9naWMgcmVseWluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgdGhlIGFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBhbHRlcmF0aW9ucyB0byBib3VuZHMgY2hlY2tzLlxuXG5Pa2F5LCBsZXQncyBnbyB0aHJvdWdoIHRoZSBjaGVja2xpc3QgY2FyZWZ1bGx5LlxuKiAgIERvZXMgdGhlIHBhdGNoIHRvdWNoIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlPyBOby5cbiogICBEb2VzIHRoZSBwYXRjaCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gVGhlIGFsbG9jYXRlZCBwYWdlcyBhcmUgemVyb2VkLlxuKiAgIERvZXMgdGhlIHBhdGNoIGFsdGVyIGJvdW5kcyBjaGVja3Mgb3IgZGF0YSBsZW5ndGhzIGluIGEgd2F5IHRoYXQgYWxsb3dzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIGJlIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHVzZWQgaW4gY29uZGl0aW9uYWxzPyBOby4gVGhlIG1haW4gYnVnIGJlaW5nIGZpeGVkIGlzIGFuIGludGVnZXIgc2lnbmVkbmVzcyBpc3N1ZS5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGUgY29kZSBmaXhlcyBhbiBpbnRlZ2VyIHNpZ25lZG5lc3MgYnVnLCBhbmQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmVzLCBwYWRkaW5ncywgb3IgaW5mby1sZWFrcyBpbnZvbHZlZCwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuIFRoaXMgcGF0Y2ggZm9jdXNlcyBvbiBwcmV2ZW50aW5nIGludmFsaWQgbWVtb3J5IGFsbG9jYXRpb24gb3JkZXIgYW5kIGRvZXMgbm90IGNyZWF0ZSByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBvciByZWxhdGVkIGlzc3Vlcy4gSGVuY2UsIGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgZmFsc2UsIGFuZCBJIG5lZWQgdG8gd3JpdGUgdGhpcyBleHBsYW5hdGlvbiBpbiB0aGUgdG9vbCBjYWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI2OCwiT3V0cHV0VG9rZW5zIjoyNzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzk2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMDg6NDk6MTUuOTc5NDQ1OTA2WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIHNpZ25lZG5lc3MgaXNzdWUgaW4gZHJpdmVycy9zY3NpL3NnLmMgKHNnX2J1aWxkX2luZGlyZWN0KS4gU3BlY2lmaWNhbGx5LCBjb21wYXJpbmcgdGhlIHNpZ25lZCBpbnQgJ251bScgdG8gdW5zaWduZWQgbG9uZyAnUEFHRV9TSVpFJyByZXN1bHRlZCBpbiBzaWduZWQtdG8tdW5zaWduZWQgdHlwZSBwcm9tb3Rpb24sIGFsbG93aW5nIG5lZ2F0aXZlIHZhbHVlcyBvZiB0aGUgJ3NjYXR0ZXJfZWxlbV9zeicgbW9kdWxlIHBhcmFtZXRlciB0byBieXBhc3MgdGhlIG1pbmltdW0gYm91bmQgY2hlY2sgYW5kIGxlYWQgdG8gaW52YWxpZCBwYWdlIGFsbG9jYXRpb24gb3JkZXJzIGFuZCB1bmRlZmluZWQgc2hpZnQgYmVoYXZpb3IuIFRoZSBwYXRjaCBjYXN0cyBQQUdFX1NJWkUgdG8gaW50IGFuZCBzZXRzIG51bSA9IFBBR0VfU0laRSB3aGVuIG51bSBcXHUwMDNjIChpbnQpUEFHRV9TSVpFLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnk6XFxuMS4gJ251bScgYW5kICdzY2F0dGVyX2VsZW1fc3onIGFyZSBmdWxseSBpbml0aWFsaXplZCB2YWx1ZXMuXFxuMi4gVGhlIHNjYXR0ZXItZ2F0aGVyIGJ1ZmZlciBhbGxvY2F0aW9ucyBpbiBzZ19idWlsZF9pbmRpcmVjdCB1c2Uga3phbGxvYyBmb3IgdGhlIHBvaW50ZXIgYXJyYXkgYW5kIF9fR0ZQX1pFUk8gZm9yIHRoZSB1bmRlcmx5aW5nIHBhZ2UgYWxsb2NhdGlvbnMuXFxuMy4gTm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBzdGFjayB2YXJpYWJsZXMsIHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBjb3BpZWQgdG8gdXNlcnNwYWNlIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuXFxuQW55IHBvdGVudGlhbCBpc3N1ZXMgZnJvbSB0aGUgYnVnIChzdWNoIGFzIGludmFsaWQgYWxsb2NhdGlvbiBvcmRlcnMgb3Igc2hpZnRzKSBmYWxsIHVuZGVyIHN0YW5kYXJkIFVCU0FOL0tBU0FOIGRldGVjdGlvbiByYXRoZXIgdGhhbiBLTVNBTiB1bmluaXRpYWxpemVkIG1lbW9yeSB0cmFja2luZy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIHNpZ25lZG5lc3MgaXNzdWUgaW4gZHJpdmVycy9zY3NpL3NnLmMgKHNnX2J1aWxkX2luZGlyZWN0KS4gU3BlY2lmaWNhbGx5LCBjb21wYXJpbmcgdGhlIHNpZ25lZCBpbnQgJ251bScgdG8gdW5zaWduZWQgbG9uZyAnUEFHRV9TSVpFJyByZXN1bHRlZCBpbiBzaWduZWQtdG8tdW5zaWduZWQgdHlwZSBwcm9tb3Rpb24sIGFsbG93aW5nIG5lZ2F0aXZlIHZhbHVlcyBvZiB0aGUgJ3NjYXR0ZXJfZWxlbV9zeicgbW9kdWxlIHBhcmFtZXRlciB0byBieXBhc3MgdGhlIG1pbmltdW0gYm91bmQgY2hlY2sgYW5kIGxlYWQgdG8gaW52YWxpZCBwYWdlIGFsbG9jYXRpb24gb3JkZXJzIGFuZCB1bmRlZmluZWQgc2hpZnQgYmVoYXZpb3IuIFRoZSBwYXRjaCBjYXN0cyBQQUdFX1NJWkUgdG8gaW50IGFuZCBzZXRzIG51bSA9IFBBR0VfU0laRSB3aGVuIG51bSBcXHUwMDNjIChpbnQpUEFHRV9TSVpFLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnk6XFxuMS4gJ251bScgYW5kICdzY2F0dGVyX2VsZW1fc3onIGFyZSBmdWxseSBpbml0aWFsaXplZCB2YWx1ZXMuXFxuMi4gVGhlIHNjYXR0ZXItZ2F0aGVyIGJ1ZmZlciBhbGxvY2F0aW9ucyBpbiBzZ19idWlsZF9pbmRpcmVjdCB1c2Uga3phbGxvYyBmb3IgdGhlIHBvaW50ZXIgYXJyYXkgYW5kIF9fR0ZQX1pFUk8gZm9yIHRoZSB1bmRlcmx5aW5nIHBhZ2UgYWxsb2NhdGlvbnMuXFxuMy4gTm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBzdGFjayB2YXJpYWJsZXMsIHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBjb3BpZWQgdG8gdXNlcnNwYWNlIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuXFxuQW55IHBvdGVudGlhbCBpc3N1ZXMgZnJvbSB0aGUgYnVnIChzdWNoIGFzIGludmFsaWQgYWxsb2NhdGlvbiBvcmRlcnMgb3Igc2hpZnRzKSBmYWxsIHVuZGVyIHN0YW5kYXJkIFVCU0FOL0tBU0FOIGRldGVjdGlvbiByYXRoZXIgdGhhbiBLTVNBTiB1bmluaXRpYWxpemVkIG1lbW9yeSB0cmFja2luZy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7hgpq[1] Phase: Succeeded StartedAt: 2026-09-14 08:49:28 +0000 UTC FinishedAt: 2026-09-14 08:49:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7hgpq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-14 08:49:28 +0000 UTC FinishedAt: 2026-09-14 08:49:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7hgpq[2] Phase: Succeeded StartedAt: 2026-09-14 08:49:28 +0000 UTC FinishedAt: 2026-09-14 09:09:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7hgpq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["CHR_DEV_SG","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","sg_build_reserve","sg_start_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["CHR_DEV_SG","SCSI"],"series_id":"2569b3d3-fe9c-474e-a8ef-e51fb581c3a9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-09-14 08:49:28 +0000 UTC FinishedAt: 2026-09-14 09:09:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["CHR_DEV_SG","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","sg_build_reserve","sg_start_req"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["CHR_DEV_SG","SCSI"],"series_id":"2569b3d3-fe9c-474e-a8ef-e51fb581c3a9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow7hgpq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["CHR_DEV_SG","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","sg_build_reserve","sg_start_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["CHR_DEV_SG","SCSI"],"series_id":"2569b3d3-fe9c-474e-a8ef-e51fb581c3a9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-14 08:49:28 +0000 UTC FinishedAt: 2026-09-14 08:49:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7hgpq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["CHR_DEV_SG","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","sg_build_reserve","sg_start_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["CHR_DEV_SG","SCSI"],"series_id":"2569b3d3-fe9c-474e-a8ef-e51fb581c3a9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-14 08:49:28 +0000 UTC FinishedAt: 2026-09-14 08:49:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["CHR_DEV_SG","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7hgpq/series-workflow7hgpq-convert-artifact-1739966953/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7hgpq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["CHR_DEV_SG","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","sg_build_reserve","sg_start_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["CHR_DEV_SG","SCSI"],"series_id":"2569b3d3-fe9c-474e-a8ef-e51fb581c3a9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-14 08:49:38 +0000 UTC FinishedAt: 2026-09-14 09:08:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7hgpq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["CHR_DEV_SG","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","sg_build_reserve","sg_start_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["CHR_DEV_SG","SCSI"],"series_id":"2569b3d3-fe9c-474e-a8ef-e51fb581c3a9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-14 08:49:38 +0000 UTC FinishedAt: 2026-09-14 09:08:38 +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:*b588b075-da46-4802-9b5d-366ecf14ab20,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-workflow7hgpq/series-workflow7hgpq-convert-artifact-1739966953/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": "372f7c53-670d-4b37-a4d8-24e5fd8b67c0", "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-workflow7hgpq/series-workflow7hgpq-build-action-144284999/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7hgpq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["CHR_DEV_SG","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","sg_build_reserve","sg_start_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["CHR_DEV_SG","SCSI"],"series_id":"2569b3d3-fe9c-474e-a8ef-e51fb581c3a9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-14 08:49:38 +0000 UTC FinishedAt: 2026-09-14 09:08:28 +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:*b588b075-da46-4802-9b5d-366ecf14ab20,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-workflow7hgpq/series-workflow7hgpq-convert-artifact-1739966953/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": "372f7c53-670d-4b37-a4d8-24e5fd8b67c0", "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-workflow7hgpq/series-workflow7hgpq-build-action-144284999/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7hgpq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["CHR_DEV_SG","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","sg_build_reserve","sg_start_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["CHR_DEV_SG","SCSI"],"series_id":"2569b3d3-fe9c-474e-a8ef-e51fb581c3a9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-14 09:08:38 +0000 UTC FinishedAt: 2026-09-14 09:08:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7hgpq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["CHR_DEV_SG","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","sg_build_reserve","sg_start_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["CHR_DEV_SG","SCSI"],"series_id":"2569b3d3-fe9c-474e-a8ef-e51fb581c3a9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-14 09:08:38 +0000 UTC FinishedAt: 2026-09-14 09:08:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7hgpq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["CHR_DEV_SG","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","sg_build_reserve","sg_start_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["CHR_DEV_SG","SCSI"],"series_id":"2569b3d3-fe9c-474e-a8ef-e51fb581c3a9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-14 09:08:38 +0000 UTC FinishedAt: 2026-09-14 09:08:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7hgpq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["CHR_DEV_SG","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","sg_build_reserve","sg_start_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["CHR_DEV_SG","SCSI"],"series_id":"2569b3d3-fe9c-474e-a8ef-e51fb581c3a9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-14 09:08:38 +0000 UTC FinishedAt: 2026-09-14 09:08:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["CHR_DEV_SG","SCSI"],"series_id":"2569b3d3-fe9c-474e-a8ef-e51fb581c3a9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7hgpq/series-workflow7hgpq-convert-artifact-3508227708/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7hgpq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["CHR_DEV_SG","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","sg_build_reserve","sg_start_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["CHR_DEV_SG","SCSI"],"series_id":"2569b3d3-fe9c-474e-a8ef-e51fb581c3a9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Failed StartedAt: 2026-09-14 09:08:48 +0000 UTC FinishedAt: 2026-09-14 09:09:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7hgpq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["CHR_DEV_SG","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"df2908090cda368b01ff43709f51890076c56157","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sg_build_indirect","sg_build_reserve","sg_start_req"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"df2908090cda368b01ff43709f51890076c56157","config_name":"upstream-apparmor-kasan.config","enable_configs":["CHR_DEV_SG","SCSI"],"series_id":"2569b3d3-fe9c-474e-a8ef-e51fb581c3a9","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Failed StartedAt: 2026-09-14 09:08:48 +0000 UTC FinishedAt: 2026-09-14 09:08:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*372f7c53-670d-4b37-a4d8-24e5fd8b67c0,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-workflow7hgpq/series-workflow7hgpq-build-action-144284999/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil