Name: series-workflown5tlg Phase: Succeeded StartedAt: 2026-09-04 13:23:18 +0000 UTC FinishedAt: 2026-09-04 17:50:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5tlg[0] Phase: Succeeded StartedAt: 2026-09-04 13:23:18 +0000 UTC FinishedAt: 2026-09-04 14:03:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5tlg[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 13:23:18 +0000 UTC FinishedAt: 2026-09-04 14:03:56 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "43131d0d3d34e22d6e9072ec25c63dec7a9a646b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PAGE_OWNER", "MIGRATION" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "43131d0d3d34e22d6e9072ec25c63dec7a9a646b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PAGE_OWNER", "MIGRATION" ], "series_id": "6e75328f-a467-46f6-b545-936e25c8d584" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__folio_copy_owner", "folio_migrate_flags" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEzOjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQQUdFX09XTkVSJiMzNDssCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fZm9saW9fY29weV9vd25lciYjMzQ7LAogICAgJiMzNDtmb2xpb19taWdyYXRlX2ZsYWdzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGUoKWAgd2hlcmUgdGhlIGZ1bmN0aW9uIHdhcyBhc3NpZ25pbmcgYGN1cnJlbnQtXHUwMDNlcGlkYCBhbmQgYGN1cnJlbnQtXHUwMDNldGdpZGAgaW5zdGVhZCBvZiB0aGUgcGFzc2VkLWluIGBwaWRgIGFuZCBgdGdpZGAgZnVuY3Rpb24gYXJndW1lbnRzLiBUaGUgcGFzc2VkIHBhcmFtZXRlcnMgYXJlIHByaW1pdGl2ZSBzY2FsYXIgdHlwZXMgKGBwaWRfdGApIHRoYXQgYXJlIGluaXRpYWxpemVkIGJ5IGNhbGxlcnMgKGBjdXJyZW50LVx1MDAzZXBpZGAvYGN1cnJlbnQtXHUwMDNldGdpZGAgaW4gYF9fcmVzZXRfcGFnZV9vd25lcmAgb3IgYG9sZF9wYWdlX293bmVyLVx1MDAzZWZyZWVfcGlkYC9gZnJlZV90Z2lkYCBpbiBgX19mb2xpb19jb3B5X293bmVyYCkuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgc3RydWN0IHBhZGRpbmcgbGVha3MgdG8gdXNlciBzcGFjZSwgb3IgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBtbS9wYWdlX293bmVyLmMgd2hlcmUgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZSgpIGlnbm9yZWQgdGhlIHBhc3NlZCBwaWQgYW5kIHRnaWQgYXJndW1lbnRzIGFuZCBpbnN0ZWFkIHVzZWQgY3VycmVudC1cdTAwM2VwaWQgYW5kIGN1cnJlbnQtXHUwMDNldGdpZC4gVGhpcyBkaXJlY3RseSBhZmZlY3RzIGZvbGlvIG1pZ3JhdGlvbiBpbiBfX2ZvbGlvX2NvcHlfb3duZXIoKSwgd2hlcmUgdGhlIG9yaWdpbmFsIG93bmVyJiMzOTtzIGZyZWVfcGlkIGFuZCBmcmVlX3RnaWQgbmVlZCB0byBiZSBwcmVzZXJ2ZWQuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IHRyYWNraW5nIGxvZ2ljIGluIGNvcmUgbW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTM6NTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2ZDEyYzgyNDY1NmM5YjgzN2MyODI0MzhjZWUyM2ZjZWRmNWU4ZTBjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxMzo1MzozMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9wYWdlX293bmVyLmMgYi9tbS9wYWdlX293bmVyLmNcbmluZGV4IDNmYzM3ZDliOTA4ZWYuLmNmYzMxYzkyZDc2NTcgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX293bmVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2Vfb3duZXIuY1xuQEAgLTMwNyw4ICYjNDM7MzA3LDggQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGUoc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRcdFx0cGFnZV9vd25lci1cdTAwM2VmcmVlX2hhbmRsZSA9IGhhbmRsZTtcbiBcdFx0fVxuIFx0XHRwYWdlX293bmVyLVx1MDAzZWZyZWVfdHNfbnNlYyA9IGZyZWVfdHNfbnNlYztcbi1cdFx0cGFnZV9vd25lci1cdTAwM2VmcmVlX3BpZCA9IGN1cnJlbnQtXHUwMDNlcGlkO1xuLVx0XHRwYWdlX293bmVyLVx1MDAzZWZyZWVfdGdpZCA9IGN1cnJlbnQtXHUwMDNldGdpZDtcbiYjNDM7XHRcdHBhZ2Vfb3duZXItXHUwMDNlZnJlZV9waWQgPSBwaWQ7XG4mIzQzO1x0XHRwYWdlX293bmVyLVx1MDAzZWZyZWVfdGdpZCA9IHRnaWQ7XG4gXHR9XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTM6NTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEFHRV9PV05FUiYjMzQ7LAogICAgJiMzNDtNSUdSQVRJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2ZvbGlvX2NvcHlfb3duZXImIzM0OywKICAgICYjMzQ7Zm9saW9fbWlncmF0ZV9mbGFncyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBtbS9wYWdlX293bmVyLmMgd2hlcmUgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZSgpIGlnbm9yZWQgdGhlIHBhc3NlZCBwaWQgYW5kIHRnaWQgYXJndW1lbnRzIGFuZCBpbnN0ZWFkIHVzZWQgY3VycmVudC1cdTAwM2VwaWQgYW5kIGN1cnJlbnQtXHUwMDNldGdpZC4gVGhpcyBkaXJlY3RseSBhZmZlY3RzIGZvbGlvIG1pZ3JhdGlvbiBpbiBfX2ZvbGlvX2NvcHlfb3duZXIoKSwgd2hlcmUgdGhlIG9yaWdpbmFsIG93bmVyJiMzOTtzIGZyZWVfcGlkIGFuZCBmcmVlX3RnaWQgbmVlZCB0byBiZSBwcmVzZXJ2ZWQuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IHRyYWNraW5nIGxvZ2ljIGluIGNvcmUgbW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2ZDEyYzgyNDY1NmM5YjgzN2MyODI0MzhjZWUyM2ZjZWRmNWU4ZTBjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAxMzo1MzozMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3BhZ2Vfb3duZXIuYyBiL21tL3BhZ2Vfb3duZXIuYwppbmRleCAzZmMzN2Q5YjkwOGVmLi5jZmMzMWM5MmQ3NjU3IDEwMDY0NAotLS0gYS9tbS9wYWdlX293bmVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9vd25lci5jCkBAIC0zMDcsOCAmIzQzOzMwNyw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlKHN0cnVjdCBwYWdlICpwYWdlLAogCQkJcGFnZV9vd25lci0mZ3Q7ZnJlZV9oYW5kbGUgPSBoYW5kbGU7CiAJCX0KIAkJcGFnZV9vd25lci0mZ3Q7ZnJlZV90c19uc2VjID0gZnJlZV90c19uc2VjOwotCQlwYWdlX293bmVyLSZndDtmcmVlX3BpZCA9IGN1cnJlbnQtJmd0O3BpZDsKLQkJcGFnZV9vd25lci0mZ3Q7ZnJlZV90Z2lkID0gY3VycmVudC0mZ3Q7dGdpZDsKJiM0MzsJCXBhZ2Vfb3duZXItJmd0O2ZyZWVfcGlkID0gcGlkOwomIzQzOwkJcGFnZV9vd25lci0mZ3Q7ZnJlZV90Z2lkID0gdGdpZDsKIAl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEzOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4ODUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBgbW0vcGFnZV9vd25lci5jYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBtb2RpZmllZCBmaWxlLCB3aGljaCBpcyBgbW0vcGFnZV9vd25lci5jYC4gR2l2ZW4gdGhhdCBJJiMzOTttIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCwgdGhpcyBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBjaGFuZ2VzLCBzbyBteSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgY29kZSBhcm91bmQgbGluZSAzMDcuIEkmIzM5O2xsIGxpa2VseSB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIHF1aWNrbHkgaXNvbGF0ZSB0aGUgcmVsZXZhbnQgc2VjdGlvbiBvZiB0aGUgY29kZSBhbmQgZ2V0IGEgY2xlYXJlciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgdGhlIHBhdGNoIGlzIGRvaW5nIGFuZCBob3cgaXQgY291bGQgcG90ZW50aWFsbHkgaW1wYWN0IHRoZSBzeXN0ZW0uIEl0IGlzIGltcG9ydGFudCB0byBrbm93IHRoZSBjb250ZXh0LCBhbmQgd2hhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBkb2VzIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX293bmVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI5MDpcdFxuIDI5MTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlKHN0cnVjdCBwYWdlICpwYWdlLFxuIDI5MjpcdFx0XHRcdFx0XHRcdCAgIGRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZSxcbiAyOTM6XHRcdFx0XHRcdFx0XHQgICB1bnNpZ25lZCBzaG9ydCBvcmRlcixcbiAyOTQ6XHRcdFx0XHRcdFx0XHQgICBwaWRfdCBwaWQsIHBpZF90IHRnaWQsXG4gMjk1Olx0XHRcdFx0XHRcdFx0ICAgdTY0IGZyZWVfdHNfbnNlYylcbiAyOTY6XHR7XG4gMjk3Olx0XHRzdHJ1Y3QgcGFnZV9leHRfaXRlciBpdGVyO1xuIDI5ODpcdFx0c3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dDtcbiAyOTk6XHRcdHN0cnVjdCBwYWdlX293bmVyICpwYWdlX293bmVyO1xuIDMwMDpcdFxuIDMwMTpcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDMwMjpcdFx0Zm9yX2VhY2hfcGFnZV9leHQocGFnZSwgMSBcdTAwM2NcdTAwM2Mgb3JkZXIsIHBhZ2VfZXh0LCBpdGVyKSB7XG4gMzAzOlx0XHRcdHBhZ2Vfb3duZXIgPSBnZXRfcGFnZV9vd25lcihwYWdlX2V4dCk7XG4gMzA0Olx0XHRcdC8qIE9ubHkgX19yZXNldF9wYWdlX293bmVyKCkgd2FudHMgdG8gY2xlYXIgdGhlIGJpdCAqL1xuIDMwNTpcdFx0XHRpZiAoaGFuZGxlKSB7XG4gMzA2Olx0XHRcdFx0X19jbGVhcl9iaXQoUEFHRV9FWFRfT1dORVJfQUxMT0NBVEVELCBcdTAwMjZwYWdlX2V4dC1cdTAwM2VmbGFncyk7XG4gMzA3Olx0XHRcdFx0cGFnZV9vd25lci1cdTAwM2VmcmVlX2hhbmRsZSA9IGhhbmRsZTtcbiAzMDg6XHRcdFx0fVxuIDMwOTpcdFx0XHRwYWdlX293bmVyLVx1MDAzZWZyZWVfdHNfbnNlYyA9IGZyZWVfdHNfbnNlYztcbiAzMTA6XHRcdFx0cGFnZV9vd25lci1cdTAwM2VmcmVlX3BpZCA9IHBpZDtcbiAzMTE6XHRcdFx0cGFnZV9vd25lci1cdTAwM2VmcmVlX3RnaWQgPSB0Z2lkO1xuIDMxMjpcdFx0fVxuIDMxMzpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gMzE0Olx0fVxuIDMxNTpcdFxuIDMxNjpcdHZvaWQgX19yZXNldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBzaG9ydCBvcmRlcilcbiAzMTc6XHR7XG4gMzE4Olx0XHRzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0O1xuIDMxOTpcdFx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlO1xuIDMyMDpcdFx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgYWxsb2NfaGFuZGxlO1xuIDMyMTpcdFx0c3RydWN0IHBhZ2Vfb3duZXIgKnBhZ2Vfb3duZXI7XG4gMzIyOlx0XHR1NjQgZnJlZV90c19uc2VjID0gbG9jYWxfY2xvY2soKTtcbiAzMjM6XHRcbiAzMjQ6XHRcdHBhZ2VfZXh0ID0gcGFnZV9leHRfZ2V0KHBhZ2UpO1xuIDMyNTpcdFx0aWYgKHVubGlrZWx5KCFwYWdlX2V4dCkpXG4gMzI2Olx0XHRcdHJldHVybjtcbiAzMjc6XHRcbiAzMjg6XHRcdHBhZ2Vfb3duZXIgPSBnZXRfcGFnZV9vd25lcihwYWdlX2V4dCk7XG4gMzI5Olx0XHRhbGxvY19oYW5kbGUgPSBwYWdlX293bmVyLVx1MDAzZWhhbmRsZTtcbiAzMzA6XHRcdHBhZ2VfZXh0X3B1dChwYWdlX2V4dCk7XG4gMzMxOlx0XG4gMzMyOlx0XHQvKlxuIDMzMzpcdFx0ICogRG8gbm90IHNwZWNpZnkgR0ZQX05PV0FJVCB0byBtYWtlIGdmcGZsYWdzX2FsbG93X3NwaW5uaW5nKCkgPT0gZmFsc2VcbiAzMzQ6XHRcdCAqIHRvIHByZXZlbnQgaXNzdWVzIGluIHN0YWNrX2RlcG90X3NhdmUoKS5cbiAzMzU6XHRcdCAqIFRoaXMgaXMgc2ltaWxhciB0byBhbGxvY19wYWdlc19ub2xvY2soKSBnZnAgZmxhZ3MsIGJ1dCBvbmx5IHVzZWRcbiAzMzY6XHRcdCAqIHRvIHNpZ25hbCBzdGFja19kZXBvdCB0byBhdm9pZCBzcGluX2xvY2tzLlxuIDMzNzpcdFx0ICovXG4gMzM4Olx0XHRoYW5kbGUgPSBzYXZlX3N0YWNrKF9fR0ZQX05PV0FSTik7XG4gMzM5Olx0XHRfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlKHBhZ2UsIGhhbmRsZSwgb3JkZXIsIGN1cnJlbnQtXHUwMDNlcGlkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NDUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2UgYXJlIG15IGltbWVkaWF0ZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlYCBDYWxsZXJzKioKCkFscmlnaHQsIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgdGhvcm91Z2hseSBpbnZlc3RpZ2F0ZSB0aGUgY2FsbGVycyBvZiBgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZWAuIFRoaXMgdXN1YWxseSBpbmRpY2F0ZXMgYSBjcml0aWNhbCBhcmVhIG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0sIHNvIGFueSBjaGFuZ2VzIG9yIGlzc3VlcyBoZXJlIGFyZSBsaWtlbHkgdG8gaGF2ZSBhIGNhc2NhZGluZyBlZmZlY3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIOKAkyB3aGF0JiMzOTtzIHRoZSBpbnRlbmRlZCBwdXJwb3NlLCB3aGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgaW52b2x2ZWQsIGFuZCB3aGF0JiMzOTtzIHRoZSB0eXBpY2FsIHdvcmtmbG93IHN1cnJvdW5kaW5nIGl0PyBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoZSBhcmd1bWVudHMgYmVpbmcgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbiwgYXMgdGhhdCYjMzk7bGwgZ2l2ZSBtZSBjbHVlcyBhYm91dCB0aGUgc3BlY2lmaWMgY29udGV4dCBpbiB3aGljaCBpdCBvcGVyYXRlcy4gSXMgaXQgZGVhbGluZyB3aXRoIHBhZ2UgZnJlZWluZz8gUGFnZSBhbGxvY2F0aW9uIHRyYWNraW5nPyBTb21ldGhpbmcgZWxzZSBlbnRpcmVseT8KCk9uY2UgSSBoYXZlIGEgZmlybSBncmFzcCBvbiB0aGUgY2FsbGVycyB0aGVtc2VsdmVzLCBJJiMzOTtsbCB0aGVuIGV4cGFuZCBteSBmb2N1cyB0byBlbmNvbXBhc3MgdGhlICYjMzQ7c3Vycm91bmRpbmcgY29kZS4mIzM0OyBJIGNhbiYjMzk7dCBqdXN0IGxvb2sgYXQgdGhlIGRpcmVjdCBjYWxsczsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mICpob3cqIHRoZXNlIGNhbGxzIGZpdCBpbnRvIHRoZSBncmVhdGVyIHNjaGVtZSBvZiBtZW1vcnkgbWFuYWdlbWVudC4gV2hhdCBvcGVyYXRpb25zIGNvbWUgYmVmb3JlIHRoZSBjYWxsLCBhbmQgd2hhdCBvcGVyYXRpb25zIGhhcHBlbiBpbW1lZGlhdGVseSBhZnRlcndhcmRzPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGxvY2tpbmcgaXNzdWVzLCBvciBzdWJ0bGUgZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgYmUgcHJvYmxlbWF0aWM/IFdoYXQmIzM5O3MgdGhlIGVycm9yIGhhbmRsaW5nIGxpa2UgaW4gdGhpcyBzZWN0aW9uPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBleGVjdXRpb24gcGF0aCB0aGF0IGxlYWRzIHRvIHRoaXMgZnVuY3Rpb24gY2FsbD8gQW5kIHdoYXQgYXNzdW1wdGlvbnMgYXJlIGJlaW5nIG1hZGUgYWJvdXQgdGhlIHN0YXRlIG9mIHRoZSBzeXN0ZW0gYXQgdGhhdCBwb2ludD8gVGhlIGRldmlsIGlzIGFsd2F5cyBpbiB0aGUgZGV0YWlscywgc28gSSBuZWVkIHRvIGtub3cgdGhpcyBpbnNpZGUgYW5kIG91dC4gSXQmIzM5O3MgdGltZSB0byBkaWcgZGVlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2Vfb3duZXIuYz0yNjI9c3RhdGljIGlubGluZSB2b2lkIF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbm1tL3BhZ2Vfb3duZXIuYy0yOTAtXG5tbS9wYWdlX293bmVyLmM6MjkxOnN0YXRpYyBpbmxpbmUgdm9pZCBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlKHN0cnVjdCBwYWdlICpwYWdlLFxubW0vcGFnZV9vd25lci5jLTI5Mi1cdFx0XHRcdFx0XHQgICBkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGUsXG4tLVxubW0vcGFnZV9vd25lci5jPTMxNj12b2lkIF9fcmVzZXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgc2hvcnQgb3JkZXIpXG4tLVxubW0vcGFnZV9vd25lci5jLTMzOC1cdGhhbmRsZSA9IHNhdmVfc3RhY2soX19HRlBfTk9XQVJOKTtcbm1tL3BhZ2Vfb3duZXIuYzozMzk6XHRfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlKHBhZ2UsIGhhbmRsZSwgb3JkZXIsIGN1cnJlbnQtXHUwMDNlcGlkLFxubW0vcGFnZV9vd25lci5jLTM0MC1cdFx0XHRcdFx0Y3VycmVudC1cdTAwM2V0Z2lkLCBmcmVlX3RzX25zZWMpO1xuLS1cbm1tL3BhZ2Vfb3duZXIuYz0zOTM9dm9pZCBfX2ZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpXG4tLVxubW0vcGFnZV9vd25lci5jLTQyNS1cdCAqL1xubW0vcGFnZV9vd25lci5jOjQyNjpcdF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGUoXHUwMDI2bmV3Zm9saW8tXHUwMDNlcGFnZSwgMCwgb2xkX3BhZ2Vfb3duZXItXHUwMDNlb3JkZXIsXG5tbS9wYWdlX293bmVyLmMtNDI3LVx0XHRcdFx0XHRvbGRfcGFnZV9vd25lci1cdTAwM2VmcmVlX3BpZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjkxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byBgcGFnZV9vd25lci5jYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBwYWdlIG93bmVyc2hpcCBpcyB0cmFja2VkIGluIHRoaXMgc3lzdGVtLCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgbW0vcGFnZV9vd25lci5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gemVyb2luZyBpbiBvbiB0aGUgYF9fZm9saW9fY29weV9vd25lcmAgZnVuY3Rpb24uIFRoZSBuYW1pbmcgc3VnZ2VzdHMgdGhpcyBpcyBrZXkgdG8gaG93IG93bmVyc2hpcCBpcyB0cmFuc2ZlcnJlZCBvciBjb3BpZWQsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJJiMzOTttIGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZy4gVG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJlYWQgbGluZXMgMzgwIHRocm91Z2ggNDUwLiBUaG9zZSBsaW5lcyBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBsb2dpYyBzdXJyb3VuZGluZyB0aGUgY29weSBvcGVyYXRpb25zIGFuZCBob3cgb3duZXJzaGlwIGlzIGhhbmRsZWQgZHVyaW5nIHRoYXQgcHJvY2Vzcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGdvaW5nIG9uIGluIHRoYXQgc2VjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BhZ2Vfb3duZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzgwOlx0e1xuIDM4MTpcdFx0c3RydWN0IHBhZ2VfZXh0X2l0ZXIgaXRlcjtcbiAzODI6XHRcdHN0cnVjdCBwYWdlX2V4dCAqcGFnZV9leHQ7XG4gMzgzOlx0XHRzdHJ1Y3QgcGFnZV9vd25lciAqcGFnZV9vd25lcjtcbiAzODQ6XHRcbiAzODU6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiAzODY6XHRcdGZvcl9lYWNoX3BhZ2VfZXh0KHBhZ2UsIDEgXHUwMDNjXHUwMDNjIG9sZF9vcmRlciwgcGFnZV9leHQsIGl0ZXIpIHtcbiAzODc6XHRcdFx0cGFnZV9vd25lciA9IGdldF9wYWdlX293bmVyKHBhZ2VfZXh0KTtcbiAzODg6XHRcdFx0cGFnZV9vd25lci1cdTAwM2VvcmRlciA9IG5ld19vcmRlcjtcbiAzODk6XHRcdH1cbiAzOTA6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDM5MTpcdH1cbiAzOTI6XHRcbiAzOTM6XHR2b2lkIF9fZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZClcbiAzOTQ6XHR7XG4gMzk1Olx0XHRzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0O1xuIDM5NjpcdFx0c3RydWN0IHBhZ2VfZXh0X2l0ZXIgaXRlcjtcbiAzOTc6XHRcdHN0cnVjdCBwYWdlX293bmVyICpvbGRfcGFnZV9vd25lcjtcbiAzOTg6XHRcdHN0cnVjdCBwYWdlX293bmVyICpuZXdfcGFnZV9vd25lcjtcbiAzOTk6XHRcdGRlcG90X3N0YWNrX2hhbmRsZV90IG1pZ3JhdGVfaGFuZGxlO1xuIDQwMDpcdFxuIDQwMTpcdFx0cGFnZV9leHQgPSBwYWdlX2V4dF9nZXQoXHUwMDI2b2xkLVx1MDAzZXBhZ2UpO1xuIDQwMjpcdFx0aWYgKHVubGlrZWx5KCFwYWdlX2V4dCkpXG4gNDAzOlx0XHRcdHJldHVybjtcbiA0MDQ6XHRcbiA0MDU6XHRcdG9sZF9wYWdlX293bmVyID0gZ2V0X3BhZ2Vfb3duZXIocGFnZV9leHQpO1xuIDQwNjpcdFx0cGFnZV9leHRfcHV0KHBhZ2VfZXh0KTtcbiA0MDc6XHRcbiA0MDg6XHRcdHBhZ2VfZXh0ID0gcGFnZV9leHRfZ2V0KFx1MDAyNm5ld2ZvbGlvLVx1MDAzZXBhZ2UpO1xuIDQwOTpcdFx0aWYgKHVubGlrZWx5KCFwYWdlX2V4dCkpXG4gNDEwOlx0XHRcdHJldHVybjtcbiA0MTE6XHRcbiA0MTI6XHRcdG5ld19wYWdlX293bmVyID0gZ2V0X3BhZ2Vfb3duZXIocGFnZV9leHQpO1xuIDQxMzpcdFx0cGFnZV9leHRfcHV0KHBhZ2VfZXh0KTtcbiA0MTQ6XHRcbiA0MTU6XHRcdG1pZ3JhdGVfaGFuZGxlID0gbmV3X3BhZ2Vfb3duZXItXHUwMDNlaGFuZGxlO1xuIDQxNjpcdFx0X191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUoXHUwMDI2bmV3Zm9saW8tXHUwMDNlcGFnZSwgb2xkX3BhZ2Vfb3duZXItXHUwMDNlaGFuZGxlLFxuIDQxNzpcdFx0XHRcdFx0ICAgb2xkX3BhZ2Vfb3duZXItXHUwMDNlb3JkZXIsIG9sZF9wYWdlX293bmVyLVx1MDAzZWdmcF9tYXNrLFxuIDQxODpcdFx0XHRcdFx0ICAgb2xkX3BhZ2Vfb3duZXItXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbixcbiA0MTk6XHRcdFx0XHRcdCAgIG9sZF9wYWdlX293bmVyLVx1MDAzZXRzX25zZWMsIG9sZF9wYWdlX293bmVyLVx1MDAzZXBpZCxcbiA0MjA6XHRcdFx0XHRcdCAgIG9sZF9wYWdlX293bmVyLVx1MDAzZXRnaWQsIG9sZF9wYWdlX293bmVyLVx1MDAzZWNvbW0pO1xuIDQyMTpcdFx0LypcbiA0MjI6XHRcdCAqIERvIG5vdCBwcm9hY3RpdmVseSBjbGVhciBQQUdFX0VYVF9PV05FUntfQUxMT0NBVEVEfSBiaXRzIGFzIHRoZSBmb2xpb1xuIDQyMzpcdFx0ICogd2lsbCBiZSBmcmVlZCBhZnRlciBtaWdyYXRpb24uIEtlZXAgdGhlbSB1bnRpbCB0aGVuIGFzIHRoZXkgbWF5IGJlXG4gNDI0Olx0XHQgKiB1c2VmdWwuXG4gNDI1Olx0XHQgKi9cbiA0MjY6XHRcdF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGUoXHUwMDI2bmV3Zm9saW8tXHUwMDNlcGFnZSwgMCwgb2xkX3BhZ2Vfb3duZXItXHUwMDNlb3JkZXIsXG4gNDI3Olx0XHRcdFx0XHRcdG9sZF9wYWdlX293bmVyLVx1MDAzZWZyZWVfcGlkLFxuIDQyODpcdFx0XHRcdFx0XHRvbGRfcGFnZV9vd25lci1cdTAwM2VmcmVlX3RnaWQsXG4gNDI5Olx0XHRcdFx0XHRcdG9sZF9wYWdlX293bmVyLVx1MDAzZWZyZWVfdHNfbnNlYyk7XG4gNDMwOlx0XHQvKlxuIDQzMTpcdFx0ICogV2UgbGlua2VkIHRoZSBvcmlnaW5hbCBzdGFjayB0byB0aGUgbmV3IGZvbGlvLCB3ZSBuZWVkIHRvIGRvIHRoZSBzYW1lXG4gNDMyOlx0XHQgKiBmb3IgdGhlIG5ldyBvbmUgYW5kIHRoZSBvbGQgZm9saW8gb3RoZXJ3aXNlIHRoZXJlIHdpbGwgYmUgYW4gaW1iYWxhbmNlXG4gNDMzOlx0XHQgKiB3aGVuIHN1YnRyYWN0aW5nIHRob3NlIHBhZ2VzIGZyb20gdGhlIHN0YWNrLlxuIDQzNDpcdFx0ICovXG4gNDM1Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gNDM2Olx0XHRmb3JfZWFjaF9wYWdlX2V4dChcdTAwMjZvbGQtXHUwMDNlcGFnZSwgMSBcdTAwM2NcdTAwM2MgbmV3X3BhZ2Vfb3duZXItXHUwMDNlb3JkZXIsIHBhZ2VfZXh0LCBpdGVyKSB7XG4gNDM3Olx0XHRcdG9sZF9wYWdlX293bmVyID0gZ2V0X3BhZ2Vfb3duZXIocGFnZV9leHQpO1xuIDQzODpcdFx0XHRvbGRfcGFnZV9vd25lci1cdTAwM2VoYW5kbGUgPSBtaWdyYXRlX2hhbmRsZTtcbiA0Mzk6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTU1CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMzE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBQYWdlIE93bmVyIEJ1ZyBhbmQgaXRzIEZpeCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlYCBmdW5jdGlvbiBhbmQgaXRzIHBhcmFtZXRlcnM6IGBwYWdlYCwgYGhhbmRsZWAsIGBvcmRlcmAsIGBwaWRgLCBgdGdpZGAsIGFuZCBgZnJlZV90c19uc2VjYC4gVGhlIGNvcmUgb2YgdGhlIGlzc3VlIGlzIHRoYXQgaW5zaWRlIHRoaXMgZnVuY3Rpb24sIGl0JiMzOTtzIHVwZGF0aW5nIHRoZSBgcGFnZV9vd25lcmAgc3RydWN0IHdpdGggYGN1cnJlbnQtJmd0O3BpZGAgYW5kIGBjdXJyZW50LSZndDt0Z2lkYCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBgcGlkYCBhbmQgYHRnaWRgIHZhbHVlcyB0aGF0IHdlcmUgcGFzc2VkIGluLiBUaGlzIGlzIGEgY2xhc3NpYyBidWc6IHRoZSBmdW5jdGlvbiYjMzk7cyBjb250cmFjdCBpc24mIzM5O3QgYmVpbmcgdXBoZWxkLiBJdCBzaG91bGQgYmUgdXNpbmcgdGhlIHByb3ZpZGVkIGlkZW50aWZpZXJzLCBidXQgaXQmIzM5O3MgaW5hZHZlcnRlbnRseSByZXBsYWNpbmcgdGhlbSB3aXRoIHRoZSBjYWxsZXImIzM5O3MgcHJvY2VzcyBhbmQgdGhyZWFkIElEcy4KCkRpZ2dpbmcgZnVydGhlciwgSSBzZWUgdGhhdCBgX19mb2xpb19jb3B5X293bmVyYCBjYWxscyBgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZWAuIFNwZWNpZmljYWxseSwgaXQgY2FsbHMgdGhpcyBmdW5jdGlvbiB3aXRoIHRoZSB2YWx1ZXMgYG9sZF9wYWdlX293bmVyLSZndDtmcmVlX3BpZGAgYW5kIGBvbGRfcGFnZV9vd25lci0mZ3Q7ZnJlZV90Z2lkYC4gQmVjYXVzZSBvZiB0aGUgb3JpZ2luYWwgYnVnLCBpdCBzaG91bGQgaGF2ZSBiZWVuIHBhc3NpbmcgYW5kIHJlY2VpdmluZyB0aG9zZSB2YWx1ZXMsIGJ1dCBpbnN0ZWFkLCBpdCYjMzk7cyBhc3NpZ25pbmcgYGN1cnJlbnQtJmd0O3BpZGAgYW5kIGBjdXJyZW50LSZndDt0Z2lkYCBpbiB0aGUgYF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGVgIGZ1bmN0aW9uLiBUaGF0IG1lYW5zIGFueSBvd25lciBpbmZvcm1hdGlvbiBmcm9tIGFuIG9sZCBwYWdlIGlzIG5vdyBiZWluZyBvdmVyd3JpdHRlbiB3aGVuIHRoZSBwYWdlIGlzIGJlaW5nIGNvcGllZC4gVGhhdCYjMzk7cyBhIHNlcmlvdXMgcG90ZW50aWFsIGxlYWsgb3IgbWlzYXR0cmlidXRpb24gaXNzdWUsIGRlcGVuZGluZyBvbiBob3cgdGhpcyBkYXRhIGlzIHVzZWQgZG93bnN0cmVhbS4KClRoZSBwcm9wb3NlZCBwYXRjaCBpcyBzdHJhaWdodGZvcndhcmQgYW5kIGV4YWN0bHkgd2hhdCYjMzk7cyBuZWVkZWQuIEl0IGNvcnJlY3RzIHRoZSBjb2RlIHRvIHNldCBgcGFnZV9vd25lci0mZ3Q7ZnJlZV9waWQgPSBwaWQ7IHBhZ2Vfb3duZXItJmd0O2ZyZWVfdGdpZCA9IHRnaWQ7YCwgZW5zdXJpbmcgdGhhdCB0aGUgcGFzc2VkLWluIHZhbHVlcyBhcmUgYWN0dWFsbHkgdXNlZC4KCk5vdywgbGV0IG1lIGNoZWNrIHRoZSBLY29uZmlnIGFuZCBzZWUgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSBmb3Igc3lzdGVtcyB3aGVyZSBgcGFnZV9vd25lcmAgaXMgZW5hYmxlZCwgYW5kIGlmIHRoaXMgY291bGQgYXBwbHkgdG8gb3VyIGtlcm5lbCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQQUdFX09XTkVSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWcuZGVidWc9MTE9Y29uZmlnIERFQlVHX1BBR0VBTExPQ1xuLS1cbm1tL0tjb25maWcuZGVidWctMjUtXHQgIHdpdGggc3RhY2sgdHJhY2VzIG9mIGxhc3QgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBvZiB0aGUgcGFnZSwgd2hlblxubW0vS2NvbmZpZy5kZWJ1ZzoyNjpcdCAgUEFHRV9PV05FUiBpcyBhbHNvIHNlbGVjdGVkIGFuZCBlbmFibGVkIG9uIGJvb3QuXG5tbS9LY29uZmlnLmRlYnVnLTI3LVxuLS1cbm1tL0tjb25maWcuZGVidWc9NzM9Y29uZmlnIFNMVUJfUkNVX0RFQlVHXG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy0xMDQtXG5tbS9LY29uZmlnLmRlYnVnOjEwNTpjb25maWcgUEFHRV9PV05FUlxubW0vS2NvbmZpZy5kZWJ1Zy0xMDYtXHRib29sIFwmIzM0O1RyYWNrIHBhZ2Ugb3duZXJcJiMzNDtcbi0tXG5tbS9NYWtlZmlsZT0xMTc9b2JqLSQoQ09ORklHX0RFQlVHX1ZNX1BHVEFCTEUpICYjNDM7PSBkZWJ1Z192bV9wZ3RhYmxlLm9cbm1tL01ha2VmaWxlOjExODpvYmotJChDT05GSUdfUEFHRV9PV05FUikgJiM0Mzs9IHBhZ2Vfb3duZXIub1xubW0vTWFrZWZpbGUtMTE5LW9iai0kKENPTkZJR19NRU1PUllfSVNPTEFUSU9OKSAmIzQzOz0gcGFnZV9pc29sYXRpb24ub1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz01MTQyPXVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTE3Ny1cbm1tL3BhZ2VfYWxsb2MuYzo1MTc4OiNpZmRlZiBDT05GSUdfUEFHRV9PV05FUlxubW0vcGFnZV9hbGxvYy5jLTUxNzktXHQvKlxubW0vcGFnZV9hbGxvYy5jOjUxODA6XHQgKiBQQUdFX09XTkVSIG1heSByZWN1cnNlIGludG8gdGhlIGFsbG9jYXRvciB0byBhbGxvY2F0ZSBzcGFjZSB0b1xubW0vcGFnZV9hbGxvYy5jLTUxODEtXHQgKiBzYXZlIHRoZSBzdGFjayB3aXRoIHBhZ2VzZXRzLmxvY2sgaGVsZC4gUmVsZWFzaW5nL3JlYWNxdWlyaW5nXG4tLVxubW0vcGFnZV9leHQuYz04MD1zdGF0aWMgc3RydWN0IHBhZ2VfZXh0X29wZXJhdGlvbnMgKnBhZ2VfZXh0X29wc1tdIF9faW5pdGRhdGEgPSB7XG5tbS9wYWdlX2V4dC5jOjgxOiNpZmRlZiBDT05GSUdfUEFHRV9PV05FUlxubW0vcGFnZV9leHQuYy04Mi1cdFx1MDAyNnBhZ2Vfb3duZXJfb3BzLFxuLS1cbm1tL3BhZ2Vfb3duZXIuYy0xOC0vKlxubW0vcGFnZV9vd25lci5jOjE5OiAqIFRPRE86IHRlYWNoIFBBR0VfT1dORVJfU1RBQ0tfREVQVEggKF9fZHVtcF9wYWdlX293bmVyIGFuZCBzYXZlX3N0YWNrKVxubW0vcGFnZV9vd25lci5jLTIwLSAqIHRvIHVzZSBvZmYgc3RhY2sgdGVtcG9yYWwgc3RvcmFnZVxubW0vcGFnZV9vd25lci5jLTIxLSAqL1xubW0vcGFnZV9vd25lci5jOjIyOiNkZWZpbmUgUEFHRV9PV05FUl9TVEFDS19ERVBUSCAoMTYpXG5tbS9wYWdlX293bmVyLmMtMjMtXG4tLVxubW0vcGFnZV9vd25lci5jPTU3PWVudW0gcGFnZV9vd25lcl9wcmludF9tb2RlIHtcbm1tL3BhZ2Vfb3duZXIuYzo1ODpcdFBBR0VfT1dORVJfUFJJTlRfU1RBQ0ssXG5tbS9wYWdlX293bmVyLmM6NTk6XHRQQUdFX09XTkVSX1BSSU5UX0hBTkRMRSxcbm1tL3BhZ2Vfb3duZXIuYzo2MDpcdFBBR0VfT1dORVJfUFJJTlRfU1RBQ0tfSEFORExFLFxubW0vcGFnZV9vd25lci5jLTYxLX07XG4tLVxubW0vcGFnZV9vd25lci5jPTYzPXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcGFnZV9vd25lcl9wcmludF9tb2RlX3N0cmluZ3NbXSA9IHtcbm1tL3BhZ2Vfb3duZXIuYzo2NDpcdFtQQUdFX09XTkVSX1BSSU5UX1NUQUNLXVx0PSBcJiMzNDtzdGFja1wmIzM0Oyxcbm1tL3BhZ2Vfb3duZXIuYzo2NTpcdFtQQUdFX09XTkVSX1BSSU5UX0hBTkRMRV1cdD0gXCYjMzQ7aGFuZGxlXCYjMzQ7LFxubW0vcGFnZV9vd25lci5jOjY2Olx0W1BBR0VfT1dORVJfUFJJTlRfU1RBQ0tfSEFORExFXVx0PSBcJiMzNDtzdGFja19oYW5kbGVcJiMzNDssXG5tbS9wYWdlX293bmVyLmMtNjctfTtcbi0tXG5tbS9wYWdlX293bmVyLmM9MTczPXN0YXRpYyBub2lubGluZSBkZXBvdF9zdGFja19oYW5kbGVfdCBzYXZlX3N0YWNrKGdmcF90IGZsYWdzKVxubW0vcGFnZV9vd25lci5jLTE3NC17XG5tbS9wYWdlX293bmVyLmM6MTc1Olx0dW5zaWduZWQgbG9uZyBlbnRyaWVzW1BBR0VfT1dORVJfU1RBQ0tfREVQVEhdO1xubW0vcGFnZV9vd25lci5jLTE3Ni1cdGRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZTtcbi0tXG5tbS9wYWdlX293bmVyLmM9NjAzPXByaW50X3BhZ2Vfb3duZXIoY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBsb25nIHBmbixcbi0tXG5tbS9wYWdlX293bmVyLmMtNjM2LVxubW0vcGFnZV9vd25lci5jOjYzNzpcdGlmIChwcmludF9tb2RlICE9IFBBR0VfT1dORVJfUFJJTlRfSEFORExFKSB7XG5tbS9wYWdlX293bmVyLmMtNjM4LVx0XHRyZXQgJiM0Mzs9IHN0YWNrX2RlcG90X3NucHJpbnQoaGFuZGxlLCBrYnVmICYjNDM7IHJldCwgY291bnQgLSByZXQsIDApO1xuLS1cbm1tL3BhZ2Vfb3duZXIuYy02NDItXG5tbS9wYWdlX293bmVyLmM6NjQzOlx0aWYgKHByaW50X21vZGUgIT0gUEFHRV9PV05FUl9QUklOVF9TVEFDSykge1xubW0vcGFnZV9vd25lci5jLTY0NC1cdFx0cmV0ICYjNDM7PSBzY25wcmludGYoa2J1ZiAmIzQzOyByZXQsIGNvdW50IC0gcmV0LCBcJiMzNDtoYW5kbGU6ICV1XFxuXCYjMzQ7LFxuLS1cbm1tL3BhZ2Vfb3duZXIuYz05MTk9c3RhdGljIGludCBwYWdlX293bmVyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxubW0vcGFnZV9vd25lci5jLTkyNi1cbm1tL3BhZ2Vfb3duZXIuYzo5Mjc6XHRzdGF0ZS1cdTAwM2VwcmludF9tb2RlID0gUEFHRV9PV05FUl9QUklOVF9TVEFDSztcbm1tL3BhZ2Vfb3duZXIuYy05MjgtXHRub2Rlc19jbGVhcihzdGF0ZS1cdTAwM2VuaWRfZmlsdGVyKTtcbi0tXG5tbS92bXN0YXQuYz0xNjgzPXN0YXRpYyB2b2lkIHBhZ2V0eXBlaW5mb19zaG93YmxvY2tjb3VudChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmFyZylcbi0tXG5tbS92bXN0YXQuYy0xNjk4LSAqIG9mIG90aGVyIHR5cGVzLiBUaGlzIGdpdmVzIGFuIGluZGljYXRpb24gb2YgaG93IHdlbGwgZmFsbGJhY2tzIGFyZSBiZWluZ1xubW0vdm1zdGF0LmM6MTY5OTogKiBjb250YWluZWQgYnkgcm1xdWV1ZV9mYWxsYmFjaygpLiBJdCByZXF1aXJlcyBpbmZvcm1hdGlvbiBmcm9tIFBBR0VfT1dORVJcbm1tL3Ztc3RhdC5jLTE3MDAtICogdG8gZGV0ZXJtaW5lIHdoYXQgaXMgZ29pbmcgb25cbi0tXG5tbS92bXN0YXQuYz0xNzAyPXN0YXRpYyB2b2lkIHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHBnX2RhdGFfdCAqcGdkYXQpXG5tbS92bXN0YXQuYy0xNzAzLXtcbm1tL3Ztc3RhdC5jOjE3MDQ6I2lmZGVmIENPTkZJR19QQUdFX09XTkVSXG5tbS92bXN0YXQuYy0xNzA1LVx0aW50IG10eXBlO1xuLS1cbm1tL3Ztc3RhdC5jLTE3MTgtXHRcdHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludCk7XG5tbS92bXN0YXQuYzoxNzE5OiNlbmRpZiAvKiBDT05GSUdfUEFHRV9PV05FUiAqL1xubW0vdm1zdGF0LmMtMTcyMC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMDMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRlYnVnZ2luZyBLY29uZmlnOiBBIFF1aWNrIERpdmUqKgoKQWxyaWdodCwgSSBuZWVkIHRvIHRyb3VibGVzaG9vdCBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUga2VybmVsJiMzOTtzIEtjb25maWcgc3lzdGVtLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSB0eXBpY2FsIGxheW91dCwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIGBtbS9LY29uZmlnLmRlYnVnYC4gSXQmIzM5O3MgYSBwcmltZSBsb2NhdGlvbiBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgcmVsYXRlZCBkZWJ1Z2dpbmcgb3B0aW9ucy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGV4YW1pbmluZyBhcm91bmQgbGluZSAxMDUuIFRoYXQgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gaG9waW5nIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGxvZ2ljYWwgZmxvdyBvZiB0aGUgY29kZSBpbiB0aGF0IGFyZWEsIGFuZCBwaW5wb2ludCBhIHNwZWNpZmljIHZhcmlhYmxlIG9yIG9wdGlvbiB0aGF0IGNhbiBoZWxwIG1lIHRvIGRpYWdub3NlIHRoZSBpc3N1ZSBJJiMzOTttIGZhY2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnLmRlYnVnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDA6XHRcdCAgVGhpcyBpcyBkZXNpZ25lZCBhcyBhIGRlYnVnZ2luZyBmZWF0dXJlLCBub3QgYSBzZWN1cml0eSBmZWF0dXJlLlxuIDEwMTpcdFx0ICBPYmplY3RzIGFyZSBzb21ldGltZXMgcmVjeWNsZWQgd2l0aG91dCBSQ1UgZGVsYXkgdW5kZXIgbWVtb3J5IHByZXNzdXJlLlxuIDEwMjpcdFxuIDEwMzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDEwNDpcdFxuIDEwNTpcdGNvbmZpZyBQQUdFX09XTkVSXG4gMTA2Olx0XHRib29sIFwmIzM0O1RyYWNrIHBhZ2Ugb3duZXJcJiMzNDtcbiAxMDc6XHRcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMIFx1MDAyNlx1MDAyNiBTVEFDS1RSQUNFX1NVUFBPUlRcbiAxMDg6XHRcdHNlbGVjdCBERUJVR19GU1xuIDEwOTpcdFx0c2VsZWN0IFNUQUNLVFJBQ0VcbiAxMTA6XHRcdHNlbGVjdCBTVEFDS0RFUE9UXG4gMTExOlx0XHRzZWxlY3QgUEFHRV9FWFRFTlNJT05cbiAxMTI6XHRcdGhlbHBcbiAxMTM6XHRcdCAgVGhpcyBrZWVwcyB0cmFjayBvZiB3aGF0IGNhbGwgY2hhaW4gaXMgdGhlIG93bmVyIG9mIGEgcGFnZSwgbWF5XG4gMTE0Olx0XHQgIGhlbHAgdG8gZmluZCBiYXJlIGFsbG9jX3BhZ2UocykgbGVha3MuIEV2ZW4gaWYgeW91IGluY2x1ZGUgdGhpc1xuIDExNTpcdFx0ICBmZWF0dXJlIG9uIHlvdXIgYnVpbGQsIGl0IGlzIGRpc2FibGVkIGluIGRlZmF1bHQuIFlvdSBzaG91bGQgcGFzc1xuIDExNjpcdFx0ICBcJiMzNDtwYWdlX293bmVyPW9uXCYjMzQ7IHRvIGJvb3QgcGFyYW1ldGVyIGluIG9yZGVyIHRvIGVuYWJsZSBpdC4gRWF0c1xuIDExNzpcdFx0ICBhIGZhaXIgYW1vdW50IG9mIG1lbW9yeSBpZiBlbmFibGVkLiBTZWUgdG9vbHMvbW0vcGFnZV9vd25lcl9zb3J0LmNcbiAxMTg6XHRcdCAgZm9yIHVzZXItc3BhY2UgaGVscGVyLlxuIDExOTpcdFxuIDEyMDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDEyMTpcdFxuIDEyMjpcdGNvbmZpZyBQQUdFX1RBQkxFX0NIRUNLXG4gMTIzOlx0XHRib29sIFwmIzM0O0NoZWNrIGZvciBpbnZhbGlkIG1hcHBpbmdzIGluIHVzZXIgcGFnZSB0YWJsZXNcJiMzNDtcbiAxMjQ6XHRcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19QQUdFX1RBQkxFX0NIRUNLXG4gMTI1Olx0XHRkZXBlbmRzIG9uIEVYQ0xVU0lWRV9TWVNURU1fUkFNXG4gMTI2Olx0XHRzZWxlY3QgUEFHRV9FWFRFTlNJT05cbiAxMjc6XHRcdGhlbHBcbiAxMjg6XHRcdCAgQ2hlY2sgdGhhdCBhbm9ueW1vdXMgcGFnZSBpcyBub3QgYmVpbmcgbWFwcGVkIHR3aWNlIHdpdGggcmVhZCB3cml0ZVxuIDEyOTpcdFx0ICBwZXJtaXNzaW9ucy4gQ2hlY2sgdGhhdCBhbm9ueW1vdXMgYW5kIGZpbGUgcGFnZXMgYXJlIG5vdCBiZWluZ1xuIDEzMDpcdFx0ICBlcnJvbmVvdXNseSBzaGFyZWQuIFNpbmNlIHRoZSBjaGVja2luZyBpcyBwZXJmb3JtZWQgYXQgdGhlIHRpbWVcbiAxMzE6XHRcdCAgZW50cmllcyBhcmUgYWRkZWQgYW5kIHJlbW92ZWQgdG8gdXNlciBwYWdlIHRhYmxlcywgbGVha2luZywgY29ycnVwdGlvblxuIDEzMjpcdFx0ICBhbmQgZG91YmxlIG1hcHBpbmcgcHJvYmxlbXMgYXJlIGRldGVjdGVkIHN5bmNocm9ub3VzbHkuXG4gMTMzOlx0XG4gMTM0Olx0XHQgIElmIHVuc3VyZSBzYXkgXCYjMzQ7blwmIzM0Oy5cbiAxMzU6XHRcbiAxMzY6XHRjb25maWcgUEFHRV9UQUJMRV9DSEVDS19FTkZPUkNFRFxuIDEzNzpcdFx0Ym9vbCBcJiMzNDtFbmZvcmNlIHRoZSBwYWdlIHRhYmxlIGNoZWNraW5nIGJ5IGRlZmF1bHRcJiMzNDtcbiAxMzg6XHRcdGRlcGVuZHMgb24gUEFHRV9UQUJMRV9DSEVDS1xuIDEzOTpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDEyCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgUG90ZW50aWFsOiBBIFF1aWNrIEFzc2Vzc21lbnQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSBpZiB0aGlzIHBhdGNoIGlzIHdvcnRoIGEgZGVlcGVyIGRpdmUgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgdGhlIGNoYW5nZXMgdG91Y2ggY29kZSB0aGF0JiMzOTtzIGJvdGggcmVhY2hhYmxlIGFuZCBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBmb3IgZnV6emluZy4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7bGwgZmlsdGVyIGJ5IGEgZmV3IGtleSBjcml0ZXJpYToKCkZpcnN0LCBpcyB0aGUgY29kZSBsb2NhdGVkIGluIGEgY29yZSBzdWJzeXN0ZW0/IExvb2tzIGxpa2UgaXQmIzM5O3MgaW4gYG1tL2AsIHdoaWNoIGlzIGEgZGVmaW5pdGUgcG9zaXRpdmUuIEdyZWF0LCBtZW1vcnkgbWFuYWdlbWVudCBpcyBhbHdheXMgYSBnb29kIGFyZWEgdG8gc2NydXRpbml6ZS4gU2Vjb25kbHksIEkgbmVlZCB0byBjaGVjayBmb3IgcmVmYWN0b3Jpbmcgb3IgY29kZSBjbGVhbnVwLCBlc3BlY2lhbGx5IGlmIGl0IHJlbGF0ZXMgdG8gZGF0YSBzdHJ1Y3R1cmVzLCBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cyB0aGF0IGFyZSBhY2Nlc3NpYmxlLgoKVGhlIGNoYW5nZSBpdHNlbGYgaXMgd2l0aGluIGBtbS9wYWdlX293bmVyLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlYCBmdW5jdGlvbi4gTXkgZXhwZXJ0IGV5ZSBpbW1lZGlhdGVseSBub3RlcyBpdCYjMzk7cyBjYWxsZWQgZHVyaW5nIHBhZ2UgZnJlZWluZyAoYF9fcmVzZXRfcGFnZV9vd25lcmApIGFuZCBmb2xpbyBtaWdyYXRpb24gKGBfX2ZvbGlvX2NvcHlfb3duZXJgKS4gTm93LCBpcyBgX19mb2xpb19jb3B5X293bmVyYCByZWFjaGFibGU/IFllcywgZm9saW8gbWlncmF0aW9uIGlzIGEgcmVndWxhciBvY2N1cnJlbmNlIGluIG1lbW9yeSBtYW5hZ2VtZW50LiBHb29kLiBBbmQgYHBhZ2Vfb3duZXJgIGl0c2VsZiBpcyByZWFjaGFibGUsIGFzc3VtaW5nIGBDT05GSUdfUEFHRV9PV05FUmAgaXMgZW5hYmxlZCwgd2hpY2ggaXMgbGlrZWx5LgoKTGV0JiMzOTtzIGNoZWNrIHRoZSBmdW5jdGlvbiBzaWduYXR1cmVzIGFuZCBmb2N1cyBzeW1ib2xzLCBzdGFydGluZyB3aXRoIGBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlYC4gU2luY2UgaXQmIzM5O3MgbWFya2VkIGFzIGBzdGF0aWMgaW5saW5lYCAob3IgcG9zc2libHkganVzdCBgc3RhdGljYCksIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxlcnM6IGBfX2ZvbGlvX2NvcHlfb3duZXJgIGFuZCBgX19yZXNldF9wYWdlX293bmVyYC4KCkhvbGQgb24sIGxldCBtZSBxdWlja2x5IGNvbmZpcm0gdGhhdCBgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZWAgaXMgaW5kZWVkIGBzdGF0aWMgaW5saW5lYCwgdG8gYmUgc3VyZS4gQWxyaWdodCwgYHN0YXRpYyBpbmxpbmUgdm9pZCBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlKC4uLilgLiBDb25maXJtZWQuIEl0IGlzLCBzbyBpdCBzaG91bGQgYmUgaW5saW5lZC4gVGhpcyBtYWtlcyBgX19mb2xpb19jb3B5X293bmVyYCBhbmQgYF9fcmVzZXRfcGFnZV9vd25lcmAgcmVsZXZhbnQgYXMgcG90ZW50aWFsIGVudHJ5IHBvaW50cy4KCk5vdywgYSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyBgX19yZXNldF9wYWdlX293bmVyYCBhIGNvbW1vbiBob3QtcGF0aCBmdW5jdGlvbj8gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXJlIGl0JiMzOTtzIGNhbGxlZCB0byBlc3RhYmxpc2ggaXRzIHViaXF1aXR5LiBJJiMzOTtsbCBjaGVjayBpdHMgY2FsbCBzaXRlcyB0byBkZXRlcm1pbmUgaXRzIGNvdmVyYWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZXNldF9wYWdlX293bmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYz0xMjk4PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX2ZyZWVfcGFnZXNfcHJlcGFyZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMTMzMy1cdFx0LyogRG8gbm90IGxldCBod3BvaXNvbiBwYWdlcyBoaXQgcGNwbGlzdHMvYnVkZHkgKi9cbm1tL3BhZ2VfYWxsb2MuYzoxMzM0Olx0XHRyZXNldF9wYWdlX293bmVyKHBhZ2UsIG9yZGVyKTtcbm1tL3BhZ2VfYWxsb2MuYy0xMzM1LVx0XHRwYWdlX3RhYmxlX2NoZWNrX2ZyZWUocGFnZSwgb3JkZXIpO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYy0xMzk5LVx0cGFnZS1cdTAwM2Vwcml2YXRlID0gMDtcbm1tL3BhZ2VfYWxsb2MuYzoxNDAwOlx0cmVzZXRfcGFnZV9vd25lcihwYWdlLCBvcmRlcik7XG5tbS9wYWdlX2FsbG9jLmMtMTQwMS1cdHBhZ2VfdGFibGVfY2hlY2tfZnJlZShwYWdlLCBvcmRlcik7XG4tLVxubW0vcGFnZV9vd25lci5jPTI5MT1zdGF0aWMgaW5saW5lIHZvaWQgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS9wYWdlX293bmVyLmMtMzAzLVx0XHRwYWdlX293bmVyID0gZ2V0X3BhZ2Vfb3duZXIocGFnZV9leHQpO1xubW0vcGFnZV9vd25lci5jOjMwNDpcdFx0LyogT25seSBfX3Jlc2V0X3BhZ2Vfb3duZXIoKSB3YW50cyB0byBjbGVhciB0aGUgYml0ICovXG5tbS9wYWdlX293bmVyLmMtMzA1LVx0XHRpZiAoaGFuZGxlKSB7XG4tLVxubW0vcGFnZV9vd25lci5jLTMxNS1cbm1tL3BhZ2Vfb3duZXIuYzozMTY6dm9pZCBfX3Jlc2V0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIHNob3J0IG9yZGVyKVxubW0vcGFnZV9vd25lci5jLTMxNy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTkxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWUsIHdpdGggYSAqKmJvbGRlZCBoZWFkZXIqKiBhcyByZXF1ZXN0ZWQ6CgoqKlBhZ2UgT3duZXJzaGlwIERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCBzbyBgcmVzZXRfcGFnZV9vd25lcmAgaXMgZ2V0dGluZyBjYWxsZWQgd2l0aGluIGBfX2ZyZWVfcGFnZXNfcHJlcGFyZWAuIFRoYXQmIzM5O3MgYSBwcmV0dHkgZnVuZGFtZW50YWwgcG9pbnQ7IGlmIEkmIzM5O20gdW5kZXJzdGFuZGluZyB0aGlzIGNvcnJlY3RseSwgaXQgbWVhbnMgdGhhdCB0aGUgcGFnZSBvd25lcnNoaXAgaXMgZ2V0dGluZyBjbGVhcmVkIG9yIHJlc2V0ICpldmVyeSogdGltZSBhIHBhZ2UgaXMgZnJlZWQuIE9rYXksIG1ha2VzIHNlbnNlIGluIHByaW5jaXBsZSB0byBhdm9pZCBhbnkgbGluZ2VyaW5nIHJlZmVyZW5jZXMuIEJ1dCB0aGVuIGEgZmxhZyBnb2VzIG9mZiBpbiBteSBoZWFkLiBXaGF0JiMzOTtzIHRoZSByZWxhdGlvbnNoaXAgb2YgdGhpcyB3aXRoIGBfX2ZvbGlvX2NvcHlfb3duZXJgPyBJJiMzOTttIHRyeWluZyB0byB3cmFwIG15IGhlYWQgYXJvdW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG9yIGluY29ycmVjdCBvd25lcnNoaXAgdHJhbnNpdGlvbnMsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZW4gYW5kIHdoZXJlIHRoZSBvd25lcnNoaXAgaXMgY29waWVkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgYGZvbGlvX2NvcHlfb3duZXJgIGZ1bmN0aW9uIGl0c2VsZiBpcyBhY3R1YWxseSBpbnZva2VkLiBUaGF0JiMzOTtzIHRoZSBtaXNzaW5nIHBpZWNlIGhlcmUuIEkgY2FuIHVuZGVyc3RhbmQgdGhlIHJlc2V0dGluZywgYnV0IHdpdGhvdXQga25vd2luZyB0aGUgY29weWluZywgSSYjMzk7bSBtaXNzaW5nIGNvbnRleHQgdG8gdGhvcm91Z2hseSBhbmFseXplIHRoaXMgd2hvbGUgcHJvY2Vzcy4gV2hlcmUgYXJlIHRoZSBjb3B5aW5nIG9wZXJhdGlvbnM/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZvbGlvX2NvcHlfb3duZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWlncmF0ZS5jPTc3NT12b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9taWdyYXRlLmMtODU4LVxubW0vbWlncmF0ZS5jOjg1OTpcdGZvbGlvX2NvcHlfb3duZXIobmV3Zm9saW8sIGZvbGlvKTtcbm1tL21pZ3JhdGUuYy04NjAtXHRwZ2FsbG9jX3RhZ19zd2FwKG5ld2ZvbGlvLCBmb2xpbyk7XG4tLVxubW0vcGFnZV9vd25lci5jPTM3OT12b2lkIF9fc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlciwgaW50IG5ld19vcmRlcilcbi0tXG5tbS9wYWdlX293bmVyLmMtMzkyLVxubW0vcGFnZV9vd25lci5jOjM5Mzp2b2lkIF9fZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZClcbm1tL3BhZ2Vfb3duZXIuYy0zOTQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY4OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFBhZ2UgT3duZXIgQ29ycnVwdGlvbioqCgpPa2F5LCBzbyBgZm9saW9fbWlncmF0ZV9mbGFnc2AgaXMgY2FsbGluZyBgZm9saW9fY29weV9vd25lcmAsIGFuZCB0aGF0IGZ1bmN0aW9uIGluIHR1cm4gdHJpZ2dlcnMgYF9fZm9saW9fY29weV9vd25lcmAuIEkmIzM5O3ZlIG5hcnJvd2VkIGRvd24gdGhlIHByb2JsZW0gdG8gdGhhdCBgX19mb2xpb19jb3B5X293bmVyYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIGBvbGRfcGFnZV9vd25lci0mZ3Q7ZnJlZV9waWRgIGFuZCBgZnJlZV90Z2lkYC4gSXQgbG9va3MgbGlrZSBgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZWAgaXMgdGhlIGN1bHByaXQsIG92ZXJ3cml0aW5nIHRoZSBwcm9jZXNzIGFuZCB0aHJlYWQgSURzIHdpdGggdGhlIGN1cnJlbnQgcHJvY2VzcywgaW5zdGVhZCBvZiByZXRhaW5pbmcgdGhlIG9yaWdpbmFsIG9uZXMuIFRoaXMgaXMgdmVyeSBzcGVjaWZpYyDigJMgYF9fZm9saW9fY29weV9vd25lcmAgaXMgYSBwcmV0dHkgdGFyZ2V0ZWQgc3ltYm9sLCBub24tdWJpcXVpdG91cywgYW5kIHJpZ2h0IHRoZXJlIGluIGBtbS9wYWdlX293bmVyLmNgLgoKSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIHNjb3BlIG9mIHRoaXMuIE15IG5leHQgc3RlcCBpcyB0byBleHBsb3JlIGhvdyBwYWdlX293bmVyIGlzIHVzZWQgZWxzZXdoZXJlLiBJIG5lZWQgdG8gc2VlIGlmIHRoaXMgcGF0dGVybiwgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGV4aXN0cyBpbiBvdGhlciByZWFkIG9yIHdyaXRlIG9wZXJhdGlvbnMuIEkgc2hvdWxkIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBvYnZpb3VzIGNhbmRpZGF0ZXM6IGBwcmludF9wYWdlX293bmVyYCwgb3IgdGhlIGBwYWdlX293bmVyYCBkZWJ1ZyBpbnRlcmZhY2UuIEkmIzM5O2xsIGFsc28gZG8gYSBxdWljayBzdXJ2ZXkgb2Ygd2hhdCBzeW1ib2xzIGFyZSBhY3R1YWxseSBkZWZpbmVkIHdpdGhpbiBgbW0vcGFnZV9vd25lci5jYC4gVGhpcyB3aWxsIGhlbHAgbWUgYnVpbGQgYSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEzOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O152b2lkIF9fJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vcGFnZV9vd25lci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2Vfb3duZXIuYz0yOTE9c3RhdGljIGlubGluZSB2b2lkIF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGUoc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxubW0vcGFnZV9vd25lci5jLTMxNS1cbm1tL3BhZ2Vfb3duZXIuYzozMTY6dm9pZCBfX3Jlc2V0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIHNob3J0IG9yZGVyKVxubW0vcGFnZV9vd25lci5jLTMxNy17XG4tLVxubW0vcGFnZV9vd25lci5jPTM1Mz1ub2lubGluZSB2b2lkIF9fc2V0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIHNob3J0IG9yZGVyLFxuLS1cbm1tL3BhZ2Vfb3duZXIuYy0zNjUtXG5tbS9wYWdlX293bmVyLmM6MzY2OnZvaWQgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pXG5tbS9wYWdlX293bmVyLmMtMzY3LXtcbi0tXG5tbS9wYWdlX293bmVyLmMtMzc4LVxubW0vcGFnZV9vd25lci5jOjM3OTp2b2lkIF9fc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlciwgaW50IG5ld19vcmRlcilcbm1tL3BhZ2Vfb3duZXIuYy0zODAte1xuLS1cbm1tL3BhZ2Vfb3duZXIuYy0zOTItXG5tbS9wYWdlX293bmVyLmM6MzkzOnZvaWQgX19mb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKVxubW0vcGFnZV9vd25lci5jLTM5NC17XG4tLVxubW0vcGFnZV9vd25lci5jPTYwMz1wcmludF9wYWdlX293bmVyKGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgbG9uZyBwZm4sXG4tLVxubW0vcGFnZV9vd25lci5jLTY3Mi1cbm1tL3BhZ2Vfb3duZXIuYzo2NzM6dm9pZCBfX2R1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbm1tL3BhZ2Vfb3duZXIuYy02NzQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTU4NQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgRm9saW8gTWlncmF0aW9uIEVudHJ5cG9pbnRzKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgIGNvZGUgb3IgYW55IG90aGVyIGVudHJ5IHBvaW50cyBmb3IgcGFnZSBtaWdyYXRpb25zLiBJIHN1c3BlY3QgdGhlcmUgbWlnaHQgYmUgYSBwcm9ibGVtIHJlbGF0ZWQgdG8gdGhlbSwgc28gbGV0JiMzOTtzIGZpcnN0IGlkZW50aWZ5IGFsbCBvZiB0aGUgY2FsbGVycyBvZiBgZm9saW9fbWlncmF0ZV9mbGFnc2AsIGlmIHRoYXQgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0LCBvciBvdGhlciBlbnRyeSBwb2ludHMsIHNvIEkgY2FuIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIGZsb3cuIFRoaXMgc2hvdWxkIGhlbHAgbWUgcGlucG9pbnQgdGhlIGV4YWN0IGxvY2F0aW9uIHdoZXJlIHRoaXMgbWlncmF0aW9uIGxvZ2ljIGlzIGJlaW5nIHRyaWdnZXJlZCBhbmQgcG90ZW50aWFsbHkgaWRlbnRpZnkgYW55IGlzc3VlcyBvciBpbmNvbnNpc3RlbmNpZXMuIFRoaXMgYWxzbyBtaWdodCBub3QgYmUgdGhlIHJpZ2h0IHBhdGggYW5kIHRoZSBpc3N1ZSBjb3VsZCBiZSB3aXRoIGFub3RoZXIgcGFnZSBtaWdyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEzOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZvbGlvX21pZ3JhdGVfZmxhZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWlncmF0ZS5jPTczOT1pbnQgbWlncmF0ZV9odWdlX3BhZ2VfbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL21pZ3JhdGUuYy03NzQtICovXG5tbS9taWdyYXRlLmM6Nzc1OnZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vbWlncmF0ZS5jLTc3Ni17XG4tLVxubW0vbWlncmF0ZS5jLTg2My19XG5tbS9taWdyYXRlLmM6ODY0OkVYUE9SVF9TWU1CT0woZm9saW9fbWlncmF0ZV9mbGFncyk7XG5tbS9taWdyYXRlLmMtODY1LVxuLS1cbm1tL21pZ3JhdGUuYz04NzA9c3RhdGljIGludCBfX21pZ3JhdGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZHN0LFxuLS1cbm1tL21pZ3JhdGUuYy04OTAtXG5tbS9taWdyYXRlLmM6ODkxOlx0Zm9saW9fbWlncmF0ZV9mbGFncyhkc3QsIHNyYyk7XG5tbS9taWdyYXRlLmMtODkyLVx0cmV0dXJuIDA7XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMTA5PXN0YXRpYyB2b2lkIF9fbWlncmF0ZV9kZXZpY2VfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjUxLVx0XHRcdGVsc2Vcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI1MjpcdFx0XHRcdGZvbGlvX21pZ3JhdGVfZmxhZ3MobmV3Zm9saW8sIGZvbGlvKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI1My1cdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA4NgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUGFnZSBPd25lciBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGBtbS9wYWdlX293bmVyLmNgIGNvZGUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbnZlc3RpZ2F0ZSBgX19mb2xpb19jb3B5X293bmVyYOKAlHRoYXQgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIExldCYjMzk7cyBzZWUuLi4geWVwLCBpdCYjMzk7cyBub24tc3RhdGljLCBkZWZpbmVkIGFzIGB2b2lkIF9fZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZClgLiBNYWtlcyBzZW5zZS4gTm93LCBsZXQmIzM5O3MganVzdCBxdWlja2x5IHNjYW4gZm9yIGFueSByZWxhdGVkIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuIEFoLCBgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZWAgaXMgYHN0YXRpYyBpbmxpbmVgIHNvIGxpa2VseSBub3QgYXMgY2VudHJhbCBhcyB0aGUgb3RoZXIuIEFsc28sIGBmb2xpb19taWdyYXRlX2ZsYWdzYCBpcyBub24tc3RhdGljLgoKTm93LCBsZXQmIzM5O3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEZyb20gd2hhdCBJIHJlbWVtYmVyLCBgUEFHRV9PV05FUmAgZGVwZW5kcyBvbiBgREVCVUdfS0VSTkVMYCBhbmQgYFNUQUNLVFJBQ0VfU1VQUE9SVGAsIHdoaWNoIGlzIGltcG9ydGFudCBjb250ZXh0LiBJIHNob3VsZCBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGNvbmZsaWN0cyB3aGVuIGBNSUdSQVRJT05gIG9yIGBOVU1BYCBvciBgQ09NUEFDVElPTmAgaXMgZW5hYmxlZCwgc28sIGxldCYjMzk7cyBzdGFydCBjaGVja2luZyBjb25maWdzIGluIGBtbS9taWdyYXRlLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTUlHUkFUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTk4PW9iai0kKENPTkZJR19NRU1URVNUKVx0XHQmIzQzOz0gbWVtdGVzdC5vXG5tbS9NYWtlZmlsZTo5OTpvYmotJChDT05GSUdfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZS5vXG5tbS9NYWtlZmlsZS0xMDAtb2JqLSQoQ09ORklHX05VTUEpICYjNDM7PSBtZW1vcnktdGllcnMub1xuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYz04NDQ9c3RhdGljIHZvaWQgX19pbml0IHN3YXBfbWlncmF0aW9uX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXG4tLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTg0OC1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo4NDk6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX01JR1JBVElPTikpXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtODUwLVx0XHRyZXR1cm47XG4tLVxubW0vZmlsZW1hcC5jPTEyNTA9c3RhdGljIGlubGluZSBpbnQgZm9saW9fd2FpdF9iaXRfY29tbW9uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBiaXRfbnIsXG4tLVxubW0vZmlsZW1hcC5jLTEzODUtXG5tbS9maWxlbWFwLmM6MTM4NjojaWZkZWYgQ09ORklHX01JR1JBVElPTlxubW0vZmlsZW1hcC5jLTEzODctLyoqXG4tLVxubW0vZ3VwLmM9MjE4Nz1zdHJ1Y3QgcGFnZSAqZ2V0X2R1bXBfcGFnZSh1bnNpZ25lZCBsb25nIGFkZHIsIGludCAqbG9ja2VkKVxuLS1cbm1tL2d1cC5jLTIxOTctXG5tbS9ndXAuYzoyMTk4OiNpZmRlZiBDT05GSUdfTUlHUkFUSU9OXG5tbS9ndXAuYy0yMTk5LVxuLS1cbm1tL2d1cC5jPTI0NDk9c3RhdGljIGxvbmcgY2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl9mb2xpb3MsXG4tLVxubW0vZ3VwLmMtMjQ1My19XG5tbS9ndXAuYzoyNDU0OiNlbmRpZiAvKiBDT05GSUdfTUlHUkFUSU9OICovXG5tbS9ndXAuYy0yNDU1LVxuLS1cbm1tL2tzbS5jPTMyNjk9dm9pZCBjb2xsZWN0X3Byb2NzX2tzbShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS9rc20uYy0zMzA3LVxubW0va3NtLmM6MzMwODojaWZkZWYgQ09ORklHX01JR1JBVElPTlxubW0va3NtLmMtMzMwOS12b2lkIGZvbGlvX21pZ3JhdGVfa3NtKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0va3NtLmMtMzMzMC19XG5tbS9rc20uYzozMzMxOiNlbmRpZiAvKiBDT05GSUdfTUlHUkFUSU9OICovXG5tbS9rc20uYy0zMzMyLVxuLS1cbm1tL3NobWVtLmM9NTM3MT1zdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBzaG1lbV9hb3BzID0ge1xuLS1cbm1tL3NobWVtLmMtNTM3Ni0jZW5kaWZcbm1tL3NobWVtLmM6NTM3NzojaWZkZWYgQ09ORklHX01JR1JBVElPTlxubW0vc2htZW0uYy01Mzc4LVx0Lm1pZ3JhdGVfZm9saW9cdD0gbWlncmF0ZV9mb2xpbyxcbi0tXG5tbS9zd2FwX3N0YXRlLmM9Mzk9c3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgc3dhcF9hb3BzID0ge1xubW0vc3dhcF9zdGF0ZS5jLTQwLVx0LmRpcnR5X2ZvbGlvXHQ9IG5vb3BfZGlydHlfZm9saW8sXG5tbS9zd2FwX3N0YXRlLmM6NDE6I2lmZGVmIENPTkZJR19NSUdSQVRJT05cbm1tL3N3YXBfc3RhdGUuYy00Mi1cdC5taWdyYXRlX2ZvbGlvXHQ9IG1pZ3JhdGVfZm9saW8sXG4tLVxubW0vc3dhcGZpbGUuYz03OD11bnNpZ25lZCBsb25nIHN3YXBmaWxlX21heGltdW1fc2l6ZTtcbm1tL3N3YXBmaWxlLmM6Nzk6I2lmZGVmIENPTkZJR19NSUdSQVRJT05cbm1tL3N3YXBmaWxlLmMtODAtYm9vbCBzd2FwX21pZ3JhdGlvbl9hZF9zdXBwb3J0ZWQ7XG5tbS9zd2FwZmlsZS5jOjgxOiNlbmRpZlx0LyogQ09ORklHX01JR1JBVElPTiAqL1xubW0vc3dhcGZpbGUuYy04Mi1cbi0tXG5tbS9zd2FwZmlsZS5jPTM5NTQ9c3RhdGljIGludCBfX2luaXQgc3dhcGZpbGVfaW5pdCh2b2lkKVxuLS1cbm1tL3N3YXBmaWxlLmMtMzk2Ny1cbm1tL3N3YXBmaWxlLmM6Mzk2ODojaWZkZWYgQ09ORklHX01JR1JBVElPTlxubW0vc3dhcGZpbGUuYy0zOTY5LVx0aWYgKHN3YXBmaWxlX21heGltdW1fc2l6ZSBcdTAwM2U9ICgxVUwgXHUwMDNjXHUwMDNjIFNXUF9NSUdfVE9UQUxfQklUUykpXG5tbS9zd2FwZmlsZS5jLTM5NzAtXHRcdHN3YXBfbWlncmF0aW9uX2FkX3N1cHBvcnRlZCA9IHRydWU7XG5tbS9zd2FwZmlsZS5jOjM5NzE6I2VuZGlmXHQvKiBDT05GSUdfTUlHUkFUSU9OICovXG5tbS9zd2FwZmlsZS5jLTM5NzItXG4tLVxubW0vdm1zdGF0LmM9MTE5OT1jb25zdCBjaGFyICogY29uc3Qgdm1zdGF0X3RleHRbXSA9IHtcbi0tXG5tbS92bXN0YXQuYy0xMzc3LSNlbmRpZlxubW0vdm1zdGF0LmM6MTM3ODojaWZkZWYgQ09ORklHX01JR1JBVElPTlxubW0vdm1zdGF0LmMtMTM3OS1cdFtJKFBHTUlHUkFURV9TVUNDRVNTKV1cdFx0XHQ9IFwmIzM0O3BnbWlncmF0ZV9zdWNjZXNzXCYjMzQ7LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzY0NAoJCQkJCQkJb3V0cHV0OiAxNDcKCQkJCQkJCXRob3VnaHRzOiAzOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS2NvbmZpZyBhbmQgVHJpYWdlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLiBJIHNlZSB0aGF0IGBQQUdFX09XTkVSYCBhbmQgYE1JR1JBVElPTmAgYXJlIGtleS4gYFBBR0VfT1dORVJgLCBvZiBjb3Vyc2UsIGVuYWJsZXMgYHBhZ2Vfb3duZXIuY2AsIGFuZCBpbXBvcnRhbnRseSwgYE1JR1JBVElPTmAgaXMgZ29pbmcgdG8gZXhlcmNpc2UgYF9fZm9saW9fY29weV9vd25lcmAgd2hpY2ggaXMgdGhlIGNvZGUgSSYjMzk7bSBpbnRlcmVzdGVkIGluLiBJIGFsc28gbm90ZSB0aGF0IGBERUJVR19GU2AgaXMgaW1wbGljaXRseSBzZWxlY3RlZCBieSBgUEFHRV9PV05FUmAsIHdoaWNoIGlzIGEgZ29vZCB0aGluZyBmb3IgZGVidWdnaW5nLgoKTm93LCBsZXQmIzM5O3Mgc3lzdGVtYXRpY2FsbHkgZ28gdGhyb3VnaCB0aGUgdHJpYWdlIGluc3RydWN0aW9ucy4KCjEuICAqKlJlYWNoYWJpbGl0eToqKiBJcyBgcGFnZV9vd25lcmAgcmVhY2hhYmxlPyBZZXMsIHNwZWNpZmljYWxseSB0aHJvdWdoIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwYWdlIHRyYWNraW5nIGluIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCB3aGVuIEkgZW5hYmxlIGBDT05GSUdfUEFHRV9PV05FUmAgYW5kIHVzZSB0aGUgYm9vdCBhcmd1bWVudCBgcGFnZV9vd25lcj1vbmAuIEFuZCwgeWVzLCBgZm9saW9fY29weV9vd25lcmAgaXMgcmVhY2hhYmxlIGR1cmluZyBmb2xpbyBtaWdyYXRpb24uIENydWNpYWxseSwgdGhpcyBjb2RlIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYmVjYXVzZSBvZiB0aGUgYHBhZ2Vfb3duZXJgIHRyYWNraW5nIGRhdGEgc3RydWN0dXJlcy4gVGhlcmVmb3JlLCAqeWVzKiwgaXQmIzM5O3MgJiMzNDtXb3J0aEZ1enppbmcmIzM0Oy4KCjIuICAqKkZvY3VzU3ltYm9sczoqKiBJJiMzOTt2ZSBpZGVudGlmaWVkIGBfX2ZvbGlvX2NvcHlfb3duZXJgIGFuZCBgZm9saW9fbWlncmF0ZV9mbGFnc2AgYXMgdGhlIHByaW1hcnkgdGFyZ2V0cy4gSSYjMzk7bSBhdm9pZGluZyBgX19yZXNldF9wYWdlX293bmVyYCBiZWNhdXNlIGl0JiMzOTtzIGNhbGxlZCBvbiAqZXZlcnkqIHBhZ2UgZnJlZSDigJMgdGhhdCYjMzk7cyBmYXIgdG9vIHViaXF1aXRvdXMgZm9yIGVmZmVjdGl2ZSBmdXp6aW5nLgoKMy4gICoqRW5hYmxlQ29uZmlnczoqKiBDb25maXJtZWQ6IGBQQUdFX09XTkVSYCBhbmQgYE1JR1JBVElPTmAuIFRob3NlIGFyZSB0aGUgdHdvIEkgbmVlZCB0byBnZXQgdGhpcyBzZXQgdXAuCgpBbHJpZ2h0LCBhIHNhbml0eSBjaGVjayBvbiB0aGUgdG9vbCBjYWxsIGBzZXQtcmVzdWx0c2AgaXMgaW4gb3JkZXIuCgoqICAgYFdvcnRoRnV6emluZ2A6IFRydWUuCiogICBgRW5hYmxlQ29uZmlnc2A6IGBbJiMzNDtQQUdFX09XTkVSJiMzNDssICYjMzQ7TUlHUkFUSU9OJiMzNDtdYC4gUGVyZmVjdC4KKiAgIGBGb2N1c1N5bWJvbHNgOiBgWyYjMzQ7X19mb2xpb19jb3B5X293bmVyJiMzNDssICYjMzQ7Zm9saW9fbWlncmF0ZV9mbGFncyYjMzQ7XWAuIEdvdCBpdC4KKiAgIGBSZWFzb25pbmdgOiBUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gbW0vcGFnZVxfb3duZXIuYyB3aGVyZSBgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZSgpYCB3YXMgaWdub3JpbmcgaXRzIGBwaWRgIGFuZCBgdGdpZGAgcGFyYW1ldGVycyBhbmQgdXNpbmcgYGN1cnJlbnQtJmd0O3BpZGAgYW5kIGBjdXJyZW50LSZndDt0Z2lkYCBpbnN0ZWFkLCB3aGljaCBpbXBhY3RzIGZvbGlvIG1pZ3JhdGlvbiAoYF9fZm9saW9fY29weV9vd25lcmApLiBCZWNhdXNlIHRoaXMgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBkZWJ1ZyB0cmFja2luZyBsb2dpYywgaXQmIzM5O3MgcmVhY2hhYmxlLgoKTm93LCBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTM6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBR0VfT1dORVImIzM0OywKICAgICYjMzQ7TUlHUkFUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19mb2xpb19jb3B5X293bmVyJiMzNDssCiAgICAmIzM0O2ZvbGlvX21pZ3JhdGVfZmxhZ3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gbW0vcGFnZV9vd25lci5jIHdoZXJlIF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGUoKSBpZ25vcmVkIHRoZSBwYXNzZWQgcGlkIGFuZCB0Z2lkIGFyZ3VtZW50cyBhbmQgaW5zdGVhZCB1c2VkIGN1cnJlbnQtXHUwMDNlcGlkIGFuZCBjdXJyZW50LVx1MDAzZXRnaWQuIFRoaXMgZGlyZWN0bHkgYWZmZWN0cyBmb2xpbyBtaWdyYXRpb24gaW4gX19mb2xpb19jb3B5X293bmVyKCksIHdoZXJlIHRoZSBvcmlnaW5hbCBvd25lciYjMzk7cyBmcmVlX3BpZCBhbmQgZnJlZV90Z2lkIG5lZWQgdG8gYmUgcHJlc2VydmVkLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCB0cmFja2luZyBsb2dpYyBpbiBjb3JlIG1tLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQQUdFX09XTkVSJiMzNDssCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fZm9saW9fY29weV9vd25lciYjMzQ7LAogICAgJiMzNDtmb2xpb19taWdyYXRlX2ZsYWdzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIG1tL3BhZ2Vfb3duZXIuYyB3aGVyZSBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlKCkgaWdub3JlZCB0aGUgcGFzc2VkIHBpZCBhbmQgdGdpZCBhcmd1bWVudHMgYW5kIGluc3RlYWQgdXNlZCBjdXJyZW50LVx1MDAzZXBpZCBhbmQgY3VycmVudC1cdTAwM2V0Z2lkLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgZm9saW8gbWlncmF0aW9uIGluIF9fZm9saW9fY29weV9vd25lcigpLCB3aGVyZSB0aGUgb3JpZ2luYWwgb3duZXImIzM5O3MgZnJlZV9waWQgYW5kIGZyZWVfdGdpZCBuZWVkIHRvIGJlIHByZXNlcnZlZC4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgdHJhY2tpbmcgbG9naWMgaW4gY29yZSBtbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTM6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMzo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT44bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlKClgIHdoZXJlIHRoZSBmdW5jdGlvbiB3YXMgYXNzaWduaW5nIGBjdXJyZW50LVx1MDAzZXBpZGAgYW5kIGBjdXJyZW50LVx1MDAzZXRnaWRgIGluc3RlYWQgb2YgdGhlIHBhc3NlZC1pbiBgcGlkYCBhbmQgYHRnaWRgIGZ1bmN0aW9uIGFyZ3VtZW50cy4gVGhlIHBhc3NlZCBwYXJhbWV0ZXJzIGFyZSBwcmltaXRpdmUgc2NhbGFyIHR5cGVzIChgcGlkX3RgKSB0aGF0IGFyZSBpbml0aWFsaXplZCBieSBjYWxsZXJzIChgY3VycmVudC1cdTAwM2VwaWRgL2BjdXJyZW50LVx1MDAzZXRnaWRgIGluIGBfX3Jlc2V0X3BhZ2Vfb3duZXJgIG9yIGBvbGRfcGFnZV9vd25lci1cdTAwM2VmcmVlX3BpZGAvYGZyZWVfdGdpZGAgaW4gYF9fZm9saW9fY29weV9vd25lcmApLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHN0cnVjdCBwYWRkaW5nIGxlYWtzIHRvIHVzZXIgc3BhY2UsIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZkMTJjODI0NjU2YzliODM3YzI4MjQzOGNlZTIzZmNlZGY1ZThlMGMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCA0IDEzOjUzOjMxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9vd25lci5jIGIvbW0vcGFnZV9vd25lci5jCmluZGV4IDNmYzM3ZDliOTA4ZWYuLmNmYzMxYzkyZDc2NTcgMTAwNjQ0Ci0tLSBhL21tL3BhZ2Vfb3duZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX293bmVyLmMKQEAgLTMwNyw4ICYjNDM7MzA3LDggQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGUoc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCQlwYWdlX293bmVyLSZndDtmcmVlX2hhbmRsZSA9IGhhbmRsZTsKIAkJfQogCQlwYWdlX293bmVyLSZndDtmcmVlX3RzX25zZWMgPSBmcmVlX3RzX25zZWM7Ci0JCXBhZ2Vfb3duZXItJmd0O2ZyZWVfcGlkID0gY3VycmVudC0mZ3Q7cGlkOwotCQlwYWdlX293bmVyLSZndDtmcmVlX3RnaWQgPSBjdXJyZW50LSZndDt0Z2lkOwomIzQzOwkJcGFnZV9vd25lci0mZ3Q7ZnJlZV9waWQgPSBwaWQ7CiYjNDM7CQlwYWdlX293bmVyLSZndDtmcmVlX3RnaWQgPSB0Z2lkOwogCX0KIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEzOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT44bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFdmFsdWF0aW5nIHRoZSBLTVNBTiBOZWNlc3NpdHkqKgoKT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIGp1c3RpZmllcyBpdHMgb3duIEtNU0FOIHNlc3Npb24uIEZpcnN0LCBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCB0aGUgZGlmZiBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gYG1tL3BhZ2Vfb3duZXIuY2AuIFRoaXMgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nLiBNeSBpbnN0aW5jdHMgdGVsbCBtZSB0aGUgY29kZSBhcm91bmQgbGluZSAzMDcgaW4gYG1tL3BhZ2Vfb3duZXIuY2AgbWlnaHQgYmUga2V5LCBzbyBJJiMzOTtsbCB1c2UgYHJlYWQtZmlsZWAgdGhlcmUgdG8gZ2V0IHRoZSBpbW1lZGlhdGUgY29udGV4dC4gSG9wZWZ1bGx5LCB0aGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gd2hhdCB0aGUgcGF0Y2ggaXMgdG91Y2hpbmcgYW5kIGlmIEtNU0FOIGlzIG5lY2Vzc2FyeSBmb3IgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGFnZV9vd25lci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyODU6XHRcdFx0X19zZXRfYml0KFBBR0VfRVhUX09XTkVSLCBcdTAwMjZwYWdlX2V4dC1cdTAwM2VmbGFncyk7XG4gMjg2Olx0XHRcdF9fc2V0X2JpdChQQUdFX0VYVF9PV05FUl9BTExPQ0FURUQsIFx1MDAyNnBhZ2VfZXh0LVx1MDAzZWZsYWdzKTtcbiAyODc6XHRcdH1cbiAyODg6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDI4OTpcdH1cbiAyOTA6XHRcbiAyOTE6XHRzdGF0aWMgaW5saW5lIHZvaWQgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbiAyOTI6XHRcdFx0XHRcdFx0XHQgICBkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGUsXG4gMjkzOlx0XHRcdFx0XHRcdFx0ICAgdW5zaWduZWQgc2hvcnQgb3JkZXIsXG4gMjk0Olx0XHRcdFx0XHRcdFx0ICAgcGlkX3QgcGlkLCBwaWRfdCB0Z2lkLFxuIDI5NTpcdFx0XHRcdFx0XHRcdCAgIHU2NCBmcmVlX3RzX25zZWMpXG4gMjk2Olx0e1xuIDI5NzpcdFx0c3RydWN0IHBhZ2VfZXh0X2l0ZXIgaXRlcjtcbiAyOTg6XHRcdHN0cnVjdCBwYWdlX2V4dCAqcGFnZV9leHQ7XG4gMjk5Olx0XHRzdHJ1Y3QgcGFnZV9vd25lciAqcGFnZV9vd25lcjtcbiAzMDA6XHRcbiAzMDE6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiAzMDI6XHRcdGZvcl9lYWNoX3BhZ2VfZXh0KHBhZ2UsIDEgXHUwMDNjXHUwMDNjIG9yZGVyLCBwYWdlX2V4dCwgaXRlcikge1xuIDMwMzpcdFx0XHRwYWdlX293bmVyID0gZ2V0X3BhZ2Vfb3duZXIocGFnZV9leHQpO1xuIDMwNDpcdFx0XHQvKiBPbmx5IF9fcmVzZXRfcGFnZV9vd25lcigpIHdhbnRzIHRvIGNsZWFyIHRoZSBiaXQgKi9cbiAzMDU6XHRcdFx0aWYgKGhhbmRsZSkge1xuIDMwNjpcdFx0XHRcdF9fY2xlYXJfYml0KFBBR0VfRVhUX09XTkVSX0FMTE9DQVRFRCwgXHUwMDI2cGFnZV9leHQtXHUwMDNlZmxhZ3MpO1xuIDMwNzpcdFx0XHRcdHBhZ2Vfb3duZXItXHUwMDNlZnJlZV9oYW5kbGUgPSBoYW5kbGU7XG4gMzA4Olx0XHRcdH1cbiAzMDk6XHRcdFx0cGFnZV9vd25lci1cdTAwM2VmcmVlX3RzX25zZWMgPSBmcmVlX3RzX25zZWM7XG4gMzEwOlx0XHRcdHBhZ2Vfb3duZXItXHUwMDNlZnJlZV9waWQgPSBwaWQ7XG4gMzExOlx0XHRcdHBhZ2Vfb3duZXItXHUwMDNlZnJlZV90Z2lkID0gdGdpZDtcbiAzMTI6XHRcdH1cbiAzMTM6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDMxNDpcdH1cbiAzMTU6XHRcbiAzMTY6XHR2b2lkIF9fcmVzZXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgc2hvcnQgb3JkZXIpXG4gMzE3Olx0e1xuIDMxODpcdFx0c3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dDtcbiAzMTk6XHRcdGRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZTtcbiAzMjA6XHRcdGRlcG90X3N0YWNrX2hhbmRsZV90IGFsbG9jX2hhbmRsZTtcbiAzMjE6XHRcdHN0cnVjdCBwYWdlX293bmVyICpwYWdlX293bmVyO1xuIDMyMjpcdFx0dTY0IGZyZWVfdHNfbnNlYyA9IGxvY2FsX2Nsb2NrKCk7XG4gMzIzOlx0XG4gMzI0Olx0XHRwYWdlX2V4dCA9IHBhZ2VfZXh0X2dldChwYWdlKTtcbiAzMjU6XHRcdGlmICh1bmxpa2VseSghcGFnZV9leHQpKVxuIDMyNjpcdFx0XHRyZXR1cm47XG4gMzI3Olx0XG4gMzI4Olx0XHRwYWdlX293bmVyID0gZ2V0X3BhZ2Vfb3duZXIocGFnZV9leHQpO1xuIDMyOTpcdFx0YWxsb2NfaGFuZGxlID0gcGFnZV9vd25lci1cdTAwM2VoYW5kbGU7XG4gMzMwOlx0XHRwYWdlX2V4dF9wdXQocGFnZV9leHQpO1xuIDMzMTpcdFxuIDMzMjpcdFx0LypcbiAzMzM6XHRcdCAqIERvIG5vdCBzcGVjaWZ5IEdGUF9OT1dBSVQgdG8gbWFrZSBnZnBmbGFnc19hbGxvd19zcGlubmluZygpID09IGZhbHNlXG4gMzM0Olx0XHQgKiB0byBwcmV2ZW50IGlzc3VlcyBpbiBzdGFja19kZXBvdF9zYXZlKCkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMzMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZWAqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZnVuY3Rpb24sIGBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIGNoZWNrIHRoZSBjYWxsIHNpdGVzLiBXaGVyZSBhcmUgd2UgaW52b2tpbmcgdGhpcyBmdW5jdGlvbj8gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2UgdG8gZ2V0IGEgZ3Jhc3Agb24gaXRzIHB1cnBvc2UgYW5kIGl0cyBjcml0aWNhbCBwb2ludHMgb2YgaW50ZXJhY3Rpb24gd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0uIEtub3dpbmcgd2hlcmUgaXQmIzM5O3MgY2FsbGVkIGlzIGFic29sdXRlbHkgY3J1Y2lhbCBmb3IgYW55IHJlYWwgdW5kZXJzdGFuZGluZy4KCk9rYXksIGxldCYjMzk7cyBuYXZpZ2F0ZSB0byBgbW0vcGFnZV9vd25lci5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBkZWZpbml0aW9uLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBzY3J1dGluaXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBjb250ZXh0LiBJJiMzOTtsbCBwcm9iYWJseSBiZSBsb29raW5nIGZvciB0aGUgY29uZGl0aW9ucyBsZWFkaW5nIHVwIHRvIHRoZSBjYWxsLCB3aGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgaW52b2x2ZWQsIGFuZCB3aGF0IHRoZSBmdW5jdGlvbiBpcyBpbnRlbmRlZCB0byBhY2NvbXBsaXNoIHdpdGhpbiB0aGUgbGFyZ2VyIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIGZyYW1ld29yay4gVGltZSB0byBkaWcgaW4gYW5kIGdldCBhIGdvb2QgcGljdHVyZSBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgb3ZlcmFsbCBwYWdlIG93bmVyc2hpcCB0cmFja2luZyBtZWNoYW5pc20uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGFnZV9vd25lci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMzU6XHRcdCAqIFRoaXMgaXMgc2ltaWxhciB0byBhbGxvY19wYWdlc19ub2xvY2soKSBnZnAgZmxhZ3MsIGJ1dCBvbmx5IHVzZWRcbiAzMzY6XHRcdCAqIHRvIHNpZ25hbCBzdGFja19kZXBvdCB0byBhdm9pZCBzcGluX2xvY2tzLlxuIDMzNzpcdFx0ICovXG4gMzM4Olx0XHRoYW5kbGUgPSBzYXZlX3N0YWNrKF9fR0ZQX05PV0FSTik7XG4gMzM5Olx0XHRfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlKHBhZ2UsIGhhbmRsZSwgb3JkZXIsIGN1cnJlbnQtXHUwMDNlcGlkLFxuIDM0MDpcdFx0XHRcdFx0XHRjdXJyZW50LVx1MDAzZXRnaWQsIGZyZWVfdHNfbnNlYyk7XG4gMzQxOlx0XG4gMzQyOlx0XHRpZiAoYWxsb2NfaGFuZGxlICE9IGVhcmx5X2hhbmRsZSlcbiAzNDM6XHRcdFx0LypcbiAzNDQ6XHRcdFx0ICogZWFybHlfaGFuZGxlIGlzIGJlaW5nIHNldCBhcyBhIGhhbmRsZSBmb3IgYWxsIHRob3NlXG4gMzQ1Olx0XHRcdCAqIGVhcmx5IGFsbG9jYXRlZCBwYWdlcy4gU2VlIGluaXRfcGFnZXNfaW5fem9uZSgpLlxuIDM0NjpcdFx0XHQgKiBTaW5jZSB0aGVpciByZWZjb3VudCBpcyBub3QgYmVpbmcgaW5jcmVtZW50ZWQgYmVjYXVzZVxuIDM0NzpcdFx0XHQgKiB0aGUgbWFjaGluZXJ5IGlzIG5vdCByZWFkeSB5ZXQsIHdlIGNhbm5vdCBkZWNyZW1lbnRcbiAzNDg6XHRcdFx0ICogdGhlaXIgcmVmY291bnQgZWl0aGVyLlxuIDM0OTpcdFx0XHQgKi9cbiAzNTA6XHRcdFx0ZGVjX3N0YWNrX3JlY29yZF9jb3VudChhbGxvY19oYW5kbGUsIDEgXHUwMDNjXHUwMDNjIG9yZGVyKTtcbiAzNTE6XHR9XG4gMzUyOlx0XG4gMzUzOlx0bm9pbmxpbmUgdm9pZCBfX3NldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBzaG9ydCBvcmRlcixcbiAzNTQ6XHRcdFx0XHRcdFx0Z2ZwX3QgZ2ZwX21hc2spXG4gMzU1Olx0e1xuIDM1NjpcdFx0dTY0IHRzX25zZWMgPSBsb2NhbF9jbG9jaygpO1xuIDM1NzpcdFx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlO1xuIDM1ODpcdFxuIDM1OTpcdFx0aGFuZGxlID0gc2F2ZV9zdGFjayhnZnBfbWFzayk7XG4gMzYwOlx0XHRfX3VwZGF0ZV9wYWdlX293bmVyX2hhbmRsZShwYWdlLCBoYW5kbGUsIG9yZGVyLCBnZnBfbWFzaywgTVJfTkVWRVIsXG4gMzYxOlx0XHRcdFx0XHQgICB0c19uc2VjLCBjdXJyZW50LVx1MDAzZXBpZCwgY3VycmVudC1cdTAwM2V0Z2lkLFxuIDM2MjpcdFx0XHRcdFx0ICAgY3VycmVudC1cdTAwM2Vjb21tKTtcbiAzNjM6XHRcdGluY19zdGFja19yZWNvcmRfY291bnQoaGFuZGxlLCBnZnBfbWFzaywgMSBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuIDM2NDpcdH1cbiAzNjU6XHRcbiAzNjY6XHR2b2lkIF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxuIDM2NzpcdHtcbiAzNjg6XHRcdHN0cnVjdCBwYWdlX2V4dCAqcGFnZV9leHQgPSBwYWdlX2V4dF9nZXQoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSk7XG4gMzY5Olx0XHRzdHJ1Y3QgcGFnZV9vd25lciAqcGFnZV9vd25lcjtcbiAzNzA6XHRcbiAzNzE6XHRcdGlmICh1bmxpa2VseSghcGFnZV9leHQpKVxuIDM3MjpcdFx0XHRyZXR1cm47XG4gMzczOlx0XG4gMzc0Olx0XHRwYWdlX293bmVyID0gZ2V0X3BhZ2Vfb3duZXIocGFnZV9leHQpO1xuIDM3NTpcdFx0cGFnZV9vd25lci1cdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uID0gcmVhc29uO1xuIDM3NjpcdFx0cGFnZV9leHRfcHV0KHBhZ2VfZXh0KTtcbiAzNzc6XHR9XG4gMzc4Olx0XG4gMzc5Olx0dm9pZCBfX3NwbGl0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvbGRfb3JkZXIsIGludCBuZXdfb3JkZXIpXG4gMzgwOlx0e1xuIDM4MTpcdFx0c3RydWN0IHBhZ2VfZXh0X2l0ZXIgaXRlcjtcbiAzODI6XHRcdHN0cnVjdCBwYWdlX2V4dCAqcGFnZV9leHQ7XG4gMzgzOlx0XHRzdHJ1Y3QgcGFnZV9vd25lciAqcGFnZV9vd25lcjtcbiAzODQ6XHRcbiAzODU6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiAzODY6XHRcdGZvcl9lYWNoX3BhZ2VfZXh0KHBhZ2UsIDEgXHUwMDNjXHUwMDNjIG9sZF9vcmRlciwgcGFnZV9leHQsIGl0ZXIpIHtcbiAzODc6XHRcdFx0cGFnZV9vd25lciA9IGdldF9wYWdlX293bmVyKHBhZ2VfZXh0KTtcbiAzODg6XHRcdFx0cGFnZV9vd25lci1cdTAwM2VvcmRlciA9IG5ld19vcmRlcjtcbiAzODk6XHRcdH1cbiAzOTA6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDM5MTpcdH1cbiAzOTI6XHRcbiAzOTM6XHR2b2lkIF9fZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZClcbiAzOTQ6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MDAKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZWAgQ2FsbCBTaXRlcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZnVuY3Rpb24sIGBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlYC4gVG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gd2hlcmUgaXQmIzM5O3MgYmVpbmcgdXNlZCBhbmQsIG1vcmUgaW1wb3J0YW50bHksICpob3cqIGl0JiMzOTtzIGJlaW5nIHVzZWQsIEkmIzM5O20gZ29pbmcgdG8gbGV2ZXJhZ2UgYGdyZXBwZXJgLiBJJiMzOTttIGdvaW5nIHRvIHJ1biBhIHNlYXJjaCBzcGVjaWZpY2FsbHkgZm9yIGNhbGxzIHRvIHRoYXQgZnVuY3Rpb24gYWNyb3NzIHRoZSBlbnRpcmUgY29kZWJhc2UuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBvdmVydmlldyBvZiBhbGwgdGhlIGRpZmZlcmVudCBjb250ZXh0cyBpbiB3aGljaCBpdCBvcGVyYXRlcy4gS25vd2luZyB0aGUgc3Vycm91bmRpbmcgY29kZSB3aWxsIHRlbGwgbWUgYSBncmVhdCBkZWFsIGFib3V0IHRoZSBhc3N1bXB0aW9ucyBhbmQgcG9zc2libGUgc2lkZSBlZmZlY3RzIHJlbGF0ZWQgdG8gdGhpcyBzcGVjaWZpYyBmdW5jdGlvbi4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gZHJhdyBzb21lIGNvbmNsdXNpb25zIGFib3V0IHRoZSBmdW5jdGlvbiYjMzk7cyBvdmVyYWxsIHB1cnBvc2UgYW5kIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2Vfb3duZXIuYz0yNjI9c3RhdGljIGlubGluZSB2b2lkIF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbm1tL3BhZ2Vfb3duZXIuYy0yOTAtXG5tbS9wYWdlX293bmVyLmM6MjkxOnN0YXRpYyBpbmxpbmUgdm9pZCBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlKHN0cnVjdCBwYWdlICpwYWdlLFxubW0vcGFnZV9vd25lci5jLTI5Mi1cdFx0XHRcdFx0XHQgICBkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGUsXG4tLVxubW0vcGFnZV9vd25lci5jPTMxNj12b2lkIF9fcmVzZXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgc2hvcnQgb3JkZXIpXG4tLVxubW0vcGFnZV9vd25lci5jLTMzOC1cdGhhbmRsZSA9IHNhdmVfc3RhY2soX19HRlBfTk9XQVJOKTtcbm1tL3BhZ2Vfb3duZXIuYzozMzk6XHRfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlKHBhZ2UsIGhhbmRsZSwgb3JkZXIsIGN1cnJlbnQtXHUwMDNlcGlkLFxubW0vcGFnZV9vd25lci5jLTM0MC1cdFx0XHRcdFx0Y3VycmVudC1cdTAwM2V0Z2lkLCBmcmVlX3RzX25zZWMpO1xuLS1cbm1tL3BhZ2Vfb3duZXIuYz0zOTM9dm9pZCBfX2ZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpXG4tLVxubW0vcGFnZV9vd25lci5jLTQyNS1cdCAqL1xubW0vcGFnZV9vd25lci5jOjQyNjpcdF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGUoXHUwMDI2bmV3Zm9saW8tXHUwMDNlcGFnZSwgMCwgb2xkX3BhZ2Vfb3duZXItXHUwMDNlb3JkZXIsXG5tbS9wYWdlX293bmVyLmMtNDI3LVx0XHRcdFx0XHRvbGRfcGFnZV9vd25lci1cdTAwM2VmcmVlX3BpZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk3OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOgoKKipEaXZpbmcgaW50byBgX19mb2xpb19jb3B5X293bmVyYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgZ29pbmcgb24gaW4gdGhpcyBgX19mb2xpb19jb3B5X293bmVyYCBmdW5jdGlvbi4gVGhlIGNvbnRleHQgSSBuZWVkIGlzIHdpdGhpbiB0aGUgYG1tL3BhZ2Vfb3duZXIuY2AgZmlsZSwgc3BlY2lmaWNhbGx5IGxpbmVzIDM5My00MzUuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIGNodW5rIG9mIGNvZGUsIHNvIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMuIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgaGFuZGxpbmcgdGhlIGNvcHlpbmcgb2Ygb3duZXJzaGlwIGluZm9ybWF0aW9uIGZvciBhIGZvbGlvLCBsaWtlbHkgcmVsYXRlZCB0byBwYWdlIG93bmVyc2hpcCB0cmFja2luZywgZ2l2ZW4gdGhlIGZpbGVuYW1lLiBJJiMzOTtsbCBuZWVkIHRvIHBhcnNlIHRoZSBsb2dpYyBpbiB0aG9zZSBsaW5lcyB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBpbXBsZW1lbnRlZC4gSSBleHBlY3QgdGhlcmUmIzM5O3Mgc29tZSBraW5kIG9mIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZm9saW8gaW52b2x2ZWQsIGFuZCB0aGUgZnVuY3Rpb24mIzM5O3Mgb2JqZWN0aXZlIGlzIHRvIGR1cGxpY2F0ZSBvd25lcnNoaXAgZGF0YSwgcGVyaGFwcyByZWZlcmVuY2UgY291bnRzLCBhbmQgcG9zc2libHkgb3RoZXIgcmVsYXRlZCBtZXRhZGF0YSwgZHVyaW5nIGEgZm9saW8gY29weSBvcGVyYXRpb24uIEkgd2FudCB0byBwYXkgY2FyZWZ1bCBhdHRlbnRpb24gdG8gYW55IGxvY2tpbmcgcHJpbWl0aXZlcyB1c2VkIHdpdGhpbiB0aGF0IHJlZ2lvbi4gVGhhdCB3aWxsIHRlbGwgbWUgaG93IHRoaXMgaXMgc2FmZWx5IGludGVncmF0ZWQgaW50byB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbS4gT2theSwgbGV0JiMzOTtzIGdvIGxpbmUgYnkgbGluZSBhbmQgc2VlIHdoYXQgaXQmIzM5O3MgcmVhbGx5IGRvaW5nLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGFnZV9vd25lci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzkzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzOTM6XHR2b2lkIF9fZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZClcbiAzOTQ6XHR7XG4gMzk1Olx0XHRzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0O1xuIDM5NjpcdFx0c3RydWN0IHBhZ2VfZXh0X2l0ZXIgaXRlcjtcbiAzOTc6XHRcdHN0cnVjdCBwYWdlX293bmVyICpvbGRfcGFnZV9vd25lcjtcbiAzOTg6XHRcdHN0cnVjdCBwYWdlX293bmVyICpuZXdfcGFnZV9vd25lcjtcbiAzOTk6XHRcdGRlcG90X3N0YWNrX2hhbmRsZV90IG1pZ3JhdGVfaGFuZGxlO1xuIDQwMDpcdFxuIDQwMTpcdFx0cGFnZV9leHQgPSBwYWdlX2V4dF9nZXQoXHUwMDI2b2xkLVx1MDAzZXBhZ2UpO1xuIDQwMjpcdFx0aWYgKHVubGlrZWx5KCFwYWdlX2V4dCkpXG4gNDAzOlx0XHRcdHJldHVybjtcbiA0MDQ6XHRcbiA0MDU6XHRcdG9sZF9wYWdlX293bmVyID0gZ2V0X3BhZ2Vfb3duZXIocGFnZV9leHQpO1xuIDQwNjpcdFx0cGFnZV9leHRfcHV0KHBhZ2VfZXh0KTtcbiA0MDc6XHRcbiA0MDg6XHRcdHBhZ2VfZXh0ID0gcGFnZV9leHRfZ2V0KFx1MDAyNm5ld2ZvbGlvLVx1MDAzZXBhZ2UpO1xuIDQwOTpcdFx0aWYgKHVubGlrZWx5KCFwYWdlX2V4dCkpXG4gNDEwOlx0XHRcdHJldHVybjtcbiA0MTE6XHRcbiA0MTI6XHRcdG5ld19wYWdlX293bmVyID0gZ2V0X3BhZ2Vfb3duZXIocGFnZV9leHQpO1xuIDQxMzpcdFx0cGFnZV9leHRfcHV0KHBhZ2VfZXh0KTtcbiA0MTQ6XHRcbiA0MTU6XHRcdG1pZ3JhdGVfaGFuZGxlID0gbmV3X3BhZ2Vfb3duZXItXHUwMDNlaGFuZGxlO1xuIDQxNjpcdFx0X191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUoXHUwMDI2bmV3Zm9saW8tXHUwMDNlcGFnZSwgb2xkX3BhZ2Vfb3duZXItXHUwMDNlaGFuZGxlLFxuIDQxNzpcdFx0XHRcdFx0ICAgb2xkX3BhZ2Vfb3duZXItXHUwMDNlb3JkZXIsIG9sZF9wYWdlX293bmVyLVx1MDAzZWdmcF9tYXNrLFxuIDQxODpcdFx0XHRcdFx0ICAgb2xkX3BhZ2Vfb3duZXItXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbixcbiA0MTk6XHRcdFx0XHRcdCAgIG9sZF9wYWdlX293bmVyLVx1MDAzZXRzX25zZWMsIG9sZF9wYWdlX293bmVyLVx1MDAzZXBpZCxcbiA0MjA6XHRcdFx0XHRcdCAgIG9sZF9wYWdlX293bmVyLVx1MDAzZXRnaWQsIG9sZF9wYWdlX293bmVyLVx1MDAzZWNvbW0pO1xuIDQyMTpcdFx0LypcbiA0MjI6XHRcdCAqIERvIG5vdCBwcm9hY3RpdmVseSBjbGVhciBQQUdFX0VYVF9PV05FUntfQUxMT0NBVEVEfSBiaXRzIGFzIHRoZSBmb2xpb1xuIDQyMzpcdFx0ICogd2lsbCBiZSBmcmVlZCBhZnRlciBtaWdyYXRpb24uIEtlZXAgdGhlbSB1bnRpbCB0aGVuIGFzIHRoZXkgbWF5IGJlXG4gNDI0Olx0XHQgKiB1c2VmdWwuXG4gNDI1Olx0XHQgKi9cbiA0MjY6XHRcdF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGUoXHUwMDI2bmV3Zm9saW8tXHUwMDNlcGFnZSwgMCwgb2xkX3BhZ2Vfb3duZXItXHUwMDNlb3JkZXIsXG4gNDI3Olx0XHRcdFx0XHRcdG9sZF9wYWdlX293bmVyLVx1MDAzZWZyZWVfcGlkLFxuIDQyODpcdFx0XHRcdFx0XHRvbGRfcGFnZV9vd25lci1cdTAwM2VmcmVlX3RnaWQsXG4gNDI5Olx0XHRcdFx0XHRcdG9sZF9wYWdlX293bmVyLVx1MDAzZWZyZWVfdHNfbnNlYyk7XG4gNDMwOlx0XHQvKlxuIDQzMTpcdFx0ICogV2UgbGlua2VkIHRoZSBvcmlnaW5hbCBzdGFjayB0byB0aGUgbmV3IGZvbGlvLCB3ZSBuZWVkIHRvIGRvIHRoZSBzYW1lXG4gNDMyOlx0XHQgKiBmb3IgdGhlIG5ldyBvbmUgYW5kIHRoZSBvbGQgZm9saW8gb3RoZXJ3aXNlIHRoZXJlIHdpbGwgYmUgYW4gaW1iYWxhbmNlXG4gNDMzOlx0XHQgKiB3aGVuIHN1YnRyYWN0aW5nIHRob3NlIHBhZ2VzIGZyb20gdGhlIHN0YWNrLlxuIDQzNDpcdFx0ICovXG4gNDM1Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gNDM2Olx0XHRmb3JfZWFjaF9wYWdlX2V4dChcdTAwMjZvbGQtXHUwMDNlcGFnZSwgMSBcdTAwM2NcdTAwM2MgbmV3X3BhZ2Vfb3duZXItXHUwMDNlb3JkZXIsIHBhZ2VfZXh0LCBpdGVyKSB7XG4gNDM3Olx0XHRcdG9sZF9wYWdlX293bmVyID0gZ2V0X3BhZ2Vfb3duZXIocGFnZV9leHQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDk2CgkJCQkJCQlvdXRwdXQ6IDE4NAoJCQkJCQkJdGhvdWdodHM6IDYyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYWdlIE93bmVyIEZyZWUgSGFuZGxlIEJ1ZyBhbmQgQXNzZXNzaW5nIFJpc2tzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHRoZXJlJiMzOTtzIGEgc3RyYWlnaHRmb3J3YXJkIGJ1ZyBpbiBgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZWAuIFRoZSBmdW5jdGlvbiB3YXMgc3VwcG9zZWQgdG8gdXBkYXRlIHRoZSBwYWdlIG93bmVyJiMzOTtzIGluZm9ybWF0aW9uIHdpdGggc3BlY2lmaWMgYHBpZGAgYW5kIGB0Z2lkYCB2YWx1ZXMgcGFzc2VkIHRvIGl0LiBIb3dldmVyLCB0aGUgY29kZSB3YXMgbWlzdGFrZW5seSB1c2luZyBgY3VycmVudC0mZ3Q7cGlkYCBhbmQgYGN1cnJlbnQtJmd0O3RnaWRgIGluc3RlYWQsIGNvbXBsZXRlbHkgaWdub3JpbmcgdGhlIHBhc3NlZCBhcmd1bWVudHMhIFRoaXMgaGFwcGVuZWQgYmVjYXVzZSBpbnNpZGUgdGhlIGxvb3AgaW4gYF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGVgLCBpdCBoYWQgdGhlc2UgbGluZXM6CgpgYGBjCnBhZ2Vfb3duZXItJmd0O2ZyZWVfdHNfbnNlYyA9IGZyZWVfdHNfbnNlYzsKcGFnZV9vd25lci0mZ3Q7ZnJlZV9waWQgPSBjdXJyZW50LSZndDtwaWQ7CnBhZ2Vfb3duZXItJmd0O2ZyZWVfdGdpZCA9IGN1cnJlbnQtJmd0O3RnaWQ7CmBgYAoKU28gd2hlbiBgX19mb2xpb19jb3B5X293bmVyYCBjYWxsZWQgYF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGVgIHdpdGgsIHNheSwgdGhlIG9sZCBwYWdlIG93bmVyJiMzOTtzIGBmcmVlX3BpZGAgYW5kIGBmcmVlX3RnaWRgLCBpdCB3YXMgY2xvYmJlcmluZyB0aG9zZSB3aXRoIHRoZSAqY3VycmVudCogcHJvY2VzcyYjMzk7cyBpbmZvcm1hdGlvbi4gIFRoZSBmaXggaXMsIG9mIGNvdXJzZSwgYSBzaW1wbGUgc3dhcCB0byB1c2luZyB0aGUgcHJvdmlkZWQgdmFsdWVzOgoKYGBgYwotCQlwYWdlX293bmVyLSZndDtmcmVlX3BpZCA9IGN1cnJlbnQtJmd0O3BpZDsKLQkJcGFnZV9vd25lci0mZ3Q7ZnJlZV90Z2lkID0gY3VycmVudC0mZ3Q7dGdpZDsKJiM0MzsJCXBhZ2Vfb3duZXItJmd0O2ZyZWVfcGlkID0gcGlkOwomIzQzOwkJcGFnZV9vd25lci0mZ3Q7ZnJlZV90Z2lkID0gdGdpZDsKYGBgCgpOb3csIGxldCYjMzk7cyBiZSB0aG9yb3VnaCBhbmQgbG9vayBhdCB0aGUgcG90ZW50aWFsIHJpc2tzLiBEb2VzIHRoaXMgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXM/ICBXZSBoYXZlIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gVGhlIGtleSBoZXJlIGlzIHRoYXQgdGhlIGBwaWRgIGFuZCBgdGdpZGAgYXJlIHBhc3NlZCBhcyBzY2FsYXIgYHBpZF90YCB2YWx1ZXMuIEluIHRoZSBjYWxsIGNoYWluLCBgX19yZXNldF9wYWdlX293bmVyYCBwYXNzZXMgYGN1cnJlbnQtJmd0O3BpZGAgYW5kIGBjdXJyZW50LSZndDt0Z2lkYCwgd2hpY2ggYXJlIGluaXRpYWxpemVkLiBUaGVuLCBgX19mb2xpb19jb3B5X293bmVyYCBwYXNzZXMgYG9sZF9wYWdlX293bmVyLSZndDtmcmVlX3BpZGAgYW5kIGBvbGRfcGFnZV9vd25lci0mZ3Q7ZnJlZV90Z2lkYCwgd2hpY2ggd2UgYXNzdW1lIHdlcmUgYWxzbyBpbml0aWFsaXplZCBlbHNld2hlcmUgd2hlbiB0aGUgcGFnZSB3YXMgZmlyc3QgZnJlZWQgKHdoaWNoIGlzIHRoZSBwb2ludCBvZiB0aGUgd2hvbGUgdHJhY2tpbmcgbWVjaGFuaXNtKS4KClRoZXJlZm9yZToKCjEuICBgcGlkYCBhbmQgYHRnaWRgIGFyZSBzY2FsYXIgdmFsdWUgYXJndW1lbnRzIGFuZCBhcmUgaW5pdGlhbGl6ZWQgd2hlbiBwYXNzZWQgdG8gYF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGVgLgoyLiAgVGhlcmUgYXJlbiYjMzk7dCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHBvdGVudGlhbCBsZWFrcywgYnJhbmNoZXMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBjb21wbGV4IHN0cnVjdCBhbGxvY2F0aW9ucyBpbnZvbHZlZCBoZXJlLgozLiBUaGlzIGlzIHB1cmVseSBhIGxvZ2ljIGJ1ZyBmaXhpbmcgdGhlIHRyYWNraW5nIG9mIHRoZSBwcmV2aW91cyBvd25lci4KNC4gIE5vIEtNU0FOIGZ1enppbmcgaXMgbmVjZXNzYXJ5LiAgSXQmIzM5O3MgYSBzdHJhaWdodGZvcndhcmQgaW50ZWdlciBkYXRhIGZsb3cgaXNzdWUuCgpXZSBzaG91bGQgYmUgZ29vZCwgYnV0IGxldCYjMzk7cyBqdXN0IG1ha2Ugb25lIGxhc3Qgc2FuaXR5IGNoZWNrOgoKKiAgIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMuCiogICBObyBjaGFuZ2VzIHRvIGJvdW5kcyBvciBsZW5ndGhzLgoqICAgTm8gY29uZGl0aW9uYWwganVtcHMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLgoqICAgTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgY29waWVkIHRvIHVzZXJzcGFjZS4KKiAgIEFsbCBpbnZvbHZlZCB2YWx1ZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGludGVnZXJzLgoKT2theSwgSSYjMzk7bSBzYXRpc2ZpZWQuIFRpbWUgdG8gd3JpdGUgdXAgdGhlIHJlYXNvbmluZyBhbmQgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGUoKWAgd2hlcmUgdGhlIGZ1bmN0aW9uIHdhcyBhc3NpZ25pbmcgYGN1cnJlbnQtXHUwMDNlcGlkYCBhbmQgYGN1cnJlbnQtXHUwMDNldGdpZGAgaW5zdGVhZCBvZiB0aGUgcGFzc2VkLWluIGBwaWRgIGFuZCBgdGdpZGAgZnVuY3Rpb24gYXJndW1lbnRzLiBUaGUgcGFzc2VkIHBhcmFtZXRlcnMgYXJlIHByaW1pdGl2ZSBzY2FsYXIgdHlwZXMgKGBwaWRfdGApIHRoYXQgYXJlIGluaXRpYWxpemVkIGJ5IGNhbGxlcnMgKGBjdXJyZW50LVx1MDAzZXBpZGAvYGN1cnJlbnQtXHUwMDNldGdpZGAgaW4gYF9fcmVzZXRfcGFnZV9vd25lcmAgb3IgYG9sZF9wYWdlX293bmVyLVx1MDAzZWZyZWVfcGlkYC9gZnJlZV90Z2lkYCBpbiBgX19mb2xpb19jb3B5X293bmVyYCkuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgc3RydWN0IHBhZGRpbmcgbGVha3MgdG8gdXNlciBzcGFjZSwgb3IgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGUoKWAgd2hlcmUgdGhlIGZ1bmN0aW9uIHdhcyBhc3NpZ25pbmcgYGN1cnJlbnQtXHUwMDNlcGlkYCBhbmQgYGN1cnJlbnQtXHUwMDNldGdpZGAgaW5zdGVhZCBvZiB0aGUgcGFzc2VkLWluIGBwaWRgIGFuZCBgdGdpZGAgZnVuY3Rpb24gYXJndW1lbnRzLiBUaGUgcGFzc2VkIHBhcmFtZXRlcnMgYXJlIHByaW1pdGl2ZSBzY2FsYXIgdHlwZXMgKGBwaWRfdGApIHRoYXQgYXJlIGluaXRpYWxpemVkIGJ5IGNhbGxlcnMgKGBjdXJyZW50LVx1MDAzZXBpZGAvYGN1cnJlbnQtXHUwMDNldGdpZGAgaW4gYF9fcmVzZXRfcGFnZV9vd25lcmAgb3IgYG9sZF9wYWdlX293bmVyLVx1MDAzZWZyZWVfcGlkYC9gZnJlZV90Z2lkYCBpbiBgX19mb2xpb19jb3B5X293bmVyYCkuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgc3RydWN0IHBhZGRpbmcgbGVha3MgdG8gdXNlciBzcGFjZSwgb3IgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMzo1MzozMi44Njc0NTIwMjlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTE5OTUyOTExODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEFHRV9PV05FUlwiLFxuICAgIFwiTUlHUkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19mb2xpb19jb3B5X293bmVyXCIsXG4gICAgXCJmb2xpb19taWdyYXRlX2ZsYWdzXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZSgpYCB3aGVyZSB0aGUgZnVuY3Rpb24gd2FzIGFzc2lnbmluZyBgY3VycmVudC1cXHUwMDNlcGlkYCBhbmQgYGN1cnJlbnQtXFx1MDAzZXRnaWRgIGluc3RlYWQgb2YgdGhlIHBhc3NlZC1pbiBgcGlkYCBhbmQgYHRnaWRgIGZ1bmN0aW9uIGFyZ3VtZW50cy4gVGhlIHBhc3NlZCBwYXJhbWV0ZXJzIGFyZSBwcmltaXRpdmUgc2NhbGFyIHR5cGVzIChgcGlkX3RgKSB0aGF0IGFyZSBpbml0aWFsaXplZCBieSBjYWxsZXJzIChgY3VycmVudC1cXHUwMDNlcGlkYC9gY3VycmVudC1cXHUwMDNldGdpZGAgaW4gYF9fcmVzZXRfcGFnZV9vd25lcmAgb3IgYG9sZF9wYWdlX293bmVyLVxcdTAwM2VmcmVlX3BpZGAvYGZyZWVfdGdpZGAgaW4gYF9fZm9saW9fY29weV9vd25lcmApLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHN0cnVjdCBwYWRkaW5nIGxlYWtzIHRvIHVzZXIgc3BhY2UsIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBtbS9wYWdlX293bmVyLmMgd2hlcmUgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZSgpIGlnbm9yZWQgdGhlIHBhc3NlZCBwaWQgYW5kIHRnaWQgYXJndW1lbnRzIGFuZCBpbnN0ZWFkIHVzZWQgY3VycmVudC1cXHUwMDNlcGlkIGFuZCBjdXJyZW50LVxcdTAwM2V0Z2lkLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgZm9saW8gbWlncmF0aW9uIGluIF9fZm9saW9fY29weV9vd25lcigpLCB3aGVyZSB0aGUgb3JpZ2luYWwgb3duZXIncyBmcmVlX3BpZCBhbmQgZnJlZV90Z2lkIG5lZWQgdG8gYmUgcHJlc2VydmVkLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCB0cmFja2luZyBsb2dpYyBpbiBjb3JlIG1tLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMzo1MzozMi44Njc0NTY0NjlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNzczOTEyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDZkMTJjODI0NjU2YzliODM3YzI4MjQzOGNlZTIzZmNlZGY1ZThlMGNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgNCAxMzo1MzozMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9wYWdlX293bmVyLmMgYi9tbS9wYWdlX293bmVyLmNcXG5pbmRleCAzZmMzN2Q5YjkwOGVmLi5jZmMzMWM5MmQ3NjU3IDEwMDY0NFxcbi0tLSBhL21tL3BhZ2Vfb3duZXIuY1xcbisrKyBiL21tL3BhZ2Vfb3duZXIuY1xcbkBAIC0zMDcsOCArMzA3LDggQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGUoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuIFxcdFxcdFxcdHBhZ2Vfb3duZXItXFx1MDAzZWZyZWVfaGFuZGxlID0gaGFuZGxlO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHBhZ2Vfb3duZXItXFx1MDAzZWZyZWVfdHNfbnNlYyA9IGZyZWVfdHNfbnNlYztcXG4tXFx0XFx0cGFnZV9vd25lci1cXHUwMDNlZnJlZV9waWQgPSBjdXJyZW50LVxcdTAwM2VwaWQ7XFxuLVxcdFxcdHBhZ2Vfb3duZXItXFx1MDAzZWZyZWVfdGdpZCA9IGN1cnJlbnQtXFx1MDAzZXRnaWQ7XFxuK1xcdFxcdHBhZ2Vfb3duZXItXFx1MDAzZWZyZWVfcGlkID0gcGlkO1xcbitcXHRcXHRwYWdlX293bmVyLVxcdTAwM2VmcmVlX3RnaWQgPSB0Z2lkO1xcbiBcXHR9XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEzOjUzOjMzLjI5NTkyNzYwMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6OTkwNDE1NDkyMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEFHRV9PV05FUlwiLFxuICAgIFwiTUlHUkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19mb2xpb19jb3B5X293bmVyXCIsXG4gICAgXCJmb2xpb19taWdyYXRlX2ZsYWdzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gbW0vcGFnZV9vd25lci5jIHdoZXJlIF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGUoKSBpZ25vcmVkIHRoZSBwYXNzZWQgcGlkIGFuZCB0Z2lkIGFyZ3VtZW50cyBhbmQgaW5zdGVhZCB1c2VkIGN1cnJlbnQtXFx1MDAzZXBpZCBhbmQgY3VycmVudC1cXHUwMDNldGdpZC4gVGhpcyBkaXJlY3RseSBhZmZlY3RzIGZvbGlvIG1pZ3JhdGlvbiBpbiBfX2ZvbGlvX2NvcHlfb3duZXIoKSwgd2hlcmUgdGhlIG9yaWdpbmFsIG93bmVyJ3MgZnJlZV9waWQgYW5kIGZyZWVfdGdpZCBuZWVkIHRvIGJlIHByZXNlcnZlZC4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgdHJhY2tpbmcgbG9naWMgaW4gY29yZSBtbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2ZDEyYzgyNDY1NmM5YjgzN2MyODI0MzhjZWUyM2ZjZWRmNWU4ZTBjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxMzo1MzozMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3BhZ2Vfb3duZXIuYyBiL21tL3BhZ2Vfb3duZXIuY1xuaW5kZXggM2ZjMzdkOWI5MDhlZi4uY2ZjMzFjOTJkNzY1NyAxMDA2NDRcbi0tLSBhL21tL3BhZ2Vfb3duZXIuY1xuKysrIGIvbW0vcGFnZV9vd25lci5jXG5AQCAtMzA3LDggKzMwNyw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlKHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0XHRcdHBhZ2Vfb3duZXItXHUwMDNlZnJlZV9oYW5kbGUgPSBoYW5kbGU7XG4gXHRcdH1cbiBcdFx0cGFnZV9vd25lci1cdTAwM2VmcmVlX3RzX25zZWMgPSBmcmVlX3RzX25zZWM7XG4tXHRcdHBhZ2Vfb3duZXItXHUwMDNlZnJlZV9waWQgPSBjdXJyZW50LVx1MDAzZXBpZDtcbi1cdFx0cGFnZV9vd25lci1cdTAwM2VmcmVlX3RnaWQgPSBjdXJyZW50LVx1MDAzZXRnaWQ7XG4rXHRcdHBhZ2Vfb3duZXItXHUwMDNlZnJlZV9waWQgPSBwaWQ7XG4rXHRcdHBhZ2Vfb3duZXItXHUwMDNlZnJlZV90Z2lkID0gdGdpZDtcbiBcdH1cbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEzOjUzOjMzLjI5NTkyOTAxMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzMjM4NDcyNTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IGBtbS9wYWdlX293bmVyLmNgKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBtb2RpZmllZCBmaWxlLCB3aGljaCBpcyBgbW0vcGFnZV9vd25lci5jYC4gR2l2ZW4gdGhhdCBJJ20gZGVhbGluZyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LCB0aGlzIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGNoYW5nZXMsIHNvIG15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjb2RlIGFyb3VuZCBsaW5lIDMwNy4gSSdsbCBsaWtlbHkgdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBxdWlja2x5IGlzb2xhdGUgdGhlIHJlbGV2YW50IHNlY3Rpb24gb2YgdGhlIGNvZGUgYW5kIGdldCBhIGNsZWFyZXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0IHRoZSBwYXRjaCBpcyBkb2luZyBhbmQgaG93IGl0IGNvdWxkIHBvdGVudGlhbGx5IGltcGFjdCB0aGUgc3lzdGVtLiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyB0aGUgY29udGV4dCwgYW5kIHdoYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZG9lcyB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODg1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMzo1NDoxNi41MzQ0MDUxNjJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX293bmVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjkwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjkwOlxcdFxcbiAyOTE6XFx0c3RhdGljIGlubGluZSB2b2lkIF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGUoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuIDI5MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGUsXFxuIDI5MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBzaG9ydCBvcmRlcixcXG4gMjk0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIHBpZF90IHBpZCwgcGlkX3QgdGdpZCxcXG4gMjk1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIHU2NCBmcmVlX3RzX25zZWMpXFxuIDI5NjpcXHR7XFxuIDI5NzpcXHRcXHRzdHJ1Y3QgcGFnZV9leHRfaXRlciBpdGVyO1xcbiAyOTg6XFx0XFx0c3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dDtcXG4gMjk5OlxcdFxcdHN0cnVjdCBwYWdlX293bmVyICpwYWdlX293bmVyO1xcbiAzMDA6XFx0XFxuIDMwMTpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDMwMjpcXHRcXHRmb3JfZWFjaF9wYWdlX2V4dChwYWdlLCAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyLCBwYWdlX2V4dCwgaXRlcikge1xcbiAzMDM6XFx0XFx0XFx0cGFnZV9vd25lciA9IGdldF9wYWdlX293bmVyKHBhZ2VfZXh0KTtcXG4gMzA0OlxcdFxcdFxcdC8qIE9ubHkgX19yZXNldF9wYWdlX293bmVyKCkgd2FudHMgdG8gY2xlYXIgdGhlIGJpdCAqL1xcbiAzMDU6XFx0XFx0XFx0aWYgKGhhbmRsZSkge1xcbiAzMDY6XFx0XFx0XFx0XFx0X19jbGVhcl9iaXQoUEFHRV9FWFRfT1dORVJfQUxMT0NBVEVELCBcXHUwMDI2cGFnZV9leHQtXFx1MDAzZWZsYWdzKTtcXG4gMzA3OlxcdFxcdFxcdFxcdHBhZ2Vfb3duZXItXFx1MDAzZWZyZWVfaGFuZGxlID0gaGFuZGxlO1xcbiAzMDg6XFx0XFx0XFx0fVxcbiAzMDk6XFx0XFx0XFx0cGFnZV9vd25lci1cXHUwMDNlZnJlZV90c19uc2VjID0gZnJlZV90c19uc2VjO1xcbiAzMTA6XFx0XFx0XFx0cGFnZV9vd25lci1cXHUwMDNlZnJlZV9waWQgPSBwaWQ7XFxuIDMxMTpcXHRcXHRcXHRwYWdlX293bmVyLVxcdTAwM2VmcmVlX3RnaWQgPSB0Z2lkO1xcbiAzMTI6XFx0XFx0fVxcbiAzMTM6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDMxNDpcXHR9XFxuIDMxNTpcXHRcXG4gMzE2OlxcdHZvaWQgX19yZXNldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBzaG9ydCBvcmRlcilcXG4gMzE3OlxcdHtcXG4gMzE4OlxcdFxcdHN0cnVjdCBwYWdlX2V4dCAqcGFnZV9leHQ7XFxuIDMxOTpcXHRcXHRkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGU7XFxuIDMyMDpcXHRcXHRkZXBvdF9zdGFja19oYW5kbGVfdCBhbGxvY19oYW5kbGU7XFxuIDMyMTpcXHRcXHRzdHJ1Y3QgcGFnZV9vd25lciAqcGFnZV9vd25lcjtcXG4gMzIyOlxcdFxcdHU2NCBmcmVlX3RzX25zZWMgPSBsb2NhbF9jbG9jaygpO1xcbiAzMjM6XFx0XFxuIDMyNDpcXHRcXHRwYWdlX2V4dCA9IHBhZ2VfZXh0X2dldChwYWdlKTtcXG4gMzI1OlxcdFxcdGlmICh1bmxpa2VseSghcGFnZV9leHQpKVxcbiAzMjY6XFx0XFx0XFx0cmV0dXJuO1xcbiAzMjc6XFx0XFxuIDMyODpcXHRcXHRwYWdlX293bmVyID0gZ2V0X3BhZ2Vfb3duZXIocGFnZV9leHQpO1xcbiAzMjk6XFx0XFx0YWxsb2NfaGFuZGxlID0gcGFnZV9vd25lci1cXHUwMDNlaGFuZGxlO1xcbiAzMzA6XFx0XFx0cGFnZV9leHRfcHV0KHBhZ2VfZXh0KTtcXG4gMzMxOlxcdFxcbiAzMzI6XFx0XFx0LypcXG4gMzMzOlxcdFxcdCAqIERvIG5vdCBzcGVjaWZ5IEdGUF9OT1dBSVQgdG8gbWFrZSBnZnBmbGFnc19hbGxvd19zcGlubmluZygpID09IGZhbHNlXFxuIDMzNDpcXHRcXHQgKiB0byBwcmV2ZW50IGlzc3VlcyBpbiBzdGFja19kZXBvdF9zYXZlKCkuXFxuIDMzNTpcXHRcXHQgKiBUaGlzIGlzIHNpbWlsYXIgdG8gYWxsb2NfcGFnZXNfbm9sb2NrKCkgZ2ZwIGZsYWdzLCBidXQgb25seSB1c2VkXFxuIDMzNjpcXHRcXHQgKiB0byBzaWduYWwgc3RhY2tfZGVwb3QgdG8gYXZvaWQgc3Bpbl9sb2Nrcy5cXG4gMzM3OlxcdFxcdCAqL1xcbiAzMzg6XFx0XFx0aGFuZGxlID0gc2F2ZV9zdGFjayhfX0dGUF9OT1dBUk4pO1xcbiAzMzk6XFx0XFx0X191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZShwYWdlLCBoYW5kbGUsIG9yZGVyLCBjdXJyZW50LVxcdTAwM2VwaWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEzOjU0OjE2LjUzNDUwNjI1MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk3ODczODkxOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIGFyZSBteSBpbW1lZGlhdGUgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlYCBDYWxsZXJzKipcblxuQWxyaWdodCwgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyB0aG9yb3VnaGx5IGludmVzdGlnYXRlIHRoZSBjYWxsZXJzIG9mIGBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlYC4gVGhpcyB1c3VhbGx5IGluZGljYXRlcyBhIGNyaXRpY2FsIGFyZWEgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbSwgc28gYW55IGNoYW5nZXMgb3IgaXNzdWVzIGhlcmUgYXJlIGxpa2VseSB0byBoYXZlIGEgY2FzY2FkaW5nIGVmZmVjdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQg4oCTIHdoYXQncyB0aGUgaW50ZW5kZWQgcHVycG9zZSwgd2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGludm9sdmVkLCBhbmQgd2hhdCdzIHRoZSB0eXBpY2FsIHdvcmtmbG93IHN1cnJvdW5kaW5nIGl0PyBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoZSBhcmd1bWVudHMgYmVpbmcgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbiwgYXMgdGhhdCdsbCBnaXZlIG1lIGNsdWVzIGFib3V0IHRoZSBzcGVjaWZpYyBjb250ZXh0IGluIHdoaWNoIGl0IG9wZXJhdGVzLiBJcyBpdCBkZWFsaW5nIHdpdGggcGFnZSBmcmVlaW5nPyBQYWdlIGFsbG9jYXRpb24gdHJhY2tpbmc/IFNvbWV0aGluZyBlbHNlIGVudGlyZWx5P1xuXG5PbmNlIEkgaGF2ZSBhIGZpcm0gZ3Jhc3Agb24gdGhlIGNhbGxlcnMgdGhlbXNlbHZlcywgSSdsbCB0aGVuIGV4cGFuZCBteSBmb2N1cyB0byBlbmNvbXBhc3MgdGhlIFwic3Vycm91bmRpbmcgY29kZS5cIiBJIGNhbid0IGp1c3QgbG9vayBhdCB0aGUgZGlyZWN0IGNhbGxzOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGNvbnRleHQgb2YgKmhvdyogdGhlc2UgY2FsbHMgZml0IGludG8gdGhlIGdyZWF0ZXIgc2NoZW1lIG9mIG1lbW9yeSBtYW5hZ2VtZW50LiBXaGF0IG9wZXJhdGlvbnMgY29tZSBiZWZvcmUgdGhlIGNhbGwsIGFuZCB3aGF0IG9wZXJhdGlvbnMgaGFwcGVuIGltbWVkaWF0ZWx5IGFmdGVyd2FyZHM/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgbG9ja2luZyBpc3N1ZXMsIG9yIHN1YnRsZSBkZXBlbmRlbmNpZXMgdGhhdCBjb3VsZCBiZSBwcm9ibGVtYXRpYz8gV2hhdCdzIHRoZSBlcnJvciBoYW5kbGluZyBsaWtlIGluIHRoaXMgc2VjdGlvbj8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgZXhlY3V0aW9uIHBhdGggdGhhdCBsZWFkcyB0byB0aGlzIGZ1bmN0aW9uIGNhbGw/IEFuZCB3aGF0IGFzc3VtcHRpb25zIGFyZSBiZWluZyBtYWRlIGFib3V0IHRoZSBzdGF0ZSBvZiB0aGUgc3lzdGVtIGF0IHRoYXQgcG9pbnQ/IFRoZSBkZXZpbCBpcyBhbHdheXMgaW4gdGhlIGRldGFpbHMsIHNvIEkgbmVlZCB0byBrbm93IHRoaXMgaW5zaWRlIGFuZCBvdXQuIEl0J3MgdGltZSB0byBkaWcgZGVlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk0NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTM6NTQ6MjYuMzIxODk3NjkyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzODQ5MzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2Vfb3duZXIuYz0yNjI9c3RhdGljIGlubGluZSB2b2lkIF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0vcGFnZV9vd25lci5jLTI5MC1cXG5tbS9wYWdlX293bmVyLmM6MjkxOnN0YXRpYyBpbmxpbmUgdm9pZCBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlKHN0cnVjdCBwYWdlICpwYWdlLFxcbm1tL3BhZ2Vfb3duZXIuYy0yOTItXFx0XFx0XFx0XFx0XFx0XFx0ICAgZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlLFxcbi0tXFxubW0vcGFnZV9vd25lci5jPTMxNj12b2lkIF9fcmVzZXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgc2hvcnQgb3JkZXIpXFxuLS1cXG5tbS9wYWdlX293bmVyLmMtMzM4LVxcdGhhbmRsZSA9IHNhdmVfc3RhY2soX19HRlBfTk9XQVJOKTtcXG5tbS9wYWdlX293bmVyLmM6MzM5OlxcdF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGUocGFnZSwgaGFuZGxlLCBvcmRlciwgY3VycmVudC1cXHUwMDNlcGlkLFxcbm1tL3BhZ2Vfb3duZXIuYy0zNDAtXFx0XFx0XFx0XFx0XFx0Y3VycmVudC1cXHUwMDNldGdpZCwgZnJlZV90c19uc2VjKTtcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYz0zOTM9dm9pZCBfX2ZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpXFxuLS1cXG5tbS9wYWdlX293bmVyLmMtNDI1LVxcdCAqL1xcbm1tL3BhZ2Vfb3duZXIuYzo0MjY6XFx0X191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZShcXHUwMDI2bmV3Zm9saW8tXFx1MDAzZXBhZ2UsIDAsIG9sZF9wYWdlX293bmVyLVxcdTAwM2VvcmRlcixcXG5tbS9wYWdlX293bmVyLmMtNDI3LVxcdFxcdFxcdFxcdFxcdG9sZF9wYWdlX293bmVyLVxcdTAwM2VmcmVlX3BpZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTM6NTQ6MjYuMzc1NzUzOTZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NTQ4MDg5NTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIGBwYWdlX293bmVyLmNgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBwYWdlIG93bmVyc2hpcCBpcyB0cmFja2VkIGluIHRoaXMgc3lzdGVtLCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIGBtbS9wYWdlX293bmVyLmNgIGZpbGUuIFNwZWNpZmljYWxseSwgSSdtIHplcm9pbmcgaW4gb24gdGhlIGBfX2ZvbGlvX2NvcHlfb3duZXJgIGZ1bmN0aW9uLiBUaGUgbmFtaW5nIHN1Z2dlc3RzIHRoaXMgaXMga2V5IHRvIGhvdyBvd25lcnNoaXAgaXMgdHJhbnNmZXJyZWQgb3IgY29waWVkLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSdtIGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZy4gVG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIEknbSBnb2luZyB0byBjYXJlZnVsbHkgcmVhZCBsaW5lcyAzODAgdGhyb3VnaCA0NTAuIFRob3NlIGxpbmVzIHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIGxvZ2ljIHN1cnJvdW5kaW5nIHRoZSBjb3B5IG9wZXJhdGlvbnMgYW5kIGhvdyBvd25lcnNoaXAgaXMgaGFuZGxlZCBkdXJpbmcgdGhhdCBwcm9jZXNzLiBMZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IGdvaW5nIG9uIGluIHRoYXQgc2VjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY5MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEzOjU0OjMzLjkyMzg0NzA2NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX293bmVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzgwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzgwOlxcdHtcXG4gMzgxOlxcdFxcdHN0cnVjdCBwYWdlX2V4dF9pdGVyIGl0ZXI7XFxuIDM4MjpcXHRcXHRzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0O1xcbiAzODM6XFx0XFx0c3RydWN0IHBhZ2Vfb3duZXIgKnBhZ2Vfb3duZXI7XFxuIDM4NDpcXHRcXG4gMzg1OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gMzg2OlxcdFxcdGZvcl9lYWNoX3BhZ2VfZXh0KHBhZ2UsIDEgXFx1MDAzY1xcdTAwM2Mgb2xkX29yZGVyLCBwYWdlX2V4dCwgaXRlcikge1xcbiAzODc6XFx0XFx0XFx0cGFnZV9vd25lciA9IGdldF9wYWdlX293bmVyKHBhZ2VfZXh0KTtcXG4gMzg4OlxcdFxcdFxcdHBhZ2Vfb3duZXItXFx1MDAzZW9yZGVyID0gbmV3X29yZGVyO1xcbiAzODk6XFx0XFx0fVxcbiAzOTA6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDM5MTpcXHR9XFxuIDM5MjpcXHRcXG4gMzkzOlxcdHZvaWQgX19mb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKVxcbiAzOTQ6XFx0e1xcbiAzOTU6XFx0XFx0c3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dDtcXG4gMzk2OlxcdFxcdHN0cnVjdCBwYWdlX2V4dF9pdGVyIGl0ZXI7XFxuIDM5NzpcXHRcXHRzdHJ1Y3QgcGFnZV9vd25lciAqb2xkX3BhZ2Vfb3duZXI7XFxuIDM5ODpcXHRcXHRzdHJ1Y3QgcGFnZV9vd25lciAqbmV3X3BhZ2Vfb3duZXI7XFxuIDM5OTpcXHRcXHRkZXBvdF9zdGFja19oYW5kbGVfdCBtaWdyYXRlX2hhbmRsZTtcXG4gNDAwOlxcdFxcbiA0MDE6XFx0XFx0cGFnZV9leHQgPSBwYWdlX2V4dF9nZXQoXFx1MDAyNm9sZC1cXHUwMDNlcGFnZSk7XFxuIDQwMjpcXHRcXHRpZiAodW5saWtlbHkoIXBhZ2VfZXh0KSlcXG4gNDAzOlxcdFxcdFxcdHJldHVybjtcXG4gNDA0OlxcdFxcbiA0MDU6XFx0XFx0b2xkX3BhZ2Vfb3duZXIgPSBnZXRfcGFnZV9vd25lcihwYWdlX2V4dCk7XFxuIDQwNjpcXHRcXHRwYWdlX2V4dF9wdXQocGFnZV9leHQpO1xcbiA0MDc6XFx0XFxuIDQwODpcXHRcXHRwYWdlX2V4dCA9IHBhZ2VfZXh0X2dldChcXHUwMDI2bmV3Zm9saW8tXFx1MDAzZXBhZ2UpO1xcbiA0MDk6XFx0XFx0aWYgKHVubGlrZWx5KCFwYWdlX2V4dCkpXFxuIDQxMDpcXHRcXHRcXHRyZXR1cm47XFxuIDQxMTpcXHRcXG4gNDEyOlxcdFxcdG5ld19wYWdlX293bmVyID0gZ2V0X3BhZ2Vfb3duZXIocGFnZV9leHQpO1xcbiA0MTM6XFx0XFx0cGFnZV9leHRfcHV0KHBhZ2VfZXh0KTtcXG4gNDE0OlxcdFxcbiA0MTU6XFx0XFx0bWlncmF0ZV9oYW5kbGUgPSBuZXdfcGFnZV9vd25lci1cXHUwMDNlaGFuZGxlO1xcbiA0MTY6XFx0XFx0X191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUoXFx1MDAyNm5ld2ZvbGlvLVxcdTAwM2VwYWdlLCBvbGRfcGFnZV9vd25lci1cXHUwMDNlaGFuZGxlLFxcbiA0MTc6XFx0XFx0XFx0XFx0XFx0ICAgb2xkX3BhZ2Vfb3duZXItXFx1MDAzZW9yZGVyLCBvbGRfcGFnZV9vd25lci1cXHUwMDNlZ2ZwX21hc2ssXFxuIDQxODpcXHRcXHRcXHRcXHRcXHQgICBvbGRfcGFnZV9vd25lci1cXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbixcXG4gNDE5OlxcdFxcdFxcdFxcdFxcdCAgIG9sZF9wYWdlX293bmVyLVxcdTAwM2V0c19uc2VjLCBvbGRfcGFnZV9vd25lci1cXHUwMDNlcGlkLFxcbiA0MjA6XFx0XFx0XFx0XFx0XFx0ICAgb2xkX3BhZ2Vfb3duZXItXFx1MDAzZXRnaWQsIG9sZF9wYWdlX293bmVyLVxcdTAwM2Vjb21tKTtcXG4gNDIxOlxcdFxcdC8qXFxuIDQyMjpcXHRcXHQgKiBEbyBub3QgcHJvYWN0aXZlbHkgY2xlYXIgUEFHRV9FWFRfT1dORVJ7X0FMTE9DQVRFRH0gYml0cyBhcyB0aGUgZm9saW9cXG4gNDIzOlxcdFxcdCAqIHdpbGwgYmUgZnJlZWQgYWZ0ZXIgbWlncmF0aW9uLiBLZWVwIHRoZW0gdW50aWwgdGhlbiBhcyB0aGV5IG1heSBiZVxcbiA0MjQ6XFx0XFx0ICogdXNlZnVsLlxcbiA0MjU6XFx0XFx0ICovXFxuIDQyNjpcXHRcXHRfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlKFxcdTAwMjZuZXdmb2xpby1cXHUwMDNlcGFnZSwgMCwgb2xkX3BhZ2Vfb3duZXItXFx1MDAzZW9yZGVyLFxcbiA0Mjc6XFx0XFx0XFx0XFx0XFx0XFx0b2xkX3BhZ2Vfb3duZXItXFx1MDAzZWZyZWVfcGlkLFxcbiA0Mjg6XFx0XFx0XFx0XFx0XFx0XFx0b2xkX3BhZ2Vfb3duZXItXFx1MDAzZWZyZWVfdGdpZCxcXG4gNDI5OlxcdFxcdFxcdFxcdFxcdFxcdG9sZF9wYWdlX293bmVyLVxcdTAwM2VmcmVlX3RzX25zZWMpO1xcbiA0MzA6XFx0XFx0LypcXG4gNDMxOlxcdFxcdCAqIFdlIGxpbmtlZCB0aGUgb3JpZ2luYWwgc3RhY2sgdG8gdGhlIG5ldyBmb2xpbywgd2UgbmVlZCB0byBkbyB0aGUgc2FtZVxcbiA0MzI6XFx0XFx0ICogZm9yIHRoZSBuZXcgb25lIGFuZCB0aGUgb2xkIGZvbGlvIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGFuIGltYmFsYW5jZVxcbiA0MzM6XFx0XFx0ICogd2hlbiBzdWJ0cmFjdGluZyB0aG9zZSBwYWdlcyBmcm9tIHRoZSBzdGFjay5cXG4gNDM0OlxcdFxcdCAqL1xcbiA0MzU6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiA0MzY6XFx0XFx0Zm9yX2VhY2hfcGFnZV9leHQoXFx1MDAyNm9sZC1cXHUwMDNlcGFnZSwgMSBcXHUwMDNjXFx1MDAzYyBuZXdfcGFnZV9vd25lci1cXHUwMDNlb3JkZXIsIHBhZ2VfZXh0LCBpdGVyKSB7XFxuIDQzNzpcXHRcXHRcXHRvbGRfcGFnZV9vd25lciA9IGdldF9wYWdlX293bmVyKHBhZ2VfZXh0KTtcXG4gNDM4OlxcdFxcdFxcdG9sZF9wYWdlX293bmVyLVxcdTAwM2VoYW5kbGUgPSBtaWdyYXRlX2hhbmRsZTtcXG4gNDM5OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTM6NTQ6MzMuOTIzOTU1NzY1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDEwMDYxODYxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgUGFnZSBPd25lciBCdWcgYW5kIGl0cyBGaXgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IHRoZSBgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZWAgZnVuY3Rpb24gYW5kIGl0cyBwYXJhbWV0ZXJzOiBgcGFnZWAsIGBoYW5kbGVgLCBgb3JkZXJgLCBgcGlkYCwgYHRnaWRgLCBhbmQgYGZyZWVfdHNfbnNlY2AuIFRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBpcyB0aGF0IGluc2lkZSB0aGlzIGZ1bmN0aW9uLCBpdCdzIHVwZGF0aW5nIHRoZSBgcGFnZV9vd25lcmAgc3RydWN0IHdpdGggYGN1cnJlbnQtXHUwMDNlcGlkYCBhbmQgYGN1cnJlbnQtXHUwMDNldGdpZGAgaW5zdGVhZCBvZiB1c2luZyB0aGUgYHBpZGAgYW5kIGB0Z2lkYCB2YWx1ZXMgdGhhdCB3ZXJlIHBhc3NlZCBpbi4gVGhpcyBpcyBhIGNsYXNzaWMgYnVnOiB0aGUgZnVuY3Rpb24ncyBjb250cmFjdCBpc24ndCBiZWluZyB1cGhlbGQuIEl0IHNob3VsZCBiZSB1c2luZyB0aGUgcHJvdmlkZWQgaWRlbnRpZmllcnMsIGJ1dCBpdCdzIGluYWR2ZXJ0ZW50bHkgcmVwbGFjaW5nIHRoZW0gd2l0aCB0aGUgY2FsbGVyJ3MgcHJvY2VzcyBhbmQgdGhyZWFkIElEcy5cblxuRGlnZ2luZyBmdXJ0aGVyLCBJIHNlZSB0aGF0IGBfX2ZvbGlvX2NvcHlfb3duZXJgIGNhbGxzIGBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlYC4gU3BlY2lmaWNhbGx5LCBpdCBjYWxscyB0aGlzIGZ1bmN0aW9uIHdpdGggdGhlIHZhbHVlcyBgb2xkX3BhZ2Vfb3duZXItXHUwMDNlZnJlZV9waWRgIGFuZCBgb2xkX3BhZ2Vfb3duZXItXHUwMDNlZnJlZV90Z2lkYC4gQmVjYXVzZSBvZiB0aGUgb3JpZ2luYWwgYnVnLCBpdCBzaG91bGQgaGF2ZSBiZWVuIHBhc3NpbmcgYW5kIHJlY2VpdmluZyB0aG9zZSB2YWx1ZXMsIGJ1dCBpbnN0ZWFkLCBpdCdzIGFzc2lnbmluZyBgY3VycmVudC1cdTAwM2VwaWRgIGFuZCBgY3VycmVudC1cdTAwM2V0Z2lkYCBpbiB0aGUgYF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGVgIGZ1bmN0aW9uLiBUaGF0IG1lYW5zIGFueSBvd25lciBpbmZvcm1hdGlvbiBmcm9tIGFuIG9sZCBwYWdlIGlzIG5vdyBiZWluZyBvdmVyd3JpdHRlbiB3aGVuIHRoZSBwYWdlIGlzIGJlaW5nIGNvcGllZC4gVGhhdCdzIGEgc2VyaW91cyBwb3RlbnRpYWwgbGVhayBvciBtaXNhdHRyaWJ1dGlvbiBpc3N1ZSwgZGVwZW5kaW5nIG9uIGhvdyB0aGlzIGRhdGEgaXMgdXNlZCBkb3duc3RyZWFtLlxuXG5UaGUgcHJvcG9zZWQgcGF0Y2ggaXMgc3RyYWlnaHRmb3J3YXJkIGFuZCBleGFjdGx5IHdoYXQncyBuZWVkZWQuIEl0IGNvcnJlY3RzIHRoZSBjb2RlIHRvIHNldCBgcGFnZV9vd25lci1cdTAwM2VmcmVlX3BpZCA9IHBpZDsgcGFnZV9vd25lci1cdTAwM2VmcmVlX3RnaWQgPSB0Z2lkO2AsIGVuc3VyaW5nIHRoYXQgdGhlIHBhc3NlZC1pbiB2YWx1ZXMgYXJlIGFjdHVhbGx5IHVzZWQuXG5cbk5vdywgbGV0IG1lIGNoZWNrIHRoZSBLY29uZmlnIGFuZCBzZWUgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSBmb3Igc3lzdGVtcyB3aGVyZSBgcGFnZV9vd25lcmAgaXMgZW5hYmxlZCwgYW5kIGlmIHRoaXMgY291bGQgYXBwbHkgdG8gb3VyIGtlcm5lbCBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTU1LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTM6NTQ6MzguMDI0NTc2MzIzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDAwMjM0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJQQUdFX09XTkVSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnLmRlYnVnPTExPWNvbmZpZyBERUJVR19QQUdFQUxMT0NcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMjUtXFx0ICB3aXRoIHN0YWNrIHRyYWNlcyBvZiBsYXN0IGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgb2YgdGhlIHBhZ2UsIHdoZW5cXG5tbS9LY29uZmlnLmRlYnVnOjI2OlxcdCAgUEFHRV9PV05FUiBpcyBhbHNvIHNlbGVjdGVkIGFuZCBlbmFibGVkIG9uIGJvb3QuXFxubW0vS2NvbmZpZy5kZWJ1Zy0yNy1cXG4tLVxcbm1tL0tjb25maWcuZGVidWc9NzM9Y29uZmlnIFNMVUJfUkNVX0RFQlVHXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnLTEwNC1cXG5tbS9LY29uZmlnLmRlYnVnOjEwNTpjb25maWcgUEFHRV9PV05FUlxcbm1tL0tjb25maWcuZGVidWctMTA2LVxcdGJvb2wgXFxcIlRyYWNrIHBhZ2Ugb3duZXJcXFwiXFxuLS1cXG5tbS9NYWtlZmlsZT0xMTc9b2JqLSQoQ09ORklHX0RFQlVHX1ZNX1BHVEFCTEUpICs9IGRlYnVnX3ZtX3BndGFibGUub1xcbm1tL01ha2VmaWxlOjExODpvYmotJChDT05GSUdfUEFHRV9PV05FUikgKz0gcGFnZV9vd25lci5vXFxubW0vTWFrZWZpbGUtMTE5LW9iai0kKENPTkZJR19NRU1PUllfSVNPTEFUSU9OKSArPSBwYWdlX2lzb2xhdGlvbi5vXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTE0Mj11bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTE3Ny1cXG5tbS9wYWdlX2FsbG9jLmM6NTE3ODojaWZkZWYgQ09ORklHX1BBR0VfT1dORVJcXG5tbS9wYWdlX2FsbG9jLmMtNTE3OS1cXHQvKlxcbm1tL3BhZ2VfYWxsb2MuYzo1MTgwOlxcdCAqIFBBR0VfT1dORVIgbWF5IHJlY3Vyc2UgaW50byB0aGUgYWxsb2NhdG9yIHRvIGFsbG9jYXRlIHNwYWNlIHRvXFxubW0vcGFnZV9hbGxvYy5jLTUxODEtXFx0ICogc2F2ZSB0aGUgc3RhY2sgd2l0aCBwYWdlc2V0cy5sb2NrIGhlbGQuIFJlbGVhc2luZy9yZWFjcXVpcmluZ1xcbi0tXFxubW0vcGFnZV9leHQuYz04MD1zdGF0aWMgc3RydWN0IHBhZ2VfZXh0X29wZXJhdGlvbnMgKnBhZ2VfZXh0X29wc1tdIF9faW5pdGRhdGEgPSB7XFxubW0vcGFnZV9leHQuYzo4MTojaWZkZWYgQ09ORklHX1BBR0VfT1dORVJcXG5tbS9wYWdlX2V4dC5jLTgyLVxcdFxcdTAwMjZwYWdlX293bmVyX29wcyxcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYy0xOC0vKlxcbm1tL3BhZ2Vfb3duZXIuYzoxOTogKiBUT0RPOiB0ZWFjaCBQQUdFX09XTkVSX1NUQUNLX0RFUFRIIChfX2R1bXBfcGFnZV9vd25lciBhbmQgc2F2ZV9zdGFjaylcXG5tbS9wYWdlX293bmVyLmMtMjAtICogdG8gdXNlIG9mZiBzdGFjayB0ZW1wb3JhbCBzdG9yYWdlXFxubW0vcGFnZV9vd25lci5jLTIxLSAqL1xcbm1tL3BhZ2Vfb3duZXIuYzoyMjojZGVmaW5lIFBBR0VfT1dORVJfU1RBQ0tfREVQVEggKDE2KVxcbm1tL3BhZ2Vfb3duZXIuYy0yMy1cXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYz01Nz1lbnVtIHBhZ2Vfb3duZXJfcHJpbnRfbW9kZSB7XFxubW0vcGFnZV9vd25lci5jOjU4OlxcdFBBR0VfT1dORVJfUFJJTlRfU1RBQ0ssXFxubW0vcGFnZV9vd25lci5jOjU5OlxcdFBBR0VfT1dORVJfUFJJTlRfSEFORExFLFxcbm1tL3BhZ2Vfb3duZXIuYzo2MDpcXHRQQUdFX09XTkVSX1BSSU5UX1NUQUNLX0hBTkRMRSxcXG5tbS9wYWdlX293bmVyLmMtNjEtfTtcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYz02Mz1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBhZ2Vfb3duZXJfcHJpbnRfbW9kZV9zdHJpbmdzW10gPSB7XFxubW0vcGFnZV9vd25lci5jOjY0OlxcdFtQQUdFX09XTkVSX1BSSU5UX1NUQUNLXVxcdD0gXFxcInN0YWNrXFxcIixcXG5tbS9wYWdlX293bmVyLmM6NjU6XFx0W1BBR0VfT1dORVJfUFJJTlRfSEFORExFXVxcdD0gXFxcImhhbmRsZVxcXCIsXFxubW0vcGFnZV9vd25lci5jOjY2OlxcdFtQQUdFX09XTkVSX1BSSU5UX1NUQUNLX0hBTkRMRV1cXHQ9IFxcXCJzdGFja19oYW5kbGVcXFwiLFxcbm1tL3BhZ2Vfb3duZXIuYy02Ny19O1xcbi0tXFxubW0vcGFnZV9vd25lci5jPTE3Mz1zdGF0aWMgbm9pbmxpbmUgZGVwb3Rfc3RhY2tfaGFuZGxlX3Qgc2F2ZV9zdGFjayhnZnBfdCBmbGFncylcXG5tbS9wYWdlX293bmVyLmMtMTc0LXtcXG5tbS9wYWdlX293bmVyLmM6MTc1OlxcdHVuc2lnbmVkIGxvbmcgZW50cmllc1tQQUdFX09XTkVSX1NUQUNLX0RFUFRIXTtcXG5tbS9wYWdlX293bmVyLmMtMTc2LVxcdGRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZTtcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYz02MDM9cHJpbnRfcGFnZV9vd25lcihjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIHVuc2lnbmVkIGxvbmcgcGZuLFxcbi0tXFxubW0vcGFnZV9vd25lci5jLTYzNi1cXG5tbS9wYWdlX293bmVyLmM6NjM3OlxcdGlmIChwcmludF9tb2RlICE9IFBBR0VfT1dORVJfUFJJTlRfSEFORExFKSB7XFxubW0vcGFnZV9vd25lci5jLTYzOC1cXHRcXHRyZXQgKz0gc3RhY2tfZGVwb3Rfc25wcmludChoYW5kbGUsIGtidWYgKyByZXQsIGNvdW50IC0gcmV0LCAwKTtcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYy02NDItXFxubW0vcGFnZV9vd25lci5jOjY0MzpcXHRpZiAocHJpbnRfbW9kZSAhPSBQQUdFX09XTkVSX1BSSU5UX1NUQUNLKSB7XFxubW0vcGFnZV9vd25lci5jLTY0NC1cXHRcXHRyZXQgKz0gc2NucHJpbnRmKGtidWYgKyByZXQsIGNvdW50IC0gcmV0LCBcXFwiaGFuZGxlOiAldVxcXFxuXFxcIixcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYz05MTk9c3RhdGljIGludCBwYWdlX293bmVyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5tbS9wYWdlX293bmVyLmMtOTI2LVxcbm1tL3BhZ2Vfb3duZXIuYzo5Mjc6XFx0c3RhdGUtXFx1MDAzZXByaW50X21vZGUgPSBQQUdFX09XTkVSX1BSSU5UX1NUQUNLO1xcbm1tL3BhZ2Vfb3duZXIuYy05MjgtXFx0bm9kZXNfY2xlYXIoc3RhdGUtXFx1MDAzZW5pZF9maWx0ZXIpO1xcbi0tXFxubW0vdm1zdGF0LmM9MTY4Mz1zdGF0aWMgdm9pZCBwYWdldHlwZWluZm9fc2hvd2Jsb2NrY291bnQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICphcmcpXFxuLS1cXG5tbS92bXN0YXQuYy0xNjk4LSAqIG9mIG90aGVyIHR5cGVzLiBUaGlzIGdpdmVzIGFuIGluZGljYXRpb24gb2YgaG93IHdlbGwgZmFsbGJhY2tzIGFyZSBiZWluZ1xcbm1tL3Ztc3RhdC5jOjE2OTk6ICogY29udGFpbmVkIGJ5IHJtcXVldWVfZmFsbGJhY2soKS4gSXQgcmVxdWlyZXMgaW5mb3JtYXRpb24gZnJvbSBQQUdFX09XTkVSXFxubW0vdm1zdGF0LmMtMTcwMC0gKiB0byBkZXRlcm1pbmUgd2hhdCBpcyBnb2luZyBvblxcbi0tXFxubW0vdm1zdGF0LmM9MTcwMj1zdGF0aWMgdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnQoc3RydWN0IHNlcV9maWxlICptLCBwZ19kYXRhX3QgKnBnZGF0KVxcbm1tL3Ztc3RhdC5jLTE3MDMte1xcbm1tL3Ztc3RhdC5jOjE3MDQ6I2lmZGVmIENPTkZJR19QQUdFX09XTkVSXFxubW0vdm1zdGF0LmMtMTcwNS1cXHRpbnQgbXR5cGU7XFxuLS1cXG5tbS92bXN0YXQuYy0xNzE4LVxcdFxcdHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludCk7XFxubW0vdm1zdGF0LmM6MTcxOTojZW5kaWYgLyogQ09ORklHX1BBR0VfT1dORVIgKi9cXG5tbS92bXN0YXQuYy0xNzIwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTM6NTQ6MzguMDc0NTgxNzExWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2MDEyMDExODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGVidWdnaW5nIEtjb25maWc6IEEgUXVpY2sgRGl2ZSoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB0cm91Ymxlc2hvb3Qgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGtlcm5lbCdzIEtjb25maWcgc3lzdGVtLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSB0eXBpY2FsIGxheW91dCwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIGBtbS9LY29uZmlnLmRlYnVnYC4gSXQncyBhIHByaW1lIGxvY2F0aW9uIGZvciBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIGRlYnVnZ2luZyBvcHRpb25zLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCBleGFtaW5pbmcgYXJvdW5kIGxpbmUgMTA1LiBUaGF0IHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBJJ20gaG9waW5nIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGxvZ2ljYWwgZmxvdyBvZiB0aGUgY29kZSBpbiB0aGF0IGFyZWEsIGFuZCBwaW5wb2ludCBhIHNwZWNpZmljIHZhcmlhYmxlIG9yIG9wdGlvbiB0aGF0IGNhbiBoZWxwIG1lIHRvIGRpYWdub3NlIHRoZSBpc3N1ZSBJJ20gZmFjaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjAzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTM6NTQ6MzkuNjc1Nzg1OTA0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWcuZGVidWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAwOlxcdFxcdCAgVGhpcyBpcyBkZXNpZ25lZCBhcyBhIGRlYnVnZ2luZyBmZWF0dXJlLCBub3QgYSBzZWN1cml0eSBmZWF0dXJlLlxcbiAxMDE6XFx0XFx0ICBPYmplY3RzIGFyZSBzb21ldGltZXMgcmVjeWNsZWQgd2l0aG91dCBSQ1UgZGVsYXkgdW5kZXIgbWVtb3J5IHByZXNzdXJlLlxcbiAxMDI6XFx0XFxuIDEwMzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDEwNDpcXHRcXG4gMTA1OlxcdGNvbmZpZyBQQUdFX09XTkVSXFxuIDEwNjpcXHRcXHRib29sIFxcXCJUcmFjayBwYWdlIG93bmVyXFxcIlxcbiAxMDc6XFx0XFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUwgXFx1MDAyNlxcdTAwMjYgU1RBQ0tUUkFDRV9TVVBQT1JUXFxuIDEwODpcXHRcXHRzZWxlY3QgREVCVUdfRlNcXG4gMTA5OlxcdFxcdHNlbGVjdCBTVEFDS1RSQUNFXFxuIDExMDpcXHRcXHRzZWxlY3QgU1RBQ0tERVBPVFxcbiAxMTE6XFx0XFx0c2VsZWN0IFBBR0VfRVhURU5TSU9OXFxuIDExMjpcXHRcXHRoZWxwXFxuIDExMzpcXHRcXHQgIFRoaXMga2VlcHMgdHJhY2sgb2Ygd2hhdCBjYWxsIGNoYWluIGlzIHRoZSBvd25lciBvZiBhIHBhZ2UsIG1heVxcbiAxMTQ6XFx0XFx0ICBoZWxwIHRvIGZpbmQgYmFyZSBhbGxvY19wYWdlKHMpIGxlYWtzLiBFdmVuIGlmIHlvdSBpbmNsdWRlIHRoaXNcXG4gMTE1OlxcdFxcdCAgZmVhdHVyZSBvbiB5b3VyIGJ1aWxkLCBpdCBpcyBkaXNhYmxlZCBpbiBkZWZhdWx0LiBZb3Ugc2hvdWxkIHBhc3NcXG4gMTE2OlxcdFxcdCAgXFxcInBhZ2Vfb3duZXI9b25cXFwiIHRvIGJvb3QgcGFyYW1ldGVyIGluIG9yZGVyIHRvIGVuYWJsZSBpdC4gRWF0c1xcbiAxMTc6XFx0XFx0ICBhIGZhaXIgYW1vdW50IG9mIG1lbW9yeSBpZiBlbmFibGVkLiBTZWUgdG9vbHMvbW0vcGFnZV9vd25lcl9zb3J0LmNcXG4gMTE4OlxcdFxcdCAgZm9yIHVzZXItc3BhY2UgaGVscGVyLlxcbiAxMTk6XFx0XFxuIDEyMDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDEyMTpcXHRcXG4gMTIyOlxcdGNvbmZpZyBQQUdFX1RBQkxFX0NIRUNLXFxuIDEyMzpcXHRcXHRib29sIFxcXCJDaGVjayBmb3IgaW52YWxpZCBtYXBwaW5ncyBpbiB1c2VyIHBhZ2UgdGFibGVzXFxcIlxcbiAxMjQ6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX1BBR0VfVEFCTEVfQ0hFQ0tcXG4gMTI1OlxcdFxcdGRlcGVuZHMgb24gRVhDTFVTSVZFX1NZU1RFTV9SQU1cXG4gMTI2OlxcdFxcdHNlbGVjdCBQQUdFX0VYVEVOU0lPTlxcbiAxMjc6XFx0XFx0aGVscFxcbiAxMjg6XFx0XFx0ICBDaGVjayB0aGF0IGFub255bW91cyBwYWdlIGlzIG5vdCBiZWluZyBtYXBwZWQgdHdpY2Ugd2l0aCByZWFkIHdyaXRlXFxuIDEyOTpcXHRcXHQgIHBlcm1pc3Npb25zLiBDaGVjayB0aGF0IGFub255bW91cyBhbmQgZmlsZSBwYWdlcyBhcmUgbm90IGJlaW5nXFxuIDEzMDpcXHRcXHQgIGVycm9uZW91c2x5IHNoYXJlZC4gU2luY2UgdGhlIGNoZWNraW5nIGlzIHBlcmZvcm1lZCBhdCB0aGUgdGltZVxcbiAxMzE6XFx0XFx0ICBlbnRyaWVzIGFyZSBhZGRlZCBhbmQgcmVtb3ZlZCB0byB1c2VyIHBhZ2UgdGFibGVzLCBsZWFraW5nLCBjb3JydXB0aW9uXFxuIDEzMjpcXHRcXHQgIGFuZCBkb3VibGUgbWFwcGluZyBwcm9ibGVtcyBhcmUgZGV0ZWN0ZWQgc3luY2hyb25vdXNseS5cXG4gMTMzOlxcdFxcbiAxMzQ6XFx0XFx0ICBJZiB1bnN1cmUgc2F5IFxcXCJuXFxcIi5cXG4gMTM1OlxcdFxcbiAxMzY6XFx0Y29uZmlnIFBBR0VfVEFCTEVfQ0hFQ0tfRU5GT1JDRURcXG4gMTM3OlxcdFxcdGJvb2wgXFxcIkVuZm9yY2UgdGhlIHBhZ2UgdGFibGUgY2hlY2tpbmcgYnkgZGVmYXVsdFxcXCJcXG4gMTM4OlxcdFxcdGRlcGVuZHMgb24gUEFHRV9UQUJMRV9DSEVDS1xcbiAxMzk6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMzo1NDozOS42NzU4NjM1NTRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njg5OTQyODc5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFBvdGVudGlhbDogQSBRdWljayBBc3Nlc3NtZW50KipcblxuQWxyaWdodCwgbGV0J3Mgc2VlIGlmIHRoaXMgcGF0Y2ggaXMgd29ydGggYSBkZWVwZXIgZGl2ZSBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGUgY2hhbmdlcyB0b3VjaCBjb2RlIHRoYXQncyBib3RoIHJlYWNoYWJsZSBhbmQgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcgZm9yIGZ1enppbmcuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknbGwgZmlsdGVyIGJ5IGEgZmV3IGtleSBjcml0ZXJpYTpcblxuRmlyc3QsIGlzIHRoZSBjb2RlIGxvY2F0ZWQgaW4gYSBjb3JlIHN1YnN5c3RlbT8gTG9va3MgbGlrZSBpdCdzIGluIGBtbS9gLCB3aGljaCBpcyBhIGRlZmluaXRlIHBvc2l0aXZlLiBHcmVhdCwgbWVtb3J5IG1hbmFnZW1lbnQgaXMgYWx3YXlzIGEgZ29vZCBhcmVhIHRvIHNjcnV0aW5pemUuIFNlY29uZGx5LCBJIG5lZWQgdG8gY2hlY2sgZm9yIHJlZmFjdG9yaW5nIG9yIGNvZGUgY2xlYW51cCwgZXNwZWNpYWxseSBpZiBpdCByZWxhdGVzIHRvIGRhdGEgc3RydWN0dXJlcywgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MgdGhhdCBhcmUgYWNjZXNzaWJsZS5cblxuVGhlIGNoYW5nZSBpdHNlbGYgaXMgd2l0aGluIGBtbS9wYWdlX293bmVyLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlYCBmdW5jdGlvbi4gTXkgZXhwZXJ0IGV5ZSBpbW1lZGlhdGVseSBub3RlcyBpdCdzIGNhbGxlZCBkdXJpbmcgcGFnZSBmcmVlaW5nIChgX19yZXNldF9wYWdlX293bmVyYCkgYW5kIGZvbGlvIG1pZ3JhdGlvbiAoYF9fZm9saW9fY29weV9vd25lcmApLiBOb3csIGlzIGBfX2ZvbGlvX2NvcHlfb3duZXJgIHJlYWNoYWJsZT8gWWVzLCBmb2xpbyBtaWdyYXRpb24gaXMgYSByZWd1bGFyIG9jY3VycmVuY2UgaW4gbWVtb3J5IG1hbmFnZW1lbnQuIEdvb2QuIEFuZCBgcGFnZV9vd25lcmAgaXRzZWxmIGlzIHJlYWNoYWJsZSwgYXNzdW1pbmcgYENPTkZJR19QQUdFX09XTkVSYCBpcyBlbmFibGVkLCB3aGljaCBpcyBsaWtlbHkuXG5cbkxldCdzIGNoZWNrIHRoZSBmdW5jdGlvbiBzaWduYXR1cmVzIGFuZCBmb2N1cyBzeW1ib2xzLCBzdGFydGluZyB3aXRoIGBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlYC4gU2luY2UgaXQncyBtYXJrZWQgYXMgYHN0YXRpYyBpbmxpbmVgIChvciBwb3NzaWJseSBqdXN0IGBzdGF0aWNgKSwgSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsZXJzOiBgX19mb2xpb19jb3B5X293bmVyYCBhbmQgYF9fcmVzZXRfcGFnZV9vd25lcmAuXG5cbkhvbGQgb24sIGxldCBtZSBxdWlja2x5IGNvbmZpcm0gdGhhdCBgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZWAgaXMgaW5kZWVkIGBzdGF0aWMgaW5saW5lYCwgdG8gYmUgc3VyZS4gQWxyaWdodCwgYHN0YXRpYyBpbmxpbmUgdm9pZCBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlKC4uLilgLiBDb25maXJtZWQuIEl0IGlzLCBzbyBpdCBzaG91bGQgYmUgaW5saW5lZC4gVGhpcyBtYWtlcyBgX19mb2xpb19jb3B5X293bmVyYCBhbmQgYF9fcmVzZXRfcGFnZV9vd25lcmAgcmVsZXZhbnQgYXMgcG90ZW50aWFsIGVudHJ5IHBvaW50cy5cblxuTm93LCBhIGNydWNpYWwgcXVlc3Rpb246IGlzIGBfX3Jlc2V0X3BhZ2Vfb3duZXJgIGEgY29tbW9uIGhvdC1wYXRoIGZ1bmN0aW9uPyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgd2hlcmUgaXQncyBjYWxsZWQgdG8gZXN0YWJsaXNoIGl0cyB1YmlxdWl0eS4gSSdsbCBjaGVjayBpdHMgY2FsbCBzaXRlcyB0byBkZXRlcm1pbmUgaXRzIGNvdmVyYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDEyLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTM6NTQ6NDYuNTc1Mjk5MjA1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTEyMjAzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZXNldF9wYWdlX293bmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9wYWdlX2FsbG9jLmM9MTI5OD1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19mcmVlX3BhZ2VzX3ByZXBhcmUoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtMTMzMy1cXHRcXHQvKiBEbyBub3QgbGV0IGh3cG9pc29uIHBhZ2VzIGhpdCBwY3BsaXN0cy9idWRkeSAqL1xcbm1tL3BhZ2VfYWxsb2MuYzoxMzM0OlxcdFxcdHJlc2V0X3BhZ2Vfb3duZXIocGFnZSwgb3JkZXIpO1xcbm1tL3BhZ2VfYWxsb2MuYy0xMzM1LVxcdFxcdHBhZ2VfdGFibGVfY2hlY2tfZnJlZShwYWdlLCBvcmRlcik7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtMTM5OS1cXHRwYWdlLVxcdTAwM2Vwcml2YXRlID0gMDtcXG5tbS9wYWdlX2FsbG9jLmM6MTQwMDpcXHRyZXNldF9wYWdlX293bmVyKHBhZ2UsIG9yZGVyKTtcXG5tbS9wYWdlX2FsbG9jLmMtMTQwMS1cXHRwYWdlX3RhYmxlX2NoZWNrX2ZyZWUocGFnZSwgb3JkZXIpO1xcbi0tXFxubW0vcGFnZV9vd25lci5jPTI5MT1zdGF0aWMgaW5saW5lIHZvaWQgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZShzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYy0zMDMtXFx0XFx0cGFnZV9vd25lciA9IGdldF9wYWdlX293bmVyKHBhZ2VfZXh0KTtcXG5tbS9wYWdlX293bmVyLmM6MzA0OlxcdFxcdC8qIE9ubHkgX19yZXNldF9wYWdlX293bmVyKCkgd2FudHMgdG8gY2xlYXIgdGhlIGJpdCAqL1xcbm1tL3BhZ2Vfb3duZXIuYy0zMDUtXFx0XFx0aWYgKGhhbmRsZSkge1xcbi0tXFxubW0vcGFnZV9vd25lci5jLTMxNS1cXG5tbS9wYWdlX293bmVyLmM6MzE2OnZvaWQgX19yZXNldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBzaG9ydCBvcmRlcilcXG5tbS9wYWdlX293bmVyLmMtMzE3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTM6NTQ6NDYuNjI0NDI2NjEzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNDU3NDA5OTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWUsIHdpdGggYSAqKmJvbGRlZCBoZWFkZXIqKiBhcyByZXF1ZXN0ZWQ6XG5cbioqUGFnZSBPd25lcnNoaXAgRGVlcCBEaXZlKipcblxuQWxyaWdodCwgc28gYHJlc2V0X3BhZ2Vfb3duZXJgIGlzIGdldHRpbmcgY2FsbGVkIHdpdGhpbiBgX19mcmVlX3BhZ2VzX3ByZXBhcmVgLiBUaGF0J3MgYSBwcmV0dHkgZnVuZGFtZW50YWwgcG9pbnQ7IGlmIEknbSB1bmRlcnN0YW5kaW5nIHRoaXMgY29ycmVjdGx5LCBpdCBtZWFucyB0aGF0IHRoZSBwYWdlIG93bmVyc2hpcCBpcyBnZXR0aW5nIGNsZWFyZWQgb3IgcmVzZXQgKmV2ZXJ5KiB0aW1lIGEgcGFnZSBpcyBmcmVlZC4gT2theSwgbWFrZXMgc2Vuc2UgaW4gcHJpbmNpcGxlIHRvIGF2b2lkIGFueSBsaW5nZXJpbmcgcmVmZXJlbmNlcy4gQnV0IHRoZW4gYSBmbGFnIGdvZXMgb2ZmIGluIG15IGhlYWQuIFdoYXQncyB0aGUgcmVsYXRpb25zaGlwIG9mIHRoaXMgd2l0aCBgX19mb2xpb19jb3B5X293bmVyYD8gSSdtIHRyeWluZyB0byB3cmFwIG15IGhlYWQgYXJvdW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG9yIGluY29ycmVjdCBvd25lcnNoaXAgdHJhbnNpdGlvbnMsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZW4gYW5kIHdoZXJlIHRoZSBvd25lcnNoaXAgaXMgY29waWVkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgYGZvbGlvX2NvcHlfb3duZXJgIGZ1bmN0aW9uIGl0c2VsZiBpcyBhY3R1YWxseSBpbnZva2VkLiBUaGF0J3MgdGhlIG1pc3NpbmcgcGllY2UgaGVyZS4gSSBjYW4gdW5kZXJzdGFuZCB0aGUgcmVzZXR0aW5nLCBidXQgd2l0aG91dCBrbm93aW5nIHRoZSBjb3B5aW5nLCBJJ20gbWlzc2luZyBjb250ZXh0IHRvIHRob3JvdWdobHkgYW5hbHl6ZSB0aGlzIHdob2xlIHByb2Nlc3MuIFdoZXJlIGFyZSB0aGUgY29weWluZyBvcGVyYXRpb25zP1xuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE5MSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEzOjU0OjU3LjA4MTgzOTAyNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgzMTE0NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9fY29weV9vd25lclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWlncmF0ZS5jPTc3NT12b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL21pZ3JhdGUuYy04NTgtXFxubW0vbWlncmF0ZS5jOjg1OTpcXHRmb2xpb19jb3B5X293bmVyKG5ld2ZvbGlvLCBmb2xpbyk7XFxubW0vbWlncmF0ZS5jLTg2MC1cXHRwZ2FsbG9jX3RhZ19zd2FwKG5ld2ZvbGlvLCBmb2xpbyk7XFxuLS1cXG5tbS9wYWdlX293bmVyLmM9Mzc5PXZvaWQgX19zcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLCBpbnQgbmV3X29yZGVyKVxcbi0tXFxubW0vcGFnZV9vd25lci5jLTM5Mi1cXG5tbS9wYWdlX293bmVyLmM6MzkzOnZvaWQgX19mb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKVxcbm1tL3BhZ2Vfb3duZXIuYy0zOTQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMzo1NDo1Ny4xMzAxNTQzODNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTkyMzg4MTQ0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIFBhZ2UgT3duZXIgQ29ycnVwdGlvbioqXG5cbk9rYXksIHNvIGBmb2xpb19taWdyYXRlX2ZsYWdzYCBpcyBjYWxsaW5nIGBmb2xpb19jb3B5X293bmVyYCwgYW5kIHRoYXQgZnVuY3Rpb24gaW4gdHVybiB0cmlnZ2VycyBgX19mb2xpb19jb3B5X293bmVyYC4gSSd2ZSBuYXJyb3dlZCBkb3duIHRoZSBwcm9ibGVtIHRvIHRoYXQgYF9fZm9saW9fY29weV9vd25lcmAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyBgb2xkX3BhZ2Vfb3duZXItXHUwMDNlZnJlZV9waWRgIGFuZCBgZnJlZV90Z2lkYC4gSXQgbG9va3MgbGlrZSBgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZWAgaXMgdGhlIGN1bHByaXQsIG92ZXJ3cml0aW5nIHRoZSBwcm9jZXNzIGFuZCB0aHJlYWQgSURzIHdpdGggdGhlIGN1cnJlbnQgcHJvY2VzcywgaW5zdGVhZCBvZiByZXRhaW5pbmcgdGhlIG9yaWdpbmFsIG9uZXMuIFRoaXMgaXMgdmVyeSBzcGVjaWZpYyDigJMgYF9fZm9saW9fY29weV9vd25lcmAgaXMgYSBwcmV0dHkgdGFyZ2V0ZWQgc3ltYm9sLCBub24tdWJpcXVpdG91cywgYW5kIHJpZ2h0IHRoZXJlIGluIGBtbS9wYWdlX293bmVyLmNgLlxuXG5JIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgc2NvcGUgb2YgdGhpcy4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4cGxvcmUgaG93IHBhZ2Vfb3duZXIgaXMgdXNlZCBlbHNld2hlcmUuIEkgbmVlZCB0byBzZWUgaWYgdGhpcyBwYXR0ZXJuLCBvciBzb21ldGhpbmcgc2ltaWxhciwgZXhpc3RzIGluIG90aGVyIHJlYWQgb3Igd3JpdGUgb3BlcmF0aW9ucy4gSSBzaG91bGQgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIG9idmlvdXMgY2FuZGlkYXRlczogYHByaW50X3BhZ2Vfb3duZXJgLCBvciB0aGUgYHBhZ2Vfb3duZXJgIGRlYnVnIGludGVyZmFjZS4gSSdsbCBhbHNvIGRvIGEgcXVpY2sgc3VydmV5IG9mIHdoYXQgc3ltYm9scyBhcmUgYWN0dWFsbHkgZGVmaW5lZCB3aXRoaW4gYG1tL3BhZ2Vfb3duZXIuY2AuIFRoaXMgd2lsbCBoZWxwIG1lIGJ1aWxkIGEgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY4OSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMzo1NTowMy4wNTQwMzk2NTZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTAwNjI4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJedm9pZCBfX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9wYWdlX293bmVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9vd25lci5jPTI5MT1zdGF0aWMgaW5saW5lIHZvaWQgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZShzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYy0zMTUtXFxubW0vcGFnZV9vd25lci5jOjMxNjp2b2lkIF9fcmVzZXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgc2hvcnQgb3JkZXIpXFxubW0vcGFnZV9vd25lci5jLTMxNy17XFxuLS1cXG5tbS9wYWdlX293bmVyLmM9MzUzPW5vaW5saW5lIHZvaWQgX19zZXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgc2hvcnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX293bmVyLmMtMzY1LVxcbm1tL3BhZ2Vfb3duZXIuYzozNjY6dm9pZCBfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbilcXG5tbS9wYWdlX293bmVyLmMtMzY3LXtcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYy0zNzgtXFxubW0vcGFnZV9vd25lci5jOjM3OTp2b2lkIF9fc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlciwgaW50IG5ld19vcmRlcilcXG5tbS9wYWdlX293bmVyLmMtMzgwLXtcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYy0zOTItXFxubW0vcGFnZV9vd25lci5jOjM5Mzp2b2lkIF9fZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZClcXG5tbS9wYWdlX293bmVyLmMtMzk0LXtcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYz02MDM9cHJpbnRfcGFnZV9vd25lcihjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIHVuc2lnbmVkIGxvbmcgcGZuLFxcbi0tXFxubW0vcGFnZV9vd25lci5jLTY3Mi1cXG5tbS9wYWdlX293bmVyLmM6NjczOnZvaWQgX19kdW1wX3BhZ2Vfb3duZXIoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxubW0vcGFnZV9vd25lci5jLTY3NC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEzOjU1OjAzLjE2OTA1MzE3MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTY2MzAyOTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipJbnZlc3RpZ2F0aW5nIEZvbGlvIE1pZ3JhdGlvbiBFbnRyeXBvaW50cyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgIGNvZGUgb3IgYW55IG90aGVyIGVudHJ5IHBvaW50cyBmb3IgcGFnZSBtaWdyYXRpb25zLiBJIHN1c3BlY3QgdGhlcmUgbWlnaHQgYmUgYSBwcm9ibGVtIHJlbGF0ZWQgdG8gdGhlbSwgc28gbGV0J3MgZmlyc3QgaWRlbnRpZnkgYWxsIG9mIHRoZSBjYWxsZXJzIG9mIGBmb2xpb19taWdyYXRlX2ZsYWdzYCwgaWYgdGhhdCBpcyB0aGUgcGxhY2UgdG8gc3RhcnQsIG9yIG90aGVyIGVudHJ5IHBvaW50cywgc28gSSBjYW4gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgZmxvdy4gVGhpcyBzaG91bGQgaGVscCBtZSBwaW5wb2ludCB0aGUgZXhhY3QgbG9jYXRpb24gd2hlcmUgdGhpcyBtaWdyYXRpb24gbG9naWMgaXMgYmVpbmcgdHJpZ2dlcmVkIGFuZCBwb3RlbnRpYWxseSBpZGVudGlmeSBhbnkgaXNzdWVzIG9yIGluY29uc2lzdGVuY2llcy4gVGhpcyBhbHNvIG1pZ2h0IG5vdCBiZSB0aGUgcmlnaHQgcGF0aCBhbmQgdGhlIGlzc3VlIGNvdWxkIGJlIHdpdGggYW5vdGhlciBwYWdlIG1pZ3JhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1ODUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMzo1NTowNC43MzUzNTkwMTVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NzQ1NjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX21pZ3JhdGVfZmxhZ3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21pZ3JhdGUuYz03Mzk9aW50IG1pZ3JhdGVfaHVnZV9wYWdlX21vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbm1tL21pZ3JhdGUuYy03NzQtICovXFxubW0vbWlncmF0ZS5jOjc3NTp2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9taWdyYXRlLmMtNzc2LXtcXG4tLVxcbm1tL21pZ3JhdGUuYy04NjMtfVxcbm1tL21pZ3JhdGUuYzo4NjQ6RVhQT1JUX1NZTUJPTChmb2xpb19taWdyYXRlX2ZsYWdzKTtcXG5tbS9taWdyYXRlLmMtODY1LVxcbi0tXFxubW0vbWlncmF0ZS5jPTg3MD1zdGF0aWMgaW50IF9fbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpkc3QsXFxuLS1cXG5tbS9taWdyYXRlLmMtODkwLVxcbm1tL21pZ3JhdGUuYzo4OTE6XFx0Zm9saW9fbWlncmF0ZV9mbGFncyhkc3QsIHNyYyk7XFxubW0vbWlncmF0ZS5jLTg5Mi1cXHRyZXR1cm4gMDtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTEwOT1zdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjUxLVxcdFxcdFxcdGVsc2VcXG5tbS9taWdyYXRlX2RldmljZS5jOjEyNTI6XFx0XFx0XFx0XFx0Zm9saW9fbWlncmF0ZV9mbGFncyhuZXdmb2xpbywgZm9saW8pO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI1My1cXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEzOjU1OjA0Ljc4MzExMTY0M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjg5NjY4Nzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQYWdlIE93bmVyIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIGBtbS9wYWdlX293bmVyLmNgIGNvZGUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbnZlc3RpZ2F0ZSBgX19mb2xpb19jb3B5X293bmVyYOKAlHRoYXQgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIExldCdzIHNlZS4uLiB5ZXAsIGl0J3Mgbm9uLXN0YXRpYywgZGVmaW5lZCBhcyBgdm9pZCBfX2ZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpYC4gTWFrZXMgc2Vuc2UuIE5vdywgbGV0J3MganVzdCBxdWlja2x5IHNjYW4gZm9yIGFueSByZWxhdGVkIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuIEFoLCBgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZWAgaXMgYHN0YXRpYyBpbmxpbmVgIHNvIGxpa2VseSBub3QgYXMgY2VudHJhbCBhcyB0aGUgb3RoZXIuIEFsc28sIGBmb2xpb19taWdyYXRlX2ZsYWdzYCBpcyBub24tc3RhdGljLlxuXG5Ob3csIGxldCdzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgY29uZmlndXJhdGlvbiBvcHRpb25zLiBGcm9tIHdoYXQgSSByZW1lbWJlciwgYFBBR0VfT1dORVJgIGRlcGVuZHMgb24gYERFQlVHX0tFUk5FTGAgYW5kIGBTVEFDS1RSQUNFX1NVUFBPUlRgLCB3aGljaCBpcyBpbXBvcnRhbnQgY29udGV4dC4gSSBzaG91bGQgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBjb25mbGljdHMgd2hlbiBgTUlHUkFUSU9OYCBvciBgTlVNQWAgb3IgYENPTVBBQ1RJT05gIGlzIGVuYWJsZWQsIHNvLCBsZXQncyBzdGFydCBjaGVja2luZyBjb25maWdzIGluIGBtbS9taWdyYXRlLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA4NiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMzo1NTowNy40NzI3ODMxOTFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDYwNDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19NSUdSQVRJT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTk4PW9iai0kKENPTkZJR19NRU1URVNUKVxcdFxcdCs9IG1lbXRlc3Qub1xcbm1tL01ha2VmaWxlOjk5Om9iai0kKENPTkZJR19NSUdSQVRJT04pICs9IG1pZ3JhdGUub1xcbm1tL01ha2VmaWxlLTEwMC1vYmotJChDT05GSUdfTlVNQSkgKz0gbWVtb3J5LXRpZXJzLm9cXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYz04NDQ9c3RhdGljIHZvaWQgX19pbml0IHN3YXBfbWlncmF0aW9uX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtODQ4LVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo4NDk6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19NSUdSQVRJT04pKVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy04NTAtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vZmlsZW1hcC5jPTEyNTA9c3RhdGljIGlubGluZSBpbnQgZm9saW9fd2FpdF9iaXRfY29tbW9uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBiaXRfbnIsXFxuLS1cXG5tbS9maWxlbWFwLmMtMTM4NS1cXG5tbS9maWxlbWFwLmM6MTM4NjojaWZkZWYgQ09ORklHX01JR1JBVElPTlxcbm1tL2ZpbGVtYXAuYy0xMzg3LS8qKlxcbi0tXFxubW0vZ3VwLmM9MjE4Nz1zdHJ1Y3QgcGFnZSAqZ2V0X2R1bXBfcGFnZSh1bnNpZ25lZCBsb25nIGFkZHIsIGludCAqbG9ja2VkKVxcbi0tXFxubW0vZ3VwLmMtMjE5Ny1cXG5tbS9ndXAuYzoyMTk4OiNpZmRlZiBDT05GSUdfTUlHUkFUSU9OXFxubW0vZ3VwLmMtMjE5OS1cXG4tLVxcbm1tL2d1cC5jPTI0NDk9c3RhdGljIGxvbmcgY2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl9mb2xpb3MsXFxuLS1cXG5tbS9ndXAuYy0yNDUzLX1cXG5tbS9ndXAuYzoyNDU0OiNlbmRpZiAvKiBDT05GSUdfTUlHUkFUSU9OICovXFxubW0vZ3VwLmMtMjQ1NS1cXG4tLVxcbm1tL2tzbS5jPTMyNjk9dm9pZCBjb2xsZWN0X3Byb2NzX2tzbShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbm1tL2tzbS5jLTMzMDctXFxubW0va3NtLmM6MzMwODojaWZkZWYgQ09ORklHX01JR1JBVElPTlxcbm1tL2tzbS5jLTMzMDktdm9pZCBmb2xpb19taWdyYXRlX2tzbShzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0va3NtLmMtMzMzMC19XFxubW0va3NtLmM6MzMzMTojZW5kaWYgLyogQ09ORklHX01JR1JBVElPTiAqL1xcbm1tL2tzbS5jLTMzMzItXFxuLS1cXG5tbS9zaG1lbS5jPTUzNzE9c3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgc2htZW1fYW9wcyA9IHtcXG4tLVxcbm1tL3NobWVtLmMtNTM3Ni0jZW5kaWZcXG5tbS9zaG1lbS5jOjUzNzc6I2lmZGVmIENPTkZJR19NSUdSQVRJT05cXG5tbS9zaG1lbS5jLTUzNzgtXFx0Lm1pZ3JhdGVfZm9saW9cXHQ9IG1pZ3JhdGVfZm9saW8sXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9Mzk9c3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgc3dhcF9hb3BzID0ge1xcbm1tL3N3YXBfc3RhdGUuYy00MC1cXHQuZGlydHlfZm9saW9cXHQ9IG5vb3BfZGlydHlfZm9saW8sXFxubW0vc3dhcF9zdGF0ZS5jOjQxOiNpZmRlZiBDT05GSUdfTUlHUkFUSU9OXFxubW0vc3dhcF9zdGF0ZS5jLTQyLVxcdC5taWdyYXRlX2ZvbGlvXFx0PSBtaWdyYXRlX2ZvbGlvLFxcbi0tXFxubW0vc3dhcGZpbGUuYz03OD11bnNpZ25lZCBsb25nIHN3YXBmaWxlX21heGltdW1fc2l6ZTtcXG5tbS9zd2FwZmlsZS5jOjc5OiNpZmRlZiBDT05GSUdfTUlHUkFUSU9OXFxubW0vc3dhcGZpbGUuYy04MC1ib29sIHN3YXBfbWlncmF0aW9uX2FkX3N1cHBvcnRlZDtcXG5tbS9zd2FwZmlsZS5jOjgxOiNlbmRpZlxcdC8qIENPTkZJR19NSUdSQVRJT04gKi9cXG5tbS9zd2FwZmlsZS5jLTgyLVxcbi0tXFxubW0vc3dhcGZpbGUuYz0zOTU0PXN0YXRpYyBpbnQgX19pbml0IHN3YXBmaWxlX2luaXQodm9pZClcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMzk2Ny1cXG5tbS9zd2FwZmlsZS5jOjM5Njg6I2lmZGVmIENPTkZJR19NSUdSQVRJT05cXG5tbS9zd2FwZmlsZS5jLTM5NjktXFx0aWYgKHN3YXBmaWxlX21heGltdW1fc2l6ZSBcXHUwMDNlPSAoMVVMIFxcdTAwM2NcXHUwMDNjIFNXUF9NSUdfVE9UQUxfQklUUykpXFxubW0vc3dhcGZpbGUuYy0zOTcwLVxcdFxcdHN3YXBfbWlncmF0aW9uX2FkX3N1cHBvcnRlZCA9IHRydWU7XFxubW0vc3dhcGZpbGUuYzozOTcxOiNlbmRpZlxcdC8qIENPTkZJR19NSUdSQVRJT04gKi9cXG5tbS9zd2FwZmlsZS5jLTM5NzItXFxuLS1cXG5tbS92bXN0YXQuYz0xMTk5PWNvbnN0IGNoYXIgKiBjb25zdCB2bXN0YXRfdGV4dFtdID0ge1xcbi0tXFxubW0vdm1zdGF0LmMtMTM3Ny0jZW5kaWZcXG5tbS92bXN0YXQuYzoxMzc4OiNpZmRlZiBDT05GSUdfTUlHUkFUSU9OXFxubW0vdm1zdGF0LmMtMTM3OS1cXHRbSShQR01JR1JBVEVfU1VDQ0VTUyldXFx0XFx0XFx0PSBcXFwicGdtaWdyYXRlX3N1Y2Nlc3NcXFwiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMzo1NTowNy41MjEyNDk3NDlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDczNTMwODg3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLY29uZmlnIGFuZCBUcmlhZ2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLiBJIHNlZSB0aGF0IGBQQUdFX09XTkVSYCBhbmQgYE1JR1JBVElPTmAgYXJlIGtleS4gYFBBR0VfT1dORVJgLCBvZiBjb3Vyc2UsIGVuYWJsZXMgYHBhZ2Vfb3duZXIuY2AsIGFuZCBpbXBvcnRhbnRseSwgYE1JR1JBVElPTmAgaXMgZ29pbmcgdG8gZXhlcmNpc2UgYF9fZm9saW9fY29weV9vd25lcmAgd2hpY2ggaXMgdGhlIGNvZGUgSSdtIGludGVyZXN0ZWQgaW4uIEkgYWxzbyBub3RlIHRoYXQgYERFQlVHX0ZTYCBpcyBpbXBsaWNpdGx5IHNlbGVjdGVkIGJ5IGBQQUdFX09XTkVSYCwgd2hpY2ggaXMgYSBnb29kIHRoaW5nIGZvciBkZWJ1Z2dpbmcuXG5cbk5vdywgbGV0J3Mgc3lzdGVtYXRpY2FsbHkgZ28gdGhyb3VnaCB0aGUgdHJpYWdlIGluc3RydWN0aW9ucy5cblxuMS4gICoqUmVhY2hhYmlsaXR5OioqIElzIGBwYWdlX293bmVyYCByZWFjaGFibGU/IFllcywgc3BlY2lmaWNhbGx5IHRocm91Z2ggbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBhZ2UgdHJhY2tpbmcgaW4gZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIHdoZW4gSSBlbmFibGUgYENPTkZJR19QQUdFX09XTkVSYCBhbmQgdXNlIHRoZSBib290IGFyZ3VtZW50IGBwYWdlX293bmVyPW9uYC4gQW5kLCB5ZXMsIGBmb2xpb19jb3B5X293bmVyYCBpcyByZWFjaGFibGUgZHVyaW5nIGZvbGlvIG1pZ3JhdGlvbi4gQ3J1Y2lhbGx5LCB0aGlzIGNvZGUgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBiZWNhdXNlIG9mIHRoZSBgcGFnZV9vd25lcmAgdHJhY2tpbmcgZGF0YSBzdHJ1Y3R1cmVzLiBUaGVyZWZvcmUsICp5ZXMqLCBpdCdzIFwiV29ydGhGdXp6aW5nXCIuXG5cbjIuICAqKkZvY3VzU3ltYm9sczoqKiBJJ3ZlIGlkZW50aWZpZWQgYF9fZm9saW9fY29weV9vd25lcmAgYW5kIGBmb2xpb19taWdyYXRlX2ZsYWdzYCBhcyB0aGUgcHJpbWFyeSB0YXJnZXRzLiBJJ20gYXZvaWRpbmcgYF9fcmVzZXRfcGFnZV9vd25lcmAgYmVjYXVzZSBpdCdzIGNhbGxlZCBvbiAqZXZlcnkqIHBhZ2UgZnJlZSDigJMgdGhhdCdzIGZhciB0b28gdWJpcXVpdG91cyBmb3IgZWZmZWN0aXZlIGZ1enppbmcuXG5cbjMuICAqKkVuYWJsZUNvbmZpZ3M6KiogQ29uZmlybWVkOiBgUEFHRV9PV05FUmAgYW5kIGBNSUdSQVRJT05gLiBUaG9zZSBhcmUgdGhlIHR3byBJIG5lZWQgdG8gZ2V0IHRoaXMgc2V0IHVwLlxuXG5BbHJpZ2h0LCBhIHNhbml0eSBjaGVjayBvbiB0aGUgdG9vbCBjYWxsIGBzZXQtcmVzdWx0c2AgaXMgaW4gb3JkZXIuXG5cbiogICBgV29ydGhGdXp6aW5nYDogVHJ1ZS5cbiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXCJQQUdFX09XTkVSXCIsIFwiTUlHUkFUSU9OXCJdYC4gUGVyZmVjdC5cbiogICBgRm9jdXNTeW1ib2xzYDogYFtcIl9fZm9saW9fY29weV9vd25lclwiLCBcImZvbGlvX21pZ3JhdGVfZmxhZ3NcIl1gLiBHb3QgaXQuXG4qICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBtbS9wYWdlXFxfb3duZXIuYyB3aGVyZSBgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZSgpYCB3YXMgaWdub3JpbmcgaXRzIGBwaWRgIGFuZCBgdGdpZGAgcGFyYW1ldGVycyBhbmQgdXNpbmcgYGN1cnJlbnQtXHUwMDNlcGlkYCBhbmQgYGN1cnJlbnQtXHUwMDNldGdpZGAgaW5zdGVhZCwgd2hpY2ggaW1wYWN0cyBmb2xpbyBtaWdyYXRpb24gKGBfX2ZvbGlvX2NvcHlfb3duZXJgKS4gQmVjYXVzZSB0aGlzIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZGVidWcgdHJhY2tpbmcgbG9naWMsIGl0J3MgcmVhY2hhYmxlLlxuXG5Ob3csIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjQ0LCJPdXRwdXRUb2tlbnMiOjE0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMzo1NToxMi4yNTY1NjI0MjFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDkxMTU3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEFHRV9PV05FUlwiLFxuICAgIFwiTUlHUkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19mb2xpb19jb3B5X293bmVyXCIsXG4gICAgXCJmb2xpb19taWdyYXRlX2ZsYWdzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gbW0vcGFnZV9vd25lci5jIHdoZXJlIF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGUoKSBpZ25vcmVkIHRoZSBwYXNzZWQgcGlkIGFuZCB0Z2lkIGFyZ3VtZW50cyBhbmQgaW5zdGVhZCB1c2VkIGN1cnJlbnQtXFx1MDAzZXBpZCBhbmQgY3VycmVudC1cXHUwMDNldGdpZC4gVGhpcyBkaXJlY3RseSBhZmZlY3RzIGZvbGlvIG1pZ3JhdGlvbiBpbiBfX2ZvbGlvX2NvcHlfb3duZXIoKSwgd2hlcmUgdGhlIG9yaWdpbmFsIG93bmVyJ3MgZnJlZV9waWQgYW5kIGZyZWVfdGdpZCBuZWVkIHRvIGJlIHByZXNlcnZlZC4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgdHJhY2tpbmcgbG9naWMgaW4gY29yZSBtbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQUdFX09XTkVSXCIsXG4gICAgXCJNSUdSQVRJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2ZvbGlvX2NvcHlfb3duZXJcIixcbiAgICBcImZvbGlvX21pZ3JhdGVfZmxhZ3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBtbS9wYWdlX293bmVyLmMgd2hlcmUgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZSgpIGlnbm9yZWQgdGhlIHBhc3NlZCBwaWQgYW5kIHRnaWQgYXJndW1lbnRzIGFuZCBpbnN0ZWFkIHVzZWQgY3VycmVudC1cXHUwMDNlcGlkIGFuZCBjdXJyZW50LVxcdTAwM2V0Z2lkLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgZm9saW8gbWlncmF0aW9uIGluIF9fZm9saW9fY29weV9vd25lcigpLCB3aGVyZSB0aGUgb3JpZ2luYWwgb3duZXIncyBmcmVlX3BpZCBhbmQgZnJlZV90Z2lkIG5lZWQgdG8gYmUgcHJlc2VydmVkLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCB0cmFja2luZyBsb2dpYyBpbiBjb3JlIG1tLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMzo1NToxMi4zMzc0ODA2NTdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMjUyNTI1MTY2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEzOjU1OjEyLjMzODAwODgzN1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjUxMjUyNDcxMzE5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGUoKWAgd2hlcmUgdGhlIGZ1bmN0aW9uIHdhcyBhc3NpZ25pbmcgYGN1cnJlbnQtXFx1MDAzZXBpZGAgYW5kIGBjdXJyZW50LVxcdTAwM2V0Z2lkYCBpbnN0ZWFkIG9mIHRoZSBwYXNzZWQtaW4gYHBpZGAgYW5kIGB0Z2lkYCBmdW5jdGlvbiBhcmd1bWVudHMuIFRoZSBwYXNzZWQgcGFyYW1ldGVycyBhcmUgcHJpbWl0aXZlIHNjYWxhciB0eXBlcyAoYHBpZF90YCkgdGhhdCBhcmUgaW5pdGlhbGl6ZWQgYnkgY2FsbGVycyAoYGN1cnJlbnQtXFx1MDAzZXBpZGAvYGN1cnJlbnQtXFx1MDAzZXRnaWRgIGluIGBfX3Jlc2V0X3BhZ2Vfb3duZXJgIG9yIGBvbGRfcGFnZV9vd25lci1cXHUwMDNlZnJlZV9waWRgL2BmcmVlX3RnaWRgIGluIGBfX2ZvbGlvX2NvcHlfb3duZXJgKS4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBzdHJ1Y3QgcGFkZGluZyBsZWFrcyB0byB1c2VyIHNwYWNlLCBvciBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmQxMmM4MjQ2NTZjOWI4MzdjMjgyNDM4Y2VlMjNmY2VkZjVlOGUwY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMTM6NTM6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9wYWdlX293bmVyLmMgYi9tbS9wYWdlX293bmVyLmNcbmluZGV4IDNmYzM3ZDliOTA4ZWYuLmNmYzMxYzkyZDc2NTcgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX293bmVyLmNcbisrKyBiL21tL3BhZ2Vfb3duZXIuY1xuQEAgLTMwNyw4ICszMDcsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdFx0XHRwYWdlX293bmVyLVx1MDAzZWZyZWVfaGFuZGxlID0gaGFuZGxlO1xuIFx0XHR9XG4gXHRcdHBhZ2Vfb3duZXItXHUwMDNlZnJlZV90c19uc2VjID0gZnJlZV90c19uc2VjO1xuLVx0XHRwYWdlX293bmVyLVx1MDAzZWZyZWVfcGlkID0gY3VycmVudC1cdTAwM2VwaWQ7XG4tXHRcdHBhZ2Vfb3duZXItXHUwMDNlZnJlZV90Z2lkID0gY3VycmVudC1cdTAwM2V0Z2lkO1xuK1x0XHRwYWdlX293bmVyLVx1MDAzZWZyZWVfcGlkID0gcGlkO1xuK1x0XHRwYWdlX293bmVyLVx1MDAzZWZyZWVfdGdpZCA9IHRnaWQ7XG4gXHR9XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMzo1NToxMi4zMzgwMDk4MTdaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDgxNzkxMTA3NTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV2YWx1YXRpbmcgdGhlIEtNU0FOIE5lY2Vzc2l0eSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCBqdXN0aWZpZXMgaXRzIG93biBLTVNBTiBzZXNzaW9uLiBGaXJzdCwgSSdsbCB0YWtlIGEgbG9vayBhdCB0aGUgZGlmZiBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gYG1tL3BhZ2Vfb3duZXIuY2AuIFRoaXMgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nLiBNeSBpbnN0aW5jdHMgdGVsbCBtZSB0aGUgY29kZSBhcm91bmQgbGluZSAzMDcgaW4gYG1tL3BhZ2Vfb3duZXIuY2AgbWlnaHQgYmUga2V5LCBzbyBJJ2xsIHVzZSBgcmVhZC1maWxlYCB0aGVyZSB0byBnZXQgdGhlIGltbWVkaWF0ZSBjb250ZXh0LiBIb3BlZnVsbHksIHRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB3aGF0IHRoZSBwYXRjaCBpcyB0b3VjaGluZyBhbmQgaWYgS01TQU4gaXMgbmVjZXNzYXJ5IGZvciB0aGlzIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MDM6MTQuMTI5MTIyMjNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyNTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3BhZ2Vfb3duZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyODU6XFx0XFx0XFx0X19zZXRfYml0KFBBR0VfRVhUX09XTkVSLCBcXHUwMDI2cGFnZV9leHQtXFx1MDAzZWZsYWdzKTtcXG4gMjg2OlxcdFxcdFxcdF9fc2V0X2JpdChQQUdFX0VYVF9PV05FUl9BTExPQ0FURUQsIFxcdTAwMjZwYWdlX2V4dC1cXHUwMDNlZmxhZ3MpO1xcbiAyODc6XFx0XFx0fVxcbiAyODg6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDI4OTpcXHR9XFxuIDI5MDpcXHRcXG4gMjkxOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlKHN0cnVjdCBwYWdlICpwYWdlLFxcbiAyOTI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlLFxcbiAyOTM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgc2hvcnQgb3JkZXIsXFxuIDI5NDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBwaWRfdCBwaWQsIHBpZF90IHRnaWQsXFxuIDI5NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICB1NjQgZnJlZV90c19uc2VjKVxcbiAyOTY6XFx0e1xcbiAyOTc6XFx0XFx0c3RydWN0IHBhZ2VfZXh0X2l0ZXIgaXRlcjtcXG4gMjk4OlxcdFxcdHN0cnVjdCBwYWdlX2V4dCAqcGFnZV9leHQ7XFxuIDI5OTpcXHRcXHRzdHJ1Y3QgcGFnZV9vd25lciAqcGFnZV9vd25lcjtcXG4gMzAwOlxcdFxcbiAzMDE6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiAzMDI6XFx0XFx0Zm9yX2VhY2hfcGFnZV9leHQocGFnZSwgMSBcXHUwMDNjXFx1MDAzYyBvcmRlciwgcGFnZV9leHQsIGl0ZXIpIHtcXG4gMzAzOlxcdFxcdFxcdHBhZ2Vfb3duZXIgPSBnZXRfcGFnZV9vd25lcihwYWdlX2V4dCk7XFxuIDMwNDpcXHRcXHRcXHQvKiBPbmx5IF9fcmVzZXRfcGFnZV9vd25lcigpIHdhbnRzIHRvIGNsZWFyIHRoZSBiaXQgKi9cXG4gMzA1OlxcdFxcdFxcdGlmIChoYW5kbGUpIHtcXG4gMzA2OlxcdFxcdFxcdFxcdF9fY2xlYXJfYml0KFBBR0VfRVhUX09XTkVSX0FMTE9DQVRFRCwgXFx1MDAyNnBhZ2VfZXh0LVxcdTAwM2VmbGFncyk7XFxuIDMwNzpcXHRcXHRcXHRcXHRwYWdlX293bmVyLVxcdTAwM2VmcmVlX2hhbmRsZSA9IGhhbmRsZTtcXG4gMzA4OlxcdFxcdFxcdH1cXG4gMzA5OlxcdFxcdFxcdHBhZ2Vfb3duZXItXFx1MDAzZWZyZWVfdHNfbnNlYyA9IGZyZWVfdHNfbnNlYztcXG4gMzEwOlxcdFxcdFxcdHBhZ2Vfb3duZXItXFx1MDAzZWZyZWVfcGlkID0gcGlkO1xcbiAzMTE6XFx0XFx0XFx0cGFnZV9vd25lci1cXHUwMDNlZnJlZV90Z2lkID0gdGdpZDtcXG4gMzEyOlxcdFxcdH1cXG4gMzEzOlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiAzMTQ6XFx0fVxcbiAzMTU6XFx0XFxuIDMxNjpcXHR2b2lkIF9fcmVzZXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgc2hvcnQgb3JkZXIpXFxuIDMxNzpcXHR7XFxuIDMxODpcXHRcXHRzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0O1xcbiAzMTk6XFx0XFx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlO1xcbiAzMjA6XFx0XFx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgYWxsb2NfaGFuZGxlO1xcbiAzMjE6XFx0XFx0c3RydWN0IHBhZ2Vfb3duZXIgKnBhZ2Vfb3duZXI7XFxuIDMyMjpcXHRcXHR1NjQgZnJlZV90c19uc2VjID0gbG9jYWxfY2xvY2soKTtcXG4gMzIzOlxcdFxcbiAzMjQ6XFx0XFx0cGFnZV9leHQgPSBwYWdlX2V4dF9nZXQocGFnZSk7XFxuIDMyNTpcXHRcXHRpZiAodW5saWtlbHkoIXBhZ2VfZXh0KSlcXG4gMzI2OlxcdFxcdFxcdHJldHVybjtcXG4gMzI3OlxcdFxcbiAzMjg6XFx0XFx0cGFnZV9vd25lciA9IGdldF9wYWdlX293bmVyKHBhZ2VfZXh0KTtcXG4gMzI5OlxcdFxcdGFsbG9jX2hhbmRsZSA9IHBhZ2Vfb3duZXItXFx1MDAzZWhhbmRsZTtcXG4gMzMwOlxcdFxcdHBhZ2VfZXh0X3B1dChwYWdlX2V4dCk7XFxuIDMzMTpcXHRcXG4gMzMyOlxcdFxcdC8qXFxuIDMzMzpcXHRcXHQgKiBEbyBub3Qgc3BlY2lmeSBHRlBfTk9XQUlUIHRvIG1ha2UgZ2ZwZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoKSA9PSBmYWxzZVxcbiAzMzQ6XFx0XFx0ICogdG8gcHJldmVudCBpc3N1ZXMgaW4gc3RhY2tfZGVwb3Rfc2F2ZSgpLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDowMzoxNC4xMjkyMjY3N1oiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzQ1NTQ1NDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlYCoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZnVuY3Rpb24sIGBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIGNoZWNrIHRoZSBjYWxsIHNpdGVzLiBXaGVyZSBhcmUgd2UgaW52b2tpbmcgdGhpcyBmdW5jdGlvbj8gSSdsbCBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZSB0byBnZXQgYSBncmFzcCBvbiBpdHMgcHVycG9zZSBhbmQgaXRzIGNyaXRpY2FsIHBvaW50cyBvZiBpbnRlcmFjdGlvbiB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbS4gS25vd2luZyB3aGVyZSBpdCdzIGNhbGxlZCBpcyBhYnNvbHV0ZWx5IGNydWNpYWwgZm9yIGFueSByZWFsIHVuZGVyc3RhbmRpbmcuXG5cbk9rYXksIGxldCdzIG5hdmlnYXRlIHRvIGBtbS9wYWdlX293bmVyLmNgLiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgZGVmaW5pdGlvbi4gRnJvbSB0aGVyZSwgSSdsbCBzY3J1dGluaXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBjb250ZXh0LiBJJ2xsIHByb2JhYmx5IGJlIGxvb2tpbmcgZm9yIHRoZSBjb25kaXRpb25zIGxlYWRpbmcgdXAgdG8gdGhlIGNhbGwsIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbnZvbHZlZCwgYW5kIHdoYXQgdGhlIGZ1bmN0aW9uIGlzIGludGVuZGVkIHRvIGFjY29tcGxpc2ggd2l0aGluIHRoZSBsYXJnZXIgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gZnJhbWV3b3JrLiBUaW1lIHRvIGRpZyBpbiBhbmQgZ2V0IGEgZ29vZCBwaWN0dXJlIG9mIHdoYXQncyBnb2luZyBvbi4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgb3ZlcmFsbCBwYWdlIG93bmVyc2hpcCB0cmFja2luZyBtZWNoYW5pc20uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMzMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjAzOjE3Ljg3NDc3NjQ3M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzY1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX293bmVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzM1LFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzM1OlxcdFxcdCAqIFRoaXMgaXMgc2ltaWxhciB0byBhbGxvY19wYWdlc19ub2xvY2soKSBnZnAgZmxhZ3MsIGJ1dCBvbmx5IHVzZWRcXG4gMzM2OlxcdFxcdCAqIHRvIHNpZ25hbCBzdGFja19kZXBvdCB0byBhdm9pZCBzcGluX2xvY2tzLlxcbiAzMzc6XFx0XFx0ICovXFxuIDMzODpcXHRcXHRoYW5kbGUgPSBzYXZlX3N0YWNrKF9fR0ZQX05PV0FSTik7XFxuIDMzOTpcXHRcXHRfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlKHBhZ2UsIGhhbmRsZSwgb3JkZXIsIGN1cnJlbnQtXFx1MDAzZXBpZCxcXG4gMzQwOlxcdFxcdFxcdFxcdFxcdFxcdGN1cnJlbnQtXFx1MDAzZXRnaWQsIGZyZWVfdHNfbnNlYyk7XFxuIDM0MTpcXHRcXG4gMzQyOlxcdFxcdGlmIChhbGxvY19oYW5kbGUgIT0gZWFybHlfaGFuZGxlKVxcbiAzNDM6XFx0XFx0XFx0LypcXG4gMzQ0OlxcdFxcdFxcdCAqIGVhcmx5X2hhbmRsZSBpcyBiZWluZyBzZXQgYXMgYSBoYW5kbGUgZm9yIGFsbCB0aG9zZVxcbiAzNDU6XFx0XFx0XFx0ICogZWFybHkgYWxsb2NhdGVkIHBhZ2VzLiBTZWUgaW5pdF9wYWdlc19pbl96b25lKCkuXFxuIDM0NjpcXHRcXHRcXHQgKiBTaW5jZSB0aGVpciByZWZjb3VudCBpcyBub3QgYmVpbmcgaW5jcmVtZW50ZWQgYmVjYXVzZVxcbiAzNDc6XFx0XFx0XFx0ICogdGhlIG1hY2hpbmVyeSBpcyBub3QgcmVhZHkgeWV0LCB3ZSBjYW5ub3QgZGVjcmVtZW50XFxuIDM0ODpcXHRcXHRcXHQgKiB0aGVpciByZWZjb3VudCBlaXRoZXIuXFxuIDM0OTpcXHRcXHRcXHQgKi9cXG4gMzUwOlxcdFxcdFxcdGRlY19zdGFja19yZWNvcmRfY291bnQoYWxsb2NfaGFuZGxlLCAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyKTtcXG4gMzUxOlxcdH1cXG4gMzUyOlxcdFxcbiAzNTM6XFx0bm9pbmxpbmUgdm9pZCBfX3NldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBzaG9ydCBvcmRlcixcXG4gMzU0OlxcdFxcdFxcdFxcdFxcdFxcdGdmcF90IGdmcF9tYXNrKVxcbiAzNTU6XFx0e1xcbiAzNTY6XFx0XFx0dTY0IHRzX25zZWMgPSBsb2NhbF9jbG9jaygpO1xcbiAzNTc6XFx0XFx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlO1xcbiAzNTg6XFx0XFxuIDM1OTpcXHRcXHRoYW5kbGUgPSBzYXZlX3N0YWNrKGdmcF9tYXNrKTtcXG4gMzYwOlxcdFxcdF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGhhbmRsZSwgb3JkZXIsIGdmcF9tYXNrLCBNUl9ORVZFUixcXG4gMzYxOlxcdFxcdFxcdFxcdFxcdCAgIHRzX25zZWMsIGN1cnJlbnQtXFx1MDAzZXBpZCwgY3VycmVudC1cXHUwMDNldGdpZCxcXG4gMzYyOlxcdFxcdFxcdFxcdFxcdCAgIGN1cnJlbnQtXFx1MDAzZWNvbW0pO1xcbiAzNjM6XFx0XFx0aW5jX3N0YWNrX3JlY29yZF9jb3VudChoYW5kbGUsIGdmcF9tYXNrLCAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyKTtcXG4gMzY0OlxcdH1cXG4gMzY1OlxcdFxcbiAzNjY6XFx0dm9pZCBfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbilcXG4gMzY3OlxcdHtcXG4gMzY4OlxcdFxcdHN0cnVjdCBwYWdlX2V4dCAqcGFnZV9leHQgPSBwYWdlX2V4dF9nZXQoXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlKTtcXG4gMzY5OlxcdFxcdHN0cnVjdCBwYWdlX293bmVyICpwYWdlX293bmVyO1xcbiAzNzA6XFx0XFxuIDM3MTpcXHRcXHRpZiAodW5saWtlbHkoIXBhZ2VfZXh0KSlcXG4gMzcyOlxcdFxcdFxcdHJldHVybjtcXG4gMzczOlxcdFxcbiAzNzQ6XFx0XFx0cGFnZV9vd25lciA9IGdldF9wYWdlX293bmVyKHBhZ2VfZXh0KTtcXG4gMzc1OlxcdFxcdHBhZ2Vfb3duZXItXFx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb24gPSByZWFzb247XFxuIDM3NjpcXHRcXHRwYWdlX2V4dF9wdXQocGFnZV9leHQpO1xcbiAzNzc6XFx0fVxcbiAzNzg6XFx0XFxuIDM3OTpcXHR2b2lkIF9fc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlciwgaW50IG5ld19vcmRlcilcXG4gMzgwOlxcdHtcXG4gMzgxOlxcdFxcdHN0cnVjdCBwYWdlX2V4dF9pdGVyIGl0ZXI7XFxuIDM4MjpcXHRcXHRzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0O1xcbiAzODM6XFx0XFx0c3RydWN0IHBhZ2Vfb3duZXIgKnBhZ2Vfb3duZXI7XFxuIDM4NDpcXHRcXG4gMzg1OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gMzg2OlxcdFxcdGZvcl9lYWNoX3BhZ2VfZXh0KHBhZ2UsIDEgXFx1MDAzY1xcdTAwM2Mgb2xkX29yZGVyLCBwYWdlX2V4dCwgaXRlcikge1xcbiAzODc6XFx0XFx0XFx0cGFnZV9vd25lciA9IGdldF9wYWdlX293bmVyKHBhZ2VfZXh0KTtcXG4gMzg4OlxcdFxcdFxcdHBhZ2Vfb3duZXItXFx1MDAzZW9yZGVyID0gbmV3X29yZGVyO1xcbiAzODk6XFx0XFx0fVxcbiAzOTA6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDM5MTpcXHR9XFxuIDM5MjpcXHRcXG4gMzkzOlxcdHZvaWQgX19mb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKVxcbiAzOTQ6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDowMzoxNy44NzQ4NzIyODRaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg0NjU5MDU1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGVgIENhbGwgU2l0ZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZnVuY3Rpb24sIGBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlYC4gVG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gd2hlcmUgaXQncyBiZWluZyB1c2VkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKmhvdyogaXQncyBiZWluZyB1c2VkLCBJJ20gZ29pbmcgdG8gbGV2ZXJhZ2UgYGdyZXBwZXJgLiBJJ20gZ29pbmcgdG8gcnVuIGEgc2VhcmNoIHNwZWNpZmljYWxseSBmb3IgY2FsbHMgdG8gdGhhdCBmdW5jdGlvbiBhY3Jvc3MgdGhlIGVudGlyZSBjb2RlYmFzZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIG92ZXJ2aWV3IG9mIGFsbCB0aGUgZGlmZmVyZW50IGNvbnRleHRzIGluIHdoaWNoIGl0IG9wZXJhdGVzLiBLbm93aW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpbGwgdGVsbCBtZSBhIGdyZWF0IGRlYWwgYWJvdXQgdGhlIGFzc3VtcHRpb25zIGFuZCBwb3NzaWJsZSBzaWRlIGVmZmVjdHMgcmVsYXRlZCB0byB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byBkcmF3IHNvbWUgY29uY2x1c2lvbnMgYWJvdXQgdGhlIGZ1bmN0aW9uJ3Mgb3ZlcmFsbCBwdXJwb3NlIGFuZCBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQwMCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MDM6MjAuNzIxNDY1NjY0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM5NDcwMjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9vd25lci5jPTI2Mj1zdGF0aWMgaW5saW5lIHZvaWQgX191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5tbS9wYWdlX293bmVyLmMtMjkwLVxcbm1tL3BhZ2Vfb3duZXIuYzoyOTE6c3RhdGljIGlubGluZSB2b2lkIF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGUoc3RydWN0IHBhZ2UgKnBhZ2UsXFxubW0vcGFnZV9vd25lci5jLTI5Mi1cXHRcXHRcXHRcXHRcXHRcXHQgICBkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGUsXFxuLS1cXG5tbS9wYWdlX293bmVyLmM9MzE2PXZvaWQgX19yZXNldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBzaG9ydCBvcmRlcilcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYy0zMzgtXFx0aGFuZGxlID0gc2F2ZV9zdGFjayhfX0dGUF9OT1dBUk4pO1xcbm1tL3BhZ2Vfb3duZXIuYzozMzk6XFx0X191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZShwYWdlLCBoYW5kbGUsIG9yZGVyLCBjdXJyZW50LVxcdTAwM2VwaWQsXFxubW0vcGFnZV9vd25lci5jLTM0MC1cXHRcXHRcXHRcXHRcXHRjdXJyZW50LVxcdTAwM2V0Z2lkLCBmcmVlX3RzX25zZWMpO1xcbi0tXFxubW0vcGFnZV9vd25lci5jPTM5Mz12b2lkIF9fZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZClcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYy00MjUtXFx0ICovXFxubW0vcGFnZV9vd25lci5jOjQyNjpcXHRfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlKFxcdTAwMjZuZXdmb2xpby1cXHUwMDNlcGFnZSwgMCwgb2xkX3BhZ2Vfb3duZXItXFx1MDAzZW9yZGVyLFxcbm1tL3BhZ2Vfb3duZXIuYy00MjctXFx0XFx0XFx0XFx0XFx0b2xkX3BhZ2Vfb3duZXItXFx1MDAzZWZyZWVfcGlkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDowMzoyMi4zNjA5NDI2OTZaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzU3ODAzNzM0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIGBfX2ZvbGlvX2NvcHlfb3duZXJgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgZ29pbmcgb24gaW4gdGhpcyBgX19mb2xpb19jb3B5X293bmVyYCBmdW5jdGlvbi4gVGhlIGNvbnRleHQgSSBuZWVkIGlzIHdpdGhpbiB0aGUgYG1tL3BhZ2Vfb3duZXIuY2AgZmlsZSwgc3BlY2lmaWNhbGx5IGxpbmVzIDM5My00MzUuIFRoYXQncyBhIHJlYXNvbmFibGUgY2h1bmsgb2YgY29kZSwgc28gSSdsbCBuZWVkIHRvIGZvY3VzLiBJJ20gYXNzdW1pbmcgaXQncyBoYW5kbGluZyB0aGUgY29weWluZyBvZiBvd25lcnNoaXAgaW5mb3JtYXRpb24gZm9yIGEgZm9saW8sIGxpa2VseSByZWxhdGVkIHRvIHBhZ2Ugb3duZXJzaGlwIHRyYWNraW5nLCBnaXZlbiB0aGUgZmlsZW5hbWUuIEknbGwgbmVlZCB0byBwYXJzZSB0aGUgbG9naWMgaW4gdGhvc2UgbGluZXMgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBpbXBsZW1lbnRlZC4gSSBleHBlY3QgdGhlcmUncyBzb21lIGtpbmQgb2Ygc291cmNlIGFuZCBkZXN0aW5hdGlvbiBmb2xpbyBpbnZvbHZlZCwgYW5kIHRoZSBmdW5jdGlvbidzIG9iamVjdGl2ZSBpcyB0byBkdXBsaWNhdGUgb3duZXJzaGlwIGRhdGEsIHBlcmhhcHMgcmVmZXJlbmNlIGNvdW50cywgYW5kIHBvc3NpYmx5IG90aGVyIHJlbGF0ZWQgbWV0YWRhdGEsIGR1cmluZyBhIGZvbGlvIGNvcHkgb3BlcmF0aW9uLiBJIHdhbnQgdG8gcGF5IGNhcmVmdWwgYXR0ZW50aW9uIHRvIGFueSBsb2NraW5nIHByaW1pdGl2ZXMgdXNlZCB3aXRoaW4gdGhhdCByZWdpb24uIFRoYXQgd2lsbCB0ZWxsIG1lIGhvdyB0aGlzIGlzIHNhZmVseSBpbnRlZ3JhdGVkIGludG8gdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbS4gT2theSwgbGV0J3MgZ28gbGluZSBieSBsaW5lIGFuZCBzZWUgd2hhdCBpdCdzIHJlYWxseSBkb2luZy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTc4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MDM6MjkuOTM4OTgyNzU5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX293bmVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzkzLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzkzOlxcdHZvaWQgX19mb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKVxcbiAzOTQ6XFx0e1xcbiAzOTU6XFx0XFx0c3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dDtcXG4gMzk2OlxcdFxcdHN0cnVjdCBwYWdlX2V4dF9pdGVyIGl0ZXI7XFxuIDM5NzpcXHRcXHRzdHJ1Y3QgcGFnZV9vd25lciAqb2xkX3BhZ2Vfb3duZXI7XFxuIDM5ODpcXHRcXHRzdHJ1Y3QgcGFnZV9vd25lciAqbmV3X3BhZ2Vfb3duZXI7XFxuIDM5OTpcXHRcXHRkZXBvdF9zdGFja19oYW5kbGVfdCBtaWdyYXRlX2hhbmRsZTtcXG4gNDAwOlxcdFxcbiA0MDE6XFx0XFx0cGFnZV9leHQgPSBwYWdlX2V4dF9nZXQoXFx1MDAyNm9sZC1cXHUwMDNlcGFnZSk7XFxuIDQwMjpcXHRcXHRpZiAodW5saWtlbHkoIXBhZ2VfZXh0KSlcXG4gNDAzOlxcdFxcdFxcdHJldHVybjtcXG4gNDA0OlxcdFxcbiA0MDU6XFx0XFx0b2xkX3BhZ2Vfb3duZXIgPSBnZXRfcGFnZV9vd25lcihwYWdlX2V4dCk7XFxuIDQwNjpcXHRcXHRwYWdlX2V4dF9wdXQocGFnZV9leHQpO1xcbiA0MDc6XFx0XFxuIDQwODpcXHRcXHRwYWdlX2V4dCA9IHBhZ2VfZXh0X2dldChcXHUwMDI2bmV3Zm9saW8tXFx1MDAzZXBhZ2UpO1xcbiA0MDk6XFx0XFx0aWYgKHVubGlrZWx5KCFwYWdlX2V4dCkpXFxuIDQxMDpcXHRcXHRcXHRyZXR1cm47XFxuIDQxMTpcXHRcXG4gNDEyOlxcdFxcdG5ld19wYWdlX293bmVyID0gZ2V0X3BhZ2Vfb3duZXIocGFnZV9leHQpO1xcbiA0MTM6XFx0XFx0cGFnZV9leHRfcHV0KHBhZ2VfZXh0KTtcXG4gNDE0OlxcdFxcbiA0MTU6XFx0XFx0bWlncmF0ZV9oYW5kbGUgPSBuZXdfcGFnZV9vd25lci1cXHUwMDNlaGFuZGxlO1xcbiA0MTY6XFx0XFx0X191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUoXFx1MDAyNm5ld2ZvbGlvLVxcdTAwM2VwYWdlLCBvbGRfcGFnZV9vd25lci1cXHUwMDNlaGFuZGxlLFxcbiA0MTc6XFx0XFx0XFx0XFx0XFx0ICAgb2xkX3BhZ2Vfb3duZXItXFx1MDAzZW9yZGVyLCBvbGRfcGFnZV9vd25lci1cXHUwMDNlZ2ZwX21hc2ssXFxuIDQxODpcXHRcXHRcXHRcXHRcXHQgICBvbGRfcGFnZV9vd25lci1cXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbixcXG4gNDE5OlxcdFxcdFxcdFxcdFxcdCAgIG9sZF9wYWdlX293bmVyLVxcdTAwM2V0c19uc2VjLCBvbGRfcGFnZV9vd25lci1cXHUwMDNlcGlkLFxcbiA0MjA6XFx0XFx0XFx0XFx0XFx0ICAgb2xkX3BhZ2Vfb3duZXItXFx1MDAzZXRnaWQsIG9sZF9wYWdlX293bmVyLVxcdTAwM2Vjb21tKTtcXG4gNDIxOlxcdFxcdC8qXFxuIDQyMjpcXHRcXHQgKiBEbyBub3QgcHJvYWN0aXZlbHkgY2xlYXIgUEFHRV9FWFRfT1dORVJ7X0FMTE9DQVRFRH0gYml0cyBhcyB0aGUgZm9saW9cXG4gNDIzOlxcdFxcdCAqIHdpbGwgYmUgZnJlZWQgYWZ0ZXIgbWlncmF0aW9uLiBLZWVwIHRoZW0gdW50aWwgdGhlbiBhcyB0aGV5IG1heSBiZVxcbiA0MjQ6XFx0XFx0ICogdXNlZnVsLlxcbiA0MjU6XFx0XFx0ICovXFxuIDQyNjpcXHRcXHRfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlKFxcdTAwMjZuZXdmb2xpby1cXHUwMDNlcGFnZSwgMCwgb2xkX3BhZ2Vfb3duZXItXFx1MDAzZW9yZGVyLFxcbiA0Mjc6XFx0XFx0XFx0XFx0XFx0XFx0b2xkX3BhZ2Vfb3duZXItXFx1MDAzZWZyZWVfcGlkLFxcbiA0Mjg6XFx0XFx0XFx0XFx0XFx0XFx0b2xkX3BhZ2Vfb3duZXItXFx1MDAzZWZyZWVfdGdpZCxcXG4gNDI5OlxcdFxcdFxcdFxcdFxcdFxcdG9sZF9wYWdlX293bmVyLVxcdTAwM2VmcmVlX3RzX25zZWMpO1xcbiA0MzA6XFx0XFx0LypcXG4gNDMxOlxcdFxcdCAqIFdlIGxpbmtlZCB0aGUgb3JpZ2luYWwgc3RhY2sgdG8gdGhlIG5ldyBmb2xpbywgd2UgbmVlZCB0byBkbyB0aGUgc2FtZVxcbiA0MzI6XFx0XFx0ICogZm9yIHRoZSBuZXcgb25lIGFuZCB0aGUgb2xkIGZvbGlvIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGFuIGltYmFsYW5jZVxcbiA0MzM6XFx0XFx0ICogd2hlbiBzdWJ0cmFjdGluZyB0aG9zZSBwYWdlcyBmcm9tIHRoZSBzdGFjay5cXG4gNDM0OlxcdFxcdCAqL1xcbiA0MzU6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiA0MzY6XFx0XFx0Zm9yX2VhY2hfcGFnZV9leHQoXFx1MDAyNm9sZC1cXHUwMDNlcGFnZSwgMSBcXHUwMDNjXFx1MDAzYyBuZXdfcGFnZV9vd25lci1cXHUwMDNlb3JkZXIsIHBhZ2VfZXh0LCBpdGVyKSB7XFxuIDQzNzpcXHRcXHRcXHRvbGRfcGFnZV9vd25lciA9IGdldF9wYWdlX293bmVyKHBhZ2VfZXh0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MDM6MjkuOTM5MDg1NDM5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE0OTIzNjEzOTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhZ2UgT3duZXIgRnJlZSBIYW5kbGUgQnVnIGFuZCBBc3Nlc3NpbmcgUmlza3MqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHRoZXJlJ3MgYSBzdHJhaWdodGZvcndhcmQgYnVnIGluIGBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlYC4gVGhlIGZ1bmN0aW9uIHdhcyBzdXBwb3NlZCB0byB1cGRhdGUgdGhlIHBhZ2Ugb3duZXIncyBpbmZvcm1hdGlvbiB3aXRoIHNwZWNpZmljIGBwaWRgIGFuZCBgdGdpZGAgdmFsdWVzIHBhc3NlZCB0byBpdC4gSG93ZXZlciwgdGhlIGNvZGUgd2FzIG1pc3Rha2VubHkgdXNpbmcgYGN1cnJlbnQtXHUwMDNlcGlkYCBhbmQgYGN1cnJlbnQtXHUwMDNldGdpZGAgaW5zdGVhZCwgY29tcGxldGVseSBpZ25vcmluZyB0aGUgcGFzc2VkIGFyZ3VtZW50cyEgVGhpcyBoYXBwZW5lZCBiZWNhdXNlIGluc2lkZSB0aGUgbG9vcCBpbiBgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZWAsIGl0IGhhZCB0aGVzZSBsaW5lczpcblxuYGBgY1xucGFnZV9vd25lci1cdTAwM2VmcmVlX3RzX25zZWMgPSBmcmVlX3RzX25zZWM7XG5wYWdlX293bmVyLVx1MDAzZWZyZWVfcGlkID0gY3VycmVudC1cdTAwM2VwaWQ7XG5wYWdlX293bmVyLVx1MDAzZWZyZWVfdGdpZCA9IGN1cnJlbnQtXHUwMDNldGdpZDtcbmBgYFxuXG5TbyB3aGVuIGBfX2ZvbGlvX2NvcHlfb3duZXJgIGNhbGxlZCBgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZWAgd2l0aCwgc2F5LCB0aGUgb2xkIHBhZ2Ugb3duZXIncyBgZnJlZV9waWRgIGFuZCBgZnJlZV90Z2lkYCwgaXQgd2FzIGNsb2JiZXJpbmcgdGhvc2Ugd2l0aCB0aGUgKmN1cnJlbnQqIHByb2Nlc3MncyBpbmZvcm1hdGlvbi4gIFRoZSBmaXggaXMsIG9mIGNvdXJzZSwgYSBzaW1wbGUgc3dhcCB0byB1c2luZyB0aGUgcHJvdmlkZWQgdmFsdWVzOlxuXG5gYGBjXG4tXHRcdHBhZ2Vfb3duZXItXHUwMDNlZnJlZV9waWQgPSBjdXJyZW50LVx1MDAzZXBpZDtcbi1cdFx0cGFnZV9vd25lci1cdTAwM2VmcmVlX3RnaWQgPSBjdXJyZW50LVx1MDAzZXRnaWQ7XG4rXHRcdHBhZ2Vfb3duZXItXHUwMDNlZnJlZV9waWQgPSBwaWQ7XG4rXHRcdHBhZ2Vfb3duZXItXHUwMDNlZnJlZV90Z2lkID0gdGdpZDtcbmBgYFxuXG5Ob3csIGxldCdzIGJlIHRob3JvdWdoIGFuZCBsb29rIGF0IHRoZSBwb3RlbnRpYWwgcmlza3MuIERvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcz8gIFdlIGhhdmUgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBUaGUga2V5IGhlcmUgaXMgdGhhdCB0aGUgYHBpZGAgYW5kIGB0Z2lkYCBhcmUgcGFzc2VkIGFzIHNjYWxhciBgcGlkX3RgIHZhbHVlcy4gSW4gdGhlIGNhbGwgY2hhaW4sIGBfX3Jlc2V0X3BhZ2Vfb3duZXJgIHBhc3NlcyBgY3VycmVudC1cdTAwM2VwaWRgIGFuZCBgY3VycmVudC1cdTAwM2V0Z2lkYCwgd2hpY2ggYXJlIGluaXRpYWxpemVkLiBUaGVuLCBgX19mb2xpb19jb3B5X293bmVyYCBwYXNzZXMgYG9sZF9wYWdlX293bmVyLVx1MDAzZWZyZWVfcGlkYCBhbmQgYG9sZF9wYWdlX293bmVyLVx1MDAzZWZyZWVfdGdpZGAsIHdoaWNoIHdlIGFzc3VtZSB3ZXJlIGFsc28gaW5pdGlhbGl6ZWQgZWxzZXdoZXJlIHdoZW4gdGhlIHBhZ2Ugd2FzIGZpcnN0IGZyZWVkICh3aGljaCBpcyB0aGUgcG9pbnQgb2YgdGhlIHdob2xlIHRyYWNraW5nIG1lY2hhbmlzbSkuXG5cblRoZXJlZm9yZTpcblxuMS4gIGBwaWRgIGFuZCBgdGdpZGAgYXJlIHNjYWxhciB2YWx1ZSBhcmd1bWVudHMgYW5kIGFyZSBpbml0aWFsaXplZCB3aGVuIHBhc3NlZCB0byBgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZWAuXG4yLiAgVGhlcmUgYXJlbid0IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgcG90ZW50aWFsIGxlYWtzLCBicmFuY2hlcyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGNvbXBsZXggc3RydWN0IGFsbG9jYXRpb25zIGludm9sdmVkIGhlcmUuXG4zLiBUaGlzIGlzIHB1cmVseSBhIGxvZ2ljIGJ1ZyBmaXhpbmcgdGhlIHRyYWNraW5nIG9mIHRoZSBwcmV2aW91cyBvd25lci5cbjQuICBObyBLTVNBTiBmdXp6aW5nIGlzIG5lY2Vzc2FyeS4gIEl0J3MgYSBzdHJhaWdodGZvcndhcmQgaW50ZWdlciBkYXRhIGZsb3cgaXNzdWUuXG5cbldlIHNob3VsZCBiZSBnb29kLCBidXQgbGV0J3MganVzdCBtYWtlIG9uZSBsYXN0IHNhbml0eSBjaGVjazpcblxuKiAgIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMuXG4qICAgTm8gY2hhbmdlcyB0byBib3VuZHMgb3IgbGVuZ3Rocy5cbiogICBObyBjb25kaXRpb25hbCBqdW1wcyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEuXG4qICAgTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgY29waWVkIHRvIHVzZXJzcGFjZS5cbiogICBBbGwgaW52b2x2ZWQgdmFsdWVzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBpbnRlZ2Vycy5cblxuT2theSwgSSdtIHNhdGlzZmllZC4gVGltZSB0byB3cml0ZSB1cCB0aGUgcmVhc29uaW5nIGFuZCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDk2LCJPdXRwdXRUb2tlbnMiOjE4NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjAzOjQ0Ljg2MjcwMjE3NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGUoKWAgd2hlcmUgdGhlIGZ1bmN0aW9uIHdhcyBhc3NpZ25pbmcgYGN1cnJlbnQtXFx1MDAzZXBpZGAgYW5kIGBjdXJyZW50LVxcdTAwM2V0Z2lkYCBpbnN0ZWFkIG9mIHRoZSBwYXNzZWQtaW4gYHBpZGAgYW5kIGB0Z2lkYCBmdW5jdGlvbiBhcmd1bWVudHMuIFRoZSBwYXNzZWQgcGFyYW1ldGVycyBhcmUgcHJpbWl0aXZlIHNjYWxhciB0eXBlcyAoYHBpZF90YCkgdGhhdCBhcmUgaW5pdGlhbGl6ZWQgYnkgY2FsbGVycyAoYGN1cnJlbnQtXFx1MDAzZXBpZGAvYGN1cnJlbnQtXFx1MDAzZXRnaWRgIGluIGBfX3Jlc2V0X3BhZ2Vfb3duZXJgIG9yIGBvbGRfcGFnZV9vd25lci1cXHUwMDNlZnJlZV9waWRgL2BmcmVlX3RnaWRgIGluIGBfX2ZvbGlvX2NvcHlfb3duZXJgKS4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBzdHJ1Y3QgcGFkZGluZyBsZWFrcyB0byB1c2VyIHNwYWNlLCBvciBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGUoKWAgd2hlcmUgdGhlIGZ1bmN0aW9uIHdhcyBhc3NpZ25pbmcgYGN1cnJlbnQtXFx1MDAzZXBpZGAgYW5kIGBjdXJyZW50LVxcdTAwM2V0Z2lkYCBpbnN0ZWFkIG9mIHRoZSBwYXNzZWQtaW4gYHBpZGAgYW5kIGB0Z2lkYCBmdW5jdGlvbiBhcmd1bWVudHMuIFRoZSBwYXNzZWQgcGFyYW1ldGVycyBhcmUgcHJpbWl0aXZlIHNjYWxhciB0eXBlcyAoYHBpZF90YCkgdGhhdCBhcmUgaW5pdGlhbGl6ZWQgYnkgY2FsbGVycyAoYGN1cnJlbnQtXFx1MDAzZXBpZGAvYGN1cnJlbnQtXFx1MDAzZXRnaWRgIGluIGBfX3Jlc2V0X3BhZ2Vfb3duZXJgIG9yIGBvbGRfcGFnZV9vd25lci1cXHUwMDNlZnJlZV9waWRgL2BmcmVlX3RnaWRgIGluIGBfX2ZvbGlvX2NvcHlfb3duZXJgKS4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBzdHJ1Y3QgcGFkZGluZyBsZWFrcyB0byB1c2VyIHNwYWNlLCBvciBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflown5tlg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 13:23:18 +0000 UTC FinishedAt: 2026-09-04 14:03:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "43131d0d3d34e22d6e9072ec25c63dec7a9a646b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PAGE_OWNER", "MIGRATION" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "43131d0d3d34e22d6e9072ec25c63dec7a9a646b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PAGE_OWNER", "MIGRATION" ], "series_id": "6e75328f-a467-46f6-b545-936e25c8d584" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__folio_copy_owner", "folio_migrate_flags" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEzOjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQQUdFX09XTkVSJiMzNDssCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fZm9saW9fY29weV9vd25lciYjMzQ7LAogICAgJiMzNDtmb2xpb19taWdyYXRlX2ZsYWdzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGUoKWAgd2hlcmUgdGhlIGZ1bmN0aW9uIHdhcyBhc3NpZ25pbmcgYGN1cnJlbnQtXHUwMDNlcGlkYCBhbmQgYGN1cnJlbnQtXHUwMDNldGdpZGAgaW5zdGVhZCBvZiB0aGUgcGFzc2VkLWluIGBwaWRgIGFuZCBgdGdpZGAgZnVuY3Rpb24gYXJndW1lbnRzLiBUaGUgcGFzc2VkIHBhcmFtZXRlcnMgYXJlIHByaW1pdGl2ZSBzY2FsYXIgdHlwZXMgKGBwaWRfdGApIHRoYXQgYXJlIGluaXRpYWxpemVkIGJ5IGNhbGxlcnMgKGBjdXJyZW50LVx1MDAzZXBpZGAvYGN1cnJlbnQtXHUwMDNldGdpZGAgaW4gYF9fcmVzZXRfcGFnZV9vd25lcmAgb3IgYG9sZF9wYWdlX293bmVyLVx1MDAzZWZyZWVfcGlkYC9gZnJlZV90Z2lkYCBpbiBgX19mb2xpb19jb3B5X293bmVyYCkuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgc3RydWN0IHBhZGRpbmcgbGVha3MgdG8gdXNlciBzcGFjZSwgb3IgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBtbS9wYWdlX293bmVyLmMgd2hlcmUgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZSgpIGlnbm9yZWQgdGhlIHBhc3NlZCBwaWQgYW5kIHRnaWQgYXJndW1lbnRzIGFuZCBpbnN0ZWFkIHVzZWQgY3VycmVudC1cdTAwM2VwaWQgYW5kIGN1cnJlbnQtXHUwMDNldGdpZC4gVGhpcyBkaXJlY3RseSBhZmZlY3RzIGZvbGlvIG1pZ3JhdGlvbiBpbiBfX2ZvbGlvX2NvcHlfb3duZXIoKSwgd2hlcmUgdGhlIG9yaWdpbmFsIG93bmVyJiMzOTtzIGZyZWVfcGlkIGFuZCBmcmVlX3RnaWQgbmVlZCB0byBiZSBwcmVzZXJ2ZWQuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IHRyYWNraW5nIGxvZ2ljIGluIGNvcmUgbW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTM6NTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2ZDEyYzgyNDY1NmM5YjgzN2MyODI0MzhjZWUyM2ZjZWRmNWU4ZTBjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxMzo1MzozMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9wYWdlX293bmVyLmMgYi9tbS9wYWdlX293bmVyLmNcbmluZGV4IDNmYzM3ZDliOTA4ZWYuLmNmYzMxYzkyZDc2NTcgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX293bmVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2Vfb3duZXIuY1xuQEAgLTMwNyw4ICYjNDM7MzA3LDggQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGUoc3RydWN0IHBhZ2UgKnBhZ2UsXG4gXHRcdFx0cGFnZV9vd25lci1cdTAwM2VmcmVlX2hhbmRsZSA9IGhhbmRsZTtcbiBcdFx0fVxuIFx0XHRwYWdlX293bmVyLVx1MDAzZWZyZWVfdHNfbnNlYyA9IGZyZWVfdHNfbnNlYztcbi1cdFx0cGFnZV9vd25lci1cdTAwM2VmcmVlX3BpZCA9IGN1cnJlbnQtXHUwMDNlcGlkO1xuLVx0XHRwYWdlX293bmVyLVx1MDAzZWZyZWVfdGdpZCA9IGN1cnJlbnQtXHUwMDNldGdpZDtcbiYjNDM7XHRcdHBhZ2Vfb3duZXItXHUwMDNlZnJlZV9waWQgPSBwaWQ7XG4mIzQzO1x0XHRwYWdlX293bmVyLVx1MDAzZWZyZWVfdGdpZCA9IHRnaWQ7XG4gXHR9XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTM6NTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEFHRV9PV05FUiYjMzQ7LAogICAgJiMzNDtNSUdSQVRJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2ZvbGlvX2NvcHlfb3duZXImIzM0OywKICAgICYjMzQ7Zm9saW9fbWlncmF0ZV9mbGFncyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBtbS9wYWdlX293bmVyLmMgd2hlcmUgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZSgpIGlnbm9yZWQgdGhlIHBhc3NlZCBwaWQgYW5kIHRnaWQgYXJndW1lbnRzIGFuZCBpbnN0ZWFkIHVzZWQgY3VycmVudC1cdTAwM2VwaWQgYW5kIGN1cnJlbnQtXHUwMDNldGdpZC4gVGhpcyBkaXJlY3RseSBhZmZlY3RzIGZvbGlvIG1pZ3JhdGlvbiBpbiBfX2ZvbGlvX2NvcHlfb3duZXIoKSwgd2hlcmUgdGhlIG9yaWdpbmFsIG93bmVyJiMzOTtzIGZyZWVfcGlkIGFuZCBmcmVlX3RnaWQgbmVlZCB0byBiZSBwcmVzZXJ2ZWQuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IHRyYWNraW5nIGxvZ2ljIGluIGNvcmUgbW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2ZDEyYzgyNDY1NmM5YjgzN2MyODI0MzhjZWUyM2ZjZWRmNWU4ZTBjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAxMzo1MzozMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3BhZ2Vfb3duZXIuYyBiL21tL3BhZ2Vfb3duZXIuYwppbmRleCAzZmMzN2Q5YjkwOGVmLi5jZmMzMWM5MmQ3NjU3IDEwMDY0NAotLS0gYS9tbS9wYWdlX293bmVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9vd25lci5jCkBAIC0zMDcsOCAmIzQzOzMwNyw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlKHN0cnVjdCBwYWdlICpwYWdlLAogCQkJcGFnZV9vd25lci0mZ3Q7ZnJlZV9oYW5kbGUgPSBoYW5kbGU7CiAJCX0KIAkJcGFnZV9vd25lci0mZ3Q7ZnJlZV90c19uc2VjID0gZnJlZV90c19uc2VjOwotCQlwYWdlX293bmVyLSZndDtmcmVlX3BpZCA9IGN1cnJlbnQtJmd0O3BpZDsKLQkJcGFnZV9vd25lci0mZ3Q7ZnJlZV90Z2lkID0gY3VycmVudC0mZ3Q7dGdpZDsKJiM0MzsJCXBhZ2Vfb3duZXItJmd0O2ZyZWVfcGlkID0gcGlkOwomIzQzOwkJcGFnZV9vd25lci0mZ3Q7ZnJlZV90Z2lkID0gdGdpZDsKIAl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEzOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4ODUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBgbW0vcGFnZV9vd25lci5jYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBtb2RpZmllZCBmaWxlLCB3aGljaCBpcyBgbW0vcGFnZV9vd25lci5jYC4gR2l2ZW4gdGhhdCBJJiMzOTttIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCwgdGhpcyBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBjaGFuZ2VzLCBzbyBteSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgY29kZSBhcm91bmQgbGluZSAzMDcuIEkmIzM5O2xsIGxpa2VseSB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIHF1aWNrbHkgaXNvbGF0ZSB0aGUgcmVsZXZhbnQgc2VjdGlvbiBvZiB0aGUgY29kZSBhbmQgZ2V0IGEgY2xlYXJlciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgdGhlIHBhdGNoIGlzIGRvaW5nIGFuZCBob3cgaXQgY291bGQgcG90ZW50aWFsbHkgaW1wYWN0IHRoZSBzeXN0ZW0uIEl0IGlzIGltcG9ydGFudCB0byBrbm93IHRoZSBjb250ZXh0LCBhbmQgd2hhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBkb2VzIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX293bmVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI5MDpcdFxuIDI5MTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlKHN0cnVjdCBwYWdlICpwYWdlLFxuIDI5MjpcdFx0XHRcdFx0XHRcdCAgIGRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZSxcbiAyOTM6XHRcdFx0XHRcdFx0XHQgICB1bnNpZ25lZCBzaG9ydCBvcmRlcixcbiAyOTQ6XHRcdFx0XHRcdFx0XHQgICBwaWRfdCBwaWQsIHBpZF90IHRnaWQsXG4gMjk1Olx0XHRcdFx0XHRcdFx0ICAgdTY0IGZyZWVfdHNfbnNlYylcbiAyOTY6XHR7XG4gMjk3Olx0XHRzdHJ1Y3QgcGFnZV9leHRfaXRlciBpdGVyO1xuIDI5ODpcdFx0c3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dDtcbiAyOTk6XHRcdHN0cnVjdCBwYWdlX293bmVyICpwYWdlX293bmVyO1xuIDMwMDpcdFxuIDMwMTpcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDMwMjpcdFx0Zm9yX2VhY2hfcGFnZV9leHQocGFnZSwgMSBcdTAwM2NcdTAwM2Mgb3JkZXIsIHBhZ2VfZXh0LCBpdGVyKSB7XG4gMzAzOlx0XHRcdHBhZ2Vfb3duZXIgPSBnZXRfcGFnZV9vd25lcihwYWdlX2V4dCk7XG4gMzA0Olx0XHRcdC8qIE9ubHkgX19yZXNldF9wYWdlX293bmVyKCkgd2FudHMgdG8gY2xlYXIgdGhlIGJpdCAqL1xuIDMwNTpcdFx0XHRpZiAoaGFuZGxlKSB7XG4gMzA2Olx0XHRcdFx0X19jbGVhcl9iaXQoUEFHRV9FWFRfT1dORVJfQUxMT0NBVEVELCBcdTAwMjZwYWdlX2V4dC1cdTAwM2VmbGFncyk7XG4gMzA3Olx0XHRcdFx0cGFnZV9vd25lci1cdTAwM2VmcmVlX2hhbmRsZSA9IGhhbmRsZTtcbiAzMDg6XHRcdFx0fVxuIDMwOTpcdFx0XHRwYWdlX293bmVyLVx1MDAzZWZyZWVfdHNfbnNlYyA9IGZyZWVfdHNfbnNlYztcbiAzMTA6XHRcdFx0cGFnZV9vd25lci1cdTAwM2VmcmVlX3BpZCA9IHBpZDtcbiAzMTE6XHRcdFx0cGFnZV9vd25lci1cdTAwM2VmcmVlX3RnaWQgPSB0Z2lkO1xuIDMxMjpcdFx0fVxuIDMxMzpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gMzE0Olx0fVxuIDMxNTpcdFxuIDMxNjpcdHZvaWQgX19yZXNldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBzaG9ydCBvcmRlcilcbiAzMTc6XHR7XG4gMzE4Olx0XHRzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0O1xuIDMxOTpcdFx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlO1xuIDMyMDpcdFx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgYWxsb2NfaGFuZGxlO1xuIDMyMTpcdFx0c3RydWN0IHBhZ2Vfb3duZXIgKnBhZ2Vfb3duZXI7XG4gMzIyOlx0XHR1NjQgZnJlZV90c19uc2VjID0gbG9jYWxfY2xvY2soKTtcbiAzMjM6XHRcbiAzMjQ6XHRcdHBhZ2VfZXh0ID0gcGFnZV9leHRfZ2V0KHBhZ2UpO1xuIDMyNTpcdFx0aWYgKHVubGlrZWx5KCFwYWdlX2V4dCkpXG4gMzI2Olx0XHRcdHJldHVybjtcbiAzMjc6XHRcbiAzMjg6XHRcdHBhZ2Vfb3duZXIgPSBnZXRfcGFnZV9vd25lcihwYWdlX2V4dCk7XG4gMzI5Olx0XHRhbGxvY19oYW5kbGUgPSBwYWdlX293bmVyLVx1MDAzZWhhbmRsZTtcbiAzMzA6XHRcdHBhZ2VfZXh0X3B1dChwYWdlX2V4dCk7XG4gMzMxOlx0XG4gMzMyOlx0XHQvKlxuIDMzMzpcdFx0ICogRG8gbm90IHNwZWNpZnkgR0ZQX05PV0FJVCB0byBtYWtlIGdmcGZsYWdzX2FsbG93X3NwaW5uaW5nKCkgPT0gZmFsc2VcbiAzMzQ6XHRcdCAqIHRvIHByZXZlbnQgaXNzdWVzIGluIHN0YWNrX2RlcG90X3NhdmUoKS5cbiAzMzU6XHRcdCAqIFRoaXMgaXMgc2ltaWxhciB0byBhbGxvY19wYWdlc19ub2xvY2soKSBnZnAgZmxhZ3MsIGJ1dCBvbmx5IHVzZWRcbiAzMzY6XHRcdCAqIHRvIHNpZ25hbCBzdGFja19kZXBvdCB0byBhdm9pZCBzcGluX2xvY2tzLlxuIDMzNzpcdFx0ICovXG4gMzM4Olx0XHRoYW5kbGUgPSBzYXZlX3N0YWNrKF9fR0ZQX05PV0FSTik7XG4gMzM5Olx0XHRfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlKHBhZ2UsIGhhbmRsZSwgb3JkZXIsIGN1cnJlbnQtXHUwMDNlcGlkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NDUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2UgYXJlIG15IGltbWVkaWF0ZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlYCBDYWxsZXJzKioKCkFscmlnaHQsIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgdGhvcm91Z2hseSBpbnZlc3RpZ2F0ZSB0aGUgY2FsbGVycyBvZiBgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZWAuIFRoaXMgdXN1YWxseSBpbmRpY2F0ZXMgYSBjcml0aWNhbCBhcmVhIG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0sIHNvIGFueSBjaGFuZ2VzIG9yIGlzc3VlcyBoZXJlIGFyZSBsaWtlbHkgdG8gaGF2ZSBhIGNhc2NhZGluZyBlZmZlY3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIOKAkyB3aGF0JiMzOTtzIHRoZSBpbnRlbmRlZCBwdXJwb3NlLCB3aGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgaW52b2x2ZWQsIGFuZCB3aGF0JiMzOTtzIHRoZSB0eXBpY2FsIHdvcmtmbG93IHN1cnJvdW5kaW5nIGl0PyBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoZSBhcmd1bWVudHMgYmVpbmcgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbiwgYXMgdGhhdCYjMzk7bGwgZ2l2ZSBtZSBjbHVlcyBhYm91dCB0aGUgc3BlY2lmaWMgY29udGV4dCBpbiB3aGljaCBpdCBvcGVyYXRlcy4gSXMgaXQgZGVhbGluZyB3aXRoIHBhZ2UgZnJlZWluZz8gUGFnZSBhbGxvY2F0aW9uIHRyYWNraW5nPyBTb21ldGhpbmcgZWxzZSBlbnRpcmVseT8KCk9uY2UgSSBoYXZlIGEgZmlybSBncmFzcCBvbiB0aGUgY2FsbGVycyB0aGVtc2VsdmVzLCBJJiMzOTtsbCB0aGVuIGV4cGFuZCBteSBmb2N1cyB0byBlbmNvbXBhc3MgdGhlICYjMzQ7c3Vycm91bmRpbmcgY29kZS4mIzM0OyBJIGNhbiYjMzk7dCBqdXN0IGxvb2sgYXQgdGhlIGRpcmVjdCBjYWxsczsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mICpob3cqIHRoZXNlIGNhbGxzIGZpdCBpbnRvIHRoZSBncmVhdGVyIHNjaGVtZSBvZiBtZW1vcnkgbWFuYWdlbWVudC4gV2hhdCBvcGVyYXRpb25zIGNvbWUgYmVmb3JlIHRoZSBjYWxsLCBhbmQgd2hhdCBvcGVyYXRpb25zIGhhcHBlbiBpbW1lZGlhdGVseSBhZnRlcndhcmRzPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGxvY2tpbmcgaXNzdWVzLCBvciBzdWJ0bGUgZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgYmUgcHJvYmxlbWF0aWM/IFdoYXQmIzM5O3MgdGhlIGVycm9yIGhhbmRsaW5nIGxpa2UgaW4gdGhpcyBzZWN0aW9uPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBleGVjdXRpb24gcGF0aCB0aGF0IGxlYWRzIHRvIHRoaXMgZnVuY3Rpb24gY2FsbD8gQW5kIHdoYXQgYXNzdW1wdGlvbnMgYXJlIGJlaW5nIG1hZGUgYWJvdXQgdGhlIHN0YXRlIG9mIHRoZSBzeXN0ZW0gYXQgdGhhdCBwb2ludD8gVGhlIGRldmlsIGlzIGFsd2F5cyBpbiB0aGUgZGV0YWlscywgc28gSSBuZWVkIHRvIGtub3cgdGhpcyBpbnNpZGUgYW5kIG91dC4gSXQmIzM5O3MgdGltZSB0byBkaWcgZGVlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2Vfb3duZXIuYz0yNjI9c3RhdGljIGlubGluZSB2b2lkIF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbm1tL3BhZ2Vfb3duZXIuYy0yOTAtXG5tbS9wYWdlX293bmVyLmM6MjkxOnN0YXRpYyBpbmxpbmUgdm9pZCBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlKHN0cnVjdCBwYWdlICpwYWdlLFxubW0vcGFnZV9vd25lci5jLTI5Mi1cdFx0XHRcdFx0XHQgICBkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGUsXG4tLVxubW0vcGFnZV9vd25lci5jPTMxNj12b2lkIF9fcmVzZXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgc2hvcnQgb3JkZXIpXG4tLVxubW0vcGFnZV9vd25lci5jLTMzOC1cdGhhbmRsZSA9IHNhdmVfc3RhY2soX19HRlBfTk9XQVJOKTtcbm1tL3BhZ2Vfb3duZXIuYzozMzk6XHRfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlKHBhZ2UsIGhhbmRsZSwgb3JkZXIsIGN1cnJlbnQtXHUwMDNlcGlkLFxubW0vcGFnZV9vd25lci5jLTM0MC1cdFx0XHRcdFx0Y3VycmVudC1cdTAwM2V0Z2lkLCBmcmVlX3RzX25zZWMpO1xuLS1cbm1tL3BhZ2Vfb3duZXIuYz0zOTM9dm9pZCBfX2ZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpXG4tLVxubW0vcGFnZV9vd25lci5jLTQyNS1cdCAqL1xubW0vcGFnZV9vd25lci5jOjQyNjpcdF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGUoXHUwMDI2bmV3Zm9saW8tXHUwMDNlcGFnZSwgMCwgb2xkX3BhZ2Vfb3duZXItXHUwMDNlb3JkZXIsXG5tbS9wYWdlX293bmVyLmMtNDI3LVx0XHRcdFx0XHRvbGRfcGFnZV9vd25lci1cdTAwM2VmcmVlX3BpZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjkxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byBgcGFnZV9vd25lci5jYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBwYWdlIG93bmVyc2hpcCBpcyB0cmFja2VkIGluIHRoaXMgc3lzdGVtLCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgbW0vcGFnZV9vd25lci5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gemVyb2luZyBpbiBvbiB0aGUgYF9fZm9saW9fY29weV9vd25lcmAgZnVuY3Rpb24uIFRoZSBuYW1pbmcgc3VnZ2VzdHMgdGhpcyBpcyBrZXkgdG8gaG93IG93bmVyc2hpcCBpcyB0cmFuc2ZlcnJlZCBvciBjb3BpZWQsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJJiMzOTttIGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZy4gVG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJlYWQgbGluZXMgMzgwIHRocm91Z2ggNDUwLiBUaG9zZSBsaW5lcyBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBsb2dpYyBzdXJyb3VuZGluZyB0aGUgY29weSBvcGVyYXRpb25zIGFuZCBob3cgb3duZXJzaGlwIGlzIGhhbmRsZWQgZHVyaW5nIHRoYXQgcHJvY2Vzcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGdvaW5nIG9uIGluIHRoYXQgc2VjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BhZ2Vfb3duZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzgwOlx0e1xuIDM4MTpcdFx0c3RydWN0IHBhZ2VfZXh0X2l0ZXIgaXRlcjtcbiAzODI6XHRcdHN0cnVjdCBwYWdlX2V4dCAqcGFnZV9leHQ7XG4gMzgzOlx0XHRzdHJ1Y3QgcGFnZV9vd25lciAqcGFnZV9vd25lcjtcbiAzODQ6XHRcbiAzODU6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiAzODY6XHRcdGZvcl9lYWNoX3BhZ2VfZXh0KHBhZ2UsIDEgXHUwMDNjXHUwMDNjIG9sZF9vcmRlciwgcGFnZV9leHQsIGl0ZXIpIHtcbiAzODc6XHRcdFx0cGFnZV9vd25lciA9IGdldF9wYWdlX293bmVyKHBhZ2VfZXh0KTtcbiAzODg6XHRcdFx0cGFnZV9vd25lci1cdTAwM2VvcmRlciA9IG5ld19vcmRlcjtcbiAzODk6XHRcdH1cbiAzOTA6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDM5MTpcdH1cbiAzOTI6XHRcbiAzOTM6XHR2b2lkIF9fZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZClcbiAzOTQ6XHR7XG4gMzk1Olx0XHRzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0O1xuIDM5NjpcdFx0c3RydWN0IHBhZ2VfZXh0X2l0ZXIgaXRlcjtcbiAzOTc6XHRcdHN0cnVjdCBwYWdlX293bmVyICpvbGRfcGFnZV9vd25lcjtcbiAzOTg6XHRcdHN0cnVjdCBwYWdlX293bmVyICpuZXdfcGFnZV9vd25lcjtcbiAzOTk6XHRcdGRlcG90X3N0YWNrX2hhbmRsZV90IG1pZ3JhdGVfaGFuZGxlO1xuIDQwMDpcdFxuIDQwMTpcdFx0cGFnZV9leHQgPSBwYWdlX2V4dF9nZXQoXHUwMDI2b2xkLVx1MDAzZXBhZ2UpO1xuIDQwMjpcdFx0aWYgKHVubGlrZWx5KCFwYWdlX2V4dCkpXG4gNDAzOlx0XHRcdHJldHVybjtcbiA0MDQ6XHRcbiA0MDU6XHRcdG9sZF9wYWdlX293bmVyID0gZ2V0X3BhZ2Vfb3duZXIocGFnZV9leHQpO1xuIDQwNjpcdFx0cGFnZV9leHRfcHV0KHBhZ2VfZXh0KTtcbiA0MDc6XHRcbiA0MDg6XHRcdHBhZ2VfZXh0ID0gcGFnZV9leHRfZ2V0KFx1MDAyNm5ld2ZvbGlvLVx1MDAzZXBhZ2UpO1xuIDQwOTpcdFx0aWYgKHVubGlrZWx5KCFwYWdlX2V4dCkpXG4gNDEwOlx0XHRcdHJldHVybjtcbiA0MTE6XHRcbiA0MTI6XHRcdG5ld19wYWdlX293bmVyID0gZ2V0X3BhZ2Vfb3duZXIocGFnZV9leHQpO1xuIDQxMzpcdFx0cGFnZV9leHRfcHV0KHBhZ2VfZXh0KTtcbiA0MTQ6XHRcbiA0MTU6XHRcdG1pZ3JhdGVfaGFuZGxlID0gbmV3X3BhZ2Vfb3duZXItXHUwMDNlaGFuZGxlO1xuIDQxNjpcdFx0X191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUoXHUwMDI2bmV3Zm9saW8tXHUwMDNlcGFnZSwgb2xkX3BhZ2Vfb3duZXItXHUwMDNlaGFuZGxlLFxuIDQxNzpcdFx0XHRcdFx0ICAgb2xkX3BhZ2Vfb3duZXItXHUwMDNlb3JkZXIsIG9sZF9wYWdlX293bmVyLVx1MDAzZWdmcF9tYXNrLFxuIDQxODpcdFx0XHRcdFx0ICAgb2xkX3BhZ2Vfb3duZXItXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbixcbiA0MTk6XHRcdFx0XHRcdCAgIG9sZF9wYWdlX293bmVyLVx1MDAzZXRzX25zZWMsIG9sZF9wYWdlX293bmVyLVx1MDAzZXBpZCxcbiA0MjA6XHRcdFx0XHRcdCAgIG9sZF9wYWdlX293bmVyLVx1MDAzZXRnaWQsIG9sZF9wYWdlX293bmVyLVx1MDAzZWNvbW0pO1xuIDQyMTpcdFx0LypcbiA0MjI6XHRcdCAqIERvIG5vdCBwcm9hY3RpdmVseSBjbGVhciBQQUdFX0VYVF9PV05FUntfQUxMT0NBVEVEfSBiaXRzIGFzIHRoZSBmb2xpb1xuIDQyMzpcdFx0ICogd2lsbCBiZSBmcmVlZCBhZnRlciBtaWdyYXRpb24uIEtlZXAgdGhlbSB1bnRpbCB0aGVuIGFzIHRoZXkgbWF5IGJlXG4gNDI0Olx0XHQgKiB1c2VmdWwuXG4gNDI1Olx0XHQgKi9cbiA0MjY6XHRcdF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGUoXHUwMDI2bmV3Zm9saW8tXHUwMDNlcGFnZSwgMCwgb2xkX3BhZ2Vfb3duZXItXHUwMDNlb3JkZXIsXG4gNDI3Olx0XHRcdFx0XHRcdG9sZF9wYWdlX293bmVyLVx1MDAzZWZyZWVfcGlkLFxuIDQyODpcdFx0XHRcdFx0XHRvbGRfcGFnZV9vd25lci1cdTAwM2VmcmVlX3RnaWQsXG4gNDI5Olx0XHRcdFx0XHRcdG9sZF9wYWdlX293bmVyLVx1MDAzZWZyZWVfdHNfbnNlYyk7XG4gNDMwOlx0XHQvKlxuIDQzMTpcdFx0ICogV2UgbGlua2VkIHRoZSBvcmlnaW5hbCBzdGFjayB0byB0aGUgbmV3IGZvbGlvLCB3ZSBuZWVkIHRvIGRvIHRoZSBzYW1lXG4gNDMyOlx0XHQgKiBmb3IgdGhlIG5ldyBvbmUgYW5kIHRoZSBvbGQgZm9saW8gb3RoZXJ3aXNlIHRoZXJlIHdpbGwgYmUgYW4gaW1iYWxhbmNlXG4gNDMzOlx0XHQgKiB3aGVuIHN1YnRyYWN0aW5nIHRob3NlIHBhZ2VzIGZyb20gdGhlIHN0YWNrLlxuIDQzNDpcdFx0ICovXG4gNDM1Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gNDM2Olx0XHRmb3JfZWFjaF9wYWdlX2V4dChcdTAwMjZvbGQtXHUwMDNlcGFnZSwgMSBcdTAwM2NcdTAwM2MgbmV3X3BhZ2Vfb3duZXItXHUwMDNlb3JkZXIsIHBhZ2VfZXh0LCBpdGVyKSB7XG4gNDM3Olx0XHRcdG9sZF9wYWdlX293bmVyID0gZ2V0X3BhZ2Vfb3duZXIocGFnZV9leHQpO1xuIDQzODpcdFx0XHRvbGRfcGFnZV9vd25lci1cdTAwM2VoYW5kbGUgPSBtaWdyYXRlX2hhbmRsZTtcbiA0Mzk6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTU1CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMzE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBQYWdlIE93bmVyIEJ1ZyBhbmQgaXRzIEZpeCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlYCBmdW5jdGlvbiBhbmQgaXRzIHBhcmFtZXRlcnM6IGBwYWdlYCwgYGhhbmRsZWAsIGBvcmRlcmAsIGBwaWRgLCBgdGdpZGAsIGFuZCBgZnJlZV90c19uc2VjYC4gVGhlIGNvcmUgb2YgdGhlIGlzc3VlIGlzIHRoYXQgaW5zaWRlIHRoaXMgZnVuY3Rpb24sIGl0JiMzOTtzIHVwZGF0aW5nIHRoZSBgcGFnZV9vd25lcmAgc3RydWN0IHdpdGggYGN1cnJlbnQtJmd0O3BpZGAgYW5kIGBjdXJyZW50LSZndDt0Z2lkYCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBgcGlkYCBhbmQgYHRnaWRgIHZhbHVlcyB0aGF0IHdlcmUgcGFzc2VkIGluLiBUaGlzIGlzIGEgY2xhc3NpYyBidWc6IHRoZSBmdW5jdGlvbiYjMzk7cyBjb250cmFjdCBpc24mIzM5O3QgYmVpbmcgdXBoZWxkLiBJdCBzaG91bGQgYmUgdXNpbmcgdGhlIHByb3ZpZGVkIGlkZW50aWZpZXJzLCBidXQgaXQmIzM5O3MgaW5hZHZlcnRlbnRseSByZXBsYWNpbmcgdGhlbSB3aXRoIHRoZSBjYWxsZXImIzM5O3MgcHJvY2VzcyBhbmQgdGhyZWFkIElEcy4KCkRpZ2dpbmcgZnVydGhlciwgSSBzZWUgdGhhdCBgX19mb2xpb19jb3B5X293bmVyYCBjYWxscyBgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZWAuIFNwZWNpZmljYWxseSwgaXQgY2FsbHMgdGhpcyBmdW5jdGlvbiB3aXRoIHRoZSB2YWx1ZXMgYG9sZF9wYWdlX293bmVyLSZndDtmcmVlX3BpZGAgYW5kIGBvbGRfcGFnZV9vd25lci0mZ3Q7ZnJlZV90Z2lkYC4gQmVjYXVzZSBvZiB0aGUgb3JpZ2luYWwgYnVnLCBpdCBzaG91bGQgaGF2ZSBiZWVuIHBhc3NpbmcgYW5kIHJlY2VpdmluZyB0aG9zZSB2YWx1ZXMsIGJ1dCBpbnN0ZWFkLCBpdCYjMzk7cyBhc3NpZ25pbmcgYGN1cnJlbnQtJmd0O3BpZGAgYW5kIGBjdXJyZW50LSZndDt0Z2lkYCBpbiB0aGUgYF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGVgIGZ1bmN0aW9uLiBUaGF0IG1lYW5zIGFueSBvd25lciBpbmZvcm1hdGlvbiBmcm9tIGFuIG9sZCBwYWdlIGlzIG5vdyBiZWluZyBvdmVyd3JpdHRlbiB3aGVuIHRoZSBwYWdlIGlzIGJlaW5nIGNvcGllZC4gVGhhdCYjMzk7cyBhIHNlcmlvdXMgcG90ZW50aWFsIGxlYWsgb3IgbWlzYXR0cmlidXRpb24gaXNzdWUsIGRlcGVuZGluZyBvbiBob3cgdGhpcyBkYXRhIGlzIHVzZWQgZG93bnN0cmVhbS4KClRoZSBwcm9wb3NlZCBwYXRjaCBpcyBzdHJhaWdodGZvcndhcmQgYW5kIGV4YWN0bHkgd2hhdCYjMzk7cyBuZWVkZWQuIEl0IGNvcnJlY3RzIHRoZSBjb2RlIHRvIHNldCBgcGFnZV9vd25lci0mZ3Q7ZnJlZV9waWQgPSBwaWQ7IHBhZ2Vfb3duZXItJmd0O2ZyZWVfdGdpZCA9IHRnaWQ7YCwgZW5zdXJpbmcgdGhhdCB0aGUgcGFzc2VkLWluIHZhbHVlcyBhcmUgYWN0dWFsbHkgdXNlZC4KCk5vdywgbGV0IG1lIGNoZWNrIHRoZSBLY29uZmlnIGFuZCBzZWUgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSBmb3Igc3lzdGVtcyB3aGVyZSBgcGFnZV9vd25lcmAgaXMgZW5hYmxlZCwgYW5kIGlmIHRoaXMgY291bGQgYXBwbHkgdG8gb3VyIGtlcm5lbCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQQUdFX09XTkVSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWcuZGVidWc9MTE9Y29uZmlnIERFQlVHX1BBR0VBTExPQ1xuLS1cbm1tL0tjb25maWcuZGVidWctMjUtXHQgIHdpdGggc3RhY2sgdHJhY2VzIG9mIGxhc3QgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBvZiB0aGUgcGFnZSwgd2hlblxubW0vS2NvbmZpZy5kZWJ1ZzoyNjpcdCAgUEFHRV9PV05FUiBpcyBhbHNvIHNlbGVjdGVkIGFuZCBlbmFibGVkIG9uIGJvb3QuXG5tbS9LY29uZmlnLmRlYnVnLTI3LVxuLS1cbm1tL0tjb25maWcuZGVidWc9NzM9Y29uZmlnIFNMVUJfUkNVX0RFQlVHXG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy0xMDQtXG5tbS9LY29uZmlnLmRlYnVnOjEwNTpjb25maWcgUEFHRV9PV05FUlxubW0vS2NvbmZpZy5kZWJ1Zy0xMDYtXHRib29sIFwmIzM0O1RyYWNrIHBhZ2Ugb3duZXJcJiMzNDtcbi0tXG5tbS9NYWtlZmlsZT0xMTc9b2JqLSQoQ09ORklHX0RFQlVHX1ZNX1BHVEFCTEUpICYjNDM7PSBkZWJ1Z192bV9wZ3RhYmxlLm9cbm1tL01ha2VmaWxlOjExODpvYmotJChDT05GSUdfUEFHRV9PV05FUikgJiM0Mzs9IHBhZ2Vfb3duZXIub1xubW0vTWFrZWZpbGUtMTE5LW9iai0kKENPTkZJR19NRU1PUllfSVNPTEFUSU9OKSAmIzQzOz0gcGFnZV9pc29sYXRpb24ub1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz01MTQyPXVuc2lnbmVkIGxvbmcgYWxsb2NfcGFnZXNfYnVsa19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgcHJlZmVycmVkX25pZCxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNTE3Ny1cbm1tL3BhZ2VfYWxsb2MuYzo1MTc4OiNpZmRlZiBDT05GSUdfUEFHRV9PV05FUlxubW0vcGFnZV9hbGxvYy5jLTUxNzktXHQvKlxubW0vcGFnZV9hbGxvYy5jOjUxODA6XHQgKiBQQUdFX09XTkVSIG1heSByZWN1cnNlIGludG8gdGhlIGFsbG9jYXRvciB0byBhbGxvY2F0ZSBzcGFjZSB0b1xubW0vcGFnZV9hbGxvYy5jLTUxODEtXHQgKiBzYXZlIHRoZSBzdGFjayB3aXRoIHBhZ2VzZXRzLmxvY2sgaGVsZC4gUmVsZWFzaW5nL3JlYWNxdWlyaW5nXG4tLVxubW0vcGFnZV9leHQuYz04MD1zdGF0aWMgc3RydWN0IHBhZ2VfZXh0X29wZXJhdGlvbnMgKnBhZ2VfZXh0X29wc1tdIF9faW5pdGRhdGEgPSB7XG5tbS9wYWdlX2V4dC5jOjgxOiNpZmRlZiBDT05GSUdfUEFHRV9PV05FUlxubW0vcGFnZV9leHQuYy04Mi1cdFx1MDAyNnBhZ2Vfb3duZXJfb3BzLFxuLS1cbm1tL3BhZ2Vfb3duZXIuYy0xOC0vKlxubW0vcGFnZV9vd25lci5jOjE5OiAqIFRPRE86IHRlYWNoIFBBR0VfT1dORVJfU1RBQ0tfREVQVEggKF9fZHVtcF9wYWdlX293bmVyIGFuZCBzYXZlX3N0YWNrKVxubW0vcGFnZV9vd25lci5jLTIwLSAqIHRvIHVzZSBvZmYgc3RhY2sgdGVtcG9yYWwgc3RvcmFnZVxubW0vcGFnZV9vd25lci5jLTIxLSAqL1xubW0vcGFnZV9vd25lci5jOjIyOiNkZWZpbmUgUEFHRV9PV05FUl9TVEFDS19ERVBUSCAoMTYpXG5tbS9wYWdlX293bmVyLmMtMjMtXG4tLVxubW0vcGFnZV9vd25lci5jPTU3PWVudW0gcGFnZV9vd25lcl9wcmludF9tb2RlIHtcbm1tL3BhZ2Vfb3duZXIuYzo1ODpcdFBBR0VfT1dORVJfUFJJTlRfU1RBQ0ssXG5tbS9wYWdlX293bmVyLmM6NTk6XHRQQUdFX09XTkVSX1BSSU5UX0hBTkRMRSxcbm1tL3BhZ2Vfb3duZXIuYzo2MDpcdFBBR0VfT1dORVJfUFJJTlRfU1RBQ0tfSEFORExFLFxubW0vcGFnZV9vd25lci5jLTYxLX07XG4tLVxubW0vcGFnZV9vd25lci5jPTYzPXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcGFnZV9vd25lcl9wcmludF9tb2RlX3N0cmluZ3NbXSA9IHtcbm1tL3BhZ2Vfb3duZXIuYzo2NDpcdFtQQUdFX09XTkVSX1BSSU5UX1NUQUNLXVx0PSBcJiMzNDtzdGFja1wmIzM0Oyxcbm1tL3BhZ2Vfb3duZXIuYzo2NTpcdFtQQUdFX09XTkVSX1BSSU5UX0hBTkRMRV1cdD0gXCYjMzQ7aGFuZGxlXCYjMzQ7LFxubW0vcGFnZV9vd25lci5jOjY2Olx0W1BBR0VfT1dORVJfUFJJTlRfU1RBQ0tfSEFORExFXVx0PSBcJiMzNDtzdGFja19oYW5kbGVcJiMzNDssXG5tbS9wYWdlX293bmVyLmMtNjctfTtcbi0tXG5tbS9wYWdlX293bmVyLmM9MTczPXN0YXRpYyBub2lubGluZSBkZXBvdF9zdGFja19oYW5kbGVfdCBzYXZlX3N0YWNrKGdmcF90IGZsYWdzKVxubW0vcGFnZV9vd25lci5jLTE3NC17XG5tbS9wYWdlX293bmVyLmM6MTc1Olx0dW5zaWduZWQgbG9uZyBlbnRyaWVzW1BBR0VfT1dORVJfU1RBQ0tfREVQVEhdO1xubW0vcGFnZV9vd25lci5jLTE3Ni1cdGRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZTtcbi0tXG5tbS9wYWdlX293bmVyLmM9NjAzPXByaW50X3BhZ2Vfb3duZXIoY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBsb25nIHBmbixcbi0tXG5tbS9wYWdlX293bmVyLmMtNjM2LVxubW0vcGFnZV9vd25lci5jOjYzNzpcdGlmIChwcmludF9tb2RlICE9IFBBR0VfT1dORVJfUFJJTlRfSEFORExFKSB7XG5tbS9wYWdlX293bmVyLmMtNjM4LVx0XHRyZXQgJiM0Mzs9IHN0YWNrX2RlcG90X3NucHJpbnQoaGFuZGxlLCBrYnVmICYjNDM7IHJldCwgY291bnQgLSByZXQsIDApO1xuLS1cbm1tL3BhZ2Vfb3duZXIuYy02NDItXG5tbS9wYWdlX293bmVyLmM6NjQzOlx0aWYgKHByaW50X21vZGUgIT0gUEFHRV9PV05FUl9QUklOVF9TVEFDSykge1xubW0vcGFnZV9vd25lci5jLTY0NC1cdFx0cmV0ICYjNDM7PSBzY25wcmludGYoa2J1ZiAmIzQzOyByZXQsIGNvdW50IC0gcmV0LCBcJiMzNDtoYW5kbGU6ICV1XFxuXCYjMzQ7LFxuLS1cbm1tL3BhZ2Vfb3duZXIuYz05MTk9c3RhdGljIGludCBwYWdlX293bmVyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxubW0vcGFnZV9vd25lci5jLTkyNi1cbm1tL3BhZ2Vfb3duZXIuYzo5Mjc6XHRzdGF0ZS1cdTAwM2VwcmludF9tb2RlID0gUEFHRV9PV05FUl9QUklOVF9TVEFDSztcbm1tL3BhZ2Vfb3duZXIuYy05MjgtXHRub2Rlc19jbGVhcihzdGF0ZS1cdTAwM2VuaWRfZmlsdGVyKTtcbi0tXG5tbS92bXN0YXQuYz0xNjgzPXN0YXRpYyB2b2lkIHBhZ2V0eXBlaW5mb19zaG93YmxvY2tjb3VudChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmFyZylcbi0tXG5tbS92bXN0YXQuYy0xNjk4LSAqIG9mIG90aGVyIHR5cGVzLiBUaGlzIGdpdmVzIGFuIGluZGljYXRpb24gb2YgaG93IHdlbGwgZmFsbGJhY2tzIGFyZSBiZWluZ1xubW0vdm1zdGF0LmM6MTY5OTogKiBjb250YWluZWQgYnkgcm1xdWV1ZV9mYWxsYmFjaygpLiBJdCByZXF1aXJlcyBpbmZvcm1hdGlvbiBmcm9tIFBBR0VfT1dORVJcbm1tL3Ztc3RhdC5jLTE3MDAtICogdG8gZGV0ZXJtaW5lIHdoYXQgaXMgZ29pbmcgb25cbi0tXG5tbS92bXN0YXQuYz0xNzAyPXN0YXRpYyB2b2lkIHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHBnX2RhdGFfdCAqcGdkYXQpXG5tbS92bXN0YXQuYy0xNzAzLXtcbm1tL3Ztc3RhdC5jOjE3MDQ6I2lmZGVmIENPTkZJR19QQUdFX09XTkVSXG5tbS92bXN0YXQuYy0xNzA1LVx0aW50IG10eXBlO1xuLS1cbm1tL3Ztc3RhdC5jLTE3MTgtXHRcdHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludCk7XG5tbS92bXN0YXQuYzoxNzE5OiNlbmRpZiAvKiBDT05GSUdfUEFHRV9PV05FUiAqL1xubW0vdm1zdGF0LmMtMTcyMC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMDMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRlYnVnZ2luZyBLY29uZmlnOiBBIFF1aWNrIERpdmUqKgoKQWxyaWdodCwgSSBuZWVkIHRvIHRyb3VibGVzaG9vdCBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUga2VybmVsJiMzOTtzIEtjb25maWcgc3lzdGVtLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSB0eXBpY2FsIGxheW91dCwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIGBtbS9LY29uZmlnLmRlYnVnYC4gSXQmIzM5O3MgYSBwcmltZSBsb2NhdGlvbiBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgcmVsYXRlZCBkZWJ1Z2dpbmcgb3B0aW9ucy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGV4YW1pbmluZyBhcm91bmQgbGluZSAxMDUuIFRoYXQgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gaG9waW5nIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGxvZ2ljYWwgZmxvdyBvZiB0aGUgY29kZSBpbiB0aGF0IGFyZWEsIGFuZCBwaW5wb2ludCBhIHNwZWNpZmljIHZhcmlhYmxlIG9yIG9wdGlvbiB0aGF0IGNhbiBoZWxwIG1lIHRvIGRpYWdub3NlIHRoZSBpc3N1ZSBJJiMzOTttIGZhY2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnLmRlYnVnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDA6XHRcdCAgVGhpcyBpcyBkZXNpZ25lZCBhcyBhIGRlYnVnZ2luZyBmZWF0dXJlLCBub3QgYSBzZWN1cml0eSBmZWF0dXJlLlxuIDEwMTpcdFx0ICBPYmplY3RzIGFyZSBzb21ldGltZXMgcmVjeWNsZWQgd2l0aG91dCBSQ1UgZGVsYXkgdW5kZXIgbWVtb3J5IHByZXNzdXJlLlxuIDEwMjpcdFxuIDEwMzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDEwNDpcdFxuIDEwNTpcdGNvbmZpZyBQQUdFX09XTkVSXG4gMTA2Olx0XHRib29sIFwmIzM0O1RyYWNrIHBhZ2Ugb3duZXJcJiMzNDtcbiAxMDc6XHRcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMIFx1MDAyNlx1MDAyNiBTVEFDS1RSQUNFX1NVUFBPUlRcbiAxMDg6XHRcdHNlbGVjdCBERUJVR19GU1xuIDEwOTpcdFx0c2VsZWN0IFNUQUNLVFJBQ0VcbiAxMTA6XHRcdHNlbGVjdCBTVEFDS0RFUE9UXG4gMTExOlx0XHRzZWxlY3QgUEFHRV9FWFRFTlNJT05cbiAxMTI6XHRcdGhlbHBcbiAxMTM6XHRcdCAgVGhpcyBrZWVwcyB0cmFjayBvZiB3aGF0IGNhbGwgY2hhaW4gaXMgdGhlIG93bmVyIG9mIGEgcGFnZSwgbWF5XG4gMTE0Olx0XHQgIGhlbHAgdG8gZmluZCBiYXJlIGFsbG9jX3BhZ2UocykgbGVha3MuIEV2ZW4gaWYgeW91IGluY2x1ZGUgdGhpc1xuIDExNTpcdFx0ICBmZWF0dXJlIG9uIHlvdXIgYnVpbGQsIGl0IGlzIGRpc2FibGVkIGluIGRlZmF1bHQuIFlvdSBzaG91bGQgcGFzc1xuIDExNjpcdFx0ICBcJiMzNDtwYWdlX293bmVyPW9uXCYjMzQ7IHRvIGJvb3QgcGFyYW1ldGVyIGluIG9yZGVyIHRvIGVuYWJsZSBpdC4gRWF0c1xuIDExNzpcdFx0ICBhIGZhaXIgYW1vdW50IG9mIG1lbW9yeSBpZiBlbmFibGVkLiBTZWUgdG9vbHMvbW0vcGFnZV9vd25lcl9zb3J0LmNcbiAxMTg6XHRcdCAgZm9yIHVzZXItc3BhY2UgaGVscGVyLlxuIDExOTpcdFxuIDEyMDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDEyMTpcdFxuIDEyMjpcdGNvbmZpZyBQQUdFX1RBQkxFX0NIRUNLXG4gMTIzOlx0XHRib29sIFwmIzM0O0NoZWNrIGZvciBpbnZhbGlkIG1hcHBpbmdzIGluIHVzZXIgcGFnZSB0YWJsZXNcJiMzNDtcbiAxMjQ6XHRcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19QQUdFX1RBQkxFX0NIRUNLXG4gMTI1Olx0XHRkZXBlbmRzIG9uIEVYQ0xVU0lWRV9TWVNURU1fUkFNXG4gMTI2Olx0XHRzZWxlY3QgUEFHRV9FWFRFTlNJT05cbiAxMjc6XHRcdGhlbHBcbiAxMjg6XHRcdCAgQ2hlY2sgdGhhdCBhbm9ueW1vdXMgcGFnZSBpcyBub3QgYmVpbmcgbWFwcGVkIHR3aWNlIHdpdGggcmVhZCB3cml0ZVxuIDEyOTpcdFx0ICBwZXJtaXNzaW9ucy4gQ2hlY2sgdGhhdCBhbm9ueW1vdXMgYW5kIGZpbGUgcGFnZXMgYXJlIG5vdCBiZWluZ1xuIDEzMDpcdFx0ICBlcnJvbmVvdXNseSBzaGFyZWQuIFNpbmNlIHRoZSBjaGVja2luZyBpcyBwZXJmb3JtZWQgYXQgdGhlIHRpbWVcbiAxMzE6XHRcdCAgZW50cmllcyBhcmUgYWRkZWQgYW5kIHJlbW92ZWQgdG8gdXNlciBwYWdlIHRhYmxlcywgbGVha2luZywgY29ycnVwdGlvblxuIDEzMjpcdFx0ICBhbmQgZG91YmxlIG1hcHBpbmcgcHJvYmxlbXMgYXJlIGRldGVjdGVkIHN5bmNocm9ub3VzbHkuXG4gMTMzOlx0XG4gMTM0Olx0XHQgIElmIHVuc3VyZSBzYXkgXCYjMzQ7blwmIzM0Oy5cbiAxMzU6XHRcbiAxMzY6XHRjb25maWcgUEFHRV9UQUJMRV9DSEVDS19FTkZPUkNFRFxuIDEzNzpcdFx0Ym9vbCBcJiMzNDtFbmZvcmNlIHRoZSBwYWdlIHRhYmxlIGNoZWNraW5nIGJ5IGRlZmF1bHRcJiMzNDtcbiAxMzg6XHRcdGRlcGVuZHMgb24gUEFHRV9UQUJMRV9DSEVDS1xuIDEzOTpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDEyCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgUG90ZW50aWFsOiBBIFF1aWNrIEFzc2Vzc21lbnQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSBpZiB0aGlzIHBhdGNoIGlzIHdvcnRoIGEgZGVlcGVyIGRpdmUgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgdGhlIGNoYW5nZXMgdG91Y2ggY29kZSB0aGF0JiMzOTtzIGJvdGggcmVhY2hhYmxlIGFuZCBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBmb3IgZnV6emluZy4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7bGwgZmlsdGVyIGJ5IGEgZmV3IGtleSBjcml0ZXJpYToKCkZpcnN0LCBpcyB0aGUgY29kZSBsb2NhdGVkIGluIGEgY29yZSBzdWJzeXN0ZW0/IExvb2tzIGxpa2UgaXQmIzM5O3MgaW4gYG1tL2AsIHdoaWNoIGlzIGEgZGVmaW5pdGUgcG9zaXRpdmUuIEdyZWF0LCBtZW1vcnkgbWFuYWdlbWVudCBpcyBhbHdheXMgYSBnb29kIGFyZWEgdG8gc2NydXRpbml6ZS4gU2Vjb25kbHksIEkgbmVlZCB0byBjaGVjayBmb3IgcmVmYWN0b3Jpbmcgb3IgY29kZSBjbGVhbnVwLCBlc3BlY2lhbGx5IGlmIGl0IHJlbGF0ZXMgdG8gZGF0YSBzdHJ1Y3R1cmVzLCBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cyB0aGF0IGFyZSBhY2Nlc3NpYmxlLgoKVGhlIGNoYW5nZSBpdHNlbGYgaXMgd2l0aGluIGBtbS9wYWdlX293bmVyLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlYCBmdW5jdGlvbi4gTXkgZXhwZXJ0IGV5ZSBpbW1lZGlhdGVseSBub3RlcyBpdCYjMzk7cyBjYWxsZWQgZHVyaW5nIHBhZ2UgZnJlZWluZyAoYF9fcmVzZXRfcGFnZV9vd25lcmApIGFuZCBmb2xpbyBtaWdyYXRpb24gKGBfX2ZvbGlvX2NvcHlfb3duZXJgKS4gTm93LCBpcyBgX19mb2xpb19jb3B5X293bmVyYCByZWFjaGFibGU/IFllcywgZm9saW8gbWlncmF0aW9uIGlzIGEgcmVndWxhciBvY2N1cnJlbmNlIGluIG1lbW9yeSBtYW5hZ2VtZW50LiBHb29kLiBBbmQgYHBhZ2Vfb3duZXJgIGl0c2VsZiBpcyByZWFjaGFibGUsIGFzc3VtaW5nIGBDT05GSUdfUEFHRV9PV05FUmAgaXMgZW5hYmxlZCwgd2hpY2ggaXMgbGlrZWx5LgoKTGV0JiMzOTtzIGNoZWNrIHRoZSBmdW5jdGlvbiBzaWduYXR1cmVzIGFuZCBmb2N1cyBzeW1ib2xzLCBzdGFydGluZyB3aXRoIGBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlYC4gU2luY2UgaXQmIzM5O3MgbWFya2VkIGFzIGBzdGF0aWMgaW5saW5lYCAob3IgcG9zc2libHkganVzdCBgc3RhdGljYCksIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxlcnM6IGBfX2ZvbGlvX2NvcHlfb3duZXJgIGFuZCBgX19yZXNldF9wYWdlX293bmVyYC4KCkhvbGQgb24sIGxldCBtZSBxdWlja2x5IGNvbmZpcm0gdGhhdCBgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZWAgaXMgaW5kZWVkIGBzdGF0aWMgaW5saW5lYCwgdG8gYmUgc3VyZS4gQWxyaWdodCwgYHN0YXRpYyBpbmxpbmUgdm9pZCBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlKC4uLilgLiBDb25maXJtZWQuIEl0IGlzLCBzbyBpdCBzaG91bGQgYmUgaW5saW5lZC4gVGhpcyBtYWtlcyBgX19mb2xpb19jb3B5X293bmVyYCBhbmQgYF9fcmVzZXRfcGFnZV9vd25lcmAgcmVsZXZhbnQgYXMgcG90ZW50aWFsIGVudHJ5IHBvaW50cy4KCk5vdywgYSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyBgX19yZXNldF9wYWdlX293bmVyYCBhIGNvbW1vbiBob3QtcGF0aCBmdW5jdGlvbj8gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXJlIGl0JiMzOTtzIGNhbGxlZCB0byBlc3RhYmxpc2ggaXRzIHViaXF1aXR5LiBJJiMzOTtsbCBjaGVjayBpdHMgY2FsbCBzaXRlcyB0byBkZXRlcm1pbmUgaXRzIGNvdmVyYWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZXNldF9wYWdlX293bmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYz0xMjk4PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBfX2ZyZWVfcGFnZXNfcHJlcGFyZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMTMzMy1cdFx0LyogRG8gbm90IGxldCBod3BvaXNvbiBwYWdlcyBoaXQgcGNwbGlzdHMvYnVkZHkgKi9cbm1tL3BhZ2VfYWxsb2MuYzoxMzM0Olx0XHRyZXNldF9wYWdlX293bmVyKHBhZ2UsIG9yZGVyKTtcbm1tL3BhZ2VfYWxsb2MuYy0xMzM1LVx0XHRwYWdlX3RhYmxlX2NoZWNrX2ZyZWUocGFnZSwgb3JkZXIpO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYy0xMzk5LVx0cGFnZS1cdTAwM2Vwcml2YXRlID0gMDtcbm1tL3BhZ2VfYWxsb2MuYzoxNDAwOlx0cmVzZXRfcGFnZV9vd25lcihwYWdlLCBvcmRlcik7XG5tbS9wYWdlX2FsbG9jLmMtMTQwMS1cdHBhZ2VfdGFibGVfY2hlY2tfZnJlZShwYWdlLCBvcmRlcik7XG4tLVxubW0vcGFnZV9vd25lci5jPTI5MT1zdGF0aWMgaW5saW5lIHZvaWQgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS9wYWdlX293bmVyLmMtMzAzLVx0XHRwYWdlX293bmVyID0gZ2V0X3BhZ2Vfb3duZXIocGFnZV9leHQpO1xubW0vcGFnZV9vd25lci5jOjMwNDpcdFx0LyogT25seSBfX3Jlc2V0X3BhZ2Vfb3duZXIoKSB3YW50cyB0byBjbGVhciB0aGUgYml0ICovXG5tbS9wYWdlX293bmVyLmMtMzA1LVx0XHRpZiAoaGFuZGxlKSB7XG4tLVxubW0vcGFnZV9vd25lci5jLTMxNS1cbm1tL3BhZ2Vfb3duZXIuYzozMTY6dm9pZCBfX3Jlc2V0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIHNob3J0IG9yZGVyKVxubW0vcGFnZV9vd25lci5jLTMxNy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTkxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWUsIHdpdGggYSAqKmJvbGRlZCBoZWFkZXIqKiBhcyByZXF1ZXN0ZWQ6CgoqKlBhZ2UgT3duZXJzaGlwIERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCBzbyBgcmVzZXRfcGFnZV9vd25lcmAgaXMgZ2V0dGluZyBjYWxsZWQgd2l0aGluIGBfX2ZyZWVfcGFnZXNfcHJlcGFyZWAuIFRoYXQmIzM5O3MgYSBwcmV0dHkgZnVuZGFtZW50YWwgcG9pbnQ7IGlmIEkmIzM5O20gdW5kZXJzdGFuZGluZyB0aGlzIGNvcnJlY3RseSwgaXQgbWVhbnMgdGhhdCB0aGUgcGFnZSBvd25lcnNoaXAgaXMgZ2V0dGluZyBjbGVhcmVkIG9yIHJlc2V0ICpldmVyeSogdGltZSBhIHBhZ2UgaXMgZnJlZWQuIE9rYXksIG1ha2VzIHNlbnNlIGluIHByaW5jaXBsZSB0byBhdm9pZCBhbnkgbGluZ2VyaW5nIHJlZmVyZW5jZXMuIEJ1dCB0aGVuIGEgZmxhZyBnb2VzIG9mZiBpbiBteSBoZWFkLiBXaGF0JiMzOTtzIHRoZSByZWxhdGlvbnNoaXAgb2YgdGhpcyB3aXRoIGBfX2ZvbGlvX2NvcHlfb3duZXJgPyBJJiMzOTttIHRyeWluZyB0byB3cmFwIG15IGhlYWQgYXJvdW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG9yIGluY29ycmVjdCBvd25lcnNoaXAgdHJhbnNpdGlvbnMsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZW4gYW5kIHdoZXJlIHRoZSBvd25lcnNoaXAgaXMgY29waWVkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgYGZvbGlvX2NvcHlfb3duZXJgIGZ1bmN0aW9uIGl0c2VsZiBpcyBhY3R1YWxseSBpbnZva2VkLiBUaGF0JiMzOTtzIHRoZSBtaXNzaW5nIHBpZWNlIGhlcmUuIEkgY2FuIHVuZGVyc3RhbmQgdGhlIHJlc2V0dGluZywgYnV0IHdpdGhvdXQga25vd2luZyB0aGUgY29weWluZywgSSYjMzk7bSBtaXNzaW5nIGNvbnRleHQgdG8gdGhvcm91Z2hseSBhbmFseXplIHRoaXMgd2hvbGUgcHJvY2Vzcy4gV2hlcmUgYXJlIHRoZSBjb3B5aW5nIG9wZXJhdGlvbnM/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZvbGlvX2NvcHlfb3duZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWlncmF0ZS5jPTc3NT12b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9taWdyYXRlLmMtODU4LVxubW0vbWlncmF0ZS5jOjg1OTpcdGZvbGlvX2NvcHlfb3duZXIobmV3Zm9saW8sIGZvbGlvKTtcbm1tL21pZ3JhdGUuYy04NjAtXHRwZ2FsbG9jX3RhZ19zd2FwKG5ld2ZvbGlvLCBmb2xpbyk7XG4tLVxubW0vcGFnZV9vd25lci5jPTM3OT12b2lkIF9fc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlciwgaW50IG5ld19vcmRlcilcbi0tXG5tbS9wYWdlX293bmVyLmMtMzkyLVxubW0vcGFnZV9vd25lci5jOjM5Mzp2b2lkIF9fZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZClcbm1tL3BhZ2Vfb3duZXIuYy0zOTQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY4OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFBhZ2UgT3duZXIgQ29ycnVwdGlvbioqCgpPa2F5LCBzbyBgZm9saW9fbWlncmF0ZV9mbGFnc2AgaXMgY2FsbGluZyBgZm9saW9fY29weV9vd25lcmAsIGFuZCB0aGF0IGZ1bmN0aW9uIGluIHR1cm4gdHJpZ2dlcnMgYF9fZm9saW9fY29weV9vd25lcmAuIEkmIzM5O3ZlIG5hcnJvd2VkIGRvd24gdGhlIHByb2JsZW0gdG8gdGhhdCBgX19mb2xpb19jb3B5X293bmVyYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIGBvbGRfcGFnZV9vd25lci0mZ3Q7ZnJlZV9waWRgIGFuZCBgZnJlZV90Z2lkYC4gSXQgbG9va3MgbGlrZSBgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZWAgaXMgdGhlIGN1bHByaXQsIG92ZXJ3cml0aW5nIHRoZSBwcm9jZXNzIGFuZCB0aHJlYWQgSURzIHdpdGggdGhlIGN1cnJlbnQgcHJvY2VzcywgaW5zdGVhZCBvZiByZXRhaW5pbmcgdGhlIG9yaWdpbmFsIG9uZXMuIFRoaXMgaXMgdmVyeSBzcGVjaWZpYyDigJMgYF9fZm9saW9fY29weV9vd25lcmAgaXMgYSBwcmV0dHkgdGFyZ2V0ZWQgc3ltYm9sLCBub24tdWJpcXVpdG91cywgYW5kIHJpZ2h0IHRoZXJlIGluIGBtbS9wYWdlX293bmVyLmNgLgoKSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIHNjb3BlIG9mIHRoaXMuIE15IG5leHQgc3RlcCBpcyB0byBleHBsb3JlIGhvdyBwYWdlX293bmVyIGlzIHVzZWQgZWxzZXdoZXJlLiBJIG5lZWQgdG8gc2VlIGlmIHRoaXMgcGF0dGVybiwgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGV4aXN0cyBpbiBvdGhlciByZWFkIG9yIHdyaXRlIG9wZXJhdGlvbnMuIEkgc2hvdWxkIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBvYnZpb3VzIGNhbmRpZGF0ZXM6IGBwcmludF9wYWdlX293bmVyYCwgb3IgdGhlIGBwYWdlX293bmVyYCBkZWJ1ZyBpbnRlcmZhY2UuIEkmIzM5O2xsIGFsc28gZG8gYSBxdWljayBzdXJ2ZXkgb2Ygd2hhdCBzeW1ib2xzIGFyZSBhY3R1YWxseSBkZWZpbmVkIHdpdGhpbiBgbW0vcGFnZV9vd25lci5jYC4gVGhpcyB3aWxsIGhlbHAgbWUgYnVpbGQgYSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEzOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O152b2lkIF9fJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vcGFnZV9vd25lci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2Vfb3duZXIuYz0yOTE9c3RhdGljIGlubGluZSB2b2lkIF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGUoc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxubW0vcGFnZV9vd25lci5jLTMxNS1cbm1tL3BhZ2Vfb3duZXIuYzozMTY6dm9pZCBfX3Jlc2V0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIHNob3J0IG9yZGVyKVxubW0vcGFnZV9vd25lci5jLTMxNy17XG4tLVxubW0vcGFnZV9vd25lci5jPTM1Mz1ub2lubGluZSB2b2lkIF9fc2V0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIHNob3J0IG9yZGVyLFxuLS1cbm1tL3BhZ2Vfb3duZXIuYy0zNjUtXG5tbS9wYWdlX293bmVyLmM6MzY2OnZvaWQgX19mb2xpb19zZXRfb3duZXJfbWlncmF0ZV9yZWFzb24oc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSBtaWdyYXRlX3JlYXNvbiByZWFzb24pXG5tbS9wYWdlX293bmVyLmMtMzY3LXtcbi0tXG5tbS9wYWdlX293bmVyLmMtMzc4LVxubW0vcGFnZV9vd25lci5jOjM3OTp2b2lkIF9fc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlciwgaW50IG5ld19vcmRlcilcbm1tL3BhZ2Vfb3duZXIuYy0zODAte1xuLS1cbm1tL3BhZ2Vfb3duZXIuYy0zOTItXG5tbS9wYWdlX293bmVyLmM6MzkzOnZvaWQgX19mb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKVxubW0vcGFnZV9vd25lci5jLTM5NC17XG4tLVxubW0vcGFnZV9vd25lci5jPTYwMz1wcmludF9wYWdlX293bmVyKGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgdW5zaWduZWQgbG9uZyBwZm4sXG4tLVxubW0vcGFnZV9vd25lci5jLTY3Mi1cbm1tL3BhZ2Vfb3duZXIuYzo2NzM6dm9pZCBfX2R1bXBfcGFnZV9vd25lcihjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbm1tL3BhZ2Vfb3duZXIuYy02NzQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTU4NQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgRm9saW8gTWlncmF0aW9uIEVudHJ5cG9pbnRzKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgIGNvZGUgb3IgYW55IG90aGVyIGVudHJ5IHBvaW50cyBmb3IgcGFnZSBtaWdyYXRpb25zLiBJIHN1c3BlY3QgdGhlcmUgbWlnaHQgYmUgYSBwcm9ibGVtIHJlbGF0ZWQgdG8gdGhlbSwgc28gbGV0JiMzOTtzIGZpcnN0IGlkZW50aWZ5IGFsbCBvZiB0aGUgY2FsbGVycyBvZiBgZm9saW9fbWlncmF0ZV9mbGFnc2AsIGlmIHRoYXQgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0LCBvciBvdGhlciBlbnRyeSBwb2ludHMsIHNvIEkgY2FuIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIGZsb3cuIFRoaXMgc2hvdWxkIGhlbHAgbWUgcGlucG9pbnQgdGhlIGV4YWN0IGxvY2F0aW9uIHdoZXJlIHRoaXMgbWlncmF0aW9uIGxvZ2ljIGlzIGJlaW5nIHRyaWdnZXJlZCBhbmQgcG90ZW50aWFsbHkgaWRlbnRpZnkgYW55IGlzc3VlcyBvciBpbmNvbnNpc3RlbmNpZXMuIFRoaXMgYWxzbyBtaWdodCBub3QgYmUgdGhlIHJpZ2h0IHBhdGggYW5kIHRoZSBpc3N1ZSBjb3VsZCBiZSB3aXRoIGFub3RoZXIgcGFnZSBtaWdyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEzOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZvbGlvX21pZ3JhdGVfZmxhZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWlncmF0ZS5jPTczOT1pbnQgbWlncmF0ZV9odWdlX3BhZ2VfbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL21pZ3JhdGUuYy03NzQtICovXG5tbS9taWdyYXRlLmM6Nzc1OnZvaWQgZm9saW9fbWlncmF0ZV9mbGFncyhzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vbWlncmF0ZS5jLTc3Ni17XG4tLVxubW0vbWlncmF0ZS5jLTg2My19XG5tbS9taWdyYXRlLmM6ODY0OkVYUE9SVF9TWU1CT0woZm9saW9fbWlncmF0ZV9mbGFncyk7XG5tbS9taWdyYXRlLmMtODY1LVxuLS1cbm1tL21pZ3JhdGUuYz04NzA9c3RhdGljIGludCBfX21pZ3JhdGVfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZHN0LFxuLS1cbm1tL21pZ3JhdGUuYy04OTAtXG5tbS9taWdyYXRlLmM6ODkxOlx0Zm9saW9fbWlncmF0ZV9mbGFncyhkc3QsIHNyYyk7XG5tbS9taWdyYXRlLmMtODkyLVx0cmV0dXJuIDA7XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMTA5PXN0YXRpYyB2b2lkIF9fbWlncmF0ZV9kZXZpY2VfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjX3BmbnMsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjUxLVx0XHRcdGVsc2Vcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTI1MjpcdFx0XHRcdGZvbGlvX21pZ3JhdGVfZmxhZ3MobmV3Zm9saW8sIGZvbGlvKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI1My1cdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA4NgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUGFnZSBPd25lciBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGBtbS9wYWdlX293bmVyLmNgIGNvZGUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbnZlc3RpZ2F0ZSBgX19mb2xpb19jb3B5X293bmVyYOKAlHRoYXQgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIExldCYjMzk7cyBzZWUuLi4geWVwLCBpdCYjMzk7cyBub24tc3RhdGljLCBkZWZpbmVkIGFzIGB2b2lkIF9fZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZClgLiBNYWtlcyBzZW5zZS4gTm93LCBsZXQmIzM5O3MganVzdCBxdWlja2x5IHNjYW4gZm9yIGFueSByZWxhdGVkIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuIEFoLCBgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZWAgaXMgYHN0YXRpYyBpbmxpbmVgIHNvIGxpa2VseSBub3QgYXMgY2VudHJhbCBhcyB0aGUgb3RoZXIuIEFsc28sIGBmb2xpb19taWdyYXRlX2ZsYWdzYCBpcyBub24tc3RhdGljLgoKTm93LCBsZXQmIzM5O3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEZyb20gd2hhdCBJIHJlbWVtYmVyLCBgUEFHRV9PV05FUmAgZGVwZW5kcyBvbiBgREVCVUdfS0VSTkVMYCBhbmQgYFNUQUNLVFJBQ0VfU1VQUE9SVGAsIHdoaWNoIGlzIGltcG9ydGFudCBjb250ZXh0LiBJIHNob3VsZCBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGNvbmZsaWN0cyB3aGVuIGBNSUdSQVRJT05gIG9yIGBOVU1BYCBvciBgQ09NUEFDVElPTmAgaXMgZW5hYmxlZCwgc28sIGxldCYjMzk7cyBzdGFydCBjaGVja2luZyBjb25maWdzIGluIGBtbS9taWdyYXRlLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTUlHUkFUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTk4PW9iai0kKENPTkZJR19NRU1URVNUKVx0XHQmIzQzOz0gbWVtdGVzdC5vXG5tbS9NYWtlZmlsZTo5OTpvYmotJChDT05GSUdfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZS5vXG5tbS9NYWtlZmlsZS0xMDAtb2JqLSQoQ09ORklHX05VTUEpICYjNDM7PSBtZW1vcnktdGllcnMub1xuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYz04NDQ9c3RhdGljIHZvaWQgX19pbml0IHN3YXBfbWlncmF0aW9uX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXG4tLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTg0OC1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo4NDk6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX01JR1JBVElPTikpXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtODUwLVx0XHRyZXR1cm47XG4tLVxubW0vZmlsZW1hcC5jPTEyNTA9c3RhdGljIGlubGluZSBpbnQgZm9saW9fd2FpdF9iaXRfY29tbW9uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBiaXRfbnIsXG4tLVxubW0vZmlsZW1hcC5jLTEzODUtXG5tbS9maWxlbWFwLmM6MTM4NjojaWZkZWYgQ09ORklHX01JR1JBVElPTlxubW0vZmlsZW1hcC5jLTEzODctLyoqXG4tLVxubW0vZ3VwLmM9MjE4Nz1zdHJ1Y3QgcGFnZSAqZ2V0X2R1bXBfcGFnZSh1bnNpZ25lZCBsb25nIGFkZHIsIGludCAqbG9ja2VkKVxuLS1cbm1tL2d1cC5jLTIxOTctXG5tbS9ndXAuYzoyMTk4OiNpZmRlZiBDT05GSUdfTUlHUkFUSU9OXG5tbS9ndXAuYy0yMTk5LVxuLS1cbm1tL2d1cC5jPTI0NDk9c3RhdGljIGxvbmcgY2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl9mb2xpb3MsXG4tLVxubW0vZ3VwLmMtMjQ1My19XG5tbS9ndXAuYzoyNDU0OiNlbmRpZiAvKiBDT05GSUdfTUlHUkFUSU9OICovXG5tbS9ndXAuYy0yNDU1LVxuLS1cbm1tL2tzbS5jPTMyNjk9dm9pZCBjb2xsZWN0X3Byb2NzX2tzbShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS9rc20uYy0zMzA3LVxubW0va3NtLmM6MzMwODojaWZkZWYgQ09ORklHX01JR1JBVElPTlxubW0va3NtLmMtMzMwOS12b2lkIGZvbGlvX21pZ3JhdGVfa3NtKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0va3NtLmMtMzMzMC19XG5tbS9rc20uYzozMzMxOiNlbmRpZiAvKiBDT05GSUdfTUlHUkFUSU9OICovXG5tbS9rc20uYy0zMzMyLVxuLS1cbm1tL3NobWVtLmM9NTM3MT1zdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBzaG1lbV9hb3BzID0ge1xuLS1cbm1tL3NobWVtLmMtNTM3Ni0jZW5kaWZcbm1tL3NobWVtLmM6NTM3NzojaWZkZWYgQ09ORklHX01JR1JBVElPTlxubW0vc2htZW0uYy01Mzc4LVx0Lm1pZ3JhdGVfZm9saW9cdD0gbWlncmF0ZV9mb2xpbyxcbi0tXG5tbS9zd2FwX3N0YXRlLmM9Mzk9c3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgc3dhcF9hb3BzID0ge1xubW0vc3dhcF9zdGF0ZS5jLTQwLVx0LmRpcnR5X2ZvbGlvXHQ9IG5vb3BfZGlydHlfZm9saW8sXG5tbS9zd2FwX3N0YXRlLmM6NDE6I2lmZGVmIENPTkZJR19NSUdSQVRJT05cbm1tL3N3YXBfc3RhdGUuYy00Mi1cdC5taWdyYXRlX2ZvbGlvXHQ9IG1pZ3JhdGVfZm9saW8sXG4tLVxubW0vc3dhcGZpbGUuYz03OD11bnNpZ25lZCBsb25nIHN3YXBmaWxlX21heGltdW1fc2l6ZTtcbm1tL3N3YXBmaWxlLmM6Nzk6I2lmZGVmIENPTkZJR19NSUdSQVRJT05cbm1tL3N3YXBmaWxlLmMtODAtYm9vbCBzd2FwX21pZ3JhdGlvbl9hZF9zdXBwb3J0ZWQ7XG5tbS9zd2FwZmlsZS5jOjgxOiNlbmRpZlx0LyogQ09ORklHX01JR1JBVElPTiAqL1xubW0vc3dhcGZpbGUuYy04Mi1cbi0tXG5tbS9zd2FwZmlsZS5jPTM5NTQ9c3RhdGljIGludCBfX2luaXQgc3dhcGZpbGVfaW5pdCh2b2lkKVxuLS1cbm1tL3N3YXBmaWxlLmMtMzk2Ny1cbm1tL3N3YXBmaWxlLmM6Mzk2ODojaWZkZWYgQ09ORklHX01JR1JBVElPTlxubW0vc3dhcGZpbGUuYy0zOTY5LVx0aWYgKHN3YXBmaWxlX21heGltdW1fc2l6ZSBcdTAwM2U9ICgxVUwgXHUwMDNjXHUwMDNjIFNXUF9NSUdfVE9UQUxfQklUUykpXG5tbS9zd2FwZmlsZS5jLTM5NzAtXHRcdHN3YXBfbWlncmF0aW9uX2FkX3N1cHBvcnRlZCA9IHRydWU7XG5tbS9zd2FwZmlsZS5jOjM5NzE6I2VuZGlmXHQvKiBDT05GSUdfTUlHUkFUSU9OICovXG5tbS9zd2FwZmlsZS5jLTM5NzItXG4tLVxubW0vdm1zdGF0LmM9MTE5OT1jb25zdCBjaGFyICogY29uc3Qgdm1zdGF0X3RleHRbXSA9IHtcbi0tXG5tbS92bXN0YXQuYy0xMzc3LSNlbmRpZlxubW0vdm1zdGF0LmM6MTM3ODojaWZkZWYgQ09ORklHX01JR1JBVElPTlxubW0vdm1zdGF0LmMtMTM3OS1cdFtJKFBHTUlHUkFURV9TVUNDRVNTKV1cdFx0XHQ9IFwmIzM0O3BnbWlncmF0ZV9zdWNjZXNzXCYjMzQ7LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzY0NAoJCQkJCQkJb3V0cHV0OiAxNDcKCQkJCQkJCXRob3VnaHRzOiAzOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS2NvbmZpZyBhbmQgVHJpYWdlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLiBJIHNlZSB0aGF0IGBQQUdFX09XTkVSYCBhbmQgYE1JR1JBVElPTmAgYXJlIGtleS4gYFBBR0VfT1dORVJgLCBvZiBjb3Vyc2UsIGVuYWJsZXMgYHBhZ2Vfb3duZXIuY2AsIGFuZCBpbXBvcnRhbnRseSwgYE1JR1JBVElPTmAgaXMgZ29pbmcgdG8gZXhlcmNpc2UgYF9fZm9saW9fY29weV9vd25lcmAgd2hpY2ggaXMgdGhlIGNvZGUgSSYjMzk7bSBpbnRlcmVzdGVkIGluLiBJIGFsc28gbm90ZSB0aGF0IGBERUJVR19GU2AgaXMgaW1wbGljaXRseSBzZWxlY3RlZCBieSBgUEFHRV9PV05FUmAsIHdoaWNoIGlzIGEgZ29vZCB0aGluZyBmb3IgZGVidWdnaW5nLgoKTm93LCBsZXQmIzM5O3Mgc3lzdGVtYXRpY2FsbHkgZ28gdGhyb3VnaCB0aGUgdHJpYWdlIGluc3RydWN0aW9ucy4KCjEuICAqKlJlYWNoYWJpbGl0eToqKiBJcyBgcGFnZV9vd25lcmAgcmVhY2hhYmxlPyBZZXMsIHNwZWNpZmljYWxseSB0aHJvdWdoIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwYWdlIHRyYWNraW5nIGluIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCB3aGVuIEkgZW5hYmxlIGBDT05GSUdfUEFHRV9PV05FUmAgYW5kIHVzZSB0aGUgYm9vdCBhcmd1bWVudCBgcGFnZV9vd25lcj1vbmAuIEFuZCwgeWVzLCBgZm9saW9fY29weV9vd25lcmAgaXMgcmVhY2hhYmxlIGR1cmluZyBmb2xpbyBtaWdyYXRpb24uIENydWNpYWxseSwgdGhpcyBjb2RlIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgYmVjYXVzZSBvZiB0aGUgYHBhZ2Vfb3duZXJgIHRyYWNraW5nIGRhdGEgc3RydWN0dXJlcy4gVGhlcmVmb3JlLCAqeWVzKiwgaXQmIzM5O3MgJiMzNDtXb3J0aEZ1enppbmcmIzM0Oy4KCjIuICAqKkZvY3VzU3ltYm9sczoqKiBJJiMzOTt2ZSBpZGVudGlmaWVkIGBfX2ZvbGlvX2NvcHlfb3duZXJgIGFuZCBgZm9saW9fbWlncmF0ZV9mbGFnc2AgYXMgdGhlIHByaW1hcnkgdGFyZ2V0cy4gSSYjMzk7bSBhdm9pZGluZyBgX19yZXNldF9wYWdlX293bmVyYCBiZWNhdXNlIGl0JiMzOTtzIGNhbGxlZCBvbiAqZXZlcnkqIHBhZ2UgZnJlZSDigJMgdGhhdCYjMzk7cyBmYXIgdG9vIHViaXF1aXRvdXMgZm9yIGVmZmVjdGl2ZSBmdXp6aW5nLgoKMy4gICoqRW5hYmxlQ29uZmlnczoqKiBDb25maXJtZWQ6IGBQQUdFX09XTkVSYCBhbmQgYE1JR1JBVElPTmAuIFRob3NlIGFyZSB0aGUgdHdvIEkgbmVlZCB0byBnZXQgdGhpcyBzZXQgdXAuCgpBbHJpZ2h0LCBhIHNhbml0eSBjaGVjayBvbiB0aGUgdG9vbCBjYWxsIGBzZXQtcmVzdWx0c2AgaXMgaW4gb3JkZXIuCgoqICAgYFdvcnRoRnV6emluZ2A6IFRydWUuCiogICBgRW5hYmxlQ29uZmlnc2A6IGBbJiMzNDtQQUdFX09XTkVSJiMzNDssICYjMzQ7TUlHUkFUSU9OJiMzNDtdYC4gUGVyZmVjdC4KKiAgIGBGb2N1c1N5bWJvbHNgOiBgWyYjMzQ7X19mb2xpb19jb3B5X293bmVyJiMzNDssICYjMzQ7Zm9saW9fbWlncmF0ZV9mbGFncyYjMzQ7XWAuIEdvdCBpdC4KKiAgIGBSZWFzb25pbmdgOiBUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gbW0vcGFnZVxfb3duZXIuYyB3aGVyZSBgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZSgpYCB3YXMgaWdub3JpbmcgaXRzIGBwaWRgIGFuZCBgdGdpZGAgcGFyYW1ldGVycyBhbmQgdXNpbmcgYGN1cnJlbnQtJmd0O3BpZGAgYW5kIGBjdXJyZW50LSZndDt0Z2lkYCBpbnN0ZWFkLCB3aGljaCBpbXBhY3RzIGZvbGlvIG1pZ3JhdGlvbiAoYF9fZm9saW9fY29weV9vd25lcmApLiBCZWNhdXNlIHRoaXMgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBkZWJ1ZyB0cmFja2luZyBsb2dpYywgaXQmIzM5O3MgcmVhY2hhYmxlLgoKTm93LCBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTM6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBR0VfT1dORVImIzM0OywKICAgICYjMzQ7TUlHUkFUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19mb2xpb19jb3B5X293bmVyJiMzNDssCiAgICAmIzM0O2ZvbGlvX21pZ3JhdGVfZmxhZ3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gbW0vcGFnZV9vd25lci5jIHdoZXJlIF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGUoKSBpZ25vcmVkIHRoZSBwYXNzZWQgcGlkIGFuZCB0Z2lkIGFyZ3VtZW50cyBhbmQgaW5zdGVhZCB1c2VkIGN1cnJlbnQtXHUwMDNlcGlkIGFuZCBjdXJyZW50LVx1MDAzZXRnaWQuIFRoaXMgZGlyZWN0bHkgYWZmZWN0cyBmb2xpbyBtaWdyYXRpb24gaW4gX19mb2xpb19jb3B5X293bmVyKCksIHdoZXJlIHRoZSBvcmlnaW5hbCBvd25lciYjMzk7cyBmcmVlX3BpZCBhbmQgZnJlZV90Z2lkIG5lZWQgdG8gYmUgcHJlc2VydmVkLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCB0cmFja2luZyBsb2dpYyBpbiBjb3JlIG1tLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQQUdFX09XTkVSJiMzNDssCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fZm9saW9fY29weV9vd25lciYjMzQ7LAogICAgJiMzNDtmb2xpb19taWdyYXRlX2ZsYWdzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIG1tL3BhZ2Vfb3duZXIuYyB3aGVyZSBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlKCkgaWdub3JlZCB0aGUgcGFzc2VkIHBpZCBhbmQgdGdpZCBhcmd1bWVudHMgYW5kIGluc3RlYWQgdXNlZCBjdXJyZW50LVx1MDAzZXBpZCBhbmQgY3VycmVudC1cdTAwM2V0Z2lkLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgZm9saW8gbWlncmF0aW9uIGluIF9fZm9saW9fY29weV9vd25lcigpLCB3aGVyZSB0aGUgb3JpZ2luYWwgb3duZXImIzM5O3MgZnJlZV9waWQgYW5kIGZyZWVfdGdpZCBuZWVkIHRvIGJlIHByZXNlcnZlZC4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgdHJhY2tpbmcgbG9naWMgaW4gY29yZSBtbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTM6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMzo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT44bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIGBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlKClgIHdoZXJlIHRoZSBmdW5jdGlvbiB3YXMgYXNzaWduaW5nIGBjdXJyZW50LVx1MDAzZXBpZGAgYW5kIGBjdXJyZW50LVx1MDAzZXRnaWRgIGluc3RlYWQgb2YgdGhlIHBhc3NlZC1pbiBgcGlkYCBhbmQgYHRnaWRgIGZ1bmN0aW9uIGFyZ3VtZW50cy4gVGhlIHBhc3NlZCBwYXJhbWV0ZXJzIGFyZSBwcmltaXRpdmUgc2NhbGFyIHR5cGVzIChgcGlkX3RgKSB0aGF0IGFyZSBpbml0aWFsaXplZCBieSBjYWxsZXJzIChgY3VycmVudC1cdTAwM2VwaWRgL2BjdXJyZW50LVx1MDAzZXRnaWRgIGluIGBfX3Jlc2V0X3BhZ2Vfb3duZXJgIG9yIGBvbGRfcGFnZV9vd25lci1cdTAwM2VmcmVlX3BpZGAvYGZyZWVfdGdpZGAgaW4gYF9fZm9saW9fY29weV9vd25lcmApLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHN0cnVjdCBwYWRkaW5nIGxlYWtzIHRvIHVzZXIgc3BhY2UsIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZkMTJjODI0NjU2YzliODM3YzI4MjQzOGNlZTIzZmNlZGY1ZThlMGMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCA0IDEzOjUzOjMxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9vd25lci5jIGIvbW0vcGFnZV9vd25lci5jCmluZGV4IDNmYzM3ZDliOTA4ZWYuLmNmYzMxYzkyZDc2NTcgMTAwNjQ0Ci0tLSBhL21tL3BhZ2Vfb3duZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX293bmVyLmMKQEAgLTMwNyw4ICYjNDM7MzA3LDggQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGUoc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCQlwYWdlX293bmVyLSZndDtmcmVlX2hhbmRsZSA9IGhhbmRsZTsKIAkJfQogCQlwYWdlX293bmVyLSZndDtmcmVlX3RzX25zZWMgPSBmcmVlX3RzX25zZWM7Ci0JCXBhZ2Vfb3duZXItJmd0O2ZyZWVfcGlkID0gY3VycmVudC0mZ3Q7cGlkOwotCQlwYWdlX293bmVyLSZndDtmcmVlX3RnaWQgPSBjdXJyZW50LSZndDt0Z2lkOwomIzQzOwkJcGFnZV9vd25lci0mZ3Q7ZnJlZV9waWQgPSBwaWQ7CiYjNDM7CQlwYWdlX293bmVyLSZndDtmcmVlX3RnaWQgPSB0Z2lkOwogCX0KIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEzOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT44bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFdmFsdWF0aW5nIHRoZSBLTVNBTiBOZWNlc3NpdHkqKgoKT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIGp1c3RpZmllcyBpdHMgb3duIEtNU0FOIHNlc3Npb24uIEZpcnN0LCBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCB0aGUgZGlmZiBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gYG1tL3BhZ2Vfb3duZXIuY2AuIFRoaXMgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nLiBNeSBpbnN0aW5jdHMgdGVsbCBtZSB0aGUgY29kZSBhcm91bmQgbGluZSAzMDcgaW4gYG1tL3BhZ2Vfb3duZXIuY2AgbWlnaHQgYmUga2V5LCBzbyBJJiMzOTtsbCB1c2UgYHJlYWQtZmlsZWAgdGhlcmUgdG8gZ2V0IHRoZSBpbW1lZGlhdGUgY29udGV4dC4gSG9wZWZ1bGx5LCB0aGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gd2hhdCB0aGUgcGF0Y2ggaXMgdG91Y2hpbmcgYW5kIGlmIEtNU0FOIGlzIG5lY2Vzc2FyeSBmb3IgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGFnZV9vd25lci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyODU6XHRcdFx0X19zZXRfYml0KFBBR0VfRVhUX09XTkVSLCBcdTAwMjZwYWdlX2V4dC1cdTAwM2VmbGFncyk7XG4gMjg2Olx0XHRcdF9fc2V0X2JpdChQQUdFX0VYVF9PV05FUl9BTExPQ0FURUQsIFx1MDAyNnBhZ2VfZXh0LVx1MDAzZWZsYWdzKTtcbiAyODc6XHRcdH1cbiAyODg6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDI4OTpcdH1cbiAyOTA6XHRcbiAyOTE6XHRzdGF0aWMgaW5saW5lIHZvaWQgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbiAyOTI6XHRcdFx0XHRcdFx0XHQgICBkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGUsXG4gMjkzOlx0XHRcdFx0XHRcdFx0ICAgdW5zaWduZWQgc2hvcnQgb3JkZXIsXG4gMjk0Olx0XHRcdFx0XHRcdFx0ICAgcGlkX3QgcGlkLCBwaWRfdCB0Z2lkLFxuIDI5NTpcdFx0XHRcdFx0XHRcdCAgIHU2NCBmcmVlX3RzX25zZWMpXG4gMjk2Olx0e1xuIDI5NzpcdFx0c3RydWN0IHBhZ2VfZXh0X2l0ZXIgaXRlcjtcbiAyOTg6XHRcdHN0cnVjdCBwYWdlX2V4dCAqcGFnZV9leHQ7XG4gMjk5Olx0XHRzdHJ1Y3QgcGFnZV9vd25lciAqcGFnZV9vd25lcjtcbiAzMDA6XHRcbiAzMDE6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiAzMDI6XHRcdGZvcl9lYWNoX3BhZ2VfZXh0KHBhZ2UsIDEgXHUwMDNjXHUwMDNjIG9yZGVyLCBwYWdlX2V4dCwgaXRlcikge1xuIDMwMzpcdFx0XHRwYWdlX293bmVyID0gZ2V0X3BhZ2Vfb3duZXIocGFnZV9leHQpO1xuIDMwNDpcdFx0XHQvKiBPbmx5IF9fcmVzZXRfcGFnZV9vd25lcigpIHdhbnRzIHRvIGNsZWFyIHRoZSBiaXQgKi9cbiAzMDU6XHRcdFx0aWYgKGhhbmRsZSkge1xuIDMwNjpcdFx0XHRcdF9fY2xlYXJfYml0KFBBR0VfRVhUX09XTkVSX0FMTE9DQVRFRCwgXHUwMDI2cGFnZV9leHQtXHUwMDNlZmxhZ3MpO1xuIDMwNzpcdFx0XHRcdHBhZ2Vfb3duZXItXHUwMDNlZnJlZV9oYW5kbGUgPSBoYW5kbGU7XG4gMzA4Olx0XHRcdH1cbiAzMDk6XHRcdFx0cGFnZV9vd25lci1cdTAwM2VmcmVlX3RzX25zZWMgPSBmcmVlX3RzX25zZWM7XG4gMzEwOlx0XHRcdHBhZ2Vfb3duZXItXHUwMDNlZnJlZV9waWQgPSBwaWQ7XG4gMzExOlx0XHRcdHBhZ2Vfb3duZXItXHUwMDNlZnJlZV90Z2lkID0gdGdpZDtcbiAzMTI6XHRcdH1cbiAzMTM6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDMxNDpcdH1cbiAzMTU6XHRcbiAzMTY6XHR2b2lkIF9fcmVzZXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgc2hvcnQgb3JkZXIpXG4gMzE3Olx0e1xuIDMxODpcdFx0c3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dDtcbiAzMTk6XHRcdGRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZTtcbiAzMjA6XHRcdGRlcG90X3N0YWNrX2hhbmRsZV90IGFsbG9jX2hhbmRsZTtcbiAzMjE6XHRcdHN0cnVjdCBwYWdlX293bmVyICpwYWdlX293bmVyO1xuIDMyMjpcdFx0dTY0IGZyZWVfdHNfbnNlYyA9IGxvY2FsX2Nsb2NrKCk7XG4gMzIzOlx0XG4gMzI0Olx0XHRwYWdlX2V4dCA9IHBhZ2VfZXh0X2dldChwYWdlKTtcbiAzMjU6XHRcdGlmICh1bmxpa2VseSghcGFnZV9leHQpKVxuIDMyNjpcdFx0XHRyZXR1cm47XG4gMzI3Olx0XG4gMzI4Olx0XHRwYWdlX293bmVyID0gZ2V0X3BhZ2Vfb3duZXIocGFnZV9leHQpO1xuIDMyOTpcdFx0YWxsb2NfaGFuZGxlID0gcGFnZV9vd25lci1cdTAwM2VoYW5kbGU7XG4gMzMwOlx0XHRwYWdlX2V4dF9wdXQocGFnZV9leHQpO1xuIDMzMTpcdFxuIDMzMjpcdFx0LypcbiAzMzM6XHRcdCAqIERvIG5vdCBzcGVjaWZ5IEdGUF9OT1dBSVQgdG8gbWFrZSBnZnBmbGFnc19hbGxvd19zcGlubmluZygpID09IGZhbHNlXG4gMzM0Olx0XHQgKiB0byBwcmV2ZW50IGlzc3VlcyBpbiBzdGFja19kZXBvdF9zYXZlKCkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMzMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZWAqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZnVuY3Rpb24sIGBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIGNoZWNrIHRoZSBjYWxsIHNpdGVzLiBXaGVyZSBhcmUgd2UgaW52b2tpbmcgdGhpcyBmdW5jdGlvbj8gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2UgdG8gZ2V0IGEgZ3Jhc3Agb24gaXRzIHB1cnBvc2UgYW5kIGl0cyBjcml0aWNhbCBwb2ludHMgb2YgaW50ZXJhY3Rpb24gd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0uIEtub3dpbmcgd2hlcmUgaXQmIzM5O3MgY2FsbGVkIGlzIGFic29sdXRlbHkgY3J1Y2lhbCBmb3IgYW55IHJlYWwgdW5kZXJzdGFuZGluZy4KCk9rYXksIGxldCYjMzk7cyBuYXZpZ2F0ZSB0byBgbW0vcGFnZV9vd25lci5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBkZWZpbml0aW9uLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBzY3J1dGluaXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBjb250ZXh0LiBJJiMzOTtsbCBwcm9iYWJseSBiZSBsb29raW5nIGZvciB0aGUgY29uZGl0aW9ucyBsZWFkaW5nIHVwIHRvIHRoZSBjYWxsLCB3aGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgaW52b2x2ZWQsIGFuZCB3aGF0IHRoZSBmdW5jdGlvbiBpcyBpbnRlbmRlZCB0byBhY2NvbXBsaXNoIHdpdGhpbiB0aGUgbGFyZ2VyIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIGZyYW1ld29yay4gVGltZSB0byBkaWcgaW4gYW5kIGdldCBhIGdvb2QgcGljdHVyZSBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgb3ZlcmFsbCBwYWdlIG93bmVyc2hpcCB0cmFja2luZyBtZWNoYW5pc20uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGFnZV9vd25lci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMzU6XHRcdCAqIFRoaXMgaXMgc2ltaWxhciB0byBhbGxvY19wYWdlc19ub2xvY2soKSBnZnAgZmxhZ3MsIGJ1dCBvbmx5IHVzZWRcbiAzMzY6XHRcdCAqIHRvIHNpZ25hbCBzdGFja19kZXBvdCB0byBhdm9pZCBzcGluX2xvY2tzLlxuIDMzNzpcdFx0ICovXG4gMzM4Olx0XHRoYW5kbGUgPSBzYXZlX3N0YWNrKF9fR0ZQX05PV0FSTik7XG4gMzM5Olx0XHRfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlKHBhZ2UsIGhhbmRsZSwgb3JkZXIsIGN1cnJlbnQtXHUwMDNlcGlkLFxuIDM0MDpcdFx0XHRcdFx0XHRjdXJyZW50LVx1MDAzZXRnaWQsIGZyZWVfdHNfbnNlYyk7XG4gMzQxOlx0XG4gMzQyOlx0XHRpZiAoYWxsb2NfaGFuZGxlICE9IGVhcmx5X2hhbmRsZSlcbiAzNDM6XHRcdFx0LypcbiAzNDQ6XHRcdFx0ICogZWFybHlfaGFuZGxlIGlzIGJlaW5nIHNldCBhcyBhIGhhbmRsZSBmb3IgYWxsIHRob3NlXG4gMzQ1Olx0XHRcdCAqIGVhcmx5IGFsbG9jYXRlZCBwYWdlcy4gU2VlIGluaXRfcGFnZXNfaW5fem9uZSgpLlxuIDM0NjpcdFx0XHQgKiBTaW5jZSB0aGVpciByZWZjb3VudCBpcyBub3QgYmVpbmcgaW5jcmVtZW50ZWQgYmVjYXVzZVxuIDM0NzpcdFx0XHQgKiB0aGUgbWFjaGluZXJ5IGlzIG5vdCByZWFkeSB5ZXQsIHdlIGNhbm5vdCBkZWNyZW1lbnRcbiAzNDg6XHRcdFx0ICogdGhlaXIgcmVmY291bnQgZWl0aGVyLlxuIDM0OTpcdFx0XHQgKi9cbiAzNTA6XHRcdFx0ZGVjX3N0YWNrX3JlY29yZF9jb3VudChhbGxvY19oYW5kbGUsIDEgXHUwMDNjXHUwMDNjIG9yZGVyKTtcbiAzNTE6XHR9XG4gMzUyOlx0XG4gMzUzOlx0bm9pbmxpbmUgdm9pZCBfX3NldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBzaG9ydCBvcmRlcixcbiAzNTQ6XHRcdFx0XHRcdFx0Z2ZwX3QgZ2ZwX21hc2spXG4gMzU1Olx0e1xuIDM1NjpcdFx0dTY0IHRzX25zZWMgPSBsb2NhbF9jbG9jaygpO1xuIDM1NzpcdFx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlO1xuIDM1ODpcdFxuIDM1OTpcdFx0aGFuZGxlID0gc2F2ZV9zdGFjayhnZnBfbWFzayk7XG4gMzYwOlx0XHRfX3VwZGF0ZV9wYWdlX293bmVyX2hhbmRsZShwYWdlLCBoYW5kbGUsIG9yZGVyLCBnZnBfbWFzaywgTVJfTkVWRVIsXG4gMzYxOlx0XHRcdFx0XHQgICB0c19uc2VjLCBjdXJyZW50LVx1MDAzZXBpZCwgY3VycmVudC1cdTAwM2V0Z2lkLFxuIDM2MjpcdFx0XHRcdFx0ICAgY3VycmVudC1cdTAwM2Vjb21tKTtcbiAzNjM6XHRcdGluY19zdGFja19yZWNvcmRfY291bnQoaGFuZGxlLCBnZnBfbWFzaywgMSBcdTAwM2NcdTAwM2Mgb3JkZXIpO1xuIDM2NDpcdH1cbiAzNjU6XHRcbiAzNjY6XHR2b2lkIF9fZm9saW9fc2V0X293bmVyX21pZ3JhdGVfcmVhc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gbWlncmF0ZV9yZWFzb24gcmVhc29uKVxuIDM2NzpcdHtcbiAzNjg6XHRcdHN0cnVjdCBwYWdlX2V4dCAqcGFnZV9leHQgPSBwYWdlX2V4dF9nZXQoXHUwMDI2Zm9saW8tXHUwMDNlcGFnZSk7XG4gMzY5Olx0XHRzdHJ1Y3QgcGFnZV9vd25lciAqcGFnZV9vd25lcjtcbiAzNzA6XHRcbiAzNzE6XHRcdGlmICh1bmxpa2VseSghcGFnZV9leHQpKVxuIDM3MjpcdFx0XHRyZXR1cm47XG4gMzczOlx0XG4gMzc0Olx0XHRwYWdlX293bmVyID0gZ2V0X3BhZ2Vfb3duZXIocGFnZV9leHQpO1xuIDM3NTpcdFx0cGFnZV9vd25lci1cdTAwM2VsYXN0X21pZ3JhdGVfcmVhc29uID0gcmVhc29uO1xuIDM3NjpcdFx0cGFnZV9leHRfcHV0KHBhZ2VfZXh0KTtcbiAzNzc6XHR9XG4gMzc4Olx0XG4gMzc5Olx0dm9pZCBfX3NwbGl0X3BhZ2Vfb3duZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvbGRfb3JkZXIsIGludCBuZXdfb3JkZXIpXG4gMzgwOlx0e1xuIDM4MTpcdFx0c3RydWN0IHBhZ2VfZXh0X2l0ZXIgaXRlcjtcbiAzODI6XHRcdHN0cnVjdCBwYWdlX2V4dCAqcGFnZV9leHQ7XG4gMzgzOlx0XHRzdHJ1Y3QgcGFnZV9vd25lciAqcGFnZV9vd25lcjtcbiAzODQ6XHRcbiAzODU6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiAzODY6XHRcdGZvcl9lYWNoX3BhZ2VfZXh0KHBhZ2UsIDEgXHUwMDNjXHUwMDNjIG9sZF9vcmRlciwgcGFnZV9leHQsIGl0ZXIpIHtcbiAzODc6XHRcdFx0cGFnZV9vd25lciA9IGdldF9wYWdlX293bmVyKHBhZ2VfZXh0KTtcbiAzODg6XHRcdFx0cGFnZV9vd25lci1cdTAwM2VvcmRlciA9IG5ld19vcmRlcjtcbiAzODk6XHRcdH1cbiAzOTA6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIDM5MTpcdH1cbiAzOTI6XHRcbiAzOTM6XHR2b2lkIF9fZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZClcbiAzOTQ6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MDAKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZWAgQ2FsbCBTaXRlcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZnVuY3Rpb24sIGBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlYC4gVG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gd2hlcmUgaXQmIzM5O3MgYmVpbmcgdXNlZCBhbmQsIG1vcmUgaW1wb3J0YW50bHksICpob3cqIGl0JiMzOTtzIGJlaW5nIHVzZWQsIEkmIzM5O20gZ29pbmcgdG8gbGV2ZXJhZ2UgYGdyZXBwZXJgLiBJJiMzOTttIGdvaW5nIHRvIHJ1biBhIHNlYXJjaCBzcGVjaWZpY2FsbHkgZm9yIGNhbGxzIHRvIHRoYXQgZnVuY3Rpb24gYWNyb3NzIHRoZSBlbnRpcmUgY29kZWJhc2UuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBvdmVydmlldyBvZiBhbGwgdGhlIGRpZmZlcmVudCBjb250ZXh0cyBpbiB3aGljaCBpdCBvcGVyYXRlcy4gS25vd2luZyB0aGUgc3Vycm91bmRpbmcgY29kZSB3aWxsIHRlbGwgbWUgYSBncmVhdCBkZWFsIGFib3V0IHRoZSBhc3N1bXB0aW9ucyBhbmQgcG9zc2libGUgc2lkZSBlZmZlY3RzIHJlbGF0ZWQgdG8gdGhpcyBzcGVjaWZpYyBmdW5jdGlvbi4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gZHJhdyBzb21lIGNvbmNsdXNpb25zIGFib3V0IHRoZSBmdW5jdGlvbiYjMzk7cyBvdmVyYWxsIHB1cnBvc2UgYW5kIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3BhZ2Vfb3duZXIuYz0yNjI9c3RhdGljIGlubGluZSB2b2lkIF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbm1tL3BhZ2Vfb3duZXIuYy0yOTAtXG5tbS9wYWdlX293bmVyLmM6MjkxOnN0YXRpYyBpbmxpbmUgdm9pZCBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlKHN0cnVjdCBwYWdlICpwYWdlLFxubW0vcGFnZV9vd25lci5jLTI5Mi1cdFx0XHRcdFx0XHQgICBkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGUsXG4tLVxubW0vcGFnZV9vd25lci5jPTMxNj12b2lkIF9fcmVzZXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgc2hvcnQgb3JkZXIpXG4tLVxubW0vcGFnZV9vd25lci5jLTMzOC1cdGhhbmRsZSA9IHNhdmVfc3RhY2soX19HRlBfTk9XQVJOKTtcbm1tL3BhZ2Vfb3duZXIuYzozMzk6XHRfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlKHBhZ2UsIGhhbmRsZSwgb3JkZXIsIGN1cnJlbnQtXHUwMDNlcGlkLFxubW0vcGFnZV9vd25lci5jLTM0MC1cdFx0XHRcdFx0Y3VycmVudC1cdTAwM2V0Z2lkLCBmcmVlX3RzX25zZWMpO1xuLS1cbm1tL3BhZ2Vfb3duZXIuYz0zOTM9dm9pZCBfX2ZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpXG4tLVxubW0vcGFnZV9vd25lci5jLTQyNS1cdCAqL1xubW0vcGFnZV9vd25lci5jOjQyNjpcdF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGUoXHUwMDI2bmV3Zm9saW8tXHUwMDNlcGFnZSwgMCwgb2xkX3BhZ2Vfb3duZXItXHUwMDNlb3JkZXIsXG5tbS9wYWdlX293bmVyLmMtNDI3LVx0XHRcdFx0XHRvbGRfcGFnZV9vd25lci1cdTAwM2VmcmVlX3BpZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk3OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOgoKKipEaXZpbmcgaW50byBgX19mb2xpb19jb3B5X293bmVyYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgZ29pbmcgb24gaW4gdGhpcyBgX19mb2xpb19jb3B5X293bmVyYCBmdW5jdGlvbi4gVGhlIGNvbnRleHQgSSBuZWVkIGlzIHdpdGhpbiB0aGUgYG1tL3BhZ2Vfb3duZXIuY2AgZmlsZSwgc3BlY2lmaWNhbGx5IGxpbmVzIDM5My00MzUuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIGNodW5rIG9mIGNvZGUsIHNvIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMuIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgaGFuZGxpbmcgdGhlIGNvcHlpbmcgb2Ygb3duZXJzaGlwIGluZm9ybWF0aW9uIGZvciBhIGZvbGlvLCBsaWtlbHkgcmVsYXRlZCB0byBwYWdlIG93bmVyc2hpcCB0cmFja2luZywgZ2l2ZW4gdGhlIGZpbGVuYW1lLiBJJiMzOTtsbCBuZWVkIHRvIHBhcnNlIHRoZSBsb2dpYyBpbiB0aG9zZSBsaW5lcyB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBpbXBsZW1lbnRlZC4gSSBleHBlY3QgdGhlcmUmIzM5O3Mgc29tZSBraW5kIG9mIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZm9saW8gaW52b2x2ZWQsIGFuZCB0aGUgZnVuY3Rpb24mIzM5O3Mgb2JqZWN0aXZlIGlzIHRvIGR1cGxpY2F0ZSBvd25lcnNoaXAgZGF0YSwgcGVyaGFwcyByZWZlcmVuY2UgY291bnRzLCBhbmQgcG9zc2libHkgb3RoZXIgcmVsYXRlZCBtZXRhZGF0YSwgZHVyaW5nIGEgZm9saW8gY29weSBvcGVyYXRpb24uIEkgd2FudCB0byBwYXkgY2FyZWZ1bCBhdHRlbnRpb24gdG8gYW55IGxvY2tpbmcgcHJpbWl0aXZlcyB1c2VkIHdpdGhpbiB0aGF0IHJlZ2lvbi4gVGhhdCB3aWxsIHRlbGwgbWUgaG93IHRoaXMgaXMgc2FmZWx5IGludGVncmF0ZWQgaW50byB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbS4gT2theSwgbGV0JiMzOTtzIGdvIGxpbmUgYnkgbGluZSBhbmQgc2VlIHdoYXQgaXQmIzM5O3MgcmVhbGx5IGRvaW5nLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGFnZV9vd25lci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzkzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzOTM6XHR2b2lkIF9fZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZClcbiAzOTQ6XHR7XG4gMzk1Olx0XHRzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0O1xuIDM5NjpcdFx0c3RydWN0IHBhZ2VfZXh0X2l0ZXIgaXRlcjtcbiAzOTc6XHRcdHN0cnVjdCBwYWdlX293bmVyICpvbGRfcGFnZV9vd25lcjtcbiAzOTg6XHRcdHN0cnVjdCBwYWdlX293bmVyICpuZXdfcGFnZV9vd25lcjtcbiAzOTk6XHRcdGRlcG90X3N0YWNrX2hhbmRsZV90IG1pZ3JhdGVfaGFuZGxlO1xuIDQwMDpcdFxuIDQwMTpcdFx0cGFnZV9leHQgPSBwYWdlX2V4dF9nZXQoXHUwMDI2b2xkLVx1MDAzZXBhZ2UpO1xuIDQwMjpcdFx0aWYgKHVubGlrZWx5KCFwYWdlX2V4dCkpXG4gNDAzOlx0XHRcdHJldHVybjtcbiA0MDQ6XHRcbiA0MDU6XHRcdG9sZF9wYWdlX293bmVyID0gZ2V0X3BhZ2Vfb3duZXIocGFnZV9leHQpO1xuIDQwNjpcdFx0cGFnZV9leHRfcHV0KHBhZ2VfZXh0KTtcbiA0MDc6XHRcbiA0MDg6XHRcdHBhZ2VfZXh0ID0gcGFnZV9leHRfZ2V0KFx1MDAyNm5ld2ZvbGlvLVx1MDAzZXBhZ2UpO1xuIDQwOTpcdFx0aWYgKHVubGlrZWx5KCFwYWdlX2V4dCkpXG4gNDEwOlx0XHRcdHJldHVybjtcbiA0MTE6XHRcbiA0MTI6XHRcdG5ld19wYWdlX293bmVyID0gZ2V0X3BhZ2Vfb3duZXIocGFnZV9leHQpO1xuIDQxMzpcdFx0cGFnZV9leHRfcHV0KHBhZ2VfZXh0KTtcbiA0MTQ6XHRcbiA0MTU6XHRcdG1pZ3JhdGVfaGFuZGxlID0gbmV3X3BhZ2Vfb3duZXItXHUwMDNlaGFuZGxlO1xuIDQxNjpcdFx0X191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUoXHUwMDI2bmV3Zm9saW8tXHUwMDNlcGFnZSwgb2xkX3BhZ2Vfb3duZXItXHUwMDNlaGFuZGxlLFxuIDQxNzpcdFx0XHRcdFx0ICAgb2xkX3BhZ2Vfb3duZXItXHUwMDNlb3JkZXIsIG9sZF9wYWdlX293bmVyLVx1MDAzZWdmcF9tYXNrLFxuIDQxODpcdFx0XHRcdFx0ICAgb2xkX3BhZ2Vfb3duZXItXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbixcbiA0MTk6XHRcdFx0XHRcdCAgIG9sZF9wYWdlX293bmVyLVx1MDAzZXRzX25zZWMsIG9sZF9wYWdlX293bmVyLVx1MDAzZXBpZCxcbiA0MjA6XHRcdFx0XHRcdCAgIG9sZF9wYWdlX293bmVyLVx1MDAzZXRnaWQsIG9sZF9wYWdlX293bmVyLVx1MDAzZWNvbW0pO1xuIDQyMTpcdFx0LypcbiA0MjI6XHRcdCAqIERvIG5vdCBwcm9hY3RpdmVseSBjbGVhciBQQUdFX0VYVF9PV05FUntfQUxMT0NBVEVEfSBiaXRzIGFzIHRoZSBmb2xpb1xuIDQyMzpcdFx0ICogd2lsbCBiZSBmcmVlZCBhZnRlciBtaWdyYXRpb24uIEtlZXAgdGhlbSB1bnRpbCB0aGVuIGFzIHRoZXkgbWF5IGJlXG4gNDI0Olx0XHQgKiB1c2VmdWwuXG4gNDI1Olx0XHQgKi9cbiA0MjY6XHRcdF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGUoXHUwMDI2bmV3Zm9saW8tXHUwMDNlcGFnZSwgMCwgb2xkX3BhZ2Vfb3duZXItXHUwMDNlb3JkZXIsXG4gNDI3Olx0XHRcdFx0XHRcdG9sZF9wYWdlX293bmVyLVx1MDAzZWZyZWVfcGlkLFxuIDQyODpcdFx0XHRcdFx0XHRvbGRfcGFnZV9vd25lci1cdTAwM2VmcmVlX3RnaWQsXG4gNDI5Olx0XHRcdFx0XHRcdG9sZF9wYWdlX293bmVyLVx1MDAzZWZyZWVfdHNfbnNlYyk7XG4gNDMwOlx0XHQvKlxuIDQzMTpcdFx0ICogV2UgbGlua2VkIHRoZSBvcmlnaW5hbCBzdGFjayB0byB0aGUgbmV3IGZvbGlvLCB3ZSBuZWVkIHRvIGRvIHRoZSBzYW1lXG4gNDMyOlx0XHQgKiBmb3IgdGhlIG5ldyBvbmUgYW5kIHRoZSBvbGQgZm9saW8gb3RoZXJ3aXNlIHRoZXJlIHdpbGwgYmUgYW4gaW1iYWxhbmNlXG4gNDMzOlx0XHQgKiB3aGVuIHN1YnRyYWN0aW5nIHRob3NlIHBhZ2VzIGZyb20gdGhlIHN0YWNrLlxuIDQzNDpcdFx0ICovXG4gNDM1Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gNDM2Olx0XHRmb3JfZWFjaF9wYWdlX2V4dChcdTAwMjZvbGQtXHUwMDNlcGFnZSwgMSBcdTAwM2NcdTAwM2MgbmV3X3BhZ2Vfb3duZXItXHUwMDNlb3JkZXIsIHBhZ2VfZXh0LCBpdGVyKSB7XG4gNDM3Olx0XHRcdG9sZF9wYWdlX293bmVyID0gZ2V0X3BhZ2Vfb3duZXIocGFnZV9leHQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDk2CgkJCQkJCQlvdXRwdXQ6IDE4NAoJCQkJCQkJdGhvdWdodHM6IDYyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYWdlIE93bmVyIEZyZWUgSGFuZGxlIEJ1ZyBhbmQgQXNzZXNzaW5nIFJpc2tzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHRoZXJlJiMzOTtzIGEgc3RyYWlnaHRmb3J3YXJkIGJ1ZyBpbiBgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZWAuIFRoZSBmdW5jdGlvbiB3YXMgc3VwcG9zZWQgdG8gdXBkYXRlIHRoZSBwYWdlIG93bmVyJiMzOTtzIGluZm9ybWF0aW9uIHdpdGggc3BlY2lmaWMgYHBpZGAgYW5kIGB0Z2lkYCB2YWx1ZXMgcGFzc2VkIHRvIGl0LiBIb3dldmVyLCB0aGUgY29kZSB3YXMgbWlzdGFrZW5seSB1c2luZyBgY3VycmVudC0mZ3Q7cGlkYCBhbmQgYGN1cnJlbnQtJmd0O3RnaWRgIGluc3RlYWQsIGNvbXBsZXRlbHkgaWdub3JpbmcgdGhlIHBhc3NlZCBhcmd1bWVudHMhIFRoaXMgaGFwcGVuZWQgYmVjYXVzZSBpbnNpZGUgdGhlIGxvb3AgaW4gYF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGVgLCBpdCBoYWQgdGhlc2UgbGluZXM6CgpgYGBjCnBhZ2Vfb3duZXItJmd0O2ZyZWVfdHNfbnNlYyA9IGZyZWVfdHNfbnNlYzsKcGFnZV9vd25lci0mZ3Q7ZnJlZV9waWQgPSBjdXJyZW50LSZndDtwaWQ7CnBhZ2Vfb3duZXItJmd0O2ZyZWVfdGdpZCA9IGN1cnJlbnQtJmd0O3RnaWQ7CmBgYAoKU28gd2hlbiBgX19mb2xpb19jb3B5X293bmVyYCBjYWxsZWQgYF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGVgIHdpdGgsIHNheSwgdGhlIG9sZCBwYWdlIG93bmVyJiMzOTtzIGBmcmVlX3BpZGAgYW5kIGBmcmVlX3RnaWRgLCBpdCB3YXMgY2xvYmJlcmluZyB0aG9zZSB3aXRoIHRoZSAqY3VycmVudCogcHJvY2VzcyYjMzk7cyBpbmZvcm1hdGlvbi4gIFRoZSBmaXggaXMsIG9mIGNvdXJzZSwgYSBzaW1wbGUgc3dhcCB0byB1c2luZyB0aGUgcHJvdmlkZWQgdmFsdWVzOgoKYGBgYwotCQlwYWdlX293bmVyLSZndDtmcmVlX3BpZCA9IGN1cnJlbnQtJmd0O3BpZDsKLQkJcGFnZV9vd25lci0mZ3Q7ZnJlZV90Z2lkID0gY3VycmVudC0mZ3Q7dGdpZDsKJiM0MzsJCXBhZ2Vfb3duZXItJmd0O2ZyZWVfcGlkID0gcGlkOwomIzQzOwkJcGFnZV9vd25lci0mZ3Q7ZnJlZV90Z2lkID0gdGdpZDsKYGBgCgpOb3csIGxldCYjMzk7cyBiZSB0aG9yb3VnaCBhbmQgbG9vayBhdCB0aGUgcG90ZW50aWFsIHJpc2tzLiBEb2VzIHRoaXMgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXM/ICBXZSBoYXZlIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gVGhlIGtleSBoZXJlIGlzIHRoYXQgdGhlIGBwaWRgIGFuZCBgdGdpZGAgYXJlIHBhc3NlZCBhcyBzY2FsYXIgYHBpZF90YCB2YWx1ZXMuIEluIHRoZSBjYWxsIGNoYWluLCBgX19yZXNldF9wYWdlX293bmVyYCBwYXNzZXMgYGN1cnJlbnQtJmd0O3BpZGAgYW5kIGBjdXJyZW50LSZndDt0Z2lkYCwgd2hpY2ggYXJlIGluaXRpYWxpemVkLiBUaGVuLCBgX19mb2xpb19jb3B5X293bmVyYCBwYXNzZXMgYG9sZF9wYWdlX293bmVyLSZndDtmcmVlX3BpZGAgYW5kIGBvbGRfcGFnZV9vd25lci0mZ3Q7ZnJlZV90Z2lkYCwgd2hpY2ggd2UgYXNzdW1lIHdlcmUgYWxzbyBpbml0aWFsaXplZCBlbHNld2hlcmUgd2hlbiB0aGUgcGFnZSB3YXMgZmlyc3QgZnJlZWQgKHdoaWNoIGlzIHRoZSBwb2ludCBvZiB0aGUgd2hvbGUgdHJhY2tpbmcgbWVjaGFuaXNtKS4KClRoZXJlZm9yZToKCjEuICBgcGlkYCBhbmQgYHRnaWRgIGFyZSBzY2FsYXIgdmFsdWUgYXJndW1lbnRzIGFuZCBhcmUgaW5pdGlhbGl6ZWQgd2hlbiBwYXNzZWQgdG8gYF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGVgLgoyLiAgVGhlcmUgYXJlbiYjMzk7dCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHBvdGVudGlhbCBsZWFrcywgYnJhbmNoZXMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLCBvciBjb21wbGV4IHN0cnVjdCBhbGxvY2F0aW9ucyBpbnZvbHZlZCBoZXJlLgozLiBUaGlzIGlzIHB1cmVseSBhIGxvZ2ljIGJ1ZyBmaXhpbmcgdGhlIHRyYWNraW5nIG9mIHRoZSBwcmV2aW91cyBvd25lci4KNC4gIE5vIEtNU0FOIGZ1enppbmcgaXMgbmVjZXNzYXJ5LiAgSXQmIzM5O3MgYSBzdHJhaWdodGZvcndhcmQgaW50ZWdlciBkYXRhIGZsb3cgaXNzdWUuCgpXZSBzaG91bGQgYmUgZ29vZCwgYnV0IGxldCYjMzk7cyBqdXN0IG1ha2Ugb25lIGxhc3Qgc2FuaXR5IGNoZWNrOgoKKiAgIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMuCiogICBObyBjaGFuZ2VzIHRvIGJvdW5kcyBvciBsZW5ndGhzLgoqICAgTm8gY29uZGl0aW9uYWwganVtcHMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLgoqICAgTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgY29waWVkIHRvIHVzZXJzcGFjZS4KKiAgIEFsbCBpbnZvbHZlZCB2YWx1ZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIGludGVnZXJzLgoKT2theSwgSSYjMzk7bSBzYXRpc2ZpZWQuIFRpbWUgdG8gd3JpdGUgdXAgdGhlIHJlYXNvbmluZyBhbmQgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGUoKWAgd2hlcmUgdGhlIGZ1bmN0aW9uIHdhcyBhc3NpZ25pbmcgYGN1cnJlbnQtXHUwMDNlcGlkYCBhbmQgYGN1cnJlbnQtXHUwMDNldGdpZGAgaW5zdGVhZCBvZiB0aGUgcGFzc2VkLWluIGBwaWRgIGFuZCBgdGdpZGAgZnVuY3Rpb24gYXJndW1lbnRzLiBUaGUgcGFzc2VkIHBhcmFtZXRlcnMgYXJlIHByaW1pdGl2ZSBzY2FsYXIgdHlwZXMgKGBwaWRfdGApIHRoYXQgYXJlIGluaXRpYWxpemVkIGJ5IGNhbGxlcnMgKGBjdXJyZW50LVx1MDAzZXBpZGAvYGN1cnJlbnQtXHUwMDNldGdpZGAgaW4gYF9fcmVzZXRfcGFnZV9vd25lcmAgb3IgYG9sZF9wYWdlX293bmVyLVx1MDAzZWZyZWVfcGlkYC9gZnJlZV90Z2lkYCBpbiBgX19mb2xpb19jb3B5X293bmVyYCkuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgc3RydWN0IHBhZGRpbmcgbGVha3MgdG8gdXNlciBzcGFjZSwgb3IgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGUoKWAgd2hlcmUgdGhlIGZ1bmN0aW9uIHdhcyBhc3NpZ25pbmcgYGN1cnJlbnQtXHUwMDNlcGlkYCBhbmQgYGN1cnJlbnQtXHUwMDNldGdpZGAgaW5zdGVhZCBvZiB0aGUgcGFzc2VkLWluIGBwaWRgIGFuZCBgdGdpZGAgZnVuY3Rpb24gYXJndW1lbnRzLiBUaGUgcGFzc2VkIHBhcmFtZXRlcnMgYXJlIHByaW1pdGl2ZSBzY2FsYXIgdHlwZXMgKGBwaWRfdGApIHRoYXQgYXJlIGluaXRpYWxpemVkIGJ5IGNhbGxlcnMgKGBjdXJyZW50LVx1MDAzZXBpZGAvYGN1cnJlbnQtXHUwMDNldGdpZGAgaW4gYF9fcmVzZXRfcGFnZV9vd25lcmAgb3IgYG9sZF9wYWdlX293bmVyLVx1MDAzZWZyZWVfcGlkYC9gZnJlZV90Z2lkYCBpbiBgX19mb2xpb19jb3B5X293bmVyYCkuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgc3RydWN0IHBhZGRpbmcgbGVha3MgdG8gdXNlciBzcGFjZSwgb3IgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMzo1MzozMi44Njc0NTIwMjlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTE5OTUyOTExODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEFHRV9PV05FUlwiLFxuICAgIFwiTUlHUkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19mb2xpb19jb3B5X293bmVyXCIsXG4gICAgXCJmb2xpb19taWdyYXRlX2ZsYWdzXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZSgpYCB3aGVyZSB0aGUgZnVuY3Rpb24gd2FzIGFzc2lnbmluZyBgY3VycmVudC1cXHUwMDNlcGlkYCBhbmQgYGN1cnJlbnQtXFx1MDAzZXRnaWRgIGluc3RlYWQgb2YgdGhlIHBhc3NlZC1pbiBgcGlkYCBhbmQgYHRnaWRgIGZ1bmN0aW9uIGFyZ3VtZW50cy4gVGhlIHBhc3NlZCBwYXJhbWV0ZXJzIGFyZSBwcmltaXRpdmUgc2NhbGFyIHR5cGVzIChgcGlkX3RgKSB0aGF0IGFyZSBpbml0aWFsaXplZCBieSBjYWxsZXJzIChgY3VycmVudC1cXHUwMDNlcGlkYC9gY3VycmVudC1cXHUwMDNldGdpZGAgaW4gYF9fcmVzZXRfcGFnZV9vd25lcmAgb3IgYG9sZF9wYWdlX293bmVyLVxcdTAwM2VmcmVlX3BpZGAvYGZyZWVfdGdpZGAgaW4gYF9fZm9saW9fY29weV9vd25lcmApLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHN0cnVjdCBwYWRkaW5nIGxlYWtzIHRvIHVzZXIgc3BhY2UsIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBtbS9wYWdlX293bmVyLmMgd2hlcmUgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZSgpIGlnbm9yZWQgdGhlIHBhc3NlZCBwaWQgYW5kIHRnaWQgYXJndW1lbnRzIGFuZCBpbnN0ZWFkIHVzZWQgY3VycmVudC1cXHUwMDNlcGlkIGFuZCBjdXJyZW50LVxcdTAwM2V0Z2lkLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgZm9saW8gbWlncmF0aW9uIGluIF9fZm9saW9fY29weV9vd25lcigpLCB3aGVyZSB0aGUgb3JpZ2luYWwgb3duZXIncyBmcmVlX3BpZCBhbmQgZnJlZV90Z2lkIG5lZWQgdG8gYmUgcHJlc2VydmVkLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCB0cmFja2luZyBsb2dpYyBpbiBjb3JlIG1tLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMzo1MzozMi44Njc0NTY0NjlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNzczOTEyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDZkMTJjODI0NjU2YzliODM3YzI4MjQzOGNlZTIzZmNlZGY1ZThlMGNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgNCAxMzo1MzozMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9wYWdlX293bmVyLmMgYi9tbS9wYWdlX293bmVyLmNcXG5pbmRleCAzZmMzN2Q5YjkwOGVmLi5jZmMzMWM5MmQ3NjU3IDEwMDY0NFxcbi0tLSBhL21tL3BhZ2Vfb3duZXIuY1xcbisrKyBiL21tL3BhZ2Vfb3duZXIuY1xcbkBAIC0zMDcsOCArMzA3LDggQEAgc3RhdGljIGlubGluZSB2b2lkIF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGUoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuIFxcdFxcdFxcdHBhZ2Vfb3duZXItXFx1MDAzZWZyZWVfaGFuZGxlID0gaGFuZGxlO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHBhZ2Vfb3duZXItXFx1MDAzZWZyZWVfdHNfbnNlYyA9IGZyZWVfdHNfbnNlYztcXG4tXFx0XFx0cGFnZV9vd25lci1cXHUwMDNlZnJlZV9waWQgPSBjdXJyZW50LVxcdTAwM2VwaWQ7XFxuLVxcdFxcdHBhZ2Vfb3duZXItXFx1MDAzZWZyZWVfdGdpZCA9IGN1cnJlbnQtXFx1MDAzZXRnaWQ7XFxuK1xcdFxcdHBhZ2Vfb3duZXItXFx1MDAzZWZyZWVfcGlkID0gcGlkO1xcbitcXHRcXHRwYWdlX293bmVyLVxcdTAwM2VmcmVlX3RnaWQgPSB0Z2lkO1xcbiBcXHR9XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEzOjUzOjMzLjI5NTkyNzYwMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6OTkwNDE1NDkyMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEFHRV9PV05FUlwiLFxuICAgIFwiTUlHUkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19mb2xpb19jb3B5X293bmVyXCIsXG4gICAgXCJmb2xpb19taWdyYXRlX2ZsYWdzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gbW0vcGFnZV9vd25lci5jIHdoZXJlIF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGUoKSBpZ25vcmVkIHRoZSBwYXNzZWQgcGlkIGFuZCB0Z2lkIGFyZ3VtZW50cyBhbmQgaW5zdGVhZCB1c2VkIGN1cnJlbnQtXFx1MDAzZXBpZCBhbmQgY3VycmVudC1cXHUwMDNldGdpZC4gVGhpcyBkaXJlY3RseSBhZmZlY3RzIGZvbGlvIG1pZ3JhdGlvbiBpbiBfX2ZvbGlvX2NvcHlfb3duZXIoKSwgd2hlcmUgdGhlIG9yaWdpbmFsIG93bmVyJ3MgZnJlZV9waWQgYW5kIGZyZWVfdGdpZCBuZWVkIHRvIGJlIHByZXNlcnZlZC4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgdHJhY2tpbmcgbG9naWMgaW4gY29yZSBtbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2ZDEyYzgyNDY1NmM5YjgzN2MyODI0MzhjZWUyM2ZjZWRmNWU4ZTBjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxMzo1MzozMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3BhZ2Vfb3duZXIuYyBiL21tL3BhZ2Vfb3duZXIuY1xuaW5kZXggM2ZjMzdkOWI5MDhlZi4uY2ZjMzFjOTJkNzY1NyAxMDA2NDRcbi0tLSBhL21tL3BhZ2Vfb3duZXIuY1xuKysrIGIvbW0vcGFnZV9vd25lci5jXG5AQCAtMzA3LDggKzMwNyw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlKHN0cnVjdCBwYWdlICpwYWdlLFxuIFx0XHRcdHBhZ2Vfb3duZXItXHUwMDNlZnJlZV9oYW5kbGUgPSBoYW5kbGU7XG4gXHRcdH1cbiBcdFx0cGFnZV9vd25lci1cdTAwM2VmcmVlX3RzX25zZWMgPSBmcmVlX3RzX25zZWM7XG4tXHRcdHBhZ2Vfb3duZXItXHUwMDNlZnJlZV9waWQgPSBjdXJyZW50LVx1MDAzZXBpZDtcbi1cdFx0cGFnZV9vd25lci1cdTAwM2VmcmVlX3RnaWQgPSBjdXJyZW50LVx1MDAzZXRnaWQ7XG4rXHRcdHBhZ2Vfb3duZXItXHUwMDNlZnJlZV9waWQgPSBwaWQ7XG4rXHRcdHBhZ2Vfb3duZXItXHUwMDNlZnJlZV90Z2lkID0gdGdpZDtcbiBcdH1cbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEzOjUzOjMzLjI5NTkyOTAxMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzMjM4NDcyNTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IGBtbS9wYWdlX293bmVyLmNgKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBtb2RpZmllZCBmaWxlLCB3aGljaCBpcyBgbW0vcGFnZV9vd25lci5jYC4gR2l2ZW4gdGhhdCBJJ20gZGVhbGluZyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LCB0aGlzIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGNoYW5nZXMsIHNvIG15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjb2RlIGFyb3VuZCBsaW5lIDMwNy4gSSdsbCBsaWtlbHkgdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBxdWlja2x5IGlzb2xhdGUgdGhlIHJlbGV2YW50IHNlY3Rpb24gb2YgdGhlIGNvZGUgYW5kIGdldCBhIGNsZWFyZXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0IHRoZSBwYXRjaCBpcyBkb2luZyBhbmQgaG93IGl0IGNvdWxkIHBvdGVudGlhbGx5IGltcGFjdCB0aGUgc3lzdGVtLiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyB0aGUgY29udGV4dCwgYW5kIHdoYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZG9lcyB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODg1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMzo1NDoxNi41MzQ0MDUxNjJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX293bmVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjkwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjkwOlxcdFxcbiAyOTE6XFx0c3RhdGljIGlubGluZSB2b2lkIF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGUoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuIDI5MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGUsXFxuIDI5MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBzaG9ydCBvcmRlcixcXG4gMjk0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIHBpZF90IHBpZCwgcGlkX3QgdGdpZCxcXG4gMjk1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIHU2NCBmcmVlX3RzX25zZWMpXFxuIDI5NjpcXHR7XFxuIDI5NzpcXHRcXHRzdHJ1Y3QgcGFnZV9leHRfaXRlciBpdGVyO1xcbiAyOTg6XFx0XFx0c3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dDtcXG4gMjk5OlxcdFxcdHN0cnVjdCBwYWdlX293bmVyICpwYWdlX293bmVyO1xcbiAzMDA6XFx0XFxuIDMwMTpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDMwMjpcXHRcXHRmb3JfZWFjaF9wYWdlX2V4dChwYWdlLCAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyLCBwYWdlX2V4dCwgaXRlcikge1xcbiAzMDM6XFx0XFx0XFx0cGFnZV9vd25lciA9IGdldF9wYWdlX293bmVyKHBhZ2VfZXh0KTtcXG4gMzA0OlxcdFxcdFxcdC8qIE9ubHkgX19yZXNldF9wYWdlX293bmVyKCkgd2FudHMgdG8gY2xlYXIgdGhlIGJpdCAqL1xcbiAzMDU6XFx0XFx0XFx0aWYgKGhhbmRsZSkge1xcbiAzMDY6XFx0XFx0XFx0XFx0X19jbGVhcl9iaXQoUEFHRV9FWFRfT1dORVJfQUxMT0NBVEVELCBcXHUwMDI2cGFnZV9leHQtXFx1MDAzZWZsYWdzKTtcXG4gMzA3OlxcdFxcdFxcdFxcdHBhZ2Vfb3duZXItXFx1MDAzZWZyZWVfaGFuZGxlID0gaGFuZGxlO1xcbiAzMDg6XFx0XFx0XFx0fVxcbiAzMDk6XFx0XFx0XFx0cGFnZV9vd25lci1cXHUwMDNlZnJlZV90c19uc2VjID0gZnJlZV90c19uc2VjO1xcbiAzMTA6XFx0XFx0XFx0cGFnZV9vd25lci1cXHUwMDNlZnJlZV9waWQgPSBwaWQ7XFxuIDMxMTpcXHRcXHRcXHRwYWdlX293bmVyLVxcdTAwM2VmcmVlX3RnaWQgPSB0Z2lkO1xcbiAzMTI6XFx0XFx0fVxcbiAzMTM6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDMxNDpcXHR9XFxuIDMxNTpcXHRcXG4gMzE2OlxcdHZvaWQgX19yZXNldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBzaG9ydCBvcmRlcilcXG4gMzE3OlxcdHtcXG4gMzE4OlxcdFxcdHN0cnVjdCBwYWdlX2V4dCAqcGFnZV9leHQ7XFxuIDMxOTpcXHRcXHRkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGU7XFxuIDMyMDpcXHRcXHRkZXBvdF9zdGFja19oYW5kbGVfdCBhbGxvY19oYW5kbGU7XFxuIDMyMTpcXHRcXHRzdHJ1Y3QgcGFnZV9vd25lciAqcGFnZV9vd25lcjtcXG4gMzIyOlxcdFxcdHU2NCBmcmVlX3RzX25zZWMgPSBsb2NhbF9jbG9jaygpO1xcbiAzMjM6XFx0XFxuIDMyNDpcXHRcXHRwYWdlX2V4dCA9IHBhZ2VfZXh0X2dldChwYWdlKTtcXG4gMzI1OlxcdFxcdGlmICh1bmxpa2VseSghcGFnZV9leHQpKVxcbiAzMjY6XFx0XFx0XFx0cmV0dXJuO1xcbiAzMjc6XFx0XFxuIDMyODpcXHRcXHRwYWdlX293bmVyID0gZ2V0X3BhZ2Vfb3duZXIocGFnZV9leHQpO1xcbiAzMjk6XFx0XFx0YWxsb2NfaGFuZGxlID0gcGFnZV9vd25lci1cXHUwMDNlaGFuZGxlO1xcbiAzMzA6XFx0XFx0cGFnZV9leHRfcHV0KHBhZ2VfZXh0KTtcXG4gMzMxOlxcdFxcbiAzMzI6XFx0XFx0LypcXG4gMzMzOlxcdFxcdCAqIERvIG5vdCBzcGVjaWZ5IEdGUF9OT1dBSVQgdG8gbWFrZSBnZnBmbGFnc19hbGxvd19zcGlubmluZygpID09IGZhbHNlXFxuIDMzNDpcXHRcXHQgKiB0byBwcmV2ZW50IGlzc3VlcyBpbiBzdGFja19kZXBvdF9zYXZlKCkuXFxuIDMzNTpcXHRcXHQgKiBUaGlzIGlzIHNpbWlsYXIgdG8gYWxsb2NfcGFnZXNfbm9sb2NrKCkgZ2ZwIGZsYWdzLCBidXQgb25seSB1c2VkXFxuIDMzNjpcXHRcXHQgKiB0byBzaWduYWwgc3RhY2tfZGVwb3QgdG8gYXZvaWQgc3Bpbl9sb2Nrcy5cXG4gMzM3OlxcdFxcdCAqL1xcbiAzMzg6XFx0XFx0aGFuZGxlID0gc2F2ZV9zdGFjayhfX0dGUF9OT1dBUk4pO1xcbiAzMzk6XFx0XFx0X191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZShwYWdlLCBoYW5kbGUsIG9yZGVyLCBjdXJyZW50LVxcdTAwM2VwaWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEzOjU0OjE2LjUzNDUwNjI1MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk3ODczODkxOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIGFyZSBteSBpbW1lZGlhdGUgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlYCBDYWxsZXJzKipcblxuQWxyaWdodCwgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyB0aG9yb3VnaGx5IGludmVzdGlnYXRlIHRoZSBjYWxsZXJzIG9mIGBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlYC4gVGhpcyB1c3VhbGx5IGluZGljYXRlcyBhIGNyaXRpY2FsIGFyZWEgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbSwgc28gYW55IGNoYW5nZXMgb3IgaXNzdWVzIGhlcmUgYXJlIGxpa2VseSB0byBoYXZlIGEgY2FzY2FkaW5nIGVmZmVjdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQg4oCTIHdoYXQncyB0aGUgaW50ZW5kZWQgcHVycG9zZSwgd2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGludm9sdmVkLCBhbmQgd2hhdCdzIHRoZSB0eXBpY2FsIHdvcmtmbG93IHN1cnJvdW5kaW5nIGl0PyBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoZSBhcmd1bWVudHMgYmVpbmcgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbiwgYXMgdGhhdCdsbCBnaXZlIG1lIGNsdWVzIGFib3V0IHRoZSBzcGVjaWZpYyBjb250ZXh0IGluIHdoaWNoIGl0IG9wZXJhdGVzLiBJcyBpdCBkZWFsaW5nIHdpdGggcGFnZSBmcmVlaW5nPyBQYWdlIGFsbG9jYXRpb24gdHJhY2tpbmc/IFNvbWV0aGluZyBlbHNlIGVudGlyZWx5P1xuXG5PbmNlIEkgaGF2ZSBhIGZpcm0gZ3Jhc3Agb24gdGhlIGNhbGxlcnMgdGhlbXNlbHZlcywgSSdsbCB0aGVuIGV4cGFuZCBteSBmb2N1cyB0byBlbmNvbXBhc3MgdGhlIFwic3Vycm91bmRpbmcgY29kZS5cIiBJIGNhbid0IGp1c3QgbG9vayBhdCB0aGUgZGlyZWN0IGNhbGxzOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGNvbnRleHQgb2YgKmhvdyogdGhlc2UgY2FsbHMgZml0IGludG8gdGhlIGdyZWF0ZXIgc2NoZW1lIG9mIG1lbW9yeSBtYW5hZ2VtZW50LiBXaGF0IG9wZXJhdGlvbnMgY29tZSBiZWZvcmUgdGhlIGNhbGwsIGFuZCB3aGF0IG9wZXJhdGlvbnMgaGFwcGVuIGltbWVkaWF0ZWx5IGFmdGVyd2FyZHM/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgbG9ja2luZyBpc3N1ZXMsIG9yIHN1YnRsZSBkZXBlbmRlbmNpZXMgdGhhdCBjb3VsZCBiZSBwcm9ibGVtYXRpYz8gV2hhdCdzIHRoZSBlcnJvciBoYW5kbGluZyBsaWtlIGluIHRoaXMgc2VjdGlvbj8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgZXhlY3V0aW9uIHBhdGggdGhhdCBsZWFkcyB0byB0aGlzIGZ1bmN0aW9uIGNhbGw/IEFuZCB3aGF0IGFzc3VtcHRpb25zIGFyZSBiZWluZyBtYWRlIGFib3V0IHRoZSBzdGF0ZSBvZiB0aGUgc3lzdGVtIGF0IHRoYXQgcG9pbnQ/IFRoZSBkZXZpbCBpcyBhbHdheXMgaW4gdGhlIGRldGFpbHMsIHNvIEkgbmVlZCB0byBrbm93IHRoaXMgaW5zaWRlIGFuZCBvdXQuIEl0J3MgdGltZSB0byBkaWcgZGVlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk0NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTM6NTQ6MjYuMzIxODk3NjkyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzODQ5MzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3BhZ2Vfb3duZXIuYz0yNjI9c3RhdGljIGlubGluZSB2b2lkIF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0vcGFnZV9vd25lci5jLTI5MC1cXG5tbS9wYWdlX293bmVyLmM6MjkxOnN0YXRpYyBpbmxpbmUgdm9pZCBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlKHN0cnVjdCBwYWdlICpwYWdlLFxcbm1tL3BhZ2Vfb3duZXIuYy0yOTItXFx0XFx0XFx0XFx0XFx0XFx0ICAgZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlLFxcbi0tXFxubW0vcGFnZV9vd25lci5jPTMxNj12b2lkIF9fcmVzZXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgc2hvcnQgb3JkZXIpXFxuLS1cXG5tbS9wYWdlX293bmVyLmMtMzM4LVxcdGhhbmRsZSA9IHNhdmVfc3RhY2soX19HRlBfTk9XQVJOKTtcXG5tbS9wYWdlX293bmVyLmM6MzM5OlxcdF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGUocGFnZSwgaGFuZGxlLCBvcmRlciwgY3VycmVudC1cXHUwMDNlcGlkLFxcbm1tL3BhZ2Vfb3duZXIuYy0zNDAtXFx0XFx0XFx0XFx0XFx0Y3VycmVudC1cXHUwMDNldGdpZCwgZnJlZV90c19uc2VjKTtcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYz0zOTM9dm9pZCBfX2ZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpXFxuLS1cXG5tbS9wYWdlX293bmVyLmMtNDI1LVxcdCAqL1xcbm1tL3BhZ2Vfb3duZXIuYzo0MjY6XFx0X191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZShcXHUwMDI2bmV3Zm9saW8tXFx1MDAzZXBhZ2UsIDAsIG9sZF9wYWdlX293bmVyLVxcdTAwM2VvcmRlcixcXG5tbS9wYWdlX293bmVyLmMtNDI3LVxcdFxcdFxcdFxcdFxcdG9sZF9wYWdlX293bmVyLVxcdTAwM2VmcmVlX3BpZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTM6NTQ6MjYuMzc1NzUzOTZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NTQ4MDg5NTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIGBwYWdlX293bmVyLmNgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBwYWdlIG93bmVyc2hpcCBpcyB0cmFja2VkIGluIHRoaXMgc3lzdGVtLCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIGBtbS9wYWdlX293bmVyLmNgIGZpbGUuIFNwZWNpZmljYWxseSwgSSdtIHplcm9pbmcgaW4gb24gdGhlIGBfX2ZvbGlvX2NvcHlfb3duZXJgIGZ1bmN0aW9uLiBUaGUgbmFtaW5nIHN1Z2dlc3RzIHRoaXMgaXMga2V5IHRvIGhvdyBvd25lcnNoaXAgaXMgdHJhbnNmZXJyZWQgb3IgY29waWVkLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSdtIGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZy4gVG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIEknbSBnb2luZyB0byBjYXJlZnVsbHkgcmVhZCBsaW5lcyAzODAgdGhyb3VnaCA0NTAuIFRob3NlIGxpbmVzIHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIGxvZ2ljIHN1cnJvdW5kaW5nIHRoZSBjb3B5IG9wZXJhdGlvbnMgYW5kIGhvdyBvd25lcnNoaXAgaXMgaGFuZGxlZCBkdXJpbmcgdGhhdCBwcm9jZXNzLiBMZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IGdvaW5nIG9uIGluIHRoYXQgc2VjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY5MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEzOjU0OjMzLjkyMzg0NzA2NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX293bmVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzgwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzgwOlxcdHtcXG4gMzgxOlxcdFxcdHN0cnVjdCBwYWdlX2V4dF9pdGVyIGl0ZXI7XFxuIDM4MjpcXHRcXHRzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0O1xcbiAzODM6XFx0XFx0c3RydWN0IHBhZ2Vfb3duZXIgKnBhZ2Vfb3duZXI7XFxuIDM4NDpcXHRcXG4gMzg1OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gMzg2OlxcdFxcdGZvcl9lYWNoX3BhZ2VfZXh0KHBhZ2UsIDEgXFx1MDAzY1xcdTAwM2Mgb2xkX29yZGVyLCBwYWdlX2V4dCwgaXRlcikge1xcbiAzODc6XFx0XFx0XFx0cGFnZV9vd25lciA9IGdldF9wYWdlX293bmVyKHBhZ2VfZXh0KTtcXG4gMzg4OlxcdFxcdFxcdHBhZ2Vfb3duZXItXFx1MDAzZW9yZGVyID0gbmV3X29yZGVyO1xcbiAzODk6XFx0XFx0fVxcbiAzOTA6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDM5MTpcXHR9XFxuIDM5MjpcXHRcXG4gMzkzOlxcdHZvaWQgX19mb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKVxcbiAzOTQ6XFx0e1xcbiAzOTU6XFx0XFx0c3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dDtcXG4gMzk2OlxcdFxcdHN0cnVjdCBwYWdlX2V4dF9pdGVyIGl0ZXI7XFxuIDM5NzpcXHRcXHRzdHJ1Y3QgcGFnZV9vd25lciAqb2xkX3BhZ2Vfb3duZXI7XFxuIDM5ODpcXHRcXHRzdHJ1Y3QgcGFnZV9vd25lciAqbmV3X3BhZ2Vfb3duZXI7XFxuIDM5OTpcXHRcXHRkZXBvdF9zdGFja19oYW5kbGVfdCBtaWdyYXRlX2hhbmRsZTtcXG4gNDAwOlxcdFxcbiA0MDE6XFx0XFx0cGFnZV9leHQgPSBwYWdlX2V4dF9nZXQoXFx1MDAyNm9sZC1cXHUwMDNlcGFnZSk7XFxuIDQwMjpcXHRcXHRpZiAodW5saWtlbHkoIXBhZ2VfZXh0KSlcXG4gNDAzOlxcdFxcdFxcdHJldHVybjtcXG4gNDA0OlxcdFxcbiA0MDU6XFx0XFx0b2xkX3BhZ2Vfb3duZXIgPSBnZXRfcGFnZV9vd25lcihwYWdlX2V4dCk7XFxuIDQwNjpcXHRcXHRwYWdlX2V4dF9wdXQocGFnZV9leHQpO1xcbiA0MDc6XFx0XFxuIDQwODpcXHRcXHRwYWdlX2V4dCA9IHBhZ2VfZXh0X2dldChcXHUwMDI2bmV3Zm9saW8tXFx1MDAzZXBhZ2UpO1xcbiA0MDk6XFx0XFx0aWYgKHVubGlrZWx5KCFwYWdlX2V4dCkpXFxuIDQxMDpcXHRcXHRcXHRyZXR1cm47XFxuIDQxMTpcXHRcXG4gNDEyOlxcdFxcdG5ld19wYWdlX293bmVyID0gZ2V0X3BhZ2Vfb3duZXIocGFnZV9leHQpO1xcbiA0MTM6XFx0XFx0cGFnZV9leHRfcHV0KHBhZ2VfZXh0KTtcXG4gNDE0OlxcdFxcbiA0MTU6XFx0XFx0bWlncmF0ZV9oYW5kbGUgPSBuZXdfcGFnZV9vd25lci1cXHUwMDNlaGFuZGxlO1xcbiA0MTY6XFx0XFx0X191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUoXFx1MDAyNm5ld2ZvbGlvLVxcdTAwM2VwYWdlLCBvbGRfcGFnZV9vd25lci1cXHUwMDNlaGFuZGxlLFxcbiA0MTc6XFx0XFx0XFx0XFx0XFx0ICAgb2xkX3BhZ2Vfb3duZXItXFx1MDAzZW9yZGVyLCBvbGRfcGFnZV9vd25lci1cXHUwMDNlZ2ZwX21hc2ssXFxuIDQxODpcXHRcXHRcXHRcXHRcXHQgICBvbGRfcGFnZV9vd25lci1cXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbixcXG4gNDE5OlxcdFxcdFxcdFxcdFxcdCAgIG9sZF9wYWdlX293bmVyLVxcdTAwM2V0c19uc2VjLCBvbGRfcGFnZV9vd25lci1cXHUwMDNlcGlkLFxcbiA0MjA6XFx0XFx0XFx0XFx0XFx0ICAgb2xkX3BhZ2Vfb3duZXItXFx1MDAzZXRnaWQsIG9sZF9wYWdlX293bmVyLVxcdTAwM2Vjb21tKTtcXG4gNDIxOlxcdFxcdC8qXFxuIDQyMjpcXHRcXHQgKiBEbyBub3QgcHJvYWN0aXZlbHkgY2xlYXIgUEFHRV9FWFRfT1dORVJ7X0FMTE9DQVRFRH0gYml0cyBhcyB0aGUgZm9saW9cXG4gNDIzOlxcdFxcdCAqIHdpbGwgYmUgZnJlZWQgYWZ0ZXIgbWlncmF0aW9uLiBLZWVwIHRoZW0gdW50aWwgdGhlbiBhcyB0aGV5IG1heSBiZVxcbiA0MjQ6XFx0XFx0ICogdXNlZnVsLlxcbiA0MjU6XFx0XFx0ICovXFxuIDQyNjpcXHRcXHRfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlKFxcdTAwMjZuZXdmb2xpby1cXHUwMDNlcGFnZSwgMCwgb2xkX3BhZ2Vfb3duZXItXFx1MDAzZW9yZGVyLFxcbiA0Mjc6XFx0XFx0XFx0XFx0XFx0XFx0b2xkX3BhZ2Vfb3duZXItXFx1MDAzZWZyZWVfcGlkLFxcbiA0Mjg6XFx0XFx0XFx0XFx0XFx0XFx0b2xkX3BhZ2Vfb3duZXItXFx1MDAzZWZyZWVfdGdpZCxcXG4gNDI5OlxcdFxcdFxcdFxcdFxcdFxcdG9sZF9wYWdlX293bmVyLVxcdTAwM2VmcmVlX3RzX25zZWMpO1xcbiA0MzA6XFx0XFx0LypcXG4gNDMxOlxcdFxcdCAqIFdlIGxpbmtlZCB0aGUgb3JpZ2luYWwgc3RhY2sgdG8gdGhlIG5ldyBmb2xpbywgd2UgbmVlZCB0byBkbyB0aGUgc2FtZVxcbiA0MzI6XFx0XFx0ICogZm9yIHRoZSBuZXcgb25lIGFuZCB0aGUgb2xkIGZvbGlvIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGFuIGltYmFsYW5jZVxcbiA0MzM6XFx0XFx0ICogd2hlbiBzdWJ0cmFjdGluZyB0aG9zZSBwYWdlcyBmcm9tIHRoZSBzdGFjay5cXG4gNDM0OlxcdFxcdCAqL1xcbiA0MzU6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiA0MzY6XFx0XFx0Zm9yX2VhY2hfcGFnZV9leHQoXFx1MDAyNm9sZC1cXHUwMDNlcGFnZSwgMSBcXHUwMDNjXFx1MDAzYyBuZXdfcGFnZV9vd25lci1cXHUwMDNlb3JkZXIsIHBhZ2VfZXh0LCBpdGVyKSB7XFxuIDQzNzpcXHRcXHRcXHRvbGRfcGFnZV9vd25lciA9IGdldF9wYWdlX293bmVyKHBhZ2VfZXh0KTtcXG4gNDM4OlxcdFxcdFxcdG9sZF9wYWdlX293bmVyLVxcdTAwM2VoYW5kbGUgPSBtaWdyYXRlX2hhbmRsZTtcXG4gNDM5OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTM6NTQ6MzMuOTIzOTU1NzY1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDEwMDYxODYxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgUGFnZSBPd25lciBCdWcgYW5kIGl0cyBGaXgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IHRoZSBgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZWAgZnVuY3Rpb24gYW5kIGl0cyBwYXJhbWV0ZXJzOiBgcGFnZWAsIGBoYW5kbGVgLCBgb3JkZXJgLCBgcGlkYCwgYHRnaWRgLCBhbmQgYGZyZWVfdHNfbnNlY2AuIFRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBpcyB0aGF0IGluc2lkZSB0aGlzIGZ1bmN0aW9uLCBpdCdzIHVwZGF0aW5nIHRoZSBgcGFnZV9vd25lcmAgc3RydWN0IHdpdGggYGN1cnJlbnQtXHUwMDNlcGlkYCBhbmQgYGN1cnJlbnQtXHUwMDNldGdpZGAgaW5zdGVhZCBvZiB1c2luZyB0aGUgYHBpZGAgYW5kIGB0Z2lkYCB2YWx1ZXMgdGhhdCB3ZXJlIHBhc3NlZCBpbi4gVGhpcyBpcyBhIGNsYXNzaWMgYnVnOiB0aGUgZnVuY3Rpb24ncyBjb250cmFjdCBpc24ndCBiZWluZyB1cGhlbGQuIEl0IHNob3VsZCBiZSB1c2luZyB0aGUgcHJvdmlkZWQgaWRlbnRpZmllcnMsIGJ1dCBpdCdzIGluYWR2ZXJ0ZW50bHkgcmVwbGFjaW5nIHRoZW0gd2l0aCB0aGUgY2FsbGVyJ3MgcHJvY2VzcyBhbmQgdGhyZWFkIElEcy5cblxuRGlnZ2luZyBmdXJ0aGVyLCBJIHNlZSB0aGF0IGBfX2ZvbGlvX2NvcHlfb3duZXJgIGNhbGxzIGBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlYC4gU3BlY2lmaWNhbGx5LCBpdCBjYWxscyB0aGlzIGZ1bmN0aW9uIHdpdGggdGhlIHZhbHVlcyBgb2xkX3BhZ2Vfb3duZXItXHUwMDNlZnJlZV9waWRgIGFuZCBgb2xkX3BhZ2Vfb3duZXItXHUwMDNlZnJlZV90Z2lkYC4gQmVjYXVzZSBvZiB0aGUgb3JpZ2luYWwgYnVnLCBpdCBzaG91bGQgaGF2ZSBiZWVuIHBhc3NpbmcgYW5kIHJlY2VpdmluZyB0aG9zZSB2YWx1ZXMsIGJ1dCBpbnN0ZWFkLCBpdCdzIGFzc2lnbmluZyBgY3VycmVudC1cdTAwM2VwaWRgIGFuZCBgY3VycmVudC1cdTAwM2V0Z2lkYCBpbiB0aGUgYF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGVgIGZ1bmN0aW9uLiBUaGF0IG1lYW5zIGFueSBvd25lciBpbmZvcm1hdGlvbiBmcm9tIGFuIG9sZCBwYWdlIGlzIG5vdyBiZWluZyBvdmVyd3JpdHRlbiB3aGVuIHRoZSBwYWdlIGlzIGJlaW5nIGNvcGllZC4gVGhhdCdzIGEgc2VyaW91cyBwb3RlbnRpYWwgbGVhayBvciBtaXNhdHRyaWJ1dGlvbiBpc3N1ZSwgZGVwZW5kaW5nIG9uIGhvdyB0aGlzIGRhdGEgaXMgdXNlZCBkb3duc3RyZWFtLlxuXG5UaGUgcHJvcG9zZWQgcGF0Y2ggaXMgc3RyYWlnaHRmb3J3YXJkIGFuZCBleGFjdGx5IHdoYXQncyBuZWVkZWQuIEl0IGNvcnJlY3RzIHRoZSBjb2RlIHRvIHNldCBgcGFnZV9vd25lci1cdTAwM2VmcmVlX3BpZCA9IHBpZDsgcGFnZV9vd25lci1cdTAwM2VmcmVlX3RnaWQgPSB0Z2lkO2AsIGVuc3VyaW5nIHRoYXQgdGhlIHBhc3NlZC1pbiB2YWx1ZXMgYXJlIGFjdHVhbGx5IHVzZWQuXG5cbk5vdywgbGV0IG1lIGNoZWNrIHRoZSBLY29uZmlnIGFuZCBzZWUgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSBmb3Igc3lzdGVtcyB3aGVyZSBgcGFnZV9vd25lcmAgaXMgZW5hYmxlZCwgYW5kIGlmIHRoaXMgY291bGQgYXBwbHkgdG8gb3VyIGtlcm5lbCBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTU1LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTM6NTQ6MzguMDI0NTc2MzIzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDAwMjM0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJQQUdFX09XTkVSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnLmRlYnVnPTExPWNvbmZpZyBERUJVR19QQUdFQUxMT0NcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMjUtXFx0ICB3aXRoIHN0YWNrIHRyYWNlcyBvZiBsYXN0IGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgb2YgdGhlIHBhZ2UsIHdoZW5cXG5tbS9LY29uZmlnLmRlYnVnOjI2OlxcdCAgUEFHRV9PV05FUiBpcyBhbHNvIHNlbGVjdGVkIGFuZCBlbmFibGVkIG9uIGJvb3QuXFxubW0vS2NvbmZpZy5kZWJ1Zy0yNy1cXG4tLVxcbm1tL0tjb25maWcuZGVidWc9NzM9Y29uZmlnIFNMVUJfUkNVX0RFQlVHXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnLTEwNC1cXG5tbS9LY29uZmlnLmRlYnVnOjEwNTpjb25maWcgUEFHRV9PV05FUlxcbm1tL0tjb25maWcuZGVidWctMTA2LVxcdGJvb2wgXFxcIlRyYWNrIHBhZ2Ugb3duZXJcXFwiXFxuLS1cXG5tbS9NYWtlZmlsZT0xMTc9b2JqLSQoQ09ORklHX0RFQlVHX1ZNX1BHVEFCTEUpICs9IGRlYnVnX3ZtX3BndGFibGUub1xcbm1tL01ha2VmaWxlOjExODpvYmotJChDT05GSUdfUEFHRV9PV05FUikgKz0gcGFnZV9vd25lci5vXFxubW0vTWFrZWZpbGUtMTE5LW9iai0kKENPTkZJR19NRU1PUllfSVNPTEFUSU9OKSArPSBwYWdlX2lzb2xhdGlvbi5vXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NTE0Mj11bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbm9wcm9mKGdmcF90IGdmcCwgaW50IHByZWZlcnJlZF9uaWQsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTE3Ny1cXG5tbS9wYWdlX2FsbG9jLmM6NTE3ODojaWZkZWYgQ09ORklHX1BBR0VfT1dORVJcXG5tbS9wYWdlX2FsbG9jLmMtNTE3OS1cXHQvKlxcbm1tL3BhZ2VfYWxsb2MuYzo1MTgwOlxcdCAqIFBBR0VfT1dORVIgbWF5IHJlY3Vyc2UgaW50byB0aGUgYWxsb2NhdG9yIHRvIGFsbG9jYXRlIHNwYWNlIHRvXFxubW0vcGFnZV9hbGxvYy5jLTUxODEtXFx0ICogc2F2ZSB0aGUgc3RhY2sgd2l0aCBwYWdlc2V0cy5sb2NrIGhlbGQuIFJlbGVhc2luZy9yZWFjcXVpcmluZ1xcbi0tXFxubW0vcGFnZV9leHQuYz04MD1zdGF0aWMgc3RydWN0IHBhZ2VfZXh0X29wZXJhdGlvbnMgKnBhZ2VfZXh0X29wc1tdIF9faW5pdGRhdGEgPSB7XFxubW0vcGFnZV9leHQuYzo4MTojaWZkZWYgQ09ORklHX1BBR0VfT1dORVJcXG5tbS9wYWdlX2V4dC5jLTgyLVxcdFxcdTAwMjZwYWdlX293bmVyX29wcyxcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYy0xOC0vKlxcbm1tL3BhZ2Vfb3duZXIuYzoxOTogKiBUT0RPOiB0ZWFjaCBQQUdFX09XTkVSX1NUQUNLX0RFUFRIIChfX2R1bXBfcGFnZV9vd25lciBhbmQgc2F2ZV9zdGFjaylcXG5tbS9wYWdlX293bmVyLmMtMjAtICogdG8gdXNlIG9mZiBzdGFjayB0ZW1wb3JhbCBzdG9yYWdlXFxubW0vcGFnZV9vd25lci5jLTIxLSAqL1xcbm1tL3BhZ2Vfb3duZXIuYzoyMjojZGVmaW5lIFBBR0VfT1dORVJfU1RBQ0tfREVQVEggKDE2KVxcbm1tL3BhZ2Vfb3duZXIuYy0yMy1cXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYz01Nz1lbnVtIHBhZ2Vfb3duZXJfcHJpbnRfbW9kZSB7XFxubW0vcGFnZV9vd25lci5jOjU4OlxcdFBBR0VfT1dORVJfUFJJTlRfU1RBQ0ssXFxubW0vcGFnZV9vd25lci5jOjU5OlxcdFBBR0VfT1dORVJfUFJJTlRfSEFORExFLFxcbm1tL3BhZ2Vfb3duZXIuYzo2MDpcXHRQQUdFX09XTkVSX1BSSU5UX1NUQUNLX0hBTkRMRSxcXG5tbS9wYWdlX293bmVyLmMtNjEtfTtcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYz02Mz1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBhZ2Vfb3duZXJfcHJpbnRfbW9kZV9zdHJpbmdzW10gPSB7XFxubW0vcGFnZV9vd25lci5jOjY0OlxcdFtQQUdFX09XTkVSX1BSSU5UX1NUQUNLXVxcdD0gXFxcInN0YWNrXFxcIixcXG5tbS9wYWdlX293bmVyLmM6NjU6XFx0W1BBR0VfT1dORVJfUFJJTlRfSEFORExFXVxcdD0gXFxcImhhbmRsZVxcXCIsXFxubW0vcGFnZV9vd25lci5jOjY2OlxcdFtQQUdFX09XTkVSX1BSSU5UX1NUQUNLX0hBTkRMRV1cXHQ9IFxcXCJzdGFja19oYW5kbGVcXFwiLFxcbm1tL3BhZ2Vfb3duZXIuYy02Ny19O1xcbi0tXFxubW0vcGFnZV9vd25lci5jPTE3Mz1zdGF0aWMgbm9pbmxpbmUgZGVwb3Rfc3RhY2tfaGFuZGxlX3Qgc2F2ZV9zdGFjayhnZnBfdCBmbGFncylcXG5tbS9wYWdlX293bmVyLmMtMTc0LXtcXG5tbS9wYWdlX293bmVyLmM6MTc1OlxcdHVuc2lnbmVkIGxvbmcgZW50cmllc1tQQUdFX09XTkVSX1NUQUNLX0RFUFRIXTtcXG5tbS9wYWdlX293bmVyLmMtMTc2LVxcdGRlcG90X3N0YWNrX2hhbmRsZV90IGhhbmRsZTtcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYz02MDM9cHJpbnRfcGFnZV9vd25lcihjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIHVuc2lnbmVkIGxvbmcgcGZuLFxcbi0tXFxubW0vcGFnZV9vd25lci5jLTYzNi1cXG5tbS9wYWdlX293bmVyLmM6NjM3OlxcdGlmIChwcmludF9tb2RlICE9IFBBR0VfT1dORVJfUFJJTlRfSEFORExFKSB7XFxubW0vcGFnZV9vd25lci5jLTYzOC1cXHRcXHRyZXQgKz0gc3RhY2tfZGVwb3Rfc25wcmludChoYW5kbGUsIGtidWYgKyByZXQsIGNvdW50IC0gcmV0LCAwKTtcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYy02NDItXFxubW0vcGFnZV9vd25lci5jOjY0MzpcXHRpZiAocHJpbnRfbW9kZSAhPSBQQUdFX09XTkVSX1BSSU5UX1NUQUNLKSB7XFxubW0vcGFnZV9vd25lci5jLTY0NC1cXHRcXHRyZXQgKz0gc2NucHJpbnRmKGtidWYgKyByZXQsIGNvdW50IC0gcmV0LCBcXFwiaGFuZGxlOiAldVxcXFxuXFxcIixcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYz05MTk9c3RhdGljIGludCBwYWdlX293bmVyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5tbS9wYWdlX293bmVyLmMtOTI2LVxcbm1tL3BhZ2Vfb3duZXIuYzo5Mjc6XFx0c3RhdGUtXFx1MDAzZXByaW50X21vZGUgPSBQQUdFX09XTkVSX1BSSU5UX1NUQUNLO1xcbm1tL3BhZ2Vfb3duZXIuYy05MjgtXFx0bm9kZXNfY2xlYXIoc3RhdGUtXFx1MDAzZW5pZF9maWx0ZXIpO1xcbi0tXFxubW0vdm1zdGF0LmM9MTY4Mz1zdGF0aWMgdm9pZCBwYWdldHlwZWluZm9fc2hvd2Jsb2NrY291bnQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICphcmcpXFxuLS1cXG5tbS92bXN0YXQuYy0xNjk4LSAqIG9mIG90aGVyIHR5cGVzLiBUaGlzIGdpdmVzIGFuIGluZGljYXRpb24gb2YgaG93IHdlbGwgZmFsbGJhY2tzIGFyZSBiZWluZ1xcbm1tL3Ztc3RhdC5jOjE2OTk6ICogY29udGFpbmVkIGJ5IHJtcXVldWVfZmFsbGJhY2soKS4gSXQgcmVxdWlyZXMgaW5mb3JtYXRpb24gZnJvbSBQQUdFX09XTkVSXFxubW0vdm1zdGF0LmMtMTcwMC0gKiB0byBkZXRlcm1pbmUgd2hhdCBpcyBnb2luZyBvblxcbi0tXFxubW0vdm1zdGF0LmM9MTcwMj1zdGF0aWMgdm9pZCBwYWdldHlwZWluZm9fc2hvd21peGVkY291bnQoc3RydWN0IHNlcV9maWxlICptLCBwZ19kYXRhX3QgKnBnZGF0KVxcbm1tL3Ztc3RhdC5jLTE3MDMte1xcbm1tL3Ztc3RhdC5jOjE3MDQ6I2lmZGVmIENPTkZJR19QQUdFX09XTkVSXFxubW0vdm1zdGF0LmMtMTcwNS1cXHRpbnQgbXR5cGU7XFxuLS1cXG5tbS92bXN0YXQuYy0xNzE4LVxcdFxcdHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludCk7XFxubW0vdm1zdGF0LmM6MTcxOTojZW5kaWYgLyogQ09ORklHX1BBR0VfT1dORVIgKi9cXG5tbS92bXN0YXQuYy0xNzIwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTM6NTQ6MzguMDc0NTgxNzExWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2MDEyMDExODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGVidWdnaW5nIEtjb25maWc6IEEgUXVpY2sgRGl2ZSoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB0cm91Ymxlc2hvb3Qgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGtlcm5lbCdzIEtjb25maWcgc3lzdGVtLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSB0eXBpY2FsIGxheW91dCwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIGBtbS9LY29uZmlnLmRlYnVnYC4gSXQncyBhIHByaW1lIGxvY2F0aW9uIGZvciBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIGRlYnVnZ2luZyBvcHRpb25zLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCBleGFtaW5pbmcgYXJvdW5kIGxpbmUgMTA1LiBUaGF0IHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBJJ20gaG9waW5nIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGxvZ2ljYWwgZmxvdyBvZiB0aGUgY29kZSBpbiB0aGF0IGFyZWEsIGFuZCBwaW5wb2ludCBhIHNwZWNpZmljIHZhcmlhYmxlIG9yIG9wdGlvbiB0aGF0IGNhbiBoZWxwIG1lIHRvIGRpYWdub3NlIHRoZSBpc3N1ZSBJJ20gZmFjaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjAzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTM6NTQ6MzkuNjc1Nzg1OTA0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWcuZGVidWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAwOlxcdFxcdCAgVGhpcyBpcyBkZXNpZ25lZCBhcyBhIGRlYnVnZ2luZyBmZWF0dXJlLCBub3QgYSBzZWN1cml0eSBmZWF0dXJlLlxcbiAxMDE6XFx0XFx0ICBPYmplY3RzIGFyZSBzb21ldGltZXMgcmVjeWNsZWQgd2l0aG91dCBSQ1UgZGVsYXkgdW5kZXIgbWVtb3J5IHByZXNzdXJlLlxcbiAxMDI6XFx0XFxuIDEwMzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDEwNDpcXHRcXG4gMTA1OlxcdGNvbmZpZyBQQUdFX09XTkVSXFxuIDEwNjpcXHRcXHRib29sIFxcXCJUcmFjayBwYWdlIG93bmVyXFxcIlxcbiAxMDc6XFx0XFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUwgXFx1MDAyNlxcdTAwMjYgU1RBQ0tUUkFDRV9TVVBQT1JUXFxuIDEwODpcXHRcXHRzZWxlY3QgREVCVUdfRlNcXG4gMTA5OlxcdFxcdHNlbGVjdCBTVEFDS1RSQUNFXFxuIDExMDpcXHRcXHRzZWxlY3QgU1RBQ0tERVBPVFxcbiAxMTE6XFx0XFx0c2VsZWN0IFBBR0VfRVhURU5TSU9OXFxuIDExMjpcXHRcXHRoZWxwXFxuIDExMzpcXHRcXHQgIFRoaXMga2VlcHMgdHJhY2sgb2Ygd2hhdCBjYWxsIGNoYWluIGlzIHRoZSBvd25lciBvZiBhIHBhZ2UsIG1heVxcbiAxMTQ6XFx0XFx0ICBoZWxwIHRvIGZpbmQgYmFyZSBhbGxvY19wYWdlKHMpIGxlYWtzLiBFdmVuIGlmIHlvdSBpbmNsdWRlIHRoaXNcXG4gMTE1OlxcdFxcdCAgZmVhdHVyZSBvbiB5b3VyIGJ1aWxkLCBpdCBpcyBkaXNhYmxlZCBpbiBkZWZhdWx0LiBZb3Ugc2hvdWxkIHBhc3NcXG4gMTE2OlxcdFxcdCAgXFxcInBhZ2Vfb3duZXI9b25cXFwiIHRvIGJvb3QgcGFyYW1ldGVyIGluIG9yZGVyIHRvIGVuYWJsZSBpdC4gRWF0c1xcbiAxMTc6XFx0XFx0ICBhIGZhaXIgYW1vdW50IG9mIG1lbW9yeSBpZiBlbmFibGVkLiBTZWUgdG9vbHMvbW0vcGFnZV9vd25lcl9zb3J0LmNcXG4gMTE4OlxcdFxcdCAgZm9yIHVzZXItc3BhY2UgaGVscGVyLlxcbiAxMTk6XFx0XFxuIDEyMDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDEyMTpcXHRcXG4gMTIyOlxcdGNvbmZpZyBQQUdFX1RBQkxFX0NIRUNLXFxuIDEyMzpcXHRcXHRib29sIFxcXCJDaGVjayBmb3IgaW52YWxpZCBtYXBwaW5ncyBpbiB1c2VyIHBhZ2UgdGFibGVzXFxcIlxcbiAxMjQ6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX1BBR0VfVEFCTEVfQ0hFQ0tcXG4gMTI1OlxcdFxcdGRlcGVuZHMgb24gRVhDTFVTSVZFX1NZU1RFTV9SQU1cXG4gMTI2OlxcdFxcdHNlbGVjdCBQQUdFX0VYVEVOU0lPTlxcbiAxMjc6XFx0XFx0aGVscFxcbiAxMjg6XFx0XFx0ICBDaGVjayB0aGF0IGFub255bW91cyBwYWdlIGlzIG5vdCBiZWluZyBtYXBwZWQgdHdpY2Ugd2l0aCByZWFkIHdyaXRlXFxuIDEyOTpcXHRcXHQgIHBlcm1pc3Npb25zLiBDaGVjayB0aGF0IGFub255bW91cyBhbmQgZmlsZSBwYWdlcyBhcmUgbm90IGJlaW5nXFxuIDEzMDpcXHRcXHQgIGVycm9uZW91c2x5IHNoYXJlZC4gU2luY2UgdGhlIGNoZWNraW5nIGlzIHBlcmZvcm1lZCBhdCB0aGUgdGltZVxcbiAxMzE6XFx0XFx0ICBlbnRyaWVzIGFyZSBhZGRlZCBhbmQgcmVtb3ZlZCB0byB1c2VyIHBhZ2UgdGFibGVzLCBsZWFraW5nLCBjb3JydXB0aW9uXFxuIDEzMjpcXHRcXHQgIGFuZCBkb3VibGUgbWFwcGluZyBwcm9ibGVtcyBhcmUgZGV0ZWN0ZWQgc3luY2hyb25vdXNseS5cXG4gMTMzOlxcdFxcbiAxMzQ6XFx0XFx0ICBJZiB1bnN1cmUgc2F5IFxcXCJuXFxcIi5cXG4gMTM1OlxcdFxcbiAxMzY6XFx0Y29uZmlnIFBBR0VfVEFCTEVfQ0hFQ0tfRU5GT1JDRURcXG4gMTM3OlxcdFxcdGJvb2wgXFxcIkVuZm9yY2UgdGhlIHBhZ2UgdGFibGUgY2hlY2tpbmcgYnkgZGVmYXVsdFxcXCJcXG4gMTM4OlxcdFxcdGRlcGVuZHMgb24gUEFHRV9UQUJMRV9DSEVDS1xcbiAxMzk6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMzo1NDozOS42NzU4NjM1NTRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njg5OTQyODc5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFBvdGVudGlhbDogQSBRdWljayBBc3Nlc3NtZW50KipcblxuQWxyaWdodCwgbGV0J3Mgc2VlIGlmIHRoaXMgcGF0Y2ggaXMgd29ydGggYSBkZWVwZXIgZGl2ZSBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGUgY2hhbmdlcyB0b3VjaCBjb2RlIHRoYXQncyBib3RoIHJlYWNoYWJsZSBhbmQgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcgZm9yIGZ1enppbmcuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknbGwgZmlsdGVyIGJ5IGEgZmV3IGtleSBjcml0ZXJpYTpcblxuRmlyc3QsIGlzIHRoZSBjb2RlIGxvY2F0ZWQgaW4gYSBjb3JlIHN1YnN5c3RlbT8gTG9va3MgbGlrZSBpdCdzIGluIGBtbS9gLCB3aGljaCBpcyBhIGRlZmluaXRlIHBvc2l0aXZlLiBHcmVhdCwgbWVtb3J5IG1hbmFnZW1lbnQgaXMgYWx3YXlzIGEgZ29vZCBhcmVhIHRvIHNjcnV0aW5pemUuIFNlY29uZGx5LCBJIG5lZWQgdG8gY2hlY2sgZm9yIHJlZmFjdG9yaW5nIG9yIGNvZGUgY2xlYW51cCwgZXNwZWNpYWxseSBpZiBpdCByZWxhdGVzIHRvIGRhdGEgc3RydWN0dXJlcywgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MgdGhhdCBhcmUgYWNjZXNzaWJsZS5cblxuVGhlIGNoYW5nZSBpdHNlbGYgaXMgd2l0aGluIGBtbS9wYWdlX293bmVyLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlYCBmdW5jdGlvbi4gTXkgZXhwZXJ0IGV5ZSBpbW1lZGlhdGVseSBub3RlcyBpdCdzIGNhbGxlZCBkdXJpbmcgcGFnZSBmcmVlaW5nIChgX19yZXNldF9wYWdlX293bmVyYCkgYW5kIGZvbGlvIG1pZ3JhdGlvbiAoYF9fZm9saW9fY29weV9vd25lcmApLiBOb3csIGlzIGBfX2ZvbGlvX2NvcHlfb3duZXJgIHJlYWNoYWJsZT8gWWVzLCBmb2xpbyBtaWdyYXRpb24gaXMgYSByZWd1bGFyIG9jY3VycmVuY2UgaW4gbWVtb3J5IG1hbmFnZW1lbnQuIEdvb2QuIEFuZCBgcGFnZV9vd25lcmAgaXRzZWxmIGlzIHJlYWNoYWJsZSwgYXNzdW1pbmcgYENPTkZJR19QQUdFX09XTkVSYCBpcyBlbmFibGVkLCB3aGljaCBpcyBsaWtlbHkuXG5cbkxldCdzIGNoZWNrIHRoZSBmdW5jdGlvbiBzaWduYXR1cmVzIGFuZCBmb2N1cyBzeW1ib2xzLCBzdGFydGluZyB3aXRoIGBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlYC4gU2luY2UgaXQncyBtYXJrZWQgYXMgYHN0YXRpYyBpbmxpbmVgIChvciBwb3NzaWJseSBqdXN0IGBzdGF0aWNgKSwgSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsZXJzOiBgX19mb2xpb19jb3B5X293bmVyYCBhbmQgYF9fcmVzZXRfcGFnZV9vd25lcmAuXG5cbkhvbGQgb24sIGxldCBtZSBxdWlja2x5IGNvbmZpcm0gdGhhdCBgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZWAgaXMgaW5kZWVkIGBzdGF0aWMgaW5saW5lYCwgdG8gYmUgc3VyZS4gQWxyaWdodCwgYHN0YXRpYyBpbmxpbmUgdm9pZCBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlKC4uLilgLiBDb25maXJtZWQuIEl0IGlzLCBzbyBpdCBzaG91bGQgYmUgaW5saW5lZC4gVGhpcyBtYWtlcyBgX19mb2xpb19jb3B5X293bmVyYCBhbmQgYF9fcmVzZXRfcGFnZV9vd25lcmAgcmVsZXZhbnQgYXMgcG90ZW50aWFsIGVudHJ5IHBvaW50cy5cblxuTm93LCBhIGNydWNpYWwgcXVlc3Rpb246IGlzIGBfX3Jlc2V0X3BhZ2Vfb3duZXJgIGEgY29tbW9uIGhvdC1wYXRoIGZ1bmN0aW9uPyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgd2hlcmUgaXQncyBjYWxsZWQgdG8gZXN0YWJsaXNoIGl0cyB1YmlxdWl0eS4gSSdsbCBjaGVjayBpdHMgY2FsbCBzaXRlcyB0byBkZXRlcm1pbmUgaXRzIGNvdmVyYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDEyLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTM6NTQ6NDYuNTc1Mjk5MjA1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTEyMjAzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZXNldF9wYWdlX293bmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9wYWdlX2FsbG9jLmM9MTI5OD1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgX19mcmVlX3BhZ2VzX3ByZXBhcmUoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtMTMzMy1cXHRcXHQvKiBEbyBub3QgbGV0IGh3cG9pc29uIHBhZ2VzIGhpdCBwY3BsaXN0cy9idWRkeSAqL1xcbm1tL3BhZ2VfYWxsb2MuYzoxMzM0OlxcdFxcdHJlc2V0X3BhZ2Vfb3duZXIocGFnZSwgb3JkZXIpO1xcbm1tL3BhZ2VfYWxsb2MuYy0xMzM1LVxcdFxcdHBhZ2VfdGFibGVfY2hlY2tfZnJlZShwYWdlLCBvcmRlcik7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtMTM5OS1cXHRwYWdlLVxcdTAwM2Vwcml2YXRlID0gMDtcXG5tbS9wYWdlX2FsbG9jLmM6MTQwMDpcXHRyZXNldF9wYWdlX293bmVyKHBhZ2UsIG9yZGVyKTtcXG5tbS9wYWdlX2FsbG9jLmMtMTQwMS1cXHRwYWdlX3RhYmxlX2NoZWNrX2ZyZWUocGFnZSwgb3JkZXIpO1xcbi0tXFxubW0vcGFnZV9vd25lci5jPTI5MT1zdGF0aWMgaW5saW5lIHZvaWQgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZShzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYy0zMDMtXFx0XFx0cGFnZV9vd25lciA9IGdldF9wYWdlX293bmVyKHBhZ2VfZXh0KTtcXG5tbS9wYWdlX293bmVyLmM6MzA0OlxcdFxcdC8qIE9ubHkgX19yZXNldF9wYWdlX293bmVyKCkgd2FudHMgdG8gY2xlYXIgdGhlIGJpdCAqL1xcbm1tL3BhZ2Vfb3duZXIuYy0zMDUtXFx0XFx0aWYgKGhhbmRsZSkge1xcbi0tXFxubW0vcGFnZV9vd25lci5jLTMxNS1cXG5tbS9wYWdlX293bmVyLmM6MzE2OnZvaWQgX19yZXNldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBzaG9ydCBvcmRlcilcXG5tbS9wYWdlX293bmVyLmMtMzE3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTM6NTQ6NDYuNjI0NDI2NjEzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNDU3NDA5OTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWUsIHdpdGggYSAqKmJvbGRlZCBoZWFkZXIqKiBhcyByZXF1ZXN0ZWQ6XG5cbioqUGFnZSBPd25lcnNoaXAgRGVlcCBEaXZlKipcblxuQWxyaWdodCwgc28gYHJlc2V0X3BhZ2Vfb3duZXJgIGlzIGdldHRpbmcgY2FsbGVkIHdpdGhpbiBgX19mcmVlX3BhZ2VzX3ByZXBhcmVgLiBUaGF0J3MgYSBwcmV0dHkgZnVuZGFtZW50YWwgcG9pbnQ7IGlmIEknbSB1bmRlcnN0YW5kaW5nIHRoaXMgY29ycmVjdGx5LCBpdCBtZWFucyB0aGF0IHRoZSBwYWdlIG93bmVyc2hpcCBpcyBnZXR0aW5nIGNsZWFyZWQgb3IgcmVzZXQgKmV2ZXJ5KiB0aW1lIGEgcGFnZSBpcyBmcmVlZC4gT2theSwgbWFrZXMgc2Vuc2UgaW4gcHJpbmNpcGxlIHRvIGF2b2lkIGFueSBsaW5nZXJpbmcgcmVmZXJlbmNlcy4gQnV0IHRoZW4gYSBmbGFnIGdvZXMgb2ZmIGluIG15IGhlYWQuIFdoYXQncyB0aGUgcmVsYXRpb25zaGlwIG9mIHRoaXMgd2l0aCBgX19mb2xpb19jb3B5X293bmVyYD8gSSdtIHRyeWluZyB0byB3cmFwIG15IGhlYWQgYXJvdW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG9yIGluY29ycmVjdCBvd25lcnNoaXAgdHJhbnNpdGlvbnMsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZW4gYW5kIHdoZXJlIHRoZSBvd25lcnNoaXAgaXMgY29waWVkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgYGZvbGlvX2NvcHlfb3duZXJgIGZ1bmN0aW9uIGl0c2VsZiBpcyBhY3R1YWxseSBpbnZva2VkLiBUaGF0J3MgdGhlIG1pc3NpbmcgcGllY2UgaGVyZS4gSSBjYW4gdW5kZXJzdGFuZCB0aGUgcmVzZXR0aW5nLCBidXQgd2l0aG91dCBrbm93aW5nIHRoZSBjb3B5aW5nLCBJJ20gbWlzc2luZyBjb250ZXh0IHRvIHRob3JvdWdobHkgYW5hbHl6ZSB0aGlzIHdob2xlIHByb2Nlc3MuIFdoZXJlIGFyZSB0aGUgY29weWluZyBvcGVyYXRpb25zP1xuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE5MSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEzOjU0OjU3LjA4MTgzOTAyNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgzMTE0NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9fY29weV9vd25lclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWlncmF0ZS5jPTc3NT12b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL21pZ3JhdGUuYy04NTgtXFxubW0vbWlncmF0ZS5jOjg1OTpcXHRmb2xpb19jb3B5X293bmVyKG5ld2ZvbGlvLCBmb2xpbyk7XFxubW0vbWlncmF0ZS5jLTg2MC1cXHRwZ2FsbG9jX3RhZ19zd2FwKG5ld2ZvbGlvLCBmb2xpbyk7XFxuLS1cXG5tbS9wYWdlX293bmVyLmM9Mzc5PXZvaWQgX19zcGxpdF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2xkX29yZGVyLCBpbnQgbmV3X29yZGVyKVxcbi0tXFxubW0vcGFnZV9vd25lci5jLTM5Mi1cXG5tbS9wYWdlX293bmVyLmM6MzkzOnZvaWQgX19mb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKVxcbm1tL3BhZ2Vfb3duZXIuYy0zOTQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMzo1NDo1Ny4xMzAxNTQzODNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTkyMzg4MTQ0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIFBhZ2UgT3duZXIgQ29ycnVwdGlvbioqXG5cbk9rYXksIHNvIGBmb2xpb19taWdyYXRlX2ZsYWdzYCBpcyBjYWxsaW5nIGBmb2xpb19jb3B5X293bmVyYCwgYW5kIHRoYXQgZnVuY3Rpb24gaW4gdHVybiB0cmlnZ2VycyBgX19mb2xpb19jb3B5X293bmVyYC4gSSd2ZSBuYXJyb3dlZCBkb3duIHRoZSBwcm9ibGVtIHRvIHRoYXQgYF9fZm9saW9fY29weV9vd25lcmAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyBgb2xkX3BhZ2Vfb3duZXItXHUwMDNlZnJlZV9waWRgIGFuZCBgZnJlZV90Z2lkYC4gSXQgbG9va3MgbGlrZSBgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZWAgaXMgdGhlIGN1bHByaXQsIG92ZXJ3cml0aW5nIHRoZSBwcm9jZXNzIGFuZCB0aHJlYWQgSURzIHdpdGggdGhlIGN1cnJlbnQgcHJvY2VzcywgaW5zdGVhZCBvZiByZXRhaW5pbmcgdGhlIG9yaWdpbmFsIG9uZXMuIFRoaXMgaXMgdmVyeSBzcGVjaWZpYyDigJMgYF9fZm9saW9fY29weV9vd25lcmAgaXMgYSBwcmV0dHkgdGFyZ2V0ZWQgc3ltYm9sLCBub24tdWJpcXVpdG91cywgYW5kIHJpZ2h0IHRoZXJlIGluIGBtbS9wYWdlX293bmVyLmNgLlxuXG5JIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgc2NvcGUgb2YgdGhpcy4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4cGxvcmUgaG93IHBhZ2Vfb3duZXIgaXMgdXNlZCBlbHNld2hlcmUuIEkgbmVlZCB0byBzZWUgaWYgdGhpcyBwYXR0ZXJuLCBvciBzb21ldGhpbmcgc2ltaWxhciwgZXhpc3RzIGluIG90aGVyIHJlYWQgb3Igd3JpdGUgb3BlcmF0aW9ucy4gSSBzaG91bGQgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIG9idmlvdXMgY2FuZGlkYXRlczogYHByaW50X3BhZ2Vfb3duZXJgLCBvciB0aGUgYHBhZ2Vfb3duZXJgIGRlYnVnIGludGVyZmFjZS4gSSdsbCBhbHNvIGRvIGEgcXVpY2sgc3VydmV5IG9mIHdoYXQgc3ltYm9scyBhcmUgYWN0dWFsbHkgZGVmaW5lZCB3aXRoaW4gYG1tL3BhZ2Vfb3duZXIuY2AuIFRoaXMgd2lsbCBoZWxwIG1lIGJ1aWxkIGEgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY4OSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMzo1NTowMy4wNTQwMzk2NTZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTAwNjI4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJedm9pZCBfX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9wYWdlX293bmVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9vd25lci5jPTI5MT1zdGF0aWMgaW5saW5lIHZvaWQgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZShzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYy0zMTUtXFxubW0vcGFnZV9vd25lci5jOjMxNjp2b2lkIF9fcmVzZXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgc2hvcnQgb3JkZXIpXFxubW0vcGFnZV9vd25lci5jLTMxNy17XFxuLS1cXG5tbS9wYWdlX293bmVyLmM9MzUzPW5vaW5saW5lIHZvaWQgX19zZXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgc2hvcnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX293bmVyLmMtMzY1LVxcbm1tL3BhZ2Vfb3duZXIuYzozNjY6dm9pZCBfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbilcXG5tbS9wYWdlX293bmVyLmMtMzY3LXtcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYy0zNzgtXFxubW0vcGFnZV9vd25lci5jOjM3OTp2b2lkIF9fc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlciwgaW50IG5ld19vcmRlcilcXG5tbS9wYWdlX293bmVyLmMtMzgwLXtcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYy0zOTItXFxubW0vcGFnZV9vd25lci5jOjM5Mzp2b2lkIF9fZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZClcXG5tbS9wYWdlX293bmVyLmMtMzk0LXtcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYz02MDM9cHJpbnRfcGFnZV9vd25lcihjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIHVuc2lnbmVkIGxvbmcgcGZuLFxcbi0tXFxubW0vcGFnZV9vd25lci5jLTY3Mi1cXG5tbS9wYWdlX293bmVyLmM6NjczOnZvaWQgX19kdW1wX3BhZ2Vfb3duZXIoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxubW0vcGFnZV9vd25lci5jLTY3NC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEzOjU1OjAzLjE2OTA1MzE3MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTY2MzAyOTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipJbnZlc3RpZ2F0aW5nIEZvbGlvIE1pZ3JhdGlvbiBFbnRyeXBvaW50cyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgYGZvbGlvX21pZ3JhdGVfZmxhZ3NgIGNvZGUgb3IgYW55IG90aGVyIGVudHJ5IHBvaW50cyBmb3IgcGFnZSBtaWdyYXRpb25zLiBJIHN1c3BlY3QgdGhlcmUgbWlnaHQgYmUgYSBwcm9ibGVtIHJlbGF0ZWQgdG8gdGhlbSwgc28gbGV0J3MgZmlyc3QgaWRlbnRpZnkgYWxsIG9mIHRoZSBjYWxsZXJzIG9mIGBmb2xpb19taWdyYXRlX2ZsYWdzYCwgaWYgdGhhdCBpcyB0aGUgcGxhY2UgdG8gc3RhcnQsIG9yIG90aGVyIGVudHJ5IHBvaW50cywgc28gSSBjYW4gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgZmxvdy4gVGhpcyBzaG91bGQgaGVscCBtZSBwaW5wb2ludCB0aGUgZXhhY3QgbG9jYXRpb24gd2hlcmUgdGhpcyBtaWdyYXRpb24gbG9naWMgaXMgYmVpbmcgdHJpZ2dlcmVkIGFuZCBwb3RlbnRpYWxseSBpZGVudGlmeSBhbnkgaXNzdWVzIG9yIGluY29uc2lzdGVuY2llcy4gVGhpcyBhbHNvIG1pZ2h0IG5vdCBiZSB0aGUgcmlnaHQgcGF0aCBhbmQgdGhlIGlzc3VlIGNvdWxkIGJlIHdpdGggYW5vdGhlciBwYWdlIG1pZ3JhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1ODUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMzo1NTowNC43MzUzNTkwMTVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NzQ1NjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX21pZ3JhdGVfZmxhZ3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21pZ3JhdGUuYz03Mzk9aW50IG1pZ3JhdGVfaHVnZV9wYWdlX21vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbm1tL21pZ3JhdGUuYy03NzQtICovXFxubW0vbWlncmF0ZS5jOjc3NTp2b2lkIGZvbGlvX21pZ3JhdGVfZmxhZ3Moc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9taWdyYXRlLmMtNzc2LXtcXG4tLVxcbm1tL21pZ3JhdGUuYy04NjMtfVxcbm1tL21pZ3JhdGUuYzo4NjQ6RVhQT1JUX1NZTUJPTChmb2xpb19taWdyYXRlX2ZsYWdzKTtcXG5tbS9taWdyYXRlLmMtODY1LVxcbi0tXFxubW0vbWlncmF0ZS5jPTg3MD1zdGF0aWMgaW50IF9fbWlncmF0ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpkc3QsXFxuLS1cXG5tbS9taWdyYXRlLmMtODkwLVxcbm1tL21pZ3JhdGUuYzo4OTE6XFx0Zm9saW9fbWlncmF0ZV9mbGFncyhkc3QsIHNyYyk7XFxubW0vbWlncmF0ZS5jLTg5Mi1cXHRyZXR1cm4gMDtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTEwOT1zdGF0aWMgdm9pZCBfX21pZ3JhdGVfZGV2aWNlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyY19wZm5zLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMjUxLVxcdFxcdFxcdGVsc2VcXG5tbS9taWdyYXRlX2RldmljZS5jOjEyNTI6XFx0XFx0XFx0XFx0Zm9saW9fbWlncmF0ZV9mbGFncyhuZXdmb2xpbywgZm9saW8pO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI1My1cXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEzOjU1OjA0Ljc4MzExMTY0M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjg5NjY4Nzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQYWdlIE93bmVyIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIGBtbS9wYWdlX293bmVyLmNgIGNvZGUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbnZlc3RpZ2F0ZSBgX19mb2xpb19jb3B5X293bmVyYOKAlHRoYXQgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIExldCdzIHNlZS4uLiB5ZXAsIGl0J3Mgbm9uLXN0YXRpYywgZGVmaW5lZCBhcyBgdm9pZCBfX2ZvbGlvX2NvcHlfb3duZXIoc3RydWN0IGZvbGlvICpuZXdmb2xpbywgc3RydWN0IGZvbGlvICpvbGQpYC4gTWFrZXMgc2Vuc2UuIE5vdywgbGV0J3MganVzdCBxdWlja2x5IHNjYW4gZm9yIGFueSByZWxhdGVkIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUuIEFoLCBgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZWAgaXMgYHN0YXRpYyBpbmxpbmVgIHNvIGxpa2VseSBub3QgYXMgY2VudHJhbCBhcyB0aGUgb3RoZXIuIEFsc28sIGBmb2xpb19taWdyYXRlX2ZsYWdzYCBpcyBub24tc3RhdGljLlxuXG5Ob3csIGxldCdzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgY29uZmlndXJhdGlvbiBvcHRpb25zLiBGcm9tIHdoYXQgSSByZW1lbWJlciwgYFBBR0VfT1dORVJgIGRlcGVuZHMgb24gYERFQlVHX0tFUk5FTGAgYW5kIGBTVEFDS1RSQUNFX1NVUFBPUlRgLCB3aGljaCBpcyBpbXBvcnRhbnQgY29udGV4dC4gSSBzaG91bGQgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBjb25mbGljdHMgd2hlbiBgTUlHUkFUSU9OYCBvciBgTlVNQWAgb3IgYENPTVBBQ1RJT05gIGlzIGVuYWJsZWQsIHNvLCBsZXQncyBzdGFydCBjaGVja2luZyBjb25maWdzIGluIGBtbS9taWdyYXRlLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA4NiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMzo1NTowNy40NzI3ODMxOTFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDYwNDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19NSUdSQVRJT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTk4PW9iai0kKENPTkZJR19NRU1URVNUKVxcdFxcdCs9IG1lbXRlc3Qub1xcbm1tL01ha2VmaWxlOjk5Om9iai0kKENPTkZJR19NSUdSQVRJT04pICs9IG1pZ3JhdGUub1xcbm1tL01ha2VmaWxlLTEwMC1vYmotJChDT05GSUdfTlVNQSkgKz0gbWVtb3J5LXRpZXJzLm9cXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYz04NDQ9c3RhdGljIHZvaWQgX19pbml0IHN3YXBfbWlncmF0aW9uX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtODQ4LVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo4NDk6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19NSUdSQVRJT04pKVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy04NTAtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vZmlsZW1hcC5jPTEyNTA9c3RhdGljIGlubGluZSBpbnQgZm9saW9fd2FpdF9iaXRfY29tbW9uKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBiaXRfbnIsXFxuLS1cXG5tbS9maWxlbWFwLmMtMTM4NS1cXG5tbS9maWxlbWFwLmM6MTM4NjojaWZkZWYgQ09ORklHX01JR1JBVElPTlxcbm1tL2ZpbGVtYXAuYy0xMzg3LS8qKlxcbi0tXFxubW0vZ3VwLmM9MjE4Nz1zdHJ1Y3QgcGFnZSAqZ2V0X2R1bXBfcGFnZSh1bnNpZ25lZCBsb25nIGFkZHIsIGludCAqbG9ja2VkKVxcbi0tXFxubW0vZ3VwLmMtMjE5Ny1cXG5tbS9ndXAuYzoyMTk4OiNpZmRlZiBDT05GSUdfTUlHUkFUSU9OXFxubW0vZ3VwLmMtMjE5OS1cXG4tLVxcbm1tL2d1cC5jPTI0NDk9c3RhdGljIGxvbmcgY2hlY2tfYW5kX21pZ3JhdGVfbW92YWJsZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl9mb2xpb3MsXFxuLS1cXG5tbS9ndXAuYy0yNDUzLX1cXG5tbS9ndXAuYzoyNDU0OiNlbmRpZiAvKiBDT05GSUdfTUlHUkFUSU9OICovXFxubW0vZ3VwLmMtMjQ1NS1cXG4tLVxcbm1tL2tzbS5jPTMyNjk9dm9pZCBjb2xsZWN0X3Byb2NzX2tzbShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbm1tL2tzbS5jLTMzMDctXFxubW0va3NtLmM6MzMwODojaWZkZWYgQ09ORklHX01JR1JBVElPTlxcbm1tL2tzbS5jLTMzMDktdm9pZCBmb2xpb19taWdyYXRlX2tzbShzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0va3NtLmMtMzMzMC19XFxubW0va3NtLmM6MzMzMTojZW5kaWYgLyogQ09ORklHX01JR1JBVElPTiAqL1xcbm1tL2tzbS5jLTMzMzItXFxuLS1cXG5tbS9zaG1lbS5jPTUzNzE9c3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgc2htZW1fYW9wcyA9IHtcXG4tLVxcbm1tL3NobWVtLmMtNTM3Ni0jZW5kaWZcXG5tbS9zaG1lbS5jOjUzNzc6I2lmZGVmIENPTkZJR19NSUdSQVRJT05cXG5tbS9zaG1lbS5jLTUzNzgtXFx0Lm1pZ3JhdGVfZm9saW9cXHQ9IG1pZ3JhdGVfZm9saW8sXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9Mzk9c3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgc3dhcF9hb3BzID0ge1xcbm1tL3N3YXBfc3RhdGUuYy00MC1cXHQuZGlydHlfZm9saW9cXHQ9IG5vb3BfZGlydHlfZm9saW8sXFxubW0vc3dhcF9zdGF0ZS5jOjQxOiNpZmRlZiBDT05GSUdfTUlHUkFUSU9OXFxubW0vc3dhcF9zdGF0ZS5jLTQyLVxcdC5taWdyYXRlX2ZvbGlvXFx0PSBtaWdyYXRlX2ZvbGlvLFxcbi0tXFxubW0vc3dhcGZpbGUuYz03OD11bnNpZ25lZCBsb25nIHN3YXBmaWxlX21heGltdW1fc2l6ZTtcXG5tbS9zd2FwZmlsZS5jOjc5OiNpZmRlZiBDT05GSUdfTUlHUkFUSU9OXFxubW0vc3dhcGZpbGUuYy04MC1ib29sIHN3YXBfbWlncmF0aW9uX2FkX3N1cHBvcnRlZDtcXG5tbS9zd2FwZmlsZS5jOjgxOiNlbmRpZlxcdC8qIENPTkZJR19NSUdSQVRJT04gKi9cXG5tbS9zd2FwZmlsZS5jLTgyLVxcbi0tXFxubW0vc3dhcGZpbGUuYz0zOTU0PXN0YXRpYyBpbnQgX19pbml0IHN3YXBmaWxlX2luaXQodm9pZClcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMzk2Ny1cXG5tbS9zd2FwZmlsZS5jOjM5Njg6I2lmZGVmIENPTkZJR19NSUdSQVRJT05cXG5tbS9zd2FwZmlsZS5jLTM5NjktXFx0aWYgKHN3YXBmaWxlX21heGltdW1fc2l6ZSBcXHUwMDNlPSAoMVVMIFxcdTAwM2NcXHUwMDNjIFNXUF9NSUdfVE9UQUxfQklUUykpXFxubW0vc3dhcGZpbGUuYy0zOTcwLVxcdFxcdHN3YXBfbWlncmF0aW9uX2FkX3N1cHBvcnRlZCA9IHRydWU7XFxubW0vc3dhcGZpbGUuYzozOTcxOiNlbmRpZlxcdC8qIENPTkZJR19NSUdSQVRJT04gKi9cXG5tbS9zd2FwZmlsZS5jLTM5NzItXFxuLS1cXG5tbS92bXN0YXQuYz0xMTk5PWNvbnN0IGNoYXIgKiBjb25zdCB2bXN0YXRfdGV4dFtdID0ge1xcbi0tXFxubW0vdm1zdGF0LmMtMTM3Ny0jZW5kaWZcXG5tbS92bXN0YXQuYzoxMzc4OiNpZmRlZiBDT05GSUdfTUlHUkFUSU9OXFxubW0vdm1zdGF0LmMtMTM3OS1cXHRbSShQR01JR1JBVEVfU1VDQ0VTUyldXFx0XFx0XFx0PSBcXFwicGdtaWdyYXRlX3N1Y2Nlc3NcXFwiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMzo1NTowNy41MjEyNDk3NDlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDczNTMwODg3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLY29uZmlnIGFuZCBUcmlhZ2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLiBJIHNlZSB0aGF0IGBQQUdFX09XTkVSYCBhbmQgYE1JR1JBVElPTmAgYXJlIGtleS4gYFBBR0VfT1dORVJgLCBvZiBjb3Vyc2UsIGVuYWJsZXMgYHBhZ2Vfb3duZXIuY2AsIGFuZCBpbXBvcnRhbnRseSwgYE1JR1JBVElPTmAgaXMgZ29pbmcgdG8gZXhlcmNpc2UgYF9fZm9saW9fY29weV9vd25lcmAgd2hpY2ggaXMgdGhlIGNvZGUgSSdtIGludGVyZXN0ZWQgaW4uIEkgYWxzbyBub3RlIHRoYXQgYERFQlVHX0ZTYCBpcyBpbXBsaWNpdGx5IHNlbGVjdGVkIGJ5IGBQQUdFX09XTkVSYCwgd2hpY2ggaXMgYSBnb29kIHRoaW5nIGZvciBkZWJ1Z2dpbmcuXG5cbk5vdywgbGV0J3Mgc3lzdGVtYXRpY2FsbHkgZ28gdGhyb3VnaCB0aGUgdHJpYWdlIGluc3RydWN0aW9ucy5cblxuMS4gICoqUmVhY2hhYmlsaXR5OioqIElzIGBwYWdlX293bmVyYCByZWFjaGFibGU/IFllcywgc3BlY2lmaWNhbGx5IHRocm91Z2ggbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBhZ2UgdHJhY2tpbmcgaW4gZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIHdoZW4gSSBlbmFibGUgYENPTkZJR19QQUdFX09XTkVSYCBhbmQgdXNlIHRoZSBib290IGFyZ3VtZW50IGBwYWdlX293bmVyPW9uYC4gQW5kLCB5ZXMsIGBmb2xpb19jb3B5X293bmVyYCBpcyByZWFjaGFibGUgZHVyaW5nIGZvbGlvIG1pZ3JhdGlvbi4gQ3J1Y2lhbGx5LCB0aGlzIGNvZGUgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBiZWNhdXNlIG9mIHRoZSBgcGFnZV9vd25lcmAgdHJhY2tpbmcgZGF0YSBzdHJ1Y3R1cmVzLiBUaGVyZWZvcmUsICp5ZXMqLCBpdCdzIFwiV29ydGhGdXp6aW5nXCIuXG5cbjIuICAqKkZvY3VzU3ltYm9sczoqKiBJJ3ZlIGlkZW50aWZpZWQgYF9fZm9saW9fY29weV9vd25lcmAgYW5kIGBmb2xpb19taWdyYXRlX2ZsYWdzYCBhcyB0aGUgcHJpbWFyeSB0YXJnZXRzLiBJJ20gYXZvaWRpbmcgYF9fcmVzZXRfcGFnZV9vd25lcmAgYmVjYXVzZSBpdCdzIGNhbGxlZCBvbiAqZXZlcnkqIHBhZ2UgZnJlZSDigJMgdGhhdCdzIGZhciB0b28gdWJpcXVpdG91cyBmb3IgZWZmZWN0aXZlIGZ1enppbmcuXG5cbjMuICAqKkVuYWJsZUNvbmZpZ3M6KiogQ29uZmlybWVkOiBgUEFHRV9PV05FUmAgYW5kIGBNSUdSQVRJT05gLiBUaG9zZSBhcmUgdGhlIHR3byBJIG5lZWQgdG8gZ2V0IHRoaXMgc2V0IHVwLlxuXG5BbHJpZ2h0LCBhIHNhbml0eSBjaGVjayBvbiB0aGUgdG9vbCBjYWxsIGBzZXQtcmVzdWx0c2AgaXMgaW4gb3JkZXIuXG5cbiogICBgV29ydGhGdXp6aW5nYDogVHJ1ZS5cbiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXCJQQUdFX09XTkVSXCIsIFwiTUlHUkFUSU9OXCJdYC4gUGVyZmVjdC5cbiogICBgRm9jdXNTeW1ib2xzYDogYFtcIl9fZm9saW9fY29weV9vd25lclwiLCBcImZvbGlvX21pZ3JhdGVfZmxhZ3NcIl1gLiBHb3QgaXQuXG4qICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBtbS9wYWdlXFxfb3duZXIuYyB3aGVyZSBgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZSgpYCB3YXMgaWdub3JpbmcgaXRzIGBwaWRgIGFuZCBgdGdpZGAgcGFyYW1ldGVycyBhbmQgdXNpbmcgYGN1cnJlbnQtXHUwMDNlcGlkYCBhbmQgYGN1cnJlbnQtXHUwMDNldGdpZGAgaW5zdGVhZCwgd2hpY2ggaW1wYWN0cyBmb2xpbyBtaWdyYXRpb24gKGBfX2ZvbGlvX2NvcHlfb3duZXJgKS4gQmVjYXVzZSB0aGlzIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZGVidWcgdHJhY2tpbmcgbG9naWMsIGl0J3MgcmVhY2hhYmxlLlxuXG5Ob3csIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjQ0LCJPdXRwdXRUb2tlbnMiOjE0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMzo1NToxMi4yNTY1NjI0MjFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDkxMTU3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEFHRV9PV05FUlwiLFxuICAgIFwiTUlHUkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19mb2xpb19jb3B5X293bmVyXCIsXG4gICAgXCJmb2xpb19taWdyYXRlX2ZsYWdzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gbW0vcGFnZV9vd25lci5jIHdoZXJlIF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGUoKSBpZ25vcmVkIHRoZSBwYXNzZWQgcGlkIGFuZCB0Z2lkIGFyZ3VtZW50cyBhbmQgaW5zdGVhZCB1c2VkIGN1cnJlbnQtXFx1MDAzZXBpZCBhbmQgY3VycmVudC1cXHUwMDNldGdpZC4gVGhpcyBkaXJlY3RseSBhZmZlY3RzIGZvbGlvIG1pZ3JhdGlvbiBpbiBfX2ZvbGlvX2NvcHlfb3duZXIoKSwgd2hlcmUgdGhlIG9yaWdpbmFsIG93bmVyJ3MgZnJlZV9waWQgYW5kIGZyZWVfdGdpZCBuZWVkIHRvIGJlIHByZXNlcnZlZC4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgdHJhY2tpbmcgbG9naWMgaW4gY29yZSBtbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQUdFX09XTkVSXCIsXG4gICAgXCJNSUdSQVRJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2ZvbGlvX2NvcHlfb3duZXJcIixcbiAgICBcImZvbGlvX21pZ3JhdGVfZmxhZ3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBtbS9wYWdlX293bmVyLmMgd2hlcmUgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZSgpIGlnbm9yZWQgdGhlIHBhc3NlZCBwaWQgYW5kIHRnaWQgYXJndW1lbnRzIGFuZCBpbnN0ZWFkIHVzZWQgY3VycmVudC1cXHUwMDNlcGlkIGFuZCBjdXJyZW50LVxcdTAwM2V0Z2lkLiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgZm9saW8gbWlncmF0aW9uIGluIF9fZm9saW9fY29weV9vd25lcigpLCB3aGVyZSB0aGUgb3JpZ2luYWwgb3duZXIncyBmcmVlX3BpZCBhbmQgZnJlZV90Z2lkIG5lZWQgdG8gYmUgcHJlc2VydmVkLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCB0cmFja2luZyBsb2dpYyBpbiBjb3JlIG1tLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMzo1NToxMi4zMzc0ODA2NTdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMjUyNTI1MTY2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEzOjU1OjEyLjMzODAwODgzN1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjUxMjUyNDcxMzE5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGUoKWAgd2hlcmUgdGhlIGZ1bmN0aW9uIHdhcyBhc3NpZ25pbmcgYGN1cnJlbnQtXFx1MDAzZXBpZGAgYW5kIGBjdXJyZW50LVxcdTAwM2V0Z2lkYCBpbnN0ZWFkIG9mIHRoZSBwYXNzZWQtaW4gYHBpZGAgYW5kIGB0Z2lkYCBmdW5jdGlvbiBhcmd1bWVudHMuIFRoZSBwYXNzZWQgcGFyYW1ldGVycyBhcmUgcHJpbWl0aXZlIHNjYWxhciB0eXBlcyAoYHBpZF90YCkgdGhhdCBhcmUgaW5pdGlhbGl6ZWQgYnkgY2FsbGVycyAoYGN1cnJlbnQtXFx1MDAzZXBpZGAvYGN1cnJlbnQtXFx1MDAzZXRnaWRgIGluIGBfX3Jlc2V0X3BhZ2Vfb3duZXJgIG9yIGBvbGRfcGFnZV9vd25lci1cXHUwMDNlZnJlZV9waWRgL2BmcmVlX3RnaWRgIGluIGBfX2ZvbGlvX2NvcHlfb3duZXJgKS4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBzdHJ1Y3QgcGFkZGluZyBsZWFrcyB0byB1c2VyIHNwYWNlLCBvciBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmQxMmM4MjQ2NTZjOWI4MzdjMjgyNDM4Y2VlMjNmY2VkZjVlOGUwY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMTM6NTM6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9wYWdlX293bmVyLmMgYi9tbS9wYWdlX293bmVyLmNcbmluZGV4IDNmYzM3ZDliOTA4ZWYuLmNmYzMxYzkyZDc2NTcgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX293bmVyLmNcbisrKyBiL21tL3BhZ2Vfb3duZXIuY1xuQEAgLTMwNyw4ICszMDcsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbiBcdFx0XHRwYWdlX293bmVyLVx1MDAzZWZyZWVfaGFuZGxlID0gaGFuZGxlO1xuIFx0XHR9XG4gXHRcdHBhZ2Vfb3duZXItXHUwMDNlZnJlZV90c19uc2VjID0gZnJlZV90c19uc2VjO1xuLVx0XHRwYWdlX293bmVyLVx1MDAzZWZyZWVfcGlkID0gY3VycmVudC1cdTAwM2VwaWQ7XG4tXHRcdHBhZ2Vfb3duZXItXHUwMDNlZnJlZV90Z2lkID0gY3VycmVudC1cdTAwM2V0Z2lkO1xuK1x0XHRwYWdlX293bmVyLVx1MDAzZWZyZWVfcGlkID0gcGlkO1xuK1x0XHRwYWdlX293bmVyLVx1MDAzZWZyZWVfdGdpZCA9IHRnaWQ7XG4gXHR9XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMzo1NToxMi4zMzgwMDk4MTdaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDgxNzkxMTA3NTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV2YWx1YXRpbmcgdGhlIEtNU0FOIE5lY2Vzc2l0eSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCBqdXN0aWZpZXMgaXRzIG93biBLTVNBTiBzZXNzaW9uLiBGaXJzdCwgSSdsbCB0YWtlIGEgbG9vayBhdCB0aGUgZGlmZiBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gYG1tL3BhZ2Vfb3duZXIuY2AuIFRoaXMgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nLiBNeSBpbnN0aW5jdHMgdGVsbCBtZSB0aGUgY29kZSBhcm91bmQgbGluZSAzMDcgaW4gYG1tL3BhZ2Vfb3duZXIuY2AgbWlnaHQgYmUga2V5LCBzbyBJJ2xsIHVzZSBgcmVhZC1maWxlYCB0aGVyZSB0byBnZXQgdGhlIGltbWVkaWF0ZSBjb250ZXh0LiBIb3BlZnVsbHksIHRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB3aGF0IHRoZSBwYXRjaCBpcyB0b3VjaGluZyBhbmQgaWYgS01TQU4gaXMgbmVjZXNzYXJ5IGZvciB0aGlzIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MDM6MTQuMTI5MTIyMjNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyNTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3BhZ2Vfb3duZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyODU6XFx0XFx0XFx0X19zZXRfYml0KFBBR0VfRVhUX09XTkVSLCBcXHUwMDI2cGFnZV9leHQtXFx1MDAzZWZsYWdzKTtcXG4gMjg2OlxcdFxcdFxcdF9fc2V0X2JpdChQQUdFX0VYVF9PV05FUl9BTExPQ0FURUQsIFxcdTAwMjZwYWdlX2V4dC1cXHUwMDNlZmxhZ3MpO1xcbiAyODc6XFx0XFx0fVxcbiAyODg6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDI4OTpcXHR9XFxuIDI5MDpcXHRcXG4gMjkxOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlKHN0cnVjdCBwYWdlICpwYWdlLFxcbiAyOTI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlLFxcbiAyOTM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgc2hvcnQgb3JkZXIsXFxuIDI5NDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBwaWRfdCBwaWQsIHBpZF90IHRnaWQsXFxuIDI5NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICB1NjQgZnJlZV90c19uc2VjKVxcbiAyOTY6XFx0e1xcbiAyOTc6XFx0XFx0c3RydWN0IHBhZ2VfZXh0X2l0ZXIgaXRlcjtcXG4gMjk4OlxcdFxcdHN0cnVjdCBwYWdlX2V4dCAqcGFnZV9leHQ7XFxuIDI5OTpcXHRcXHRzdHJ1Y3QgcGFnZV9vd25lciAqcGFnZV9vd25lcjtcXG4gMzAwOlxcdFxcbiAzMDE6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiAzMDI6XFx0XFx0Zm9yX2VhY2hfcGFnZV9leHQocGFnZSwgMSBcXHUwMDNjXFx1MDAzYyBvcmRlciwgcGFnZV9leHQsIGl0ZXIpIHtcXG4gMzAzOlxcdFxcdFxcdHBhZ2Vfb3duZXIgPSBnZXRfcGFnZV9vd25lcihwYWdlX2V4dCk7XFxuIDMwNDpcXHRcXHRcXHQvKiBPbmx5IF9fcmVzZXRfcGFnZV9vd25lcigpIHdhbnRzIHRvIGNsZWFyIHRoZSBiaXQgKi9cXG4gMzA1OlxcdFxcdFxcdGlmIChoYW5kbGUpIHtcXG4gMzA2OlxcdFxcdFxcdFxcdF9fY2xlYXJfYml0KFBBR0VfRVhUX09XTkVSX0FMTE9DQVRFRCwgXFx1MDAyNnBhZ2VfZXh0LVxcdTAwM2VmbGFncyk7XFxuIDMwNzpcXHRcXHRcXHRcXHRwYWdlX293bmVyLVxcdTAwM2VmcmVlX2hhbmRsZSA9IGhhbmRsZTtcXG4gMzA4OlxcdFxcdFxcdH1cXG4gMzA5OlxcdFxcdFxcdHBhZ2Vfb3duZXItXFx1MDAzZWZyZWVfdHNfbnNlYyA9IGZyZWVfdHNfbnNlYztcXG4gMzEwOlxcdFxcdFxcdHBhZ2Vfb3duZXItXFx1MDAzZWZyZWVfcGlkID0gcGlkO1xcbiAzMTE6XFx0XFx0XFx0cGFnZV9vd25lci1cXHUwMDNlZnJlZV90Z2lkID0gdGdpZDtcXG4gMzEyOlxcdFxcdH1cXG4gMzEzOlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiAzMTQ6XFx0fVxcbiAzMTU6XFx0XFxuIDMxNjpcXHR2b2lkIF9fcmVzZXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgc2hvcnQgb3JkZXIpXFxuIDMxNzpcXHR7XFxuIDMxODpcXHRcXHRzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0O1xcbiAzMTk6XFx0XFx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlO1xcbiAzMjA6XFx0XFx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgYWxsb2NfaGFuZGxlO1xcbiAzMjE6XFx0XFx0c3RydWN0IHBhZ2Vfb3duZXIgKnBhZ2Vfb3duZXI7XFxuIDMyMjpcXHRcXHR1NjQgZnJlZV90c19uc2VjID0gbG9jYWxfY2xvY2soKTtcXG4gMzIzOlxcdFxcbiAzMjQ6XFx0XFx0cGFnZV9leHQgPSBwYWdlX2V4dF9nZXQocGFnZSk7XFxuIDMyNTpcXHRcXHRpZiAodW5saWtlbHkoIXBhZ2VfZXh0KSlcXG4gMzI2OlxcdFxcdFxcdHJldHVybjtcXG4gMzI3OlxcdFxcbiAzMjg6XFx0XFx0cGFnZV9vd25lciA9IGdldF9wYWdlX293bmVyKHBhZ2VfZXh0KTtcXG4gMzI5OlxcdFxcdGFsbG9jX2hhbmRsZSA9IHBhZ2Vfb3duZXItXFx1MDAzZWhhbmRsZTtcXG4gMzMwOlxcdFxcdHBhZ2VfZXh0X3B1dChwYWdlX2V4dCk7XFxuIDMzMTpcXHRcXG4gMzMyOlxcdFxcdC8qXFxuIDMzMzpcXHRcXHQgKiBEbyBub3Qgc3BlY2lmeSBHRlBfTk9XQUlUIHRvIG1ha2UgZ2ZwZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoKSA9PSBmYWxzZVxcbiAzMzQ6XFx0XFx0ICogdG8gcHJldmVudCBpc3N1ZXMgaW4gc3RhY2tfZGVwb3Rfc2F2ZSgpLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDowMzoxNC4xMjkyMjY3N1oiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzQ1NTQ1NDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlYCoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZnVuY3Rpb24sIGBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIGNoZWNrIHRoZSBjYWxsIHNpdGVzLiBXaGVyZSBhcmUgd2UgaW52b2tpbmcgdGhpcyBmdW5jdGlvbj8gSSdsbCBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZSB0byBnZXQgYSBncmFzcCBvbiBpdHMgcHVycG9zZSBhbmQgaXRzIGNyaXRpY2FsIHBvaW50cyBvZiBpbnRlcmFjdGlvbiB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbS4gS25vd2luZyB3aGVyZSBpdCdzIGNhbGxlZCBpcyBhYnNvbHV0ZWx5IGNydWNpYWwgZm9yIGFueSByZWFsIHVuZGVyc3RhbmRpbmcuXG5cbk9rYXksIGxldCdzIG5hdmlnYXRlIHRvIGBtbS9wYWdlX293bmVyLmNgLiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgZGVmaW5pdGlvbi4gRnJvbSB0aGVyZSwgSSdsbCBzY3J1dGluaXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBjb250ZXh0LiBJJ2xsIHByb2JhYmx5IGJlIGxvb2tpbmcgZm9yIHRoZSBjb25kaXRpb25zIGxlYWRpbmcgdXAgdG8gdGhlIGNhbGwsIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbnZvbHZlZCwgYW5kIHdoYXQgdGhlIGZ1bmN0aW9uIGlzIGludGVuZGVkIHRvIGFjY29tcGxpc2ggd2l0aGluIHRoZSBsYXJnZXIgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gZnJhbWV3b3JrLiBUaW1lIHRvIGRpZyBpbiBhbmQgZ2V0IGEgZ29vZCBwaWN0dXJlIG9mIHdoYXQncyBnb2luZyBvbi4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgb3ZlcmFsbCBwYWdlIG93bmVyc2hpcCB0cmFja2luZyBtZWNoYW5pc20uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMzMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjAzOjE3Ljg3NDc3NjQ3M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzY1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX293bmVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzM1LFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzM1OlxcdFxcdCAqIFRoaXMgaXMgc2ltaWxhciB0byBhbGxvY19wYWdlc19ub2xvY2soKSBnZnAgZmxhZ3MsIGJ1dCBvbmx5IHVzZWRcXG4gMzM2OlxcdFxcdCAqIHRvIHNpZ25hbCBzdGFja19kZXBvdCB0byBhdm9pZCBzcGluX2xvY2tzLlxcbiAzMzc6XFx0XFx0ICovXFxuIDMzODpcXHRcXHRoYW5kbGUgPSBzYXZlX3N0YWNrKF9fR0ZQX05PV0FSTik7XFxuIDMzOTpcXHRcXHRfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlKHBhZ2UsIGhhbmRsZSwgb3JkZXIsIGN1cnJlbnQtXFx1MDAzZXBpZCxcXG4gMzQwOlxcdFxcdFxcdFxcdFxcdFxcdGN1cnJlbnQtXFx1MDAzZXRnaWQsIGZyZWVfdHNfbnNlYyk7XFxuIDM0MTpcXHRcXG4gMzQyOlxcdFxcdGlmIChhbGxvY19oYW5kbGUgIT0gZWFybHlfaGFuZGxlKVxcbiAzNDM6XFx0XFx0XFx0LypcXG4gMzQ0OlxcdFxcdFxcdCAqIGVhcmx5X2hhbmRsZSBpcyBiZWluZyBzZXQgYXMgYSBoYW5kbGUgZm9yIGFsbCB0aG9zZVxcbiAzNDU6XFx0XFx0XFx0ICogZWFybHkgYWxsb2NhdGVkIHBhZ2VzLiBTZWUgaW5pdF9wYWdlc19pbl96b25lKCkuXFxuIDM0NjpcXHRcXHRcXHQgKiBTaW5jZSB0aGVpciByZWZjb3VudCBpcyBub3QgYmVpbmcgaW5jcmVtZW50ZWQgYmVjYXVzZVxcbiAzNDc6XFx0XFx0XFx0ICogdGhlIG1hY2hpbmVyeSBpcyBub3QgcmVhZHkgeWV0LCB3ZSBjYW5ub3QgZGVjcmVtZW50XFxuIDM0ODpcXHRcXHRcXHQgKiB0aGVpciByZWZjb3VudCBlaXRoZXIuXFxuIDM0OTpcXHRcXHRcXHQgKi9cXG4gMzUwOlxcdFxcdFxcdGRlY19zdGFja19yZWNvcmRfY291bnQoYWxsb2NfaGFuZGxlLCAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyKTtcXG4gMzUxOlxcdH1cXG4gMzUyOlxcdFxcbiAzNTM6XFx0bm9pbmxpbmUgdm9pZCBfX3NldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBzaG9ydCBvcmRlcixcXG4gMzU0OlxcdFxcdFxcdFxcdFxcdFxcdGdmcF90IGdmcF9tYXNrKVxcbiAzNTU6XFx0e1xcbiAzNTY6XFx0XFx0dTY0IHRzX25zZWMgPSBsb2NhbF9jbG9jaygpO1xcbiAzNTc6XFx0XFx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlO1xcbiAzNTg6XFx0XFxuIDM1OTpcXHRcXHRoYW5kbGUgPSBzYXZlX3N0YWNrKGdmcF9tYXNrKTtcXG4gMzYwOlxcdFxcdF9fdXBkYXRlX3BhZ2Vfb3duZXJfaGFuZGxlKHBhZ2UsIGhhbmRsZSwgb3JkZXIsIGdmcF9tYXNrLCBNUl9ORVZFUixcXG4gMzYxOlxcdFxcdFxcdFxcdFxcdCAgIHRzX25zZWMsIGN1cnJlbnQtXFx1MDAzZXBpZCwgY3VycmVudC1cXHUwMDNldGdpZCxcXG4gMzYyOlxcdFxcdFxcdFxcdFxcdCAgIGN1cnJlbnQtXFx1MDAzZWNvbW0pO1xcbiAzNjM6XFx0XFx0aW5jX3N0YWNrX3JlY29yZF9jb3VudChoYW5kbGUsIGdmcF9tYXNrLCAxIFxcdTAwM2NcXHUwMDNjIG9yZGVyKTtcXG4gMzY0OlxcdH1cXG4gMzY1OlxcdFxcbiAzNjY6XFx0dm9pZCBfX2ZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIG1pZ3JhdGVfcmVhc29uIHJlYXNvbilcXG4gMzY3OlxcdHtcXG4gMzY4OlxcdFxcdHN0cnVjdCBwYWdlX2V4dCAqcGFnZV9leHQgPSBwYWdlX2V4dF9nZXQoXFx1MDAyNmZvbGlvLVxcdTAwM2VwYWdlKTtcXG4gMzY5OlxcdFxcdHN0cnVjdCBwYWdlX293bmVyICpwYWdlX293bmVyO1xcbiAzNzA6XFx0XFxuIDM3MTpcXHRcXHRpZiAodW5saWtlbHkoIXBhZ2VfZXh0KSlcXG4gMzcyOlxcdFxcdFxcdHJldHVybjtcXG4gMzczOlxcdFxcbiAzNzQ6XFx0XFx0cGFnZV9vd25lciA9IGdldF9wYWdlX293bmVyKHBhZ2VfZXh0KTtcXG4gMzc1OlxcdFxcdHBhZ2Vfb3duZXItXFx1MDAzZWxhc3RfbWlncmF0ZV9yZWFzb24gPSByZWFzb247XFxuIDM3NjpcXHRcXHRwYWdlX2V4dF9wdXQocGFnZV9leHQpO1xcbiAzNzc6XFx0fVxcbiAzNzg6XFx0XFxuIDM3OTpcXHR2b2lkIF9fc3BsaXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9sZF9vcmRlciwgaW50IG5ld19vcmRlcilcXG4gMzgwOlxcdHtcXG4gMzgxOlxcdFxcdHN0cnVjdCBwYWdlX2V4dF9pdGVyIGl0ZXI7XFxuIDM4MjpcXHRcXHRzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0O1xcbiAzODM6XFx0XFx0c3RydWN0IHBhZ2Vfb3duZXIgKnBhZ2Vfb3duZXI7XFxuIDM4NDpcXHRcXG4gMzg1OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gMzg2OlxcdFxcdGZvcl9lYWNoX3BhZ2VfZXh0KHBhZ2UsIDEgXFx1MDAzY1xcdTAwM2Mgb2xkX29yZGVyLCBwYWdlX2V4dCwgaXRlcikge1xcbiAzODc6XFx0XFx0XFx0cGFnZV9vd25lciA9IGdldF9wYWdlX293bmVyKHBhZ2VfZXh0KTtcXG4gMzg4OlxcdFxcdFxcdHBhZ2Vfb3duZXItXFx1MDAzZW9yZGVyID0gbmV3X29yZGVyO1xcbiAzODk6XFx0XFx0fVxcbiAzOTA6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDM5MTpcXHR9XFxuIDM5MjpcXHRcXG4gMzkzOlxcdHZvaWQgX19mb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKVxcbiAzOTQ6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDowMzoxNy44NzQ4NzIyODRaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg0NjU5MDU1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGVgIENhbGwgU2l0ZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZnVuY3Rpb24sIGBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlYC4gVG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gd2hlcmUgaXQncyBiZWluZyB1c2VkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKmhvdyogaXQncyBiZWluZyB1c2VkLCBJJ20gZ29pbmcgdG8gbGV2ZXJhZ2UgYGdyZXBwZXJgLiBJJ20gZ29pbmcgdG8gcnVuIGEgc2VhcmNoIHNwZWNpZmljYWxseSBmb3IgY2FsbHMgdG8gdGhhdCBmdW5jdGlvbiBhY3Jvc3MgdGhlIGVudGlyZSBjb2RlYmFzZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIG92ZXJ2aWV3IG9mIGFsbCB0aGUgZGlmZmVyZW50IGNvbnRleHRzIGluIHdoaWNoIGl0IG9wZXJhdGVzLiBLbm93aW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpbGwgdGVsbCBtZSBhIGdyZWF0IGRlYWwgYWJvdXQgdGhlIGFzc3VtcHRpb25zIGFuZCBwb3NzaWJsZSBzaWRlIGVmZmVjdHMgcmVsYXRlZCB0byB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byBkcmF3IHNvbWUgY29uY2x1c2lvbnMgYWJvdXQgdGhlIGZ1bmN0aW9uJ3Mgb3ZlcmFsbCBwdXJwb3NlIGFuZCBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQwMCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MDM6MjAuNzIxNDY1NjY0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM5NDcwMjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9vd25lci5jPTI2Mj1zdGF0aWMgaW5saW5lIHZvaWQgX191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5tbS9wYWdlX293bmVyLmMtMjkwLVxcbm1tL3BhZ2Vfb3duZXIuYzoyOTE6c3RhdGljIGlubGluZSB2b2lkIF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGUoc3RydWN0IHBhZ2UgKnBhZ2UsXFxubW0vcGFnZV9vd25lci5jLTI5Mi1cXHRcXHRcXHRcXHRcXHRcXHQgICBkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGUsXFxuLS1cXG5tbS9wYWdlX293bmVyLmM9MzE2PXZvaWQgX19yZXNldF9wYWdlX293bmVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBzaG9ydCBvcmRlcilcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYy0zMzgtXFx0aGFuZGxlID0gc2F2ZV9zdGFjayhfX0dGUF9OT1dBUk4pO1xcbm1tL3BhZ2Vfb3duZXIuYzozMzk6XFx0X191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZShwYWdlLCBoYW5kbGUsIG9yZGVyLCBjdXJyZW50LVxcdTAwM2VwaWQsXFxubW0vcGFnZV9vd25lci5jLTM0MC1cXHRcXHRcXHRcXHRcXHRjdXJyZW50LVxcdTAwM2V0Z2lkLCBmcmVlX3RzX25zZWMpO1xcbi0tXFxubW0vcGFnZV9vd25lci5jPTM5Mz12b2lkIF9fZm9saW9fY29weV9vd25lcihzdHJ1Y3QgZm9saW8gKm5ld2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm9sZClcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYy00MjUtXFx0ICovXFxubW0vcGFnZV9vd25lci5jOjQyNjpcXHRfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlKFxcdTAwMjZuZXdmb2xpby1cXHUwMDNlcGFnZSwgMCwgb2xkX3BhZ2Vfb3duZXItXFx1MDAzZW9yZGVyLFxcbm1tL3BhZ2Vfb3duZXIuYy00MjctXFx0XFx0XFx0XFx0XFx0b2xkX3BhZ2Vfb3duZXItXFx1MDAzZWZyZWVfcGlkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDowMzoyMi4zNjA5NDI2OTZaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzU3ODAzNzM0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIGBfX2ZvbGlvX2NvcHlfb3duZXJgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgZ29pbmcgb24gaW4gdGhpcyBgX19mb2xpb19jb3B5X293bmVyYCBmdW5jdGlvbi4gVGhlIGNvbnRleHQgSSBuZWVkIGlzIHdpdGhpbiB0aGUgYG1tL3BhZ2Vfb3duZXIuY2AgZmlsZSwgc3BlY2lmaWNhbGx5IGxpbmVzIDM5My00MzUuIFRoYXQncyBhIHJlYXNvbmFibGUgY2h1bmsgb2YgY29kZSwgc28gSSdsbCBuZWVkIHRvIGZvY3VzLiBJJ20gYXNzdW1pbmcgaXQncyBoYW5kbGluZyB0aGUgY29weWluZyBvZiBvd25lcnNoaXAgaW5mb3JtYXRpb24gZm9yIGEgZm9saW8sIGxpa2VseSByZWxhdGVkIHRvIHBhZ2Ugb3duZXJzaGlwIHRyYWNraW5nLCBnaXZlbiB0aGUgZmlsZW5hbWUuIEknbGwgbmVlZCB0byBwYXJzZSB0aGUgbG9naWMgaW4gdGhvc2UgbGluZXMgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBpbXBsZW1lbnRlZC4gSSBleHBlY3QgdGhlcmUncyBzb21lIGtpbmQgb2Ygc291cmNlIGFuZCBkZXN0aW5hdGlvbiBmb2xpbyBpbnZvbHZlZCwgYW5kIHRoZSBmdW5jdGlvbidzIG9iamVjdGl2ZSBpcyB0byBkdXBsaWNhdGUgb3duZXJzaGlwIGRhdGEsIHBlcmhhcHMgcmVmZXJlbmNlIGNvdW50cywgYW5kIHBvc3NpYmx5IG90aGVyIHJlbGF0ZWQgbWV0YWRhdGEsIGR1cmluZyBhIGZvbGlvIGNvcHkgb3BlcmF0aW9uLiBJIHdhbnQgdG8gcGF5IGNhcmVmdWwgYXR0ZW50aW9uIHRvIGFueSBsb2NraW5nIHByaW1pdGl2ZXMgdXNlZCB3aXRoaW4gdGhhdCByZWdpb24uIFRoYXQgd2lsbCB0ZWxsIG1lIGhvdyB0aGlzIGlzIHNhZmVseSBpbnRlZ3JhdGVkIGludG8gdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbS4gT2theSwgbGV0J3MgZ28gbGluZSBieSBsaW5lIGFuZCBzZWUgd2hhdCBpdCdzIHJlYWxseSBkb2luZy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTc4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MDM6MjkuOTM4OTgyNzU5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX293bmVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzkzLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzkzOlxcdHZvaWQgX19mb2xpb19jb3B5X293bmVyKHN0cnVjdCBmb2xpbyAqbmV3Zm9saW8sIHN0cnVjdCBmb2xpbyAqb2xkKVxcbiAzOTQ6XFx0e1xcbiAzOTU6XFx0XFx0c3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dDtcXG4gMzk2OlxcdFxcdHN0cnVjdCBwYWdlX2V4dF9pdGVyIGl0ZXI7XFxuIDM5NzpcXHRcXHRzdHJ1Y3QgcGFnZV9vd25lciAqb2xkX3BhZ2Vfb3duZXI7XFxuIDM5ODpcXHRcXHRzdHJ1Y3QgcGFnZV9vd25lciAqbmV3X3BhZ2Vfb3duZXI7XFxuIDM5OTpcXHRcXHRkZXBvdF9zdGFja19oYW5kbGVfdCBtaWdyYXRlX2hhbmRsZTtcXG4gNDAwOlxcdFxcbiA0MDE6XFx0XFx0cGFnZV9leHQgPSBwYWdlX2V4dF9nZXQoXFx1MDAyNm9sZC1cXHUwMDNlcGFnZSk7XFxuIDQwMjpcXHRcXHRpZiAodW5saWtlbHkoIXBhZ2VfZXh0KSlcXG4gNDAzOlxcdFxcdFxcdHJldHVybjtcXG4gNDA0OlxcdFxcbiA0MDU6XFx0XFx0b2xkX3BhZ2Vfb3duZXIgPSBnZXRfcGFnZV9vd25lcihwYWdlX2V4dCk7XFxuIDQwNjpcXHRcXHRwYWdlX2V4dF9wdXQocGFnZV9leHQpO1xcbiA0MDc6XFx0XFxuIDQwODpcXHRcXHRwYWdlX2V4dCA9IHBhZ2VfZXh0X2dldChcXHUwMDI2bmV3Zm9saW8tXFx1MDAzZXBhZ2UpO1xcbiA0MDk6XFx0XFx0aWYgKHVubGlrZWx5KCFwYWdlX2V4dCkpXFxuIDQxMDpcXHRcXHRcXHRyZXR1cm47XFxuIDQxMTpcXHRcXG4gNDEyOlxcdFxcdG5ld19wYWdlX293bmVyID0gZ2V0X3BhZ2Vfb3duZXIocGFnZV9leHQpO1xcbiA0MTM6XFx0XFx0cGFnZV9leHRfcHV0KHBhZ2VfZXh0KTtcXG4gNDE0OlxcdFxcbiA0MTU6XFx0XFx0bWlncmF0ZV9oYW5kbGUgPSBuZXdfcGFnZV9vd25lci1cXHUwMDNlaGFuZGxlO1xcbiA0MTY6XFx0XFx0X191cGRhdGVfcGFnZV9vd25lcl9oYW5kbGUoXFx1MDAyNm5ld2ZvbGlvLVxcdTAwM2VwYWdlLCBvbGRfcGFnZV9vd25lci1cXHUwMDNlaGFuZGxlLFxcbiA0MTc6XFx0XFx0XFx0XFx0XFx0ICAgb2xkX3BhZ2Vfb3duZXItXFx1MDAzZW9yZGVyLCBvbGRfcGFnZV9vd25lci1cXHUwMDNlZ2ZwX21hc2ssXFxuIDQxODpcXHRcXHRcXHRcXHRcXHQgICBvbGRfcGFnZV9vd25lci1cXHUwMDNlbGFzdF9taWdyYXRlX3JlYXNvbixcXG4gNDE5OlxcdFxcdFxcdFxcdFxcdCAgIG9sZF9wYWdlX293bmVyLVxcdTAwM2V0c19uc2VjLCBvbGRfcGFnZV9vd25lci1cXHUwMDNlcGlkLFxcbiA0MjA6XFx0XFx0XFx0XFx0XFx0ICAgb2xkX3BhZ2Vfb3duZXItXFx1MDAzZXRnaWQsIG9sZF9wYWdlX293bmVyLVxcdTAwM2Vjb21tKTtcXG4gNDIxOlxcdFxcdC8qXFxuIDQyMjpcXHRcXHQgKiBEbyBub3QgcHJvYWN0aXZlbHkgY2xlYXIgUEFHRV9FWFRfT1dORVJ7X0FMTE9DQVRFRH0gYml0cyBhcyB0aGUgZm9saW9cXG4gNDIzOlxcdFxcdCAqIHdpbGwgYmUgZnJlZWQgYWZ0ZXIgbWlncmF0aW9uLiBLZWVwIHRoZW0gdW50aWwgdGhlbiBhcyB0aGV5IG1heSBiZVxcbiA0MjQ6XFx0XFx0ICogdXNlZnVsLlxcbiA0MjU6XFx0XFx0ICovXFxuIDQyNjpcXHRcXHRfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlKFxcdTAwMjZuZXdmb2xpby1cXHUwMDNlcGFnZSwgMCwgb2xkX3BhZ2Vfb3duZXItXFx1MDAzZW9yZGVyLFxcbiA0Mjc6XFx0XFx0XFx0XFx0XFx0XFx0b2xkX3BhZ2Vfb3duZXItXFx1MDAzZWZyZWVfcGlkLFxcbiA0Mjg6XFx0XFx0XFx0XFx0XFx0XFx0b2xkX3BhZ2Vfb3duZXItXFx1MDAzZWZyZWVfdGdpZCxcXG4gNDI5OlxcdFxcdFxcdFxcdFxcdFxcdG9sZF9wYWdlX293bmVyLVxcdTAwM2VmcmVlX3RzX25zZWMpO1xcbiA0MzA6XFx0XFx0LypcXG4gNDMxOlxcdFxcdCAqIFdlIGxpbmtlZCB0aGUgb3JpZ2luYWwgc3RhY2sgdG8gdGhlIG5ldyBmb2xpbywgd2UgbmVlZCB0byBkbyB0aGUgc2FtZVxcbiA0MzI6XFx0XFx0ICogZm9yIHRoZSBuZXcgb25lIGFuZCB0aGUgb2xkIGZvbGlvIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGFuIGltYmFsYW5jZVxcbiA0MzM6XFx0XFx0ICogd2hlbiBzdWJ0cmFjdGluZyB0aG9zZSBwYWdlcyBmcm9tIHRoZSBzdGFjay5cXG4gNDM0OlxcdFxcdCAqL1xcbiA0MzU6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiA0MzY6XFx0XFx0Zm9yX2VhY2hfcGFnZV9leHQoXFx1MDAyNm9sZC1cXHUwMDNlcGFnZSwgMSBcXHUwMDNjXFx1MDAzYyBuZXdfcGFnZV9vd25lci1cXHUwMDNlb3JkZXIsIHBhZ2VfZXh0LCBpdGVyKSB7XFxuIDQzNzpcXHRcXHRcXHRvbGRfcGFnZV9vd25lciA9IGdldF9wYWdlX293bmVyKHBhZ2VfZXh0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MDM6MjkuOTM5MDg1NDM5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE0OTIzNjEzOTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhZ2UgT3duZXIgRnJlZSBIYW5kbGUgQnVnIGFuZCBBc3Nlc3NpbmcgUmlza3MqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHRoZXJlJ3MgYSBzdHJhaWdodGZvcndhcmQgYnVnIGluIGBfX3VwZGF0ZV9wYWdlX293bmVyX2ZyZWVfaGFuZGxlYC4gVGhlIGZ1bmN0aW9uIHdhcyBzdXBwb3NlZCB0byB1cGRhdGUgdGhlIHBhZ2Ugb3duZXIncyBpbmZvcm1hdGlvbiB3aXRoIHNwZWNpZmljIGBwaWRgIGFuZCBgdGdpZGAgdmFsdWVzIHBhc3NlZCB0byBpdC4gSG93ZXZlciwgdGhlIGNvZGUgd2FzIG1pc3Rha2VubHkgdXNpbmcgYGN1cnJlbnQtXHUwMDNlcGlkYCBhbmQgYGN1cnJlbnQtXHUwMDNldGdpZGAgaW5zdGVhZCwgY29tcGxldGVseSBpZ25vcmluZyB0aGUgcGFzc2VkIGFyZ3VtZW50cyEgVGhpcyBoYXBwZW5lZCBiZWNhdXNlIGluc2lkZSB0aGUgbG9vcCBpbiBgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZWAsIGl0IGhhZCB0aGVzZSBsaW5lczpcblxuYGBgY1xucGFnZV9vd25lci1cdTAwM2VmcmVlX3RzX25zZWMgPSBmcmVlX3RzX25zZWM7XG5wYWdlX293bmVyLVx1MDAzZWZyZWVfcGlkID0gY3VycmVudC1cdTAwM2VwaWQ7XG5wYWdlX293bmVyLVx1MDAzZWZyZWVfdGdpZCA9IGN1cnJlbnQtXHUwMDNldGdpZDtcbmBgYFxuXG5TbyB3aGVuIGBfX2ZvbGlvX2NvcHlfb3duZXJgIGNhbGxlZCBgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZWAgd2l0aCwgc2F5LCB0aGUgb2xkIHBhZ2Ugb3duZXIncyBgZnJlZV9waWRgIGFuZCBgZnJlZV90Z2lkYCwgaXQgd2FzIGNsb2JiZXJpbmcgdGhvc2Ugd2l0aCB0aGUgKmN1cnJlbnQqIHByb2Nlc3MncyBpbmZvcm1hdGlvbi4gIFRoZSBmaXggaXMsIG9mIGNvdXJzZSwgYSBzaW1wbGUgc3dhcCB0byB1c2luZyB0aGUgcHJvdmlkZWQgdmFsdWVzOlxuXG5gYGBjXG4tXHRcdHBhZ2Vfb3duZXItXHUwMDNlZnJlZV9waWQgPSBjdXJyZW50LVx1MDAzZXBpZDtcbi1cdFx0cGFnZV9vd25lci1cdTAwM2VmcmVlX3RnaWQgPSBjdXJyZW50LVx1MDAzZXRnaWQ7XG4rXHRcdHBhZ2Vfb3duZXItXHUwMDNlZnJlZV9waWQgPSBwaWQ7XG4rXHRcdHBhZ2Vfb3duZXItXHUwMDNlZnJlZV90Z2lkID0gdGdpZDtcbmBgYFxuXG5Ob3csIGxldCdzIGJlIHRob3JvdWdoIGFuZCBsb29rIGF0IHRoZSBwb3RlbnRpYWwgcmlza3MuIERvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcz8gIFdlIGhhdmUgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBUaGUga2V5IGhlcmUgaXMgdGhhdCB0aGUgYHBpZGAgYW5kIGB0Z2lkYCBhcmUgcGFzc2VkIGFzIHNjYWxhciBgcGlkX3RgIHZhbHVlcy4gSW4gdGhlIGNhbGwgY2hhaW4sIGBfX3Jlc2V0X3BhZ2Vfb3duZXJgIHBhc3NlcyBgY3VycmVudC1cdTAwM2VwaWRgIGFuZCBgY3VycmVudC1cdTAwM2V0Z2lkYCwgd2hpY2ggYXJlIGluaXRpYWxpemVkLiBUaGVuLCBgX19mb2xpb19jb3B5X293bmVyYCBwYXNzZXMgYG9sZF9wYWdlX293bmVyLVx1MDAzZWZyZWVfcGlkYCBhbmQgYG9sZF9wYWdlX293bmVyLVx1MDAzZWZyZWVfdGdpZGAsIHdoaWNoIHdlIGFzc3VtZSB3ZXJlIGFsc28gaW5pdGlhbGl6ZWQgZWxzZXdoZXJlIHdoZW4gdGhlIHBhZ2Ugd2FzIGZpcnN0IGZyZWVkICh3aGljaCBpcyB0aGUgcG9pbnQgb2YgdGhlIHdob2xlIHRyYWNraW5nIG1lY2hhbmlzbSkuXG5cblRoZXJlZm9yZTpcblxuMS4gIGBwaWRgIGFuZCBgdGdpZGAgYXJlIHNjYWxhciB2YWx1ZSBhcmd1bWVudHMgYW5kIGFyZSBpbml0aWFsaXplZCB3aGVuIHBhc3NlZCB0byBgX191cGRhdGVfcGFnZV9vd25lcl9mcmVlX2hhbmRsZWAuXG4yLiAgVGhlcmUgYXJlbid0IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgcG90ZW50aWFsIGxlYWtzLCBicmFuY2hlcyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIGNvbXBsZXggc3RydWN0IGFsbG9jYXRpb25zIGludm9sdmVkIGhlcmUuXG4zLiBUaGlzIGlzIHB1cmVseSBhIGxvZ2ljIGJ1ZyBmaXhpbmcgdGhlIHRyYWNraW5nIG9mIHRoZSBwcmV2aW91cyBvd25lci5cbjQuICBObyBLTVNBTiBmdXp6aW5nIGlzIG5lY2Vzc2FyeS4gIEl0J3MgYSBzdHJhaWdodGZvcndhcmQgaW50ZWdlciBkYXRhIGZsb3cgaXNzdWUuXG5cbldlIHNob3VsZCBiZSBnb29kLCBidXQgbGV0J3MganVzdCBtYWtlIG9uZSBsYXN0IHNhbml0eSBjaGVjazpcblxuKiAgIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMuXG4qICAgTm8gY2hhbmdlcyB0byBib3VuZHMgb3IgbGVuZ3Rocy5cbiogICBObyBjb25kaXRpb25hbCBqdW1wcyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEuXG4qICAgTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgY29waWVkIHRvIHVzZXJzcGFjZS5cbiogICBBbGwgaW52b2x2ZWQgdmFsdWVzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCBpbnRlZ2Vycy5cblxuT2theSwgSSdtIHNhdGlzZmllZC4gVGltZSB0byB3cml0ZSB1cCB0aGUgcmVhc29uaW5nIGFuZCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDk2LCJPdXRwdXRUb2tlbnMiOjE4NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjAzOjQ0Ljg2MjcwMjE3NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGUoKWAgd2hlcmUgdGhlIGZ1bmN0aW9uIHdhcyBhc3NpZ25pbmcgYGN1cnJlbnQtXFx1MDAzZXBpZGAgYW5kIGBjdXJyZW50LVxcdTAwM2V0Z2lkYCBpbnN0ZWFkIG9mIHRoZSBwYXNzZWQtaW4gYHBpZGAgYW5kIGB0Z2lkYCBmdW5jdGlvbiBhcmd1bWVudHMuIFRoZSBwYXNzZWQgcGFyYW1ldGVycyBhcmUgcHJpbWl0aXZlIHNjYWxhciB0eXBlcyAoYHBpZF90YCkgdGhhdCBhcmUgaW5pdGlhbGl6ZWQgYnkgY2FsbGVycyAoYGN1cnJlbnQtXFx1MDAzZXBpZGAvYGN1cnJlbnQtXFx1MDAzZXRnaWRgIGluIGBfX3Jlc2V0X3BhZ2Vfb3duZXJgIG9yIGBvbGRfcGFnZV9vd25lci1cXHUwMDNlZnJlZV9waWRgL2BmcmVlX3RnaWRgIGluIGBfX2ZvbGlvX2NvcHlfb3duZXJgKS4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBzdHJ1Y3QgcGFkZGluZyBsZWFrcyB0byB1c2VyIHNwYWNlLCBvciBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYF9fdXBkYXRlX3BhZ2Vfb3duZXJfZnJlZV9oYW5kbGUoKWAgd2hlcmUgdGhlIGZ1bmN0aW9uIHdhcyBhc3NpZ25pbmcgYGN1cnJlbnQtXFx1MDAzZXBpZGAgYW5kIGBjdXJyZW50LVxcdTAwM2V0Z2lkYCBpbnN0ZWFkIG9mIHRoZSBwYXNzZWQtaW4gYHBpZGAgYW5kIGB0Z2lkYCBmdW5jdGlvbiBhcmd1bWVudHMuIFRoZSBwYXNzZWQgcGFyYW1ldGVycyBhcmUgcHJpbWl0aXZlIHNjYWxhciB0eXBlcyAoYHBpZF90YCkgdGhhdCBhcmUgaW5pdGlhbGl6ZWQgYnkgY2FsbGVycyAoYGN1cnJlbnQtXFx1MDAzZXBpZGAvYGN1cnJlbnQtXFx1MDAzZXRnaWRgIGluIGBfX3Jlc2V0X3BhZ2Vfb3duZXJgIG9yIGBvbGRfcGFnZV9vd25lci1cXHUwMDNlZnJlZV9waWRgL2BmcmVlX3RnaWRgIGluIGBfX2ZvbGlvX2NvcHlfb3duZXJgKS4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBzdHJ1Y3QgcGFkZGluZyBsZWFrcyB0byB1c2VyIHNwYWNlLCBvciBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflown5tlg[1] Phase: Succeeded StartedAt: 2026-09-04 14:03:56 +0000 UTC FinishedAt: 2026-09-04 14:03:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5tlg[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-04 14:03:56 +0000 UTC FinishedAt: 2026-09-04 14:03:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5tlg[2] Phase: Succeeded StartedAt: 2026-09-04 14:03:56 +0000 UTC FinishedAt: 2026-09-04 17:50:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5tlg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_copy_owner","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"6e75328f-a467-46f6-b545-936e25c8d584","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-04 14:03:56 +0000 UTC FinishedAt: 2026-09-04 17:50:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_copy_owner","folio_migrate_flags"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"6e75328f-a467-46f6-b545-936e25c8d584","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflown5tlg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_copy_owner","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"6e75328f-a467-46f6-b545-936e25c8d584","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-04 14:03:56 +0000 UTC FinishedAt: 2026-09-04 14:04:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5tlg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_copy_owner","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"6e75328f-a467-46f6-b545-936e25c8d584","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-04 14:03:56 +0000 UTC FinishedAt: 2026-09-04 14:04:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflown5tlg/series-workflown5tlg-convert-artifact-4236390389/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown5tlg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_copy_owner","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"6e75328f-a467-46f6-b545-936e25c8d584","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-04 14:04:06 +0000 UTC FinishedAt: 2026-09-04 14:20:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5tlg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_copy_owner","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"6e75328f-a467-46f6-b545-936e25c8d584","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-04 14:04:06 +0000 UTC FinishedAt: 2026-09-04 14:20:33 +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:*0eba8d27-6d44-4bb9-bb75-3446ae400fcb,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-workflown5tlg/series-workflown5tlg-convert-artifact-4236390389/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": "40da89fd-ac0e-4949-ae77-8ba713e73118", "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-workflown5tlg/series-workflown5tlg-build-action-1084590555/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown5tlg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_copy_owner","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"6e75328f-a467-46f6-b545-936e25c8d584","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-04 14:04:06 +0000 UTC FinishedAt: 2026-09-04 14:20:23 +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:*0eba8d27-6d44-4bb9-bb75-3446ae400fcb,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-workflown5tlg/series-workflown5tlg-convert-artifact-4236390389/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": "40da89fd-ac0e-4949-ae77-8ba713e73118", "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-workflown5tlg/series-workflown5tlg-build-action-1084590555/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown5tlg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_copy_owner","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"6e75328f-a467-46f6-b545-936e25c8d584","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-04 14:20:33 +0000 UTC FinishedAt: 2026-09-04 14:20:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5tlg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_copy_owner","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"6e75328f-a467-46f6-b545-936e25c8d584","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-04 14:20:33 +0000 UTC FinishedAt: 2026-09-04 14:20:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5tlg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_copy_owner","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"6e75328f-a467-46f6-b545-936e25c8d584","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-04 14:20:33 +0000 UTC FinishedAt: 2026-09-04 14:20:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5tlg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_copy_owner","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"6e75328f-a467-46f6-b545-936e25c8d584","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-04 14:20:33 +0000 UTC FinishedAt: 2026-09-04 14:20:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"6e75328f-a467-46f6-b545-936e25c8d584","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflown5tlg/series-workflown5tlg-convert-artifact-464095568/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown5tlg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_copy_owner","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"6e75328f-a467-46f6-b545-936e25c8d584","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-04 14:20:44 +0000 UTC FinishedAt: 2026-09-04 14:22:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5tlg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_copy_owner","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"6e75328f-a467-46f6-b545-936e25c8d584","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-04 14:20:44 +0000 UTC FinishedAt: 2026-09-04 14:22:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*40da89fd-ac0e-4949-ae77-8ba713e73118,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-workflown5tlg/series-workflown5tlg-build-action-1084590555/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-workflown5tlg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_copy_owner","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"6e75328f-a467-46f6-b545-936e25c8d584","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-04 14:22:43 +0000 UTC FinishedAt: 2026-09-04 14:22:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5tlg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_copy_owner","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"6e75328f-a467-46f6-b545-936e25c8d584","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-04 14:22:43 +0000 UTC FinishedAt: 2026-09-04 14:22:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5tlg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_copy_owner","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"6e75328f-a467-46f6-b545-936e25c8d584","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-04 14:22:43 +0000 UTC FinishedAt: 2026-09-04 14:42:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5tlg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_copy_owner","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"6e75328f-a467-46f6-b545-936e25c8d584","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-04 14:22:43 +0000 UTC FinishedAt: 2026-09-04 14:42:14 +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:*0eba8d27-6d44-4bb9-bb75-3446ae400fcb,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-workflown5tlg/series-workflown5tlg-convert-artifact-464095568/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": "df422b65-2743-4d82-a171-5a6a6b81d84a", "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-workflown5tlg/series-workflown5tlg-build-action-1666074316/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown5tlg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_copy_owner","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"6e75328f-a467-46f6-b545-936e25c8d584","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-04 14:22:43 +0000 UTC FinishedAt: 2026-09-04 14:42:04 +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:*0eba8d27-6d44-4bb9-bb75-3446ae400fcb,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-workflown5tlg/series-workflown5tlg-convert-artifact-464095568/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": "df422b65-2743-4d82-a171-5a6a6b81d84a", "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-workflown5tlg/series-workflown5tlg-build-action-1666074316/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown5tlg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_copy_owner","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"6e75328f-a467-46f6-b545-936e25c8d584","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-04 14:42:14 +0000 UTC FinishedAt: 2026-09-04 14:42:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5tlg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_copy_owner","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"6e75328f-a467-46f6-b545-936e25c8d584","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-04 14:42:14 +0000 UTC FinishedAt: 2026-09-04 14:42:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5tlg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_copy_owner","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"6e75328f-a467-46f6-b545-936e25c8d584","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-04 14:42:14 +0000 UTC FinishedAt: 2026-09-04 14:44:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5tlg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_copy_owner","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"6e75328f-a467-46f6-b545-936e25c8d584","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-04 14:42:14 +0000 UTC FinishedAt: 2026-09-04 14:44:03 +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:*df422b65-2743-4d82-a171-5a6a6b81d84a,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-workflown5tlg/series-workflown5tlg-build-action-1666074316/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-workflown5tlg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_copy_owner","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"6e75328f-a467-46f6-b545-936e25c8d584","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-04 14:44:13 +0000 UTC FinishedAt: 2026-09-04 17:50:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5tlg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_copy_owner","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"6e75328f-a467-46f6-b545-936e25c8d584","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-04 14:44:13 +0000 UTC FinishedAt: 2026-09-04 17:50:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_copy_owner","folio_migrate_flags"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*40da89fd-ac0e-4949-ae77-8ba713e73118,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*df422b65-2743-4d82-a171-5a6a6b81d84a,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-workflown5tlg/series-workflown5tlg-build-action-1084590555/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-workflown5tlg/series-workflown5tlg-build-action-1666074316/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflown5tlg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_copy_owner","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"6e75328f-a467-46f6-b545-936e25c8d584","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-04 14:44:13 +0000 UTC FinishedAt: 2026-09-04 14:44:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5tlg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_copy_owner","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"6e75328f-a467-46f6-b545-936e25c8d584","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-04 14:44:13 +0000 UTC FinishedAt: 2026-09-04 14:44:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_copy_owner","folio_migrate_flags"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflown5tlg/series-workflown5tlg-convert-artifact-1599536969/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown5tlg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_copy_owner","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"6e75328f-a467-46f6-b545-936e25c8d584","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-04 14:44:13 +0000 UTC FinishedAt: 2026-09-04 14:44:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5tlg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_copy_owner","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"6e75328f-a467-46f6-b545-936e25c8d584","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-04 14:44:13 +0000 UTC FinishedAt: 2026-09-04 14:44:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5tlg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_copy_owner","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"6e75328f-a467-46f6-b545-936e25c8d584","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-04 14:44:13 +0000 UTC FinishedAt: 2026-09-04 14:44:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5tlg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_copy_owner","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"6e75328f-a467-46f6-b545-936e25c8d584","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-04 14:44:34 +0000 UTC FinishedAt: 2026-09-04 17:50:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflown5tlg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__folio_copy_owner","folio_migrate_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"43131d0d3d34e22d6e9072ec25c63dec7a9a646b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGE_OWNER","MIGRATION"],"series_id":"6e75328f-a467-46f6-b545-936e25c8d584","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-04 14:44:34 +0000 UTC FinishedAt: 2026-09-04 17:50:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*40da89fd-ac0e-4949-ae77-8ba713e73118,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*df422b65-2743-4d82-a171-5a6a6b81d84a,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-workflown5tlg/series-workflown5tlg-build-action-1084590555/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-workflown5tlg/series-workflown5tlg-build-action-1666074316/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-workflown5tlg/series-workflown5tlg-convert-artifact-1599536969/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,}