Name: series-workflow64jqx Phase: Succeeded StartedAt: 2026-06-26 22:55:52 +0000 UTC FinishedAt: 2026-06-27 03:18:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64jqx[0] Phase: Succeeded StartedAt: 2026-06-26 22:55:52 +0000 UTC FinishedAt: 2026-06-26 23:09:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64jqx[0].run-triage Phase: Succeeded StartedAt: 2026-06-26 22:55:52 +0000 UTC FinishedAt: 2026-06-26 23:09:40 +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": "189ce3c81f8188fb737d59a8a8784f074e830238", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_FAILURE", "HWPOISON_INJECT" ], "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": "189ce3c81f8188fb737d59a8a8784f074e830238", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_FAILURE", "HWPOISON_INJECT" ], "series_id": "40e4dccb-98f1-426e-a84a-814aa2f8cf2f" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "memory_failure", "get_any_page", "action_result", "panic_on_unrecoverable_mf", "is_kernel_owned_page" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI2IDIzOjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O0hXUE9JU09OX0lOSkVDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbW9yeV9mYWlsdXJlJiMzNDssCiAgICAmIzM0O2dldF9hbnlfcGFnZSYjMzQ7LAogICAgJiMzNDthY3Rpb25fcmVzdWx0JiMzNDssCiAgICAmIzM0O3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWYmIzM0OywKICAgICYjMzQ7aXNfa2VybmVsX293bmVkX3BhZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgbG9naWMgKGBtZW1vcnlfZmFpbHVyZWAsIGBnZXRfYW55X3BhZ2VgKSB0byBleHBsaWNpdGx5IGlkZW50aWZ5IGFuZCBzaG9ydC1jaXJjdWl0IG9uIGtlcm5lbC1vd25lZCBwYWdlcyAoc2xhYiwgcGFnZSB0YWJsZXMsIHJlc2VydmVkLCBsYXJnZSBrbWFsbG9jKS4gSXQgYWxzbyBpbnRyb2R1Y2VzIGEgbmV3IHN5c2N0bCB0byBwYW5pYyBvbiBzdWNoIHVucmVjb3ZlcmFibGUgZXJyb3JzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgaGFyZHdhcmUgZXJyb3IgaW5qZWN0aW9uIGludGVyZmFjZXMgKGUuZy4sIGAvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9oYXJkX29mZmxpbmVfcGFnZWAgb3IgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMzowNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDU4MTc0MjI1OWM0MWIyZjFkNzcxMmE0NGIwYWIwMDg2NTA4NTA3NTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1biAyNiAyMzowNToxOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3RcbmluZGV4IGI5YjBjMjE4YmZiNDQwLi4yMmNjNTRjYWMzYjIxZCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0XG5AQCAtNjcsNiAmIzQzOzY3LDcgQEAgQ3VycmVudGx5LCB0aGVzZSBmaWxlcyBhcmUgaW4gL3Byb2Mvc3lzL3ZtOlxuIC0gcGFnZS1jbHVzdGVyXG4gLSBwYWdlX2xvY2tfdW5mYWlybmVzc1xuIC0gcGFuaWNfb25fb29tXG4mIzQzOy0gcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZVxuIC0gcGVyY3B1X3BhZ2VsaXN0X2hpZ2hfZnJhY3Rpb25cbiAtIHN0YXRfaW50ZXJ2YWxcbiAtIHN0YXRfcmVmcmVzaFxuQEAgLTkyNSw2ICYjNDM7OTI2LDg1IEBAIHBhbmljX29uX29vbT0yJiM0MztrZHVtcCBnaXZlcyB5b3UgdmVyeSBzdHJvbmcgdG9vbCB0byBpbnZlc3RpZ2F0ZVxuIHdoeSBvb20gaGFwcGVucy4gWW91IGNhbiBnZXQgc25hcHNob3QuXG4gXG4gXG4mIzQzO3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmVcbiYjNDM7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7XG4mIzQzO1doZW4gYSBoYXJkd2FyZSBtZW1vcnkgZXJyb3IgKGUuZy4gbXVsdGktYml0IEVDQykgaGl0cyBhIGtlcm5lbCBwYWdlXG4mIzQzO3RoYXQgY2Fubm90IGJlIHJlY292ZXJlZCBieSB0aGUgbWVtb3J5IGZhaWx1cmUgaGFuZGxlciwgdGhlIGRlZmF1bHRcbiYjNDM7YmVoYXZpb3VyIGlzIHRvIGlnbm9yZSB0aGUgZXJyb3IgYW5kIGNvbnRpbnVlIG9wZXJhdGlvbi4gIFRoaXMgaXNcbiYjNDM7ZGFuZ2Vyb3VzIGJlY2F1c2UgdGhlIGNvcnJ1cHRlZCBkYXRhIHJlbWFpbnMgYWNjZXNzaWJsZSB0byB0aGUga2VybmVsLFxuJiM0MztyaXNraW5nIHNpbGVudCBkYXRhIGNvcnJ1cHRpb24gb3IgYSBkZWxheWVkIGNyYXNoIHdoZW4gdGhlIHBvaXNvbmVkXG4mIzQzO21lbW9yeSBpcyBuZXh0IGFjY2Vzc2VkLlxuJiM0MztcbiYjNDM7V2hlbiBlbmFibGVkLCB0aGlzIHN5c2N0bCB0cmlnZ2VycyBhIHBhbmljIG9uIG1lbW9yeSBmYWlsdXJlIGV2ZW50c1xuJiM0MztoaXR0aW5nIGtlcm5lbC1vd25lZCBwYWdlcyB0aGF0IHRoZSBoYW5kbGVyIGNhbm5vdCByZWNvdmVyOlxuJiM0MztgYFBhZ2VSZXNlcnZlZGBgIChmaXJtd2FyZSByZXNlcnZhdGlvbnMsIGtlcm5lbCBpbWFnZSwgdkRTTywgemVyb1xuJiM0MztwYWdlLCBhbmQgc2ltaWxhciBtZW1ibG9jay1yZXNlcnZlZCByZWdpb25zKSwgYGBQYWdlU2xhYmBgLFxuJiM0MztgYFBhZ2VUYWJsZWBgLCBhbmQgYGBQYWdlTGFyZ2VLbWFsbG9jYGAuICBUaGVzZSBhcmUgb3duZWQgYnkgdGhlXG4mIzQzO2tlcm5lbCBhbmQgdGhlIG1lbW9yeSBmYWlsdXJlIGhhbmRsZXIgY2Fubm90IHJlbGlhYmx5IGV2aWN0IHRoZWlyXG4mIzQzO2NvbnRlbnRzLlxuJiM0MztcbiYjNDM7T3RoZXIgdW5yZWNvdmVyYWJsZSBrZXJuZWwtb3duZWQgcG9wdWxhdGlvbnMgKHZtYWxsb2MgYWxsb2NhdGlvbnMsXG4mIzQzO2tlcm5lbCBzdGFjayBwYWdlcywgLi4uKSBhcmUgbm90IGN1cnJlbnRseSBjb3ZlcmVkIGJlY2F1c2UgdGhlXG4mIzQzO2hhbmRsZXIgaGFzIG5vIHBhZ2UtdHlwZSBzaWduYWwgdGhhdCBkaXN0aW5ndWlzaGVzIHRoZW0gZnJvbSBhXG4mIzQzO3VzZXJzcGFjZSBmb2xpbyB0ZW1wb3JhcmlseSBvZmYgdGhlIExSVSBkdXJpbmcgbWlncmF0aW9uIG9yXG4mIzQzO2NvbXBhY3Rpb24uICBTdWNoIHBhZ2VzIHN0aWxsIGdvIHRocm91Z2ggdGhlIHN0YW5kYXJkXG4mIzQzO01GX01TR19HRVRfSFdQT0lTT04gcGF0aDogYGBQR19od3BvaXNvbmBgIGlzIHNldCBvbiB0aGVtIGFuZCBhXG4mIzQzO2RlbGF5ZWQgY3Jhc2ggb24gdGhlIG5leHQgYWNjZXNzIHJlbWFpbnMgcG9zc2libGUuICBDb3ZlcmFnZSBtYXlcbiYjNDM7Z3JvdyBhcyB0aGUgaGFuZGxlciBnYWlucyBzdHJvbmdlciBrZXJuZWwtb3duZXJzaGlwIHNpZ25hbHMuXG4mIzQzO1xuJiM0MztSZWNvdmVyYWJsZSBmYWlsdXJlIHBhdGhzIGFyZSBhbHNvIGludGVudGlvbmFsbHkgbGVmdCBvdXQ6IGluLWZsaWdodFxuJiM0MztidWRkeSBhbGxvY2F0aW9ucyBhbmQgb3RoZXIgdHJhbnNpZW50IHJhY2VzIHdpdGggdGhlIHBhZ2UgYWxsb2NhdG9yXG4mIzQzO2NhbiByZWFjaCB0aGUgc2FtZSBkaWFnbm9zdGljLCBhbmQgcGFuaWNraW5nIG9uIHRoZW0gd291bGQgcmlza1xuJiM0MztraWxsaW5nIHRoZSBib3ggZm9yIGEgcGFnZSBkZXN0aW5lZCBmb3IgdXNlcnNwYWNlIHdoZXJlIHRoZSBzdGFuZGFyZFxuJiM0MztTSUdCVVMgcmVjb3ZlcnkgcGF0aCBhcHBsaWVzLiAgUGFnZXMgd2hvc2Ugc3RhdGUgY291bGQgbm90IGJlXG4mIzQzO2NsYXNzaWZpZWQgYXQgYWxsIGFyZSBub3QgY292ZXJlZCBlaXRoZXIsIHNpbmNlIGFuIHVua25vd24gc3RhdGUgaXNcbiYjNDM7bm90IGEgc291bmQgYmFzaXMgZm9yIGEgcGFuaWMgZGVjaXNpb24uXG4mIzQzO1xuJiM0MztGb3IgbWFueSBlbnZpcm9ubWVudHMgaXQgaXMgcHJlZmVyYWJsZSB0byBwYW5pYyBpbW1lZGlhdGVseSB3aXRoIGEgY2xlYW5cbiYjNDM7Y3Jhc2ggZHVtcCB0aGF0IGNhcHR1cmVzIHRoZSBvcmlnaW5hbCBlcnJvciBjb250ZXh0LCByYXRoZXIgdGhhbiB0b1xuJiM0Mztjb250aW51ZSBhbmQgZmFjZSBhIHJhbmRvbSBjcmFzaCBsYXRlciB3aG9zZSBjYXVzZSBpcyBkaWZmaWN1bHQgdG9cbiYjNDM7ZGlhZ25vc2UuXG4mIzQzO1xuJiM0MztVc2UgY2FzZXNcbiYjNDM7LS0tLS0tLS0tXG4mIzQzO1xuJiM0MztUaGlzIG9wdGlvbiBpcyBtb3N0IHVzZWZ1bCBpbiBlbnZpcm9ubWVudHMgd2hlcmUgdW5hdHRyaWJ1dGVkIGNyYXNoZXNcbiYjNDM7YXJlIGV4cGVuc2l2ZSB0byBkZWJ1ZyBvciB3aGVyZSBkYXRhIGludGVncml0eSBtdXN0IHRha2UgcHJlY2VkZW5jZVxuJiM0MztvdmVyIGF2YWlsYWJpbGl0eTpcbiYjNDM7XG4mIzQzOyogTGFyZ2UgZmxlZXRzLCB3aGVyZSBtdWx0aS1iaXQgRUNDIGVycm9ycyBvbiBrZXJuZWwgcGFnZXMgYXJlIG9ic2VydmVkXG4mIzQzOyAgcmVndWxhcmx5IGFuZCBwb3N0LW1vcnRlbSBhbmFseXNpcyBvZiBhbiB1bnJlbGF0ZWQgZG93bnN0cmVhbSBjcmFzaFxuJiM0MzsgIChvZnRlbiBzZWNvbmRzIHRvIG1pbnV0ZXMgYWZ0ZXIgdGhlIG9yaWdpbmFsIGVycm9yKSBjb25zdW1lc1xuJiM0MzsgIHNpZ25pZmljYW50IGVuZ2luZWVyaW5nIGVmZm9ydC5cbiYjNDM7XG4mIzQzOyogU3lzdGVtcyBjb25maWd1cmVkIHdpdGgga2R1bXAsIHdoZXJlIHBhbmlja2luZyBhdCB0aGUgbW9tZW50IG9mIHRoZVxuJiM0MzsgIGhhcmR3YXJlIGVycm9yIHByb2R1Y2VzIGEgdm1jb3JlIHRoYXQgc3RpbGwgY29udGFpbnMgdGhlIGZhdWx0aW5nXG4mIzQzOyAgYWRkcmVzcywgdGhlIGFmZmVjdGVkIHBhZ2Ugc3RhdGUsIGFuZCB0aGUgb3JpZ2luYXRpbmcgTUNFL0dIRVNcbiYjNDM7ICByZWNvcmQg4oCUIGNvbnRleHQgdGhhdCBpcyB0eXBpY2FsbHkgbG9zdCBieSB0aGUgdGltZSBhIGRlbGF5ZWQgY3Jhc2hcbiYjNDM7ICBvY2N1cnMuXG4mIzQzO1xuJiM0MzsqIEhpZ2gtYXZhaWxhYmlsaXR5IGNsdXN0ZXJzIHRoYXQgcmVseSBvbiBmYXN0LCBkZXRlcm1pbmlzdGljIG5vZGVcbiYjNDM7ICBmYWlsdXJlIGZvciBmYWlsb3ZlciwgYW5kIHByZWZlciBhbiBpbW1lZGlhdGUgcGFuaWMgb3ZlciBzaWxlbnQgZGF0YVxuJiM0MzsgIGNvcnJ1cHRpb24gcHJvcGFnYXRpbmcgdG8gcmVwbGljYXMgb3IgcGVyc2lzdGVudCBzdG9yYWdlLlxuJiM0MztcbiYjNDM7KiBLZXJuZWwgYW5kIHBsYXRmb3JtIGRldmVsb3BlcnMgcmVwcm9kdWNpbmcgaHdwb2lzb24gaXNzdWVzIHdpdGhcbiYjNDM7ICB0b29scyBzdWNoIGFzIGBgbWNlLWluamVjdGBgIG9yIGVycm9yLWluamVjdGlvbiBkZWJ1Z2ZzIGludGVyZmFjZXMsXG4mIzQzOyAgd2hlcmUgcGFuaWNraW5nIG9uIHRoZSB1bnJlY292ZXJhYmxlIHBhdGggbWFrZXMgcmVncmVzc2lvbnNcbiYjNDM7ICBpbW1lZGlhdGVseSB2aXNpYmxlIGluc3RlYWQgb2Ygc3VyZmFjaW5nIGFzIGxhdGVyLCB1bnJlbGF0ZWRcbiYjNDM7ICBmYWlsdXJlcy5cbiYjNDM7XG4mIzQzOz0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzOzAgVHJ5IHRvIGNvbnRpbnVlIG9wZXJhdGlvbiAoZGVmYXVsdCkuXG4mIzQzOzEgUGFuaWMgaW1tZWRpYXRlbHkuICBJZiB0aGUgYGBwYW5pY2BgIHN5c2N0bCBpcyBhbHNvIG5vbi16ZXJvIHRoZW4gdGhlXG4mIzQzOyAgbWFjaGluZSB3aWxsIGJlIHJlYm9vdGVkLlxuJiM0Mzs9ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MztcbiYjNDM7RXhhbXBsZTo6XG4mIzQzO1xuJiM0MzsgICAgIGVjaG8gMSBcdTAwM2UgL3Byb2Mvc3lzL3ZtL3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmVcbiYjNDM7XG4mIzQzO1xuIHBlcmNwdV9wYWdlbGlzdF9oaWdoX2ZyYWN0aW9uXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuaW5kZXggNTE1MDhhNTVjNDA1NWUuLjYxMTE2MGM5OGM2ZjY0IDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuQEAgLTc0LDYgJiM0Mzs3NCw4IEBAIHN0YXRpYyBpbnQgc3lzY3RsX21lbW9yeV9mYWlsdXJlX3JlY292ZXJ5IF9fcmVhZF9tb3N0bHkgPSAxO1xuIFxuIHN0YXRpYyBpbnQgc3lzY3RsX2VuYWJsZV9zb2Z0X29mZmxpbmUgX19yZWFkX21vc3RseSA9IDE7XG4gXG4mIzQzO3N0YXRpYyBpbnQgc3lzY3RsX3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWYgX19yZWFkX21vc3RseTtcbiYjNDM7XG4gYXRvbWljX2xvbmdfdCBudW1fcG9pc29uZWRfcGFnZXMgX19yZWFkX21vc3RseSA9IEFUT01JQ19MT05HX0lOSVQoMCk7XG4gXG4gc3RhdGljIGJvb2wgaHdfbWVtb3J5X2ZhaWx1cmUgX19yZWFkX21vc3RseSA9IGZhbHNlO1xuQEAgLTE1NSw2ICYjNDM7MTU3LDE1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG1lbW9yeV9mYWlsdXJlX3RhYmxlW10gPSB7XG4gXHRcdC5wcm9jX2hhbmRsZXJcdD0gcHJvY19kb2ludHZlY19taW5tYXgsXG4gXHRcdC5leHRyYTFcdFx0PSBTWVNDVExfWkVSTyxcbiBcdFx0LmV4dHJhMlx0XHQ9IFNZU0NUTF9PTkUsXG4mIzQzO1x0fSxcbiYjNDM7XHR7XG4mIzQzO1x0XHQucHJvY25hbWVcdD0gXCYjMzQ7cGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZVwmIzM0OyxcbiYjNDM7XHRcdC5kYXRhXHRcdD0gXHUwMDI2c3lzY3RsX3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWYsXG4mIzQzO1x0XHQubWF4bGVuXHRcdD0gc2l6ZW9mKHN5c2N0bF9wYW5pY19vbl91bnJlY292ZXJhYmxlX21mKSxcbiYjNDM7XHRcdC5tb2RlXHRcdD0gMDY0NCxcbiYjNDM7XHRcdC5wcm9jX2hhbmRsZXJcdD0gcHJvY19kb2ludHZlY19taW5tYXgsXG4mIzQzO1x0XHQuZXh0cmExXHRcdD0gU1lTQ1RMX1pFUk8sXG4mIzQzO1x0XHQuZXh0cmEyXHRcdD0gU1lTQ1RMX09ORSxcbiBcdH1cbiB9O1xuIFxuQEAgLTk4MCwxNyAmIzQzOzk5MSw2IEBAIHN0YXRpYyBib29sIGhhc19leHRyYV9yZWZjb3VudChzdHJ1Y3QgcGFnZV9zdGF0ZSAqcHMsIHN0cnVjdCBwYWdlICpwLFxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi0vKlxuLSAqIEVycm9yIGhpdCBrZXJuZWwgcGFnZS5cbi0gKiBEbyBub3RoaW5nLCB0cnkgdG8gYmUgbHVja3kgYW5kIG5vdCB0b3VjaCB0aGlzIGluc3RlYWQuIEZvciBhIGZldyBjYXNlcyB3ZVxuLSAqIGNvdWxkIGJlIG1vcmUgc29waGlzdGljYXRlZC5cbi0gKi9cbi1zdGF0aWMgaW50IG1lX2tlcm5lbChzdHJ1Y3QgcGFnZV9zdGF0ZSAqcHMsIHN0cnVjdCBwYWdlICpwKVxuLXtcbi1cdHVubG9ja19wYWdlKHApO1xuLVx0cmV0dXJuIE1GX0lHTk9SRUQ7XG4tfVxuLVxuIC8qXG4gICogUGFnZSBpbiB1bmtub3duIHN0YXRlLiBEbyBub3RoaW5nLlxuICAqIFRoaXMgaXMgYSBjYXRjaC1hbGwgaW4gY2FzZSB3ZSBmYWlsIHRvIG1ha2Ugc2Vuc2Ugb2YgdGhlIHBhZ2Ugc3RhdGUuXG5AQCAtMTE5OSwxMCAmIzQzOzExOTksOCBAQCBzdGF0aWMgaW50IG1lX2h1Z2VfcGFnZShzdHJ1Y3QgcGFnZV9zdGF0ZSAqcHMsIHN0cnVjdCBwYWdlICpwKVxuICNkZWZpbmUgbWxvY2tcdFx0KDFVTCBcdTAwM2NcdTAwM2MgUEdfbWxvY2tlZClcbiAjZGVmaW5lIGxydVx0XHQoMVVMIFx1MDAzY1x1MDAzYyBQR19scnUpXG4gI2RlZmluZSBoZWFkXHRcdCgxVUwgXHUwMDNjXHUwMDNjIFBHX2hlYWQpXG4tI2RlZmluZSByZXNlcnZlZFx0KDFVTCBcdTAwM2NcdTAwM2MgUEdfcmVzZXJ2ZWQpXG4gXG4gc3RhdGljIHN0cnVjdCBwYWdlX3N0YXRlIGVycm9yX3N0YXRlc1tdID0ge1xuLVx0eyByZXNlcnZlZCxcdHJlc2VydmVkLFx0TUZfTVNHX0tFUk5FTCxcdG1lX2tlcm5lbCB9LFxuIFx0LypcbiBcdCAqIGZyZWUgcGFnZXMgYXJlIHNwZWNpYWxseSBkZXRlY3RlZCBvdXRzaWRlIHRoaXMgdGFibGU6XG4gXHQgKiBQR19idWRkeSBwYWdlcyBvbmx5IG1ha2UgYSBzbWFsbCBmcmFjdGlvbiBvZiBhbGwgZnJlZSBwYWdlcy5cbkBAIC0xMjM0LDcgJiM0MzsxMjMyLDYgQEAgc3RhdGljIHN0cnVjdCBwYWdlX3N0YXRlIGVycm9yX3N0YXRlc1tdID0ge1xuICN1bmRlZiBtbG9ja1xuICN1bmRlZiBscnVcbiAjdW5kZWYgaGVhZFxuLSN1bmRlZiByZXNlcnZlZFxuIFxuIHN0YXRpYyB2b2lkIHVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyh1bnNpZ25lZCBsb25nIHBmbixcbiBcdFx0XHRcdCAgICAgZW51bSBtZl9yZXN1bHQgcmVzdWx0KVxuQEAgLTEyNjksNiAmIzQzOzEyNjYsMTUgQEAgc3RhdGljIHZvaWQgdXBkYXRlX3Blcl9ub2RlX21mX3N0YXRzKHVuc2lnbmVkIGxvbmcgcGZuLFxuIFx0JiM0MzsmIzQzO21mX3N0YXRzLVx1MDAzZXRvdGFsO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZihlbnVtIG1mX2FjdGlvbl9wYWdlX3R5cGUgdHlwZSxcbiYjNDM7XHRcdFx0XHQgICAgICBlbnVtIG1mX3Jlc3VsdCByZXN1bHQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXN5c2N0bF9wYW5pY19vbl91bnJlY292ZXJhYmxlX21mKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHlwZSA9PSBNRl9NU0dfS0VSTkVMIFx1MDAyNlx1MDAyNiByZXN1bHQgPT0gTUZfSUdOT1JFRDtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIFwmIzM0O0RpcnR5L0NsZWFuXCYjMzQ7IGluZGljYXRpb24gaXMgbm90IDEwMCUgYWNjdXJhdGUgZHVlIHRvIHRoZSBwb3NzaWJpbGl0eSBvZlxuICAqIHNldHRpbmcgUEdfZGlydHkgb3V0c2lkZSBwYWdlIGxvY2suIFNlZSBhbHNvIGNvbW1lbnQgYWJvdmUgc2V0X3BhZ2VfZGlydHkoKS5cbkBAIC0xMjg2LDYgJiM0MzsxMjkyLDkgQEAgc3RhdGljIGludCBhY3Rpb25fcmVzdWx0KHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIG1mX2FjdGlvbl9wYWdlX3R5cGUgdHlwZSxcbiBcdHByX2VycihcJiMzNDslI2x4OiByZWNvdmVyeSBhY3Rpb24gZm9yICVzOiAlc1xcblwmIzM0OyxcbiBcdFx0cGZuLCBhY3Rpb25fcGFnZV90eXBlc1t0eXBlXSwgYWN0aW9uX25hbWVbcmVzdWx0XSk7XG4gXG4mIzQzO1x0aWYgKHBhbmljX29uX3VucmVjb3ZlcmFibGVfbWYodHlwZSwgcmVzdWx0KSlcbiYjNDM7XHRcdHBhbmljKFwmIzM0O01lbW9yeSBmYWlsdXJlOiAlI2x4OiB1bnJlY292ZXJhYmxlIHBhZ2VcJiMzNDssIHBmbik7XG4mIzQzO1xuIFx0cmV0dXJuIChyZXN1bHQgPT0gTUZfUkVDT1ZFUkVEIHx8IHJlc3VsdCA9PSBNRl9ERUxBWUVEKSA/IDAgOiAtRUJVU1k7XG4gfVxuIFxuQEAgLTEzMzksNiAmIzQzOzEzNDgsMzYgQEAgc3RhdGljIGlubGluZSBib29sIEhXUG9pc29uSGFuZGxhYmxlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuIFx0cmV0dXJuIFBhZ2VMUlUocGFnZSkgfHwgaXNfZnJlZV9idWRkeV9wYWdlKHBhZ2UpO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogUG9zaXRpdmUgaWRlbnRpZmljYXRpb24gb2YgcGFnZXMgdGhlIGh3cG9pc29uIGhhbmRsZXIgY2Fubm90IHJlY292ZXI6XG4mIzQzOyAqIHBhZ2VzIG93bmVkIGJ5IGtlcm5lbCBpbnRlcm5hbHMgd2l0aCBubyB1c2Vyc3BhY2UgbWFwcGluZyB0byB1bm1hcCwgbm9cbiYjNDM7ICogZmlsZSBtYXBwaW5nIHRvIGludmFsaWRhdGUsIGFuZCBubyBtaWdyYXRpb24gdGFyZ2V0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBib29sIGlzX2tlcm5lbF9vd25lZF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBhZ2UgKmhlYWQ7XG4mIzQzO1x0Ym9vbCBrZXJuZWxfb3duZWQ7XG4mIzQzO1xuJiM0MztcdC8qIFBHX3Jlc2VydmVkIGlzIGEgcGVyLXBhZ2UgZmxhZywgbmV2ZXIgc2V0IG9uIGEgY29tcG91bmQgcGFnZS4gKi9cbiYjNDM7XHRpZiAoUGFnZVJlc2VydmVkKHBhZ2UpKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUGFnZS10eXBlIGJpdHMgbGl2ZSBvbmx5IG9uIHRoZSBoZWFkIHBhZ2UsIHNvIHJlc29sdmUgYW55IHRhaWxcbiYjNDM7XHQgKiBmaXJzdC4gIFRoZSBjaGVjayB0YWtlcyBubyByZWZjb3VudDsgcmVjaGVjayB0aGUgaGVhZCBhZnRlcndhcmRzXG4mIzQzO1x0ICogc28gYSBjb25jdXJyZW50IHNwbGl0IG9yIGNvbXBvdW5kIGZyZWUgY2Fubm90IGxlYXZlIHVzIHRydXN0aW5nXG4mIzQzO1x0ICogYSBzdGFsZSB2aWV3LiAgQSBmcmVlLVx1MDAzZWFsbG9jLVx1MDAzZWZyZWUgaW4gdGhlIHNhbWUgd2luZG93IGlzIHN0aWxsXG4mIzQzO1x0ICogcG9zc2libGUgYnV0IGNsb3NpbmcgaXQgd291bGQgcmVxdWlyZSB0YWtpbmcgYSByZWZlcmVuY2UgaGVyZS5cbiYjNDM7XHQgKi9cbiYjNDM7cmV0cnk6XG4mIzQzO1x0aGVhZCA9IGNvbXBvdW5kX2hlYWQocGFnZSk7XG4mIzQzO1x0a2VybmVsX293bmVkID0gUGFnZVNsYWIoaGVhZCkgfHwgUGFnZVRhYmxlKGhlYWQpIHx8XG4mIzQzO1x0XHQgICAgICAgUGFnZUxhcmdlS21hbGxvYyhoZWFkKTtcbiYjNDM7XHRpZiAoaGVhZCAhPSBjb21wb3VuZF9oZWFkKHBhZ2UpKVxuJiM0MztcdFx0Z290byByZXRyeTtcbiYjNDM7XHRyZXR1cm4ga2VybmVsX293bmVkO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgX19nZXRfaHdwb2lzb25fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBmbGFncylcbiB7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbkBAIC0xMzg1LDYgJiM0MzsxNDI0LDE5IEBAIHN0YXRpYyBpbnQgZ2V0X2FueV9wYWdlKHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuIFx0aWYgKGZsYWdzIFx1MDAyNiBNRl9DT1VOVF9JTkNSRUFTRUQpXG4gXHRcdGNvdW50X2luY3JlYXNlZCA9IHRydWU7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQYWdlIHR5cGVzIHdlIGtub3cgYXJlIGtlcm5lbC1vd25lZCBhbmQgY2Fubm90IGJlIHJlY292ZXJlZC5cbiYjNDM7XHQgKiBTaG9ydC1jaXJjdWl0IGJlZm9yZSB0aGUgc2hha2VfcGFnZSgpIC8gcmV0cnkgbG9vcCwgd2hpY2hcbiYjNDM7XHQgKiBjYW5ub3QgdHVybiBhbnkgb2YgdGhlc2UgaW50byBzb21ldGhpbmcgSFdQb2lzb25IYW5kbGFibGUoKS5cbiYjNDM7XHQgKiBEcm9wIHRoZSBjYWxsZXImIzM5O3MgcmVmZXJlbmNlIGlmIE1GX0NPVU5UX0lOQ1JFQVNFRCB0b29rIG9uZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoaXNfa2VybmVsX293bmVkX3BhZ2UocCkpIHtcbiYjNDM7XHRcdGlmIChjb3VudF9pbmNyZWFzZWQpXG4mIzQzO1x0XHRcdHB1dF9wYWdlKHApO1xuJiM0MztcdFx0cmV0ID0gLUVOT1RSRUNPVkVSQUJMRTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4gdHJ5X2FnYWluOlxuIFx0aWYgKCFjb3VudF9pbmNyZWFzZWQpIHtcbiBcdFx0cmV0ID0gX19nZXRfaHdwb2lzb25fcGFnZShwLCBmbGFncyk7XG5AQCAtMTQzMiw3ICYjNDM7MTQ4NCw3IEBAIHN0YXRpYyBpbnQgZ2V0X2FueV9wYWdlKHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuIFx0XHRyZXQgPSAtRUlPO1xuIFx0fVxuIG91dDpcbi1cdGlmIChyZXQgPT0gLUVJTylcbiYjNDM7XHRpZiAocmV0ID09IC1FSU8gfHwgcmV0ID09IC1FTk9UUkVDT1ZFUkFCTEUpXG4gXHRcdHByX2VycihcJiMzNDslI2x4OiB1bmhhbmRsYWJsZSBwYWdlLlxcblwmIzM0OywgcGFnZV90b19wZm4ocCkpO1xuIFxuIFx0cmV0dXJuIHJldDtcbkBAIC0xNDg5LDcgJiM0MzsxNTQxLDEwIEBAIHN0YXRpYyBpbnQgX19nZXRfdW5wb2lzb25fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbiAgKiAgICAgICAgIC1FSU8gZm9yIHBhZ2VzIG9uIHdoaWNoIHdlIGNhbiBub3QgaGFuZGxlIG1lbW9yeSBlcnJvcnMsXG4gICogICAgICAgICAtRUJVU1kgd2hlbiBnZXRfaHdwb2lzb25fcGFnZSgpIGhhcyByYWNlZCB3aXRoIHBhZ2UgbGlmZWN5Y2xlXG4gICogICAgICAgICBvcGVyYXRpb25zIGxpa2UgYWxsb2NhdGlvbiBhbmQgZnJlZSxcbi0gKiAgICAgICAgIC1FSFdQT0lTT04gd2hlbiB0aGUgcGFnZSBpcyBod3BvaXNvbmVkIGFuZCB0YWtlbiBvZmYgZnJvbSBidWRkeS5cbiYjNDM7ICogICAgICAgICAtRUhXUE9JU09OIHdoZW4gdGhlIHBhZ2UgaXMgaHdwb2lzb25lZCBhbmQgdGFrZW4gb2ZmIGZyb20gYnVkZHksXG4mIzQzOyAqICAgICAgICAgLUVOT1RSRUNPVkVSQUJMRSBmb3Iga2VybmVsLW93bmVkIHBhZ2VzIGlkZW50aWZpZWQgYnlcbiYjNDM7ICogICAgICAgICBpc19rZXJuZWxfb3duZWRfcGFnZSgpIChQR19yZXNlcnZlZCwgc2xhYixcbiYjNDM7ICogICAgICAgICBwYWdlLXRhYmxlLCBsYXJnZS1rbWFsbG9jKSB0aGF0IHRoZSBoYW5kbGVyIGNhbm5vdCByZWNvdmVyLlxuICAqL1xuIHN0YXRpYyBpbnQgZ2V0X2h3cG9pc29uX3BhZ2Uoc3RydWN0IHBhZ2UgKnAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4ge1xuQEAgLTI0MDIsNyAmIzQzOzI0NTcsOCBAQCBpbnQgbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbiBcdCAqIHRoYXQgbWF5IG1ha2UgcGFnZV9yZWZfZnJlZXplKCkvcGFnZV9yZWZfdW5mcmVlemUoKSBtaXNtYXRjaC5cbiBcdCAqL1xuIFx0cmVzID0gZ2V0X2h3cG9pc29uX3BhZ2UocCwgZmxhZ3MpO1xuLVx0aWYgKCFyZXMpIHtcbiYjNDM7XHRzd2l0Y2ggKHJlcykge1xuJiM0MztcdGNhc2UgMDpcbiBcdFx0aWYgKGlzX2ZyZWVfYnVkZHlfcGFnZShwKSkge1xuIFx0XHRcdGlmICh0YWtlX3BhZ2Vfb2ZmX2J1ZGR5KHApKSB7XG4gXHRcdFx0XHRwYWdlX3JlZl9pbmMocCk7XG5AQCAtMjQyMSw3ICYjNDM7MjQ3NywxOSBAQCBpbnQgbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbiBcdFx0XHRyZXMgPSBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0tFUk5FTF9ISUdIX09SREVSLCBNRl9JR05PUkVEKTtcbiBcdFx0fVxuIFx0XHRnb3RvIHVubG9ja19tdXRleDtcbi1cdH0gZWxzZSBpZiAocmVzIFx1MDAzYyAwKSB7XG4mIzQzO1x0Y2FzZSAxOlxuJiM0MztcdFx0LyogR290IGEgcmVmY291bnQgb24gYSBoYW5kbGFibGUgcGFnZS4gKi9cbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgLUVOT1RSRUNPVkVSQUJMRTpcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBTdGFibGUgdW5oYW5kbGFibGUga2VybmVsLW93bmVkIHBhZ2UgKFBHX3Jlc2VydmVkLFxuJiM0MztcdFx0ICogc2xhYiwgcGFnZSB0YWJsZXMsIGxhcmdlLWttYWxsb2MpLlxuJiM0MztcdFx0ICogTm8gcmVjb3ZlcnkgcG9zc2libGUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJlcyA9IGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfS0VSTkVMLCBNRl9JR05PUkVEKTtcbiYjNDM7XHRcdGdvdG8gdW5sb2NrX211dGV4O1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHQvKiBUcmFuc2llbnQgbGlmZWN5Y2xlIHJhY2Ugd2l0aCB0aGUgcGFnZSBhbGxvY2F0b3IuICovXG4gXHRcdHJlcyA9IGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfR0VUX0hXUE9JU09OLCBNRl9JR05PUkVEKTtcbiBcdFx0Z290byB1bmxvY2tfbXV0ZXg7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuaW5kZXggZTZkZjk2OGYwOTcxYzguLmVkMzIxYWU3MDlkYWNmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG5AQCAtMTc0LDYgJiM0MzsxNzQsMTAgQEAgVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF91c2VyZmF1bHRmZC5zaFxuIFRFU1RfUFJPR1MgJiM0Mzs9IGtzZnRfdm1hX21lcmdlLnNoXG4gVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF92bWFsbG9jLnNoXG4gXG4mIzQzOyMgRGVzdHJ1Y3RpdmU6IGV2ZXJ5IHN1Y2Nlc3NmdWwgcnVuIHBhbmljcyB0aGUga2VybmVsLiAgSW5zdGFsbGVkIGFuZFxuJiM0MzsjIGtlcHQgZXhlY3V0YWJsZSwgYnV0IG5vdCBydW4gZnJvbSBhIGRlZmF1bHQga3NlbGZ0ZXN0IGludm9jYXRpb24uXG4mIzQzO1RFU1RfUFJPR1NfRVhURU5ERUQgJiM0Mzs9IGh3cG9pc29uLXBhbmljLnNoXG4mIzQzO1xuIFRFU1RfRklMRVMgOj0gdGVzdF92bWFsbG9jLnNoXG4gVEVTVF9GSUxFUyAmIzQzOz0gdGVzdF9obW0uc2hcbiBURVNUX0ZJTEVTICYjNDM7PSB2YV9oaWdoX2FkZHJfc3dpdGNoLnNoXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHdwb2lzb24tcGFuaWMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9od3BvaXNvbi1wYW5pYy5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hYWZjMDZlODk1ZDAxZFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHdwb2lzb24tcGFuaWMuc2hcbkBAIC0wLDAgJiM0MzsxLDI0OSBAQFxuJiM0MzsjIS9iaW4vYmFzaFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOyNcbiYjNDM7IyBWZXJpZnkgdm0ucGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZSBieSBpbmplY3RpbmcgYSBod3BvaXNvblxuJiM0MzsjIGVycm9yIG9uIGEga2VybmVsLW93bmVkIHBhZ2UgYW5kIGNvbmZpcm1pbmcgdGhlIGtlcm5lbCBwYW5pY3MuXG4mIzQzOyNcbiYjNDM7IyBUaHJlZSBcJiMzNDtraW5kc1wmIzM0OyBvZiBrZXJuZWwtb3duZWQgcGFnZSBjYW4gYmUgdGFyZ2V0ZWQsIHNlbGVjdGFibGUgdmlhIHRoZVxuJiM0MzsjIGZpcnN0IHBvc2l0aW9uYWwgYXJndW1lbnQgKGRlZmF1bHQ6IHJvZGF0YSk6XG4mIzQzOyNcbiYjNDM7IyAgIHJvZGF0YSAgLSBhIFBHX3Jlc2VydmVkIHBhZ2UgaW4gdGhlIGtlcm5lbCByb2RhdGEgcmFuZ2VcbiYjNDM7IyAgICAgICAgICAgICAoc291cmNlZCBmcm9tIC9wcm9jL2lvbWVtIFwmIzM0O0tlcm5lbCByb2RhdGFcJiMzNDspLiAgRXhlcmNpc2VzXG4mIzQzOyMgICAgICAgICAgICAgbWVtb3J5X2ZhaWx1cmUoKSAtXHUwMDNlIGdldF9hbnlfcGFnZSgpIG9uIGEgUGFnZVJlc2VydmVkIHBhZ2UuXG4mIzQzOyNcbiYjNDM7IyAgIHNsYWIgICAgLSBhIHNsYWIgcGFnZSBmb3VuZCB2aWEgL3Byb2Mva3BhZ2VmbGFncyAoS1BGX1NMQUIpLlxuJiM0MzsjICAgICAgICAgICAgIEV4ZXJjaXNlcyBtZW1vcnlfZmFpbHVyZSgpIC1cdTAwM2UgZ2V0X2FueV9wYWdlKCkgb24gYSBub25cbiYjNDM7IyAgICAgICAgICAgICBQR19yZXNlcnZlZCBrZXJuZWwtb3duZWQgcGFnZS4gIFRoaXMgcGF0aCBpcyB3aGF0IGNhdGNoZXNcbiYjNDM7IyAgICAgICAgICAgICByZWdyZXNzaW9ucyB3aGVyZSBnZXRfYW55X3BhZ2UoKSBjb2xsYXBzZXMga2VybmVsLW93bmVkXG4mIzQzOyMgICAgICAgICAgICAgcGFnZXMgaW50byBhIHRyYW5zaWVudCAtRUlPIGluc3RlYWQgb2YgLUVOT1RSRUNPVkVSQUJMRS5cbiYjNDM7I1xuJiM0MzsjICAgcGd0YWJsZSAtIGEgcGFnZS10YWJsZSBwYWdlIGZvdW5kIHZpYSAvcHJvYy9rcGFnZWZsYWdzIChLUEZfUEdUQUJMRSkuXG4mIzQzOyMgICAgICAgICAgICAgU2FtZSBwYXRoIGFzIHNsYWIsIGRpZmZlcmVudCBwYWdlIHR5cGUuXG4mIzQzOyNcbiYjNDM7IyBUaGlzIHRlc3QgaXMgREVTVFJVQ1RJVkU6IGEgc3VjY2Vzc2Z1bCBydW4gY3Jhc2hlcyB0aGUga2VybmVsLiAgSXQgaXNcbiYjNDM7IyBtZWFudCB0byBiZSBleGVjdXRlZCBpbnNpZGUgYSBkaXNwb3NhYmxlIFZNIChlLmcuIHZpcnRtZS1uZykgd2l0aCBhXG4mIzQzOyMgc2VyaWFsIGNvbnNvbGUgY2FwdHVyZWQgYnkgdGhlIGhhcm5lc3MuICBJdCBpcyBza2lwcGVkIHVubGVzcyB0aGVcbiYjNDM7IyBjYWxsZXIgb3B0cyBpbiB2aWEgUlVOX0RFU1RSVUNUSVZFPTEuXG4mIzQzOyNcbiYjNDM7IyBUZXN0IHBhc3NlcyBleHRlcm5hbGx5OiB0aGUga2VybmVsIG11c3QgcGFuaWMgd2l0aFxuJiM0MzsjICAgXCYjMzQ7TWVtb3J5IGZhaWx1cmU6IFx1MDAzY3Bmblx1MDAzZTogdW5yZWNvdmVyYWJsZSBwYWdlXCYjMzQ7XG4mIzQzOyMgQSByZXR1cm4gZnJvbSB0aGUgaW5qZWN0IG1lYW5zIG5vIHBhbmljIGZpcmVkOiB0aGF0IGlzIGEgZmFpbHVyZSxcbiYjNDM7IyB1bmxlc3MgdGhlIHRhcmdldCBQRk4gcmFjZWQgdG8gYSBkaWZmZXJlbnQgcGFnZSB0eXBlIGJlZm9yZSBpbmplY3Rpb24sXG4mIzQzOyMgaW4gd2hpY2ggY2FzZSB0aGUgcnVuIGlzIGluY29uY2x1c2l2ZSBhbmQgaXMgc2tpcHBlZC5cbiYjNDM7I1xuJiM0MzsjIEF1dGhvcjogQnJlbm8gTGVpdGFvIFx1MDAzY2xlaXRhb0BkZWJpYW4ub3JnXHUwMDNlXG4mIzQzO1xuJiM0MztzZXQgLXVcbiYjNDM7XG4mIzQzO2tzZnRfc2tpcD00XG4mIzQzO3N5c2N0bF9wYXRoPS9wcm9jL3N5cy92bS9wYW5pY19vbl91bnJlY292ZXJhYmxlX21lbW9yeV9mYWlsdXJlXG4mIzQzO2luamVjdF9wYXRoPS9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2hhcmRfb2ZmbGluZV9wYWdlXG4mIzQzO2twYWdlZmxhZ3NfcGF0aD0vcHJvYy9rcGFnZWZsYWdzXG4mIzQzO3VucG9pc29uX3BhdGg9L3N5cy9rZXJuZWwvZGVidWcvaHdwb2lzb24vdW5wb2lzb24tcGZuXG4mIzQzO1xuJiM0MzsjIC9wcm9jL2twYWdlZmxhZ3MgYml0IHBvc2l0aW9ucyAoc2VlIGluY2x1ZGUvdWFwaS9saW51eC9rZXJuZWwtcGFnZS1mbGFncy5oKVxuJiM0MztLUEZfU0xBQj03XG4mIzQzO0tQRl9DT01QT1VORF9UQUlMPTE2XG4mIzQzO0tQRl9IV1BPSVNPTj0xOVxuJiM0MztLUEZfTk9QQUdFPTIwXG4mIzQzO0tQRl9QR1RBQkxFPTI2XG4mIzQzO0tQRl9SRVNFUlZFRD0zMlxuJiM0MztcbiYjNDM7cGFnZXNpemU9JChnZXRjb25mIFBBR0VfU0laRSlcbiYjNDM7XG4mIzQzO2tpbmQ9JHsxOi1yb2RhdGF9XG4mIzQzO1xuJiM0Mztrc2Z0X3ByaW50KCkgeyBlY2hvIFwmIzM0OyMgJCpcJiMzNDs7IH1cbiYjNDM7a3NmdF9leGl0X3NraXAoKSB7IGtzZnRfcHJpbnQgXCYjMzQ7JCpcJiMzNDs7IGV4aXQgXCYjMzQ7JGtzZnRfc2tpcFwmIzM0OzsgfVxuJiM0Mztrc2Z0X2V4aXRfZmFpbCgpIHsgZWNobyBcJiMzNDtub3Qgb2sgMSAkKlwmIzM0OzsgZXhpdCAxOyB9XG4mIzQzO1xuJiM0MztpZiBbIFwmIzM0OyQoaWQgLXUpXCYjMzQ7IC1uZSAwIF07IHRoZW5cbiYjNDM7XHRrc2Z0X2V4aXRfc2tpcCBcJiMzNDttdXN0IHJ1biBhcyByb290XCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO1xuJiM0MztpZiBbICEgLXcgXCYjMzQ7JHN5c2N0bF9wYXRoXCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRrc2Z0X2V4aXRfc2tpcCBcJiMzNDskc3lzY3RsX3BhdGggbm90IHByZXNlbnQgKGtlcm5lbCB3aXRob3V0IHRoZSBzeXNjdGw/KVwmIzM0O1xuJiM0MztmaVxuJiM0MztcbiYjNDM7aWYgWyAhIC13IFwmIzM0OyRpbmplY3RfcGF0aFwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0a3NmdF9leGl0X3NraXAgXCYjMzQ7JGluamVjdF9wYXRoIG5vdCBwcmVzZW50IChubyBNRU1PUllfSE9UUExVRz8pXCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO1xuJiM0MztpZiBbIFwmIzM0OyR7UlVOX0RFU1RSVUNUSVZFOi0wfVwmIzM0OyAhPSBcJiMzNDsxXCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRrc2Z0X2V4aXRfc2tpcCBcJiMzNDtkZXN0cnVjdGl2ZSB0ZXN0OyByZS1ydW4gd2l0aCBSVU5fREVTVFJVQ1RJVkU9MSBpbnNpZGUgYSBkaXNwb3NhYmxlIFZNXCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO1xuJiM0MzsjIFBpY2sgYSBQRk4gaW5zaWRlIHRoZSBrZXJuZWwgaW1hZ2Ugcm9kYXRhIHJlZ2lvbiBvZiAvcHJvYy9pb21lbS5cbiYjNDM7IyBUaGlzIGlzIHByZWZlcnJlZCBvdmVyIGEgdG9wLWxldmVsIFwmIzM0O1Jlc2VydmVkXCYjMzQ7IGVudHJ5IGJlY2F1c2UgdG9wLWxldmVsXG4mIzQzOyMgUmVzZXJ2ZWQgcmFuZ2VzIGFyZSBvZnRlbiBmaXJtd2FyZSBob2xlcyB0aGF0IGhhdmUgbm8gYmFja2luZyBzdHJ1Y3RcbiYjNDM7IyBwYWdlOyBwZm5fdG9fb25saW5lX3BhZ2UoKSByZXR1cm5zIE5VTEwgb24gdGhvc2UgYW5kIG1lbW9yeV9mYWlsdXJlKClcbiYjNDM7IyBiYWlscyBvdXQgd2l0aCAtRU5YSU8gYmVmb3JlIHJlYWNoaW5nIHRoZSBwYW5pYyBwYXRoLlxuJiM0MzsjXG4mIzQzOyMgXCYjMzQ7S2VybmVsIHJvZGF0YVwmIzM0OyBpcyByZXBvcnRlZCBhcyBhIHN1Yi1yZXNvdXJjZSBvZiBcJiMzNDtTeXN0ZW0gUkFNXCYjMzQ7IG9uIGV2ZXJ5XG4mIzQzOyMgbWFqb3IgYXJjaGl0ZWN0dXJlLCB3aGljaCBndWFyYW50ZWVzOlxuJiM0MzsjICAgLSB0aGUgUEZOIGlzIGJhY2tlZCBieSBzdHJ1Y3QgcGFnZSAod2l0aGluIGFuIG9ubGluZSBtZW1vcnkgcmFuZ2UpO1xuJiM0MzsjICAgLSBQR19yZXNlcnZlZCBpcyBzZXQgb24gdGhlIHBhZ2UgKGtlcm5lbCBpbWFnZSBhcmVhKTtcbiYjNDM7IyAgIC0gdGhlIG1lbW9yeSBpcyByZWFkLW9ubHksIHNvIHNldHRpbmcgUEdfaHdwb2lzb24gb24gaXQgZG9lcyBub3RcbiYjNDM7IyAgICAgY29ycnVwdCB3cml0YWJsZSBrZXJuZWwgc3RhdGUgaWYgdGhlIHBhbmljIHNvbWVob3cgZG9lcyBub3QgZmlyZS5cbiYjNDM7I1xuJiM0MzsjIC9wcm9jL2lvbWVtIGVudHJpZXMgbG9vayBsaWtlIChpbmRlbnRlZCBmb3Igc3ViLXJlc291cmNlcyk6XG4mIzQzOyMgICAgIFwmIzM0OyAgMDI1MDAwMDAtMDJmZmZmZmYgOiBLZXJuZWwgcm9kYXRhXCYjMzQ7XG4mIzQzO3BpY2tfcm9kYXRhX3BoeXNfYWRkcigpIHtcbiYjNDM7XHRhd2sgLXYgcGFnZXNpemU9XCYjMzQ7JChnZXRjb25mIFBBR0VfU0laRSlcJiMzNDsgJiMzOTtcbiYjNDM7XHQjIENvbnZlcnQgYSBoZXggc3RyaW5nIHRvIGEgbnVtYmVyIHdpdGhvdXQgcmVseWluZyBvbiB0aGUgZ2F3ay1vbmx5XG4mIzQzO1x0IyBzdHJ0b251bSgpLiAgbWF3ayBsYWNrcyBpdCBhbmQgd291bGQgb3RoZXJ3aXNlIHNwdXJpb3VzbHkgc2tpcFxuJiM0MztcdCMgdGhpcyB0ZXN0IG9uIGRpc3Ryb3MgdGhhdCBzaGlwIG1hd2sgYXMgL3Vzci9iaW4vYXdrLlxuJiM0MztcdGZ1bmN0aW9uIGhleDJudW0ocywgICBuLCBpLCBjLCB2KSB7XG4mIzQzO1x0XHRuID0gMFxuJiM0MztcdFx0Zm9yIChpID0gMTsgaSBcdTAwM2M9IGxlbmd0aChzKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0YyA9IHRvbG93ZXIoc3Vic3RyKHMsIGksIDEpKVxuJiM0MztcdFx0XHR2ID0gaW5kZXgoXCYjMzQ7MDEyMzQ1Njc4OWFiY2RlZlwmIzM0OywgYykgLSAxXG4mIzQzO1x0XHRcdGlmICh2IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdHJldHVybiAtMVxuJiM0MztcdFx0XHRuID0gbiAqIDE2ICYjNDM7IHZcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJldHVybiBuXG4mIzQzO1x0fVxuJiM0MztcdC86IEtlcm5lbCByb2RhdGFbWzpzcGFjZTpdXSokLyB7XG4mIzQzO1x0XHRzdWIoL15bWzpzcGFjZTpdXSYjNDM7LywgXCYjMzQ7XCYjMzQ7KVxuJiM0MztcdFx0biA9IHNwbGl0KCQwLCBhLCAvWy0gXS8pXG4mIzQzO1x0XHRzdGFydCA9IGhleDJudW0oYVsxXSlcbiYjNDM7XHRcdGVuZCAgID0gaGV4Mm51bShhWzJdKVxuJiM0MztcdFx0aWYgKGVuZCBcdTAwM2M9IHN0YXJ0KVxuJiM0MztcdFx0XHRuZXh0XG4mIzQzO1x0XHQjIFBhZ2UtYWxpZ24gdXB3YXJkIGFuZCBlbWl0IHRoZSBmaXJzdCBieXRlIG9mIHRoYXQgcGFnZS5cbiYjNDM7XHRcdHBmbiA9IGludCgoc3RhcnQgJiM0MzsgcGFnZXNpemUgLSAxKSAvIHBhZ2VzaXplKVxuJiM0MztcdFx0cHJpbnRmIFwmIzM0OzB4JXhcXG5cJiMzNDssIHBmbiAqIHBhZ2VzaXplXG4mIzQzO1x0XHRleGl0IDBcbiYjNDM7XHR9XG4mIzQzO1x0JiMzOTsgL3Byb2MvaW9tZW1cbiYjNDM7fVxuJiM0MztcbiYjNDM7IyBXYWxrIC9wcm9jL2twYWdlZmxhZ3MgYW5kIHJldHVybiB0aGUgcGh5cyBhZGRyIG9mIHRoZSBmaXJzdCBQRk4gdGhhdFxuJiM0MzsjIGhhcyBiaXQgJDEgc2V0LCB3aXRoIEtQRl9IV1BPSVNPTiwgS1BGX05PUEFHRSBhbmQgS1BGX0NPTVBPVU5EX1RBSUxcbiYjNDM7IyBhbGwgY2xlYXIgKHNvIHdlIGF0dGFjayBhIHJlYWwsIG5vbi10YWlsLCBub3QtYWxyZWFkeS1wb2lzb25lZCBwYWdlKS5cbiYjNDM7I1xuJiM0MzsjIFdlIHNraXAgdGhlIGZpcnN0IDE2IE1pQiBvZiBQRk5zIHRvIHN0ZXAgcGFzdCBsb3ctbWVtb3J5IHNwZWNpYWxcbiYjNDM7IyByYW5nZXMgKEJJT1MvRUZJL0FDUEkvZXRjLikgdGhhdCBvZnRlbiBhcmUgUEdfcmVzZXJ2ZWQgYW5kIHdvdWxkIG5vdFxuJiM0MzsjIGV4aGliaXQgdGhlIHNsYWIvcGd0YWJsZSB0eXBlIHdlIGFyZSBsb29raW5nIGZvci5cbiYjNDM7cGlja19rcGFnZWZsYWdzX3BoeXNfYWRkcigpIHtcbiYjNDM7XHRsb2NhbCB3YW50X2JpdD0kMVxuJiM0MztcdGxvY2FsIHBhZ2VzaXplIHNraXBfcGZuXG4mIzQzO1xuJiM0MztcdFsgLXIgXCYjMzQ7JGtwYWdlZmxhZ3NfcGF0aFwmIzM0OyBdIHx8IHJldHVyblxuJiM0MztcbiYjNDM7XHRwYWdlc2l6ZT0kKGdldGNvbmYgUEFHRV9TSVpFKVxuJiM0MztcdHNraXBfcGZuPSQoKCgxNiAqIDEwMjQgKiAxMDI0KSAvIHBhZ2VzaXplKSlcbiYjNDM7XG4mIzQzO1x0b2QgLUFuIC10eDggLXYgLXc4IC1qIFwmIzM0OyQoKHNraXBfcGZuICogOCkpXCYjMzQ7IFwmIzM0OyRrcGFnZWZsYWdzX3BhdGhcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbCB8IFxcXG4mIzQzO1x0YXdrIC12IHdhbnRfYml0PVwmIzM0OyR3YW50X2JpdFwmIzM0OyBcXFxuJiM0MztcdCAgICAtdiBod3BfYml0PVwmIzM0OyRLUEZfSFdQT0lTT05cJiMzNDsgXFxcbiYjNDM7XHQgICAgLXYgbm9wYWdlX2JpdD1cJiMzNDskS1BGX05PUEFHRVwmIzM0OyBcXFxuJiM0MztcdCAgICAtdiB0YWlsX2JpdD1cJiMzNDskS1BGX0NPTVBPVU5EX1RBSUxcJiMzNDsgXFxcbiYjNDM7XHQgICAgLXYgYmFzZV9wZm49XCYjMzQ7JHNraXBfcGZuXCYjMzQ7IFxcXG4mIzQzO1x0ICAgIC12IHBhZ2VzaXplPVwmIzM0OyRwYWdlc2l6ZVwmIzM0OyAmIzM5O1xuJiM0MztcdCMgVGVzdCB3aGV0aGVyIGJpdCBcJiMzNDtiXCYjMzQ7IGlzIHNldCBpbiB0aGUgMTYtaGV4LWRpZ2l0IHZhbHVlIFwmIzM0O2hleFwmIzM0Oy5cbiYjNDM7XHQjIERvbmUgd2l0aCBzdWJzdHJpbmcgJiM0MzsgcGVyLWRpZ2l0IGxvb2t1cCBzbyB3ZSBuZXZlciByZWx5IG9uIGF3a1xuJiM0MztcdCMgYml0d2lzZSBvcGVyYXRvcnMgKG1hd2sgbGFja3MgdGhlbSksIDY0LWJpdCBGUCBwcmVjaXNpb24gb3IgdGhlXG4mIzQzO1x0IyBnYXdrLW9ubHkgc3RydG9udW0oKS5cbiYjNDM7XHRmdW5jdGlvbiBiaXRfc2V0KGhleCwgYiwgICAgZGksIGJpLCBjLCB2KSB7XG4mIzQzO1x0XHRkaSA9IGludChiIC8gNClcbiYjNDM7XHRcdGJpID0gYiAtIGRpICogNFxuJiM0MztcdFx0YyA9IHN1YnN0cihoZXgsIGxlbmd0aChoZXgpIC0gZGksIDEpXG4mIzQzO1x0XHR2ID0gaW5kZXgoXCYjMzQ7MDEyMzQ1Njc4OWFiY2RlZlwmIzM0OywgdG9sb3dlcihjKSkgLSAxXG4mIzQzO1x0XHRpZiAoYmkgPT0gMCkgcmV0dXJuICh2ICUgMikgPT0gMVxuJiM0MztcdFx0aWYgKGJpID09IDEpIHJldHVybiBpbnQodiAvIDIpICUgMiA9PSAxXG4mIzQzO1x0XHRpZiAoYmkgPT0gMikgcmV0dXJuIGludCh2IC8gNCkgJSAyID09IDFcbiYjNDM7XHRcdHJldHVybiBpbnQodiAvIDgpICUgMiA9PSAxXG4mIzQzO1x0fVxuJiM0MztcdHtcbiYjNDM7XHRcdGdzdWIoL15bWzpzcGFjZTpdXSYjNDM7LywgXCYjMzQ7XCYjMzQ7KVxuJiM0MztcdFx0aCA9ICQxXG4mIzQzO1x0XHRpZiAoYml0X3NldChoLCB3YW50X2JpdCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIWJpdF9zZXQoaCwgaHdwX2JpdCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIWJpdF9zZXQoaCwgbm9wYWdlX2JpdCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIWJpdF9zZXQoaCwgdGFpbF9iaXQpKSB7XG4mIzQzO1x0XHRcdHBmbiA9IGJhc2VfcGZuICYjNDM7IE5SIC0gMVxuJiM0MztcdFx0XHRwcmludGYgXCYjMzQ7MHgleFxcblwmIzM0OywgcGZuICogcGFnZXNpemVcbiYjNDM7XHRcdFx0ZXhpdCAwXG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdCYjMzk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyMgUmV0dXJuIDAgaWYgL3Byb2Mva3BhZ2VmbGFncyBiaXQgJDIgaXMgc2V0IGZvciBQRk4gJDEsIDEgaWYgaXQgaXNcbiYjNDM7IyBjbGVhciwgb3IgMiBpZiB0aGUgd29yZCBjYW5ub3QgYmUgcmVhZC4gIFVzZWQgdG8gcmUtY29uZmlybSB0aGUgdGFyZ2V0XG4mIzQzOyMgcGFnZSB0eXBlIGFmdGVyIGEgbm9uLXBhbmlja2luZyBpbmplY3QuXG4mIzQzO2twYWdlZmxhZ3NfYml0X3NldCgpIHtcbiYjNDM7XHRsb2NhbCB3b3JkXG4mIzQzO1xuJiM0MztcdHdvcmQ9JChvZCAtQW4gLXR4OCAtdiAtaiBcJiMzNDskKCgkMSAqIDgpKVwmIzM0OyAtTiA4IFwmIzM0OyRrcGFnZWZsYWdzX3BhdGhcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbCB8IHRyIC1kICYjMzk7WzpzcGFjZTpdJiMzOTspXG4mIzQzO1x0WyAtbiBcJiMzNDskd29yZFwmIzM0OyBdIHx8IHJldHVybiAyXG4mIzQzO1x0KCggKDE2IyR3b3JkIFx1MDAzZVx1MDAzZSAkMikgXHUwMDI2IDEgKSlcbiYjNDM7fVxuJiM0MztcbiYjNDM7IyBCZXN0LWVmZm9ydDogZHJvcCB0aGUgUEdfaHdwb2lzb24gbWFya2VyIHNldCBieSB0aGUgaW5qZWN0IHNvIGEgZmFpbGVkXG4mIzQzOyMgcnVuIGRvZXMgbm90IGxlYXZlIGEgcG9pc29uZWQgcGFnZSBiZWhpbmQuICBoYXJkX29mZmxpbmVfcGFnZSgpIGluamVjdHNcbiYjNDM7IyB3aXRoIE1GX1NXX1NJTVVMQVRFRCwgc28gdGhlIHBhZ2Ugc3RheXMgdW5wb2lzb25hYmxlIHRocm91Z2ggdGhlXG4mIzQzOyMgaHdwb2lzb24gZGVidWdmcyBpbnRlcmZhY2UgKG5lZWRzIENPTkZJR19IV1BPSVNPTl9JTkpFQ1QgJiM0MzsgZGVidWdmcykuXG4mIzQzO3RyeV91bnBvaXNvbigpIHtcbiYjNDM7XHRbIC13IFwmIzM0OyR1bnBvaXNvbl9wYXRoXCYjMzQ7IF0gfHwgcmV0dXJuIDBcbiYjNDM7XHRlY2hvIFwmIzM0OyQxXCYjMzQ7IFx1MDAzZSBcJiMzNDskdW5wb2lzb25fcGF0aFwmIzM0OyAyXHUwMDNlL2Rldi9udWxsIHx8IHRydWVcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y2FzZSBcJiMzNDska2luZFwmIzM0OyBpblxuJiM0Mztyb2RhdGEpXG4mIzQzO1x0cGh5c19hZGRyPSQocGlja19yb2RhdGFfcGh5c19hZGRyKVxuJiM0MztcdHJlY2hlY2tfYml0PSRLUEZfUkVTRVJWRURcbiYjNDM7XHRtaXNzaW5nX21zZz0mIzM5O25vIFwmIzM0O0tlcm5lbCByb2RhdGFcJiMzNDsgZW50cnkgaW4gL3Byb2MvaW9tZW0mIzM5O1xuJiM0MztcdDs7XG4mIzQzO3NsYWIpXG4mIzQzO1x0cGh5c19hZGRyPSQocGlja19rcGFnZWZsYWdzX3BoeXNfYWRkciBcJiMzNDskS1BGX1NMQUJcJiMzNDspXG4mIzQzO1x0cmVjaGVja19iaXQ9JEtQRl9TTEFCXG4mIzQzO1x0bWlzc2luZ19tc2c9XCYjMzQ7bm8gdXNhYmxlIHNsYWIgUEZOIGZvdW5kIGluICRrcGFnZWZsYWdzX3BhdGhcJiMzNDtcbiYjNDM7XHQ7O1xuJiM0MztwZ3RhYmxlKVxuJiM0MztcdHBoeXNfYWRkcj0kKHBpY2tfa3BhZ2VmbGFnc19waHlzX2FkZHIgXCYjMzQ7JEtQRl9QR1RBQkxFXCYjMzQ7KVxuJiM0MztcdHJlY2hlY2tfYml0PSRLUEZfUEdUQUJMRVxuJiM0MztcdG1pc3NpbmdfbXNnPVwmIzM0O25vIHVzYWJsZSBwYWdlLXRhYmxlIFBGTiBmb3VuZCBpbiAka3BhZ2VmbGFnc19wYXRoXCYjMzQ7XG4mIzQzO1x0OztcbiYjNDM7KilcbiYjNDM7XHRrc2Z0X2V4aXRfZmFpbCBcJiMzNDt1bmtub3duIGtpbmQgJiMzOTska2luZCYjMzk7IChleHBlY3RlZDogcm9kYXRhfHNsYWJ8cGd0YWJsZSlcJiMzNDtcbiYjNDM7XHQ7O1xuJiM0Mztlc2FjXG4mIzQzO1xuJiM0MztpZiBbIC16IFwmIzM0OyRwaHlzX2FkZHJcJiMzNDsgXTsgdGhlblxuJiM0MztcdGtzZnRfZXhpdF9za2lwIFwmIzM0OyRtaXNzaW5nX21zZ1wmIzM0O1xuJiM0MztmaVxuJiM0MztcbiYjNDM7a3NmdF9wcmludCBcJiMzNDtlbmFibGluZyAkc3lzY3RsX3BhdGhcJiMzNDtcbiYjNDM7cHJpb3I9JChjYXQgXCYjMzQ7JHN5c2N0bF9wYXRoXCYjMzQ7KVxuJiM0MztlY2hvIDEgXHUwMDNlIFwmIzM0OyRzeXNjdGxfcGF0aFwmIzM0OyB8fCBrc2Z0X2V4aXRfZmFpbCBcJiMzNDtmYWlsZWQgdG8gZW5hYmxlIHN5c2N0bFwmIzM0O1xuJiM0MztcbiYjNDM7cGZuPSQoKHBoeXNfYWRkciAvIHBhZ2VzaXplKSlcbiYjNDM7a3NmdF9wcmludCBcJiMzNDtpbmplY3RpbmcgaHdwb2lzb24gYXQgcGh5cyAweCQocHJpbnRmICYjMzk7JXgmIzM5OyBcJiMzNDskcGh5c19hZGRyXCYjMzQ7KSAocGZuIDB4JChwcmludGYgJiMzOTsleCYjMzk7IFwmIzM0OyRwZm5cJiMzNDspLCBraW5kPSRraW5kKVwmIzM0O1xuJiM0Mztrc2Z0X3ByaW50IFwmIzM0O2V4cGVjdGluZyBrZXJuZWwgcGFuaWM6ICYjMzk7TWVtb3J5IGZhaWx1cmU6IFx1MDAzY3Bmblx1MDAzZTogdW5yZWNvdmVyYWJsZSBwYWdlJiMzOTtcJiMzNDtcbiYjNDM7XG4mIzQzOyMgQSBzdWNjZXNzZnVsIHJ1biBuZXZlciByZXR1cm5zIGZyb20gdGhlIGluamVjdCAtLSBpdCBwYW5pY3MgdGhlIGtlcm5lbC5cbiYjNDM7IyBSZWFjaGluZyB0aGUgY29kZSBiZWxvdyB0aGVyZWZvcmUgbWVhbnMgbm8gcGFuaWMgZmlyZWQuICBOb3RlIHdoZXRoZXJcbiYjNDM7IyB0aGUgd3JpdGUgaXRzZWxmIHN1Y2NlZWRlZCwgdGhlbiBwdXQgdGhlIG1hY2hpbmUgYmFjazogcmVzdG9yZSB0aGVcbiYjNDM7IyBzeXNjdGwgYW5kIGJlc3QtZWZmb3J0IHVucG9pc29uIHRoZSBwYWdlIHdlIGp1c3QgbWFya2VkLlxuJiM0MztpZiBlY2hvIFwmIzM0OyRwaHlzX2FkZHJcJiMzNDsgXHUwMDNlIFwmIzM0OyRpbmplY3RfcGF0aFwmIzM0OzsgdGhlblxuJiM0MztcdHZlcmRpY3Q9XCYjMzQ7aW5qZWN0IHJldHVybmVkIHdpdGhvdXQgcGFuaWM7IHN5c2N0bCBpbmVmZmVjdGl2ZVwmIzM0O1xuJiM0MztlbHNlXG4mIzQzO1x0dmVyZGljdD1cJiMzNDtpbmplY3QgZmFpbGVkIGJlZm9yZSByZWFjaGluZyB0aGUgcGFuaWMgcGF0aFwmIzM0O1xuJiM0MztmaVxuJiM0MztcbiYjNDM7ZWNobyBcJiMzNDskcHJpb3JcJiMzNDsgXHUwMDNlIFwmIzM0OyRzeXNjdGxfcGF0aFwmIzM0O1xuJiM0Mzt0cnlfdW5wb2lzb24gXCYjMzQ7JHBmblwmIzM0O1xuJiM0MztcbiYjNDM7IyBUaGUgcGFnZSB0eXBlIGNhbiBjaGFuZ2UgYmV0d2VlbiBzZWxlY3Rpb24gYW5kIGluamVjdGlvbiAoZS5nLiBhIHNsYWJcbiYjNDM7IyBvciBwYWdlLXRhYmxlIHBhZ2UgaXMgZnJlZWQgYW5kIHJldXNlZCkuICBPbmx5IHRyZWF0IGEgbWlzc2luZyBwYW5pYyBhc1xuJiM0MzsjIGEgZmFpbHVyZSBpZiB0aGUgdGFyZ2V0IFBGTiBpcyBzdGlsbCB0aGUga2VybmVsLW93bmVkIHR5cGUgd2UgYWltZWQgYXQ7XG4mIzQzOyMgaWYgaXQgcmFjZWQgdG8gYW5vdGhlciB0eXBlIHRoZSBydW4gaXMgaW5jb25jbHVzaXZlLCBzbyBza2lwIGluc3RlYWQuXG4mIzQzO2twYWdlZmxhZ3NfYml0X3NldCBcJiMzNDskcGZuXCYjMzQ7IFwmIzM0OyRyZWNoZWNrX2JpdFwmIzM0O1xuJiM0MztjYXNlICQ/IGluXG4mIzQzOzApXHRrc2Z0X2V4aXRfZmFpbCBcJiMzNDskdmVyZGljdCAocGFnZSBzdGlsbCAka2luZClcJiMzNDsgOztcbiYjNDM7MSlcdGtzZnRfZXhpdF9za2lwIFwmIzM0O3RhcmdldCBQRk4gbm8gbG9uZ2VyICRraW5kOyByYWNlZCBiZWZvcmUgaW5qZWN0LCBpbmNvbmNsdXNpdmVcJiMzNDsgOztcbiYjNDM7KilcdGtzZnRfZXhpdF9mYWlsIFwmIzM0OyR2ZXJkaWN0IChjb3VsZCBub3QgcmVjb25maXJtIHBhZ2UgdHlwZSB2aWEgJGtwYWdlZmxhZ3NfcGF0aClcJiMzNDsgOztcbiYjNDM7ZXNhY1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIzOjA1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O0hXUE9JU09OX0lOSkVDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbW9yeV9mYWlsdXJlJiMzNDssCiAgICAmIzM0O2dldF9hbnlfcGFnZSYjMzQ7LAogICAgJiMzNDthY3Rpb25fcmVzdWx0JiMzNDssCiAgICAmIzM0O3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWYmIzM0OywKICAgICYjMzQ7aXNfa2VybmVsX293bmVkX3BhZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgbG9naWMgKGBtZW1vcnlfZmFpbHVyZWAsIGBnZXRfYW55X3BhZ2VgKSB0byBleHBsaWNpdGx5IGlkZW50aWZ5IGFuZCBzaG9ydC1jaXJjdWl0IG9uIGtlcm5lbC1vd25lZCBwYWdlcyAoc2xhYiwgcGFnZSB0YWJsZXMsIHJlc2VydmVkLCBsYXJnZSBrbWFsbG9jKS4gSXQgYWxzbyBpbnRyb2R1Y2VzIGEgbmV3IHN5c2N0bCB0byBwYW5pYyBvbiBzdWNoIHVucmVjb3ZlcmFibGUgZXJyb3JzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgaGFyZHdhcmUgZXJyb3IgaW5qZWN0aW9uIGludGVyZmFjZXMgKGUuZy4sIGAvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9oYXJkX29mZmxpbmVfcGFnZWAgb3IgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTgxNzQyMjU5YzQxYjJmMWQ3NzEyYTQ0YjBhYjAwODY1MDg1MDc1MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVuIDI2IDIzOjA1OjE5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0CmluZGV4IGI5YjBjMjE4YmZiNDQwLi4yMmNjNTRjYWMzYjIxZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdApAQCAtNjcsNiAmIzQzOzY3LDcgQEAgQ3VycmVudGx5LCB0aGVzZSBmaWxlcyBhcmUgaW4gL3Byb2Mvc3lzL3ZtOgogLSBwYWdlLWNsdXN0ZXIKIC0gcGFnZV9sb2NrX3VuZmFpcm5lc3MKIC0gcGFuaWNfb25fb29tCiYjNDM7LSBwYW5pY19vbl91bnJlY292ZXJhYmxlX21lbW9yeV9mYWlsdXJlCiAtIHBlcmNwdV9wYWdlbGlzdF9oaWdoX2ZyYWN0aW9uCiAtIHN0YXRfaW50ZXJ2YWwKIC0gc3RhdF9yZWZyZXNoCkBAIC05MjUsNiAmIzQzOzkyNiw4NSBAQCBwYW5pY19vbl9vb209MiYjNDM7a2R1bXAgZ2l2ZXMgeW91IHZlcnkgc3Ryb25nIHRvb2wgdG8gaW52ZXN0aWdhdGUKIHdoeSBvb20gaGFwcGVucy4gWW91IGNhbiBnZXQgc25hcHNob3QuCiAKIAomIzQzO3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmUKJiM0Mzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOwomIzQzO1doZW4gYSBoYXJkd2FyZSBtZW1vcnkgZXJyb3IgKGUuZy4gbXVsdGktYml0IEVDQykgaGl0cyBhIGtlcm5lbCBwYWdlCiYjNDM7dGhhdCBjYW5ub3QgYmUgcmVjb3ZlcmVkIGJ5IHRoZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGVyLCB0aGUgZGVmYXVsdAomIzQzO2JlaGF2aW91ciBpcyB0byBpZ25vcmUgdGhlIGVycm9yIGFuZCBjb250aW51ZSBvcGVyYXRpb24uICBUaGlzIGlzCiYjNDM7ZGFuZ2Vyb3VzIGJlY2F1c2UgdGhlIGNvcnJ1cHRlZCBkYXRhIHJlbWFpbnMgYWNjZXNzaWJsZSB0byB0aGUga2VybmVsLAomIzQzO3Jpc2tpbmcgc2lsZW50IGRhdGEgY29ycnVwdGlvbiBvciBhIGRlbGF5ZWQgY3Jhc2ggd2hlbiB0aGUgcG9pc29uZWQKJiM0MzttZW1vcnkgaXMgbmV4dCBhY2Nlc3NlZC4KJiM0MzsKJiM0MztXaGVuIGVuYWJsZWQsIHRoaXMgc3lzY3RsIHRyaWdnZXJzIGEgcGFuaWMgb24gbWVtb3J5IGZhaWx1cmUgZXZlbnRzCiYjNDM7aGl0dGluZyBrZXJuZWwtb3duZWQgcGFnZXMgdGhhdCB0aGUgaGFuZGxlciBjYW5ub3QgcmVjb3ZlcjoKJiM0MztgYFBhZ2VSZXNlcnZlZGBgIChmaXJtd2FyZSByZXNlcnZhdGlvbnMsIGtlcm5lbCBpbWFnZSwgdkRTTywgemVybwomIzQzO3BhZ2UsIGFuZCBzaW1pbGFyIG1lbWJsb2NrLXJlc2VydmVkIHJlZ2lvbnMpLCBgYFBhZ2VTbGFiYGAsCiYjNDM7YGBQYWdlVGFibGVgYCwgYW5kIGBgUGFnZUxhcmdlS21hbGxvY2BgLiAgVGhlc2UgYXJlIG93bmVkIGJ5IHRoZQomIzQzO2tlcm5lbCBhbmQgdGhlIG1lbW9yeSBmYWlsdXJlIGhhbmRsZXIgY2Fubm90IHJlbGlhYmx5IGV2aWN0IHRoZWlyCiYjNDM7Y29udGVudHMuCiYjNDM7CiYjNDM7T3RoZXIgdW5yZWNvdmVyYWJsZSBrZXJuZWwtb3duZWQgcG9wdWxhdGlvbnMgKHZtYWxsb2MgYWxsb2NhdGlvbnMsCiYjNDM7a2VybmVsIHN0YWNrIHBhZ2VzLCAuLi4pIGFyZSBub3QgY3VycmVudGx5IGNvdmVyZWQgYmVjYXVzZSB0aGUKJiM0MztoYW5kbGVyIGhhcyBubyBwYWdlLXR5cGUgc2lnbmFsIHRoYXQgZGlzdGluZ3Vpc2hlcyB0aGVtIGZyb20gYQomIzQzO3VzZXJzcGFjZSBmb2xpbyB0ZW1wb3JhcmlseSBvZmYgdGhlIExSVSBkdXJpbmcgbWlncmF0aW9uIG9yCiYjNDM7Y29tcGFjdGlvbi4gIFN1Y2ggcGFnZXMgc3RpbGwgZ28gdGhyb3VnaCB0aGUgc3RhbmRhcmQKJiM0MztNRl9NU0dfR0VUX0hXUE9JU09OIHBhdGg6IGBgUEdfaHdwb2lzb25gYCBpcyBzZXQgb24gdGhlbSBhbmQgYQomIzQzO2RlbGF5ZWQgY3Jhc2ggb24gdGhlIG5leHQgYWNjZXNzIHJlbWFpbnMgcG9zc2libGUuICBDb3ZlcmFnZSBtYXkKJiM0Mztncm93IGFzIHRoZSBoYW5kbGVyIGdhaW5zIHN0cm9uZ2VyIGtlcm5lbC1vd25lcnNoaXAgc2lnbmFscy4KJiM0MzsKJiM0MztSZWNvdmVyYWJsZSBmYWlsdXJlIHBhdGhzIGFyZSBhbHNvIGludGVudGlvbmFsbHkgbGVmdCBvdXQ6IGluLWZsaWdodAomIzQzO2J1ZGR5IGFsbG9jYXRpb25zIGFuZCBvdGhlciB0cmFuc2llbnQgcmFjZXMgd2l0aCB0aGUgcGFnZSBhbGxvY2F0b3IKJiM0MztjYW4gcmVhY2ggdGhlIHNhbWUgZGlhZ25vc3RpYywgYW5kIHBhbmlja2luZyBvbiB0aGVtIHdvdWxkIHJpc2sKJiM0MztraWxsaW5nIHRoZSBib3ggZm9yIGEgcGFnZSBkZXN0aW5lZCBmb3IgdXNlcnNwYWNlIHdoZXJlIHRoZSBzdGFuZGFyZAomIzQzO1NJR0JVUyByZWNvdmVyeSBwYXRoIGFwcGxpZXMuICBQYWdlcyB3aG9zZSBzdGF0ZSBjb3VsZCBub3QgYmUKJiM0MztjbGFzc2lmaWVkIGF0IGFsbCBhcmUgbm90IGNvdmVyZWQgZWl0aGVyLCBzaW5jZSBhbiB1bmtub3duIHN0YXRlIGlzCiYjNDM7bm90IGEgc291bmQgYmFzaXMgZm9yIGEgcGFuaWMgZGVjaXNpb24uCiYjNDM7CiYjNDM7Rm9yIG1hbnkgZW52aXJvbm1lbnRzIGl0IGlzIHByZWZlcmFibGUgdG8gcGFuaWMgaW1tZWRpYXRlbHkgd2l0aCBhIGNsZWFuCiYjNDM7Y3Jhc2ggZHVtcCB0aGF0IGNhcHR1cmVzIHRoZSBvcmlnaW5hbCBlcnJvciBjb250ZXh0LCByYXRoZXIgdGhhbiB0bwomIzQzO2NvbnRpbnVlIGFuZCBmYWNlIGEgcmFuZG9tIGNyYXNoIGxhdGVyIHdob3NlIGNhdXNlIGlzIGRpZmZpY3VsdCB0bwomIzQzO2RpYWdub3NlLgomIzQzOwomIzQzO1VzZSBjYXNlcwomIzQzOy0tLS0tLS0tLQomIzQzOwomIzQzO1RoaXMgb3B0aW9uIGlzIG1vc3QgdXNlZnVsIGluIGVudmlyb25tZW50cyB3aGVyZSB1bmF0dHJpYnV0ZWQgY3Jhc2hlcwomIzQzO2FyZSBleHBlbnNpdmUgdG8gZGVidWcgb3Igd2hlcmUgZGF0YSBpbnRlZ3JpdHkgbXVzdCB0YWtlIHByZWNlZGVuY2UKJiM0MztvdmVyIGF2YWlsYWJpbGl0eToKJiM0MzsKJiM0MzsqIExhcmdlIGZsZWV0cywgd2hlcmUgbXVsdGktYml0IEVDQyBlcnJvcnMgb24ga2VybmVsIHBhZ2VzIGFyZSBvYnNlcnZlZAomIzQzOyAgcmVndWxhcmx5IGFuZCBwb3N0LW1vcnRlbSBhbmFseXNpcyBvZiBhbiB1bnJlbGF0ZWQgZG93bnN0cmVhbSBjcmFzaAomIzQzOyAgKG9mdGVuIHNlY29uZHMgdG8gbWludXRlcyBhZnRlciB0aGUgb3JpZ2luYWwgZXJyb3IpIGNvbnN1bWVzCiYjNDM7ICBzaWduaWZpY2FudCBlbmdpbmVlcmluZyBlZmZvcnQuCiYjNDM7CiYjNDM7KiBTeXN0ZW1zIGNvbmZpZ3VyZWQgd2l0aCBrZHVtcCwgd2hlcmUgcGFuaWNraW5nIGF0IHRoZSBtb21lbnQgb2YgdGhlCiYjNDM7ICBoYXJkd2FyZSBlcnJvciBwcm9kdWNlcyBhIHZtY29yZSB0aGF0IHN0aWxsIGNvbnRhaW5zIHRoZSBmYXVsdGluZwomIzQzOyAgYWRkcmVzcywgdGhlIGFmZmVjdGVkIHBhZ2Ugc3RhdGUsIGFuZCB0aGUgb3JpZ2luYXRpbmcgTUNFL0dIRVMKJiM0MzsgIHJlY29yZCDigJQgY29udGV4dCB0aGF0IGlzIHR5cGljYWxseSBsb3N0IGJ5IHRoZSB0aW1lIGEgZGVsYXllZCBjcmFzaAomIzQzOyAgb2NjdXJzLgomIzQzOwomIzQzOyogSGlnaC1hdmFpbGFiaWxpdHkgY2x1c3RlcnMgdGhhdCByZWx5IG9uIGZhc3QsIGRldGVybWluaXN0aWMgbm9kZQomIzQzOyAgZmFpbHVyZSBmb3IgZmFpbG92ZXIsIGFuZCBwcmVmZXIgYW4gaW1tZWRpYXRlIHBhbmljIG92ZXIgc2lsZW50IGRhdGEKJiM0MzsgIGNvcnJ1cHRpb24gcHJvcGFnYXRpbmcgdG8gcmVwbGljYXMgb3IgcGVyc2lzdGVudCBzdG9yYWdlLgomIzQzOwomIzQzOyogS2VybmVsIGFuZCBwbGF0Zm9ybSBkZXZlbG9wZXJzIHJlcHJvZHVjaW5nIGh3cG9pc29uIGlzc3VlcyB3aXRoCiYjNDM7ICB0b29scyBzdWNoIGFzIGBgbWNlLWluamVjdGBgIG9yIGVycm9yLWluamVjdGlvbiBkZWJ1Z2ZzIGludGVyZmFjZXMsCiYjNDM7ICB3aGVyZSBwYW5pY2tpbmcgb24gdGhlIHVucmVjb3ZlcmFibGUgcGF0aCBtYWtlcyByZWdyZXNzaW9ucwomIzQzOyAgaW1tZWRpYXRlbHkgdmlzaWJsZSBpbnN0ZWFkIG9mIHN1cmZhY2luZyBhcyBsYXRlciwgdW5yZWxhdGVkCiYjNDM7ICBmYWlsdXJlcy4KJiM0MzsKJiM0Mzs9ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOzAgVHJ5IHRvIGNvbnRpbnVlIG9wZXJhdGlvbiAoZGVmYXVsdCkuCiYjNDM7MSBQYW5pYyBpbW1lZGlhdGVseS4gIElmIHRoZSBgYHBhbmljYGAgc3lzY3RsIGlzIGFsc28gbm9uLXplcm8gdGhlbiB0aGUKJiM0MzsgIG1hY2hpbmUgd2lsbCBiZSByZWJvb3RlZC4KJiM0Mzs9ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOwomIzQzO0V4YW1wbGU6OgomIzQzOwomIzQzOyAgICAgZWNobyAxICZndDsgL3Byb2Mvc3lzL3ZtL3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmUKJiM0MzsKJiM0MzsKIHBlcmNwdV9wYWdlbGlzdF9oaWdoX2ZyYWN0aW9uCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuYwppbmRleCA1MTUwOGE1NWM0MDU1ZS4uNjExMTYwYzk4YzZmNjQgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LWZhaWx1cmUuYwpAQCAtNzQsNiAmIzQzOzc0LDggQEAgc3RhdGljIGludCBzeXNjdGxfbWVtb3J5X2ZhaWx1cmVfcmVjb3ZlcnkgX19yZWFkX21vc3RseSA9IDE7CiAKIHN0YXRpYyBpbnQgc3lzY3RsX2VuYWJsZV9zb2Z0X29mZmxpbmUgX19yZWFkX21vc3RseSA9IDE7CiAKJiM0MztzdGF0aWMgaW50IHN5c2N0bF9wYW5pY19vbl91bnJlY292ZXJhYmxlX21mIF9fcmVhZF9tb3N0bHk7CiYjNDM7CiBhdG9taWNfbG9uZ190IG51bV9wb2lzb25lZF9wYWdlcyBfX3JlYWRfbW9zdGx5ID0gQVRPTUlDX0xPTkdfSU5JVCgwKTsKIAogc3RhdGljIGJvb2wgaHdfbWVtb3J5X2ZhaWx1cmUgX19yZWFkX21vc3RseSA9IGZhbHNlOwpAQCAtMTU1LDYgJiM0MzsxNTcsMTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgbWVtb3J5X2ZhaWx1cmVfdGFibGVbXSA9IHsKIAkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWNfbWlubWF4LAogCQkuZXh0cmExCQk9IFNZU0NUTF9aRVJPLAogCQkuZXh0cmEyCQk9IFNZU0NUTF9PTkUsCiYjNDM7CX0sCiYjNDM7CXsKJiM0MzsJCS5wcm9jbmFtZQk9ICYjMzQ7cGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZSYjMzQ7LAomIzQzOwkJLmRhdGEJCT0gJmFtcDtzeXNjdGxfcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZiwKJiM0MzsJCS5tYXhsZW4JCT0gc2l6ZW9mKHN5c2N0bF9wYW5pY19vbl91bnJlY292ZXJhYmxlX21mKSwKJiM0MzsJCS5tb2RlCQk9IDA2NDQsCiYjNDM7CQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlY19taW5tYXgsCiYjNDM7CQkuZXh0cmExCQk9IFNZU0NUTF9aRVJPLAomIzQzOwkJLmV4dHJhMgkJPSBTWVNDVExfT05FLAogCX0KIH07CiAKQEAgLTk4MCwxNyAmIzQzOzk5MSw2IEBAIHN0YXRpYyBib29sIGhhc19leHRyYV9yZWZjb3VudChzdHJ1Y3QgcGFnZV9zdGF0ZSAqcHMsIHN0cnVjdCBwYWdlICpwLAogCXJldHVybiBmYWxzZTsKIH0KIAotLyoKLSAqIEVycm9yIGhpdCBrZXJuZWwgcGFnZS4KLSAqIERvIG5vdGhpbmcsIHRyeSB0byBiZSBsdWNreSBhbmQgbm90IHRvdWNoIHRoaXMgaW5zdGVhZC4gRm9yIGEgZmV3IGNhc2VzIHdlCi0gKiBjb3VsZCBiZSBtb3JlIHNvcGhpc3RpY2F0ZWQuCi0gKi8KLXN0YXRpYyBpbnQgbWVfa2VybmVsKHN0cnVjdCBwYWdlX3N0YXRlICpwcywgc3RydWN0IHBhZ2UgKnApCi17Ci0JdW5sb2NrX3BhZ2UocCk7Ci0JcmV0dXJuIE1GX0lHTk9SRUQ7Ci19Ci0KIC8qCiAgKiBQYWdlIGluIHVua25vd24gc3RhdGUuIERvIG5vdGhpbmcuCiAgKiBUaGlzIGlzIGEgY2F0Y2gtYWxsIGluIGNhc2Ugd2UgZmFpbCB0byBtYWtlIHNlbnNlIG9mIHRoZSBwYWdlIHN0YXRlLgpAQCAtMTE5OSwxMCAmIzQzOzExOTksOCBAQCBzdGF0aWMgaW50IG1lX2h1Z2VfcGFnZShzdHJ1Y3QgcGFnZV9zdGF0ZSAqcHMsIHN0cnVjdCBwYWdlICpwKQogI2RlZmluZSBtbG9jawkJKDFVTCAmbHQ7Jmx0OyBQR19tbG9ja2VkKQogI2RlZmluZSBscnUJCSgxVUwgJmx0OyZsdDsgUEdfbHJ1KQogI2RlZmluZSBoZWFkCQkoMVVMICZsdDsmbHQ7IFBHX2hlYWQpCi0jZGVmaW5lIHJlc2VydmVkCSgxVUwgJmx0OyZsdDsgUEdfcmVzZXJ2ZWQpCiAKIHN0YXRpYyBzdHJ1Y3QgcGFnZV9zdGF0ZSBlcnJvcl9zdGF0ZXNbXSA9IHsKLQl7IHJlc2VydmVkLAlyZXNlcnZlZCwJTUZfTVNHX0tFUk5FTCwJbWVfa2VybmVsIH0sCiAJLyoKIAkgKiBmcmVlIHBhZ2VzIGFyZSBzcGVjaWFsbHkgZGV0ZWN0ZWQgb3V0c2lkZSB0aGlzIHRhYmxlOgogCSAqIFBHX2J1ZGR5IHBhZ2VzIG9ubHkgbWFrZSBhIHNtYWxsIGZyYWN0aW9uIG9mIGFsbCBmcmVlIHBhZ2VzLgpAQCAtMTIzNCw3ICYjNDM7MTIzMiw2IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZV9zdGF0ZSBlcnJvcl9zdGF0ZXNbXSA9IHsKICN1bmRlZiBtbG9jawogI3VuZGVmIGxydQogI3VuZGVmIGhlYWQKLSN1bmRlZiByZXNlcnZlZAogCiBzdGF0aWMgdm9pZCB1cGRhdGVfcGVyX25vZGVfbWZfc3RhdHModW5zaWduZWQgbG9uZyBwZm4sCiAJCQkJICAgICBlbnVtIG1mX3Jlc3VsdCByZXN1bHQpCkBAIC0xMjY5LDYgJiM0MzsxMjY2LDE1IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyh1bnNpZ25lZCBsb25nIHBmbiwKIAkmIzQzOyYjNDM7bWZfc3RhdHMtJmd0O3RvdGFsOwogfQogCiYjNDM7c3RhdGljIGJvb2wgcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZihlbnVtIG1mX2FjdGlvbl9wYWdlX3R5cGUgdHlwZSwKJiM0MzsJCQkJICAgICAgZW51bSBtZl9yZXN1bHQgcmVzdWx0KQomIzQzO3sKJiM0MzsJaWYgKCFzeXNjdGxfcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZikKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcmV0dXJuIHR5cGUgPT0gTUZfTVNHX0tFUk5FTCAmYW1wOyZhbXA7IHJlc3VsdCA9PSBNRl9JR05PUkVEOwomIzQzO30KJiM0MzsKIC8qCiAgKiAmIzM0O0RpcnR5L0NsZWFuJiMzNDsgaW5kaWNhdGlvbiBpcyBub3QgMTAwJSBhY2N1cmF0ZSBkdWUgdG8gdGhlIHBvc3NpYmlsaXR5IG9mCiAgKiBzZXR0aW5nIFBHX2RpcnR5IG91dHNpZGUgcGFnZSBsb2NrLiBTZWUgYWxzbyBjb21tZW50IGFib3ZlIHNldF9wYWdlX2RpcnR5KCkuCkBAIC0xMjg2LDYgJiM0MzsxMjkyLDkgQEAgc3RhdGljIGludCBhY3Rpb25fcmVzdWx0KHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIG1mX2FjdGlvbl9wYWdlX3R5cGUgdHlwZSwKIAlwcl9lcnIoJiMzNDslI2x4OiByZWNvdmVyeSBhY3Rpb24gZm9yICVzOiAlc1xuJiMzNDssCiAJCXBmbiwgYWN0aW9uX3BhZ2VfdHlwZXNbdHlwZV0sIGFjdGlvbl9uYW1lW3Jlc3VsdF0pOwogCiYjNDM7CWlmIChwYW5pY19vbl91bnJlY292ZXJhYmxlX21mKHR5cGUsIHJlc3VsdCkpCiYjNDM7CQlwYW5pYygmIzM0O01lbW9yeSBmYWlsdXJlOiAlI2x4OiB1bnJlY292ZXJhYmxlIHBhZ2UmIzM0OywgcGZuKTsKJiM0MzsKIAlyZXR1cm4gKHJlc3VsdCA9PSBNRl9SRUNPVkVSRUQgfHwgcmVzdWx0ID09IE1GX0RFTEFZRUQpID8gMCA6IC1FQlVTWTsKIH0KIApAQCAtMTMzOSw2ICYjNDM7MTM0OCwzNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgSFdQb2lzb25IYW5kbGFibGUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiAJcmV0dXJuIFBhZ2VMUlUocGFnZSkgfHwgaXNfZnJlZV9idWRkeV9wYWdlKHBhZ2UpOwogfQogCiYjNDM7LyoKJiM0MzsgKiBQb3NpdGl2ZSBpZGVudGlmaWNhdGlvbiBvZiBwYWdlcyB0aGUgaHdwb2lzb24gaGFuZGxlciBjYW5ub3QgcmVjb3ZlcjoKJiM0MzsgKiBwYWdlcyBvd25lZCBieSBrZXJuZWwgaW50ZXJuYWxzIHdpdGggbm8gdXNlcnNwYWNlIG1hcHBpbmcgdG8gdW5tYXAsIG5vCiYjNDM7ICogZmlsZSBtYXBwaW5nIHRvIGludmFsaWRhdGUsIGFuZCBubyBtaWdyYXRpb24gdGFyZ2V0LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBpc19rZXJuZWxfb3duZWRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwYWdlICpoZWFkOwomIzQzOwlib29sIGtlcm5lbF9vd25lZDsKJiM0MzsKJiM0MzsJLyogUEdfcmVzZXJ2ZWQgaXMgYSBwZXItcGFnZSBmbGFnLCBuZXZlciBzZXQgb24gYSBjb21wb3VuZCBwYWdlLiAqLwomIzQzOwlpZiAoUGFnZVJlc2VydmVkKHBhZ2UpKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFBhZ2UtdHlwZSBiaXRzIGxpdmUgb25seSBvbiB0aGUgaGVhZCBwYWdlLCBzbyByZXNvbHZlIGFueSB0YWlsCiYjNDM7CSAqIGZpcnN0LiAgVGhlIGNoZWNrIHRha2VzIG5vIHJlZmNvdW50OyByZWNoZWNrIHRoZSBoZWFkIGFmdGVyd2FyZHMKJiM0MzsJICogc28gYSBjb25jdXJyZW50IHNwbGl0IG9yIGNvbXBvdW5kIGZyZWUgY2Fubm90IGxlYXZlIHVzIHRydXN0aW5nCiYjNDM7CSAqIGEgc3RhbGUgdmlldy4gIEEgZnJlZS0mZ3Q7YWxsb2MtJmd0O2ZyZWUgaW4gdGhlIHNhbWUgd2luZG93IGlzIHN0aWxsCiYjNDM7CSAqIHBvc3NpYmxlIGJ1dCBjbG9zaW5nIGl0IHdvdWxkIHJlcXVpcmUgdGFraW5nIGEgcmVmZXJlbmNlIGhlcmUuCiYjNDM7CSAqLwomIzQzO3JldHJ5OgomIzQzOwloZWFkID0gY29tcG91bmRfaGVhZChwYWdlKTsKJiM0MzsJa2VybmVsX293bmVkID0gUGFnZVNsYWIoaGVhZCkgfHwgUGFnZVRhYmxlKGhlYWQpIHx8CiYjNDM7CQkgICAgICAgUGFnZUxhcmdlS21hbGxvYyhoZWFkKTsKJiM0MzsJaWYgKGhlYWQgIT0gY29tcG91bmRfaGVhZChwYWdlKSkKJiM0MzsJCWdvdG8gcmV0cnk7CiYjNDM7CXJldHVybiBrZXJuZWxfb3duZWQ7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBfX2dldF9od3BvaXNvbl9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewogCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpOwpAQCAtMTM4NSw2ICYjNDM7MTQyNCwxOSBAQCBzdGF0aWMgaW50IGdldF9hbnlfcGFnZShzdHJ1Y3QgcGFnZSAqcCwgdW5zaWduZWQgbG9uZyBmbGFncykKIAlpZiAoZmxhZ3MgJmFtcDsgTUZfQ09VTlRfSU5DUkVBU0VEKQogCQljb3VudF9pbmNyZWFzZWQgPSB0cnVlOwogCiYjNDM7CS8qCiYjNDM7CSAqIFBhZ2UgdHlwZXMgd2Uga25vdyBhcmUga2VybmVsLW93bmVkIGFuZCBjYW5ub3QgYmUgcmVjb3ZlcmVkLgomIzQzOwkgKiBTaG9ydC1jaXJjdWl0IGJlZm9yZSB0aGUgc2hha2VfcGFnZSgpIC8gcmV0cnkgbG9vcCwgd2hpY2gKJiM0MzsJICogY2Fubm90IHR1cm4gYW55IG9mIHRoZXNlIGludG8gc29tZXRoaW5nIEhXUG9pc29uSGFuZGxhYmxlKCkuCiYjNDM7CSAqIERyb3AgdGhlIGNhbGxlciYjMzk7cyByZWZlcmVuY2UgaWYgTUZfQ09VTlRfSU5DUkVBU0VEIHRvb2sgb25lLgomIzQzOwkgKi8KJiM0MzsJaWYgKGlzX2tlcm5lbF9vd25lZF9wYWdlKHApKSB7CiYjNDM7CQlpZiAoY291bnRfaW5jcmVhc2VkKQomIzQzOwkJCXB1dF9wYWdlKHApOwomIzQzOwkJcmV0ID0gLUVOT1RSRUNPVkVSQUJMRTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiB0cnlfYWdhaW46CiAJaWYgKCFjb3VudF9pbmNyZWFzZWQpIHsKIAkJcmV0ID0gX19nZXRfaHdwb2lzb25fcGFnZShwLCBmbGFncyk7CkBAIC0xNDMyLDcgJiM0MzsxNDg0LDcgQEAgc3RhdGljIGludCBnZXRfYW55X3BhZ2Uoc3RydWN0IHBhZ2UgKnAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiAJCXJldCA9IC1FSU87CiAJfQogb3V0OgotCWlmIChyZXQgPT0gLUVJTykKJiM0MzsJaWYgKHJldCA9PSAtRUlPIHx8IHJldCA9PSAtRU5PVFJFQ09WRVJBQkxFKQogCQlwcl9lcnIoJiMzNDslI2x4OiB1bmhhbmRsYWJsZSBwYWdlLlxuJiMzNDssIHBhZ2VfdG9fcGZuKHApKTsKIAogCXJldHVybiByZXQ7CkBAIC0xNDg5LDcgJiM0MzsxNTQxLDEwIEBAIHN0YXRpYyBpbnQgX19nZXRfdW5wb2lzb25fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKICAqICAgICAgICAgLUVJTyBmb3IgcGFnZXMgb24gd2hpY2ggd2UgY2FuIG5vdCBoYW5kbGUgbWVtb3J5IGVycm9ycywKICAqICAgICAgICAgLUVCVVNZIHdoZW4gZ2V0X2h3cG9pc29uX3BhZ2UoKSBoYXMgcmFjZWQgd2l0aCBwYWdlIGxpZmVjeWNsZQogICogICAgICAgICBvcGVyYXRpb25zIGxpa2UgYWxsb2NhdGlvbiBhbmQgZnJlZSwKLSAqICAgICAgICAgLUVIV1BPSVNPTiB3aGVuIHRoZSBwYWdlIGlzIGh3cG9pc29uZWQgYW5kIHRha2VuIG9mZiBmcm9tIGJ1ZGR5LgomIzQzOyAqICAgICAgICAgLUVIV1BPSVNPTiB3aGVuIHRoZSBwYWdlIGlzIGh3cG9pc29uZWQgYW5kIHRha2VuIG9mZiBmcm9tIGJ1ZGR5LAomIzQzOyAqICAgICAgICAgLUVOT1RSRUNPVkVSQUJMRSBmb3Iga2VybmVsLW93bmVkIHBhZ2VzIGlkZW50aWZpZWQgYnkKJiM0MzsgKiAgICAgICAgIGlzX2tlcm5lbF9vd25lZF9wYWdlKCkgKFBHX3Jlc2VydmVkLCBzbGFiLAomIzQzOyAqICAgICAgICAgcGFnZS10YWJsZSwgbGFyZ2Uta21hbGxvYykgdGhhdCB0aGUgaGFuZGxlciBjYW5ub3QgcmVjb3Zlci4KICAqLwogc3RhdGljIGludCBnZXRfaHdwb2lzb25fcGFnZShzdHJ1Y3QgcGFnZSAqcCwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKQEAgLTI0MDIsNyAmIzQzOzI0NTcsOCBAQCBpbnQgbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncykKIAkgKiB0aGF0IG1heSBtYWtlIHBhZ2VfcmVmX2ZyZWV6ZSgpL3BhZ2VfcmVmX3VuZnJlZXplKCkgbWlzbWF0Y2guCiAJICovCiAJcmVzID0gZ2V0X2h3cG9pc29uX3BhZ2UocCwgZmxhZ3MpOwotCWlmICghcmVzKSB7CiYjNDM7CXN3aXRjaCAocmVzKSB7CiYjNDM7CWNhc2UgMDoKIAkJaWYgKGlzX2ZyZWVfYnVkZHlfcGFnZShwKSkgewogCQkJaWYgKHRha2VfcGFnZV9vZmZfYnVkZHkocCkpIHsKIAkJCQlwYWdlX3JlZl9pbmMocCk7CkBAIC0yNDIxLDcgJiM0MzsyNDc3LDE5IEBAIGludCBtZW1vcnlfZmFpbHVyZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKQogCQkJcmVzID0gYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19LRVJORUxfSElHSF9PUkRFUiwgTUZfSUdOT1JFRCk7CiAJCX0KIAkJZ290byB1bmxvY2tfbXV0ZXg7Ci0JfSBlbHNlIGlmIChyZXMgJmx0OyAwKSB7CiYjNDM7CWNhc2UgMToKJiM0MzsJCS8qIEdvdCBhIHJlZmNvdW50IG9uIGEgaGFuZGxhYmxlIHBhZ2UuICovCiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSAtRU5PVFJFQ09WRVJBQkxFOgomIzQzOwkJLyoKJiM0MzsJCSAqIFN0YWJsZSB1bmhhbmRsYWJsZSBrZXJuZWwtb3duZWQgcGFnZSAoUEdfcmVzZXJ2ZWQsCiYjNDM7CQkgKiBzbGFiLCBwYWdlIHRhYmxlcywgbGFyZ2Uta21hbGxvYykuCiYjNDM7CQkgKiBObyByZWNvdmVyeSBwb3NzaWJsZS4KJiM0MzsJCSAqLwomIzQzOwkJcmVzID0gYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19LRVJORUwsIE1GX0lHTk9SRUQpOwomIzQzOwkJZ290byB1bmxvY2tfbXV0ZXg7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQkvKiBUcmFuc2llbnQgbGlmZWN5Y2xlIHJhY2Ugd2l0aCB0aGUgcGFnZSBhbGxvY2F0b3IuICovCiAJCXJlcyA9IGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfR0VUX0hXUE9JU09OLCBNRl9JR05PUkVEKTsKIAkJZ290byB1bmxvY2tfbXV0ZXg7CiAJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZQppbmRleCBlNmRmOTY4ZjA5NzFjOC4uZWQzMjFhZTcwOWRhY2YgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlCkBAIC0xNzQsNiAmIzQzOzE3NCwxMCBAQCBURVNUX1BST0dTICYjNDM7PSBrc2Z0X3VzZXJmYXVsdGZkLnNoCiBURVNUX1BST0dTICYjNDM7PSBrc2Z0X3ZtYV9tZXJnZS5zaAogVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF92bWFsbG9jLnNoCiAKJiM0MzsjIERlc3RydWN0aXZlOiBldmVyeSBzdWNjZXNzZnVsIHJ1biBwYW5pY3MgdGhlIGtlcm5lbC4gIEluc3RhbGxlZCBhbmQKJiM0MzsjIGtlcHQgZXhlY3V0YWJsZSwgYnV0IG5vdCBydW4gZnJvbSBhIGRlZmF1bHQga3NlbGZ0ZXN0IGludm9jYXRpb24uCiYjNDM7VEVTVF9QUk9HU19FWFRFTkRFRCAmIzQzOz0gaHdwb2lzb24tcGFuaWMuc2gKJiM0MzsKIFRFU1RfRklMRVMgOj0gdGVzdF92bWFsbG9jLnNoCiBURVNUX0ZJTEVTICYjNDM7PSB0ZXN0X2htbS5zaAogVEVTVF9GSUxFUyAmIzQzOz0gdmFfaGlnaF9hZGRyX3N3aXRjaC5zaApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHdwb2lzb24tcGFuaWMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9od3BvaXNvbi1wYW5pYy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMC4uYWFmYzA2ZTg5NWQwMWQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9od3BvaXNvbi1wYW5pYy5zaApAQCAtMCwwICYjNDM7MSwyNDkgQEAKJiM0MzsjIS9iaW4vYmFzaAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjCiYjNDM7IyBWZXJpZnkgdm0ucGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZSBieSBpbmplY3RpbmcgYSBod3BvaXNvbgomIzQzOyMgZXJyb3Igb24gYSBrZXJuZWwtb3duZWQgcGFnZSBhbmQgY29uZmlybWluZyB0aGUga2VybmVsIHBhbmljcy4KJiM0MzsjCiYjNDM7IyBUaHJlZSAmIzM0O2tpbmRzJiMzNDsgb2Yga2VybmVsLW93bmVkIHBhZ2UgY2FuIGJlIHRhcmdldGVkLCBzZWxlY3RhYmxlIHZpYSB0aGUKJiM0MzsjIGZpcnN0IHBvc2l0aW9uYWwgYXJndW1lbnQgKGRlZmF1bHQ6IHJvZGF0YSk6CiYjNDM7IwomIzQzOyMgICByb2RhdGEgIC0gYSBQR19yZXNlcnZlZCBwYWdlIGluIHRoZSBrZXJuZWwgcm9kYXRhIHJhbmdlCiYjNDM7IyAgICAgICAgICAgICAoc291cmNlZCBmcm9tIC9wcm9jL2lvbWVtICYjMzQ7S2VybmVsIHJvZGF0YSYjMzQ7KS4gIEV4ZXJjaXNlcwomIzQzOyMgICAgICAgICAgICAgbWVtb3J5X2ZhaWx1cmUoKSAtJmd0OyBnZXRfYW55X3BhZ2UoKSBvbiBhIFBhZ2VSZXNlcnZlZCBwYWdlLgomIzQzOyMKJiM0MzsjICAgc2xhYiAgICAtIGEgc2xhYiBwYWdlIGZvdW5kIHZpYSAvcHJvYy9rcGFnZWZsYWdzIChLUEZfU0xBQikuCiYjNDM7IyAgICAgICAgICAgICBFeGVyY2lzZXMgbWVtb3J5X2ZhaWx1cmUoKSAtJmd0OyBnZXRfYW55X3BhZ2UoKSBvbiBhIG5vbgomIzQzOyMgICAgICAgICAgICAgUEdfcmVzZXJ2ZWQga2VybmVsLW93bmVkIHBhZ2UuICBUaGlzIHBhdGggaXMgd2hhdCBjYXRjaGVzCiYjNDM7IyAgICAgICAgICAgICByZWdyZXNzaW9ucyB3aGVyZSBnZXRfYW55X3BhZ2UoKSBjb2xsYXBzZXMga2VybmVsLW93bmVkCiYjNDM7IyAgICAgICAgICAgICBwYWdlcyBpbnRvIGEgdHJhbnNpZW50IC1FSU8gaW5zdGVhZCBvZiAtRU5PVFJFQ09WRVJBQkxFLgomIzQzOyMKJiM0MzsjICAgcGd0YWJsZSAtIGEgcGFnZS10YWJsZSBwYWdlIGZvdW5kIHZpYSAvcHJvYy9rcGFnZWZsYWdzIChLUEZfUEdUQUJMRSkuCiYjNDM7IyAgICAgICAgICAgICBTYW1lIHBhdGggYXMgc2xhYiwgZGlmZmVyZW50IHBhZ2UgdHlwZS4KJiM0MzsjCiYjNDM7IyBUaGlzIHRlc3QgaXMgREVTVFJVQ1RJVkU6IGEgc3VjY2Vzc2Z1bCBydW4gY3Jhc2hlcyB0aGUga2VybmVsLiAgSXQgaXMKJiM0MzsjIG1lYW50IHRvIGJlIGV4ZWN1dGVkIGluc2lkZSBhIGRpc3Bvc2FibGUgVk0gKGUuZy4gdmlydG1lLW5nKSB3aXRoIGEKJiM0MzsjIHNlcmlhbCBjb25zb2xlIGNhcHR1cmVkIGJ5IHRoZSBoYXJuZXNzLiAgSXQgaXMgc2tpcHBlZCB1bmxlc3MgdGhlCiYjNDM7IyBjYWxsZXIgb3B0cyBpbiB2aWEgUlVOX0RFU1RSVUNUSVZFPTEuCiYjNDM7IwomIzQzOyMgVGVzdCBwYXNzZXMgZXh0ZXJuYWxseTogdGhlIGtlcm5lbCBtdXN0IHBhbmljIHdpdGgKJiM0MzsjICAgJiMzNDtNZW1vcnkgZmFpbHVyZTogJmx0O3BmbiZndDs6IHVucmVjb3ZlcmFibGUgcGFnZSYjMzQ7CiYjNDM7IyBBIHJldHVybiBmcm9tIHRoZSBpbmplY3QgbWVhbnMgbm8gcGFuaWMgZmlyZWQ6IHRoYXQgaXMgYSBmYWlsdXJlLAomIzQzOyMgdW5sZXNzIHRoZSB0YXJnZXQgUEZOIHJhY2VkIHRvIGEgZGlmZmVyZW50IHBhZ2UgdHlwZSBiZWZvcmUgaW5qZWN0aW9uLAomIzQzOyMgaW4gd2hpY2ggY2FzZSB0aGUgcnVuIGlzIGluY29uY2x1c2l2ZSBhbmQgaXMgc2tpcHBlZC4KJiM0MzsjCiYjNDM7IyBBdXRob3I6IEJyZW5vIExlaXRhbyAmbHQ7bGVpdGFvQGRlYmlhbi5vcmcmZ3Q7CiYjNDM7CiYjNDM7c2V0IC11CiYjNDM7CiYjNDM7a3NmdF9za2lwPTQKJiM0MztzeXNjdGxfcGF0aD0vcHJvYy9zeXMvdm0vcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZQomIzQzO2luamVjdF9wYXRoPS9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2hhcmRfb2ZmbGluZV9wYWdlCiYjNDM7a3BhZ2VmbGFnc19wYXRoPS9wcm9jL2twYWdlZmxhZ3MKJiM0Mzt1bnBvaXNvbl9wYXRoPS9zeXMva2VybmVsL2RlYnVnL2h3cG9pc29uL3VucG9pc29uLXBmbgomIzQzOwomIzQzOyMgL3Byb2Mva3BhZ2VmbGFncyBiaXQgcG9zaXRpb25zIChzZWUgaW5jbHVkZS91YXBpL2xpbnV4L2tlcm5lbC1wYWdlLWZsYWdzLmgpCiYjNDM7S1BGX1NMQUI9NwomIzQzO0tQRl9DT01QT1VORF9UQUlMPTE2CiYjNDM7S1BGX0hXUE9JU09OPTE5CiYjNDM7S1BGX05PUEFHRT0yMAomIzQzO0tQRl9QR1RBQkxFPTI2CiYjNDM7S1BGX1JFU0VSVkVEPTMyCiYjNDM7CiYjNDM7cGFnZXNpemU9JChnZXRjb25mIFBBR0VfU0laRSkKJiM0MzsKJiM0MztraW5kPSR7MTotcm9kYXRhfQomIzQzOwomIzQzO2tzZnRfcHJpbnQoKSB7IGVjaG8gJiMzNDsjICQqJiMzNDs7IH0KJiM0Mztrc2Z0X2V4aXRfc2tpcCgpIHsga3NmdF9wcmludCAmIzM0OyQqJiMzNDs7IGV4aXQgJiMzNDska3NmdF9za2lwJiMzNDs7IH0KJiM0Mztrc2Z0X2V4aXRfZmFpbCgpIHsgZWNobyAmIzM0O25vdCBvayAxICQqJiMzNDs7IGV4aXQgMTsgfQomIzQzOwomIzQzO2lmIFsgJiMzNDskKGlkIC11KSYjMzQ7IC1uZSAwIF07IHRoZW4KJiM0MzsJa3NmdF9leGl0X3NraXAgJiMzNDttdXN0IHJ1biBhcyByb290JiMzNDsKJiM0MztmaQomIzQzOwomIzQzO2lmIFsgISAtdyAmIzM0OyRzeXNjdGxfcGF0aCYjMzQ7IF07IHRoZW4KJiM0MzsJa3NmdF9leGl0X3NraXAgJiMzNDskc3lzY3RsX3BhdGggbm90IHByZXNlbnQgKGtlcm5lbCB3aXRob3V0IHRoZSBzeXNjdGw/KSYjMzQ7CiYjNDM7ZmkKJiM0MzsKJiM0MztpZiBbICEgLXcgJiMzNDskaW5qZWN0X3BhdGgmIzM0OyBdOyB0aGVuCiYjNDM7CWtzZnRfZXhpdF9za2lwICYjMzQ7JGluamVjdF9wYXRoIG5vdCBwcmVzZW50IChubyBNRU1PUllfSE9UUExVRz8pJiMzNDsKJiM0MztmaQomIzQzOwomIzQzO2lmIFsgJiMzNDske1JVTl9ERVNUUlVDVElWRTotMH0mIzM0OyAhPSAmIzM0OzEmIzM0OyBdOyB0aGVuCiYjNDM7CWtzZnRfZXhpdF9za2lwICYjMzQ7ZGVzdHJ1Y3RpdmUgdGVzdDsgcmUtcnVuIHdpdGggUlVOX0RFU1RSVUNUSVZFPTEgaW5zaWRlIGEgZGlzcG9zYWJsZSBWTSYjMzQ7CiYjNDM7ZmkKJiM0MzsKJiM0MzsjIFBpY2sgYSBQRk4gaW5zaWRlIHRoZSBrZXJuZWwgaW1hZ2Ugcm9kYXRhIHJlZ2lvbiBvZiAvcHJvYy9pb21lbS4KJiM0MzsjIFRoaXMgaXMgcHJlZmVycmVkIG92ZXIgYSB0b3AtbGV2ZWwgJiMzNDtSZXNlcnZlZCYjMzQ7IGVudHJ5IGJlY2F1c2UgdG9wLWxldmVsCiYjNDM7IyBSZXNlcnZlZCByYW5nZXMgYXJlIG9mdGVuIGZpcm13YXJlIGhvbGVzIHRoYXQgaGF2ZSBubyBiYWNraW5nIHN0cnVjdAomIzQzOyMgcGFnZTsgcGZuX3RvX29ubGluZV9wYWdlKCkgcmV0dXJucyBOVUxMIG9uIHRob3NlIGFuZCBtZW1vcnlfZmFpbHVyZSgpCiYjNDM7IyBiYWlscyBvdXQgd2l0aCAtRU5YSU8gYmVmb3JlIHJlYWNoaW5nIHRoZSBwYW5pYyBwYXRoLgomIzQzOyMKJiM0MzsjICYjMzQ7S2VybmVsIHJvZGF0YSYjMzQ7IGlzIHJlcG9ydGVkIGFzIGEgc3ViLXJlc291cmNlIG9mICYjMzQ7U3lzdGVtIFJBTSYjMzQ7IG9uIGV2ZXJ5CiYjNDM7IyBtYWpvciBhcmNoaXRlY3R1cmUsIHdoaWNoIGd1YXJhbnRlZXM6CiYjNDM7IyAgIC0gdGhlIFBGTiBpcyBiYWNrZWQgYnkgc3RydWN0IHBhZ2UgKHdpdGhpbiBhbiBvbmxpbmUgbWVtb3J5IHJhbmdlKTsKJiM0MzsjICAgLSBQR19yZXNlcnZlZCBpcyBzZXQgb24gdGhlIHBhZ2UgKGtlcm5lbCBpbWFnZSBhcmVhKTsKJiM0MzsjICAgLSB0aGUgbWVtb3J5IGlzIHJlYWQtb25seSwgc28gc2V0dGluZyBQR19od3BvaXNvbiBvbiBpdCBkb2VzIG5vdAomIzQzOyMgICAgIGNvcnJ1cHQgd3JpdGFibGUga2VybmVsIHN0YXRlIGlmIHRoZSBwYW5pYyBzb21laG93IGRvZXMgbm90IGZpcmUuCiYjNDM7IwomIzQzOyMgL3Byb2MvaW9tZW0gZW50cmllcyBsb29rIGxpa2UgKGluZGVudGVkIGZvciBzdWItcmVzb3VyY2VzKToKJiM0MzsjICAgICAmIzM0OyAgMDI1MDAwMDAtMDJmZmZmZmYgOiBLZXJuZWwgcm9kYXRhJiMzNDsKJiM0MztwaWNrX3JvZGF0YV9waHlzX2FkZHIoKSB7CiYjNDM7CWF3ayAtdiBwYWdlc2l6ZT0mIzM0OyQoZ2V0Y29uZiBQQUdFX1NJWkUpJiMzNDsgJiMzOTsKJiM0MzsJIyBDb252ZXJ0IGEgaGV4IHN0cmluZyB0byBhIG51bWJlciB3aXRob3V0IHJlbHlpbmcgb24gdGhlIGdhd2stb25seQomIzQzOwkjIHN0cnRvbnVtKCkuICBtYXdrIGxhY2tzIGl0IGFuZCB3b3VsZCBvdGhlcndpc2Ugc3B1cmlvdXNseSBza2lwCiYjNDM7CSMgdGhpcyB0ZXN0IG9uIGRpc3Ryb3MgdGhhdCBzaGlwIG1hd2sgYXMgL3Vzci9iaW4vYXdrLgomIzQzOwlmdW5jdGlvbiBoZXgybnVtKHMsICAgbiwgaSwgYywgdikgewomIzQzOwkJbiA9IDAKJiM0MzsJCWZvciAoaSA9IDE7IGkgJmx0Oz0gbGVuZ3RoKHMpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCWMgPSB0b2xvd2VyKHN1YnN0cihzLCBpLCAxKSkKJiM0MzsJCQl2ID0gaW5kZXgoJiMzNDswMTIzNDU2Nzg5YWJjZGVmJiMzNDssIGMpIC0gMQomIzQzOwkJCWlmICh2ICZsdDsgMCkKJiM0MzsJCQkJcmV0dXJuIC0xCiYjNDM7CQkJbiA9IG4gKiAxNiAmIzQzOyB2CiYjNDM7CQl9CiYjNDM7CQlyZXR1cm4gbgomIzQzOwl9CiYjNDM7CS86IEtlcm5lbCByb2RhdGFbWzpzcGFjZTpdXSokLyB7CiYjNDM7CQlzdWIoL15bWzpzcGFjZTpdXSYjNDM7LywgJiMzNDsmIzM0OykKJiM0MzsJCW4gPSBzcGxpdCgkMCwgYSwgL1stIF0vKQomIzQzOwkJc3RhcnQgPSBoZXgybnVtKGFbMV0pCiYjNDM7CQllbmQgICA9IGhleDJudW0oYVsyXSkKJiM0MzsJCWlmIChlbmQgJmx0Oz0gc3RhcnQpCiYjNDM7CQkJbmV4dAomIzQzOwkJIyBQYWdlLWFsaWduIHVwd2FyZCBhbmQgZW1pdCB0aGUgZmlyc3QgYnl0ZSBvZiB0aGF0IHBhZ2UuCiYjNDM7CQlwZm4gPSBpbnQoKHN0YXJ0ICYjNDM7IHBhZ2VzaXplIC0gMSkgLyBwYWdlc2l6ZSkKJiM0MzsJCXByaW50ZiAmIzM0OzB4JXhcbiYjMzQ7LCBwZm4gKiBwYWdlc2l6ZQomIzQzOwkJZXhpdCAwCiYjNDM7CX0KJiM0MzsJJiMzOTsgL3Byb2MvaW9tZW0KJiM0Mzt9CiYjNDM7CiYjNDM7IyBXYWxrIC9wcm9jL2twYWdlZmxhZ3MgYW5kIHJldHVybiB0aGUgcGh5cyBhZGRyIG9mIHRoZSBmaXJzdCBQRk4gdGhhdAomIzQzOyMgaGFzIGJpdCAkMSBzZXQsIHdpdGggS1BGX0hXUE9JU09OLCBLUEZfTk9QQUdFIGFuZCBLUEZfQ09NUE9VTkRfVEFJTAomIzQzOyMgYWxsIGNsZWFyIChzbyB3ZSBhdHRhY2sgYSByZWFsLCBub24tdGFpbCwgbm90LWFscmVhZHktcG9pc29uZWQgcGFnZSkuCiYjNDM7IwomIzQzOyMgV2Ugc2tpcCB0aGUgZmlyc3QgMTYgTWlCIG9mIFBGTnMgdG8gc3RlcCBwYXN0IGxvdy1tZW1vcnkgc3BlY2lhbAomIzQzOyMgcmFuZ2VzIChCSU9TL0VGSS9BQ1BJL2V0Yy4pIHRoYXQgb2Z0ZW4gYXJlIFBHX3Jlc2VydmVkIGFuZCB3b3VsZCBub3QKJiM0MzsjIGV4aGliaXQgdGhlIHNsYWIvcGd0YWJsZSB0eXBlIHdlIGFyZSBsb29raW5nIGZvci4KJiM0MztwaWNrX2twYWdlZmxhZ3NfcGh5c19hZGRyKCkgewomIzQzOwlsb2NhbCB3YW50X2JpdD0kMQomIzQzOwlsb2NhbCBwYWdlc2l6ZSBza2lwX3BmbgomIzQzOwomIzQzOwlbIC1yICYjMzQ7JGtwYWdlZmxhZ3NfcGF0aCYjMzQ7IF0gfHwgcmV0dXJuCiYjNDM7CiYjNDM7CXBhZ2VzaXplPSQoZ2V0Y29uZiBQQUdFX1NJWkUpCiYjNDM7CXNraXBfcGZuPSQoKCgxNiAqIDEwMjQgKiAxMDI0KSAvIHBhZ2VzaXplKSkKJiM0MzsKJiM0MzsJb2QgLUFuIC10eDggLXYgLXc4IC1qICYjMzQ7JCgoc2tpcF9wZm4gKiA4KSkmIzM0OyAmIzM0OyRrcGFnZWZsYWdzX3BhdGgmIzM0OyAyJmd0Oy9kZXYvbnVsbCB8IFwKJiM0MzsJYXdrIC12IHdhbnRfYml0PSYjMzQ7JHdhbnRfYml0JiMzNDsgXAomIzQzOwkgICAgLXYgaHdwX2JpdD0mIzM0OyRLUEZfSFdQT0lTT04mIzM0OyBcCiYjNDM7CSAgICAtdiBub3BhZ2VfYml0PSYjMzQ7JEtQRl9OT1BBR0UmIzM0OyBcCiYjNDM7CSAgICAtdiB0YWlsX2JpdD0mIzM0OyRLUEZfQ09NUE9VTkRfVEFJTCYjMzQ7IFwKJiM0MzsJICAgIC12IGJhc2VfcGZuPSYjMzQ7JHNraXBfcGZuJiMzNDsgXAomIzQzOwkgICAgLXYgcGFnZXNpemU9JiMzNDskcGFnZXNpemUmIzM0OyAmIzM5OwomIzQzOwkjIFRlc3Qgd2hldGhlciBiaXQgJiMzNDtiJiMzNDsgaXMgc2V0IGluIHRoZSAxNi1oZXgtZGlnaXQgdmFsdWUgJiMzNDtoZXgmIzM0Oy4KJiM0MzsJIyBEb25lIHdpdGggc3Vic3RyaW5nICYjNDM7IHBlci1kaWdpdCBsb29rdXAgc28gd2UgbmV2ZXIgcmVseSBvbiBhd2sKJiM0MzsJIyBiaXR3aXNlIG9wZXJhdG9ycyAobWF3ayBsYWNrcyB0aGVtKSwgNjQtYml0IEZQIHByZWNpc2lvbiBvciB0aGUKJiM0MzsJIyBnYXdrLW9ubHkgc3RydG9udW0oKS4KJiM0MzsJZnVuY3Rpb24gYml0X3NldChoZXgsIGIsICAgIGRpLCBiaSwgYywgdikgewomIzQzOwkJZGkgPSBpbnQoYiAvIDQpCiYjNDM7CQliaSA9IGIgLSBkaSAqIDQKJiM0MzsJCWMgPSBzdWJzdHIoaGV4LCBsZW5ndGgoaGV4KSAtIGRpLCAxKQomIzQzOwkJdiA9IGluZGV4KCYjMzQ7MDEyMzQ1Njc4OWFiY2RlZiYjMzQ7LCB0b2xvd2VyKGMpKSAtIDEKJiM0MzsJCWlmIChiaSA9PSAwKSByZXR1cm4gKHYgJSAyKSA9PSAxCiYjNDM7CQlpZiAoYmkgPT0gMSkgcmV0dXJuIGludCh2IC8gMikgJSAyID09IDEKJiM0MzsJCWlmIChiaSA9PSAyKSByZXR1cm4gaW50KHYgLyA0KSAlIDIgPT0gMQomIzQzOwkJcmV0dXJuIGludCh2IC8gOCkgJSAyID09IDEKJiM0MzsJfQomIzQzOwl7CiYjNDM7CQlnc3ViKC9eW1s6c3BhY2U6XV0mIzQzOy8sICYjMzQ7JiMzNDspCiYjNDM7CQloID0gJDEKJiM0MzsJCWlmIChiaXRfc2V0KGgsIHdhbnRfYml0KSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIWJpdF9zZXQoaCwgaHdwX2JpdCkgJmFtcDsmYW1wOwomIzQzOwkJICAgICFiaXRfc2V0KGgsIG5vcGFnZV9iaXQpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhYml0X3NldChoLCB0YWlsX2JpdCkpIHsKJiM0MzsJCQlwZm4gPSBiYXNlX3BmbiAmIzQzOyBOUiAtIDEKJiM0MzsJCQlwcmludGYgJiMzNDsweCV4XG4mIzM0OywgcGZuICogcGFnZXNpemUKJiM0MzsJCQlleGl0IDAKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwkmIzM5OwomIzQzO30KJiM0MzsKJiM0MzsjIFJldHVybiAwIGlmIC9wcm9jL2twYWdlZmxhZ3MgYml0ICQyIGlzIHNldCBmb3IgUEZOICQxLCAxIGlmIGl0IGlzCiYjNDM7IyBjbGVhciwgb3IgMiBpZiB0aGUgd29yZCBjYW5ub3QgYmUgcmVhZC4gIFVzZWQgdG8gcmUtY29uZmlybSB0aGUgdGFyZ2V0CiYjNDM7IyBwYWdlIHR5cGUgYWZ0ZXIgYSBub24tcGFuaWNraW5nIGluamVjdC4KJiM0MztrcGFnZWZsYWdzX2JpdF9zZXQoKSB7CiYjNDM7CWxvY2FsIHdvcmQKJiM0MzsKJiM0MzsJd29yZD0kKG9kIC1BbiAtdHg4IC12IC1qICYjMzQ7JCgoJDEgKiA4KSkmIzM0OyAtTiA4ICYjMzQ7JGtwYWdlZmxhZ3NfcGF0aCYjMzQ7IDImZ3Q7L2Rldi9udWxsIHwgdHIgLWQgJiMzOTtbOnNwYWNlOl0mIzM5OykKJiM0MzsJWyAtbiAmIzM0OyR3b3JkJiMzNDsgXSB8fCByZXR1cm4gMgomIzQzOwkoKCAoMTYjJHdvcmQgJmd0OyZndDsgJDIpICZhbXA7IDEgKSkKJiM0Mzt9CiYjNDM7CiYjNDM7IyBCZXN0LWVmZm9ydDogZHJvcCB0aGUgUEdfaHdwb2lzb24gbWFya2VyIHNldCBieSB0aGUgaW5qZWN0IHNvIGEgZmFpbGVkCiYjNDM7IyBydW4gZG9lcyBub3QgbGVhdmUgYSBwb2lzb25lZCBwYWdlIGJlaGluZC4gIGhhcmRfb2ZmbGluZV9wYWdlKCkgaW5qZWN0cwomIzQzOyMgd2l0aCBNRl9TV19TSU1VTEFURUQsIHNvIHRoZSBwYWdlIHN0YXlzIHVucG9pc29uYWJsZSB0aHJvdWdoIHRoZQomIzQzOyMgaHdwb2lzb24gZGVidWdmcyBpbnRlcmZhY2UgKG5lZWRzIENPTkZJR19IV1BPSVNPTl9JTkpFQ1QgJiM0MzsgZGVidWdmcykuCiYjNDM7dHJ5X3VucG9pc29uKCkgewomIzQzOwlbIC13ICYjMzQ7JHVucG9pc29uX3BhdGgmIzM0OyBdIHx8IHJldHVybiAwCiYjNDM7CWVjaG8gJiMzNDskMSYjMzQ7ICZndDsgJiMzNDskdW5wb2lzb25fcGF0aCYjMzQ7IDImZ3Q7L2Rldi9udWxsIHx8IHRydWUKJiM0Mzt9CiYjNDM7CiYjNDM7Y2FzZSAmIzM0OyRraW5kJiMzNDsgaW4KJiM0Mztyb2RhdGEpCiYjNDM7CXBoeXNfYWRkcj0kKHBpY2tfcm9kYXRhX3BoeXNfYWRkcikKJiM0MzsJcmVjaGVja19iaXQ9JEtQRl9SRVNFUlZFRAomIzQzOwltaXNzaW5nX21zZz0mIzM5O25vICYjMzQ7S2VybmVsIHJvZGF0YSYjMzQ7IGVudHJ5IGluIC9wcm9jL2lvbWVtJiMzOTsKJiM0MzsJOzsKJiM0MztzbGFiKQomIzQzOwlwaHlzX2FkZHI9JChwaWNrX2twYWdlZmxhZ3NfcGh5c19hZGRyICYjMzQ7JEtQRl9TTEFCJiMzNDspCiYjNDM7CXJlY2hlY2tfYml0PSRLUEZfU0xBQgomIzQzOwltaXNzaW5nX21zZz0mIzM0O25vIHVzYWJsZSBzbGFiIFBGTiBmb3VuZCBpbiAka3BhZ2VmbGFnc19wYXRoJiMzNDsKJiM0MzsJOzsKJiM0MztwZ3RhYmxlKQomIzQzOwlwaHlzX2FkZHI9JChwaWNrX2twYWdlZmxhZ3NfcGh5c19hZGRyICYjMzQ7JEtQRl9QR1RBQkxFJiMzNDspCiYjNDM7CXJlY2hlY2tfYml0PSRLUEZfUEdUQUJMRQomIzQzOwltaXNzaW5nX21zZz0mIzM0O25vIHVzYWJsZSBwYWdlLXRhYmxlIFBGTiBmb3VuZCBpbiAka3BhZ2VmbGFnc19wYXRoJiMzNDsKJiM0MzsJOzsKJiM0MzsqKQomIzQzOwlrc2Z0X2V4aXRfZmFpbCAmIzM0O3Vua25vd24ga2luZCAmIzM5OyRraW5kJiMzOTsgKGV4cGVjdGVkOiByb2RhdGF8c2xhYnxwZ3RhYmxlKSYjMzQ7CiYjNDM7CTs7CiYjNDM7ZXNhYwomIzQzOwomIzQzO2lmIFsgLXogJiMzNDskcGh5c19hZGRyJiMzNDsgXTsgdGhlbgomIzQzOwlrc2Z0X2V4aXRfc2tpcCAmIzM0OyRtaXNzaW5nX21zZyYjMzQ7CiYjNDM7ZmkKJiM0MzsKJiM0Mztrc2Z0X3ByaW50ICYjMzQ7ZW5hYmxpbmcgJHN5c2N0bF9wYXRoJiMzNDsKJiM0Mztwcmlvcj0kKGNhdCAmIzM0OyRzeXNjdGxfcGF0aCYjMzQ7KQomIzQzO2VjaG8gMSAmZ3Q7ICYjMzQ7JHN5c2N0bF9wYXRoJiMzNDsgfHwga3NmdF9leGl0X2ZhaWwgJiMzNDtmYWlsZWQgdG8gZW5hYmxlIHN5c2N0bCYjMzQ7CiYjNDM7CiYjNDM7cGZuPSQoKHBoeXNfYWRkciAvIHBhZ2VzaXplKSkKJiM0Mztrc2Z0X3ByaW50ICYjMzQ7aW5qZWN0aW5nIGh3cG9pc29uIGF0IHBoeXMgMHgkKHByaW50ZiAmIzM5OyV4JiMzOTsgJiMzNDskcGh5c19hZGRyJiMzNDspIChwZm4gMHgkKHByaW50ZiAmIzM5OyV4JiMzOTsgJiMzNDskcGZuJiMzNDspLCBraW5kPSRraW5kKSYjMzQ7CiYjNDM7a3NmdF9wcmludCAmIzM0O2V4cGVjdGluZyBrZXJuZWwgcGFuaWM6ICYjMzk7TWVtb3J5IGZhaWx1cmU6ICZsdDtwZm4mZ3Q7OiB1bnJlY292ZXJhYmxlIHBhZ2UmIzM5OyYjMzQ7CiYjNDM7CiYjNDM7IyBBIHN1Y2Nlc3NmdWwgcnVuIG5ldmVyIHJldHVybnMgZnJvbSB0aGUgaW5qZWN0IC0tIGl0IHBhbmljcyB0aGUga2VybmVsLgomIzQzOyMgUmVhY2hpbmcgdGhlIGNvZGUgYmVsb3cgdGhlcmVmb3JlIG1lYW5zIG5vIHBhbmljIGZpcmVkLiAgTm90ZSB3aGV0aGVyCiYjNDM7IyB0aGUgd3JpdGUgaXRzZWxmIHN1Y2NlZWRlZCwgdGhlbiBwdXQgdGhlIG1hY2hpbmUgYmFjazogcmVzdG9yZSB0aGUKJiM0MzsjIHN5c2N0bCBhbmQgYmVzdC1lZmZvcnQgdW5wb2lzb24gdGhlIHBhZ2Ugd2UganVzdCBtYXJrZWQuCiYjNDM7aWYgZWNobyAmIzM0OyRwaHlzX2FkZHImIzM0OyAmZ3Q7ICYjMzQ7JGluamVjdF9wYXRoJiMzNDs7IHRoZW4KJiM0MzsJdmVyZGljdD0mIzM0O2luamVjdCByZXR1cm5lZCB3aXRob3V0IHBhbmljOyBzeXNjdGwgaW5lZmZlY3RpdmUmIzM0OwomIzQzO2Vsc2UKJiM0MzsJdmVyZGljdD0mIzM0O2luamVjdCBmYWlsZWQgYmVmb3JlIHJlYWNoaW5nIHRoZSBwYW5pYyBwYXRoJiMzNDsKJiM0MztmaQomIzQzOwomIzQzO2VjaG8gJiMzNDskcHJpb3ImIzM0OyAmZ3Q7ICYjMzQ7JHN5c2N0bF9wYXRoJiMzNDsKJiM0Mzt0cnlfdW5wb2lzb24gJiMzNDskcGZuJiMzNDsKJiM0MzsKJiM0MzsjIFRoZSBwYWdlIHR5cGUgY2FuIGNoYW5nZSBiZXR3ZWVuIHNlbGVjdGlvbiBhbmQgaW5qZWN0aW9uIChlLmcuIGEgc2xhYgomIzQzOyMgb3IgcGFnZS10YWJsZSBwYWdlIGlzIGZyZWVkIGFuZCByZXVzZWQpLiAgT25seSB0cmVhdCBhIG1pc3NpbmcgcGFuaWMgYXMKJiM0MzsjIGEgZmFpbHVyZSBpZiB0aGUgdGFyZ2V0IFBGTiBpcyBzdGlsbCB0aGUga2VybmVsLW93bmVkIHR5cGUgd2UgYWltZWQgYXQ7CiYjNDM7IyBpZiBpdCByYWNlZCB0byBhbm90aGVyIHR5cGUgdGhlIHJ1biBpcyBpbmNvbmNsdXNpdmUsIHNvIHNraXAgaW5zdGVhZC4KJiM0MztrcGFnZWZsYWdzX2JpdF9zZXQgJiMzNDskcGZuJiMzNDsgJiMzNDskcmVjaGVja19iaXQmIzM0OwomIzQzO2Nhc2UgJD8gaW4KJiM0MzswKQlrc2Z0X2V4aXRfZmFpbCAmIzM0OyR2ZXJkaWN0IChwYWdlIHN0aWxsICRraW5kKSYjMzQ7IDs7CiYjNDM7MSkJa3NmdF9leGl0X3NraXAgJiMzNDt0YXJnZXQgUEZOIG5vIGxvbmdlciAka2luZDsgcmFjZWQgYmVmb3JlIGluamVjdCwgaW5jb25jbHVzaXZlJiMzNDsgOzsKJiM0MzsqKQlrc2Z0X2V4aXRfZmFpbCAmIzM0OyR2ZXJkaWN0IChjb3VsZCBub3QgcmVjb25maXJtIHBhZ2UgdHlwZSB2aWEgJGtwYWdlZmxhZ3NfcGF0aCkmIzM0OyA7OwomIzQzO2VzYWMKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjM6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg5OAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDUyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlICYjMzQ7UGFuaWMgb24gVW5yZWNvdmVyYWJsZSBNZW1vcnkgRmFpbHVyZSYjMzQ7IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBhIG5ldyBzeXNjdGwsIGBwYW5pY19vbl91bnJlY292ZXJhYmxlX21lbW9yeV9mYWlsdXJlYC4gVGhlIGdvYWwgaXMgdG8gbWFrZSB0aGUga2VybmVsIHBhbmljIHdoZW4gYSBtZW1vcnkgZmFpbHVyZSBvY2N1cnMgb24ga2VybmVsLW93bmVkIHBhZ2VzIHRoYXQgdGhlIHJlZ3VsYXIgZXJyb3IgaGFuZGxlciBjYW4mIzM5O3QgZml4LiBUaGUgY29kZSBtb2RpZmllcyBgbW0vbWVtb3J5LWZhaWx1cmUuY2AgYW5kIGFkZHMgYSBzZWxmLXRlc3QsIHdoaWNoIGlzIGdvb2QuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGluIHRoaXMgbmV3IGBpc19rZXJuZWxfb3duZWRfcGFnZSgpYCBmdW5jdGlvbi4gVGhpcyBpcyBrZXksIGFzIGl0IGlkZW50aWZpZXMgaWYgdGhlIHBhZ2UgaXMgdHJ1bHkga2VybmVsLXNwYWNlLCBsb29raW5nIGZvciBgUGFnZVJlc2VydmVkYCwgYFBhZ2VTbGFiYCwgYFBhZ2VUYWJsZWAsIG9yIGBQYWdlTGFyZ2VLbWFsbG9jYC4gSWYgaXQgaXMgaW5kZWVkIGEga2VybmVsIHBhZ2UsIHRoZW4gYGdldF9hbnlfcGFnZSgpYCByZXR1cm5zIGAtRU5PVFJFQ09WRVJBQkxFYC4gVGhlIGV4aXN0aW5nIGBtZW1vcnlfZmFpbHVyZSgpYCBmdW5jdGlvbiB0aGVuIHByb2Nlc3NlcyB0aGlzIGVycm9yIGNvZGUgYW5kIGNhbGxzIGBhY3Rpb25fcmVzdWx0KClgLiBJdCYjMzk7cyBgYWN0aW9uX3Jlc3VsdCgpYCB0aGF0IGhhcyBiZWVuIHVwZGF0ZWQgdG8gY2hlY2sgdGhpcyBuZXcgYHBhbmljX29uX3VucmVjb3ZlcmFibGVfbWZgIGZ1bmN0aW9uLCBhbmQgaWYgaXQgcmV0dXJucyB0cnVlLCB0aGVuIHBhbmljLgoKVGhpcyBkaXJlY3RseSB0b3VjaGVzIGNvcmUgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcsIHNvIHJlYWNoYWJpbGl0eSBpcyBjcml0aWNhbC4gSSYjMzk7bSB0aGlua2luZyB0aGlzIGNvdWxkIGJlIHRyaWdnZXJlZCBieSBnZW51aW5lIGhhcmR3YXJlIG1lbW9yeSBlcnJvcnMsIG9mIGNvdXJzZSwgb3IgZXZlbiBieSBpbmplY3RpbmcgZmF1bHRzIHZpYSBzb2Z0d2FyZS4gYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIGltbWVkaWF0ZWx5IGNvbWVzIHRvIG1pbmQsIGJ1dCB0aGF0IHVzdWFsbHkgb3BlcmF0ZXMgb24gdXNlci1zcGFjZSBwYWdlcy4gSG93ZXZlciwgbWF5YmUgYC9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2hhcmRfb2ZmbGluZV9wYWdlYCBvciBzb21ldGhpbmcgaW4gZGVidWdmcyBjb3VsZCBiZSB1c2VkIHRvIGluamVjdCBpdCBvbnRvIGtlcm5lbCBwYWdlcy4gVGhlIHNlbGYtdGVzdCwgaW4gZmFjdCwgZG9lcyB1c2UgdGhhdCBgL3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvaGFyZF9vZmZsaW5lX3BhZ2VgIG1ldGhvZCwgd2hpY2ggaXMgYSBnb29kIHNpZ24uCgpUaGUgcXVlc3Rpb24gdGhlbiBpcywgaG93IGRvIHdlIGZ1enogdGhpcz8gU3l6a2FsbGVyIHNlZW1zIGxpa2UgdGhlIG9idmlvdXMgY2hvaWNlLiBJdCBoYXMgYHN5el9pbmplY3RfaHdwb2lzb25gIG9yIHNvbWV0aGluZyBzaW1pbGFyIHRoYXQgY291bGQgdGFyZ2V0IHRoaXMsIGFuZCBpdCAqY2FuKiB3cml0ZSB0byBgL3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvaGFyZF9vZmZsaW5lX3BhZ2VgLiBIb3dldmVyLCBJIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBTeXprYWxsZXIgZG9lc24mIzM5O3QgdHlwaWNhbGx5IGZvY3VzIG9uIGhhcmR3YXJlIGVycm9yIGluamVjdGlvbiB1bmxlc3Mgc3BlY2lmaWNhbGx5IGNvbmZpZ3VyZWQuIEJ1dCBpdCBkb2VzIGhhdmUgc29tZSBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAgc3VwcG9ydC4gVGhpcyBpcyBnb29kIHRvIGtlZXAgaW4gbWluZC4KCldhaXQsIEkganVzdCByZW1lbWJlcmVkIHRoZSBkZWZhdWx0OiB0aGUgc3lzY3RsIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQhIGBzeXNjdGxfcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZmAgZGVmYXVsdHMgdG8gemVybywgc28gdG8gZWZmZWN0aXZlbHkgZnV6eiB0aGlzLCB3ZSYjMzk7bGwgKmhhdmUqIHRvIGVuYWJsZSB0aGF0IHN5c2N0bCBmaXJzdC4gTHVja2lseSwgU3l6a2FsbGVyICpjYW4qIHdyaXRlIHRvIGAvcHJvYy9zeXMvdm0vcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZWAuCgpJIHNob3VsZCBwcm9iYWJseSBkaXZlIGludG8gYG1tL21lbW9yeS1mYWlsdXJlLmNgIGNvZGUgZGlyZWN0bHkgbm93LiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgZ3JlcHBlcmAgdG8gc2VlIGlmIHRoZSBgTUVNT1JZX0ZBSUxVUkVgIGNvbmZpZyBvcHRpb24gaXMgaW52b2x2ZWQgaW4gYW55IG9mIHRoaXMgYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTcwMj1jb25maWcgREVGQVVMVF9NTUFQX01JTl9BRERSXG4tLVxubW0vS2NvbmZpZy03MjAtXG5tbS9LY29uZmlnOjcyMTpjb25maWcgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxubW0vS2NvbmZpZy03MjItXHRib29sXG5tbS9LY29uZmlnLTcyMy1cbm1tL0tjb25maWc6NzI0OmNvbmZpZyBNRU1PUllfRkFJTFVSRVxubW0vS2NvbmZpZy03MjUtXHRkZXBlbmRzIG9uIE1NVVxubW0vS2NvbmZpZzo3MjY6XHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcbm1tL0tjb25maWctNzI3LVx0Ym9vbCBcJiMzNDtFbmFibGUgcmVjb3ZlcnkgZnJvbSBoYXJkd2FyZSBtZW1vcnkgZXJyb3JzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz03MzU9Y29uZmlnIEhXUE9JU09OX0lOSkVDVFxubW0vS2NvbmZpZy03MzYtXHR0cmlzdGF0ZSBcJiMzNDtIV1BvaXNvbiBwYWdlcyBpbmplY3RvclwmIzM0O1xubW0vS2NvbmZpZzo3Mzc6XHRkZXBlbmRzIG9uIE1FTU9SWV9GQUlMVVJFIFx1MDAyNlx1MDAyNiBERUJVR19LRVJORUwgXHUwMDI2XHUwMDI2IFBST0NfRlNcbm1tL0tjb25maWctNzM4LVx0c2VsZWN0IFBST0NfUEFHRV9NT05JVE9SXG4tLVxubW0vS2NvbmZpZy5kZWJ1Zz0xNDc9Y29uZmlnIFBBR0VfUE9JU09OSU5HXG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy0xNTYtXHQgIE5vdGUgdGhhdCBcJiMzNDtwb2lzb25cJiMzNDsgaGVyZSBpcyBub3QgdGhlIHNhbWUgdGhpbmcgYXMgdGhlIFwmIzM0O0hXUG9pc29uXCYjMzQ7XG5tbS9LY29uZmlnLmRlYnVnOjE1NzpcdCAgZm9yIENPTkZJR19NRU1PUllfRkFJTFVSRS4gVGhpcyBpcyBzb2Z0d2FyZSBwb2lzb25pbmcgb25seS5cbm1tL0tjb25maWcuZGVidWctMTU4LVxuLS1cbm1tL01ha2VmaWxlPTExMT1vYmotJChDT05GSUdfRE1BUE9PTF9URVNUKSAmIzQzOz0gZG1hcG9vbF90ZXN0Lm9cbm1tL01ha2VmaWxlOjExMjpvYmotJChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpICYjNDM7PSBtZW1vcnktZmFpbHVyZS5vXG5tbS9NYWtlZmlsZS0xMTMtb2JqLSQoQ09ORklHX0hXUE9JU09OX0lOSkVDVCkgJiM0Mzs9IGh3cG9pc29uLWluamVjdC5vXG4tLVxubW0vaW50ZXJuYWwuaD0xNDAwPXN0YXRpYyBpbmxpbmUgYm9vbCBub2RlX3JlY2xhaW1fZW5hYmxlZCh2b2lkKVxuLS1cbm1tL2ludGVybmFsLmgtMTQwOC0gKi9cbm1tL2ludGVybmFsLmg6MTQwOTojaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXG5tbS9pbnRlcm5hbC5oLTE0MTAtaW50IHVubWFwX3BvaXNvbmVkX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGxvbmcgcGZuLCBib29sIG11c3Rfa2lsbCk7XG4tLVxubW0va3NtLmM9MzE1NT12b2lkIHJtYXBfd2Fsa19rc20oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHJtYXBfd2Fsa19jb250cm9sICpyd2MpXG4tLVxubW0va3NtLmMtMzIyMy1cbm1tL2tzbS5jOjMyMjQ6I2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxubW0va3NtLmMtMzIyNS0vKlxuLS1cbm1tL21hZHZpc2UuYz0xMzM5PXN0YXRpYyBpbnQgbWFkdmlzZV92bWFfYmVoYXZpb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTE0NDMtXG5tbS9tYWR2aXNlLmM6MTQ0NDojaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXG5tbS9tYWR2aXNlLmMtMTQ0NS0vKlxuLS1cbm1tL21hZHZpc2UuYz0xNTExPXN0YXRpYyBib29sIGlzX21lbW9yeV9mYWlsdXJlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNTE1LVxubW0vbWFkdmlzZS5jOjE1MTY6I2VuZGlmXHQvKiBDT05GSUdfTUVNT1JZX0ZBSUxVUkUgKi9cbm1tL21hZHZpc2UuYy0xNTE3LVxuLS1cbm1tL21hZHZpc2UuYz0xNTE5PW1hZHZpc2VfYmVoYXZpb3JfdmFsaWQoaW50IGJlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNTUwLVx0Y2FzZSBNQURWX0dVQVJEX1JFTU9WRTpcbm1tL21hZHZpc2UuYzoxNTUxOiNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVcbm1tL21hZHZpc2UuYy0xNTUyLVx0Y2FzZSBNQURWX1NPRlRfT0ZGTElORTpcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTI2MTg9RVhQT1JUX1NZTUJPTF9HUEwobWVtb3J5X2ZhaWx1cmUpO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjE5LVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjIwOiNkZWZpbmUgTUVNT1JZX0ZBSUxVUkVfRklGT19PUkRFUlx0NFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjIxOiNkZWZpbmUgTUVNT1JZX0ZBSUxVUkVfRklGT19TSVpFXHQoMSBcdTAwM2NcdTAwM2MgTUVNT1JZX0ZBSUxVUkVfRklGT19PUkRFUilcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjYyMi1cbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTI2Mjg9c3RydWN0IG1lbW9yeV9mYWlsdXJlX2NwdSB7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2MjktXHRERUNMQVJFX0tGSUZPKGZpZm8sIHN0cnVjdCBtZW1vcnlfZmFpbHVyZV9lbnRyeSxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjYzMDpcdFx0ICAgICAgTUVNT1JZX0ZBSUxVUkVfRklGT19TSVpFKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjYzMS1cdHJhd19zcGlubG9ja190IGxvY2s7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yODQ4PXN0YXRpYyBpbnQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjg1OS1cdFx0LmdmcF9tYXNrID0gR0ZQX1VTRVIgfCBfX0dGUF9NT1ZBQkxFIHwgX19HRlBfUkVUUllfTUFZRkFJTCxcbm1tL21lbW9yeS1mYWlsdXJlLmM6Mjg2MDpcdFx0LnJlYXNvbiA9IE1SX01FTU9SWV9GQUlMVVJFLFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yODYxLVx0fTtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI5MTctXHRcdHJldCA9IG1pZ3JhdGVfcGFnZXMoXHUwMDI2cGFnZWxpc3QsIGFsbG9jX21pZ3JhdGlvbl90YXJnZXQsIE5VTEwsXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI5MTg6XHRcdFx0KHVuc2lnbmVkIGxvbmcpXHUwMDI2bXRjLCBNSUdSQVRFX1NZTkMsIE1SX01FTU9SWV9GQUlMVVJFLCBOVUxMKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjkxOS1cdFx0aWYgKCFyZXQpIHtcbi0tXG5tbS9taWdyYXRlLmM9MTE5MD1zdGF0aWMgdm9pZCBtaWdyYXRlX2ZvbGlvX2RvbmUoc3RydWN0IGZvbGlvICpzcmMsXG4tLVxubW0vbWlncmF0ZS5jLTExOTYtXG5tbS9taWdyYXRlLmM6MTE5NzpcdGlmIChyZWFzb24gIT0gTVJfTUVNT1JZX0ZBSUxVUkUpXG5tbS9taWdyYXRlLmMtMTE5OC1cdFx0LyogV2UgcmVsZWFzZSB0aGUgcGFnZSBpbiBwYWdlX2hhbmRsZV9wb2lzb24uICovXG4tLVxubW0vcGFnZV9hbGxvYy5jPTc2MDk9RVhQT1JUX1NZTUJPTChpc19mcmVlX2J1ZGR5X3BhZ2UpO1xubW0vcGFnZV9hbGxvYy5jLTc2MTAtXG5tbS9wYWdlX2FsbG9jLmM6NzYxMTojaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXG5tbS9wYWdlX2FsbG9jLmMtNzYxMi1zdGF0aWMgaW5saW5lIHZvaWQgYWRkX3RvX2ZyZWVfbGlzdChzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHpvbmUgKnpvbmUsXG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmM9MTgwPWJvb2wgcGFnZV92bWFfbWFwcGVkX3dhbGsoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTMzNC1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjMzNTojaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0zMzYtLyoqXG4tLVxubW0vc2hvd19tZW0uYz00MDU9dm9pZCBfX3Nob3dfbWVtKHVuc2lnbmVkIGludCBmaWx0ZXIsIG5vZGVtYXNrX3QgKm5vZGVtYXNrLCBpbnQgbWF4X3pvbmVfaWR4KVxuLS1cbm1tL3Nob3dfbWVtLmMtNDI3LSNlbmRpZlxubW0vc2hvd19tZW0uYzo0Mjg6I2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxubW0vc2hvd19tZW0uYy00MjktXHRwcmludGsoXCYjMzQ7JWx1IHBhZ2VzIGh3cG9pc29uZWRcXG5cJiMzNDssIGF0b21pY19sb25nX3JlYWQoXHUwMDI2bnVtX3BvaXNvbmVkX3BhZ2VzKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjM6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3NTAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1MjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBBbmFseXNpczogVW5yZWNvdmVyYWJsZSBNZW1vcnkgRmFpbHVyZSBIYW5kbGluZyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc3lzY3RsLCBgcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZWAsIGFuZCBtb2RpZmllcyBgbWVtb3J5X2ZhaWx1cmUoKWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1dvcnRoIGZ1enppbmc/JiMzNDsgQWJzb2x1dGVseSwgdGhpcyBpcyBuZXcgZnVuY3Rpb25hbGl0eSBpbiB0aGUga2VybmVsIHRoYXQmIzM5O3MgZGVzaWduZWQgdG8gdHJpZ2dlciBhIHBhbmljIHVuZGVyIHNwZWNpZmljIG1lbW9yeSBmYWlsdXJlIGNvbmRpdGlvbnMuCgpCdXQgd2FpdCwgYSBwYW5pYyBtZWFucyBhIGNyYXNoLCBhbmQgYSBmdXp6ZXIgKndpbGwqIHNlZSB0aGF0LiBUaGUgc3lzY3RsIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQsIHdoaWNoIGlzIGltcG9ydGFudC4gSWYgdGhlIGZ1enplciBlbmFibGVzIGl0LCBhbmQgdGhlbiB0cmlnZ2VycyBhbiB1bnJlY292ZXJhYmxlIG1lbW9yeSBmYWlsdXJlLCBib29tLCBwYW5pYy4gSXMgdGhlIHBhbmljIGEgYnVnPyBObywgaXQmIzM5O3MgdGhlICppbnRlbmRlZCogYmVoYXZpb3Igd2hlbiB0aGUgc3lzY3RsIGlzIHNldC4gU28sIGlmIHRoZSBmdXp6ZXIgaGl0cyB0aGlzLCBpdCYjMzk7bGwgcmVwb3J0IGEgJiMzNDtjcmFzaCwmIzM0OyBidXQgaXQmIzM5O3MgcG90ZW50aWFsbHkgYSBmYWxzZSBwb3NpdGl2ZSBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgYmVjYXVzZSB3ZSBpbnRlbnRpb25hbGx5IGNhdXNlZCB0aGUga2VybmVsIHRvIHBhbmljLgoKTm93LCBpZiB0aGUgZnV6emVyIGNhbiB0cmlnZ2VyIGEgbWVtb3J5IGZhaWx1cmUgb24gYSBrZXJuZWwgcGFnZSBhbmQgdGhlIHN5c2N0bCBpcyBlbmFibGVkLCBpdCAqd2lsbCogcGFuaWMuIFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIHNob3VsZCB3ZSBmdXp6IHRoaXM/IFRoZSBwYXRjaCAqbWlnaHQqIHVuY292ZXIgYnVncyBpbiB0aGUgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgbG9naWMgaXRzZWxmLCBvciBpdCBjb3VsZCBzaW1wbHkgdHJpZ2dlciB0aGUgaW50ZW5kZWQgcGFuaWMuCgpIb2xkIG9uLCB0aGUgcHJvbXB0IHNheXMsIOKAnFJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4uLiYjMzQ7IENhbiB3ZSB0cmlnZ2VyIGEgbWVtb3J5IGZhaWx1cmUgaW4gUUVNVT8gWWVzLCB3ZSBjYW4gdXNlIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCBvciBgL3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvaGFyZF9vZmZsaW5lX3BhZ2VgLgoKV2FpdCwgdGhlIHBhdGNoICpleHBsaWNpdGx5KiBhZGRzIGEgc2VsZnRlc3QgdGhhdCB1c2VzIGAvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9oYXJkX29mZmxpbmVfcGFnZWAuIFRoYXQmIzM5O3MgYSBjbGVhciBzaWduYWwuIFRoaXMgKmlzKiB3b3J0aCBmdXp6aW5nLCBiZWNhdXNlIGl0IG1vZGlmaWVzIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBpdCBpcyBwb3NzaWJsZSB0byBoaXQgaXQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4KCk5vdywgd2UgbmVlZCB0byBjb25zaWRlciBob3cgdGhlIGZ1enplciBpcyBjb25maWd1cmVkLiBJZiB0aGUgc3lzY3RsIGlzIGVuYWJsZWQsIGl0IHBhbmljcy4gSWYgaXQmIzM5O3MgZGlzYWJsZWQsIGl0IGRvZXNuJiMzOTt0LiBJZiB3ZSBlbmFibGUgdGhlIHN5c2N0bCwgdGhlIGZ1enplciB3aWxsIGRlZmluaXRlbHkgaGl0IHRoYXQgcGFuaWMgYW5kIHJlcG9ydCBpdCBhcyBhIGNyYXNoLiBJcyB0aGF0IHdoYXQgd2UgKndhbnQqPyBQcm9iYWJseSBub3QuIEEgZnV6emluZyBzZXR1cCB1c3VhbGx5IHNob3VsZG4mIzM5O3QgYmUgaW50ZW50aW9uYWxseSBjb25maWd1cmVkIHRvIHBhbmljIHRoZSBrZXJuZWwgdW5sZXNzIGl0JiMzOTtzIGRlc2lnbmVkIHRvIHRlc3QgYSBzcGVjaWZpYyBwYW5pYyBjb25kaXRpb24uIFN5emthbGxlciBnZW5lcmFsbHkgYXZvaWRzIHBhbmljcyBpZiB0aGV5IGFyZSBpbnRlbmRlZCwgb3Igd2UganVzdCB3b3VsZG4mIzM5O3QgZW5hYmxlIHRoZSBzeXNjdGwuCgpPa2F5LCBpZiB3ZSBkb24mIzM5O3QgZW5hYmxlIHRoZSBzeXNjdGwsIHRoZSBuZXcgY29kZSBgcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZmAgc2ltcGx5IHJldHVybnMgZmFsc2UuIEJ1dCwgaXQgYWxzbyBhZGRzIGBpc19rZXJuZWxfb3duZWRfcGFnZSgpYCB3aGljaCBpcyBjYWxsZWQgdW5jb25kaXRpb25hbGx5IGluIGBnZXRfYW55X3BhZ2UoKWAuIFRoYXQgc291bmRzIGludGVyZXN0aW5nLiBJIHNob3VsZCBnbyBsb29rIGF0IHRob3NlIGNoYW5nZXMgdG8gYGdldF9hbnlfcGFnZSgpYCBjbG9zZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXNfa2VybmVsX293bmVkX3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1vcnktZmFpbHVyZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbW9yeS1mYWlsdXJlLmM9MTMzOT1zdGF0aWMgaW5saW5lIGJvb2wgSFdQb2lzb25IYW5kbGFibGUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMzU1LSAqL1xubW0vbWVtb3J5LWZhaWx1cmUuYzoxMzU2OnN0YXRpYyBpbmxpbmUgYm9vbCBpc19rZXJuZWxfb3duZWRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTM1Ny17XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0xNDE5PXN0YXRpYyBpbnQgZ2V0X2FueV9wYWdlKHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMTQzMi1cdCAqL1xubW0vbWVtb3J5LWZhaWx1cmUuYzoxNDMzOlx0aWYgKGlzX2tlcm5lbF9vd25lZF9wYWdlKHApKSB7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTE0MzQtXHRcdGlmIChjb3VudF9pbmNyZWFzZWQpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0xNDkzPXN0YXRpYyBpbnQgX19nZXRfdW5wb2lzb25fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE1NDUtICogICAgICAgICAtRU5PVFJFQ09WRVJBQkxFIGZvciBrZXJuZWwtb3duZWQgcGFnZXMgaWRlbnRpZmllZCBieVxubW0vbWVtb3J5LWZhaWx1cmUuYzoxNTQ2OiAqICAgICAgICAgaXNfa2VybmVsX293bmVkX3BhZ2UoKSAoUEdfcmVzZXJ2ZWQsIHNsYWIsXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE1NDctICogICAgICAgICBwYWdlLXRhYmxlLCBsYXJnZS1rbWFsbG9jKSB0aGF0IHRoZSBoYW5kbGVyIGNhbm5vdCByZWNvdmVyLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIzOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjQ2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGEgUmVjZW50IEtlcm5lbCBDaGFuZ2UqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBrZXJuZWwgY29kZSwgYW5kIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHNlZWluZy4gSXQgbG9va3MgbGlrZSBgaXNfa2VybmVsX293bmVkX3BhZ2UoKWAgZ2V0cyBjYWxsZWQgdW5jb25kaXRpb25hbGx5IHdpdGhpbiBgZ2V0X2FueV9wYWdlKClgLiBJbnRlcmVzdGluZy4gSWYgdGhhdCBmdW5jdGlvbiByZXR1cm5zIGB0cnVlYCwgaW5kaWNhdGluZyBhIGtlcm5lbC1vd25lZCBwYWdlLCBgZ2V0X2FueV9wYWdlKClgIGltbWVkaWF0ZWx5IHJldHVybnMgYC1FTk9UUkVDT1ZFUkFCTEVgLiBOb3csIGBtZW1vcnlfZmFpbHVyZSgpYCBoYW5kbGVzIHRoYXQgc3BlY2lmaWMgZXJyb3IgY29kZSwgYC1FTk9UUkVDT1ZFUkFCTEVgLCBhbmQgZG9lcyBzbyBieSBjYWxsaW5nIGBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0tFUk5FTCwgTUZfSUdOT1JFRClgLgoKVGhlIGNydWNpYWwgYml0IGlzLCB0aGlzICpjaGFuZ2VzKiBob3cgYG1lbW9yeV9mYWlsdXJlKClgIGJlaGF2ZXMgd2l0aCBrZXJuZWwtb3duZWQgcGFnZXMsIGV2ZW4gaWYgdGhlIHJlbGV2YW50IHN5c2N0bCBpcyBkaXNhYmxlZC4gUHJldmlvdXNseSwgaWYgSSB1bmRlcnN0YW5kIGNvcnJlY3RseSwgaXQgd291bGQgaGF2ZSBnb25lIHRocm91Z2ggYHRyeV9hZ2FpbmAgYW5kIGV2ZW50dWFsbHkgZ2l2ZW4gYSBgLUVJT2AgZXJyb3IgYWZ0ZXIgY2FsbGluZyBgc2hha2VfcGFnZSgpYC4gTm93LCBpdOKAmXMgc2hvcnQtY2lyY3VpdGluZyBhbmQgcmV0dXJuaW5nIGAtRU5PVFJFQ09WRVJBQkxFYC4gVGhpcyBpcyBhICpmdW5jdGlvbmFsKiBjaGFuZ2UgaW4gYG1lbW9yeV9mYWlsdXJlKClgLiBUaGlzIHJlYWxseSBpcyBhIGNoYW5nZSBpbiB0aGUgaW50ZW5kZWQgYmVoYXZpb3IsIGF0IGxlYXN0IHRvIG1lLgoKT2theSwgaXMgdGhpcyBmdXp6YWJsZT8gQWJzb2x1dGVseS4gU2VlbXMgbGlrZSBhIGdvb2QgdGFyZ2V0LiBJIHNob3VsZCByZWFsbHkgZm9jdXMgb24gYG1lbW9yeV9mYWlsdXJlYCwgYGdldF9hbnlfcGFnZWAsIGFuZCBgaXNfa2VybmVsX293bmVkX3BhZ2VgIHdoZW4gSSBmdXp6LiBXYWl0IGEgc2Vjb25kLCBgbWVtb3J5X2ZhaWx1cmVgIGlzIGFjdHVhbGx5IHRoZSBtYWluIGVudHJ5IHBvaW50IHRvIGl0IGFsbC4gSSBzaG91bGQgc2VlIGhvdyByZWFjaGFibGUgaXQgaXMsIGFuZCB5dXAsIGl0JiMzOTtzIGFjY2Vzc2libGUgdGhyb3VnaCBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAgb3IgYGhhcmRfb2ZmbGluZV9wYWdlYC4gTm93IEkgc2hvdWxkIGp1c3QgbG9vayBpbnRvIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNQURWX0hXUE9JU09OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYz0xNDkzPXN0YXRpYyBib29sIGlzX21lbW9yeV9mYWlsdXJlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNDk1LVx0c3dpdGNoIChtYWR2X2JlaGF2aW9yLVx1MDAzZWJlaGF2aW9yKSB7XG5tbS9tYWR2aXNlLmM6MTQ5NjpcdGNhc2UgTUFEVl9IV1BPSVNPTjpcbm1tL21hZHZpc2UuYy0xNDk3LVx0Y2FzZSBNQURWX1NPRlRfT0ZGTElORTpcbi0tXG5tbS9tYWR2aXNlLmM9MTUxOT1tYWR2aXNlX2JlaGF2aW9yX3ZhbGlkKGludCBiZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTU1Mi1cdGNhc2UgTUFEVl9TT0ZUX09GRkxJTkU6XG5tbS9tYWR2aXNlLmM6MTU1MzpcdGNhc2UgTUFEVl9IV1BPSVNPTjpcbm1tL21hZHZpc2UuYy0xNTU0LSNlbmRpZlxuLS1cbm1tL21hZHZpc2UuYz0xODg4PXN0YXRpYyBpbnQgbWFkdmlzZV9kb19iZWhhdmlvcih1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuX2luLFxuLS1cbm1tL21hZHZpc2UuYy0xOTQ0LSAqICBNQURWX0tFRVBPTkZPUksgLSB1bmRvIHRoZSBlZmZlY3Qgb2YgTUFEVl9XSVBFT05GT1JLXG5tbS9tYWR2aXNlLmM6MTk0NTogKiAgTUFEVl9IV1BPSVNPTiAtIHRyaWdnZXIgbWVtb3J5IGVycm9yIGhhbmRsZXIgYXMgaWYgdGhlIGdpdmVuIG1lbW9yeSByYW5nZVxubW0vbWFkdmlzZS5jLTE5NDYtICpcdFx0d2VyZSBjb3JydXB0ZWQgYnkgdW5yZWNvdmVyYWJsZSBoYXJkd2FyZSBtZW1vcnkgZmFpbHVyZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDI1NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYE1BRFZfSFdQT0lTT05gIGFuZCBpdHMgSW1wbGljYXRpb25zKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYE1BRFZfSFdQT0lTT05gIGlzIHN1cHBvcnRlZCwgdGhhdCYjMzk7cyBnb29kLiBCdXQgd2FpdCBhIG1pbnV0ZSwgSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIG9ubHkgb3BlcmF0ZXMgb24gdXNlci1tYXBwZWQgcGFnZXMuIFRoaXMgbWVhbnMgSSBjYW4mIzM5O3QganVzdCB0aHJvdyBpdCBhdCBhbnl0aGluZy4gTm93LCBJIG5lZWQgdG8gY2hlY2sgd2hhdCBgaXNfa2VybmVsX293bmVkX3BhZ2UoKWAgdXNlcyB0byBkZXRlcm1pbmUgYSBrZXJuZWwtb3duZWQgcGFnZS4gQWgsIGl0IHVzZXMgY2hlY2tzIGZvciBgUGFnZVJlc2VydmVkYCwgYFBhZ2VTbGFiYCwgYFBhZ2VUYWJsZWAsIGFuZCBgUGFnZUxhcmdlS21hbGxvY2AuCgpDYW4gYSB1c2VyIGFjdHVhbGx5ICptYXAqIGEgYFBhZ2VSZXNlcnZlZGAgcGFnZT8gSSBiZWxpZXZlIHRoZXkgY2FuLiBJJiMzOTttIHByZXR0eSBzdXJlIHRoYXQgaGFwcGVucyB0aHJvdWdoIHRoaW5ncyBsaWtlIGAvZGV2L21lbWAsIG9yIG1heWJlIGV2ZW4gc29tZSBkcml2ZXJzIHdpdGggc3BlY2lhbCBjYXBhYmlsaXRpZXMsIHJpZ2h0PyBCdXQgdGhlIG90aGVycywgbGlrZSBhIGBQYWdlU2xhYmAgb3IgYSBgUGFnZVRhYmxlYCwgdGhvc2UgYXJlIHVzdWFsbHkgb2ZmLWxpbWl0cyB0byB1c2VybGFuZC4KCkhvbGQgb24sIEkgYWxzbyBuZWVkIHRvIHRoaW5rIGFib3V0IGBoYXJkX29mZmxpbmVfcGFnZWAuIENhbiB0aGF0IGZ1bmN0aW9uIHRhcmdldCAqYW55KiBwaHlzaWNhbCBmcmFtZSBudW1iZXIgKFBGTiksIHJlZ2FyZGxlc3Mgb2Ygb3duZXJzaGlwPyBJIHRoaW5rIHNvLiBBbmQgSSByZW1lbWJlciB0aGF0IFN5emthbGxlciwgd2hpY2ggSSYjMzk7bSBkZWFsaW5nIHdpdGggaGVyZSwgaXQgcnVucyBhcyByb290IGluIGl0cyB0ZXN0aW5nIHZpcnR1YWwgbWFjaGluZXMuIFdhaXQsIGlzIHRoYXQgcmlnaHQ/IFllcywgdGhhdCYjMzk7cyByaWdodC4gU3l6a2FsbGVyICpkb2VzKiBoYXZlIHJvb3QgcHJpdmlsZWdlcy4gU28sIGNhbiBTeXprYWxsZXIgdGhlbiB3cml0ZSB0byBgL3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvaGFyZF9vZmZsaW5lX3BhZ2VgIHRvIHRyaWdnZXIgdGhpcz8gSSBuZWVkIHRvIHZlcmlmeSBpZiBgaGFyZF9vZmZsaW5lX3BhZ2VgIGlzIGV2ZW4gZW5hYmxlZC4gVGhhdCYjMzk7cyB0aGUga2V5IHF1ZXN0aW9uIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjM6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGFyZF9vZmZsaW5lX3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jhc2UvbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL21lbW9yeS5jPTYwND1zdGF0aWMgc3NpemVfdCBzb2Z0X29mZmxpbmVfcGFnZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTYxOS0vKiBGb3JjaWJseSBvZmZsaW5lIGEgcGFnZSwgaW5jbHVkaW5nIGtpbGxpbmcgcHJvY2Vzc2VzLiAqL1xuZHJpdmVycy9iYXNlL21lbW9yeS5jOjYyMDpzdGF0aWMgc3NpemVfdCBoYXJkX29mZmxpbmVfcGFnZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtNjIxLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz02Mzc9c3RhdGljIERFVklDRV9BVFRSX1dPKHNvZnRfb2ZmbGluZV9wYWdlKTtcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzo2Mzg6c3RhdGljIERFVklDRV9BVFRSX1dPKGhhcmRfb2ZmbGluZV9wYWdlKTtcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy02MzktI2VuZGlmXG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jPTkxMT1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbWVtb3J5X3Jvb3RfYXR0cnNbXSA9IHtcbi0tXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtOTE3LVx0XHUwMDI2ZGV2X2F0dHJfc29mdF9vZmZsaW5lX3BhZ2UuYXR0cixcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzo5MTg6XHRcdTAwMjZkZXZfYXR0cl9oYXJkX29mZmxpbmVfcGFnZS5hdHRyLFxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTkxOS0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjM6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxMTEKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGlmIEkmIzM5O20gdGhlIG9uZSBoYXZpbmcgdGhlc2UgdGhvdWdodHMsIHRhcmdldGluZyBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBNZW1vcnkgRmFpbHVyZSBJbnZlc3RpZ2F0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUsIHRoZSBjb250ZXh0IHBvaW50cyB0b3dhcmRzIHNvbWV0aGluZyByZWxhdGVkIHRvIGtlcm5lbCBtZW1vcnkgZmFpbHVyZS4gTXkgaW5pdGlhbCBodW5jaCwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIHRoYXQgdGhlIHJlbGV2YW50IGNvZGUgc2hvdWxkIGJlIGluIHRoZSBgZHJpdmVycy9iYXNlL2AgZGlyZWN0b3J5LCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbWVtb3J5LmNgIGZpbGUuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nLiBOb3csIHRoZSBrZXkgaXMgd2hldGhlciBvciBub3QgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGdhdGVkIGJlaGluZCBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIHRoaXMgaXMgY29tcGlsZWQgdW5kZXIgYENPTkZJR19NRU1PUllfRkFJTFVSRWAuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0IGxvb2tpbmcsIGZvciB0aGUgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMsIHRvIHNlZSBob3cgdGhhdCYjMzk7cyBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoYXJkX29mZmxpbmVfcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmFzZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL21lbW9yeS5jPTYwND1zdGF0aWMgc3NpemVfdCBzb2Z0X29mZmxpbmVfcGFnZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTYxOS0vKiBGb3JjaWJseSBvZmZsaW5lIGEgcGFnZSwgaW5jbHVkaW5nIGtpbGxpbmcgcHJvY2Vzc2VzLiAqL1xuZHJpdmVycy9iYXNlL21lbW9yeS5jOjYyMDpzdGF0aWMgc3NpemVfdCBoYXJkX29mZmxpbmVfcGFnZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtNjIxLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz02Mzc9c3RhdGljIERFVklDRV9BVFRSX1dPKHNvZnRfb2ZmbGluZV9wYWdlKTtcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzo2Mzg6c3RhdGljIERFVklDRV9BVFRSX1dPKGhhcmRfb2ZmbGluZV9wYWdlKTtcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy02MzktI2VuZGlmXG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jPTkxMT1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbWVtb3J5X3Jvb3RfYXR0cnNbXSA9IHtcbi0tXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtOTE3LVx0XHUwMDI2ZGV2X2F0dHJfc29mdF9vZmZsaW5lX3BhZ2UuYXR0cixcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzo5MTg6XHRcdTAwMjZkZXZfYXR0cl9oYXJkX29mZmxpbmVfcGFnZS5hdHRyLFxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTkxOS0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjM6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2MTIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24qKgoKQWxyaWdodCwgbXkgZmlyc3QgaW5zdGluY3QgaGVyZSBpcyB0byB6ZXJvIGluIG9uIHRoYXQgYCNpZmRlZmAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IG9mIHRoaXMgY29kZSBibG9jayBpbW1lZGlhdGVseS4gSSYjMzk7bSBsb29raW5nIGJleW9uZCBqdXN0IHRoZSBjb2RlIHNuaXBwZXQgaXRzZWxmIGFuZCB0aGlua2luZyBhYm91dCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3IgcGxhdGZvcm0tc3BlY2lmaWMgZGVmaW5pdGlvbnMgYXJlIGluZmx1ZW5jaW5nIGl0cyBpbmNsdXNpb24gb3IgZXhjbHVzaW9uLiBUaGlzIGlzIGNsYXNzaWMgZGVidWdnaW5nIGFuZCBtYWludGVuYW5jZSwgYWZ0ZXIgYWxsLiBJJiMzOTttIG1lbnRhbGx5IHBhcnNpbmcgdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLCBxdWlja2x5IGFzc2Vzc2luZyB3aGF0IGVudmlyb25tZW50IHZhcmlhYmxlcyBvciBidWlsZCBmbGFncyBhcmUgcHJvYmFibHkgc2V0IHRvIGNvbnRyb2wgaXRzIGJlaGF2aW9yLiBBcmUgd2UgZGVhbGluZyB3aXRoIGEgZGVidWdnaW5nIGZlYXR1cmUsIGEgcGxhdGZvcm0tc3BlY2lmaWMgb3B0aW1pemF0aW9uLCBvciBwZXJoYXBzIGEgZmVhdHVyZSBmbGFnIHRpZWQgdG8gYSBwYWlkIHZlcnNpb24/IEtub3dpbmcgdGhlIHByZXByb2Nlc3NvciBzeW1ib2wgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29kZSYjMzk7cyB1bHRpbWF0ZSBmdW5jdGlvbmFsaXR5IGluIGEgZ2l2ZW4gYnVpbGQgY29uZmlndXJhdGlvbi4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBpZmRlZiB3aWxsIGFsbG93IG1lIHRvIGFzc2VzcyB0aGUgcmFtaWZpY2F0aW9ucyBvZiB0aGlzIGNvZGUgYmxvY2sgdG8gbXkgY3VycmVudCB3b3JrLiBJIGFtIGFzc2Vzc2luZyB0aGUgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjb25kaXRpb25hbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjM6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jhc2UvbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYxMDpcdFx0aWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKVxuIDYxMTpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuIDYxMjpcdFx0aWYgKGtzdHJ0b3VsbChidWYsIDAsIFx1MDAyNnBmbikgXHUwMDNjIDApXG4gNjEzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDYxNDpcdFx0cGZuIFx1MDAzZVx1MDAzZT0gUEFHRV9TSElGVDtcbiA2MTU6XHRcdHJldCA9IHNvZnRfb2ZmbGluZV9wYWdlKHBmbiwgMCk7XG4gNjE2Olx0XHRyZXR1cm4gcmV0ID09IDAgPyBjb3VudCA6IHJldDtcbiA2MTc6XHR9XG4gNjE4Olx0XG4gNjE5Olx0LyogRm9yY2libHkgb2ZmbGluZSBhIHBhZ2UsIGluY2x1ZGluZyBraWxsaW5nIHByb2Nlc3Nlcy4gKi9cbiA2MjA6XHRzdGF0aWMgc3NpemVfdCBoYXJkX29mZmxpbmVfcGFnZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gNjIxOlx0XHRcdFx0XHQgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4gNjIyOlx0XHRcdFx0XHQgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4gNjIzOlx0e1xuIDYyNDpcdFx0aW50IHJldDtcbiA2MjU6XHRcdHU2NCBwZm47XG4gNjI2Olx0XHRpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpXG4gNjI3Olx0XHRcdHJldHVybiAtRVBFUk07XG4gNjI4Olx0XHRpZiAoa3N0cnRvdWxsKGJ1ZiwgMCwgXHUwMDI2cGZuKSBcdTAwM2MgMClcbiA2Mjk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNjMwOlx0XHRwZm4gXHUwMDNlXHUwMDNlPSBQQUdFX1NISUZUO1xuIDYzMTpcdFx0cmV0ID0gbWVtb3J5X2ZhaWx1cmUocGZuLCBNRl9TV19TSU1VTEFURUQpO1xuIDYzMjpcdFx0aWYgKHJldCA9PSAtRU9QTk9UU1VQUClcbiA2MzM6XHRcdFx0cmV0ID0gMDtcbiA2MzQ6XHRcdHJldHVybiByZXQgPyByZXQgOiBjb3VudDtcbiA2MzU6XHR9XG4gNjM2Olx0XG4gNjM3Olx0c3RhdGljIERFVklDRV9BVFRSX1dPKHNvZnRfb2ZmbGluZV9wYWdlKTtcbiA2Mzg6XHRzdGF0aWMgREVWSUNFX0FUVFJfV08oaGFyZF9vZmZsaW5lX3BhZ2UpO1xuIDYzOTpcdCNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMzowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjMyNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gQmxvY2sqKgoKQWxyaWdodCwgSSYjMzk7bSBkaXZpbmcgaW4uIFRoZSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGNvZGUgc2VnbWVudCBhYm92ZSB0aGUgYCNpZmRlZmAgZGlyZWN0aXZlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgd2hhdCBjb25kaXRpb25zIGFyZSBiZWluZyBjaGVja2VkLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIG1lYXQgb2YgdGhlIGxvZ2ljIHVzdWFsbHkgbGllczsgdGhlIHByZXByb2Nlc3NvciYjMzk7cyBsb2dpYyBpcyBqdXN0IGEgZ3VhcmQgcmFpbCwgYSBzZXR1cCBmb3IgdGhlIGNvcmUgZXhlY3V0aW9uLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBpbXBsaWNhdGlvbnMgb2YgKndoeSogdGhpcyBibG9jayBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGluIHRoZSBmaXJzdCBwbGFjZS4gV2hhdOKAmXMgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcz8gV2hhdCBlbnZpcm9ubWVudGFsIGZhY3RvcnMsIGZlYXR1cmUgZmxhZ3MsIG9yIHBsYXRmb3JtIGRpZmZlcmVuY2VzIGFyZSBiZWluZyBhY2NvdW50ZWQgZm9yPyBVbmRlcnN0YW5kaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBlc3BlY2lhbGx5IHRoZSBwb3RlbnRpYWwgcHJlcHJvY2Vzc29yIGRlZmluaXRpb25zLCBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHdoYXQgc3BlY2lmaWMgYmxvY2sgb2YgY29kZSBpcyBiZWluZyBwcm90ZWN0ZWQgb3IgZW5hYmxlZC4gSSB3aWxsIGZvY3VzIG15IGVmZm9ydHMgb24gdW5kZXJzdGFuZGluZyB0aGUgYCNpZmRlZmAgc3RhdGVtZW50JiMzOTtzIHB1cnBvc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIzOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL21lbW9yeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1OTA6XHRvdXQ6XG4gNTkxOlx0XHR1bmxvY2tfZGV2aWNlX2hvdHBsdWcoKTtcbiA1OTI6XHRcdHJldHVybiByZXQ7XG4gNTkzOlx0fVxuIDU5NDpcdFxuIDU5NTpcdHN0YXRpYyBERVZJQ0VfQVRUUl9XTyhwcm9iZSk7XG4gNTk2Olx0I2VuZGlmXG4gNTk3Olx0XG4gNTk4Olx0I2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxuIDU5OTpcdC8qXG4gNjAwOlx0ICogU3VwcG9ydCBmb3Igb2ZmbGluaW5nIHBhZ2VzIG9mIG1lbW9yeVxuIDYwMTpcdCAqL1xuIDYwMjpcdFxuIDYwMzpcdC8qIFNvZnQgb2ZmbGluZSBhIHBhZ2UgKi9cbiA2MDQ6XHRzdGF0aWMgc3NpemVfdCBzb2Z0X29mZmxpbmVfcGFnZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gNjA1Olx0XHRcdFx0XHQgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4gNjA2Olx0XHRcdFx0XHQgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4gNjA3Olx0e1xuIDYwODpcdFx0aW50IHJldDtcbiA2MDk6XHRcdHU2NCBwZm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIzOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2ODA2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3RyYXRlZ3kgZm9yIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIENoYW5nZXMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBjb2RlIHVuZGVyIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCYjMzk7cyBhbHRlcmluZyB0aGUgYmVoYXZpb3Igb2YgYG1lbW9yeV9mYWlsdXJlKClgIGFuZCBgZ2V0X2FueV9wYWdlKClgLCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vayBmb3IgZnV6emluZyBwb3RlbnRpYWwuIFdlIG5lZWQgdG8gc2VlIGlmIGl0JiMzOTtzIGdvdCBmdW5jdGlvbmFsIGNoYW5nZXMuCgpUaGUgYHBhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmVgIHN5c2N0bCBpcyBvZmYgYnkgZGVmYXVsdCwgYnV0IHRoZSBmdXp6ZXIgY2FuIGVhc2lseSBmbGlwIHRoYXQgc3dpdGNoIHRvIGV4cGxvcmUgYWxsIHBvc3NpYmlsaXRpZXMuIEV2ZW4gaWYgd2Uga2VlcCBpdCBvZmYsIHRoZXJlJiMzOTtzIGEgc2lnbmlmaWNhbnQgY2hhbmdlOiBgaXNfa2VybmVsX293bmVkX3BhZ2UoKWAgd2lsbCBhbHRlciB0aGUgcmV0dXJuIHZhbHVlIG9mIGBnZXRfYW55X3BhZ2UoKWAgdG8gYC1FTk9UUkVDT1ZFUkFCTEVgIGluc3RlYWQgb2YgYC1FSU9gLiBUaGF0LCBpbiB0dXJuLCBjaGFuZ2VzIGhvdyBgbWVtb3J5X2ZhaWx1cmUoKWAgYmVoYXZlczsgaXQgbm93IGNhdXNlcyBpdCB0byBpbW1lZGlhdGVseSByZXR1cm4gYGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfS0VSTkVMLCBNRl9JR05PUkVEKWAuIFRoaXMgaXMgY2xlYXJseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzbyB5ZXMsIHdlIHNob3VsZCBkZWZpbml0ZWx5IGZ1enogdGhpcy4KCk5vdywgd2hhdCBhcmUgdGhlIGtleSBzeW1ib2xzIHRvIHRhcmdldD8gSSYjMzk7bSB0aGlua2luZyBgbWVtb3J5X2ZhaWx1cmVgLCBgZ2V0X2FueV9wYWdlYCwgYGlzX2tlcm5lbF9vd25lZF9wYWdlYCwgYW5kIGBwYW5pY19vbl91bnJlY292ZXJhYmxlX21mYC4gQnV0IGhvbGQgb24sIGBpc19rZXJuZWxfb3duZWRfcGFnZWAgYW5kIGBwYW5pY19vbl91bnJlY292ZXJhYmxlX21mYCBhcmUgbWFya2VkIGFzIHN0YXRpYyBpbmxpbmUgb3Igc3RhdGljIGZ1bmN0aW9ucy4gVGhleSYjMzk7cmUgbGlrZWx5IGlubGluZWQsIHNvIHRoYXQgYWZmZWN0cyB0aGVpciB1c2VmdWxuZXNzIGFzIGRpcmVjdCBmdXp6IHRhcmdldHMuIFNvLCBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgZ2V0X2FueV9wYWdlYCByZW1haW4gdGhlIHByaW1hcnkgZm9jdXMsIGFuZCBgYWN0aW9uX3Jlc3VsdGAgaXMgYWxzbyB3b3J0aCBrZWVwaW5nIGluIG1pbmQsIHNpbmNlIGl0JiMzOTtzIHRoZSByZXR1cm4gb2YgYSBjcml0aWNhbCBmdW5jdGlvbi4KCkFzIGZvciBjb25maWd1cmF0aW9ucywgYE1FTU9SWV9GQUlMVVJFYCBpcyB0aGUgb2J2aW91cyBvbmUsIGJ1dCB3YWl0LCBgTUVNT1JZX0ZBSUxVUkVgICpkZXBlbmRzKiBvbiBgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRWAuIFNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGFsc28gYWNjb3VudCBmb3IgYEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVgIGluIG91ciB0ZXN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMzowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9LY29uZmlnPTI9Y29uZmlnIEFSTTY0XG4tLVxuYXJjaC9hcm02NC9LY29uZmlnLTczLVx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXG5hcmNoL2FybTY0L0tjb25maWc6NzQ6XHRzZWxlY3QgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxuYXJjaC9hcm02NC9LY29uZmlnLTc1LVx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfU0hBRE9XX0NBTExfU1RBQ0sgaWYgQ0NfSEFWRV9TSEFET1dfQ0FMTF9TVEFDS1xuLS1cbmFyY2gvcGFyaXNjL0tjb25maWc9Mj1jb25maWcgUEFSSVNDXG4tLVxuYXJjaC9wYXJpc2MvS2NvbmZpZy0yMi1cdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGUyBpZiBQQTIwXG5hcmNoL3BhcmlzYy9LY29uZmlnOjIzOlx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcbmFyY2gvcGFyaXNjL0tjb25maWctMjQtXHRzZWxlY3QgQVJDSF9TVEFDS1dBTEtcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz02MjQ9Y29uZmlnIFBQQzY0X1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXG4tLVxuYXJjaC9wb3dlcnBjL0tjb25maWctNjI3LVx0ZGVmYXVsdCBcJiMzNDt5XCYjMzQ7IGlmIFBQQ19QT1dFUk5WXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzo2Mjg6XHRzZWxlY3QgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxuYXJjaC9wb3dlcnBjL0tjb25maWctNjI5LVxuLS1cbmFyY2gveDg2L0tjb25maWc9NzYyPWNvbmZpZyBYODZfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTc2OC1cdGRlcGVuZHMgb24gWDg2XzY0IHx8ICFTUEFSU0VNRU1cbmFyY2gveDg2L0tjb25maWc6NzY5Olx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcbmFyY2gveDg2L0tjb25maWctNzcwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMzowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzk3MQoJCQkJCQkJb3V0cHV0OiAxODkKCQkJCQkJCXRob3VnaHRzOiAxMTAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgRmFpbHVyZSBIYW5kbGluZyBhbmQgUmVsYXRlZCBDb25maWd1cmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIGVuYWJsaW5nIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBgTUVNT1JZX0ZBSUxVUkVgIG1lY2hhbmlzbS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IGFsbCByZWxldmFudCBjb25maWd1cmF0aW9ucy4gSSBzZWUgdGhhdCBgTUVNT1JZX0ZBSUxVUkVgIGlzIHRoZSBwcmltYXJ5IG9uZSwgYW5kIEkmIzM5O20gYWxzbyBjb25zaWRlcmluZyBgSFdQT0lTT05fSU5KRUNUYC4gVGhlIGxhdHRlciBzZWVtcyBpbnRlcmVzdGluZyBmb3IgZnV6emluZywgcG9zc2libHkgZW5hYmxpbmcgdGhlIGluamVjdGlvbiBvZiBtZW1vcnkgZmFpbHVyZXMuIEkga25vdyBpdCBwcm92aWRlcyBgL3N5cy9rZXJuZWwvZGVidWcvaHdwb2lzb24vY29ycnVwdC1wZm5gIGFuZCBgdW5wb2lzb24tcGZuYCwgYW5kIHRoZSBzZWxmdGVzdHMgdXNlIGB1bnBvaXNvbi1wZm5gLCB3aGljaCBjb25maXJtcyBpdHMgcmVsZXZhbmNlLgoKSSYjMzk7bSBjaGVja2luZyBpZiBzeXprYWxsZXIgdXRpbGl6ZXMgYEhXUE9JU09OX0lOSkVDVGAuIEl0IGFwcGVhcnMgdGhhdCBzeXprYWxsZXIgdXNlcyBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAgYW5kIGAvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9oYXJkX29mZmxpbmVfcGFnZWAsIHNvIGBIV1BPSVNPTl9JTkpFQ1RgIGlzIGRlZmluaXRlbHkgcmVsYXRlZCBhbmQgd29ydGggZW5hYmxpbmcgZm9yIGVmZmVjdGl2ZSB0ZXN0aW5nIGFuZCBtZW1vcnkgZXJyb3IgaW5qZWN0aW9uLiBUaGVyZWZvcmUsIEkmIzM5O2xsIGluY2x1ZGUgYm90aCBgTUVNT1JZX0ZBSUxVUkVgIGFuZCBgSFdQT0lTT05fSU5KRUNUYCBpbiBteSBjb25maWd1cmF0aW9uLgoKTmV4dCwgSSYjMzk7bGwgZXhhbWluZSB0aGUgY29kZSBjaGFuZ2VzIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgZnVuY3Rpb25zIGRpcmVjdGx5IGludm9sdmVkIGluIHRoaXMgcHJvY2Vzcywgc3BlY2lmaWNhbGx5IGBtZW1vcnlfZmFpbHVyZWAsIGBnZXRfYW55X3BhZ2VgLCBgaXNfa2VybmVsX293bmVkX3BhZ2VgLCBgcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZmAsIGFuZCBgYWN0aW9uX3Jlc3VsdGAuIEkmIzM5O20gbm90aW5nIHRoYXQgYGlzX2tlcm5lbF9vd25lZF9wYWdlYCBhbmQgYHBhbmljX29uX3VucmVjb3ZlcmFibGVfbWZgIGFyZSBzdGF0aWMgYW5kIHBvdGVudGlhbGx5IGlubGluZWQsIHdoaWNoIG1pZ2h0IGFmZmVjdCB0aGVpciBzeW1ib2wgYXZhaWxhYmlsaXR5LgoKTm93LCBJJiMzOTttIHZlcmlmeWluZyB0aGUgZXhwb3J0IHN0YXR1cyBvZiB0aGUga2V5IGZ1bmN0aW9ucy4gSSBzZWUgdGhhdCBgbWVtb3J5X2ZhaWx1cmVgIGlzIGV4cG9ydGVkIHdpdGggYEVYUE9SVF9TWU1CT0xfR1BMKG1lbW9yeV9mYWlsdXJlKWAsIHNvIGl0JiMzOTtzIGRpcmVjdGx5IGFjY2Vzc2libGUuIGBnZXRfYW55X3BhZ2VgIGFuZCBgYWN0aW9uX3Jlc3VsdGAgYXJlIHN0YXRpYyB3aXRoaW4gdGhlIGZpbGUsIG1ha2luZyB0aGVpciBkaXJlY3QgdXNlIG91dHNpZGUgdGhpcyBjb250ZXh0IHVubGlrZWx5LCBidXQgSSYjMzk7bSBwcmltYXJpbHkgaW50ZXJlc3RlZCBpbiB0aGVpciBpbnRlcm5hbCBsb2dpYy4KCkZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGUgbW9kaWZpY2F0aW9ucyBJJiMzOTt2ZSByZWFkIG1vZGlmeSB0aGUgY29yZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZyBsb2dpYy4gVGhleSBzaG9ydC1jaXJjdWl0IGVycm9yIHByb2Nlc3NpbmcgZm9yIGtlcm5lbC1vd25lZCBwYWdlcyAoc3VjaCBhcyB0aG9zZSB1c2VkIGJ5IHRoZSBzbGFiIGFsbG9jYXRvciwgcGFnZSB0YWJsZXMsIG9yIHJlc2VydmVkIHBhZ2VzKS4gQSBuZXcgc3lzY3RsIGlzIGFsc28gaW50cm9kdWNlZCB0byB0cmlnZ2VyIGEgcGFuaWMgdXBvbiBlbmNvdW50ZXJpbmcgdW5yZWNvdmVyYWJsZSBlcnJvcnMgd2l0aCB0aGVzZSBrZXJuZWwtb3duZWQgcGFnZXMuIFRoaXMgbWVjaGFuaXNtIGlzIGNsZWFybHkgbGlua2VkIHRvIGhhcmR3YXJlIGVycm9yIGluamVjdGlvbiBtZWNoYW5pc21zIHN1Y2ggYXMgYC9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2hhcmRfb2ZmbGluZV9wYWdlYCBvciBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAuCgpUbyByZWl0ZXJhdGUsIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgSFdQT0lTT05fSU5KRUNUYCBpcyBhIG5lY2Vzc2l0eS4gSXQgaXMgYSBtb2R1bGUgd2hpY2ggcHJvdmlkZXMgZGVidWdmcyBpbnRlcmZhY2VzLiBTeXprYWxsZXIgY2FuIHV0aWxpemUgaXQuIFRodXMsIGl0IGlzIGRlc2lyYWJsZSB0byBoYXZlIGl0IGVuYWJsZWQuCgpMb29raW5nIGZvciBvdGhlciBkZXBlbmRlbmNpZXMsIEkgY2FuIHNlZSB0aGF0IGBERUJVR19LRVJORUxgIGFuZCBgUFJPQ19GU2AgYXJlIGRlcGVuZGVuY2llcyBmb3IgYEhXUE9JU09OX0lOSkVDVGAuIFRoZXkmIzM5O3JlIGxpa2VseSBzdGFuZGFyZCBhbmQgZG9uJiMzOTt0IHJlcXVpcmUgc3BlY2lmaWMgY29uc2lkZXJhdGlvbi4gYE1NVWAgaXMgYSBkZXBlbmRlbmN5IGZvciBgTUVNT1JZX0ZBSUxVUkVgLCB3aGljaCBpcyBhbHNvIHN0YW5kYXJkLgoKQmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlIGFwcHJvYWNoIGFuZCB0aGVzZSBjb25maWd1cmF0aW9ucyBhcmUgdGhlIG1vc3QgaW1wb3J0YW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMzowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OywKICAgICYjMzQ7SFdQT0lTT05fSU5KRUNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtb3J5X2ZhaWx1cmUmIzM0OywKICAgICYjMzQ7Z2V0X2FueV9wYWdlJiMzNDssCiAgICAmIzM0O2FjdGlvbl9yZXN1bHQmIzM0OywKICAgICYjMzQ7cGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZiYjMzQ7LAogICAgJiMzNDtpc19rZXJuZWxfb3duZWRfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZyBsb2dpYyAoYG1lbW9yeV9mYWlsdXJlYCwgYGdldF9hbnlfcGFnZWApIHRvIGV4cGxpY2l0bHkgaWRlbnRpZnkgYW5kIHNob3J0LWNpcmN1aXQgb24ga2VybmVsLW93bmVkIHBhZ2VzIChzbGFiLCBwYWdlIHRhYmxlcywgcmVzZXJ2ZWQsIGxhcmdlIGttYWxsb2MpLiBJdCBhbHNvIGludHJvZHVjZXMgYSBuZXcgc3lzY3RsIHRvIHBhbmljIG9uIHN1Y2ggdW5yZWNvdmVyYWJsZSBlcnJvcnMuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBoYXJkd2FyZSBlcnJvciBpbmplY3Rpb24gaW50ZXJmYWNlcyAoZS5nLiwgYC9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2hhcmRfb2ZmbGluZV9wYWdlYCBvciBgbWFkdmlzZShNQURWX0hXUE9JU09OKWApLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICAgJiMzNDtIV1BPSVNPTl9JTkpFQ1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1vcnlfZmFpbHVyZSYjMzQ7LAogICAgJiMzNDtnZXRfYW55X3BhZ2UmIzM0OywKICAgICYjMzQ7YWN0aW9uX3Jlc3VsdCYjMzQ7LAogICAgJiMzNDtwYW5pY19vbl91bnJlY292ZXJhYmxlX21mJiMzNDssCiAgICAmIzM0O2lzX2tlcm5lbF9vd25lZF9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nIGxvZ2ljIChgbWVtb3J5X2ZhaWx1cmVgLCBgZ2V0X2FueV9wYWdlYCkgdG8gZXhwbGljaXRseSBpZGVudGlmeSBhbmQgc2hvcnQtY2lyY3VpdCBvbiBrZXJuZWwtb3duZWQgcGFnZXMgKHNsYWIsIHBhZ2UgdGFibGVzLCByZXNlcnZlZCwgbGFyZ2Uga21hbGxvYykuIEl0IGFsc28gaW50cm9kdWNlcyBhIG5ldyBzeXNjdGwgdG8gcGFuaWMgb24gc3VjaCB1bnJlY292ZXJhYmxlIGVycm9ycy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIGhhcmR3YXJlIGVycm9yIGluamVjdGlvbiBpbnRlcmZhY2VzIChlLmcuLCBgL3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvaGFyZF9vZmZsaW5lX3BhZ2VgIG9yIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMzowNToyMS4yODIwODA2MjRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDc0MDYzNDI1ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIkhXUE9JU09OX0lOSkVDVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbW9yeV9mYWlsdXJlXCIsXG4gICAgXCJnZXRfYW55X3BhZ2VcIixcbiAgICBcImFjdGlvbl9yZXN1bHRcIixcbiAgICBcInBhbmljX29uX3VucmVjb3ZlcmFibGVfbWZcIixcbiAgICBcImlzX2tlcm5lbF9vd25lZF9wYWdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgbG9naWMgKGBtZW1vcnlfZmFpbHVyZWAsIGBnZXRfYW55X3BhZ2VgKSB0byBleHBsaWNpdGx5IGlkZW50aWZ5IGFuZCBzaG9ydC1jaXJjdWl0IG9uIGtlcm5lbC1vd25lZCBwYWdlcyAoc2xhYiwgcGFnZSB0YWJsZXMsIHJlc2VydmVkLCBsYXJnZSBrbWFsbG9jKS4gSXQgYWxzbyBpbnRyb2R1Y2VzIGEgbmV3IHN5c2N0bCB0byBwYW5pYyBvbiBzdWNoIHVucmVjb3ZlcmFibGUgZXJyb3JzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgaGFyZHdhcmUgZXJyb3IgaW5qZWN0aW9uIGludGVyZmFjZXMgKGUuZy4sIGAvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9oYXJkX29mZmxpbmVfcGFnZWAgb3IgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjM6MDU6MjEuMjgyMDg0ODk1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTk4MzYyMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1ODE3NDIyNTljNDFiMmYxZDc3MTJhNDRiMGFiMDA4NjUwODUwNzUwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVuIDI2IDIzOjA1OjE5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdFxcbmluZGV4IGI5YjBjMjE4YmZiNDQwLi4yMmNjNTRjYWMzYjIxZCAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3RcXG5AQCAtNjcsNiArNjcsNyBAQCBDdXJyZW50bHksIHRoZXNlIGZpbGVzIGFyZSBpbiAvcHJvYy9zeXMvdm06XFxuIC0gcGFnZS1jbHVzdGVyXFxuIC0gcGFnZV9sb2NrX3VuZmFpcm5lc3NcXG4gLSBwYW5pY19vbl9vb21cXG4rLSBwYW5pY19vbl91bnJlY292ZXJhYmxlX21lbW9yeV9mYWlsdXJlXFxuIC0gcGVyY3B1X3BhZ2VsaXN0X2hpZ2hfZnJhY3Rpb25cXG4gLSBzdGF0X2ludGVydmFsXFxuIC0gc3RhdF9yZWZyZXNoXFxuQEAgLTkyNSw2ICs5MjYsODUgQEAgcGFuaWNfb25fb29tPTIra2R1bXAgZ2l2ZXMgeW91IHZlcnkgc3Ryb25nIHRvb2wgdG8gaW52ZXN0aWdhdGVcXG4gd2h5IG9vbSBoYXBwZW5zLiBZb3UgY2FuIGdldCBzbmFwc2hvdC5cXG4gXFxuIFxcbitwYW5pY19vbl91bnJlY292ZXJhYmxlX21lbW9yeV9mYWlsdXJlXFxuKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK1xcbitXaGVuIGEgaGFyZHdhcmUgbWVtb3J5IGVycm9yIChlLmcuIG11bHRpLWJpdCBFQ0MpIGhpdHMgYSBrZXJuZWwgcGFnZVxcbit0aGF0IGNhbm5vdCBiZSByZWNvdmVyZWQgYnkgdGhlIG1lbW9yeSBmYWlsdXJlIGhhbmRsZXIsIHRoZSBkZWZhdWx0XFxuK2JlaGF2aW91ciBpcyB0byBpZ25vcmUgdGhlIGVycm9yIGFuZCBjb250aW51ZSBvcGVyYXRpb24uICBUaGlzIGlzXFxuK2Rhbmdlcm91cyBiZWNhdXNlIHRoZSBjb3JydXB0ZWQgZGF0YSByZW1haW5zIGFjY2Vzc2libGUgdG8gdGhlIGtlcm5lbCxcXG4rcmlza2luZyBzaWxlbnQgZGF0YSBjb3JydXB0aW9uIG9yIGEgZGVsYXllZCBjcmFzaCB3aGVuIHRoZSBwb2lzb25lZFxcbittZW1vcnkgaXMgbmV4dCBhY2Nlc3NlZC5cXG4rXFxuK1doZW4gZW5hYmxlZCwgdGhpcyBzeXNjdGwgdHJpZ2dlcnMgYSBwYW5pYyBvbiBtZW1vcnkgZmFpbHVyZSBldmVudHNcXG4raGl0dGluZyBrZXJuZWwtb3duZWQgcGFnZXMgdGhhdCB0aGUgaGFuZGxlciBjYW5ub3QgcmVjb3ZlcjpcXG4rYGBQYWdlUmVzZXJ2ZWRgYCAoZmlybXdhcmUgcmVzZXJ2YXRpb25zLCBrZXJuZWwgaW1hZ2UsIHZEU08sIHplcm9cXG4rcGFnZSwgYW5kIHNpbWlsYXIgbWVtYmxvY2stcmVzZXJ2ZWQgcmVnaW9ucyksIGBgUGFnZVNsYWJgYCxcXG4rYGBQYWdlVGFibGVgYCwgYW5kIGBgUGFnZUxhcmdlS21hbGxvY2BgLiAgVGhlc2UgYXJlIG93bmVkIGJ5IHRoZVxcbitrZXJuZWwgYW5kIHRoZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGVyIGNhbm5vdCByZWxpYWJseSBldmljdCB0aGVpclxcbitjb250ZW50cy5cXG4rXFxuK090aGVyIHVucmVjb3ZlcmFibGUga2VybmVsLW93bmVkIHBvcHVsYXRpb25zICh2bWFsbG9jIGFsbG9jYXRpb25zLFxcbitrZXJuZWwgc3RhY2sgcGFnZXMsIC4uLikgYXJlIG5vdCBjdXJyZW50bHkgY292ZXJlZCBiZWNhdXNlIHRoZVxcbitoYW5kbGVyIGhhcyBubyBwYWdlLXR5cGUgc2lnbmFsIHRoYXQgZGlzdGluZ3Vpc2hlcyB0aGVtIGZyb20gYVxcbit1c2Vyc3BhY2UgZm9saW8gdGVtcG9yYXJpbHkgb2ZmIHRoZSBMUlUgZHVyaW5nIG1pZ3JhdGlvbiBvclxcbitjb21wYWN0aW9uLiAgU3VjaCBwYWdlcyBzdGlsbCBnbyB0aHJvdWdoIHRoZSBzdGFuZGFyZFxcbitNRl9NU0dfR0VUX0hXUE9JU09OIHBhdGg6IGBgUEdfaHdwb2lzb25gYCBpcyBzZXQgb24gdGhlbSBhbmQgYVxcbitkZWxheWVkIGNyYXNoIG9uIHRoZSBuZXh0IGFjY2VzcyByZW1haW5zIHBvc3NpYmxlLiAgQ292ZXJhZ2UgbWF5XFxuK2dyb3cgYXMgdGhlIGhhbmRsZXIgZ2FpbnMgc3Ryb25nZXIga2VybmVsLW93bmVyc2hpcCBzaWduYWxzLlxcbitcXG4rUmVjb3ZlcmFibGUgZmFpbHVyZSBwYXRocyBhcmUgYWxzbyBpbnRlbnRpb25hbGx5IGxlZnQgb3V0OiBpbi1mbGlnaHRcXG4rYnVkZHkgYWxsb2NhdGlvbnMgYW5kIG90aGVyIHRyYW5zaWVudCByYWNlcyB3aXRoIHRoZSBwYWdlIGFsbG9jYXRvclxcbitjYW4gcmVhY2ggdGhlIHNhbWUgZGlhZ25vc3RpYywgYW5kIHBhbmlja2luZyBvbiB0aGVtIHdvdWxkIHJpc2tcXG4ra2lsbGluZyB0aGUgYm94IGZvciBhIHBhZ2UgZGVzdGluZWQgZm9yIHVzZXJzcGFjZSB3aGVyZSB0aGUgc3RhbmRhcmRcXG4rU0lHQlVTIHJlY292ZXJ5IHBhdGggYXBwbGllcy4gIFBhZ2VzIHdob3NlIHN0YXRlIGNvdWxkIG5vdCBiZVxcbitjbGFzc2lmaWVkIGF0IGFsbCBhcmUgbm90IGNvdmVyZWQgZWl0aGVyLCBzaW5jZSBhbiB1bmtub3duIHN0YXRlIGlzXFxuK25vdCBhIHNvdW5kIGJhc2lzIGZvciBhIHBhbmljIGRlY2lzaW9uLlxcbitcXG4rRm9yIG1hbnkgZW52aXJvbm1lbnRzIGl0IGlzIHByZWZlcmFibGUgdG8gcGFuaWMgaW1tZWRpYXRlbHkgd2l0aCBhIGNsZWFuXFxuK2NyYXNoIGR1bXAgdGhhdCBjYXB0dXJlcyB0aGUgb3JpZ2luYWwgZXJyb3IgY29udGV4dCwgcmF0aGVyIHRoYW4gdG9cXG4rY29udGludWUgYW5kIGZhY2UgYSByYW5kb20gY3Jhc2ggbGF0ZXIgd2hvc2UgY2F1c2UgaXMgZGlmZmljdWx0IHRvXFxuK2RpYWdub3NlLlxcbitcXG4rVXNlIGNhc2VzXFxuKy0tLS0tLS0tLVxcbitcXG4rVGhpcyBvcHRpb24gaXMgbW9zdCB1c2VmdWwgaW4gZW52aXJvbm1lbnRzIHdoZXJlIHVuYXR0cmlidXRlZCBjcmFzaGVzXFxuK2FyZSBleHBlbnNpdmUgdG8gZGVidWcgb3Igd2hlcmUgZGF0YSBpbnRlZ3JpdHkgbXVzdCB0YWtlIHByZWNlZGVuY2VcXG4rb3ZlciBhdmFpbGFiaWxpdHk6XFxuK1xcbisqIExhcmdlIGZsZWV0cywgd2hlcmUgbXVsdGktYml0IEVDQyBlcnJvcnMgb24ga2VybmVsIHBhZ2VzIGFyZSBvYnNlcnZlZFxcbisgIHJlZ3VsYXJseSBhbmQgcG9zdC1tb3J0ZW0gYW5hbHlzaXMgb2YgYW4gdW5yZWxhdGVkIGRvd25zdHJlYW0gY3Jhc2hcXG4rICAob2Z0ZW4gc2Vjb25kcyB0byBtaW51dGVzIGFmdGVyIHRoZSBvcmlnaW5hbCBlcnJvcikgY29uc3VtZXNcXG4rICBzaWduaWZpY2FudCBlbmdpbmVlcmluZyBlZmZvcnQuXFxuK1xcbisqIFN5c3RlbXMgY29uZmlndXJlZCB3aXRoIGtkdW1wLCB3aGVyZSBwYW5pY2tpbmcgYXQgdGhlIG1vbWVudCBvZiB0aGVcXG4rICBoYXJkd2FyZSBlcnJvciBwcm9kdWNlcyBhIHZtY29yZSB0aGF0IHN0aWxsIGNvbnRhaW5zIHRoZSBmYXVsdGluZ1xcbisgIGFkZHJlc3MsIHRoZSBhZmZlY3RlZCBwYWdlIHN0YXRlLCBhbmQgdGhlIG9yaWdpbmF0aW5nIE1DRS9HSEVTXFxuKyAgcmVjb3JkIOKAlCBjb250ZXh0IHRoYXQgaXMgdHlwaWNhbGx5IGxvc3QgYnkgdGhlIHRpbWUgYSBkZWxheWVkIGNyYXNoXFxuKyAgb2NjdXJzLlxcbitcXG4rKiBIaWdoLWF2YWlsYWJpbGl0eSBjbHVzdGVycyB0aGF0IHJlbHkgb24gZmFzdCwgZGV0ZXJtaW5pc3RpYyBub2RlXFxuKyAgZmFpbHVyZSBmb3IgZmFpbG92ZXIsIGFuZCBwcmVmZXIgYW4gaW1tZWRpYXRlIHBhbmljIG92ZXIgc2lsZW50IGRhdGFcXG4rICBjb3JydXB0aW9uIHByb3BhZ2F0aW5nIHRvIHJlcGxpY2FzIG9yIHBlcnNpc3RlbnQgc3RvcmFnZS5cXG4rXFxuKyogS2VybmVsIGFuZCBwbGF0Zm9ybSBkZXZlbG9wZXJzIHJlcHJvZHVjaW5nIGh3cG9pc29uIGlzc3VlcyB3aXRoXFxuKyAgdG9vbHMgc3VjaCBhcyBgYG1jZS1pbmplY3RgYCBvciBlcnJvci1pbmplY3Rpb24gZGVidWdmcyBpbnRlcmZhY2VzLFxcbisgIHdoZXJlIHBhbmlja2luZyBvbiB0aGUgdW5yZWNvdmVyYWJsZSBwYXRoIG1ha2VzIHJlZ3Jlc3Npb25zXFxuKyAgaW1tZWRpYXRlbHkgdmlzaWJsZSBpbnN0ZWFkIG9mIHN1cmZhY2luZyBhcyBsYXRlciwgdW5yZWxhdGVkXFxuKyAgZmFpbHVyZXMuXFxuK1xcbis9ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbiswIFRyeSB0byBjb250aW51ZSBvcGVyYXRpb24gKGRlZmF1bHQpLlxcbisxIFBhbmljIGltbWVkaWF0ZWx5LiAgSWYgdGhlIGBgcGFuaWNgYCBzeXNjdGwgaXMgYWxzbyBub24temVybyB0aGVuIHRoZVxcbisgIG1hY2hpbmUgd2lsbCBiZSByZWJvb3RlZC5cXG4rPSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rXFxuK0V4YW1wbGU6OlxcbitcXG4rICAgICBlY2hvIDEgXFx1MDAzZSAvcHJvYy9zeXMvdm0vcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZVxcbitcXG4rXFxuIHBlcmNwdV9wYWdlbGlzdF9oaWdoX2ZyYWN0aW9uXFxuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuIFxcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbmluZGV4IDUxNTA4YTU1YzQwNTVlLi42MTExNjBjOThjNmY2NCAxMDA2NDRcXG4tLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jXFxuKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbkBAIC03NCw2ICs3NCw4IEBAIHN0YXRpYyBpbnQgc3lzY3RsX21lbW9yeV9mYWlsdXJlX3JlY292ZXJ5IF9fcmVhZF9tb3N0bHkgPSAxO1xcbiBcXG4gc3RhdGljIGludCBzeXNjdGxfZW5hYmxlX3NvZnRfb2ZmbGluZSBfX3JlYWRfbW9zdGx5ID0gMTtcXG4gXFxuK3N0YXRpYyBpbnQgc3lzY3RsX3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWYgX19yZWFkX21vc3RseTtcXG4rXFxuIGF0b21pY19sb25nX3QgbnVtX3BvaXNvbmVkX3BhZ2VzIF9fcmVhZF9tb3N0bHkgPSBBVE9NSUNfTE9OR19JTklUKDApO1xcbiBcXG4gc3RhdGljIGJvb2wgaHdfbWVtb3J5X2ZhaWx1cmUgX19yZWFkX21vc3RseSA9IGZhbHNlO1xcbkBAIC0xNTUsNiArMTU3LDE1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG1lbW9yeV9mYWlsdXJlX3RhYmxlW10gPSB7XFxuIFxcdFxcdC5wcm9jX2hhbmRsZXJcXHQ9IHByb2NfZG9pbnR2ZWNfbWlubWF4LFxcbiBcXHRcXHQuZXh0cmExXFx0XFx0PSBTWVNDVExfWkVSTyxcXG4gXFx0XFx0LmV4dHJhMlxcdFxcdD0gU1lTQ1RMX09ORSxcXG4rXFx0fSxcXG4rXFx0e1xcbitcXHRcXHQucHJvY25hbWVcXHQ9IFxcXCJwYW5pY19vbl91bnJlY292ZXJhYmxlX21lbW9yeV9mYWlsdXJlXFxcIixcXG4rXFx0XFx0LmRhdGFcXHRcXHQ9IFxcdTAwMjZzeXNjdGxfcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZixcXG4rXFx0XFx0Lm1heGxlblxcdFxcdD0gc2l6ZW9mKHN5c2N0bF9wYW5pY19vbl91bnJlY292ZXJhYmxlX21mKSxcXG4rXFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxuK1xcdFxcdC5wcm9jX2hhbmRsZXJcXHQ9IHByb2NfZG9pbnR2ZWNfbWlubWF4LFxcbitcXHRcXHQuZXh0cmExXFx0XFx0PSBTWVNDVExfWkVSTyxcXG4rXFx0XFx0LmV4dHJhMlxcdFxcdD0gU1lTQ1RMX09ORSxcXG4gXFx0fVxcbiB9O1xcbiBcXG5AQCAtOTgwLDE3ICs5OTEsNiBAQCBzdGF0aWMgYm9vbCBoYXNfZXh0cmFfcmVmY291bnQoc3RydWN0IHBhZ2Vfc3RhdGUgKnBzLCBzdHJ1Y3QgcGFnZSAqcCxcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbi0vKlxcbi0gKiBFcnJvciBoaXQga2VybmVsIHBhZ2UuXFxuLSAqIERvIG5vdGhpbmcsIHRyeSB0byBiZSBsdWNreSBhbmQgbm90IHRvdWNoIHRoaXMgaW5zdGVhZC4gRm9yIGEgZmV3IGNhc2VzIHdlXFxuLSAqIGNvdWxkIGJlIG1vcmUgc29waGlzdGljYXRlZC5cXG4tICovXFxuLXN0YXRpYyBpbnQgbWVfa2VybmVsKHN0cnVjdCBwYWdlX3N0YXRlICpwcywgc3RydWN0IHBhZ2UgKnApXFxuLXtcXG4tXFx0dW5sb2NrX3BhZ2UocCk7XFxuLVxcdHJldHVybiBNRl9JR05PUkVEO1xcbi19XFxuLVxcbiAvKlxcbiAgKiBQYWdlIGluIHVua25vd24gc3RhdGUuIERvIG5vdGhpbmcuXFxuICAqIFRoaXMgaXMgYSBjYXRjaC1hbGwgaW4gY2FzZSB3ZSBmYWlsIHRvIG1ha2Ugc2Vuc2Ugb2YgdGhlIHBhZ2Ugc3RhdGUuXFxuQEAgLTExOTksMTAgKzExOTksOCBAQCBzdGF0aWMgaW50IG1lX2h1Z2VfcGFnZShzdHJ1Y3QgcGFnZV9zdGF0ZSAqcHMsIHN0cnVjdCBwYWdlICpwKVxcbiAjZGVmaW5lIG1sb2NrXFx0XFx0KDFVTCBcXHUwMDNjXFx1MDAzYyBQR19tbG9ja2VkKVxcbiAjZGVmaW5lIGxydVxcdFxcdCgxVUwgXFx1MDAzY1xcdTAwM2MgUEdfbHJ1KVxcbiAjZGVmaW5lIGhlYWRcXHRcXHQoMVVMIFxcdTAwM2NcXHUwMDNjIFBHX2hlYWQpXFxuLSNkZWZpbmUgcmVzZXJ2ZWRcXHQoMVVMIFxcdTAwM2NcXHUwMDNjIFBHX3Jlc2VydmVkKVxcbiBcXG4gc3RhdGljIHN0cnVjdCBwYWdlX3N0YXRlIGVycm9yX3N0YXRlc1tdID0ge1xcbi1cXHR7IHJlc2VydmVkLFxcdHJlc2VydmVkLFxcdE1GX01TR19LRVJORUwsXFx0bWVfa2VybmVsIH0sXFxuIFxcdC8qXFxuIFxcdCAqIGZyZWUgcGFnZXMgYXJlIHNwZWNpYWxseSBkZXRlY3RlZCBvdXRzaWRlIHRoaXMgdGFibGU6XFxuIFxcdCAqIFBHX2J1ZGR5IHBhZ2VzIG9ubHkgbWFrZSBhIHNtYWxsIGZyYWN0aW9uIG9mIGFsbCBmcmVlIHBhZ2VzLlxcbkBAIC0xMjM0LDcgKzEyMzIsNiBAQCBzdGF0aWMgc3RydWN0IHBhZ2Vfc3RhdGUgZXJyb3Jfc3RhdGVzW10gPSB7XFxuICN1bmRlZiBtbG9ja1xcbiAjdW5kZWYgbHJ1XFxuICN1bmRlZiBoZWFkXFxuLSN1bmRlZiByZXNlcnZlZFxcbiBcXG4gc3RhdGljIHZvaWQgdXBkYXRlX3Blcl9ub2RlX21mX3N0YXRzKHVuc2lnbmVkIGxvbmcgcGZuLFxcbiBcXHRcXHRcXHRcXHQgICAgIGVudW0gbWZfcmVzdWx0IHJlc3VsdClcXG5AQCAtMTI2OSw2ICsxMjY2LDE1IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyh1bnNpZ25lZCBsb25nIHBmbixcXG4gXFx0KyttZl9zdGF0cy1cXHUwMDNldG90YWw7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIHBhbmljX29uX3VucmVjb3ZlcmFibGVfbWYoZW51bSBtZl9hY3Rpb25fcGFnZV90eXBlIHR5cGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIGVudW0gbWZfcmVzdWx0IHJlc3VsdClcXG4re1xcbitcXHRpZiAoIXN5c2N0bF9wYW5pY19vbl91bnJlY292ZXJhYmxlX21mKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRyZXR1cm4gdHlwZSA9PSBNRl9NU0dfS0VSTkVMIFxcdTAwMjZcXHUwMDI2IHJlc3VsdCA9PSBNRl9JR05PUkVEO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBcXFwiRGlydHkvQ2xlYW5cXFwiIGluZGljYXRpb24gaXMgbm90IDEwMCUgYWNjdXJhdGUgZHVlIHRvIHRoZSBwb3NzaWJpbGl0eSBvZlxcbiAgKiBzZXR0aW5nIFBHX2RpcnR5IG91dHNpZGUgcGFnZSBsb2NrLiBTZWUgYWxzbyBjb21tZW50IGFib3ZlIHNldF9wYWdlX2RpcnR5KCkuXFxuQEAgLTEyODYsNiArMTI5Miw5IEBAIHN0YXRpYyBpbnQgYWN0aW9uX3Jlc3VsdCh1bnNpZ25lZCBsb25nIHBmbiwgZW51bSBtZl9hY3Rpb25fcGFnZV90eXBlIHR5cGUsXFxuIFxcdHByX2VycihcXFwiJSNseDogcmVjb3ZlcnkgYWN0aW9uIGZvciAlczogJXNcXFxcblxcXCIsXFxuIFxcdFxcdHBmbiwgYWN0aW9uX3BhZ2VfdHlwZXNbdHlwZV0sIGFjdGlvbl9uYW1lW3Jlc3VsdF0pO1xcbiBcXG4rXFx0aWYgKHBhbmljX29uX3VucmVjb3ZlcmFibGVfbWYodHlwZSwgcmVzdWx0KSlcXG4rXFx0XFx0cGFuaWMoXFxcIk1lbW9yeSBmYWlsdXJlOiAlI2x4OiB1bnJlY292ZXJhYmxlIHBhZ2VcXFwiLCBwZm4pO1xcbitcXG4gXFx0cmV0dXJuIChyZXN1bHQgPT0gTUZfUkVDT1ZFUkVEIHx8IHJlc3VsdCA9PSBNRl9ERUxBWUVEKSA/IDAgOiAtRUJVU1k7XFxuIH1cXG4gXFxuQEAgLTEzMzksNiArMTM0OCwzNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgSFdQb2lzb25IYW5kbGFibGUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuIFxcdHJldHVybiBQYWdlTFJVKHBhZ2UpIHx8IGlzX2ZyZWVfYnVkZHlfcGFnZShwYWdlKTtcXG4gfVxcbiBcXG4rLypcXG4rICogUG9zaXRpdmUgaWRlbnRpZmljYXRpb24gb2YgcGFnZXMgdGhlIGh3cG9pc29uIGhhbmRsZXIgY2Fubm90IHJlY292ZXI6XFxuKyAqIHBhZ2VzIG93bmVkIGJ5IGtlcm5lbCBpbnRlcm5hbHMgd2l0aCBubyB1c2Vyc3BhY2UgbWFwcGluZyB0byB1bm1hcCwgbm9cXG4rICogZmlsZSBtYXBwaW5nIHRvIGludmFsaWRhdGUsIGFuZCBubyBtaWdyYXRpb24gdGFyZ2V0LlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBib29sIGlzX2tlcm5lbF9vd25lZF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxcbit7XFxuK1xcdHN0cnVjdCBwYWdlICpoZWFkO1xcbitcXHRib29sIGtlcm5lbF9vd25lZDtcXG4rXFxuK1xcdC8qIFBHX3Jlc2VydmVkIGlzIGEgcGVyLXBhZ2UgZmxhZywgbmV2ZXIgc2V0IG9uIGEgY29tcG91bmQgcGFnZS4gKi9cXG4rXFx0aWYgKFBhZ2VSZXNlcnZlZChwYWdlKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBQYWdlLXR5cGUgYml0cyBsaXZlIG9ubHkgb24gdGhlIGhlYWQgcGFnZSwgc28gcmVzb2x2ZSBhbnkgdGFpbFxcbitcXHQgKiBmaXJzdC4gIFRoZSBjaGVjayB0YWtlcyBubyByZWZjb3VudDsgcmVjaGVjayB0aGUgaGVhZCBhZnRlcndhcmRzXFxuK1xcdCAqIHNvIGEgY29uY3VycmVudCBzcGxpdCBvciBjb21wb3VuZCBmcmVlIGNhbm5vdCBsZWF2ZSB1cyB0cnVzdGluZ1xcbitcXHQgKiBhIHN0YWxlIHZpZXcuICBBIGZyZWUtXFx1MDAzZWFsbG9jLVxcdTAwM2VmcmVlIGluIHRoZSBzYW1lIHdpbmRvdyBpcyBzdGlsbFxcbitcXHQgKiBwb3NzaWJsZSBidXQgY2xvc2luZyBpdCB3b3VsZCByZXF1aXJlIHRha2luZyBhIHJlZmVyZW5jZSBoZXJlLlxcbitcXHQgKi9cXG4rcmV0cnk6XFxuK1xcdGhlYWQgPSBjb21wb3VuZF9oZWFkKHBhZ2UpO1xcbitcXHRrZXJuZWxfb3duZWQgPSBQYWdlU2xhYihoZWFkKSB8fCBQYWdlVGFibGUoaGVhZCkgfHxcXG4rXFx0XFx0ICAgICAgIFBhZ2VMYXJnZUttYWxsb2MoaGVhZCk7XFxuK1xcdGlmIChoZWFkICE9IGNvbXBvdW5kX2hlYWQocGFnZSkpXFxuK1xcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdHJldHVybiBrZXJuZWxfb3duZWQ7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgX19nZXRfaHdwb2lzb25fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBmbGFncylcXG4ge1xcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcXG5AQCAtMTM4NSw2ICsxNDI0LDE5IEBAIHN0YXRpYyBpbnQgZ2V0X2FueV9wYWdlKHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbiBcXHRpZiAoZmxhZ3MgXFx1MDAyNiBNRl9DT1VOVF9JTkNSRUFTRUQpXFxuIFxcdFxcdGNvdW50X2luY3JlYXNlZCA9IHRydWU7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBQYWdlIHR5cGVzIHdlIGtub3cgYXJlIGtlcm5lbC1vd25lZCBhbmQgY2Fubm90IGJlIHJlY292ZXJlZC5cXG4rXFx0ICogU2hvcnQtY2lyY3VpdCBiZWZvcmUgdGhlIHNoYWtlX3BhZ2UoKSAvIHJldHJ5IGxvb3AsIHdoaWNoXFxuK1xcdCAqIGNhbm5vdCB0dXJuIGFueSBvZiB0aGVzZSBpbnRvIHNvbWV0aGluZyBIV1BvaXNvbkhhbmRsYWJsZSgpLlxcbitcXHQgKiBEcm9wIHRoZSBjYWxsZXIncyByZWZlcmVuY2UgaWYgTUZfQ09VTlRfSU5DUkVBU0VEIHRvb2sgb25lLlxcbitcXHQgKi9cXG4rXFx0aWYgKGlzX2tlcm5lbF9vd25lZF9wYWdlKHApKSB7XFxuK1xcdFxcdGlmIChjb3VudF9pbmNyZWFzZWQpXFxuK1xcdFxcdFxcdHB1dF9wYWdlKHApO1xcbitcXHRcXHRyZXQgPSAtRU5PVFJFQ09WRVJBQkxFO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4gdHJ5X2FnYWluOlxcbiBcXHRpZiAoIWNvdW50X2luY3JlYXNlZCkge1xcbiBcXHRcXHRyZXQgPSBfX2dldF9od3BvaXNvbl9wYWdlKHAsIGZsYWdzKTtcXG5AQCAtMTQzMiw3ICsxNDg0LDcgQEAgc3RhdGljIGludCBnZXRfYW55X3BhZ2Uoc3RydWN0IHBhZ2UgKnAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuIFxcdFxcdHJldCA9IC1FSU87XFxuIFxcdH1cXG4gb3V0Olxcbi1cXHRpZiAocmV0ID09IC1FSU8pXFxuK1xcdGlmIChyZXQgPT0gLUVJTyB8fCByZXQgPT0gLUVOT1RSRUNPVkVSQUJMRSlcXG4gXFx0XFx0cHJfZXJyKFxcXCIlI2x4OiB1bmhhbmRsYWJsZSBwYWdlLlxcXFxuXFxcIiwgcGFnZV90b19wZm4ocCkpO1xcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG5AQCAtMTQ4OSw3ICsxNTQxLDEwIEBAIHN0YXRpYyBpbnQgX19nZXRfdW5wb2lzb25fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4gICogICAgICAgICAtRUlPIGZvciBwYWdlcyBvbiB3aGljaCB3ZSBjYW4gbm90IGhhbmRsZSBtZW1vcnkgZXJyb3JzLFxcbiAgKiAgICAgICAgIC1FQlVTWSB3aGVuIGdldF9od3BvaXNvbl9wYWdlKCkgaGFzIHJhY2VkIHdpdGggcGFnZSBsaWZlY3ljbGVcXG4gICogICAgICAgICBvcGVyYXRpb25zIGxpa2UgYWxsb2NhdGlvbiBhbmQgZnJlZSxcXG4tICogICAgICAgICAtRUhXUE9JU09OIHdoZW4gdGhlIHBhZ2UgaXMgaHdwb2lzb25lZCBhbmQgdGFrZW4gb2ZmIGZyb20gYnVkZHkuXFxuKyAqICAgICAgICAgLUVIV1BPSVNPTiB3aGVuIHRoZSBwYWdlIGlzIGh3cG9pc29uZWQgYW5kIHRha2VuIG9mZiBmcm9tIGJ1ZGR5LFxcbisgKiAgICAgICAgIC1FTk9UUkVDT1ZFUkFCTEUgZm9yIGtlcm5lbC1vd25lZCBwYWdlcyBpZGVudGlmaWVkIGJ5XFxuKyAqICAgICAgICAgaXNfa2VybmVsX293bmVkX3BhZ2UoKSAoUEdfcmVzZXJ2ZWQsIHNsYWIsXFxuKyAqICAgICAgICAgcGFnZS10YWJsZSwgbGFyZ2Uta21hbGxvYykgdGhhdCB0aGUgaGFuZGxlciBjYW5ub3QgcmVjb3Zlci5cXG4gICovXFxuIHN0YXRpYyBpbnQgZ2V0X2h3cG9pc29uX3BhZ2Uoc3RydWN0IHBhZ2UgKnAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuIHtcXG5AQCAtMjQwMiw3ICsyNDU3LDggQEAgaW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXFxuIFxcdCAqIHRoYXQgbWF5IG1ha2UgcGFnZV9yZWZfZnJlZXplKCkvcGFnZV9yZWZfdW5mcmVlemUoKSBtaXNtYXRjaC5cXG4gXFx0ICovXFxuIFxcdHJlcyA9IGdldF9od3BvaXNvbl9wYWdlKHAsIGZsYWdzKTtcXG4tXFx0aWYgKCFyZXMpIHtcXG4rXFx0c3dpdGNoIChyZXMpIHtcXG4rXFx0Y2FzZSAwOlxcbiBcXHRcXHRpZiAoaXNfZnJlZV9idWRkeV9wYWdlKHApKSB7XFxuIFxcdFxcdFxcdGlmICh0YWtlX3BhZ2Vfb2ZmX2J1ZGR5KHApKSB7XFxuIFxcdFxcdFxcdFxcdHBhZ2VfcmVmX2luYyhwKTtcXG5AQCAtMjQyMSw3ICsyNDc3LDE5IEBAIGludCBtZW1vcnlfZmFpbHVyZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxcbiBcXHRcXHRcXHRyZXMgPSBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0tFUk5FTF9ISUdIX09SREVSLCBNRl9JR05PUkVEKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRnb3RvIHVubG9ja19tdXRleDtcXG4tXFx0fSBlbHNlIGlmIChyZXMgXFx1MDAzYyAwKSB7XFxuK1xcdGNhc2UgMTpcXG4rXFx0XFx0LyogR290IGEgcmVmY291bnQgb24gYSBoYW5kbGFibGUgcGFnZS4gKi9cXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgLUVOT1RSRUNPVkVSQUJMRTpcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogU3RhYmxlIHVuaGFuZGxhYmxlIGtlcm5lbC1vd25lZCBwYWdlIChQR19yZXNlcnZlZCxcXG4rXFx0XFx0ICogc2xhYiwgcGFnZSB0YWJsZXMsIGxhcmdlLWttYWxsb2MpLlxcbitcXHRcXHQgKiBObyByZWNvdmVyeSBwb3NzaWJsZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJlcyA9IGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfS0VSTkVMLCBNRl9JR05PUkVEKTtcXG4rXFx0XFx0Z290byB1bmxvY2tfbXV0ZXg7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdC8qIFRyYW5zaWVudCBsaWZlY3ljbGUgcmFjZSB3aXRoIHRoZSBwYWdlIGFsbG9jYXRvci4gKi9cXG4gXFx0XFx0cmVzID0gYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19HRVRfSFdQT0lTT04sIE1GX0lHTk9SRUQpO1xcbiBcXHRcXHRnb3RvIHVubG9ja19tdXRleDtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXFxuaW5kZXggZTZkZjk2OGYwOTcxYzguLmVkMzIxYWU3MDlkYWNmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcXG5AQCAtMTc0LDYgKzE3NCwxMCBAQCBURVNUX1BST0dTICs9IGtzZnRfdXNlcmZhdWx0ZmQuc2hcXG4gVEVTVF9QUk9HUyArPSBrc2Z0X3ZtYV9tZXJnZS5zaFxcbiBURVNUX1BST0dTICs9IGtzZnRfdm1hbGxvYy5zaFxcbiBcXG4rIyBEZXN0cnVjdGl2ZTogZXZlcnkgc3VjY2Vzc2Z1bCBydW4gcGFuaWNzIHRoZSBrZXJuZWwuICBJbnN0YWxsZWQgYW5kXFxuKyMga2VwdCBleGVjdXRhYmxlLCBidXQgbm90IHJ1biBmcm9tIGEgZGVmYXVsdCBrc2VsZnRlc3QgaW52b2NhdGlvbi5cXG4rVEVTVF9QUk9HU19FWFRFTkRFRCArPSBod3BvaXNvbi1wYW5pYy5zaFxcbitcXG4gVEVTVF9GSUxFUyA6PSB0ZXN0X3ZtYWxsb2Muc2hcXG4gVEVTVF9GSUxFUyArPSB0ZXN0X2htbS5zaFxcbiBURVNUX0ZJTEVTICs9IHZhX2hpZ2hfYWRkcl9zd2l0Y2guc2hcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHdwb2lzb24tcGFuaWMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9od3BvaXNvbi1wYW5pYy5zaFxcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmFhZmMwNmU4OTVkMDFkXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h3cG9pc29uLXBhbmljLnNoXFxuQEAgLTAsMCArMSwyNDkgQEBcXG4rIyEvYmluL2Jhc2hcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisjXFxuKyMgVmVyaWZ5IHZtLnBhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmUgYnkgaW5qZWN0aW5nIGEgaHdwb2lzb25cXG4rIyBlcnJvciBvbiBhIGtlcm5lbC1vd25lZCBwYWdlIGFuZCBjb25maXJtaW5nIHRoZSBrZXJuZWwgcGFuaWNzLlxcbisjXFxuKyMgVGhyZWUgXFxcImtpbmRzXFxcIiBvZiBrZXJuZWwtb3duZWQgcGFnZSBjYW4gYmUgdGFyZ2V0ZWQsIHNlbGVjdGFibGUgdmlhIHRoZVxcbisjIGZpcnN0IHBvc2l0aW9uYWwgYXJndW1lbnQgKGRlZmF1bHQ6IHJvZGF0YSk6XFxuKyNcXG4rIyAgIHJvZGF0YSAgLSBhIFBHX3Jlc2VydmVkIHBhZ2UgaW4gdGhlIGtlcm5lbCByb2RhdGEgcmFuZ2VcXG4rIyAgICAgICAgICAgICAoc291cmNlZCBmcm9tIC9wcm9jL2lvbWVtIFxcXCJLZXJuZWwgcm9kYXRhXFxcIikuICBFeGVyY2lzZXNcXG4rIyAgICAgICAgICAgICBtZW1vcnlfZmFpbHVyZSgpIC1cXHUwMDNlIGdldF9hbnlfcGFnZSgpIG9uIGEgUGFnZVJlc2VydmVkIHBhZ2UuXFxuKyNcXG4rIyAgIHNsYWIgICAgLSBhIHNsYWIgcGFnZSBmb3VuZCB2aWEgL3Byb2Mva3BhZ2VmbGFncyAoS1BGX1NMQUIpLlxcbisjICAgICAgICAgICAgIEV4ZXJjaXNlcyBtZW1vcnlfZmFpbHVyZSgpIC1cXHUwMDNlIGdldF9hbnlfcGFnZSgpIG9uIGEgbm9uXFxuKyMgICAgICAgICAgICAgUEdfcmVzZXJ2ZWQga2VybmVsLW93bmVkIHBhZ2UuICBUaGlzIHBhdGggaXMgd2hhdCBjYXRjaGVzXFxuKyMgICAgICAgICAgICAgcmVncmVzc2lvbnMgd2hlcmUgZ2V0X2FueV9wYWdlKCkgY29sbGFwc2VzIGtlcm5lbC1vd25lZFxcbisjICAgICAgICAgICAgIHBhZ2VzIGludG8gYSB0cmFuc2llbnQgLUVJTyBpbnN0ZWFkIG9mIC1FTk9UUkVDT1ZFUkFCTEUuXFxuKyNcXG4rIyAgIHBndGFibGUgLSBhIHBhZ2UtdGFibGUgcGFnZSBmb3VuZCB2aWEgL3Byb2Mva3BhZ2VmbGFncyAoS1BGX1BHVEFCTEUpLlxcbisjICAgICAgICAgICAgIFNhbWUgcGF0aCBhcyBzbGFiLCBkaWZmZXJlbnQgcGFnZSB0eXBlLlxcbisjXFxuKyMgVGhpcyB0ZXN0IGlzIERFU1RSVUNUSVZFOiBhIHN1Y2Nlc3NmdWwgcnVuIGNyYXNoZXMgdGhlIGtlcm5lbC4gIEl0IGlzXFxuKyMgbWVhbnQgdG8gYmUgZXhlY3V0ZWQgaW5zaWRlIGEgZGlzcG9zYWJsZSBWTSAoZS5nLiB2aXJ0bWUtbmcpIHdpdGggYVxcbisjIHNlcmlhbCBjb25zb2xlIGNhcHR1cmVkIGJ5IHRoZSBoYXJuZXNzLiAgSXQgaXMgc2tpcHBlZCB1bmxlc3MgdGhlXFxuKyMgY2FsbGVyIG9wdHMgaW4gdmlhIFJVTl9ERVNUUlVDVElWRT0xLlxcbisjXFxuKyMgVGVzdCBwYXNzZXMgZXh0ZXJuYWxseTogdGhlIGtlcm5lbCBtdXN0IHBhbmljIHdpdGhcXG4rIyAgIFxcXCJNZW1vcnkgZmFpbHVyZTogXFx1MDAzY3BmblxcdTAwM2U6IHVucmVjb3ZlcmFibGUgcGFnZVxcXCJcXG4rIyBBIHJldHVybiBmcm9tIHRoZSBpbmplY3QgbWVhbnMgbm8gcGFuaWMgZmlyZWQ6IHRoYXQgaXMgYSBmYWlsdXJlLFxcbisjIHVubGVzcyB0aGUgdGFyZ2V0IFBGTiByYWNlZCB0byBhIGRpZmZlcmVudCBwYWdlIHR5cGUgYmVmb3JlIGluamVjdGlvbixcXG4rIyBpbiB3aGljaCBjYXNlIHRoZSBydW4gaXMgaW5jb25jbHVzaXZlIGFuZCBpcyBza2lwcGVkLlxcbisjXFxuKyMgQXV0aG9yOiBCcmVubyBMZWl0YW8gXFx1MDAzY2xlaXRhb0BkZWJpYW4ub3JnXFx1MDAzZVxcbitcXG4rc2V0IC11XFxuK1xcbitrc2Z0X3NraXA9NFxcbitzeXNjdGxfcGF0aD0vcHJvYy9zeXMvdm0vcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZVxcbitpbmplY3RfcGF0aD0vc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9oYXJkX29mZmxpbmVfcGFnZVxcbitrcGFnZWZsYWdzX3BhdGg9L3Byb2Mva3BhZ2VmbGFnc1xcbit1bnBvaXNvbl9wYXRoPS9zeXMva2VybmVsL2RlYnVnL2h3cG9pc29uL3VucG9pc29uLXBmblxcbitcXG4rIyAvcHJvYy9rcGFnZWZsYWdzIGJpdCBwb3NpdGlvbnMgKHNlZSBpbmNsdWRlL3VhcGkvbGludXgva2VybmVsLXBhZ2UtZmxhZ3MuaClcXG4rS1BGX1NMQUI9N1xcbitLUEZfQ09NUE9VTkRfVEFJTD0xNlxcbitLUEZfSFdQT0lTT049MTlcXG4rS1BGX05PUEFHRT0yMFxcbitLUEZfUEdUQUJMRT0yNlxcbitLUEZfUkVTRVJWRUQ9MzJcXG4rXFxuK3BhZ2VzaXplPSQoZ2V0Y29uZiBQQUdFX1NJWkUpXFxuK1xcbitraW5kPSR7MTotcm9kYXRhfVxcbitcXG4ra3NmdF9wcmludCgpIHsgZWNobyBcXFwiIyAkKlxcXCI7IH1cXG4ra3NmdF9leGl0X3NraXAoKSB7IGtzZnRfcHJpbnQgXFxcIiQqXFxcIjsgZXhpdCBcXFwiJGtzZnRfc2tpcFxcXCI7IH1cXG4ra3NmdF9leGl0X2ZhaWwoKSB7IGVjaG8gXFxcIm5vdCBvayAxICQqXFxcIjsgZXhpdCAxOyB9XFxuK1xcbitpZiBbIFxcXCIkKGlkIC11KVxcXCIgLW5lIDAgXTsgdGhlblxcbitcXHRrc2Z0X2V4aXRfc2tpcCBcXFwibXVzdCBydW4gYXMgcm9vdFxcXCJcXG4rZmlcXG4rXFxuK2lmIFsgISAtdyBcXFwiJHN5c2N0bF9wYXRoXFxcIiBdOyB0aGVuXFxuK1xcdGtzZnRfZXhpdF9za2lwIFxcXCIkc3lzY3RsX3BhdGggbm90IHByZXNlbnQgKGtlcm5lbCB3aXRob3V0IHRoZSBzeXNjdGw/KVxcXCJcXG4rZmlcXG4rXFxuK2lmIFsgISAtdyBcXFwiJGluamVjdF9wYXRoXFxcIiBdOyB0aGVuXFxuK1xcdGtzZnRfZXhpdF9za2lwIFxcXCIkaW5qZWN0X3BhdGggbm90IHByZXNlbnQgKG5vIE1FTU9SWV9IT1RQTFVHPylcXFwiXFxuK2ZpXFxuK1xcbitpZiBbIFxcXCIke1JVTl9ERVNUUlVDVElWRTotMH1cXFwiICE9IFxcXCIxXFxcIiBdOyB0aGVuXFxuK1xcdGtzZnRfZXhpdF9za2lwIFxcXCJkZXN0cnVjdGl2ZSB0ZXN0OyByZS1ydW4gd2l0aCBSVU5fREVTVFJVQ1RJVkU9MSBpbnNpZGUgYSBkaXNwb3NhYmxlIFZNXFxcIlxcbitmaVxcbitcXG4rIyBQaWNrIGEgUEZOIGluc2lkZSB0aGUga2VybmVsIGltYWdlIHJvZGF0YSByZWdpb24gb2YgL3Byb2MvaW9tZW0uXFxuKyMgVGhpcyBpcyBwcmVmZXJyZWQgb3ZlciBhIHRvcC1sZXZlbCBcXFwiUmVzZXJ2ZWRcXFwiIGVudHJ5IGJlY2F1c2UgdG9wLWxldmVsXFxuKyMgUmVzZXJ2ZWQgcmFuZ2VzIGFyZSBvZnRlbiBmaXJtd2FyZSBob2xlcyB0aGF0IGhhdmUgbm8gYmFja2luZyBzdHJ1Y3RcXG4rIyBwYWdlOyBwZm5fdG9fb25saW5lX3BhZ2UoKSByZXR1cm5zIE5VTEwgb24gdGhvc2UgYW5kIG1lbW9yeV9mYWlsdXJlKClcXG4rIyBiYWlscyBvdXQgd2l0aCAtRU5YSU8gYmVmb3JlIHJlYWNoaW5nIHRoZSBwYW5pYyBwYXRoLlxcbisjXFxuKyMgXFxcIktlcm5lbCByb2RhdGFcXFwiIGlzIHJlcG9ydGVkIGFzIGEgc3ViLXJlc291cmNlIG9mIFxcXCJTeXN0ZW0gUkFNXFxcIiBvbiBldmVyeVxcbisjIG1ham9yIGFyY2hpdGVjdHVyZSwgd2hpY2ggZ3VhcmFudGVlczpcXG4rIyAgIC0gdGhlIFBGTiBpcyBiYWNrZWQgYnkgc3RydWN0IHBhZ2UgKHdpdGhpbiBhbiBvbmxpbmUgbWVtb3J5IHJhbmdlKTtcXG4rIyAgIC0gUEdfcmVzZXJ2ZWQgaXMgc2V0IG9uIHRoZSBwYWdlIChrZXJuZWwgaW1hZ2UgYXJlYSk7XFxuKyMgICAtIHRoZSBtZW1vcnkgaXMgcmVhZC1vbmx5LCBzbyBzZXR0aW5nIFBHX2h3cG9pc29uIG9uIGl0IGRvZXMgbm90XFxuKyMgICAgIGNvcnJ1cHQgd3JpdGFibGUga2VybmVsIHN0YXRlIGlmIHRoZSBwYW5pYyBzb21laG93IGRvZXMgbm90IGZpcmUuXFxuKyNcXG4rIyAvcHJvYy9pb21lbSBlbnRyaWVzIGxvb2sgbGlrZSAoaW5kZW50ZWQgZm9yIHN1Yi1yZXNvdXJjZXMpOlxcbisjICAgICBcXFwiICAwMjUwMDAwMC0wMmZmZmZmZiA6IEtlcm5lbCByb2RhdGFcXFwiXFxuK3BpY2tfcm9kYXRhX3BoeXNfYWRkcigpIHtcXG4rXFx0YXdrIC12IHBhZ2VzaXplPVxcXCIkKGdldGNvbmYgUEFHRV9TSVpFKVxcXCIgJ1xcbitcXHQjIENvbnZlcnQgYSBoZXggc3RyaW5nIHRvIGEgbnVtYmVyIHdpdGhvdXQgcmVseWluZyBvbiB0aGUgZ2F3ay1vbmx5XFxuK1xcdCMgc3RydG9udW0oKS4gIG1hd2sgbGFja3MgaXQgYW5kIHdvdWxkIG90aGVyd2lzZSBzcHVyaW91c2x5IHNraXBcXG4rXFx0IyB0aGlzIHRlc3Qgb24gZGlzdHJvcyB0aGF0IHNoaXAgbWF3ayBhcyAvdXNyL2Jpbi9hd2suXFxuK1xcdGZ1bmN0aW9uIGhleDJudW0ocywgICBuLCBpLCBjLCB2KSB7XFxuK1xcdFxcdG4gPSAwXFxuK1xcdFxcdGZvciAoaSA9IDE7IGkgXFx1MDAzYz0gbGVuZ3RoKHMpOyBpKyspIHtcXG4rXFx0XFx0XFx0YyA9IHRvbG93ZXIoc3Vic3RyKHMsIGksIDEpKVxcbitcXHRcXHRcXHR2ID0gaW5kZXgoXFxcIjAxMjM0NTY3ODlhYmNkZWZcXFwiLCBjKSAtIDFcXG4rXFx0XFx0XFx0aWYgKHYgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gLTFcXG4rXFx0XFx0XFx0biA9IG4gKiAxNiArIHZcXG4rXFx0XFx0fVxcbitcXHRcXHRyZXR1cm4gblxcbitcXHR9XFxuK1xcdC86IEtlcm5lbCByb2RhdGFbWzpzcGFjZTpdXSokLyB7XFxuK1xcdFxcdHN1YigvXltbOnNwYWNlOl1dKy8sIFxcXCJcXFwiKVxcbitcXHRcXHRuID0gc3BsaXQoJDAsIGEsIC9bLSBdLylcXG4rXFx0XFx0c3RhcnQgPSBoZXgybnVtKGFbMV0pXFxuK1xcdFxcdGVuZCAgID0gaGV4Mm51bShhWzJdKVxcbitcXHRcXHRpZiAoZW5kIFxcdTAwM2M9IHN0YXJ0KVxcbitcXHRcXHRcXHRuZXh0XFxuK1xcdFxcdCMgUGFnZS1hbGlnbiB1cHdhcmQgYW5kIGVtaXQgdGhlIGZpcnN0IGJ5dGUgb2YgdGhhdCBwYWdlLlxcbitcXHRcXHRwZm4gPSBpbnQoKHN0YXJ0ICsgcGFnZXNpemUgLSAxKSAvIHBhZ2VzaXplKVxcbitcXHRcXHRwcmludGYgXFxcIjB4JXhcXFxcblxcXCIsIHBmbiAqIHBhZ2VzaXplXFxuK1xcdFxcdGV4aXQgMFxcbitcXHR9XFxuK1xcdCcgL3Byb2MvaW9tZW1cXG4rfVxcbitcXG4rIyBXYWxrIC9wcm9jL2twYWdlZmxhZ3MgYW5kIHJldHVybiB0aGUgcGh5cyBhZGRyIG9mIHRoZSBmaXJzdCBQRk4gdGhhdFxcbisjIGhhcyBiaXQgJDEgc2V0LCB3aXRoIEtQRl9IV1BPSVNPTiwgS1BGX05PUEFHRSBhbmQgS1BGX0NPTVBPVU5EX1RBSUxcXG4rIyBhbGwgY2xlYXIgKHNvIHdlIGF0dGFjayBhIHJlYWwsIG5vbi10YWlsLCBub3QtYWxyZWFkeS1wb2lzb25lZCBwYWdlKS5cXG4rI1xcbisjIFdlIHNraXAgdGhlIGZpcnN0IDE2IE1pQiBvZiBQRk5zIHRvIHN0ZXAgcGFzdCBsb3ctbWVtb3J5IHNwZWNpYWxcXG4rIyByYW5nZXMgKEJJT1MvRUZJL0FDUEkvZXRjLikgdGhhdCBvZnRlbiBhcmUgUEdfcmVzZXJ2ZWQgYW5kIHdvdWxkIG5vdFxcbisjIGV4aGliaXQgdGhlIHNsYWIvcGd0YWJsZSB0eXBlIHdlIGFyZSBsb29raW5nIGZvci5cXG4rcGlja19rcGFnZWZsYWdzX3BoeXNfYWRkcigpIHtcXG4rXFx0bG9jYWwgd2FudF9iaXQ9JDFcXG4rXFx0bG9jYWwgcGFnZXNpemUgc2tpcF9wZm5cXG4rXFxuK1xcdFsgLXIgXFxcIiRrcGFnZWZsYWdzX3BhdGhcXFwiIF0gfHwgcmV0dXJuXFxuK1xcbitcXHRwYWdlc2l6ZT0kKGdldGNvbmYgUEFHRV9TSVpFKVxcbitcXHRza2lwX3Bmbj0kKCgoMTYgKiAxMDI0ICogMTAyNCkgLyBwYWdlc2l6ZSkpXFxuK1xcbitcXHRvZCAtQW4gLXR4OCAtdiAtdzggLWogXFxcIiQoKHNraXBfcGZuICogOCkpXFxcIiBcXFwiJGtwYWdlZmxhZ3NfcGF0aFxcXCIgMlxcdTAwM2UvZGV2L251bGwgfCBcXFxcXFxuK1xcdGF3ayAtdiB3YW50X2JpdD1cXFwiJHdhbnRfYml0XFxcIiBcXFxcXFxuK1xcdCAgICAtdiBod3BfYml0PVxcXCIkS1BGX0hXUE9JU09OXFxcIiBcXFxcXFxuK1xcdCAgICAtdiBub3BhZ2VfYml0PVxcXCIkS1BGX05PUEFHRVxcXCIgXFxcXFxcbitcXHQgICAgLXYgdGFpbF9iaXQ9XFxcIiRLUEZfQ09NUE9VTkRfVEFJTFxcXCIgXFxcXFxcbitcXHQgICAgLXYgYmFzZV9wZm49XFxcIiRza2lwX3BmblxcXCIgXFxcXFxcbitcXHQgICAgLXYgcGFnZXNpemU9XFxcIiRwYWdlc2l6ZVxcXCIgJ1xcbitcXHQjIFRlc3Qgd2hldGhlciBiaXQgXFxcImJcXFwiIGlzIHNldCBpbiB0aGUgMTYtaGV4LWRpZ2l0IHZhbHVlIFxcXCJoZXhcXFwiLlxcbitcXHQjIERvbmUgd2l0aCBzdWJzdHJpbmcgKyBwZXItZGlnaXQgbG9va3VwIHNvIHdlIG5ldmVyIHJlbHkgb24gYXdrXFxuK1xcdCMgYml0d2lzZSBvcGVyYXRvcnMgKG1hd2sgbGFja3MgdGhlbSksIDY0LWJpdCBGUCBwcmVjaXNpb24gb3IgdGhlXFxuK1xcdCMgZ2F3ay1vbmx5IHN0cnRvbnVtKCkuXFxuK1xcdGZ1bmN0aW9uIGJpdF9zZXQoaGV4LCBiLCAgICBkaSwgYmksIGMsIHYpIHtcXG4rXFx0XFx0ZGkgPSBpbnQoYiAvIDQpXFxuK1xcdFxcdGJpID0gYiAtIGRpICogNFxcbitcXHRcXHRjID0gc3Vic3RyKGhleCwgbGVuZ3RoKGhleCkgLSBkaSwgMSlcXG4rXFx0XFx0diA9IGluZGV4KFxcXCIwMTIzNDU2Nzg5YWJjZGVmXFxcIiwgdG9sb3dlcihjKSkgLSAxXFxuK1xcdFxcdGlmIChiaSA9PSAwKSByZXR1cm4gKHYgJSAyKSA9PSAxXFxuK1xcdFxcdGlmIChiaSA9PSAxKSByZXR1cm4gaW50KHYgLyAyKSAlIDIgPT0gMVxcbitcXHRcXHRpZiAoYmkgPT0gMikgcmV0dXJuIGludCh2IC8gNCkgJSAyID09IDFcXG4rXFx0XFx0cmV0dXJuIGludCh2IC8gOCkgJSAyID09IDFcXG4rXFx0fVxcbitcXHR7XFxuK1xcdFxcdGdzdWIoL15bWzpzcGFjZTpdXSsvLCBcXFwiXFxcIilcXG4rXFx0XFx0aCA9ICQxXFxuK1xcdFxcdGlmIChiaXRfc2V0KGgsIHdhbnRfYml0KSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIWJpdF9zZXQoaCwgaHdwX2JpdCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICFiaXRfc2V0KGgsIG5vcGFnZV9iaXQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhYml0X3NldChoLCB0YWlsX2JpdCkpIHtcXG4rXFx0XFx0XFx0cGZuID0gYmFzZV9wZm4gKyBOUiAtIDFcXG4rXFx0XFx0XFx0cHJpbnRmIFxcXCIweCV4XFxcXG5cXFwiLCBwZm4gKiBwYWdlc2l6ZVxcbitcXHRcXHRcXHRleGl0IDBcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdCdcXG4rfVxcbitcXG4rIyBSZXR1cm4gMCBpZiAvcHJvYy9rcGFnZWZsYWdzIGJpdCAkMiBpcyBzZXQgZm9yIFBGTiAkMSwgMSBpZiBpdCBpc1xcbisjIGNsZWFyLCBvciAyIGlmIHRoZSB3b3JkIGNhbm5vdCBiZSByZWFkLiAgVXNlZCB0byByZS1jb25maXJtIHRoZSB0YXJnZXRcXG4rIyBwYWdlIHR5cGUgYWZ0ZXIgYSBub24tcGFuaWNraW5nIGluamVjdC5cXG4ra3BhZ2VmbGFnc19iaXRfc2V0KCkge1xcbitcXHRsb2NhbCB3b3JkXFxuK1xcbitcXHR3b3JkPSQob2QgLUFuIC10eDggLXYgLWogXFxcIiQoKCQxICogOCkpXFxcIiAtTiA4IFxcXCIka3BhZ2VmbGFnc19wYXRoXFxcIiAyXFx1MDAzZS9kZXYvbnVsbCB8IHRyIC1kICdbOnNwYWNlOl0nKVxcbitcXHRbIC1uIFxcXCIkd29yZFxcXCIgXSB8fCByZXR1cm4gMlxcbitcXHQoKCAoMTYjJHdvcmQgXFx1MDAzZVxcdTAwM2UgJDIpIFxcdTAwMjYgMSApKVxcbit9XFxuK1xcbisjIEJlc3QtZWZmb3J0OiBkcm9wIHRoZSBQR19od3BvaXNvbiBtYXJrZXIgc2V0IGJ5IHRoZSBpbmplY3Qgc28gYSBmYWlsZWRcXG4rIyBydW4gZG9lcyBub3QgbGVhdmUgYSBwb2lzb25lZCBwYWdlIGJlaGluZC4gIGhhcmRfb2ZmbGluZV9wYWdlKCkgaW5qZWN0c1xcbisjIHdpdGggTUZfU1dfU0lNVUxBVEVELCBzbyB0aGUgcGFnZSBzdGF5cyB1bnBvaXNvbmFibGUgdGhyb3VnaCB0aGVcXG4rIyBod3BvaXNvbiBkZWJ1Z2ZzIGludGVyZmFjZSAobmVlZHMgQ09ORklHX0hXUE9JU09OX0lOSkVDVCArIGRlYnVnZnMpLlxcbit0cnlfdW5wb2lzb24oKSB7XFxuK1xcdFsgLXcgXFxcIiR1bnBvaXNvbl9wYXRoXFxcIiBdIHx8IHJldHVybiAwXFxuK1xcdGVjaG8gXFxcIiQxXFxcIiBcXHUwMDNlIFxcXCIkdW5wb2lzb25fcGF0aFxcXCIgMlxcdTAwM2UvZGV2L251bGwgfHwgdHJ1ZVxcbit9XFxuK1xcbitjYXNlIFxcXCIka2luZFxcXCIgaW5cXG4rcm9kYXRhKVxcbitcXHRwaHlzX2FkZHI9JChwaWNrX3JvZGF0YV9waHlzX2FkZHIpXFxuK1xcdHJlY2hlY2tfYml0PSRLUEZfUkVTRVJWRURcXG4rXFx0bWlzc2luZ19tc2c9J25vIFxcXCJLZXJuZWwgcm9kYXRhXFxcIiBlbnRyeSBpbiAvcHJvYy9pb21lbSdcXG4rXFx0OztcXG4rc2xhYilcXG4rXFx0cGh5c19hZGRyPSQocGlja19rcGFnZWZsYWdzX3BoeXNfYWRkciBcXFwiJEtQRl9TTEFCXFxcIilcXG4rXFx0cmVjaGVja19iaXQ9JEtQRl9TTEFCXFxuK1xcdG1pc3NpbmdfbXNnPVxcXCJubyB1c2FibGUgc2xhYiBQRk4gZm91bmQgaW4gJGtwYWdlZmxhZ3NfcGF0aFxcXCJcXG4rXFx0OztcXG4rcGd0YWJsZSlcXG4rXFx0cGh5c19hZGRyPSQocGlja19rcGFnZWZsYWdzX3BoeXNfYWRkciBcXFwiJEtQRl9QR1RBQkxFXFxcIilcXG4rXFx0cmVjaGVja19iaXQ9JEtQRl9QR1RBQkxFXFxuK1xcdG1pc3NpbmdfbXNnPVxcXCJubyB1c2FibGUgcGFnZS10YWJsZSBQRk4gZm91bmQgaW4gJGtwYWdlZmxhZ3NfcGF0aFxcXCJcXG4rXFx0OztcXG4rKilcXG4rXFx0a3NmdF9leGl0X2ZhaWwgXFxcInVua25vd24ga2luZCAnJGtpbmQnIChleHBlY3RlZDogcm9kYXRhfHNsYWJ8cGd0YWJsZSlcXFwiXFxuK1xcdDs7XFxuK2VzYWNcXG4rXFxuK2lmIFsgLXogXFxcIiRwaHlzX2FkZHJcXFwiIF07IHRoZW5cXG4rXFx0a3NmdF9leGl0X3NraXAgXFxcIiRtaXNzaW5nX21zZ1xcXCJcXG4rZmlcXG4rXFxuK2tzZnRfcHJpbnQgXFxcImVuYWJsaW5nICRzeXNjdGxfcGF0aFxcXCJcXG4rcHJpb3I9JChjYXQgXFxcIiRzeXNjdGxfcGF0aFxcXCIpXFxuK2VjaG8gMSBcXHUwMDNlIFxcXCIkc3lzY3RsX3BhdGhcXFwiIHx8IGtzZnRfZXhpdF9mYWlsIFxcXCJmYWlsZWQgdG8gZW5hYmxlIHN5c2N0bFxcXCJcXG4rXFxuK3Bmbj0kKChwaHlzX2FkZHIgLyBwYWdlc2l6ZSkpXFxuK2tzZnRfcHJpbnQgXFxcImluamVjdGluZyBod3BvaXNvbiBhdCBwaHlzIDB4JChwcmludGYgJyV4JyBcXFwiJHBoeXNfYWRkclxcXCIpIChwZm4gMHgkKHByaW50ZiAnJXgnIFxcXCIkcGZuXFxcIiksIGtpbmQ9JGtpbmQpXFxcIlxcbitrc2Z0X3ByaW50IFxcXCJleHBlY3Rpbmcga2VybmVsIHBhbmljOiAnTWVtb3J5IGZhaWx1cmU6IFxcdTAwM2NwZm5cXHUwMDNlOiB1bnJlY292ZXJhYmxlIHBhZ2UnXFxcIlxcbitcXG4rIyBBIHN1Y2Nlc3NmdWwgcnVuIG5ldmVyIHJldHVybnMgZnJvbSB0aGUgaW5qZWN0IC0tIGl0IHBhbmljcyB0aGUga2VybmVsLlxcbisjIFJlYWNoaW5nIHRoZSBjb2RlIGJlbG93IHRoZXJlZm9yZSBtZWFucyBubyBwYW5pYyBmaXJlZC4gIE5vdGUgd2hldGhlclxcbisjIHRoZSB3cml0ZSBpdHNlbGYgc3VjY2VlZGVkLCB0aGVuIHB1dCB0aGUgbWFjaGluZSBiYWNrOiByZXN0b3JlIHRoZVxcbisjIHN5c2N0bCBhbmQgYmVzdC1lZmZvcnQgdW5wb2lzb24gdGhlIHBhZ2Ugd2UganVzdCBtYXJrZWQuXFxuK2lmIGVjaG8gXFxcIiRwaHlzX2FkZHJcXFwiIFxcdTAwM2UgXFxcIiRpbmplY3RfcGF0aFxcXCI7IHRoZW5cXG4rXFx0dmVyZGljdD1cXFwiaW5qZWN0IHJldHVybmVkIHdpdGhvdXQgcGFuaWM7IHN5c2N0bCBpbmVmZmVjdGl2ZVxcXCJcXG4rZWxzZVxcbitcXHR2ZXJkaWN0PVxcXCJpbmplY3QgZmFpbGVkIGJlZm9yZSByZWFjaGluZyB0aGUgcGFuaWMgcGF0aFxcXCJcXG4rZmlcXG4rXFxuK2VjaG8gXFxcIiRwcmlvclxcXCIgXFx1MDAzZSBcXFwiJHN5c2N0bF9wYXRoXFxcIlxcbit0cnlfdW5wb2lzb24gXFxcIiRwZm5cXFwiXFxuK1xcbisjIFRoZSBwYWdlIHR5cGUgY2FuIGNoYW5nZSBiZXR3ZWVuIHNlbGVjdGlvbiBhbmQgaW5qZWN0aW9uIChlLmcuIGEgc2xhYlxcbisjIG9yIHBhZ2UtdGFibGUgcGFnZSBpcyBmcmVlZCBhbmQgcmV1c2VkKS4gIE9ubHkgdHJlYXQgYSBtaXNzaW5nIHBhbmljIGFzXFxuKyMgYSBmYWlsdXJlIGlmIHRoZSB0YXJnZXQgUEZOIGlzIHN0aWxsIHRoZSBrZXJuZWwtb3duZWQgdHlwZSB3ZSBhaW1lZCBhdDtcXG4rIyBpZiBpdCByYWNlZCB0byBhbm90aGVyIHR5cGUgdGhlIHJ1biBpcyBpbmNvbmNsdXNpdmUsIHNvIHNraXAgaW5zdGVhZC5cXG4ra3BhZ2VmbGFnc19iaXRfc2V0IFxcXCIkcGZuXFxcIiBcXFwiJHJlY2hlY2tfYml0XFxcIlxcbitjYXNlICQ/IGluXFxuKzApXFx0a3NmdF9leGl0X2ZhaWwgXFxcIiR2ZXJkaWN0IChwYWdlIHN0aWxsICRraW5kKVxcXCIgOztcXG4rMSlcXHRrc2Z0X2V4aXRfc2tpcCBcXFwidGFyZ2V0IFBGTiBubyBsb25nZXIgJGtpbmQ7IHJhY2VkIGJlZm9yZSBpbmplY3QsIGluY29uY2x1c2l2ZVxcXCIgOztcXG4rKilcXHRrc2Z0X2V4aXRfZmFpbCBcXFwiJHZlcmRpY3QgKGNvdWxkIG5vdCByZWNvbmZpcm0gcGFnZSB0eXBlIHZpYSAka3BhZ2VmbGFnc19wYXRoKVxcXCIgOztcXG4rZXNhY1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMzowNToyMS45ODI0ODQ4NDNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI0NjcwNTkzMDA4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiSFdQT0lTT05fSU5KRUNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtb3J5X2ZhaWx1cmVcIixcbiAgICBcImdldF9hbnlfcGFnZVwiLFxuICAgIFwiYWN0aW9uX3Jlc3VsdFwiLFxuICAgIFwicGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZlwiLFxuICAgIFwiaXNfa2VybmVsX293bmVkX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZyBsb2dpYyAoYG1lbW9yeV9mYWlsdXJlYCwgYGdldF9hbnlfcGFnZWApIHRvIGV4cGxpY2l0bHkgaWRlbnRpZnkgYW5kIHNob3J0LWNpcmN1aXQgb24ga2VybmVsLW93bmVkIHBhZ2VzIChzbGFiLCBwYWdlIHRhYmxlcywgcmVzZXJ2ZWQsIGxhcmdlIGttYWxsb2MpLiBJdCBhbHNvIGludHJvZHVjZXMgYSBuZXcgc3lzY3RsIHRvIHBhbmljIG9uIHN1Y2ggdW5yZWNvdmVyYWJsZSBlcnJvcnMuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBoYXJkd2FyZSBlcnJvciBpbmplY3Rpb24gaW50ZXJmYWNlcyAoZS5nLiwgYC9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2hhcmRfb2ZmbGluZV9wYWdlYCBvciBgbWFkdmlzZShNQURWX0hXUE9JU09OKWApLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDU4MTc0MjI1OWM0MWIyZjFkNzcxMmE0NGIwYWIwMDg2NTA4NTA3NTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1biAyNiAyMzowNToxOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdFxuaW5kZXggYjliMGMyMThiZmI0NDAuLjIyY2M1NGNhYzNiMjFkIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3RcbkBAIC02Nyw2ICs2Nyw3IEBAIEN1cnJlbnRseSwgdGhlc2UgZmlsZXMgYXJlIGluIC9wcm9jL3N5cy92bTpcbiAtIHBhZ2UtY2x1c3RlclxuIC0gcGFnZV9sb2NrX3VuZmFpcm5lc3NcbiAtIHBhbmljX29uX29vbVxuKy0gcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZVxuIC0gcGVyY3B1X3BhZ2VsaXN0X2hpZ2hfZnJhY3Rpb25cbiAtIHN0YXRfaW50ZXJ2YWxcbiAtIHN0YXRfcmVmcmVzaFxuQEAgLTkyNSw2ICs5MjYsODUgQEAgcGFuaWNfb25fb29tPTIra2R1bXAgZ2l2ZXMgeW91IHZlcnkgc3Ryb25nIHRvb2wgdG8gaW52ZXN0aWdhdGVcbiB3aHkgb29tIGhhcHBlbnMuIFlvdSBjYW4gZ2V0IHNuYXBzaG90LlxuIFxuIFxuK3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmVcbis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK1xuK1doZW4gYSBoYXJkd2FyZSBtZW1vcnkgZXJyb3IgKGUuZy4gbXVsdGktYml0IEVDQykgaGl0cyBhIGtlcm5lbCBwYWdlXG4rdGhhdCBjYW5ub3QgYmUgcmVjb3ZlcmVkIGJ5IHRoZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGVyLCB0aGUgZGVmYXVsdFxuK2JlaGF2aW91ciBpcyB0byBpZ25vcmUgdGhlIGVycm9yIGFuZCBjb250aW51ZSBvcGVyYXRpb24uICBUaGlzIGlzXG4rZGFuZ2Vyb3VzIGJlY2F1c2UgdGhlIGNvcnJ1cHRlZCBkYXRhIHJlbWFpbnMgYWNjZXNzaWJsZSB0byB0aGUga2VybmVsLFxuK3Jpc2tpbmcgc2lsZW50IGRhdGEgY29ycnVwdGlvbiBvciBhIGRlbGF5ZWQgY3Jhc2ggd2hlbiB0aGUgcG9pc29uZWRcbittZW1vcnkgaXMgbmV4dCBhY2Nlc3NlZC5cbitcbitXaGVuIGVuYWJsZWQsIHRoaXMgc3lzY3RsIHRyaWdnZXJzIGEgcGFuaWMgb24gbWVtb3J5IGZhaWx1cmUgZXZlbnRzXG4raGl0dGluZyBrZXJuZWwtb3duZWQgcGFnZXMgdGhhdCB0aGUgaGFuZGxlciBjYW5ub3QgcmVjb3ZlcjpcbitgYFBhZ2VSZXNlcnZlZGBgIChmaXJtd2FyZSByZXNlcnZhdGlvbnMsIGtlcm5lbCBpbWFnZSwgdkRTTywgemVyb1xuK3BhZ2UsIGFuZCBzaW1pbGFyIG1lbWJsb2NrLXJlc2VydmVkIHJlZ2lvbnMpLCBgYFBhZ2VTbGFiYGAsXG4rYGBQYWdlVGFibGVgYCwgYW5kIGBgUGFnZUxhcmdlS21hbGxvY2BgLiAgVGhlc2UgYXJlIG93bmVkIGJ5IHRoZVxuK2tlcm5lbCBhbmQgdGhlIG1lbW9yeSBmYWlsdXJlIGhhbmRsZXIgY2Fubm90IHJlbGlhYmx5IGV2aWN0IHRoZWlyXG4rY29udGVudHMuXG4rXG4rT3RoZXIgdW5yZWNvdmVyYWJsZSBrZXJuZWwtb3duZWQgcG9wdWxhdGlvbnMgKHZtYWxsb2MgYWxsb2NhdGlvbnMsXG4ra2VybmVsIHN0YWNrIHBhZ2VzLCAuLi4pIGFyZSBub3QgY3VycmVudGx5IGNvdmVyZWQgYmVjYXVzZSB0aGVcbitoYW5kbGVyIGhhcyBubyBwYWdlLXR5cGUgc2lnbmFsIHRoYXQgZGlzdGluZ3Vpc2hlcyB0aGVtIGZyb20gYVxuK3VzZXJzcGFjZSBmb2xpbyB0ZW1wb3JhcmlseSBvZmYgdGhlIExSVSBkdXJpbmcgbWlncmF0aW9uIG9yXG4rY29tcGFjdGlvbi4gIFN1Y2ggcGFnZXMgc3RpbGwgZ28gdGhyb3VnaCB0aGUgc3RhbmRhcmRcbitNRl9NU0dfR0VUX0hXUE9JU09OIHBhdGg6IGBgUEdfaHdwb2lzb25gYCBpcyBzZXQgb24gdGhlbSBhbmQgYVxuK2RlbGF5ZWQgY3Jhc2ggb24gdGhlIG5leHQgYWNjZXNzIHJlbWFpbnMgcG9zc2libGUuICBDb3ZlcmFnZSBtYXlcbitncm93IGFzIHRoZSBoYW5kbGVyIGdhaW5zIHN0cm9uZ2VyIGtlcm5lbC1vd25lcnNoaXAgc2lnbmFscy5cbitcbitSZWNvdmVyYWJsZSBmYWlsdXJlIHBhdGhzIGFyZSBhbHNvIGludGVudGlvbmFsbHkgbGVmdCBvdXQ6IGluLWZsaWdodFxuK2J1ZGR5IGFsbG9jYXRpb25zIGFuZCBvdGhlciB0cmFuc2llbnQgcmFjZXMgd2l0aCB0aGUgcGFnZSBhbGxvY2F0b3JcbitjYW4gcmVhY2ggdGhlIHNhbWUgZGlhZ25vc3RpYywgYW5kIHBhbmlja2luZyBvbiB0aGVtIHdvdWxkIHJpc2tcbitraWxsaW5nIHRoZSBib3ggZm9yIGEgcGFnZSBkZXN0aW5lZCBmb3IgdXNlcnNwYWNlIHdoZXJlIHRoZSBzdGFuZGFyZFxuK1NJR0JVUyByZWNvdmVyeSBwYXRoIGFwcGxpZXMuICBQYWdlcyB3aG9zZSBzdGF0ZSBjb3VsZCBub3QgYmVcbitjbGFzc2lmaWVkIGF0IGFsbCBhcmUgbm90IGNvdmVyZWQgZWl0aGVyLCBzaW5jZSBhbiB1bmtub3duIHN0YXRlIGlzXG4rbm90IGEgc291bmQgYmFzaXMgZm9yIGEgcGFuaWMgZGVjaXNpb24uXG4rXG4rRm9yIG1hbnkgZW52aXJvbm1lbnRzIGl0IGlzIHByZWZlcmFibGUgdG8gcGFuaWMgaW1tZWRpYXRlbHkgd2l0aCBhIGNsZWFuXG4rY3Jhc2ggZHVtcCB0aGF0IGNhcHR1cmVzIHRoZSBvcmlnaW5hbCBlcnJvciBjb250ZXh0LCByYXRoZXIgdGhhbiB0b1xuK2NvbnRpbnVlIGFuZCBmYWNlIGEgcmFuZG9tIGNyYXNoIGxhdGVyIHdob3NlIGNhdXNlIGlzIGRpZmZpY3VsdCB0b1xuK2RpYWdub3NlLlxuK1xuK1VzZSBjYXNlc1xuKy0tLS0tLS0tLVxuK1xuK1RoaXMgb3B0aW9uIGlzIG1vc3QgdXNlZnVsIGluIGVudmlyb25tZW50cyB3aGVyZSB1bmF0dHJpYnV0ZWQgY3Jhc2hlc1xuK2FyZSBleHBlbnNpdmUgdG8gZGVidWcgb3Igd2hlcmUgZGF0YSBpbnRlZ3JpdHkgbXVzdCB0YWtlIHByZWNlZGVuY2VcbitvdmVyIGF2YWlsYWJpbGl0eTpcbitcbisqIExhcmdlIGZsZWV0cywgd2hlcmUgbXVsdGktYml0IEVDQyBlcnJvcnMgb24ga2VybmVsIHBhZ2VzIGFyZSBvYnNlcnZlZFxuKyAgcmVndWxhcmx5IGFuZCBwb3N0LW1vcnRlbSBhbmFseXNpcyBvZiBhbiB1bnJlbGF0ZWQgZG93bnN0cmVhbSBjcmFzaFxuKyAgKG9mdGVuIHNlY29uZHMgdG8gbWludXRlcyBhZnRlciB0aGUgb3JpZ2luYWwgZXJyb3IpIGNvbnN1bWVzXG4rICBzaWduaWZpY2FudCBlbmdpbmVlcmluZyBlZmZvcnQuXG4rXG4rKiBTeXN0ZW1zIGNvbmZpZ3VyZWQgd2l0aCBrZHVtcCwgd2hlcmUgcGFuaWNraW5nIGF0IHRoZSBtb21lbnQgb2YgdGhlXG4rICBoYXJkd2FyZSBlcnJvciBwcm9kdWNlcyBhIHZtY29yZSB0aGF0IHN0aWxsIGNvbnRhaW5zIHRoZSBmYXVsdGluZ1xuKyAgYWRkcmVzcywgdGhlIGFmZmVjdGVkIHBhZ2Ugc3RhdGUsIGFuZCB0aGUgb3JpZ2luYXRpbmcgTUNFL0dIRVNcbisgIHJlY29yZCDigJQgY29udGV4dCB0aGF0IGlzIHR5cGljYWxseSBsb3N0IGJ5IHRoZSB0aW1lIGEgZGVsYXllZCBjcmFzaFxuKyAgb2NjdXJzLlxuK1xuKyogSGlnaC1hdmFpbGFiaWxpdHkgY2x1c3RlcnMgdGhhdCByZWx5IG9uIGZhc3QsIGRldGVybWluaXN0aWMgbm9kZVxuKyAgZmFpbHVyZSBmb3IgZmFpbG92ZXIsIGFuZCBwcmVmZXIgYW4gaW1tZWRpYXRlIHBhbmljIG92ZXIgc2lsZW50IGRhdGFcbisgIGNvcnJ1cHRpb24gcHJvcGFnYXRpbmcgdG8gcmVwbGljYXMgb3IgcGVyc2lzdGVudCBzdG9yYWdlLlxuK1xuKyogS2VybmVsIGFuZCBwbGF0Zm9ybSBkZXZlbG9wZXJzIHJlcHJvZHVjaW5nIGh3cG9pc29uIGlzc3VlcyB3aXRoXG4rICB0b29scyBzdWNoIGFzIGBgbWNlLWluamVjdGBgIG9yIGVycm9yLWluamVjdGlvbiBkZWJ1Z2ZzIGludGVyZmFjZXMsXG4rICB3aGVyZSBwYW5pY2tpbmcgb24gdGhlIHVucmVjb3ZlcmFibGUgcGF0aCBtYWtlcyByZWdyZXNzaW9uc1xuKyAgaW1tZWRpYXRlbHkgdmlzaWJsZSBpbnN0ZWFkIG9mIHN1cmZhY2luZyBhcyBsYXRlciwgdW5yZWxhdGVkXG4rICBmYWlsdXJlcy5cbitcbis9ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuKzAgVHJ5IHRvIGNvbnRpbnVlIG9wZXJhdGlvbiAoZGVmYXVsdCkuXG4rMSBQYW5pYyBpbW1lZGlhdGVseS4gIElmIHRoZSBgYHBhbmljYGAgc3lzY3RsIGlzIGFsc28gbm9uLXplcm8gdGhlbiB0aGVcbisgIG1hY2hpbmUgd2lsbCBiZSByZWJvb3RlZC5cbis9ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK1xuK0V4YW1wbGU6OlxuK1xuKyAgICAgZWNobyAxIFx1MDAzZSAvcHJvYy9zeXMvdm0vcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZVxuK1xuK1xuIHBlcmNwdV9wYWdlbGlzdF9oaWdoX2ZyYWN0aW9uXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuaW5kZXggNTE1MDhhNTVjNDA1NWUuLjYxMTE2MGM5OGM2ZjY0IDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xuKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuQEAgLTc0LDYgKzc0LDggQEAgc3RhdGljIGludCBzeXNjdGxfbWVtb3J5X2ZhaWx1cmVfcmVjb3ZlcnkgX19yZWFkX21vc3RseSA9IDE7XG4gXG4gc3RhdGljIGludCBzeXNjdGxfZW5hYmxlX3NvZnRfb2ZmbGluZSBfX3JlYWRfbW9zdGx5ID0gMTtcbiBcbitzdGF0aWMgaW50IHN5c2N0bF9wYW5pY19vbl91bnJlY292ZXJhYmxlX21mIF9fcmVhZF9tb3N0bHk7XG4rXG4gYXRvbWljX2xvbmdfdCBudW1fcG9pc29uZWRfcGFnZXMgX19yZWFkX21vc3RseSA9IEFUT01JQ19MT05HX0lOSVQoMCk7XG4gXG4gc3RhdGljIGJvb2wgaHdfbWVtb3J5X2ZhaWx1cmUgX19yZWFkX21vc3RseSA9IGZhbHNlO1xuQEAgLTE1NSw2ICsxNTcsMTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgbWVtb3J5X2ZhaWx1cmVfdGFibGVbXSA9IHtcbiBcdFx0LnByb2NfaGFuZGxlclx0PSBwcm9jX2RvaW50dmVjX21pbm1heCxcbiBcdFx0LmV4dHJhMVx0XHQ9IFNZU0NUTF9aRVJPLFxuIFx0XHQuZXh0cmEyXHRcdD0gU1lTQ1RMX09ORSxcbitcdH0sXG4rXHR7XG4rXHRcdC5wcm9jbmFtZVx0PSBcInBhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmVcIixcbitcdFx0LmRhdGFcdFx0PSBcdTAwMjZzeXNjdGxfcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZixcbitcdFx0Lm1heGxlblx0XHQ9IHNpemVvZihzeXNjdGxfcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZiksXG4rXHRcdC5tb2RlXHRcdD0gMDY0NCxcbitcdFx0LnByb2NfaGFuZGxlclx0PSBwcm9jX2RvaW50dmVjX21pbm1heCxcbitcdFx0LmV4dHJhMVx0XHQ9IFNZU0NUTF9aRVJPLFxuK1x0XHQuZXh0cmEyXHRcdD0gU1lTQ1RMX09ORSxcbiBcdH1cbiB9O1xuIFxuQEAgLTk4MCwxNyArOTkxLDYgQEAgc3RhdGljIGJvb2wgaGFzX2V4dHJhX3JlZmNvdW50KHN0cnVjdCBwYWdlX3N0YXRlICpwcywgc3RydWN0IHBhZ2UgKnAsXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLS8qXG4tICogRXJyb3IgaGl0IGtlcm5lbCBwYWdlLlxuLSAqIERvIG5vdGhpbmcsIHRyeSB0byBiZSBsdWNreSBhbmQgbm90IHRvdWNoIHRoaXMgaW5zdGVhZC4gRm9yIGEgZmV3IGNhc2VzIHdlXG4tICogY291bGQgYmUgbW9yZSBzb3BoaXN0aWNhdGVkLlxuLSAqL1xuLXN0YXRpYyBpbnQgbWVfa2VybmVsKHN0cnVjdCBwYWdlX3N0YXRlICpwcywgc3RydWN0IHBhZ2UgKnApXG4te1xuLVx0dW5sb2NrX3BhZ2UocCk7XG4tXHRyZXR1cm4gTUZfSUdOT1JFRDtcbi19XG4tXG4gLypcbiAgKiBQYWdlIGluIHVua25vd24gc3RhdGUuIERvIG5vdGhpbmcuXG4gICogVGhpcyBpcyBhIGNhdGNoLWFsbCBpbiBjYXNlIHdlIGZhaWwgdG8gbWFrZSBzZW5zZSBvZiB0aGUgcGFnZSBzdGF0ZS5cbkBAIC0xMTk5LDEwICsxMTk5LDggQEAgc3RhdGljIGludCBtZV9odWdlX3BhZ2Uoc3RydWN0IHBhZ2Vfc3RhdGUgKnBzLCBzdHJ1Y3QgcGFnZSAqcClcbiAjZGVmaW5lIG1sb2NrXHRcdCgxVUwgXHUwMDNjXHUwMDNjIFBHX21sb2NrZWQpXG4gI2RlZmluZSBscnVcdFx0KDFVTCBcdTAwM2NcdTAwM2MgUEdfbHJ1KVxuICNkZWZpbmUgaGVhZFx0XHQoMVVMIFx1MDAzY1x1MDAzYyBQR19oZWFkKVxuLSNkZWZpbmUgcmVzZXJ2ZWRcdCgxVUwgXHUwMDNjXHUwMDNjIFBHX3Jlc2VydmVkKVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcGFnZV9zdGF0ZSBlcnJvcl9zdGF0ZXNbXSA9IHtcbi1cdHsgcmVzZXJ2ZWQsXHRyZXNlcnZlZCxcdE1GX01TR19LRVJORUwsXHRtZV9rZXJuZWwgfSxcbiBcdC8qXG4gXHQgKiBmcmVlIHBhZ2VzIGFyZSBzcGVjaWFsbHkgZGV0ZWN0ZWQgb3V0c2lkZSB0aGlzIHRhYmxlOlxuIFx0ICogUEdfYnVkZHkgcGFnZXMgb25seSBtYWtlIGEgc21hbGwgZnJhY3Rpb24gb2YgYWxsIGZyZWUgcGFnZXMuXG5AQCAtMTIzNCw3ICsxMjMyLDYgQEAgc3RhdGljIHN0cnVjdCBwYWdlX3N0YXRlIGVycm9yX3N0YXRlc1tdID0ge1xuICN1bmRlZiBtbG9ja1xuICN1bmRlZiBscnVcbiAjdW5kZWYgaGVhZFxuLSN1bmRlZiByZXNlcnZlZFxuIFxuIHN0YXRpYyB2b2lkIHVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyh1bnNpZ25lZCBsb25nIHBmbixcbiBcdFx0XHRcdCAgICAgZW51bSBtZl9yZXN1bHQgcmVzdWx0KVxuQEAgLTEyNjksNiArMTI2NiwxNSBAQCBzdGF0aWMgdm9pZCB1cGRhdGVfcGVyX25vZGVfbWZfc3RhdHModW5zaWduZWQgbG9uZyBwZm4sXG4gXHQrK21mX3N0YXRzLVx1MDAzZXRvdGFsO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBwYW5pY19vbl91bnJlY292ZXJhYmxlX21mKGVudW0gbWZfYWN0aW9uX3BhZ2VfdHlwZSB0eXBlLFxuK1x0XHRcdFx0ICAgICAgZW51bSBtZl9yZXN1bHQgcmVzdWx0KVxuK3tcbitcdGlmICghc3lzY3RsX3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWYpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiB0eXBlID09IE1GX01TR19LRVJORUwgXHUwMDI2XHUwMDI2IHJlc3VsdCA9PSBNRl9JR05PUkVEO1xuK31cbitcbiAvKlxuICAqIFwiRGlydHkvQ2xlYW5cIiBpbmRpY2F0aW9uIGlzIG5vdCAxMDAlIGFjY3VyYXRlIGR1ZSB0byB0aGUgcG9zc2liaWxpdHkgb2ZcbiAgKiBzZXR0aW5nIFBHX2RpcnR5IG91dHNpZGUgcGFnZSBsb2NrLiBTZWUgYWxzbyBjb21tZW50IGFib3ZlIHNldF9wYWdlX2RpcnR5KCkuXG5AQCAtMTI4Niw2ICsxMjkyLDkgQEAgc3RhdGljIGludCBhY3Rpb25fcmVzdWx0KHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIG1mX2FjdGlvbl9wYWdlX3R5cGUgdHlwZSxcbiBcdHByX2VycihcIiUjbHg6IHJlY292ZXJ5IGFjdGlvbiBmb3IgJXM6ICVzXFxuXCIsXG4gXHRcdHBmbiwgYWN0aW9uX3BhZ2VfdHlwZXNbdHlwZV0sIGFjdGlvbl9uYW1lW3Jlc3VsdF0pO1xuIFxuK1x0aWYgKHBhbmljX29uX3VucmVjb3ZlcmFibGVfbWYodHlwZSwgcmVzdWx0KSlcbitcdFx0cGFuaWMoXCJNZW1vcnkgZmFpbHVyZTogJSNseDogdW5yZWNvdmVyYWJsZSBwYWdlXCIsIHBmbik7XG4rXG4gXHRyZXR1cm4gKHJlc3VsdCA9PSBNRl9SRUNPVkVSRUQgfHwgcmVzdWx0ID09IE1GX0RFTEFZRUQpID8gMCA6IC1FQlVTWTtcbiB9XG4gXG5AQCAtMTMzOSw2ICsxMzQ4LDM2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBIV1BvaXNvbkhhbmRsYWJsZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBmbGFncylcbiBcdHJldHVybiBQYWdlTFJVKHBhZ2UpIHx8IGlzX2ZyZWVfYnVkZHlfcGFnZShwYWdlKTtcbiB9XG4gXG4rLypcbisgKiBQb3NpdGl2ZSBpZGVudGlmaWNhdGlvbiBvZiBwYWdlcyB0aGUgaHdwb2lzb24gaGFuZGxlciBjYW5ub3QgcmVjb3ZlcjpcbisgKiBwYWdlcyBvd25lZCBieSBrZXJuZWwgaW50ZXJuYWxzIHdpdGggbm8gdXNlcnNwYWNlIG1hcHBpbmcgdG8gdW5tYXAsIG5vXG4rICogZmlsZSBtYXBwaW5nIHRvIGludmFsaWRhdGUsIGFuZCBubyBtaWdyYXRpb24gdGFyZ2V0LlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19rZXJuZWxfb3duZWRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbit7XG4rXHRzdHJ1Y3QgcGFnZSAqaGVhZDtcbitcdGJvb2wga2VybmVsX293bmVkO1xuK1xuK1x0LyogUEdfcmVzZXJ2ZWQgaXMgYSBwZXItcGFnZSBmbGFnLCBuZXZlciBzZXQgb24gYSBjb21wb3VuZCBwYWdlLiAqL1xuK1x0aWYgKFBhZ2VSZXNlcnZlZChwYWdlKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHQvKlxuK1x0ICogUGFnZS10eXBlIGJpdHMgbGl2ZSBvbmx5IG9uIHRoZSBoZWFkIHBhZ2UsIHNvIHJlc29sdmUgYW55IHRhaWxcbitcdCAqIGZpcnN0LiAgVGhlIGNoZWNrIHRha2VzIG5vIHJlZmNvdW50OyByZWNoZWNrIHRoZSBoZWFkIGFmdGVyd2FyZHNcbitcdCAqIHNvIGEgY29uY3VycmVudCBzcGxpdCBvciBjb21wb3VuZCBmcmVlIGNhbm5vdCBsZWF2ZSB1cyB0cnVzdGluZ1xuK1x0ICogYSBzdGFsZSB2aWV3LiAgQSBmcmVlLVx1MDAzZWFsbG9jLVx1MDAzZWZyZWUgaW4gdGhlIHNhbWUgd2luZG93IGlzIHN0aWxsXG4rXHQgKiBwb3NzaWJsZSBidXQgY2xvc2luZyBpdCB3b3VsZCByZXF1aXJlIHRha2luZyBhIHJlZmVyZW5jZSBoZXJlLlxuK1x0ICovXG4rcmV0cnk6XG4rXHRoZWFkID0gY29tcG91bmRfaGVhZChwYWdlKTtcbitcdGtlcm5lbF9vd25lZCA9IFBhZ2VTbGFiKGhlYWQpIHx8IFBhZ2VUYWJsZShoZWFkKSB8fFxuK1x0XHQgICAgICAgUGFnZUxhcmdlS21hbGxvYyhoZWFkKTtcbitcdGlmIChoZWFkICE9IGNvbXBvdW5kX2hlYWQocGFnZSkpXG4rXHRcdGdvdG8gcmV0cnk7XG4rXHRyZXR1cm4ga2VybmVsX293bmVkO1xuK31cbitcbiBzdGF0aWMgaW50IF9fZ2V0X2h3cG9pc29uX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4ge1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG5AQCAtMTM4NSw2ICsxNDI0LDE5IEBAIHN0YXRpYyBpbnQgZ2V0X2FueV9wYWdlKHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuIFx0aWYgKGZsYWdzIFx1MDAyNiBNRl9DT1VOVF9JTkNSRUFTRUQpXG4gXHRcdGNvdW50X2luY3JlYXNlZCA9IHRydWU7XG4gXG4rXHQvKlxuK1x0ICogUGFnZSB0eXBlcyB3ZSBrbm93IGFyZSBrZXJuZWwtb3duZWQgYW5kIGNhbm5vdCBiZSByZWNvdmVyZWQuXG4rXHQgKiBTaG9ydC1jaXJjdWl0IGJlZm9yZSB0aGUgc2hha2VfcGFnZSgpIC8gcmV0cnkgbG9vcCwgd2hpY2hcbitcdCAqIGNhbm5vdCB0dXJuIGFueSBvZiB0aGVzZSBpbnRvIHNvbWV0aGluZyBIV1BvaXNvbkhhbmRsYWJsZSgpLlxuK1x0ICogRHJvcCB0aGUgY2FsbGVyJ3MgcmVmZXJlbmNlIGlmIE1GX0NPVU5UX0lOQ1JFQVNFRCB0b29rIG9uZS5cbitcdCAqL1xuK1x0aWYgKGlzX2tlcm5lbF9vd25lZF9wYWdlKHApKSB7XG4rXHRcdGlmIChjb3VudF9pbmNyZWFzZWQpXG4rXHRcdFx0cHV0X3BhZ2UocCk7XG4rXHRcdHJldCA9IC1FTk9UUkVDT1ZFUkFCTEU7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuIHRyeV9hZ2FpbjpcbiBcdGlmICghY291bnRfaW5jcmVhc2VkKSB7XG4gXHRcdHJldCA9IF9fZ2V0X2h3cG9pc29uX3BhZ2UocCwgZmxhZ3MpO1xuQEAgLTE0MzIsNyArMTQ4NCw3IEBAIHN0YXRpYyBpbnQgZ2V0X2FueV9wYWdlKHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuIFx0XHRyZXQgPSAtRUlPO1xuIFx0fVxuIG91dDpcbi1cdGlmIChyZXQgPT0gLUVJTylcbitcdGlmIChyZXQgPT0gLUVJTyB8fCByZXQgPT0gLUVOT1RSRUNPVkVSQUJMRSlcbiBcdFx0cHJfZXJyKFwiJSNseDogdW5oYW5kbGFibGUgcGFnZS5cXG5cIiwgcGFnZV90b19wZm4ocCkpO1xuIFxuIFx0cmV0dXJuIHJldDtcbkBAIC0xNDg5LDcgKzE1NDEsMTAgQEAgc3RhdGljIGludCBfX2dldF91bnBvaXNvbl9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuICAqICAgICAgICAgLUVJTyBmb3IgcGFnZXMgb24gd2hpY2ggd2UgY2FuIG5vdCBoYW5kbGUgbWVtb3J5IGVycm9ycyxcbiAgKiAgICAgICAgIC1FQlVTWSB3aGVuIGdldF9od3BvaXNvbl9wYWdlKCkgaGFzIHJhY2VkIHdpdGggcGFnZSBsaWZlY3ljbGVcbiAgKiAgICAgICAgIG9wZXJhdGlvbnMgbGlrZSBhbGxvY2F0aW9uIGFuZCBmcmVlLFxuLSAqICAgICAgICAgLUVIV1BPSVNPTiB3aGVuIHRoZSBwYWdlIGlzIGh3cG9pc29uZWQgYW5kIHRha2VuIG9mZiBmcm9tIGJ1ZGR5LlxuKyAqICAgICAgICAgLUVIV1BPSVNPTiB3aGVuIHRoZSBwYWdlIGlzIGh3cG9pc29uZWQgYW5kIHRha2VuIG9mZiBmcm9tIGJ1ZGR5LFxuKyAqICAgICAgICAgLUVOT1RSRUNPVkVSQUJMRSBmb3Iga2VybmVsLW93bmVkIHBhZ2VzIGlkZW50aWZpZWQgYnlcbisgKiAgICAgICAgIGlzX2tlcm5lbF9vd25lZF9wYWdlKCkgKFBHX3Jlc2VydmVkLCBzbGFiLFxuKyAqICAgICAgICAgcGFnZS10YWJsZSwgbGFyZ2Uta21hbGxvYykgdGhhdCB0aGUgaGFuZGxlciBjYW5ub3QgcmVjb3Zlci5cbiAgKi9cbiBzdGF0aWMgaW50IGdldF9od3BvaXNvbl9wYWdlKHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuIHtcbkBAIC0yNDAyLDcgKzI0NTcsOCBAQCBpbnQgbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbiBcdCAqIHRoYXQgbWF5IG1ha2UgcGFnZV9yZWZfZnJlZXplKCkvcGFnZV9yZWZfdW5mcmVlemUoKSBtaXNtYXRjaC5cbiBcdCAqL1xuIFx0cmVzID0gZ2V0X2h3cG9pc29uX3BhZ2UocCwgZmxhZ3MpO1xuLVx0aWYgKCFyZXMpIHtcbitcdHN3aXRjaCAocmVzKSB7XG4rXHRjYXNlIDA6XG4gXHRcdGlmIChpc19mcmVlX2J1ZGR5X3BhZ2UocCkpIHtcbiBcdFx0XHRpZiAodGFrZV9wYWdlX29mZl9idWRkeShwKSkge1xuIFx0XHRcdFx0cGFnZV9yZWZfaW5jKHApO1xuQEAgLTI0MjEsNyArMjQ3NywxOSBAQCBpbnQgbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbiBcdFx0XHRyZXMgPSBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0tFUk5FTF9ISUdIX09SREVSLCBNRl9JR05PUkVEKTtcbiBcdFx0fVxuIFx0XHRnb3RvIHVubG9ja19tdXRleDtcbi1cdH0gZWxzZSBpZiAocmVzIFx1MDAzYyAwKSB7XG4rXHRjYXNlIDE6XG4rXHRcdC8qIEdvdCBhIHJlZmNvdW50IG9uIGEgaGFuZGxhYmxlIHBhZ2UuICovXG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSAtRU5PVFJFQ09WRVJBQkxFOlxuK1x0XHQvKlxuK1x0XHQgKiBTdGFibGUgdW5oYW5kbGFibGUga2VybmVsLW93bmVkIHBhZ2UgKFBHX3Jlc2VydmVkLFxuK1x0XHQgKiBzbGFiLCBwYWdlIHRhYmxlcywgbGFyZ2Uta21hbGxvYykuXG4rXHRcdCAqIE5vIHJlY292ZXJ5IHBvc3NpYmxlLlxuK1x0XHQgKi9cbitcdFx0cmVzID0gYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19LRVJORUwsIE1GX0lHTk9SRUQpO1xuK1x0XHRnb3RvIHVubG9ja19tdXRleDtcbitcdGRlZmF1bHQ6XG4rXHRcdC8qIFRyYW5zaWVudCBsaWZlY3ljbGUgcmFjZSB3aXRoIHRoZSBwYWdlIGFsbG9jYXRvci4gKi9cbiBcdFx0cmVzID0gYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19HRVRfSFdQT0lTT04sIE1GX0lHTk9SRUQpO1xuIFx0XHRnb3RvIHVubG9ja19tdXRleDtcbiBcdH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG5pbmRleCBlNmRmOTY4ZjA5NzFjOC4uZWQzMjFhZTcwOWRhY2YgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbkBAIC0xNzQsNiArMTc0LDEwIEBAIFRFU1RfUFJPR1MgKz0ga3NmdF91c2VyZmF1bHRmZC5zaFxuIFRFU1RfUFJPR1MgKz0ga3NmdF92bWFfbWVyZ2Uuc2hcbiBURVNUX1BST0dTICs9IGtzZnRfdm1hbGxvYy5zaFxuIFxuKyMgRGVzdHJ1Y3RpdmU6IGV2ZXJ5IHN1Y2Nlc3NmdWwgcnVuIHBhbmljcyB0aGUga2VybmVsLiAgSW5zdGFsbGVkIGFuZFxuKyMga2VwdCBleGVjdXRhYmxlLCBidXQgbm90IHJ1biBmcm9tIGEgZGVmYXVsdCBrc2VsZnRlc3QgaW52b2NhdGlvbi5cbitURVNUX1BST0dTX0VYVEVOREVEICs9IGh3cG9pc29uLXBhbmljLnNoXG4rXG4gVEVTVF9GSUxFUyA6PSB0ZXN0X3ZtYWxsb2Muc2hcbiBURVNUX0ZJTEVTICs9IHRlc3RfaG1tLnNoXG4gVEVTVF9GSUxFUyArPSB2YV9oaWdoX2FkZHJfc3dpdGNoLnNoXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHdwb2lzb24tcGFuaWMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9od3BvaXNvbi1wYW5pYy5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hYWZjMDZlODk1ZDAxZFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHdwb2lzb24tcGFuaWMuc2hcbkBAIC0wLDAgKzEsMjQ5IEBAXG4rIyEvYmluL2Jhc2hcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI1xuKyMgVmVyaWZ5IHZtLnBhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmUgYnkgaW5qZWN0aW5nIGEgaHdwb2lzb25cbisjIGVycm9yIG9uIGEga2VybmVsLW93bmVkIHBhZ2UgYW5kIGNvbmZpcm1pbmcgdGhlIGtlcm5lbCBwYW5pY3MuXG4rI1xuKyMgVGhyZWUgXCJraW5kc1wiIG9mIGtlcm5lbC1vd25lZCBwYWdlIGNhbiBiZSB0YXJnZXRlZCwgc2VsZWN0YWJsZSB2aWEgdGhlXG4rIyBmaXJzdCBwb3NpdGlvbmFsIGFyZ3VtZW50IChkZWZhdWx0OiByb2RhdGEpOlxuKyNcbisjICAgcm9kYXRhICAtIGEgUEdfcmVzZXJ2ZWQgcGFnZSBpbiB0aGUga2VybmVsIHJvZGF0YSByYW5nZVxuKyMgICAgICAgICAgICAgKHNvdXJjZWQgZnJvbSAvcHJvYy9pb21lbSBcIktlcm5lbCByb2RhdGFcIikuICBFeGVyY2lzZXNcbisjICAgICAgICAgICAgIG1lbW9yeV9mYWlsdXJlKCkgLVx1MDAzZSBnZXRfYW55X3BhZ2UoKSBvbiBhIFBhZ2VSZXNlcnZlZCBwYWdlLlxuKyNcbisjICAgc2xhYiAgICAtIGEgc2xhYiBwYWdlIGZvdW5kIHZpYSAvcHJvYy9rcGFnZWZsYWdzIChLUEZfU0xBQikuXG4rIyAgICAgICAgICAgICBFeGVyY2lzZXMgbWVtb3J5X2ZhaWx1cmUoKSAtXHUwMDNlIGdldF9hbnlfcGFnZSgpIG9uIGEgbm9uXG4rIyAgICAgICAgICAgICBQR19yZXNlcnZlZCBrZXJuZWwtb3duZWQgcGFnZS4gIFRoaXMgcGF0aCBpcyB3aGF0IGNhdGNoZXNcbisjICAgICAgICAgICAgIHJlZ3Jlc3Npb25zIHdoZXJlIGdldF9hbnlfcGFnZSgpIGNvbGxhcHNlcyBrZXJuZWwtb3duZWRcbisjICAgICAgICAgICAgIHBhZ2VzIGludG8gYSB0cmFuc2llbnQgLUVJTyBpbnN0ZWFkIG9mIC1FTk9UUkVDT1ZFUkFCTEUuXG4rI1xuKyMgICBwZ3RhYmxlIC0gYSBwYWdlLXRhYmxlIHBhZ2UgZm91bmQgdmlhIC9wcm9jL2twYWdlZmxhZ3MgKEtQRl9QR1RBQkxFKS5cbisjICAgICAgICAgICAgIFNhbWUgcGF0aCBhcyBzbGFiLCBkaWZmZXJlbnQgcGFnZSB0eXBlLlxuKyNcbisjIFRoaXMgdGVzdCBpcyBERVNUUlVDVElWRTogYSBzdWNjZXNzZnVsIHJ1biBjcmFzaGVzIHRoZSBrZXJuZWwuICBJdCBpc1xuKyMgbWVhbnQgdG8gYmUgZXhlY3V0ZWQgaW5zaWRlIGEgZGlzcG9zYWJsZSBWTSAoZS5nLiB2aXJ0bWUtbmcpIHdpdGggYVxuKyMgc2VyaWFsIGNvbnNvbGUgY2FwdHVyZWQgYnkgdGhlIGhhcm5lc3MuICBJdCBpcyBza2lwcGVkIHVubGVzcyB0aGVcbisjIGNhbGxlciBvcHRzIGluIHZpYSBSVU5fREVTVFJVQ1RJVkU9MS5cbisjXG4rIyBUZXN0IHBhc3NlcyBleHRlcm5hbGx5OiB0aGUga2VybmVsIG11c3QgcGFuaWMgd2l0aFxuKyMgICBcIk1lbW9yeSBmYWlsdXJlOiBcdTAwM2NwZm5cdTAwM2U6IHVucmVjb3ZlcmFibGUgcGFnZVwiXG4rIyBBIHJldHVybiBmcm9tIHRoZSBpbmplY3QgbWVhbnMgbm8gcGFuaWMgZmlyZWQ6IHRoYXQgaXMgYSBmYWlsdXJlLFxuKyMgdW5sZXNzIHRoZSB0YXJnZXQgUEZOIHJhY2VkIHRvIGEgZGlmZmVyZW50IHBhZ2UgdHlwZSBiZWZvcmUgaW5qZWN0aW9uLFxuKyMgaW4gd2hpY2ggY2FzZSB0aGUgcnVuIGlzIGluY29uY2x1c2l2ZSBhbmQgaXMgc2tpcHBlZC5cbisjXG4rIyBBdXRob3I6IEJyZW5vIExlaXRhbyBcdTAwM2NsZWl0YW9AZGViaWFuLm9yZ1x1MDAzZVxuK1xuK3NldCAtdVxuK1xuK2tzZnRfc2tpcD00XG4rc3lzY3RsX3BhdGg9L3Byb2Mvc3lzL3ZtL3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmVcbitpbmplY3RfcGF0aD0vc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9oYXJkX29mZmxpbmVfcGFnZVxuK2twYWdlZmxhZ3NfcGF0aD0vcHJvYy9rcGFnZWZsYWdzXG4rdW5wb2lzb25fcGF0aD0vc3lzL2tlcm5lbC9kZWJ1Zy9od3BvaXNvbi91bnBvaXNvbi1wZm5cbitcbisjIC9wcm9jL2twYWdlZmxhZ3MgYml0IHBvc2l0aW9ucyAoc2VlIGluY2x1ZGUvdWFwaS9saW51eC9rZXJuZWwtcGFnZS1mbGFncy5oKVxuK0tQRl9TTEFCPTdcbitLUEZfQ09NUE9VTkRfVEFJTD0xNlxuK0tQRl9IV1BPSVNPTj0xOVxuK0tQRl9OT1BBR0U9MjBcbitLUEZfUEdUQUJMRT0yNlxuK0tQRl9SRVNFUlZFRD0zMlxuK1xuK3BhZ2VzaXplPSQoZ2V0Y29uZiBQQUdFX1NJWkUpXG4rXG4ra2luZD0kezE6LXJvZGF0YX1cbitcbitrc2Z0X3ByaW50KCkgeyBlY2hvIFwiIyAkKlwiOyB9XG4ra3NmdF9leGl0X3NraXAoKSB7IGtzZnRfcHJpbnQgXCIkKlwiOyBleGl0IFwiJGtzZnRfc2tpcFwiOyB9XG4ra3NmdF9leGl0X2ZhaWwoKSB7IGVjaG8gXCJub3Qgb2sgMSAkKlwiOyBleGl0IDE7IH1cbitcbitpZiBbIFwiJChpZCAtdSlcIiAtbmUgMCBdOyB0aGVuXG4rXHRrc2Z0X2V4aXRfc2tpcCBcIm11c3QgcnVuIGFzIHJvb3RcIlxuK2ZpXG4rXG4raWYgWyAhIC13IFwiJHN5c2N0bF9wYXRoXCIgXTsgdGhlblxuK1x0a3NmdF9leGl0X3NraXAgXCIkc3lzY3RsX3BhdGggbm90IHByZXNlbnQgKGtlcm5lbCB3aXRob3V0IHRoZSBzeXNjdGw/KVwiXG4rZmlcbitcbitpZiBbICEgLXcgXCIkaW5qZWN0X3BhdGhcIiBdOyB0aGVuXG4rXHRrc2Z0X2V4aXRfc2tpcCBcIiRpbmplY3RfcGF0aCBub3QgcHJlc2VudCAobm8gTUVNT1JZX0hPVFBMVUc/KVwiXG4rZmlcbitcbitpZiBbIFwiJHtSVU5fREVTVFJVQ1RJVkU6LTB9XCIgIT0gXCIxXCIgXTsgdGhlblxuK1x0a3NmdF9leGl0X3NraXAgXCJkZXN0cnVjdGl2ZSB0ZXN0OyByZS1ydW4gd2l0aCBSVU5fREVTVFJVQ1RJVkU9MSBpbnNpZGUgYSBkaXNwb3NhYmxlIFZNXCJcbitmaVxuK1xuKyMgUGljayBhIFBGTiBpbnNpZGUgdGhlIGtlcm5lbCBpbWFnZSByb2RhdGEgcmVnaW9uIG9mIC9wcm9jL2lvbWVtLlxuKyMgVGhpcyBpcyBwcmVmZXJyZWQgb3ZlciBhIHRvcC1sZXZlbCBcIlJlc2VydmVkXCIgZW50cnkgYmVjYXVzZSB0b3AtbGV2ZWxcbisjIFJlc2VydmVkIHJhbmdlcyBhcmUgb2Z0ZW4gZmlybXdhcmUgaG9sZXMgdGhhdCBoYXZlIG5vIGJhY2tpbmcgc3RydWN0XG4rIyBwYWdlOyBwZm5fdG9fb25saW5lX3BhZ2UoKSByZXR1cm5zIE5VTEwgb24gdGhvc2UgYW5kIG1lbW9yeV9mYWlsdXJlKClcbisjIGJhaWxzIG91dCB3aXRoIC1FTlhJTyBiZWZvcmUgcmVhY2hpbmcgdGhlIHBhbmljIHBhdGguXG4rI1xuKyMgXCJLZXJuZWwgcm9kYXRhXCIgaXMgcmVwb3J0ZWQgYXMgYSBzdWItcmVzb3VyY2Ugb2YgXCJTeXN0ZW0gUkFNXCIgb24gZXZlcnlcbisjIG1ham9yIGFyY2hpdGVjdHVyZSwgd2hpY2ggZ3VhcmFudGVlczpcbisjICAgLSB0aGUgUEZOIGlzIGJhY2tlZCBieSBzdHJ1Y3QgcGFnZSAod2l0aGluIGFuIG9ubGluZSBtZW1vcnkgcmFuZ2UpO1xuKyMgICAtIFBHX3Jlc2VydmVkIGlzIHNldCBvbiB0aGUgcGFnZSAoa2VybmVsIGltYWdlIGFyZWEpO1xuKyMgICAtIHRoZSBtZW1vcnkgaXMgcmVhZC1vbmx5LCBzbyBzZXR0aW5nIFBHX2h3cG9pc29uIG9uIGl0IGRvZXMgbm90XG4rIyAgICAgY29ycnVwdCB3cml0YWJsZSBrZXJuZWwgc3RhdGUgaWYgdGhlIHBhbmljIHNvbWVob3cgZG9lcyBub3QgZmlyZS5cbisjXG4rIyAvcHJvYy9pb21lbSBlbnRyaWVzIGxvb2sgbGlrZSAoaW5kZW50ZWQgZm9yIHN1Yi1yZXNvdXJjZXMpOlxuKyMgICAgIFwiICAwMjUwMDAwMC0wMmZmZmZmZiA6IEtlcm5lbCByb2RhdGFcIlxuK3BpY2tfcm9kYXRhX3BoeXNfYWRkcigpIHtcbitcdGF3ayAtdiBwYWdlc2l6ZT1cIiQoZ2V0Y29uZiBQQUdFX1NJWkUpXCIgJ1xuK1x0IyBDb252ZXJ0IGEgaGV4IHN0cmluZyB0byBhIG51bWJlciB3aXRob3V0IHJlbHlpbmcgb24gdGhlIGdhd2stb25seVxuK1x0IyBzdHJ0b251bSgpLiAgbWF3ayBsYWNrcyBpdCBhbmQgd291bGQgb3RoZXJ3aXNlIHNwdXJpb3VzbHkgc2tpcFxuK1x0IyB0aGlzIHRlc3Qgb24gZGlzdHJvcyB0aGF0IHNoaXAgbWF3ayBhcyAvdXNyL2Jpbi9hd2suXG4rXHRmdW5jdGlvbiBoZXgybnVtKHMsICAgbiwgaSwgYywgdikge1xuK1x0XHRuID0gMFxuK1x0XHRmb3IgKGkgPSAxOyBpIFx1MDAzYz0gbGVuZ3RoKHMpOyBpKyspIHtcbitcdFx0XHRjID0gdG9sb3dlcihzdWJzdHIocywgaSwgMSkpXG4rXHRcdFx0diA9IGluZGV4KFwiMDEyMzQ1Njc4OWFiY2RlZlwiLCBjKSAtIDFcbitcdFx0XHRpZiAodiBcdTAwM2MgMClcbitcdFx0XHRcdHJldHVybiAtMVxuK1x0XHRcdG4gPSBuICogMTYgKyB2XG4rXHRcdH1cbitcdFx0cmV0dXJuIG5cbitcdH1cbitcdC86IEtlcm5lbCByb2RhdGFbWzpzcGFjZTpdXSokLyB7XG4rXHRcdHN1YigvXltbOnNwYWNlOl1dKy8sIFwiXCIpXG4rXHRcdG4gPSBzcGxpdCgkMCwgYSwgL1stIF0vKVxuK1x0XHRzdGFydCA9IGhleDJudW0oYVsxXSlcbitcdFx0ZW5kICAgPSBoZXgybnVtKGFbMl0pXG4rXHRcdGlmIChlbmQgXHUwMDNjPSBzdGFydClcbitcdFx0XHRuZXh0XG4rXHRcdCMgUGFnZS1hbGlnbiB1cHdhcmQgYW5kIGVtaXQgdGhlIGZpcnN0IGJ5dGUgb2YgdGhhdCBwYWdlLlxuK1x0XHRwZm4gPSBpbnQoKHN0YXJ0ICsgcGFnZXNpemUgLSAxKSAvIHBhZ2VzaXplKVxuK1x0XHRwcmludGYgXCIweCV4XFxuXCIsIHBmbiAqIHBhZ2VzaXplXG4rXHRcdGV4aXQgMFxuK1x0fVxuK1x0JyAvcHJvYy9pb21lbVxuK31cbitcbisjIFdhbGsgL3Byb2Mva3BhZ2VmbGFncyBhbmQgcmV0dXJuIHRoZSBwaHlzIGFkZHIgb2YgdGhlIGZpcnN0IFBGTiB0aGF0XG4rIyBoYXMgYml0ICQxIHNldCwgd2l0aCBLUEZfSFdQT0lTT04sIEtQRl9OT1BBR0UgYW5kIEtQRl9DT01QT1VORF9UQUlMXG4rIyBhbGwgY2xlYXIgKHNvIHdlIGF0dGFjayBhIHJlYWwsIG5vbi10YWlsLCBub3QtYWxyZWFkeS1wb2lzb25lZCBwYWdlKS5cbisjXG4rIyBXZSBza2lwIHRoZSBmaXJzdCAxNiBNaUIgb2YgUEZOcyB0byBzdGVwIHBhc3QgbG93LW1lbW9yeSBzcGVjaWFsXG4rIyByYW5nZXMgKEJJT1MvRUZJL0FDUEkvZXRjLikgdGhhdCBvZnRlbiBhcmUgUEdfcmVzZXJ2ZWQgYW5kIHdvdWxkIG5vdFxuKyMgZXhoaWJpdCB0aGUgc2xhYi9wZ3RhYmxlIHR5cGUgd2UgYXJlIGxvb2tpbmcgZm9yLlxuK3BpY2tfa3BhZ2VmbGFnc19waHlzX2FkZHIoKSB7XG4rXHRsb2NhbCB3YW50X2JpdD0kMVxuK1x0bG9jYWwgcGFnZXNpemUgc2tpcF9wZm5cbitcbitcdFsgLXIgXCIka3BhZ2VmbGFnc19wYXRoXCIgXSB8fCByZXR1cm5cbitcbitcdHBhZ2VzaXplPSQoZ2V0Y29uZiBQQUdFX1NJWkUpXG4rXHRza2lwX3Bmbj0kKCgoMTYgKiAxMDI0ICogMTAyNCkgLyBwYWdlc2l6ZSkpXG4rXG4rXHRvZCAtQW4gLXR4OCAtdiAtdzggLWogXCIkKChza2lwX3BmbiAqIDgpKVwiIFwiJGtwYWdlZmxhZ3NfcGF0aFwiIDJcdTAwM2UvZGV2L251bGwgfCBcXFxuK1x0YXdrIC12IHdhbnRfYml0PVwiJHdhbnRfYml0XCIgXFxcbitcdCAgICAtdiBod3BfYml0PVwiJEtQRl9IV1BPSVNPTlwiIFxcXG4rXHQgICAgLXYgbm9wYWdlX2JpdD1cIiRLUEZfTk9QQUdFXCIgXFxcbitcdCAgICAtdiB0YWlsX2JpdD1cIiRLUEZfQ09NUE9VTkRfVEFJTFwiIFxcXG4rXHQgICAgLXYgYmFzZV9wZm49XCIkc2tpcF9wZm5cIiBcXFxuK1x0ICAgIC12IHBhZ2VzaXplPVwiJHBhZ2VzaXplXCIgJ1xuK1x0IyBUZXN0IHdoZXRoZXIgYml0IFwiYlwiIGlzIHNldCBpbiB0aGUgMTYtaGV4LWRpZ2l0IHZhbHVlIFwiaGV4XCIuXG4rXHQjIERvbmUgd2l0aCBzdWJzdHJpbmcgKyBwZXItZGlnaXQgbG9va3VwIHNvIHdlIG5ldmVyIHJlbHkgb24gYXdrXG4rXHQjIGJpdHdpc2Ugb3BlcmF0b3JzIChtYXdrIGxhY2tzIHRoZW0pLCA2NC1iaXQgRlAgcHJlY2lzaW9uIG9yIHRoZVxuK1x0IyBnYXdrLW9ubHkgc3RydG9udW0oKS5cbitcdGZ1bmN0aW9uIGJpdF9zZXQoaGV4LCBiLCAgICBkaSwgYmksIGMsIHYpIHtcbitcdFx0ZGkgPSBpbnQoYiAvIDQpXG4rXHRcdGJpID0gYiAtIGRpICogNFxuK1x0XHRjID0gc3Vic3RyKGhleCwgbGVuZ3RoKGhleCkgLSBkaSwgMSlcbitcdFx0diA9IGluZGV4KFwiMDEyMzQ1Njc4OWFiY2RlZlwiLCB0b2xvd2VyKGMpKSAtIDFcbitcdFx0aWYgKGJpID09IDApIHJldHVybiAodiAlIDIpID09IDFcbitcdFx0aWYgKGJpID09IDEpIHJldHVybiBpbnQodiAvIDIpICUgMiA9PSAxXG4rXHRcdGlmIChiaSA9PSAyKSByZXR1cm4gaW50KHYgLyA0KSAlIDIgPT0gMVxuK1x0XHRyZXR1cm4gaW50KHYgLyA4KSAlIDIgPT0gMVxuK1x0fVxuK1x0e1xuK1x0XHRnc3ViKC9eW1s6c3BhY2U6XV0rLywgXCJcIilcbitcdFx0aCA9ICQxXG4rXHRcdGlmIChiaXRfc2V0KGgsIHdhbnRfYml0KSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFiaXRfc2V0KGgsIGh3cF9iaXQpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIWJpdF9zZXQoaCwgbm9wYWdlX2JpdCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhYml0X3NldChoLCB0YWlsX2JpdCkpIHtcbitcdFx0XHRwZm4gPSBiYXNlX3BmbiArIE5SIC0gMVxuK1x0XHRcdHByaW50ZiBcIjB4JXhcXG5cIiwgcGZuICogcGFnZXNpemVcbitcdFx0XHRleGl0IDBcbitcdFx0fVxuK1x0fVxuK1x0J1xuK31cbitcbisjIFJldHVybiAwIGlmIC9wcm9jL2twYWdlZmxhZ3MgYml0ICQyIGlzIHNldCBmb3IgUEZOICQxLCAxIGlmIGl0IGlzXG4rIyBjbGVhciwgb3IgMiBpZiB0aGUgd29yZCBjYW5ub3QgYmUgcmVhZC4gIFVzZWQgdG8gcmUtY29uZmlybSB0aGUgdGFyZ2V0XG4rIyBwYWdlIHR5cGUgYWZ0ZXIgYSBub24tcGFuaWNraW5nIGluamVjdC5cbitrcGFnZWZsYWdzX2JpdF9zZXQoKSB7XG4rXHRsb2NhbCB3b3JkXG4rXG4rXHR3b3JkPSQob2QgLUFuIC10eDggLXYgLWogXCIkKCgkMSAqIDgpKVwiIC1OIDggXCIka3BhZ2VmbGFnc19wYXRoXCIgMlx1MDAzZS9kZXYvbnVsbCB8IHRyIC1kICdbOnNwYWNlOl0nKVxuK1x0WyAtbiBcIiR3b3JkXCIgXSB8fCByZXR1cm4gMlxuK1x0KCggKDE2IyR3b3JkIFx1MDAzZVx1MDAzZSAkMikgXHUwMDI2IDEgKSlcbit9XG4rXG4rIyBCZXN0LWVmZm9ydDogZHJvcCB0aGUgUEdfaHdwb2lzb24gbWFya2VyIHNldCBieSB0aGUgaW5qZWN0IHNvIGEgZmFpbGVkXG4rIyBydW4gZG9lcyBub3QgbGVhdmUgYSBwb2lzb25lZCBwYWdlIGJlaGluZC4gIGhhcmRfb2ZmbGluZV9wYWdlKCkgaW5qZWN0c1xuKyMgd2l0aCBNRl9TV19TSU1VTEFURUQsIHNvIHRoZSBwYWdlIHN0YXlzIHVucG9pc29uYWJsZSB0aHJvdWdoIHRoZVxuKyMgaHdwb2lzb24gZGVidWdmcyBpbnRlcmZhY2UgKG5lZWRzIENPTkZJR19IV1BPSVNPTl9JTkpFQ1QgKyBkZWJ1Z2ZzKS5cbit0cnlfdW5wb2lzb24oKSB7XG4rXHRbIC13IFwiJHVucG9pc29uX3BhdGhcIiBdIHx8IHJldHVybiAwXG4rXHRlY2hvIFwiJDFcIiBcdTAwM2UgXCIkdW5wb2lzb25fcGF0aFwiIDJcdTAwM2UvZGV2L251bGwgfHwgdHJ1ZVxuK31cbitcbitjYXNlIFwiJGtpbmRcIiBpblxuK3JvZGF0YSlcbitcdHBoeXNfYWRkcj0kKHBpY2tfcm9kYXRhX3BoeXNfYWRkcilcbitcdHJlY2hlY2tfYml0PSRLUEZfUkVTRVJWRURcbitcdG1pc3NpbmdfbXNnPSdubyBcIktlcm5lbCByb2RhdGFcIiBlbnRyeSBpbiAvcHJvYy9pb21lbSdcbitcdDs7XG4rc2xhYilcbitcdHBoeXNfYWRkcj0kKHBpY2tfa3BhZ2VmbGFnc19waHlzX2FkZHIgXCIkS1BGX1NMQUJcIilcbitcdHJlY2hlY2tfYml0PSRLUEZfU0xBQlxuK1x0bWlzc2luZ19tc2c9XCJubyB1c2FibGUgc2xhYiBQRk4gZm91bmQgaW4gJGtwYWdlZmxhZ3NfcGF0aFwiXG4rXHQ7O1xuK3BndGFibGUpXG4rXHRwaHlzX2FkZHI9JChwaWNrX2twYWdlZmxhZ3NfcGh5c19hZGRyIFwiJEtQRl9QR1RBQkxFXCIpXG4rXHRyZWNoZWNrX2JpdD0kS1BGX1BHVEFCTEVcbitcdG1pc3NpbmdfbXNnPVwibm8gdXNhYmxlIHBhZ2UtdGFibGUgUEZOIGZvdW5kIGluICRrcGFnZWZsYWdzX3BhdGhcIlxuK1x0OztcbisqKVxuK1x0a3NmdF9leGl0X2ZhaWwgXCJ1bmtub3duIGtpbmQgJyRraW5kJyAoZXhwZWN0ZWQ6IHJvZGF0YXxzbGFifHBndGFibGUpXCJcbitcdDs7XG4rZXNhY1xuK1xuK2lmIFsgLXogXCIkcGh5c19hZGRyXCIgXTsgdGhlblxuK1x0a3NmdF9leGl0X3NraXAgXCIkbWlzc2luZ19tc2dcIlxuK2ZpXG4rXG4ra3NmdF9wcmludCBcImVuYWJsaW5nICRzeXNjdGxfcGF0aFwiXG4rcHJpb3I9JChjYXQgXCIkc3lzY3RsX3BhdGhcIilcbitlY2hvIDEgXHUwMDNlIFwiJHN5c2N0bF9wYXRoXCIgfHwga3NmdF9leGl0X2ZhaWwgXCJmYWlsZWQgdG8gZW5hYmxlIHN5c2N0bFwiXG4rXG4rcGZuPSQoKHBoeXNfYWRkciAvIHBhZ2VzaXplKSlcbitrc2Z0X3ByaW50IFwiaW5qZWN0aW5nIGh3cG9pc29uIGF0IHBoeXMgMHgkKHByaW50ZiAnJXgnIFwiJHBoeXNfYWRkclwiKSAocGZuIDB4JChwcmludGYgJyV4JyBcIiRwZm5cIiksIGtpbmQ9JGtpbmQpXCJcbitrc2Z0X3ByaW50IFwiZXhwZWN0aW5nIGtlcm5lbCBwYW5pYzogJ01lbW9yeSBmYWlsdXJlOiBcdTAwM2NwZm5cdTAwM2U6IHVucmVjb3ZlcmFibGUgcGFnZSdcIlxuK1xuKyMgQSBzdWNjZXNzZnVsIHJ1biBuZXZlciByZXR1cm5zIGZyb20gdGhlIGluamVjdCAtLSBpdCBwYW5pY3MgdGhlIGtlcm5lbC5cbisjIFJlYWNoaW5nIHRoZSBjb2RlIGJlbG93IHRoZXJlZm9yZSBtZWFucyBubyBwYW5pYyBmaXJlZC4gIE5vdGUgd2hldGhlclxuKyMgdGhlIHdyaXRlIGl0c2VsZiBzdWNjZWVkZWQsIHRoZW4gcHV0IHRoZSBtYWNoaW5lIGJhY2s6IHJlc3RvcmUgdGhlXG4rIyBzeXNjdGwgYW5kIGJlc3QtZWZmb3J0IHVucG9pc29uIHRoZSBwYWdlIHdlIGp1c3QgbWFya2VkLlxuK2lmIGVjaG8gXCIkcGh5c19hZGRyXCIgXHUwMDNlIFwiJGluamVjdF9wYXRoXCI7IHRoZW5cbitcdHZlcmRpY3Q9XCJpbmplY3QgcmV0dXJuZWQgd2l0aG91dCBwYW5pYzsgc3lzY3RsIGluZWZmZWN0aXZlXCJcbitlbHNlXG4rXHR2ZXJkaWN0PVwiaW5qZWN0IGZhaWxlZCBiZWZvcmUgcmVhY2hpbmcgdGhlIHBhbmljIHBhdGhcIlxuK2ZpXG4rXG4rZWNobyBcIiRwcmlvclwiIFx1MDAzZSBcIiRzeXNjdGxfcGF0aFwiXG4rdHJ5X3VucG9pc29uIFwiJHBmblwiXG4rXG4rIyBUaGUgcGFnZSB0eXBlIGNhbiBjaGFuZ2UgYmV0d2VlbiBzZWxlY3Rpb24gYW5kIGluamVjdGlvbiAoZS5nLiBhIHNsYWJcbisjIG9yIHBhZ2UtdGFibGUgcGFnZSBpcyBmcmVlZCBhbmQgcmV1c2VkKS4gIE9ubHkgdHJlYXQgYSBtaXNzaW5nIHBhbmljIGFzXG4rIyBhIGZhaWx1cmUgaWYgdGhlIHRhcmdldCBQRk4gaXMgc3RpbGwgdGhlIGtlcm5lbC1vd25lZCB0eXBlIHdlIGFpbWVkIGF0O1xuKyMgaWYgaXQgcmFjZWQgdG8gYW5vdGhlciB0eXBlIHRoZSBydW4gaXMgaW5jb25jbHVzaXZlLCBzbyBza2lwIGluc3RlYWQuXG4ra3BhZ2VmbGFnc19iaXRfc2V0IFwiJHBmblwiIFwiJHJlY2hlY2tfYml0XCJcbitjYXNlICQ/IGluXG4rMClcdGtzZnRfZXhpdF9mYWlsIFwiJHZlcmRpY3QgKHBhZ2Ugc3RpbGwgJGtpbmQpXCIgOztcbisxKVx0a3NmdF9leGl0X3NraXAgXCJ0YXJnZXQgUEZOIG5vIGxvbmdlciAka2luZDsgcmFjZWQgYmVmb3JlIGluamVjdCwgaW5jb25jbHVzaXZlXCIgOztcbisqKVx0a3NmdF9leGl0X2ZhaWwgXCIkdmVyZGljdCAoY291bGQgbm90IHJlY29uZmlybSBwYWdlIHR5cGUgdmlhICRrcGFnZWZsYWdzX3BhdGgpXCIgOztcbitlc2FjXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMzowNToyMS45ODI0ODYxMjNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTQ0MjQ4NjU4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFwiUGFuaWMgb24gVW5yZWNvdmVyYWJsZSBNZW1vcnkgRmFpbHVyZVwiIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGludHJvZHVjZXMgYSBuZXcgc3lzY3RsLCBgcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZWAuIFRoZSBnb2FsIGlzIHRvIG1ha2UgdGhlIGtlcm5lbCBwYW5pYyB3aGVuIGEgbWVtb3J5IGZhaWx1cmUgb2NjdXJzIG9uIGtlcm5lbC1vd25lZCBwYWdlcyB0aGF0IHRoZSByZWd1bGFyIGVycm9yIGhhbmRsZXIgY2FuJ3QgZml4LiBUaGUgY29kZSBtb2RpZmllcyBgbW0vbWVtb3J5LWZhaWx1cmUuY2AgYW5kIGFkZHMgYSBzZWxmLXRlc3QsIHdoaWNoIGlzIGdvb2QuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGluIHRoaXMgbmV3IGBpc19rZXJuZWxfb3duZWRfcGFnZSgpYCBmdW5jdGlvbi4gVGhpcyBpcyBrZXksIGFzIGl0IGlkZW50aWZpZXMgaWYgdGhlIHBhZ2UgaXMgdHJ1bHkga2VybmVsLXNwYWNlLCBsb29raW5nIGZvciBgUGFnZVJlc2VydmVkYCwgYFBhZ2VTbGFiYCwgYFBhZ2VUYWJsZWAsIG9yIGBQYWdlTGFyZ2VLbWFsbG9jYC4gSWYgaXQgaXMgaW5kZWVkIGEga2VybmVsIHBhZ2UsIHRoZW4gYGdldF9hbnlfcGFnZSgpYCByZXR1cm5zIGAtRU5PVFJFQ09WRVJBQkxFYC4gVGhlIGV4aXN0aW5nIGBtZW1vcnlfZmFpbHVyZSgpYCBmdW5jdGlvbiB0aGVuIHByb2Nlc3NlcyB0aGlzIGVycm9yIGNvZGUgYW5kIGNhbGxzIGBhY3Rpb25fcmVzdWx0KClgLiBJdCdzIGBhY3Rpb25fcmVzdWx0KClgIHRoYXQgaGFzIGJlZW4gdXBkYXRlZCB0byBjaGVjayB0aGlzIG5ldyBgcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZmAgZnVuY3Rpb24sIGFuZCBpZiBpdCByZXR1cm5zIHRydWUsIHRoZW4gcGFuaWMuXG5cblRoaXMgZGlyZWN0bHkgdG91Y2hlcyBjb3JlIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nLCBzbyByZWFjaGFiaWxpdHkgaXMgY3JpdGljYWwuIEknbSB0aGlua2luZyB0aGlzIGNvdWxkIGJlIHRyaWdnZXJlZCBieSBnZW51aW5lIGhhcmR3YXJlIG1lbW9yeSBlcnJvcnMsIG9mIGNvdXJzZSwgb3IgZXZlbiBieSBpbmplY3RpbmcgZmF1bHRzIHZpYSBzb2Z0d2FyZS4gYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIGltbWVkaWF0ZWx5IGNvbWVzIHRvIG1pbmQsIGJ1dCB0aGF0IHVzdWFsbHkgb3BlcmF0ZXMgb24gdXNlci1zcGFjZSBwYWdlcy4gSG93ZXZlciwgbWF5YmUgYC9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2hhcmRfb2ZmbGluZV9wYWdlYCBvciBzb21ldGhpbmcgaW4gZGVidWdmcyBjb3VsZCBiZSB1c2VkIHRvIGluamVjdCBpdCBvbnRvIGtlcm5lbCBwYWdlcy4gVGhlIHNlbGYtdGVzdCwgaW4gZmFjdCwgZG9lcyB1c2UgdGhhdCBgL3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvaGFyZF9vZmZsaW5lX3BhZ2VgIG1ldGhvZCwgd2hpY2ggaXMgYSBnb29kIHNpZ24uXG5cblRoZSBxdWVzdGlvbiB0aGVuIGlzLCBob3cgZG8gd2UgZnV6eiB0aGlzPyBTeXprYWxsZXIgc2VlbXMgbGlrZSB0aGUgb2J2aW91cyBjaG9pY2UuIEl0IGhhcyBgc3l6X2luamVjdF9od3BvaXNvbmAgb3Igc29tZXRoaW5nIHNpbWlsYXIgdGhhdCBjb3VsZCB0YXJnZXQgdGhpcywgYW5kIGl0ICpjYW4qIHdyaXRlIHRvIGAvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9oYXJkX29mZmxpbmVfcGFnZWAuIEhvd2V2ZXIsIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IFN5emthbGxlciBkb2Vzbid0IHR5cGljYWxseSBmb2N1cyBvbiBoYXJkd2FyZSBlcnJvciBpbmplY3Rpb24gdW5sZXNzIHNwZWNpZmljYWxseSBjb25maWd1cmVkLiBCdXQgaXQgZG9lcyBoYXZlIHNvbWUgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIHN1cHBvcnQuIFRoaXMgaXMgZ29vZCB0byBrZWVwIGluIG1pbmQuXG5cbldhaXQsIEkganVzdCByZW1lbWJlcmVkIHRoZSBkZWZhdWx0OiB0aGUgc3lzY3RsIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQhIGBzeXNjdGxfcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZmAgZGVmYXVsdHMgdG8gemVybywgc28gdG8gZWZmZWN0aXZlbHkgZnV6eiB0aGlzLCB3ZSdsbCAqaGF2ZSogdG8gZW5hYmxlIHRoYXQgc3lzY3RsIGZpcnN0LiBMdWNraWx5LCBTeXprYWxsZXIgKmNhbiogd3JpdGUgdG8gYC9wcm9jL3N5cy92bS9wYW5pY19vbl91bnJlY292ZXJhYmxlX21lbW9yeV9mYWlsdXJlYC5cblxuSSBzaG91bGQgcHJvYmFibHkgZGl2ZSBpbnRvIGBtbS9tZW1vcnktZmFpbHVyZS5jYCBjb2RlIGRpcmVjdGx5IG5vdy4gSSdsbCBuZWVkIHRvIHVzZSBgZ3JlcHBlcmAgdG8gc2VlIGlmIHRoZSBgTUVNT1JZX0ZBSUxVUkVgIGNvbmZpZyBvcHRpb24gaXMgaW52b2x2ZWQgaW4gYW55IG9mIHRoaXMgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg5OCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIzOjA1OjUxLjQyNDk3NTE3NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTI5MjU1MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NzAyPWNvbmZpZyBERUZBVUxUX01NQVBfTUlOX0FERFJcXG4tLVxcbm1tL0tjb25maWctNzIwLVxcbm1tL0tjb25maWc6NzIxOmNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXFxubW0vS2NvbmZpZy03MjItXFx0Ym9vbFxcbm1tL0tjb25maWctNzIzLVxcbm1tL0tjb25maWc6NzI0OmNvbmZpZyBNRU1PUllfRkFJTFVSRVxcbm1tL0tjb25maWctNzI1LVxcdGRlcGVuZHMgb24gTU1VXFxubW0vS2NvbmZpZzo3MjY6XFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXFxubW0vS2NvbmZpZy03MjctXFx0Ym9vbCBcXFwiRW5hYmxlIHJlY292ZXJ5IGZyb20gaGFyZHdhcmUgbWVtb3J5IGVycm9yc1xcXCJcXG4tLVxcbm1tL0tjb25maWc9NzM1PWNvbmZpZyBIV1BPSVNPTl9JTkpFQ1RcXG5tbS9LY29uZmlnLTczNi1cXHR0cmlzdGF0ZSBcXFwiSFdQb2lzb24gcGFnZXMgaW5qZWN0b3JcXFwiXFxubW0vS2NvbmZpZzo3Mzc6XFx0ZGVwZW5kcyBvbiBNRU1PUllfRkFJTFVSRSBcXHUwMDI2XFx1MDAyNiBERUJVR19LRVJORUwgXFx1MDAyNlxcdTAwMjYgUFJPQ19GU1xcbm1tL0tjb25maWctNzM4LVxcdHNlbGVjdCBQUk9DX1BBR0VfTU9OSVRPUlxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zz0xNDc9Y29uZmlnIFBBR0VfUE9JU09OSU5HXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnLTE1Ni1cXHQgIE5vdGUgdGhhdCBcXFwicG9pc29uXFxcIiBoZXJlIGlzIG5vdCB0aGUgc2FtZSB0aGluZyBhcyB0aGUgXFxcIkhXUG9pc29uXFxcIlxcbm1tL0tjb25maWcuZGVidWc6MTU3OlxcdCAgZm9yIENPTkZJR19NRU1PUllfRkFJTFVSRS4gVGhpcyBpcyBzb2Z0d2FyZSBwb2lzb25pbmcgb25seS5cXG5tbS9LY29uZmlnLmRlYnVnLTE1OC1cXG4tLVxcbm1tL01ha2VmaWxlPTExMT1vYmotJChDT05GSUdfRE1BUE9PTF9URVNUKSArPSBkbWFwb29sX3Rlc3Qub1xcbm1tL01ha2VmaWxlOjExMjpvYmotJChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpICs9IG1lbW9yeS1mYWlsdXJlLm9cXG5tbS9NYWtlZmlsZS0xMTMtb2JqLSQoQ09ORklHX0hXUE9JU09OX0lOSkVDVCkgKz0gaHdwb2lzb24taW5qZWN0Lm9cXG4tLVxcbm1tL2ludGVybmFsLmg9MTQwMD1zdGF0aWMgaW5saW5lIGJvb2wgbm9kZV9yZWNsYWltX2VuYWJsZWQodm9pZClcXG4tLVxcbm1tL2ludGVybmFsLmgtMTQwOC0gKi9cXG5tbS9pbnRlcm5hbC5oOjE0MDk6I2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxcbm1tL2ludGVybmFsLmgtMTQxMC1pbnQgdW5tYXBfcG9pc29uZWRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgbG9uZyBwZm4sIGJvb2wgbXVzdF9raWxsKTtcXG4tLVxcbm1tL2tzbS5jPTMxNTU9dm9pZCBybWFwX3dhbGtfa3NtKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBybWFwX3dhbGtfY29udHJvbCAqcndjKVxcbi0tXFxubW0va3NtLmMtMzIyMy1cXG5tbS9rc20uYzozMjI0OiNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVcXG5tbS9rc20uYy0zMjI1LS8qXFxuLS1cXG5tbS9tYWR2aXNlLmM9MTMzOT1zdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTE0NDMtXFxubW0vbWFkdmlzZS5jOjE0NDQ6I2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxcbm1tL21hZHZpc2UuYy0xNDQ1LS8qXFxuLS1cXG5tbS9tYWR2aXNlLmM9MTUxMT1zdGF0aWMgYm9vbCBpc19tZW1vcnlfZmFpbHVyZShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xNTE1LVxcbm1tL21hZHZpc2UuYzoxNTE2OiNlbmRpZlxcdC8qIENPTkZJR19NRU1PUllfRkFJTFVSRSAqL1xcbm1tL21hZHZpc2UuYy0xNTE3LVxcbi0tXFxubW0vbWFkdmlzZS5jPTE1MTk9bWFkdmlzZV9iZWhhdmlvcl92YWxpZChpbnQgYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTU1MC1cXHRjYXNlIE1BRFZfR1VBUkRfUkVNT1ZFOlxcbm1tL21hZHZpc2UuYzoxNTUxOiNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVcXG5tbS9tYWR2aXNlLmMtMTU1Mi1cXHRjYXNlIE1BRFZfU09GVF9PRkZMSU5FOlxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0yNjE4PUVYUE9SVF9TWU1CT0xfR1BMKG1lbW9yeV9mYWlsdXJlKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2MTktXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjIwOiNkZWZpbmUgTUVNT1JZX0ZBSUxVUkVfRklGT19PUkRFUlxcdDRcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI2MjE6I2RlZmluZSBNRU1PUllfRkFJTFVSRV9GSUZPX1NJWkVcXHQoMSBcXHUwMDNjXFx1MDAzYyBNRU1PUllfRkFJTFVSRV9GSUZPX09SREVSKVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjYyMi1cXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MjYyOD1zdHJ1Y3QgbWVtb3J5X2ZhaWx1cmVfY3B1IHtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2MjktXFx0REVDTEFSRV9LRklGTyhmaWZvLCBzdHJ1Y3QgbWVtb3J5X2ZhaWx1cmVfZW50cnksXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjMwOlxcdFxcdCAgICAgIE1FTU9SWV9GQUlMVVJFX0ZJRk9fU0laRSk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjMxLVxcdHJhd19zcGlubG9ja190IGxvY2s7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTI4NDg9c3RhdGljIGludCBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI4NTktXFx0XFx0LmdmcF9tYXNrID0gR0ZQX1VTRVIgfCBfX0dGUF9NT1ZBQkxFIHwgX19HRlBfUkVUUllfTUFZRkFJTCxcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI4NjA6XFx0XFx0LnJlYXNvbiA9IE1SX01FTU9SWV9GQUlMVVJFLFxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjg2MS1cXHR9O1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yOTE3LVxcdFxcdHJldCA9IG1pZ3JhdGVfcGFnZXMoXFx1MDAyNnBhZ2VsaXN0LCBhbGxvY19taWdyYXRpb25fdGFyZ2V0LCBOVUxMLFxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjkxODpcXHRcXHRcXHQodW5zaWduZWQgbG9uZylcXHUwMDI2bXRjLCBNSUdSQVRFX1NZTkMsIE1SX01FTU9SWV9GQUlMVVJFLCBOVUxMKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI5MTktXFx0XFx0aWYgKCFyZXQpIHtcXG4tLVxcbm1tL21pZ3JhdGUuYz0xMTkwPXN0YXRpYyB2b2lkIG1pZ3JhdGVfZm9saW9fZG9uZShzdHJ1Y3QgZm9saW8gKnNyYyxcXG4tLVxcbm1tL21pZ3JhdGUuYy0xMTk2LVxcbm1tL21pZ3JhdGUuYzoxMTk3OlxcdGlmIChyZWFzb24gIT0gTVJfTUVNT1JZX0ZBSUxVUkUpXFxubW0vbWlncmF0ZS5jLTExOTgtXFx0XFx0LyogV2UgcmVsZWFzZSB0aGUgcGFnZSBpbiBwYWdlX2hhbmRsZV9wb2lzb24uICovXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NzYwOT1FWFBPUlRfU1lNQk9MKGlzX2ZyZWVfYnVkZHlfcGFnZSk7XFxubW0vcGFnZV9hbGxvYy5jLTc2MTAtXFxubW0vcGFnZV9hbGxvYy5jOjc2MTE6I2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxcbm1tL3BhZ2VfYWxsb2MuYy03NjEyLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRfdG9fZnJlZV9saXN0KHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgem9uZSAqem9uZSxcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jPTE4MD1ib29sIHBhZ2Vfdm1hX21hcHBlZF93YWxrKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTMzNC1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzozMzU6I2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTMzNi0vKipcXG4tLVxcbm1tL3Nob3dfbWVtLmM9NDA1PXZvaWQgX19zaG93X21lbSh1bnNpZ25lZCBpbnQgZmlsdGVyLCBub2RlbWFza190ICpub2RlbWFzaywgaW50IG1heF96b25lX2lkeClcXG4tLVxcbm1tL3Nob3dfbWVtLmMtNDI3LSNlbmRpZlxcbm1tL3Nob3dfbWVtLmM6NDI4OiNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVcXG5tbS9zaG93X21lbS5jLTQyOS1cXHRwcmludGsoXFxcIiVsdSBwYWdlcyBod3BvaXNvbmVkXFxcXG5cXFwiLCBhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZudW1fcG9pc29uZWRfcGFnZXMpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjM6MDU6NTEuOTM3OTA3ODg3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk3MzU2NDA2MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBBbmFseXNpczogVW5yZWNvdmVyYWJsZSBNZW1vcnkgRmFpbHVyZSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzeXNjdGwsIGBwYW5pY19vbl91bnJlY292ZXJhYmxlX21lbW9yeV9mYWlsdXJlYCwgYW5kIG1vZGlmaWVzIGBtZW1vcnlfZmFpbHVyZSgpYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV29ydGggZnV6emluZz9cIiBBYnNvbHV0ZWx5LCB0aGlzIGlzIG5ldyBmdW5jdGlvbmFsaXR5IGluIHRoZSBrZXJuZWwgdGhhdCdzIGRlc2lnbmVkIHRvIHRyaWdnZXIgYSBwYW5pYyB1bmRlciBzcGVjaWZpYyBtZW1vcnkgZmFpbHVyZSBjb25kaXRpb25zLlxuXG5CdXQgd2FpdCwgYSBwYW5pYyBtZWFucyBhIGNyYXNoLCBhbmQgYSBmdXp6ZXIgKndpbGwqIHNlZSB0aGF0LiBUaGUgc3lzY3RsIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQsIHdoaWNoIGlzIGltcG9ydGFudC4gSWYgdGhlIGZ1enplciBlbmFibGVzIGl0LCBhbmQgdGhlbiB0cmlnZ2VycyBhbiB1bnJlY292ZXJhYmxlIG1lbW9yeSBmYWlsdXJlLCBib29tLCBwYW5pYy4gSXMgdGhlIHBhbmljIGEgYnVnPyBObywgaXQncyB0aGUgKmludGVuZGVkKiBiZWhhdmlvciB3aGVuIHRoZSBzeXNjdGwgaXMgc2V0LiBTbywgaWYgdGhlIGZ1enplciBoaXRzIHRoaXMsIGl0J2xsIHJlcG9ydCBhIFwiY3Jhc2gsXCIgYnV0IGl0J3MgcG90ZW50aWFsbHkgYSBmYWxzZSBwb3NpdGl2ZSBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgYmVjYXVzZSB3ZSBpbnRlbnRpb25hbGx5IGNhdXNlZCB0aGUga2VybmVsIHRvIHBhbmljLlxuXG5Ob3csIGlmIHRoZSBmdXp6ZXIgY2FuIHRyaWdnZXIgYSBtZW1vcnkgZmFpbHVyZSBvbiBhIGtlcm5lbCBwYWdlIGFuZCB0aGUgc3lzY3RsIGlzIGVuYWJsZWQsIGl0ICp3aWxsKiBwYW5pYy4gVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lcywgc2hvdWxkIHdlIGZ1enogdGhpcz8gVGhlIHBhdGNoICptaWdodCogdW5jb3ZlciBidWdzIGluIHRoZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZyBsb2dpYyBpdHNlbGYsIG9yIGl0IGNvdWxkIHNpbXBseSB0cmlnZ2VyIHRoZSBpbnRlbmRlZCBwYW5pYy5cblxuSG9sZCBvbiwgdGhlIHByb21wdCBzYXlzLCDigJxSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuLi5cIiBDYW4gd2UgdHJpZ2dlciBhIG1lbW9yeSBmYWlsdXJlIGluIFFFTVU/IFllcywgd2UgY2FuIHVzZSBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAgb3IgYC9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2hhcmRfb2ZmbGluZV9wYWdlYC5cblxuV2FpdCwgdGhlIHBhdGNoICpleHBsaWNpdGx5KiBhZGRzIGEgc2VsZnRlc3QgdGhhdCB1c2VzIGAvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9oYXJkX29mZmxpbmVfcGFnZWAuIFRoYXQncyBhIGNsZWFyIHNpZ25hbC4gVGhpcyAqaXMqIHdvcnRoIGZ1enppbmcsIGJlY2F1c2UgaXQgbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMgYW5kIGl0IGlzIHBvc3NpYmxlIHRvIGhpdCBpdCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlxuXG5Ob3csIHdlIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoZSBmdXp6ZXIgaXMgY29uZmlndXJlZC4gSWYgdGhlIHN5c2N0bCBpcyBlbmFibGVkLCBpdCBwYW5pY3MuIElmIGl0J3MgZGlzYWJsZWQsIGl0IGRvZXNuJ3QuIElmIHdlIGVuYWJsZSB0aGUgc3lzY3RsLCB0aGUgZnV6emVyIHdpbGwgZGVmaW5pdGVseSBoaXQgdGhhdCBwYW5pYyBhbmQgcmVwb3J0IGl0IGFzIGEgY3Jhc2guIElzIHRoYXQgd2hhdCB3ZSAqd2FudCo/IFByb2JhYmx5IG5vdC4gQSBmdXp6aW5nIHNldHVwIHVzdWFsbHkgc2hvdWxkbid0IGJlIGludGVudGlvbmFsbHkgY29uZmlndXJlZCB0byBwYW5pYyB0aGUga2VybmVsIHVubGVzcyBpdCdzIGRlc2lnbmVkIHRvIHRlc3QgYSBzcGVjaWZpYyBwYW5pYyBjb25kaXRpb24uIFN5emthbGxlciBnZW5lcmFsbHkgYXZvaWRzIHBhbmljcyBpZiB0aGV5IGFyZSBpbnRlbmRlZCwgb3Igd2UganVzdCB3b3VsZG4ndCBlbmFibGUgdGhlIHN5c2N0bC5cblxuT2theSwgaWYgd2UgZG9uJ3QgZW5hYmxlIHRoZSBzeXNjdGwsIHRoZSBuZXcgY29kZSBgcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZmAgc2ltcGx5IHJldHVybnMgZmFsc2UuIEJ1dCwgaXQgYWxzbyBhZGRzIGBpc19rZXJuZWxfb3duZWRfcGFnZSgpYCB3aGljaCBpcyBjYWxsZWQgdW5jb25kaXRpb25hbGx5IGluIGBnZXRfYW55X3BhZ2UoKWAuIFRoYXQgc291bmRzIGludGVyZXN0aW5nLiBJIHNob3VsZCBnbyBsb29rIGF0IHRob3NlIGNoYW5nZXMgdG8gYGdldF9hbnlfcGFnZSgpYCBjbG9zZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzUwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIzOjA2OjQxLjY3MzU1MDA1NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDA1NDI1MTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlzX2tlcm5lbF9vd25lZF9wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbW9yeS1mYWlsdXJlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuYz0xMzM5PXN0YXRpYyBpbmxpbmUgYm9vbCBIV1BvaXNvbkhhbmRsYWJsZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBmbGFncylcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTM1NS0gKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjEzNTY6c3RhdGljIGlubGluZSBib29sIGlzX2tlcm5lbF9vd25lZF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTM1Ny17XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTE0MTk9c3RhdGljIGludCBnZXRfYW55X3BhZ2Uoc3RydWN0IHBhZ2UgKnAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE0MzItXFx0ICovXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxNDMzOlxcdGlmIChpc19rZXJuZWxfb3duZWRfcGFnZShwKSkge1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTQzNC1cXHRcXHRpZiAoY291bnRfaW5jcmVhc2VkKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0xNDkzPXN0YXRpYyBpbnQgX19nZXRfdW5wb2lzb25fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTU0NS0gKiAgICAgICAgIC1FTk9UUkVDT1ZFUkFCTEUgZm9yIGtlcm5lbC1vd25lZCBwYWdlcyBpZGVudGlmaWVkIGJ5XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxNTQ2OiAqICAgICAgICAgaXNfa2VybmVsX293bmVkX3BhZ2UoKSAoUEdfcmVzZXJ2ZWQsIHNsYWIsXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNTQ3LSAqICAgICAgICAgcGFnZS10YWJsZSwgbGFyZ2Uta21hbGxvYykgdGhhdCB0aGUgaGFuZGxlciBjYW5ub3QgcmVjb3Zlci5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjM6MDY6NDMuNjc4OTg0NDM3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTczMzc1MTc1MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYSBSZWNlbnQgS2VybmVsIENoYW5nZSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBrZXJuZWwgY29kZSwgYW5kIGhlcmUncyB3aGF0IEknbSBzZWVpbmcuIEl0IGxvb2tzIGxpa2UgYGlzX2tlcm5lbF9vd25lZF9wYWdlKClgIGdldHMgY2FsbGVkIHVuY29uZGl0aW9uYWxseSB3aXRoaW4gYGdldF9hbnlfcGFnZSgpYC4gSW50ZXJlc3RpbmcuIElmIHRoYXQgZnVuY3Rpb24gcmV0dXJucyBgdHJ1ZWAsIGluZGljYXRpbmcgYSBrZXJuZWwtb3duZWQgcGFnZSwgYGdldF9hbnlfcGFnZSgpYCBpbW1lZGlhdGVseSByZXR1cm5zIGAtRU5PVFJFQ09WRVJBQkxFYC4gTm93LCBgbWVtb3J5X2ZhaWx1cmUoKWAgaGFuZGxlcyB0aGF0IHNwZWNpZmljIGVycm9yIGNvZGUsIGAtRU5PVFJFQ09WRVJBQkxFYCwgYW5kIGRvZXMgc28gYnkgY2FsbGluZyBgYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19LRVJORUwsIE1GX0lHTk9SRUQpYC5cblxuVGhlIGNydWNpYWwgYml0IGlzLCB0aGlzICpjaGFuZ2VzKiBob3cgYG1lbW9yeV9mYWlsdXJlKClgIGJlaGF2ZXMgd2l0aCBrZXJuZWwtb3duZWQgcGFnZXMsIGV2ZW4gaWYgdGhlIHJlbGV2YW50IHN5c2N0bCBpcyBkaXNhYmxlZC4gUHJldmlvdXNseSwgaWYgSSB1bmRlcnN0YW5kIGNvcnJlY3RseSwgaXQgd291bGQgaGF2ZSBnb25lIHRocm91Z2ggYHRyeV9hZ2FpbmAgYW5kIGV2ZW50dWFsbHkgZ2l2ZW4gYSBgLUVJT2AgZXJyb3IgYWZ0ZXIgY2FsbGluZyBgc2hha2VfcGFnZSgpYC4gTm93LCBpdOKAmXMgc2hvcnQtY2lyY3VpdGluZyBhbmQgcmV0dXJuaW5nIGAtRU5PVFJFQ09WRVJBQkxFYC4gVGhpcyBpcyBhICpmdW5jdGlvbmFsKiBjaGFuZ2UgaW4gYG1lbW9yeV9mYWlsdXJlKClgLiBUaGlzIHJlYWxseSBpcyBhIGNoYW5nZSBpbiB0aGUgaW50ZW5kZWQgYmVoYXZpb3IsIGF0IGxlYXN0IHRvIG1lLlxuXG5Pa2F5LCBpcyB0aGlzIGZ1enphYmxlPyBBYnNvbHV0ZWx5LiBTZWVtcyBsaWtlIGEgZ29vZCB0YXJnZXQuIEkgc2hvdWxkIHJlYWxseSBmb2N1cyBvbiBgbWVtb3J5X2ZhaWx1cmVgLCBgZ2V0X2FueV9wYWdlYCwgYW5kIGBpc19rZXJuZWxfb3duZWRfcGFnZWAgd2hlbiBJIGZ1enouIFdhaXQgYSBzZWNvbmQsIGBtZW1vcnlfZmFpbHVyZWAgaXMgYWN0dWFsbHkgdGhlIG1haW4gZW50cnkgcG9pbnQgdG8gaXQgYWxsLiBJIHNob3VsZCBzZWUgaG93IHJlYWNoYWJsZSBpdCBpcywgYW5kIHl1cCwgaXQncyBhY2Nlc3NpYmxlIHRocm91Z2ggYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIG9yIGBoYXJkX29mZmxpbmVfcGFnZWAuIE5vdyBJIHNob3VsZCBqdXN0IGxvb2sgaW50byBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjQ2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIzOjA3OjQxLjAxNjUwNTg1MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjE4MTk1NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUFEVl9IV1BPSVNPTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tYWR2aXNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWFkdmlzZS5jPTE0OTM9c3RhdGljIGJvb2wgaXNfbWVtb3J5X2ZhaWx1cmUoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTQ5NS1cXHRzd2l0Y2ggKG1hZHZfYmVoYXZpb3ItXFx1MDAzZWJlaGF2aW9yKSB7XFxubW0vbWFkdmlzZS5jOjE0OTY6XFx0Y2FzZSBNQURWX0hXUE9JU09OOlxcbm1tL21hZHZpc2UuYy0xNDk3LVxcdGNhc2UgTUFEVl9TT0ZUX09GRkxJTkU6XFxuLS1cXG5tbS9tYWR2aXNlLmM9MTUxOT1tYWR2aXNlX2JlaGF2aW9yX3ZhbGlkKGludCBiZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xNTUyLVxcdGNhc2UgTUFEVl9TT0ZUX09GRkxJTkU6XFxubW0vbWFkdmlzZS5jOjE1NTM6XFx0Y2FzZSBNQURWX0hXUE9JU09OOlxcbm1tL21hZHZpc2UuYy0xNTU0LSNlbmRpZlxcbi0tXFxubW0vbWFkdmlzZS5jPTE4ODg9c3RhdGljIGludCBtYWR2aXNlX2RvX2JlaGF2aW9yKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW5faW4sXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTk0NC0gKiAgTUFEVl9LRUVQT05GT1JLIC0gdW5kbyB0aGUgZWZmZWN0IG9mIE1BRFZfV0lQRU9ORk9SS1xcbm1tL21hZHZpc2UuYzoxOTQ1OiAqICBNQURWX0hXUE9JU09OIC0gdHJpZ2dlciBtZW1vcnkgZXJyb3IgaGFuZGxlciBhcyBpZiB0aGUgZ2l2ZW4gbWVtb3J5IHJhbmdlXFxubW0vbWFkdmlzZS5jLTE5NDYtICpcXHRcXHR3ZXJlIGNvcnJ1cHRlZCBieSB1bnJlY292ZXJhYmxlIGhhcmR3YXJlIG1lbW9yeSBmYWlsdXJlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMzowNzo0MS40NzgzMjk2NzFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzU3MDAxMjg1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYE1BRFZfSFdQT0lTT05gIGFuZCBpdHMgSW1wbGljYXRpb25zKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgTUFEVl9IV1BPSVNPTmAgaXMgc3VwcG9ydGVkLCB0aGF0J3MgZ29vZC4gQnV0IHdhaXQgYSBtaW51dGUsIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCBvbmx5IG9wZXJhdGVzIG9uIHVzZXItbWFwcGVkIHBhZ2VzLiBUaGlzIG1lYW5zIEkgY2FuJ3QganVzdCB0aHJvdyBpdCBhdCBhbnl0aGluZy4gTm93LCBJIG5lZWQgdG8gY2hlY2sgd2hhdCBgaXNfa2VybmVsX293bmVkX3BhZ2UoKWAgdXNlcyB0byBkZXRlcm1pbmUgYSBrZXJuZWwtb3duZWQgcGFnZS4gQWgsIGl0IHVzZXMgY2hlY2tzIGZvciBgUGFnZVJlc2VydmVkYCwgYFBhZ2VTbGFiYCwgYFBhZ2VUYWJsZWAsIGFuZCBgUGFnZUxhcmdlS21hbGxvY2AuXG5cbkNhbiBhIHVzZXIgYWN0dWFsbHkgKm1hcCogYSBgUGFnZVJlc2VydmVkYCBwYWdlPyBJIGJlbGlldmUgdGhleSBjYW4uIEknbSBwcmV0dHkgc3VyZSB0aGF0IGhhcHBlbnMgdGhyb3VnaCB0aGluZ3MgbGlrZSBgL2Rldi9tZW1gLCBvciBtYXliZSBldmVuIHNvbWUgZHJpdmVycyB3aXRoIHNwZWNpYWwgY2FwYWJpbGl0aWVzLCByaWdodD8gQnV0IHRoZSBvdGhlcnMsIGxpa2UgYSBgUGFnZVNsYWJgIG9yIGEgYFBhZ2VUYWJsZWAsIHRob3NlIGFyZSB1c3VhbGx5IG9mZi1saW1pdHMgdG8gdXNlcmxhbmQuXG5cbkhvbGQgb24sIEkgYWxzbyBuZWVkIHRvIHRoaW5rIGFib3V0IGBoYXJkX29mZmxpbmVfcGFnZWAuIENhbiB0aGF0IGZ1bmN0aW9uIHRhcmdldCAqYW55KiBwaHlzaWNhbCBmcmFtZSBudW1iZXIgKFBGTiksIHJlZ2FyZGxlc3Mgb2Ygb3duZXJzaGlwPyBJIHRoaW5rIHNvLiBBbmQgSSByZW1lbWJlciB0aGF0IFN5emthbGxlciwgd2hpY2ggSSdtIGRlYWxpbmcgd2l0aCBoZXJlLCBpdCBydW5zIGFzIHJvb3QgaW4gaXRzIHRlc3RpbmcgdmlydHVhbCBtYWNoaW5lcy4gV2FpdCwgaXMgdGhhdCByaWdodD8gWWVzLCB0aGF0J3MgcmlnaHQuIFN5emthbGxlciAqZG9lcyogaGF2ZSByb290IHByaXZpbGVnZXMuIFNvLCBjYW4gU3l6a2FsbGVyIHRoZW4gd3JpdGUgdG8gYC9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2hhcmRfb2ZmbGluZV9wYWdlYCB0byB0cmlnZ2VyIHRoaXM/IEkgbmVlZCB0byB2ZXJpZnkgaWYgYGhhcmRfb2ZmbGluZV9wYWdlYCBpcyBldmVuIGVuYWJsZWQuIFRoYXQncyB0aGUga2V5IHF1ZXN0aW9uIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyNTYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjM6MDc6NTkuMDQ4MzQ0OTQ3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzAxODYxMTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGFyZF9vZmZsaW5lX3BhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9iYXNlL21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmFzZS9tZW1vcnkuYz02MDQ9c3RhdGljIHNzaXplX3Qgc29mdF9vZmZsaW5lX3BhZ2Vfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTYxOS0vKiBGb3JjaWJseSBvZmZsaW5lIGEgcGFnZSwgaW5jbHVkaW5nIGtpbGxpbmcgcHJvY2Vzc2VzLiAqL1xcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzo2MjA6c3RhdGljIHNzaXplX3QgaGFyZF9vZmZsaW5lX3BhZ2Vfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy02MjEtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jPTYzNz1zdGF0aWMgREVWSUNFX0FUVFJfV08oc29mdF9vZmZsaW5lX3BhZ2UpO1xcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzo2Mzg6c3RhdGljIERFVklDRV9BVFRSX1dPKGhhcmRfb2ZmbGluZV9wYWdlKTtcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtNjM5LSNlbmRpZlxcbi0tXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jPTkxMT1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbWVtb3J5X3Jvb3RfYXR0cnNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy05MTctXFx0XFx1MDAyNmRldl9hdHRyX3NvZnRfb2ZmbGluZV9wYWdlLmF0dHIsXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjkxODpcXHRcXHUwMDI2ZGV2X2F0dHJfaGFyZF9vZmZsaW5lX3BhZ2UuYXR0cixcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtOTE5LSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMzowNzo1OS4zNzg1MzU2NjFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjE4Nzk3ODcxODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGlmIEknbSB0aGUgb25lIGhhdmluZyB0aGVzZSB0aG91Z2h0cywgdGFyZ2V0aW5nIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgTWVtb3J5IEZhaWx1cmUgSW52ZXN0aWdhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgdGhlIGNvbnRleHQgcG9pbnRzIHRvd2FyZHMgc29tZXRoaW5nIHJlbGF0ZWQgdG8ga2VybmVsIG1lbW9yeSBmYWlsdXJlLiBNeSBpbml0aWFsIGh1bmNoLCBnaXZlbiB0aGUgY29udGV4dCwgaXMgdGhhdCB0aGUgcmVsZXZhbnQgY29kZSBzaG91bGQgYmUgaW4gdGhlIGBkcml2ZXJzL2Jhc2UvYCBkaXJlY3RvcnksIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBtZW1vcnkuY2AgZmlsZS4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcuIE5vdywgdGhlIGtleSBpcyB3aGV0aGVyIG9yIG5vdCB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgZ2F0ZWQgYmVoaW5kIGEgY29uZmlndXJhdGlvbiBvcHRpb24uIEknbGwgbmVlZCB0byBjaGVjayBpZiB0aGlzIGlzIGNvbXBpbGVkIHVuZGVyIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0IGxvb2tpbmcsIGZvciB0aGUgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMsIHRvIHNlZSBob3cgdGhhdCdzIGhhbmRsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTExLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjM6MDg6MjEuMjU4MzI2MDdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NTU3Njk1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoYXJkX29mZmxpbmVfcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jhc2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmFzZS9tZW1vcnkuYz02MDQ9c3RhdGljIHNzaXplX3Qgc29mdF9vZmZsaW5lX3BhZ2Vfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTYxOS0vKiBGb3JjaWJseSBvZmZsaW5lIGEgcGFnZSwgaW5jbHVkaW5nIGtpbGxpbmcgcHJvY2Vzc2VzLiAqL1xcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzo2MjA6c3RhdGljIHNzaXplX3QgaGFyZF9vZmZsaW5lX3BhZ2Vfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy02MjEtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jPTYzNz1zdGF0aWMgREVWSUNFX0FUVFJfV08oc29mdF9vZmZsaW5lX3BhZ2UpO1xcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzo2Mzg6c3RhdGljIERFVklDRV9BVFRSX1dPKGhhcmRfb2ZmbGluZV9wYWdlKTtcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtNjM5LSNlbmRpZlxcbi0tXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jPTkxMT1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbWVtb3J5X3Jvb3RfYXR0cnNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy05MTctXFx0XFx1MDAyNmRldl9hdHRyX3NvZnRfb2ZmbGluZV9wYWdlLmF0dHIsXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjkxODpcXHRcXHUwMDI2ZGV2X2F0dHJfaGFyZF9vZmZsaW5lX3BhZ2UuYXR0cixcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtOTE5LSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMzowODoyMS41MzM5MDg1ODJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg5ODc3NzI5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKipcblxuQWxyaWdodCwgbXkgZmlyc3QgaW5zdGluY3QgaGVyZSBpcyB0byB6ZXJvIGluIG9uIHRoYXQgYCNpZmRlZmAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IG9mIHRoaXMgY29kZSBibG9jayBpbW1lZGlhdGVseS4gSSdtIGxvb2tpbmcgYmV5b25kIGp1c3QgdGhlIGNvZGUgc25pcHBldCBpdHNlbGYgYW5kIHRoaW5raW5nIGFib3V0IHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciBwbGF0Zm9ybS1zcGVjaWZpYyBkZWZpbml0aW9ucyBhcmUgaW5mbHVlbmNpbmcgaXRzIGluY2x1c2lvbiBvciBleGNsdXNpb24uIFRoaXMgaXMgY2xhc3NpYyBkZWJ1Z2dpbmcgYW5kIG1haW50ZW5hbmNlLCBhZnRlciBhbGwuIEknbSBtZW50YWxseSBwYXJzaW5nIHRoZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcywgcXVpY2tseSBhc3Nlc3Npbmcgd2hhdCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgb3IgYnVpbGQgZmxhZ3MgYXJlIHByb2JhYmx5IHNldCB0byBjb250cm9sIGl0cyBiZWhhdmlvci4gQXJlIHdlIGRlYWxpbmcgd2l0aCBhIGRlYnVnZ2luZyBmZWF0dXJlLCBhIHBsYXRmb3JtLXNwZWNpZmljIG9wdGltaXphdGlvbiwgb3IgcGVyaGFwcyBhIGZlYXR1cmUgZmxhZyB0aWVkIHRvIGEgcGFpZCB2ZXJzaW9uPyBLbm93aW5nIHRoZSBwcmVwcm9jZXNzb3Igc3ltYm9sIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvZGUncyB1bHRpbWF0ZSBmdW5jdGlvbmFsaXR5IGluIGEgZ2l2ZW4gYnVpbGQgY29uZmlndXJhdGlvbi4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBpZmRlZiB3aWxsIGFsbG93IG1lIHRvIGFzc2VzcyB0aGUgcmFtaWZpY2F0aW9ucyBvZiB0aGlzIGNvZGUgYmxvY2sgdG8gbXkgY3VycmVudCB3b3JrLiBJIGFtIGFzc2Vzc2luZyB0aGUgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjb25kaXRpb25hbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2MTIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMzowODoyNy40MzI2ODg3NjlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmFzZS9tZW1vcnkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MTA6XFx0XFx0aWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKVxcbiA2MTE6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gNjEyOlxcdFxcdGlmIChrc3RydG91bGwoYnVmLCAwLCBcXHUwMDI2cGZuKSBcXHUwMDNjIDApXFxuIDYxMzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNjE0OlxcdFxcdHBmbiBcXHUwMDNlXFx1MDAzZT0gUEFHRV9TSElGVDtcXG4gNjE1OlxcdFxcdHJldCA9IHNvZnRfb2ZmbGluZV9wYWdlKHBmbiwgMCk7XFxuIDYxNjpcXHRcXHRyZXR1cm4gcmV0ID09IDAgPyBjb3VudCA6IHJldDtcXG4gNjE3OlxcdH1cXG4gNjE4OlxcdFxcbiA2MTk6XFx0LyogRm9yY2libHkgb2ZmbGluZSBhIHBhZ2UsIGluY2x1ZGluZyBraWxsaW5nIHByb2Nlc3Nlcy4gKi9cXG4gNjIwOlxcdHN0YXRpYyBzc2l6ZV90IGhhcmRfb2ZmbGluZV9wYWdlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4gNjIxOlxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4gNjIyOlxcdFxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4gNjIzOlxcdHtcXG4gNjI0OlxcdFxcdGludCByZXQ7XFxuIDYyNTpcXHRcXHR1NjQgcGZuO1xcbiA2MjY6XFx0XFx0aWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKVxcbiA2Mjc6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gNjI4OlxcdFxcdGlmIChrc3RydG91bGwoYnVmLCAwLCBcXHUwMDI2cGZuKSBcXHUwMDNjIDApXFxuIDYyOTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNjMwOlxcdFxcdHBmbiBcXHUwMDNlXFx1MDAzZT0gUEFHRV9TSElGVDtcXG4gNjMxOlxcdFxcdHJldCA9IG1lbW9yeV9mYWlsdXJlKHBmbiwgTUZfU1dfU0lNVUxBVEVEKTtcXG4gNjMyOlxcdFxcdGlmIChyZXQgPT0gLUVPUE5PVFNVUFApXFxuIDYzMzpcXHRcXHRcXHRyZXQgPSAwO1xcbiA2MzQ6XFx0XFx0cmV0dXJuIHJldCA/IHJldCA6IGNvdW50O1xcbiA2MzU6XFx0fVxcbiA2MzY6XFx0XFxuIDYzNzpcXHRzdGF0aWMgREVWSUNFX0FUVFJfV08oc29mdF9vZmZsaW5lX3BhZ2UpO1xcbiA2Mzg6XFx0c3RhdGljIERFVklDRV9BVFRSX1dPKGhhcmRfb2ZmbGluZV9wYWdlKTtcXG4gNjM5OlxcdCNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMzowODoyNy40MzI4NDUyNDlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE0MjIwMzc4ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gQmxvY2sqKlxuXG5BbHJpZ2h0LCBJJ20gZGl2aW5nIGluLiBUaGUgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjb2RlIHNlZ21lbnQgYWJvdmUgdGhlIGAjaWZkZWZgIGRpcmVjdGl2ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHdoYXQgY29uZGl0aW9ucyBhcmUgYmVpbmcgY2hlY2tlZC4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBtZWF0IG9mIHRoZSBsb2dpYyB1c3VhbGx5IGxpZXM7IHRoZSBwcmVwcm9jZXNzb3IncyBsb2dpYyBpcyBqdXN0IGEgZ3VhcmQgcmFpbCwgYSBzZXR1cCBmb3IgdGhlIGNvcmUgZXhlY3V0aW9uLiBJJ20gbG9va2luZyBmb3IgdGhlIGltcGxpY2F0aW9ucyBvZiAqd2h5KiB0aGlzIGJsb2NrIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgaW4gdGhlIGZpcnN0IHBsYWNlLiBXaGF04oCZcyB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzPyBXaGF0IGVudmlyb25tZW50YWwgZmFjdG9ycywgZmVhdHVyZSBmbGFncywgb3IgcGxhdGZvcm0gZGlmZmVyZW5jZXMgYXJlIGJlaW5nIGFjY291bnRlZCBmb3I/IFVuZGVyc3RhbmRpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGVzcGVjaWFsbHkgdGhlIHBvdGVudGlhbCBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbnMsIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgd2hhdCBzcGVjaWZpYyBibG9jayBvZiBjb2RlIGlzIGJlaW5nIHByb3RlY3RlZCBvciBlbmFibGVkLiBJIHdpbGwgZm9jdXMgbXkgZWZmb3J0cyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBgI2lmZGVmYCBzdGF0ZW1lbnQncyBwdXJwb3NlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjMyNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjM6MDg6MzguODU0ODg1NzA4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jhc2UvbWVtb3J5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTkwOlxcdG91dDpcXG4gNTkxOlxcdFxcdHVubG9ja19kZXZpY2VfaG90cGx1ZygpO1xcbiA1OTI6XFx0XFx0cmV0dXJuIHJldDtcXG4gNTkzOlxcdH1cXG4gNTk0OlxcdFxcbiA1OTU6XFx0c3RhdGljIERFVklDRV9BVFRSX1dPKHByb2JlKTtcXG4gNTk2OlxcdCNlbmRpZlxcbiA1OTc6XFx0XFxuIDU5ODpcXHQjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXFxuIDU5OTpcXHQvKlxcbiA2MDA6XFx0ICogU3VwcG9ydCBmb3Igb2ZmbGluaW5nIHBhZ2VzIG9mIG1lbW9yeVxcbiA2MDE6XFx0ICovXFxuIDYwMjpcXHRcXG4gNjAzOlxcdC8qIFNvZnQgb2ZmbGluZSBhIHBhZ2UgKi9cXG4gNjA0OlxcdHN0YXRpYyBzc2l6ZV90IHNvZnRfb2ZmbGluZV9wYWdlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4gNjA1OlxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4gNjA2OlxcdFxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4gNjA3OlxcdHtcXG4gNjA4OlxcdFxcdGludCByZXQ7XFxuIDYwOTpcXHRcXHR1NjQgcGZuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMzowODozOC44NTUwNzgzNThaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjI2NDk0NTgyNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBTdHJhdGVneSBmb3IgYENPTkZJR19NRU1PUllfRkFJTFVSRWAgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgY29kZSB1bmRlciBgQ09ORklHX01FTU9SWV9GQUlMVVJFYC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQncyBhbHRlcmluZyB0aGUgYmVoYXZpb3Igb2YgYG1lbW9yeV9mYWlsdXJlKClgIGFuZCBgZ2V0X2FueV9wYWdlKClgLCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vayBmb3IgZnV6emluZyBwb3RlbnRpYWwuIFdlIG5lZWQgdG8gc2VlIGlmIGl0J3MgZ290IGZ1bmN0aW9uYWwgY2hhbmdlcy5cblxuVGhlIGBwYW5pY19vbl91bnJlY292ZXJhYmxlX21lbW9yeV9mYWlsdXJlYCBzeXNjdGwgaXMgb2ZmIGJ5IGRlZmF1bHQsIGJ1dCB0aGUgZnV6emVyIGNhbiBlYXNpbHkgZmxpcCB0aGF0IHN3aXRjaCB0byBleHBsb3JlIGFsbCBwb3NzaWJpbGl0aWVzLiBFdmVuIGlmIHdlIGtlZXAgaXQgb2ZmLCB0aGVyZSdzIGEgc2lnbmlmaWNhbnQgY2hhbmdlOiBgaXNfa2VybmVsX293bmVkX3BhZ2UoKWAgd2lsbCBhbHRlciB0aGUgcmV0dXJuIHZhbHVlIG9mIGBnZXRfYW55X3BhZ2UoKWAgdG8gYC1FTk9UUkVDT1ZFUkFCTEVgIGluc3RlYWQgb2YgYC1FSU9gLiBUaGF0LCBpbiB0dXJuLCBjaGFuZ2VzIGhvdyBgbWVtb3J5X2ZhaWx1cmUoKWAgYmVoYXZlczsgaXQgbm93IGNhdXNlcyBpdCB0byBpbW1lZGlhdGVseSByZXR1cm4gYGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfS0VSTkVMLCBNRl9JR05PUkVEKWAuIFRoaXMgaXMgY2xlYXJseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzbyB5ZXMsIHdlIHNob3VsZCBkZWZpbml0ZWx5IGZ1enogdGhpcy5cblxuTm93LCB3aGF0IGFyZSB0aGUga2V5IHN5bWJvbHMgdG8gdGFyZ2V0PyBJJ20gdGhpbmtpbmcgYG1lbW9yeV9mYWlsdXJlYCwgYGdldF9hbnlfcGFnZWAsIGBpc19rZXJuZWxfb3duZWRfcGFnZWAsIGFuZCBgcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZmAuIEJ1dCBob2xkIG9uLCBgaXNfa2VybmVsX293bmVkX3BhZ2VgIGFuZCBgcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZmAgYXJlIG1hcmtlZCBhcyBzdGF0aWMgaW5saW5lIG9yIHN0YXRpYyBmdW5jdGlvbnMuIFRoZXkncmUgbGlrZWx5IGlubGluZWQsIHNvIHRoYXQgYWZmZWN0cyB0aGVpciB1c2VmdWxuZXNzIGFzIGRpcmVjdCBmdXp6IHRhcmdldHMuIFNvLCBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgZ2V0X2FueV9wYWdlYCByZW1haW4gdGhlIHByaW1hcnkgZm9jdXMsIGFuZCBgYWN0aW9uX3Jlc3VsdGAgaXMgYWxzbyB3b3J0aCBrZWVwaW5nIGluIG1pbmQsIHNpbmNlIGl0J3MgdGhlIHJldHVybiBvZiBhIGNyaXRpY2FsIGZ1bmN0aW9uLlxuXG5BcyBmb3IgY29uZmlndXJhdGlvbnMsIGBNRU1PUllfRkFJTFVSRWAgaXMgdGhlIG9idmlvdXMgb25lLCBidXQgd2FpdCwgYE1FTU9SWV9GQUlMVVJFYCAqZGVwZW5kcyogb24gYEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVgLiBTbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBhbHNvIGFjY291bnQgZm9yIGBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFYCBpbiBvdXIgdGVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4MDYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMzowOTowMS41MDQ1NDA3N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExMjQ5ODk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvS2NvbmZpZz0yPWNvbmZpZyBBUk02NFxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnLTczLVxcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xcbmFyY2gvYXJtNjQvS2NvbmZpZzo3NDpcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxcbmFyY2gvYXJtNjQvS2NvbmZpZy03NS1cXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19TSEFET1dfQ0FMTF9TVEFDSyBpZiBDQ19IQVZFX1NIQURPV19DQUxMX1NUQUNLXFxuLS1cXG5hcmNoL3BhcmlzYy9LY29uZmlnPTI9Y29uZmlnIFBBUklTQ1xcbi0tXFxuYXJjaC9wYXJpc2MvS2NvbmZpZy0yMi1cXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19IVUdFVExCRlMgaWYgUEEyMFxcbmFyY2gvcGFyaXNjL0tjb25maWc6MjM6XFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcXG5hcmNoL3BhcmlzYy9LY29uZmlnLTI0LVxcdHNlbGVjdCBBUkNIX1NUQUNLV0FMS1xcbi0tXFxuYXJjaC9wb3dlcnBjL0tjb25maWc9NjI0PWNvbmZpZyBQUEM2NF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxcbi0tXFxuYXJjaC9wb3dlcnBjL0tjb25maWctNjI3LVxcdGRlZmF1bHQgXFxcInlcXFwiIGlmIFBQQ19QT1dFUk5WXFxuYXJjaC9wb3dlcnBjL0tjb25maWc6NjI4OlxcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXFxuYXJjaC9wb3dlcnBjL0tjb25maWctNjI5LVxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZz03NjI9Y29uZmlnIFg4Nl9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy03NjgtXFx0ZGVwZW5kcyBvbiBYODZfNjQgfHwgIVNQQVJTRU1FTVxcbmFyY2gveDg2L0tjb25maWc6NzY5OlxcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXFxuYXJjaC94ODYvS2NvbmZpZy03NzAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIzOjA5OjAzLjYxNzA0NTk2OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDk0NTgwMjIxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IEZhaWx1cmUgSGFuZGxpbmcgYW5kIFJlbGF0ZWQgQ29uZmlndXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gZW5hYmxpbmcgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIGBNRU1PUllfRkFJTFVSRWAgbWVjaGFuaXNtLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgYWxsIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBJIHNlZSB0aGF0IGBNRU1PUllfRkFJTFVSRWAgaXMgdGhlIHByaW1hcnkgb25lLCBhbmQgSSdtIGFsc28gY29uc2lkZXJpbmcgYEhXUE9JU09OX0lOSkVDVGAuIFRoZSBsYXR0ZXIgc2VlbXMgaW50ZXJlc3RpbmcgZm9yIGZ1enppbmcsIHBvc3NpYmx5IGVuYWJsaW5nIHRoZSBpbmplY3Rpb24gb2YgbWVtb3J5IGZhaWx1cmVzLiBJIGtub3cgaXQgcHJvdmlkZXMgYC9zeXMva2VybmVsL2RlYnVnL2h3cG9pc29uL2NvcnJ1cHQtcGZuYCBhbmQgYHVucG9pc29uLXBmbmAsIGFuZCB0aGUgc2VsZnRlc3RzIHVzZSBgdW5wb2lzb24tcGZuYCwgd2hpY2ggY29uZmlybXMgaXRzIHJlbGV2YW5jZS5cblxuSSdtIGNoZWNraW5nIGlmIHN5emthbGxlciB1dGlsaXplcyBgSFdQT0lTT05fSU5KRUNUYC4gSXQgYXBwZWFycyB0aGF0IHN5emthbGxlciB1c2VzIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCBhbmQgYC9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2hhcmRfb2ZmbGluZV9wYWdlYCwgc28gYEhXUE9JU09OX0lOSkVDVGAgaXMgZGVmaW5pdGVseSByZWxhdGVkIGFuZCB3b3J0aCBlbmFibGluZyBmb3IgZWZmZWN0aXZlIHRlc3RpbmcgYW5kIG1lbW9yeSBlcnJvciBpbmplY3Rpb24uIFRoZXJlZm9yZSwgSSdsbCBpbmNsdWRlIGJvdGggYE1FTU9SWV9GQUlMVVJFYCBhbmQgYEhXUE9JU09OX0lOSkVDVGAgaW4gbXkgY29uZmlndXJhdGlvbi5cblxuTmV4dCwgSSdsbCBleGFtaW5lIHRoZSBjb2RlIGNoYW5nZXMgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBJJ20gZm9jdXNpbmcgb24gdGhlIGZ1bmN0aW9ucyBkaXJlY3RseSBpbnZvbHZlZCBpbiB0aGlzIHByb2Nlc3MsIHNwZWNpZmljYWxseSBgbWVtb3J5X2ZhaWx1cmVgLCBgZ2V0X2FueV9wYWdlYCwgYGlzX2tlcm5lbF9vd25lZF9wYWdlYCwgYHBhbmljX29uX3VucmVjb3ZlcmFibGVfbWZgLCBhbmQgYGFjdGlvbl9yZXN1bHRgLiBJJ20gbm90aW5nIHRoYXQgYGlzX2tlcm5lbF9vd25lZF9wYWdlYCBhbmQgYHBhbmljX29uX3VucmVjb3ZlcmFibGVfbWZgIGFyZSBzdGF0aWMgYW5kIHBvdGVudGlhbGx5IGlubGluZWQsIHdoaWNoIG1pZ2h0IGFmZmVjdCB0aGVpciBzeW1ib2wgYXZhaWxhYmlsaXR5LlxuXG5Ob3csIEknbSB2ZXJpZnlpbmcgdGhlIGV4cG9ydCBzdGF0dXMgb2YgdGhlIGtleSBmdW5jdGlvbnMuIEkgc2VlIHRoYXQgYG1lbW9yeV9mYWlsdXJlYCBpcyBleHBvcnRlZCB3aXRoIGBFWFBPUlRfU1lNQk9MX0dQTChtZW1vcnlfZmFpbHVyZSlgLCBzbyBpdCdzIGRpcmVjdGx5IGFjY2Vzc2libGUuIGBnZXRfYW55X3BhZ2VgIGFuZCBgYWN0aW9uX3Jlc3VsdGAgYXJlIHN0YXRpYyB3aXRoaW4gdGhlIGZpbGUsIG1ha2luZyB0aGVpciBkaXJlY3QgdXNlIG91dHNpZGUgdGhpcyBjb250ZXh0IHVubGlrZWx5LCBidXQgSSdtIHByaW1hcmlseSBpbnRlcmVzdGVkIGluIHRoZWlyIGludGVybmFsIGxvZ2ljLlxuXG5Gcm9tIHdoYXQgSSBjYW4gdGVsbCwgdGhlIG1vZGlmaWNhdGlvbnMgSSd2ZSByZWFkIG1vZGlmeSB0aGUgY29yZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZyBsb2dpYy4gVGhleSBzaG9ydC1jaXJjdWl0IGVycm9yIHByb2Nlc3NpbmcgZm9yIGtlcm5lbC1vd25lZCBwYWdlcyAoc3VjaCBhcyB0aG9zZSB1c2VkIGJ5IHRoZSBzbGFiIGFsbG9jYXRvciwgcGFnZSB0YWJsZXMsIG9yIHJlc2VydmVkIHBhZ2VzKS4gQSBuZXcgc3lzY3RsIGlzIGFsc28gaW50cm9kdWNlZCB0byB0cmlnZ2VyIGEgcGFuaWMgdXBvbiBlbmNvdW50ZXJpbmcgdW5yZWNvdmVyYWJsZSBlcnJvcnMgd2l0aCB0aGVzZSBrZXJuZWwtb3duZWQgcGFnZXMuIFRoaXMgbWVjaGFuaXNtIGlzIGNsZWFybHkgbGlua2VkIHRvIGhhcmR3YXJlIGVycm9yIGluamVjdGlvbiBtZWNoYW5pc21zIHN1Y2ggYXMgYC9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2hhcmRfb2ZmbGluZV9wYWdlYCBvciBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAuXG5cblRvIHJlaXRlcmF0ZSwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBIV1BPSVNPTl9JTkpFQ1RgIGlzIGEgbmVjZXNzaXR5LiBJdCBpcyBhIG1vZHVsZSB3aGljaCBwcm92aWRlcyBkZWJ1Z2ZzIGludGVyZmFjZXMuIFN5emthbGxlciBjYW4gdXRpbGl6ZSBpdC4gVGh1cywgaXQgaXMgZGVzaXJhYmxlIHRvIGhhdmUgaXQgZW5hYmxlZC5cblxuTG9va2luZyBmb3Igb3RoZXIgZGVwZW5kZW5jaWVzLCBJIGNhbiBzZWUgdGhhdCBgREVCVUdfS0VSTkVMYCBhbmQgYFBST0NfRlNgIGFyZSBkZXBlbmRlbmNpZXMgZm9yIGBIV1BPSVNPTl9JTkpFQ1RgLiBUaGV5J3JlIGxpa2VseSBzdGFuZGFyZCBhbmQgZG9uJ3QgcmVxdWlyZSBzcGVjaWZpYyBjb25zaWRlcmF0aW9uLiBgTU1VYCBpcyBhIGRlcGVuZGVuY3kgZm9yIGBNRU1PUllfRkFJTFVSRWAsIHdoaWNoIGlzIGFsc28gc3RhbmRhcmQuXG5cbkJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIEknbSBjb25maWRlbnQgaW4gdGhlIGFwcHJvYWNoIGFuZCB0aGVzZSBjb25maWd1cmF0aW9ucyBhcmUgdGhlIG1vc3QgaW1wb3J0YW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzk3MSwiT3V0cHV0VG9rZW5zIjoxODksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIzOjA5OjI4LjU2Mjg1MDYwM1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTU2MDc5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIkhXUE9JU09OX0lOSkVDVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbW9yeV9mYWlsdXJlXCIsXG4gICAgXCJnZXRfYW55X3BhZ2VcIixcbiAgICBcImFjdGlvbl9yZXN1bHRcIixcbiAgICBcInBhbmljX29uX3VucmVjb3ZlcmFibGVfbWZcIixcbiAgICBcImlzX2tlcm5lbF9vd25lZF9wYWdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgbG9naWMgKGBtZW1vcnlfZmFpbHVyZWAsIGBnZXRfYW55X3BhZ2VgKSB0byBleHBsaWNpdGx5IGlkZW50aWZ5IGFuZCBzaG9ydC1jaXJjdWl0IG9uIGtlcm5lbC1vd25lZCBwYWdlcyAoc2xhYiwgcGFnZSB0YWJsZXMsIHJlc2VydmVkLCBsYXJnZSBrbWFsbG9jKS4gSXQgYWxzbyBpbnRyb2R1Y2VzIGEgbmV3IHN5c2N0bCB0byBwYW5pYyBvbiBzdWNoIHVucmVjb3ZlcmFibGUgZXJyb3JzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgaGFyZHdhcmUgZXJyb3IgaW5qZWN0aW9uIGludGVyZmFjZXMgKGUuZy4sIGAvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9oYXJkX29mZmxpbmVfcGFnZWAgb3IgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiSFdQT0lTT05fSU5KRUNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtb3J5X2ZhaWx1cmVcIixcbiAgICBcImdldF9hbnlfcGFnZVwiLFxuICAgIFwiYWN0aW9uX3Jlc3VsdFwiLFxuICAgIFwicGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZlwiLFxuICAgIFwiaXNfa2VybmVsX293bmVkX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZyBsb2dpYyAoYG1lbW9yeV9mYWlsdXJlYCwgYGdldF9hbnlfcGFnZWApIHRvIGV4cGxpY2l0bHkgaWRlbnRpZnkgYW5kIHNob3J0LWNpcmN1aXQgb24ga2VybmVsLW93bmVkIHBhZ2VzIChzbGFiLCBwYWdlIHRhYmxlcywgcmVzZXJ2ZWQsIGxhcmdlIGttYWxsb2MpLiBJdCBhbHNvIGludHJvZHVjZXMgYSBuZXcgc3lzY3RsIHRvIHBhbmljIG9uIHN1Y2ggdW5yZWNvdmVyYWJsZSBlcnJvcnMuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBoYXJkd2FyZSBlcnJvciBpbmplY3Rpb24gaW50ZXJmYWNlcyAoZS5nLiwgYC9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2hhcmRfb2ZmbGluZV9wYWdlYCBvciBgbWFkdmlzZShNQURWX0hXUE9JU09OKWApLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow64jqx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-26 22:55:52 +0000 UTC FinishedAt: 2026-06-26 23:09:30 +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": "189ce3c81f8188fb737d59a8a8784f074e830238", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_FAILURE", "HWPOISON_INJECT" ], "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": "189ce3c81f8188fb737d59a8a8784f074e830238", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_FAILURE", "HWPOISON_INJECT" ], "series_id": "40e4dccb-98f1-426e-a84a-814aa2f8cf2f" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "memory_failure", "get_any_page", "action_result", "panic_on_unrecoverable_mf", "is_kernel_owned_page" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI2IDIzOjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O0hXUE9JU09OX0lOSkVDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbW9yeV9mYWlsdXJlJiMzNDssCiAgICAmIzM0O2dldF9hbnlfcGFnZSYjMzQ7LAogICAgJiMzNDthY3Rpb25fcmVzdWx0JiMzNDssCiAgICAmIzM0O3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWYmIzM0OywKICAgICYjMzQ7aXNfa2VybmVsX293bmVkX3BhZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgbG9naWMgKGBtZW1vcnlfZmFpbHVyZWAsIGBnZXRfYW55X3BhZ2VgKSB0byBleHBsaWNpdGx5IGlkZW50aWZ5IGFuZCBzaG9ydC1jaXJjdWl0IG9uIGtlcm5lbC1vd25lZCBwYWdlcyAoc2xhYiwgcGFnZSB0YWJsZXMsIHJlc2VydmVkLCBsYXJnZSBrbWFsbG9jKS4gSXQgYWxzbyBpbnRyb2R1Y2VzIGEgbmV3IHN5c2N0bCB0byBwYW5pYyBvbiBzdWNoIHVucmVjb3ZlcmFibGUgZXJyb3JzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgaGFyZHdhcmUgZXJyb3IgaW5qZWN0aW9uIGludGVyZmFjZXMgKGUuZy4sIGAvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9oYXJkX29mZmxpbmVfcGFnZWAgb3IgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMzowNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDU4MTc0MjI1OWM0MWIyZjFkNzcxMmE0NGIwYWIwMDg2NTA4NTA3NTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1biAyNiAyMzowNToxOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3RcbmluZGV4IGI5YjBjMjE4YmZiNDQwLi4yMmNjNTRjYWMzYjIxZCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0XG5AQCAtNjcsNiAmIzQzOzY3LDcgQEAgQ3VycmVudGx5LCB0aGVzZSBmaWxlcyBhcmUgaW4gL3Byb2Mvc3lzL3ZtOlxuIC0gcGFnZS1jbHVzdGVyXG4gLSBwYWdlX2xvY2tfdW5mYWlybmVzc1xuIC0gcGFuaWNfb25fb29tXG4mIzQzOy0gcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZVxuIC0gcGVyY3B1X3BhZ2VsaXN0X2hpZ2hfZnJhY3Rpb25cbiAtIHN0YXRfaW50ZXJ2YWxcbiAtIHN0YXRfcmVmcmVzaFxuQEAgLTkyNSw2ICYjNDM7OTI2LDg1IEBAIHBhbmljX29uX29vbT0yJiM0MztrZHVtcCBnaXZlcyB5b3UgdmVyeSBzdHJvbmcgdG9vbCB0byBpbnZlc3RpZ2F0ZVxuIHdoeSBvb20gaGFwcGVucy4gWW91IGNhbiBnZXQgc25hcHNob3QuXG4gXG4gXG4mIzQzO3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmVcbiYjNDM7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7XG4mIzQzO1doZW4gYSBoYXJkd2FyZSBtZW1vcnkgZXJyb3IgKGUuZy4gbXVsdGktYml0IEVDQykgaGl0cyBhIGtlcm5lbCBwYWdlXG4mIzQzO3RoYXQgY2Fubm90IGJlIHJlY292ZXJlZCBieSB0aGUgbWVtb3J5IGZhaWx1cmUgaGFuZGxlciwgdGhlIGRlZmF1bHRcbiYjNDM7YmVoYXZpb3VyIGlzIHRvIGlnbm9yZSB0aGUgZXJyb3IgYW5kIGNvbnRpbnVlIG9wZXJhdGlvbi4gIFRoaXMgaXNcbiYjNDM7ZGFuZ2Vyb3VzIGJlY2F1c2UgdGhlIGNvcnJ1cHRlZCBkYXRhIHJlbWFpbnMgYWNjZXNzaWJsZSB0byB0aGUga2VybmVsLFxuJiM0MztyaXNraW5nIHNpbGVudCBkYXRhIGNvcnJ1cHRpb24gb3IgYSBkZWxheWVkIGNyYXNoIHdoZW4gdGhlIHBvaXNvbmVkXG4mIzQzO21lbW9yeSBpcyBuZXh0IGFjY2Vzc2VkLlxuJiM0MztcbiYjNDM7V2hlbiBlbmFibGVkLCB0aGlzIHN5c2N0bCB0cmlnZ2VycyBhIHBhbmljIG9uIG1lbW9yeSBmYWlsdXJlIGV2ZW50c1xuJiM0MztoaXR0aW5nIGtlcm5lbC1vd25lZCBwYWdlcyB0aGF0IHRoZSBoYW5kbGVyIGNhbm5vdCByZWNvdmVyOlxuJiM0MztgYFBhZ2VSZXNlcnZlZGBgIChmaXJtd2FyZSByZXNlcnZhdGlvbnMsIGtlcm5lbCBpbWFnZSwgdkRTTywgemVyb1xuJiM0MztwYWdlLCBhbmQgc2ltaWxhciBtZW1ibG9jay1yZXNlcnZlZCByZWdpb25zKSwgYGBQYWdlU2xhYmBgLFxuJiM0MztgYFBhZ2VUYWJsZWBgLCBhbmQgYGBQYWdlTGFyZ2VLbWFsbG9jYGAuICBUaGVzZSBhcmUgb3duZWQgYnkgdGhlXG4mIzQzO2tlcm5lbCBhbmQgdGhlIG1lbW9yeSBmYWlsdXJlIGhhbmRsZXIgY2Fubm90IHJlbGlhYmx5IGV2aWN0IHRoZWlyXG4mIzQzO2NvbnRlbnRzLlxuJiM0MztcbiYjNDM7T3RoZXIgdW5yZWNvdmVyYWJsZSBrZXJuZWwtb3duZWQgcG9wdWxhdGlvbnMgKHZtYWxsb2MgYWxsb2NhdGlvbnMsXG4mIzQzO2tlcm5lbCBzdGFjayBwYWdlcywgLi4uKSBhcmUgbm90IGN1cnJlbnRseSBjb3ZlcmVkIGJlY2F1c2UgdGhlXG4mIzQzO2hhbmRsZXIgaGFzIG5vIHBhZ2UtdHlwZSBzaWduYWwgdGhhdCBkaXN0aW5ndWlzaGVzIHRoZW0gZnJvbSBhXG4mIzQzO3VzZXJzcGFjZSBmb2xpbyB0ZW1wb3JhcmlseSBvZmYgdGhlIExSVSBkdXJpbmcgbWlncmF0aW9uIG9yXG4mIzQzO2NvbXBhY3Rpb24uICBTdWNoIHBhZ2VzIHN0aWxsIGdvIHRocm91Z2ggdGhlIHN0YW5kYXJkXG4mIzQzO01GX01TR19HRVRfSFdQT0lTT04gcGF0aDogYGBQR19od3BvaXNvbmBgIGlzIHNldCBvbiB0aGVtIGFuZCBhXG4mIzQzO2RlbGF5ZWQgY3Jhc2ggb24gdGhlIG5leHQgYWNjZXNzIHJlbWFpbnMgcG9zc2libGUuICBDb3ZlcmFnZSBtYXlcbiYjNDM7Z3JvdyBhcyB0aGUgaGFuZGxlciBnYWlucyBzdHJvbmdlciBrZXJuZWwtb3duZXJzaGlwIHNpZ25hbHMuXG4mIzQzO1xuJiM0MztSZWNvdmVyYWJsZSBmYWlsdXJlIHBhdGhzIGFyZSBhbHNvIGludGVudGlvbmFsbHkgbGVmdCBvdXQ6IGluLWZsaWdodFxuJiM0MztidWRkeSBhbGxvY2F0aW9ucyBhbmQgb3RoZXIgdHJhbnNpZW50IHJhY2VzIHdpdGggdGhlIHBhZ2UgYWxsb2NhdG9yXG4mIzQzO2NhbiByZWFjaCB0aGUgc2FtZSBkaWFnbm9zdGljLCBhbmQgcGFuaWNraW5nIG9uIHRoZW0gd291bGQgcmlza1xuJiM0MztraWxsaW5nIHRoZSBib3ggZm9yIGEgcGFnZSBkZXN0aW5lZCBmb3IgdXNlcnNwYWNlIHdoZXJlIHRoZSBzdGFuZGFyZFxuJiM0MztTSUdCVVMgcmVjb3ZlcnkgcGF0aCBhcHBsaWVzLiAgUGFnZXMgd2hvc2Ugc3RhdGUgY291bGQgbm90IGJlXG4mIzQzO2NsYXNzaWZpZWQgYXQgYWxsIGFyZSBub3QgY292ZXJlZCBlaXRoZXIsIHNpbmNlIGFuIHVua25vd24gc3RhdGUgaXNcbiYjNDM7bm90IGEgc291bmQgYmFzaXMgZm9yIGEgcGFuaWMgZGVjaXNpb24uXG4mIzQzO1xuJiM0MztGb3IgbWFueSBlbnZpcm9ubWVudHMgaXQgaXMgcHJlZmVyYWJsZSB0byBwYW5pYyBpbW1lZGlhdGVseSB3aXRoIGEgY2xlYW5cbiYjNDM7Y3Jhc2ggZHVtcCB0aGF0IGNhcHR1cmVzIHRoZSBvcmlnaW5hbCBlcnJvciBjb250ZXh0LCByYXRoZXIgdGhhbiB0b1xuJiM0Mztjb250aW51ZSBhbmQgZmFjZSBhIHJhbmRvbSBjcmFzaCBsYXRlciB3aG9zZSBjYXVzZSBpcyBkaWZmaWN1bHQgdG9cbiYjNDM7ZGlhZ25vc2UuXG4mIzQzO1xuJiM0MztVc2UgY2FzZXNcbiYjNDM7LS0tLS0tLS0tXG4mIzQzO1xuJiM0MztUaGlzIG9wdGlvbiBpcyBtb3N0IHVzZWZ1bCBpbiBlbnZpcm9ubWVudHMgd2hlcmUgdW5hdHRyaWJ1dGVkIGNyYXNoZXNcbiYjNDM7YXJlIGV4cGVuc2l2ZSB0byBkZWJ1ZyBvciB3aGVyZSBkYXRhIGludGVncml0eSBtdXN0IHRha2UgcHJlY2VkZW5jZVxuJiM0MztvdmVyIGF2YWlsYWJpbGl0eTpcbiYjNDM7XG4mIzQzOyogTGFyZ2UgZmxlZXRzLCB3aGVyZSBtdWx0aS1iaXQgRUNDIGVycm9ycyBvbiBrZXJuZWwgcGFnZXMgYXJlIG9ic2VydmVkXG4mIzQzOyAgcmVndWxhcmx5IGFuZCBwb3N0LW1vcnRlbSBhbmFseXNpcyBvZiBhbiB1bnJlbGF0ZWQgZG93bnN0cmVhbSBjcmFzaFxuJiM0MzsgIChvZnRlbiBzZWNvbmRzIHRvIG1pbnV0ZXMgYWZ0ZXIgdGhlIG9yaWdpbmFsIGVycm9yKSBjb25zdW1lc1xuJiM0MzsgIHNpZ25pZmljYW50IGVuZ2luZWVyaW5nIGVmZm9ydC5cbiYjNDM7XG4mIzQzOyogU3lzdGVtcyBjb25maWd1cmVkIHdpdGgga2R1bXAsIHdoZXJlIHBhbmlja2luZyBhdCB0aGUgbW9tZW50IG9mIHRoZVxuJiM0MzsgIGhhcmR3YXJlIGVycm9yIHByb2R1Y2VzIGEgdm1jb3JlIHRoYXQgc3RpbGwgY29udGFpbnMgdGhlIGZhdWx0aW5nXG4mIzQzOyAgYWRkcmVzcywgdGhlIGFmZmVjdGVkIHBhZ2Ugc3RhdGUsIGFuZCB0aGUgb3JpZ2luYXRpbmcgTUNFL0dIRVNcbiYjNDM7ICByZWNvcmQg4oCUIGNvbnRleHQgdGhhdCBpcyB0eXBpY2FsbHkgbG9zdCBieSB0aGUgdGltZSBhIGRlbGF5ZWQgY3Jhc2hcbiYjNDM7ICBvY2N1cnMuXG4mIzQzO1xuJiM0MzsqIEhpZ2gtYXZhaWxhYmlsaXR5IGNsdXN0ZXJzIHRoYXQgcmVseSBvbiBmYXN0LCBkZXRlcm1pbmlzdGljIG5vZGVcbiYjNDM7ICBmYWlsdXJlIGZvciBmYWlsb3ZlciwgYW5kIHByZWZlciBhbiBpbW1lZGlhdGUgcGFuaWMgb3ZlciBzaWxlbnQgZGF0YVxuJiM0MzsgIGNvcnJ1cHRpb24gcHJvcGFnYXRpbmcgdG8gcmVwbGljYXMgb3IgcGVyc2lzdGVudCBzdG9yYWdlLlxuJiM0MztcbiYjNDM7KiBLZXJuZWwgYW5kIHBsYXRmb3JtIGRldmVsb3BlcnMgcmVwcm9kdWNpbmcgaHdwb2lzb24gaXNzdWVzIHdpdGhcbiYjNDM7ICB0b29scyBzdWNoIGFzIGBgbWNlLWluamVjdGBgIG9yIGVycm9yLWluamVjdGlvbiBkZWJ1Z2ZzIGludGVyZmFjZXMsXG4mIzQzOyAgd2hlcmUgcGFuaWNraW5nIG9uIHRoZSB1bnJlY292ZXJhYmxlIHBhdGggbWFrZXMgcmVncmVzc2lvbnNcbiYjNDM7ICBpbW1lZGlhdGVseSB2aXNpYmxlIGluc3RlYWQgb2Ygc3VyZmFjaW5nIGFzIGxhdGVyLCB1bnJlbGF0ZWRcbiYjNDM7ICBmYWlsdXJlcy5cbiYjNDM7XG4mIzQzOz0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzOzAgVHJ5IHRvIGNvbnRpbnVlIG9wZXJhdGlvbiAoZGVmYXVsdCkuXG4mIzQzOzEgUGFuaWMgaW1tZWRpYXRlbHkuICBJZiB0aGUgYGBwYW5pY2BgIHN5c2N0bCBpcyBhbHNvIG5vbi16ZXJvIHRoZW4gdGhlXG4mIzQzOyAgbWFjaGluZSB3aWxsIGJlIHJlYm9vdGVkLlxuJiM0Mzs9ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MztcbiYjNDM7RXhhbXBsZTo6XG4mIzQzO1xuJiM0MzsgICAgIGVjaG8gMSBcdTAwM2UgL3Byb2Mvc3lzL3ZtL3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmVcbiYjNDM7XG4mIzQzO1xuIHBlcmNwdV9wYWdlbGlzdF9oaWdoX2ZyYWN0aW9uXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuaW5kZXggNTE1MDhhNTVjNDA1NWUuLjYxMTE2MGM5OGM2ZjY0IDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuQEAgLTc0LDYgJiM0Mzs3NCw4IEBAIHN0YXRpYyBpbnQgc3lzY3RsX21lbW9yeV9mYWlsdXJlX3JlY292ZXJ5IF9fcmVhZF9tb3N0bHkgPSAxO1xuIFxuIHN0YXRpYyBpbnQgc3lzY3RsX2VuYWJsZV9zb2Z0X29mZmxpbmUgX19yZWFkX21vc3RseSA9IDE7XG4gXG4mIzQzO3N0YXRpYyBpbnQgc3lzY3RsX3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWYgX19yZWFkX21vc3RseTtcbiYjNDM7XG4gYXRvbWljX2xvbmdfdCBudW1fcG9pc29uZWRfcGFnZXMgX19yZWFkX21vc3RseSA9IEFUT01JQ19MT05HX0lOSVQoMCk7XG4gXG4gc3RhdGljIGJvb2wgaHdfbWVtb3J5X2ZhaWx1cmUgX19yZWFkX21vc3RseSA9IGZhbHNlO1xuQEAgLTE1NSw2ICYjNDM7MTU3LDE1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG1lbW9yeV9mYWlsdXJlX3RhYmxlW10gPSB7XG4gXHRcdC5wcm9jX2hhbmRsZXJcdD0gcHJvY19kb2ludHZlY19taW5tYXgsXG4gXHRcdC5leHRyYTFcdFx0PSBTWVNDVExfWkVSTyxcbiBcdFx0LmV4dHJhMlx0XHQ9IFNZU0NUTF9PTkUsXG4mIzQzO1x0fSxcbiYjNDM7XHR7XG4mIzQzO1x0XHQucHJvY25hbWVcdD0gXCYjMzQ7cGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZVwmIzM0OyxcbiYjNDM7XHRcdC5kYXRhXHRcdD0gXHUwMDI2c3lzY3RsX3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWYsXG4mIzQzO1x0XHQubWF4bGVuXHRcdD0gc2l6ZW9mKHN5c2N0bF9wYW5pY19vbl91bnJlY292ZXJhYmxlX21mKSxcbiYjNDM7XHRcdC5tb2RlXHRcdD0gMDY0NCxcbiYjNDM7XHRcdC5wcm9jX2hhbmRsZXJcdD0gcHJvY19kb2ludHZlY19taW5tYXgsXG4mIzQzO1x0XHQuZXh0cmExXHRcdD0gU1lTQ1RMX1pFUk8sXG4mIzQzO1x0XHQuZXh0cmEyXHRcdD0gU1lTQ1RMX09ORSxcbiBcdH1cbiB9O1xuIFxuQEAgLTk4MCwxNyAmIzQzOzk5MSw2IEBAIHN0YXRpYyBib29sIGhhc19leHRyYV9yZWZjb3VudChzdHJ1Y3QgcGFnZV9zdGF0ZSAqcHMsIHN0cnVjdCBwYWdlICpwLFxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi0vKlxuLSAqIEVycm9yIGhpdCBrZXJuZWwgcGFnZS5cbi0gKiBEbyBub3RoaW5nLCB0cnkgdG8gYmUgbHVja3kgYW5kIG5vdCB0b3VjaCB0aGlzIGluc3RlYWQuIEZvciBhIGZldyBjYXNlcyB3ZVxuLSAqIGNvdWxkIGJlIG1vcmUgc29waGlzdGljYXRlZC5cbi0gKi9cbi1zdGF0aWMgaW50IG1lX2tlcm5lbChzdHJ1Y3QgcGFnZV9zdGF0ZSAqcHMsIHN0cnVjdCBwYWdlICpwKVxuLXtcbi1cdHVubG9ja19wYWdlKHApO1xuLVx0cmV0dXJuIE1GX0lHTk9SRUQ7XG4tfVxuLVxuIC8qXG4gICogUGFnZSBpbiB1bmtub3duIHN0YXRlLiBEbyBub3RoaW5nLlxuICAqIFRoaXMgaXMgYSBjYXRjaC1hbGwgaW4gY2FzZSB3ZSBmYWlsIHRvIG1ha2Ugc2Vuc2Ugb2YgdGhlIHBhZ2Ugc3RhdGUuXG5AQCAtMTE5OSwxMCAmIzQzOzExOTksOCBAQCBzdGF0aWMgaW50IG1lX2h1Z2VfcGFnZShzdHJ1Y3QgcGFnZV9zdGF0ZSAqcHMsIHN0cnVjdCBwYWdlICpwKVxuICNkZWZpbmUgbWxvY2tcdFx0KDFVTCBcdTAwM2NcdTAwM2MgUEdfbWxvY2tlZClcbiAjZGVmaW5lIGxydVx0XHQoMVVMIFx1MDAzY1x1MDAzYyBQR19scnUpXG4gI2RlZmluZSBoZWFkXHRcdCgxVUwgXHUwMDNjXHUwMDNjIFBHX2hlYWQpXG4tI2RlZmluZSByZXNlcnZlZFx0KDFVTCBcdTAwM2NcdTAwM2MgUEdfcmVzZXJ2ZWQpXG4gXG4gc3RhdGljIHN0cnVjdCBwYWdlX3N0YXRlIGVycm9yX3N0YXRlc1tdID0ge1xuLVx0eyByZXNlcnZlZCxcdHJlc2VydmVkLFx0TUZfTVNHX0tFUk5FTCxcdG1lX2tlcm5lbCB9LFxuIFx0LypcbiBcdCAqIGZyZWUgcGFnZXMgYXJlIHNwZWNpYWxseSBkZXRlY3RlZCBvdXRzaWRlIHRoaXMgdGFibGU6XG4gXHQgKiBQR19idWRkeSBwYWdlcyBvbmx5IG1ha2UgYSBzbWFsbCBmcmFjdGlvbiBvZiBhbGwgZnJlZSBwYWdlcy5cbkBAIC0xMjM0LDcgJiM0MzsxMjMyLDYgQEAgc3RhdGljIHN0cnVjdCBwYWdlX3N0YXRlIGVycm9yX3N0YXRlc1tdID0ge1xuICN1bmRlZiBtbG9ja1xuICN1bmRlZiBscnVcbiAjdW5kZWYgaGVhZFxuLSN1bmRlZiByZXNlcnZlZFxuIFxuIHN0YXRpYyB2b2lkIHVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyh1bnNpZ25lZCBsb25nIHBmbixcbiBcdFx0XHRcdCAgICAgZW51bSBtZl9yZXN1bHQgcmVzdWx0KVxuQEAgLTEyNjksNiAmIzQzOzEyNjYsMTUgQEAgc3RhdGljIHZvaWQgdXBkYXRlX3Blcl9ub2RlX21mX3N0YXRzKHVuc2lnbmVkIGxvbmcgcGZuLFxuIFx0JiM0MzsmIzQzO21mX3N0YXRzLVx1MDAzZXRvdGFsO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZihlbnVtIG1mX2FjdGlvbl9wYWdlX3R5cGUgdHlwZSxcbiYjNDM7XHRcdFx0XHQgICAgICBlbnVtIG1mX3Jlc3VsdCByZXN1bHQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXN5c2N0bF9wYW5pY19vbl91bnJlY292ZXJhYmxlX21mKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHlwZSA9PSBNRl9NU0dfS0VSTkVMIFx1MDAyNlx1MDAyNiByZXN1bHQgPT0gTUZfSUdOT1JFRDtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIFwmIzM0O0RpcnR5L0NsZWFuXCYjMzQ7IGluZGljYXRpb24gaXMgbm90IDEwMCUgYWNjdXJhdGUgZHVlIHRvIHRoZSBwb3NzaWJpbGl0eSBvZlxuICAqIHNldHRpbmcgUEdfZGlydHkgb3V0c2lkZSBwYWdlIGxvY2suIFNlZSBhbHNvIGNvbW1lbnQgYWJvdmUgc2V0X3BhZ2VfZGlydHkoKS5cbkBAIC0xMjg2LDYgJiM0MzsxMjkyLDkgQEAgc3RhdGljIGludCBhY3Rpb25fcmVzdWx0KHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIG1mX2FjdGlvbl9wYWdlX3R5cGUgdHlwZSxcbiBcdHByX2VycihcJiMzNDslI2x4OiByZWNvdmVyeSBhY3Rpb24gZm9yICVzOiAlc1xcblwmIzM0OyxcbiBcdFx0cGZuLCBhY3Rpb25fcGFnZV90eXBlc1t0eXBlXSwgYWN0aW9uX25hbWVbcmVzdWx0XSk7XG4gXG4mIzQzO1x0aWYgKHBhbmljX29uX3VucmVjb3ZlcmFibGVfbWYodHlwZSwgcmVzdWx0KSlcbiYjNDM7XHRcdHBhbmljKFwmIzM0O01lbW9yeSBmYWlsdXJlOiAlI2x4OiB1bnJlY292ZXJhYmxlIHBhZ2VcJiMzNDssIHBmbik7XG4mIzQzO1xuIFx0cmV0dXJuIChyZXN1bHQgPT0gTUZfUkVDT1ZFUkVEIHx8IHJlc3VsdCA9PSBNRl9ERUxBWUVEKSA/IDAgOiAtRUJVU1k7XG4gfVxuIFxuQEAgLTEzMzksNiAmIzQzOzEzNDgsMzYgQEAgc3RhdGljIGlubGluZSBib29sIEhXUG9pc29uSGFuZGxhYmxlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuIFx0cmV0dXJuIFBhZ2VMUlUocGFnZSkgfHwgaXNfZnJlZV9idWRkeV9wYWdlKHBhZ2UpO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogUG9zaXRpdmUgaWRlbnRpZmljYXRpb24gb2YgcGFnZXMgdGhlIGh3cG9pc29uIGhhbmRsZXIgY2Fubm90IHJlY292ZXI6XG4mIzQzOyAqIHBhZ2VzIG93bmVkIGJ5IGtlcm5lbCBpbnRlcm5hbHMgd2l0aCBubyB1c2Vyc3BhY2UgbWFwcGluZyB0byB1bm1hcCwgbm9cbiYjNDM7ICogZmlsZSBtYXBwaW5nIHRvIGludmFsaWRhdGUsIGFuZCBubyBtaWdyYXRpb24gdGFyZ2V0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBib29sIGlzX2tlcm5lbF9vd25lZF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBhZ2UgKmhlYWQ7XG4mIzQzO1x0Ym9vbCBrZXJuZWxfb3duZWQ7XG4mIzQzO1xuJiM0MztcdC8qIFBHX3Jlc2VydmVkIGlzIGEgcGVyLXBhZ2UgZmxhZywgbmV2ZXIgc2V0IG9uIGEgY29tcG91bmQgcGFnZS4gKi9cbiYjNDM7XHRpZiAoUGFnZVJlc2VydmVkKHBhZ2UpKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUGFnZS10eXBlIGJpdHMgbGl2ZSBvbmx5IG9uIHRoZSBoZWFkIHBhZ2UsIHNvIHJlc29sdmUgYW55IHRhaWxcbiYjNDM7XHQgKiBmaXJzdC4gIFRoZSBjaGVjayB0YWtlcyBubyByZWZjb3VudDsgcmVjaGVjayB0aGUgaGVhZCBhZnRlcndhcmRzXG4mIzQzO1x0ICogc28gYSBjb25jdXJyZW50IHNwbGl0IG9yIGNvbXBvdW5kIGZyZWUgY2Fubm90IGxlYXZlIHVzIHRydXN0aW5nXG4mIzQzO1x0ICogYSBzdGFsZSB2aWV3LiAgQSBmcmVlLVx1MDAzZWFsbG9jLVx1MDAzZWZyZWUgaW4gdGhlIHNhbWUgd2luZG93IGlzIHN0aWxsXG4mIzQzO1x0ICogcG9zc2libGUgYnV0IGNsb3NpbmcgaXQgd291bGQgcmVxdWlyZSB0YWtpbmcgYSByZWZlcmVuY2UgaGVyZS5cbiYjNDM7XHQgKi9cbiYjNDM7cmV0cnk6XG4mIzQzO1x0aGVhZCA9IGNvbXBvdW5kX2hlYWQocGFnZSk7XG4mIzQzO1x0a2VybmVsX293bmVkID0gUGFnZVNsYWIoaGVhZCkgfHwgUGFnZVRhYmxlKGhlYWQpIHx8XG4mIzQzO1x0XHQgICAgICAgUGFnZUxhcmdlS21hbGxvYyhoZWFkKTtcbiYjNDM7XHRpZiAoaGVhZCAhPSBjb21wb3VuZF9oZWFkKHBhZ2UpKVxuJiM0MztcdFx0Z290byByZXRyeTtcbiYjNDM7XHRyZXR1cm4ga2VybmVsX293bmVkO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgX19nZXRfaHdwb2lzb25fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBmbGFncylcbiB7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbkBAIC0xMzg1LDYgJiM0MzsxNDI0LDE5IEBAIHN0YXRpYyBpbnQgZ2V0X2FueV9wYWdlKHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuIFx0aWYgKGZsYWdzIFx1MDAyNiBNRl9DT1VOVF9JTkNSRUFTRUQpXG4gXHRcdGNvdW50X2luY3JlYXNlZCA9IHRydWU7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQYWdlIHR5cGVzIHdlIGtub3cgYXJlIGtlcm5lbC1vd25lZCBhbmQgY2Fubm90IGJlIHJlY292ZXJlZC5cbiYjNDM7XHQgKiBTaG9ydC1jaXJjdWl0IGJlZm9yZSB0aGUgc2hha2VfcGFnZSgpIC8gcmV0cnkgbG9vcCwgd2hpY2hcbiYjNDM7XHQgKiBjYW5ub3QgdHVybiBhbnkgb2YgdGhlc2UgaW50byBzb21ldGhpbmcgSFdQb2lzb25IYW5kbGFibGUoKS5cbiYjNDM7XHQgKiBEcm9wIHRoZSBjYWxsZXImIzM5O3MgcmVmZXJlbmNlIGlmIE1GX0NPVU5UX0lOQ1JFQVNFRCB0b29rIG9uZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoaXNfa2VybmVsX293bmVkX3BhZ2UocCkpIHtcbiYjNDM7XHRcdGlmIChjb3VudF9pbmNyZWFzZWQpXG4mIzQzO1x0XHRcdHB1dF9wYWdlKHApO1xuJiM0MztcdFx0cmV0ID0gLUVOT1RSRUNPVkVSQUJMRTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4gdHJ5X2FnYWluOlxuIFx0aWYgKCFjb3VudF9pbmNyZWFzZWQpIHtcbiBcdFx0cmV0ID0gX19nZXRfaHdwb2lzb25fcGFnZShwLCBmbGFncyk7XG5AQCAtMTQzMiw3ICYjNDM7MTQ4NCw3IEBAIHN0YXRpYyBpbnQgZ2V0X2FueV9wYWdlKHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuIFx0XHRyZXQgPSAtRUlPO1xuIFx0fVxuIG91dDpcbi1cdGlmIChyZXQgPT0gLUVJTylcbiYjNDM7XHRpZiAocmV0ID09IC1FSU8gfHwgcmV0ID09IC1FTk9UUkVDT1ZFUkFCTEUpXG4gXHRcdHByX2VycihcJiMzNDslI2x4OiB1bmhhbmRsYWJsZSBwYWdlLlxcblwmIzM0OywgcGFnZV90b19wZm4ocCkpO1xuIFxuIFx0cmV0dXJuIHJldDtcbkBAIC0xNDg5LDcgJiM0MzsxNTQxLDEwIEBAIHN0YXRpYyBpbnQgX19nZXRfdW5wb2lzb25fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbiAgKiAgICAgICAgIC1FSU8gZm9yIHBhZ2VzIG9uIHdoaWNoIHdlIGNhbiBub3QgaGFuZGxlIG1lbW9yeSBlcnJvcnMsXG4gICogICAgICAgICAtRUJVU1kgd2hlbiBnZXRfaHdwb2lzb25fcGFnZSgpIGhhcyByYWNlZCB3aXRoIHBhZ2UgbGlmZWN5Y2xlXG4gICogICAgICAgICBvcGVyYXRpb25zIGxpa2UgYWxsb2NhdGlvbiBhbmQgZnJlZSxcbi0gKiAgICAgICAgIC1FSFdQT0lTT04gd2hlbiB0aGUgcGFnZSBpcyBod3BvaXNvbmVkIGFuZCB0YWtlbiBvZmYgZnJvbSBidWRkeS5cbiYjNDM7ICogICAgICAgICAtRUhXUE9JU09OIHdoZW4gdGhlIHBhZ2UgaXMgaHdwb2lzb25lZCBhbmQgdGFrZW4gb2ZmIGZyb20gYnVkZHksXG4mIzQzOyAqICAgICAgICAgLUVOT1RSRUNPVkVSQUJMRSBmb3Iga2VybmVsLW93bmVkIHBhZ2VzIGlkZW50aWZpZWQgYnlcbiYjNDM7ICogICAgICAgICBpc19rZXJuZWxfb3duZWRfcGFnZSgpIChQR19yZXNlcnZlZCwgc2xhYixcbiYjNDM7ICogICAgICAgICBwYWdlLXRhYmxlLCBsYXJnZS1rbWFsbG9jKSB0aGF0IHRoZSBoYW5kbGVyIGNhbm5vdCByZWNvdmVyLlxuICAqL1xuIHN0YXRpYyBpbnQgZ2V0X2h3cG9pc29uX3BhZ2Uoc3RydWN0IHBhZ2UgKnAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4ge1xuQEAgLTI0MDIsNyAmIzQzOzI0NTcsOCBAQCBpbnQgbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbiBcdCAqIHRoYXQgbWF5IG1ha2UgcGFnZV9yZWZfZnJlZXplKCkvcGFnZV9yZWZfdW5mcmVlemUoKSBtaXNtYXRjaC5cbiBcdCAqL1xuIFx0cmVzID0gZ2V0X2h3cG9pc29uX3BhZ2UocCwgZmxhZ3MpO1xuLVx0aWYgKCFyZXMpIHtcbiYjNDM7XHRzd2l0Y2ggKHJlcykge1xuJiM0MztcdGNhc2UgMDpcbiBcdFx0aWYgKGlzX2ZyZWVfYnVkZHlfcGFnZShwKSkge1xuIFx0XHRcdGlmICh0YWtlX3BhZ2Vfb2ZmX2J1ZGR5KHApKSB7XG4gXHRcdFx0XHRwYWdlX3JlZl9pbmMocCk7XG5AQCAtMjQyMSw3ICYjNDM7MjQ3NywxOSBAQCBpbnQgbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbiBcdFx0XHRyZXMgPSBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0tFUk5FTF9ISUdIX09SREVSLCBNRl9JR05PUkVEKTtcbiBcdFx0fVxuIFx0XHRnb3RvIHVubG9ja19tdXRleDtcbi1cdH0gZWxzZSBpZiAocmVzIFx1MDAzYyAwKSB7XG4mIzQzO1x0Y2FzZSAxOlxuJiM0MztcdFx0LyogR290IGEgcmVmY291bnQgb24gYSBoYW5kbGFibGUgcGFnZS4gKi9cbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgLUVOT1RSRUNPVkVSQUJMRTpcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBTdGFibGUgdW5oYW5kbGFibGUga2VybmVsLW93bmVkIHBhZ2UgKFBHX3Jlc2VydmVkLFxuJiM0MztcdFx0ICogc2xhYiwgcGFnZSB0YWJsZXMsIGxhcmdlLWttYWxsb2MpLlxuJiM0MztcdFx0ICogTm8gcmVjb3ZlcnkgcG9zc2libGUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJlcyA9IGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfS0VSTkVMLCBNRl9JR05PUkVEKTtcbiYjNDM7XHRcdGdvdG8gdW5sb2NrX211dGV4O1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHQvKiBUcmFuc2llbnQgbGlmZWN5Y2xlIHJhY2Ugd2l0aCB0aGUgcGFnZSBhbGxvY2F0b3IuICovXG4gXHRcdHJlcyA9IGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfR0VUX0hXUE9JU09OLCBNRl9JR05PUkVEKTtcbiBcdFx0Z290byB1bmxvY2tfbXV0ZXg7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuaW5kZXggZTZkZjk2OGYwOTcxYzguLmVkMzIxYWU3MDlkYWNmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG5AQCAtMTc0LDYgJiM0MzsxNzQsMTAgQEAgVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF91c2VyZmF1bHRmZC5zaFxuIFRFU1RfUFJPR1MgJiM0Mzs9IGtzZnRfdm1hX21lcmdlLnNoXG4gVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF92bWFsbG9jLnNoXG4gXG4mIzQzOyMgRGVzdHJ1Y3RpdmU6IGV2ZXJ5IHN1Y2Nlc3NmdWwgcnVuIHBhbmljcyB0aGUga2VybmVsLiAgSW5zdGFsbGVkIGFuZFxuJiM0MzsjIGtlcHQgZXhlY3V0YWJsZSwgYnV0IG5vdCBydW4gZnJvbSBhIGRlZmF1bHQga3NlbGZ0ZXN0IGludm9jYXRpb24uXG4mIzQzO1RFU1RfUFJPR1NfRVhURU5ERUQgJiM0Mzs9IGh3cG9pc29uLXBhbmljLnNoXG4mIzQzO1xuIFRFU1RfRklMRVMgOj0gdGVzdF92bWFsbG9jLnNoXG4gVEVTVF9GSUxFUyAmIzQzOz0gdGVzdF9obW0uc2hcbiBURVNUX0ZJTEVTICYjNDM7PSB2YV9oaWdoX2FkZHJfc3dpdGNoLnNoXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHdwb2lzb24tcGFuaWMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9od3BvaXNvbi1wYW5pYy5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hYWZjMDZlODk1ZDAxZFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHdwb2lzb24tcGFuaWMuc2hcbkBAIC0wLDAgJiM0MzsxLDI0OSBAQFxuJiM0MzsjIS9iaW4vYmFzaFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOyNcbiYjNDM7IyBWZXJpZnkgdm0ucGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZSBieSBpbmplY3RpbmcgYSBod3BvaXNvblxuJiM0MzsjIGVycm9yIG9uIGEga2VybmVsLW93bmVkIHBhZ2UgYW5kIGNvbmZpcm1pbmcgdGhlIGtlcm5lbCBwYW5pY3MuXG4mIzQzOyNcbiYjNDM7IyBUaHJlZSBcJiMzNDtraW5kc1wmIzM0OyBvZiBrZXJuZWwtb3duZWQgcGFnZSBjYW4gYmUgdGFyZ2V0ZWQsIHNlbGVjdGFibGUgdmlhIHRoZVxuJiM0MzsjIGZpcnN0IHBvc2l0aW9uYWwgYXJndW1lbnQgKGRlZmF1bHQ6IHJvZGF0YSk6XG4mIzQzOyNcbiYjNDM7IyAgIHJvZGF0YSAgLSBhIFBHX3Jlc2VydmVkIHBhZ2UgaW4gdGhlIGtlcm5lbCByb2RhdGEgcmFuZ2VcbiYjNDM7IyAgICAgICAgICAgICAoc291cmNlZCBmcm9tIC9wcm9jL2lvbWVtIFwmIzM0O0tlcm5lbCByb2RhdGFcJiMzNDspLiAgRXhlcmNpc2VzXG4mIzQzOyMgICAgICAgICAgICAgbWVtb3J5X2ZhaWx1cmUoKSAtXHUwMDNlIGdldF9hbnlfcGFnZSgpIG9uIGEgUGFnZVJlc2VydmVkIHBhZ2UuXG4mIzQzOyNcbiYjNDM7IyAgIHNsYWIgICAgLSBhIHNsYWIgcGFnZSBmb3VuZCB2aWEgL3Byb2Mva3BhZ2VmbGFncyAoS1BGX1NMQUIpLlxuJiM0MzsjICAgICAgICAgICAgIEV4ZXJjaXNlcyBtZW1vcnlfZmFpbHVyZSgpIC1cdTAwM2UgZ2V0X2FueV9wYWdlKCkgb24gYSBub25cbiYjNDM7IyAgICAgICAgICAgICBQR19yZXNlcnZlZCBrZXJuZWwtb3duZWQgcGFnZS4gIFRoaXMgcGF0aCBpcyB3aGF0IGNhdGNoZXNcbiYjNDM7IyAgICAgICAgICAgICByZWdyZXNzaW9ucyB3aGVyZSBnZXRfYW55X3BhZ2UoKSBjb2xsYXBzZXMga2VybmVsLW93bmVkXG4mIzQzOyMgICAgICAgICAgICAgcGFnZXMgaW50byBhIHRyYW5zaWVudCAtRUlPIGluc3RlYWQgb2YgLUVOT1RSRUNPVkVSQUJMRS5cbiYjNDM7I1xuJiM0MzsjICAgcGd0YWJsZSAtIGEgcGFnZS10YWJsZSBwYWdlIGZvdW5kIHZpYSAvcHJvYy9rcGFnZWZsYWdzIChLUEZfUEdUQUJMRSkuXG4mIzQzOyMgICAgICAgICAgICAgU2FtZSBwYXRoIGFzIHNsYWIsIGRpZmZlcmVudCBwYWdlIHR5cGUuXG4mIzQzOyNcbiYjNDM7IyBUaGlzIHRlc3QgaXMgREVTVFJVQ1RJVkU6IGEgc3VjY2Vzc2Z1bCBydW4gY3Jhc2hlcyB0aGUga2VybmVsLiAgSXQgaXNcbiYjNDM7IyBtZWFudCB0byBiZSBleGVjdXRlZCBpbnNpZGUgYSBkaXNwb3NhYmxlIFZNIChlLmcuIHZpcnRtZS1uZykgd2l0aCBhXG4mIzQzOyMgc2VyaWFsIGNvbnNvbGUgY2FwdHVyZWQgYnkgdGhlIGhhcm5lc3MuICBJdCBpcyBza2lwcGVkIHVubGVzcyB0aGVcbiYjNDM7IyBjYWxsZXIgb3B0cyBpbiB2aWEgUlVOX0RFU1RSVUNUSVZFPTEuXG4mIzQzOyNcbiYjNDM7IyBUZXN0IHBhc3NlcyBleHRlcm5hbGx5OiB0aGUga2VybmVsIG11c3QgcGFuaWMgd2l0aFxuJiM0MzsjICAgXCYjMzQ7TWVtb3J5IGZhaWx1cmU6IFx1MDAzY3Bmblx1MDAzZTogdW5yZWNvdmVyYWJsZSBwYWdlXCYjMzQ7XG4mIzQzOyMgQSByZXR1cm4gZnJvbSB0aGUgaW5qZWN0IG1lYW5zIG5vIHBhbmljIGZpcmVkOiB0aGF0IGlzIGEgZmFpbHVyZSxcbiYjNDM7IyB1bmxlc3MgdGhlIHRhcmdldCBQRk4gcmFjZWQgdG8gYSBkaWZmZXJlbnQgcGFnZSB0eXBlIGJlZm9yZSBpbmplY3Rpb24sXG4mIzQzOyMgaW4gd2hpY2ggY2FzZSB0aGUgcnVuIGlzIGluY29uY2x1c2l2ZSBhbmQgaXMgc2tpcHBlZC5cbiYjNDM7I1xuJiM0MzsjIEF1dGhvcjogQnJlbm8gTGVpdGFvIFx1MDAzY2xlaXRhb0BkZWJpYW4ub3JnXHUwMDNlXG4mIzQzO1xuJiM0MztzZXQgLXVcbiYjNDM7XG4mIzQzO2tzZnRfc2tpcD00XG4mIzQzO3N5c2N0bF9wYXRoPS9wcm9jL3N5cy92bS9wYW5pY19vbl91bnJlY292ZXJhYmxlX21lbW9yeV9mYWlsdXJlXG4mIzQzO2luamVjdF9wYXRoPS9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2hhcmRfb2ZmbGluZV9wYWdlXG4mIzQzO2twYWdlZmxhZ3NfcGF0aD0vcHJvYy9rcGFnZWZsYWdzXG4mIzQzO3VucG9pc29uX3BhdGg9L3N5cy9rZXJuZWwvZGVidWcvaHdwb2lzb24vdW5wb2lzb24tcGZuXG4mIzQzO1xuJiM0MzsjIC9wcm9jL2twYWdlZmxhZ3MgYml0IHBvc2l0aW9ucyAoc2VlIGluY2x1ZGUvdWFwaS9saW51eC9rZXJuZWwtcGFnZS1mbGFncy5oKVxuJiM0MztLUEZfU0xBQj03XG4mIzQzO0tQRl9DT01QT1VORF9UQUlMPTE2XG4mIzQzO0tQRl9IV1BPSVNPTj0xOVxuJiM0MztLUEZfTk9QQUdFPTIwXG4mIzQzO0tQRl9QR1RBQkxFPTI2XG4mIzQzO0tQRl9SRVNFUlZFRD0zMlxuJiM0MztcbiYjNDM7cGFnZXNpemU9JChnZXRjb25mIFBBR0VfU0laRSlcbiYjNDM7XG4mIzQzO2tpbmQ9JHsxOi1yb2RhdGF9XG4mIzQzO1xuJiM0Mztrc2Z0X3ByaW50KCkgeyBlY2hvIFwmIzM0OyMgJCpcJiMzNDs7IH1cbiYjNDM7a3NmdF9leGl0X3NraXAoKSB7IGtzZnRfcHJpbnQgXCYjMzQ7JCpcJiMzNDs7IGV4aXQgXCYjMzQ7JGtzZnRfc2tpcFwmIzM0OzsgfVxuJiM0Mztrc2Z0X2V4aXRfZmFpbCgpIHsgZWNobyBcJiMzNDtub3Qgb2sgMSAkKlwmIzM0OzsgZXhpdCAxOyB9XG4mIzQzO1xuJiM0MztpZiBbIFwmIzM0OyQoaWQgLXUpXCYjMzQ7IC1uZSAwIF07IHRoZW5cbiYjNDM7XHRrc2Z0X2V4aXRfc2tpcCBcJiMzNDttdXN0IHJ1biBhcyByb290XCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO1xuJiM0MztpZiBbICEgLXcgXCYjMzQ7JHN5c2N0bF9wYXRoXCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRrc2Z0X2V4aXRfc2tpcCBcJiMzNDskc3lzY3RsX3BhdGggbm90IHByZXNlbnQgKGtlcm5lbCB3aXRob3V0IHRoZSBzeXNjdGw/KVwmIzM0O1xuJiM0MztmaVxuJiM0MztcbiYjNDM7aWYgWyAhIC13IFwmIzM0OyRpbmplY3RfcGF0aFwmIzM0OyBdOyB0aGVuXG4mIzQzO1x0a3NmdF9leGl0X3NraXAgXCYjMzQ7JGluamVjdF9wYXRoIG5vdCBwcmVzZW50IChubyBNRU1PUllfSE9UUExVRz8pXCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO1xuJiM0MztpZiBbIFwmIzM0OyR7UlVOX0RFU1RSVUNUSVZFOi0wfVwmIzM0OyAhPSBcJiMzNDsxXCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRrc2Z0X2V4aXRfc2tpcCBcJiMzNDtkZXN0cnVjdGl2ZSB0ZXN0OyByZS1ydW4gd2l0aCBSVU5fREVTVFJVQ1RJVkU9MSBpbnNpZGUgYSBkaXNwb3NhYmxlIFZNXCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO1xuJiM0MzsjIFBpY2sgYSBQRk4gaW5zaWRlIHRoZSBrZXJuZWwgaW1hZ2Ugcm9kYXRhIHJlZ2lvbiBvZiAvcHJvYy9pb21lbS5cbiYjNDM7IyBUaGlzIGlzIHByZWZlcnJlZCBvdmVyIGEgdG9wLWxldmVsIFwmIzM0O1Jlc2VydmVkXCYjMzQ7IGVudHJ5IGJlY2F1c2UgdG9wLWxldmVsXG4mIzQzOyMgUmVzZXJ2ZWQgcmFuZ2VzIGFyZSBvZnRlbiBmaXJtd2FyZSBob2xlcyB0aGF0IGhhdmUgbm8gYmFja2luZyBzdHJ1Y3RcbiYjNDM7IyBwYWdlOyBwZm5fdG9fb25saW5lX3BhZ2UoKSByZXR1cm5zIE5VTEwgb24gdGhvc2UgYW5kIG1lbW9yeV9mYWlsdXJlKClcbiYjNDM7IyBiYWlscyBvdXQgd2l0aCAtRU5YSU8gYmVmb3JlIHJlYWNoaW5nIHRoZSBwYW5pYyBwYXRoLlxuJiM0MzsjXG4mIzQzOyMgXCYjMzQ7S2VybmVsIHJvZGF0YVwmIzM0OyBpcyByZXBvcnRlZCBhcyBhIHN1Yi1yZXNvdXJjZSBvZiBcJiMzNDtTeXN0ZW0gUkFNXCYjMzQ7IG9uIGV2ZXJ5XG4mIzQzOyMgbWFqb3IgYXJjaGl0ZWN0dXJlLCB3aGljaCBndWFyYW50ZWVzOlxuJiM0MzsjICAgLSB0aGUgUEZOIGlzIGJhY2tlZCBieSBzdHJ1Y3QgcGFnZSAod2l0aGluIGFuIG9ubGluZSBtZW1vcnkgcmFuZ2UpO1xuJiM0MzsjICAgLSBQR19yZXNlcnZlZCBpcyBzZXQgb24gdGhlIHBhZ2UgKGtlcm5lbCBpbWFnZSBhcmVhKTtcbiYjNDM7IyAgIC0gdGhlIG1lbW9yeSBpcyByZWFkLW9ubHksIHNvIHNldHRpbmcgUEdfaHdwb2lzb24gb24gaXQgZG9lcyBub3RcbiYjNDM7IyAgICAgY29ycnVwdCB3cml0YWJsZSBrZXJuZWwgc3RhdGUgaWYgdGhlIHBhbmljIHNvbWVob3cgZG9lcyBub3QgZmlyZS5cbiYjNDM7I1xuJiM0MzsjIC9wcm9jL2lvbWVtIGVudHJpZXMgbG9vayBsaWtlIChpbmRlbnRlZCBmb3Igc3ViLXJlc291cmNlcyk6XG4mIzQzOyMgICAgIFwmIzM0OyAgMDI1MDAwMDAtMDJmZmZmZmYgOiBLZXJuZWwgcm9kYXRhXCYjMzQ7XG4mIzQzO3BpY2tfcm9kYXRhX3BoeXNfYWRkcigpIHtcbiYjNDM7XHRhd2sgLXYgcGFnZXNpemU9XCYjMzQ7JChnZXRjb25mIFBBR0VfU0laRSlcJiMzNDsgJiMzOTtcbiYjNDM7XHQjIENvbnZlcnQgYSBoZXggc3RyaW5nIHRvIGEgbnVtYmVyIHdpdGhvdXQgcmVseWluZyBvbiB0aGUgZ2F3ay1vbmx5XG4mIzQzO1x0IyBzdHJ0b251bSgpLiAgbWF3ayBsYWNrcyBpdCBhbmQgd291bGQgb3RoZXJ3aXNlIHNwdXJpb3VzbHkgc2tpcFxuJiM0MztcdCMgdGhpcyB0ZXN0IG9uIGRpc3Ryb3MgdGhhdCBzaGlwIG1hd2sgYXMgL3Vzci9iaW4vYXdrLlxuJiM0MztcdGZ1bmN0aW9uIGhleDJudW0ocywgICBuLCBpLCBjLCB2KSB7XG4mIzQzO1x0XHRuID0gMFxuJiM0MztcdFx0Zm9yIChpID0gMTsgaSBcdTAwM2M9IGxlbmd0aChzKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0YyA9IHRvbG93ZXIoc3Vic3RyKHMsIGksIDEpKVxuJiM0MztcdFx0XHR2ID0gaW5kZXgoXCYjMzQ7MDEyMzQ1Njc4OWFiY2RlZlwmIzM0OywgYykgLSAxXG4mIzQzO1x0XHRcdGlmICh2IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdHJldHVybiAtMVxuJiM0MztcdFx0XHRuID0gbiAqIDE2ICYjNDM7IHZcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJldHVybiBuXG4mIzQzO1x0fVxuJiM0MztcdC86IEtlcm5lbCByb2RhdGFbWzpzcGFjZTpdXSokLyB7XG4mIzQzO1x0XHRzdWIoL15bWzpzcGFjZTpdXSYjNDM7LywgXCYjMzQ7XCYjMzQ7KVxuJiM0MztcdFx0biA9IHNwbGl0KCQwLCBhLCAvWy0gXS8pXG4mIzQzO1x0XHRzdGFydCA9IGhleDJudW0oYVsxXSlcbiYjNDM7XHRcdGVuZCAgID0gaGV4Mm51bShhWzJdKVxuJiM0MztcdFx0aWYgKGVuZCBcdTAwM2M9IHN0YXJ0KVxuJiM0MztcdFx0XHRuZXh0XG4mIzQzO1x0XHQjIFBhZ2UtYWxpZ24gdXB3YXJkIGFuZCBlbWl0IHRoZSBmaXJzdCBieXRlIG9mIHRoYXQgcGFnZS5cbiYjNDM7XHRcdHBmbiA9IGludCgoc3RhcnQgJiM0MzsgcGFnZXNpemUgLSAxKSAvIHBhZ2VzaXplKVxuJiM0MztcdFx0cHJpbnRmIFwmIzM0OzB4JXhcXG5cJiMzNDssIHBmbiAqIHBhZ2VzaXplXG4mIzQzO1x0XHRleGl0IDBcbiYjNDM7XHR9XG4mIzQzO1x0JiMzOTsgL3Byb2MvaW9tZW1cbiYjNDM7fVxuJiM0MztcbiYjNDM7IyBXYWxrIC9wcm9jL2twYWdlZmxhZ3MgYW5kIHJldHVybiB0aGUgcGh5cyBhZGRyIG9mIHRoZSBmaXJzdCBQRk4gdGhhdFxuJiM0MzsjIGhhcyBiaXQgJDEgc2V0LCB3aXRoIEtQRl9IV1BPSVNPTiwgS1BGX05PUEFHRSBhbmQgS1BGX0NPTVBPVU5EX1RBSUxcbiYjNDM7IyBhbGwgY2xlYXIgKHNvIHdlIGF0dGFjayBhIHJlYWwsIG5vbi10YWlsLCBub3QtYWxyZWFkeS1wb2lzb25lZCBwYWdlKS5cbiYjNDM7I1xuJiM0MzsjIFdlIHNraXAgdGhlIGZpcnN0IDE2IE1pQiBvZiBQRk5zIHRvIHN0ZXAgcGFzdCBsb3ctbWVtb3J5IHNwZWNpYWxcbiYjNDM7IyByYW5nZXMgKEJJT1MvRUZJL0FDUEkvZXRjLikgdGhhdCBvZnRlbiBhcmUgUEdfcmVzZXJ2ZWQgYW5kIHdvdWxkIG5vdFxuJiM0MzsjIGV4aGliaXQgdGhlIHNsYWIvcGd0YWJsZSB0eXBlIHdlIGFyZSBsb29raW5nIGZvci5cbiYjNDM7cGlja19rcGFnZWZsYWdzX3BoeXNfYWRkcigpIHtcbiYjNDM7XHRsb2NhbCB3YW50X2JpdD0kMVxuJiM0MztcdGxvY2FsIHBhZ2VzaXplIHNraXBfcGZuXG4mIzQzO1xuJiM0MztcdFsgLXIgXCYjMzQ7JGtwYWdlZmxhZ3NfcGF0aFwmIzM0OyBdIHx8IHJldHVyblxuJiM0MztcbiYjNDM7XHRwYWdlc2l6ZT0kKGdldGNvbmYgUEFHRV9TSVpFKVxuJiM0MztcdHNraXBfcGZuPSQoKCgxNiAqIDEwMjQgKiAxMDI0KSAvIHBhZ2VzaXplKSlcbiYjNDM7XG4mIzQzO1x0b2QgLUFuIC10eDggLXYgLXc4IC1qIFwmIzM0OyQoKHNraXBfcGZuICogOCkpXCYjMzQ7IFwmIzM0OyRrcGFnZWZsYWdzX3BhdGhcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbCB8IFxcXG4mIzQzO1x0YXdrIC12IHdhbnRfYml0PVwmIzM0OyR3YW50X2JpdFwmIzM0OyBcXFxuJiM0MztcdCAgICAtdiBod3BfYml0PVwmIzM0OyRLUEZfSFdQT0lTT05cJiMzNDsgXFxcbiYjNDM7XHQgICAgLXYgbm9wYWdlX2JpdD1cJiMzNDskS1BGX05PUEFHRVwmIzM0OyBcXFxuJiM0MztcdCAgICAtdiB0YWlsX2JpdD1cJiMzNDskS1BGX0NPTVBPVU5EX1RBSUxcJiMzNDsgXFxcbiYjNDM7XHQgICAgLXYgYmFzZV9wZm49XCYjMzQ7JHNraXBfcGZuXCYjMzQ7IFxcXG4mIzQzO1x0ICAgIC12IHBhZ2VzaXplPVwmIzM0OyRwYWdlc2l6ZVwmIzM0OyAmIzM5O1xuJiM0MztcdCMgVGVzdCB3aGV0aGVyIGJpdCBcJiMzNDtiXCYjMzQ7IGlzIHNldCBpbiB0aGUgMTYtaGV4LWRpZ2l0IHZhbHVlIFwmIzM0O2hleFwmIzM0Oy5cbiYjNDM7XHQjIERvbmUgd2l0aCBzdWJzdHJpbmcgJiM0MzsgcGVyLWRpZ2l0IGxvb2t1cCBzbyB3ZSBuZXZlciByZWx5IG9uIGF3a1xuJiM0MztcdCMgYml0d2lzZSBvcGVyYXRvcnMgKG1hd2sgbGFja3MgdGhlbSksIDY0LWJpdCBGUCBwcmVjaXNpb24gb3IgdGhlXG4mIzQzO1x0IyBnYXdrLW9ubHkgc3RydG9udW0oKS5cbiYjNDM7XHRmdW5jdGlvbiBiaXRfc2V0KGhleCwgYiwgICAgZGksIGJpLCBjLCB2KSB7XG4mIzQzO1x0XHRkaSA9IGludChiIC8gNClcbiYjNDM7XHRcdGJpID0gYiAtIGRpICogNFxuJiM0MztcdFx0YyA9IHN1YnN0cihoZXgsIGxlbmd0aChoZXgpIC0gZGksIDEpXG4mIzQzO1x0XHR2ID0gaW5kZXgoXCYjMzQ7MDEyMzQ1Njc4OWFiY2RlZlwmIzM0OywgdG9sb3dlcihjKSkgLSAxXG4mIzQzO1x0XHRpZiAoYmkgPT0gMCkgcmV0dXJuICh2ICUgMikgPT0gMVxuJiM0MztcdFx0aWYgKGJpID09IDEpIHJldHVybiBpbnQodiAvIDIpICUgMiA9PSAxXG4mIzQzO1x0XHRpZiAoYmkgPT0gMikgcmV0dXJuIGludCh2IC8gNCkgJSAyID09IDFcbiYjNDM7XHRcdHJldHVybiBpbnQodiAvIDgpICUgMiA9PSAxXG4mIzQzO1x0fVxuJiM0MztcdHtcbiYjNDM7XHRcdGdzdWIoL15bWzpzcGFjZTpdXSYjNDM7LywgXCYjMzQ7XCYjMzQ7KVxuJiM0MztcdFx0aCA9ICQxXG4mIzQzO1x0XHRpZiAoYml0X3NldChoLCB3YW50X2JpdCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIWJpdF9zZXQoaCwgaHdwX2JpdCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIWJpdF9zZXQoaCwgbm9wYWdlX2JpdCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIWJpdF9zZXQoaCwgdGFpbF9iaXQpKSB7XG4mIzQzO1x0XHRcdHBmbiA9IGJhc2VfcGZuICYjNDM7IE5SIC0gMVxuJiM0MztcdFx0XHRwcmludGYgXCYjMzQ7MHgleFxcblwmIzM0OywgcGZuICogcGFnZXNpemVcbiYjNDM7XHRcdFx0ZXhpdCAwXG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdCYjMzk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyMgUmV0dXJuIDAgaWYgL3Byb2Mva3BhZ2VmbGFncyBiaXQgJDIgaXMgc2V0IGZvciBQRk4gJDEsIDEgaWYgaXQgaXNcbiYjNDM7IyBjbGVhciwgb3IgMiBpZiB0aGUgd29yZCBjYW5ub3QgYmUgcmVhZC4gIFVzZWQgdG8gcmUtY29uZmlybSB0aGUgdGFyZ2V0XG4mIzQzOyMgcGFnZSB0eXBlIGFmdGVyIGEgbm9uLXBhbmlja2luZyBpbmplY3QuXG4mIzQzO2twYWdlZmxhZ3NfYml0X3NldCgpIHtcbiYjNDM7XHRsb2NhbCB3b3JkXG4mIzQzO1xuJiM0MztcdHdvcmQ9JChvZCAtQW4gLXR4OCAtdiAtaiBcJiMzNDskKCgkMSAqIDgpKVwmIzM0OyAtTiA4IFwmIzM0OyRrcGFnZWZsYWdzX3BhdGhcJiMzNDsgMlx1MDAzZS9kZXYvbnVsbCB8IHRyIC1kICYjMzk7WzpzcGFjZTpdJiMzOTspXG4mIzQzO1x0WyAtbiBcJiMzNDskd29yZFwmIzM0OyBdIHx8IHJldHVybiAyXG4mIzQzO1x0KCggKDE2IyR3b3JkIFx1MDAzZVx1MDAzZSAkMikgXHUwMDI2IDEgKSlcbiYjNDM7fVxuJiM0MztcbiYjNDM7IyBCZXN0LWVmZm9ydDogZHJvcCB0aGUgUEdfaHdwb2lzb24gbWFya2VyIHNldCBieSB0aGUgaW5qZWN0IHNvIGEgZmFpbGVkXG4mIzQzOyMgcnVuIGRvZXMgbm90IGxlYXZlIGEgcG9pc29uZWQgcGFnZSBiZWhpbmQuICBoYXJkX29mZmxpbmVfcGFnZSgpIGluamVjdHNcbiYjNDM7IyB3aXRoIE1GX1NXX1NJTVVMQVRFRCwgc28gdGhlIHBhZ2Ugc3RheXMgdW5wb2lzb25hYmxlIHRocm91Z2ggdGhlXG4mIzQzOyMgaHdwb2lzb24gZGVidWdmcyBpbnRlcmZhY2UgKG5lZWRzIENPTkZJR19IV1BPSVNPTl9JTkpFQ1QgJiM0MzsgZGVidWdmcykuXG4mIzQzO3RyeV91bnBvaXNvbigpIHtcbiYjNDM7XHRbIC13IFwmIzM0OyR1bnBvaXNvbl9wYXRoXCYjMzQ7IF0gfHwgcmV0dXJuIDBcbiYjNDM7XHRlY2hvIFwmIzM0OyQxXCYjMzQ7IFx1MDAzZSBcJiMzNDskdW5wb2lzb25fcGF0aFwmIzM0OyAyXHUwMDNlL2Rldi9udWxsIHx8IHRydWVcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y2FzZSBcJiMzNDska2luZFwmIzM0OyBpblxuJiM0Mztyb2RhdGEpXG4mIzQzO1x0cGh5c19hZGRyPSQocGlja19yb2RhdGFfcGh5c19hZGRyKVxuJiM0MztcdHJlY2hlY2tfYml0PSRLUEZfUkVTRVJWRURcbiYjNDM7XHRtaXNzaW5nX21zZz0mIzM5O25vIFwmIzM0O0tlcm5lbCByb2RhdGFcJiMzNDsgZW50cnkgaW4gL3Byb2MvaW9tZW0mIzM5O1xuJiM0MztcdDs7XG4mIzQzO3NsYWIpXG4mIzQzO1x0cGh5c19hZGRyPSQocGlja19rcGFnZWZsYWdzX3BoeXNfYWRkciBcJiMzNDskS1BGX1NMQUJcJiMzNDspXG4mIzQzO1x0cmVjaGVja19iaXQ9JEtQRl9TTEFCXG4mIzQzO1x0bWlzc2luZ19tc2c9XCYjMzQ7bm8gdXNhYmxlIHNsYWIgUEZOIGZvdW5kIGluICRrcGFnZWZsYWdzX3BhdGhcJiMzNDtcbiYjNDM7XHQ7O1xuJiM0MztwZ3RhYmxlKVxuJiM0MztcdHBoeXNfYWRkcj0kKHBpY2tfa3BhZ2VmbGFnc19waHlzX2FkZHIgXCYjMzQ7JEtQRl9QR1RBQkxFXCYjMzQ7KVxuJiM0MztcdHJlY2hlY2tfYml0PSRLUEZfUEdUQUJMRVxuJiM0MztcdG1pc3NpbmdfbXNnPVwmIzM0O25vIHVzYWJsZSBwYWdlLXRhYmxlIFBGTiBmb3VuZCBpbiAka3BhZ2VmbGFnc19wYXRoXCYjMzQ7XG4mIzQzO1x0OztcbiYjNDM7KilcbiYjNDM7XHRrc2Z0X2V4aXRfZmFpbCBcJiMzNDt1bmtub3duIGtpbmQgJiMzOTska2luZCYjMzk7IChleHBlY3RlZDogcm9kYXRhfHNsYWJ8cGd0YWJsZSlcJiMzNDtcbiYjNDM7XHQ7O1xuJiM0Mztlc2FjXG4mIzQzO1xuJiM0MztpZiBbIC16IFwmIzM0OyRwaHlzX2FkZHJcJiMzNDsgXTsgdGhlblxuJiM0MztcdGtzZnRfZXhpdF9za2lwIFwmIzM0OyRtaXNzaW5nX21zZ1wmIzM0O1xuJiM0MztmaVxuJiM0MztcbiYjNDM7a3NmdF9wcmludCBcJiMzNDtlbmFibGluZyAkc3lzY3RsX3BhdGhcJiMzNDtcbiYjNDM7cHJpb3I9JChjYXQgXCYjMzQ7JHN5c2N0bF9wYXRoXCYjMzQ7KVxuJiM0MztlY2hvIDEgXHUwMDNlIFwmIzM0OyRzeXNjdGxfcGF0aFwmIzM0OyB8fCBrc2Z0X2V4aXRfZmFpbCBcJiMzNDtmYWlsZWQgdG8gZW5hYmxlIHN5c2N0bFwmIzM0O1xuJiM0MztcbiYjNDM7cGZuPSQoKHBoeXNfYWRkciAvIHBhZ2VzaXplKSlcbiYjNDM7a3NmdF9wcmludCBcJiMzNDtpbmplY3RpbmcgaHdwb2lzb24gYXQgcGh5cyAweCQocHJpbnRmICYjMzk7JXgmIzM5OyBcJiMzNDskcGh5c19hZGRyXCYjMzQ7KSAocGZuIDB4JChwcmludGYgJiMzOTsleCYjMzk7IFwmIzM0OyRwZm5cJiMzNDspLCBraW5kPSRraW5kKVwmIzM0O1xuJiM0Mztrc2Z0X3ByaW50IFwmIzM0O2V4cGVjdGluZyBrZXJuZWwgcGFuaWM6ICYjMzk7TWVtb3J5IGZhaWx1cmU6IFx1MDAzY3Bmblx1MDAzZTogdW5yZWNvdmVyYWJsZSBwYWdlJiMzOTtcJiMzNDtcbiYjNDM7XG4mIzQzOyMgQSBzdWNjZXNzZnVsIHJ1biBuZXZlciByZXR1cm5zIGZyb20gdGhlIGluamVjdCAtLSBpdCBwYW5pY3MgdGhlIGtlcm5lbC5cbiYjNDM7IyBSZWFjaGluZyB0aGUgY29kZSBiZWxvdyB0aGVyZWZvcmUgbWVhbnMgbm8gcGFuaWMgZmlyZWQuICBOb3RlIHdoZXRoZXJcbiYjNDM7IyB0aGUgd3JpdGUgaXRzZWxmIHN1Y2NlZWRlZCwgdGhlbiBwdXQgdGhlIG1hY2hpbmUgYmFjazogcmVzdG9yZSB0aGVcbiYjNDM7IyBzeXNjdGwgYW5kIGJlc3QtZWZmb3J0IHVucG9pc29uIHRoZSBwYWdlIHdlIGp1c3QgbWFya2VkLlxuJiM0MztpZiBlY2hvIFwmIzM0OyRwaHlzX2FkZHJcJiMzNDsgXHUwMDNlIFwmIzM0OyRpbmplY3RfcGF0aFwmIzM0OzsgdGhlblxuJiM0MztcdHZlcmRpY3Q9XCYjMzQ7aW5qZWN0IHJldHVybmVkIHdpdGhvdXQgcGFuaWM7IHN5c2N0bCBpbmVmZmVjdGl2ZVwmIzM0O1xuJiM0MztlbHNlXG4mIzQzO1x0dmVyZGljdD1cJiMzNDtpbmplY3QgZmFpbGVkIGJlZm9yZSByZWFjaGluZyB0aGUgcGFuaWMgcGF0aFwmIzM0O1xuJiM0MztmaVxuJiM0MztcbiYjNDM7ZWNobyBcJiMzNDskcHJpb3JcJiMzNDsgXHUwMDNlIFwmIzM0OyRzeXNjdGxfcGF0aFwmIzM0O1xuJiM0Mzt0cnlfdW5wb2lzb24gXCYjMzQ7JHBmblwmIzM0O1xuJiM0MztcbiYjNDM7IyBUaGUgcGFnZSB0eXBlIGNhbiBjaGFuZ2UgYmV0d2VlbiBzZWxlY3Rpb24gYW5kIGluamVjdGlvbiAoZS5nLiBhIHNsYWJcbiYjNDM7IyBvciBwYWdlLXRhYmxlIHBhZ2UgaXMgZnJlZWQgYW5kIHJldXNlZCkuICBPbmx5IHRyZWF0IGEgbWlzc2luZyBwYW5pYyBhc1xuJiM0MzsjIGEgZmFpbHVyZSBpZiB0aGUgdGFyZ2V0IFBGTiBpcyBzdGlsbCB0aGUga2VybmVsLW93bmVkIHR5cGUgd2UgYWltZWQgYXQ7XG4mIzQzOyMgaWYgaXQgcmFjZWQgdG8gYW5vdGhlciB0eXBlIHRoZSBydW4gaXMgaW5jb25jbHVzaXZlLCBzbyBza2lwIGluc3RlYWQuXG4mIzQzO2twYWdlZmxhZ3NfYml0X3NldCBcJiMzNDskcGZuXCYjMzQ7IFwmIzM0OyRyZWNoZWNrX2JpdFwmIzM0O1xuJiM0MztjYXNlICQ/IGluXG4mIzQzOzApXHRrc2Z0X2V4aXRfZmFpbCBcJiMzNDskdmVyZGljdCAocGFnZSBzdGlsbCAka2luZClcJiMzNDsgOztcbiYjNDM7MSlcdGtzZnRfZXhpdF9za2lwIFwmIzM0O3RhcmdldCBQRk4gbm8gbG9uZ2VyICRraW5kOyByYWNlZCBiZWZvcmUgaW5qZWN0LCBpbmNvbmNsdXNpdmVcJiMzNDsgOztcbiYjNDM7KilcdGtzZnRfZXhpdF9mYWlsIFwmIzM0OyR2ZXJkaWN0IChjb3VsZCBub3QgcmVjb25maXJtIHBhZ2UgdHlwZSB2aWEgJGtwYWdlZmxhZ3NfcGF0aClcJiMzNDsgOztcbiYjNDM7ZXNhY1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIzOjA1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDssCiAgICAmIzM0O0hXUE9JU09OX0lOSkVDVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbW9yeV9mYWlsdXJlJiMzNDssCiAgICAmIzM0O2dldF9hbnlfcGFnZSYjMzQ7LAogICAgJiMzNDthY3Rpb25fcmVzdWx0JiMzNDssCiAgICAmIzM0O3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWYmIzM0OywKICAgICYjMzQ7aXNfa2VybmVsX293bmVkX3BhZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgbG9naWMgKGBtZW1vcnlfZmFpbHVyZWAsIGBnZXRfYW55X3BhZ2VgKSB0byBleHBsaWNpdGx5IGlkZW50aWZ5IGFuZCBzaG9ydC1jaXJjdWl0IG9uIGtlcm5lbC1vd25lZCBwYWdlcyAoc2xhYiwgcGFnZSB0YWJsZXMsIHJlc2VydmVkLCBsYXJnZSBrbWFsbG9jKS4gSXQgYWxzbyBpbnRyb2R1Y2VzIGEgbmV3IHN5c2N0bCB0byBwYW5pYyBvbiBzdWNoIHVucmVjb3ZlcmFibGUgZXJyb3JzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgaGFyZHdhcmUgZXJyb3IgaW5qZWN0aW9uIGludGVyZmFjZXMgKGUuZy4sIGAvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9oYXJkX29mZmxpbmVfcGFnZWAgb3IgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTgxNzQyMjU5YzQxYjJmMWQ3NzEyYTQ0YjBhYjAwODY1MDg1MDc1MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVuIDI2IDIzOjA1OjE5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0CmluZGV4IGI5YjBjMjE4YmZiNDQwLi4yMmNjNTRjYWMzYjIxZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdApAQCAtNjcsNiAmIzQzOzY3LDcgQEAgQ3VycmVudGx5LCB0aGVzZSBmaWxlcyBhcmUgaW4gL3Byb2Mvc3lzL3ZtOgogLSBwYWdlLWNsdXN0ZXIKIC0gcGFnZV9sb2NrX3VuZmFpcm5lc3MKIC0gcGFuaWNfb25fb29tCiYjNDM7LSBwYW5pY19vbl91bnJlY292ZXJhYmxlX21lbW9yeV9mYWlsdXJlCiAtIHBlcmNwdV9wYWdlbGlzdF9oaWdoX2ZyYWN0aW9uCiAtIHN0YXRfaW50ZXJ2YWwKIC0gc3RhdF9yZWZyZXNoCkBAIC05MjUsNiAmIzQzOzkyNiw4NSBAQCBwYW5pY19vbl9vb209MiYjNDM7a2R1bXAgZ2l2ZXMgeW91IHZlcnkgc3Ryb25nIHRvb2wgdG8gaW52ZXN0aWdhdGUKIHdoeSBvb20gaGFwcGVucy4gWW91IGNhbiBnZXQgc25hcHNob3QuCiAKIAomIzQzO3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmUKJiM0Mzs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOwomIzQzO1doZW4gYSBoYXJkd2FyZSBtZW1vcnkgZXJyb3IgKGUuZy4gbXVsdGktYml0IEVDQykgaGl0cyBhIGtlcm5lbCBwYWdlCiYjNDM7dGhhdCBjYW5ub3QgYmUgcmVjb3ZlcmVkIGJ5IHRoZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGVyLCB0aGUgZGVmYXVsdAomIzQzO2JlaGF2aW91ciBpcyB0byBpZ25vcmUgdGhlIGVycm9yIGFuZCBjb250aW51ZSBvcGVyYXRpb24uICBUaGlzIGlzCiYjNDM7ZGFuZ2Vyb3VzIGJlY2F1c2UgdGhlIGNvcnJ1cHRlZCBkYXRhIHJlbWFpbnMgYWNjZXNzaWJsZSB0byB0aGUga2VybmVsLAomIzQzO3Jpc2tpbmcgc2lsZW50IGRhdGEgY29ycnVwdGlvbiBvciBhIGRlbGF5ZWQgY3Jhc2ggd2hlbiB0aGUgcG9pc29uZWQKJiM0MzttZW1vcnkgaXMgbmV4dCBhY2Nlc3NlZC4KJiM0MzsKJiM0MztXaGVuIGVuYWJsZWQsIHRoaXMgc3lzY3RsIHRyaWdnZXJzIGEgcGFuaWMgb24gbWVtb3J5IGZhaWx1cmUgZXZlbnRzCiYjNDM7aGl0dGluZyBrZXJuZWwtb3duZWQgcGFnZXMgdGhhdCB0aGUgaGFuZGxlciBjYW5ub3QgcmVjb3ZlcjoKJiM0MztgYFBhZ2VSZXNlcnZlZGBgIChmaXJtd2FyZSByZXNlcnZhdGlvbnMsIGtlcm5lbCBpbWFnZSwgdkRTTywgemVybwomIzQzO3BhZ2UsIGFuZCBzaW1pbGFyIG1lbWJsb2NrLXJlc2VydmVkIHJlZ2lvbnMpLCBgYFBhZ2VTbGFiYGAsCiYjNDM7YGBQYWdlVGFibGVgYCwgYW5kIGBgUGFnZUxhcmdlS21hbGxvY2BgLiAgVGhlc2UgYXJlIG93bmVkIGJ5IHRoZQomIzQzO2tlcm5lbCBhbmQgdGhlIG1lbW9yeSBmYWlsdXJlIGhhbmRsZXIgY2Fubm90IHJlbGlhYmx5IGV2aWN0IHRoZWlyCiYjNDM7Y29udGVudHMuCiYjNDM7CiYjNDM7T3RoZXIgdW5yZWNvdmVyYWJsZSBrZXJuZWwtb3duZWQgcG9wdWxhdGlvbnMgKHZtYWxsb2MgYWxsb2NhdGlvbnMsCiYjNDM7a2VybmVsIHN0YWNrIHBhZ2VzLCAuLi4pIGFyZSBub3QgY3VycmVudGx5IGNvdmVyZWQgYmVjYXVzZSB0aGUKJiM0MztoYW5kbGVyIGhhcyBubyBwYWdlLXR5cGUgc2lnbmFsIHRoYXQgZGlzdGluZ3Vpc2hlcyB0aGVtIGZyb20gYQomIzQzO3VzZXJzcGFjZSBmb2xpbyB0ZW1wb3JhcmlseSBvZmYgdGhlIExSVSBkdXJpbmcgbWlncmF0aW9uIG9yCiYjNDM7Y29tcGFjdGlvbi4gIFN1Y2ggcGFnZXMgc3RpbGwgZ28gdGhyb3VnaCB0aGUgc3RhbmRhcmQKJiM0MztNRl9NU0dfR0VUX0hXUE9JU09OIHBhdGg6IGBgUEdfaHdwb2lzb25gYCBpcyBzZXQgb24gdGhlbSBhbmQgYQomIzQzO2RlbGF5ZWQgY3Jhc2ggb24gdGhlIG5leHQgYWNjZXNzIHJlbWFpbnMgcG9zc2libGUuICBDb3ZlcmFnZSBtYXkKJiM0Mztncm93IGFzIHRoZSBoYW5kbGVyIGdhaW5zIHN0cm9uZ2VyIGtlcm5lbC1vd25lcnNoaXAgc2lnbmFscy4KJiM0MzsKJiM0MztSZWNvdmVyYWJsZSBmYWlsdXJlIHBhdGhzIGFyZSBhbHNvIGludGVudGlvbmFsbHkgbGVmdCBvdXQ6IGluLWZsaWdodAomIzQzO2J1ZGR5IGFsbG9jYXRpb25zIGFuZCBvdGhlciB0cmFuc2llbnQgcmFjZXMgd2l0aCB0aGUgcGFnZSBhbGxvY2F0b3IKJiM0MztjYW4gcmVhY2ggdGhlIHNhbWUgZGlhZ25vc3RpYywgYW5kIHBhbmlja2luZyBvbiB0aGVtIHdvdWxkIHJpc2sKJiM0MztraWxsaW5nIHRoZSBib3ggZm9yIGEgcGFnZSBkZXN0aW5lZCBmb3IgdXNlcnNwYWNlIHdoZXJlIHRoZSBzdGFuZGFyZAomIzQzO1NJR0JVUyByZWNvdmVyeSBwYXRoIGFwcGxpZXMuICBQYWdlcyB3aG9zZSBzdGF0ZSBjb3VsZCBub3QgYmUKJiM0MztjbGFzc2lmaWVkIGF0IGFsbCBhcmUgbm90IGNvdmVyZWQgZWl0aGVyLCBzaW5jZSBhbiB1bmtub3duIHN0YXRlIGlzCiYjNDM7bm90IGEgc291bmQgYmFzaXMgZm9yIGEgcGFuaWMgZGVjaXNpb24uCiYjNDM7CiYjNDM7Rm9yIG1hbnkgZW52aXJvbm1lbnRzIGl0IGlzIHByZWZlcmFibGUgdG8gcGFuaWMgaW1tZWRpYXRlbHkgd2l0aCBhIGNsZWFuCiYjNDM7Y3Jhc2ggZHVtcCB0aGF0IGNhcHR1cmVzIHRoZSBvcmlnaW5hbCBlcnJvciBjb250ZXh0LCByYXRoZXIgdGhhbiB0bwomIzQzO2NvbnRpbnVlIGFuZCBmYWNlIGEgcmFuZG9tIGNyYXNoIGxhdGVyIHdob3NlIGNhdXNlIGlzIGRpZmZpY3VsdCB0bwomIzQzO2RpYWdub3NlLgomIzQzOwomIzQzO1VzZSBjYXNlcwomIzQzOy0tLS0tLS0tLQomIzQzOwomIzQzO1RoaXMgb3B0aW9uIGlzIG1vc3QgdXNlZnVsIGluIGVudmlyb25tZW50cyB3aGVyZSB1bmF0dHJpYnV0ZWQgY3Jhc2hlcwomIzQzO2FyZSBleHBlbnNpdmUgdG8gZGVidWcgb3Igd2hlcmUgZGF0YSBpbnRlZ3JpdHkgbXVzdCB0YWtlIHByZWNlZGVuY2UKJiM0MztvdmVyIGF2YWlsYWJpbGl0eToKJiM0MzsKJiM0MzsqIExhcmdlIGZsZWV0cywgd2hlcmUgbXVsdGktYml0IEVDQyBlcnJvcnMgb24ga2VybmVsIHBhZ2VzIGFyZSBvYnNlcnZlZAomIzQzOyAgcmVndWxhcmx5IGFuZCBwb3N0LW1vcnRlbSBhbmFseXNpcyBvZiBhbiB1bnJlbGF0ZWQgZG93bnN0cmVhbSBjcmFzaAomIzQzOyAgKG9mdGVuIHNlY29uZHMgdG8gbWludXRlcyBhZnRlciB0aGUgb3JpZ2luYWwgZXJyb3IpIGNvbnN1bWVzCiYjNDM7ICBzaWduaWZpY2FudCBlbmdpbmVlcmluZyBlZmZvcnQuCiYjNDM7CiYjNDM7KiBTeXN0ZW1zIGNvbmZpZ3VyZWQgd2l0aCBrZHVtcCwgd2hlcmUgcGFuaWNraW5nIGF0IHRoZSBtb21lbnQgb2YgdGhlCiYjNDM7ICBoYXJkd2FyZSBlcnJvciBwcm9kdWNlcyBhIHZtY29yZSB0aGF0IHN0aWxsIGNvbnRhaW5zIHRoZSBmYXVsdGluZwomIzQzOyAgYWRkcmVzcywgdGhlIGFmZmVjdGVkIHBhZ2Ugc3RhdGUsIGFuZCB0aGUgb3JpZ2luYXRpbmcgTUNFL0dIRVMKJiM0MzsgIHJlY29yZCDigJQgY29udGV4dCB0aGF0IGlzIHR5cGljYWxseSBsb3N0IGJ5IHRoZSB0aW1lIGEgZGVsYXllZCBjcmFzaAomIzQzOyAgb2NjdXJzLgomIzQzOwomIzQzOyogSGlnaC1hdmFpbGFiaWxpdHkgY2x1c3RlcnMgdGhhdCByZWx5IG9uIGZhc3QsIGRldGVybWluaXN0aWMgbm9kZQomIzQzOyAgZmFpbHVyZSBmb3IgZmFpbG92ZXIsIGFuZCBwcmVmZXIgYW4gaW1tZWRpYXRlIHBhbmljIG92ZXIgc2lsZW50IGRhdGEKJiM0MzsgIGNvcnJ1cHRpb24gcHJvcGFnYXRpbmcgdG8gcmVwbGljYXMgb3IgcGVyc2lzdGVudCBzdG9yYWdlLgomIzQzOwomIzQzOyogS2VybmVsIGFuZCBwbGF0Zm9ybSBkZXZlbG9wZXJzIHJlcHJvZHVjaW5nIGh3cG9pc29uIGlzc3VlcyB3aXRoCiYjNDM7ICB0b29scyBzdWNoIGFzIGBgbWNlLWluamVjdGBgIG9yIGVycm9yLWluamVjdGlvbiBkZWJ1Z2ZzIGludGVyZmFjZXMsCiYjNDM7ICB3aGVyZSBwYW5pY2tpbmcgb24gdGhlIHVucmVjb3ZlcmFibGUgcGF0aCBtYWtlcyByZWdyZXNzaW9ucwomIzQzOyAgaW1tZWRpYXRlbHkgdmlzaWJsZSBpbnN0ZWFkIG9mIHN1cmZhY2luZyBhcyBsYXRlciwgdW5yZWxhdGVkCiYjNDM7ICBmYWlsdXJlcy4KJiM0MzsKJiM0Mzs9ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOzAgVHJ5IHRvIGNvbnRpbnVlIG9wZXJhdGlvbiAoZGVmYXVsdCkuCiYjNDM7MSBQYW5pYyBpbW1lZGlhdGVseS4gIElmIHRoZSBgYHBhbmljYGAgc3lzY3RsIGlzIGFsc28gbm9uLXplcm8gdGhlbiB0aGUKJiM0MzsgIG1hY2hpbmUgd2lsbCBiZSByZWJvb3RlZC4KJiM0Mzs9ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOwomIzQzO0V4YW1wbGU6OgomIzQzOwomIzQzOyAgICAgZWNobyAxICZndDsgL3Byb2Mvc3lzL3ZtL3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmUKJiM0MzsKJiM0MzsKIHBlcmNwdV9wYWdlbGlzdF9oaWdoX2ZyYWN0aW9uCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuYwppbmRleCA1MTUwOGE1NWM0MDU1ZS4uNjExMTYwYzk4YzZmNjQgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS1mYWlsdXJlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LWZhaWx1cmUuYwpAQCAtNzQsNiAmIzQzOzc0LDggQEAgc3RhdGljIGludCBzeXNjdGxfbWVtb3J5X2ZhaWx1cmVfcmVjb3ZlcnkgX19yZWFkX21vc3RseSA9IDE7CiAKIHN0YXRpYyBpbnQgc3lzY3RsX2VuYWJsZV9zb2Z0X29mZmxpbmUgX19yZWFkX21vc3RseSA9IDE7CiAKJiM0MztzdGF0aWMgaW50IHN5c2N0bF9wYW5pY19vbl91bnJlY292ZXJhYmxlX21mIF9fcmVhZF9tb3N0bHk7CiYjNDM7CiBhdG9taWNfbG9uZ190IG51bV9wb2lzb25lZF9wYWdlcyBfX3JlYWRfbW9zdGx5ID0gQVRPTUlDX0xPTkdfSU5JVCgwKTsKIAogc3RhdGljIGJvb2wgaHdfbWVtb3J5X2ZhaWx1cmUgX19yZWFkX21vc3RseSA9IGZhbHNlOwpAQCAtMTU1LDYgJiM0MzsxNTcsMTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgbWVtb3J5X2ZhaWx1cmVfdGFibGVbXSA9IHsKIAkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWNfbWlubWF4LAogCQkuZXh0cmExCQk9IFNZU0NUTF9aRVJPLAogCQkuZXh0cmEyCQk9IFNZU0NUTF9PTkUsCiYjNDM7CX0sCiYjNDM7CXsKJiM0MzsJCS5wcm9jbmFtZQk9ICYjMzQ7cGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZSYjMzQ7LAomIzQzOwkJLmRhdGEJCT0gJmFtcDtzeXNjdGxfcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZiwKJiM0MzsJCS5tYXhsZW4JCT0gc2l6ZW9mKHN5c2N0bF9wYW5pY19vbl91bnJlY292ZXJhYmxlX21mKSwKJiM0MzsJCS5tb2RlCQk9IDA2NDQsCiYjNDM7CQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlY19taW5tYXgsCiYjNDM7CQkuZXh0cmExCQk9IFNZU0NUTF9aRVJPLAomIzQzOwkJLmV4dHJhMgkJPSBTWVNDVExfT05FLAogCX0KIH07CiAKQEAgLTk4MCwxNyAmIzQzOzk5MSw2IEBAIHN0YXRpYyBib29sIGhhc19leHRyYV9yZWZjb3VudChzdHJ1Y3QgcGFnZV9zdGF0ZSAqcHMsIHN0cnVjdCBwYWdlICpwLAogCXJldHVybiBmYWxzZTsKIH0KIAotLyoKLSAqIEVycm9yIGhpdCBrZXJuZWwgcGFnZS4KLSAqIERvIG5vdGhpbmcsIHRyeSB0byBiZSBsdWNreSBhbmQgbm90IHRvdWNoIHRoaXMgaW5zdGVhZC4gRm9yIGEgZmV3IGNhc2VzIHdlCi0gKiBjb3VsZCBiZSBtb3JlIHNvcGhpc3RpY2F0ZWQuCi0gKi8KLXN0YXRpYyBpbnQgbWVfa2VybmVsKHN0cnVjdCBwYWdlX3N0YXRlICpwcywgc3RydWN0IHBhZ2UgKnApCi17Ci0JdW5sb2NrX3BhZ2UocCk7Ci0JcmV0dXJuIE1GX0lHTk9SRUQ7Ci19Ci0KIC8qCiAgKiBQYWdlIGluIHVua25vd24gc3RhdGUuIERvIG5vdGhpbmcuCiAgKiBUaGlzIGlzIGEgY2F0Y2gtYWxsIGluIGNhc2Ugd2UgZmFpbCB0byBtYWtlIHNlbnNlIG9mIHRoZSBwYWdlIHN0YXRlLgpAQCAtMTE5OSwxMCAmIzQzOzExOTksOCBAQCBzdGF0aWMgaW50IG1lX2h1Z2VfcGFnZShzdHJ1Y3QgcGFnZV9zdGF0ZSAqcHMsIHN0cnVjdCBwYWdlICpwKQogI2RlZmluZSBtbG9jawkJKDFVTCAmbHQ7Jmx0OyBQR19tbG9ja2VkKQogI2RlZmluZSBscnUJCSgxVUwgJmx0OyZsdDsgUEdfbHJ1KQogI2RlZmluZSBoZWFkCQkoMVVMICZsdDsmbHQ7IFBHX2hlYWQpCi0jZGVmaW5lIHJlc2VydmVkCSgxVUwgJmx0OyZsdDsgUEdfcmVzZXJ2ZWQpCiAKIHN0YXRpYyBzdHJ1Y3QgcGFnZV9zdGF0ZSBlcnJvcl9zdGF0ZXNbXSA9IHsKLQl7IHJlc2VydmVkLAlyZXNlcnZlZCwJTUZfTVNHX0tFUk5FTCwJbWVfa2VybmVsIH0sCiAJLyoKIAkgKiBmcmVlIHBhZ2VzIGFyZSBzcGVjaWFsbHkgZGV0ZWN0ZWQgb3V0c2lkZSB0aGlzIHRhYmxlOgogCSAqIFBHX2J1ZGR5IHBhZ2VzIG9ubHkgbWFrZSBhIHNtYWxsIGZyYWN0aW9uIG9mIGFsbCBmcmVlIHBhZ2VzLgpAQCAtMTIzNCw3ICYjNDM7MTIzMiw2IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZV9zdGF0ZSBlcnJvcl9zdGF0ZXNbXSA9IHsKICN1bmRlZiBtbG9jawogI3VuZGVmIGxydQogI3VuZGVmIGhlYWQKLSN1bmRlZiByZXNlcnZlZAogCiBzdGF0aWMgdm9pZCB1cGRhdGVfcGVyX25vZGVfbWZfc3RhdHModW5zaWduZWQgbG9uZyBwZm4sCiAJCQkJICAgICBlbnVtIG1mX3Jlc3VsdCByZXN1bHQpCkBAIC0xMjY5LDYgJiM0MzsxMjY2LDE1IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyh1bnNpZ25lZCBsb25nIHBmbiwKIAkmIzQzOyYjNDM7bWZfc3RhdHMtJmd0O3RvdGFsOwogfQogCiYjNDM7c3RhdGljIGJvb2wgcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZihlbnVtIG1mX2FjdGlvbl9wYWdlX3R5cGUgdHlwZSwKJiM0MzsJCQkJICAgICAgZW51bSBtZl9yZXN1bHQgcmVzdWx0KQomIzQzO3sKJiM0MzsJaWYgKCFzeXNjdGxfcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZikKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcmV0dXJuIHR5cGUgPT0gTUZfTVNHX0tFUk5FTCAmYW1wOyZhbXA7IHJlc3VsdCA9PSBNRl9JR05PUkVEOwomIzQzO30KJiM0MzsKIC8qCiAgKiAmIzM0O0RpcnR5L0NsZWFuJiMzNDsgaW5kaWNhdGlvbiBpcyBub3QgMTAwJSBhY2N1cmF0ZSBkdWUgdG8gdGhlIHBvc3NpYmlsaXR5IG9mCiAgKiBzZXR0aW5nIFBHX2RpcnR5IG91dHNpZGUgcGFnZSBsb2NrLiBTZWUgYWxzbyBjb21tZW50IGFib3ZlIHNldF9wYWdlX2RpcnR5KCkuCkBAIC0xMjg2LDYgJiM0MzsxMjkyLDkgQEAgc3RhdGljIGludCBhY3Rpb25fcmVzdWx0KHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIG1mX2FjdGlvbl9wYWdlX3R5cGUgdHlwZSwKIAlwcl9lcnIoJiMzNDslI2x4OiByZWNvdmVyeSBhY3Rpb24gZm9yICVzOiAlc1xuJiMzNDssCiAJCXBmbiwgYWN0aW9uX3BhZ2VfdHlwZXNbdHlwZV0sIGFjdGlvbl9uYW1lW3Jlc3VsdF0pOwogCiYjNDM7CWlmIChwYW5pY19vbl91bnJlY292ZXJhYmxlX21mKHR5cGUsIHJlc3VsdCkpCiYjNDM7CQlwYW5pYygmIzM0O01lbW9yeSBmYWlsdXJlOiAlI2x4OiB1bnJlY292ZXJhYmxlIHBhZ2UmIzM0OywgcGZuKTsKJiM0MzsKIAlyZXR1cm4gKHJlc3VsdCA9PSBNRl9SRUNPVkVSRUQgfHwgcmVzdWx0ID09IE1GX0RFTEFZRUQpID8gMCA6IC1FQlVTWTsKIH0KIApAQCAtMTMzOSw2ICYjNDM7MTM0OCwzNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgSFdQb2lzb25IYW5kbGFibGUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiAJcmV0dXJuIFBhZ2VMUlUocGFnZSkgfHwgaXNfZnJlZV9idWRkeV9wYWdlKHBhZ2UpOwogfQogCiYjNDM7LyoKJiM0MzsgKiBQb3NpdGl2ZSBpZGVudGlmaWNhdGlvbiBvZiBwYWdlcyB0aGUgaHdwb2lzb24gaGFuZGxlciBjYW5ub3QgcmVjb3ZlcjoKJiM0MzsgKiBwYWdlcyBvd25lZCBieSBrZXJuZWwgaW50ZXJuYWxzIHdpdGggbm8gdXNlcnNwYWNlIG1hcHBpbmcgdG8gdW5tYXAsIG5vCiYjNDM7ICogZmlsZSBtYXBwaW5nIHRvIGludmFsaWRhdGUsIGFuZCBubyBtaWdyYXRpb24gdGFyZ2V0LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBpc19rZXJuZWxfb3duZWRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwYWdlICpoZWFkOwomIzQzOwlib29sIGtlcm5lbF9vd25lZDsKJiM0MzsKJiM0MzsJLyogUEdfcmVzZXJ2ZWQgaXMgYSBwZXItcGFnZSBmbGFnLCBuZXZlciBzZXQgb24gYSBjb21wb3VuZCBwYWdlLiAqLwomIzQzOwlpZiAoUGFnZVJlc2VydmVkKHBhZ2UpKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFBhZ2UtdHlwZSBiaXRzIGxpdmUgb25seSBvbiB0aGUgaGVhZCBwYWdlLCBzbyByZXNvbHZlIGFueSB0YWlsCiYjNDM7CSAqIGZpcnN0LiAgVGhlIGNoZWNrIHRha2VzIG5vIHJlZmNvdW50OyByZWNoZWNrIHRoZSBoZWFkIGFmdGVyd2FyZHMKJiM0MzsJICogc28gYSBjb25jdXJyZW50IHNwbGl0IG9yIGNvbXBvdW5kIGZyZWUgY2Fubm90IGxlYXZlIHVzIHRydXN0aW5nCiYjNDM7CSAqIGEgc3RhbGUgdmlldy4gIEEgZnJlZS0mZ3Q7YWxsb2MtJmd0O2ZyZWUgaW4gdGhlIHNhbWUgd2luZG93IGlzIHN0aWxsCiYjNDM7CSAqIHBvc3NpYmxlIGJ1dCBjbG9zaW5nIGl0IHdvdWxkIHJlcXVpcmUgdGFraW5nIGEgcmVmZXJlbmNlIGhlcmUuCiYjNDM7CSAqLwomIzQzO3JldHJ5OgomIzQzOwloZWFkID0gY29tcG91bmRfaGVhZChwYWdlKTsKJiM0MzsJa2VybmVsX293bmVkID0gUGFnZVNsYWIoaGVhZCkgfHwgUGFnZVRhYmxlKGhlYWQpIHx8CiYjNDM7CQkgICAgICAgUGFnZUxhcmdlS21hbGxvYyhoZWFkKTsKJiM0MzsJaWYgKGhlYWQgIT0gY29tcG91bmRfaGVhZChwYWdlKSkKJiM0MzsJCWdvdG8gcmV0cnk7CiYjNDM7CXJldHVybiBrZXJuZWxfb3duZWQ7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBfX2dldF9od3BvaXNvbl9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewogCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpOwpAQCAtMTM4NSw2ICYjNDM7MTQyNCwxOSBAQCBzdGF0aWMgaW50IGdldF9hbnlfcGFnZShzdHJ1Y3QgcGFnZSAqcCwgdW5zaWduZWQgbG9uZyBmbGFncykKIAlpZiAoZmxhZ3MgJmFtcDsgTUZfQ09VTlRfSU5DUkVBU0VEKQogCQljb3VudF9pbmNyZWFzZWQgPSB0cnVlOwogCiYjNDM7CS8qCiYjNDM7CSAqIFBhZ2UgdHlwZXMgd2Uga25vdyBhcmUga2VybmVsLW93bmVkIGFuZCBjYW5ub3QgYmUgcmVjb3ZlcmVkLgomIzQzOwkgKiBTaG9ydC1jaXJjdWl0IGJlZm9yZSB0aGUgc2hha2VfcGFnZSgpIC8gcmV0cnkgbG9vcCwgd2hpY2gKJiM0MzsJICogY2Fubm90IHR1cm4gYW55IG9mIHRoZXNlIGludG8gc29tZXRoaW5nIEhXUG9pc29uSGFuZGxhYmxlKCkuCiYjNDM7CSAqIERyb3AgdGhlIGNhbGxlciYjMzk7cyByZWZlcmVuY2UgaWYgTUZfQ09VTlRfSU5DUkVBU0VEIHRvb2sgb25lLgomIzQzOwkgKi8KJiM0MzsJaWYgKGlzX2tlcm5lbF9vd25lZF9wYWdlKHApKSB7CiYjNDM7CQlpZiAoY291bnRfaW5jcmVhc2VkKQomIzQzOwkJCXB1dF9wYWdlKHApOwomIzQzOwkJcmV0ID0gLUVOT1RSRUNPVkVSQUJMRTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiB0cnlfYWdhaW46CiAJaWYgKCFjb3VudF9pbmNyZWFzZWQpIHsKIAkJcmV0ID0gX19nZXRfaHdwb2lzb25fcGFnZShwLCBmbGFncyk7CkBAIC0xNDMyLDcgJiM0MzsxNDg0LDcgQEAgc3RhdGljIGludCBnZXRfYW55X3BhZ2Uoc3RydWN0IHBhZ2UgKnAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiAJCXJldCA9IC1FSU87CiAJfQogb3V0OgotCWlmIChyZXQgPT0gLUVJTykKJiM0MzsJaWYgKHJldCA9PSAtRUlPIHx8IHJldCA9PSAtRU5PVFJFQ09WRVJBQkxFKQogCQlwcl9lcnIoJiMzNDslI2x4OiB1bmhhbmRsYWJsZSBwYWdlLlxuJiMzNDssIHBhZ2VfdG9fcGZuKHApKTsKIAogCXJldHVybiByZXQ7CkBAIC0xNDg5LDcgJiM0MzsxNTQxLDEwIEBAIHN0YXRpYyBpbnQgX19nZXRfdW5wb2lzb25fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKICAqICAgICAgICAgLUVJTyBmb3IgcGFnZXMgb24gd2hpY2ggd2UgY2FuIG5vdCBoYW5kbGUgbWVtb3J5IGVycm9ycywKICAqICAgICAgICAgLUVCVVNZIHdoZW4gZ2V0X2h3cG9pc29uX3BhZ2UoKSBoYXMgcmFjZWQgd2l0aCBwYWdlIGxpZmVjeWNsZQogICogICAgICAgICBvcGVyYXRpb25zIGxpa2UgYWxsb2NhdGlvbiBhbmQgZnJlZSwKLSAqICAgICAgICAgLUVIV1BPSVNPTiB3aGVuIHRoZSBwYWdlIGlzIGh3cG9pc29uZWQgYW5kIHRha2VuIG9mZiBmcm9tIGJ1ZGR5LgomIzQzOyAqICAgICAgICAgLUVIV1BPSVNPTiB3aGVuIHRoZSBwYWdlIGlzIGh3cG9pc29uZWQgYW5kIHRha2VuIG9mZiBmcm9tIGJ1ZGR5LAomIzQzOyAqICAgICAgICAgLUVOT1RSRUNPVkVSQUJMRSBmb3Iga2VybmVsLW93bmVkIHBhZ2VzIGlkZW50aWZpZWQgYnkKJiM0MzsgKiAgICAgICAgIGlzX2tlcm5lbF9vd25lZF9wYWdlKCkgKFBHX3Jlc2VydmVkLCBzbGFiLAomIzQzOyAqICAgICAgICAgcGFnZS10YWJsZSwgbGFyZ2Uta21hbGxvYykgdGhhdCB0aGUgaGFuZGxlciBjYW5ub3QgcmVjb3Zlci4KICAqLwogc3RhdGljIGludCBnZXRfaHdwb2lzb25fcGFnZShzdHJ1Y3QgcGFnZSAqcCwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKQEAgLTI0MDIsNyAmIzQzOzI0NTcsOCBAQCBpbnQgbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncykKIAkgKiB0aGF0IG1heSBtYWtlIHBhZ2VfcmVmX2ZyZWV6ZSgpL3BhZ2VfcmVmX3VuZnJlZXplKCkgbWlzbWF0Y2guCiAJICovCiAJcmVzID0gZ2V0X2h3cG9pc29uX3BhZ2UocCwgZmxhZ3MpOwotCWlmICghcmVzKSB7CiYjNDM7CXN3aXRjaCAocmVzKSB7CiYjNDM7CWNhc2UgMDoKIAkJaWYgKGlzX2ZyZWVfYnVkZHlfcGFnZShwKSkgewogCQkJaWYgKHRha2VfcGFnZV9vZmZfYnVkZHkocCkpIHsKIAkJCQlwYWdlX3JlZl9pbmMocCk7CkBAIC0yNDIxLDcgJiM0MzsyNDc3LDE5IEBAIGludCBtZW1vcnlfZmFpbHVyZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKQogCQkJcmVzID0gYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19LRVJORUxfSElHSF9PUkRFUiwgTUZfSUdOT1JFRCk7CiAJCX0KIAkJZ290byB1bmxvY2tfbXV0ZXg7Ci0JfSBlbHNlIGlmIChyZXMgJmx0OyAwKSB7CiYjNDM7CWNhc2UgMToKJiM0MzsJCS8qIEdvdCBhIHJlZmNvdW50IG9uIGEgaGFuZGxhYmxlIHBhZ2UuICovCiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSAtRU5PVFJFQ09WRVJBQkxFOgomIzQzOwkJLyoKJiM0MzsJCSAqIFN0YWJsZSB1bmhhbmRsYWJsZSBrZXJuZWwtb3duZWQgcGFnZSAoUEdfcmVzZXJ2ZWQsCiYjNDM7CQkgKiBzbGFiLCBwYWdlIHRhYmxlcywgbGFyZ2Uta21hbGxvYykuCiYjNDM7CQkgKiBObyByZWNvdmVyeSBwb3NzaWJsZS4KJiM0MzsJCSAqLwomIzQzOwkJcmVzID0gYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19LRVJORUwsIE1GX0lHTk9SRUQpOwomIzQzOwkJZ290byB1bmxvY2tfbXV0ZXg7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQkvKiBUcmFuc2llbnQgbGlmZWN5Y2xlIHJhY2Ugd2l0aCB0aGUgcGFnZSBhbGxvY2F0b3IuICovCiAJCXJlcyA9IGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfR0VUX0hXUE9JU09OLCBNRl9JR05PUkVEKTsKIAkJZ290byB1bmxvY2tfbXV0ZXg7CiAJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZQppbmRleCBlNmRmOTY4ZjA5NzFjOC4uZWQzMjFhZTcwOWRhY2YgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlCkBAIC0xNzQsNiAmIzQzOzE3NCwxMCBAQCBURVNUX1BST0dTICYjNDM7PSBrc2Z0X3VzZXJmYXVsdGZkLnNoCiBURVNUX1BST0dTICYjNDM7PSBrc2Z0X3ZtYV9tZXJnZS5zaAogVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF92bWFsbG9jLnNoCiAKJiM0MzsjIERlc3RydWN0aXZlOiBldmVyeSBzdWNjZXNzZnVsIHJ1biBwYW5pY3MgdGhlIGtlcm5lbC4gIEluc3RhbGxlZCBhbmQKJiM0MzsjIGtlcHQgZXhlY3V0YWJsZSwgYnV0IG5vdCBydW4gZnJvbSBhIGRlZmF1bHQga3NlbGZ0ZXN0IGludm9jYXRpb24uCiYjNDM7VEVTVF9QUk9HU19FWFRFTkRFRCAmIzQzOz0gaHdwb2lzb24tcGFuaWMuc2gKJiM0MzsKIFRFU1RfRklMRVMgOj0gdGVzdF92bWFsbG9jLnNoCiBURVNUX0ZJTEVTICYjNDM7PSB0ZXN0X2htbS5zaAogVEVTVF9GSUxFUyAmIzQzOz0gdmFfaGlnaF9hZGRyX3N3aXRjaC5zaApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHdwb2lzb24tcGFuaWMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9od3BvaXNvbi1wYW5pYy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMC4uYWFmYzA2ZTg5NWQwMWQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9od3BvaXNvbi1wYW5pYy5zaApAQCAtMCwwICYjNDM7MSwyNDkgQEAKJiM0MzsjIS9iaW4vYmFzaAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjCiYjNDM7IyBWZXJpZnkgdm0ucGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZSBieSBpbmplY3RpbmcgYSBod3BvaXNvbgomIzQzOyMgZXJyb3Igb24gYSBrZXJuZWwtb3duZWQgcGFnZSBhbmQgY29uZmlybWluZyB0aGUga2VybmVsIHBhbmljcy4KJiM0MzsjCiYjNDM7IyBUaHJlZSAmIzM0O2tpbmRzJiMzNDsgb2Yga2VybmVsLW93bmVkIHBhZ2UgY2FuIGJlIHRhcmdldGVkLCBzZWxlY3RhYmxlIHZpYSB0aGUKJiM0MzsjIGZpcnN0IHBvc2l0aW9uYWwgYXJndW1lbnQgKGRlZmF1bHQ6IHJvZGF0YSk6CiYjNDM7IwomIzQzOyMgICByb2RhdGEgIC0gYSBQR19yZXNlcnZlZCBwYWdlIGluIHRoZSBrZXJuZWwgcm9kYXRhIHJhbmdlCiYjNDM7IyAgICAgICAgICAgICAoc291cmNlZCBmcm9tIC9wcm9jL2lvbWVtICYjMzQ7S2VybmVsIHJvZGF0YSYjMzQ7KS4gIEV4ZXJjaXNlcwomIzQzOyMgICAgICAgICAgICAgbWVtb3J5X2ZhaWx1cmUoKSAtJmd0OyBnZXRfYW55X3BhZ2UoKSBvbiBhIFBhZ2VSZXNlcnZlZCBwYWdlLgomIzQzOyMKJiM0MzsjICAgc2xhYiAgICAtIGEgc2xhYiBwYWdlIGZvdW5kIHZpYSAvcHJvYy9rcGFnZWZsYWdzIChLUEZfU0xBQikuCiYjNDM7IyAgICAgICAgICAgICBFeGVyY2lzZXMgbWVtb3J5X2ZhaWx1cmUoKSAtJmd0OyBnZXRfYW55X3BhZ2UoKSBvbiBhIG5vbgomIzQzOyMgICAgICAgICAgICAgUEdfcmVzZXJ2ZWQga2VybmVsLW93bmVkIHBhZ2UuICBUaGlzIHBhdGggaXMgd2hhdCBjYXRjaGVzCiYjNDM7IyAgICAgICAgICAgICByZWdyZXNzaW9ucyB3aGVyZSBnZXRfYW55X3BhZ2UoKSBjb2xsYXBzZXMga2VybmVsLW93bmVkCiYjNDM7IyAgICAgICAgICAgICBwYWdlcyBpbnRvIGEgdHJhbnNpZW50IC1FSU8gaW5zdGVhZCBvZiAtRU5PVFJFQ09WRVJBQkxFLgomIzQzOyMKJiM0MzsjICAgcGd0YWJsZSAtIGEgcGFnZS10YWJsZSBwYWdlIGZvdW5kIHZpYSAvcHJvYy9rcGFnZWZsYWdzIChLUEZfUEdUQUJMRSkuCiYjNDM7IyAgICAgICAgICAgICBTYW1lIHBhdGggYXMgc2xhYiwgZGlmZmVyZW50IHBhZ2UgdHlwZS4KJiM0MzsjCiYjNDM7IyBUaGlzIHRlc3QgaXMgREVTVFJVQ1RJVkU6IGEgc3VjY2Vzc2Z1bCBydW4gY3Jhc2hlcyB0aGUga2VybmVsLiAgSXQgaXMKJiM0MzsjIG1lYW50IHRvIGJlIGV4ZWN1dGVkIGluc2lkZSBhIGRpc3Bvc2FibGUgVk0gKGUuZy4gdmlydG1lLW5nKSB3aXRoIGEKJiM0MzsjIHNlcmlhbCBjb25zb2xlIGNhcHR1cmVkIGJ5IHRoZSBoYXJuZXNzLiAgSXQgaXMgc2tpcHBlZCB1bmxlc3MgdGhlCiYjNDM7IyBjYWxsZXIgb3B0cyBpbiB2aWEgUlVOX0RFU1RSVUNUSVZFPTEuCiYjNDM7IwomIzQzOyMgVGVzdCBwYXNzZXMgZXh0ZXJuYWxseTogdGhlIGtlcm5lbCBtdXN0IHBhbmljIHdpdGgKJiM0MzsjICAgJiMzNDtNZW1vcnkgZmFpbHVyZTogJmx0O3BmbiZndDs6IHVucmVjb3ZlcmFibGUgcGFnZSYjMzQ7CiYjNDM7IyBBIHJldHVybiBmcm9tIHRoZSBpbmplY3QgbWVhbnMgbm8gcGFuaWMgZmlyZWQ6IHRoYXQgaXMgYSBmYWlsdXJlLAomIzQzOyMgdW5sZXNzIHRoZSB0YXJnZXQgUEZOIHJhY2VkIHRvIGEgZGlmZmVyZW50IHBhZ2UgdHlwZSBiZWZvcmUgaW5qZWN0aW9uLAomIzQzOyMgaW4gd2hpY2ggY2FzZSB0aGUgcnVuIGlzIGluY29uY2x1c2l2ZSBhbmQgaXMgc2tpcHBlZC4KJiM0MzsjCiYjNDM7IyBBdXRob3I6IEJyZW5vIExlaXRhbyAmbHQ7bGVpdGFvQGRlYmlhbi5vcmcmZ3Q7CiYjNDM7CiYjNDM7c2V0IC11CiYjNDM7CiYjNDM7a3NmdF9za2lwPTQKJiM0MztzeXNjdGxfcGF0aD0vcHJvYy9zeXMvdm0vcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZQomIzQzO2luamVjdF9wYXRoPS9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2hhcmRfb2ZmbGluZV9wYWdlCiYjNDM7a3BhZ2VmbGFnc19wYXRoPS9wcm9jL2twYWdlZmxhZ3MKJiM0Mzt1bnBvaXNvbl9wYXRoPS9zeXMva2VybmVsL2RlYnVnL2h3cG9pc29uL3VucG9pc29uLXBmbgomIzQzOwomIzQzOyMgL3Byb2Mva3BhZ2VmbGFncyBiaXQgcG9zaXRpb25zIChzZWUgaW5jbHVkZS91YXBpL2xpbnV4L2tlcm5lbC1wYWdlLWZsYWdzLmgpCiYjNDM7S1BGX1NMQUI9NwomIzQzO0tQRl9DT01QT1VORF9UQUlMPTE2CiYjNDM7S1BGX0hXUE9JU09OPTE5CiYjNDM7S1BGX05PUEFHRT0yMAomIzQzO0tQRl9QR1RBQkxFPTI2CiYjNDM7S1BGX1JFU0VSVkVEPTMyCiYjNDM7CiYjNDM7cGFnZXNpemU9JChnZXRjb25mIFBBR0VfU0laRSkKJiM0MzsKJiM0MztraW5kPSR7MTotcm9kYXRhfQomIzQzOwomIzQzO2tzZnRfcHJpbnQoKSB7IGVjaG8gJiMzNDsjICQqJiMzNDs7IH0KJiM0Mztrc2Z0X2V4aXRfc2tpcCgpIHsga3NmdF9wcmludCAmIzM0OyQqJiMzNDs7IGV4aXQgJiMzNDska3NmdF9za2lwJiMzNDs7IH0KJiM0Mztrc2Z0X2V4aXRfZmFpbCgpIHsgZWNobyAmIzM0O25vdCBvayAxICQqJiMzNDs7IGV4aXQgMTsgfQomIzQzOwomIzQzO2lmIFsgJiMzNDskKGlkIC11KSYjMzQ7IC1uZSAwIF07IHRoZW4KJiM0MzsJa3NmdF9leGl0X3NraXAgJiMzNDttdXN0IHJ1biBhcyByb290JiMzNDsKJiM0MztmaQomIzQzOwomIzQzO2lmIFsgISAtdyAmIzM0OyRzeXNjdGxfcGF0aCYjMzQ7IF07IHRoZW4KJiM0MzsJa3NmdF9leGl0X3NraXAgJiMzNDskc3lzY3RsX3BhdGggbm90IHByZXNlbnQgKGtlcm5lbCB3aXRob3V0IHRoZSBzeXNjdGw/KSYjMzQ7CiYjNDM7ZmkKJiM0MzsKJiM0MztpZiBbICEgLXcgJiMzNDskaW5qZWN0X3BhdGgmIzM0OyBdOyB0aGVuCiYjNDM7CWtzZnRfZXhpdF9za2lwICYjMzQ7JGluamVjdF9wYXRoIG5vdCBwcmVzZW50IChubyBNRU1PUllfSE9UUExVRz8pJiMzNDsKJiM0MztmaQomIzQzOwomIzQzO2lmIFsgJiMzNDske1JVTl9ERVNUUlVDVElWRTotMH0mIzM0OyAhPSAmIzM0OzEmIzM0OyBdOyB0aGVuCiYjNDM7CWtzZnRfZXhpdF9za2lwICYjMzQ7ZGVzdHJ1Y3RpdmUgdGVzdDsgcmUtcnVuIHdpdGggUlVOX0RFU1RSVUNUSVZFPTEgaW5zaWRlIGEgZGlzcG9zYWJsZSBWTSYjMzQ7CiYjNDM7ZmkKJiM0MzsKJiM0MzsjIFBpY2sgYSBQRk4gaW5zaWRlIHRoZSBrZXJuZWwgaW1hZ2Ugcm9kYXRhIHJlZ2lvbiBvZiAvcHJvYy9pb21lbS4KJiM0MzsjIFRoaXMgaXMgcHJlZmVycmVkIG92ZXIgYSB0b3AtbGV2ZWwgJiMzNDtSZXNlcnZlZCYjMzQ7IGVudHJ5IGJlY2F1c2UgdG9wLWxldmVsCiYjNDM7IyBSZXNlcnZlZCByYW5nZXMgYXJlIG9mdGVuIGZpcm13YXJlIGhvbGVzIHRoYXQgaGF2ZSBubyBiYWNraW5nIHN0cnVjdAomIzQzOyMgcGFnZTsgcGZuX3RvX29ubGluZV9wYWdlKCkgcmV0dXJucyBOVUxMIG9uIHRob3NlIGFuZCBtZW1vcnlfZmFpbHVyZSgpCiYjNDM7IyBiYWlscyBvdXQgd2l0aCAtRU5YSU8gYmVmb3JlIHJlYWNoaW5nIHRoZSBwYW5pYyBwYXRoLgomIzQzOyMKJiM0MzsjICYjMzQ7S2VybmVsIHJvZGF0YSYjMzQ7IGlzIHJlcG9ydGVkIGFzIGEgc3ViLXJlc291cmNlIG9mICYjMzQ7U3lzdGVtIFJBTSYjMzQ7IG9uIGV2ZXJ5CiYjNDM7IyBtYWpvciBhcmNoaXRlY3R1cmUsIHdoaWNoIGd1YXJhbnRlZXM6CiYjNDM7IyAgIC0gdGhlIFBGTiBpcyBiYWNrZWQgYnkgc3RydWN0IHBhZ2UgKHdpdGhpbiBhbiBvbmxpbmUgbWVtb3J5IHJhbmdlKTsKJiM0MzsjICAgLSBQR19yZXNlcnZlZCBpcyBzZXQgb24gdGhlIHBhZ2UgKGtlcm5lbCBpbWFnZSBhcmVhKTsKJiM0MzsjICAgLSB0aGUgbWVtb3J5IGlzIHJlYWQtb25seSwgc28gc2V0dGluZyBQR19od3BvaXNvbiBvbiBpdCBkb2VzIG5vdAomIzQzOyMgICAgIGNvcnJ1cHQgd3JpdGFibGUga2VybmVsIHN0YXRlIGlmIHRoZSBwYW5pYyBzb21laG93IGRvZXMgbm90IGZpcmUuCiYjNDM7IwomIzQzOyMgL3Byb2MvaW9tZW0gZW50cmllcyBsb29rIGxpa2UgKGluZGVudGVkIGZvciBzdWItcmVzb3VyY2VzKToKJiM0MzsjICAgICAmIzM0OyAgMDI1MDAwMDAtMDJmZmZmZmYgOiBLZXJuZWwgcm9kYXRhJiMzNDsKJiM0MztwaWNrX3JvZGF0YV9waHlzX2FkZHIoKSB7CiYjNDM7CWF3ayAtdiBwYWdlc2l6ZT0mIzM0OyQoZ2V0Y29uZiBQQUdFX1NJWkUpJiMzNDsgJiMzOTsKJiM0MzsJIyBDb252ZXJ0IGEgaGV4IHN0cmluZyB0byBhIG51bWJlciB3aXRob3V0IHJlbHlpbmcgb24gdGhlIGdhd2stb25seQomIzQzOwkjIHN0cnRvbnVtKCkuICBtYXdrIGxhY2tzIGl0IGFuZCB3b3VsZCBvdGhlcndpc2Ugc3B1cmlvdXNseSBza2lwCiYjNDM7CSMgdGhpcyB0ZXN0IG9uIGRpc3Ryb3MgdGhhdCBzaGlwIG1hd2sgYXMgL3Vzci9iaW4vYXdrLgomIzQzOwlmdW5jdGlvbiBoZXgybnVtKHMsICAgbiwgaSwgYywgdikgewomIzQzOwkJbiA9IDAKJiM0MzsJCWZvciAoaSA9IDE7IGkgJmx0Oz0gbGVuZ3RoKHMpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCWMgPSB0b2xvd2VyKHN1YnN0cihzLCBpLCAxKSkKJiM0MzsJCQl2ID0gaW5kZXgoJiMzNDswMTIzNDU2Nzg5YWJjZGVmJiMzNDssIGMpIC0gMQomIzQzOwkJCWlmICh2ICZsdDsgMCkKJiM0MzsJCQkJcmV0dXJuIC0xCiYjNDM7CQkJbiA9IG4gKiAxNiAmIzQzOyB2CiYjNDM7CQl9CiYjNDM7CQlyZXR1cm4gbgomIzQzOwl9CiYjNDM7CS86IEtlcm5lbCByb2RhdGFbWzpzcGFjZTpdXSokLyB7CiYjNDM7CQlzdWIoL15bWzpzcGFjZTpdXSYjNDM7LywgJiMzNDsmIzM0OykKJiM0MzsJCW4gPSBzcGxpdCgkMCwgYSwgL1stIF0vKQomIzQzOwkJc3RhcnQgPSBoZXgybnVtKGFbMV0pCiYjNDM7CQllbmQgICA9IGhleDJudW0oYVsyXSkKJiM0MzsJCWlmIChlbmQgJmx0Oz0gc3RhcnQpCiYjNDM7CQkJbmV4dAomIzQzOwkJIyBQYWdlLWFsaWduIHVwd2FyZCBhbmQgZW1pdCB0aGUgZmlyc3QgYnl0ZSBvZiB0aGF0IHBhZ2UuCiYjNDM7CQlwZm4gPSBpbnQoKHN0YXJ0ICYjNDM7IHBhZ2VzaXplIC0gMSkgLyBwYWdlc2l6ZSkKJiM0MzsJCXByaW50ZiAmIzM0OzB4JXhcbiYjMzQ7LCBwZm4gKiBwYWdlc2l6ZQomIzQzOwkJZXhpdCAwCiYjNDM7CX0KJiM0MzsJJiMzOTsgL3Byb2MvaW9tZW0KJiM0Mzt9CiYjNDM7CiYjNDM7IyBXYWxrIC9wcm9jL2twYWdlZmxhZ3MgYW5kIHJldHVybiB0aGUgcGh5cyBhZGRyIG9mIHRoZSBmaXJzdCBQRk4gdGhhdAomIzQzOyMgaGFzIGJpdCAkMSBzZXQsIHdpdGggS1BGX0hXUE9JU09OLCBLUEZfTk9QQUdFIGFuZCBLUEZfQ09NUE9VTkRfVEFJTAomIzQzOyMgYWxsIGNsZWFyIChzbyB3ZSBhdHRhY2sgYSByZWFsLCBub24tdGFpbCwgbm90LWFscmVhZHktcG9pc29uZWQgcGFnZSkuCiYjNDM7IwomIzQzOyMgV2Ugc2tpcCB0aGUgZmlyc3QgMTYgTWlCIG9mIFBGTnMgdG8gc3RlcCBwYXN0IGxvdy1tZW1vcnkgc3BlY2lhbAomIzQzOyMgcmFuZ2VzIChCSU9TL0VGSS9BQ1BJL2V0Yy4pIHRoYXQgb2Z0ZW4gYXJlIFBHX3Jlc2VydmVkIGFuZCB3b3VsZCBub3QKJiM0MzsjIGV4aGliaXQgdGhlIHNsYWIvcGd0YWJsZSB0eXBlIHdlIGFyZSBsb29raW5nIGZvci4KJiM0MztwaWNrX2twYWdlZmxhZ3NfcGh5c19hZGRyKCkgewomIzQzOwlsb2NhbCB3YW50X2JpdD0kMQomIzQzOwlsb2NhbCBwYWdlc2l6ZSBza2lwX3BmbgomIzQzOwomIzQzOwlbIC1yICYjMzQ7JGtwYWdlZmxhZ3NfcGF0aCYjMzQ7IF0gfHwgcmV0dXJuCiYjNDM7CiYjNDM7CXBhZ2VzaXplPSQoZ2V0Y29uZiBQQUdFX1NJWkUpCiYjNDM7CXNraXBfcGZuPSQoKCgxNiAqIDEwMjQgKiAxMDI0KSAvIHBhZ2VzaXplKSkKJiM0MzsKJiM0MzsJb2QgLUFuIC10eDggLXYgLXc4IC1qICYjMzQ7JCgoc2tpcF9wZm4gKiA4KSkmIzM0OyAmIzM0OyRrcGFnZWZsYWdzX3BhdGgmIzM0OyAyJmd0Oy9kZXYvbnVsbCB8IFwKJiM0MzsJYXdrIC12IHdhbnRfYml0PSYjMzQ7JHdhbnRfYml0JiMzNDsgXAomIzQzOwkgICAgLXYgaHdwX2JpdD0mIzM0OyRLUEZfSFdQT0lTT04mIzM0OyBcCiYjNDM7CSAgICAtdiBub3BhZ2VfYml0PSYjMzQ7JEtQRl9OT1BBR0UmIzM0OyBcCiYjNDM7CSAgICAtdiB0YWlsX2JpdD0mIzM0OyRLUEZfQ09NUE9VTkRfVEFJTCYjMzQ7IFwKJiM0MzsJICAgIC12IGJhc2VfcGZuPSYjMzQ7JHNraXBfcGZuJiMzNDsgXAomIzQzOwkgICAgLXYgcGFnZXNpemU9JiMzNDskcGFnZXNpemUmIzM0OyAmIzM5OwomIzQzOwkjIFRlc3Qgd2hldGhlciBiaXQgJiMzNDtiJiMzNDsgaXMgc2V0IGluIHRoZSAxNi1oZXgtZGlnaXQgdmFsdWUgJiMzNDtoZXgmIzM0Oy4KJiM0MzsJIyBEb25lIHdpdGggc3Vic3RyaW5nICYjNDM7IHBlci1kaWdpdCBsb29rdXAgc28gd2UgbmV2ZXIgcmVseSBvbiBhd2sKJiM0MzsJIyBiaXR3aXNlIG9wZXJhdG9ycyAobWF3ayBsYWNrcyB0aGVtKSwgNjQtYml0IEZQIHByZWNpc2lvbiBvciB0aGUKJiM0MzsJIyBnYXdrLW9ubHkgc3RydG9udW0oKS4KJiM0MzsJZnVuY3Rpb24gYml0X3NldChoZXgsIGIsICAgIGRpLCBiaSwgYywgdikgewomIzQzOwkJZGkgPSBpbnQoYiAvIDQpCiYjNDM7CQliaSA9IGIgLSBkaSAqIDQKJiM0MzsJCWMgPSBzdWJzdHIoaGV4LCBsZW5ndGgoaGV4KSAtIGRpLCAxKQomIzQzOwkJdiA9IGluZGV4KCYjMzQ7MDEyMzQ1Njc4OWFiY2RlZiYjMzQ7LCB0b2xvd2VyKGMpKSAtIDEKJiM0MzsJCWlmIChiaSA9PSAwKSByZXR1cm4gKHYgJSAyKSA9PSAxCiYjNDM7CQlpZiAoYmkgPT0gMSkgcmV0dXJuIGludCh2IC8gMikgJSAyID09IDEKJiM0MzsJCWlmIChiaSA9PSAyKSByZXR1cm4gaW50KHYgLyA0KSAlIDIgPT0gMQomIzQzOwkJcmV0dXJuIGludCh2IC8gOCkgJSAyID09IDEKJiM0MzsJfQomIzQzOwl7CiYjNDM7CQlnc3ViKC9eW1s6c3BhY2U6XV0mIzQzOy8sICYjMzQ7JiMzNDspCiYjNDM7CQloID0gJDEKJiM0MzsJCWlmIChiaXRfc2V0KGgsIHdhbnRfYml0KSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIWJpdF9zZXQoaCwgaHdwX2JpdCkgJmFtcDsmYW1wOwomIzQzOwkJICAgICFiaXRfc2V0KGgsIG5vcGFnZV9iaXQpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhYml0X3NldChoLCB0YWlsX2JpdCkpIHsKJiM0MzsJCQlwZm4gPSBiYXNlX3BmbiAmIzQzOyBOUiAtIDEKJiM0MzsJCQlwcmludGYgJiMzNDsweCV4XG4mIzM0OywgcGZuICogcGFnZXNpemUKJiM0MzsJCQlleGl0IDAKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwkmIzM5OwomIzQzO30KJiM0MzsKJiM0MzsjIFJldHVybiAwIGlmIC9wcm9jL2twYWdlZmxhZ3MgYml0ICQyIGlzIHNldCBmb3IgUEZOICQxLCAxIGlmIGl0IGlzCiYjNDM7IyBjbGVhciwgb3IgMiBpZiB0aGUgd29yZCBjYW5ub3QgYmUgcmVhZC4gIFVzZWQgdG8gcmUtY29uZmlybSB0aGUgdGFyZ2V0CiYjNDM7IyBwYWdlIHR5cGUgYWZ0ZXIgYSBub24tcGFuaWNraW5nIGluamVjdC4KJiM0MztrcGFnZWZsYWdzX2JpdF9zZXQoKSB7CiYjNDM7CWxvY2FsIHdvcmQKJiM0MzsKJiM0MzsJd29yZD0kKG9kIC1BbiAtdHg4IC12IC1qICYjMzQ7JCgoJDEgKiA4KSkmIzM0OyAtTiA4ICYjMzQ7JGtwYWdlZmxhZ3NfcGF0aCYjMzQ7IDImZ3Q7L2Rldi9udWxsIHwgdHIgLWQgJiMzOTtbOnNwYWNlOl0mIzM5OykKJiM0MzsJWyAtbiAmIzM0OyR3b3JkJiMzNDsgXSB8fCByZXR1cm4gMgomIzQzOwkoKCAoMTYjJHdvcmQgJmd0OyZndDsgJDIpICZhbXA7IDEgKSkKJiM0Mzt9CiYjNDM7CiYjNDM7IyBCZXN0LWVmZm9ydDogZHJvcCB0aGUgUEdfaHdwb2lzb24gbWFya2VyIHNldCBieSB0aGUgaW5qZWN0IHNvIGEgZmFpbGVkCiYjNDM7IyBydW4gZG9lcyBub3QgbGVhdmUgYSBwb2lzb25lZCBwYWdlIGJlaGluZC4gIGhhcmRfb2ZmbGluZV9wYWdlKCkgaW5qZWN0cwomIzQzOyMgd2l0aCBNRl9TV19TSU1VTEFURUQsIHNvIHRoZSBwYWdlIHN0YXlzIHVucG9pc29uYWJsZSB0aHJvdWdoIHRoZQomIzQzOyMgaHdwb2lzb24gZGVidWdmcyBpbnRlcmZhY2UgKG5lZWRzIENPTkZJR19IV1BPSVNPTl9JTkpFQ1QgJiM0MzsgZGVidWdmcykuCiYjNDM7dHJ5X3VucG9pc29uKCkgewomIzQzOwlbIC13ICYjMzQ7JHVucG9pc29uX3BhdGgmIzM0OyBdIHx8IHJldHVybiAwCiYjNDM7CWVjaG8gJiMzNDskMSYjMzQ7ICZndDsgJiMzNDskdW5wb2lzb25fcGF0aCYjMzQ7IDImZ3Q7L2Rldi9udWxsIHx8IHRydWUKJiM0Mzt9CiYjNDM7CiYjNDM7Y2FzZSAmIzM0OyRraW5kJiMzNDsgaW4KJiM0Mztyb2RhdGEpCiYjNDM7CXBoeXNfYWRkcj0kKHBpY2tfcm9kYXRhX3BoeXNfYWRkcikKJiM0MzsJcmVjaGVja19iaXQ9JEtQRl9SRVNFUlZFRAomIzQzOwltaXNzaW5nX21zZz0mIzM5O25vICYjMzQ7S2VybmVsIHJvZGF0YSYjMzQ7IGVudHJ5IGluIC9wcm9jL2lvbWVtJiMzOTsKJiM0MzsJOzsKJiM0MztzbGFiKQomIzQzOwlwaHlzX2FkZHI9JChwaWNrX2twYWdlZmxhZ3NfcGh5c19hZGRyICYjMzQ7JEtQRl9TTEFCJiMzNDspCiYjNDM7CXJlY2hlY2tfYml0PSRLUEZfU0xBQgomIzQzOwltaXNzaW5nX21zZz0mIzM0O25vIHVzYWJsZSBzbGFiIFBGTiBmb3VuZCBpbiAka3BhZ2VmbGFnc19wYXRoJiMzNDsKJiM0MzsJOzsKJiM0MztwZ3RhYmxlKQomIzQzOwlwaHlzX2FkZHI9JChwaWNrX2twYWdlZmxhZ3NfcGh5c19hZGRyICYjMzQ7JEtQRl9QR1RBQkxFJiMzNDspCiYjNDM7CXJlY2hlY2tfYml0PSRLUEZfUEdUQUJMRQomIzQzOwltaXNzaW5nX21zZz0mIzM0O25vIHVzYWJsZSBwYWdlLXRhYmxlIFBGTiBmb3VuZCBpbiAka3BhZ2VmbGFnc19wYXRoJiMzNDsKJiM0MzsJOzsKJiM0MzsqKQomIzQzOwlrc2Z0X2V4aXRfZmFpbCAmIzM0O3Vua25vd24ga2luZCAmIzM5OyRraW5kJiMzOTsgKGV4cGVjdGVkOiByb2RhdGF8c2xhYnxwZ3RhYmxlKSYjMzQ7CiYjNDM7CTs7CiYjNDM7ZXNhYwomIzQzOwomIzQzO2lmIFsgLXogJiMzNDskcGh5c19hZGRyJiMzNDsgXTsgdGhlbgomIzQzOwlrc2Z0X2V4aXRfc2tpcCAmIzM0OyRtaXNzaW5nX21zZyYjMzQ7CiYjNDM7ZmkKJiM0MzsKJiM0Mztrc2Z0X3ByaW50ICYjMzQ7ZW5hYmxpbmcgJHN5c2N0bF9wYXRoJiMzNDsKJiM0Mztwcmlvcj0kKGNhdCAmIzM0OyRzeXNjdGxfcGF0aCYjMzQ7KQomIzQzO2VjaG8gMSAmZ3Q7ICYjMzQ7JHN5c2N0bF9wYXRoJiMzNDsgfHwga3NmdF9leGl0X2ZhaWwgJiMzNDtmYWlsZWQgdG8gZW5hYmxlIHN5c2N0bCYjMzQ7CiYjNDM7CiYjNDM7cGZuPSQoKHBoeXNfYWRkciAvIHBhZ2VzaXplKSkKJiM0Mztrc2Z0X3ByaW50ICYjMzQ7aW5qZWN0aW5nIGh3cG9pc29uIGF0IHBoeXMgMHgkKHByaW50ZiAmIzM5OyV4JiMzOTsgJiMzNDskcGh5c19hZGRyJiMzNDspIChwZm4gMHgkKHByaW50ZiAmIzM5OyV4JiMzOTsgJiMzNDskcGZuJiMzNDspLCBraW5kPSRraW5kKSYjMzQ7CiYjNDM7a3NmdF9wcmludCAmIzM0O2V4cGVjdGluZyBrZXJuZWwgcGFuaWM6ICYjMzk7TWVtb3J5IGZhaWx1cmU6ICZsdDtwZm4mZ3Q7OiB1bnJlY292ZXJhYmxlIHBhZ2UmIzM5OyYjMzQ7CiYjNDM7CiYjNDM7IyBBIHN1Y2Nlc3NmdWwgcnVuIG5ldmVyIHJldHVybnMgZnJvbSB0aGUgaW5qZWN0IC0tIGl0IHBhbmljcyB0aGUga2VybmVsLgomIzQzOyMgUmVhY2hpbmcgdGhlIGNvZGUgYmVsb3cgdGhlcmVmb3JlIG1lYW5zIG5vIHBhbmljIGZpcmVkLiAgTm90ZSB3aGV0aGVyCiYjNDM7IyB0aGUgd3JpdGUgaXRzZWxmIHN1Y2NlZWRlZCwgdGhlbiBwdXQgdGhlIG1hY2hpbmUgYmFjazogcmVzdG9yZSB0aGUKJiM0MzsjIHN5c2N0bCBhbmQgYmVzdC1lZmZvcnQgdW5wb2lzb24gdGhlIHBhZ2Ugd2UganVzdCBtYXJrZWQuCiYjNDM7aWYgZWNobyAmIzM0OyRwaHlzX2FkZHImIzM0OyAmZ3Q7ICYjMzQ7JGluamVjdF9wYXRoJiMzNDs7IHRoZW4KJiM0MzsJdmVyZGljdD0mIzM0O2luamVjdCByZXR1cm5lZCB3aXRob3V0IHBhbmljOyBzeXNjdGwgaW5lZmZlY3RpdmUmIzM0OwomIzQzO2Vsc2UKJiM0MzsJdmVyZGljdD0mIzM0O2luamVjdCBmYWlsZWQgYmVmb3JlIHJlYWNoaW5nIHRoZSBwYW5pYyBwYXRoJiMzNDsKJiM0MztmaQomIzQzOwomIzQzO2VjaG8gJiMzNDskcHJpb3ImIzM0OyAmZ3Q7ICYjMzQ7JHN5c2N0bF9wYXRoJiMzNDsKJiM0Mzt0cnlfdW5wb2lzb24gJiMzNDskcGZuJiMzNDsKJiM0MzsKJiM0MzsjIFRoZSBwYWdlIHR5cGUgY2FuIGNoYW5nZSBiZXR3ZWVuIHNlbGVjdGlvbiBhbmQgaW5qZWN0aW9uIChlLmcuIGEgc2xhYgomIzQzOyMgb3IgcGFnZS10YWJsZSBwYWdlIGlzIGZyZWVkIGFuZCByZXVzZWQpLiAgT25seSB0cmVhdCBhIG1pc3NpbmcgcGFuaWMgYXMKJiM0MzsjIGEgZmFpbHVyZSBpZiB0aGUgdGFyZ2V0IFBGTiBpcyBzdGlsbCB0aGUga2VybmVsLW93bmVkIHR5cGUgd2UgYWltZWQgYXQ7CiYjNDM7IyBpZiBpdCByYWNlZCB0byBhbm90aGVyIHR5cGUgdGhlIHJ1biBpcyBpbmNvbmNsdXNpdmUsIHNvIHNraXAgaW5zdGVhZC4KJiM0MztrcGFnZWZsYWdzX2JpdF9zZXQgJiMzNDskcGZuJiMzNDsgJiMzNDskcmVjaGVja19iaXQmIzM0OwomIzQzO2Nhc2UgJD8gaW4KJiM0MzswKQlrc2Z0X2V4aXRfZmFpbCAmIzM0OyR2ZXJkaWN0IChwYWdlIHN0aWxsICRraW5kKSYjMzQ7IDs7CiYjNDM7MSkJa3NmdF9leGl0X3NraXAgJiMzNDt0YXJnZXQgUEZOIG5vIGxvbmdlciAka2luZDsgcmFjZWQgYmVmb3JlIGluamVjdCwgaW5jb25jbHVzaXZlJiMzNDsgOzsKJiM0MzsqKQlrc2Z0X2V4aXRfZmFpbCAmIzM0OyR2ZXJkaWN0IChjb3VsZCBub3QgcmVjb25maXJtIHBhZ2UgdHlwZSB2aWEgJGtwYWdlZmxhZ3NfcGF0aCkmIzM0OyA7OwomIzQzO2VzYWMKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjM6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg5OAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDUyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlICYjMzQ7UGFuaWMgb24gVW5yZWNvdmVyYWJsZSBNZW1vcnkgRmFpbHVyZSYjMzQ7IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBhIG5ldyBzeXNjdGwsIGBwYW5pY19vbl91bnJlY292ZXJhYmxlX21lbW9yeV9mYWlsdXJlYC4gVGhlIGdvYWwgaXMgdG8gbWFrZSB0aGUga2VybmVsIHBhbmljIHdoZW4gYSBtZW1vcnkgZmFpbHVyZSBvY2N1cnMgb24ga2VybmVsLW93bmVkIHBhZ2VzIHRoYXQgdGhlIHJlZ3VsYXIgZXJyb3IgaGFuZGxlciBjYW4mIzM5O3QgZml4LiBUaGUgY29kZSBtb2RpZmllcyBgbW0vbWVtb3J5LWZhaWx1cmUuY2AgYW5kIGFkZHMgYSBzZWxmLXRlc3QsIHdoaWNoIGlzIGdvb2QuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGluIHRoaXMgbmV3IGBpc19rZXJuZWxfb3duZWRfcGFnZSgpYCBmdW5jdGlvbi4gVGhpcyBpcyBrZXksIGFzIGl0IGlkZW50aWZpZXMgaWYgdGhlIHBhZ2UgaXMgdHJ1bHkga2VybmVsLXNwYWNlLCBsb29raW5nIGZvciBgUGFnZVJlc2VydmVkYCwgYFBhZ2VTbGFiYCwgYFBhZ2VUYWJsZWAsIG9yIGBQYWdlTGFyZ2VLbWFsbG9jYC4gSWYgaXQgaXMgaW5kZWVkIGEga2VybmVsIHBhZ2UsIHRoZW4gYGdldF9hbnlfcGFnZSgpYCByZXR1cm5zIGAtRU5PVFJFQ09WRVJBQkxFYC4gVGhlIGV4aXN0aW5nIGBtZW1vcnlfZmFpbHVyZSgpYCBmdW5jdGlvbiB0aGVuIHByb2Nlc3NlcyB0aGlzIGVycm9yIGNvZGUgYW5kIGNhbGxzIGBhY3Rpb25fcmVzdWx0KClgLiBJdCYjMzk7cyBgYWN0aW9uX3Jlc3VsdCgpYCB0aGF0IGhhcyBiZWVuIHVwZGF0ZWQgdG8gY2hlY2sgdGhpcyBuZXcgYHBhbmljX29uX3VucmVjb3ZlcmFibGVfbWZgIGZ1bmN0aW9uLCBhbmQgaWYgaXQgcmV0dXJucyB0cnVlLCB0aGVuIHBhbmljLgoKVGhpcyBkaXJlY3RseSB0b3VjaGVzIGNvcmUgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcsIHNvIHJlYWNoYWJpbGl0eSBpcyBjcml0aWNhbC4gSSYjMzk7bSB0aGlua2luZyB0aGlzIGNvdWxkIGJlIHRyaWdnZXJlZCBieSBnZW51aW5lIGhhcmR3YXJlIG1lbW9yeSBlcnJvcnMsIG9mIGNvdXJzZSwgb3IgZXZlbiBieSBpbmplY3RpbmcgZmF1bHRzIHZpYSBzb2Z0d2FyZS4gYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIGltbWVkaWF0ZWx5IGNvbWVzIHRvIG1pbmQsIGJ1dCB0aGF0IHVzdWFsbHkgb3BlcmF0ZXMgb24gdXNlci1zcGFjZSBwYWdlcy4gSG93ZXZlciwgbWF5YmUgYC9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2hhcmRfb2ZmbGluZV9wYWdlYCBvciBzb21ldGhpbmcgaW4gZGVidWdmcyBjb3VsZCBiZSB1c2VkIHRvIGluamVjdCBpdCBvbnRvIGtlcm5lbCBwYWdlcy4gVGhlIHNlbGYtdGVzdCwgaW4gZmFjdCwgZG9lcyB1c2UgdGhhdCBgL3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvaGFyZF9vZmZsaW5lX3BhZ2VgIG1ldGhvZCwgd2hpY2ggaXMgYSBnb29kIHNpZ24uCgpUaGUgcXVlc3Rpb24gdGhlbiBpcywgaG93IGRvIHdlIGZ1enogdGhpcz8gU3l6a2FsbGVyIHNlZW1zIGxpa2UgdGhlIG9idmlvdXMgY2hvaWNlLiBJdCBoYXMgYHN5el9pbmplY3RfaHdwb2lzb25gIG9yIHNvbWV0aGluZyBzaW1pbGFyIHRoYXQgY291bGQgdGFyZ2V0IHRoaXMsIGFuZCBpdCAqY2FuKiB3cml0ZSB0byBgL3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvaGFyZF9vZmZsaW5lX3BhZ2VgLiBIb3dldmVyLCBJIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBTeXprYWxsZXIgZG9lc24mIzM5O3QgdHlwaWNhbGx5IGZvY3VzIG9uIGhhcmR3YXJlIGVycm9yIGluamVjdGlvbiB1bmxlc3Mgc3BlY2lmaWNhbGx5IGNvbmZpZ3VyZWQuIEJ1dCBpdCBkb2VzIGhhdmUgc29tZSBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAgc3VwcG9ydC4gVGhpcyBpcyBnb29kIHRvIGtlZXAgaW4gbWluZC4KCldhaXQsIEkganVzdCByZW1lbWJlcmVkIHRoZSBkZWZhdWx0OiB0aGUgc3lzY3RsIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQhIGBzeXNjdGxfcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZmAgZGVmYXVsdHMgdG8gemVybywgc28gdG8gZWZmZWN0aXZlbHkgZnV6eiB0aGlzLCB3ZSYjMzk7bGwgKmhhdmUqIHRvIGVuYWJsZSB0aGF0IHN5c2N0bCBmaXJzdC4gTHVja2lseSwgU3l6a2FsbGVyICpjYW4qIHdyaXRlIHRvIGAvcHJvYy9zeXMvdm0vcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZWAuCgpJIHNob3VsZCBwcm9iYWJseSBkaXZlIGludG8gYG1tL21lbW9yeS1mYWlsdXJlLmNgIGNvZGUgZGlyZWN0bHkgbm93LiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgZ3JlcHBlcmAgdG8gc2VlIGlmIHRoZSBgTUVNT1JZX0ZBSUxVUkVgIGNvbmZpZyBvcHRpb24gaXMgaW52b2x2ZWQgaW4gYW55IG9mIHRoaXMgYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTcwMj1jb25maWcgREVGQVVMVF9NTUFQX01JTl9BRERSXG4tLVxubW0vS2NvbmZpZy03MjAtXG5tbS9LY29uZmlnOjcyMTpjb25maWcgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxubW0vS2NvbmZpZy03MjItXHRib29sXG5tbS9LY29uZmlnLTcyMy1cbm1tL0tjb25maWc6NzI0OmNvbmZpZyBNRU1PUllfRkFJTFVSRVxubW0vS2NvbmZpZy03MjUtXHRkZXBlbmRzIG9uIE1NVVxubW0vS2NvbmZpZzo3MjY6XHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcbm1tL0tjb25maWctNzI3LVx0Ym9vbCBcJiMzNDtFbmFibGUgcmVjb3ZlcnkgZnJvbSBoYXJkd2FyZSBtZW1vcnkgZXJyb3JzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz03MzU9Y29uZmlnIEhXUE9JU09OX0lOSkVDVFxubW0vS2NvbmZpZy03MzYtXHR0cmlzdGF0ZSBcJiMzNDtIV1BvaXNvbiBwYWdlcyBpbmplY3RvclwmIzM0O1xubW0vS2NvbmZpZzo3Mzc6XHRkZXBlbmRzIG9uIE1FTU9SWV9GQUlMVVJFIFx1MDAyNlx1MDAyNiBERUJVR19LRVJORUwgXHUwMDI2XHUwMDI2IFBST0NfRlNcbm1tL0tjb25maWctNzM4LVx0c2VsZWN0IFBST0NfUEFHRV9NT05JVE9SXG4tLVxubW0vS2NvbmZpZy5kZWJ1Zz0xNDc9Y29uZmlnIFBBR0VfUE9JU09OSU5HXG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy0xNTYtXHQgIE5vdGUgdGhhdCBcJiMzNDtwb2lzb25cJiMzNDsgaGVyZSBpcyBub3QgdGhlIHNhbWUgdGhpbmcgYXMgdGhlIFwmIzM0O0hXUG9pc29uXCYjMzQ7XG5tbS9LY29uZmlnLmRlYnVnOjE1NzpcdCAgZm9yIENPTkZJR19NRU1PUllfRkFJTFVSRS4gVGhpcyBpcyBzb2Z0d2FyZSBwb2lzb25pbmcgb25seS5cbm1tL0tjb25maWcuZGVidWctMTU4LVxuLS1cbm1tL01ha2VmaWxlPTExMT1vYmotJChDT05GSUdfRE1BUE9PTF9URVNUKSAmIzQzOz0gZG1hcG9vbF90ZXN0Lm9cbm1tL01ha2VmaWxlOjExMjpvYmotJChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpICYjNDM7PSBtZW1vcnktZmFpbHVyZS5vXG5tbS9NYWtlZmlsZS0xMTMtb2JqLSQoQ09ORklHX0hXUE9JU09OX0lOSkVDVCkgJiM0Mzs9IGh3cG9pc29uLWluamVjdC5vXG4tLVxubW0vaW50ZXJuYWwuaD0xNDAwPXN0YXRpYyBpbmxpbmUgYm9vbCBub2RlX3JlY2xhaW1fZW5hYmxlZCh2b2lkKVxuLS1cbm1tL2ludGVybmFsLmgtMTQwOC0gKi9cbm1tL2ludGVybmFsLmg6MTQwOTojaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXG5tbS9pbnRlcm5hbC5oLTE0MTAtaW50IHVubWFwX3BvaXNvbmVkX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGxvbmcgcGZuLCBib29sIG11c3Rfa2lsbCk7XG4tLVxubW0va3NtLmM9MzE1NT12b2lkIHJtYXBfd2Fsa19rc20oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHJtYXBfd2Fsa19jb250cm9sICpyd2MpXG4tLVxubW0va3NtLmMtMzIyMy1cbm1tL2tzbS5jOjMyMjQ6I2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxubW0va3NtLmMtMzIyNS0vKlxuLS1cbm1tL21hZHZpc2UuYz0xMzM5PXN0YXRpYyBpbnQgbWFkdmlzZV92bWFfYmVoYXZpb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTE0NDMtXG5tbS9tYWR2aXNlLmM6MTQ0NDojaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXG5tbS9tYWR2aXNlLmMtMTQ0NS0vKlxuLS1cbm1tL21hZHZpc2UuYz0xNTExPXN0YXRpYyBib29sIGlzX21lbW9yeV9mYWlsdXJlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNTE1LVxubW0vbWFkdmlzZS5jOjE1MTY6I2VuZGlmXHQvKiBDT05GSUdfTUVNT1JZX0ZBSUxVUkUgKi9cbm1tL21hZHZpc2UuYy0xNTE3LVxuLS1cbm1tL21hZHZpc2UuYz0xNTE5PW1hZHZpc2VfYmVoYXZpb3JfdmFsaWQoaW50IGJlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNTUwLVx0Y2FzZSBNQURWX0dVQVJEX1JFTU9WRTpcbm1tL21hZHZpc2UuYzoxNTUxOiNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVcbm1tL21hZHZpc2UuYy0xNTUyLVx0Y2FzZSBNQURWX1NPRlRfT0ZGTElORTpcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTI2MTg9RVhQT1JUX1NZTUJPTF9HUEwobWVtb3J5X2ZhaWx1cmUpO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjE5LVxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjIwOiNkZWZpbmUgTUVNT1JZX0ZBSUxVUkVfRklGT19PUkRFUlx0NFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjIxOiNkZWZpbmUgTUVNT1JZX0ZBSUxVUkVfRklGT19TSVpFXHQoMSBcdTAwM2NcdTAwM2MgTUVNT1JZX0ZBSUxVUkVfRklGT19PUkRFUilcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjYyMi1cbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTI2Mjg9c3RydWN0IG1lbW9yeV9mYWlsdXJlX2NwdSB7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2MjktXHRERUNMQVJFX0tGSUZPKGZpZm8sIHN0cnVjdCBtZW1vcnlfZmFpbHVyZV9lbnRyeSxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjYzMDpcdFx0ICAgICAgTUVNT1JZX0ZBSUxVUkVfRklGT19TSVpFKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjYzMS1cdHJhd19zcGlubG9ja190IGxvY2s7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yODQ4PXN0YXRpYyBpbnQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjg1OS1cdFx0LmdmcF9tYXNrID0gR0ZQX1VTRVIgfCBfX0dGUF9NT1ZBQkxFIHwgX19HRlBfUkVUUllfTUFZRkFJTCxcbm1tL21lbW9yeS1mYWlsdXJlLmM6Mjg2MDpcdFx0LnJlYXNvbiA9IE1SX01FTU9SWV9GQUlMVVJFLFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yODYxLVx0fTtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI5MTctXHRcdHJldCA9IG1pZ3JhdGVfcGFnZXMoXHUwMDI2cGFnZWxpc3QsIGFsbG9jX21pZ3JhdGlvbl90YXJnZXQsIE5VTEwsXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI5MTg6XHRcdFx0KHVuc2lnbmVkIGxvbmcpXHUwMDI2bXRjLCBNSUdSQVRFX1NZTkMsIE1SX01FTU9SWV9GQUlMVVJFLCBOVUxMKTtcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjkxOS1cdFx0aWYgKCFyZXQpIHtcbi0tXG5tbS9taWdyYXRlLmM9MTE5MD1zdGF0aWMgdm9pZCBtaWdyYXRlX2ZvbGlvX2RvbmUoc3RydWN0IGZvbGlvICpzcmMsXG4tLVxubW0vbWlncmF0ZS5jLTExOTYtXG5tbS9taWdyYXRlLmM6MTE5NzpcdGlmIChyZWFzb24gIT0gTVJfTUVNT1JZX0ZBSUxVUkUpXG5tbS9taWdyYXRlLmMtMTE5OC1cdFx0LyogV2UgcmVsZWFzZSB0aGUgcGFnZSBpbiBwYWdlX2hhbmRsZV9wb2lzb24uICovXG4tLVxubW0vcGFnZV9hbGxvYy5jPTc2MDk9RVhQT1JUX1NZTUJPTChpc19mcmVlX2J1ZGR5X3BhZ2UpO1xubW0vcGFnZV9hbGxvYy5jLTc2MTAtXG5tbS9wYWdlX2FsbG9jLmM6NzYxMTojaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXG5tbS9wYWdlX2FsbG9jLmMtNzYxMi1zdGF0aWMgaW5saW5lIHZvaWQgYWRkX3RvX2ZyZWVfbGlzdChzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHpvbmUgKnpvbmUsXG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmM9MTgwPWJvb2wgcGFnZV92bWFfbWFwcGVkX3dhbGsoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTMzNC1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjMzNTojaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0zMzYtLyoqXG4tLVxubW0vc2hvd19tZW0uYz00MDU9dm9pZCBfX3Nob3dfbWVtKHVuc2lnbmVkIGludCBmaWx0ZXIsIG5vZGVtYXNrX3QgKm5vZGVtYXNrLCBpbnQgbWF4X3pvbmVfaWR4KVxuLS1cbm1tL3Nob3dfbWVtLmMtNDI3LSNlbmRpZlxubW0vc2hvd19tZW0uYzo0Mjg6I2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxubW0vc2hvd19tZW0uYy00MjktXHRwcmludGsoXCYjMzQ7JWx1IHBhZ2VzIGh3cG9pc29uZWRcXG5cJiMzNDssIGF0b21pY19sb25nX3JlYWQoXHUwMDI2bnVtX3BvaXNvbmVkX3BhZ2VzKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjM6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3NTAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1MjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBBbmFseXNpczogVW5yZWNvdmVyYWJsZSBNZW1vcnkgRmFpbHVyZSBIYW5kbGluZyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc3lzY3RsLCBgcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZWAsIGFuZCBtb2RpZmllcyBgbWVtb3J5X2ZhaWx1cmUoKWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1dvcnRoIGZ1enppbmc/JiMzNDsgQWJzb2x1dGVseSwgdGhpcyBpcyBuZXcgZnVuY3Rpb25hbGl0eSBpbiB0aGUga2VybmVsIHRoYXQmIzM5O3MgZGVzaWduZWQgdG8gdHJpZ2dlciBhIHBhbmljIHVuZGVyIHNwZWNpZmljIG1lbW9yeSBmYWlsdXJlIGNvbmRpdGlvbnMuCgpCdXQgd2FpdCwgYSBwYW5pYyBtZWFucyBhIGNyYXNoLCBhbmQgYSBmdXp6ZXIgKndpbGwqIHNlZSB0aGF0LiBUaGUgc3lzY3RsIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQsIHdoaWNoIGlzIGltcG9ydGFudC4gSWYgdGhlIGZ1enplciBlbmFibGVzIGl0LCBhbmQgdGhlbiB0cmlnZ2VycyBhbiB1bnJlY292ZXJhYmxlIG1lbW9yeSBmYWlsdXJlLCBib29tLCBwYW5pYy4gSXMgdGhlIHBhbmljIGEgYnVnPyBObywgaXQmIzM5O3MgdGhlICppbnRlbmRlZCogYmVoYXZpb3Igd2hlbiB0aGUgc3lzY3RsIGlzIHNldC4gU28sIGlmIHRoZSBmdXp6ZXIgaGl0cyB0aGlzLCBpdCYjMzk7bGwgcmVwb3J0IGEgJiMzNDtjcmFzaCwmIzM0OyBidXQgaXQmIzM5O3MgcG90ZW50aWFsbHkgYSBmYWxzZSBwb3NpdGl2ZSBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgYmVjYXVzZSB3ZSBpbnRlbnRpb25hbGx5IGNhdXNlZCB0aGUga2VybmVsIHRvIHBhbmljLgoKTm93LCBpZiB0aGUgZnV6emVyIGNhbiB0cmlnZ2VyIGEgbWVtb3J5IGZhaWx1cmUgb24gYSBrZXJuZWwgcGFnZSBhbmQgdGhlIHN5c2N0bCBpcyBlbmFibGVkLCBpdCAqd2lsbCogcGFuaWMuIFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIHNob3VsZCB3ZSBmdXp6IHRoaXM/IFRoZSBwYXRjaCAqbWlnaHQqIHVuY292ZXIgYnVncyBpbiB0aGUgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgbG9naWMgaXRzZWxmLCBvciBpdCBjb3VsZCBzaW1wbHkgdHJpZ2dlciB0aGUgaW50ZW5kZWQgcGFuaWMuCgpIb2xkIG9uLCB0aGUgcHJvbXB0IHNheXMsIOKAnFJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4uLiYjMzQ7IENhbiB3ZSB0cmlnZ2VyIGEgbWVtb3J5IGZhaWx1cmUgaW4gUUVNVT8gWWVzLCB3ZSBjYW4gdXNlIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCBvciBgL3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvaGFyZF9vZmZsaW5lX3BhZ2VgLgoKV2FpdCwgdGhlIHBhdGNoICpleHBsaWNpdGx5KiBhZGRzIGEgc2VsZnRlc3QgdGhhdCB1c2VzIGAvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9oYXJkX29mZmxpbmVfcGFnZWAuIFRoYXQmIzM5O3MgYSBjbGVhciBzaWduYWwuIFRoaXMgKmlzKiB3b3J0aCBmdXp6aW5nLCBiZWNhdXNlIGl0IG1vZGlmaWVzIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBpdCBpcyBwb3NzaWJsZSB0byBoaXQgaXQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4KCk5vdywgd2UgbmVlZCB0byBjb25zaWRlciBob3cgdGhlIGZ1enplciBpcyBjb25maWd1cmVkLiBJZiB0aGUgc3lzY3RsIGlzIGVuYWJsZWQsIGl0IHBhbmljcy4gSWYgaXQmIzM5O3MgZGlzYWJsZWQsIGl0IGRvZXNuJiMzOTt0LiBJZiB3ZSBlbmFibGUgdGhlIHN5c2N0bCwgdGhlIGZ1enplciB3aWxsIGRlZmluaXRlbHkgaGl0IHRoYXQgcGFuaWMgYW5kIHJlcG9ydCBpdCBhcyBhIGNyYXNoLiBJcyB0aGF0IHdoYXQgd2UgKndhbnQqPyBQcm9iYWJseSBub3QuIEEgZnV6emluZyBzZXR1cCB1c3VhbGx5IHNob3VsZG4mIzM5O3QgYmUgaW50ZW50aW9uYWxseSBjb25maWd1cmVkIHRvIHBhbmljIHRoZSBrZXJuZWwgdW5sZXNzIGl0JiMzOTtzIGRlc2lnbmVkIHRvIHRlc3QgYSBzcGVjaWZpYyBwYW5pYyBjb25kaXRpb24uIFN5emthbGxlciBnZW5lcmFsbHkgYXZvaWRzIHBhbmljcyBpZiB0aGV5IGFyZSBpbnRlbmRlZCwgb3Igd2UganVzdCB3b3VsZG4mIzM5O3QgZW5hYmxlIHRoZSBzeXNjdGwuCgpPa2F5LCBpZiB3ZSBkb24mIzM5O3QgZW5hYmxlIHRoZSBzeXNjdGwsIHRoZSBuZXcgY29kZSBgcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZmAgc2ltcGx5IHJldHVybnMgZmFsc2UuIEJ1dCwgaXQgYWxzbyBhZGRzIGBpc19rZXJuZWxfb3duZWRfcGFnZSgpYCB3aGljaCBpcyBjYWxsZWQgdW5jb25kaXRpb25hbGx5IGluIGBnZXRfYW55X3BhZ2UoKWAuIFRoYXQgc291bmRzIGludGVyZXN0aW5nLiBJIHNob3VsZCBnbyBsb29rIGF0IHRob3NlIGNoYW5nZXMgdG8gYGdldF9hbnlfcGFnZSgpYCBjbG9zZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXNfa2VybmVsX293bmVkX3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1vcnktZmFpbHVyZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbW9yeS1mYWlsdXJlLmM9MTMzOT1zdGF0aWMgaW5saW5lIGJvb2wgSFdQb2lzb25IYW5kbGFibGUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMzU1LSAqL1xubW0vbWVtb3J5LWZhaWx1cmUuYzoxMzU2OnN0YXRpYyBpbmxpbmUgYm9vbCBpc19rZXJuZWxfb3duZWRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTM1Ny17XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0xNDE5PXN0YXRpYyBpbnQgZ2V0X2FueV9wYWdlKHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMTQzMi1cdCAqL1xubW0vbWVtb3J5LWZhaWx1cmUuYzoxNDMzOlx0aWYgKGlzX2tlcm5lbF9vd25lZF9wYWdlKHApKSB7XG5tbS9tZW1vcnktZmFpbHVyZS5jLTE0MzQtXHRcdGlmIChjb3VudF9pbmNyZWFzZWQpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0xNDkzPXN0YXRpYyBpbnQgX19nZXRfdW5wb2lzb25fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE1NDUtICogICAgICAgICAtRU5PVFJFQ09WRVJBQkxFIGZvciBrZXJuZWwtb3duZWQgcGFnZXMgaWRlbnRpZmllZCBieVxubW0vbWVtb3J5LWZhaWx1cmUuYzoxNTQ2OiAqICAgICAgICAgaXNfa2VybmVsX293bmVkX3BhZ2UoKSAoUEdfcmVzZXJ2ZWQsIHNsYWIsXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE1NDctICogICAgICAgICBwYWdlLXRhYmxlLCBsYXJnZS1rbWFsbG9jKSB0aGF0IHRoZSBoYW5kbGVyIGNhbm5vdCByZWNvdmVyLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIzOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjQ2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGEgUmVjZW50IEtlcm5lbCBDaGFuZ2UqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBrZXJuZWwgY29kZSwgYW5kIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHNlZWluZy4gSXQgbG9va3MgbGlrZSBgaXNfa2VybmVsX293bmVkX3BhZ2UoKWAgZ2V0cyBjYWxsZWQgdW5jb25kaXRpb25hbGx5IHdpdGhpbiBgZ2V0X2FueV9wYWdlKClgLiBJbnRlcmVzdGluZy4gSWYgdGhhdCBmdW5jdGlvbiByZXR1cm5zIGB0cnVlYCwgaW5kaWNhdGluZyBhIGtlcm5lbC1vd25lZCBwYWdlLCBgZ2V0X2FueV9wYWdlKClgIGltbWVkaWF0ZWx5IHJldHVybnMgYC1FTk9UUkVDT1ZFUkFCTEVgLiBOb3csIGBtZW1vcnlfZmFpbHVyZSgpYCBoYW5kbGVzIHRoYXQgc3BlY2lmaWMgZXJyb3IgY29kZSwgYC1FTk9UUkVDT1ZFUkFCTEVgLCBhbmQgZG9lcyBzbyBieSBjYWxsaW5nIGBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0tFUk5FTCwgTUZfSUdOT1JFRClgLgoKVGhlIGNydWNpYWwgYml0IGlzLCB0aGlzICpjaGFuZ2VzKiBob3cgYG1lbW9yeV9mYWlsdXJlKClgIGJlaGF2ZXMgd2l0aCBrZXJuZWwtb3duZWQgcGFnZXMsIGV2ZW4gaWYgdGhlIHJlbGV2YW50IHN5c2N0bCBpcyBkaXNhYmxlZC4gUHJldmlvdXNseSwgaWYgSSB1bmRlcnN0YW5kIGNvcnJlY3RseSwgaXQgd291bGQgaGF2ZSBnb25lIHRocm91Z2ggYHRyeV9hZ2FpbmAgYW5kIGV2ZW50dWFsbHkgZ2l2ZW4gYSBgLUVJT2AgZXJyb3IgYWZ0ZXIgY2FsbGluZyBgc2hha2VfcGFnZSgpYC4gTm93LCBpdOKAmXMgc2hvcnQtY2lyY3VpdGluZyBhbmQgcmV0dXJuaW5nIGAtRU5PVFJFQ09WRVJBQkxFYC4gVGhpcyBpcyBhICpmdW5jdGlvbmFsKiBjaGFuZ2UgaW4gYG1lbW9yeV9mYWlsdXJlKClgLiBUaGlzIHJlYWxseSBpcyBhIGNoYW5nZSBpbiB0aGUgaW50ZW5kZWQgYmVoYXZpb3IsIGF0IGxlYXN0IHRvIG1lLgoKT2theSwgaXMgdGhpcyBmdXp6YWJsZT8gQWJzb2x1dGVseS4gU2VlbXMgbGlrZSBhIGdvb2QgdGFyZ2V0LiBJIHNob3VsZCByZWFsbHkgZm9jdXMgb24gYG1lbW9yeV9mYWlsdXJlYCwgYGdldF9hbnlfcGFnZWAsIGFuZCBgaXNfa2VybmVsX293bmVkX3BhZ2VgIHdoZW4gSSBmdXp6LiBXYWl0IGEgc2Vjb25kLCBgbWVtb3J5X2ZhaWx1cmVgIGlzIGFjdHVhbGx5IHRoZSBtYWluIGVudHJ5IHBvaW50IHRvIGl0IGFsbC4gSSBzaG91bGQgc2VlIGhvdyByZWFjaGFibGUgaXQgaXMsIGFuZCB5dXAsIGl0JiMzOTtzIGFjY2Vzc2libGUgdGhyb3VnaCBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAgb3IgYGhhcmRfb2ZmbGluZV9wYWdlYC4gTm93IEkgc2hvdWxkIGp1c3QgbG9vayBpbnRvIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNQURWX0hXUE9JU09OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYz0xNDkzPXN0YXRpYyBib29sIGlzX21lbW9yeV9mYWlsdXJlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNDk1LVx0c3dpdGNoIChtYWR2X2JlaGF2aW9yLVx1MDAzZWJlaGF2aW9yKSB7XG5tbS9tYWR2aXNlLmM6MTQ5NjpcdGNhc2UgTUFEVl9IV1BPSVNPTjpcbm1tL21hZHZpc2UuYy0xNDk3LVx0Y2FzZSBNQURWX1NPRlRfT0ZGTElORTpcbi0tXG5tbS9tYWR2aXNlLmM9MTUxOT1tYWR2aXNlX2JlaGF2aW9yX3ZhbGlkKGludCBiZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTU1Mi1cdGNhc2UgTUFEVl9TT0ZUX09GRkxJTkU6XG5tbS9tYWR2aXNlLmM6MTU1MzpcdGNhc2UgTUFEVl9IV1BPSVNPTjpcbm1tL21hZHZpc2UuYy0xNTU0LSNlbmRpZlxuLS1cbm1tL21hZHZpc2UuYz0xODg4PXN0YXRpYyBpbnQgbWFkdmlzZV9kb19iZWhhdmlvcih1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuX2luLFxuLS1cbm1tL21hZHZpc2UuYy0xOTQ0LSAqICBNQURWX0tFRVBPTkZPUksgLSB1bmRvIHRoZSBlZmZlY3Qgb2YgTUFEVl9XSVBFT05GT1JLXG5tbS9tYWR2aXNlLmM6MTk0NTogKiAgTUFEVl9IV1BPSVNPTiAtIHRyaWdnZXIgbWVtb3J5IGVycm9yIGhhbmRsZXIgYXMgaWYgdGhlIGdpdmVuIG1lbW9yeSByYW5nZVxubW0vbWFkdmlzZS5jLTE5NDYtICpcdFx0d2VyZSBjb3JydXB0ZWQgYnkgdW5yZWNvdmVyYWJsZSBoYXJkd2FyZSBtZW1vcnkgZmFpbHVyZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDI1NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYE1BRFZfSFdQT0lTT05gIGFuZCBpdHMgSW1wbGljYXRpb25zKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYE1BRFZfSFdQT0lTT05gIGlzIHN1cHBvcnRlZCwgdGhhdCYjMzk7cyBnb29kLiBCdXQgd2FpdCBhIG1pbnV0ZSwgSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIG9ubHkgb3BlcmF0ZXMgb24gdXNlci1tYXBwZWQgcGFnZXMuIFRoaXMgbWVhbnMgSSBjYW4mIzM5O3QganVzdCB0aHJvdyBpdCBhdCBhbnl0aGluZy4gTm93LCBJIG5lZWQgdG8gY2hlY2sgd2hhdCBgaXNfa2VybmVsX293bmVkX3BhZ2UoKWAgdXNlcyB0byBkZXRlcm1pbmUgYSBrZXJuZWwtb3duZWQgcGFnZS4gQWgsIGl0IHVzZXMgY2hlY2tzIGZvciBgUGFnZVJlc2VydmVkYCwgYFBhZ2VTbGFiYCwgYFBhZ2VUYWJsZWAsIGFuZCBgUGFnZUxhcmdlS21hbGxvY2AuCgpDYW4gYSB1c2VyIGFjdHVhbGx5ICptYXAqIGEgYFBhZ2VSZXNlcnZlZGAgcGFnZT8gSSBiZWxpZXZlIHRoZXkgY2FuLiBJJiMzOTttIHByZXR0eSBzdXJlIHRoYXQgaGFwcGVucyB0aHJvdWdoIHRoaW5ncyBsaWtlIGAvZGV2L21lbWAsIG9yIG1heWJlIGV2ZW4gc29tZSBkcml2ZXJzIHdpdGggc3BlY2lhbCBjYXBhYmlsaXRpZXMsIHJpZ2h0PyBCdXQgdGhlIG90aGVycywgbGlrZSBhIGBQYWdlU2xhYmAgb3IgYSBgUGFnZVRhYmxlYCwgdGhvc2UgYXJlIHVzdWFsbHkgb2ZmLWxpbWl0cyB0byB1c2VybGFuZC4KCkhvbGQgb24sIEkgYWxzbyBuZWVkIHRvIHRoaW5rIGFib3V0IGBoYXJkX29mZmxpbmVfcGFnZWAuIENhbiB0aGF0IGZ1bmN0aW9uIHRhcmdldCAqYW55KiBwaHlzaWNhbCBmcmFtZSBudW1iZXIgKFBGTiksIHJlZ2FyZGxlc3Mgb2Ygb3duZXJzaGlwPyBJIHRoaW5rIHNvLiBBbmQgSSByZW1lbWJlciB0aGF0IFN5emthbGxlciwgd2hpY2ggSSYjMzk7bSBkZWFsaW5nIHdpdGggaGVyZSwgaXQgcnVucyBhcyByb290IGluIGl0cyB0ZXN0aW5nIHZpcnR1YWwgbWFjaGluZXMuIFdhaXQsIGlzIHRoYXQgcmlnaHQ/IFllcywgdGhhdCYjMzk7cyByaWdodC4gU3l6a2FsbGVyICpkb2VzKiBoYXZlIHJvb3QgcHJpdmlsZWdlcy4gU28sIGNhbiBTeXprYWxsZXIgdGhlbiB3cml0ZSB0byBgL3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvaGFyZF9vZmZsaW5lX3BhZ2VgIHRvIHRyaWdnZXIgdGhpcz8gSSBuZWVkIHRvIHZlcmlmeSBpZiBgaGFyZF9vZmZsaW5lX3BhZ2VgIGlzIGV2ZW4gZW5hYmxlZC4gVGhhdCYjMzk7cyB0aGUga2V5IHF1ZXN0aW9uIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjM6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGFyZF9vZmZsaW5lX3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jhc2UvbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL21lbW9yeS5jPTYwND1zdGF0aWMgc3NpemVfdCBzb2Z0X29mZmxpbmVfcGFnZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTYxOS0vKiBGb3JjaWJseSBvZmZsaW5lIGEgcGFnZSwgaW5jbHVkaW5nIGtpbGxpbmcgcHJvY2Vzc2VzLiAqL1xuZHJpdmVycy9iYXNlL21lbW9yeS5jOjYyMDpzdGF0aWMgc3NpemVfdCBoYXJkX29mZmxpbmVfcGFnZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtNjIxLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz02Mzc9c3RhdGljIERFVklDRV9BVFRSX1dPKHNvZnRfb2ZmbGluZV9wYWdlKTtcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzo2Mzg6c3RhdGljIERFVklDRV9BVFRSX1dPKGhhcmRfb2ZmbGluZV9wYWdlKTtcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy02MzktI2VuZGlmXG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jPTkxMT1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbWVtb3J5X3Jvb3RfYXR0cnNbXSA9IHtcbi0tXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtOTE3LVx0XHUwMDI2ZGV2X2F0dHJfc29mdF9vZmZsaW5lX3BhZ2UuYXR0cixcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzo5MTg6XHRcdTAwMjZkZXZfYXR0cl9oYXJkX29mZmxpbmVfcGFnZS5hdHRyLFxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTkxOS0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjM6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxMTEKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGlmIEkmIzM5O20gdGhlIG9uZSBoYXZpbmcgdGhlc2UgdGhvdWdodHMsIHRhcmdldGluZyBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBNZW1vcnkgRmFpbHVyZSBJbnZlc3RpZ2F0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUsIHRoZSBjb250ZXh0IHBvaW50cyB0b3dhcmRzIHNvbWV0aGluZyByZWxhdGVkIHRvIGtlcm5lbCBtZW1vcnkgZmFpbHVyZS4gTXkgaW5pdGlhbCBodW5jaCwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIHRoYXQgdGhlIHJlbGV2YW50IGNvZGUgc2hvdWxkIGJlIGluIHRoZSBgZHJpdmVycy9iYXNlL2AgZGlyZWN0b3J5LCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbWVtb3J5LmNgIGZpbGUuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nLiBOb3csIHRoZSBrZXkgaXMgd2hldGhlciBvciBub3QgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGdhdGVkIGJlaGluZCBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIHRoaXMgaXMgY29tcGlsZWQgdW5kZXIgYENPTkZJR19NRU1PUllfRkFJTFVSRWAuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0IGxvb2tpbmcsIGZvciB0aGUgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMsIHRvIHNlZSBob3cgdGhhdCYjMzk7cyBoYW5kbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoYXJkX29mZmxpbmVfcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmFzZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL21lbW9yeS5jPTYwND1zdGF0aWMgc3NpemVfdCBzb2Z0X29mZmxpbmVfcGFnZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTYxOS0vKiBGb3JjaWJseSBvZmZsaW5lIGEgcGFnZSwgaW5jbHVkaW5nIGtpbGxpbmcgcHJvY2Vzc2VzLiAqL1xuZHJpdmVycy9iYXNlL21lbW9yeS5jOjYyMDpzdGF0aWMgc3NpemVfdCBoYXJkX29mZmxpbmVfcGFnZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtNjIxLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz02Mzc9c3RhdGljIERFVklDRV9BVFRSX1dPKHNvZnRfb2ZmbGluZV9wYWdlKTtcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzo2Mzg6c3RhdGljIERFVklDRV9BVFRSX1dPKGhhcmRfb2ZmbGluZV9wYWdlKTtcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy02MzktI2VuZGlmXG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jPTkxMT1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbWVtb3J5X3Jvb3RfYXR0cnNbXSA9IHtcbi0tXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtOTE3LVx0XHUwMDI2ZGV2X2F0dHJfc29mdF9vZmZsaW5lX3BhZ2UuYXR0cixcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzo5MTg6XHRcdTAwMjZkZXZfYXR0cl9oYXJkX29mZmxpbmVfcGFnZS5hdHRyLFxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTkxOS0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjM6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2MTIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24qKgoKQWxyaWdodCwgbXkgZmlyc3QgaW5zdGluY3QgaGVyZSBpcyB0byB6ZXJvIGluIG9uIHRoYXQgYCNpZmRlZmAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IG9mIHRoaXMgY29kZSBibG9jayBpbW1lZGlhdGVseS4gSSYjMzk7bSBsb29raW5nIGJleW9uZCBqdXN0IHRoZSBjb2RlIHNuaXBwZXQgaXRzZWxmIGFuZCB0aGlua2luZyBhYm91dCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3IgcGxhdGZvcm0tc3BlY2lmaWMgZGVmaW5pdGlvbnMgYXJlIGluZmx1ZW5jaW5nIGl0cyBpbmNsdXNpb24gb3IgZXhjbHVzaW9uLiBUaGlzIGlzIGNsYXNzaWMgZGVidWdnaW5nIGFuZCBtYWludGVuYW5jZSwgYWZ0ZXIgYWxsLiBJJiMzOTttIG1lbnRhbGx5IHBhcnNpbmcgdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLCBxdWlja2x5IGFzc2Vzc2luZyB3aGF0IGVudmlyb25tZW50IHZhcmlhYmxlcyBvciBidWlsZCBmbGFncyBhcmUgcHJvYmFibHkgc2V0IHRvIGNvbnRyb2wgaXRzIGJlaGF2aW9yLiBBcmUgd2UgZGVhbGluZyB3aXRoIGEgZGVidWdnaW5nIGZlYXR1cmUsIGEgcGxhdGZvcm0tc3BlY2lmaWMgb3B0aW1pemF0aW9uLCBvciBwZXJoYXBzIGEgZmVhdHVyZSBmbGFnIHRpZWQgdG8gYSBwYWlkIHZlcnNpb24/IEtub3dpbmcgdGhlIHByZXByb2Nlc3NvciBzeW1ib2wgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29kZSYjMzk7cyB1bHRpbWF0ZSBmdW5jdGlvbmFsaXR5IGluIGEgZ2l2ZW4gYnVpbGQgY29uZmlndXJhdGlvbi4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBpZmRlZiB3aWxsIGFsbG93IG1lIHRvIGFzc2VzcyB0aGUgcmFtaWZpY2F0aW9ucyBvZiB0aGlzIGNvZGUgYmxvY2sgdG8gbXkgY3VycmVudCB3b3JrLiBJIGFtIGFzc2Vzc2luZyB0aGUgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjb25kaXRpb25hbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjM6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jhc2UvbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYxMDpcdFx0aWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKVxuIDYxMTpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuIDYxMjpcdFx0aWYgKGtzdHJ0b3VsbChidWYsIDAsIFx1MDAyNnBmbikgXHUwMDNjIDApXG4gNjEzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDYxNDpcdFx0cGZuIFx1MDAzZVx1MDAzZT0gUEFHRV9TSElGVDtcbiA2MTU6XHRcdHJldCA9IHNvZnRfb2ZmbGluZV9wYWdlKHBmbiwgMCk7XG4gNjE2Olx0XHRyZXR1cm4gcmV0ID09IDAgPyBjb3VudCA6IHJldDtcbiA2MTc6XHR9XG4gNjE4Olx0XG4gNjE5Olx0LyogRm9yY2libHkgb2ZmbGluZSBhIHBhZ2UsIGluY2x1ZGluZyBraWxsaW5nIHByb2Nlc3Nlcy4gKi9cbiA2MjA6XHRzdGF0aWMgc3NpemVfdCBoYXJkX29mZmxpbmVfcGFnZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gNjIxOlx0XHRcdFx0XHQgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4gNjIyOlx0XHRcdFx0XHQgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4gNjIzOlx0e1xuIDYyNDpcdFx0aW50IHJldDtcbiA2MjU6XHRcdHU2NCBwZm47XG4gNjI2Olx0XHRpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpXG4gNjI3Olx0XHRcdHJldHVybiAtRVBFUk07XG4gNjI4Olx0XHRpZiAoa3N0cnRvdWxsKGJ1ZiwgMCwgXHUwMDI2cGZuKSBcdTAwM2MgMClcbiA2Mjk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNjMwOlx0XHRwZm4gXHUwMDNlXHUwMDNlPSBQQUdFX1NISUZUO1xuIDYzMTpcdFx0cmV0ID0gbWVtb3J5X2ZhaWx1cmUocGZuLCBNRl9TV19TSU1VTEFURUQpO1xuIDYzMjpcdFx0aWYgKHJldCA9PSAtRU9QTk9UU1VQUClcbiA2MzM6XHRcdFx0cmV0ID0gMDtcbiA2MzQ6XHRcdHJldHVybiByZXQgPyByZXQgOiBjb3VudDtcbiA2MzU6XHR9XG4gNjM2Olx0XG4gNjM3Olx0c3RhdGljIERFVklDRV9BVFRSX1dPKHNvZnRfb2ZmbGluZV9wYWdlKTtcbiA2Mzg6XHRzdGF0aWMgREVWSUNFX0FUVFJfV08oaGFyZF9vZmZsaW5lX3BhZ2UpO1xuIDYzOTpcdCNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMzowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjMyNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gQmxvY2sqKgoKQWxyaWdodCwgSSYjMzk7bSBkaXZpbmcgaW4uIFRoZSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGNvZGUgc2VnbWVudCBhYm92ZSB0aGUgYCNpZmRlZmAgZGlyZWN0aXZlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgd2hhdCBjb25kaXRpb25zIGFyZSBiZWluZyBjaGVja2VkLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIG1lYXQgb2YgdGhlIGxvZ2ljIHVzdWFsbHkgbGllczsgdGhlIHByZXByb2Nlc3NvciYjMzk7cyBsb2dpYyBpcyBqdXN0IGEgZ3VhcmQgcmFpbCwgYSBzZXR1cCBmb3IgdGhlIGNvcmUgZXhlY3V0aW9uLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBpbXBsaWNhdGlvbnMgb2YgKndoeSogdGhpcyBibG9jayBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGluIHRoZSBmaXJzdCBwbGFjZS4gV2hhdOKAmXMgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcz8gV2hhdCBlbnZpcm9ubWVudGFsIGZhY3RvcnMsIGZlYXR1cmUgZmxhZ3MsIG9yIHBsYXRmb3JtIGRpZmZlcmVuY2VzIGFyZSBiZWluZyBhY2NvdW50ZWQgZm9yPyBVbmRlcnN0YW5kaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBlc3BlY2lhbGx5IHRoZSBwb3RlbnRpYWwgcHJlcHJvY2Vzc29yIGRlZmluaXRpb25zLCBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHdoYXQgc3BlY2lmaWMgYmxvY2sgb2YgY29kZSBpcyBiZWluZyBwcm90ZWN0ZWQgb3IgZW5hYmxlZC4gSSB3aWxsIGZvY3VzIG15IGVmZm9ydHMgb24gdW5kZXJzdGFuZGluZyB0aGUgYCNpZmRlZmAgc3RhdGVtZW50JiMzOTtzIHB1cnBvc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIzOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL21lbW9yeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1OTA6XHRvdXQ6XG4gNTkxOlx0XHR1bmxvY2tfZGV2aWNlX2hvdHBsdWcoKTtcbiA1OTI6XHRcdHJldHVybiByZXQ7XG4gNTkzOlx0fVxuIDU5NDpcdFxuIDU5NTpcdHN0YXRpYyBERVZJQ0VfQVRUUl9XTyhwcm9iZSk7XG4gNTk2Olx0I2VuZGlmXG4gNTk3Olx0XG4gNTk4Olx0I2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxuIDU5OTpcdC8qXG4gNjAwOlx0ICogU3VwcG9ydCBmb3Igb2ZmbGluaW5nIHBhZ2VzIG9mIG1lbW9yeVxuIDYwMTpcdCAqL1xuIDYwMjpcdFxuIDYwMzpcdC8qIFNvZnQgb2ZmbGluZSBhIHBhZ2UgKi9cbiA2MDQ6XHRzdGF0aWMgc3NpemVfdCBzb2Z0X29mZmxpbmVfcGFnZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4gNjA1Olx0XHRcdFx0XHQgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4gNjA2Olx0XHRcdFx0XHQgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4gNjA3Olx0e1xuIDYwODpcdFx0aW50IHJldDtcbiA2MDk6XHRcdHU2NCBwZm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIzOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2ODA2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3RyYXRlZ3kgZm9yIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIENoYW5nZXMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBjb2RlIHVuZGVyIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCYjMzk7cyBhbHRlcmluZyB0aGUgYmVoYXZpb3Igb2YgYG1lbW9yeV9mYWlsdXJlKClgIGFuZCBgZ2V0X2FueV9wYWdlKClgLCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vayBmb3IgZnV6emluZyBwb3RlbnRpYWwuIFdlIG5lZWQgdG8gc2VlIGlmIGl0JiMzOTtzIGdvdCBmdW5jdGlvbmFsIGNoYW5nZXMuCgpUaGUgYHBhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmVgIHN5c2N0bCBpcyBvZmYgYnkgZGVmYXVsdCwgYnV0IHRoZSBmdXp6ZXIgY2FuIGVhc2lseSBmbGlwIHRoYXQgc3dpdGNoIHRvIGV4cGxvcmUgYWxsIHBvc3NpYmlsaXRpZXMuIEV2ZW4gaWYgd2Uga2VlcCBpdCBvZmYsIHRoZXJlJiMzOTtzIGEgc2lnbmlmaWNhbnQgY2hhbmdlOiBgaXNfa2VybmVsX293bmVkX3BhZ2UoKWAgd2lsbCBhbHRlciB0aGUgcmV0dXJuIHZhbHVlIG9mIGBnZXRfYW55X3BhZ2UoKWAgdG8gYC1FTk9UUkVDT1ZFUkFCTEVgIGluc3RlYWQgb2YgYC1FSU9gLiBUaGF0LCBpbiB0dXJuLCBjaGFuZ2VzIGhvdyBgbWVtb3J5X2ZhaWx1cmUoKWAgYmVoYXZlczsgaXQgbm93IGNhdXNlcyBpdCB0byBpbW1lZGlhdGVseSByZXR1cm4gYGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfS0VSTkVMLCBNRl9JR05PUkVEKWAuIFRoaXMgaXMgY2xlYXJseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzbyB5ZXMsIHdlIHNob3VsZCBkZWZpbml0ZWx5IGZ1enogdGhpcy4KCk5vdywgd2hhdCBhcmUgdGhlIGtleSBzeW1ib2xzIHRvIHRhcmdldD8gSSYjMzk7bSB0aGlua2luZyBgbWVtb3J5X2ZhaWx1cmVgLCBgZ2V0X2FueV9wYWdlYCwgYGlzX2tlcm5lbF9vd25lZF9wYWdlYCwgYW5kIGBwYW5pY19vbl91bnJlY292ZXJhYmxlX21mYC4gQnV0IGhvbGQgb24sIGBpc19rZXJuZWxfb3duZWRfcGFnZWAgYW5kIGBwYW5pY19vbl91bnJlY292ZXJhYmxlX21mYCBhcmUgbWFya2VkIGFzIHN0YXRpYyBpbmxpbmUgb3Igc3RhdGljIGZ1bmN0aW9ucy4gVGhleSYjMzk7cmUgbGlrZWx5IGlubGluZWQsIHNvIHRoYXQgYWZmZWN0cyB0aGVpciB1c2VmdWxuZXNzIGFzIGRpcmVjdCBmdXp6IHRhcmdldHMuIFNvLCBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgZ2V0X2FueV9wYWdlYCByZW1haW4gdGhlIHByaW1hcnkgZm9jdXMsIGFuZCBgYWN0aW9uX3Jlc3VsdGAgaXMgYWxzbyB3b3J0aCBrZWVwaW5nIGluIG1pbmQsIHNpbmNlIGl0JiMzOTtzIHRoZSByZXR1cm4gb2YgYSBjcml0aWNhbCBmdW5jdGlvbi4KCkFzIGZvciBjb25maWd1cmF0aW9ucywgYE1FTU9SWV9GQUlMVVJFYCBpcyB0aGUgb2J2aW91cyBvbmUsIGJ1dCB3YWl0LCBgTUVNT1JZX0ZBSUxVUkVgICpkZXBlbmRzKiBvbiBgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRWAuIFNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGFsc28gYWNjb3VudCBmb3IgYEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVgIGluIG91ciB0ZXN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMzowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9LY29uZmlnPTI9Y29uZmlnIEFSTTY0XG4tLVxuYXJjaC9hcm02NC9LY29uZmlnLTczLVx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXG5hcmNoL2FybTY0L0tjb25maWc6NzQ6XHRzZWxlY3QgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxuYXJjaC9hcm02NC9LY29uZmlnLTc1LVx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfU0hBRE9XX0NBTExfU1RBQ0sgaWYgQ0NfSEFWRV9TSEFET1dfQ0FMTF9TVEFDS1xuLS1cbmFyY2gvcGFyaXNjL0tjb25maWc9Mj1jb25maWcgUEFSSVNDXG4tLVxuYXJjaC9wYXJpc2MvS2NvbmZpZy0yMi1cdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGUyBpZiBQQTIwXG5hcmNoL3BhcmlzYy9LY29uZmlnOjIzOlx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcbmFyY2gvcGFyaXNjL0tjb25maWctMjQtXHRzZWxlY3QgQVJDSF9TVEFDS1dBTEtcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz02MjQ9Y29uZmlnIFBQQzY0X1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXG4tLVxuYXJjaC9wb3dlcnBjL0tjb25maWctNjI3LVx0ZGVmYXVsdCBcJiMzNDt5XCYjMzQ7IGlmIFBQQ19QT1dFUk5WXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzo2Mjg6XHRzZWxlY3QgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxuYXJjaC9wb3dlcnBjL0tjb25maWctNjI5LVxuLS1cbmFyY2gveDg2L0tjb25maWc9NzYyPWNvbmZpZyBYODZfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTc2OC1cdGRlcGVuZHMgb24gWDg2XzY0IHx8ICFTUEFSU0VNRU1cbmFyY2gveDg2L0tjb25maWc6NzY5Olx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcbmFyY2gveDg2L0tjb25maWctNzcwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMzowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzk3MQoJCQkJCQkJb3V0cHV0OiAxODkKCQkJCQkJCXRob3VnaHRzOiAxMTAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgRmFpbHVyZSBIYW5kbGluZyBhbmQgUmVsYXRlZCBDb25maWd1cmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIGVuYWJsaW5nIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBgTUVNT1JZX0ZBSUxVUkVgIG1lY2hhbmlzbS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IGFsbCByZWxldmFudCBjb25maWd1cmF0aW9ucy4gSSBzZWUgdGhhdCBgTUVNT1JZX0ZBSUxVUkVgIGlzIHRoZSBwcmltYXJ5IG9uZSwgYW5kIEkmIzM5O20gYWxzbyBjb25zaWRlcmluZyBgSFdQT0lTT05fSU5KRUNUYC4gVGhlIGxhdHRlciBzZWVtcyBpbnRlcmVzdGluZyBmb3IgZnV6emluZywgcG9zc2libHkgZW5hYmxpbmcgdGhlIGluamVjdGlvbiBvZiBtZW1vcnkgZmFpbHVyZXMuIEkga25vdyBpdCBwcm92aWRlcyBgL3N5cy9rZXJuZWwvZGVidWcvaHdwb2lzb24vY29ycnVwdC1wZm5gIGFuZCBgdW5wb2lzb24tcGZuYCwgYW5kIHRoZSBzZWxmdGVzdHMgdXNlIGB1bnBvaXNvbi1wZm5gLCB3aGljaCBjb25maXJtcyBpdHMgcmVsZXZhbmNlLgoKSSYjMzk7bSBjaGVja2luZyBpZiBzeXprYWxsZXIgdXRpbGl6ZXMgYEhXUE9JU09OX0lOSkVDVGAuIEl0IGFwcGVhcnMgdGhhdCBzeXprYWxsZXIgdXNlcyBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAgYW5kIGAvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9oYXJkX29mZmxpbmVfcGFnZWAsIHNvIGBIV1BPSVNPTl9JTkpFQ1RgIGlzIGRlZmluaXRlbHkgcmVsYXRlZCBhbmQgd29ydGggZW5hYmxpbmcgZm9yIGVmZmVjdGl2ZSB0ZXN0aW5nIGFuZCBtZW1vcnkgZXJyb3IgaW5qZWN0aW9uLiBUaGVyZWZvcmUsIEkmIzM5O2xsIGluY2x1ZGUgYm90aCBgTUVNT1JZX0ZBSUxVUkVgIGFuZCBgSFdQT0lTT05fSU5KRUNUYCBpbiBteSBjb25maWd1cmF0aW9uLgoKTmV4dCwgSSYjMzk7bGwgZXhhbWluZSB0aGUgY29kZSBjaGFuZ2VzIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgZnVuY3Rpb25zIGRpcmVjdGx5IGludm9sdmVkIGluIHRoaXMgcHJvY2Vzcywgc3BlY2lmaWNhbGx5IGBtZW1vcnlfZmFpbHVyZWAsIGBnZXRfYW55X3BhZ2VgLCBgaXNfa2VybmVsX293bmVkX3BhZ2VgLCBgcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZmAsIGFuZCBgYWN0aW9uX3Jlc3VsdGAuIEkmIzM5O20gbm90aW5nIHRoYXQgYGlzX2tlcm5lbF9vd25lZF9wYWdlYCBhbmQgYHBhbmljX29uX3VucmVjb3ZlcmFibGVfbWZgIGFyZSBzdGF0aWMgYW5kIHBvdGVudGlhbGx5IGlubGluZWQsIHdoaWNoIG1pZ2h0IGFmZmVjdCB0aGVpciBzeW1ib2wgYXZhaWxhYmlsaXR5LgoKTm93LCBJJiMzOTttIHZlcmlmeWluZyB0aGUgZXhwb3J0IHN0YXR1cyBvZiB0aGUga2V5IGZ1bmN0aW9ucy4gSSBzZWUgdGhhdCBgbWVtb3J5X2ZhaWx1cmVgIGlzIGV4cG9ydGVkIHdpdGggYEVYUE9SVF9TWU1CT0xfR1BMKG1lbW9yeV9mYWlsdXJlKWAsIHNvIGl0JiMzOTtzIGRpcmVjdGx5IGFjY2Vzc2libGUuIGBnZXRfYW55X3BhZ2VgIGFuZCBgYWN0aW9uX3Jlc3VsdGAgYXJlIHN0YXRpYyB3aXRoaW4gdGhlIGZpbGUsIG1ha2luZyB0aGVpciBkaXJlY3QgdXNlIG91dHNpZGUgdGhpcyBjb250ZXh0IHVubGlrZWx5LCBidXQgSSYjMzk7bSBwcmltYXJpbHkgaW50ZXJlc3RlZCBpbiB0aGVpciBpbnRlcm5hbCBsb2dpYy4KCkZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGUgbW9kaWZpY2F0aW9ucyBJJiMzOTt2ZSByZWFkIG1vZGlmeSB0aGUgY29yZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZyBsb2dpYy4gVGhleSBzaG9ydC1jaXJjdWl0IGVycm9yIHByb2Nlc3NpbmcgZm9yIGtlcm5lbC1vd25lZCBwYWdlcyAoc3VjaCBhcyB0aG9zZSB1c2VkIGJ5IHRoZSBzbGFiIGFsbG9jYXRvciwgcGFnZSB0YWJsZXMsIG9yIHJlc2VydmVkIHBhZ2VzKS4gQSBuZXcgc3lzY3RsIGlzIGFsc28gaW50cm9kdWNlZCB0byB0cmlnZ2VyIGEgcGFuaWMgdXBvbiBlbmNvdW50ZXJpbmcgdW5yZWNvdmVyYWJsZSBlcnJvcnMgd2l0aCB0aGVzZSBrZXJuZWwtb3duZWQgcGFnZXMuIFRoaXMgbWVjaGFuaXNtIGlzIGNsZWFybHkgbGlua2VkIHRvIGhhcmR3YXJlIGVycm9yIGluamVjdGlvbiBtZWNoYW5pc21zIHN1Y2ggYXMgYC9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2hhcmRfb2ZmbGluZV9wYWdlYCBvciBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAuCgpUbyByZWl0ZXJhdGUsIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgSFdQT0lTT05fSU5KRUNUYCBpcyBhIG5lY2Vzc2l0eS4gSXQgaXMgYSBtb2R1bGUgd2hpY2ggcHJvdmlkZXMgZGVidWdmcyBpbnRlcmZhY2VzLiBTeXprYWxsZXIgY2FuIHV0aWxpemUgaXQuIFRodXMsIGl0IGlzIGRlc2lyYWJsZSB0byBoYXZlIGl0IGVuYWJsZWQuCgpMb29raW5nIGZvciBvdGhlciBkZXBlbmRlbmNpZXMsIEkgY2FuIHNlZSB0aGF0IGBERUJVR19LRVJORUxgIGFuZCBgUFJPQ19GU2AgYXJlIGRlcGVuZGVuY2llcyBmb3IgYEhXUE9JU09OX0lOSkVDVGAuIFRoZXkmIzM5O3JlIGxpa2VseSBzdGFuZGFyZCBhbmQgZG9uJiMzOTt0IHJlcXVpcmUgc3BlY2lmaWMgY29uc2lkZXJhdGlvbi4gYE1NVWAgaXMgYSBkZXBlbmRlbmN5IGZvciBgTUVNT1JZX0ZBSUxVUkVgLCB3aGljaCBpcyBhbHNvIHN0YW5kYXJkLgoKQmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlIGFwcHJvYWNoIGFuZCB0aGVzZSBjb25maWd1cmF0aW9ucyBhcmUgdGhlIG1vc3QgaW1wb3J0YW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMzowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNT1JZX0ZBSUxVUkUmIzM0OywKICAgICYjMzQ7SFdQT0lTT05fSU5KRUNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtb3J5X2ZhaWx1cmUmIzM0OywKICAgICYjMzQ7Z2V0X2FueV9wYWdlJiMzNDssCiAgICAmIzM0O2FjdGlvbl9yZXN1bHQmIzM0OywKICAgICYjMzQ7cGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZiYjMzQ7LAogICAgJiMzNDtpc19rZXJuZWxfb3duZWRfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZyBsb2dpYyAoYG1lbW9yeV9mYWlsdXJlYCwgYGdldF9hbnlfcGFnZWApIHRvIGV4cGxpY2l0bHkgaWRlbnRpZnkgYW5kIHNob3J0LWNpcmN1aXQgb24ga2VybmVsLW93bmVkIHBhZ2VzIChzbGFiLCBwYWdlIHRhYmxlcywgcmVzZXJ2ZWQsIGxhcmdlIGttYWxsb2MpLiBJdCBhbHNvIGludHJvZHVjZXMgYSBuZXcgc3lzY3RsIHRvIHBhbmljIG9uIHN1Y2ggdW5yZWNvdmVyYWJsZSBlcnJvcnMuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBoYXJkd2FyZSBlcnJvciBpbmplY3Rpb24gaW50ZXJmYWNlcyAoZS5nLiwgYC9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2hhcmRfb2ZmbGluZV9wYWdlYCBvciBgbWFkdmlzZShNQURWX0hXUE9JU09OKWApLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICAgJiMzNDtIV1BPSVNPTl9JTkpFQ1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1vcnlfZmFpbHVyZSYjMzQ7LAogICAgJiMzNDtnZXRfYW55X3BhZ2UmIzM0OywKICAgICYjMzQ7YWN0aW9uX3Jlc3VsdCYjMzQ7LAogICAgJiMzNDtwYW5pY19vbl91bnJlY292ZXJhYmxlX21mJiMzNDssCiAgICAmIzM0O2lzX2tlcm5lbF9vd25lZF9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nIGxvZ2ljIChgbWVtb3J5X2ZhaWx1cmVgLCBgZ2V0X2FueV9wYWdlYCkgdG8gZXhwbGljaXRseSBpZGVudGlmeSBhbmQgc2hvcnQtY2lyY3VpdCBvbiBrZXJuZWwtb3duZWQgcGFnZXMgKHNsYWIsIHBhZ2UgdGFibGVzLCByZXNlcnZlZCwgbGFyZ2Uga21hbGxvYykuIEl0IGFsc28gaW50cm9kdWNlcyBhIG5ldyBzeXNjdGwgdG8gcGFuaWMgb24gc3VjaCB1bnJlY292ZXJhYmxlIGVycm9ycy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIGhhcmR3YXJlIGVycm9yIGluamVjdGlvbiBpbnRlcmZhY2VzIChlLmcuLCBgL3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvaGFyZF9vZmZsaW5lX3BhZ2VgIG9yIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMzowNToyMS4yODIwODA2MjRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDc0MDYzNDI1ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIkhXUE9JU09OX0lOSkVDVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbW9yeV9mYWlsdXJlXCIsXG4gICAgXCJnZXRfYW55X3BhZ2VcIixcbiAgICBcImFjdGlvbl9yZXN1bHRcIixcbiAgICBcInBhbmljX29uX3VucmVjb3ZlcmFibGVfbWZcIixcbiAgICBcImlzX2tlcm5lbF9vd25lZF9wYWdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgbG9naWMgKGBtZW1vcnlfZmFpbHVyZWAsIGBnZXRfYW55X3BhZ2VgKSB0byBleHBsaWNpdGx5IGlkZW50aWZ5IGFuZCBzaG9ydC1jaXJjdWl0IG9uIGtlcm5lbC1vd25lZCBwYWdlcyAoc2xhYiwgcGFnZSB0YWJsZXMsIHJlc2VydmVkLCBsYXJnZSBrbWFsbG9jKS4gSXQgYWxzbyBpbnRyb2R1Y2VzIGEgbmV3IHN5c2N0bCB0byBwYW5pYyBvbiBzdWNoIHVucmVjb3ZlcmFibGUgZXJyb3JzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgaGFyZHdhcmUgZXJyb3IgaW5qZWN0aW9uIGludGVyZmFjZXMgKGUuZy4sIGAvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9oYXJkX29mZmxpbmVfcGFnZWAgb3IgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjM6MDU6MjEuMjgyMDg0ODk1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTk4MzYyMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1ODE3NDIyNTljNDFiMmYxZDc3MTJhNDRiMGFiMDA4NjUwODUwNzUwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVuIDI2IDIzOjA1OjE5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdFxcbmluZGV4IGI5YjBjMjE4YmZiNDQwLi4yMmNjNTRjYWMzYjIxZCAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3RcXG5AQCAtNjcsNiArNjcsNyBAQCBDdXJyZW50bHksIHRoZXNlIGZpbGVzIGFyZSBpbiAvcHJvYy9zeXMvdm06XFxuIC0gcGFnZS1jbHVzdGVyXFxuIC0gcGFnZV9sb2NrX3VuZmFpcm5lc3NcXG4gLSBwYW5pY19vbl9vb21cXG4rLSBwYW5pY19vbl91bnJlY292ZXJhYmxlX21lbW9yeV9mYWlsdXJlXFxuIC0gcGVyY3B1X3BhZ2VsaXN0X2hpZ2hfZnJhY3Rpb25cXG4gLSBzdGF0X2ludGVydmFsXFxuIC0gc3RhdF9yZWZyZXNoXFxuQEAgLTkyNSw2ICs5MjYsODUgQEAgcGFuaWNfb25fb29tPTIra2R1bXAgZ2l2ZXMgeW91IHZlcnkgc3Ryb25nIHRvb2wgdG8gaW52ZXN0aWdhdGVcXG4gd2h5IG9vbSBoYXBwZW5zLiBZb3UgY2FuIGdldCBzbmFwc2hvdC5cXG4gXFxuIFxcbitwYW5pY19vbl91bnJlY292ZXJhYmxlX21lbW9yeV9mYWlsdXJlXFxuKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK1xcbitXaGVuIGEgaGFyZHdhcmUgbWVtb3J5IGVycm9yIChlLmcuIG11bHRpLWJpdCBFQ0MpIGhpdHMgYSBrZXJuZWwgcGFnZVxcbit0aGF0IGNhbm5vdCBiZSByZWNvdmVyZWQgYnkgdGhlIG1lbW9yeSBmYWlsdXJlIGhhbmRsZXIsIHRoZSBkZWZhdWx0XFxuK2JlaGF2aW91ciBpcyB0byBpZ25vcmUgdGhlIGVycm9yIGFuZCBjb250aW51ZSBvcGVyYXRpb24uICBUaGlzIGlzXFxuK2Rhbmdlcm91cyBiZWNhdXNlIHRoZSBjb3JydXB0ZWQgZGF0YSByZW1haW5zIGFjY2Vzc2libGUgdG8gdGhlIGtlcm5lbCxcXG4rcmlza2luZyBzaWxlbnQgZGF0YSBjb3JydXB0aW9uIG9yIGEgZGVsYXllZCBjcmFzaCB3aGVuIHRoZSBwb2lzb25lZFxcbittZW1vcnkgaXMgbmV4dCBhY2Nlc3NlZC5cXG4rXFxuK1doZW4gZW5hYmxlZCwgdGhpcyBzeXNjdGwgdHJpZ2dlcnMgYSBwYW5pYyBvbiBtZW1vcnkgZmFpbHVyZSBldmVudHNcXG4raGl0dGluZyBrZXJuZWwtb3duZWQgcGFnZXMgdGhhdCB0aGUgaGFuZGxlciBjYW5ub3QgcmVjb3ZlcjpcXG4rYGBQYWdlUmVzZXJ2ZWRgYCAoZmlybXdhcmUgcmVzZXJ2YXRpb25zLCBrZXJuZWwgaW1hZ2UsIHZEU08sIHplcm9cXG4rcGFnZSwgYW5kIHNpbWlsYXIgbWVtYmxvY2stcmVzZXJ2ZWQgcmVnaW9ucyksIGBgUGFnZVNsYWJgYCxcXG4rYGBQYWdlVGFibGVgYCwgYW5kIGBgUGFnZUxhcmdlS21hbGxvY2BgLiAgVGhlc2UgYXJlIG93bmVkIGJ5IHRoZVxcbitrZXJuZWwgYW5kIHRoZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGVyIGNhbm5vdCByZWxpYWJseSBldmljdCB0aGVpclxcbitjb250ZW50cy5cXG4rXFxuK090aGVyIHVucmVjb3ZlcmFibGUga2VybmVsLW93bmVkIHBvcHVsYXRpb25zICh2bWFsbG9jIGFsbG9jYXRpb25zLFxcbitrZXJuZWwgc3RhY2sgcGFnZXMsIC4uLikgYXJlIG5vdCBjdXJyZW50bHkgY292ZXJlZCBiZWNhdXNlIHRoZVxcbitoYW5kbGVyIGhhcyBubyBwYWdlLXR5cGUgc2lnbmFsIHRoYXQgZGlzdGluZ3Vpc2hlcyB0aGVtIGZyb20gYVxcbit1c2Vyc3BhY2UgZm9saW8gdGVtcG9yYXJpbHkgb2ZmIHRoZSBMUlUgZHVyaW5nIG1pZ3JhdGlvbiBvclxcbitjb21wYWN0aW9uLiAgU3VjaCBwYWdlcyBzdGlsbCBnbyB0aHJvdWdoIHRoZSBzdGFuZGFyZFxcbitNRl9NU0dfR0VUX0hXUE9JU09OIHBhdGg6IGBgUEdfaHdwb2lzb25gYCBpcyBzZXQgb24gdGhlbSBhbmQgYVxcbitkZWxheWVkIGNyYXNoIG9uIHRoZSBuZXh0IGFjY2VzcyByZW1haW5zIHBvc3NpYmxlLiAgQ292ZXJhZ2UgbWF5XFxuK2dyb3cgYXMgdGhlIGhhbmRsZXIgZ2FpbnMgc3Ryb25nZXIga2VybmVsLW93bmVyc2hpcCBzaWduYWxzLlxcbitcXG4rUmVjb3ZlcmFibGUgZmFpbHVyZSBwYXRocyBhcmUgYWxzbyBpbnRlbnRpb25hbGx5IGxlZnQgb3V0OiBpbi1mbGlnaHRcXG4rYnVkZHkgYWxsb2NhdGlvbnMgYW5kIG90aGVyIHRyYW5zaWVudCByYWNlcyB3aXRoIHRoZSBwYWdlIGFsbG9jYXRvclxcbitjYW4gcmVhY2ggdGhlIHNhbWUgZGlhZ25vc3RpYywgYW5kIHBhbmlja2luZyBvbiB0aGVtIHdvdWxkIHJpc2tcXG4ra2lsbGluZyB0aGUgYm94IGZvciBhIHBhZ2UgZGVzdGluZWQgZm9yIHVzZXJzcGFjZSB3aGVyZSB0aGUgc3RhbmRhcmRcXG4rU0lHQlVTIHJlY292ZXJ5IHBhdGggYXBwbGllcy4gIFBhZ2VzIHdob3NlIHN0YXRlIGNvdWxkIG5vdCBiZVxcbitjbGFzc2lmaWVkIGF0IGFsbCBhcmUgbm90IGNvdmVyZWQgZWl0aGVyLCBzaW5jZSBhbiB1bmtub3duIHN0YXRlIGlzXFxuK25vdCBhIHNvdW5kIGJhc2lzIGZvciBhIHBhbmljIGRlY2lzaW9uLlxcbitcXG4rRm9yIG1hbnkgZW52aXJvbm1lbnRzIGl0IGlzIHByZWZlcmFibGUgdG8gcGFuaWMgaW1tZWRpYXRlbHkgd2l0aCBhIGNsZWFuXFxuK2NyYXNoIGR1bXAgdGhhdCBjYXB0dXJlcyB0aGUgb3JpZ2luYWwgZXJyb3IgY29udGV4dCwgcmF0aGVyIHRoYW4gdG9cXG4rY29udGludWUgYW5kIGZhY2UgYSByYW5kb20gY3Jhc2ggbGF0ZXIgd2hvc2UgY2F1c2UgaXMgZGlmZmljdWx0IHRvXFxuK2RpYWdub3NlLlxcbitcXG4rVXNlIGNhc2VzXFxuKy0tLS0tLS0tLVxcbitcXG4rVGhpcyBvcHRpb24gaXMgbW9zdCB1c2VmdWwgaW4gZW52aXJvbm1lbnRzIHdoZXJlIHVuYXR0cmlidXRlZCBjcmFzaGVzXFxuK2FyZSBleHBlbnNpdmUgdG8gZGVidWcgb3Igd2hlcmUgZGF0YSBpbnRlZ3JpdHkgbXVzdCB0YWtlIHByZWNlZGVuY2VcXG4rb3ZlciBhdmFpbGFiaWxpdHk6XFxuK1xcbisqIExhcmdlIGZsZWV0cywgd2hlcmUgbXVsdGktYml0IEVDQyBlcnJvcnMgb24ga2VybmVsIHBhZ2VzIGFyZSBvYnNlcnZlZFxcbisgIHJlZ3VsYXJseSBhbmQgcG9zdC1tb3J0ZW0gYW5hbHlzaXMgb2YgYW4gdW5yZWxhdGVkIGRvd25zdHJlYW0gY3Jhc2hcXG4rICAob2Z0ZW4gc2Vjb25kcyB0byBtaW51dGVzIGFmdGVyIHRoZSBvcmlnaW5hbCBlcnJvcikgY29uc3VtZXNcXG4rICBzaWduaWZpY2FudCBlbmdpbmVlcmluZyBlZmZvcnQuXFxuK1xcbisqIFN5c3RlbXMgY29uZmlndXJlZCB3aXRoIGtkdW1wLCB3aGVyZSBwYW5pY2tpbmcgYXQgdGhlIG1vbWVudCBvZiB0aGVcXG4rICBoYXJkd2FyZSBlcnJvciBwcm9kdWNlcyBhIHZtY29yZSB0aGF0IHN0aWxsIGNvbnRhaW5zIHRoZSBmYXVsdGluZ1xcbisgIGFkZHJlc3MsIHRoZSBhZmZlY3RlZCBwYWdlIHN0YXRlLCBhbmQgdGhlIG9yaWdpbmF0aW5nIE1DRS9HSEVTXFxuKyAgcmVjb3JkIOKAlCBjb250ZXh0IHRoYXQgaXMgdHlwaWNhbGx5IGxvc3QgYnkgdGhlIHRpbWUgYSBkZWxheWVkIGNyYXNoXFxuKyAgb2NjdXJzLlxcbitcXG4rKiBIaWdoLWF2YWlsYWJpbGl0eSBjbHVzdGVycyB0aGF0IHJlbHkgb24gZmFzdCwgZGV0ZXJtaW5pc3RpYyBub2RlXFxuKyAgZmFpbHVyZSBmb3IgZmFpbG92ZXIsIGFuZCBwcmVmZXIgYW4gaW1tZWRpYXRlIHBhbmljIG92ZXIgc2lsZW50IGRhdGFcXG4rICBjb3JydXB0aW9uIHByb3BhZ2F0aW5nIHRvIHJlcGxpY2FzIG9yIHBlcnNpc3RlbnQgc3RvcmFnZS5cXG4rXFxuKyogS2VybmVsIGFuZCBwbGF0Zm9ybSBkZXZlbG9wZXJzIHJlcHJvZHVjaW5nIGh3cG9pc29uIGlzc3VlcyB3aXRoXFxuKyAgdG9vbHMgc3VjaCBhcyBgYG1jZS1pbmplY3RgYCBvciBlcnJvci1pbmplY3Rpb24gZGVidWdmcyBpbnRlcmZhY2VzLFxcbisgIHdoZXJlIHBhbmlja2luZyBvbiB0aGUgdW5yZWNvdmVyYWJsZSBwYXRoIG1ha2VzIHJlZ3Jlc3Npb25zXFxuKyAgaW1tZWRpYXRlbHkgdmlzaWJsZSBpbnN0ZWFkIG9mIHN1cmZhY2luZyBhcyBsYXRlciwgdW5yZWxhdGVkXFxuKyAgZmFpbHVyZXMuXFxuK1xcbis9ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbiswIFRyeSB0byBjb250aW51ZSBvcGVyYXRpb24gKGRlZmF1bHQpLlxcbisxIFBhbmljIGltbWVkaWF0ZWx5LiAgSWYgdGhlIGBgcGFuaWNgYCBzeXNjdGwgaXMgYWxzbyBub24temVybyB0aGVuIHRoZVxcbisgIG1hY2hpbmUgd2lsbCBiZSByZWJvb3RlZC5cXG4rPSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rXFxuK0V4YW1wbGU6OlxcbitcXG4rICAgICBlY2hvIDEgXFx1MDAzZSAvcHJvYy9zeXMvdm0vcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZVxcbitcXG4rXFxuIHBlcmNwdV9wYWdlbGlzdF9oaWdoX2ZyYWN0aW9uXFxuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuIFxcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbmluZGV4IDUxNTA4YTU1YzQwNTVlLi42MTExNjBjOThjNmY2NCAxMDA2NDRcXG4tLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jXFxuKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbkBAIC03NCw2ICs3NCw4IEBAIHN0YXRpYyBpbnQgc3lzY3RsX21lbW9yeV9mYWlsdXJlX3JlY292ZXJ5IF9fcmVhZF9tb3N0bHkgPSAxO1xcbiBcXG4gc3RhdGljIGludCBzeXNjdGxfZW5hYmxlX3NvZnRfb2ZmbGluZSBfX3JlYWRfbW9zdGx5ID0gMTtcXG4gXFxuK3N0YXRpYyBpbnQgc3lzY3RsX3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWYgX19yZWFkX21vc3RseTtcXG4rXFxuIGF0b21pY19sb25nX3QgbnVtX3BvaXNvbmVkX3BhZ2VzIF9fcmVhZF9tb3N0bHkgPSBBVE9NSUNfTE9OR19JTklUKDApO1xcbiBcXG4gc3RhdGljIGJvb2wgaHdfbWVtb3J5X2ZhaWx1cmUgX19yZWFkX21vc3RseSA9IGZhbHNlO1xcbkBAIC0xNTUsNiArMTU3LDE1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG1lbW9yeV9mYWlsdXJlX3RhYmxlW10gPSB7XFxuIFxcdFxcdC5wcm9jX2hhbmRsZXJcXHQ9IHByb2NfZG9pbnR2ZWNfbWlubWF4LFxcbiBcXHRcXHQuZXh0cmExXFx0XFx0PSBTWVNDVExfWkVSTyxcXG4gXFx0XFx0LmV4dHJhMlxcdFxcdD0gU1lTQ1RMX09ORSxcXG4rXFx0fSxcXG4rXFx0e1xcbitcXHRcXHQucHJvY25hbWVcXHQ9IFxcXCJwYW5pY19vbl91bnJlY292ZXJhYmxlX21lbW9yeV9mYWlsdXJlXFxcIixcXG4rXFx0XFx0LmRhdGFcXHRcXHQ9IFxcdTAwMjZzeXNjdGxfcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZixcXG4rXFx0XFx0Lm1heGxlblxcdFxcdD0gc2l6ZW9mKHN5c2N0bF9wYW5pY19vbl91bnJlY292ZXJhYmxlX21mKSxcXG4rXFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxuK1xcdFxcdC5wcm9jX2hhbmRsZXJcXHQ9IHByb2NfZG9pbnR2ZWNfbWlubWF4LFxcbitcXHRcXHQuZXh0cmExXFx0XFx0PSBTWVNDVExfWkVSTyxcXG4rXFx0XFx0LmV4dHJhMlxcdFxcdD0gU1lTQ1RMX09ORSxcXG4gXFx0fVxcbiB9O1xcbiBcXG5AQCAtOTgwLDE3ICs5OTEsNiBAQCBzdGF0aWMgYm9vbCBoYXNfZXh0cmFfcmVmY291bnQoc3RydWN0IHBhZ2Vfc3RhdGUgKnBzLCBzdHJ1Y3QgcGFnZSAqcCxcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbi0vKlxcbi0gKiBFcnJvciBoaXQga2VybmVsIHBhZ2UuXFxuLSAqIERvIG5vdGhpbmcsIHRyeSB0byBiZSBsdWNreSBhbmQgbm90IHRvdWNoIHRoaXMgaW5zdGVhZC4gRm9yIGEgZmV3IGNhc2VzIHdlXFxuLSAqIGNvdWxkIGJlIG1vcmUgc29waGlzdGljYXRlZC5cXG4tICovXFxuLXN0YXRpYyBpbnQgbWVfa2VybmVsKHN0cnVjdCBwYWdlX3N0YXRlICpwcywgc3RydWN0IHBhZ2UgKnApXFxuLXtcXG4tXFx0dW5sb2NrX3BhZ2UocCk7XFxuLVxcdHJldHVybiBNRl9JR05PUkVEO1xcbi19XFxuLVxcbiAvKlxcbiAgKiBQYWdlIGluIHVua25vd24gc3RhdGUuIERvIG5vdGhpbmcuXFxuICAqIFRoaXMgaXMgYSBjYXRjaC1hbGwgaW4gY2FzZSB3ZSBmYWlsIHRvIG1ha2Ugc2Vuc2Ugb2YgdGhlIHBhZ2Ugc3RhdGUuXFxuQEAgLTExOTksMTAgKzExOTksOCBAQCBzdGF0aWMgaW50IG1lX2h1Z2VfcGFnZShzdHJ1Y3QgcGFnZV9zdGF0ZSAqcHMsIHN0cnVjdCBwYWdlICpwKVxcbiAjZGVmaW5lIG1sb2NrXFx0XFx0KDFVTCBcXHUwMDNjXFx1MDAzYyBQR19tbG9ja2VkKVxcbiAjZGVmaW5lIGxydVxcdFxcdCgxVUwgXFx1MDAzY1xcdTAwM2MgUEdfbHJ1KVxcbiAjZGVmaW5lIGhlYWRcXHRcXHQoMVVMIFxcdTAwM2NcXHUwMDNjIFBHX2hlYWQpXFxuLSNkZWZpbmUgcmVzZXJ2ZWRcXHQoMVVMIFxcdTAwM2NcXHUwMDNjIFBHX3Jlc2VydmVkKVxcbiBcXG4gc3RhdGljIHN0cnVjdCBwYWdlX3N0YXRlIGVycm9yX3N0YXRlc1tdID0ge1xcbi1cXHR7IHJlc2VydmVkLFxcdHJlc2VydmVkLFxcdE1GX01TR19LRVJORUwsXFx0bWVfa2VybmVsIH0sXFxuIFxcdC8qXFxuIFxcdCAqIGZyZWUgcGFnZXMgYXJlIHNwZWNpYWxseSBkZXRlY3RlZCBvdXRzaWRlIHRoaXMgdGFibGU6XFxuIFxcdCAqIFBHX2J1ZGR5IHBhZ2VzIG9ubHkgbWFrZSBhIHNtYWxsIGZyYWN0aW9uIG9mIGFsbCBmcmVlIHBhZ2VzLlxcbkBAIC0xMjM0LDcgKzEyMzIsNiBAQCBzdGF0aWMgc3RydWN0IHBhZ2Vfc3RhdGUgZXJyb3Jfc3RhdGVzW10gPSB7XFxuICN1bmRlZiBtbG9ja1xcbiAjdW5kZWYgbHJ1XFxuICN1bmRlZiBoZWFkXFxuLSN1bmRlZiByZXNlcnZlZFxcbiBcXG4gc3RhdGljIHZvaWQgdXBkYXRlX3Blcl9ub2RlX21mX3N0YXRzKHVuc2lnbmVkIGxvbmcgcGZuLFxcbiBcXHRcXHRcXHRcXHQgICAgIGVudW0gbWZfcmVzdWx0IHJlc3VsdClcXG5AQCAtMTI2OSw2ICsxMjY2LDE1IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyh1bnNpZ25lZCBsb25nIHBmbixcXG4gXFx0KyttZl9zdGF0cy1cXHUwMDNldG90YWw7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIHBhbmljX29uX3VucmVjb3ZlcmFibGVfbWYoZW51bSBtZl9hY3Rpb25fcGFnZV90eXBlIHR5cGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIGVudW0gbWZfcmVzdWx0IHJlc3VsdClcXG4re1xcbitcXHRpZiAoIXN5c2N0bF9wYW5pY19vbl91bnJlY292ZXJhYmxlX21mKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRyZXR1cm4gdHlwZSA9PSBNRl9NU0dfS0VSTkVMIFxcdTAwMjZcXHUwMDI2IHJlc3VsdCA9PSBNRl9JR05PUkVEO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBcXFwiRGlydHkvQ2xlYW5cXFwiIGluZGljYXRpb24gaXMgbm90IDEwMCUgYWNjdXJhdGUgZHVlIHRvIHRoZSBwb3NzaWJpbGl0eSBvZlxcbiAgKiBzZXR0aW5nIFBHX2RpcnR5IG91dHNpZGUgcGFnZSBsb2NrLiBTZWUgYWxzbyBjb21tZW50IGFib3ZlIHNldF9wYWdlX2RpcnR5KCkuXFxuQEAgLTEyODYsNiArMTI5Miw5IEBAIHN0YXRpYyBpbnQgYWN0aW9uX3Jlc3VsdCh1bnNpZ25lZCBsb25nIHBmbiwgZW51bSBtZl9hY3Rpb25fcGFnZV90eXBlIHR5cGUsXFxuIFxcdHByX2VycihcXFwiJSNseDogcmVjb3ZlcnkgYWN0aW9uIGZvciAlczogJXNcXFxcblxcXCIsXFxuIFxcdFxcdHBmbiwgYWN0aW9uX3BhZ2VfdHlwZXNbdHlwZV0sIGFjdGlvbl9uYW1lW3Jlc3VsdF0pO1xcbiBcXG4rXFx0aWYgKHBhbmljX29uX3VucmVjb3ZlcmFibGVfbWYodHlwZSwgcmVzdWx0KSlcXG4rXFx0XFx0cGFuaWMoXFxcIk1lbW9yeSBmYWlsdXJlOiAlI2x4OiB1bnJlY292ZXJhYmxlIHBhZ2VcXFwiLCBwZm4pO1xcbitcXG4gXFx0cmV0dXJuIChyZXN1bHQgPT0gTUZfUkVDT1ZFUkVEIHx8IHJlc3VsdCA9PSBNRl9ERUxBWUVEKSA/IDAgOiAtRUJVU1k7XFxuIH1cXG4gXFxuQEAgLTEzMzksNiArMTM0OCwzNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgSFdQb2lzb25IYW5kbGFibGUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuIFxcdHJldHVybiBQYWdlTFJVKHBhZ2UpIHx8IGlzX2ZyZWVfYnVkZHlfcGFnZShwYWdlKTtcXG4gfVxcbiBcXG4rLypcXG4rICogUG9zaXRpdmUgaWRlbnRpZmljYXRpb24gb2YgcGFnZXMgdGhlIGh3cG9pc29uIGhhbmRsZXIgY2Fubm90IHJlY292ZXI6XFxuKyAqIHBhZ2VzIG93bmVkIGJ5IGtlcm5lbCBpbnRlcm5hbHMgd2l0aCBubyB1c2Vyc3BhY2UgbWFwcGluZyB0byB1bm1hcCwgbm9cXG4rICogZmlsZSBtYXBwaW5nIHRvIGludmFsaWRhdGUsIGFuZCBubyBtaWdyYXRpb24gdGFyZ2V0LlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBib29sIGlzX2tlcm5lbF9vd25lZF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxcbit7XFxuK1xcdHN0cnVjdCBwYWdlICpoZWFkO1xcbitcXHRib29sIGtlcm5lbF9vd25lZDtcXG4rXFxuK1xcdC8qIFBHX3Jlc2VydmVkIGlzIGEgcGVyLXBhZ2UgZmxhZywgbmV2ZXIgc2V0IG9uIGEgY29tcG91bmQgcGFnZS4gKi9cXG4rXFx0aWYgKFBhZ2VSZXNlcnZlZChwYWdlKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBQYWdlLXR5cGUgYml0cyBsaXZlIG9ubHkgb24gdGhlIGhlYWQgcGFnZSwgc28gcmVzb2x2ZSBhbnkgdGFpbFxcbitcXHQgKiBmaXJzdC4gIFRoZSBjaGVjayB0YWtlcyBubyByZWZjb3VudDsgcmVjaGVjayB0aGUgaGVhZCBhZnRlcndhcmRzXFxuK1xcdCAqIHNvIGEgY29uY3VycmVudCBzcGxpdCBvciBjb21wb3VuZCBmcmVlIGNhbm5vdCBsZWF2ZSB1cyB0cnVzdGluZ1xcbitcXHQgKiBhIHN0YWxlIHZpZXcuICBBIGZyZWUtXFx1MDAzZWFsbG9jLVxcdTAwM2VmcmVlIGluIHRoZSBzYW1lIHdpbmRvdyBpcyBzdGlsbFxcbitcXHQgKiBwb3NzaWJsZSBidXQgY2xvc2luZyBpdCB3b3VsZCByZXF1aXJlIHRha2luZyBhIHJlZmVyZW5jZSBoZXJlLlxcbitcXHQgKi9cXG4rcmV0cnk6XFxuK1xcdGhlYWQgPSBjb21wb3VuZF9oZWFkKHBhZ2UpO1xcbitcXHRrZXJuZWxfb3duZWQgPSBQYWdlU2xhYihoZWFkKSB8fCBQYWdlVGFibGUoaGVhZCkgfHxcXG4rXFx0XFx0ICAgICAgIFBhZ2VMYXJnZUttYWxsb2MoaGVhZCk7XFxuK1xcdGlmIChoZWFkICE9IGNvbXBvdW5kX2hlYWQocGFnZSkpXFxuK1xcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdHJldHVybiBrZXJuZWxfb3duZWQ7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgX19nZXRfaHdwb2lzb25fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBmbGFncylcXG4ge1xcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcXG5AQCAtMTM4NSw2ICsxNDI0LDE5IEBAIHN0YXRpYyBpbnQgZ2V0X2FueV9wYWdlKHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbiBcXHRpZiAoZmxhZ3MgXFx1MDAyNiBNRl9DT1VOVF9JTkNSRUFTRUQpXFxuIFxcdFxcdGNvdW50X2luY3JlYXNlZCA9IHRydWU7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBQYWdlIHR5cGVzIHdlIGtub3cgYXJlIGtlcm5lbC1vd25lZCBhbmQgY2Fubm90IGJlIHJlY292ZXJlZC5cXG4rXFx0ICogU2hvcnQtY2lyY3VpdCBiZWZvcmUgdGhlIHNoYWtlX3BhZ2UoKSAvIHJldHJ5IGxvb3AsIHdoaWNoXFxuK1xcdCAqIGNhbm5vdCB0dXJuIGFueSBvZiB0aGVzZSBpbnRvIHNvbWV0aGluZyBIV1BvaXNvbkhhbmRsYWJsZSgpLlxcbitcXHQgKiBEcm9wIHRoZSBjYWxsZXIncyByZWZlcmVuY2UgaWYgTUZfQ09VTlRfSU5DUkVBU0VEIHRvb2sgb25lLlxcbitcXHQgKi9cXG4rXFx0aWYgKGlzX2tlcm5lbF9vd25lZF9wYWdlKHApKSB7XFxuK1xcdFxcdGlmIChjb3VudF9pbmNyZWFzZWQpXFxuK1xcdFxcdFxcdHB1dF9wYWdlKHApO1xcbitcXHRcXHRyZXQgPSAtRU5PVFJFQ09WRVJBQkxFO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4gdHJ5X2FnYWluOlxcbiBcXHRpZiAoIWNvdW50X2luY3JlYXNlZCkge1xcbiBcXHRcXHRyZXQgPSBfX2dldF9od3BvaXNvbl9wYWdlKHAsIGZsYWdzKTtcXG5AQCAtMTQzMiw3ICsxNDg0LDcgQEAgc3RhdGljIGludCBnZXRfYW55X3BhZ2Uoc3RydWN0IHBhZ2UgKnAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuIFxcdFxcdHJldCA9IC1FSU87XFxuIFxcdH1cXG4gb3V0Olxcbi1cXHRpZiAocmV0ID09IC1FSU8pXFxuK1xcdGlmIChyZXQgPT0gLUVJTyB8fCByZXQgPT0gLUVOT1RSRUNPVkVSQUJMRSlcXG4gXFx0XFx0cHJfZXJyKFxcXCIlI2x4OiB1bmhhbmRsYWJsZSBwYWdlLlxcXFxuXFxcIiwgcGFnZV90b19wZm4ocCkpO1xcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG5AQCAtMTQ4OSw3ICsxNTQxLDEwIEBAIHN0YXRpYyBpbnQgX19nZXRfdW5wb2lzb25fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4gICogICAgICAgICAtRUlPIGZvciBwYWdlcyBvbiB3aGljaCB3ZSBjYW4gbm90IGhhbmRsZSBtZW1vcnkgZXJyb3JzLFxcbiAgKiAgICAgICAgIC1FQlVTWSB3aGVuIGdldF9od3BvaXNvbl9wYWdlKCkgaGFzIHJhY2VkIHdpdGggcGFnZSBsaWZlY3ljbGVcXG4gICogICAgICAgICBvcGVyYXRpb25zIGxpa2UgYWxsb2NhdGlvbiBhbmQgZnJlZSxcXG4tICogICAgICAgICAtRUhXUE9JU09OIHdoZW4gdGhlIHBhZ2UgaXMgaHdwb2lzb25lZCBhbmQgdGFrZW4gb2ZmIGZyb20gYnVkZHkuXFxuKyAqICAgICAgICAgLUVIV1BPSVNPTiB3aGVuIHRoZSBwYWdlIGlzIGh3cG9pc29uZWQgYW5kIHRha2VuIG9mZiBmcm9tIGJ1ZGR5LFxcbisgKiAgICAgICAgIC1FTk9UUkVDT1ZFUkFCTEUgZm9yIGtlcm5lbC1vd25lZCBwYWdlcyBpZGVudGlmaWVkIGJ5XFxuKyAqICAgICAgICAgaXNfa2VybmVsX293bmVkX3BhZ2UoKSAoUEdfcmVzZXJ2ZWQsIHNsYWIsXFxuKyAqICAgICAgICAgcGFnZS10YWJsZSwgbGFyZ2Uta21hbGxvYykgdGhhdCB0aGUgaGFuZGxlciBjYW5ub3QgcmVjb3Zlci5cXG4gICovXFxuIHN0YXRpYyBpbnQgZ2V0X2h3cG9pc29uX3BhZ2Uoc3RydWN0IHBhZ2UgKnAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuIHtcXG5AQCAtMjQwMiw3ICsyNDU3LDggQEAgaW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXFxuIFxcdCAqIHRoYXQgbWF5IG1ha2UgcGFnZV9yZWZfZnJlZXplKCkvcGFnZV9yZWZfdW5mcmVlemUoKSBtaXNtYXRjaC5cXG4gXFx0ICovXFxuIFxcdHJlcyA9IGdldF9od3BvaXNvbl9wYWdlKHAsIGZsYWdzKTtcXG4tXFx0aWYgKCFyZXMpIHtcXG4rXFx0c3dpdGNoIChyZXMpIHtcXG4rXFx0Y2FzZSAwOlxcbiBcXHRcXHRpZiAoaXNfZnJlZV9idWRkeV9wYWdlKHApKSB7XFxuIFxcdFxcdFxcdGlmICh0YWtlX3BhZ2Vfb2ZmX2J1ZGR5KHApKSB7XFxuIFxcdFxcdFxcdFxcdHBhZ2VfcmVmX2luYyhwKTtcXG5AQCAtMjQyMSw3ICsyNDc3LDE5IEBAIGludCBtZW1vcnlfZmFpbHVyZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxcbiBcXHRcXHRcXHRyZXMgPSBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0tFUk5FTF9ISUdIX09SREVSLCBNRl9JR05PUkVEKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRnb3RvIHVubG9ja19tdXRleDtcXG4tXFx0fSBlbHNlIGlmIChyZXMgXFx1MDAzYyAwKSB7XFxuK1xcdGNhc2UgMTpcXG4rXFx0XFx0LyogR290IGEgcmVmY291bnQgb24gYSBoYW5kbGFibGUgcGFnZS4gKi9cXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgLUVOT1RSRUNPVkVSQUJMRTpcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogU3RhYmxlIHVuaGFuZGxhYmxlIGtlcm5lbC1vd25lZCBwYWdlIChQR19yZXNlcnZlZCxcXG4rXFx0XFx0ICogc2xhYiwgcGFnZSB0YWJsZXMsIGxhcmdlLWttYWxsb2MpLlxcbitcXHRcXHQgKiBObyByZWNvdmVyeSBwb3NzaWJsZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJlcyA9IGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfS0VSTkVMLCBNRl9JR05PUkVEKTtcXG4rXFx0XFx0Z290byB1bmxvY2tfbXV0ZXg7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdC8qIFRyYW5zaWVudCBsaWZlY3ljbGUgcmFjZSB3aXRoIHRoZSBwYWdlIGFsbG9jYXRvci4gKi9cXG4gXFx0XFx0cmVzID0gYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19HRVRfSFdQT0lTT04sIE1GX0lHTk9SRUQpO1xcbiBcXHRcXHRnb3RvIHVubG9ja19tdXRleDtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXFxuaW5kZXggZTZkZjk2OGYwOTcxYzguLmVkMzIxYWU3MDlkYWNmIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcXG5AQCAtMTc0LDYgKzE3NCwxMCBAQCBURVNUX1BST0dTICs9IGtzZnRfdXNlcmZhdWx0ZmQuc2hcXG4gVEVTVF9QUk9HUyArPSBrc2Z0X3ZtYV9tZXJnZS5zaFxcbiBURVNUX1BST0dTICs9IGtzZnRfdm1hbGxvYy5zaFxcbiBcXG4rIyBEZXN0cnVjdGl2ZTogZXZlcnkgc3VjY2Vzc2Z1bCBydW4gcGFuaWNzIHRoZSBrZXJuZWwuICBJbnN0YWxsZWQgYW5kXFxuKyMga2VwdCBleGVjdXRhYmxlLCBidXQgbm90IHJ1biBmcm9tIGEgZGVmYXVsdCBrc2VsZnRlc3QgaW52b2NhdGlvbi5cXG4rVEVTVF9QUk9HU19FWFRFTkRFRCArPSBod3BvaXNvbi1wYW5pYy5zaFxcbitcXG4gVEVTVF9GSUxFUyA6PSB0ZXN0X3ZtYWxsb2Muc2hcXG4gVEVTVF9GSUxFUyArPSB0ZXN0X2htbS5zaFxcbiBURVNUX0ZJTEVTICs9IHZhX2hpZ2hfYWRkcl9zd2l0Y2guc2hcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHdwb2lzb24tcGFuaWMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9od3BvaXNvbi1wYW5pYy5zaFxcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmFhZmMwNmU4OTVkMDFkXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h3cG9pc29uLXBhbmljLnNoXFxuQEAgLTAsMCArMSwyNDkgQEBcXG4rIyEvYmluL2Jhc2hcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisjXFxuKyMgVmVyaWZ5IHZtLnBhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmUgYnkgaW5qZWN0aW5nIGEgaHdwb2lzb25cXG4rIyBlcnJvciBvbiBhIGtlcm5lbC1vd25lZCBwYWdlIGFuZCBjb25maXJtaW5nIHRoZSBrZXJuZWwgcGFuaWNzLlxcbisjXFxuKyMgVGhyZWUgXFxcImtpbmRzXFxcIiBvZiBrZXJuZWwtb3duZWQgcGFnZSBjYW4gYmUgdGFyZ2V0ZWQsIHNlbGVjdGFibGUgdmlhIHRoZVxcbisjIGZpcnN0IHBvc2l0aW9uYWwgYXJndW1lbnQgKGRlZmF1bHQ6IHJvZGF0YSk6XFxuKyNcXG4rIyAgIHJvZGF0YSAgLSBhIFBHX3Jlc2VydmVkIHBhZ2UgaW4gdGhlIGtlcm5lbCByb2RhdGEgcmFuZ2VcXG4rIyAgICAgICAgICAgICAoc291cmNlZCBmcm9tIC9wcm9jL2lvbWVtIFxcXCJLZXJuZWwgcm9kYXRhXFxcIikuICBFeGVyY2lzZXNcXG4rIyAgICAgICAgICAgICBtZW1vcnlfZmFpbHVyZSgpIC1cXHUwMDNlIGdldF9hbnlfcGFnZSgpIG9uIGEgUGFnZVJlc2VydmVkIHBhZ2UuXFxuKyNcXG4rIyAgIHNsYWIgICAgLSBhIHNsYWIgcGFnZSBmb3VuZCB2aWEgL3Byb2Mva3BhZ2VmbGFncyAoS1BGX1NMQUIpLlxcbisjICAgICAgICAgICAgIEV4ZXJjaXNlcyBtZW1vcnlfZmFpbHVyZSgpIC1cXHUwMDNlIGdldF9hbnlfcGFnZSgpIG9uIGEgbm9uXFxuKyMgICAgICAgICAgICAgUEdfcmVzZXJ2ZWQga2VybmVsLW93bmVkIHBhZ2UuICBUaGlzIHBhdGggaXMgd2hhdCBjYXRjaGVzXFxuKyMgICAgICAgICAgICAgcmVncmVzc2lvbnMgd2hlcmUgZ2V0X2FueV9wYWdlKCkgY29sbGFwc2VzIGtlcm5lbC1vd25lZFxcbisjICAgICAgICAgICAgIHBhZ2VzIGludG8gYSB0cmFuc2llbnQgLUVJTyBpbnN0ZWFkIG9mIC1FTk9UUkVDT1ZFUkFCTEUuXFxuKyNcXG4rIyAgIHBndGFibGUgLSBhIHBhZ2UtdGFibGUgcGFnZSBmb3VuZCB2aWEgL3Byb2Mva3BhZ2VmbGFncyAoS1BGX1BHVEFCTEUpLlxcbisjICAgICAgICAgICAgIFNhbWUgcGF0aCBhcyBzbGFiLCBkaWZmZXJlbnQgcGFnZSB0eXBlLlxcbisjXFxuKyMgVGhpcyB0ZXN0IGlzIERFU1RSVUNUSVZFOiBhIHN1Y2Nlc3NmdWwgcnVuIGNyYXNoZXMgdGhlIGtlcm5lbC4gIEl0IGlzXFxuKyMgbWVhbnQgdG8gYmUgZXhlY3V0ZWQgaW5zaWRlIGEgZGlzcG9zYWJsZSBWTSAoZS5nLiB2aXJ0bWUtbmcpIHdpdGggYVxcbisjIHNlcmlhbCBjb25zb2xlIGNhcHR1cmVkIGJ5IHRoZSBoYXJuZXNzLiAgSXQgaXMgc2tpcHBlZCB1bmxlc3MgdGhlXFxuKyMgY2FsbGVyIG9wdHMgaW4gdmlhIFJVTl9ERVNUUlVDVElWRT0xLlxcbisjXFxuKyMgVGVzdCBwYXNzZXMgZXh0ZXJuYWxseTogdGhlIGtlcm5lbCBtdXN0IHBhbmljIHdpdGhcXG4rIyAgIFxcXCJNZW1vcnkgZmFpbHVyZTogXFx1MDAzY3BmblxcdTAwM2U6IHVucmVjb3ZlcmFibGUgcGFnZVxcXCJcXG4rIyBBIHJldHVybiBmcm9tIHRoZSBpbmplY3QgbWVhbnMgbm8gcGFuaWMgZmlyZWQ6IHRoYXQgaXMgYSBmYWlsdXJlLFxcbisjIHVubGVzcyB0aGUgdGFyZ2V0IFBGTiByYWNlZCB0byBhIGRpZmZlcmVudCBwYWdlIHR5cGUgYmVmb3JlIGluamVjdGlvbixcXG4rIyBpbiB3aGljaCBjYXNlIHRoZSBydW4gaXMgaW5jb25jbHVzaXZlIGFuZCBpcyBza2lwcGVkLlxcbisjXFxuKyMgQXV0aG9yOiBCcmVubyBMZWl0YW8gXFx1MDAzY2xlaXRhb0BkZWJpYW4ub3JnXFx1MDAzZVxcbitcXG4rc2V0IC11XFxuK1xcbitrc2Z0X3NraXA9NFxcbitzeXNjdGxfcGF0aD0vcHJvYy9zeXMvdm0vcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZVxcbitpbmplY3RfcGF0aD0vc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9oYXJkX29mZmxpbmVfcGFnZVxcbitrcGFnZWZsYWdzX3BhdGg9L3Byb2Mva3BhZ2VmbGFnc1xcbit1bnBvaXNvbl9wYXRoPS9zeXMva2VybmVsL2RlYnVnL2h3cG9pc29uL3VucG9pc29uLXBmblxcbitcXG4rIyAvcHJvYy9rcGFnZWZsYWdzIGJpdCBwb3NpdGlvbnMgKHNlZSBpbmNsdWRlL3VhcGkvbGludXgva2VybmVsLXBhZ2UtZmxhZ3MuaClcXG4rS1BGX1NMQUI9N1xcbitLUEZfQ09NUE9VTkRfVEFJTD0xNlxcbitLUEZfSFdQT0lTT049MTlcXG4rS1BGX05PUEFHRT0yMFxcbitLUEZfUEdUQUJMRT0yNlxcbitLUEZfUkVTRVJWRUQ9MzJcXG4rXFxuK3BhZ2VzaXplPSQoZ2V0Y29uZiBQQUdFX1NJWkUpXFxuK1xcbitraW5kPSR7MTotcm9kYXRhfVxcbitcXG4ra3NmdF9wcmludCgpIHsgZWNobyBcXFwiIyAkKlxcXCI7IH1cXG4ra3NmdF9leGl0X3NraXAoKSB7IGtzZnRfcHJpbnQgXFxcIiQqXFxcIjsgZXhpdCBcXFwiJGtzZnRfc2tpcFxcXCI7IH1cXG4ra3NmdF9leGl0X2ZhaWwoKSB7IGVjaG8gXFxcIm5vdCBvayAxICQqXFxcIjsgZXhpdCAxOyB9XFxuK1xcbitpZiBbIFxcXCIkKGlkIC11KVxcXCIgLW5lIDAgXTsgdGhlblxcbitcXHRrc2Z0X2V4aXRfc2tpcCBcXFwibXVzdCBydW4gYXMgcm9vdFxcXCJcXG4rZmlcXG4rXFxuK2lmIFsgISAtdyBcXFwiJHN5c2N0bF9wYXRoXFxcIiBdOyB0aGVuXFxuK1xcdGtzZnRfZXhpdF9za2lwIFxcXCIkc3lzY3RsX3BhdGggbm90IHByZXNlbnQgKGtlcm5lbCB3aXRob3V0IHRoZSBzeXNjdGw/KVxcXCJcXG4rZmlcXG4rXFxuK2lmIFsgISAtdyBcXFwiJGluamVjdF9wYXRoXFxcIiBdOyB0aGVuXFxuK1xcdGtzZnRfZXhpdF9za2lwIFxcXCIkaW5qZWN0X3BhdGggbm90IHByZXNlbnQgKG5vIE1FTU9SWV9IT1RQTFVHPylcXFwiXFxuK2ZpXFxuK1xcbitpZiBbIFxcXCIke1JVTl9ERVNUUlVDVElWRTotMH1cXFwiICE9IFxcXCIxXFxcIiBdOyB0aGVuXFxuK1xcdGtzZnRfZXhpdF9za2lwIFxcXCJkZXN0cnVjdGl2ZSB0ZXN0OyByZS1ydW4gd2l0aCBSVU5fREVTVFJVQ1RJVkU9MSBpbnNpZGUgYSBkaXNwb3NhYmxlIFZNXFxcIlxcbitmaVxcbitcXG4rIyBQaWNrIGEgUEZOIGluc2lkZSB0aGUga2VybmVsIGltYWdlIHJvZGF0YSByZWdpb24gb2YgL3Byb2MvaW9tZW0uXFxuKyMgVGhpcyBpcyBwcmVmZXJyZWQgb3ZlciBhIHRvcC1sZXZlbCBcXFwiUmVzZXJ2ZWRcXFwiIGVudHJ5IGJlY2F1c2UgdG9wLWxldmVsXFxuKyMgUmVzZXJ2ZWQgcmFuZ2VzIGFyZSBvZnRlbiBmaXJtd2FyZSBob2xlcyB0aGF0IGhhdmUgbm8gYmFja2luZyBzdHJ1Y3RcXG4rIyBwYWdlOyBwZm5fdG9fb25saW5lX3BhZ2UoKSByZXR1cm5zIE5VTEwgb24gdGhvc2UgYW5kIG1lbW9yeV9mYWlsdXJlKClcXG4rIyBiYWlscyBvdXQgd2l0aCAtRU5YSU8gYmVmb3JlIHJlYWNoaW5nIHRoZSBwYW5pYyBwYXRoLlxcbisjXFxuKyMgXFxcIktlcm5lbCByb2RhdGFcXFwiIGlzIHJlcG9ydGVkIGFzIGEgc3ViLXJlc291cmNlIG9mIFxcXCJTeXN0ZW0gUkFNXFxcIiBvbiBldmVyeVxcbisjIG1ham9yIGFyY2hpdGVjdHVyZSwgd2hpY2ggZ3VhcmFudGVlczpcXG4rIyAgIC0gdGhlIFBGTiBpcyBiYWNrZWQgYnkgc3RydWN0IHBhZ2UgKHdpdGhpbiBhbiBvbmxpbmUgbWVtb3J5IHJhbmdlKTtcXG4rIyAgIC0gUEdfcmVzZXJ2ZWQgaXMgc2V0IG9uIHRoZSBwYWdlIChrZXJuZWwgaW1hZ2UgYXJlYSk7XFxuKyMgICAtIHRoZSBtZW1vcnkgaXMgcmVhZC1vbmx5LCBzbyBzZXR0aW5nIFBHX2h3cG9pc29uIG9uIGl0IGRvZXMgbm90XFxuKyMgICAgIGNvcnJ1cHQgd3JpdGFibGUga2VybmVsIHN0YXRlIGlmIHRoZSBwYW5pYyBzb21laG93IGRvZXMgbm90IGZpcmUuXFxuKyNcXG4rIyAvcHJvYy9pb21lbSBlbnRyaWVzIGxvb2sgbGlrZSAoaW5kZW50ZWQgZm9yIHN1Yi1yZXNvdXJjZXMpOlxcbisjICAgICBcXFwiICAwMjUwMDAwMC0wMmZmZmZmZiA6IEtlcm5lbCByb2RhdGFcXFwiXFxuK3BpY2tfcm9kYXRhX3BoeXNfYWRkcigpIHtcXG4rXFx0YXdrIC12IHBhZ2VzaXplPVxcXCIkKGdldGNvbmYgUEFHRV9TSVpFKVxcXCIgJ1xcbitcXHQjIENvbnZlcnQgYSBoZXggc3RyaW5nIHRvIGEgbnVtYmVyIHdpdGhvdXQgcmVseWluZyBvbiB0aGUgZ2F3ay1vbmx5XFxuK1xcdCMgc3RydG9udW0oKS4gIG1hd2sgbGFja3MgaXQgYW5kIHdvdWxkIG90aGVyd2lzZSBzcHVyaW91c2x5IHNraXBcXG4rXFx0IyB0aGlzIHRlc3Qgb24gZGlzdHJvcyB0aGF0IHNoaXAgbWF3ayBhcyAvdXNyL2Jpbi9hd2suXFxuK1xcdGZ1bmN0aW9uIGhleDJudW0ocywgICBuLCBpLCBjLCB2KSB7XFxuK1xcdFxcdG4gPSAwXFxuK1xcdFxcdGZvciAoaSA9IDE7IGkgXFx1MDAzYz0gbGVuZ3RoKHMpOyBpKyspIHtcXG4rXFx0XFx0XFx0YyA9IHRvbG93ZXIoc3Vic3RyKHMsIGksIDEpKVxcbitcXHRcXHRcXHR2ID0gaW5kZXgoXFxcIjAxMjM0NTY3ODlhYmNkZWZcXFwiLCBjKSAtIDFcXG4rXFx0XFx0XFx0aWYgKHYgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gLTFcXG4rXFx0XFx0XFx0biA9IG4gKiAxNiArIHZcXG4rXFx0XFx0fVxcbitcXHRcXHRyZXR1cm4gblxcbitcXHR9XFxuK1xcdC86IEtlcm5lbCByb2RhdGFbWzpzcGFjZTpdXSokLyB7XFxuK1xcdFxcdHN1YigvXltbOnNwYWNlOl1dKy8sIFxcXCJcXFwiKVxcbitcXHRcXHRuID0gc3BsaXQoJDAsIGEsIC9bLSBdLylcXG4rXFx0XFx0c3RhcnQgPSBoZXgybnVtKGFbMV0pXFxuK1xcdFxcdGVuZCAgID0gaGV4Mm51bShhWzJdKVxcbitcXHRcXHRpZiAoZW5kIFxcdTAwM2M9IHN0YXJ0KVxcbitcXHRcXHRcXHRuZXh0XFxuK1xcdFxcdCMgUGFnZS1hbGlnbiB1cHdhcmQgYW5kIGVtaXQgdGhlIGZpcnN0IGJ5dGUgb2YgdGhhdCBwYWdlLlxcbitcXHRcXHRwZm4gPSBpbnQoKHN0YXJ0ICsgcGFnZXNpemUgLSAxKSAvIHBhZ2VzaXplKVxcbitcXHRcXHRwcmludGYgXFxcIjB4JXhcXFxcblxcXCIsIHBmbiAqIHBhZ2VzaXplXFxuK1xcdFxcdGV4aXQgMFxcbitcXHR9XFxuK1xcdCcgL3Byb2MvaW9tZW1cXG4rfVxcbitcXG4rIyBXYWxrIC9wcm9jL2twYWdlZmxhZ3MgYW5kIHJldHVybiB0aGUgcGh5cyBhZGRyIG9mIHRoZSBmaXJzdCBQRk4gdGhhdFxcbisjIGhhcyBiaXQgJDEgc2V0LCB3aXRoIEtQRl9IV1BPSVNPTiwgS1BGX05PUEFHRSBhbmQgS1BGX0NPTVBPVU5EX1RBSUxcXG4rIyBhbGwgY2xlYXIgKHNvIHdlIGF0dGFjayBhIHJlYWwsIG5vbi10YWlsLCBub3QtYWxyZWFkeS1wb2lzb25lZCBwYWdlKS5cXG4rI1xcbisjIFdlIHNraXAgdGhlIGZpcnN0IDE2IE1pQiBvZiBQRk5zIHRvIHN0ZXAgcGFzdCBsb3ctbWVtb3J5IHNwZWNpYWxcXG4rIyByYW5nZXMgKEJJT1MvRUZJL0FDUEkvZXRjLikgdGhhdCBvZnRlbiBhcmUgUEdfcmVzZXJ2ZWQgYW5kIHdvdWxkIG5vdFxcbisjIGV4aGliaXQgdGhlIHNsYWIvcGd0YWJsZSB0eXBlIHdlIGFyZSBsb29raW5nIGZvci5cXG4rcGlja19rcGFnZWZsYWdzX3BoeXNfYWRkcigpIHtcXG4rXFx0bG9jYWwgd2FudF9iaXQ9JDFcXG4rXFx0bG9jYWwgcGFnZXNpemUgc2tpcF9wZm5cXG4rXFxuK1xcdFsgLXIgXFxcIiRrcGFnZWZsYWdzX3BhdGhcXFwiIF0gfHwgcmV0dXJuXFxuK1xcbitcXHRwYWdlc2l6ZT0kKGdldGNvbmYgUEFHRV9TSVpFKVxcbitcXHRza2lwX3Bmbj0kKCgoMTYgKiAxMDI0ICogMTAyNCkgLyBwYWdlc2l6ZSkpXFxuK1xcbitcXHRvZCAtQW4gLXR4OCAtdiAtdzggLWogXFxcIiQoKHNraXBfcGZuICogOCkpXFxcIiBcXFwiJGtwYWdlZmxhZ3NfcGF0aFxcXCIgMlxcdTAwM2UvZGV2L251bGwgfCBcXFxcXFxuK1xcdGF3ayAtdiB3YW50X2JpdD1cXFwiJHdhbnRfYml0XFxcIiBcXFxcXFxuK1xcdCAgICAtdiBod3BfYml0PVxcXCIkS1BGX0hXUE9JU09OXFxcIiBcXFxcXFxuK1xcdCAgICAtdiBub3BhZ2VfYml0PVxcXCIkS1BGX05PUEFHRVxcXCIgXFxcXFxcbitcXHQgICAgLXYgdGFpbF9iaXQ9XFxcIiRLUEZfQ09NUE9VTkRfVEFJTFxcXCIgXFxcXFxcbitcXHQgICAgLXYgYmFzZV9wZm49XFxcIiRza2lwX3BmblxcXCIgXFxcXFxcbitcXHQgICAgLXYgcGFnZXNpemU9XFxcIiRwYWdlc2l6ZVxcXCIgJ1xcbitcXHQjIFRlc3Qgd2hldGhlciBiaXQgXFxcImJcXFwiIGlzIHNldCBpbiB0aGUgMTYtaGV4LWRpZ2l0IHZhbHVlIFxcXCJoZXhcXFwiLlxcbitcXHQjIERvbmUgd2l0aCBzdWJzdHJpbmcgKyBwZXItZGlnaXQgbG9va3VwIHNvIHdlIG5ldmVyIHJlbHkgb24gYXdrXFxuK1xcdCMgYml0d2lzZSBvcGVyYXRvcnMgKG1hd2sgbGFja3MgdGhlbSksIDY0LWJpdCBGUCBwcmVjaXNpb24gb3IgdGhlXFxuK1xcdCMgZ2F3ay1vbmx5IHN0cnRvbnVtKCkuXFxuK1xcdGZ1bmN0aW9uIGJpdF9zZXQoaGV4LCBiLCAgICBkaSwgYmksIGMsIHYpIHtcXG4rXFx0XFx0ZGkgPSBpbnQoYiAvIDQpXFxuK1xcdFxcdGJpID0gYiAtIGRpICogNFxcbitcXHRcXHRjID0gc3Vic3RyKGhleCwgbGVuZ3RoKGhleCkgLSBkaSwgMSlcXG4rXFx0XFx0diA9IGluZGV4KFxcXCIwMTIzNDU2Nzg5YWJjZGVmXFxcIiwgdG9sb3dlcihjKSkgLSAxXFxuK1xcdFxcdGlmIChiaSA9PSAwKSByZXR1cm4gKHYgJSAyKSA9PSAxXFxuK1xcdFxcdGlmIChiaSA9PSAxKSByZXR1cm4gaW50KHYgLyAyKSAlIDIgPT0gMVxcbitcXHRcXHRpZiAoYmkgPT0gMikgcmV0dXJuIGludCh2IC8gNCkgJSAyID09IDFcXG4rXFx0XFx0cmV0dXJuIGludCh2IC8gOCkgJSAyID09IDFcXG4rXFx0fVxcbitcXHR7XFxuK1xcdFxcdGdzdWIoL15bWzpzcGFjZTpdXSsvLCBcXFwiXFxcIilcXG4rXFx0XFx0aCA9ICQxXFxuK1xcdFxcdGlmIChiaXRfc2V0KGgsIHdhbnRfYml0KSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIWJpdF9zZXQoaCwgaHdwX2JpdCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICFiaXRfc2V0KGgsIG5vcGFnZV9iaXQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhYml0X3NldChoLCB0YWlsX2JpdCkpIHtcXG4rXFx0XFx0XFx0cGZuID0gYmFzZV9wZm4gKyBOUiAtIDFcXG4rXFx0XFx0XFx0cHJpbnRmIFxcXCIweCV4XFxcXG5cXFwiLCBwZm4gKiBwYWdlc2l6ZVxcbitcXHRcXHRcXHRleGl0IDBcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdCdcXG4rfVxcbitcXG4rIyBSZXR1cm4gMCBpZiAvcHJvYy9rcGFnZWZsYWdzIGJpdCAkMiBpcyBzZXQgZm9yIFBGTiAkMSwgMSBpZiBpdCBpc1xcbisjIGNsZWFyLCBvciAyIGlmIHRoZSB3b3JkIGNhbm5vdCBiZSByZWFkLiAgVXNlZCB0byByZS1jb25maXJtIHRoZSB0YXJnZXRcXG4rIyBwYWdlIHR5cGUgYWZ0ZXIgYSBub24tcGFuaWNraW5nIGluamVjdC5cXG4ra3BhZ2VmbGFnc19iaXRfc2V0KCkge1xcbitcXHRsb2NhbCB3b3JkXFxuK1xcbitcXHR3b3JkPSQob2QgLUFuIC10eDggLXYgLWogXFxcIiQoKCQxICogOCkpXFxcIiAtTiA4IFxcXCIka3BhZ2VmbGFnc19wYXRoXFxcIiAyXFx1MDAzZS9kZXYvbnVsbCB8IHRyIC1kICdbOnNwYWNlOl0nKVxcbitcXHRbIC1uIFxcXCIkd29yZFxcXCIgXSB8fCByZXR1cm4gMlxcbitcXHQoKCAoMTYjJHdvcmQgXFx1MDAzZVxcdTAwM2UgJDIpIFxcdTAwMjYgMSApKVxcbit9XFxuK1xcbisjIEJlc3QtZWZmb3J0OiBkcm9wIHRoZSBQR19od3BvaXNvbiBtYXJrZXIgc2V0IGJ5IHRoZSBpbmplY3Qgc28gYSBmYWlsZWRcXG4rIyBydW4gZG9lcyBub3QgbGVhdmUgYSBwb2lzb25lZCBwYWdlIGJlaGluZC4gIGhhcmRfb2ZmbGluZV9wYWdlKCkgaW5qZWN0c1xcbisjIHdpdGggTUZfU1dfU0lNVUxBVEVELCBzbyB0aGUgcGFnZSBzdGF5cyB1bnBvaXNvbmFibGUgdGhyb3VnaCB0aGVcXG4rIyBod3BvaXNvbiBkZWJ1Z2ZzIGludGVyZmFjZSAobmVlZHMgQ09ORklHX0hXUE9JU09OX0lOSkVDVCArIGRlYnVnZnMpLlxcbit0cnlfdW5wb2lzb24oKSB7XFxuK1xcdFsgLXcgXFxcIiR1bnBvaXNvbl9wYXRoXFxcIiBdIHx8IHJldHVybiAwXFxuK1xcdGVjaG8gXFxcIiQxXFxcIiBcXHUwMDNlIFxcXCIkdW5wb2lzb25fcGF0aFxcXCIgMlxcdTAwM2UvZGV2L251bGwgfHwgdHJ1ZVxcbit9XFxuK1xcbitjYXNlIFxcXCIka2luZFxcXCIgaW5cXG4rcm9kYXRhKVxcbitcXHRwaHlzX2FkZHI9JChwaWNrX3JvZGF0YV9waHlzX2FkZHIpXFxuK1xcdHJlY2hlY2tfYml0PSRLUEZfUkVTRVJWRURcXG4rXFx0bWlzc2luZ19tc2c9J25vIFxcXCJLZXJuZWwgcm9kYXRhXFxcIiBlbnRyeSBpbiAvcHJvYy9pb21lbSdcXG4rXFx0OztcXG4rc2xhYilcXG4rXFx0cGh5c19hZGRyPSQocGlja19rcGFnZWZsYWdzX3BoeXNfYWRkciBcXFwiJEtQRl9TTEFCXFxcIilcXG4rXFx0cmVjaGVja19iaXQ9JEtQRl9TTEFCXFxuK1xcdG1pc3NpbmdfbXNnPVxcXCJubyB1c2FibGUgc2xhYiBQRk4gZm91bmQgaW4gJGtwYWdlZmxhZ3NfcGF0aFxcXCJcXG4rXFx0OztcXG4rcGd0YWJsZSlcXG4rXFx0cGh5c19hZGRyPSQocGlja19rcGFnZWZsYWdzX3BoeXNfYWRkciBcXFwiJEtQRl9QR1RBQkxFXFxcIilcXG4rXFx0cmVjaGVja19iaXQ9JEtQRl9QR1RBQkxFXFxuK1xcdG1pc3NpbmdfbXNnPVxcXCJubyB1c2FibGUgcGFnZS10YWJsZSBQRk4gZm91bmQgaW4gJGtwYWdlZmxhZ3NfcGF0aFxcXCJcXG4rXFx0OztcXG4rKilcXG4rXFx0a3NmdF9leGl0X2ZhaWwgXFxcInVua25vd24ga2luZCAnJGtpbmQnIChleHBlY3RlZDogcm9kYXRhfHNsYWJ8cGd0YWJsZSlcXFwiXFxuK1xcdDs7XFxuK2VzYWNcXG4rXFxuK2lmIFsgLXogXFxcIiRwaHlzX2FkZHJcXFwiIF07IHRoZW5cXG4rXFx0a3NmdF9leGl0X3NraXAgXFxcIiRtaXNzaW5nX21zZ1xcXCJcXG4rZmlcXG4rXFxuK2tzZnRfcHJpbnQgXFxcImVuYWJsaW5nICRzeXNjdGxfcGF0aFxcXCJcXG4rcHJpb3I9JChjYXQgXFxcIiRzeXNjdGxfcGF0aFxcXCIpXFxuK2VjaG8gMSBcXHUwMDNlIFxcXCIkc3lzY3RsX3BhdGhcXFwiIHx8IGtzZnRfZXhpdF9mYWlsIFxcXCJmYWlsZWQgdG8gZW5hYmxlIHN5c2N0bFxcXCJcXG4rXFxuK3Bmbj0kKChwaHlzX2FkZHIgLyBwYWdlc2l6ZSkpXFxuK2tzZnRfcHJpbnQgXFxcImluamVjdGluZyBod3BvaXNvbiBhdCBwaHlzIDB4JChwcmludGYgJyV4JyBcXFwiJHBoeXNfYWRkclxcXCIpIChwZm4gMHgkKHByaW50ZiAnJXgnIFxcXCIkcGZuXFxcIiksIGtpbmQ9JGtpbmQpXFxcIlxcbitrc2Z0X3ByaW50IFxcXCJleHBlY3Rpbmcga2VybmVsIHBhbmljOiAnTWVtb3J5IGZhaWx1cmU6IFxcdTAwM2NwZm5cXHUwMDNlOiB1bnJlY292ZXJhYmxlIHBhZ2UnXFxcIlxcbitcXG4rIyBBIHN1Y2Nlc3NmdWwgcnVuIG5ldmVyIHJldHVybnMgZnJvbSB0aGUgaW5qZWN0IC0tIGl0IHBhbmljcyB0aGUga2VybmVsLlxcbisjIFJlYWNoaW5nIHRoZSBjb2RlIGJlbG93IHRoZXJlZm9yZSBtZWFucyBubyBwYW5pYyBmaXJlZC4gIE5vdGUgd2hldGhlclxcbisjIHRoZSB3cml0ZSBpdHNlbGYgc3VjY2VlZGVkLCB0aGVuIHB1dCB0aGUgbWFjaGluZSBiYWNrOiByZXN0b3JlIHRoZVxcbisjIHN5c2N0bCBhbmQgYmVzdC1lZmZvcnQgdW5wb2lzb24gdGhlIHBhZ2Ugd2UganVzdCBtYXJrZWQuXFxuK2lmIGVjaG8gXFxcIiRwaHlzX2FkZHJcXFwiIFxcdTAwM2UgXFxcIiRpbmplY3RfcGF0aFxcXCI7IHRoZW5cXG4rXFx0dmVyZGljdD1cXFwiaW5qZWN0IHJldHVybmVkIHdpdGhvdXQgcGFuaWM7IHN5c2N0bCBpbmVmZmVjdGl2ZVxcXCJcXG4rZWxzZVxcbitcXHR2ZXJkaWN0PVxcXCJpbmplY3QgZmFpbGVkIGJlZm9yZSByZWFjaGluZyB0aGUgcGFuaWMgcGF0aFxcXCJcXG4rZmlcXG4rXFxuK2VjaG8gXFxcIiRwcmlvclxcXCIgXFx1MDAzZSBcXFwiJHN5c2N0bF9wYXRoXFxcIlxcbit0cnlfdW5wb2lzb24gXFxcIiRwZm5cXFwiXFxuK1xcbisjIFRoZSBwYWdlIHR5cGUgY2FuIGNoYW5nZSBiZXR3ZWVuIHNlbGVjdGlvbiBhbmQgaW5qZWN0aW9uIChlLmcuIGEgc2xhYlxcbisjIG9yIHBhZ2UtdGFibGUgcGFnZSBpcyBmcmVlZCBhbmQgcmV1c2VkKS4gIE9ubHkgdHJlYXQgYSBtaXNzaW5nIHBhbmljIGFzXFxuKyMgYSBmYWlsdXJlIGlmIHRoZSB0YXJnZXQgUEZOIGlzIHN0aWxsIHRoZSBrZXJuZWwtb3duZWQgdHlwZSB3ZSBhaW1lZCBhdDtcXG4rIyBpZiBpdCByYWNlZCB0byBhbm90aGVyIHR5cGUgdGhlIHJ1biBpcyBpbmNvbmNsdXNpdmUsIHNvIHNraXAgaW5zdGVhZC5cXG4ra3BhZ2VmbGFnc19iaXRfc2V0IFxcXCIkcGZuXFxcIiBcXFwiJHJlY2hlY2tfYml0XFxcIlxcbitjYXNlICQ/IGluXFxuKzApXFx0a3NmdF9leGl0X2ZhaWwgXFxcIiR2ZXJkaWN0IChwYWdlIHN0aWxsICRraW5kKVxcXCIgOztcXG4rMSlcXHRrc2Z0X2V4aXRfc2tpcCBcXFwidGFyZ2V0IFBGTiBubyBsb25nZXIgJGtpbmQ7IHJhY2VkIGJlZm9yZSBpbmplY3QsIGluY29uY2x1c2l2ZVxcXCIgOztcXG4rKilcXHRrc2Z0X2V4aXRfZmFpbCBcXFwiJHZlcmRpY3QgKGNvdWxkIG5vdCByZWNvbmZpcm0gcGFnZSB0eXBlIHZpYSAka3BhZ2VmbGFnc19wYXRoKVxcXCIgOztcXG4rZXNhY1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMzowNToyMS45ODI0ODQ4NDNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI0NjcwNTkzMDA4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiSFdQT0lTT05fSU5KRUNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtb3J5X2ZhaWx1cmVcIixcbiAgICBcImdldF9hbnlfcGFnZVwiLFxuICAgIFwiYWN0aW9uX3Jlc3VsdFwiLFxuICAgIFwicGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZlwiLFxuICAgIFwiaXNfa2VybmVsX293bmVkX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZyBsb2dpYyAoYG1lbW9yeV9mYWlsdXJlYCwgYGdldF9hbnlfcGFnZWApIHRvIGV4cGxpY2l0bHkgaWRlbnRpZnkgYW5kIHNob3J0LWNpcmN1aXQgb24ga2VybmVsLW93bmVkIHBhZ2VzIChzbGFiLCBwYWdlIHRhYmxlcywgcmVzZXJ2ZWQsIGxhcmdlIGttYWxsb2MpLiBJdCBhbHNvIGludHJvZHVjZXMgYSBuZXcgc3lzY3RsIHRvIHBhbmljIG9uIHN1Y2ggdW5yZWNvdmVyYWJsZSBlcnJvcnMuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBoYXJkd2FyZSBlcnJvciBpbmplY3Rpb24gaW50ZXJmYWNlcyAoZS5nLiwgYC9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2hhcmRfb2ZmbGluZV9wYWdlYCBvciBgbWFkdmlzZShNQURWX0hXUE9JU09OKWApLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDU4MTc0MjI1OWM0MWIyZjFkNzcxMmE0NGIwYWIwMDg2NTA4NTA3NTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1biAyNiAyMzowNToxOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdFxuaW5kZXggYjliMGMyMThiZmI0NDAuLjIyY2M1NGNhYzNiMjFkIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3RcbkBAIC02Nyw2ICs2Nyw3IEBAIEN1cnJlbnRseSwgdGhlc2UgZmlsZXMgYXJlIGluIC9wcm9jL3N5cy92bTpcbiAtIHBhZ2UtY2x1c3RlclxuIC0gcGFnZV9sb2NrX3VuZmFpcm5lc3NcbiAtIHBhbmljX29uX29vbVxuKy0gcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZVxuIC0gcGVyY3B1X3BhZ2VsaXN0X2hpZ2hfZnJhY3Rpb25cbiAtIHN0YXRfaW50ZXJ2YWxcbiAtIHN0YXRfcmVmcmVzaFxuQEAgLTkyNSw2ICs5MjYsODUgQEAgcGFuaWNfb25fb29tPTIra2R1bXAgZ2l2ZXMgeW91IHZlcnkgc3Ryb25nIHRvb2wgdG8gaW52ZXN0aWdhdGVcbiB3aHkgb29tIGhhcHBlbnMuIFlvdSBjYW4gZ2V0IHNuYXBzaG90LlxuIFxuIFxuK3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmVcbis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK1xuK1doZW4gYSBoYXJkd2FyZSBtZW1vcnkgZXJyb3IgKGUuZy4gbXVsdGktYml0IEVDQykgaGl0cyBhIGtlcm5lbCBwYWdlXG4rdGhhdCBjYW5ub3QgYmUgcmVjb3ZlcmVkIGJ5IHRoZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGVyLCB0aGUgZGVmYXVsdFxuK2JlaGF2aW91ciBpcyB0byBpZ25vcmUgdGhlIGVycm9yIGFuZCBjb250aW51ZSBvcGVyYXRpb24uICBUaGlzIGlzXG4rZGFuZ2Vyb3VzIGJlY2F1c2UgdGhlIGNvcnJ1cHRlZCBkYXRhIHJlbWFpbnMgYWNjZXNzaWJsZSB0byB0aGUga2VybmVsLFxuK3Jpc2tpbmcgc2lsZW50IGRhdGEgY29ycnVwdGlvbiBvciBhIGRlbGF5ZWQgY3Jhc2ggd2hlbiB0aGUgcG9pc29uZWRcbittZW1vcnkgaXMgbmV4dCBhY2Nlc3NlZC5cbitcbitXaGVuIGVuYWJsZWQsIHRoaXMgc3lzY3RsIHRyaWdnZXJzIGEgcGFuaWMgb24gbWVtb3J5IGZhaWx1cmUgZXZlbnRzXG4raGl0dGluZyBrZXJuZWwtb3duZWQgcGFnZXMgdGhhdCB0aGUgaGFuZGxlciBjYW5ub3QgcmVjb3ZlcjpcbitgYFBhZ2VSZXNlcnZlZGBgIChmaXJtd2FyZSByZXNlcnZhdGlvbnMsIGtlcm5lbCBpbWFnZSwgdkRTTywgemVyb1xuK3BhZ2UsIGFuZCBzaW1pbGFyIG1lbWJsb2NrLXJlc2VydmVkIHJlZ2lvbnMpLCBgYFBhZ2VTbGFiYGAsXG4rYGBQYWdlVGFibGVgYCwgYW5kIGBgUGFnZUxhcmdlS21hbGxvY2BgLiAgVGhlc2UgYXJlIG93bmVkIGJ5IHRoZVxuK2tlcm5lbCBhbmQgdGhlIG1lbW9yeSBmYWlsdXJlIGhhbmRsZXIgY2Fubm90IHJlbGlhYmx5IGV2aWN0IHRoZWlyXG4rY29udGVudHMuXG4rXG4rT3RoZXIgdW5yZWNvdmVyYWJsZSBrZXJuZWwtb3duZWQgcG9wdWxhdGlvbnMgKHZtYWxsb2MgYWxsb2NhdGlvbnMsXG4ra2VybmVsIHN0YWNrIHBhZ2VzLCAuLi4pIGFyZSBub3QgY3VycmVudGx5IGNvdmVyZWQgYmVjYXVzZSB0aGVcbitoYW5kbGVyIGhhcyBubyBwYWdlLXR5cGUgc2lnbmFsIHRoYXQgZGlzdGluZ3Vpc2hlcyB0aGVtIGZyb20gYVxuK3VzZXJzcGFjZSBmb2xpbyB0ZW1wb3JhcmlseSBvZmYgdGhlIExSVSBkdXJpbmcgbWlncmF0aW9uIG9yXG4rY29tcGFjdGlvbi4gIFN1Y2ggcGFnZXMgc3RpbGwgZ28gdGhyb3VnaCB0aGUgc3RhbmRhcmRcbitNRl9NU0dfR0VUX0hXUE9JU09OIHBhdGg6IGBgUEdfaHdwb2lzb25gYCBpcyBzZXQgb24gdGhlbSBhbmQgYVxuK2RlbGF5ZWQgY3Jhc2ggb24gdGhlIG5leHQgYWNjZXNzIHJlbWFpbnMgcG9zc2libGUuICBDb3ZlcmFnZSBtYXlcbitncm93IGFzIHRoZSBoYW5kbGVyIGdhaW5zIHN0cm9uZ2VyIGtlcm5lbC1vd25lcnNoaXAgc2lnbmFscy5cbitcbitSZWNvdmVyYWJsZSBmYWlsdXJlIHBhdGhzIGFyZSBhbHNvIGludGVudGlvbmFsbHkgbGVmdCBvdXQ6IGluLWZsaWdodFxuK2J1ZGR5IGFsbG9jYXRpb25zIGFuZCBvdGhlciB0cmFuc2llbnQgcmFjZXMgd2l0aCB0aGUgcGFnZSBhbGxvY2F0b3JcbitjYW4gcmVhY2ggdGhlIHNhbWUgZGlhZ25vc3RpYywgYW5kIHBhbmlja2luZyBvbiB0aGVtIHdvdWxkIHJpc2tcbitraWxsaW5nIHRoZSBib3ggZm9yIGEgcGFnZSBkZXN0aW5lZCBmb3IgdXNlcnNwYWNlIHdoZXJlIHRoZSBzdGFuZGFyZFxuK1NJR0JVUyByZWNvdmVyeSBwYXRoIGFwcGxpZXMuICBQYWdlcyB3aG9zZSBzdGF0ZSBjb3VsZCBub3QgYmVcbitjbGFzc2lmaWVkIGF0IGFsbCBhcmUgbm90IGNvdmVyZWQgZWl0aGVyLCBzaW5jZSBhbiB1bmtub3duIHN0YXRlIGlzXG4rbm90IGEgc291bmQgYmFzaXMgZm9yIGEgcGFuaWMgZGVjaXNpb24uXG4rXG4rRm9yIG1hbnkgZW52aXJvbm1lbnRzIGl0IGlzIHByZWZlcmFibGUgdG8gcGFuaWMgaW1tZWRpYXRlbHkgd2l0aCBhIGNsZWFuXG4rY3Jhc2ggZHVtcCB0aGF0IGNhcHR1cmVzIHRoZSBvcmlnaW5hbCBlcnJvciBjb250ZXh0LCByYXRoZXIgdGhhbiB0b1xuK2NvbnRpbnVlIGFuZCBmYWNlIGEgcmFuZG9tIGNyYXNoIGxhdGVyIHdob3NlIGNhdXNlIGlzIGRpZmZpY3VsdCB0b1xuK2RpYWdub3NlLlxuK1xuK1VzZSBjYXNlc1xuKy0tLS0tLS0tLVxuK1xuK1RoaXMgb3B0aW9uIGlzIG1vc3QgdXNlZnVsIGluIGVudmlyb25tZW50cyB3aGVyZSB1bmF0dHJpYnV0ZWQgY3Jhc2hlc1xuK2FyZSBleHBlbnNpdmUgdG8gZGVidWcgb3Igd2hlcmUgZGF0YSBpbnRlZ3JpdHkgbXVzdCB0YWtlIHByZWNlZGVuY2VcbitvdmVyIGF2YWlsYWJpbGl0eTpcbitcbisqIExhcmdlIGZsZWV0cywgd2hlcmUgbXVsdGktYml0IEVDQyBlcnJvcnMgb24ga2VybmVsIHBhZ2VzIGFyZSBvYnNlcnZlZFxuKyAgcmVndWxhcmx5IGFuZCBwb3N0LW1vcnRlbSBhbmFseXNpcyBvZiBhbiB1bnJlbGF0ZWQgZG93bnN0cmVhbSBjcmFzaFxuKyAgKG9mdGVuIHNlY29uZHMgdG8gbWludXRlcyBhZnRlciB0aGUgb3JpZ2luYWwgZXJyb3IpIGNvbnN1bWVzXG4rICBzaWduaWZpY2FudCBlbmdpbmVlcmluZyBlZmZvcnQuXG4rXG4rKiBTeXN0ZW1zIGNvbmZpZ3VyZWQgd2l0aCBrZHVtcCwgd2hlcmUgcGFuaWNraW5nIGF0IHRoZSBtb21lbnQgb2YgdGhlXG4rICBoYXJkd2FyZSBlcnJvciBwcm9kdWNlcyBhIHZtY29yZSB0aGF0IHN0aWxsIGNvbnRhaW5zIHRoZSBmYXVsdGluZ1xuKyAgYWRkcmVzcywgdGhlIGFmZmVjdGVkIHBhZ2Ugc3RhdGUsIGFuZCB0aGUgb3JpZ2luYXRpbmcgTUNFL0dIRVNcbisgIHJlY29yZCDigJQgY29udGV4dCB0aGF0IGlzIHR5cGljYWxseSBsb3N0IGJ5IHRoZSB0aW1lIGEgZGVsYXllZCBjcmFzaFxuKyAgb2NjdXJzLlxuK1xuKyogSGlnaC1hdmFpbGFiaWxpdHkgY2x1c3RlcnMgdGhhdCByZWx5IG9uIGZhc3QsIGRldGVybWluaXN0aWMgbm9kZVxuKyAgZmFpbHVyZSBmb3IgZmFpbG92ZXIsIGFuZCBwcmVmZXIgYW4gaW1tZWRpYXRlIHBhbmljIG92ZXIgc2lsZW50IGRhdGFcbisgIGNvcnJ1cHRpb24gcHJvcGFnYXRpbmcgdG8gcmVwbGljYXMgb3IgcGVyc2lzdGVudCBzdG9yYWdlLlxuK1xuKyogS2VybmVsIGFuZCBwbGF0Zm9ybSBkZXZlbG9wZXJzIHJlcHJvZHVjaW5nIGh3cG9pc29uIGlzc3VlcyB3aXRoXG4rICB0b29scyBzdWNoIGFzIGBgbWNlLWluamVjdGBgIG9yIGVycm9yLWluamVjdGlvbiBkZWJ1Z2ZzIGludGVyZmFjZXMsXG4rICB3aGVyZSBwYW5pY2tpbmcgb24gdGhlIHVucmVjb3ZlcmFibGUgcGF0aCBtYWtlcyByZWdyZXNzaW9uc1xuKyAgaW1tZWRpYXRlbHkgdmlzaWJsZSBpbnN0ZWFkIG9mIHN1cmZhY2luZyBhcyBsYXRlciwgdW5yZWxhdGVkXG4rICBmYWlsdXJlcy5cbitcbis9ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuKzAgVHJ5IHRvIGNvbnRpbnVlIG9wZXJhdGlvbiAoZGVmYXVsdCkuXG4rMSBQYW5pYyBpbW1lZGlhdGVseS4gIElmIHRoZSBgYHBhbmljYGAgc3lzY3RsIGlzIGFsc28gbm9uLXplcm8gdGhlbiB0aGVcbisgIG1hY2hpbmUgd2lsbCBiZSByZWJvb3RlZC5cbis9ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK1xuK0V4YW1wbGU6OlxuK1xuKyAgICAgZWNobyAxIFx1MDAzZSAvcHJvYy9zeXMvdm0vcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZVxuK1xuK1xuIHBlcmNwdV9wYWdlbGlzdF9oaWdoX2ZyYWN0aW9uXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuaW5kZXggNTE1MDhhNTVjNDA1NWUuLjYxMTE2MGM5OGM2ZjY0IDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xuKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuQEAgLTc0LDYgKzc0LDggQEAgc3RhdGljIGludCBzeXNjdGxfbWVtb3J5X2ZhaWx1cmVfcmVjb3ZlcnkgX19yZWFkX21vc3RseSA9IDE7XG4gXG4gc3RhdGljIGludCBzeXNjdGxfZW5hYmxlX3NvZnRfb2ZmbGluZSBfX3JlYWRfbW9zdGx5ID0gMTtcbiBcbitzdGF0aWMgaW50IHN5c2N0bF9wYW5pY19vbl91bnJlY292ZXJhYmxlX21mIF9fcmVhZF9tb3N0bHk7XG4rXG4gYXRvbWljX2xvbmdfdCBudW1fcG9pc29uZWRfcGFnZXMgX19yZWFkX21vc3RseSA9IEFUT01JQ19MT05HX0lOSVQoMCk7XG4gXG4gc3RhdGljIGJvb2wgaHdfbWVtb3J5X2ZhaWx1cmUgX19yZWFkX21vc3RseSA9IGZhbHNlO1xuQEAgLTE1NSw2ICsxNTcsMTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgbWVtb3J5X2ZhaWx1cmVfdGFibGVbXSA9IHtcbiBcdFx0LnByb2NfaGFuZGxlclx0PSBwcm9jX2RvaW50dmVjX21pbm1heCxcbiBcdFx0LmV4dHJhMVx0XHQ9IFNZU0NUTF9aRVJPLFxuIFx0XHQuZXh0cmEyXHRcdD0gU1lTQ1RMX09ORSxcbitcdH0sXG4rXHR7XG4rXHRcdC5wcm9jbmFtZVx0PSBcInBhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmVcIixcbitcdFx0LmRhdGFcdFx0PSBcdTAwMjZzeXNjdGxfcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZixcbitcdFx0Lm1heGxlblx0XHQ9IHNpemVvZihzeXNjdGxfcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZiksXG4rXHRcdC5tb2RlXHRcdD0gMDY0NCxcbitcdFx0LnByb2NfaGFuZGxlclx0PSBwcm9jX2RvaW50dmVjX21pbm1heCxcbitcdFx0LmV4dHJhMVx0XHQ9IFNZU0NUTF9aRVJPLFxuK1x0XHQuZXh0cmEyXHRcdD0gU1lTQ1RMX09ORSxcbiBcdH1cbiB9O1xuIFxuQEAgLTk4MCwxNyArOTkxLDYgQEAgc3RhdGljIGJvb2wgaGFzX2V4dHJhX3JlZmNvdW50KHN0cnVjdCBwYWdlX3N0YXRlICpwcywgc3RydWN0IHBhZ2UgKnAsXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLS8qXG4tICogRXJyb3IgaGl0IGtlcm5lbCBwYWdlLlxuLSAqIERvIG5vdGhpbmcsIHRyeSB0byBiZSBsdWNreSBhbmQgbm90IHRvdWNoIHRoaXMgaW5zdGVhZC4gRm9yIGEgZmV3IGNhc2VzIHdlXG4tICogY291bGQgYmUgbW9yZSBzb3BoaXN0aWNhdGVkLlxuLSAqL1xuLXN0YXRpYyBpbnQgbWVfa2VybmVsKHN0cnVjdCBwYWdlX3N0YXRlICpwcywgc3RydWN0IHBhZ2UgKnApXG4te1xuLVx0dW5sb2NrX3BhZ2UocCk7XG4tXHRyZXR1cm4gTUZfSUdOT1JFRDtcbi19XG4tXG4gLypcbiAgKiBQYWdlIGluIHVua25vd24gc3RhdGUuIERvIG5vdGhpbmcuXG4gICogVGhpcyBpcyBhIGNhdGNoLWFsbCBpbiBjYXNlIHdlIGZhaWwgdG8gbWFrZSBzZW5zZSBvZiB0aGUgcGFnZSBzdGF0ZS5cbkBAIC0xMTk5LDEwICsxMTk5LDggQEAgc3RhdGljIGludCBtZV9odWdlX3BhZ2Uoc3RydWN0IHBhZ2Vfc3RhdGUgKnBzLCBzdHJ1Y3QgcGFnZSAqcClcbiAjZGVmaW5lIG1sb2NrXHRcdCgxVUwgXHUwMDNjXHUwMDNjIFBHX21sb2NrZWQpXG4gI2RlZmluZSBscnVcdFx0KDFVTCBcdTAwM2NcdTAwM2MgUEdfbHJ1KVxuICNkZWZpbmUgaGVhZFx0XHQoMVVMIFx1MDAzY1x1MDAzYyBQR19oZWFkKVxuLSNkZWZpbmUgcmVzZXJ2ZWRcdCgxVUwgXHUwMDNjXHUwMDNjIFBHX3Jlc2VydmVkKVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcGFnZV9zdGF0ZSBlcnJvcl9zdGF0ZXNbXSA9IHtcbi1cdHsgcmVzZXJ2ZWQsXHRyZXNlcnZlZCxcdE1GX01TR19LRVJORUwsXHRtZV9rZXJuZWwgfSxcbiBcdC8qXG4gXHQgKiBmcmVlIHBhZ2VzIGFyZSBzcGVjaWFsbHkgZGV0ZWN0ZWQgb3V0c2lkZSB0aGlzIHRhYmxlOlxuIFx0ICogUEdfYnVkZHkgcGFnZXMgb25seSBtYWtlIGEgc21hbGwgZnJhY3Rpb24gb2YgYWxsIGZyZWUgcGFnZXMuXG5AQCAtMTIzNCw3ICsxMjMyLDYgQEAgc3RhdGljIHN0cnVjdCBwYWdlX3N0YXRlIGVycm9yX3N0YXRlc1tdID0ge1xuICN1bmRlZiBtbG9ja1xuICN1bmRlZiBscnVcbiAjdW5kZWYgaGVhZFxuLSN1bmRlZiByZXNlcnZlZFxuIFxuIHN0YXRpYyB2b2lkIHVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyh1bnNpZ25lZCBsb25nIHBmbixcbiBcdFx0XHRcdCAgICAgZW51bSBtZl9yZXN1bHQgcmVzdWx0KVxuQEAgLTEyNjksNiArMTI2NiwxNSBAQCBzdGF0aWMgdm9pZCB1cGRhdGVfcGVyX25vZGVfbWZfc3RhdHModW5zaWduZWQgbG9uZyBwZm4sXG4gXHQrK21mX3N0YXRzLVx1MDAzZXRvdGFsO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBwYW5pY19vbl91bnJlY292ZXJhYmxlX21mKGVudW0gbWZfYWN0aW9uX3BhZ2VfdHlwZSB0eXBlLFxuK1x0XHRcdFx0ICAgICAgZW51bSBtZl9yZXN1bHQgcmVzdWx0KVxuK3tcbitcdGlmICghc3lzY3RsX3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWYpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiB0eXBlID09IE1GX01TR19LRVJORUwgXHUwMDI2XHUwMDI2IHJlc3VsdCA9PSBNRl9JR05PUkVEO1xuK31cbitcbiAvKlxuICAqIFwiRGlydHkvQ2xlYW5cIiBpbmRpY2F0aW9uIGlzIG5vdCAxMDAlIGFjY3VyYXRlIGR1ZSB0byB0aGUgcG9zc2liaWxpdHkgb2ZcbiAgKiBzZXR0aW5nIFBHX2RpcnR5IG91dHNpZGUgcGFnZSBsb2NrLiBTZWUgYWxzbyBjb21tZW50IGFib3ZlIHNldF9wYWdlX2RpcnR5KCkuXG5AQCAtMTI4Niw2ICsxMjkyLDkgQEAgc3RhdGljIGludCBhY3Rpb25fcmVzdWx0KHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIG1mX2FjdGlvbl9wYWdlX3R5cGUgdHlwZSxcbiBcdHByX2VycihcIiUjbHg6IHJlY292ZXJ5IGFjdGlvbiBmb3IgJXM6ICVzXFxuXCIsXG4gXHRcdHBmbiwgYWN0aW9uX3BhZ2VfdHlwZXNbdHlwZV0sIGFjdGlvbl9uYW1lW3Jlc3VsdF0pO1xuIFxuK1x0aWYgKHBhbmljX29uX3VucmVjb3ZlcmFibGVfbWYodHlwZSwgcmVzdWx0KSlcbitcdFx0cGFuaWMoXCJNZW1vcnkgZmFpbHVyZTogJSNseDogdW5yZWNvdmVyYWJsZSBwYWdlXCIsIHBmbik7XG4rXG4gXHRyZXR1cm4gKHJlc3VsdCA9PSBNRl9SRUNPVkVSRUQgfHwgcmVzdWx0ID09IE1GX0RFTEFZRUQpID8gMCA6IC1FQlVTWTtcbiB9XG4gXG5AQCAtMTMzOSw2ICsxMzQ4LDM2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBIV1BvaXNvbkhhbmRsYWJsZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBmbGFncylcbiBcdHJldHVybiBQYWdlTFJVKHBhZ2UpIHx8IGlzX2ZyZWVfYnVkZHlfcGFnZShwYWdlKTtcbiB9XG4gXG4rLypcbisgKiBQb3NpdGl2ZSBpZGVudGlmaWNhdGlvbiBvZiBwYWdlcyB0aGUgaHdwb2lzb24gaGFuZGxlciBjYW5ub3QgcmVjb3ZlcjpcbisgKiBwYWdlcyBvd25lZCBieSBrZXJuZWwgaW50ZXJuYWxzIHdpdGggbm8gdXNlcnNwYWNlIG1hcHBpbmcgdG8gdW5tYXAsIG5vXG4rICogZmlsZSBtYXBwaW5nIHRvIGludmFsaWRhdGUsIGFuZCBubyBtaWdyYXRpb24gdGFyZ2V0LlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19rZXJuZWxfb3duZWRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbit7XG4rXHRzdHJ1Y3QgcGFnZSAqaGVhZDtcbitcdGJvb2wga2VybmVsX293bmVkO1xuK1xuK1x0LyogUEdfcmVzZXJ2ZWQgaXMgYSBwZXItcGFnZSBmbGFnLCBuZXZlciBzZXQgb24gYSBjb21wb3VuZCBwYWdlLiAqL1xuK1x0aWYgKFBhZ2VSZXNlcnZlZChwYWdlKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHQvKlxuK1x0ICogUGFnZS10eXBlIGJpdHMgbGl2ZSBvbmx5IG9uIHRoZSBoZWFkIHBhZ2UsIHNvIHJlc29sdmUgYW55IHRhaWxcbitcdCAqIGZpcnN0LiAgVGhlIGNoZWNrIHRha2VzIG5vIHJlZmNvdW50OyByZWNoZWNrIHRoZSBoZWFkIGFmdGVyd2FyZHNcbitcdCAqIHNvIGEgY29uY3VycmVudCBzcGxpdCBvciBjb21wb3VuZCBmcmVlIGNhbm5vdCBsZWF2ZSB1cyB0cnVzdGluZ1xuK1x0ICogYSBzdGFsZSB2aWV3LiAgQSBmcmVlLVx1MDAzZWFsbG9jLVx1MDAzZWZyZWUgaW4gdGhlIHNhbWUgd2luZG93IGlzIHN0aWxsXG4rXHQgKiBwb3NzaWJsZSBidXQgY2xvc2luZyBpdCB3b3VsZCByZXF1aXJlIHRha2luZyBhIHJlZmVyZW5jZSBoZXJlLlxuK1x0ICovXG4rcmV0cnk6XG4rXHRoZWFkID0gY29tcG91bmRfaGVhZChwYWdlKTtcbitcdGtlcm5lbF9vd25lZCA9IFBhZ2VTbGFiKGhlYWQpIHx8IFBhZ2VUYWJsZShoZWFkKSB8fFxuK1x0XHQgICAgICAgUGFnZUxhcmdlS21hbGxvYyhoZWFkKTtcbitcdGlmIChoZWFkICE9IGNvbXBvdW5kX2hlYWQocGFnZSkpXG4rXHRcdGdvdG8gcmV0cnk7XG4rXHRyZXR1cm4ga2VybmVsX293bmVkO1xuK31cbitcbiBzdGF0aWMgaW50IF9fZ2V0X2h3cG9pc29uX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4ge1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG5AQCAtMTM4NSw2ICsxNDI0LDE5IEBAIHN0YXRpYyBpbnQgZ2V0X2FueV9wYWdlKHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuIFx0aWYgKGZsYWdzIFx1MDAyNiBNRl9DT1VOVF9JTkNSRUFTRUQpXG4gXHRcdGNvdW50X2luY3JlYXNlZCA9IHRydWU7XG4gXG4rXHQvKlxuK1x0ICogUGFnZSB0eXBlcyB3ZSBrbm93IGFyZSBrZXJuZWwtb3duZWQgYW5kIGNhbm5vdCBiZSByZWNvdmVyZWQuXG4rXHQgKiBTaG9ydC1jaXJjdWl0IGJlZm9yZSB0aGUgc2hha2VfcGFnZSgpIC8gcmV0cnkgbG9vcCwgd2hpY2hcbitcdCAqIGNhbm5vdCB0dXJuIGFueSBvZiB0aGVzZSBpbnRvIHNvbWV0aGluZyBIV1BvaXNvbkhhbmRsYWJsZSgpLlxuK1x0ICogRHJvcCB0aGUgY2FsbGVyJ3MgcmVmZXJlbmNlIGlmIE1GX0NPVU5UX0lOQ1JFQVNFRCB0b29rIG9uZS5cbitcdCAqL1xuK1x0aWYgKGlzX2tlcm5lbF9vd25lZF9wYWdlKHApKSB7XG4rXHRcdGlmIChjb3VudF9pbmNyZWFzZWQpXG4rXHRcdFx0cHV0X3BhZ2UocCk7XG4rXHRcdHJldCA9IC1FTk9UUkVDT1ZFUkFCTEU7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuIHRyeV9hZ2FpbjpcbiBcdGlmICghY291bnRfaW5jcmVhc2VkKSB7XG4gXHRcdHJldCA9IF9fZ2V0X2h3cG9pc29uX3BhZ2UocCwgZmxhZ3MpO1xuQEAgLTE0MzIsNyArMTQ4NCw3IEBAIHN0YXRpYyBpbnQgZ2V0X2FueV9wYWdlKHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuIFx0XHRyZXQgPSAtRUlPO1xuIFx0fVxuIG91dDpcbi1cdGlmIChyZXQgPT0gLUVJTylcbitcdGlmIChyZXQgPT0gLUVJTyB8fCByZXQgPT0gLUVOT1RSRUNPVkVSQUJMRSlcbiBcdFx0cHJfZXJyKFwiJSNseDogdW5oYW5kbGFibGUgcGFnZS5cXG5cIiwgcGFnZV90b19wZm4ocCkpO1xuIFxuIFx0cmV0dXJuIHJldDtcbkBAIC0xNDg5LDcgKzE1NDEsMTAgQEAgc3RhdGljIGludCBfX2dldF91bnBvaXNvbl9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuICAqICAgICAgICAgLUVJTyBmb3IgcGFnZXMgb24gd2hpY2ggd2UgY2FuIG5vdCBoYW5kbGUgbWVtb3J5IGVycm9ycyxcbiAgKiAgICAgICAgIC1FQlVTWSB3aGVuIGdldF9od3BvaXNvbl9wYWdlKCkgaGFzIHJhY2VkIHdpdGggcGFnZSBsaWZlY3ljbGVcbiAgKiAgICAgICAgIG9wZXJhdGlvbnMgbGlrZSBhbGxvY2F0aW9uIGFuZCBmcmVlLFxuLSAqICAgICAgICAgLUVIV1BPSVNPTiB3aGVuIHRoZSBwYWdlIGlzIGh3cG9pc29uZWQgYW5kIHRha2VuIG9mZiBmcm9tIGJ1ZGR5LlxuKyAqICAgICAgICAgLUVIV1BPSVNPTiB3aGVuIHRoZSBwYWdlIGlzIGh3cG9pc29uZWQgYW5kIHRha2VuIG9mZiBmcm9tIGJ1ZGR5LFxuKyAqICAgICAgICAgLUVOT1RSRUNPVkVSQUJMRSBmb3Iga2VybmVsLW93bmVkIHBhZ2VzIGlkZW50aWZpZWQgYnlcbisgKiAgICAgICAgIGlzX2tlcm5lbF9vd25lZF9wYWdlKCkgKFBHX3Jlc2VydmVkLCBzbGFiLFxuKyAqICAgICAgICAgcGFnZS10YWJsZSwgbGFyZ2Uta21hbGxvYykgdGhhdCB0aGUgaGFuZGxlciBjYW5ub3QgcmVjb3Zlci5cbiAgKi9cbiBzdGF0aWMgaW50IGdldF9od3BvaXNvbl9wYWdlKHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuIHtcbkBAIC0yNDAyLDcgKzI0NTcsOCBAQCBpbnQgbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbiBcdCAqIHRoYXQgbWF5IG1ha2UgcGFnZV9yZWZfZnJlZXplKCkvcGFnZV9yZWZfdW5mcmVlemUoKSBtaXNtYXRjaC5cbiBcdCAqL1xuIFx0cmVzID0gZ2V0X2h3cG9pc29uX3BhZ2UocCwgZmxhZ3MpO1xuLVx0aWYgKCFyZXMpIHtcbitcdHN3aXRjaCAocmVzKSB7XG4rXHRjYXNlIDA6XG4gXHRcdGlmIChpc19mcmVlX2J1ZGR5X3BhZ2UocCkpIHtcbiBcdFx0XHRpZiAodGFrZV9wYWdlX29mZl9idWRkeShwKSkge1xuIFx0XHRcdFx0cGFnZV9yZWZfaW5jKHApO1xuQEAgLTI0MjEsNyArMjQ3NywxOSBAQCBpbnQgbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbiBcdFx0XHRyZXMgPSBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0tFUk5FTF9ISUdIX09SREVSLCBNRl9JR05PUkVEKTtcbiBcdFx0fVxuIFx0XHRnb3RvIHVubG9ja19tdXRleDtcbi1cdH0gZWxzZSBpZiAocmVzIFx1MDAzYyAwKSB7XG4rXHRjYXNlIDE6XG4rXHRcdC8qIEdvdCBhIHJlZmNvdW50IG9uIGEgaGFuZGxhYmxlIHBhZ2UuICovXG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSAtRU5PVFJFQ09WRVJBQkxFOlxuK1x0XHQvKlxuK1x0XHQgKiBTdGFibGUgdW5oYW5kbGFibGUga2VybmVsLW93bmVkIHBhZ2UgKFBHX3Jlc2VydmVkLFxuK1x0XHQgKiBzbGFiLCBwYWdlIHRhYmxlcywgbGFyZ2Uta21hbGxvYykuXG4rXHRcdCAqIE5vIHJlY292ZXJ5IHBvc3NpYmxlLlxuK1x0XHQgKi9cbitcdFx0cmVzID0gYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19LRVJORUwsIE1GX0lHTk9SRUQpO1xuK1x0XHRnb3RvIHVubG9ja19tdXRleDtcbitcdGRlZmF1bHQ6XG4rXHRcdC8qIFRyYW5zaWVudCBsaWZlY3ljbGUgcmFjZSB3aXRoIHRoZSBwYWdlIGFsbG9jYXRvci4gKi9cbiBcdFx0cmVzID0gYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19HRVRfSFdQT0lTT04sIE1GX0lHTk9SRUQpO1xuIFx0XHRnb3RvIHVubG9ja19tdXRleDtcbiBcdH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG5pbmRleCBlNmRmOTY4ZjA5NzFjOC4uZWQzMjFhZTcwOWRhY2YgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbkBAIC0xNzQsNiArMTc0LDEwIEBAIFRFU1RfUFJPR1MgKz0ga3NmdF91c2VyZmF1bHRmZC5zaFxuIFRFU1RfUFJPR1MgKz0ga3NmdF92bWFfbWVyZ2Uuc2hcbiBURVNUX1BST0dTICs9IGtzZnRfdm1hbGxvYy5zaFxuIFxuKyMgRGVzdHJ1Y3RpdmU6IGV2ZXJ5IHN1Y2Nlc3NmdWwgcnVuIHBhbmljcyB0aGUga2VybmVsLiAgSW5zdGFsbGVkIGFuZFxuKyMga2VwdCBleGVjdXRhYmxlLCBidXQgbm90IHJ1biBmcm9tIGEgZGVmYXVsdCBrc2VsZnRlc3QgaW52b2NhdGlvbi5cbitURVNUX1BST0dTX0VYVEVOREVEICs9IGh3cG9pc29uLXBhbmljLnNoXG4rXG4gVEVTVF9GSUxFUyA6PSB0ZXN0X3ZtYWxsb2Muc2hcbiBURVNUX0ZJTEVTICs9IHRlc3RfaG1tLnNoXG4gVEVTVF9GSUxFUyArPSB2YV9oaWdoX2FkZHJfc3dpdGNoLnNoXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHdwb2lzb24tcGFuaWMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9od3BvaXNvbi1wYW5pYy5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hYWZjMDZlODk1ZDAxZFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHdwb2lzb24tcGFuaWMuc2hcbkBAIC0wLDAgKzEsMjQ5IEBAXG4rIyEvYmluL2Jhc2hcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI1xuKyMgVmVyaWZ5IHZtLnBhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmUgYnkgaW5qZWN0aW5nIGEgaHdwb2lzb25cbisjIGVycm9yIG9uIGEga2VybmVsLW93bmVkIHBhZ2UgYW5kIGNvbmZpcm1pbmcgdGhlIGtlcm5lbCBwYW5pY3MuXG4rI1xuKyMgVGhyZWUgXCJraW5kc1wiIG9mIGtlcm5lbC1vd25lZCBwYWdlIGNhbiBiZSB0YXJnZXRlZCwgc2VsZWN0YWJsZSB2aWEgdGhlXG4rIyBmaXJzdCBwb3NpdGlvbmFsIGFyZ3VtZW50IChkZWZhdWx0OiByb2RhdGEpOlxuKyNcbisjICAgcm9kYXRhICAtIGEgUEdfcmVzZXJ2ZWQgcGFnZSBpbiB0aGUga2VybmVsIHJvZGF0YSByYW5nZVxuKyMgICAgICAgICAgICAgKHNvdXJjZWQgZnJvbSAvcHJvYy9pb21lbSBcIktlcm5lbCByb2RhdGFcIikuICBFeGVyY2lzZXNcbisjICAgICAgICAgICAgIG1lbW9yeV9mYWlsdXJlKCkgLVx1MDAzZSBnZXRfYW55X3BhZ2UoKSBvbiBhIFBhZ2VSZXNlcnZlZCBwYWdlLlxuKyNcbisjICAgc2xhYiAgICAtIGEgc2xhYiBwYWdlIGZvdW5kIHZpYSAvcHJvYy9rcGFnZWZsYWdzIChLUEZfU0xBQikuXG4rIyAgICAgICAgICAgICBFeGVyY2lzZXMgbWVtb3J5X2ZhaWx1cmUoKSAtXHUwMDNlIGdldF9hbnlfcGFnZSgpIG9uIGEgbm9uXG4rIyAgICAgICAgICAgICBQR19yZXNlcnZlZCBrZXJuZWwtb3duZWQgcGFnZS4gIFRoaXMgcGF0aCBpcyB3aGF0IGNhdGNoZXNcbisjICAgICAgICAgICAgIHJlZ3Jlc3Npb25zIHdoZXJlIGdldF9hbnlfcGFnZSgpIGNvbGxhcHNlcyBrZXJuZWwtb3duZWRcbisjICAgICAgICAgICAgIHBhZ2VzIGludG8gYSB0cmFuc2llbnQgLUVJTyBpbnN0ZWFkIG9mIC1FTk9UUkVDT1ZFUkFCTEUuXG4rI1xuKyMgICBwZ3RhYmxlIC0gYSBwYWdlLXRhYmxlIHBhZ2UgZm91bmQgdmlhIC9wcm9jL2twYWdlZmxhZ3MgKEtQRl9QR1RBQkxFKS5cbisjICAgICAgICAgICAgIFNhbWUgcGF0aCBhcyBzbGFiLCBkaWZmZXJlbnQgcGFnZSB0eXBlLlxuKyNcbisjIFRoaXMgdGVzdCBpcyBERVNUUlVDVElWRTogYSBzdWNjZXNzZnVsIHJ1biBjcmFzaGVzIHRoZSBrZXJuZWwuICBJdCBpc1xuKyMgbWVhbnQgdG8gYmUgZXhlY3V0ZWQgaW5zaWRlIGEgZGlzcG9zYWJsZSBWTSAoZS5nLiB2aXJ0bWUtbmcpIHdpdGggYVxuKyMgc2VyaWFsIGNvbnNvbGUgY2FwdHVyZWQgYnkgdGhlIGhhcm5lc3MuICBJdCBpcyBza2lwcGVkIHVubGVzcyB0aGVcbisjIGNhbGxlciBvcHRzIGluIHZpYSBSVU5fREVTVFJVQ1RJVkU9MS5cbisjXG4rIyBUZXN0IHBhc3NlcyBleHRlcm5hbGx5OiB0aGUga2VybmVsIG11c3QgcGFuaWMgd2l0aFxuKyMgICBcIk1lbW9yeSBmYWlsdXJlOiBcdTAwM2NwZm5cdTAwM2U6IHVucmVjb3ZlcmFibGUgcGFnZVwiXG4rIyBBIHJldHVybiBmcm9tIHRoZSBpbmplY3QgbWVhbnMgbm8gcGFuaWMgZmlyZWQ6IHRoYXQgaXMgYSBmYWlsdXJlLFxuKyMgdW5sZXNzIHRoZSB0YXJnZXQgUEZOIHJhY2VkIHRvIGEgZGlmZmVyZW50IHBhZ2UgdHlwZSBiZWZvcmUgaW5qZWN0aW9uLFxuKyMgaW4gd2hpY2ggY2FzZSB0aGUgcnVuIGlzIGluY29uY2x1c2l2ZSBhbmQgaXMgc2tpcHBlZC5cbisjXG4rIyBBdXRob3I6IEJyZW5vIExlaXRhbyBcdTAwM2NsZWl0YW9AZGViaWFuLm9yZ1x1MDAzZVxuK1xuK3NldCAtdVxuK1xuK2tzZnRfc2tpcD00XG4rc3lzY3RsX3BhdGg9L3Byb2Mvc3lzL3ZtL3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmVcbitpbmplY3RfcGF0aD0vc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9oYXJkX29mZmxpbmVfcGFnZVxuK2twYWdlZmxhZ3NfcGF0aD0vcHJvYy9rcGFnZWZsYWdzXG4rdW5wb2lzb25fcGF0aD0vc3lzL2tlcm5lbC9kZWJ1Zy9od3BvaXNvbi91bnBvaXNvbi1wZm5cbitcbisjIC9wcm9jL2twYWdlZmxhZ3MgYml0IHBvc2l0aW9ucyAoc2VlIGluY2x1ZGUvdWFwaS9saW51eC9rZXJuZWwtcGFnZS1mbGFncy5oKVxuK0tQRl9TTEFCPTdcbitLUEZfQ09NUE9VTkRfVEFJTD0xNlxuK0tQRl9IV1BPSVNPTj0xOVxuK0tQRl9OT1BBR0U9MjBcbitLUEZfUEdUQUJMRT0yNlxuK0tQRl9SRVNFUlZFRD0zMlxuK1xuK3BhZ2VzaXplPSQoZ2V0Y29uZiBQQUdFX1NJWkUpXG4rXG4ra2luZD0kezE6LXJvZGF0YX1cbitcbitrc2Z0X3ByaW50KCkgeyBlY2hvIFwiIyAkKlwiOyB9XG4ra3NmdF9leGl0X3NraXAoKSB7IGtzZnRfcHJpbnQgXCIkKlwiOyBleGl0IFwiJGtzZnRfc2tpcFwiOyB9XG4ra3NmdF9leGl0X2ZhaWwoKSB7IGVjaG8gXCJub3Qgb2sgMSAkKlwiOyBleGl0IDE7IH1cbitcbitpZiBbIFwiJChpZCAtdSlcIiAtbmUgMCBdOyB0aGVuXG4rXHRrc2Z0X2V4aXRfc2tpcCBcIm11c3QgcnVuIGFzIHJvb3RcIlxuK2ZpXG4rXG4raWYgWyAhIC13IFwiJHN5c2N0bF9wYXRoXCIgXTsgdGhlblxuK1x0a3NmdF9leGl0X3NraXAgXCIkc3lzY3RsX3BhdGggbm90IHByZXNlbnQgKGtlcm5lbCB3aXRob3V0IHRoZSBzeXNjdGw/KVwiXG4rZmlcbitcbitpZiBbICEgLXcgXCIkaW5qZWN0X3BhdGhcIiBdOyB0aGVuXG4rXHRrc2Z0X2V4aXRfc2tpcCBcIiRpbmplY3RfcGF0aCBub3QgcHJlc2VudCAobm8gTUVNT1JZX0hPVFBMVUc/KVwiXG4rZmlcbitcbitpZiBbIFwiJHtSVU5fREVTVFJVQ1RJVkU6LTB9XCIgIT0gXCIxXCIgXTsgdGhlblxuK1x0a3NmdF9leGl0X3NraXAgXCJkZXN0cnVjdGl2ZSB0ZXN0OyByZS1ydW4gd2l0aCBSVU5fREVTVFJVQ1RJVkU9MSBpbnNpZGUgYSBkaXNwb3NhYmxlIFZNXCJcbitmaVxuK1xuKyMgUGljayBhIFBGTiBpbnNpZGUgdGhlIGtlcm5lbCBpbWFnZSByb2RhdGEgcmVnaW9uIG9mIC9wcm9jL2lvbWVtLlxuKyMgVGhpcyBpcyBwcmVmZXJyZWQgb3ZlciBhIHRvcC1sZXZlbCBcIlJlc2VydmVkXCIgZW50cnkgYmVjYXVzZSB0b3AtbGV2ZWxcbisjIFJlc2VydmVkIHJhbmdlcyBhcmUgb2Z0ZW4gZmlybXdhcmUgaG9sZXMgdGhhdCBoYXZlIG5vIGJhY2tpbmcgc3RydWN0XG4rIyBwYWdlOyBwZm5fdG9fb25saW5lX3BhZ2UoKSByZXR1cm5zIE5VTEwgb24gdGhvc2UgYW5kIG1lbW9yeV9mYWlsdXJlKClcbisjIGJhaWxzIG91dCB3aXRoIC1FTlhJTyBiZWZvcmUgcmVhY2hpbmcgdGhlIHBhbmljIHBhdGguXG4rI1xuKyMgXCJLZXJuZWwgcm9kYXRhXCIgaXMgcmVwb3J0ZWQgYXMgYSBzdWItcmVzb3VyY2Ugb2YgXCJTeXN0ZW0gUkFNXCIgb24gZXZlcnlcbisjIG1ham9yIGFyY2hpdGVjdHVyZSwgd2hpY2ggZ3VhcmFudGVlczpcbisjICAgLSB0aGUgUEZOIGlzIGJhY2tlZCBieSBzdHJ1Y3QgcGFnZSAod2l0aGluIGFuIG9ubGluZSBtZW1vcnkgcmFuZ2UpO1xuKyMgICAtIFBHX3Jlc2VydmVkIGlzIHNldCBvbiB0aGUgcGFnZSAoa2VybmVsIGltYWdlIGFyZWEpO1xuKyMgICAtIHRoZSBtZW1vcnkgaXMgcmVhZC1vbmx5LCBzbyBzZXR0aW5nIFBHX2h3cG9pc29uIG9uIGl0IGRvZXMgbm90XG4rIyAgICAgY29ycnVwdCB3cml0YWJsZSBrZXJuZWwgc3RhdGUgaWYgdGhlIHBhbmljIHNvbWVob3cgZG9lcyBub3QgZmlyZS5cbisjXG4rIyAvcHJvYy9pb21lbSBlbnRyaWVzIGxvb2sgbGlrZSAoaW5kZW50ZWQgZm9yIHN1Yi1yZXNvdXJjZXMpOlxuKyMgICAgIFwiICAwMjUwMDAwMC0wMmZmZmZmZiA6IEtlcm5lbCByb2RhdGFcIlxuK3BpY2tfcm9kYXRhX3BoeXNfYWRkcigpIHtcbitcdGF3ayAtdiBwYWdlc2l6ZT1cIiQoZ2V0Y29uZiBQQUdFX1NJWkUpXCIgJ1xuK1x0IyBDb252ZXJ0IGEgaGV4IHN0cmluZyB0byBhIG51bWJlciB3aXRob3V0IHJlbHlpbmcgb24gdGhlIGdhd2stb25seVxuK1x0IyBzdHJ0b251bSgpLiAgbWF3ayBsYWNrcyBpdCBhbmQgd291bGQgb3RoZXJ3aXNlIHNwdXJpb3VzbHkgc2tpcFxuK1x0IyB0aGlzIHRlc3Qgb24gZGlzdHJvcyB0aGF0IHNoaXAgbWF3ayBhcyAvdXNyL2Jpbi9hd2suXG4rXHRmdW5jdGlvbiBoZXgybnVtKHMsICAgbiwgaSwgYywgdikge1xuK1x0XHRuID0gMFxuK1x0XHRmb3IgKGkgPSAxOyBpIFx1MDAzYz0gbGVuZ3RoKHMpOyBpKyspIHtcbitcdFx0XHRjID0gdG9sb3dlcihzdWJzdHIocywgaSwgMSkpXG4rXHRcdFx0diA9IGluZGV4KFwiMDEyMzQ1Njc4OWFiY2RlZlwiLCBjKSAtIDFcbitcdFx0XHRpZiAodiBcdTAwM2MgMClcbitcdFx0XHRcdHJldHVybiAtMVxuK1x0XHRcdG4gPSBuICogMTYgKyB2XG4rXHRcdH1cbitcdFx0cmV0dXJuIG5cbitcdH1cbitcdC86IEtlcm5lbCByb2RhdGFbWzpzcGFjZTpdXSokLyB7XG4rXHRcdHN1YigvXltbOnNwYWNlOl1dKy8sIFwiXCIpXG4rXHRcdG4gPSBzcGxpdCgkMCwgYSwgL1stIF0vKVxuK1x0XHRzdGFydCA9IGhleDJudW0oYVsxXSlcbitcdFx0ZW5kICAgPSBoZXgybnVtKGFbMl0pXG4rXHRcdGlmIChlbmQgXHUwMDNjPSBzdGFydClcbitcdFx0XHRuZXh0XG4rXHRcdCMgUGFnZS1hbGlnbiB1cHdhcmQgYW5kIGVtaXQgdGhlIGZpcnN0IGJ5dGUgb2YgdGhhdCBwYWdlLlxuK1x0XHRwZm4gPSBpbnQoKHN0YXJ0ICsgcGFnZXNpemUgLSAxKSAvIHBhZ2VzaXplKVxuK1x0XHRwcmludGYgXCIweCV4XFxuXCIsIHBmbiAqIHBhZ2VzaXplXG4rXHRcdGV4aXQgMFxuK1x0fVxuK1x0JyAvcHJvYy9pb21lbVxuK31cbitcbisjIFdhbGsgL3Byb2Mva3BhZ2VmbGFncyBhbmQgcmV0dXJuIHRoZSBwaHlzIGFkZHIgb2YgdGhlIGZpcnN0IFBGTiB0aGF0XG4rIyBoYXMgYml0ICQxIHNldCwgd2l0aCBLUEZfSFdQT0lTT04sIEtQRl9OT1BBR0UgYW5kIEtQRl9DT01QT1VORF9UQUlMXG4rIyBhbGwgY2xlYXIgKHNvIHdlIGF0dGFjayBhIHJlYWwsIG5vbi10YWlsLCBub3QtYWxyZWFkeS1wb2lzb25lZCBwYWdlKS5cbisjXG4rIyBXZSBza2lwIHRoZSBmaXJzdCAxNiBNaUIgb2YgUEZOcyB0byBzdGVwIHBhc3QgbG93LW1lbW9yeSBzcGVjaWFsXG4rIyByYW5nZXMgKEJJT1MvRUZJL0FDUEkvZXRjLikgdGhhdCBvZnRlbiBhcmUgUEdfcmVzZXJ2ZWQgYW5kIHdvdWxkIG5vdFxuKyMgZXhoaWJpdCB0aGUgc2xhYi9wZ3RhYmxlIHR5cGUgd2UgYXJlIGxvb2tpbmcgZm9yLlxuK3BpY2tfa3BhZ2VmbGFnc19waHlzX2FkZHIoKSB7XG4rXHRsb2NhbCB3YW50X2JpdD0kMVxuK1x0bG9jYWwgcGFnZXNpemUgc2tpcF9wZm5cbitcbitcdFsgLXIgXCIka3BhZ2VmbGFnc19wYXRoXCIgXSB8fCByZXR1cm5cbitcbitcdHBhZ2VzaXplPSQoZ2V0Y29uZiBQQUdFX1NJWkUpXG4rXHRza2lwX3Bmbj0kKCgoMTYgKiAxMDI0ICogMTAyNCkgLyBwYWdlc2l6ZSkpXG4rXG4rXHRvZCAtQW4gLXR4OCAtdiAtdzggLWogXCIkKChza2lwX3BmbiAqIDgpKVwiIFwiJGtwYWdlZmxhZ3NfcGF0aFwiIDJcdTAwM2UvZGV2L251bGwgfCBcXFxuK1x0YXdrIC12IHdhbnRfYml0PVwiJHdhbnRfYml0XCIgXFxcbitcdCAgICAtdiBod3BfYml0PVwiJEtQRl9IV1BPSVNPTlwiIFxcXG4rXHQgICAgLXYgbm9wYWdlX2JpdD1cIiRLUEZfTk9QQUdFXCIgXFxcbitcdCAgICAtdiB0YWlsX2JpdD1cIiRLUEZfQ09NUE9VTkRfVEFJTFwiIFxcXG4rXHQgICAgLXYgYmFzZV9wZm49XCIkc2tpcF9wZm5cIiBcXFxuK1x0ICAgIC12IHBhZ2VzaXplPVwiJHBhZ2VzaXplXCIgJ1xuK1x0IyBUZXN0IHdoZXRoZXIgYml0IFwiYlwiIGlzIHNldCBpbiB0aGUgMTYtaGV4LWRpZ2l0IHZhbHVlIFwiaGV4XCIuXG4rXHQjIERvbmUgd2l0aCBzdWJzdHJpbmcgKyBwZXItZGlnaXQgbG9va3VwIHNvIHdlIG5ldmVyIHJlbHkgb24gYXdrXG4rXHQjIGJpdHdpc2Ugb3BlcmF0b3JzIChtYXdrIGxhY2tzIHRoZW0pLCA2NC1iaXQgRlAgcHJlY2lzaW9uIG9yIHRoZVxuK1x0IyBnYXdrLW9ubHkgc3RydG9udW0oKS5cbitcdGZ1bmN0aW9uIGJpdF9zZXQoaGV4LCBiLCAgICBkaSwgYmksIGMsIHYpIHtcbitcdFx0ZGkgPSBpbnQoYiAvIDQpXG4rXHRcdGJpID0gYiAtIGRpICogNFxuK1x0XHRjID0gc3Vic3RyKGhleCwgbGVuZ3RoKGhleCkgLSBkaSwgMSlcbitcdFx0diA9IGluZGV4KFwiMDEyMzQ1Njc4OWFiY2RlZlwiLCB0b2xvd2VyKGMpKSAtIDFcbitcdFx0aWYgKGJpID09IDApIHJldHVybiAodiAlIDIpID09IDFcbitcdFx0aWYgKGJpID09IDEpIHJldHVybiBpbnQodiAvIDIpICUgMiA9PSAxXG4rXHRcdGlmIChiaSA9PSAyKSByZXR1cm4gaW50KHYgLyA0KSAlIDIgPT0gMVxuK1x0XHRyZXR1cm4gaW50KHYgLyA4KSAlIDIgPT0gMVxuK1x0fVxuK1x0e1xuK1x0XHRnc3ViKC9eW1s6c3BhY2U6XV0rLywgXCJcIilcbitcdFx0aCA9ICQxXG4rXHRcdGlmIChiaXRfc2V0KGgsIHdhbnRfYml0KSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFiaXRfc2V0KGgsIGh3cF9iaXQpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIWJpdF9zZXQoaCwgbm9wYWdlX2JpdCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhYml0X3NldChoLCB0YWlsX2JpdCkpIHtcbitcdFx0XHRwZm4gPSBiYXNlX3BmbiArIE5SIC0gMVxuK1x0XHRcdHByaW50ZiBcIjB4JXhcXG5cIiwgcGZuICogcGFnZXNpemVcbitcdFx0XHRleGl0IDBcbitcdFx0fVxuK1x0fVxuK1x0J1xuK31cbitcbisjIFJldHVybiAwIGlmIC9wcm9jL2twYWdlZmxhZ3MgYml0ICQyIGlzIHNldCBmb3IgUEZOICQxLCAxIGlmIGl0IGlzXG4rIyBjbGVhciwgb3IgMiBpZiB0aGUgd29yZCBjYW5ub3QgYmUgcmVhZC4gIFVzZWQgdG8gcmUtY29uZmlybSB0aGUgdGFyZ2V0XG4rIyBwYWdlIHR5cGUgYWZ0ZXIgYSBub24tcGFuaWNraW5nIGluamVjdC5cbitrcGFnZWZsYWdzX2JpdF9zZXQoKSB7XG4rXHRsb2NhbCB3b3JkXG4rXG4rXHR3b3JkPSQob2QgLUFuIC10eDggLXYgLWogXCIkKCgkMSAqIDgpKVwiIC1OIDggXCIka3BhZ2VmbGFnc19wYXRoXCIgMlx1MDAzZS9kZXYvbnVsbCB8IHRyIC1kICdbOnNwYWNlOl0nKVxuK1x0WyAtbiBcIiR3b3JkXCIgXSB8fCByZXR1cm4gMlxuK1x0KCggKDE2IyR3b3JkIFx1MDAzZVx1MDAzZSAkMikgXHUwMDI2IDEgKSlcbit9XG4rXG4rIyBCZXN0LWVmZm9ydDogZHJvcCB0aGUgUEdfaHdwb2lzb24gbWFya2VyIHNldCBieSB0aGUgaW5qZWN0IHNvIGEgZmFpbGVkXG4rIyBydW4gZG9lcyBub3QgbGVhdmUgYSBwb2lzb25lZCBwYWdlIGJlaGluZC4gIGhhcmRfb2ZmbGluZV9wYWdlKCkgaW5qZWN0c1xuKyMgd2l0aCBNRl9TV19TSU1VTEFURUQsIHNvIHRoZSBwYWdlIHN0YXlzIHVucG9pc29uYWJsZSB0aHJvdWdoIHRoZVxuKyMgaHdwb2lzb24gZGVidWdmcyBpbnRlcmZhY2UgKG5lZWRzIENPTkZJR19IV1BPSVNPTl9JTkpFQ1QgKyBkZWJ1Z2ZzKS5cbit0cnlfdW5wb2lzb24oKSB7XG4rXHRbIC13IFwiJHVucG9pc29uX3BhdGhcIiBdIHx8IHJldHVybiAwXG4rXHRlY2hvIFwiJDFcIiBcdTAwM2UgXCIkdW5wb2lzb25fcGF0aFwiIDJcdTAwM2UvZGV2L251bGwgfHwgdHJ1ZVxuK31cbitcbitjYXNlIFwiJGtpbmRcIiBpblxuK3JvZGF0YSlcbitcdHBoeXNfYWRkcj0kKHBpY2tfcm9kYXRhX3BoeXNfYWRkcilcbitcdHJlY2hlY2tfYml0PSRLUEZfUkVTRVJWRURcbitcdG1pc3NpbmdfbXNnPSdubyBcIktlcm5lbCByb2RhdGFcIiBlbnRyeSBpbiAvcHJvYy9pb21lbSdcbitcdDs7XG4rc2xhYilcbitcdHBoeXNfYWRkcj0kKHBpY2tfa3BhZ2VmbGFnc19waHlzX2FkZHIgXCIkS1BGX1NMQUJcIilcbitcdHJlY2hlY2tfYml0PSRLUEZfU0xBQlxuK1x0bWlzc2luZ19tc2c9XCJubyB1c2FibGUgc2xhYiBQRk4gZm91bmQgaW4gJGtwYWdlZmxhZ3NfcGF0aFwiXG4rXHQ7O1xuK3BndGFibGUpXG4rXHRwaHlzX2FkZHI9JChwaWNrX2twYWdlZmxhZ3NfcGh5c19hZGRyIFwiJEtQRl9QR1RBQkxFXCIpXG4rXHRyZWNoZWNrX2JpdD0kS1BGX1BHVEFCTEVcbitcdG1pc3NpbmdfbXNnPVwibm8gdXNhYmxlIHBhZ2UtdGFibGUgUEZOIGZvdW5kIGluICRrcGFnZWZsYWdzX3BhdGhcIlxuK1x0OztcbisqKVxuK1x0a3NmdF9leGl0X2ZhaWwgXCJ1bmtub3duIGtpbmQgJyRraW5kJyAoZXhwZWN0ZWQ6IHJvZGF0YXxzbGFifHBndGFibGUpXCJcbitcdDs7XG4rZXNhY1xuK1xuK2lmIFsgLXogXCIkcGh5c19hZGRyXCIgXTsgdGhlblxuK1x0a3NmdF9leGl0X3NraXAgXCIkbWlzc2luZ19tc2dcIlxuK2ZpXG4rXG4ra3NmdF9wcmludCBcImVuYWJsaW5nICRzeXNjdGxfcGF0aFwiXG4rcHJpb3I9JChjYXQgXCIkc3lzY3RsX3BhdGhcIilcbitlY2hvIDEgXHUwMDNlIFwiJHN5c2N0bF9wYXRoXCIgfHwga3NmdF9leGl0X2ZhaWwgXCJmYWlsZWQgdG8gZW5hYmxlIHN5c2N0bFwiXG4rXG4rcGZuPSQoKHBoeXNfYWRkciAvIHBhZ2VzaXplKSlcbitrc2Z0X3ByaW50IFwiaW5qZWN0aW5nIGh3cG9pc29uIGF0IHBoeXMgMHgkKHByaW50ZiAnJXgnIFwiJHBoeXNfYWRkclwiKSAocGZuIDB4JChwcmludGYgJyV4JyBcIiRwZm5cIiksIGtpbmQ9JGtpbmQpXCJcbitrc2Z0X3ByaW50IFwiZXhwZWN0aW5nIGtlcm5lbCBwYW5pYzogJ01lbW9yeSBmYWlsdXJlOiBcdTAwM2NwZm5cdTAwM2U6IHVucmVjb3ZlcmFibGUgcGFnZSdcIlxuK1xuKyMgQSBzdWNjZXNzZnVsIHJ1biBuZXZlciByZXR1cm5zIGZyb20gdGhlIGluamVjdCAtLSBpdCBwYW5pY3MgdGhlIGtlcm5lbC5cbisjIFJlYWNoaW5nIHRoZSBjb2RlIGJlbG93IHRoZXJlZm9yZSBtZWFucyBubyBwYW5pYyBmaXJlZC4gIE5vdGUgd2hldGhlclxuKyMgdGhlIHdyaXRlIGl0c2VsZiBzdWNjZWVkZWQsIHRoZW4gcHV0IHRoZSBtYWNoaW5lIGJhY2s6IHJlc3RvcmUgdGhlXG4rIyBzeXNjdGwgYW5kIGJlc3QtZWZmb3J0IHVucG9pc29uIHRoZSBwYWdlIHdlIGp1c3QgbWFya2VkLlxuK2lmIGVjaG8gXCIkcGh5c19hZGRyXCIgXHUwMDNlIFwiJGluamVjdF9wYXRoXCI7IHRoZW5cbitcdHZlcmRpY3Q9XCJpbmplY3QgcmV0dXJuZWQgd2l0aG91dCBwYW5pYzsgc3lzY3RsIGluZWZmZWN0aXZlXCJcbitlbHNlXG4rXHR2ZXJkaWN0PVwiaW5qZWN0IGZhaWxlZCBiZWZvcmUgcmVhY2hpbmcgdGhlIHBhbmljIHBhdGhcIlxuK2ZpXG4rXG4rZWNobyBcIiRwcmlvclwiIFx1MDAzZSBcIiRzeXNjdGxfcGF0aFwiXG4rdHJ5X3VucG9pc29uIFwiJHBmblwiXG4rXG4rIyBUaGUgcGFnZSB0eXBlIGNhbiBjaGFuZ2UgYmV0d2VlbiBzZWxlY3Rpb24gYW5kIGluamVjdGlvbiAoZS5nLiBhIHNsYWJcbisjIG9yIHBhZ2UtdGFibGUgcGFnZSBpcyBmcmVlZCBhbmQgcmV1c2VkKS4gIE9ubHkgdHJlYXQgYSBtaXNzaW5nIHBhbmljIGFzXG4rIyBhIGZhaWx1cmUgaWYgdGhlIHRhcmdldCBQRk4gaXMgc3RpbGwgdGhlIGtlcm5lbC1vd25lZCB0eXBlIHdlIGFpbWVkIGF0O1xuKyMgaWYgaXQgcmFjZWQgdG8gYW5vdGhlciB0eXBlIHRoZSBydW4gaXMgaW5jb25jbHVzaXZlLCBzbyBza2lwIGluc3RlYWQuXG4ra3BhZ2VmbGFnc19iaXRfc2V0IFwiJHBmblwiIFwiJHJlY2hlY2tfYml0XCJcbitjYXNlICQ/IGluXG4rMClcdGtzZnRfZXhpdF9mYWlsIFwiJHZlcmRpY3QgKHBhZ2Ugc3RpbGwgJGtpbmQpXCIgOztcbisxKVx0a3NmdF9leGl0X3NraXAgXCJ0YXJnZXQgUEZOIG5vIGxvbmdlciAka2luZDsgcmFjZWQgYmVmb3JlIGluamVjdCwgaW5jb25jbHVzaXZlXCIgOztcbisqKVx0a3NmdF9leGl0X2ZhaWwgXCIkdmVyZGljdCAoY291bGQgbm90IHJlY29uZmlybSBwYWdlIHR5cGUgdmlhICRrcGFnZWZsYWdzX3BhdGgpXCIgOztcbitlc2FjXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMzowNToyMS45ODI0ODYxMjNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTQ0MjQ4NjU4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFwiUGFuaWMgb24gVW5yZWNvdmVyYWJsZSBNZW1vcnkgRmFpbHVyZVwiIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGludHJvZHVjZXMgYSBuZXcgc3lzY3RsLCBgcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZWAuIFRoZSBnb2FsIGlzIHRvIG1ha2UgdGhlIGtlcm5lbCBwYW5pYyB3aGVuIGEgbWVtb3J5IGZhaWx1cmUgb2NjdXJzIG9uIGtlcm5lbC1vd25lZCBwYWdlcyB0aGF0IHRoZSByZWd1bGFyIGVycm9yIGhhbmRsZXIgY2FuJ3QgZml4LiBUaGUgY29kZSBtb2RpZmllcyBgbW0vbWVtb3J5LWZhaWx1cmUuY2AgYW5kIGFkZHMgYSBzZWxmLXRlc3QsIHdoaWNoIGlzIGdvb2QuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGluIHRoaXMgbmV3IGBpc19rZXJuZWxfb3duZWRfcGFnZSgpYCBmdW5jdGlvbi4gVGhpcyBpcyBrZXksIGFzIGl0IGlkZW50aWZpZXMgaWYgdGhlIHBhZ2UgaXMgdHJ1bHkga2VybmVsLXNwYWNlLCBsb29raW5nIGZvciBgUGFnZVJlc2VydmVkYCwgYFBhZ2VTbGFiYCwgYFBhZ2VUYWJsZWAsIG9yIGBQYWdlTGFyZ2VLbWFsbG9jYC4gSWYgaXQgaXMgaW5kZWVkIGEga2VybmVsIHBhZ2UsIHRoZW4gYGdldF9hbnlfcGFnZSgpYCByZXR1cm5zIGAtRU5PVFJFQ09WRVJBQkxFYC4gVGhlIGV4aXN0aW5nIGBtZW1vcnlfZmFpbHVyZSgpYCBmdW5jdGlvbiB0aGVuIHByb2Nlc3NlcyB0aGlzIGVycm9yIGNvZGUgYW5kIGNhbGxzIGBhY3Rpb25fcmVzdWx0KClgLiBJdCdzIGBhY3Rpb25fcmVzdWx0KClgIHRoYXQgaGFzIGJlZW4gdXBkYXRlZCB0byBjaGVjayB0aGlzIG5ldyBgcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZmAgZnVuY3Rpb24sIGFuZCBpZiBpdCByZXR1cm5zIHRydWUsIHRoZW4gcGFuaWMuXG5cblRoaXMgZGlyZWN0bHkgdG91Y2hlcyBjb3JlIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nLCBzbyByZWFjaGFiaWxpdHkgaXMgY3JpdGljYWwuIEknbSB0aGlua2luZyB0aGlzIGNvdWxkIGJlIHRyaWdnZXJlZCBieSBnZW51aW5lIGhhcmR3YXJlIG1lbW9yeSBlcnJvcnMsIG9mIGNvdXJzZSwgb3IgZXZlbiBieSBpbmplY3RpbmcgZmF1bHRzIHZpYSBzb2Z0d2FyZS4gYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIGltbWVkaWF0ZWx5IGNvbWVzIHRvIG1pbmQsIGJ1dCB0aGF0IHVzdWFsbHkgb3BlcmF0ZXMgb24gdXNlci1zcGFjZSBwYWdlcy4gSG93ZXZlciwgbWF5YmUgYC9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2hhcmRfb2ZmbGluZV9wYWdlYCBvciBzb21ldGhpbmcgaW4gZGVidWdmcyBjb3VsZCBiZSB1c2VkIHRvIGluamVjdCBpdCBvbnRvIGtlcm5lbCBwYWdlcy4gVGhlIHNlbGYtdGVzdCwgaW4gZmFjdCwgZG9lcyB1c2UgdGhhdCBgL3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvaGFyZF9vZmZsaW5lX3BhZ2VgIG1ldGhvZCwgd2hpY2ggaXMgYSBnb29kIHNpZ24uXG5cblRoZSBxdWVzdGlvbiB0aGVuIGlzLCBob3cgZG8gd2UgZnV6eiB0aGlzPyBTeXprYWxsZXIgc2VlbXMgbGlrZSB0aGUgb2J2aW91cyBjaG9pY2UuIEl0IGhhcyBgc3l6X2luamVjdF9od3BvaXNvbmAgb3Igc29tZXRoaW5nIHNpbWlsYXIgdGhhdCBjb3VsZCB0YXJnZXQgdGhpcywgYW5kIGl0ICpjYW4qIHdyaXRlIHRvIGAvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9oYXJkX29mZmxpbmVfcGFnZWAuIEhvd2V2ZXIsIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IFN5emthbGxlciBkb2Vzbid0IHR5cGljYWxseSBmb2N1cyBvbiBoYXJkd2FyZSBlcnJvciBpbmplY3Rpb24gdW5sZXNzIHNwZWNpZmljYWxseSBjb25maWd1cmVkLiBCdXQgaXQgZG9lcyBoYXZlIHNvbWUgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIHN1cHBvcnQuIFRoaXMgaXMgZ29vZCB0byBrZWVwIGluIG1pbmQuXG5cbldhaXQsIEkganVzdCByZW1lbWJlcmVkIHRoZSBkZWZhdWx0OiB0aGUgc3lzY3RsIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQhIGBzeXNjdGxfcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZmAgZGVmYXVsdHMgdG8gemVybywgc28gdG8gZWZmZWN0aXZlbHkgZnV6eiB0aGlzLCB3ZSdsbCAqaGF2ZSogdG8gZW5hYmxlIHRoYXQgc3lzY3RsIGZpcnN0LiBMdWNraWx5LCBTeXprYWxsZXIgKmNhbiogd3JpdGUgdG8gYC9wcm9jL3N5cy92bS9wYW5pY19vbl91bnJlY292ZXJhYmxlX21lbW9yeV9mYWlsdXJlYC5cblxuSSBzaG91bGQgcHJvYmFibHkgZGl2ZSBpbnRvIGBtbS9tZW1vcnktZmFpbHVyZS5jYCBjb2RlIGRpcmVjdGx5IG5vdy4gSSdsbCBuZWVkIHRvIHVzZSBgZ3JlcHBlcmAgdG8gc2VlIGlmIHRoZSBgTUVNT1JZX0ZBSUxVUkVgIGNvbmZpZyBvcHRpb24gaXMgaW52b2x2ZWQgaW4gYW55IG9mIHRoaXMgYXMgd2VsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg5OCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIzOjA1OjUxLjQyNDk3NTE3NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTI5MjU1MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NzAyPWNvbmZpZyBERUZBVUxUX01NQVBfTUlOX0FERFJcXG4tLVxcbm1tL0tjb25maWctNzIwLVxcbm1tL0tjb25maWc6NzIxOmNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXFxubW0vS2NvbmZpZy03MjItXFx0Ym9vbFxcbm1tL0tjb25maWctNzIzLVxcbm1tL0tjb25maWc6NzI0OmNvbmZpZyBNRU1PUllfRkFJTFVSRVxcbm1tL0tjb25maWctNzI1LVxcdGRlcGVuZHMgb24gTU1VXFxubW0vS2NvbmZpZzo3MjY6XFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXFxubW0vS2NvbmZpZy03MjctXFx0Ym9vbCBcXFwiRW5hYmxlIHJlY292ZXJ5IGZyb20gaGFyZHdhcmUgbWVtb3J5IGVycm9yc1xcXCJcXG4tLVxcbm1tL0tjb25maWc9NzM1PWNvbmZpZyBIV1BPSVNPTl9JTkpFQ1RcXG5tbS9LY29uZmlnLTczNi1cXHR0cmlzdGF0ZSBcXFwiSFdQb2lzb24gcGFnZXMgaW5qZWN0b3JcXFwiXFxubW0vS2NvbmZpZzo3Mzc6XFx0ZGVwZW5kcyBvbiBNRU1PUllfRkFJTFVSRSBcXHUwMDI2XFx1MDAyNiBERUJVR19LRVJORUwgXFx1MDAyNlxcdTAwMjYgUFJPQ19GU1xcbm1tL0tjb25maWctNzM4LVxcdHNlbGVjdCBQUk9DX1BBR0VfTU9OSVRPUlxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zz0xNDc9Y29uZmlnIFBBR0VfUE9JU09OSU5HXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnLTE1Ni1cXHQgIE5vdGUgdGhhdCBcXFwicG9pc29uXFxcIiBoZXJlIGlzIG5vdCB0aGUgc2FtZSB0aGluZyBhcyB0aGUgXFxcIkhXUG9pc29uXFxcIlxcbm1tL0tjb25maWcuZGVidWc6MTU3OlxcdCAgZm9yIENPTkZJR19NRU1PUllfRkFJTFVSRS4gVGhpcyBpcyBzb2Z0d2FyZSBwb2lzb25pbmcgb25seS5cXG5tbS9LY29uZmlnLmRlYnVnLTE1OC1cXG4tLVxcbm1tL01ha2VmaWxlPTExMT1vYmotJChDT05GSUdfRE1BUE9PTF9URVNUKSArPSBkbWFwb29sX3Rlc3Qub1xcbm1tL01ha2VmaWxlOjExMjpvYmotJChDT05GSUdfTUVNT1JZX0ZBSUxVUkUpICs9IG1lbW9yeS1mYWlsdXJlLm9cXG5tbS9NYWtlZmlsZS0xMTMtb2JqLSQoQ09ORklHX0hXUE9JU09OX0lOSkVDVCkgKz0gaHdwb2lzb24taW5qZWN0Lm9cXG4tLVxcbm1tL2ludGVybmFsLmg9MTQwMD1zdGF0aWMgaW5saW5lIGJvb2wgbm9kZV9yZWNsYWltX2VuYWJsZWQodm9pZClcXG4tLVxcbm1tL2ludGVybmFsLmgtMTQwOC0gKi9cXG5tbS9pbnRlcm5hbC5oOjE0MDk6I2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxcbm1tL2ludGVybmFsLmgtMTQxMC1pbnQgdW5tYXBfcG9pc29uZWRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgbG9uZyBwZm4sIGJvb2wgbXVzdF9raWxsKTtcXG4tLVxcbm1tL2tzbS5jPTMxNTU9dm9pZCBybWFwX3dhbGtfa3NtKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBybWFwX3dhbGtfY29udHJvbCAqcndjKVxcbi0tXFxubW0va3NtLmMtMzIyMy1cXG5tbS9rc20uYzozMjI0OiNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVcXG5tbS9rc20uYy0zMjI1LS8qXFxuLS1cXG5tbS9tYWR2aXNlLmM9MTMzOT1zdGF0aWMgaW50IG1hZHZpc2Vfdm1hX2JlaGF2aW9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTE0NDMtXFxubW0vbWFkdmlzZS5jOjE0NDQ6I2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxcbm1tL21hZHZpc2UuYy0xNDQ1LS8qXFxuLS1cXG5tbS9tYWR2aXNlLmM9MTUxMT1zdGF0aWMgYm9vbCBpc19tZW1vcnlfZmFpbHVyZShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xNTE1LVxcbm1tL21hZHZpc2UuYzoxNTE2OiNlbmRpZlxcdC8qIENPTkZJR19NRU1PUllfRkFJTFVSRSAqL1xcbm1tL21hZHZpc2UuYy0xNTE3LVxcbi0tXFxubW0vbWFkdmlzZS5jPTE1MTk9bWFkdmlzZV9iZWhhdmlvcl92YWxpZChpbnQgYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTU1MC1cXHRjYXNlIE1BRFZfR1VBUkRfUkVNT1ZFOlxcbm1tL21hZHZpc2UuYzoxNTUxOiNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVcXG5tbS9tYWR2aXNlLmMtMTU1Mi1cXHRjYXNlIE1BRFZfU09GVF9PRkZMSU5FOlxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0yNjE4PUVYUE9SVF9TWU1CT0xfR1BMKG1lbW9yeV9mYWlsdXJlKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2MTktXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjIwOiNkZWZpbmUgTUVNT1JZX0ZBSUxVUkVfRklGT19PUkRFUlxcdDRcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI2MjE6I2RlZmluZSBNRU1PUllfRkFJTFVSRV9GSUZPX1NJWkVcXHQoMSBcXHUwMDNjXFx1MDAzYyBNRU1PUllfRkFJTFVSRV9GSUZPX09SREVSKVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjYyMi1cXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MjYyOD1zdHJ1Y3QgbWVtb3J5X2ZhaWx1cmVfY3B1IHtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI2MjktXFx0REVDTEFSRV9LRklGTyhmaWZvLCBzdHJ1Y3QgbWVtb3J5X2ZhaWx1cmVfZW50cnksXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNjMwOlxcdFxcdCAgICAgIE1FTU9SWV9GQUlMVVJFX0ZJRk9fU0laRSk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNjMxLVxcdHJhd19zcGlubG9ja190IGxvY2s7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTI4NDg9c3RhdGljIGludCBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI4NTktXFx0XFx0LmdmcF9tYXNrID0gR0ZQX1VTRVIgfCBfX0dGUF9NT1ZBQkxFIHwgX19HRlBfUkVUUllfTUFZRkFJTCxcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjI4NjA6XFx0XFx0LnJlYXNvbiA9IE1SX01FTU9SWV9GQUlMVVJFLFxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjg2MS1cXHR9O1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yOTE3LVxcdFxcdHJldCA9IG1pZ3JhdGVfcGFnZXMoXFx1MDAyNnBhZ2VsaXN0LCBhbGxvY19taWdyYXRpb25fdGFyZ2V0LCBOVUxMLFxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjkxODpcXHRcXHRcXHQodW5zaWduZWQgbG9uZylcXHUwMDI2bXRjLCBNSUdSQVRFX1NZTkMsIE1SX01FTU9SWV9GQUlMVVJFLCBOVUxMKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI5MTktXFx0XFx0aWYgKCFyZXQpIHtcXG4tLVxcbm1tL21pZ3JhdGUuYz0xMTkwPXN0YXRpYyB2b2lkIG1pZ3JhdGVfZm9saW9fZG9uZShzdHJ1Y3QgZm9saW8gKnNyYyxcXG4tLVxcbm1tL21pZ3JhdGUuYy0xMTk2LVxcbm1tL21pZ3JhdGUuYzoxMTk3OlxcdGlmIChyZWFzb24gIT0gTVJfTUVNT1JZX0ZBSUxVUkUpXFxubW0vbWlncmF0ZS5jLTExOTgtXFx0XFx0LyogV2UgcmVsZWFzZSB0aGUgcGFnZSBpbiBwYWdlX2hhbmRsZV9wb2lzb24uICovXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NzYwOT1FWFBPUlRfU1lNQk9MKGlzX2ZyZWVfYnVkZHlfcGFnZSk7XFxubW0vcGFnZV9hbGxvYy5jLTc2MTAtXFxubW0vcGFnZV9hbGxvYy5jOjc2MTE6I2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxcbm1tL3BhZ2VfYWxsb2MuYy03NjEyLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRfdG9fZnJlZV9saXN0KHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgem9uZSAqem9uZSxcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jPTE4MD1ib29sIHBhZ2Vfdm1hX21hcHBlZF93YWxrKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTMzNC1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzozMzU6I2lmZGVmIENPTkZJR19NRU1PUllfRkFJTFVSRVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTMzNi0vKipcXG4tLVxcbm1tL3Nob3dfbWVtLmM9NDA1PXZvaWQgX19zaG93X21lbSh1bnNpZ25lZCBpbnQgZmlsdGVyLCBub2RlbWFza190ICpub2RlbWFzaywgaW50IG1heF96b25lX2lkeClcXG4tLVxcbm1tL3Nob3dfbWVtLmMtNDI3LSNlbmRpZlxcbm1tL3Nob3dfbWVtLmM6NDI4OiNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVcXG5tbS9zaG93X21lbS5jLTQyOS1cXHRwcmludGsoXFxcIiVsdSBwYWdlcyBod3BvaXNvbmVkXFxcXG5cXFwiLCBhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZudW1fcG9pc29uZWRfcGFnZXMpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjM6MDU6NTEuOTM3OTA3ODg3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk3MzU2NDA2MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBBbmFseXNpczogVW5yZWNvdmVyYWJsZSBNZW1vcnkgRmFpbHVyZSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzeXNjdGwsIGBwYW5pY19vbl91bnJlY292ZXJhYmxlX21lbW9yeV9mYWlsdXJlYCwgYW5kIG1vZGlmaWVzIGBtZW1vcnlfZmFpbHVyZSgpYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV29ydGggZnV6emluZz9cIiBBYnNvbHV0ZWx5LCB0aGlzIGlzIG5ldyBmdW5jdGlvbmFsaXR5IGluIHRoZSBrZXJuZWwgdGhhdCdzIGRlc2lnbmVkIHRvIHRyaWdnZXIgYSBwYW5pYyB1bmRlciBzcGVjaWZpYyBtZW1vcnkgZmFpbHVyZSBjb25kaXRpb25zLlxuXG5CdXQgd2FpdCwgYSBwYW5pYyBtZWFucyBhIGNyYXNoLCBhbmQgYSBmdXp6ZXIgKndpbGwqIHNlZSB0aGF0LiBUaGUgc3lzY3RsIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQsIHdoaWNoIGlzIGltcG9ydGFudC4gSWYgdGhlIGZ1enplciBlbmFibGVzIGl0LCBhbmQgdGhlbiB0cmlnZ2VycyBhbiB1bnJlY292ZXJhYmxlIG1lbW9yeSBmYWlsdXJlLCBib29tLCBwYW5pYy4gSXMgdGhlIHBhbmljIGEgYnVnPyBObywgaXQncyB0aGUgKmludGVuZGVkKiBiZWhhdmlvciB3aGVuIHRoZSBzeXNjdGwgaXMgc2V0LiBTbywgaWYgdGhlIGZ1enplciBoaXRzIHRoaXMsIGl0J2xsIHJlcG9ydCBhIFwiY3Jhc2gsXCIgYnV0IGl0J3MgcG90ZW50aWFsbHkgYSBmYWxzZSBwb3NpdGl2ZSBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgYmVjYXVzZSB3ZSBpbnRlbnRpb25hbGx5IGNhdXNlZCB0aGUga2VybmVsIHRvIHBhbmljLlxuXG5Ob3csIGlmIHRoZSBmdXp6ZXIgY2FuIHRyaWdnZXIgYSBtZW1vcnkgZmFpbHVyZSBvbiBhIGtlcm5lbCBwYWdlIGFuZCB0aGUgc3lzY3RsIGlzIGVuYWJsZWQsIGl0ICp3aWxsKiBwYW5pYy4gVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lcywgc2hvdWxkIHdlIGZ1enogdGhpcz8gVGhlIHBhdGNoICptaWdodCogdW5jb3ZlciBidWdzIGluIHRoZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZyBsb2dpYyBpdHNlbGYsIG9yIGl0IGNvdWxkIHNpbXBseSB0cmlnZ2VyIHRoZSBpbnRlbmRlZCBwYW5pYy5cblxuSG9sZCBvbiwgdGhlIHByb21wdCBzYXlzLCDigJxSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuLi5cIiBDYW4gd2UgdHJpZ2dlciBhIG1lbW9yeSBmYWlsdXJlIGluIFFFTVU/IFllcywgd2UgY2FuIHVzZSBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAgb3IgYC9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2hhcmRfb2ZmbGluZV9wYWdlYC5cblxuV2FpdCwgdGhlIHBhdGNoICpleHBsaWNpdGx5KiBhZGRzIGEgc2VsZnRlc3QgdGhhdCB1c2VzIGAvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9oYXJkX29mZmxpbmVfcGFnZWAuIFRoYXQncyBhIGNsZWFyIHNpZ25hbC4gVGhpcyAqaXMqIHdvcnRoIGZ1enppbmcsIGJlY2F1c2UgaXQgbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMgYW5kIGl0IGlzIHBvc3NpYmxlIHRvIGhpdCBpdCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlxuXG5Ob3csIHdlIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoZSBmdXp6ZXIgaXMgY29uZmlndXJlZC4gSWYgdGhlIHN5c2N0bCBpcyBlbmFibGVkLCBpdCBwYW5pY3MuIElmIGl0J3MgZGlzYWJsZWQsIGl0IGRvZXNuJ3QuIElmIHdlIGVuYWJsZSB0aGUgc3lzY3RsLCB0aGUgZnV6emVyIHdpbGwgZGVmaW5pdGVseSBoaXQgdGhhdCBwYW5pYyBhbmQgcmVwb3J0IGl0IGFzIGEgY3Jhc2guIElzIHRoYXQgd2hhdCB3ZSAqd2FudCo/IFByb2JhYmx5IG5vdC4gQSBmdXp6aW5nIHNldHVwIHVzdWFsbHkgc2hvdWxkbid0IGJlIGludGVudGlvbmFsbHkgY29uZmlndXJlZCB0byBwYW5pYyB0aGUga2VybmVsIHVubGVzcyBpdCdzIGRlc2lnbmVkIHRvIHRlc3QgYSBzcGVjaWZpYyBwYW5pYyBjb25kaXRpb24uIFN5emthbGxlciBnZW5lcmFsbHkgYXZvaWRzIHBhbmljcyBpZiB0aGV5IGFyZSBpbnRlbmRlZCwgb3Igd2UganVzdCB3b3VsZG4ndCBlbmFibGUgdGhlIHN5c2N0bC5cblxuT2theSwgaWYgd2UgZG9uJ3QgZW5hYmxlIHRoZSBzeXNjdGwsIHRoZSBuZXcgY29kZSBgcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZmAgc2ltcGx5IHJldHVybnMgZmFsc2UuIEJ1dCwgaXQgYWxzbyBhZGRzIGBpc19rZXJuZWxfb3duZWRfcGFnZSgpYCB3aGljaCBpcyBjYWxsZWQgdW5jb25kaXRpb25hbGx5IGluIGBnZXRfYW55X3BhZ2UoKWAuIFRoYXQgc291bmRzIGludGVyZXN0aW5nLiBJIHNob3VsZCBnbyBsb29rIGF0IHRob3NlIGNoYW5nZXMgdG8gYGdldF9hbnlfcGFnZSgpYCBjbG9zZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzUwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIzOjA2OjQxLjY3MzU1MDA1NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDA1NDI1MTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlzX2tlcm5lbF9vd25lZF9wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbW9yeS1mYWlsdXJlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuYz0xMzM5PXN0YXRpYyBpbmxpbmUgYm9vbCBIV1BvaXNvbkhhbmRsYWJsZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBmbGFncylcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTM1NS0gKi9cXG5tbS9tZW1vcnktZmFpbHVyZS5jOjEzNTY6c3RhdGljIGlubGluZSBib29sIGlzX2tlcm5lbF9vd25lZF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTM1Ny17XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTE0MTk9c3RhdGljIGludCBnZXRfYW55X3BhZ2Uoc3RydWN0IHBhZ2UgKnAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE0MzItXFx0ICovXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxNDMzOlxcdGlmIChpc19rZXJuZWxfb3duZWRfcGFnZShwKSkge1xcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTQzNC1cXHRcXHRpZiAoY291bnRfaW5jcmVhc2VkKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0xNDkzPXN0YXRpYyBpbnQgX19nZXRfdW5wb2lzb25fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTU0NS0gKiAgICAgICAgIC1FTk9UUkVDT1ZFUkFCTEUgZm9yIGtlcm5lbC1vd25lZCBwYWdlcyBpZGVudGlmaWVkIGJ5XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxNTQ2OiAqICAgICAgICAgaXNfa2VybmVsX293bmVkX3BhZ2UoKSAoUEdfcmVzZXJ2ZWQsIHNsYWIsXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNTQ3LSAqICAgICAgICAgcGFnZS10YWJsZSwgbGFyZ2Uta21hbGxvYykgdGhhdCB0aGUgaGFuZGxlciBjYW5ub3QgcmVjb3Zlci5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjM6MDY6NDMuNjc4OTg0NDM3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTczMzc1MTc1MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYSBSZWNlbnQgS2VybmVsIENoYW5nZSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBrZXJuZWwgY29kZSwgYW5kIGhlcmUncyB3aGF0IEknbSBzZWVpbmcuIEl0IGxvb2tzIGxpa2UgYGlzX2tlcm5lbF9vd25lZF9wYWdlKClgIGdldHMgY2FsbGVkIHVuY29uZGl0aW9uYWxseSB3aXRoaW4gYGdldF9hbnlfcGFnZSgpYC4gSW50ZXJlc3RpbmcuIElmIHRoYXQgZnVuY3Rpb24gcmV0dXJucyBgdHJ1ZWAsIGluZGljYXRpbmcgYSBrZXJuZWwtb3duZWQgcGFnZSwgYGdldF9hbnlfcGFnZSgpYCBpbW1lZGlhdGVseSByZXR1cm5zIGAtRU5PVFJFQ09WRVJBQkxFYC4gTm93LCBgbWVtb3J5X2ZhaWx1cmUoKWAgaGFuZGxlcyB0aGF0IHNwZWNpZmljIGVycm9yIGNvZGUsIGAtRU5PVFJFQ09WRVJBQkxFYCwgYW5kIGRvZXMgc28gYnkgY2FsbGluZyBgYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19LRVJORUwsIE1GX0lHTk9SRUQpYC5cblxuVGhlIGNydWNpYWwgYml0IGlzLCB0aGlzICpjaGFuZ2VzKiBob3cgYG1lbW9yeV9mYWlsdXJlKClgIGJlaGF2ZXMgd2l0aCBrZXJuZWwtb3duZWQgcGFnZXMsIGV2ZW4gaWYgdGhlIHJlbGV2YW50IHN5c2N0bCBpcyBkaXNhYmxlZC4gUHJldmlvdXNseSwgaWYgSSB1bmRlcnN0YW5kIGNvcnJlY3RseSwgaXQgd291bGQgaGF2ZSBnb25lIHRocm91Z2ggYHRyeV9hZ2FpbmAgYW5kIGV2ZW50dWFsbHkgZ2l2ZW4gYSBgLUVJT2AgZXJyb3IgYWZ0ZXIgY2FsbGluZyBgc2hha2VfcGFnZSgpYC4gTm93LCBpdOKAmXMgc2hvcnQtY2lyY3VpdGluZyBhbmQgcmV0dXJuaW5nIGAtRU5PVFJFQ09WRVJBQkxFYC4gVGhpcyBpcyBhICpmdW5jdGlvbmFsKiBjaGFuZ2UgaW4gYG1lbW9yeV9mYWlsdXJlKClgLiBUaGlzIHJlYWxseSBpcyBhIGNoYW5nZSBpbiB0aGUgaW50ZW5kZWQgYmVoYXZpb3IsIGF0IGxlYXN0IHRvIG1lLlxuXG5Pa2F5LCBpcyB0aGlzIGZ1enphYmxlPyBBYnNvbHV0ZWx5LiBTZWVtcyBsaWtlIGEgZ29vZCB0YXJnZXQuIEkgc2hvdWxkIHJlYWxseSBmb2N1cyBvbiBgbWVtb3J5X2ZhaWx1cmVgLCBgZ2V0X2FueV9wYWdlYCwgYW5kIGBpc19rZXJuZWxfb3duZWRfcGFnZWAgd2hlbiBJIGZ1enouIFdhaXQgYSBzZWNvbmQsIGBtZW1vcnlfZmFpbHVyZWAgaXMgYWN0dWFsbHkgdGhlIG1haW4gZW50cnkgcG9pbnQgdG8gaXQgYWxsLiBJIHNob3VsZCBzZWUgaG93IHJlYWNoYWJsZSBpdCBpcywgYW5kIHl1cCwgaXQncyBhY2Nlc3NpYmxlIHRocm91Z2ggYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIG9yIGBoYXJkX29mZmxpbmVfcGFnZWAuIE5vdyBJIHNob3VsZCBqdXN0IGxvb2sgaW50byBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjQ2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIzOjA3OjQxLjAxNjUwNTg1MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjE4MTk1NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUFEVl9IV1BPSVNPTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tYWR2aXNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWFkdmlzZS5jPTE0OTM9c3RhdGljIGJvb2wgaXNfbWVtb3J5X2ZhaWx1cmUoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTQ5NS1cXHRzd2l0Y2ggKG1hZHZfYmVoYXZpb3ItXFx1MDAzZWJlaGF2aW9yKSB7XFxubW0vbWFkdmlzZS5jOjE0OTY6XFx0Y2FzZSBNQURWX0hXUE9JU09OOlxcbm1tL21hZHZpc2UuYy0xNDk3LVxcdGNhc2UgTUFEVl9TT0ZUX09GRkxJTkU6XFxuLS1cXG5tbS9tYWR2aXNlLmM9MTUxOT1tYWR2aXNlX2JlaGF2aW9yX3ZhbGlkKGludCBiZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xNTUyLVxcdGNhc2UgTUFEVl9TT0ZUX09GRkxJTkU6XFxubW0vbWFkdmlzZS5jOjE1NTM6XFx0Y2FzZSBNQURWX0hXUE9JU09OOlxcbm1tL21hZHZpc2UuYy0xNTU0LSNlbmRpZlxcbi0tXFxubW0vbWFkdmlzZS5jPTE4ODg9c3RhdGljIGludCBtYWR2aXNlX2RvX2JlaGF2aW9yKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW5faW4sXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTk0NC0gKiAgTUFEVl9LRUVQT05GT1JLIC0gdW5kbyB0aGUgZWZmZWN0IG9mIE1BRFZfV0lQRU9ORk9SS1xcbm1tL21hZHZpc2UuYzoxOTQ1OiAqICBNQURWX0hXUE9JU09OIC0gdHJpZ2dlciBtZW1vcnkgZXJyb3IgaGFuZGxlciBhcyBpZiB0aGUgZ2l2ZW4gbWVtb3J5IHJhbmdlXFxubW0vbWFkdmlzZS5jLTE5NDYtICpcXHRcXHR3ZXJlIGNvcnJ1cHRlZCBieSB1bnJlY292ZXJhYmxlIGhhcmR3YXJlIG1lbW9yeSBmYWlsdXJlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMzowNzo0MS40NzgzMjk2NzFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzU3MDAxMjg1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYE1BRFZfSFdQT0lTT05gIGFuZCBpdHMgSW1wbGljYXRpb25zKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgTUFEVl9IV1BPSVNPTmAgaXMgc3VwcG9ydGVkLCB0aGF0J3MgZ29vZC4gQnV0IHdhaXQgYSBtaW51dGUsIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCBvbmx5IG9wZXJhdGVzIG9uIHVzZXItbWFwcGVkIHBhZ2VzLiBUaGlzIG1lYW5zIEkgY2FuJ3QganVzdCB0aHJvdyBpdCBhdCBhbnl0aGluZy4gTm93LCBJIG5lZWQgdG8gY2hlY2sgd2hhdCBgaXNfa2VybmVsX293bmVkX3BhZ2UoKWAgdXNlcyB0byBkZXRlcm1pbmUgYSBrZXJuZWwtb3duZWQgcGFnZS4gQWgsIGl0IHVzZXMgY2hlY2tzIGZvciBgUGFnZVJlc2VydmVkYCwgYFBhZ2VTbGFiYCwgYFBhZ2VUYWJsZWAsIGFuZCBgUGFnZUxhcmdlS21hbGxvY2AuXG5cbkNhbiBhIHVzZXIgYWN0dWFsbHkgKm1hcCogYSBgUGFnZVJlc2VydmVkYCBwYWdlPyBJIGJlbGlldmUgdGhleSBjYW4uIEknbSBwcmV0dHkgc3VyZSB0aGF0IGhhcHBlbnMgdGhyb3VnaCB0aGluZ3MgbGlrZSBgL2Rldi9tZW1gLCBvciBtYXliZSBldmVuIHNvbWUgZHJpdmVycyB3aXRoIHNwZWNpYWwgY2FwYWJpbGl0aWVzLCByaWdodD8gQnV0IHRoZSBvdGhlcnMsIGxpa2UgYSBgUGFnZVNsYWJgIG9yIGEgYFBhZ2VUYWJsZWAsIHRob3NlIGFyZSB1c3VhbGx5IG9mZi1saW1pdHMgdG8gdXNlcmxhbmQuXG5cbkhvbGQgb24sIEkgYWxzbyBuZWVkIHRvIHRoaW5rIGFib3V0IGBoYXJkX29mZmxpbmVfcGFnZWAuIENhbiB0aGF0IGZ1bmN0aW9uIHRhcmdldCAqYW55KiBwaHlzaWNhbCBmcmFtZSBudW1iZXIgKFBGTiksIHJlZ2FyZGxlc3Mgb2Ygb3duZXJzaGlwPyBJIHRoaW5rIHNvLiBBbmQgSSByZW1lbWJlciB0aGF0IFN5emthbGxlciwgd2hpY2ggSSdtIGRlYWxpbmcgd2l0aCBoZXJlLCBpdCBydW5zIGFzIHJvb3QgaW4gaXRzIHRlc3RpbmcgdmlydHVhbCBtYWNoaW5lcy4gV2FpdCwgaXMgdGhhdCByaWdodD8gWWVzLCB0aGF0J3MgcmlnaHQuIFN5emthbGxlciAqZG9lcyogaGF2ZSByb290IHByaXZpbGVnZXMuIFNvLCBjYW4gU3l6a2FsbGVyIHRoZW4gd3JpdGUgdG8gYC9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2hhcmRfb2ZmbGluZV9wYWdlYCB0byB0cmlnZ2VyIHRoaXM/IEkgbmVlZCB0byB2ZXJpZnkgaWYgYGhhcmRfb2ZmbGluZV9wYWdlYCBpcyBldmVuIGVuYWJsZWQuIFRoYXQncyB0aGUga2V5IHF1ZXN0aW9uIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyNTYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjM6MDc6NTkuMDQ4MzQ0OTQ3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzAxODYxMTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGFyZF9vZmZsaW5lX3BhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9iYXNlL21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmFzZS9tZW1vcnkuYz02MDQ9c3RhdGljIHNzaXplX3Qgc29mdF9vZmZsaW5lX3BhZ2Vfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTYxOS0vKiBGb3JjaWJseSBvZmZsaW5lIGEgcGFnZSwgaW5jbHVkaW5nIGtpbGxpbmcgcHJvY2Vzc2VzLiAqL1xcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzo2MjA6c3RhdGljIHNzaXplX3QgaGFyZF9vZmZsaW5lX3BhZ2Vfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy02MjEtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jPTYzNz1zdGF0aWMgREVWSUNFX0FUVFJfV08oc29mdF9vZmZsaW5lX3BhZ2UpO1xcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzo2Mzg6c3RhdGljIERFVklDRV9BVFRSX1dPKGhhcmRfb2ZmbGluZV9wYWdlKTtcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtNjM5LSNlbmRpZlxcbi0tXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jPTkxMT1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbWVtb3J5X3Jvb3RfYXR0cnNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy05MTctXFx0XFx1MDAyNmRldl9hdHRyX3NvZnRfb2ZmbGluZV9wYWdlLmF0dHIsXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjkxODpcXHRcXHUwMDI2ZGV2X2F0dHJfaGFyZF9vZmZsaW5lX3BhZ2UuYXR0cixcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtOTE5LSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMzowNzo1OS4zNzg1MzU2NjFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjE4Nzk3ODcxODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGlmIEknbSB0aGUgb25lIGhhdmluZyB0aGVzZSB0aG91Z2h0cywgdGFyZ2V0aW5nIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgTWVtb3J5IEZhaWx1cmUgSW52ZXN0aWdhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgdGhlIGNvbnRleHQgcG9pbnRzIHRvd2FyZHMgc29tZXRoaW5nIHJlbGF0ZWQgdG8ga2VybmVsIG1lbW9yeSBmYWlsdXJlLiBNeSBpbml0aWFsIGh1bmNoLCBnaXZlbiB0aGUgY29udGV4dCwgaXMgdGhhdCB0aGUgcmVsZXZhbnQgY29kZSBzaG91bGQgYmUgaW4gdGhlIGBkcml2ZXJzL2Jhc2UvYCBkaXJlY3RvcnksIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBtZW1vcnkuY2AgZmlsZS4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcuIE5vdywgdGhlIGtleSBpcyB3aGV0aGVyIG9yIG5vdCB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgZ2F0ZWQgYmVoaW5kIGEgY29uZmlndXJhdGlvbiBvcHRpb24uIEknbGwgbmVlZCB0byBjaGVjayBpZiB0aGlzIGlzIGNvbXBpbGVkIHVuZGVyIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0IGxvb2tpbmcsIGZvciB0aGUgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMsIHRvIHNlZSBob3cgdGhhdCdzIGhhbmRsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTExLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjM6MDg6MjEuMjU4MzI2MDdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NTU3Njk1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoYXJkX29mZmxpbmVfcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jhc2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmFzZS9tZW1vcnkuYz02MDQ9c3RhdGljIHNzaXplX3Qgc29mdF9vZmZsaW5lX3BhZ2Vfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTYxOS0vKiBGb3JjaWJseSBvZmZsaW5lIGEgcGFnZSwgaW5jbHVkaW5nIGtpbGxpbmcgcHJvY2Vzc2VzLiAqL1xcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzo2MjA6c3RhdGljIHNzaXplX3QgaGFyZF9vZmZsaW5lX3BhZ2Vfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy02MjEtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jPTYzNz1zdGF0aWMgREVWSUNFX0FUVFJfV08oc29mdF9vZmZsaW5lX3BhZ2UpO1xcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzo2Mzg6c3RhdGljIERFVklDRV9BVFRSX1dPKGhhcmRfb2ZmbGluZV9wYWdlKTtcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtNjM5LSNlbmRpZlxcbi0tXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jPTkxMT1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbWVtb3J5X3Jvb3RfYXR0cnNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy05MTctXFx0XFx1MDAyNmRldl9hdHRyX3NvZnRfb2ZmbGluZV9wYWdlLmF0dHIsXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjkxODpcXHRcXHUwMDI2ZGV2X2F0dHJfaGFyZF9vZmZsaW5lX3BhZ2UuYXR0cixcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtOTE5LSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMzowODoyMS41MzM5MDg1ODJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg5ODc3NzI5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKipcblxuQWxyaWdodCwgbXkgZmlyc3QgaW5zdGluY3QgaGVyZSBpcyB0byB6ZXJvIGluIG9uIHRoYXQgYCNpZmRlZmAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IG9mIHRoaXMgY29kZSBibG9jayBpbW1lZGlhdGVseS4gSSdtIGxvb2tpbmcgYmV5b25kIGp1c3QgdGhlIGNvZGUgc25pcHBldCBpdHNlbGYgYW5kIHRoaW5raW5nIGFib3V0IHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciBwbGF0Zm9ybS1zcGVjaWZpYyBkZWZpbml0aW9ucyBhcmUgaW5mbHVlbmNpbmcgaXRzIGluY2x1c2lvbiBvciBleGNsdXNpb24uIFRoaXMgaXMgY2xhc3NpYyBkZWJ1Z2dpbmcgYW5kIG1haW50ZW5hbmNlLCBhZnRlciBhbGwuIEknbSBtZW50YWxseSBwYXJzaW5nIHRoZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcywgcXVpY2tseSBhc3Nlc3Npbmcgd2hhdCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgb3IgYnVpbGQgZmxhZ3MgYXJlIHByb2JhYmx5IHNldCB0byBjb250cm9sIGl0cyBiZWhhdmlvci4gQXJlIHdlIGRlYWxpbmcgd2l0aCBhIGRlYnVnZ2luZyBmZWF0dXJlLCBhIHBsYXRmb3JtLXNwZWNpZmljIG9wdGltaXphdGlvbiwgb3IgcGVyaGFwcyBhIGZlYXR1cmUgZmxhZyB0aWVkIHRvIGEgcGFpZCB2ZXJzaW9uPyBLbm93aW5nIHRoZSBwcmVwcm9jZXNzb3Igc3ltYm9sIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvZGUncyB1bHRpbWF0ZSBmdW5jdGlvbmFsaXR5IGluIGEgZ2l2ZW4gYnVpbGQgY29uZmlndXJhdGlvbi4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBpZmRlZiB3aWxsIGFsbG93IG1lIHRvIGFzc2VzcyB0aGUgcmFtaWZpY2F0aW9ucyBvZiB0aGlzIGNvZGUgYmxvY2sgdG8gbXkgY3VycmVudCB3b3JrLiBJIGFtIGFzc2Vzc2luZyB0aGUgZGVwZW5kZW5jaWVzIGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjb25kaXRpb25hbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2MTIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMzowODoyNy40MzI2ODg3NjlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmFzZS9tZW1vcnkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MTA6XFx0XFx0aWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKVxcbiA2MTE6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gNjEyOlxcdFxcdGlmIChrc3RydG91bGwoYnVmLCAwLCBcXHUwMDI2cGZuKSBcXHUwMDNjIDApXFxuIDYxMzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNjE0OlxcdFxcdHBmbiBcXHUwMDNlXFx1MDAzZT0gUEFHRV9TSElGVDtcXG4gNjE1OlxcdFxcdHJldCA9IHNvZnRfb2ZmbGluZV9wYWdlKHBmbiwgMCk7XFxuIDYxNjpcXHRcXHRyZXR1cm4gcmV0ID09IDAgPyBjb3VudCA6IHJldDtcXG4gNjE3OlxcdH1cXG4gNjE4OlxcdFxcbiA2MTk6XFx0LyogRm9yY2libHkgb2ZmbGluZSBhIHBhZ2UsIGluY2x1ZGluZyBraWxsaW5nIHByb2Nlc3Nlcy4gKi9cXG4gNjIwOlxcdHN0YXRpYyBzc2l6ZV90IGhhcmRfb2ZmbGluZV9wYWdlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4gNjIxOlxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4gNjIyOlxcdFxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4gNjIzOlxcdHtcXG4gNjI0OlxcdFxcdGludCByZXQ7XFxuIDYyNTpcXHRcXHR1NjQgcGZuO1xcbiA2MjY6XFx0XFx0aWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKVxcbiA2Mjc6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4gNjI4OlxcdFxcdGlmIChrc3RydG91bGwoYnVmLCAwLCBcXHUwMDI2cGZuKSBcXHUwMDNjIDApXFxuIDYyOTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNjMwOlxcdFxcdHBmbiBcXHUwMDNlXFx1MDAzZT0gUEFHRV9TSElGVDtcXG4gNjMxOlxcdFxcdHJldCA9IG1lbW9yeV9mYWlsdXJlKHBmbiwgTUZfU1dfU0lNVUxBVEVEKTtcXG4gNjMyOlxcdFxcdGlmIChyZXQgPT0gLUVPUE5PVFNVUFApXFxuIDYzMzpcXHRcXHRcXHRyZXQgPSAwO1xcbiA2MzQ6XFx0XFx0cmV0dXJuIHJldCA/IHJldCA6IGNvdW50O1xcbiA2MzU6XFx0fVxcbiA2MzY6XFx0XFxuIDYzNzpcXHRzdGF0aWMgREVWSUNFX0FUVFJfV08oc29mdF9vZmZsaW5lX3BhZ2UpO1xcbiA2Mzg6XFx0c3RhdGljIERFVklDRV9BVFRSX1dPKGhhcmRfb2ZmbGluZV9wYWdlKTtcXG4gNjM5OlxcdCNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMzowODoyNy40MzI4NDUyNDlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE0MjIwMzc4ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gQmxvY2sqKlxuXG5BbHJpZ2h0LCBJJ20gZGl2aW5nIGluLiBUaGUgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBjb2RlIHNlZ21lbnQgYWJvdmUgdGhlIGAjaWZkZWZgIGRpcmVjdGl2ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHdoYXQgY29uZGl0aW9ucyBhcmUgYmVpbmcgY2hlY2tlZC4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBtZWF0IG9mIHRoZSBsb2dpYyB1c3VhbGx5IGxpZXM7IHRoZSBwcmVwcm9jZXNzb3IncyBsb2dpYyBpcyBqdXN0IGEgZ3VhcmQgcmFpbCwgYSBzZXR1cCBmb3IgdGhlIGNvcmUgZXhlY3V0aW9uLiBJJ20gbG9va2luZyBmb3IgdGhlIGltcGxpY2F0aW9ucyBvZiAqd2h5KiB0aGlzIGJsb2NrIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgaW4gdGhlIGZpcnN0IHBsYWNlLiBXaGF04oCZcyB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzPyBXaGF0IGVudmlyb25tZW50YWwgZmFjdG9ycywgZmVhdHVyZSBmbGFncywgb3IgcGxhdGZvcm0gZGlmZmVyZW5jZXMgYXJlIGJlaW5nIGFjY291bnRlZCBmb3I/IFVuZGVyc3RhbmRpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGVzcGVjaWFsbHkgdGhlIHBvdGVudGlhbCBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbnMsIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgd2hhdCBzcGVjaWZpYyBibG9jayBvZiBjb2RlIGlzIGJlaW5nIHByb3RlY3RlZCBvciBlbmFibGVkLiBJIHdpbGwgZm9jdXMgbXkgZWZmb3J0cyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBgI2lmZGVmYCBzdGF0ZW1lbnQncyBwdXJwb3NlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjMyNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjM6MDg6MzguODU0ODg1NzA4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jhc2UvbWVtb3J5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTkwOlxcdG91dDpcXG4gNTkxOlxcdFxcdHVubG9ja19kZXZpY2VfaG90cGx1ZygpO1xcbiA1OTI6XFx0XFx0cmV0dXJuIHJldDtcXG4gNTkzOlxcdH1cXG4gNTk0OlxcdFxcbiA1OTU6XFx0c3RhdGljIERFVklDRV9BVFRSX1dPKHByb2JlKTtcXG4gNTk2OlxcdCNlbmRpZlxcbiA1OTc6XFx0XFxuIDU5ODpcXHQjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXFxuIDU5OTpcXHQvKlxcbiA2MDA6XFx0ICogU3VwcG9ydCBmb3Igb2ZmbGluaW5nIHBhZ2VzIG9mIG1lbW9yeVxcbiA2MDE6XFx0ICovXFxuIDYwMjpcXHRcXG4gNjAzOlxcdC8qIFNvZnQgb2ZmbGluZSBhIHBhZ2UgKi9cXG4gNjA0OlxcdHN0YXRpYyBzc2l6ZV90IHNvZnRfb2ZmbGluZV9wYWdlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4gNjA1OlxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4gNjA2OlxcdFxcdFxcdFxcdFxcdCAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4gNjA3OlxcdHtcXG4gNjA4OlxcdFxcdGludCByZXQ7XFxuIDYwOTpcXHRcXHR1NjQgcGZuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMzowODozOC44NTUwNzgzNThaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjI2NDk0NTgyNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBTdHJhdGVneSBmb3IgYENPTkZJR19NRU1PUllfRkFJTFVSRWAgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgY29kZSB1bmRlciBgQ09ORklHX01FTU9SWV9GQUlMVVJFYC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQncyBhbHRlcmluZyB0aGUgYmVoYXZpb3Igb2YgYG1lbW9yeV9mYWlsdXJlKClgIGFuZCBgZ2V0X2FueV9wYWdlKClgLCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vayBmb3IgZnV6emluZyBwb3RlbnRpYWwuIFdlIG5lZWQgdG8gc2VlIGlmIGl0J3MgZ290IGZ1bmN0aW9uYWwgY2hhbmdlcy5cblxuVGhlIGBwYW5pY19vbl91bnJlY292ZXJhYmxlX21lbW9yeV9mYWlsdXJlYCBzeXNjdGwgaXMgb2ZmIGJ5IGRlZmF1bHQsIGJ1dCB0aGUgZnV6emVyIGNhbiBlYXNpbHkgZmxpcCB0aGF0IHN3aXRjaCB0byBleHBsb3JlIGFsbCBwb3NzaWJpbGl0aWVzLiBFdmVuIGlmIHdlIGtlZXAgaXQgb2ZmLCB0aGVyZSdzIGEgc2lnbmlmaWNhbnQgY2hhbmdlOiBgaXNfa2VybmVsX293bmVkX3BhZ2UoKWAgd2lsbCBhbHRlciB0aGUgcmV0dXJuIHZhbHVlIG9mIGBnZXRfYW55X3BhZ2UoKWAgdG8gYC1FTk9UUkVDT1ZFUkFCTEVgIGluc3RlYWQgb2YgYC1FSU9gLiBUaGF0LCBpbiB0dXJuLCBjaGFuZ2VzIGhvdyBgbWVtb3J5X2ZhaWx1cmUoKWAgYmVoYXZlczsgaXQgbm93IGNhdXNlcyBpdCB0byBpbW1lZGlhdGVseSByZXR1cm4gYGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfS0VSTkVMLCBNRl9JR05PUkVEKWAuIFRoaXMgaXMgY2xlYXJseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzbyB5ZXMsIHdlIHNob3VsZCBkZWZpbml0ZWx5IGZ1enogdGhpcy5cblxuTm93LCB3aGF0IGFyZSB0aGUga2V5IHN5bWJvbHMgdG8gdGFyZ2V0PyBJJ20gdGhpbmtpbmcgYG1lbW9yeV9mYWlsdXJlYCwgYGdldF9hbnlfcGFnZWAsIGBpc19rZXJuZWxfb3duZWRfcGFnZWAsIGFuZCBgcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZmAuIEJ1dCBob2xkIG9uLCBgaXNfa2VybmVsX293bmVkX3BhZ2VgIGFuZCBgcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZmAgYXJlIG1hcmtlZCBhcyBzdGF0aWMgaW5saW5lIG9yIHN0YXRpYyBmdW5jdGlvbnMuIFRoZXkncmUgbGlrZWx5IGlubGluZWQsIHNvIHRoYXQgYWZmZWN0cyB0aGVpciB1c2VmdWxuZXNzIGFzIGRpcmVjdCBmdXp6IHRhcmdldHMuIFNvLCBgbWVtb3J5X2ZhaWx1cmVgIGFuZCBgZ2V0X2FueV9wYWdlYCByZW1haW4gdGhlIHByaW1hcnkgZm9jdXMsIGFuZCBgYWN0aW9uX3Jlc3VsdGAgaXMgYWxzbyB3b3J0aCBrZWVwaW5nIGluIG1pbmQsIHNpbmNlIGl0J3MgdGhlIHJldHVybiBvZiBhIGNyaXRpY2FsIGZ1bmN0aW9uLlxuXG5BcyBmb3IgY29uZmlndXJhdGlvbnMsIGBNRU1PUllfRkFJTFVSRWAgaXMgdGhlIG9idmlvdXMgb25lLCBidXQgd2FpdCwgYE1FTU9SWV9GQUlMVVJFYCAqZGVwZW5kcyogb24gYEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVgLiBTbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBhbHNvIGFjY291bnQgZm9yIGBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFYCBpbiBvdXIgdGVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4MDYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMzowOTowMS41MDQ1NDA3N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjExMjQ5ODk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvS2NvbmZpZz0yPWNvbmZpZyBBUk02NFxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnLTczLVxcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xcbmFyY2gvYXJtNjQvS2NvbmZpZzo3NDpcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxcbmFyY2gvYXJtNjQvS2NvbmZpZy03NS1cXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19TSEFET1dfQ0FMTF9TVEFDSyBpZiBDQ19IQVZFX1NIQURPV19DQUxMX1NUQUNLXFxuLS1cXG5hcmNoL3BhcmlzYy9LY29uZmlnPTI9Y29uZmlnIFBBUklTQ1xcbi0tXFxuYXJjaC9wYXJpc2MvS2NvbmZpZy0yMi1cXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19IVUdFVExCRlMgaWYgUEEyMFxcbmFyY2gvcGFyaXNjL0tjb25maWc6MjM6XFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcXG5hcmNoL3BhcmlzYy9LY29uZmlnLTI0LVxcdHNlbGVjdCBBUkNIX1NUQUNLV0FMS1xcbi0tXFxuYXJjaC9wb3dlcnBjL0tjb25maWc9NjI0PWNvbmZpZyBQUEM2NF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxcbi0tXFxuYXJjaC9wb3dlcnBjL0tjb25maWctNjI3LVxcdGRlZmF1bHQgXFxcInlcXFwiIGlmIFBQQ19QT1dFUk5WXFxuYXJjaC9wb3dlcnBjL0tjb25maWc6NjI4OlxcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXFxuYXJjaC9wb3dlcnBjL0tjb25maWctNjI5LVxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZz03NjI9Y29uZmlnIFg4Nl9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy03NjgtXFx0ZGVwZW5kcyBvbiBYODZfNjQgfHwgIVNQQVJTRU1FTVxcbmFyY2gveDg2L0tjb25maWc6NzY5OlxcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXFxuYXJjaC94ODYvS2NvbmZpZy03NzAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIzOjA5OjAzLjYxNzA0NTk2OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDk0NTgwMjIxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IEZhaWx1cmUgSGFuZGxpbmcgYW5kIFJlbGF0ZWQgQ29uZmlndXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gZW5hYmxpbmcgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIGBNRU1PUllfRkFJTFVSRWAgbWVjaGFuaXNtLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgYWxsIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBJIHNlZSB0aGF0IGBNRU1PUllfRkFJTFVSRWAgaXMgdGhlIHByaW1hcnkgb25lLCBhbmQgSSdtIGFsc28gY29uc2lkZXJpbmcgYEhXUE9JU09OX0lOSkVDVGAuIFRoZSBsYXR0ZXIgc2VlbXMgaW50ZXJlc3RpbmcgZm9yIGZ1enppbmcsIHBvc3NpYmx5IGVuYWJsaW5nIHRoZSBpbmplY3Rpb24gb2YgbWVtb3J5IGZhaWx1cmVzLiBJIGtub3cgaXQgcHJvdmlkZXMgYC9zeXMva2VybmVsL2RlYnVnL2h3cG9pc29uL2NvcnJ1cHQtcGZuYCBhbmQgYHVucG9pc29uLXBmbmAsIGFuZCB0aGUgc2VsZnRlc3RzIHVzZSBgdW5wb2lzb24tcGZuYCwgd2hpY2ggY29uZmlybXMgaXRzIHJlbGV2YW5jZS5cblxuSSdtIGNoZWNraW5nIGlmIHN5emthbGxlciB1dGlsaXplcyBgSFdQT0lTT05fSU5KRUNUYC4gSXQgYXBwZWFycyB0aGF0IHN5emthbGxlciB1c2VzIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCBhbmQgYC9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2hhcmRfb2ZmbGluZV9wYWdlYCwgc28gYEhXUE9JU09OX0lOSkVDVGAgaXMgZGVmaW5pdGVseSByZWxhdGVkIGFuZCB3b3J0aCBlbmFibGluZyBmb3IgZWZmZWN0aXZlIHRlc3RpbmcgYW5kIG1lbW9yeSBlcnJvciBpbmplY3Rpb24uIFRoZXJlZm9yZSwgSSdsbCBpbmNsdWRlIGJvdGggYE1FTU9SWV9GQUlMVVJFYCBhbmQgYEhXUE9JU09OX0lOSkVDVGAgaW4gbXkgY29uZmlndXJhdGlvbi5cblxuTmV4dCwgSSdsbCBleGFtaW5lIHRoZSBjb2RlIGNoYW5nZXMgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBJJ20gZm9jdXNpbmcgb24gdGhlIGZ1bmN0aW9ucyBkaXJlY3RseSBpbnZvbHZlZCBpbiB0aGlzIHByb2Nlc3MsIHNwZWNpZmljYWxseSBgbWVtb3J5X2ZhaWx1cmVgLCBgZ2V0X2FueV9wYWdlYCwgYGlzX2tlcm5lbF9vd25lZF9wYWdlYCwgYHBhbmljX29uX3VucmVjb3ZlcmFibGVfbWZgLCBhbmQgYGFjdGlvbl9yZXN1bHRgLiBJJ20gbm90aW5nIHRoYXQgYGlzX2tlcm5lbF9vd25lZF9wYWdlYCBhbmQgYHBhbmljX29uX3VucmVjb3ZlcmFibGVfbWZgIGFyZSBzdGF0aWMgYW5kIHBvdGVudGlhbGx5IGlubGluZWQsIHdoaWNoIG1pZ2h0IGFmZmVjdCB0aGVpciBzeW1ib2wgYXZhaWxhYmlsaXR5LlxuXG5Ob3csIEknbSB2ZXJpZnlpbmcgdGhlIGV4cG9ydCBzdGF0dXMgb2YgdGhlIGtleSBmdW5jdGlvbnMuIEkgc2VlIHRoYXQgYG1lbW9yeV9mYWlsdXJlYCBpcyBleHBvcnRlZCB3aXRoIGBFWFBPUlRfU1lNQk9MX0dQTChtZW1vcnlfZmFpbHVyZSlgLCBzbyBpdCdzIGRpcmVjdGx5IGFjY2Vzc2libGUuIGBnZXRfYW55X3BhZ2VgIGFuZCBgYWN0aW9uX3Jlc3VsdGAgYXJlIHN0YXRpYyB3aXRoaW4gdGhlIGZpbGUsIG1ha2luZyB0aGVpciBkaXJlY3QgdXNlIG91dHNpZGUgdGhpcyBjb250ZXh0IHVubGlrZWx5LCBidXQgSSdtIHByaW1hcmlseSBpbnRlcmVzdGVkIGluIHRoZWlyIGludGVybmFsIGxvZ2ljLlxuXG5Gcm9tIHdoYXQgSSBjYW4gdGVsbCwgdGhlIG1vZGlmaWNhdGlvbnMgSSd2ZSByZWFkIG1vZGlmeSB0aGUgY29yZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZyBsb2dpYy4gVGhleSBzaG9ydC1jaXJjdWl0IGVycm9yIHByb2Nlc3NpbmcgZm9yIGtlcm5lbC1vd25lZCBwYWdlcyAoc3VjaCBhcyB0aG9zZSB1c2VkIGJ5IHRoZSBzbGFiIGFsbG9jYXRvciwgcGFnZSB0YWJsZXMsIG9yIHJlc2VydmVkIHBhZ2VzKS4gQSBuZXcgc3lzY3RsIGlzIGFsc28gaW50cm9kdWNlZCB0byB0cmlnZ2VyIGEgcGFuaWMgdXBvbiBlbmNvdW50ZXJpbmcgdW5yZWNvdmVyYWJsZSBlcnJvcnMgd2l0aCB0aGVzZSBrZXJuZWwtb3duZWQgcGFnZXMuIFRoaXMgbWVjaGFuaXNtIGlzIGNsZWFybHkgbGlua2VkIHRvIGhhcmR3YXJlIGVycm9yIGluamVjdGlvbiBtZWNoYW5pc21zIHN1Y2ggYXMgYC9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2hhcmRfb2ZmbGluZV9wYWdlYCBvciBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAuXG5cblRvIHJlaXRlcmF0ZSwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBIV1BPSVNPTl9JTkpFQ1RgIGlzIGEgbmVjZXNzaXR5LiBJdCBpcyBhIG1vZHVsZSB3aGljaCBwcm92aWRlcyBkZWJ1Z2ZzIGludGVyZmFjZXMuIFN5emthbGxlciBjYW4gdXRpbGl6ZSBpdC4gVGh1cywgaXQgaXMgZGVzaXJhYmxlIHRvIGhhdmUgaXQgZW5hYmxlZC5cblxuTG9va2luZyBmb3Igb3RoZXIgZGVwZW5kZW5jaWVzLCBJIGNhbiBzZWUgdGhhdCBgREVCVUdfS0VSTkVMYCBhbmQgYFBST0NfRlNgIGFyZSBkZXBlbmRlbmNpZXMgZm9yIGBIV1BPSVNPTl9JTkpFQ1RgLiBUaGV5J3JlIGxpa2VseSBzdGFuZGFyZCBhbmQgZG9uJ3QgcmVxdWlyZSBzcGVjaWZpYyBjb25zaWRlcmF0aW9uLiBgTU1VYCBpcyBhIGRlcGVuZGVuY3kgZm9yIGBNRU1PUllfRkFJTFVSRWAsIHdoaWNoIGlzIGFsc28gc3RhbmRhcmQuXG5cbkJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIEknbSBjb25maWRlbnQgaW4gdGhlIGFwcHJvYWNoIGFuZCB0aGVzZSBjb25maWd1cmF0aW9ucyBhcmUgdGhlIG1vc3QgaW1wb3J0YW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzk3MSwiT3V0cHV0VG9rZW5zIjoxODksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIzOjA5OjI4LjU2Mjg1MDYwM1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTU2MDc5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIkhXUE9JU09OX0lOSkVDVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbW9yeV9mYWlsdXJlXCIsXG4gICAgXCJnZXRfYW55X3BhZ2VcIixcbiAgICBcImFjdGlvbl9yZXN1bHRcIixcbiAgICBcInBhbmljX29uX3VucmVjb3ZlcmFibGVfbWZcIixcbiAgICBcImlzX2tlcm5lbF9vd25lZF9wYWdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcgbG9naWMgKGBtZW1vcnlfZmFpbHVyZWAsIGBnZXRfYW55X3BhZ2VgKSB0byBleHBsaWNpdGx5IGlkZW50aWZ5IGFuZCBzaG9ydC1jaXJjdWl0IG9uIGtlcm5lbC1vd25lZCBwYWdlcyAoc2xhYiwgcGFnZSB0YWJsZXMsIHJlc2VydmVkLCBsYXJnZSBrbWFsbG9jKS4gSXQgYWxzbyBpbnRyb2R1Y2VzIGEgbmV3IHN5c2N0bCB0byBwYW5pYyBvbiBzdWNoIHVucmVjb3ZlcmFibGUgZXJyb3JzLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgaGFyZHdhcmUgZXJyb3IgaW5qZWN0aW9uIGludGVyZmFjZXMgKGUuZy4sIGAvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9oYXJkX29mZmxpbmVfcGFnZWAgb3IgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiLFxuICAgIFwiSFdQT0lTT05fSU5KRUNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtb3J5X2ZhaWx1cmVcIixcbiAgICBcImdldF9hbnlfcGFnZVwiLFxuICAgIFwiYWN0aW9uX3Jlc3VsdFwiLFxuICAgIFwicGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZlwiLFxuICAgIFwiaXNfa2VybmVsX293bmVkX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZyBsb2dpYyAoYG1lbW9yeV9mYWlsdXJlYCwgYGdldF9hbnlfcGFnZWApIHRvIGV4cGxpY2l0bHkgaWRlbnRpZnkgYW5kIHNob3J0LWNpcmN1aXQgb24ga2VybmVsLW93bmVkIHBhZ2VzIChzbGFiLCBwYWdlIHRhYmxlcywgcmVzZXJ2ZWQsIGxhcmdlIGttYWxsb2MpLiBJdCBhbHNvIGludHJvZHVjZXMgYSBuZXcgc3lzY3RsIHRvIHBhbmljIG9uIHN1Y2ggdW5yZWNvdmVyYWJsZSBlcnJvcnMuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBoYXJkd2FyZSBlcnJvciBpbmplY3Rpb24gaW50ZXJmYWNlcyAoZS5nLiwgYC9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2hhcmRfb2ZmbGluZV9wYWdlYCBvciBgbWFkdmlzZShNQURWX0hXUE9JU09OKWApLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow64jqx[1] Phase: Succeeded StartedAt: 2026-06-26 23:09:40 +0000 UTC FinishedAt: 2026-06-26 23:09:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64jqx[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-26 23:09:40 +0000 UTC FinishedAt: 2026-06-26 23:09:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64jqx[2] Phase: Succeeded StartedAt: 2026-06-26 23:09:40 +0000 UTC FinishedAt: 2026-06-27 03:18:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64jqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"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":["memory_failure","get_any_page","action_result","panic_on_unrecoverable_mf","is_kernel_owned_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"40e4dccb-98f1-426e-a84a-814aa2f8cf2f","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-06-26 23:09:40 +0000 UTC FinishedAt: 2026-06-27 03:18:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"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":["memory_failure","get_any_page","action_result","panic_on_unrecoverable_mf","is_kernel_owned_page"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"40e4dccb-98f1-426e-a84a-814aa2f8cf2f","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-workflow64jqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"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":["memory_failure","get_any_page","action_result","panic_on_unrecoverable_mf","is_kernel_owned_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"40e4dccb-98f1-426e-a84a-814aa2f8cf2f","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-06-26 23:09:40 +0000 UTC FinishedAt: 2026-06-26 23:10:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64jqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"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":["memory_failure","get_any_page","action_result","panic_on_unrecoverable_mf","is_kernel_owned_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"40e4dccb-98f1-426e-a84a-814aa2f8cf2f","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-06-26 23:09:40 +0000 UTC FinishedAt: 2026-06-26 23:10:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"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-workflow64jqx/series-workflow64jqx-convert-artifact-3889958698/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow64jqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"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":["memory_failure","get_any_page","action_result","panic_on_unrecoverable_mf","is_kernel_owned_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"40e4dccb-98f1-426e-a84a-814aa2f8cf2f","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-06-26 23:10:18 +0000 UTC FinishedAt: 2026-06-26 23:46:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64jqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"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":["memory_failure","get_any_page","action_result","panic_on_unrecoverable_mf","is_kernel_owned_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"40e4dccb-98f1-426e-a84a-814aa2f8cf2f","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-06-26 23:10:18 +0000 UTC FinishedAt: 2026-06-26 23:46:37 +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:*cc2cf5a3-e0d0-4b4d-92ae-8774d75e441f,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-workflow64jqx/series-workflow64jqx-convert-artifact-3889958698/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": "10840f73-7a02-4bf0-a760-88dcb116ac17", "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-workflow64jqx/series-workflow64jqx-build-action-1277266072/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow64jqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"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":["memory_failure","get_any_page","action_result","panic_on_unrecoverable_mf","is_kernel_owned_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"40e4dccb-98f1-426e-a84a-814aa2f8cf2f","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-06-26 23:10:18 +0000 UTC FinishedAt: 2026-06-26 23:46:15 +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:*cc2cf5a3-e0d0-4b4d-92ae-8774d75e441f,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-workflow64jqx/series-workflow64jqx-convert-artifact-3889958698/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": "10840f73-7a02-4bf0-a760-88dcb116ac17", "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-workflow64jqx/series-workflow64jqx-build-action-1277266072/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow64jqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"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":["memory_failure","get_any_page","action_result","panic_on_unrecoverable_mf","is_kernel_owned_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"40e4dccb-98f1-426e-a84a-814aa2f8cf2f","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-06-26 23:46:37 +0000 UTC FinishedAt: 2026-06-26 23:46:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64jqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"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":["memory_failure","get_any_page","action_result","panic_on_unrecoverable_mf","is_kernel_owned_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"40e4dccb-98f1-426e-a84a-814aa2f8cf2f","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-06-26 23:46:37 +0000 UTC FinishedAt: 2026-06-26 23:46:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64jqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"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":["memory_failure","get_any_page","action_result","panic_on_unrecoverable_mf","is_kernel_owned_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"40e4dccb-98f1-426e-a84a-814aa2f8cf2f","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-06-26 23:46:37 +0000 UTC FinishedAt: 2026-06-26 23:46:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64jqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"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":["memory_failure","get_any_page","action_result","panic_on_unrecoverable_mf","is_kernel_owned_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"40e4dccb-98f1-426e-a84a-814aa2f8cf2f","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-06-26 23:46:37 +0000 UTC FinishedAt: 2026-06-26 23:46:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"40e4dccb-98f1-426e-a84a-814aa2f8cf2f","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-workflow64jqx/series-workflow64jqx-convert-artifact-1423493957/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow64jqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"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":["memory_failure","get_any_page","action_result","panic_on_unrecoverable_mf","is_kernel_owned_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"40e4dccb-98f1-426e-a84a-814aa2f8cf2f","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-06-26 23:46:50 +0000 UTC FinishedAt: 2026-06-26 23:49:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64jqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"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":["memory_failure","get_any_page","action_result","panic_on_unrecoverable_mf","is_kernel_owned_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"40e4dccb-98f1-426e-a84a-814aa2f8cf2f","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-06-26 23:46:50 +0000 UTC FinishedAt: 2026-06-26 23:48:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*10840f73-7a02-4bf0-a760-88dcb116ac17,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-workflow64jqx/series-workflow64jqx-build-action-1277266072/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-workflow64jqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"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":["memory_failure","get_any_page","action_result","panic_on_unrecoverable_mf","is_kernel_owned_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"40e4dccb-98f1-426e-a84a-814aa2f8cf2f","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-06-26 23:49:07 +0000 UTC FinishedAt: 2026-06-26 23:49:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64jqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"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":["memory_failure","get_any_page","action_result","panic_on_unrecoverable_mf","is_kernel_owned_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"40e4dccb-98f1-426e-a84a-814aa2f8cf2f","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-06-26 23:49:07 +0000 UTC FinishedAt: 2026-06-26 23:49:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64jqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"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":["memory_failure","get_any_page","action_result","panic_on_unrecoverable_mf","is_kernel_owned_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"40e4dccb-98f1-426e-a84a-814aa2f8cf2f","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-06-26 23:49:07 +0000 UTC FinishedAt: 2026-06-27 00:13:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64jqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"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":["memory_failure","get_any_page","action_result","panic_on_unrecoverable_mf","is_kernel_owned_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"40e4dccb-98f1-426e-a84a-814aa2f8cf2f","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-06-26 23:49:07 +0000 UTC FinishedAt: 2026-06-27 00:13:28 +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:*cc2cf5a3-e0d0-4b4d-92ae-8774d75e441f,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-workflow64jqx/series-workflow64jqx-convert-artifact-1423493957/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": "322aee8b-a8ec-4c45-a181-706def77a259", "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-workflow64jqx/series-workflow64jqx-build-action-3265539985/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow64jqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"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":["memory_failure","get_any_page","action_result","panic_on_unrecoverable_mf","is_kernel_owned_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"40e4dccb-98f1-426e-a84a-814aa2f8cf2f","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-06-26 23:49:07 +0000 UTC FinishedAt: 2026-06-27 00:12:56 +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:*cc2cf5a3-e0d0-4b4d-92ae-8774d75e441f,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-workflow64jqx/series-workflow64jqx-convert-artifact-1423493957/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": "322aee8b-a8ec-4c45-a181-706def77a259", "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-workflow64jqx/series-workflow64jqx-build-action-3265539985/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow64jqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"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":["memory_failure","get_any_page","action_result","panic_on_unrecoverable_mf","is_kernel_owned_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"40e4dccb-98f1-426e-a84a-814aa2f8cf2f","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-06-27 00:13:28 +0000 UTC FinishedAt: 2026-06-27 00:13:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64jqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"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":["memory_failure","get_any_page","action_result","panic_on_unrecoverable_mf","is_kernel_owned_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"40e4dccb-98f1-426e-a84a-814aa2f8cf2f","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-06-27 00:13:28 +0000 UTC FinishedAt: 2026-06-27 00:13:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64jqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"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":["memory_failure","get_any_page","action_result","panic_on_unrecoverable_mf","is_kernel_owned_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"40e4dccb-98f1-426e-a84a-814aa2f8cf2f","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-06-27 00:13:28 +0000 UTC FinishedAt: 2026-06-27 00:15:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64jqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"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":["memory_failure","get_any_page","action_result","panic_on_unrecoverable_mf","is_kernel_owned_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"40e4dccb-98f1-426e-a84a-814aa2f8cf2f","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-06-27 00:13:28 +0000 UTC FinishedAt: 2026-06-27 00:15:37 +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:*322aee8b-a8ec-4c45-a181-706def77a259,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-workflow64jqx/series-workflow64jqx-build-action-3265539985/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-workflow64jqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"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":["memory_failure","get_any_page","action_result","panic_on_unrecoverable_mf","is_kernel_owned_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"40e4dccb-98f1-426e-a84a-814aa2f8cf2f","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-06-27 00:15:46 +0000 UTC FinishedAt: 2026-06-27 03:18:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64jqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"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":["memory_failure","get_any_page","action_result","panic_on_unrecoverable_mf","is_kernel_owned_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"40e4dccb-98f1-426e-a84a-814aa2f8cf2f","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-06-27 00:15:46 +0000 UTC FinishedAt: 2026-06-27 03:18:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_failure","get_any_page","action_result","panic_on_unrecoverable_mf","is_kernel_owned_page"],"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:*10840f73-7a02-4bf0-a760-88dcb116ac17,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*322aee8b-a8ec-4c45-a181-706def77a259,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-workflow64jqx/series-workflow64jqx-build-action-1277266072/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-workflow64jqx/series-workflow64jqx-build-action-3265539985/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow64jqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"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":["memory_failure","get_any_page","action_result","panic_on_unrecoverable_mf","is_kernel_owned_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"40e4dccb-98f1-426e-a84a-814aa2f8cf2f","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-06-27 00:15:46 +0000 UTC FinishedAt: 2026-06-27 00:15:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64jqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"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":["memory_failure","get_any_page","action_result","panic_on_unrecoverable_mf","is_kernel_owned_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"40e4dccb-98f1-426e-a84a-814aa2f8cf2f","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-06-27 00:15:46 +0000 UTC FinishedAt: 2026-06-27 00:15:52 +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":["memory_failure","get_any_page","action_result","panic_on_unrecoverable_mf","is_kernel_owned_page"],"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-workflow64jqx/series-workflow64jqx-convert-artifact-2571393994/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow64jqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"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":["memory_failure","get_any_page","action_result","panic_on_unrecoverable_mf","is_kernel_owned_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"40e4dccb-98f1-426e-a84a-814aa2f8cf2f","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-06-27 00:15:46 +0000 UTC FinishedAt: 2026-06-27 00:15:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64jqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"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":["memory_failure","get_any_page","action_result","panic_on_unrecoverable_mf","is_kernel_owned_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"40e4dccb-98f1-426e-a84a-814aa2f8cf2f","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-06-27 00:15:46 +0000 UTC FinishedAt: 2026-06-27 00:15:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64jqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"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":["memory_failure","get_any_page","action_result","panic_on_unrecoverable_mf","is_kernel_owned_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"40e4dccb-98f1-426e-a84a-814aa2f8cf2f","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-06-27 00:15:46 +0000 UTC FinishedAt: 2026-06-27 00:15:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64jqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"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":["memory_failure","get_any_page","action_result","panic_on_unrecoverable_mf","is_kernel_owned_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"40e4dccb-98f1-426e-a84a-814aa2f8cf2f","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-06-27 00:15:56 +0000 UTC FinishedAt: 2026-06-27 03:18:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64jqx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"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":["memory_failure","get_any_page","action_result","panic_on_unrecoverable_mf","is_kernel_owned_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE","HWPOISON_INJECT"],"series_id":"40e4dccb-98f1-426e-a84a-814aa2f8cf2f","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-06-27 00:15:56 +0000 UTC FinishedAt: 2026-06-27 03:18:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*10840f73-7a02-4bf0-a760-88dcb116ac17,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*322aee8b-a8ec-4c45-a181-706def77a259,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-workflow64jqx/series-workflow64jqx-build-action-1277266072/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-workflow64jqx/series-workflow64jqx-build-action-3265539985/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-workflow64jqx/series-workflow64jqx-convert-artifact-2571393994/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,}