Name: series-workflowkmnvf Phase: Succeeded StartedAt: 2026-06-30 18:41:37 +0000 UTC FinishedAt: 2026-06-30 23:04:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmnvf[0] Phase: Succeeded StartedAt: 2026-06-30 18:41:37 +0000 UTC FinishedAt: 2026-06-30 18:57:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmnvf[0].run-triage Phase: Succeeded StartedAt: 2026-06-30 18:41:37 +0000 UTC FinishedAt: 2026-06-30 18:57:31 +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": "1b6b5319b6000b81da8fca31c6ac65e497f73986", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_FAILURE" ], "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": "1b6b5319b6000b81da8fca31c6ac65e497f73986", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_FAILURE" ], "series_id": "efcf50b4-2dc1-4040-b480-ee96f3dcb94a" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "get_any_page", "panic_on_unrecoverable_mf" ], "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+CgkJCTx0ZD4yMDI2LzA2LzMwIDE4OjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2V0X2FueV9wYWdlJiMzNDssCiAgICAmIzM0O3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBmYWlsdXJlIGhhbmRsZXIgaW4gY29yZSBNTSB0byBzaG9ydC1jaXJjdWl0IHJlY292ZXJ5IGZvciBrZXJuZWwtb3duZWQgcGFnZXMgYW5kIG9wdGlvbmFsbHkgcGFuaWMuIFRoaXMgZXJyb3ItaGFuZGxpbmcgcGF0aCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBtYWR2aXNlKE1BRFZfSFdQT0lTT04pIG9uIGtlcm5lbC1vd25lZCBwYWdlcyBtYXBwZWQgaW4gdXNlciBzcGFjZSAobGlrZSB0aGUgdkRTTykgb3IgdmlhIHN5c2ZzIGVycm9yIGluamVjdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxODo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGNkNjY0OWE1ZDRmN2NkNDlhZTg1NTZlMmQ1MzQzNmM2YjZjYWJhMDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAzMCAxODo1NDowNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3RcbmluZGV4IGI5YjBjMjE4YmZiNDQwLi4yMmNjNTRjYWMzYjIxZCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0XG5AQCAtNjcsNiAmIzQzOzY3LDcgQEAgQ3VycmVudGx5LCB0aGVzZSBmaWxlcyBhcmUgaW4gL3Byb2Mvc3lzL3ZtOlxuIC0gcGFnZS1jbHVzdGVyXG4gLSBwYWdlX2xvY2tfdW5mYWlybmVzc1xuIC0gcGFuaWNfb25fb29tXG4mIzQzOy0gcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZVxuIC0gcGVyY3B1X3BhZ2VsaXN0X2hpZ2hfZnJhY3Rpb25cbiAtIHN0YXRfaW50ZXJ2YWxcbiAtIHN0YXRfcmVmcmVzaFxuQEAgLTkyNSw2ICYjNDM7OTI2LDg1IEBAIHBhbmljX29uX29vbT0yJiM0MztrZHVtcCBnaXZlcyB5b3UgdmVyeSBzdHJvbmcgdG9vbCB0byBpbnZlc3RpZ2F0ZVxuIHdoeSBvb20gaGFwcGVucy4gWW91IGNhbiBnZXQgc25hcHNob3QuXG4gXG4gXG4mIzQzO3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmVcbiYjNDM7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7XG4mIzQzO1doZW4gYSBoYXJkd2FyZSBtZW1vcnkgZXJyb3IgKGUuZy4gbXVsdGktYml0IEVDQykgaGl0cyBhIGtlcm5lbCBwYWdlXG4mIzQzO3RoYXQgY2Fubm90IGJlIHJlY292ZXJlZCBieSB0aGUgbWVtb3J5IGZhaWx1cmUgaGFuZGxlciwgdGhlIGRlZmF1bHRcbiYjNDM7YmVoYXZpb3VyIGlzIHRvIGlnbm9yZSB0aGUgZXJyb3IgYW5kIGNvbnRpbnVlIG9wZXJhdGlvbi4gIFRoaXMgaXNcbiYjNDM7ZGFuZ2Vyb3VzIGJlY2F1c2UgdGhlIGNvcnJ1cHRlZCBkYXRhIHJlbWFpbnMgYWNjZXNzaWJsZSB0byB0aGUga2VybmVsLFxuJiM0MztyaXNraW5nIHNpbGVudCBkYXRhIGNvcnJ1cHRpb24gb3IgYSBkZWxheWVkIGNyYXNoIHdoZW4gdGhlIHBvaXNvbmVkXG4mIzQzO21lbW9yeSBpcyBuZXh0IGFjY2Vzc2VkLlxuJiM0MztcbiYjNDM7V2hlbiBlbmFibGVkLCB0aGlzIHN5c2N0bCB0cmlnZ2VycyBhIHBhbmljIG9uIG1lbW9yeSBmYWlsdXJlIGV2ZW50c1xuJiM0MztoaXR0aW5nIGtlcm5lbC1vd25lZCBwYWdlcyB0aGF0IHRoZSBoYW5kbGVyIGNhbm5vdCByZWNvdmVyOlxuJiM0MztgYFBhZ2VSZXNlcnZlZGBgIChmaXJtd2FyZSByZXNlcnZhdGlvbnMsIGtlcm5lbCBpbWFnZSwgdkRTTywgemVyb1xuJiM0MztwYWdlLCBhbmQgc2ltaWxhciBtZW1ibG9jay1yZXNlcnZlZCByZWdpb25zKSwgYGBQYWdlU2xhYmBgLFxuJiM0MztgYFBhZ2VUYWJsZWBgLCBhbmQgYGBQYWdlTGFyZ2VLbWFsbG9jYGAuICBUaGVzZSBhcmUgb3duZWQgYnkgdGhlXG4mIzQzO2tlcm5lbCBhbmQgdGhlIG1lbW9yeSBmYWlsdXJlIGhhbmRsZXIgY2Fubm90IHJlbGlhYmx5IGV2aWN0IHRoZWlyXG4mIzQzO2NvbnRlbnRzLlxuJiM0MztcbiYjNDM7T3RoZXIgdW5yZWNvdmVyYWJsZSBrZXJuZWwtb3duZWQgcG9wdWxhdGlvbnMgKHZtYWxsb2MgYWxsb2NhdGlvbnMsXG4mIzQzO2tlcm5lbCBzdGFjayBwYWdlcywgLi4uKSBhcmUgbm90IGN1cnJlbnRseSBjb3ZlcmVkIGJlY2F1c2UgdGhlXG4mIzQzO2hhbmRsZXIgaGFzIG5vIHBhZ2UtdHlwZSBzaWduYWwgdGhhdCBkaXN0aW5ndWlzaGVzIHRoZW0gZnJvbSBhXG4mIzQzO3VzZXJzcGFjZSBmb2xpbyB0ZW1wb3JhcmlseSBvZmYgdGhlIExSVSBkdXJpbmcgbWlncmF0aW9uIG9yXG4mIzQzO2NvbXBhY3Rpb24uICBTdWNoIHBhZ2VzIHN0aWxsIGdvIHRocm91Z2ggdGhlIHN0YW5kYXJkXG4mIzQzO01GX01TR19HRVRfSFdQT0lTT04gcGF0aDogYGBQR19od3BvaXNvbmBgIGlzIHNldCBvbiB0aGVtIGFuZCBhXG4mIzQzO2RlbGF5ZWQgY3Jhc2ggb24gdGhlIG5leHQgYWNjZXNzIHJlbWFpbnMgcG9zc2libGUuICBDb3ZlcmFnZSBtYXlcbiYjNDM7Z3JvdyBhcyB0aGUgaGFuZGxlciBnYWlucyBzdHJvbmdlciBrZXJuZWwtb3duZXJzaGlwIHNpZ25hbHMuXG4mIzQzO1xuJiM0MztSZWNvdmVyYWJsZSBmYWlsdXJlIHBhdGhzIGFyZSBhbHNvIGludGVudGlvbmFsbHkgbGVmdCBvdXQ6IGluLWZsaWdodFxuJiM0MztidWRkeSBhbGxvY2F0aW9ucyBhbmQgb3RoZXIgdHJhbnNpZW50IHJhY2VzIHdpdGggdGhlIHBhZ2UgYWxsb2NhdG9yXG4mIzQzO2NhbiByZWFjaCB0aGUgc2FtZSBkaWFnbm9zdGljLCBhbmQgcGFuaWNraW5nIG9uIHRoZW0gd291bGQgcmlza1xuJiM0MztraWxsaW5nIHRoZSBib3ggZm9yIGEgcGFnZSBkZXN0aW5lZCBmb3IgdXNlcnNwYWNlIHdoZXJlIHRoZSBzdGFuZGFyZFxuJiM0MztTSUdCVVMgcmVjb3ZlcnkgcGF0aCBhcHBsaWVzLiAgUGFnZXMgd2hvc2Ugc3RhdGUgY291bGQgbm90IGJlXG4mIzQzO2NsYXNzaWZpZWQgYXQgYWxsIGFyZSBub3QgY292ZXJlZCBlaXRoZXIsIHNpbmNlIGFuIHVua25vd24gc3RhdGUgaXNcbiYjNDM7bm90IGEgc291bmQgYmFzaXMgZm9yIGEgcGFuaWMgZGVjaXNpb24uXG4mIzQzO1xuJiM0MztGb3IgbWFueSBlbnZpcm9ubWVudHMgaXQgaXMgcHJlZmVyYWJsZSB0byBwYW5pYyBpbW1lZGlhdGVseSB3aXRoIGEgY2xlYW5cbiYjNDM7Y3Jhc2ggZHVtcCB0aGF0IGNhcHR1cmVzIHRoZSBvcmlnaW5hbCBlcnJvciBjb250ZXh0LCByYXRoZXIgdGhhbiB0b1xuJiM0Mztjb250aW51ZSBhbmQgZmFjZSBhIHJhbmRvbSBjcmFzaCBsYXRlciB3aG9zZSBjYXVzZSBpcyBkaWZmaWN1bHQgdG9cbiYjNDM7ZGlhZ25vc2UuXG4mIzQzO1xuJiM0MztVc2UgY2FzZXNcbiYjNDM7LS0tLS0tLS0tXG4mIzQzO1xuJiM0MztUaGlzIG9wdGlvbiBpcyBtb3N0IHVzZWZ1bCBpbiBlbnZpcm9ubWVudHMgd2hlcmUgdW5hdHRyaWJ1dGVkIGNyYXNoZXNcbiYjNDM7YXJlIGV4cGVuc2l2ZSB0byBkZWJ1ZyBvciB3aGVyZSBkYXRhIGludGVncml0eSBtdXN0IHRha2UgcHJlY2VkZW5jZVxuJiM0MztvdmVyIGF2YWlsYWJpbGl0eTpcbiYjNDM7XG4mIzQzOyogTGFyZ2UgZmxlZXRzLCB3aGVyZSBtdWx0aS1iaXQgRUNDIGVycm9ycyBvbiBrZXJuZWwgcGFnZXMgYXJlIG9ic2VydmVkXG4mIzQzOyAgcmVndWxhcmx5IGFuZCBwb3N0LW1vcnRlbSBhbmFseXNpcyBvZiBhbiB1bnJlbGF0ZWQgZG93bnN0cmVhbSBjcmFzaFxuJiM0MzsgIChvZnRlbiBzZWNvbmRzIHRvIG1pbnV0ZXMgYWZ0ZXIgdGhlIG9yaWdpbmFsIGVycm9yKSBjb25zdW1lc1xuJiM0MzsgIHNpZ25pZmljYW50IGVuZ2luZWVyaW5nIGVmZm9ydC5cbiYjNDM7XG4mIzQzOyogU3lzdGVtcyBjb25maWd1cmVkIHdpdGgga2R1bXAsIHdoZXJlIHBhbmlja2luZyBhdCB0aGUgbW9tZW50IG9mIHRoZVxuJiM0MzsgIGhhcmR3YXJlIGVycm9yIHByb2R1Y2VzIGEgdm1jb3JlIHRoYXQgc3RpbGwgY29udGFpbnMgdGhlIGZhdWx0aW5nXG4mIzQzOyAgYWRkcmVzcywgdGhlIGFmZmVjdGVkIHBhZ2Ugc3RhdGUsIGFuZCB0aGUgb3JpZ2luYXRpbmcgTUNFL0dIRVNcbiYjNDM7ICByZWNvcmQg4oCUIGNvbnRleHQgdGhhdCBpcyB0eXBpY2FsbHkgbG9zdCBieSB0aGUgdGltZSBhIGRlbGF5ZWQgY3Jhc2hcbiYjNDM7ICBvY2N1cnMuXG4mIzQzO1xuJiM0MzsqIEhpZ2gtYXZhaWxhYmlsaXR5IGNsdXN0ZXJzIHRoYXQgcmVseSBvbiBmYXN0LCBkZXRlcm1pbmlzdGljIG5vZGVcbiYjNDM7ICBmYWlsdXJlIGZvciBmYWlsb3ZlciwgYW5kIHByZWZlciBhbiBpbW1lZGlhdGUgcGFuaWMgb3ZlciBzaWxlbnQgZGF0YVxuJiM0MzsgIGNvcnJ1cHRpb24gcHJvcGFnYXRpbmcgdG8gcmVwbGljYXMgb3IgcGVyc2lzdGVudCBzdG9yYWdlLlxuJiM0MztcbiYjNDM7KiBLZXJuZWwgYW5kIHBsYXRmb3JtIGRldmVsb3BlcnMgcmVwcm9kdWNpbmcgaHdwb2lzb24gaXNzdWVzIHdpdGhcbiYjNDM7ICB0b29scyBzdWNoIGFzIGBgbWNlLWluamVjdGBgIG9yIGVycm9yLWluamVjdGlvbiBkZWJ1Z2ZzIGludGVyZmFjZXMsXG4mIzQzOyAgd2hlcmUgcGFuaWNraW5nIG9uIHRoZSB1bnJlY292ZXJhYmxlIHBhdGggbWFrZXMgcmVncmVzc2lvbnNcbiYjNDM7ICBpbW1lZGlhdGVseSB2aXNpYmxlIGluc3RlYWQgb2Ygc3VyZmFjaW5nIGFzIGxhdGVyLCB1bnJlbGF0ZWRcbiYjNDM7ICBmYWlsdXJlcy5cbiYjNDM7XG4mIzQzOz0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzOzAgVHJ5IHRvIGNvbnRpbnVlIG9wZXJhdGlvbiAoZGVmYXVsdCkuXG4mIzQzOzEgUGFuaWMgaW1tZWRpYXRlbHkuICBJZiB0aGUgYGBwYW5pY2BgIHN5c2N0bCBpcyBhbHNvIG5vbi16ZXJvIHRoZW4gdGhlXG4mIzQzOyAgbWFjaGluZSB3aWxsIGJlIHJlYm9vdGVkLlxuJiM0Mzs9ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MztcbiYjNDM7RXhhbXBsZTo6XG4mIzQzO1xuJiM0MzsgICAgIGVjaG8gMSBcdTAwM2UgL3Byb2Mvc3lzL3ZtL3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmVcbiYjNDM7XG4mIzQzO1xuIHBlcmNwdV9wYWdlbGlzdF9oaWdoX2ZyYWN0aW9uXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuaW5kZXggNTE1MDhhNTVjNDA1NWUuLmUwOTdmYzgyNjJjZjgzIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuQEAgLTc0LDYgJiM0Mzs3NCw4IEBAIHN0YXRpYyBpbnQgc3lzY3RsX21lbW9yeV9mYWlsdXJlX3JlY292ZXJ5IF9fcmVhZF9tb3N0bHkgPSAxO1xuIFxuIHN0YXRpYyBpbnQgc3lzY3RsX2VuYWJsZV9zb2Z0X29mZmxpbmUgX19yZWFkX21vc3RseSA9IDE7XG4gXG4mIzQzO3N0YXRpYyBpbnQgc3lzY3RsX3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWYgX19yZWFkX21vc3RseTtcbiYjNDM7XG4gYXRvbWljX2xvbmdfdCBudW1fcG9pc29uZWRfcGFnZXMgX19yZWFkX21vc3RseSA9IEFUT01JQ19MT05HX0lOSVQoMCk7XG4gXG4gc3RhdGljIGJvb2wgaHdfbWVtb3J5X2ZhaWx1cmUgX19yZWFkX21vc3RseSA9IGZhbHNlO1xuQEAgLTE1NSw2ICYjNDM7MTU3LDE1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG1lbW9yeV9mYWlsdXJlX3RhYmxlW10gPSB7XG4gXHRcdC5wcm9jX2hhbmRsZXJcdD0gcHJvY19kb2ludHZlY19taW5tYXgsXG4gXHRcdC5leHRyYTFcdFx0PSBTWVNDVExfWkVSTyxcbiBcdFx0LmV4dHJhMlx0XHQ9IFNZU0NUTF9PTkUsXG4mIzQzO1x0fSxcbiYjNDM7XHR7XG4mIzQzO1x0XHQucHJvY25hbWVcdD0gXCYjMzQ7cGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZVwmIzM0OyxcbiYjNDM7XHRcdC5kYXRhXHRcdD0gXHUwMDI2c3lzY3RsX3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWYsXG4mIzQzO1x0XHQubWF4bGVuXHRcdD0gc2l6ZW9mKHN5c2N0bF9wYW5pY19vbl91bnJlY292ZXJhYmxlX21mKSxcbiYjNDM7XHRcdC5tb2RlXHRcdD0gMDY0NCxcbiYjNDM7XHRcdC5wcm9jX2hhbmRsZXJcdD0gcHJvY19kb2ludHZlY19taW5tYXgsXG4mIzQzO1x0XHQuZXh0cmExXHRcdD0gU1lTQ1RMX1pFUk8sXG4mIzQzO1x0XHQuZXh0cmEyXHRcdD0gU1lTQ1RMX09ORSxcbiBcdH1cbiB9O1xuIFxuQEAgLTk4MCwxNyAmIzQzOzk5MSw2IEBAIHN0YXRpYyBib29sIGhhc19leHRyYV9yZWZjb3VudChzdHJ1Y3QgcGFnZV9zdGF0ZSAqcHMsIHN0cnVjdCBwYWdlICpwLFxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi0vKlxuLSAqIEVycm9yIGhpdCBrZXJuZWwgcGFnZS5cbi0gKiBEbyBub3RoaW5nLCB0cnkgdG8gYmUgbHVja3kgYW5kIG5vdCB0b3VjaCB0aGlzIGluc3RlYWQuIEZvciBhIGZldyBjYXNlcyB3ZVxuLSAqIGNvdWxkIGJlIG1vcmUgc29waGlzdGljYXRlZC5cbi0gKi9cbi1zdGF0aWMgaW50IG1lX2tlcm5lbChzdHJ1Y3QgcGFnZV9zdGF0ZSAqcHMsIHN0cnVjdCBwYWdlICpwKVxuLXtcbi1cdHVubG9ja19wYWdlKHApO1xuLVx0cmV0dXJuIE1GX0lHTk9SRUQ7XG4tfVxuLVxuIC8qXG4gICogUGFnZSBpbiB1bmtub3duIHN0YXRlLiBEbyBub3RoaW5nLlxuICAqIFRoaXMgaXMgYSBjYXRjaC1hbGwgaW4gY2FzZSB3ZSBmYWlsIHRvIG1ha2Ugc2Vuc2Ugb2YgdGhlIHBhZ2Ugc3RhdGUuXG5AQCAtMTE5OSwxMCAmIzQzOzExOTksOCBAQCBzdGF0aWMgaW50IG1lX2h1Z2VfcGFnZShzdHJ1Y3QgcGFnZV9zdGF0ZSAqcHMsIHN0cnVjdCBwYWdlICpwKVxuICNkZWZpbmUgbWxvY2tcdFx0KDFVTCBcdTAwM2NcdTAwM2MgUEdfbWxvY2tlZClcbiAjZGVmaW5lIGxydVx0XHQoMVVMIFx1MDAzY1x1MDAzYyBQR19scnUpXG4gI2RlZmluZSBoZWFkXHRcdCgxVUwgXHUwMDNjXHUwMDNjIFBHX2hlYWQpXG4tI2RlZmluZSByZXNlcnZlZFx0KDFVTCBcdTAwM2NcdTAwM2MgUEdfcmVzZXJ2ZWQpXG4gXG4gc3RhdGljIHN0cnVjdCBwYWdlX3N0YXRlIGVycm9yX3N0YXRlc1tdID0ge1xuLVx0eyByZXNlcnZlZCxcdHJlc2VydmVkLFx0TUZfTVNHX0tFUk5FTCxcdG1lX2tlcm5lbCB9LFxuIFx0LypcbiBcdCAqIGZyZWUgcGFnZXMgYXJlIHNwZWNpYWxseSBkZXRlY3RlZCBvdXRzaWRlIHRoaXMgdGFibGU6XG4gXHQgKiBQR19idWRkeSBwYWdlcyBvbmx5IG1ha2UgYSBzbWFsbCBmcmFjdGlvbiBvZiBhbGwgZnJlZSBwYWdlcy5cbkBAIC0xMjM0LDcgJiM0MzsxMjMyLDYgQEAgc3RhdGljIHN0cnVjdCBwYWdlX3N0YXRlIGVycm9yX3N0YXRlc1tdID0ge1xuICN1bmRlZiBtbG9ja1xuICN1bmRlZiBscnVcbiAjdW5kZWYgaGVhZFxuLSN1bmRlZiByZXNlcnZlZFxuIFxuIHN0YXRpYyB2b2lkIHVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyh1bnNpZ25lZCBsb25nIHBmbixcbiBcdFx0XHRcdCAgICAgZW51bSBtZl9yZXN1bHQgcmVzdWx0KVxuQEAgLTEyNjksNiAmIzQzOzEyNjYsMTUgQEAgc3RhdGljIHZvaWQgdXBkYXRlX3Blcl9ub2RlX21mX3N0YXRzKHVuc2lnbmVkIGxvbmcgcGZuLFxuIFx0JiM0MzsmIzQzO21mX3N0YXRzLVx1MDAzZXRvdGFsO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZihlbnVtIG1mX2FjdGlvbl9wYWdlX3R5cGUgdHlwZSxcbiYjNDM7XHRcdFx0XHQgICAgICBlbnVtIG1mX3Jlc3VsdCByZXN1bHQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXN5c2N0bF9wYW5pY19vbl91bnJlY292ZXJhYmxlX21mKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHlwZSA9PSBNRl9NU0dfS0VSTkVMIFx1MDAyNlx1MDAyNiByZXN1bHQgPT0gTUZfSUdOT1JFRDtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIFwmIzM0O0RpcnR5L0NsZWFuXCYjMzQ7IGluZGljYXRpb24gaXMgbm90IDEwMCUgYWNjdXJhdGUgZHVlIHRvIHRoZSBwb3NzaWJpbGl0eSBvZlxuICAqIHNldHRpbmcgUEdfZGlydHkgb3V0c2lkZSBwYWdlIGxvY2suIFNlZSBhbHNvIGNvbW1lbnQgYWJvdmUgc2V0X3BhZ2VfZGlydHkoKS5cbkBAIC0xMjg2LDYgJiM0MzsxMjkyLDkgQEAgc3RhdGljIGludCBhY3Rpb25fcmVzdWx0KHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIG1mX2FjdGlvbl9wYWdlX3R5cGUgdHlwZSxcbiBcdHByX2VycihcJiMzNDslI2x4OiByZWNvdmVyeSBhY3Rpb24gZm9yICVzOiAlc1xcblwmIzM0OyxcbiBcdFx0cGZuLCBhY3Rpb25fcGFnZV90eXBlc1t0eXBlXSwgYWN0aW9uX25hbWVbcmVzdWx0XSk7XG4gXG4mIzQzO1x0aWYgKHBhbmljX29uX3VucmVjb3ZlcmFibGVfbWYodHlwZSwgcmVzdWx0KSlcbiYjNDM7XHRcdHBhbmljKFwmIzM0O01lbW9yeSBmYWlsdXJlOiAlI2x4OiB1bnJlY292ZXJhYmxlIHBhZ2VcJiMzNDssIHBmbik7XG4mIzQzO1xuIFx0cmV0dXJuIChyZXN1bHQgPT0gTUZfUkVDT1ZFUkVEIHx8IHJlc3VsdCA9PSBNRl9ERUxBWUVEKSA/IDAgOiAtRUJVU1k7XG4gfVxuIFxuQEAgLTEzMzksNiAmIzQzOzEzNDgsMzggQEAgc3RhdGljIGlubGluZSBib29sIEhXUG9pc29uSGFuZGxhYmxlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuIFx0cmV0dXJuIFBhZ2VMUlUocGFnZSkgfHwgaXNfZnJlZV9idWRkeV9wYWdlKHBhZ2UpO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogUG9zaXRpdmUgaWRlbnRpZmljYXRpb24gb2YgcGFnZXMgdGhlIGh3cG9pc29uIGhhbmRsZXIgY2Fubm90IHJlY292ZXI6XG4mIzQzOyAqIHBhZ2VzIG93bmVkIGJ5IGtlcm5lbCBpbnRlcm5hbHMgd2l0aCBubyB1c2Vyc3BhY2UgbWFwcGluZyB0byB1bm1hcCwgbm9cbiYjNDM7ICogZmlsZSBtYXBwaW5nIHRvIGludmFsaWRhdGUsIGFuZCBubyBtaWdyYXRpb24gdGFyZ2V0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBib29sIGlzX2tlcm5lbF9vd25lZF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBhZ2UgKmhlYWQ7XG4mIzQzO1x0Ym9vbCBrZXJuZWxfb3duZWQ7XG4mIzQzO1xuJiM0MztcdC8qIFBHX3Jlc2VydmVkIGlzIGEgcGVyLXBhZ2UgZmxhZywgbmV2ZXIgc2V0IG9uIGEgY29tcG91bmQgcGFnZS4gKi9cbiYjNDM7XHRpZiAoUGFnZVJlc2VydmVkKHBhZ2UpKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUGFnZS10eXBlIGJpdHMgbGl2ZSBvbmx5IG9uIHRoZSBoZWFkIHBhZ2UsIHNvIHJlc29sdmUgYW55IHRhaWxcbiYjNDM7XHQgKiBmaXJzdC4gIFRoZSBjaGVjayB0YWtlcyBubyByZWZjb3VudDsgcmVjaGVjayB0aGUgaGVhZCBhZnRlcndhcmRzXG4mIzQzO1x0ICogc28gYSBjb25jdXJyZW50IHNwbGl0IG9yIGNvbXBvdW5kIGZyZWUgY2Fubm90IGxlYXZlIHVzIHRydXN0aW5nXG4mIzQzO1x0ICogYSBzdGFsZSB2aWV3LiAgQSByZXNpZHVhbCBmcmVlLVx1MDAzZWFsbG9jLVx1MDAzZWZyZWUgY2Fubm90IGJlIGNsb3NlZCBoZXJlXG4mIzQzO1x0ICogKGZyb3plbiBzbGFiIGFuZCBsYXJnZS1rbWFsbG9jIHBhZ2VzIGNhbm5vdCBiZSBwaW5uZWQpLCBidXQgaXNcbiYjNDM7XHQgKiBoYXJtbGVzczogd2hlcmUgYSB3cm9uZyB2ZXJkaWN0IGNvdWxkIHBhbmljLCBtZW1vcnlfZmFpbHVyZSgpIGhhc1xuJiM0MztcdCAqIGFscmVhZHkgc2V0IFBhZ2VIV1BvaXNvbiwgd2hpY2ggYmFycyB0aGUgcGFnZSBmcm9tIHRoZSBhbGxvY2F0b3IuXG4mIzQzO1x0ICovXG4mIzQzO3JldHJ5OlxuJiM0MztcdGhlYWQgPSBjb21wb3VuZF9oZWFkKHBhZ2UpO1xuJiM0MztcdGtlcm5lbF9vd25lZCA9IFBhZ2VTbGFiKGhlYWQpIHx8IFBhZ2VUYWJsZShoZWFkKSB8fFxuJiM0MztcdFx0ICAgICAgIFBhZ2VMYXJnZUttYWxsb2MoaGVhZCk7XG4mIzQzO1x0aWYgKGhlYWQgIT0gY29tcG91bmRfaGVhZChwYWdlKSlcbiYjNDM7XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1x0cmV0dXJuIGtlcm5lbF9vd25lZDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IF9fZ2V0X2h3cG9pc29uX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4ge1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG5AQCAtMTM4NSw2ICYjNDM7MTQyNiwxOSBAQCBzdGF0aWMgaW50IGdldF9hbnlfcGFnZShzdHJ1Y3QgcGFnZSAqcCwgdW5zaWduZWQgbG9uZyBmbGFncylcbiBcdGlmIChmbGFncyBcdTAwMjYgTUZfQ09VTlRfSU5DUkVBU0VEKVxuIFx0XHRjb3VudF9pbmNyZWFzZWQgPSB0cnVlO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogUGFnZSB0eXBlcyB3ZSBrbm93IGFyZSBrZXJuZWwtb3duZWQgYW5kIGNhbm5vdCBiZSByZWNvdmVyZWQuXG4mIzQzO1x0ICogU2hvcnQtY2lyY3VpdCBiZWZvcmUgdGhlIHNoYWtlX3BhZ2UoKSAvIHJldHJ5IGxvb3AsIHdoaWNoXG4mIzQzO1x0ICogY2Fubm90IHR1cm4gYW55IG9mIHRoZXNlIGludG8gc29tZXRoaW5nIEhXUG9pc29uSGFuZGxhYmxlKCkuXG4mIzQzO1x0ICogRHJvcCB0aGUgY2FsbGVyJiMzOTtzIHJlZmVyZW5jZSBpZiBNRl9DT1VOVF9JTkNSRUFTRUQgdG9vayBvbmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGlzX2tlcm5lbF9vd25lZF9wYWdlKHApKSB7XG4mIzQzO1x0XHRpZiAoY291bnRfaW5jcmVhc2VkKVxuJiM0MztcdFx0XHRwdXRfcGFnZShwKTtcbiYjNDM7XHRcdHJldCA9IC1FTk9UUkVDT1ZFUkFCTEU7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuIHRyeV9hZ2FpbjpcbiBcdGlmICghY291bnRfaW5jcmVhc2VkKSB7XG4gXHRcdHJldCA9IF9fZ2V0X2h3cG9pc29uX3BhZ2UocCwgZmxhZ3MpO1xuQEAgLTE0MzIsNyAmIzQzOzE0ODYsNyBAQCBzdGF0aWMgaW50IGdldF9hbnlfcGFnZShzdHJ1Y3QgcGFnZSAqcCwgdW5zaWduZWQgbG9uZyBmbGFncylcbiBcdFx0cmV0ID0gLUVJTztcbiBcdH1cbiBvdXQ6XG4tXHRpZiAocmV0ID09IC1FSU8pXG4mIzQzO1x0aWYgKHJldCA9PSAtRUlPIHx8IHJldCA9PSAtRU5PVFJFQ09WRVJBQkxFKVxuIFx0XHRwcl9lcnIoXCYjMzQ7JSNseDogdW5oYW5kbGFibGUgcGFnZS5cXG5cJiMzNDssIHBhZ2VfdG9fcGZuKHApKTtcbiBcbiBcdHJldHVybiByZXQ7XG5AQCAtMTQ4OSw3ICYjNDM7MTU0MywxMCBAQCBzdGF0aWMgaW50IF9fZ2V0X3VucG9pc29uX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4gICogICAgICAgICAtRUlPIGZvciBwYWdlcyBvbiB3aGljaCB3ZSBjYW4gbm90IGhhbmRsZSBtZW1vcnkgZXJyb3JzLFxuICAqICAgICAgICAgLUVCVVNZIHdoZW4gZ2V0X2h3cG9pc29uX3BhZ2UoKSBoYXMgcmFjZWQgd2l0aCBwYWdlIGxpZmVjeWNsZVxuICAqICAgICAgICAgb3BlcmF0aW9ucyBsaWtlIGFsbG9jYXRpb24gYW5kIGZyZWUsXG4tICogICAgICAgICAtRUhXUE9JU09OIHdoZW4gdGhlIHBhZ2UgaXMgaHdwb2lzb25lZCBhbmQgdGFrZW4gb2ZmIGZyb20gYnVkZHkuXG4mIzQzOyAqICAgICAgICAgLUVIV1BPSVNPTiB3aGVuIHRoZSBwYWdlIGlzIGh3cG9pc29uZWQgYW5kIHRha2VuIG9mZiBmcm9tIGJ1ZGR5LFxuJiM0MzsgKiAgICAgICAgIC1FTk9UUkVDT1ZFUkFCTEUgZm9yIGtlcm5lbC1vd25lZCBwYWdlcyBpZGVudGlmaWVkIGJ5XG4mIzQzOyAqICAgICAgICAgaXNfa2VybmVsX293bmVkX3BhZ2UoKSAoUEdfcmVzZXJ2ZWQsIHNsYWIsXG4mIzQzOyAqICAgICAgICAgcGFnZS10YWJsZSwgbGFyZ2Uta21hbGxvYykgdGhhdCB0aGUgaGFuZGxlciBjYW5ub3QgcmVjb3Zlci5cbiAgKi9cbiBzdGF0aWMgaW50IGdldF9od3BvaXNvbl9wYWdlKHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuIHtcbkBAIC0yNDAyLDcgJiM0MzsyNDU5LDggQEAgaW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG4gXHQgKiB0aGF0IG1heSBtYWtlIHBhZ2VfcmVmX2ZyZWV6ZSgpL3BhZ2VfcmVmX3VuZnJlZXplKCkgbWlzbWF0Y2guXG4gXHQgKi9cbiBcdHJlcyA9IGdldF9od3BvaXNvbl9wYWdlKHAsIGZsYWdzKTtcbi1cdGlmICghcmVzKSB7XG4mIzQzO1x0c3dpdGNoIChyZXMpIHtcbiYjNDM7XHRjYXNlIDA6XG4gXHRcdGlmIChpc19mcmVlX2J1ZGR5X3BhZ2UocCkpIHtcbiBcdFx0XHRpZiAodGFrZV9wYWdlX29mZl9idWRkeShwKSkge1xuIFx0XHRcdFx0cGFnZV9yZWZfaW5jKHApO1xuQEAgLTI0MjEsNyAmIzQzOzI0NzksMTkgQEAgaW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG4gXHRcdFx0cmVzID0gYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19LRVJORUxfSElHSF9PUkRFUiwgTUZfSUdOT1JFRCk7XG4gXHRcdH1cbiBcdFx0Z290byB1bmxvY2tfbXV0ZXg7XG4tXHR9IGVsc2UgaWYgKHJlcyBcdTAwM2MgMCkge1xuJiM0MztcdGNhc2UgMTpcbiYjNDM7XHRcdC8qIEdvdCBhIHJlZmNvdW50IG9uIGEgaGFuZGxhYmxlIHBhZ2UuICovXG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIC1FTk9UUkVDT1ZFUkFCTEU6XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogU3RhYmxlIHVuaGFuZGxhYmxlIGtlcm5lbC1vd25lZCBwYWdlIChQR19yZXNlcnZlZCxcbiYjNDM7XHRcdCAqIHNsYWIsIHBhZ2UgdGFibGVzLCBsYXJnZS1rbWFsbG9jKS5cbiYjNDM7XHRcdCAqIE5vIHJlY292ZXJ5IHBvc3NpYmxlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyZXMgPSBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0tFUk5FTCwgTUZfSUdOT1JFRCk7XG4mIzQzO1x0XHRnb3RvIHVubG9ja19tdXRleDtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0LyogVHJhbnNpZW50IGxpZmVjeWNsZSByYWNlIHdpdGggdGhlIHBhZ2UgYWxsb2NhdG9yLiAqL1xuIFx0XHRyZXMgPSBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0dFVF9IV1BPSVNPTiwgTUZfSUdOT1JFRCk7XG4gXHRcdGdvdG8gdW5sb2NrX211dGV4O1xuIFx0fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbmluZGV4IGU2ZGY5NjhmMDk3MWM4Li5lZDMyMWFlNzA5ZGFjZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuQEAgLTE3NCw2ICYjNDM7MTc0LDEwIEBAIFRFU1RfUFJPR1MgJiM0Mzs9IGtzZnRfdXNlcmZhdWx0ZmQuc2hcbiBURVNUX1BST0dTICYjNDM7PSBrc2Z0X3ZtYV9tZXJnZS5zaFxuIFRFU1RfUFJPR1MgJiM0Mzs9IGtzZnRfdm1hbGxvYy5zaFxuIFxuJiM0MzsjIERlc3RydWN0aXZlOiBldmVyeSBzdWNjZXNzZnVsIHJ1biBwYW5pY3MgdGhlIGtlcm5lbC4gIEluc3RhbGxlZCBhbmRcbiYjNDM7IyBrZXB0IGV4ZWN1dGFibGUsIGJ1dCBub3QgcnVuIGZyb20gYSBkZWZhdWx0IGtzZWxmdGVzdCBpbnZvY2F0aW9uLlxuJiM0MztURVNUX1BST0dTX0VYVEVOREVEICYjNDM7PSBod3BvaXNvbi1wYW5pYy5zaFxuJiM0MztcbiBURVNUX0ZJTEVTIDo9IHRlc3Rfdm1hbGxvYy5zaFxuIFRFU1RfRklMRVMgJiM0Mzs9IHRlc3RfaG1tLnNoXG4gVEVTVF9GSUxFUyAmIzQzOz0gdmFfaGlnaF9hZGRyX3N3aXRjaC5zaFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h3cG9pc29uLXBhbmljLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHdwb2lzb24tcGFuaWMuc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZDk1M2QxMzY3MzMyNDRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h3cG9pc29uLXBhbmljLnNoXG5AQCAtMCwwICYjNDM7MSwyNTUgQEBcbiYjNDM7IyEvYmluL2Jhc2hcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjXG4mIzQzOyMgVmVyaWZ5IHZtLnBhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmUgYnkgaW5qZWN0aW5nIGEgaHdwb2lzb25cbiYjNDM7IyBlcnJvciBvbiBhIGtlcm5lbC1vd25lZCBwYWdlIGFuZCBjb25maXJtaW5nIHRoZSBrZXJuZWwgcGFuaWNzLlxuJiM0MzsjXG4mIzQzOyMgVGhyZWUgXCYjMzQ7a2luZHNcJiMzNDsgb2Yga2VybmVsLW93bmVkIHBhZ2UgY2FuIGJlIHRhcmdldGVkLCBzZWxlY3RhYmxlIHZpYSB0aGVcbiYjNDM7IyBmaXJzdCBwb3NpdGlvbmFsIGFyZ3VtZW50IChkZWZhdWx0OiByb2RhdGEpOlxuJiM0MzsjXG4mIzQzOyMgICByb2RhdGEgIC0gYSBQR19yZXNlcnZlZCBwYWdlIGluIHRoZSBrZXJuZWwgcm9kYXRhIHJhbmdlXG4mIzQzOyMgICAgICAgICAgICAgKHNvdXJjZWQgZnJvbSAvcHJvYy9pb21lbSBcJiMzNDtLZXJuZWwgcm9kYXRhXCYjMzQ7KS4gIEV4ZXJjaXNlc1xuJiM0MzsjICAgICAgICAgICAgIG1lbW9yeV9mYWlsdXJlKCkgLVx1MDAzZSBnZXRfYW55X3BhZ2UoKSBvbiBhIFBhZ2VSZXNlcnZlZCBwYWdlLlxuJiM0MzsjXG4mIzQzOyMgICBzbGFiICAgIC0gYSBzbGFiIHBhZ2UgZm91bmQgdmlhIC9wcm9jL2twYWdlZmxhZ3MgKEtQRl9TTEFCKS5cbiYjNDM7IyAgICAgICAgICAgICBFeGVyY2lzZXMgbWVtb3J5X2ZhaWx1cmUoKSAtXHUwMDNlIGdldF9hbnlfcGFnZSgpIG9uIGEgbm9uXG4mIzQzOyMgICAgICAgICAgICAgUEdfcmVzZXJ2ZWQga2VybmVsLW93bmVkIHBhZ2UuICBUaGlzIHBhdGggaXMgd2hhdCBjYXRjaGVzXG4mIzQzOyMgICAgICAgICAgICAgcmVncmVzc2lvbnMgd2hlcmUgZ2V0X2FueV9wYWdlKCkgY29sbGFwc2VzIGtlcm5lbC1vd25lZFxuJiM0MzsjICAgICAgICAgICAgIHBhZ2VzIGludG8gYSB0cmFuc2llbnQgLUVJTyBpbnN0ZWFkIG9mIC1FTk9UUkVDT1ZFUkFCTEUuXG4mIzQzOyNcbiYjNDM7IyAgIHBndGFibGUgLSBhIHBhZ2UtdGFibGUgcGFnZSBmb3VuZCB2aWEgL3Byb2Mva3BhZ2VmbGFncyAoS1BGX1BHVEFCTEUpLlxuJiM0MzsjICAgICAgICAgICAgIFNhbWUgcGF0aCBhcyBzbGFiLCBkaWZmZXJlbnQgcGFnZSB0eXBlLlxuJiM0MzsjXG4mIzQzOyMgVGhpcyB0ZXN0IGlzIERFU1RSVUNUSVZFOiBhIHN1Y2Nlc3NmdWwgcnVuIGNyYXNoZXMgdGhlIGtlcm5lbC4gIEl0IGlzXG4mIzQzOyMgbWVhbnQgdG8gYmUgZXhlY3V0ZWQgaW5zaWRlIGEgZGlzcG9zYWJsZSBWTSAoZS5nLiB2aXJ0bWUtbmcpIHdpdGggYVxuJiM0MzsjIHNlcmlhbCBjb25zb2xlIGNhcHR1cmVkIGJ5IHRoZSBoYXJuZXNzLiAgSXQgaXMgc2tpcHBlZCB1bmxlc3MgdGhlXG4mIzQzOyMgY2FsbGVyIG9wdHMgaW4gdmlhIFJVTl9ERVNUUlVDVElWRT0xLlxuJiM0MzsjXG4mIzQzOyMgVGVzdCBwYXNzZXMgZXh0ZXJuYWxseTogdGhlIGtlcm5lbCBtdXN0IHBhbmljIHdpdGhcbiYjNDM7IyAgIFwmIzM0O01lbW9yeSBmYWlsdXJlOiBcdTAwM2NwZm5cdTAwM2U6IHVucmVjb3ZlcmFibGUgcGFnZVwmIzM0O1xuJiM0MzsjIEEgcmV0dXJuIGZyb20gdGhlIGluamVjdCBtZWFucyBubyBwYW5pYyBmaXJlZDogdGhhdCBpcyBhIGZhaWx1cmUsXG4mIzQzOyMgdW5sZXNzIHRoZSB0YXJnZXQgUEZOIHJhY2VkIHRvIGEgZGlmZmVyZW50IHBhZ2UgdHlwZSBiZWZvcmUgaW5qZWN0aW9uLFxuJiM0MzsjIGluIHdoaWNoIGNhc2UgdGhlIHJ1biBpcyBpbmNvbmNsdXNpdmUgYW5kIGlzIHNraXBwZWQuXG4mIzQzOyNcbiYjNDM7IyBBdXRob3I6IEJyZW5vIExlaXRhbyBcdTAwM2NsZWl0YW9AZGViaWFuLm9yZ1x1MDAzZVxuJiM0MztcbiYjNDM7c2V0IC11XG4mIzQzO1xuJiM0MzsjIEtUQVAgb3V0cHV0IGhlbHBlcnMgKGt0YXBfcHJpbnRfbXNnLCBrdGFwX3NraXBfYWxsLCBrdGFwX2V4aXRfZmFpbF9tc2csIC4uLikuXG4mIzQzO0RJUj1cJiMzNDskKGRpcm5hbWUgXCYjMzQ7JChyZWFkbGluayAtZiBcJiMzNDskMFwmIzM0OylcJiMzNDspXCYjMzQ7XG4mIzQzOyMgc2hlbGxjaGVjayBzb3VyY2U9Li4va3NlbGZ0ZXN0L2t0YXBfaGVscGVycy5zaFxuJiM0Mztzb3VyY2UgXCYjMzQ7JHtESVJ9XCYjMzQ7Ly4uL2tzZWxmdGVzdC9rdGFwX2hlbHBlcnMuc2hcbiYjNDM7XG4mIzQzO3N5c2N0bF9wYXRoPS9wcm9jL3N5cy92bS9wYW5pY19vbl91bnJlY292ZXJhYmxlX21lbW9yeV9mYWlsdXJlXG4mIzQzO2luamVjdF9wYXRoPS9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2hhcmRfb2ZmbGluZV9wYWdlXG4mIzQzO2twYWdlZmxhZ3NfcGF0aD0vcHJvYy9rcGFnZWZsYWdzXG4mIzQzO3VucG9pc29uX3BhdGg9L3N5cy9rZXJuZWwvZGVidWcvaHdwb2lzb24vdW5wb2lzb24tcGZuXG4mIzQzO1xuJiM0MzsjIC9wcm9jL2twYWdlZmxhZ3MgYml0IHBvc2l0aW9ucyAoc2VlIGluY2x1ZGUvdWFwaS9saW51eC9rZXJuZWwtcGFnZS1mbGFncy5oKVxuJiM0MztLUEZfU0xBQj03XG4mIzQzO0tQRl9DT01QT1VORF9UQUlMPTE2XG4mIzQzO0tQRl9IV1BPSVNPTj0xOVxuJiM0MztLUEZfTk9QQUdFPTIwXG4mIzQzO0tQRl9QR1RBQkxFPTI2XG4mIzQzO0tQRl9SRVNFUlZFRD0zMlxuJiM0MztcbiYjNDM7cGFnZXNpemU9JChnZXRjb25mIFBBR0VfU0laRSlcbiYjNDM7XG4mIzQzO2tpbmQ9JHsxOi1yb2RhdGF9XG4mIzQzO1xuJiM0MztpZiBbIFwmIzM0OyQoaWQgLXUpXCYjMzQ7IC1uZSAwIF07IHRoZW5cbiYjNDM7XHRrdGFwX3NraXBfYWxsIFwmIzM0O211c3QgcnVuIGFzIHJvb3RcJiMzNDtcbiYjNDM7XHRleGl0IFwmIzM0OyRLU0ZUX1NLSVBcJiMzNDtcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzO2lmIFsgISAtdyBcJiMzNDskc3lzY3RsX3BhdGhcJiMzNDsgXTsgdGhlblxuJiM0MztcdGt0YXBfc2tpcF9hbGwgXCYjMzQ7JHN5c2N0bF9wYXRoIG5vdCBwcmVzZW50IChrZXJuZWwgd2l0aG91dCB0aGUgc3lzY3RsPylcJiMzNDtcbiYjNDM7XHRleGl0IFwmIzM0OyRLU0ZUX1NLSVBcJiMzNDtcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzO2lmIFsgISAtdyBcJiMzNDskaW5qZWN0X3BhdGhcJiMzNDsgXTsgdGhlblxuJiM0MztcdGt0YXBfc2tpcF9hbGwgXCYjMzQ7JGluamVjdF9wYXRoIG5vdCBwcmVzZW50IChubyBNRU1PUllfSE9UUExVRz8pXCYjMzQ7XG4mIzQzO1x0ZXhpdCBcJiMzNDskS1NGVF9TS0lQXCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO1xuJiM0MztpZiBbIFwmIzM0OyR7UlVOX0RFU1RSVUNUSVZFOi0wfVwmIzM0OyAhPSBcJiMzNDsxXCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRrdGFwX3NraXBfYWxsIFwmIzM0O2Rlc3RydWN0aXZlIHRlc3Q7IHJlLXJ1biB3aXRoIFJVTl9ERVNUUlVDVElWRT0xIGluc2lkZSBhIGRpc3Bvc2FibGUgVk1cJiMzNDtcbiYjNDM7XHRleGl0IFwmIzM0OyRLU0ZUX1NLSVBcJiMzNDtcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzOyMgUGljayBhIFBGTiBpbnNpZGUgdGhlIGtlcm5lbCBpbWFnZSByb2RhdGEgcmVnaW9uIG9mIC9wcm9jL2lvbWVtLlxuJiM0MzsjIFRoaXMgaXMgcHJlZmVycmVkIG92ZXIgYSB0b3AtbGV2ZWwgXCYjMzQ7UmVzZXJ2ZWRcJiMzNDsgZW50cnkgYmVjYXVzZSB0b3AtbGV2ZWxcbiYjNDM7IyBSZXNlcnZlZCByYW5nZXMgYXJlIG9mdGVuIGZpcm13YXJlIGhvbGVzIHRoYXQgaGF2ZSBubyBiYWNraW5nIHN0cnVjdFxuJiM0MzsjIHBhZ2U7IHBmbl90b19vbmxpbmVfcGFnZSgpIHJldHVybnMgTlVMTCBvbiB0aG9zZSBhbmQgbWVtb3J5X2ZhaWx1cmUoKVxuJiM0MzsjIGJhaWxzIG91dCB3aXRoIC1FTlhJTyBiZWZvcmUgcmVhY2hpbmcgdGhlIHBhbmljIHBhdGguXG4mIzQzOyNcbiYjNDM7IyBcJiMzNDtLZXJuZWwgcm9kYXRhXCYjMzQ7IGlzIHJlcG9ydGVkIGFzIGEgc3ViLXJlc291cmNlIG9mIFwmIzM0O1N5c3RlbSBSQU1cJiMzNDsgb24gZXZlcnlcbiYjNDM7IyBtYWpvciBhcmNoaXRlY3R1cmUsIHdoaWNoIGd1YXJhbnRlZXM6XG4mIzQzOyMgICAtIHRoZSBQRk4gaXMgYmFja2VkIGJ5IHN0cnVjdCBwYWdlICh3aXRoaW4gYW4gb25saW5lIG1lbW9yeSByYW5nZSk7XG4mIzQzOyMgICAtIFBHX3Jlc2VydmVkIGlzIHNldCBvbiB0aGUgcGFnZSAoa2VybmVsIGltYWdlIGFyZWEpO1xuJiM0MzsjICAgLSB0aGUgbWVtb3J5IGlzIHJlYWQtb25seSwgc28gc2V0dGluZyBQR19od3BvaXNvbiBvbiBpdCBkb2VzIG5vdFxuJiM0MzsjICAgICBjb3JydXB0IHdyaXRhYmxlIGtlcm5lbCBzdGF0ZSBpZiB0aGUgcGFuaWMgc29tZWhvdyBkb2VzIG5vdCBmaXJlLlxuJiM0MzsjXG4mIzQzOyMgL3Byb2MvaW9tZW0gZW50cmllcyBsb29rIGxpa2UgKGluZGVudGVkIGZvciBzdWItcmVzb3VyY2VzKTpcbiYjNDM7IyAgICAgXCYjMzQ7ICAwMjUwMDAwMC0wMmZmZmZmZiA6IEtlcm5lbCByb2RhdGFcJiMzNDtcbiYjNDM7cGlja19yb2RhdGFfcGh5c19hZGRyKCkge1xuJiM0MztcdGF3ayAtdiBwYWdlc2l6ZT1cJiMzNDskKGdldGNvbmYgUEFHRV9TSVpFKVwmIzM0OyAmIzM5O1xuJiM0MztcdCMgQ29udmVydCBhIGhleCBzdHJpbmcgdG8gYSBudW1iZXIgd2l0aG91dCByZWx5aW5nIG9uIHRoZSBnYXdrLW9ubHlcbiYjNDM7XHQjIHN0cnRvbnVtKCkuICBtYXdrIGxhY2tzIGl0IGFuZCB3b3VsZCBvdGhlcndpc2Ugc3B1cmlvdXNseSBza2lwXG4mIzQzO1x0IyB0aGlzIHRlc3Qgb24gZGlzdHJvcyB0aGF0IHNoaXAgbWF3ayBhcyAvdXNyL2Jpbi9hd2suXG4mIzQzO1x0ZnVuY3Rpb24gaGV4Mm51bShzLCAgIG4sIGksIGMsIHYpIHtcbiYjNDM7XHRcdG4gPSAwXG4mIzQzO1x0XHRmb3IgKGkgPSAxOyBpIFx1MDAzYz0gbGVuZ3RoKHMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRjID0gdG9sb3dlcihzdWJzdHIocywgaSwgMSkpXG4mIzQzO1x0XHRcdHYgPSBpbmRleChcJiMzNDswMTIzNDU2Nzg5YWJjZGVmXCYjMzQ7LCBjKSAtIDFcbiYjNDM7XHRcdFx0aWYgKHYgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0cmV0dXJuIC0xXG4mIzQzO1x0XHRcdG4gPSBuICogMTYgJiM0MzsgdlxuJiM0MztcdFx0fVxuJiM0MztcdFx0cmV0dXJuIG5cbiYjNDM7XHR9XG4mIzQzO1x0LzogS2VybmVsIHJvZGF0YVtbOnNwYWNlOl1dKiQvIHtcbiYjNDM7XHRcdHN1YigvXltbOnNwYWNlOl1dJiM0MzsvLCBcJiMzNDtcJiMzNDspXG4mIzQzO1x0XHRuID0gc3BsaXQoJDAsIGEsIC9bLSBdLylcbiYjNDM7XHRcdHN0YXJ0ID0gaGV4Mm51bShhWzFdKVxuJiM0MztcdFx0ZW5kICAgPSBoZXgybnVtKGFbMl0pXG4mIzQzO1x0XHRpZiAoZW5kIFx1MDAzYz0gc3RhcnQpXG4mIzQzO1x0XHRcdG5leHRcbiYjNDM7XHRcdCMgUGFnZS1hbGlnbiB1cHdhcmQgYW5kIGVtaXQgdGhlIGZpcnN0IGJ5dGUgb2YgdGhhdCBwYWdlLlxuJiM0MztcdFx0cGZuID0gaW50KChzdGFydCAmIzQzOyBwYWdlc2l6ZSAtIDEpIC8gcGFnZXNpemUpXG4mIzQzO1x0XHRwcmludGYgXCYjMzQ7MHgleFxcblwmIzM0OywgcGZuICogcGFnZXNpemVcbiYjNDM7XHRcdGV4aXQgMFxuJiM0MztcdH1cbiYjNDM7XHQmIzM5OyAvcHJvYy9pb21lbVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjIFdhbGsgL3Byb2Mva3BhZ2VmbGFncyBhbmQgcmV0dXJuIHRoZSBwaHlzIGFkZHIgb2YgdGhlIGZpcnN0IFBGTiB0aGF0XG4mIzQzOyMgaGFzIGJpdCAkMSBzZXQsIHdpdGggS1BGX0hXUE9JU09OLCBLUEZfTk9QQUdFIGFuZCBLUEZfQ09NUE9VTkRfVEFJTFxuJiM0MzsjIGFsbCBjbGVhciAoc28gd2UgYXR0YWNrIGEgcmVhbCwgbm9uLXRhaWwsIG5vdC1hbHJlYWR5LXBvaXNvbmVkIHBhZ2UpLlxuJiM0MzsjXG4mIzQzOyMgV2Ugc2tpcCB0aGUgZmlyc3QgMTYgTWlCIG9mIFBGTnMgdG8gc3RlcCBwYXN0IGxvdy1tZW1vcnkgc3BlY2lhbFxuJiM0MzsjIHJhbmdlcyAoQklPUy9FRkkvQUNQSS9ldGMuKSB0aGF0IG9mdGVuIGFyZSBQR19yZXNlcnZlZCBhbmQgd291bGQgbm90XG4mIzQzOyMgZXhoaWJpdCB0aGUgc2xhYi9wZ3RhYmxlIHR5cGUgd2UgYXJlIGxvb2tpbmcgZm9yLlxuJiM0MztwaWNrX2twYWdlZmxhZ3NfcGh5c19hZGRyKCkge1xuJiM0MztcdGxvY2FsIHdhbnRfYml0PSQxXG4mIzQzO1x0bG9jYWwgcGFnZXNpemUgc2tpcF9wZm5cbiYjNDM7XG4mIzQzO1x0WyAtciBcJiMzNDska3BhZ2VmbGFnc19wYXRoXCYjMzQ7IF0gfHwgcmV0dXJuXG4mIzQzO1xuJiM0MztcdHBhZ2VzaXplPSQoZ2V0Y29uZiBQQUdFX1NJWkUpXG4mIzQzO1x0c2tpcF9wZm49JCgoKDE2ICogMTAyNCAqIDEwMjQpIC8gcGFnZXNpemUpKVxuJiM0MztcbiYjNDM7XHRvZCAtQW4gLXR4OCAtdiAtdzggLWogXCYjMzQ7JCgoc2tpcF9wZm4gKiA4KSlcJiMzNDsgXCYjMzQ7JGtwYWdlZmxhZ3NfcGF0aFwmIzM0OyAyXHUwMDNlL2Rldi9udWxsIHwgXFxcbiYjNDM7XHRhd2sgLXYgd2FudF9iaXQ9XCYjMzQ7JHdhbnRfYml0XCYjMzQ7IFxcXG4mIzQzO1x0ICAgIC12IGh3cF9iaXQ9XCYjMzQ7JEtQRl9IV1BPSVNPTlwmIzM0OyBcXFxuJiM0MztcdCAgICAtdiBub3BhZ2VfYml0PVwmIzM0OyRLUEZfTk9QQUdFXCYjMzQ7IFxcXG4mIzQzO1x0ICAgIC12IHRhaWxfYml0PVwmIzM0OyRLUEZfQ09NUE9VTkRfVEFJTFwmIzM0OyBcXFxuJiM0MztcdCAgICAtdiBiYXNlX3Bmbj1cJiMzNDskc2tpcF9wZm5cJiMzNDsgXFxcbiYjNDM7XHQgICAgLXYgcGFnZXNpemU9XCYjMzQ7JHBhZ2VzaXplXCYjMzQ7ICYjMzk7XG4mIzQzO1x0IyBUZXN0IHdoZXRoZXIgYml0IFwmIzM0O2JcJiMzNDsgaXMgc2V0IGluIHRoZSAxNi1oZXgtZGlnaXQgdmFsdWUgXCYjMzQ7aGV4XCYjMzQ7LlxuJiM0MztcdCMgRG9uZSB3aXRoIHN1YnN0cmluZyAmIzQzOyBwZXItZGlnaXQgbG9va3VwIHNvIHdlIG5ldmVyIHJlbHkgb24gYXdrXG4mIzQzO1x0IyBiaXR3aXNlIG9wZXJhdG9ycyAobWF3ayBsYWNrcyB0aGVtKSwgNjQtYml0IEZQIHByZWNpc2lvbiBvciB0aGVcbiYjNDM7XHQjIGdhd2stb25seSBzdHJ0b251bSgpLlxuJiM0MztcdGZ1bmN0aW9uIGJpdF9zZXQoaGV4LCBiLCAgICBkaSwgYmksIGMsIHYpIHtcbiYjNDM7XHRcdGRpID0gaW50KGIgLyA0KVxuJiM0MztcdFx0YmkgPSBiIC0gZGkgKiA0XG4mIzQzO1x0XHRjID0gc3Vic3RyKGhleCwgbGVuZ3RoKGhleCkgLSBkaSwgMSlcbiYjNDM7XHRcdHYgPSBpbmRleChcJiMzNDswMTIzNDU2Nzg5YWJjZGVmXCYjMzQ7LCB0b2xvd2VyKGMpKSAtIDFcbiYjNDM7XHRcdGlmIChiaSA9PSAwKSByZXR1cm4gKHYgJSAyKSA9PSAxXG4mIzQzO1x0XHRpZiAoYmkgPT0gMSkgcmV0dXJuIGludCh2IC8gMikgJSAyID09IDFcbiYjNDM7XHRcdGlmIChiaSA9PSAyKSByZXR1cm4gaW50KHYgLyA0KSAlIDIgPT0gMVxuJiM0MztcdFx0cmV0dXJuIGludCh2IC8gOCkgJSAyID09IDFcbiYjNDM7XHR9XG4mIzQzO1x0e1xuJiM0MztcdFx0Z3N1YigvXltbOnNwYWNlOl1dJiM0MzsvLCBcJiMzNDtcJiMzNDspXG4mIzQzO1x0XHRoID0gJDFcbiYjNDM7XHRcdGlmIChiaXRfc2V0KGgsIHdhbnRfYml0KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhYml0X3NldChoLCBod3BfYml0KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhYml0X3NldChoLCBub3BhZ2VfYml0KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhYml0X3NldChoLCB0YWlsX2JpdCkpIHtcbiYjNDM7XHRcdFx0cGZuID0gYmFzZV9wZm4gJiM0MzsgTlIgLSAxXG4mIzQzO1x0XHRcdHByaW50ZiBcJiMzNDsweCV4XFxuXCYjMzQ7LCBwZm4gKiBwYWdlc2l6ZVxuJiM0MztcdFx0XHRleGl0IDBcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0JiMzOTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7IyBSZXR1cm4gMCBpZiAvcHJvYy9rcGFnZWZsYWdzIGJpdCAkMiBpcyBzZXQgZm9yIFBGTiAkMSwgMSBpZiBpdCBpc1xuJiM0MzsjIGNsZWFyLCBvciAyIGlmIHRoZSB3b3JkIGNhbm5vdCBiZSByZWFkLiAgVXNlZCB0byByZS1jb25maXJtIHRoZSB0YXJnZXRcbiYjNDM7IyBwYWdlIHR5cGUgYWZ0ZXIgYSBub24tcGFuaWNraW5nIGluamVjdC5cbiYjNDM7a3BhZ2VmbGFnc19iaXRfc2V0KCkge1xuJiM0MztcdGxvY2FsIHdvcmRcbiYjNDM7XG4mIzQzO1x0d29yZD0kKG9kIC1BbiAtdHg4IC12IC1qIFwmIzM0OyQoKCQxICogOCkpXCYjMzQ7IC1OIDggXCYjMzQ7JGtwYWdlZmxhZ3NfcGF0aFwmIzM0OyAyXHUwMDNlL2Rldi9udWxsIHwgdHIgLWQgJiMzOTtbOnNwYWNlOl0mIzM5OylcbiYjNDM7XHRbIC1uIFwmIzM0OyR3b3JkXCYjMzQ7IF0gfHwgcmV0dXJuIDJcbiYjNDM7XHQoKCAoMTYjJHdvcmQgXHUwMDNlXHUwMDNlICQyKSBcdTAwMjYgMSApKVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjIEJlc3QtZWZmb3J0OiBkcm9wIHRoZSBQR19od3BvaXNvbiBtYXJrZXIgc2V0IGJ5IHRoZSBpbmplY3Qgc28gYSBmYWlsZWRcbiYjNDM7IyBydW4gZG9lcyBub3QgbGVhdmUgYSBwb2lzb25lZCBwYWdlIGJlaGluZC4gIGhhcmRfb2ZmbGluZV9wYWdlKCkgaW5qZWN0c1xuJiM0MzsjIHdpdGggTUZfU1dfU0lNVUxBVEVELCBzbyB0aGUgcGFnZSBzdGF5cyB1bnBvaXNvbmFibGUgdGhyb3VnaCB0aGVcbiYjNDM7IyBod3BvaXNvbiBkZWJ1Z2ZzIGludGVyZmFjZSAobmVlZHMgQ09ORklHX0hXUE9JU09OX0lOSkVDVCAmIzQzOyBkZWJ1Z2ZzKS5cbiYjNDM7dHJ5X3VucG9pc29uKCkge1xuJiM0MztcdFsgLXcgXCYjMzQ7JHVucG9pc29uX3BhdGhcJiMzNDsgXSB8fCByZXR1cm4gMFxuJiM0MztcdGVjaG8gXCYjMzQ7JDFcJiMzNDsgXHUwMDNlIFwmIzM0OyR1bnBvaXNvbl9wYXRoXCYjMzQ7IDJcdTAwM2UvZGV2L251bGwgfHwgdHJ1ZVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztjYXNlIFwmIzM0OyRraW5kXCYjMzQ7IGluXG4mIzQzO3JvZGF0YSlcbiYjNDM7XHRwaHlzX2FkZHI9JChwaWNrX3JvZGF0YV9waHlzX2FkZHIpXG4mIzQzO1x0cmVjaGVja19iaXQ9JEtQRl9SRVNFUlZFRFxuJiM0MztcdG1pc3NpbmdfbXNnPSYjMzk7bm8gXCYjMzQ7S2VybmVsIHJvZGF0YVwmIzM0OyBlbnRyeSBpbiAvcHJvYy9pb21lbSYjMzk7XG4mIzQzO1x0OztcbiYjNDM7c2xhYilcbiYjNDM7XHRwaHlzX2FkZHI9JChwaWNrX2twYWdlZmxhZ3NfcGh5c19hZGRyIFwmIzM0OyRLUEZfU0xBQlwmIzM0OylcbiYjNDM7XHRyZWNoZWNrX2JpdD0kS1BGX1NMQUJcbiYjNDM7XHRtaXNzaW5nX21zZz1cJiMzNDtubyB1c2FibGUgc2xhYiBQRk4gZm91bmQgaW4gJGtwYWdlZmxhZ3NfcGF0aFwmIzM0O1xuJiM0MztcdDs7XG4mIzQzO3BndGFibGUpXG4mIzQzO1x0cGh5c19hZGRyPSQocGlja19rcGFnZWZsYWdzX3BoeXNfYWRkciBcJiMzNDskS1BGX1BHVEFCTEVcJiMzNDspXG4mIzQzO1x0cmVjaGVja19iaXQ9JEtQRl9QR1RBQkxFXG4mIzQzO1x0bWlzc2luZ19tc2c9XCYjMzQ7bm8gdXNhYmxlIHBhZ2UtdGFibGUgUEZOIGZvdW5kIGluICRrcGFnZWZsYWdzX3BhdGhcJiMzNDtcbiYjNDM7XHQ7O1xuJiM0MzsqKVxuJiM0MztcdGt0YXBfZXhpdF9mYWlsX21zZyBcJiMzNDt1bmtub3duIGtpbmQgJiMzOTska2luZCYjMzk7IChleHBlY3RlZDogcm9kYXRhfHNsYWJ8cGd0YWJsZSlcJiMzNDtcbiYjNDM7XHQ7O1xuJiM0Mztlc2FjXG4mIzQzO1xuJiM0MztpZiBbIC16IFwmIzM0OyRwaHlzX2FkZHJcJiMzNDsgXTsgdGhlblxuJiM0MztcdGt0YXBfc2tpcF9hbGwgXCYjMzQ7JG1pc3NpbmdfbXNnXCYjMzQ7XG4mIzQzO1x0ZXhpdCBcJiMzNDskS1NGVF9TS0lQXCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO1xuJiM0MztrdGFwX3ByaW50X21zZyBcJiMzNDtlbmFibGluZyAkc3lzY3RsX3BhdGhcJiMzNDtcbiYjNDM7cHJpb3I9JChjYXQgXCYjMzQ7JHN5c2N0bF9wYXRoXCYjMzQ7KVxuJiM0MztlY2hvIDEgXHUwMDNlIFwmIzM0OyRzeXNjdGxfcGF0aFwmIzM0OyB8fCBrdGFwX2V4aXRfZmFpbF9tc2cgXCYjMzQ7ZmFpbGVkIHRvIGVuYWJsZSBzeXNjdGxcJiMzNDtcbiYjNDM7XG4mIzQzO3Bmbj0kKChwaHlzX2FkZHIgLyBwYWdlc2l6ZSkpXG4mIzQzO2t0YXBfcHJpbnRfbXNnIFwmIzM0O2luamVjdGluZyBod3BvaXNvbiBhdCBwaHlzIDB4JChwcmludGYgJiMzOTsleCYjMzk7IFwmIzM0OyRwaHlzX2FkZHJcJiMzNDspIChwZm4gMHgkKHByaW50ZiAmIzM5OyV4JiMzOTsgXCYjMzQ7JHBmblwmIzM0OyksIGtpbmQ9JGtpbmQpXCYjMzQ7XG4mIzQzO2t0YXBfcHJpbnRfbXNnIFwmIzM0O2V4cGVjdGluZyBrZXJuZWwgcGFuaWM6ICYjMzk7TWVtb3J5IGZhaWx1cmU6IFx1MDAzY3Bmblx1MDAzZTogdW5yZWNvdmVyYWJsZSBwYWdlJiMzOTtcJiMzNDtcbiYjNDM7XG4mIzQzOyMgQSBzdWNjZXNzZnVsIHJ1biBuZXZlciByZXR1cm5zIGZyb20gdGhlIGluamVjdCAtLSBpdCBwYW5pY3MgdGhlIGtlcm5lbC5cbiYjNDM7IyBSZWFjaGluZyB0aGUgY29kZSBiZWxvdyB0aGVyZWZvcmUgbWVhbnMgbm8gcGFuaWMgZmlyZWQuICBOb3RlIHdoZXRoZXJcbiYjNDM7IyB0aGUgd3JpdGUgaXRzZWxmIHN1Y2NlZWRlZCwgdGhlbiBwdXQgdGhlIG1hY2hpbmUgYmFjazogcmVzdG9yZSB0aGVcbiYjNDM7IyBzeXNjdGwgYW5kIGJlc3QtZWZmb3J0IHVucG9pc29uIHRoZSBwYWdlIHdlIGp1c3QgbWFya2VkLlxuJiM0MztpZiBlY2hvIFwmIzM0OyRwaHlzX2FkZHJcJiMzNDsgXHUwMDNlIFwmIzM0OyRpbmplY3RfcGF0aFwmIzM0OzsgdGhlblxuJiM0MztcdHZlcmRpY3Q9XCYjMzQ7aW5qZWN0IHJldHVybmVkIHdpdGhvdXQgcGFuaWM7IHN5c2N0bCBpbmVmZmVjdGl2ZVwmIzM0O1xuJiM0MztlbHNlXG4mIzQzO1x0dmVyZGljdD1cJiMzNDtpbmplY3QgZmFpbGVkIGJlZm9yZSByZWFjaGluZyB0aGUgcGFuaWMgcGF0aFwmIzM0O1xuJiM0MztmaVxuJiM0MztcbiYjNDM7ZWNobyBcJiMzNDskcHJpb3JcJiMzNDsgXHUwMDNlIFwmIzM0OyRzeXNjdGxfcGF0aFwmIzM0O1xuJiM0Mzt0cnlfdW5wb2lzb24gXCYjMzQ7JHBmblwmIzM0O1xuJiM0MztcbiYjNDM7IyBUaGUgcGFnZSB0eXBlIGNhbiBjaGFuZ2UgYmV0d2VlbiBzZWxlY3Rpb24gYW5kIGluamVjdGlvbiAoZS5nLiBhIHNsYWJcbiYjNDM7IyBvciBwYWdlLXRhYmxlIHBhZ2UgaXMgZnJlZWQgYW5kIHJldXNlZCkuICBPbmx5IHRyZWF0IGEgbWlzc2luZyBwYW5pYyBhc1xuJiM0MzsjIGEgZmFpbHVyZSBpZiB0aGUgdGFyZ2V0IFBGTiBpcyBzdGlsbCB0aGUga2VybmVsLW93bmVkIHR5cGUgd2UgYWltZWQgYXQ7XG4mIzQzOyMgaWYgaXQgcmFjZWQgdG8gYW5vdGhlciB0eXBlIHRoZSBydW4gaXMgaW5jb25jbHVzaXZlLCBzbyBza2lwIGluc3RlYWQuXG4mIzQzO2twYWdlZmxhZ3NfYml0X3NldCBcJiMzNDskcGZuXCYjMzQ7IFwmIzM0OyRyZWNoZWNrX2JpdFwmIzM0O1xuJiM0MztjYXNlICQ/IGluXG4mIzQzOzApXHRrdGFwX2V4aXRfZmFpbF9tc2cgXCYjMzQ7JHZlcmRpY3QgKHBhZ2Ugc3RpbGwgJGtpbmQpXCYjMzQ7IDs7XG4mIzQzOzEpXHRrdGFwX3NraXBfYWxsIFwmIzM0O3RhcmdldCBQRk4gbm8gbG9uZ2VyICRraW5kOyByYWNlZCBiZWZvcmUgaW5qZWN0LCBpbmNvbmNsdXNpdmVcJiMzNDtcbiYjNDM7XHRleGl0IFwmIzM0OyRLU0ZUX1NLSVBcJiMzNDsgOztcbiYjNDM7KilcdGt0YXBfZXhpdF9mYWlsX21zZyBcJiMzNDskdmVyZGljdCAoY291bGQgbm90IHJlY29uZmlybSBwYWdlIHR5cGUgdmlhICRrcGFnZWZsYWdzX3BhdGgpXCYjMzQ7IDs7XG4mIzQzO2VzYWNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxODo1NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dldF9hbnlfcGFnZSYjMzQ7LAogICAgJiMzNDtwYW5pY19vbl91bnJlY292ZXJhYmxlX21mJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGVyIGluIGNvcmUgTU0gdG8gc2hvcnQtY2lyY3VpdCByZWNvdmVyeSBmb3Iga2VybmVsLW93bmVkIHBhZ2VzIGFuZCBvcHRpb25hbGx5IHBhbmljLiBUaGlzIGVycm9yLWhhbmRsaW5nIHBhdGggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbWFkdmlzZShNQURWX0hXUE9JU09OKSBvbiBrZXJuZWwtb3duZWQgcGFnZXMgbWFwcGVkIGluIHVzZXIgc3BhY2UgKGxpa2UgdGhlIHZEU08pIG9yIHZpYSBzeXNmcyBlcnJvciBpbmplY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNkNjY0OWE1ZDRmN2NkNDlhZTg1NTZlMmQ1MzQzNmM2YjZjYWJhMDYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1biAzMCAxODo1NDowNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdAppbmRleCBiOWIwYzIxOGJmYjQ0MC4uMjJjYzU0Y2FjM2IyMWQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3QKQEAgLTY3LDYgJiM0Mzs2Nyw3IEBAIEN1cnJlbnRseSwgdGhlc2UgZmlsZXMgYXJlIGluIC9wcm9jL3N5cy92bToKIC0gcGFnZS1jbHVzdGVyCiAtIHBhZ2VfbG9ja191bmZhaXJuZXNzCiAtIHBhbmljX29uX29vbQomIzQzOy0gcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZQogLSBwZXJjcHVfcGFnZWxpc3RfaGlnaF9mcmFjdGlvbgogLSBzdGF0X2ludGVydmFsCiAtIHN0YXRfcmVmcmVzaApAQCAtOTI1LDYgJiM0Mzs5MjYsODUgQEAgcGFuaWNfb25fb29tPTImIzQzO2tkdW1wIGdpdmVzIHlvdSB2ZXJ5IHN0cm9uZyB0b29sIHRvIGludmVzdGlnYXRlCiB3aHkgb29tIGhhcHBlbnMuIFlvdSBjYW4gZ2V0IHNuYXBzaG90LgogCiAKJiM0MztwYW5pY19vbl91bnJlY292ZXJhYmxlX21lbW9yeV9mYWlsdXJlCiYjNDM7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsKJiM0MztXaGVuIGEgaGFyZHdhcmUgbWVtb3J5IGVycm9yIChlLmcuIG11bHRpLWJpdCBFQ0MpIGhpdHMgYSBrZXJuZWwgcGFnZQomIzQzO3RoYXQgY2Fubm90IGJlIHJlY292ZXJlZCBieSB0aGUgbWVtb3J5IGZhaWx1cmUgaGFuZGxlciwgdGhlIGRlZmF1bHQKJiM0MztiZWhhdmlvdXIgaXMgdG8gaWdub3JlIHRoZSBlcnJvciBhbmQgY29udGludWUgb3BlcmF0aW9uLiAgVGhpcyBpcwomIzQzO2Rhbmdlcm91cyBiZWNhdXNlIHRoZSBjb3JydXB0ZWQgZGF0YSByZW1haW5zIGFjY2Vzc2libGUgdG8gdGhlIGtlcm5lbCwKJiM0MztyaXNraW5nIHNpbGVudCBkYXRhIGNvcnJ1cHRpb24gb3IgYSBkZWxheWVkIGNyYXNoIHdoZW4gdGhlIHBvaXNvbmVkCiYjNDM7bWVtb3J5IGlzIG5leHQgYWNjZXNzZWQuCiYjNDM7CiYjNDM7V2hlbiBlbmFibGVkLCB0aGlzIHN5c2N0bCB0cmlnZ2VycyBhIHBhbmljIG9uIG1lbW9yeSBmYWlsdXJlIGV2ZW50cwomIzQzO2hpdHRpbmcga2VybmVsLW93bmVkIHBhZ2VzIHRoYXQgdGhlIGhhbmRsZXIgY2Fubm90IHJlY292ZXI6CiYjNDM7YGBQYWdlUmVzZXJ2ZWRgYCAoZmlybXdhcmUgcmVzZXJ2YXRpb25zLCBrZXJuZWwgaW1hZ2UsIHZEU08sIHplcm8KJiM0MztwYWdlLCBhbmQgc2ltaWxhciBtZW1ibG9jay1yZXNlcnZlZCByZWdpb25zKSwgYGBQYWdlU2xhYmBgLAomIzQzO2BgUGFnZVRhYmxlYGAsIGFuZCBgYFBhZ2VMYXJnZUttYWxsb2NgYC4gIFRoZXNlIGFyZSBvd25lZCBieSB0aGUKJiM0MztrZXJuZWwgYW5kIHRoZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGVyIGNhbm5vdCByZWxpYWJseSBldmljdCB0aGVpcgomIzQzO2NvbnRlbnRzLgomIzQzOwomIzQzO090aGVyIHVucmVjb3ZlcmFibGUga2VybmVsLW93bmVkIHBvcHVsYXRpb25zICh2bWFsbG9jIGFsbG9jYXRpb25zLAomIzQzO2tlcm5lbCBzdGFjayBwYWdlcywgLi4uKSBhcmUgbm90IGN1cnJlbnRseSBjb3ZlcmVkIGJlY2F1c2UgdGhlCiYjNDM7aGFuZGxlciBoYXMgbm8gcGFnZS10eXBlIHNpZ25hbCB0aGF0IGRpc3Rpbmd1aXNoZXMgdGhlbSBmcm9tIGEKJiM0Mzt1c2Vyc3BhY2UgZm9saW8gdGVtcG9yYXJpbHkgb2ZmIHRoZSBMUlUgZHVyaW5nIG1pZ3JhdGlvbiBvcgomIzQzO2NvbXBhY3Rpb24uICBTdWNoIHBhZ2VzIHN0aWxsIGdvIHRocm91Z2ggdGhlIHN0YW5kYXJkCiYjNDM7TUZfTVNHX0dFVF9IV1BPSVNPTiBwYXRoOiBgYFBHX2h3cG9pc29uYGAgaXMgc2V0IG9uIHRoZW0gYW5kIGEKJiM0MztkZWxheWVkIGNyYXNoIG9uIHRoZSBuZXh0IGFjY2VzcyByZW1haW5zIHBvc3NpYmxlLiAgQ292ZXJhZ2UgbWF5CiYjNDM7Z3JvdyBhcyB0aGUgaGFuZGxlciBnYWlucyBzdHJvbmdlciBrZXJuZWwtb3duZXJzaGlwIHNpZ25hbHMuCiYjNDM7CiYjNDM7UmVjb3ZlcmFibGUgZmFpbHVyZSBwYXRocyBhcmUgYWxzbyBpbnRlbnRpb25hbGx5IGxlZnQgb3V0OiBpbi1mbGlnaHQKJiM0MztidWRkeSBhbGxvY2F0aW9ucyBhbmQgb3RoZXIgdHJhbnNpZW50IHJhY2VzIHdpdGggdGhlIHBhZ2UgYWxsb2NhdG9yCiYjNDM7Y2FuIHJlYWNoIHRoZSBzYW1lIGRpYWdub3N0aWMsIGFuZCBwYW5pY2tpbmcgb24gdGhlbSB3b3VsZCByaXNrCiYjNDM7a2lsbGluZyB0aGUgYm94IGZvciBhIHBhZ2UgZGVzdGluZWQgZm9yIHVzZXJzcGFjZSB3aGVyZSB0aGUgc3RhbmRhcmQKJiM0MztTSUdCVVMgcmVjb3ZlcnkgcGF0aCBhcHBsaWVzLiAgUGFnZXMgd2hvc2Ugc3RhdGUgY291bGQgbm90IGJlCiYjNDM7Y2xhc3NpZmllZCBhdCBhbGwgYXJlIG5vdCBjb3ZlcmVkIGVpdGhlciwgc2luY2UgYW4gdW5rbm93biBzdGF0ZSBpcwomIzQzO25vdCBhIHNvdW5kIGJhc2lzIGZvciBhIHBhbmljIGRlY2lzaW9uLgomIzQzOwomIzQzO0ZvciBtYW55IGVudmlyb25tZW50cyBpdCBpcyBwcmVmZXJhYmxlIHRvIHBhbmljIGltbWVkaWF0ZWx5IHdpdGggYSBjbGVhbgomIzQzO2NyYXNoIGR1bXAgdGhhdCBjYXB0dXJlcyB0aGUgb3JpZ2luYWwgZXJyb3IgY29udGV4dCwgcmF0aGVyIHRoYW4gdG8KJiM0Mztjb250aW51ZSBhbmQgZmFjZSBhIHJhbmRvbSBjcmFzaCBsYXRlciB3aG9zZSBjYXVzZSBpcyBkaWZmaWN1bHQgdG8KJiM0MztkaWFnbm9zZS4KJiM0MzsKJiM0MztVc2UgY2FzZXMKJiM0MzstLS0tLS0tLS0KJiM0MzsKJiM0MztUaGlzIG9wdGlvbiBpcyBtb3N0IHVzZWZ1bCBpbiBlbnZpcm9ubWVudHMgd2hlcmUgdW5hdHRyaWJ1dGVkIGNyYXNoZXMKJiM0MzthcmUgZXhwZW5zaXZlIHRvIGRlYnVnIG9yIHdoZXJlIGRhdGEgaW50ZWdyaXR5IG11c3QgdGFrZSBwcmVjZWRlbmNlCiYjNDM7b3ZlciBhdmFpbGFiaWxpdHk6CiYjNDM7CiYjNDM7KiBMYXJnZSBmbGVldHMsIHdoZXJlIG11bHRpLWJpdCBFQ0MgZXJyb3JzIG9uIGtlcm5lbCBwYWdlcyBhcmUgb2JzZXJ2ZWQKJiM0MzsgIHJlZ3VsYXJseSBhbmQgcG9zdC1tb3J0ZW0gYW5hbHlzaXMgb2YgYW4gdW5yZWxhdGVkIGRvd25zdHJlYW0gY3Jhc2gKJiM0MzsgIChvZnRlbiBzZWNvbmRzIHRvIG1pbnV0ZXMgYWZ0ZXIgdGhlIG9yaWdpbmFsIGVycm9yKSBjb25zdW1lcwomIzQzOyAgc2lnbmlmaWNhbnQgZW5naW5lZXJpbmcgZWZmb3J0LgomIzQzOwomIzQzOyogU3lzdGVtcyBjb25maWd1cmVkIHdpdGgga2R1bXAsIHdoZXJlIHBhbmlja2luZyBhdCB0aGUgbW9tZW50IG9mIHRoZQomIzQzOyAgaGFyZHdhcmUgZXJyb3IgcHJvZHVjZXMgYSB2bWNvcmUgdGhhdCBzdGlsbCBjb250YWlucyB0aGUgZmF1bHRpbmcKJiM0MzsgIGFkZHJlc3MsIHRoZSBhZmZlY3RlZCBwYWdlIHN0YXRlLCBhbmQgdGhlIG9yaWdpbmF0aW5nIE1DRS9HSEVTCiYjNDM7ICByZWNvcmQg4oCUIGNvbnRleHQgdGhhdCBpcyB0eXBpY2FsbHkgbG9zdCBieSB0aGUgdGltZSBhIGRlbGF5ZWQgY3Jhc2gKJiM0MzsgIG9jY3Vycy4KJiM0MzsKJiM0MzsqIEhpZ2gtYXZhaWxhYmlsaXR5IGNsdXN0ZXJzIHRoYXQgcmVseSBvbiBmYXN0LCBkZXRlcm1pbmlzdGljIG5vZGUKJiM0MzsgIGZhaWx1cmUgZm9yIGZhaWxvdmVyLCBhbmQgcHJlZmVyIGFuIGltbWVkaWF0ZSBwYW5pYyBvdmVyIHNpbGVudCBkYXRhCiYjNDM7ICBjb3JydXB0aW9uIHByb3BhZ2F0aW5nIHRvIHJlcGxpY2FzIG9yIHBlcnNpc3RlbnQgc3RvcmFnZS4KJiM0MzsKJiM0MzsqIEtlcm5lbCBhbmQgcGxhdGZvcm0gZGV2ZWxvcGVycyByZXByb2R1Y2luZyBod3BvaXNvbiBpc3N1ZXMgd2l0aAomIzQzOyAgdG9vbHMgc3VjaCBhcyBgYG1jZS1pbmplY3RgYCBvciBlcnJvci1pbmplY3Rpb24gZGVidWdmcyBpbnRlcmZhY2VzLAomIzQzOyAgd2hlcmUgcGFuaWNraW5nIG9uIHRoZSB1bnJlY292ZXJhYmxlIHBhdGggbWFrZXMgcmVncmVzc2lvbnMKJiM0MzsgIGltbWVkaWF0ZWx5IHZpc2libGUgaW5zdGVhZCBvZiBzdXJmYWNpbmcgYXMgbGF0ZXIsIHVucmVsYXRlZAomIzQzOyAgZmFpbHVyZXMuCiYjNDM7CiYjNDM7PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzswIFRyeSB0byBjb250aW51ZSBvcGVyYXRpb24gKGRlZmF1bHQpLgomIzQzOzEgUGFuaWMgaW1tZWRpYXRlbHkuICBJZiB0aGUgYGBwYW5pY2BgIHN5c2N0bCBpcyBhbHNvIG5vbi16ZXJvIHRoZW4gdGhlCiYjNDM7ICBtYWNoaW5lIHdpbGwgYmUgcmVib290ZWQuCiYjNDM7PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsKJiM0MztFeGFtcGxlOjoKJiM0MzsKJiM0MzsgICAgIGVjaG8gMSAmZ3Q7IC9wcm9jL3N5cy92bS9wYW5pY19vbl91bnJlY292ZXJhYmxlX21lbW9yeV9mYWlsdXJlCiYjNDM7CiYjNDM7CiBwZXJjcHVfcGFnZWxpc3RfaGlnaF9mcmFjdGlvbgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmMKaW5kZXggNTE1MDhhNTVjNDA1NWUuLmUwOTdmYzgyNjJjZjgzIDEwMDY0NAotLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS1mYWlsdXJlLmMKQEAgLTc0LDYgJiM0Mzs3NCw4IEBAIHN0YXRpYyBpbnQgc3lzY3RsX21lbW9yeV9mYWlsdXJlX3JlY292ZXJ5IF9fcmVhZF9tb3N0bHkgPSAxOwogCiBzdGF0aWMgaW50IHN5c2N0bF9lbmFibGVfc29mdF9vZmZsaW5lIF9fcmVhZF9tb3N0bHkgPSAxOwogCiYjNDM7c3RhdGljIGludCBzeXNjdGxfcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZiBfX3JlYWRfbW9zdGx5OwomIzQzOwogYXRvbWljX2xvbmdfdCBudW1fcG9pc29uZWRfcGFnZXMgX19yZWFkX21vc3RseSA9IEFUT01JQ19MT05HX0lOSVQoMCk7CiAKIHN0YXRpYyBib29sIGh3X21lbW9yeV9mYWlsdXJlIF9fcmVhZF9tb3N0bHkgPSBmYWxzZTsKQEAgLTE1NSw2ICYjNDM7MTU3LDE1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG1lbW9yeV9mYWlsdXJlX3RhYmxlW10gPSB7CiAJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjX21pbm1heCwKIAkJLmV4dHJhMQkJPSBTWVNDVExfWkVSTywKIAkJLmV4dHJhMgkJPSBTWVNDVExfT05FLAomIzQzOwl9LAomIzQzOwl7CiYjNDM7CQkucHJvY25hbWUJPSAmIzM0O3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmUmIzM0OywKJiM0MzsJCS5kYXRhCQk9ICZhbXA7c3lzY3RsX3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWYsCiYjNDM7CQkubWF4bGVuCQk9IHNpemVvZihzeXNjdGxfcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZiksCiYjNDM7CQkubW9kZQkJPSAwNjQ0LAomIzQzOwkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWNfbWlubWF4LAomIzQzOwkJLmV4dHJhMQkJPSBTWVNDVExfWkVSTywKJiM0MzsJCS5leHRyYTIJCT0gU1lTQ1RMX09ORSwKIAl9CiB9OwogCkBAIC05ODAsMTcgJiM0Mzs5OTEsNiBAQCBzdGF0aWMgYm9vbCBoYXNfZXh0cmFfcmVmY291bnQoc3RydWN0IHBhZ2Vfc3RhdGUgKnBzLCBzdHJ1Y3QgcGFnZSAqcCwKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLS8qCi0gKiBFcnJvciBoaXQga2VybmVsIHBhZ2UuCi0gKiBEbyBub3RoaW5nLCB0cnkgdG8gYmUgbHVja3kgYW5kIG5vdCB0b3VjaCB0aGlzIGluc3RlYWQuIEZvciBhIGZldyBjYXNlcyB3ZQotICogY291bGQgYmUgbW9yZSBzb3BoaXN0aWNhdGVkLgotICovCi1zdGF0aWMgaW50IG1lX2tlcm5lbChzdHJ1Y3QgcGFnZV9zdGF0ZSAqcHMsIHN0cnVjdCBwYWdlICpwKQotewotCXVubG9ja19wYWdlKHApOwotCXJldHVybiBNRl9JR05PUkVEOwotfQotCiAvKgogICogUGFnZSBpbiB1bmtub3duIHN0YXRlLiBEbyBub3RoaW5nLgogICogVGhpcyBpcyBhIGNhdGNoLWFsbCBpbiBjYXNlIHdlIGZhaWwgdG8gbWFrZSBzZW5zZSBvZiB0aGUgcGFnZSBzdGF0ZS4KQEAgLTExOTksMTAgJiM0MzsxMTk5LDggQEAgc3RhdGljIGludCBtZV9odWdlX3BhZ2Uoc3RydWN0IHBhZ2Vfc3RhdGUgKnBzLCBzdHJ1Y3QgcGFnZSAqcCkKICNkZWZpbmUgbWxvY2sJCSgxVUwgJmx0OyZsdDsgUEdfbWxvY2tlZCkKICNkZWZpbmUgbHJ1CQkoMVVMICZsdDsmbHQ7IFBHX2xydSkKICNkZWZpbmUgaGVhZAkJKDFVTCAmbHQ7Jmx0OyBQR19oZWFkKQotI2RlZmluZSByZXNlcnZlZAkoMVVMICZsdDsmbHQ7IFBHX3Jlc2VydmVkKQogCiBzdGF0aWMgc3RydWN0IHBhZ2Vfc3RhdGUgZXJyb3Jfc3RhdGVzW10gPSB7Ci0JeyByZXNlcnZlZCwJcmVzZXJ2ZWQsCU1GX01TR19LRVJORUwsCW1lX2tlcm5lbCB9LAogCS8qCiAJICogZnJlZSBwYWdlcyBhcmUgc3BlY2lhbGx5IGRldGVjdGVkIG91dHNpZGUgdGhpcyB0YWJsZToKIAkgKiBQR19idWRkeSBwYWdlcyBvbmx5IG1ha2UgYSBzbWFsbCBmcmFjdGlvbiBvZiBhbGwgZnJlZSBwYWdlcy4KQEAgLTEyMzQsNyAmIzQzOzEyMzIsNiBAQCBzdGF0aWMgc3RydWN0IHBhZ2Vfc3RhdGUgZXJyb3Jfc3RhdGVzW10gPSB7CiAjdW5kZWYgbWxvY2sKICN1bmRlZiBscnUKICN1bmRlZiBoZWFkCi0jdW5kZWYgcmVzZXJ2ZWQKIAogc3RhdGljIHZvaWQgdXBkYXRlX3Blcl9ub2RlX21mX3N0YXRzKHVuc2lnbmVkIGxvbmcgcGZuLAogCQkJCSAgICAgZW51bSBtZl9yZXN1bHQgcmVzdWx0KQpAQCAtMTI2OSw2ICYjNDM7MTI2NiwxNSBAQCBzdGF0aWMgdm9pZCB1cGRhdGVfcGVyX25vZGVfbWZfc3RhdHModW5zaWduZWQgbG9uZyBwZm4sCiAJJiM0MzsmIzQzO21mX3N0YXRzLSZndDt0b3RhbDsKIH0KIAomIzQzO3N0YXRpYyBib29sIHBhbmljX29uX3VucmVjb3ZlcmFibGVfbWYoZW51bSBtZl9hY3Rpb25fcGFnZV90eXBlIHR5cGUsCiYjNDM7CQkJCSAgICAgIGVudW0gbWZfcmVzdWx0IHJlc3VsdCkKJiM0Mzt7CiYjNDM7CWlmICghc3lzY3RsX3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWYpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiB0eXBlID09IE1GX01TR19LRVJORUwgJmFtcDsmYW1wOyByZXN1bHQgPT0gTUZfSUdOT1JFRDsKJiM0Mzt9CiYjNDM7CiAvKgogICogJiMzNDtEaXJ0eS9DbGVhbiYjMzQ7IGluZGljYXRpb24gaXMgbm90IDEwMCUgYWNjdXJhdGUgZHVlIHRvIHRoZSBwb3NzaWJpbGl0eSBvZgogICogc2V0dGluZyBQR19kaXJ0eSBvdXRzaWRlIHBhZ2UgbG9jay4gU2VlIGFsc28gY29tbWVudCBhYm92ZSBzZXRfcGFnZV9kaXJ0eSgpLgpAQCAtMTI4Niw2ICYjNDM7MTI5Miw5IEBAIHN0YXRpYyBpbnQgYWN0aW9uX3Jlc3VsdCh1bnNpZ25lZCBsb25nIHBmbiwgZW51bSBtZl9hY3Rpb25fcGFnZV90eXBlIHR5cGUsCiAJcHJfZXJyKCYjMzQ7JSNseDogcmVjb3ZlcnkgYWN0aW9uIGZvciAlczogJXNcbiYjMzQ7LAogCQlwZm4sIGFjdGlvbl9wYWdlX3R5cGVzW3R5cGVdLCBhY3Rpb25fbmFtZVtyZXN1bHRdKTsKIAomIzQzOwlpZiAocGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZih0eXBlLCByZXN1bHQpKQomIzQzOwkJcGFuaWMoJiMzNDtNZW1vcnkgZmFpbHVyZTogJSNseDogdW5yZWNvdmVyYWJsZSBwYWdlJiMzNDssIHBmbik7CiYjNDM7CiAJcmV0dXJuIChyZXN1bHQgPT0gTUZfUkVDT1ZFUkVEIHx8IHJlc3VsdCA9PSBNRl9ERUxBWUVEKSA/IDAgOiAtRUJVU1k7CiB9CiAKQEAgLTEzMzksNiAmIzQzOzEzNDgsMzggQEAgc3RhdGljIGlubGluZSBib29sIEhXUG9pc29uSGFuZGxhYmxlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogCXJldHVybiBQYWdlTFJVKHBhZ2UpIHx8IGlzX2ZyZWVfYnVkZHlfcGFnZShwYWdlKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogUG9zaXRpdmUgaWRlbnRpZmljYXRpb24gb2YgcGFnZXMgdGhlIGh3cG9pc29uIGhhbmRsZXIgY2Fubm90IHJlY292ZXI6CiYjNDM7ICogcGFnZXMgb3duZWQgYnkga2VybmVsIGludGVybmFscyB3aXRoIG5vIHVzZXJzcGFjZSBtYXBwaW5nIHRvIHVubWFwLCBubwomIzQzOyAqIGZpbGUgbWFwcGluZyB0byBpbnZhbGlkYXRlLCBhbmQgbm8gbWlncmF0aW9uIHRhcmdldC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXNfa2VybmVsX293bmVkX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGFnZSAqaGVhZDsKJiM0MzsJYm9vbCBrZXJuZWxfb3duZWQ7CiYjNDM7CiYjNDM7CS8qIFBHX3Jlc2VydmVkIGlzIGEgcGVyLXBhZ2UgZmxhZywgbmV2ZXIgc2V0IG9uIGEgY29tcG91bmQgcGFnZS4gKi8KJiM0MzsJaWYgKFBhZ2VSZXNlcnZlZChwYWdlKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQYWdlLXR5cGUgYml0cyBsaXZlIG9ubHkgb24gdGhlIGhlYWQgcGFnZSwgc28gcmVzb2x2ZSBhbnkgdGFpbAomIzQzOwkgKiBmaXJzdC4gIFRoZSBjaGVjayB0YWtlcyBubyByZWZjb3VudDsgcmVjaGVjayB0aGUgaGVhZCBhZnRlcndhcmRzCiYjNDM7CSAqIHNvIGEgY29uY3VycmVudCBzcGxpdCBvciBjb21wb3VuZCBmcmVlIGNhbm5vdCBsZWF2ZSB1cyB0cnVzdGluZwomIzQzOwkgKiBhIHN0YWxlIHZpZXcuICBBIHJlc2lkdWFsIGZyZWUtJmd0O2FsbG9jLSZndDtmcmVlIGNhbm5vdCBiZSBjbG9zZWQgaGVyZQomIzQzOwkgKiAoZnJvemVuIHNsYWIgYW5kIGxhcmdlLWttYWxsb2MgcGFnZXMgY2Fubm90IGJlIHBpbm5lZCksIGJ1dCBpcwomIzQzOwkgKiBoYXJtbGVzczogd2hlcmUgYSB3cm9uZyB2ZXJkaWN0IGNvdWxkIHBhbmljLCBtZW1vcnlfZmFpbHVyZSgpIGhhcwomIzQzOwkgKiBhbHJlYWR5IHNldCBQYWdlSFdQb2lzb24sIHdoaWNoIGJhcnMgdGhlIHBhZ2UgZnJvbSB0aGUgYWxsb2NhdG9yLgomIzQzOwkgKi8KJiM0MztyZXRyeToKJiM0MzsJaGVhZCA9IGNvbXBvdW5kX2hlYWQocGFnZSk7CiYjNDM7CWtlcm5lbF9vd25lZCA9IFBhZ2VTbGFiKGhlYWQpIHx8IFBhZ2VUYWJsZShoZWFkKSB8fAomIzQzOwkJICAgICAgIFBhZ2VMYXJnZUttYWxsb2MoaGVhZCk7CiYjNDM7CWlmIChoZWFkICE9IGNvbXBvdW5kX2hlYWQocGFnZSkpCiYjNDM7CQlnb3RvIHJldHJ5OwomIzQzOwlyZXR1cm4ga2VybmVsX293bmVkOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgX19nZXRfaHdwb2lzb25fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTsKQEAgLTEzODUsNiAmIzQzOzE0MjYsMTkgQEAgc3RhdGljIGludCBnZXRfYW55X3BhZ2Uoc3RydWN0IHBhZ2UgKnAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiAJaWYgKGZsYWdzICZhbXA7IE1GX0NPVU5UX0lOQ1JFQVNFRCkKIAkJY291bnRfaW5jcmVhc2VkID0gdHJ1ZTsKIAomIzQzOwkvKgomIzQzOwkgKiBQYWdlIHR5cGVzIHdlIGtub3cgYXJlIGtlcm5lbC1vd25lZCBhbmQgY2Fubm90IGJlIHJlY292ZXJlZC4KJiM0MzsJICogU2hvcnQtY2lyY3VpdCBiZWZvcmUgdGhlIHNoYWtlX3BhZ2UoKSAvIHJldHJ5IGxvb3AsIHdoaWNoCiYjNDM7CSAqIGNhbm5vdCB0dXJuIGFueSBvZiB0aGVzZSBpbnRvIHNvbWV0aGluZyBIV1BvaXNvbkhhbmRsYWJsZSgpLgomIzQzOwkgKiBEcm9wIHRoZSBjYWxsZXImIzM5O3MgcmVmZXJlbmNlIGlmIE1GX0NPVU5UX0lOQ1JFQVNFRCB0b29rIG9uZS4KJiM0MzsJICovCiYjNDM7CWlmIChpc19rZXJuZWxfb3duZWRfcGFnZShwKSkgewomIzQzOwkJaWYgKGNvdW50X2luY3JlYXNlZCkKJiM0MzsJCQlwdXRfcGFnZShwKTsKJiM0MzsJCXJldCA9IC1FTk9UUkVDT1ZFUkFCTEU7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwogdHJ5X2FnYWluOgogCWlmICghY291bnRfaW5jcmVhc2VkKSB7CiAJCXJldCA9IF9fZ2V0X2h3cG9pc29uX3BhZ2UocCwgZmxhZ3MpOwpAQCAtMTQzMiw3ICYjNDM7MTQ4Niw3IEBAIHN0YXRpYyBpbnQgZ2V0X2FueV9wYWdlKHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogCQlyZXQgPSAtRUlPOwogCX0KIG91dDoKLQlpZiAocmV0ID09IC1FSU8pCiYjNDM7CWlmIChyZXQgPT0gLUVJTyB8fCByZXQgPT0gLUVOT1RSRUNPVkVSQUJMRSkKIAkJcHJfZXJyKCYjMzQ7JSNseDogdW5oYW5kbGFibGUgcGFnZS5cbiYjMzQ7LCBwYWdlX3RvX3BmbihwKSk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMTQ4OSw3ICYjNDM7MTU0MywxMCBAQCBzdGF0aWMgaW50IF9fZ2V0X3VucG9pc29uX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiAgKiAgICAgICAgIC1FSU8gZm9yIHBhZ2VzIG9uIHdoaWNoIHdlIGNhbiBub3QgaGFuZGxlIG1lbW9yeSBlcnJvcnMsCiAgKiAgICAgICAgIC1FQlVTWSB3aGVuIGdldF9od3BvaXNvbl9wYWdlKCkgaGFzIHJhY2VkIHdpdGggcGFnZSBsaWZlY3ljbGUKICAqICAgICAgICAgb3BlcmF0aW9ucyBsaWtlIGFsbG9jYXRpb24gYW5kIGZyZWUsCi0gKiAgICAgICAgIC1FSFdQT0lTT04gd2hlbiB0aGUgcGFnZSBpcyBod3BvaXNvbmVkIGFuZCB0YWtlbiBvZmYgZnJvbSBidWRkeS4KJiM0MzsgKiAgICAgICAgIC1FSFdQT0lTT04gd2hlbiB0aGUgcGFnZSBpcyBod3BvaXNvbmVkIGFuZCB0YWtlbiBvZmYgZnJvbSBidWRkeSwKJiM0MzsgKiAgICAgICAgIC1FTk9UUkVDT1ZFUkFCTEUgZm9yIGtlcm5lbC1vd25lZCBwYWdlcyBpZGVudGlmaWVkIGJ5CiYjNDM7ICogICAgICAgICBpc19rZXJuZWxfb3duZWRfcGFnZSgpIChQR19yZXNlcnZlZCwgc2xhYiwKJiM0MzsgKiAgICAgICAgIHBhZ2UtdGFibGUsIGxhcmdlLWttYWxsb2MpIHRoYXQgdGhlIGhhbmRsZXIgY2Fubm90IHJlY292ZXIuCiAgKi8KIHN0YXRpYyBpbnQgZ2V0X2h3cG9pc29uX3BhZ2Uoc3RydWN0IHBhZ2UgKnAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CkBAIC0yNDAyLDcgJiM0MzsyNDU5LDggQEAgaW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpCiAJICogdGhhdCBtYXkgbWFrZSBwYWdlX3JlZl9mcmVlemUoKS9wYWdlX3JlZl91bmZyZWV6ZSgpIG1pc21hdGNoLgogCSAqLwogCXJlcyA9IGdldF9od3BvaXNvbl9wYWdlKHAsIGZsYWdzKTsKLQlpZiAoIXJlcykgewomIzQzOwlzd2l0Y2ggKHJlcykgewomIzQzOwljYXNlIDA6CiAJCWlmIChpc19mcmVlX2J1ZGR5X3BhZ2UocCkpIHsKIAkJCWlmICh0YWtlX3BhZ2Vfb2ZmX2J1ZGR5KHApKSB7CiAJCQkJcGFnZV9yZWZfaW5jKHApOwpAQCAtMjQyMSw3ICYjNDM7MjQ3OSwxOSBAQCBpbnQgbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncykKIAkJCXJlcyA9IGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfS0VSTkVMX0hJR0hfT1JERVIsIE1GX0lHTk9SRUQpOwogCQl9CiAJCWdvdG8gdW5sb2NrX211dGV4OwotCX0gZWxzZSBpZiAocmVzICZsdDsgMCkgewomIzQzOwljYXNlIDE6CiYjNDM7CQkvKiBHb3QgYSByZWZjb3VudCBvbiBhIGhhbmRsYWJsZSBwYWdlLiAqLwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgLUVOT1RSRUNPVkVSQUJMRToKJiM0MzsJCS8qCiYjNDM7CQkgKiBTdGFibGUgdW5oYW5kbGFibGUga2VybmVsLW93bmVkIHBhZ2UgKFBHX3Jlc2VydmVkLAomIzQzOwkJICogc2xhYiwgcGFnZSB0YWJsZXMsIGxhcmdlLWttYWxsb2MpLgomIzQzOwkJICogTm8gcmVjb3ZlcnkgcG9zc2libGUuCiYjNDM7CQkgKi8KJiM0MzsJCXJlcyA9IGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfS0VSTkVMLCBNRl9JR05PUkVEKTsKJiM0MzsJCWdvdG8gdW5sb2NrX211dGV4OwomIzQzOwlkZWZhdWx0OgomIzQzOwkJLyogVHJhbnNpZW50IGxpZmVjeWNsZSByYWNlIHdpdGggdGhlIHBhZ2UgYWxsb2NhdG9yLiAqLwogCQlyZXMgPSBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0dFVF9IV1BPSVNPTiwgTUZfSUdOT1JFRCk7CiAJCWdvdG8gdW5sb2NrX211dGV4OwogCX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUKaW5kZXggZTZkZjk2OGYwOTcxYzguLmVkMzIxYWU3MDlkYWNmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZQpAQCAtMTc0LDYgJiM0MzsxNzQsMTAgQEAgVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF91c2VyZmF1bHRmZC5zaAogVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF92bWFfbWVyZ2Uuc2gKIFRFU1RfUFJPR1MgJiM0Mzs9IGtzZnRfdm1hbGxvYy5zaAogCiYjNDM7IyBEZXN0cnVjdGl2ZTogZXZlcnkgc3VjY2Vzc2Z1bCBydW4gcGFuaWNzIHRoZSBrZXJuZWwuICBJbnN0YWxsZWQgYW5kCiYjNDM7IyBrZXB0IGV4ZWN1dGFibGUsIGJ1dCBub3QgcnVuIGZyb20gYSBkZWZhdWx0IGtzZWxmdGVzdCBpbnZvY2F0aW9uLgomIzQzO1RFU1RfUFJPR1NfRVhURU5ERUQgJiM0Mzs9IGh3cG9pc29uLXBhbmljLnNoCiYjNDM7CiBURVNUX0ZJTEVTIDo9IHRlc3Rfdm1hbGxvYy5zaAogVEVTVF9GSUxFUyAmIzQzOz0gdGVzdF9obW0uc2gKIFRFU1RfRklMRVMgJiM0Mzs9IHZhX2hpZ2hfYWRkcl9zd2l0Y2guc2gKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h3cG9pc29uLXBhbmljLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHdwb2lzb24tcGFuaWMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmQ5NTNkMTM2NzMzMjQ0Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHdwb2lzb24tcGFuaWMuc2gKQEAgLTAsMCAmIzQzOzEsMjU1IEBACiYjNDM7IyEvYmluL2Jhc2gKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7IwomIzQzOyMgVmVyaWZ5IHZtLnBhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmUgYnkgaW5qZWN0aW5nIGEgaHdwb2lzb24KJiM0MzsjIGVycm9yIG9uIGEga2VybmVsLW93bmVkIHBhZ2UgYW5kIGNvbmZpcm1pbmcgdGhlIGtlcm5lbCBwYW5pY3MuCiYjNDM7IwomIzQzOyMgVGhyZWUgJiMzNDtraW5kcyYjMzQ7IG9mIGtlcm5lbC1vd25lZCBwYWdlIGNhbiBiZSB0YXJnZXRlZCwgc2VsZWN0YWJsZSB2aWEgdGhlCiYjNDM7IyBmaXJzdCBwb3NpdGlvbmFsIGFyZ3VtZW50IChkZWZhdWx0OiByb2RhdGEpOgomIzQzOyMKJiM0MzsjICAgcm9kYXRhICAtIGEgUEdfcmVzZXJ2ZWQgcGFnZSBpbiB0aGUga2VybmVsIHJvZGF0YSByYW5nZQomIzQzOyMgICAgICAgICAgICAgKHNvdXJjZWQgZnJvbSAvcHJvYy9pb21lbSAmIzM0O0tlcm5lbCByb2RhdGEmIzM0OykuICBFeGVyY2lzZXMKJiM0MzsjICAgICAgICAgICAgIG1lbW9yeV9mYWlsdXJlKCkgLSZndDsgZ2V0X2FueV9wYWdlKCkgb24gYSBQYWdlUmVzZXJ2ZWQgcGFnZS4KJiM0MzsjCiYjNDM7IyAgIHNsYWIgICAgLSBhIHNsYWIgcGFnZSBmb3VuZCB2aWEgL3Byb2Mva3BhZ2VmbGFncyAoS1BGX1NMQUIpLgomIzQzOyMgICAgICAgICAgICAgRXhlcmNpc2VzIG1lbW9yeV9mYWlsdXJlKCkgLSZndDsgZ2V0X2FueV9wYWdlKCkgb24gYSBub24KJiM0MzsjICAgICAgICAgICAgIFBHX3Jlc2VydmVkIGtlcm5lbC1vd25lZCBwYWdlLiAgVGhpcyBwYXRoIGlzIHdoYXQgY2F0Y2hlcwomIzQzOyMgICAgICAgICAgICAgcmVncmVzc2lvbnMgd2hlcmUgZ2V0X2FueV9wYWdlKCkgY29sbGFwc2VzIGtlcm5lbC1vd25lZAomIzQzOyMgICAgICAgICAgICAgcGFnZXMgaW50byBhIHRyYW5zaWVudCAtRUlPIGluc3RlYWQgb2YgLUVOT1RSRUNPVkVSQUJMRS4KJiM0MzsjCiYjNDM7IyAgIHBndGFibGUgLSBhIHBhZ2UtdGFibGUgcGFnZSBmb3VuZCB2aWEgL3Byb2Mva3BhZ2VmbGFncyAoS1BGX1BHVEFCTEUpLgomIzQzOyMgICAgICAgICAgICAgU2FtZSBwYXRoIGFzIHNsYWIsIGRpZmZlcmVudCBwYWdlIHR5cGUuCiYjNDM7IwomIzQzOyMgVGhpcyB0ZXN0IGlzIERFU1RSVUNUSVZFOiBhIHN1Y2Nlc3NmdWwgcnVuIGNyYXNoZXMgdGhlIGtlcm5lbC4gIEl0IGlzCiYjNDM7IyBtZWFudCB0byBiZSBleGVjdXRlZCBpbnNpZGUgYSBkaXNwb3NhYmxlIFZNIChlLmcuIHZpcnRtZS1uZykgd2l0aCBhCiYjNDM7IyBzZXJpYWwgY29uc29sZSBjYXB0dXJlZCBieSB0aGUgaGFybmVzcy4gIEl0IGlzIHNraXBwZWQgdW5sZXNzIHRoZQomIzQzOyMgY2FsbGVyIG9wdHMgaW4gdmlhIFJVTl9ERVNUUlVDVElWRT0xLgomIzQzOyMKJiM0MzsjIFRlc3QgcGFzc2VzIGV4dGVybmFsbHk6IHRoZSBrZXJuZWwgbXVzdCBwYW5pYyB3aXRoCiYjNDM7IyAgICYjMzQ7TWVtb3J5IGZhaWx1cmU6ICZsdDtwZm4mZ3Q7OiB1bnJlY292ZXJhYmxlIHBhZ2UmIzM0OwomIzQzOyMgQSByZXR1cm4gZnJvbSB0aGUgaW5qZWN0IG1lYW5zIG5vIHBhbmljIGZpcmVkOiB0aGF0IGlzIGEgZmFpbHVyZSwKJiM0MzsjIHVubGVzcyB0aGUgdGFyZ2V0IFBGTiByYWNlZCB0byBhIGRpZmZlcmVudCBwYWdlIHR5cGUgYmVmb3JlIGluamVjdGlvbiwKJiM0MzsjIGluIHdoaWNoIGNhc2UgdGhlIHJ1biBpcyBpbmNvbmNsdXNpdmUgYW5kIGlzIHNraXBwZWQuCiYjNDM7IwomIzQzOyMgQXV0aG9yOiBCcmVubyBMZWl0YW8gJmx0O2xlaXRhb0BkZWJpYW4ub3JnJmd0OwomIzQzOwomIzQzO3NldCAtdQomIzQzOwomIzQzOyMgS1RBUCBvdXRwdXQgaGVscGVycyAoa3RhcF9wcmludF9tc2csIGt0YXBfc2tpcF9hbGwsIGt0YXBfZXhpdF9mYWlsX21zZywgLi4uKS4KJiM0MztESVI9JiMzNDskKGRpcm5hbWUgJiMzNDskKHJlYWRsaW5rIC1mICYjMzQ7JDAmIzM0OykmIzM0OykmIzM0OwomIzQzOyMgc2hlbGxjaGVjayBzb3VyY2U9Li4va3NlbGZ0ZXN0L2t0YXBfaGVscGVycy5zaAomIzQzO3NvdXJjZSAmIzM0OyR7RElSfSYjMzQ7Ly4uL2tzZWxmdGVzdC9rdGFwX2hlbHBlcnMuc2gKJiM0MzsKJiM0MztzeXNjdGxfcGF0aD0vcHJvYy9zeXMvdm0vcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZQomIzQzO2luamVjdF9wYXRoPS9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2hhcmRfb2ZmbGluZV9wYWdlCiYjNDM7a3BhZ2VmbGFnc19wYXRoPS9wcm9jL2twYWdlZmxhZ3MKJiM0Mzt1bnBvaXNvbl9wYXRoPS9zeXMva2VybmVsL2RlYnVnL2h3cG9pc29uL3VucG9pc29uLXBmbgomIzQzOwomIzQzOyMgL3Byb2Mva3BhZ2VmbGFncyBiaXQgcG9zaXRpb25zIChzZWUgaW5jbHVkZS91YXBpL2xpbnV4L2tlcm5lbC1wYWdlLWZsYWdzLmgpCiYjNDM7S1BGX1NMQUI9NwomIzQzO0tQRl9DT01QT1VORF9UQUlMPTE2CiYjNDM7S1BGX0hXUE9JU09OPTE5CiYjNDM7S1BGX05PUEFHRT0yMAomIzQzO0tQRl9QR1RBQkxFPTI2CiYjNDM7S1BGX1JFU0VSVkVEPTMyCiYjNDM7CiYjNDM7cGFnZXNpemU9JChnZXRjb25mIFBBR0VfU0laRSkKJiM0MzsKJiM0MztraW5kPSR7MTotcm9kYXRhfQomIzQzOwomIzQzO2lmIFsgJiMzNDskKGlkIC11KSYjMzQ7IC1uZSAwIF07IHRoZW4KJiM0MzsJa3RhcF9za2lwX2FsbCAmIzM0O211c3QgcnVuIGFzIHJvb3QmIzM0OwomIzQzOwlleGl0ICYjMzQ7JEtTRlRfU0tJUCYjMzQ7CiYjNDM7ZmkKJiM0MzsKJiM0MztpZiBbICEgLXcgJiMzNDskc3lzY3RsX3BhdGgmIzM0OyBdOyB0aGVuCiYjNDM7CWt0YXBfc2tpcF9hbGwgJiMzNDskc3lzY3RsX3BhdGggbm90IHByZXNlbnQgKGtlcm5lbCB3aXRob3V0IHRoZSBzeXNjdGw/KSYjMzQ7CiYjNDM7CWV4aXQgJiMzNDskS1NGVF9TS0lQJiMzNDsKJiM0MztmaQomIzQzOwomIzQzO2lmIFsgISAtdyAmIzM0OyRpbmplY3RfcGF0aCYjMzQ7IF07IHRoZW4KJiM0MzsJa3RhcF9za2lwX2FsbCAmIzM0OyRpbmplY3RfcGF0aCBub3QgcHJlc2VudCAobm8gTUVNT1JZX0hPVFBMVUc/KSYjMzQ7CiYjNDM7CWV4aXQgJiMzNDskS1NGVF9TS0lQJiMzNDsKJiM0MztmaQomIzQzOwomIzQzO2lmIFsgJiMzNDske1JVTl9ERVNUUlVDVElWRTotMH0mIzM0OyAhPSAmIzM0OzEmIzM0OyBdOyB0aGVuCiYjNDM7CWt0YXBfc2tpcF9hbGwgJiMzNDtkZXN0cnVjdGl2ZSB0ZXN0OyByZS1ydW4gd2l0aCBSVU5fREVTVFJVQ1RJVkU9MSBpbnNpZGUgYSBkaXNwb3NhYmxlIFZNJiMzNDsKJiM0MzsJZXhpdCAmIzM0OyRLU0ZUX1NLSVAmIzM0OwomIzQzO2ZpCiYjNDM7CiYjNDM7IyBQaWNrIGEgUEZOIGluc2lkZSB0aGUga2VybmVsIGltYWdlIHJvZGF0YSByZWdpb24gb2YgL3Byb2MvaW9tZW0uCiYjNDM7IyBUaGlzIGlzIHByZWZlcnJlZCBvdmVyIGEgdG9wLWxldmVsICYjMzQ7UmVzZXJ2ZWQmIzM0OyBlbnRyeSBiZWNhdXNlIHRvcC1sZXZlbAomIzQzOyMgUmVzZXJ2ZWQgcmFuZ2VzIGFyZSBvZnRlbiBmaXJtd2FyZSBob2xlcyB0aGF0IGhhdmUgbm8gYmFja2luZyBzdHJ1Y3QKJiM0MzsjIHBhZ2U7IHBmbl90b19vbmxpbmVfcGFnZSgpIHJldHVybnMgTlVMTCBvbiB0aG9zZSBhbmQgbWVtb3J5X2ZhaWx1cmUoKQomIzQzOyMgYmFpbHMgb3V0IHdpdGggLUVOWElPIGJlZm9yZSByZWFjaGluZyB0aGUgcGFuaWMgcGF0aC4KJiM0MzsjCiYjNDM7IyAmIzM0O0tlcm5lbCByb2RhdGEmIzM0OyBpcyByZXBvcnRlZCBhcyBhIHN1Yi1yZXNvdXJjZSBvZiAmIzM0O1N5c3RlbSBSQU0mIzM0OyBvbiBldmVyeQomIzQzOyMgbWFqb3IgYXJjaGl0ZWN0dXJlLCB3aGljaCBndWFyYW50ZWVzOgomIzQzOyMgICAtIHRoZSBQRk4gaXMgYmFja2VkIGJ5IHN0cnVjdCBwYWdlICh3aXRoaW4gYW4gb25saW5lIG1lbW9yeSByYW5nZSk7CiYjNDM7IyAgIC0gUEdfcmVzZXJ2ZWQgaXMgc2V0IG9uIHRoZSBwYWdlIChrZXJuZWwgaW1hZ2UgYXJlYSk7CiYjNDM7IyAgIC0gdGhlIG1lbW9yeSBpcyByZWFkLW9ubHksIHNvIHNldHRpbmcgUEdfaHdwb2lzb24gb24gaXQgZG9lcyBub3QKJiM0MzsjICAgICBjb3JydXB0IHdyaXRhYmxlIGtlcm5lbCBzdGF0ZSBpZiB0aGUgcGFuaWMgc29tZWhvdyBkb2VzIG5vdCBmaXJlLgomIzQzOyMKJiM0MzsjIC9wcm9jL2lvbWVtIGVudHJpZXMgbG9vayBsaWtlIChpbmRlbnRlZCBmb3Igc3ViLXJlc291cmNlcyk6CiYjNDM7IyAgICAgJiMzNDsgIDAyNTAwMDAwLTAyZmZmZmZmIDogS2VybmVsIHJvZGF0YSYjMzQ7CiYjNDM7cGlja19yb2RhdGFfcGh5c19hZGRyKCkgewomIzQzOwlhd2sgLXYgcGFnZXNpemU9JiMzNDskKGdldGNvbmYgUEFHRV9TSVpFKSYjMzQ7ICYjMzk7CiYjNDM7CSMgQ29udmVydCBhIGhleCBzdHJpbmcgdG8gYSBudW1iZXIgd2l0aG91dCByZWx5aW5nIG9uIHRoZSBnYXdrLW9ubHkKJiM0MzsJIyBzdHJ0b251bSgpLiAgbWF3ayBsYWNrcyBpdCBhbmQgd291bGQgb3RoZXJ3aXNlIHNwdXJpb3VzbHkgc2tpcAomIzQzOwkjIHRoaXMgdGVzdCBvbiBkaXN0cm9zIHRoYXQgc2hpcCBtYXdrIGFzIC91c3IvYmluL2F3ay4KJiM0MzsJZnVuY3Rpb24gaGV4Mm51bShzLCAgIG4sIGksIGMsIHYpIHsKJiM0MzsJCW4gPSAwCiYjNDM7CQlmb3IgKGkgPSAxOyBpICZsdDs9IGxlbmd0aChzKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQljID0gdG9sb3dlcihzdWJzdHIocywgaSwgMSkpCiYjNDM7CQkJdiA9IGluZGV4KCYjMzQ7MDEyMzQ1Njc4OWFiY2RlZiYjMzQ7LCBjKSAtIDEKJiM0MzsJCQlpZiAodiAmbHQ7IDApCiYjNDM7CQkJCXJldHVybiAtMQomIzQzOwkJCW4gPSBuICogMTYgJiM0MzsgdgomIzQzOwkJfQomIzQzOwkJcmV0dXJuIG4KJiM0MzsJfQomIzQzOwkvOiBLZXJuZWwgcm9kYXRhW1s6c3BhY2U6XV0qJC8gewomIzQzOwkJc3ViKC9eW1s6c3BhY2U6XV0mIzQzOy8sICYjMzQ7JiMzNDspCiYjNDM7CQluID0gc3BsaXQoJDAsIGEsIC9bLSBdLykKJiM0MzsJCXN0YXJ0ID0gaGV4Mm51bShhWzFdKQomIzQzOwkJZW5kICAgPSBoZXgybnVtKGFbMl0pCiYjNDM7CQlpZiAoZW5kICZsdDs9IHN0YXJ0KQomIzQzOwkJCW5leHQKJiM0MzsJCSMgUGFnZS1hbGlnbiB1cHdhcmQgYW5kIGVtaXQgdGhlIGZpcnN0IGJ5dGUgb2YgdGhhdCBwYWdlLgomIzQzOwkJcGZuID0gaW50KChzdGFydCAmIzQzOyBwYWdlc2l6ZSAtIDEpIC8gcGFnZXNpemUpCiYjNDM7CQlwcmludGYgJiMzNDsweCV4XG4mIzM0OywgcGZuICogcGFnZXNpemUKJiM0MzsJCWV4aXQgMAomIzQzOwl9CiYjNDM7CSYjMzk7IC9wcm9jL2lvbWVtCiYjNDM7fQomIzQzOwomIzQzOyMgV2FsayAvcHJvYy9rcGFnZWZsYWdzIGFuZCByZXR1cm4gdGhlIHBoeXMgYWRkciBvZiB0aGUgZmlyc3QgUEZOIHRoYXQKJiM0MzsjIGhhcyBiaXQgJDEgc2V0LCB3aXRoIEtQRl9IV1BPSVNPTiwgS1BGX05PUEFHRSBhbmQgS1BGX0NPTVBPVU5EX1RBSUwKJiM0MzsjIGFsbCBjbGVhciAoc28gd2UgYXR0YWNrIGEgcmVhbCwgbm9uLXRhaWwsIG5vdC1hbHJlYWR5LXBvaXNvbmVkIHBhZ2UpLgomIzQzOyMKJiM0MzsjIFdlIHNraXAgdGhlIGZpcnN0IDE2IE1pQiBvZiBQRk5zIHRvIHN0ZXAgcGFzdCBsb3ctbWVtb3J5IHNwZWNpYWwKJiM0MzsjIHJhbmdlcyAoQklPUy9FRkkvQUNQSS9ldGMuKSB0aGF0IG9mdGVuIGFyZSBQR19yZXNlcnZlZCBhbmQgd291bGQgbm90CiYjNDM7IyBleGhpYml0IHRoZSBzbGFiL3BndGFibGUgdHlwZSB3ZSBhcmUgbG9va2luZyBmb3IuCiYjNDM7cGlja19rcGFnZWZsYWdzX3BoeXNfYWRkcigpIHsKJiM0MzsJbG9jYWwgd2FudF9iaXQ9JDEKJiM0MzsJbG9jYWwgcGFnZXNpemUgc2tpcF9wZm4KJiM0MzsKJiM0MzsJWyAtciAmIzM0OyRrcGFnZWZsYWdzX3BhdGgmIzM0OyBdIHx8IHJldHVybgomIzQzOwomIzQzOwlwYWdlc2l6ZT0kKGdldGNvbmYgUEFHRV9TSVpFKQomIzQzOwlza2lwX3Bmbj0kKCgoMTYgKiAxMDI0ICogMTAyNCkgLyBwYWdlc2l6ZSkpCiYjNDM7CiYjNDM7CW9kIC1BbiAtdHg4IC12IC13OCAtaiAmIzM0OyQoKHNraXBfcGZuICogOCkpJiMzNDsgJiMzNDska3BhZ2VmbGFnc19wYXRoJiMzNDsgMiZndDsvZGV2L251bGwgfCBcCiYjNDM7CWF3ayAtdiB3YW50X2JpdD0mIzM0OyR3YW50X2JpdCYjMzQ7IFwKJiM0MzsJICAgIC12IGh3cF9iaXQ9JiMzNDskS1BGX0hXUE9JU09OJiMzNDsgXAomIzQzOwkgICAgLXYgbm9wYWdlX2JpdD0mIzM0OyRLUEZfTk9QQUdFJiMzNDsgXAomIzQzOwkgICAgLXYgdGFpbF9iaXQ9JiMzNDskS1BGX0NPTVBPVU5EX1RBSUwmIzM0OyBcCiYjNDM7CSAgICAtdiBiYXNlX3Bmbj0mIzM0OyRza2lwX3BmbiYjMzQ7IFwKJiM0MzsJICAgIC12IHBhZ2VzaXplPSYjMzQ7JHBhZ2VzaXplJiMzNDsgJiMzOTsKJiM0MzsJIyBUZXN0IHdoZXRoZXIgYml0ICYjMzQ7YiYjMzQ7IGlzIHNldCBpbiB0aGUgMTYtaGV4LWRpZ2l0IHZhbHVlICYjMzQ7aGV4JiMzNDsuCiYjNDM7CSMgRG9uZSB3aXRoIHN1YnN0cmluZyAmIzQzOyBwZXItZGlnaXQgbG9va3VwIHNvIHdlIG5ldmVyIHJlbHkgb24gYXdrCiYjNDM7CSMgYml0d2lzZSBvcGVyYXRvcnMgKG1hd2sgbGFja3MgdGhlbSksIDY0LWJpdCBGUCBwcmVjaXNpb24gb3IgdGhlCiYjNDM7CSMgZ2F3ay1vbmx5IHN0cnRvbnVtKCkuCiYjNDM7CWZ1bmN0aW9uIGJpdF9zZXQoaGV4LCBiLCAgICBkaSwgYmksIGMsIHYpIHsKJiM0MzsJCWRpID0gaW50KGIgLyA0KQomIzQzOwkJYmkgPSBiIC0gZGkgKiA0CiYjNDM7CQljID0gc3Vic3RyKGhleCwgbGVuZ3RoKGhleCkgLSBkaSwgMSkKJiM0MzsJCXYgPSBpbmRleCgmIzM0OzAxMjM0NTY3ODlhYmNkZWYmIzM0OywgdG9sb3dlcihjKSkgLSAxCiYjNDM7CQlpZiAoYmkgPT0gMCkgcmV0dXJuICh2ICUgMikgPT0gMQomIzQzOwkJaWYgKGJpID09IDEpIHJldHVybiBpbnQodiAvIDIpICUgMiA9PSAxCiYjNDM7CQlpZiAoYmkgPT0gMikgcmV0dXJuIGludCh2IC8gNCkgJSAyID09IDEKJiM0MzsJCXJldHVybiBpbnQodiAvIDgpICUgMiA9PSAxCiYjNDM7CX0KJiM0MzsJewomIzQzOwkJZ3N1YigvXltbOnNwYWNlOl1dJiM0MzsvLCAmIzM0OyYjMzQ7KQomIzQzOwkJaCA9ICQxCiYjNDM7CQlpZiAoYml0X3NldChoLCB3YW50X2JpdCkgJmFtcDsmYW1wOwomIzQzOwkJICAgICFiaXRfc2V0KGgsIGh3cF9iaXQpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhYml0X3NldChoLCBub3BhZ2VfYml0KSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIWJpdF9zZXQoaCwgdGFpbF9iaXQpKSB7CiYjNDM7CQkJcGZuID0gYmFzZV9wZm4gJiM0MzsgTlIgLSAxCiYjNDM7CQkJcHJpbnRmICYjMzQ7MHgleFxuJiMzNDssIHBmbiAqIHBhZ2VzaXplCiYjNDM7CQkJZXhpdCAwCiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJJiMzOTsKJiM0Mzt9CiYjNDM7CiYjNDM7IyBSZXR1cm4gMCBpZiAvcHJvYy9rcGFnZWZsYWdzIGJpdCAkMiBpcyBzZXQgZm9yIFBGTiAkMSwgMSBpZiBpdCBpcwomIzQzOyMgY2xlYXIsIG9yIDIgaWYgdGhlIHdvcmQgY2Fubm90IGJlIHJlYWQuICBVc2VkIHRvIHJlLWNvbmZpcm0gdGhlIHRhcmdldAomIzQzOyMgcGFnZSB0eXBlIGFmdGVyIGEgbm9uLXBhbmlja2luZyBpbmplY3QuCiYjNDM7a3BhZ2VmbGFnc19iaXRfc2V0KCkgewomIzQzOwlsb2NhbCB3b3JkCiYjNDM7CiYjNDM7CXdvcmQ9JChvZCAtQW4gLXR4OCAtdiAtaiAmIzM0OyQoKCQxICogOCkpJiMzNDsgLU4gOCAmIzM0OyRrcGFnZWZsYWdzX3BhdGgmIzM0OyAyJmd0Oy9kZXYvbnVsbCB8IHRyIC1kICYjMzk7WzpzcGFjZTpdJiMzOTspCiYjNDM7CVsgLW4gJiMzNDskd29yZCYjMzQ7IF0gfHwgcmV0dXJuIDIKJiM0MzsJKCggKDE2IyR3b3JkICZndDsmZ3Q7ICQyKSAmYW1wOyAxICkpCiYjNDM7fQomIzQzOwomIzQzOyMgQmVzdC1lZmZvcnQ6IGRyb3AgdGhlIFBHX2h3cG9pc29uIG1hcmtlciBzZXQgYnkgdGhlIGluamVjdCBzbyBhIGZhaWxlZAomIzQzOyMgcnVuIGRvZXMgbm90IGxlYXZlIGEgcG9pc29uZWQgcGFnZSBiZWhpbmQuICBoYXJkX29mZmxpbmVfcGFnZSgpIGluamVjdHMKJiM0MzsjIHdpdGggTUZfU1dfU0lNVUxBVEVELCBzbyB0aGUgcGFnZSBzdGF5cyB1bnBvaXNvbmFibGUgdGhyb3VnaCB0aGUKJiM0MzsjIGh3cG9pc29uIGRlYnVnZnMgaW50ZXJmYWNlIChuZWVkcyBDT05GSUdfSFdQT0lTT05fSU5KRUNUICYjNDM7IGRlYnVnZnMpLgomIzQzO3RyeV91bnBvaXNvbigpIHsKJiM0MzsJWyAtdyAmIzM0OyR1bnBvaXNvbl9wYXRoJiMzNDsgXSB8fCByZXR1cm4gMAomIzQzOwllY2hvICYjMzQ7JDEmIzM0OyAmZ3Q7ICYjMzQ7JHVucG9pc29uX3BhdGgmIzM0OyAyJmd0Oy9kZXYvbnVsbCB8fCB0cnVlCiYjNDM7fQomIzQzOwomIzQzO2Nhc2UgJiMzNDska2luZCYjMzQ7IGluCiYjNDM7cm9kYXRhKQomIzQzOwlwaHlzX2FkZHI9JChwaWNrX3JvZGF0YV9waHlzX2FkZHIpCiYjNDM7CXJlY2hlY2tfYml0PSRLUEZfUkVTRVJWRUQKJiM0MzsJbWlzc2luZ19tc2c9JiMzOTtubyAmIzM0O0tlcm5lbCByb2RhdGEmIzM0OyBlbnRyeSBpbiAvcHJvYy9pb21lbSYjMzk7CiYjNDM7CTs7CiYjNDM7c2xhYikKJiM0MzsJcGh5c19hZGRyPSQocGlja19rcGFnZWZsYWdzX3BoeXNfYWRkciAmIzM0OyRLUEZfU0xBQiYjMzQ7KQomIzQzOwlyZWNoZWNrX2JpdD0kS1BGX1NMQUIKJiM0MzsJbWlzc2luZ19tc2c9JiMzNDtubyB1c2FibGUgc2xhYiBQRk4gZm91bmQgaW4gJGtwYWdlZmxhZ3NfcGF0aCYjMzQ7CiYjNDM7CTs7CiYjNDM7cGd0YWJsZSkKJiM0MzsJcGh5c19hZGRyPSQocGlja19rcGFnZWZsYWdzX3BoeXNfYWRkciAmIzM0OyRLUEZfUEdUQUJMRSYjMzQ7KQomIzQzOwlyZWNoZWNrX2JpdD0kS1BGX1BHVEFCTEUKJiM0MzsJbWlzc2luZ19tc2c9JiMzNDtubyB1c2FibGUgcGFnZS10YWJsZSBQRk4gZm91bmQgaW4gJGtwYWdlZmxhZ3NfcGF0aCYjMzQ7CiYjNDM7CTs7CiYjNDM7KikKJiM0MzsJa3RhcF9leGl0X2ZhaWxfbXNnICYjMzQ7dW5rbm93biBraW5kICYjMzk7JGtpbmQmIzM5OyAoZXhwZWN0ZWQ6IHJvZGF0YXxzbGFifHBndGFibGUpJiMzNDsKJiM0MzsJOzsKJiM0Mztlc2FjCiYjNDM7CiYjNDM7aWYgWyAteiAmIzM0OyRwaHlzX2FkZHImIzM0OyBdOyB0aGVuCiYjNDM7CWt0YXBfc2tpcF9hbGwgJiMzNDskbWlzc2luZ19tc2cmIzM0OwomIzQzOwlleGl0ICYjMzQ7JEtTRlRfU0tJUCYjMzQ7CiYjNDM7ZmkKJiM0MzsKJiM0MztrdGFwX3ByaW50X21zZyAmIzM0O2VuYWJsaW5nICRzeXNjdGxfcGF0aCYjMzQ7CiYjNDM7cHJpb3I9JChjYXQgJiMzNDskc3lzY3RsX3BhdGgmIzM0OykKJiM0MztlY2hvIDEgJmd0OyAmIzM0OyRzeXNjdGxfcGF0aCYjMzQ7IHx8IGt0YXBfZXhpdF9mYWlsX21zZyAmIzM0O2ZhaWxlZCB0byBlbmFibGUgc3lzY3RsJiMzNDsKJiM0MzsKJiM0MztwZm49JCgocGh5c19hZGRyIC8gcGFnZXNpemUpKQomIzQzO2t0YXBfcHJpbnRfbXNnICYjMzQ7aW5qZWN0aW5nIGh3cG9pc29uIGF0IHBoeXMgMHgkKHByaW50ZiAmIzM5OyV4JiMzOTsgJiMzNDskcGh5c19hZGRyJiMzNDspIChwZm4gMHgkKHByaW50ZiAmIzM5OyV4JiMzOTsgJiMzNDskcGZuJiMzNDspLCBraW5kPSRraW5kKSYjMzQ7CiYjNDM7a3RhcF9wcmludF9tc2cgJiMzNDtleHBlY3Rpbmcga2VybmVsIHBhbmljOiAmIzM5O01lbW9yeSBmYWlsdXJlOiAmbHQ7cGZuJmd0OzogdW5yZWNvdmVyYWJsZSBwYWdlJiMzOTsmIzM0OwomIzQzOwomIzQzOyMgQSBzdWNjZXNzZnVsIHJ1biBuZXZlciByZXR1cm5zIGZyb20gdGhlIGluamVjdCAtLSBpdCBwYW5pY3MgdGhlIGtlcm5lbC4KJiM0MzsjIFJlYWNoaW5nIHRoZSBjb2RlIGJlbG93IHRoZXJlZm9yZSBtZWFucyBubyBwYW5pYyBmaXJlZC4gIE5vdGUgd2hldGhlcgomIzQzOyMgdGhlIHdyaXRlIGl0c2VsZiBzdWNjZWVkZWQsIHRoZW4gcHV0IHRoZSBtYWNoaW5lIGJhY2s6IHJlc3RvcmUgdGhlCiYjNDM7IyBzeXNjdGwgYW5kIGJlc3QtZWZmb3J0IHVucG9pc29uIHRoZSBwYWdlIHdlIGp1c3QgbWFya2VkLgomIzQzO2lmIGVjaG8gJiMzNDskcGh5c19hZGRyJiMzNDsgJmd0OyAmIzM0OyRpbmplY3RfcGF0aCYjMzQ7OyB0aGVuCiYjNDM7CXZlcmRpY3Q9JiMzNDtpbmplY3QgcmV0dXJuZWQgd2l0aG91dCBwYW5pYzsgc3lzY3RsIGluZWZmZWN0aXZlJiMzNDsKJiM0MztlbHNlCiYjNDM7CXZlcmRpY3Q9JiMzNDtpbmplY3QgZmFpbGVkIGJlZm9yZSByZWFjaGluZyB0aGUgcGFuaWMgcGF0aCYjMzQ7CiYjNDM7ZmkKJiM0MzsKJiM0MztlY2hvICYjMzQ7JHByaW9yJiMzNDsgJmd0OyAmIzM0OyRzeXNjdGxfcGF0aCYjMzQ7CiYjNDM7dHJ5X3VucG9pc29uICYjMzQ7JHBmbiYjMzQ7CiYjNDM7CiYjNDM7IyBUaGUgcGFnZSB0eXBlIGNhbiBjaGFuZ2UgYmV0d2VlbiBzZWxlY3Rpb24gYW5kIGluamVjdGlvbiAoZS5nLiBhIHNsYWIKJiM0MzsjIG9yIHBhZ2UtdGFibGUgcGFnZSBpcyBmcmVlZCBhbmQgcmV1c2VkKS4gIE9ubHkgdHJlYXQgYSBtaXNzaW5nIHBhbmljIGFzCiYjNDM7IyBhIGZhaWx1cmUgaWYgdGhlIHRhcmdldCBQRk4gaXMgc3RpbGwgdGhlIGtlcm5lbC1vd25lZCB0eXBlIHdlIGFpbWVkIGF0OwomIzQzOyMgaWYgaXQgcmFjZWQgdG8gYW5vdGhlciB0eXBlIHRoZSBydW4gaXMgaW5jb25jbHVzaXZlLCBzbyBza2lwIGluc3RlYWQuCiYjNDM7a3BhZ2VmbGFnc19iaXRfc2V0ICYjMzQ7JHBmbiYjMzQ7ICYjMzQ7JHJlY2hlY2tfYml0JiMzNDsKJiM0MztjYXNlICQ/IGluCiYjNDM7MCkJa3RhcF9leGl0X2ZhaWxfbXNnICYjMzQ7JHZlcmRpY3QgKHBhZ2Ugc3RpbGwgJGtpbmQpJiMzNDsgOzsKJiM0MzsxKQlrdGFwX3NraXBfYWxsICYjMzQ7dGFyZ2V0IFBGTiBubyBsb25nZXIgJGtpbmQ7IHJhY2VkIGJlZm9yZSBpbmplY3QsIGluY29uY2x1c2l2ZSYjMzQ7CiYjNDM7CWV4aXQgJiMzNDskS1NGVF9TS0lQJiMzNDsgOzsKJiM0MzsqKQlrdGFwX2V4aXRfZmFpbF9tc2cgJiMzNDskdmVyZGljdCAoY291bGQgbm90IHJlY29uZmlybSBwYWdlIHR5cGUgdmlhICRrcGFnZWZsYWdzX3BhdGgpJiMzNDsgOzsKJiM0Mztlc2FjCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE4OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwMTkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNTcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV3IEtlcm5lbCBNZW1vcnkgRmFpbHVyZSBQYW5pYyBQYXRjaCoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IGEgbmV3IHBhdGNoIGludHJvZHVjaW5nIGEgYHN5c2N0bGAgY2FsbGVkIGBwYW5pY19vbl91bnJlY292ZXJhYmxlX21lbW9yeV9mYWlsdXJlYCwgd2hpY2ggaXMgYHN5c2N0bF9wYW5pY19vbl91bnJlY292ZXJhYmxlX21mYCBpbiBjb2RlLiBUaGUgY29yZSBjaGFuZ2UgaXMgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgLCBhbmQgaXQmIzM5O3MgZGVzaWduZWQgdG8gcGFuaWMgdGhlIGtlcm5lbCB3aGVuIGFuIHVucmVjb3ZlcmFibGUgbWVtb3J5IGZhaWx1cmUgb2NjdXJzIHNwZWNpZmljYWxseSBvbiBhIGtlcm5lbCBwYWdlLiBUaGUgcGF0Y2ggYWRkcyBgaXNfa2VybmVsX293bmVkX3BhZ2UoKWAgdG8gaWRlbnRpZnkga2VybmVsIHBhZ2VzOyBpdCBjaGVja3MgYFBhZ2VSZXNlcnZlZGAsIGBQYWdlU2xhYmAsIGBQYWdlVGFibGVgLCBhbmQgYFBhZ2VMYXJnZUttYWxsb2NgIGZsYWdzLiBJZiBpdCBmaW5kcyBhIGtlcm5lbC1vd25lZCBwYWdlLCBgZ2V0X2FueV9wYWdlKClgIHJldHVybnMgYC1FTk9UUkVDT1ZFUkFCTEVgLiBUaGVuLCBgbWVtb3J5X2ZhaWx1cmUoKWAgaGFuZGxlcyB0aGlzIGFuZCwgaWYgdGhlIHN5c2N0bCBpcyBzZXQsIGl0IHBhbmljcy4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgaG93IHJlYWNoYWJsZSBpcyB0aGlzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIHdoaWNoIGlzIHdoZXJlIEkgdXN1YWxseSB3b3JrPyBUdXJucyBvdXQsIG1lbW9yeSBmYWlsdXJlcyBjYW4gYmUgaW5qZWN0ZWQgdmlhIGAvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9oYXJkX29mZmxpbmVfcGFnZWAgb3IgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgLiBUaGVyZSYjMzk7cyBldmVuIGEgdGVzdCBzY3JpcHQsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9od3BvaXNvbi1wYW5pYy5zaGAsIHRoYXQgdXNlcyBgaGFyZF9vZmZsaW5lX3BhZ2VgLiBBaCwgYnV0IHdhaXQsIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCBvbmx5IHdvcmtzIG9uICp1c2VyKiBwYWdlcy4gU28sIHRvIGhpdCBrZXJuZWwgcGFnZXMsIHdlJiMzOTtyZSBzdHVjayB3aXRoIGAvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9oYXJkX29mZmxpbmVfcGFnZWAgb3IgcG90ZW50aWFsbHkgYW4gaHdwb2lzb24gaW5qZWN0aW9uIG1vZHVsZS4gR29vZCB0byBrbm93IGBoYXJkX29mZmxpbmVfcGFnZWAgaXMgYWNjZXNzaWJsZSBpZiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBpcyBlbmFibGVkLCB3aGljaCBpcyB0aGUga2V5LgoKTm93LCBjYW4gd2UgYWN0dWFsbHkgcmVhY2ggYG1lbW9yeV9mYWlsdXJlKClgIG9uIGtlcm5lbCBwYWdlcz8gWWVzLCBiZWNhdXNlIGBoYXJkX29mZmxpbmVfcGFnZWAgaXMgYSB3cml0ZSB0byBzeXNmcywgd2hpY2ggZW5kcyB1cCBjYWxsaW5nIGBtZW1vcnlfZmFpbHVyZSgpYC4gU2luY2Ugc3l6a2FsbGVyIHVzdWFsbHkgaGFzIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGVuYWJsZWQsIHRoaXMgaXMgYSBkaXN0aW5jdCBwb3NzaWJpbGl0eS4gRG9lcyBzeXprYWxsZXIgaGF2ZSBhY2Nlc3MgdG8gdGhlc2Ugc3lzZnMgb3IgZGVidWdmcyBwYXRocz8gVHlwaWNhbGx5LCBzeXprYWxsZXIgZG9lc24mIzM5O3QgZnV6eiBkZWJ1Z2ZzIG9yIHN5c2ZzIHVubGVzcyB3ZSYjMzk7dmUgZXhwbGljaXRseSBjb25maWd1cmVkIGl0IHRvLiBCdXQgaXQgZG9lcyBmdXp6IGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYC4gSG93ZXZlciwgYWdhaW4sIGBtYWR2aXNlYCBvbmx5IGhhbmRsZXMgdXNlciBwYWdlcywgdGhvdWdoIEkgc3VwcG9zZSBpdCBkb2VzIGNhbGwgYG1lbW9yeV9mYWlsdXJlKClgIG9uIHRoZSBQRk4gb2YgdGhlIHVzZXIgcGFnZS4gSXMgaXQgcG9zc2libGUgZm9yIGEgdXNlciBwYWdlIHRvIGJlIG1hcmtlZCBhcyBrZXJuZWwtb3duZWQgKCBgUGFnZVJlc2VydmVkYCwgYFBhZ2VTbGFiYCwgYFBhZ2VUYWJsZWAsIGBQYWdlTGFyZ2VLbWFsbG9jYCApPyBVc3VhbGx5IG5vdC4KCkJ1dCB0aGlzIHBhdGNoIGlzIHNwZWNpZmljYWxseSBhYm91dCBwYW5pY2tpbmcgb24gKnVucmVjb3ZlcmFibGUqIG1lbW9yeSBmYWlsdXJlcy4gU28sIGlzIGl0IGV2ZW4gd29ydGggZnV6emluZz8gSWYgaXQmIzM5O3MganVzdCBhIHBhbmljIG9uIGFuIGVycm9yIGluamVjdGlvbiBwYXRoLCBtYXliZSBub3QuIEhvd2V2ZXIsIGBtZW1vcnlfZmFpbHVyZSgpYCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IGFjdHVhbCBoYXJkd2FyZSBlcnJvcnMgKE1DRXMpIG9yIHNvZnR3YXJlIGluamVjdGlvbi4gSW4gYSBWTSwgaGFyZHdhcmUgZXJyb3JzIGFyZSBub3QgdGhlIG5vcm0sIHNvIHNvZnR3YXJlIGluamVjdGlvbiBpcyB0aGUgd2F5IHRvIGdvLiBJZiBzeXprYWxsZXIgKmNhbiogaW5qZWN0IG1lbW9yeSBmYWlsdXJlcyBpbnRvIGtlcm5lbCBwYWdlcywgdGhlIHJlc3VsdCB3aWxsIHNpbXBseSBiZSBhIGtlcm5lbCBwYW5pYywgd2hpY2ggaXMgKmV4YWN0bHkqIHdoYXQgdGhpcyBwYXRjaCBpbnRlbmRzLgoKV2FpdCwgaXNuJiMzOTt0IGEga2VybmVsIHBhbmljIGEgY3Jhc2g/IFN5emthbGxlciByZXBvcnRzIHBhbmljcyBhcyBjcmFzaGVzLiBTbywgaWYgc3l6a2FsbGVyIHRyaWdnZXJzIHRoaXMgcGFuaWMsIGl0JiMzOTtsbCBiZSByZXBvcnRlZCBhcyBhIGJ1ZyEgQnV0IHRoaXMgcGFuaWMgaXMgYWN0dWFsbHkgKmludGVudGlvbmFsKiB3aGVuIHRoZSBzeXNjdGwgaXMgZW5hYmxlZC4gSXMgdGhhdCBzeXNjdGwgZW5hYmxlZCBieSBkZWZhdWx0PyBDaGVja2luZ+KApiBgc3RhdGljIGludCBzeXNjdGxfcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZiBfX3JlYWRfbW9zdGx5O2AgQWhhISBJdCYjMzk7cyB6ZXJvIGJ5IGRlZmF1bHQuIFNvLCBieSBkZWZhdWx0LCBpdCB3b24mIzM5O3QgcGFuaWMuIElmIHN5emthbGxlciBkb2VzbiYjMzk7dCBlbmFibGUgdGhlIHN5c2N0bCwgbm8gcGFuaWMuIElmIGl0ICpkb2VzKiBlbmFibGUgaXQsIHRoZW4gd2UgZ2V0IHRoZSBwYW5pYywgd2hpY2ggc3l6a2FsbGVyIHdpbGwgY29uc2lkZXIgYSBidWcsIGJ1dCBpdCYjMzk7cyByZWFsbHkgdGhlIGRlc2lnbmVkIGJlaGF2aW9yLgoKTGV0JiMzOTtzIG5vdCBmb3JnZXQsIHRoZSBwYXRjaCBhbHNvIGNoYW5nZXMgYGdldF9hbnlfcGFnZSgpYCB0byByZXR1cm4gYC1FTk9UUkVDT1ZFUkFCTEVgIGluc3RlYWQgb2YgYC1FSU9gIGZvciBrZXJuZWwtb3duZWQgcGFnZXMuIEJlZm9yZSwgaWYgYGdldF9hbnlfcGFnZSgpYCBnb3QgYC1FSU9gIGl0IHdvdWxkIHByaW50IGFuIGVycm9yIG1lc3NhZ2UuIE5vdyB3aXRoIHRoZSBwYXRjaCwgdGhlIG1lc3NhZ2UgaXMgYHJlY292ZXJ5IGFjdGlvbiBmb3Iga2VybmVsIHBhZ2U6IElnbm9yZWRgLiBBbmQgaWYgdGhlIHN5c2N0bCBpcyBlbmFibGVkLCBpdCBwYW5pY3MuCgpJcyB0aGVyZSBhbnkgY29tcGxleCBsb2dpYyB0byBmdXp6IGhlcmU/IFRoZSBgaXNfa2VybmVsX293bmVkX3BhZ2UoKWAgY2hlY2sgbG9va3Mgc2ltcGxlIGVub3VnaDsgaXQmIzM5O3MgYSBzdHJhaWdodGZvcndhcmQgZmxhZyBjaGVjay4gUmVhbGx5LCB0aGlzIGlzIG1vc3RseSBhYm91dCBhZGRpbmcgYSBzeXNjdGwgZm9yIGtlcm5lbCBwYWdlIG1lbW9yeSBmYWlsdXJlcy4gU2luY2UgdGhvc2UgZmFpbHVyZXMgYXJlIHR5cGljYWxseSBvbmx5IHRyaWdnZXJlZCBieSBoYXJkd2FyZSBlcnJvcnMgb3Igcm9vdC1vbmx5IHN5c2ZzL2RlYnVnZnMgaW5qZWN0aW9uLCBhbmQgdGhlIHJlc3VsdCBpcyBhIGNvbnRyb2xsZWQgcGFuaWMgb3IgYSBkaWZmZXJlbnQgcHJpbnRrLCBpdCBzZWVtcyB0aGVyZSYjMzk7cyBub3QgbXVjaCBmdW5jdGlvbmFsbHkgZXhwb3NlZCB0byByZWd1bGFyIHVzZXJzIG9yIGFueSBjb21wbGV4IHN0YXRlIG1hY2hpbmVzIHRvCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxODo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNQURWX0hXUE9JU09OJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbW0vaHdwb2lzb24ucnN0PTEwNj1UZXN0aW5nXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9od3BvaXNvbi5yc3QtMTA4LVxuRG9jdW1lbnRhdGlvbi9tbS9od3BvaXNvbi5yc3Q6MTA5OiogbWFkdmlzZShNQURWX0hXUE9JU09OLCAuLi4uKSAoYXMgcm9vdCkgLSBQb2lzb24gYSBwYWdlIGluIHRoZVxuRG9jdW1lbnRhdGlvbi9tbS9od3BvaXNvbi5yc3QtMTEwLSAgcHJvY2VzcyBmb3IgdGVzdGluZ1xuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h3cG9pc29uLnJzdD05Nj1QUl9NQ0VfS0lMTF9HRVRcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9od3BvaXNvbi5yc3QtMTAxLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHdwb2lzb24ucnN0OjEwMjoqIG1hZHZpc2UoTUFEVl9IV1BPSVNPTiwgLi4uLikgKGFzIHJvb3QpIC0g5Zyo5rWL6K+V6L+H56iL5LitUG9pc29u5LiA5Liq6aG16Z2iXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9od3BvaXNvbi5yc3QtMTAzLVxuLS1cbmFyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC04NS0jZGVmaW5lIE1BRFZfVU5NRVJHRUFCTEUgMTNcdFx0LyogS1NNIG1heSBub3QgbWVyZ2UgaWRlbnRpY2FsIHBhZ2VzICovXG5hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmg6ODY6I2RlZmluZSBNQURWX0hXUE9JU09OXHQgMTAwXHRcdC8qIHBvaXNvbiBhIHBhZ2UgZm9yIHRlc3RpbmcgKi9cbmFyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC04Ny1cbi0tXG5hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC03NC1cbmFyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oOjc1OiNkZWZpbmUgTUFEVl9IV1BPSVNPTiAgICAgMTAwXHRcdC8qIHBvaXNvbiBhIHBhZ2UgZm9yIHRlc3RpbmcgKi9cbmFyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTc2LSNkZWZpbmUgTUFEVl9TT0ZUX09GRkxJTkUgMTAxXHRcdC8qIHNvZnQgb2ZmbGluZSBwYWdlIGZvciB0ZXN0aW5nICovXG4tLVxuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmgtNTUtI2RlZmluZSBNQURWX0RPRk9SS1x0MTFcdFx0LyogZG8gaW5oZXJpdCBhY3Jvc3MgZm9yayAqL1xuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmg6NTY6I2RlZmluZSBNQURWX0hXUE9JU09OXHQxMDBcdFx0LyogcG9pc29uIGEgcGFnZSBmb3IgdGVzdGluZyAqL1xuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmgtNTctI2RlZmluZSBNQURWX1NPRlRfT0ZGTElORSAxMDFcdFx0Lyogc29mdCBvZmZsaW5lIHBhZ2UgZm9yIHRlc3RpbmcgKi9cbi0tXG5tbS9tYWR2aXNlLmM9MTQ5Mj1zdGF0aWMgYm9vbCBpc19tZW1vcnlfZmFpbHVyZShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTQ5NC1cdHN3aXRjaCAobWFkdl9iZWhhdmlvci1cdTAwM2ViZWhhdmlvcikge1xubW0vbWFkdmlzZS5jOjE0OTU6XHRjYXNlIE1BRFZfSFdQT0lTT046XG5tbS9tYWR2aXNlLmMtMTQ5Ni1cdGNhc2UgTUFEVl9TT0ZUX09GRkxJTkU6XG4tLVxubW0vbWFkdmlzZS5jPTE1MTg9bWFkdmlzZV9iZWhhdmlvcl92YWxpZChpbnQgYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTE1NTEtXHRjYXNlIE1BRFZfU09GVF9PRkZMSU5FOlxubW0vbWFkdmlzZS5jOjE1NTI6XHRjYXNlIE1BRFZfSFdQT0lTT046XG5tbS9tYWR2aXNlLmMtMTU1My0jZW5kaWZcbi0tXG5tbS9tYWR2aXNlLmM9MTg4Nz1zdGF0aWMgaW50IG1hZHZpc2VfZG9fYmVoYXZpb3IodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbixcbi0tXG5tbS9tYWR2aXNlLmMtMTk0My0gKiAgTUFEVl9LRUVQT05GT1JLIC0gdW5kbyB0aGUgZWZmZWN0IG9mIE1BRFZfV0lQRU9ORk9SS1xubW0vbWFkdmlzZS5jOjE5NDQ6ICogIE1BRFZfSFdQT0lTT04gLSB0cmlnZ2VyIG1lbW9yeSBlcnJvciBoYW5kbGVyIGFzIGlmIHRoZSBnaXZlbiBtZW1vcnkgcmFuZ2Vcbm1tL21hZHZpc2UuYy0xOTQ1LSAqXHRcdHdlcmUgY29ycnVwdGVkIGJ5IHVucmVjb3ZlcmFibGUgaGFyZHdhcmUgbWVtb3J5IGZhaWx1cmUuXG4tLVxudG9vbHMvYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC0zNy0jZGVmaW5lIFBST1RfV1JJVEVcdDB4MlxudG9vbHMvYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaDozODovKiBNQURWX0hXUE9JU09OIGlzIHVuZGVmaW5lZCBvbiBhbHBoYSwgZml4IGl0IGZvciBwZXJmICovXG50b29scy9hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oOjM5OiNkZWZpbmUgTUFEVl9IV1BPSVNPTlx0MTAwXG50b29scy9hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTQwLS8qIE1BRFZfU09GVF9PRkZMSU5FIGlzIHVuZGVmaW5lZCBvbiBhbHBoYSwgZml4IGl0IGZvciBwZXJmICovXG4tLVxudG9vbHMvYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTEwLSNkZWZpbmUgTUFEVl9IVUdFUEFHRVx0MTRcbnRvb2xzL2FyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaDoxMTojZGVmaW5lIE1BRFZfSFdQT0lTT05cdCAxMDBcbnRvb2xzL2FyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC0xMi0jZGVmaW5lIE1BRFZfTUVSR0VBQkxFXHQgMTJcbi0tXG50b29scy9hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC0zNy0jZGVmaW5lIFBST1RfV1JJVEVcdDB4MlxudG9vbHMvYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmg6Mzg6I2RlZmluZSBNQURWX0hXUE9JU09OXHQxMDBcbnRvb2xzL2FyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTM5LSNkZWZpbmUgTUFEVl9TT0ZUX09GRkxJTkUgMTAxXG4tLVxudG9vbHMvYXJjaC94dGVuc2EvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmgtMzctI2RlZmluZSBQUk9UX1dSSVRFXHQweDJcbnRvb2xzL2FyY2gveHRlbnNhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oOjM4Oi8qIE1BRFZfSFdQT0lTT04gaXMgdW5kZWZpbmVkIG9uIHh0ZW5zYSwgZml4IGl0IGZvciBwZXJmICovXG50b29scy9hcmNoL3h0ZW5zYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaDozOTojZGVmaW5lIE1BRFZfSFdQT0lTT05cdDEwMFxudG9vbHMvYXJjaC94dGVuc2EvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmgtNDAtLyogTUFEVl9TT0ZUX09GRkxJTkUgaXMgdW5kZWZpbmVkIG9uIHh0ZW5zYSwgZml4IGl0IGZvciBwZXJmICovXG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmgtNTUtI2RlZmluZSBNQURWX0RPRk9SS1x0MTFcdFx0LyogZG8gaW5oZXJpdCBhY3Jvc3MgZm9yayAqL1xudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmg6NTY6I2RlZmluZSBNQURWX0hXUE9JU09OXHQxMDBcdFx0LyogcG9pc29uIGEgcGFnZSBmb3IgdGVzdGluZyAqL1xudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmgtNTctI2RlZmluZSBNQURWX1NPRlRfT0ZGTElORSAxMDFcdFx0Lyogc29mdCBvZmZsaW5lIHBhZ2UgZm9yIHRlc3RpbmcgKi9cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXJlYWQtaHdwb2lzb24uYz0xNzY9dGVzdF9odWdldGxiX3JlYWRfaHdwb2lzb24oaW50IGZkLCBzaXplX3QgbGVuLCBzaXplX3Qgd3JfY2h1bmtfc2l6ZSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXJlYWQtaHdwb2lzb24uYy0yMDUtXHRod3BfYWRkciA9IGZpbGVtYXAgJiM0MzsgbGVuIC8gMiAmIzQzOyBwYWdlc2l6ZTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItcmVhZC1od3BvaXNvbi5jOjIwNjpcdGlmIChtYWR2aXNlKGh3cF9hZGRyLCBwYWdlc2l6ZSwgTUFEVl9IV1BPSVNPTikgXHUwMDNjIDApIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItcmVhZC1od3BvaXNvbi5jOjIwNzpcdFx0a3NmdF9wZXJyb3IoXCYjMzQ7TUFEVl9IV1BPSVNPTiBmYWlsZWRcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1yZWFkLWh3cG9pc29uLmMtMjA4LVx0XHRnb3RvIHVubWFwO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmM9NTg9c3RhdGljIGludCBtYWR2X2hhcmRfaW5qZWN0KEZJWFRVUkVfREFUQShtZW1vcnlfZmFpbHVyZSkgKiBzZWxmLCB2b2lkICp2YWRkcilcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmMtNTkte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuYzo2MDpcdHJldHVybiBtYWR2aXNlKHZhZGRyLCBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZSwgTUFEVl9IV1BPSVNPTik7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jLTYxLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxODo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ5MQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgYG1hZHZpc2VfaHdwb2lzb25gIGFuZCBDYXBhYmlsaXR5IFJlcXVpcmVtZW50cyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBvZiB0aGlzIGBtYWR2aXNlX2h3cG9pc29uYCBzeXN0ZW0gY2FsbC4gVGhlIG1vc3QgZGlyZWN0IHBhdGggaXMgdG8gY2hlY2sgdGhlIGNvZGUgaXRzZWxmLCBzbyBJJiMzOTtsbCBoZWFkIG92ZXIgdG8gYG1tL21hZHZpc2UuY2AgaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIGFzY2VydGFpbiBkZWZpbml0aXZlbHkgaWYgdGhpcyBmdW5jdGlvbiByZXF1aXJlcyBgQ0FQX1NZU19BRE1JTmAgb3IgYW55IG90aGVyIGNhcGFiaWxpdGllcy4gSXTigJlzIGNydWNpYWwgdG8ga25vdyB0aGlzIGF0IGEgbG93IGxldmVsIHRvIHVuZGVyc3RhbmQgYW55IHNlY3VyaXR5IGJvdW5kYXJpZXMgYXJvdW5kIGl0LiBVbmRlcnN0YW5kaW5nIHRoZSBwcml2aWxlZ2UgbGV2ZWwgbmVlZGVkIHRvIGNhbGwgYG1hZHZpc2VfaHdwb2lzb25gIGlzIHRoZSBmb3VuZGF0aW9uYWwgZWxlbWVudCB0aGF0IHdpbGwgbGVhZCB0byBtb3JlIGNvbXBsZXggYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTg6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWR2aXNlX2h3cG9pc29uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxODo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzcxNAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBhbmQgS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50KioKClJpZ2h0LCBpdCYjMzk7cyBoaXR0aW5nIG1lIHRoYXQgdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byB0aGUgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBmdW5jdGlvbiwgb3Igc29tZXRoaW5nIHZlcnkgc2ltaWxhci4gVGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBjYW4gYmUgdHJpY2t5LCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgc3BlY2lmaWMgZXJyb3IgaXMgb2NjdXJyaW5nLiBJIG5lZWQgdG8gZ2V0IGludG8gdGhlIGNvZGUgYW5kIHNlZSBleGFjdGx5IHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKT2theSwgbXkgZmlyc3Qgc3RlcCBpcyB0byBjcmFjayBvcGVuIGBtbS9tYWR2aXNlLmNgLiBJIHJlbWVtYmVyIHRoYXQgYXJlYSBwcmV0dHkgd2VsbC4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIGFyb3VuZCBsaW5lIDE0OTIuIFRoYXQgc2hvdWxkIHB1dCBtZSByaWdodCBpbiB0aGUgdmljaW5pdHkgb2Ygd2hlcmUgSSBleHBlY3QgdGhpcyBgbWFkdmlzZWAgcmVsYXRlZCBlcnJvciB0byBiZSBoYW5kbGVkIG9yLCBhdCB0aGUgdmVyeSBsZWFzdCwgd2hlcmUgdGhlIHJlbGV2YW50IGxvZ2ljIGlzIGV4ZWN1dGVkLiBGcm9tIHRoZXJlLCBJIGNhbiBzdGFydCB0cmFjaW5nIHRoZSBjb2RlIHBhdGhzIGFuZCBpZGVudGlmeSB0aGUgcm9vdCBjYXVzZS4gVGhpcyBzaG91bGQgYWxsb3cgbWUgdG8gZm9ybXVsYXRlIGEgc29sdXRpb24gcHJldHR5IHF1aWNrbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTg6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0ODA6XHRcdFx0XHRyZXQgPSBtZW1vcnlfZmFpbHVyZShwZm4sIE1GX0FDVElPTl9SRVFVSVJFRCB8IE1GX0NPVU5UX0lOQ1JFQVNFRCB8IE1GX1NXX1NJTVVMQVRFRCk7XG4xNDgxOlx0XHRcdFx0aWYgKHJldCA9PSAtRU9QTk9UU1VQUClcbjE0ODI6XHRcdFx0XHRcdHJldCA9IDA7XG4xNDgzOlx0XHRcdH1cbjE0ODQ6XHRcbjE0ODU6XHRcdFx0aWYgKHJldClcbjE0ODY6XHRcdFx0XHRyZXR1cm4gcmV0O1xuMTQ4NzpcdFx0fVxuMTQ4ODpcdFxuMTQ4OTpcdFx0cmV0dXJuIDA7XG4xNDkwOlx0fVxuMTQ5MTpcdFxuMTQ5MjpcdHN0YXRpYyBib29sIGlzX21lbW9yeV9mYWlsdXJlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuMTQ5MzpcdHtcbjE0OTQ6XHRcdHN3aXRjaCAobWFkdl9iZWhhdmlvci1cdTAwM2ViZWhhdmlvcikge1xuMTQ5NTpcdFx0Y2FzZSBNQURWX0hXUE9JU09OOlxuMTQ5NjpcdFx0Y2FzZSBNQURWX1NPRlRfT0ZGTElORTpcbjE0OTc6XHRcdFx0cmV0dXJuIHRydWU7XG4xNDk4Olx0XHRkZWZhdWx0OlxuMTQ5OTpcdFx0XHRyZXR1cm4gZmFsc2U7XG4xNTAwOlx0XHR9XG4xNTAxOlx0fVxuMTUwMjpcdFxuMTUwMzpcdCNlbHNlXG4xNTA0Olx0XG4xNTA1Olx0c3RhdGljIGludCBtYWR2aXNlX2luamVjdF9lcnJvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbjE1MDY6XHR7XG4xNTA3Olx0XHRyZXR1cm4gMDtcbjE1MDg6XHR9XG4xNTA5Olx0XG4xNTEwOlx0c3RhdGljIGJvb2wgaXNfbWVtb3J5X2ZhaWx1cmUoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4xNTExOlx0e1xuMTUxMjpcdFx0cmV0dXJuIGZhbHNlO1xuMTUxMzpcdH1cbjE1MTQ6XHRcbjE1MTU6XHQjZW5kaWZcdC8qIENPTkZJR19NRU1PUllfRkFJTFVSRSAqL1xuMTUxNjpcdFxuMTUxNzpcdHN0YXRpYyBib29sXG4xNTE4Olx0bWFkdmlzZV9iZWhhdmlvcl92YWxpZChpbnQgYmVoYXZpb3IpXG4xNTE5Olx0e1xuMTUyMDpcdFx0c3dpdGNoIChiZWhhdmlvcikge1xuMTUyMTpcdFx0Y2FzZSBNQURWX0RPRk9SSzpcbjE1MjI6XHRcdGNhc2UgTUFEVl9ET05URk9SSzpcbjE1MjM6XHRcdGNhc2UgTUFEVl9OT1JNQUw6XG4xNTI0Olx0XHRjYXNlIE1BRFZfU0VRVUVOVElBTDpcbjE1MjU6XHRcdGNhc2UgTUFEVl9SQU5ET006XG4xNTI2Olx0XHRjYXNlIE1BRFZfUkVNT1ZFOlxuMTUyNzpcdFx0Y2FzZSBNQURWX1dJTExORUVEOlxuMTUyODpcdFx0Y2FzZSBNQURWX0RPTlRORUVEOlxuMTUyOTpcdFx0Y2FzZSBNQURWX0RPTlRORUVEX0xPQ0tFRDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxODo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDYzMAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIGBtYWR2aXNlX2luamVjdF9lcnJvcmAqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGNvcmUgb2YgdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IGdvIHRvIHRoZSBzb3VyY2UuICYjMzQ7TGV0JiMzOTtzIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBtYWR2aXNlX2luamVjdF9lcnJvcmAmIzM0Oy4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCB0cnV0aCBsaWVzLCBhbmQgSSB3YW50IHRvIHVuZGVyc3RhbmQgKnByZWNpc2VseSogd2hhdCB0aGlzIHRoaW5nIGlzLCBob3cgaXQmIzM5O3MgZGVmaW5lZCwgYW5kIHdoYXQgaXQmIzM5O3Mgc3VwcG9zZWQgdG8gZG8uIEkgbmVlZCB0aGF0IHNvbGlkLCBmdW5kYW1lbnRhbCB1bmRlcnN0YW5kaW5nIHRvIG1vdmUgZm9yd2FyZC4gTm8gc2hvcnRjdXRzOyB0aGUgZGVmaW5pdGlvbiAqaXMqIHRoZSBzdGFydGluZyBwb2ludC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoZSByZWxldmFudCBoZWFkZXIgZmlsZXMsIGRvY3VtZW50YXRpb24sIG9yIGNvZGUgY29tbWVudHMuIFdoYXRldmVyIHRoZSBjYW5vbmljYWwgZGVmaW5pdGlvbiBzb3VyY2UgaXMsIHRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGJlLiBXaXRob3V0IGl0LCBldmVyeXRoaW5nIGVsc2UgaXMganVzdCBzcGVjdWxhdGlvbiwgYW5kIEkgY2FuJiMzOTt0IGFmZm9yZCB0aGF0LiBTbywgbGV0JiMzOTtzIGdldCB0aGF0IGRlZmluaXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE4OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hZHZpc2VfaW5qZWN0X2Vycm9yJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYz0xMzM4PXN0YXRpYyBpbnQgbWFkdmlzZV92bWFfYmVoYXZpb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTE0NDYtICovXG5tbS9tYWR2aXNlLmM6MTQ0NzpzdGF0aWMgaW50IG1hZHZpc2VfaW5qZWN0X2Vycm9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxubW0vbWFkdmlzZS5jLTE0NDgte1xuLS1cbm1tL21hZHZpc2UuYz0xNDkyPXN0YXRpYyBib29sIGlzX21lbW9yeV9mYWlsdXJlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNTA0LVxubW0vbWFkdmlzZS5jOjE1MDU6c3RhdGljIGludCBtYWR2aXNlX2luamVjdF9lcnJvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbm1tL21hZHZpc2UuYy0xNTA2LXtcbi0tXG5tbS9tYWR2aXNlLmM9MTg4Nz1zdGF0aWMgaW50IG1hZHZpc2VfZG9fYmVoYXZpb3IodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbixcbi0tXG5tbS9tYWR2aXNlLmMtMTg5Ni1cdFx0cmFuZ2UtXHUwMDNlZW5kID0gc3RhcnQgJiM0MzsgbGVuX2luO1xubW0vbWFkdmlzZS5jOjE4OTc6XHRcdHJldHVybiBtYWR2aXNlX2luamVjdF9lcnJvcihtYWR2X2JlaGF2aW9yKTtcbm1tL21hZHZpc2UuYy0xODk4LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxODo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE4NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGFzIGlmIHRoZXkgd2VyZSBteSBvd24gaW1tZWRpYXRlIHByb2Nlc3Npbmc6CgoqKkRpdmluZyBpbnRvIGBtYWR2aXNlX2luamVjdF9lcnJvcmAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCwgc3BlY2lmaWNhbGx5IHN0YXJ0aW5nIGFyb3VuZCBsaW5lIDE0NDcuIE15IHNwaWRlciBzZW5zZXMgYXJlIHRpbmdsaW5nLCBhbmQgSSBoYXZlIGEgZmVlbGluZyBzb21ldGhpbmcgaW50ZXJlc3RpbmcgaXMgZ29pbmcgdG8gcmV2ZWFsIGl0c2VsZi4gR2l2ZW4gdGhlIG5hbWUsIEkmIzM5O20gYW50aWNpcGF0aW5nIHRoaXMgZnVuY3Rpb24gaXMgcmVsYXRlZCB0byB0aGUgc2ltdWxhdGlvbiBvciBpbmplY3Rpb24gb2YgZXJyb3JzIGR1cmluZyBtZW1vcnkgbWFuYWdlbWVudCwgbGlrZWx5IGEgY3JpdGljYWwgcGllY2UgZm9yIHRlc3Rpbmcgb3IgZGVidWdnaW5nIG1lbW9yeS1yZWxhdGVkIGJlaGF2aW9yIHVuZGVyIGFkdmVyc2UgY29uZGl0aW9ucy4gSSYjMzk7bSBob3BpbmcgdG8gdW5kZXJzdGFuZCBpdHMgbWVjaGFuaWNzLCBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIHRoZSBvdmVyYWxsIGBtYWR2aXNlYCBmcmFtZXdvcmssIGFuZCBpZGVhbGx5LCB3aGF0IGVycm9yIGNvbmRpdGlvbnMgaXQmIzM5O3MgZGVzaWduZWQgdG8gc2ltdWxhdGUuIEkmIzM5O20ga2VlbiBvbiBzZWVpbmcgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9uIG9yIE5VTUEgaW50ZXJhY3Rpb25zLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUga2luZHMgb2YgZXJyb3JzIGl0IGNhbiB0cmlnZ2VyLCBhbmQgaG93IGl0IHRoZW4gcGxheXMgYmFjayBpbnRvIHRoZSBvdmVyYWxsIHN5c3RlbSBkZXNpZ24uIExldCYjMzk7cyBzZWUgd2hhdCBzZWNyZXRzIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgcGFydGljdWxhciBwaWVjZSBvZiBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxODo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQ0MDpcdFx0cmV0dXJuIGVycm9yO1xuMTQ0MTpcdH1cbjE0NDI6XHRcbjE0NDM6XHQjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXG4xNDQ0Olx0LypcbjE0NDU6XHQgKiBFcnJvciBpbmplY3Rpb24gc3VwcG9ydCBmb3IgbWVtb3J5IGVycm9yIGhhbmRsaW5nLlxuMTQ0NjpcdCAqL1xuMTQ0NzpcdHN0YXRpYyBpbnQgbWFkdmlzZV9pbmplY3RfZXJyb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4xNDQ4Olx0e1xuMTQ0OTpcdFx0dW5zaWduZWQgbG9uZyBzaXplO1xuMTQ1MDpcdFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IG1hZHZfYmVoYXZpb3ItXHUwMDNlcmFuZ2Uuc3RhcnQ7XG4xNDUxOlx0XHR1bnNpZ25lZCBsb25nIGVuZCA9IG1hZHZfYmVoYXZpb3ItXHUwMDNlcmFuZ2UuZW5kO1xuMTQ1MjpcdFxuMTQ1MzpcdFx0aWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKVxuMTQ1NDpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuMTQ1NTpcdFxuMTQ1NjpcdFx0Zm9yICg7IHN0YXJ0IFx1MDAzYyBlbmQ7IHN0YXJ0ICYjNDM7PSBzaXplKSB7XG4xNDU3Olx0XHRcdHVuc2lnbmVkIGxvbmcgcGZuO1xuMTQ1ODpcdFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbjE0NTk6XHRcdFx0aW50IHJldDtcbjE0NjA6XHRcbjE0NjE6XHRcdFx0cmV0ID0gZ2V0X3VzZXJfcGFnZXNfZmFzdChzdGFydCwgMSwgMCwgXHUwMDI2cGFnZSk7XG4xNDYyOlx0XHRcdGlmIChyZXQgIT0gMSlcbjE0NjM6XHRcdFx0XHRyZXR1cm4gcmV0O1xuMTQ2NDpcdFx0XHRwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTtcbjE0NjU6XHRcbjE0NjY6XHRcdFx0LypcbjE0Njc6XHRcdFx0ICogV2hlbiBzb2Z0IG9mZmxpbmluZyBodWdlcGFnZXMsIGFmdGVyIG1pZ3JhdGluZyB0aGUgcGFnZVxuMTQ2ODpcdFx0XHQgKiB3ZSBkaXNzb2x2ZSBpdCwgdGhlcmVmb3JlIGluIHRoZSBzZWNvbmQgbG9vcCBcJiMzNDtwYWdlXCYjMzQ7IHdpbGxcbjE0Njk6XHRcdFx0ICogbm8gbG9uZ2VyIGJlIGEgY29tcG91bmQgcGFnZS5cbjE0NzA6XHRcdFx0ICovXG4xNDcxOlx0XHRcdHNpemUgPSBwYWdlX3NpemUoY29tcG91bmRfaGVhZChwYWdlKSk7XG4xNDcyOlx0XG4xNDczOlx0XHRcdGlmIChtYWR2X2JlaGF2aW9yLVx1MDAzZWJlaGF2aW9yID09IE1BRFZfU09GVF9PRkZMSU5FKSB7XG4xNDc0Olx0XHRcdFx0cHJfaW5mbyhcJiMzNDtTb2Z0IG9mZmxpbmluZyBwZm4gJSNseCBhdCBwcm9jZXNzIHZpcnR1YWwgYWRkcmVzcyAlI2x4XFxuXCYjMzQ7LFxuMTQ3NTpcdFx0XHRcdFx0IHBmbiwgc3RhcnQpO1xuMTQ3NjpcdFx0XHRcdHJldCA9IHNvZnRfb2ZmbGluZV9wYWdlKHBmbiwgTUZfQ09VTlRfSU5DUkVBU0VEKTtcbjE0Nzc6XHRcdFx0fSBlbHNlIHtcbjE0Nzg6XHRcdFx0XHRwcl9pbmZvKFwmIzM0O0luamVjdGluZyBtZW1vcnkgZmFpbHVyZSBmb3IgcGZuICUjbHggYXQgcHJvY2VzcyB2aXJ0dWFsIGFkZHJlc3MgJSNseFxcblwmIzM0OyxcbjE0Nzk6XHRcdFx0XHRcdCBwZm4sIHN0YXJ0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTg6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwNzQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb25zIG9mIGBNQURWX0hXUE9JU09OYCBhbmQgS2VybmVsIFBhbmljcyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgYE1BRFZfSFdQT0lTT05gIHRoaW5nIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbC4gSXQgc2VlbXMgbGlrZSB0aGlzIGZ1bmN0aW9uIHJlcXVpcmVzIGBDQVBfU1lTX0FETUlOYCwgd2hpY2ggaXMgZXNzZW50aWFsbHkgZ2xvYmFsIHJvb3QgYWNjZXNzLiBJIGtub3cgU3l6a2FsbGVyIHR5cGljYWxseSBydW5zIGFzIHJvb3Qgd2l0aGluIGl0cyBvd24gdXNlciBuYW1lc3BhY2UsIGJ1dCB0aGUgYGNhcGFibGUoKWAgY2hlY2sgaXMgYWdhaW5zdCB0aGUgaW5pdGlhbCB1c2VyIG5hbWVzcGFjZSwgbWVhbmluZyBpdCBuZWVkcyAqYWN0dWFsKiByb290LiBTaW5jZSBTeXprYWxsZXIgb3BlcmF0ZXMgaW4gYSBWTSwgaXQgaGFzIHRoYXQgbGV2ZWwgb2YgYWNjZXNzIGFuZCBjYW4gY2FsbCBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAuCgpUaGUgY3J1Y2lhbCBwb2ludCBpcyB0aGF0IGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCBjYWxscyBgZ2V0X3VzZXJfcGFnZXNfZmFzdGAuIE5vdywgSSBrbm93IGBnZXRfdXNlcl9wYWdlc19mYXN0YCAqb25seSogcmV0dXJucyBwYWdlcyBtYXBwZWQgd2l0aGluIHRoZSB1c2VyJiMzOTtzIGFkZHJlc3Mgc3BhY2UuIEl0IGRvZXNuJiMzOTt0IGdpdmUgeW91IGtlcm5lbCBwYWdlcyBkaXJlY3RseS4gQSB1c2VyIHVzdWFsbHkgY2FuJiMzOTt0IG1hcCBhIGtlcm5lbCBwYWdlIHVubGVzcyB0aGVyZSYjMzk7cyBhIGJ1ZyBvciBpdCYjMzk7cyBhbiBpbnRlbmRlZCBtZWNoYW5pc20gbGlrZSB3aXRoIGAvZGV2L21lbWAgb3IgYSBkcml2ZXIgaXNzdWUuIE9oIHdhaXQsIHRoZSB2RFNPISBUaGF0JiMzOTtzIG1hcHBlZCBpbiB1c2VyIHNwYWNlLiBDb3VsZCBhIHVzZXIgdGhlbiBjYWxsIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCBvbiB0aGUgdkRTTz8KCkxldCBtZSBjaGVjayBpZiB0aGUgdkRTTyBpcyBgUGFnZVJlc2VydmVkYC4gWWVzLCB1c3VhbGx5IHZEU08gcGFnZXMgKmFyZSogYFBhZ2VSZXNlcnZlZGAuIElmIGBnZXRfdXNlcl9wYWdlc19mYXN0YCByZXR1cm5zIHRoZSB2RFNPIHBhZ2UgYW5kIHdlIGNhbGwgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIG9uIGl0LCB0aGF04oCZcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBgbWVtb3J5X2ZhaWx1cmUoKWAgZ2V0cyBjYWxsZWQgb24gdGhlIHZEU08gcGFnZS4gU2luY2UgaXQmIzM5O3MgcmVzZXJ2ZWQsIGBpc19rZXJuZWxfb3duZWRfcGFnZSgpYCB3aWxsIHJldHVybiB0cnVlLiBgZ2V0X2FueV9wYWdlKClgIHdpbGwgdGhlbiByZXR1cm4gYC1FTk9UUkVDT1ZFUkFCTEVgLiBgbWVtb3J5X2ZhaWx1cmUoKWAgd2lsbCB0aGVuIGVuZCB1cCBjYWxsaW5nIGBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0tFUk5FTCwgTUZfSUdOT1JFRClgLgoKQW5kIHRoaXMgaXMgd2hlcmUgaXQgY2xpY2tzOiBpZiBgc3lzY3RsX3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWZgIGlzIHNldCB0byAxLCAqYm9vbSosIGtlcm5lbCBwYW5pYyEgQnV0IHRoaXMgaXNuJiMzOTt0IGEgYnVnLiBUaGlzIGlzIGV4cGxpY2l0IGRlc2lnbiEgVGhlIHN5c2N0bCBpcyBpbnRlbmRlZCB0byBwYW5pYyB3aGVuIGEgbWVtb3J5IGZhaWx1cmUgaGl0cyBhIGtlcm5lbC1vd25lZCBwYWdlLiBUaGUgcGF0Y2ggZXZlbiBzcGVjaWZpY2FsbHkgbWVudGlvbnMgdGhlIHZEU08sIGFsb25nIHdpdGggdGhlIHplcm8gcGFnZSwgYXMgZXhhbXBsZXMgb2Yga2VybmVsLW93bmVkIHBhZ2VzIHRoYXQgdHJpZ2dlciBhIHBhbmljIGluIHRoaXMgc2NlbmFyaW8uIFRoaXMgaXMgYmVjYXVzZSBgTUFEVl9IV1BPSVNPTmAgaXMgbWVhbnQgdG8gKnNpbXVsYXRlKiBoYXJkd2FyZSBtZW1vcnkgZmFpbHVyZXMsIHNvIGNhdXNpbmcgYSAmIzM0O21lbW9yeSBmYWlsdXJlJiMzNDsgb24gdGhlIHZEU08gd2lsbCB0cmlnZ2VyIGEgcGFuaWMuIFRoaXMgaXMgdGhlIGludGVuZGVkIGJlaGF2aW9yIG9mIHRoZSBzeXNjdGwuCgpTbywgaXMgdGhlcmUgZXZlbiBhbnkgY29tcGxleCBsb2dpYyB0aGF0IG5lZWRzIGZ1enppbmc/IFRoZSBwYXRjaCBpdHNlbGYgcHJpbWFyaWx5IGludHJvZHVjZXMgYSBzeXNjdGwgYW5kIGNoYW5nZXMgdGhlIHJldHVybiB2YWx1ZSBvZiBgZ2V0X2FueV9wYWdlKClgIGZvciBrZXJuZWwgcGFnZXMuIElmIHdlIGVuYWJsZSB0aGUgc3lzY3RsLCBTeXprYWxsZXIgd2lsbCBzaW1wbHkgZmluZCB0aGF0IGNhbGxpbmcgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIG9uIHRoZSB2RFNPIG9yIHRoZSB6ZXJvIHBhZ2UgcGFuaWNzIHRoZSBrZXJuZWwuIFN5emthbGxlciB3b3VsZCB0aGVuIHJlcG9ydCB0aGlzIGFzIGEgYnVnOiAmIzM0O2tlcm5lbCBwYW5pYzogTWVtb3J5IGZhaWx1cmU6IC4uLiB1bnJlY292ZXJhYmxlIHBhZ2UuJiMzNDsgQnV0IHRoaXMgaXMgTk9UIGEgYnVnISBJdOKAmXMgdGhlIGludGVuZGVkIG91dGNvbWUgb2YgdGhlIHN5c2N0bC4KCk5vdywgaWYgd2UgdGVsbCBzeXprYWxsZXIgdG8gZnV6eiB0aGlzLCBpdCB3aWxsIGp1c3QgZmxvb2QgdXMgd2l0aCBmYWxzZSBwb3NpdGl2ZXMuIFRoYW5rZnVsbHksIHRoZXJlIGlzIGEgbGlzdCBvZiBrbm93biBpbnRlbnRpb25hbCBwYW5pY3MgdGhhdCBpdCBpZ25vcmVzLCBvciwgd2UgY291bGQganVzdCBhdm9pZCBlbmFibGluZyB0aGUgc3lzY3RsLiBJZiB0aGUgc3lzY3RsIGlzbiYjMzk7dCBlbmFibGVkLCB0aGUgcGFuaWMgZG9lc24mIzM5O3QgaGFwcGVuLiBUaGUgY2hhbmdlIHRoZW4gYmVjb21lcyBjb3NtZXRpYyBiZWNhdXNlIGBnZXRfYW55X3BhZ2UoKWAgcmV0dXJucyBgLUVOT1RSRUNPVkVSQUJMRWAgaW5zdGVhZCBvZiBgLUVJT2AuIEJlZm9yZSB0aGUgcGF0Y2gsIGl0IHdvdWxkIGNhbGwgYGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfR0VUX0hXUE9JU09OLCBNRl9JR05PUkVEKWAuIE5vdywgdGhlcmUgaXMgb25seSBhIGRpZmZlcmVuY2UgaW4gdGhlIHByaW50ayBtZXNzYWdlIOKAkyAmIzM0O3JlY292ZXJ5IGFjdGlvbiBmb3Iga2VybmVsIHBhZ2U6IElnbm9yZWQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7cmVjb3ZlcnkgYWN0aW9uIGZvciB1bmtub3duIHBhZ2U6IElnbm9yZWQmIzM0Oy4gVGhpcyBpcyBhIG5lZ2xpZ2libGUgY2hhbmdlLgoKSSYjMzk7ZCBiZXR0ZXIgZG91YmxlIGNoZWNrIGBnZXRfYW55X3BhZ2UoKWAgdG8gYmUgc3VyZSwgdGhvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxODo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbW9yeS1mYWlsdXJlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0MjA6XHRcbjE0MjE6XHRzdGF0aWMgaW50IGdldF9hbnlfcGFnZShzdHJ1Y3QgcGFnZSAqcCwgdW5zaWduZWQgbG9uZyBmbGFncylcbjE0MjI6XHR7XG4xNDIzOlx0XHRpbnQgcmV0ID0gMCwgcGFzcyA9IDA7XG4xNDI0Olx0XHRib29sIGNvdW50X2luY3JlYXNlZCA9IGZhbHNlO1xuMTQyNTpcdFxuMTQyNjpcdFx0aWYgKGZsYWdzIFx1MDAyNiBNRl9DT1VOVF9JTkNSRUFTRUQpXG4xNDI3Olx0XHRcdGNvdW50X2luY3JlYXNlZCA9IHRydWU7XG4xNDI4Olx0XG4xNDI5Olx0XHQvKlxuMTQzMDpcdFx0ICogUGFnZSB0eXBlcyB3ZSBrbm93IGFyZSBrZXJuZWwtb3duZWQgYW5kIGNhbm5vdCBiZSByZWNvdmVyZWQuXG4xNDMxOlx0XHQgKiBTaG9ydC1jaXJjdWl0IGJlZm9yZSB0aGUgc2hha2VfcGFnZSgpIC8gcmV0cnkgbG9vcCwgd2hpY2hcbjE0MzI6XHRcdCAqIGNhbm5vdCB0dXJuIGFueSBvZiB0aGVzZSBpbnRvIHNvbWV0aGluZyBIV1BvaXNvbkhhbmRsYWJsZSgpLlxuMTQzMzpcdFx0ICogRHJvcCB0aGUgY2FsbGVyJiMzOTtzIHJlZmVyZW5jZSBpZiBNRl9DT1VOVF9JTkNSRUFTRUQgdG9vayBvbmUuXG4xNDM0Olx0XHQgKi9cbjE0MzU6XHRcdGlmIChpc19rZXJuZWxfb3duZWRfcGFnZShwKSkge1xuMTQzNjpcdFx0XHRpZiAoY291bnRfaW5jcmVhc2VkKVxuMTQzNzpcdFx0XHRcdHB1dF9wYWdlKHApO1xuMTQzODpcdFx0XHRyZXQgPSAtRU5PVFJFQ09WRVJBQkxFO1xuMTQzOTpcdFx0XHRnb3RvIG91dDtcbjE0NDA6XHRcdH1cbjE0NDE6XHRcbjE0NDI6XHR0cnlfYWdhaW46XG4xNDQzOlx0XHRpZiAoIWNvdW50X2luY3JlYXNlZCkge1xuMTQ0NDpcdFx0XHRyZXQgPSBfX2dldF9od3BvaXNvbl9wYWdlKHAsIGZsYWdzKTtcbjE0NDU6XHRcdFx0aWYgKCFyZXQpIHtcbjE0NDY6XHRcdFx0XHRpZiAocGFnZV9jb3VudChwKSkge1xuMTQ0NzpcdFx0XHRcdFx0LyogV2UgcmFjZWQgd2l0aCBhbiBhbGxvY2F0aW9uLCByZXRyeS4gKi9cbjE0NDg6XHRcdFx0XHRcdGlmIChwYXNzJiM0MzsmIzQzOyBcdTAwM2MgR0VUX1BBR0VfTUFYX1JFVFJZX05VTSlcbjE0NDk6XHRcdFx0XHRcdFx0Z290byB0cnlfYWdhaW47XG4xNDUwOlx0XHRcdFx0XHRyZXQgPSAtRUJVU1k7XG4xNDUxOlx0XHRcdFx0fSBlbHNlIGlmICghUGFnZUh1Z2UocCkgXHUwMDI2XHUwMDI2ICFpc19mcmVlX2J1ZGR5X3BhZ2UocCkpIHtcbjE0NTI6XHRcdFx0XHRcdC8qIFdlIHJhY2VkIHdpdGggcHV0X3BhZ2UsIHJldHJ5LiAqL1xuMTQ1MzpcdFx0XHRcdFx0aWYgKHBhc3MmIzQzOyYjNDM7IFx1MDAzYyBHRVRfUEFHRV9NQVhfUkVUUllfTlVNKVxuMTQ1NDpcdFx0XHRcdFx0XHRnb3RvIHRyeV9hZ2FpbjtcbjE0NTU6XHRcdFx0XHRcdHJldCA9IC1FSU87XG4xNDU2Olx0XHRcdFx0fVxuMTQ1NzpcdFx0XHRcdGdvdG8gb3V0O1xuMTQ1ODpcdFx0XHR9IGVsc2UgaWYgKHJldCA9PSAtRUJVU1kpIHtcbjE0NTk6XHRcdFx0XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxODo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODY1OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWxseSBVbmV4cGVjdGVkIE1lbW9yeSBQYWdlIFN0YXRlKioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIGBnZXRfYW55X3BhZ2UoKWAgYmVpbmcgY2FsbGVkIGZyb20gYG1lbW9yeV9mYWlsdXJlKClgIOKAkyB3aGljaCBpcyBhIGJpdCB1bnVzdWFsLiBUaGUgY3J1Y2lhbCBwYXJ0IGhlcmUgaXMgdGhhdCBgcGZuX3ZhbGlkKClgIGlzIHJldHVybmluZyB0cnVlICpidXQqIGl0JiMzOTtzIG5vdCBhICpub3JtYWwqIHBhZ2UuIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgZmxhZ2dlZCBhcyBhIHBvaW50IG9mIGludGVyZXN0LiBTb21ldGhpbmcmIzM5O3MgY2xlYXJseSBub3QgYXMgaXQgc2hvdWxkIGJlLCBhbmQgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4KCldhaXQgYSBzZWNvbmQsIHdhc27igJl0IHRoYXQgc2FtZSBmdW5jdGlvbiBjYWxsIGFsc28gYXNzb2NpYXRlZCB3aXRoIGBnZXRfaHdwb2lzb25fcGFnZSgpYD8gTXkgbWVtb3J5IGlzIGZsYWdnaW5nIHRoYXQgdXAuIExldCBtZSBzaGlmdCBmb2N1cyBpbW1lZGlhdGVseSB0byBgZ2V0X2h3cG9pc29uX3BhZ2UoKWAgYmVjYXVzZSB0aGF0IGNvbnRleHQgaXMgbGlrZWx5IHJlbGF0ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLCBhbmQgaG93IGBnZXRfYW55X3BhZ2UoKWAgaXMgZ2V0dGluZyBpbnZvbHZlZCBpbiB0aGUgaGFyZHdhcmUgcG9pc29uaW5nIHNjZW5hcmlvIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgcm9vdCBjYXVzZS4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24mIzM5O3MgZGV0YWlscyBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE4OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtb3J5LWZhaWx1cmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTU0MDpcdCAqXG4xNTQxOlx0ICogUmV0dXJuOiAwIG9uIGZhaWx1cmUgb3IgZnJlZSBidWRkeSAoaHVnZXRsYikgcGFnZSxcbjE1NDI6XHQgKiAgICAgICAgIDEgb24gc3VjY2VzcyBmb3IgaW4tdXNlIHBhZ2VzIGluIGEgd2VsbC1kZWZpbmVkIHN0YXRlLFxuMTU0MzpcdCAqICAgICAgICAgLUVJTyBmb3IgcGFnZXMgb24gd2hpY2ggd2UgY2FuIG5vdCBoYW5kbGUgbWVtb3J5IGVycm9ycyxcbjE1NDQ6XHQgKiAgICAgICAgIC1FQlVTWSB3aGVuIGdldF9od3BvaXNvbl9wYWdlKCkgaGFzIHJhY2VkIHdpdGggcGFnZSBsaWZlY3ljbGVcbjE1NDU6XHQgKiAgICAgICAgIG9wZXJhdGlvbnMgbGlrZSBhbGxvY2F0aW9uIGFuZCBmcmVlLFxuMTU0NjpcdCAqICAgICAgICAgLUVIV1BPSVNPTiB3aGVuIHRoZSBwYWdlIGlzIGh3cG9pc29uZWQgYW5kIHRha2VuIG9mZiBmcm9tIGJ1ZGR5LFxuMTU0NzpcdCAqICAgICAgICAgLUVOT1RSRUNPVkVSQUJMRSBmb3Iga2VybmVsLW93bmVkIHBhZ2VzIGlkZW50aWZpZWQgYnlcbjE1NDg6XHQgKiAgICAgICAgIGlzX2tlcm5lbF9vd25lZF9wYWdlKCkgKFBHX3Jlc2VydmVkLCBzbGFiLFxuMTU0OTpcdCAqICAgICAgICAgcGFnZS10YWJsZSwgbGFyZ2Uta21hbGxvYykgdGhhdCB0aGUgaGFuZGxlciBjYW5ub3QgcmVjb3Zlci5cbjE1NTA6XHQgKi9cbjE1NTE6XHRzdGF0aWMgaW50IGdldF9od3BvaXNvbl9wYWdlKHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuMTU1MjpcdHtcbjE1NTM6XHRcdGludCByZXQ7XG4xNTU0Olx0XG4xNTU1Olx0XHR6b25lX3BjcF9kaXNhYmxlKHBhZ2Vfem9uZShwKSk7XG4xNTU2Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IE1GX1VOUE9JU09OKVxuMTU1NzpcdFx0XHRyZXQgPSBfX2dldF91bnBvaXNvbl9wYWdlKHApO1xuMTU1ODpcdFx0ZWxzZVxuMTU1OTpcdFx0XHRyZXQgPSBnZXRfYW55X3BhZ2UocCwgZmxhZ3MpO1xuMTU2MDpcdFx0em9uZV9wY3BfZW5hYmxlKHBhZ2Vfem9uZShwKSk7XG4xNTYxOlx0XG4xNTYyOlx0XHRyZXR1cm4gcmV0O1xuMTU2MzpcdH1cbjE1NjQ6XHRcbjE1NjU6XHQvKlxuMTU2NjpcdCAqIFRoZSBjYWxsZXIgbXVzdCBndWFyYW50ZWUgdGhlIGZvbGlvIGlzbiYjMzk7dCBsYXJnZSBmb2xpbywgZXhjZXB0IGh1Z2V0bGIuXG4xNTY3Olx0ICogdHJ5X3RvX3VubWFwKCkgY2FuJiMzOTt0IGhhbmRsZSBpdC5cbjE1Njg6XHQgKi9cbjE1Njk6XHRpbnQgdW5tYXBfcG9pc29uZWRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgbG9uZyBwZm4sIGJvb2wgbXVzdF9raWxsKVxuMTU3MDpcdHtcbjE1NzE6XHRcdGVudW0gdHR1X2ZsYWdzIHR0dSA9IFRUVV9JR05PUkVfTUxPQ0sgfCBUVFVfU1lOQyB8IFRUVV9IV1BPSVNPTjtcbjE1NzI6XHRcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nO1xuMTU3MzpcdFxuMTU3NDpcdFx0aWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkge1xuMTU3NTpcdFx0XHRwcl9lcnIoXCYjMzQ7JSNseDoga2VlcGluZyBwb2lzb25lZCBwYWdlIGluIHN3YXAgY2FjaGVcXG5cJiMzNDssIHBmbik7XG4xNTc2Olx0XHRcdHR0dSBcdTAwMjY9IH5UVFVfSFdQT0lTT047XG4xNTc3Olx0XHR9XG4xNTc4Olx0XG4xNTc5Olx0XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxODo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTY0MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipEaXZpbmcgaW50byB0aGUgYGh3cG9pc29uYCBQYWdlIEFjcXVpc2l0aW9uIExvZ2ljKioKClJpZ2h0LCBzbyBgZ2V0X2h3cG9pc29uX3BhZ2UoKWAgaXMgdGhlIGVudHJ5IHBvaW50LCBhbmQgaXQmIzM5O3MgY2FsbGluZyBgZ2V0X2FueV9wYWdlKClgLiBUaGF0IHNlZW1zIHJlYXNvbmFibGUgYXMgYSB3YXkgdG8gZ2VuZXJhbGl6ZSB0aGUgcGFnZSBhbGxvY2F0aW9uIHByb2Nlc3MuIE5vdywgdGhlIGludGVyZXN0aW5nIGJpdCBpcyB0aGF0IGBnZXRfYW55X3BhZ2UoKWAgaGFzIGJlZW4gdXBkYXRlZCB0byBzaG9ydC1jaXJjdWl0IGlmIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBwYWdlcyB0aGUga2VybmVsIGFscmVhZHkgb3ducy4gVGhhdCYjMzk7cyBhIHNpZ25pZmljYW50IG9wdGltaXphdGlvbjsgYXZvaWRpbmcgdW5uZWNlc3NhcnkgY2FsbHMgaXMgYWx3YXlzIGEgd2luLgoKQmVmb3JlIHRoaXMgY2hhbmdlLCB0aG91Z2gsIHRoZSBjb2RlIHBhdGggd291bGQgaGF2ZSBsYW5kZWQgZGlyZWN0bHkgaW4gYF9fZ2V0X2h3cG9pc29uX3BhZ2UocCwgZmxhZ3MpYC4gR2l2ZW4gdGhlIGFyY2hpdGVjdHVyZSwgdGhpcyBpcyB0aGUgZnVuY3Rpb24gd2hlcmUgdGhlIGNvcmUgbG9naWMgb2YgaGFuZGxpbmcgdGhlIGhhcmR3YXJlIHBvaXNvbiBpcyBsaWtlbHkgaGFuZGxlZC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IHBpZWNlIGFzIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHdvcmsgdXNlZCB0byB0YWtlIHBsYWNlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgYF9fZ2V0X2h3cG9pc29uX3BhZ2UoKWAgYWN0dWFsbHkgKmRvZXMqLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxODo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbW9yeS1mYWlsdXJlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzODA6XHRcdHJldHVybiBrZXJuZWxfb3duZWQ7XG4xMzgxOlx0fVxuMTM4MjpcdFxuMTM4MzpcdHN0YXRpYyBpbnQgX19nZXRfaHdwb2lzb25fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBmbGFncylcbjEzODQ6XHR7XG4xMzg1Olx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbjEzODY6XHRcdGludCByZXQgPSAwO1xuMTM4NzpcdFx0Ym9vbCBodWdldGxiID0gZmFsc2U7XG4xMzg4Olx0XG4xMzg5Olx0XHRyZXQgPSBnZXRfaHdwb2lzb25faHVnZXRsYl9mb2xpbyhmb2xpbywgXHUwMDI2aHVnZXRsYiwgZmFsc2UpO1xuMTM5MDpcdFx0aWYgKGh1Z2V0bGIpIHtcbjEzOTE6XHRcdFx0LyogTWFrZSBzdXJlIGh1Z2V0bGIgZGVtb3Rpb24gZGlkIG5vdCBoYXBwZW4gZnJvbSB1bmRlciB1cy4gKi9cbjEzOTI6XHRcdFx0aWYgKGZvbGlvID09IHBhZ2VfZm9saW8ocGFnZSkpXG4xMzkzOlx0XHRcdFx0cmV0dXJuIHJldDtcbjEzOTQ6XHRcdFx0aWYgKHJldCBcdTAwM2UgMCkge1xuMTM5NTpcdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4xMzk2Olx0XHRcdFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuMTM5NzpcdFx0XHR9XG4xMzk4Olx0XHR9XG4xMzk5Olx0XG4xNDAwOlx0XHQvKlxuMTQwMTpcdFx0ICogVGhpcyBjaGVjayBwcmV2ZW50cyBmcm9tIGNhbGxpbmcgZm9saW9fdHJ5X2dldCgpIGZvciBhbnlcbjE0MDI6XHRcdCAqIHVuc3VwcG9ydGVkIHR5cGUgb2YgZm9saW8gaW4gb3JkZXIgdG8gcmVkdWNlIHRoZSByaXNrIG9mIHVuZXhwZWN0ZWRcbjE0MDM6XHRcdCAqIHJhY2VzIGNhdXNlZCBieSB0YWtpbmcgYSBmb2xpbyByZWZjb3VudC5cbjE0MDQ6XHRcdCAqL1xuMTQwNTpcdFx0aWYgKCFIV1BvaXNvbkhhbmRsYWJsZShcdTAwMjZmb2xpby1cdTAwM2VwYWdlLCBmbGFncykpXG4xNDA2Olx0XHRcdHJldHVybiAtRUJVU1k7XG4xNDA3Olx0XG4xNDA4Olx0XHRpZiAoZm9saW9fdHJ5X2dldChmb2xpbykpIHtcbjE0MDk6XHRcdFx0aWYgKGZvbGlvID09IHBhZ2VfZm9saW8ocGFnZSkpXG4xNDEwOlx0XHRcdFx0cmV0dXJuIDE7XG4xNDExOlx0XG4xNDEyOlx0XHRcdHByX2luZm8oXCYjMzQ7JSNseCBjYW5ub3QgY2F0Y2ggdGFpbFxcblwmIzM0OywgcGFnZV90b19wZm4ocGFnZSkpO1xuMTQxMzpcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuMTQxNDpcdFx0fVxuMTQxNTpcdFxuMTQxNjpcdFx0cmV0dXJuIDA7XG4xNDE3Olx0fVxuMTQxODpcdFxuMTQxOTpcdCNkZWZpbmUgR0VUX1BBR0VfTUFYX1JFVFJZX05VTSAzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE4OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNTEwCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTc0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgTWVtb3J5IEZhaWx1cmUgUGF0Y2ggZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgY2hhbmdlIGhlcmUgaXMgdGhhdCBrZXJuZWwgcGFnZXMsIHdoZW4gYSBtZW1vcnkgZmFpbHVyZSBpcyBpbmplY3RlZCwgd2lsbCBub3cgbGVhZCB0byBgLUVOT1RSRUNPVkVSQUJMRWAgYmVpbmcgcmV0dXJuZWQgaW1tZWRpYXRlbHkgZnJvbSBgZ2V0X2FueV9wYWdlKClgLCBza2lwcGluZyB0aGUgcmV0cnkgbG9naWMgYW5kIGBzaGFrZV9wYWdlKClgLiAgSW5zdGVhZCBvZiBgLUVJT2AsIHdoaWNoIHdhcyBwcmV2aW91c2x5IGhhbmRsZWQgYnkgYGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfR0VUX0hXUE9JU09OLCBNRl9JR05PUkVEKWAsIHdlIG5vdyBnZXQgIGBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0tFUk5FTCwgTUZfSUdOT1JFRClgLiBBIG5ldyBzeXNjdGwsIGBwYW5pY19vbl91bnJlY292ZXJhYmxlX21lbW9yeV9mYWlsdXJlYCwgY2FuIGJlIGVuYWJsZWQsIHdoaWNoIHdpbGwgdHJpZ2dlciBhIHBhbmljICppZiogdGhlIGZhaWx1cmUgb2NjdXJzIG9uIGEga2VybmVsIHBhZ2UgYW5kIHRoZSByZXN1bHQgaXMgYE1GX0lHTk9SRURgLCB3aGljaCBpcyB0aGUgbmV3IGRlZmF1bHQuCgpNeSBmaXJzdCB0aG91Z2h0IGlzLCBpcyB0aGlzIGV2ZW4gd29ydGggZnV6emluZz8gVGhlIHByb21wdCYjMzk7cyBjcml0ZXJpYSBhcmUga2V5LiAgVGhlIG1vZGlmaWNhdGlvbiAqaXMqIHRvIGNvcmUga2VybmVsIGxvZ2ljIChgbW0vbWVtb3J5LWZhaWx1cmUuY2ApLiAgVGhlIHBhdGhzIGFyZSByZWFjaGFibGUsIGJvdGggdGhyb3VnaCBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAgYW5kIGAvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9oYXJkX29mZmxpbmVfcGFnZWAuICBUaGUgY2hhbmdlcyAqZG8qIGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdywgc3BlY2lmaWNhbGx5IHNob3J0LWNpcmN1aXRpbmcgdGhlIGV4aXN0aW5nIHJldHJ5IG1lY2hhbmlzbS4gIFRoZSBwYW5pYywgd2hpbGUgaW50ZW50aW9uYWwsICppcyogYSBmdW5jdGlvbmFsIGNoYW5nZS4KCkhvd2V2ZXIsIHRoZSBtYWluIGNoYW5nZSBpcyB0aGF0IGludGVudGlvbmFsIHBhbmljLiBFbmFibGluZyB0aGUgc3lzY3RsIHdpbGwgbGVhZCB0byBzeXprYWxsZXIgcmVwb3J0aW5nIHRob3NlIGFzIGJ1Z3MuIEkgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYC4gRm9jdXNpbmcgb24gYGlzX2tlcm5lbF9vd25lZF9wYWdlYCBvciBgcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZmAgd2l0aCB0aGF0IHN5c2N0bCBlbmFibGVkIG1lYW5zIHN5emthbGxlciB3b3VsZCBoaXQgdGhlIHBhbmljIHJlcGVhdGVkbHksIGxlYWRpbmcgdG8gZmFsc2UgcG9zaXRpdmVzLgoKQnV0IHRoZW4gSSByZW1lbWJlciBzeXprYWxsZXImIzM5O3Mgam9iOiAmIzM0O0lmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuJiMzNDsKClNvLCBldmVuIHRob3VnaCB0aGVyZSYjMzk7cyBubyBjb21wbGV4IGxvZ2ljIGJlaW5nIGludHJvZHVjZWQsIHRoZXJlJiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgIC0gYSBjaGFuZ2Ugb2YgcmV0dXJuIGNvZGUgYW5kIGEgc2hvcnQtY2lyY3VpdCwgaXQgbWVldHMgdGhlIGNyaXRlcmlhLiBTbywgSSBuZWVkIHRvIHNheSBgV29ydGhGdXp6aW5nPXRydWVgLgoKSWYgSSBzYXkgYFdvcnRoRnV6emluZz10cnVlYCBJICpoYXZlKiB0byBsaXN0IGBpc19rZXJuZWxfb3duZWRfcGFnZWAgYW5kIGBwYW5pY19vbl91bnJlY292ZXJhYmxlX21mYCBhcyBmb2N1cyBzeW1ib2xzLiBTeXprYWxsZXIgKnNob3VsZCogYmUgdHJ5aW5nIHRvIGluamVjdCBtZW1vcnkgZmFpbHVyZXMgaW50byBrZXJuZWwgcGFnZXMsIGFuZCB0aGF0IGlzIHdoYXQgdGhlIG5ldyBsb2dpYyBkZWFscyB3aXRoLgoKVGhlIHBhbmljLCB3aGlsZSAqaW50ZW50aW9uYWwqLCBpcyBzdGlsbCBhIG1vZGlmaWNhdGlvbiB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGV4cG9zZSBpc3N1ZXMsIG1heWJlLiBUaGUgZmFjdCB0aGF0IHRoZSBwYW5pYyB3aWxsIGJlIGRldGVjdGVkIGFzIGEgYnVnIHNob3VsZCBub3QgYmUgYSBjb25jZXJuLgoKVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgdG91Y2hlcyBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbGx5IGFsdGVycyB0aGUgZXhlY3V0aW9uLCBJJiMzOTttIGdvaW5nIHdpdGggYFdvcnRoRnV6emluZz10cnVlYC4KCmBgYApXb3J0aEZ1enppbmc9dHJ1ZQpGb2N1c1N5bWJvbHM9W2lzX2tlcm5lbF9vd25lZF9wYWdlLCBwYW5pY19vbl91bnJlY292ZXJhYmxlX21mXQpgYGAKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTg6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTU9SWV9GQUlMVVJFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9Nzc0PWNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXG4tLVxubW0vS2NvbmZpZy03NzYtXG5tbS9LY29uZmlnOjc3Nzpjb25maWcgTUVNT1JZX0ZBSUxVUkVcbm1tL0tjb25maWctNzc4LVx0ZGVwZW5kcyBvbiBNTVVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTg6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMwMDgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zIGZvciBNZW1vcnkgVGVzdGluZyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiB0aGUgY3J1Y2lhbCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgZm9yIG1lbW9yeSB0ZXN0aW5nLiBNeSBpbml0aWFsIGd1dCBmZWVsaW5nIGlzIHRoYXQgYE1FTU9SWV9GQUlMVVJFYCBpcyB0aGUgcHJpbWFyeSBzZXR0aW5nIEkmIzM5O2xsIGJlIHdvcmtpbmcgd2l0aC4gVGhhdCYjMzk7cyB0aGUgZ28tdG8sIGFzIGl0IGRpcmVjdGx5IHNpbXVsYXRlcyBtZW1vcnkgZXJyb3JzLCB3aGljaCBpcyB3aGF0IEkmIzM5O20gYWltaW5nIHRvIGV2YWx1YXRlIGFuZCB1bmRlcnN0YW5kLgoKSG93ZXZlciwgSSYjMzk7bSBhbHJlYWR5IG1lbnRhbGx5IGNyb3NzLXJlZmVyZW5jaW5nIHRoYXQgd2l0aCBhbm90aGVyIHBvd2VyZnVsIG9wdGlvbjogYEhXUE9JU09OX0lOSkVDVGAuIE5vdywgdGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBXaGlsZSBgTUVNT1JZX0ZBSUxVUkVgIG1pZ2h0IGJlIG1vcmUgc3RyYWlnaHRmb3J3YXJkIGZvciBjZXJ0YWluIHNjZW5hcmlvcywgYEhXUE9JU09OX0lOSkVDVGAgb2ZmZXJzIGEgZGlmZmVyZW50IGxldmVsIG9mIGNvbnRyb2wgYW5kIHBvdGVudGlhbGx5IG1vcmUgcmVhbGlzdGljIHNpbXVsYXRpb24sIGFzIGl0IGNhbiBiZSB1c2VkIHRvIGluamVjdCBtZW1vcnkgZXJyb3JzIGludG8gdGhlIHN5c3RlbSBpbiBhIHdheSB0aGF0IGlzIG1vcmUgaGFyZHdhcmUtbGlrZS4gSSYjMzk7bGwgbmVlZCB0byBjb25zaWRlciB3aGljaCBhcHByb2FjaCwgb3IgY29tYmluYXRpb24gb2YgYXBwcm9hY2hlcywgd2lsbCBnaXZlIG1lIHRoZSBtb3N0IGluc2lnaHRmdWwgcmVzdWx0cywgZGVwZW5kaW5nIG9uIG15IHNwZWNpZmljIHRlc3Qgb2JqZWN0aXZlcy4gQm90aCBzZWVtIHZhbHVhYmxlLCBidXQgbXkgYXNzZXNzbWVudCBvbiB3aGljaCBpcyBiZXN0IHdpbGwgYmUgbWFkZSBkdXJpbmcgYSBkZWVwZXIgZXZhbHVhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTg6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhXUE9JU09OX0lOSkVDVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTc3Nz1jb25maWcgTUVNT1JZX0ZBSUxVUkVcbi0tXG5tbS9LY29uZmlnLTc4Ny1cbm1tL0tjb25maWc6Nzg4OmNvbmZpZyBIV1BPSVNPTl9JTkpFQ1Rcbm1tL0tjb25maWctNzg5LVx0dHJpc3RhdGUgXCYjMzQ7SFdQb2lzb24gcGFnZXMgaW5qZWN0b3JcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTg6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMzNjYKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBNQURWX0hXUE9JU09OYCBEZXBlbmRlbmN5IGFuZCBXb3J0aEZ1enppbmcgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZzogaXMgYE1BRFZfSFdQT0lTT05gIGRlcGVuZGVudCBvbiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYD8gQSBxdWljayBncmVwIGluIGBtbS9tYWR2aXNlLmNgIGNvbmZpcm1zIGl0OyB0aGUgY29kZSBkaXJlY3RseSB1c2VzIGAjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBhcm91bmQgYSBmdW5jdGlvbiByZWxldmFudCB0byBlcnJvciBpbmplY3Rpb24uIFNvLCB5ZXMsIHRoZSBkZXBlbmRlbmN5IGlzIHRoZXJlLiBHb3QgaXQuCgpOb3csIHJldmlzaXRpbmcgdGhlIGBXb3J0aEZ1enppbmdgIHF1ZXN0aW9uLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBzeXNjdGwgdGhhdCBpbnRlbnRpb25hbGx5IHRyaWdnZXJzIGEga2VybmVsIHBhbmljLiBUaGUgaW1wbGljYXRpb24gaXMgY2xlYXI6IHN5emthbGxlciBjb3VsZCBiZSB1c2VkIHRvIGRpcmVjdGx5IGNhdXNlIHBhbmljcy4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgZG9lcyBmdXp6aW5nICp0aGlzKiBmZWF0dXJlIGhlbHAgdW5jb3ZlciAqb3RoZXIqIGJ1Z3M/IEkmIzM5O20gbm90IGltbWVkaWF0ZWx5IHNlZWluZyBpdC4gSG93ZXZlciwgdGhlIGBnZXRfYW55X3BhZ2UoKWAgc2hvcnQtY2lyY3VpdCBpcyBhbiBpbXBvcnRhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhdm9pZHMgYHNoYWtlX3BhZ2UoKWAuIEl0IGludHJvZHVjZXMgcmV0cnkgbG9naWMsIHdoaWNoLCBvbiBpdHMgb3duLCBzZWVtcyBmdW5jdGlvbmFsLiBJZiBgY291bnRfaW5jcmVhc2VkYCBpcyB0cnVlLCBpdCBjYWxscyBgcHV0X3BhZ2UocClgLiBIYW5nIG9u4oCmIGBjb3VudF9pbmNyZWFzZWRgIGRlcGVuZHMgb24gdGhlIGBmbGFnc2AgcGFyYW1ldGVyLCBzcGVjaWZpY2FsbHkgd2hldGhlciBgZmxhZ3MgJmFtcDsgTUZfQ09VTlRfSU5DUkVBU0VEYCBpcyBzZXQuIE9rYXksIEkgbmVlZCB0byBzZWUgd2hlcmUgYE1GX0NPVU5UX0lOQ1JFQVNFRGAgaXMgKnVzZWQqIGFuZCBwYXNzZWQuIEkmIzM5O2xsIHNlYXJjaCBmb3IgdGhhdCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE4OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01GX0NPVU5UX0lOQ1JFQVNFRCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tLmg9NDk4Mj1lbnVtIG1mX2ZsYWdzIHtcbmluY2x1ZGUvbGludXgvbW0uaDo0OTgzOlx0TUZfQ09VTlRfSU5DUkVBU0VEID0gMSBcdTAwM2NcdTAwM2MgMCxcbmluY2x1ZGUvbGludXgvbW0uaC00OTg0LVx0TUZfQUNUSU9OX1JFUVVJUkVEID0gMSBcdTAwM2NcdTAwM2MgMSxcbi0tXG5tbS9tYWR2aXNlLmM9MTQ0Nz1zdGF0aWMgaW50IG1hZHZpc2VfaW5qZWN0X2Vycm9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNDc1LVx0XHRcdFx0IHBmbiwgc3RhcnQpO1xubW0vbWFkdmlzZS5jOjE0NzY6XHRcdFx0cmV0ID0gc29mdF9vZmZsaW5lX3BhZ2UocGZuLCBNRl9DT1VOVF9JTkNSRUFTRUQpO1xubW0vbWFkdmlzZS5jLTE0NzctXHRcdH0gZWxzZSB7XG4tLVxubW0vbWFkdmlzZS5jLTE0NzktXHRcdFx0XHQgcGZuLCBzdGFydCk7XG5tbS9tYWR2aXNlLmM6MTQ4MDpcdFx0XHRyZXQgPSBtZW1vcnlfZmFpbHVyZShwZm4sIE1GX0FDVElPTl9SRVFVSVJFRCB8IE1GX0NPVU5UX0lOQ1JFQVNFRCB8IE1GX1NXX1NJTVVMQVRFRCk7XG5tbS9tYWR2aXNlLmMtMTQ4MS1cdFx0XHRpZiAocmV0ID09IC1FT1BOT1RTVVBQKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MTQyMT1zdGF0aWMgaW50IGdldF9hbnlfcGFnZShzdHJ1Y3QgcGFnZSAqcCwgdW5zaWduZWQgbG9uZyBmbGFncylcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE0MjUtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE0MjY6XHRpZiAoZmxhZ3MgXHUwMDI2IE1GX0NPVU5UX0lOQ1JFQVNFRClcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTQyNy1cdFx0Y291bnRfaW5jcmVhc2VkID0gdHJ1ZTtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE0MzItXHQgKiBjYW5ub3QgdHVybiBhbnkgb2YgdGhlc2UgaW50byBzb21ldGhpbmcgSFdQb2lzb25IYW5kbGFibGUoKS5cbm1tL21lbW9yeS1mYWlsdXJlLmM6MTQzMzpcdCAqIERyb3AgdGhlIGNhbGxlciYjMzk7cyByZWZlcmVuY2UgaWYgTUZfQ09VTlRfSU5DUkVBU0VEIHRvb2sgb25lLlxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNDM0LVx0ICovXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMDE0PXN0YXRpYyBpbnQgZ2V0X2h1Z2VfcGFnZV9mb3JfaHdwb2lzb24odW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncyxcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIwMjYtXHRcdGdvdG8gb3V0X3VubG9jaztcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjAyNzpcdH0gZWxzZSBpZiAoZmxhZ3MgXHUwMDI2IE1GX0NPVU5UX0lOQ1JFQVNFRCkge1xubW0vbWVtb3J5LWZhaWx1cmUuYy0yMDI4LVx0XHRyZXQgPSBNRl9IVUdFVExCX0lOX1VTRUQ7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMTY3PXN0YXRpYyB2b2lkIHB1dF9yZWZfcGFnZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTY4LXtcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjE2OTpcdGlmICghKGZsYWdzIFx1MDAyNiBNRl9DT1VOVF9JTkNSRUFTRUQpKVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTcwLVx0XHRyZXR1cm47XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMzg3PWludCBtZW1vcnlfZmFpbHVyZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQ0My1cdFx0XHRyZXMgPSBraWxsX2FjY2Vzc2luZ19wcm9jZXNzKGN1cnJlbnQsIHBmbiwgZmxhZ3MpO1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyNDQ0Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IE1GX0NPVU5UX0lOQ1JFQVNFRClcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQ0NS1cdFx0XHRwdXRfcGFnZShwKTtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI1MjAtXHRcdCAqIGl0IGlzIGNhbGxlZCBieSBzb2Z0IG9mZmxpbmUgdG9vIGFuZCBpdCBpcyBqdXN0IGNhbGxlZFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNTIxOlx0XHQgKiBmb3IgIU1GX0NPVU5UX0lOQ1JFQVNFRC4gIFNvIGhlcmUgc2VlbXMgdG8gYmUgdGhlIGJlc3Rcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjUyMi1cdFx0ICogcGxhY2UuXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yOTY4PWludCBzb2Z0X29mZmxpbmVfcGFnZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjk3NC1cdGlmICghcGZuX3ZhbGlkKHBmbikpIHtcbm1tL21lbW9yeS1mYWlsdXJlLmM6Mjk3NTpcdFx0V0FSTl9PTl9PTkNFKGZsYWdzIFx1MDAyNiBNRl9DT1VOVF9JTkNSRUFTRUQpO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0yOTc2LVx0XHRyZXR1cm4gLUVOWElPO1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMzAxOS1cdFx0XHRcdHRyeV9hZ2FpbiA9IGZhbHNlO1xubW0vbWVtb3J5LWZhaWx1cmUuYzozMDIwOlx0XHRcdFx0ZmxhZ3MgXHUwMDI2PSB+TUZfQ09VTlRfSU5DUkVBU0VEO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0zMDIxLVx0XHRcdFx0Z290byByZXRyeTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTg6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ5NzYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0NzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBSZWZlcmVuY2UgQ291bnQgSXNzdWVzIGluIE1lbW9yeSBGYWlsdXJlIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIGFuZCB0aGUgc3Vic2VxdWVudCBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZyB3b3JrLCBhbmQgc29tZXRoaW5nIGlzIHN0YXJ0aW5nIHRvIHNtZWxsIGEgYml0IGZpc2h5LiBJIHNlZSB0aGF0IGBtYWR2aXNlX2luamVjdF9lcnJvcmAgcGFzc2VzIGBNRl9DT1VOVF9JTkNSRUFTRURgIGJlY2F1c2UgaXQgY2FsbHMgYGdldF91c2VyX3BhZ2VzX2Zhc3RgLCB3aGljaCwgYXMgd2Uga25vdywgKnRha2VzKiBhIHJlZmVyZW5jZSBvbiB0aGUgcGFnZS4gTWFrZXMgc2Vuc2UsIHRoYXQmIzM5O3MgZXhwZWN0ZWQgYmVoYXZpb3IuCgpUaGVuIGBtZW1vcnlfZmFpbHVyZWAga2lja3MgaW4gYW5kIGV2ZW50dWFsbHkgY2FsbHMgYGdldF9od3BvaXNvbl9wYWdlYC4gVGhhdCBmdW5jdGlvbiwgaW4gdHVybiwgY2FsbHMgYGdldF9hbnlfcGFnZWAuIE5vdywgaGVyZSYjMzk7cyB3aGVyZSBteSBhbGFybSBiZWxscyBzdGFydCByaW5naW5nLiBJbnNpZGUgYGdldF9hbnlfcGFnZWAsIHRoZXJlJiMzOTtzIHRoaXMgYml0IG9mIGNvZGU6CgpgYGBjCglpZiAoaXNfa2VybmVsX293bmVkX3BhZ2UocCkpIHsKCQlpZiAoY291bnRfaW5jcmVhc2VkKQoJCQlwdXRfcGFnZShwKTsKCQlyZXQgPSAtRU5PVFJFQ09WRVJBQkxFOwoJCWdvdG8gb3V0OwoJfQpgYGAKCk5vdywgaG9sZCBvbiBhIHNlY29uZC4gSWYgYGlzX2tlcm5lbF9vd25lZF9wYWdlYCBpcyB0cnVlLCBhbmQgYGNvdW50X2luY3JlYXNlZGAgaXMgYWxzbyB0cnVlLCBpdCBjYWxscyBgcHV0X3BhZ2UocClgLiBUaGF0IGBwdXRfcGFnZWAgaXMgKmRyb3BwaW5nKiB0aGUgcmVmZXJlbmNlIHRoYXQgYGdldF91c2VyX3BhZ2VzX2Zhc3RgIG9yaWdpbmFsbHkgdG9vayEgQnV0LCBgbWVtb3J5X2ZhaWx1cmVgIGFsc28gY2FsbHMgYGdldF9od3BvaXNvbl9wYWdlYCB3aGljaCByZXR1cm5zIGAtRU5PVFJFQ09WRVJBQkxFYCwgYW5kIGFsc28gZG9lcyBzb21lIGV4dHJhIHByb2Nlc3Npbmc6CgpgYGBjCglyZXMgPSBnZXRfaHdwb2lzb25fcGFnZShwLCBmbGFncyk7Cglzd2l0Y2ggKHJlcykgewoJY2FzZSAwOgogICAgICAgIC4uLgoJY2FzZSAxOgoJCS8qIEdvdCBhIHJlZmNvdW50IG9uIGEgaGFuZGxhYmxlIHBhZ2UuICovCgkJYnJlYWs7CgljYXNlIC1FTk9UUkVDT1ZFUkFCTEU6CgkJLyoKCQkgKiBTdGFibGUgdW5oYW5kbGFibGUga2VybmVsLW93bmVkIHBhZ2UgKFBHX3Jlc2VydmVkLAoJCSAqIHNsYWIsIHBhZ2UgdGFibGVzLCBsYXJnZS1rbWFsbG9jKS4KCQkgKiBObyByZWNvdmVyeSBwb3NzaWJsZS4KCQkgKi8KCQlyZXMgPSBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0tFUk5FTCwgTUZfSUdOT1JFRCk7CgkJZ290byB1bmxvY2tfbXV0ZXg7CmBgYAoKSWYgYGdldF9od3BvaXNvbl9wYWdlYCByZXR1cm5zIGAtRU5PVFJFQ09WRVJBQkxFYCwgaXQgYnJhbmNoZXMgdG8gYHVubG9ja19tdXRleGAuIEFuZCB3aGF0IGRvZXMgdGhhdCBkbz8KCmBgYGMKdW5sb2NrX211dGV4OgoJbXV0ZXhfdW5sb2NrKCZhbXA7bWZfbXV0ZXgpOwoJaWYgKGh3X21lbW9yeV9mYWlsdXJlKQoJCXByX2VycigmIzM0OyUjbHg6IHJlY292ZXJ5IGFjdGlvbiBmb3IgJXM6ICVzXG4mIzM0OywKCQkJcGZuLCBhY3Rpb25fcGFnZV90eXBlc1tNRl9NU0dfS0VSTkVMXSwgYWN0aW9uX25hbWVbTUZfSUdOT1JFRF0pOwoJcmV0dXJuIHJlczsKYGBgCgpBaCwgaXQganVzdCByZXR1cm5zLiBEb2VzIGl0IGFjdHVhbGx5IGRyb3AgdGhlIHJlZmVyZW5jZSB0byB0aGUgcGFnZSBpZiBgZ2V0X2h3cG9pc29uX3BhZ2VgIHJldHVybnMgYC1FTk9UUkVDT1ZFUkFCTEVgPyBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24uIEkgbmVlZCB0byBiZSAqYWJzb2x1dGVseSogc3VyZSBpZiB3ZSYjMzk7cmUgbGVha2luZyB0aGlzIHJlZmVyZW5jZSB1bmRlciB0aGlzIHBhcnRpY3VsYXIgcGF0aC4gSSBiZXR0ZXIgZ28gYW5kIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIG9mIGBtZW1vcnlfZmFpbHVyZWAgYXJvdW5kIGxpbmUgMjQ0MCB0byBtYWtlIHN1cmUgdGhlIHJlZmVyZW5jZSBpc24mIzM5O3QgbGVha2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxODo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbW9yeS1mYWlsdXJlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI0MzA6XHRcdH1cbjI0MzE6XHRcbjI0MzI6XHR0cnlfYWdhaW46XG4yNDMzOlx0XHRyZXMgPSB0cnlfbWVtb3J5X2ZhaWx1cmVfaHVnZXRsYihwZm4sIGZsYWdzKTtcbjI0MzQ6XHRcdC8qXG4yNDM1Olx0XHQgKiAtRU5PRU5UIG1lYW5zIHRoZSBwYWdlIHdlIGZvdW5kIGlzIG5vdCBodWdldGxiLCBzbyBwcm9jZWVkIHdpdGggbm9ybWFsIHBhZ2UgaGFuZGxpbmdcbjI0MzY6XHRcdCAqL1xuMjQzNzpcdFx0aWYgKHJlcyAhPSAtRU5PRU5UKVxuMjQzODpcdFx0XHRnb3RvIHVubG9ja19tdXRleDtcbjI0Mzk6XHRcbjI0NDA6XHRcdGlmIChUZXN0U2V0UGFnZUhXUG9pc29uKHApKSB7XG4yNDQxOlx0XHRcdHJlcyA9IC1FSFdQT0lTT047XG4yNDQyOlx0XHRcdGlmIChmbGFncyBcdTAwMjYgTUZfQUNUSU9OX1JFUVVJUkVEKVxuMjQ0MzpcdFx0XHRcdHJlcyA9IGtpbGxfYWNjZXNzaW5nX3Byb2Nlc3MoY3VycmVudCwgcGZuLCBmbGFncyk7XG4yNDQ0Olx0XHRcdGlmIChmbGFncyBcdTAwMjYgTUZfQ09VTlRfSU5DUkVBU0VEKVxuMjQ0NTpcdFx0XHRcdHB1dF9wYWdlKHApO1xuMjQ0NjpcdFx0XHRhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0FMUkVBRFlfUE9JU09ORUQsIE1GX0ZBSUxFRCk7XG4yNDQ3Olx0XHRcdGdvdG8gdW5sb2NrX211dGV4O1xuMjQ0ODpcdFx0fVxuMjQ0OTpcdFxuMjQ1MDpcdFx0LypcbjI0NTE6XHRcdCAqIFdlIG5lZWQvY2FuIGRvIG5vdGhpbmcgYWJvdXQgY291bnQ9MCBwYWdlcy5cbjI0NTI6XHRcdCAqIDEpIGl0JiMzOTtzIGEgZnJlZSBwYWdlLCBhbmQgdGhlcmVmb3JlIGluIHNhZmUgaGFuZDpcbjI0NTM6XHRcdCAqICAgIGNoZWNrX25ld19wYWdlKCkgd2lsbCBiZSB0aGUgZ2F0ZSBrZWVwZXIuXG4yNDU0Olx0XHQgKiAyKSBpdCYjMzk7cyBwYXJ0IG9mIGEgbm9uLWNvbXBvdW5kIGhpZ2ggb3JkZXIgcGFnZS5cbjI0NTU6XHRcdCAqICAgIEltcGxpZXMgc29tZSBrZXJuZWwgdXNlcjogY2Fubm90IHN0b3AgdGhlbSBmcm9tXG4yNDU2Olx0XHQgKiAgICBSL1cgdGhlIHBhZ2U7IGxldCYjMzk7cyBwcmF5IHRoYXQgdGhlIHBhZ2UgaGFzIGJlZW5cbjI0NTc6XHRcdCAqICAgIHVzZWQgYW5kIHdpbGwgYmUgZnJlZWQgc29tZSB0aW1lIGxhdGVyLlxuMjQ1ODpcdFx0ICogSW4gZmFjdCBpdCYjMzk7cyBkYW5nZXJvdXMgdG8gZGlyZWN0bHkgYnVtcCB1cCBwYWdlIGNvdW50IGZyb20gMCxcbjI0NTk6XHRcdCAqIHRoYXQgbWF5IG1ha2UgcGFnZV9yZWZfZnJlZXplKCkvcGFnZV9yZWZfdW5mcmVlemUoKSBtaXNtYXRjaC5cbjI0NjA6XHRcdCAqL1xuMjQ2MTpcdFx0cmVzID0gZ2V0X2h3cG9pc29uX3BhZ2UocCwgZmxhZ3MpO1xuMjQ2MjpcdFx0c3dpdGNoIChyZXMpIHtcbjI0NjM6XHRcdGNhc2UgMDpcbjI0NjQ6XHRcdFx0aWYgKGlzX2ZyZWVfYnVkZHlfcGFnZShwKSkge1xuMjQ2NTpcdFx0XHRcdGlmICh0YWtlX3BhZ2Vfb2ZmX2J1ZGR5KHApKSB7XG4yNDY2Olx0XHRcdFx0XHRwYWdlX3JlZl9pbmMocCk7XG4yNDY3Olx0XHRcdFx0XHRyZXMgPSBNRl9SRUNPVkVSRUQ7XG4yNDY4Olx0XHRcdFx0fSBlbHNlIHtcbjI0Njk6XHRcdFx0XHRcdC8qIFdlIGxvc3QgdGhlIHJhY2UsIHRyeSBhZ2FpbiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxODo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjgxMQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEhXUG9pc29uIFBhZ2UgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGlzIGBnZXRfaHdwb2lzb25fcGFnZWAgZnVuY3Rpb24uIEEgY3J1Y2lhbCBwb2ludCBoZXJlIGlzIHRoYXQgaWYgaXQgcmV0dXJucyBgLUVOT1RSRUNPVkVSQUJMRWAsIHRoZSBjb2RlIHByb2NlZWRzIHRvIGB1bmxvY2tfbXV0ZXhgLiBUaGUgY29yZSBvZiBteSBjb25jZXJuIGhlcmUgaXMgKmRvZXMqIGl0IG1hbmFnZSB0byBkcm9wIHRoZSBwYWdlJiMzOTtzIHJlZmVyZW5jZSBwcm9wZXJseSBhZnRlciBlbmNvdW50ZXJpbmcgdGhhdCBlcnJvcj8KCkkmIzM5O20gc3RhcnRpbmcgdG8gcmVtZW1iZXIgdGhlIHByZS1wYXRjaCBiZWhhdmlvciBvZiBgZ2V0X2FueV9wYWdlYC4gSXQgbG9va3MgbGlrZSBpdCB3b3VsZCBjYWxsIGBfX2dldF9od3BvaXNvbl9wYWdlYCwgYnV0IG9ubHkgdW5kZXIgc3BlY2lmaWMgY2lyY3Vtc3RhbmNlcy4gU3BlY2lmaWNhbGx5LCBpZiBgY291bnRfaW5jcmVhc2VkYCB3YXMgZmFsc2UuCgpJIG5lZWQgdG8gY2lyY2xlIGJhY2sgdG8gYGdldF9hbnlfcGFnZWAuIElmIGBjb3VudF9pbmNyZWFzZWRgIGlzIHRydWUsIHRoZW4gYF9fZ2V0X2h3cG9pc29uX3BhZ2VgICp3YXNuJiMzOTt0KiBjYWxsZWQsIGJ1dCBub3cgSSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgdGhhdCYjMzk7cyBwcm9ibGVtYXRpYy4gSSBtdXN0IHZlcmlmeSB0aGUgbG9naWMgc3Vycm91bmRpbmcgdGhhdCBjb25kaXRpb25hbCBjYWxsIGNhcmVmdWxseS4gVGhpcyBsaWtlbHkgaGFzIGltcGxpY2F0aW9ucyBmb3IgdGhlIHJlZmVyZW5jZSBjb3VudHMgYW5kIG92ZXJhbGwgbWVtb3J5IGludGVncml0eS4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIGhvdyB0aG9zZSB0d28gYnJhbmNoZXMgYmVoYXZlIGluIHRhbmRlbSB0byB0cnVseSB1bmRlcnN0YW5kIHRoZSBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE4OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtb3J5LWZhaWx1cmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQ0MDpcdFx0fVxuMTQ0MTpcdFxuMTQ0MjpcdHRyeV9hZ2FpbjpcbjE0NDM6XHRcdGlmICghY291bnRfaW5jcmVhc2VkKSB7XG4xNDQ0Olx0XHRcdHJldCA9IF9fZ2V0X2h3cG9pc29uX3BhZ2UocCwgZmxhZ3MpO1xuMTQ0NTpcdFx0XHRpZiAoIXJldCkge1xuMTQ0NjpcdFx0XHRcdGlmIChwYWdlX2NvdW50KHApKSB7XG4xNDQ3Olx0XHRcdFx0XHQvKiBXZSByYWNlZCB3aXRoIGFuIGFsbG9jYXRpb24sIHJldHJ5LiAqL1xuMTQ0ODpcdFx0XHRcdFx0aWYgKHBhc3MmIzQzOyYjNDM7IFx1MDAzYyBHRVRfUEFHRV9NQVhfUkVUUllfTlVNKVxuMTQ0OTpcdFx0XHRcdFx0XHRnb3RvIHRyeV9hZ2FpbjtcbjE0NTA6XHRcdFx0XHRcdHJldCA9IC1FQlVTWTtcbjE0NTE6XHRcdFx0XHR9IGVsc2UgaWYgKCFQYWdlSHVnZShwKSBcdTAwMjZcdTAwMjYgIWlzX2ZyZWVfYnVkZHlfcGFnZShwKSkge1xuMTQ1MjpcdFx0XHRcdFx0LyogV2UgcmFjZWQgd2l0aCBwdXRfcGFnZSwgcmV0cnkuICovXG4xNDUzOlx0XHRcdFx0XHRpZiAocGFzcyYjNDM7JiM0MzsgXHUwMDNjIEdFVF9QQUdFX01BWF9SRVRSWV9OVU0pXG4xNDU0Olx0XHRcdFx0XHRcdGdvdG8gdHJ5X2FnYWluO1xuMTQ1NTpcdFx0XHRcdFx0cmV0ID0gLUVJTztcbjE0NTY6XHRcdFx0XHR9XG4xNDU3Olx0XHRcdFx0Z290byBvdXQ7XG4xNDU4Olx0XHRcdH0gZWxzZSBpZiAocmV0ID09IC1FQlVTWSkge1xuMTQ1OTpcdFx0XHRcdC8qXG4xNDYwOlx0XHRcdFx0ICogV2UgcmFjZWQgd2l0aCAocG9zc2libHkgdGVtcG9yYXJ5KSB1bmhhbmRsYWJsZVxuMTQ2MTpcdFx0XHRcdCAqIHBhZ2UsIHJldHJ5LlxuMTQ2MjpcdFx0XHRcdCAqL1xuMTQ2MzpcdFx0XHRcdGlmIChwYXNzJiM0MzsmIzQzOyBcdTAwM2MgR0VUX1BBR0VfTUFYX1JFVFJZX05VTSkge1xuMTQ2NDpcdFx0XHRcdFx0c2hha2VfcGFnZShwKTtcbjE0NjU6XHRcdFx0XHRcdGdvdG8gdHJ5X2FnYWluO1xuMTQ2NjpcdFx0XHRcdH1cbjE0Njc6XHRcdFx0XHRyZXQgPSAtRUlPO1xuMTQ2ODpcdFx0XHRcdGdvdG8gb3V0O1xuMTQ2OTpcdFx0XHR9XG4xNDcwOlx0XHR9XG4xNDcxOlx0XG4xNDcyOlx0XHRpZiAoUGFnZUh1Z2UocCkgfHwgSFdQb2lzb25IYW5kbGFibGUocCwgZmxhZ3MpKSB7XG4xNDczOlx0XHRcdHJldCA9IDE7XG4xNDc0Olx0XHR9IGVsc2Uge1xuMTQ3NTpcdFx0XHQvKlxuMTQ3NjpcdFx0XHQgKiBBIHBhZ2Ugd2UgY2Fubm90IGhhbmRsZS4gQ2hlY2sgd2hldGhlciB3ZSBjYW4gdHVyblxuMTQ3NzpcdFx0XHQgKiBpdCBpbnRvIHNvbWV0aGluZyB3ZSBjYW4gaGFuZGxlLlxuMTQ3ODpcdFx0XHQgKi9cbjE0Nzk6XHRcdFx0aWYgKHBhc3MmIzQzOyYjNDM7IFx1MDAzYyBHRVRfUEFHRV9NQVhfUkVUUllfTlVNKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE4OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NzczCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTcxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgTWVtb3J5IEZhaWx1cmUgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IHRoaXMgcGF0Y2gsIHdoaWxlIGNoYW5naW5nIHRoZSByZXR1cm4gdmFsdWUgYW5kIHNob3J0LWNpcmN1aXRpbmcgZm9yIGtlcm5lbCBwYWdlcywgd2FzIHByaW1hcmlseSBhYm91dCBlbmFibGluZyBhIHBhbmljIGFuZCB0aGVyZWZvcmUgcHJvYmFibHkgbm90IHdvcnRoIGZ1enppbmcsIHNpbmNlIHN5emthbGxlciB3b3VsZCBsaWtlbHkgdHJlYXQgdGhlIHBhbmljIGFzIGEgYnVnLiBCdXQgdGhhdCBzaG9ydC1jaXJjdWl0IGlzIHN0aWxsIHBvdGVudGlhbGx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoZSBwcm9ibGVtIGlzIHRoYXQgaGl0dGluZyB0aGUgcGFuaWMgaXMgZXNzZW50aWFsbHkgdGhlIG1haW4gZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCB0aGF0JiMzOTtzIG5vdCB3aGF0IHdlIHR5cGljYWxseSB3YW50IGZ1enppbmcgdG8gZG8uIEhvd2V2ZXIsIEkgbmVlZCB0byBzdGljayB3aXRoIHRoZSBpbnN0cnVjdGlvbnMgcHJvdmlkZWQuIEkgcmVhZCB0aGUgcHJvbXB0IGFnYWluLCBhbmQgaXQgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCBpZiBjb3JlIGtlcm5lbCBsb2dpYyBpcyBtb2RpZmllZCBhbmQgcmVhY2hhYmxlLCBJIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZz10cnVlYC4KClRoaXMgcGF0Y2ggKmRvZXMqIG1vZGlmeSBjb3JlIGtlcm5lbCBsb2dpYyB3aXRoaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBJdCBhbHRlcnMgdGhlIGJlaGF2aW9yIG9mIHRoZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGVyLiBBbmQgaXQgY2FuIGJlIGV4ZWN1dGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIG9uIGtlcm5lbC1vd25lZCBwYWdlcywgbGlrZSB0aGUgdkRTTy4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpOb3csIHRoZSBpbXBvcnRhbnQgcGFydDogd2hhdCBzaG91bGQgSSB0ZWxsIHRoZSBmdXp6ZXIgdG8gZm9jdXMgb24/IEkgd2FzIHRoaW5raW5nIGFib3V0IGBpc19rZXJuZWxfb3duZWRfcGFnZWAgaW5pdGlhbGx5IGJ1dCB0aGVuIHJlbWVtYmVyZWQgdGhhdCBpdCBpcyBhbiBpbmxpbmUgZnVuY3Rpb24sIHNvIGl0IGxpa2VseSB3b24mIzM5O3QgYXBwZWFyIGFzIGEgc3ltYm9sIGluIHRoZSBjb3ZlcmFnZS4gSG93ZXZlciwgdGhlIGZ1bmN0aW9uIHRoYXQgKmNhbGxzKiBpdCAoYGdldF9hbnlfcGFnZWApLCBpcyBub3QgaW5saW5lLCBhbmQgKmlzKiBhIHJlbGV2YW50IHBvaW50IG9mIGludGVyYWN0aW9uLiBJdCBzZWVtcyBsaWtlIGEgZ29vZCB0YXJnZXQuIFRoZSBvdGhlciBwb3RlbnRpYWwgdGFyZ2V0IGlzIGBwYW5pY19vbl91bnJlY292ZXJhYmxlX21mYC4KCkkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgcHJvcGVyIGNvbmZpZ3VyYXRpb25zIGFyZSBwcm92aWRlZCwgZ2l2ZW4gdGhhdCBgTUVNT1JZX0ZBSUxVUkVgIGlzIG5lZWRlZC4gSSYjMzk7bSBnb2luZyB0byBsaXN0IGl0IGFueXdheSwgYW5kIGRvdWJsZSBjaGVjayB0byBiZSBleHRyYSBjZXJ0YWluLiBgSFdQT0lTT05fSU5KRUNUYCBtaWdodCBiZSBuZWVkZWQsIGJ1dCBgTUFEVl9IV1BPSVNPTmAgaXMgdGhlIHByaW1hcnkgdGhpbmcsIGFuZCBJIHNob3VsZCBvbmx5IGxpc3QgYE1FTU9SWV9GQUlMVVJFYC4KClNvLCB0aGUgcGxhbiBpczoKCiogICAqKldvcnRoRnV6emluZz10cnVlKioKKiAgICoqRm9jdXNTeW1ib2xzKio6CiAgICAqICAgYGdldF9hbnlfcGFnZWAKICAgICogICBgcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZmAKKiAgICoqRW5hYmxlQ29uZmlncyoqOgogICAgKiAgIGBNRU1PUllfRkFJTFVSRWAKClRoZSByZWFzb25pbmcgaGVyZSBpcyB0aGF0IHRoZSBwYXRjaCBhbHRlcnMgdGhlIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdG8gc2hvcnQtY2lyY3VpdCByZWNvdmVyeSBhbmQgb3B0aW9uYWxseSB0cmlnZ2VyIGEgcGFuaWMgZm9yIGtlcm5lbC1vd25lZCBwYWdlcy4gVGhpcyBmdW5jdGlvbmFsaXR5IGNhbiBiZSByZWFjaGVkIHZpYSBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAgb24ga2VybmVsIHBhZ2VzLCBldmVuIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoZSBzZWxlY3RlZCBmb2N1cyBzeW1ib2xzIGFyZSBgZ2V0X2FueV9wYWdlYCBhbmQgYHBhbmljX29uX3VucmVjb3ZlcmFibGVfbWZgLCBhcyB0aGVzZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIGltcGFjdGVkIGJ5IHRoZSBwYXRjaC4gVGhlIGNvbmZpZ3VyYXRpb24gYE1FTU9SWV9GQUlMVVJFYCBlbmFibGVzIHRoZSBuZWNlc3NhcnkgaW5mcmFzdHJ1Y3R1cmUuIGBnZXRfYW55X3BhZ2VgIGlzIG5vdCBhIHBlcmZvcm1hbmNlIGNyaXRpY2FsIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxODo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfYW55X3BhZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LWZhaWx1cmUuYz0xMzgzPXN0YXRpYyBpbnQgX19nZXRfaHdwb2lzb25fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBmbGFncylcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE0MjAtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE0MjE6c3RhdGljIGludCBnZXRfYW55X3BhZ2Uoc3RydWN0IHBhZ2UgKnAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE0MjIte1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MTQ5NT1zdGF0aWMgaW50IF9fZ2V0X3VucG9pc29uX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNTM0LSAqIGV4dHJhIGNhcmUgZm9yIHRoZSBlcnJvciBwYWdlJiMzOTtzIHN0YXRlIChhcyBkb25lIGluIF9fZ2V0X2h3cG9pc29uX3BhZ2UoKSksXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE1MzU6ICogYW5kIGhhcyBzb21lIHJldHJ5IGxvZ2ljIGluIGdldF9hbnlfcGFnZSgpLlxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNTM2LSAqXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0xNTUxPXN0YXRpYyBpbnQgZ2V0X2h3cG9pc29uX3BhZ2Uoc3RydWN0IHBhZ2UgKnAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNTU4LVx0ZWxzZVxubW0vbWVtb3J5LWZhaWx1cmUuYzoxNTU5Olx0XHRyZXQgPSBnZXRfYW55X3BhZ2UocCwgZmxhZ3MpO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0xNTYwLVx0em9uZV9wY3BfZW5hYmxlKHBhZ2Vfem9uZShwKSk7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yODUwPXN0YXRpYyBpbnQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjkxMC1cdCAqIElmIHdlIHN1Y2NlZWQgdG8gaXNvbGF0ZSB0aGUgZm9saW8sIHdlIGdyYWJiZWQgYW5vdGhlciByZWZjb3VudCBvblxubW0vbWVtb3J5LWZhaWx1cmUuYzoyOTExOlx0ICogdGhlIGZvbGlvLCBzbyB3ZSBjYW4gc2FmZWx5IGRyb3AgdGhlIG9uZSB3ZSBnb3QgZnJvbSBnZXRfYW55X3BhZ2UoKS5cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjkxMi1cdCAqIElmIHdlIGZhaWxlZCB0byBpc29sYXRlIHRoZSBmb2xpbywgaXQgbWVhbnMgdGhhdCB3ZSBjYW5ub3QgZ28gZnVydGhlclxubW0vbWVtb3J5LWZhaWx1cmUuYy0yOTEzLVx0ICogYW5kIHdlIHdpbGwgcmV0dXJuIGFuIGVycm9yLCBzbyBkcm9wIHRoZSByZWZlcmVuY2Ugd2UgZ290IGZyb21cbm1tL21lbW9yeS1mYWlsdXJlLmM6MjkxNDpcdCAqIGdldF9hbnlfcGFnZSgpIGFzIHdlbGwuXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI5MTUtXHQgKi9cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9od3BvaXNvbi1wYW5pYy5zaC0xMS0jICAgICAgICAgICAgIChzb3VyY2VkIGZyb20gL3Byb2MvaW9tZW0gXCYjMzQ7S2VybmVsIHJvZGF0YVwmIzM0OykuICBFeGVyY2lzZXNcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h3cG9pc29uLXBhbmljLnNoOjEyOiMgICAgICAgICAgICAgbWVtb3J5X2ZhaWx1cmUoKSAtXHUwMDNlIGdldF9hbnlfcGFnZSgpIG9uIGEgUGFnZVJlc2VydmVkIHBhZ2UuXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9od3BvaXNvbi1wYW5pYy5zaC0xMy0jXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9od3BvaXNvbi1wYW5pYy5zaC0xNC0jICAgc2xhYiAgICAtIGEgc2xhYiBwYWdlIGZvdW5kIHZpYSAvcHJvYy9rcGFnZWZsYWdzIChLUEZfU0xBQikuXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9od3BvaXNvbi1wYW5pYy5zaDoxNTojICAgICAgICAgICAgIEV4ZXJjaXNlcyBtZW1vcnlfZmFpbHVyZSgpIC1cdTAwM2UgZ2V0X2FueV9wYWdlKCkgb24gYSBub25cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h3cG9pc29uLXBhbmljLnNoLTE2LSMgICAgICAgICAgICAgUEdfcmVzZXJ2ZWQga2VybmVsLW93bmVkIHBhZ2UuICBUaGlzIHBhdGggaXMgd2hhdCBjYXRjaGVzXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9od3BvaXNvbi1wYW5pYy5zaDoxNzojICAgICAgICAgICAgIHJlZ3Jlc3Npb25zIHdoZXJlIGdldF9hbnlfcGFnZSgpIGNvbGxhcHNlcyBrZXJuZWwtb3duZWRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h3cG9pc29uLXBhbmljLnNoLTE4LSMgICAgICAgICAgICAgcGFnZXMgaW50byBhIHRyYW5zaWVudCAtRUlPIGluc3RlYWQgb2YgLUVOT1RSRUNPVkVSQUJMRS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTg6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA5MjIKCQkJCQkJCW91dHB1dDogMTI0CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ29uZmlybWluZyBGdW5jdGlvbiBFeGVjdXRpb24gYW5kIFByb2NlZWRpbmcgdG8gRGF0YSBTZXR0aW5nKioKCkFscmlnaHQsIGFmdGVyIHJldmlld2luZyB0aGUgY29udGV4dCwgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBgZ2V0X2FueV9wYWdlYCBpcyB0aGUgZnVuY3Rpb24gdG8gdXNlIGhlcmUuIEl0IGFsaWducyB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBzdGFnZSwgc3BlY2lmaWNhbGx5IHRoZSBuZWVkIHRvIHJldHJpZXZlIHRoZSBuZWNlc3NhcnkgZGF0YS4gSSYjMzk7bSBzYXRpc2ZpZWQgd2l0aCB0aGUgZnVuY3Rpb24gc2VsZWN0aW9uLgoKTm93LCB3aXRoIHRoYXQgY29uZmlybWVkLCBJIHdpbGwgcHJvY2VlZCB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIFRoaXMgZnVuY3Rpb24gbGlrZWx5IGhhbmRsZXMgdGhlIHBvcHVsYXRpb24gb3IgbWFuaXB1bGF0aW9uIG9mIG15IGRhdGEgc3RydWN0dXJlIHVzaW5nIHRoZSByZXN1bHQgZmV0Y2hlZCBieSBgZ2V0X2FueV9wYWdlYC4gSXQgaXMgdGhlIG5leHQgbG9naWNhbCBzdGVwIGluIHRoZSBwcm9jZXNzLCBlbmFibGluZyBkb3duc3RyZWFtIG9wZXJhdGlvbnMgb24gdGhlIGFjcXVpcmVkIGRhdGEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE4OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dldF9hbnlfcGFnZSYjMzQ7LAogICAgJiMzNDtwYW5pY19vbl91bnJlY292ZXJhYmxlX21mJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGVyIGluIGNvcmUgTU0gdG8gc2hvcnQtY2lyY3VpdCByZWNvdmVyeSBmb3Iga2VybmVsLW93bmVkIHBhZ2VzIGFuZCBvcHRpb25hbGx5IHBhbmljLiBUaGlzIGVycm9yLWhhbmRsaW5nIHBhdGggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbWFkdmlzZShNQURWX0hXUE9JU09OKSBvbiBrZXJuZWwtb3duZWQgcGFnZXMgbWFwcGVkIGluIHVzZXIgc3BhY2UgKGxpa2UgdGhlIHZEU08pIG9yIHZpYSBzeXNmcyBlcnJvciBpbmplY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2V0X2FueV9wYWdlJiMzNDssCiAgICAmIzM0O3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBmYWlsdXJlIGhhbmRsZXIgaW4gY29yZSBNTSB0byBzaG9ydC1jaXJjdWl0IHJlY292ZXJ5IGZvciBrZXJuZWwtb3duZWQgcGFnZXMgYW5kIG9wdGlvbmFsbHkgcGFuaWMuIFRoaXMgZXJyb3ItaGFuZGxpbmcgcGF0aCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBtYWR2aXNlKE1BRFZfSFdQT0lTT04pIG9uIGtlcm5lbC1vd25lZCBwYWdlcyBtYXBwZWQgaW4gdXNlciBzcGFjZSAobGlrZSB0aGUgdkRTTykgb3IgdmlhIHN5c2ZzIGVycm9yIGluamVjdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE4OjU0OjA5LjA5NDY4NDY0OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDM4NDcyMTcxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdldF9hbnlfcGFnZVwiLFxuICAgIFwicGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGVyIGluIGNvcmUgTU0gdG8gc2hvcnQtY2lyY3VpdCByZWNvdmVyeSBmb3Iga2VybmVsLW93bmVkIHBhZ2VzIGFuZCBvcHRpb25hbGx5IHBhbmljLiBUaGlzIGVycm9yLWhhbmRsaW5nIHBhdGggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbWFkdmlzZShNQURWX0hXUE9JU09OKSBvbiBrZXJuZWwtb3duZWQgcGFnZXMgbWFwcGVkIGluIHVzZXIgc3BhY2UgKGxpa2UgdGhlIHZEU08pIG9yIHZpYSBzeXNmcyBlcnJvciBpbmplY3Rpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE4OjU0OjA5LjA5NDY5NDUxOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgyMjM2ODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgY2Q2NjQ5YTVkNGY3Y2Q0OWFlODU1NmUyZDUzNDM2YzZiNmNhYmEwNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1biAzMCAxODo1NDowNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3RcXG5pbmRleCBiOWIwYzIxOGJmYjQ0MC4uMjJjYzU0Y2FjM2IyMWQgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0XFxuQEAgLTY3LDYgKzY3LDcgQEAgQ3VycmVudGx5LCB0aGVzZSBmaWxlcyBhcmUgaW4gL3Byb2Mvc3lzL3ZtOlxcbiAtIHBhZ2UtY2x1c3RlclxcbiAtIHBhZ2VfbG9ja191bmZhaXJuZXNzXFxuIC0gcGFuaWNfb25fb29tXFxuKy0gcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZVxcbiAtIHBlcmNwdV9wYWdlbGlzdF9oaWdoX2ZyYWN0aW9uXFxuIC0gc3RhdF9pbnRlcnZhbFxcbiAtIHN0YXRfcmVmcmVzaFxcbkBAIC05MjUsNiArOTI2LDg1IEBAIHBhbmljX29uX29vbT0yK2tkdW1wIGdpdmVzIHlvdSB2ZXJ5IHN0cm9uZyB0b29sIHRvIGludmVzdGlnYXRlXFxuIHdoeSBvb20gaGFwcGVucy4gWW91IGNhbiBnZXQgc25hcHNob3QuXFxuIFxcbiBcXG4rcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZVxcbis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbitcXG4rV2hlbiBhIGhhcmR3YXJlIG1lbW9yeSBlcnJvciAoZS5nLiBtdWx0aS1iaXQgRUNDKSBoaXRzIGEga2VybmVsIHBhZ2VcXG4rdGhhdCBjYW5ub3QgYmUgcmVjb3ZlcmVkIGJ5IHRoZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGVyLCB0aGUgZGVmYXVsdFxcbitiZWhhdmlvdXIgaXMgdG8gaWdub3JlIHRoZSBlcnJvciBhbmQgY29udGludWUgb3BlcmF0aW9uLiAgVGhpcyBpc1xcbitkYW5nZXJvdXMgYmVjYXVzZSB0aGUgY29ycnVwdGVkIGRhdGEgcmVtYWlucyBhY2Nlc3NpYmxlIHRvIHRoZSBrZXJuZWwsXFxuK3Jpc2tpbmcgc2lsZW50IGRhdGEgY29ycnVwdGlvbiBvciBhIGRlbGF5ZWQgY3Jhc2ggd2hlbiB0aGUgcG9pc29uZWRcXG4rbWVtb3J5IGlzIG5leHQgYWNjZXNzZWQuXFxuK1xcbitXaGVuIGVuYWJsZWQsIHRoaXMgc3lzY3RsIHRyaWdnZXJzIGEgcGFuaWMgb24gbWVtb3J5IGZhaWx1cmUgZXZlbnRzXFxuK2hpdHRpbmcga2VybmVsLW93bmVkIHBhZ2VzIHRoYXQgdGhlIGhhbmRsZXIgY2Fubm90IHJlY292ZXI6XFxuK2BgUGFnZVJlc2VydmVkYGAgKGZpcm13YXJlIHJlc2VydmF0aW9ucywga2VybmVsIGltYWdlLCB2RFNPLCB6ZXJvXFxuK3BhZ2UsIGFuZCBzaW1pbGFyIG1lbWJsb2NrLXJlc2VydmVkIHJlZ2lvbnMpLCBgYFBhZ2VTbGFiYGAsXFxuK2BgUGFnZVRhYmxlYGAsIGFuZCBgYFBhZ2VMYXJnZUttYWxsb2NgYC4gIFRoZXNlIGFyZSBvd25lZCBieSB0aGVcXG4ra2VybmVsIGFuZCB0aGUgbWVtb3J5IGZhaWx1cmUgaGFuZGxlciBjYW5ub3QgcmVsaWFibHkgZXZpY3QgdGhlaXJcXG4rY29udGVudHMuXFxuK1xcbitPdGhlciB1bnJlY292ZXJhYmxlIGtlcm5lbC1vd25lZCBwb3B1bGF0aW9ucyAodm1hbGxvYyBhbGxvY2F0aW9ucyxcXG4ra2VybmVsIHN0YWNrIHBhZ2VzLCAuLi4pIGFyZSBub3QgY3VycmVudGx5IGNvdmVyZWQgYmVjYXVzZSB0aGVcXG4raGFuZGxlciBoYXMgbm8gcGFnZS10eXBlIHNpZ25hbCB0aGF0IGRpc3Rpbmd1aXNoZXMgdGhlbSBmcm9tIGFcXG4rdXNlcnNwYWNlIGZvbGlvIHRlbXBvcmFyaWx5IG9mZiB0aGUgTFJVIGR1cmluZyBtaWdyYXRpb24gb3JcXG4rY29tcGFjdGlvbi4gIFN1Y2ggcGFnZXMgc3RpbGwgZ28gdGhyb3VnaCB0aGUgc3RhbmRhcmRcXG4rTUZfTVNHX0dFVF9IV1BPSVNPTiBwYXRoOiBgYFBHX2h3cG9pc29uYGAgaXMgc2V0IG9uIHRoZW0gYW5kIGFcXG4rZGVsYXllZCBjcmFzaCBvbiB0aGUgbmV4dCBhY2Nlc3MgcmVtYWlucyBwb3NzaWJsZS4gIENvdmVyYWdlIG1heVxcbitncm93IGFzIHRoZSBoYW5kbGVyIGdhaW5zIHN0cm9uZ2VyIGtlcm5lbC1vd25lcnNoaXAgc2lnbmFscy5cXG4rXFxuK1JlY292ZXJhYmxlIGZhaWx1cmUgcGF0aHMgYXJlIGFsc28gaW50ZW50aW9uYWxseSBsZWZ0IG91dDogaW4tZmxpZ2h0XFxuK2J1ZGR5IGFsbG9jYXRpb25zIGFuZCBvdGhlciB0cmFuc2llbnQgcmFjZXMgd2l0aCB0aGUgcGFnZSBhbGxvY2F0b3JcXG4rY2FuIHJlYWNoIHRoZSBzYW1lIGRpYWdub3N0aWMsIGFuZCBwYW5pY2tpbmcgb24gdGhlbSB3b3VsZCByaXNrXFxuK2tpbGxpbmcgdGhlIGJveCBmb3IgYSBwYWdlIGRlc3RpbmVkIGZvciB1c2Vyc3BhY2Ugd2hlcmUgdGhlIHN0YW5kYXJkXFxuK1NJR0JVUyByZWNvdmVyeSBwYXRoIGFwcGxpZXMuICBQYWdlcyB3aG9zZSBzdGF0ZSBjb3VsZCBub3QgYmVcXG4rY2xhc3NpZmllZCBhdCBhbGwgYXJlIG5vdCBjb3ZlcmVkIGVpdGhlciwgc2luY2UgYW4gdW5rbm93biBzdGF0ZSBpc1xcbitub3QgYSBzb3VuZCBiYXNpcyBmb3IgYSBwYW5pYyBkZWNpc2lvbi5cXG4rXFxuK0ZvciBtYW55IGVudmlyb25tZW50cyBpdCBpcyBwcmVmZXJhYmxlIHRvIHBhbmljIGltbWVkaWF0ZWx5IHdpdGggYSBjbGVhblxcbitjcmFzaCBkdW1wIHRoYXQgY2FwdHVyZXMgdGhlIG9yaWdpbmFsIGVycm9yIGNvbnRleHQsIHJhdGhlciB0aGFuIHRvXFxuK2NvbnRpbnVlIGFuZCBmYWNlIGEgcmFuZG9tIGNyYXNoIGxhdGVyIHdob3NlIGNhdXNlIGlzIGRpZmZpY3VsdCB0b1xcbitkaWFnbm9zZS5cXG4rXFxuK1VzZSBjYXNlc1xcbistLS0tLS0tLS1cXG4rXFxuK1RoaXMgb3B0aW9uIGlzIG1vc3QgdXNlZnVsIGluIGVudmlyb25tZW50cyB3aGVyZSB1bmF0dHJpYnV0ZWQgY3Jhc2hlc1xcbithcmUgZXhwZW5zaXZlIHRvIGRlYnVnIG9yIHdoZXJlIGRhdGEgaW50ZWdyaXR5IG11c3QgdGFrZSBwcmVjZWRlbmNlXFxuK292ZXIgYXZhaWxhYmlsaXR5OlxcbitcXG4rKiBMYXJnZSBmbGVldHMsIHdoZXJlIG11bHRpLWJpdCBFQ0MgZXJyb3JzIG9uIGtlcm5lbCBwYWdlcyBhcmUgb2JzZXJ2ZWRcXG4rICByZWd1bGFybHkgYW5kIHBvc3QtbW9ydGVtIGFuYWx5c2lzIG9mIGFuIHVucmVsYXRlZCBkb3duc3RyZWFtIGNyYXNoXFxuKyAgKG9mdGVuIHNlY29uZHMgdG8gbWludXRlcyBhZnRlciB0aGUgb3JpZ2luYWwgZXJyb3IpIGNvbnN1bWVzXFxuKyAgc2lnbmlmaWNhbnQgZW5naW5lZXJpbmcgZWZmb3J0LlxcbitcXG4rKiBTeXN0ZW1zIGNvbmZpZ3VyZWQgd2l0aCBrZHVtcCwgd2hlcmUgcGFuaWNraW5nIGF0IHRoZSBtb21lbnQgb2YgdGhlXFxuKyAgaGFyZHdhcmUgZXJyb3IgcHJvZHVjZXMgYSB2bWNvcmUgdGhhdCBzdGlsbCBjb250YWlucyB0aGUgZmF1bHRpbmdcXG4rICBhZGRyZXNzLCB0aGUgYWZmZWN0ZWQgcGFnZSBzdGF0ZSwgYW5kIHRoZSBvcmlnaW5hdGluZyBNQ0UvR0hFU1xcbisgIHJlY29yZCDigJQgY29udGV4dCB0aGF0IGlzIHR5cGljYWxseSBsb3N0IGJ5IHRoZSB0aW1lIGEgZGVsYXllZCBjcmFzaFxcbisgIG9jY3Vycy5cXG4rXFxuKyogSGlnaC1hdmFpbGFiaWxpdHkgY2x1c3RlcnMgdGhhdCByZWx5IG9uIGZhc3QsIGRldGVybWluaXN0aWMgbm9kZVxcbisgIGZhaWx1cmUgZm9yIGZhaWxvdmVyLCBhbmQgcHJlZmVyIGFuIGltbWVkaWF0ZSBwYW5pYyBvdmVyIHNpbGVudCBkYXRhXFxuKyAgY29ycnVwdGlvbiBwcm9wYWdhdGluZyB0byByZXBsaWNhcyBvciBwZXJzaXN0ZW50IHN0b3JhZ2UuXFxuK1xcbisqIEtlcm5lbCBhbmQgcGxhdGZvcm0gZGV2ZWxvcGVycyByZXByb2R1Y2luZyBod3BvaXNvbiBpc3N1ZXMgd2l0aFxcbisgIHRvb2xzIHN1Y2ggYXMgYGBtY2UtaW5qZWN0YGAgb3IgZXJyb3ItaW5qZWN0aW9uIGRlYnVnZnMgaW50ZXJmYWNlcyxcXG4rICB3aGVyZSBwYW5pY2tpbmcgb24gdGhlIHVucmVjb3ZlcmFibGUgcGF0aCBtYWtlcyByZWdyZXNzaW9uc1xcbisgIGltbWVkaWF0ZWx5IHZpc2libGUgaW5zdGVhZCBvZiBzdXJmYWNpbmcgYXMgbGF0ZXIsIHVucmVsYXRlZFxcbisgIGZhaWx1cmVzLlxcbitcXG4rPSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rMCBUcnkgdG8gY29udGludWUgb3BlcmF0aW9uIChkZWZhdWx0KS5cXG4rMSBQYW5pYyBpbW1lZGlhdGVseS4gIElmIHRoZSBgYHBhbmljYGAgc3lzY3RsIGlzIGFsc28gbm9uLXplcm8gdGhlbiB0aGVcXG4rICBtYWNoaW5lIHdpbGwgYmUgcmVib290ZWQuXFxuKz0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK1xcbitFeGFtcGxlOjpcXG4rXFxuKyAgICAgZWNobyAxIFxcdTAwM2UgL3Byb2Mvc3lzL3ZtL3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmVcXG4rXFxuK1xcbiBwZXJjcHVfcGFnZWxpc3RfaGlnaF9mcmFjdGlvblxcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmNcXG5pbmRleCA1MTUwOGE1NWM0MDU1ZS4uZTA5N2ZjODI2MmNmODMgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbisrKyBiL21tL21lbW9yeS1mYWlsdXJlLmNcXG5AQCAtNzQsNiArNzQsOCBAQCBzdGF0aWMgaW50IHN5c2N0bF9tZW1vcnlfZmFpbHVyZV9yZWNvdmVyeSBfX3JlYWRfbW9zdGx5ID0gMTtcXG4gXFxuIHN0YXRpYyBpbnQgc3lzY3RsX2VuYWJsZV9zb2Z0X29mZmxpbmUgX19yZWFkX21vc3RseSA9IDE7XFxuIFxcbitzdGF0aWMgaW50IHN5c2N0bF9wYW5pY19vbl91bnJlY292ZXJhYmxlX21mIF9fcmVhZF9tb3N0bHk7XFxuK1xcbiBhdG9taWNfbG9uZ190IG51bV9wb2lzb25lZF9wYWdlcyBfX3JlYWRfbW9zdGx5ID0gQVRPTUlDX0xPTkdfSU5JVCgwKTtcXG4gXFxuIHN0YXRpYyBib29sIGh3X21lbW9yeV9mYWlsdXJlIF9fcmVhZF9tb3N0bHkgPSBmYWxzZTtcXG5AQCAtMTU1LDYgKzE1NywxNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBtZW1vcnlfZmFpbHVyZV90YWJsZVtdID0ge1xcbiBcXHRcXHQucHJvY19oYW5kbGVyXFx0PSBwcm9jX2RvaW50dmVjX21pbm1heCxcXG4gXFx0XFx0LmV4dHJhMVxcdFxcdD0gU1lTQ1RMX1pFUk8sXFxuIFxcdFxcdC5leHRyYTJcXHRcXHQ9IFNZU0NUTF9PTkUsXFxuK1xcdH0sXFxuK1xcdHtcXG4rXFx0XFx0LnByb2NuYW1lXFx0PSBcXFwicGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZVxcXCIsXFxuK1xcdFxcdC5kYXRhXFx0XFx0PSBcXHUwMDI2c3lzY3RsX3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWYsXFxuK1xcdFxcdC5tYXhsZW5cXHRcXHQ9IHNpemVvZihzeXNjdGxfcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZiksXFxuK1xcdFxcdC5tb2RlXFx0XFx0PSAwNjQ0LFxcbitcXHRcXHQucHJvY19oYW5kbGVyXFx0PSBwcm9jX2RvaW50dmVjX21pbm1heCxcXG4rXFx0XFx0LmV4dHJhMVxcdFxcdD0gU1lTQ1RMX1pFUk8sXFxuK1xcdFxcdC5leHRyYTJcXHRcXHQ9IFNZU0NUTF9PTkUsXFxuIFxcdH1cXG4gfTtcXG4gXFxuQEAgLTk4MCwxNyArOTkxLDYgQEAgc3RhdGljIGJvb2wgaGFzX2V4dHJhX3JlZmNvdW50KHN0cnVjdCBwYWdlX3N0YXRlICpwcywgc3RydWN0IHBhZ2UgKnAsXFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4tLypcXG4tICogRXJyb3IgaGl0IGtlcm5lbCBwYWdlLlxcbi0gKiBEbyBub3RoaW5nLCB0cnkgdG8gYmUgbHVja3kgYW5kIG5vdCB0b3VjaCB0aGlzIGluc3RlYWQuIEZvciBhIGZldyBjYXNlcyB3ZVxcbi0gKiBjb3VsZCBiZSBtb3JlIHNvcGhpc3RpY2F0ZWQuXFxuLSAqL1xcbi1zdGF0aWMgaW50IG1lX2tlcm5lbChzdHJ1Y3QgcGFnZV9zdGF0ZSAqcHMsIHN0cnVjdCBwYWdlICpwKVxcbi17XFxuLVxcdHVubG9ja19wYWdlKHApO1xcbi1cXHRyZXR1cm4gTUZfSUdOT1JFRDtcXG4tfVxcbi1cXG4gLypcXG4gICogUGFnZSBpbiB1bmtub3duIHN0YXRlLiBEbyBub3RoaW5nLlxcbiAgKiBUaGlzIGlzIGEgY2F0Y2gtYWxsIGluIGNhc2Ugd2UgZmFpbCB0byBtYWtlIHNlbnNlIG9mIHRoZSBwYWdlIHN0YXRlLlxcbkBAIC0xMTk5LDEwICsxMTk5LDggQEAgc3RhdGljIGludCBtZV9odWdlX3BhZ2Uoc3RydWN0IHBhZ2Vfc3RhdGUgKnBzLCBzdHJ1Y3QgcGFnZSAqcClcXG4gI2RlZmluZSBtbG9ja1xcdFxcdCgxVUwgXFx1MDAzY1xcdTAwM2MgUEdfbWxvY2tlZClcXG4gI2RlZmluZSBscnVcXHRcXHQoMVVMIFxcdTAwM2NcXHUwMDNjIFBHX2xydSlcXG4gI2RlZmluZSBoZWFkXFx0XFx0KDFVTCBcXHUwMDNjXFx1MDAzYyBQR19oZWFkKVxcbi0jZGVmaW5lIHJlc2VydmVkXFx0KDFVTCBcXHUwMDNjXFx1MDAzYyBQR19yZXNlcnZlZClcXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgcGFnZV9zdGF0ZSBlcnJvcl9zdGF0ZXNbXSA9IHtcXG4tXFx0eyByZXNlcnZlZCxcXHRyZXNlcnZlZCxcXHRNRl9NU0dfS0VSTkVMLFxcdG1lX2tlcm5lbCB9LFxcbiBcXHQvKlxcbiBcXHQgKiBmcmVlIHBhZ2VzIGFyZSBzcGVjaWFsbHkgZGV0ZWN0ZWQgb3V0c2lkZSB0aGlzIHRhYmxlOlxcbiBcXHQgKiBQR19idWRkeSBwYWdlcyBvbmx5IG1ha2UgYSBzbWFsbCBmcmFjdGlvbiBvZiBhbGwgZnJlZSBwYWdlcy5cXG5AQCAtMTIzNCw3ICsxMjMyLDYgQEAgc3RhdGljIHN0cnVjdCBwYWdlX3N0YXRlIGVycm9yX3N0YXRlc1tdID0ge1xcbiAjdW5kZWYgbWxvY2tcXG4gI3VuZGVmIGxydVxcbiAjdW5kZWYgaGVhZFxcbi0jdW5kZWYgcmVzZXJ2ZWRcXG4gXFxuIHN0YXRpYyB2b2lkIHVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyh1bnNpZ25lZCBsb25nIHBmbixcXG4gXFx0XFx0XFx0XFx0ICAgICBlbnVtIG1mX3Jlc3VsdCByZXN1bHQpXFxuQEAgLTEyNjksNiArMTI2NiwxNSBAQCBzdGF0aWMgdm9pZCB1cGRhdGVfcGVyX25vZGVfbWZfc3RhdHModW5zaWduZWQgbG9uZyBwZm4sXFxuIFxcdCsrbWZfc3RhdHMtXFx1MDAzZXRvdGFsO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBwYW5pY19vbl91bnJlY292ZXJhYmxlX21mKGVudW0gbWZfYWN0aW9uX3BhZ2VfdHlwZSB0eXBlLFxcbitcXHRcXHRcXHRcXHQgICAgICBlbnVtIG1mX3Jlc3VsdCByZXN1bHQpXFxuK3tcXG4rXFx0aWYgKCFzeXNjdGxfcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZilcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0cmV0dXJuIHR5cGUgPT0gTUZfTVNHX0tFUk5FTCBcXHUwMDI2XFx1MDAyNiByZXN1bHQgPT0gTUZfSUdOT1JFRDtcXG4rfVxcbitcXG4gLypcXG4gICogXFxcIkRpcnR5L0NsZWFuXFxcIiBpbmRpY2F0aW9uIGlzIG5vdCAxMDAlIGFjY3VyYXRlIGR1ZSB0byB0aGUgcG9zc2liaWxpdHkgb2ZcXG4gICogc2V0dGluZyBQR19kaXJ0eSBvdXRzaWRlIHBhZ2UgbG9jay4gU2VlIGFsc28gY29tbWVudCBhYm92ZSBzZXRfcGFnZV9kaXJ0eSgpLlxcbkBAIC0xMjg2LDYgKzEyOTIsOSBAQCBzdGF0aWMgaW50IGFjdGlvbl9yZXN1bHQodW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfYWN0aW9uX3BhZ2VfdHlwZSB0eXBlLFxcbiBcXHRwcl9lcnIoXFxcIiUjbHg6IHJlY292ZXJ5IGFjdGlvbiBmb3IgJXM6ICVzXFxcXG5cXFwiLFxcbiBcXHRcXHRwZm4sIGFjdGlvbl9wYWdlX3R5cGVzW3R5cGVdLCBhY3Rpb25fbmFtZVtyZXN1bHRdKTtcXG4gXFxuK1xcdGlmIChwYW5pY19vbl91bnJlY292ZXJhYmxlX21mKHR5cGUsIHJlc3VsdCkpXFxuK1xcdFxcdHBhbmljKFxcXCJNZW1vcnkgZmFpbHVyZTogJSNseDogdW5yZWNvdmVyYWJsZSBwYWdlXFxcIiwgcGZuKTtcXG4rXFxuIFxcdHJldHVybiAocmVzdWx0ID09IE1GX1JFQ09WRVJFRCB8fCByZXN1bHQgPT0gTUZfREVMQVlFRCkgPyAwIDogLUVCVVNZO1xcbiB9XFxuIFxcbkBAIC0xMzM5LDYgKzEzNDgsMzggQEAgc3RhdGljIGlubGluZSBib29sIEhXUG9pc29uSGFuZGxhYmxlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbiBcXHRyZXR1cm4gUGFnZUxSVShwYWdlKSB8fCBpc19mcmVlX2J1ZGR5X3BhZ2UocGFnZSk7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIFBvc2l0aXZlIGlkZW50aWZpY2F0aW9uIG9mIHBhZ2VzIHRoZSBod3BvaXNvbiBoYW5kbGVyIGNhbm5vdCByZWNvdmVyOlxcbisgKiBwYWdlcyBvd25lZCBieSBrZXJuZWwgaW50ZXJuYWxzIHdpdGggbm8gdXNlcnNwYWNlIG1hcHBpbmcgdG8gdW5tYXAsIG5vXFxuKyAqIGZpbGUgbWFwcGluZyB0byBpbnZhbGlkYXRlLCBhbmQgbm8gbWlncmF0aW9uIHRhcmdldC5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19rZXJuZWxfb3duZWRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4re1xcbitcXHRzdHJ1Y3QgcGFnZSAqaGVhZDtcXG4rXFx0Ym9vbCBrZXJuZWxfb3duZWQ7XFxuK1xcbitcXHQvKiBQR19yZXNlcnZlZCBpcyBhIHBlci1wYWdlIGZsYWcsIG5ldmVyIHNldCBvbiBhIGNvbXBvdW5kIHBhZ2UuICovXFxuK1xcdGlmIChQYWdlUmVzZXJ2ZWQocGFnZSkpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUGFnZS10eXBlIGJpdHMgbGl2ZSBvbmx5IG9uIHRoZSBoZWFkIHBhZ2UsIHNvIHJlc29sdmUgYW55IHRhaWxcXG4rXFx0ICogZmlyc3QuICBUaGUgY2hlY2sgdGFrZXMgbm8gcmVmY291bnQ7IHJlY2hlY2sgdGhlIGhlYWQgYWZ0ZXJ3YXJkc1xcbitcXHQgKiBzbyBhIGNvbmN1cnJlbnQgc3BsaXQgb3IgY29tcG91bmQgZnJlZSBjYW5ub3QgbGVhdmUgdXMgdHJ1c3RpbmdcXG4rXFx0ICogYSBzdGFsZSB2aWV3LiAgQSByZXNpZHVhbCBmcmVlLVxcdTAwM2VhbGxvYy1cXHUwMDNlZnJlZSBjYW5ub3QgYmUgY2xvc2VkIGhlcmVcXG4rXFx0ICogKGZyb3plbiBzbGFiIGFuZCBsYXJnZS1rbWFsbG9jIHBhZ2VzIGNhbm5vdCBiZSBwaW5uZWQpLCBidXQgaXNcXG4rXFx0ICogaGFybWxlc3M6IHdoZXJlIGEgd3JvbmcgdmVyZGljdCBjb3VsZCBwYW5pYywgbWVtb3J5X2ZhaWx1cmUoKSBoYXNcXG4rXFx0ICogYWxyZWFkeSBzZXQgUGFnZUhXUG9pc29uLCB3aGljaCBiYXJzIHRoZSBwYWdlIGZyb20gdGhlIGFsbG9jYXRvci5cXG4rXFx0ICovXFxuK3JldHJ5OlxcbitcXHRoZWFkID0gY29tcG91bmRfaGVhZChwYWdlKTtcXG4rXFx0a2VybmVsX293bmVkID0gUGFnZVNsYWIoaGVhZCkgfHwgUGFnZVRhYmxlKGhlYWQpIHx8XFxuK1xcdFxcdCAgICAgICBQYWdlTGFyZ2VLbWFsbG9jKGhlYWQpO1xcbitcXHRpZiAoaGVhZCAhPSBjb21wb3VuZF9oZWFkKHBhZ2UpKVxcbitcXHRcXHRnb3RvIHJldHJ5O1xcbitcXHRyZXR1cm4ga2VybmVsX293bmVkO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IF9fZ2V0X2h3cG9pc29uX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuIHtcXG4gXFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuQEAgLTEzODUsNiArMTQyNiwxOSBAQCBzdGF0aWMgaW50IGdldF9hbnlfcGFnZShzdHJ1Y3QgcGFnZSAqcCwgdW5zaWduZWQgbG9uZyBmbGFncylcXG4gXFx0aWYgKGZsYWdzIFxcdTAwMjYgTUZfQ09VTlRfSU5DUkVBU0VEKVxcbiBcXHRcXHRjb3VudF9pbmNyZWFzZWQgPSB0cnVlO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogUGFnZSB0eXBlcyB3ZSBrbm93IGFyZSBrZXJuZWwtb3duZWQgYW5kIGNhbm5vdCBiZSByZWNvdmVyZWQuXFxuK1xcdCAqIFNob3J0LWNpcmN1aXQgYmVmb3JlIHRoZSBzaGFrZV9wYWdlKCkgLyByZXRyeSBsb29wLCB3aGljaFxcbitcXHQgKiBjYW5ub3QgdHVybiBhbnkgb2YgdGhlc2UgaW50byBzb21ldGhpbmcgSFdQb2lzb25IYW5kbGFibGUoKS5cXG4rXFx0ICogRHJvcCB0aGUgY2FsbGVyJ3MgcmVmZXJlbmNlIGlmIE1GX0NPVU5UX0lOQ1JFQVNFRCB0b29rIG9uZS5cXG4rXFx0ICovXFxuK1xcdGlmIChpc19rZXJuZWxfb3duZWRfcGFnZShwKSkge1xcbitcXHRcXHRpZiAoY291bnRfaW5jcmVhc2VkKVxcbitcXHRcXHRcXHRwdXRfcGFnZShwKTtcXG4rXFx0XFx0cmV0ID0gLUVOT1RSRUNPVkVSQUJMRTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuIHRyeV9hZ2FpbjpcXG4gXFx0aWYgKCFjb3VudF9pbmNyZWFzZWQpIHtcXG4gXFx0XFx0cmV0ID0gX19nZXRfaHdwb2lzb25fcGFnZShwLCBmbGFncyk7XFxuQEAgLTE0MzIsNyArMTQ4Niw3IEBAIHN0YXRpYyBpbnQgZ2V0X2FueV9wYWdlKHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbiBcXHRcXHRyZXQgPSAtRUlPO1xcbiBcXHR9XFxuIG91dDpcXG4tXFx0aWYgKHJldCA9PSAtRUlPKVxcbitcXHRpZiAocmV0ID09IC1FSU8gfHwgcmV0ID09IC1FTk9UUkVDT1ZFUkFCTEUpXFxuIFxcdFxcdHByX2VycihcXFwiJSNseDogdW5oYW5kbGFibGUgcGFnZS5cXFxcblxcXCIsIHBhZ2VfdG9fcGZuKHApKTtcXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuQEAgLTE0ODksNyArMTU0MywxMCBAQCBzdGF0aWMgaW50IF9fZ2V0X3VucG9pc29uX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuICAqICAgICAgICAgLUVJTyBmb3IgcGFnZXMgb24gd2hpY2ggd2UgY2FuIG5vdCBoYW5kbGUgbWVtb3J5IGVycm9ycyxcXG4gICogICAgICAgICAtRUJVU1kgd2hlbiBnZXRfaHdwb2lzb25fcGFnZSgpIGhhcyByYWNlZCB3aXRoIHBhZ2UgbGlmZWN5Y2xlXFxuICAqICAgICAgICAgb3BlcmF0aW9ucyBsaWtlIGFsbG9jYXRpb24gYW5kIGZyZWUsXFxuLSAqICAgICAgICAgLUVIV1BPSVNPTiB3aGVuIHRoZSBwYWdlIGlzIGh3cG9pc29uZWQgYW5kIHRha2VuIG9mZiBmcm9tIGJ1ZGR5LlxcbisgKiAgICAgICAgIC1FSFdQT0lTT04gd2hlbiB0aGUgcGFnZSBpcyBod3BvaXNvbmVkIGFuZCB0YWtlbiBvZmYgZnJvbSBidWRkeSxcXG4rICogICAgICAgICAtRU5PVFJFQ09WRVJBQkxFIGZvciBrZXJuZWwtb3duZWQgcGFnZXMgaWRlbnRpZmllZCBieVxcbisgKiAgICAgICAgIGlzX2tlcm5lbF9vd25lZF9wYWdlKCkgKFBHX3Jlc2VydmVkLCBzbGFiLFxcbisgKiAgICAgICAgIHBhZ2UtdGFibGUsIGxhcmdlLWttYWxsb2MpIHRoYXQgdGhlIGhhbmRsZXIgY2Fubm90IHJlY292ZXIuXFxuICAqL1xcbiBzdGF0aWMgaW50IGdldF9od3BvaXNvbl9wYWdlKHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbiB7XFxuQEAgLTI0MDIsNyArMjQ1OSw4IEBAIGludCBtZW1vcnlfZmFpbHVyZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxcbiBcXHQgKiB0aGF0IG1heSBtYWtlIHBhZ2VfcmVmX2ZyZWV6ZSgpL3BhZ2VfcmVmX3VuZnJlZXplKCkgbWlzbWF0Y2guXFxuIFxcdCAqL1xcbiBcXHRyZXMgPSBnZXRfaHdwb2lzb25fcGFnZShwLCBmbGFncyk7XFxuLVxcdGlmICghcmVzKSB7XFxuK1xcdHN3aXRjaCAocmVzKSB7XFxuK1xcdGNhc2UgMDpcXG4gXFx0XFx0aWYgKGlzX2ZyZWVfYnVkZHlfcGFnZShwKSkge1xcbiBcXHRcXHRcXHRpZiAodGFrZV9wYWdlX29mZl9idWRkeShwKSkge1xcbiBcXHRcXHRcXHRcXHRwYWdlX3JlZl9pbmMocCk7XFxuQEAgLTI0MjEsNyArMjQ3OSwxOSBAQCBpbnQgbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG4gXFx0XFx0XFx0cmVzID0gYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19LRVJORUxfSElHSF9PUkRFUiwgTUZfSUdOT1JFRCk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0Z290byB1bmxvY2tfbXV0ZXg7XFxuLVxcdH0gZWxzZSBpZiAocmVzIFxcdTAwM2MgMCkge1xcbitcXHRjYXNlIDE6XFxuK1xcdFxcdC8qIEdvdCBhIHJlZmNvdW50IG9uIGEgaGFuZGxhYmxlIHBhZ2UuICovXFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIC1FTk9UUkVDT1ZFUkFCTEU6XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFN0YWJsZSB1bmhhbmRsYWJsZSBrZXJuZWwtb3duZWQgcGFnZSAoUEdfcmVzZXJ2ZWQsXFxuK1xcdFxcdCAqIHNsYWIsIHBhZ2UgdGFibGVzLCBsYXJnZS1rbWFsbG9jKS5cXG4rXFx0XFx0ICogTm8gcmVjb3ZlcnkgcG9zc2libGUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRyZXMgPSBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0tFUk5FTCwgTUZfSUdOT1JFRCk7XFxuK1xcdFxcdGdvdG8gdW5sb2NrX211dGV4O1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHQvKiBUcmFuc2llbnQgbGlmZWN5Y2xlIHJhY2Ugd2l0aCB0aGUgcGFnZSBhbGxvY2F0b3IuICovXFxuIFxcdFxcdHJlcyA9IGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfR0VUX0hXUE9JU09OLCBNRl9JR05PUkVEKTtcXG4gXFx0XFx0Z290byB1bmxvY2tfbXV0ZXg7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxcbmluZGV4IGU2ZGY5NjhmMDk3MWM4Li5lZDMyMWFlNzA5ZGFjZiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXFxuQEAgLTE3NCw2ICsxNzQsMTAgQEAgVEVTVF9QUk9HUyArPSBrc2Z0X3VzZXJmYXVsdGZkLnNoXFxuIFRFU1RfUFJPR1MgKz0ga3NmdF92bWFfbWVyZ2Uuc2hcXG4gVEVTVF9QUk9HUyArPSBrc2Z0X3ZtYWxsb2Muc2hcXG4gXFxuKyMgRGVzdHJ1Y3RpdmU6IGV2ZXJ5IHN1Y2Nlc3NmdWwgcnVuIHBhbmljcyB0aGUga2VybmVsLiAgSW5zdGFsbGVkIGFuZFxcbisjIGtlcHQgZXhlY3V0YWJsZSwgYnV0IG5vdCBydW4gZnJvbSBhIGRlZmF1bHQga3NlbGZ0ZXN0IGludm9jYXRpb24uXFxuK1RFU1RfUFJPR1NfRVhURU5ERUQgKz0gaHdwb2lzb24tcGFuaWMuc2hcXG4rXFxuIFRFU1RfRklMRVMgOj0gdGVzdF92bWFsbG9jLnNoXFxuIFRFU1RfRklMRVMgKz0gdGVzdF9obW0uc2hcXG4gVEVTVF9GSUxFUyArPSB2YV9oaWdoX2FkZHJfc3dpdGNoLnNoXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h3cG9pc29uLXBhbmljLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHdwb2lzb24tcGFuaWMuc2hcXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5kOTUzZDEzNjczMzI0NFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9od3BvaXNvbi1wYW5pYy5zaFxcbkBAIC0wLDAgKzEsMjU1IEBAXFxuKyMhL2Jpbi9iYXNoXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI1xcbisjIFZlcmlmeSB2bS5wYW5pY19vbl91bnJlY292ZXJhYmxlX21lbW9yeV9mYWlsdXJlIGJ5IGluamVjdGluZyBhIGh3cG9pc29uXFxuKyMgZXJyb3Igb24gYSBrZXJuZWwtb3duZWQgcGFnZSBhbmQgY29uZmlybWluZyB0aGUga2VybmVsIHBhbmljcy5cXG4rI1xcbisjIFRocmVlIFxcXCJraW5kc1xcXCIgb2Yga2VybmVsLW93bmVkIHBhZ2UgY2FuIGJlIHRhcmdldGVkLCBzZWxlY3RhYmxlIHZpYSB0aGVcXG4rIyBmaXJzdCBwb3NpdGlvbmFsIGFyZ3VtZW50IChkZWZhdWx0OiByb2RhdGEpOlxcbisjXFxuKyMgICByb2RhdGEgIC0gYSBQR19yZXNlcnZlZCBwYWdlIGluIHRoZSBrZXJuZWwgcm9kYXRhIHJhbmdlXFxuKyMgICAgICAgICAgICAgKHNvdXJjZWQgZnJvbSAvcHJvYy9pb21lbSBcXFwiS2VybmVsIHJvZGF0YVxcXCIpLiAgRXhlcmNpc2VzXFxuKyMgICAgICAgICAgICAgbWVtb3J5X2ZhaWx1cmUoKSAtXFx1MDAzZSBnZXRfYW55X3BhZ2UoKSBvbiBhIFBhZ2VSZXNlcnZlZCBwYWdlLlxcbisjXFxuKyMgICBzbGFiICAgIC0gYSBzbGFiIHBhZ2UgZm91bmQgdmlhIC9wcm9jL2twYWdlZmxhZ3MgKEtQRl9TTEFCKS5cXG4rIyAgICAgICAgICAgICBFeGVyY2lzZXMgbWVtb3J5X2ZhaWx1cmUoKSAtXFx1MDAzZSBnZXRfYW55X3BhZ2UoKSBvbiBhIG5vblxcbisjICAgICAgICAgICAgIFBHX3Jlc2VydmVkIGtlcm5lbC1vd25lZCBwYWdlLiAgVGhpcyBwYXRoIGlzIHdoYXQgY2F0Y2hlc1xcbisjICAgICAgICAgICAgIHJlZ3Jlc3Npb25zIHdoZXJlIGdldF9hbnlfcGFnZSgpIGNvbGxhcHNlcyBrZXJuZWwtb3duZWRcXG4rIyAgICAgICAgICAgICBwYWdlcyBpbnRvIGEgdHJhbnNpZW50IC1FSU8gaW5zdGVhZCBvZiAtRU5PVFJFQ09WRVJBQkxFLlxcbisjXFxuKyMgICBwZ3RhYmxlIC0gYSBwYWdlLXRhYmxlIHBhZ2UgZm91bmQgdmlhIC9wcm9jL2twYWdlZmxhZ3MgKEtQRl9QR1RBQkxFKS5cXG4rIyAgICAgICAgICAgICBTYW1lIHBhdGggYXMgc2xhYiwgZGlmZmVyZW50IHBhZ2UgdHlwZS5cXG4rI1xcbisjIFRoaXMgdGVzdCBpcyBERVNUUlVDVElWRTogYSBzdWNjZXNzZnVsIHJ1biBjcmFzaGVzIHRoZSBrZXJuZWwuICBJdCBpc1xcbisjIG1lYW50IHRvIGJlIGV4ZWN1dGVkIGluc2lkZSBhIGRpc3Bvc2FibGUgVk0gKGUuZy4gdmlydG1lLW5nKSB3aXRoIGFcXG4rIyBzZXJpYWwgY29uc29sZSBjYXB0dXJlZCBieSB0aGUgaGFybmVzcy4gIEl0IGlzIHNraXBwZWQgdW5sZXNzIHRoZVxcbisjIGNhbGxlciBvcHRzIGluIHZpYSBSVU5fREVTVFJVQ1RJVkU9MS5cXG4rI1xcbisjIFRlc3QgcGFzc2VzIGV4dGVybmFsbHk6IHRoZSBrZXJuZWwgbXVzdCBwYW5pYyB3aXRoXFxuKyMgICBcXFwiTWVtb3J5IGZhaWx1cmU6IFxcdTAwM2NwZm5cXHUwMDNlOiB1bnJlY292ZXJhYmxlIHBhZ2VcXFwiXFxuKyMgQSByZXR1cm4gZnJvbSB0aGUgaW5qZWN0IG1lYW5zIG5vIHBhbmljIGZpcmVkOiB0aGF0IGlzIGEgZmFpbHVyZSxcXG4rIyB1bmxlc3MgdGhlIHRhcmdldCBQRk4gcmFjZWQgdG8gYSBkaWZmZXJlbnQgcGFnZSB0eXBlIGJlZm9yZSBpbmplY3Rpb24sXFxuKyMgaW4gd2hpY2ggY2FzZSB0aGUgcnVuIGlzIGluY29uY2x1c2l2ZSBhbmQgaXMgc2tpcHBlZC5cXG4rI1xcbisjIEF1dGhvcjogQnJlbm8gTGVpdGFvIFxcdTAwM2NsZWl0YW9AZGViaWFuLm9yZ1xcdTAwM2VcXG4rXFxuK3NldCAtdVxcbitcXG4rIyBLVEFQIG91dHB1dCBoZWxwZXJzIChrdGFwX3ByaW50X21zZywga3RhcF9za2lwX2FsbCwga3RhcF9leGl0X2ZhaWxfbXNnLCAuLi4pLlxcbitESVI9XFxcIiQoZGlybmFtZSBcXFwiJChyZWFkbGluayAtZiBcXFwiJDBcXFwiKVxcXCIpXFxcIlxcbisjIHNoZWxsY2hlY2sgc291cmNlPS4uL2tzZWxmdGVzdC9rdGFwX2hlbHBlcnMuc2hcXG4rc291cmNlIFxcXCIke0RJUn1cXFwiLy4uL2tzZWxmdGVzdC9rdGFwX2hlbHBlcnMuc2hcXG4rXFxuK3N5c2N0bF9wYXRoPS9wcm9jL3N5cy92bS9wYW5pY19vbl91bnJlY292ZXJhYmxlX21lbW9yeV9mYWlsdXJlXFxuK2luamVjdF9wYXRoPS9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2hhcmRfb2ZmbGluZV9wYWdlXFxuK2twYWdlZmxhZ3NfcGF0aD0vcHJvYy9rcGFnZWZsYWdzXFxuK3VucG9pc29uX3BhdGg9L3N5cy9rZXJuZWwvZGVidWcvaHdwb2lzb24vdW5wb2lzb24tcGZuXFxuK1xcbisjIC9wcm9jL2twYWdlZmxhZ3MgYml0IHBvc2l0aW9ucyAoc2VlIGluY2x1ZGUvdWFwaS9saW51eC9rZXJuZWwtcGFnZS1mbGFncy5oKVxcbitLUEZfU0xBQj03XFxuK0tQRl9DT01QT1VORF9UQUlMPTE2XFxuK0tQRl9IV1BPSVNPTj0xOVxcbitLUEZfTk9QQUdFPTIwXFxuK0tQRl9QR1RBQkxFPTI2XFxuK0tQRl9SRVNFUlZFRD0zMlxcbitcXG4rcGFnZXNpemU9JChnZXRjb25mIFBBR0VfU0laRSlcXG4rXFxuK2tpbmQ9JHsxOi1yb2RhdGF9XFxuK1xcbitpZiBbIFxcXCIkKGlkIC11KVxcXCIgLW5lIDAgXTsgdGhlblxcbitcXHRrdGFwX3NraXBfYWxsIFxcXCJtdXN0IHJ1biBhcyByb290XFxcIlxcbitcXHRleGl0IFxcXCIkS1NGVF9TS0lQXFxcIlxcbitmaVxcbitcXG4raWYgWyAhIC13IFxcXCIkc3lzY3RsX3BhdGhcXFwiIF07IHRoZW5cXG4rXFx0a3RhcF9za2lwX2FsbCBcXFwiJHN5c2N0bF9wYXRoIG5vdCBwcmVzZW50IChrZXJuZWwgd2l0aG91dCB0aGUgc3lzY3RsPylcXFwiXFxuK1xcdGV4aXQgXFxcIiRLU0ZUX1NLSVBcXFwiXFxuK2ZpXFxuK1xcbitpZiBbICEgLXcgXFxcIiRpbmplY3RfcGF0aFxcXCIgXTsgdGhlblxcbitcXHRrdGFwX3NraXBfYWxsIFxcXCIkaW5qZWN0X3BhdGggbm90IHByZXNlbnQgKG5vIE1FTU9SWV9IT1RQTFVHPylcXFwiXFxuK1xcdGV4aXQgXFxcIiRLU0ZUX1NLSVBcXFwiXFxuK2ZpXFxuK1xcbitpZiBbIFxcXCIke1JVTl9ERVNUUlVDVElWRTotMH1cXFwiICE9IFxcXCIxXFxcIiBdOyB0aGVuXFxuK1xcdGt0YXBfc2tpcF9hbGwgXFxcImRlc3RydWN0aXZlIHRlc3Q7IHJlLXJ1biB3aXRoIFJVTl9ERVNUUlVDVElWRT0xIGluc2lkZSBhIGRpc3Bvc2FibGUgVk1cXFwiXFxuK1xcdGV4aXQgXFxcIiRLU0ZUX1NLSVBcXFwiXFxuK2ZpXFxuK1xcbisjIFBpY2sgYSBQRk4gaW5zaWRlIHRoZSBrZXJuZWwgaW1hZ2Ugcm9kYXRhIHJlZ2lvbiBvZiAvcHJvYy9pb21lbS5cXG4rIyBUaGlzIGlzIHByZWZlcnJlZCBvdmVyIGEgdG9wLWxldmVsIFxcXCJSZXNlcnZlZFxcXCIgZW50cnkgYmVjYXVzZSB0b3AtbGV2ZWxcXG4rIyBSZXNlcnZlZCByYW5nZXMgYXJlIG9mdGVuIGZpcm13YXJlIGhvbGVzIHRoYXQgaGF2ZSBubyBiYWNraW5nIHN0cnVjdFxcbisjIHBhZ2U7IHBmbl90b19vbmxpbmVfcGFnZSgpIHJldHVybnMgTlVMTCBvbiB0aG9zZSBhbmQgbWVtb3J5X2ZhaWx1cmUoKVxcbisjIGJhaWxzIG91dCB3aXRoIC1FTlhJTyBiZWZvcmUgcmVhY2hpbmcgdGhlIHBhbmljIHBhdGguXFxuKyNcXG4rIyBcXFwiS2VybmVsIHJvZGF0YVxcXCIgaXMgcmVwb3J0ZWQgYXMgYSBzdWItcmVzb3VyY2Ugb2YgXFxcIlN5c3RlbSBSQU1cXFwiIG9uIGV2ZXJ5XFxuKyMgbWFqb3IgYXJjaGl0ZWN0dXJlLCB3aGljaCBndWFyYW50ZWVzOlxcbisjICAgLSB0aGUgUEZOIGlzIGJhY2tlZCBieSBzdHJ1Y3QgcGFnZSAod2l0aGluIGFuIG9ubGluZSBtZW1vcnkgcmFuZ2UpO1xcbisjICAgLSBQR19yZXNlcnZlZCBpcyBzZXQgb24gdGhlIHBhZ2UgKGtlcm5lbCBpbWFnZSBhcmVhKTtcXG4rIyAgIC0gdGhlIG1lbW9yeSBpcyByZWFkLW9ubHksIHNvIHNldHRpbmcgUEdfaHdwb2lzb24gb24gaXQgZG9lcyBub3RcXG4rIyAgICAgY29ycnVwdCB3cml0YWJsZSBrZXJuZWwgc3RhdGUgaWYgdGhlIHBhbmljIHNvbWVob3cgZG9lcyBub3QgZmlyZS5cXG4rI1xcbisjIC9wcm9jL2lvbWVtIGVudHJpZXMgbG9vayBsaWtlIChpbmRlbnRlZCBmb3Igc3ViLXJlc291cmNlcyk6XFxuKyMgICAgIFxcXCIgIDAyNTAwMDAwLTAyZmZmZmZmIDogS2VybmVsIHJvZGF0YVxcXCJcXG4rcGlja19yb2RhdGFfcGh5c19hZGRyKCkge1xcbitcXHRhd2sgLXYgcGFnZXNpemU9XFxcIiQoZ2V0Y29uZiBQQUdFX1NJWkUpXFxcIiAnXFxuK1xcdCMgQ29udmVydCBhIGhleCBzdHJpbmcgdG8gYSBudW1iZXIgd2l0aG91dCByZWx5aW5nIG9uIHRoZSBnYXdrLW9ubHlcXG4rXFx0IyBzdHJ0b251bSgpLiAgbWF3ayBsYWNrcyBpdCBhbmQgd291bGQgb3RoZXJ3aXNlIHNwdXJpb3VzbHkgc2tpcFxcbitcXHQjIHRoaXMgdGVzdCBvbiBkaXN0cm9zIHRoYXQgc2hpcCBtYXdrIGFzIC91c3IvYmluL2F3ay5cXG4rXFx0ZnVuY3Rpb24gaGV4Mm51bShzLCAgIG4sIGksIGMsIHYpIHtcXG4rXFx0XFx0biA9IDBcXG4rXFx0XFx0Zm9yIChpID0gMTsgaSBcXHUwMDNjPSBsZW5ndGgocyk7IGkrKykge1xcbitcXHRcXHRcXHRjID0gdG9sb3dlcihzdWJzdHIocywgaSwgMSkpXFxuK1xcdFxcdFxcdHYgPSBpbmRleChcXFwiMDEyMzQ1Njc4OWFiY2RlZlxcXCIsIGMpIC0gMVxcbitcXHRcXHRcXHRpZiAodiBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdHJldHVybiAtMVxcbitcXHRcXHRcXHRuID0gbiAqIDE2ICsgdlxcbitcXHRcXHR9XFxuK1xcdFxcdHJldHVybiBuXFxuK1xcdH1cXG4rXFx0LzogS2VybmVsIHJvZGF0YVtbOnNwYWNlOl1dKiQvIHtcXG4rXFx0XFx0c3ViKC9eW1s6c3BhY2U6XV0rLywgXFxcIlxcXCIpXFxuK1xcdFxcdG4gPSBzcGxpdCgkMCwgYSwgL1stIF0vKVxcbitcXHRcXHRzdGFydCA9IGhleDJudW0oYVsxXSlcXG4rXFx0XFx0ZW5kICAgPSBoZXgybnVtKGFbMl0pXFxuK1xcdFxcdGlmIChlbmQgXFx1MDAzYz0gc3RhcnQpXFxuK1xcdFxcdFxcdG5leHRcXG4rXFx0XFx0IyBQYWdlLWFsaWduIHVwd2FyZCBhbmQgZW1pdCB0aGUgZmlyc3QgYnl0ZSBvZiB0aGF0IHBhZ2UuXFxuK1xcdFxcdHBmbiA9IGludCgoc3RhcnQgKyBwYWdlc2l6ZSAtIDEpIC8gcGFnZXNpemUpXFxuK1xcdFxcdHByaW50ZiBcXFwiMHgleFxcXFxuXFxcIiwgcGZuICogcGFnZXNpemVcXG4rXFx0XFx0ZXhpdCAwXFxuK1xcdH1cXG4rXFx0JyAvcHJvYy9pb21lbVxcbit9XFxuK1xcbisjIFdhbGsgL3Byb2Mva3BhZ2VmbGFncyBhbmQgcmV0dXJuIHRoZSBwaHlzIGFkZHIgb2YgdGhlIGZpcnN0IFBGTiB0aGF0XFxuKyMgaGFzIGJpdCAkMSBzZXQsIHdpdGggS1BGX0hXUE9JU09OLCBLUEZfTk9QQUdFIGFuZCBLUEZfQ09NUE9VTkRfVEFJTFxcbisjIGFsbCBjbGVhciAoc28gd2UgYXR0YWNrIGEgcmVhbCwgbm9uLXRhaWwsIG5vdC1hbHJlYWR5LXBvaXNvbmVkIHBhZ2UpLlxcbisjXFxuKyMgV2Ugc2tpcCB0aGUgZmlyc3QgMTYgTWlCIG9mIFBGTnMgdG8gc3RlcCBwYXN0IGxvdy1tZW1vcnkgc3BlY2lhbFxcbisjIHJhbmdlcyAoQklPUy9FRkkvQUNQSS9ldGMuKSB0aGF0IG9mdGVuIGFyZSBQR19yZXNlcnZlZCBhbmQgd291bGQgbm90XFxuKyMgZXhoaWJpdCB0aGUgc2xhYi9wZ3RhYmxlIHR5cGUgd2UgYXJlIGxvb2tpbmcgZm9yLlxcbitwaWNrX2twYWdlZmxhZ3NfcGh5c19hZGRyKCkge1xcbitcXHRsb2NhbCB3YW50X2JpdD0kMVxcbitcXHRsb2NhbCBwYWdlc2l6ZSBza2lwX3BmblxcbitcXG4rXFx0WyAtciBcXFwiJGtwYWdlZmxhZ3NfcGF0aFxcXCIgXSB8fCByZXR1cm5cXG4rXFxuK1xcdHBhZ2VzaXplPSQoZ2V0Y29uZiBQQUdFX1NJWkUpXFxuK1xcdHNraXBfcGZuPSQoKCgxNiAqIDEwMjQgKiAxMDI0KSAvIHBhZ2VzaXplKSlcXG4rXFxuK1xcdG9kIC1BbiAtdHg4IC12IC13OCAtaiBcXFwiJCgoc2tpcF9wZm4gKiA4KSlcXFwiIFxcXCIka3BhZ2VmbGFnc19wYXRoXFxcIiAyXFx1MDAzZS9kZXYvbnVsbCB8IFxcXFxcXG4rXFx0YXdrIC12IHdhbnRfYml0PVxcXCIkd2FudF9iaXRcXFwiIFxcXFxcXG4rXFx0ICAgIC12IGh3cF9iaXQ9XFxcIiRLUEZfSFdQT0lTT05cXFwiIFxcXFxcXG4rXFx0ICAgIC12IG5vcGFnZV9iaXQ9XFxcIiRLUEZfTk9QQUdFXFxcIiBcXFxcXFxuK1xcdCAgICAtdiB0YWlsX2JpdD1cXFwiJEtQRl9DT01QT1VORF9UQUlMXFxcIiBcXFxcXFxuK1xcdCAgICAtdiBiYXNlX3Bmbj1cXFwiJHNraXBfcGZuXFxcIiBcXFxcXFxuK1xcdCAgICAtdiBwYWdlc2l6ZT1cXFwiJHBhZ2VzaXplXFxcIiAnXFxuK1xcdCMgVGVzdCB3aGV0aGVyIGJpdCBcXFwiYlxcXCIgaXMgc2V0IGluIHRoZSAxNi1oZXgtZGlnaXQgdmFsdWUgXFxcImhleFxcXCIuXFxuK1xcdCMgRG9uZSB3aXRoIHN1YnN0cmluZyArIHBlci1kaWdpdCBsb29rdXAgc28gd2UgbmV2ZXIgcmVseSBvbiBhd2tcXG4rXFx0IyBiaXR3aXNlIG9wZXJhdG9ycyAobWF3ayBsYWNrcyB0aGVtKSwgNjQtYml0IEZQIHByZWNpc2lvbiBvciB0aGVcXG4rXFx0IyBnYXdrLW9ubHkgc3RydG9udW0oKS5cXG4rXFx0ZnVuY3Rpb24gYml0X3NldChoZXgsIGIsICAgIGRpLCBiaSwgYywgdikge1xcbitcXHRcXHRkaSA9IGludChiIC8gNClcXG4rXFx0XFx0YmkgPSBiIC0gZGkgKiA0XFxuK1xcdFxcdGMgPSBzdWJzdHIoaGV4LCBsZW5ndGgoaGV4KSAtIGRpLCAxKVxcbitcXHRcXHR2ID0gaW5kZXgoXFxcIjAxMjM0NTY3ODlhYmNkZWZcXFwiLCB0b2xvd2VyKGMpKSAtIDFcXG4rXFx0XFx0aWYgKGJpID09IDApIHJldHVybiAodiAlIDIpID09IDFcXG4rXFx0XFx0aWYgKGJpID09IDEpIHJldHVybiBpbnQodiAvIDIpICUgMiA9PSAxXFxuK1xcdFxcdGlmIChiaSA9PSAyKSByZXR1cm4gaW50KHYgLyA0KSAlIDIgPT0gMVxcbitcXHRcXHRyZXR1cm4gaW50KHYgLyA4KSAlIDIgPT0gMVxcbitcXHR9XFxuK1xcdHtcXG4rXFx0XFx0Z3N1YigvXltbOnNwYWNlOl1dKy8sIFxcXCJcXFwiKVxcbitcXHRcXHRoID0gJDFcXG4rXFx0XFx0aWYgKGJpdF9zZXQoaCwgd2FudF9iaXQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhYml0X3NldChoLCBod3BfYml0KSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIWJpdF9zZXQoaCwgbm9wYWdlX2JpdCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICFiaXRfc2V0KGgsIHRhaWxfYml0KSkge1xcbitcXHRcXHRcXHRwZm4gPSBiYXNlX3BmbiArIE5SIC0gMVxcbitcXHRcXHRcXHRwcmludGYgXFxcIjB4JXhcXFxcblxcXCIsIHBmbiAqIHBhZ2VzaXplXFxuK1xcdFxcdFxcdGV4aXQgMFxcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0J1xcbit9XFxuK1xcbisjIFJldHVybiAwIGlmIC9wcm9jL2twYWdlZmxhZ3MgYml0ICQyIGlzIHNldCBmb3IgUEZOICQxLCAxIGlmIGl0IGlzXFxuKyMgY2xlYXIsIG9yIDIgaWYgdGhlIHdvcmQgY2Fubm90IGJlIHJlYWQuICBVc2VkIHRvIHJlLWNvbmZpcm0gdGhlIHRhcmdldFxcbisjIHBhZ2UgdHlwZSBhZnRlciBhIG5vbi1wYW5pY2tpbmcgaW5qZWN0LlxcbitrcGFnZWZsYWdzX2JpdF9zZXQoKSB7XFxuK1xcdGxvY2FsIHdvcmRcXG4rXFxuK1xcdHdvcmQ9JChvZCAtQW4gLXR4OCAtdiAtaiBcXFwiJCgoJDEgKiA4KSlcXFwiIC1OIDggXFxcIiRrcGFnZWZsYWdzX3BhdGhcXFwiIDJcXHUwMDNlL2Rldi9udWxsIHwgdHIgLWQgJ1s6c3BhY2U6XScpXFxuK1xcdFsgLW4gXFxcIiR3b3JkXFxcIiBdIHx8IHJldHVybiAyXFxuK1xcdCgoICgxNiMkd29yZCBcXHUwMDNlXFx1MDAzZSAkMikgXFx1MDAyNiAxICkpXFxuK31cXG4rXFxuKyMgQmVzdC1lZmZvcnQ6IGRyb3AgdGhlIFBHX2h3cG9pc29uIG1hcmtlciBzZXQgYnkgdGhlIGluamVjdCBzbyBhIGZhaWxlZFxcbisjIHJ1biBkb2VzIG5vdCBsZWF2ZSBhIHBvaXNvbmVkIHBhZ2UgYmVoaW5kLiAgaGFyZF9vZmZsaW5lX3BhZ2UoKSBpbmplY3RzXFxuKyMgd2l0aCBNRl9TV19TSU1VTEFURUQsIHNvIHRoZSBwYWdlIHN0YXlzIHVucG9pc29uYWJsZSB0aHJvdWdoIHRoZVxcbisjIGh3cG9pc29uIGRlYnVnZnMgaW50ZXJmYWNlIChuZWVkcyBDT05GSUdfSFdQT0lTT05fSU5KRUNUICsgZGVidWdmcykuXFxuK3RyeV91bnBvaXNvbigpIHtcXG4rXFx0WyAtdyBcXFwiJHVucG9pc29uX3BhdGhcXFwiIF0gfHwgcmV0dXJuIDBcXG4rXFx0ZWNobyBcXFwiJDFcXFwiIFxcdTAwM2UgXFxcIiR1bnBvaXNvbl9wYXRoXFxcIiAyXFx1MDAzZS9kZXYvbnVsbCB8fCB0cnVlXFxuK31cXG4rXFxuK2Nhc2UgXFxcIiRraW5kXFxcIiBpblxcbityb2RhdGEpXFxuK1xcdHBoeXNfYWRkcj0kKHBpY2tfcm9kYXRhX3BoeXNfYWRkcilcXG4rXFx0cmVjaGVja19iaXQ9JEtQRl9SRVNFUlZFRFxcbitcXHRtaXNzaW5nX21zZz0nbm8gXFxcIktlcm5lbCByb2RhdGFcXFwiIGVudHJ5IGluIC9wcm9jL2lvbWVtJ1xcbitcXHQ7O1xcbitzbGFiKVxcbitcXHRwaHlzX2FkZHI9JChwaWNrX2twYWdlZmxhZ3NfcGh5c19hZGRyIFxcXCIkS1BGX1NMQUJcXFwiKVxcbitcXHRyZWNoZWNrX2JpdD0kS1BGX1NMQUJcXG4rXFx0bWlzc2luZ19tc2c9XFxcIm5vIHVzYWJsZSBzbGFiIFBGTiBmb3VuZCBpbiAka3BhZ2VmbGFnc19wYXRoXFxcIlxcbitcXHQ7O1xcbitwZ3RhYmxlKVxcbitcXHRwaHlzX2FkZHI9JChwaWNrX2twYWdlZmxhZ3NfcGh5c19hZGRyIFxcXCIkS1BGX1BHVEFCTEVcXFwiKVxcbitcXHRyZWNoZWNrX2JpdD0kS1BGX1BHVEFCTEVcXG4rXFx0bWlzc2luZ19tc2c9XFxcIm5vIHVzYWJsZSBwYWdlLXRhYmxlIFBGTiBmb3VuZCBpbiAka3BhZ2VmbGFnc19wYXRoXFxcIlxcbitcXHQ7O1xcbisqKVxcbitcXHRrdGFwX2V4aXRfZmFpbF9tc2cgXFxcInVua25vd24ga2luZCAnJGtpbmQnIChleHBlY3RlZDogcm9kYXRhfHNsYWJ8cGd0YWJsZSlcXFwiXFxuK1xcdDs7XFxuK2VzYWNcXG4rXFxuK2lmIFsgLXogXFxcIiRwaHlzX2FkZHJcXFwiIF07IHRoZW5cXG4rXFx0a3RhcF9za2lwX2FsbCBcXFwiJG1pc3NpbmdfbXNnXFxcIlxcbitcXHRleGl0IFxcXCIkS1NGVF9TS0lQXFxcIlxcbitmaVxcbitcXG4ra3RhcF9wcmludF9tc2cgXFxcImVuYWJsaW5nICRzeXNjdGxfcGF0aFxcXCJcXG4rcHJpb3I9JChjYXQgXFxcIiRzeXNjdGxfcGF0aFxcXCIpXFxuK2VjaG8gMSBcXHUwMDNlIFxcXCIkc3lzY3RsX3BhdGhcXFwiIHx8IGt0YXBfZXhpdF9mYWlsX21zZyBcXFwiZmFpbGVkIHRvIGVuYWJsZSBzeXNjdGxcXFwiXFxuK1xcbitwZm49JCgocGh5c19hZGRyIC8gcGFnZXNpemUpKVxcbitrdGFwX3ByaW50X21zZyBcXFwiaW5qZWN0aW5nIGh3cG9pc29uIGF0IHBoeXMgMHgkKHByaW50ZiAnJXgnIFxcXCIkcGh5c19hZGRyXFxcIikgKHBmbiAweCQocHJpbnRmICcleCcgXFxcIiRwZm5cXFwiKSwga2luZD0ka2luZClcXFwiXFxuK2t0YXBfcHJpbnRfbXNnIFxcXCJleHBlY3Rpbmcga2VybmVsIHBhbmljOiAnTWVtb3J5IGZhaWx1cmU6IFxcdTAwM2NwZm5cXHUwMDNlOiB1bnJlY292ZXJhYmxlIHBhZ2UnXFxcIlxcbitcXG4rIyBBIHN1Y2Nlc3NmdWwgcnVuIG5ldmVyIHJldHVybnMgZnJvbSB0aGUgaW5qZWN0IC0tIGl0IHBhbmljcyB0aGUga2VybmVsLlxcbisjIFJlYWNoaW5nIHRoZSBjb2RlIGJlbG93IHRoZXJlZm9yZSBtZWFucyBubyBwYW5pYyBmaXJlZC4gIE5vdGUgd2hldGhlclxcbisjIHRoZSB3cml0ZSBpdHNlbGYgc3VjY2VlZGVkLCB0aGVuIHB1dCB0aGUgbWFjaGluZSBiYWNrOiByZXN0b3JlIHRoZVxcbisjIHN5c2N0bCBhbmQgYmVzdC1lZmZvcnQgdW5wb2lzb24gdGhlIHBhZ2Ugd2UganVzdCBtYXJrZWQuXFxuK2lmIGVjaG8gXFxcIiRwaHlzX2FkZHJcXFwiIFxcdTAwM2UgXFxcIiRpbmplY3RfcGF0aFxcXCI7IHRoZW5cXG4rXFx0dmVyZGljdD1cXFwiaW5qZWN0IHJldHVybmVkIHdpdGhvdXQgcGFuaWM7IHN5c2N0bCBpbmVmZmVjdGl2ZVxcXCJcXG4rZWxzZVxcbitcXHR2ZXJkaWN0PVxcXCJpbmplY3QgZmFpbGVkIGJlZm9yZSByZWFjaGluZyB0aGUgcGFuaWMgcGF0aFxcXCJcXG4rZmlcXG4rXFxuK2VjaG8gXFxcIiRwcmlvclxcXCIgXFx1MDAzZSBcXFwiJHN5c2N0bF9wYXRoXFxcIlxcbit0cnlfdW5wb2lzb24gXFxcIiRwZm5cXFwiXFxuK1xcbisjIFRoZSBwYWdlIHR5cGUgY2FuIGNoYW5nZSBiZXR3ZWVuIHNlbGVjdGlvbiBhbmQgaW5qZWN0aW9uIChlLmcuIGEgc2xhYlxcbisjIG9yIHBhZ2UtdGFibGUgcGFnZSBpcyBmcmVlZCBhbmQgcmV1c2VkKS4gIE9ubHkgdHJlYXQgYSBtaXNzaW5nIHBhbmljIGFzXFxuKyMgYSBmYWlsdXJlIGlmIHRoZSB0YXJnZXQgUEZOIGlzIHN0aWxsIHRoZSBrZXJuZWwtb3duZWQgdHlwZSB3ZSBhaW1lZCBhdDtcXG4rIyBpZiBpdCByYWNlZCB0byBhbm90aGVyIHR5cGUgdGhlIHJ1biBpcyBpbmNvbmNsdXNpdmUsIHNvIHNraXAgaW5zdGVhZC5cXG4ra3BhZ2VmbGFnc19iaXRfc2V0IFxcXCIkcGZuXFxcIiBcXFwiJHJlY2hlY2tfYml0XFxcIlxcbitjYXNlICQ/IGluXFxuKzApXFx0a3RhcF9leGl0X2ZhaWxfbXNnIFxcXCIkdmVyZGljdCAocGFnZSBzdGlsbCAka2luZClcXFwiIDs7XFxuKzEpXFx0a3RhcF9za2lwX2FsbCBcXFwidGFyZ2V0IFBGTiBubyBsb25nZXIgJGtpbmQ7IHJhY2VkIGJlZm9yZSBpbmplY3QsIGluY29uY2x1c2l2ZVxcXCJcXG4rXFx0ZXhpdCBcXFwiJEtTRlRfU0tJUFxcXCIgOztcXG4rKilcXHRrdGFwX2V4aXRfZmFpbF9tc2cgXFxcIiR2ZXJkaWN0IChjb3VsZCBub3QgcmVjb25maXJtIHBhZ2UgdHlwZSB2aWEgJGtwYWdlZmxhZ3NfcGF0aClcXFwiIDs7XFxuK2VzYWNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTg6NTQ6MDkuNjc4MjE2MTAxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODk4MDExNjc4NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZXRfYW55X3BhZ2VcIixcbiAgICBcInBhbmljX29uX3VucmVjb3ZlcmFibGVfbWZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGZhaWx1cmUgaGFuZGxlciBpbiBjb3JlIE1NIHRvIHNob3J0LWNpcmN1aXQgcmVjb3ZlcnkgZm9yIGtlcm5lbC1vd25lZCBwYWdlcyBhbmQgb3B0aW9uYWxseSBwYW5pYy4gVGhpcyBlcnJvci1oYW5kbGluZyBwYXRoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIG1hZHZpc2UoTUFEVl9IV1BPSVNPTikgb24ga2VybmVsLW93bmVkIHBhZ2VzIG1hcHBlZCBpbiB1c2VyIHNwYWNlIChsaWtlIHRoZSB2RFNPKSBvciB2aWEgc3lzZnMgZXJyb3IgaW5qZWN0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNkNjY0OWE1ZDRmN2NkNDlhZTg1NTZlMmQ1MzQzNmM2YjZjYWJhMDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAzMCAxODo1NDowNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdFxuaW5kZXggYjliMGMyMThiZmI0NDAuLjIyY2M1NGNhYzNiMjFkIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3RcbkBAIC02Nyw2ICs2Nyw3IEBAIEN1cnJlbnRseSwgdGhlc2UgZmlsZXMgYXJlIGluIC9wcm9jL3N5cy92bTpcbiAtIHBhZ2UtY2x1c3RlclxuIC0gcGFnZV9sb2NrX3VuZmFpcm5lc3NcbiAtIHBhbmljX29uX29vbVxuKy0gcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZVxuIC0gcGVyY3B1X3BhZ2VsaXN0X2hpZ2hfZnJhY3Rpb25cbiAtIHN0YXRfaW50ZXJ2YWxcbiAtIHN0YXRfcmVmcmVzaFxuQEAgLTkyNSw2ICs5MjYsODUgQEAgcGFuaWNfb25fb29tPTIra2R1bXAgZ2l2ZXMgeW91IHZlcnkgc3Ryb25nIHRvb2wgdG8gaW52ZXN0aWdhdGVcbiB3aHkgb29tIGhhcHBlbnMuIFlvdSBjYW4gZ2V0IHNuYXBzaG90LlxuIFxuIFxuK3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmVcbis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK1xuK1doZW4gYSBoYXJkd2FyZSBtZW1vcnkgZXJyb3IgKGUuZy4gbXVsdGktYml0IEVDQykgaGl0cyBhIGtlcm5lbCBwYWdlXG4rdGhhdCBjYW5ub3QgYmUgcmVjb3ZlcmVkIGJ5IHRoZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGVyLCB0aGUgZGVmYXVsdFxuK2JlaGF2aW91ciBpcyB0byBpZ25vcmUgdGhlIGVycm9yIGFuZCBjb250aW51ZSBvcGVyYXRpb24uICBUaGlzIGlzXG4rZGFuZ2Vyb3VzIGJlY2F1c2UgdGhlIGNvcnJ1cHRlZCBkYXRhIHJlbWFpbnMgYWNjZXNzaWJsZSB0byB0aGUga2VybmVsLFxuK3Jpc2tpbmcgc2lsZW50IGRhdGEgY29ycnVwdGlvbiBvciBhIGRlbGF5ZWQgY3Jhc2ggd2hlbiB0aGUgcG9pc29uZWRcbittZW1vcnkgaXMgbmV4dCBhY2Nlc3NlZC5cbitcbitXaGVuIGVuYWJsZWQsIHRoaXMgc3lzY3RsIHRyaWdnZXJzIGEgcGFuaWMgb24gbWVtb3J5IGZhaWx1cmUgZXZlbnRzXG4raGl0dGluZyBrZXJuZWwtb3duZWQgcGFnZXMgdGhhdCB0aGUgaGFuZGxlciBjYW5ub3QgcmVjb3ZlcjpcbitgYFBhZ2VSZXNlcnZlZGBgIChmaXJtd2FyZSByZXNlcnZhdGlvbnMsIGtlcm5lbCBpbWFnZSwgdkRTTywgemVyb1xuK3BhZ2UsIGFuZCBzaW1pbGFyIG1lbWJsb2NrLXJlc2VydmVkIHJlZ2lvbnMpLCBgYFBhZ2VTbGFiYGAsXG4rYGBQYWdlVGFibGVgYCwgYW5kIGBgUGFnZUxhcmdlS21hbGxvY2BgLiAgVGhlc2UgYXJlIG93bmVkIGJ5IHRoZVxuK2tlcm5lbCBhbmQgdGhlIG1lbW9yeSBmYWlsdXJlIGhhbmRsZXIgY2Fubm90IHJlbGlhYmx5IGV2aWN0IHRoZWlyXG4rY29udGVudHMuXG4rXG4rT3RoZXIgdW5yZWNvdmVyYWJsZSBrZXJuZWwtb3duZWQgcG9wdWxhdGlvbnMgKHZtYWxsb2MgYWxsb2NhdGlvbnMsXG4ra2VybmVsIHN0YWNrIHBhZ2VzLCAuLi4pIGFyZSBub3QgY3VycmVudGx5IGNvdmVyZWQgYmVjYXVzZSB0aGVcbitoYW5kbGVyIGhhcyBubyBwYWdlLXR5cGUgc2lnbmFsIHRoYXQgZGlzdGluZ3Vpc2hlcyB0aGVtIGZyb20gYVxuK3VzZXJzcGFjZSBmb2xpbyB0ZW1wb3JhcmlseSBvZmYgdGhlIExSVSBkdXJpbmcgbWlncmF0aW9uIG9yXG4rY29tcGFjdGlvbi4gIFN1Y2ggcGFnZXMgc3RpbGwgZ28gdGhyb3VnaCB0aGUgc3RhbmRhcmRcbitNRl9NU0dfR0VUX0hXUE9JU09OIHBhdGg6IGBgUEdfaHdwb2lzb25gYCBpcyBzZXQgb24gdGhlbSBhbmQgYVxuK2RlbGF5ZWQgY3Jhc2ggb24gdGhlIG5leHQgYWNjZXNzIHJlbWFpbnMgcG9zc2libGUuICBDb3ZlcmFnZSBtYXlcbitncm93IGFzIHRoZSBoYW5kbGVyIGdhaW5zIHN0cm9uZ2VyIGtlcm5lbC1vd25lcnNoaXAgc2lnbmFscy5cbitcbitSZWNvdmVyYWJsZSBmYWlsdXJlIHBhdGhzIGFyZSBhbHNvIGludGVudGlvbmFsbHkgbGVmdCBvdXQ6IGluLWZsaWdodFxuK2J1ZGR5IGFsbG9jYXRpb25zIGFuZCBvdGhlciB0cmFuc2llbnQgcmFjZXMgd2l0aCB0aGUgcGFnZSBhbGxvY2F0b3JcbitjYW4gcmVhY2ggdGhlIHNhbWUgZGlhZ25vc3RpYywgYW5kIHBhbmlja2luZyBvbiB0aGVtIHdvdWxkIHJpc2tcbitraWxsaW5nIHRoZSBib3ggZm9yIGEgcGFnZSBkZXN0aW5lZCBmb3IgdXNlcnNwYWNlIHdoZXJlIHRoZSBzdGFuZGFyZFxuK1NJR0JVUyByZWNvdmVyeSBwYXRoIGFwcGxpZXMuICBQYWdlcyB3aG9zZSBzdGF0ZSBjb3VsZCBub3QgYmVcbitjbGFzc2lmaWVkIGF0IGFsbCBhcmUgbm90IGNvdmVyZWQgZWl0aGVyLCBzaW5jZSBhbiB1bmtub3duIHN0YXRlIGlzXG4rbm90IGEgc291bmQgYmFzaXMgZm9yIGEgcGFuaWMgZGVjaXNpb24uXG4rXG4rRm9yIG1hbnkgZW52aXJvbm1lbnRzIGl0IGlzIHByZWZlcmFibGUgdG8gcGFuaWMgaW1tZWRpYXRlbHkgd2l0aCBhIGNsZWFuXG4rY3Jhc2ggZHVtcCB0aGF0IGNhcHR1cmVzIHRoZSBvcmlnaW5hbCBlcnJvciBjb250ZXh0LCByYXRoZXIgdGhhbiB0b1xuK2NvbnRpbnVlIGFuZCBmYWNlIGEgcmFuZG9tIGNyYXNoIGxhdGVyIHdob3NlIGNhdXNlIGlzIGRpZmZpY3VsdCB0b1xuK2RpYWdub3NlLlxuK1xuK1VzZSBjYXNlc1xuKy0tLS0tLS0tLVxuK1xuK1RoaXMgb3B0aW9uIGlzIG1vc3QgdXNlZnVsIGluIGVudmlyb25tZW50cyB3aGVyZSB1bmF0dHJpYnV0ZWQgY3Jhc2hlc1xuK2FyZSBleHBlbnNpdmUgdG8gZGVidWcgb3Igd2hlcmUgZGF0YSBpbnRlZ3JpdHkgbXVzdCB0YWtlIHByZWNlZGVuY2VcbitvdmVyIGF2YWlsYWJpbGl0eTpcbitcbisqIExhcmdlIGZsZWV0cywgd2hlcmUgbXVsdGktYml0IEVDQyBlcnJvcnMgb24ga2VybmVsIHBhZ2VzIGFyZSBvYnNlcnZlZFxuKyAgcmVndWxhcmx5IGFuZCBwb3N0LW1vcnRlbSBhbmFseXNpcyBvZiBhbiB1bnJlbGF0ZWQgZG93bnN0cmVhbSBjcmFzaFxuKyAgKG9mdGVuIHNlY29uZHMgdG8gbWludXRlcyBhZnRlciB0aGUgb3JpZ2luYWwgZXJyb3IpIGNvbnN1bWVzXG4rICBzaWduaWZpY2FudCBlbmdpbmVlcmluZyBlZmZvcnQuXG4rXG4rKiBTeXN0ZW1zIGNvbmZpZ3VyZWQgd2l0aCBrZHVtcCwgd2hlcmUgcGFuaWNraW5nIGF0IHRoZSBtb21lbnQgb2YgdGhlXG4rICBoYXJkd2FyZSBlcnJvciBwcm9kdWNlcyBhIHZtY29yZSB0aGF0IHN0aWxsIGNvbnRhaW5zIHRoZSBmYXVsdGluZ1xuKyAgYWRkcmVzcywgdGhlIGFmZmVjdGVkIHBhZ2Ugc3RhdGUsIGFuZCB0aGUgb3JpZ2luYXRpbmcgTUNFL0dIRVNcbisgIHJlY29yZCDigJQgY29udGV4dCB0aGF0IGlzIHR5cGljYWxseSBsb3N0IGJ5IHRoZSB0aW1lIGEgZGVsYXllZCBjcmFzaFxuKyAgb2NjdXJzLlxuK1xuKyogSGlnaC1hdmFpbGFiaWxpdHkgY2x1c3RlcnMgdGhhdCByZWx5IG9uIGZhc3QsIGRldGVybWluaXN0aWMgbm9kZVxuKyAgZmFpbHVyZSBmb3IgZmFpbG92ZXIsIGFuZCBwcmVmZXIgYW4gaW1tZWRpYXRlIHBhbmljIG92ZXIgc2lsZW50IGRhdGFcbisgIGNvcnJ1cHRpb24gcHJvcGFnYXRpbmcgdG8gcmVwbGljYXMgb3IgcGVyc2lzdGVudCBzdG9yYWdlLlxuK1xuKyogS2VybmVsIGFuZCBwbGF0Zm9ybSBkZXZlbG9wZXJzIHJlcHJvZHVjaW5nIGh3cG9pc29uIGlzc3VlcyB3aXRoXG4rICB0b29scyBzdWNoIGFzIGBgbWNlLWluamVjdGBgIG9yIGVycm9yLWluamVjdGlvbiBkZWJ1Z2ZzIGludGVyZmFjZXMsXG4rICB3aGVyZSBwYW5pY2tpbmcgb24gdGhlIHVucmVjb3ZlcmFibGUgcGF0aCBtYWtlcyByZWdyZXNzaW9uc1xuKyAgaW1tZWRpYXRlbHkgdmlzaWJsZSBpbnN0ZWFkIG9mIHN1cmZhY2luZyBhcyBsYXRlciwgdW5yZWxhdGVkXG4rICBmYWlsdXJlcy5cbitcbis9ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuKzAgVHJ5IHRvIGNvbnRpbnVlIG9wZXJhdGlvbiAoZGVmYXVsdCkuXG4rMSBQYW5pYyBpbW1lZGlhdGVseS4gIElmIHRoZSBgYHBhbmljYGAgc3lzY3RsIGlzIGFsc28gbm9uLXplcm8gdGhlbiB0aGVcbisgIG1hY2hpbmUgd2lsbCBiZSByZWJvb3RlZC5cbis9ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK1xuK0V4YW1wbGU6OlxuK1xuKyAgICAgZWNobyAxIFx1MDAzZSAvcHJvYy9zeXMvdm0vcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZVxuK1xuK1xuIHBlcmNwdV9wYWdlbGlzdF9oaWdoX2ZyYWN0aW9uXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuaW5kZXggNTE1MDhhNTVjNDA1NWUuLmUwOTdmYzgyNjJjZjgzIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xuKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuQEAgLTc0LDYgKzc0LDggQEAgc3RhdGljIGludCBzeXNjdGxfbWVtb3J5X2ZhaWx1cmVfcmVjb3ZlcnkgX19yZWFkX21vc3RseSA9IDE7XG4gXG4gc3RhdGljIGludCBzeXNjdGxfZW5hYmxlX3NvZnRfb2ZmbGluZSBfX3JlYWRfbW9zdGx5ID0gMTtcbiBcbitzdGF0aWMgaW50IHN5c2N0bF9wYW5pY19vbl91bnJlY292ZXJhYmxlX21mIF9fcmVhZF9tb3N0bHk7XG4rXG4gYXRvbWljX2xvbmdfdCBudW1fcG9pc29uZWRfcGFnZXMgX19yZWFkX21vc3RseSA9IEFUT01JQ19MT05HX0lOSVQoMCk7XG4gXG4gc3RhdGljIGJvb2wgaHdfbWVtb3J5X2ZhaWx1cmUgX19yZWFkX21vc3RseSA9IGZhbHNlO1xuQEAgLTE1NSw2ICsxNTcsMTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgbWVtb3J5X2ZhaWx1cmVfdGFibGVbXSA9IHtcbiBcdFx0LnByb2NfaGFuZGxlclx0PSBwcm9jX2RvaW50dmVjX21pbm1heCxcbiBcdFx0LmV4dHJhMVx0XHQ9IFNZU0NUTF9aRVJPLFxuIFx0XHQuZXh0cmEyXHRcdD0gU1lTQ1RMX09ORSxcbitcdH0sXG4rXHR7XG4rXHRcdC5wcm9jbmFtZVx0PSBcInBhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmVcIixcbitcdFx0LmRhdGFcdFx0PSBcdTAwMjZzeXNjdGxfcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZixcbitcdFx0Lm1heGxlblx0XHQ9IHNpemVvZihzeXNjdGxfcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZiksXG4rXHRcdC5tb2RlXHRcdD0gMDY0NCxcbitcdFx0LnByb2NfaGFuZGxlclx0PSBwcm9jX2RvaW50dmVjX21pbm1heCxcbitcdFx0LmV4dHJhMVx0XHQ9IFNZU0NUTF9aRVJPLFxuK1x0XHQuZXh0cmEyXHRcdD0gU1lTQ1RMX09ORSxcbiBcdH1cbiB9O1xuIFxuQEAgLTk4MCwxNyArOTkxLDYgQEAgc3RhdGljIGJvb2wgaGFzX2V4dHJhX3JlZmNvdW50KHN0cnVjdCBwYWdlX3N0YXRlICpwcywgc3RydWN0IHBhZ2UgKnAsXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLS8qXG4tICogRXJyb3IgaGl0IGtlcm5lbCBwYWdlLlxuLSAqIERvIG5vdGhpbmcsIHRyeSB0byBiZSBsdWNreSBhbmQgbm90IHRvdWNoIHRoaXMgaW5zdGVhZC4gRm9yIGEgZmV3IGNhc2VzIHdlXG4tICogY291bGQgYmUgbW9yZSBzb3BoaXN0aWNhdGVkLlxuLSAqL1xuLXN0YXRpYyBpbnQgbWVfa2VybmVsKHN0cnVjdCBwYWdlX3N0YXRlICpwcywgc3RydWN0IHBhZ2UgKnApXG4te1xuLVx0dW5sb2NrX3BhZ2UocCk7XG4tXHRyZXR1cm4gTUZfSUdOT1JFRDtcbi19XG4tXG4gLypcbiAgKiBQYWdlIGluIHVua25vd24gc3RhdGUuIERvIG5vdGhpbmcuXG4gICogVGhpcyBpcyBhIGNhdGNoLWFsbCBpbiBjYXNlIHdlIGZhaWwgdG8gbWFrZSBzZW5zZSBvZiB0aGUgcGFnZSBzdGF0ZS5cbkBAIC0xMTk5LDEwICsxMTk5LDggQEAgc3RhdGljIGludCBtZV9odWdlX3BhZ2Uoc3RydWN0IHBhZ2Vfc3RhdGUgKnBzLCBzdHJ1Y3QgcGFnZSAqcClcbiAjZGVmaW5lIG1sb2NrXHRcdCgxVUwgXHUwMDNjXHUwMDNjIFBHX21sb2NrZWQpXG4gI2RlZmluZSBscnVcdFx0KDFVTCBcdTAwM2NcdTAwM2MgUEdfbHJ1KVxuICNkZWZpbmUgaGVhZFx0XHQoMVVMIFx1MDAzY1x1MDAzYyBQR19oZWFkKVxuLSNkZWZpbmUgcmVzZXJ2ZWRcdCgxVUwgXHUwMDNjXHUwMDNjIFBHX3Jlc2VydmVkKVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcGFnZV9zdGF0ZSBlcnJvcl9zdGF0ZXNbXSA9IHtcbi1cdHsgcmVzZXJ2ZWQsXHRyZXNlcnZlZCxcdE1GX01TR19LRVJORUwsXHRtZV9rZXJuZWwgfSxcbiBcdC8qXG4gXHQgKiBmcmVlIHBhZ2VzIGFyZSBzcGVjaWFsbHkgZGV0ZWN0ZWQgb3V0c2lkZSB0aGlzIHRhYmxlOlxuIFx0ICogUEdfYnVkZHkgcGFnZXMgb25seSBtYWtlIGEgc21hbGwgZnJhY3Rpb24gb2YgYWxsIGZyZWUgcGFnZXMuXG5AQCAtMTIzNCw3ICsxMjMyLDYgQEAgc3RhdGljIHN0cnVjdCBwYWdlX3N0YXRlIGVycm9yX3N0YXRlc1tdID0ge1xuICN1bmRlZiBtbG9ja1xuICN1bmRlZiBscnVcbiAjdW5kZWYgaGVhZFxuLSN1bmRlZiByZXNlcnZlZFxuIFxuIHN0YXRpYyB2b2lkIHVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyh1bnNpZ25lZCBsb25nIHBmbixcbiBcdFx0XHRcdCAgICAgZW51bSBtZl9yZXN1bHQgcmVzdWx0KVxuQEAgLTEyNjksNiArMTI2NiwxNSBAQCBzdGF0aWMgdm9pZCB1cGRhdGVfcGVyX25vZGVfbWZfc3RhdHModW5zaWduZWQgbG9uZyBwZm4sXG4gXHQrK21mX3N0YXRzLVx1MDAzZXRvdGFsO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBwYW5pY19vbl91bnJlY292ZXJhYmxlX21mKGVudW0gbWZfYWN0aW9uX3BhZ2VfdHlwZSB0eXBlLFxuK1x0XHRcdFx0ICAgICAgZW51bSBtZl9yZXN1bHQgcmVzdWx0KVxuK3tcbitcdGlmICghc3lzY3RsX3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWYpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiB0eXBlID09IE1GX01TR19LRVJORUwgXHUwMDI2XHUwMDI2IHJlc3VsdCA9PSBNRl9JR05PUkVEO1xuK31cbitcbiAvKlxuICAqIFwiRGlydHkvQ2xlYW5cIiBpbmRpY2F0aW9uIGlzIG5vdCAxMDAlIGFjY3VyYXRlIGR1ZSB0byB0aGUgcG9zc2liaWxpdHkgb2ZcbiAgKiBzZXR0aW5nIFBHX2RpcnR5IG91dHNpZGUgcGFnZSBsb2NrLiBTZWUgYWxzbyBjb21tZW50IGFib3ZlIHNldF9wYWdlX2RpcnR5KCkuXG5AQCAtMTI4Niw2ICsxMjkyLDkgQEAgc3RhdGljIGludCBhY3Rpb25fcmVzdWx0KHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIG1mX2FjdGlvbl9wYWdlX3R5cGUgdHlwZSxcbiBcdHByX2VycihcIiUjbHg6IHJlY292ZXJ5IGFjdGlvbiBmb3IgJXM6ICVzXFxuXCIsXG4gXHRcdHBmbiwgYWN0aW9uX3BhZ2VfdHlwZXNbdHlwZV0sIGFjdGlvbl9uYW1lW3Jlc3VsdF0pO1xuIFxuK1x0aWYgKHBhbmljX29uX3VucmVjb3ZlcmFibGVfbWYodHlwZSwgcmVzdWx0KSlcbitcdFx0cGFuaWMoXCJNZW1vcnkgZmFpbHVyZTogJSNseDogdW5yZWNvdmVyYWJsZSBwYWdlXCIsIHBmbik7XG4rXG4gXHRyZXR1cm4gKHJlc3VsdCA9PSBNRl9SRUNPVkVSRUQgfHwgcmVzdWx0ID09IE1GX0RFTEFZRUQpID8gMCA6IC1FQlVTWTtcbiB9XG4gXG5AQCAtMTMzOSw2ICsxMzQ4LDM4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBIV1BvaXNvbkhhbmRsYWJsZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBmbGFncylcbiBcdHJldHVybiBQYWdlTFJVKHBhZ2UpIHx8IGlzX2ZyZWVfYnVkZHlfcGFnZShwYWdlKTtcbiB9XG4gXG4rLypcbisgKiBQb3NpdGl2ZSBpZGVudGlmaWNhdGlvbiBvZiBwYWdlcyB0aGUgaHdwb2lzb24gaGFuZGxlciBjYW5ub3QgcmVjb3ZlcjpcbisgKiBwYWdlcyBvd25lZCBieSBrZXJuZWwgaW50ZXJuYWxzIHdpdGggbm8gdXNlcnNwYWNlIG1hcHBpbmcgdG8gdW5tYXAsIG5vXG4rICogZmlsZSBtYXBwaW5nIHRvIGludmFsaWRhdGUsIGFuZCBubyBtaWdyYXRpb24gdGFyZ2V0LlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19rZXJuZWxfb3duZWRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbit7XG4rXHRzdHJ1Y3QgcGFnZSAqaGVhZDtcbitcdGJvb2wga2VybmVsX293bmVkO1xuK1xuK1x0LyogUEdfcmVzZXJ2ZWQgaXMgYSBwZXItcGFnZSBmbGFnLCBuZXZlciBzZXQgb24gYSBjb21wb3VuZCBwYWdlLiAqL1xuK1x0aWYgKFBhZ2VSZXNlcnZlZChwYWdlKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHQvKlxuK1x0ICogUGFnZS10eXBlIGJpdHMgbGl2ZSBvbmx5IG9uIHRoZSBoZWFkIHBhZ2UsIHNvIHJlc29sdmUgYW55IHRhaWxcbitcdCAqIGZpcnN0LiAgVGhlIGNoZWNrIHRha2VzIG5vIHJlZmNvdW50OyByZWNoZWNrIHRoZSBoZWFkIGFmdGVyd2FyZHNcbitcdCAqIHNvIGEgY29uY3VycmVudCBzcGxpdCBvciBjb21wb3VuZCBmcmVlIGNhbm5vdCBsZWF2ZSB1cyB0cnVzdGluZ1xuK1x0ICogYSBzdGFsZSB2aWV3LiAgQSByZXNpZHVhbCBmcmVlLVx1MDAzZWFsbG9jLVx1MDAzZWZyZWUgY2Fubm90IGJlIGNsb3NlZCBoZXJlXG4rXHQgKiAoZnJvemVuIHNsYWIgYW5kIGxhcmdlLWttYWxsb2MgcGFnZXMgY2Fubm90IGJlIHBpbm5lZCksIGJ1dCBpc1xuK1x0ICogaGFybWxlc3M6IHdoZXJlIGEgd3JvbmcgdmVyZGljdCBjb3VsZCBwYW5pYywgbWVtb3J5X2ZhaWx1cmUoKSBoYXNcbitcdCAqIGFscmVhZHkgc2V0IFBhZ2VIV1BvaXNvbiwgd2hpY2ggYmFycyB0aGUgcGFnZSBmcm9tIHRoZSBhbGxvY2F0b3IuXG4rXHQgKi9cbityZXRyeTpcbitcdGhlYWQgPSBjb21wb3VuZF9oZWFkKHBhZ2UpO1xuK1x0a2VybmVsX293bmVkID0gUGFnZVNsYWIoaGVhZCkgfHwgUGFnZVRhYmxlKGhlYWQpIHx8XG4rXHRcdCAgICAgICBQYWdlTGFyZ2VLbWFsbG9jKGhlYWQpO1xuK1x0aWYgKGhlYWQgIT0gY29tcG91bmRfaGVhZChwYWdlKSlcbitcdFx0Z290byByZXRyeTtcbitcdHJldHVybiBrZXJuZWxfb3duZWQ7XG4rfVxuK1xuIHN0YXRpYyBpbnQgX19nZXRfaHdwb2lzb25fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBmbGFncylcbiB7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbkBAIC0xMzg1LDYgKzE0MjYsMTkgQEAgc3RhdGljIGludCBnZXRfYW55X3BhZ2Uoc3RydWN0IHBhZ2UgKnAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IE1GX0NPVU5UX0lOQ1JFQVNFRClcbiBcdFx0Y291bnRfaW5jcmVhc2VkID0gdHJ1ZTtcbiBcbitcdC8qXG4rXHQgKiBQYWdlIHR5cGVzIHdlIGtub3cgYXJlIGtlcm5lbC1vd25lZCBhbmQgY2Fubm90IGJlIHJlY292ZXJlZC5cbitcdCAqIFNob3J0LWNpcmN1aXQgYmVmb3JlIHRoZSBzaGFrZV9wYWdlKCkgLyByZXRyeSBsb29wLCB3aGljaFxuK1x0ICogY2Fubm90IHR1cm4gYW55IG9mIHRoZXNlIGludG8gc29tZXRoaW5nIEhXUG9pc29uSGFuZGxhYmxlKCkuXG4rXHQgKiBEcm9wIHRoZSBjYWxsZXIncyByZWZlcmVuY2UgaWYgTUZfQ09VTlRfSU5DUkVBU0VEIHRvb2sgb25lLlxuK1x0ICovXG4rXHRpZiAoaXNfa2VybmVsX293bmVkX3BhZ2UocCkpIHtcbitcdFx0aWYgKGNvdW50X2luY3JlYXNlZClcbitcdFx0XHRwdXRfcGFnZShwKTtcbitcdFx0cmV0ID0gLUVOT1RSRUNPVkVSQUJMRTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4gdHJ5X2FnYWluOlxuIFx0aWYgKCFjb3VudF9pbmNyZWFzZWQpIHtcbiBcdFx0cmV0ID0gX19nZXRfaHdwb2lzb25fcGFnZShwLCBmbGFncyk7XG5AQCAtMTQzMiw3ICsxNDg2LDcgQEAgc3RhdGljIGludCBnZXRfYW55X3BhZ2Uoc3RydWN0IHBhZ2UgKnAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4gXHRcdHJldCA9IC1FSU87XG4gXHR9XG4gb3V0OlxuLVx0aWYgKHJldCA9PSAtRUlPKVxuK1x0aWYgKHJldCA9PSAtRUlPIHx8IHJldCA9PSAtRU5PVFJFQ09WRVJBQkxFKVxuIFx0XHRwcl9lcnIoXCIlI2x4OiB1bmhhbmRsYWJsZSBwYWdlLlxcblwiLCBwYWdlX3RvX3BmbihwKSk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuQEAgLTE0ODksNyArMTU0MywxMCBAQCBzdGF0aWMgaW50IF9fZ2V0X3VucG9pc29uX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4gICogICAgICAgICAtRUlPIGZvciBwYWdlcyBvbiB3aGljaCB3ZSBjYW4gbm90IGhhbmRsZSBtZW1vcnkgZXJyb3JzLFxuICAqICAgICAgICAgLUVCVVNZIHdoZW4gZ2V0X2h3cG9pc29uX3BhZ2UoKSBoYXMgcmFjZWQgd2l0aCBwYWdlIGxpZmVjeWNsZVxuICAqICAgICAgICAgb3BlcmF0aW9ucyBsaWtlIGFsbG9jYXRpb24gYW5kIGZyZWUsXG4tICogICAgICAgICAtRUhXUE9JU09OIHdoZW4gdGhlIHBhZ2UgaXMgaHdwb2lzb25lZCBhbmQgdGFrZW4gb2ZmIGZyb20gYnVkZHkuXG4rICogICAgICAgICAtRUhXUE9JU09OIHdoZW4gdGhlIHBhZ2UgaXMgaHdwb2lzb25lZCBhbmQgdGFrZW4gb2ZmIGZyb20gYnVkZHksXG4rICogICAgICAgICAtRU5PVFJFQ09WRVJBQkxFIGZvciBrZXJuZWwtb3duZWQgcGFnZXMgaWRlbnRpZmllZCBieVxuKyAqICAgICAgICAgaXNfa2VybmVsX293bmVkX3BhZ2UoKSAoUEdfcmVzZXJ2ZWQsIHNsYWIsXG4rICogICAgICAgICBwYWdlLXRhYmxlLCBsYXJnZS1rbWFsbG9jKSB0aGF0IHRoZSBoYW5kbGVyIGNhbm5vdCByZWNvdmVyLlxuICAqL1xuIHN0YXRpYyBpbnQgZ2V0X2h3cG9pc29uX3BhZ2Uoc3RydWN0IHBhZ2UgKnAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4ge1xuQEAgLTI0MDIsNyArMjQ1OSw4IEBAIGludCBtZW1vcnlfZmFpbHVyZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuIFx0ICogdGhhdCBtYXkgbWFrZSBwYWdlX3JlZl9mcmVlemUoKS9wYWdlX3JlZl91bmZyZWV6ZSgpIG1pc21hdGNoLlxuIFx0ICovXG4gXHRyZXMgPSBnZXRfaHdwb2lzb25fcGFnZShwLCBmbGFncyk7XG4tXHRpZiAoIXJlcykge1xuK1x0c3dpdGNoIChyZXMpIHtcbitcdGNhc2UgMDpcbiBcdFx0aWYgKGlzX2ZyZWVfYnVkZHlfcGFnZShwKSkge1xuIFx0XHRcdGlmICh0YWtlX3BhZ2Vfb2ZmX2J1ZGR5KHApKSB7XG4gXHRcdFx0XHRwYWdlX3JlZl9pbmMocCk7XG5AQCAtMjQyMSw3ICsyNDc5LDE5IEBAIGludCBtZW1vcnlfZmFpbHVyZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuIFx0XHRcdHJlcyA9IGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfS0VSTkVMX0hJR0hfT1JERVIsIE1GX0lHTk9SRUQpO1xuIFx0XHR9XG4gXHRcdGdvdG8gdW5sb2NrX211dGV4O1xuLVx0fSBlbHNlIGlmIChyZXMgXHUwMDNjIDApIHtcbitcdGNhc2UgMTpcbitcdFx0LyogR290IGEgcmVmY291bnQgb24gYSBoYW5kbGFibGUgcGFnZS4gKi9cbitcdFx0YnJlYWs7XG4rXHRjYXNlIC1FTk9UUkVDT1ZFUkFCTEU6XG4rXHRcdC8qXG4rXHRcdCAqIFN0YWJsZSB1bmhhbmRsYWJsZSBrZXJuZWwtb3duZWQgcGFnZSAoUEdfcmVzZXJ2ZWQsXG4rXHRcdCAqIHNsYWIsIHBhZ2UgdGFibGVzLCBsYXJnZS1rbWFsbG9jKS5cbitcdFx0ICogTm8gcmVjb3ZlcnkgcG9zc2libGUuXG4rXHRcdCAqL1xuK1x0XHRyZXMgPSBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0tFUk5FTCwgTUZfSUdOT1JFRCk7XG4rXHRcdGdvdG8gdW5sb2NrX211dGV4O1xuK1x0ZGVmYXVsdDpcbitcdFx0LyogVHJhbnNpZW50IGxpZmVjeWNsZSByYWNlIHdpdGggdGhlIHBhZ2UgYWxsb2NhdG9yLiAqL1xuIFx0XHRyZXMgPSBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0dFVF9IV1BPSVNPTiwgTUZfSUdOT1JFRCk7XG4gXHRcdGdvdG8gdW5sb2NrX211dGV4O1xuIFx0fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbmluZGV4IGU2ZGY5NjhmMDk3MWM4Li5lZDMyMWFlNzA5ZGFjZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuQEAgLTE3NCw2ICsxNzQsMTAgQEAgVEVTVF9QUk9HUyArPSBrc2Z0X3VzZXJmYXVsdGZkLnNoXG4gVEVTVF9QUk9HUyArPSBrc2Z0X3ZtYV9tZXJnZS5zaFxuIFRFU1RfUFJPR1MgKz0ga3NmdF92bWFsbG9jLnNoXG4gXG4rIyBEZXN0cnVjdGl2ZTogZXZlcnkgc3VjY2Vzc2Z1bCBydW4gcGFuaWNzIHRoZSBrZXJuZWwuICBJbnN0YWxsZWQgYW5kXG4rIyBrZXB0IGV4ZWN1dGFibGUsIGJ1dCBub3QgcnVuIGZyb20gYSBkZWZhdWx0IGtzZWxmdGVzdCBpbnZvY2F0aW9uLlxuK1RFU1RfUFJPR1NfRVhURU5ERUQgKz0gaHdwb2lzb24tcGFuaWMuc2hcbitcbiBURVNUX0ZJTEVTIDo9IHRlc3Rfdm1hbGxvYy5zaFxuIFRFU1RfRklMRVMgKz0gdGVzdF9obW0uc2hcbiBURVNUX0ZJTEVTICs9IHZhX2hpZ2hfYWRkcl9zd2l0Y2guc2hcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9od3BvaXNvbi1wYW5pYy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h3cG9pc29uLXBhbmljLnNoXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmQ5NTNkMTM2NzMzMjQ0XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9od3BvaXNvbi1wYW5pYy5zaFxuQEAgLTAsMCArMSwyNTUgQEBcbisjIS9iaW4vYmFzaFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjXG4rIyBWZXJpZnkgdm0ucGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZSBieSBpbmplY3RpbmcgYSBod3BvaXNvblxuKyMgZXJyb3Igb24gYSBrZXJuZWwtb3duZWQgcGFnZSBhbmQgY29uZmlybWluZyB0aGUga2VybmVsIHBhbmljcy5cbisjXG4rIyBUaHJlZSBcImtpbmRzXCIgb2Yga2VybmVsLW93bmVkIHBhZ2UgY2FuIGJlIHRhcmdldGVkLCBzZWxlY3RhYmxlIHZpYSB0aGVcbisjIGZpcnN0IHBvc2l0aW9uYWwgYXJndW1lbnQgKGRlZmF1bHQ6IHJvZGF0YSk6XG4rI1xuKyMgICByb2RhdGEgIC0gYSBQR19yZXNlcnZlZCBwYWdlIGluIHRoZSBrZXJuZWwgcm9kYXRhIHJhbmdlXG4rIyAgICAgICAgICAgICAoc291cmNlZCBmcm9tIC9wcm9jL2lvbWVtIFwiS2VybmVsIHJvZGF0YVwiKS4gIEV4ZXJjaXNlc1xuKyMgICAgICAgICAgICAgbWVtb3J5X2ZhaWx1cmUoKSAtXHUwMDNlIGdldF9hbnlfcGFnZSgpIG9uIGEgUGFnZVJlc2VydmVkIHBhZ2UuXG4rI1xuKyMgICBzbGFiICAgIC0gYSBzbGFiIHBhZ2UgZm91bmQgdmlhIC9wcm9jL2twYWdlZmxhZ3MgKEtQRl9TTEFCKS5cbisjICAgICAgICAgICAgIEV4ZXJjaXNlcyBtZW1vcnlfZmFpbHVyZSgpIC1cdTAwM2UgZ2V0X2FueV9wYWdlKCkgb24gYSBub25cbisjICAgICAgICAgICAgIFBHX3Jlc2VydmVkIGtlcm5lbC1vd25lZCBwYWdlLiAgVGhpcyBwYXRoIGlzIHdoYXQgY2F0Y2hlc1xuKyMgICAgICAgICAgICAgcmVncmVzc2lvbnMgd2hlcmUgZ2V0X2FueV9wYWdlKCkgY29sbGFwc2VzIGtlcm5lbC1vd25lZFxuKyMgICAgICAgICAgICAgcGFnZXMgaW50byBhIHRyYW5zaWVudCAtRUlPIGluc3RlYWQgb2YgLUVOT1RSRUNPVkVSQUJMRS5cbisjXG4rIyAgIHBndGFibGUgLSBhIHBhZ2UtdGFibGUgcGFnZSBmb3VuZCB2aWEgL3Byb2Mva3BhZ2VmbGFncyAoS1BGX1BHVEFCTEUpLlxuKyMgICAgICAgICAgICAgU2FtZSBwYXRoIGFzIHNsYWIsIGRpZmZlcmVudCBwYWdlIHR5cGUuXG4rI1xuKyMgVGhpcyB0ZXN0IGlzIERFU1RSVUNUSVZFOiBhIHN1Y2Nlc3NmdWwgcnVuIGNyYXNoZXMgdGhlIGtlcm5lbC4gIEl0IGlzXG4rIyBtZWFudCB0byBiZSBleGVjdXRlZCBpbnNpZGUgYSBkaXNwb3NhYmxlIFZNIChlLmcuIHZpcnRtZS1uZykgd2l0aCBhXG4rIyBzZXJpYWwgY29uc29sZSBjYXB0dXJlZCBieSB0aGUgaGFybmVzcy4gIEl0IGlzIHNraXBwZWQgdW5sZXNzIHRoZVxuKyMgY2FsbGVyIG9wdHMgaW4gdmlhIFJVTl9ERVNUUlVDVElWRT0xLlxuKyNcbisjIFRlc3QgcGFzc2VzIGV4dGVybmFsbHk6IHRoZSBrZXJuZWwgbXVzdCBwYW5pYyB3aXRoXG4rIyAgIFwiTWVtb3J5IGZhaWx1cmU6IFx1MDAzY3Bmblx1MDAzZTogdW5yZWNvdmVyYWJsZSBwYWdlXCJcbisjIEEgcmV0dXJuIGZyb20gdGhlIGluamVjdCBtZWFucyBubyBwYW5pYyBmaXJlZDogdGhhdCBpcyBhIGZhaWx1cmUsXG4rIyB1bmxlc3MgdGhlIHRhcmdldCBQRk4gcmFjZWQgdG8gYSBkaWZmZXJlbnQgcGFnZSB0eXBlIGJlZm9yZSBpbmplY3Rpb24sXG4rIyBpbiB3aGljaCBjYXNlIHRoZSBydW4gaXMgaW5jb25jbHVzaXZlIGFuZCBpcyBza2lwcGVkLlxuKyNcbisjIEF1dGhvcjogQnJlbm8gTGVpdGFvIFx1MDAzY2xlaXRhb0BkZWJpYW4ub3JnXHUwMDNlXG4rXG4rc2V0IC11XG4rXG4rIyBLVEFQIG91dHB1dCBoZWxwZXJzIChrdGFwX3ByaW50X21zZywga3RhcF9za2lwX2FsbCwga3RhcF9leGl0X2ZhaWxfbXNnLCAuLi4pLlxuK0RJUj1cIiQoZGlybmFtZSBcIiQocmVhZGxpbmsgLWYgXCIkMFwiKVwiKVwiXG4rIyBzaGVsbGNoZWNrIHNvdXJjZT0uLi9rc2VsZnRlc3Qva3RhcF9oZWxwZXJzLnNoXG4rc291cmNlIFwiJHtESVJ9XCIvLi4va3NlbGZ0ZXN0L2t0YXBfaGVscGVycy5zaFxuK1xuK3N5c2N0bF9wYXRoPS9wcm9jL3N5cy92bS9wYW5pY19vbl91bnJlY292ZXJhYmxlX21lbW9yeV9mYWlsdXJlXG4raW5qZWN0X3BhdGg9L3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvaGFyZF9vZmZsaW5lX3BhZ2VcbitrcGFnZWZsYWdzX3BhdGg9L3Byb2Mva3BhZ2VmbGFnc1xuK3VucG9pc29uX3BhdGg9L3N5cy9rZXJuZWwvZGVidWcvaHdwb2lzb24vdW5wb2lzb24tcGZuXG4rXG4rIyAvcHJvYy9rcGFnZWZsYWdzIGJpdCBwb3NpdGlvbnMgKHNlZSBpbmNsdWRlL3VhcGkvbGludXgva2VybmVsLXBhZ2UtZmxhZ3MuaClcbitLUEZfU0xBQj03XG4rS1BGX0NPTVBPVU5EX1RBSUw9MTZcbitLUEZfSFdQT0lTT049MTlcbitLUEZfTk9QQUdFPTIwXG4rS1BGX1BHVEFCTEU9MjZcbitLUEZfUkVTRVJWRUQ9MzJcbitcbitwYWdlc2l6ZT0kKGdldGNvbmYgUEFHRV9TSVpFKVxuK1xuK2tpbmQ9JHsxOi1yb2RhdGF9XG4rXG4raWYgWyBcIiQoaWQgLXUpXCIgLW5lIDAgXTsgdGhlblxuK1x0a3RhcF9za2lwX2FsbCBcIm11c3QgcnVuIGFzIHJvb3RcIlxuK1x0ZXhpdCBcIiRLU0ZUX1NLSVBcIlxuK2ZpXG4rXG4raWYgWyAhIC13IFwiJHN5c2N0bF9wYXRoXCIgXTsgdGhlblxuK1x0a3RhcF9za2lwX2FsbCBcIiRzeXNjdGxfcGF0aCBub3QgcHJlc2VudCAoa2VybmVsIHdpdGhvdXQgdGhlIHN5c2N0bD8pXCJcbitcdGV4aXQgXCIkS1NGVF9TS0lQXCJcbitmaVxuK1xuK2lmIFsgISAtdyBcIiRpbmplY3RfcGF0aFwiIF07IHRoZW5cbitcdGt0YXBfc2tpcF9hbGwgXCIkaW5qZWN0X3BhdGggbm90IHByZXNlbnQgKG5vIE1FTU9SWV9IT1RQTFVHPylcIlxuK1x0ZXhpdCBcIiRLU0ZUX1NLSVBcIlxuK2ZpXG4rXG4raWYgWyBcIiR7UlVOX0RFU1RSVUNUSVZFOi0wfVwiICE9IFwiMVwiIF07IHRoZW5cbitcdGt0YXBfc2tpcF9hbGwgXCJkZXN0cnVjdGl2ZSB0ZXN0OyByZS1ydW4gd2l0aCBSVU5fREVTVFJVQ1RJVkU9MSBpbnNpZGUgYSBkaXNwb3NhYmxlIFZNXCJcbitcdGV4aXQgXCIkS1NGVF9TS0lQXCJcbitmaVxuK1xuKyMgUGljayBhIFBGTiBpbnNpZGUgdGhlIGtlcm5lbCBpbWFnZSByb2RhdGEgcmVnaW9uIG9mIC9wcm9jL2lvbWVtLlxuKyMgVGhpcyBpcyBwcmVmZXJyZWQgb3ZlciBhIHRvcC1sZXZlbCBcIlJlc2VydmVkXCIgZW50cnkgYmVjYXVzZSB0b3AtbGV2ZWxcbisjIFJlc2VydmVkIHJhbmdlcyBhcmUgb2Z0ZW4gZmlybXdhcmUgaG9sZXMgdGhhdCBoYXZlIG5vIGJhY2tpbmcgc3RydWN0XG4rIyBwYWdlOyBwZm5fdG9fb25saW5lX3BhZ2UoKSByZXR1cm5zIE5VTEwgb24gdGhvc2UgYW5kIG1lbW9yeV9mYWlsdXJlKClcbisjIGJhaWxzIG91dCB3aXRoIC1FTlhJTyBiZWZvcmUgcmVhY2hpbmcgdGhlIHBhbmljIHBhdGguXG4rI1xuKyMgXCJLZXJuZWwgcm9kYXRhXCIgaXMgcmVwb3J0ZWQgYXMgYSBzdWItcmVzb3VyY2Ugb2YgXCJTeXN0ZW0gUkFNXCIgb24gZXZlcnlcbisjIG1ham9yIGFyY2hpdGVjdHVyZSwgd2hpY2ggZ3VhcmFudGVlczpcbisjICAgLSB0aGUgUEZOIGlzIGJhY2tlZCBieSBzdHJ1Y3QgcGFnZSAod2l0aGluIGFuIG9ubGluZSBtZW1vcnkgcmFuZ2UpO1xuKyMgICAtIFBHX3Jlc2VydmVkIGlzIHNldCBvbiB0aGUgcGFnZSAoa2VybmVsIGltYWdlIGFyZWEpO1xuKyMgICAtIHRoZSBtZW1vcnkgaXMgcmVhZC1vbmx5LCBzbyBzZXR0aW5nIFBHX2h3cG9pc29uIG9uIGl0IGRvZXMgbm90XG4rIyAgICAgY29ycnVwdCB3cml0YWJsZSBrZXJuZWwgc3RhdGUgaWYgdGhlIHBhbmljIHNvbWVob3cgZG9lcyBub3QgZmlyZS5cbisjXG4rIyAvcHJvYy9pb21lbSBlbnRyaWVzIGxvb2sgbGlrZSAoaW5kZW50ZWQgZm9yIHN1Yi1yZXNvdXJjZXMpOlxuKyMgICAgIFwiICAwMjUwMDAwMC0wMmZmZmZmZiA6IEtlcm5lbCByb2RhdGFcIlxuK3BpY2tfcm9kYXRhX3BoeXNfYWRkcigpIHtcbitcdGF3ayAtdiBwYWdlc2l6ZT1cIiQoZ2V0Y29uZiBQQUdFX1NJWkUpXCIgJ1xuK1x0IyBDb252ZXJ0IGEgaGV4IHN0cmluZyB0byBhIG51bWJlciB3aXRob3V0IHJlbHlpbmcgb24gdGhlIGdhd2stb25seVxuK1x0IyBzdHJ0b251bSgpLiAgbWF3ayBsYWNrcyBpdCBhbmQgd291bGQgb3RoZXJ3aXNlIHNwdXJpb3VzbHkgc2tpcFxuK1x0IyB0aGlzIHRlc3Qgb24gZGlzdHJvcyB0aGF0IHNoaXAgbWF3ayBhcyAvdXNyL2Jpbi9hd2suXG4rXHRmdW5jdGlvbiBoZXgybnVtKHMsICAgbiwgaSwgYywgdikge1xuK1x0XHRuID0gMFxuK1x0XHRmb3IgKGkgPSAxOyBpIFx1MDAzYz0gbGVuZ3RoKHMpOyBpKyspIHtcbitcdFx0XHRjID0gdG9sb3dlcihzdWJzdHIocywgaSwgMSkpXG4rXHRcdFx0diA9IGluZGV4KFwiMDEyMzQ1Njc4OWFiY2RlZlwiLCBjKSAtIDFcbitcdFx0XHRpZiAodiBcdTAwM2MgMClcbitcdFx0XHRcdHJldHVybiAtMVxuK1x0XHRcdG4gPSBuICogMTYgKyB2XG4rXHRcdH1cbitcdFx0cmV0dXJuIG5cbitcdH1cbitcdC86IEtlcm5lbCByb2RhdGFbWzpzcGFjZTpdXSokLyB7XG4rXHRcdHN1YigvXltbOnNwYWNlOl1dKy8sIFwiXCIpXG4rXHRcdG4gPSBzcGxpdCgkMCwgYSwgL1stIF0vKVxuK1x0XHRzdGFydCA9IGhleDJudW0oYVsxXSlcbitcdFx0ZW5kICAgPSBoZXgybnVtKGFbMl0pXG4rXHRcdGlmIChlbmQgXHUwMDNjPSBzdGFydClcbitcdFx0XHRuZXh0XG4rXHRcdCMgUGFnZS1hbGlnbiB1cHdhcmQgYW5kIGVtaXQgdGhlIGZpcnN0IGJ5dGUgb2YgdGhhdCBwYWdlLlxuK1x0XHRwZm4gPSBpbnQoKHN0YXJ0ICsgcGFnZXNpemUgLSAxKSAvIHBhZ2VzaXplKVxuK1x0XHRwcmludGYgXCIweCV4XFxuXCIsIHBmbiAqIHBhZ2VzaXplXG4rXHRcdGV4aXQgMFxuK1x0fVxuK1x0JyAvcHJvYy9pb21lbVxuK31cbitcbisjIFdhbGsgL3Byb2Mva3BhZ2VmbGFncyBhbmQgcmV0dXJuIHRoZSBwaHlzIGFkZHIgb2YgdGhlIGZpcnN0IFBGTiB0aGF0XG4rIyBoYXMgYml0ICQxIHNldCwgd2l0aCBLUEZfSFdQT0lTT04sIEtQRl9OT1BBR0UgYW5kIEtQRl9DT01QT1VORF9UQUlMXG4rIyBhbGwgY2xlYXIgKHNvIHdlIGF0dGFjayBhIHJlYWwsIG5vbi10YWlsLCBub3QtYWxyZWFkeS1wb2lzb25lZCBwYWdlKS5cbisjXG4rIyBXZSBza2lwIHRoZSBmaXJzdCAxNiBNaUIgb2YgUEZOcyB0byBzdGVwIHBhc3QgbG93LW1lbW9yeSBzcGVjaWFsXG4rIyByYW5nZXMgKEJJT1MvRUZJL0FDUEkvZXRjLikgdGhhdCBvZnRlbiBhcmUgUEdfcmVzZXJ2ZWQgYW5kIHdvdWxkIG5vdFxuKyMgZXhoaWJpdCB0aGUgc2xhYi9wZ3RhYmxlIHR5cGUgd2UgYXJlIGxvb2tpbmcgZm9yLlxuK3BpY2tfa3BhZ2VmbGFnc19waHlzX2FkZHIoKSB7XG4rXHRsb2NhbCB3YW50X2JpdD0kMVxuK1x0bG9jYWwgcGFnZXNpemUgc2tpcF9wZm5cbitcbitcdFsgLXIgXCIka3BhZ2VmbGFnc19wYXRoXCIgXSB8fCByZXR1cm5cbitcbitcdHBhZ2VzaXplPSQoZ2V0Y29uZiBQQUdFX1NJWkUpXG4rXHRza2lwX3Bmbj0kKCgoMTYgKiAxMDI0ICogMTAyNCkgLyBwYWdlc2l6ZSkpXG4rXG4rXHRvZCAtQW4gLXR4OCAtdiAtdzggLWogXCIkKChza2lwX3BmbiAqIDgpKVwiIFwiJGtwYWdlZmxhZ3NfcGF0aFwiIDJcdTAwM2UvZGV2L251bGwgfCBcXFxuK1x0YXdrIC12IHdhbnRfYml0PVwiJHdhbnRfYml0XCIgXFxcbitcdCAgICAtdiBod3BfYml0PVwiJEtQRl9IV1BPSVNPTlwiIFxcXG4rXHQgICAgLXYgbm9wYWdlX2JpdD1cIiRLUEZfTk9QQUdFXCIgXFxcbitcdCAgICAtdiB0YWlsX2JpdD1cIiRLUEZfQ09NUE9VTkRfVEFJTFwiIFxcXG4rXHQgICAgLXYgYmFzZV9wZm49XCIkc2tpcF9wZm5cIiBcXFxuK1x0ICAgIC12IHBhZ2VzaXplPVwiJHBhZ2VzaXplXCIgJ1xuK1x0IyBUZXN0IHdoZXRoZXIgYml0IFwiYlwiIGlzIHNldCBpbiB0aGUgMTYtaGV4LWRpZ2l0IHZhbHVlIFwiaGV4XCIuXG4rXHQjIERvbmUgd2l0aCBzdWJzdHJpbmcgKyBwZXItZGlnaXQgbG9va3VwIHNvIHdlIG5ldmVyIHJlbHkgb24gYXdrXG4rXHQjIGJpdHdpc2Ugb3BlcmF0b3JzIChtYXdrIGxhY2tzIHRoZW0pLCA2NC1iaXQgRlAgcHJlY2lzaW9uIG9yIHRoZVxuK1x0IyBnYXdrLW9ubHkgc3RydG9udW0oKS5cbitcdGZ1bmN0aW9uIGJpdF9zZXQoaGV4LCBiLCAgICBkaSwgYmksIGMsIHYpIHtcbitcdFx0ZGkgPSBpbnQoYiAvIDQpXG4rXHRcdGJpID0gYiAtIGRpICogNFxuK1x0XHRjID0gc3Vic3RyKGhleCwgbGVuZ3RoKGhleCkgLSBkaSwgMSlcbitcdFx0diA9IGluZGV4KFwiMDEyMzQ1Njc4OWFiY2RlZlwiLCB0b2xvd2VyKGMpKSAtIDFcbitcdFx0aWYgKGJpID09IDApIHJldHVybiAodiAlIDIpID09IDFcbitcdFx0aWYgKGJpID09IDEpIHJldHVybiBpbnQodiAvIDIpICUgMiA9PSAxXG4rXHRcdGlmIChiaSA9PSAyKSByZXR1cm4gaW50KHYgLyA0KSAlIDIgPT0gMVxuK1x0XHRyZXR1cm4gaW50KHYgLyA4KSAlIDIgPT0gMVxuK1x0fVxuK1x0e1xuK1x0XHRnc3ViKC9eW1s6c3BhY2U6XV0rLywgXCJcIilcbitcdFx0aCA9ICQxXG4rXHRcdGlmIChiaXRfc2V0KGgsIHdhbnRfYml0KSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFiaXRfc2V0KGgsIGh3cF9iaXQpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIWJpdF9zZXQoaCwgbm9wYWdlX2JpdCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhYml0X3NldChoLCB0YWlsX2JpdCkpIHtcbitcdFx0XHRwZm4gPSBiYXNlX3BmbiArIE5SIC0gMVxuK1x0XHRcdHByaW50ZiBcIjB4JXhcXG5cIiwgcGZuICogcGFnZXNpemVcbitcdFx0XHRleGl0IDBcbitcdFx0fVxuK1x0fVxuK1x0J1xuK31cbitcbisjIFJldHVybiAwIGlmIC9wcm9jL2twYWdlZmxhZ3MgYml0ICQyIGlzIHNldCBmb3IgUEZOICQxLCAxIGlmIGl0IGlzXG4rIyBjbGVhciwgb3IgMiBpZiB0aGUgd29yZCBjYW5ub3QgYmUgcmVhZC4gIFVzZWQgdG8gcmUtY29uZmlybSB0aGUgdGFyZ2V0XG4rIyBwYWdlIHR5cGUgYWZ0ZXIgYSBub24tcGFuaWNraW5nIGluamVjdC5cbitrcGFnZWZsYWdzX2JpdF9zZXQoKSB7XG4rXHRsb2NhbCB3b3JkXG4rXG4rXHR3b3JkPSQob2QgLUFuIC10eDggLXYgLWogXCIkKCgkMSAqIDgpKVwiIC1OIDggXCIka3BhZ2VmbGFnc19wYXRoXCIgMlx1MDAzZS9kZXYvbnVsbCB8IHRyIC1kICdbOnNwYWNlOl0nKVxuK1x0WyAtbiBcIiR3b3JkXCIgXSB8fCByZXR1cm4gMlxuK1x0KCggKDE2IyR3b3JkIFx1MDAzZVx1MDAzZSAkMikgXHUwMDI2IDEgKSlcbit9XG4rXG4rIyBCZXN0LWVmZm9ydDogZHJvcCB0aGUgUEdfaHdwb2lzb24gbWFya2VyIHNldCBieSB0aGUgaW5qZWN0IHNvIGEgZmFpbGVkXG4rIyBydW4gZG9lcyBub3QgbGVhdmUgYSBwb2lzb25lZCBwYWdlIGJlaGluZC4gIGhhcmRfb2ZmbGluZV9wYWdlKCkgaW5qZWN0c1xuKyMgd2l0aCBNRl9TV19TSU1VTEFURUQsIHNvIHRoZSBwYWdlIHN0YXlzIHVucG9pc29uYWJsZSB0aHJvdWdoIHRoZVxuKyMgaHdwb2lzb24gZGVidWdmcyBpbnRlcmZhY2UgKG5lZWRzIENPTkZJR19IV1BPSVNPTl9JTkpFQ1QgKyBkZWJ1Z2ZzKS5cbit0cnlfdW5wb2lzb24oKSB7XG4rXHRbIC13IFwiJHVucG9pc29uX3BhdGhcIiBdIHx8IHJldHVybiAwXG4rXHRlY2hvIFwiJDFcIiBcdTAwM2UgXCIkdW5wb2lzb25fcGF0aFwiIDJcdTAwM2UvZGV2L251bGwgfHwgdHJ1ZVxuK31cbitcbitjYXNlIFwiJGtpbmRcIiBpblxuK3JvZGF0YSlcbitcdHBoeXNfYWRkcj0kKHBpY2tfcm9kYXRhX3BoeXNfYWRkcilcbitcdHJlY2hlY2tfYml0PSRLUEZfUkVTRVJWRURcbitcdG1pc3NpbmdfbXNnPSdubyBcIktlcm5lbCByb2RhdGFcIiBlbnRyeSBpbiAvcHJvYy9pb21lbSdcbitcdDs7XG4rc2xhYilcbitcdHBoeXNfYWRkcj0kKHBpY2tfa3BhZ2VmbGFnc19waHlzX2FkZHIgXCIkS1BGX1NMQUJcIilcbitcdHJlY2hlY2tfYml0PSRLUEZfU0xBQlxuK1x0bWlzc2luZ19tc2c9XCJubyB1c2FibGUgc2xhYiBQRk4gZm91bmQgaW4gJGtwYWdlZmxhZ3NfcGF0aFwiXG4rXHQ7O1xuK3BndGFibGUpXG4rXHRwaHlzX2FkZHI9JChwaWNrX2twYWdlZmxhZ3NfcGh5c19hZGRyIFwiJEtQRl9QR1RBQkxFXCIpXG4rXHRyZWNoZWNrX2JpdD0kS1BGX1BHVEFCTEVcbitcdG1pc3NpbmdfbXNnPVwibm8gdXNhYmxlIHBhZ2UtdGFibGUgUEZOIGZvdW5kIGluICRrcGFnZWZsYWdzX3BhdGhcIlxuK1x0OztcbisqKVxuK1x0a3RhcF9leGl0X2ZhaWxfbXNnIFwidW5rbm93biBraW5kICcka2luZCcgKGV4cGVjdGVkOiByb2RhdGF8c2xhYnxwZ3RhYmxlKVwiXG4rXHQ7O1xuK2VzYWNcbitcbitpZiBbIC16IFwiJHBoeXNfYWRkclwiIF07IHRoZW5cbitcdGt0YXBfc2tpcF9hbGwgXCIkbWlzc2luZ19tc2dcIlxuK1x0ZXhpdCBcIiRLU0ZUX1NLSVBcIlxuK2ZpXG4rXG4ra3RhcF9wcmludF9tc2cgXCJlbmFibGluZyAkc3lzY3RsX3BhdGhcIlxuK3ByaW9yPSQoY2F0IFwiJHN5c2N0bF9wYXRoXCIpXG4rZWNobyAxIFx1MDAzZSBcIiRzeXNjdGxfcGF0aFwiIHx8IGt0YXBfZXhpdF9mYWlsX21zZyBcImZhaWxlZCB0byBlbmFibGUgc3lzY3RsXCJcbitcbitwZm49JCgocGh5c19hZGRyIC8gcGFnZXNpemUpKVxuK2t0YXBfcHJpbnRfbXNnIFwiaW5qZWN0aW5nIGh3cG9pc29uIGF0IHBoeXMgMHgkKHByaW50ZiAnJXgnIFwiJHBoeXNfYWRkclwiKSAocGZuIDB4JChwcmludGYgJyV4JyBcIiRwZm5cIiksIGtpbmQ9JGtpbmQpXCJcbitrdGFwX3ByaW50X21zZyBcImV4cGVjdGluZyBrZXJuZWwgcGFuaWM6ICdNZW1vcnkgZmFpbHVyZTogXHUwMDNjcGZuXHUwMDNlOiB1bnJlY292ZXJhYmxlIHBhZ2UnXCJcbitcbisjIEEgc3VjY2Vzc2Z1bCBydW4gbmV2ZXIgcmV0dXJucyBmcm9tIHRoZSBpbmplY3QgLS0gaXQgcGFuaWNzIHRoZSBrZXJuZWwuXG4rIyBSZWFjaGluZyB0aGUgY29kZSBiZWxvdyB0aGVyZWZvcmUgbWVhbnMgbm8gcGFuaWMgZmlyZWQuICBOb3RlIHdoZXRoZXJcbisjIHRoZSB3cml0ZSBpdHNlbGYgc3VjY2VlZGVkLCB0aGVuIHB1dCB0aGUgbWFjaGluZSBiYWNrOiByZXN0b3JlIHRoZVxuKyMgc3lzY3RsIGFuZCBiZXN0LWVmZm9ydCB1bnBvaXNvbiB0aGUgcGFnZSB3ZSBqdXN0IG1hcmtlZC5cbitpZiBlY2hvIFwiJHBoeXNfYWRkclwiIFx1MDAzZSBcIiRpbmplY3RfcGF0aFwiOyB0aGVuXG4rXHR2ZXJkaWN0PVwiaW5qZWN0IHJldHVybmVkIHdpdGhvdXQgcGFuaWM7IHN5c2N0bCBpbmVmZmVjdGl2ZVwiXG4rZWxzZVxuK1x0dmVyZGljdD1cImluamVjdCBmYWlsZWQgYmVmb3JlIHJlYWNoaW5nIHRoZSBwYW5pYyBwYXRoXCJcbitmaVxuK1xuK2VjaG8gXCIkcHJpb3JcIiBcdTAwM2UgXCIkc3lzY3RsX3BhdGhcIlxuK3RyeV91bnBvaXNvbiBcIiRwZm5cIlxuK1xuKyMgVGhlIHBhZ2UgdHlwZSBjYW4gY2hhbmdlIGJldHdlZW4gc2VsZWN0aW9uIGFuZCBpbmplY3Rpb24gKGUuZy4gYSBzbGFiXG4rIyBvciBwYWdlLXRhYmxlIHBhZ2UgaXMgZnJlZWQgYW5kIHJldXNlZCkuICBPbmx5IHRyZWF0IGEgbWlzc2luZyBwYW5pYyBhc1xuKyMgYSBmYWlsdXJlIGlmIHRoZSB0YXJnZXQgUEZOIGlzIHN0aWxsIHRoZSBrZXJuZWwtb3duZWQgdHlwZSB3ZSBhaW1lZCBhdDtcbisjIGlmIGl0IHJhY2VkIHRvIGFub3RoZXIgdHlwZSB0aGUgcnVuIGlzIGluY29uY2x1c2l2ZSwgc28gc2tpcCBpbnN0ZWFkLlxuK2twYWdlZmxhZ3NfYml0X3NldCBcIiRwZm5cIiBcIiRyZWNoZWNrX2JpdFwiXG4rY2FzZSAkPyBpblxuKzApXHRrdGFwX2V4aXRfZmFpbF9tc2cgXCIkdmVyZGljdCAocGFnZSBzdGlsbCAka2luZClcIiA7O1xuKzEpXHRrdGFwX3NraXBfYWxsIFwidGFyZ2V0IFBGTiBubyBsb25nZXIgJGtpbmQ7IHJhY2VkIGJlZm9yZSBpbmplY3QsIGluY29uY2x1c2l2ZVwiXG4rXHRleGl0IFwiJEtTRlRfU0tJUFwiIDs7XG4rKilcdGt0YXBfZXhpdF9mYWlsX21zZyBcIiR2ZXJkaWN0IChjb3VsZCBub3QgcmVjb25maXJtIHBhZ2UgdHlwZSB2aWEgJGtwYWdlZmxhZ3NfcGF0aClcIiA7O1xuK2VzYWNcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE4OjU0OjA5LjY3ODIyMDIzMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4NzcwNDMwMDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV3IEtlcm5lbCBNZW1vcnkgRmFpbHVyZSBQYW5pYyBQYXRjaCoqXG5cbk9rYXksIHNvIHdlJ3ZlIGdvdCBhIG5ldyBwYXRjaCBpbnRyb2R1Y2luZyBhIGBzeXNjdGxgIGNhbGxlZCBgcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZWAsIHdoaWNoIGlzIGBzeXNjdGxfcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZmAgaW4gY29kZS4gVGhlIGNvcmUgY2hhbmdlIGlzIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYCwgYW5kIGl0J3MgZGVzaWduZWQgdG8gcGFuaWMgdGhlIGtlcm5lbCB3aGVuIGFuIHVucmVjb3ZlcmFibGUgbWVtb3J5IGZhaWx1cmUgb2NjdXJzIHNwZWNpZmljYWxseSBvbiBhIGtlcm5lbCBwYWdlLiBUaGUgcGF0Y2ggYWRkcyBgaXNfa2VybmVsX293bmVkX3BhZ2UoKWAgdG8gaWRlbnRpZnkga2VybmVsIHBhZ2VzOyBpdCBjaGVja3MgYFBhZ2VSZXNlcnZlZGAsIGBQYWdlU2xhYmAsIGBQYWdlVGFibGVgLCBhbmQgYFBhZ2VMYXJnZUttYWxsb2NgIGZsYWdzLiBJZiBpdCBmaW5kcyBhIGtlcm5lbC1vd25lZCBwYWdlLCBgZ2V0X2FueV9wYWdlKClgIHJldHVybnMgYC1FTk9UUkVDT1ZFUkFCTEVgLiBUaGVuLCBgbWVtb3J5X2ZhaWx1cmUoKWAgaGFuZGxlcyB0aGlzIGFuZCwgaWYgdGhlIHN5c2N0bCBpcyBzZXQsIGl0IHBhbmljcy5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBob3cgcmVhY2hhYmxlIGlzIHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgd2hpY2ggaXMgd2hlcmUgSSB1c3VhbGx5IHdvcms/IFR1cm5zIG91dCwgbWVtb3J5IGZhaWx1cmVzIGNhbiBiZSBpbmplY3RlZCB2aWEgYC9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2hhcmRfb2ZmbGluZV9wYWdlYCBvciBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAuIFRoZXJlJ3MgZXZlbiBhIHRlc3Qgc2NyaXB0LCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHdwb2lzb24tcGFuaWMuc2hgLCB0aGF0IHVzZXMgYGhhcmRfb2ZmbGluZV9wYWdlYC4gQWgsIGJ1dCB3YWl0LCBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAgb25seSB3b3JrcyBvbiAqdXNlciogcGFnZXMuIFNvLCB0byBoaXQga2VybmVsIHBhZ2VzLCB3ZSdyZSBzdHVjayB3aXRoIGAvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9oYXJkX29mZmxpbmVfcGFnZWAgb3IgcG90ZW50aWFsbHkgYW4gaHdwb2lzb24gaW5qZWN0aW9uIG1vZHVsZS4gR29vZCB0byBrbm93IGBoYXJkX29mZmxpbmVfcGFnZWAgaXMgYWNjZXNzaWJsZSBpZiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBpcyBlbmFibGVkLCB3aGljaCBpcyB0aGUga2V5LlxuXG5Ob3csIGNhbiB3ZSBhY3R1YWxseSByZWFjaCBgbWVtb3J5X2ZhaWx1cmUoKWAgb24ga2VybmVsIHBhZ2VzPyBZZXMsIGJlY2F1c2UgYGhhcmRfb2ZmbGluZV9wYWdlYCBpcyBhIHdyaXRlIHRvIHN5c2ZzLCB3aGljaCBlbmRzIHVwIGNhbGxpbmcgYG1lbW9yeV9mYWlsdXJlKClgLiBTaW5jZSBzeXprYWxsZXIgdXN1YWxseSBoYXMgYENPTkZJR19NRU1PUllfRkFJTFVSRWAgZW5hYmxlZCwgdGhpcyBpcyBhIGRpc3RpbmN0IHBvc3NpYmlsaXR5LiBEb2VzIHN5emthbGxlciBoYXZlIGFjY2VzcyB0byB0aGVzZSBzeXNmcyBvciBkZWJ1Z2ZzIHBhdGhzPyBUeXBpY2FsbHksIHN5emthbGxlciBkb2Vzbid0IGZ1enogZGVidWdmcyBvciBzeXNmcyB1bmxlc3Mgd2UndmUgZXhwbGljaXRseSBjb25maWd1cmVkIGl0IHRvLiBCdXQgaXQgZG9lcyBmdXp6IGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYC4gSG93ZXZlciwgYWdhaW4sIGBtYWR2aXNlYCBvbmx5IGhhbmRsZXMgdXNlciBwYWdlcywgdGhvdWdoIEkgc3VwcG9zZSBpdCBkb2VzIGNhbGwgYG1lbW9yeV9mYWlsdXJlKClgIG9uIHRoZSBQRk4gb2YgdGhlIHVzZXIgcGFnZS4gSXMgaXQgcG9zc2libGUgZm9yIGEgdXNlciBwYWdlIHRvIGJlIG1hcmtlZCBhcyBrZXJuZWwtb3duZWQgKCBgUGFnZVJlc2VydmVkYCwgYFBhZ2VTbGFiYCwgYFBhZ2VUYWJsZWAsIGBQYWdlTGFyZ2VLbWFsbG9jYCApPyBVc3VhbGx5IG5vdC5cblxuQnV0IHRoaXMgcGF0Y2ggaXMgc3BlY2lmaWNhbGx5IGFib3V0IHBhbmlja2luZyBvbiAqdW5yZWNvdmVyYWJsZSogbWVtb3J5IGZhaWx1cmVzLiBTbywgaXMgaXQgZXZlbiB3b3J0aCBmdXp6aW5nPyBJZiBpdCdzIGp1c3QgYSBwYW5pYyBvbiBhbiBlcnJvciBpbmplY3Rpb24gcGF0aCwgbWF5YmUgbm90LiBIb3dldmVyLCBgbWVtb3J5X2ZhaWx1cmUoKWAgY2FuIGJlIHRyaWdnZXJlZCBieSBhY3R1YWwgaGFyZHdhcmUgZXJyb3JzIChNQ0VzKSBvciBzb2Z0d2FyZSBpbmplY3Rpb24uIEluIGEgVk0sIGhhcmR3YXJlIGVycm9ycyBhcmUgbm90IHRoZSBub3JtLCBzbyBzb2Z0d2FyZSBpbmplY3Rpb24gaXMgdGhlIHdheSB0byBnby4gSWYgc3l6a2FsbGVyICpjYW4qIGluamVjdCBtZW1vcnkgZmFpbHVyZXMgaW50byBrZXJuZWwgcGFnZXMsIHRoZSByZXN1bHQgd2lsbCBzaW1wbHkgYmUgYSBrZXJuZWwgcGFuaWMsIHdoaWNoIGlzICpleGFjdGx5KiB3aGF0IHRoaXMgcGF0Y2ggaW50ZW5kcy5cblxuV2FpdCwgaXNuJ3QgYSBrZXJuZWwgcGFuaWMgYSBjcmFzaD8gU3l6a2FsbGVyIHJlcG9ydHMgcGFuaWNzIGFzIGNyYXNoZXMuIFNvLCBpZiBzeXprYWxsZXIgdHJpZ2dlcnMgdGhpcyBwYW5pYywgaXQnbGwgYmUgcmVwb3J0ZWQgYXMgYSBidWchIEJ1dCB0aGlzIHBhbmljIGlzIGFjdHVhbGx5ICppbnRlbnRpb25hbCogd2hlbiB0aGUgc3lzY3RsIGlzIGVuYWJsZWQuIElzIHRoYXQgc3lzY3RsIGVuYWJsZWQgYnkgZGVmYXVsdD8gQ2hlY2tpbmfigKYgYHN0YXRpYyBpbnQgc3lzY3RsX3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWYgX19yZWFkX21vc3RseTtgIEFoYSEgSXQncyB6ZXJvIGJ5IGRlZmF1bHQuIFNvLCBieSBkZWZhdWx0LCBpdCB3b24ndCBwYW5pYy4gSWYgc3l6a2FsbGVyIGRvZXNuJ3QgZW5hYmxlIHRoZSBzeXNjdGwsIG5vIHBhbmljLiBJZiBpdCAqZG9lcyogZW5hYmxlIGl0LCB0aGVuIHdlIGdldCB0aGUgcGFuaWMsIHdoaWNoIHN5emthbGxlciB3aWxsIGNvbnNpZGVyIGEgYnVnLCBidXQgaXQncyByZWFsbHkgdGhlIGRlc2lnbmVkIGJlaGF2aW9yLlxuXG5MZXQncyBub3QgZm9yZ2V0LCB0aGUgcGF0Y2ggYWxzbyBjaGFuZ2VzIGBnZXRfYW55X3BhZ2UoKWAgdG8gcmV0dXJuIGAtRU5PVFJFQ09WRVJBQkxFYCBpbnN0ZWFkIG9mIGAtRUlPYCBmb3Iga2VybmVsLW93bmVkIHBhZ2VzLiBCZWZvcmUsIGlmIGBnZXRfYW55X3BhZ2UoKWAgZ290IGAtRUlPYCBpdCB3b3VsZCBwcmludCBhbiBlcnJvciBtZXNzYWdlLiBOb3cgd2l0aCB0aGUgcGF0Y2gsIHRoZSBtZXNzYWdlIGlzIGByZWNvdmVyeSBhY3Rpb24gZm9yIGtlcm5lbCBwYWdlOiBJZ25vcmVkYC4gQW5kIGlmIHRoZSBzeXNjdGwgaXMgZW5hYmxlZCwgaXQgcGFuaWNzLlxuXG5JcyB0aGVyZSBhbnkgY29tcGxleCBsb2dpYyB0byBmdXp6IGhlcmU/IFRoZSBgaXNfa2VybmVsX293bmVkX3BhZ2UoKWAgY2hlY2sgbG9va3Mgc2ltcGxlIGVub3VnaDsgaXQncyBhIHN0cmFpZ2h0Zm9yd2FyZCBmbGFnIGNoZWNrLiBSZWFsbHksIHRoaXMgaXMgbW9zdGx5IGFib3V0IGFkZGluZyBhIHN5c2N0bCBmb3Iga2VybmVsIHBhZ2UgbWVtb3J5IGZhaWx1cmVzLiBTaW5jZSB0aG9zZSBmYWlsdXJlcyBhcmUgdHlwaWNhbGx5IG9ubHkgdHJpZ2dlcmVkIGJ5IGhhcmR3YXJlIGVycm9ycyBvciByb290LW9ubHkgc3lzZnMvZGVidWdmcyBpbmplY3Rpb24sIGFuZCB0aGUgcmVzdWx0IGlzIGEgY29udHJvbGxlZCBwYW5pYyBvciBhIGRpZmZlcmVudCBwcmludGssIGl0IHNlZW1zIHRoZXJlJ3Mgbm90IG11Y2ggZnVuY3Rpb25hbGx5IGV4cG9zZWQgdG8gcmVndWxhciB1c2VycyBvciBhbnkgY29tcGxleCBzdGF0ZSBtYWNoaW5lcyB0b1xuXG4iLCJJbnB1dFRva2VucyI6OTAxOSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NzIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxODo1NDoyOC40NDg2NTQ5MTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU1ODQ1MjMyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNQURWX0hXUE9JU09OXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbW0vaHdwb2lzb24ucnN0PTEwNj1UZXN0aW5nXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2h3cG9pc29uLnJzdC0xMDgtXFxuRG9jdW1lbnRhdGlvbi9tbS9od3BvaXNvbi5yc3Q6MTA5OiogbWFkdmlzZShNQURWX0hXUE9JU09OLCAuLi4uKSAoYXMgcm9vdCkgLSBQb2lzb24gYSBwYWdlIGluIHRoZVxcbkRvY3VtZW50YXRpb24vbW0vaHdwb2lzb24ucnN0LTExMC0gIHByb2Nlc3MgZm9yIHRlc3RpbmdcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h3cG9pc29uLnJzdD05Nj1QUl9NQ0VfS0lMTF9HRVRcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h3cG9pc29uLnJzdC0xMDEtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHdwb2lzb24ucnN0OjEwMjoqIG1hZHZpc2UoTUFEVl9IV1BPSVNPTiwgLi4uLikgKGFzIHJvb3QpIC0g5Zyo5rWL6K+V6L+H56iL5LitUG9pc29u5LiA5Liq6aG16Z2iXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHdwb2lzb24ucnN0LTEwMy1cXG4tLVxcbmFyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC04NS0jZGVmaW5lIE1BRFZfVU5NRVJHRUFCTEUgMTNcXHRcXHQvKiBLU00gbWF5IG5vdCBtZXJnZSBpZGVudGljYWwgcGFnZXMgKi9cXG5hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmg6ODY6I2RlZmluZSBNQURWX0hXUE9JU09OXFx0IDEwMFxcdFxcdC8qIHBvaXNvbiBhIHBhZ2UgZm9yIHRlc3RpbmcgKi9cXG5hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmgtODctXFxuLS1cXG5hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC03NC1cXG5hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaDo3NTojZGVmaW5lIE1BRFZfSFdQT0lTT04gICAgIDEwMFxcdFxcdC8qIHBvaXNvbiBhIHBhZ2UgZm9yIHRlc3RpbmcgKi9cXG5hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC03Ni0jZGVmaW5lIE1BRFZfU09GVF9PRkZMSU5FIDEwMVxcdFxcdC8qIHNvZnQgb2ZmbGluZSBwYWdlIGZvciB0ZXN0aW5nICovXFxuLS1cXG5pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaC01NS0jZGVmaW5lIE1BRFZfRE9GT1JLXFx0MTFcXHRcXHQvKiBkbyBpbmhlcml0IGFjcm9zcyBmb3JrICovXFxuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmg6NTY6I2RlZmluZSBNQURWX0hXUE9JU09OXFx0MTAwXFx0XFx0LyogcG9pc29uIGEgcGFnZSBmb3IgdGVzdGluZyAqL1xcbmluY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oLTU3LSNkZWZpbmUgTUFEVl9TT0ZUX09GRkxJTkUgMTAxXFx0XFx0Lyogc29mdCBvZmZsaW5lIHBhZ2UgZm9yIHRlc3RpbmcgKi9cXG4tLVxcbm1tL21hZHZpc2UuYz0xNDkyPXN0YXRpYyBib29sIGlzX21lbW9yeV9mYWlsdXJlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTE0OTQtXFx0c3dpdGNoIChtYWR2X2JlaGF2aW9yLVxcdTAwM2ViZWhhdmlvcikge1xcbm1tL21hZHZpc2UuYzoxNDk1OlxcdGNhc2UgTUFEVl9IV1BPSVNPTjpcXG5tbS9tYWR2aXNlLmMtMTQ5Ni1cXHRjYXNlIE1BRFZfU09GVF9PRkZMSU5FOlxcbi0tXFxubW0vbWFkdmlzZS5jPTE1MTg9bWFkdmlzZV9iZWhhdmlvcl92YWxpZChpbnQgYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTU1MS1cXHRjYXNlIE1BRFZfU09GVF9PRkZMSU5FOlxcbm1tL21hZHZpc2UuYzoxNTUyOlxcdGNhc2UgTUFEVl9IV1BPSVNPTjpcXG5tbS9tYWR2aXNlLmMtMTU1My0jZW5kaWZcXG4tLVxcbm1tL21hZHZpc2UuYz0xODg3PXN0YXRpYyBpbnQgbWFkdmlzZV9kb19iZWhhdmlvcih1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuX2luLFxcbi0tXFxubW0vbWFkdmlzZS5jLTE5NDMtICogIE1BRFZfS0VFUE9ORk9SSyAtIHVuZG8gdGhlIGVmZmVjdCBvZiBNQURWX1dJUEVPTkZPUktcXG5tbS9tYWR2aXNlLmM6MTk0NDogKiAgTUFEVl9IV1BPSVNPTiAtIHRyaWdnZXIgbWVtb3J5IGVycm9yIGhhbmRsZXIgYXMgaWYgdGhlIGdpdmVuIG1lbW9yeSByYW5nZVxcbm1tL21hZHZpc2UuYy0xOTQ1LSAqXFx0XFx0d2VyZSBjb3JydXB0ZWQgYnkgdW5yZWNvdmVyYWJsZSBoYXJkd2FyZSBtZW1vcnkgZmFpbHVyZS5cXG4tLVxcbnRvb2xzL2FyY2gvYWxwaGEvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmgtMzctI2RlZmluZSBQUk9UX1dSSVRFXFx0MHgyXFxudG9vbHMvYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaDozODovKiBNQURWX0hXUE9JU09OIGlzIHVuZGVmaW5lZCBvbiBhbHBoYSwgZml4IGl0IGZvciBwZXJmICovXFxudG9vbHMvYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaDozOTojZGVmaW5lIE1BRFZfSFdQT0lTT05cXHQxMDBcXG50b29scy9hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTQwLS8qIE1BRFZfU09GVF9PRkZMSU5FIGlzIHVuZGVmaW5lZCBvbiBhbHBoYSwgZml4IGl0IGZvciBwZXJmICovXFxuLS1cXG50b29scy9hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmgtMTAtI2RlZmluZSBNQURWX0hVR0VQQUdFXFx0MTRcXG50b29scy9hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmg6MTE6I2RlZmluZSBNQURWX0hXUE9JU09OXFx0IDEwMFxcbnRvb2xzL2FyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC0xMi0jZGVmaW5lIE1BRFZfTUVSR0VBQkxFXFx0IDEyXFxuLS1cXG50b29scy9hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC0zNy0jZGVmaW5lIFBST1RfV1JJVEVcXHQweDJcXG50b29scy9hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaDozODojZGVmaW5lIE1BRFZfSFdQT0lTT05cXHQxMDBcXG50b29scy9hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC0zOS0jZGVmaW5lIE1BRFZfU09GVF9PRkZMSU5FIDEwMVxcbi0tXFxudG9vbHMvYXJjaC94dGVuc2EvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmgtMzctI2RlZmluZSBQUk9UX1dSSVRFXFx0MHgyXFxudG9vbHMvYXJjaC94dGVuc2EvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmg6Mzg6LyogTUFEVl9IV1BPSVNPTiBpcyB1bmRlZmluZWQgb24geHRlbnNhLCBmaXggaXQgZm9yIHBlcmYgKi9cXG50b29scy9hcmNoL3h0ZW5zYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaDozOTojZGVmaW5lIE1BRFZfSFdQT0lTT05cXHQxMDBcXG50b29scy9hcmNoL3h0ZW5zYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC00MC0vKiBNQURWX1NPRlRfT0ZGTElORSBpcyB1bmRlZmluZWQgb24geHRlbnNhLCBmaXggaXQgZm9yIHBlcmYgKi9cXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oLTU1LSNkZWZpbmUgTUFEVl9ET0ZPUktcXHQxMVxcdFxcdC8qIGRvIGluaGVyaXQgYWNyb3NzIGZvcmsgKi9cXG50b29scy9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaDo1NjojZGVmaW5lIE1BRFZfSFdQT0lTT05cXHQxMDBcXHRcXHQvKiBwb2lzb24gYSBwYWdlIGZvciB0ZXN0aW5nICovXFxudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmgtNTctI2RlZmluZSBNQURWX1NPRlRfT0ZGTElORSAxMDFcXHRcXHQvKiBzb2Z0IG9mZmxpbmUgcGFnZSBmb3IgdGVzdGluZyAqL1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1yZWFkLWh3cG9pc29uLmM9MTc2PXRlc3RfaHVnZXRsYl9yZWFkX2h3cG9pc29uKGludCBmZCwgc2l6ZV90IGxlbiwgc2l6ZV90IHdyX2NodW5rX3NpemUsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXJlYWQtaHdwb2lzb24uYy0yMDUtXFx0aHdwX2FkZHIgPSBmaWxlbWFwICsgbGVuIC8gMiArIHBhZ2VzaXplO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItcmVhZC1od3BvaXNvbi5jOjIwNjpcXHRpZiAobWFkdmlzZShod3BfYWRkciwgcGFnZXNpemUsIE1BRFZfSFdQT0lTT04pIFxcdTAwM2MgMCkge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItcmVhZC1od3BvaXNvbi5jOjIwNzpcXHRcXHRrc2Z0X3BlcnJvcihcXFwiTUFEVl9IV1BPSVNPTiBmYWlsZWRcXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXJlYWQtaHdwb2lzb24uYy0yMDgtXFx0XFx0Z290byB1bm1hcDtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmM9NTg9c3RhdGljIGludCBtYWR2X2hhcmRfaW5qZWN0KEZJWFRVUkVfREFUQShtZW1vcnlfZmFpbHVyZSkgKiBzZWxmLCB2b2lkICp2YWRkcilcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jLTU5LXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jOjYwOlxcdHJldHVybiBtYWR2aXNlKHZhZGRyLCBzZWxmLVxcdTAwM2VwYWdlX3NpemUsIE1BRFZfSFdQT0lTT04pO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmMtNjEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxODo1NDozMi4wMDcxMTU0NjNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDYxOTA2OTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgYG1hZHZpc2VfaHdwb2lzb25gIGFuZCBDYXBhYmlsaXR5IFJlcXVpcmVtZW50cyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBgbWFkdmlzZV9od3BvaXNvbmAgc3lzdGVtIGNhbGwuIFRoZSBtb3N0IGRpcmVjdCBwYXRoIGlzIHRvIGNoZWNrIHRoZSBjb2RlIGl0c2VsZiwgc28gSSdsbCBoZWFkIG92ZXIgdG8gYG1tL21hZHZpc2UuY2AgaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIGFzY2VydGFpbiBkZWZpbml0aXZlbHkgaWYgdGhpcyBmdW5jdGlvbiByZXF1aXJlcyBgQ0FQX1NZU19BRE1JTmAgb3IgYW55IG90aGVyIGNhcGFiaWxpdGllcy4gSXTigJlzIGNydWNpYWwgdG8ga25vdyB0aGlzIGF0IGEgbG93IGxldmVsIHRvIHVuZGVyc3RhbmQgYW55IHNlY3VyaXR5IGJvdW5kYXJpZXMgYXJvdW5kIGl0LiBVbmRlcnN0YW5kaW5nIHRoZSBwcml2aWxlZ2UgbGV2ZWwgbmVlZGVkIHRvIGNhbGwgYG1hZHZpc2VfaHdwb2lzb25gIGlzIHRoZSBmb3VuZGF0aW9uYWwgZWxlbWVudCB0aGF0IHdpbGwgbGVhZCB0byBtb3JlIGNvbXBsZXggYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDkxLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTg6NTQ6MzUuNDY5MDI4MTMxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MDIwNzg4NjMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hZHZpc2VfaHdwb2lzb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE4OjU0OjM4LjE3MTEyNDM5NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5OTc1NTk0ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIGFuZCBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5SaWdodCwgaXQncyBoaXR0aW5nIG1lIHRoYXQgdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byB0aGUgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBmdW5jdGlvbiwgb3Igc29tZXRoaW5nIHZlcnkgc2ltaWxhci4gVGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50IGNhbiBiZSB0cmlja3ksIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBzcGVjaWZpYyBlcnJvciBpcyBvY2N1cnJpbmcuIEkgbmVlZCB0byBnZXQgaW50byB0aGUgY29kZSBhbmQgc2VlIGV4YWN0bHkgd2hhdCdzIGhhcHBlbmluZy5cblxuT2theSwgbXkgZmlyc3Qgc3RlcCBpcyB0byBjcmFjayBvcGVuIGBtbS9tYWR2aXNlLmNgLiBJIHJlbWVtYmVyIHRoYXQgYXJlYSBwcmV0dHkgd2VsbC4gSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgdG8gYXJvdW5kIGxpbmUgMTQ5Mi4gVGhhdCBzaG91bGQgcHV0IG1lIHJpZ2h0IGluIHRoZSB2aWNpbml0eSBvZiB3aGVyZSBJIGV4cGVjdCB0aGlzIGBtYWR2aXNlYCByZWxhdGVkIGVycm9yIHRvIGJlIGhhbmRsZWQgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCB3aGVyZSB0aGUgcmVsZXZhbnQgbG9naWMgaXMgZXhlY3V0ZWQuIEZyb20gdGhlcmUsIEkgY2FuIHN0YXJ0IHRyYWNpbmcgdGhlIGNvZGUgcGF0aHMgYW5kIGlkZW50aWZ5IHRoZSByb290IGNhdXNlLiBUaGlzIHNob3VsZCBhbGxvdyBtZSB0byBmb3JtdWxhdGUgYSBzb2x1dGlvbiBwcmV0dHkgcXVpY2tseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3MTQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxODo1NDo0Mi4xNjg2ODgzNjlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTYyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWFkdmlzZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0ODAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0ODA6XFx0XFx0XFx0XFx0cmV0ID0gbWVtb3J5X2ZhaWx1cmUocGZuLCBNRl9BQ1RJT05fUkVRVUlSRUQgfCBNRl9DT1VOVF9JTkNSRUFTRUQgfCBNRl9TV19TSU1VTEFURUQpO1xcbjE0ODE6XFx0XFx0XFx0XFx0aWYgKHJldCA9PSAtRU9QTk9UU1VQUClcXG4xNDgyOlxcdFxcdFxcdFxcdFxcdHJldCA9IDA7XFxuMTQ4MzpcXHRcXHRcXHR9XFxuMTQ4NDpcXHRcXG4xNDg1OlxcdFxcdFxcdGlmIChyZXQpXFxuMTQ4NjpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE0ODc6XFx0XFx0fVxcbjE0ODg6XFx0XFxuMTQ4OTpcXHRcXHRyZXR1cm4gMDtcXG4xNDkwOlxcdH1cXG4xNDkxOlxcdFxcbjE0OTI6XFx0c3RhdGljIGJvb2wgaXNfbWVtb3J5X2ZhaWx1cmUoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuMTQ5MzpcXHR7XFxuMTQ5NDpcXHRcXHRzd2l0Y2ggKG1hZHZfYmVoYXZpb3ItXFx1MDAzZWJlaGF2aW9yKSB7XFxuMTQ5NTpcXHRcXHRjYXNlIE1BRFZfSFdQT0lTT046XFxuMTQ5NjpcXHRcXHRjYXNlIE1BRFZfU09GVF9PRkZMSU5FOlxcbjE0OTc6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMTQ5ODpcXHRcXHRkZWZhdWx0OlxcbjE0OTk6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjE1MDA6XFx0XFx0fVxcbjE1MDE6XFx0fVxcbjE1MDI6XFx0XFxuMTUwMzpcXHQjZWxzZVxcbjE1MDQ6XFx0XFxuMTUwNTpcXHRzdGF0aWMgaW50IG1hZHZpc2VfaW5qZWN0X2Vycm9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbjE1MDY6XFx0e1xcbjE1MDc6XFx0XFx0cmV0dXJuIDA7XFxuMTUwODpcXHR9XFxuMTUwOTpcXHRcXG4xNTEwOlxcdHN0YXRpYyBib29sIGlzX21lbW9yeV9mYWlsdXJlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbjE1MTE6XFx0e1xcbjE1MTI6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjE1MTM6XFx0fVxcbjE1MTQ6XFx0XFxuMTUxNTpcXHQjZW5kaWZcXHQvKiBDT05GSUdfTUVNT1JZX0ZBSUxVUkUgKi9cXG4xNTE2OlxcdFxcbjE1MTc6XFx0c3RhdGljIGJvb2xcXG4xNTE4OlxcdG1hZHZpc2VfYmVoYXZpb3JfdmFsaWQoaW50IGJlaGF2aW9yKVxcbjE1MTk6XFx0e1xcbjE1MjA6XFx0XFx0c3dpdGNoIChiZWhhdmlvcikge1xcbjE1MjE6XFx0XFx0Y2FzZSBNQURWX0RPRk9SSzpcXG4xNTIyOlxcdFxcdGNhc2UgTUFEVl9ET05URk9SSzpcXG4xNTIzOlxcdFxcdGNhc2UgTUFEVl9OT1JNQUw6XFxuMTUyNDpcXHRcXHRjYXNlIE1BRFZfU0VRVUVOVElBTDpcXG4xNTI1OlxcdFxcdGNhc2UgTUFEVl9SQU5ET006XFxuMTUyNjpcXHRcXHRjYXNlIE1BRFZfUkVNT1ZFOlxcbjE1Mjc6XFx0XFx0Y2FzZSBNQURWX1dJTExORUVEOlxcbjE1Mjg6XFx0XFx0Y2FzZSBNQURWX0RPTlRORUVEOlxcbjE1Mjk6XFx0XFx0Y2FzZSBNQURWX0RPTlRORUVEX0xPQ0tFRDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTg6NTQ6NDIuMTY4OTA4NDc4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEwOTg3NDk1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIGBtYWR2aXNlX2luamVjdF9lcnJvcmAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgY29yZSBvZiB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgZ28gdG8gdGhlIHNvdXJjZS4gXCJMZXQncyBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgbWFkdmlzZV9pbmplY3RfZXJyb3JgXCIuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCB0cnV0aCBsaWVzLCBhbmQgSSB3YW50IHRvIHVuZGVyc3RhbmQgKnByZWNpc2VseSogd2hhdCB0aGlzIHRoaW5nIGlzLCBob3cgaXQncyBkZWZpbmVkLCBhbmQgd2hhdCBpdCdzIHN1cHBvc2VkIHRvIGRvLiBJIG5lZWQgdGhhdCBzb2xpZCwgZnVuZGFtZW50YWwgdW5kZXJzdGFuZGluZyB0byBtb3ZlIGZvcndhcmQuIE5vIHNob3J0Y3V0czsgdGhlIGRlZmluaXRpb24gKmlzKiB0aGUgc3RhcnRpbmcgcG9pbnQuIEknbSBnb2luZyB0byBsb29rIGF0IHRoZSByZWxldmFudCBoZWFkZXIgZmlsZXMsIGRvY3VtZW50YXRpb24sIG9yIGNvZGUgY29tbWVudHMuIFdoYXRldmVyIHRoZSBjYW5vbmljYWwgZGVmaW5pdGlvbiBzb3VyY2UgaXMsIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gYmUuIFdpdGhvdXQgaXQsIGV2ZXJ5dGhpbmcgZWxzZSBpcyBqdXN0IHNwZWN1bGF0aW9uLCBhbmQgSSBjYW4ndCBhZmZvcmQgdGhhdC4gU28sIGxldCdzIGdldCB0aGF0IGRlZmluaXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjMwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxODo1NDo0NS4yNzg3OTA1OTFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NDU4MjEyMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFkdmlzZV9pbmplY3RfZXJyb3JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWFkdmlzZS5jPTEzMzg9c3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xNDQ2LSAqL1xcbm1tL21hZHZpc2UuYzoxNDQ3OnN0YXRpYyBpbnQgbWFkdmlzZV9pbmplY3RfZXJyb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxubW0vbWFkdmlzZS5jLTE0NDgte1xcbi0tXFxubW0vbWFkdmlzZS5jPTE0OTI9c3RhdGljIGJvb2wgaXNfbWVtb3J5X2ZhaWx1cmUoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTUwNC1cXG5tbS9tYWR2aXNlLmM6MTUwNTpzdGF0aWMgaW50IG1hZHZpc2VfaW5qZWN0X2Vycm9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbm1tL21hZHZpc2UuYy0xNTA2LXtcXG4tLVxcbm1tL21hZHZpc2UuYz0xODg3PXN0YXRpYyBpbnQgbWFkdmlzZV9kb19iZWhhdmlvcih1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuX2luLFxcbi0tXFxubW0vbWFkdmlzZS5jLTE4OTYtXFx0XFx0cmFuZ2UtXFx1MDAzZWVuZCA9IHN0YXJ0ICsgbGVuX2luO1xcbm1tL21hZHZpc2UuYzoxODk3OlxcdFxcdHJldHVybiBtYWR2aXNlX2luamVjdF9lcnJvcihtYWR2X2JlaGF2aW9yKTtcXG5tbS9tYWR2aXNlLmMtMTg5OC1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE4OjU0OjQ4LjAyNDYyNTZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA1OTg1MDkwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGFzIGlmIHRoZXkgd2VyZSBteSBvd24gaW1tZWRpYXRlIHByb2Nlc3Npbmc6XG5cbioqRGl2aW5nIGludG8gYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCwgc3BlY2lmaWNhbGx5IHN0YXJ0aW5nIGFyb3VuZCBsaW5lIDE0NDcuIE15IHNwaWRlciBzZW5zZXMgYXJlIHRpbmdsaW5nLCBhbmQgSSBoYXZlIGEgZmVlbGluZyBzb21ldGhpbmcgaW50ZXJlc3RpbmcgaXMgZ29pbmcgdG8gcmV2ZWFsIGl0c2VsZi4gR2l2ZW4gdGhlIG5hbWUsIEknbSBhbnRpY2lwYXRpbmcgdGhpcyBmdW5jdGlvbiBpcyByZWxhdGVkIHRvIHRoZSBzaW11bGF0aW9uIG9yIGluamVjdGlvbiBvZiBlcnJvcnMgZHVyaW5nIG1lbW9yeSBtYW5hZ2VtZW50LCBsaWtlbHkgYSBjcml0aWNhbCBwaWVjZSBmb3IgdGVzdGluZyBvciBkZWJ1Z2dpbmcgbWVtb3J5LXJlbGF0ZWQgYmVoYXZpb3IgdW5kZXIgYWR2ZXJzZSBjb25kaXRpb25zLiBJJ20gaG9waW5nIHRvIHVuZGVyc3RhbmQgaXRzIG1lY2hhbmljcywgaG93IGl0IGludGVncmF0ZXMgd2l0aCB0aGUgb3ZlcmFsbCBgbWFkdmlzZWAgZnJhbWV3b3JrLCBhbmQgaWRlYWxseSwgd2hhdCBlcnJvciBjb25kaXRpb25zIGl0J3MgZGVzaWduZWQgdG8gc2ltdWxhdGUuIEknbSBrZWVuIG9uIHNlZWluZyBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgcGFnZSB0YWJsZSBtYW5pcHVsYXRpb24gb3IgTlVNQSBpbnRlcmFjdGlvbnMuIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGtpbmRzIG9mIGVycm9ycyBpdCBjYW4gdHJpZ2dlciwgYW5kIGhvdyBpdCB0aGVuIHBsYXlzIGJhY2sgaW50byB0aGUgb3ZlcmFsbCBzeXN0ZW0gZGVzaWduLiBMZXQncyBzZWUgd2hhdCBzZWNyZXRzIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgcGFydGljdWxhciBwaWVjZSBvZiBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE4NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE4OjU0OjUzLjA4NDQ4MDI3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDU1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tYWR2aXNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ0MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQ0MDpcXHRcXHRyZXR1cm4gZXJyb3I7XFxuMTQ0MTpcXHR9XFxuMTQ0MjpcXHRcXG4xNDQzOlxcdCNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVcXG4xNDQ0OlxcdC8qXFxuMTQ0NTpcXHQgKiBFcnJvciBpbmplY3Rpb24gc3VwcG9ydCBmb3IgbWVtb3J5IGVycm9yIGhhbmRsaW5nLlxcbjE0NDY6XFx0ICovXFxuMTQ0NzpcXHRzdGF0aWMgaW50IG1hZHZpc2VfaW5qZWN0X2Vycm9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbjE0NDg6XFx0e1xcbjE0NDk6XFx0XFx0dW5zaWduZWQgbG9uZyBzaXplO1xcbjE0NTA6XFx0XFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IG1hZHZfYmVoYXZpb3ItXFx1MDAzZXJhbmdlLnN0YXJ0O1xcbjE0NTE6XFx0XFx0dW5zaWduZWQgbG9uZyBlbmQgPSBtYWR2X2JlaGF2aW9yLVxcdTAwM2VyYW5nZS5lbmQ7XFxuMTQ1MjpcXHRcXG4xNDUzOlxcdFxcdGlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSlcXG4xNDU0OlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuMTQ1NTpcXHRcXG4xNDU2OlxcdFxcdGZvciAoOyBzdGFydCBcXHUwMDNjIGVuZDsgc3RhcnQgKz0gc2l6ZSkge1xcbjE0NTc6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBwZm47XFxuMTQ1ODpcXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4xNDU5OlxcdFxcdFxcdGludCByZXQ7XFxuMTQ2MDpcXHRcXG4xNDYxOlxcdFxcdFxcdHJldCA9IGdldF91c2VyX3BhZ2VzX2Zhc3Qoc3RhcnQsIDEsIDAsIFxcdTAwMjZwYWdlKTtcXG4xNDYyOlxcdFxcdFxcdGlmIChyZXQgIT0gMSlcXG4xNDYzOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTQ2NDpcXHRcXHRcXHRwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTtcXG4xNDY1OlxcdFxcbjE0NjY6XFx0XFx0XFx0LypcXG4xNDY3OlxcdFxcdFxcdCAqIFdoZW4gc29mdCBvZmZsaW5pbmcgaHVnZXBhZ2VzLCBhZnRlciBtaWdyYXRpbmcgdGhlIHBhZ2VcXG4xNDY4OlxcdFxcdFxcdCAqIHdlIGRpc3NvbHZlIGl0LCB0aGVyZWZvcmUgaW4gdGhlIHNlY29uZCBsb29wIFxcXCJwYWdlXFxcIiB3aWxsXFxuMTQ2OTpcXHRcXHRcXHQgKiBubyBsb25nZXIgYmUgYSBjb21wb3VuZCBwYWdlLlxcbjE0NzA6XFx0XFx0XFx0ICovXFxuMTQ3MTpcXHRcXHRcXHRzaXplID0gcGFnZV9zaXplKGNvbXBvdW5kX2hlYWQocGFnZSkpO1xcbjE0NzI6XFx0XFxuMTQ3MzpcXHRcXHRcXHRpZiAobWFkdl9iZWhhdmlvci1cXHUwMDNlYmVoYXZpb3IgPT0gTUFEVl9TT0ZUX09GRkxJTkUpIHtcXG4xNDc0OlxcdFxcdFxcdFxcdHByX2luZm8oXFxcIlNvZnQgb2ZmbGluaW5nIHBmbiAlI2x4IGF0IHByb2Nlc3MgdmlydHVhbCBhZGRyZXNzICUjbHhcXFxcblxcXCIsXFxuMTQ3NTpcXHRcXHRcXHRcXHRcXHQgcGZuLCBzdGFydCk7XFxuMTQ3NjpcXHRcXHRcXHRcXHRyZXQgPSBzb2Z0X29mZmxpbmVfcGFnZShwZm4sIE1GX0NPVU5UX0lOQ1JFQVNFRCk7XFxuMTQ3NzpcXHRcXHRcXHR9IGVsc2Uge1xcbjE0Nzg6XFx0XFx0XFx0XFx0cHJfaW5mbyhcXFwiSW5qZWN0aW5nIG1lbW9yeSBmYWlsdXJlIGZvciBwZm4gJSNseCBhdCBwcm9jZXNzIHZpcnR1YWwgYWRkcmVzcyAlI2x4XFxcXG5cXFwiLFxcbjE0Nzk6XFx0XFx0XFx0XFx0XFx0IHBmbiwgc3RhcnQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxODo1NDo1My4wODQ2Njc5NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDg4NDQxMTYzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGxpY2F0aW9ucyBvZiBgTUFEVl9IV1BPSVNPTmAgYW5kIEtlcm5lbCBQYW5pY3MqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBgTUFEVl9IV1BPSVNPTmAgdGhpbmcgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsLiBJdCBzZWVtcyBsaWtlIHRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgYENBUF9TWVNfQURNSU5gLCB3aGljaCBpcyBlc3NlbnRpYWxseSBnbG9iYWwgcm9vdCBhY2Nlc3MuIEkga25vdyBTeXprYWxsZXIgdHlwaWNhbGx5IHJ1bnMgYXMgcm9vdCB3aXRoaW4gaXRzIG93biB1c2VyIG5hbWVzcGFjZSwgYnV0IHRoZSBgY2FwYWJsZSgpYCBjaGVjayBpcyBhZ2FpbnN0IHRoZSBpbml0aWFsIHVzZXIgbmFtZXNwYWNlLCBtZWFuaW5nIGl0IG5lZWRzICphY3R1YWwqIHJvb3QuIFNpbmNlIFN5emthbGxlciBvcGVyYXRlcyBpbiBhIFZNLCBpdCBoYXMgdGhhdCBsZXZlbCBvZiBhY2Nlc3MgYW5kIGNhbiBjYWxsIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYC5cblxuVGhlIGNydWNpYWwgcG9pbnQgaXMgdGhhdCBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAgY2FsbHMgYGdldF91c2VyX3BhZ2VzX2Zhc3RgLiBOb3csIEkga25vdyBgZ2V0X3VzZXJfcGFnZXNfZmFzdGAgKm9ubHkqIHJldHVybnMgcGFnZXMgbWFwcGVkIHdpdGhpbiB0aGUgdXNlcidzIGFkZHJlc3Mgc3BhY2UuIEl0IGRvZXNuJ3QgZ2l2ZSB5b3Uga2VybmVsIHBhZ2VzIGRpcmVjdGx5LiBBIHVzZXIgdXN1YWxseSBjYW4ndCBtYXAgYSBrZXJuZWwgcGFnZSB1bmxlc3MgdGhlcmUncyBhIGJ1ZyBvciBpdCdzIGFuIGludGVuZGVkIG1lY2hhbmlzbSBsaWtlIHdpdGggYC9kZXYvbWVtYCBvciBhIGRyaXZlciBpc3N1ZS4gT2ggd2FpdCwgdGhlIHZEU08hIFRoYXQncyBtYXBwZWQgaW4gdXNlciBzcGFjZS4gQ291bGQgYSB1c2VyIHRoZW4gY2FsbCBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAgb24gdGhlIHZEU08/XG5cbkxldCBtZSBjaGVjayBpZiB0aGUgdkRTTyBpcyBgUGFnZVJlc2VydmVkYC4gWWVzLCB1c3VhbGx5IHZEU08gcGFnZXMgKmFyZSogYFBhZ2VSZXNlcnZlZGAuIElmIGBnZXRfdXNlcl9wYWdlc19mYXN0YCByZXR1cm5zIHRoZSB2RFNPIHBhZ2UgYW5kIHdlIGNhbGwgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIG9uIGl0LCB0aGF04oCZcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBgbWVtb3J5X2ZhaWx1cmUoKWAgZ2V0cyBjYWxsZWQgb24gdGhlIHZEU08gcGFnZS4gU2luY2UgaXQncyByZXNlcnZlZCwgYGlzX2tlcm5lbF9vd25lZF9wYWdlKClgIHdpbGwgcmV0dXJuIHRydWUuIGBnZXRfYW55X3BhZ2UoKWAgd2lsbCB0aGVuIHJldHVybiBgLUVOT1RSRUNPVkVSQUJMRWAuIGBtZW1vcnlfZmFpbHVyZSgpYCB3aWxsIHRoZW4gZW5kIHVwIGNhbGxpbmcgYGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfS0VSTkVMLCBNRl9JR05PUkVEKWAuXG5cbkFuZCB0aGlzIGlzIHdoZXJlIGl0IGNsaWNrczogaWYgYHN5c2N0bF9wYW5pY19vbl91bnJlY292ZXJhYmxlX21mYCBpcyBzZXQgdG8gMSwgKmJvb20qLCBrZXJuZWwgcGFuaWMhIEJ1dCB0aGlzIGlzbid0IGEgYnVnLiBUaGlzIGlzIGV4cGxpY2l0IGRlc2lnbiEgVGhlIHN5c2N0bCBpcyBpbnRlbmRlZCB0byBwYW5pYyB3aGVuIGEgbWVtb3J5IGZhaWx1cmUgaGl0cyBhIGtlcm5lbC1vd25lZCBwYWdlLiBUaGUgcGF0Y2ggZXZlbiBzcGVjaWZpY2FsbHkgbWVudGlvbnMgdGhlIHZEU08sIGFsb25nIHdpdGggdGhlIHplcm8gcGFnZSwgYXMgZXhhbXBsZXMgb2Yga2VybmVsLW93bmVkIHBhZ2VzIHRoYXQgdHJpZ2dlciBhIHBhbmljIGluIHRoaXMgc2NlbmFyaW8uIFRoaXMgaXMgYmVjYXVzZSBgTUFEVl9IV1BPSVNPTmAgaXMgbWVhbnQgdG8gKnNpbXVsYXRlKiBoYXJkd2FyZSBtZW1vcnkgZmFpbHVyZXMsIHNvIGNhdXNpbmcgYSBcIm1lbW9yeSBmYWlsdXJlXCIgb24gdGhlIHZEU08gd2lsbCB0cmlnZ2VyIGEgcGFuaWMuIFRoaXMgaXMgdGhlIGludGVuZGVkIGJlaGF2aW9yIG9mIHRoZSBzeXNjdGwuXG5cblNvLCBpcyB0aGVyZSBldmVuIGFueSBjb21wbGV4IGxvZ2ljIHRoYXQgbmVlZHMgZnV6emluZz8gVGhlIHBhdGNoIGl0c2VsZiBwcmltYXJpbHkgaW50cm9kdWNlcyBhIHN5c2N0bCBhbmQgY2hhbmdlcyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBnZXRfYW55X3BhZ2UoKWAgZm9yIGtlcm5lbCBwYWdlcy4gSWYgd2UgZW5hYmxlIHRoZSBzeXNjdGwsIFN5emthbGxlciB3aWxsIHNpbXBseSBmaW5kIHRoYXQgY2FsbGluZyBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAgb24gdGhlIHZEU08gb3IgdGhlIHplcm8gcGFnZSBwYW5pY3MgdGhlIGtlcm5lbC4gU3l6a2FsbGVyIHdvdWxkIHRoZW4gcmVwb3J0IHRoaXMgYXMgYSBidWc6IFwia2VybmVsIHBhbmljOiBNZW1vcnkgZmFpbHVyZTogLi4uIHVucmVjb3ZlcmFibGUgcGFnZS5cIiBCdXQgdGhpcyBpcyBOT1QgYSBidWchIEl04oCZcyB0aGUgaW50ZW5kZWQgb3V0Y29tZSBvZiB0aGUgc3lzY3RsLlxuXG5Ob3csIGlmIHdlIHRlbGwgc3l6a2FsbGVyIHRvIGZ1enogdGhpcywgaXQgd2lsbCBqdXN0IGZsb29kIHVzIHdpdGggZmFsc2UgcG9zaXRpdmVzLiBUaGFua2Z1bGx5LCB0aGVyZSBpcyBhIGxpc3Qgb2Yga25vd24gaW50ZW50aW9uYWwgcGFuaWNzIHRoYXQgaXQgaWdub3Jlcywgb3IsIHdlIGNvdWxkIGp1c3QgYXZvaWQgZW5hYmxpbmcgdGhlIHN5c2N0bC4gSWYgdGhlIHN5c2N0bCBpc24ndCBlbmFibGVkLCB0aGUgcGFuaWMgZG9lc24ndCBoYXBwZW4uIFRoZSBjaGFuZ2UgdGhlbiBiZWNvbWVzIGNvc21ldGljIGJlY2F1c2UgYGdldF9hbnlfcGFnZSgpYCByZXR1cm5zIGAtRU5PVFJFQ09WRVJBQkxFYCBpbnN0ZWFkIG9mIGAtRUlPYC4gQmVmb3JlIHRoZSBwYXRjaCwgaXQgd291bGQgY2FsbCBgYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19HRVRfSFdQT0lTT04sIE1GX0lHTk9SRUQpYC4gTm93LCB0aGVyZSBpcyBvbmx5IGEgZGlmZmVyZW5jZSBpbiB0aGUgcHJpbnRrIG1lc3NhZ2Ug4oCTIFwicmVjb3ZlcnkgYWN0aW9uIGZvciBrZXJuZWwgcGFnZTogSWdub3JlZFwiIGluc3RlYWQgb2YgXCJyZWNvdmVyeSBhY3Rpb24gZm9yIHVua25vd24gcGFnZTogSWdub3JlZFwiLiBUaGlzIGlzIGEgbmVnbGlnaWJsZSBjaGFuZ2UuXG5cbkknZCBiZXR0ZXIgZG91YmxlIGNoZWNrIGBnZXRfYW55X3BhZ2UoKWAgdG8gYmUgc3VyZSwgdGhvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjA3NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxODo1NTowNy45NjkwODQyNDhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjczNzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbW9yeS1mYWlsdXJlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQyMDpcXHRcXG4xNDIxOlxcdHN0YXRpYyBpbnQgZ2V0X2FueV9wYWdlKHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbjE0MjI6XFx0e1xcbjE0MjM6XFx0XFx0aW50IHJldCA9IDAsIHBhc3MgPSAwO1xcbjE0MjQ6XFx0XFx0Ym9vbCBjb3VudF9pbmNyZWFzZWQgPSBmYWxzZTtcXG4xNDI1OlxcdFxcbjE0MjY6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgTUZfQ09VTlRfSU5DUkVBU0VEKVxcbjE0Mjc6XFx0XFx0XFx0Y291bnRfaW5jcmVhc2VkID0gdHJ1ZTtcXG4xNDI4OlxcdFxcbjE0Mjk6XFx0XFx0LypcXG4xNDMwOlxcdFxcdCAqIFBhZ2UgdHlwZXMgd2Uga25vdyBhcmUga2VybmVsLW93bmVkIGFuZCBjYW5ub3QgYmUgcmVjb3ZlcmVkLlxcbjE0MzE6XFx0XFx0ICogU2hvcnQtY2lyY3VpdCBiZWZvcmUgdGhlIHNoYWtlX3BhZ2UoKSAvIHJldHJ5IGxvb3AsIHdoaWNoXFxuMTQzMjpcXHRcXHQgKiBjYW5ub3QgdHVybiBhbnkgb2YgdGhlc2UgaW50byBzb21ldGhpbmcgSFdQb2lzb25IYW5kbGFibGUoKS5cXG4xNDMzOlxcdFxcdCAqIERyb3AgdGhlIGNhbGxlcidzIHJlZmVyZW5jZSBpZiBNRl9DT1VOVF9JTkNSRUFTRUQgdG9vayBvbmUuXFxuMTQzNDpcXHRcXHQgKi9cXG4xNDM1OlxcdFxcdGlmIChpc19rZXJuZWxfb3duZWRfcGFnZShwKSkge1xcbjE0MzY6XFx0XFx0XFx0aWYgKGNvdW50X2luY3JlYXNlZClcXG4xNDM3OlxcdFxcdFxcdFxcdHB1dF9wYWdlKHApO1xcbjE0Mzg6XFx0XFx0XFx0cmV0ID0gLUVOT1RSRUNPVkVSQUJMRTtcXG4xNDM5OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE0NDA6XFx0XFx0fVxcbjE0NDE6XFx0XFxuMTQ0MjpcXHR0cnlfYWdhaW46XFxuMTQ0MzpcXHRcXHRpZiAoIWNvdW50X2luY3JlYXNlZCkge1xcbjE0NDQ6XFx0XFx0XFx0cmV0ID0gX19nZXRfaHdwb2lzb25fcGFnZShwLCBmbGFncyk7XFxuMTQ0NTpcXHRcXHRcXHRpZiAoIXJldCkge1xcbjE0NDY6XFx0XFx0XFx0XFx0aWYgKHBhZ2VfY291bnQocCkpIHtcXG4xNDQ3OlxcdFxcdFxcdFxcdFxcdC8qIFdlIHJhY2VkIHdpdGggYW4gYWxsb2NhdGlvbiwgcmV0cnkuICovXFxuMTQ0ODpcXHRcXHRcXHRcXHRcXHRpZiAocGFzcysrIFxcdTAwM2MgR0VUX1BBR0VfTUFYX1JFVFJZX05VTSlcXG4xNDQ5OlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gdHJ5X2FnYWluO1xcbjE0NTA6XFx0XFx0XFx0XFx0XFx0cmV0ID0gLUVCVVNZO1xcbjE0NTE6XFx0XFx0XFx0XFx0fSBlbHNlIGlmICghUGFnZUh1Z2UocCkgXFx1MDAyNlxcdTAwMjYgIWlzX2ZyZWVfYnVkZHlfcGFnZShwKSkge1xcbjE0NTI6XFx0XFx0XFx0XFx0XFx0LyogV2UgcmFjZWQgd2l0aCBwdXRfcGFnZSwgcmV0cnkuICovXFxuMTQ1MzpcXHRcXHRcXHRcXHRcXHRpZiAocGFzcysrIFxcdTAwM2MgR0VUX1BBR0VfTUFYX1JFVFJZX05VTSlcXG4xNDU0OlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gdHJ5X2FnYWluO1xcbjE0NTU6XFx0XFx0XFx0XFx0XFx0cmV0ID0gLUVJTztcXG4xNDU2OlxcdFxcdFxcdFxcdH1cXG4xNDU3OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjE0NTg6XFx0XFx0XFx0fSBlbHNlIGlmIChyZXQgPT0gLUVCVVNZKSB7XFxuMTQ1OTpcXHRcXHRcXHRcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxODo1NTowNy45NjkzNjc0NjhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjcyNTk4MzI3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbGx5IFVuZXhwZWN0ZWQgTWVtb3J5IFBhZ2UgU3RhdGUqKlxuXG5Pa2F5LCBzbyBJJ20gc2VlaW5nIGBnZXRfYW55X3BhZ2UoKWAgYmVpbmcgY2FsbGVkIGZyb20gYG1lbW9yeV9mYWlsdXJlKClgIOKAkyB3aGljaCBpcyBhIGJpdCB1bnVzdWFsLiBUaGUgY3J1Y2lhbCBwYXJ0IGhlcmUgaXMgdGhhdCBgcGZuX3ZhbGlkKClgIGlzIHJldHVybmluZyB0cnVlICpidXQqIGl0J3Mgbm90IGEgKm5vcm1hbCogcGFnZS4gVGhhdCdzIGltbWVkaWF0ZWx5IGZsYWdnZWQgYXMgYSBwb2ludCBvZiBpbnRlcmVzdC4gU29tZXRoaW5nJ3MgY2xlYXJseSBub3QgYXMgaXQgc2hvdWxkIGJlLCBhbmQgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC5cblxuV2FpdCBhIHNlY29uZCwgd2FzbuKAmXQgdGhhdCBzYW1lIGZ1bmN0aW9uIGNhbGwgYWxzbyBhc3NvY2lhdGVkIHdpdGggYGdldF9od3BvaXNvbl9wYWdlKClgPyBNeSBtZW1vcnkgaXMgZmxhZ2dpbmcgdGhhdCB1cC4gTGV0IG1lIHNoaWZ0IGZvY3VzIGltbWVkaWF0ZWx5IHRvIGBnZXRfaHdwb2lzb25fcGFnZSgpYCBiZWNhdXNlIHRoYXQgY29udGV4dCBpcyBsaWtlbHkgcmVsYXRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB0aGVyZSwgYW5kIGhvdyBgZ2V0X2FueV9wYWdlKClgIGlzIGdldHRpbmcgaW52b2x2ZWQgaW4gdGhlIGhhcmR3YXJlIHBvaXNvbmluZyBzY2VuYXJpbyB0byB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIHJvb3QgY2F1c2UuIExldCdzIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24ncyBkZXRhaWxzIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2NTgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE4OjU1OjE0LjY5NTM1NjAxM1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTYwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNTQwOlxcdCAqXFxuMTU0MTpcXHQgKiBSZXR1cm46IDAgb24gZmFpbHVyZSBvciBmcmVlIGJ1ZGR5IChodWdldGxiKSBwYWdlLFxcbjE1NDI6XFx0ICogICAgICAgICAxIG9uIHN1Y2Nlc3MgZm9yIGluLXVzZSBwYWdlcyBpbiBhIHdlbGwtZGVmaW5lZCBzdGF0ZSxcXG4xNTQzOlxcdCAqICAgICAgICAgLUVJTyBmb3IgcGFnZXMgb24gd2hpY2ggd2UgY2FuIG5vdCBoYW5kbGUgbWVtb3J5IGVycm9ycyxcXG4xNTQ0OlxcdCAqICAgICAgICAgLUVCVVNZIHdoZW4gZ2V0X2h3cG9pc29uX3BhZ2UoKSBoYXMgcmFjZWQgd2l0aCBwYWdlIGxpZmVjeWNsZVxcbjE1NDU6XFx0ICogICAgICAgICBvcGVyYXRpb25zIGxpa2UgYWxsb2NhdGlvbiBhbmQgZnJlZSxcXG4xNTQ2OlxcdCAqICAgICAgICAgLUVIV1BPSVNPTiB3aGVuIHRoZSBwYWdlIGlzIGh3cG9pc29uZWQgYW5kIHRha2VuIG9mZiBmcm9tIGJ1ZGR5LFxcbjE1NDc6XFx0ICogICAgICAgICAtRU5PVFJFQ09WRVJBQkxFIGZvciBrZXJuZWwtb3duZWQgcGFnZXMgaWRlbnRpZmllZCBieVxcbjE1NDg6XFx0ICogICAgICAgICBpc19rZXJuZWxfb3duZWRfcGFnZSgpIChQR19yZXNlcnZlZCwgc2xhYixcXG4xNTQ5OlxcdCAqICAgICAgICAgcGFnZS10YWJsZSwgbGFyZ2Uta21hbGxvYykgdGhhdCB0aGUgaGFuZGxlciBjYW5ub3QgcmVjb3Zlci5cXG4xNTUwOlxcdCAqL1xcbjE1NTE6XFx0c3RhdGljIGludCBnZXRfaHdwb2lzb25fcGFnZShzdHJ1Y3QgcGFnZSAqcCwgdW5zaWduZWQgbG9uZyBmbGFncylcXG4xNTUyOlxcdHtcXG4xNTUzOlxcdFxcdGludCByZXQ7XFxuMTU1NDpcXHRcXG4xNTU1OlxcdFxcdHpvbmVfcGNwX2Rpc2FibGUocGFnZV96b25lKHApKTtcXG4xNTU2OlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IE1GX1VOUE9JU09OKVxcbjE1NTc6XFx0XFx0XFx0cmV0ID0gX19nZXRfdW5wb2lzb25fcGFnZShwKTtcXG4xNTU4OlxcdFxcdGVsc2VcXG4xNTU5OlxcdFxcdFxcdHJldCA9IGdldF9hbnlfcGFnZShwLCBmbGFncyk7XFxuMTU2MDpcXHRcXHR6b25lX3BjcF9lbmFibGUocGFnZV96b25lKHApKTtcXG4xNTYxOlxcdFxcbjE1NjI6XFx0XFx0cmV0dXJuIHJldDtcXG4xNTYzOlxcdH1cXG4xNTY0OlxcdFxcbjE1NjU6XFx0LypcXG4xNTY2OlxcdCAqIFRoZSBjYWxsZXIgbXVzdCBndWFyYW50ZWUgdGhlIGZvbGlvIGlzbid0IGxhcmdlIGZvbGlvLCBleGNlcHQgaHVnZXRsYi5cXG4xNTY3OlxcdCAqIHRyeV90b191bm1hcCgpIGNhbid0IGhhbmRsZSBpdC5cXG4xNTY4OlxcdCAqL1xcbjE1Njk6XFx0aW50IHVubWFwX3BvaXNvbmVkX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGxvbmcgcGZuLCBib29sIG11c3Rfa2lsbClcXG4xNTcwOlxcdHtcXG4xNTcxOlxcdFxcdGVudW0gdHR1X2ZsYWdzIHR0dSA9IFRUVV9JR05PUkVfTUxPQ0sgfCBUVFVfU1lOQyB8IFRUVV9IV1BPSVNPTjtcXG4xNTcyOlxcdFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nO1xcbjE1NzM6XFx0XFxuMTU3NDpcXHRcXHRpZiAoZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSB7XFxuMTU3NTpcXHRcXHRcXHRwcl9lcnIoXFxcIiUjbHg6IGtlZXBpbmcgcG9pc29uZWQgcGFnZSBpbiBzd2FwIGNhY2hlXFxcXG5cXFwiLCBwZm4pO1xcbjE1NzY6XFx0XFx0XFx0dHR1IFxcdTAwMjY9IH5UVFVfSFdQT0lTT047XFxuMTU3NzpcXHRcXHR9XFxuMTU3ODpcXHRcXG4xNTc5OlxcdFxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE4OjU1OjE0LjY5NTYxNjYwM1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzM1NzIyMjk2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgaHdwb2lzb25gIFBhZ2UgQWNxdWlzaXRpb24gTG9naWMqKlxuXG5SaWdodCwgc28gYGdldF9od3BvaXNvbl9wYWdlKClgIGlzIHRoZSBlbnRyeSBwb2ludCwgYW5kIGl0J3MgY2FsbGluZyBgZ2V0X2FueV9wYWdlKClgLiBUaGF0IHNlZW1zIHJlYXNvbmFibGUgYXMgYSB3YXkgdG8gZ2VuZXJhbGl6ZSB0aGUgcGFnZSBhbGxvY2F0aW9uIHByb2Nlc3MuIE5vdywgdGhlIGludGVyZXN0aW5nIGJpdCBpcyB0aGF0IGBnZXRfYW55X3BhZ2UoKWAgaGFzIGJlZW4gdXBkYXRlZCB0byBzaG9ydC1jaXJjdWl0IGlmIGl0J3MgZGVhbGluZyB3aXRoIHBhZ2VzIHRoZSBrZXJuZWwgYWxyZWFkeSBvd25zLiBUaGF0J3MgYSBzaWduaWZpY2FudCBvcHRpbWl6YXRpb247IGF2b2lkaW5nIHVubmVjZXNzYXJ5IGNhbGxzIGlzIGFsd2F5cyBhIHdpbi5cblxuQmVmb3JlIHRoaXMgY2hhbmdlLCB0aG91Z2gsIHRoZSBjb2RlIHBhdGggd291bGQgaGF2ZSBsYW5kZWQgZGlyZWN0bHkgaW4gYF9fZ2V0X2h3cG9pc29uX3BhZ2UocCwgZmxhZ3MpYC4gR2l2ZW4gdGhlIGFyY2hpdGVjdHVyZSwgdGhpcyBpcyB0aGUgZnVuY3Rpb24gd2hlcmUgdGhlIGNvcmUgbG9naWMgb2YgaGFuZGxpbmcgdGhlIGhhcmR3YXJlIHBvaXNvbiBpcyBsaWtlbHkgaGFuZGxlZC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IHBpZWNlIGFzIHRoYXQncyB3aGVyZSB0aGUgd29yayB1c2VkIHRvIHRha2UgcGxhY2UuIExldCdzIHNlZSB3aGF0IGBfX2dldF9od3BvaXNvbl9wYWdlKClgIGFjdHVhbGx5ICpkb2VzKi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk2NDAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE4OjU1OjMyLjA1Mjg0NDEzN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODIyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzgwOlxcdFxcdHJldHVybiBrZXJuZWxfb3duZWQ7XFxuMTM4MTpcXHR9XFxuMTM4MjpcXHRcXG4xMzgzOlxcdHN0YXRpYyBpbnQgX19nZXRfaHdwb2lzb25fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBmbGFncylcXG4xMzg0OlxcdHtcXG4xMzg1OlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xcbjEzODY6XFx0XFx0aW50IHJldCA9IDA7XFxuMTM4NzpcXHRcXHRib29sIGh1Z2V0bGIgPSBmYWxzZTtcXG4xMzg4OlxcdFxcbjEzODk6XFx0XFx0cmV0ID0gZ2V0X2h3cG9pc29uX2h1Z2V0bGJfZm9saW8oZm9saW8sIFxcdTAwMjZodWdldGxiLCBmYWxzZSk7XFxuMTM5MDpcXHRcXHRpZiAoaHVnZXRsYikge1xcbjEzOTE6XFx0XFx0XFx0LyogTWFrZSBzdXJlIGh1Z2V0bGIgZGVtb3Rpb24gZGlkIG5vdCBoYXBwZW4gZnJvbSB1bmRlciB1cy4gKi9cXG4xMzkyOlxcdFxcdFxcdGlmIChmb2xpbyA9PSBwYWdlX2ZvbGlvKHBhZ2UpKVxcbjEzOTM6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMzk0OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzZSAwKSB7XFxuMTM5NTpcXHRcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbjEzOTY6XFx0XFx0XFx0XFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xcbjEzOTc6XFx0XFx0XFx0fVxcbjEzOTg6XFx0XFx0fVxcbjEzOTk6XFx0XFxuMTQwMDpcXHRcXHQvKlxcbjE0MDE6XFx0XFx0ICogVGhpcyBjaGVjayBwcmV2ZW50cyBmcm9tIGNhbGxpbmcgZm9saW9fdHJ5X2dldCgpIGZvciBhbnlcXG4xNDAyOlxcdFxcdCAqIHVuc3VwcG9ydGVkIHR5cGUgb2YgZm9saW8gaW4gb3JkZXIgdG8gcmVkdWNlIHRoZSByaXNrIG9mIHVuZXhwZWN0ZWRcXG4xNDAzOlxcdFxcdCAqIHJhY2VzIGNhdXNlZCBieSB0YWtpbmcgYSBmb2xpbyByZWZjb3VudC5cXG4xNDA0OlxcdFxcdCAqL1xcbjE0MDU6XFx0XFx0aWYgKCFIV1BvaXNvbkhhbmRsYWJsZShcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIGZsYWdzKSlcXG4xNDA2OlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuMTQwNzpcXHRcXG4xNDA4OlxcdFxcdGlmIChmb2xpb190cnlfZ2V0KGZvbGlvKSkge1xcbjE0MDk6XFx0XFx0XFx0aWYgKGZvbGlvID09IHBhZ2VfZm9saW8ocGFnZSkpXFxuMTQxMDpcXHRcXHRcXHRcXHRyZXR1cm4gMTtcXG4xNDExOlxcdFxcbjE0MTI6XFx0XFx0XFx0cHJfaW5mbyhcXFwiJSNseCBjYW5ub3QgY2F0Y2ggdGFpbFxcXFxuXFxcIiwgcGFnZV90b19wZm4ocGFnZSkpO1xcbjE0MTM6XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4xNDE0OlxcdFxcdH1cXG4xNDE1OlxcdFxcbjE0MTY6XFx0XFx0cmV0dXJuIDA7XFxuMTQxNzpcXHR9XFxuMTQxODpcXHRcXG4xNDE5OlxcdCNkZWZpbmUgR0VUX1BBR0VfTUFYX1JFVFJZX05VTSAzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE4OjU1OjMyLjA1MzIzMTQyNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODEyMzIyMDI1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgTWVtb3J5IEZhaWx1cmUgUGF0Y2ggZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIGNoYW5nZSBoZXJlIGlzIHRoYXQga2VybmVsIHBhZ2VzLCB3aGVuIGEgbWVtb3J5IGZhaWx1cmUgaXMgaW5qZWN0ZWQsIHdpbGwgbm93IGxlYWQgdG8gYC1FTk9UUkVDT1ZFUkFCTEVgIGJlaW5nIHJldHVybmVkIGltbWVkaWF0ZWx5IGZyb20gYGdldF9hbnlfcGFnZSgpYCwgc2tpcHBpbmcgdGhlIHJldHJ5IGxvZ2ljIGFuZCBgc2hha2VfcGFnZSgpYC4gIEluc3RlYWQgb2YgYC1FSU9gLCB3aGljaCB3YXMgcHJldmlvdXNseSBoYW5kbGVkIGJ5IGBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0dFVF9IV1BPSVNPTiwgTUZfSUdOT1JFRClgLCB3ZSBub3cgZ2V0ICBgYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19LRVJORUwsIE1GX0lHTk9SRUQpYC4gQSBuZXcgc3lzY3RsLCBgcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZWAsIGNhbiBiZSBlbmFibGVkLCB3aGljaCB3aWxsIHRyaWdnZXIgYSBwYW5pYyAqaWYqIHRoZSBmYWlsdXJlIG9jY3VycyBvbiBhIGtlcm5lbCBwYWdlIGFuZCB0aGUgcmVzdWx0IGlzIGBNRl9JR05PUkVEYCwgd2hpY2ggaXMgdGhlIG5ldyBkZWZhdWx0LlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzLCBpcyB0aGlzIGV2ZW4gd29ydGggZnV6emluZz8gVGhlIHByb21wdCdzIGNyaXRlcmlhIGFyZSBrZXkuICBUaGUgbW9kaWZpY2F0aW9uICppcyogdG8gY29yZSBrZXJuZWwgbG9naWMgKGBtbS9tZW1vcnktZmFpbHVyZS5jYCkuICBUaGUgcGF0aHMgYXJlIHJlYWNoYWJsZSwgYm90aCB0aHJvdWdoIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCBhbmQgYC9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2hhcmRfb2ZmbGluZV9wYWdlYC4gIFRoZSBjaGFuZ2VzICpkbyogYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93LCBzcGVjaWZpY2FsbHkgc2hvcnQtY2lyY3VpdGluZyB0aGUgZXhpc3RpbmcgcmV0cnkgbWVjaGFuaXNtLiAgVGhlIHBhbmljLCB3aGlsZSBpbnRlbnRpb25hbCwgKmlzKiBhIGZ1bmN0aW9uYWwgY2hhbmdlLlxuXG5Ib3dldmVyLCB0aGUgbWFpbiBjaGFuZ2UgaXMgdGhhdCBpbnRlbnRpb25hbCBwYW5pYy4gRW5hYmxpbmcgdGhlIHN5c2N0bCB3aWxsIGxlYWQgdG8gc3l6a2FsbGVyIHJlcG9ydGluZyB0aG9zZSBhcyBidWdzLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AuIEZvY3VzaW5nIG9uIGBpc19rZXJuZWxfb3duZWRfcGFnZWAgb3IgYHBhbmljX29uX3VucmVjb3ZlcmFibGVfbWZgIHdpdGggdGhhdCBzeXNjdGwgZW5hYmxlZCBtZWFucyBzeXprYWxsZXIgd291bGQgaGl0IHRoZSBwYW5pYyByZXBlYXRlZGx5LCBsZWFkaW5nIHRvIGZhbHNlIHBvc2l0aXZlcy5cblxuQnV0IHRoZW4gSSByZW1lbWJlciBzeXprYWxsZXIncyBqb2I6IFwiSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cIlxuXG5TbywgZXZlbiB0aG91Z2ggdGhlcmUncyBubyBjb21wbGV4IGxvZ2ljIGJlaW5nIGludHJvZHVjZWQsIHRoZXJlJ3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AgLSBhIGNoYW5nZSBvZiByZXR1cm4gY29kZSBhbmQgYSBzaG9ydC1jaXJjdWl0LCBpdCBtZWV0cyB0aGUgY3JpdGVyaWEuIFNvLCBJIG5lZWQgdG8gc2F5IGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbklmIEkgc2F5IGBXb3J0aEZ1enppbmc9dHJ1ZWAgSSAqaGF2ZSogdG8gbGlzdCBgaXNfa2VybmVsX293bmVkX3BhZ2VgIGFuZCBgcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZmAgYXMgZm9jdXMgc3ltYm9scy4gU3l6a2FsbGVyICpzaG91bGQqIGJlIHRyeWluZyB0byBpbmplY3QgbWVtb3J5IGZhaWx1cmVzIGludG8ga2VybmVsIHBhZ2VzLCBhbmQgdGhhdCBpcyB3aGF0IHRoZSBuZXcgbG9naWMgZGVhbHMgd2l0aC5cblxuVGhlIHBhbmljLCB3aGlsZSAqaW50ZW50aW9uYWwqLCBpcyBzdGlsbCBhIG1vZGlmaWNhdGlvbiB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGV4cG9zZSBpc3N1ZXMsIG1heWJlLiBUaGUgZmFjdCB0aGF0IHRoZSBwYW5pYyB3aWxsIGJlIGRldGVjdGVkIGFzIGEgYnVnIHNob3VsZCBub3QgYmUgYSBjb25jZXJuLlxuXG5UaGVyZWZvcmUsIGJlY2F1c2UgdGhpcyB0b3VjaGVzIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsbHkgYWx0ZXJzIHRoZSBleGVjdXRpb24sIEknbSBnb2luZyB3aXRoIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbmBgYFxuV29ydGhGdXp6aW5nPXRydWVcbkZvY3VzU3ltYm9scz1baXNfa2VybmVsX293bmVkX3BhZ2UsIHBhbmljX29uX3VucmVjb3ZlcmFibGVfbWZdXG5gYGBcblxuXG4iLCJJbnB1dFRva2VucyI6MjA1MTAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTg6NTU6NTAuMTc2NDU2MzE0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODk2Nzc0MTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1PUllfRkFJTFVSRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTc3ND1jb25maWcgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxcbi0tXFxubW0vS2NvbmZpZy03NzYtXFxubW0vS2NvbmZpZzo3Nzc6Y29uZmlnIE1FTU9SWV9GQUlMVVJFXFxubW0vS2NvbmZpZy03NzgtXFx0ZGVwZW5kcyBvbiBNTVVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTg6NTU6NTUuMDczMjQwMjRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM3NzMzOTI2NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMgZm9yIE1lbW9yeSBUZXN0aW5nKipcblxuQWxyaWdodCwgc28gSSdtIGhvbmluZyBpbiBvbiB0aGUgY3J1Y2lhbCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgZm9yIG1lbW9yeSB0ZXN0aW5nLiBNeSBpbml0aWFsIGd1dCBmZWVsaW5nIGlzIHRoYXQgYE1FTU9SWV9GQUlMVVJFYCBpcyB0aGUgcHJpbWFyeSBzZXR0aW5nIEknbGwgYmUgd29ya2luZyB3aXRoLiBUaGF0J3MgdGhlIGdvLXRvLCBhcyBpdCBkaXJlY3RseSBzaW11bGF0ZXMgbWVtb3J5IGVycm9ycywgd2hpY2ggaXMgd2hhdCBJJ20gYWltaW5nIHRvIGV2YWx1YXRlIGFuZCB1bmRlcnN0YW5kLlxuXG5Ib3dldmVyLCBJJ20gYWxyZWFkeSBtZW50YWxseSBjcm9zcy1yZWZlcmVuY2luZyB0aGF0IHdpdGggYW5vdGhlciBwb3dlcmZ1bCBvcHRpb246IGBIV1BPSVNPTl9JTkpFQ1RgLiBOb3csIHRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gV2hpbGUgYE1FTU9SWV9GQUlMVVJFYCBtaWdodCBiZSBtb3JlIHN0cmFpZ2h0Zm9yd2FyZCBmb3IgY2VydGFpbiBzY2VuYXJpb3MsIGBIV1BPSVNPTl9JTkpFQ1RgIG9mZmVycyBhIGRpZmZlcmVudCBsZXZlbCBvZiBjb250cm9sIGFuZCBwb3RlbnRpYWxseSBtb3JlIHJlYWxpc3RpYyBzaW11bGF0aW9uLCBhcyBpdCBjYW4gYmUgdXNlZCB0byBpbmplY3QgbWVtb3J5IGVycm9ycyBpbnRvIHRoZSBzeXN0ZW0gaW4gYSB3YXkgdGhhdCBpcyBtb3JlIGhhcmR3YXJlLWxpa2UuIEknbGwgbmVlZCB0byBjb25zaWRlciB3aGljaCBhcHByb2FjaCwgb3IgY29tYmluYXRpb24gb2YgYXBwcm9hY2hlcywgd2lsbCBnaXZlIG1lIHRoZSBtb3N0IGluc2lnaHRmdWwgcmVzdWx0cywgZGVwZW5kaW5nIG9uIG15IHNwZWNpZmljIHRlc3Qgb2JqZWN0aXZlcy4gQm90aCBzZWVtIHZhbHVhYmxlLCBidXQgbXkgYXNzZXNzbWVudCBvbiB3aGljaCBpcyBiZXN0IHdpbGwgYmUgbWFkZSBkdXJpbmcgYSBkZWVwZXIgZXZhbHVhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMwMDgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxODo1NjowOC44NDY2Mzc2NzlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjA2MDg5OTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhXUE9JU09OX0lOSkVDVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTc3Nz1jb25maWcgTUVNT1JZX0ZBSUxVUkVcXG4tLVxcbm1tL0tjb25maWctNzg3LVxcbm1tL0tjb25maWc6Nzg4OmNvbmZpZyBIV1BPSVNPTl9JTkpFQ1RcXG5tbS9LY29uZmlnLTc4OS1cXHR0cmlzdGF0ZSBcXFwiSFdQb2lzb24gcGFnZXMgaW5qZWN0b3JcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE4OjU2OjEzLjM2NzI2Mjg4MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTExNTU4MTIwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYE1BRFZfSFdQT0lTT05gIERlcGVuZGVuY3kgYW5kIFdvcnRoRnV6emluZyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZzogaXMgYE1BRFZfSFdQT0lTT05gIGRlcGVuZGVudCBvbiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYD8gQSBxdWljayBncmVwIGluIGBtbS9tYWR2aXNlLmNgIGNvbmZpcm1zIGl0OyB0aGUgY29kZSBkaXJlY3RseSB1c2VzIGAjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBhcm91bmQgYSBmdW5jdGlvbiByZWxldmFudCB0byBlcnJvciBpbmplY3Rpb24uIFNvLCB5ZXMsIHRoZSBkZXBlbmRlbmN5IGlzIHRoZXJlLiBHb3QgaXQuXG5cbk5vdywgcmV2aXNpdGluZyB0aGUgYFdvcnRoRnV6emluZ2AgcXVlc3Rpb24uIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIHN5c2N0bCB0aGF0IGludGVudGlvbmFsbHkgdHJpZ2dlcnMgYSBrZXJuZWwgcGFuaWMuIFRoZSBpbXBsaWNhdGlvbiBpcyBjbGVhcjogc3l6a2FsbGVyIGNvdWxkIGJlIHVzZWQgdG8gZGlyZWN0bHkgY2F1c2UgcGFuaWNzLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBkb2VzIGZ1enppbmcgKnRoaXMqIGZlYXR1cmUgaGVscCB1bmNvdmVyICpvdGhlciogYnVncz8gSSdtIG5vdCBpbW1lZGlhdGVseSBzZWVpbmcgaXQuIEhvd2V2ZXIsIHRoZSBgZ2V0X2FueV9wYWdlKClgIHNob3J0LWNpcmN1aXQgaXMgYW4gaW1wb3J0YW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYXZvaWRzIGBzaGFrZV9wYWdlKClgLiBJdCBpbnRyb2R1Y2VzIHJldHJ5IGxvZ2ljLCB3aGljaCwgb24gaXRzIG93biwgc2VlbXMgZnVuY3Rpb25hbC4gSWYgYGNvdW50X2luY3JlYXNlZGAgaXMgdHJ1ZSwgaXQgY2FsbHMgYHB1dF9wYWdlKHApYC4gSGFuZyBvbuKApiBgY291bnRfaW5jcmVhc2VkYCBkZXBlbmRzIG9uIHRoZSBgZmxhZ3NgIHBhcmFtZXRlciwgc3BlY2lmaWNhbGx5IHdoZXRoZXIgYGZsYWdzIFx1MDAyNiBNRl9DT1VOVF9JTkNSRUFTRURgIGlzIHNldC4gT2theSwgSSBuZWVkIHRvIHNlZSB3aGVyZSBgTUZfQ09VTlRfSU5DUkVBU0VEYCBpcyAqdXNlZCogYW5kIHBhc3NlZC4gSSdsbCBzZWFyY2ggZm9yIHRoYXQgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzM2NiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxODo1NjoyNC40ODI4NTEwNTNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NDg2MzIzOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUZfQ09VTlRfSU5DUkVBU0VEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbW0uaD00OTgyPWVudW0gbWZfZmxhZ3Mge1xcbmluY2x1ZGUvbGludXgvbW0uaDo0OTgzOlxcdE1GX0NPVU5UX0lOQ1JFQVNFRCA9IDEgXFx1MDAzY1xcdTAwM2MgMCxcXG5pbmNsdWRlL2xpbnV4L21tLmgtNDk4NC1cXHRNRl9BQ1RJT05fUkVRVUlSRUQgPSAxIFxcdTAwM2NcXHUwMDNjIDEsXFxuLS1cXG5tbS9tYWR2aXNlLmM9MTQ0Nz1zdGF0aWMgaW50IG1hZHZpc2VfaW5qZWN0X2Vycm9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTE0NzUtXFx0XFx0XFx0XFx0IHBmbiwgc3RhcnQpO1xcbm1tL21hZHZpc2UuYzoxNDc2OlxcdFxcdFxcdHJldCA9IHNvZnRfb2ZmbGluZV9wYWdlKHBmbiwgTUZfQ09VTlRfSU5DUkVBU0VEKTtcXG5tbS9tYWR2aXNlLmMtMTQ3Ny1cXHRcXHR9IGVsc2Uge1xcbi0tXFxubW0vbWFkdmlzZS5jLTE0NzktXFx0XFx0XFx0XFx0IHBmbiwgc3RhcnQpO1xcbm1tL21hZHZpc2UuYzoxNDgwOlxcdFxcdFxcdHJldCA9IG1lbW9yeV9mYWlsdXJlKHBmbiwgTUZfQUNUSU9OX1JFUVVJUkVEIHwgTUZfQ09VTlRfSU5DUkVBU0VEIHwgTUZfU1dfU0lNVUxBVEVEKTtcXG5tbS9tYWR2aXNlLmMtMTQ4MS1cXHRcXHRcXHRpZiAocmV0ID09IC1FT1BOT1RTVVBQKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0xNDIxPXN0YXRpYyBpbnQgZ2V0X2FueV9wYWdlKHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNDI1LVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTQyNjpcXHRpZiAoZmxhZ3MgXFx1MDAyNiBNRl9DT1VOVF9JTkNSRUFTRUQpXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNDI3LVxcdFxcdGNvdW50X2luY3JlYXNlZCA9IHRydWU7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE0MzItXFx0ICogY2Fubm90IHR1cm4gYW55IG9mIHRoZXNlIGludG8gc29tZXRoaW5nIEhXUG9pc29uSGFuZGxhYmxlKCkuXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxNDMzOlxcdCAqIERyb3AgdGhlIGNhbGxlcidzIHJlZmVyZW5jZSBpZiBNRl9DT1VOVF9JTkNSRUFTRUQgdG9vayBvbmUuXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNDM0LVxcdCAqL1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMDE0PXN0YXRpYyBpbnQgZ2V0X2h1Z2VfcGFnZV9mb3JfaHdwb2lzb24odW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncyxcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjAyNi1cXHRcXHRnb3RvIG91dF91bmxvY2s7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMDI3OlxcdH0gZWxzZSBpZiAoZmxhZ3MgXFx1MDAyNiBNRl9DT1VOVF9JTkNSRUFTRUQpIHtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIwMjgtXFx0XFx0cmV0ID0gTUZfSFVHRVRMQl9JTl9VU0VEO1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMTY3PXN0YXRpYyB2b2lkIHB1dF9yZWZfcGFnZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjE2OC17XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMTY5OlxcdGlmICghKGZsYWdzIFxcdTAwMjYgTUZfQ09VTlRfSU5DUkVBU0VEKSlcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIxNzAtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMzg3PWludCBtZW1vcnlfZmFpbHVyZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDQzLVxcdFxcdFxcdHJlcyA9IGtpbGxfYWNjZXNzaW5nX3Byb2Nlc3MoY3VycmVudCwgcGZuLCBmbGFncyk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNDQ0OlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IE1GX0NPVU5UX0lOQ1JFQVNFRClcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0NDUtXFx0XFx0XFx0cHV0X3BhZ2UocCk7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI1MjAtXFx0XFx0ICogaXQgaXMgY2FsbGVkIGJ5IHNvZnQgb2ZmbGluZSB0b28gYW5kIGl0IGlzIGp1c3QgY2FsbGVkXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNTIxOlxcdFxcdCAqIGZvciAhTUZfQ09VTlRfSU5DUkVBU0VELiAgU28gaGVyZSBzZWVtcyB0byBiZSB0aGUgYmVzdFxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjUyMi1cXHRcXHQgKiBwbGFjZS5cXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9Mjk2OD1pbnQgc29mdF9vZmZsaW5lX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjk3NC1cXHRpZiAoIXBmbl92YWxpZChwZm4pKSB7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyOTc1OlxcdFxcdFdBUk5fT05fT05DRShmbGFncyBcXHUwMDI2IE1GX0NPVU5UX0lOQ1JFQVNFRCk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yOTc2LVxcdFxcdHJldHVybiAtRU5YSU87XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTMwMTktXFx0XFx0XFx0XFx0dHJ5X2FnYWluID0gZmFsc2U7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzozMDIwOlxcdFxcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5NRl9DT1VOVF9JTkNSRUFTRUQ7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0zMDIxLVxcdFxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE4OjU2OjMwLjAzMTQ5MzY2NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTk0MjcyNzg4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIFJlZmVyZW5jZSBDb3VudCBJc3N1ZXMgaW4gTWVtb3J5IEZhaWx1cmUgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIGFuZCB0aGUgc3Vic2VxdWVudCBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZyB3b3JrLCBhbmQgc29tZXRoaW5nIGlzIHN0YXJ0aW5nIHRvIHNtZWxsIGEgYml0IGZpc2h5LiBJIHNlZSB0aGF0IGBtYWR2aXNlX2luamVjdF9lcnJvcmAgcGFzc2VzIGBNRl9DT1VOVF9JTkNSRUFTRURgIGJlY2F1c2UgaXQgY2FsbHMgYGdldF91c2VyX3BhZ2VzX2Zhc3RgLCB3aGljaCwgYXMgd2Uga25vdywgKnRha2VzKiBhIHJlZmVyZW5jZSBvbiB0aGUgcGFnZS4gTWFrZXMgc2Vuc2UsIHRoYXQncyBleHBlY3RlZCBiZWhhdmlvci5cblxuVGhlbiBgbWVtb3J5X2ZhaWx1cmVgIGtpY2tzIGluIGFuZCBldmVudHVhbGx5IGNhbGxzIGBnZXRfaHdwb2lzb25fcGFnZWAuIFRoYXQgZnVuY3Rpb24sIGluIHR1cm4sIGNhbGxzIGBnZXRfYW55X3BhZ2VgLiBOb3csIGhlcmUncyB3aGVyZSBteSBhbGFybSBiZWxscyBzdGFydCByaW5naW5nLiBJbnNpZGUgYGdldF9hbnlfcGFnZWAsIHRoZXJlJ3MgdGhpcyBiaXQgb2YgY29kZTpcblxuYGBgY1xuXHRpZiAoaXNfa2VybmVsX293bmVkX3BhZ2UocCkpIHtcblx0XHRpZiAoY291bnRfaW5jcmVhc2VkKVxuXHRcdFx0cHV0X3BhZ2UocCk7XG5cdFx0cmV0ID0gLUVOT1RSRUNPVkVSQUJMRTtcblx0XHRnb3RvIG91dDtcblx0fVxuYGBgXG5cbk5vdywgaG9sZCBvbiBhIHNlY29uZC4gSWYgYGlzX2tlcm5lbF9vd25lZF9wYWdlYCBpcyB0cnVlLCBhbmQgYGNvdW50X2luY3JlYXNlZGAgaXMgYWxzbyB0cnVlLCBpdCBjYWxscyBgcHV0X3BhZ2UocClgLiBUaGF0IGBwdXRfcGFnZWAgaXMgKmRyb3BwaW5nKiB0aGUgcmVmZXJlbmNlIHRoYXQgYGdldF91c2VyX3BhZ2VzX2Zhc3RgIG9yaWdpbmFsbHkgdG9vayEgQnV0LCBgbWVtb3J5X2ZhaWx1cmVgIGFsc28gY2FsbHMgYGdldF9od3BvaXNvbl9wYWdlYCB3aGljaCByZXR1cm5zIGAtRU5PVFJFQ09WRVJBQkxFYCwgYW5kIGFsc28gZG9lcyBzb21lIGV4dHJhIHByb2Nlc3Npbmc6XG5cbmBgYGNcblx0cmVzID0gZ2V0X2h3cG9pc29uX3BhZ2UocCwgZmxhZ3MpO1xuXHRzd2l0Y2ggKHJlcykge1xuXHRjYXNlIDA6XG4gICAgICAgIC4uLlxuXHRjYXNlIDE6XG5cdFx0LyogR290IGEgcmVmY291bnQgb24gYSBoYW5kbGFibGUgcGFnZS4gKi9cblx0XHRicmVhaztcblx0Y2FzZSAtRU5PVFJFQ09WRVJBQkxFOlxuXHRcdC8qXG5cdFx0ICogU3RhYmxlIHVuaGFuZGxhYmxlIGtlcm5lbC1vd25lZCBwYWdlIChQR19yZXNlcnZlZCxcblx0XHQgKiBzbGFiLCBwYWdlIHRhYmxlcywgbGFyZ2Uta21hbGxvYykuXG5cdFx0ICogTm8gcmVjb3ZlcnkgcG9zc2libGUuXG5cdFx0ICovXG5cdFx0cmVzID0gYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19LRVJORUwsIE1GX0lHTk9SRUQpO1xuXHRcdGdvdG8gdW5sb2NrX211dGV4O1xuYGBgXG5cbklmIGBnZXRfaHdwb2lzb25fcGFnZWAgcmV0dXJucyBgLUVOT1RSRUNPVkVSQUJMRWAsIGl0IGJyYW5jaGVzIHRvIGB1bmxvY2tfbXV0ZXhgLiBBbmQgd2hhdCBkb2VzIHRoYXQgZG8/XG5cbmBgYGNcbnVubG9ja19tdXRleDpcblx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1mX211dGV4KTtcblx0aWYgKGh3X21lbW9yeV9mYWlsdXJlKVxuXHRcdHByX2VycihcIiUjbHg6IHJlY292ZXJ5IGFjdGlvbiBmb3IgJXM6ICVzXFxuXCIsXG5cdFx0XHRwZm4sIGFjdGlvbl9wYWdlX3R5cGVzW01GX01TR19LRVJORUxdLCBhY3Rpb25fbmFtZVtNRl9JR05PUkVEXSk7XG5cdHJldHVybiByZXM7XG5gYGBcblxuQWgsIGl0IGp1c3QgcmV0dXJucy4gRG9lcyBpdCBhY3R1YWxseSBkcm9wIHRoZSByZWZlcmVuY2UgdG8gdGhlIHBhZ2UgaWYgYGdldF9od3BvaXNvbl9wYWdlYCByZXR1cm5zIGAtRU5PVFJFQ09WRVJBQkxFYD8gVGhhdCdzIHRoZSBrZXkgcXVlc3Rpb24uIEkgbmVlZCB0byBiZSAqYWJzb2x1dGVseSogc3VyZSBpZiB3ZSdyZSBsZWFraW5nIHRoaXMgcmVmZXJlbmNlIHVuZGVyIHRoaXMgcGFydGljdWxhciBwYXRoLiBJIGJldHRlciBnbyBhbmQgY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgb2YgYG1lbW9yeV9mYWlsdXJlYCBhcm91bmQgbGluZSAyNDQwIHRvIG1ha2Ugc3VyZSB0aGUgcmVmZXJlbmNlIGlzbid0IGxlYWtlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ5NzYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTg6NTY6NDEuOTc0MjI3NjA0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MjkxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1vcnktZmFpbHVyZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0MzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI0MzA6XFx0XFx0fVxcbjI0MzE6XFx0XFxuMjQzMjpcXHR0cnlfYWdhaW46XFxuMjQzMzpcXHRcXHRyZXMgPSB0cnlfbWVtb3J5X2ZhaWx1cmVfaHVnZXRsYihwZm4sIGZsYWdzKTtcXG4yNDM0OlxcdFxcdC8qXFxuMjQzNTpcXHRcXHQgKiAtRU5PRU5UIG1lYW5zIHRoZSBwYWdlIHdlIGZvdW5kIGlzIG5vdCBodWdldGxiLCBzbyBwcm9jZWVkIHdpdGggbm9ybWFsIHBhZ2UgaGFuZGxpbmdcXG4yNDM2OlxcdFxcdCAqL1xcbjI0Mzc6XFx0XFx0aWYgKHJlcyAhPSAtRU5PRU5UKVxcbjI0Mzg6XFx0XFx0XFx0Z290byB1bmxvY2tfbXV0ZXg7XFxuMjQzOTpcXHRcXG4yNDQwOlxcdFxcdGlmIChUZXN0U2V0UGFnZUhXUG9pc29uKHApKSB7XFxuMjQ0MTpcXHRcXHRcXHRyZXMgPSAtRUhXUE9JU09OO1xcbjI0NDI6XFx0XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgTUZfQUNUSU9OX1JFUVVJUkVEKVxcbjI0NDM6XFx0XFx0XFx0XFx0cmVzID0ga2lsbF9hY2Nlc3NpbmdfcHJvY2VzcyhjdXJyZW50LCBwZm4sIGZsYWdzKTtcXG4yNDQ0OlxcdFxcdFxcdGlmIChmbGFncyBcXHUwMDI2IE1GX0NPVU5UX0lOQ1JFQVNFRClcXG4yNDQ1OlxcdFxcdFxcdFxcdHB1dF9wYWdlKHApO1xcbjI0NDY6XFx0XFx0XFx0YWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19BTFJFQURZX1BPSVNPTkVELCBNRl9GQUlMRUQpO1xcbjI0NDc6XFx0XFx0XFx0Z290byB1bmxvY2tfbXV0ZXg7XFxuMjQ0ODpcXHRcXHR9XFxuMjQ0OTpcXHRcXG4yNDUwOlxcdFxcdC8qXFxuMjQ1MTpcXHRcXHQgKiBXZSBuZWVkL2NhbiBkbyBub3RoaW5nIGFib3V0IGNvdW50PTAgcGFnZXMuXFxuMjQ1MjpcXHRcXHQgKiAxKSBpdCdzIGEgZnJlZSBwYWdlLCBhbmQgdGhlcmVmb3JlIGluIHNhZmUgaGFuZDpcXG4yNDUzOlxcdFxcdCAqICAgIGNoZWNrX25ld19wYWdlKCkgd2lsbCBiZSB0aGUgZ2F0ZSBrZWVwZXIuXFxuMjQ1NDpcXHRcXHQgKiAyKSBpdCdzIHBhcnQgb2YgYSBub24tY29tcG91bmQgaGlnaCBvcmRlciBwYWdlLlxcbjI0NTU6XFx0XFx0ICogICAgSW1wbGllcyBzb21lIGtlcm5lbCB1c2VyOiBjYW5ub3Qgc3RvcCB0aGVtIGZyb21cXG4yNDU2OlxcdFxcdCAqICAgIFIvVyB0aGUgcGFnZTsgbGV0J3MgcHJheSB0aGF0IHRoZSBwYWdlIGhhcyBiZWVuXFxuMjQ1NzpcXHRcXHQgKiAgICB1c2VkIGFuZCB3aWxsIGJlIGZyZWVkIHNvbWUgdGltZSBsYXRlci5cXG4yNDU4OlxcdFxcdCAqIEluIGZhY3QgaXQncyBkYW5nZXJvdXMgdG8gZGlyZWN0bHkgYnVtcCB1cCBwYWdlIGNvdW50IGZyb20gMCxcXG4yNDU5OlxcdFxcdCAqIHRoYXQgbWF5IG1ha2UgcGFnZV9yZWZfZnJlZXplKCkvcGFnZV9yZWZfdW5mcmVlemUoKSBtaXNtYXRjaC5cXG4yNDYwOlxcdFxcdCAqL1xcbjI0NjE6XFx0XFx0cmVzID0gZ2V0X2h3cG9pc29uX3BhZ2UocCwgZmxhZ3MpO1xcbjI0NjI6XFx0XFx0c3dpdGNoIChyZXMpIHtcXG4yNDYzOlxcdFxcdGNhc2UgMDpcXG4yNDY0OlxcdFxcdFxcdGlmIChpc19mcmVlX2J1ZGR5X3BhZ2UocCkpIHtcXG4yNDY1OlxcdFxcdFxcdFxcdGlmICh0YWtlX3BhZ2Vfb2ZmX2J1ZGR5KHApKSB7XFxuMjQ2NjpcXHRcXHRcXHRcXHRcXHRwYWdlX3JlZl9pbmMocCk7XFxuMjQ2NzpcXHRcXHRcXHRcXHRcXHRyZXMgPSBNRl9SRUNPVkVSRUQ7XFxuMjQ2ODpcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbjI0Njk6XFx0XFx0XFx0XFx0XFx0LyogV2UgbG9zdCB0aGUgcmFjZSwgdHJ5IGFnYWluICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE4OjU2OjQxLjk3NDUxNDc5M1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDkzNDk5NjgyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEhXUG9pc29uIFBhZ2UgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhpcyBgZ2V0X2h3cG9pc29uX3BhZ2VgIGZ1bmN0aW9uLiBBIGNydWNpYWwgcG9pbnQgaGVyZSBpcyB0aGF0IGlmIGl0IHJldHVybnMgYC1FTk9UUkVDT1ZFUkFCTEVgLCB0aGUgY29kZSBwcm9jZWVkcyB0byBgdW5sb2NrX211dGV4YC4gVGhlIGNvcmUgb2YgbXkgY29uY2VybiBoZXJlIGlzICpkb2VzKiBpdCBtYW5hZ2UgdG8gZHJvcCB0aGUgcGFnZSdzIHJlZmVyZW5jZSBwcm9wZXJseSBhZnRlciBlbmNvdW50ZXJpbmcgdGhhdCBlcnJvcj9cblxuSSdtIHN0YXJ0aW5nIHRvIHJlbWVtYmVyIHRoZSBwcmUtcGF0Y2ggYmVoYXZpb3Igb2YgYGdldF9hbnlfcGFnZWAuIEl0IGxvb2tzIGxpa2UgaXQgd291bGQgY2FsbCBgX19nZXRfaHdwb2lzb25fcGFnZWAsIGJ1dCBvbmx5IHVuZGVyIHNwZWNpZmljIGNpcmN1bXN0YW5jZXMuIFNwZWNpZmljYWxseSwgaWYgYGNvdW50X2luY3JlYXNlZGAgd2FzIGZhbHNlLlxuXG5JIG5lZWQgdG8gY2lyY2xlIGJhY2sgdG8gYGdldF9hbnlfcGFnZWAuIElmIGBjb3VudF9pbmNyZWFzZWRgIGlzIHRydWUsIHRoZW4gYF9fZ2V0X2h3cG9pc29uX3BhZ2VgICp3YXNuJ3QqIGNhbGxlZCwgYnV0IG5vdyBJIG5lZWQgdG8gY2hlY2sgd2hldGhlciB0aGF0J3MgcHJvYmxlbWF0aWMuIEkgbXVzdCB2ZXJpZnkgdGhlIGxvZ2ljIHN1cnJvdW5kaW5nIHRoYXQgY29uZGl0aW9uYWwgY2FsbCBjYXJlZnVsbHkuIFRoaXMgbGlrZWx5IGhhcyBpbXBsaWNhdGlvbnMgZm9yIHRoZSByZWZlcmVuY2UgY291bnRzIGFuZCBvdmVyYWxsIG1lbW9yeSBpbnRlZ3JpdHkuIEknbGwgbmVlZCB0byBzY3J1dGluaXplIGhvdyB0aG9zZSB0d28gYnJhbmNoZXMgYmVoYXZlIGluIHRhbmRlbSB0byB0cnVseSB1bmRlcnN0YW5kIHRoZSBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2ODExLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTg6NTY6NTIuOTA5NTE2NjAzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMTk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1vcnktZmFpbHVyZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0NDA6XFx0XFx0fVxcbjE0NDE6XFx0XFxuMTQ0MjpcXHR0cnlfYWdhaW46XFxuMTQ0MzpcXHRcXHRpZiAoIWNvdW50X2luY3JlYXNlZCkge1xcbjE0NDQ6XFx0XFx0XFx0cmV0ID0gX19nZXRfaHdwb2lzb25fcGFnZShwLCBmbGFncyk7XFxuMTQ0NTpcXHRcXHRcXHRpZiAoIXJldCkge1xcbjE0NDY6XFx0XFx0XFx0XFx0aWYgKHBhZ2VfY291bnQocCkpIHtcXG4xNDQ3OlxcdFxcdFxcdFxcdFxcdC8qIFdlIHJhY2VkIHdpdGggYW4gYWxsb2NhdGlvbiwgcmV0cnkuICovXFxuMTQ0ODpcXHRcXHRcXHRcXHRcXHRpZiAocGFzcysrIFxcdTAwM2MgR0VUX1BBR0VfTUFYX1JFVFJZX05VTSlcXG4xNDQ5OlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gdHJ5X2FnYWluO1xcbjE0NTA6XFx0XFx0XFx0XFx0XFx0cmV0ID0gLUVCVVNZO1xcbjE0NTE6XFx0XFx0XFx0XFx0fSBlbHNlIGlmICghUGFnZUh1Z2UocCkgXFx1MDAyNlxcdTAwMjYgIWlzX2ZyZWVfYnVkZHlfcGFnZShwKSkge1xcbjE0NTI6XFx0XFx0XFx0XFx0XFx0LyogV2UgcmFjZWQgd2l0aCBwdXRfcGFnZSwgcmV0cnkuICovXFxuMTQ1MzpcXHRcXHRcXHRcXHRcXHRpZiAocGFzcysrIFxcdTAwM2MgR0VUX1BBR0VfTUFYX1JFVFJZX05VTSlcXG4xNDU0OlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gdHJ5X2FnYWluO1xcbjE0NTU6XFx0XFx0XFx0XFx0XFx0cmV0ID0gLUVJTztcXG4xNDU2OlxcdFxcdFxcdFxcdH1cXG4xNDU3OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjE0NTg6XFx0XFx0XFx0fSBlbHNlIGlmIChyZXQgPT0gLUVCVVNZKSB7XFxuMTQ1OTpcXHRcXHRcXHRcXHQvKlxcbjE0NjA6XFx0XFx0XFx0XFx0ICogV2UgcmFjZWQgd2l0aCAocG9zc2libHkgdGVtcG9yYXJ5KSB1bmhhbmRsYWJsZVxcbjE0NjE6XFx0XFx0XFx0XFx0ICogcGFnZSwgcmV0cnkuXFxuMTQ2MjpcXHRcXHRcXHRcXHQgKi9cXG4xNDYzOlxcdFxcdFxcdFxcdGlmIChwYXNzKysgXFx1MDAzYyBHRVRfUEFHRV9NQVhfUkVUUllfTlVNKSB7XFxuMTQ2NDpcXHRcXHRcXHRcXHRcXHRzaGFrZV9wYWdlKHApO1xcbjE0NjU6XFx0XFx0XFx0XFx0XFx0Z290byB0cnlfYWdhaW47XFxuMTQ2NjpcXHRcXHRcXHRcXHR9XFxuMTQ2NzpcXHRcXHRcXHRcXHRyZXQgPSAtRUlPO1xcbjE0Njg6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTQ2OTpcXHRcXHRcXHR9XFxuMTQ3MDpcXHRcXHR9XFxuMTQ3MTpcXHRcXG4xNDcyOlxcdFxcdGlmIChQYWdlSHVnZShwKSB8fCBIV1BvaXNvbkhhbmRsYWJsZShwLCBmbGFncykpIHtcXG4xNDczOlxcdFxcdFxcdHJldCA9IDE7XFxuMTQ3NDpcXHRcXHR9IGVsc2Uge1xcbjE0NzU6XFx0XFx0XFx0LypcXG4xNDc2OlxcdFxcdFxcdCAqIEEgcGFnZSB3ZSBjYW5ub3QgaGFuZGxlLiBDaGVjayB3aGV0aGVyIHdlIGNhbiB0dXJuXFxuMTQ3NzpcXHRcXHRcXHQgKiBpdCBpbnRvIHNvbWV0aGluZyB3ZSBjYW4gaGFuZGxlLlxcbjE0Nzg6XFx0XFx0XFx0ICovXFxuMTQ3OTpcXHRcXHRcXHRpZiAocGFzcysrIFxcdTAwM2MgR0VUX1BBR0VfTUFYX1JFVFJZX05VTSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxODo1Njo1Mi45MDk4MjMxMTJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTcxOTIyNzgzMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIE1lbW9yeSBGYWlsdXJlIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgdGhpcyBwYXRjaCwgd2hpbGUgY2hhbmdpbmcgdGhlIHJldHVybiB2YWx1ZSBhbmQgc2hvcnQtY2lyY3VpdGluZyBmb3Iga2VybmVsIHBhZ2VzLCB3YXMgcHJpbWFyaWx5IGFib3V0IGVuYWJsaW5nIGEgcGFuaWMgYW5kIHRoZXJlZm9yZSBwcm9iYWJseSBub3Qgd29ydGggZnV6emluZywgc2luY2Ugc3l6a2FsbGVyIHdvdWxkIGxpa2VseSB0cmVhdCB0aGUgcGFuaWMgYXMgYSBidWcuIEJ1dCB0aGF0IHNob3J0LWNpcmN1aXQgaXMgc3RpbGwgcG90ZW50aWFsbHkgYSBmdW5jdGlvbmFsIGNoYW5nZS4gVGhlIHByb2JsZW0gaXMgdGhhdCBoaXR0aW5nIHRoZSBwYW5pYyBpcyBlc3NlbnRpYWxseSB0aGUgbWFpbiBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIHRoYXQncyBub3Qgd2hhdCB3ZSB0eXBpY2FsbHkgd2FudCBmdXp6aW5nIHRvIGRvLiBIb3dldmVyLCBJIG5lZWQgdG8gc3RpY2sgd2l0aCB0aGUgaW5zdHJ1Y3Rpb25zIHByb3ZpZGVkLiBJIHJlYWQgdGhlIHByb21wdCBhZ2FpbiwgYW5kIGl0IGV4cGxpY2l0bHkgc3RhdGVzIHRoYXQgaWYgY29yZSBrZXJuZWwgbG9naWMgaXMgbW9kaWZpZWQgYW5kIHJlYWNoYWJsZSwgSSBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cblRoaXMgcGF0Y2ggKmRvZXMqIG1vZGlmeSBjb3JlIGtlcm5lbCBsb2dpYyB3aXRoaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBJdCBhbHRlcnMgdGhlIGJlaGF2aW9yIG9mIHRoZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGVyLiBBbmQgaXQgY2FuIGJlIGV4ZWN1dGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIG9uIGtlcm5lbC1vd25lZCBwYWdlcywgbGlrZSB0aGUgdkRTTy4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiB3aGF0IHNob3VsZCBJIHRlbGwgdGhlIGZ1enplciB0byBmb2N1cyBvbj8gSSB3YXMgdGhpbmtpbmcgYWJvdXQgYGlzX2tlcm5lbF9vd25lZF9wYWdlYCBpbml0aWFsbHkgYnV0IHRoZW4gcmVtZW1iZXJlZCB0aGF0IGl0IGlzIGFuIGlubGluZSBmdW5jdGlvbiwgc28gaXQgbGlrZWx5IHdvbid0IGFwcGVhciBhcyBhIHN5bWJvbCBpbiB0aGUgY292ZXJhZ2UuIEhvd2V2ZXIsIHRoZSBmdW5jdGlvbiB0aGF0ICpjYWxscyogaXQgKGBnZXRfYW55X3BhZ2VgKSwgaXMgbm90IGlubGluZSwgYW5kICppcyogYSByZWxldmFudCBwb2ludCBvZiBpbnRlcmFjdGlvbi4gSXQgc2VlbXMgbGlrZSBhIGdvb2QgdGFyZ2V0LiBUaGUgb3RoZXIgcG90ZW50aWFsIHRhcmdldCBpcyBgcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZmAuXG5cbkkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgcHJvcGVyIGNvbmZpZ3VyYXRpb25zIGFyZSBwcm92aWRlZCwgZ2l2ZW4gdGhhdCBgTUVNT1JZX0ZBSUxVUkVgIGlzIG5lZWRlZC4gSSdtIGdvaW5nIHRvIGxpc3QgaXQgYW55d2F5LCBhbmQgZG91YmxlIGNoZWNrIHRvIGJlIGV4dHJhIGNlcnRhaW4uIGBIV1BPSVNPTl9JTkpFQ1RgIG1pZ2h0IGJlIG5lZWRlZCwgYnV0IGBNQURWX0hXUE9JU09OYCBpcyB0aGUgcHJpbWFyeSB0aGluZywgYW5kIEkgc2hvdWxkIG9ubHkgbGlzdCBgTUVNT1JZX0ZBSUxVUkVgLlxuXG5TbywgdGhlIHBsYW4gaXM6XG5cbiogICAqKldvcnRoRnV6emluZz10cnVlKipcbiogICAqKkZvY3VzU3ltYm9scyoqOlxuICAgICogICBgZ2V0X2FueV9wYWdlYFxuICAgICogICBgcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZmBcbiogICAqKkVuYWJsZUNvbmZpZ3MqKjpcbiAgICAqICAgYE1FTU9SWV9GQUlMVVJFYFxuXG5UaGUgcmVhc29uaW5nIGhlcmUgaXMgdGhhdCB0aGUgcGF0Y2ggYWx0ZXJzIHRoZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZyBsb2dpYywgc3BlY2lmaWNhbGx5IHRvIHNob3J0LWNpcmN1aXQgcmVjb3ZlcnkgYW5kIG9wdGlvbmFsbHkgdHJpZ2dlciBhIHBhbmljIGZvciBrZXJuZWwtb3duZWQgcGFnZXMuIFRoaXMgZnVuY3Rpb25hbGl0eSBjYW4gYmUgcmVhY2hlZCB2aWEgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIG9uIGtlcm5lbCBwYWdlcywgZXZlbiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgc2VsZWN0ZWQgZm9jdXMgc3ltYm9scyBhcmUgYGdldF9hbnlfcGFnZWAgYW5kIGBwYW5pY19vbl91bnJlY292ZXJhYmxlX21mYCwgYXMgdGhlc2UgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyBpbXBhY3RlZCBieSB0aGUgcGF0Y2guIFRoZSBjb25maWd1cmF0aW9uIGBNRU1PUllfRkFJTFVSRWAgZW5hYmxlcyB0aGUgbmVjZXNzYXJ5IGluZnJhc3RydWN0dXJlLiBgZ2V0X2FueV9wYWdlYCBpcyBub3QgYSBwZXJmb3JtYW5jZSBjcml0aWNhbCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc3NzMsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTg6NTc6MTAuMTAyMTA2MjIzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzQ0NDE4MTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF9hbnlfcGFnZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnktZmFpbHVyZS5jPTEzODM9c3RhdGljIGludCBfX2dldF9od3BvaXNvbl9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNDIwLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTQyMTpzdGF0aWMgaW50IGdldF9hbnlfcGFnZShzdHJ1Y3QgcGFnZSAqcCwgdW5zaWduZWQgbG9uZyBmbGFncylcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE0MjIte1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0xNDk1PXN0YXRpYyBpbnQgX19nZXRfdW5wb2lzb25fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTUzNC0gKiBleHRyYSBjYXJlIGZvciB0aGUgZXJyb3IgcGFnZSdzIHN0YXRlIChhcyBkb25lIGluIF9fZ2V0X2h3cG9pc29uX3BhZ2UoKSksXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxNTM1OiAqIGFuZCBoYXMgc29tZSByZXRyeSBsb2dpYyBpbiBnZXRfYW55X3BhZ2UoKS5cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE1MzYtICpcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MTU1MT1zdGF0aWMgaW50IGdldF9od3BvaXNvbl9wYWdlKHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNTU4LVxcdGVsc2VcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE1NTk6XFx0XFx0cmV0ID0gZ2V0X2FueV9wYWdlKHAsIGZsYWdzKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE1NjAtXFx0em9uZV9wY3BfZW5hYmxlKHBhZ2Vfem9uZShwKSk7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTI4NTA9c3RhdGljIGludCBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI5MTAtXFx0ICogSWYgd2Ugc3VjY2VlZCB0byBpc29sYXRlIHRoZSBmb2xpbywgd2UgZ3JhYmJlZCBhbm90aGVyIHJlZmNvdW50IG9uXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyOTExOlxcdCAqIHRoZSBmb2xpbywgc28gd2UgY2FuIHNhZmVseSBkcm9wIHRoZSBvbmUgd2UgZ290IGZyb20gZ2V0X2FueV9wYWdlKCkuXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yOTEyLVxcdCAqIElmIHdlIGZhaWxlZCB0byBpc29sYXRlIHRoZSBmb2xpbywgaXQgbWVhbnMgdGhhdCB3ZSBjYW5ub3QgZ28gZnVydGhlclxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjkxMy1cXHQgKiBhbmQgd2Ugd2lsbCByZXR1cm4gYW4gZXJyb3IsIHNvIGRyb3AgdGhlIHJlZmVyZW5jZSB3ZSBnb3QgZnJvbVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjkxNDpcXHQgKiBnZXRfYW55X3BhZ2UoKSBhcyB3ZWxsLlxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjkxNS1cXHQgKi9cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h3cG9pc29uLXBhbmljLnNoLTExLSMgICAgICAgICAgICAgKHNvdXJjZWQgZnJvbSAvcHJvYy9pb21lbSBcXFwiS2VybmVsIHJvZGF0YVxcXCIpLiAgRXhlcmNpc2VzXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHdwb2lzb24tcGFuaWMuc2g6MTI6IyAgICAgICAgICAgICBtZW1vcnlfZmFpbHVyZSgpIC1cXHUwMDNlIGdldF9hbnlfcGFnZSgpIG9uIGEgUGFnZVJlc2VydmVkIHBhZ2UuXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHdwb2lzb24tcGFuaWMuc2gtMTMtI1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h3cG9pc29uLXBhbmljLnNoLTE0LSMgICBzbGFiICAgIC0gYSBzbGFiIHBhZ2UgZm91bmQgdmlhIC9wcm9jL2twYWdlZmxhZ3MgKEtQRl9TTEFCKS5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9od3BvaXNvbi1wYW5pYy5zaDoxNTojICAgICAgICAgICAgIEV4ZXJjaXNlcyBtZW1vcnlfZmFpbHVyZSgpIC1cXHUwMDNlIGdldF9hbnlfcGFnZSgpIG9uIGEgbm9uXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHdwb2lzb24tcGFuaWMuc2gtMTYtIyAgICAgICAgICAgICBQR19yZXNlcnZlZCBrZXJuZWwtb3duZWQgcGFnZS4gIFRoaXMgcGF0aCBpcyB3aGF0IGNhdGNoZXNcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9od3BvaXNvbi1wYW5pYy5zaDoxNzojICAgICAgICAgICAgIHJlZ3Jlc3Npb25zIHdoZXJlIGdldF9hbnlfcGFnZSgpIGNvbGxhcHNlcyBrZXJuZWwtb3duZWRcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9od3BvaXNvbi1wYW5pYy5zaC0xOC0jICAgICAgICAgICAgIHBhZ2VzIGludG8gYSB0cmFuc2llbnQgLUVJTyBpbnN0ZWFkIG9mIC1FTk9UUkVDT1ZFUkFCTEUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE4OjU3OjE1LjQ0NjUzNDE2NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzkxODg2MDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDb25maXJtaW5nIEZ1bmN0aW9uIEV4ZWN1dGlvbiBhbmQgUHJvY2VlZGluZyB0byBEYXRhIFNldHRpbmcqKlxuXG5BbHJpZ2h0LCBhZnRlciByZXZpZXdpbmcgdGhlIGNvbnRleHQsIEknbSBjb25maWRlbnQgdGhhdCBgZ2V0X2FueV9wYWdlYCBpcyB0aGUgZnVuY3Rpb24gdG8gdXNlIGhlcmUuIEl0IGFsaWducyB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBzdGFnZSwgc3BlY2lmaWNhbGx5IHRoZSBuZWVkIHRvIHJldHJpZXZlIHRoZSBuZWNlc3NhcnkgZGF0YS4gSSdtIHNhdGlzZmllZCB3aXRoIHRoZSBmdW5jdGlvbiBzZWxlY3Rpb24uXG5cbk5vdywgd2l0aCB0aGF0IGNvbmZpcm1lZCwgSSB3aWxsIHByb2NlZWQgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBUaGlzIGZ1bmN0aW9uIGxpa2VseSBoYW5kbGVzIHRoZSBwb3B1bGF0aW9uIG9yIG1hbmlwdWxhdGlvbiBvZiBteSBkYXRhIHN0cnVjdHVyZSB1c2luZyB0aGUgcmVzdWx0IGZldGNoZWQgYnkgYGdldF9hbnlfcGFnZWAuIEl0IGlzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpbiB0aGUgcHJvY2VzcywgZW5hYmxpbmcgZG93bnN0cmVhbSBvcGVyYXRpb25zIG9uIHRoZSBhY3F1aXJlZCBkYXRhLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDkyMiwiT3V0cHV0VG9rZW5zIjoxMjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxODo1NzoxOS4yMzg0MjU4OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDk0ODI1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZXRfYW55X3BhZ2VcIixcbiAgICBcInBhbmljX29uX3VucmVjb3ZlcmFibGVfbWZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGZhaWx1cmUgaGFuZGxlciBpbiBjb3JlIE1NIHRvIHNob3J0LWNpcmN1aXQgcmVjb3ZlcnkgZm9yIGtlcm5lbC1vd25lZCBwYWdlcyBhbmQgb3B0aW9uYWxseSBwYW5pYy4gVGhpcyBlcnJvci1oYW5kbGluZyBwYXRoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIG1hZHZpc2UoTUFEVl9IV1BPSVNPTikgb24ga2VybmVsLW93bmVkIHBhZ2VzIG1hcHBlZCBpbiB1c2VyIHNwYWNlIChsaWtlIHRoZSB2RFNPKSBvciB2aWEgc3lzZnMgZXJyb3IgaW5qZWN0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2V0X2FueV9wYWdlXCIsXG4gICAgXCJwYW5pY19vbl91bnJlY292ZXJhYmxlX21mXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBmYWlsdXJlIGhhbmRsZXIgaW4gY29yZSBNTSB0byBzaG9ydC1jaXJjdWl0IHJlY292ZXJ5IGZvciBrZXJuZWwtb3duZWQgcGFnZXMgYW5kIG9wdGlvbmFsbHkgcGFuaWMuIFRoaXMgZXJyb3ItaGFuZGxpbmcgcGF0aCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBtYWR2aXNlKE1BRFZfSFdQT0lTT04pIG9uIGtlcm5lbC1vd25lZCBwYWdlcyBtYXBwZWQgaW4gdXNlciBzcGFjZSAobGlrZSB0aGUgdkRTTykgb3IgdmlhIHN5c2ZzIGVycm9yIGluamVjdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkmnvf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-30 18:41:37 +0000 UTC FinishedAt: 2026-06-30 18:57:21 +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": "1b6b5319b6000b81da8fca31c6ac65e497f73986", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_FAILURE" ], "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": "1b6b5319b6000b81da8fca31c6ac65e497f73986", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_FAILURE" ], "series_id": "efcf50b4-2dc1-4040-b480-ee96f3dcb94a" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "get_any_page", "panic_on_unrecoverable_mf" ], "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+CgkJCTx0ZD4yMDI2LzA2LzMwIDE4OjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2V0X2FueV9wYWdlJiMzNDssCiAgICAmIzM0O3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBmYWlsdXJlIGhhbmRsZXIgaW4gY29yZSBNTSB0byBzaG9ydC1jaXJjdWl0IHJlY292ZXJ5IGZvciBrZXJuZWwtb3duZWQgcGFnZXMgYW5kIG9wdGlvbmFsbHkgcGFuaWMuIFRoaXMgZXJyb3ItaGFuZGxpbmcgcGF0aCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBtYWR2aXNlKE1BRFZfSFdQT0lTT04pIG9uIGtlcm5lbC1vd25lZCBwYWdlcyBtYXBwZWQgaW4gdXNlciBzcGFjZSAobGlrZSB0aGUgdkRTTykgb3IgdmlhIHN5c2ZzIGVycm9yIGluamVjdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxODo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGNkNjY0OWE1ZDRmN2NkNDlhZTg1NTZlMmQ1MzQzNmM2YjZjYWJhMDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAzMCAxODo1NDowNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3RcbmluZGV4IGI5YjBjMjE4YmZiNDQwLi4yMmNjNTRjYWMzYjIxZCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0XG5AQCAtNjcsNiAmIzQzOzY3LDcgQEAgQ3VycmVudGx5LCB0aGVzZSBmaWxlcyBhcmUgaW4gL3Byb2Mvc3lzL3ZtOlxuIC0gcGFnZS1jbHVzdGVyXG4gLSBwYWdlX2xvY2tfdW5mYWlybmVzc1xuIC0gcGFuaWNfb25fb29tXG4mIzQzOy0gcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZVxuIC0gcGVyY3B1X3BhZ2VsaXN0X2hpZ2hfZnJhY3Rpb25cbiAtIHN0YXRfaW50ZXJ2YWxcbiAtIHN0YXRfcmVmcmVzaFxuQEAgLTkyNSw2ICYjNDM7OTI2LDg1IEBAIHBhbmljX29uX29vbT0yJiM0MztrZHVtcCBnaXZlcyB5b3UgdmVyeSBzdHJvbmcgdG9vbCB0byBpbnZlc3RpZ2F0ZVxuIHdoeSBvb20gaGFwcGVucy4gWW91IGNhbiBnZXQgc25hcHNob3QuXG4gXG4gXG4mIzQzO3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmVcbiYjNDM7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7XG4mIzQzO1doZW4gYSBoYXJkd2FyZSBtZW1vcnkgZXJyb3IgKGUuZy4gbXVsdGktYml0IEVDQykgaGl0cyBhIGtlcm5lbCBwYWdlXG4mIzQzO3RoYXQgY2Fubm90IGJlIHJlY292ZXJlZCBieSB0aGUgbWVtb3J5IGZhaWx1cmUgaGFuZGxlciwgdGhlIGRlZmF1bHRcbiYjNDM7YmVoYXZpb3VyIGlzIHRvIGlnbm9yZSB0aGUgZXJyb3IgYW5kIGNvbnRpbnVlIG9wZXJhdGlvbi4gIFRoaXMgaXNcbiYjNDM7ZGFuZ2Vyb3VzIGJlY2F1c2UgdGhlIGNvcnJ1cHRlZCBkYXRhIHJlbWFpbnMgYWNjZXNzaWJsZSB0byB0aGUga2VybmVsLFxuJiM0MztyaXNraW5nIHNpbGVudCBkYXRhIGNvcnJ1cHRpb24gb3IgYSBkZWxheWVkIGNyYXNoIHdoZW4gdGhlIHBvaXNvbmVkXG4mIzQzO21lbW9yeSBpcyBuZXh0IGFjY2Vzc2VkLlxuJiM0MztcbiYjNDM7V2hlbiBlbmFibGVkLCB0aGlzIHN5c2N0bCB0cmlnZ2VycyBhIHBhbmljIG9uIG1lbW9yeSBmYWlsdXJlIGV2ZW50c1xuJiM0MztoaXR0aW5nIGtlcm5lbC1vd25lZCBwYWdlcyB0aGF0IHRoZSBoYW5kbGVyIGNhbm5vdCByZWNvdmVyOlxuJiM0MztgYFBhZ2VSZXNlcnZlZGBgIChmaXJtd2FyZSByZXNlcnZhdGlvbnMsIGtlcm5lbCBpbWFnZSwgdkRTTywgemVyb1xuJiM0MztwYWdlLCBhbmQgc2ltaWxhciBtZW1ibG9jay1yZXNlcnZlZCByZWdpb25zKSwgYGBQYWdlU2xhYmBgLFxuJiM0MztgYFBhZ2VUYWJsZWBgLCBhbmQgYGBQYWdlTGFyZ2VLbWFsbG9jYGAuICBUaGVzZSBhcmUgb3duZWQgYnkgdGhlXG4mIzQzO2tlcm5lbCBhbmQgdGhlIG1lbW9yeSBmYWlsdXJlIGhhbmRsZXIgY2Fubm90IHJlbGlhYmx5IGV2aWN0IHRoZWlyXG4mIzQzO2NvbnRlbnRzLlxuJiM0MztcbiYjNDM7T3RoZXIgdW5yZWNvdmVyYWJsZSBrZXJuZWwtb3duZWQgcG9wdWxhdGlvbnMgKHZtYWxsb2MgYWxsb2NhdGlvbnMsXG4mIzQzO2tlcm5lbCBzdGFjayBwYWdlcywgLi4uKSBhcmUgbm90IGN1cnJlbnRseSBjb3ZlcmVkIGJlY2F1c2UgdGhlXG4mIzQzO2hhbmRsZXIgaGFzIG5vIHBhZ2UtdHlwZSBzaWduYWwgdGhhdCBkaXN0aW5ndWlzaGVzIHRoZW0gZnJvbSBhXG4mIzQzO3VzZXJzcGFjZSBmb2xpbyB0ZW1wb3JhcmlseSBvZmYgdGhlIExSVSBkdXJpbmcgbWlncmF0aW9uIG9yXG4mIzQzO2NvbXBhY3Rpb24uICBTdWNoIHBhZ2VzIHN0aWxsIGdvIHRocm91Z2ggdGhlIHN0YW5kYXJkXG4mIzQzO01GX01TR19HRVRfSFdQT0lTT04gcGF0aDogYGBQR19od3BvaXNvbmBgIGlzIHNldCBvbiB0aGVtIGFuZCBhXG4mIzQzO2RlbGF5ZWQgY3Jhc2ggb24gdGhlIG5leHQgYWNjZXNzIHJlbWFpbnMgcG9zc2libGUuICBDb3ZlcmFnZSBtYXlcbiYjNDM7Z3JvdyBhcyB0aGUgaGFuZGxlciBnYWlucyBzdHJvbmdlciBrZXJuZWwtb3duZXJzaGlwIHNpZ25hbHMuXG4mIzQzO1xuJiM0MztSZWNvdmVyYWJsZSBmYWlsdXJlIHBhdGhzIGFyZSBhbHNvIGludGVudGlvbmFsbHkgbGVmdCBvdXQ6IGluLWZsaWdodFxuJiM0MztidWRkeSBhbGxvY2F0aW9ucyBhbmQgb3RoZXIgdHJhbnNpZW50IHJhY2VzIHdpdGggdGhlIHBhZ2UgYWxsb2NhdG9yXG4mIzQzO2NhbiByZWFjaCB0aGUgc2FtZSBkaWFnbm9zdGljLCBhbmQgcGFuaWNraW5nIG9uIHRoZW0gd291bGQgcmlza1xuJiM0MztraWxsaW5nIHRoZSBib3ggZm9yIGEgcGFnZSBkZXN0aW5lZCBmb3IgdXNlcnNwYWNlIHdoZXJlIHRoZSBzdGFuZGFyZFxuJiM0MztTSUdCVVMgcmVjb3ZlcnkgcGF0aCBhcHBsaWVzLiAgUGFnZXMgd2hvc2Ugc3RhdGUgY291bGQgbm90IGJlXG4mIzQzO2NsYXNzaWZpZWQgYXQgYWxsIGFyZSBub3QgY292ZXJlZCBlaXRoZXIsIHNpbmNlIGFuIHVua25vd24gc3RhdGUgaXNcbiYjNDM7bm90IGEgc291bmQgYmFzaXMgZm9yIGEgcGFuaWMgZGVjaXNpb24uXG4mIzQzO1xuJiM0MztGb3IgbWFueSBlbnZpcm9ubWVudHMgaXQgaXMgcHJlZmVyYWJsZSB0byBwYW5pYyBpbW1lZGlhdGVseSB3aXRoIGEgY2xlYW5cbiYjNDM7Y3Jhc2ggZHVtcCB0aGF0IGNhcHR1cmVzIHRoZSBvcmlnaW5hbCBlcnJvciBjb250ZXh0LCByYXRoZXIgdGhhbiB0b1xuJiM0Mztjb250aW51ZSBhbmQgZmFjZSBhIHJhbmRvbSBjcmFzaCBsYXRlciB3aG9zZSBjYXVzZSBpcyBkaWZmaWN1bHQgdG9cbiYjNDM7ZGlhZ25vc2UuXG4mIzQzO1xuJiM0MztVc2UgY2FzZXNcbiYjNDM7LS0tLS0tLS0tXG4mIzQzO1xuJiM0MztUaGlzIG9wdGlvbiBpcyBtb3N0IHVzZWZ1bCBpbiBlbnZpcm9ubWVudHMgd2hlcmUgdW5hdHRyaWJ1dGVkIGNyYXNoZXNcbiYjNDM7YXJlIGV4cGVuc2l2ZSB0byBkZWJ1ZyBvciB3aGVyZSBkYXRhIGludGVncml0eSBtdXN0IHRha2UgcHJlY2VkZW5jZVxuJiM0MztvdmVyIGF2YWlsYWJpbGl0eTpcbiYjNDM7XG4mIzQzOyogTGFyZ2UgZmxlZXRzLCB3aGVyZSBtdWx0aS1iaXQgRUNDIGVycm9ycyBvbiBrZXJuZWwgcGFnZXMgYXJlIG9ic2VydmVkXG4mIzQzOyAgcmVndWxhcmx5IGFuZCBwb3N0LW1vcnRlbSBhbmFseXNpcyBvZiBhbiB1bnJlbGF0ZWQgZG93bnN0cmVhbSBjcmFzaFxuJiM0MzsgIChvZnRlbiBzZWNvbmRzIHRvIG1pbnV0ZXMgYWZ0ZXIgdGhlIG9yaWdpbmFsIGVycm9yKSBjb25zdW1lc1xuJiM0MzsgIHNpZ25pZmljYW50IGVuZ2luZWVyaW5nIGVmZm9ydC5cbiYjNDM7XG4mIzQzOyogU3lzdGVtcyBjb25maWd1cmVkIHdpdGgga2R1bXAsIHdoZXJlIHBhbmlja2luZyBhdCB0aGUgbW9tZW50IG9mIHRoZVxuJiM0MzsgIGhhcmR3YXJlIGVycm9yIHByb2R1Y2VzIGEgdm1jb3JlIHRoYXQgc3RpbGwgY29udGFpbnMgdGhlIGZhdWx0aW5nXG4mIzQzOyAgYWRkcmVzcywgdGhlIGFmZmVjdGVkIHBhZ2Ugc3RhdGUsIGFuZCB0aGUgb3JpZ2luYXRpbmcgTUNFL0dIRVNcbiYjNDM7ICByZWNvcmQg4oCUIGNvbnRleHQgdGhhdCBpcyB0eXBpY2FsbHkgbG9zdCBieSB0aGUgdGltZSBhIGRlbGF5ZWQgY3Jhc2hcbiYjNDM7ICBvY2N1cnMuXG4mIzQzO1xuJiM0MzsqIEhpZ2gtYXZhaWxhYmlsaXR5IGNsdXN0ZXJzIHRoYXQgcmVseSBvbiBmYXN0LCBkZXRlcm1pbmlzdGljIG5vZGVcbiYjNDM7ICBmYWlsdXJlIGZvciBmYWlsb3ZlciwgYW5kIHByZWZlciBhbiBpbW1lZGlhdGUgcGFuaWMgb3ZlciBzaWxlbnQgZGF0YVxuJiM0MzsgIGNvcnJ1cHRpb24gcHJvcGFnYXRpbmcgdG8gcmVwbGljYXMgb3IgcGVyc2lzdGVudCBzdG9yYWdlLlxuJiM0MztcbiYjNDM7KiBLZXJuZWwgYW5kIHBsYXRmb3JtIGRldmVsb3BlcnMgcmVwcm9kdWNpbmcgaHdwb2lzb24gaXNzdWVzIHdpdGhcbiYjNDM7ICB0b29scyBzdWNoIGFzIGBgbWNlLWluamVjdGBgIG9yIGVycm9yLWluamVjdGlvbiBkZWJ1Z2ZzIGludGVyZmFjZXMsXG4mIzQzOyAgd2hlcmUgcGFuaWNraW5nIG9uIHRoZSB1bnJlY292ZXJhYmxlIHBhdGggbWFrZXMgcmVncmVzc2lvbnNcbiYjNDM7ICBpbW1lZGlhdGVseSB2aXNpYmxlIGluc3RlYWQgb2Ygc3VyZmFjaW5nIGFzIGxhdGVyLCB1bnJlbGF0ZWRcbiYjNDM7ICBmYWlsdXJlcy5cbiYjNDM7XG4mIzQzOz0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzOzAgVHJ5IHRvIGNvbnRpbnVlIG9wZXJhdGlvbiAoZGVmYXVsdCkuXG4mIzQzOzEgUGFuaWMgaW1tZWRpYXRlbHkuICBJZiB0aGUgYGBwYW5pY2BgIHN5c2N0bCBpcyBhbHNvIG5vbi16ZXJvIHRoZW4gdGhlXG4mIzQzOyAgbWFjaGluZSB3aWxsIGJlIHJlYm9vdGVkLlxuJiM0Mzs9ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MztcbiYjNDM7RXhhbXBsZTo6XG4mIzQzO1xuJiM0MzsgICAgIGVjaG8gMSBcdTAwM2UgL3Byb2Mvc3lzL3ZtL3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmVcbiYjNDM7XG4mIzQzO1xuIHBlcmNwdV9wYWdlbGlzdF9oaWdoX2ZyYWN0aW9uXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuaW5kZXggNTE1MDhhNTVjNDA1NWUuLmUwOTdmYzgyNjJjZjgzIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuQEAgLTc0LDYgJiM0Mzs3NCw4IEBAIHN0YXRpYyBpbnQgc3lzY3RsX21lbW9yeV9mYWlsdXJlX3JlY292ZXJ5IF9fcmVhZF9tb3N0bHkgPSAxO1xuIFxuIHN0YXRpYyBpbnQgc3lzY3RsX2VuYWJsZV9zb2Z0X29mZmxpbmUgX19yZWFkX21vc3RseSA9IDE7XG4gXG4mIzQzO3N0YXRpYyBpbnQgc3lzY3RsX3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWYgX19yZWFkX21vc3RseTtcbiYjNDM7XG4gYXRvbWljX2xvbmdfdCBudW1fcG9pc29uZWRfcGFnZXMgX19yZWFkX21vc3RseSA9IEFUT01JQ19MT05HX0lOSVQoMCk7XG4gXG4gc3RhdGljIGJvb2wgaHdfbWVtb3J5X2ZhaWx1cmUgX19yZWFkX21vc3RseSA9IGZhbHNlO1xuQEAgLTE1NSw2ICYjNDM7MTU3LDE1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG1lbW9yeV9mYWlsdXJlX3RhYmxlW10gPSB7XG4gXHRcdC5wcm9jX2hhbmRsZXJcdD0gcHJvY19kb2ludHZlY19taW5tYXgsXG4gXHRcdC5leHRyYTFcdFx0PSBTWVNDVExfWkVSTyxcbiBcdFx0LmV4dHJhMlx0XHQ9IFNZU0NUTF9PTkUsXG4mIzQzO1x0fSxcbiYjNDM7XHR7XG4mIzQzO1x0XHQucHJvY25hbWVcdD0gXCYjMzQ7cGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZVwmIzM0OyxcbiYjNDM7XHRcdC5kYXRhXHRcdD0gXHUwMDI2c3lzY3RsX3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWYsXG4mIzQzO1x0XHQubWF4bGVuXHRcdD0gc2l6ZW9mKHN5c2N0bF9wYW5pY19vbl91bnJlY292ZXJhYmxlX21mKSxcbiYjNDM7XHRcdC5tb2RlXHRcdD0gMDY0NCxcbiYjNDM7XHRcdC5wcm9jX2hhbmRsZXJcdD0gcHJvY19kb2ludHZlY19taW5tYXgsXG4mIzQzO1x0XHQuZXh0cmExXHRcdD0gU1lTQ1RMX1pFUk8sXG4mIzQzO1x0XHQuZXh0cmEyXHRcdD0gU1lTQ1RMX09ORSxcbiBcdH1cbiB9O1xuIFxuQEAgLTk4MCwxNyAmIzQzOzk5MSw2IEBAIHN0YXRpYyBib29sIGhhc19leHRyYV9yZWZjb3VudChzdHJ1Y3QgcGFnZV9zdGF0ZSAqcHMsIHN0cnVjdCBwYWdlICpwLFxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi0vKlxuLSAqIEVycm9yIGhpdCBrZXJuZWwgcGFnZS5cbi0gKiBEbyBub3RoaW5nLCB0cnkgdG8gYmUgbHVja3kgYW5kIG5vdCB0b3VjaCB0aGlzIGluc3RlYWQuIEZvciBhIGZldyBjYXNlcyB3ZVxuLSAqIGNvdWxkIGJlIG1vcmUgc29waGlzdGljYXRlZC5cbi0gKi9cbi1zdGF0aWMgaW50IG1lX2tlcm5lbChzdHJ1Y3QgcGFnZV9zdGF0ZSAqcHMsIHN0cnVjdCBwYWdlICpwKVxuLXtcbi1cdHVubG9ja19wYWdlKHApO1xuLVx0cmV0dXJuIE1GX0lHTk9SRUQ7XG4tfVxuLVxuIC8qXG4gICogUGFnZSBpbiB1bmtub3duIHN0YXRlLiBEbyBub3RoaW5nLlxuICAqIFRoaXMgaXMgYSBjYXRjaC1hbGwgaW4gY2FzZSB3ZSBmYWlsIHRvIG1ha2Ugc2Vuc2Ugb2YgdGhlIHBhZ2Ugc3RhdGUuXG5AQCAtMTE5OSwxMCAmIzQzOzExOTksOCBAQCBzdGF0aWMgaW50IG1lX2h1Z2VfcGFnZShzdHJ1Y3QgcGFnZV9zdGF0ZSAqcHMsIHN0cnVjdCBwYWdlICpwKVxuICNkZWZpbmUgbWxvY2tcdFx0KDFVTCBcdTAwM2NcdTAwM2MgUEdfbWxvY2tlZClcbiAjZGVmaW5lIGxydVx0XHQoMVVMIFx1MDAzY1x1MDAzYyBQR19scnUpXG4gI2RlZmluZSBoZWFkXHRcdCgxVUwgXHUwMDNjXHUwMDNjIFBHX2hlYWQpXG4tI2RlZmluZSByZXNlcnZlZFx0KDFVTCBcdTAwM2NcdTAwM2MgUEdfcmVzZXJ2ZWQpXG4gXG4gc3RhdGljIHN0cnVjdCBwYWdlX3N0YXRlIGVycm9yX3N0YXRlc1tdID0ge1xuLVx0eyByZXNlcnZlZCxcdHJlc2VydmVkLFx0TUZfTVNHX0tFUk5FTCxcdG1lX2tlcm5lbCB9LFxuIFx0LypcbiBcdCAqIGZyZWUgcGFnZXMgYXJlIHNwZWNpYWxseSBkZXRlY3RlZCBvdXRzaWRlIHRoaXMgdGFibGU6XG4gXHQgKiBQR19idWRkeSBwYWdlcyBvbmx5IG1ha2UgYSBzbWFsbCBmcmFjdGlvbiBvZiBhbGwgZnJlZSBwYWdlcy5cbkBAIC0xMjM0LDcgJiM0MzsxMjMyLDYgQEAgc3RhdGljIHN0cnVjdCBwYWdlX3N0YXRlIGVycm9yX3N0YXRlc1tdID0ge1xuICN1bmRlZiBtbG9ja1xuICN1bmRlZiBscnVcbiAjdW5kZWYgaGVhZFxuLSN1bmRlZiByZXNlcnZlZFxuIFxuIHN0YXRpYyB2b2lkIHVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyh1bnNpZ25lZCBsb25nIHBmbixcbiBcdFx0XHRcdCAgICAgZW51bSBtZl9yZXN1bHQgcmVzdWx0KVxuQEAgLTEyNjksNiAmIzQzOzEyNjYsMTUgQEAgc3RhdGljIHZvaWQgdXBkYXRlX3Blcl9ub2RlX21mX3N0YXRzKHVuc2lnbmVkIGxvbmcgcGZuLFxuIFx0JiM0MzsmIzQzO21mX3N0YXRzLVx1MDAzZXRvdGFsO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZihlbnVtIG1mX2FjdGlvbl9wYWdlX3R5cGUgdHlwZSxcbiYjNDM7XHRcdFx0XHQgICAgICBlbnVtIG1mX3Jlc3VsdCByZXN1bHQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXN5c2N0bF9wYW5pY19vbl91bnJlY292ZXJhYmxlX21mKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHlwZSA9PSBNRl9NU0dfS0VSTkVMIFx1MDAyNlx1MDAyNiByZXN1bHQgPT0gTUZfSUdOT1JFRDtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIFwmIzM0O0RpcnR5L0NsZWFuXCYjMzQ7IGluZGljYXRpb24gaXMgbm90IDEwMCUgYWNjdXJhdGUgZHVlIHRvIHRoZSBwb3NzaWJpbGl0eSBvZlxuICAqIHNldHRpbmcgUEdfZGlydHkgb3V0c2lkZSBwYWdlIGxvY2suIFNlZSBhbHNvIGNvbW1lbnQgYWJvdmUgc2V0X3BhZ2VfZGlydHkoKS5cbkBAIC0xMjg2LDYgJiM0MzsxMjkyLDkgQEAgc3RhdGljIGludCBhY3Rpb25fcmVzdWx0KHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIG1mX2FjdGlvbl9wYWdlX3R5cGUgdHlwZSxcbiBcdHByX2VycihcJiMzNDslI2x4OiByZWNvdmVyeSBhY3Rpb24gZm9yICVzOiAlc1xcblwmIzM0OyxcbiBcdFx0cGZuLCBhY3Rpb25fcGFnZV90eXBlc1t0eXBlXSwgYWN0aW9uX25hbWVbcmVzdWx0XSk7XG4gXG4mIzQzO1x0aWYgKHBhbmljX29uX3VucmVjb3ZlcmFibGVfbWYodHlwZSwgcmVzdWx0KSlcbiYjNDM7XHRcdHBhbmljKFwmIzM0O01lbW9yeSBmYWlsdXJlOiAlI2x4OiB1bnJlY292ZXJhYmxlIHBhZ2VcJiMzNDssIHBmbik7XG4mIzQzO1xuIFx0cmV0dXJuIChyZXN1bHQgPT0gTUZfUkVDT1ZFUkVEIHx8IHJlc3VsdCA9PSBNRl9ERUxBWUVEKSA/IDAgOiAtRUJVU1k7XG4gfVxuIFxuQEAgLTEzMzksNiAmIzQzOzEzNDgsMzggQEAgc3RhdGljIGlubGluZSBib29sIEhXUG9pc29uSGFuZGxhYmxlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuIFx0cmV0dXJuIFBhZ2VMUlUocGFnZSkgfHwgaXNfZnJlZV9idWRkeV9wYWdlKHBhZ2UpO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogUG9zaXRpdmUgaWRlbnRpZmljYXRpb24gb2YgcGFnZXMgdGhlIGh3cG9pc29uIGhhbmRsZXIgY2Fubm90IHJlY292ZXI6XG4mIzQzOyAqIHBhZ2VzIG93bmVkIGJ5IGtlcm5lbCBpbnRlcm5hbHMgd2l0aCBubyB1c2Vyc3BhY2UgbWFwcGluZyB0byB1bm1hcCwgbm9cbiYjNDM7ICogZmlsZSBtYXBwaW5nIHRvIGludmFsaWRhdGUsIGFuZCBubyBtaWdyYXRpb24gdGFyZ2V0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBib29sIGlzX2tlcm5lbF9vd25lZF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBhZ2UgKmhlYWQ7XG4mIzQzO1x0Ym9vbCBrZXJuZWxfb3duZWQ7XG4mIzQzO1xuJiM0MztcdC8qIFBHX3Jlc2VydmVkIGlzIGEgcGVyLXBhZ2UgZmxhZywgbmV2ZXIgc2V0IG9uIGEgY29tcG91bmQgcGFnZS4gKi9cbiYjNDM7XHRpZiAoUGFnZVJlc2VydmVkKHBhZ2UpKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUGFnZS10eXBlIGJpdHMgbGl2ZSBvbmx5IG9uIHRoZSBoZWFkIHBhZ2UsIHNvIHJlc29sdmUgYW55IHRhaWxcbiYjNDM7XHQgKiBmaXJzdC4gIFRoZSBjaGVjayB0YWtlcyBubyByZWZjb3VudDsgcmVjaGVjayB0aGUgaGVhZCBhZnRlcndhcmRzXG4mIzQzO1x0ICogc28gYSBjb25jdXJyZW50IHNwbGl0IG9yIGNvbXBvdW5kIGZyZWUgY2Fubm90IGxlYXZlIHVzIHRydXN0aW5nXG4mIzQzO1x0ICogYSBzdGFsZSB2aWV3LiAgQSByZXNpZHVhbCBmcmVlLVx1MDAzZWFsbG9jLVx1MDAzZWZyZWUgY2Fubm90IGJlIGNsb3NlZCBoZXJlXG4mIzQzO1x0ICogKGZyb3plbiBzbGFiIGFuZCBsYXJnZS1rbWFsbG9jIHBhZ2VzIGNhbm5vdCBiZSBwaW5uZWQpLCBidXQgaXNcbiYjNDM7XHQgKiBoYXJtbGVzczogd2hlcmUgYSB3cm9uZyB2ZXJkaWN0IGNvdWxkIHBhbmljLCBtZW1vcnlfZmFpbHVyZSgpIGhhc1xuJiM0MztcdCAqIGFscmVhZHkgc2V0IFBhZ2VIV1BvaXNvbiwgd2hpY2ggYmFycyB0aGUgcGFnZSBmcm9tIHRoZSBhbGxvY2F0b3IuXG4mIzQzO1x0ICovXG4mIzQzO3JldHJ5OlxuJiM0MztcdGhlYWQgPSBjb21wb3VuZF9oZWFkKHBhZ2UpO1xuJiM0MztcdGtlcm5lbF9vd25lZCA9IFBhZ2VTbGFiKGhlYWQpIHx8IFBhZ2VUYWJsZShoZWFkKSB8fFxuJiM0MztcdFx0ICAgICAgIFBhZ2VMYXJnZUttYWxsb2MoaGVhZCk7XG4mIzQzO1x0aWYgKGhlYWQgIT0gY29tcG91bmRfaGVhZChwYWdlKSlcbiYjNDM7XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1x0cmV0dXJuIGtlcm5lbF9vd25lZDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IF9fZ2V0X2h3cG9pc29uX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4ge1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG5AQCAtMTM4NSw2ICYjNDM7MTQyNiwxOSBAQCBzdGF0aWMgaW50IGdldF9hbnlfcGFnZShzdHJ1Y3QgcGFnZSAqcCwgdW5zaWduZWQgbG9uZyBmbGFncylcbiBcdGlmIChmbGFncyBcdTAwMjYgTUZfQ09VTlRfSU5DUkVBU0VEKVxuIFx0XHRjb3VudF9pbmNyZWFzZWQgPSB0cnVlO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogUGFnZSB0eXBlcyB3ZSBrbm93IGFyZSBrZXJuZWwtb3duZWQgYW5kIGNhbm5vdCBiZSByZWNvdmVyZWQuXG4mIzQzO1x0ICogU2hvcnQtY2lyY3VpdCBiZWZvcmUgdGhlIHNoYWtlX3BhZ2UoKSAvIHJldHJ5IGxvb3AsIHdoaWNoXG4mIzQzO1x0ICogY2Fubm90IHR1cm4gYW55IG9mIHRoZXNlIGludG8gc29tZXRoaW5nIEhXUG9pc29uSGFuZGxhYmxlKCkuXG4mIzQzO1x0ICogRHJvcCB0aGUgY2FsbGVyJiMzOTtzIHJlZmVyZW5jZSBpZiBNRl9DT1VOVF9JTkNSRUFTRUQgdG9vayBvbmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGlzX2tlcm5lbF9vd25lZF9wYWdlKHApKSB7XG4mIzQzO1x0XHRpZiAoY291bnRfaW5jcmVhc2VkKVxuJiM0MztcdFx0XHRwdXRfcGFnZShwKTtcbiYjNDM7XHRcdHJldCA9IC1FTk9UUkVDT1ZFUkFCTEU7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuIHRyeV9hZ2FpbjpcbiBcdGlmICghY291bnRfaW5jcmVhc2VkKSB7XG4gXHRcdHJldCA9IF9fZ2V0X2h3cG9pc29uX3BhZ2UocCwgZmxhZ3MpO1xuQEAgLTE0MzIsNyAmIzQzOzE0ODYsNyBAQCBzdGF0aWMgaW50IGdldF9hbnlfcGFnZShzdHJ1Y3QgcGFnZSAqcCwgdW5zaWduZWQgbG9uZyBmbGFncylcbiBcdFx0cmV0ID0gLUVJTztcbiBcdH1cbiBvdXQ6XG4tXHRpZiAocmV0ID09IC1FSU8pXG4mIzQzO1x0aWYgKHJldCA9PSAtRUlPIHx8IHJldCA9PSAtRU5PVFJFQ09WRVJBQkxFKVxuIFx0XHRwcl9lcnIoXCYjMzQ7JSNseDogdW5oYW5kbGFibGUgcGFnZS5cXG5cJiMzNDssIHBhZ2VfdG9fcGZuKHApKTtcbiBcbiBcdHJldHVybiByZXQ7XG5AQCAtMTQ4OSw3ICYjNDM7MTU0MywxMCBAQCBzdGF0aWMgaW50IF9fZ2V0X3VucG9pc29uX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4gICogICAgICAgICAtRUlPIGZvciBwYWdlcyBvbiB3aGljaCB3ZSBjYW4gbm90IGhhbmRsZSBtZW1vcnkgZXJyb3JzLFxuICAqICAgICAgICAgLUVCVVNZIHdoZW4gZ2V0X2h3cG9pc29uX3BhZ2UoKSBoYXMgcmFjZWQgd2l0aCBwYWdlIGxpZmVjeWNsZVxuICAqICAgICAgICAgb3BlcmF0aW9ucyBsaWtlIGFsbG9jYXRpb24gYW5kIGZyZWUsXG4tICogICAgICAgICAtRUhXUE9JU09OIHdoZW4gdGhlIHBhZ2UgaXMgaHdwb2lzb25lZCBhbmQgdGFrZW4gb2ZmIGZyb20gYnVkZHkuXG4mIzQzOyAqICAgICAgICAgLUVIV1BPSVNPTiB3aGVuIHRoZSBwYWdlIGlzIGh3cG9pc29uZWQgYW5kIHRha2VuIG9mZiBmcm9tIGJ1ZGR5LFxuJiM0MzsgKiAgICAgICAgIC1FTk9UUkVDT1ZFUkFCTEUgZm9yIGtlcm5lbC1vd25lZCBwYWdlcyBpZGVudGlmaWVkIGJ5XG4mIzQzOyAqICAgICAgICAgaXNfa2VybmVsX293bmVkX3BhZ2UoKSAoUEdfcmVzZXJ2ZWQsIHNsYWIsXG4mIzQzOyAqICAgICAgICAgcGFnZS10YWJsZSwgbGFyZ2Uta21hbGxvYykgdGhhdCB0aGUgaGFuZGxlciBjYW5ub3QgcmVjb3Zlci5cbiAgKi9cbiBzdGF0aWMgaW50IGdldF9od3BvaXNvbl9wYWdlKHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuIHtcbkBAIC0yNDAyLDcgJiM0MzsyNDU5LDggQEAgaW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG4gXHQgKiB0aGF0IG1heSBtYWtlIHBhZ2VfcmVmX2ZyZWV6ZSgpL3BhZ2VfcmVmX3VuZnJlZXplKCkgbWlzbWF0Y2guXG4gXHQgKi9cbiBcdHJlcyA9IGdldF9od3BvaXNvbl9wYWdlKHAsIGZsYWdzKTtcbi1cdGlmICghcmVzKSB7XG4mIzQzO1x0c3dpdGNoIChyZXMpIHtcbiYjNDM7XHRjYXNlIDA6XG4gXHRcdGlmIChpc19mcmVlX2J1ZGR5X3BhZ2UocCkpIHtcbiBcdFx0XHRpZiAodGFrZV9wYWdlX29mZl9idWRkeShwKSkge1xuIFx0XHRcdFx0cGFnZV9yZWZfaW5jKHApO1xuQEAgLTI0MjEsNyAmIzQzOzI0NzksMTkgQEAgaW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpXG4gXHRcdFx0cmVzID0gYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19LRVJORUxfSElHSF9PUkRFUiwgTUZfSUdOT1JFRCk7XG4gXHRcdH1cbiBcdFx0Z290byB1bmxvY2tfbXV0ZXg7XG4tXHR9IGVsc2UgaWYgKHJlcyBcdTAwM2MgMCkge1xuJiM0MztcdGNhc2UgMTpcbiYjNDM7XHRcdC8qIEdvdCBhIHJlZmNvdW50IG9uIGEgaGFuZGxhYmxlIHBhZ2UuICovXG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIC1FTk9UUkVDT1ZFUkFCTEU6XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogU3RhYmxlIHVuaGFuZGxhYmxlIGtlcm5lbC1vd25lZCBwYWdlIChQR19yZXNlcnZlZCxcbiYjNDM7XHRcdCAqIHNsYWIsIHBhZ2UgdGFibGVzLCBsYXJnZS1rbWFsbG9jKS5cbiYjNDM7XHRcdCAqIE5vIHJlY292ZXJ5IHBvc3NpYmxlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyZXMgPSBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0tFUk5FTCwgTUZfSUdOT1JFRCk7XG4mIzQzO1x0XHRnb3RvIHVubG9ja19tdXRleDtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0LyogVHJhbnNpZW50IGxpZmVjeWNsZSByYWNlIHdpdGggdGhlIHBhZ2UgYWxsb2NhdG9yLiAqL1xuIFx0XHRyZXMgPSBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0dFVF9IV1BPSVNPTiwgTUZfSUdOT1JFRCk7XG4gXHRcdGdvdG8gdW5sb2NrX211dGV4O1xuIFx0fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbmluZGV4IGU2ZGY5NjhmMDk3MWM4Li5lZDMyMWFlNzA5ZGFjZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuQEAgLTE3NCw2ICYjNDM7MTc0LDEwIEBAIFRFU1RfUFJPR1MgJiM0Mzs9IGtzZnRfdXNlcmZhdWx0ZmQuc2hcbiBURVNUX1BST0dTICYjNDM7PSBrc2Z0X3ZtYV9tZXJnZS5zaFxuIFRFU1RfUFJPR1MgJiM0Mzs9IGtzZnRfdm1hbGxvYy5zaFxuIFxuJiM0MzsjIERlc3RydWN0aXZlOiBldmVyeSBzdWNjZXNzZnVsIHJ1biBwYW5pY3MgdGhlIGtlcm5lbC4gIEluc3RhbGxlZCBhbmRcbiYjNDM7IyBrZXB0IGV4ZWN1dGFibGUsIGJ1dCBub3QgcnVuIGZyb20gYSBkZWZhdWx0IGtzZWxmdGVzdCBpbnZvY2F0aW9uLlxuJiM0MztURVNUX1BST0dTX0VYVEVOREVEICYjNDM7PSBod3BvaXNvbi1wYW5pYy5zaFxuJiM0MztcbiBURVNUX0ZJTEVTIDo9IHRlc3Rfdm1hbGxvYy5zaFxuIFRFU1RfRklMRVMgJiM0Mzs9IHRlc3RfaG1tLnNoXG4gVEVTVF9GSUxFUyAmIzQzOz0gdmFfaGlnaF9hZGRyX3N3aXRjaC5zaFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h3cG9pc29uLXBhbmljLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHdwb2lzb24tcGFuaWMuc2hcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZDk1M2QxMzY3MzMyNDRcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h3cG9pc29uLXBhbmljLnNoXG5AQCAtMCwwICYjNDM7MSwyNTUgQEBcbiYjNDM7IyEvYmluL2Jhc2hcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjXG4mIzQzOyMgVmVyaWZ5IHZtLnBhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmUgYnkgaW5qZWN0aW5nIGEgaHdwb2lzb25cbiYjNDM7IyBlcnJvciBvbiBhIGtlcm5lbC1vd25lZCBwYWdlIGFuZCBjb25maXJtaW5nIHRoZSBrZXJuZWwgcGFuaWNzLlxuJiM0MzsjXG4mIzQzOyMgVGhyZWUgXCYjMzQ7a2luZHNcJiMzNDsgb2Yga2VybmVsLW93bmVkIHBhZ2UgY2FuIGJlIHRhcmdldGVkLCBzZWxlY3RhYmxlIHZpYSB0aGVcbiYjNDM7IyBmaXJzdCBwb3NpdGlvbmFsIGFyZ3VtZW50IChkZWZhdWx0OiByb2RhdGEpOlxuJiM0MzsjXG4mIzQzOyMgICByb2RhdGEgIC0gYSBQR19yZXNlcnZlZCBwYWdlIGluIHRoZSBrZXJuZWwgcm9kYXRhIHJhbmdlXG4mIzQzOyMgICAgICAgICAgICAgKHNvdXJjZWQgZnJvbSAvcHJvYy9pb21lbSBcJiMzNDtLZXJuZWwgcm9kYXRhXCYjMzQ7KS4gIEV4ZXJjaXNlc1xuJiM0MzsjICAgICAgICAgICAgIG1lbW9yeV9mYWlsdXJlKCkgLVx1MDAzZSBnZXRfYW55X3BhZ2UoKSBvbiBhIFBhZ2VSZXNlcnZlZCBwYWdlLlxuJiM0MzsjXG4mIzQzOyMgICBzbGFiICAgIC0gYSBzbGFiIHBhZ2UgZm91bmQgdmlhIC9wcm9jL2twYWdlZmxhZ3MgKEtQRl9TTEFCKS5cbiYjNDM7IyAgICAgICAgICAgICBFeGVyY2lzZXMgbWVtb3J5X2ZhaWx1cmUoKSAtXHUwMDNlIGdldF9hbnlfcGFnZSgpIG9uIGEgbm9uXG4mIzQzOyMgICAgICAgICAgICAgUEdfcmVzZXJ2ZWQga2VybmVsLW93bmVkIHBhZ2UuICBUaGlzIHBhdGggaXMgd2hhdCBjYXRjaGVzXG4mIzQzOyMgICAgICAgICAgICAgcmVncmVzc2lvbnMgd2hlcmUgZ2V0X2FueV9wYWdlKCkgY29sbGFwc2VzIGtlcm5lbC1vd25lZFxuJiM0MzsjICAgICAgICAgICAgIHBhZ2VzIGludG8gYSB0cmFuc2llbnQgLUVJTyBpbnN0ZWFkIG9mIC1FTk9UUkVDT1ZFUkFCTEUuXG4mIzQzOyNcbiYjNDM7IyAgIHBndGFibGUgLSBhIHBhZ2UtdGFibGUgcGFnZSBmb3VuZCB2aWEgL3Byb2Mva3BhZ2VmbGFncyAoS1BGX1BHVEFCTEUpLlxuJiM0MzsjICAgICAgICAgICAgIFNhbWUgcGF0aCBhcyBzbGFiLCBkaWZmZXJlbnQgcGFnZSB0eXBlLlxuJiM0MzsjXG4mIzQzOyMgVGhpcyB0ZXN0IGlzIERFU1RSVUNUSVZFOiBhIHN1Y2Nlc3NmdWwgcnVuIGNyYXNoZXMgdGhlIGtlcm5lbC4gIEl0IGlzXG4mIzQzOyMgbWVhbnQgdG8gYmUgZXhlY3V0ZWQgaW5zaWRlIGEgZGlzcG9zYWJsZSBWTSAoZS5nLiB2aXJ0bWUtbmcpIHdpdGggYVxuJiM0MzsjIHNlcmlhbCBjb25zb2xlIGNhcHR1cmVkIGJ5IHRoZSBoYXJuZXNzLiAgSXQgaXMgc2tpcHBlZCB1bmxlc3MgdGhlXG4mIzQzOyMgY2FsbGVyIG9wdHMgaW4gdmlhIFJVTl9ERVNUUlVDVElWRT0xLlxuJiM0MzsjXG4mIzQzOyMgVGVzdCBwYXNzZXMgZXh0ZXJuYWxseTogdGhlIGtlcm5lbCBtdXN0IHBhbmljIHdpdGhcbiYjNDM7IyAgIFwmIzM0O01lbW9yeSBmYWlsdXJlOiBcdTAwM2NwZm5cdTAwM2U6IHVucmVjb3ZlcmFibGUgcGFnZVwmIzM0O1xuJiM0MzsjIEEgcmV0dXJuIGZyb20gdGhlIGluamVjdCBtZWFucyBubyBwYW5pYyBmaXJlZDogdGhhdCBpcyBhIGZhaWx1cmUsXG4mIzQzOyMgdW5sZXNzIHRoZSB0YXJnZXQgUEZOIHJhY2VkIHRvIGEgZGlmZmVyZW50IHBhZ2UgdHlwZSBiZWZvcmUgaW5qZWN0aW9uLFxuJiM0MzsjIGluIHdoaWNoIGNhc2UgdGhlIHJ1biBpcyBpbmNvbmNsdXNpdmUgYW5kIGlzIHNraXBwZWQuXG4mIzQzOyNcbiYjNDM7IyBBdXRob3I6IEJyZW5vIExlaXRhbyBcdTAwM2NsZWl0YW9AZGViaWFuLm9yZ1x1MDAzZVxuJiM0MztcbiYjNDM7c2V0IC11XG4mIzQzO1xuJiM0MzsjIEtUQVAgb3V0cHV0IGhlbHBlcnMgKGt0YXBfcHJpbnRfbXNnLCBrdGFwX3NraXBfYWxsLCBrdGFwX2V4aXRfZmFpbF9tc2csIC4uLikuXG4mIzQzO0RJUj1cJiMzNDskKGRpcm5hbWUgXCYjMzQ7JChyZWFkbGluayAtZiBcJiMzNDskMFwmIzM0OylcJiMzNDspXCYjMzQ7XG4mIzQzOyMgc2hlbGxjaGVjayBzb3VyY2U9Li4va3NlbGZ0ZXN0L2t0YXBfaGVscGVycy5zaFxuJiM0Mztzb3VyY2UgXCYjMzQ7JHtESVJ9XCYjMzQ7Ly4uL2tzZWxmdGVzdC9rdGFwX2hlbHBlcnMuc2hcbiYjNDM7XG4mIzQzO3N5c2N0bF9wYXRoPS9wcm9jL3N5cy92bS9wYW5pY19vbl91bnJlY292ZXJhYmxlX21lbW9yeV9mYWlsdXJlXG4mIzQzO2luamVjdF9wYXRoPS9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2hhcmRfb2ZmbGluZV9wYWdlXG4mIzQzO2twYWdlZmxhZ3NfcGF0aD0vcHJvYy9rcGFnZWZsYWdzXG4mIzQzO3VucG9pc29uX3BhdGg9L3N5cy9rZXJuZWwvZGVidWcvaHdwb2lzb24vdW5wb2lzb24tcGZuXG4mIzQzO1xuJiM0MzsjIC9wcm9jL2twYWdlZmxhZ3MgYml0IHBvc2l0aW9ucyAoc2VlIGluY2x1ZGUvdWFwaS9saW51eC9rZXJuZWwtcGFnZS1mbGFncy5oKVxuJiM0MztLUEZfU0xBQj03XG4mIzQzO0tQRl9DT01QT1VORF9UQUlMPTE2XG4mIzQzO0tQRl9IV1BPSVNPTj0xOVxuJiM0MztLUEZfTk9QQUdFPTIwXG4mIzQzO0tQRl9QR1RBQkxFPTI2XG4mIzQzO0tQRl9SRVNFUlZFRD0zMlxuJiM0MztcbiYjNDM7cGFnZXNpemU9JChnZXRjb25mIFBBR0VfU0laRSlcbiYjNDM7XG4mIzQzO2tpbmQ9JHsxOi1yb2RhdGF9XG4mIzQzO1xuJiM0MztpZiBbIFwmIzM0OyQoaWQgLXUpXCYjMzQ7IC1uZSAwIF07IHRoZW5cbiYjNDM7XHRrdGFwX3NraXBfYWxsIFwmIzM0O211c3QgcnVuIGFzIHJvb3RcJiMzNDtcbiYjNDM7XHRleGl0IFwmIzM0OyRLU0ZUX1NLSVBcJiMzNDtcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzO2lmIFsgISAtdyBcJiMzNDskc3lzY3RsX3BhdGhcJiMzNDsgXTsgdGhlblxuJiM0MztcdGt0YXBfc2tpcF9hbGwgXCYjMzQ7JHN5c2N0bF9wYXRoIG5vdCBwcmVzZW50IChrZXJuZWwgd2l0aG91dCB0aGUgc3lzY3RsPylcJiMzNDtcbiYjNDM7XHRleGl0IFwmIzM0OyRLU0ZUX1NLSVBcJiMzNDtcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzO2lmIFsgISAtdyBcJiMzNDskaW5qZWN0X3BhdGhcJiMzNDsgXTsgdGhlblxuJiM0MztcdGt0YXBfc2tpcF9hbGwgXCYjMzQ7JGluamVjdF9wYXRoIG5vdCBwcmVzZW50IChubyBNRU1PUllfSE9UUExVRz8pXCYjMzQ7XG4mIzQzO1x0ZXhpdCBcJiMzNDskS1NGVF9TS0lQXCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO1xuJiM0MztpZiBbIFwmIzM0OyR7UlVOX0RFU1RSVUNUSVZFOi0wfVwmIzM0OyAhPSBcJiMzNDsxXCYjMzQ7IF07IHRoZW5cbiYjNDM7XHRrdGFwX3NraXBfYWxsIFwmIzM0O2Rlc3RydWN0aXZlIHRlc3Q7IHJlLXJ1biB3aXRoIFJVTl9ERVNUUlVDVElWRT0xIGluc2lkZSBhIGRpc3Bvc2FibGUgVk1cJiMzNDtcbiYjNDM7XHRleGl0IFwmIzM0OyRLU0ZUX1NLSVBcJiMzNDtcbiYjNDM7ZmlcbiYjNDM7XG4mIzQzOyMgUGljayBhIFBGTiBpbnNpZGUgdGhlIGtlcm5lbCBpbWFnZSByb2RhdGEgcmVnaW9uIG9mIC9wcm9jL2lvbWVtLlxuJiM0MzsjIFRoaXMgaXMgcHJlZmVycmVkIG92ZXIgYSB0b3AtbGV2ZWwgXCYjMzQ7UmVzZXJ2ZWRcJiMzNDsgZW50cnkgYmVjYXVzZSB0b3AtbGV2ZWxcbiYjNDM7IyBSZXNlcnZlZCByYW5nZXMgYXJlIG9mdGVuIGZpcm13YXJlIGhvbGVzIHRoYXQgaGF2ZSBubyBiYWNraW5nIHN0cnVjdFxuJiM0MzsjIHBhZ2U7IHBmbl90b19vbmxpbmVfcGFnZSgpIHJldHVybnMgTlVMTCBvbiB0aG9zZSBhbmQgbWVtb3J5X2ZhaWx1cmUoKVxuJiM0MzsjIGJhaWxzIG91dCB3aXRoIC1FTlhJTyBiZWZvcmUgcmVhY2hpbmcgdGhlIHBhbmljIHBhdGguXG4mIzQzOyNcbiYjNDM7IyBcJiMzNDtLZXJuZWwgcm9kYXRhXCYjMzQ7IGlzIHJlcG9ydGVkIGFzIGEgc3ViLXJlc291cmNlIG9mIFwmIzM0O1N5c3RlbSBSQU1cJiMzNDsgb24gZXZlcnlcbiYjNDM7IyBtYWpvciBhcmNoaXRlY3R1cmUsIHdoaWNoIGd1YXJhbnRlZXM6XG4mIzQzOyMgICAtIHRoZSBQRk4gaXMgYmFja2VkIGJ5IHN0cnVjdCBwYWdlICh3aXRoaW4gYW4gb25saW5lIG1lbW9yeSByYW5nZSk7XG4mIzQzOyMgICAtIFBHX3Jlc2VydmVkIGlzIHNldCBvbiB0aGUgcGFnZSAoa2VybmVsIGltYWdlIGFyZWEpO1xuJiM0MzsjICAgLSB0aGUgbWVtb3J5IGlzIHJlYWQtb25seSwgc28gc2V0dGluZyBQR19od3BvaXNvbiBvbiBpdCBkb2VzIG5vdFxuJiM0MzsjICAgICBjb3JydXB0IHdyaXRhYmxlIGtlcm5lbCBzdGF0ZSBpZiB0aGUgcGFuaWMgc29tZWhvdyBkb2VzIG5vdCBmaXJlLlxuJiM0MzsjXG4mIzQzOyMgL3Byb2MvaW9tZW0gZW50cmllcyBsb29rIGxpa2UgKGluZGVudGVkIGZvciBzdWItcmVzb3VyY2VzKTpcbiYjNDM7IyAgICAgXCYjMzQ7ICAwMjUwMDAwMC0wMmZmZmZmZiA6IEtlcm5lbCByb2RhdGFcJiMzNDtcbiYjNDM7cGlja19yb2RhdGFfcGh5c19hZGRyKCkge1xuJiM0MztcdGF3ayAtdiBwYWdlc2l6ZT1cJiMzNDskKGdldGNvbmYgUEFHRV9TSVpFKVwmIzM0OyAmIzM5O1xuJiM0MztcdCMgQ29udmVydCBhIGhleCBzdHJpbmcgdG8gYSBudW1iZXIgd2l0aG91dCByZWx5aW5nIG9uIHRoZSBnYXdrLW9ubHlcbiYjNDM7XHQjIHN0cnRvbnVtKCkuICBtYXdrIGxhY2tzIGl0IGFuZCB3b3VsZCBvdGhlcndpc2Ugc3B1cmlvdXNseSBza2lwXG4mIzQzO1x0IyB0aGlzIHRlc3Qgb24gZGlzdHJvcyB0aGF0IHNoaXAgbWF3ayBhcyAvdXNyL2Jpbi9hd2suXG4mIzQzO1x0ZnVuY3Rpb24gaGV4Mm51bShzLCAgIG4sIGksIGMsIHYpIHtcbiYjNDM7XHRcdG4gPSAwXG4mIzQzO1x0XHRmb3IgKGkgPSAxOyBpIFx1MDAzYz0gbGVuZ3RoKHMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRjID0gdG9sb3dlcihzdWJzdHIocywgaSwgMSkpXG4mIzQzO1x0XHRcdHYgPSBpbmRleChcJiMzNDswMTIzNDU2Nzg5YWJjZGVmXCYjMzQ7LCBjKSAtIDFcbiYjNDM7XHRcdFx0aWYgKHYgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0cmV0dXJuIC0xXG4mIzQzO1x0XHRcdG4gPSBuICogMTYgJiM0MzsgdlxuJiM0MztcdFx0fVxuJiM0MztcdFx0cmV0dXJuIG5cbiYjNDM7XHR9XG4mIzQzO1x0LzogS2VybmVsIHJvZGF0YVtbOnNwYWNlOl1dKiQvIHtcbiYjNDM7XHRcdHN1YigvXltbOnNwYWNlOl1dJiM0MzsvLCBcJiMzNDtcJiMzNDspXG4mIzQzO1x0XHRuID0gc3BsaXQoJDAsIGEsIC9bLSBdLylcbiYjNDM7XHRcdHN0YXJ0ID0gaGV4Mm51bShhWzFdKVxuJiM0MztcdFx0ZW5kICAgPSBoZXgybnVtKGFbMl0pXG4mIzQzO1x0XHRpZiAoZW5kIFx1MDAzYz0gc3RhcnQpXG4mIzQzO1x0XHRcdG5leHRcbiYjNDM7XHRcdCMgUGFnZS1hbGlnbiB1cHdhcmQgYW5kIGVtaXQgdGhlIGZpcnN0IGJ5dGUgb2YgdGhhdCBwYWdlLlxuJiM0MztcdFx0cGZuID0gaW50KChzdGFydCAmIzQzOyBwYWdlc2l6ZSAtIDEpIC8gcGFnZXNpemUpXG4mIzQzO1x0XHRwcmludGYgXCYjMzQ7MHgleFxcblwmIzM0OywgcGZuICogcGFnZXNpemVcbiYjNDM7XHRcdGV4aXQgMFxuJiM0MztcdH1cbiYjNDM7XHQmIzM5OyAvcHJvYy9pb21lbVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjIFdhbGsgL3Byb2Mva3BhZ2VmbGFncyBhbmQgcmV0dXJuIHRoZSBwaHlzIGFkZHIgb2YgdGhlIGZpcnN0IFBGTiB0aGF0XG4mIzQzOyMgaGFzIGJpdCAkMSBzZXQsIHdpdGggS1BGX0hXUE9JU09OLCBLUEZfTk9QQUdFIGFuZCBLUEZfQ09NUE9VTkRfVEFJTFxuJiM0MzsjIGFsbCBjbGVhciAoc28gd2UgYXR0YWNrIGEgcmVhbCwgbm9uLXRhaWwsIG5vdC1hbHJlYWR5LXBvaXNvbmVkIHBhZ2UpLlxuJiM0MzsjXG4mIzQzOyMgV2Ugc2tpcCB0aGUgZmlyc3QgMTYgTWlCIG9mIFBGTnMgdG8gc3RlcCBwYXN0IGxvdy1tZW1vcnkgc3BlY2lhbFxuJiM0MzsjIHJhbmdlcyAoQklPUy9FRkkvQUNQSS9ldGMuKSB0aGF0IG9mdGVuIGFyZSBQR19yZXNlcnZlZCBhbmQgd291bGQgbm90XG4mIzQzOyMgZXhoaWJpdCB0aGUgc2xhYi9wZ3RhYmxlIHR5cGUgd2UgYXJlIGxvb2tpbmcgZm9yLlxuJiM0MztwaWNrX2twYWdlZmxhZ3NfcGh5c19hZGRyKCkge1xuJiM0MztcdGxvY2FsIHdhbnRfYml0PSQxXG4mIzQzO1x0bG9jYWwgcGFnZXNpemUgc2tpcF9wZm5cbiYjNDM7XG4mIzQzO1x0WyAtciBcJiMzNDska3BhZ2VmbGFnc19wYXRoXCYjMzQ7IF0gfHwgcmV0dXJuXG4mIzQzO1xuJiM0MztcdHBhZ2VzaXplPSQoZ2V0Y29uZiBQQUdFX1NJWkUpXG4mIzQzO1x0c2tpcF9wZm49JCgoKDE2ICogMTAyNCAqIDEwMjQpIC8gcGFnZXNpemUpKVxuJiM0MztcbiYjNDM7XHRvZCAtQW4gLXR4OCAtdiAtdzggLWogXCYjMzQ7JCgoc2tpcF9wZm4gKiA4KSlcJiMzNDsgXCYjMzQ7JGtwYWdlZmxhZ3NfcGF0aFwmIzM0OyAyXHUwMDNlL2Rldi9udWxsIHwgXFxcbiYjNDM7XHRhd2sgLXYgd2FudF9iaXQ9XCYjMzQ7JHdhbnRfYml0XCYjMzQ7IFxcXG4mIzQzO1x0ICAgIC12IGh3cF9iaXQ9XCYjMzQ7JEtQRl9IV1BPSVNPTlwmIzM0OyBcXFxuJiM0MztcdCAgICAtdiBub3BhZ2VfYml0PVwmIzM0OyRLUEZfTk9QQUdFXCYjMzQ7IFxcXG4mIzQzO1x0ICAgIC12IHRhaWxfYml0PVwmIzM0OyRLUEZfQ09NUE9VTkRfVEFJTFwmIzM0OyBcXFxuJiM0MztcdCAgICAtdiBiYXNlX3Bmbj1cJiMzNDskc2tpcF9wZm5cJiMzNDsgXFxcbiYjNDM7XHQgICAgLXYgcGFnZXNpemU9XCYjMzQ7JHBhZ2VzaXplXCYjMzQ7ICYjMzk7XG4mIzQzO1x0IyBUZXN0IHdoZXRoZXIgYml0IFwmIzM0O2JcJiMzNDsgaXMgc2V0IGluIHRoZSAxNi1oZXgtZGlnaXQgdmFsdWUgXCYjMzQ7aGV4XCYjMzQ7LlxuJiM0MztcdCMgRG9uZSB3aXRoIHN1YnN0cmluZyAmIzQzOyBwZXItZGlnaXQgbG9va3VwIHNvIHdlIG5ldmVyIHJlbHkgb24gYXdrXG4mIzQzO1x0IyBiaXR3aXNlIG9wZXJhdG9ycyAobWF3ayBsYWNrcyB0aGVtKSwgNjQtYml0IEZQIHByZWNpc2lvbiBvciB0aGVcbiYjNDM7XHQjIGdhd2stb25seSBzdHJ0b251bSgpLlxuJiM0MztcdGZ1bmN0aW9uIGJpdF9zZXQoaGV4LCBiLCAgICBkaSwgYmksIGMsIHYpIHtcbiYjNDM7XHRcdGRpID0gaW50KGIgLyA0KVxuJiM0MztcdFx0YmkgPSBiIC0gZGkgKiA0XG4mIzQzO1x0XHRjID0gc3Vic3RyKGhleCwgbGVuZ3RoKGhleCkgLSBkaSwgMSlcbiYjNDM7XHRcdHYgPSBpbmRleChcJiMzNDswMTIzNDU2Nzg5YWJjZGVmXCYjMzQ7LCB0b2xvd2VyKGMpKSAtIDFcbiYjNDM7XHRcdGlmIChiaSA9PSAwKSByZXR1cm4gKHYgJSAyKSA9PSAxXG4mIzQzO1x0XHRpZiAoYmkgPT0gMSkgcmV0dXJuIGludCh2IC8gMikgJSAyID09IDFcbiYjNDM7XHRcdGlmIChiaSA9PSAyKSByZXR1cm4gaW50KHYgLyA0KSAlIDIgPT0gMVxuJiM0MztcdFx0cmV0dXJuIGludCh2IC8gOCkgJSAyID09IDFcbiYjNDM7XHR9XG4mIzQzO1x0e1xuJiM0MztcdFx0Z3N1YigvXltbOnNwYWNlOl1dJiM0MzsvLCBcJiMzNDtcJiMzNDspXG4mIzQzO1x0XHRoID0gJDFcbiYjNDM7XHRcdGlmIChiaXRfc2V0KGgsIHdhbnRfYml0KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhYml0X3NldChoLCBod3BfYml0KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhYml0X3NldChoLCBub3BhZ2VfYml0KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAhYml0X3NldChoLCB0YWlsX2JpdCkpIHtcbiYjNDM7XHRcdFx0cGZuID0gYmFzZV9wZm4gJiM0MzsgTlIgLSAxXG4mIzQzO1x0XHRcdHByaW50ZiBcJiMzNDsweCV4XFxuXCYjMzQ7LCBwZm4gKiBwYWdlc2l6ZVxuJiM0MztcdFx0XHRleGl0IDBcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0JiMzOTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7IyBSZXR1cm4gMCBpZiAvcHJvYy9rcGFnZWZsYWdzIGJpdCAkMiBpcyBzZXQgZm9yIFBGTiAkMSwgMSBpZiBpdCBpc1xuJiM0MzsjIGNsZWFyLCBvciAyIGlmIHRoZSB3b3JkIGNhbm5vdCBiZSByZWFkLiAgVXNlZCB0byByZS1jb25maXJtIHRoZSB0YXJnZXRcbiYjNDM7IyBwYWdlIHR5cGUgYWZ0ZXIgYSBub24tcGFuaWNraW5nIGluamVjdC5cbiYjNDM7a3BhZ2VmbGFnc19iaXRfc2V0KCkge1xuJiM0MztcdGxvY2FsIHdvcmRcbiYjNDM7XG4mIzQzO1x0d29yZD0kKG9kIC1BbiAtdHg4IC12IC1qIFwmIzM0OyQoKCQxICogOCkpXCYjMzQ7IC1OIDggXCYjMzQ7JGtwYWdlZmxhZ3NfcGF0aFwmIzM0OyAyXHUwMDNlL2Rldi9udWxsIHwgdHIgLWQgJiMzOTtbOnNwYWNlOl0mIzM5OylcbiYjNDM7XHRbIC1uIFwmIzM0OyR3b3JkXCYjMzQ7IF0gfHwgcmV0dXJuIDJcbiYjNDM7XHQoKCAoMTYjJHdvcmQgXHUwMDNlXHUwMDNlICQyKSBcdTAwMjYgMSApKVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjIEJlc3QtZWZmb3J0OiBkcm9wIHRoZSBQR19od3BvaXNvbiBtYXJrZXIgc2V0IGJ5IHRoZSBpbmplY3Qgc28gYSBmYWlsZWRcbiYjNDM7IyBydW4gZG9lcyBub3QgbGVhdmUgYSBwb2lzb25lZCBwYWdlIGJlaGluZC4gIGhhcmRfb2ZmbGluZV9wYWdlKCkgaW5qZWN0c1xuJiM0MzsjIHdpdGggTUZfU1dfU0lNVUxBVEVELCBzbyB0aGUgcGFnZSBzdGF5cyB1bnBvaXNvbmFibGUgdGhyb3VnaCB0aGVcbiYjNDM7IyBod3BvaXNvbiBkZWJ1Z2ZzIGludGVyZmFjZSAobmVlZHMgQ09ORklHX0hXUE9JU09OX0lOSkVDVCAmIzQzOyBkZWJ1Z2ZzKS5cbiYjNDM7dHJ5X3VucG9pc29uKCkge1xuJiM0MztcdFsgLXcgXCYjMzQ7JHVucG9pc29uX3BhdGhcJiMzNDsgXSB8fCByZXR1cm4gMFxuJiM0MztcdGVjaG8gXCYjMzQ7JDFcJiMzNDsgXHUwMDNlIFwmIzM0OyR1bnBvaXNvbl9wYXRoXCYjMzQ7IDJcdTAwM2UvZGV2L251bGwgfHwgdHJ1ZVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztjYXNlIFwmIzM0OyRraW5kXCYjMzQ7IGluXG4mIzQzO3JvZGF0YSlcbiYjNDM7XHRwaHlzX2FkZHI9JChwaWNrX3JvZGF0YV9waHlzX2FkZHIpXG4mIzQzO1x0cmVjaGVja19iaXQ9JEtQRl9SRVNFUlZFRFxuJiM0MztcdG1pc3NpbmdfbXNnPSYjMzk7bm8gXCYjMzQ7S2VybmVsIHJvZGF0YVwmIzM0OyBlbnRyeSBpbiAvcHJvYy9pb21lbSYjMzk7XG4mIzQzO1x0OztcbiYjNDM7c2xhYilcbiYjNDM7XHRwaHlzX2FkZHI9JChwaWNrX2twYWdlZmxhZ3NfcGh5c19hZGRyIFwmIzM0OyRLUEZfU0xBQlwmIzM0OylcbiYjNDM7XHRyZWNoZWNrX2JpdD0kS1BGX1NMQUJcbiYjNDM7XHRtaXNzaW5nX21zZz1cJiMzNDtubyB1c2FibGUgc2xhYiBQRk4gZm91bmQgaW4gJGtwYWdlZmxhZ3NfcGF0aFwmIzM0O1xuJiM0MztcdDs7XG4mIzQzO3BndGFibGUpXG4mIzQzO1x0cGh5c19hZGRyPSQocGlja19rcGFnZWZsYWdzX3BoeXNfYWRkciBcJiMzNDskS1BGX1BHVEFCTEVcJiMzNDspXG4mIzQzO1x0cmVjaGVja19iaXQ9JEtQRl9QR1RBQkxFXG4mIzQzO1x0bWlzc2luZ19tc2c9XCYjMzQ7bm8gdXNhYmxlIHBhZ2UtdGFibGUgUEZOIGZvdW5kIGluICRrcGFnZWZsYWdzX3BhdGhcJiMzNDtcbiYjNDM7XHQ7O1xuJiM0MzsqKVxuJiM0MztcdGt0YXBfZXhpdF9mYWlsX21zZyBcJiMzNDt1bmtub3duIGtpbmQgJiMzOTska2luZCYjMzk7IChleHBlY3RlZDogcm9kYXRhfHNsYWJ8cGd0YWJsZSlcJiMzNDtcbiYjNDM7XHQ7O1xuJiM0Mztlc2FjXG4mIzQzO1xuJiM0MztpZiBbIC16IFwmIzM0OyRwaHlzX2FkZHJcJiMzNDsgXTsgdGhlblxuJiM0MztcdGt0YXBfc2tpcF9hbGwgXCYjMzQ7JG1pc3NpbmdfbXNnXCYjMzQ7XG4mIzQzO1x0ZXhpdCBcJiMzNDskS1NGVF9TS0lQXCYjMzQ7XG4mIzQzO2ZpXG4mIzQzO1xuJiM0MztrdGFwX3ByaW50X21zZyBcJiMzNDtlbmFibGluZyAkc3lzY3RsX3BhdGhcJiMzNDtcbiYjNDM7cHJpb3I9JChjYXQgXCYjMzQ7JHN5c2N0bF9wYXRoXCYjMzQ7KVxuJiM0MztlY2hvIDEgXHUwMDNlIFwmIzM0OyRzeXNjdGxfcGF0aFwmIzM0OyB8fCBrdGFwX2V4aXRfZmFpbF9tc2cgXCYjMzQ7ZmFpbGVkIHRvIGVuYWJsZSBzeXNjdGxcJiMzNDtcbiYjNDM7XG4mIzQzO3Bmbj0kKChwaHlzX2FkZHIgLyBwYWdlc2l6ZSkpXG4mIzQzO2t0YXBfcHJpbnRfbXNnIFwmIzM0O2luamVjdGluZyBod3BvaXNvbiBhdCBwaHlzIDB4JChwcmludGYgJiMzOTsleCYjMzk7IFwmIzM0OyRwaHlzX2FkZHJcJiMzNDspIChwZm4gMHgkKHByaW50ZiAmIzM5OyV4JiMzOTsgXCYjMzQ7JHBmblwmIzM0OyksIGtpbmQ9JGtpbmQpXCYjMzQ7XG4mIzQzO2t0YXBfcHJpbnRfbXNnIFwmIzM0O2V4cGVjdGluZyBrZXJuZWwgcGFuaWM6ICYjMzk7TWVtb3J5IGZhaWx1cmU6IFx1MDAzY3Bmblx1MDAzZTogdW5yZWNvdmVyYWJsZSBwYWdlJiMzOTtcJiMzNDtcbiYjNDM7XG4mIzQzOyMgQSBzdWNjZXNzZnVsIHJ1biBuZXZlciByZXR1cm5zIGZyb20gdGhlIGluamVjdCAtLSBpdCBwYW5pY3MgdGhlIGtlcm5lbC5cbiYjNDM7IyBSZWFjaGluZyB0aGUgY29kZSBiZWxvdyB0aGVyZWZvcmUgbWVhbnMgbm8gcGFuaWMgZmlyZWQuICBOb3RlIHdoZXRoZXJcbiYjNDM7IyB0aGUgd3JpdGUgaXRzZWxmIHN1Y2NlZWRlZCwgdGhlbiBwdXQgdGhlIG1hY2hpbmUgYmFjazogcmVzdG9yZSB0aGVcbiYjNDM7IyBzeXNjdGwgYW5kIGJlc3QtZWZmb3J0IHVucG9pc29uIHRoZSBwYWdlIHdlIGp1c3QgbWFya2VkLlxuJiM0MztpZiBlY2hvIFwmIzM0OyRwaHlzX2FkZHJcJiMzNDsgXHUwMDNlIFwmIzM0OyRpbmplY3RfcGF0aFwmIzM0OzsgdGhlblxuJiM0MztcdHZlcmRpY3Q9XCYjMzQ7aW5qZWN0IHJldHVybmVkIHdpdGhvdXQgcGFuaWM7IHN5c2N0bCBpbmVmZmVjdGl2ZVwmIzM0O1xuJiM0MztlbHNlXG4mIzQzO1x0dmVyZGljdD1cJiMzNDtpbmplY3QgZmFpbGVkIGJlZm9yZSByZWFjaGluZyB0aGUgcGFuaWMgcGF0aFwmIzM0O1xuJiM0MztmaVxuJiM0MztcbiYjNDM7ZWNobyBcJiMzNDskcHJpb3JcJiMzNDsgXHUwMDNlIFwmIzM0OyRzeXNjdGxfcGF0aFwmIzM0O1xuJiM0Mzt0cnlfdW5wb2lzb24gXCYjMzQ7JHBmblwmIzM0O1xuJiM0MztcbiYjNDM7IyBUaGUgcGFnZSB0eXBlIGNhbiBjaGFuZ2UgYmV0d2VlbiBzZWxlY3Rpb24gYW5kIGluamVjdGlvbiAoZS5nLiBhIHNsYWJcbiYjNDM7IyBvciBwYWdlLXRhYmxlIHBhZ2UgaXMgZnJlZWQgYW5kIHJldXNlZCkuICBPbmx5IHRyZWF0IGEgbWlzc2luZyBwYW5pYyBhc1xuJiM0MzsjIGEgZmFpbHVyZSBpZiB0aGUgdGFyZ2V0IFBGTiBpcyBzdGlsbCB0aGUga2VybmVsLW93bmVkIHR5cGUgd2UgYWltZWQgYXQ7XG4mIzQzOyMgaWYgaXQgcmFjZWQgdG8gYW5vdGhlciB0eXBlIHRoZSBydW4gaXMgaW5jb25jbHVzaXZlLCBzbyBza2lwIGluc3RlYWQuXG4mIzQzO2twYWdlZmxhZ3NfYml0X3NldCBcJiMzNDskcGZuXCYjMzQ7IFwmIzM0OyRyZWNoZWNrX2JpdFwmIzM0O1xuJiM0MztjYXNlICQ/IGluXG4mIzQzOzApXHRrdGFwX2V4aXRfZmFpbF9tc2cgXCYjMzQ7JHZlcmRpY3QgKHBhZ2Ugc3RpbGwgJGtpbmQpXCYjMzQ7IDs7XG4mIzQzOzEpXHRrdGFwX3NraXBfYWxsIFwmIzM0O3RhcmdldCBQRk4gbm8gbG9uZ2VyICRraW5kOyByYWNlZCBiZWZvcmUgaW5qZWN0LCBpbmNvbmNsdXNpdmVcJiMzNDtcbiYjNDM7XHRleGl0IFwmIzM0OyRLU0ZUX1NLSVBcJiMzNDsgOztcbiYjNDM7KilcdGt0YXBfZXhpdF9mYWlsX21zZyBcJiMzNDskdmVyZGljdCAoY291bGQgbm90IHJlY29uZmlybSBwYWdlIHR5cGUgdmlhICRrcGFnZWZsYWdzX3BhdGgpXCYjMzQ7IDs7XG4mIzQzO2VzYWNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxODo1NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dldF9hbnlfcGFnZSYjMzQ7LAogICAgJiMzNDtwYW5pY19vbl91bnJlY292ZXJhYmxlX21mJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGVyIGluIGNvcmUgTU0gdG8gc2hvcnQtY2lyY3VpdCByZWNvdmVyeSBmb3Iga2VybmVsLW93bmVkIHBhZ2VzIGFuZCBvcHRpb25hbGx5IHBhbmljLiBUaGlzIGVycm9yLWhhbmRsaW5nIHBhdGggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbWFkdmlzZShNQURWX0hXUE9JU09OKSBvbiBrZXJuZWwtb3duZWQgcGFnZXMgbWFwcGVkIGluIHVzZXIgc3BhY2UgKGxpa2UgdGhlIHZEU08pIG9yIHZpYSBzeXNmcyBlcnJvciBpbmplY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNkNjY0OWE1ZDRmN2NkNDlhZTg1NTZlMmQ1MzQzNmM2YjZjYWJhMDYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1biAzMCAxODo1NDowNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdAppbmRleCBiOWIwYzIxOGJmYjQ0MC4uMjJjYzU0Y2FjM2IyMWQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3QKQEAgLTY3LDYgJiM0Mzs2Nyw3IEBAIEN1cnJlbnRseSwgdGhlc2UgZmlsZXMgYXJlIGluIC9wcm9jL3N5cy92bToKIC0gcGFnZS1jbHVzdGVyCiAtIHBhZ2VfbG9ja191bmZhaXJuZXNzCiAtIHBhbmljX29uX29vbQomIzQzOy0gcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZQogLSBwZXJjcHVfcGFnZWxpc3RfaGlnaF9mcmFjdGlvbgogLSBzdGF0X2ludGVydmFsCiAtIHN0YXRfcmVmcmVzaApAQCAtOTI1LDYgJiM0Mzs5MjYsODUgQEAgcGFuaWNfb25fb29tPTImIzQzO2tkdW1wIGdpdmVzIHlvdSB2ZXJ5IHN0cm9uZyB0b29sIHRvIGludmVzdGlnYXRlCiB3aHkgb29tIGhhcHBlbnMuIFlvdSBjYW4gZ2V0IHNuYXBzaG90LgogCiAKJiM0MztwYW5pY19vbl91bnJlY292ZXJhYmxlX21lbW9yeV9mYWlsdXJlCiYjNDM7PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsKJiM0MztXaGVuIGEgaGFyZHdhcmUgbWVtb3J5IGVycm9yIChlLmcuIG11bHRpLWJpdCBFQ0MpIGhpdHMgYSBrZXJuZWwgcGFnZQomIzQzO3RoYXQgY2Fubm90IGJlIHJlY292ZXJlZCBieSB0aGUgbWVtb3J5IGZhaWx1cmUgaGFuZGxlciwgdGhlIGRlZmF1bHQKJiM0MztiZWhhdmlvdXIgaXMgdG8gaWdub3JlIHRoZSBlcnJvciBhbmQgY29udGludWUgb3BlcmF0aW9uLiAgVGhpcyBpcwomIzQzO2Rhbmdlcm91cyBiZWNhdXNlIHRoZSBjb3JydXB0ZWQgZGF0YSByZW1haW5zIGFjY2Vzc2libGUgdG8gdGhlIGtlcm5lbCwKJiM0MztyaXNraW5nIHNpbGVudCBkYXRhIGNvcnJ1cHRpb24gb3IgYSBkZWxheWVkIGNyYXNoIHdoZW4gdGhlIHBvaXNvbmVkCiYjNDM7bWVtb3J5IGlzIG5leHQgYWNjZXNzZWQuCiYjNDM7CiYjNDM7V2hlbiBlbmFibGVkLCB0aGlzIHN5c2N0bCB0cmlnZ2VycyBhIHBhbmljIG9uIG1lbW9yeSBmYWlsdXJlIGV2ZW50cwomIzQzO2hpdHRpbmcga2VybmVsLW93bmVkIHBhZ2VzIHRoYXQgdGhlIGhhbmRsZXIgY2Fubm90IHJlY292ZXI6CiYjNDM7YGBQYWdlUmVzZXJ2ZWRgYCAoZmlybXdhcmUgcmVzZXJ2YXRpb25zLCBrZXJuZWwgaW1hZ2UsIHZEU08sIHplcm8KJiM0MztwYWdlLCBhbmQgc2ltaWxhciBtZW1ibG9jay1yZXNlcnZlZCByZWdpb25zKSwgYGBQYWdlU2xhYmBgLAomIzQzO2BgUGFnZVRhYmxlYGAsIGFuZCBgYFBhZ2VMYXJnZUttYWxsb2NgYC4gIFRoZXNlIGFyZSBvd25lZCBieSB0aGUKJiM0MztrZXJuZWwgYW5kIHRoZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGVyIGNhbm5vdCByZWxpYWJseSBldmljdCB0aGVpcgomIzQzO2NvbnRlbnRzLgomIzQzOwomIzQzO090aGVyIHVucmVjb3ZlcmFibGUga2VybmVsLW93bmVkIHBvcHVsYXRpb25zICh2bWFsbG9jIGFsbG9jYXRpb25zLAomIzQzO2tlcm5lbCBzdGFjayBwYWdlcywgLi4uKSBhcmUgbm90IGN1cnJlbnRseSBjb3ZlcmVkIGJlY2F1c2UgdGhlCiYjNDM7aGFuZGxlciBoYXMgbm8gcGFnZS10eXBlIHNpZ25hbCB0aGF0IGRpc3Rpbmd1aXNoZXMgdGhlbSBmcm9tIGEKJiM0Mzt1c2Vyc3BhY2UgZm9saW8gdGVtcG9yYXJpbHkgb2ZmIHRoZSBMUlUgZHVyaW5nIG1pZ3JhdGlvbiBvcgomIzQzO2NvbXBhY3Rpb24uICBTdWNoIHBhZ2VzIHN0aWxsIGdvIHRocm91Z2ggdGhlIHN0YW5kYXJkCiYjNDM7TUZfTVNHX0dFVF9IV1BPSVNPTiBwYXRoOiBgYFBHX2h3cG9pc29uYGAgaXMgc2V0IG9uIHRoZW0gYW5kIGEKJiM0MztkZWxheWVkIGNyYXNoIG9uIHRoZSBuZXh0IGFjY2VzcyByZW1haW5zIHBvc3NpYmxlLiAgQ292ZXJhZ2UgbWF5CiYjNDM7Z3JvdyBhcyB0aGUgaGFuZGxlciBnYWlucyBzdHJvbmdlciBrZXJuZWwtb3duZXJzaGlwIHNpZ25hbHMuCiYjNDM7CiYjNDM7UmVjb3ZlcmFibGUgZmFpbHVyZSBwYXRocyBhcmUgYWxzbyBpbnRlbnRpb25hbGx5IGxlZnQgb3V0OiBpbi1mbGlnaHQKJiM0MztidWRkeSBhbGxvY2F0aW9ucyBhbmQgb3RoZXIgdHJhbnNpZW50IHJhY2VzIHdpdGggdGhlIHBhZ2UgYWxsb2NhdG9yCiYjNDM7Y2FuIHJlYWNoIHRoZSBzYW1lIGRpYWdub3N0aWMsIGFuZCBwYW5pY2tpbmcgb24gdGhlbSB3b3VsZCByaXNrCiYjNDM7a2lsbGluZyB0aGUgYm94IGZvciBhIHBhZ2UgZGVzdGluZWQgZm9yIHVzZXJzcGFjZSB3aGVyZSB0aGUgc3RhbmRhcmQKJiM0MztTSUdCVVMgcmVjb3ZlcnkgcGF0aCBhcHBsaWVzLiAgUGFnZXMgd2hvc2Ugc3RhdGUgY291bGQgbm90IGJlCiYjNDM7Y2xhc3NpZmllZCBhdCBhbGwgYXJlIG5vdCBjb3ZlcmVkIGVpdGhlciwgc2luY2UgYW4gdW5rbm93biBzdGF0ZSBpcwomIzQzO25vdCBhIHNvdW5kIGJhc2lzIGZvciBhIHBhbmljIGRlY2lzaW9uLgomIzQzOwomIzQzO0ZvciBtYW55IGVudmlyb25tZW50cyBpdCBpcyBwcmVmZXJhYmxlIHRvIHBhbmljIGltbWVkaWF0ZWx5IHdpdGggYSBjbGVhbgomIzQzO2NyYXNoIGR1bXAgdGhhdCBjYXB0dXJlcyB0aGUgb3JpZ2luYWwgZXJyb3IgY29udGV4dCwgcmF0aGVyIHRoYW4gdG8KJiM0Mztjb250aW51ZSBhbmQgZmFjZSBhIHJhbmRvbSBjcmFzaCBsYXRlciB3aG9zZSBjYXVzZSBpcyBkaWZmaWN1bHQgdG8KJiM0MztkaWFnbm9zZS4KJiM0MzsKJiM0MztVc2UgY2FzZXMKJiM0MzstLS0tLS0tLS0KJiM0MzsKJiM0MztUaGlzIG9wdGlvbiBpcyBtb3N0IHVzZWZ1bCBpbiBlbnZpcm9ubWVudHMgd2hlcmUgdW5hdHRyaWJ1dGVkIGNyYXNoZXMKJiM0MzthcmUgZXhwZW5zaXZlIHRvIGRlYnVnIG9yIHdoZXJlIGRhdGEgaW50ZWdyaXR5IG11c3QgdGFrZSBwcmVjZWRlbmNlCiYjNDM7b3ZlciBhdmFpbGFiaWxpdHk6CiYjNDM7CiYjNDM7KiBMYXJnZSBmbGVldHMsIHdoZXJlIG11bHRpLWJpdCBFQ0MgZXJyb3JzIG9uIGtlcm5lbCBwYWdlcyBhcmUgb2JzZXJ2ZWQKJiM0MzsgIHJlZ3VsYXJseSBhbmQgcG9zdC1tb3J0ZW0gYW5hbHlzaXMgb2YgYW4gdW5yZWxhdGVkIGRvd25zdHJlYW0gY3Jhc2gKJiM0MzsgIChvZnRlbiBzZWNvbmRzIHRvIG1pbnV0ZXMgYWZ0ZXIgdGhlIG9yaWdpbmFsIGVycm9yKSBjb25zdW1lcwomIzQzOyAgc2lnbmlmaWNhbnQgZW5naW5lZXJpbmcgZWZmb3J0LgomIzQzOwomIzQzOyogU3lzdGVtcyBjb25maWd1cmVkIHdpdGgga2R1bXAsIHdoZXJlIHBhbmlja2luZyBhdCB0aGUgbW9tZW50IG9mIHRoZQomIzQzOyAgaGFyZHdhcmUgZXJyb3IgcHJvZHVjZXMgYSB2bWNvcmUgdGhhdCBzdGlsbCBjb250YWlucyB0aGUgZmF1bHRpbmcKJiM0MzsgIGFkZHJlc3MsIHRoZSBhZmZlY3RlZCBwYWdlIHN0YXRlLCBhbmQgdGhlIG9yaWdpbmF0aW5nIE1DRS9HSEVTCiYjNDM7ICByZWNvcmQg4oCUIGNvbnRleHQgdGhhdCBpcyB0eXBpY2FsbHkgbG9zdCBieSB0aGUgdGltZSBhIGRlbGF5ZWQgY3Jhc2gKJiM0MzsgIG9jY3Vycy4KJiM0MzsKJiM0MzsqIEhpZ2gtYXZhaWxhYmlsaXR5IGNsdXN0ZXJzIHRoYXQgcmVseSBvbiBmYXN0LCBkZXRlcm1pbmlzdGljIG5vZGUKJiM0MzsgIGZhaWx1cmUgZm9yIGZhaWxvdmVyLCBhbmQgcHJlZmVyIGFuIGltbWVkaWF0ZSBwYW5pYyBvdmVyIHNpbGVudCBkYXRhCiYjNDM7ICBjb3JydXB0aW9uIHByb3BhZ2F0aW5nIHRvIHJlcGxpY2FzIG9yIHBlcnNpc3RlbnQgc3RvcmFnZS4KJiM0MzsKJiM0MzsqIEtlcm5lbCBhbmQgcGxhdGZvcm0gZGV2ZWxvcGVycyByZXByb2R1Y2luZyBod3BvaXNvbiBpc3N1ZXMgd2l0aAomIzQzOyAgdG9vbHMgc3VjaCBhcyBgYG1jZS1pbmplY3RgYCBvciBlcnJvci1pbmplY3Rpb24gZGVidWdmcyBpbnRlcmZhY2VzLAomIzQzOyAgd2hlcmUgcGFuaWNraW5nIG9uIHRoZSB1bnJlY292ZXJhYmxlIHBhdGggbWFrZXMgcmVncmVzc2lvbnMKJiM0MzsgIGltbWVkaWF0ZWx5IHZpc2libGUgaW5zdGVhZCBvZiBzdXJmYWNpbmcgYXMgbGF0ZXIsIHVucmVsYXRlZAomIzQzOyAgZmFpbHVyZXMuCiYjNDM7CiYjNDM7PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzswIFRyeSB0byBjb250aW51ZSBvcGVyYXRpb24gKGRlZmF1bHQpLgomIzQzOzEgUGFuaWMgaW1tZWRpYXRlbHkuICBJZiB0aGUgYGBwYW5pY2BgIHN5c2N0bCBpcyBhbHNvIG5vbi16ZXJvIHRoZW4gdGhlCiYjNDM7ICBtYWNoaW5lIHdpbGwgYmUgcmVib290ZWQuCiYjNDM7PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsKJiM0MztFeGFtcGxlOjoKJiM0MzsKJiM0MzsgICAgIGVjaG8gMSAmZ3Q7IC9wcm9jL3N5cy92bS9wYW5pY19vbl91bnJlY292ZXJhYmxlX21lbW9yeV9mYWlsdXJlCiYjNDM7CiYjNDM7CiBwZXJjcHVfcGFnZWxpc3RfaGlnaF9mcmFjdGlvbgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmMKaW5kZXggNTE1MDhhNTVjNDA1NWUuLmUwOTdmYzgyNjJjZjgzIDEwMDY0NAotLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS1mYWlsdXJlLmMKQEAgLTc0LDYgJiM0Mzs3NCw4IEBAIHN0YXRpYyBpbnQgc3lzY3RsX21lbW9yeV9mYWlsdXJlX3JlY292ZXJ5IF9fcmVhZF9tb3N0bHkgPSAxOwogCiBzdGF0aWMgaW50IHN5c2N0bF9lbmFibGVfc29mdF9vZmZsaW5lIF9fcmVhZF9tb3N0bHkgPSAxOwogCiYjNDM7c3RhdGljIGludCBzeXNjdGxfcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZiBfX3JlYWRfbW9zdGx5OwomIzQzOwogYXRvbWljX2xvbmdfdCBudW1fcG9pc29uZWRfcGFnZXMgX19yZWFkX21vc3RseSA9IEFUT01JQ19MT05HX0lOSVQoMCk7CiAKIHN0YXRpYyBib29sIGh3X21lbW9yeV9mYWlsdXJlIF9fcmVhZF9tb3N0bHkgPSBmYWxzZTsKQEAgLTE1NSw2ICYjNDM7MTU3LDE1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIG1lbW9yeV9mYWlsdXJlX3RhYmxlW10gPSB7CiAJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjX21pbm1heCwKIAkJLmV4dHJhMQkJPSBTWVNDVExfWkVSTywKIAkJLmV4dHJhMgkJPSBTWVNDVExfT05FLAomIzQzOwl9LAomIzQzOwl7CiYjNDM7CQkucHJvY25hbWUJPSAmIzM0O3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmUmIzM0OywKJiM0MzsJCS5kYXRhCQk9ICZhbXA7c3lzY3RsX3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWYsCiYjNDM7CQkubWF4bGVuCQk9IHNpemVvZihzeXNjdGxfcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZiksCiYjNDM7CQkubW9kZQkJPSAwNjQ0LAomIzQzOwkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWNfbWlubWF4LAomIzQzOwkJLmV4dHJhMQkJPSBTWVNDVExfWkVSTywKJiM0MzsJCS5leHRyYTIJCT0gU1lTQ1RMX09ORSwKIAl9CiB9OwogCkBAIC05ODAsMTcgJiM0Mzs5OTEsNiBAQCBzdGF0aWMgYm9vbCBoYXNfZXh0cmFfcmVmY291bnQoc3RydWN0IHBhZ2Vfc3RhdGUgKnBzLCBzdHJ1Y3QgcGFnZSAqcCwKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLS8qCi0gKiBFcnJvciBoaXQga2VybmVsIHBhZ2UuCi0gKiBEbyBub3RoaW5nLCB0cnkgdG8gYmUgbHVja3kgYW5kIG5vdCB0b3VjaCB0aGlzIGluc3RlYWQuIEZvciBhIGZldyBjYXNlcyB3ZQotICogY291bGQgYmUgbW9yZSBzb3BoaXN0aWNhdGVkLgotICovCi1zdGF0aWMgaW50IG1lX2tlcm5lbChzdHJ1Y3QgcGFnZV9zdGF0ZSAqcHMsIHN0cnVjdCBwYWdlICpwKQotewotCXVubG9ja19wYWdlKHApOwotCXJldHVybiBNRl9JR05PUkVEOwotfQotCiAvKgogICogUGFnZSBpbiB1bmtub3duIHN0YXRlLiBEbyBub3RoaW5nLgogICogVGhpcyBpcyBhIGNhdGNoLWFsbCBpbiBjYXNlIHdlIGZhaWwgdG8gbWFrZSBzZW5zZSBvZiB0aGUgcGFnZSBzdGF0ZS4KQEAgLTExOTksMTAgJiM0MzsxMTk5LDggQEAgc3RhdGljIGludCBtZV9odWdlX3BhZ2Uoc3RydWN0IHBhZ2Vfc3RhdGUgKnBzLCBzdHJ1Y3QgcGFnZSAqcCkKICNkZWZpbmUgbWxvY2sJCSgxVUwgJmx0OyZsdDsgUEdfbWxvY2tlZCkKICNkZWZpbmUgbHJ1CQkoMVVMICZsdDsmbHQ7IFBHX2xydSkKICNkZWZpbmUgaGVhZAkJKDFVTCAmbHQ7Jmx0OyBQR19oZWFkKQotI2RlZmluZSByZXNlcnZlZAkoMVVMICZsdDsmbHQ7IFBHX3Jlc2VydmVkKQogCiBzdGF0aWMgc3RydWN0IHBhZ2Vfc3RhdGUgZXJyb3Jfc3RhdGVzW10gPSB7Ci0JeyByZXNlcnZlZCwJcmVzZXJ2ZWQsCU1GX01TR19LRVJORUwsCW1lX2tlcm5lbCB9LAogCS8qCiAJICogZnJlZSBwYWdlcyBhcmUgc3BlY2lhbGx5IGRldGVjdGVkIG91dHNpZGUgdGhpcyB0YWJsZToKIAkgKiBQR19idWRkeSBwYWdlcyBvbmx5IG1ha2UgYSBzbWFsbCBmcmFjdGlvbiBvZiBhbGwgZnJlZSBwYWdlcy4KQEAgLTEyMzQsNyAmIzQzOzEyMzIsNiBAQCBzdGF0aWMgc3RydWN0IHBhZ2Vfc3RhdGUgZXJyb3Jfc3RhdGVzW10gPSB7CiAjdW5kZWYgbWxvY2sKICN1bmRlZiBscnUKICN1bmRlZiBoZWFkCi0jdW5kZWYgcmVzZXJ2ZWQKIAogc3RhdGljIHZvaWQgdXBkYXRlX3Blcl9ub2RlX21mX3N0YXRzKHVuc2lnbmVkIGxvbmcgcGZuLAogCQkJCSAgICAgZW51bSBtZl9yZXN1bHQgcmVzdWx0KQpAQCAtMTI2OSw2ICYjNDM7MTI2NiwxNSBAQCBzdGF0aWMgdm9pZCB1cGRhdGVfcGVyX25vZGVfbWZfc3RhdHModW5zaWduZWQgbG9uZyBwZm4sCiAJJiM0MzsmIzQzO21mX3N0YXRzLSZndDt0b3RhbDsKIH0KIAomIzQzO3N0YXRpYyBib29sIHBhbmljX29uX3VucmVjb3ZlcmFibGVfbWYoZW51bSBtZl9hY3Rpb25fcGFnZV90eXBlIHR5cGUsCiYjNDM7CQkJCSAgICAgIGVudW0gbWZfcmVzdWx0IHJlc3VsdCkKJiM0Mzt7CiYjNDM7CWlmICghc3lzY3RsX3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWYpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJldHVybiB0eXBlID09IE1GX01TR19LRVJORUwgJmFtcDsmYW1wOyByZXN1bHQgPT0gTUZfSUdOT1JFRDsKJiM0Mzt9CiYjNDM7CiAvKgogICogJiMzNDtEaXJ0eS9DbGVhbiYjMzQ7IGluZGljYXRpb24gaXMgbm90IDEwMCUgYWNjdXJhdGUgZHVlIHRvIHRoZSBwb3NzaWJpbGl0eSBvZgogICogc2V0dGluZyBQR19kaXJ0eSBvdXRzaWRlIHBhZ2UgbG9jay4gU2VlIGFsc28gY29tbWVudCBhYm92ZSBzZXRfcGFnZV9kaXJ0eSgpLgpAQCAtMTI4Niw2ICYjNDM7MTI5Miw5IEBAIHN0YXRpYyBpbnQgYWN0aW9uX3Jlc3VsdCh1bnNpZ25lZCBsb25nIHBmbiwgZW51bSBtZl9hY3Rpb25fcGFnZV90eXBlIHR5cGUsCiAJcHJfZXJyKCYjMzQ7JSNseDogcmVjb3ZlcnkgYWN0aW9uIGZvciAlczogJXNcbiYjMzQ7LAogCQlwZm4sIGFjdGlvbl9wYWdlX3R5cGVzW3R5cGVdLCBhY3Rpb25fbmFtZVtyZXN1bHRdKTsKIAomIzQzOwlpZiAocGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZih0eXBlLCByZXN1bHQpKQomIzQzOwkJcGFuaWMoJiMzNDtNZW1vcnkgZmFpbHVyZTogJSNseDogdW5yZWNvdmVyYWJsZSBwYWdlJiMzNDssIHBmbik7CiYjNDM7CiAJcmV0dXJuIChyZXN1bHQgPT0gTUZfUkVDT1ZFUkVEIHx8IHJlc3VsdCA9PSBNRl9ERUxBWUVEKSA/IDAgOiAtRUJVU1k7CiB9CiAKQEAgLTEzMzksNiAmIzQzOzEzNDgsMzggQEAgc3RhdGljIGlubGluZSBib29sIEhXUG9pc29uSGFuZGxhYmxlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogCXJldHVybiBQYWdlTFJVKHBhZ2UpIHx8IGlzX2ZyZWVfYnVkZHlfcGFnZShwYWdlKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogUG9zaXRpdmUgaWRlbnRpZmljYXRpb24gb2YgcGFnZXMgdGhlIGh3cG9pc29uIGhhbmRsZXIgY2Fubm90IHJlY292ZXI6CiYjNDM7ICogcGFnZXMgb3duZWQgYnkga2VybmVsIGludGVybmFscyB3aXRoIG5vIHVzZXJzcGFjZSBtYXBwaW5nIHRvIHVubWFwLCBubwomIzQzOyAqIGZpbGUgbWFwcGluZyB0byBpbnZhbGlkYXRlLCBhbmQgbm8gbWlncmF0aW9uIHRhcmdldC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaXNfa2VybmVsX293bmVkX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGFnZSAqaGVhZDsKJiM0MzsJYm9vbCBrZXJuZWxfb3duZWQ7CiYjNDM7CiYjNDM7CS8qIFBHX3Jlc2VydmVkIGlzIGEgcGVyLXBhZ2UgZmxhZywgbmV2ZXIgc2V0IG9uIGEgY29tcG91bmQgcGFnZS4gKi8KJiM0MzsJaWYgKFBhZ2VSZXNlcnZlZChwYWdlKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQYWdlLXR5cGUgYml0cyBsaXZlIG9ubHkgb24gdGhlIGhlYWQgcGFnZSwgc28gcmVzb2x2ZSBhbnkgdGFpbAomIzQzOwkgKiBmaXJzdC4gIFRoZSBjaGVjayB0YWtlcyBubyByZWZjb3VudDsgcmVjaGVjayB0aGUgaGVhZCBhZnRlcndhcmRzCiYjNDM7CSAqIHNvIGEgY29uY3VycmVudCBzcGxpdCBvciBjb21wb3VuZCBmcmVlIGNhbm5vdCBsZWF2ZSB1cyB0cnVzdGluZwomIzQzOwkgKiBhIHN0YWxlIHZpZXcuICBBIHJlc2lkdWFsIGZyZWUtJmd0O2FsbG9jLSZndDtmcmVlIGNhbm5vdCBiZSBjbG9zZWQgaGVyZQomIzQzOwkgKiAoZnJvemVuIHNsYWIgYW5kIGxhcmdlLWttYWxsb2MgcGFnZXMgY2Fubm90IGJlIHBpbm5lZCksIGJ1dCBpcwomIzQzOwkgKiBoYXJtbGVzczogd2hlcmUgYSB3cm9uZyB2ZXJkaWN0IGNvdWxkIHBhbmljLCBtZW1vcnlfZmFpbHVyZSgpIGhhcwomIzQzOwkgKiBhbHJlYWR5IHNldCBQYWdlSFdQb2lzb24sIHdoaWNoIGJhcnMgdGhlIHBhZ2UgZnJvbSB0aGUgYWxsb2NhdG9yLgomIzQzOwkgKi8KJiM0MztyZXRyeToKJiM0MzsJaGVhZCA9IGNvbXBvdW5kX2hlYWQocGFnZSk7CiYjNDM7CWtlcm5lbF9vd25lZCA9IFBhZ2VTbGFiKGhlYWQpIHx8IFBhZ2VUYWJsZShoZWFkKSB8fAomIzQzOwkJICAgICAgIFBhZ2VMYXJnZUttYWxsb2MoaGVhZCk7CiYjNDM7CWlmIChoZWFkICE9IGNvbXBvdW5kX2hlYWQocGFnZSkpCiYjNDM7CQlnb3RvIHJldHJ5OwomIzQzOwlyZXR1cm4ga2VybmVsX293bmVkOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgX19nZXRfaHdwb2lzb25fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTsKQEAgLTEzODUsNiAmIzQzOzE0MjYsMTkgQEAgc3RhdGljIGludCBnZXRfYW55X3BhZ2Uoc3RydWN0IHBhZ2UgKnAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiAJaWYgKGZsYWdzICZhbXA7IE1GX0NPVU5UX0lOQ1JFQVNFRCkKIAkJY291bnRfaW5jcmVhc2VkID0gdHJ1ZTsKIAomIzQzOwkvKgomIzQzOwkgKiBQYWdlIHR5cGVzIHdlIGtub3cgYXJlIGtlcm5lbC1vd25lZCBhbmQgY2Fubm90IGJlIHJlY292ZXJlZC4KJiM0MzsJICogU2hvcnQtY2lyY3VpdCBiZWZvcmUgdGhlIHNoYWtlX3BhZ2UoKSAvIHJldHJ5IGxvb3AsIHdoaWNoCiYjNDM7CSAqIGNhbm5vdCB0dXJuIGFueSBvZiB0aGVzZSBpbnRvIHNvbWV0aGluZyBIV1BvaXNvbkhhbmRsYWJsZSgpLgomIzQzOwkgKiBEcm9wIHRoZSBjYWxsZXImIzM5O3MgcmVmZXJlbmNlIGlmIE1GX0NPVU5UX0lOQ1JFQVNFRCB0b29rIG9uZS4KJiM0MzsJICovCiYjNDM7CWlmIChpc19rZXJuZWxfb3duZWRfcGFnZShwKSkgewomIzQzOwkJaWYgKGNvdW50X2luY3JlYXNlZCkKJiM0MzsJCQlwdXRfcGFnZShwKTsKJiM0MzsJCXJldCA9IC1FTk9UUkVDT1ZFUkFCTEU7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwogdHJ5X2FnYWluOgogCWlmICghY291bnRfaW5jcmVhc2VkKSB7CiAJCXJldCA9IF9fZ2V0X2h3cG9pc29uX3BhZ2UocCwgZmxhZ3MpOwpAQCAtMTQzMiw3ICYjNDM7MTQ4Niw3IEBAIHN0YXRpYyBpbnQgZ2V0X2FueV9wYWdlKHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogCQlyZXQgPSAtRUlPOwogCX0KIG91dDoKLQlpZiAocmV0ID09IC1FSU8pCiYjNDM7CWlmIChyZXQgPT0gLUVJTyB8fCByZXQgPT0gLUVOT1RSRUNPVkVSQUJMRSkKIAkJcHJfZXJyKCYjMzQ7JSNseDogdW5oYW5kbGFibGUgcGFnZS5cbiYjMzQ7LCBwYWdlX3RvX3BmbihwKSk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMTQ4OSw3ICYjNDM7MTU0MywxMCBAQCBzdGF0aWMgaW50IF9fZ2V0X3VucG9pc29uX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiAgKiAgICAgICAgIC1FSU8gZm9yIHBhZ2VzIG9uIHdoaWNoIHdlIGNhbiBub3QgaGFuZGxlIG1lbW9yeSBlcnJvcnMsCiAgKiAgICAgICAgIC1FQlVTWSB3aGVuIGdldF9od3BvaXNvbl9wYWdlKCkgaGFzIHJhY2VkIHdpdGggcGFnZSBsaWZlY3ljbGUKICAqICAgICAgICAgb3BlcmF0aW9ucyBsaWtlIGFsbG9jYXRpb24gYW5kIGZyZWUsCi0gKiAgICAgICAgIC1FSFdQT0lTT04gd2hlbiB0aGUgcGFnZSBpcyBod3BvaXNvbmVkIGFuZCB0YWtlbiBvZmYgZnJvbSBidWRkeS4KJiM0MzsgKiAgICAgICAgIC1FSFdQT0lTT04gd2hlbiB0aGUgcGFnZSBpcyBod3BvaXNvbmVkIGFuZCB0YWtlbiBvZmYgZnJvbSBidWRkeSwKJiM0MzsgKiAgICAgICAgIC1FTk9UUkVDT1ZFUkFCTEUgZm9yIGtlcm5lbC1vd25lZCBwYWdlcyBpZGVudGlmaWVkIGJ5CiYjNDM7ICogICAgICAgICBpc19rZXJuZWxfb3duZWRfcGFnZSgpIChQR19yZXNlcnZlZCwgc2xhYiwKJiM0MzsgKiAgICAgICAgIHBhZ2UtdGFibGUsIGxhcmdlLWttYWxsb2MpIHRoYXQgdGhlIGhhbmRsZXIgY2Fubm90IHJlY292ZXIuCiAgKi8KIHN0YXRpYyBpbnQgZ2V0X2h3cG9pc29uX3BhZ2Uoc3RydWN0IHBhZ2UgKnAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CkBAIC0yNDAyLDcgJiM0MzsyNDU5LDggQEAgaW50IG1lbW9yeV9mYWlsdXJlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgZmxhZ3MpCiAJICogdGhhdCBtYXkgbWFrZSBwYWdlX3JlZl9mcmVlemUoKS9wYWdlX3JlZl91bmZyZWV6ZSgpIG1pc21hdGNoLgogCSAqLwogCXJlcyA9IGdldF9od3BvaXNvbl9wYWdlKHAsIGZsYWdzKTsKLQlpZiAoIXJlcykgewomIzQzOwlzd2l0Y2ggKHJlcykgewomIzQzOwljYXNlIDA6CiAJCWlmIChpc19mcmVlX2J1ZGR5X3BhZ2UocCkpIHsKIAkJCWlmICh0YWtlX3BhZ2Vfb2ZmX2J1ZGR5KHApKSB7CiAJCQkJcGFnZV9yZWZfaW5jKHApOwpAQCAtMjQyMSw3ICYjNDM7MjQ3OSwxOSBAQCBpbnQgbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncykKIAkJCXJlcyA9IGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfS0VSTkVMX0hJR0hfT1JERVIsIE1GX0lHTk9SRUQpOwogCQl9CiAJCWdvdG8gdW5sb2NrX211dGV4OwotCX0gZWxzZSBpZiAocmVzICZsdDsgMCkgewomIzQzOwljYXNlIDE6CiYjNDM7CQkvKiBHb3QgYSByZWZjb3VudCBvbiBhIGhhbmRsYWJsZSBwYWdlLiAqLwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgLUVOT1RSRUNPVkVSQUJMRToKJiM0MzsJCS8qCiYjNDM7CQkgKiBTdGFibGUgdW5oYW5kbGFibGUga2VybmVsLW93bmVkIHBhZ2UgKFBHX3Jlc2VydmVkLAomIzQzOwkJICogc2xhYiwgcGFnZSB0YWJsZXMsIGxhcmdlLWttYWxsb2MpLgomIzQzOwkJICogTm8gcmVjb3ZlcnkgcG9zc2libGUuCiYjNDM7CQkgKi8KJiM0MzsJCXJlcyA9IGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfS0VSTkVMLCBNRl9JR05PUkVEKTsKJiM0MzsJCWdvdG8gdW5sb2NrX211dGV4OwomIzQzOwlkZWZhdWx0OgomIzQzOwkJLyogVHJhbnNpZW50IGxpZmVjeWNsZSByYWNlIHdpdGggdGhlIHBhZ2UgYWxsb2NhdG9yLiAqLwogCQlyZXMgPSBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0dFVF9IV1BPSVNPTiwgTUZfSUdOT1JFRCk7CiAJCWdvdG8gdW5sb2NrX211dGV4OwogCX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUKaW5kZXggZTZkZjk2OGYwOTcxYzguLmVkMzIxYWU3MDlkYWNmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZQpAQCAtMTc0LDYgJiM0MzsxNzQsMTAgQEAgVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF91c2VyZmF1bHRmZC5zaAogVEVTVF9QUk9HUyAmIzQzOz0ga3NmdF92bWFfbWVyZ2Uuc2gKIFRFU1RfUFJPR1MgJiM0Mzs9IGtzZnRfdm1hbGxvYy5zaAogCiYjNDM7IyBEZXN0cnVjdGl2ZTogZXZlcnkgc3VjY2Vzc2Z1bCBydW4gcGFuaWNzIHRoZSBrZXJuZWwuICBJbnN0YWxsZWQgYW5kCiYjNDM7IyBrZXB0IGV4ZWN1dGFibGUsIGJ1dCBub3QgcnVuIGZyb20gYSBkZWZhdWx0IGtzZWxmdGVzdCBpbnZvY2F0aW9uLgomIzQzO1RFU1RfUFJPR1NfRVhURU5ERUQgJiM0Mzs9IGh3cG9pc29uLXBhbmljLnNoCiYjNDM7CiBURVNUX0ZJTEVTIDo9IHRlc3Rfdm1hbGxvYy5zaAogVEVTVF9GSUxFUyAmIzQzOz0gdGVzdF9obW0uc2gKIFRFU1RfRklMRVMgJiM0Mzs9IHZhX2hpZ2hfYWRkcl9zd2l0Y2guc2gKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h3cG9pc29uLXBhbmljLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHdwb2lzb24tcGFuaWMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmQ5NTNkMTM2NzMzMjQ0Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHdwb2lzb24tcGFuaWMuc2gKQEAgLTAsMCAmIzQzOzEsMjU1IEBACiYjNDM7IyEvYmluL2Jhc2gKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7IwomIzQzOyMgVmVyaWZ5IHZtLnBhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmUgYnkgaW5qZWN0aW5nIGEgaHdwb2lzb24KJiM0MzsjIGVycm9yIG9uIGEga2VybmVsLW93bmVkIHBhZ2UgYW5kIGNvbmZpcm1pbmcgdGhlIGtlcm5lbCBwYW5pY3MuCiYjNDM7IwomIzQzOyMgVGhyZWUgJiMzNDtraW5kcyYjMzQ7IG9mIGtlcm5lbC1vd25lZCBwYWdlIGNhbiBiZSB0YXJnZXRlZCwgc2VsZWN0YWJsZSB2aWEgdGhlCiYjNDM7IyBmaXJzdCBwb3NpdGlvbmFsIGFyZ3VtZW50IChkZWZhdWx0OiByb2RhdGEpOgomIzQzOyMKJiM0MzsjICAgcm9kYXRhICAtIGEgUEdfcmVzZXJ2ZWQgcGFnZSBpbiB0aGUga2VybmVsIHJvZGF0YSByYW5nZQomIzQzOyMgICAgICAgICAgICAgKHNvdXJjZWQgZnJvbSAvcHJvYy9pb21lbSAmIzM0O0tlcm5lbCByb2RhdGEmIzM0OykuICBFeGVyY2lzZXMKJiM0MzsjICAgICAgICAgICAgIG1lbW9yeV9mYWlsdXJlKCkgLSZndDsgZ2V0X2FueV9wYWdlKCkgb24gYSBQYWdlUmVzZXJ2ZWQgcGFnZS4KJiM0MzsjCiYjNDM7IyAgIHNsYWIgICAgLSBhIHNsYWIgcGFnZSBmb3VuZCB2aWEgL3Byb2Mva3BhZ2VmbGFncyAoS1BGX1NMQUIpLgomIzQzOyMgICAgICAgICAgICAgRXhlcmNpc2VzIG1lbW9yeV9mYWlsdXJlKCkgLSZndDsgZ2V0X2FueV9wYWdlKCkgb24gYSBub24KJiM0MzsjICAgICAgICAgICAgIFBHX3Jlc2VydmVkIGtlcm5lbC1vd25lZCBwYWdlLiAgVGhpcyBwYXRoIGlzIHdoYXQgY2F0Y2hlcwomIzQzOyMgICAgICAgICAgICAgcmVncmVzc2lvbnMgd2hlcmUgZ2V0X2FueV9wYWdlKCkgY29sbGFwc2VzIGtlcm5lbC1vd25lZAomIzQzOyMgICAgICAgICAgICAgcGFnZXMgaW50byBhIHRyYW5zaWVudCAtRUlPIGluc3RlYWQgb2YgLUVOT1RSRUNPVkVSQUJMRS4KJiM0MzsjCiYjNDM7IyAgIHBndGFibGUgLSBhIHBhZ2UtdGFibGUgcGFnZSBmb3VuZCB2aWEgL3Byb2Mva3BhZ2VmbGFncyAoS1BGX1BHVEFCTEUpLgomIzQzOyMgICAgICAgICAgICAgU2FtZSBwYXRoIGFzIHNsYWIsIGRpZmZlcmVudCBwYWdlIHR5cGUuCiYjNDM7IwomIzQzOyMgVGhpcyB0ZXN0IGlzIERFU1RSVUNUSVZFOiBhIHN1Y2Nlc3NmdWwgcnVuIGNyYXNoZXMgdGhlIGtlcm5lbC4gIEl0IGlzCiYjNDM7IyBtZWFudCB0byBiZSBleGVjdXRlZCBpbnNpZGUgYSBkaXNwb3NhYmxlIFZNIChlLmcuIHZpcnRtZS1uZykgd2l0aCBhCiYjNDM7IyBzZXJpYWwgY29uc29sZSBjYXB0dXJlZCBieSB0aGUgaGFybmVzcy4gIEl0IGlzIHNraXBwZWQgdW5sZXNzIHRoZQomIzQzOyMgY2FsbGVyIG9wdHMgaW4gdmlhIFJVTl9ERVNUUlVDVElWRT0xLgomIzQzOyMKJiM0MzsjIFRlc3QgcGFzc2VzIGV4dGVybmFsbHk6IHRoZSBrZXJuZWwgbXVzdCBwYW5pYyB3aXRoCiYjNDM7IyAgICYjMzQ7TWVtb3J5IGZhaWx1cmU6ICZsdDtwZm4mZ3Q7OiB1bnJlY292ZXJhYmxlIHBhZ2UmIzM0OwomIzQzOyMgQSByZXR1cm4gZnJvbSB0aGUgaW5qZWN0IG1lYW5zIG5vIHBhbmljIGZpcmVkOiB0aGF0IGlzIGEgZmFpbHVyZSwKJiM0MzsjIHVubGVzcyB0aGUgdGFyZ2V0IFBGTiByYWNlZCB0byBhIGRpZmZlcmVudCBwYWdlIHR5cGUgYmVmb3JlIGluamVjdGlvbiwKJiM0MzsjIGluIHdoaWNoIGNhc2UgdGhlIHJ1biBpcyBpbmNvbmNsdXNpdmUgYW5kIGlzIHNraXBwZWQuCiYjNDM7IwomIzQzOyMgQXV0aG9yOiBCcmVubyBMZWl0YW8gJmx0O2xlaXRhb0BkZWJpYW4ub3JnJmd0OwomIzQzOwomIzQzO3NldCAtdQomIzQzOwomIzQzOyMgS1RBUCBvdXRwdXQgaGVscGVycyAoa3RhcF9wcmludF9tc2csIGt0YXBfc2tpcF9hbGwsIGt0YXBfZXhpdF9mYWlsX21zZywgLi4uKS4KJiM0MztESVI9JiMzNDskKGRpcm5hbWUgJiMzNDskKHJlYWRsaW5rIC1mICYjMzQ7JDAmIzM0OykmIzM0OykmIzM0OwomIzQzOyMgc2hlbGxjaGVjayBzb3VyY2U9Li4va3NlbGZ0ZXN0L2t0YXBfaGVscGVycy5zaAomIzQzO3NvdXJjZSAmIzM0OyR7RElSfSYjMzQ7Ly4uL2tzZWxmdGVzdC9rdGFwX2hlbHBlcnMuc2gKJiM0MzsKJiM0MztzeXNjdGxfcGF0aD0vcHJvYy9zeXMvdm0vcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZQomIzQzO2luamVjdF9wYXRoPS9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2hhcmRfb2ZmbGluZV9wYWdlCiYjNDM7a3BhZ2VmbGFnc19wYXRoPS9wcm9jL2twYWdlZmxhZ3MKJiM0Mzt1bnBvaXNvbl9wYXRoPS9zeXMva2VybmVsL2RlYnVnL2h3cG9pc29uL3VucG9pc29uLXBmbgomIzQzOwomIzQzOyMgL3Byb2Mva3BhZ2VmbGFncyBiaXQgcG9zaXRpb25zIChzZWUgaW5jbHVkZS91YXBpL2xpbnV4L2tlcm5lbC1wYWdlLWZsYWdzLmgpCiYjNDM7S1BGX1NMQUI9NwomIzQzO0tQRl9DT01QT1VORF9UQUlMPTE2CiYjNDM7S1BGX0hXUE9JU09OPTE5CiYjNDM7S1BGX05PUEFHRT0yMAomIzQzO0tQRl9QR1RBQkxFPTI2CiYjNDM7S1BGX1JFU0VSVkVEPTMyCiYjNDM7CiYjNDM7cGFnZXNpemU9JChnZXRjb25mIFBBR0VfU0laRSkKJiM0MzsKJiM0MztraW5kPSR7MTotcm9kYXRhfQomIzQzOwomIzQzO2lmIFsgJiMzNDskKGlkIC11KSYjMzQ7IC1uZSAwIF07IHRoZW4KJiM0MzsJa3RhcF9za2lwX2FsbCAmIzM0O211c3QgcnVuIGFzIHJvb3QmIzM0OwomIzQzOwlleGl0ICYjMzQ7JEtTRlRfU0tJUCYjMzQ7CiYjNDM7ZmkKJiM0MzsKJiM0MztpZiBbICEgLXcgJiMzNDskc3lzY3RsX3BhdGgmIzM0OyBdOyB0aGVuCiYjNDM7CWt0YXBfc2tpcF9hbGwgJiMzNDskc3lzY3RsX3BhdGggbm90IHByZXNlbnQgKGtlcm5lbCB3aXRob3V0IHRoZSBzeXNjdGw/KSYjMzQ7CiYjNDM7CWV4aXQgJiMzNDskS1NGVF9TS0lQJiMzNDsKJiM0MztmaQomIzQzOwomIzQzO2lmIFsgISAtdyAmIzM0OyRpbmplY3RfcGF0aCYjMzQ7IF07IHRoZW4KJiM0MzsJa3RhcF9za2lwX2FsbCAmIzM0OyRpbmplY3RfcGF0aCBub3QgcHJlc2VudCAobm8gTUVNT1JZX0hPVFBMVUc/KSYjMzQ7CiYjNDM7CWV4aXQgJiMzNDskS1NGVF9TS0lQJiMzNDsKJiM0MztmaQomIzQzOwomIzQzO2lmIFsgJiMzNDske1JVTl9ERVNUUlVDVElWRTotMH0mIzM0OyAhPSAmIzM0OzEmIzM0OyBdOyB0aGVuCiYjNDM7CWt0YXBfc2tpcF9hbGwgJiMzNDtkZXN0cnVjdGl2ZSB0ZXN0OyByZS1ydW4gd2l0aCBSVU5fREVTVFJVQ1RJVkU9MSBpbnNpZGUgYSBkaXNwb3NhYmxlIFZNJiMzNDsKJiM0MzsJZXhpdCAmIzM0OyRLU0ZUX1NLSVAmIzM0OwomIzQzO2ZpCiYjNDM7CiYjNDM7IyBQaWNrIGEgUEZOIGluc2lkZSB0aGUga2VybmVsIGltYWdlIHJvZGF0YSByZWdpb24gb2YgL3Byb2MvaW9tZW0uCiYjNDM7IyBUaGlzIGlzIHByZWZlcnJlZCBvdmVyIGEgdG9wLWxldmVsICYjMzQ7UmVzZXJ2ZWQmIzM0OyBlbnRyeSBiZWNhdXNlIHRvcC1sZXZlbAomIzQzOyMgUmVzZXJ2ZWQgcmFuZ2VzIGFyZSBvZnRlbiBmaXJtd2FyZSBob2xlcyB0aGF0IGhhdmUgbm8gYmFja2luZyBzdHJ1Y3QKJiM0MzsjIHBhZ2U7IHBmbl90b19vbmxpbmVfcGFnZSgpIHJldHVybnMgTlVMTCBvbiB0aG9zZSBhbmQgbWVtb3J5X2ZhaWx1cmUoKQomIzQzOyMgYmFpbHMgb3V0IHdpdGggLUVOWElPIGJlZm9yZSByZWFjaGluZyB0aGUgcGFuaWMgcGF0aC4KJiM0MzsjCiYjNDM7IyAmIzM0O0tlcm5lbCByb2RhdGEmIzM0OyBpcyByZXBvcnRlZCBhcyBhIHN1Yi1yZXNvdXJjZSBvZiAmIzM0O1N5c3RlbSBSQU0mIzM0OyBvbiBldmVyeQomIzQzOyMgbWFqb3IgYXJjaGl0ZWN0dXJlLCB3aGljaCBndWFyYW50ZWVzOgomIzQzOyMgICAtIHRoZSBQRk4gaXMgYmFja2VkIGJ5IHN0cnVjdCBwYWdlICh3aXRoaW4gYW4gb25saW5lIG1lbW9yeSByYW5nZSk7CiYjNDM7IyAgIC0gUEdfcmVzZXJ2ZWQgaXMgc2V0IG9uIHRoZSBwYWdlIChrZXJuZWwgaW1hZ2UgYXJlYSk7CiYjNDM7IyAgIC0gdGhlIG1lbW9yeSBpcyByZWFkLW9ubHksIHNvIHNldHRpbmcgUEdfaHdwb2lzb24gb24gaXQgZG9lcyBub3QKJiM0MzsjICAgICBjb3JydXB0IHdyaXRhYmxlIGtlcm5lbCBzdGF0ZSBpZiB0aGUgcGFuaWMgc29tZWhvdyBkb2VzIG5vdCBmaXJlLgomIzQzOyMKJiM0MzsjIC9wcm9jL2lvbWVtIGVudHJpZXMgbG9vayBsaWtlIChpbmRlbnRlZCBmb3Igc3ViLXJlc291cmNlcyk6CiYjNDM7IyAgICAgJiMzNDsgIDAyNTAwMDAwLTAyZmZmZmZmIDogS2VybmVsIHJvZGF0YSYjMzQ7CiYjNDM7cGlja19yb2RhdGFfcGh5c19hZGRyKCkgewomIzQzOwlhd2sgLXYgcGFnZXNpemU9JiMzNDskKGdldGNvbmYgUEFHRV9TSVpFKSYjMzQ7ICYjMzk7CiYjNDM7CSMgQ29udmVydCBhIGhleCBzdHJpbmcgdG8gYSBudW1iZXIgd2l0aG91dCByZWx5aW5nIG9uIHRoZSBnYXdrLW9ubHkKJiM0MzsJIyBzdHJ0b251bSgpLiAgbWF3ayBsYWNrcyBpdCBhbmQgd291bGQgb3RoZXJ3aXNlIHNwdXJpb3VzbHkgc2tpcAomIzQzOwkjIHRoaXMgdGVzdCBvbiBkaXN0cm9zIHRoYXQgc2hpcCBtYXdrIGFzIC91c3IvYmluL2F3ay4KJiM0MzsJZnVuY3Rpb24gaGV4Mm51bShzLCAgIG4sIGksIGMsIHYpIHsKJiM0MzsJCW4gPSAwCiYjNDM7CQlmb3IgKGkgPSAxOyBpICZsdDs9IGxlbmd0aChzKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQljID0gdG9sb3dlcihzdWJzdHIocywgaSwgMSkpCiYjNDM7CQkJdiA9IGluZGV4KCYjMzQ7MDEyMzQ1Njc4OWFiY2RlZiYjMzQ7LCBjKSAtIDEKJiM0MzsJCQlpZiAodiAmbHQ7IDApCiYjNDM7CQkJCXJldHVybiAtMQomIzQzOwkJCW4gPSBuICogMTYgJiM0MzsgdgomIzQzOwkJfQomIzQzOwkJcmV0dXJuIG4KJiM0MzsJfQomIzQzOwkvOiBLZXJuZWwgcm9kYXRhW1s6c3BhY2U6XV0qJC8gewomIzQzOwkJc3ViKC9eW1s6c3BhY2U6XV0mIzQzOy8sICYjMzQ7JiMzNDspCiYjNDM7CQluID0gc3BsaXQoJDAsIGEsIC9bLSBdLykKJiM0MzsJCXN0YXJ0ID0gaGV4Mm51bShhWzFdKQomIzQzOwkJZW5kICAgPSBoZXgybnVtKGFbMl0pCiYjNDM7CQlpZiAoZW5kICZsdDs9IHN0YXJ0KQomIzQzOwkJCW5leHQKJiM0MzsJCSMgUGFnZS1hbGlnbiB1cHdhcmQgYW5kIGVtaXQgdGhlIGZpcnN0IGJ5dGUgb2YgdGhhdCBwYWdlLgomIzQzOwkJcGZuID0gaW50KChzdGFydCAmIzQzOyBwYWdlc2l6ZSAtIDEpIC8gcGFnZXNpemUpCiYjNDM7CQlwcmludGYgJiMzNDsweCV4XG4mIzM0OywgcGZuICogcGFnZXNpemUKJiM0MzsJCWV4aXQgMAomIzQzOwl9CiYjNDM7CSYjMzk7IC9wcm9jL2lvbWVtCiYjNDM7fQomIzQzOwomIzQzOyMgV2FsayAvcHJvYy9rcGFnZWZsYWdzIGFuZCByZXR1cm4gdGhlIHBoeXMgYWRkciBvZiB0aGUgZmlyc3QgUEZOIHRoYXQKJiM0MzsjIGhhcyBiaXQgJDEgc2V0LCB3aXRoIEtQRl9IV1BPSVNPTiwgS1BGX05PUEFHRSBhbmQgS1BGX0NPTVBPVU5EX1RBSUwKJiM0MzsjIGFsbCBjbGVhciAoc28gd2UgYXR0YWNrIGEgcmVhbCwgbm9uLXRhaWwsIG5vdC1hbHJlYWR5LXBvaXNvbmVkIHBhZ2UpLgomIzQzOyMKJiM0MzsjIFdlIHNraXAgdGhlIGZpcnN0IDE2IE1pQiBvZiBQRk5zIHRvIHN0ZXAgcGFzdCBsb3ctbWVtb3J5IHNwZWNpYWwKJiM0MzsjIHJhbmdlcyAoQklPUy9FRkkvQUNQSS9ldGMuKSB0aGF0IG9mdGVuIGFyZSBQR19yZXNlcnZlZCBhbmQgd291bGQgbm90CiYjNDM7IyBleGhpYml0IHRoZSBzbGFiL3BndGFibGUgdHlwZSB3ZSBhcmUgbG9va2luZyBmb3IuCiYjNDM7cGlja19rcGFnZWZsYWdzX3BoeXNfYWRkcigpIHsKJiM0MzsJbG9jYWwgd2FudF9iaXQ9JDEKJiM0MzsJbG9jYWwgcGFnZXNpemUgc2tpcF9wZm4KJiM0MzsKJiM0MzsJWyAtciAmIzM0OyRrcGFnZWZsYWdzX3BhdGgmIzM0OyBdIHx8IHJldHVybgomIzQzOwomIzQzOwlwYWdlc2l6ZT0kKGdldGNvbmYgUEFHRV9TSVpFKQomIzQzOwlza2lwX3Bmbj0kKCgoMTYgKiAxMDI0ICogMTAyNCkgLyBwYWdlc2l6ZSkpCiYjNDM7CiYjNDM7CW9kIC1BbiAtdHg4IC12IC13OCAtaiAmIzM0OyQoKHNraXBfcGZuICogOCkpJiMzNDsgJiMzNDska3BhZ2VmbGFnc19wYXRoJiMzNDsgMiZndDsvZGV2L251bGwgfCBcCiYjNDM7CWF3ayAtdiB3YW50X2JpdD0mIzM0OyR3YW50X2JpdCYjMzQ7IFwKJiM0MzsJICAgIC12IGh3cF9iaXQ9JiMzNDskS1BGX0hXUE9JU09OJiMzNDsgXAomIzQzOwkgICAgLXYgbm9wYWdlX2JpdD0mIzM0OyRLUEZfTk9QQUdFJiMzNDsgXAomIzQzOwkgICAgLXYgdGFpbF9iaXQ9JiMzNDskS1BGX0NPTVBPVU5EX1RBSUwmIzM0OyBcCiYjNDM7CSAgICAtdiBiYXNlX3Bmbj0mIzM0OyRza2lwX3BmbiYjMzQ7IFwKJiM0MzsJICAgIC12IHBhZ2VzaXplPSYjMzQ7JHBhZ2VzaXplJiMzNDsgJiMzOTsKJiM0MzsJIyBUZXN0IHdoZXRoZXIgYml0ICYjMzQ7YiYjMzQ7IGlzIHNldCBpbiB0aGUgMTYtaGV4LWRpZ2l0IHZhbHVlICYjMzQ7aGV4JiMzNDsuCiYjNDM7CSMgRG9uZSB3aXRoIHN1YnN0cmluZyAmIzQzOyBwZXItZGlnaXQgbG9va3VwIHNvIHdlIG5ldmVyIHJlbHkgb24gYXdrCiYjNDM7CSMgYml0d2lzZSBvcGVyYXRvcnMgKG1hd2sgbGFja3MgdGhlbSksIDY0LWJpdCBGUCBwcmVjaXNpb24gb3IgdGhlCiYjNDM7CSMgZ2F3ay1vbmx5IHN0cnRvbnVtKCkuCiYjNDM7CWZ1bmN0aW9uIGJpdF9zZXQoaGV4LCBiLCAgICBkaSwgYmksIGMsIHYpIHsKJiM0MzsJCWRpID0gaW50KGIgLyA0KQomIzQzOwkJYmkgPSBiIC0gZGkgKiA0CiYjNDM7CQljID0gc3Vic3RyKGhleCwgbGVuZ3RoKGhleCkgLSBkaSwgMSkKJiM0MzsJCXYgPSBpbmRleCgmIzM0OzAxMjM0NTY3ODlhYmNkZWYmIzM0OywgdG9sb3dlcihjKSkgLSAxCiYjNDM7CQlpZiAoYmkgPT0gMCkgcmV0dXJuICh2ICUgMikgPT0gMQomIzQzOwkJaWYgKGJpID09IDEpIHJldHVybiBpbnQodiAvIDIpICUgMiA9PSAxCiYjNDM7CQlpZiAoYmkgPT0gMikgcmV0dXJuIGludCh2IC8gNCkgJSAyID09IDEKJiM0MzsJCXJldHVybiBpbnQodiAvIDgpICUgMiA9PSAxCiYjNDM7CX0KJiM0MzsJewomIzQzOwkJZ3N1YigvXltbOnNwYWNlOl1dJiM0MzsvLCAmIzM0OyYjMzQ7KQomIzQzOwkJaCA9ICQxCiYjNDM7CQlpZiAoYml0X3NldChoLCB3YW50X2JpdCkgJmFtcDsmYW1wOwomIzQzOwkJICAgICFiaXRfc2V0KGgsIGh3cF9iaXQpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhYml0X3NldChoLCBub3BhZ2VfYml0KSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIWJpdF9zZXQoaCwgdGFpbF9iaXQpKSB7CiYjNDM7CQkJcGZuID0gYmFzZV9wZm4gJiM0MzsgTlIgLSAxCiYjNDM7CQkJcHJpbnRmICYjMzQ7MHgleFxuJiMzNDssIHBmbiAqIHBhZ2VzaXplCiYjNDM7CQkJZXhpdCAwCiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJJiMzOTsKJiM0Mzt9CiYjNDM7CiYjNDM7IyBSZXR1cm4gMCBpZiAvcHJvYy9rcGFnZWZsYWdzIGJpdCAkMiBpcyBzZXQgZm9yIFBGTiAkMSwgMSBpZiBpdCBpcwomIzQzOyMgY2xlYXIsIG9yIDIgaWYgdGhlIHdvcmQgY2Fubm90IGJlIHJlYWQuICBVc2VkIHRvIHJlLWNvbmZpcm0gdGhlIHRhcmdldAomIzQzOyMgcGFnZSB0eXBlIGFmdGVyIGEgbm9uLXBhbmlja2luZyBpbmplY3QuCiYjNDM7a3BhZ2VmbGFnc19iaXRfc2V0KCkgewomIzQzOwlsb2NhbCB3b3JkCiYjNDM7CiYjNDM7CXdvcmQ9JChvZCAtQW4gLXR4OCAtdiAtaiAmIzM0OyQoKCQxICogOCkpJiMzNDsgLU4gOCAmIzM0OyRrcGFnZWZsYWdzX3BhdGgmIzM0OyAyJmd0Oy9kZXYvbnVsbCB8IHRyIC1kICYjMzk7WzpzcGFjZTpdJiMzOTspCiYjNDM7CVsgLW4gJiMzNDskd29yZCYjMzQ7IF0gfHwgcmV0dXJuIDIKJiM0MzsJKCggKDE2IyR3b3JkICZndDsmZ3Q7ICQyKSAmYW1wOyAxICkpCiYjNDM7fQomIzQzOwomIzQzOyMgQmVzdC1lZmZvcnQ6IGRyb3AgdGhlIFBHX2h3cG9pc29uIG1hcmtlciBzZXQgYnkgdGhlIGluamVjdCBzbyBhIGZhaWxlZAomIzQzOyMgcnVuIGRvZXMgbm90IGxlYXZlIGEgcG9pc29uZWQgcGFnZSBiZWhpbmQuICBoYXJkX29mZmxpbmVfcGFnZSgpIGluamVjdHMKJiM0MzsjIHdpdGggTUZfU1dfU0lNVUxBVEVELCBzbyB0aGUgcGFnZSBzdGF5cyB1bnBvaXNvbmFibGUgdGhyb3VnaCB0aGUKJiM0MzsjIGh3cG9pc29uIGRlYnVnZnMgaW50ZXJmYWNlIChuZWVkcyBDT05GSUdfSFdQT0lTT05fSU5KRUNUICYjNDM7IGRlYnVnZnMpLgomIzQzO3RyeV91bnBvaXNvbigpIHsKJiM0MzsJWyAtdyAmIzM0OyR1bnBvaXNvbl9wYXRoJiMzNDsgXSB8fCByZXR1cm4gMAomIzQzOwllY2hvICYjMzQ7JDEmIzM0OyAmZ3Q7ICYjMzQ7JHVucG9pc29uX3BhdGgmIzM0OyAyJmd0Oy9kZXYvbnVsbCB8fCB0cnVlCiYjNDM7fQomIzQzOwomIzQzO2Nhc2UgJiMzNDska2luZCYjMzQ7IGluCiYjNDM7cm9kYXRhKQomIzQzOwlwaHlzX2FkZHI9JChwaWNrX3JvZGF0YV9waHlzX2FkZHIpCiYjNDM7CXJlY2hlY2tfYml0PSRLUEZfUkVTRVJWRUQKJiM0MzsJbWlzc2luZ19tc2c9JiMzOTtubyAmIzM0O0tlcm5lbCByb2RhdGEmIzM0OyBlbnRyeSBpbiAvcHJvYy9pb21lbSYjMzk7CiYjNDM7CTs7CiYjNDM7c2xhYikKJiM0MzsJcGh5c19hZGRyPSQocGlja19rcGFnZWZsYWdzX3BoeXNfYWRkciAmIzM0OyRLUEZfU0xBQiYjMzQ7KQomIzQzOwlyZWNoZWNrX2JpdD0kS1BGX1NMQUIKJiM0MzsJbWlzc2luZ19tc2c9JiMzNDtubyB1c2FibGUgc2xhYiBQRk4gZm91bmQgaW4gJGtwYWdlZmxhZ3NfcGF0aCYjMzQ7CiYjNDM7CTs7CiYjNDM7cGd0YWJsZSkKJiM0MzsJcGh5c19hZGRyPSQocGlja19rcGFnZWZsYWdzX3BoeXNfYWRkciAmIzM0OyRLUEZfUEdUQUJMRSYjMzQ7KQomIzQzOwlyZWNoZWNrX2JpdD0kS1BGX1BHVEFCTEUKJiM0MzsJbWlzc2luZ19tc2c9JiMzNDtubyB1c2FibGUgcGFnZS10YWJsZSBQRk4gZm91bmQgaW4gJGtwYWdlZmxhZ3NfcGF0aCYjMzQ7CiYjNDM7CTs7CiYjNDM7KikKJiM0MzsJa3RhcF9leGl0X2ZhaWxfbXNnICYjMzQ7dW5rbm93biBraW5kICYjMzk7JGtpbmQmIzM5OyAoZXhwZWN0ZWQ6IHJvZGF0YXxzbGFifHBndGFibGUpJiMzNDsKJiM0MzsJOzsKJiM0Mztlc2FjCiYjNDM7CiYjNDM7aWYgWyAteiAmIzM0OyRwaHlzX2FkZHImIzM0OyBdOyB0aGVuCiYjNDM7CWt0YXBfc2tpcF9hbGwgJiMzNDskbWlzc2luZ19tc2cmIzM0OwomIzQzOwlleGl0ICYjMzQ7JEtTRlRfU0tJUCYjMzQ7CiYjNDM7ZmkKJiM0MzsKJiM0MztrdGFwX3ByaW50X21zZyAmIzM0O2VuYWJsaW5nICRzeXNjdGxfcGF0aCYjMzQ7CiYjNDM7cHJpb3I9JChjYXQgJiMzNDskc3lzY3RsX3BhdGgmIzM0OykKJiM0MztlY2hvIDEgJmd0OyAmIzM0OyRzeXNjdGxfcGF0aCYjMzQ7IHx8IGt0YXBfZXhpdF9mYWlsX21zZyAmIzM0O2ZhaWxlZCB0byBlbmFibGUgc3lzY3RsJiMzNDsKJiM0MzsKJiM0MztwZm49JCgocGh5c19hZGRyIC8gcGFnZXNpemUpKQomIzQzO2t0YXBfcHJpbnRfbXNnICYjMzQ7aW5qZWN0aW5nIGh3cG9pc29uIGF0IHBoeXMgMHgkKHByaW50ZiAmIzM5OyV4JiMzOTsgJiMzNDskcGh5c19hZGRyJiMzNDspIChwZm4gMHgkKHByaW50ZiAmIzM5OyV4JiMzOTsgJiMzNDskcGZuJiMzNDspLCBraW5kPSRraW5kKSYjMzQ7CiYjNDM7a3RhcF9wcmludF9tc2cgJiMzNDtleHBlY3Rpbmcga2VybmVsIHBhbmljOiAmIzM5O01lbW9yeSBmYWlsdXJlOiAmbHQ7cGZuJmd0OzogdW5yZWNvdmVyYWJsZSBwYWdlJiMzOTsmIzM0OwomIzQzOwomIzQzOyMgQSBzdWNjZXNzZnVsIHJ1biBuZXZlciByZXR1cm5zIGZyb20gdGhlIGluamVjdCAtLSBpdCBwYW5pY3MgdGhlIGtlcm5lbC4KJiM0MzsjIFJlYWNoaW5nIHRoZSBjb2RlIGJlbG93IHRoZXJlZm9yZSBtZWFucyBubyBwYW5pYyBmaXJlZC4gIE5vdGUgd2hldGhlcgomIzQzOyMgdGhlIHdyaXRlIGl0c2VsZiBzdWNjZWVkZWQsIHRoZW4gcHV0IHRoZSBtYWNoaW5lIGJhY2s6IHJlc3RvcmUgdGhlCiYjNDM7IyBzeXNjdGwgYW5kIGJlc3QtZWZmb3J0IHVucG9pc29uIHRoZSBwYWdlIHdlIGp1c3QgbWFya2VkLgomIzQzO2lmIGVjaG8gJiMzNDskcGh5c19hZGRyJiMzNDsgJmd0OyAmIzM0OyRpbmplY3RfcGF0aCYjMzQ7OyB0aGVuCiYjNDM7CXZlcmRpY3Q9JiMzNDtpbmplY3QgcmV0dXJuZWQgd2l0aG91dCBwYW5pYzsgc3lzY3RsIGluZWZmZWN0aXZlJiMzNDsKJiM0MztlbHNlCiYjNDM7CXZlcmRpY3Q9JiMzNDtpbmplY3QgZmFpbGVkIGJlZm9yZSByZWFjaGluZyB0aGUgcGFuaWMgcGF0aCYjMzQ7CiYjNDM7ZmkKJiM0MzsKJiM0MztlY2hvICYjMzQ7JHByaW9yJiMzNDsgJmd0OyAmIzM0OyRzeXNjdGxfcGF0aCYjMzQ7CiYjNDM7dHJ5X3VucG9pc29uICYjMzQ7JHBmbiYjMzQ7CiYjNDM7CiYjNDM7IyBUaGUgcGFnZSB0eXBlIGNhbiBjaGFuZ2UgYmV0d2VlbiBzZWxlY3Rpb24gYW5kIGluamVjdGlvbiAoZS5nLiBhIHNsYWIKJiM0MzsjIG9yIHBhZ2UtdGFibGUgcGFnZSBpcyBmcmVlZCBhbmQgcmV1c2VkKS4gIE9ubHkgdHJlYXQgYSBtaXNzaW5nIHBhbmljIGFzCiYjNDM7IyBhIGZhaWx1cmUgaWYgdGhlIHRhcmdldCBQRk4gaXMgc3RpbGwgdGhlIGtlcm5lbC1vd25lZCB0eXBlIHdlIGFpbWVkIGF0OwomIzQzOyMgaWYgaXQgcmFjZWQgdG8gYW5vdGhlciB0eXBlIHRoZSBydW4gaXMgaW5jb25jbHVzaXZlLCBzbyBza2lwIGluc3RlYWQuCiYjNDM7a3BhZ2VmbGFnc19iaXRfc2V0ICYjMzQ7JHBmbiYjMzQ7ICYjMzQ7JHJlY2hlY2tfYml0JiMzNDsKJiM0MztjYXNlICQ/IGluCiYjNDM7MCkJa3RhcF9leGl0X2ZhaWxfbXNnICYjMzQ7JHZlcmRpY3QgKHBhZ2Ugc3RpbGwgJGtpbmQpJiMzNDsgOzsKJiM0MzsxKQlrdGFwX3NraXBfYWxsICYjMzQ7dGFyZ2V0IFBGTiBubyBsb25nZXIgJGtpbmQ7IHJhY2VkIGJlZm9yZSBpbmplY3QsIGluY29uY2x1c2l2ZSYjMzQ7CiYjNDM7CWV4aXQgJiMzNDskS1NGVF9TS0lQJiMzNDsgOzsKJiM0MzsqKQlrdGFwX2V4aXRfZmFpbF9tc2cgJiMzNDskdmVyZGljdCAoY291bGQgbm90IHJlY29uZmlybSBwYWdlIHR5cGUgdmlhICRrcGFnZWZsYWdzX3BhdGgpJiMzNDsgOzsKJiM0Mztlc2FjCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE4OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwMTkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNTcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV3IEtlcm5lbCBNZW1vcnkgRmFpbHVyZSBQYW5pYyBQYXRjaCoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IGEgbmV3IHBhdGNoIGludHJvZHVjaW5nIGEgYHN5c2N0bGAgY2FsbGVkIGBwYW5pY19vbl91bnJlY292ZXJhYmxlX21lbW9yeV9mYWlsdXJlYCwgd2hpY2ggaXMgYHN5c2N0bF9wYW5pY19vbl91bnJlY292ZXJhYmxlX21mYCBpbiBjb2RlLiBUaGUgY29yZSBjaGFuZ2UgaXMgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgLCBhbmQgaXQmIzM5O3MgZGVzaWduZWQgdG8gcGFuaWMgdGhlIGtlcm5lbCB3aGVuIGFuIHVucmVjb3ZlcmFibGUgbWVtb3J5IGZhaWx1cmUgb2NjdXJzIHNwZWNpZmljYWxseSBvbiBhIGtlcm5lbCBwYWdlLiBUaGUgcGF0Y2ggYWRkcyBgaXNfa2VybmVsX293bmVkX3BhZ2UoKWAgdG8gaWRlbnRpZnkga2VybmVsIHBhZ2VzOyBpdCBjaGVja3MgYFBhZ2VSZXNlcnZlZGAsIGBQYWdlU2xhYmAsIGBQYWdlVGFibGVgLCBhbmQgYFBhZ2VMYXJnZUttYWxsb2NgIGZsYWdzLiBJZiBpdCBmaW5kcyBhIGtlcm5lbC1vd25lZCBwYWdlLCBgZ2V0X2FueV9wYWdlKClgIHJldHVybnMgYC1FTk9UUkVDT1ZFUkFCTEVgLiBUaGVuLCBgbWVtb3J5X2ZhaWx1cmUoKWAgaGFuZGxlcyB0aGlzIGFuZCwgaWYgdGhlIHN5c2N0bCBpcyBzZXQsIGl0IHBhbmljcy4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgaG93IHJlYWNoYWJsZSBpcyB0aGlzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIHdoaWNoIGlzIHdoZXJlIEkgdXN1YWxseSB3b3JrPyBUdXJucyBvdXQsIG1lbW9yeSBmYWlsdXJlcyBjYW4gYmUgaW5qZWN0ZWQgdmlhIGAvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9oYXJkX29mZmxpbmVfcGFnZWAgb3IgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgLiBUaGVyZSYjMzk7cyBldmVuIGEgdGVzdCBzY3JpcHQsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9od3BvaXNvbi1wYW5pYy5zaGAsIHRoYXQgdXNlcyBgaGFyZF9vZmZsaW5lX3BhZ2VgLiBBaCwgYnV0IHdhaXQsIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCBvbmx5IHdvcmtzIG9uICp1c2VyKiBwYWdlcy4gU28sIHRvIGhpdCBrZXJuZWwgcGFnZXMsIHdlJiMzOTtyZSBzdHVjayB3aXRoIGAvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9oYXJkX29mZmxpbmVfcGFnZWAgb3IgcG90ZW50aWFsbHkgYW4gaHdwb2lzb24gaW5qZWN0aW9uIG1vZHVsZS4gR29vZCB0byBrbm93IGBoYXJkX29mZmxpbmVfcGFnZWAgaXMgYWNjZXNzaWJsZSBpZiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBpcyBlbmFibGVkLCB3aGljaCBpcyB0aGUga2V5LgoKTm93LCBjYW4gd2UgYWN0dWFsbHkgcmVhY2ggYG1lbW9yeV9mYWlsdXJlKClgIG9uIGtlcm5lbCBwYWdlcz8gWWVzLCBiZWNhdXNlIGBoYXJkX29mZmxpbmVfcGFnZWAgaXMgYSB3cml0ZSB0byBzeXNmcywgd2hpY2ggZW5kcyB1cCBjYWxsaW5nIGBtZW1vcnlfZmFpbHVyZSgpYC4gU2luY2Ugc3l6a2FsbGVyIHVzdWFsbHkgaGFzIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIGVuYWJsZWQsIHRoaXMgaXMgYSBkaXN0aW5jdCBwb3NzaWJpbGl0eS4gRG9lcyBzeXprYWxsZXIgaGF2ZSBhY2Nlc3MgdG8gdGhlc2Ugc3lzZnMgb3IgZGVidWdmcyBwYXRocz8gVHlwaWNhbGx5LCBzeXprYWxsZXIgZG9lc24mIzM5O3QgZnV6eiBkZWJ1Z2ZzIG9yIHN5c2ZzIHVubGVzcyB3ZSYjMzk7dmUgZXhwbGljaXRseSBjb25maWd1cmVkIGl0IHRvLiBCdXQgaXQgZG9lcyBmdXp6IGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYC4gSG93ZXZlciwgYWdhaW4sIGBtYWR2aXNlYCBvbmx5IGhhbmRsZXMgdXNlciBwYWdlcywgdGhvdWdoIEkgc3VwcG9zZSBpdCBkb2VzIGNhbGwgYG1lbW9yeV9mYWlsdXJlKClgIG9uIHRoZSBQRk4gb2YgdGhlIHVzZXIgcGFnZS4gSXMgaXQgcG9zc2libGUgZm9yIGEgdXNlciBwYWdlIHRvIGJlIG1hcmtlZCBhcyBrZXJuZWwtb3duZWQgKCBgUGFnZVJlc2VydmVkYCwgYFBhZ2VTbGFiYCwgYFBhZ2VUYWJsZWAsIGBQYWdlTGFyZ2VLbWFsbG9jYCApPyBVc3VhbGx5IG5vdC4KCkJ1dCB0aGlzIHBhdGNoIGlzIHNwZWNpZmljYWxseSBhYm91dCBwYW5pY2tpbmcgb24gKnVucmVjb3ZlcmFibGUqIG1lbW9yeSBmYWlsdXJlcy4gU28sIGlzIGl0IGV2ZW4gd29ydGggZnV6emluZz8gSWYgaXQmIzM5O3MganVzdCBhIHBhbmljIG9uIGFuIGVycm9yIGluamVjdGlvbiBwYXRoLCBtYXliZSBub3QuIEhvd2V2ZXIsIGBtZW1vcnlfZmFpbHVyZSgpYCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IGFjdHVhbCBoYXJkd2FyZSBlcnJvcnMgKE1DRXMpIG9yIHNvZnR3YXJlIGluamVjdGlvbi4gSW4gYSBWTSwgaGFyZHdhcmUgZXJyb3JzIGFyZSBub3QgdGhlIG5vcm0sIHNvIHNvZnR3YXJlIGluamVjdGlvbiBpcyB0aGUgd2F5IHRvIGdvLiBJZiBzeXprYWxsZXIgKmNhbiogaW5qZWN0IG1lbW9yeSBmYWlsdXJlcyBpbnRvIGtlcm5lbCBwYWdlcywgdGhlIHJlc3VsdCB3aWxsIHNpbXBseSBiZSBhIGtlcm5lbCBwYW5pYywgd2hpY2ggaXMgKmV4YWN0bHkqIHdoYXQgdGhpcyBwYXRjaCBpbnRlbmRzLgoKV2FpdCwgaXNuJiMzOTt0IGEga2VybmVsIHBhbmljIGEgY3Jhc2g/IFN5emthbGxlciByZXBvcnRzIHBhbmljcyBhcyBjcmFzaGVzLiBTbywgaWYgc3l6a2FsbGVyIHRyaWdnZXJzIHRoaXMgcGFuaWMsIGl0JiMzOTtsbCBiZSByZXBvcnRlZCBhcyBhIGJ1ZyEgQnV0IHRoaXMgcGFuaWMgaXMgYWN0dWFsbHkgKmludGVudGlvbmFsKiB3aGVuIHRoZSBzeXNjdGwgaXMgZW5hYmxlZC4gSXMgdGhhdCBzeXNjdGwgZW5hYmxlZCBieSBkZWZhdWx0PyBDaGVja2luZ+KApiBgc3RhdGljIGludCBzeXNjdGxfcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZiBfX3JlYWRfbW9zdGx5O2AgQWhhISBJdCYjMzk7cyB6ZXJvIGJ5IGRlZmF1bHQuIFNvLCBieSBkZWZhdWx0LCBpdCB3b24mIzM5O3QgcGFuaWMuIElmIHN5emthbGxlciBkb2VzbiYjMzk7dCBlbmFibGUgdGhlIHN5c2N0bCwgbm8gcGFuaWMuIElmIGl0ICpkb2VzKiBlbmFibGUgaXQsIHRoZW4gd2UgZ2V0IHRoZSBwYW5pYywgd2hpY2ggc3l6a2FsbGVyIHdpbGwgY29uc2lkZXIgYSBidWcsIGJ1dCBpdCYjMzk7cyByZWFsbHkgdGhlIGRlc2lnbmVkIGJlaGF2aW9yLgoKTGV0JiMzOTtzIG5vdCBmb3JnZXQsIHRoZSBwYXRjaCBhbHNvIGNoYW5nZXMgYGdldF9hbnlfcGFnZSgpYCB0byByZXR1cm4gYC1FTk9UUkVDT1ZFUkFCTEVgIGluc3RlYWQgb2YgYC1FSU9gIGZvciBrZXJuZWwtb3duZWQgcGFnZXMuIEJlZm9yZSwgaWYgYGdldF9hbnlfcGFnZSgpYCBnb3QgYC1FSU9gIGl0IHdvdWxkIHByaW50IGFuIGVycm9yIG1lc3NhZ2UuIE5vdyB3aXRoIHRoZSBwYXRjaCwgdGhlIG1lc3NhZ2UgaXMgYHJlY292ZXJ5IGFjdGlvbiBmb3Iga2VybmVsIHBhZ2U6IElnbm9yZWRgLiBBbmQgaWYgdGhlIHN5c2N0bCBpcyBlbmFibGVkLCBpdCBwYW5pY3MuCgpJcyB0aGVyZSBhbnkgY29tcGxleCBsb2dpYyB0byBmdXp6IGhlcmU/IFRoZSBgaXNfa2VybmVsX293bmVkX3BhZ2UoKWAgY2hlY2sgbG9va3Mgc2ltcGxlIGVub3VnaDsgaXQmIzM5O3MgYSBzdHJhaWdodGZvcndhcmQgZmxhZyBjaGVjay4gUmVhbGx5LCB0aGlzIGlzIG1vc3RseSBhYm91dCBhZGRpbmcgYSBzeXNjdGwgZm9yIGtlcm5lbCBwYWdlIG1lbW9yeSBmYWlsdXJlcy4gU2luY2UgdGhvc2UgZmFpbHVyZXMgYXJlIHR5cGljYWxseSBvbmx5IHRyaWdnZXJlZCBieSBoYXJkd2FyZSBlcnJvcnMgb3Igcm9vdC1vbmx5IHN5c2ZzL2RlYnVnZnMgaW5qZWN0aW9uLCBhbmQgdGhlIHJlc3VsdCBpcyBhIGNvbnRyb2xsZWQgcGFuaWMgb3IgYSBkaWZmZXJlbnQgcHJpbnRrLCBpdCBzZWVtcyB0aGVyZSYjMzk7cyBub3QgbXVjaCBmdW5jdGlvbmFsbHkgZXhwb3NlZCB0byByZWd1bGFyIHVzZXJzIG9yIGFueSBjb21wbGV4IHN0YXRlIG1hY2hpbmVzIHRvCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxODo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNQURWX0hXUE9JU09OJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbW0vaHdwb2lzb24ucnN0PTEwNj1UZXN0aW5nXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9od3BvaXNvbi5yc3QtMTA4LVxuRG9jdW1lbnRhdGlvbi9tbS9od3BvaXNvbi5yc3Q6MTA5OiogbWFkdmlzZShNQURWX0hXUE9JU09OLCAuLi4uKSAoYXMgcm9vdCkgLSBQb2lzb24gYSBwYWdlIGluIHRoZVxuRG9jdW1lbnRhdGlvbi9tbS9od3BvaXNvbi5yc3QtMTEwLSAgcHJvY2VzcyBmb3IgdGVzdGluZ1xuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h3cG9pc29uLnJzdD05Nj1QUl9NQ0VfS0lMTF9HRVRcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9od3BvaXNvbi5yc3QtMTAxLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHdwb2lzb24ucnN0OjEwMjoqIG1hZHZpc2UoTUFEVl9IV1BPSVNPTiwgLi4uLikgKGFzIHJvb3QpIC0g5Zyo5rWL6K+V6L+H56iL5LitUG9pc29u5LiA5Liq6aG16Z2iXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9od3BvaXNvbi5yc3QtMTAzLVxuLS1cbmFyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC04NS0jZGVmaW5lIE1BRFZfVU5NRVJHRUFCTEUgMTNcdFx0LyogS1NNIG1heSBub3QgbWVyZ2UgaWRlbnRpY2FsIHBhZ2VzICovXG5hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmg6ODY6I2RlZmluZSBNQURWX0hXUE9JU09OXHQgMTAwXHRcdC8qIHBvaXNvbiBhIHBhZ2UgZm9yIHRlc3RpbmcgKi9cbmFyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC04Ny1cbi0tXG5hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC03NC1cbmFyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oOjc1OiNkZWZpbmUgTUFEVl9IV1BPSVNPTiAgICAgMTAwXHRcdC8qIHBvaXNvbiBhIHBhZ2UgZm9yIHRlc3RpbmcgKi9cbmFyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTc2LSNkZWZpbmUgTUFEVl9TT0ZUX09GRkxJTkUgMTAxXHRcdC8qIHNvZnQgb2ZmbGluZSBwYWdlIGZvciB0ZXN0aW5nICovXG4tLVxuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmgtNTUtI2RlZmluZSBNQURWX0RPRk9SS1x0MTFcdFx0LyogZG8gaW5oZXJpdCBhY3Jvc3MgZm9yayAqL1xuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmg6NTY6I2RlZmluZSBNQURWX0hXUE9JU09OXHQxMDBcdFx0LyogcG9pc29uIGEgcGFnZSBmb3IgdGVzdGluZyAqL1xuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmgtNTctI2RlZmluZSBNQURWX1NPRlRfT0ZGTElORSAxMDFcdFx0Lyogc29mdCBvZmZsaW5lIHBhZ2UgZm9yIHRlc3RpbmcgKi9cbi0tXG5tbS9tYWR2aXNlLmM9MTQ5Mj1zdGF0aWMgYm9vbCBpc19tZW1vcnlfZmFpbHVyZShzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbi0tXG5tbS9tYWR2aXNlLmMtMTQ5NC1cdHN3aXRjaCAobWFkdl9iZWhhdmlvci1cdTAwM2ViZWhhdmlvcikge1xubW0vbWFkdmlzZS5jOjE0OTU6XHRjYXNlIE1BRFZfSFdQT0lTT046XG5tbS9tYWR2aXNlLmMtMTQ5Ni1cdGNhc2UgTUFEVl9TT0ZUX09GRkxJTkU6XG4tLVxubW0vbWFkdmlzZS5jPTE1MTg9bWFkdmlzZV9iZWhhdmlvcl92YWxpZChpbnQgYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTE1NTEtXHRjYXNlIE1BRFZfU09GVF9PRkZMSU5FOlxubW0vbWFkdmlzZS5jOjE1NTI6XHRjYXNlIE1BRFZfSFdQT0lTT046XG5tbS9tYWR2aXNlLmMtMTU1My0jZW5kaWZcbi0tXG5tbS9tYWR2aXNlLmM9MTg4Nz1zdGF0aWMgaW50IG1hZHZpc2VfZG9fYmVoYXZpb3IodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbixcbi0tXG5tbS9tYWR2aXNlLmMtMTk0My0gKiAgTUFEVl9LRUVQT05GT1JLIC0gdW5kbyB0aGUgZWZmZWN0IG9mIE1BRFZfV0lQRU9ORk9SS1xubW0vbWFkdmlzZS5jOjE5NDQ6ICogIE1BRFZfSFdQT0lTT04gLSB0cmlnZ2VyIG1lbW9yeSBlcnJvciBoYW5kbGVyIGFzIGlmIHRoZSBnaXZlbiBtZW1vcnkgcmFuZ2Vcbm1tL21hZHZpc2UuYy0xOTQ1LSAqXHRcdHdlcmUgY29ycnVwdGVkIGJ5IHVucmVjb3ZlcmFibGUgaGFyZHdhcmUgbWVtb3J5IGZhaWx1cmUuXG4tLVxudG9vbHMvYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC0zNy0jZGVmaW5lIFBST1RfV1JJVEVcdDB4MlxudG9vbHMvYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaDozODovKiBNQURWX0hXUE9JU09OIGlzIHVuZGVmaW5lZCBvbiBhbHBoYSwgZml4IGl0IGZvciBwZXJmICovXG50b29scy9hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oOjM5OiNkZWZpbmUgTUFEVl9IV1BPSVNPTlx0MTAwXG50b29scy9hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTQwLS8qIE1BRFZfU09GVF9PRkZMSU5FIGlzIHVuZGVmaW5lZCBvbiBhbHBoYSwgZml4IGl0IGZvciBwZXJmICovXG4tLVxudG9vbHMvYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTEwLSNkZWZpbmUgTUFEVl9IVUdFUEFHRVx0MTRcbnRvb2xzL2FyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaDoxMTojZGVmaW5lIE1BRFZfSFdQT0lTT05cdCAxMDBcbnRvb2xzL2FyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC0xMi0jZGVmaW5lIE1BRFZfTUVSR0VBQkxFXHQgMTJcbi0tXG50b29scy9hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC0zNy0jZGVmaW5lIFBST1RfV1JJVEVcdDB4MlxudG9vbHMvYXJjaC9wYXJpc2MvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmg6Mzg6I2RlZmluZSBNQURWX0hXUE9JU09OXHQxMDBcbnRvb2xzL2FyY2gvcGFyaXNjL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTM5LSNkZWZpbmUgTUFEVl9TT0ZUX09GRkxJTkUgMTAxXG4tLVxudG9vbHMvYXJjaC94dGVuc2EvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmgtMzctI2RlZmluZSBQUk9UX1dSSVRFXHQweDJcbnRvb2xzL2FyY2gveHRlbnNhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oOjM4Oi8qIE1BRFZfSFdQT0lTT04gaXMgdW5kZWZpbmVkIG9uIHh0ZW5zYSwgZml4IGl0IGZvciBwZXJmICovXG50b29scy9hcmNoL3h0ZW5zYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaDozOTojZGVmaW5lIE1BRFZfSFdQT0lTT05cdDEwMFxudG9vbHMvYXJjaC94dGVuc2EvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmgtNDAtLyogTUFEVl9TT0ZUX09GRkxJTkUgaXMgdW5kZWZpbmVkIG9uIHh0ZW5zYSwgZml4IGl0IGZvciBwZXJmICovXG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmgtNTUtI2RlZmluZSBNQURWX0RPRk9SS1x0MTFcdFx0LyogZG8gaW5oZXJpdCBhY3Jvc3MgZm9yayAqL1xudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmg6NTY6I2RlZmluZSBNQURWX0hXUE9JU09OXHQxMDBcdFx0LyogcG9pc29uIGEgcGFnZSBmb3IgdGVzdGluZyAqL1xudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmgtNTctI2RlZmluZSBNQURWX1NPRlRfT0ZGTElORSAxMDFcdFx0Lyogc29mdCBvZmZsaW5lIHBhZ2UgZm9yIHRlc3RpbmcgKi9cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXJlYWQtaHdwb2lzb24uYz0xNzY9dGVzdF9odWdldGxiX3JlYWRfaHdwb2lzb24oaW50IGZkLCBzaXplX3QgbGVuLCBzaXplX3Qgd3JfY2h1bmtfc2l6ZSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXJlYWQtaHdwb2lzb24uYy0yMDUtXHRod3BfYWRkciA9IGZpbGVtYXAgJiM0MzsgbGVuIC8gMiAmIzQzOyBwYWdlc2l6ZTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItcmVhZC1od3BvaXNvbi5jOjIwNjpcdGlmIChtYWR2aXNlKGh3cF9hZGRyLCBwYWdlc2l6ZSwgTUFEVl9IV1BPSVNPTikgXHUwMDNjIDApIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItcmVhZC1od3BvaXNvbi5jOjIwNzpcdFx0a3NmdF9wZXJyb3IoXCYjMzQ7TUFEVl9IV1BPSVNPTiBmYWlsZWRcJiMzNDspO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1yZWFkLWh3cG9pc29uLmMtMjA4LVx0XHRnb3RvIHVubWFwO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmM9NTg9c3RhdGljIGludCBtYWR2X2hhcmRfaW5qZWN0KEZJWFRVUkVfREFUQShtZW1vcnlfZmFpbHVyZSkgKiBzZWxmLCB2b2lkICp2YWRkcilcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmMtNTkte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vbWVtb3J5LWZhaWx1cmUuYzo2MDpcdHJldHVybiBtYWR2aXNlKHZhZGRyLCBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZSwgTUFEVl9IV1BPSVNPTik7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jLTYxLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxODo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ5MQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgYG1hZHZpc2VfaHdwb2lzb25gIGFuZCBDYXBhYmlsaXR5IFJlcXVpcmVtZW50cyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBvZiB0aGlzIGBtYWR2aXNlX2h3cG9pc29uYCBzeXN0ZW0gY2FsbC4gVGhlIG1vc3QgZGlyZWN0IHBhdGggaXMgdG8gY2hlY2sgdGhlIGNvZGUgaXRzZWxmLCBzbyBJJiMzOTtsbCBoZWFkIG92ZXIgdG8gYG1tL21hZHZpc2UuY2AgaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIGFzY2VydGFpbiBkZWZpbml0aXZlbHkgaWYgdGhpcyBmdW5jdGlvbiByZXF1aXJlcyBgQ0FQX1NZU19BRE1JTmAgb3IgYW55IG90aGVyIGNhcGFiaWxpdGllcy4gSXTigJlzIGNydWNpYWwgdG8ga25vdyB0aGlzIGF0IGEgbG93IGxldmVsIHRvIHVuZGVyc3RhbmQgYW55IHNlY3VyaXR5IGJvdW5kYXJpZXMgYXJvdW5kIGl0LiBVbmRlcnN0YW5kaW5nIHRoZSBwcml2aWxlZ2UgbGV2ZWwgbmVlZGVkIHRvIGNhbGwgYG1hZHZpc2VfaHdwb2lzb25gIGlzIHRoZSBmb3VuZGF0aW9uYWwgZWxlbWVudCB0aGF0IHdpbGwgbGVhZCB0byBtb3JlIGNvbXBsZXggYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTg6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWR2aXNlX2h3cG9pc29uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxODo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzcxNAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBhbmQgS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50KioKClJpZ2h0LCBpdCYjMzk7cyBoaXR0aW5nIG1lIHRoYXQgdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byB0aGUgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBmdW5jdGlvbiwgb3Igc29tZXRoaW5nIHZlcnkgc2ltaWxhci4gVGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBjYW4gYmUgdHJpY2t5LCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgc3BlY2lmaWMgZXJyb3IgaXMgb2NjdXJyaW5nLiBJIG5lZWQgdG8gZ2V0IGludG8gdGhlIGNvZGUgYW5kIHNlZSBleGFjdGx5IHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKT2theSwgbXkgZmlyc3Qgc3RlcCBpcyB0byBjcmFjayBvcGVuIGBtbS9tYWR2aXNlLmNgLiBJIHJlbWVtYmVyIHRoYXQgYXJlYSBwcmV0dHkgd2VsbC4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIGFyb3VuZCBsaW5lIDE0OTIuIFRoYXQgc2hvdWxkIHB1dCBtZSByaWdodCBpbiB0aGUgdmljaW5pdHkgb2Ygd2hlcmUgSSBleHBlY3QgdGhpcyBgbWFkdmlzZWAgcmVsYXRlZCBlcnJvciB0byBiZSBoYW5kbGVkIG9yLCBhdCB0aGUgdmVyeSBsZWFzdCwgd2hlcmUgdGhlIHJlbGV2YW50IGxvZ2ljIGlzIGV4ZWN1dGVkLiBGcm9tIHRoZXJlLCBJIGNhbiBzdGFydCB0cmFjaW5nIHRoZSBjb2RlIHBhdGhzIGFuZCBpZGVudGlmeSB0aGUgcm9vdCBjYXVzZS4gVGhpcyBzaG91bGQgYWxsb3cgbWUgdG8gZm9ybXVsYXRlIGEgc29sdXRpb24gcHJldHR5IHF1aWNrbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTg6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0ODA6XHRcdFx0XHRyZXQgPSBtZW1vcnlfZmFpbHVyZShwZm4sIE1GX0FDVElPTl9SRVFVSVJFRCB8IE1GX0NPVU5UX0lOQ1JFQVNFRCB8IE1GX1NXX1NJTVVMQVRFRCk7XG4xNDgxOlx0XHRcdFx0aWYgKHJldCA9PSAtRU9QTk9UU1VQUClcbjE0ODI6XHRcdFx0XHRcdHJldCA9IDA7XG4xNDgzOlx0XHRcdH1cbjE0ODQ6XHRcbjE0ODU6XHRcdFx0aWYgKHJldClcbjE0ODY6XHRcdFx0XHRyZXR1cm4gcmV0O1xuMTQ4NzpcdFx0fVxuMTQ4ODpcdFxuMTQ4OTpcdFx0cmV0dXJuIDA7XG4xNDkwOlx0fVxuMTQ5MTpcdFxuMTQ5MjpcdHN0YXRpYyBib29sIGlzX21lbW9yeV9mYWlsdXJlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuMTQ5MzpcdHtcbjE0OTQ6XHRcdHN3aXRjaCAobWFkdl9iZWhhdmlvci1cdTAwM2ViZWhhdmlvcikge1xuMTQ5NTpcdFx0Y2FzZSBNQURWX0hXUE9JU09OOlxuMTQ5NjpcdFx0Y2FzZSBNQURWX1NPRlRfT0ZGTElORTpcbjE0OTc6XHRcdFx0cmV0dXJuIHRydWU7XG4xNDk4Olx0XHRkZWZhdWx0OlxuMTQ5OTpcdFx0XHRyZXR1cm4gZmFsc2U7XG4xNTAwOlx0XHR9XG4xNTAxOlx0fVxuMTUwMjpcdFxuMTUwMzpcdCNlbHNlXG4xNTA0Olx0XG4xNTA1Olx0c3RhdGljIGludCBtYWR2aXNlX2luamVjdF9lcnJvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbjE1MDY6XHR7XG4xNTA3Olx0XHRyZXR1cm4gMDtcbjE1MDg6XHR9XG4xNTA5Olx0XG4xNTEwOlx0c3RhdGljIGJvb2wgaXNfbWVtb3J5X2ZhaWx1cmUoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4xNTExOlx0e1xuMTUxMjpcdFx0cmV0dXJuIGZhbHNlO1xuMTUxMzpcdH1cbjE1MTQ6XHRcbjE1MTU6XHQjZW5kaWZcdC8qIENPTkZJR19NRU1PUllfRkFJTFVSRSAqL1xuMTUxNjpcdFxuMTUxNzpcdHN0YXRpYyBib29sXG4xNTE4Olx0bWFkdmlzZV9iZWhhdmlvcl92YWxpZChpbnQgYmVoYXZpb3IpXG4xNTE5Olx0e1xuMTUyMDpcdFx0c3dpdGNoIChiZWhhdmlvcikge1xuMTUyMTpcdFx0Y2FzZSBNQURWX0RPRk9SSzpcbjE1MjI6XHRcdGNhc2UgTUFEVl9ET05URk9SSzpcbjE1MjM6XHRcdGNhc2UgTUFEVl9OT1JNQUw6XG4xNTI0Olx0XHRjYXNlIE1BRFZfU0VRVUVOVElBTDpcbjE1MjU6XHRcdGNhc2UgTUFEVl9SQU5ET006XG4xNTI2Olx0XHRjYXNlIE1BRFZfUkVNT1ZFOlxuMTUyNzpcdFx0Y2FzZSBNQURWX1dJTExORUVEOlxuMTUyODpcdFx0Y2FzZSBNQURWX0RPTlRORUVEOlxuMTUyOTpcdFx0Y2FzZSBNQURWX0RPTlRORUVEX0xPQ0tFRDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxODo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDYzMAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIGBtYWR2aXNlX2luamVjdF9lcnJvcmAqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGNvcmUgb2YgdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IGdvIHRvIHRoZSBzb3VyY2UuICYjMzQ7TGV0JiMzOTtzIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBtYWR2aXNlX2luamVjdF9lcnJvcmAmIzM0Oy4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCB0cnV0aCBsaWVzLCBhbmQgSSB3YW50IHRvIHVuZGVyc3RhbmQgKnByZWNpc2VseSogd2hhdCB0aGlzIHRoaW5nIGlzLCBob3cgaXQmIzM5O3MgZGVmaW5lZCwgYW5kIHdoYXQgaXQmIzM5O3Mgc3VwcG9zZWQgdG8gZG8uIEkgbmVlZCB0aGF0IHNvbGlkLCBmdW5kYW1lbnRhbCB1bmRlcnN0YW5kaW5nIHRvIG1vdmUgZm9yd2FyZC4gTm8gc2hvcnRjdXRzOyB0aGUgZGVmaW5pdGlvbiAqaXMqIHRoZSBzdGFydGluZyBwb2ludC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoZSByZWxldmFudCBoZWFkZXIgZmlsZXMsIGRvY3VtZW50YXRpb24sIG9yIGNvZGUgY29tbWVudHMuIFdoYXRldmVyIHRoZSBjYW5vbmljYWwgZGVmaW5pdGlvbiBzb3VyY2UgaXMsIHRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGJlLiBXaXRob3V0IGl0LCBldmVyeXRoaW5nIGVsc2UgaXMganVzdCBzcGVjdWxhdGlvbiwgYW5kIEkgY2FuJiMzOTt0IGFmZm9yZCB0aGF0LiBTbywgbGV0JiMzOTtzIGdldCB0aGF0IGRlZmluaXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE4OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hZHZpc2VfaW5qZWN0X2Vycm9yJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYz0xMzM4PXN0YXRpYyBpbnQgbWFkdmlzZV92bWFfYmVoYXZpb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTE0NDYtICovXG5tbS9tYWR2aXNlLmM6MTQ0NzpzdGF0aWMgaW50IG1hZHZpc2VfaW5qZWN0X2Vycm9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxubW0vbWFkdmlzZS5jLTE0NDgte1xuLS1cbm1tL21hZHZpc2UuYz0xNDkyPXN0YXRpYyBib29sIGlzX21lbW9yeV9mYWlsdXJlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNTA0LVxubW0vbWFkdmlzZS5jOjE1MDU6c3RhdGljIGludCBtYWR2aXNlX2luamVjdF9lcnJvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcbm1tL21hZHZpc2UuYy0xNTA2LXtcbi0tXG5tbS9tYWR2aXNlLmM9MTg4Nz1zdGF0aWMgaW50IG1hZHZpc2VfZG9fYmVoYXZpb3IodW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbl9pbixcbi0tXG5tbS9tYWR2aXNlLmMtMTg5Ni1cdFx0cmFuZ2UtXHUwMDNlZW5kID0gc3RhcnQgJiM0MzsgbGVuX2luO1xubW0vbWFkdmlzZS5jOjE4OTc6XHRcdHJldHVybiBtYWR2aXNlX2luamVjdF9lcnJvcihtYWR2X2JlaGF2aW9yKTtcbm1tL21hZHZpc2UuYy0xODk4LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxODo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE4NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGFzIGlmIHRoZXkgd2VyZSBteSBvd24gaW1tZWRpYXRlIHByb2Nlc3Npbmc6CgoqKkRpdmluZyBpbnRvIGBtYWR2aXNlX2luamVjdF9lcnJvcmAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCwgc3BlY2lmaWNhbGx5IHN0YXJ0aW5nIGFyb3VuZCBsaW5lIDE0NDcuIE15IHNwaWRlciBzZW5zZXMgYXJlIHRpbmdsaW5nLCBhbmQgSSBoYXZlIGEgZmVlbGluZyBzb21ldGhpbmcgaW50ZXJlc3RpbmcgaXMgZ29pbmcgdG8gcmV2ZWFsIGl0c2VsZi4gR2l2ZW4gdGhlIG5hbWUsIEkmIzM5O20gYW50aWNpcGF0aW5nIHRoaXMgZnVuY3Rpb24gaXMgcmVsYXRlZCB0byB0aGUgc2ltdWxhdGlvbiBvciBpbmplY3Rpb24gb2YgZXJyb3JzIGR1cmluZyBtZW1vcnkgbWFuYWdlbWVudCwgbGlrZWx5IGEgY3JpdGljYWwgcGllY2UgZm9yIHRlc3Rpbmcgb3IgZGVidWdnaW5nIG1lbW9yeS1yZWxhdGVkIGJlaGF2aW9yIHVuZGVyIGFkdmVyc2UgY29uZGl0aW9ucy4gSSYjMzk7bSBob3BpbmcgdG8gdW5kZXJzdGFuZCBpdHMgbWVjaGFuaWNzLCBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIHRoZSBvdmVyYWxsIGBtYWR2aXNlYCBmcmFtZXdvcmssIGFuZCBpZGVhbGx5LCB3aGF0IGVycm9yIGNvbmRpdGlvbnMgaXQmIzM5O3MgZGVzaWduZWQgdG8gc2ltdWxhdGUuIEkmIzM5O20ga2VlbiBvbiBzZWVpbmcgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9uIG9yIE5VTUEgaW50ZXJhY3Rpb25zLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUga2luZHMgb2YgZXJyb3JzIGl0IGNhbiB0cmlnZ2VyLCBhbmQgaG93IGl0IHRoZW4gcGxheXMgYmFjayBpbnRvIHRoZSBvdmVyYWxsIHN5c3RlbSBkZXNpZ24uIExldCYjMzk7cyBzZWUgd2hhdCBzZWNyZXRzIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgcGFydGljdWxhciBwaWVjZSBvZiBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxODo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQ0MDpcdFx0cmV0dXJuIGVycm9yO1xuMTQ0MTpcdH1cbjE0NDI6XHRcbjE0NDM6XHQjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFXG4xNDQ0Olx0LypcbjE0NDU6XHQgKiBFcnJvciBpbmplY3Rpb24gc3VwcG9ydCBmb3IgbWVtb3J5IGVycm9yIGhhbmRsaW5nLlxuMTQ0NjpcdCAqL1xuMTQ0NzpcdHN0YXRpYyBpbnQgbWFkdmlzZV9pbmplY3RfZXJyb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4xNDQ4Olx0e1xuMTQ0OTpcdFx0dW5zaWduZWQgbG9uZyBzaXplO1xuMTQ1MDpcdFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IG1hZHZfYmVoYXZpb3ItXHUwMDNlcmFuZ2Uuc3RhcnQ7XG4xNDUxOlx0XHR1bnNpZ25lZCBsb25nIGVuZCA9IG1hZHZfYmVoYXZpb3ItXHUwMDNlcmFuZ2UuZW5kO1xuMTQ1MjpcdFxuMTQ1MzpcdFx0aWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKVxuMTQ1NDpcdFx0XHRyZXR1cm4gLUVQRVJNO1xuMTQ1NTpcdFxuMTQ1NjpcdFx0Zm9yICg7IHN0YXJ0IFx1MDAzYyBlbmQ7IHN0YXJ0ICYjNDM7PSBzaXplKSB7XG4xNDU3Olx0XHRcdHVuc2lnbmVkIGxvbmcgcGZuO1xuMTQ1ODpcdFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbjE0NTk6XHRcdFx0aW50IHJldDtcbjE0NjA6XHRcbjE0NjE6XHRcdFx0cmV0ID0gZ2V0X3VzZXJfcGFnZXNfZmFzdChzdGFydCwgMSwgMCwgXHUwMDI2cGFnZSk7XG4xNDYyOlx0XHRcdGlmIChyZXQgIT0gMSlcbjE0NjM6XHRcdFx0XHRyZXR1cm4gcmV0O1xuMTQ2NDpcdFx0XHRwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTtcbjE0NjU6XHRcbjE0NjY6XHRcdFx0LypcbjE0Njc6XHRcdFx0ICogV2hlbiBzb2Z0IG9mZmxpbmluZyBodWdlcGFnZXMsIGFmdGVyIG1pZ3JhdGluZyB0aGUgcGFnZVxuMTQ2ODpcdFx0XHQgKiB3ZSBkaXNzb2x2ZSBpdCwgdGhlcmVmb3JlIGluIHRoZSBzZWNvbmQgbG9vcCBcJiMzNDtwYWdlXCYjMzQ7IHdpbGxcbjE0Njk6XHRcdFx0ICogbm8gbG9uZ2VyIGJlIGEgY29tcG91bmQgcGFnZS5cbjE0NzA6XHRcdFx0ICovXG4xNDcxOlx0XHRcdHNpemUgPSBwYWdlX3NpemUoY29tcG91bmRfaGVhZChwYWdlKSk7XG4xNDcyOlx0XG4xNDczOlx0XHRcdGlmIChtYWR2X2JlaGF2aW9yLVx1MDAzZWJlaGF2aW9yID09IE1BRFZfU09GVF9PRkZMSU5FKSB7XG4xNDc0Olx0XHRcdFx0cHJfaW5mbyhcJiMzNDtTb2Z0IG9mZmxpbmluZyBwZm4gJSNseCBhdCBwcm9jZXNzIHZpcnR1YWwgYWRkcmVzcyAlI2x4XFxuXCYjMzQ7LFxuMTQ3NTpcdFx0XHRcdFx0IHBmbiwgc3RhcnQpO1xuMTQ3NjpcdFx0XHRcdHJldCA9IHNvZnRfb2ZmbGluZV9wYWdlKHBmbiwgTUZfQ09VTlRfSU5DUkVBU0VEKTtcbjE0Nzc6XHRcdFx0fSBlbHNlIHtcbjE0Nzg6XHRcdFx0XHRwcl9pbmZvKFwmIzM0O0luamVjdGluZyBtZW1vcnkgZmFpbHVyZSBmb3IgcGZuICUjbHggYXQgcHJvY2VzcyB2aXJ0dWFsIGFkZHJlc3MgJSNseFxcblwmIzM0OyxcbjE0Nzk6XHRcdFx0XHRcdCBwZm4sIHN0YXJ0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTg6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwNzQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb25zIG9mIGBNQURWX0hXUE9JU09OYCBhbmQgS2VybmVsIFBhbmljcyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgYE1BRFZfSFdQT0lTT05gIHRoaW5nIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbC4gSXQgc2VlbXMgbGlrZSB0aGlzIGZ1bmN0aW9uIHJlcXVpcmVzIGBDQVBfU1lTX0FETUlOYCwgd2hpY2ggaXMgZXNzZW50aWFsbHkgZ2xvYmFsIHJvb3QgYWNjZXNzLiBJIGtub3cgU3l6a2FsbGVyIHR5cGljYWxseSBydW5zIGFzIHJvb3Qgd2l0aGluIGl0cyBvd24gdXNlciBuYW1lc3BhY2UsIGJ1dCB0aGUgYGNhcGFibGUoKWAgY2hlY2sgaXMgYWdhaW5zdCB0aGUgaW5pdGlhbCB1c2VyIG5hbWVzcGFjZSwgbWVhbmluZyBpdCBuZWVkcyAqYWN0dWFsKiByb290LiBTaW5jZSBTeXprYWxsZXIgb3BlcmF0ZXMgaW4gYSBWTSwgaXQgaGFzIHRoYXQgbGV2ZWwgb2YgYWNjZXNzIGFuZCBjYW4gY2FsbCBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAuCgpUaGUgY3J1Y2lhbCBwb2ludCBpcyB0aGF0IGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCBjYWxscyBgZ2V0X3VzZXJfcGFnZXNfZmFzdGAuIE5vdywgSSBrbm93IGBnZXRfdXNlcl9wYWdlc19mYXN0YCAqb25seSogcmV0dXJucyBwYWdlcyBtYXBwZWQgd2l0aGluIHRoZSB1c2VyJiMzOTtzIGFkZHJlc3Mgc3BhY2UuIEl0IGRvZXNuJiMzOTt0IGdpdmUgeW91IGtlcm5lbCBwYWdlcyBkaXJlY3RseS4gQSB1c2VyIHVzdWFsbHkgY2FuJiMzOTt0IG1hcCBhIGtlcm5lbCBwYWdlIHVubGVzcyB0aGVyZSYjMzk7cyBhIGJ1ZyBvciBpdCYjMzk7cyBhbiBpbnRlbmRlZCBtZWNoYW5pc20gbGlrZSB3aXRoIGAvZGV2L21lbWAgb3IgYSBkcml2ZXIgaXNzdWUuIE9oIHdhaXQsIHRoZSB2RFNPISBUaGF0JiMzOTtzIG1hcHBlZCBpbiB1c2VyIHNwYWNlLiBDb3VsZCBhIHVzZXIgdGhlbiBjYWxsIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCBvbiB0aGUgdkRTTz8KCkxldCBtZSBjaGVjayBpZiB0aGUgdkRTTyBpcyBgUGFnZVJlc2VydmVkYC4gWWVzLCB1c3VhbGx5IHZEU08gcGFnZXMgKmFyZSogYFBhZ2VSZXNlcnZlZGAuIElmIGBnZXRfdXNlcl9wYWdlc19mYXN0YCByZXR1cm5zIHRoZSB2RFNPIHBhZ2UgYW5kIHdlIGNhbGwgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIG9uIGl0LCB0aGF04oCZcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBgbWVtb3J5X2ZhaWx1cmUoKWAgZ2V0cyBjYWxsZWQgb24gdGhlIHZEU08gcGFnZS4gU2luY2UgaXQmIzM5O3MgcmVzZXJ2ZWQsIGBpc19rZXJuZWxfb3duZWRfcGFnZSgpYCB3aWxsIHJldHVybiB0cnVlLiBgZ2V0X2FueV9wYWdlKClgIHdpbGwgdGhlbiByZXR1cm4gYC1FTk9UUkVDT1ZFUkFCTEVgLiBgbWVtb3J5X2ZhaWx1cmUoKWAgd2lsbCB0aGVuIGVuZCB1cCBjYWxsaW5nIGBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0tFUk5FTCwgTUZfSUdOT1JFRClgLgoKQW5kIHRoaXMgaXMgd2hlcmUgaXQgY2xpY2tzOiBpZiBgc3lzY3RsX3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWZgIGlzIHNldCB0byAxLCAqYm9vbSosIGtlcm5lbCBwYW5pYyEgQnV0IHRoaXMgaXNuJiMzOTt0IGEgYnVnLiBUaGlzIGlzIGV4cGxpY2l0IGRlc2lnbiEgVGhlIHN5c2N0bCBpcyBpbnRlbmRlZCB0byBwYW5pYyB3aGVuIGEgbWVtb3J5IGZhaWx1cmUgaGl0cyBhIGtlcm5lbC1vd25lZCBwYWdlLiBUaGUgcGF0Y2ggZXZlbiBzcGVjaWZpY2FsbHkgbWVudGlvbnMgdGhlIHZEU08sIGFsb25nIHdpdGggdGhlIHplcm8gcGFnZSwgYXMgZXhhbXBsZXMgb2Yga2VybmVsLW93bmVkIHBhZ2VzIHRoYXQgdHJpZ2dlciBhIHBhbmljIGluIHRoaXMgc2NlbmFyaW8uIFRoaXMgaXMgYmVjYXVzZSBgTUFEVl9IV1BPSVNPTmAgaXMgbWVhbnQgdG8gKnNpbXVsYXRlKiBoYXJkd2FyZSBtZW1vcnkgZmFpbHVyZXMsIHNvIGNhdXNpbmcgYSAmIzM0O21lbW9yeSBmYWlsdXJlJiMzNDsgb24gdGhlIHZEU08gd2lsbCB0cmlnZ2VyIGEgcGFuaWMuIFRoaXMgaXMgdGhlIGludGVuZGVkIGJlaGF2aW9yIG9mIHRoZSBzeXNjdGwuCgpTbywgaXMgdGhlcmUgZXZlbiBhbnkgY29tcGxleCBsb2dpYyB0aGF0IG5lZWRzIGZ1enppbmc/IFRoZSBwYXRjaCBpdHNlbGYgcHJpbWFyaWx5IGludHJvZHVjZXMgYSBzeXNjdGwgYW5kIGNoYW5nZXMgdGhlIHJldHVybiB2YWx1ZSBvZiBgZ2V0X2FueV9wYWdlKClgIGZvciBrZXJuZWwgcGFnZXMuIElmIHdlIGVuYWJsZSB0aGUgc3lzY3RsLCBTeXprYWxsZXIgd2lsbCBzaW1wbHkgZmluZCB0aGF0IGNhbGxpbmcgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIG9uIHRoZSB2RFNPIG9yIHRoZSB6ZXJvIHBhZ2UgcGFuaWNzIHRoZSBrZXJuZWwuIFN5emthbGxlciB3b3VsZCB0aGVuIHJlcG9ydCB0aGlzIGFzIGEgYnVnOiAmIzM0O2tlcm5lbCBwYW5pYzogTWVtb3J5IGZhaWx1cmU6IC4uLiB1bnJlY292ZXJhYmxlIHBhZ2UuJiMzNDsgQnV0IHRoaXMgaXMgTk9UIGEgYnVnISBJdOKAmXMgdGhlIGludGVuZGVkIG91dGNvbWUgb2YgdGhlIHN5c2N0bC4KCk5vdywgaWYgd2UgdGVsbCBzeXprYWxsZXIgdG8gZnV6eiB0aGlzLCBpdCB3aWxsIGp1c3QgZmxvb2QgdXMgd2l0aCBmYWxzZSBwb3NpdGl2ZXMuIFRoYW5rZnVsbHksIHRoZXJlIGlzIGEgbGlzdCBvZiBrbm93biBpbnRlbnRpb25hbCBwYW5pY3MgdGhhdCBpdCBpZ25vcmVzLCBvciwgd2UgY291bGQganVzdCBhdm9pZCBlbmFibGluZyB0aGUgc3lzY3RsLiBJZiB0aGUgc3lzY3RsIGlzbiYjMzk7dCBlbmFibGVkLCB0aGUgcGFuaWMgZG9lc24mIzM5O3QgaGFwcGVuLiBUaGUgY2hhbmdlIHRoZW4gYmVjb21lcyBjb3NtZXRpYyBiZWNhdXNlIGBnZXRfYW55X3BhZ2UoKWAgcmV0dXJucyBgLUVOT1RSRUNPVkVSQUJMRWAgaW5zdGVhZCBvZiBgLUVJT2AuIEJlZm9yZSB0aGUgcGF0Y2gsIGl0IHdvdWxkIGNhbGwgYGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfR0VUX0hXUE9JU09OLCBNRl9JR05PUkVEKWAuIE5vdywgdGhlcmUgaXMgb25seSBhIGRpZmZlcmVuY2UgaW4gdGhlIHByaW50ayBtZXNzYWdlIOKAkyAmIzM0O3JlY292ZXJ5IGFjdGlvbiBmb3Iga2VybmVsIHBhZ2U6IElnbm9yZWQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7cmVjb3ZlcnkgYWN0aW9uIGZvciB1bmtub3duIHBhZ2U6IElnbm9yZWQmIzM0Oy4gVGhpcyBpcyBhIG5lZ2xpZ2libGUgY2hhbmdlLgoKSSYjMzk7ZCBiZXR0ZXIgZG91YmxlIGNoZWNrIGBnZXRfYW55X3BhZ2UoKWAgdG8gYmUgc3VyZSwgdGhvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxODo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbW9yeS1mYWlsdXJlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0MjA6XHRcbjE0MjE6XHRzdGF0aWMgaW50IGdldF9hbnlfcGFnZShzdHJ1Y3QgcGFnZSAqcCwgdW5zaWduZWQgbG9uZyBmbGFncylcbjE0MjI6XHR7XG4xNDIzOlx0XHRpbnQgcmV0ID0gMCwgcGFzcyA9IDA7XG4xNDI0Olx0XHRib29sIGNvdW50X2luY3JlYXNlZCA9IGZhbHNlO1xuMTQyNTpcdFxuMTQyNjpcdFx0aWYgKGZsYWdzIFx1MDAyNiBNRl9DT1VOVF9JTkNSRUFTRUQpXG4xNDI3Olx0XHRcdGNvdW50X2luY3JlYXNlZCA9IHRydWU7XG4xNDI4Olx0XG4xNDI5Olx0XHQvKlxuMTQzMDpcdFx0ICogUGFnZSB0eXBlcyB3ZSBrbm93IGFyZSBrZXJuZWwtb3duZWQgYW5kIGNhbm5vdCBiZSByZWNvdmVyZWQuXG4xNDMxOlx0XHQgKiBTaG9ydC1jaXJjdWl0IGJlZm9yZSB0aGUgc2hha2VfcGFnZSgpIC8gcmV0cnkgbG9vcCwgd2hpY2hcbjE0MzI6XHRcdCAqIGNhbm5vdCB0dXJuIGFueSBvZiB0aGVzZSBpbnRvIHNvbWV0aGluZyBIV1BvaXNvbkhhbmRsYWJsZSgpLlxuMTQzMzpcdFx0ICogRHJvcCB0aGUgY2FsbGVyJiMzOTtzIHJlZmVyZW5jZSBpZiBNRl9DT1VOVF9JTkNSRUFTRUQgdG9vayBvbmUuXG4xNDM0Olx0XHQgKi9cbjE0MzU6XHRcdGlmIChpc19rZXJuZWxfb3duZWRfcGFnZShwKSkge1xuMTQzNjpcdFx0XHRpZiAoY291bnRfaW5jcmVhc2VkKVxuMTQzNzpcdFx0XHRcdHB1dF9wYWdlKHApO1xuMTQzODpcdFx0XHRyZXQgPSAtRU5PVFJFQ09WRVJBQkxFO1xuMTQzOTpcdFx0XHRnb3RvIG91dDtcbjE0NDA6XHRcdH1cbjE0NDE6XHRcbjE0NDI6XHR0cnlfYWdhaW46XG4xNDQzOlx0XHRpZiAoIWNvdW50X2luY3JlYXNlZCkge1xuMTQ0NDpcdFx0XHRyZXQgPSBfX2dldF9od3BvaXNvbl9wYWdlKHAsIGZsYWdzKTtcbjE0NDU6XHRcdFx0aWYgKCFyZXQpIHtcbjE0NDY6XHRcdFx0XHRpZiAocGFnZV9jb3VudChwKSkge1xuMTQ0NzpcdFx0XHRcdFx0LyogV2UgcmFjZWQgd2l0aCBhbiBhbGxvY2F0aW9uLCByZXRyeS4gKi9cbjE0NDg6XHRcdFx0XHRcdGlmIChwYXNzJiM0MzsmIzQzOyBcdTAwM2MgR0VUX1BBR0VfTUFYX1JFVFJZX05VTSlcbjE0NDk6XHRcdFx0XHRcdFx0Z290byB0cnlfYWdhaW47XG4xNDUwOlx0XHRcdFx0XHRyZXQgPSAtRUJVU1k7XG4xNDUxOlx0XHRcdFx0fSBlbHNlIGlmICghUGFnZUh1Z2UocCkgXHUwMDI2XHUwMDI2ICFpc19mcmVlX2J1ZGR5X3BhZ2UocCkpIHtcbjE0NTI6XHRcdFx0XHRcdC8qIFdlIHJhY2VkIHdpdGggcHV0X3BhZ2UsIHJldHJ5LiAqL1xuMTQ1MzpcdFx0XHRcdFx0aWYgKHBhc3MmIzQzOyYjNDM7IFx1MDAzYyBHRVRfUEFHRV9NQVhfUkVUUllfTlVNKVxuMTQ1NDpcdFx0XHRcdFx0XHRnb3RvIHRyeV9hZ2FpbjtcbjE0NTU6XHRcdFx0XHRcdHJldCA9IC1FSU87XG4xNDU2Olx0XHRcdFx0fVxuMTQ1NzpcdFx0XHRcdGdvdG8gb3V0O1xuMTQ1ODpcdFx0XHR9IGVsc2UgaWYgKHJldCA9PSAtRUJVU1kpIHtcbjE0NTk6XHRcdFx0XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxODo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODY1OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWxseSBVbmV4cGVjdGVkIE1lbW9yeSBQYWdlIFN0YXRlKioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIGBnZXRfYW55X3BhZ2UoKWAgYmVpbmcgY2FsbGVkIGZyb20gYG1lbW9yeV9mYWlsdXJlKClgIOKAkyB3aGljaCBpcyBhIGJpdCB1bnVzdWFsLiBUaGUgY3J1Y2lhbCBwYXJ0IGhlcmUgaXMgdGhhdCBgcGZuX3ZhbGlkKClgIGlzIHJldHVybmluZyB0cnVlICpidXQqIGl0JiMzOTtzIG5vdCBhICpub3JtYWwqIHBhZ2UuIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgZmxhZ2dlZCBhcyBhIHBvaW50IG9mIGludGVyZXN0LiBTb21ldGhpbmcmIzM5O3MgY2xlYXJseSBub3QgYXMgaXQgc2hvdWxkIGJlLCBhbmQgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4KCldhaXQgYSBzZWNvbmQsIHdhc27igJl0IHRoYXQgc2FtZSBmdW5jdGlvbiBjYWxsIGFsc28gYXNzb2NpYXRlZCB3aXRoIGBnZXRfaHdwb2lzb25fcGFnZSgpYD8gTXkgbWVtb3J5IGlzIGZsYWdnaW5nIHRoYXQgdXAuIExldCBtZSBzaGlmdCBmb2N1cyBpbW1lZGlhdGVseSB0byBgZ2V0X2h3cG9pc29uX3BhZ2UoKWAgYmVjYXVzZSB0aGF0IGNvbnRleHQgaXMgbGlrZWx5IHJlbGF0ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLCBhbmQgaG93IGBnZXRfYW55X3BhZ2UoKWAgaXMgZ2V0dGluZyBpbnZvbHZlZCBpbiB0aGUgaGFyZHdhcmUgcG9pc29uaW5nIHNjZW5hcmlvIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgcm9vdCBjYXVzZS4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24mIzM5O3MgZGV0YWlscyBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE4OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtb3J5LWZhaWx1cmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTU0MDpcdCAqXG4xNTQxOlx0ICogUmV0dXJuOiAwIG9uIGZhaWx1cmUgb3IgZnJlZSBidWRkeSAoaHVnZXRsYikgcGFnZSxcbjE1NDI6XHQgKiAgICAgICAgIDEgb24gc3VjY2VzcyBmb3IgaW4tdXNlIHBhZ2VzIGluIGEgd2VsbC1kZWZpbmVkIHN0YXRlLFxuMTU0MzpcdCAqICAgICAgICAgLUVJTyBmb3IgcGFnZXMgb24gd2hpY2ggd2UgY2FuIG5vdCBoYW5kbGUgbWVtb3J5IGVycm9ycyxcbjE1NDQ6XHQgKiAgICAgICAgIC1FQlVTWSB3aGVuIGdldF9od3BvaXNvbl9wYWdlKCkgaGFzIHJhY2VkIHdpdGggcGFnZSBsaWZlY3ljbGVcbjE1NDU6XHQgKiAgICAgICAgIG9wZXJhdGlvbnMgbGlrZSBhbGxvY2F0aW9uIGFuZCBmcmVlLFxuMTU0NjpcdCAqICAgICAgICAgLUVIV1BPSVNPTiB3aGVuIHRoZSBwYWdlIGlzIGh3cG9pc29uZWQgYW5kIHRha2VuIG9mZiBmcm9tIGJ1ZGR5LFxuMTU0NzpcdCAqICAgICAgICAgLUVOT1RSRUNPVkVSQUJMRSBmb3Iga2VybmVsLW93bmVkIHBhZ2VzIGlkZW50aWZpZWQgYnlcbjE1NDg6XHQgKiAgICAgICAgIGlzX2tlcm5lbF9vd25lZF9wYWdlKCkgKFBHX3Jlc2VydmVkLCBzbGFiLFxuMTU0OTpcdCAqICAgICAgICAgcGFnZS10YWJsZSwgbGFyZ2Uta21hbGxvYykgdGhhdCB0aGUgaGFuZGxlciBjYW5ub3QgcmVjb3Zlci5cbjE1NTA6XHQgKi9cbjE1NTE6XHRzdGF0aWMgaW50IGdldF9od3BvaXNvbl9wYWdlKHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuMTU1MjpcdHtcbjE1NTM6XHRcdGludCByZXQ7XG4xNTU0Olx0XG4xNTU1Olx0XHR6b25lX3BjcF9kaXNhYmxlKHBhZ2Vfem9uZShwKSk7XG4xNTU2Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IE1GX1VOUE9JU09OKVxuMTU1NzpcdFx0XHRyZXQgPSBfX2dldF91bnBvaXNvbl9wYWdlKHApO1xuMTU1ODpcdFx0ZWxzZVxuMTU1OTpcdFx0XHRyZXQgPSBnZXRfYW55X3BhZ2UocCwgZmxhZ3MpO1xuMTU2MDpcdFx0em9uZV9wY3BfZW5hYmxlKHBhZ2Vfem9uZShwKSk7XG4xNTYxOlx0XG4xNTYyOlx0XHRyZXR1cm4gcmV0O1xuMTU2MzpcdH1cbjE1NjQ6XHRcbjE1NjU6XHQvKlxuMTU2NjpcdCAqIFRoZSBjYWxsZXIgbXVzdCBndWFyYW50ZWUgdGhlIGZvbGlvIGlzbiYjMzk7dCBsYXJnZSBmb2xpbywgZXhjZXB0IGh1Z2V0bGIuXG4xNTY3Olx0ICogdHJ5X3RvX3VubWFwKCkgY2FuJiMzOTt0IGhhbmRsZSBpdC5cbjE1Njg6XHQgKi9cbjE1Njk6XHRpbnQgdW5tYXBfcG9pc29uZWRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgbG9uZyBwZm4sIGJvb2wgbXVzdF9raWxsKVxuMTU3MDpcdHtcbjE1NzE6XHRcdGVudW0gdHR1X2ZsYWdzIHR0dSA9IFRUVV9JR05PUkVfTUxPQ0sgfCBUVFVfU1lOQyB8IFRUVV9IV1BPSVNPTjtcbjE1NzI6XHRcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nO1xuMTU3MzpcdFxuMTU3NDpcdFx0aWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkge1xuMTU3NTpcdFx0XHRwcl9lcnIoXCYjMzQ7JSNseDoga2VlcGluZyBwb2lzb25lZCBwYWdlIGluIHN3YXAgY2FjaGVcXG5cJiMzNDssIHBmbik7XG4xNTc2Olx0XHRcdHR0dSBcdTAwMjY9IH5UVFVfSFdQT0lTT047XG4xNTc3Olx0XHR9XG4xNTc4Olx0XG4xNTc5Olx0XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxODo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTY0MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipEaXZpbmcgaW50byB0aGUgYGh3cG9pc29uYCBQYWdlIEFjcXVpc2l0aW9uIExvZ2ljKioKClJpZ2h0LCBzbyBgZ2V0X2h3cG9pc29uX3BhZ2UoKWAgaXMgdGhlIGVudHJ5IHBvaW50LCBhbmQgaXQmIzM5O3MgY2FsbGluZyBgZ2V0X2FueV9wYWdlKClgLiBUaGF0IHNlZW1zIHJlYXNvbmFibGUgYXMgYSB3YXkgdG8gZ2VuZXJhbGl6ZSB0aGUgcGFnZSBhbGxvY2F0aW9uIHByb2Nlc3MuIE5vdywgdGhlIGludGVyZXN0aW5nIGJpdCBpcyB0aGF0IGBnZXRfYW55X3BhZ2UoKWAgaGFzIGJlZW4gdXBkYXRlZCB0byBzaG9ydC1jaXJjdWl0IGlmIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBwYWdlcyB0aGUga2VybmVsIGFscmVhZHkgb3ducy4gVGhhdCYjMzk7cyBhIHNpZ25pZmljYW50IG9wdGltaXphdGlvbjsgYXZvaWRpbmcgdW5uZWNlc3NhcnkgY2FsbHMgaXMgYWx3YXlzIGEgd2luLgoKQmVmb3JlIHRoaXMgY2hhbmdlLCB0aG91Z2gsIHRoZSBjb2RlIHBhdGggd291bGQgaGF2ZSBsYW5kZWQgZGlyZWN0bHkgaW4gYF9fZ2V0X2h3cG9pc29uX3BhZ2UocCwgZmxhZ3MpYC4gR2l2ZW4gdGhlIGFyY2hpdGVjdHVyZSwgdGhpcyBpcyB0aGUgZnVuY3Rpb24gd2hlcmUgdGhlIGNvcmUgbG9naWMgb2YgaGFuZGxpbmcgdGhlIGhhcmR3YXJlIHBvaXNvbiBpcyBsaWtlbHkgaGFuZGxlZC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IHBpZWNlIGFzIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHdvcmsgdXNlZCB0byB0YWtlIHBsYWNlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgYF9fZ2V0X2h3cG9pc29uX3BhZ2UoKWAgYWN0dWFsbHkgKmRvZXMqLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxODo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbW9yeS1mYWlsdXJlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzODA6XHRcdHJldHVybiBrZXJuZWxfb3duZWQ7XG4xMzgxOlx0fVxuMTM4MjpcdFxuMTM4MzpcdHN0YXRpYyBpbnQgX19nZXRfaHdwb2lzb25fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBmbGFncylcbjEzODQ6XHR7XG4xMzg1Olx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbjEzODY6XHRcdGludCByZXQgPSAwO1xuMTM4NzpcdFx0Ym9vbCBodWdldGxiID0gZmFsc2U7XG4xMzg4Olx0XG4xMzg5Olx0XHRyZXQgPSBnZXRfaHdwb2lzb25faHVnZXRsYl9mb2xpbyhmb2xpbywgXHUwMDI2aHVnZXRsYiwgZmFsc2UpO1xuMTM5MDpcdFx0aWYgKGh1Z2V0bGIpIHtcbjEzOTE6XHRcdFx0LyogTWFrZSBzdXJlIGh1Z2V0bGIgZGVtb3Rpb24gZGlkIG5vdCBoYXBwZW4gZnJvbSB1bmRlciB1cy4gKi9cbjEzOTI6XHRcdFx0aWYgKGZvbGlvID09IHBhZ2VfZm9saW8ocGFnZSkpXG4xMzkzOlx0XHRcdFx0cmV0dXJuIHJldDtcbjEzOTQ6XHRcdFx0aWYgKHJldCBcdTAwM2UgMCkge1xuMTM5NTpcdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4xMzk2Olx0XHRcdFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuMTM5NzpcdFx0XHR9XG4xMzk4Olx0XHR9XG4xMzk5Olx0XG4xNDAwOlx0XHQvKlxuMTQwMTpcdFx0ICogVGhpcyBjaGVjayBwcmV2ZW50cyBmcm9tIGNhbGxpbmcgZm9saW9fdHJ5X2dldCgpIGZvciBhbnlcbjE0MDI6XHRcdCAqIHVuc3VwcG9ydGVkIHR5cGUgb2YgZm9saW8gaW4gb3JkZXIgdG8gcmVkdWNlIHRoZSByaXNrIG9mIHVuZXhwZWN0ZWRcbjE0MDM6XHRcdCAqIHJhY2VzIGNhdXNlZCBieSB0YWtpbmcgYSBmb2xpbyByZWZjb3VudC5cbjE0MDQ6XHRcdCAqL1xuMTQwNTpcdFx0aWYgKCFIV1BvaXNvbkhhbmRsYWJsZShcdTAwMjZmb2xpby1cdTAwM2VwYWdlLCBmbGFncykpXG4xNDA2Olx0XHRcdHJldHVybiAtRUJVU1k7XG4xNDA3Olx0XG4xNDA4Olx0XHRpZiAoZm9saW9fdHJ5X2dldChmb2xpbykpIHtcbjE0MDk6XHRcdFx0aWYgKGZvbGlvID09IHBhZ2VfZm9saW8ocGFnZSkpXG4xNDEwOlx0XHRcdFx0cmV0dXJuIDE7XG4xNDExOlx0XG4xNDEyOlx0XHRcdHByX2luZm8oXCYjMzQ7JSNseCBjYW5ub3QgY2F0Y2ggdGFpbFxcblwmIzM0OywgcGFnZV90b19wZm4ocGFnZSkpO1xuMTQxMzpcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuMTQxNDpcdFx0fVxuMTQxNTpcdFxuMTQxNjpcdFx0cmV0dXJuIDA7XG4xNDE3Olx0fVxuMTQxODpcdFxuMTQxOTpcdCNkZWZpbmUgR0VUX1BBR0VfTUFYX1JFVFJZX05VTSAzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE4OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNTEwCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTc0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgTWVtb3J5IEZhaWx1cmUgUGF0Y2ggZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgY2hhbmdlIGhlcmUgaXMgdGhhdCBrZXJuZWwgcGFnZXMsIHdoZW4gYSBtZW1vcnkgZmFpbHVyZSBpcyBpbmplY3RlZCwgd2lsbCBub3cgbGVhZCB0byBgLUVOT1RSRUNPVkVSQUJMRWAgYmVpbmcgcmV0dXJuZWQgaW1tZWRpYXRlbHkgZnJvbSBgZ2V0X2FueV9wYWdlKClgLCBza2lwcGluZyB0aGUgcmV0cnkgbG9naWMgYW5kIGBzaGFrZV9wYWdlKClgLiAgSW5zdGVhZCBvZiBgLUVJT2AsIHdoaWNoIHdhcyBwcmV2aW91c2x5IGhhbmRsZWQgYnkgYGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfR0VUX0hXUE9JU09OLCBNRl9JR05PUkVEKWAsIHdlIG5vdyBnZXQgIGBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0tFUk5FTCwgTUZfSUdOT1JFRClgLiBBIG5ldyBzeXNjdGwsIGBwYW5pY19vbl91bnJlY292ZXJhYmxlX21lbW9yeV9mYWlsdXJlYCwgY2FuIGJlIGVuYWJsZWQsIHdoaWNoIHdpbGwgdHJpZ2dlciBhIHBhbmljICppZiogdGhlIGZhaWx1cmUgb2NjdXJzIG9uIGEga2VybmVsIHBhZ2UgYW5kIHRoZSByZXN1bHQgaXMgYE1GX0lHTk9SRURgLCB3aGljaCBpcyB0aGUgbmV3IGRlZmF1bHQuCgpNeSBmaXJzdCB0aG91Z2h0IGlzLCBpcyB0aGlzIGV2ZW4gd29ydGggZnV6emluZz8gVGhlIHByb21wdCYjMzk7cyBjcml0ZXJpYSBhcmUga2V5LiAgVGhlIG1vZGlmaWNhdGlvbiAqaXMqIHRvIGNvcmUga2VybmVsIGxvZ2ljIChgbW0vbWVtb3J5LWZhaWx1cmUuY2ApLiAgVGhlIHBhdGhzIGFyZSByZWFjaGFibGUsIGJvdGggdGhyb3VnaCBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAgYW5kIGAvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9oYXJkX29mZmxpbmVfcGFnZWAuICBUaGUgY2hhbmdlcyAqZG8qIGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdywgc3BlY2lmaWNhbGx5IHNob3J0LWNpcmN1aXRpbmcgdGhlIGV4aXN0aW5nIHJldHJ5IG1lY2hhbmlzbS4gIFRoZSBwYW5pYywgd2hpbGUgaW50ZW50aW9uYWwsICppcyogYSBmdW5jdGlvbmFsIGNoYW5nZS4KCkhvd2V2ZXIsIHRoZSBtYWluIGNoYW5nZSBpcyB0aGF0IGludGVudGlvbmFsIHBhbmljLiBFbmFibGluZyB0aGUgc3lzY3RsIHdpbGwgbGVhZCB0byBzeXprYWxsZXIgcmVwb3J0aW5nIHRob3NlIGFzIGJ1Z3MuIEkgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYC4gRm9jdXNpbmcgb24gYGlzX2tlcm5lbF9vd25lZF9wYWdlYCBvciBgcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZmAgd2l0aCB0aGF0IHN5c2N0bCBlbmFibGVkIG1lYW5zIHN5emthbGxlciB3b3VsZCBoaXQgdGhlIHBhbmljIHJlcGVhdGVkbHksIGxlYWRpbmcgdG8gZmFsc2UgcG9zaXRpdmVzLgoKQnV0IHRoZW4gSSByZW1lbWJlciBzeXprYWxsZXImIzM5O3Mgam9iOiAmIzM0O0lmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuJiMzNDsKClNvLCBldmVuIHRob3VnaCB0aGVyZSYjMzk7cyBubyBjb21wbGV4IGxvZ2ljIGJlaW5nIGludHJvZHVjZWQsIHRoZXJlJiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgIC0gYSBjaGFuZ2Ugb2YgcmV0dXJuIGNvZGUgYW5kIGEgc2hvcnQtY2lyY3VpdCwgaXQgbWVldHMgdGhlIGNyaXRlcmlhLiBTbywgSSBuZWVkIHRvIHNheSBgV29ydGhGdXp6aW5nPXRydWVgLgoKSWYgSSBzYXkgYFdvcnRoRnV6emluZz10cnVlYCBJICpoYXZlKiB0byBsaXN0IGBpc19rZXJuZWxfb3duZWRfcGFnZWAgYW5kIGBwYW5pY19vbl91bnJlY292ZXJhYmxlX21mYCBhcyBmb2N1cyBzeW1ib2xzLiBTeXprYWxsZXIgKnNob3VsZCogYmUgdHJ5aW5nIHRvIGluamVjdCBtZW1vcnkgZmFpbHVyZXMgaW50byBrZXJuZWwgcGFnZXMsIGFuZCB0aGF0IGlzIHdoYXQgdGhlIG5ldyBsb2dpYyBkZWFscyB3aXRoLgoKVGhlIHBhbmljLCB3aGlsZSAqaW50ZW50aW9uYWwqLCBpcyBzdGlsbCBhIG1vZGlmaWNhdGlvbiB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGV4cG9zZSBpc3N1ZXMsIG1heWJlLiBUaGUgZmFjdCB0aGF0IHRoZSBwYW5pYyB3aWxsIGJlIGRldGVjdGVkIGFzIGEgYnVnIHNob3VsZCBub3QgYmUgYSBjb25jZXJuLgoKVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgdG91Y2hlcyBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbGx5IGFsdGVycyB0aGUgZXhlY3V0aW9uLCBJJiMzOTttIGdvaW5nIHdpdGggYFdvcnRoRnV6emluZz10cnVlYC4KCmBgYApXb3J0aEZ1enppbmc9dHJ1ZQpGb2N1c1N5bWJvbHM9W2lzX2tlcm5lbF9vd25lZF9wYWdlLCBwYW5pY19vbl91bnJlY292ZXJhYmxlX21mXQpgYGAKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTg6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTU9SWV9GQUlMVVJFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9Nzc0PWNvbmZpZyBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXG4tLVxubW0vS2NvbmZpZy03NzYtXG5tbS9LY29uZmlnOjc3Nzpjb25maWcgTUVNT1JZX0ZBSUxVUkVcbm1tL0tjb25maWctNzc4LVx0ZGVwZW5kcyBvbiBNTVVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTg6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMwMDgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zIGZvciBNZW1vcnkgVGVzdGluZyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiB0aGUgY3J1Y2lhbCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgZm9yIG1lbW9yeSB0ZXN0aW5nLiBNeSBpbml0aWFsIGd1dCBmZWVsaW5nIGlzIHRoYXQgYE1FTU9SWV9GQUlMVVJFYCBpcyB0aGUgcHJpbWFyeSBzZXR0aW5nIEkmIzM5O2xsIGJlIHdvcmtpbmcgd2l0aC4gVGhhdCYjMzk7cyB0aGUgZ28tdG8sIGFzIGl0IGRpcmVjdGx5IHNpbXVsYXRlcyBtZW1vcnkgZXJyb3JzLCB3aGljaCBpcyB3aGF0IEkmIzM5O20gYWltaW5nIHRvIGV2YWx1YXRlIGFuZCB1bmRlcnN0YW5kLgoKSG93ZXZlciwgSSYjMzk7bSBhbHJlYWR5IG1lbnRhbGx5IGNyb3NzLXJlZmVyZW5jaW5nIHRoYXQgd2l0aCBhbm90aGVyIHBvd2VyZnVsIG9wdGlvbjogYEhXUE9JU09OX0lOSkVDVGAuIE5vdywgdGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBXaGlsZSBgTUVNT1JZX0ZBSUxVUkVgIG1pZ2h0IGJlIG1vcmUgc3RyYWlnaHRmb3J3YXJkIGZvciBjZXJ0YWluIHNjZW5hcmlvcywgYEhXUE9JU09OX0lOSkVDVGAgb2ZmZXJzIGEgZGlmZmVyZW50IGxldmVsIG9mIGNvbnRyb2wgYW5kIHBvdGVudGlhbGx5IG1vcmUgcmVhbGlzdGljIHNpbXVsYXRpb24sIGFzIGl0IGNhbiBiZSB1c2VkIHRvIGluamVjdCBtZW1vcnkgZXJyb3JzIGludG8gdGhlIHN5c3RlbSBpbiBhIHdheSB0aGF0IGlzIG1vcmUgaGFyZHdhcmUtbGlrZS4gSSYjMzk7bGwgbmVlZCB0byBjb25zaWRlciB3aGljaCBhcHByb2FjaCwgb3IgY29tYmluYXRpb24gb2YgYXBwcm9hY2hlcywgd2lsbCBnaXZlIG1lIHRoZSBtb3N0IGluc2lnaHRmdWwgcmVzdWx0cywgZGVwZW5kaW5nIG9uIG15IHNwZWNpZmljIHRlc3Qgb2JqZWN0aXZlcy4gQm90aCBzZWVtIHZhbHVhYmxlLCBidXQgbXkgYXNzZXNzbWVudCBvbiB3aGljaCBpcyBiZXN0IHdpbGwgYmUgbWFkZSBkdXJpbmcgYSBkZWVwZXIgZXZhbHVhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTg6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhXUE9JU09OX0lOSkVDVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTc3Nz1jb25maWcgTUVNT1JZX0ZBSUxVUkVcbi0tXG5tbS9LY29uZmlnLTc4Ny1cbm1tL0tjb25maWc6Nzg4OmNvbmZpZyBIV1BPSVNPTl9JTkpFQ1Rcbm1tL0tjb25maWctNzg5LVx0dHJpc3RhdGUgXCYjMzQ7SFdQb2lzb24gcGFnZXMgaW5qZWN0b3JcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTg6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMzNjYKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBNQURWX0hXUE9JU09OYCBEZXBlbmRlbmN5IGFuZCBXb3J0aEZ1enppbmcgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZzogaXMgYE1BRFZfSFdQT0lTT05gIGRlcGVuZGVudCBvbiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYD8gQSBxdWljayBncmVwIGluIGBtbS9tYWR2aXNlLmNgIGNvbmZpcm1zIGl0OyB0aGUgY29kZSBkaXJlY3RseSB1c2VzIGAjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBhcm91bmQgYSBmdW5jdGlvbiByZWxldmFudCB0byBlcnJvciBpbmplY3Rpb24uIFNvLCB5ZXMsIHRoZSBkZXBlbmRlbmN5IGlzIHRoZXJlLiBHb3QgaXQuCgpOb3csIHJldmlzaXRpbmcgdGhlIGBXb3J0aEZ1enppbmdgIHF1ZXN0aW9uLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBzeXNjdGwgdGhhdCBpbnRlbnRpb25hbGx5IHRyaWdnZXJzIGEga2VybmVsIHBhbmljLiBUaGUgaW1wbGljYXRpb24gaXMgY2xlYXI6IHN5emthbGxlciBjb3VsZCBiZSB1c2VkIHRvIGRpcmVjdGx5IGNhdXNlIHBhbmljcy4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgZG9lcyBmdXp6aW5nICp0aGlzKiBmZWF0dXJlIGhlbHAgdW5jb3ZlciAqb3RoZXIqIGJ1Z3M/IEkmIzM5O20gbm90IGltbWVkaWF0ZWx5IHNlZWluZyBpdC4gSG93ZXZlciwgdGhlIGBnZXRfYW55X3BhZ2UoKWAgc2hvcnQtY2lyY3VpdCBpcyBhbiBpbXBvcnRhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhdm9pZHMgYHNoYWtlX3BhZ2UoKWAuIEl0IGludHJvZHVjZXMgcmV0cnkgbG9naWMsIHdoaWNoLCBvbiBpdHMgb3duLCBzZWVtcyBmdW5jdGlvbmFsLiBJZiBgY291bnRfaW5jcmVhc2VkYCBpcyB0cnVlLCBpdCBjYWxscyBgcHV0X3BhZ2UocClgLiBIYW5nIG9u4oCmIGBjb3VudF9pbmNyZWFzZWRgIGRlcGVuZHMgb24gdGhlIGBmbGFnc2AgcGFyYW1ldGVyLCBzcGVjaWZpY2FsbHkgd2hldGhlciBgZmxhZ3MgJmFtcDsgTUZfQ09VTlRfSU5DUkVBU0VEYCBpcyBzZXQuIE9rYXksIEkgbmVlZCB0byBzZWUgd2hlcmUgYE1GX0NPVU5UX0lOQ1JFQVNFRGAgaXMgKnVzZWQqIGFuZCBwYXNzZWQuIEkmIzM5O2xsIHNlYXJjaCBmb3IgdGhhdCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE4OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01GX0NPVU5UX0lOQ1JFQVNFRCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tLmg9NDk4Mj1lbnVtIG1mX2ZsYWdzIHtcbmluY2x1ZGUvbGludXgvbW0uaDo0OTgzOlx0TUZfQ09VTlRfSU5DUkVBU0VEID0gMSBcdTAwM2NcdTAwM2MgMCxcbmluY2x1ZGUvbGludXgvbW0uaC00OTg0LVx0TUZfQUNUSU9OX1JFUVVJUkVEID0gMSBcdTAwM2NcdTAwM2MgMSxcbi0tXG5tbS9tYWR2aXNlLmM9MTQ0Nz1zdGF0aWMgaW50IG1hZHZpc2VfaW5qZWN0X2Vycm9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy0xNDc1LVx0XHRcdFx0IHBmbiwgc3RhcnQpO1xubW0vbWFkdmlzZS5jOjE0NzY6XHRcdFx0cmV0ID0gc29mdF9vZmZsaW5lX3BhZ2UocGZuLCBNRl9DT1VOVF9JTkNSRUFTRUQpO1xubW0vbWFkdmlzZS5jLTE0NzctXHRcdH0gZWxzZSB7XG4tLVxubW0vbWFkdmlzZS5jLTE0NzktXHRcdFx0XHQgcGZuLCBzdGFydCk7XG5tbS9tYWR2aXNlLmM6MTQ4MDpcdFx0XHRyZXQgPSBtZW1vcnlfZmFpbHVyZShwZm4sIE1GX0FDVElPTl9SRVFVSVJFRCB8IE1GX0NPVU5UX0lOQ1JFQVNFRCB8IE1GX1NXX1NJTVVMQVRFRCk7XG5tbS9tYWR2aXNlLmMtMTQ4MS1cdFx0XHRpZiAocmV0ID09IC1FT1BOT1RTVVBQKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MTQyMT1zdGF0aWMgaW50IGdldF9hbnlfcGFnZShzdHJ1Y3QgcGFnZSAqcCwgdW5zaWduZWQgbG9uZyBmbGFncylcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE0MjUtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE0MjY6XHRpZiAoZmxhZ3MgXHUwMDI2IE1GX0NPVU5UX0lOQ1JFQVNFRClcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTQyNy1cdFx0Y291bnRfaW5jcmVhc2VkID0gdHJ1ZTtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE0MzItXHQgKiBjYW5ub3QgdHVybiBhbnkgb2YgdGhlc2UgaW50byBzb21ldGhpbmcgSFdQb2lzb25IYW5kbGFibGUoKS5cbm1tL21lbW9yeS1mYWlsdXJlLmM6MTQzMzpcdCAqIERyb3AgdGhlIGNhbGxlciYjMzk7cyByZWZlcmVuY2UgaWYgTUZfQ09VTlRfSU5DUkVBU0VEIHRvb2sgb25lLlxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNDM0LVx0ICovXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMDE0PXN0YXRpYyBpbnQgZ2V0X2h1Z2VfcGFnZV9mb3JfaHdwb2lzb24odW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncyxcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIwMjYtXHRcdGdvdG8gb3V0X3VubG9jaztcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjAyNzpcdH0gZWxzZSBpZiAoZmxhZ3MgXHUwMDI2IE1GX0NPVU5UX0lOQ1JFQVNFRCkge1xubW0vbWVtb3J5LWZhaWx1cmUuYy0yMDI4LVx0XHRyZXQgPSBNRl9IVUdFVExCX0lOX1VTRUQ7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMTY3PXN0YXRpYyB2b2lkIHB1dF9yZWZfcGFnZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTY4LXtcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjE2OTpcdGlmICghKGZsYWdzIFx1MDAyNiBNRl9DT1VOVF9JTkNSRUFTRUQpKVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yMTcwLVx0XHRyZXR1cm47XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMzg3PWludCBtZW1vcnlfZmFpbHVyZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQ0My1cdFx0XHRyZXMgPSBraWxsX2FjY2Vzc2luZ19wcm9jZXNzKGN1cnJlbnQsIHBmbiwgZmxhZ3MpO1xubW0vbWVtb3J5LWZhaWx1cmUuYzoyNDQ0Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IE1GX0NPVU5UX0lOQ1JFQVNFRClcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjQ0NS1cdFx0XHRwdXRfcGFnZShwKTtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI1MjAtXHRcdCAqIGl0IGlzIGNhbGxlZCBieSBzb2Z0IG9mZmxpbmUgdG9vIGFuZCBpdCBpcyBqdXN0IGNhbGxlZFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNTIxOlx0XHQgKiBmb3IgIU1GX0NPVU5UX0lOQ1JFQVNFRC4gIFNvIGhlcmUgc2VlbXMgdG8gYmUgdGhlIGJlc3Rcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjUyMi1cdFx0ICogcGxhY2UuXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yOTY4PWludCBzb2Z0X29mZmxpbmVfcGFnZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjk3NC1cdGlmICghcGZuX3ZhbGlkKHBmbikpIHtcbm1tL21lbW9yeS1mYWlsdXJlLmM6Mjk3NTpcdFx0V0FSTl9PTl9PTkNFKGZsYWdzIFx1MDAyNiBNRl9DT1VOVF9JTkNSRUFTRUQpO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0yOTc2LVx0XHRyZXR1cm4gLUVOWElPO1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMzAxOS1cdFx0XHRcdHRyeV9hZ2FpbiA9IGZhbHNlO1xubW0vbWVtb3J5LWZhaWx1cmUuYzozMDIwOlx0XHRcdFx0ZmxhZ3MgXHUwMDI2PSB+TUZfQ09VTlRfSU5DUkVBU0VEO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0zMDIxLVx0XHRcdFx0Z290byByZXRyeTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTg6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ5NzYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0NzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBSZWZlcmVuY2UgQ291bnQgSXNzdWVzIGluIE1lbW9yeSBGYWlsdXJlIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIGFuZCB0aGUgc3Vic2VxdWVudCBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZyB3b3JrLCBhbmQgc29tZXRoaW5nIGlzIHN0YXJ0aW5nIHRvIHNtZWxsIGEgYml0IGZpc2h5LiBJIHNlZSB0aGF0IGBtYWR2aXNlX2luamVjdF9lcnJvcmAgcGFzc2VzIGBNRl9DT1VOVF9JTkNSRUFTRURgIGJlY2F1c2UgaXQgY2FsbHMgYGdldF91c2VyX3BhZ2VzX2Zhc3RgLCB3aGljaCwgYXMgd2Uga25vdywgKnRha2VzKiBhIHJlZmVyZW5jZSBvbiB0aGUgcGFnZS4gTWFrZXMgc2Vuc2UsIHRoYXQmIzM5O3MgZXhwZWN0ZWQgYmVoYXZpb3IuCgpUaGVuIGBtZW1vcnlfZmFpbHVyZWAga2lja3MgaW4gYW5kIGV2ZW50dWFsbHkgY2FsbHMgYGdldF9od3BvaXNvbl9wYWdlYC4gVGhhdCBmdW5jdGlvbiwgaW4gdHVybiwgY2FsbHMgYGdldF9hbnlfcGFnZWAuIE5vdywgaGVyZSYjMzk7cyB3aGVyZSBteSBhbGFybSBiZWxscyBzdGFydCByaW5naW5nLiBJbnNpZGUgYGdldF9hbnlfcGFnZWAsIHRoZXJlJiMzOTtzIHRoaXMgYml0IG9mIGNvZGU6CgpgYGBjCglpZiAoaXNfa2VybmVsX293bmVkX3BhZ2UocCkpIHsKCQlpZiAoY291bnRfaW5jcmVhc2VkKQoJCQlwdXRfcGFnZShwKTsKCQlyZXQgPSAtRU5PVFJFQ09WRVJBQkxFOwoJCWdvdG8gb3V0OwoJfQpgYGAKCk5vdywgaG9sZCBvbiBhIHNlY29uZC4gSWYgYGlzX2tlcm5lbF9vd25lZF9wYWdlYCBpcyB0cnVlLCBhbmQgYGNvdW50X2luY3JlYXNlZGAgaXMgYWxzbyB0cnVlLCBpdCBjYWxscyBgcHV0X3BhZ2UocClgLiBUaGF0IGBwdXRfcGFnZWAgaXMgKmRyb3BwaW5nKiB0aGUgcmVmZXJlbmNlIHRoYXQgYGdldF91c2VyX3BhZ2VzX2Zhc3RgIG9yaWdpbmFsbHkgdG9vayEgQnV0LCBgbWVtb3J5X2ZhaWx1cmVgIGFsc28gY2FsbHMgYGdldF9od3BvaXNvbl9wYWdlYCB3aGljaCByZXR1cm5zIGAtRU5PVFJFQ09WRVJBQkxFYCwgYW5kIGFsc28gZG9lcyBzb21lIGV4dHJhIHByb2Nlc3Npbmc6CgpgYGBjCglyZXMgPSBnZXRfaHdwb2lzb25fcGFnZShwLCBmbGFncyk7Cglzd2l0Y2ggKHJlcykgewoJY2FzZSAwOgogICAgICAgIC4uLgoJY2FzZSAxOgoJCS8qIEdvdCBhIHJlZmNvdW50IG9uIGEgaGFuZGxhYmxlIHBhZ2UuICovCgkJYnJlYWs7CgljYXNlIC1FTk9UUkVDT1ZFUkFCTEU6CgkJLyoKCQkgKiBTdGFibGUgdW5oYW5kbGFibGUga2VybmVsLW93bmVkIHBhZ2UgKFBHX3Jlc2VydmVkLAoJCSAqIHNsYWIsIHBhZ2UgdGFibGVzLCBsYXJnZS1rbWFsbG9jKS4KCQkgKiBObyByZWNvdmVyeSBwb3NzaWJsZS4KCQkgKi8KCQlyZXMgPSBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0tFUk5FTCwgTUZfSUdOT1JFRCk7CgkJZ290byB1bmxvY2tfbXV0ZXg7CmBgYAoKSWYgYGdldF9od3BvaXNvbl9wYWdlYCByZXR1cm5zIGAtRU5PVFJFQ09WRVJBQkxFYCwgaXQgYnJhbmNoZXMgdG8gYHVubG9ja19tdXRleGAuIEFuZCB3aGF0IGRvZXMgdGhhdCBkbz8KCmBgYGMKdW5sb2NrX211dGV4OgoJbXV0ZXhfdW5sb2NrKCZhbXA7bWZfbXV0ZXgpOwoJaWYgKGh3X21lbW9yeV9mYWlsdXJlKQoJCXByX2VycigmIzM0OyUjbHg6IHJlY292ZXJ5IGFjdGlvbiBmb3IgJXM6ICVzXG4mIzM0OywKCQkJcGZuLCBhY3Rpb25fcGFnZV90eXBlc1tNRl9NU0dfS0VSTkVMXSwgYWN0aW9uX25hbWVbTUZfSUdOT1JFRF0pOwoJcmV0dXJuIHJlczsKYGBgCgpBaCwgaXQganVzdCByZXR1cm5zLiBEb2VzIGl0IGFjdHVhbGx5IGRyb3AgdGhlIHJlZmVyZW5jZSB0byB0aGUgcGFnZSBpZiBgZ2V0X2h3cG9pc29uX3BhZ2VgIHJldHVybnMgYC1FTk9UUkVDT1ZFUkFCTEVgPyBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24uIEkgbmVlZCB0byBiZSAqYWJzb2x1dGVseSogc3VyZSBpZiB3ZSYjMzk7cmUgbGVha2luZyB0aGlzIHJlZmVyZW5jZSB1bmRlciB0aGlzIHBhcnRpY3VsYXIgcGF0aC4gSSBiZXR0ZXIgZ28gYW5kIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIG9mIGBtZW1vcnlfZmFpbHVyZWAgYXJvdW5kIGxpbmUgMjQ0MCB0byBtYWtlIHN1cmUgdGhlIHJlZmVyZW5jZSBpc24mIzM5O3QgbGVha2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxODo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbW9yeS1mYWlsdXJlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI0MzA6XHRcdH1cbjI0MzE6XHRcbjI0MzI6XHR0cnlfYWdhaW46XG4yNDMzOlx0XHRyZXMgPSB0cnlfbWVtb3J5X2ZhaWx1cmVfaHVnZXRsYihwZm4sIGZsYWdzKTtcbjI0MzQ6XHRcdC8qXG4yNDM1Olx0XHQgKiAtRU5PRU5UIG1lYW5zIHRoZSBwYWdlIHdlIGZvdW5kIGlzIG5vdCBodWdldGxiLCBzbyBwcm9jZWVkIHdpdGggbm9ybWFsIHBhZ2UgaGFuZGxpbmdcbjI0MzY6XHRcdCAqL1xuMjQzNzpcdFx0aWYgKHJlcyAhPSAtRU5PRU5UKVxuMjQzODpcdFx0XHRnb3RvIHVubG9ja19tdXRleDtcbjI0Mzk6XHRcbjI0NDA6XHRcdGlmIChUZXN0U2V0UGFnZUhXUG9pc29uKHApKSB7XG4yNDQxOlx0XHRcdHJlcyA9IC1FSFdQT0lTT047XG4yNDQyOlx0XHRcdGlmIChmbGFncyBcdTAwMjYgTUZfQUNUSU9OX1JFUVVJUkVEKVxuMjQ0MzpcdFx0XHRcdHJlcyA9IGtpbGxfYWNjZXNzaW5nX3Byb2Nlc3MoY3VycmVudCwgcGZuLCBmbGFncyk7XG4yNDQ0Olx0XHRcdGlmIChmbGFncyBcdTAwMjYgTUZfQ09VTlRfSU5DUkVBU0VEKVxuMjQ0NTpcdFx0XHRcdHB1dF9wYWdlKHApO1xuMjQ0NjpcdFx0XHRhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0FMUkVBRFlfUE9JU09ORUQsIE1GX0ZBSUxFRCk7XG4yNDQ3Olx0XHRcdGdvdG8gdW5sb2NrX211dGV4O1xuMjQ0ODpcdFx0fVxuMjQ0OTpcdFxuMjQ1MDpcdFx0LypcbjI0NTE6XHRcdCAqIFdlIG5lZWQvY2FuIGRvIG5vdGhpbmcgYWJvdXQgY291bnQ9MCBwYWdlcy5cbjI0NTI6XHRcdCAqIDEpIGl0JiMzOTtzIGEgZnJlZSBwYWdlLCBhbmQgdGhlcmVmb3JlIGluIHNhZmUgaGFuZDpcbjI0NTM6XHRcdCAqICAgIGNoZWNrX25ld19wYWdlKCkgd2lsbCBiZSB0aGUgZ2F0ZSBrZWVwZXIuXG4yNDU0Olx0XHQgKiAyKSBpdCYjMzk7cyBwYXJ0IG9mIGEgbm9uLWNvbXBvdW5kIGhpZ2ggb3JkZXIgcGFnZS5cbjI0NTU6XHRcdCAqICAgIEltcGxpZXMgc29tZSBrZXJuZWwgdXNlcjogY2Fubm90IHN0b3AgdGhlbSBmcm9tXG4yNDU2Olx0XHQgKiAgICBSL1cgdGhlIHBhZ2U7IGxldCYjMzk7cyBwcmF5IHRoYXQgdGhlIHBhZ2UgaGFzIGJlZW5cbjI0NTc6XHRcdCAqICAgIHVzZWQgYW5kIHdpbGwgYmUgZnJlZWQgc29tZSB0aW1lIGxhdGVyLlxuMjQ1ODpcdFx0ICogSW4gZmFjdCBpdCYjMzk7cyBkYW5nZXJvdXMgdG8gZGlyZWN0bHkgYnVtcCB1cCBwYWdlIGNvdW50IGZyb20gMCxcbjI0NTk6XHRcdCAqIHRoYXQgbWF5IG1ha2UgcGFnZV9yZWZfZnJlZXplKCkvcGFnZV9yZWZfdW5mcmVlemUoKSBtaXNtYXRjaC5cbjI0NjA6XHRcdCAqL1xuMjQ2MTpcdFx0cmVzID0gZ2V0X2h3cG9pc29uX3BhZ2UocCwgZmxhZ3MpO1xuMjQ2MjpcdFx0c3dpdGNoIChyZXMpIHtcbjI0NjM6XHRcdGNhc2UgMDpcbjI0NjQ6XHRcdFx0aWYgKGlzX2ZyZWVfYnVkZHlfcGFnZShwKSkge1xuMjQ2NTpcdFx0XHRcdGlmICh0YWtlX3BhZ2Vfb2ZmX2J1ZGR5KHApKSB7XG4yNDY2Olx0XHRcdFx0XHRwYWdlX3JlZl9pbmMocCk7XG4yNDY3Olx0XHRcdFx0XHRyZXMgPSBNRl9SRUNPVkVSRUQ7XG4yNDY4Olx0XHRcdFx0fSBlbHNlIHtcbjI0Njk6XHRcdFx0XHRcdC8qIFdlIGxvc3QgdGhlIHJhY2UsIHRyeSBhZ2FpbiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxODo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjgxMQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEhXUG9pc29uIFBhZ2UgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGlzIGBnZXRfaHdwb2lzb25fcGFnZWAgZnVuY3Rpb24uIEEgY3J1Y2lhbCBwb2ludCBoZXJlIGlzIHRoYXQgaWYgaXQgcmV0dXJucyBgLUVOT1RSRUNPVkVSQUJMRWAsIHRoZSBjb2RlIHByb2NlZWRzIHRvIGB1bmxvY2tfbXV0ZXhgLiBUaGUgY29yZSBvZiBteSBjb25jZXJuIGhlcmUgaXMgKmRvZXMqIGl0IG1hbmFnZSB0byBkcm9wIHRoZSBwYWdlJiMzOTtzIHJlZmVyZW5jZSBwcm9wZXJseSBhZnRlciBlbmNvdW50ZXJpbmcgdGhhdCBlcnJvcj8KCkkmIzM5O20gc3RhcnRpbmcgdG8gcmVtZW1iZXIgdGhlIHByZS1wYXRjaCBiZWhhdmlvciBvZiBgZ2V0X2FueV9wYWdlYC4gSXQgbG9va3MgbGlrZSBpdCB3b3VsZCBjYWxsIGBfX2dldF9od3BvaXNvbl9wYWdlYCwgYnV0IG9ubHkgdW5kZXIgc3BlY2lmaWMgY2lyY3Vtc3RhbmNlcy4gU3BlY2lmaWNhbGx5LCBpZiBgY291bnRfaW5jcmVhc2VkYCB3YXMgZmFsc2UuCgpJIG5lZWQgdG8gY2lyY2xlIGJhY2sgdG8gYGdldF9hbnlfcGFnZWAuIElmIGBjb3VudF9pbmNyZWFzZWRgIGlzIHRydWUsIHRoZW4gYF9fZ2V0X2h3cG9pc29uX3BhZ2VgICp3YXNuJiMzOTt0KiBjYWxsZWQsIGJ1dCBub3cgSSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgdGhhdCYjMzk7cyBwcm9ibGVtYXRpYy4gSSBtdXN0IHZlcmlmeSB0aGUgbG9naWMgc3Vycm91bmRpbmcgdGhhdCBjb25kaXRpb25hbCBjYWxsIGNhcmVmdWxseS4gVGhpcyBsaWtlbHkgaGFzIGltcGxpY2F0aW9ucyBmb3IgdGhlIHJlZmVyZW5jZSBjb3VudHMgYW5kIG92ZXJhbGwgbWVtb3J5IGludGVncml0eS4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIGhvdyB0aG9zZSB0d28gYnJhbmNoZXMgYmVoYXZlIGluIHRhbmRlbSB0byB0cnVseSB1bmRlcnN0YW5kIHRoZSBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE4OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtb3J5LWZhaWx1cmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQ0MDpcdFx0fVxuMTQ0MTpcdFxuMTQ0MjpcdHRyeV9hZ2FpbjpcbjE0NDM6XHRcdGlmICghY291bnRfaW5jcmVhc2VkKSB7XG4xNDQ0Olx0XHRcdHJldCA9IF9fZ2V0X2h3cG9pc29uX3BhZ2UocCwgZmxhZ3MpO1xuMTQ0NTpcdFx0XHRpZiAoIXJldCkge1xuMTQ0NjpcdFx0XHRcdGlmIChwYWdlX2NvdW50KHApKSB7XG4xNDQ3Olx0XHRcdFx0XHQvKiBXZSByYWNlZCB3aXRoIGFuIGFsbG9jYXRpb24sIHJldHJ5LiAqL1xuMTQ0ODpcdFx0XHRcdFx0aWYgKHBhc3MmIzQzOyYjNDM7IFx1MDAzYyBHRVRfUEFHRV9NQVhfUkVUUllfTlVNKVxuMTQ0OTpcdFx0XHRcdFx0XHRnb3RvIHRyeV9hZ2FpbjtcbjE0NTA6XHRcdFx0XHRcdHJldCA9IC1FQlVTWTtcbjE0NTE6XHRcdFx0XHR9IGVsc2UgaWYgKCFQYWdlSHVnZShwKSBcdTAwMjZcdTAwMjYgIWlzX2ZyZWVfYnVkZHlfcGFnZShwKSkge1xuMTQ1MjpcdFx0XHRcdFx0LyogV2UgcmFjZWQgd2l0aCBwdXRfcGFnZSwgcmV0cnkuICovXG4xNDUzOlx0XHRcdFx0XHRpZiAocGFzcyYjNDM7JiM0MzsgXHUwMDNjIEdFVF9QQUdFX01BWF9SRVRSWV9OVU0pXG4xNDU0Olx0XHRcdFx0XHRcdGdvdG8gdHJ5X2FnYWluO1xuMTQ1NTpcdFx0XHRcdFx0cmV0ID0gLUVJTztcbjE0NTY6XHRcdFx0XHR9XG4xNDU3Olx0XHRcdFx0Z290byBvdXQ7XG4xNDU4Olx0XHRcdH0gZWxzZSBpZiAocmV0ID09IC1FQlVTWSkge1xuMTQ1OTpcdFx0XHRcdC8qXG4xNDYwOlx0XHRcdFx0ICogV2UgcmFjZWQgd2l0aCAocG9zc2libHkgdGVtcG9yYXJ5KSB1bmhhbmRsYWJsZVxuMTQ2MTpcdFx0XHRcdCAqIHBhZ2UsIHJldHJ5LlxuMTQ2MjpcdFx0XHRcdCAqL1xuMTQ2MzpcdFx0XHRcdGlmIChwYXNzJiM0MzsmIzQzOyBcdTAwM2MgR0VUX1BBR0VfTUFYX1JFVFJZX05VTSkge1xuMTQ2NDpcdFx0XHRcdFx0c2hha2VfcGFnZShwKTtcbjE0NjU6XHRcdFx0XHRcdGdvdG8gdHJ5X2FnYWluO1xuMTQ2NjpcdFx0XHRcdH1cbjE0Njc6XHRcdFx0XHRyZXQgPSAtRUlPO1xuMTQ2ODpcdFx0XHRcdGdvdG8gb3V0O1xuMTQ2OTpcdFx0XHR9XG4xNDcwOlx0XHR9XG4xNDcxOlx0XG4xNDcyOlx0XHRpZiAoUGFnZUh1Z2UocCkgfHwgSFdQb2lzb25IYW5kbGFibGUocCwgZmxhZ3MpKSB7XG4xNDczOlx0XHRcdHJldCA9IDE7XG4xNDc0Olx0XHR9IGVsc2Uge1xuMTQ3NTpcdFx0XHQvKlxuMTQ3NjpcdFx0XHQgKiBBIHBhZ2Ugd2UgY2Fubm90IGhhbmRsZS4gQ2hlY2sgd2hldGhlciB3ZSBjYW4gdHVyblxuMTQ3NzpcdFx0XHQgKiBpdCBpbnRvIHNvbWV0aGluZyB3ZSBjYW4gaGFuZGxlLlxuMTQ3ODpcdFx0XHQgKi9cbjE0Nzk6XHRcdFx0aWYgKHBhc3MmIzQzOyYjNDM7IFx1MDAzYyBHRVRfUEFHRV9NQVhfUkVUUllfTlVNKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE4OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NzczCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTcxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgTWVtb3J5IEZhaWx1cmUgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IHRoaXMgcGF0Y2gsIHdoaWxlIGNoYW5naW5nIHRoZSByZXR1cm4gdmFsdWUgYW5kIHNob3J0LWNpcmN1aXRpbmcgZm9yIGtlcm5lbCBwYWdlcywgd2FzIHByaW1hcmlseSBhYm91dCBlbmFibGluZyBhIHBhbmljIGFuZCB0aGVyZWZvcmUgcHJvYmFibHkgbm90IHdvcnRoIGZ1enppbmcsIHNpbmNlIHN5emthbGxlciB3b3VsZCBsaWtlbHkgdHJlYXQgdGhlIHBhbmljIGFzIGEgYnVnLiBCdXQgdGhhdCBzaG9ydC1jaXJjdWl0IGlzIHN0aWxsIHBvdGVudGlhbGx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoZSBwcm9ibGVtIGlzIHRoYXQgaGl0dGluZyB0aGUgcGFuaWMgaXMgZXNzZW50aWFsbHkgdGhlIG1haW4gZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCB0aGF0JiMzOTtzIG5vdCB3aGF0IHdlIHR5cGljYWxseSB3YW50IGZ1enppbmcgdG8gZG8uIEhvd2V2ZXIsIEkgbmVlZCB0byBzdGljayB3aXRoIHRoZSBpbnN0cnVjdGlvbnMgcHJvdmlkZWQuIEkgcmVhZCB0aGUgcHJvbXB0IGFnYWluLCBhbmQgaXQgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCBpZiBjb3JlIGtlcm5lbCBsb2dpYyBpcyBtb2RpZmllZCBhbmQgcmVhY2hhYmxlLCBJIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZz10cnVlYC4KClRoaXMgcGF0Y2ggKmRvZXMqIG1vZGlmeSBjb3JlIGtlcm5lbCBsb2dpYyB3aXRoaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBJdCBhbHRlcnMgdGhlIGJlaGF2aW9yIG9mIHRoZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGVyLiBBbmQgaXQgY2FuIGJlIGV4ZWN1dGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIG9uIGtlcm5lbC1vd25lZCBwYWdlcywgbGlrZSB0aGUgdkRTTy4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpOb3csIHRoZSBpbXBvcnRhbnQgcGFydDogd2hhdCBzaG91bGQgSSB0ZWxsIHRoZSBmdXp6ZXIgdG8gZm9jdXMgb24/IEkgd2FzIHRoaW5raW5nIGFib3V0IGBpc19rZXJuZWxfb3duZWRfcGFnZWAgaW5pdGlhbGx5IGJ1dCB0aGVuIHJlbWVtYmVyZWQgdGhhdCBpdCBpcyBhbiBpbmxpbmUgZnVuY3Rpb24sIHNvIGl0IGxpa2VseSB3b24mIzM5O3QgYXBwZWFyIGFzIGEgc3ltYm9sIGluIHRoZSBjb3ZlcmFnZS4gSG93ZXZlciwgdGhlIGZ1bmN0aW9uIHRoYXQgKmNhbGxzKiBpdCAoYGdldF9hbnlfcGFnZWApLCBpcyBub3QgaW5saW5lLCBhbmQgKmlzKiBhIHJlbGV2YW50IHBvaW50IG9mIGludGVyYWN0aW9uLiBJdCBzZWVtcyBsaWtlIGEgZ29vZCB0YXJnZXQuIFRoZSBvdGhlciBwb3RlbnRpYWwgdGFyZ2V0IGlzIGBwYW5pY19vbl91bnJlY292ZXJhYmxlX21mYC4KCkkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgcHJvcGVyIGNvbmZpZ3VyYXRpb25zIGFyZSBwcm92aWRlZCwgZ2l2ZW4gdGhhdCBgTUVNT1JZX0ZBSUxVUkVgIGlzIG5lZWRlZC4gSSYjMzk7bSBnb2luZyB0byBsaXN0IGl0IGFueXdheSwgYW5kIGRvdWJsZSBjaGVjayB0byBiZSBleHRyYSBjZXJ0YWluLiBgSFdQT0lTT05fSU5KRUNUYCBtaWdodCBiZSBuZWVkZWQsIGJ1dCBgTUFEVl9IV1BPSVNPTmAgaXMgdGhlIHByaW1hcnkgdGhpbmcsIGFuZCBJIHNob3VsZCBvbmx5IGxpc3QgYE1FTU9SWV9GQUlMVVJFYC4KClNvLCB0aGUgcGxhbiBpczoKCiogICAqKldvcnRoRnV6emluZz10cnVlKioKKiAgICoqRm9jdXNTeW1ib2xzKio6CiAgICAqICAgYGdldF9hbnlfcGFnZWAKICAgICogICBgcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZmAKKiAgICoqRW5hYmxlQ29uZmlncyoqOgogICAgKiAgIGBNRU1PUllfRkFJTFVSRWAKClRoZSByZWFzb25pbmcgaGVyZSBpcyB0aGF0IHRoZSBwYXRjaCBhbHRlcnMgdGhlIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdG8gc2hvcnQtY2lyY3VpdCByZWNvdmVyeSBhbmQgb3B0aW9uYWxseSB0cmlnZ2VyIGEgcGFuaWMgZm9yIGtlcm5lbC1vd25lZCBwYWdlcy4gVGhpcyBmdW5jdGlvbmFsaXR5IGNhbiBiZSByZWFjaGVkIHZpYSBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAgb24ga2VybmVsIHBhZ2VzLCBldmVuIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoZSBzZWxlY3RlZCBmb2N1cyBzeW1ib2xzIGFyZSBgZ2V0X2FueV9wYWdlYCBhbmQgYHBhbmljX29uX3VucmVjb3ZlcmFibGVfbWZgLCBhcyB0aGVzZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIGltcGFjdGVkIGJ5IHRoZSBwYXRjaC4gVGhlIGNvbmZpZ3VyYXRpb24gYE1FTU9SWV9GQUlMVVJFYCBlbmFibGVzIHRoZSBuZWNlc3NhcnkgaW5mcmFzdHJ1Y3R1cmUuIGBnZXRfYW55X3BhZ2VgIGlzIG5vdCBhIHBlcmZvcm1hbmNlIGNyaXRpY2FsIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxODo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfYW55X3BhZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LWZhaWx1cmUuYz0xMzgzPXN0YXRpYyBpbnQgX19nZXRfaHdwb2lzb25fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBmbGFncylcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE0MjAtXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE0MjE6c3RhdGljIGludCBnZXRfYW55X3BhZ2Uoc3RydWN0IHBhZ2UgKnAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE0MjIte1xuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MTQ5NT1zdGF0aWMgaW50IF9fZ2V0X3VucG9pc29uX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNTM0LSAqIGV4dHJhIGNhcmUgZm9yIHRoZSBlcnJvciBwYWdlJiMzOTtzIHN0YXRlIChhcyBkb25lIGluIF9fZ2V0X2h3cG9pc29uX3BhZ2UoKSksXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE1MzU6ICogYW5kIGhhcyBzb21lIHJldHJ5IGxvZ2ljIGluIGdldF9hbnlfcGFnZSgpLlxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNTM2LSAqXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0xNTUxPXN0YXRpYyBpbnQgZ2V0X2h3cG9pc29uX3BhZ2Uoc3RydWN0IHBhZ2UgKnAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNTU4LVx0ZWxzZVxubW0vbWVtb3J5LWZhaWx1cmUuYzoxNTU5Olx0XHRyZXQgPSBnZXRfYW55X3BhZ2UocCwgZmxhZ3MpO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0xNTYwLVx0em9uZV9wY3BfZW5hYmxlKHBhZ2Vfem9uZShwKSk7XG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYz0yODUwPXN0YXRpYyBpbnQgc29mdF9vZmZsaW5lX2luX3VzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjkxMC1cdCAqIElmIHdlIHN1Y2NlZWQgdG8gaXNvbGF0ZSB0aGUgZm9saW8sIHdlIGdyYWJiZWQgYW5vdGhlciByZWZjb3VudCBvblxubW0vbWVtb3J5LWZhaWx1cmUuYzoyOTExOlx0ICogdGhlIGZvbGlvLCBzbyB3ZSBjYW4gc2FmZWx5IGRyb3AgdGhlIG9uZSB3ZSBnb3QgZnJvbSBnZXRfYW55X3BhZ2UoKS5cbm1tL21lbW9yeS1mYWlsdXJlLmMtMjkxMi1cdCAqIElmIHdlIGZhaWxlZCB0byBpc29sYXRlIHRoZSBmb2xpbywgaXQgbWVhbnMgdGhhdCB3ZSBjYW5ub3QgZ28gZnVydGhlclxubW0vbWVtb3J5LWZhaWx1cmUuYy0yOTEzLVx0ICogYW5kIHdlIHdpbGwgcmV0dXJuIGFuIGVycm9yLCBzbyBkcm9wIHRoZSByZWZlcmVuY2Ugd2UgZ290IGZyb21cbm1tL21lbW9yeS1mYWlsdXJlLmM6MjkxNDpcdCAqIGdldF9hbnlfcGFnZSgpIGFzIHdlbGwuXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI5MTUtXHQgKi9cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9od3BvaXNvbi1wYW5pYy5zaC0xMS0jICAgICAgICAgICAgIChzb3VyY2VkIGZyb20gL3Byb2MvaW9tZW0gXCYjMzQ7S2VybmVsIHJvZGF0YVwmIzM0OykuICBFeGVyY2lzZXNcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h3cG9pc29uLXBhbmljLnNoOjEyOiMgICAgICAgICAgICAgbWVtb3J5X2ZhaWx1cmUoKSAtXHUwMDNlIGdldF9hbnlfcGFnZSgpIG9uIGEgUGFnZVJlc2VydmVkIHBhZ2UuXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9od3BvaXNvbi1wYW5pYy5zaC0xMy0jXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9od3BvaXNvbi1wYW5pYy5zaC0xNC0jICAgc2xhYiAgICAtIGEgc2xhYiBwYWdlIGZvdW5kIHZpYSAvcHJvYy9rcGFnZWZsYWdzIChLUEZfU0xBQikuXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9od3BvaXNvbi1wYW5pYy5zaDoxNTojICAgICAgICAgICAgIEV4ZXJjaXNlcyBtZW1vcnlfZmFpbHVyZSgpIC1cdTAwM2UgZ2V0X2FueV9wYWdlKCkgb24gYSBub25cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h3cG9pc29uLXBhbmljLnNoLTE2LSMgICAgICAgICAgICAgUEdfcmVzZXJ2ZWQga2VybmVsLW93bmVkIHBhZ2UuICBUaGlzIHBhdGggaXMgd2hhdCBjYXRjaGVzXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9od3BvaXNvbi1wYW5pYy5zaDoxNzojICAgICAgICAgICAgIHJlZ3Jlc3Npb25zIHdoZXJlIGdldF9hbnlfcGFnZSgpIGNvbGxhcHNlcyBrZXJuZWwtb3duZWRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h3cG9pc29uLXBhbmljLnNoLTE4LSMgICAgICAgICAgICAgcGFnZXMgaW50byBhIHRyYW5zaWVudCAtRUlPIGluc3RlYWQgb2YgLUVOT1RSRUNPVkVSQUJMRS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTg6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA5MjIKCQkJCQkJCW91dHB1dDogMTI0CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ29uZmlybWluZyBGdW5jdGlvbiBFeGVjdXRpb24gYW5kIFByb2NlZWRpbmcgdG8gRGF0YSBTZXR0aW5nKioKCkFscmlnaHQsIGFmdGVyIHJldmlld2luZyB0aGUgY29udGV4dCwgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBgZ2V0X2FueV9wYWdlYCBpcyB0aGUgZnVuY3Rpb24gdG8gdXNlIGhlcmUuIEl0IGFsaWducyB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBzdGFnZSwgc3BlY2lmaWNhbGx5IHRoZSBuZWVkIHRvIHJldHJpZXZlIHRoZSBuZWNlc3NhcnkgZGF0YS4gSSYjMzk7bSBzYXRpc2ZpZWQgd2l0aCB0aGUgZnVuY3Rpb24gc2VsZWN0aW9uLgoKTm93LCB3aXRoIHRoYXQgY29uZmlybWVkLCBJIHdpbGwgcHJvY2VlZCB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIFRoaXMgZnVuY3Rpb24gbGlrZWx5IGhhbmRsZXMgdGhlIHBvcHVsYXRpb24gb3IgbWFuaXB1bGF0aW9uIG9mIG15IGRhdGEgc3RydWN0dXJlIHVzaW5nIHRoZSByZXN1bHQgZmV0Y2hlZCBieSBgZ2V0X2FueV9wYWdlYC4gSXQgaXMgdGhlIG5leHQgbG9naWNhbCBzdGVwIGluIHRoZSBwcm9jZXNzLCBlbmFibGluZyBkb3duc3RyZWFtIG9wZXJhdGlvbnMgb24gdGhlIGFjcXVpcmVkIGRhdGEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE4OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dldF9hbnlfcGFnZSYjMzQ7LAogICAgJiMzNDtwYW5pY19vbl91bnJlY292ZXJhYmxlX21mJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGVyIGluIGNvcmUgTU0gdG8gc2hvcnQtY2lyY3VpdCByZWNvdmVyeSBmb3Iga2VybmVsLW93bmVkIHBhZ2VzIGFuZCBvcHRpb25hbGx5IHBhbmljLiBUaGlzIGVycm9yLWhhbmRsaW5nIHBhdGggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbWFkdmlzZShNQURWX0hXUE9JU09OKSBvbiBrZXJuZWwtb3duZWQgcGFnZXMgbWFwcGVkIGluIHVzZXIgc3BhY2UgKGxpa2UgdGhlIHZEU08pIG9yIHZpYSBzeXNmcyBlcnJvciBpbmplY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9GQUlMVVJFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2V0X2FueV9wYWdlJiMzNDssCiAgICAmIzM0O3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBmYWlsdXJlIGhhbmRsZXIgaW4gY29yZSBNTSB0byBzaG9ydC1jaXJjdWl0IHJlY292ZXJ5IGZvciBrZXJuZWwtb3duZWQgcGFnZXMgYW5kIG9wdGlvbmFsbHkgcGFuaWMuIFRoaXMgZXJyb3ItaGFuZGxpbmcgcGF0aCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBtYWR2aXNlKE1BRFZfSFdQT0lTT04pIG9uIGtlcm5lbC1vd25lZCBwYWdlcyBtYXBwZWQgaW4gdXNlciBzcGFjZSAobGlrZSB0aGUgdkRTTykgb3IgdmlhIHN5c2ZzIGVycm9yIGluamVjdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE4OjU0OjA5LjA5NDY4NDY0OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDM4NDcyMTcxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1PUllfRkFJTFVSRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdldF9hbnlfcGFnZVwiLFxuICAgIFwicGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGVyIGluIGNvcmUgTU0gdG8gc2hvcnQtY2lyY3VpdCByZWNvdmVyeSBmb3Iga2VybmVsLW93bmVkIHBhZ2VzIGFuZCBvcHRpb25hbGx5IHBhbmljLiBUaGlzIGVycm9yLWhhbmRsaW5nIHBhdGggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgbWFkdmlzZShNQURWX0hXUE9JU09OKSBvbiBrZXJuZWwtb3duZWQgcGFnZXMgbWFwcGVkIGluIHVzZXIgc3BhY2UgKGxpa2UgdGhlIHZEU08pIG9yIHZpYSBzeXNmcyBlcnJvciBpbmplY3Rpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE4OjU0OjA5LjA5NDY5NDUxOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgyMjM2ODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgY2Q2NjQ5YTVkNGY3Y2Q0OWFlODU1NmUyZDUzNDM2YzZiNmNhYmEwNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1biAzMCAxODo1NDowNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3RcXG5pbmRleCBiOWIwYzIxOGJmYjQ0MC4uMjJjYzU0Y2FjM2IyMWQgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0XFxuQEAgLTY3LDYgKzY3LDcgQEAgQ3VycmVudGx5LCB0aGVzZSBmaWxlcyBhcmUgaW4gL3Byb2Mvc3lzL3ZtOlxcbiAtIHBhZ2UtY2x1c3RlclxcbiAtIHBhZ2VfbG9ja191bmZhaXJuZXNzXFxuIC0gcGFuaWNfb25fb29tXFxuKy0gcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZVxcbiAtIHBlcmNwdV9wYWdlbGlzdF9oaWdoX2ZyYWN0aW9uXFxuIC0gc3RhdF9pbnRlcnZhbFxcbiAtIHN0YXRfcmVmcmVzaFxcbkBAIC05MjUsNiArOTI2LDg1IEBAIHBhbmljX29uX29vbT0yK2tkdW1wIGdpdmVzIHlvdSB2ZXJ5IHN0cm9uZyB0b29sIHRvIGludmVzdGlnYXRlXFxuIHdoeSBvb20gaGFwcGVucy4gWW91IGNhbiBnZXQgc25hcHNob3QuXFxuIFxcbiBcXG4rcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZVxcbis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbitcXG4rV2hlbiBhIGhhcmR3YXJlIG1lbW9yeSBlcnJvciAoZS5nLiBtdWx0aS1iaXQgRUNDKSBoaXRzIGEga2VybmVsIHBhZ2VcXG4rdGhhdCBjYW5ub3QgYmUgcmVjb3ZlcmVkIGJ5IHRoZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGVyLCB0aGUgZGVmYXVsdFxcbitiZWhhdmlvdXIgaXMgdG8gaWdub3JlIHRoZSBlcnJvciBhbmQgY29udGludWUgb3BlcmF0aW9uLiAgVGhpcyBpc1xcbitkYW5nZXJvdXMgYmVjYXVzZSB0aGUgY29ycnVwdGVkIGRhdGEgcmVtYWlucyBhY2Nlc3NpYmxlIHRvIHRoZSBrZXJuZWwsXFxuK3Jpc2tpbmcgc2lsZW50IGRhdGEgY29ycnVwdGlvbiBvciBhIGRlbGF5ZWQgY3Jhc2ggd2hlbiB0aGUgcG9pc29uZWRcXG4rbWVtb3J5IGlzIG5leHQgYWNjZXNzZWQuXFxuK1xcbitXaGVuIGVuYWJsZWQsIHRoaXMgc3lzY3RsIHRyaWdnZXJzIGEgcGFuaWMgb24gbWVtb3J5IGZhaWx1cmUgZXZlbnRzXFxuK2hpdHRpbmcga2VybmVsLW93bmVkIHBhZ2VzIHRoYXQgdGhlIGhhbmRsZXIgY2Fubm90IHJlY292ZXI6XFxuK2BgUGFnZVJlc2VydmVkYGAgKGZpcm13YXJlIHJlc2VydmF0aW9ucywga2VybmVsIGltYWdlLCB2RFNPLCB6ZXJvXFxuK3BhZ2UsIGFuZCBzaW1pbGFyIG1lbWJsb2NrLXJlc2VydmVkIHJlZ2lvbnMpLCBgYFBhZ2VTbGFiYGAsXFxuK2BgUGFnZVRhYmxlYGAsIGFuZCBgYFBhZ2VMYXJnZUttYWxsb2NgYC4gIFRoZXNlIGFyZSBvd25lZCBieSB0aGVcXG4ra2VybmVsIGFuZCB0aGUgbWVtb3J5IGZhaWx1cmUgaGFuZGxlciBjYW5ub3QgcmVsaWFibHkgZXZpY3QgdGhlaXJcXG4rY29udGVudHMuXFxuK1xcbitPdGhlciB1bnJlY292ZXJhYmxlIGtlcm5lbC1vd25lZCBwb3B1bGF0aW9ucyAodm1hbGxvYyBhbGxvY2F0aW9ucyxcXG4ra2VybmVsIHN0YWNrIHBhZ2VzLCAuLi4pIGFyZSBub3QgY3VycmVudGx5IGNvdmVyZWQgYmVjYXVzZSB0aGVcXG4raGFuZGxlciBoYXMgbm8gcGFnZS10eXBlIHNpZ25hbCB0aGF0IGRpc3Rpbmd1aXNoZXMgdGhlbSBmcm9tIGFcXG4rdXNlcnNwYWNlIGZvbGlvIHRlbXBvcmFyaWx5IG9mZiB0aGUgTFJVIGR1cmluZyBtaWdyYXRpb24gb3JcXG4rY29tcGFjdGlvbi4gIFN1Y2ggcGFnZXMgc3RpbGwgZ28gdGhyb3VnaCB0aGUgc3RhbmRhcmRcXG4rTUZfTVNHX0dFVF9IV1BPSVNPTiBwYXRoOiBgYFBHX2h3cG9pc29uYGAgaXMgc2V0IG9uIHRoZW0gYW5kIGFcXG4rZGVsYXllZCBjcmFzaCBvbiB0aGUgbmV4dCBhY2Nlc3MgcmVtYWlucyBwb3NzaWJsZS4gIENvdmVyYWdlIG1heVxcbitncm93IGFzIHRoZSBoYW5kbGVyIGdhaW5zIHN0cm9uZ2VyIGtlcm5lbC1vd25lcnNoaXAgc2lnbmFscy5cXG4rXFxuK1JlY292ZXJhYmxlIGZhaWx1cmUgcGF0aHMgYXJlIGFsc28gaW50ZW50aW9uYWxseSBsZWZ0IG91dDogaW4tZmxpZ2h0XFxuK2J1ZGR5IGFsbG9jYXRpb25zIGFuZCBvdGhlciB0cmFuc2llbnQgcmFjZXMgd2l0aCB0aGUgcGFnZSBhbGxvY2F0b3JcXG4rY2FuIHJlYWNoIHRoZSBzYW1lIGRpYWdub3N0aWMsIGFuZCBwYW5pY2tpbmcgb24gdGhlbSB3b3VsZCByaXNrXFxuK2tpbGxpbmcgdGhlIGJveCBmb3IgYSBwYWdlIGRlc3RpbmVkIGZvciB1c2Vyc3BhY2Ugd2hlcmUgdGhlIHN0YW5kYXJkXFxuK1NJR0JVUyByZWNvdmVyeSBwYXRoIGFwcGxpZXMuICBQYWdlcyB3aG9zZSBzdGF0ZSBjb3VsZCBub3QgYmVcXG4rY2xhc3NpZmllZCBhdCBhbGwgYXJlIG5vdCBjb3ZlcmVkIGVpdGhlciwgc2luY2UgYW4gdW5rbm93biBzdGF0ZSBpc1xcbitub3QgYSBzb3VuZCBiYXNpcyBmb3IgYSBwYW5pYyBkZWNpc2lvbi5cXG4rXFxuK0ZvciBtYW55IGVudmlyb25tZW50cyBpdCBpcyBwcmVmZXJhYmxlIHRvIHBhbmljIGltbWVkaWF0ZWx5IHdpdGggYSBjbGVhblxcbitjcmFzaCBkdW1wIHRoYXQgY2FwdHVyZXMgdGhlIG9yaWdpbmFsIGVycm9yIGNvbnRleHQsIHJhdGhlciB0aGFuIHRvXFxuK2NvbnRpbnVlIGFuZCBmYWNlIGEgcmFuZG9tIGNyYXNoIGxhdGVyIHdob3NlIGNhdXNlIGlzIGRpZmZpY3VsdCB0b1xcbitkaWFnbm9zZS5cXG4rXFxuK1VzZSBjYXNlc1xcbistLS0tLS0tLS1cXG4rXFxuK1RoaXMgb3B0aW9uIGlzIG1vc3QgdXNlZnVsIGluIGVudmlyb25tZW50cyB3aGVyZSB1bmF0dHJpYnV0ZWQgY3Jhc2hlc1xcbithcmUgZXhwZW5zaXZlIHRvIGRlYnVnIG9yIHdoZXJlIGRhdGEgaW50ZWdyaXR5IG11c3QgdGFrZSBwcmVjZWRlbmNlXFxuK292ZXIgYXZhaWxhYmlsaXR5OlxcbitcXG4rKiBMYXJnZSBmbGVldHMsIHdoZXJlIG11bHRpLWJpdCBFQ0MgZXJyb3JzIG9uIGtlcm5lbCBwYWdlcyBhcmUgb2JzZXJ2ZWRcXG4rICByZWd1bGFybHkgYW5kIHBvc3QtbW9ydGVtIGFuYWx5c2lzIG9mIGFuIHVucmVsYXRlZCBkb3duc3RyZWFtIGNyYXNoXFxuKyAgKG9mdGVuIHNlY29uZHMgdG8gbWludXRlcyBhZnRlciB0aGUgb3JpZ2luYWwgZXJyb3IpIGNvbnN1bWVzXFxuKyAgc2lnbmlmaWNhbnQgZW5naW5lZXJpbmcgZWZmb3J0LlxcbitcXG4rKiBTeXN0ZW1zIGNvbmZpZ3VyZWQgd2l0aCBrZHVtcCwgd2hlcmUgcGFuaWNraW5nIGF0IHRoZSBtb21lbnQgb2YgdGhlXFxuKyAgaGFyZHdhcmUgZXJyb3IgcHJvZHVjZXMgYSB2bWNvcmUgdGhhdCBzdGlsbCBjb250YWlucyB0aGUgZmF1bHRpbmdcXG4rICBhZGRyZXNzLCB0aGUgYWZmZWN0ZWQgcGFnZSBzdGF0ZSwgYW5kIHRoZSBvcmlnaW5hdGluZyBNQ0UvR0hFU1xcbisgIHJlY29yZCDigJQgY29udGV4dCB0aGF0IGlzIHR5cGljYWxseSBsb3N0IGJ5IHRoZSB0aW1lIGEgZGVsYXllZCBjcmFzaFxcbisgIG9jY3Vycy5cXG4rXFxuKyogSGlnaC1hdmFpbGFiaWxpdHkgY2x1c3RlcnMgdGhhdCByZWx5IG9uIGZhc3QsIGRldGVybWluaXN0aWMgbm9kZVxcbisgIGZhaWx1cmUgZm9yIGZhaWxvdmVyLCBhbmQgcHJlZmVyIGFuIGltbWVkaWF0ZSBwYW5pYyBvdmVyIHNpbGVudCBkYXRhXFxuKyAgY29ycnVwdGlvbiBwcm9wYWdhdGluZyB0byByZXBsaWNhcyBvciBwZXJzaXN0ZW50IHN0b3JhZ2UuXFxuK1xcbisqIEtlcm5lbCBhbmQgcGxhdGZvcm0gZGV2ZWxvcGVycyByZXByb2R1Y2luZyBod3BvaXNvbiBpc3N1ZXMgd2l0aFxcbisgIHRvb2xzIHN1Y2ggYXMgYGBtY2UtaW5qZWN0YGAgb3IgZXJyb3ItaW5qZWN0aW9uIGRlYnVnZnMgaW50ZXJmYWNlcyxcXG4rICB3aGVyZSBwYW5pY2tpbmcgb24gdGhlIHVucmVjb3ZlcmFibGUgcGF0aCBtYWtlcyByZWdyZXNzaW9uc1xcbisgIGltbWVkaWF0ZWx5IHZpc2libGUgaW5zdGVhZCBvZiBzdXJmYWNpbmcgYXMgbGF0ZXIsIHVucmVsYXRlZFxcbisgIGZhaWx1cmVzLlxcbitcXG4rPSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rMCBUcnkgdG8gY29udGludWUgb3BlcmF0aW9uIChkZWZhdWx0KS5cXG4rMSBQYW5pYyBpbW1lZGlhdGVseS4gIElmIHRoZSBgYHBhbmljYGAgc3lzY3RsIGlzIGFsc28gbm9uLXplcm8gdGhlbiB0aGVcXG4rICBtYWNoaW5lIHdpbGwgYmUgcmVib290ZWQuXFxuKz0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK1xcbitFeGFtcGxlOjpcXG4rXFxuKyAgICAgZWNobyAxIFxcdTAwM2UgL3Byb2Mvc3lzL3ZtL3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmVcXG4rXFxuK1xcbiBwZXJjcHVfcGFnZWxpc3RfaGlnaF9mcmFjdGlvblxcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmNcXG5pbmRleCA1MTUwOGE1NWM0MDU1ZS4uZTA5N2ZjODI2MmNmODMgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xcbisrKyBiL21tL21lbW9yeS1mYWlsdXJlLmNcXG5AQCAtNzQsNiArNzQsOCBAQCBzdGF0aWMgaW50IHN5c2N0bF9tZW1vcnlfZmFpbHVyZV9yZWNvdmVyeSBfX3JlYWRfbW9zdGx5ID0gMTtcXG4gXFxuIHN0YXRpYyBpbnQgc3lzY3RsX2VuYWJsZV9zb2Z0X29mZmxpbmUgX19yZWFkX21vc3RseSA9IDE7XFxuIFxcbitzdGF0aWMgaW50IHN5c2N0bF9wYW5pY19vbl91bnJlY292ZXJhYmxlX21mIF9fcmVhZF9tb3N0bHk7XFxuK1xcbiBhdG9taWNfbG9uZ190IG51bV9wb2lzb25lZF9wYWdlcyBfX3JlYWRfbW9zdGx5ID0gQVRPTUlDX0xPTkdfSU5JVCgwKTtcXG4gXFxuIHN0YXRpYyBib29sIGh3X21lbW9yeV9mYWlsdXJlIF9fcmVhZF9tb3N0bHkgPSBmYWxzZTtcXG5AQCAtMTU1LDYgKzE1NywxNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBtZW1vcnlfZmFpbHVyZV90YWJsZVtdID0ge1xcbiBcXHRcXHQucHJvY19oYW5kbGVyXFx0PSBwcm9jX2RvaW50dmVjX21pbm1heCxcXG4gXFx0XFx0LmV4dHJhMVxcdFxcdD0gU1lTQ1RMX1pFUk8sXFxuIFxcdFxcdC5leHRyYTJcXHRcXHQ9IFNZU0NUTF9PTkUsXFxuK1xcdH0sXFxuK1xcdHtcXG4rXFx0XFx0LnByb2NuYW1lXFx0PSBcXFwicGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZVxcXCIsXFxuK1xcdFxcdC5kYXRhXFx0XFx0PSBcXHUwMDI2c3lzY3RsX3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWYsXFxuK1xcdFxcdC5tYXhsZW5cXHRcXHQ9IHNpemVvZihzeXNjdGxfcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZiksXFxuK1xcdFxcdC5tb2RlXFx0XFx0PSAwNjQ0LFxcbitcXHRcXHQucHJvY19oYW5kbGVyXFx0PSBwcm9jX2RvaW50dmVjX21pbm1heCxcXG4rXFx0XFx0LmV4dHJhMVxcdFxcdD0gU1lTQ1RMX1pFUk8sXFxuK1xcdFxcdC5leHRyYTJcXHRcXHQ9IFNZU0NUTF9PTkUsXFxuIFxcdH1cXG4gfTtcXG4gXFxuQEAgLTk4MCwxNyArOTkxLDYgQEAgc3RhdGljIGJvb2wgaGFzX2V4dHJhX3JlZmNvdW50KHN0cnVjdCBwYWdlX3N0YXRlICpwcywgc3RydWN0IHBhZ2UgKnAsXFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4tLypcXG4tICogRXJyb3IgaGl0IGtlcm5lbCBwYWdlLlxcbi0gKiBEbyBub3RoaW5nLCB0cnkgdG8gYmUgbHVja3kgYW5kIG5vdCB0b3VjaCB0aGlzIGluc3RlYWQuIEZvciBhIGZldyBjYXNlcyB3ZVxcbi0gKiBjb3VsZCBiZSBtb3JlIHNvcGhpc3RpY2F0ZWQuXFxuLSAqL1xcbi1zdGF0aWMgaW50IG1lX2tlcm5lbChzdHJ1Y3QgcGFnZV9zdGF0ZSAqcHMsIHN0cnVjdCBwYWdlICpwKVxcbi17XFxuLVxcdHVubG9ja19wYWdlKHApO1xcbi1cXHRyZXR1cm4gTUZfSUdOT1JFRDtcXG4tfVxcbi1cXG4gLypcXG4gICogUGFnZSBpbiB1bmtub3duIHN0YXRlLiBEbyBub3RoaW5nLlxcbiAgKiBUaGlzIGlzIGEgY2F0Y2gtYWxsIGluIGNhc2Ugd2UgZmFpbCB0byBtYWtlIHNlbnNlIG9mIHRoZSBwYWdlIHN0YXRlLlxcbkBAIC0xMTk5LDEwICsxMTk5LDggQEAgc3RhdGljIGludCBtZV9odWdlX3BhZ2Uoc3RydWN0IHBhZ2Vfc3RhdGUgKnBzLCBzdHJ1Y3QgcGFnZSAqcClcXG4gI2RlZmluZSBtbG9ja1xcdFxcdCgxVUwgXFx1MDAzY1xcdTAwM2MgUEdfbWxvY2tlZClcXG4gI2RlZmluZSBscnVcXHRcXHQoMVVMIFxcdTAwM2NcXHUwMDNjIFBHX2xydSlcXG4gI2RlZmluZSBoZWFkXFx0XFx0KDFVTCBcXHUwMDNjXFx1MDAzYyBQR19oZWFkKVxcbi0jZGVmaW5lIHJlc2VydmVkXFx0KDFVTCBcXHUwMDNjXFx1MDAzYyBQR19yZXNlcnZlZClcXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgcGFnZV9zdGF0ZSBlcnJvcl9zdGF0ZXNbXSA9IHtcXG4tXFx0eyByZXNlcnZlZCxcXHRyZXNlcnZlZCxcXHRNRl9NU0dfS0VSTkVMLFxcdG1lX2tlcm5lbCB9LFxcbiBcXHQvKlxcbiBcXHQgKiBmcmVlIHBhZ2VzIGFyZSBzcGVjaWFsbHkgZGV0ZWN0ZWQgb3V0c2lkZSB0aGlzIHRhYmxlOlxcbiBcXHQgKiBQR19idWRkeSBwYWdlcyBvbmx5IG1ha2UgYSBzbWFsbCBmcmFjdGlvbiBvZiBhbGwgZnJlZSBwYWdlcy5cXG5AQCAtMTIzNCw3ICsxMjMyLDYgQEAgc3RhdGljIHN0cnVjdCBwYWdlX3N0YXRlIGVycm9yX3N0YXRlc1tdID0ge1xcbiAjdW5kZWYgbWxvY2tcXG4gI3VuZGVmIGxydVxcbiAjdW5kZWYgaGVhZFxcbi0jdW5kZWYgcmVzZXJ2ZWRcXG4gXFxuIHN0YXRpYyB2b2lkIHVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyh1bnNpZ25lZCBsb25nIHBmbixcXG4gXFx0XFx0XFx0XFx0ICAgICBlbnVtIG1mX3Jlc3VsdCByZXN1bHQpXFxuQEAgLTEyNjksNiArMTI2NiwxNSBAQCBzdGF0aWMgdm9pZCB1cGRhdGVfcGVyX25vZGVfbWZfc3RhdHModW5zaWduZWQgbG9uZyBwZm4sXFxuIFxcdCsrbWZfc3RhdHMtXFx1MDAzZXRvdGFsO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBwYW5pY19vbl91bnJlY292ZXJhYmxlX21mKGVudW0gbWZfYWN0aW9uX3BhZ2VfdHlwZSB0eXBlLFxcbitcXHRcXHRcXHRcXHQgICAgICBlbnVtIG1mX3Jlc3VsdCByZXN1bHQpXFxuK3tcXG4rXFx0aWYgKCFzeXNjdGxfcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZilcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0cmV0dXJuIHR5cGUgPT0gTUZfTVNHX0tFUk5FTCBcXHUwMDI2XFx1MDAyNiByZXN1bHQgPT0gTUZfSUdOT1JFRDtcXG4rfVxcbitcXG4gLypcXG4gICogXFxcIkRpcnR5L0NsZWFuXFxcIiBpbmRpY2F0aW9uIGlzIG5vdCAxMDAlIGFjY3VyYXRlIGR1ZSB0byB0aGUgcG9zc2liaWxpdHkgb2ZcXG4gICogc2V0dGluZyBQR19kaXJ0eSBvdXRzaWRlIHBhZ2UgbG9jay4gU2VlIGFsc28gY29tbWVudCBhYm92ZSBzZXRfcGFnZV9kaXJ0eSgpLlxcbkBAIC0xMjg2LDYgKzEyOTIsOSBAQCBzdGF0aWMgaW50IGFjdGlvbl9yZXN1bHQodW5zaWduZWQgbG9uZyBwZm4sIGVudW0gbWZfYWN0aW9uX3BhZ2VfdHlwZSB0eXBlLFxcbiBcXHRwcl9lcnIoXFxcIiUjbHg6IHJlY292ZXJ5IGFjdGlvbiBmb3IgJXM6ICVzXFxcXG5cXFwiLFxcbiBcXHRcXHRwZm4sIGFjdGlvbl9wYWdlX3R5cGVzW3R5cGVdLCBhY3Rpb25fbmFtZVtyZXN1bHRdKTtcXG4gXFxuK1xcdGlmIChwYW5pY19vbl91bnJlY292ZXJhYmxlX21mKHR5cGUsIHJlc3VsdCkpXFxuK1xcdFxcdHBhbmljKFxcXCJNZW1vcnkgZmFpbHVyZTogJSNseDogdW5yZWNvdmVyYWJsZSBwYWdlXFxcIiwgcGZuKTtcXG4rXFxuIFxcdHJldHVybiAocmVzdWx0ID09IE1GX1JFQ09WRVJFRCB8fCByZXN1bHQgPT0gTUZfREVMQVlFRCkgPyAwIDogLUVCVVNZO1xcbiB9XFxuIFxcbkBAIC0xMzM5LDYgKzEzNDgsMzggQEAgc3RhdGljIGlubGluZSBib29sIEhXUG9pc29uSGFuZGxhYmxlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbiBcXHRyZXR1cm4gUGFnZUxSVShwYWdlKSB8fCBpc19mcmVlX2J1ZGR5X3BhZ2UocGFnZSk7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIFBvc2l0aXZlIGlkZW50aWZpY2F0aW9uIG9mIHBhZ2VzIHRoZSBod3BvaXNvbiBoYW5kbGVyIGNhbm5vdCByZWNvdmVyOlxcbisgKiBwYWdlcyBvd25lZCBieSBrZXJuZWwgaW50ZXJuYWxzIHdpdGggbm8gdXNlcnNwYWNlIG1hcHBpbmcgdG8gdW5tYXAsIG5vXFxuKyAqIGZpbGUgbWFwcGluZyB0byBpbnZhbGlkYXRlLCBhbmQgbm8gbWlncmF0aW9uIHRhcmdldC5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19rZXJuZWxfb3duZWRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4re1xcbitcXHRzdHJ1Y3QgcGFnZSAqaGVhZDtcXG4rXFx0Ym9vbCBrZXJuZWxfb3duZWQ7XFxuK1xcbitcXHQvKiBQR19yZXNlcnZlZCBpcyBhIHBlci1wYWdlIGZsYWcsIG5ldmVyIHNldCBvbiBhIGNvbXBvdW5kIHBhZ2UuICovXFxuK1xcdGlmIChQYWdlUmVzZXJ2ZWQocGFnZSkpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUGFnZS10eXBlIGJpdHMgbGl2ZSBvbmx5IG9uIHRoZSBoZWFkIHBhZ2UsIHNvIHJlc29sdmUgYW55IHRhaWxcXG4rXFx0ICogZmlyc3QuICBUaGUgY2hlY2sgdGFrZXMgbm8gcmVmY291bnQ7IHJlY2hlY2sgdGhlIGhlYWQgYWZ0ZXJ3YXJkc1xcbitcXHQgKiBzbyBhIGNvbmN1cnJlbnQgc3BsaXQgb3IgY29tcG91bmQgZnJlZSBjYW5ub3QgbGVhdmUgdXMgdHJ1c3RpbmdcXG4rXFx0ICogYSBzdGFsZSB2aWV3LiAgQSByZXNpZHVhbCBmcmVlLVxcdTAwM2VhbGxvYy1cXHUwMDNlZnJlZSBjYW5ub3QgYmUgY2xvc2VkIGhlcmVcXG4rXFx0ICogKGZyb3plbiBzbGFiIGFuZCBsYXJnZS1rbWFsbG9jIHBhZ2VzIGNhbm5vdCBiZSBwaW5uZWQpLCBidXQgaXNcXG4rXFx0ICogaGFybWxlc3M6IHdoZXJlIGEgd3JvbmcgdmVyZGljdCBjb3VsZCBwYW5pYywgbWVtb3J5X2ZhaWx1cmUoKSBoYXNcXG4rXFx0ICogYWxyZWFkeSBzZXQgUGFnZUhXUG9pc29uLCB3aGljaCBiYXJzIHRoZSBwYWdlIGZyb20gdGhlIGFsbG9jYXRvci5cXG4rXFx0ICovXFxuK3JldHJ5OlxcbitcXHRoZWFkID0gY29tcG91bmRfaGVhZChwYWdlKTtcXG4rXFx0a2VybmVsX293bmVkID0gUGFnZVNsYWIoaGVhZCkgfHwgUGFnZVRhYmxlKGhlYWQpIHx8XFxuK1xcdFxcdCAgICAgICBQYWdlTGFyZ2VLbWFsbG9jKGhlYWQpO1xcbitcXHRpZiAoaGVhZCAhPSBjb21wb3VuZF9oZWFkKHBhZ2UpKVxcbitcXHRcXHRnb3RvIHJldHJ5O1xcbitcXHRyZXR1cm4ga2VybmVsX293bmVkO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IF9fZ2V0X2h3cG9pc29uX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuIHtcXG4gXFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxuQEAgLTEzODUsNiArMTQyNiwxOSBAQCBzdGF0aWMgaW50IGdldF9hbnlfcGFnZShzdHJ1Y3QgcGFnZSAqcCwgdW5zaWduZWQgbG9uZyBmbGFncylcXG4gXFx0aWYgKGZsYWdzIFxcdTAwMjYgTUZfQ09VTlRfSU5DUkVBU0VEKVxcbiBcXHRcXHRjb3VudF9pbmNyZWFzZWQgPSB0cnVlO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogUGFnZSB0eXBlcyB3ZSBrbm93IGFyZSBrZXJuZWwtb3duZWQgYW5kIGNhbm5vdCBiZSByZWNvdmVyZWQuXFxuK1xcdCAqIFNob3J0LWNpcmN1aXQgYmVmb3JlIHRoZSBzaGFrZV9wYWdlKCkgLyByZXRyeSBsb29wLCB3aGljaFxcbitcXHQgKiBjYW5ub3QgdHVybiBhbnkgb2YgdGhlc2UgaW50byBzb21ldGhpbmcgSFdQb2lzb25IYW5kbGFibGUoKS5cXG4rXFx0ICogRHJvcCB0aGUgY2FsbGVyJ3MgcmVmZXJlbmNlIGlmIE1GX0NPVU5UX0lOQ1JFQVNFRCB0b29rIG9uZS5cXG4rXFx0ICovXFxuK1xcdGlmIChpc19rZXJuZWxfb3duZWRfcGFnZShwKSkge1xcbitcXHRcXHRpZiAoY291bnRfaW5jcmVhc2VkKVxcbitcXHRcXHRcXHRwdXRfcGFnZShwKTtcXG4rXFx0XFx0cmV0ID0gLUVOT1RSRUNPVkVSQUJMRTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuIHRyeV9hZ2FpbjpcXG4gXFx0aWYgKCFjb3VudF9pbmNyZWFzZWQpIHtcXG4gXFx0XFx0cmV0ID0gX19nZXRfaHdwb2lzb25fcGFnZShwLCBmbGFncyk7XFxuQEAgLTE0MzIsNyArMTQ4Niw3IEBAIHN0YXRpYyBpbnQgZ2V0X2FueV9wYWdlKHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbiBcXHRcXHRyZXQgPSAtRUlPO1xcbiBcXHR9XFxuIG91dDpcXG4tXFx0aWYgKHJldCA9PSAtRUlPKVxcbitcXHRpZiAocmV0ID09IC1FSU8gfHwgcmV0ID09IC1FTk9UUkVDT1ZFUkFCTEUpXFxuIFxcdFxcdHByX2VycihcXFwiJSNseDogdW5oYW5kbGFibGUgcGFnZS5cXFxcblxcXCIsIHBhZ2VfdG9fcGZuKHApKTtcXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuQEAgLTE0ODksNyArMTU0MywxMCBAQCBzdGF0aWMgaW50IF9fZ2V0X3VucG9pc29uX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuICAqICAgICAgICAgLUVJTyBmb3IgcGFnZXMgb24gd2hpY2ggd2UgY2FuIG5vdCBoYW5kbGUgbWVtb3J5IGVycm9ycyxcXG4gICogICAgICAgICAtRUJVU1kgd2hlbiBnZXRfaHdwb2lzb25fcGFnZSgpIGhhcyByYWNlZCB3aXRoIHBhZ2UgbGlmZWN5Y2xlXFxuICAqICAgICAgICAgb3BlcmF0aW9ucyBsaWtlIGFsbG9jYXRpb24gYW5kIGZyZWUsXFxuLSAqICAgICAgICAgLUVIV1BPSVNPTiB3aGVuIHRoZSBwYWdlIGlzIGh3cG9pc29uZWQgYW5kIHRha2VuIG9mZiBmcm9tIGJ1ZGR5LlxcbisgKiAgICAgICAgIC1FSFdQT0lTT04gd2hlbiB0aGUgcGFnZSBpcyBod3BvaXNvbmVkIGFuZCB0YWtlbiBvZmYgZnJvbSBidWRkeSxcXG4rICogICAgICAgICAtRU5PVFJFQ09WRVJBQkxFIGZvciBrZXJuZWwtb3duZWQgcGFnZXMgaWRlbnRpZmllZCBieVxcbisgKiAgICAgICAgIGlzX2tlcm5lbF9vd25lZF9wYWdlKCkgKFBHX3Jlc2VydmVkLCBzbGFiLFxcbisgKiAgICAgICAgIHBhZ2UtdGFibGUsIGxhcmdlLWttYWxsb2MpIHRoYXQgdGhlIGhhbmRsZXIgY2Fubm90IHJlY292ZXIuXFxuICAqL1xcbiBzdGF0aWMgaW50IGdldF9od3BvaXNvbl9wYWdlKHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbiB7XFxuQEAgLTI0MDIsNyArMjQ1OSw4IEBAIGludCBtZW1vcnlfZmFpbHVyZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxcbiBcXHQgKiB0aGF0IG1heSBtYWtlIHBhZ2VfcmVmX2ZyZWV6ZSgpL3BhZ2VfcmVmX3VuZnJlZXplKCkgbWlzbWF0Y2guXFxuIFxcdCAqL1xcbiBcXHRyZXMgPSBnZXRfaHdwb2lzb25fcGFnZShwLCBmbGFncyk7XFxuLVxcdGlmICghcmVzKSB7XFxuK1xcdHN3aXRjaCAocmVzKSB7XFxuK1xcdGNhc2UgMDpcXG4gXFx0XFx0aWYgKGlzX2ZyZWVfYnVkZHlfcGFnZShwKSkge1xcbiBcXHRcXHRcXHRpZiAodGFrZV9wYWdlX29mZl9idWRkeShwKSkge1xcbiBcXHRcXHRcXHRcXHRwYWdlX3JlZl9pbmMocCk7XFxuQEAgLTI0MjEsNyArMjQ3OSwxOSBAQCBpbnQgbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG4gXFx0XFx0XFx0cmVzID0gYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19LRVJORUxfSElHSF9PUkRFUiwgTUZfSUdOT1JFRCk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0Z290byB1bmxvY2tfbXV0ZXg7XFxuLVxcdH0gZWxzZSBpZiAocmVzIFxcdTAwM2MgMCkge1xcbitcXHRjYXNlIDE6XFxuK1xcdFxcdC8qIEdvdCBhIHJlZmNvdW50IG9uIGEgaGFuZGxhYmxlIHBhZ2UuICovXFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIC1FTk9UUkVDT1ZFUkFCTEU6XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFN0YWJsZSB1bmhhbmRsYWJsZSBrZXJuZWwtb3duZWQgcGFnZSAoUEdfcmVzZXJ2ZWQsXFxuK1xcdFxcdCAqIHNsYWIsIHBhZ2UgdGFibGVzLCBsYXJnZS1rbWFsbG9jKS5cXG4rXFx0XFx0ICogTm8gcmVjb3ZlcnkgcG9zc2libGUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRyZXMgPSBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0tFUk5FTCwgTUZfSUdOT1JFRCk7XFxuK1xcdFxcdGdvdG8gdW5sb2NrX211dGV4O1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHQvKiBUcmFuc2llbnQgbGlmZWN5Y2xlIHJhY2Ugd2l0aCB0aGUgcGFnZSBhbGxvY2F0b3IuICovXFxuIFxcdFxcdHJlcyA9IGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfR0VUX0hXUE9JU09OLCBNRl9JR05PUkVEKTtcXG4gXFx0XFx0Z290byB1bmxvY2tfbXV0ZXg7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxcbmluZGV4IGU2ZGY5NjhmMDk3MWM4Li5lZDMyMWFlNzA5ZGFjZiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXFxuQEAgLTE3NCw2ICsxNzQsMTAgQEAgVEVTVF9QUk9HUyArPSBrc2Z0X3VzZXJmYXVsdGZkLnNoXFxuIFRFU1RfUFJPR1MgKz0ga3NmdF92bWFfbWVyZ2Uuc2hcXG4gVEVTVF9QUk9HUyArPSBrc2Z0X3ZtYWxsb2Muc2hcXG4gXFxuKyMgRGVzdHJ1Y3RpdmU6IGV2ZXJ5IHN1Y2Nlc3NmdWwgcnVuIHBhbmljcyB0aGUga2VybmVsLiAgSW5zdGFsbGVkIGFuZFxcbisjIGtlcHQgZXhlY3V0YWJsZSwgYnV0IG5vdCBydW4gZnJvbSBhIGRlZmF1bHQga3NlbGZ0ZXN0IGludm9jYXRpb24uXFxuK1RFU1RfUFJPR1NfRVhURU5ERUQgKz0gaHdwb2lzb24tcGFuaWMuc2hcXG4rXFxuIFRFU1RfRklMRVMgOj0gdGVzdF92bWFsbG9jLnNoXFxuIFRFU1RfRklMRVMgKz0gdGVzdF9obW0uc2hcXG4gVEVTVF9GSUxFUyArPSB2YV9oaWdoX2FkZHJfc3dpdGNoLnNoXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h3cG9pc29uLXBhbmljLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHdwb2lzb24tcGFuaWMuc2hcXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5kOTUzZDEzNjczMzI0NFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9od3BvaXNvbi1wYW5pYy5zaFxcbkBAIC0wLDAgKzEsMjU1IEBAXFxuKyMhL2Jpbi9iYXNoXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rI1xcbisjIFZlcmlmeSB2bS5wYW5pY19vbl91bnJlY292ZXJhYmxlX21lbW9yeV9mYWlsdXJlIGJ5IGluamVjdGluZyBhIGh3cG9pc29uXFxuKyMgZXJyb3Igb24gYSBrZXJuZWwtb3duZWQgcGFnZSBhbmQgY29uZmlybWluZyB0aGUga2VybmVsIHBhbmljcy5cXG4rI1xcbisjIFRocmVlIFxcXCJraW5kc1xcXCIgb2Yga2VybmVsLW93bmVkIHBhZ2UgY2FuIGJlIHRhcmdldGVkLCBzZWxlY3RhYmxlIHZpYSB0aGVcXG4rIyBmaXJzdCBwb3NpdGlvbmFsIGFyZ3VtZW50IChkZWZhdWx0OiByb2RhdGEpOlxcbisjXFxuKyMgICByb2RhdGEgIC0gYSBQR19yZXNlcnZlZCBwYWdlIGluIHRoZSBrZXJuZWwgcm9kYXRhIHJhbmdlXFxuKyMgICAgICAgICAgICAgKHNvdXJjZWQgZnJvbSAvcHJvYy9pb21lbSBcXFwiS2VybmVsIHJvZGF0YVxcXCIpLiAgRXhlcmNpc2VzXFxuKyMgICAgICAgICAgICAgbWVtb3J5X2ZhaWx1cmUoKSAtXFx1MDAzZSBnZXRfYW55X3BhZ2UoKSBvbiBhIFBhZ2VSZXNlcnZlZCBwYWdlLlxcbisjXFxuKyMgICBzbGFiICAgIC0gYSBzbGFiIHBhZ2UgZm91bmQgdmlhIC9wcm9jL2twYWdlZmxhZ3MgKEtQRl9TTEFCKS5cXG4rIyAgICAgICAgICAgICBFeGVyY2lzZXMgbWVtb3J5X2ZhaWx1cmUoKSAtXFx1MDAzZSBnZXRfYW55X3BhZ2UoKSBvbiBhIG5vblxcbisjICAgICAgICAgICAgIFBHX3Jlc2VydmVkIGtlcm5lbC1vd25lZCBwYWdlLiAgVGhpcyBwYXRoIGlzIHdoYXQgY2F0Y2hlc1xcbisjICAgICAgICAgICAgIHJlZ3Jlc3Npb25zIHdoZXJlIGdldF9hbnlfcGFnZSgpIGNvbGxhcHNlcyBrZXJuZWwtb3duZWRcXG4rIyAgICAgICAgICAgICBwYWdlcyBpbnRvIGEgdHJhbnNpZW50IC1FSU8gaW5zdGVhZCBvZiAtRU5PVFJFQ09WRVJBQkxFLlxcbisjXFxuKyMgICBwZ3RhYmxlIC0gYSBwYWdlLXRhYmxlIHBhZ2UgZm91bmQgdmlhIC9wcm9jL2twYWdlZmxhZ3MgKEtQRl9QR1RBQkxFKS5cXG4rIyAgICAgICAgICAgICBTYW1lIHBhdGggYXMgc2xhYiwgZGlmZmVyZW50IHBhZ2UgdHlwZS5cXG4rI1xcbisjIFRoaXMgdGVzdCBpcyBERVNUUlVDVElWRTogYSBzdWNjZXNzZnVsIHJ1biBjcmFzaGVzIHRoZSBrZXJuZWwuICBJdCBpc1xcbisjIG1lYW50IHRvIGJlIGV4ZWN1dGVkIGluc2lkZSBhIGRpc3Bvc2FibGUgVk0gKGUuZy4gdmlydG1lLW5nKSB3aXRoIGFcXG4rIyBzZXJpYWwgY29uc29sZSBjYXB0dXJlZCBieSB0aGUgaGFybmVzcy4gIEl0IGlzIHNraXBwZWQgdW5sZXNzIHRoZVxcbisjIGNhbGxlciBvcHRzIGluIHZpYSBSVU5fREVTVFJVQ1RJVkU9MS5cXG4rI1xcbisjIFRlc3QgcGFzc2VzIGV4dGVybmFsbHk6IHRoZSBrZXJuZWwgbXVzdCBwYW5pYyB3aXRoXFxuKyMgICBcXFwiTWVtb3J5IGZhaWx1cmU6IFxcdTAwM2NwZm5cXHUwMDNlOiB1bnJlY292ZXJhYmxlIHBhZ2VcXFwiXFxuKyMgQSByZXR1cm4gZnJvbSB0aGUgaW5qZWN0IG1lYW5zIG5vIHBhbmljIGZpcmVkOiB0aGF0IGlzIGEgZmFpbHVyZSxcXG4rIyB1bmxlc3MgdGhlIHRhcmdldCBQRk4gcmFjZWQgdG8gYSBkaWZmZXJlbnQgcGFnZSB0eXBlIGJlZm9yZSBpbmplY3Rpb24sXFxuKyMgaW4gd2hpY2ggY2FzZSB0aGUgcnVuIGlzIGluY29uY2x1c2l2ZSBhbmQgaXMgc2tpcHBlZC5cXG4rI1xcbisjIEF1dGhvcjogQnJlbm8gTGVpdGFvIFxcdTAwM2NsZWl0YW9AZGViaWFuLm9yZ1xcdTAwM2VcXG4rXFxuK3NldCAtdVxcbitcXG4rIyBLVEFQIG91dHB1dCBoZWxwZXJzIChrdGFwX3ByaW50X21zZywga3RhcF9za2lwX2FsbCwga3RhcF9leGl0X2ZhaWxfbXNnLCAuLi4pLlxcbitESVI9XFxcIiQoZGlybmFtZSBcXFwiJChyZWFkbGluayAtZiBcXFwiJDBcXFwiKVxcXCIpXFxcIlxcbisjIHNoZWxsY2hlY2sgc291cmNlPS4uL2tzZWxmdGVzdC9rdGFwX2hlbHBlcnMuc2hcXG4rc291cmNlIFxcXCIke0RJUn1cXFwiLy4uL2tzZWxmdGVzdC9rdGFwX2hlbHBlcnMuc2hcXG4rXFxuK3N5c2N0bF9wYXRoPS9wcm9jL3N5cy92bS9wYW5pY19vbl91bnJlY292ZXJhYmxlX21lbW9yeV9mYWlsdXJlXFxuK2luamVjdF9wYXRoPS9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2hhcmRfb2ZmbGluZV9wYWdlXFxuK2twYWdlZmxhZ3NfcGF0aD0vcHJvYy9rcGFnZWZsYWdzXFxuK3VucG9pc29uX3BhdGg9L3N5cy9rZXJuZWwvZGVidWcvaHdwb2lzb24vdW5wb2lzb24tcGZuXFxuK1xcbisjIC9wcm9jL2twYWdlZmxhZ3MgYml0IHBvc2l0aW9ucyAoc2VlIGluY2x1ZGUvdWFwaS9saW51eC9rZXJuZWwtcGFnZS1mbGFncy5oKVxcbitLUEZfU0xBQj03XFxuK0tQRl9DT01QT1VORF9UQUlMPTE2XFxuK0tQRl9IV1BPSVNPTj0xOVxcbitLUEZfTk9QQUdFPTIwXFxuK0tQRl9QR1RBQkxFPTI2XFxuK0tQRl9SRVNFUlZFRD0zMlxcbitcXG4rcGFnZXNpemU9JChnZXRjb25mIFBBR0VfU0laRSlcXG4rXFxuK2tpbmQ9JHsxOi1yb2RhdGF9XFxuK1xcbitpZiBbIFxcXCIkKGlkIC11KVxcXCIgLW5lIDAgXTsgdGhlblxcbitcXHRrdGFwX3NraXBfYWxsIFxcXCJtdXN0IHJ1biBhcyByb290XFxcIlxcbitcXHRleGl0IFxcXCIkS1NGVF9TS0lQXFxcIlxcbitmaVxcbitcXG4raWYgWyAhIC13IFxcXCIkc3lzY3RsX3BhdGhcXFwiIF07IHRoZW5cXG4rXFx0a3RhcF9za2lwX2FsbCBcXFwiJHN5c2N0bF9wYXRoIG5vdCBwcmVzZW50IChrZXJuZWwgd2l0aG91dCB0aGUgc3lzY3RsPylcXFwiXFxuK1xcdGV4aXQgXFxcIiRLU0ZUX1NLSVBcXFwiXFxuK2ZpXFxuK1xcbitpZiBbICEgLXcgXFxcIiRpbmplY3RfcGF0aFxcXCIgXTsgdGhlblxcbitcXHRrdGFwX3NraXBfYWxsIFxcXCIkaW5qZWN0X3BhdGggbm90IHByZXNlbnQgKG5vIE1FTU9SWV9IT1RQTFVHPylcXFwiXFxuK1xcdGV4aXQgXFxcIiRLU0ZUX1NLSVBcXFwiXFxuK2ZpXFxuK1xcbitpZiBbIFxcXCIke1JVTl9ERVNUUlVDVElWRTotMH1cXFwiICE9IFxcXCIxXFxcIiBdOyB0aGVuXFxuK1xcdGt0YXBfc2tpcF9hbGwgXFxcImRlc3RydWN0aXZlIHRlc3Q7IHJlLXJ1biB3aXRoIFJVTl9ERVNUUlVDVElWRT0xIGluc2lkZSBhIGRpc3Bvc2FibGUgVk1cXFwiXFxuK1xcdGV4aXQgXFxcIiRLU0ZUX1NLSVBcXFwiXFxuK2ZpXFxuK1xcbisjIFBpY2sgYSBQRk4gaW5zaWRlIHRoZSBrZXJuZWwgaW1hZ2Ugcm9kYXRhIHJlZ2lvbiBvZiAvcHJvYy9pb21lbS5cXG4rIyBUaGlzIGlzIHByZWZlcnJlZCBvdmVyIGEgdG9wLWxldmVsIFxcXCJSZXNlcnZlZFxcXCIgZW50cnkgYmVjYXVzZSB0b3AtbGV2ZWxcXG4rIyBSZXNlcnZlZCByYW5nZXMgYXJlIG9mdGVuIGZpcm13YXJlIGhvbGVzIHRoYXQgaGF2ZSBubyBiYWNraW5nIHN0cnVjdFxcbisjIHBhZ2U7IHBmbl90b19vbmxpbmVfcGFnZSgpIHJldHVybnMgTlVMTCBvbiB0aG9zZSBhbmQgbWVtb3J5X2ZhaWx1cmUoKVxcbisjIGJhaWxzIG91dCB3aXRoIC1FTlhJTyBiZWZvcmUgcmVhY2hpbmcgdGhlIHBhbmljIHBhdGguXFxuKyNcXG4rIyBcXFwiS2VybmVsIHJvZGF0YVxcXCIgaXMgcmVwb3J0ZWQgYXMgYSBzdWItcmVzb3VyY2Ugb2YgXFxcIlN5c3RlbSBSQU1cXFwiIG9uIGV2ZXJ5XFxuKyMgbWFqb3IgYXJjaGl0ZWN0dXJlLCB3aGljaCBndWFyYW50ZWVzOlxcbisjICAgLSB0aGUgUEZOIGlzIGJhY2tlZCBieSBzdHJ1Y3QgcGFnZSAod2l0aGluIGFuIG9ubGluZSBtZW1vcnkgcmFuZ2UpO1xcbisjICAgLSBQR19yZXNlcnZlZCBpcyBzZXQgb24gdGhlIHBhZ2UgKGtlcm5lbCBpbWFnZSBhcmVhKTtcXG4rIyAgIC0gdGhlIG1lbW9yeSBpcyByZWFkLW9ubHksIHNvIHNldHRpbmcgUEdfaHdwb2lzb24gb24gaXQgZG9lcyBub3RcXG4rIyAgICAgY29ycnVwdCB3cml0YWJsZSBrZXJuZWwgc3RhdGUgaWYgdGhlIHBhbmljIHNvbWVob3cgZG9lcyBub3QgZmlyZS5cXG4rI1xcbisjIC9wcm9jL2lvbWVtIGVudHJpZXMgbG9vayBsaWtlIChpbmRlbnRlZCBmb3Igc3ViLXJlc291cmNlcyk6XFxuKyMgICAgIFxcXCIgIDAyNTAwMDAwLTAyZmZmZmZmIDogS2VybmVsIHJvZGF0YVxcXCJcXG4rcGlja19yb2RhdGFfcGh5c19hZGRyKCkge1xcbitcXHRhd2sgLXYgcGFnZXNpemU9XFxcIiQoZ2V0Y29uZiBQQUdFX1NJWkUpXFxcIiAnXFxuK1xcdCMgQ29udmVydCBhIGhleCBzdHJpbmcgdG8gYSBudW1iZXIgd2l0aG91dCByZWx5aW5nIG9uIHRoZSBnYXdrLW9ubHlcXG4rXFx0IyBzdHJ0b251bSgpLiAgbWF3ayBsYWNrcyBpdCBhbmQgd291bGQgb3RoZXJ3aXNlIHNwdXJpb3VzbHkgc2tpcFxcbitcXHQjIHRoaXMgdGVzdCBvbiBkaXN0cm9zIHRoYXQgc2hpcCBtYXdrIGFzIC91c3IvYmluL2F3ay5cXG4rXFx0ZnVuY3Rpb24gaGV4Mm51bShzLCAgIG4sIGksIGMsIHYpIHtcXG4rXFx0XFx0biA9IDBcXG4rXFx0XFx0Zm9yIChpID0gMTsgaSBcXHUwMDNjPSBsZW5ndGgocyk7IGkrKykge1xcbitcXHRcXHRcXHRjID0gdG9sb3dlcihzdWJzdHIocywgaSwgMSkpXFxuK1xcdFxcdFxcdHYgPSBpbmRleChcXFwiMDEyMzQ1Njc4OWFiY2RlZlxcXCIsIGMpIC0gMVxcbitcXHRcXHRcXHRpZiAodiBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdHJldHVybiAtMVxcbitcXHRcXHRcXHRuID0gbiAqIDE2ICsgdlxcbitcXHRcXHR9XFxuK1xcdFxcdHJldHVybiBuXFxuK1xcdH1cXG4rXFx0LzogS2VybmVsIHJvZGF0YVtbOnNwYWNlOl1dKiQvIHtcXG4rXFx0XFx0c3ViKC9eW1s6c3BhY2U6XV0rLywgXFxcIlxcXCIpXFxuK1xcdFxcdG4gPSBzcGxpdCgkMCwgYSwgL1stIF0vKVxcbitcXHRcXHRzdGFydCA9IGhleDJudW0oYVsxXSlcXG4rXFx0XFx0ZW5kICAgPSBoZXgybnVtKGFbMl0pXFxuK1xcdFxcdGlmIChlbmQgXFx1MDAzYz0gc3RhcnQpXFxuK1xcdFxcdFxcdG5leHRcXG4rXFx0XFx0IyBQYWdlLWFsaWduIHVwd2FyZCBhbmQgZW1pdCB0aGUgZmlyc3QgYnl0ZSBvZiB0aGF0IHBhZ2UuXFxuK1xcdFxcdHBmbiA9IGludCgoc3RhcnQgKyBwYWdlc2l6ZSAtIDEpIC8gcGFnZXNpemUpXFxuK1xcdFxcdHByaW50ZiBcXFwiMHgleFxcXFxuXFxcIiwgcGZuICogcGFnZXNpemVcXG4rXFx0XFx0ZXhpdCAwXFxuK1xcdH1cXG4rXFx0JyAvcHJvYy9pb21lbVxcbit9XFxuK1xcbisjIFdhbGsgL3Byb2Mva3BhZ2VmbGFncyBhbmQgcmV0dXJuIHRoZSBwaHlzIGFkZHIgb2YgdGhlIGZpcnN0IFBGTiB0aGF0XFxuKyMgaGFzIGJpdCAkMSBzZXQsIHdpdGggS1BGX0hXUE9JU09OLCBLUEZfTk9QQUdFIGFuZCBLUEZfQ09NUE9VTkRfVEFJTFxcbisjIGFsbCBjbGVhciAoc28gd2UgYXR0YWNrIGEgcmVhbCwgbm9uLXRhaWwsIG5vdC1hbHJlYWR5LXBvaXNvbmVkIHBhZ2UpLlxcbisjXFxuKyMgV2Ugc2tpcCB0aGUgZmlyc3QgMTYgTWlCIG9mIFBGTnMgdG8gc3RlcCBwYXN0IGxvdy1tZW1vcnkgc3BlY2lhbFxcbisjIHJhbmdlcyAoQklPUy9FRkkvQUNQSS9ldGMuKSB0aGF0IG9mdGVuIGFyZSBQR19yZXNlcnZlZCBhbmQgd291bGQgbm90XFxuKyMgZXhoaWJpdCB0aGUgc2xhYi9wZ3RhYmxlIHR5cGUgd2UgYXJlIGxvb2tpbmcgZm9yLlxcbitwaWNrX2twYWdlZmxhZ3NfcGh5c19hZGRyKCkge1xcbitcXHRsb2NhbCB3YW50X2JpdD0kMVxcbitcXHRsb2NhbCBwYWdlc2l6ZSBza2lwX3BmblxcbitcXG4rXFx0WyAtciBcXFwiJGtwYWdlZmxhZ3NfcGF0aFxcXCIgXSB8fCByZXR1cm5cXG4rXFxuK1xcdHBhZ2VzaXplPSQoZ2V0Y29uZiBQQUdFX1NJWkUpXFxuK1xcdHNraXBfcGZuPSQoKCgxNiAqIDEwMjQgKiAxMDI0KSAvIHBhZ2VzaXplKSlcXG4rXFxuK1xcdG9kIC1BbiAtdHg4IC12IC13OCAtaiBcXFwiJCgoc2tpcF9wZm4gKiA4KSlcXFwiIFxcXCIka3BhZ2VmbGFnc19wYXRoXFxcIiAyXFx1MDAzZS9kZXYvbnVsbCB8IFxcXFxcXG4rXFx0YXdrIC12IHdhbnRfYml0PVxcXCIkd2FudF9iaXRcXFwiIFxcXFxcXG4rXFx0ICAgIC12IGh3cF9iaXQ9XFxcIiRLUEZfSFdQT0lTT05cXFwiIFxcXFxcXG4rXFx0ICAgIC12IG5vcGFnZV9iaXQ9XFxcIiRLUEZfTk9QQUdFXFxcIiBcXFxcXFxuK1xcdCAgICAtdiB0YWlsX2JpdD1cXFwiJEtQRl9DT01QT1VORF9UQUlMXFxcIiBcXFxcXFxuK1xcdCAgICAtdiBiYXNlX3Bmbj1cXFwiJHNraXBfcGZuXFxcIiBcXFxcXFxuK1xcdCAgICAtdiBwYWdlc2l6ZT1cXFwiJHBhZ2VzaXplXFxcIiAnXFxuK1xcdCMgVGVzdCB3aGV0aGVyIGJpdCBcXFwiYlxcXCIgaXMgc2V0IGluIHRoZSAxNi1oZXgtZGlnaXQgdmFsdWUgXFxcImhleFxcXCIuXFxuK1xcdCMgRG9uZSB3aXRoIHN1YnN0cmluZyArIHBlci1kaWdpdCBsb29rdXAgc28gd2UgbmV2ZXIgcmVseSBvbiBhd2tcXG4rXFx0IyBiaXR3aXNlIG9wZXJhdG9ycyAobWF3ayBsYWNrcyB0aGVtKSwgNjQtYml0IEZQIHByZWNpc2lvbiBvciB0aGVcXG4rXFx0IyBnYXdrLW9ubHkgc3RydG9udW0oKS5cXG4rXFx0ZnVuY3Rpb24gYml0X3NldChoZXgsIGIsICAgIGRpLCBiaSwgYywgdikge1xcbitcXHRcXHRkaSA9IGludChiIC8gNClcXG4rXFx0XFx0YmkgPSBiIC0gZGkgKiA0XFxuK1xcdFxcdGMgPSBzdWJzdHIoaGV4LCBsZW5ndGgoaGV4KSAtIGRpLCAxKVxcbitcXHRcXHR2ID0gaW5kZXgoXFxcIjAxMjM0NTY3ODlhYmNkZWZcXFwiLCB0b2xvd2VyKGMpKSAtIDFcXG4rXFx0XFx0aWYgKGJpID09IDApIHJldHVybiAodiAlIDIpID09IDFcXG4rXFx0XFx0aWYgKGJpID09IDEpIHJldHVybiBpbnQodiAvIDIpICUgMiA9PSAxXFxuK1xcdFxcdGlmIChiaSA9PSAyKSByZXR1cm4gaW50KHYgLyA0KSAlIDIgPT0gMVxcbitcXHRcXHRyZXR1cm4gaW50KHYgLyA4KSAlIDIgPT0gMVxcbitcXHR9XFxuK1xcdHtcXG4rXFx0XFx0Z3N1YigvXltbOnNwYWNlOl1dKy8sIFxcXCJcXFwiKVxcbitcXHRcXHRoID0gJDFcXG4rXFx0XFx0aWYgKGJpdF9zZXQoaCwgd2FudF9iaXQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhYml0X3NldChoLCBod3BfYml0KSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIWJpdF9zZXQoaCwgbm9wYWdlX2JpdCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICFiaXRfc2V0KGgsIHRhaWxfYml0KSkge1xcbitcXHRcXHRcXHRwZm4gPSBiYXNlX3BmbiArIE5SIC0gMVxcbitcXHRcXHRcXHRwcmludGYgXFxcIjB4JXhcXFxcblxcXCIsIHBmbiAqIHBhZ2VzaXplXFxuK1xcdFxcdFxcdGV4aXQgMFxcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0J1xcbit9XFxuK1xcbisjIFJldHVybiAwIGlmIC9wcm9jL2twYWdlZmxhZ3MgYml0ICQyIGlzIHNldCBmb3IgUEZOICQxLCAxIGlmIGl0IGlzXFxuKyMgY2xlYXIsIG9yIDIgaWYgdGhlIHdvcmQgY2Fubm90IGJlIHJlYWQuICBVc2VkIHRvIHJlLWNvbmZpcm0gdGhlIHRhcmdldFxcbisjIHBhZ2UgdHlwZSBhZnRlciBhIG5vbi1wYW5pY2tpbmcgaW5qZWN0LlxcbitrcGFnZWZsYWdzX2JpdF9zZXQoKSB7XFxuK1xcdGxvY2FsIHdvcmRcXG4rXFxuK1xcdHdvcmQ9JChvZCAtQW4gLXR4OCAtdiAtaiBcXFwiJCgoJDEgKiA4KSlcXFwiIC1OIDggXFxcIiRrcGFnZWZsYWdzX3BhdGhcXFwiIDJcXHUwMDNlL2Rldi9udWxsIHwgdHIgLWQgJ1s6c3BhY2U6XScpXFxuK1xcdFsgLW4gXFxcIiR3b3JkXFxcIiBdIHx8IHJldHVybiAyXFxuK1xcdCgoICgxNiMkd29yZCBcXHUwMDNlXFx1MDAzZSAkMikgXFx1MDAyNiAxICkpXFxuK31cXG4rXFxuKyMgQmVzdC1lZmZvcnQ6IGRyb3AgdGhlIFBHX2h3cG9pc29uIG1hcmtlciBzZXQgYnkgdGhlIGluamVjdCBzbyBhIGZhaWxlZFxcbisjIHJ1biBkb2VzIG5vdCBsZWF2ZSBhIHBvaXNvbmVkIHBhZ2UgYmVoaW5kLiAgaGFyZF9vZmZsaW5lX3BhZ2UoKSBpbmplY3RzXFxuKyMgd2l0aCBNRl9TV19TSU1VTEFURUQsIHNvIHRoZSBwYWdlIHN0YXlzIHVucG9pc29uYWJsZSB0aHJvdWdoIHRoZVxcbisjIGh3cG9pc29uIGRlYnVnZnMgaW50ZXJmYWNlIChuZWVkcyBDT05GSUdfSFdQT0lTT05fSU5KRUNUICsgZGVidWdmcykuXFxuK3RyeV91bnBvaXNvbigpIHtcXG4rXFx0WyAtdyBcXFwiJHVucG9pc29uX3BhdGhcXFwiIF0gfHwgcmV0dXJuIDBcXG4rXFx0ZWNobyBcXFwiJDFcXFwiIFxcdTAwM2UgXFxcIiR1bnBvaXNvbl9wYXRoXFxcIiAyXFx1MDAzZS9kZXYvbnVsbCB8fCB0cnVlXFxuK31cXG4rXFxuK2Nhc2UgXFxcIiRraW5kXFxcIiBpblxcbityb2RhdGEpXFxuK1xcdHBoeXNfYWRkcj0kKHBpY2tfcm9kYXRhX3BoeXNfYWRkcilcXG4rXFx0cmVjaGVja19iaXQ9JEtQRl9SRVNFUlZFRFxcbitcXHRtaXNzaW5nX21zZz0nbm8gXFxcIktlcm5lbCByb2RhdGFcXFwiIGVudHJ5IGluIC9wcm9jL2lvbWVtJ1xcbitcXHQ7O1xcbitzbGFiKVxcbitcXHRwaHlzX2FkZHI9JChwaWNrX2twYWdlZmxhZ3NfcGh5c19hZGRyIFxcXCIkS1BGX1NMQUJcXFwiKVxcbitcXHRyZWNoZWNrX2JpdD0kS1BGX1NMQUJcXG4rXFx0bWlzc2luZ19tc2c9XFxcIm5vIHVzYWJsZSBzbGFiIFBGTiBmb3VuZCBpbiAka3BhZ2VmbGFnc19wYXRoXFxcIlxcbitcXHQ7O1xcbitwZ3RhYmxlKVxcbitcXHRwaHlzX2FkZHI9JChwaWNrX2twYWdlZmxhZ3NfcGh5c19hZGRyIFxcXCIkS1BGX1BHVEFCTEVcXFwiKVxcbitcXHRyZWNoZWNrX2JpdD0kS1BGX1BHVEFCTEVcXG4rXFx0bWlzc2luZ19tc2c9XFxcIm5vIHVzYWJsZSBwYWdlLXRhYmxlIFBGTiBmb3VuZCBpbiAka3BhZ2VmbGFnc19wYXRoXFxcIlxcbitcXHQ7O1xcbisqKVxcbitcXHRrdGFwX2V4aXRfZmFpbF9tc2cgXFxcInVua25vd24ga2luZCAnJGtpbmQnIChleHBlY3RlZDogcm9kYXRhfHNsYWJ8cGd0YWJsZSlcXFwiXFxuK1xcdDs7XFxuK2VzYWNcXG4rXFxuK2lmIFsgLXogXFxcIiRwaHlzX2FkZHJcXFwiIF07IHRoZW5cXG4rXFx0a3RhcF9za2lwX2FsbCBcXFwiJG1pc3NpbmdfbXNnXFxcIlxcbitcXHRleGl0IFxcXCIkS1NGVF9TS0lQXFxcIlxcbitmaVxcbitcXG4ra3RhcF9wcmludF9tc2cgXFxcImVuYWJsaW5nICRzeXNjdGxfcGF0aFxcXCJcXG4rcHJpb3I9JChjYXQgXFxcIiRzeXNjdGxfcGF0aFxcXCIpXFxuK2VjaG8gMSBcXHUwMDNlIFxcXCIkc3lzY3RsX3BhdGhcXFwiIHx8IGt0YXBfZXhpdF9mYWlsX21zZyBcXFwiZmFpbGVkIHRvIGVuYWJsZSBzeXNjdGxcXFwiXFxuK1xcbitwZm49JCgocGh5c19hZGRyIC8gcGFnZXNpemUpKVxcbitrdGFwX3ByaW50X21zZyBcXFwiaW5qZWN0aW5nIGh3cG9pc29uIGF0IHBoeXMgMHgkKHByaW50ZiAnJXgnIFxcXCIkcGh5c19hZGRyXFxcIikgKHBmbiAweCQocHJpbnRmICcleCcgXFxcIiRwZm5cXFwiKSwga2luZD0ka2luZClcXFwiXFxuK2t0YXBfcHJpbnRfbXNnIFxcXCJleHBlY3Rpbmcga2VybmVsIHBhbmljOiAnTWVtb3J5IGZhaWx1cmU6IFxcdTAwM2NwZm5cXHUwMDNlOiB1bnJlY292ZXJhYmxlIHBhZ2UnXFxcIlxcbitcXG4rIyBBIHN1Y2Nlc3NmdWwgcnVuIG5ldmVyIHJldHVybnMgZnJvbSB0aGUgaW5qZWN0IC0tIGl0IHBhbmljcyB0aGUga2VybmVsLlxcbisjIFJlYWNoaW5nIHRoZSBjb2RlIGJlbG93IHRoZXJlZm9yZSBtZWFucyBubyBwYW5pYyBmaXJlZC4gIE5vdGUgd2hldGhlclxcbisjIHRoZSB3cml0ZSBpdHNlbGYgc3VjY2VlZGVkLCB0aGVuIHB1dCB0aGUgbWFjaGluZSBiYWNrOiByZXN0b3JlIHRoZVxcbisjIHN5c2N0bCBhbmQgYmVzdC1lZmZvcnQgdW5wb2lzb24gdGhlIHBhZ2Ugd2UganVzdCBtYXJrZWQuXFxuK2lmIGVjaG8gXFxcIiRwaHlzX2FkZHJcXFwiIFxcdTAwM2UgXFxcIiRpbmplY3RfcGF0aFxcXCI7IHRoZW5cXG4rXFx0dmVyZGljdD1cXFwiaW5qZWN0IHJldHVybmVkIHdpdGhvdXQgcGFuaWM7IHN5c2N0bCBpbmVmZmVjdGl2ZVxcXCJcXG4rZWxzZVxcbitcXHR2ZXJkaWN0PVxcXCJpbmplY3QgZmFpbGVkIGJlZm9yZSByZWFjaGluZyB0aGUgcGFuaWMgcGF0aFxcXCJcXG4rZmlcXG4rXFxuK2VjaG8gXFxcIiRwcmlvclxcXCIgXFx1MDAzZSBcXFwiJHN5c2N0bF9wYXRoXFxcIlxcbit0cnlfdW5wb2lzb24gXFxcIiRwZm5cXFwiXFxuK1xcbisjIFRoZSBwYWdlIHR5cGUgY2FuIGNoYW5nZSBiZXR3ZWVuIHNlbGVjdGlvbiBhbmQgaW5qZWN0aW9uIChlLmcuIGEgc2xhYlxcbisjIG9yIHBhZ2UtdGFibGUgcGFnZSBpcyBmcmVlZCBhbmQgcmV1c2VkKS4gIE9ubHkgdHJlYXQgYSBtaXNzaW5nIHBhbmljIGFzXFxuKyMgYSBmYWlsdXJlIGlmIHRoZSB0YXJnZXQgUEZOIGlzIHN0aWxsIHRoZSBrZXJuZWwtb3duZWQgdHlwZSB3ZSBhaW1lZCBhdDtcXG4rIyBpZiBpdCByYWNlZCB0byBhbm90aGVyIHR5cGUgdGhlIHJ1biBpcyBpbmNvbmNsdXNpdmUsIHNvIHNraXAgaW5zdGVhZC5cXG4ra3BhZ2VmbGFnc19iaXRfc2V0IFxcXCIkcGZuXFxcIiBcXFwiJHJlY2hlY2tfYml0XFxcIlxcbitjYXNlICQ/IGluXFxuKzApXFx0a3RhcF9leGl0X2ZhaWxfbXNnIFxcXCIkdmVyZGljdCAocGFnZSBzdGlsbCAka2luZClcXFwiIDs7XFxuKzEpXFx0a3RhcF9za2lwX2FsbCBcXFwidGFyZ2V0IFBGTiBubyBsb25nZXIgJGtpbmQ7IHJhY2VkIGJlZm9yZSBpbmplY3QsIGluY29uY2x1c2l2ZVxcXCJcXG4rXFx0ZXhpdCBcXFwiJEtTRlRfU0tJUFxcXCIgOztcXG4rKilcXHRrdGFwX2V4aXRfZmFpbF9tc2cgXFxcIiR2ZXJkaWN0IChjb3VsZCBub3QgcmVjb25maXJtIHBhZ2UgdHlwZSB2aWEgJGtwYWdlZmxhZ3NfcGF0aClcXFwiIDs7XFxuK2VzYWNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTg6NTQ6MDkuNjc4MjE2MTAxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODk4MDExNjc4NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZXRfYW55X3BhZ2VcIixcbiAgICBcInBhbmljX29uX3VucmVjb3ZlcmFibGVfbWZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGZhaWx1cmUgaGFuZGxlciBpbiBjb3JlIE1NIHRvIHNob3J0LWNpcmN1aXQgcmVjb3ZlcnkgZm9yIGtlcm5lbC1vd25lZCBwYWdlcyBhbmQgb3B0aW9uYWxseSBwYW5pYy4gVGhpcyBlcnJvci1oYW5kbGluZyBwYXRoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIG1hZHZpc2UoTUFEVl9IV1BPSVNPTikgb24ga2VybmVsLW93bmVkIHBhZ2VzIG1hcHBlZCBpbiB1c2VyIHNwYWNlIChsaWtlIHRoZSB2RFNPKSBvciB2aWEgc3lzZnMgZXJyb3IgaW5qZWN0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNkNjY0OWE1ZDRmN2NkNDlhZTg1NTZlMmQ1MzQzNmM2YjZjYWJhMDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAzMCAxODo1NDowNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdFxuaW5kZXggYjliMGMyMThiZmI0NDAuLjIyY2M1NGNhYzNiMjFkIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3RcbkBAIC02Nyw2ICs2Nyw3IEBAIEN1cnJlbnRseSwgdGhlc2UgZmlsZXMgYXJlIGluIC9wcm9jL3N5cy92bTpcbiAtIHBhZ2UtY2x1c3RlclxuIC0gcGFnZV9sb2NrX3VuZmFpcm5lc3NcbiAtIHBhbmljX29uX29vbVxuKy0gcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZVxuIC0gcGVyY3B1X3BhZ2VsaXN0X2hpZ2hfZnJhY3Rpb25cbiAtIHN0YXRfaW50ZXJ2YWxcbiAtIHN0YXRfcmVmcmVzaFxuQEAgLTkyNSw2ICs5MjYsODUgQEAgcGFuaWNfb25fb29tPTIra2R1bXAgZ2l2ZXMgeW91IHZlcnkgc3Ryb25nIHRvb2wgdG8gaW52ZXN0aWdhdGVcbiB3aHkgb29tIGhhcHBlbnMuIFlvdSBjYW4gZ2V0IHNuYXBzaG90LlxuIFxuIFxuK3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmVcbis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK1xuK1doZW4gYSBoYXJkd2FyZSBtZW1vcnkgZXJyb3IgKGUuZy4gbXVsdGktYml0IEVDQykgaGl0cyBhIGtlcm5lbCBwYWdlXG4rdGhhdCBjYW5ub3QgYmUgcmVjb3ZlcmVkIGJ5IHRoZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGVyLCB0aGUgZGVmYXVsdFxuK2JlaGF2aW91ciBpcyB0byBpZ25vcmUgdGhlIGVycm9yIGFuZCBjb250aW51ZSBvcGVyYXRpb24uICBUaGlzIGlzXG4rZGFuZ2Vyb3VzIGJlY2F1c2UgdGhlIGNvcnJ1cHRlZCBkYXRhIHJlbWFpbnMgYWNjZXNzaWJsZSB0byB0aGUga2VybmVsLFxuK3Jpc2tpbmcgc2lsZW50IGRhdGEgY29ycnVwdGlvbiBvciBhIGRlbGF5ZWQgY3Jhc2ggd2hlbiB0aGUgcG9pc29uZWRcbittZW1vcnkgaXMgbmV4dCBhY2Nlc3NlZC5cbitcbitXaGVuIGVuYWJsZWQsIHRoaXMgc3lzY3RsIHRyaWdnZXJzIGEgcGFuaWMgb24gbWVtb3J5IGZhaWx1cmUgZXZlbnRzXG4raGl0dGluZyBrZXJuZWwtb3duZWQgcGFnZXMgdGhhdCB0aGUgaGFuZGxlciBjYW5ub3QgcmVjb3ZlcjpcbitgYFBhZ2VSZXNlcnZlZGBgIChmaXJtd2FyZSByZXNlcnZhdGlvbnMsIGtlcm5lbCBpbWFnZSwgdkRTTywgemVyb1xuK3BhZ2UsIGFuZCBzaW1pbGFyIG1lbWJsb2NrLXJlc2VydmVkIHJlZ2lvbnMpLCBgYFBhZ2VTbGFiYGAsXG4rYGBQYWdlVGFibGVgYCwgYW5kIGBgUGFnZUxhcmdlS21hbGxvY2BgLiAgVGhlc2UgYXJlIG93bmVkIGJ5IHRoZVxuK2tlcm5lbCBhbmQgdGhlIG1lbW9yeSBmYWlsdXJlIGhhbmRsZXIgY2Fubm90IHJlbGlhYmx5IGV2aWN0IHRoZWlyXG4rY29udGVudHMuXG4rXG4rT3RoZXIgdW5yZWNvdmVyYWJsZSBrZXJuZWwtb3duZWQgcG9wdWxhdGlvbnMgKHZtYWxsb2MgYWxsb2NhdGlvbnMsXG4ra2VybmVsIHN0YWNrIHBhZ2VzLCAuLi4pIGFyZSBub3QgY3VycmVudGx5IGNvdmVyZWQgYmVjYXVzZSB0aGVcbitoYW5kbGVyIGhhcyBubyBwYWdlLXR5cGUgc2lnbmFsIHRoYXQgZGlzdGluZ3Vpc2hlcyB0aGVtIGZyb20gYVxuK3VzZXJzcGFjZSBmb2xpbyB0ZW1wb3JhcmlseSBvZmYgdGhlIExSVSBkdXJpbmcgbWlncmF0aW9uIG9yXG4rY29tcGFjdGlvbi4gIFN1Y2ggcGFnZXMgc3RpbGwgZ28gdGhyb3VnaCB0aGUgc3RhbmRhcmRcbitNRl9NU0dfR0VUX0hXUE9JU09OIHBhdGg6IGBgUEdfaHdwb2lzb25gYCBpcyBzZXQgb24gdGhlbSBhbmQgYVxuK2RlbGF5ZWQgY3Jhc2ggb24gdGhlIG5leHQgYWNjZXNzIHJlbWFpbnMgcG9zc2libGUuICBDb3ZlcmFnZSBtYXlcbitncm93IGFzIHRoZSBoYW5kbGVyIGdhaW5zIHN0cm9uZ2VyIGtlcm5lbC1vd25lcnNoaXAgc2lnbmFscy5cbitcbitSZWNvdmVyYWJsZSBmYWlsdXJlIHBhdGhzIGFyZSBhbHNvIGludGVudGlvbmFsbHkgbGVmdCBvdXQ6IGluLWZsaWdodFxuK2J1ZGR5IGFsbG9jYXRpb25zIGFuZCBvdGhlciB0cmFuc2llbnQgcmFjZXMgd2l0aCB0aGUgcGFnZSBhbGxvY2F0b3JcbitjYW4gcmVhY2ggdGhlIHNhbWUgZGlhZ25vc3RpYywgYW5kIHBhbmlja2luZyBvbiB0aGVtIHdvdWxkIHJpc2tcbitraWxsaW5nIHRoZSBib3ggZm9yIGEgcGFnZSBkZXN0aW5lZCBmb3IgdXNlcnNwYWNlIHdoZXJlIHRoZSBzdGFuZGFyZFxuK1NJR0JVUyByZWNvdmVyeSBwYXRoIGFwcGxpZXMuICBQYWdlcyB3aG9zZSBzdGF0ZSBjb3VsZCBub3QgYmVcbitjbGFzc2lmaWVkIGF0IGFsbCBhcmUgbm90IGNvdmVyZWQgZWl0aGVyLCBzaW5jZSBhbiB1bmtub3duIHN0YXRlIGlzXG4rbm90IGEgc291bmQgYmFzaXMgZm9yIGEgcGFuaWMgZGVjaXNpb24uXG4rXG4rRm9yIG1hbnkgZW52aXJvbm1lbnRzIGl0IGlzIHByZWZlcmFibGUgdG8gcGFuaWMgaW1tZWRpYXRlbHkgd2l0aCBhIGNsZWFuXG4rY3Jhc2ggZHVtcCB0aGF0IGNhcHR1cmVzIHRoZSBvcmlnaW5hbCBlcnJvciBjb250ZXh0LCByYXRoZXIgdGhhbiB0b1xuK2NvbnRpbnVlIGFuZCBmYWNlIGEgcmFuZG9tIGNyYXNoIGxhdGVyIHdob3NlIGNhdXNlIGlzIGRpZmZpY3VsdCB0b1xuK2RpYWdub3NlLlxuK1xuK1VzZSBjYXNlc1xuKy0tLS0tLS0tLVxuK1xuK1RoaXMgb3B0aW9uIGlzIG1vc3QgdXNlZnVsIGluIGVudmlyb25tZW50cyB3aGVyZSB1bmF0dHJpYnV0ZWQgY3Jhc2hlc1xuK2FyZSBleHBlbnNpdmUgdG8gZGVidWcgb3Igd2hlcmUgZGF0YSBpbnRlZ3JpdHkgbXVzdCB0YWtlIHByZWNlZGVuY2VcbitvdmVyIGF2YWlsYWJpbGl0eTpcbitcbisqIExhcmdlIGZsZWV0cywgd2hlcmUgbXVsdGktYml0IEVDQyBlcnJvcnMgb24ga2VybmVsIHBhZ2VzIGFyZSBvYnNlcnZlZFxuKyAgcmVndWxhcmx5IGFuZCBwb3N0LW1vcnRlbSBhbmFseXNpcyBvZiBhbiB1bnJlbGF0ZWQgZG93bnN0cmVhbSBjcmFzaFxuKyAgKG9mdGVuIHNlY29uZHMgdG8gbWludXRlcyBhZnRlciB0aGUgb3JpZ2luYWwgZXJyb3IpIGNvbnN1bWVzXG4rICBzaWduaWZpY2FudCBlbmdpbmVlcmluZyBlZmZvcnQuXG4rXG4rKiBTeXN0ZW1zIGNvbmZpZ3VyZWQgd2l0aCBrZHVtcCwgd2hlcmUgcGFuaWNraW5nIGF0IHRoZSBtb21lbnQgb2YgdGhlXG4rICBoYXJkd2FyZSBlcnJvciBwcm9kdWNlcyBhIHZtY29yZSB0aGF0IHN0aWxsIGNvbnRhaW5zIHRoZSBmYXVsdGluZ1xuKyAgYWRkcmVzcywgdGhlIGFmZmVjdGVkIHBhZ2Ugc3RhdGUsIGFuZCB0aGUgb3JpZ2luYXRpbmcgTUNFL0dIRVNcbisgIHJlY29yZCDigJQgY29udGV4dCB0aGF0IGlzIHR5cGljYWxseSBsb3N0IGJ5IHRoZSB0aW1lIGEgZGVsYXllZCBjcmFzaFxuKyAgb2NjdXJzLlxuK1xuKyogSGlnaC1hdmFpbGFiaWxpdHkgY2x1c3RlcnMgdGhhdCByZWx5IG9uIGZhc3QsIGRldGVybWluaXN0aWMgbm9kZVxuKyAgZmFpbHVyZSBmb3IgZmFpbG92ZXIsIGFuZCBwcmVmZXIgYW4gaW1tZWRpYXRlIHBhbmljIG92ZXIgc2lsZW50IGRhdGFcbisgIGNvcnJ1cHRpb24gcHJvcGFnYXRpbmcgdG8gcmVwbGljYXMgb3IgcGVyc2lzdGVudCBzdG9yYWdlLlxuK1xuKyogS2VybmVsIGFuZCBwbGF0Zm9ybSBkZXZlbG9wZXJzIHJlcHJvZHVjaW5nIGh3cG9pc29uIGlzc3VlcyB3aXRoXG4rICB0b29scyBzdWNoIGFzIGBgbWNlLWluamVjdGBgIG9yIGVycm9yLWluamVjdGlvbiBkZWJ1Z2ZzIGludGVyZmFjZXMsXG4rICB3aGVyZSBwYW5pY2tpbmcgb24gdGhlIHVucmVjb3ZlcmFibGUgcGF0aCBtYWtlcyByZWdyZXNzaW9uc1xuKyAgaW1tZWRpYXRlbHkgdmlzaWJsZSBpbnN0ZWFkIG9mIHN1cmZhY2luZyBhcyBsYXRlciwgdW5yZWxhdGVkXG4rICBmYWlsdXJlcy5cbitcbis9ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuKzAgVHJ5IHRvIGNvbnRpbnVlIG9wZXJhdGlvbiAoZGVmYXVsdCkuXG4rMSBQYW5pYyBpbW1lZGlhdGVseS4gIElmIHRoZSBgYHBhbmljYGAgc3lzY3RsIGlzIGFsc28gbm9uLXplcm8gdGhlbiB0aGVcbisgIG1hY2hpbmUgd2lsbCBiZSByZWJvb3RlZC5cbis9ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK1xuK0V4YW1wbGU6OlxuK1xuKyAgICAgZWNobyAxIFx1MDAzZSAvcHJvYy9zeXMvdm0vcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZVxuK1xuK1xuIHBlcmNwdV9wYWdlbGlzdF9oaWdoX2ZyYWN0aW9uXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuaW5kZXggNTE1MDhhNTVjNDA1NWUuLmUwOTdmYzgyNjJjZjgzIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuY1xuKysrIGIvbW0vbWVtb3J5LWZhaWx1cmUuY1xuQEAgLTc0LDYgKzc0LDggQEAgc3RhdGljIGludCBzeXNjdGxfbWVtb3J5X2ZhaWx1cmVfcmVjb3ZlcnkgX19yZWFkX21vc3RseSA9IDE7XG4gXG4gc3RhdGljIGludCBzeXNjdGxfZW5hYmxlX3NvZnRfb2ZmbGluZSBfX3JlYWRfbW9zdGx5ID0gMTtcbiBcbitzdGF0aWMgaW50IHN5c2N0bF9wYW5pY19vbl91bnJlY292ZXJhYmxlX21mIF9fcmVhZF9tb3N0bHk7XG4rXG4gYXRvbWljX2xvbmdfdCBudW1fcG9pc29uZWRfcGFnZXMgX19yZWFkX21vc3RseSA9IEFUT01JQ19MT05HX0lOSVQoMCk7XG4gXG4gc3RhdGljIGJvb2wgaHdfbWVtb3J5X2ZhaWx1cmUgX19yZWFkX21vc3RseSA9IGZhbHNlO1xuQEAgLTE1NSw2ICsxNTcsMTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgbWVtb3J5X2ZhaWx1cmVfdGFibGVbXSA9IHtcbiBcdFx0LnByb2NfaGFuZGxlclx0PSBwcm9jX2RvaW50dmVjX21pbm1heCxcbiBcdFx0LmV4dHJhMVx0XHQ9IFNZU0NUTF9aRVJPLFxuIFx0XHQuZXh0cmEyXHRcdD0gU1lTQ1RMX09ORSxcbitcdH0sXG4rXHR7XG4rXHRcdC5wcm9jbmFtZVx0PSBcInBhbmljX29uX3VucmVjb3ZlcmFibGVfbWVtb3J5X2ZhaWx1cmVcIixcbitcdFx0LmRhdGFcdFx0PSBcdTAwMjZzeXNjdGxfcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZixcbitcdFx0Lm1heGxlblx0XHQ9IHNpemVvZihzeXNjdGxfcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZiksXG4rXHRcdC5tb2RlXHRcdD0gMDY0NCxcbitcdFx0LnByb2NfaGFuZGxlclx0PSBwcm9jX2RvaW50dmVjX21pbm1heCxcbitcdFx0LmV4dHJhMVx0XHQ9IFNZU0NUTF9aRVJPLFxuK1x0XHQuZXh0cmEyXHRcdD0gU1lTQ1RMX09ORSxcbiBcdH1cbiB9O1xuIFxuQEAgLTk4MCwxNyArOTkxLDYgQEAgc3RhdGljIGJvb2wgaGFzX2V4dHJhX3JlZmNvdW50KHN0cnVjdCBwYWdlX3N0YXRlICpwcywgc3RydWN0IHBhZ2UgKnAsXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLS8qXG4tICogRXJyb3IgaGl0IGtlcm5lbCBwYWdlLlxuLSAqIERvIG5vdGhpbmcsIHRyeSB0byBiZSBsdWNreSBhbmQgbm90IHRvdWNoIHRoaXMgaW5zdGVhZC4gRm9yIGEgZmV3IGNhc2VzIHdlXG4tICogY291bGQgYmUgbW9yZSBzb3BoaXN0aWNhdGVkLlxuLSAqL1xuLXN0YXRpYyBpbnQgbWVfa2VybmVsKHN0cnVjdCBwYWdlX3N0YXRlICpwcywgc3RydWN0IHBhZ2UgKnApXG4te1xuLVx0dW5sb2NrX3BhZ2UocCk7XG4tXHRyZXR1cm4gTUZfSUdOT1JFRDtcbi19XG4tXG4gLypcbiAgKiBQYWdlIGluIHVua25vd24gc3RhdGUuIERvIG5vdGhpbmcuXG4gICogVGhpcyBpcyBhIGNhdGNoLWFsbCBpbiBjYXNlIHdlIGZhaWwgdG8gbWFrZSBzZW5zZSBvZiB0aGUgcGFnZSBzdGF0ZS5cbkBAIC0xMTk5LDEwICsxMTk5LDggQEAgc3RhdGljIGludCBtZV9odWdlX3BhZ2Uoc3RydWN0IHBhZ2Vfc3RhdGUgKnBzLCBzdHJ1Y3QgcGFnZSAqcClcbiAjZGVmaW5lIG1sb2NrXHRcdCgxVUwgXHUwMDNjXHUwMDNjIFBHX21sb2NrZWQpXG4gI2RlZmluZSBscnVcdFx0KDFVTCBcdTAwM2NcdTAwM2MgUEdfbHJ1KVxuICNkZWZpbmUgaGVhZFx0XHQoMVVMIFx1MDAzY1x1MDAzYyBQR19oZWFkKVxuLSNkZWZpbmUgcmVzZXJ2ZWRcdCgxVUwgXHUwMDNjXHUwMDNjIFBHX3Jlc2VydmVkKVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcGFnZV9zdGF0ZSBlcnJvcl9zdGF0ZXNbXSA9IHtcbi1cdHsgcmVzZXJ2ZWQsXHRyZXNlcnZlZCxcdE1GX01TR19LRVJORUwsXHRtZV9rZXJuZWwgfSxcbiBcdC8qXG4gXHQgKiBmcmVlIHBhZ2VzIGFyZSBzcGVjaWFsbHkgZGV0ZWN0ZWQgb3V0c2lkZSB0aGlzIHRhYmxlOlxuIFx0ICogUEdfYnVkZHkgcGFnZXMgb25seSBtYWtlIGEgc21hbGwgZnJhY3Rpb24gb2YgYWxsIGZyZWUgcGFnZXMuXG5AQCAtMTIzNCw3ICsxMjMyLDYgQEAgc3RhdGljIHN0cnVjdCBwYWdlX3N0YXRlIGVycm9yX3N0YXRlc1tdID0ge1xuICN1bmRlZiBtbG9ja1xuICN1bmRlZiBscnVcbiAjdW5kZWYgaGVhZFxuLSN1bmRlZiByZXNlcnZlZFxuIFxuIHN0YXRpYyB2b2lkIHVwZGF0ZV9wZXJfbm9kZV9tZl9zdGF0cyh1bnNpZ25lZCBsb25nIHBmbixcbiBcdFx0XHRcdCAgICAgZW51bSBtZl9yZXN1bHQgcmVzdWx0KVxuQEAgLTEyNjksNiArMTI2NiwxNSBAQCBzdGF0aWMgdm9pZCB1cGRhdGVfcGVyX25vZGVfbWZfc3RhdHModW5zaWduZWQgbG9uZyBwZm4sXG4gXHQrK21mX3N0YXRzLVx1MDAzZXRvdGFsO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBwYW5pY19vbl91bnJlY292ZXJhYmxlX21mKGVudW0gbWZfYWN0aW9uX3BhZ2VfdHlwZSB0eXBlLFxuK1x0XHRcdFx0ICAgICAgZW51bSBtZl9yZXN1bHQgcmVzdWx0KVxuK3tcbitcdGlmICghc3lzY3RsX3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWYpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiB0eXBlID09IE1GX01TR19LRVJORUwgXHUwMDI2XHUwMDI2IHJlc3VsdCA9PSBNRl9JR05PUkVEO1xuK31cbitcbiAvKlxuICAqIFwiRGlydHkvQ2xlYW5cIiBpbmRpY2F0aW9uIGlzIG5vdCAxMDAlIGFjY3VyYXRlIGR1ZSB0byB0aGUgcG9zc2liaWxpdHkgb2ZcbiAgKiBzZXR0aW5nIFBHX2RpcnR5IG91dHNpZGUgcGFnZSBsb2NrLiBTZWUgYWxzbyBjb21tZW50IGFib3ZlIHNldF9wYWdlX2RpcnR5KCkuXG5AQCAtMTI4Niw2ICsxMjkyLDkgQEAgc3RhdGljIGludCBhY3Rpb25fcmVzdWx0KHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIG1mX2FjdGlvbl9wYWdlX3R5cGUgdHlwZSxcbiBcdHByX2VycihcIiUjbHg6IHJlY292ZXJ5IGFjdGlvbiBmb3IgJXM6ICVzXFxuXCIsXG4gXHRcdHBmbiwgYWN0aW9uX3BhZ2VfdHlwZXNbdHlwZV0sIGFjdGlvbl9uYW1lW3Jlc3VsdF0pO1xuIFxuK1x0aWYgKHBhbmljX29uX3VucmVjb3ZlcmFibGVfbWYodHlwZSwgcmVzdWx0KSlcbitcdFx0cGFuaWMoXCJNZW1vcnkgZmFpbHVyZTogJSNseDogdW5yZWNvdmVyYWJsZSBwYWdlXCIsIHBmbik7XG4rXG4gXHRyZXR1cm4gKHJlc3VsdCA9PSBNRl9SRUNPVkVSRUQgfHwgcmVzdWx0ID09IE1GX0RFTEFZRUQpID8gMCA6IC1FQlVTWTtcbiB9XG4gXG5AQCAtMTMzOSw2ICsxMzQ4LDM4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBIV1BvaXNvbkhhbmRsYWJsZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBmbGFncylcbiBcdHJldHVybiBQYWdlTFJVKHBhZ2UpIHx8IGlzX2ZyZWVfYnVkZHlfcGFnZShwYWdlKTtcbiB9XG4gXG4rLypcbisgKiBQb3NpdGl2ZSBpZGVudGlmaWNhdGlvbiBvZiBwYWdlcyB0aGUgaHdwb2lzb24gaGFuZGxlciBjYW5ub3QgcmVjb3ZlcjpcbisgKiBwYWdlcyBvd25lZCBieSBrZXJuZWwgaW50ZXJuYWxzIHdpdGggbm8gdXNlcnNwYWNlIG1hcHBpbmcgdG8gdW5tYXAsIG5vXG4rICogZmlsZSBtYXBwaW5nIHRvIGludmFsaWRhdGUsIGFuZCBubyBtaWdyYXRpb24gdGFyZ2V0LlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19rZXJuZWxfb3duZWRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbit7XG4rXHRzdHJ1Y3QgcGFnZSAqaGVhZDtcbitcdGJvb2wga2VybmVsX293bmVkO1xuK1xuK1x0LyogUEdfcmVzZXJ2ZWQgaXMgYSBwZXItcGFnZSBmbGFnLCBuZXZlciBzZXQgb24gYSBjb21wb3VuZCBwYWdlLiAqL1xuK1x0aWYgKFBhZ2VSZXNlcnZlZChwYWdlKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHQvKlxuK1x0ICogUGFnZS10eXBlIGJpdHMgbGl2ZSBvbmx5IG9uIHRoZSBoZWFkIHBhZ2UsIHNvIHJlc29sdmUgYW55IHRhaWxcbitcdCAqIGZpcnN0LiAgVGhlIGNoZWNrIHRha2VzIG5vIHJlZmNvdW50OyByZWNoZWNrIHRoZSBoZWFkIGFmdGVyd2FyZHNcbitcdCAqIHNvIGEgY29uY3VycmVudCBzcGxpdCBvciBjb21wb3VuZCBmcmVlIGNhbm5vdCBsZWF2ZSB1cyB0cnVzdGluZ1xuK1x0ICogYSBzdGFsZSB2aWV3LiAgQSByZXNpZHVhbCBmcmVlLVx1MDAzZWFsbG9jLVx1MDAzZWZyZWUgY2Fubm90IGJlIGNsb3NlZCBoZXJlXG4rXHQgKiAoZnJvemVuIHNsYWIgYW5kIGxhcmdlLWttYWxsb2MgcGFnZXMgY2Fubm90IGJlIHBpbm5lZCksIGJ1dCBpc1xuK1x0ICogaGFybWxlc3M6IHdoZXJlIGEgd3JvbmcgdmVyZGljdCBjb3VsZCBwYW5pYywgbWVtb3J5X2ZhaWx1cmUoKSBoYXNcbitcdCAqIGFscmVhZHkgc2V0IFBhZ2VIV1BvaXNvbiwgd2hpY2ggYmFycyB0aGUgcGFnZSBmcm9tIHRoZSBhbGxvY2F0b3IuXG4rXHQgKi9cbityZXRyeTpcbitcdGhlYWQgPSBjb21wb3VuZF9oZWFkKHBhZ2UpO1xuK1x0a2VybmVsX293bmVkID0gUGFnZVNsYWIoaGVhZCkgfHwgUGFnZVRhYmxlKGhlYWQpIHx8XG4rXHRcdCAgICAgICBQYWdlTGFyZ2VLbWFsbG9jKGhlYWQpO1xuK1x0aWYgKGhlYWQgIT0gY29tcG91bmRfaGVhZChwYWdlKSlcbitcdFx0Z290byByZXRyeTtcbitcdHJldHVybiBrZXJuZWxfb3duZWQ7XG4rfVxuK1xuIHN0YXRpYyBpbnQgX19nZXRfaHdwb2lzb25fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBmbGFncylcbiB7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbkBAIC0xMzg1LDYgKzE0MjYsMTkgQEAgc3RhdGljIGludCBnZXRfYW55X3BhZ2Uoc3RydWN0IHBhZ2UgKnAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IE1GX0NPVU5UX0lOQ1JFQVNFRClcbiBcdFx0Y291bnRfaW5jcmVhc2VkID0gdHJ1ZTtcbiBcbitcdC8qXG4rXHQgKiBQYWdlIHR5cGVzIHdlIGtub3cgYXJlIGtlcm5lbC1vd25lZCBhbmQgY2Fubm90IGJlIHJlY292ZXJlZC5cbitcdCAqIFNob3J0LWNpcmN1aXQgYmVmb3JlIHRoZSBzaGFrZV9wYWdlKCkgLyByZXRyeSBsb29wLCB3aGljaFxuK1x0ICogY2Fubm90IHR1cm4gYW55IG9mIHRoZXNlIGludG8gc29tZXRoaW5nIEhXUG9pc29uSGFuZGxhYmxlKCkuXG4rXHQgKiBEcm9wIHRoZSBjYWxsZXIncyByZWZlcmVuY2UgaWYgTUZfQ09VTlRfSU5DUkVBU0VEIHRvb2sgb25lLlxuK1x0ICovXG4rXHRpZiAoaXNfa2VybmVsX293bmVkX3BhZ2UocCkpIHtcbitcdFx0aWYgKGNvdW50X2luY3JlYXNlZClcbitcdFx0XHRwdXRfcGFnZShwKTtcbitcdFx0cmV0ID0gLUVOT1RSRUNPVkVSQUJMRTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4gdHJ5X2FnYWluOlxuIFx0aWYgKCFjb3VudF9pbmNyZWFzZWQpIHtcbiBcdFx0cmV0ID0gX19nZXRfaHdwb2lzb25fcGFnZShwLCBmbGFncyk7XG5AQCAtMTQzMiw3ICsxNDg2LDcgQEAgc3RhdGljIGludCBnZXRfYW55X3BhZ2Uoc3RydWN0IHBhZ2UgKnAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4gXHRcdHJldCA9IC1FSU87XG4gXHR9XG4gb3V0OlxuLVx0aWYgKHJldCA9PSAtRUlPKVxuK1x0aWYgKHJldCA9PSAtRUlPIHx8IHJldCA9PSAtRU5PVFJFQ09WRVJBQkxFKVxuIFx0XHRwcl9lcnIoXCIlI2x4OiB1bmhhbmRsYWJsZSBwYWdlLlxcblwiLCBwYWdlX3RvX3BmbihwKSk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuQEAgLTE0ODksNyArMTU0MywxMCBAQCBzdGF0aWMgaW50IF9fZ2V0X3VucG9pc29uX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4gICogICAgICAgICAtRUlPIGZvciBwYWdlcyBvbiB3aGljaCB3ZSBjYW4gbm90IGhhbmRsZSBtZW1vcnkgZXJyb3JzLFxuICAqICAgICAgICAgLUVCVVNZIHdoZW4gZ2V0X2h3cG9pc29uX3BhZ2UoKSBoYXMgcmFjZWQgd2l0aCBwYWdlIGxpZmVjeWNsZVxuICAqICAgICAgICAgb3BlcmF0aW9ucyBsaWtlIGFsbG9jYXRpb24gYW5kIGZyZWUsXG4tICogICAgICAgICAtRUhXUE9JU09OIHdoZW4gdGhlIHBhZ2UgaXMgaHdwb2lzb25lZCBhbmQgdGFrZW4gb2ZmIGZyb20gYnVkZHkuXG4rICogICAgICAgICAtRUhXUE9JU09OIHdoZW4gdGhlIHBhZ2UgaXMgaHdwb2lzb25lZCBhbmQgdGFrZW4gb2ZmIGZyb20gYnVkZHksXG4rICogICAgICAgICAtRU5PVFJFQ09WRVJBQkxFIGZvciBrZXJuZWwtb3duZWQgcGFnZXMgaWRlbnRpZmllZCBieVxuKyAqICAgICAgICAgaXNfa2VybmVsX293bmVkX3BhZ2UoKSAoUEdfcmVzZXJ2ZWQsIHNsYWIsXG4rICogICAgICAgICBwYWdlLXRhYmxlLCBsYXJnZS1rbWFsbG9jKSB0aGF0IHRoZSBoYW5kbGVyIGNhbm5vdCByZWNvdmVyLlxuICAqL1xuIHN0YXRpYyBpbnQgZ2V0X2h3cG9pc29uX3BhZ2Uoc3RydWN0IHBhZ2UgKnAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4ge1xuQEAgLTI0MDIsNyArMjQ1OSw4IEBAIGludCBtZW1vcnlfZmFpbHVyZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuIFx0ICogdGhhdCBtYXkgbWFrZSBwYWdlX3JlZl9mcmVlemUoKS9wYWdlX3JlZl91bmZyZWV6ZSgpIG1pc21hdGNoLlxuIFx0ICovXG4gXHRyZXMgPSBnZXRfaHdwb2lzb25fcGFnZShwLCBmbGFncyk7XG4tXHRpZiAoIXJlcykge1xuK1x0c3dpdGNoIChyZXMpIHtcbitcdGNhc2UgMDpcbiBcdFx0aWYgKGlzX2ZyZWVfYnVkZHlfcGFnZShwKSkge1xuIFx0XHRcdGlmICh0YWtlX3BhZ2Vfb2ZmX2J1ZGR5KHApKSB7XG4gXHRcdFx0XHRwYWdlX3JlZl9pbmMocCk7XG5AQCAtMjQyMSw3ICsyNDc5LDE5IEBAIGludCBtZW1vcnlfZmFpbHVyZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxuIFx0XHRcdHJlcyA9IGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfS0VSTkVMX0hJR0hfT1JERVIsIE1GX0lHTk9SRUQpO1xuIFx0XHR9XG4gXHRcdGdvdG8gdW5sb2NrX211dGV4O1xuLVx0fSBlbHNlIGlmIChyZXMgXHUwMDNjIDApIHtcbitcdGNhc2UgMTpcbitcdFx0LyogR290IGEgcmVmY291bnQgb24gYSBoYW5kbGFibGUgcGFnZS4gKi9cbitcdFx0YnJlYWs7XG4rXHRjYXNlIC1FTk9UUkVDT1ZFUkFCTEU6XG4rXHRcdC8qXG4rXHRcdCAqIFN0YWJsZSB1bmhhbmRsYWJsZSBrZXJuZWwtb3duZWQgcGFnZSAoUEdfcmVzZXJ2ZWQsXG4rXHRcdCAqIHNsYWIsIHBhZ2UgdGFibGVzLCBsYXJnZS1rbWFsbG9jKS5cbitcdFx0ICogTm8gcmVjb3ZlcnkgcG9zc2libGUuXG4rXHRcdCAqL1xuK1x0XHRyZXMgPSBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0tFUk5FTCwgTUZfSUdOT1JFRCk7XG4rXHRcdGdvdG8gdW5sb2NrX211dGV4O1xuK1x0ZGVmYXVsdDpcbitcdFx0LyogVHJhbnNpZW50IGxpZmVjeWNsZSByYWNlIHdpdGggdGhlIHBhZ2UgYWxsb2NhdG9yLiAqL1xuIFx0XHRyZXMgPSBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0dFVF9IV1BPSVNPTiwgTUZfSUdOT1JFRCk7XG4gXHRcdGdvdG8gdW5sb2NrX211dGV4O1xuIFx0fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbmluZGV4IGU2ZGY5NjhmMDk3MWM4Li5lZDMyMWFlNzA5ZGFjZiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuQEAgLTE3NCw2ICsxNzQsMTAgQEAgVEVTVF9QUk9HUyArPSBrc2Z0X3VzZXJmYXVsdGZkLnNoXG4gVEVTVF9QUk9HUyArPSBrc2Z0X3ZtYV9tZXJnZS5zaFxuIFRFU1RfUFJPR1MgKz0ga3NmdF92bWFsbG9jLnNoXG4gXG4rIyBEZXN0cnVjdGl2ZTogZXZlcnkgc3VjY2Vzc2Z1bCBydW4gcGFuaWNzIHRoZSBrZXJuZWwuICBJbnN0YWxsZWQgYW5kXG4rIyBrZXB0IGV4ZWN1dGFibGUsIGJ1dCBub3QgcnVuIGZyb20gYSBkZWZhdWx0IGtzZWxmdGVzdCBpbnZvY2F0aW9uLlxuK1RFU1RfUFJPR1NfRVhURU5ERUQgKz0gaHdwb2lzb24tcGFuaWMuc2hcbitcbiBURVNUX0ZJTEVTIDo9IHRlc3Rfdm1hbGxvYy5zaFxuIFRFU1RfRklMRVMgKz0gdGVzdF9obW0uc2hcbiBURVNUX0ZJTEVTICs9IHZhX2hpZ2hfYWRkcl9zd2l0Y2guc2hcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9od3BvaXNvbi1wYW5pYy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h3cG9pc29uLXBhbmljLnNoXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmQ5NTNkMTM2NzMzMjQ0XG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9od3BvaXNvbi1wYW5pYy5zaFxuQEAgLTAsMCArMSwyNTUgQEBcbisjIS9iaW4vYmFzaFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisjXG4rIyBWZXJpZnkgdm0ucGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZSBieSBpbmplY3RpbmcgYSBod3BvaXNvblxuKyMgZXJyb3Igb24gYSBrZXJuZWwtb3duZWQgcGFnZSBhbmQgY29uZmlybWluZyB0aGUga2VybmVsIHBhbmljcy5cbisjXG4rIyBUaHJlZSBcImtpbmRzXCIgb2Yga2VybmVsLW93bmVkIHBhZ2UgY2FuIGJlIHRhcmdldGVkLCBzZWxlY3RhYmxlIHZpYSB0aGVcbisjIGZpcnN0IHBvc2l0aW9uYWwgYXJndW1lbnQgKGRlZmF1bHQ6IHJvZGF0YSk6XG4rI1xuKyMgICByb2RhdGEgIC0gYSBQR19yZXNlcnZlZCBwYWdlIGluIHRoZSBrZXJuZWwgcm9kYXRhIHJhbmdlXG4rIyAgICAgICAgICAgICAoc291cmNlZCBmcm9tIC9wcm9jL2lvbWVtIFwiS2VybmVsIHJvZGF0YVwiKS4gIEV4ZXJjaXNlc1xuKyMgICAgICAgICAgICAgbWVtb3J5X2ZhaWx1cmUoKSAtXHUwMDNlIGdldF9hbnlfcGFnZSgpIG9uIGEgUGFnZVJlc2VydmVkIHBhZ2UuXG4rI1xuKyMgICBzbGFiICAgIC0gYSBzbGFiIHBhZ2UgZm91bmQgdmlhIC9wcm9jL2twYWdlZmxhZ3MgKEtQRl9TTEFCKS5cbisjICAgICAgICAgICAgIEV4ZXJjaXNlcyBtZW1vcnlfZmFpbHVyZSgpIC1cdTAwM2UgZ2V0X2FueV9wYWdlKCkgb24gYSBub25cbisjICAgICAgICAgICAgIFBHX3Jlc2VydmVkIGtlcm5lbC1vd25lZCBwYWdlLiAgVGhpcyBwYXRoIGlzIHdoYXQgY2F0Y2hlc1xuKyMgICAgICAgICAgICAgcmVncmVzc2lvbnMgd2hlcmUgZ2V0X2FueV9wYWdlKCkgY29sbGFwc2VzIGtlcm5lbC1vd25lZFxuKyMgICAgICAgICAgICAgcGFnZXMgaW50byBhIHRyYW5zaWVudCAtRUlPIGluc3RlYWQgb2YgLUVOT1RSRUNPVkVSQUJMRS5cbisjXG4rIyAgIHBndGFibGUgLSBhIHBhZ2UtdGFibGUgcGFnZSBmb3VuZCB2aWEgL3Byb2Mva3BhZ2VmbGFncyAoS1BGX1BHVEFCTEUpLlxuKyMgICAgICAgICAgICAgU2FtZSBwYXRoIGFzIHNsYWIsIGRpZmZlcmVudCBwYWdlIHR5cGUuXG4rI1xuKyMgVGhpcyB0ZXN0IGlzIERFU1RSVUNUSVZFOiBhIHN1Y2Nlc3NmdWwgcnVuIGNyYXNoZXMgdGhlIGtlcm5lbC4gIEl0IGlzXG4rIyBtZWFudCB0byBiZSBleGVjdXRlZCBpbnNpZGUgYSBkaXNwb3NhYmxlIFZNIChlLmcuIHZpcnRtZS1uZykgd2l0aCBhXG4rIyBzZXJpYWwgY29uc29sZSBjYXB0dXJlZCBieSB0aGUgaGFybmVzcy4gIEl0IGlzIHNraXBwZWQgdW5sZXNzIHRoZVxuKyMgY2FsbGVyIG9wdHMgaW4gdmlhIFJVTl9ERVNUUlVDVElWRT0xLlxuKyNcbisjIFRlc3QgcGFzc2VzIGV4dGVybmFsbHk6IHRoZSBrZXJuZWwgbXVzdCBwYW5pYyB3aXRoXG4rIyAgIFwiTWVtb3J5IGZhaWx1cmU6IFx1MDAzY3Bmblx1MDAzZTogdW5yZWNvdmVyYWJsZSBwYWdlXCJcbisjIEEgcmV0dXJuIGZyb20gdGhlIGluamVjdCBtZWFucyBubyBwYW5pYyBmaXJlZDogdGhhdCBpcyBhIGZhaWx1cmUsXG4rIyB1bmxlc3MgdGhlIHRhcmdldCBQRk4gcmFjZWQgdG8gYSBkaWZmZXJlbnQgcGFnZSB0eXBlIGJlZm9yZSBpbmplY3Rpb24sXG4rIyBpbiB3aGljaCBjYXNlIHRoZSBydW4gaXMgaW5jb25jbHVzaXZlIGFuZCBpcyBza2lwcGVkLlxuKyNcbisjIEF1dGhvcjogQnJlbm8gTGVpdGFvIFx1MDAzY2xlaXRhb0BkZWJpYW4ub3JnXHUwMDNlXG4rXG4rc2V0IC11XG4rXG4rIyBLVEFQIG91dHB1dCBoZWxwZXJzIChrdGFwX3ByaW50X21zZywga3RhcF9za2lwX2FsbCwga3RhcF9leGl0X2ZhaWxfbXNnLCAuLi4pLlxuK0RJUj1cIiQoZGlybmFtZSBcIiQocmVhZGxpbmsgLWYgXCIkMFwiKVwiKVwiXG4rIyBzaGVsbGNoZWNrIHNvdXJjZT0uLi9rc2VsZnRlc3Qva3RhcF9oZWxwZXJzLnNoXG4rc291cmNlIFwiJHtESVJ9XCIvLi4va3NlbGZ0ZXN0L2t0YXBfaGVscGVycy5zaFxuK1xuK3N5c2N0bF9wYXRoPS9wcm9jL3N5cy92bS9wYW5pY19vbl91bnJlY292ZXJhYmxlX21lbW9yeV9mYWlsdXJlXG4raW5qZWN0X3BhdGg9L3N5cy9kZXZpY2VzL3N5c3RlbS9tZW1vcnkvaGFyZF9vZmZsaW5lX3BhZ2VcbitrcGFnZWZsYWdzX3BhdGg9L3Byb2Mva3BhZ2VmbGFnc1xuK3VucG9pc29uX3BhdGg9L3N5cy9rZXJuZWwvZGVidWcvaHdwb2lzb24vdW5wb2lzb24tcGZuXG4rXG4rIyAvcHJvYy9rcGFnZWZsYWdzIGJpdCBwb3NpdGlvbnMgKHNlZSBpbmNsdWRlL3VhcGkvbGludXgva2VybmVsLXBhZ2UtZmxhZ3MuaClcbitLUEZfU0xBQj03XG4rS1BGX0NPTVBPVU5EX1RBSUw9MTZcbitLUEZfSFdQT0lTT049MTlcbitLUEZfTk9QQUdFPTIwXG4rS1BGX1BHVEFCTEU9MjZcbitLUEZfUkVTRVJWRUQ9MzJcbitcbitwYWdlc2l6ZT0kKGdldGNvbmYgUEFHRV9TSVpFKVxuK1xuK2tpbmQ9JHsxOi1yb2RhdGF9XG4rXG4raWYgWyBcIiQoaWQgLXUpXCIgLW5lIDAgXTsgdGhlblxuK1x0a3RhcF9za2lwX2FsbCBcIm11c3QgcnVuIGFzIHJvb3RcIlxuK1x0ZXhpdCBcIiRLU0ZUX1NLSVBcIlxuK2ZpXG4rXG4raWYgWyAhIC13IFwiJHN5c2N0bF9wYXRoXCIgXTsgdGhlblxuK1x0a3RhcF9za2lwX2FsbCBcIiRzeXNjdGxfcGF0aCBub3QgcHJlc2VudCAoa2VybmVsIHdpdGhvdXQgdGhlIHN5c2N0bD8pXCJcbitcdGV4aXQgXCIkS1NGVF9TS0lQXCJcbitmaVxuK1xuK2lmIFsgISAtdyBcIiRpbmplY3RfcGF0aFwiIF07IHRoZW5cbitcdGt0YXBfc2tpcF9hbGwgXCIkaW5qZWN0X3BhdGggbm90IHByZXNlbnQgKG5vIE1FTU9SWV9IT1RQTFVHPylcIlxuK1x0ZXhpdCBcIiRLU0ZUX1NLSVBcIlxuK2ZpXG4rXG4raWYgWyBcIiR7UlVOX0RFU1RSVUNUSVZFOi0wfVwiICE9IFwiMVwiIF07IHRoZW5cbitcdGt0YXBfc2tpcF9hbGwgXCJkZXN0cnVjdGl2ZSB0ZXN0OyByZS1ydW4gd2l0aCBSVU5fREVTVFJVQ1RJVkU9MSBpbnNpZGUgYSBkaXNwb3NhYmxlIFZNXCJcbitcdGV4aXQgXCIkS1NGVF9TS0lQXCJcbitmaVxuK1xuKyMgUGljayBhIFBGTiBpbnNpZGUgdGhlIGtlcm5lbCBpbWFnZSByb2RhdGEgcmVnaW9uIG9mIC9wcm9jL2lvbWVtLlxuKyMgVGhpcyBpcyBwcmVmZXJyZWQgb3ZlciBhIHRvcC1sZXZlbCBcIlJlc2VydmVkXCIgZW50cnkgYmVjYXVzZSB0b3AtbGV2ZWxcbisjIFJlc2VydmVkIHJhbmdlcyBhcmUgb2Z0ZW4gZmlybXdhcmUgaG9sZXMgdGhhdCBoYXZlIG5vIGJhY2tpbmcgc3RydWN0XG4rIyBwYWdlOyBwZm5fdG9fb25saW5lX3BhZ2UoKSByZXR1cm5zIE5VTEwgb24gdGhvc2UgYW5kIG1lbW9yeV9mYWlsdXJlKClcbisjIGJhaWxzIG91dCB3aXRoIC1FTlhJTyBiZWZvcmUgcmVhY2hpbmcgdGhlIHBhbmljIHBhdGguXG4rI1xuKyMgXCJLZXJuZWwgcm9kYXRhXCIgaXMgcmVwb3J0ZWQgYXMgYSBzdWItcmVzb3VyY2Ugb2YgXCJTeXN0ZW0gUkFNXCIgb24gZXZlcnlcbisjIG1ham9yIGFyY2hpdGVjdHVyZSwgd2hpY2ggZ3VhcmFudGVlczpcbisjICAgLSB0aGUgUEZOIGlzIGJhY2tlZCBieSBzdHJ1Y3QgcGFnZSAod2l0aGluIGFuIG9ubGluZSBtZW1vcnkgcmFuZ2UpO1xuKyMgICAtIFBHX3Jlc2VydmVkIGlzIHNldCBvbiB0aGUgcGFnZSAoa2VybmVsIGltYWdlIGFyZWEpO1xuKyMgICAtIHRoZSBtZW1vcnkgaXMgcmVhZC1vbmx5LCBzbyBzZXR0aW5nIFBHX2h3cG9pc29uIG9uIGl0IGRvZXMgbm90XG4rIyAgICAgY29ycnVwdCB3cml0YWJsZSBrZXJuZWwgc3RhdGUgaWYgdGhlIHBhbmljIHNvbWVob3cgZG9lcyBub3QgZmlyZS5cbisjXG4rIyAvcHJvYy9pb21lbSBlbnRyaWVzIGxvb2sgbGlrZSAoaW5kZW50ZWQgZm9yIHN1Yi1yZXNvdXJjZXMpOlxuKyMgICAgIFwiICAwMjUwMDAwMC0wMmZmZmZmZiA6IEtlcm5lbCByb2RhdGFcIlxuK3BpY2tfcm9kYXRhX3BoeXNfYWRkcigpIHtcbitcdGF3ayAtdiBwYWdlc2l6ZT1cIiQoZ2V0Y29uZiBQQUdFX1NJWkUpXCIgJ1xuK1x0IyBDb252ZXJ0IGEgaGV4IHN0cmluZyB0byBhIG51bWJlciB3aXRob3V0IHJlbHlpbmcgb24gdGhlIGdhd2stb25seVxuK1x0IyBzdHJ0b251bSgpLiAgbWF3ayBsYWNrcyBpdCBhbmQgd291bGQgb3RoZXJ3aXNlIHNwdXJpb3VzbHkgc2tpcFxuK1x0IyB0aGlzIHRlc3Qgb24gZGlzdHJvcyB0aGF0IHNoaXAgbWF3ayBhcyAvdXNyL2Jpbi9hd2suXG4rXHRmdW5jdGlvbiBoZXgybnVtKHMsICAgbiwgaSwgYywgdikge1xuK1x0XHRuID0gMFxuK1x0XHRmb3IgKGkgPSAxOyBpIFx1MDAzYz0gbGVuZ3RoKHMpOyBpKyspIHtcbitcdFx0XHRjID0gdG9sb3dlcihzdWJzdHIocywgaSwgMSkpXG4rXHRcdFx0diA9IGluZGV4KFwiMDEyMzQ1Njc4OWFiY2RlZlwiLCBjKSAtIDFcbitcdFx0XHRpZiAodiBcdTAwM2MgMClcbitcdFx0XHRcdHJldHVybiAtMVxuK1x0XHRcdG4gPSBuICogMTYgKyB2XG4rXHRcdH1cbitcdFx0cmV0dXJuIG5cbitcdH1cbitcdC86IEtlcm5lbCByb2RhdGFbWzpzcGFjZTpdXSokLyB7XG4rXHRcdHN1YigvXltbOnNwYWNlOl1dKy8sIFwiXCIpXG4rXHRcdG4gPSBzcGxpdCgkMCwgYSwgL1stIF0vKVxuK1x0XHRzdGFydCA9IGhleDJudW0oYVsxXSlcbitcdFx0ZW5kICAgPSBoZXgybnVtKGFbMl0pXG4rXHRcdGlmIChlbmQgXHUwMDNjPSBzdGFydClcbitcdFx0XHRuZXh0XG4rXHRcdCMgUGFnZS1hbGlnbiB1cHdhcmQgYW5kIGVtaXQgdGhlIGZpcnN0IGJ5dGUgb2YgdGhhdCBwYWdlLlxuK1x0XHRwZm4gPSBpbnQoKHN0YXJ0ICsgcGFnZXNpemUgLSAxKSAvIHBhZ2VzaXplKVxuK1x0XHRwcmludGYgXCIweCV4XFxuXCIsIHBmbiAqIHBhZ2VzaXplXG4rXHRcdGV4aXQgMFxuK1x0fVxuK1x0JyAvcHJvYy9pb21lbVxuK31cbitcbisjIFdhbGsgL3Byb2Mva3BhZ2VmbGFncyBhbmQgcmV0dXJuIHRoZSBwaHlzIGFkZHIgb2YgdGhlIGZpcnN0IFBGTiB0aGF0XG4rIyBoYXMgYml0ICQxIHNldCwgd2l0aCBLUEZfSFdQT0lTT04sIEtQRl9OT1BBR0UgYW5kIEtQRl9DT01QT1VORF9UQUlMXG4rIyBhbGwgY2xlYXIgKHNvIHdlIGF0dGFjayBhIHJlYWwsIG5vbi10YWlsLCBub3QtYWxyZWFkeS1wb2lzb25lZCBwYWdlKS5cbisjXG4rIyBXZSBza2lwIHRoZSBmaXJzdCAxNiBNaUIgb2YgUEZOcyB0byBzdGVwIHBhc3QgbG93LW1lbW9yeSBzcGVjaWFsXG4rIyByYW5nZXMgKEJJT1MvRUZJL0FDUEkvZXRjLikgdGhhdCBvZnRlbiBhcmUgUEdfcmVzZXJ2ZWQgYW5kIHdvdWxkIG5vdFxuKyMgZXhoaWJpdCB0aGUgc2xhYi9wZ3RhYmxlIHR5cGUgd2UgYXJlIGxvb2tpbmcgZm9yLlxuK3BpY2tfa3BhZ2VmbGFnc19waHlzX2FkZHIoKSB7XG4rXHRsb2NhbCB3YW50X2JpdD0kMVxuK1x0bG9jYWwgcGFnZXNpemUgc2tpcF9wZm5cbitcbitcdFsgLXIgXCIka3BhZ2VmbGFnc19wYXRoXCIgXSB8fCByZXR1cm5cbitcbitcdHBhZ2VzaXplPSQoZ2V0Y29uZiBQQUdFX1NJWkUpXG4rXHRza2lwX3Bmbj0kKCgoMTYgKiAxMDI0ICogMTAyNCkgLyBwYWdlc2l6ZSkpXG4rXG4rXHRvZCAtQW4gLXR4OCAtdiAtdzggLWogXCIkKChza2lwX3BmbiAqIDgpKVwiIFwiJGtwYWdlZmxhZ3NfcGF0aFwiIDJcdTAwM2UvZGV2L251bGwgfCBcXFxuK1x0YXdrIC12IHdhbnRfYml0PVwiJHdhbnRfYml0XCIgXFxcbitcdCAgICAtdiBod3BfYml0PVwiJEtQRl9IV1BPSVNPTlwiIFxcXG4rXHQgICAgLXYgbm9wYWdlX2JpdD1cIiRLUEZfTk9QQUdFXCIgXFxcbitcdCAgICAtdiB0YWlsX2JpdD1cIiRLUEZfQ09NUE9VTkRfVEFJTFwiIFxcXG4rXHQgICAgLXYgYmFzZV9wZm49XCIkc2tpcF9wZm5cIiBcXFxuK1x0ICAgIC12IHBhZ2VzaXplPVwiJHBhZ2VzaXplXCIgJ1xuK1x0IyBUZXN0IHdoZXRoZXIgYml0IFwiYlwiIGlzIHNldCBpbiB0aGUgMTYtaGV4LWRpZ2l0IHZhbHVlIFwiaGV4XCIuXG4rXHQjIERvbmUgd2l0aCBzdWJzdHJpbmcgKyBwZXItZGlnaXQgbG9va3VwIHNvIHdlIG5ldmVyIHJlbHkgb24gYXdrXG4rXHQjIGJpdHdpc2Ugb3BlcmF0b3JzIChtYXdrIGxhY2tzIHRoZW0pLCA2NC1iaXQgRlAgcHJlY2lzaW9uIG9yIHRoZVxuK1x0IyBnYXdrLW9ubHkgc3RydG9udW0oKS5cbitcdGZ1bmN0aW9uIGJpdF9zZXQoaGV4LCBiLCAgICBkaSwgYmksIGMsIHYpIHtcbitcdFx0ZGkgPSBpbnQoYiAvIDQpXG4rXHRcdGJpID0gYiAtIGRpICogNFxuK1x0XHRjID0gc3Vic3RyKGhleCwgbGVuZ3RoKGhleCkgLSBkaSwgMSlcbitcdFx0diA9IGluZGV4KFwiMDEyMzQ1Njc4OWFiY2RlZlwiLCB0b2xvd2VyKGMpKSAtIDFcbitcdFx0aWYgKGJpID09IDApIHJldHVybiAodiAlIDIpID09IDFcbitcdFx0aWYgKGJpID09IDEpIHJldHVybiBpbnQodiAvIDIpICUgMiA9PSAxXG4rXHRcdGlmIChiaSA9PSAyKSByZXR1cm4gaW50KHYgLyA0KSAlIDIgPT0gMVxuK1x0XHRyZXR1cm4gaW50KHYgLyA4KSAlIDIgPT0gMVxuK1x0fVxuK1x0e1xuK1x0XHRnc3ViKC9eW1s6c3BhY2U6XV0rLywgXCJcIilcbitcdFx0aCA9ICQxXG4rXHRcdGlmIChiaXRfc2V0KGgsIHdhbnRfYml0KSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFiaXRfc2V0KGgsIGh3cF9iaXQpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIWJpdF9zZXQoaCwgbm9wYWdlX2JpdCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhYml0X3NldChoLCB0YWlsX2JpdCkpIHtcbitcdFx0XHRwZm4gPSBiYXNlX3BmbiArIE5SIC0gMVxuK1x0XHRcdHByaW50ZiBcIjB4JXhcXG5cIiwgcGZuICogcGFnZXNpemVcbitcdFx0XHRleGl0IDBcbitcdFx0fVxuK1x0fVxuK1x0J1xuK31cbitcbisjIFJldHVybiAwIGlmIC9wcm9jL2twYWdlZmxhZ3MgYml0ICQyIGlzIHNldCBmb3IgUEZOICQxLCAxIGlmIGl0IGlzXG4rIyBjbGVhciwgb3IgMiBpZiB0aGUgd29yZCBjYW5ub3QgYmUgcmVhZC4gIFVzZWQgdG8gcmUtY29uZmlybSB0aGUgdGFyZ2V0XG4rIyBwYWdlIHR5cGUgYWZ0ZXIgYSBub24tcGFuaWNraW5nIGluamVjdC5cbitrcGFnZWZsYWdzX2JpdF9zZXQoKSB7XG4rXHRsb2NhbCB3b3JkXG4rXG4rXHR3b3JkPSQob2QgLUFuIC10eDggLXYgLWogXCIkKCgkMSAqIDgpKVwiIC1OIDggXCIka3BhZ2VmbGFnc19wYXRoXCIgMlx1MDAzZS9kZXYvbnVsbCB8IHRyIC1kICdbOnNwYWNlOl0nKVxuK1x0WyAtbiBcIiR3b3JkXCIgXSB8fCByZXR1cm4gMlxuK1x0KCggKDE2IyR3b3JkIFx1MDAzZVx1MDAzZSAkMikgXHUwMDI2IDEgKSlcbit9XG4rXG4rIyBCZXN0LWVmZm9ydDogZHJvcCB0aGUgUEdfaHdwb2lzb24gbWFya2VyIHNldCBieSB0aGUgaW5qZWN0IHNvIGEgZmFpbGVkXG4rIyBydW4gZG9lcyBub3QgbGVhdmUgYSBwb2lzb25lZCBwYWdlIGJlaGluZC4gIGhhcmRfb2ZmbGluZV9wYWdlKCkgaW5qZWN0c1xuKyMgd2l0aCBNRl9TV19TSU1VTEFURUQsIHNvIHRoZSBwYWdlIHN0YXlzIHVucG9pc29uYWJsZSB0aHJvdWdoIHRoZVxuKyMgaHdwb2lzb24gZGVidWdmcyBpbnRlcmZhY2UgKG5lZWRzIENPTkZJR19IV1BPSVNPTl9JTkpFQ1QgKyBkZWJ1Z2ZzKS5cbit0cnlfdW5wb2lzb24oKSB7XG4rXHRbIC13IFwiJHVucG9pc29uX3BhdGhcIiBdIHx8IHJldHVybiAwXG4rXHRlY2hvIFwiJDFcIiBcdTAwM2UgXCIkdW5wb2lzb25fcGF0aFwiIDJcdTAwM2UvZGV2L251bGwgfHwgdHJ1ZVxuK31cbitcbitjYXNlIFwiJGtpbmRcIiBpblxuK3JvZGF0YSlcbitcdHBoeXNfYWRkcj0kKHBpY2tfcm9kYXRhX3BoeXNfYWRkcilcbitcdHJlY2hlY2tfYml0PSRLUEZfUkVTRVJWRURcbitcdG1pc3NpbmdfbXNnPSdubyBcIktlcm5lbCByb2RhdGFcIiBlbnRyeSBpbiAvcHJvYy9pb21lbSdcbitcdDs7XG4rc2xhYilcbitcdHBoeXNfYWRkcj0kKHBpY2tfa3BhZ2VmbGFnc19waHlzX2FkZHIgXCIkS1BGX1NMQUJcIilcbitcdHJlY2hlY2tfYml0PSRLUEZfU0xBQlxuK1x0bWlzc2luZ19tc2c9XCJubyB1c2FibGUgc2xhYiBQRk4gZm91bmQgaW4gJGtwYWdlZmxhZ3NfcGF0aFwiXG4rXHQ7O1xuK3BndGFibGUpXG4rXHRwaHlzX2FkZHI9JChwaWNrX2twYWdlZmxhZ3NfcGh5c19hZGRyIFwiJEtQRl9QR1RBQkxFXCIpXG4rXHRyZWNoZWNrX2JpdD0kS1BGX1BHVEFCTEVcbitcdG1pc3NpbmdfbXNnPVwibm8gdXNhYmxlIHBhZ2UtdGFibGUgUEZOIGZvdW5kIGluICRrcGFnZWZsYWdzX3BhdGhcIlxuK1x0OztcbisqKVxuK1x0a3RhcF9leGl0X2ZhaWxfbXNnIFwidW5rbm93biBraW5kICcka2luZCcgKGV4cGVjdGVkOiByb2RhdGF8c2xhYnxwZ3RhYmxlKVwiXG4rXHQ7O1xuK2VzYWNcbitcbitpZiBbIC16IFwiJHBoeXNfYWRkclwiIF07IHRoZW5cbitcdGt0YXBfc2tpcF9hbGwgXCIkbWlzc2luZ19tc2dcIlxuK1x0ZXhpdCBcIiRLU0ZUX1NLSVBcIlxuK2ZpXG4rXG4ra3RhcF9wcmludF9tc2cgXCJlbmFibGluZyAkc3lzY3RsX3BhdGhcIlxuK3ByaW9yPSQoY2F0IFwiJHN5c2N0bF9wYXRoXCIpXG4rZWNobyAxIFx1MDAzZSBcIiRzeXNjdGxfcGF0aFwiIHx8IGt0YXBfZXhpdF9mYWlsX21zZyBcImZhaWxlZCB0byBlbmFibGUgc3lzY3RsXCJcbitcbitwZm49JCgocGh5c19hZGRyIC8gcGFnZXNpemUpKVxuK2t0YXBfcHJpbnRfbXNnIFwiaW5qZWN0aW5nIGh3cG9pc29uIGF0IHBoeXMgMHgkKHByaW50ZiAnJXgnIFwiJHBoeXNfYWRkclwiKSAocGZuIDB4JChwcmludGYgJyV4JyBcIiRwZm5cIiksIGtpbmQ9JGtpbmQpXCJcbitrdGFwX3ByaW50X21zZyBcImV4cGVjdGluZyBrZXJuZWwgcGFuaWM6ICdNZW1vcnkgZmFpbHVyZTogXHUwMDNjcGZuXHUwMDNlOiB1bnJlY292ZXJhYmxlIHBhZ2UnXCJcbitcbisjIEEgc3VjY2Vzc2Z1bCBydW4gbmV2ZXIgcmV0dXJucyBmcm9tIHRoZSBpbmplY3QgLS0gaXQgcGFuaWNzIHRoZSBrZXJuZWwuXG4rIyBSZWFjaGluZyB0aGUgY29kZSBiZWxvdyB0aGVyZWZvcmUgbWVhbnMgbm8gcGFuaWMgZmlyZWQuICBOb3RlIHdoZXRoZXJcbisjIHRoZSB3cml0ZSBpdHNlbGYgc3VjY2VlZGVkLCB0aGVuIHB1dCB0aGUgbWFjaGluZSBiYWNrOiByZXN0b3JlIHRoZVxuKyMgc3lzY3RsIGFuZCBiZXN0LWVmZm9ydCB1bnBvaXNvbiB0aGUgcGFnZSB3ZSBqdXN0IG1hcmtlZC5cbitpZiBlY2hvIFwiJHBoeXNfYWRkclwiIFx1MDAzZSBcIiRpbmplY3RfcGF0aFwiOyB0aGVuXG4rXHR2ZXJkaWN0PVwiaW5qZWN0IHJldHVybmVkIHdpdGhvdXQgcGFuaWM7IHN5c2N0bCBpbmVmZmVjdGl2ZVwiXG4rZWxzZVxuK1x0dmVyZGljdD1cImluamVjdCBmYWlsZWQgYmVmb3JlIHJlYWNoaW5nIHRoZSBwYW5pYyBwYXRoXCJcbitmaVxuK1xuK2VjaG8gXCIkcHJpb3JcIiBcdTAwM2UgXCIkc3lzY3RsX3BhdGhcIlxuK3RyeV91bnBvaXNvbiBcIiRwZm5cIlxuK1xuKyMgVGhlIHBhZ2UgdHlwZSBjYW4gY2hhbmdlIGJldHdlZW4gc2VsZWN0aW9uIGFuZCBpbmplY3Rpb24gKGUuZy4gYSBzbGFiXG4rIyBvciBwYWdlLXRhYmxlIHBhZ2UgaXMgZnJlZWQgYW5kIHJldXNlZCkuICBPbmx5IHRyZWF0IGEgbWlzc2luZyBwYW5pYyBhc1xuKyMgYSBmYWlsdXJlIGlmIHRoZSB0YXJnZXQgUEZOIGlzIHN0aWxsIHRoZSBrZXJuZWwtb3duZWQgdHlwZSB3ZSBhaW1lZCBhdDtcbisjIGlmIGl0IHJhY2VkIHRvIGFub3RoZXIgdHlwZSB0aGUgcnVuIGlzIGluY29uY2x1c2l2ZSwgc28gc2tpcCBpbnN0ZWFkLlxuK2twYWdlZmxhZ3NfYml0X3NldCBcIiRwZm5cIiBcIiRyZWNoZWNrX2JpdFwiXG4rY2FzZSAkPyBpblxuKzApXHRrdGFwX2V4aXRfZmFpbF9tc2cgXCIkdmVyZGljdCAocGFnZSBzdGlsbCAka2luZClcIiA7O1xuKzEpXHRrdGFwX3NraXBfYWxsIFwidGFyZ2V0IFBGTiBubyBsb25nZXIgJGtpbmQ7IHJhY2VkIGJlZm9yZSBpbmplY3QsIGluY29uY2x1c2l2ZVwiXG4rXHRleGl0IFwiJEtTRlRfU0tJUFwiIDs7XG4rKilcdGt0YXBfZXhpdF9mYWlsX21zZyBcIiR2ZXJkaWN0IChjb3VsZCBub3QgcmVjb25maXJtIHBhZ2UgdHlwZSB2aWEgJGtwYWdlZmxhZ3NfcGF0aClcIiA7O1xuK2VzYWNcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE4OjU0OjA5LjY3ODIyMDIzMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4NzcwNDMwMDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV3IEtlcm5lbCBNZW1vcnkgRmFpbHVyZSBQYW5pYyBQYXRjaCoqXG5cbk9rYXksIHNvIHdlJ3ZlIGdvdCBhIG5ldyBwYXRjaCBpbnRyb2R1Y2luZyBhIGBzeXNjdGxgIGNhbGxlZCBgcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZWAsIHdoaWNoIGlzIGBzeXNjdGxfcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZmAgaW4gY29kZS4gVGhlIGNvcmUgY2hhbmdlIGlzIGluIGBtbS9tZW1vcnktZmFpbHVyZS5jYCwgYW5kIGl0J3MgZGVzaWduZWQgdG8gcGFuaWMgdGhlIGtlcm5lbCB3aGVuIGFuIHVucmVjb3ZlcmFibGUgbWVtb3J5IGZhaWx1cmUgb2NjdXJzIHNwZWNpZmljYWxseSBvbiBhIGtlcm5lbCBwYWdlLiBUaGUgcGF0Y2ggYWRkcyBgaXNfa2VybmVsX293bmVkX3BhZ2UoKWAgdG8gaWRlbnRpZnkga2VybmVsIHBhZ2VzOyBpdCBjaGVja3MgYFBhZ2VSZXNlcnZlZGAsIGBQYWdlU2xhYmAsIGBQYWdlVGFibGVgLCBhbmQgYFBhZ2VMYXJnZUttYWxsb2NgIGZsYWdzLiBJZiBpdCBmaW5kcyBhIGtlcm5lbC1vd25lZCBwYWdlLCBgZ2V0X2FueV9wYWdlKClgIHJldHVybnMgYC1FTk9UUkVDT1ZFUkFCTEVgLiBUaGVuLCBgbWVtb3J5X2ZhaWx1cmUoKWAgaGFuZGxlcyB0aGlzIGFuZCwgaWYgdGhlIHN5c2N0bCBpcyBzZXQsIGl0IHBhbmljcy5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBob3cgcmVhY2hhYmxlIGlzIHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgd2hpY2ggaXMgd2hlcmUgSSB1c3VhbGx5IHdvcms/IFR1cm5zIG91dCwgbWVtb3J5IGZhaWx1cmVzIGNhbiBiZSBpbmplY3RlZCB2aWEgYC9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2hhcmRfb2ZmbGluZV9wYWdlYCBvciBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAuIFRoZXJlJ3MgZXZlbiBhIHRlc3Qgc2NyaXB0LCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHdwb2lzb24tcGFuaWMuc2hgLCB0aGF0IHVzZXMgYGhhcmRfb2ZmbGluZV9wYWdlYC4gQWgsIGJ1dCB3YWl0LCBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAgb25seSB3b3JrcyBvbiAqdXNlciogcGFnZXMuIFNvLCB0byBoaXQga2VybmVsIHBhZ2VzLCB3ZSdyZSBzdHVjayB3aXRoIGAvc3lzL2RldmljZXMvc3lzdGVtL21lbW9yeS9oYXJkX29mZmxpbmVfcGFnZWAgb3IgcG90ZW50aWFsbHkgYW4gaHdwb2lzb24gaW5qZWN0aW9uIG1vZHVsZS4gR29vZCB0byBrbm93IGBoYXJkX29mZmxpbmVfcGFnZWAgaXMgYWNjZXNzaWJsZSBpZiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBpcyBlbmFibGVkLCB3aGljaCBpcyB0aGUga2V5LlxuXG5Ob3csIGNhbiB3ZSBhY3R1YWxseSByZWFjaCBgbWVtb3J5X2ZhaWx1cmUoKWAgb24ga2VybmVsIHBhZ2VzPyBZZXMsIGJlY2F1c2UgYGhhcmRfb2ZmbGluZV9wYWdlYCBpcyBhIHdyaXRlIHRvIHN5c2ZzLCB3aGljaCBlbmRzIHVwIGNhbGxpbmcgYG1lbW9yeV9mYWlsdXJlKClgLiBTaW5jZSBzeXprYWxsZXIgdXN1YWxseSBoYXMgYENPTkZJR19NRU1PUllfRkFJTFVSRWAgZW5hYmxlZCwgdGhpcyBpcyBhIGRpc3RpbmN0IHBvc3NpYmlsaXR5LiBEb2VzIHN5emthbGxlciBoYXZlIGFjY2VzcyB0byB0aGVzZSBzeXNmcyBvciBkZWJ1Z2ZzIHBhdGhzPyBUeXBpY2FsbHksIHN5emthbGxlciBkb2Vzbid0IGZ1enogZGVidWdmcyBvciBzeXNmcyB1bmxlc3Mgd2UndmUgZXhwbGljaXRseSBjb25maWd1cmVkIGl0IHRvLiBCdXQgaXQgZG9lcyBmdXp6IGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYC4gSG93ZXZlciwgYWdhaW4sIGBtYWR2aXNlYCBvbmx5IGhhbmRsZXMgdXNlciBwYWdlcywgdGhvdWdoIEkgc3VwcG9zZSBpdCBkb2VzIGNhbGwgYG1lbW9yeV9mYWlsdXJlKClgIG9uIHRoZSBQRk4gb2YgdGhlIHVzZXIgcGFnZS4gSXMgaXQgcG9zc2libGUgZm9yIGEgdXNlciBwYWdlIHRvIGJlIG1hcmtlZCBhcyBrZXJuZWwtb3duZWQgKCBgUGFnZVJlc2VydmVkYCwgYFBhZ2VTbGFiYCwgYFBhZ2VUYWJsZWAsIGBQYWdlTGFyZ2VLbWFsbG9jYCApPyBVc3VhbGx5IG5vdC5cblxuQnV0IHRoaXMgcGF0Y2ggaXMgc3BlY2lmaWNhbGx5IGFib3V0IHBhbmlja2luZyBvbiAqdW5yZWNvdmVyYWJsZSogbWVtb3J5IGZhaWx1cmVzLiBTbywgaXMgaXQgZXZlbiB3b3J0aCBmdXp6aW5nPyBJZiBpdCdzIGp1c3QgYSBwYW5pYyBvbiBhbiBlcnJvciBpbmplY3Rpb24gcGF0aCwgbWF5YmUgbm90LiBIb3dldmVyLCBgbWVtb3J5X2ZhaWx1cmUoKWAgY2FuIGJlIHRyaWdnZXJlZCBieSBhY3R1YWwgaGFyZHdhcmUgZXJyb3JzIChNQ0VzKSBvciBzb2Z0d2FyZSBpbmplY3Rpb24uIEluIGEgVk0sIGhhcmR3YXJlIGVycm9ycyBhcmUgbm90IHRoZSBub3JtLCBzbyBzb2Z0d2FyZSBpbmplY3Rpb24gaXMgdGhlIHdheSB0byBnby4gSWYgc3l6a2FsbGVyICpjYW4qIGluamVjdCBtZW1vcnkgZmFpbHVyZXMgaW50byBrZXJuZWwgcGFnZXMsIHRoZSByZXN1bHQgd2lsbCBzaW1wbHkgYmUgYSBrZXJuZWwgcGFuaWMsIHdoaWNoIGlzICpleGFjdGx5KiB3aGF0IHRoaXMgcGF0Y2ggaW50ZW5kcy5cblxuV2FpdCwgaXNuJ3QgYSBrZXJuZWwgcGFuaWMgYSBjcmFzaD8gU3l6a2FsbGVyIHJlcG9ydHMgcGFuaWNzIGFzIGNyYXNoZXMuIFNvLCBpZiBzeXprYWxsZXIgdHJpZ2dlcnMgdGhpcyBwYW5pYywgaXQnbGwgYmUgcmVwb3J0ZWQgYXMgYSBidWchIEJ1dCB0aGlzIHBhbmljIGlzIGFjdHVhbGx5ICppbnRlbnRpb25hbCogd2hlbiB0aGUgc3lzY3RsIGlzIGVuYWJsZWQuIElzIHRoYXQgc3lzY3RsIGVuYWJsZWQgYnkgZGVmYXVsdD8gQ2hlY2tpbmfigKYgYHN0YXRpYyBpbnQgc3lzY3RsX3BhbmljX29uX3VucmVjb3ZlcmFibGVfbWYgX19yZWFkX21vc3RseTtgIEFoYSEgSXQncyB6ZXJvIGJ5IGRlZmF1bHQuIFNvLCBieSBkZWZhdWx0LCBpdCB3b24ndCBwYW5pYy4gSWYgc3l6a2FsbGVyIGRvZXNuJ3QgZW5hYmxlIHRoZSBzeXNjdGwsIG5vIHBhbmljLiBJZiBpdCAqZG9lcyogZW5hYmxlIGl0LCB0aGVuIHdlIGdldCB0aGUgcGFuaWMsIHdoaWNoIHN5emthbGxlciB3aWxsIGNvbnNpZGVyIGEgYnVnLCBidXQgaXQncyByZWFsbHkgdGhlIGRlc2lnbmVkIGJlaGF2aW9yLlxuXG5MZXQncyBub3QgZm9yZ2V0LCB0aGUgcGF0Y2ggYWxzbyBjaGFuZ2VzIGBnZXRfYW55X3BhZ2UoKWAgdG8gcmV0dXJuIGAtRU5PVFJFQ09WRVJBQkxFYCBpbnN0ZWFkIG9mIGAtRUlPYCBmb3Iga2VybmVsLW93bmVkIHBhZ2VzLiBCZWZvcmUsIGlmIGBnZXRfYW55X3BhZ2UoKWAgZ290IGAtRUlPYCBpdCB3b3VsZCBwcmludCBhbiBlcnJvciBtZXNzYWdlLiBOb3cgd2l0aCB0aGUgcGF0Y2gsIHRoZSBtZXNzYWdlIGlzIGByZWNvdmVyeSBhY3Rpb24gZm9yIGtlcm5lbCBwYWdlOiBJZ25vcmVkYC4gQW5kIGlmIHRoZSBzeXNjdGwgaXMgZW5hYmxlZCwgaXQgcGFuaWNzLlxuXG5JcyB0aGVyZSBhbnkgY29tcGxleCBsb2dpYyB0byBmdXp6IGhlcmU/IFRoZSBgaXNfa2VybmVsX293bmVkX3BhZ2UoKWAgY2hlY2sgbG9va3Mgc2ltcGxlIGVub3VnaDsgaXQncyBhIHN0cmFpZ2h0Zm9yd2FyZCBmbGFnIGNoZWNrLiBSZWFsbHksIHRoaXMgaXMgbW9zdGx5IGFib3V0IGFkZGluZyBhIHN5c2N0bCBmb3Iga2VybmVsIHBhZ2UgbWVtb3J5IGZhaWx1cmVzLiBTaW5jZSB0aG9zZSBmYWlsdXJlcyBhcmUgdHlwaWNhbGx5IG9ubHkgdHJpZ2dlcmVkIGJ5IGhhcmR3YXJlIGVycm9ycyBvciByb290LW9ubHkgc3lzZnMvZGVidWdmcyBpbmplY3Rpb24sIGFuZCB0aGUgcmVzdWx0IGlzIGEgY29udHJvbGxlZCBwYW5pYyBvciBhIGRpZmZlcmVudCBwcmludGssIGl0IHNlZW1zIHRoZXJlJ3Mgbm90IG11Y2ggZnVuY3Rpb25hbGx5IGV4cG9zZWQgdG8gcmVndWxhciB1c2VycyBvciBhbnkgY29tcGxleCBzdGF0ZSBtYWNoaW5lcyB0b1xuXG4iLCJJbnB1dFRva2VucyI6OTAxOSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NzIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxODo1NDoyOC40NDg2NTQ5MTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU1ODQ1MjMyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNQURWX0hXUE9JU09OXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbW0vaHdwb2lzb24ucnN0PTEwNj1UZXN0aW5nXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2h3cG9pc29uLnJzdC0xMDgtXFxuRG9jdW1lbnRhdGlvbi9tbS9od3BvaXNvbi5yc3Q6MTA5OiogbWFkdmlzZShNQURWX0hXUE9JU09OLCAuLi4uKSAoYXMgcm9vdCkgLSBQb2lzb24gYSBwYWdlIGluIHRoZVxcbkRvY3VtZW50YXRpb24vbW0vaHdwb2lzb24ucnN0LTExMC0gIHByb2Nlc3MgZm9yIHRlc3RpbmdcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h3cG9pc29uLnJzdD05Nj1QUl9NQ0VfS0lMTF9HRVRcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h3cG9pc29uLnJzdC0xMDEtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHdwb2lzb24ucnN0OjEwMjoqIG1hZHZpc2UoTUFEVl9IV1BPSVNPTiwgLi4uLikgKGFzIHJvb3QpIC0g5Zyo5rWL6K+V6L+H56iL5LitUG9pc29u5LiA5Liq6aG16Z2iXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHdwb2lzb24ucnN0LTEwMy1cXG4tLVxcbmFyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC04NS0jZGVmaW5lIE1BRFZfVU5NRVJHRUFCTEUgMTNcXHRcXHQvKiBLU00gbWF5IG5vdCBtZXJnZSBpZGVudGljYWwgcGFnZXMgKi9cXG5hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmg6ODY6I2RlZmluZSBNQURWX0hXUE9JU09OXFx0IDEwMFxcdFxcdC8qIHBvaXNvbiBhIHBhZ2UgZm9yIHRlc3RpbmcgKi9cXG5hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmgtODctXFxuLS1cXG5hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC03NC1cXG5hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaDo3NTojZGVmaW5lIE1BRFZfSFdQT0lTT04gICAgIDEwMFxcdFxcdC8qIHBvaXNvbiBhIHBhZ2UgZm9yIHRlc3RpbmcgKi9cXG5hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC03Ni0jZGVmaW5lIE1BRFZfU09GVF9PRkZMSU5FIDEwMVxcdFxcdC8qIHNvZnQgb2ZmbGluZSBwYWdlIGZvciB0ZXN0aW5nICovXFxuLS1cXG5pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaC01NS0jZGVmaW5lIE1BRFZfRE9GT1JLXFx0MTFcXHRcXHQvKiBkbyBpbmhlcml0IGFjcm9zcyBmb3JrICovXFxuaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmg6NTY6I2RlZmluZSBNQURWX0hXUE9JU09OXFx0MTAwXFx0XFx0LyogcG9pc29uIGEgcGFnZSBmb3IgdGVzdGluZyAqL1xcbmluY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oLTU3LSNkZWZpbmUgTUFEVl9TT0ZUX09GRkxJTkUgMTAxXFx0XFx0Lyogc29mdCBvZmZsaW5lIHBhZ2UgZm9yIHRlc3RpbmcgKi9cXG4tLVxcbm1tL21hZHZpc2UuYz0xNDkyPXN0YXRpYyBib29sIGlzX21lbW9yeV9mYWlsdXJlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTE0OTQtXFx0c3dpdGNoIChtYWR2X2JlaGF2aW9yLVxcdTAwM2ViZWhhdmlvcikge1xcbm1tL21hZHZpc2UuYzoxNDk1OlxcdGNhc2UgTUFEVl9IV1BPSVNPTjpcXG5tbS9tYWR2aXNlLmMtMTQ5Ni1cXHRjYXNlIE1BRFZfU09GVF9PRkZMSU5FOlxcbi0tXFxubW0vbWFkdmlzZS5jPTE1MTg9bWFkdmlzZV9iZWhhdmlvcl92YWxpZChpbnQgYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTU1MS1cXHRjYXNlIE1BRFZfU09GVF9PRkZMSU5FOlxcbm1tL21hZHZpc2UuYzoxNTUyOlxcdGNhc2UgTUFEVl9IV1BPSVNPTjpcXG5tbS9tYWR2aXNlLmMtMTU1My0jZW5kaWZcXG4tLVxcbm1tL21hZHZpc2UuYz0xODg3PXN0YXRpYyBpbnQgbWFkdmlzZV9kb19iZWhhdmlvcih1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuX2luLFxcbi0tXFxubW0vbWFkdmlzZS5jLTE5NDMtICogIE1BRFZfS0VFUE9ORk9SSyAtIHVuZG8gdGhlIGVmZmVjdCBvZiBNQURWX1dJUEVPTkZPUktcXG5tbS9tYWR2aXNlLmM6MTk0NDogKiAgTUFEVl9IV1BPSVNPTiAtIHRyaWdnZXIgbWVtb3J5IGVycm9yIGhhbmRsZXIgYXMgaWYgdGhlIGdpdmVuIG1lbW9yeSByYW5nZVxcbm1tL21hZHZpc2UuYy0xOTQ1LSAqXFx0XFx0d2VyZSBjb3JydXB0ZWQgYnkgdW5yZWNvdmVyYWJsZSBoYXJkd2FyZSBtZW1vcnkgZmFpbHVyZS5cXG4tLVxcbnRvb2xzL2FyY2gvYWxwaGEvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmgtMzctI2RlZmluZSBQUk9UX1dSSVRFXFx0MHgyXFxudG9vbHMvYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaDozODovKiBNQURWX0hXUE9JU09OIGlzIHVuZGVmaW5lZCBvbiBhbHBoYSwgZml4IGl0IGZvciBwZXJmICovXFxudG9vbHMvYXJjaC9hbHBoYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaDozOTojZGVmaW5lIE1BRFZfSFdQT0lTT05cXHQxMDBcXG50b29scy9hcmNoL2FscGhhL2luY2x1ZGUvdWFwaS9hc20vbW1hbi5oLTQwLS8qIE1BRFZfU09GVF9PRkZMSU5FIGlzIHVuZGVmaW5lZCBvbiBhbHBoYSwgZml4IGl0IGZvciBwZXJmICovXFxuLS1cXG50b29scy9hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmgtMTAtI2RlZmluZSBNQURWX0hVR0VQQUdFXFx0MTRcXG50b29scy9hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmg6MTE6I2RlZmluZSBNQURWX0hXUE9JU09OXFx0IDEwMFxcbnRvb2xzL2FyY2gvbWlwcy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC0xMi0jZGVmaW5lIE1BRFZfTUVSR0VBQkxFXFx0IDEyXFxuLS1cXG50b29scy9hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC0zNy0jZGVmaW5lIFBST1RfV1JJVEVcXHQweDJcXG50b29scy9hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaDozODojZGVmaW5lIE1BRFZfSFdQT0lTT05cXHQxMDBcXG50b29scy9hcmNoL3BhcmlzYy9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC0zOS0jZGVmaW5lIE1BRFZfU09GVF9PRkZMSU5FIDEwMVxcbi0tXFxudG9vbHMvYXJjaC94dGVuc2EvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmgtMzctI2RlZmluZSBQUk9UX1dSSVRFXFx0MHgyXFxudG9vbHMvYXJjaC94dGVuc2EvaW5jbHVkZS91YXBpL2FzbS9tbWFuLmg6Mzg6LyogTUFEVl9IV1BPSVNPTiBpcyB1bmRlZmluZWQgb24geHRlbnNhLCBmaXggaXQgZm9yIHBlcmYgKi9cXG50b29scy9hcmNoL3h0ZW5zYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaDozOTojZGVmaW5lIE1BRFZfSFdQT0lTT05cXHQxMDBcXG50b29scy9hcmNoL3h0ZW5zYS9pbmNsdWRlL3VhcGkvYXNtL21tYW4uaC00MC0vKiBNQURWX1NPRlRfT0ZGTElORSBpcyB1bmRlZmluZWQgb24geHRlbnNhLCBmaXggaXQgZm9yIHBlcmYgKi9cXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9hc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oLTU1LSNkZWZpbmUgTUFEVl9ET0ZPUktcXHQxMVxcdFxcdC8qIGRvIGluaGVyaXQgYWNyb3NzIGZvcmsgKi9cXG50b29scy9pbmNsdWRlL3VhcGkvYXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaDo1NjojZGVmaW5lIE1BRFZfSFdQT0lTT05cXHQxMDBcXHRcXHQvKiBwb2lzb24gYSBwYWdlIGZvciB0ZXN0aW5nICovXFxudG9vbHMvaW5jbHVkZS91YXBpL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmgtNTctI2RlZmluZSBNQURWX1NPRlRfT0ZGTElORSAxMDFcXHRcXHQvKiBzb2Z0IG9mZmxpbmUgcGFnZSBmb3IgdGVzdGluZyAqL1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYi1yZWFkLWh3cG9pc29uLmM9MTc2PXRlc3RfaHVnZXRsYl9yZWFkX2h3cG9pc29uKGludCBmZCwgc2l6ZV90IGxlbiwgc2l6ZV90IHdyX2NodW5rX3NpemUsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXJlYWQtaHdwb2lzb24uYy0yMDUtXFx0aHdwX2FkZHIgPSBmaWxlbWFwICsgbGVuIC8gMiArIHBhZ2VzaXplO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItcmVhZC1od3BvaXNvbi5jOjIwNjpcXHRpZiAobWFkdmlzZShod3BfYWRkciwgcGFnZXNpemUsIE1BRFZfSFdQT0lTT04pIFxcdTAwM2MgMCkge1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGItcmVhZC1od3BvaXNvbi5jOjIwNzpcXHRcXHRrc2Z0X3BlcnJvcihcXFwiTUFEVl9IV1BPSVNPTiBmYWlsZWRcXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiLXJlYWQtaHdwb2lzb24uYy0yMDgtXFx0XFx0Z290byB1bm1hcDtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmM9NTg9c3RhdGljIGludCBtYWR2X2hhcmRfaW5qZWN0KEZJWFRVUkVfREFUQShtZW1vcnlfZmFpbHVyZSkgKiBzZWxmLCB2b2lkICp2YWRkcilcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jLTU5LXtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9tZW1vcnktZmFpbHVyZS5jOjYwOlxcdHJldHVybiBtYWR2aXNlKHZhZGRyLCBzZWxmLVxcdTAwM2VwYWdlX3NpemUsIE1BRFZfSFdQT0lTT04pO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL21lbW9yeS1mYWlsdXJlLmMtNjEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxODo1NDozMi4wMDcxMTU0NjNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDYxOTA2OTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgYG1hZHZpc2VfaHdwb2lzb25gIGFuZCBDYXBhYmlsaXR5IFJlcXVpcmVtZW50cyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBgbWFkdmlzZV9od3BvaXNvbmAgc3lzdGVtIGNhbGwuIFRoZSBtb3N0IGRpcmVjdCBwYXRoIGlzIHRvIGNoZWNrIHRoZSBjb2RlIGl0c2VsZiwgc28gSSdsbCBoZWFkIG92ZXIgdG8gYG1tL21hZHZpc2UuY2AgaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIGFzY2VydGFpbiBkZWZpbml0aXZlbHkgaWYgdGhpcyBmdW5jdGlvbiByZXF1aXJlcyBgQ0FQX1NZU19BRE1JTmAgb3IgYW55IG90aGVyIGNhcGFiaWxpdGllcy4gSXTigJlzIGNydWNpYWwgdG8ga25vdyB0aGlzIGF0IGEgbG93IGxldmVsIHRvIHVuZGVyc3RhbmQgYW55IHNlY3VyaXR5IGJvdW5kYXJpZXMgYXJvdW5kIGl0LiBVbmRlcnN0YW5kaW5nIHRoZSBwcml2aWxlZ2UgbGV2ZWwgbmVlZGVkIHRvIGNhbGwgYG1hZHZpc2VfaHdwb2lzb25gIGlzIHRoZSBmb3VuZGF0aW9uYWwgZWxlbWVudCB0aGF0IHdpbGwgbGVhZCB0byBtb3JlIGNvbXBsZXggYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDkxLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTg6NTQ6MzUuNDY5MDI4MTMxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MDIwNzg4NjMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hZHZpc2VfaHdwb2lzb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE4OjU0OjM4LjE3MTEyNDM5NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5OTc1NTk0ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIGFuZCBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5SaWdodCwgaXQncyBoaXR0aW5nIG1lIHRoYXQgdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byB0aGUgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCBmdW5jdGlvbiwgb3Igc29tZXRoaW5nIHZlcnkgc2ltaWxhci4gVGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50IGNhbiBiZSB0cmlja3ksIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBzcGVjaWZpYyBlcnJvciBpcyBvY2N1cnJpbmcuIEkgbmVlZCB0byBnZXQgaW50byB0aGUgY29kZSBhbmQgc2VlIGV4YWN0bHkgd2hhdCdzIGhhcHBlbmluZy5cblxuT2theSwgbXkgZmlyc3Qgc3RlcCBpcyB0byBjcmFjayBvcGVuIGBtbS9tYWR2aXNlLmNgLiBJIHJlbWVtYmVyIHRoYXQgYXJlYSBwcmV0dHkgd2VsbC4gSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgdG8gYXJvdW5kIGxpbmUgMTQ5Mi4gVGhhdCBzaG91bGQgcHV0IG1lIHJpZ2h0IGluIHRoZSB2aWNpbml0eSBvZiB3aGVyZSBJIGV4cGVjdCB0aGlzIGBtYWR2aXNlYCByZWxhdGVkIGVycm9yIHRvIGJlIGhhbmRsZWQgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCB3aGVyZSB0aGUgcmVsZXZhbnQgbG9naWMgaXMgZXhlY3V0ZWQuIEZyb20gdGhlcmUsIEkgY2FuIHN0YXJ0IHRyYWNpbmcgdGhlIGNvZGUgcGF0aHMgYW5kIGlkZW50aWZ5IHRoZSByb290IGNhdXNlLiBUaGlzIHNob3VsZCBhbGxvdyBtZSB0byBmb3JtdWxhdGUgYSBzb2x1dGlvbiBwcmV0dHkgcXVpY2tseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3MTQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxODo1NDo0Mi4xNjg2ODgzNjlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTYyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWFkdmlzZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0ODAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0ODA6XFx0XFx0XFx0XFx0cmV0ID0gbWVtb3J5X2ZhaWx1cmUocGZuLCBNRl9BQ1RJT05fUkVRVUlSRUQgfCBNRl9DT1VOVF9JTkNSRUFTRUQgfCBNRl9TV19TSU1VTEFURUQpO1xcbjE0ODE6XFx0XFx0XFx0XFx0aWYgKHJldCA9PSAtRU9QTk9UU1VQUClcXG4xNDgyOlxcdFxcdFxcdFxcdFxcdHJldCA9IDA7XFxuMTQ4MzpcXHRcXHRcXHR9XFxuMTQ4NDpcXHRcXG4xNDg1OlxcdFxcdFxcdGlmIChyZXQpXFxuMTQ4NjpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjE0ODc6XFx0XFx0fVxcbjE0ODg6XFx0XFxuMTQ4OTpcXHRcXHRyZXR1cm4gMDtcXG4xNDkwOlxcdH1cXG4xNDkxOlxcdFxcbjE0OTI6XFx0c3RhdGljIGJvb2wgaXNfbWVtb3J5X2ZhaWx1cmUoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuMTQ5MzpcXHR7XFxuMTQ5NDpcXHRcXHRzd2l0Y2ggKG1hZHZfYmVoYXZpb3ItXFx1MDAzZWJlaGF2aW9yKSB7XFxuMTQ5NTpcXHRcXHRjYXNlIE1BRFZfSFdQT0lTT046XFxuMTQ5NjpcXHRcXHRjYXNlIE1BRFZfU09GVF9PRkZMSU5FOlxcbjE0OTc6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMTQ5ODpcXHRcXHRkZWZhdWx0OlxcbjE0OTk6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjE1MDA6XFx0XFx0fVxcbjE1MDE6XFx0fVxcbjE1MDI6XFx0XFxuMTUwMzpcXHQjZWxzZVxcbjE1MDQ6XFx0XFxuMTUwNTpcXHRzdGF0aWMgaW50IG1hZHZpc2VfaW5qZWN0X2Vycm9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbjE1MDY6XFx0e1xcbjE1MDc6XFx0XFx0cmV0dXJuIDA7XFxuMTUwODpcXHR9XFxuMTUwOTpcXHRcXG4xNTEwOlxcdHN0YXRpYyBib29sIGlzX21lbW9yeV9mYWlsdXJlKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbjE1MTE6XFx0e1xcbjE1MTI6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjE1MTM6XFx0fVxcbjE1MTQ6XFx0XFxuMTUxNTpcXHQjZW5kaWZcXHQvKiBDT05GSUdfTUVNT1JZX0ZBSUxVUkUgKi9cXG4xNTE2OlxcdFxcbjE1MTc6XFx0c3RhdGljIGJvb2xcXG4xNTE4OlxcdG1hZHZpc2VfYmVoYXZpb3JfdmFsaWQoaW50IGJlaGF2aW9yKVxcbjE1MTk6XFx0e1xcbjE1MjA6XFx0XFx0c3dpdGNoIChiZWhhdmlvcikge1xcbjE1MjE6XFx0XFx0Y2FzZSBNQURWX0RPRk9SSzpcXG4xNTIyOlxcdFxcdGNhc2UgTUFEVl9ET05URk9SSzpcXG4xNTIzOlxcdFxcdGNhc2UgTUFEVl9OT1JNQUw6XFxuMTUyNDpcXHRcXHRjYXNlIE1BRFZfU0VRVUVOVElBTDpcXG4xNTI1OlxcdFxcdGNhc2UgTUFEVl9SQU5ET006XFxuMTUyNjpcXHRcXHRjYXNlIE1BRFZfUkVNT1ZFOlxcbjE1Mjc6XFx0XFx0Y2FzZSBNQURWX1dJTExORUVEOlxcbjE1Mjg6XFx0XFx0Y2FzZSBNQURWX0RPTlRORUVEOlxcbjE1Mjk6XFx0XFx0Y2FzZSBNQURWX0RPTlRORUVEX0xPQ0tFRDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTg6NTQ6NDIuMTY4OTA4NDc4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEwOTg3NDk1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIGBtYWR2aXNlX2luamVjdF9lcnJvcmAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgY29yZSBvZiB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgZ28gdG8gdGhlIHNvdXJjZS4gXCJMZXQncyBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgbWFkdmlzZV9pbmplY3RfZXJyb3JgXCIuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCB0cnV0aCBsaWVzLCBhbmQgSSB3YW50IHRvIHVuZGVyc3RhbmQgKnByZWNpc2VseSogd2hhdCB0aGlzIHRoaW5nIGlzLCBob3cgaXQncyBkZWZpbmVkLCBhbmQgd2hhdCBpdCdzIHN1cHBvc2VkIHRvIGRvLiBJIG5lZWQgdGhhdCBzb2xpZCwgZnVuZGFtZW50YWwgdW5kZXJzdGFuZGluZyB0byBtb3ZlIGZvcndhcmQuIE5vIHNob3J0Y3V0czsgdGhlIGRlZmluaXRpb24gKmlzKiB0aGUgc3RhcnRpbmcgcG9pbnQuIEknbSBnb2luZyB0byBsb29rIGF0IHRoZSByZWxldmFudCBoZWFkZXIgZmlsZXMsIGRvY3VtZW50YXRpb24sIG9yIGNvZGUgY29tbWVudHMuIFdoYXRldmVyIHRoZSBjYW5vbmljYWwgZGVmaW5pdGlvbiBzb3VyY2UgaXMsIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gYmUuIFdpdGhvdXQgaXQsIGV2ZXJ5dGhpbmcgZWxzZSBpcyBqdXN0IHNwZWN1bGF0aW9uLCBhbmQgSSBjYW4ndCBhZmZvcmQgdGhhdC4gU28sIGxldCdzIGdldCB0aGF0IGRlZmluaXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjMwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxODo1NDo0NS4yNzg3OTA1OTFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NDU4MjEyMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFkdmlzZV9pbmplY3RfZXJyb3JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWFkdmlzZS5jPTEzMzg9c3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xNDQ2LSAqL1xcbm1tL21hZHZpc2UuYzoxNDQ3OnN0YXRpYyBpbnQgbWFkdmlzZV9pbmplY3RfZXJyb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxubW0vbWFkdmlzZS5jLTE0NDgte1xcbi0tXFxubW0vbWFkdmlzZS5jPTE0OTI9c3RhdGljIGJvb2wgaXNfbWVtb3J5X2ZhaWx1cmUoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXFxuLS1cXG5tbS9tYWR2aXNlLmMtMTUwNC1cXG5tbS9tYWR2aXNlLmM6MTUwNTpzdGF0aWMgaW50IG1hZHZpc2VfaW5qZWN0X2Vycm9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbm1tL21hZHZpc2UuYy0xNTA2LXtcXG4tLVxcbm1tL21hZHZpc2UuYz0xODg3PXN0YXRpYyBpbnQgbWFkdmlzZV9kb19iZWhhdmlvcih1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplX3QgbGVuX2luLFxcbi0tXFxubW0vbWFkdmlzZS5jLTE4OTYtXFx0XFx0cmFuZ2UtXFx1MDAzZWVuZCA9IHN0YXJ0ICsgbGVuX2luO1xcbm1tL21hZHZpc2UuYzoxODk3OlxcdFxcdHJldHVybiBtYWR2aXNlX2luamVjdF9lcnJvcihtYWR2X2JlaGF2aW9yKTtcXG5tbS9tYWR2aXNlLmMtMTg5OC1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE4OjU0OjQ4LjAyNDYyNTZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA1OTg1MDkwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGFzIGlmIHRoZXkgd2VyZSBteSBvd24gaW1tZWRpYXRlIHByb2Nlc3Npbmc6XG5cbioqRGl2aW5nIGludG8gYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYG1hZHZpc2VfaW5qZWN0X2Vycm9yYCwgc3BlY2lmaWNhbGx5IHN0YXJ0aW5nIGFyb3VuZCBsaW5lIDE0NDcuIE15IHNwaWRlciBzZW5zZXMgYXJlIHRpbmdsaW5nLCBhbmQgSSBoYXZlIGEgZmVlbGluZyBzb21ldGhpbmcgaW50ZXJlc3RpbmcgaXMgZ29pbmcgdG8gcmV2ZWFsIGl0c2VsZi4gR2l2ZW4gdGhlIG5hbWUsIEknbSBhbnRpY2lwYXRpbmcgdGhpcyBmdW5jdGlvbiBpcyByZWxhdGVkIHRvIHRoZSBzaW11bGF0aW9uIG9yIGluamVjdGlvbiBvZiBlcnJvcnMgZHVyaW5nIG1lbW9yeSBtYW5hZ2VtZW50LCBsaWtlbHkgYSBjcml0aWNhbCBwaWVjZSBmb3IgdGVzdGluZyBvciBkZWJ1Z2dpbmcgbWVtb3J5LXJlbGF0ZWQgYmVoYXZpb3IgdW5kZXIgYWR2ZXJzZSBjb25kaXRpb25zLiBJJ20gaG9waW5nIHRvIHVuZGVyc3RhbmQgaXRzIG1lY2hhbmljcywgaG93IGl0IGludGVncmF0ZXMgd2l0aCB0aGUgb3ZlcmFsbCBgbWFkdmlzZWAgZnJhbWV3b3JrLCBhbmQgaWRlYWxseSwgd2hhdCBlcnJvciBjb25kaXRpb25zIGl0J3MgZGVzaWduZWQgdG8gc2ltdWxhdGUuIEknbSBrZWVuIG9uIHNlZWluZyBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgcGFnZSB0YWJsZSBtYW5pcHVsYXRpb24gb3IgTlVNQSBpbnRlcmFjdGlvbnMuIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGtpbmRzIG9mIGVycm9ycyBpdCBjYW4gdHJpZ2dlciwgYW5kIGhvdyBpdCB0aGVuIHBsYXlzIGJhY2sgaW50byB0aGUgb3ZlcmFsbCBzeXN0ZW0gZGVzaWduLiBMZXQncyBzZWUgd2hhdCBzZWNyZXRzIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgcGFydGljdWxhciBwaWVjZSBvZiBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE4NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE4OjU0OjUzLjA4NDQ4MDI3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDU1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tYWR2aXNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ0MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQ0MDpcXHRcXHRyZXR1cm4gZXJyb3I7XFxuMTQ0MTpcXHR9XFxuMTQ0MjpcXHRcXG4xNDQzOlxcdCNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkVcXG4xNDQ0OlxcdC8qXFxuMTQ0NTpcXHQgKiBFcnJvciBpbmplY3Rpb24gc3VwcG9ydCBmb3IgbWVtb3J5IGVycm9yIGhhbmRsaW5nLlxcbjE0NDY6XFx0ICovXFxuMTQ0NzpcXHRzdGF0aWMgaW50IG1hZHZpc2VfaW5qZWN0X2Vycm9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbjE0NDg6XFx0e1xcbjE0NDk6XFx0XFx0dW5zaWduZWQgbG9uZyBzaXplO1xcbjE0NTA6XFx0XFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IG1hZHZfYmVoYXZpb3ItXFx1MDAzZXJhbmdlLnN0YXJ0O1xcbjE0NTE6XFx0XFx0dW5zaWduZWQgbG9uZyBlbmQgPSBtYWR2X2JlaGF2aW9yLVxcdTAwM2VyYW5nZS5lbmQ7XFxuMTQ1MjpcXHRcXG4xNDUzOlxcdFxcdGlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSlcXG4xNDU0OlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuMTQ1NTpcXHRcXG4xNDU2OlxcdFxcdGZvciAoOyBzdGFydCBcXHUwMDNjIGVuZDsgc3RhcnQgKz0gc2l6ZSkge1xcbjE0NTc6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBwZm47XFxuMTQ1ODpcXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4xNDU5OlxcdFxcdFxcdGludCByZXQ7XFxuMTQ2MDpcXHRcXG4xNDYxOlxcdFxcdFxcdHJldCA9IGdldF91c2VyX3BhZ2VzX2Zhc3Qoc3RhcnQsIDEsIDAsIFxcdTAwMjZwYWdlKTtcXG4xNDYyOlxcdFxcdFxcdGlmIChyZXQgIT0gMSlcXG4xNDYzOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTQ2NDpcXHRcXHRcXHRwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTtcXG4xNDY1OlxcdFxcbjE0NjY6XFx0XFx0XFx0LypcXG4xNDY3OlxcdFxcdFxcdCAqIFdoZW4gc29mdCBvZmZsaW5pbmcgaHVnZXBhZ2VzLCBhZnRlciBtaWdyYXRpbmcgdGhlIHBhZ2VcXG4xNDY4OlxcdFxcdFxcdCAqIHdlIGRpc3NvbHZlIGl0LCB0aGVyZWZvcmUgaW4gdGhlIHNlY29uZCBsb29wIFxcXCJwYWdlXFxcIiB3aWxsXFxuMTQ2OTpcXHRcXHRcXHQgKiBubyBsb25nZXIgYmUgYSBjb21wb3VuZCBwYWdlLlxcbjE0NzA6XFx0XFx0XFx0ICovXFxuMTQ3MTpcXHRcXHRcXHRzaXplID0gcGFnZV9zaXplKGNvbXBvdW5kX2hlYWQocGFnZSkpO1xcbjE0NzI6XFx0XFxuMTQ3MzpcXHRcXHRcXHRpZiAobWFkdl9iZWhhdmlvci1cXHUwMDNlYmVoYXZpb3IgPT0gTUFEVl9TT0ZUX09GRkxJTkUpIHtcXG4xNDc0OlxcdFxcdFxcdFxcdHByX2luZm8oXFxcIlNvZnQgb2ZmbGluaW5nIHBmbiAlI2x4IGF0IHByb2Nlc3MgdmlydHVhbCBhZGRyZXNzICUjbHhcXFxcblxcXCIsXFxuMTQ3NTpcXHRcXHRcXHRcXHRcXHQgcGZuLCBzdGFydCk7XFxuMTQ3NjpcXHRcXHRcXHRcXHRyZXQgPSBzb2Z0X29mZmxpbmVfcGFnZShwZm4sIE1GX0NPVU5UX0lOQ1JFQVNFRCk7XFxuMTQ3NzpcXHRcXHRcXHR9IGVsc2Uge1xcbjE0Nzg6XFx0XFx0XFx0XFx0cHJfaW5mbyhcXFwiSW5qZWN0aW5nIG1lbW9yeSBmYWlsdXJlIGZvciBwZm4gJSNseCBhdCBwcm9jZXNzIHZpcnR1YWwgYWRkcmVzcyAlI2x4XFxcXG5cXFwiLFxcbjE0Nzk6XFx0XFx0XFx0XFx0XFx0IHBmbiwgc3RhcnQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxODo1NDo1My4wODQ2Njc5NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDg4NDQxMTYzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGxpY2F0aW9ucyBvZiBgTUFEVl9IV1BPSVNPTmAgYW5kIEtlcm5lbCBQYW5pY3MqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBgTUFEVl9IV1BPSVNPTmAgdGhpbmcgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsLiBJdCBzZWVtcyBsaWtlIHRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgYENBUF9TWVNfQURNSU5gLCB3aGljaCBpcyBlc3NlbnRpYWxseSBnbG9iYWwgcm9vdCBhY2Nlc3MuIEkga25vdyBTeXprYWxsZXIgdHlwaWNhbGx5IHJ1bnMgYXMgcm9vdCB3aXRoaW4gaXRzIG93biB1c2VyIG5hbWVzcGFjZSwgYnV0IHRoZSBgY2FwYWJsZSgpYCBjaGVjayBpcyBhZ2FpbnN0IHRoZSBpbml0aWFsIHVzZXIgbmFtZXNwYWNlLCBtZWFuaW5nIGl0IG5lZWRzICphY3R1YWwqIHJvb3QuIFNpbmNlIFN5emthbGxlciBvcGVyYXRlcyBpbiBhIFZNLCBpdCBoYXMgdGhhdCBsZXZlbCBvZiBhY2Nlc3MgYW5kIGNhbiBjYWxsIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYC5cblxuVGhlIGNydWNpYWwgcG9pbnQgaXMgdGhhdCBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAgY2FsbHMgYGdldF91c2VyX3BhZ2VzX2Zhc3RgLiBOb3csIEkga25vdyBgZ2V0X3VzZXJfcGFnZXNfZmFzdGAgKm9ubHkqIHJldHVybnMgcGFnZXMgbWFwcGVkIHdpdGhpbiB0aGUgdXNlcidzIGFkZHJlc3Mgc3BhY2UuIEl0IGRvZXNuJ3QgZ2l2ZSB5b3Uga2VybmVsIHBhZ2VzIGRpcmVjdGx5LiBBIHVzZXIgdXN1YWxseSBjYW4ndCBtYXAgYSBrZXJuZWwgcGFnZSB1bmxlc3MgdGhlcmUncyBhIGJ1ZyBvciBpdCdzIGFuIGludGVuZGVkIG1lY2hhbmlzbSBsaWtlIHdpdGggYC9kZXYvbWVtYCBvciBhIGRyaXZlciBpc3N1ZS4gT2ggd2FpdCwgdGhlIHZEU08hIFRoYXQncyBtYXBwZWQgaW4gdXNlciBzcGFjZS4gQ291bGQgYSB1c2VyIHRoZW4gY2FsbCBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAgb24gdGhlIHZEU08/XG5cbkxldCBtZSBjaGVjayBpZiB0aGUgdkRTTyBpcyBgUGFnZVJlc2VydmVkYC4gWWVzLCB1c3VhbGx5IHZEU08gcGFnZXMgKmFyZSogYFBhZ2VSZXNlcnZlZGAuIElmIGBnZXRfdXNlcl9wYWdlc19mYXN0YCByZXR1cm5zIHRoZSB2RFNPIHBhZ2UgYW5kIHdlIGNhbGwgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIG9uIGl0LCB0aGF04oCZcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBgbWVtb3J5X2ZhaWx1cmUoKWAgZ2V0cyBjYWxsZWQgb24gdGhlIHZEU08gcGFnZS4gU2luY2UgaXQncyByZXNlcnZlZCwgYGlzX2tlcm5lbF9vd25lZF9wYWdlKClgIHdpbGwgcmV0dXJuIHRydWUuIGBnZXRfYW55X3BhZ2UoKWAgd2lsbCB0aGVuIHJldHVybiBgLUVOT1RSRUNPVkVSQUJMRWAuIGBtZW1vcnlfZmFpbHVyZSgpYCB3aWxsIHRoZW4gZW5kIHVwIGNhbGxpbmcgYGFjdGlvbl9yZXN1bHQocGZuLCBNRl9NU0dfS0VSTkVMLCBNRl9JR05PUkVEKWAuXG5cbkFuZCB0aGlzIGlzIHdoZXJlIGl0IGNsaWNrczogaWYgYHN5c2N0bF9wYW5pY19vbl91bnJlY292ZXJhYmxlX21mYCBpcyBzZXQgdG8gMSwgKmJvb20qLCBrZXJuZWwgcGFuaWMhIEJ1dCB0aGlzIGlzbid0IGEgYnVnLiBUaGlzIGlzIGV4cGxpY2l0IGRlc2lnbiEgVGhlIHN5c2N0bCBpcyBpbnRlbmRlZCB0byBwYW5pYyB3aGVuIGEgbWVtb3J5IGZhaWx1cmUgaGl0cyBhIGtlcm5lbC1vd25lZCBwYWdlLiBUaGUgcGF0Y2ggZXZlbiBzcGVjaWZpY2FsbHkgbWVudGlvbnMgdGhlIHZEU08sIGFsb25nIHdpdGggdGhlIHplcm8gcGFnZSwgYXMgZXhhbXBsZXMgb2Yga2VybmVsLW93bmVkIHBhZ2VzIHRoYXQgdHJpZ2dlciBhIHBhbmljIGluIHRoaXMgc2NlbmFyaW8uIFRoaXMgaXMgYmVjYXVzZSBgTUFEVl9IV1BPSVNPTmAgaXMgbWVhbnQgdG8gKnNpbXVsYXRlKiBoYXJkd2FyZSBtZW1vcnkgZmFpbHVyZXMsIHNvIGNhdXNpbmcgYSBcIm1lbW9yeSBmYWlsdXJlXCIgb24gdGhlIHZEU08gd2lsbCB0cmlnZ2VyIGEgcGFuaWMuIFRoaXMgaXMgdGhlIGludGVuZGVkIGJlaGF2aW9yIG9mIHRoZSBzeXNjdGwuXG5cblNvLCBpcyB0aGVyZSBldmVuIGFueSBjb21wbGV4IGxvZ2ljIHRoYXQgbmVlZHMgZnV6emluZz8gVGhlIHBhdGNoIGl0c2VsZiBwcmltYXJpbHkgaW50cm9kdWNlcyBhIHN5c2N0bCBhbmQgY2hhbmdlcyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBnZXRfYW55X3BhZ2UoKWAgZm9yIGtlcm5lbCBwYWdlcy4gSWYgd2UgZW5hYmxlIHRoZSBzeXNjdGwsIFN5emthbGxlciB3aWxsIHNpbXBseSBmaW5kIHRoYXQgY2FsbGluZyBgbWFkdmlzZShNQURWX0hXUE9JU09OKWAgb24gdGhlIHZEU08gb3IgdGhlIHplcm8gcGFnZSBwYW5pY3MgdGhlIGtlcm5lbC4gU3l6a2FsbGVyIHdvdWxkIHRoZW4gcmVwb3J0IHRoaXMgYXMgYSBidWc6IFwia2VybmVsIHBhbmljOiBNZW1vcnkgZmFpbHVyZTogLi4uIHVucmVjb3ZlcmFibGUgcGFnZS5cIiBCdXQgdGhpcyBpcyBOT1QgYSBidWchIEl04oCZcyB0aGUgaW50ZW5kZWQgb3V0Y29tZSBvZiB0aGUgc3lzY3RsLlxuXG5Ob3csIGlmIHdlIHRlbGwgc3l6a2FsbGVyIHRvIGZ1enogdGhpcywgaXQgd2lsbCBqdXN0IGZsb29kIHVzIHdpdGggZmFsc2UgcG9zaXRpdmVzLiBUaGFua2Z1bGx5LCB0aGVyZSBpcyBhIGxpc3Qgb2Yga25vd24gaW50ZW50aW9uYWwgcGFuaWNzIHRoYXQgaXQgaWdub3Jlcywgb3IsIHdlIGNvdWxkIGp1c3QgYXZvaWQgZW5hYmxpbmcgdGhlIHN5c2N0bC4gSWYgdGhlIHN5c2N0bCBpc24ndCBlbmFibGVkLCB0aGUgcGFuaWMgZG9lc24ndCBoYXBwZW4uIFRoZSBjaGFuZ2UgdGhlbiBiZWNvbWVzIGNvc21ldGljIGJlY2F1c2UgYGdldF9hbnlfcGFnZSgpYCByZXR1cm5zIGAtRU5PVFJFQ09WRVJBQkxFYCBpbnN0ZWFkIG9mIGAtRUlPYC4gQmVmb3JlIHRoZSBwYXRjaCwgaXQgd291bGQgY2FsbCBgYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19HRVRfSFdQT0lTT04sIE1GX0lHTk9SRUQpYC4gTm93LCB0aGVyZSBpcyBvbmx5IGEgZGlmZmVyZW5jZSBpbiB0aGUgcHJpbnRrIG1lc3NhZ2Ug4oCTIFwicmVjb3ZlcnkgYWN0aW9uIGZvciBrZXJuZWwgcGFnZTogSWdub3JlZFwiIGluc3RlYWQgb2YgXCJyZWNvdmVyeSBhY3Rpb24gZm9yIHVua25vd24gcGFnZTogSWdub3JlZFwiLiBUaGlzIGlzIGEgbmVnbGlnaWJsZSBjaGFuZ2UuXG5cbkknZCBiZXR0ZXIgZG91YmxlIGNoZWNrIGBnZXRfYW55X3BhZ2UoKWAgdG8gYmUgc3VyZSwgdGhvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjA3NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxODo1NTowNy45NjkwODQyNDhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjczNzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbW9yeS1mYWlsdXJlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQyMDpcXHRcXG4xNDIxOlxcdHN0YXRpYyBpbnQgZ2V0X2FueV9wYWdlKHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbjE0MjI6XFx0e1xcbjE0MjM6XFx0XFx0aW50IHJldCA9IDAsIHBhc3MgPSAwO1xcbjE0MjQ6XFx0XFx0Ym9vbCBjb3VudF9pbmNyZWFzZWQgPSBmYWxzZTtcXG4xNDI1OlxcdFxcbjE0MjY6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgTUZfQ09VTlRfSU5DUkVBU0VEKVxcbjE0Mjc6XFx0XFx0XFx0Y291bnRfaW5jcmVhc2VkID0gdHJ1ZTtcXG4xNDI4OlxcdFxcbjE0Mjk6XFx0XFx0LypcXG4xNDMwOlxcdFxcdCAqIFBhZ2UgdHlwZXMgd2Uga25vdyBhcmUga2VybmVsLW93bmVkIGFuZCBjYW5ub3QgYmUgcmVjb3ZlcmVkLlxcbjE0MzE6XFx0XFx0ICogU2hvcnQtY2lyY3VpdCBiZWZvcmUgdGhlIHNoYWtlX3BhZ2UoKSAvIHJldHJ5IGxvb3AsIHdoaWNoXFxuMTQzMjpcXHRcXHQgKiBjYW5ub3QgdHVybiBhbnkgb2YgdGhlc2UgaW50byBzb21ldGhpbmcgSFdQb2lzb25IYW5kbGFibGUoKS5cXG4xNDMzOlxcdFxcdCAqIERyb3AgdGhlIGNhbGxlcidzIHJlZmVyZW5jZSBpZiBNRl9DT1VOVF9JTkNSRUFTRUQgdG9vayBvbmUuXFxuMTQzNDpcXHRcXHQgKi9cXG4xNDM1OlxcdFxcdGlmIChpc19rZXJuZWxfb3duZWRfcGFnZShwKSkge1xcbjE0MzY6XFx0XFx0XFx0aWYgKGNvdW50X2luY3JlYXNlZClcXG4xNDM3OlxcdFxcdFxcdFxcdHB1dF9wYWdlKHApO1xcbjE0Mzg6XFx0XFx0XFx0cmV0ID0gLUVOT1RSRUNPVkVSQUJMRTtcXG4xNDM5OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE0NDA6XFx0XFx0fVxcbjE0NDE6XFx0XFxuMTQ0MjpcXHR0cnlfYWdhaW46XFxuMTQ0MzpcXHRcXHRpZiAoIWNvdW50X2luY3JlYXNlZCkge1xcbjE0NDQ6XFx0XFx0XFx0cmV0ID0gX19nZXRfaHdwb2lzb25fcGFnZShwLCBmbGFncyk7XFxuMTQ0NTpcXHRcXHRcXHRpZiAoIXJldCkge1xcbjE0NDY6XFx0XFx0XFx0XFx0aWYgKHBhZ2VfY291bnQocCkpIHtcXG4xNDQ3OlxcdFxcdFxcdFxcdFxcdC8qIFdlIHJhY2VkIHdpdGggYW4gYWxsb2NhdGlvbiwgcmV0cnkuICovXFxuMTQ0ODpcXHRcXHRcXHRcXHRcXHRpZiAocGFzcysrIFxcdTAwM2MgR0VUX1BBR0VfTUFYX1JFVFJZX05VTSlcXG4xNDQ5OlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gdHJ5X2FnYWluO1xcbjE0NTA6XFx0XFx0XFx0XFx0XFx0cmV0ID0gLUVCVVNZO1xcbjE0NTE6XFx0XFx0XFx0XFx0fSBlbHNlIGlmICghUGFnZUh1Z2UocCkgXFx1MDAyNlxcdTAwMjYgIWlzX2ZyZWVfYnVkZHlfcGFnZShwKSkge1xcbjE0NTI6XFx0XFx0XFx0XFx0XFx0LyogV2UgcmFjZWQgd2l0aCBwdXRfcGFnZSwgcmV0cnkuICovXFxuMTQ1MzpcXHRcXHRcXHRcXHRcXHRpZiAocGFzcysrIFxcdTAwM2MgR0VUX1BBR0VfTUFYX1JFVFJZX05VTSlcXG4xNDU0OlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gdHJ5X2FnYWluO1xcbjE0NTU6XFx0XFx0XFx0XFx0XFx0cmV0ID0gLUVJTztcXG4xNDU2OlxcdFxcdFxcdFxcdH1cXG4xNDU3OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjE0NTg6XFx0XFx0XFx0fSBlbHNlIGlmIChyZXQgPT0gLUVCVVNZKSB7XFxuMTQ1OTpcXHRcXHRcXHRcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxODo1NTowNy45NjkzNjc0NjhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjcyNTk4MzI3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbGx5IFVuZXhwZWN0ZWQgTWVtb3J5IFBhZ2UgU3RhdGUqKlxuXG5Pa2F5LCBzbyBJJ20gc2VlaW5nIGBnZXRfYW55X3BhZ2UoKWAgYmVpbmcgY2FsbGVkIGZyb20gYG1lbW9yeV9mYWlsdXJlKClgIOKAkyB3aGljaCBpcyBhIGJpdCB1bnVzdWFsLiBUaGUgY3J1Y2lhbCBwYXJ0IGhlcmUgaXMgdGhhdCBgcGZuX3ZhbGlkKClgIGlzIHJldHVybmluZyB0cnVlICpidXQqIGl0J3Mgbm90IGEgKm5vcm1hbCogcGFnZS4gVGhhdCdzIGltbWVkaWF0ZWx5IGZsYWdnZWQgYXMgYSBwb2ludCBvZiBpbnRlcmVzdC4gU29tZXRoaW5nJ3MgY2xlYXJseSBub3QgYXMgaXQgc2hvdWxkIGJlLCBhbmQgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC5cblxuV2FpdCBhIHNlY29uZCwgd2FzbuKAmXQgdGhhdCBzYW1lIGZ1bmN0aW9uIGNhbGwgYWxzbyBhc3NvY2lhdGVkIHdpdGggYGdldF9od3BvaXNvbl9wYWdlKClgPyBNeSBtZW1vcnkgaXMgZmxhZ2dpbmcgdGhhdCB1cC4gTGV0IG1lIHNoaWZ0IGZvY3VzIGltbWVkaWF0ZWx5IHRvIGBnZXRfaHdwb2lzb25fcGFnZSgpYCBiZWNhdXNlIHRoYXQgY29udGV4dCBpcyBsaWtlbHkgcmVsYXRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB0aGVyZSwgYW5kIGhvdyBgZ2V0X2FueV9wYWdlKClgIGlzIGdldHRpbmcgaW52b2x2ZWQgaW4gdGhlIGhhcmR3YXJlIHBvaXNvbmluZyBzY2VuYXJpbyB0byB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIHJvb3QgY2F1c2UuIExldCdzIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24ncyBkZXRhaWxzIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2NTgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE4OjU1OjE0LjY5NTM1NjAxM1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTYwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNTQwOlxcdCAqXFxuMTU0MTpcXHQgKiBSZXR1cm46IDAgb24gZmFpbHVyZSBvciBmcmVlIGJ1ZGR5IChodWdldGxiKSBwYWdlLFxcbjE1NDI6XFx0ICogICAgICAgICAxIG9uIHN1Y2Nlc3MgZm9yIGluLXVzZSBwYWdlcyBpbiBhIHdlbGwtZGVmaW5lZCBzdGF0ZSxcXG4xNTQzOlxcdCAqICAgICAgICAgLUVJTyBmb3IgcGFnZXMgb24gd2hpY2ggd2UgY2FuIG5vdCBoYW5kbGUgbWVtb3J5IGVycm9ycyxcXG4xNTQ0OlxcdCAqICAgICAgICAgLUVCVVNZIHdoZW4gZ2V0X2h3cG9pc29uX3BhZ2UoKSBoYXMgcmFjZWQgd2l0aCBwYWdlIGxpZmVjeWNsZVxcbjE1NDU6XFx0ICogICAgICAgICBvcGVyYXRpb25zIGxpa2UgYWxsb2NhdGlvbiBhbmQgZnJlZSxcXG4xNTQ2OlxcdCAqICAgICAgICAgLUVIV1BPSVNPTiB3aGVuIHRoZSBwYWdlIGlzIGh3cG9pc29uZWQgYW5kIHRha2VuIG9mZiBmcm9tIGJ1ZGR5LFxcbjE1NDc6XFx0ICogICAgICAgICAtRU5PVFJFQ09WRVJBQkxFIGZvciBrZXJuZWwtb3duZWQgcGFnZXMgaWRlbnRpZmllZCBieVxcbjE1NDg6XFx0ICogICAgICAgICBpc19rZXJuZWxfb3duZWRfcGFnZSgpIChQR19yZXNlcnZlZCwgc2xhYixcXG4xNTQ5OlxcdCAqICAgICAgICAgcGFnZS10YWJsZSwgbGFyZ2Uta21hbGxvYykgdGhhdCB0aGUgaGFuZGxlciBjYW5ub3QgcmVjb3Zlci5cXG4xNTUwOlxcdCAqL1xcbjE1NTE6XFx0c3RhdGljIGludCBnZXRfaHdwb2lzb25fcGFnZShzdHJ1Y3QgcGFnZSAqcCwgdW5zaWduZWQgbG9uZyBmbGFncylcXG4xNTUyOlxcdHtcXG4xNTUzOlxcdFxcdGludCByZXQ7XFxuMTU1NDpcXHRcXG4xNTU1OlxcdFxcdHpvbmVfcGNwX2Rpc2FibGUocGFnZV96b25lKHApKTtcXG4xNTU2OlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IE1GX1VOUE9JU09OKVxcbjE1NTc6XFx0XFx0XFx0cmV0ID0gX19nZXRfdW5wb2lzb25fcGFnZShwKTtcXG4xNTU4OlxcdFxcdGVsc2VcXG4xNTU5OlxcdFxcdFxcdHJldCA9IGdldF9hbnlfcGFnZShwLCBmbGFncyk7XFxuMTU2MDpcXHRcXHR6b25lX3BjcF9lbmFibGUocGFnZV96b25lKHApKTtcXG4xNTYxOlxcdFxcbjE1NjI6XFx0XFx0cmV0dXJuIHJldDtcXG4xNTYzOlxcdH1cXG4xNTY0OlxcdFxcbjE1NjU6XFx0LypcXG4xNTY2OlxcdCAqIFRoZSBjYWxsZXIgbXVzdCBndWFyYW50ZWUgdGhlIGZvbGlvIGlzbid0IGxhcmdlIGZvbGlvLCBleGNlcHQgaHVnZXRsYi5cXG4xNTY3OlxcdCAqIHRyeV90b191bm1hcCgpIGNhbid0IGhhbmRsZSBpdC5cXG4xNTY4OlxcdCAqL1xcbjE1Njk6XFx0aW50IHVubWFwX3BvaXNvbmVkX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGxvbmcgcGZuLCBib29sIG11c3Rfa2lsbClcXG4xNTcwOlxcdHtcXG4xNTcxOlxcdFxcdGVudW0gdHR1X2ZsYWdzIHR0dSA9IFRUVV9JR05PUkVfTUxPQ0sgfCBUVFVfU1lOQyB8IFRUVV9IV1BPSVNPTjtcXG4xNTcyOlxcdFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nO1xcbjE1NzM6XFx0XFxuMTU3NDpcXHRcXHRpZiAoZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSB7XFxuMTU3NTpcXHRcXHRcXHRwcl9lcnIoXFxcIiUjbHg6IGtlZXBpbmcgcG9pc29uZWQgcGFnZSBpbiBzd2FwIGNhY2hlXFxcXG5cXFwiLCBwZm4pO1xcbjE1NzY6XFx0XFx0XFx0dHR1IFxcdTAwMjY9IH5UVFVfSFdQT0lTT047XFxuMTU3NzpcXHRcXHR9XFxuMTU3ODpcXHRcXG4xNTc5OlxcdFxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE4OjU1OjE0LjY5NTYxNjYwM1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzM1NzIyMjk2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgaHdwb2lzb25gIFBhZ2UgQWNxdWlzaXRpb24gTG9naWMqKlxuXG5SaWdodCwgc28gYGdldF9od3BvaXNvbl9wYWdlKClgIGlzIHRoZSBlbnRyeSBwb2ludCwgYW5kIGl0J3MgY2FsbGluZyBgZ2V0X2FueV9wYWdlKClgLiBUaGF0IHNlZW1zIHJlYXNvbmFibGUgYXMgYSB3YXkgdG8gZ2VuZXJhbGl6ZSB0aGUgcGFnZSBhbGxvY2F0aW9uIHByb2Nlc3MuIE5vdywgdGhlIGludGVyZXN0aW5nIGJpdCBpcyB0aGF0IGBnZXRfYW55X3BhZ2UoKWAgaGFzIGJlZW4gdXBkYXRlZCB0byBzaG9ydC1jaXJjdWl0IGlmIGl0J3MgZGVhbGluZyB3aXRoIHBhZ2VzIHRoZSBrZXJuZWwgYWxyZWFkeSBvd25zLiBUaGF0J3MgYSBzaWduaWZpY2FudCBvcHRpbWl6YXRpb247IGF2b2lkaW5nIHVubmVjZXNzYXJ5IGNhbGxzIGlzIGFsd2F5cyBhIHdpbi5cblxuQmVmb3JlIHRoaXMgY2hhbmdlLCB0aG91Z2gsIHRoZSBjb2RlIHBhdGggd291bGQgaGF2ZSBsYW5kZWQgZGlyZWN0bHkgaW4gYF9fZ2V0X2h3cG9pc29uX3BhZ2UocCwgZmxhZ3MpYC4gR2l2ZW4gdGhlIGFyY2hpdGVjdHVyZSwgdGhpcyBpcyB0aGUgZnVuY3Rpb24gd2hlcmUgdGhlIGNvcmUgbG9naWMgb2YgaGFuZGxpbmcgdGhlIGhhcmR3YXJlIHBvaXNvbiBpcyBsaWtlbHkgaGFuZGxlZC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IHBpZWNlIGFzIHRoYXQncyB3aGVyZSB0aGUgd29yayB1c2VkIHRvIHRha2UgcGxhY2UuIExldCdzIHNlZSB3aGF0IGBfX2dldF9od3BvaXNvbl9wYWdlKClgIGFjdHVhbGx5ICpkb2VzKi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk2NDAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE4OjU1OjMyLjA1Mjg0NDEzN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODIyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzgwOlxcdFxcdHJldHVybiBrZXJuZWxfb3duZWQ7XFxuMTM4MTpcXHR9XFxuMTM4MjpcXHRcXG4xMzgzOlxcdHN0YXRpYyBpbnQgX19nZXRfaHdwb2lzb25fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBmbGFncylcXG4xMzg0OlxcdHtcXG4xMzg1OlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xcbjEzODY6XFx0XFx0aW50IHJldCA9IDA7XFxuMTM4NzpcXHRcXHRib29sIGh1Z2V0bGIgPSBmYWxzZTtcXG4xMzg4OlxcdFxcbjEzODk6XFx0XFx0cmV0ID0gZ2V0X2h3cG9pc29uX2h1Z2V0bGJfZm9saW8oZm9saW8sIFxcdTAwMjZodWdldGxiLCBmYWxzZSk7XFxuMTM5MDpcXHRcXHRpZiAoaHVnZXRsYikge1xcbjEzOTE6XFx0XFx0XFx0LyogTWFrZSBzdXJlIGh1Z2V0bGIgZGVtb3Rpb24gZGlkIG5vdCBoYXBwZW4gZnJvbSB1bmRlciB1cy4gKi9cXG4xMzkyOlxcdFxcdFxcdGlmIChmb2xpbyA9PSBwYWdlX2ZvbGlvKHBhZ2UpKVxcbjEzOTM6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMzk0OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzZSAwKSB7XFxuMTM5NTpcXHRcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbjEzOTY6XFx0XFx0XFx0XFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xcbjEzOTc6XFx0XFx0XFx0fVxcbjEzOTg6XFx0XFx0fVxcbjEzOTk6XFx0XFxuMTQwMDpcXHRcXHQvKlxcbjE0MDE6XFx0XFx0ICogVGhpcyBjaGVjayBwcmV2ZW50cyBmcm9tIGNhbGxpbmcgZm9saW9fdHJ5X2dldCgpIGZvciBhbnlcXG4xNDAyOlxcdFxcdCAqIHVuc3VwcG9ydGVkIHR5cGUgb2YgZm9saW8gaW4gb3JkZXIgdG8gcmVkdWNlIHRoZSByaXNrIG9mIHVuZXhwZWN0ZWRcXG4xNDAzOlxcdFxcdCAqIHJhY2VzIGNhdXNlZCBieSB0YWtpbmcgYSBmb2xpbyByZWZjb3VudC5cXG4xNDA0OlxcdFxcdCAqL1xcbjE0MDU6XFx0XFx0aWYgKCFIV1BvaXNvbkhhbmRsYWJsZShcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIGZsYWdzKSlcXG4xNDA2OlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuMTQwNzpcXHRcXG4xNDA4OlxcdFxcdGlmIChmb2xpb190cnlfZ2V0KGZvbGlvKSkge1xcbjE0MDk6XFx0XFx0XFx0aWYgKGZvbGlvID09IHBhZ2VfZm9saW8ocGFnZSkpXFxuMTQxMDpcXHRcXHRcXHRcXHRyZXR1cm4gMTtcXG4xNDExOlxcdFxcbjE0MTI6XFx0XFx0XFx0cHJfaW5mbyhcXFwiJSNseCBjYW5ub3QgY2F0Y2ggdGFpbFxcXFxuXFxcIiwgcGFnZV90b19wZm4ocGFnZSkpO1xcbjE0MTM6XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4xNDE0OlxcdFxcdH1cXG4xNDE1OlxcdFxcbjE0MTY6XFx0XFx0cmV0dXJuIDA7XFxuMTQxNzpcXHR9XFxuMTQxODpcXHRcXG4xNDE5OlxcdCNkZWZpbmUgR0VUX1BBR0VfTUFYX1JFVFJZX05VTSAzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE4OjU1OjMyLjA1MzIzMTQyNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODEyMzIyMDI1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgTWVtb3J5IEZhaWx1cmUgUGF0Y2ggZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBjb3JlIGNoYW5nZSBoZXJlIGlzIHRoYXQga2VybmVsIHBhZ2VzLCB3aGVuIGEgbWVtb3J5IGZhaWx1cmUgaXMgaW5qZWN0ZWQsIHdpbGwgbm93IGxlYWQgdG8gYC1FTk9UUkVDT1ZFUkFCTEVgIGJlaW5nIHJldHVybmVkIGltbWVkaWF0ZWx5IGZyb20gYGdldF9hbnlfcGFnZSgpYCwgc2tpcHBpbmcgdGhlIHJldHJ5IGxvZ2ljIGFuZCBgc2hha2VfcGFnZSgpYC4gIEluc3RlYWQgb2YgYC1FSU9gLCB3aGljaCB3YXMgcHJldmlvdXNseSBoYW5kbGVkIGJ5IGBhY3Rpb25fcmVzdWx0KHBmbiwgTUZfTVNHX0dFVF9IV1BPSVNPTiwgTUZfSUdOT1JFRClgLCB3ZSBub3cgZ2V0ICBgYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19LRVJORUwsIE1GX0lHTk9SRUQpYC4gQSBuZXcgc3lzY3RsLCBgcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZW1vcnlfZmFpbHVyZWAsIGNhbiBiZSBlbmFibGVkLCB3aGljaCB3aWxsIHRyaWdnZXIgYSBwYW5pYyAqaWYqIHRoZSBmYWlsdXJlIG9jY3VycyBvbiBhIGtlcm5lbCBwYWdlIGFuZCB0aGUgcmVzdWx0IGlzIGBNRl9JR05PUkVEYCwgd2hpY2ggaXMgdGhlIG5ldyBkZWZhdWx0LlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzLCBpcyB0aGlzIGV2ZW4gd29ydGggZnV6emluZz8gVGhlIHByb21wdCdzIGNyaXRlcmlhIGFyZSBrZXkuICBUaGUgbW9kaWZpY2F0aW9uICppcyogdG8gY29yZSBrZXJuZWwgbG9naWMgKGBtbS9tZW1vcnktZmFpbHVyZS5jYCkuICBUaGUgcGF0aHMgYXJlIHJlYWNoYWJsZSwgYm90aCB0aHJvdWdoIGBtYWR2aXNlKE1BRFZfSFdQT0lTT04pYCBhbmQgYC9zeXMvZGV2aWNlcy9zeXN0ZW0vbWVtb3J5L2hhcmRfb2ZmbGluZV9wYWdlYC4gIFRoZSBjaGFuZ2VzICpkbyogYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93LCBzcGVjaWZpY2FsbHkgc2hvcnQtY2lyY3VpdGluZyB0aGUgZXhpc3RpbmcgcmV0cnkgbWVjaGFuaXNtLiAgVGhlIHBhbmljLCB3aGlsZSBpbnRlbnRpb25hbCwgKmlzKiBhIGZ1bmN0aW9uYWwgY2hhbmdlLlxuXG5Ib3dldmVyLCB0aGUgbWFpbiBjaGFuZ2UgaXMgdGhhdCBpbnRlbnRpb25hbCBwYW5pYy4gRW5hYmxpbmcgdGhlIHN5c2N0bCB3aWxsIGxlYWQgdG8gc3l6a2FsbGVyIHJlcG9ydGluZyB0aG9zZSBhcyBidWdzLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AuIEZvY3VzaW5nIG9uIGBpc19rZXJuZWxfb3duZWRfcGFnZWAgb3IgYHBhbmljX29uX3VucmVjb3ZlcmFibGVfbWZgIHdpdGggdGhhdCBzeXNjdGwgZW5hYmxlZCBtZWFucyBzeXprYWxsZXIgd291bGQgaGl0IHRoZSBwYW5pYyByZXBlYXRlZGx5LCBsZWFkaW5nIHRvIGZhbHNlIHBvc2l0aXZlcy5cblxuQnV0IHRoZW4gSSByZW1lbWJlciBzeXprYWxsZXIncyBqb2I6IFwiSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cIlxuXG5TbywgZXZlbiB0aG91Z2ggdGhlcmUncyBubyBjb21wbGV4IGxvZ2ljIGJlaW5nIGludHJvZHVjZWQsIHRoZXJlJ3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBgbW0vbWVtb3J5LWZhaWx1cmUuY2AgLSBhIGNoYW5nZSBvZiByZXR1cm4gY29kZSBhbmQgYSBzaG9ydC1jaXJjdWl0LCBpdCBtZWV0cyB0aGUgY3JpdGVyaWEuIFNvLCBJIG5lZWQgdG8gc2F5IGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbklmIEkgc2F5IGBXb3J0aEZ1enppbmc9dHJ1ZWAgSSAqaGF2ZSogdG8gbGlzdCBgaXNfa2VybmVsX293bmVkX3BhZ2VgIGFuZCBgcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZmAgYXMgZm9jdXMgc3ltYm9scy4gU3l6a2FsbGVyICpzaG91bGQqIGJlIHRyeWluZyB0byBpbmplY3QgbWVtb3J5IGZhaWx1cmVzIGludG8ga2VybmVsIHBhZ2VzLCBhbmQgdGhhdCBpcyB3aGF0IHRoZSBuZXcgbG9naWMgZGVhbHMgd2l0aC5cblxuVGhlIHBhbmljLCB3aGlsZSAqaW50ZW50aW9uYWwqLCBpcyBzdGlsbCBhIG1vZGlmaWNhdGlvbiB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGV4cG9zZSBpc3N1ZXMsIG1heWJlLiBUaGUgZmFjdCB0aGF0IHRoZSBwYW5pYyB3aWxsIGJlIGRldGVjdGVkIGFzIGEgYnVnIHNob3VsZCBub3QgYmUgYSBjb25jZXJuLlxuXG5UaGVyZWZvcmUsIGJlY2F1c2UgdGhpcyB0b3VjaGVzIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsbHkgYWx0ZXJzIHRoZSBleGVjdXRpb24sIEknbSBnb2luZyB3aXRoIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbmBgYFxuV29ydGhGdXp6aW5nPXRydWVcbkZvY3VzU3ltYm9scz1baXNfa2VybmVsX293bmVkX3BhZ2UsIHBhbmljX29uX3VucmVjb3ZlcmFibGVfbWZdXG5gYGBcblxuXG4iLCJJbnB1dFRva2VucyI6MjA1MTAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTg6NTU6NTAuMTc2NDU2MzE0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODk2Nzc0MTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1PUllfRkFJTFVSRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTc3ND1jb25maWcgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRVxcbi0tXFxubW0vS2NvbmZpZy03NzYtXFxubW0vS2NvbmZpZzo3Nzc6Y29uZmlnIE1FTU9SWV9GQUlMVVJFXFxubW0vS2NvbmZpZy03NzgtXFx0ZGVwZW5kcyBvbiBNTVVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTg6NTU6NTUuMDczMjQwMjRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM3NzMzOTI2NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMgZm9yIE1lbW9yeSBUZXN0aW5nKipcblxuQWxyaWdodCwgc28gSSdtIGhvbmluZyBpbiBvbiB0aGUgY3J1Y2lhbCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgZm9yIG1lbW9yeSB0ZXN0aW5nLiBNeSBpbml0aWFsIGd1dCBmZWVsaW5nIGlzIHRoYXQgYE1FTU9SWV9GQUlMVVJFYCBpcyB0aGUgcHJpbWFyeSBzZXR0aW5nIEknbGwgYmUgd29ya2luZyB3aXRoLiBUaGF0J3MgdGhlIGdvLXRvLCBhcyBpdCBkaXJlY3RseSBzaW11bGF0ZXMgbWVtb3J5IGVycm9ycywgd2hpY2ggaXMgd2hhdCBJJ20gYWltaW5nIHRvIGV2YWx1YXRlIGFuZCB1bmRlcnN0YW5kLlxuXG5Ib3dldmVyLCBJJ20gYWxyZWFkeSBtZW50YWxseSBjcm9zcy1yZWZlcmVuY2luZyB0aGF0IHdpdGggYW5vdGhlciBwb3dlcmZ1bCBvcHRpb246IGBIV1BPSVNPTl9JTkpFQ1RgLiBOb3csIHRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gV2hpbGUgYE1FTU9SWV9GQUlMVVJFYCBtaWdodCBiZSBtb3JlIHN0cmFpZ2h0Zm9yd2FyZCBmb3IgY2VydGFpbiBzY2VuYXJpb3MsIGBIV1BPSVNPTl9JTkpFQ1RgIG9mZmVycyBhIGRpZmZlcmVudCBsZXZlbCBvZiBjb250cm9sIGFuZCBwb3RlbnRpYWxseSBtb3JlIHJlYWxpc3RpYyBzaW11bGF0aW9uLCBhcyBpdCBjYW4gYmUgdXNlZCB0byBpbmplY3QgbWVtb3J5IGVycm9ycyBpbnRvIHRoZSBzeXN0ZW0gaW4gYSB3YXkgdGhhdCBpcyBtb3JlIGhhcmR3YXJlLWxpa2UuIEknbGwgbmVlZCB0byBjb25zaWRlciB3aGljaCBhcHByb2FjaCwgb3IgY29tYmluYXRpb24gb2YgYXBwcm9hY2hlcywgd2lsbCBnaXZlIG1lIHRoZSBtb3N0IGluc2lnaHRmdWwgcmVzdWx0cywgZGVwZW5kaW5nIG9uIG15IHNwZWNpZmljIHRlc3Qgb2JqZWN0aXZlcy4gQm90aCBzZWVtIHZhbHVhYmxlLCBidXQgbXkgYXNzZXNzbWVudCBvbiB3aGljaCBpcyBiZXN0IHdpbGwgYmUgbWFkZSBkdXJpbmcgYSBkZWVwZXIgZXZhbHVhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMwMDgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxODo1NjowOC44NDY2Mzc2NzlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjA2MDg5OTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhXUE9JU09OX0lOSkVDVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTc3Nz1jb25maWcgTUVNT1JZX0ZBSUxVUkVcXG4tLVxcbm1tL0tjb25maWctNzg3LVxcbm1tL0tjb25maWc6Nzg4OmNvbmZpZyBIV1BPSVNPTl9JTkpFQ1RcXG5tbS9LY29uZmlnLTc4OS1cXHR0cmlzdGF0ZSBcXFwiSFdQb2lzb24gcGFnZXMgaW5qZWN0b3JcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE4OjU2OjEzLjM2NzI2Mjg4MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTExNTU4MTIwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYE1BRFZfSFdQT0lTT05gIERlcGVuZGVuY3kgYW5kIFdvcnRoRnV6emluZyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZzogaXMgYE1BRFZfSFdQT0lTT05gIGRlcGVuZGVudCBvbiBgQ09ORklHX01FTU9SWV9GQUlMVVJFYD8gQSBxdWljayBncmVwIGluIGBtbS9tYWR2aXNlLmNgIGNvbmZpcm1zIGl0OyB0aGUgY29kZSBkaXJlY3RseSB1c2VzIGAjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFYCBhcm91bmQgYSBmdW5jdGlvbiByZWxldmFudCB0byBlcnJvciBpbmplY3Rpb24uIFNvLCB5ZXMsIHRoZSBkZXBlbmRlbmN5IGlzIHRoZXJlLiBHb3QgaXQuXG5cbk5vdywgcmV2aXNpdGluZyB0aGUgYFdvcnRoRnV6emluZ2AgcXVlc3Rpb24uIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIHN5c2N0bCB0aGF0IGludGVudGlvbmFsbHkgdHJpZ2dlcnMgYSBrZXJuZWwgcGFuaWMuIFRoZSBpbXBsaWNhdGlvbiBpcyBjbGVhcjogc3l6a2FsbGVyIGNvdWxkIGJlIHVzZWQgdG8gZGlyZWN0bHkgY2F1c2UgcGFuaWNzLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBkb2VzIGZ1enppbmcgKnRoaXMqIGZlYXR1cmUgaGVscCB1bmNvdmVyICpvdGhlciogYnVncz8gSSdtIG5vdCBpbW1lZGlhdGVseSBzZWVpbmcgaXQuIEhvd2V2ZXIsIHRoZSBgZ2V0X2FueV9wYWdlKClgIHNob3J0LWNpcmN1aXQgaXMgYW4gaW1wb3J0YW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYXZvaWRzIGBzaGFrZV9wYWdlKClgLiBJdCBpbnRyb2R1Y2VzIHJldHJ5IGxvZ2ljLCB3aGljaCwgb24gaXRzIG93biwgc2VlbXMgZnVuY3Rpb25hbC4gSWYgYGNvdW50X2luY3JlYXNlZGAgaXMgdHJ1ZSwgaXQgY2FsbHMgYHB1dF9wYWdlKHApYC4gSGFuZyBvbuKApiBgY291bnRfaW5jcmVhc2VkYCBkZXBlbmRzIG9uIHRoZSBgZmxhZ3NgIHBhcmFtZXRlciwgc3BlY2lmaWNhbGx5IHdoZXRoZXIgYGZsYWdzIFx1MDAyNiBNRl9DT1VOVF9JTkNSRUFTRURgIGlzIHNldC4gT2theSwgSSBuZWVkIHRvIHNlZSB3aGVyZSBgTUZfQ09VTlRfSU5DUkVBU0VEYCBpcyAqdXNlZCogYW5kIHBhc3NlZC4gSSdsbCBzZWFyY2ggZm9yIHRoYXQgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzM2NiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxODo1NjoyNC40ODI4NTEwNTNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NDg2MzIzOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUZfQ09VTlRfSU5DUkVBU0VEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbW0uaD00OTgyPWVudW0gbWZfZmxhZ3Mge1xcbmluY2x1ZGUvbGludXgvbW0uaDo0OTgzOlxcdE1GX0NPVU5UX0lOQ1JFQVNFRCA9IDEgXFx1MDAzY1xcdTAwM2MgMCxcXG5pbmNsdWRlL2xpbnV4L21tLmgtNDk4NC1cXHRNRl9BQ1RJT05fUkVRVUlSRUQgPSAxIFxcdTAwM2NcXHUwMDNjIDEsXFxuLS1cXG5tbS9tYWR2aXNlLmM9MTQ0Nz1zdGF0aWMgaW50IG1hZHZpc2VfaW5qZWN0X2Vycm9yKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTE0NzUtXFx0XFx0XFx0XFx0IHBmbiwgc3RhcnQpO1xcbm1tL21hZHZpc2UuYzoxNDc2OlxcdFxcdFxcdHJldCA9IHNvZnRfb2ZmbGluZV9wYWdlKHBmbiwgTUZfQ09VTlRfSU5DUkVBU0VEKTtcXG5tbS9tYWR2aXNlLmMtMTQ3Ny1cXHRcXHR9IGVsc2Uge1xcbi0tXFxubW0vbWFkdmlzZS5jLTE0NzktXFx0XFx0XFx0XFx0IHBmbiwgc3RhcnQpO1xcbm1tL21hZHZpc2UuYzoxNDgwOlxcdFxcdFxcdHJldCA9IG1lbW9yeV9mYWlsdXJlKHBmbiwgTUZfQUNUSU9OX1JFUVVJUkVEIHwgTUZfQ09VTlRfSU5DUkVBU0VEIHwgTUZfU1dfU0lNVUxBVEVEKTtcXG5tbS9tYWR2aXNlLmMtMTQ4MS1cXHRcXHRcXHRpZiAocmV0ID09IC1FT1BOT1RTVVBQKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0xNDIxPXN0YXRpYyBpbnQgZ2V0X2FueV9wYWdlKHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNDI1LVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTQyNjpcXHRpZiAoZmxhZ3MgXFx1MDAyNiBNRl9DT1VOVF9JTkNSRUFTRUQpXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNDI3LVxcdFxcdGNvdW50X2luY3JlYXNlZCA9IHRydWU7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE0MzItXFx0ICogY2Fubm90IHR1cm4gYW55IG9mIHRoZXNlIGludG8gc29tZXRoaW5nIEhXUG9pc29uSGFuZGxhYmxlKCkuXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxNDMzOlxcdCAqIERyb3AgdGhlIGNhbGxlcidzIHJlZmVyZW5jZSBpZiBNRl9DT1VOVF9JTkNSRUFTRUQgdG9vayBvbmUuXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNDM0LVxcdCAqL1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMDE0PXN0YXRpYyBpbnQgZ2V0X2h1Z2VfcGFnZV9mb3JfaHdwb2lzb24odW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncyxcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjAyNi1cXHRcXHRnb3RvIG91dF91bmxvY2s7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMDI3OlxcdH0gZWxzZSBpZiAoZmxhZ3MgXFx1MDAyNiBNRl9DT1VOVF9JTkNSRUFTRUQpIHtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIwMjgtXFx0XFx0cmV0ID0gTUZfSFVHRVRMQl9JTl9VU0VEO1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMTY3PXN0YXRpYyB2b2lkIHB1dF9yZWZfcGFnZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjE2OC17XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyMTY5OlxcdGlmICghKGZsYWdzIFxcdTAwMjYgTUZfQ09VTlRfSU5DUkVBU0VEKSlcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTIxNzAtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0yMzg3PWludCBtZW1vcnlfZmFpbHVyZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IGZsYWdzKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNDQzLVxcdFxcdFxcdHJlcyA9IGtpbGxfYWNjZXNzaW5nX3Byb2Nlc3MoY3VycmVudCwgcGZuLCBmbGFncyk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNDQ0OlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IE1GX0NPVU5UX0lOQ1JFQVNFRClcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI0NDUtXFx0XFx0XFx0cHV0X3BhZ2UocCk7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI1MjAtXFx0XFx0ICogaXQgaXMgY2FsbGVkIGJ5IHNvZnQgb2ZmbGluZSB0b28gYW5kIGl0IGlzIGp1c3QgY2FsbGVkXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNTIxOlxcdFxcdCAqIGZvciAhTUZfQ09VTlRfSU5DUkVBU0VELiAgU28gaGVyZSBzZWVtcyB0byBiZSB0aGUgYmVzdFxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjUyMi1cXHRcXHQgKiBwbGFjZS5cXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9Mjk2OD1pbnQgc29mdF9vZmZsaW5lX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjk3NC1cXHRpZiAoIXBmbl92YWxpZChwZm4pKSB7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyOTc1OlxcdFxcdFdBUk5fT05fT05DRShmbGFncyBcXHUwMDI2IE1GX0NPVU5UX0lOQ1JFQVNFRCk7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yOTc2LVxcdFxcdHJldHVybiAtRU5YSU87XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTMwMTktXFx0XFx0XFx0XFx0dHJ5X2FnYWluID0gZmFsc2U7XFxubW0vbWVtb3J5LWZhaWx1cmUuYzozMDIwOlxcdFxcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5NRl9DT1VOVF9JTkNSRUFTRUQ7XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0zMDIxLVxcdFxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE4OjU2OjMwLjAzMTQ5MzY2NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTk0MjcyNzg4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIFJlZmVyZW5jZSBDb3VudCBJc3N1ZXMgaW4gTWVtb3J5IEZhaWx1cmUgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBgbWFkdmlzZV9pbmplY3RfZXJyb3JgIGFuZCB0aGUgc3Vic2VxdWVudCBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZyB3b3JrLCBhbmQgc29tZXRoaW5nIGlzIHN0YXJ0aW5nIHRvIHNtZWxsIGEgYml0IGZpc2h5LiBJIHNlZSB0aGF0IGBtYWR2aXNlX2luamVjdF9lcnJvcmAgcGFzc2VzIGBNRl9DT1VOVF9JTkNSRUFTRURgIGJlY2F1c2UgaXQgY2FsbHMgYGdldF91c2VyX3BhZ2VzX2Zhc3RgLCB3aGljaCwgYXMgd2Uga25vdywgKnRha2VzKiBhIHJlZmVyZW5jZSBvbiB0aGUgcGFnZS4gTWFrZXMgc2Vuc2UsIHRoYXQncyBleHBlY3RlZCBiZWhhdmlvci5cblxuVGhlbiBgbWVtb3J5X2ZhaWx1cmVgIGtpY2tzIGluIGFuZCBldmVudHVhbGx5IGNhbGxzIGBnZXRfaHdwb2lzb25fcGFnZWAuIFRoYXQgZnVuY3Rpb24sIGluIHR1cm4sIGNhbGxzIGBnZXRfYW55X3BhZ2VgLiBOb3csIGhlcmUncyB3aGVyZSBteSBhbGFybSBiZWxscyBzdGFydCByaW5naW5nLiBJbnNpZGUgYGdldF9hbnlfcGFnZWAsIHRoZXJlJ3MgdGhpcyBiaXQgb2YgY29kZTpcblxuYGBgY1xuXHRpZiAoaXNfa2VybmVsX293bmVkX3BhZ2UocCkpIHtcblx0XHRpZiAoY291bnRfaW5jcmVhc2VkKVxuXHRcdFx0cHV0X3BhZ2UocCk7XG5cdFx0cmV0ID0gLUVOT1RSRUNPVkVSQUJMRTtcblx0XHRnb3RvIG91dDtcblx0fVxuYGBgXG5cbk5vdywgaG9sZCBvbiBhIHNlY29uZC4gSWYgYGlzX2tlcm5lbF9vd25lZF9wYWdlYCBpcyB0cnVlLCBhbmQgYGNvdW50X2luY3JlYXNlZGAgaXMgYWxzbyB0cnVlLCBpdCBjYWxscyBgcHV0X3BhZ2UocClgLiBUaGF0IGBwdXRfcGFnZWAgaXMgKmRyb3BwaW5nKiB0aGUgcmVmZXJlbmNlIHRoYXQgYGdldF91c2VyX3BhZ2VzX2Zhc3RgIG9yaWdpbmFsbHkgdG9vayEgQnV0LCBgbWVtb3J5X2ZhaWx1cmVgIGFsc28gY2FsbHMgYGdldF9od3BvaXNvbl9wYWdlYCB3aGljaCByZXR1cm5zIGAtRU5PVFJFQ09WRVJBQkxFYCwgYW5kIGFsc28gZG9lcyBzb21lIGV4dHJhIHByb2Nlc3Npbmc6XG5cbmBgYGNcblx0cmVzID0gZ2V0X2h3cG9pc29uX3BhZ2UocCwgZmxhZ3MpO1xuXHRzd2l0Y2ggKHJlcykge1xuXHRjYXNlIDA6XG4gICAgICAgIC4uLlxuXHRjYXNlIDE6XG5cdFx0LyogR290IGEgcmVmY291bnQgb24gYSBoYW5kbGFibGUgcGFnZS4gKi9cblx0XHRicmVhaztcblx0Y2FzZSAtRU5PVFJFQ09WRVJBQkxFOlxuXHRcdC8qXG5cdFx0ICogU3RhYmxlIHVuaGFuZGxhYmxlIGtlcm5lbC1vd25lZCBwYWdlIChQR19yZXNlcnZlZCxcblx0XHQgKiBzbGFiLCBwYWdlIHRhYmxlcywgbGFyZ2Uta21hbGxvYykuXG5cdFx0ICogTm8gcmVjb3ZlcnkgcG9zc2libGUuXG5cdFx0ICovXG5cdFx0cmVzID0gYWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19LRVJORUwsIE1GX0lHTk9SRUQpO1xuXHRcdGdvdG8gdW5sb2NrX211dGV4O1xuYGBgXG5cbklmIGBnZXRfaHdwb2lzb25fcGFnZWAgcmV0dXJucyBgLUVOT1RSRUNPVkVSQUJMRWAsIGl0IGJyYW5jaGVzIHRvIGB1bmxvY2tfbXV0ZXhgLiBBbmQgd2hhdCBkb2VzIHRoYXQgZG8/XG5cbmBgYGNcbnVubG9ja19tdXRleDpcblx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1mX211dGV4KTtcblx0aWYgKGh3X21lbW9yeV9mYWlsdXJlKVxuXHRcdHByX2VycihcIiUjbHg6IHJlY292ZXJ5IGFjdGlvbiBmb3IgJXM6ICVzXFxuXCIsXG5cdFx0XHRwZm4sIGFjdGlvbl9wYWdlX3R5cGVzW01GX01TR19LRVJORUxdLCBhY3Rpb25fbmFtZVtNRl9JR05PUkVEXSk7XG5cdHJldHVybiByZXM7XG5gYGBcblxuQWgsIGl0IGp1c3QgcmV0dXJucy4gRG9lcyBpdCBhY3R1YWxseSBkcm9wIHRoZSByZWZlcmVuY2UgdG8gdGhlIHBhZ2UgaWYgYGdldF9od3BvaXNvbl9wYWdlYCByZXR1cm5zIGAtRU5PVFJFQ09WRVJBQkxFYD8gVGhhdCdzIHRoZSBrZXkgcXVlc3Rpb24uIEkgbmVlZCB0byBiZSAqYWJzb2x1dGVseSogc3VyZSBpZiB3ZSdyZSBsZWFraW5nIHRoaXMgcmVmZXJlbmNlIHVuZGVyIHRoaXMgcGFydGljdWxhciBwYXRoLiBJIGJldHRlciBnbyBhbmQgY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgb2YgYG1lbW9yeV9mYWlsdXJlYCBhcm91bmQgbGluZSAyNDQwIHRvIG1ha2Ugc3VyZSB0aGUgcmVmZXJlbmNlIGlzbid0IGxlYWtlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ5NzYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTg6NTY6NDEuOTc0MjI3NjA0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MjkxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1vcnktZmFpbHVyZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0MzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI0MzA6XFx0XFx0fVxcbjI0MzE6XFx0XFxuMjQzMjpcXHR0cnlfYWdhaW46XFxuMjQzMzpcXHRcXHRyZXMgPSB0cnlfbWVtb3J5X2ZhaWx1cmVfaHVnZXRsYihwZm4sIGZsYWdzKTtcXG4yNDM0OlxcdFxcdC8qXFxuMjQzNTpcXHRcXHQgKiAtRU5PRU5UIG1lYW5zIHRoZSBwYWdlIHdlIGZvdW5kIGlzIG5vdCBodWdldGxiLCBzbyBwcm9jZWVkIHdpdGggbm9ybWFsIHBhZ2UgaGFuZGxpbmdcXG4yNDM2OlxcdFxcdCAqL1xcbjI0Mzc6XFx0XFx0aWYgKHJlcyAhPSAtRU5PRU5UKVxcbjI0Mzg6XFx0XFx0XFx0Z290byB1bmxvY2tfbXV0ZXg7XFxuMjQzOTpcXHRcXG4yNDQwOlxcdFxcdGlmIChUZXN0U2V0UGFnZUhXUG9pc29uKHApKSB7XFxuMjQ0MTpcXHRcXHRcXHRyZXMgPSAtRUhXUE9JU09OO1xcbjI0NDI6XFx0XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgTUZfQUNUSU9OX1JFUVVJUkVEKVxcbjI0NDM6XFx0XFx0XFx0XFx0cmVzID0ga2lsbF9hY2Nlc3NpbmdfcHJvY2VzcyhjdXJyZW50LCBwZm4sIGZsYWdzKTtcXG4yNDQ0OlxcdFxcdFxcdGlmIChmbGFncyBcXHUwMDI2IE1GX0NPVU5UX0lOQ1JFQVNFRClcXG4yNDQ1OlxcdFxcdFxcdFxcdHB1dF9wYWdlKHApO1xcbjI0NDY6XFx0XFx0XFx0YWN0aW9uX3Jlc3VsdChwZm4sIE1GX01TR19BTFJFQURZX1BPSVNPTkVELCBNRl9GQUlMRUQpO1xcbjI0NDc6XFx0XFx0XFx0Z290byB1bmxvY2tfbXV0ZXg7XFxuMjQ0ODpcXHRcXHR9XFxuMjQ0OTpcXHRcXG4yNDUwOlxcdFxcdC8qXFxuMjQ1MTpcXHRcXHQgKiBXZSBuZWVkL2NhbiBkbyBub3RoaW5nIGFib3V0IGNvdW50PTAgcGFnZXMuXFxuMjQ1MjpcXHRcXHQgKiAxKSBpdCdzIGEgZnJlZSBwYWdlLCBhbmQgdGhlcmVmb3JlIGluIHNhZmUgaGFuZDpcXG4yNDUzOlxcdFxcdCAqICAgIGNoZWNrX25ld19wYWdlKCkgd2lsbCBiZSB0aGUgZ2F0ZSBrZWVwZXIuXFxuMjQ1NDpcXHRcXHQgKiAyKSBpdCdzIHBhcnQgb2YgYSBub24tY29tcG91bmQgaGlnaCBvcmRlciBwYWdlLlxcbjI0NTU6XFx0XFx0ICogICAgSW1wbGllcyBzb21lIGtlcm5lbCB1c2VyOiBjYW5ub3Qgc3RvcCB0aGVtIGZyb21cXG4yNDU2OlxcdFxcdCAqICAgIFIvVyB0aGUgcGFnZTsgbGV0J3MgcHJheSB0aGF0IHRoZSBwYWdlIGhhcyBiZWVuXFxuMjQ1NzpcXHRcXHQgKiAgICB1c2VkIGFuZCB3aWxsIGJlIGZyZWVkIHNvbWUgdGltZSBsYXRlci5cXG4yNDU4OlxcdFxcdCAqIEluIGZhY3QgaXQncyBkYW5nZXJvdXMgdG8gZGlyZWN0bHkgYnVtcCB1cCBwYWdlIGNvdW50IGZyb20gMCxcXG4yNDU5OlxcdFxcdCAqIHRoYXQgbWF5IG1ha2UgcGFnZV9yZWZfZnJlZXplKCkvcGFnZV9yZWZfdW5mcmVlemUoKSBtaXNtYXRjaC5cXG4yNDYwOlxcdFxcdCAqL1xcbjI0NjE6XFx0XFx0cmVzID0gZ2V0X2h3cG9pc29uX3BhZ2UocCwgZmxhZ3MpO1xcbjI0NjI6XFx0XFx0c3dpdGNoIChyZXMpIHtcXG4yNDYzOlxcdFxcdGNhc2UgMDpcXG4yNDY0OlxcdFxcdFxcdGlmIChpc19mcmVlX2J1ZGR5X3BhZ2UocCkpIHtcXG4yNDY1OlxcdFxcdFxcdFxcdGlmICh0YWtlX3BhZ2Vfb2ZmX2J1ZGR5KHApKSB7XFxuMjQ2NjpcXHRcXHRcXHRcXHRcXHRwYWdlX3JlZl9pbmMocCk7XFxuMjQ2NzpcXHRcXHRcXHRcXHRcXHRyZXMgPSBNRl9SRUNPVkVSRUQ7XFxuMjQ2ODpcXHRcXHRcXHRcXHR9IGVsc2Uge1xcbjI0Njk6XFx0XFx0XFx0XFx0XFx0LyogV2UgbG9zdCB0aGUgcmFjZSwgdHJ5IGFnYWluICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE4OjU2OjQxLjk3NDUxNDc5M1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDkzNDk5NjgyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEhXUG9pc29uIFBhZ2UgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhpcyBgZ2V0X2h3cG9pc29uX3BhZ2VgIGZ1bmN0aW9uLiBBIGNydWNpYWwgcG9pbnQgaGVyZSBpcyB0aGF0IGlmIGl0IHJldHVybnMgYC1FTk9UUkVDT1ZFUkFCTEVgLCB0aGUgY29kZSBwcm9jZWVkcyB0byBgdW5sb2NrX211dGV4YC4gVGhlIGNvcmUgb2YgbXkgY29uY2VybiBoZXJlIGlzICpkb2VzKiBpdCBtYW5hZ2UgdG8gZHJvcCB0aGUgcGFnZSdzIHJlZmVyZW5jZSBwcm9wZXJseSBhZnRlciBlbmNvdW50ZXJpbmcgdGhhdCBlcnJvcj9cblxuSSdtIHN0YXJ0aW5nIHRvIHJlbWVtYmVyIHRoZSBwcmUtcGF0Y2ggYmVoYXZpb3Igb2YgYGdldF9hbnlfcGFnZWAuIEl0IGxvb2tzIGxpa2UgaXQgd291bGQgY2FsbCBgX19nZXRfaHdwb2lzb25fcGFnZWAsIGJ1dCBvbmx5IHVuZGVyIHNwZWNpZmljIGNpcmN1bXN0YW5jZXMuIFNwZWNpZmljYWxseSwgaWYgYGNvdW50X2luY3JlYXNlZGAgd2FzIGZhbHNlLlxuXG5JIG5lZWQgdG8gY2lyY2xlIGJhY2sgdG8gYGdldF9hbnlfcGFnZWAuIElmIGBjb3VudF9pbmNyZWFzZWRgIGlzIHRydWUsIHRoZW4gYF9fZ2V0X2h3cG9pc29uX3BhZ2VgICp3YXNuJ3QqIGNhbGxlZCwgYnV0IG5vdyBJIG5lZWQgdG8gY2hlY2sgd2hldGhlciB0aGF0J3MgcHJvYmxlbWF0aWMuIEkgbXVzdCB2ZXJpZnkgdGhlIGxvZ2ljIHN1cnJvdW5kaW5nIHRoYXQgY29uZGl0aW9uYWwgY2FsbCBjYXJlZnVsbHkuIFRoaXMgbGlrZWx5IGhhcyBpbXBsaWNhdGlvbnMgZm9yIHRoZSByZWZlcmVuY2UgY291bnRzIGFuZCBvdmVyYWxsIG1lbW9yeSBpbnRlZ3JpdHkuIEknbGwgbmVlZCB0byBzY3J1dGluaXplIGhvdyB0aG9zZSB0d28gYnJhbmNoZXMgYmVoYXZlIGluIHRhbmRlbSB0byB0cnVseSB1bmRlcnN0YW5kIHRoZSBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2ODExLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTg6NTY6NTIuOTA5NTE2NjAzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMTk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1vcnktZmFpbHVyZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0NDA6XFx0XFx0fVxcbjE0NDE6XFx0XFxuMTQ0MjpcXHR0cnlfYWdhaW46XFxuMTQ0MzpcXHRcXHRpZiAoIWNvdW50X2luY3JlYXNlZCkge1xcbjE0NDQ6XFx0XFx0XFx0cmV0ID0gX19nZXRfaHdwb2lzb25fcGFnZShwLCBmbGFncyk7XFxuMTQ0NTpcXHRcXHRcXHRpZiAoIXJldCkge1xcbjE0NDY6XFx0XFx0XFx0XFx0aWYgKHBhZ2VfY291bnQocCkpIHtcXG4xNDQ3OlxcdFxcdFxcdFxcdFxcdC8qIFdlIHJhY2VkIHdpdGggYW4gYWxsb2NhdGlvbiwgcmV0cnkuICovXFxuMTQ0ODpcXHRcXHRcXHRcXHRcXHRpZiAocGFzcysrIFxcdTAwM2MgR0VUX1BBR0VfTUFYX1JFVFJZX05VTSlcXG4xNDQ5OlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gdHJ5X2FnYWluO1xcbjE0NTA6XFx0XFx0XFx0XFx0XFx0cmV0ID0gLUVCVVNZO1xcbjE0NTE6XFx0XFx0XFx0XFx0fSBlbHNlIGlmICghUGFnZUh1Z2UocCkgXFx1MDAyNlxcdTAwMjYgIWlzX2ZyZWVfYnVkZHlfcGFnZShwKSkge1xcbjE0NTI6XFx0XFx0XFx0XFx0XFx0LyogV2UgcmFjZWQgd2l0aCBwdXRfcGFnZSwgcmV0cnkuICovXFxuMTQ1MzpcXHRcXHRcXHRcXHRcXHRpZiAocGFzcysrIFxcdTAwM2MgR0VUX1BBR0VfTUFYX1JFVFJZX05VTSlcXG4xNDU0OlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gdHJ5X2FnYWluO1xcbjE0NTU6XFx0XFx0XFx0XFx0XFx0cmV0ID0gLUVJTztcXG4xNDU2OlxcdFxcdFxcdFxcdH1cXG4xNDU3OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjE0NTg6XFx0XFx0XFx0fSBlbHNlIGlmIChyZXQgPT0gLUVCVVNZKSB7XFxuMTQ1OTpcXHRcXHRcXHRcXHQvKlxcbjE0NjA6XFx0XFx0XFx0XFx0ICogV2UgcmFjZWQgd2l0aCAocG9zc2libHkgdGVtcG9yYXJ5KSB1bmhhbmRsYWJsZVxcbjE0NjE6XFx0XFx0XFx0XFx0ICogcGFnZSwgcmV0cnkuXFxuMTQ2MjpcXHRcXHRcXHRcXHQgKi9cXG4xNDYzOlxcdFxcdFxcdFxcdGlmIChwYXNzKysgXFx1MDAzYyBHRVRfUEFHRV9NQVhfUkVUUllfTlVNKSB7XFxuMTQ2NDpcXHRcXHRcXHRcXHRcXHRzaGFrZV9wYWdlKHApO1xcbjE0NjU6XFx0XFx0XFx0XFx0XFx0Z290byB0cnlfYWdhaW47XFxuMTQ2NjpcXHRcXHRcXHRcXHR9XFxuMTQ2NzpcXHRcXHRcXHRcXHRyZXQgPSAtRUlPO1xcbjE0Njg6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTQ2OTpcXHRcXHRcXHR9XFxuMTQ3MDpcXHRcXHR9XFxuMTQ3MTpcXHRcXG4xNDcyOlxcdFxcdGlmIChQYWdlSHVnZShwKSB8fCBIV1BvaXNvbkhhbmRsYWJsZShwLCBmbGFncykpIHtcXG4xNDczOlxcdFxcdFxcdHJldCA9IDE7XFxuMTQ3NDpcXHRcXHR9IGVsc2Uge1xcbjE0NzU6XFx0XFx0XFx0LypcXG4xNDc2OlxcdFxcdFxcdCAqIEEgcGFnZSB3ZSBjYW5ub3QgaGFuZGxlLiBDaGVjayB3aGV0aGVyIHdlIGNhbiB0dXJuXFxuMTQ3NzpcXHRcXHRcXHQgKiBpdCBpbnRvIHNvbWV0aGluZyB3ZSBjYW4gaGFuZGxlLlxcbjE0Nzg6XFx0XFx0XFx0ICovXFxuMTQ3OTpcXHRcXHRcXHRpZiAocGFzcysrIFxcdTAwM2MgR0VUX1BBR0VfTUFYX1JFVFJZX05VTSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxODo1Njo1Mi45MDk4MjMxMTJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTcxOTIyNzgzMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIE1lbW9yeSBGYWlsdXJlIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgdGhpcyBwYXRjaCwgd2hpbGUgY2hhbmdpbmcgdGhlIHJldHVybiB2YWx1ZSBhbmQgc2hvcnQtY2lyY3VpdGluZyBmb3Iga2VybmVsIHBhZ2VzLCB3YXMgcHJpbWFyaWx5IGFib3V0IGVuYWJsaW5nIGEgcGFuaWMgYW5kIHRoZXJlZm9yZSBwcm9iYWJseSBub3Qgd29ydGggZnV6emluZywgc2luY2Ugc3l6a2FsbGVyIHdvdWxkIGxpa2VseSB0cmVhdCB0aGUgcGFuaWMgYXMgYSBidWcuIEJ1dCB0aGF0IHNob3J0LWNpcmN1aXQgaXMgc3RpbGwgcG90ZW50aWFsbHkgYSBmdW5jdGlvbmFsIGNoYW5nZS4gVGhlIHByb2JsZW0gaXMgdGhhdCBoaXR0aW5nIHRoZSBwYW5pYyBpcyBlc3NlbnRpYWxseSB0aGUgbWFpbiBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIHRoYXQncyBub3Qgd2hhdCB3ZSB0eXBpY2FsbHkgd2FudCBmdXp6aW5nIHRvIGRvLiBIb3dldmVyLCBJIG5lZWQgdG8gc3RpY2sgd2l0aCB0aGUgaW5zdHJ1Y3Rpb25zIHByb3ZpZGVkLiBJIHJlYWQgdGhlIHByb21wdCBhZ2FpbiwgYW5kIGl0IGV4cGxpY2l0bHkgc3RhdGVzIHRoYXQgaWYgY29yZSBrZXJuZWwgbG9naWMgaXMgbW9kaWZpZWQgYW5kIHJlYWNoYWJsZSwgSSBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cblRoaXMgcGF0Y2ggKmRvZXMqIG1vZGlmeSBjb3JlIGtlcm5lbCBsb2dpYyB3aXRoaW4gYG1tL21lbW9yeS1mYWlsdXJlLmNgLiBJdCBhbHRlcnMgdGhlIGJlaGF2aW9yIG9mIHRoZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGVyLiBBbmQgaXQgY2FuIGJlIGV4ZWN1dGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIG9uIGtlcm5lbC1vd25lZCBwYWdlcywgbGlrZSB0aGUgdkRTTy4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiB3aGF0IHNob3VsZCBJIHRlbGwgdGhlIGZ1enplciB0byBmb2N1cyBvbj8gSSB3YXMgdGhpbmtpbmcgYWJvdXQgYGlzX2tlcm5lbF9vd25lZF9wYWdlYCBpbml0aWFsbHkgYnV0IHRoZW4gcmVtZW1iZXJlZCB0aGF0IGl0IGlzIGFuIGlubGluZSBmdW5jdGlvbiwgc28gaXQgbGlrZWx5IHdvbid0IGFwcGVhciBhcyBhIHN5bWJvbCBpbiB0aGUgY292ZXJhZ2UuIEhvd2V2ZXIsIHRoZSBmdW5jdGlvbiB0aGF0ICpjYWxscyogaXQgKGBnZXRfYW55X3BhZ2VgKSwgaXMgbm90IGlubGluZSwgYW5kICppcyogYSByZWxldmFudCBwb2ludCBvZiBpbnRlcmFjdGlvbi4gSXQgc2VlbXMgbGlrZSBhIGdvb2QgdGFyZ2V0LiBUaGUgb3RoZXIgcG90ZW50aWFsIHRhcmdldCBpcyBgcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZmAuXG5cbkkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgcHJvcGVyIGNvbmZpZ3VyYXRpb25zIGFyZSBwcm92aWRlZCwgZ2l2ZW4gdGhhdCBgTUVNT1JZX0ZBSUxVUkVgIGlzIG5lZWRlZC4gSSdtIGdvaW5nIHRvIGxpc3QgaXQgYW55d2F5LCBhbmQgZG91YmxlIGNoZWNrIHRvIGJlIGV4dHJhIGNlcnRhaW4uIGBIV1BPSVNPTl9JTkpFQ1RgIG1pZ2h0IGJlIG5lZWRlZCwgYnV0IGBNQURWX0hXUE9JU09OYCBpcyB0aGUgcHJpbWFyeSB0aGluZywgYW5kIEkgc2hvdWxkIG9ubHkgbGlzdCBgTUVNT1JZX0ZBSUxVUkVgLlxuXG5TbywgdGhlIHBsYW4gaXM6XG5cbiogICAqKldvcnRoRnV6emluZz10cnVlKipcbiogICAqKkZvY3VzU3ltYm9scyoqOlxuICAgICogICBgZ2V0X2FueV9wYWdlYFxuICAgICogICBgcGFuaWNfb25fdW5yZWNvdmVyYWJsZV9tZmBcbiogICAqKkVuYWJsZUNvbmZpZ3MqKjpcbiAgICAqICAgYE1FTU9SWV9GQUlMVVJFYFxuXG5UaGUgcmVhc29uaW5nIGhlcmUgaXMgdGhhdCB0aGUgcGF0Y2ggYWx0ZXJzIHRoZSBtZW1vcnkgZmFpbHVyZSBoYW5kbGluZyBsb2dpYywgc3BlY2lmaWNhbGx5IHRvIHNob3J0LWNpcmN1aXQgcmVjb3ZlcnkgYW5kIG9wdGlvbmFsbHkgdHJpZ2dlciBhIHBhbmljIGZvciBrZXJuZWwtb3duZWQgcGFnZXMuIFRoaXMgZnVuY3Rpb25hbGl0eSBjYW4gYmUgcmVhY2hlZCB2aWEgYG1hZHZpc2UoTUFEVl9IV1BPSVNPTilgIG9uIGtlcm5lbCBwYWdlcywgZXZlbiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgc2VsZWN0ZWQgZm9jdXMgc3ltYm9scyBhcmUgYGdldF9hbnlfcGFnZWAgYW5kIGBwYW5pY19vbl91bnJlY292ZXJhYmxlX21mYCwgYXMgdGhlc2UgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyBpbXBhY3RlZCBieSB0aGUgcGF0Y2guIFRoZSBjb25maWd1cmF0aW9uIGBNRU1PUllfRkFJTFVSRWAgZW5hYmxlcyB0aGUgbmVjZXNzYXJ5IGluZnJhc3RydWN0dXJlLiBgZ2V0X2FueV9wYWdlYCBpcyBub3QgYSBwZXJmb3JtYW5jZSBjcml0aWNhbCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc3NzMsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTg6NTc6MTAuMTAyMTA2MjIzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzQ0NDE4MTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF9hbnlfcGFnZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnktZmFpbHVyZS5jPTEzODM9c3RhdGljIGludCBfX2dldF9od3BvaXNvbl9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNDIwLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MTQyMTpzdGF0aWMgaW50IGdldF9hbnlfcGFnZShzdHJ1Y3QgcGFnZSAqcCwgdW5zaWduZWQgbG9uZyBmbGFncylcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE0MjIte1xcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYz0xNDk1PXN0YXRpYyBpbnQgX19nZXRfdW5wb2lzb25fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMTUzNC0gKiBleHRyYSBjYXJlIGZvciB0aGUgZXJyb3IgcGFnZSdzIHN0YXRlIChhcyBkb25lIGluIF9fZ2V0X2h3cG9pc29uX3BhZ2UoKSksXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxNTM1OiAqIGFuZCBoYXMgc29tZSByZXRyeSBsb2dpYyBpbiBnZXRfYW55X3BhZ2UoKS5cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE1MzYtICpcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MTU1MT1zdGF0aWMgaW50IGdldF9od3BvaXNvbl9wYWdlKHN0cnVjdCBwYWdlICpwLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNTU4LVxcdGVsc2VcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE1NTk6XFx0XFx0cmV0ID0gZ2V0X2FueV9wYWdlKHAsIGZsYWdzKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTE1NjAtXFx0em9uZV9wY3BfZW5hYmxlKHBhZ2Vfem9uZShwKSk7XFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTI4NTA9c3RhdGljIGludCBzb2Z0X29mZmxpbmVfaW5fdXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI5MTAtXFx0ICogSWYgd2Ugc3VjY2VlZCB0byBpc29sYXRlIHRoZSBmb2xpbywgd2UgZ3JhYmJlZCBhbm90aGVyIHJlZmNvdW50IG9uXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyOTExOlxcdCAqIHRoZSBmb2xpbywgc28gd2UgY2FuIHNhZmVseSBkcm9wIHRoZSBvbmUgd2UgZ290IGZyb20gZ2V0X2FueV9wYWdlKCkuXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yOTEyLVxcdCAqIElmIHdlIGZhaWxlZCB0byBpc29sYXRlIHRoZSBmb2xpbywgaXQgbWVhbnMgdGhhdCB3ZSBjYW5ub3QgZ28gZnVydGhlclxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjkxMy1cXHQgKiBhbmQgd2Ugd2lsbCByZXR1cm4gYW4gZXJyb3IsIHNvIGRyb3AgdGhlIHJlZmVyZW5jZSB3ZSBnb3QgZnJvbVxcbm1tL21lbW9yeS1mYWlsdXJlLmM6MjkxNDpcXHQgKiBnZXRfYW55X3BhZ2UoKSBhcyB3ZWxsLlxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjkxNS1cXHQgKi9cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h3cG9pc29uLXBhbmljLnNoLTExLSMgICAgICAgICAgICAgKHNvdXJjZWQgZnJvbSAvcHJvYy9pb21lbSBcXFwiS2VybmVsIHJvZGF0YVxcXCIpLiAgRXhlcmNpc2VzXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHdwb2lzb24tcGFuaWMuc2g6MTI6IyAgICAgICAgICAgICBtZW1vcnlfZmFpbHVyZSgpIC1cXHUwMDNlIGdldF9hbnlfcGFnZSgpIG9uIGEgUGFnZVJlc2VydmVkIHBhZ2UuXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHdwb2lzb24tcGFuaWMuc2gtMTMtI1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h3cG9pc29uLXBhbmljLnNoLTE0LSMgICBzbGFiICAgIC0gYSBzbGFiIHBhZ2UgZm91bmQgdmlhIC9wcm9jL2twYWdlZmxhZ3MgKEtQRl9TTEFCKS5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9od3BvaXNvbi1wYW5pYy5zaDoxNTojICAgICAgICAgICAgIEV4ZXJjaXNlcyBtZW1vcnlfZmFpbHVyZSgpIC1cXHUwMDNlIGdldF9hbnlfcGFnZSgpIG9uIGEgbm9uXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHdwb2lzb24tcGFuaWMuc2gtMTYtIyAgICAgICAgICAgICBQR19yZXNlcnZlZCBrZXJuZWwtb3duZWQgcGFnZS4gIFRoaXMgcGF0aCBpcyB3aGF0IGNhdGNoZXNcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9od3BvaXNvbi1wYW5pYy5zaDoxNzojICAgICAgICAgICAgIHJlZ3Jlc3Npb25zIHdoZXJlIGdldF9hbnlfcGFnZSgpIGNvbGxhcHNlcyBrZXJuZWwtb3duZWRcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9od3BvaXNvbi1wYW5pYy5zaC0xOC0jICAgICAgICAgICAgIHBhZ2VzIGludG8gYSB0cmFuc2llbnQgLUVJTyBpbnN0ZWFkIG9mIC1FTk9UUkVDT1ZFUkFCTEUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE4OjU3OjE1LjQ0NjUzNDE2NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzkxODg2MDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDb25maXJtaW5nIEZ1bmN0aW9uIEV4ZWN1dGlvbiBhbmQgUHJvY2VlZGluZyB0byBEYXRhIFNldHRpbmcqKlxuXG5BbHJpZ2h0LCBhZnRlciByZXZpZXdpbmcgdGhlIGNvbnRleHQsIEknbSBjb25maWRlbnQgdGhhdCBgZ2V0X2FueV9wYWdlYCBpcyB0aGUgZnVuY3Rpb24gdG8gdXNlIGhlcmUuIEl0IGFsaWducyB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBzdGFnZSwgc3BlY2lmaWNhbGx5IHRoZSBuZWVkIHRvIHJldHJpZXZlIHRoZSBuZWNlc3NhcnkgZGF0YS4gSSdtIHNhdGlzZmllZCB3aXRoIHRoZSBmdW5jdGlvbiBzZWxlY3Rpb24uXG5cbk5vdywgd2l0aCB0aGF0IGNvbmZpcm1lZCwgSSB3aWxsIHByb2NlZWQgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBUaGlzIGZ1bmN0aW9uIGxpa2VseSBoYW5kbGVzIHRoZSBwb3B1bGF0aW9uIG9yIG1hbmlwdWxhdGlvbiBvZiBteSBkYXRhIHN0cnVjdHVyZSB1c2luZyB0aGUgcmVzdWx0IGZldGNoZWQgYnkgYGdldF9hbnlfcGFnZWAuIEl0IGlzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpbiB0aGUgcHJvY2VzcywgZW5hYmxpbmcgZG93bnN0cmVhbSBvcGVyYXRpb25zIG9uIHRoZSBhY3F1aXJlZCBkYXRhLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDkyMiwiT3V0cHV0VG9rZW5zIjoxMjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxODo1NzoxOS4yMzg0MjU4OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDk0ODI1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZXRfYW55X3BhZ2VcIixcbiAgICBcInBhbmljX29uX3VucmVjb3ZlcmFibGVfbWZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGZhaWx1cmUgaGFuZGxlciBpbiBjb3JlIE1NIHRvIHNob3J0LWNpcmN1aXQgcmVjb3ZlcnkgZm9yIGtlcm5lbC1vd25lZCBwYWdlcyBhbmQgb3B0aW9uYWxseSBwYW5pYy4gVGhpcyBlcnJvci1oYW5kbGluZyBwYXRoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIG1hZHZpc2UoTUFEVl9IV1BPSVNPTikgb24ga2VybmVsLW93bmVkIHBhZ2VzIG1hcHBlZCBpbiB1c2VyIHNwYWNlIChsaWtlIHRoZSB2RFNPKSBvciB2aWEgc3lzZnMgZXJyb3IgaW5qZWN0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2V0X2FueV9wYWdlXCIsXG4gICAgXCJwYW5pY19vbl91bnJlY292ZXJhYmxlX21mXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBmYWlsdXJlIGhhbmRsZXIgaW4gY29yZSBNTSB0byBzaG9ydC1jaXJjdWl0IHJlY292ZXJ5IGZvciBrZXJuZWwtb3duZWQgcGFnZXMgYW5kIG9wdGlvbmFsbHkgcGFuaWMuIFRoaXMgZXJyb3ItaGFuZGxpbmcgcGF0aCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBtYWR2aXNlKE1BRFZfSFdQT0lTT04pIG9uIGtlcm5lbC1vd25lZCBwYWdlcyBtYXBwZWQgaW4gdXNlciBzcGFjZSAobGlrZSB0aGUgdkRTTykgb3IgdmlhIHN5c2ZzIGVycm9yIGluamVjdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkmnvf[1] Phase: Succeeded StartedAt: 2026-06-30 18:57:31 +0000 UTC FinishedAt: 2026-06-30 18:57:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmnvf[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-30 18:57:31 +0000 UTC FinishedAt: 2026-06-30 18:57:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmnvf[2] Phase: Succeeded StartedAt: 2026-06-30 18:57:31 +0000 UTC FinishedAt: 2026-06-30 23:04:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmnvf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"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":["get_any_page","panic_on_unrecoverable_mf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"efcf50b4-2dc1-4040-b480-ee96f3dcb94a","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-30 18:57:31 +0000 UTC FinishedAt: 2026-06-30 23:04:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"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":["get_any_page","panic_on_unrecoverable_mf"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"efcf50b4-2dc1-4040-b480-ee96f3dcb94a","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-workflowkmnvf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"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":["get_any_page","panic_on_unrecoverable_mf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"efcf50b4-2dc1-4040-b480-ee96f3dcb94a","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-30 18:57:31 +0000 UTC FinishedAt: 2026-06-30 18:58:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmnvf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"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":["get_any_page","panic_on_unrecoverable_mf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"efcf50b4-2dc1-4040-b480-ee96f3dcb94a","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-30 18:57:31 +0000 UTC FinishedAt: 2026-06-30 18:57:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"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-workflowkmnvf/series-workflowkmnvf-convert-artifact-67353747/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkmnvf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"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":["get_any_page","panic_on_unrecoverable_mf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"efcf50b4-2dc1-4040-b480-ee96f3dcb94a","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-30 18:58:06 +0000 UTC FinishedAt: 2026-06-30 19:25:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmnvf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"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":["get_any_page","panic_on_unrecoverable_mf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"efcf50b4-2dc1-4040-b480-ee96f3dcb94a","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-30 18:58:06 +0000 UTC FinishedAt: 2026-06-30 19:25:30 +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:*cc49a5df-8aca-484a-ab95-a8b94c100209,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-workflowkmnvf/series-workflowkmnvf-convert-artifact-67353747/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": "140f117b-8fc7-469e-a54a-f0605dcfc142", "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-workflowkmnvf/series-workflowkmnvf-build-action-3512195521/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkmnvf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"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":["get_any_page","panic_on_unrecoverable_mf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"efcf50b4-2dc1-4040-b480-ee96f3dcb94a","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-30 18:58:06 +0000 UTC FinishedAt: 2026-06-30 19:25:19 +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:*cc49a5df-8aca-484a-ab95-a8b94c100209,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-workflowkmnvf/series-workflowkmnvf-convert-artifact-67353747/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": "140f117b-8fc7-469e-a54a-f0605dcfc142", "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-workflowkmnvf/series-workflowkmnvf-build-action-3512195521/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkmnvf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"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":["get_any_page","panic_on_unrecoverable_mf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"efcf50b4-2dc1-4040-b480-ee96f3dcb94a","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-30 19:25:30 +0000 UTC FinishedAt: 2026-06-30 19:25:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmnvf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"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":["get_any_page","panic_on_unrecoverable_mf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"efcf50b4-2dc1-4040-b480-ee96f3dcb94a","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-30 19:25:30 +0000 UTC FinishedAt: 2026-06-30 19:25:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmnvf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"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":["get_any_page","panic_on_unrecoverable_mf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"efcf50b4-2dc1-4040-b480-ee96f3dcb94a","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-30 19:25:30 +0000 UTC FinishedAt: 2026-06-30 19:25:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmnvf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"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":["get_any_page","panic_on_unrecoverable_mf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"efcf50b4-2dc1-4040-b480-ee96f3dcb94a","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-30 19:25:30 +0000 UTC FinishedAt: 2026-06-30 19:25:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"efcf50b4-2dc1-4040-b480-ee96f3dcb94a","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-workflowkmnvf/series-workflowkmnvf-convert-artifact-3081608330/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkmnvf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"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":["get_any_page","panic_on_unrecoverable_mf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"efcf50b4-2dc1-4040-b480-ee96f3dcb94a","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-30 19:25:50 +0000 UTC FinishedAt: 2026-06-30 19:27:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmnvf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"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":["get_any_page","panic_on_unrecoverable_mf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"efcf50b4-2dc1-4040-b480-ee96f3dcb94a","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-30 19:25:50 +0000 UTC FinishedAt: 2026-06-30 19:27:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*140f117b-8fc7-469e-a54a-f0605dcfc142,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-workflowkmnvf/series-workflowkmnvf-build-action-3512195521/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-workflowkmnvf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"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":["get_any_page","panic_on_unrecoverable_mf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"efcf50b4-2dc1-4040-b480-ee96f3dcb94a","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-30 19:27:51 +0000 UTC FinishedAt: 2026-06-30 19:27:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmnvf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"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":["get_any_page","panic_on_unrecoverable_mf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"efcf50b4-2dc1-4040-b480-ee96f3dcb94a","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-30 19:27:51 +0000 UTC FinishedAt: 2026-06-30 19:27:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmnvf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"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":["get_any_page","panic_on_unrecoverable_mf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"efcf50b4-2dc1-4040-b480-ee96f3dcb94a","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-30 19:27:51 +0000 UTC FinishedAt: 2026-06-30 19:56:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmnvf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"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":["get_any_page","panic_on_unrecoverable_mf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"efcf50b4-2dc1-4040-b480-ee96f3dcb94a","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-30 19:27:51 +0000 UTC FinishedAt: 2026-06-30 19:56:23 +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:*cc49a5df-8aca-484a-ab95-a8b94c100209,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-workflowkmnvf/series-workflowkmnvf-convert-artifact-3081608330/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": "4fe7a80a-7566-43c6-8cf1-9fab980d8123", "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-workflowkmnvf/series-workflowkmnvf-build-action-3270302382/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkmnvf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"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":["get_any_page","panic_on_unrecoverable_mf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"efcf50b4-2dc1-4040-b480-ee96f3dcb94a","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-30 19:27:51 +0000 UTC FinishedAt: 2026-06-30 19:56:13 +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:*cc49a5df-8aca-484a-ab95-a8b94c100209,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-workflowkmnvf/series-workflowkmnvf-convert-artifact-3081608330/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": "4fe7a80a-7566-43c6-8cf1-9fab980d8123", "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-workflowkmnvf/series-workflowkmnvf-build-action-3270302382/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkmnvf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"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":["get_any_page","panic_on_unrecoverable_mf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"efcf50b4-2dc1-4040-b480-ee96f3dcb94a","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-30 19:56:23 +0000 UTC FinishedAt: 2026-06-30 19:56:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmnvf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"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":["get_any_page","panic_on_unrecoverable_mf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"efcf50b4-2dc1-4040-b480-ee96f3dcb94a","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-30 19:56:23 +0000 UTC FinishedAt: 2026-06-30 19:56:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmnvf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"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":["get_any_page","panic_on_unrecoverable_mf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"efcf50b4-2dc1-4040-b480-ee96f3dcb94a","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-30 19:56:23 +0000 UTC FinishedAt: 2026-06-30 19:58:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmnvf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"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":["get_any_page","panic_on_unrecoverable_mf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"efcf50b4-2dc1-4040-b480-ee96f3dcb94a","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-30 19:56:23 +0000 UTC FinishedAt: 2026-06-30 19:58:16 +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:*4fe7a80a-7566-43c6-8cf1-9fab980d8123,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-workflowkmnvf/series-workflowkmnvf-build-action-3270302382/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-workflowkmnvf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"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":["get_any_page","panic_on_unrecoverable_mf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"efcf50b4-2dc1-4040-b480-ee96f3dcb94a","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-30 19:58:26 +0000 UTC FinishedAt: 2026-06-30 23:04:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmnvf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"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":["get_any_page","panic_on_unrecoverable_mf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"efcf50b4-2dc1-4040-b480-ee96f3dcb94a","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-30 19:58:26 +0000 UTC FinishedAt: 2026-06-30 23:04:37 +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":["get_any_page","panic_on_unrecoverable_mf"],"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:*140f117b-8fc7-469e-a54a-f0605dcfc142,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4fe7a80a-7566-43c6-8cf1-9fab980d8123,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-workflowkmnvf/series-workflowkmnvf-build-action-3512195521/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-workflowkmnvf/series-workflowkmnvf-build-action-3270302382/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowkmnvf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"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":["get_any_page","panic_on_unrecoverable_mf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"efcf50b4-2dc1-4040-b480-ee96f3dcb94a","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-30 19:58:26 +0000 UTC FinishedAt: 2026-06-30 20:00:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmnvf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"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":["get_any_page","panic_on_unrecoverable_mf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"efcf50b4-2dc1-4040-b480-ee96f3dcb94a","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-30 19:58:26 +0000 UTC FinishedAt: 2026-06-30 19:58:57 +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":["get_any_page","panic_on_unrecoverable_mf"],"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-workflowkmnvf/series-workflowkmnvf-convert-artifact-4145984287/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkmnvf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"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":["get_any_page","panic_on_unrecoverable_mf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"efcf50b4-2dc1-4040-b480-ee96f3dcb94a","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-30 19:58:26 +0000 UTC FinishedAt: 2026-06-30 19:58:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmnvf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"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":["get_any_page","panic_on_unrecoverable_mf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"efcf50b4-2dc1-4040-b480-ee96f3dcb94a","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-30 19:58:26 +0000 UTC FinishedAt: 2026-06-30 19:58:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmnvf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"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":["get_any_page","panic_on_unrecoverable_mf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"efcf50b4-2dc1-4040-b480-ee96f3dcb94a","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-30 19:58:26 +0000 UTC FinishedAt: 2026-06-30 19:58:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmnvf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"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":["get_any_page","panic_on_unrecoverable_mf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"efcf50b4-2dc1-4040-b480-ee96f3dcb94a","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-30 20:00:59 +0000 UTC FinishedAt: 2026-06-30 23:04:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkmnvf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"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":["get_any_page","panic_on_unrecoverable_mf"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1b6b5319b6000b81da8fca31c6ac65e497f73986","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_FAILURE"],"series_id":"efcf50b4-2dc1-4040-b480-ee96f3dcb94a","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-30 20:00:59 +0000 UTC FinishedAt: 2026-06-30 23:04:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*140f117b-8fc7-469e-a54a-f0605dcfc142,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4fe7a80a-7566-43c6-8cf1-9fab980d8123,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-workflowkmnvf/series-workflowkmnvf-build-action-3512195521/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-workflowkmnvf/series-workflowkmnvf-build-action-3270302382/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-workflowkmnvf/series-workflowkmnvf-convert-artifact-4145984287/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,}