Name: series-workflowthkmb Phase: Succeeded StartedAt: 2026-09-08 01:32:51 +0000 UTC FinishedAt: 2026-09-08 05:17:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthkmb[0] Phase: Succeeded StartedAt: 2026-09-08 01:32:51 +0000 UTC FinishedAt: 2026-09-08 01:36:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthkmb[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 01:32:51 +0000 UTC FinishedAt: 2026-09-08 01:36:17 +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": "73ae59e975966d24e32926247ddb45a537ebe184", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "73ae59e975966d24e32926247ddb45a537ebe184", "config_name": "upstream-apparmor-kasan.config", "series_id": "f9097de5-06f0-401d-820f-7969cfbbc75c" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "begin_new_exec", "do_close_on_exec" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjM0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmVnaW5fbmV3X2V4ZWMmIzM0OywKICAgICYjMzQ7ZG9fY2xvc2Vfb25fZXhlYyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIHRoZSBpbnZvY2F0aW9uIG9mIGBkb19jbG9zZV9vbl9leGVjKG1lLVx1MDAzZWZpbGVzKWAgZWFybGllciBpbiBgYmVnaW5fbmV3X2V4ZWMoKWAsIHBsYWNpbmcgaXQgYmVmb3JlIGBzZXRfbW1fZXhlX2ZpbGUoKWAgYW5kIGBleGVjX21tYXAoKWAuIFRoaXMgYXZvaWRzIGhvbGRpbmcgYGV4ZWNfdXBkYXRlX2xvY2tgIHdoaWxlIGZpbGVzeXN0ZW0gYC1cdTAwM2VmbHVzaCgpYCBoYW5kbGVycyAoc3VjaCBhcyBGVVNFKSBydW4gZHVyaW5nIGBmaWxwX2Nsb3NlKClgLCByZXNvbHZpbmcgcG90ZW50aWFsIGxvY2tpbmcvZGVhZGxvY2sgYW5kIGNvbmN1cnJlbmN5IGlzc3Vlcy5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgY29udHJvbCBmbG93IGFuZCBsb2NrIG9yZGVyaW5nIGFkanVzdG1lbnQgd2l0aGluIHByb2Nlc3MgZXhlY3V0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIGFsbG9jYXRlLCBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdGFjay9oZWFwIGJ1ZmZlcnMsIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBBbnkgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGxvY2tpbmcgb3IgZmlsZSBkZXNjcmlwdG9yIHJlZmVyZW5jZSBsaWZlY3ljbGVzIGFyZSBtb25pdG9yZWQgYnkgTE9DS0RFUCBhbmQgc3RhbmRhcmQgS0FTQU4gYnVpbGRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgZXhlY3ZlIGxvZ2ljIGluIGJlZ2luX25ld19leGVjKCkgKGZzL2V4ZWMuYyksIG1vdmluZyB0aGUgaW52b2NhdGlvbiBvZiBkb19jbG9zZV9vbl9leGVjKCkgYmVmb3JlIGV4ZWNfbW1hcCgpIGFuZCBzZXRfbW1fZXhlX2ZpbGUoKSB0byBhdm9pZCBibG9ja2luZyBvbiBmaWxlc3lzdGVtIC1cdTAwM2VmbHVzaCgpIGhhbmRsZXJzIHdoaWxlIGhvbGRpbmcgZXhlY191cGRhdGVfbG9jay4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29udHJvbCBmbG93IGFuZCBsaWZlY3ljbGUgb3JkZXIgZHVyaW5nIHByb2dyYW0gZXhlY3V0aW9uIGluIHRoZSBjb3JlIFZGUy9leGVjIHN1YnN5c3RlbSBhbmQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMTozNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGM5MDQzZjgwZWE5ZjI3ZDc3Y2IzY2U3YjJjN2I4MDBiYmNlNTMxZTNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDAxOjM0OjU3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuY1xuaW5kZXggNzQ1ZjZlYjUyNzllNi4uYjUxZTVkN2U0NTM2NyAxMDA2NDRcbi0tLSBhL2ZzL2V4ZWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXhlYy5jXG5AQCAtMTE2NCw2ICYjNDM7MTE2NCwyMCBAQCBpbnQgYmVnaW5fbmV3X2V4ZWMoc3RydWN0IGxpbnV4X2JpbnBybSAqIGJwcm0pXG4gXHRpZiAocmV0dmFsKVxuIFx0XHRnb3RvIG91dDtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdlIGhhdmUgdG8gYXBwbHkgQ0xPRVhFQyBiZWZvcmUgd2UgY2hhbmdlIHdoZXRoZXIgdGhlIHByb2Nlc3MgaXNcbiYjNDM7XHQgKiBkdW1wYWJsZSAoaW4gc2V0dXBfbmV3X2V4ZWMpIHRvIGF2b2lkIGEgcmFjZSB3aXRoIGEgcHJvY2VzcyBpbiB1c2Vyc3BhY2VcbiYjNDM7XHQgKiB0cnlpbmcgdG8gYWNjZXNzIHRoZSBzaG91bGQtYmUtY2xvc2VkIGZpbGUgZGVzY3JpcHRvcnMgb2YgYSBwcm9jZXNzXG4mIzQzO1x0ICogdW5kZXJnb2luZyBleGVjKDIpLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogVGhpcyBjYW4gYmxvY2sgb24gZmlsZXN5c3RlbSAtXHUwMDNlZmx1c2goKSBoYW5kbGVycywgaW5jbHVkaW5nIHdhaXRpbmdcbiYjNDM7XHQgKiBmb3IgRlVTRSBkYWVtb25zLCBzbyBkbyBpdCBiZWZvcmUgZXhlY19tbWFwIHRha2VzIHRoZVxuJiM0MztcdCAqIGV4ZWNfdXBkYXRlX2xvY2suXG4mIzQzO1x0ICogVGhpcyBtdXN0IGhhcHBlbiBhZnRlciB0aGUgcG9pbnQgb2Ygbm8gcmV0dXJuLCBhbmQgYWZ0ZXIgdW5zaGFyaW5nXG4mIzQzO1x0ICogdGhlIEZEIHRhYmxlLlxuJiM0MztcdCAqL1xuJiM0MztcdGRvX2Nsb3NlX29uX2V4ZWMobWUtXHUwMDNlZmlsZXMpO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBNdXN0IGJlIGNhbGxlZCBfYmVmb3JlXyBleGVjX21tYXAoKSBhcyBicHJtLVx1MDAzZW1tIGlzXG4gXHQgKiBub3QgdmlzaWJsZSB1bnRpbCB0aGVuLiBEb2luZyBpdCBoZXJlIGFsc28gZW5zdXJlc1xuQEAgLTEyMTQsMTQgJiM0MzsxMjI4LDYgQEAgaW50IGJlZ2luX25ld19leGVjKHN0cnVjdCBsaW51eF9iaW5wcm0gKiBicHJtKVxuIFxuIFx0Y2xlYXJfc3lzY2FsbF93b3JrX3N5c2NhbGxfdXNlcl9kaXNwYXRjaChtZSk7XG4gXG4tXHQvKlxuLVx0ICogV2UgaGF2ZSB0byBhcHBseSBDTE9FWEVDIGJlZm9yZSB3ZSBjaGFuZ2Ugd2hldGhlciB0aGUgcHJvY2VzcyBpc1xuLVx0ICogZHVtcGFibGUgKGluIHNldHVwX25ld19leGVjKSB0byBhdm9pZCBhIHJhY2Ugd2l0aCBhIHByb2Nlc3MgaW4gdXNlcnNwYWNlXG4tXHQgKiB0cnlpbmcgdG8gYWNjZXNzIHRoZSBzaG91bGQtYmUtY2xvc2VkIGZpbGUgZGVzY3JpcHRvcnMgb2YgYSBwcm9jZXNzXG4tXHQgKiB1bmRlcmdvaW5nIGV4ZWMoMikuXG4tXHQgKi9cbi1cdGRvX2Nsb3NlX29uX2V4ZWMobWUtXHUwMDNlZmlsZXMpO1xuLVxuIFx0aWYgKGJwcm0tXHUwMDNlc2VjdXJlZXhlYykge1xuIFx0XHQvKiBNYWtlIHN1cmUgcGFyZW50IGNhbm5vdCBzaWduYWwgcHJpdmlsZWdlZCBwcm9jZXNzLiAqL1xuIFx0XHRtZS1cdTAwM2VwZGVhdGhfc2lnbmFsID0gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMTozNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JlZ2luX25ld19leGVjJiMzNDssCiAgICAmIzM0O2RvX2Nsb3NlX29uX2V4ZWMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBleGVjdmUgbG9naWMgaW4gYmVnaW5fbmV3X2V4ZWMoKSAoZnMvZXhlYy5jKSwgbW92aW5nIHRoZSBpbnZvY2F0aW9uIG9mIGRvX2Nsb3NlX29uX2V4ZWMoKSBiZWZvcmUgZXhlY19tbWFwKCkgYW5kIHNldF9tbV9leGVfZmlsZSgpIHRvIGF2b2lkIGJsb2NraW5nIG9uIGZpbGVzeXN0ZW0gLVx1MDAzZWZsdXNoKCkgaGFuZGxlcnMgd2hpbGUgaG9sZGluZyBleGVjX3VwZGF0ZV9sb2NrLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb250cm9sIGZsb3cgYW5kIGxpZmVjeWNsZSBvcmRlciBkdXJpbmcgcHJvZ3JhbSBleGVjdXRpb24gaW4gdGhlIGNvcmUgVkZTL2V4ZWMgc3Vic3lzdGVtIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzkwNDNmODBlYTlmMjdkNzdjYjNjZTdiMmM3YjgwMGJiY2U1MzFlMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMDE6MzQ6NTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leGVjLmMgYi9mcy9leGVjLmMKaW5kZXggNzQ1ZjZlYjUyNzllNi4uYjUxZTVkN2U0NTM2NyAxMDA2NDQKLS0tIGEvZnMvZXhlYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4ZWMuYwpAQCAtMTE2NCw2ICYjNDM7MTE2NCwyMCBAQCBpbnQgYmVnaW5fbmV3X2V4ZWMoc3RydWN0IGxpbnV4X2JpbnBybSAqIGJwcm0pCiAJaWYgKHJldHZhbCkKIAkJZ290byBvdXQ7CiAKJiM0MzsJLyoKJiM0MzsJICogV2UgaGF2ZSB0byBhcHBseSBDTE9FWEVDIGJlZm9yZSB3ZSBjaGFuZ2Ugd2hldGhlciB0aGUgcHJvY2VzcyBpcwomIzQzOwkgKiBkdW1wYWJsZSAoaW4gc2V0dXBfbmV3X2V4ZWMpIHRvIGF2b2lkIGEgcmFjZSB3aXRoIGEgcHJvY2VzcyBpbiB1c2Vyc3BhY2UKJiM0MzsJICogdHJ5aW5nIHRvIGFjY2VzcyB0aGUgc2hvdWxkLWJlLWNsb3NlZCBmaWxlIGRlc2NyaXB0b3JzIG9mIGEgcHJvY2VzcwomIzQzOwkgKiB1bmRlcmdvaW5nIGV4ZWMoMikuCiYjNDM7CSAqCiYjNDM7CSAqIFRoaXMgY2FuIGJsb2NrIG9uIGZpbGVzeXN0ZW0gLSZndDtmbHVzaCgpIGhhbmRsZXJzLCBpbmNsdWRpbmcgd2FpdGluZwomIzQzOwkgKiBmb3IgRlVTRSBkYWVtb25zLCBzbyBkbyBpdCBiZWZvcmUgZXhlY19tbWFwIHRha2VzIHRoZQomIzQzOwkgKiBleGVjX3VwZGF0ZV9sb2NrLgomIzQzOwkgKiBUaGlzIG11c3QgaGFwcGVuIGFmdGVyIHRoZSBwb2ludCBvZiBubyByZXR1cm4sIGFuZCBhZnRlciB1bnNoYXJpbmcKJiM0MzsJICogdGhlIEZEIHRhYmxlLgomIzQzOwkgKi8KJiM0MzsJZG9fY2xvc2Vfb25fZXhlYyhtZS0mZ3Q7ZmlsZXMpOwomIzQzOwogCS8qCiAJICogTXVzdCBiZSBjYWxsZWQgX2JlZm9yZV8gZXhlY19tbWFwKCkgYXMgYnBybS0mZ3Q7bW0gaXMKIAkgKiBub3QgdmlzaWJsZSB1bnRpbCB0aGVuLiBEb2luZyBpdCBoZXJlIGFsc28gZW5zdXJlcwpAQCAtMTIxNCwxNCAmIzQzOzEyMjgsNiBAQCBpbnQgYmVnaW5fbmV3X2V4ZWMoc3RydWN0IGxpbnV4X2JpbnBybSAqIGJwcm0pCiAKIAljbGVhcl9zeXNjYWxsX3dvcmtfc3lzY2FsbF91c2VyX2Rpc3BhdGNoKG1lKTsKIAotCS8qCi0JICogV2UgaGF2ZSB0byBhcHBseSBDTE9FWEVDIGJlZm9yZSB3ZSBjaGFuZ2Ugd2hldGhlciB0aGUgcHJvY2VzcyBpcwotCSAqIGR1bXBhYmxlIChpbiBzZXR1cF9uZXdfZXhlYykgdG8gYXZvaWQgYSByYWNlIHdpdGggYSBwcm9jZXNzIGluIHVzZXJzcGFjZQotCSAqIHRyeWluZyB0byBhY2Nlc3MgdGhlIHNob3VsZC1iZS1jbG9zZWQgZmlsZSBkZXNjcmlwdG9ycyBvZiBhIHByb2Nlc3MKLQkgKiB1bmRlcmdvaW5nIGV4ZWMoMikuCi0JICovCi0JZG9fY2xvc2Vfb25fZXhlYyhtZS0mZ3Q7ZmlsZXMpOwotCiAJaWYgKGJwcm0tJmd0O3NlY3VyZWV4ZWMpIHsKIAkJLyogTWFrZSBzdXJlIHBhcmVudCBjYW5ub3Qgc2lnbmFsIHByaXZpbGVnZWQgcHJvY2Vzcy4gKi8KIAkJbWUtJmd0O3BkZWF0aF9zaWduYWwgPSAwOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTc4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGZzL2V4ZWMuY2AgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoIHdpdGhpbiB0aGUgY29udGV4dCBvZiBgZnMvZXhlYy5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYGJlZ2luX25ld19leGVjYCBmdW5jdGlvbi4gVGhlIHBhdGNoIGl0c2VsZiBpcyBzdHJhaWdodGZvcndhcmQgLSBpdCYjMzk7cyBhIGNvZGUgbW92ZW1lbnQsIGVzc2VudGlhbGx5LiBJdCYjMzk7cyByZXBvc2l0aW9uaW5nIHRoZSBjYWxsIHRvIGBkb19jbG9zZV9vbl9leGVjKG1lLSZndDtmaWxlcylgLiAgVGhlIGRpZmYgc2hvd3MgdGhhdCB0aGUgY29kZSB3YXMgKm1vdmVkKiwgbm90IGFkZGVkIG9yIHJlbW92ZWQgZnVuZGFtZW50YWxseS4gUHJldmlvdXNseSwgaXQgd2FzIGFmdGVyIHRoZSBgY2xlYXJfc3lzY2FsbF93b3JrX3N5c2NhbGxfdXNlcl9kaXNwYXRjaChtZSk7YCBjYWxsLCBhbmQgbm93IGl0JiMzOTtzIHBsYWNlZCBlYXJsaWVyLCBiZWZvcmUgdGhlIGNhbGxzIHRvIGBleGVjX21tYXBgIGFuZCBgY2xlYXJfc3lzY2FsbF93b3JrX3N5c2NhbGxfdXNlcl9kaXNwYXRjaGAuCgpUaGUgc3Vycm91bmRpbmcgY29tbWVudHMgYXJlIGtleSBoZXJlLiAgVGhleSBleHBsaWNpdGx5IGNhbGwgb3V0IHRoZSByZWFzb24gZm9yIHRoaXMgcmVhcnJhbmdlbWVudDogdGhlIG5lZWQgdG8gYXBwbHkgYENMT0VYRUNgICpiZWZvcmUqIHBvdGVudGlhbGx5IGNoYW5naW5nIHdoZXRoZXIgdGhlIHByb2Nlc3MgaXMgZHVtcGFibGUgaW4gYHNldHVwX25ld19leGVjYC4gVGhpcyBpcyB0byBhdm9pZCBhIHJhY2UgY29uZGl0aW9uLCB3aGVyZSBhIHVzZXItc3BhY2UgcHJvY2VzcyBtaWdodCB0cnkgdG8gYWNjZXNzIGZpbGUgZGVzY3JpcHRvcnMgdGhhdCAqc2hvdWxkKiBiZSBjbG9zZWQgZHVyaW5nIGFuIGBleGVjKDIpYCBjYWxsLiBDcnVjaWFsbHksIHRoZSBjb21tZW50IGhpZ2hsaWdodHMgdGhhdCBgZG9fY2xvc2Vfb25fZXhlY2AgY2FuIGJsb2NrIG9uIGZpbGVzeXN0ZW0gZmx1c2ggaGFuZGxlcnMgKGluY2x1ZGluZyBGVVNFIGRhZW1vbnMpLiBUaGlzIGlzIHdoeSB0aGUgcGF0Y2ggZW1waGFzaXplcyB0aGF0IGl0JiMzOTtzIHBlcmZvcm1lZCBhZnRlciB0aGUgcG9pbnQgb2Ygbm8gcmV0dXJuIChpbXBvcnRhbnQgZm9yIGF0b21pY2l0eSBhbmQgY29uc2lzdGVuY3kgZHVyaW5nIHRoZSBgZXhlY3ZlYCBwcm9jZXNzKSBhbmQgYWZ0ZXIgdW5zaGFyaW5nIHRoZSBmaWxlIGRlc2NyaXB0b3IgdGFibGUuIFRoaXMgdGltaW5nIGlzIGNyaXRpY2FsIHRvIGVuc3VyZSBwcm9wZXIgY2xlYW51cCwgYXZvaWQgcmFjZXMgYW5kIG1haW50YWluIGRhdGEgaW50ZWdyaXR5LiBUaGUgY29tbWVudCBtZW50aW9ucyBkb2luZyB0aGlzIGJlZm9yZSBgZXhlY19tbWFwYCB0byBhdm9pZCBsb2NraW5nIHByb2JsZW1zLiBTbywgdGhpcyBvcmRlciBjaGFuZ2Ugc2VlbXMgdG8gYmUgYSBzdWJ0bGUgYnV0IGNyaXRpY2FsIG9wdGltaXphdGlvbiBhbmQgcmFjZSBjb25kaXRpb24gYXZvaWRhbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXhlYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE1MDpcdFxuMTE1MTpcdFx0LyogTWFrZSB0aGlzIHRoZSBvbmx5IHRocmVhZCBpbiB0aGUgdGhyZWFkIGdyb3VwICovXG4xMTUyOlx0XHRyZXR2YWwgPSBkZV90aHJlYWQobWUpO1xuMTE1MzpcdFx0aWYgKHJldHZhbClcbjExNTQ6XHRcdFx0Z290byBvdXQ7XG4xMTU1Olx0XHQvKiBzZWUgdGhlIGNvbW1lbnQgaW4gY2hlY2tfdW5zYWZlX2V4ZWMoKSAqL1xuMTE1NjpcdFx0Y3VycmVudC1cdTAwM2Vmcy1cdTAwM2Vpbl9leGVjID0gMDtcbjExNTc6XHRcdC8qXG4xMTU4Olx0XHQgKiBDYW5jZWwgYW55IGlvX3VyaW5nIGFjdGl2aXR5IGFjcm9zcyBleGVjdmVcbjExNTk6XHRcdCAqL1xuMTE2MDpcdFx0aW9fdXJpbmdfdGFza19jYW5jZWwoKTtcbjExNjE6XHRcbjExNjI6XHRcdC8qIEVuc3VyZSB0aGUgZmlsZXMgdGFibGUgaXMgbm90IHNoYXJlZC4gKi9cbjExNjM6XHRcdHJldHZhbCA9IHVuc2hhcmVfZmlsZXMoKTtcbjExNjQ6XHRcdGlmIChyZXR2YWwpXG4xMTY1Olx0XHRcdGdvdG8gb3V0O1xuMTE2NjpcdFxuMTE2NzpcdFx0LypcbjExNjg6XHRcdCAqIFdlIGhhdmUgdG8gYXBwbHkgQ0xPRVhFQyBiZWZvcmUgd2UgY2hhbmdlIHdoZXRoZXIgdGhlIHByb2Nlc3MgaXNcbjExNjk6XHRcdCAqIGR1bXBhYmxlIChpbiBzZXR1cF9uZXdfZXhlYykgdG8gYXZvaWQgYSByYWNlIHdpdGggYSBwcm9jZXNzIGluIHVzZXJzcGFjZVxuMTE3MDpcdFx0ICogdHJ5aW5nIHRvIGFjY2VzcyB0aGUgc2hvdWxkLWJlLWNsb3NlZCBmaWxlIGRlc2NyaXB0b3JzIG9mIGEgcHJvY2Vzc1xuMTE3MTpcdFx0ICogdW5kZXJnb2luZyBleGVjKDIpLlxuMTE3MjpcdFx0ICpcbjExNzM6XHRcdCAqIFRoaXMgY2FuIGJsb2NrIG9uIGZpbGVzeXN0ZW0gLVx1MDAzZWZsdXNoKCkgaGFuZGxlcnMsIGluY2x1ZGluZyB3YWl0aW5nXG4xMTc0Olx0XHQgKiBmb3IgRlVTRSBkYWVtb25zLCBzbyBkbyBpdCBiZWZvcmUgZXhlY19tbWFwIHRha2VzIHRoZVxuMTE3NTpcdFx0ICogZXhlY191cGRhdGVfbG9jay5cbjExNzY6XHRcdCAqIFRoaXMgbXVzdCBoYXBwZW4gYWZ0ZXIgdGhlIHBvaW50IG9mIG5vIHJldHVybiwgYW5kIGFmdGVyIHVuc2hhcmluZ1xuMTE3NzpcdFx0ICogdGhlIEZEIHRhYmxlLlxuMTE3ODpcdFx0ICovXG4xMTc5Olx0XHRkb19jbG9zZV9vbl9leGVjKG1lLVx1MDAzZWZpbGVzKTtcbjExODA6XHRcbjExODE6XHRcdC8qXG4xMTgyOlx0XHQgKiBNdXN0IGJlIGNhbGxlZCBfYmVmb3JlXyBleGVjX21tYXAoKSBhcyBicHJtLVx1MDAzZW1tIGlzXG4xMTgzOlx0XHQgKiBub3QgdmlzaWJsZSB1bnRpbCB0aGVuLiBEb2luZyBpdCBoZXJlIGFsc28gZW5zdXJlc1xuMTE4NDpcdFx0ICogd2UgZG9uJiMzOTt0IHJhY2UgYWdhaW5zdCByZXBsYWNlX21tX2V4ZV9maWxlKCkuXG4xMTg1Olx0XHQgKi9cbjExODY6XHRcdHJldHZhbCA9IHNldF9tbV9leGVfZmlsZShicHJtLVx1MDAzZW1tLCBicHJtX2lkZW50aXR5X2ZpbGUoYnBybSkpO1xuMTE4NzpcdFx0aWYgKHJldHZhbClcbjExODg6XHRcdFx0Z290byBvdXQ7XG4xMTg5Olx0XG4xMTkwOlx0XHQvKiBJZiB0aGUgYmluYXJ5IGlzIG5vdCByZWFkYWJsZSB0aGVuIGVuZm9yY2UgbW0tXHUwMDNlZHVtcGFibGU9MCAqL1xuMTE5MTpcdFx0d291bGRfZHVtcChicHJtLCBicHJtLVx1MDAzZWZpbGUpO1xuMTE5MjpcdFx0aWYgKGJwcm0tXHUwMDNlaGF2ZV9leGVjZmQpXG4xMTkzOlx0XHRcdHdvdWxkX2R1bXAoYnBybSwgYnBybS1cdTAwM2VleGVjdXRhYmxlKTtcbjExOTQ6XHRcbjExOTU6XHRcdC8qXG4xMTk2Olx0XHQgKiBSZWxlYXNlIGFsbCBvZiB0aGUgb2xkIG1tYXAgc3R1ZmZcbjExOTc6XHRcdCAqL1xuMTE5ODpcdFx0YWNjdF9hcmdfc2l6ZShicHJtLCAwKTtcbjExOTk6XHRcdHJldHZhbCA9IGV4ZWNfbW1hcChicHJtKTtcbjEyMDA6XHRcdGlmIChyZXR2YWwpXG4xMjAxOlx0XHRcdGdvdG8gb3V0O1xuMTIwMjpcdFxuMTIwMzpcdFx0YnBybS1cdTAwM2VtbSA9IE5VTEw7XG4xMjA0Olx0XG4xMjA1Olx0XHRyZXR2YWwgPSBleGVjX3Rhc2tfbmFtZXNwYWNlcygpO1xuMTIwNjpcdFx0aWYgKHJldHZhbClcbjEyMDc6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuMTIwODpcdFxuMTIwOTpcdCNpZmRlZiBDT05GSUdfUE9TSVhfVElNRVJTXG4xMjEwOlx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNm1lLVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4xMjExOlx0XHRwb3NpeF9jcHVfdGltZXJzX2V4aXQobWUpO1xuMTIxMjpcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNm1lLVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4xMjEzOlx0XHRleGl0X2l0aW1lcnMobWUpO1xuMTIxNDpcdFx0Zmx1c2hfaXRpbWVyX3NpZ25hbHMoKTtcbjEyMTU6XHQjZW5kaWZcbjEyMTY6XHRcbjEyMTc6XHRcdC8qXG4xMjE4Olx0XHQgKiBNYWtlIHRoZSBzaWduYWwgdGFibGUgcHJpdmF0ZS5cbjEyMTk6XHRcdCAqL1xuMTIyMDpcdFx0cmV0dmFsID0gdW5zaGFyZV9zaWdoYW5kKG1lKTtcbjEyMjE6XHRcdGlmIChyZXR2YWwpXG4xMjIyOlx0XHRcdGdvdG8gb3V0X3VubG9jaztcbjEyMjM6XHRcbjEyMjQ6XHRcdG1lLVx1MDAzZWZsYWdzIFx1MDAyNj0gfihQRl9SQU5ET01JWkUgfCBQRl9GT1JLTk9FWEVDIHxcbjEyMjU6XHRcdFx0XHRcdFx0UEZfTk9GUkVFWkUgfCBQRl9OT19TRVRBRkZJTklUWSk7XG4xMjI2Olx0XHRmbHVzaF90aHJlYWQoKTtcbjEyMjc6XHRcdG1lLVx1MDAzZXBlcnNvbmFsaXR5IFx1MDAyNj0gfmJwcm0tXHUwMDNlcGVyX2NsZWFyO1xuMTIyODpcdFxuMTIyOTpcdFx0Y2xlYXJfc3lzY2FsbF93b3JrX3N5c2NhbGxfdXNlcl9kaXNwYXRjaChtZSk7XG4xMjMwOlx0XG4xMjMxOlx0XHRpZiAoYnBybS1cdTAwM2VzZWN1cmVleGVjKSB7XG4xMjMyOlx0XHRcdC8qIE1ha2Ugc3VyZSBwYXJlbnQgY2Fubm90IHNpZ25hbCBwcml2aWxlZ2VkIHByb2Nlc3MuICovXG4xMjMzOlx0XHRcdG1lLVx1MDAzZXBkZWF0aF9zaWduYWwgPSAwO1xuMTIzNDpcdFxuMTIzNTpcdFx0XHQvKlxuMTIzNjpcdFx0XHQgKiBGb3Igc2VjdXJlZXhlYywgcmVzZXQgdGhlIHN0YWNrIGxpbWl0IHRvIHNhbmUgZGVmYXVsdCB0b1xuMTIzNzpcdFx0XHQgKiBhdm9pZCBiYWQgYmVoYXZpb3IgZnJvbSB0aGUgcHJpb3IgcmxpbWl0cy4gVGhpcyBoYXMgdG9cbjEyMzg6XHRcdFx0ICogaGFwcGVuIGJlZm9yZSBhcmNoX3BpY2tfbW1hcF9sYXlvdXQoKSwgd2hpY2ggZXhhbWluZXNcbjEyMzk6XHRcdFx0ICogUkxJTUlUX1NUQUNLLCBidXQgYWZ0ZXIgdGhlIHBvaW50IG9mIG5vIHJldHVybiB0byBhdm9pZFxuMTI0MDpcdFx0XHQgKiBuZWVkaW5nIHRvIGNsZWFuIHVwIHRoZSBjaGFuZ2Ugb24gZmFpbHVyZS5cbjEyNDE6XHRcdFx0ICovXG4xMjQyOlx0XHRcdGlmIChicHJtLVx1MDAzZXJsaW1fc3RhY2sucmxpbV9jdXIgXHUwMDNlIF9TVEtfTElNKVxuMTI0MzpcdFx0XHRcdGJwcm0tXHUwMDNlcmxpbV9zdGFjay5ybGltX2N1ciA9IF9TVEtfTElNO1xuMTI0NDpcdFx0fVxuMTI0NTpcdFxuMTI0NjpcdFx0bWUtXHUwMDNlc2FzX3NzX3NwID0gbWUtXHUwMDNlc2FzX3NzX3NpemUgPSAwO1xuMTI0NzpcdFxuMTI0ODpcdFx0LypcbjEyNDk6XHRcdCAqIEZpZ3VyZSBvdXQgZHVtcGFiaWxpdHkuIE5vdGUgdGhhdCB0aGlzIGNoZWNraW5nIG9ubHkgb2YgY3VycmVudFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MDQKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0OTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IGBiZWdpbl9uZXdfZXhlY2AgaW4gYGZzL2V4ZWMuY2AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgbW9kaWZpY2F0aW9uIGluIGBmcy9leGVjLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBiZWdpbl9uZXdfZXhlY2AuIFRoZSBjaGFuZ2UgaW52b2x2ZXMgbW92aW5nIHRoZSBgZG9fY2xvc2Vfb25fZXhlYyhtZS0mZ3Q7ZmlsZXMpYCBjYWxsLiBJdCB1c2VkIHRvIGJlICphZnRlciogYGNsZWFyX3N5c2NhbGxfd29ya19zeXNjYWxsX3VzZXJfZGlzcGF0Y2gobWUpO2AgYnV0IGlzIG5vdyAqYmVmb3JlKiBgc2V0X21tX2V4ZV9maWxlKGJwcm0tJmd0O21tLCBicHJtX2lkZW50aXR5X2ZpbGUoYnBybSkpO2AgYW5kIGBleGVjX21tYXAoYnBybSlgLiBUaGUgY29tbWVudCBleHBsYWlucyB0aGlzIGlzIGFib3V0IGhhbmRsaW5nIGBDTE9FWEVDYCBmbGFncyBiZWZvcmUgY2hhbmdpbmcgcHJvY2VzcyBkdW1wYWJpbGl0eSwgcHJldmVudGluZyBhIHJhY2UgY29uZGl0aW9uIHdpdGggdXNlci1zcGFjZSBwcm9jZXNzZXMgYWNjZXNzaW5nIGZpbGUgZGVzY3JpcHRvcnMuIEl0IGFsc28gbm90ZXMgdGhhdCBgZG9fY2xvc2Vfb25fZXhlY2AgY2FuIGJsb2NrLCBzbyBpdCYjMzk7cyBiZWluZyBtb3ZlZCB0byBoYXBwZW4gKmJlZm9yZSogdGFraW5nIHRoZSBgZXhlY191cGRhdGVfbG9ja2AuIEludGVyZXN0aW5nLiBUaGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGNvZGUsIGl0JiMzOTtzIGZ1bmRhbWVudGFsIHRvIGV2ZXJ5IGBleGVjdmVgIGFuZCBgZXhlY3ZlYXRgIGNhbGwuIFNvLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IEJhc2VkIG9uIHRoZSBmdXp6aW5nIGd1aWRlbGluZXMsIGFueSBsb2dpYyBtb2RpZmljYXRpb25zIHdpdGhpbiB0aGUgJiMzNDtzeXNjYWxsIGhhbmRsaW5nJiMzNDsgc3Vic3lzdGVtLCBvciByZWZhY3RvcmluZyBvZiAmIzM0O3JlYWNoYWJsZSBjb2RlJiMzNDsgZGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nLiBUaGlzIGlzIGEgY2xlYXIgJiMzNDt5ZXMmIzM0Oy4gTm93LCB0byByZWZpbmUgdGhlIGZvY3VzOiBUaGUgbW9kaWZpZWQgZnVuY3Rpb24gaXMgYGJlZ2luX25ld19leGVjYCB3aXRoaW4gYGZzL2V4ZWMuY2AuIElzIHRoaXMgYSBnb29kIGZvY3VzIHN5bWJvbD8gRmlyc3QsIEkgbmVlZCB0byBjaGVjayB3aGF0IGNhbGxzIGBiZWdpbl9uZXdfZXhlY2AuIExldCYjMzk7cyBmaW5kIG91dC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JlZ2luX25ld19leGVjJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2JpbmZtdF9lbGYuYz04Mjk9c3RhdGljIGludCBsb2FkX2VsZl9iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbi0tXG5mcy9iaW5mbXRfZWxmLmMtMTAwOS1cdC8qIEZsdXNoIGFsbCB0cmFjZXMgb2YgdGhlIGN1cnJlbnRseSBydW5uaW5nIGV4ZWN1dGFibGUgKi9cbmZzL2JpbmZtdF9lbGYuYzoxMDEwOlx0cmV0dmFsID0gYmVnaW5fbmV3X2V4ZWMoYnBybSk7XG5mcy9iaW5mbXRfZWxmLmMtMTAxMS1cdGlmIChyZXR2YWwpXG4tLVxuZnMvYmluZm10X2VsZl9mZHBpYy5jPTE4Mj1zdGF0aWMgaW50IGxvYWRfZWxmX2ZkcGljX2JpbmFyeShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuLS1cbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy0zNDgtXHQvKiBmbHVzaCBhbGwgdHJhY2VzIG9mIHRoZSBjdXJyZW50bHkgcnVubmluZyBleGVjdXRhYmxlICovXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmM6MzQ5Olx0cmV0dmFsID0gYmVnaW5fbmV3X2V4ZWMoYnBybSk7XG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtMzUwLVx0aWYgKHJldHZhbClcbi0tXG5mcy9iaW5mbXRfZmxhdC5jPTQwNj1zdGF0aWMgaW50IGxvYWRfZmxhdF9maWxlKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG4tLVxuZnMvYmluZm10X2ZsYXQuYy01MDgtXHQvKiBGbHVzaCBhbGwgdHJhY2VzIG9mIHRoZSBjdXJyZW50bHkgcnVubmluZyBleGVjdXRhYmxlICovXG5mcy9iaW5mbXRfZmxhdC5jOjUwOTpcdHJldCA9IGJlZ2luX25ld19leGVjKGJwcm0pO1xuZnMvYmluZm10X2ZsYXQuYy01MTAtXHRpZiAocmV0KVxuLS1cbmZzL2V4ZWMuYz0yNTg9c3RhdGljIGludCBicHJtX21tX2luaXQoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbi0tXG5mcy9leGVjLmMtMjY3LVxuZnMvZXhlYy5jOjI2ODpcdC8qIFN0YWdlZCBmb3Igd291bGRfZHVtcCgpIG5hcnJvd2luZzsgY29uc3VtZWQgYnkgYmVnaW5fbmV3X2V4ZWMoKS4gKi9cbmZzL2V4ZWMuYy0yNjktXHRicHJtLVx1MDAzZXVzZXJfbnMgPSBnZXRfdXNlcl9ucyhjdXJyZW50X3VzZXJfbnMoKSk7XG4tLVxuZnMvZXhlYy5jPTExMTE9c3RhdGljIHN0cnVjdCBmaWxlICpicHJtX2lkZW50aXR5X2ZpbGUoY29uc3Qgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbi0tXG5mcy9leGVjLmMtMTEyMy0gKi9cbmZzL2V4ZWMuYzoxMTI0OmludCBiZWdpbl9uZXdfZXhlYyhzdHJ1Y3QgbGludXhfYmlucHJtICogYnBybSlcbmZzL2V4ZWMuYy0xMTI1LXtcbi0tXG5mcy9leGVjLmMtMTM0Mi19XG5mcy9leGVjLmM6MTM0MzpFWFBPUlRfU1lNQk9MKGJlZ2luX25ld19leGVjKTtcbmZzL2V4ZWMuYy0xMzQ0LVxuLS1cbmZzL2V4ZWMuYz0xNDQyPXN0cnVjdCBmaWxlICpicHJtX29wZW5faW50ZXJwcmV0ZXIoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgY29uc3QgY2hhciAqcGF0aClcbi0tXG5mcy9leGVjLmMtMTQ1NC0gKiBvdmVycmlkZSBhbmQgbGV0IHRoZSBiaW5hcnkgbG9hZCBuYXRpdmVseSByYXRoZXIgdGhhbiBoYXZlXG5mcy9leGVjLmM6MTQ1NTogKiBiZWdpbl9uZXdfZXhlYygpIHJlZnVzZSBpdC4gQSBuby1vcCBvbmNlIGJwcm1fb3Blbl9pbnRlcnByZXRlcigpIHRvb2tcbmZzL2V4ZWMuYy0xNDU2LSAqIHRoZSBzdWJzdGl0dXRlLlxuLS1cbmZzL2V4ZWMuYz0xNzQ2PXN0YXRpYyBpbnQgc2VhcmNoX2JpbmFyeV9oYW5kbGVyKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4tLVxuZnMvZXhlYy5jLTE3NzgtXG5mcy9leGVjLmM6MTc3OTovKiBiaW5mbXQgaGFuZGxlcnMgd2lsbCBjYWxsIGJhY2sgaW50byBiZWdpbl9uZXdfZXhlYygpIG9uIHN1Y2Nlc3MuICovXG5mcy9leGVjLmMtMTc4MC1zdGF0aWMgaW50IGV4ZWNfYmlucHJtKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4tLVxuZnMvZXhlYy5jPTE4Mjk9c3RhdGljIGludCBicHJtX2V4ZWN2ZShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuLS1cbmZzL2V4ZWMuYy0xODM4LVx0ICogQ2hlY2sgZm9yIHVuc2FmZSBleGVjdXRpb24gc3RhdGVzIGJlZm9yZSBleGVjX2JpbnBybSgpLCB3aGljaFxuZnMvZXhlYy5jOjE4Mzk6XHQgKiB3aWxsIGNhbGwgYmFjayBpbnRvIGJlZ2luX25ld19leGVjKCksIGludG8gYnBybV9jcmVkc19mcm9tX2ZpbGUoKSxcbmZzL2V4ZWMuYy0xODQwLVx0ICogd2hlcmUgc2V0dWlkLW5lc3MgaXMgZXZhbHVhdGVkLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczODgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyBgZG9fY2xvc2Vfb25fZXhlY2AgTG9jYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhpcyBgZG9fY2xvc2Vfb25fZXhlY2AgZnVuY3Rpb24gbGl2ZXMuIEdpdmVuIGl0cyBuYW1lLCBpdCYjMzk7cyBwcmV0dHkgbGlrZWx5IHJlbGF0ZWQgdG8gZmlsZSBvcGVyYXRpb25zIG9yLCBwb3RlbnRpYWxseSwgdGhlIGV4ZWN1dGlvbiBwcm9jZXNzIGFuZCBob3cgZmlsZSBkZXNjcmlwdG9ycyBiZWhhdmUuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gbG9vayB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBmaWxlIHN5c3RlbSBpbXBsZW1lbnRhdGlvbiwgc28gSSYjMzk7bSB0aGlua2luZyBgZnMvZmlsZS5jYCBpcyBhIHByaW1lIGNhbmRpZGF0ZS4gSXQmIzM5O3MgdGhlIHVzdWFsIHBsYWNlIGZvciBmaWxlLXJlbGF0ZWQgbG9naWMuIEhvd2V2ZXIsIHNpbmNlIHdlJiMzOTtyZSBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoICYjMzQ7ZXhlYywmIzM0OyBJJiMzOTtsbCBhbHNvIGdsYW5jZSBhdCBgZnMvZXhlYy5jYCAtIGl0IGhhbmRsZXMgdGhlIGltYWdlIGxvYWRpbmcgYW5kIGVudmlyb25tZW50IHNldHVwLCBhbmQgdGhhdCBtaWdodCBpbnZvbHZlIGhvdyBmaWxlcyBhcmUgaGFuZGxlZCBkdXJpbmcgZXhlY3V0aW9uIG9mIGEgcHJvZ3JhbS4gRmluYWxseSwgSSBzaG91bGQgYWxzbyBxdWlja2x5IGNoZWNrIHRoZSBhc3NvY2lhdGVkIGhlYWRlciBmaWxlcywgYXMgZnVuY3Rpb25zIGxpa2UgdGhpcyBvZnRlbiBoYXZlIGRlY2xhcmF0aW9ucyB0aGVyZS4gQmVzdCB0byBiZSB0aG9yb3VnaCwgSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoZXJlIGl0JiMzOTtzIGRlZmluZWQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fY2xvc2Vfb25fZXhlYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leGVjLmM9MTEyND1pbnQgYmVnaW5fbmV3X2V4ZWMoc3RydWN0IGxpbnV4X2JpbnBybSAqIGJwcm0pXG4tLVxuZnMvZXhlYy5jLTExNzgtXHQgKi9cbmZzL2V4ZWMuYzoxMTc5Olx0ZG9fY2xvc2Vfb25fZXhlYyhtZS1cdTAwM2VmaWxlcyk7XG5mcy9leGVjLmMtMTE4MC1cbi0tXG5mcy9maWxlLmM9ODc4PXN0cnVjdCBmaWxlICpmaWxlX2Nsb3NlX2ZkKHVuc2lnbmVkIGludCBmZClcbi0tXG5mcy9maWxlLmMtODg5LVxuZnMvZmlsZS5jOjg5MDp2b2lkIGRvX2Nsb3NlX29uX2V4ZWMoc3RydWN0IGZpbGVzX3N0cnVjdCAqZmlsZXMpXG5mcy9maWxlLmMtODkxLXtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZkdGFibGUuaD0xMDc9c3RydWN0IGZpbGVzX3N0cnVjdCAqZHVwX2ZkKHN0cnVjdCBmaWxlc19zdHJ1Y3QgKiwgc3RydWN0IGZkX3JhbmdlICopIF9fbGF0ZW50X2VudHJvcHk7XG5pbmNsdWRlL2xpbnV4L2ZkdGFibGUuaDoxMDg6dm9pZCBkb19jbG9zZV9vbl9leGVjKHN0cnVjdCBmaWxlc19zdHJ1Y3QgKik7XG5pbmNsdWRlL2xpbnV4L2ZkdGFibGUuaC0xMDktaW50IGl0ZXJhdGVfZmQoc3RydWN0IGZpbGVzX3N0cnVjdCAqLCB1bnNpZ25lZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTAzCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFJlYXNvbmluZyBmb3IgU2VsZWN0aW5nIHRoZSBGdXp6aW5nIFRhcmdldHMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgKnJpZ2h0KiB0YXJnZXRzIGZvciBmdXp6aW5nLCBnaXZlbiB0aGUgY2hhbmdlIEkmIzM5O20gcmV2aWV3aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IGFjY2lkZW50YWxseSBsaXN0aW5nIGEgKnViaXF1aXRvdXMgbGlmZWN5Y2xlIGhvdC1wYXRoKiwgYXMgdGhhdCYjMzk7cyBhIGZ1enppbmcgbm8tbm8uIFNvLCBsZXQmIzM5O3Mgc2VlLi4uIHRoZSBgZG9fY2xvc2Vfb25fZXhlY2AgZnVuY3Rpb24gaXMgdGhlIGluaXRpYWwgcG9pbnQgdG8gY2hlY2ssIGFuZCBhIHF1aWNrIGxvb2t1cCBzaG93cyBpdCYjMzk7cyBjYWxsZWQgKm9ubHkqIHdpdGhpbiBgZnMvZXhlYy5jYCwgc3BlY2lmaWNhbGx5IGR1cmluZyBgYmVnaW5fbmV3X2V4ZWNgLiBUaGlzIGxvb2tzIHByb21pc2luZy4KCk5vdywgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgYmVnaW5fbmV3X2V4ZWNgIGl0c2VsZiBpc24mIzM5O3QgKnRvbyogZ2VuZXJpYy4gVGhlIHRleHQgbWVudGlvbnMgaXQmIzM5O3MgdXNlZCBkdXJpbmcgZXhlYyBieSBiaW5hcnkgZm9ybWF0IGhhbmRsZXJzLiBJcyB0aGlzIGEgdW5pdmVyc2FsbHkgY2FsbGVkIGZ1bmN0aW9uPyBCYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nLCBgYmVnaW5fbmV3X2V4ZWNgIHNlZW1zIHNwZWNpZmljIHRvIHRoZSAqZXhlY3ZlKiBwYXRoLiBTeXprYWxsZXIgdGVzdHMgYGV4ZWN2ZWAgYW5kIGBleGVjdmVhdGAsIGJ1dCBub3QgKmV2ZXJ5KiBTeXprYWxsZXIgdGVzdCBydW5zIGBleGVjdmVgLiBNb3N0IHRlc3RzIGFyZSBhYm91dCB0aGluZ3MgbGlrZSBzb2NrZXRzIG9yIGlvY3RsLCBidXQgYGJlZ2luX25ld19leGVjYCBpcyBzcGVjaWZpYyB0byB0aGUgYGV4ZWN2ZWAgcGF0aC4gVGhlcmVmb3JlLCBJIGNhbiBjb25maWRlbnRseSBhZGQgaXQuCgpUaGUgZ3VpZGVsaW5lcyBzYXkgdGhhdCBJIHNob3VsZCB0YXJnZXQgJiMzNDtzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIGFuZCBlbnRyeXBvaW50cyYjMzQ7LCBhbmQgdGhhdCYjMzk7cyBleGFjdGx5IHdoYXQgYGJlZ2luX25ld19leGVjYCBhbmQgYGRvX2Nsb3NlX29uX2V4ZWNgIHJlcHJlc2VudC4gVGhleSBhcmUgdGhlIGRpcmVjdCBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdGhpcyBzcGVjaWZpYyBjaGFuZ2UuIFNvIEkmIzM5O2xsIGluY2x1ZGUgYm90aC4KCk5vdywgbGV0JiMzOTtzIGFkZHJlc3MgdGhlIEtjb25maWcgb3B0aW9ucy4gQm90aCBgYmVnaW5fbmV3X2V4ZWNgIChpbiBgZnMvZXhlYy5jYCkgYW5kIGBkb19jbG9zZV9vbl9leGVjYCAoaW4gYGZzL2ZpbGUuY2ApIGFyZSBjb3JlIGtlcm5lbCBmdW5jdGlvbnMuIFRoZXkgYXJlIGNvbXBpbGVkIHVuY29uZGl0aW9uYWxseSBpbnRvIHRoZSBrZXJuZWwsIHdoaWNoIG1lYW5zIG5vIHNwZWNpYWwgYENPTkZJR2AgaXMgcmVxdWlyZWQuIEkgY2FuIGtlZXAgdGhlIGBFbmFibGVDb25maWdzYCBlbXB0eSBmb3IgdGhpcy4KCkZpbmFsbHksIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgZ2xhbmNlIGF0IGBmcy9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgYnVpbHQtaW4gc3RhdHVzIG9mIGJvdGggZmlsZXMuIFllcCwgdGhhdCYjMzk7cyB3aGF0IEkgZXhwZWN0ZWQuIGBmcy9leGVjLmNgIGlzIGNvbXBpbGVkIGFsd2F5cyAoYG9iai15ICYjNDM7PSBleGVjLm9gKSwgYW5kIGBmcy9maWxlLmNgIGlzIGFsc28gY29tcGlsZWQgYWx3YXlzLiBUaGlzIGlzIGFsbCBsb29raW5nIGdvb2QuIEkgYW0gY29uZmlkZW50IHdpdGggdGhpcyBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXhlY1xcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvTWFrZWZpbGU9MTA9b2JqLXkgOj1cdG9wZW4ubyByZWFkX3dyaXRlLm8gZmlsZV90YWJsZS5vIHN1cGVyLm8gXFxcbmZzL01ha2VmaWxlOjExOlx0XHRjaGFyX2Rldi5vIHN0YXQubyBleGVjLm8gcGlwZS5vIG5hbWVpLm8gZmNudGwubyBcXFxuZnMvTWFrZWZpbGUtMTItXHRcdGlvY3RsLm8gcmVhZGRpci5vIHNlbGVjdC5vIGRjYWNoZS5vIGlub2RlLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk5OQoJCQkJCQkJb3V0cHV0OiAxMzgKCQkJCQkJCXRob3VnaHRzOiAxOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYGV4ZWMub2AgQ2hhbmdlKioKCk9rYXksIHNvIGBleGVjLm9gIGlzIGJha2VkIHJpZ2h0IGludG8gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IHRocm91Z2ggdGhlIGBmcy9NYWtlZmlsZWAgYXMgYW4gYG9iai15YC4gTm8gc3VycHJpc2VzIHRoZXJlLiBCdXQgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgcHJvcG9zZWQgY2hhbmdlIHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGUgY3JpdGVyaWEgYXJlIG1ldC4KCkZpcnN0LCBpcyB0aGlzIGNoYW5nZSAqV29ydGhGdXp6aW5nKj8gWWVwLCBhYnNvbHV0ZWx5LiBUaGUgcmVhc29uaW5nIGlzIHNvbGlkLiBUaGUgcGF0Y2ggaXMgbW92aW5nIGBkb19jbG9zZV9vbl9leGVjKClgIGVhcmxpZXIgaW4gYGJlZ2luX25ld19leGVjKClgIHdpdGhpbiBgZnMvZXhlYy5jYC4gVGhlIGNvcmUgb2YgdGhpcyBpcyBhYm91dCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIGRlYWRsb2NrIHNjZW5hcmlvLiBTcGVjaWZpY2FsbHkgd2l0aCBmaWxlc3lzdGVtIGZsdXNoKCkgaGFuZGxlcnMsIHN1Y2ggYXMgRlVTRSwgYmxvY2tpbmcgd2hpbGUgaG9sZGluZyB0aGUgYGV4ZWNfdXBkYXRlX2xvY2tgLiBUaGlzIGVmZmVjdGl2ZWx5IHJlb3JkZXJzIGNyaXRpY2FsIG9wZXJhdGlvbnMgaW4gdGhlIGNvcmUgVkZTL2V4ZWMgc3Vic3lzdGVtLCBhbmQgYW55IGNoYW5nZSB0b3VjaGluZyBgZXhlY2AgZGVzZXJ2ZXMgc2NydXRpbnkuCgpUaGUgKkZvY3VzU3ltYm9scyogYXJlIGNsZWFybHkgYGJlZ2luX25ld19leGVjYCBhbmQgYGRvX2Nsb3NlX29uX2V4ZWNgLiBNYWtlcyBzZW5zZSwgdGhvc2UgYXJlIHRoZSBmdW5jdGlvbnMgZGlyZWN0bHkgYWZmZWN0ZWQgYnkgdGhlIHBhdGNoLiBObyBzcGVjaWZpYyBrZXJuZWwgKkVuYWJsZUNvbmZpZ3MqIGFyZSBuZWVkZWQgdG8gcmVwcm9kdWNlIHRoaXMgaXNzdWUsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzLgoKUmlnaHQsIHNvIHdpdGggdGhhdCBjb25maXJtYXRpb24sIEkmIzM5O2xsIHBhc3MgdGhlc2UgdmFsdWVzIHRvIHRoZSBzZXQtcmVzdWx0cyBmdW5jdGlvbiBmb3IgZnV0dXJlIHVzZS4gVGhpcyBsb29rcyBsaWtlIHNvbWV0aGluZyBJIHNob3VsZCBrZWVwIGFuIGV5ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JlZ2luX25ld19leGVjJiMzNDssCiAgICAmIzM0O2RvX2Nsb3NlX29uX2V4ZWMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBleGVjdmUgbG9naWMgaW4gYmVnaW5fbmV3X2V4ZWMoKSAoZnMvZXhlYy5jKSwgbW92aW5nIHRoZSBpbnZvY2F0aW9uIG9mIGRvX2Nsb3NlX29uX2V4ZWMoKSBiZWZvcmUgZXhlY19tbWFwKCkgYW5kIHNldF9tbV9leGVfZmlsZSgpIHRvIGF2b2lkIGJsb2NraW5nIG9uIGZpbGVzeXN0ZW0gLVx1MDAzZWZsdXNoKCkgaGFuZGxlcnMgd2hpbGUgaG9sZGluZyBleGVjX3VwZGF0ZV9sb2NrLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb250cm9sIGZsb3cgYW5kIGxpZmVjeWNsZSBvcmRlciBkdXJpbmcgcHJvZ3JhbSBleGVjdXRpb24gaW4gdGhlIGNvcmUgVkZTL2V4ZWMgc3Vic3lzdGVtIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JlZ2luX25ld19leGVjJiMzNDssCiAgICAmIzM0O2RvX2Nsb3NlX29uX2V4ZWMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBleGVjdmUgbG9naWMgaW4gYmVnaW5fbmV3X2V4ZWMoKSAoZnMvZXhlYy5jKSwgbW92aW5nIHRoZSBpbnZvY2F0aW9uIG9mIGRvX2Nsb3NlX29uX2V4ZWMoKSBiZWZvcmUgZXhlY19tbWFwKCkgYW5kIHNldF9tbV9leGVfZmlsZSgpIHRvIGF2b2lkIGJsb2NraW5nIG9uIGZpbGVzeXN0ZW0gLVx1MDAzZWZsdXNoKCkgaGFuZGxlcnMgd2hpbGUgaG9sZGluZyBleGVjX3VwZGF0ZV9sb2NrLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb250cm9sIGZsb3cgYW5kIGxpZmVjeWNsZSBvcmRlciBkdXJpbmcgcHJvZ3JhbSBleGVjdXRpb24gaW4gdGhlIGNvcmUgVkZTL2V4ZWMgc3Vic3lzdGVtIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMTozNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjM1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgdGhlIGludm9jYXRpb24gb2YgYGRvX2Nsb3NlX29uX2V4ZWMobWUtXHUwMDNlZmlsZXMpYCBlYXJsaWVyIGluIGBiZWdpbl9uZXdfZXhlYygpYCwgcGxhY2luZyBpdCBiZWZvcmUgYHNldF9tbV9leGVfZmlsZSgpYCBhbmQgYGV4ZWNfbW1hcCgpYC4gVGhpcyBhdm9pZHMgaG9sZGluZyBgZXhlY191cGRhdGVfbG9ja2Agd2hpbGUgZmlsZXN5c3RlbSBgLVx1MDAzZWZsdXNoKClgIGhhbmRsZXJzIChzdWNoIGFzIEZVU0UpIHJ1biBkdXJpbmcgYGZpbHBfY2xvc2UoKWAsIHJlc29sdmluZyBwb3RlbnRpYWwgbG9ja2luZy9kZWFkbG9jayBhbmQgY29uY3VycmVuY3kgaXNzdWVzLlxuXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYSBjb250cm9sIGZsb3cgYW5kIGxvY2sgb3JkZXJpbmcgYWRqdXN0bWVudCB3aXRoaW4gcHJvY2VzcyBleGVjdXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSwgYWxsb2NhdGUsIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0YWNrL2hlYXAgYnVmZmVycywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UuIEFueSByaXNrcyBhc3NvY2lhdGVkIHdpdGggbG9ja2luZyBvciBmaWxlIGRlc2NyaXB0b3IgcmVmZXJlbmNlIGxpZmVjeWNsZXMgYXJlIG1vbml0b3JlZCBieSBMT0NLREVQIGFuZCBzdGFuZGFyZCBLQVNBTiBidWlsZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM5MDQzZjgwZWE5ZjI3ZDc3Y2IzY2U3YjJjN2I4MDBiYmNlNTMxZTMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDAxOjM0OjU3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jCmluZGV4IDc0NWY2ZWI1Mjc5ZTYuLmI1MWU1ZDdlNDUzNjcgMTAwNjQ0Ci0tLSBhL2ZzL2V4ZWMuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leGVjLmMKQEAgLTExNjQsNiAmIzQzOzExNjQsMjAgQEAgaW50IGJlZ2luX25ld19leGVjKHN0cnVjdCBsaW51eF9iaW5wcm0gKiBicHJtKQogCWlmIChyZXR2YWwpCiAJCWdvdG8gb3V0OwogCiYjNDM7CS8qCiYjNDM7CSAqIFdlIGhhdmUgdG8gYXBwbHkgQ0xPRVhFQyBiZWZvcmUgd2UgY2hhbmdlIHdoZXRoZXIgdGhlIHByb2Nlc3MgaXMKJiM0MzsJICogZHVtcGFibGUgKGluIHNldHVwX25ld19leGVjKSB0byBhdm9pZCBhIHJhY2Ugd2l0aCBhIHByb2Nlc3MgaW4gdXNlcnNwYWNlCiYjNDM7CSAqIHRyeWluZyB0byBhY2Nlc3MgdGhlIHNob3VsZC1iZS1jbG9zZWQgZmlsZSBkZXNjcmlwdG9ycyBvZiBhIHByb2Nlc3MKJiM0MzsJICogdW5kZXJnb2luZyBleGVjKDIpLgomIzQzOwkgKgomIzQzOwkgKiBUaGlzIGNhbiBibG9jayBvbiBmaWxlc3lzdGVtIC0mZ3Q7Zmx1c2goKSBoYW5kbGVycywgaW5jbHVkaW5nIHdhaXRpbmcKJiM0MzsJICogZm9yIEZVU0UgZGFlbW9ucywgc28gZG8gaXQgYmVmb3JlIGV4ZWNfbW1hcCB0YWtlcyB0aGUKJiM0MzsJICogZXhlY191cGRhdGVfbG9jay4KJiM0MzsJICogVGhpcyBtdXN0IGhhcHBlbiBhZnRlciB0aGUgcG9pbnQgb2Ygbm8gcmV0dXJuLCBhbmQgYWZ0ZXIgdW5zaGFyaW5nCiYjNDM7CSAqIHRoZSBGRCB0YWJsZS4KJiM0MzsJICovCiYjNDM7CWRvX2Nsb3NlX29uX2V4ZWMobWUtJmd0O2ZpbGVzKTsKJiM0MzsKIAkvKgogCSAqIE11c3QgYmUgY2FsbGVkIF9iZWZvcmVfIGV4ZWNfbW1hcCgpIGFzIGJwcm0tJmd0O21tIGlzCiAJICogbm90IHZpc2libGUgdW50aWwgdGhlbi4gRG9pbmcgaXQgaGVyZSBhbHNvIGVuc3VyZXMKQEAgLTEyMTQsMTQgJiM0MzsxMjI4LDYgQEAgaW50IGJlZ2luX25ld19leGVjKHN0cnVjdCBsaW51eF9iaW5wcm0gKiBicHJtKQogCiAJY2xlYXJfc3lzY2FsbF93b3JrX3N5c2NhbGxfdXNlcl9kaXNwYXRjaChtZSk7CiAKLQkvKgotCSAqIFdlIGhhdmUgdG8gYXBwbHkgQ0xPRVhFQyBiZWZvcmUgd2UgY2hhbmdlIHdoZXRoZXIgdGhlIHByb2Nlc3MgaXMKLQkgKiBkdW1wYWJsZSAoaW4gc2V0dXBfbmV3X2V4ZWMpIHRvIGF2b2lkIGEgcmFjZSB3aXRoIGEgcHJvY2VzcyBpbiB1c2Vyc3BhY2UKLQkgKiB0cnlpbmcgdG8gYWNjZXNzIHRoZSBzaG91bGQtYmUtY2xvc2VkIGZpbGUgZGVzY3JpcHRvcnMgb2YgYSBwcm9jZXNzCi0JICogdW5kZXJnb2luZyBleGVjKDIpLgotCSAqLwotCWRvX2Nsb3NlX29uX2V4ZWMobWUtJmd0O2ZpbGVzKTsKLQogCWlmIChicHJtLSZndDtzZWN1cmVleGVjKSB7CiAJCS8qIE1ha2Ugc3VyZSBwYXJlbnQgY2Fubm90IHNpZ25hbCBwcml2aWxlZ2VkIHByb2Nlc3MuICovCiAJCW1lLSZndDtwZGVhdGhfc2lnbmFsID0gMDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzOTAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uIC0gYGZzL2V4ZWMuY2AgUGF0Y2gqKgoKT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIHRvIGBmcy9leGVjLmNgIHdhcnJhbnRzIGEgS01TQU4gZnV6emluZyBzZXNzaW9uLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHdlJiMzOTtyZSBmb2xsb3dpbmcgdGhlIHNhZmV0eSBwcm90b2NvbHMgaGVyZS4gSXQgc2VlbXMgbGlrZSB0aGlzIGlzIGp1c3Qgc3RhbmRhcmQgZGV2ZWxvcGVyIFFBLCBjb2RlIGFuYWx5c2lzLCBhbmQgc2FuaXRpemF0aW9uIGFzc2Vzc21lbnQsIG5vdGhpbmcgb3V0IG9mIHRoZSBvcmRpbmFyeSBvciByaXNreS4gR29vZCwgc2FmZSB0byBwcm9jZWVkLgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgcGF0Y2ggaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgY29kZSBpcyBhY3R1YWxseSAqZG9pbmcqLiBUaW1lIHRvIHB1bGwgdXAgdGhlIHBhdGNoIGFuZCBsaWtlbHkgcmVhY2ggZm9yIGByZWFkLWZpbGVgIG9yIGV2ZW4gYGdyZXBwZXJgIHRvIGV4YW1pbmUgdGhlIHJlbGV2YW50IHNlY3Rpb24gb2YgYGZzL2V4ZWMuY2AsIGVzcGVjaWFsbHkgYXJvdW5kIHRoYXQgYGJlZ2luX25ld19leGVjYCBmdW5jdGlvbi4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY2hhbmdlcyBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucy4gSSBuZWVkIHRvIGFzc2VzcyBpZiB0aGlzIHBhdGNoIGNvdWxkIGludHJvZHVjZSBhbnkgbWVtb3J5IHNhZmV0eSB2dWxuZXJhYmlsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXhlYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTUwOlx0XG4xMTUxOlx0XHQvKiBNYWtlIHRoaXMgdGhlIG9ubHkgdGhyZWFkIGluIHRoZSB0aHJlYWQgZ3JvdXAgKi9cbjExNTI6XHRcdHJldHZhbCA9IGRlX3RocmVhZChtZSk7XG4xMTUzOlx0XHRpZiAocmV0dmFsKVxuMTE1NDpcdFx0XHRnb3RvIG91dDtcbjExNTU6XHRcdC8qIHNlZSB0aGUgY29tbWVudCBpbiBjaGVja191bnNhZmVfZXhlYygpICovXG4xMTU2Olx0XHRjdXJyZW50LVx1MDAzZWZzLVx1MDAzZWluX2V4ZWMgPSAwO1xuMTE1NzpcdFx0LypcbjExNTg6XHRcdCAqIENhbmNlbCBhbnkgaW9fdXJpbmcgYWN0aXZpdHkgYWNyb3NzIGV4ZWN2ZVxuMTE1OTpcdFx0ICovXG4xMTYwOlx0XHRpb191cmluZ190YXNrX2NhbmNlbCgpO1xuMTE2MTpcdFxuMTE2MjpcdFx0LyogRW5zdXJlIHRoZSBmaWxlcyB0YWJsZSBpcyBub3Qgc2hhcmVkLiAqL1xuMTE2MzpcdFx0cmV0dmFsID0gdW5zaGFyZV9maWxlcygpO1xuMTE2NDpcdFx0aWYgKHJldHZhbClcbjExNjU6XHRcdFx0Z290byBvdXQ7XG4xMTY2Olx0XG4xMTY3Olx0XHQvKlxuMTE2ODpcdFx0ICogV2UgaGF2ZSB0byBhcHBseSBDTE9FWEVDIGJlZm9yZSB3ZSBjaGFuZ2Ugd2hldGhlciB0aGUgcHJvY2VzcyBpc1xuMTE2OTpcdFx0ICogZHVtcGFibGUgKGluIHNldHVwX25ld19leGVjKSB0byBhdm9pZCBhIHJhY2Ugd2l0aCBhIHByb2Nlc3MgaW4gdXNlcnNwYWNlXG4xMTcwOlx0XHQgKiB0cnlpbmcgdG8gYWNjZXNzIHRoZSBzaG91bGQtYmUtY2xvc2VkIGZpbGUgZGVzY3JpcHRvcnMgb2YgYSBwcm9jZXNzXG4xMTcxOlx0XHQgKiB1bmRlcmdvaW5nIGV4ZWMoMikuXG4xMTcyOlx0XHQgKlxuMTE3MzpcdFx0ICogVGhpcyBjYW4gYmxvY2sgb24gZmlsZXN5c3RlbSAtXHUwMDNlZmx1c2goKSBoYW5kbGVycywgaW5jbHVkaW5nIHdhaXRpbmdcbjExNzQ6XHRcdCAqIGZvciBGVVNFIGRhZW1vbnMsIHNvIGRvIGl0IGJlZm9yZSBleGVjX21tYXAgdGFrZXMgdGhlXG4xMTc1Olx0XHQgKiBleGVjX3VwZGF0ZV9sb2NrLlxuMTE3NjpcdFx0ICogVGhpcyBtdXN0IGhhcHBlbiBhZnRlciB0aGUgcG9pbnQgb2Ygbm8gcmV0dXJuLCBhbmQgYWZ0ZXIgdW5zaGFyaW5nXG4xMTc3Olx0XHQgKiB0aGUgRkQgdGFibGUuXG4xMTc4Olx0XHQgKi9cbjExNzk6XHRcdGRvX2Nsb3NlX29uX2V4ZWMobWUtXHUwMDNlZmlsZXMpO1xuMTE4MDpcdFxuMTE4MTpcdFx0LypcbjExODI6XHRcdCAqIE11c3QgYmUgY2FsbGVkIF9iZWZvcmVfIGV4ZWNfbW1hcCgpIGFzIGJwcm0tXHUwMDNlbW0gaXNcbjExODM6XHRcdCAqIG5vdCB2aXNpYmxlIHVudGlsIHRoZW4uIERvaW5nIGl0IGhlcmUgYWxzbyBlbnN1cmVzXG4xMTg0Olx0XHQgKiB3ZSBkb24mIzM5O3QgcmFjZSBhZ2FpbnN0IHJlcGxhY2VfbW1fZXhlX2ZpbGUoKS5cbjExODU6XHRcdCAqL1xuMTE4NjpcdFx0cmV0dmFsID0gc2V0X21tX2V4ZV9maWxlKGJwcm0tXHUwMDNlbW0sIGJwcm1faWRlbnRpdHlfZmlsZShicHJtKSk7XG4xMTg3Olx0XHRpZiAocmV0dmFsKVxuMTE4ODpcdFx0XHRnb3RvIG91dDtcbjExODk6XHRcbjExOTA6XHRcdC8qIElmIHRoZSBiaW5hcnkgaXMgbm90IHJlYWRhYmxlIHRoZW4gZW5mb3JjZSBtbS1cdTAwM2VkdW1wYWJsZT0wICovXG4xMTkxOlx0XHR3b3VsZF9kdW1wKGJwcm0sIGJwcm0tXHUwMDNlZmlsZSk7XG4xMTkyOlx0XHRpZiAoYnBybS1cdTAwM2VoYXZlX2V4ZWNmZClcbjExOTM6XHRcdFx0d291bGRfZHVtcChicHJtLCBicHJtLVx1MDAzZWV4ZWN1dGFibGUpO1xuMTE5NDpcdFxuMTE5NTpcdFx0LypcbjExOTY6XHRcdCAqIFJlbGVhc2UgYWxsIG9mIHRoZSBvbGQgbW1hcCBzdHVmZlxuMTE5NzpcdFx0ICovXG4xMTk4Olx0XHRhY2N0X2FyZ19zaXplKGJwcm0sIDApO1xuMTE5OTpcdFx0cmV0dmFsID0gZXhlY19tbWFwKGJwcm0pO1xuMTIwMDpcdFx0aWYgKHJldHZhbClcbjEyMDE6XHRcdFx0Z290byBvdXQ7XG4xMjAyOlx0XG4xMjAzOlx0XHRicHJtLVx1MDAzZW1tID0gTlVMTDtcbjEyMDQ6XHRcbjEyMDU6XHRcdHJldHZhbCA9IGV4ZWNfdGFza19uYW1lc3BhY2VzKCk7XG4xMjA2Olx0XHRpZiAocmV0dmFsKVxuMTIwNzpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xMjA4Olx0XG4xMjA5Olx0I2lmZGVmIENPTkZJR19QT1NJWF9USU1FUlNcbjEyMTA6XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2bWUtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWdsb2NrKTtcbjEyMTE6XHRcdHBvc2l4X2NwdV90aW1lcnNfZXhpdChtZSk7XG4xMjEyOlx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2bWUtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWdsb2NrKTtcbjEyMTM6XHRcdGV4aXRfaXRpbWVycyhtZSk7XG4xMjE0Olx0XHRmbHVzaF9pdGltZXJfc2lnbmFscygpO1xuMTIxNTpcdCNlbmRpZlxuMTIxNjpcdFxuMTIxNzpcdFx0LypcbjEyMTg6XHRcdCAqIE1ha2UgdGhlIHNpZ25hbCB0YWJsZSBwcml2YXRlLlxuMTIxOTpcdFx0ICovXG4xMjIwOlx0XHRyZXR2YWwgPSB1bnNoYXJlX3NpZ2hhbmQobWUpO1xuMTIyMTpcdFx0aWYgKHJldHZhbClcbjEyMjI6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuMTIyMzpcdFxuMTIyNDpcdFx0bWUtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+KFBGX1JBTkRPTUlaRSB8IFBGX0ZPUktOT0VYRUMgfFxuMTIyNTpcdFx0XHRcdFx0XHRQRl9OT0ZSRUVaRSB8IFBGX05PX1NFVEFGRklOSVRZKTtcbjEyMjY6XHRcdGZsdXNoX3RocmVhZCgpO1xuMTIyNzpcdFx0bWUtXHUwMDNlcGVyc29uYWxpdHkgXHUwMDI2PSB+YnBybS1cdTAwM2VwZXJfY2xlYXI7XG4xMjI4Olx0XG4xMjI5Olx0XHRjbGVhcl9zeXNjYWxsX3dvcmtfc3lzY2FsbF91c2VyX2Rpc3BhdGNoKG1lKTtcbjEyMzA6XHRcbjEyMzE6XHRcdGlmIChicHJtLVx1MDAzZXNlY3VyZWV4ZWMpIHtcbjEyMzI6XHRcdFx0LyogTWFrZSBzdXJlIHBhcmVudCBjYW5ub3Qgc2lnbmFsIHByaXZpbGVnZWQgcHJvY2Vzcy4gKi9cbjEyMzM6XHRcdFx0bWUtXHUwMDNlcGRlYXRoX3NpZ25hbCA9IDA7XG4xMjM0Olx0XG4xMjM1Olx0XHRcdC8qXG4xMjM2Olx0XHRcdCAqIEZvciBzZWN1cmVleGVjLCByZXNldCB0aGUgc3RhY2sgbGltaXQgdG8gc2FuZSBkZWZhdWx0IHRvXG4xMjM3Olx0XHRcdCAqIGF2b2lkIGJhZCBiZWhhdmlvciBmcm9tIHRoZSBwcmlvciBybGltaXRzLiBUaGlzIGhhcyB0b1xuMTIzODpcdFx0XHQgKiBoYXBwZW4gYmVmb3JlIGFyY2hfcGlja19tbWFwX2xheW91dCgpLCB3aGljaCBleGFtaW5lc1xuMTIzOTpcdFx0XHQgKiBSTElNSVRfU1RBQ0ssIGJ1dCBhZnRlciB0aGUgcG9pbnQgb2Ygbm8gcmV0dXJuIHRvIGF2b2lkXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMjcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogRmlsZSBEZXNjcmlwdG9yIE1hbmFnZW1lbnQgRHVyaW5nIGBleGVjdmVgKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgbW92aW5nIHRoZSBgZG9fY2xvc2Vfb25fZXhlYyhtZS0mZ3Q7ZmlsZXMpYCBjYWxsIGluIGBiZWdpbl9uZXdfZXhlY2AgZnVuY3Rpb24uIEl0IHNlZW1zIHRoYXQgcHJldmlvdXNseSwgdGhpcyBjYWxsIHdhcyBoYXBwZW5pbmcgKmFmdGVyKiBzb21lIGNydWNpYWwgb3BlcmF0aW9ucyBsaWtlIHNpZ25hbCBoYW5kbGVyIHVuc2hhcmluZyBhbmQgdGhyZWFkIGZsdXNoaW5nLiBOb3csIHRoZXkmIzM5O3JlIHNoaWZ0aW5nIGl0ICplYXJsaWVyKiBpbiB0aGUgc2VxdWVuY2UsIHJpZ2h0IGFmdGVyIGB1bnNoYXJlX2ZpbGVzKClgIGJ1dCAqYmVmb3JlKiB0aGUgbWVtb3J5IG1hcCBzZXR1cCBhbmQgZXhlY3V0YWJsZSBmaWxlIGJpbmRpbmcuIEludGVyZXN0aW5nLgoKVGhlIHJhdGlvbmFsZSBmb3IgdGhpcyBjaGFuZ2UgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBUaGUgY29tbWVudCBpbmRpY2F0ZXMgdGhhdCBgZG9fY2xvc2Vfb25fZXhlY2AgY2FuIHBvdGVudGlhbGx5IGJsb2NrIGR1ZSB0byBmaWxlc3lzdGVtIGZsdXNoIGhhbmRsZXJzLCBzcGVjaWZpY2FsbHkgd2FpdGluZyBvbiBGVVNFIGRhZW1vbnMuIE1ha2VzIHNlbnNlIOKAkyB0aG9zZSBJL08gb3BlcmF0aW9ucyBjYW4gYmUgYXN5bmNocm9ub3VzIGFuZCBsZWFkIHRvIGRlbGF5cy4gU28sIHRoZSBnb2FsIGlzIHRvIGV4ZWN1dGUgdGhpcyBjYWxsICpiZWZvcmUqIHdlIGdyYWIgdGhlIGBleGVjX3VwZGF0ZV9sb2NrYCBkdXJpbmcgYGV4ZWNfbW1hcGAuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgZGVhZGxvY2sgc2NlbmFyaW8gb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVjayB0aGF0IHRoZXkmIzM5O3JlIHRyeWluZyB0byBjaXJjdW12ZW50LiBUaGlzIGFsc28gcG9pbnRzIHRvIGVuc3VyaW5nIHRoZSBmaWxlIGRlc2NyaXB0b3IgdW5zaGFyaW5nIGhhcyBiZWVuIHBlcmZvcm1lZCBzbyB3ZSBkb24mIzM5O3QgZW5kIHVwIGNsb3NpbmcgZmlsZSBkZXNjcmlwdG9ycyBpbiB0aGUgd3JvbmcgcHJvY2VzcyBjb250ZXh0LiBFc3NlbnRpYWxseSwgdGhpcyBpcyBpbnRlbmRlZCB0byBhdm9pZCBwb3RlbnRpYWwgbG9jayBjb250ZW50aW9uIG9uIHRoZSBjcml0aWNhbCBgZXhlY191cGRhdGVfbG9ja2AgdGhhdCBpcyBjcml0aWNhbCBkdXJpbmcgdGhlIHByb2Nlc3Mgb2YgY3JlYXRpbmcgYSBuZXcgbWVtb3J5IG1hcCwgdGh1cyBlbnN1cmluZyB0aGF0IHRoZSBmaWxlIGRlc2NyaXB0b3IgY2xlYW51cCBoYXBwZW5zIGJlZm9yZSBtZW1vcnkgYWxsb2NhdGlvbi4gVGhlIGNyaXRpY2FsIGNvbnN0cmFpbnQgaXMgdGhhdCB0aGUgZmlsZSBkZXNjcmlwdG9yIHRhYmxlIG11c3QgaGF2ZSBiZWVuIHVuc2hhcmVkIGF0IHRoaXMgcG9pbnQuCgpOb3csIEkgbmVlZCB0byB2ZXJpZnkgd2hhdCBgZG9fY2xvc2Vfb25fZXhlY2AgYWN0dWFsbHkgKmRvZXMqLiBVbmRlcnN0YW5kaW5nIHRoZSBtZWNoYW5pY3Mgb2YgdGhhdCBmdW5jdGlvbiBpcyBrZXkgdG8gZnVsbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHNoaWZ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIGRvX2Nsb3NlX29uX2V4ZWMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZmlsZS5jPTg3OD1zdHJ1Y3QgZmlsZSAqZmlsZV9jbG9zZV9mZCh1bnNpZ25lZCBpbnQgZmQpXG4tLVxuZnMvZmlsZS5jLTg4OS1cbmZzL2ZpbGUuYzo4OTA6dm9pZCBkb19jbG9zZV9vbl9leGVjKHN0cnVjdCBmaWxlc19zdHJ1Y3QgKmZpbGVzKVxuZnMvZmlsZS5jLTg5MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NzcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBmcy9maWxlLmNgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBNeSBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB0aGF0IHRoZSByb290IG9mIHRoZSBwcm9ibGVtIGxpa2VseSBsaWVzIHdpdGhpbiB0aGUgZmlsZSBzeXN0ZW0gY29kZSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gZmlsZSBvcGVyYXRpb25zLiBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBgZnMvZmlsZS5jYCwgYW5kIEkgc3VzcGVjdCB0aGF0IGxpbmUgODkwIG9yIHRoZXJlYWJvdXRzIG1pZ2h0IGNvbnRhaW4gdGhlIGNydWNpYWwgY2x1ZS4gSSYjMzk7bGwgbmVlZCB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9maWxlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4ODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg4NTpcdFx0c3Bpbl91bmxvY2soXHUwMDI2ZmlsZXMtXHUwMDNlZmlsZV9sb2NrKTtcbiA4ODY6XHRcbiA4ODc6XHRcdHJldHVybiBmaWxlO1xuIDg4ODpcdH1cbiA4ODk6XHRcbiA4OTA6XHR2b2lkIGRvX2Nsb3NlX29uX2V4ZWMoc3RydWN0IGZpbGVzX3N0cnVjdCAqZmlsZXMpXG4gODkxOlx0e1xuIDg5MjpcdFx0dW5zaWduZWQgaTtcbiA4OTM6XHRcdHN0cnVjdCBmZHRhYmxlICpmZHQ7XG4gODk0Olx0XG4gODk1Olx0XHQvKiBleGVjIHVuc2hhcmVzIGZpcnN0ICovXG4gODk2Olx0XHRzcGluX2xvY2soXHUwMDI2ZmlsZXMtXHUwMDNlZmlsZV9sb2NrKTtcbiA4OTc6XHRcdGZvciAoaSA9IDA7IDsgaSYjNDM7JiM0MzspIHtcbiA4OTg6XHRcdFx0dW5zaWduZWQgbG9uZyBzZXQ7XG4gODk5Olx0XHRcdHVuc2lnbmVkIGZkID0gaSAqIEJJVFNfUEVSX0xPTkc7XG4gOTAwOlx0XHRcdGZkdCA9IGZpbGVzX2ZkdGFibGUoZmlsZXMpO1xuIDkwMTpcdFx0XHRpZiAoZmQgXHUwMDNlPSBmZHQtXHUwMDNlbWF4X2ZkcylcbiA5MDI6XHRcdFx0XHRicmVhaztcbiA5MDM6XHRcdFx0c2V0ID0gZmR0LVx1MDAzZWNsb3NlX29uX2V4ZWNbaV07XG4gOTA0Olx0XHRcdGlmICghc2V0KVxuIDkwNTpcdFx0XHRcdGNvbnRpbnVlO1xuIDkwNjpcdFx0XHRmZHQtXHUwMDNlY2xvc2Vfb25fZXhlY1tpXSA9IDA7XG4gOTA3Olx0XHRcdGZvciAoIDsgc2V0IDsgZmQmIzQzOyYjNDM7LCBzZXQgXHUwMDNlXHUwMDNlPSAxKSB7XG4gOTA4Olx0XHRcdFx0c3RydWN0IGZpbGUgKmZpbGU7XG4gOTA5Olx0XHRcdFx0aWYgKCEoc2V0IFx1MDAyNiAxKSlcbiA5MTA6XHRcdFx0XHRcdGNvbnRpbnVlO1xuIDkxMTpcdFx0XHRcdGZpbGUgPSBmZHQtXHUwMDNlZmRbZmRdO1xuIDkxMjpcdFx0XHRcdGlmICghZmlsZSlcbiA5MTM6XHRcdFx0XHRcdGNvbnRpbnVlO1xuIDkxNDpcdFx0XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihmZHQtXHUwMDNlZmRbZmRdLCBOVUxMKTtcbiA5MTU6XHRcdFx0XHRfX3B1dF91bnVzZWRfZmQoZmlsZXMsIGZkKTtcbiA5MTY6XHRcdFx0XHRzcGluX3VubG9jayhcdTAwMjZmaWxlcy1cdTAwM2VmaWxlX2xvY2spO1xuIDkxNzpcdFx0XHRcdGZpbHBfY2xvc2UoZmlsZSwgZmlsZXMpO1xuIDkxODpcdFx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuIDkxOTpcdFx0XHRcdHNwaW5fbG9jayhcdTAwMjZmaWxlcy1cdTAwM2VmaWxlX2xvY2spO1xuIDkyMDpcdFx0XHR9XG4gOTIxOlx0XG4gOTIyOlx0XHR9XG4gOTIzOlx0XHRzcGluX3VubG9jayhcdTAwMjZmaWxlcy1cdTAwM2VmaWxlX2xvY2spO1xuIDkyNDpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM5NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipBbmFseXppbmcgUG90ZW50aWFsIEZhaWx1cmUgUG9pbnRzIGluIGBiZWdpbl9uZXdfZXhlY2AqKgoKUmlnaHQsIEkmIzM5O20gZGl2aW5nIGludG8gYGJlZ2luX25ld19leGVjYCBhbmQgdGhpbmtpbmcgYWJvdXQgaXRzIHJlc2lsaWVuY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGFsbCB0aGUgcG90ZW50aWFsIGZhaWx1cmUgcG9pbnRzIGFuZCBob3cgdGhlIGNvZGUgaGFuZGxlcyB0aGVtLCBlc3BlY2lhbGx5IHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIGZ1bmN0aW9uLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGZhaWx1cmUgbW9kZXMgcmVsYXRlZCB0byBgc2V0X21tX2V4ZV9maWxlKClgIGFuZCBgZXhlY19tbWFwKClgLiBJZiBlaXRoZXIgb2YgdGhvc2UgZmFpbHMsIEkgc2VlIHRoYXQgdGhlIGNvZGUgYnJhbmNoZXMgdG8gYGdvdG8gb3V0O2Agb3IgYGdvdG8gb3V0X3VubG9jaztgLiBUaGF0JiMzOTtzIHRoZSBtYWluIHBhdGggSSBuZWVkIHRvIHNjcnV0aW5pemUg4oCTIHRoZSBlcnJvciBoYW5kbGluZyBpcyBjcml0aWNhbCBoZXJlLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhvc2UgZXJyb3IgcGF0aHMgYXJlIGNsZWFuLCB0aGF0IHJlc291cmNlcyBhcmUgcHJvcGVybHkgcmVsZWFzZWQsIGFuZCB0aGF0IHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyBhcmUgYXBwcm9wcmlhdGVseSBub3RpZmllZCBvZiB0aGUgcHJvYmxlbS4gVGltZSB0byBkaWcgZGVlcGVyIGludG8gdGhlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGlzIGZ1bmN0aW9uIGFuZCBtYWtlIHN1cmUgd2UgaGF2ZSBhIHJvYnVzdCBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXhlYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjYwOlx0XHRwZXJmX2V2ZW50X2V4ZWMoKTtcbjEyNjE6XHRcbjEyNjI6XHRcdC8qXG4xMjYzOlx0XHQgKiBJZiB0aGUgb3JpZ2luYWwgZmlsZW5hbWUgd2FzIGVtcHR5LCBhbGxvY19icHJtKCkgbWFkZSB1cCBhIHBhdGhcbjEyNjQ6XHRcdCAqIHRoYXQgd2lsbCBwcm9iYWJseSBub3QgYmUgdXNlZnVsIHRvIGFkbWlucyBydW5uaW5nIHBzIG9yIHNpbWlsYXIuXG4xMjY1Olx0XHQgKiBMZXQmIzM5O3MgZml4IGl0IHVwIHRvIGJlIHNvbWV0aGluZyByZWFzb25hYmxlLlxuMTI2NjpcdFx0ICovXG4xMjY3Olx0XHRpZiAoYnBybS1cdTAwM2Vjb21tX2Zyb21fZGVudHJ5KSB7XG4xMjY4Olx0XHRcdHN0cnVjdCBmaWxlICpjb21tX2ZpbGUgPSBicHJtX2lkZW50aXR5X2ZpbGUoYnBybSk7XG4xMjY5Olx0XG4xMjcwOlx0XHRcdC8qXG4xMjcxOlx0XHRcdCAqIEhvbGQgUkNVIGxvY2sgdG8ga2VlcCB0aGUgbmFtZSBmcm9tIGJlaW5nIGZyZWVkIGJlaGluZCBvdXIgYmFjay5cbjEyNzI6XHRcdFx0ICogVXNlIGFjcXVpcmUgc2VtYW50aWNzIHRvIG1ha2Ugc3VyZSB0aGUgdGVybWluYXRpbmcgTlVMIGZyb21cbjEyNzM6XHRcdFx0ICogX19kX2FsbG9jKCkgaXMgc2Vlbi5cbjEyNzQ6XHRcdFx0ICpcbjEyNzU6XHRcdFx0ICogTm90ZSwgd2UmIzM5O3JlIGRlbGliZXJhdGVseSBzbG9wcHkgaGVyZS4gV2UgZG9uJiMzOTt0IG5lZWQgdG8gY2FyZSBhYm91dFxuMTI3NjpcdFx0XHQgKiBkZXRlY3RpbmcgYSBjb25jdXJyZW50IHJlbmFtZSBhbmQganVzdCB3YW50IGEgdGVybWluYXRlZCBuYW1lLlxuMTI3NzpcdFx0XHQgKi9cbjEyNzg6XHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuMTI3OTpcdFx0XHRfX3NldF90YXNrX2NvbW0obWUsIHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2Y29tbV9maWxlLVx1MDAzZWZfcGF0aC5kZW50cnktXHUwMDNlZF9uYW1lLm5hbWUpLFxuMTI4MDpcdFx0XHRcdFx0dHJ1ZSk7XG4xMjgxOlx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMTI4MjpcdFx0fSBlbHNlIHtcbjEyODM6XHRcdFx0X19zZXRfdGFza19jb21tKG1lLCBrYmFzZW5hbWUoYnBybS1cdTAwM2VmaWxlbmFtZSksIHRydWUpO1xuMTI4NDpcdFx0fVxuMTI4NTpcdFxuMTI4NjpcdFx0LyogQW4gZXhlYyBjaGFuZ2VzIG91ciBkb21haW4uIFdlIGFyZSBubyBsb25nZXIgcGFydCBvZiB0aGUgdGhyZWFkXG4xMjg3Olx0XHQgICBncm91cCAqL1xuMTI4ODpcdFx0V1JJVEVfT05DRShtZS1cdTAwM2VzZWxmX2V4ZWNfaWQsIG1lLVx1MDAzZXNlbGZfZXhlY19pZCAmIzQzOyAxKTtcbjEyODk6XHRcdGZsdXNoX3NpZ25hbF9oYW5kbGVycyhtZSwgMCk7XG4xMjkwOlx0XG4xMjkxOlx0XHRyZXR2YWwgPSBzZXRfY3JlZF91Y291bnRzKGJwcm0tXHUwMDNlY3JlZCk7XG4xMjkyOlx0XHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuMTI5MzpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xMjk0Olx0XG4xMjk1Olx0XHQvKlxuMTI5NjpcdFx0ICogaW5zdGFsbCB0aGUgbmV3IGNyZWRlbnRpYWxzIGZvciB0aGlzIGV4ZWN1dGFibGVcbjEyOTc6XHRcdCAqL1xuMTI5ODpcdFx0c2VjdXJpdHlfYnBybV9jb21taXR0aW5nX2NyZWRzKGJwcm0pO1xuMTI5OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzIxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0LgoKKipEZWNvbnN0cnVjdGluZyBgYmVnaW5fbmV3X2V4ZWNgIC0gQSBEZWVwIERpdmUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIGBiZWdpbl9uZXdfZXhlY2AuIEkgbmVlZCB0byByZWFsbHkgdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgZnVuY3Rpb25pbmcgYXMgaXQmIzM5O3MgdGhlIGNvcmUgb2YgaG93IHdlIGtpY2sgb2ZmIGEgbmV3IGV4ZWN1dGlvbiBjb250ZXh0LiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSAqcmVzdCogb2YgdGhlIGZ1bmN0aW9uLCBiZWNhdXNlIHRoZSBpbml0aWFsIHBhcnRzIGFyZSBwcm9iYWJseSBib2lsZXJwbGF0ZSBvciB3ZWxsIHVuZGVyc3Rvb2QgYWxyZWFkeS4gSSB3YW50IHRvIHNlZSB0aGUgbWVhdC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgaW50cmljYWNpZXMuIFNwZWNpZmljYWxseSwgaG93IGl0IGhhbmRsZXMgc2V0dXAsIHJlc291cmNlIGFsbG9jYXRpb24sIGFueSBuZWNlc3NhcnkgaW5pdGlhbGl6YXRpb24sIGFuZCBtb3N0IGltcG9ydGFudGx5LCB3aGVyZSB0aGUgY29udHJvbCBmbG93IGhhbmRzIG92ZXIgdGhlIGV4ZWN1dGlvbiB0byBzb21ldGhpbmcgZWxzZS4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IGl0IGlzIHJlc3BvbnNpYmxlIGZvciBwcmVwYXJpbmcgYW4gZW52aXJvbm1lbnQsIHBlcmhhcHMgc2V0dGluZyB1cCBtZW1vcnkgc3BhY2VzLCB0aHJlYWRzLCBzaWduYWwgaGFuZGxlcnMsIGFuZCB0aGVuIHBhc3NpbmcgdGhlIGJhdG9uLiBNeSBnb2FsIGlzIHRvIGdyYXNwIHRoZSBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zLCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24sIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgYnVncyBsdXJraW5nIGluIHRoZSBzaGFkb3dzLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIHByb3ZpZGUgdGhlICYjMzQ7Z2VuZXNpcyYjMzQ7IHRvIGEgbmV3IHRocmVhZCBvciBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4ZWMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTMwMDpcdFx0Y29tbWl0X2NyZWRzKGJwcm0tXHUwMDNlY3JlZCk7XG4xMzAxOlx0XHRicHJtLVx1MDAzZWNyZWQgPSBOVUxMO1xuMTMwMjpcdFxuMTMwMzpcdFx0LypcbjEzMDQ6XHRcdCAqIERpc2FibGUgbW9uaXRvcmluZyBmb3IgcmVndWxhciB1c2Vyc1xuMTMwNTpcdFx0ICogd2hlbiBleGVjdXRpbmcgc2V0dWlkIGJpbmFyaWVzLiBNdXN0XG4xMzA2Olx0XHQgKiB3YWl0IHVudGlsIG5ldyBjcmVkZW50aWFscyBhcmUgY29tbWl0dGVkXG4xMzA3Olx0XHQgKiBieSBjb21taXRfY3JlZHMoKSBhYm92ZVxuMTMwODpcdFx0ICovXG4xMzA5Olx0XHRpZiAodGFza19leGVjX3N0YXRlX2dldF9kdW1wYWJsZShtZSkgIT0gVEFTS19EVU1QQUJMRV9PV05FUilcbjEzMTA6XHRcdFx0cGVyZl9ldmVudF9leGl0X3Rhc2sobWUpO1xuMTMxMTpcdFx0LypcbjEzMTI6XHRcdCAqIGNyZWRfZ3VhcmRfbXV0ZXggbXVzdCBiZSBoZWxkIGF0IGxlYXN0IHRvIHRoaXMgcG9pbnQgdG8gcHJldmVudFxuMTMxMzpcdFx0ICogcHRyYWNlX2F0dGFjaCgpIGZyb20gYWx0ZXJpbmcgb3VyIGRldGVybWluYXRpb24gb2YgdGhlIHRhc2smIzM5O3NcbjEzMTQ6XHRcdCAqIGNyZWRlbnRpYWxzOyBhbnkgdGltZSBhZnRlciB0aGlzIGl0IG1heSBiZSB1bmxvY2tlZC5cbjEzMTU6XHRcdCAqL1xuMTMxNjpcdFx0c2VjdXJpdHlfYnBybV9jb21taXR0ZWRfY3JlZHMoYnBybSk7XG4xMzE3Olx0XG4xMzE4Olx0XHQvKiBQYXNzIHRoZSBvcGVuZWQgYmluYXJ5IHRvIHRoZSBpbnRlcnByZXRlci4gKi9cbjEzMTk6XHRcdGlmIChicHJtLVx1MDAzZWhhdmVfZXhlY2ZkKSB7XG4xMzIwOlx0XHRcdHN0cnVjdCBmaWxlICpleGVjdXRhYmxlID0gYnBybS1cdTAwM2VleGVjdXRhYmxlO1xuMTMyMTpcdFxuMTMyMjpcdFx0XHQvKiBtbS1cdTAwM2VleGVfZmlsZSBjYXJyaWVzIGl0cyBvd24gd3JpdGUgZGVuaWFsIG5vdyBzbyBkcm9wIGl0LiAqL1xuMTMyMzpcdFx0XHRleGVfZmlsZV9hbGxvd193cml0ZV9hY2Nlc3MoZXhlY3V0YWJsZSk7XG4xMzI0Olx0XHRcdGJwcm0tXHUwMDNlZXhlY3V0YWJsZSA9IE5VTEw7XG4xMzI1Olx0XHRcdHJldHZhbCA9IEZEX0FERCgwLCBleGVjdXRhYmxlKTtcbjEzMjY6XHRcdFx0aWYgKHJldHZhbCBcdTAwM2MgMCkge1xuMTMyNzpcdFx0XHRcdC8qIFRoZSByZWZlcmVuY2Ugd2FzIG5vdCBjb25zdW1lZC4gKi9cbjEzMjg6XHRcdFx0XHRmcHV0KGV4ZWN1dGFibGUpO1xuMTMyOTpcdFx0XHRcdGdvdG8gb3V0X3VubG9jaztcbjEzMzA6XHRcdFx0fVxuMTMzMTpcdFx0XHRicHJtLVx1MDAzZWV4ZWNmZCA9IHJldHZhbDtcbjEzMzI6XHRcdH1cbjEzMzM6XHRcdHJldHVybiAwO1xuMTMzNDpcdFxuMTMzNTpcdG91dF91bmxvY2s6XG4xMzM2Olx0XHR1cF93cml0ZShcdTAwMjZtZS1cdTAwM2VzaWduYWwtXHUwMDNlZXhlY191cGRhdGVfbG9jayk7XG4xMzM3Olx0XHRpZiAoIWJwcm0tXHUwMDNlY3JlZClcbjEzMzg6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1lLVx1MDAzZXNpZ25hbC1cdTAwM2VjcmVkX2d1YXJkX211dGV4KTtcbjEzMzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE5NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBJJiMzOTttIHJlYWR5LiBMZXQmIzM5O3MgZGl2ZSBpbi4KCioqQW5hbHl6aW5nIExpbmVzIDEzNDAtMTM2MCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgcHVsbCB1cCBsaW5lcyAxMzQwLTEzNjAuIEJhc2VkIG9uIG15IGV4aXN0aW5nIGtub3dsZWRnZSBvZiB0aGUgZmllbGQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBzZWN0aW9uIGFkZHJlc3NlcyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciBwaWVjZSwgYW5kIHdoYXQgdGhlIGtleSBhcmd1bWVudHMgb3IgZmluZGluZ3MgYXJlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGUgY2VudHJhbCB0aGVzaXMgb2YgdGhpcyBzZWN0aW9uLCBhbnkgc3VwcG9ydGluZyBldmlkZW5jZSBwcmVzZW50ZWQsIGFuZCBob3cgaXQgY29ubmVjdHMgdG8gdGhlIGJyb2FkZXIgdG9waWMuIElzIHRoaXMgYSBjcml0aWNhbCB0dXJuaW5nIHBvaW50PyBEb2VzIHRoaXMgc2VjdGlvbiBhZGQgbnVhbmNlIHRvIGEgcHJldmlvdXMgYXJndW1lbnQ/IFBlcmhhcHMgaXQgaW50cm9kdWNlcyBhIG5ldyB2YXJpYWJsZSB0aGF0IHdpbGwgY2hhbmdlIHdoYXQgSSBuZWVkIHRvIGNvbnNpZGVyPyBJJiMzOTtsbCBuZWVkIHRvIGRpc3NlY3QgdGhlIHNwZWNpZmljcywgaWRlbnRpZnlpbmcgdGhlIGtleSBjb25jZXB0cyBhbmQgamFyZ29uIHVzZWQsIGFuZCB3aGV0aGVyIHRoZSBsYW5ndWFnZSBpcyBwcmVjaXNlIGFuZCByaWdvcm91cy4gSSYjMzk7bSBsb29raW5nIGZvciBhbnkgd2Vha25lc3NlcyBpbiB0aGUgbG9naWMsIGFueSBhc3N1bXB0aW9ucyB0aGF0IG5lZWQgdG8gYmUgY2hhbGxlbmdlZCwgYW5kIGFueSBvcHBvcnR1bml0aWVzIHRvIGV4dGVuZCBvciBidWlsZCB1cG9uIHRoZSBpZGVhcyBwcmVzZW50ZWQuIEkmIzM5O2xsIGJlIGNyaXRpY2FsbHkgZXZhbHVhdGluZywgcXVlc3Rpb25pbmcsIGFuZCBjb25uZWN0aW5nLiBBbmQgZmluYWxseSwgSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjb25uZWN0cyB0byBwcmlvciBkaXNjdXNzaW9ucyB0aGF0IEkmIzM5O20gYXdhcmUgb2YgaW4gdGhlIGxhcmdlciBmaWVsZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leGVjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzNDA6XHRvdXQ6XG4xMzQxOlx0XHRyZXR1cm4gcmV0dmFsO1xuMTM0MjpcdH1cbjEzNDM6XHRFWFBPUlRfU1lNQk9MKGJlZ2luX25ld19leGVjKTtcbjEzNDQ6XHRcbjEzNDU6XHR2b2lkIHdvdWxkX2R1bXAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgc3RydWN0IGZpbGUgKmZpbGUpXG4xMzQ2Olx0e1xuMTM0NzpcdFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XG4xMzQ4Olx0XHRzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCA9IGZpbGVfbW50X2lkbWFwKGZpbGUpO1xuMTM0OTpcdFx0aWYgKGlub2RlX3Blcm1pc3Npb24oaWRtYXAsIGlub2RlLCBNQVlfUkVBRCkgXHUwMDNjIDApIHtcbjEzNTA6XHRcdFx0c3RydWN0IHVzZXJfbmFtZXNwYWNlICpvbGQsICp1c2VyX25zO1xuMTM1MTpcdFx0XHRicHJtLVx1MDAzZWludGVycF9mbGFncyB8PSBCSU5QUk1fRkxBR1NfRU5GT1JDRV9OT05EVU1QO1xuMTM1MjpcdFxuMTM1MzpcdFx0XHQvKiBFbnN1cmUgYnBybS1cdTAwM2V1c2VyX25zIGNvbnRhaW5zIHRoZSBleGVjdXRhYmxlLiAqL1xuMTM1NDpcdFx0XHR1c2VyX25zID0gb2xkID0gYnBybS1cdTAwM2V1c2VyX25zO1xuMTM1NTpcdFx0XHR3aGlsZSAoKHVzZXJfbnMgIT0gXHUwMDI2aW5pdF91c2VyX25zKSBcdTAwMjZcdTAwMjZcbjEzNTY6XHRcdFx0ICAgICAgICFwcml2aWxlZ2VkX3dydF9pbm9kZV91aWRnaWQodXNlcl9ucywgaWRtYXAsIGlub2RlKSlcbjEzNTc6XHRcdFx0XHR1c2VyX25zID0gdXNlcl9ucy1cdTAwM2VwYXJlbnQ7XG4xMzU4Olx0XG4xMzU5Olx0XHRcdGlmIChvbGQgIT0gdXNlcl9ucykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODM3CgkJCQkJCQlvdXRwdXQ6IDE5OQoJCQkJCQkJdGhvdWdodHM6IDYzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgS2VybmVsIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBvZiB0aGlzIHBhdGNoIGludm9sdmVzIGEgcmUtb3JkZXJpbmcgd2l0aGluIHRoZSBgYmVnaW5fbmV3X2V4ZWMoc3RydWN0IGxpbnV4X2JpbnBybSAqIGJwcm0pYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBzaGlmdHMgdGhlIGNhbGwgdG8gYGRvX2Nsb3NlX29uX2V4ZWMobWUtJmd0O2ZpbGVzKWAgZWFybGllciBpbiB0aGUgZXhlY3V0aW9uIGZsb3cuIEN1cnJlbnRseSwgaXQmIzM5O3MgcnVuIGJlZm9yZSBzZXZlcmFsIGltcG9ydGFudCBzdGVwcyBpbiBgYmVnaW5fbmV3X2V4ZWNgLCBsaWtlIGBzZXRfbW1fZXhlX2ZpbGUoKWAsIGB3b3VsZF9kdW1wKClgLCBhbmQgdGhlIGNyaXRpY2FsIGBleGVjX21tYXAoYnBybSlgIGNhbGwsIHdoaWNoLCBjcnVjaWFsbHksIGFjcXVpcmVzIHRoZSBgZXhlY191cGRhdGVfbG9ja2AuIEJlZm9yZSB0aGUgcGF0Y2gsIGl0IHdhcyBsb2NhdGVkIGFmdGVyIGBjbGVhcl9zeXNjYWxsX3dvcmtfc3lzY2FsbF91c2VyX2Rpc3BhdGNoKG1lKTtgIGluc2lkZSB0aGUgY3JpdGljYWwgcmVnaW9uLgoKVGhlIGNvcmUgcmVhc29uIGZvciB0aGlzIGNoYW5nZSBzZWVtcyB0byBiZSB0byBhZGRyZXNzIHBvdGVudGlhbCBsb2NraW5nIGlzc3VlcyBhbmQsIHNwZWNpZmljYWxseSwgZGVhZGxvY2sgY29uZGl0aW9ucy4gVGhlIGBkb19jbG9zZV9vbl9leGVjYCBvcGVyYXRpb24gY2FuIHBvdGVudGlhbGx5IGJsb2NrLCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggZmlsZXN5c3RlbSBmbHVzaCBoYW5kbGVycyAobGlrZSB0aG9zZSBpbiBGVVNFIGRhZW1vbnMpLiBJZiB0aGlzIGJsb2NraW5nIHdlcmUgdG8gaGFwcGVuICp3aGlsZSogaG9sZGluZyB0aGUgYGV4ZWNfdXBkYXRlX2xvY2tgIGFjcXVpcmVkIGJ5IGBleGVjX21tYXAoKWAsIGl0IGNyZWF0ZXMgYSBkZWFkbG9jayByaXNrLiBUaGlzIHJlb3JkZXJpbmcgbW92ZXMgdGhlIGBjbG9zZV9vbl9leGVjYCBvcGVyYXRpb24gdG8gaGFwcGVuIGJlZm9yZSBgZXhlY19tbWFwYCBhY3F1aXJlcyB0aGUgbG9jaywgd2hpY2ggZWZmZWN0aXZlbHkgcmVkdWNlcyB0aGUgd2luZG93IGZvciBwb3RlbnRpYWwgZGVhZGxvY2tzLiBBbHNvLCBtb3ZpbmcgaXQgZWFybGllciBlbnN1cmVzIGBjbG9zZV9vbl9leGVjYCBmaWxlcyBhcmUgY2xvc2VkIGJlZm9yZSBtb2RpZnlpbmcgZHVtcGFiaWxpdHkvbW1hcC4KCk5vdywgdGhlIGltcG9ydGFudCBwYXJ0LiBNeSBtYWluIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IG1lbW9yeS1yZWxhdGVkIHZ1bG5lcmFiaWxpdGllcy4gSSYjMzk7dmUgY29uc2lkZXJlZCBhbGwgdGhlIHBvdGVudGlhbCBwaXRmYWxsczoKCjEuICAqKlVuaW5pdGlhbGl6ZWQgZGF0YSBiZWluZyBleHBvc2VkIHRvIHVzZXIgc3BhY2U/KiogTm8sIHRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIGFueSBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHVzZXIgc3BhY2UgdmlhIGNvcHkgb3BlcmF0aW9ucywgb3IgYW55IHVuaW5pdGlhbGl6ZWQgZmllbGRzLgoyLiAgKipDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8qKiBJIHNlZSBubyBuZXcgY29uZGl0aW9uYWwgbG9naWMgdGhhdCByZWxpZXMgb24gdW5pbml0aWFsaXplZCBkYXRhLgozLiAgKipVbmluaXRpYWxpemVkIGZpZWxkcyBpbiBuZXdseSBhbGxvY2F0ZWQgZGF0YSBzdHJ1Y3R1cmVzPyoqIFRoaXMgaXMgYW5vdGhlciBjb25jZXJuIEkgaGF2ZSwgYW5kIEkgZG9uJiMzOTt0IHNlZSBhbnkgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgYWxsb2NhdGVkIG9yIGluaXRpYWxpemVkIGluIGEgd2F5IHRoYXQgY291bGQgbGVhZCB0byByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBsYXRlci4KNC4gICoqQm91bmRzIGNoZWNrcyBvciBidWZmZXIgbWFuaXB1bGF0aW9uIGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSBhY2Nlc3M/KiogTm8uIEkgZG9uJiMzOTt0IHNlZSBhbnkgbW9kaWZpY2F0aW9ucyB0byBib3VuZHMgY2hlY2tzIHRoYXQgY291bGQgcmVzdWx0IGluIHVuaW5pdGlhbGl6ZWQgYnl0ZSByZWFkcywgb3IgY2hhbmdlcyBpbiBsb2dpYyByZWxhdGVkIHRvIGFjY2VzcyBvZiBleGlzdGluZyBidWZmZXJzLgoKVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIGZyb20gYW4gKnVuaW5pdGlhbGl6ZWQgbWVtb3J5KiBwZXJzcGVjdGl2ZS4gVGhlcmUgYXJlIG5vIGFsbG9jYXRpb25zLCBjb3BpZXMsIG9yIGV4cG9zdXJlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIHJpc2tzIGhlcmUgYXJlIG5vdCBhYm91dCBtZW1vcnkgKmNvbnRlbnQqLCBidXQgYWJvdXQgbG9jayBvcmRlciwgb2JqZWN0IGxpZmV0aW1lcywgYW5kIHBvdGVudGlhbGx5IGluY29ycmVjdCBlcnJvciBoYW5kbGluZy4gVGhlIHN0YW5kYXJkIGRldGVjdG9ycyBmb3IgdGhlc2Uga2luZHMgb2YgcHJvYmxlbXMsIGxpa2UgTE9DS0RFUCBhbmQgS0FTQU4sIGFyZSBwZXJmZWN0bHkgYWRlcXVhdGUgdG8gY2F0Y2ggYW55IGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IHRoZSBjaGFuZ2UgaW4gbG9ja2luZyBvcmRlci4gS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIgKEtNU0FOKSBpcyBub3QgbmVlZGVkIGJlY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgbm90IHRoZSBwcm9ibGVtIGhlcmUuIEl0JiMzOTtzIHRoZSBvcmRlciBhbmQgaW50ZXJhY3Rpb25zIG9mIGxvY2tzLCB3aGljaCBhcmUgYmV0dGVyIGlkZW50aWZpZWQgYnkgdGhlIHNhbml0aXplcnMgZm9yIHRob3NlIHNwZWNpZmljIGNvbmNlcm5zLgoKU28sIHRoZSByZWFzb25pbmcgaXMgY2xlYXI6IHRoZSBwYXRjaCBtb3ZlcyBgZG9fY2xvc2Vfb25fZXhlY2AgZWFybGllciB0byBhdm9pZCBkZWFkbG9ja3MsIGFuZCBpdCBkb2VzIG5vdCBhZmZlY3QgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gV2Ugc2hvdWxkIGJlIGdvb2QgdG8gZ28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIHRoZSBpbnZvY2F0aW9uIG9mIGBkb19jbG9zZV9vbl9leGVjKG1lLVx1MDAzZWZpbGVzKWAgZWFybGllciBpbiBgYmVnaW5fbmV3X2V4ZWMoKWAsIHBsYWNpbmcgaXQgYmVmb3JlIGBzZXRfbW1fZXhlX2ZpbGUoKWAgYW5kIGBleGVjX21tYXAoKWAuIFRoaXMgYXZvaWRzIGhvbGRpbmcgYGV4ZWNfdXBkYXRlX2xvY2tgIHdoaWxlIGZpbGVzeXN0ZW0gYC1cdTAwM2VmbHVzaCgpYCBoYW5kbGVycyAoc3VjaCBhcyBGVVNFKSBydW4gZHVyaW5nIGBmaWxwX2Nsb3NlKClgLCByZXNvbHZpbmcgcG90ZW50aWFsIGxvY2tpbmcvZGVhZGxvY2sgYW5kIGNvbmN1cnJlbmN5IGlzc3Vlcy5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgY29udHJvbCBmbG93IGFuZCBsb2NrIG9yZGVyaW5nIGFkanVzdG1lbnQgd2l0aGluIHByb2Nlc3MgZXhlY3V0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIGFsbG9jYXRlLCBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdGFjay9oZWFwIGJ1ZmZlcnMsIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBBbnkgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGxvY2tpbmcgb3IgZmlsZSBkZXNjcmlwdG9yIHJlZmVyZW5jZSBsaWZlY3ljbGVzIGFyZSBtb25pdG9yZWQgYnkgTE9DS0RFUCBhbmQgc3RhbmRhcmQgS0FTQU4gYnVpbGRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyB0aGUgaW52b2NhdGlvbiBvZiBgZG9fY2xvc2Vfb25fZXhlYyhtZS1cdTAwM2VmaWxlcylgIGVhcmxpZXIgaW4gYGJlZ2luX25ld19leGVjKClgLCBwbGFjaW5nIGl0IGJlZm9yZSBgc2V0X21tX2V4ZV9maWxlKClgIGFuZCBgZXhlY19tbWFwKClgLiBUaGlzIGF2b2lkcyBob2xkaW5nIGBleGVjX3VwZGF0ZV9sb2NrYCB3aGlsZSBmaWxlc3lzdGVtIGAtXHUwMDNlZmx1c2goKWAgaGFuZGxlcnMgKHN1Y2ggYXMgRlVTRSkgcnVuIGR1cmluZyBgZmlscF9jbG9zZSgpYCwgcmVzb2x2aW5nIHBvdGVudGlhbCBsb2NraW5nL2RlYWRsb2NrIGFuZCBjb25jdXJyZW5jeSBpc3N1ZXMuXG5cblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhIGNvbnRyb2wgZmxvdyBhbmQgbG9jayBvcmRlcmluZyBhZGp1c3RtZW50IHdpdGhpbiBwcm9jZXNzIGV4ZWN1dGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBhbGxvY2F0ZSwgb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RhY2svaGVhcCBidWZmZXJzLCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZS4gQW55IHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBsb2NraW5nIG9yIGZpbGUgZGVzY3JpcHRvciByZWZlcmVuY2UgbGlmZWN5Y2xlcyBhcmUgbW9uaXRvcmVkIGJ5IExPQ0tERVAgYW5kIHN0YW5kYXJkIEtBU0FOIGJ1aWxkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMTozNDo1OS4xMTg1MjE4MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2NzIwMDEyNjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJlZ2luX25ld19leGVjXCIsXG4gICAgXCJkb19jbG9zZV9vbl9leGVjXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyB0aGUgaW52b2NhdGlvbiBvZiBgZG9fY2xvc2Vfb25fZXhlYyhtZS1cXHUwMDNlZmlsZXMpYCBlYXJsaWVyIGluIGBiZWdpbl9uZXdfZXhlYygpYCwgcGxhY2luZyBpdCBiZWZvcmUgYHNldF9tbV9leGVfZmlsZSgpYCBhbmQgYGV4ZWNfbW1hcCgpYC4gVGhpcyBhdm9pZHMgaG9sZGluZyBgZXhlY191cGRhdGVfbG9ja2Agd2hpbGUgZmlsZXN5c3RlbSBgLVxcdTAwM2VmbHVzaCgpYCBoYW5kbGVycyAoc3VjaCBhcyBGVVNFKSBydW4gZHVyaW5nIGBmaWxwX2Nsb3NlKClgLCByZXNvbHZpbmcgcG90ZW50aWFsIGxvY2tpbmcvZGVhZGxvY2sgYW5kIGNvbmN1cnJlbmN5IGlzc3Vlcy5cXG5cXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYSBjb250cm9sIGZsb3cgYW5kIGxvY2sgb3JkZXJpbmcgYWRqdXN0bWVudCB3aXRoaW4gcHJvY2VzcyBleGVjdXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSwgYWxsb2NhdGUsIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0YWNrL2hlYXAgYnVmZmVycywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UuIEFueSByaXNrcyBhc3NvY2lhdGVkIHdpdGggbG9ja2luZyBvciBmaWxlIGRlc2NyaXB0b3IgcmVmZXJlbmNlIGxpZmVjeWNsZXMgYXJlIG1vbml0b3JlZCBieSBMT0NLREVQIGFuZCBzdGFuZGFyZCBLQVNBTiBidWlsZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGV4ZWN2ZSBsb2dpYyBpbiBiZWdpbl9uZXdfZXhlYygpIChmcy9leGVjLmMpLCBtb3ZpbmcgdGhlIGludm9jYXRpb24gb2YgZG9fY2xvc2Vfb25fZXhlYygpIGJlZm9yZSBleGVjX21tYXAoKSBhbmQgc2V0X21tX2V4ZV9maWxlKCkgdG8gYXZvaWQgYmxvY2tpbmcgb24gZmlsZXN5c3RlbSAtXFx1MDAzZWZsdXNoKCkgaGFuZGxlcnMgd2hpbGUgaG9sZGluZyBleGVjX3VwZGF0ZV9sb2NrLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb250cm9sIGZsb3cgYW5kIGxpZmVjeWNsZSBvcmRlciBkdXJpbmcgcHJvZ3JhbSBleGVjdXRpb24gaW4gdGhlIGNvcmUgVkZTL2V4ZWMgc3Vic3lzdGVtIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMTozNDo1OS4xMTg1Mjg5NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5Nzk4NTU0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGM5MDQzZjgwZWE5ZjI3ZDc3Y2IzY2U3YjJjN2I4MDBiYmNlNTMxZTNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgOCAwMTozNDo1NyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9leGVjLmMgYi9mcy9leGVjLmNcXG5pbmRleCA3NDVmNmViNTI3OWU2Li5iNTFlNWQ3ZTQ1MzY3IDEwMDY0NFxcbi0tLSBhL2ZzL2V4ZWMuY1xcbisrKyBiL2ZzL2V4ZWMuY1xcbkBAIC0xMTY0LDYgKzExNjQsMjAgQEAgaW50IGJlZ2luX25ld19leGVjKHN0cnVjdCBsaW51eF9iaW5wcm0gKiBicHJtKVxcbiBcXHRpZiAocmV0dmFsKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFdlIGhhdmUgdG8gYXBwbHkgQ0xPRVhFQyBiZWZvcmUgd2UgY2hhbmdlIHdoZXRoZXIgdGhlIHByb2Nlc3MgaXNcXG4rXFx0ICogZHVtcGFibGUgKGluIHNldHVwX25ld19leGVjKSB0byBhdm9pZCBhIHJhY2Ugd2l0aCBhIHByb2Nlc3MgaW4gdXNlcnNwYWNlXFxuK1xcdCAqIHRyeWluZyB0byBhY2Nlc3MgdGhlIHNob3VsZC1iZS1jbG9zZWQgZmlsZSBkZXNjcmlwdG9ycyBvZiBhIHByb2Nlc3NcXG4rXFx0ICogdW5kZXJnb2luZyBleGVjKDIpLlxcbitcXHQgKlxcbitcXHQgKiBUaGlzIGNhbiBibG9jayBvbiBmaWxlc3lzdGVtIC1cXHUwMDNlZmx1c2goKSBoYW5kbGVycywgaW5jbHVkaW5nIHdhaXRpbmdcXG4rXFx0ICogZm9yIEZVU0UgZGFlbW9ucywgc28gZG8gaXQgYmVmb3JlIGV4ZWNfbW1hcCB0YWtlcyB0aGVcXG4rXFx0ICogZXhlY191cGRhdGVfbG9jay5cXG4rXFx0ICogVGhpcyBtdXN0IGhhcHBlbiBhZnRlciB0aGUgcG9pbnQgb2Ygbm8gcmV0dXJuLCBhbmQgYWZ0ZXIgdW5zaGFyaW5nXFxuK1xcdCAqIHRoZSBGRCB0YWJsZS5cXG4rXFx0ICovXFxuK1xcdGRvX2Nsb3NlX29uX2V4ZWMobWUtXFx1MDAzZWZpbGVzKTtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIE11c3QgYmUgY2FsbGVkIF9iZWZvcmVfIGV4ZWNfbW1hcCgpIGFzIGJwcm0tXFx1MDAzZW1tIGlzXFxuIFxcdCAqIG5vdCB2aXNpYmxlIHVudGlsIHRoZW4uIERvaW5nIGl0IGhlcmUgYWxzbyBlbnN1cmVzXFxuQEAgLTEyMTQsMTQgKzEyMjgsNiBAQCBpbnQgYmVnaW5fbmV3X2V4ZWMoc3RydWN0IGxpbnV4X2JpbnBybSAqIGJwcm0pXFxuIFxcbiBcXHRjbGVhcl9zeXNjYWxsX3dvcmtfc3lzY2FsbF91c2VyX2Rpc3BhdGNoKG1lKTtcXG4gXFxuLVxcdC8qXFxuLVxcdCAqIFdlIGhhdmUgdG8gYXBwbHkgQ0xPRVhFQyBiZWZvcmUgd2UgY2hhbmdlIHdoZXRoZXIgdGhlIHByb2Nlc3MgaXNcXG4tXFx0ICogZHVtcGFibGUgKGluIHNldHVwX25ld19leGVjKSB0byBhdm9pZCBhIHJhY2Ugd2l0aCBhIHByb2Nlc3MgaW4gdXNlcnNwYWNlXFxuLVxcdCAqIHRyeWluZyB0byBhY2Nlc3MgdGhlIHNob3VsZC1iZS1jbG9zZWQgZmlsZSBkZXNjcmlwdG9ycyBvZiBhIHByb2Nlc3NcXG4tXFx0ICogdW5kZXJnb2luZyBleGVjKDIpLlxcbi1cXHQgKi9cXG4tXFx0ZG9fY2xvc2Vfb25fZXhlYyhtZS1cXHUwMDNlZmlsZXMpO1xcbi1cXG4gXFx0aWYgKGJwcm0tXFx1MDAzZXNlY3VyZWV4ZWMpIHtcXG4gXFx0XFx0LyogTWFrZSBzdXJlIHBhcmVudCBjYW5ub3Qgc2lnbmFsIHByaXZpbGVnZWQgcHJvY2Vzcy4gKi9cXG4gXFx0XFx0bWUtXFx1MDAzZXBkZWF0aF9zaWduYWwgPSAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMTozNTowMC42MTc0NDY4OTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI1MjIwNzE1MzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJlZ2luX25ld19leGVjXCIsXG4gICAgXCJkb19jbG9zZV9vbl9leGVjXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBleGVjdmUgbG9naWMgaW4gYmVnaW5fbmV3X2V4ZWMoKSAoZnMvZXhlYy5jKSwgbW92aW5nIHRoZSBpbnZvY2F0aW9uIG9mIGRvX2Nsb3NlX29uX2V4ZWMoKSBiZWZvcmUgZXhlY19tbWFwKCkgYW5kIHNldF9tbV9leGVfZmlsZSgpIHRvIGF2b2lkIGJsb2NraW5nIG9uIGZpbGVzeXN0ZW0gLVxcdTAwM2VmbHVzaCgpIGhhbmRsZXJzIHdoaWxlIGhvbGRpbmcgZXhlY191cGRhdGVfbG9jay4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29udHJvbCBmbG93IGFuZCBsaWZlY3ljbGUgb3JkZXIgZHVyaW5nIHByb2dyYW0gZXhlY3V0aW9uIGluIHRoZSBjb3JlIFZGUy9leGVjIHN1YnN5c3RlbSBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjOTA0M2Y4MGVhOWYyN2Q3N2NiM2NlN2IyYzdiODAwYmJjZTUzMWUzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwMTozNDo1NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuY1xuaW5kZXggNzQ1ZjZlYjUyNzllNi4uYjUxZTVkN2U0NTM2NyAxMDA2NDRcbi0tLSBhL2ZzL2V4ZWMuY1xuKysrIGIvZnMvZXhlYy5jXG5AQCAtMTE2NCw2ICsxMTY0LDIwIEBAIGludCBiZWdpbl9uZXdfZXhlYyhzdHJ1Y3QgbGludXhfYmlucHJtICogYnBybSlcbiBcdGlmIChyZXR2YWwpXG4gXHRcdGdvdG8gb3V0O1xuIFxuK1x0LypcbitcdCAqIFdlIGhhdmUgdG8gYXBwbHkgQ0xPRVhFQyBiZWZvcmUgd2UgY2hhbmdlIHdoZXRoZXIgdGhlIHByb2Nlc3MgaXNcbitcdCAqIGR1bXBhYmxlIChpbiBzZXR1cF9uZXdfZXhlYykgdG8gYXZvaWQgYSByYWNlIHdpdGggYSBwcm9jZXNzIGluIHVzZXJzcGFjZVxuK1x0ICogdHJ5aW5nIHRvIGFjY2VzcyB0aGUgc2hvdWxkLWJlLWNsb3NlZCBmaWxlIGRlc2NyaXB0b3JzIG9mIGEgcHJvY2Vzc1xuK1x0ICogdW5kZXJnb2luZyBleGVjKDIpLlxuK1x0ICpcbitcdCAqIFRoaXMgY2FuIGJsb2NrIG9uIGZpbGVzeXN0ZW0gLVx1MDAzZWZsdXNoKCkgaGFuZGxlcnMsIGluY2x1ZGluZyB3YWl0aW5nXG4rXHQgKiBmb3IgRlVTRSBkYWVtb25zLCBzbyBkbyBpdCBiZWZvcmUgZXhlY19tbWFwIHRha2VzIHRoZVxuK1x0ICogZXhlY191cGRhdGVfbG9jay5cbitcdCAqIFRoaXMgbXVzdCBoYXBwZW4gYWZ0ZXIgdGhlIHBvaW50IG9mIG5vIHJldHVybiwgYW5kIGFmdGVyIHVuc2hhcmluZ1xuK1x0ICogdGhlIEZEIHRhYmxlLlxuK1x0ICovXG4rXHRkb19jbG9zZV9vbl9leGVjKG1lLVx1MDAzZWZpbGVzKTtcbitcbiBcdC8qXG4gXHQgKiBNdXN0IGJlIGNhbGxlZCBfYmVmb3JlXyBleGVjX21tYXAoKSBhcyBicHJtLVx1MDAzZW1tIGlzXG4gXHQgKiBub3QgdmlzaWJsZSB1bnRpbCB0aGVuLiBEb2luZyBpdCBoZXJlIGFsc28gZW5zdXJlc1xuQEAgLTEyMTQsMTQgKzEyMjgsNiBAQCBpbnQgYmVnaW5fbmV3X2V4ZWMoc3RydWN0IGxpbnV4X2JpbnBybSAqIGJwcm0pXG4gXG4gXHRjbGVhcl9zeXNjYWxsX3dvcmtfc3lzY2FsbF91c2VyX2Rpc3BhdGNoKG1lKTtcbiBcbi1cdC8qXG4tXHQgKiBXZSBoYXZlIHRvIGFwcGx5IENMT0VYRUMgYmVmb3JlIHdlIGNoYW5nZSB3aGV0aGVyIHRoZSBwcm9jZXNzIGlzXG4tXHQgKiBkdW1wYWJsZSAoaW4gc2V0dXBfbmV3X2V4ZWMpIHRvIGF2b2lkIGEgcmFjZSB3aXRoIGEgcHJvY2VzcyBpbiB1c2Vyc3BhY2Vcbi1cdCAqIHRyeWluZyB0byBhY2Nlc3MgdGhlIHNob3VsZC1iZS1jbG9zZWQgZmlsZSBkZXNjcmlwdG9ycyBvZiBhIHByb2Nlc3Ncbi1cdCAqIHVuZGVyZ29pbmcgZXhlYygyKS5cbi1cdCAqL1xuLVx0ZG9fY2xvc2Vfb25fZXhlYyhtZS1cdTAwM2VmaWxlcyk7XG4tXG4gXHRpZiAoYnBybS1cdTAwM2VzZWN1cmVleGVjKSB7XG4gXHRcdC8qIE1ha2Ugc3VyZSBwYXJlbnQgY2Fubm90IHNpZ25hbCBwcml2aWxlZ2VkIHByb2Nlc3MuICovXG4gXHRcdG1lLVx1MDAzZXBkZWF0aF9zaWduYWwgPSAwO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MzU6MDAuNjE3NDQ5MjI5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODEyMjkzODY0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBmcy9leGVjLmNgIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGF0Y2ggd2l0aGluIHRoZSBjb250ZXh0IG9mIGBmcy9leGVjLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgYmVnaW5fbmV3X2V4ZWNgIGZ1bmN0aW9uLiBUaGUgcGF0Y2ggaXRzZWxmIGlzIHN0cmFpZ2h0Zm9yd2FyZCAtIGl0J3MgYSBjb2RlIG1vdmVtZW50LCBlc3NlbnRpYWxseS4gSXQncyByZXBvc2l0aW9uaW5nIHRoZSBjYWxsIHRvIGBkb19jbG9zZV9vbl9leGVjKG1lLVx1MDAzZWZpbGVzKWAuICBUaGUgZGlmZiBzaG93cyB0aGF0IHRoZSBjb2RlIHdhcyAqbW92ZWQqLCBub3QgYWRkZWQgb3IgcmVtb3ZlZCBmdW5kYW1lbnRhbGx5LiBQcmV2aW91c2x5LCBpdCB3YXMgYWZ0ZXIgdGhlIGBjbGVhcl9zeXNjYWxsX3dvcmtfc3lzY2FsbF91c2VyX2Rpc3BhdGNoKG1lKTtgIGNhbGwsIGFuZCBub3cgaXQncyBwbGFjZWQgZWFybGllciwgYmVmb3JlIHRoZSBjYWxscyB0byBgZXhlY19tbWFwYCBhbmQgYGNsZWFyX3N5c2NhbGxfd29ya19zeXNjYWxsX3VzZXJfZGlzcGF0Y2hgLlxuXG5UaGUgc3Vycm91bmRpbmcgY29tbWVudHMgYXJlIGtleSBoZXJlLiAgVGhleSBleHBsaWNpdGx5IGNhbGwgb3V0IHRoZSByZWFzb24gZm9yIHRoaXMgcmVhcnJhbmdlbWVudDogdGhlIG5lZWQgdG8gYXBwbHkgYENMT0VYRUNgICpiZWZvcmUqIHBvdGVudGlhbGx5IGNoYW5naW5nIHdoZXRoZXIgdGhlIHByb2Nlc3MgaXMgZHVtcGFibGUgaW4gYHNldHVwX25ld19leGVjYC4gVGhpcyBpcyB0byBhdm9pZCBhIHJhY2UgY29uZGl0aW9uLCB3aGVyZSBhIHVzZXItc3BhY2UgcHJvY2VzcyBtaWdodCB0cnkgdG8gYWNjZXNzIGZpbGUgZGVzY3JpcHRvcnMgdGhhdCAqc2hvdWxkKiBiZSBjbG9zZWQgZHVyaW5nIGFuIGBleGVjKDIpYCBjYWxsLiBDcnVjaWFsbHksIHRoZSBjb21tZW50IGhpZ2hsaWdodHMgdGhhdCBgZG9fY2xvc2Vfb25fZXhlY2AgY2FuIGJsb2NrIG9uIGZpbGVzeXN0ZW0gZmx1c2ggaGFuZGxlcnMgKGluY2x1ZGluZyBGVVNFIGRhZW1vbnMpLiBUaGlzIGlzIHdoeSB0aGUgcGF0Y2ggZW1waGFzaXplcyB0aGF0IGl0J3MgcGVyZm9ybWVkIGFmdGVyIHRoZSBwb2ludCBvZiBubyByZXR1cm4gKGltcG9ydGFudCBmb3IgYXRvbWljaXR5IGFuZCBjb25zaXN0ZW5jeSBkdXJpbmcgdGhlIGBleGVjdmVgIHByb2Nlc3MpIGFuZCBhZnRlciB1bnNoYXJpbmcgdGhlIGZpbGUgZGVzY3JpcHRvciB0YWJsZS4gVGhpcyB0aW1pbmcgaXMgY3JpdGljYWwgdG8gZW5zdXJlIHByb3BlciBjbGVhbnVwLCBhdm9pZCByYWNlcyBhbmQgbWFpbnRhaW4gZGF0YSBpbnRlZ3JpdHkuIFRoZSBjb21tZW50IG1lbnRpb25zIGRvaW5nIHRoaXMgYmVmb3JlIGBleGVjX21tYXBgIHRvIGF2b2lkIGxvY2tpbmcgcHJvYmxlbXMuIFNvLCB0aGlzIG9yZGVyIGNoYW5nZSBzZWVtcyB0byBiZSBhIHN1YnRsZSBidXQgY3JpdGljYWwgb3B0aW1pemF0aW9uIGFuZCByYWNlIGNvbmRpdGlvbiBhdm9pZGFuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNzgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMTozNTowOC43NDAzOTA1MjRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXhlYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTUwOlxcdFxcbjExNTE6XFx0XFx0LyogTWFrZSB0aGlzIHRoZSBvbmx5IHRocmVhZCBpbiB0aGUgdGhyZWFkIGdyb3VwICovXFxuMTE1MjpcXHRcXHRyZXR2YWwgPSBkZV90aHJlYWQobWUpO1xcbjExNTM6XFx0XFx0aWYgKHJldHZhbClcXG4xMTU0OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjExNTU6XFx0XFx0Lyogc2VlIHRoZSBjb21tZW50IGluIGNoZWNrX3Vuc2FmZV9leGVjKCkgKi9cXG4xMTU2OlxcdFxcdGN1cnJlbnQtXFx1MDAzZWZzLVxcdTAwM2Vpbl9leGVjID0gMDtcXG4xMTU3OlxcdFxcdC8qXFxuMTE1ODpcXHRcXHQgKiBDYW5jZWwgYW55IGlvX3VyaW5nIGFjdGl2aXR5IGFjcm9zcyBleGVjdmVcXG4xMTU5OlxcdFxcdCAqL1xcbjExNjA6XFx0XFx0aW9fdXJpbmdfdGFza19jYW5jZWwoKTtcXG4xMTYxOlxcdFxcbjExNjI6XFx0XFx0LyogRW5zdXJlIHRoZSBmaWxlcyB0YWJsZSBpcyBub3Qgc2hhcmVkLiAqL1xcbjExNjM6XFx0XFx0cmV0dmFsID0gdW5zaGFyZV9maWxlcygpO1xcbjExNjQ6XFx0XFx0aWYgKHJldHZhbClcXG4xMTY1OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjExNjY6XFx0XFxuMTE2NzpcXHRcXHQvKlxcbjExNjg6XFx0XFx0ICogV2UgaGF2ZSB0byBhcHBseSBDTE9FWEVDIGJlZm9yZSB3ZSBjaGFuZ2Ugd2hldGhlciB0aGUgcHJvY2VzcyBpc1xcbjExNjk6XFx0XFx0ICogZHVtcGFibGUgKGluIHNldHVwX25ld19leGVjKSB0byBhdm9pZCBhIHJhY2Ugd2l0aCBhIHByb2Nlc3MgaW4gdXNlcnNwYWNlXFxuMTE3MDpcXHRcXHQgKiB0cnlpbmcgdG8gYWNjZXNzIHRoZSBzaG91bGQtYmUtY2xvc2VkIGZpbGUgZGVzY3JpcHRvcnMgb2YgYSBwcm9jZXNzXFxuMTE3MTpcXHRcXHQgKiB1bmRlcmdvaW5nIGV4ZWMoMikuXFxuMTE3MjpcXHRcXHQgKlxcbjExNzM6XFx0XFx0ICogVGhpcyBjYW4gYmxvY2sgb24gZmlsZXN5c3RlbSAtXFx1MDAzZWZsdXNoKCkgaGFuZGxlcnMsIGluY2x1ZGluZyB3YWl0aW5nXFxuMTE3NDpcXHRcXHQgKiBmb3IgRlVTRSBkYWVtb25zLCBzbyBkbyBpdCBiZWZvcmUgZXhlY19tbWFwIHRha2VzIHRoZVxcbjExNzU6XFx0XFx0ICogZXhlY191cGRhdGVfbG9jay5cXG4xMTc2OlxcdFxcdCAqIFRoaXMgbXVzdCBoYXBwZW4gYWZ0ZXIgdGhlIHBvaW50IG9mIG5vIHJldHVybiwgYW5kIGFmdGVyIHVuc2hhcmluZ1xcbjExNzc6XFx0XFx0ICogdGhlIEZEIHRhYmxlLlxcbjExNzg6XFx0XFx0ICovXFxuMTE3OTpcXHRcXHRkb19jbG9zZV9vbl9leGVjKG1lLVxcdTAwM2VmaWxlcyk7XFxuMTE4MDpcXHRcXG4xMTgxOlxcdFxcdC8qXFxuMTE4MjpcXHRcXHQgKiBNdXN0IGJlIGNhbGxlZCBfYmVmb3JlXyBleGVjX21tYXAoKSBhcyBicHJtLVxcdTAwM2VtbSBpc1xcbjExODM6XFx0XFx0ICogbm90IHZpc2libGUgdW50aWwgdGhlbi4gRG9pbmcgaXQgaGVyZSBhbHNvIGVuc3VyZXNcXG4xMTg0OlxcdFxcdCAqIHdlIGRvbid0IHJhY2UgYWdhaW5zdCByZXBsYWNlX21tX2V4ZV9maWxlKCkuXFxuMTE4NTpcXHRcXHQgKi9cXG4xMTg2OlxcdFxcdHJldHZhbCA9IHNldF9tbV9leGVfZmlsZShicHJtLVxcdTAwM2VtbSwgYnBybV9pZGVudGl0eV9maWxlKGJwcm0pKTtcXG4xMTg3OlxcdFxcdGlmIChyZXR2YWwpXFxuMTE4ODpcXHRcXHRcXHRnb3RvIG91dDtcXG4xMTg5OlxcdFxcbjExOTA6XFx0XFx0LyogSWYgdGhlIGJpbmFyeSBpcyBub3QgcmVhZGFibGUgdGhlbiBlbmZvcmNlIG1tLVxcdTAwM2VkdW1wYWJsZT0wICovXFxuMTE5MTpcXHRcXHR3b3VsZF9kdW1wKGJwcm0sIGJwcm0tXFx1MDAzZWZpbGUpO1xcbjExOTI6XFx0XFx0aWYgKGJwcm0tXFx1MDAzZWhhdmVfZXhlY2ZkKVxcbjExOTM6XFx0XFx0XFx0d291bGRfZHVtcChicHJtLCBicHJtLVxcdTAwM2VleGVjdXRhYmxlKTtcXG4xMTk0OlxcdFxcbjExOTU6XFx0XFx0LypcXG4xMTk2OlxcdFxcdCAqIFJlbGVhc2UgYWxsIG9mIHRoZSBvbGQgbW1hcCBzdHVmZlxcbjExOTc6XFx0XFx0ICovXFxuMTE5ODpcXHRcXHRhY2N0X2FyZ19zaXplKGJwcm0sIDApO1xcbjExOTk6XFx0XFx0cmV0dmFsID0gZXhlY19tbWFwKGJwcm0pO1xcbjEyMDA6XFx0XFx0aWYgKHJldHZhbClcXG4xMjAxOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjEyMDI6XFx0XFxuMTIwMzpcXHRcXHRicHJtLVxcdTAwM2VtbSA9IE5VTEw7XFxuMTIwNDpcXHRcXG4xMjA1OlxcdFxcdHJldHZhbCA9IGV4ZWNfdGFza19uYW1lc3BhY2VzKCk7XFxuMTIwNjpcXHRcXHRpZiAocmV0dmFsKVxcbjEyMDc6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjEyMDg6XFx0XFxuMTIwOTpcXHQjaWZkZWYgQ09ORklHX1BPU0lYX1RJTUVSU1xcbjEyMTA6XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2bWUtXFx1MDAzZXNpZ2hhbmQtXFx1MDAzZXNpZ2xvY2spO1xcbjEyMTE6XFx0XFx0cG9zaXhfY3B1X3RpbWVyc19leGl0KG1lKTtcXG4xMjEyOlxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2bWUtXFx1MDAzZXNpZ2hhbmQtXFx1MDAzZXNpZ2xvY2spO1xcbjEyMTM6XFx0XFx0ZXhpdF9pdGltZXJzKG1lKTtcXG4xMjE0OlxcdFxcdGZsdXNoX2l0aW1lcl9zaWduYWxzKCk7XFxuMTIxNTpcXHQjZW5kaWZcXG4xMjE2OlxcdFxcbjEyMTc6XFx0XFx0LypcXG4xMjE4OlxcdFxcdCAqIE1ha2UgdGhlIHNpZ25hbCB0YWJsZSBwcml2YXRlLlxcbjEyMTk6XFx0XFx0ICovXFxuMTIyMDpcXHRcXHRyZXR2YWwgPSB1bnNoYXJlX3NpZ2hhbmQobWUpO1xcbjEyMjE6XFx0XFx0aWYgKHJldHZhbClcXG4xMjIyOlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xMjIzOlxcdFxcbjEyMjQ6XFx0XFx0bWUtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH4oUEZfUkFORE9NSVpFIHwgUEZfRk9SS05PRVhFQyB8XFxuMTIyNTpcXHRcXHRcXHRcXHRcXHRcXHRQRl9OT0ZSRUVaRSB8IFBGX05PX1NFVEFGRklOSVRZKTtcXG4xMjI2OlxcdFxcdGZsdXNoX3RocmVhZCgpO1xcbjEyMjc6XFx0XFx0bWUtXFx1MDAzZXBlcnNvbmFsaXR5IFxcdTAwMjY9IH5icHJtLVxcdTAwM2VwZXJfY2xlYXI7XFxuMTIyODpcXHRcXG4xMjI5OlxcdFxcdGNsZWFyX3N5c2NhbGxfd29ya19zeXNjYWxsX3VzZXJfZGlzcGF0Y2gobWUpO1xcbjEyMzA6XFx0XFxuMTIzMTpcXHRcXHRpZiAoYnBybS1cXHUwMDNlc2VjdXJlZXhlYykge1xcbjEyMzI6XFx0XFx0XFx0LyogTWFrZSBzdXJlIHBhcmVudCBjYW5ub3Qgc2lnbmFsIHByaXZpbGVnZWQgcHJvY2Vzcy4gKi9cXG4xMjMzOlxcdFxcdFxcdG1lLVxcdTAwM2VwZGVhdGhfc2lnbmFsID0gMDtcXG4xMjM0OlxcdFxcbjEyMzU6XFx0XFx0XFx0LypcXG4xMjM2OlxcdFxcdFxcdCAqIEZvciBzZWN1cmVleGVjLCByZXNldCB0aGUgc3RhY2sgbGltaXQgdG8gc2FuZSBkZWZhdWx0IHRvXFxuMTIzNzpcXHRcXHRcXHQgKiBhdm9pZCBiYWQgYmVoYXZpb3IgZnJvbSB0aGUgcHJpb3IgcmxpbWl0cy4gVGhpcyBoYXMgdG9cXG4xMjM4OlxcdFxcdFxcdCAqIGhhcHBlbiBiZWZvcmUgYXJjaF9waWNrX21tYXBfbGF5b3V0KCksIHdoaWNoIGV4YW1pbmVzXFxuMTIzOTpcXHRcXHRcXHQgKiBSTElNSVRfU1RBQ0ssIGJ1dCBhZnRlciB0aGUgcG9pbnQgb2Ygbm8gcmV0dXJuIHRvIGF2b2lkXFxuMTI0MDpcXHRcXHRcXHQgKiBuZWVkaW5nIHRvIGNsZWFuIHVwIHRoZSBjaGFuZ2Ugb24gZmFpbHVyZS5cXG4xMjQxOlxcdFxcdFxcdCAqL1xcbjEyNDI6XFx0XFx0XFx0aWYgKGJwcm0tXFx1MDAzZXJsaW1fc3RhY2sucmxpbV9jdXIgXFx1MDAzZSBfU1RLX0xJTSlcXG4xMjQzOlxcdFxcdFxcdFxcdGJwcm0tXFx1MDAzZXJsaW1fc3RhY2sucmxpbV9jdXIgPSBfU1RLX0xJTTtcXG4xMjQ0OlxcdFxcdH1cXG4xMjQ1OlxcdFxcbjEyNDY6XFx0XFx0bWUtXFx1MDAzZXNhc19zc19zcCA9IG1lLVxcdTAwM2VzYXNfc3Nfc2l6ZSA9IDA7XFxuMTI0NzpcXHRcXG4xMjQ4OlxcdFxcdC8qXFxuMTI0OTpcXHRcXHQgKiBGaWd1cmUgb3V0IGR1bXBhYmlsaXR5LiBOb3RlIHRoYXQgdGhpcyBjaGVja2luZyBvbmx5IG9mIGN1cnJlbnRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MzU6MDguNzQwNTE1NTc0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzg0MjM3NzUyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogYGJlZ2luX25ld19leGVjYCBpbiBgZnMvZXhlYy5jYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgbW9kaWZpY2F0aW9uIGluIGBmcy9leGVjLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBiZWdpbl9uZXdfZXhlY2AuIFRoZSBjaGFuZ2UgaW52b2x2ZXMgbW92aW5nIHRoZSBgZG9fY2xvc2Vfb25fZXhlYyhtZS1cdTAwM2VmaWxlcylgIGNhbGwuIEl0IHVzZWQgdG8gYmUgKmFmdGVyKiBgY2xlYXJfc3lzY2FsbF93b3JrX3N5c2NhbGxfdXNlcl9kaXNwYXRjaChtZSk7YCBidXQgaXMgbm93ICpiZWZvcmUqIGBzZXRfbW1fZXhlX2ZpbGUoYnBybS1cdTAwM2VtbSwgYnBybV9pZGVudGl0eV9maWxlKGJwcm0pKTtgIGFuZCBgZXhlY19tbWFwKGJwcm0pYC4gVGhlIGNvbW1lbnQgZXhwbGFpbnMgdGhpcyBpcyBhYm91dCBoYW5kbGluZyBgQ0xPRVhFQ2AgZmxhZ3MgYmVmb3JlIGNoYW5naW5nIHByb2Nlc3MgZHVtcGFiaWxpdHksIHByZXZlbnRpbmcgYSByYWNlIGNvbmRpdGlvbiB3aXRoIHVzZXItc3BhY2UgcHJvY2Vzc2VzIGFjY2Vzc2luZyBmaWxlIGRlc2NyaXB0b3JzLiBJdCBhbHNvIG5vdGVzIHRoYXQgYGRvX2Nsb3NlX29uX2V4ZWNgIGNhbiBibG9jaywgc28gaXQncyBiZWluZyBtb3ZlZCB0byBoYXBwZW4gKmJlZm9yZSogdGFraW5nIHRoZSBgZXhlY191cGRhdGVfbG9ja2AuIEludGVyZXN0aW5nLiBUaGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGNvZGUsIGl0J3MgZnVuZGFtZW50YWwgdG8gZXZlcnkgYGV4ZWN2ZWAgYW5kIGBleGVjdmVhdGAgY2FsbC4gU28sIGlzIHRoaXMgd29ydGggZnV6emluZz8gQmFzZWQgb24gdGhlIGZ1enppbmcgZ3VpZGVsaW5lcywgYW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgd2l0aGluIHRoZSBcInN5c2NhbGwgaGFuZGxpbmdcIiBzdWJzeXN0ZW0sIG9yIHJlZmFjdG9yaW5nIG9mIFwicmVhY2hhYmxlIGNvZGVcIiBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcuIFRoaXMgaXMgYSBjbGVhciBcInllc1wiLiBOb3csIHRvIHJlZmluZSB0aGUgZm9jdXM6IFRoZSBtb2RpZmllZCBmdW5jdGlvbiBpcyBgYmVnaW5fbmV3X2V4ZWNgIHdpdGhpbiBgZnMvZXhlYy5jYC4gSXMgdGhpcyBhIGdvb2QgZm9jdXMgc3ltYm9sPyBGaXJzdCwgSSBuZWVkIHRvIGNoZWNrIHdoYXQgY2FsbHMgYGJlZ2luX25ld19leGVjYC4gTGV0J3MgZmluZCBvdXQuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTYwNCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjM1OjEyLjU4Mjg5NjgxN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTYzNDY4NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmVnaW5fbmV3X2V4ZWNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2JpbmZtdF9lbGYuYz04Mjk9c3RhdGljIGludCBsb2FkX2VsZl9iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4tLVxcbmZzL2JpbmZtdF9lbGYuYy0xMDA5LVxcdC8qIEZsdXNoIGFsbCB0cmFjZXMgb2YgdGhlIGN1cnJlbnRseSBydW5uaW5nIGV4ZWN1dGFibGUgKi9cXG5mcy9iaW5mbXRfZWxmLmM6MTAxMDpcXHRyZXR2YWwgPSBiZWdpbl9uZXdfZXhlYyhicHJtKTtcXG5mcy9iaW5mbXRfZWxmLmMtMTAxMS1cXHRpZiAocmV0dmFsKVxcbi0tXFxuZnMvYmluZm10X2VsZl9mZHBpYy5jPTE4Mj1zdGF0aWMgaW50IGxvYWRfZWxmX2ZkcGljX2JpbmFyeShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbi0tXFxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTM0OC1cXHQvKiBmbHVzaCBhbGwgdHJhY2VzIG9mIHRoZSBjdXJyZW50bHkgcnVubmluZyBleGVjdXRhYmxlICovXFxuZnMvYmluZm10X2VsZl9mZHBpYy5jOjM0OTpcXHRyZXR2YWwgPSBiZWdpbl9uZXdfZXhlYyhicHJtKTtcXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtMzUwLVxcdGlmIChyZXR2YWwpXFxuLS1cXG5mcy9iaW5mbXRfZmxhdC5jPTQwNj1zdGF0aWMgaW50IGxvYWRfZmxhdF9maWxlKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXFxuLS1cXG5mcy9iaW5mbXRfZmxhdC5jLTUwOC1cXHQvKiBGbHVzaCBhbGwgdHJhY2VzIG9mIHRoZSBjdXJyZW50bHkgcnVubmluZyBleGVjdXRhYmxlICovXFxuZnMvYmluZm10X2ZsYXQuYzo1MDk6XFx0cmV0ID0gYmVnaW5fbmV3X2V4ZWMoYnBybSk7XFxuZnMvYmluZm10X2ZsYXQuYy01MTAtXFx0aWYgKHJldClcXG4tLVxcbmZzL2V4ZWMuYz0yNTg9c3RhdGljIGludCBicHJtX21tX2luaXQoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4tLVxcbmZzL2V4ZWMuYy0yNjctXFxuZnMvZXhlYy5jOjI2ODpcXHQvKiBTdGFnZWQgZm9yIHdvdWxkX2R1bXAoKSBuYXJyb3dpbmc7IGNvbnN1bWVkIGJ5IGJlZ2luX25ld19leGVjKCkuICovXFxuZnMvZXhlYy5jLTI2OS1cXHRicHJtLVxcdTAwM2V1c2VyX25zID0gZ2V0X3VzZXJfbnMoY3VycmVudF91c2VyX25zKCkpO1xcbi0tXFxuZnMvZXhlYy5jPTExMTE9c3RhdGljIHN0cnVjdCBmaWxlICpicHJtX2lkZW50aXR5X2ZpbGUoY29uc3Qgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4tLVxcbmZzL2V4ZWMuYy0xMTIzLSAqL1xcbmZzL2V4ZWMuYzoxMTI0OmludCBiZWdpbl9uZXdfZXhlYyhzdHJ1Y3QgbGludXhfYmlucHJtICogYnBybSlcXG5mcy9leGVjLmMtMTEyNS17XFxuLS1cXG5mcy9leGVjLmMtMTM0Mi19XFxuZnMvZXhlYy5jOjEzNDM6RVhQT1JUX1NZTUJPTChiZWdpbl9uZXdfZXhlYyk7XFxuZnMvZXhlYy5jLTEzNDQtXFxuLS1cXG5mcy9leGVjLmM9MTQ0Mj1zdHJ1Y3QgZmlsZSAqYnBybV9vcGVuX2ludGVycHJldGVyKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sIGNvbnN0IGNoYXIgKnBhdGgpXFxuLS1cXG5mcy9leGVjLmMtMTQ1NC0gKiBvdmVycmlkZSBhbmQgbGV0IHRoZSBiaW5hcnkgbG9hZCBuYXRpdmVseSByYXRoZXIgdGhhbiBoYXZlXFxuZnMvZXhlYy5jOjE0NTU6ICogYmVnaW5fbmV3X2V4ZWMoKSByZWZ1c2UgaXQuIEEgbm8tb3Agb25jZSBicHJtX29wZW5faW50ZXJwcmV0ZXIoKSB0b29rXFxuZnMvZXhlYy5jLTE0NTYtICogdGhlIHN1YnN0aXR1dGUuXFxuLS1cXG5mcy9leGVjLmM9MTc0Nj1zdGF0aWMgaW50IHNlYXJjaF9iaW5hcnlfaGFuZGxlcihzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbi0tXFxuZnMvZXhlYy5jLTE3NzgtXFxuZnMvZXhlYy5jOjE3Nzk6LyogYmluZm10IGhhbmRsZXJzIHdpbGwgY2FsbCBiYWNrIGludG8gYmVnaW5fbmV3X2V4ZWMoKSBvbiBzdWNjZXNzLiAqL1xcbmZzL2V4ZWMuYy0xNzgwLXN0YXRpYyBpbnQgZXhlY19iaW5wcm0oc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4tLVxcbmZzL2V4ZWMuYz0xODI5PXN0YXRpYyBpbnQgYnBybV9leGVjdmUoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4tLVxcbmZzL2V4ZWMuYy0xODM4LVxcdCAqIENoZWNrIGZvciB1bnNhZmUgZXhlY3V0aW9uIHN0YXRlcyBiZWZvcmUgZXhlY19iaW5wcm0oKSwgd2hpY2hcXG5mcy9leGVjLmM6MTgzOTpcXHQgKiB3aWxsIGNhbGwgYmFjayBpbnRvIGJlZ2luX25ld19leGVjKCksIGludG8gYnBybV9jcmVkc19mcm9tX2ZpbGUoKSxcXG5mcy9leGVjLmMtMTg0MC1cXHQgKiB3aGVyZSBzZXR1aWQtbmVzcyBpcyBldmFsdWF0ZWQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjM1OjEyLjczOTI0ODUzMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMTM4ODIwMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ2hlY2tpbmcgYGRvX2Nsb3NlX29uX2V4ZWNgIExvY2F0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhpcyBgZG9fY2xvc2Vfb25fZXhlY2AgZnVuY3Rpb24gbGl2ZXMuIEdpdmVuIGl0cyBuYW1lLCBpdCdzIHByZXR0eSBsaWtlbHkgcmVsYXRlZCB0byBmaWxlIG9wZXJhdGlvbnMgb3IsIHBvdGVudGlhbGx5LCB0aGUgZXhlY3V0aW9uIHByb2Nlc3MgYW5kIGhvdyBmaWxlIGRlc2NyaXB0b3JzIGJlaGF2ZS4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBsb29rIHdpdGhpbiB0aGUga2VybmVsJ3MgZmlsZSBzeXN0ZW0gaW1wbGVtZW50YXRpb24sIHNvIEknbSB0aGlua2luZyBgZnMvZmlsZS5jYCBpcyBhIHByaW1lIGNhbmRpZGF0ZS4gSXQncyB0aGUgdXN1YWwgcGxhY2UgZm9yIGZpbGUtcmVsYXRlZCBsb2dpYy4gSG93ZXZlciwgc2luY2Ugd2UncmUgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBcImV4ZWMsXCIgSSdsbCBhbHNvIGdsYW5jZSBhdCBgZnMvZXhlYy5jYCAtIGl0IGhhbmRsZXMgdGhlIGltYWdlIGxvYWRpbmcgYW5kIGVudmlyb25tZW50IHNldHVwLCBhbmQgdGhhdCBtaWdodCBpbnZvbHZlIGhvdyBmaWxlcyBhcmUgaGFuZGxlZCBkdXJpbmcgZXhlY3V0aW9uIG9mIGEgcHJvZ3JhbS4gRmluYWxseSwgSSBzaG91bGQgYWxzbyBxdWlja2x5IGNoZWNrIHRoZSBhc3NvY2lhdGVkIGhlYWRlciBmaWxlcywgYXMgZnVuY3Rpb25zIGxpa2UgdGhpcyBvZnRlbiBoYXZlIGRlY2xhcmF0aW9ucyB0aGVyZS4gQmVzdCB0byBiZSB0aG9yb3VnaCwgSSdsbCBuZWVkIHRvIGtub3cgd2hlcmUgaXQncyBkZWZpbmVkIVxuXG5cbiIsIklucHV0VG9rZW5zIjo3Mzg4LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MzU6MTUuMDUzMTMzMTNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUwNjEwNTUxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb19jbG9zZV9vbl9leGVjXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4ZWMuYz0xMTI0PWludCBiZWdpbl9uZXdfZXhlYyhzdHJ1Y3QgbGludXhfYmlucHJtICogYnBybSlcXG4tLVxcbmZzL2V4ZWMuYy0xMTc4LVxcdCAqL1xcbmZzL2V4ZWMuYzoxMTc5OlxcdGRvX2Nsb3NlX29uX2V4ZWMobWUtXFx1MDAzZWZpbGVzKTtcXG5mcy9leGVjLmMtMTE4MC1cXG4tLVxcbmZzL2ZpbGUuYz04Nzg9c3RydWN0IGZpbGUgKmZpbGVfY2xvc2VfZmQodW5zaWduZWQgaW50IGZkKVxcbi0tXFxuZnMvZmlsZS5jLTg4OS1cXG5mcy9maWxlLmM6ODkwOnZvaWQgZG9fY2xvc2Vfb25fZXhlYyhzdHJ1Y3QgZmlsZXNfc3RydWN0ICpmaWxlcylcXG5mcy9maWxlLmMtODkxLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvZmR0YWJsZS5oPTEwNz1zdHJ1Y3QgZmlsZXNfc3RydWN0ICpkdXBfZmQoc3RydWN0IGZpbGVzX3N0cnVjdCAqLCBzdHJ1Y3QgZmRfcmFuZ2UgKikgX19sYXRlbnRfZW50cm9weTtcXG5pbmNsdWRlL2xpbnV4L2ZkdGFibGUuaDoxMDg6dm9pZCBkb19jbG9zZV9vbl9leGVjKHN0cnVjdCBmaWxlc19zdHJ1Y3QgKik7XFxuaW5jbHVkZS9saW51eC9mZHRhYmxlLmgtMTA5LWludCBpdGVyYXRlX2ZkKHN0cnVjdCBmaWxlc19zdHJ1Y3QgKiwgdW5zaWduZWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjM1OjE3LjU1OTI0Mzg3OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0ODE1NTQ3NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgUmVhc29uaW5nIGZvciBTZWxlY3RpbmcgdGhlIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgKnJpZ2h0KiB0YXJnZXRzIGZvciBmdXp6aW5nLCBnaXZlbiB0aGUgY2hhbmdlIEknbSByZXZpZXdpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBhY2NpZGVudGFsbHkgbGlzdGluZyBhICp1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aCosIGFzIHRoYXQncyBhIGZ1enppbmcgbm8tbm8uIFNvLCBsZXQncyBzZWUuLi4gdGhlIGBkb19jbG9zZV9vbl9leGVjYCBmdW5jdGlvbiBpcyB0aGUgaW5pdGlhbCBwb2ludCB0byBjaGVjaywgYW5kIGEgcXVpY2sgbG9va3VwIHNob3dzIGl0J3MgY2FsbGVkICpvbmx5KiB3aXRoaW4gYGZzL2V4ZWMuY2AsIHNwZWNpZmljYWxseSBkdXJpbmcgYGJlZ2luX25ld19leGVjYC4gVGhpcyBsb29rcyBwcm9taXNpbmcuXG5cbk5vdywgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgYmVnaW5fbmV3X2V4ZWNgIGl0c2VsZiBpc24ndCAqdG9vKiBnZW5lcmljLiBUaGUgdGV4dCBtZW50aW9ucyBpdCdzIHVzZWQgZHVyaW5nIGV4ZWMgYnkgYmluYXJ5IGZvcm1hdCBoYW5kbGVycy4gSXMgdGhpcyBhIHVuaXZlcnNhbGx5IGNhbGxlZCBmdW5jdGlvbj8gQmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZywgYGJlZ2luX25ld19leGVjYCBzZWVtcyBzcGVjaWZpYyB0byB0aGUgKmV4ZWN2ZSogcGF0aC4gU3l6a2FsbGVyIHRlc3RzIGBleGVjdmVgIGFuZCBgZXhlY3ZlYXRgLCBidXQgbm90ICpldmVyeSogU3l6a2FsbGVyIHRlc3QgcnVucyBgZXhlY3ZlYC4gTW9zdCB0ZXN0cyBhcmUgYWJvdXQgdGhpbmdzIGxpa2Ugc29ja2V0cyBvciBpb2N0bCwgYnV0IGBiZWdpbl9uZXdfZXhlY2AgaXMgc3BlY2lmaWMgdG8gdGhlIGBleGVjdmVgIHBhdGguIFRoZXJlZm9yZSwgSSBjYW4gY29uZmlkZW50bHkgYWRkIGl0LlxuXG5UaGUgZ3VpZGVsaW5lcyBzYXkgdGhhdCBJIHNob3VsZCB0YXJnZXQgXCJzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIGFuZCBlbnRyeXBvaW50c1wiLCBhbmQgdGhhdCdzIGV4YWN0bHkgd2hhdCBgYmVnaW5fbmV3X2V4ZWNgIGFuZCBgZG9fY2xvc2Vfb25fZXhlY2AgcmVwcmVzZW50LiBUaGV5IGFyZSB0aGUgZGlyZWN0IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGlzIHNwZWNpZmljIGNoYW5nZS4gU28gSSdsbCBpbmNsdWRlIGJvdGguXG5cbk5vdywgbGV0J3MgYWRkcmVzcyB0aGUgS2NvbmZpZyBvcHRpb25zLiBCb3RoIGBiZWdpbl9uZXdfZXhlY2AgKGluIGBmcy9leGVjLmNgKSBhbmQgYGRvX2Nsb3NlX29uX2V4ZWNgIChpbiBgZnMvZmlsZS5jYCkgYXJlIGNvcmUga2VybmVsIGZ1bmN0aW9ucy4gVGhleSBhcmUgY29tcGlsZWQgdW5jb25kaXRpb25hbGx5IGludG8gdGhlIGtlcm5lbCwgd2hpY2ggbWVhbnMgbm8gc3BlY2lhbCBgQ09ORklHYCBpcyByZXF1aXJlZC4gSSBjYW4ga2VlcCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGVtcHR5IGZvciB0aGlzLlxuXG5GaW5hbGx5LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSdsbCB0YWtlIGEgcXVpY2sgZ2xhbmNlIGF0IGBmcy9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgYnVpbHQtaW4gc3RhdHVzIG9mIGJvdGggZmlsZXMuIFllcCwgdGhhdCdzIHdoYXQgSSBleHBlY3RlZC4gYGZzL2V4ZWMuY2AgaXMgY29tcGlsZWQgYWx3YXlzIChgb2JqLXkgKz0gZXhlYy5vYCksIGFuZCBgZnMvZmlsZS5jYCBpcyBhbHNvIGNvbXBpbGVkIGFsd2F5cy4gVGhpcyBpcyBhbGwgbG9va2luZyBnb29kLiBJIGFtIGNvbmZpZGVudCB3aXRoIHRoaXMgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5MDMsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MzU6MjIuMDQwODAwODQ3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzMxODQxNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXhlY1xcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvTWFrZWZpbGU9MTA9b2JqLXkgOj1cXHRvcGVuLm8gcmVhZF93cml0ZS5vIGZpbGVfdGFibGUubyBzdXBlci5vIFxcXFxcXG5mcy9NYWtlZmlsZToxMTpcXHRcXHRjaGFyX2Rldi5vIHN0YXQubyBleGVjLm8gcGlwZS5vIG5hbWVpLm8gZmNudGwubyBcXFxcXFxuZnMvTWFrZWZpbGUtMTItXFx0XFx0aW9jdGwubyByZWFkZGlyLm8gc2VsZWN0Lm8gZGNhY2hlLm8gaW5vZGUubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjM1OjIyLjE3Mzk5NDUwNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjY0MTM5NDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBleGVjLm9gIENoYW5nZSoqXG5cbk9rYXksIHNvIGBleGVjLm9gIGlzIGJha2VkIHJpZ2h0IGludG8gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IHRocm91Z2ggdGhlIGBmcy9NYWtlZmlsZWAgYXMgYW4gYG9iai15YC4gTm8gc3VycHJpc2VzIHRoZXJlLiBCdXQgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgcHJvcG9zZWQgY2hhbmdlIHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gTGV0J3MgbWFrZSBzdXJlIHRoZSBjcml0ZXJpYSBhcmUgbWV0LlxuXG5GaXJzdCwgaXMgdGhpcyBjaGFuZ2UgKldvcnRoRnV6emluZyo/IFllcCwgYWJzb2x1dGVseS4gVGhlIHJlYXNvbmluZyBpcyBzb2xpZC4gVGhlIHBhdGNoIGlzIG1vdmluZyBgZG9fY2xvc2Vfb25fZXhlYygpYCBlYXJsaWVyIGluIGBiZWdpbl9uZXdfZXhlYygpYCB3aXRoaW4gYGZzL2V4ZWMuY2AuIFRoZSBjb3JlIG9mIHRoaXMgaXMgYWJvdXQgcHJldmVudGluZyBhIHBvdGVudGlhbCBkZWFkbG9jayBzY2VuYXJpby4gU3BlY2lmaWNhbGx5IHdpdGggZmlsZXN5c3RlbSBmbHVzaCgpIGhhbmRsZXJzLCBzdWNoIGFzIEZVU0UsIGJsb2NraW5nIHdoaWxlIGhvbGRpbmcgdGhlIGBleGVjX3VwZGF0ZV9sb2NrYC4gVGhpcyBlZmZlY3RpdmVseSByZW9yZGVycyBjcml0aWNhbCBvcGVyYXRpb25zIGluIHRoZSBjb3JlIFZGUy9leGVjIHN1YnN5c3RlbSwgYW5kIGFueSBjaGFuZ2UgdG91Y2hpbmcgYGV4ZWNgIGRlc2VydmVzIHNjcnV0aW55LlxuXG5UaGUgKkZvY3VzU3ltYm9scyogYXJlIGNsZWFybHkgYGJlZ2luX25ld19leGVjYCBhbmQgYGRvX2Nsb3NlX29uX2V4ZWNgLiBNYWtlcyBzZW5zZSwgdGhvc2UgYXJlIHRoZSBmdW5jdGlvbnMgZGlyZWN0bHkgYWZmZWN0ZWQgYnkgdGhlIHBhdGNoLiBObyBzcGVjaWZpYyBrZXJuZWwgKkVuYWJsZUNvbmZpZ3MqIGFyZSBuZWVkZWQgdG8gcmVwcm9kdWNlIHRoaXMgaXNzdWUsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzLlxuXG5SaWdodCwgc28gd2l0aCB0aGF0IGNvbmZpcm1hdGlvbiwgSSdsbCBwYXNzIHRoZXNlIHZhbHVlcyB0byB0aGUgc2V0LXJlc3VsdHMgZnVuY3Rpb24gZm9yIGZ1dHVyZSB1c2UuIFRoaXMgbG9va3MgbGlrZSBzb21ldGhpbmcgSSBzaG91bGQga2VlcCBhbiBleWUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5OTksIk91dHB1dFRva2VucyI6MTM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjM1OjI1LjgzODEzNjI1N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmVnaW5fbmV3X2V4ZWNcIixcbiAgICBcImRvX2Nsb3NlX29uX2V4ZWNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGV4ZWN2ZSBsb2dpYyBpbiBiZWdpbl9uZXdfZXhlYygpIChmcy9leGVjLmMpLCBtb3ZpbmcgdGhlIGludm9jYXRpb24gb2YgZG9fY2xvc2Vfb25fZXhlYygpIGJlZm9yZSBleGVjX21tYXAoKSBhbmQgc2V0X21tX2V4ZV9maWxlKCkgdG8gYXZvaWQgYmxvY2tpbmcgb24gZmlsZXN5c3RlbSAtXFx1MDAzZWZsdXNoKCkgaGFuZGxlcnMgd2hpbGUgaG9sZGluZyBleGVjX3VwZGF0ZV9sb2NrLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb250cm9sIGZsb3cgYW5kIGxpZmVjeWNsZSBvcmRlciBkdXJpbmcgcHJvZ3JhbSBleGVjdXRpb24gaW4gdGhlIGNvcmUgVkZTL2V4ZWMgc3Vic3lzdGVtIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJlZ2luX25ld19leGVjXCIsXG4gICAgXCJkb19jbG9zZV9vbl9leGVjXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBleGVjdmUgbG9naWMgaW4gYmVnaW5fbmV3X2V4ZWMoKSAoZnMvZXhlYy5jKSwgbW92aW5nIHRoZSBpbnZvY2F0aW9uIG9mIGRvX2Nsb3NlX29uX2V4ZWMoKSBiZWZvcmUgZXhlY19tbWFwKCkgYW5kIHNldF9tbV9leGVfZmlsZSgpIHRvIGF2b2lkIGJsb2NraW5nIG9uIGZpbGVzeXN0ZW0gLVxcdTAwM2VmbHVzaCgpIGhhbmRsZXJzIHdoaWxlIGhvbGRpbmcgZXhlY191cGRhdGVfbG9jay4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29udHJvbCBmbG93IGFuZCBsaWZlY3ljbGUgb3JkZXIgZHVyaW5nIHByb2dyYW0gZXhlY3V0aW9uIGluIHRoZSBjb3JlIFZGUy9leGVjIHN1YnN5c3RlbSBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MzU6MjUuODM4MTY0Mzg4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDAwMDM2MTEyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjM1OjI1LjgzODU1OTkyOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM5OTk5OTYxMTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyB0aGUgaW52b2NhdGlvbiBvZiBgZG9fY2xvc2Vfb25fZXhlYyhtZS1cXHUwMDNlZmlsZXMpYCBlYXJsaWVyIGluIGBiZWdpbl9uZXdfZXhlYygpYCwgcGxhY2luZyBpdCBiZWZvcmUgYHNldF9tbV9leGVfZmlsZSgpYCBhbmQgYGV4ZWNfbW1hcCgpYC4gVGhpcyBhdm9pZHMgaG9sZGluZyBgZXhlY191cGRhdGVfbG9ja2Agd2hpbGUgZmlsZXN5c3RlbSBgLVxcdTAwM2VmbHVzaCgpYCBoYW5kbGVycyAoc3VjaCBhcyBGVVNFKSBydW4gZHVyaW5nIGBmaWxwX2Nsb3NlKClgLCByZXNvbHZpbmcgcG90ZW50aWFsIGxvY2tpbmcvZGVhZGxvY2sgYW5kIGNvbmN1cnJlbmN5IGlzc3Vlcy5cXG5cXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYSBjb250cm9sIGZsb3cgYW5kIGxvY2sgb3JkZXJpbmcgYWRqdXN0bWVudCB3aXRoaW4gcHJvY2VzcyBleGVjdXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSwgYWxsb2NhdGUsIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0YWNrL2hlYXAgYnVmZmVycywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UuIEFueSByaXNrcyBhc3NvY2lhdGVkIHdpdGggbG9ja2luZyBvciBmaWxlIGRlc2NyaXB0b3IgcmVmZXJlbmNlIGxpZmVjeWNsZXMgYXJlIG1vbml0b3JlZCBieSBMT0NLREVQIGFuZCBzdGFuZGFyZCBLQVNBTiBidWlsZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjOTA0M2Y4MGVhOWYyN2Q3N2NiM2NlN2IyYzdiODAwYmJjZTUzMWUzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwMTozNDo1NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuY1xuaW5kZXggNzQ1ZjZlYjUyNzllNi4uYjUxZTVkN2U0NTM2NyAxMDA2NDRcbi0tLSBhL2ZzL2V4ZWMuY1xuKysrIGIvZnMvZXhlYy5jXG5AQCAtMTE2NCw2ICsxMTY0LDIwIEBAIGludCBiZWdpbl9uZXdfZXhlYyhzdHJ1Y3QgbGludXhfYmlucHJtICogYnBybSlcbiBcdGlmIChyZXR2YWwpXG4gXHRcdGdvdG8gb3V0O1xuIFxuK1x0LypcbitcdCAqIFdlIGhhdmUgdG8gYXBwbHkgQ0xPRVhFQyBiZWZvcmUgd2UgY2hhbmdlIHdoZXRoZXIgdGhlIHByb2Nlc3MgaXNcbitcdCAqIGR1bXBhYmxlIChpbiBzZXR1cF9uZXdfZXhlYykgdG8gYXZvaWQgYSByYWNlIHdpdGggYSBwcm9jZXNzIGluIHVzZXJzcGFjZVxuK1x0ICogdHJ5aW5nIHRvIGFjY2VzcyB0aGUgc2hvdWxkLWJlLWNsb3NlZCBmaWxlIGRlc2NyaXB0b3JzIG9mIGEgcHJvY2Vzc1xuK1x0ICogdW5kZXJnb2luZyBleGVjKDIpLlxuK1x0ICpcbitcdCAqIFRoaXMgY2FuIGJsb2NrIG9uIGZpbGVzeXN0ZW0gLVx1MDAzZWZsdXNoKCkgaGFuZGxlcnMsIGluY2x1ZGluZyB3YWl0aW5nXG4rXHQgKiBmb3IgRlVTRSBkYWVtb25zLCBzbyBkbyBpdCBiZWZvcmUgZXhlY19tbWFwIHRha2VzIHRoZVxuK1x0ICogZXhlY191cGRhdGVfbG9jay5cbitcdCAqIFRoaXMgbXVzdCBoYXBwZW4gYWZ0ZXIgdGhlIHBvaW50IG9mIG5vIHJldHVybiwgYW5kIGFmdGVyIHVuc2hhcmluZ1xuK1x0ICogdGhlIEZEIHRhYmxlLlxuK1x0ICovXG4rXHRkb19jbG9zZV9vbl9leGVjKG1lLVx1MDAzZWZpbGVzKTtcbitcbiBcdC8qXG4gXHQgKiBNdXN0IGJlIGNhbGxlZCBfYmVmb3JlXyBleGVjX21tYXAoKSBhcyBicHJtLVx1MDAzZW1tIGlzXG4gXHQgKiBub3QgdmlzaWJsZSB1bnRpbCB0aGVuLiBEb2luZyBpdCBoZXJlIGFsc28gZW5zdXJlc1xuQEAgLTEyMTQsMTQgKzEyMjgsNiBAQCBpbnQgYmVnaW5fbmV3X2V4ZWMoc3RydWN0IGxpbnV4X2JpbnBybSAqIGJwcm0pXG4gXG4gXHRjbGVhcl9zeXNjYWxsX3dvcmtfc3lzY2FsbF91c2VyX2Rpc3BhdGNoKG1lKTtcbiBcbi1cdC8qXG4tXHQgKiBXZSBoYXZlIHRvIGFwcGx5IENMT0VYRUMgYmVmb3JlIHdlIGNoYW5nZSB3aGV0aGVyIHRoZSBwcm9jZXNzIGlzXG4tXHQgKiBkdW1wYWJsZSAoaW4gc2V0dXBfbmV3X2V4ZWMpIHRvIGF2b2lkIGEgcmFjZSB3aXRoIGEgcHJvY2VzcyBpbiB1c2Vyc3BhY2Vcbi1cdCAqIHRyeWluZyB0byBhY2Nlc3MgdGhlIHNob3VsZC1iZS1jbG9zZWQgZmlsZSBkZXNjcmlwdG9ycyBvZiBhIHByb2Nlc3Ncbi1cdCAqIHVuZGVyZ29pbmcgZXhlYygyKS5cbi1cdCAqL1xuLVx0ZG9fY2xvc2Vfb25fZXhlYyhtZS1cdTAwM2VmaWxlcyk7XG4tXG4gXHRpZiAoYnBybS1cdTAwM2VzZWN1cmVleGVjKSB7XG4gXHRcdC8qIE1ha2Ugc3VyZSBwYXJlbnQgY2Fubm90IHNpZ25hbCBwcml2aWxlZ2VkIHByb2Nlc3MuICovXG4gXHRcdG1lLVx1MDAzZXBkZWF0aF9zaWduYWwgPSAwO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MzU6MjUuODM4NTYxOTI4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyMTQ4NDE1MjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgRXZhbHVhdGlvbiAtIGBmcy9leGVjLmNgIFBhdGNoKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIHRvIGBmcy9leGVjLmNgIHdhcnJhbnRzIGEgS01TQU4gZnV6emluZyBzZXNzaW9uLiBMZXQncyBtYWtlIHN1cmUgd2UncmUgZm9sbG93aW5nIHRoZSBzYWZldHkgcHJvdG9jb2xzIGhlcmUuIEl0IHNlZW1zIGxpa2UgdGhpcyBpcyBqdXN0IHN0YW5kYXJkIGRldmVsb3BlciBRQSwgY29kZSBhbmFseXNpcywgYW5kIHNhbml0aXphdGlvbiBhc3Nlc3NtZW50LCBub3RoaW5nIG91dCBvZiB0aGUgb3JkaW5hcnkgb3Igcmlza3kuIEdvb2QsIHNhZmUgdG8gcHJvY2VlZC5cblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBwYXRjaCBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBjb2RlIGlzIGFjdHVhbGx5ICpkb2luZyouIFRpbWUgdG8gcHVsbCB1cCB0aGUgcGF0Y2ggYW5kIGxpa2VseSByZWFjaCBmb3IgYHJlYWQtZmlsZWAgb3IgZXZlbiBgZ3JlcHBlcmAgdG8gZXhhbWluZSB0aGUgcmVsZXZhbnQgc2VjdGlvbiBvZiBgZnMvZXhlYy5jYCwgZXNwZWNpYWxseSBhcm91bmQgdGhhdCBgYmVnaW5fbmV3X2V4ZWNgIGZ1bmN0aW9uLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjaGFuZ2VzIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBJIG5lZWQgdG8gYXNzZXNzIGlmIHRoaXMgcGF0Y2ggY291bGQgaW50cm9kdWNlIGFueSBtZW1vcnkgc2FmZXR5IHZ1bG5lcmFiaWxpdGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM5MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjM1OjM3Ljk4Njk4MDQxNloiLCJTZXEiOjE2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTEzOTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4ZWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTUwLFxuICBcIkxpbmVDb3VudFwiOiA5MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTUwOlxcdFxcbjExNTE6XFx0XFx0LyogTWFrZSB0aGlzIHRoZSBvbmx5IHRocmVhZCBpbiB0aGUgdGhyZWFkIGdyb3VwICovXFxuMTE1MjpcXHRcXHRyZXR2YWwgPSBkZV90aHJlYWQobWUpO1xcbjExNTM6XFx0XFx0aWYgKHJldHZhbClcXG4xMTU0OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjExNTU6XFx0XFx0Lyogc2VlIHRoZSBjb21tZW50IGluIGNoZWNrX3Vuc2FmZV9leGVjKCkgKi9cXG4xMTU2OlxcdFxcdGN1cnJlbnQtXFx1MDAzZWZzLVxcdTAwM2Vpbl9leGVjID0gMDtcXG4xMTU3OlxcdFxcdC8qXFxuMTE1ODpcXHRcXHQgKiBDYW5jZWwgYW55IGlvX3VyaW5nIGFjdGl2aXR5IGFjcm9zcyBleGVjdmVcXG4xMTU5OlxcdFxcdCAqL1xcbjExNjA6XFx0XFx0aW9fdXJpbmdfdGFza19jYW5jZWwoKTtcXG4xMTYxOlxcdFxcbjExNjI6XFx0XFx0LyogRW5zdXJlIHRoZSBmaWxlcyB0YWJsZSBpcyBub3Qgc2hhcmVkLiAqL1xcbjExNjM6XFx0XFx0cmV0dmFsID0gdW5zaGFyZV9maWxlcygpO1xcbjExNjQ6XFx0XFx0aWYgKHJldHZhbClcXG4xMTY1OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjExNjY6XFx0XFxuMTE2NzpcXHRcXHQvKlxcbjExNjg6XFx0XFx0ICogV2UgaGF2ZSB0byBhcHBseSBDTE9FWEVDIGJlZm9yZSB3ZSBjaGFuZ2Ugd2hldGhlciB0aGUgcHJvY2VzcyBpc1xcbjExNjk6XFx0XFx0ICogZHVtcGFibGUgKGluIHNldHVwX25ld19leGVjKSB0byBhdm9pZCBhIHJhY2Ugd2l0aCBhIHByb2Nlc3MgaW4gdXNlcnNwYWNlXFxuMTE3MDpcXHRcXHQgKiB0cnlpbmcgdG8gYWNjZXNzIHRoZSBzaG91bGQtYmUtY2xvc2VkIGZpbGUgZGVzY3JpcHRvcnMgb2YgYSBwcm9jZXNzXFxuMTE3MTpcXHRcXHQgKiB1bmRlcmdvaW5nIGV4ZWMoMikuXFxuMTE3MjpcXHRcXHQgKlxcbjExNzM6XFx0XFx0ICogVGhpcyBjYW4gYmxvY2sgb24gZmlsZXN5c3RlbSAtXFx1MDAzZWZsdXNoKCkgaGFuZGxlcnMsIGluY2x1ZGluZyB3YWl0aW5nXFxuMTE3NDpcXHRcXHQgKiBmb3IgRlVTRSBkYWVtb25zLCBzbyBkbyBpdCBiZWZvcmUgZXhlY19tbWFwIHRha2VzIHRoZVxcbjExNzU6XFx0XFx0ICogZXhlY191cGRhdGVfbG9jay5cXG4xMTc2OlxcdFxcdCAqIFRoaXMgbXVzdCBoYXBwZW4gYWZ0ZXIgdGhlIHBvaW50IG9mIG5vIHJldHVybiwgYW5kIGFmdGVyIHVuc2hhcmluZ1xcbjExNzc6XFx0XFx0ICogdGhlIEZEIHRhYmxlLlxcbjExNzg6XFx0XFx0ICovXFxuMTE3OTpcXHRcXHRkb19jbG9zZV9vbl9leGVjKG1lLVxcdTAwM2VmaWxlcyk7XFxuMTE4MDpcXHRcXG4xMTgxOlxcdFxcdC8qXFxuMTE4MjpcXHRcXHQgKiBNdXN0IGJlIGNhbGxlZCBfYmVmb3JlXyBleGVjX21tYXAoKSBhcyBicHJtLVxcdTAwM2VtbSBpc1xcbjExODM6XFx0XFx0ICogbm90IHZpc2libGUgdW50aWwgdGhlbi4gRG9pbmcgaXQgaGVyZSBhbHNvIGVuc3VyZXNcXG4xMTg0OlxcdFxcdCAqIHdlIGRvbid0IHJhY2UgYWdhaW5zdCByZXBsYWNlX21tX2V4ZV9maWxlKCkuXFxuMTE4NTpcXHRcXHQgKi9cXG4xMTg2OlxcdFxcdHJldHZhbCA9IHNldF9tbV9leGVfZmlsZShicHJtLVxcdTAwM2VtbSwgYnBybV9pZGVudGl0eV9maWxlKGJwcm0pKTtcXG4xMTg3OlxcdFxcdGlmIChyZXR2YWwpXFxuMTE4ODpcXHRcXHRcXHRnb3RvIG91dDtcXG4xMTg5OlxcdFxcbjExOTA6XFx0XFx0LyogSWYgdGhlIGJpbmFyeSBpcyBub3QgcmVhZGFibGUgdGhlbiBlbmZvcmNlIG1tLVxcdTAwM2VkdW1wYWJsZT0wICovXFxuMTE5MTpcXHRcXHR3b3VsZF9kdW1wKGJwcm0sIGJwcm0tXFx1MDAzZWZpbGUpO1xcbjExOTI6XFx0XFx0aWYgKGJwcm0tXFx1MDAzZWhhdmVfZXhlY2ZkKVxcbjExOTM6XFx0XFx0XFx0d291bGRfZHVtcChicHJtLCBicHJtLVxcdTAwM2VleGVjdXRhYmxlKTtcXG4xMTk0OlxcdFxcbjExOTU6XFx0XFx0LypcXG4xMTk2OlxcdFxcdCAqIFJlbGVhc2UgYWxsIG9mIHRoZSBvbGQgbW1hcCBzdHVmZlxcbjExOTc6XFx0XFx0ICovXFxuMTE5ODpcXHRcXHRhY2N0X2FyZ19zaXplKGJwcm0sIDApO1xcbjExOTk6XFx0XFx0cmV0dmFsID0gZXhlY19tbWFwKGJwcm0pO1xcbjEyMDA6XFx0XFx0aWYgKHJldHZhbClcXG4xMjAxOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjEyMDI6XFx0XFxuMTIwMzpcXHRcXHRicHJtLVxcdTAwM2VtbSA9IE5VTEw7XFxuMTIwNDpcXHRcXG4xMjA1OlxcdFxcdHJldHZhbCA9IGV4ZWNfdGFza19uYW1lc3BhY2VzKCk7XFxuMTIwNjpcXHRcXHRpZiAocmV0dmFsKVxcbjEyMDc6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjEyMDg6XFx0XFxuMTIwOTpcXHQjaWZkZWYgQ09ORklHX1BPU0lYX1RJTUVSU1xcbjEyMTA6XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2bWUtXFx1MDAzZXNpZ2hhbmQtXFx1MDAzZXNpZ2xvY2spO1xcbjEyMTE6XFx0XFx0cG9zaXhfY3B1X3RpbWVyc19leGl0KG1lKTtcXG4xMjEyOlxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2bWUtXFx1MDAzZXNpZ2hhbmQtXFx1MDAzZXNpZ2xvY2spO1xcbjEyMTM6XFx0XFx0ZXhpdF9pdGltZXJzKG1lKTtcXG4xMjE0OlxcdFxcdGZsdXNoX2l0aW1lcl9zaWduYWxzKCk7XFxuMTIxNTpcXHQjZW5kaWZcXG4xMjE2OlxcdFxcbjEyMTc6XFx0XFx0LypcXG4xMjE4OlxcdFxcdCAqIE1ha2UgdGhlIHNpZ25hbCB0YWJsZSBwcml2YXRlLlxcbjEyMTk6XFx0XFx0ICovXFxuMTIyMDpcXHRcXHRyZXR2YWwgPSB1bnNoYXJlX3NpZ2hhbmQobWUpO1xcbjEyMjE6XFx0XFx0aWYgKHJldHZhbClcXG4xMjIyOlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xMjIzOlxcdFxcbjEyMjQ6XFx0XFx0bWUtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH4oUEZfUkFORE9NSVpFIHwgUEZfRk9SS05PRVhFQyB8XFxuMTIyNTpcXHRcXHRcXHRcXHRcXHRcXHRQRl9OT0ZSRUVaRSB8IFBGX05PX1NFVEFGRklOSVRZKTtcXG4xMjI2OlxcdFxcdGZsdXNoX3RocmVhZCgpO1xcbjEyMjc6XFx0XFx0bWUtXFx1MDAzZXBlcnNvbmFsaXR5IFxcdTAwMjY9IH5icHJtLVxcdTAwM2VwZXJfY2xlYXI7XFxuMTIyODpcXHRcXG4xMjI5OlxcdFxcdGNsZWFyX3N5c2NhbGxfd29ya19zeXNjYWxsX3VzZXJfZGlzcGF0Y2gobWUpO1xcbjEyMzA6XFx0XFxuMTIzMTpcXHRcXHRpZiAoYnBybS1cXHUwMDNlc2VjdXJlZXhlYykge1xcbjEyMzI6XFx0XFx0XFx0LyogTWFrZSBzdXJlIHBhcmVudCBjYW5ub3Qgc2lnbmFsIHByaXZpbGVnZWQgcHJvY2Vzcy4gKi9cXG4xMjMzOlxcdFxcdFxcdG1lLVxcdTAwM2VwZGVhdGhfc2lnbmFsID0gMDtcXG4xMjM0OlxcdFxcbjEyMzU6XFx0XFx0XFx0LypcXG4xMjM2OlxcdFxcdFxcdCAqIEZvciBzZWN1cmVleGVjLCByZXNldCB0aGUgc3RhY2sgbGltaXQgdG8gc2FuZSBkZWZhdWx0IHRvXFxuMTIzNzpcXHRcXHRcXHQgKiBhdm9pZCBiYWQgYmVoYXZpb3IgZnJvbSB0aGUgcHJpb3IgcmxpbWl0cy4gVGhpcyBoYXMgdG9cXG4xMjM4OlxcdFxcdFxcdCAqIGhhcHBlbiBiZWZvcmUgYXJjaF9waWNrX21tYXBfbGF5b3V0KCksIHdoaWNoIGV4YW1pbmVzXFxuMTIzOTpcXHRcXHRcXHQgKiBSTElNSVRfU1RBQ0ssIGJ1dCBhZnRlciB0aGUgcG9pbnQgb2Ygbm8gcmV0dXJuIHRvIGF2b2lkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjM1OjM3Ljk5MDQ5ODMyNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODAxMDE3MTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IEZpbGUgRGVzY3JpcHRvciBNYW5hZ2VtZW50IER1cmluZyBgZXhlY3ZlYCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBtb3ZpbmcgdGhlIGBkb19jbG9zZV9vbl9leGVjKG1lLVx1MDAzZWZpbGVzKWAgY2FsbCBpbiBgYmVnaW5fbmV3X2V4ZWNgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0aGF0IHByZXZpb3VzbHksIHRoaXMgY2FsbCB3YXMgaGFwcGVuaW5nICphZnRlciogc29tZSBjcnVjaWFsIG9wZXJhdGlvbnMgbGlrZSBzaWduYWwgaGFuZGxlciB1bnNoYXJpbmcgYW5kIHRocmVhZCBmbHVzaGluZy4gTm93LCB0aGV5J3JlIHNoaWZ0aW5nIGl0ICplYXJsaWVyKiBpbiB0aGUgc2VxdWVuY2UsIHJpZ2h0IGFmdGVyIGB1bnNoYXJlX2ZpbGVzKClgIGJ1dCAqYmVmb3JlKiB0aGUgbWVtb3J5IG1hcCBzZXR1cCBhbmQgZXhlY3V0YWJsZSBmaWxlIGJpbmRpbmcuIEludGVyZXN0aW5nLlxuXG5UaGUgcmF0aW9uYWxlIGZvciB0aGlzIGNoYW5nZSBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIFRoZSBjb21tZW50IGluZGljYXRlcyB0aGF0IGBkb19jbG9zZV9vbl9leGVjYCBjYW4gcG90ZW50aWFsbHkgYmxvY2sgZHVlIHRvIGZpbGVzeXN0ZW0gZmx1c2ggaGFuZGxlcnMsIHNwZWNpZmljYWxseSB3YWl0aW5nIG9uIEZVU0UgZGFlbW9ucy4gTWFrZXMgc2Vuc2Ug4oCTIHRob3NlIEkvTyBvcGVyYXRpb25zIGNhbiBiZSBhc3luY2hyb25vdXMgYW5kIGxlYWQgdG8gZGVsYXlzLiBTbywgdGhlIGdvYWwgaXMgdG8gZXhlY3V0ZSB0aGlzIGNhbGwgKmJlZm9yZSogd2UgZ3JhYiB0aGUgYGV4ZWNfdXBkYXRlX2xvY2tgIGR1cmluZyBgZXhlY19tbWFwYC4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCBkZWFkbG9jayBzY2VuYXJpbyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrIHRoYXQgdGhleSdyZSB0cnlpbmcgdG8gY2lyY3VtdmVudC4gVGhpcyBhbHNvIHBvaW50cyB0byBlbnN1cmluZyB0aGUgZmlsZSBkZXNjcmlwdG9yIHVuc2hhcmluZyBoYXMgYmVlbiBwZXJmb3JtZWQgc28gd2UgZG9uJ3QgZW5kIHVwIGNsb3NpbmcgZmlsZSBkZXNjcmlwdG9ycyBpbiB0aGUgd3JvbmcgcHJvY2VzcyBjb250ZXh0LiBFc3NlbnRpYWxseSwgdGhpcyBpcyBpbnRlbmRlZCB0byBhdm9pZCBwb3RlbnRpYWwgbG9jayBjb250ZW50aW9uIG9uIHRoZSBjcml0aWNhbCBgZXhlY191cGRhdGVfbG9ja2AgdGhhdCBpcyBjcml0aWNhbCBkdXJpbmcgdGhlIHByb2Nlc3Mgb2YgY3JlYXRpbmcgYSBuZXcgbWVtb3J5IG1hcCwgdGh1cyBlbnN1cmluZyB0aGF0IHRoZSBmaWxlIGRlc2NyaXB0b3IgY2xlYW51cCBoYXBwZW5zIGJlZm9yZSBtZW1vcnkgYWxsb2NhdGlvbi4gVGhlIGNyaXRpY2FsIGNvbnN0cmFpbnQgaXMgdGhhdCB0aGUgZmlsZSBkZXNjcmlwdG9yIHRhYmxlIG11c3QgaGF2ZSBiZWVuIHVuc2hhcmVkIGF0IHRoaXMgcG9pbnQuXG5cbk5vdywgSSBuZWVkIHRvIHZlcmlmeSB3aGF0IGBkb19jbG9zZV9vbl9leGVjYCBhY3R1YWxseSAqZG9lcyouIFVuZGVyc3RhbmRpbmcgdGhlIG1lY2hhbmljcyBvZiB0aGF0IGZ1bmN0aW9uIGlzIGtleSB0byBmdWxseSBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgc2hpZnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwMjcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMTozNTo0MS43OTE1MjAwMDRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDk2NzE2NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBkb19jbG9zZV9vbl9leGVjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9maWxlLmM9ODc4PXN0cnVjdCBmaWxlICpmaWxlX2Nsb3NlX2ZkKHVuc2lnbmVkIGludCBmZClcXG4tLVxcbmZzL2ZpbGUuYy04ODktXFxuZnMvZmlsZS5jOjg5MDp2b2lkIGRvX2Nsb3NlX29uX2V4ZWMoc3RydWN0IGZpbGVzX3N0cnVjdCAqZmlsZXMpXFxuZnMvZmlsZS5jLTg5MS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjM1OjQzLjI0MTE5NzM1MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MzA4NTE5NDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBmcy9maWxlLmNgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIE15IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRoYXQgdGhlIHJvb3Qgb2YgdGhlIHByb2JsZW0gbGlrZWx5IGxpZXMgd2l0aGluIHRoZSBmaWxlIHN5c3RlbSBjb2RlLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBmaWxlIG9wZXJhdGlvbnMuIEknbSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gYGZzL2ZpbGUuY2AsIGFuZCBJIHN1c3BlY3QgdGhhdCBsaW5lIDg5MCBvciB0aGVyZWFib3V0cyBtaWdodCBjb250YWluIHRoZSBjcnVjaWFsIGNsdWUuIEknbGwgbmVlZCB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NzcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMTozNTo0Ny41NDk3MTg5OTlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZmlsZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg4NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg4NTpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2ZmlsZXMtXFx1MDAzZWZpbGVfbG9jayk7XFxuIDg4NjpcXHRcXG4gODg3OlxcdFxcdHJldHVybiBmaWxlO1xcbiA4ODg6XFx0fVxcbiA4ODk6XFx0XFxuIDg5MDpcXHR2b2lkIGRvX2Nsb3NlX29uX2V4ZWMoc3RydWN0IGZpbGVzX3N0cnVjdCAqZmlsZXMpXFxuIDg5MTpcXHR7XFxuIDg5MjpcXHRcXHR1bnNpZ25lZCBpO1xcbiA4OTM6XFx0XFx0c3RydWN0IGZkdGFibGUgKmZkdDtcXG4gODk0OlxcdFxcbiA4OTU6XFx0XFx0LyogZXhlYyB1bnNoYXJlcyBmaXJzdCAqL1xcbiA4OTY6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZmaWxlcy1cXHUwMDNlZmlsZV9sb2NrKTtcXG4gODk3OlxcdFxcdGZvciAoaSA9IDA7IDsgaSsrKSB7XFxuIDg5ODpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHNldDtcXG4gODk5OlxcdFxcdFxcdHVuc2lnbmVkIGZkID0gaSAqIEJJVFNfUEVSX0xPTkc7XFxuIDkwMDpcXHRcXHRcXHRmZHQgPSBmaWxlc19mZHRhYmxlKGZpbGVzKTtcXG4gOTAxOlxcdFxcdFxcdGlmIChmZCBcXHUwMDNlPSBmZHQtXFx1MDAzZW1heF9mZHMpXFxuIDkwMjpcXHRcXHRcXHRcXHRicmVhaztcXG4gOTAzOlxcdFxcdFxcdHNldCA9IGZkdC1cXHUwMDNlY2xvc2Vfb25fZXhlY1tpXTtcXG4gOTA0OlxcdFxcdFxcdGlmICghc2V0KVxcbiA5MDU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDkwNjpcXHRcXHRcXHRmZHQtXFx1MDAzZWNsb3NlX29uX2V4ZWNbaV0gPSAwO1xcbiA5MDc6XFx0XFx0XFx0Zm9yICggOyBzZXQgOyBmZCsrLCBzZXQgXFx1MDAzZVxcdTAwM2U9IDEpIHtcXG4gOTA4OlxcdFxcdFxcdFxcdHN0cnVjdCBmaWxlICpmaWxlO1xcbiA5MDk6XFx0XFx0XFx0XFx0aWYgKCEoc2V0IFxcdTAwMjYgMSkpXFxuIDkxMDpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gOTExOlxcdFxcdFxcdFxcdGZpbGUgPSBmZHQtXFx1MDAzZWZkW2ZkXTtcXG4gOTEyOlxcdFxcdFxcdFxcdGlmICghZmlsZSlcXG4gOTEzOlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA5MTQ6XFx0XFx0XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKGZkdC1cXHUwMDNlZmRbZmRdLCBOVUxMKTtcXG4gOTE1OlxcdFxcdFxcdFxcdF9fcHV0X3VudXNlZF9mZChmaWxlcywgZmQpO1xcbiA5MTY6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmZpbGVzLVxcdTAwM2VmaWxlX2xvY2spO1xcbiA5MTc6XFx0XFx0XFx0XFx0ZmlscF9jbG9zZShmaWxlLCBmaWxlcyk7XFxuIDkxODpcXHRcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gOTE5OlxcdFxcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2ZmlsZXMtXFx1MDAzZWZpbGVfbG9jayk7XFxuIDkyMDpcXHRcXHRcXHR9XFxuIDkyMTpcXHRcXG4gOTIyOlxcdFxcdH1cXG4gOTIzOlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZmaWxlcy1cXHUwMDNlZmlsZV9sb2NrKTtcXG4gOTI0OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MzU6NDcuNTQ5ODEzMDU5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2MTQ1ODM3NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipBbmFseXppbmcgUG90ZW50aWFsIEZhaWx1cmUgUG9pbnRzIGluIGBiZWdpbl9uZXdfZXhlY2AqKlxuXG5SaWdodCwgSSdtIGRpdmluZyBpbnRvIGBiZWdpbl9uZXdfZXhlY2AgYW5kIHRoaW5raW5nIGFib3V0IGl0cyByZXNpbGllbmNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhbGwgdGhlIHBvdGVudGlhbCBmYWlsdXJlIHBvaW50cyBhbmQgaG93IHRoZSBjb2RlIGhhbmRsZXMgdGhlbSwgZXNwZWNpYWxseSB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBmdW5jdGlvbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBmYWlsdXJlIG1vZGVzIHJlbGF0ZWQgdG8gYHNldF9tbV9leGVfZmlsZSgpYCBhbmQgYGV4ZWNfbW1hcCgpYC4gSWYgZWl0aGVyIG9mIHRob3NlIGZhaWxzLCBJIHNlZSB0aGF0IHRoZSBjb2RlIGJyYW5jaGVzIHRvIGBnb3RvIG91dDtgIG9yIGBnb3RvIG91dF91bmxvY2s7YC4gVGhhdCdzIHRoZSBtYWluIHBhdGggSSBuZWVkIHRvIHNjcnV0aW5pemUg4oCTIHRoZSBlcnJvciBoYW5kbGluZyBpcyBjcml0aWNhbCBoZXJlLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhvc2UgZXJyb3IgcGF0aHMgYXJlIGNsZWFuLCB0aGF0IHJlc291cmNlcyBhcmUgcHJvcGVybHkgcmVsZWFzZWQsIGFuZCB0aGF0IHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyBhcmUgYXBwcm9wcmlhdGVseSBub3RpZmllZCBvZiB0aGUgcHJvYmxlbS4gVGltZSB0byBkaWcgZGVlcGVyIGludG8gdGhlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGlzIGZ1bmN0aW9uIGFuZCBtYWtlIHN1cmUgd2UgaGF2ZSBhIHJvYnVzdCBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzOTcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjM1OjUwLjE2NDM5OTg2OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTAyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXhlYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyNjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyNjA6XFx0XFx0cGVyZl9ldmVudF9leGVjKCk7XFxuMTI2MTpcXHRcXG4xMjYyOlxcdFxcdC8qXFxuMTI2MzpcXHRcXHQgKiBJZiB0aGUgb3JpZ2luYWwgZmlsZW5hbWUgd2FzIGVtcHR5LCBhbGxvY19icHJtKCkgbWFkZSB1cCBhIHBhdGhcXG4xMjY0OlxcdFxcdCAqIHRoYXQgd2lsbCBwcm9iYWJseSBub3QgYmUgdXNlZnVsIHRvIGFkbWlucyBydW5uaW5nIHBzIG9yIHNpbWlsYXIuXFxuMTI2NTpcXHRcXHQgKiBMZXQncyBmaXggaXQgdXAgdG8gYmUgc29tZXRoaW5nIHJlYXNvbmFibGUuXFxuMTI2NjpcXHRcXHQgKi9cXG4xMjY3OlxcdFxcdGlmIChicHJtLVxcdTAwM2Vjb21tX2Zyb21fZGVudHJ5KSB7XFxuMTI2ODpcXHRcXHRcXHRzdHJ1Y3QgZmlsZSAqY29tbV9maWxlID0gYnBybV9pZGVudGl0eV9maWxlKGJwcm0pO1xcbjEyNjk6XFx0XFxuMTI3MDpcXHRcXHRcXHQvKlxcbjEyNzE6XFx0XFx0XFx0ICogSG9sZCBSQ1UgbG9jayB0byBrZWVwIHRoZSBuYW1lIGZyb20gYmVpbmcgZnJlZWQgYmVoaW5kIG91ciBiYWNrLlxcbjEyNzI6XFx0XFx0XFx0ICogVXNlIGFjcXVpcmUgc2VtYW50aWNzIHRvIG1ha2Ugc3VyZSB0aGUgdGVybWluYXRpbmcgTlVMIGZyb21cXG4xMjczOlxcdFxcdFxcdCAqIF9fZF9hbGxvYygpIGlzIHNlZW4uXFxuMTI3NDpcXHRcXHRcXHQgKlxcbjEyNzU6XFx0XFx0XFx0ICogTm90ZSwgd2UncmUgZGVsaWJlcmF0ZWx5IHNsb3BweSBoZXJlLiBXZSBkb24ndCBuZWVkIHRvIGNhcmUgYWJvdXRcXG4xMjc2OlxcdFxcdFxcdCAqIGRldGVjdGluZyBhIGNvbmN1cnJlbnQgcmVuYW1lIGFuZCBqdXN0IHdhbnQgYSB0ZXJtaW5hdGVkIG5hbWUuXFxuMTI3NzpcXHRcXHRcXHQgKi9cXG4xMjc4OlxcdFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4xMjc5OlxcdFxcdFxcdF9fc2V0X3Rhc2tfY29tbShtZSwgc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2Y29tbV9maWxlLVxcdTAwM2VmX3BhdGguZGVudHJ5LVxcdTAwM2VkX25hbWUubmFtZSksXFxuMTI4MDpcXHRcXHRcXHRcXHRcXHR0cnVlKTtcXG4xMjgxOlxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjEyODI6XFx0XFx0fSBlbHNlIHtcXG4xMjgzOlxcdFxcdFxcdF9fc2V0X3Rhc2tfY29tbShtZSwga2Jhc2VuYW1lKGJwcm0tXFx1MDAzZWZpbGVuYW1lKSwgdHJ1ZSk7XFxuMTI4NDpcXHRcXHR9XFxuMTI4NTpcXHRcXG4xMjg2OlxcdFxcdC8qIEFuIGV4ZWMgY2hhbmdlcyBvdXIgZG9tYWluLiBXZSBhcmUgbm8gbG9uZ2VyIHBhcnQgb2YgdGhlIHRocmVhZFxcbjEyODc6XFx0XFx0ICAgZ3JvdXAgKi9cXG4xMjg4OlxcdFxcdFdSSVRFX09OQ0UobWUtXFx1MDAzZXNlbGZfZXhlY19pZCwgbWUtXFx1MDAzZXNlbGZfZXhlY19pZCArIDEpO1xcbjEyODk6XFx0XFx0Zmx1c2hfc2lnbmFsX2hhbmRsZXJzKG1lLCAwKTtcXG4xMjkwOlxcdFxcbjEyOTE6XFx0XFx0cmV0dmFsID0gc2V0X2NyZWRfdWNvdW50cyhicHJtLVxcdTAwM2VjcmVkKTtcXG4xMjkyOlxcdFxcdGlmIChyZXR2YWwgXFx1MDAzYyAwKVxcbjEyOTM6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjEyOTQ6XFx0XFxuMTI5NTpcXHRcXHQvKlxcbjEyOTY6XFx0XFx0ICogaW5zdGFsbCB0aGUgbmV3IGNyZWRlbnRpYWxzIGZvciB0aGlzIGV4ZWN1dGFibGVcXG4xMjk3OlxcdFxcdCAqL1xcbjEyOTg6XFx0XFx0c2VjdXJpdHlfYnBybV9jb21taXR0aW5nX2NyZWRzKGJwcm0pO1xcbjEyOTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjM1OjUwLjE2NDU5Mzk0OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzk5MzQ2MDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0LlxuXG4qKkRlY29uc3RydWN0aW5nIGBiZWdpbl9uZXdfZXhlY2AgLSBBIERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIGBiZWdpbl9uZXdfZXhlY2AuIEkgbmVlZCB0byByZWFsbHkgdW5kZXJzdGFuZCBob3cgaXQncyBmdW5jdGlvbmluZyBhcyBpdCdzIHRoZSBjb3JlIG9mIGhvdyB3ZSBraWNrIG9mZiBhIG5ldyBleGVjdXRpb24gY29udGV4dC4gSSdtIGZvY3VzaW5nIG9uIHRoZSAqcmVzdCogb2YgdGhlIGZ1bmN0aW9uLCBiZWNhdXNlIHRoZSBpbml0aWFsIHBhcnRzIGFyZSBwcm9iYWJseSBib2lsZXJwbGF0ZSBvciB3ZWxsIHVuZGVyc3Rvb2QgYWxyZWFkeS4gSSB3YW50IHRvIHNlZSB0aGUgbWVhdC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBpbnRyaWNhY2llcy4gU3BlY2lmaWNhbGx5LCBob3cgaXQgaGFuZGxlcyBzZXR1cCwgcmVzb3VyY2UgYWxsb2NhdGlvbiwgYW55IG5lY2Vzc2FyeSBpbml0aWFsaXphdGlvbiwgYW5kIG1vc3QgaW1wb3J0YW50bHksIHdoZXJlIHRoZSBjb250cm9sIGZsb3cgaGFuZHMgb3ZlciB0aGUgZXhlY3V0aW9uIHRvIHNvbWV0aGluZyBlbHNlLiBJJ20gYXNzdW1pbmcgdGhhdCBpdCBpcyByZXNwb25zaWJsZSBmb3IgcHJlcGFyaW5nIGFuIGVudmlyb25tZW50LCBwZXJoYXBzIHNldHRpbmcgdXAgbWVtb3J5IHNwYWNlcywgdGhyZWFkcywgc2lnbmFsIGhhbmRsZXJzLCBhbmQgdGhlbiBwYXNzaW5nIHRoZSBiYXRvbi4gTXkgZ29hbCBpcyB0byBncmFzcCB0aGUgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucywgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGJ1Z3MgbHVya2luZyBpbiB0aGUgc2hhZG93cy4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIHByb3ZpZGUgdGhlIFwiZ2VuZXNpc1wiIHRvIGEgbmV3IHRocmVhZCBvciBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzIxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMTozNTo1Mi41NjM5NDM1OTRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4ZWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzAwOlxcdFxcdGNvbW1pdF9jcmVkcyhicHJtLVxcdTAwM2VjcmVkKTtcXG4xMzAxOlxcdFxcdGJwcm0tXFx1MDAzZWNyZWQgPSBOVUxMO1xcbjEzMDI6XFx0XFxuMTMwMzpcXHRcXHQvKlxcbjEzMDQ6XFx0XFx0ICogRGlzYWJsZSBtb25pdG9yaW5nIGZvciByZWd1bGFyIHVzZXJzXFxuMTMwNTpcXHRcXHQgKiB3aGVuIGV4ZWN1dGluZyBzZXR1aWQgYmluYXJpZXMuIE11c3RcXG4xMzA2OlxcdFxcdCAqIHdhaXQgdW50aWwgbmV3IGNyZWRlbnRpYWxzIGFyZSBjb21taXR0ZWRcXG4xMzA3OlxcdFxcdCAqIGJ5IGNvbW1pdF9jcmVkcygpIGFib3ZlXFxuMTMwODpcXHRcXHQgKi9cXG4xMzA5OlxcdFxcdGlmICh0YXNrX2V4ZWNfc3RhdGVfZ2V0X2R1bXBhYmxlKG1lKSAhPSBUQVNLX0RVTVBBQkxFX09XTkVSKVxcbjEzMTA6XFx0XFx0XFx0cGVyZl9ldmVudF9leGl0X3Rhc2sobWUpO1xcbjEzMTE6XFx0XFx0LypcXG4xMzEyOlxcdFxcdCAqIGNyZWRfZ3VhcmRfbXV0ZXggbXVzdCBiZSBoZWxkIGF0IGxlYXN0IHRvIHRoaXMgcG9pbnQgdG8gcHJldmVudFxcbjEzMTM6XFx0XFx0ICogcHRyYWNlX2F0dGFjaCgpIGZyb20gYWx0ZXJpbmcgb3VyIGRldGVybWluYXRpb24gb2YgdGhlIHRhc2snc1xcbjEzMTQ6XFx0XFx0ICogY3JlZGVudGlhbHM7IGFueSB0aW1lIGFmdGVyIHRoaXMgaXQgbWF5IGJlIHVubG9ja2VkLlxcbjEzMTU6XFx0XFx0ICovXFxuMTMxNjpcXHRcXHRzZWN1cml0eV9icHJtX2NvbW1pdHRlZF9jcmVkcyhicHJtKTtcXG4xMzE3OlxcdFxcbjEzMTg6XFx0XFx0LyogUGFzcyB0aGUgb3BlbmVkIGJpbmFyeSB0byB0aGUgaW50ZXJwcmV0ZXIuICovXFxuMTMxOTpcXHRcXHRpZiAoYnBybS1cXHUwMDNlaGF2ZV9leGVjZmQpIHtcXG4xMzIwOlxcdFxcdFxcdHN0cnVjdCBmaWxlICpleGVjdXRhYmxlID0gYnBybS1cXHUwMDNlZXhlY3V0YWJsZTtcXG4xMzIxOlxcdFxcbjEzMjI6XFx0XFx0XFx0LyogbW0tXFx1MDAzZWV4ZV9maWxlIGNhcnJpZXMgaXRzIG93biB3cml0ZSBkZW5pYWwgbm93IHNvIGRyb3AgaXQuICovXFxuMTMyMzpcXHRcXHRcXHRleGVfZmlsZV9hbGxvd193cml0ZV9hY2Nlc3MoZXhlY3V0YWJsZSk7XFxuMTMyNDpcXHRcXHRcXHRicHJtLVxcdTAwM2VleGVjdXRhYmxlID0gTlVMTDtcXG4xMzI1OlxcdFxcdFxcdHJldHZhbCA9IEZEX0FERCgwLCBleGVjdXRhYmxlKTtcXG4xMzI2OlxcdFxcdFxcdGlmIChyZXR2YWwgXFx1MDAzYyAwKSB7XFxuMTMyNzpcXHRcXHRcXHRcXHQvKiBUaGUgcmVmZXJlbmNlIHdhcyBub3QgY29uc3VtZWQuICovXFxuMTMyODpcXHRcXHRcXHRcXHRmcHV0KGV4ZWN1dGFibGUpO1xcbjEzMjk6XFx0XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjEzMzA6XFx0XFx0XFx0fVxcbjEzMzE6XFx0XFx0XFx0YnBybS1cXHUwMDNlZXhlY2ZkID0gcmV0dmFsO1xcbjEzMzI6XFx0XFx0fVxcbjEzMzM6XFx0XFx0cmV0dXJuIDA7XFxuMTMzNDpcXHRcXG4xMzM1OlxcdG91dF91bmxvY2s6XFxuMTMzNjpcXHRcXHR1cF93cml0ZShcXHUwMDI2bWUtXFx1MDAzZXNpZ25hbC1cXHUwMDNlZXhlY191cGRhdGVfbG9jayk7XFxuMTMzNzpcXHRcXHRpZiAoIWJwcm0tXFx1MDAzZWNyZWQpXFxuMTMzODpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1lLVxcdTAwM2VzaWduYWwtXFx1MDAzZWNyZWRfZ3VhcmRfbXV0ZXgpO1xcbjEzMzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjM1OjUyLjU2NDEyODc5NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDYyMzQzMjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkuIExldCdzIGRpdmUgaW4uXG5cbioqQW5hbHl6aW5nIExpbmVzIDEzNDAtMTM2MCoqXG5cbkFscmlnaHQsIGxldCdzIHB1bGwgdXAgbGluZXMgMTM0MC0xMzYwLiBCYXNlZCBvbiBteSBleGlzdGluZyBrbm93bGVkZ2Ugb2YgdGhlIGZpZWxkLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgc2VjdGlvbiBhZGRyZXNzZXMgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgcGllY2UsIGFuZCB3aGF0IHRoZSBrZXkgYXJndW1lbnRzIG9yIGZpbmRpbmdzIGFyZS4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgY2VudHJhbCB0aGVzaXMgb2YgdGhpcyBzZWN0aW9uLCBhbnkgc3VwcG9ydGluZyBldmlkZW5jZSBwcmVzZW50ZWQsIGFuZCBob3cgaXQgY29ubmVjdHMgdG8gdGhlIGJyb2FkZXIgdG9waWMuIElzIHRoaXMgYSBjcml0aWNhbCB0dXJuaW5nIHBvaW50PyBEb2VzIHRoaXMgc2VjdGlvbiBhZGQgbnVhbmNlIHRvIGEgcHJldmlvdXMgYXJndW1lbnQ/IFBlcmhhcHMgaXQgaW50cm9kdWNlcyBhIG5ldyB2YXJpYWJsZSB0aGF0IHdpbGwgY2hhbmdlIHdoYXQgSSBuZWVkIHRvIGNvbnNpZGVyPyBJJ2xsIG5lZWQgdG8gZGlzc2VjdCB0aGUgc3BlY2lmaWNzLCBpZGVudGlmeWluZyB0aGUga2V5IGNvbmNlcHRzIGFuZCBqYXJnb24gdXNlZCwgYW5kIHdoZXRoZXIgdGhlIGxhbmd1YWdlIGlzIHByZWNpc2UgYW5kIHJpZ29yb3VzLiBJJ20gbG9va2luZyBmb3IgYW55IHdlYWtuZXNzZXMgaW4gdGhlIGxvZ2ljLCBhbnkgYXNzdW1wdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGNoYWxsZW5nZWQsIGFuZCBhbnkgb3Bwb3J0dW5pdGllcyB0byBleHRlbmQgb3IgYnVpbGQgdXBvbiB0aGUgaWRlYXMgcHJlc2VudGVkLiBJJ2xsIGJlIGNyaXRpY2FsbHkgZXZhbHVhdGluZywgcXVlc3Rpb25pbmcsIGFuZCBjb25uZWN0aW5nLiBBbmQgZmluYWxseSwgSSdsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNvbm5lY3RzIHRvIHByaW9yIGRpc2N1c3Npb25zIHRoYXQgSSdtIGF3YXJlIG9mIGluIHRoZSBsYXJnZXIgZmllbGQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxOTcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjM1OjU0LjYyNjQ3NDk3MloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzA1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXhlYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzNDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzNDA6XFx0b3V0OlxcbjEzNDE6XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4xMzQyOlxcdH1cXG4xMzQzOlxcdEVYUE9SVF9TWU1CT0woYmVnaW5fbmV3X2V4ZWMpO1xcbjEzNDQ6XFx0XFxuMTM0NTpcXHR2b2lkIHdvdWxkX2R1bXAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuMTM0NjpcXHR7XFxuMTM0NzpcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcXG4xMzQ4OlxcdFxcdHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwID0gZmlsZV9tbnRfaWRtYXAoZmlsZSk7XFxuMTM0OTpcXHRcXHRpZiAoaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIE1BWV9SRUFEKSBcXHUwMDNjIDApIHtcXG4xMzUwOlxcdFxcdFxcdHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqb2xkLCAqdXNlcl9ucztcXG4xMzUxOlxcdFxcdFxcdGJwcm0tXFx1MDAzZWludGVycF9mbGFncyB8PSBCSU5QUk1fRkxBR1NfRU5GT1JDRV9OT05EVU1QO1xcbjEzNTI6XFx0XFxuMTM1MzpcXHRcXHRcXHQvKiBFbnN1cmUgYnBybS1cXHUwMDNldXNlcl9ucyBjb250YWlucyB0aGUgZXhlY3V0YWJsZS4gKi9cXG4xMzU0OlxcdFxcdFxcdHVzZXJfbnMgPSBvbGQgPSBicHJtLVxcdTAwM2V1c2VyX25zO1xcbjEzNTU6XFx0XFx0XFx0d2hpbGUgKCh1c2VyX25zICE9IFxcdTAwMjZpbml0X3VzZXJfbnMpIFxcdTAwMjZcXHUwMDI2XFxuMTM1NjpcXHRcXHRcXHQgICAgICAgIXByaXZpbGVnZWRfd3J0X2lub2RlX3VpZGdpZCh1c2VyX25zLCBpZG1hcCwgaW5vZGUpKVxcbjEzNTc6XFx0XFx0XFx0XFx0dXNlcl9ucyA9IHVzZXJfbnMtXFx1MDAzZXBhcmVudDtcXG4xMzU4OlxcdFxcbjEzNTk6XFx0XFx0XFx0aWYgKG9sZCAhPSB1c2VyX25zKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjM1OjU0LjYyNjYwNjk4MloiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTIxMTg5Mjk3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgS2VybmVsIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgb2YgdGhpcyBwYXRjaCBpbnZvbHZlcyBhIHJlLW9yZGVyaW5nIHdpdGhpbiB0aGUgYGJlZ2luX25ld19leGVjKHN0cnVjdCBsaW51eF9iaW5wcm0gKiBicHJtKWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgaXQgc2hpZnRzIHRoZSBjYWxsIHRvIGBkb19jbG9zZV9vbl9leGVjKG1lLVx1MDAzZWZpbGVzKWAgZWFybGllciBpbiB0aGUgZXhlY3V0aW9uIGZsb3cuIEN1cnJlbnRseSwgaXQncyBydW4gYmVmb3JlIHNldmVyYWwgaW1wb3J0YW50IHN0ZXBzIGluIGBiZWdpbl9uZXdfZXhlY2AsIGxpa2UgYHNldF9tbV9leGVfZmlsZSgpYCwgYHdvdWxkX2R1bXAoKWAsIGFuZCB0aGUgY3JpdGljYWwgYGV4ZWNfbW1hcChicHJtKWAgY2FsbCwgd2hpY2gsIGNydWNpYWxseSwgYWNxdWlyZXMgdGhlIGBleGVjX3VwZGF0ZV9sb2NrYC4gQmVmb3JlIHRoZSBwYXRjaCwgaXQgd2FzIGxvY2F0ZWQgYWZ0ZXIgYGNsZWFyX3N5c2NhbGxfd29ya19zeXNjYWxsX3VzZXJfZGlzcGF0Y2gobWUpO2AgaW5zaWRlIHRoZSBjcml0aWNhbCByZWdpb24uXG5cblRoZSBjb3JlIHJlYXNvbiBmb3IgdGhpcyBjaGFuZ2Ugc2VlbXMgdG8gYmUgdG8gYWRkcmVzcyBwb3RlbnRpYWwgbG9ja2luZyBpc3N1ZXMgYW5kLCBzcGVjaWZpY2FsbHksIGRlYWRsb2NrIGNvbmRpdGlvbnMuIFRoZSBgZG9fY2xvc2Vfb25fZXhlY2Agb3BlcmF0aW9uIGNhbiBwb3RlbnRpYWxseSBibG9jaywgcGFydGljdWxhcmx5IHdoZW4gZGVhbGluZyB3aXRoIGZpbGVzeXN0ZW0gZmx1c2ggaGFuZGxlcnMgKGxpa2UgdGhvc2UgaW4gRlVTRSBkYWVtb25zKS4gSWYgdGhpcyBibG9ja2luZyB3ZXJlIHRvIGhhcHBlbiAqd2hpbGUqIGhvbGRpbmcgdGhlIGBleGVjX3VwZGF0ZV9sb2NrYCBhY3F1aXJlZCBieSBgZXhlY19tbWFwKClgLCBpdCBjcmVhdGVzIGEgZGVhZGxvY2sgcmlzay4gVGhpcyByZW9yZGVyaW5nIG1vdmVzIHRoZSBgY2xvc2Vfb25fZXhlY2Agb3BlcmF0aW9uIHRvIGhhcHBlbiBiZWZvcmUgYGV4ZWNfbW1hcGAgYWNxdWlyZXMgdGhlIGxvY2ssIHdoaWNoIGVmZmVjdGl2ZWx5IHJlZHVjZXMgdGhlIHdpbmRvdyBmb3IgcG90ZW50aWFsIGRlYWRsb2Nrcy4gQWxzbywgbW92aW5nIGl0IGVhcmxpZXIgZW5zdXJlcyBgY2xvc2Vfb25fZXhlY2AgZmlsZXMgYXJlIGNsb3NlZCBiZWZvcmUgbW9kaWZ5aW5nIGR1bXBhYmlsaXR5L21tYXAuXG5cbk5vdywgdGhlIGltcG9ydGFudCBwYXJ0LiBNeSBtYWluIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IG1lbW9yeS1yZWxhdGVkIHZ1bG5lcmFiaWxpdGllcy4gSSd2ZSBjb25zaWRlcmVkIGFsbCB0aGUgcG90ZW50aWFsIHBpdGZhbGxzOlxuXG4xLiAgKipVbmluaXRpYWxpemVkIGRhdGEgYmVpbmcgZXhwb3NlZCB0byB1c2VyIHNwYWNlPyoqIE5vLCB0aGVyZSBhcmUgbm8gY2hhbmdlcyB0byBhbnkgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlIHZpYSBjb3B5IG9wZXJhdGlvbnMsIG9yIGFueSB1bmluaXRpYWxpemVkIGZpZWxkcy5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIEkgc2VlIG5vIG5ldyBjb25kaXRpb25hbCBsb2dpYyB0aGF0IHJlbGllcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuXG4zLiAgKipVbmluaXRpYWxpemVkIGZpZWxkcyBpbiBuZXdseSBhbGxvY2F0ZWQgZGF0YSBzdHJ1Y3R1cmVzPyoqIFRoaXMgaXMgYW5vdGhlciBjb25jZXJuIEkgaGF2ZSwgYW5kIEkgZG9uJ3Qgc2VlIGFueSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBiZWluZyBhbGxvY2F0ZWQgb3IgaW5pdGlhbGl6ZWQgaW4gYSB3YXkgdGhhdCBjb3VsZCBsZWFkIHRvIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxhdGVyLlxuNC4gICoqQm91bmRzIGNoZWNrcyBvciBidWZmZXIgbWFuaXB1bGF0aW9uIGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSBhY2Nlc3M/KiogTm8uIEkgZG9uJ3Qgc2VlIGFueSBtb2RpZmljYXRpb25zIHRvIGJvdW5kcyBjaGVja3MgdGhhdCBjb3VsZCByZXN1bHQgaW4gdW5pbml0aWFsaXplZCBieXRlIHJlYWRzLCBvciBjaGFuZ2VzIGluIGxvZ2ljIHJlbGF0ZWQgdG8gYWNjZXNzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIGZyb20gYW4gKnVuaW5pdGlhbGl6ZWQgbWVtb3J5KiBwZXJzcGVjdGl2ZS4gVGhlcmUgYXJlIG5vIGFsbG9jYXRpb25zLCBjb3BpZXMsIG9yIGV4cG9zdXJlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIHJpc2tzIGhlcmUgYXJlIG5vdCBhYm91dCBtZW1vcnkgKmNvbnRlbnQqLCBidXQgYWJvdXQgbG9jayBvcmRlciwgb2JqZWN0IGxpZmV0aW1lcywgYW5kIHBvdGVudGlhbGx5IGluY29ycmVjdCBlcnJvciBoYW5kbGluZy4gVGhlIHN0YW5kYXJkIGRldGVjdG9ycyBmb3IgdGhlc2Uga2luZHMgb2YgcHJvYmxlbXMsIGxpa2UgTE9DS0RFUCBhbmQgS0FTQU4sIGFyZSBwZXJmZWN0bHkgYWRlcXVhdGUgdG8gY2F0Y2ggYW55IGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IHRoZSBjaGFuZ2UgaW4gbG9ja2luZyBvcmRlci4gS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIgKEtNU0FOKSBpcyBub3QgbmVlZGVkIGJlY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgbm90IHRoZSBwcm9ibGVtIGhlcmUuIEl0J3MgdGhlIG9yZGVyIGFuZCBpbnRlcmFjdGlvbnMgb2YgbG9ja3MsIHdoaWNoIGFyZSBiZXR0ZXIgaWRlbnRpZmllZCBieSB0aGUgc2FuaXRpemVycyBmb3IgdGhvc2Ugc3BlY2lmaWMgY29uY2VybnMuXG5cblNvLCB0aGUgcmVhc29uaW5nIGlzIGNsZWFyOiB0aGUgcGF0Y2ggbW92ZXMgYGRvX2Nsb3NlX29uX2V4ZWNgIGVhcmxpZXIgdG8gYXZvaWQgZGVhZGxvY2tzLCBhbmQgaXQgZG9lcyBub3QgYWZmZWN0IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIFdlIHNob3VsZCBiZSBnb29kIHRvIGdvLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODM3LCJPdXRwdXRUb2tlbnMiOjE5OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjM2OjA1LjgzODUwMjYwMVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgdGhlIGludm9jYXRpb24gb2YgYGRvX2Nsb3NlX29uX2V4ZWMobWUtXFx1MDAzZWZpbGVzKWAgZWFybGllciBpbiBgYmVnaW5fbmV3X2V4ZWMoKWAsIHBsYWNpbmcgaXQgYmVmb3JlIGBzZXRfbW1fZXhlX2ZpbGUoKWAgYW5kIGBleGVjX21tYXAoKWAuIFRoaXMgYXZvaWRzIGhvbGRpbmcgYGV4ZWNfdXBkYXRlX2xvY2tgIHdoaWxlIGZpbGVzeXN0ZW0gYC1cXHUwMDNlZmx1c2goKWAgaGFuZGxlcnMgKHN1Y2ggYXMgRlVTRSkgcnVuIGR1cmluZyBgZmlscF9jbG9zZSgpYCwgcmVzb2x2aW5nIHBvdGVudGlhbCBsb2NraW5nL2RlYWRsb2NrIGFuZCBjb25jdXJyZW5jeSBpc3N1ZXMuXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgY29udHJvbCBmbG93IGFuZCBsb2NrIG9yZGVyaW5nIGFkanVzdG1lbnQgd2l0aGluIHByb2Nlc3MgZXhlY3V0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIGFsbG9jYXRlLCBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdGFjay9oZWFwIGJ1ZmZlcnMsIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBBbnkgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGxvY2tpbmcgb3IgZmlsZSBkZXNjcmlwdG9yIHJlZmVyZW5jZSBsaWZlY3ljbGVzIGFyZSBtb25pdG9yZWQgYnkgTE9DS0RFUCBhbmQgc3RhbmRhcmQgS0FTQU4gYnVpbGRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgdGhlIGludm9jYXRpb24gb2YgYGRvX2Nsb3NlX29uX2V4ZWMobWUtXFx1MDAzZWZpbGVzKWAgZWFybGllciBpbiBgYmVnaW5fbmV3X2V4ZWMoKWAsIHBsYWNpbmcgaXQgYmVmb3JlIGBzZXRfbW1fZXhlX2ZpbGUoKWAgYW5kIGBleGVjX21tYXAoKWAuIFRoaXMgYXZvaWRzIGhvbGRpbmcgYGV4ZWNfdXBkYXRlX2xvY2tgIHdoaWxlIGZpbGVzeXN0ZW0gYC1cXHUwMDNlZmx1c2goKWAgaGFuZGxlcnMgKHN1Y2ggYXMgRlVTRSkgcnVuIGR1cmluZyBgZmlscF9jbG9zZSgpYCwgcmVzb2x2aW5nIHBvdGVudGlhbCBsb2NraW5nL2RlYWRsb2NrIGFuZCBjb25jdXJyZW5jeSBpc3N1ZXMuXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgY29udHJvbCBmbG93IGFuZCBsb2NrIG9yZGVyaW5nIGFkanVzdG1lbnQgd2l0aGluIHByb2Nlc3MgZXhlY3V0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIGFsbG9jYXRlLCBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdGFjay9oZWFwIGJ1ZmZlcnMsIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBBbnkgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGxvY2tpbmcgb3IgZmlsZSBkZXNjcmlwdG9yIHJlZmVyZW5jZSBsaWZlY3ljbGVzIGFyZSBtb25pdG9yZWQgYnkgTE9DS0RFUCBhbmQgc3RhbmRhcmQgS0FTQU4gYnVpbGRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowthkmb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 01:32:51 +0000 UTC FinishedAt: 2026-09-08 01:36:06 +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": "73ae59e975966d24e32926247ddb45a537ebe184", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "73ae59e975966d24e32926247ddb45a537ebe184", "config_name": "upstream-apparmor-kasan.config", "series_id": "f9097de5-06f0-401d-820f-7969cfbbc75c" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "begin_new_exec", "do_close_on_exec" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjM0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmVnaW5fbmV3X2V4ZWMmIzM0OywKICAgICYjMzQ7ZG9fY2xvc2Vfb25fZXhlYyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIHRoZSBpbnZvY2F0aW9uIG9mIGBkb19jbG9zZV9vbl9leGVjKG1lLVx1MDAzZWZpbGVzKWAgZWFybGllciBpbiBgYmVnaW5fbmV3X2V4ZWMoKWAsIHBsYWNpbmcgaXQgYmVmb3JlIGBzZXRfbW1fZXhlX2ZpbGUoKWAgYW5kIGBleGVjX21tYXAoKWAuIFRoaXMgYXZvaWRzIGhvbGRpbmcgYGV4ZWNfdXBkYXRlX2xvY2tgIHdoaWxlIGZpbGVzeXN0ZW0gYC1cdTAwM2VmbHVzaCgpYCBoYW5kbGVycyAoc3VjaCBhcyBGVVNFKSBydW4gZHVyaW5nIGBmaWxwX2Nsb3NlKClgLCByZXNvbHZpbmcgcG90ZW50aWFsIGxvY2tpbmcvZGVhZGxvY2sgYW5kIGNvbmN1cnJlbmN5IGlzc3Vlcy5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgY29udHJvbCBmbG93IGFuZCBsb2NrIG9yZGVyaW5nIGFkanVzdG1lbnQgd2l0aGluIHByb2Nlc3MgZXhlY3V0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIGFsbG9jYXRlLCBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdGFjay9oZWFwIGJ1ZmZlcnMsIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBBbnkgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGxvY2tpbmcgb3IgZmlsZSBkZXNjcmlwdG9yIHJlZmVyZW5jZSBsaWZlY3ljbGVzIGFyZSBtb25pdG9yZWQgYnkgTE9DS0RFUCBhbmQgc3RhbmRhcmQgS0FTQU4gYnVpbGRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgZXhlY3ZlIGxvZ2ljIGluIGJlZ2luX25ld19leGVjKCkgKGZzL2V4ZWMuYyksIG1vdmluZyB0aGUgaW52b2NhdGlvbiBvZiBkb19jbG9zZV9vbl9leGVjKCkgYmVmb3JlIGV4ZWNfbW1hcCgpIGFuZCBzZXRfbW1fZXhlX2ZpbGUoKSB0byBhdm9pZCBibG9ja2luZyBvbiBmaWxlc3lzdGVtIC1cdTAwM2VmbHVzaCgpIGhhbmRsZXJzIHdoaWxlIGhvbGRpbmcgZXhlY191cGRhdGVfbG9jay4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29udHJvbCBmbG93IGFuZCBsaWZlY3ljbGUgb3JkZXIgZHVyaW5nIHByb2dyYW0gZXhlY3V0aW9uIGluIHRoZSBjb3JlIFZGUy9leGVjIHN1YnN5c3RlbSBhbmQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMTozNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGM5MDQzZjgwZWE5ZjI3ZDc3Y2IzY2U3YjJjN2I4MDBiYmNlNTMxZTNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDAxOjM0OjU3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuY1xuaW5kZXggNzQ1ZjZlYjUyNzllNi4uYjUxZTVkN2U0NTM2NyAxMDA2NDRcbi0tLSBhL2ZzL2V4ZWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXhlYy5jXG5AQCAtMTE2NCw2ICYjNDM7MTE2NCwyMCBAQCBpbnQgYmVnaW5fbmV3X2V4ZWMoc3RydWN0IGxpbnV4X2JpbnBybSAqIGJwcm0pXG4gXHRpZiAocmV0dmFsKVxuIFx0XHRnb3RvIG91dDtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdlIGhhdmUgdG8gYXBwbHkgQ0xPRVhFQyBiZWZvcmUgd2UgY2hhbmdlIHdoZXRoZXIgdGhlIHByb2Nlc3MgaXNcbiYjNDM7XHQgKiBkdW1wYWJsZSAoaW4gc2V0dXBfbmV3X2V4ZWMpIHRvIGF2b2lkIGEgcmFjZSB3aXRoIGEgcHJvY2VzcyBpbiB1c2Vyc3BhY2VcbiYjNDM7XHQgKiB0cnlpbmcgdG8gYWNjZXNzIHRoZSBzaG91bGQtYmUtY2xvc2VkIGZpbGUgZGVzY3JpcHRvcnMgb2YgYSBwcm9jZXNzXG4mIzQzO1x0ICogdW5kZXJnb2luZyBleGVjKDIpLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogVGhpcyBjYW4gYmxvY2sgb24gZmlsZXN5c3RlbSAtXHUwMDNlZmx1c2goKSBoYW5kbGVycywgaW5jbHVkaW5nIHdhaXRpbmdcbiYjNDM7XHQgKiBmb3IgRlVTRSBkYWVtb25zLCBzbyBkbyBpdCBiZWZvcmUgZXhlY19tbWFwIHRha2VzIHRoZVxuJiM0MztcdCAqIGV4ZWNfdXBkYXRlX2xvY2suXG4mIzQzO1x0ICogVGhpcyBtdXN0IGhhcHBlbiBhZnRlciB0aGUgcG9pbnQgb2Ygbm8gcmV0dXJuLCBhbmQgYWZ0ZXIgdW5zaGFyaW5nXG4mIzQzO1x0ICogdGhlIEZEIHRhYmxlLlxuJiM0MztcdCAqL1xuJiM0MztcdGRvX2Nsb3NlX29uX2V4ZWMobWUtXHUwMDNlZmlsZXMpO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBNdXN0IGJlIGNhbGxlZCBfYmVmb3JlXyBleGVjX21tYXAoKSBhcyBicHJtLVx1MDAzZW1tIGlzXG4gXHQgKiBub3QgdmlzaWJsZSB1bnRpbCB0aGVuLiBEb2luZyBpdCBoZXJlIGFsc28gZW5zdXJlc1xuQEAgLTEyMTQsMTQgJiM0MzsxMjI4LDYgQEAgaW50IGJlZ2luX25ld19leGVjKHN0cnVjdCBsaW51eF9iaW5wcm0gKiBicHJtKVxuIFxuIFx0Y2xlYXJfc3lzY2FsbF93b3JrX3N5c2NhbGxfdXNlcl9kaXNwYXRjaChtZSk7XG4gXG4tXHQvKlxuLVx0ICogV2UgaGF2ZSB0byBhcHBseSBDTE9FWEVDIGJlZm9yZSB3ZSBjaGFuZ2Ugd2hldGhlciB0aGUgcHJvY2VzcyBpc1xuLVx0ICogZHVtcGFibGUgKGluIHNldHVwX25ld19leGVjKSB0byBhdm9pZCBhIHJhY2Ugd2l0aCBhIHByb2Nlc3MgaW4gdXNlcnNwYWNlXG4tXHQgKiB0cnlpbmcgdG8gYWNjZXNzIHRoZSBzaG91bGQtYmUtY2xvc2VkIGZpbGUgZGVzY3JpcHRvcnMgb2YgYSBwcm9jZXNzXG4tXHQgKiB1bmRlcmdvaW5nIGV4ZWMoMikuXG4tXHQgKi9cbi1cdGRvX2Nsb3NlX29uX2V4ZWMobWUtXHUwMDNlZmlsZXMpO1xuLVxuIFx0aWYgKGJwcm0tXHUwMDNlc2VjdXJlZXhlYykge1xuIFx0XHQvKiBNYWtlIHN1cmUgcGFyZW50IGNhbm5vdCBzaWduYWwgcHJpdmlsZWdlZCBwcm9jZXNzLiAqL1xuIFx0XHRtZS1cdTAwM2VwZGVhdGhfc2lnbmFsID0gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMTozNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JlZ2luX25ld19leGVjJiMzNDssCiAgICAmIzM0O2RvX2Nsb3NlX29uX2V4ZWMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBleGVjdmUgbG9naWMgaW4gYmVnaW5fbmV3X2V4ZWMoKSAoZnMvZXhlYy5jKSwgbW92aW5nIHRoZSBpbnZvY2F0aW9uIG9mIGRvX2Nsb3NlX29uX2V4ZWMoKSBiZWZvcmUgZXhlY19tbWFwKCkgYW5kIHNldF9tbV9leGVfZmlsZSgpIHRvIGF2b2lkIGJsb2NraW5nIG9uIGZpbGVzeXN0ZW0gLVx1MDAzZWZsdXNoKCkgaGFuZGxlcnMgd2hpbGUgaG9sZGluZyBleGVjX3VwZGF0ZV9sb2NrLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb250cm9sIGZsb3cgYW5kIGxpZmVjeWNsZSBvcmRlciBkdXJpbmcgcHJvZ3JhbSBleGVjdXRpb24gaW4gdGhlIGNvcmUgVkZTL2V4ZWMgc3Vic3lzdGVtIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzkwNDNmODBlYTlmMjdkNzdjYjNjZTdiMmM3YjgwMGJiY2U1MzFlMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMDE6MzQ6NTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leGVjLmMgYi9mcy9leGVjLmMKaW5kZXggNzQ1ZjZlYjUyNzllNi4uYjUxZTVkN2U0NTM2NyAxMDA2NDQKLS0tIGEvZnMvZXhlYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4ZWMuYwpAQCAtMTE2NCw2ICYjNDM7MTE2NCwyMCBAQCBpbnQgYmVnaW5fbmV3X2V4ZWMoc3RydWN0IGxpbnV4X2JpbnBybSAqIGJwcm0pCiAJaWYgKHJldHZhbCkKIAkJZ290byBvdXQ7CiAKJiM0MzsJLyoKJiM0MzsJICogV2UgaGF2ZSB0byBhcHBseSBDTE9FWEVDIGJlZm9yZSB3ZSBjaGFuZ2Ugd2hldGhlciB0aGUgcHJvY2VzcyBpcwomIzQzOwkgKiBkdW1wYWJsZSAoaW4gc2V0dXBfbmV3X2V4ZWMpIHRvIGF2b2lkIGEgcmFjZSB3aXRoIGEgcHJvY2VzcyBpbiB1c2Vyc3BhY2UKJiM0MzsJICogdHJ5aW5nIHRvIGFjY2VzcyB0aGUgc2hvdWxkLWJlLWNsb3NlZCBmaWxlIGRlc2NyaXB0b3JzIG9mIGEgcHJvY2VzcwomIzQzOwkgKiB1bmRlcmdvaW5nIGV4ZWMoMikuCiYjNDM7CSAqCiYjNDM7CSAqIFRoaXMgY2FuIGJsb2NrIG9uIGZpbGVzeXN0ZW0gLSZndDtmbHVzaCgpIGhhbmRsZXJzLCBpbmNsdWRpbmcgd2FpdGluZwomIzQzOwkgKiBmb3IgRlVTRSBkYWVtb25zLCBzbyBkbyBpdCBiZWZvcmUgZXhlY19tbWFwIHRha2VzIHRoZQomIzQzOwkgKiBleGVjX3VwZGF0ZV9sb2NrLgomIzQzOwkgKiBUaGlzIG11c3QgaGFwcGVuIGFmdGVyIHRoZSBwb2ludCBvZiBubyByZXR1cm4sIGFuZCBhZnRlciB1bnNoYXJpbmcKJiM0MzsJICogdGhlIEZEIHRhYmxlLgomIzQzOwkgKi8KJiM0MzsJZG9fY2xvc2Vfb25fZXhlYyhtZS0mZ3Q7ZmlsZXMpOwomIzQzOwogCS8qCiAJICogTXVzdCBiZSBjYWxsZWQgX2JlZm9yZV8gZXhlY19tbWFwKCkgYXMgYnBybS0mZ3Q7bW0gaXMKIAkgKiBub3QgdmlzaWJsZSB1bnRpbCB0aGVuLiBEb2luZyBpdCBoZXJlIGFsc28gZW5zdXJlcwpAQCAtMTIxNCwxNCAmIzQzOzEyMjgsNiBAQCBpbnQgYmVnaW5fbmV3X2V4ZWMoc3RydWN0IGxpbnV4X2JpbnBybSAqIGJwcm0pCiAKIAljbGVhcl9zeXNjYWxsX3dvcmtfc3lzY2FsbF91c2VyX2Rpc3BhdGNoKG1lKTsKIAotCS8qCi0JICogV2UgaGF2ZSB0byBhcHBseSBDTE9FWEVDIGJlZm9yZSB3ZSBjaGFuZ2Ugd2hldGhlciB0aGUgcHJvY2VzcyBpcwotCSAqIGR1bXBhYmxlIChpbiBzZXR1cF9uZXdfZXhlYykgdG8gYXZvaWQgYSByYWNlIHdpdGggYSBwcm9jZXNzIGluIHVzZXJzcGFjZQotCSAqIHRyeWluZyB0byBhY2Nlc3MgdGhlIHNob3VsZC1iZS1jbG9zZWQgZmlsZSBkZXNjcmlwdG9ycyBvZiBhIHByb2Nlc3MKLQkgKiB1bmRlcmdvaW5nIGV4ZWMoMikuCi0JICovCi0JZG9fY2xvc2Vfb25fZXhlYyhtZS0mZ3Q7ZmlsZXMpOwotCiAJaWYgKGJwcm0tJmd0O3NlY3VyZWV4ZWMpIHsKIAkJLyogTWFrZSBzdXJlIHBhcmVudCBjYW5ub3Qgc2lnbmFsIHByaXZpbGVnZWQgcHJvY2Vzcy4gKi8KIAkJbWUtJmd0O3BkZWF0aF9zaWduYWwgPSAwOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTc4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGZzL2V4ZWMuY2AgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoIHdpdGhpbiB0aGUgY29udGV4dCBvZiBgZnMvZXhlYy5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYGJlZ2luX25ld19leGVjYCBmdW5jdGlvbi4gVGhlIHBhdGNoIGl0c2VsZiBpcyBzdHJhaWdodGZvcndhcmQgLSBpdCYjMzk7cyBhIGNvZGUgbW92ZW1lbnQsIGVzc2VudGlhbGx5LiBJdCYjMzk7cyByZXBvc2l0aW9uaW5nIHRoZSBjYWxsIHRvIGBkb19jbG9zZV9vbl9leGVjKG1lLSZndDtmaWxlcylgLiAgVGhlIGRpZmYgc2hvd3MgdGhhdCB0aGUgY29kZSB3YXMgKm1vdmVkKiwgbm90IGFkZGVkIG9yIHJlbW92ZWQgZnVuZGFtZW50YWxseS4gUHJldmlvdXNseSwgaXQgd2FzIGFmdGVyIHRoZSBgY2xlYXJfc3lzY2FsbF93b3JrX3N5c2NhbGxfdXNlcl9kaXNwYXRjaChtZSk7YCBjYWxsLCBhbmQgbm93IGl0JiMzOTtzIHBsYWNlZCBlYXJsaWVyLCBiZWZvcmUgdGhlIGNhbGxzIHRvIGBleGVjX21tYXBgIGFuZCBgY2xlYXJfc3lzY2FsbF93b3JrX3N5c2NhbGxfdXNlcl9kaXNwYXRjaGAuCgpUaGUgc3Vycm91bmRpbmcgY29tbWVudHMgYXJlIGtleSBoZXJlLiAgVGhleSBleHBsaWNpdGx5IGNhbGwgb3V0IHRoZSByZWFzb24gZm9yIHRoaXMgcmVhcnJhbmdlbWVudDogdGhlIG5lZWQgdG8gYXBwbHkgYENMT0VYRUNgICpiZWZvcmUqIHBvdGVudGlhbGx5IGNoYW5naW5nIHdoZXRoZXIgdGhlIHByb2Nlc3MgaXMgZHVtcGFibGUgaW4gYHNldHVwX25ld19leGVjYC4gVGhpcyBpcyB0byBhdm9pZCBhIHJhY2UgY29uZGl0aW9uLCB3aGVyZSBhIHVzZXItc3BhY2UgcHJvY2VzcyBtaWdodCB0cnkgdG8gYWNjZXNzIGZpbGUgZGVzY3JpcHRvcnMgdGhhdCAqc2hvdWxkKiBiZSBjbG9zZWQgZHVyaW5nIGFuIGBleGVjKDIpYCBjYWxsLiBDcnVjaWFsbHksIHRoZSBjb21tZW50IGhpZ2hsaWdodHMgdGhhdCBgZG9fY2xvc2Vfb25fZXhlY2AgY2FuIGJsb2NrIG9uIGZpbGVzeXN0ZW0gZmx1c2ggaGFuZGxlcnMgKGluY2x1ZGluZyBGVVNFIGRhZW1vbnMpLiBUaGlzIGlzIHdoeSB0aGUgcGF0Y2ggZW1waGFzaXplcyB0aGF0IGl0JiMzOTtzIHBlcmZvcm1lZCBhZnRlciB0aGUgcG9pbnQgb2Ygbm8gcmV0dXJuIChpbXBvcnRhbnQgZm9yIGF0b21pY2l0eSBhbmQgY29uc2lzdGVuY3kgZHVyaW5nIHRoZSBgZXhlY3ZlYCBwcm9jZXNzKSBhbmQgYWZ0ZXIgdW5zaGFyaW5nIHRoZSBmaWxlIGRlc2NyaXB0b3IgdGFibGUuIFRoaXMgdGltaW5nIGlzIGNyaXRpY2FsIHRvIGVuc3VyZSBwcm9wZXIgY2xlYW51cCwgYXZvaWQgcmFjZXMgYW5kIG1haW50YWluIGRhdGEgaW50ZWdyaXR5LiBUaGUgY29tbWVudCBtZW50aW9ucyBkb2luZyB0aGlzIGJlZm9yZSBgZXhlY19tbWFwYCB0byBhdm9pZCBsb2NraW5nIHByb2JsZW1zLiBTbywgdGhpcyBvcmRlciBjaGFuZ2Ugc2VlbXMgdG8gYmUgYSBzdWJ0bGUgYnV0IGNyaXRpY2FsIG9wdGltaXphdGlvbiBhbmQgcmFjZSBjb25kaXRpb24gYXZvaWRhbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXhlYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE1MDpcdFxuMTE1MTpcdFx0LyogTWFrZSB0aGlzIHRoZSBvbmx5IHRocmVhZCBpbiB0aGUgdGhyZWFkIGdyb3VwICovXG4xMTUyOlx0XHRyZXR2YWwgPSBkZV90aHJlYWQobWUpO1xuMTE1MzpcdFx0aWYgKHJldHZhbClcbjExNTQ6XHRcdFx0Z290byBvdXQ7XG4xMTU1Olx0XHQvKiBzZWUgdGhlIGNvbW1lbnQgaW4gY2hlY2tfdW5zYWZlX2V4ZWMoKSAqL1xuMTE1NjpcdFx0Y3VycmVudC1cdTAwM2Vmcy1cdTAwM2Vpbl9leGVjID0gMDtcbjExNTc6XHRcdC8qXG4xMTU4Olx0XHQgKiBDYW5jZWwgYW55IGlvX3VyaW5nIGFjdGl2aXR5IGFjcm9zcyBleGVjdmVcbjExNTk6XHRcdCAqL1xuMTE2MDpcdFx0aW9fdXJpbmdfdGFza19jYW5jZWwoKTtcbjExNjE6XHRcbjExNjI6XHRcdC8qIEVuc3VyZSB0aGUgZmlsZXMgdGFibGUgaXMgbm90IHNoYXJlZC4gKi9cbjExNjM6XHRcdHJldHZhbCA9IHVuc2hhcmVfZmlsZXMoKTtcbjExNjQ6XHRcdGlmIChyZXR2YWwpXG4xMTY1Olx0XHRcdGdvdG8gb3V0O1xuMTE2NjpcdFxuMTE2NzpcdFx0LypcbjExNjg6XHRcdCAqIFdlIGhhdmUgdG8gYXBwbHkgQ0xPRVhFQyBiZWZvcmUgd2UgY2hhbmdlIHdoZXRoZXIgdGhlIHByb2Nlc3MgaXNcbjExNjk6XHRcdCAqIGR1bXBhYmxlIChpbiBzZXR1cF9uZXdfZXhlYykgdG8gYXZvaWQgYSByYWNlIHdpdGggYSBwcm9jZXNzIGluIHVzZXJzcGFjZVxuMTE3MDpcdFx0ICogdHJ5aW5nIHRvIGFjY2VzcyB0aGUgc2hvdWxkLWJlLWNsb3NlZCBmaWxlIGRlc2NyaXB0b3JzIG9mIGEgcHJvY2Vzc1xuMTE3MTpcdFx0ICogdW5kZXJnb2luZyBleGVjKDIpLlxuMTE3MjpcdFx0ICpcbjExNzM6XHRcdCAqIFRoaXMgY2FuIGJsb2NrIG9uIGZpbGVzeXN0ZW0gLVx1MDAzZWZsdXNoKCkgaGFuZGxlcnMsIGluY2x1ZGluZyB3YWl0aW5nXG4xMTc0Olx0XHQgKiBmb3IgRlVTRSBkYWVtb25zLCBzbyBkbyBpdCBiZWZvcmUgZXhlY19tbWFwIHRha2VzIHRoZVxuMTE3NTpcdFx0ICogZXhlY191cGRhdGVfbG9jay5cbjExNzY6XHRcdCAqIFRoaXMgbXVzdCBoYXBwZW4gYWZ0ZXIgdGhlIHBvaW50IG9mIG5vIHJldHVybiwgYW5kIGFmdGVyIHVuc2hhcmluZ1xuMTE3NzpcdFx0ICogdGhlIEZEIHRhYmxlLlxuMTE3ODpcdFx0ICovXG4xMTc5Olx0XHRkb19jbG9zZV9vbl9leGVjKG1lLVx1MDAzZWZpbGVzKTtcbjExODA6XHRcbjExODE6XHRcdC8qXG4xMTgyOlx0XHQgKiBNdXN0IGJlIGNhbGxlZCBfYmVmb3JlXyBleGVjX21tYXAoKSBhcyBicHJtLVx1MDAzZW1tIGlzXG4xMTgzOlx0XHQgKiBub3QgdmlzaWJsZSB1bnRpbCB0aGVuLiBEb2luZyBpdCBoZXJlIGFsc28gZW5zdXJlc1xuMTE4NDpcdFx0ICogd2UgZG9uJiMzOTt0IHJhY2UgYWdhaW5zdCByZXBsYWNlX21tX2V4ZV9maWxlKCkuXG4xMTg1Olx0XHQgKi9cbjExODY6XHRcdHJldHZhbCA9IHNldF9tbV9leGVfZmlsZShicHJtLVx1MDAzZW1tLCBicHJtX2lkZW50aXR5X2ZpbGUoYnBybSkpO1xuMTE4NzpcdFx0aWYgKHJldHZhbClcbjExODg6XHRcdFx0Z290byBvdXQ7XG4xMTg5Olx0XG4xMTkwOlx0XHQvKiBJZiB0aGUgYmluYXJ5IGlzIG5vdCByZWFkYWJsZSB0aGVuIGVuZm9yY2UgbW0tXHUwMDNlZHVtcGFibGU9MCAqL1xuMTE5MTpcdFx0d291bGRfZHVtcChicHJtLCBicHJtLVx1MDAzZWZpbGUpO1xuMTE5MjpcdFx0aWYgKGJwcm0tXHUwMDNlaGF2ZV9leGVjZmQpXG4xMTkzOlx0XHRcdHdvdWxkX2R1bXAoYnBybSwgYnBybS1cdTAwM2VleGVjdXRhYmxlKTtcbjExOTQ6XHRcbjExOTU6XHRcdC8qXG4xMTk2Olx0XHQgKiBSZWxlYXNlIGFsbCBvZiB0aGUgb2xkIG1tYXAgc3R1ZmZcbjExOTc6XHRcdCAqL1xuMTE5ODpcdFx0YWNjdF9hcmdfc2l6ZShicHJtLCAwKTtcbjExOTk6XHRcdHJldHZhbCA9IGV4ZWNfbW1hcChicHJtKTtcbjEyMDA6XHRcdGlmIChyZXR2YWwpXG4xMjAxOlx0XHRcdGdvdG8gb3V0O1xuMTIwMjpcdFxuMTIwMzpcdFx0YnBybS1cdTAwM2VtbSA9IE5VTEw7XG4xMjA0Olx0XG4xMjA1Olx0XHRyZXR2YWwgPSBleGVjX3Rhc2tfbmFtZXNwYWNlcygpO1xuMTIwNjpcdFx0aWYgKHJldHZhbClcbjEyMDc6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuMTIwODpcdFxuMTIwOTpcdCNpZmRlZiBDT05GSUdfUE9TSVhfVElNRVJTXG4xMjEwOlx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNm1lLVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4xMjExOlx0XHRwb3NpeF9jcHVfdGltZXJzX2V4aXQobWUpO1xuMTIxMjpcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNm1lLVx1MDAzZXNpZ2hhbmQtXHUwMDNlc2lnbG9jayk7XG4xMjEzOlx0XHRleGl0X2l0aW1lcnMobWUpO1xuMTIxNDpcdFx0Zmx1c2hfaXRpbWVyX3NpZ25hbHMoKTtcbjEyMTU6XHQjZW5kaWZcbjEyMTY6XHRcbjEyMTc6XHRcdC8qXG4xMjE4Olx0XHQgKiBNYWtlIHRoZSBzaWduYWwgdGFibGUgcHJpdmF0ZS5cbjEyMTk6XHRcdCAqL1xuMTIyMDpcdFx0cmV0dmFsID0gdW5zaGFyZV9zaWdoYW5kKG1lKTtcbjEyMjE6XHRcdGlmIChyZXR2YWwpXG4xMjIyOlx0XHRcdGdvdG8gb3V0X3VubG9jaztcbjEyMjM6XHRcbjEyMjQ6XHRcdG1lLVx1MDAzZWZsYWdzIFx1MDAyNj0gfihQRl9SQU5ET01JWkUgfCBQRl9GT1JLTk9FWEVDIHxcbjEyMjU6XHRcdFx0XHRcdFx0UEZfTk9GUkVFWkUgfCBQRl9OT19TRVRBRkZJTklUWSk7XG4xMjI2Olx0XHRmbHVzaF90aHJlYWQoKTtcbjEyMjc6XHRcdG1lLVx1MDAzZXBlcnNvbmFsaXR5IFx1MDAyNj0gfmJwcm0tXHUwMDNlcGVyX2NsZWFyO1xuMTIyODpcdFxuMTIyOTpcdFx0Y2xlYXJfc3lzY2FsbF93b3JrX3N5c2NhbGxfdXNlcl9kaXNwYXRjaChtZSk7XG4xMjMwOlx0XG4xMjMxOlx0XHRpZiAoYnBybS1cdTAwM2VzZWN1cmVleGVjKSB7XG4xMjMyOlx0XHRcdC8qIE1ha2Ugc3VyZSBwYXJlbnQgY2Fubm90IHNpZ25hbCBwcml2aWxlZ2VkIHByb2Nlc3MuICovXG4xMjMzOlx0XHRcdG1lLVx1MDAzZXBkZWF0aF9zaWduYWwgPSAwO1xuMTIzNDpcdFxuMTIzNTpcdFx0XHQvKlxuMTIzNjpcdFx0XHQgKiBGb3Igc2VjdXJlZXhlYywgcmVzZXQgdGhlIHN0YWNrIGxpbWl0IHRvIHNhbmUgZGVmYXVsdCB0b1xuMTIzNzpcdFx0XHQgKiBhdm9pZCBiYWQgYmVoYXZpb3IgZnJvbSB0aGUgcHJpb3IgcmxpbWl0cy4gVGhpcyBoYXMgdG9cbjEyMzg6XHRcdFx0ICogaGFwcGVuIGJlZm9yZSBhcmNoX3BpY2tfbW1hcF9sYXlvdXQoKSwgd2hpY2ggZXhhbWluZXNcbjEyMzk6XHRcdFx0ICogUkxJTUlUX1NUQUNLLCBidXQgYWZ0ZXIgdGhlIHBvaW50IG9mIG5vIHJldHVybiB0byBhdm9pZFxuMTI0MDpcdFx0XHQgKiBuZWVkaW5nIHRvIGNsZWFuIHVwIHRoZSBjaGFuZ2Ugb24gZmFpbHVyZS5cbjEyNDE6XHRcdFx0ICovXG4xMjQyOlx0XHRcdGlmIChicHJtLVx1MDAzZXJsaW1fc3RhY2sucmxpbV9jdXIgXHUwMDNlIF9TVEtfTElNKVxuMTI0MzpcdFx0XHRcdGJwcm0tXHUwMDNlcmxpbV9zdGFjay5ybGltX2N1ciA9IF9TVEtfTElNO1xuMTI0NDpcdFx0fVxuMTI0NTpcdFxuMTI0NjpcdFx0bWUtXHUwMDNlc2FzX3NzX3NwID0gbWUtXHUwMDNlc2FzX3NzX3NpemUgPSAwO1xuMTI0NzpcdFxuMTI0ODpcdFx0LypcbjEyNDk6XHRcdCAqIEZpZ3VyZSBvdXQgZHVtcGFiaWxpdHkuIE5vdGUgdGhhdCB0aGlzIGNoZWNraW5nIG9ubHkgb2YgY3VycmVudFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MDQKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0OTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IGBiZWdpbl9uZXdfZXhlY2AgaW4gYGZzL2V4ZWMuY2AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgbW9kaWZpY2F0aW9uIGluIGBmcy9leGVjLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBiZWdpbl9uZXdfZXhlY2AuIFRoZSBjaGFuZ2UgaW52b2x2ZXMgbW92aW5nIHRoZSBgZG9fY2xvc2Vfb25fZXhlYyhtZS0mZ3Q7ZmlsZXMpYCBjYWxsLiBJdCB1c2VkIHRvIGJlICphZnRlciogYGNsZWFyX3N5c2NhbGxfd29ya19zeXNjYWxsX3VzZXJfZGlzcGF0Y2gobWUpO2AgYnV0IGlzIG5vdyAqYmVmb3JlKiBgc2V0X21tX2V4ZV9maWxlKGJwcm0tJmd0O21tLCBicHJtX2lkZW50aXR5X2ZpbGUoYnBybSkpO2AgYW5kIGBleGVjX21tYXAoYnBybSlgLiBUaGUgY29tbWVudCBleHBsYWlucyB0aGlzIGlzIGFib3V0IGhhbmRsaW5nIGBDTE9FWEVDYCBmbGFncyBiZWZvcmUgY2hhbmdpbmcgcHJvY2VzcyBkdW1wYWJpbGl0eSwgcHJldmVudGluZyBhIHJhY2UgY29uZGl0aW9uIHdpdGggdXNlci1zcGFjZSBwcm9jZXNzZXMgYWNjZXNzaW5nIGZpbGUgZGVzY3JpcHRvcnMuIEl0IGFsc28gbm90ZXMgdGhhdCBgZG9fY2xvc2Vfb25fZXhlY2AgY2FuIGJsb2NrLCBzbyBpdCYjMzk7cyBiZWluZyBtb3ZlZCB0byBoYXBwZW4gKmJlZm9yZSogdGFraW5nIHRoZSBgZXhlY191cGRhdGVfbG9ja2AuIEludGVyZXN0aW5nLiBUaGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGNvZGUsIGl0JiMzOTtzIGZ1bmRhbWVudGFsIHRvIGV2ZXJ5IGBleGVjdmVgIGFuZCBgZXhlY3ZlYXRgIGNhbGwuIFNvLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IEJhc2VkIG9uIHRoZSBmdXp6aW5nIGd1aWRlbGluZXMsIGFueSBsb2dpYyBtb2RpZmljYXRpb25zIHdpdGhpbiB0aGUgJiMzNDtzeXNjYWxsIGhhbmRsaW5nJiMzNDsgc3Vic3lzdGVtLCBvciByZWZhY3RvcmluZyBvZiAmIzM0O3JlYWNoYWJsZSBjb2RlJiMzNDsgZGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nLiBUaGlzIGlzIGEgY2xlYXIgJiMzNDt5ZXMmIzM0Oy4gTm93LCB0byByZWZpbmUgdGhlIGZvY3VzOiBUaGUgbW9kaWZpZWQgZnVuY3Rpb24gaXMgYGJlZ2luX25ld19leGVjYCB3aXRoaW4gYGZzL2V4ZWMuY2AuIElzIHRoaXMgYSBnb29kIGZvY3VzIHN5bWJvbD8gRmlyc3QsIEkgbmVlZCB0byBjaGVjayB3aGF0IGNhbGxzIGBiZWdpbl9uZXdfZXhlY2AuIExldCYjMzk7cyBmaW5kIG91dC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JlZ2luX25ld19leGVjJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2JpbmZtdF9lbGYuYz04Mjk9c3RhdGljIGludCBsb2FkX2VsZl9iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbi0tXG5mcy9iaW5mbXRfZWxmLmMtMTAwOS1cdC8qIEZsdXNoIGFsbCB0cmFjZXMgb2YgdGhlIGN1cnJlbnRseSBydW5uaW5nIGV4ZWN1dGFibGUgKi9cbmZzL2JpbmZtdF9lbGYuYzoxMDEwOlx0cmV0dmFsID0gYmVnaW5fbmV3X2V4ZWMoYnBybSk7XG5mcy9iaW5mbXRfZWxmLmMtMTAxMS1cdGlmIChyZXR2YWwpXG4tLVxuZnMvYmluZm10X2VsZl9mZHBpYy5jPTE4Mj1zdGF0aWMgaW50IGxvYWRfZWxmX2ZkcGljX2JpbmFyeShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuLS1cbmZzL2JpbmZtdF9lbGZfZmRwaWMuYy0zNDgtXHQvKiBmbHVzaCBhbGwgdHJhY2VzIG9mIHRoZSBjdXJyZW50bHkgcnVubmluZyBleGVjdXRhYmxlICovXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmM6MzQ5Olx0cmV0dmFsID0gYmVnaW5fbmV3X2V4ZWMoYnBybSk7XG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtMzUwLVx0aWYgKHJldHZhbClcbi0tXG5mcy9iaW5mbXRfZmxhdC5jPTQwNj1zdGF0aWMgaW50IGxvYWRfZmxhdF9maWxlKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG4tLVxuZnMvYmluZm10X2ZsYXQuYy01MDgtXHQvKiBGbHVzaCBhbGwgdHJhY2VzIG9mIHRoZSBjdXJyZW50bHkgcnVubmluZyBleGVjdXRhYmxlICovXG5mcy9iaW5mbXRfZmxhdC5jOjUwOTpcdHJldCA9IGJlZ2luX25ld19leGVjKGJwcm0pO1xuZnMvYmluZm10X2ZsYXQuYy01MTAtXHRpZiAocmV0KVxuLS1cbmZzL2V4ZWMuYz0yNTg9c3RhdGljIGludCBicHJtX21tX2luaXQoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbi0tXG5mcy9leGVjLmMtMjY3LVxuZnMvZXhlYy5jOjI2ODpcdC8qIFN0YWdlZCBmb3Igd291bGRfZHVtcCgpIG5hcnJvd2luZzsgY29uc3VtZWQgYnkgYmVnaW5fbmV3X2V4ZWMoKS4gKi9cbmZzL2V4ZWMuYy0yNjktXHRicHJtLVx1MDAzZXVzZXJfbnMgPSBnZXRfdXNlcl9ucyhjdXJyZW50X3VzZXJfbnMoKSk7XG4tLVxuZnMvZXhlYy5jPTExMTE9c3RhdGljIHN0cnVjdCBmaWxlICpicHJtX2lkZW50aXR5X2ZpbGUoY29uc3Qgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbi0tXG5mcy9leGVjLmMtMTEyMy0gKi9cbmZzL2V4ZWMuYzoxMTI0OmludCBiZWdpbl9uZXdfZXhlYyhzdHJ1Y3QgbGludXhfYmlucHJtICogYnBybSlcbmZzL2V4ZWMuYy0xMTI1LXtcbi0tXG5mcy9leGVjLmMtMTM0Mi19XG5mcy9leGVjLmM6MTM0MzpFWFBPUlRfU1lNQk9MKGJlZ2luX25ld19leGVjKTtcbmZzL2V4ZWMuYy0xMzQ0LVxuLS1cbmZzL2V4ZWMuYz0xNDQyPXN0cnVjdCBmaWxlICpicHJtX29wZW5faW50ZXJwcmV0ZXIoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgY29uc3QgY2hhciAqcGF0aClcbi0tXG5mcy9leGVjLmMtMTQ1NC0gKiBvdmVycmlkZSBhbmQgbGV0IHRoZSBiaW5hcnkgbG9hZCBuYXRpdmVseSByYXRoZXIgdGhhbiBoYXZlXG5mcy9leGVjLmM6MTQ1NTogKiBiZWdpbl9uZXdfZXhlYygpIHJlZnVzZSBpdC4gQSBuby1vcCBvbmNlIGJwcm1fb3Blbl9pbnRlcnByZXRlcigpIHRvb2tcbmZzL2V4ZWMuYy0xNDU2LSAqIHRoZSBzdWJzdGl0dXRlLlxuLS1cbmZzL2V4ZWMuYz0xNzQ2PXN0YXRpYyBpbnQgc2VhcmNoX2JpbmFyeV9oYW5kbGVyKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4tLVxuZnMvZXhlYy5jLTE3NzgtXG5mcy9leGVjLmM6MTc3OTovKiBiaW5mbXQgaGFuZGxlcnMgd2lsbCBjYWxsIGJhY2sgaW50byBiZWdpbl9uZXdfZXhlYygpIG9uIHN1Y2Nlc3MuICovXG5mcy9leGVjLmMtMTc4MC1zdGF0aWMgaW50IGV4ZWNfYmlucHJtKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4tLVxuZnMvZXhlYy5jPTE4Mjk9c3RhdGljIGludCBicHJtX2V4ZWN2ZShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuLS1cbmZzL2V4ZWMuYy0xODM4LVx0ICogQ2hlY2sgZm9yIHVuc2FmZSBleGVjdXRpb24gc3RhdGVzIGJlZm9yZSBleGVjX2JpbnBybSgpLCB3aGljaFxuZnMvZXhlYy5jOjE4Mzk6XHQgKiB3aWxsIGNhbGwgYmFjayBpbnRvIGJlZ2luX25ld19leGVjKCksIGludG8gYnBybV9jcmVkc19mcm9tX2ZpbGUoKSxcbmZzL2V4ZWMuYy0xODQwLVx0ICogd2hlcmUgc2V0dWlkLW5lc3MgaXMgZXZhbHVhdGVkLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczODgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyBgZG9fY2xvc2Vfb25fZXhlY2AgTG9jYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhpcyBgZG9fY2xvc2Vfb25fZXhlY2AgZnVuY3Rpb24gbGl2ZXMuIEdpdmVuIGl0cyBuYW1lLCBpdCYjMzk7cyBwcmV0dHkgbGlrZWx5IHJlbGF0ZWQgdG8gZmlsZSBvcGVyYXRpb25zIG9yLCBwb3RlbnRpYWxseSwgdGhlIGV4ZWN1dGlvbiBwcm9jZXNzIGFuZCBob3cgZmlsZSBkZXNjcmlwdG9ycyBiZWhhdmUuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gbG9vayB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBmaWxlIHN5c3RlbSBpbXBsZW1lbnRhdGlvbiwgc28gSSYjMzk7bSB0aGlua2luZyBgZnMvZmlsZS5jYCBpcyBhIHByaW1lIGNhbmRpZGF0ZS4gSXQmIzM5O3MgdGhlIHVzdWFsIHBsYWNlIGZvciBmaWxlLXJlbGF0ZWQgbG9naWMuIEhvd2V2ZXIsIHNpbmNlIHdlJiMzOTtyZSBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoICYjMzQ7ZXhlYywmIzM0OyBJJiMzOTtsbCBhbHNvIGdsYW5jZSBhdCBgZnMvZXhlYy5jYCAtIGl0IGhhbmRsZXMgdGhlIGltYWdlIGxvYWRpbmcgYW5kIGVudmlyb25tZW50IHNldHVwLCBhbmQgdGhhdCBtaWdodCBpbnZvbHZlIGhvdyBmaWxlcyBhcmUgaGFuZGxlZCBkdXJpbmcgZXhlY3V0aW9uIG9mIGEgcHJvZ3JhbS4gRmluYWxseSwgSSBzaG91bGQgYWxzbyBxdWlja2x5IGNoZWNrIHRoZSBhc3NvY2lhdGVkIGhlYWRlciBmaWxlcywgYXMgZnVuY3Rpb25zIGxpa2UgdGhpcyBvZnRlbiBoYXZlIGRlY2xhcmF0aW9ucyB0aGVyZS4gQmVzdCB0byBiZSB0aG9yb3VnaCwgSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoZXJlIGl0JiMzOTtzIGRlZmluZWQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fY2xvc2Vfb25fZXhlYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leGVjLmM9MTEyND1pbnQgYmVnaW5fbmV3X2V4ZWMoc3RydWN0IGxpbnV4X2JpbnBybSAqIGJwcm0pXG4tLVxuZnMvZXhlYy5jLTExNzgtXHQgKi9cbmZzL2V4ZWMuYzoxMTc5Olx0ZG9fY2xvc2Vfb25fZXhlYyhtZS1cdTAwM2VmaWxlcyk7XG5mcy9leGVjLmMtMTE4MC1cbi0tXG5mcy9maWxlLmM9ODc4PXN0cnVjdCBmaWxlICpmaWxlX2Nsb3NlX2ZkKHVuc2lnbmVkIGludCBmZClcbi0tXG5mcy9maWxlLmMtODg5LVxuZnMvZmlsZS5jOjg5MDp2b2lkIGRvX2Nsb3NlX29uX2V4ZWMoc3RydWN0IGZpbGVzX3N0cnVjdCAqZmlsZXMpXG5mcy9maWxlLmMtODkxLXtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZkdGFibGUuaD0xMDc9c3RydWN0IGZpbGVzX3N0cnVjdCAqZHVwX2ZkKHN0cnVjdCBmaWxlc19zdHJ1Y3QgKiwgc3RydWN0IGZkX3JhbmdlICopIF9fbGF0ZW50X2VudHJvcHk7XG5pbmNsdWRlL2xpbnV4L2ZkdGFibGUuaDoxMDg6dm9pZCBkb19jbG9zZV9vbl9leGVjKHN0cnVjdCBmaWxlc19zdHJ1Y3QgKik7XG5pbmNsdWRlL2xpbnV4L2ZkdGFibGUuaC0xMDktaW50IGl0ZXJhdGVfZmQoc3RydWN0IGZpbGVzX3N0cnVjdCAqLCB1bnNpZ25lZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTAzCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFJlYXNvbmluZyBmb3IgU2VsZWN0aW5nIHRoZSBGdXp6aW5nIFRhcmdldHMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgKnJpZ2h0KiB0YXJnZXRzIGZvciBmdXp6aW5nLCBnaXZlbiB0aGUgY2hhbmdlIEkmIzM5O20gcmV2aWV3aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IGFjY2lkZW50YWxseSBsaXN0aW5nIGEgKnViaXF1aXRvdXMgbGlmZWN5Y2xlIGhvdC1wYXRoKiwgYXMgdGhhdCYjMzk7cyBhIGZ1enppbmcgbm8tbm8uIFNvLCBsZXQmIzM5O3Mgc2VlLi4uIHRoZSBgZG9fY2xvc2Vfb25fZXhlY2AgZnVuY3Rpb24gaXMgdGhlIGluaXRpYWwgcG9pbnQgdG8gY2hlY2ssIGFuZCBhIHF1aWNrIGxvb2t1cCBzaG93cyBpdCYjMzk7cyBjYWxsZWQgKm9ubHkqIHdpdGhpbiBgZnMvZXhlYy5jYCwgc3BlY2lmaWNhbGx5IGR1cmluZyBgYmVnaW5fbmV3X2V4ZWNgLiBUaGlzIGxvb2tzIHByb21pc2luZy4KCk5vdywgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgYmVnaW5fbmV3X2V4ZWNgIGl0c2VsZiBpc24mIzM5O3QgKnRvbyogZ2VuZXJpYy4gVGhlIHRleHQgbWVudGlvbnMgaXQmIzM5O3MgdXNlZCBkdXJpbmcgZXhlYyBieSBiaW5hcnkgZm9ybWF0IGhhbmRsZXJzLiBJcyB0aGlzIGEgdW5pdmVyc2FsbHkgY2FsbGVkIGZ1bmN0aW9uPyBCYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nLCBgYmVnaW5fbmV3X2V4ZWNgIHNlZW1zIHNwZWNpZmljIHRvIHRoZSAqZXhlY3ZlKiBwYXRoLiBTeXprYWxsZXIgdGVzdHMgYGV4ZWN2ZWAgYW5kIGBleGVjdmVhdGAsIGJ1dCBub3QgKmV2ZXJ5KiBTeXprYWxsZXIgdGVzdCBydW5zIGBleGVjdmVgLiBNb3N0IHRlc3RzIGFyZSBhYm91dCB0aGluZ3MgbGlrZSBzb2NrZXRzIG9yIGlvY3RsLCBidXQgYGJlZ2luX25ld19leGVjYCBpcyBzcGVjaWZpYyB0byB0aGUgYGV4ZWN2ZWAgcGF0aC4gVGhlcmVmb3JlLCBJIGNhbiBjb25maWRlbnRseSBhZGQgaXQuCgpUaGUgZ3VpZGVsaW5lcyBzYXkgdGhhdCBJIHNob3VsZCB0YXJnZXQgJiMzNDtzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIGFuZCBlbnRyeXBvaW50cyYjMzQ7LCBhbmQgdGhhdCYjMzk7cyBleGFjdGx5IHdoYXQgYGJlZ2luX25ld19leGVjYCBhbmQgYGRvX2Nsb3NlX29uX2V4ZWNgIHJlcHJlc2VudC4gVGhleSBhcmUgdGhlIGRpcmVjdCBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gdGhpcyBzcGVjaWZpYyBjaGFuZ2UuIFNvIEkmIzM5O2xsIGluY2x1ZGUgYm90aC4KCk5vdywgbGV0JiMzOTtzIGFkZHJlc3MgdGhlIEtjb25maWcgb3B0aW9ucy4gQm90aCBgYmVnaW5fbmV3X2V4ZWNgIChpbiBgZnMvZXhlYy5jYCkgYW5kIGBkb19jbG9zZV9vbl9leGVjYCAoaW4gYGZzL2ZpbGUuY2ApIGFyZSBjb3JlIGtlcm5lbCBmdW5jdGlvbnMuIFRoZXkgYXJlIGNvbXBpbGVkIHVuY29uZGl0aW9uYWxseSBpbnRvIHRoZSBrZXJuZWwsIHdoaWNoIG1lYW5zIG5vIHNwZWNpYWwgYENPTkZJR2AgaXMgcmVxdWlyZWQuIEkgY2FuIGtlZXAgdGhlIGBFbmFibGVDb25maWdzYCBlbXB0eSBmb3IgdGhpcy4KCkZpbmFsbHksIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgZ2xhbmNlIGF0IGBmcy9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgYnVpbHQtaW4gc3RhdHVzIG9mIGJvdGggZmlsZXMuIFllcCwgdGhhdCYjMzk7cyB3aGF0IEkgZXhwZWN0ZWQuIGBmcy9leGVjLmNgIGlzIGNvbXBpbGVkIGFsd2F5cyAoYG9iai15ICYjNDM7PSBleGVjLm9gKSwgYW5kIGBmcy9maWxlLmNgIGlzIGFsc28gY29tcGlsZWQgYWx3YXlzLiBUaGlzIGlzIGFsbCBsb29raW5nIGdvb2QuIEkgYW0gY29uZmlkZW50IHdpdGggdGhpcyBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXhlY1xcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvTWFrZWZpbGU9MTA9b2JqLXkgOj1cdG9wZW4ubyByZWFkX3dyaXRlLm8gZmlsZV90YWJsZS5vIHN1cGVyLm8gXFxcbmZzL01ha2VmaWxlOjExOlx0XHRjaGFyX2Rldi5vIHN0YXQubyBleGVjLm8gcGlwZS5vIG5hbWVpLm8gZmNudGwubyBcXFxuZnMvTWFrZWZpbGUtMTItXHRcdGlvY3RsLm8gcmVhZGRpci5vIHNlbGVjdC5vIGRjYWNoZS5vIGlub2RlLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk5OQoJCQkJCQkJb3V0cHV0OiAxMzgKCQkJCQkJCXRob3VnaHRzOiAxOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYGV4ZWMub2AgQ2hhbmdlKioKCk9rYXksIHNvIGBleGVjLm9gIGlzIGJha2VkIHJpZ2h0IGludG8gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IHRocm91Z2ggdGhlIGBmcy9NYWtlZmlsZWAgYXMgYW4gYG9iai15YC4gTm8gc3VycHJpc2VzIHRoZXJlLiBCdXQgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgcHJvcG9zZWQgY2hhbmdlIHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGUgY3JpdGVyaWEgYXJlIG1ldC4KCkZpcnN0LCBpcyB0aGlzIGNoYW5nZSAqV29ydGhGdXp6aW5nKj8gWWVwLCBhYnNvbHV0ZWx5LiBUaGUgcmVhc29uaW5nIGlzIHNvbGlkLiBUaGUgcGF0Y2ggaXMgbW92aW5nIGBkb19jbG9zZV9vbl9leGVjKClgIGVhcmxpZXIgaW4gYGJlZ2luX25ld19leGVjKClgIHdpdGhpbiBgZnMvZXhlYy5jYC4gVGhlIGNvcmUgb2YgdGhpcyBpcyBhYm91dCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIGRlYWRsb2NrIHNjZW5hcmlvLiBTcGVjaWZpY2FsbHkgd2l0aCBmaWxlc3lzdGVtIGZsdXNoKCkgaGFuZGxlcnMsIHN1Y2ggYXMgRlVTRSwgYmxvY2tpbmcgd2hpbGUgaG9sZGluZyB0aGUgYGV4ZWNfdXBkYXRlX2xvY2tgLiBUaGlzIGVmZmVjdGl2ZWx5IHJlb3JkZXJzIGNyaXRpY2FsIG9wZXJhdGlvbnMgaW4gdGhlIGNvcmUgVkZTL2V4ZWMgc3Vic3lzdGVtLCBhbmQgYW55IGNoYW5nZSB0b3VjaGluZyBgZXhlY2AgZGVzZXJ2ZXMgc2NydXRpbnkuCgpUaGUgKkZvY3VzU3ltYm9scyogYXJlIGNsZWFybHkgYGJlZ2luX25ld19leGVjYCBhbmQgYGRvX2Nsb3NlX29uX2V4ZWNgLiBNYWtlcyBzZW5zZSwgdGhvc2UgYXJlIHRoZSBmdW5jdGlvbnMgZGlyZWN0bHkgYWZmZWN0ZWQgYnkgdGhlIHBhdGNoLiBObyBzcGVjaWZpYyBrZXJuZWwgKkVuYWJsZUNvbmZpZ3MqIGFyZSBuZWVkZWQgdG8gcmVwcm9kdWNlIHRoaXMgaXNzdWUsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzLgoKUmlnaHQsIHNvIHdpdGggdGhhdCBjb25maXJtYXRpb24sIEkmIzM5O2xsIHBhc3MgdGhlc2UgdmFsdWVzIHRvIHRoZSBzZXQtcmVzdWx0cyBmdW5jdGlvbiBmb3IgZnV0dXJlIHVzZS4gVGhpcyBsb29rcyBsaWtlIHNvbWV0aGluZyBJIHNob3VsZCBrZWVwIGFuIGV5ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JlZ2luX25ld19leGVjJiMzNDssCiAgICAmIzM0O2RvX2Nsb3NlX29uX2V4ZWMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBleGVjdmUgbG9naWMgaW4gYmVnaW5fbmV3X2V4ZWMoKSAoZnMvZXhlYy5jKSwgbW92aW5nIHRoZSBpbnZvY2F0aW9uIG9mIGRvX2Nsb3NlX29uX2V4ZWMoKSBiZWZvcmUgZXhlY19tbWFwKCkgYW5kIHNldF9tbV9leGVfZmlsZSgpIHRvIGF2b2lkIGJsb2NraW5nIG9uIGZpbGVzeXN0ZW0gLVx1MDAzZWZsdXNoKCkgaGFuZGxlcnMgd2hpbGUgaG9sZGluZyBleGVjX3VwZGF0ZV9sb2NrLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb250cm9sIGZsb3cgYW5kIGxpZmVjeWNsZSBvcmRlciBkdXJpbmcgcHJvZ3JhbSBleGVjdXRpb24gaW4gdGhlIGNvcmUgVkZTL2V4ZWMgc3Vic3lzdGVtIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JlZ2luX25ld19leGVjJiMzNDssCiAgICAmIzM0O2RvX2Nsb3NlX29uX2V4ZWMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBleGVjdmUgbG9naWMgaW4gYmVnaW5fbmV3X2V4ZWMoKSAoZnMvZXhlYy5jKSwgbW92aW5nIHRoZSBpbnZvY2F0aW9uIG9mIGRvX2Nsb3NlX29uX2V4ZWMoKSBiZWZvcmUgZXhlY19tbWFwKCkgYW5kIHNldF9tbV9leGVfZmlsZSgpIHRvIGF2b2lkIGJsb2NraW5nIG9uIGZpbGVzeXN0ZW0gLVx1MDAzZWZsdXNoKCkgaGFuZGxlcnMgd2hpbGUgaG9sZGluZyBleGVjX3VwZGF0ZV9sb2NrLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb250cm9sIGZsb3cgYW5kIGxpZmVjeWNsZSBvcmRlciBkdXJpbmcgcHJvZ3JhbSBleGVjdXRpb24gaW4gdGhlIGNvcmUgVkZTL2V4ZWMgc3Vic3lzdGVtIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMTozNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjM1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgdGhlIGludm9jYXRpb24gb2YgYGRvX2Nsb3NlX29uX2V4ZWMobWUtXHUwMDNlZmlsZXMpYCBlYXJsaWVyIGluIGBiZWdpbl9uZXdfZXhlYygpYCwgcGxhY2luZyBpdCBiZWZvcmUgYHNldF9tbV9leGVfZmlsZSgpYCBhbmQgYGV4ZWNfbW1hcCgpYC4gVGhpcyBhdm9pZHMgaG9sZGluZyBgZXhlY191cGRhdGVfbG9ja2Agd2hpbGUgZmlsZXN5c3RlbSBgLVx1MDAzZWZsdXNoKClgIGhhbmRsZXJzIChzdWNoIGFzIEZVU0UpIHJ1biBkdXJpbmcgYGZpbHBfY2xvc2UoKWAsIHJlc29sdmluZyBwb3RlbnRpYWwgbG9ja2luZy9kZWFkbG9jayBhbmQgY29uY3VycmVuY3kgaXNzdWVzLlxuXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYSBjb250cm9sIGZsb3cgYW5kIGxvY2sgb3JkZXJpbmcgYWRqdXN0bWVudCB3aXRoaW4gcHJvY2VzcyBleGVjdXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSwgYWxsb2NhdGUsIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0YWNrL2hlYXAgYnVmZmVycywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UuIEFueSByaXNrcyBhc3NvY2lhdGVkIHdpdGggbG9ja2luZyBvciBmaWxlIGRlc2NyaXB0b3IgcmVmZXJlbmNlIGxpZmVjeWNsZXMgYXJlIG1vbml0b3JlZCBieSBMT0NLREVQIGFuZCBzdGFuZGFyZCBLQVNBTiBidWlsZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM5MDQzZjgwZWE5ZjI3ZDc3Y2IzY2U3YjJjN2I4MDBiYmNlNTMxZTMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDAxOjM0OjU3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jCmluZGV4IDc0NWY2ZWI1Mjc5ZTYuLmI1MWU1ZDdlNDUzNjcgMTAwNjQ0Ci0tLSBhL2ZzL2V4ZWMuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leGVjLmMKQEAgLTExNjQsNiAmIzQzOzExNjQsMjAgQEAgaW50IGJlZ2luX25ld19leGVjKHN0cnVjdCBsaW51eF9iaW5wcm0gKiBicHJtKQogCWlmIChyZXR2YWwpCiAJCWdvdG8gb3V0OwogCiYjNDM7CS8qCiYjNDM7CSAqIFdlIGhhdmUgdG8gYXBwbHkgQ0xPRVhFQyBiZWZvcmUgd2UgY2hhbmdlIHdoZXRoZXIgdGhlIHByb2Nlc3MgaXMKJiM0MzsJICogZHVtcGFibGUgKGluIHNldHVwX25ld19leGVjKSB0byBhdm9pZCBhIHJhY2Ugd2l0aCBhIHByb2Nlc3MgaW4gdXNlcnNwYWNlCiYjNDM7CSAqIHRyeWluZyB0byBhY2Nlc3MgdGhlIHNob3VsZC1iZS1jbG9zZWQgZmlsZSBkZXNjcmlwdG9ycyBvZiBhIHByb2Nlc3MKJiM0MzsJICogdW5kZXJnb2luZyBleGVjKDIpLgomIzQzOwkgKgomIzQzOwkgKiBUaGlzIGNhbiBibG9jayBvbiBmaWxlc3lzdGVtIC0mZ3Q7Zmx1c2goKSBoYW5kbGVycywgaW5jbHVkaW5nIHdhaXRpbmcKJiM0MzsJICogZm9yIEZVU0UgZGFlbW9ucywgc28gZG8gaXQgYmVmb3JlIGV4ZWNfbW1hcCB0YWtlcyB0aGUKJiM0MzsJICogZXhlY191cGRhdGVfbG9jay4KJiM0MzsJICogVGhpcyBtdXN0IGhhcHBlbiBhZnRlciB0aGUgcG9pbnQgb2Ygbm8gcmV0dXJuLCBhbmQgYWZ0ZXIgdW5zaGFyaW5nCiYjNDM7CSAqIHRoZSBGRCB0YWJsZS4KJiM0MzsJICovCiYjNDM7CWRvX2Nsb3NlX29uX2V4ZWMobWUtJmd0O2ZpbGVzKTsKJiM0MzsKIAkvKgogCSAqIE11c3QgYmUgY2FsbGVkIF9iZWZvcmVfIGV4ZWNfbW1hcCgpIGFzIGJwcm0tJmd0O21tIGlzCiAJICogbm90IHZpc2libGUgdW50aWwgdGhlbi4gRG9pbmcgaXQgaGVyZSBhbHNvIGVuc3VyZXMKQEAgLTEyMTQsMTQgJiM0MzsxMjI4LDYgQEAgaW50IGJlZ2luX25ld19leGVjKHN0cnVjdCBsaW51eF9iaW5wcm0gKiBicHJtKQogCiAJY2xlYXJfc3lzY2FsbF93b3JrX3N5c2NhbGxfdXNlcl9kaXNwYXRjaChtZSk7CiAKLQkvKgotCSAqIFdlIGhhdmUgdG8gYXBwbHkgQ0xPRVhFQyBiZWZvcmUgd2UgY2hhbmdlIHdoZXRoZXIgdGhlIHByb2Nlc3MgaXMKLQkgKiBkdW1wYWJsZSAoaW4gc2V0dXBfbmV3X2V4ZWMpIHRvIGF2b2lkIGEgcmFjZSB3aXRoIGEgcHJvY2VzcyBpbiB1c2Vyc3BhY2UKLQkgKiB0cnlpbmcgdG8gYWNjZXNzIHRoZSBzaG91bGQtYmUtY2xvc2VkIGZpbGUgZGVzY3JpcHRvcnMgb2YgYSBwcm9jZXNzCi0JICogdW5kZXJnb2luZyBleGVjKDIpLgotCSAqLwotCWRvX2Nsb3NlX29uX2V4ZWMobWUtJmd0O2ZpbGVzKTsKLQogCWlmIChicHJtLSZndDtzZWN1cmVleGVjKSB7CiAJCS8qIE1ha2Ugc3VyZSBwYXJlbnQgY2Fubm90IHNpZ25hbCBwcml2aWxlZ2VkIHByb2Nlc3MuICovCiAJCW1lLSZndDtwZGVhdGhfc2lnbmFsID0gMDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzOTAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uIC0gYGZzL2V4ZWMuY2AgUGF0Y2gqKgoKT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIHRvIGBmcy9leGVjLmNgIHdhcnJhbnRzIGEgS01TQU4gZnV6emluZyBzZXNzaW9uLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHdlJiMzOTtyZSBmb2xsb3dpbmcgdGhlIHNhZmV0eSBwcm90b2NvbHMgaGVyZS4gSXQgc2VlbXMgbGlrZSB0aGlzIGlzIGp1c3Qgc3RhbmRhcmQgZGV2ZWxvcGVyIFFBLCBjb2RlIGFuYWx5c2lzLCBhbmQgc2FuaXRpemF0aW9uIGFzc2Vzc21lbnQsIG5vdGhpbmcgb3V0IG9mIHRoZSBvcmRpbmFyeSBvciByaXNreS4gR29vZCwgc2FmZSB0byBwcm9jZWVkLgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgcGF0Y2ggaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgY29kZSBpcyBhY3R1YWxseSAqZG9pbmcqLiBUaW1lIHRvIHB1bGwgdXAgdGhlIHBhdGNoIGFuZCBsaWtlbHkgcmVhY2ggZm9yIGByZWFkLWZpbGVgIG9yIGV2ZW4gYGdyZXBwZXJgIHRvIGV4YW1pbmUgdGhlIHJlbGV2YW50IHNlY3Rpb24gb2YgYGZzL2V4ZWMuY2AsIGVzcGVjaWFsbHkgYXJvdW5kIHRoYXQgYGJlZ2luX25ld19leGVjYCBmdW5jdGlvbi4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY2hhbmdlcyBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucy4gSSBuZWVkIHRvIGFzc2VzcyBpZiB0aGlzIHBhdGNoIGNvdWxkIGludHJvZHVjZSBhbnkgbWVtb3J5IHNhZmV0eSB2dWxuZXJhYmlsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXhlYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTUwOlx0XG4xMTUxOlx0XHQvKiBNYWtlIHRoaXMgdGhlIG9ubHkgdGhyZWFkIGluIHRoZSB0aHJlYWQgZ3JvdXAgKi9cbjExNTI6XHRcdHJldHZhbCA9IGRlX3RocmVhZChtZSk7XG4xMTUzOlx0XHRpZiAocmV0dmFsKVxuMTE1NDpcdFx0XHRnb3RvIG91dDtcbjExNTU6XHRcdC8qIHNlZSB0aGUgY29tbWVudCBpbiBjaGVja191bnNhZmVfZXhlYygpICovXG4xMTU2Olx0XHRjdXJyZW50LVx1MDAzZWZzLVx1MDAzZWluX2V4ZWMgPSAwO1xuMTE1NzpcdFx0LypcbjExNTg6XHRcdCAqIENhbmNlbCBhbnkgaW9fdXJpbmcgYWN0aXZpdHkgYWNyb3NzIGV4ZWN2ZVxuMTE1OTpcdFx0ICovXG4xMTYwOlx0XHRpb191cmluZ190YXNrX2NhbmNlbCgpO1xuMTE2MTpcdFxuMTE2MjpcdFx0LyogRW5zdXJlIHRoZSBmaWxlcyB0YWJsZSBpcyBub3Qgc2hhcmVkLiAqL1xuMTE2MzpcdFx0cmV0dmFsID0gdW5zaGFyZV9maWxlcygpO1xuMTE2NDpcdFx0aWYgKHJldHZhbClcbjExNjU6XHRcdFx0Z290byBvdXQ7XG4xMTY2Olx0XG4xMTY3Olx0XHQvKlxuMTE2ODpcdFx0ICogV2UgaGF2ZSB0byBhcHBseSBDTE9FWEVDIGJlZm9yZSB3ZSBjaGFuZ2Ugd2hldGhlciB0aGUgcHJvY2VzcyBpc1xuMTE2OTpcdFx0ICogZHVtcGFibGUgKGluIHNldHVwX25ld19leGVjKSB0byBhdm9pZCBhIHJhY2Ugd2l0aCBhIHByb2Nlc3MgaW4gdXNlcnNwYWNlXG4xMTcwOlx0XHQgKiB0cnlpbmcgdG8gYWNjZXNzIHRoZSBzaG91bGQtYmUtY2xvc2VkIGZpbGUgZGVzY3JpcHRvcnMgb2YgYSBwcm9jZXNzXG4xMTcxOlx0XHQgKiB1bmRlcmdvaW5nIGV4ZWMoMikuXG4xMTcyOlx0XHQgKlxuMTE3MzpcdFx0ICogVGhpcyBjYW4gYmxvY2sgb24gZmlsZXN5c3RlbSAtXHUwMDNlZmx1c2goKSBoYW5kbGVycywgaW5jbHVkaW5nIHdhaXRpbmdcbjExNzQ6XHRcdCAqIGZvciBGVVNFIGRhZW1vbnMsIHNvIGRvIGl0IGJlZm9yZSBleGVjX21tYXAgdGFrZXMgdGhlXG4xMTc1Olx0XHQgKiBleGVjX3VwZGF0ZV9sb2NrLlxuMTE3NjpcdFx0ICogVGhpcyBtdXN0IGhhcHBlbiBhZnRlciB0aGUgcG9pbnQgb2Ygbm8gcmV0dXJuLCBhbmQgYWZ0ZXIgdW5zaGFyaW5nXG4xMTc3Olx0XHQgKiB0aGUgRkQgdGFibGUuXG4xMTc4Olx0XHQgKi9cbjExNzk6XHRcdGRvX2Nsb3NlX29uX2V4ZWMobWUtXHUwMDNlZmlsZXMpO1xuMTE4MDpcdFxuMTE4MTpcdFx0LypcbjExODI6XHRcdCAqIE11c3QgYmUgY2FsbGVkIF9iZWZvcmVfIGV4ZWNfbW1hcCgpIGFzIGJwcm0tXHUwMDNlbW0gaXNcbjExODM6XHRcdCAqIG5vdCB2aXNpYmxlIHVudGlsIHRoZW4uIERvaW5nIGl0IGhlcmUgYWxzbyBlbnN1cmVzXG4xMTg0Olx0XHQgKiB3ZSBkb24mIzM5O3QgcmFjZSBhZ2FpbnN0IHJlcGxhY2VfbW1fZXhlX2ZpbGUoKS5cbjExODU6XHRcdCAqL1xuMTE4NjpcdFx0cmV0dmFsID0gc2V0X21tX2V4ZV9maWxlKGJwcm0tXHUwMDNlbW0sIGJwcm1faWRlbnRpdHlfZmlsZShicHJtKSk7XG4xMTg3Olx0XHRpZiAocmV0dmFsKVxuMTE4ODpcdFx0XHRnb3RvIG91dDtcbjExODk6XHRcbjExOTA6XHRcdC8qIElmIHRoZSBiaW5hcnkgaXMgbm90IHJlYWRhYmxlIHRoZW4gZW5mb3JjZSBtbS1cdTAwM2VkdW1wYWJsZT0wICovXG4xMTkxOlx0XHR3b3VsZF9kdW1wKGJwcm0sIGJwcm0tXHUwMDNlZmlsZSk7XG4xMTkyOlx0XHRpZiAoYnBybS1cdTAwM2VoYXZlX2V4ZWNmZClcbjExOTM6XHRcdFx0d291bGRfZHVtcChicHJtLCBicHJtLVx1MDAzZWV4ZWN1dGFibGUpO1xuMTE5NDpcdFxuMTE5NTpcdFx0LypcbjExOTY6XHRcdCAqIFJlbGVhc2UgYWxsIG9mIHRoZSBvbGQgbW1hcCBzdHVmZlxuMTE5NzpcdFx0ICovXG4xMTk4Olx0XHRhY2N0X2FyZ19zaXplKGJwcm0sIDApO1xuMTE5OTpcdFx0cmV0dmFsID0gZXhlY19tbWFwKGJwcm0pO1xuMTIwMDpcdFx0aWYgKHJldHZhbClcbjEyMDE6XHRcdFx0Z290byBvdXQ7XG4xMjAyOlx0XG4xMjAzOlx0XHRicHJtLVx1MDAzZW1tID0gTlVMTDtcbjEyMDQ6XHRcbjEyMDU6XHRcdHJldHZhbCA9IGV4ZWNfdGFza19uYW1lc3BhY2VzKCk7XG4xMjA2Olx0XHRpZiAocmV0dmFsKVxuMTIwNzpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xMjA4Olx0XG4xMjA5Olx0I2lmZGVmIENPTkZJR19QT1NJWF9USU1FUlNcbjEyMTA6XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2bWUtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWdsb2NrKTtcbjEyMTE6XHRcdHBvc2l4X2NwdV90aW1lcnNfZXhpdChtZSk7XG4xMjEyOlx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2bWUtXHUwMDNlc2lnaGFuZC1cdTAwM2VzaWdsb2NrKTtcbjEyMTM6XHRcdGV4aXRfaXRpbWVycyhtZSk7XG4xMjE0Olx0XHRmbHVzaF9pdGltZXJfc2lnbmFscygpO1xuMTIxNTpcdCNlbmRpZlxuMTIxNjpcdFxuMTIxNzpcdFx0LypcbjEyMTg6XHRcdCAqIE1ha2UgdGhlIHNpZ25hbCB0YWJsZSBwcml2YXRlLlxuMTIxOTpcdFx0ICovXG4xMjIwOlx0XHRyZXR2YWwgPSB1bnNoYXJlX3NpZ2hhbmQobWUpO1xuMTIyMTpcdFx0aWYgKHJldHZhbClcbjEyMjI6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuMTIyMzpcdFxuMTIyNDpcdFx0bWUtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+KFBGX1JBTkRPTUlaRSB8IFBGX0ZPUktOT0VYRUMgfFxuMTIyNTpcdFx0XHRcdFx0XHRQRl9OT0ZSRUVaRSB8IFBGX05PX1NFVEFGRklOSVRZKTtcbjEyMjY6XHRcdGZsdXNoX3RocmVhZCgpO1xuMTIyNzpcdFx0bWUtXHUwMDNlcGVyc29uYWxpdHkgXHUwMDI2PSB+YnBybS1cdTAwM2VwZXJfY2xlYXI7XG4xMjI4Olx0XG4xMjI5Olx0XHRjbGVhcl9zeXNjYWxsX3dvcmtfc3lzY2FsbF91c2VyX2Rpc3BhdGNoKG1lKTtcbjEyMzA6XHRcbjEyMzE6XHRcdGlmIChicHJtLVx1MDAzZXNlY3VyZWV4ZWMpIHtcbjEyMzI6XHRcdFx0LyogTWFrZSBzdXJlIHBhcmVudCBjYW5ub3Qgc2lnbmFsIHByaXZpbGVnZWQgcHJvY2Vzcy4gKi9cbjEyMzM6XHRcdFx0bWUtXHUwMDNlcGRlYXRoX3NpZ25hbCA9IDA7XG4xMjM0Olx0XG4xMjM1Olx0XHRcdC8qXG4xMjM2Olx0XHRcdCAqIEZvciBzZWN1cmVleGVjLCByZXNldCB0aGUgc3RhY2sgbGltaXQgdG8gc2FuZSBkZWZhdWx0IHRvXG4xMjM3Olx0XHRcdCAqIGF2b2lkIGJhZCBiZWhhdmlvciBmcm9tIHRoZSBwcmlvciBybGltaXRzLiBUaGlzIGhhcyB0b1xuMTIzODpcdFx0XHQgKiBoYXBwZW4gYmVmb3JlIGFyY2hfcGlja19tbWFwX2xheW91dCgpLCB3aGljaCBleGFtaW5lc1xuMTIzOTpcdFx0XHQgKiBSTElNSVRfU1RBQ0ssIGJ1dCBhZnRlciB0aGUgcG9pbnQgb2Ygbm8gcmV0dXJuIHRvIGF2b2lkXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMjcKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogRmlsZSBEZXNjcmlwdG9yIE1hbmFnZW1lbnQgRHVyaW5nIGBleGVjdmVgKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgbW92aW5nIHRoZSBgZG9fY2xvc2Vfb25fZXhlYyhtZS0mZ3Q7ZmlsZXMpYCBjYWxsIGluIGBiZWdpbl9uZXdfZXhlY2AgZnVuY3Rpb24uIEl0IHNlZW1zIHRoYXQgcHJldmlvdXNseSwgdGhpcyBjYWxsIHdhcyBoYXBwZW5pbmcgKmFmdGVyKiBzb21lIGNydWNpYWwgb3BlcmF0aW9ucyBsaWtlIHNpZ25hbCBoYW5kbGVyIHVuc2hhcmluZyBhbmQgdGhyZWFkIGZsdXNoaW5nLiBOb3csIHRoZXkmIzM5O3JlIHNoaWZ0aW5nIGl0ICplYXJsaWVyKiBpbiB0aGUgc2VxdWVuY2UsIHJpZ2h0IGFmdGVyIGB1bnNoYXJlX2ZpbGVzKClgIGJ1dCAqYmVmb3JlKiB0aGUgbWVtb3J5IG1hcCBzZXR1cCBhbmQgZXhlY3V0YWJsZSBmaWxlIGJpbmRpbmcuIEludGVyZXN0aW5nLgoKVGhlIHJhdGlvbmFsZSBmb3IgdGhpcyBjaGFuZ2UgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBUaGUgY29tbWVudCBpbmRpY2F0ZXMgdGhhdCBgZG9fY2xvc2Vfb25fZXhlY2AgY2FuIHBvdGVudGlhbGx5IGJsb2NrIGR1ZSB0byBmaWxlc3lzdGVtIGZsdXNoIGhhbmRsZXJzLCBzcGVjaWZpY2FsbHkgd2FpdGluZyBvbiBGVVNFIGRhZW1vbnMuIE1ha2VzIHNlbnNlIOKAkyB0aG9zZSBJL08gb3BlcmF0aW9ucyBjYW4gYmUgYXN5bmNocm9ub3VzIGFuZCBsZWFkIHRvIGRlbGF5cy4gU28sIHRoZSBnb2FsIGlzIHRvIGV4ZWN1dGUgdGhpcyBjYWxsICpiZWZvcmUqIHdlIGdyYWIgdGhlIGBleGVjX3VwZGF0ZV9sb2NrYCBkdXJpbmcgYGV4ZWNfbW1hcGAuIFRoaXMgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgZGVhZGxvY2sgc2NlbmFyaW8gb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVjayB0aGF0IHRoZXkmIzM5O3JlIHRyeWluZyB0byBjaXJjdW12ZW50LiBUaGlzIGFsc28gcG9pbnRzIHRvIGVuc3VyaW5nIHRoZSBmaWxlIGRlc2NyaXB0b3IgdW5zaGFyaW5nIGhhcyBiZWVuIHBlcmZvcm1lZCBzbyB3ZSBkb24mIzM5O3QgZW5kIHVwIGNsb3NpbmcgZmlsZSBkZXNjcmlwdG9ycyBpbiB0aGUgd3JvbmcgcHJvY2VzcyBjb250ZXh0LiBFc3NlbnRpYWxseSwgdGhpcyBpcyBpbnRlbmRlZCB0byBhdm9pZCBwb3RlbnRpYWwgbG9jayBjb250ZW50aW9uIG9uIHRoZSBjcml0aWNhbCBgZXhlY191cGRhdGVfbG9ja2AgdGhhdCBpcyBjcml0aWNhbCBkdXJpbmcgdGhlIHByb2Nlc3Mgb2YgY3JlYXRpbmcgYSBuZXcgbWVtb3J5IG1hcCwgdGh1cyBlbnN1cmluZyB0aGF0IHRoZSBmaWxlIGRlc2NyaXB0b3IgY2xlYW51cCBoYXBwZW5zIGJlZm9yZSBtZW1vcnkgYWxsb2NhdGlvbi4gVGhlIGNyaXRpY2FsIGNvbnN0cmFpbnQgaXMgdGhhdCB0aGUgZmlsZSBkZXNjcmlwdG9yIHRhYmxlIG11c3QgaGF2ZSBiZWVuIHVuc2hhcmVkIGF0IHRoaXMgcG9pbnQuCgpOb3csIEkgbmVlZCB0byB2ZXJpZnkgd2hhdCBgZG9fY2xvc2Vfb25fZXhlY2AgYWN0dWFsbHkgKmRvZXMqLiBVbmRlcnN0YW5kaW5nIHRoZSBtZWNoYW5pY3Mgb2YgdGhhdCBmdW5jdGlvbiBpcyBrZXkgdG8gZnVsbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHNoaWZ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIGRvX2Nsb3NlX29uX2V4ZWMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZmlsZS5jPTg3OD1zdHJ1Y3QgZmlsZSAqZmlsZV9jbG9zZV9mZCh1bnNpZ25lZCBpbnQgZmQpXG4tLVxuZnMvZmlsZS5jLTg4OS1cbmZzL2ZpbGUuYzo4OTA6dm9pZCBkb19jbG9zZV9vbl9leGVjKHN0cnVjdCBmaWxlc19zdHJ1Y3QgKmZpbGVzKVxuZnMvZmlsZS5jLTg5MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NzcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBmcy9maWxlLmNgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBNeSBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB0aGF0IHRoZSByb290IG9mIHRoZSBwcm9ibGVtIGxpa2VseSBsaWVzIHdpdGhpbiB0aGUgZmlsZSBzeXN0ZW0gY29kZSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gZmlsZSBvcGVyYXRpb25zLiBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBgZnMvZmlsZS5jYCwgYW5kIEkgc3VzcGVjdCB0aGF0IGxpbmUgODkwIG9yIHRoZXJlYWJvdXRzIG1pZ2h0IGNvbnRhaW4gdGhlIGNydWNpYWwgY2x1ZS4gSSYjMzk7bGwgbmVlZCB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9maWxlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4ODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg4NTpcdFx0c3Bpbl91bmxvY2soXHUwMDI2ZmlsZXMtXHUwMDNlZmlsZV9sb2NrKTtcbiA4ODY6XHRcbiA4ODc6XHRcdHJldHVybiBmaWxlO1xuIDg4ODpcdH1cbiA4ODk6XHRcbiA4OTA6XHR2b2lkIGRvX2Nsb3NlX29uX2V4ZWMoc3RydWN0IGZpbGVzX3N0cnVjdCAqZmlsZXMpXG4gODkxOlx0e1xuIDg5MjpcdFx0dW5zaWduZWQgaTtcbiA4OTM6XHRcdHN0cnVjdCBmZHRhYmxlICpmZHQ7XG4gODk0Olx0XG4gODk1Olx0XHQvKiBleGVjIHVuc2hhcmVzIGZpcnN0ICovXG4gODk2Olx0XHRzcGluX2xvY2soXHUwMDI2ZmlsZXMtXHUwMDNlZmlsZV9sb2NrKTtcbiA4OTc6XHRcdGZvciAoaSA9IDA7IDsgaSYjNDM7JiM0MzspIHtcbiA4OTg6XHRcdFx0dW5zaWduZWQgbG9uZyBzZXQ7XG4gODk5Olx0XHRcdHVuc2lnbmVkIGZkID0gaSAqIEJJVFNfUEVSX0xPTkc7XG4gOTAwOlx0XHRcdGZkdCA9IGZpbGVzX2ZkdGFibGUoZmlsZXMpO1xuIDkwMTpcdFx0XHRpZiAoZmQgXHUwMDNlPSBmZHQtXHUwMDNlbWF4X2ZkcylcbiA5MDI6XHRcdFx0XHRicmVhaztcbiA5MDM6XHRcdFx0c2V0ID0gZmR0LVx1MDAzZWNsb3NlX29uX2V4ZWNbaV07XG4gOTA0Olx0XHRcdGlmICghc2V0KVxuIDkwNTpcdFx0XHRcdGNvbnRpbnVlO1xuIDkwNjpcdFx0XHRmZHQtXHUwMDNlY2xvc2Vfb25fZXhlY1tpXSA9IDA7XG4gOTA3Olx0XHRcdGZvciAoIDsgc2V0IDsgZmQmIzQzOyYjNDM7LCBzZXQgXHUwMDNlXHUwMDNlPSAxKSB7XG4gOTA4Olx0XHRcdFx0c3RydWN0IGZpbGUgKmZpbGU7XG4gOTA5Olx0XHRcdFx0aWYgKCEoc2V0IFx1MDAyNiAxKSlcbiA5MTA6XHRcdFx0XHRcdGNvbnRpbnVlO1xuIDkxMTpcdFx0XHRcdGZpbGUgPSBmZHQtXHUwMDNlZmRbZmRdO1xuIDkxMjpcdFx0XHRcdGlmICghZmlsZSlcbiA5MTM6XHRcdFx0XHRcdGNvbnRpbnVlO1xuIDkxNDpcdFx0XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihmZHQtXHUwMDNlZmRbZmRdLCBOVUxMKTtcbiA5MTU6XHRcdFx0XHRfX3B1dF91bnVzZWRfZmQoZmlsZXMsIGZkKTtcbiA5MTY6XHRcdFx0XHRzcGluX3VubG9jayhcdTAwMjZmaWxlcy1cdTAwM2VmaWxlX2xvY2spO1xuIDkxNzpcdFx0XHRcdGZpbHBfY2xvc2UoZmlsZSwgZmlsZXMpO1xuIDkxODpcdFx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuIDkxOTpcdFx0XHRcdHNwaW5fbG9jayhcdTAwMjZmaWxlcy1cdTAwM2VmaWxlX2xvY2spO1xuIDkyMDpcdFx0XHR9XG4gOTIxOlx0XG4gOTIyOlx0XHR9XG4gOTIzOlx0XHRzcGluX3VubG9jayhcdTAwMjZmaWxlcy1cdTAwM2VmaWxlX2xvY2spO1xuIDkyNDpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM5NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipBbmFseXppbmcgUG90ZW50aWFsIEZhaWx1cmUgUG9pbnRzIGluIGBiZWdpbl9uZXdfZXhlY2AqKgoKUmlnaHQsIEkmIzM5O20gZGl2aW5nIGludG8gYGJlZ2luX25ld19leGVjYCBhbmQgdGhpbmtpbmcgYWJvdXQgaXRzIHJlc2lsaWVuY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGFsbCB0aGUgcG90ZW50aWFsIGZhaWx1cmUgcG9pbnRzIGFuZCBob3cgdGhlIGNvZGUgaGFuZGxlcyB0aGVtLCBlc3BlY2lhbGx5IHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIGZ1bmN0aW9uLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGZhaWx1cmUgbW9kZXMgcmVsYXRlZCB0byBgc2V0X21tX2V4ZV9maWxlKClgIGFuZCBgZXhlY19tbWFwKClgLiBJZiBlaXRoZXIgb2YgdGhvc2UgZmFpbHMsIEkgc2VlIHRoYXQgdGhlIGNvZGUgYnJhbmNoZXMgdG8gYGdvdG8gb3V0O2Agb3IgYGdvdG8gb3V0X3VubG9jaztgLiBUaGF0JiMzOTtzIHRoZSBtYWluIHBhdGggSSBuZWVkIHRvIHNjcnV0aW5pemUg4oCTIHRoZSBlcnJvciBoYW5kbGluZyBpcyBjcml0aWNhbCBoZXJlLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhvc2UgZXJyb3IgcGF0aHMgYXJlIGNsZWFuLCB0aGF0IHJlc291cmNlcyBhcmUgcHJvcGVybHkgcmVsZWFzZWQsIGFuZCB0aGF0IHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyBhcmUgYXBwcm9wcmlhdGVseSBub3RpZmllZCBvZiB0aGUgcHJvYmxlbS4gVGltZSB0byBkaWcgZGVlcGVyIGludG8gdGhlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGlzIGZ1bmN0aW9uIGFuZCBtYWtlIHN1cmUgd2UgaGF2ZSBhIHJvYnVzdCBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXhlYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjYwOlx0XHRwZXJmX2V2ZW50X2V4ZWMoKTtcbjEyNjE6XHRcbjEyNjI6XHRcdC8qXG4xMjYzOlx0XHQgKiBJZiB0aGUgb3JpZ2luYWwgZmlsZW5hbWUgd2FzIGVtcHR5LCBhbGxvY19icHJtKCkgbWFkZSB1cCBhIHBhdGhcbjEyNjQ6XHRcdCAqIHRoYXQgd2lsbCBwcm9iYWJseSBub3QgYmUgdXNlZnVsIHRvIGFkbWlucyBydW5uaW5nIHBzIG9yIHNpbWlsYXIuXG4xMjY1Olx0XHQgKiBMZXQmIzM5O3MgZml4IGl0IHVwIHRvIGJlIHNvbWV0aGluZyByZWFzb25hYmxlLlxuMTI2NjpcdFx0ICovXG4xMjY3Olx0XHRpZiAoYnBybS1cdTAwM2Vjb21tX2Zyb21fZGVudHJ5KSB7XG4xMjY4Olx0XHRcdHN0cnVjdCBmaWxlICpjb21tX2ZpbGUgPSBicHJtX2lkZW50aXR5X2ZpbGUoYnBybSk7XG4xMjY5Olx0XG4xMjcwOlx0XHRcdC8qXG4xMjcxOlx0XHRcdCAqIEhvbGQgUkNVIGxvY2sgdG8ga2VlcCB0aGUgbmFtZSBmcm9tIGJlaW5nIGZyZWVkIGJlaGluZCBvdXIgYmFjay5cbjEyNzI6XHRcdFx0ICogVXNlIGFjcXVpcmUgc2VtYW50aWNzIHRvIG1ha2Ugc3VyZSB0aGUgdGVybWluYXRpbmcgTlVMIGZyb21cbjEyNzM6XHRcdFx0ICogX19kX2FsbG9jKCkgaXMgc2Vlbi5cbjEyNzQ6XHRcdFx0ICpcbjEyNzU6XHRcdFx0ICogTm90ZSwgd2UmIzM5O3JlIGRlbGliZXJhdGVseSBzbG9wcHkgaGVyZS4gV2UgZG9uJiMzOTt0IG5lZWQgdG8gY2FyZSBhYm91dFxuMTI3NjpcdFx0XHQgKiBkZXRlY3RpbmcgYSBjb25jdXJyZW50IHJlbmFtZSBhbmQganVzdCB3YW50IGEgdGVybWluYXRlZCBuYW1lLlxuMTI3NzpcdFx0XHQgKi9cbjEyNzg6XHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuMTI3OTpcdFx0XHRfX3NldF90YXNrX2NvbW0obWUsIHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2Y29tbV9maWxlLVx1MDAzZWZfcGF0aC5kZW50cnktXHUwMDNlZF9uYW1lLm5hbWUpLFxuMTI4MDpcdFx0XHRcdFx0dHJ1ZSk7XG4xMjgxOlx0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMTI4MjpcdFx0fSBlbHNlIHtcbjEyODM6XHRcdFx0X19zZXRfdGFza19jb21tKG1lLCBrYmFzZW5hbWUoYnBybS1cdTAwM2VmaWxlbmFtZSksIHRydWUpO1xuMTI4NDpcdFx0fVxuMTI4NTpcdFxuMTI4NjpcdFx0LyogQW4gZXhlYyBjaGFuZ2VzIG91ciBkb21haW4uIFdlIGFyZSBubyBsb25nZXIgcGFydCBvZiB0aGUgdGhyZWFkXG4xMjg3Olx0XHQgICBncm91cCAqL1xuMTI4ODpcdFx0V1JJVEVfT05DRShtZS1cdTAwM2VzZWxmX2V4ZWNfaWQsIG1lLVx1MDAzZXNlbGZfZXhlY19pZCAmIzQzOyAxKTtcbjEyODk6XHRcdGZsdXNoX3NpZ25hbF9oYW5kbGVycyhtZSwgMCk7XG4xMjkwOlx0XG4xMjkxOlx0XHRyZXR2YWwgPSBzZXRfY3JlZF91Y291bnRzKGJwcm0tXHUwMDNlY3JlZCk7XG4xMjkyOlx0XHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuMTI5MzpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xMjk0Olx0XG4xMjk1Olx0XHQvKlxuMTI5NjpcdFx0ICogaW5zdGFsbCB0aGUgbmV3IGNyZWRlbnRpYWxzIGZvciB0aGlzIGV4ZWN1dGFibGVcbjEyOTc6XHRcdCAqL1xuMTI5ODpcdFx0c2VjdXJpdHlfYnBybV9jb21taXR0aW5nX2NyZWRzKGJwcm0pO1xuMTI5OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzIxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0LgoKKipEZWNvbnN0cnVjdGluZyBgYmVnaW5fbmV3X2V4ZWNgIC0gQSBEZWVwIERpdmUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIGBiZWdpbl9uZXdfZXhlY2AuIEkgbmVlZCB0byByZWFsbHkgdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgZnVuY3Rpb25pbmcgYXMgaXQmIzM5O3MgdGhlIGNvcmUgb2YgaG93IHdlIGtpY2sgb2ZmIGEgbmV3IGV4ZWN1dGlvbiBjb250ZXh0LiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSAqcmVzdCogb2YgdGhlIGZ1bmN0aW9uLCBiZWNhdXNlIHRoZSBpbml0aWFsIHBhcnRzIGFyZSBwcm9iYWJseSBib2lsZXJwbGF0ZSBvciB3ZWxsIHVuZGVyc3Rvb2QgYWxyZWFkeS4gSSB3YW50IHRvIHNlZSB0aGUgbWVhdC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgaW50cmljYWNpZXMuIFNwZWNpZmljYWxseSwgaG93IGl0IGhhbmRsZXMgc2V0dXAsIHJlc291cmNlIGFsbG9jYXRpb24sIGFueSBuZWNlc3NhcnkgaW5pdGlhbGl6YXRpb24sIGFuZCBtb3N0IGltcG9ydGFudGx5LCB3aGVyZSB0aGUgY29udHJvbCBmbG93IGhhbmRzIG92ZXIgdGhlIGV4ZWN1dGlvbiB0byBzb21ldGhpbmcgZWxzZS4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IGl0IGlzIHJlc3BvbnNpYmxlIGZvciBwcmVwYXJpbmcgYW4gZW52aXJvbm1lbnQsIHBlcmhhcHMgc2V0dGluZyB1cCBtZW1vcnkgc3BhY2VzLCB0aHJlYWRzLCBzaWduYWwgaGFuZGxlcnMsIGFuZCB0aGVuIHBhc3NpbmcgdGhlIGJhdG9uLiBNeSBnb2FsIGlzIHRvIGdyYXNwIHRoZSBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zLCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIGZvciBvcHRpbWl6YXRpb24sIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgYnVncyBsdXJraW5nIGluIHRoZSBzaGFkb3dzLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIHByb3ZpZGUgdGhlICYjMzQ7Z2VuZXNpcyYjMzQ7IHRvIGEgbmV3IHRocmVhZCBvciBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4ZWMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTMwMDpcdFx0Y29tbWl0X2NyZWRzKGJwcm0tXHUwMDNlY3JlZCk7XG4xMzAxOlx0XHRicHJtLVx1MDAzZWNyZWQgPSBOVUxMO1xuMTMwMjpcdFxuMTMwMzpcdFx0LypcbjEzMDQ6XHRcdCAqIERpc2FibGUgbW9uaXRvcmluZyBmb3IgcmVndWxhciB1c2Vyc1xuMTMwNTpcdFx0ICogd2hlbiBleGVjdXRpbmcgc2V0dWlkIGJpbmFyaWVzLiBNdXN0XG4xMzA2Olx0XHQgKiB3YWl0IHVudGlsIG5ldyBjcmVkZW50aWFscyBhcmUgY29tbWl0dGVkXG4xMzA3Olx0XHQgKiBieSBjb21taXRfY3JlZHMoKSBhYm92ZVxuMTMwODpcdFx0ICovXG4xMzA5Olx0XHRpZiAodGFza19leGVjX3N0YXRlX2dldF9kdW1wYWJsZShtZSkgIT0gVEFTS19EVU1QQUJMRV9PV05FUilcbjEzMTA6XHRcdFx0cGVyZl9ldmVudF9leGl0X3Rhc2sobWUpO1xuMTMxMTpcdFx0LypcbjEzMTI6XHRcdCAqIGNyZWRfZ3VhcmRfbXV0ZXggbXVzdCBiZSBoZWxkIGF0IGxlYXN0IHRvIHRoaXMgcG9pbnQgdG8gcHJldmVudFxuMTMxMzpcdFx0ICogcHRyYWNlX2F0dGFjaCgpIGZyb20gYWx0ZXJpbmcgb3VyIGRldGVybWluYXRpb24gb2YgdGhlIHRhc2smIzM5O3NcbjEzMTQ6XHRcdCAqIGNyZWRlbnRpYWxzOyBhbnkgdGltZSBhZnRlciB0aGlzIGl0IG1heSBiZSB1bmxvY2tlZC5cbjEzMTU6XHRcdCAqL1xuMTMxNjpcdFx0c2VjdXJpdHlfYnBybV9jb21taXR0ZWRfY3JlZHMoYnBybSk7XG4xMzE3Olx0XG4xMzE4Olx0XHQvKiBQYXNzIHRoZSBvcGVuZWQgYmluYXJ5IHRvIHRoZSBpbnRlcnByZXRlci4gKi9cbjEzMTk6XHRcdGlmIChicHJtLVx1MDAzZWhhdmVfZXhlY2ZkKSB7XG4xMzIwOlx0XHRcdHN0cnVjdCBmaWxlICpleGVjdXRhYmxlID0gYnBybS1cdTAwM2VleGVjdXRhYmxlO1xuMTMyMTpcdFxuMTMyMjpcdFx0XHQvKiBtbS1cdTAwM2VleGVfZmlsZSBjYXJyaWVzIGl0cyBvd24gd3JpdGUgZGVuaWFsIG5vdyBzbyBkcm9wIGl0LiAqL1xuMTMyMzpcdFx0XHRleGVfZmlsZV9hbGxvd193cml0ZV9hY2Nlc3MoZXhlY3V0YWJsZSk7XG4xMzI0Olx0XHRcdGJwcm0tXHUwMDNlZXhlY3V0YWJsZSA9IE5VTEw7XG4xMzI1Olx0XHRcdHJldHZhbCA9IEZEX0FERCgwLCBleGVjdXRhYmxlKTtcbjEzMjY6XHRcdFx0aWYgKHJldHZhbCBcdTAwM2MgMCkge1xuMTMyNzpcdFx0XHRcdC8qIFRoZSByZWZlcmVuY2Ugd2FzIG5vdCBjb25zdW1lZC4gKi9cbjEzMjg6XHRcdFx0XHRmcHV0KGV4ZWN1dGFibGUpO1xuMTMyOTpcdFx0XHRcdGdvdG8gb3V0X3VubG9jaztcbjEzMzA6XHRcdFx0fVxuMTMzMTpcdFx0XHRicHJtLVx1MDAzZWV4ZWNmZCA9IHJldHZhbDtcbjEzMzI6XHRcdH1cbjEzMzM6XHRcdHJldHVybiAwO1xuMTMzNDpcdFxuMTMzNTpcdG91dF91bmxvY2s6XG4xMzM2Olx0XHR1cF93cml0ZShcdTAwMjZtZS1cdTAwM2VzaWduYWwtXHUwMDNlZXhlY191cGRhdGVfbG9jayk7XG4xMzM3Olx0XHRpZiAoIWJwcm0tXHUwMDNlY3JlZClcbjEzMzg6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1lLVx1MDAzZXNpZ25hbC1cdTAwM2VjcmVkX2d1YXJkX211dGV4KTtcbjEzMzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE5NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBJJiMzOTttIHJlYWR5LiBMZXQmIzM5O3MgZGl2ZSBpbi4KCioqQW5hbHl6aW5nIExpbmVzIDEzNDAtMTM2MCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgcHVsbCB1cCBsaW5lcyAxMzQwLTEzNjAuIEJhc2VkIG9uIG15IGV4aXN0aW5nIGtub3dsZWRnZSBvZiB0aGUgZmllbGQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBzZWN0aW9uIGFkZHJlc3NlcyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciBwaWVjZSwgYW5kIHdoYXQgdGhlIGtleSBhcmd1bWVudHMgb3IgZmluZGluZ3MgYXJlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGUgY2VudHJhbCB0aGVzaXMgb2YgdGhpcyBzZWN0aW9uLCBhbnkgc3VwcG9ydGluZyBldmlkZW5jZSBwcmVzZW50ZWQsIGFuZCBob3cgaXQgY29ubmVjdHMgdG8gdGhlIGJyb2FkZXIgdG9waWMuIElzIHRoaXMgYSBjcml0aWNhbCB0dXJuaW5nIHBvaW50PyBEb2VzIHRoaXMgc2VjdGlvbiBhZGQgbnVhbmNlIHRvIGEgcHJldmlvdXMgYXJndW1lbnQ/IFBlcmhhcHMgaXQgaW50cm9kdWNlcyBhIG5ldyB2YXJpYWJsZSB0aGF0IHdpbGwgY2hhbmdlIHdoYXQgSSBuZWVkIHRvIGNvbnNpZGVyPyBJJiMzOTtsbCBuZWVkIHRvIGRpc3NlY3QgdGhlIHNwZWNpZmljcywgaWRlbnRpZnlpbmcgdGhlIGtleSBjb25jZXB0cyBhbmQgamFyZ29uIHVzZWQsIGFuZCB3aGV0aGVyIHRoZSBsYW5ndWFnZSBpcyBwcmVjaXNlIGFuZCByaWdvcm91cy4gSSYjMzk7bSBsb29raW5nIGZvciBhbnkgd2Vha25lc3NlcyBpbiB0aGUgbG9naWMsIGFueSBhc3N1bXB0aW9ucyB0aGF0IG5lZWQgdG8gYmUgY2hhbGxlbmdlZCwgYW5kIGFueSBvcHBvcnR1bml0aWVzIHRvIGV4dGVuZCBvciBidWlsZCB1cG9uIHRoZSBpZGVhcyBwcmVzZW50ZWQuIEkmIzM5O2xsIGJlIGNyaXRpY2FsbHkgZXZhbHVhdGluZywgcXVlc3Rpb25pbmcsIGFuZCBjb25uZWN0aW5nLiBBbmQgZmluYWxseSwgSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjb25uZWN0cyB0byBwcmlvciBkaXNjdXNzaW9ucyB0aGF0IEkmIzM5O20gYXdhcmUgb2YgaW4gdGhlIGxhcmdlciBmaWVsZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leGVjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzNDA6XHRvdXQ6XG4xMzQxOlx0XHRyZXR1cm4gcmV0dmFsO1xuMTM0MjpcdH1cbjEzNDM6XHRFWFBPUlRfU1lNQk9MKGJlZ2luX25ld19leGVjKTtcbjEzNDQ6XHRcbjEzNDU6XHR2b2lkIHdvdWxkX2R1bXAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgc3RydWN0IGZpbGUgKmZpbGUpXG4xMzQ2Olx0e1xuMTM0NzpcdFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XG4xMzQ4Olx0XHRzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCA9IGZpbGVfbW50X2lkbWFwKGZpbGUpO1xuMTM0OTpcdFx0aWYgKGlub2RlX3Blcm1pc3Npb24oaWRtYXAsIGlub2RlLCBNQVlfUkVBRCkgXHUwMDNjIDApIHtcbjEzNTA6XHRcdFx0c3RydWN0IHVzZXJfbmFtZXNwYWNlICpvbGQsICp1c2VyX25zO1xuMTM1MTpcdFx0XHRicHJtLVx1MDAzZWludGVycF9mbGFncyB8PSBCSU5QUk1fRkxBR1NfRU5GT1JDRV9OT05EVU1QO1xuMTM1MjpcdFxuMTM1MzpcdFx0XHQvKiBFbnN1cmUgYnBybS1cdTAwM2V1c2VyX25zIGNvbnRhaW5zIHRoZSBleGVjdXRhYmxlLiAqL1xuMTM1NDpcdFx0XHR1c2VyX25zID0gb2xkID0gYnBybS1cdTAwM2V1c2VyX25zO1xuMTM1NTpcdFx0XHR3aGlsZSAoKHVzZXJfbnMgIT0gXHUwMDI2aW5pdF91c2VyX25zKSBcdTAwMjZcdTAwMjZcbjEzNTY6XHRcdFx0ICAgICAgICFwcml2aWxlZ2VkX3dydF9pbm9kZV91aWRnaWQodXNlcl9ucywgaWRtYXAsIGlub2RlKSlcbjEzNTc6XHRcdFx0XHR1c2VyX25zID0gdXNlcl9ucy1cdTAwM2VwYXJlbnQ7XG4xMzU4Olx0XG4xMzU5Olx0XHRcdGlmIChvbGQgIT0gdXNlcl9ucykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODM3CgkJCQkJCQlvdXRwdXQ6IDE5OQoJCQkJCQkJdGhvdWdodHM6IDYzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgS2VybmVsIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBvZiB0aGlzIHBhdGNoIGludm9sdmVzIGEgcmUtb3JkZXJpbmcgd2l0aGluIHRoZSBgYmVnaW5fbmV3X2V4ZWMoc3RydWN0IGxpbnV4X2JpbnBybSAqIGJwcm0pYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBzaGlmdHMgdGhlIGNhbGwgdG8gYGRvX2Nsb3NlX29uX2V4ZWMobWUtJmd0O2ZpbGVzKWAgZWFybGllciBpbiB0aGUgZXhlY3V0aW9uIGZsb3cuIEN1cnJlbnRseSwgaXQmIzM5O3MgcnVuIGJlZm9yZSBzZXZlcmFsIGltcG9ydGFudCBzdGVwcyBpbiBgYmVnaW5fbmV3X2V4ZWNgLCBsaWtlIGBzZXRfbW1fZXhlX2ZpbGUoKWAsIGB3b3VsZF9kdW1wKClgLCBhbmQgdGhlIGNyaXRpY2FsIGBleGVjX21tYXAoYnBybSlgIGNhbGwsIHdoaWNoLCBjcnVjaWFsbHksIGFjcXVpcmVzIHRoZSBgZXhlY191cGRhdGVfbG9ja2AuIEJlZm9yZSB0aGUgcGF0Y2gsIGl0IHdhcyBsb2NhdGVkIGFmdGVyIGBjbGVhcl9zeXNjYWxsX3dvcmtfc3lzY2FsbF91c2VyX2Rpc3BhdGNoKG1lKTtgIGluc2lkZSB0aGUgY3JpdGljYWwgcmVnaW9uLgoKVGhlIGNvcmUgcmVhc29uIGZvciB0aGlzIGNoYW5nZSBzZWVtcyB0byBiZSB0byBhZGRyZXNzIHBvdGVudGlhbCBsb2NraW5nIGlzc3VlcyBhbmQsIHNwZWNpZmljYWxseSwgZGVhZGxvY2sgY29uZGl0aW9ucy4gVGhlIGBkb19jbG9zZV9vbl9leGVjYCBvcGVyYXRpb24gY2FuIHBvdGVudGlhbGx5IGJsb2NrLCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggZmlsZXN5c3RlbSBmbHVzaCBoYW5kbGVycyAobGlrZSB0aG9zZSBpbiBGVVNFIGRhZW1vbnMpLiBJZiB0aGlzIGJsb2NraW5nIHdlcmUgdG8gaGFwcGVuICp3aGlsZSogaG9sZGluZyB0aGUgYGV4ZWNfdXBkYXRlX2xvY2tgIGFjcXVpcmVkIGJ5IGBleGVjX21tYXAoKWAsIGl0IGNyZWF0ZXMgYSBkZWFkbG9jayByaXNrLiBUaGlzIHJlb3JkZXJpbmcgbW92ZXMgdGhlIGBjbG9zZV9vbl9leGVjYCBvcGVyYXRpb24gdG8gaGFwcGVuIGJlZm9yZSBgZXhlY19tbWFwYCBhY3F1aXJlcyB0aGUgbG9jaywgd2hpY2ggZWZmZWN0aXZlbHkgcmVkdWNlcyB0aGUgd2luZG93IGZvciBwb3RlbnRpYWwgZGVhZGxvY2tzLiBBbHNvLCBtb3ZpbmcgaXQgZWFybGllciBlbnN1cmVzIGBjbG9zZV9vbl9leGVjYCBmaWxlcyBhcmUgY2xvc2VkIGJlZm9yZSBtb2RpZnlpbmcgZHVtcGFiaWxpdHkvbW1hcC4KCk5vdywgdGhlIGltcG9ydGFudCBwYXJ0LiBNeSBtYWluIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IG1lbW9yeS1yZWxhdGVkIHZ1bG5lcmFiaWxpdGllcy4gSSYjMzk7dmUgY29uc2lkZXJlZCBhbGwgdGhlIHBvdGVudGlhbCBwaXRmYWxsczoKCjEuICAqKlVuaW5pdGlhbGl6ZWQgZGF0YSBiZWluZyBleHBvc2VkIHRvIHVzZXIgc3BhY2U/KiogTm8sIHRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIGFueSBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHVzZXIgc3BhY2UgdmlhIGNvcHkgb3BlcmF0aW9ucywgb3IgYW55IHVuaW5pdGlhbGl6ZWQgZmllbGRzLgoyLiAgKipDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8qKiBJIHNlZSBubyBuZXcgY29uZGl0aW9uYWwgbG9naWMgdGhhdCByZWxpZXMgb24gdW5pbml0aWFsaXplZCBkYXRhLgozLiAgKipVbmluaXRpYWxpemVkIGZpZWxkcyBpbiBuZXdseSBhbGxvY2F0ZWQgZGF0YSBzdHJ1Y3R1cmVzPyoqIFRoaXMgaXMgYW5vdGhlciBjb25jZXJuIEkgaGF2ZSwgYW5kIEkgZG9uJiMzOTt0IHNlZSBhbnkgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgYWxsb2NhdGVkIG9yIGluaXRpYWxpemVkIGluIGEgd2F5IHRoYXQgY291bGQgbGVhZCB0byByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBsYXRlci4KNC4gICoqQm91bmRzIGNoZWNrcyBvciBidWZmZXIgbWFuaXB1bGF0aW9uIGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSBhY2Nlc3M/KiogTm8uIEkgZG9uJiMzOTt0IHNlZSBhbnkgbW9kaWZpY2F0aW9ucyB0byBib3VuZHMgY2hlY2tzIHRoYXQgY291bGQgcmVzdWx0IGluIHVuaW5pdGlhbGl6ZWQgYnl0ZSByZWFkcywgb3IgY2hhbmdlcyBpbiBsb2dpYyByZWxhdGVkIHRvIGFjY2VzcyBvZiBleGlzdGluZyBidWZmZXJzLgoKVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIGZyb20gYW4gKnVuaW5pdGlhbGl6ZWQgbWVtb3J5KiBwZXJzcGVjdGl2ZS4gVGhlcmUgYXJlIG5vIGFsbG9jYXRpb25zLCBjb3BpZXMsIG9yIGV4cG9zdXJlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIHJpc2tzIGhlcmUgYXJlIG5vdCBhYm91dCBtZW1vcnkgKmNvbnRlbnQqLCBidXQgYWJvdXQgbG9jayBvcmRlciwgb2JqZWN0IGxpZmV0aW1lcywgYW5kIHBvdGVudGlhbGx5IGluY29ycmVjdCBlcnJvciBoYW5kbGluZy4gVGhlIHN0YW5kYXJkIGRldGVjdG9ycyBmb3IgdGhlc2Uga2luZHMgb2YgcHJvYmxlbXMsIGxpa2UgTE9DS0RFUCBhbmQgS0FTQU4sIGFyZSBwZXJmZWN0bHkgYWRlcXVhdGUgdG8gY2F0Y2ggYW55IGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IHRoZSBjaGFuZ2UgaW4gbG9ja2luZyBvcmRlci4gS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIgKEtNU0FOKSBpcyBub3QgbmVlZGVkIGJlY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgbm90IHRoZSBwcm9ibGVtIGhlcmUuIEl0JiMzOTtzIHRoZSBvcmRlciBhbmQgaW50ZXJhY3Rpb25zIG9mIGxvY2tzLCB3aGljaCBhcmUgYmV0dGVyIGlkZW50aWZpZWQgYnkgdGhlIHNhbml0aXplcnMgZm9yIHRob3NlIHNwZWNpZmljIGNvbmNlcm5zLgoKU28sIHRoZSByZWFzb25pbmcgaXMgY2xlYXI6IHRoZSBwYXRjaCBtb3ZlcyBgZG9fY2xvc2Vfb25fZXhlY2AgZWFybGllciB0byBhdm9pZCBkZWFkbG9ja3MsIGFuZCBpdCBkb2VzIG5vdCBhZmZlY3QgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gV2Ugc2hvdWxkIGJlIGdvb2QgdG8gZ28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIHRoZSBpbnZvY2F0aW9uIG9mIGBkb19jbG9zZV9vbl9leGVjKG1lLVx1MDAzZWZpbGVzKWAgZWFybGllciBpbiBgYmVnaW5fbmV3X2V4ZWMoKWAsIHBsYWNpbmcgaXQgYmVmb3JlIGBzZXRfbW1fZXhlX2ZpbGUoKWAgYW5kIGBleGVjX21tYXAoKWAuIFRoaXMgYXZvaWRzIGhvbGRpbmcgYGV4ZWNfdXBkYXRlX2xvY2tgIHdoaWxlIGZpbGVzeXN0ZW0gYC1cdTAwM2VmbHVzaCgpYCBoYW5kbGVycyAoc3VjaCBhcyBGVVNFKSBydW4gZHVyaW5nIGBmaWxwX2Nsb3NlKClgLCByZXNvbHZpbmcgcG90ZW50aWFsIGxvY2tpbmcvZGVhZGxvY2sgYW5kIGNvbmN1cnJlbmN5IGlzc3Vlcy5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgY29udHJvbCBmbG93IGFuZCBsb2NrIG9yZGVyaW5nIGFkanVzdG1lbnQgd2l0aGluIHByb2Nlc3MgZXhlY3V0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIGFsbG9jYXRlLCBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdGFjay9oZWFwIGJ1ZmZlcnMsIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBBbnkgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGxvY2tpbmcgb3IgZmlsZSBkZXNjcmlwdG9yIHJlZmVyZW5jZSBsaWZlY3ljbGVzIGFyZSBtb25pdG9yZWQgYnkgTE9DS0RFUCBhbmQgc3RhbmRhcmQgS0FTQU4gYnVpbGRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyB0aGUgaW52b2NhdGlvbiBvZiBgZG9fY2xvc2Vfb25fZXhlYyhtZS1cdTAwM2VmaWxlcylgIGVhcmxpZXIgaW4gYGJlZ2luX25ld19leGVjKClgLCBwbGFjaW5nIGl0IGJlZm9yZSBgc2V0X21tX2V4ZV9maWxlKClgIGFuZCBgZXhlY19tbWFwKClgLiBUaGlzIGF2b2lkcyBob2xkaW5nIGBleGVjX3VwZGF0ZV9sb2NrYCB3aGlsZSBmaWxlc3lzdGVtIGAtXHUwMDNlZmx1c2goKWAgaGFuZGxlcnMgKHN1Y2ggYXMgRlVTRSkgcnVuIGR1cmluZyBgZmlscF9jbG9zZSgpYCwgcmVzb2x2aW5nIHBvdGVudGlhbCBsb2NraW5nL2RlYWRsb2NrIGFuZCBjb25jdXJyZW5jeSBpc3N1ZXMuXG5cblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhIGNvbnRyb2wgZmxvdyBhbmQgbG9jayBvcmRlcmluZyBhZGp1c3RtZW50IHdpdGhpbiBwcm9jZXNzIGV4ZWN1dGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCBhbGxvY2F0ZSwgb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RhY2svaGVhcCBidWZmZXJzLCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZS4gQW55IHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBsb2NraW5nIG9yIGZpbGUgZGVzY3JpcHRvciByZWZlcmVuY2UgbGlmZWN5Y2xlcyBhcmUgbW9uaXRvcmVkIGJ5IExPQ0tERVAgYW5kIHN0YW5kYXJkIEtBU0FOIGJ1aWxkcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMTozNDo1OS4xMTg1MjE4MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2NzIwMDEyNjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJlZ2luX25ld19leGVjXCIsXG4gICAgXCJkb19jbG9zZV9vbl9leGVjXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyB0aGUgaW52b2NhdGlvbiBvZiBgZG9fY2xvc2Vfb25fZXhlYyhtZS1cXHUwMDNlZmlsZXMpYCBlYXJsaWVyIGluIGBiZWdpbl9uZXdfZXhlYygpYCwgcGxhY2luZyBpdCBiZWZvcmUgYHNldF9tbV9leGVfZmlsZSgpYCBhbmQgYGV4ZWNfbW1hcCgpYC4gVGhpcyBhdm9pZHMgaG9sZGluZyBgZXhlY191cGRhdGVfbG9ja2Agd2hpbGUgZmlsZXN5c3RlbSBgLVxcdTAwM2VmbHVzaCgpYCBoYW5kbGVycyAoc3VjaCBhcyBGVVNFKSBydW4gZHVyaW5nIGBmaWxwX2Nsb3NlKClgLCByZXNvbHZpbmcgcG90ZW50aWFsIGxvY2tpbmcvZGVhZGxvY2sgYW5kIGNvbmN1cnJlbmN5IGlzc3Vlcy5cXG5cXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYSBjb250cm9sIGZsb3cgYW5kIGxvY2sgb3JkZXJpbmcgYWRqdXN0bWVudCB3aXRoaW4gcHJvY2VzcyBleGVjdXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSwgYWxsb2NhdGUsIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0YWNrL2hlYXAgYnVmZmVycywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UuIEFueSByaXNrcyBhc3NvY2lhdGVkIHdpdGggbG9ja2luZyBvciBmaWxlIGRlc2NyaXB0b3IgcmVmZXJlbmNlIGxpZmVjeWNsZXMgYXJlIG1vbml0b3JlZCBieSBMT0NLREVQIGFuZCBzdGFuZGFyZCBLQVNBTiBidWlsZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGV4ZWN2ZSBsb2dpYyBpbiBiZWdpbl9uZXdfZXhlYygpIChmcy9leGVjLmMpLCBtb3ZpbmcgdGhlIGludm9jYXRpb24gb2YgZG9fY2xvc2Vfb25fZXhlYygpIGJlZm9yZSBleGVjX21tYXAoKSBhbmQgc2V0X21tX2V4ZV9maWxlKCkgdG8gYXZvaWQgYmxvY2tpbmcgb24gZmlsZXN5c3RlbSAtXFx1MDAzZWZsdXNoKCkgaGFuZGxlcnMgd2hpbGUgaG9sZGluZyBleGVjX3VwZGF0ZV9sb2NrLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb250cm9sIGZsb3cgYW5kIGxpZmVjeWNsZSBvcmRlciBkdXJpbmcgcHJvZ3JhbSBleGVjdXRpb24gaW4gdGhlIGNvcmUgVkZTL2V4ZWMgc3Vic3lzdGVtIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMTozNDo1OS4xMTg1Mjg5NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5Nzk4NTU0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGM5MDQzZjgwZWE5ZjI3ZDc3Y2IzY2U3YjJjN2I4MDBiYmNlNTMxZTNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgOCAwMTozNDo1NyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9leGVjLmMgYi9mcy9leGVjLmNcXG5pbmRleCA3NDVmNmViNTI3OWU2Li5iNTFlNWQ3ZTQ1MzY3IDEwMDY0NFxcbi0tLSBhL2ZzL2V4ZWMuY1xcbisrKyBiL2ZzL2V4ZWMuY1xcbkBAIC0xMTY0LDYgKzExNjQsMjAgQEAgaW50IGJlZ2luX25ld19leGVjKHN0cnVjdCBsaW51eF9iaW5wcm0gKiBicHJtKVxcbiBcXHRpZiAocmV0dmFsKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFdlIGhhdmUgdG8gYXBwbHkgQ0xPRVhFQyBiZWZvcmUgd2UgY2hhbmdlIHdoZXRoZXIgdGhlIHByb2Nlc3MgaXNcXG4rXFx0ICogZHVtcGFibGUgKGluIHNldHVwX25ld19leGVjKSB0byBhdm9pZCBhIHJhY2Ugd2l0aCBhIHByb2Nlc3MgaW4gdXNlcnNwYWNlXFxuK1xcdCAqIHRyeWluZyB0byBhY2Nlc3MgdGhlIHNob3VsZC1iZS1jbG9zZWQgZmlsZSBkZXNjcmlwdG9ycyBvZiBhIHByb2Nlc3NcXG4rXFx0ICogdW5kZXJnb2luZyBleGVjKDIpLlxcbitcXHQgKlxcbitcXHQgKiBUaGlzIGNhbiBibG9jayBvbiBmaWxlc3lzdGVtIC1cXHUwMDNlZmx1c2goKSBoYW5kbGVycywgaW5jbHVkaW5nIHdhaXRpbmdcXG4rXFx0ICogZm9yIEZVU0UgZGFlbW9ucywgc28gZG8gaXQgYmVmb3JlIGV4ZWNfbW1hcCB0YWtlcyB0aGVcXG4rXFx0ICogZXhlY191cGRhdGVfbG9jay5cXG4rXFx0ICogVGhpcyBtdXN0IGhhcHBlbiBhZnRlciB0aGUgcG9pbnQgb2Ygbm8gcmV0dXJuLCBhbmQgYWZ0ZXIgdW5zaGFyaW5nXFxuK1xcdCAqIHRoZSBGRCB0YWJsZS5cXG4rXFx0ICovXFxuK1xcdGRvX2Nsb3NlX29uX2V4ZWMobWUtXFx1MDAzZWZpbGVzKTtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIE11c3QgYmUgY2FsbGVkIF9iZWZvcmVfIGV4ZWNfbW1hcCgpIGFzIGJwcm0tXFx1MDAzZW1tIGlzXFxuIFxcdCAqIG5vdCB2aXNpYmxlIHVudGlsIHRoZW4uIERvaW5nIGl0IGhlcmUgYWxzbyBlbnN1cmVzXFxuQEAgLTEyMTQsMTQgKzEyMjgsNiBAQCBpbnQgYmVnaW5fbmV3X2V4ZWMoc3RydWN0IGxpbnV4X2JpbnBybSAqIGJwcm0pXFxuIFxcbiBcXHRjbGVhcl9zeXNjYWxsX3dvcmtfc3lzY2FsbF91c2VyX2Rpc3BhdGNoKG1lKTtcXG4gXFxuLVxcdC8qXFxuLVxcdCAqIFdlIGhhdmUgdG8gYXBwbHkgQ0xPRVhFQyBiZWZvcmUgd2UgY2hhbmdlIHdoZXRoZXIgdGhlIHByb2Nlc3MgaXNcXG4tXFx0ICogZHVtcGFibGUgKGluIHNldHVwX25ld19leGVjKSB0byBhdm9pZCBhIHJhY2Ugd2l0aCBhIHByb2Nlc3MgaW4gdXNlcnNwYWNlXFxuLVxcdCAqIHRyeWluZyB0byBhY2Nlc3MgdGhlIHNob3VsZC1iZS1jbG9zZWQgZmlsZSBkZXNjcmlwdG9ycyBvZiBhIHByb2Nlc3NcXG4tXFx0ICogdW5kZXJnb2luZyBleGVjKDIpLlxcbi1cXHQgKi9cXG4tXFx0ZG9fY2xvc2Vfb25fZXhlYyhtZS1cXHUwMDNlZmlsZXMpO1xcbi1cXG4gXFx0aWYgKGJwcm0tXFx1MDAzZXNlY3VyZWV4ZWMpIHtcXG4gXFx0XFx0LyogTWFrZSBzdXJlIHBhcmVudCBjYW5ub3Qgc2lnbmFsIHByaXZpbGVnZWQgcHJvY2Vzcy4gKi9cXG4gXFx0XFx0bWUtXFx1MDAzZXBkZWF0aF9zaWduYWwgPSAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMTozNTowMC42MTc0NDY4OTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI1MjIwNzE1MzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJlZ2luX25ld19leGVjXCIsXG4gICAgXCJkb19jbG9zZV9vbl9leGVjXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBleGVjdmUgbG9naWMgaW4gYmVnaW5fbmV3X2V4ZWMoKSAoZnMvZXhlYy5jKSwgbW92aW5nIHRoZSBpbnZvY2F0aW9uIG9mIGRvX2Nsb3NlX29uX2V4ZWMoKSBiZWZvcmUgZXhlY19tbWFwKCkgYW5kIHNldF9tbV9leGVfZmlsZSgpIHRvIGF2b2lkIGJsb2NraW5nIG9uIGZpbGVzeXN0ZW0gLVxcdTAwM2VmbHVzaCgpIGhhbmRsZXJzIHdoaWxlIGhvbGRpbmcgZXhlY191cGRhdGVfbG9jay4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29udHJvbCBmbG93IGFuZCBsaWZlY3ljbGUgb3JkZXIgZHVyaW5nIHByb2dyYW0gZXhlY3V0aW9uIGluIHRoZSBjb3JlIFZGUy9leGVjIHN1YnN5c3RlbSBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjOTA0M2Y4MGVhOWYyN2Q3N2NiM2NlN2IyYzdiODAwYmJjZTUzMWUzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwMTozNDo1NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuY1xuaW5kZXggNzQ1ZjZlYjUyNzllNi4uYjUxZTVkN2U0NTM2NyAxMDA2NDRcbi0tLSBhL2ZzL2V4ZWMuY1xuKysrIGIvZnMvZXhlYy5jXG5AQCAtMTE2NCw2ICsxMTY0LDIwIEBAIGludCBiZWdpbl9uZXdfZXhlYyhzdHJ1Y3QgbGludXhfYmlucHJtICogYnBybSlcbiBcdGlmIChyZXR2YWwpXG4gXHRcdGdvdG8gb3V0O1xuIFxuK1x0LypcbitcdCAqIFdlIGhhdmUgdG8gYXBwbHkgQ0xPRVhFQyBiZWZvcmUgd2UgY2hhbmdlIHdoZXRoZXIgdGhlIHByb2Nlc3MgaXNcbitcdCAqIGR1bXBhYmxlIChpbiBzZXR1cF9uZXdfZXhlYykgdG8gYXZvaWQgYSByYWNlIHdpdGggYSBwcm9jZXNzIGluIHVzZXJzcGFjZVxuK1x0ICogdHJ5aW5nIHRvIGFjY2VzcyB0aGUgc2hvdWxkLWJlLWNsb3NlZCBmaWxlIGRlc2NyaXB0b3JzIG9mIGEgcHJvY2Vzc1xuK1x0ICogdW5kZXJnb2luZyBleGVjKDIpLlxuK1x0ICpcbitcdCAqIFRoaXMgY2FuIGJsb2NrIG9uIGZpbGVzeXN0ZW0gLVx1MDAzZWZsdXNoKCkgaGFuZGxlcnMsIGluY2x1ZGluZyB3YWl0aW5nXG4rXHQgKiBmb3IgRlVTRSBkYWVtb25zLCBzbyBkbyBpdCBiZWZvcmUgZXhlY19tbWFwIHRha2VzIHRoZVxuK1x0ICogZXhlY191cGRhdGVfbG9jay5cbitcdCAqIFRoaXMgbXVzdCBoYXBwZW4gYWZ0ZXIgdGhlIHBvaW50IG9mIG5vIHJldHVybiwgYW5kIGFmdGVyIHVuc2hhcmluZ1xuK1x0ICogdGhlIEZEIHRhYmxlLlxuK1x0ICovXG4rXHRkb19jbG9zZV9vbl9leGVjKG1lLVx1MDAzZWZpbGVzKTtcbitcbiBcdC8qXG4gXHQgKiBNdXN0IGJlIGNhbGxlZCBfYmVmb3JlXyBleGVjX21tYXAoKSBhcyBicHJtLVx1MDAzZW1tIGlzXG4gXHQgKiBub3QgdmlzaWJsZSB1bnRpbCB0aGVuLiBEb2luZyBpdCBoZXJlIGFsc28gZW5zdXJlc1xuQEAgLTEyMTQsMTQgKzEyMjgsNiBAQCBpbnQgYmVnaW5fbmV3X2V4ZWMoc3RydWN0IGxpbnV4X2JpbnBybSAqIGJwcm0pXG4gXG4gXHRjbGVhcl9zeXNjYWxsX3dvcmtfc3lzY2FsbF91c2VyX2Rpc3BhdGNoKG1lKTtcbiBcbi1cdC8qXG4tXHQgKiBXZSBoYXZlIHRvIGFwcGx5IENMT0VYRUMgYmVmb3JlIHdlIGNoYW5nZSB3aGV0aGVyIHRoZSBwcm9jZXNzIGlzXG4tXHQgKiBkdW1wYWJsZSAoaW4gc2V0dXBfbmV3X2V4ZWMpIHRvIGF2b2lkIGEgcmFjZSB3aXRoIGEgcHJvY2VzcyBpbiB1c2Vyc3BhY2Vcbi1cdCAqIHRyeWluZyB0byBhY2Nlc3MgdGhlIHNob3VsZC1iZS1jbG9zZWQgZmlsZSBkZXNjcmlwdG9ycyBvZiBhIHByb2Nlc3Ncbi1cdCAqIHVuZGVyZ29pbmcgZXhlYygyKS5cbi1cdCAqL1xuLVx0ZG9fY2xvc2Vfb25fZXhlYyhtZS1cdTAwM2VmaWxlcyk7XG4tXG4gXHRpZiAoYnBybS1cdTAwM2VzZWN1cmVleGVjKSB7XG4gXHRcdC8qIE1ha2Ugc3VyZSBwYXJlbnQgY2Fubm90IHNpZ25hbCBwcml2aWxlZ2VkIHByb2Nlc3MuICovXG4gXHRcdG1lLVx1MDAzZXBkZWF0aF9zaWduYWwgPSAwO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MzU6MDAuNjE3NDQ5MjI5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODEyMjkzODY0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBmcy9leGVjLmNgIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGF0Y2ggd2l0aGluIHRoZSBjb250ZXh0IG9mIGBmcy9leGVjLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgYmVnaW5fbmV3X2V4ZWNgIGZ1bmN0aW9uLiBUaGUgcGF0Y2ggaXRzZWxmIGlzIHN0cmFpZ2h0Zm9yd2FyZCAtIGl0J3MgYSBjb2RlIG1vdmVtZW50LCBlc3NlbnRpYWxseS4gSXQncyByZXBvc2l0aW9uaW5nIHRoZSBjYWxsIHRvIGBkb19jbG9zZV9vbl9leGVjKG1lLVx1MDAzZWZpbGVzKWAuICBUaGUgZGlmZiBzaG93cyB0aGF0IHRoZSBjb2RlIHdhcyAqbW92ZWQqLCBub3QgYWRkZWQgb3IgcmVtb3ZlZCBmdW5kYW1lbnRhbGx5LiBQcmV2aW91c2x5LCBpdCB3YXMgYWZ0ZXIgdGhlIGBjbGVhcl9zeXNjYWxsX3dvcmtfc3lzY2FsbF91c2VyX2Rpc3BhdGNoKG1lKTtgIGNhbGwsIGFuZCBub3cgaXQncyBwbGFjZWQgZWFybGllciwgYmVmb3JlIHRoZSBjYWxscyB0byBgZXhlY19tbWFwYCBhbmQgYGNsZWFyX3N5c2NhbGxfd29ya19zeXNjYWxsX3VzZXJfZGlzcGF0Y2hgLlxuXG5UaGUgc3Vycm91bmRpbmcgY29tbWVudHMgYXJlIGtleSBoZXJlLiAgVGhleSBleHBsaWNpdGx5IGNhbGwgb3V0IHRoZSByZWFzb24gZm9yIHRoaXMgcmVhcnJhbmdlbWVudDogdGhlIG5lZWQgdG8gYXBwbHkgYENMT0VYRUNgICpiZWZvcmUqIHBvdGVudGlhbGx5IGNoYW5naW5nIHdoZXRoZXIgdGhlIHByb2Nlc3MgaXMgZHVtcGFibGUgaW4gYHNldHVwX25ld19leGVjYC4gVGhpcyBpcyB0byBhdm9pZCBhIHJhY2UgY29uZGl0aW9uLCB3aGVyZSBhIHVzZXItc3BhY2UgcHJvY2VzcyBtaWdodCB0cnkgdG8gYWNjZXNzIGZpbGUgZGVzY3JpcHRvcnMgdGhhdCAqc2hvdWxkKiBiZSBjbG9zZWQgZHVyaW5nIGFuIGBleGVjKDIpYCBjYWxsLiBDcnVjaWFsbHksIHRoZSBjb21tZW50IGhpZ2hsaWdodHMgdGhhdCBgZG9fY2xvc2Vfb25fZXhlY2AgY2FuIGJsb2NrIG9uIGZpbGVzeXN0ZW0gZmx1c2ggaGFuZGxlcnMgKGluY2x1ZGluZyBGVVNFIGRhZW1vbnMpLiBUaGlzIGlzIHdoeSB0aGUgcGF0Y2ggZW1waGFzaXplcyB0aGF0IGl0J3MgcGVyZm9ybWVkIGFmdGVyIHRoZSBwb2ludCBvZiBubyByZXR1cm4gKGltcG9ydGFudCBmb3IgYXRvbWljaXR5IGFuZCBjb25zaXN0ZW5jeSBkdXJpbmcgdGhlIGBleGVjdmVgIHByb2Nlc3MpIGFuZCBhZnRlciB1bnNoYXJpbmcgdGhlIGZpbGUgZGVzY3JpcHRvciB0YWJsZS4gVGhpcyB0aW1pbmcgaXMgY3JpdGljYWwgdG8gZW5zdXJlIHByb3BlciBjbGVhbnVwLCBhdm9pZCByYWNlcyBhbmQgbWFpbnRhaW4gZGF0YSBpbnRlZ3JpdHkuIFRoZSBjb21tZW50IG1lbnRpb25zIGRvaW5nIHRoaXMgYmVmb3JlIGBleGVjX21tYXBgIHRvIGF2b2lkIGxvY2tpbmcgcHJvYmxlbXMuIFNvLCB0aGlzIG9yZGVyIGNoYW5nZSBzZWVtcyB0byBiZSBhIHN1YnRsZSBidXQgY3JpdGljYWwgb3B0aW1pemF0aW9uIGFuZCByYWNlIGNvbmRpdGlvbiBhdm9pZGFuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNzgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMTozNTowOC43NDAzOTA1MjRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXhlYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTUwOlxcdFxcbjExNTE6XFx0XFx0LyogTWFrZSB0aGlzIHRoZSBvbmx5IHRocmVhZCBpbiB0aGUgdGhyZWFkIGdyb3VwICovXFxuMTE1MjpcXHRcXHRyZXR2YWwgPSBkZV90aHJlYWQobWUpO1xcbjExNTM6XFx0XFx0aWYgKHJldHZhbClcXG4xMTU0OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjExNTU6XFx0XFx0Lyogc2VlIHRoZSBjb21tZW50IGluIGNoZWNrX3Vuc2FmZV9leGVjKCkgKi9cXG4xMTU2OlxcdFxcdGN1cnJlbnQtXFx1MDAzZWZzLVxcdTAwM2Vpbl9leGVjID0gMDtcXG4xMTU3OlxcdFxcdC8qXFxuMTE1ODpcXHRcXHQgKiBDYW5jZWwgYW55IGlvX3VyaW5nIGFjdGl2aXR5IGFjcm9zcyBleGVjdmVcXG4xMTU5OlxcdFxcdCAqL1xcbjExNjA6XFx0XFx0aW9fdXJpbmdfdGFza19jYW5jZWwoKTtcXG4xMTYxOlxcdFxcbjExNjI6XFx0XFx0LyogRW5zdXJlIHRoZSBmaWxlcyB0YWJsZSBpcyBub3Qgc2hhcmVkLiAqL1xcbjExNjM6XFx0XFx0cmV0dmFsID0gdW5zaGFyZV9maWxlcygpO1xcbjExNjQ6XFx0XFx0aWYgKHJldHZhbClcXG4xMTY1OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjExNjY6XFx0XFxuMTE2NzpcXHRcXHQvKlxcbjExNjg6XFx0XFx0ICogV2UgaGF2ZSB0byBhcHBseSBDTE9FWEVDIGJlZm9yZSB3ZSBjaGFuZ2Ugd2hldGhlciB0aGUgcHJvY2VzcyBpc1xcbjExNjk6XFx0XFx0ICogZHVtcGFibGUgKGluIHNldHVwX25ld19leGVjKSB0byBhdm9pZCBhIHJhY2Ugd2l0aCBhIHByb2Nlc3MgaW4gdXNlcnNwYWNlXFxuMTE3MDpcXHRcXHQgKiB0cnlpbmcgdG8gYWNjZXNzIHRoZSBzaG91bGQtYmUtY2xvc2VkIGZpbGUgZGVzY3JpcHRvcnMgb2YgYSBwcm9jZXNzXFxuMTE3MTpcXHRcXHQgKiB1bmRlcmdvaW5nIGV4ZWMoMikuXFxuMTE3MjpcXHRcXHQgKlxcbjExNzM6XFx0XFx0ICogVGhpcyBjYW4gYmxvY2sgb24gZmlsZXN5c3RlbSAtXFx1MDAzZWZsdXNoKCkgaGFuZGxlcnMsIGluY2x1ZGluZyB3YWl0aW5nXFxuMTE3NDpcXHRcXHQgKiBmb3IgRlVTRSBkYWVtb25zLCBzbyBkbyBpdCBiZWZvcmUgZXhlY19tbWFwIHRha2VzIHRoZVxcbjExNzU6XFx0XFx0ICogZXhlY191cGRhdGVfbG9jay5cXG4xMTc2OlxcdFxcdCAqIFRoaXMgbXVzdCBoYXBwZW4gYWZ0ZXIgdGhlIHBvaW50IG9mIG5vIHJldHVybiwgYW5kIGFmdGVyIHVuc2hhcmluZ1xcbjExNzc6XFx0XFx0ICogdGhlIEZEIHRhYmxlLlxcbjExNzg6XFx0XFx0ICovXFxuMTE3OTpcXHRcXHRkb19jbG9zZV9vbl9leGVjKG1lLVxcdTAwM2VmaWxlcyk7XFxuMTE4MDpcXHRcXG4xMTgxOlxcdFxcdC8qXFxuMTE4MjpcXHRcXHQgKiBNdXN0IGJlIGNhbGxlZCBfYmVmb3JlXyBleGVjX21tYXAoKSBhcyBicHJtLVxcdTAwM2VtbSBpc1xcbjExODM6XFx0XFx0ICogbm90IHZpc2libGUgdW50aWwgdGhlbi4gRG9pbmcgaXQgaGVyZSBhbHNvIGVuc3VyZXNcXG4xMTg0OlxcdFxcdCAqIHdlIGRvbid0IHJhY2UgYWdhaW5zdCByZXBsYWNlX21tX2V4ZV9maWxlKCkuXFxuMTE4NTpcXHRcXHQgKi9cXG4xMTg2OlxcdFxcdHJldHZhbCA9IHNldF9tbV9leGVfZmlsZShicHJtLVxcdTAwM2VtbSwgYnBybV9pZGVudGl0eV9maWxlKGJwcm0pKTtcXG4xMTg3OlxcdFxcdGlmIChyZXR2YWwpXFxuMTE4ODpcXHRcXHRcXHRnb3RvIG91dDtcXG4xMTg5OlxcdFxcbjExOTA6XFx0XFx0LyogSWYgdGhlIGJpbmFyeSBpcyBub3QgcmVhZGFibGUgdGhlbiBlbmZvcmNlIG1tLVxcdTAwM2VkdW1wYWJsZT0wICovXFxuMTE5MTpcXHRcXHR3b3VsZF9kdW1wKGJwcm0sIGJwcm0tXFx1MDAzZWZpbGUpO1xcbjExOTI6XFx0XFx0aWYgKGJwcm0tXFx1MDAzZWhhdmVfZXhlY2ZkKVxcbjExOTM6XFx0XFx0XFx0d291bGRfZHVtcChicHJtLCBicHJtLVxcdTAwM2VleGVjdXRhYmxlKTtcXG4xMTk0OlxcdFxcbjExOTU6XFx0XFx0LypcXG4xMTk2OlxcdFxcdCAqIFJlbGVhc2UgYWxsIG9mIHRoZSBvbGQgbW1hcCBzdHVmZlxcbjExOTc6XFx0XFx0ICovXFxuMTE5ODpcXHRcXHRhY2N0X2FyZ19zaXplKGJwcm0sIDApO1xcbjExOTk6XFx0XFx0cmV0dmFsID0gZXhlY19tbWFwKGJwcm0pO1xcbjEyMDA6XFx0XFx0aWYgKHJldHZhbClcXG4xMjAxOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjEyMDI6XFx0XFxuMTIwMzpcXHRcXHRicHJtLVxcdTAwM2VtbSA9IE5VTEw7XFxuMTIwNDpcXHRcXG4xMjA1OlxcdFxcdHJldHZhbCA9IGV4ZWNfdGFza19uYW1lc3BhY2VzKCk7XFxuMTIwNjpcXHRcXHRpZiAocmV0dmFsKVxcbjEyMDc6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjEyMDg6XFx0XFxuMTIwOTpcXHQjaWZkZWYgQ09ORklHX1BPU0lYX1RJTUVSU1xcbjEyMTA6XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2bWUtXFx1MDAzZXNpZ2hhbmQtXFx1MDAzZXNpZ2xvY2spO1xcbjEyMTE6XFx0XFx0cG9zaXhfY3B1X3RpbWVyc19leGl0KG1lKTtcXG4xMjEyOlxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2bWUtXFx1MDAzZXNpZ2hhbmQtXFx1MDAzZXNpZ2xvY2spO1xcbjEyMTM6XFx0XFx0ZXhpdF9pdGltZXJzKG1lKTtcXG4xMjE0OlxcdFxcdGZsdXNoX2l0aW1lcl9zaWduYWxzKCk7XFxuMTIxNTpcXHQjZW5kaWZcXG4xMjE2OlxcdFxcbjEyMTc6XFx0XFx0LypcXG4xMjE4OlxcdFxcdCAqIE1ha2UgdGhlIHNpZ25hbCB0YWJsZSBwcml2YXRlLlxcbjEyMTk6XFx0XFx0ICovXFxuMTIyMDpcXHRcXHRyZXR2YWwgPSB1bnNoYXJlX3NpZ2hhbmQobWUpO1xcbjEyMjE6XFx0XFx0aWYgKHJldHZhbClcXG4xMjIyOlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xMjIzOlxcdFxcbjEyMjQ6XFx0XFx0bWUtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH4oUEZfUkFORE9NSVpFIHwgUEZfRk9SS05PRVhFQyB8XFxuMTIyNTpcXHRcXHRcXHRcXHRcXHRcXHRQRl9OT0ZSRUVaRSB8IFBGX05PX1NFVEFGRklOSVRZKTtcXG4xMjI2OlxcdFxcdGZsdXNoX3RocmVhZCgpO1xcbjEyMjc6XFx0XFx0bWUtXFx1MDAzZXBlcnNvbmFsaXR5IFxcdTAwMjY9IH5icHJtLVxcdTAwM2VwZXJfY2xlYXI7XFxuMTIyODpcXHRcXG4xMjI5OlxcdFxcdGNsZWFyX3N5c2NhbGxfd29ya19zeXNjYWxsX3VzZXJfZGlzcGF0Y2gobWUpO1xcbjEyMzA6XFx0XFxuMTIzMTpcXHRcXHRpZiAoYnBybS1cXHUwMDNlc2VjdXJlZXhlYykge1xcbjEyMzI6XFx0XFx0XFx0LyogTWFrZSBzdXJlIHBhcmVudCBjYW5ub3Qgc2lnbmFsIHByaXZpbGVnZWQgcHJvY2Vzcy4gKi9cXG4xMjMzOlxcdFxcdFxcdG1lLVxcdTAwM2VwZGVhdGhfc2lnbmFsID0gMDtcXG4xMjM0OlxcdFxcbjEyMzU6XFx0XFx0XFx0LypcXG4xMjM2OlxcdFxcdFxcdCAqIEZvciBzZWN1cmVleGVjLCByZXNldCB0aGUgc3RhY2sgbGltaXQgdG8gc2FuZSBkZWZhdWx0IHRvXFxuMTIzNzpcXHRcXHRcXHQgKiBhdm9pZCBiYWQgYmVoYXZpb3IgZnJvbSB0aGUgcHJpb3IgcmxpbWl0cy4gVGhpcyBoYXMgdG9cXG4xMjM4OlxcdFxcdFxcdCAqIGhhcHBlbiBiZWZvcmUgYXJjaF9waWNrX21tYXBfbGF5b3V0KCksIHdoaWNoIGV4YW1pbmVzXFxuMTIzOTpcXHRcXHRcXHQgKiBSTElNSVRfU1RBQ0ssIGJ1dCBhZnRlciB0aGUgcG9pbnQgb2Ygbm8gcmV0dXJuIHRvIGF2b2lkXFxuMTI0MDpcXHRcXHRcXHQgKiBuZWVkaW5nIHRvIGNsZWFuIHVwIHRoZSBjaGFuZ2Ugb24gZmFpbHVyZS5cXG4xMjQxOlxcdFxcdFxcdCAqL1xcbjEyNDI6XFx0XFx0XFx0aWYgKGJwcm0tXFx1MDAzZXJsaW1fc3RhY2sucmxpbV9jdXIgXFx1MDAzZSBfU1RLX0xJTSlcXG4xMjQzOlxcdFxcdFxcdFxcdGJwcm0tXFx1MDAzZXJsaW1fc3RhY2sucmxpbV9jdXIgPSBfU1RLX0xJTTtcXG4xMjQ0OlxcdFxcdH1cXG4xMjQ1OlxcdFxcbjEyNDY6XFx0XFx0bWUtXFx1MDAzZXNhc19zc19zcCA9IG1lLVxcdTAwM2VzYXNfc3Nfc2l6ZSA9IDA7XFxuMTI0NzpcXHRcXG4xMjQ4OlxcdFxcdC8qXFxuMTI0OTpcXHRcXHQgKiBGaWd1cmUgb3V0IGR1bXBhYmlsaXR5LiBOb3RlIHRoYXQgdGhpcyBjaGVja2luZyBvbmx5IG9mIGN1cnJlbnRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MzU6MDguNzQwNTE1NTc0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzg0MjM3NzUyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogYGJlZ2luX25ld19leGVjYCBpbiBgZnMvZXhlYy5jYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgbW9kaWZpY2F0aW9uIGluIGBmcy9leGVjLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBiZWdpbl9uZXdfZXhlY2AuIFRoZSBjaGFuZ2UgaW52b2x2ZXMgbW92aW5nIHRoZSBgZG9fY2xvc2Vfb25fZXhlYyhtZS1cdTAwM2VmaWxlcylgIGNhbGwuIEl0IHVzZWQgdG8gYmUgKmFmdGVyKiBgY2xlYXJfc3lzY2FsbF93b3JrX3N5c2NhbGxfdXNlcl9kaXNwYXRjaChtZSk7YCBidXQgaXMgbm93ICpiZWZvcmUqIGBzZXRfbW1fZXhlX2ZpbGUoYnBybS1cdTAwM2VtbSwgYnBybV9pZGVudGl0eV9maWxlKGJwcm0pKTtgIGFuZCBgZXhlY19tbWFwKGJwcm0pYC4gVGhlIGNvbW1lbnQgZXhwbGFpbnMgdGhpcyBpcyBhYm91dCBoYW5kbGluZyBgQ0xPRVhFQ2AgZmxhZ3MgYmVmb3JlIGNoYW5naW5nIHByb2Nlc3MgZHVtcGFiaWxpdHksIHByZXZlbnRpbmcgYSByYWNlIGNvbmRpdGlvbiB3aXRoIHVzZXItc3BhY2UgcHJvY2Vzc2VzIGFjY2Vzc2luZyBmaWxlIGRlc2NyaXB0b3JzLiBJdCBhbHNvIG5vdGVzIHRoYXQgYGRvX2Nsb3NlX29uX2V4ZWNgIGNhbiBibG9jaywgc28gaXQncyBiZWluZyBtb3ZlZCB0byBoYXBwZW4gKmJlZm9yZSogdGFraW5nIHRoZSBgZXhlY191cGRhdGVfbG9ja2AuIEludGVyZXN0aW5nLiBUaGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGNvZGUsIGl0J3MgZnVuZGFtZW50YWwgdG8gZXZlcnkgYGV4ZWN2ZWAgYW5kIGBleGVjdmVhdGAgY2FsbC4gU28sIGlzIHRoaXMgd29ydGggZnV6emluZz8gQmFzZWQgb24gdGhlIGZ1enppbmcgZ3VpZGVsaW5lcywgYW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgd2l0aGluIHRoZSBcInN5c2NhbGwgaGFuZGxpbmdcIiBzdWJzeXN0ZW0sIG9yIHJlZmFjdG9yaW5nIG9mIFwicmVhY2hhYmxlIGNvZGVcIiBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcuIFRoaXMgaXMgYSBjbGVhciBcInllc1wiLiBOb3csIHRvIHJlZmluZSB0aGUgZm9jdXM6IFRoZSBtb2RpZmllZCBmdW5jdGlvbiBpcyBgYmVnaW5fbmV3X2V4ZWNgIHdpdGhpbiBgZnMvZXhlYy5jYC4gSXMgdGhpcyBhIGdvb2QgZm9jdXMgc3ltYm9sPyBGaXJzdCwgSSBuZWVkIHRvIGNoZWNrIHdoYXQgY2FsbHMgYGJlZ2luX25ld19leGVjYC4gTGV0J3MgZmluZCBvdXQuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTYwNCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjM1OjEyLjU4Mjg5NjgxN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTYzNDY4NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmVnaW5fbmV3X2V4ZWNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2JpbmZtdF9lbGYuYz04Mjk9c3RhdGljIGludCBsb2FkX2VsZl9iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4tLVxcbmZzL2JpbmZtdF9lbGYuYy0xMDA5LVxcdC8qIEZsdXNoIGFsbCB0cmFjZXMgb2YgdGhlIGN1cnJlbnRseSBydW5uaW5nIGV4ZWN1dGFibGUgKi9cXG5mcy9iaW5mbXRfZWxmLmM6MTAxMDpcXHRyZXR2YWwgPSBiZWdpbl9uZXdfZXhlYyhicHJtKTtcXG5mcy9iaW5mbXRfZWxmLmMtMTAxMS1cXHRpZiAocmV0dmFsKVxcbi0tXFxuZnMvYmluZm10X2VsZl9mZHBpYy5jPTE4Mj1zdGF0aWMgaW50IGxvYWRfZWxmX2ZkcGljX2JpbmFyeShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbi0tXFxuZnMvYmluZm10X2VsZl9mZHBpYy5jLTM0OC1cXHQvKiBmbHVzaCBhbGwgdHJhY2VzIG9mIHRoZSBjdXJyZW50bHkgcnVubmluZyBleGVjdXRhYmxlICovXFxuZnMvYmluZm10X2VsZl9mZHBpYy5jOjM0OTpcXHRyZXR2YWwgPSBiZWdpbl9uZXdfZXhlYyhicHJtKTtcXG5mcy9iaW5mbXRfZWxmX2ZkcGljLmMtMzUwLVxcdGlmIChyZXR2YWwpXFxuLS1cXG5mcy9iaW5mbXRfZmxhdC5jPTQwNj1zdGF0aWMgaW50IGxvYWRfZmxhdF9maWxlKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXFxuLS1cXG5mcy9iaW5mbXRfZmxhdC5jLTUwOC1cXHQvKiBGbHVzaCBhbGwgdHJhY2VzIG9mIHRoZSBjdXJyZW50bHkgcnVubmluZyBleGVjdXRhYmxlICovXFxuZnMvYmluZm10X2ZsYXQuYzo1MDk6XFx0cmV0ID0gYmVnaW5fbmV3X2V4ZWMoYnBybSk7XFxuZnMvYmluZm10X2ZsYXQuYy01MTAtXFx0aWYgKHJldClcXG4tLVxcbmZzL2V4ZWMuYz0yNTg9c3RhdGljIGludCBicHJtX21tX2luaXQoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4tLVxcbmZzL2V4ZWMuYy0yNjctXFxuZnMvZXhlYy5jOjI2ODpcXHQvKiBTdGFnZWQgZm9yIHdvdWxkX2R1bXAoKSBuYXJyb3dpbmc7IGNvbnN1bWVkIGJ5IGJlZ2luX25ld19leGVjKCkuICovXFxuZnMvZXhlYy5jLTI2OS1cXHRicHJtLVxcdTAwM2V1c2VyX25zID0gZ2V0X3VzZXJfbnMoY3VycmVudF91c2VyX25zKCkpO1xcbi0tXFxuZnMvZXhlYy5jPTExMTE9c3RhdGljIHN0cnVjdCBmaWxlICpicHJtX2lkZW50aXR5X2ZpbGUoY29uc3Qgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4tLVxcbmZzL2V4ZWMuYy0xMTIzLSAqL1xcbmZzL2V4ZWMuYzoxMTI0OmludCBiZWdpbl9uZXdfZXhlYyhzdHJ1Y3QgbGludXhfYmlucHJtICogYnBybSlcXG5mcy9leGVjLmMtMTEyNS17XFxuLS1cXG5mcy9leGVjLmMtMTM0Mi19XFxuZnMvZXhlYy5jOjEzNDM6RVhQT1JUX1NZTUJPTChiZWdpbl9uZXdfZXhlYyk7XFxuZnMvZXhlYy5jLTEzNDQtXFxuLS1cXG5mcy9leGVjLmM9MTQ0Mj1zdHJ1Y3QgZmlsZSAqYnBybV9vcGVuX2ludGVycHJldGVyKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sIGNvbnN0IGNoYXIgKnBhdGgpXFxuLS1cXG5mcy9leGVjLmMtMTQ1NC0gKiBvdmVycmlkZSBhbmQgbGV0IHRoZSBiaW5hcnkgbG9hZCBuYXRpdmVseSByYXRoZXIgdGhhbiBoYXZlXFxuZnMvZXhlYy5jOjE0NTU6ICogYmVnaW5fbmV3X2V4ZWMoKSByZWZ1c2UgaXQuIEEgbm8tb3Agb25jZSBicHJtX29wZW5faW50ZXJwcmV0ZXIoKSB0b29rXFxuZnMvZXhlYy5jLTE0NTYtICogdGhlIHN1YnN0aXR1dGUuXFxuLS1cXG5mcy9leGVjLmM9MTc0Nj1zdGF0aWMgaW50IHNlYXJjaF9iaW5hcnlfaGFuZGxlcihzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbi0tXFxuZnMvZXhlYy5jLTE3NzgtXFxuZnMvZXhlYy5jOjE3Nzk6LyogYmluZm10IGhhbmRsZXJzIHdpbGwgY2FsbCBiYWNrIGludG8gYmVnaW5fbmV3X2V4ZWMoKSBvbiBzdWNjZXNzLiAqL1xcbmZzL2V4ZWMuYy0xNzgwLXN0YXRpYyBpbnQgZXhlY19iaW5wcm0oc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4tLVxcbmZzL2V4ZWMuYz0xODI5PXN0YXRpYyBpbnQgYnBybV9leGVjdmUoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4tLVxcbmZzL2V4ZWMuYy0xODM4LVxcdCAqIENoZWNrIGZvciB1bnNhZmUgZXhlY3V0aW9uIHN0YXRlcyBiZWZvcmUgZXhlY19iaW5wcm0oKSwgd2hpY2hcXG5mcy9leGVjLmM6MTgzOTpcXHQgKiB3aWxsIGNhbGwgYmFjayBpbnRvIGJlZ2luX25ld19leGVjKCksIGludG8gYnBybV9jcmVkc19mcm9tX2ZpbGUoKSxcXG5mcy9leGVjLmMtMTg0MC1cXHQgKiB3aGVyZSBzZXR1aWQtbmVzcyBpcyBldmFsdWF0ZWQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjM1OjEyLjczOTI0ODUzMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMTM4ODIwMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ2hlY2tpbmcgYGRvX2Nsb3NlX29uX2V4ZWNgIExvY2F0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhpcyBgZG9fY2xvc2Vfb25fZXhlY2AgZnVuY3Rpb24gbGl2ZXMuIEdpdmVuIGl0cyBuYW1lLCBpdCdzIHByZXR0eSBsaWtlbHkgcmVsYXRlZCB0byBmaWxlIG9wZXJhdGlvbnMgb3IsIHBvdGVudGlhbGx5LCB0aGUgZXhlY3V0aW9uIHByb2Nlc3MgYW5kIGhvdyBmaWxlIGRlc2NyaXB0b3JzIGJlaGF2ZS4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBsb29rIHdpdGhpbiB0aGUga2VybmVsJ3MgZmlsZSBzeXN0ZW0gaW1wbGVtZW50YXRpb24sIHNvIEknbSB0aGlua2luZyBgZnMvZmlsZS5jYCBpcyBhIHByaW1lIGNhbmRpZGF0ZS4gSXQncyB0aGUgdXN1YWwgcGxhY2UgZm9yIGZpbGUtcmVsYXRlZCBsb2dpYy4gSG93ZXZlciwgc2luY2Ugd2UncmUgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBcImV4ZWMsXCIgSSdsbCBhbHNvIGdsYW5jZSBhdCBgZnMvZXhlYy5jYCAtIGl0IGhhbmRsZXMgdGhlIGltYWdlIGxvYWRpbmcgYW5kIGVudmlyb25tZW50IHNldHVwLCBhbmQgdGhhdCBtaWdodCBpbnZvbHZlIGhvdyBmaWxlcyBhcmUgaGFuZGxlZCBkdXJpbmcgZXhlY3V0aW9uIG9mIGEgcHJvZ3JhbS4gRmluYWxseSwgSSBzaG91bGQgYWxzbyBxdWlja2x5IGNoZWNrIHRoZSBhc3NvY2lhdGVkIGhlYWRlciBmaWxlcywgYXMgZnVuY3Rpb25zIGxpa2UgdGhpcyBvZnRlbiBoYXZlIGRlY2xhcmF0aW9ucyB0aGVyZS4gQmVzdCB0byBiZSB0aG9yb3VnaCwgSSdsbCBuZWVkIHRvIGtub3cgd2hlcmUgaXQncyBkZWZpbmVkIVxuXG5cbiIsIklucHV0VG9rZW5zIjo3Mzg4LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MzU6MTUuMDUzMTMzMTNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUwNjEwNTUxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb19jbG9zZV9vbl9leGVjXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4ZWMuYz0xMTI0PWludCBiZWdpbl9uZXdfZXhlYyhzdHJ1Y3QgbGludXhfYmlucHJtICogYnBybSlcXG4tLVxcbmZzL2V4ZWMuYy0xMTc4LVxcdCAqL1xcbmZzL2V4ZWMuYzoxMTc5OlxcdGRvX2Nsb3NlX29uX2V4ZWMobWUtXFx1MDAzZWZpbGVzKTtcXG5mcy9leGVjLmMtMTE4MC1cXG4tLVxcbmZzL2ZpbGUuYz04Nzg9c3RydWN0IGZpbGUgKmZpbGVfY2xvc2VfZmQodW5zaWduZWQgaW50IGZkKVxcbi0tXFxuZnMvZmlsZS5jLTg4OS1cXG5mcy9maWxlLmM6ODkwOnZvaWQgZG9fY2xvc2Vfb25fZXhlYyhzdHJ1Y3QgZmlsZXNfc3RydWN0ICpmaWxlcylcXG5mcy9maWxlLmMtODkxLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvZmR0YWJsZS5oPTEwNz1zdHJ1Y3QgZmlsZXNfc3RydWN0ICpkdXBfZmQoc3RydWN0IGZpbGVzX3N0cnVjdCAqLCBzdHJ1Y3QgZmRfcmFuZ2UgKikgX19sYXRlbnRfZW50cm9weTtcXG5pbmNsdWRlL2xpbnV4L2ZkdGFibGUuaDoxMDg6dm9pZCBkb19jbG9zZV9vbl9leGVjKHN0cnVjdCBmaWxlc19zdHJ1Y3QgKik7XFxuaW5jbHVkZS9saW51eC9mZHRhYmxlLmgtMTA5LWludCBpdGVyYXRlX2ZkKHN0cnVjdCBmaWxlc19zdHJ1Y3QgKiwgdW5zaWduZWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjM1OjE3LjU1OTI0Mzg3OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0ODE1NTQ3NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgUmVhc29uaW5nIGZvciBTZWxlY3RpbmcgdGhlIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgKnJpZ2h0KiB0YXJnZXRzIGZvciBmdXp6aW5nLCBnaXZlbiB0aGUgY2hhbmdlIEknbSByZXZpZXdpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBhY2NpZGVudGFsbHkgbGlzdGluZyBhICp1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aCosIGFzIHRoYXQncyBhIGZ1enppbmcgbm8tbm8uIFNvLCBsZXQncyBzZWUuLi4gdGhlIGBkb19jbG9zZV9vbl9leGVjYCBmdW5jdGlvbiBpcyB0aGUgaW5pdGlhbCBwb2ludCB0byBjaGVjaywgYW5kIGEgcXVpY2sgbG9va3VwIHNob3dzIGl0J3MgY2FsbGVkICpvbmx5KiB3aXRoaW4gYGZzL2V4ZWMuY2AsIHNwZWNpZmljYWxseSBkdXJpbmcgYGJlZ2luX25ld19leGVjYC4gVGhpcyBsb29rcyBwcm9taXNpbmcuXG5cbk5vdywgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgYmVnaW5fbmV3X2V4ZWNgIGl0c2VsZiBpc24ndCAqdG9vKiBnZW5lcmljLiBUaGUgdGV4dCBtZW50aW9ucyBpdCdzIHVzZWQgZHVyaW5nIGV4ZWMgYnkgYmluYXJ5IGZvcm1hdCBoYW5kbGVycy4gSXMgdGhpcyBhIHVuaXZlcnNhbGx5IGNhbGxlZCBmdW5jdGlvbj8gQmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZywgYGJlZ2luX25ld19leGVjYCBzZWVtcyBzcGVjaWZpYyB0byB0aGUgKmV4ZWN2ZSogcGF0aC4gU3l6a2FsbGVyIHRlc3RzIGBleGVjdmVgIGFuZCBgZXhlY3ZlYXRgLCBidXQgbm90ICpldmVyeSogU3l6a2FsbGVyIHRlc3QgcnVucyBgZXhlY3ZlYC4gTW9zdCB0ZXN0cyBhcmUgYWJvdXQgdGhpbmdzIGxpa2Ugc29ja2V0cyBvciBpb2N0bCwgYnV0IGBiZWdpbl9uZXdfZXhlY2AgaXMgc3BlY2lmaWMgdG8gdGhlIGBleGVjdmVgIHBhdGguIFRoZXJlZm9yZSwgSSBjYW4gY29uZmlkZW50bHkgYWRkIGl0LlxuXG5UaGUgZ3VpZGVsaW5lcyBzYXkgdGhhdCBJIHNob3VsZCB0YXJnZXQgXCJzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljIGFuZCBlbnRyeXBvaW50c1wiLCBhbmQgdGhhdCdzIGV4YWN0bHkgd2hhdCBgYmVnaW5fbmV3X2V4ZWNgIGFuZCBgZG9fY2xvc2Vfb25fZXhlY2AgcmVwcmVzZW50LiBUaGV5IGFyZSB0aGUgZGlyZWN0IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGlzIHNwZWNpZmljIGNoYW5nZS4gU28gSSdsbCBpbmNsdWRlIGJvdGguXG5cbk5vdywgbGV0J3MgYWRkcmVzcyB0aGUgS2NvbmZpZyBvcHRpb25zLiBCb3RoIGBiZWdpbl9uZXdfZXhlY2AgKGluIGBmcy9leGVjLmNgKSBhbmQgYGRvX2Nsb3NlX29uX2V4ZWNgIChpbiBgZnMvZmlsZS5jYCkgYXJlIGNvcmUga2VybmVsIGZ1bmN0aW9ucy4gVGhleSBhcmUgY29tcGlsZWQgdW5jb25kaXRpb25hbGx5IGludG8gdGhlIGtlcm5lbCwgd2hpY2ggbWVhbnMgbm8gc3BlY2lhbCBgQ09ORklHYCBpcyByZXF1aXJlZC4gSSBjYW4ga2VlcCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGVtcHR5IGZvciB0aGlzLlxuXG5GaW5hbGx5LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSdsbCB0YWtlIGEgcXVpY2sgZ2xhbmNlIGF0IGBmcy9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgYnVpbHQtaW4gc3RhdHVzIG9mIGJvdGggZmlsZXMuIFllcCwgdGhhdCdzIHdoYXQgSSBleHBlY3RlZC4gYGZzL2V4ZWMuY2AgaXMgY29tcGlsZWQgYWx3YXlzIChgb2JqLXkgKz0gZXhlYy5vYCksIGFuZCBgZnMvZmlsZS5jYCBpcyBhbHNvIGNvbXBpbGVkIGFsd2F5cy4gVGhpcyBpcyBhbGwgbG9va2luZyBnb29kLiBJIGFtIGNvbmZpZGVudCB3aXRoIHRoaXMgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5MDMsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MzU6MjIuMDQwODAwODQ3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzMxODQxNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXhlY1xcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvTWFrZWZpbGU9MTA9b2JqLXkgOj1cXHRvcGVuLm8gcmVhZF93cml0ZS5vIGZpbGVfdGFibGUubyBzdXBlci5vIFxcXFxcXG5mcy9NYWtlZmlsZToxMTpcXHRcXHRjaGFyX2Rldi5vIHN0YXQubyBleGVjLm8gcGlwZS5vIG5hbWVpLm8gZmNudGwubyBcXFxcXFxuZnMvTWFrZWZpbGUtMTItXFx0XFx0aW9jdGwubyByZWFkZGlyLm8gc2VsZWN0Lm8gZGNhY2hlLm8gaW5vZGUubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjM1OjIyLjE3Mzk5NDUwNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjY0MTM5NDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGBleGVjLm9gIENoYW5nZSoqXG5cbk9rYXksIHNvIGBleGVjLm9gIGlzIGJha2VkIHJpZ2h0IGludG8gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IHRocm91Z2ggdGhlIGBmcy9NYWtlZmlsZWAgYXMgYW4gYG9iai15YC4gTm8gc3VycHJpc2VzIHRoZXJlLiBCdXQgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgcHJvcG9zZWQgY2hhbmdlIHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gTGV0J3MgbWFrZSBzdXJlIHRoZSBjcml0ZXJpYSBhcmUgbWV0LlxuXG5GaXJzdCwgaXMgdGhpcyBjaGFuZ2UgKldvcnRoRnV6emluZyo/IFllcCwgYWJzb2x1dGVseS4gVGhlIHJlYXNvbmluZyBpcyBzb2xpZC4gVGhlIHBhdGNoIGlzIG1vdmluZyBgZG9fY2xvc2Vfb25fZXhlYygpYCBlYXJsaWVyIGluIGBiZWdpbl9uZXdfZXhlYygpYCB3aXRoaW4gYGZzL2V4ZWMuY2AuIFRoZSBjb3JlIG9mIHRoaXMgaXMgYWJvdXQgcHJldmVudGluZyBhIHBvdGVudGlhbCBkZWFkbG9jayBzY2VuYXJpby4gU3BlY2lmaWNhbGx5IHdpdGggZmlsZXN5c3RlbSBmbHVzaCgpIGhhbmRsZXJzLCBzdWNoIGFzIEZVU0UsIGJsb2NraW5nIHdoaWxlIGhvbGRpbmcgdGhlIGBleGVjX3VwZGF0ZV9sb2NrYC4gVGhpcyBlZmZlY3RpdmVseSByZW9yZGVycyBjcml0aWNhbCBvcGVyYXRpb25zIGluIHRoZSBjb3JlIFZGUy9leGVjIHN1YnN5c3RlbSwgYW5kIGFueSBjaGFuZ2UgdG91Y2hpbmcgYGV4ZWNgIGRlc2VydmVzIHNjcnV0aW55LlxuXG5UaGUgKkZvY3VzU3ltYm9scyogYXJlIGNsZWFybHkgYGJlZ2luX25ld19leGVjYCBhbmQgYGRvX2Nsb3NlX29uX2V4ZWNgLiBNYWtlcyBzZW5zZSwgdGhvc2UgYXJlIHRoZSBmdW5jdGlvbnMgZGlyZWN0bHkgYWZmZWN0ZWQgYnkgdGhlIHBhdGNoLiBObyBzcGVjaWZpYyBrZXJuZWwgKkVuYWJsZUNvbmZpZ3MqIGFyZSBuZWVkZWQgdG8gcmVwcm9kdWNlIHRoaXMgaXNzdWUsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzLlxuXG5SaWdodCwgc28gd2l0aCB0aGF0IGNvbmZpcm1hdGlvbiwgSSdsbCBwYXNzIHRoZXNlIHZhbHVlcyB0byB0aGUgc2V0LXJlc3VsdHMgZnVuY3Rpb24gZm9yIGZ1dHVyZSB1c2UuIFRoaXMgbG9va3MgbGlrZSBzb21ldGhpbmcgSSBzaG91bGQga2VlcCBhbiBleWUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5OTksIk91dHB1dFRva2VucyI6MTM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjM1OjI1LjgzODEzNjI1N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmVnaW5fbmV3X2V4ZWNcIixcbiAgICBcImRvX2Nsb3NlX29uX2V4ZWNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGV4ZWN2ZSBsb2dpYyBpbiBiZWdpbl9uZXdfZXhlYygpIChmcy9leGVjLmMpLCBtb3ZpbmcgdGhlIGludm9jYXRpb24gb2YgZG9fY2xvc2Vfb25fZXhlYygpIGJlZm9yZSBleGVjX21tYXAoKSBhbmQgc2V0X21tX2V4ZV9maWxlKCkgdG8gYXZvaWQgYmxvY2tpbmcgb24gZmlsZXN5c3RlbSAtXFx1MDAzZWZsdXNoKCkgaGFuZGxlcnMgd2hpbGUgaG9sZGluZyBleGVjX3VwZGF0ZV9sb2NrLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb250cm9sIGZsb3cgYW5kIGxpZmVjeWNsZSBvcmRlciBkdXJpbmcgcHJvZ3JhbSBleGVjdXRpb24gaW4gdGhlIGNvcmUgVkZTL2V4ZWMgc3Vic3lzdGVtIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJlZ2luX25ld19leGVjXCIsXG4gICAgXCJkb19jbG9zZV9vbl9leGVjXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBleGVjdmUgbG9naWMgaW4gYmVnaW5fbmV3X2V4ZWMoKSAoZnMvZXhlYy5jKSwgbW92aW5nIHRoZSBpbnZvY2F0aW9uIG9mIGRvX2Nsb3NlX29uX2V4ZWMoKSBiZWZvcmUgZXhlY19tbWFwKCkgYW5kIHNldF9tbV9leGVfZmlsZSgpIHRvIGF2b2lkIGJsb2NraW5nIG9uIGZpbGVzeXN0ZW0gLVxcdTAwM2VmbHVzaCgpIGhhbmRsZXJzIHdoaWxlIGhvbGRpbmcgZXhlY191cGRhdGVfbG9jay4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29udHJvbCBmbG93IGFuZCBsaWZlY3ljbGUgb3JkZXIgZHVyaW5nIHByb2dyYW0gZXhlY3V0aW9uIGluIHRoZSBjb3JlIFZGUy9leGVjIHN1YnN5c3RlbSBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MzU6MjUuODM4MTY0Mzg4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDAwMDM2MTEyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjM1OjI1LjgzODU1OTkyOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM5OTk5OTYxMTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyB0aGUgaW52b2NhdGlvbiBvZiBgZG9fY2xvc2Vfb25fZXhlYyhtZS1cXHUwMDNlZmlsZXMpYCBlYXJsaWVyIGluIGBiZWdpbl9uZXdfZXhlYygpYCwgcGxhY2luZyBpdCBiZWZvcmUgYHNldF9tbV9leGVfZmlsZSgpYCBhbmQgYGV4ZWNfbW1hcCgpYC4gVGhpcyBhdm9pZHMgaG9sZGluZyBgZXhlY191cGRhdGVfbG9ja2Agd2hpbGUgZmlsZXN5c3RlbSBgLVxcdTAwM2VmbHVzaCgpYCBoYW5kbGVycyAoc3VjaCBhcyBGVVNFKSBydW4gZHVyaW5nIGBmaWxwX2Nsb3NlKClgLCByZXNvbHZpbmcgcG90ZW50aWFsIGxvY2tpbmcvZGVhZGxvY2sgYW5kIGNvbmN1cnJlbmN5IGlzc3Vlcy5cXG5cXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYSBjb250cm9sIGZsb3cgYW5kIGxvY2sgb3JkZXJpbmcgYWRqdXN0bWVudCB3aXRoaW4gcHJvY2VzcyBleGVjdXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSwgYWxsb2NhdGUsIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0YWNrL2hlYXAgYnVmZmVycywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UuIEFueSByaXNrcyBhc3NvY2lhdGVkIHdpdGggbG9ja2luZyBvciBmaWxlIGRlc2NyaXB0b3IgcmVmZXJlbmNlIGxpZmVjeWNsZXMgYXJlIG1vbml0b3JlZCBieSBMT0NLREVQIGFuZCBzdGFuZGFyZCBLQVNBTiBidWlsZHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjOTA0M2Y4MGVhOWYyN2Q3N2NiM2NlN2IyYzdiODAwYmJjZTUzMWUzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwMTozNDo1NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuY1xuaW5kZXggNzQ1ZjZlYjUyNzllNi4uYjUxZTVkN2U0NTM2NyAxMDA2NDRcbi0tLSBhL2ZzL2V4ZWMuY1xuKysrIGIvZnMvZXhlYy5jXG5AQCAtMTE2NCw2ICsxMTY0LDIwIEBAIGludCBiZWdpbl9uZXdfZXhlYyhzdHJ1Y3QgbGludXhfYmlucHJtICogYnBybSlcbiBcdGlmIChyZXR2YWwpXG4gXHRcdGdvdG8gb3V0O1xuIFxuK1x0LypcbitcdCAqIFdlIGhhdmUgdG8gYXBwbHkgQ0xPRVhFQyBiZWZvcmUgd2UgY2hhbmdlIHdoZXRoZXIgdGhlIHByb2Nlc3MgaXNcbitcdCAqIGR1bXBhYmxlIChpbiBzZXR1cF9uZXdfZXhlYykgdG8gYXZvaWQgYSByYWNlIHdpdGggYSBwcm9jZXNzIGluIHVzZXJzcGFjZVxuK1x0ICogdHJ5aW5nIHRvIGFjY2VzcyB0aGUgc2hvdWxkLWJlLWNsb3NlZCBmaWxlIGRlc2NyaXB0b3JzIG9mIGEgcHJvY2Vzc1xuK1x0ICogdW5kZXJnb2luZyBleGVjKDIpLlxuK1x0ICpcbitcdCAqIFRoaXMgY2FuIGJsb2NrIG9uIGZpbGVzeXN0ZW0gLVx1MDAzZWZsdXNoKCkgaGFuZGxlcnMsIGluY2x1ZGluZyB3YWl0aW5nXG4rXHQgKiBmb3IgRlVTRSBkYWVtb25zLCBzbyBkbyBpdCBiZWZvcmUgZXhlY19tbWFwIHRha2VzIHRoZVxuK1x0ICogZXhlY191cGRhdGVfbG9jay5cbitcdCAqIFRoaXMgbXVzdCBoYXBwZW4gYWZ0ZXIgdGhlIHBvaW50IG9mIG5vIHJldHVybiwgYW5kIGFmdGVyIHVuc2hhcmluZ1xuK1x0ICogdGhlIEZEIHRhYmxlLlxuK1x0ICovXG4rXHRkb19jbG9zZV9vbl9leGVjKG1lLVx1MDAzZWZpbGVzKTtcbitcbiBcdC8qXG4gXHQgKiBNdXN0IGJlIGNhbGxlZCBfYmVmb3JlXyBleGVjX21tYXAoKSBhcyBicHJtLVx1MDAzZW1tIGlzXG4gXHQgKiBub3QgdmlzaWJsZSB1bnRpbCB0aGVuLiBEb2luZyBpdCBoZXJlIGFsc28gZW5zdXJlc1xuQEAgLTEyMTQsMTQgKzEyMjgsNiBAQCBpbnQgYmVnaW5fbmV3X2V4ZWMoc3RydWN0IGxpbnV4X2JpbnBybSAqIGJwcm0pXG4gXG4gXHRjbGVhcl9zeXNjYWxsX3dvcmtfc3lzY2FsbF91c2VyX2Rpc3BhdGNoKG1lKTtcbiBcbi1cdC8qXG4tXHQgKiBXZSBoYXZlIHRvIGFwcGx5IENMT0VYRUMgYmVmb3JlIHdlIGNoYW5nZSB3aGV0aGVyIHRoZSBwcm9jZXNzIGlzXG4tXHQgKiBkdW1wYWJsZSAoaW4gc2V0dXBfbmV3X2V4ZWMpIHRvIGF2b2lkIGEgcmFjZSB3aXRoIGEgcHJvY2VzcyBpbiB1c2Vyc3BhY2Vcbi1cdCAqIHRyeWluZyB0byBhY2Nlc3MgdGhlIHNob3VsZC1iZS1jbG9zZWQgZmlsZSBkZXNjcmlwdG9ycyBvZiBhIHByb2Nlc3Ncbi1cdCAqIHVuZGVyZ29pbmcgZXhlYygyKS5cbi1cdCAqL1xuLVx0ZG9fY2xvc2Vfb25fZXhlYyhtZS1cdTAwM2VmaWxlcyk7XG4tXG4gXHRpZiAoYnBybS1cdTAwM2VzZWN1cmVleGVjKSB7XG4gXHRcdC8qIE1ha2Ugc3VyZSBwYXJlbnQgY2Fubm90IHNpZ25hbCBwcml2aWxlZ2VkIHByb2Nlc3MuICovXG4gXHRcdG1lLVx1MDAzZXBkZWF0aF9zaWduYWwgPSAwO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MzU6MjUuODM4NTYxOTI4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyMTQ4NDE1MjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgRXZhbHVhdGlvbiAtIGBmcy9leGVjLmNgIFBhdGNoKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIHRvIGBmcy9leGVjLmNgIHdhcnJhbnRzIGEgS01TQU4gZnV6emluZyBzZXNzaW9uLiBMZXQncyBtYWtlIHN1cmUgd2UncmUgZm9sbG93aW5nIHRoZSBzYWZldHkgcHJvdG9jb2xzIGhlcmUuIEl0IHNlZW1zIGxpa2UgdGhpcyBpcyBqdXN0IHN0YW5kYXJkIGRldmVsb3BlciBRQSwgY29kZSBhbmFseXNpcywgYW5kIHNhbml0aXphdGlvbiBhc3Nlc3NtZW50LCBub3RoaW5nIG91dCBvZiB0aGUgb3JkaW5hcnkgb3Igcmlza3kuIEdvb2QsIHNhZmUgdG8gcHJvY2VlZC5cblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBwYXRjaCBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBjb2RlIGlzIGFjdHVhbGx5ICpkb2luZyouIFRpbWUgdG8gcHVsbCB1cCB0aGUgcGF0Y2ggYW5kIGxpa2VseSByZWFjaCBmb3IgYHJlYWQtZmlsZWAgb3IgZXZlbiBgZ3JlcHBlcmAgdG8gZXhhbWluZSB0aGUgcmVsZXZhbnQgc2VjdGlvbiBvZiBgZnMvZXhlYy5jYCwgZXNwZWNpYWxseSBhcm91bmQgdGhhdCBgYmVnaW5fbmV3X2V4ZWNgIGZ1bmN0aW9uLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjaGFuZ2VzIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBJIG5lZWQgdG8gYXNzZXNzIGlmIHRoaXMgcGF0Y2ggY291bGQgaW50cm9kdWNlIGFueSBtZW1vcnkgc2FmZXR5IHZ1bG5lcmFiaWxpdGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM5MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjM1OjM3Ljk4Njk4MDQxNloiLCJTZXEiOjE2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTEzOTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4ZWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTUwLFxuICBcIkxpbmVDb3VudFwiOiA5MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTUwOlxcdFxcbjExNTE6XFx0XFx0LyogTWFrZSB0aGlzIHRoZSBvbmx5IHRocmVhZCBpbiB0aGUgdGhyZWFkIGdyb3VwICovXFxuMTE1MjpcXHRcXHRyZXR2YWwgPSBkZV90aHJlYWQobWUpO1xcbjExNTM6XFx0XFx0aWYgKHJldHZhbClcXG4xMTU0OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjExNTU6XFx0XFx0Lyogc2VlIHRoZSBjb21tZW50IGluIGNoZWNrX3Vuc2FmZV9leGVjKCkgKi9cXG4xMTU2OlxcdFxcdGN1cnJlbnQtXFx1MDAzZWZzLVxcdTAwM2Vpbl9leGVjID0gMDtcXG4xMTU3OlxcdFxcdC8qXFxuMTE1ODpcXHRcXHQgKiBDYW5jZWwgYW55IGlvX3VyaW5nIGFjdGl2aXR5IGFjcm9zcyBleGVjdmVcXG4xMTU5OlxcdFxcdCAqL1xcbjExNjA6XFx0XFx0aW9fdXJpbmdfdGFza19jYW5jZWwoKTtcXG4xMTYxOlxcdFxcbjExNjI6XFx0XFx0LyogRW5zdXJlIHRoZSBmaWxlcyB0YWJsZSBpcyBub3Qgc2hhcmVkLiAqL1xcbjExNjM6XFx0XFx0cmV0dmFsID0gdW5zaGFyZV9maWxlcygpO1xcbjExNjQ6XFx0XFx0aWYgKHJldHZhbClcXG4xMTY1OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjExNjY6XFx0XFxuMTE2NzpcXHRcXHQvKlxcbjExNjg6XFx0XFx0ICogV2UgaGF2ZSB0byBhcHBseSBDTE9FWEVDIGJlZm9yZSB3ZSBjaGFuZ2Ugd2hldGhlciB0aGUgcHJvY2VzcyBpc1xcbjExNjk6XFx0XFx0ICogZHVtcGFibGUgKGluIHNldHVwX25ld19leGVjKSB0byBhdm9pZCBhIHJhY2Ugd2l0aCBhIHByb2Nlc3MgaW4gdXNlcnNwYWNlXFxuMTE3MDpcXHRcXHQgKiB0cnlpbmcgdG8gYWNjZXNzIHRoZSBzaG91bGQtYmUtY2xvc2VkIGZpbGUgZGVzY3JpcHRvcnMgb2YgYSBwcm9jZXNzXFxuMTE3MTpcXHRcXHQgKiB1bmRlcmdvaW5nIGV4ZWMoMikuXFxuMTE3MjpcXHRcXHQgKlxcbjExNzM6XFx0XFx0ICogVGhpcyBjYW4gYmxvY2sgb24gZmlsZXN5c3RlbSAtXFx1MDAzZWZsdXNoKCkgaGFuZGxlcnMsIGluY2x1ZGluZyB3YWl0aW5nXFxuMTE3NDpcXHRcXHQgKiBmb3IgRlVTRSBkYWVtb25zLCBzbyBkbyBpdCBiZWZvcmUgZXhlY19tbWFwIHRha2VzIHRoZVxcbjExNzU6XFx0XFx0ICogZXhlY191cGRhdGVfbG9jay5cXG4xMTc2OlxcdFxcdCAqIFRoaXMgbXVzdCBoYXBwZW4gYWZ0ZXIgdGhlIHBvaW50IG9mIG5vIHJldHVybiwgYW5kIGFmdGVyIHVuc2hhcmluZ1xcbjExNzc6XFx0XFx0ICogdGhlIEZEIHRhYmxlLlxcbjExNzg6XFx0XFx0ICovXFxuMTE3OTpcXHRcXHRkb19jbG9zZV9vbl9leGVjKG1lLVxcdTAwM2VmaWxlcyk7XFxuMTE4MDpcXHRcXG4xMTgxOlxcdFxcdC8qXFxuMTE4MjpcXHRcXHQgKiBNdXN0IGJlIGNhbGxlZCBfYmVmb3JlXyBleGVjX21tYXAoKSBhcyBicHJtLVxcdTAwM2VtbSBpc1xcbjExODM6XFx0XFx0ICogbm90IHZpc2libGUgdW50aWwgdGhlbi4gRG9pbmcgaXQgaGVyZSBhbHNvIGVuc3VyZXNcXG4xMTg0OlxcdFxcdCAqIHdlIGRvbid0IHJhY2UgYWdhaW5zdCByZXBsYWNlX21tX2V4ZV9maWxlKCkuXFxuMTE4NTpcXHRcXHQgKi9cXG4xMTg2OlxcdFxcdHJldHZhbCA9IHNldF9tbV9leGVfZmlsZShicHJtLVxcdTAwM2VtbSwgYnBybV9pZGVudGl0eV9maWxlKGJwcm0pKTtcXG4xMTg3OlxcdFxcdGlmIChyZXR2YWwpXFxuMTE4ODpcXHRcXHRcXHRnb3RvIG91dDtcXG4xMTg5OlxcdFxcbjExOTA6XFx0XFx0LyogSWYgdGhlIGJpbmFyeSBpcyBub3QgcmVhZGFibGUgdGhlbiBlbmZvcmNlIG1tLVxcdTAwM2VkdW1wYWJsZT0wICovXFxuMTE5MTpcXHRcXHR3b3VsZF9kdW1wKGJwcm0sIGJwcm0tXFx1MDAzZWZpbGUpO1xcbjExOTI6XFx0XFx0aWYgKGJwcm0tXFx1MDAzZWhhdmVfZXhlY2ZkKVxcbjExOTM6XFx0XFx0XFx0d291bGRfZHVtcChicHJtLCBicHJtLVxcdTAwM2VleGVjdXRhYmxlKTtcXG4xMTk0OlxcdFxcbjExOTU6XFx0XFx0LypcXG4xMTk2OlxcdFxcdCAqIFJlbGVhc2UgYWxsIG9mIHRoZSBvbGQgbW1hcCBzdHVmZlxcbjExOTc6XFx0XFx0ICovXFxuMTE5ODpcXHRcXHRhY2N0X2FyZ19zaXplKGJwcm0sIDApO1xcbjExOTk6XFx0XFx0cmV0dmFsID0gZXhlY19tbWFwKGJwcm0pO1xcbjEyMDA6XFx0XFx0aWYgKHJldHZhbClcXG4xMjAxOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjEyMDI6XFx0XFxuMTIwMzpcXHRcXHRicHJtLVxcdTAwM2VtbSA9IE5VTEw7XFxuMTIwNDpcXHRcXG4xMjA1OlxcdFxcdHJldHZhbCA9IGV4ZWNfdGFza19uYW1lc3BhY2VzKCk7XFxuMTIwNjpcXHRcXHRpZiAocmV0dmFsKVxcbjEyMDc6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjEyMDg6XFx0XFxuMTIwOTpcXHQjaWZkZWYgQ09ORklHX1BPU0lYX1RJTUVSU1xcbjEyMTA6XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2bWUtXFx1MDAzZXNpZ2hhbmQtXFx1MDAzZXNpZ2xvY2spO1xcbjEyMTE6XFx0XFx0cG9zaXhfY3B1X3RpbWVyc19leGl0KG1lKTtcXG4xMjEyOlxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2bWUtXFx1MDAzZXNpZ2hhbmQtXFx1MDAzZXNpZ2xvY2spO1xcbjEyMTM6XFx0XFx0ZXhpdF9pdGltZXJzKG1lKTtcXG4xMjE0OlxcdFxcdGZsdXNoX2l0aW1lcl9zaWduYWxzKCk7XFxuMTIxNTpcXHQjZW5kaWZcXG4xMjE2OlxcdFxcbjEyMTc6XFx0XFx0LypcXG4xMjE4OlxcdFxcdCAqIE1ha2UgdGhlIHNpZ25hbCB0YWJsZSBwcml2YXRlLlxcbjEyMTk6XFx0XFx0ICovXFxuMTIyMDpcXHRcXHRyZXR2YWwgPSB1bnNoYXJlX3NpZ2hhbmQobWUpO1xcbjEyMjE6XFx0XFx0aWYgKHJldHZhbClcXG4xMjIyOlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xMjIzOlxcdFxcbjEyMjQ6XFx0XFx0bWUtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH4oUEZfUkFORE9NSVpFIHwgUEZfRk9SS05PRVhFQyB8XFxuMTIyNTpcXHRcXHRcXHRcXHRcXHRcXHRQRl9OT0ZSRUVaRSB8IFBGX05PX1NFVEFGRklOSVRZKTtcXG4xMjI2OlxcdFxcdGZsdXNoX3RocmVhZCgpO1xcbjEyMjc6XFx0XFx0bWUtXFx1MDAzZXBlcnNvbmFsaXR5IFxcdTAwMjY9IH5icHJtLVxcdTAwM2VwZXJfY2xlYXI7XFxuMTIyODpcXHRcXG4xMjI5OlxcdFxcdGNsZWFyX3N5c2NhbGxfd29ya19zeXNjYWxsX3VzZXJfZGlzcGF0Y2gobWUpO1xcbjEyMzA6XFx0XFxuMTIzMTpcXHRcXHRpZiAoYnBybS1cXHUwMDNlc2VjdXJlZXhlYykge1xcbjEyMzI6XFx0XFx0XFx0LyogTWFrZSBzdXJlIHBhcmVudCBjYW5ub3Qgc2lnbmFsIHByaXZpbGVnZWQgcHJvY2Vzcy4gKi9cXG4xMjMzOlxcdFxcdFxcdG1lLVxcdTAwM2VwZGVhdGhfc2lnbmFsID0gMDtcXG4xMjM0OlxcdFxcbjEyMzU6XFx0XFx0XFx0LypcXG4xMjM2OlxcdFxcdFxcdCAqIEZvciBzZWN1cmVleGVjLCByZXNldCB0aGUgc3RhY2sgbGltaXQgdG8gc2FuZSBkZWZhdWx0IHRvXFxuMTIzNzpcXHRcXHRcXHQgKiBhdm9pZCBiYWQgYmVoYXZpb3IgZnJvbSB0aGUgcHJpb3IgcmxpbWl0cy4gVGhpcyBoYXMgdG9cXG4xMjM4OlxcdFxcdFxcdCAqIGhhcHBlbiBiZWZvcmUgYXJjaF9waWNrX21tYXBfbGF5b3V0KCksIHdoaWNoIGV4YW1pbmVzXFxuMTIzOTpcXHRcXHRcXHQgKiBSTElNSVRfU1RBQ0ssIGJ1dCBhZnRlciB0aGUgcG9pbnQgb2Ygbm8gcmV0dXJuIHRvIGF2b2lkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjM1OjM3Ljk5MDQ5ODMyNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODAxMDE3MTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IEZpbGUgRGVzY3JpcHRvciBNYW5hZ2VtZW50IER1cmluZyBgZXhlY3ZlYCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBtb3ZpbmcgdGhlIGBkb19jbG9zZV9vbl9leGVjKG1lLVx1MDAzZWZpbGVzKWAgY2FsbCBpbiBgYmVnaW5fbmV3X2V4ZWNgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0aGF0IHByZXZpb3VzbHksIHRoaXMgY2FsbCB3YXMgaGFwcGVuaW5nICphZnRlciogc29tZSBjcnVjaWFsIG9wZXJhdGlvbnMgbGlrZSBzaWduYWwgaGFuZGxlciB1bnNoYXJpbmcgYW5kIHRocmVhZCBmbHVzaGluZy4gTm93LCB0aGV5J3JlIHNoaWZ0aW5nIGl0ICplYXJsaWVyKiBpbiB0aGUgc2VxdWVuY2UsIHJpZ2h0IGFmdGVyIGB1bnNoYXJlX2ZpbGVzKClgIGJ1dCAqYmVmb3JlKiB0aGUgbWVtb3J5IG1hcCBzZXR1cCBhbmQgZXhlY3V0YWJsZSBmaWxlIGJpbmRpbmcuIEludGVyZXN0aW5nLlxuXG5UaGUgcmF0aW9uYWxlIGZvciB0aGlzIGNoYW5nZSBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIFRoZSBjb21tZW50IGluZGljYXRlcyB0aGF0IGBkb19jbG9zZV9vbl9leGVjYCBjYW4gcG90ZW50aWFsbHkgYmxvY2sgZHVlIHRvIGZpbGVzeXN0ZW0gZmx1c2ggaGFuZGxlcnMsIHNwZWNpZmljYWxseSB3YWl0aW5nIG9uIEZVU0UgZGFlbW9ucy4gTWFrZXMgc2Vuc2Ug4oCTIHRob3NlIEkvTyBvcGVyYXRpb25zIGNhbiBiZSBhc3luY2hyb25vdXMgYW5kIGxlYWQgdG8gZGVsYXlzLiBTbywgdGhlIGdvYWwgaXMgdG8gZXhlY3V0ZSB0aGlzIGNhbGwgKmJlZm9yZSogd2UgZ3JhYiB0aGUgYGV4ZWNfdXBkYXRlX2xvY2tgIGR1cmluZyBgZXhlY19tbWFwYC4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCBkZWFkbG9jayBzY2VuYXJpbyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrIHRoYXQgdGhleSdyZSB0cnlpbmcgdG8gY2lyY3VtdmVudC4gVGhpcyBhbHNvIHBvaW50cyB0byBlbnN1cmluZyB0aGUgZmlsZSBkZXNjcmlwdG9yIHVuc2hhcmluZyBoYXMgYmVlbiBwZXJmb3JtZWQgc28gd2UgZG9uJ3QgZW5kIHVwIGNsb3NpbmcgZmlsZSBkZXNjcmlwdG9ycyBpbiB0aGUgd3JvbmcgcHJvY2VzcyBjb250ZXh0LiBFc3NlbnRpYWxseSwgdGhpcyBpcyBpbnRlbmRlZCB0byBhdm9pZCBwb3RlbnRpYWwgbG9jayBjb250ZW50aW9uIG9uIHRoZSBjcml0aWNhbCBgZXhlY191cGRhdGVfbG9ja2AgdGhhdCBpcyBjcml0aWNhbCBkdXJpbmcgdGhlIHByb2Nlc3Mgb2YgY3JlYXRpbmcgYSBuZXcgbWVtb3J5IG1hcCwgdGh1cyBlbnN1cmluZyB0aGF0IHRoZSBmaWxlIGRlc2NyaXB0b3IgY2xlYW51cCBoYXBwZW5zIGJlZm9yZSBtZW1vcnkgYWxsb2NhdGlvbi4gVGhlIGNyaXRpY2FsIGNvbnN0cmFpbnQgaXMgdGhhdCB0aGUgZmlsZSBkZXNjcmlwdG9yIHRhYmxlIG11c3QgaGF2ZSBiZWVuIHVuc2hhcmVkIGF0IHRoaXMgcG9pbnQuXG5cbk5vdywgSSBuZWVkIHRvIHZlcmlmeSB3aGF0IGBkb19jbG9zZV9vbl9leGVjYCBhY3R1YWxseSAqZG9lcyouIFVuZGVyc3RhbmRpbmcgdGhlIG1lY2hhbmljcyBvZiB0aGF0IGZ1bmN0aW9uIGlzIGtleSB0byBmdWxseSBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgc2hpZnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwMjcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMTozNTo0MS43OTE1MjAwMDRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDk2NzE2NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBkb19jbG9zZV9vbl9leGVjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9maWxlLmM9ODc4PXN0cnVjdCBmaWxlICpmaWxlX2Nsb3NlX2ZkKHVuc2lnbmVkIGludCBmZClcXG4tLVxcbmZzL2ZpbGUuYy04ODktXFxuZnMvZmlsZS5jOjg5MDp2b2lkIGRvX2Nsb3NlX29uX2V4ZWMoc3RydWN0IGZpbGVzX3N0cnVjdCAqZmlsZXMpXFxuZnMvZmlsZS5jLTg5MS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjM1OjQzLjI0MTE5NzM1MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MzA4NTE5NDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBmcy9maWxlLmNgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIE15IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRoYXQgdGhlIHJvb3Qgb2YgdGhlIHByb2JsZW0gbGlrZWx5IGxpZXMgd2l0aGluIHRoZSBmaWxlIHN5c3RlbSBjb2RlLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBmaWxlIG9wZXJhdGlvbnMuIEknbSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gYGZzL2ZpbGUuY2AsIGFuZCBJIHN1c3BlY3QgdGhhdCBsaW5lIDg5MCBvciB0aGVyZWFib3V0cyBtaWdodCBjb250YWluIHRoZSBjcnVjaWFsIGNsdWUuIEknbGwgbmVlZCB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NzcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMTozNTo0Ny41NDk3MTg5OTlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZmlsZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg4NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg4NTpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2ZmlsZXMtXFx1MDAzZWZpbGVfbG9jayk7XFxuIDg4NjpcXHRcXG4gODg3OlxcdFxcdHJldHVybiBmaWxlO1xcbiA4ODg6XFx0fVxcbiA4ODk6XFx0XFxuIDg5MDpcXHR2b2lkIGRvX2Nsb3NlX29uX2V4ZWMoc3RydWN0IGZpbGVzX3N0cnVjdCAqZmlsZXMpXFxuIDg5MTpcXHR7XFxuIDg5MjpcXHRcXHR1bnNpZ25lZCBpO1xcbiA4OTM6XFx0XFx0c3RydWN0IGZkdGFibGUgKmZkdDtcXG4gODk0OlxcdFxcbiA4OTU6XFx0XFx0LyogZXhlYyB1bnNoYXJlcyBmaXJzdCAqL1xcbiA4OTY6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZmaWxlcy1cXHUwMDNlZmlsZV9sb2NrKTtcXG4gODk3OlxcdFxcdGZvciAoaSA9IDA7IDsgaSsrKSB7XFxuIDg5ODpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHNldDtcXG4gODk5OlxcdFxcdFxcdHVuc2lnbmVkIGZkID0gaSAqIEJJVFNfUEVSX0xPTkc7XFxuIDkwMDpcXHRcXHRcXHRmZHQgPSBmaWxlc19mZHRhYmxlKGZpbGVzKTtcXG4gOTAxOlxcdFxcdFxcdGlmIChmZCBcXHUwMDNlPSBmZHQtXFx1MDAzZW1heF9mZHMpXFxuIDkwMjpcXHRcXHRcXHRcXHRicmVhaztcXG4gOTAzOlxcdFxcdFxcdHNldCA9IGZkdC1cXHUwMDNlY2xvc2Vfb25fZXhlY1tpXTtcXG4gOTA0OlxcdFxcdFxcdGlmICghc2V0KVxcbiA5MDU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDkwNjpcXHRcXHRcXHRmZHQtXFx1MDAzZWNsb3NlX29uX2V4ZWNbaV0gPSAwO1xcbiA5MDc6XFx0XFx0XFx0Zm9yICggOyBzZXQgOyBmZCsrLCBzZXQgXFx1MDAzZVxcdTAwM2U9IDEpIHtcXG4gOTA4OlxcdFxcdFxcdFxcdHN0cnVjdCBmaWxlICpmaWxlO1xcbiA5MDk6XFx0XFx0XFx0XFx0aWYgKCEoc2V0IFxcdTAwMjYgMSkpXFxuIDkxMDpcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gOTExOlxcdFxcdFxcdFxcdGZpbGUgPSBmZHQtXFx1MDAzZWZkW2ZkXTtcXG4gOTEyOlxcdFxcdFxcdFxcdGlmICghZmlsZSlcXG4gOTEzOlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA5MTQ6XFx0XFx0XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKGZkdC1cXHUwMDNlZmRbZmRdLCBOVUxMKTtcXG4gOTE1OlxcdFxcdFxcdFxcdF9fcHV0X3VudXNlZF9mZChmaWxlcywgZmQpO1xcbiA5MTY6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmZpbGVzLVxcdTAwM2VmaWxlX2xvY2spO1xcbiA5MTc6XFx0XFx0XFx0XFx0ZmlscF9jbG9zZShmaWxlLCBmaWxlcyk7XFxuIDkxODpcXHRcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gOTE5OlxcdFxcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2ZmlsZXMtXFx1MDAzZWZpbGVfbG9jayk7XFxuIDkyMDpcXHRcXHRcXHR9XFxuIDkyMTpcXHRcXG4gOTIyOlxcdFxcdH1cXG4gOTIzOlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZmaWxlcy1cXHUwMDNlZmlsZV9sb2NrKTtcXG4gOTI0OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MzU6NDcuNTQ5ODEzMDU5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2MTQ1ODM3NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipBbmFseXppbmcgUG90ZW50aWFsIEZhaWx1cmUgUG9pbnRzIGluIGBiZWdpbl9uZXdfZXhlY2AqKlxuXG5SaWdodCwgSSdtIGRpdmluZyBpbnRvIGBiZWdpbl9uZXdfZXhlY2AgYW5kIHRoaW5raW5nIGFib3V0IGl0cyByZXNpbGllbmNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhbGwgdGhlIHBvdGVudGlhbCBmYWlsdXJlIHBvaW50cyBhbmQgaG93IHRoZSBjb2RlIGhhbmRsZXMgdGhlbSwgZXNwZWNpYWxseSB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBmdW5jdGlvbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBmYWlsdXJlIG1vZGVzIHJlbGF0ZWQgdG8gYHNldF9tbV9leGVfZmlsZSgpYCBhbmQgYGV4ZWNfbW1hcCgpYC4gSWYgZWl0aGVyIG9mIHRob3NlIGZhaWxzLCBJIHNlZSB0aGF0IHRoZSBjb2RlIGJyYW5jaGVzIHRvIGBnb3RvIG91dDtgIG9yIGBnb3RvIG91dF91bmxvY2s7YC4gVGhhdCdzIHRoZSBtYWluIHBhdGggSSBuZWVkIHRvIHNjcnV0aW5pemUg4oCTIHRoZSBlcnJvciBoYW5kbGluZyBpcyBjcml0aWNhbCBoZXJlLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhvc2UgZXJyb3IgcGF0aHMgYXJlIGNsZWFuLCB0aGF0IHJlc291cmNlcyBhcmUgcHJvcGVybHkgcmVsZWFzZWQsIGFuZCB0aGF0IHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyBhcmUgYXBwcm9wcmlhdGVseSBub3RpZmllZCBvZiB0aGUgcHJvYmxlbS4gVGltZSB0byBkaWcgZGVlcGVyIGludG8gdGhlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGlzIGZ1bmN0aW9uIGFuZCBtYWtlIHN1cmUgd2UgaGF2ZSBhIHJvYnVzdCBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzOTcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjM1OjUwLjE2NDM5OTg2OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTAyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXhlYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyNjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyNjA6XFx0XFx0cGVyZl9ldmVudF9leGVjKCk7XFxuMTI2MTpcXHRcXG4xMjYyOlxcdFxcdC8qXFxuMTI2MzpcXHRcXHQgKiBJZiB0aGUgb3JpZ2luYWwgZmlsZW5hbWUgd2FzIGVtcHR5LCBhbGxvY19icHJtKCkgbWFkZSB1cCBhIHBhdGhcXG4xMjY0OlxcdFxcdCAqIHRoYXQgd2lsbCBwcm9iYWJseSBub3QgYmUgdXNlZnVsIHRvIGFkbWlucyBydW5uaW5nIHBzIG9yIHNpbWlsYXIuXFxuMTI2NTpcXHRcXHQgKiBMZXQncyBmaXggaXQgdXAgdG8gYmUgc29tZXRoaW5nIHJlYXNvbmFibGUuXFxuMTI2NjpcXHRcXHQgKi9cXG4xMjY3OlxcdFxcdGlmIChicHJtLVxcdTAwM2Vjb21tX2Zyb21fZGVudHJ5KSB7XFxuMTI2ODpcXHRcXHRcXHRzdHJ1Y3QgZmlsZSAqY29tbV9maWxlID0gYnBybV9pZGVudGl0eV9maWxlKGJwcm0pO1xcbjEyNjk6XFx0XFxuMTI3MDpcXHRcXHRcXHQvKlxcbjEyNzE6XFx0XFx0XFx0ICogSG9sZCBSQ1UgbG9jayB0byBrZWVwIHRoZSBuYW1lIGZyb20gYmVpbmcgZnJlZWQgYmVoaW5kIG91ciBiYWNrLlxcbjEyNzI6XFx0XFx0XFx0ICogVXNlIGFjcXVpcmUgc2VtYW50aWNzIHRvIG1ha2Ugc3VyZSB0aGUgdGVybWluYXRpbmcgTlVMIGZyb21cXG4xMjczOlxcdFxcdFxcdCAqIF9fZF9hbGxvYygpIGlzIHNlZW4uXFxuMTI3NDpcXHRcXHRcXHQgKlxcbjEyNzU6XFx0XFx0XFx0ICogTm90ZSwgd2UncmUgZGVsaWJlcmF0ZWx5IHNsb3BweSBoZXJlLiBXZSBkb24ndCBuZWVkIHRvIGNhcmUgYWJvdXRcXG4xMjc2OlxcdFxcdFxcdCAqIGRldGVjdGluZyBhIGNvbmN1cnJlbnQgcmVuYW1lIGFuZCBqdXN0IHdhbnQgYSB0ZXJtaW5hdGVkIG5hbWUuXFxuMTI3NzpcXHRcXHRcXHQgKi9cXG4xMjc4OlxcdFxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4xMjc5OlxcdFxcdFxcdF9fc2V0X3Rhc2tfY29tbShtZSwgc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2Y29tbV9maWxlLVxcdTAwM2VmX3BhdGguZGVudHJ5LVxcdTAwM2VkX25hbWUubmFtZSksXFxuMTI4MDpcXHRcXHRcXHRcXHRcXHR0cnVlKTtcXG4xMjgxOlxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjEyODI6XFx0XFx0fSBlbHNlIHtcXG4xMjgzOlxcdFxcdFxcdF9fc2V0X3Rhc2tfY29tbShtZSwga2Jhc2VuYW1lKGJwcm0tXFx1MDAzZWZpbGVuYW1lKSwgdHJ1ZSk7XFxuMTI4NDpcXHRcXHR9XFxuMTI4NTpcXHRcXG4xMjg2OlxcdFxcdC8qIEFuIGV4ZWMgY2hhbmdlcyBvdXIgZG9tYWluLiBXZSBhcmUgbm8gbG9uZ2VyIHBhcnQgb2YgdGhlIHRocmVhZFxcbjEyODc6XFx0XFx0ICAgZ3JvdXAgKi9cXG4xMjg4OlxcdFxcdFdSSVRFX09OQ0UobWUtXFx1MDAzZXNlbGZfZXhlY19pZCwgbWUtXFx1MDAzZXNlbGZfZXhlY19pZCArIDEpO1xcbjEyODk6XFx0XFx0Zmx1c2hfc2lnbmFsX2hhbmRsZXJzKG1lLCAwKTtcXG4xMjkwOlxcdFxcbjEyOTE6XFx0XFx0cmV0dmFsID0gc2V0X2NyZWRfdWNvdW50cyhicHJtLVxcdTAwM2VjcmVkKTtcXG4xMjkyOlxcdFxcdGlmIChyZXR2YWwgXFx1MDAzYyAwKVxcbjEyOTM6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjEyOTQ6XFx0XFxuMTI5NTpcXHRcXHQvKlxcbjEyOTY6XFx0XFx0ICogaW5zdGFsbCB0aGUgbmV3IGNyZWRlbnRpYWxzIGZvciB0aGlzIGV4ZWN1dGFibGVcXG4xMjk3OlxcdFxcdCAqL1xcbjEyOTg6XFx0XFx0c2VjdXJpdHlfYnBybV9jb21taXR0aW5nX2NyZWRzKGJwcm0pO1xcbjEyOTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjM1OjUwLjE2NDU5Mzk0OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzk5MzQ2MDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0LlxuXG4qKkRlY29uc3RydWN0aW5nIGBiZWdpbl9uZXdfZXhlY2AgLSBBIERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIGBiZWdpbl9uZXdfZXhlY2AuIEkgbmVlZCB0byByZWFsbHkgdW5kZXJzdGFuZCBob3cgaXQncyBmdW5jdGlvbmluZyBhcyBpdCdzIHRoZSBjb3JlIG9mIGhvdyB3ZSBraWNrIG9mZiBhIG5ldyBleGVjdXRpb24gY29udGV4dC4gSSdtIGZvY3VzaW5nIG9uIHRoZSAqcmVzdCogb2YgdGhlIGZ1bmN0aW9uLCBiZWNhdXNlIHRoZSBpbml0aWFsIHBhcnRzIGFyZSBwcm9iYWJseSBib2lsZXJwbGF0ZSBvciB3ZWxsIHVuZGVyc3Rvb2QgYWxyZWFkeS4gSSB3YW50IHRvIHNlZSB0aGUgbWVhdC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBpbnRyaWNhY2llcy4gU3BlY2lmaWNhbGx5LCBob3cgaXQgaGFuZGxlcyBzZXR1cCwgcmVzb3VyY2UgYWxsb2NhdGlvbiwgYW55IG5lY2Vzc2FyeSBpbml0aWFsaXphdGlvbiwgYW5kIG1vc3QgaW1wb3J0YW50bHksIHdoZXJlIHRoZSBjb250cm9sIGZsb3cgaGFuZHMgb3ZlciB0aGUgZXhlY3V0aW9uIHRvIHNvbWV0aGluZyBlbHNlLiBJJ20gYXNzdW1pbmcgdGhhdCBpdCBpcyByZXNwb25zaWJsZSBmb3IgcHJlcGFyaW5nIGFuIGVudmlyb25tZW50LCBwZXJoYXBzIHNldHRpbmcgdXAgbWVtb3J5IHNwYWNlcywgdGhyZWFkcywgc2lnbmFsIGhhbmRsZXJzLCBhbmQgdGhlbiBwYXNzaW5nIHRoZSBiYXRvbi4gTXkgZ29hbCBpcyB0byBncmFzcCB0aGUgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucywgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGJ1Z3MgbHVya2luZyBpbiB0aGUgc2hhZG93cy4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIHByb3ZpZGUgdGhlIFwiZ2VuZXNpc1wiIHRvIGEgbmV3IHRocmVhZCBvciBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzIxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMTozNTo1Mi41NjM5NDM1OTRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4ZWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzAwOlxcdFxcdGNvbW1pdF9jcmVkcyhicHJtLVxcdTAwM2VjcmVkKTtcXG4xMzAxOlxcdFxcdGJwcm0tXFx1MDAzZWNyZWQgPSBOVUxMO1xcbjEzMDI6XFx0XFxuMTMwMzpcXHRcXHQvKlxcbjEzMDQ6XFx0XFx0ICogRGlzYWJsZSBtb25pdG9yaW5nIGZvciByZWd1bGFyIHVzZXJzXFxuMTMwNTpcXHRcXHQgKiB3aGVuIGV4ZWN1dGluZyBzZXR1aWQgYmluYXJpZXMuIE11c3RcXG4xMzA2OlxcdFxcdCAqIHdhaXQgdW50aWwgbmV3IGNyZWRlbnRpYWxzIGFyZSBjb21taXR0ZWRcXG4xMzA3OlxcdFxcdCAqIGJ5IGNvbW1pdF9jcmVkcygpIGFib3ZlXFxuMTMwODpcXHRcXHQgKi9cXG4xMzA5OlxcdFxcdGlmICh0YXNrX2V4ZWNfc3RhdGVfZ2V0X2R1bXBhYmxlKG1lKSAhPSBUQVNLX0RVTVBBQkxFX09XTkVSKVxcbjEzMTA6XFx0XFx0XFx0cGVyZl9ldmVudF9leGl0X3Rhc2sobWUpO1xcbjEzMTE6XFx0XFx0LypcXG4xMzEyOlxcdFxcdCAqIGNyZWRfZ3VhcmRfbXV0ZXggbXVzdCBiZSBoZWxkIGF0IGxlYXN0IHRvIHRoaXMgcG9pbnQgdG8gcHJldmVudFxcbjEzMTM6XFx0XFx0ICogcHRyYWNlX2F0dGFjaCgpIGZyb20gYWx0ZXJpbmcgb3VyIGRldGVybWluYXRpb24gb2YgdGhlIHRhc2snc1xcbjEzMTQ6XFx0XFx0ICogY3JlZGVudGlhbHM7IGFueSB0aW1lIGFmdGVyIHRoaXMgaXQgbWF5IGJlIHVubG9ja2VkLlxcbjEzMTU6XFx0XFx0ICovXFxuMTMxNjpcXHRcXHRzZWN1cml0eV9icHJtX2NvbW1pdHRlZF9jcmVkcyhicHJtKTtcXG4xMzE3OlxcdFxcbjEzMTg6XFx0XFx0LyogUGFzcyB0aGUgb3BlbmVkIGJpbmFyeSB0byB0aGUgaW50ZXJwcmV0ZXIuICovXFxuMTMxOTpcXHRcXHRpZiAoYnBybS1cXHUwMDNlaGF2ZV9leGVjZmQpIHtcXG4xMzIwOlxcdFxcdFxcdHN0cnVjdCBmaWxlICpleGVjdXRhYmxlID0gYnBybS1cXHUwMDNlZXhlY3V0YWJsZTtcXG4xMzIxOlxcdFxcbjEzMjI6XFx0XFx0XFx0LyogbW0tXFx1MDAzZWV4ZV9maWxlIGNhcnJpZXMgaXRzIG93biB3cml0ZSBkZW5pYWwgbm93IHNvIGRyb3AgaXQuICovXFxuMTMyMzpcXHRcXHRcXHRleGVfZmlsZV9hbGxvd193cml0ZV9hY2Nlc3MoZXhlY3V0YWJsZSk7XFxuMTMyNDpcXHRcXHRcXHRicHJtLVxcdTAwM2VleGVjdXRhYmxlID0gTlVMTDtcXG4xMzI1OlxcdFxcdFxcdHJldHZhbCA9IEZEX0FERCgwLCBleGVjdXRhYmxlKTtcXG4xMzI2OlxcdFxcdFxcdGlmIChyZXR2YWwgXFx1MDAzYyAwKSB7XFxuMTMyNzpcXHRcXHRcXHRcXHQvKiBUaGUgcmVmZXJlbmNlIHdhcyBub3QgY29uc3VtZWQuICovXFxuMTMyODpcXHRcXHRcXHRcXHRmcHV0KGV4ZWN1dGFibGUpO1xcbjEzMjk6XFx0XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjEzMzA6XFx0XFx0XFx0fVxcbjEzMzE6XFx0XFx0XFx0YnBybS1cXHUwMDNlZXhlY2ZkID0gcmV0dmFsO1xcbjEzMzI6XFx0XFx0fVxcbjEzMzM6XFx0XFx0cmV0dXJuIDA7XFxuMTMzNDpcXHRcXG4xMzM1OlxcdG91dF91bmxvY2s6XFxuMTMzNjpcXHRcXHR1cF93cml0ZShcXHUwMDI2bWUtXFx1MDAzZXNpZ25hbC1cXHUwMDNlZXhlY191cGRhdGVfbG9jayk7XFxuMTMzNzpcXHRcXHRpZiAoIWJwcm0tXFx1MDAzZWNyZWQpXFxuMTMzODpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1lLVxcdTAwM2VzaWduYWwtXFx1MDAzZWNyZWRfZ3VhcmRfbXV0ZXgpO1xcbjEzMzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjM1OjUyLjU2NDEyODc5NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDYyMzQzMjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkuIExldCdzIGRpdmUgaW4uXG5cbioqQW5hbHl6aW5nIExpbmVzIDEzNDAtMTM2MCoqXG5cbkFscmlnaHQsIGxldCdzIHB1bGwgdXAgbGluZXMgMTM0MC0xMzYwLiBCYXNlZCBvbiBteSBleGlzdGluZyBrbm93bGVkZ2Ugb2YgdGhlIGZpZWxkLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgc2VjdGlvbiBhZGRyZXNzZXMgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgcGllY2UsIGFuZCB3aGF0IHRoZSBrZXkgYXJndW1lbnRzIG9yIGZpbmRpbmdzIGFyZS4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgY2VudHJhbCB0aGVzaXMgb2YgdGhpcyBzZWN0aW9uLCBhbnkgc3VwcG9ydGluZyBldmlkZW5jZSBwcmVzZW50ZWQsIGFuZCBob3cgaXQgY29ubmVjdHMgdG8gdGhlIGJyb2FkZXIgdG9waWMuIElzIHRoaXMgYSBjcml0aWNhbCB0dXJuaW5nIHBvaW50PyBEb2VzIHRoaXMgc2VjdGlvbiBhZGQgbnVhbmNlIHRvIGEgcHJldmlvdXMgYXJndW1lbnQ/IFBlcmhhcHMgaXQgaW50cm9kdWNlcyBhIG5ldyB2YXJpYWJsZSB0aGF0IHdpbGwgY2hhbmdlIHdoYXQgSSBuZWVkIHRvIGNvbnNpZGVyPyBJJ2xsIG5lZWQgdG8gZGlzc2VjdCB0aGUgc3BlY2lmaWNzLCBpZGVudGlmeWluZyB0aGUga2V5IGNvbmNlcHRzIGFuZCBqYXJnb24gdXNlZCwgYW5kIHdoZXRoZXIgdGhlIGxhbmd1YWdlIGlzIHByZWNpc2UgYW5kIHJpZ29yb3VzLiBJJ20gbG9va2luZyBmb3IgYW55IHdlYWtuZXNzZXMgaW4gdGhlIGxvZ2ljLCBhbnkgYXNzdW1wdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGNoYWxsZW5nZWQsIGFuZCBhbnkgb3Bwb3J0dW5pdGllcyB0byBleHRlbmQgb3IgYnVpbGQgdXBvbiB0aGUgaWRlYXMgcHJlc2VudGVkLiBJJ2xsIGJlIGNyaXRpY2FsbHkgZXZhbHVhdGluZywgcXVlc3Rpb25pbmcsIGFuZCBjb25uZWN0aW5nLiBBbmQgZmluYWxseSwgSSdsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNvbm5lY3RzIHRvIHByaW9yIGRpc2N1c3Npb25zIHRoYXQgSSdtIGF3YXJlIG9mIGluIHRoZSBsYXJnZXIgZmllbGQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxOTcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjM1OjU0LjYyNjQ3NDk3MloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzA1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXhlYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzNDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzNDA6XFx0b3V0OlxcbjEzNDE6XFx0XFx0cmV0dXJuIHJldHZhbDtcXG4xMzQyOlxcdH1cXG4xMzQzOlxcdEVYUE9SVF9TWU1CT0woYmVnaW5fbmV3X2V4ZWMpO1xcbjEzNDQ6XFx0XFxuMTM0NTpcXHR2b2lkIHdvdWxkX2R1bXAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuMTM0NjpcXHR7XFxuMTM0NzpcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcXG4xMzQ4OlxcdFxcdHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwID0gZmlsZV9tbnRfaWRtYXAoZmlsZSk7XFxuMTM0OTpcXHRcXHRpZiAoaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgaW5vZGUsIE1BWV9SRUFEKSBcXHUwMDNjIDApIHtcXG4xMzUwOlxcdFxcdFxcdHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqb2xkLCAqdXNlcl9ucztcXG4xMzUxOlxcdFxcdFxcdGJwcm0tXFx1MDAzZWludGVycF9mbGFncyB8PSBCSU5QUk1fRkxBR1NfRU5GT1JDRV9OT05EVU1QO1xcbjEzNTI6XFx0XFxuMTM1MzpcXHRcXHRcXHQvKiBFbnN1cmUgYnBybS1cXHUwMDNldXNlcl9ucyBjb250YWlucyB0aGUgZXhlY3V0YWJsZS4gKi9cXG4xMzU0OlxcdFxcdFxcdHVzZXJfbnMgPSBvbGQgPSBicHJtLVxcdTAwM2V1c2VyX25zO1xcbjEzNTU6XFx0XFx0XFx0d2hpbGUgKCh1c2VyX25zICE9IFxcdTAwMjZpbml0X3VzZXJfbnMpIFxcdTAwMjZcXHUwMDI2XFxuMTM1NjpcXHRcXHRcXHQgICAgICAgIXByaXZpbGVnZWRfd3J0X2lub2RlX3VpZGdpZCh1c2VyX25zLCBpZG1hcCwgaW5vZGUpKVxcbjEzNTc6XFx0XFx0XFx0XFx0dXNlcl9ucyA9IHVzZXJfbnMtXFx1MDAzZXBhcmVudDtcXG4xMzU4OlxcdFxcbjEzNTk6XFx0XFx0XFx0aWYgKG9sZCAhPSB1c2VyX25zKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjM1OjU0LjYyNjYwNjk4MloiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTIxMTg5Mjk3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgS2VybmVsIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgb2YgdGhpcyBwYXRjaCBpbnZvbHZlcyBhIHJlLW9yZGVyaW5nIHdpdGhpbiB0aGUgYGJlZ2luX25ld19leGVjKHN0cnVjdCBsaW51eF9iaW5wcm0gKiBicHJtKWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgaXQgc2hpZnRzIHRoZSBjYWxsIHRvIGBkb19jbG9zZV9vbl9leGVjKG1lLVx1MDAzZWZpbGVzKWAgZWFybGllciBpbiB0aGUgZXhlY3V0aW9uIGZsb3cuIEN1cnJlbnRseSwgaXQncyBydW4gYmVmb3JlIHNldmVyYWwgaW1wb3J0YW50IHN0ZXBzIGluIGBiZWdpbl9uZXdfZXhlY2AsIGxpa2UgYHNldF9tbV9leGVfZmlsZSgpYCwgYHdvdWxkX2R1bXAoKWAsIGFuZCB0aGUgY3JpdGljYWwgYGV4ZWNfbW1hcChicHJtKWAgY2FsbCwgd2hpY2gsIGNydWNpYWxseSwgYWNxdWlyZXMgdGhlIGBleGVjX3VwZGF0ZV9sb2NrYC4gQmVmb3JlIHRoZSBwYXRjaCwgaXQgd2FzIGxvY2F0ZWQgYWZ0ZXIgYGNsZWFyX3N5c2NhbGxfd29ya19zeXNjYWxsX3VzZXJfZGlzcGF0Y2gobWUpO2AgaW5zaWRlIHRoZSBjcml0aWNhbCByZWdpb24uXG5cblRoZSBjb3JlIHJlYXNvbiBmb3IgdGhpcyBjaGFuZ2Ugc2VlbXMgdG8gYmUgdG8gYWRkcmVzcyBwb3RlbnRpYWwgbG9ja2luZyBpc3N1ZXMgYW5kLCBzcGVjaWZpY2FsbHksIGRlYWRsb2NrIGNvbmRpdGlvbnMuIFRoZSBgZG9fY2xvc2Vfb25fZXhlY2Agb3BlcmF0aW9uIGNhbiBwb3RlbnRpYWxseSBibG9jaywgcGFydGljdWxhcmx5IHdoZW4gZGVhbGluZyB3aXRoIGZpbGVzeXN0ZW0gZmx1c2ggaGFuZGxlcnMgKGxpa2UgdGhvc2UgaW4gRlVTRSBkYWVtb25zKS4gSWYgdGhpcyBibG9ja2luZyB3ZXJlIHRvIGhhcHBlbiAqd2hpbGUqIGhvbGRpbmcgdGhlIGBleGVjX3VwZGF0ZV9sb2NrYCBhY3F1aXJlZCBieSBgZXhlY19tbWFwKClgLCBpdCBjcmVhdGVzIGEgZGVhZGxvY2sgcmlzay4gVGhpcyByZW9yZGVyaW5nIG1vdmVzIHRoZSBgY2xvc2Vfb25fZXhlY2Agb3BlcmF0aW9uIHRvIGhhcHBlbiBiZWZvcmUgYGV4ZWNfbW1hcGAgYWNxdWlyZXMgdGhlIGxvY2ssIHdoaWNoIGVmZmVjdGl2ZWx5IHJlZHVjZXMgdGhlIHdpbmRvdyBmb3IgcG90ZW50aWFsIGRlYWRsb2Nrcy4gQWxzbywgbW92aW5nIGl0IGVhcmxpZXIgZW5zdXJlcyBgY2xvc2Vfb25fZXhlY2AgZmlsZXMgYXJlIGNsb3NlZCBiZWZvcmUgbW9kaWZ5aW5nIGR1bXBhYmlsaXR5L21tYXAuXG5cbk5vdywgdGhlIGltcG9ydGFudCBwYXJ0LiBNeSBtYWluIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IG1lbW9yeS1yZWxhdGVkIHZ1bG5lcmFiaWxpdGllcy4gSSd2ZSBjb25zaWRlcmVkIGFsbCB0aGUgcG90ZW50aWFsIHBpdGZhbGxzOlxuXG4xLiAgKipVbmluaXRpYWxpemVkIGRhdGEgYmVpbmcgZXhwb3NlZCB0byB1c2VyIHNwYWNlPyoqIE5vLCB0aGVyZSBhcmUgbm8gY2hhbmdlcyB0byBhbnkgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlIHZpYSBjb3B5IG9wZXJhdGlvbnMsIG9yIGFueSB1bmluaXRpYWxpemVkIGZpZWxkcy5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIEkgc2VlIG5vIG5ldyBjb25kaXRpb25hbCBsb2dpYyB0aGF0IHJlbGllcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuXG4zLiAgKipVbmluaXRpYWxpemVkIGZpZWxkcyBpbiBuZXdseSBhbGxvY2F0ZWQgZGF0YSBzdHJ1Y3R1cmVzPyoqIFRoaXMgaXMgYW5vdGhlciBjb25jZXJuIEkgaGF2ZSwgYW5kIEkgZG9uJ3Qgc2VlIGFueSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBiZWluZyBhbGxvY2F0ZWQgb3IgaW5pdGlhbGl6ZWQgaW4gYSB3YXkgdGhhdCBjb3VsZCBsZWFkIHRvIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxhdGVyLlxuNC4gICoqQm91bmRzIGNoZWNrcyBvciBidWZmZXIgbWFuaXB1bGF0aW9uIGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSBhY2Nlc3M/KiogTm8uIEkgZG9uJ3Qgc2VlIGFueSBtb2RpZmljYXRpb25zIHRvIGJvdW5kcyBjaGVja3MgdGhhdCBjb3VsZCByZXN1bHQgaW4gdW5pbml0aWFsaXplZCBieXRlIHJlYWRzLCBvciBjaGFuZ2VzIGluIGxvZ2ljIHJlbGF0ZWQgdG8gYWNjZXNzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIGZyb20gYW4gKnVuaW5pdGlhbGl6ZWQgbWVtb3J5KiBwZXJzcGVjdGl2ZS4gVGhlcmUgYXJlIG5vIGFsbG9jYXRpb25zLCBjb3BpZXMsIG9yIGV4cG9zdXJlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIHJpc2tzIGhlcmUgYXJlIG5vdCBhYm91dCBtZW1vcnkgKmNvbnRlbnQqLCBidXQgYWJvdXQgbG9jayBvcmRlciwgb2JqZWN0IGxpZmV0aW1lcywgYW5kIHBvdGVudGlhbGx5IGluY29ycmVjdCBlcnJvciBoYW5kbGluZy4gVGhlIHN0YW5kYXJkIGRldGVjdG9ycyBmb3IgdGhlc2Uga2luZHMgb2YgcHJvYmxlbXMsIGxpa2UgTE9DS0RFUCBhbmQgS0FTQU4sIGFyZSBwZXJmZWN0bHkgYWRlcXVhdGUgdG8gY2F0Y2ggYW55IGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IHRoZSBjaGFuZ2UgaW4gbG9ja2luZyBvcmRlci4gS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIgKEtNU0FOKSBpcyBub3QgbmVlZGVkIGJlY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgbm90IHRoZSBwcm9ibGVtIGhlcmUuIEl0J3MgdGhlIG9yZGVyIGFuZCBpbnRlcmFjdGlvbnMgb2YgbG9ja3MsIHdoaWNoIGFyZSBiZXR0ZXIgaWRlbnRpZmllZCBieSB0aGUgc2FuaXRpemVycyBmb3IgdGhvc2Ugc3BlY2lmaWMgY29uY2VybnMuXG5cblNvLCB0aGUgcmVhc29uaW5nIGlzIGNsZWFyOiB0aGUgcGF0Y2ggbW92ZXMgYGRvX2Nsb3NlX29uX2V4ZWNgIGVhcmxpZXIgdG8gYXZvaWQgZGVhZGxvY2tzLCBhbmQgaXQgZG9lcyBub3QgYWZmZWN0IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIFdlIHNob3VsZCBiZSBnb29kIHRvIGdvLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODM3LCJPdXRwdXRUb2tlbnMiOjE5OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjM2OjA1LjgzODUwMjYwMVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgdGhlIGludm9jYXRpb24gb2YgYGRvX2Nsb3NlX29uX2V4ZWMobWUtXFx1MDAzZWZpbGVzKWAgZWFybGllciBpbiBgYmVnaW5fbmV3X2V4ZWMoKWAsIHBsYWNpbmcgaXQgYmVmb3JlIGBzZXRfbW1fZXhlX2ZpbGUoKWAgYW5kIGBleGVjX21tYXAoKWAuIFRoaXMgYXZvaWRzIGhvbGRpbmcgYGV4ZWNfdXBkYXRlX2xvY2tgIHdoaWxlIGZpbGVzeXN0ZW0gYC1cXHUwMDNlZmx1c2goKWAgaGFuZGxlcnMgKHN1Y2ggYXMgRlVTRSkgcnVuIGR1cmluZyBgZmlscF9jbG9zZSgpYCwgcmVzb2x2aW5nIHBvdGVudGlhbCBsb2NraW5nL2RlYWRsb2NrIGFuZCBjb25jdXJyZW5jeSBpc3N1ZXMuXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgY29udHJvbCBmbG93IGFuZCBsb2NrIG9yZGVyaW5nIGFkanVzdG1lbnQgd2l0aGluIHByb2Nlc3MgZXhlY3V0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIGFsbG9jYXRlLCBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdGFjay9oZWFwIGJ1ZmZlcnMsIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBBbnkgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGxvY2tpbmcgb3IgZmlsZSBkZXNjcmlwdG9yIHJlZmVyZW5jZSBsaWZlY3ljbGVzIGFyZSBtb25pdG9yZWQgYnkgTE9DS0RFUCBhbmQgc3RhbmRhcmQgS0FTQU4gYnVpbGRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgdGhlIGludm9jYXRpb24gb2YgYGRvX2Nsb3NlX29uX2V4ZWMobWUtXFx1MDAzZWZpbGVzKWAgZWFybGllciBpbiBgYmVnaW5fbmV3X2V4ZWMoKWAsIHBsYWNpbmcgaXQgYmVmb3JlIGBzZXRfbW1fZXhlX2ZpbGUoKWAgYW5kIGBleGVjX21tYXAoKWAuIFRoaXMgYXZvaWRzIGhvbGRpbmcgYGV4ZWNfdXBkYXRlX2xvY2tgIHdoaWxlIGZpbGVzeXN0ZW0gYC1cXHUwMDNlZmx1c2goKWAgaGFuZGxlcnMgKHN1Y2ggYXMgRlVTRSkgcnVuIGR1cmluZyBgZmlscF9jbG9zZSgpYCwgcmVzb2x2aW5nIHBvdGVudGlhbCBsb2NraW5nL2RlYWRsb2NrIGFuZCBjb25jdXJyZW5jeSBpc3N1ZXMuXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGEgY29udHJvbCBmbG93IGFuZCBsb2NrIG9yZGVyaW5nIGFkanVzdG1lbnQgd2l0aGluIHByb2Nlc3MgZXhlY3V0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIGFsbG9jYXRlLCBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdGFjay9oZWFwIGJ1ZmZlcnMsIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBBbnkgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGxvY2tpbmcgb3IgZmlsZSBkZXNjcmlwdG9yIHJlZmVyZW5jZSBsaWZlY3ljbGVzIGFyZSBtb25pdG9yZWQgYnkgTE9DS0RFUCBhbmQgc3RhbmRhcmQgS0FTQU4gYnVpbGRzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowthkmb[1] Phase: Succeeded StartedAt: 2026-09-08 01:36:17 +0000 UTC FinishedAt: 2026-09-08 01:36:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthkmb[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-08 01:36:17 +0000 UTC FinishedAt: 2026-09-08 01:36:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthkmb[2] Phase: Succeeded StartedAt: 2026-09-08 01:36:17 +0000 UTC FinishedAt: 2026-09-08 05:17:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthkmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["begin_new_exec","do_close_on_exec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"f9097de5-06f0-401d-820f-7969cfbbc75c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-08 01:36:17 +0000 UTC FinishedAt: 2026-09-08 05:17:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["begin_new_exec","do_close_on_exec"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"f9097de5-06f0-401d-820f-7969cfbbc75c","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-workflowthkmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["begin_new_exec","do_close_on_exec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"f9097de5-06f0-401d-820f-7969cfbbc75c","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-08 01:36:17 +0000 UTC FinishedAt: 2026-09-08 01:36:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthkmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["begin_new_exec","do_close_on_exec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"f9097de5-06f0-401d-820f-7969cfbbc75c","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-08 01:36:17 +0000 UTC FinishedAt: 2026-09-08 01:36:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","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-workflowthkmb/series-workflowthkmb-convert-artifact-3136187358/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowthkmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["begin_new_exec","do_close_on_exec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"f9097de5-06f0-401d-820f-7969cfbbc75c","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-08 01:36:28 +0000 UTC FinishedAt: 2026-09-08 01:53:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthkmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["begin_new_exec","do_close_on_exec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"f9097de5-06f0-401d-820f-7969cfbbc75c","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-08 01:36:28 +0000 UTC FinishedAt: 2026-09-08 01:53:55 +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:*3541f3d2-abdb-4862-8ad7-9fdeba66cef8,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-workflowthkmb/series-workflowthkmb-convert-artifact-3136187358/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": "57f9ae52-5117-487c-bda0-bda8c3e06f9f", "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-workflowthkmb/series-workflowthkmb-build-action-2422901956/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowthkmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["begin_new_exec","do_close_on_exec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"f9097de5-06f0-401d-820f-7969cfbbc75c","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-08 01:36:28 +0000 UTC FinishedAt: 2026-09-08 01:53:45 +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:*3541f3d2-abdb-4862-8ad7-9fdeba66cef8,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-workflowthkmb/series-workflowthkmb-convert-artifact-3136187358/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": "57f9ae52-5117-487c-bda0-bda8c3e06f9f", "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-workflowthkmb/series-workflowthkmb-build-action-2422901956/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowthkmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["begin_new_exec","do_close_on_exec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"f9097de5-06f0-401d-820f-7969cfbbc75c","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-08 01:53:55 +0000 UTC FinishedAt: 2026-09-08 01:53:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthkmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["begin_new_exec","do_close_on_exec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"f9097de5-06f0-401d-820f-7969cfbbc75c","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-08 01:53:55 +0000 UTC FinishedAt: 2026-09-08 01:53:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthkmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["begin_new_exec","do_close_on_exec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"f9097de5-06f0-401d-820f-7969cfbbc75c","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-08 01:53:55 +0000 UTC FinishedAt: 2026-09-08 01:54:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthkmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["begin_new_exec","do_close_on_exec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"f9097de5-06f0-401d-820f-7969cfbbc75c","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-08 01:53:55 +0000 UTC FinishedAt: 2026-09-08 01:54:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"f9097de5-06f0-401d-820f-7969cfbbc75c","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-workflowthkmb/series-workflowthkmb-convert-artifact-1581458321/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowthkmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["begin_new_exec","do_close_on_exec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"f9097de5-06f0-401d-820f-7969cfbbc75c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-08 01:54:05 +0000 UTC FinishedAt: 2026-09-08 01:56:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthkmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["begin_new_exec","do_close_on_exec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"f9097de5-06f0-401d-820f-7969cfbbc75c","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: Succeeded StartedAt: 2026-09-08 01:54:05 +0000 UTC FinishedAt: 2026-09-08 01:55:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*57f9ae52-5117-487c-bda0-bda8c3e06f9f,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-workflowthkmb/series-workflowthkmb-build-action-2422901956/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowthkmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["begin_new_exec","do_close_on_exec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"f9097de5-06f0-401d-820f-7969cfbbc75c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-08 01:56:03 +0000 UTC FinishedAt: 2026-09-08 01:56:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthkmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["begin_new_exec","do_close_on_exec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"f9097de5-06f0-401d-820f-7969cfbbc75c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-08 01:56:03 +0000 UTC FinishedAt: 2026-09-08 01:56:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthkmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["begin_new_exec","do_close_on_exec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"f9097de5-06f0-401d-820f-7969cfbbc75c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-08 01:56:03 +0000 UTC FinishedAt: 2026-09-08 02:11:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthkmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["begin_new_exec","do_close_on_exec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"f9097de5-06f0-401d-820f-7969cfbbc75c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-08 01:56:03 +0000 UTC FinishedAt: 2026-09-08 02:11:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*3541f3d2-abdb-4862-8ad7-9fdeba66cef8,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-workflowthkmb/series-workflowthkmb-convert-artifact-1581458321/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": "7be599a4-b6e3-4d34-b0df-191e631ae2bb", "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-workflowthkmb/series-workflowthkmb-build-action-341447517/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowthkmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["begin_new_exec","do_close_on_exec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"f9097de5-06f0-401d-820f-7969cfbbc75c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-08 01:56:03 +0000 UTC FinishedAt: 2026-09-08 02:11:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*3541f3d2-abdb-4862-8ad7-9fdeba66cef8,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-workflowthkmb/series-workflowthkmb-convert-artifact-1581458321/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": "7be599a4-b6e3-4d34-b0df-191e631ae2bb", "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-workflowthkmb/series-workflowthkmb-build-action-341447517/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowthkmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["begin_new_exec","do_close_on_exec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"f9097de5-06f0-401d-820f-7969cfbbc75c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-08 02:11:54 +0000 UTC FinishedAt: 2026-09-08 02:11:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthkmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["begin_new_exec","do_close_on_exec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"f9097de5-06f0-401d-820f-7969cfbbc75c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-08 02:11:54 +0000 UTC FinishedAt: 2026-09-08 02:11:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthkmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["begin_new_exec","do_close_on_exec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"f9097de5-06f0-401d-820f-7969cfbbc75c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-08 02:11:54 +0000 UTC FinishedAt: 2026-09-08 02:13:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthkmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["begin_new_exec","do_close_on_exec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"f9097de5-06f0-401d-820f-7969cfbbc75c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-08 02:11:54 +0000 UTC FinishedAt: 2026-09-08 02:13:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7be599a4-b6e3-4d34-b0df-191e631ae2bb,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowthkmb/series-workflowthkmb-build-action-341447517/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowthkmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["begin_new_exec","do_close_on_exec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"f9097de5-06f0-401d-820f-7969cfbbc75c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-08 02:13:46 +0000 UTC FinishedAt: 2026-09-08 05:17:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthkmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["begin_new_exec","do_close_on_exec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"f9097de5-06f0-401d-820f-7969cfbbc75c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-08 02:13:46 +0000 UTC FinishedAt: 2026-09-08 05:17:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["begin_new_exec","do_close_on_exec"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*57f9ae52-5117-487c-bda0-bda8c3e06f9f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7be599a4-b6e3-4d34-b0df-191e631ae2bb,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowthkmb/series-workflowthkmb-build-action-2422901956/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowthkmb/series-workflowthkmb-build-action-341447517/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowthkmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["begin_new_exec","do_close_on_exec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"f9097de5-06f0-401d-820f-7969cfbbc75c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-08 02:13:46 +0000 UTC FinishedAt: 2026-09-08 02:13:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthkmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["begin_new_exec","do_close_on_exec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"f9097de5-06f0-401d-820f-7969cfbbc75c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-08 02:13:46 +0000 UTC FinishedAt: 2026-09-08 02:13:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["begin_new_exec","do_close_on_exec"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowthkmb/series-workflowthkmb-convert-artifact-1677774534/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowthkmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["begin_new_exec","do_close_on_exec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"f9097de5-06f0-401d-820f-7969cfbbc75c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-08 02:13:46 +0000 UTC FinishedAt: 2026-09-08 02:13:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthkmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["begin_new_exec","do_close_on_exec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"f9097de5-06f0-401d-820f-7969cfbbc75c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-08 02:13:46 +0000 UTC FinishedAt: 2026-09-08 02:13:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthkmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["begin_new_exec","do_close_on_exec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"f9097de5-06f0-401d-820f-7969cfbbc75c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-08 02:13:46 +0000 UTC FinishedAt: 2026-09-08 02:13:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthkmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["begin_new_exec","do_close_on_exec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"f9097de5-06f0-401d-820f-7969cfbbc75c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-08 02:13:56 +0000 UTC FinishedAt: 2026-09-08 05:17:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthkmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["begin_new_exec","do_close_on_exec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"73ae59e975966d24e32926247ddb45a537ebe184","config_name":"upstream-apparmor-kasan.config","series_id":"f9097de5-06f0-401d-820f-7969cfbbc75c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-08 02:13:56 +0000 UTC FinishedAt: 2026-09-08 05:16:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*57f9ae52-5117-487c-bda0-bda8c3e06f9f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7be599a4-b6e3-4d34-b0df-191e631ae2bb,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowthkmb/series-workflowthkmb-build-action-2422901956/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowthkmb/series-workflowthkmb-build-action-341447517/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowthkmb/series-workflowthkmb-convert-artifact-1677774534/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}