Name: series-workflowcnmvs Phase: Succeeded StartedAt: 2026-09-09 12:41:07 +0000 UTC FinishedAt: 2026-09-09 16:55:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmvs[0] Phase: Succeeded StartedAt: 2026-09-09 12:41:07 +0000 UTC FinishedAt: 2026-09-09 13:04:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmvs[0].run-triage Phase: Succeeded StartedAt: 2026-09-09 12:41:07 +0000 UTC FinishedAt: 2026-09-09 13:04:53 +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": "8eae39cd0adf28ba81a46090b10484cf402c0ac8", "config_name": "upstream-apparmor-kasan.config", "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": "8eae39cd0adf28ba81a46090b10484cf402c0ac8", "config_name": "upstream-apparmor-kasan.config", "series_id": "3207b9bb-29fd-49e0-921b-d6ec1b7a1784" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__vmf_anon_prepare" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X192bWZfYW5vbl9wcmVwYXJlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGhlbHBlciBmdW5jdGlvbiBgdm1hX2lzX2ZhdWx0ZWQoKWAgdG8gYW5ub3RhdGUgYSBsb2NrbGVzcyByZWFkIG9mIGB2bWEtXHUwMDNlYW5vbl92bWFgIHVzaW5nIGBkYXRhX3JhY2UoKWAgaW4gYF9fdm1mX2Fub25fcHJlcGFyZSgpYC4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RhY2svaGVhcCBidWZmZXJzLCBzdHJ1Y3R1cmUgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMuIFRoZSBgdm1fYXJlYV9zdHJ1Y3RgIGlzIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgYnkgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBBcyB0aGVyZSBpcyBubyByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgbGVha2luZyB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlciBzcGFjZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbiBtbS9tZW1vcnkuYyBieSBpbnRyb2R1Y2luZyBhIG5ldyBoZWxwZXIgdm1hX2lzX2ZhdWx0ZWQoKSB1c2luZyBkYXRhX3JhY2UoKSBhbmQgdXBkYXRpbmcgX192bWZfYW5vbl9wcmVwYXJlKCkuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgZmF1bHQgcHJlcGFyYXRpb24gcGF0aHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gdmVyaWZ5IGxvY2tsZXNzIGNvbmN1cnJlbmN5IGludmFyaWFudHMgYW5kIG1lbW9yeSBvcmRlcmluZyBiZWhhdmlvci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMzowNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGIzZmJkYWI3YjdkYTkwNjAzOWY2OTdhNDdjNjJjNTk0NmNlNTFhOTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDEzOjA0OjAxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IDZiODI4MGNmYzFkYmUuLmQ4NWQ2NzkyNzQwMGIgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmNcbkBAIC0zODAwLDYgJiM0MzszODAwLDI1IEBAIHN0YXRpYyBpbmxpbmUgdm1fZmF1bHRfdCB2bWZfY2FuX2NhbGxfZmF1bHQoY29uc3Qgc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRyZXR1cm4gVk1fRkFVTFRfUkVUUlk7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogdm1hX2lzX2ZhdWx0ZWQgLSBjaGVjayBpZiBhIHZtYSBoYXMgYmVlbiBmYXVsdGVkXG4mIzQzOyAqIEB2bWE6IHRoZSB2bWEgdG8gY2hlY2tcbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBpcyBhIGxvY2tsZXNzIGFjY2VzcyB0aGF0IG1heSByYWNlIHdpdGggX19hbm9uX3ZtYV9wcmVwYXJlKCkuXG4mIzQzOyAqIFRoZSByYWNlIGlzIHNhZmUgYmVjYXVzZTpcbiYjNDM7ICogLSBUaGUgZmF1bHQgaGFuZGxlciBlbnN1cmVzIHRoYXQgdGhlIG1hcHBpbmcgb2YgbWVtb3J5IGlzIG9yZGVyZWQuXG4mIzQzOyAqIC0gSWYgd2UgcmVhZCBOVUxMLCB0aGUgY2FsbGVyIHdpbGwgcmUtY2hlY2tcbiYjNDM7ICogLSBUaGUgcGFnZV90YWJsZV9sb2NrIHByb3ZpZGVzIEFDUVVJUkUgc2VtYW50aWNzIGZvciBtZW1vcnkgb3JkZXJpbmdcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIHZtYS1cdTAwM2Vhbm9uX3ZtYSBpcyBub24tTlVMTCwgZmFsc2Ugb3RoZXJ3aXNlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgdm1hX2lzX2ZhdWx0ZWQoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4mIzQzO3tcbiYjNDM7XHQvKiBMb2NrbGVzcyBjaGVjayAtIHNhZmUgYmVjYXVzZSB3ZSByZS12YWxpZGF0ZSB1bmRlciBwYWdlX3RhYmxlX2xvY2sgKi9cbiYjNDM7XHRyZXR1cm4gZGF0YV9yYWNlKHZtYS1cdTAwM2Vhbm9uX3ZtYSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1xuIC8qKlxuICAqIF9fdm1mX2Fub25fcHJlcGFyZSAtIFByZXBhcmUgdG8gaGFuZGxlIGFuIGFub255bW91cyBmYXVsdC5cbiAgKiBAdm1mOiBUaGUgdm1fZmF1bHQgZGVzY3JpcHRvciBwYXNzZWQgZnJvbSB0aGUgZmF1bHQgaGFuZGxlci5cbkBAIC0zODE5LDggJiM0MzszODM4LDcgQEAgdm1fZmF1bHRfdCBfX3ZtZl9hbm9uX3ByZXBhcmUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4ge1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYtXHUwMDNldm1hO1xuIFx0dm1fZmF1bHRfdCByZXQgPSAwO1xuLVxuLVx0aWYgKGxpa2VseSh2bWEtXHUwMDNlYW5vbl92bWEpKVxuJiM0MztcdGlmIChsaWtlbHkodm1hX2lzX2ZhdWx0ZWQodm1hKSkpXG4gXHRcdHJldHVybiAwO1xuIFx0aWYgKHZtZi1cdTAwM2VmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19WTUFfTE9DSykge1xuIFx0XHRpZiAoIW1tYXBfcmVhZF90cnlsb2NrKHZtYS1cdTAwM2V2bV9tbSkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTM6MDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3ZtZl9hbm9uX3ByZXBhcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGluIG1tL21lbW9yeS5jIGJ5IGludHJvZHVjaW5nIGEgbmV3IGhlbHBlciB2bWFfaXNfZmF1bHRlZCgpIHVzaW5nIGRhdGFfcmFjZSgpIGFuZCB1cGRhdGluZyBfX3ZtZl9hbm9uX3ByZXBhcmUoKS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBmYXVsdCBwcmVwYXJhdGlvbiBwYXRocyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byB2ZXJpZnkgbG9ja2xlc3MgY29uY3VycmVuY3kgaW52YXJpYW50cyBhbmQgbWVtb3J5IG9yZGVyaW5nIGJlaGF2aW9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjNmYmRhYjdiN2RhOTA2MDM5ZjY5N2E0N2M2MmM1OTQ2Y2U1MWE5NApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMTM6MDQ6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IDZiODI4MGNmYzFkYmUuLmQ4NWQ2NzkyNzQwMGIgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jCkBAIC0zODAwLDYgJiM0MzszODAwLDI1IEBAIHN0YXRpYyBpbmxpbmUgdm1fZmF1bHRfdCB2bWZfY2FuX2NhbGxfZmF1bHQoY29uc3Qgc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiAJcmV0dXJuIFZNX0ZBVUxUX1JFVFJZOwogfQogCiYjNDM7LyoqCiYjNDM7ICogdm1hX2lzX2ZhdWx0ZWQgLSBjaGVjayBpZiBhIHZtYSBoYXMgYmVlbiBmYXVsdGVkCiYjNDM7ICogQHZtYTogdGhlIHZtYSB0byBjaGVjawomIzQzOyAqCiYjNDM7ICogVGhpcyBpcyBhIGxvY2tsZXNzIGFjY2VzcyB0aGF0IG1heSByYWNlIHdpdGggX19hbm9uX3ZtYV9wcmVwYXJlKCkuCiYjNDM7ICogVGhlIHJhY2UgaXMgc2FmZSBiZWNhdXNlOgomIzQzOyAqIC0gVGhlIGZhdWx0IGhhbmRsZXIgZW5zdXJlcyB0aGF0IHRoZSBtYXBwaW5nIG9mIG1lbW9yeSBpcyBvcmRlcmVkLgomIzQzOyAqIC0gSWYgd2UgcmVhZCBOVUxMLCB0aGUgY2FsbGVyIHdpbGwgcmUtY2hlY2sKJiM0MzsgKiAtIFRoZSBwYWdlX3RhYmxlX2xvY2sgcHJvdmlkZXMgQUNRVUlSRSBzZW1hbnRpY3MgZm9yIG1lbW9yeSBvcmRlcmluZwomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIHZtYS0mZ3Q7YW5vbl92bWEgaXMgbm9uLU5VTEwsIGZhbHNlIG90aGVyd2lzZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfZmF1bHRlZChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKJiM0Mzt7CiYjNDM7CS8qIExvY2tsZXNzIGNoZWNrIC0gc2FmZSBiZWNhdXNlIHdlIHJlLXZhbGlkYXRlIHVuZGVyIHBhZ2VfdGFibGVfbG9jayAqLwomIzQzOwlyZXR1cm4gZGF0YV9yYWNlKHZtYS0mZ3Q7YW5vbl92bWEpOwomIzQzO30KJiM0MzsKJiM0MzsKIC8qKgogICogX192bWZfYW5vbl9wcmVwYXJlIC0gUHJlcGFyZSB0byBoYW5kbGUgYW4gYW5vbnltb3VzIGZhdWx0LgogICogQHZtZjogVGhlIHZtX2ZhdWx0IGRlc2NyaXB0b3IgcGFzc2VkIGZyb20gdGhlIGZhdWx0IGhhbmRsZXIuCkBAIC0zODE5LDggJiM0MzszODM4LDcgQEAgdm1fZmF1bHRfdCBfX3ZtZl9hbm9uX3ByZXBhcmUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiB7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYtJmd0O3ZtYTsKIAl2bV9mYXVsdF90IHJldCA9IDA7Ci0KLQlpZiAobGlrZWx5KHZtYS0mZ3Q7YW5vbl92bWEpKQomIzQzOwlpZiAobGlrZWx5KHZtYV9pc19mYXVsdGVkKHZtYSkpKQogCQlyZXR1cm4gMDsKIAlpZiAodm1mLSZndDtmbGFncyAmYW1wOyBGQVVMVF9GTEFHX1ZNQV9MT0NLKSB7CiAJCWlmICghbW1hcF9yZWFkX3RyeWxvY2sodm1hLSZndDt2bV9tbSkpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxOTQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBgbW0vbWVtb3J5LmNgIExpbmUgMzgwMCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEkgbmVlZCB0byBtZXRob2RpY2FsbHkgZGlzc2VjdCB0aGlzIGFuZCBlbnN1cmUgSSBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuIE15IGZpcnN0IHN0ZXAgaXMgdG8gY2FyZWZ1bGx5IHJldmlldyBib3RoIHRoZSBwYXRjaCBpdHNlbGYgYW5kIGFueSBhY2NvbXBhbnlpbmcgaW5zdHJ1Y3Rpb25zIG9yIGRvY3VtZW50YXRpb24uIFRoZSB0YXJnZXQgZmlsZSBpcyBgbW0vbWVtb3J5LmNgLCB3aGljaCBhbHdheXMgd2FycmFudHMgY2xvc2UgYXR0ZW50aW9uIGdpdmVuIGl0cyBjcml0aWNhbCByb2xlLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZ2V0IG15IGJlYXJpbmdzIHVzaW5nIGByZWFkLWZpbGVgIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IHNlY3Rpb24gb2YgYG1tL21lbW9yeS5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDM4MDAuIFRoaXMgc2hvdWxkIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBjb250ZXh0IHRvIGFzc2VzcyB0aGUgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbW9yeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzc5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNzkwOlx0ICogdm1fb3BzIHRoYXQgaGF2ZSBhIC1cdTAwM2VtYXBfcGFnZXMgaGF2ZSBiZWVuIGF1ZGl0ZWQgYW5kIGRvbiYjMzk7dCBuZWVkXG4zNzkxOlx0ICogdGhlIG1tYXBfbG9jayB0byBiZSBoZWxkLlxuMzc5MjpcdCAqL1xuMzc5MzpcdHN0YXRpYyBpbmxpbmUgdm1fZmF1bHRfdCB2bWZfY2FuX2NhbGxfZmF1bHQoY29uc3Qgc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4zNzk0Olx0e1xuMzc5NTpcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYtXHUwMDNldm1hO1xuMzc5NjpcdFxuMzc5NzpcdFx0aWYgKHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlbWFwX3BhZ2VzIHx8ICEodm1mLVx1MDAzZWZsYWdzIFx1MDAyNiBGQVVMVF9GTEFHX1ZNQV9MT0NLKSlcbjM3OTg6XHRcdFx0cmV0dXJuIDA7XG4zNzk5Olx0XHR2bWFfZW5kX3JlYWQodm1hKTtcbjM4MDA6XHRcdHJldHVybiBWTV9GQVVMVF9SRVRSWTtcbjM4MDE6XHR9XG4zODAyOlx0XG4zODAzOlx0LyoqXG4zODA0Olx0ICogdm1hX2lzX2ZhdWx0ZWQgLSBjaGVjayBpZiBhIHZtYSBoYXMgYmVlbiBmYXVsdGVkXG4zODA1Olx0ICogQHZtYTogdGhlIHZtYSB0byBjaGVja1xuMzgwNjpcdCAqXG4zODA3Olx0ICogVGhpcyBpcyBhIGxvY2tsZXNzIGFjY2VzcyB0aGF0IG1heSByYWNlIHdpdGggX19hbm9uX3ZtYV9wcmVwYXJlKCkuXG4zODA4Olx0ICogVGhlIHJhY2UgaXMgc2FmZSBiZWNhdXNlOlxuMzgwOTpcdCAqIC0gVGhlIGZhdWx0IGhhbmRsZXIgZW5zdXJlcyB0aGF0IHRoZSBtYXBwaW5nIG9mIG1lbW9yeSBpcyBvcmRlcmVkLlxuMzgxMDpcdCAqIC0gSWYgd2UgcmVhZCBOVUxMLCB0aGUgY2FsbGVyIHdpbGwgcmUtY2hlY2tcbjM4MTE6XHQgKiAtIFRoZSBwYWdlX3RhYmxlX2xvY2sgcHJvdmlkZXMgQUNRVUlSRSBzZW1hbnRpY3MgZm9yIG1lbW9yeSBvcmRlcmluZ1xuMzgxMjpcdCAqXG4zODEzOlx0ICogUmV0dXJuOiB0cnVlIGlmIHZtYS1cdTAwM2Vhbm9uX3ZtYSBpcyBub24tTlVMTCwgZmFsc2Ugb3RoZXJ3aXNlXG4zODE0Olx0ICovXG4zODE1Olx0c3RhdGljIGlubGluZSBib29sIHZtYV9pc19mYXVsdGVkKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuMzgxNjpcdHtcbjM4MTc6XHRcdC8qIExvY2tsZXNzIGNoZWNrIC0gc2FmZSBiZWNhdXNlIHdlIHJlLXZhbGlkYXRlIHVuZGVyIHBhZ2VfdGFibGVfbG9jayAqL1xuMzgxODpcdFx0cmV0dXJuIGRhdGFfcmFjZSh2bWEtXHUwMDNlYW5vbl92bWEpO1xuMzgxOTpcdH1cbjM4MjA6XHRcbjM4MjE6XHRcbjM4MjI6XHQvKipcbjM4MjM6XHQgKiBfX3ZtZl9hbm9uX3ByZXBhcmUgLSBQcmVwYXJlIHRvIGhhbmRsZSBhbiBhbm9ueW1vdXMgZmF1bHQuXG4zODI0Olx0ICogQHZtZjogVGhlIHZtX2ZhdWx0IGRlc2NyaXB0b3IgcGFzc2VkIGZyb20gdGhlIGZhdWx0IGhhbmRsZXIuXG4zODI1Olx0ICpcbjM4MjY6XHQgKiBXaGVuIHByZXBhcmluZyB0byBpbnNlcnQgYW4gYW5vbnltb3VzIHBhZ2UgaW50byBhIFZNQSBmcm9tIGFcbjM4Mjc6XHQgKiBmYXVsdCBoYW5kbGVyLCBjYWxsIHRoaXMgZnVuY3Rpb24gcmF0aGVyIHRoYW4gYW5vbl92bWFfcHJlcGFyZSgpLlxuMzgyODpcdCAqIElmIHRoaXMgdm1hIGRvZXMgbm90IGFscmVhZHkgaGF2ZSBhbiBhc3NvY2lhdGVkIGFub25fdm1hIGFuZCB3ZSBhcmVcbjM4Mjk6XHQgKiBvbmx5IHByb3RlY3RlZCBieSB0aGUgcGVyLVZNQSBsb2NrLCB0aGUgY2FsbGVyIG11c3QgcmV0cnkgd2l0aCB0aGVcbjM4MzA6XHQgKiBtbWFwX2xvY2sgaGVsZC4gIF9fYW5vbl92bWFfcHJlcGFyZSgpIHdpbGwgbG9vayBhdCBhZGphY2VudCBWTUFzIHRvXG4zODMxOlx0ICogZGV0ZXJtaW5lIGlmIHRoaXMgVk1BIGNhbiBzaGFyZSBpdHMgYW5vbl92bWEsIGFuZCB0aGF0JiMzOTtzIG5vdCBzYWZlIHRvXG4zODMyOlx0ICogZG8gd2l0aCBvbmx5IHRoZSBwZXItVk1BIGxvY2sgaGVsZCBmb3IgdGhpcyBWTUEuXG4zODMzOlx0ICpcbjM4MzQ6XHQgKiBSZXR1cm46IDAgaWYgZmF1bHQgaGFuZGxpbmcgY2FuIHByb2NlZWQuICBBbnkgb3RoZXIgdmFsdWUgc2hvdWxkIGJlXG4zODM1Olx0ICogcmV0dXJuZWQgdG8gdGhlIGNhbGxlci5cbjM4MzY6XHQgKi9cbjM4Mzc6XHR2bV9mYXVsdF90IF9fdm1mX2Fub25fcHJlcGFyZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbjM4Mzg6XHR7XG4zODM5Olx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi1cdTAwM2V2bWE7XG4zODQwOlx0XHR2bV9mYXVsdF90IHJldCA9IDA7XG4zODQxOlx0XHRpZiAobGlrZWx5KHZtYV9pc19mYXVsdGVkKHZtYSkpKVxuMzg0MjpcdFx0XHRyZXR1cm4gMDtcbjM4NDM6XHRcdGlmICh2bWYtXHUwMDNlZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfVk1BX0xPQ0spIHtcbjM4NDQ6XHRcdFx0aWYgKCFtbWFwX3JlYWRfdHJ5bG9jayh2bWEtXHUwMDNldm1fbW0pKVxuMzg0NTpcdFx0XHRcdHJldHVybiBWTV9GQVVMVF9SRVRSWTtcbjM4NDY6XHRcdH1cbjM4NDc6XHRcdGlmIChfX2Fub25fdm1hX3ByZXBhcmUodm1hKSlcbjM4NDg6XHRcdFx0cmV0ID0gVk1fRkFVTFRfT09NO1xuMzg0OTpcdFx0aWYgKHZtZi1cdTAwM2VmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19WTUFfTE9DSylcbjM4NTA6XHRcdFx0bW1hcF9yZWFkX3VubG9jayh2bWEtXHUwMDNldm1fbW0pO1xuMzg1MTpcdFx0cmV0dXJuIHJldDtcbjM4NTI6XHR9XG4zODUzOlx0XG4zODU0Olx0LypcbjM4NTU6XHQgKiBIYW5kbGUgdGhlIGNhc2Ugb2YgYSBwYWdlIHdoaWNoIHdlIGFjdHVhbGx5IG5lZWQgdG8gY29weSB0byBhIG5ldyBwYWdlLFxuMzg1NjpcdCAqIGVpdGhlciBkdWUgdG8gQ09XIG9yIHVuc2hhcmluZy5cbjM4NTc6XHQgKlxuMzg1ODpcdCAqIENhbGxlZCB3aXRoIGVpdGhlciB0aGUgVk1BIGxvY2sgb3IgdGhlIG1tYXBfbG9jayBoZWxkIChzZWUgRkFVTFRfRkxBR19WTUFfTE9DSylcbjM4NTk6XHQgKiBhbmQgdGhlIG9sZCBwYWdlIHJlZmVyZW5jZWQsIGJ1dCB3aXRob3V0IHRoZSBwdGwgaGVsZC5cbjM4NjA6XHQgKlxuMzg2MTpcdCAqIEhpZ2ggbGV2ZWwgbG9naWMgZmxvdzpcbjM4NjI6XHQgKlxuMzg2MzpcdCAqIC0gQWxsb2NhdGUgYSBwYWdlLCBjb3B5IHRoZSBjb250ZW50IG9mIHRoZSBvbGQgcGFnZSB0byB0aGUgbmV3IG9uZS5cbjM4NjQ6XHQgKiAtIEhhbmRsZSBib29rIGtlZXBpbmcgYW5kIGFjY291bnRpbmcgLSBjZ3JvdXBzLCBtbXUtbm90aWZpZXJzLCBldGMuXG4zODY1Olx0ICogLSBUYWtlIHRoZSBQVEwuIElmIHRoZSBwdGUgY2hhbmdlZCwgYmFpbCBvdXQgYW5kIHJlbGVhc2UgdGhlIGFsbG9jYXRlZCBwYWdlXG4zODY2Olx0ICogLSBJZiB0aGUgcHRlIGlzIHN0aWxsIHRoZSB3YXkgd2UgcmVtZW1iZXIgaXQsIHVwZGF0ZSB0aGUgcGFnZSB0YWJsZSBhbmQgYWxsXG4zODY3Olx0ICogICByZWxldmFudCByZWZlcmVuY2VzLiBUaGlzIGluY2x1ZGVzIGRyb3BwaW5nIHRoZSByZWZlcmVuY2UgdGhlIHBhZ2UtdGFibGVcbjM4Njg6XHQgKiAgIGhlbGQgdG8gdGhlIG9sZCBwYWdlLCBhcyB3ZWxsIGFzIHVwZGF0aW5nIHRoZSBybWFwLlxuMzg2OTpcdCAqIC0gSW4gYW55IGNhc2UsIHVubG9jayB0aGUgUFRMIGFuZCBkcm9wIHRoZSByZWZlcmVuY2Ugd2UgdG9vayB0byB0aGUgb2xkIHBhZ2UuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg0MAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDYwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFByb3Bvc2VkIFBhdGNoOiBBIE1lbW9yeSBNYW5hZ2VtZW50IFBlcnNwZWN0aXZlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBpcyBpbiBgbW0vbWVtb3J5LmNgLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBteSBhdHRlbnRpb24g4oCTIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgaXMgYWx3YXlzIGEgY3JpdGljYWwgYXJlYS4gSXQgaW50cm9kdWNlcyBgdm1hX2lzX2ZhdWx0ZWQodm1hKWAsIHdoaWNoIHdyYXBzIGEgYGRhdGFfcmFjZWAgY2hlY2sgb24gYHZtYS0mZ3Q7YW5vbl92bWFgLiBUaGF0JiMzOTtzIHRvIHN1cHByZXNzIEtDU0FOIHJlcG9ydHMsIG9yIGRvY3VtZW50IHRoZSBkYXRhIHJhY2Ugb24gdGhlIGxvY2tsZXNzIHJlYWQgb2YgYHZtYS0mZ3Q7YW5vbl92bWFgLCBhbmQgcmVwbGFjZXMgYW4gYGlmIChsaWtlbHkodm1hLSZndDthbm9uX3ZtYSkpYCBjaGVjay4KCkZpcnN0LCAqaXMqIHRoaXMgcmVhbGx5IGNvcmUgbW0/IFllcywgYG1tL21lbW9yeS5jYCwgY29uZmlybWVkLiBOb3csIGxldCBtZSBjaGVjayB0aGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBndWlkZWxpbmVzLiBSaWdodCwgdGhlIGdvYWwgaXMgdG8gZmluZCBjcmFzaGVzIGFuZCBidWdzLCBlc3BlY2lhbGx5IGluIGNvcmUgc3Vic3lzdGVtcyBsaWtlIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGlzIHBhdGNoIGRlZmluaXRlbHkgZmFsbHMgdW5kZXIgdGhhdCBzY29wZSwgZXNwZWNpYWxseSBhcyBpdCB0b3VjaGVzIG9uIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLiBXZSBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0aGlzIGNoYW5nZSBpbXBhY3RzIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGFsZ29yaXRobXMuCgpOb3csIHdoYXQgaXMgdGhpcyBgdm1hX2lzX2ZhdWx0ZWRgIGRvaW5nPyBJdCYjMzk7cyBhIHN0YXRpYyBpbmxpbmUgaGVscGVyLiBUaGUgaW1wb3J0YW50IHBhcnQgaXMgdGhhdCBgX192bWZfYW5vbl9wcmVwYXJlYCBpcyBjYWxsZWQgaW4gcmVsYXRpb24gdG8gYW5vbnltb3VzIHBhZ2UgZmF1bHRzLiBPa2F5LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgdG8gdGhlIEZvY3VzU3ltYm9scyBndWlkYW5jZS4gUmlnaHQsIHRoZSBmdXp6aW5nIGRvY3VtZW50YXRpb24gdGVsbHMgbWUgdG8gYXZvaWQgdWJpcXVpdG91cyBsaWZlY3ljbGUgZnVuY3Rpb25zIGxpa2UgZ2VuZXJhbCBhbGxvY2F0b3JzLCBkZWFsbG9jYXRvcnMsIG9yIHBhZ2UgZmF1bHQgaGFuZGxlcnMuICpBdm9pZCogdGhvc2UhIEluc3RlYWQsIHRhcmdldCB0aGUgKnNwZWNpZmljIGZlYXR1cmUgbG9naWMqLiBIbW0sIGFuZCB0aGlzIGd1aWRhbmNlIGlzIGltcG9ydGFudDogc3RhdGljIGlubGluZXMgaW4gaGVhZGVycyBsYWNrIGRpc3RpbmN0IHN5bWJvbHMuIEkgbmVlZCB0byBmb2N1cyBvbiBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljICpjYWxsZXIqIGZ1bmN0aW9ucy4KClNvLCBJIG5lZWQgdG8gZmluZCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbiBtb2RpZmllZCwgYW5kIHRoYXQgaXMgYF9fdm1mX2Fub25fcHJlcGFyZWAhIFRoZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB3aGVyZSBpdCYjMzk7cyBjYWxsZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIGFuZCBob3cgdG8gYmVzdCBndWlkZSB0aGUgZnV6emVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fdm1mX2Fub25fcHJlcGFyZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiLmM9NTQyMz1zdGF0aWMgdm1fZmF1bHRfdCBodWdldGxiX3dwKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL2h1Z2V0bGIuYy01NTYwLVx0ICovXG5tbS9odWdldGxiLmM6NTU2MTpcdHJldCA9IF9fdm1mX2Fub25fcHJlcGFyZSh2bWYpO1xubW0vaHVnZXRsYi5jLTU1NjItXHRpZiAodW5saWtlbHkocmV0KSlcbi0tXG5tbS9odWdldGxiLmM9NTY5NT1zdGF0aWMgdm1fZmF1bHRfdCBodWdldGxiX25vX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxubW0vaHVnZXRsYi5jLTU3NTktXHRcdGlmICghKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTUFZU0hBUkUpKSB7XG5tbS9odWdldGxiLmM6NTc2MDpcdFx0XHRyZXQgPSBfX3ZtZl9hbm9uX3ByZXBhcmUodm1mKTtcbm1tL2h1Z2V0bGIuYy01NzYxLVx0XHRcdGlmICh1bmxpa2VseShyZXQpKVxuLS1cbm1tL2h1Z2V0bGIuYy01ODk5LVx0Lypcbm1tL2h1Z2V0bGIuYzo1OTAwOlx0ICogV2UgbXVzdCBjaGVjayB0byByZWxlYXNlIHRoZSBwZXItVk1BIGxvY2suIF9fdm1mX2Fub25fcHJlcGFyZSgpIGlzXG5tbS9odWdldGxiLmMtNTkwMS1cdCAqIHRoZSBvbmx5IHdheSByZXQgY2FuIGJlIHNldCB0byBWTV9GQVVMVF9SRVRSWS5cbi0tXG5tbS9odWdldGxiLmM9NTk0NT12bV9mYXVsdF90IGh1Z2V0bGJfZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy02MTExLVx0Lypcbm1tL2h1Z2V0bGIuYzo2MTEyOlx0ICogV2UgbXVzdCBjaGVjayB0byByZWxlYXNlIHRoZSBwZXItVk1BIGxvY2suIF9fdm1mX2Fub25fcHJlcGFyZSgpIGluXG5tbS9odWdldGxiLmMtNjExMy1cdCAqIGh1Z2V0bGJfd3AoKSBpcyB0aGUgb25seSB3YXkgcmV0IGNhbiBiZSBzZXQgdG8gVk1fRkFVTFRfUkVUUlkuXG4tLVxubW0vaW50ZXJuYWwuaD00ODI9c3RhdGljIGlubGluZSB2b2lkIHdha2VfdGhyb3R0bGVfaXNvbGF0ZWQocGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS9pbnRlcm5hbC5oLTQ5MC1cbm1tL2ludGVybmFsLmg6NDkxOnZtX2ZhdWx0X3QgX192bWZfYW5vbl9wcmVwYXJlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKTtcbm1tL2ludGVybmFsLmgtNDkyLXN0YXRpYyBpbmxpbmUgdm1fZmF1bHRfdCB2bWZfYW5vbl9wcmVwYXJlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxubW0vaW50ZXJuYWwuaC00OTMte1xubW0vaW50ZXJuYWwuaDo0OTQ6XHR2bV9mYXVsdF90IHJldCA9IF9fdm1mX2Fub25fcHJlcGFyZSh2bWYpO1xubW0vaW50ZXJuYWwuaC00OTUtXG4tLVxubW0vbWVtb3J5LmM9MzgxNT1zdGF0aWMgaW5saW5lIGJvb2wgdm1hX2lzX2ZhdWx0ZWQoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vbWVtb3J5LmMtMzgyMi0vKipcbm1tL21lbW9yeS5jOjM4MjM6ICogX192bWZfYW5vbl9wcmVwYXJlIC0gUHJlcGFyZSB0byBoYW5kbGUgYW4gYW5vbnltb3VzIGZhdWx0LlxubW0vbWVtb3J5LmMtMzgyNC0gKiBAdm1mOiBUaGUgdm1fZmF1bHQgZGVzY3JpcHRvciBwYXNzZWQgZnJvbSB0aGUgZmF1bHQgaGFuZGxlci5cbi0tXG5tbS9tZW1vcnkuYy0zODM2LSAqL1xubW0vbWVtb3J5LmM6MzgzNzp2bV9mYXVsdF90IF9fdm1mX2Fub25fcHJlcGFyZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbm1tL21lbW9yeS5jLTM4Mzgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2NTcKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGB2bWZfYW5vbl9wcmVwYXJlYCBGdW5jdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBfX3ZtZl9hbm9uX3ByZXBhcmVgLiBSaWdodCwgc28gaXQmIzM5O3MgZGVmaW5lZCBpbiBgbW0vbWVtb3J5LmNgIGFuZCBkZWNsYXJlZCBpbiBgbW0vaW50ZXJuYWwuaGAuIFRoYXQgbWFrZXMgc2Vuc2U7IGBtbS9gIGlzIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN0dWZmLiBOb3csIEkgbmVlZCB0byBrbm93IGhvdyBpdCYjMzk7cyAqdXNlZCouIFRoZSBiZXN0IHdheSB0byBkbyB0aGF0IGlzIHRvIGNoZWNrIHdoZXJlIGl0JiMzOTtzIGNhbGxlZC4gVGltZSBmb3IgYSBxdWljayBgZ3JlcGAgc2VhcmNoIGZvciBgdm1mX2Fub25fcHJlcGFyZWAuIExldCYjMzk7cyBzZWUgd2hhdCB0dXJucyB1cC4gSG9wZWZ1bGx5LCB0aGF0IHdpbGwgZ2l2ZSBtZSBzb21lIGNvbnRleHQgYXJvdW5kIHRoZSBpbnRlbnQgYW5kIGZ1bmN0aW9uIG9mIHRoaXMgcHJlcGFyYXRpb24gZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTM6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1mX2Fub25fcHJlcGFyZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTE1MTk9dm1fZmF1bHRfdCBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE1MjYtXHRcdHJldHVybiBWTV9GQVVMVF9GQUxMQkFDSztcbm1tL2h1Z2VfbWVtb3J5LmM6MTUyNzpcdHJldCA9IHZtZl9hbm9uX3ByZXBhcmUodm1mKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMTUyOC1cdGlmIChyZXQpXG4tLVxubW0vaHVnZXRsYi5jPTU0MjM9c3RhdGljIHZtX2ZhdWx0X3QgaHVnZXRsYl93cChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9odWdldGxiLmMtNTU2MC1cdCAqL1xubW0vaHVnZXRsYi5jOjU1NjE6XHRyZXQgPSBfX3ZtZl9hbm9uX3ByZXBhcmUodm1mKTtcbm1tL2h1Z2V0bGIuYy01NTYyLVx0aWYgKHVubGlrZWx5KHJldCkpXG4tLVxubW0vaHVnZXRsYi5jPTU2OTU9c3RhdGljIHZtX2ZhdWx0X3QgaHVnZXRsYl9ub19wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL2h1Z2V0bGIuYy01NzU5LVx0XHRpZiAoISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX01BWVNIQVJFKSkge1xubW0vaHVnZXRsYi5jOjU3NjA6XHRcdFx0cmV0ID0gX192bWZfYW5vbl9wcmVwYXJlKHZtZik7XG5tbS9odWdldGxiLmMtNTc2MS1cdFx0XHRpZiAodW5saWtlbHkocmV0KSlcbi0tXG5tbS9odWdldGxiLmMtNTg5OS1cdC8qXG5tbS9odWdldGxiLmM6NTkwMDpcdCAqIFdlIG11c3QgY2hlY2sgdG8gcmVsZWFzZSB0aGUgcGVyLVZNQSBsb2NrLiBfX3ZtZl9hbm9uX3ByZXBhcmUoKSBpc1xubW0vaHVnZXRsYi5jLTU5MDEtXHQgKiB0aGUgb25seSB3YXkgcmV0IGNhbiBiZSBzZXQgdG8gVk1fRkFVTFRfUkVUUlkuXG4tLVxubW0vaHVnZXRsYi5jPTU5NDU9dm1fZmF1bHRfdCBodWdldGxiX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtNjExMS1cdC8qXG5tbS9odWdldGxiLmM6NjExMjpcdCAqIFdlIG11c3QgY2hlY2sgdG8gcmVsZWFzZSB0aGUgcGVyLVZNQSBsb2NrLiBfX3ZtZl9hbm9uX3ByZXBhcmUoKSBpblxubW0vaHVnZXRsYi5jLTYxMTMtXHQgKiBodWdldGxiX3dwKCkgaXMgdGhlIG9ubHkgd2F5IHJldCBjYW4gYmUgc2V0IHRvIFZNX0ZBVUxUX1JFVFJZLlxuLS1cbm1tL2ludGVybmFsLmg9NDgyPXN0YXRpYyBpbmxpbmUgdm9pZCB3YWtlX3Rocm90dGxlX2lzb2xhdGVkKHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vaW50ZXJuYWwuaC00OTAtXG5tbS9pbnRlcm5hbC5oOjQ5MTp2bV9mYXVsdF90IF9fdm1mX2Fub25fcHJlcGFyZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XG5tbS9pbnRlcm5hbC5oOjQ5MjpzdGF0aWMgaW5saW5lIHZtX2ZhdWx0X3Qgdm1mX2Fub25fcHJlcGFyZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbm1tL2ludGVybmFsLmgtNDkzLXtcbm1tL2ludGVybmFsLmg6NDk0Olx0dm1fZmF1bHRfdCByZXQgPSBfX3ZtZl9hbm9uX3ByZXBhcmUodm1mKTtcbm1tL2ludGVybmFsLmgtNDk1LVxuLS1cbm1tL21lbW9yeS5jPTM4MTU9c3RhdGljIGlubGluZSBib29sIHZtYV9pc19mYXVsdGVkKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL21lbW9yeS5jLTM4MjItLyoqXG5tbS9tZW1vcnkuYzozODIzOiAqIF9fdm1mX2Fub25fcHJlcGFyZSAtIFByZXBhcmUgdG8gaGFuZGxlIGFuIGFub255bW91cyBmYXVsdC5cbm1tL21lbW9yeS5jLTM4MjQtICogQHZtZjogVGhlIHZtX2ZhdWx0IGRlc2NyaXB0b3IgcGFzc2VkIGZyb20gdGhlIGZhdWx0IGhhbmRsZXIuXG4tLVxubW0vbWVtb3J5LmMtMzgzNi0gKi9cbm1tL21lbW9yeS5jOjM4Mzc6dm1fZmF1bHRfdCBfX3ZtZl9hbm9uX3ByZXBhcmUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG5tbS9tZW1vcnkuYy0zODM4LXtcbi0tXG5tbS9tZW1vcnkuYz0zODcxPXN0YXRpYyB2bV9mYXVsdF90IHdwX3BhZ2VfY29weShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy0zODg3LVx0XHRvbGRfZm9saW8gPSBwYWdlX2ZvbGlvKHZtZi1cdTAwM2VwYWdlKTtcbm1tL21lbW9yeS5jOjM4ODg6XHRyZXQgPSB2bWZfYW5vbl9wcmVwYXJlKHZtZik7XG5tbS9tZW1vcnkuYy0zODg5LVx0aWYgKHVubGlrZWx5KHJldCkpXG4tLVxubW0vbWVtb3J5LmM9NTMwNT1zdGF0aWMgdm1fZmF1bHRfdCBkb19hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy01MzU1LVx0LyogQWxsb2NhdGUgb3VyIG93biBwcml2YXRlIHBhZ2UuICovXG5tbS9tZW1vcnkuYzo1MzU2Olx0cmV0ID0gdm1mX2Fub25fcHJlcGFyZSh2bWYpO1xubW0vbWVtb3J5LmMtNTM1Ny1cdGlmIChyZXQpXG4tLVxubW0vbWVtb3J5LmM9NTg5MD1zdGF0aWMgdm1fZmF1bHRfdCBkb19jb3dfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNTg5Ny1cdGlmICghcmV0KVxubW0vbWVtb3J5LmM6NTg5ODpcdFx0cmV0ID0gdm1mX2Fub25fcHJlcGFyZSh2bWYpO1xubW0vbWVtb3J5LmMtNTg5OS1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA4MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE1NTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHdhcnJhbnRzIGZ1enppbmcgYmFzZWQgb24gV29ydGhGdXp6aW5nIGNyaXRlcmlhLiBUaGlzIHBhdGNoIG1vZGlmaWVzIGBtbS9tZW1vcnkuY2AsIHNwZWNpZmljYWxseSBgX192bWZfYW5vbl9wcmVwYXJlYC4gSXQgaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBjYWxsIGB2bWFfaXNfZmF1bHRlZGAgd2hpY2ggc2VlbXMgdG8gYmUgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uLiBCZWNhdXNlIGl0JiMzOTtzIGEgbW9kaWZpY2F0aW9uIHRvIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKGBtbS9gKSwgV29ydGhGdXp6aW5nIGlzIGRlZmluaXRpdmVseSB0cnVlLCBJJiMzOTtkIGZsYWcgdGhpcyBmb3IgZnV6emluZy4KCk5leHQsIEkgbmVlZCB0byBldmFsdWF0ZSBGb2N1c1N5bWJvbHMuIFRoZSBxdWVzdGlvbiBub3cgaXMgd2hldGhlciB0aGUgbW9kaWZpZWQgZnVuY3Rpb24gaXMgYSBzdWl0YWJsZSB0YXJnZXQuIEkgbmVlZCB0byBhdm9pZCB1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aHMuICBJbml0aWFsbHksIEkgY29uc2lkZXJlZCBpZiBgX192bWZfYW5vbl9wcmVwYXJlYCBpcyBhIGNvbW1vbmx5IGV4ZWN1dGVkIGZ1bmN0aW9uLiBCdXQgd2FpdCwgYF9fdm1mX2Fub25fcHJlcGFyZWAgaXMgY2FsbGVkIGluIHRoZSBwcmVwYXJhdGlvbiB0byBoYW5kbGUgYW5vbnltb3VzIGZhdWx0cy4gRnVydGhlciBpbnZlc3RpZ2F0aW9uIHJldmVhbHMgdGhhdCBgX192bWZfYW5vbl9wcmVwYXJlYCBpcyBhIG5vbi1zdGF0aWMgc3ltYm9sLiBTaW5jZSBgdm1hX2lzX2ZhdWx0ZWRgIGlzIGEgc3RhdGljIGlubGluZSwgaXQmIzM5O3MgY29tcGlsZWQgaW50byBgX192bWZfYW5vbl9wcmVwYXJlYC4gVGhlcmVmb3JlLCBgX192bWZfYW5vbl9wcmVwYXJlYCBpcyB0aGUgZXhhY3QgZnVuY3Rpb24gd2hlcmUgdGhlIGNvZGUgaXMgY29tcGlsZWQgaW50bywgSSBoYXZlIHRoZSBjb3JyZWN0IGZ1bmN0aW9uIHN5bWJvbC4gWWVzLCBgX192bWZfYW5vbl9wcmVwYXJlYCBpcyB0aGUgcmlnaHQgZm9jdXMgc3ltYm9sLgoKRmluYWxseSwgcmVnYXJkaW5nIEVuYWJsZUNvbmZpZ3MsIHRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgc28gYW55IHN0YW5kYXJkIGtlcm5lbCBjb25maWd1cmF0aW9uIHdpdGggTU1VIHN1cHBvcnQgc2hvdWxkIGJlIHN1ZmZpY2llbnQuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmxvY2tzIChgI2lmZGVmYCkgdGhhdCBtaWdodCBpbXBhY3QgdGhlIGNvZGUgYXJvdW5kIHRoaXMgc2VjdGlvbiwgYnV0IGl0IHNlZW1zIHVubGlrZWx5IGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZS4gVGhpcyBjaGFuZ2UgbG9va3Mgc3RyYWlnaHRmb3J3YXJkOyBzdGFuZGFyZCBrZXJuZWwgY29uZmlncyBzaG91bGQgYXBwbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNzgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM3ODA6XHRcdGVudHJ5ID0gcHRlX21reW91bmcodm1mLVx1MDAzZW9yaWdfcHRlKTtcbjM3ODE6XHRcdGVudHJ5ID0gbWF5YmVfbWt3cml0ZShwdGVfbWtkaXJ0eShlbnRyeSksIHZtYSk7XG4zNzgyOlx0XHRpZiAocHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHZtYSwgdm1mLVx1MDAzZWFkZHJlc3MsIHZtZi1cdTAwM2VwdGUsIGVudHJ5LCAxKSlcbjM3ODM6XHRcdFx0dXBkYXRlX21tdV9jYWNoZV9yYW5nZSh2bWYsIHZtYSwgdm1mLVx1MDAzZWFkZHJlc3MsIHZtZi1cdTAwM2VwdGUsIDEpO1xuMzc4NDpcdFx0cHRlX3VubWFwX3VubG9jayh2bWYtXHUwMDNlcHRlLCB2bWYtXHUwMDNlcHRsKTtcbjM3ODU6XHRcdGNvdW50X3ZtX2V2ZW50KFBHUkVVU0UpO1xuMzc4NjpcdH1cbjM3ODc6XHRcbjM3ODg6XHQvKlxuMzc4OTpcdCAqIFdlIGNvdWxkIGFkZCBhIGJpdGZsYWcgc29tZXdoZXJlLCBidXQgZm9yIG5vdywgd2Uga25vdyB0aGF0IGFsbFxuMzc5MDpcdCAqIHZtX29wcyB0aGF0IGhhdmUgYSAtXHUwMDNlbWFwX3BhZ2VzIGhhdmUgYmVlbiBhdWRpdGVkIGFuZCBkb24mIzM5O3QgbmVlZFxuMzc5MTpcdCAqIHRoZSBtbWFwX2xvY2sgdG8gYmUgaGVsZC5cbjM3OTI6XHQgKi9cbjM3OTM6XHRzdGF0aWMgaW5saW5lIHZtX2ZhdWx0X3Qgdm1mX2Nhbl9jYWxsX2ZhdWx0KGNvbnN0IHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuMzc5NDpcdHtcbjM3OTU6XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mLVx1MDAzZXZtYTtcbjM3OTY6XHRcbjM3OTc6XHRcdGlmICh2bWEtXHUwMDNldm1fb3BzLVx1MDAzZW1hcF9wYWdlcyB8fCAhKHZtZi1cdTAwM2VmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19WTUFfTE9DSykpXG4zNzk4Olx0XHRcdHJldHVybiAwO1xuMzc5OTpcdFx0dm1hX2VuZF9yZWFkKHZtYSk7XG4zODAwOlx0XHRyZXR1cm4gVk1fRkFVTFRfUkVUUlk7XG4zODAxOlx0fVxuMzgwMjpcdFxuMzgwMzpcdC8qKlxuMzgwNDpcdCAqIHZtYV9pc19mYXVsdGVkIC0gY2hlY2sgaWYgYSB2bWEgaGFzIGJlZW4gZmF1bHRlZFxuMzgwNTpcdCAqIEB2bWE6IHRoZSB2bWEgdG8gY2hlY2tcbjM4MDY6XHQgKlxuMzgwNzpcdCAqIFRoaXMgaXMgYSBsb2NrbGVzcyBhY2Nlc3MgdGhhdCBtYXkgcmFjZSB3aXRoIF9fYW5vbl92bWFfcHJlcGFyZSgpLlxuMzgwODpcdCAqIFRoZSByYWNlIGlzIHNhZmUgYmVjYXVzZTpcbjM4MDk6XHQgKiAtIFRoZSBmYXVsdCBoYW5kbGVyIGVuc3VyZXMgdGhhdCB0aGUgbWFwcGluZyBvZiBtZW1vcnkgaXMgb3JkZXJlZC5cbjM4MTA6XHQgKiAtIElmIHdlIHJlYWQgTlVMTCwgdGhlIGNhbGxlciB3aWxsIHJlLWNoZWNrXG4zODExOlx0ICogLSBUaGUgcGFnZV90YWJsZV9sb2NrIHByb3ZpZGVzIEFDUVVJUkUgc2VtYW50aWNzIGZvciBtZW1vcnkgb3JkZXJpbmdcbjM4MTI6XHQgKlxuMzgxMzpcdCAqIFJldHVybjogdHJ1ZSBpZiB2bWEtXHUwMDNlYW5vbl92bWEgaXMgbm9uLU5VTEwsIGZhbHNlIG90aGVyd2lzZVxuMzgxNDpcdCAqL1xuMzgxNTpcdHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfZmF1bHRlZChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbjM4MTY6XHR7XG4zODE3Olx0XHQvKiBMb2NrbGVzcyBjaGVjayAtIHNhZmUgYmVjYXVzZSB3ZSByZS12YWxpZGF0ZSB1bmRlciBwYWdlX3RhYmxlX2xvY2sgKi9cbjM4MTg6XHRcdHJldHVybiBkYXRhX3JhY2Uodm1hLVx1MDAzZWFub25fdm1hKTtcbjM4MTk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzYyCgkJCQkJCQlvdXRwdXQ6IDEwNAoJCQkJCQkJdGhvdWdodHM6IDE1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBmb3IgU2V0dGluZyBGdXp6aW5nIFBhcmFtZXRlcnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29uZmlndXJhdGlvbiwgYW5kIHRoZSBpbW1lZGlhdGUgb2JzZXJ2YXRpb24gaXMgdGhlIGNvbXBsZXRlIGFic2VuY2Ugb2YgYCNpZmRlZmAgZ3VhcmRzLiBUaGF0JiMzOTtzIGEgZ29vZCBzaWduLCBhbmQgdGhlIE1NVSBiZWluZyBkZWZhdWx0IGZvciBhbWQ2NCBpcyBhbHNvIHN0YW5kYXJkIGJlaGF2aW9yLCBzbyBub3RoaW5nIGp1bXBzIG91dCB0aGVyZS4KCk5vdywgbGV0JiMzOTtzIHZlcmlmeSBpZiBgRW5hYmxlQ29uZmlnc2Agc2hvdWxkIGluZGVlZCBiZSBhbiBlbXB0eSBsaXN0LCBgW11gLiBZZXAsIHRoYXQmIzM5O3MgY29ycmVjdCBmb3IgdGhlIHN0YW5kYXJkIGNvcmUga2VybmVsIGZ1bmN0aW9uYWxpdHkgd2UmIzM5O3JlIHRhcmdldGluZy4gTW92aW5nIG9uLi4uCgpOb3csIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGBGb2N1c1N5bWJvbHNgIGVudHJ5LiBJIG5lZWQgdG8gbWFrZSAqYWJzb2x1dGVseSogc3VyZSBJIGhhdmUgdGhlIHJpZ2h0IHN5bWJvbC4gT2theSwgYF9fdm1mX2Fub25fcHJlcGFyZWAgaXMgdGhlIG5vbi1zdGF0aWMgc3ltYm9sIGluIGBtbS9tZW1vcnkuY2AgdGhhdCAqZXhhY3RseSogY29udGFpbnMgdGhlIGNoYW5nZSBJJiMzOTttIGFmdGVyLiBUaGF0JiMzOTtzIGl0IQoKQWxyaWdodCwgdGltZSB0byBlbnN1cmUgSSBoYXZlIHRoZSByaWdodCBmb3JtYXQgZm9yIGBzZXQtcmVzdWx0c2AuIEp1c3QgdG8gYmUgY2xlYXI6CiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXWAgLSBlbXB0eSBsaXN0LCBjb3JlIGZ1bmN0aW9uYWxpdHkuCiogICBgRm9jdXNTeW1ib2xzYDogYFsmIzM0O19fdm1mX2Fub25fcHJlcGFyZSYjMzQ7XWAgLSB0aGF0IHNwZWNpZmljIHN5bWJvbCwgbm90aGluZyBlbHNlLgoqICAgYFJlYXNvbmluZ2A6IENvbmNpc2UgZXhwbGFuYXRpb24sIG9mIGNvdXJzZS4KKiAgIGBXb3J0aEZ1enppbmdgOiBgdHJ1ZWAgLSBBYnNvbHV0ZWx5IQoKUGVyZmVjdC4gSSYjMzk7bSBzYXRpc2ZpZWQuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3ZtZl9hbm9uX3ByZXBhcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGluIG1tL21lbW9yeS5jIGJ5IGludHJvZHVjaW5nIGEgbmV3IGhlbHBlciB2bWFfaXNfZmF1bHRlZCgpIHVzaW5nIGRhdGFfcmFjZSgpIGFuZCB1cGRhdGluZyBfX3ZtZl9hbm9uX3ByZXBhcmUoKS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBmYXVsdCBwcmVwYXJhdGlvbiBwYXRocyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byB2ZXJpZnkgbG9ja2xlc3MgY29uY3VycmVuY3kgaW52YXJpYW50cyBhbmQgbWVtb3J5IG9yZGVyaW5nIGJlaGF2aW9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fdm1mX2Fub25fcHJlcGFyZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaW4gbW0vbWVtb3J5LmMgYnkgaW50cm9kdWNpbmcgYSBuZXcgaGVscGVyIHZtYV9pc19mYXVsdGVkKCkgdXNpbmcgZGF0YV9yYWNlKCkgYW5kIHVwZGF0aW5nIF9fdm1mX2Fub25fcHJlcGFyZSgpLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIGZhdWx0IHByZXBhcmF0aW9uIHBhdGhzIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIHZlcmlmeSBsb2NrbGVzcyBjb25jdXJyZW5jeSBpbnZhcmlhbnRzIGFuZCBtZW1vcnkgb3JkZXJpbmcgYmVoYXZpb3IuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTM6MDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgaGVscGVyIGZ1bmN0aW9uIGB2bWFfaXNfZmF1bHRlZCgpYCB0byBhbm5vdGF0ZSBhIGxvY2tsZXNzIHJlYWQgb2YgYHZtYS1cdTAwM2Vhbm9uX3ZtYWAgdXNpbmcgYGRhdGFfcmFjZSgpYCBpbiBgX192bWZfYW5vbl9wcmVwYXJlKClgLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdGFjay9oZWFwIGJ1ZmZlcnMsIHN0cnVjdHVyZSBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3Nlcy4gVGhlIGB2bV9hcmVhX3N0cnVjdGAgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCBieSB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIEFzIHRoZXJlIGlzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyIHNwYWNlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGIzZmJkYWI3YjdkYTkwNjAzOWY2OTdhNDdjNjJjNTk0NmNlNTFhOTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDEzOjA0OjAxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCA2YjgyODBjZmMxZGJlLi5kODVkNjc5Mjc0MDBiIDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuYwpAQCAtMzgwMCw2ICYjNDM7MzgwMCwyNSBAQCBzdGF0aWMgaW5saW5lIHZtX2ZhdWx0X3Qgdm1mX2Nhbl9jYWxsX2ZhdWx0KGNvbnN0IHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCXJldHVybiBWTV9GQVVMVF9SRVRSWTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHZtYV9pc19mYXVsdGVkIC0gY2hlY2sgaWYgYSB2bWEgaGFzIGJlZW4gZmF1bHRlZAomIzQzOyAqIEB2bWE6IHRoZSB2bWEgdG8gY2hlY2sKJiM0MzsgKgomIzQzOyAqIFRoaXMgaXMgYSBsb2NrbGVzcyBhY2Nlc3MgdGhhdCBtYXkgcmFjZSB3aXRoIF9fYW5vbl92bWFfcHJlcGFyZSgpLgomIzQzOyAqIFRoZSByYWNlIGlzIHNhZmUgYmVjYXVzZToKJiM0MzsgKiAtIFRoZSBmYXVsdCBoYW5kbGVyIGVuc3VyZXMgdGhhdCB0aGUgbWFwcGluZyBvZiBtZW1vcnkgaXMgb3JkZXJlZC4KJiM0MzsgKiAtIElmIHdlIHJlYWQgTlVMTCwgdGhlIGNhbGxlciB3aWxsIHJlLWNoZWNrCiYjNDM7ICogLSBUaGUgcGFnZV90YWJsZV9sb2NrIHByb3ZpZGVzIEFDUVVJUkUgc2VtYW50aWNzIGZvciBtZW1vcnkgb3JkZXJpbmcKJiM0MzsgKgomIzQzOyAqIFJldHVybjogdHJ1ZSBpZiB2bWEtJmd0O2Fub25fdm1hIGlzIG5vbi1OVUxMLCBmYWxzZSBvdGhlcndpc2UKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgdm1hX2lzX2ZhdWx0ZWQoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiYjNDM7ewomIzQzOwkvKiBMb2NrbGVzcyBjaGVjayAtIHNhZmUgYmVjYXVzZSB3ZSByZS12YWxpZGF0ZSB1bmRlciBwYWdlX3RhYmxlX2xvY2sgKi8KJiM0MzsJcmV0dXJuIGRhdGFfcmFjZSh2bWEtJmd0O2Fub25fdm1hKTsKJiM0Mzt9CiYjNDM7CiYjNDM7CiAvKioKICAqIF9fdm1mX2Fub25fcHJlcGFyZSAtIFByZXBhcmUgdG8gaGFuZGxlIGFuIGFub255bW91cyBmYXVsdC4KICAqIEB2bWY6IFRoZSB2bV9mYXVsdCBkZXNjcmlwdG9yIHBhc3NlZCBmcm9tIHRoZSBmYXVsdCBoYW5kbGVyLgpAQCAtMzgxOSw4ICYjNDM7MzgzOCw3IEBAIHZtX2ZhdWx0X3QgX192bWZfYW5vbl9wcmVwYXJlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogewogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mLSZndDt2bWE7CiAJdm1fZmF1bHRfdCByZXQgPSAwOwotCi0JaWYgKGxpa2VseSh2bWEtJmd0O2Fub25fdm1hKSkKJiM0MzsJaWYgKGxpa2VseSh2bWFfaXNfZmF1bHRlZCh2bWEpKSkKIAkJcmV0dXJuIDA7CiAJaWYgKHZtZi0mZ3Q7ZmxhZ3MgJmFtcDsgRkFVTFRfRkxBR19WTUFfTE9DSykgewogCQlpZiAoIW1tYXBfcmVhZF90cnlsb2NrKHZtYS0mZ3Q7dm1fbW0pKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB3aXRoaW4gYG1tL21lbW9yeS5jYC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgY2VudGVyZWQgYXJvdW5kIGB2bWFfaXNfZmF1bHRlZGAgYW5kIGhvdyBpdCYjMzk7cyB1c2VkIGluIHRoZSBmYXVsdCBoYW5kbGluZyBwYXRoLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzIHRvIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzLCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbnQgYW5kIGl0cyBpbXBsaWNhdGlvbnMuCgpGaXJzdCwgSSBzZWUgYSBuZXcgaW5saW5lIGZ1bmN0aW9uLCBgdm1hX2lzX2ZhdWx0ZWRgLiBJdCBhcHBlYXJzIHRvIGJlIGEgbG9ja2xlc3MgY2hlY2sgdG8gZGV0ZXJtaW5lIGlmIGEgVk1BIChWaXJ0dWFsIE1lbW9yeSBBcmVhKSBoYXMgYWxyZWFkeSBiZWVuIGZhdWx0ZWQuIFRoZSBjb21tZW50cyBhcmUgY3JpdGljYWwgaGVyZSDigJMgdGhleSBoaWdobGlnaHQgdGhlIHBvdGVudGlhbCBkYXRhIHJhY2Ugd2l0aCBgX19hbm9uX3ZtYV9wcmVwYXJlKClgIGFuZCwgaW1wb3J0YW50bHksIHdoeSBpdCYjMzk7cyBjb25zaWRlcmVkIHNhZmUuIFRoZSBleHBsYW5hdGlvbiBhYm91dCBtZW1vcnkgb3JkZXJpbmcgZW5mb3JjZWQgYnkgdGhlIGZhdWx0IGhhbmRsZXIgYW5kIHRoZSB1c2Ugb2YgYHBhZ2VfdGFibGVfbG9ja2AgZm9yIGFjcXVpcmUgc2VtYW50aWNzIGlzIHdoYXQgSSB3b3VsZCBleHBlY3QgaW4gYSBsb3ctbGV2ZWwgbWVtb3J5IG1hbmFnZW1lbnQgY29udGV4dC4gSXQgaXMgaW50ZXJlc3RpbmcgdGhleSBhcmUgdXNpbmcgYGRhdGFfcmFjZWAgaGVyZSwgSSB3aWxsIGhhdmUgdG8gaW52ZXN0aWdhdGUgd2hlcmUgdGhhdCBtYWNybyBpcyBkZWZpbmVkLgoKRXNzZW50aWFsbHksIHRoZXkmIzM5O3JlIG9wdGltaXppbmcgYnkgYXZvaWRpbmcgYSBsb2NrIGluIHRoZSBjb21tb24gY2FzZSwgcmVseWluZyBvbiByZS12YWxpZGF0aW9uIGlmIHRoZXkgcmVhZCBhIHN0YWxlIHZhbHVlLiBUaGlzIG1ha2VzIHNlbnNlIGZyb20gYSBwZXJmb3JtYW5jZSBwZXJzcGVjdGl2ZSDigJMgbWluaW1pemluZyBsb2NrIGNvbnRlbnRpb24gaXMgYWx3YXlzIGEgZ29vZCBnb2FsLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB3aGVyZSBpdCYjMzk7cyAqdXNlZCouIFRoZSBjaGFuZ2UgaW4gYF9fdm1mX2Fub25fcHJlcGFyZWAgaXMgdGhlIGtleS4gVGhlIHBhdGNoIHJlcGxhY2VzIHRoZSBkaXJlY3QgY2hlY2sgYHZtYS0mZ3Q7YW5vbl92bWFgIHdpdGggYSBjYWxsIHRvIG91ciBuZXcgZnVuY3Rpb24gYHZtYV9pc19mYXVsdGVkYC4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBsb2NrbGVzcyBjaGVjayBpbiBgdm1hX2lzX2ZhdWx0ZWRgIGlzIG5vdyB0aGUgcHJlZmVycmVkIG1ldGhvZCBvZiBkZXRlY3RpbmcgaWYgYSBmYXVsdCBoYXMgYWxyZWFkeSBvY2N1cnJlZC4gVGhpcyBjaGFuZ2UgaW1wbGllcyBhIHBlcmZvcm1hbmNlIGdhaW4sIGJ1dCBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgb2Z0ZW4gdGhpcyBjb2RlIHBhdGggaXMgaGl0IHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGFjdC4gSSBhbHNvIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBsaWtlbHkgY29uZGl0aW9uIGlzIHRydWx5IGxpa2VseS4KCkkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYF9fdm1mX2Fub25fcHJlcGFyZWAgdG8gc2VlIGlmIHRoZSBhc3N1bXB0aW9ucyBob2xkIHVwIGluIHJlYWwtd29ybGQgc2NlbmFyaW9zLiBJIGFsc28gbmVlZCB0byB2ZXJpZnkgdGhpcyBwYXRjaCBoYXMgcHJvcGVyIHJlZ3Jlc3Npb24gdGVzdHMgYW5kIGlzIHByb3Blcmx5IGRvY3VtZW50ZWQuIEkgd2lsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgcmVsYXRlZCB0byB0aGUgbG9ja2xlc3MgYWNjZXNzIHBhdHRlcm4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM4MDA6XHRcdHJldHVybiBWTV9GQVVMVF9SRVRSWTtcbjM4MDE6XHR9XG4zODAyOlx0XG4zODAzOlx0LyoqXG4zODA0Olx0ICogdm1hX2lzX2ZhdWx0ZWQgLSBjaGVjayBpZiBhIHZtYSBoYXMgYmVlbiBmYXVsdGVkXG4zODA1Olx0ICogQHZtYTogdGhlIHZtYSB0byBjaGVja1xuMzgwNjpcdCAqXG4zODA3Olx0ICogVGhpcyBpcyBhIGxvY2tsZXNzIGFjY2VzcyB0aGF0IG1heSByYWNlIHdpdGggX19hbm9uX3ZtYV9wcmVwYXJlKCkuXG4zODA4Olx0ICogVGhlIHJhY2UgaXMgc2FmZSBiZWNhdXNlOlxuMzgwOTpcdCAqIC0gVGhlIGZhdWx0IGhhbmRsZXIgZW5zdXJlcyB0aGF0IHRoZSBtYXBwaW5nIG9mIG1lbW9yeSBpcyBvcmRlcmVkLlxuMzgxMDpcdCAqIC0gSWYgd2UgcmVhZCBOVUxMLCB0aGUgY2FsbGVyIHdpbGwgcmUtY2hlY2tcbjM4MTE6XHQgKiAtIFRoZSBwYWdlX3RhYmxlX2xvY2sgcHJvdmlkZXMgQUNRVUlSRSBzZW1hbnRpY3MgZm9yIG1lbW9yeSBvcmRlcmluZ1xuMzgxMjpcdCAqXG4zODEzOlx0ICogUmV0dXJuOiB0cnVlIGlmIHZtYS1cdTAwM2Vhbm9uX3ZtYSBpcyBub24tTlVMTCwgZmFsc2Ugb3RoZXJ3aXNlXG4zODE0Olx0ICovXG4zODE1Olx0c3RhdGljIGlubGluZSBib29sIHZtYV9pc19mYXVsdGVkKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuMzgxNjpcdHtcbjM4MTc6XHRcdC8qIExvY2tsZXNzIGNoZWNrIC0gc2FmZSBiZWNhdXNlIHdlIHJlLXZhbGlkYXRlIHVuZGVyIHBhZ2VfdGFibGVfbG9jayAqL1xuMzgxODpcdFx0cmV0dXJuIGRhdGFfcmFjZSh2bWEtXHUwMDNlYW5vbl92bWEpO1xuMzgxOTpcdH1cbjM4MjA6XHRcbjM4MjE6XHRcbjM4MjI6XHQvKipcbjM4MjM6XHQgKiBfX3ZtZl9hbm9uX3ByZXBhcmUgLSBQcmVwYXJlIHRvIGhhbmRsZSBhbiBhbm9ueW1vdXMgZmF1bHQuXG4zODI0Olx0ICogQHZtZjogVGhlIHZtX2ZhdWx0IGRlc2NyaXB0b3IgcGFzc2VkIGZyb20gdGhlIGZhdWx0IGhhbmRsZXIuXG4zODI1Olx0ICpcbjM4MjY6XHQgKiBXaGVuIHByZXBhcmluZyB0byBpbnNlcnQgYW4gYW5vbnltb3VzIHBhZ2UgaW50byBhIFZNQSBmcm9tIGFcbjM4Mjc6XHQgKiBmYXVsdCBoYW5kbGVyLCBjYWxsIHRoaXMgZnVuY3Rpb24gcmF0aGVyIHRoYW4gYW5vbl92bWFfcHJlcGFyZSgpLlxuMzgyODpcdCAqIElmIHRoaXMgdm1hIGRvZXMgbm90IGFscmVhZHkgaGF2ZSBhbiBhc3NvY2lhdGVkIGFub25fdm1hIGFuZCB3ZSBhcmVcbjM4Mjk6XHQgKiBvbmx5IHByb3RlY3RlZCBieSB0aGUgcGVyLVZNQSBsb2NrLCB0aGUgY2FsbGVyIG11c3QgcmV0cnkgd2l0aCB0aGVcbjM4MzA6XHQgKiBtbWFwX2xvY2sgaGVsZC4gIF9fYW5vbl92bWFfcHJlcGFyZSgpIHdpbGwgbG9vayBhdCBhZGphY2VudCBWTUFzIHRvXG4zODMxOlx0ICogZGV0ZXJtaW5lIGlmIHRoaXMgVk1BIGNhbiBzaGFyZSBpdHMgYW5vbl92bWEsIGFuZCB0aGF0JiMzOTtzIG5vdCBzYWZlIHRvXG4zODMyOlx0ICogZG8gd2l0aCBvbmx5IHRoZSBwZXItVk1BIGxvY2sgaGVsZCBmb3IgdGhpcyBWTUEuXG4zODMzOlx0ICpcbjM4MzQ6XHQgKiBSZXR1cm46IDAgaWYgZmF1bHQgaGFuZGxpbmcgY2FuIHByb2NlZWQuICBBbnkgb3RoZXIgdmFsdWUgc2hvdWxkIGJlXG4zODM1Olx0ICogcmV0dXJuZWQgdG8gdGhlIGNhbGxlci5cbjM4MzY6XHQgKi9cbjM4Mzc6XHR2bV9mYXVsdF90IF9fdm1mX2Fub25fcHJlcGFyZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbjM4Mzg6XHR7XG4zODM5Olx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi1cdTAwM2V2bWE7XG4zODQwOlx0XHR2bV9mYXVsdF90IHJldCA9IDA7XG4zODQxOlx0XHRpZiAobGlrZWx5KHZtYV9pc19mYXVsdGVkKHZtYSkpKVxuMzg0MjpcdFx0XHRyZXR1cm4gMDtcbjM4NDM6XHRcdGlmICh2bWYtXHUwMDNlZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfVk1BX0xPQ0spIHtcbjM4NDQ6XHRcdFx0aWYgKCFtbWFwX3JlYWRfdHJ5bG9jayh2bWEtXHUwMDNldm1fbW0pKVxuMzg0NTpcdFx0XHRcdHJldHVybiBWTV9GQVVMVF9SRVRSWTtcbjM4NDY6XHRcdH1cbjM4NDc6XHRcdGlmIChfX2Fub25fdm1hX3ByZXBhcmUodm1hKSlcbjM4NDg6XHRcdFx0cmV0ID0gVk1fRkFVTFRfT09NO1xuMzg0OTpcdFx0aWYgKHZtZi1cdTAwM2VmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19WTUFfTE9DSylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIyMAoJCQkJCQkJb3V0cHV0OiAxNDkKCQkJCQkJCXRob3VnaHRzOiA1OTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogVGhpcyBQYXRjaCBpcyBTYWZlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgYXBwZWFycyB0byBiZSBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgcmVmYWN0b3JpbmcsIGFkZGluZyBhIGhlbHBlciBmdW5jdGlvbiwgYHZtYV9pc19mYXVsdGVkKClgLCB0aGF0IGVuY2Fwc3VsYXRlcyB0aGUgYGRhdGFfcmFjZSh2bWEtJmd0O2Fub25fdm1hKWAgY2hlY2suIFRoZSBwcmltYXJ5IGludGVudCBzZWVtcyB0byBiZSBjbGFyaXR5IG9yIEtDU0FOIGFubm90YXRpb24uIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IEtNU0FOIGNvbmNlcm5zPwoKSW1tZWRpYXRlbHksIEkmIzM5O20gY2hlY2tpbmcgZm9yIHRoZSB1c3VhbCBzdXNwZWN0cy4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBubyBtb2RpZmljYXRpb25zIHRvIHVzZXItc3BhY2UgY29waWVzLCBubyBuZXcgYWxsb2NhdGlvbnMuIEkgZG9uJiMzOTt0IHNlZSBhbnkgb2J2aW91cyBuZXcgZGF0YSByYWNlcyBpbnRyb2R1Y2VkLCBiZXlvbmQgdGhpcyBsb2NrbGVzcyBhY2Nlc3Mgd2hpY2ggaXMgYmVpbmcgYW5ub3RhdGVkLiBgdm1hLSZndDthbm9uX3ZtYWAgaXMgcGFydCBvZiB0aGUgYHN0cnVjdCB2bV9hcmVhX3N0cnVjdGAsIGFuZCBJIGtub3cgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBoYW5kbGVzIHRoZSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBvZiB0aGVzZSBWTUFzLiBTbywgdGhlIHBvaW50ZXIgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYXQgYWxsb2NhdGlvbi4KCk5vdywgbGV0IG1lIHB1dCBvbiBteSBLTVNBTiBoYXQgYW5kIGdvIHRocm91Z2ggdGhlIGNyaXRlcmlhLiBUaGlzIHBhdGNoIGRvZXNuJiMzOTt0OgoKMS4gIFRvdWNoIGFueSBrZXJuZWwgc3RydWN0dXJlcyBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgdW5pbml0aWFsaXplZCBkYXRhIGNvdWxkIGxlYWsuCjIuICBJbnRyb2R1Y2UgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4KMy4gIEFsbG9jYXRlIG9yIGluaXRpYWxpemUgYW55IGNvbXBsZXggc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLgo0LiAgTW9kaWZ5IGJvdW5kcyBjaGVja3Mgb3IgbGVuZ3RocyBpbiBhIHdheSB0aGF0IGFsbG93cyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBwYXJ0cyBvZiBidWZmZXJzLgoKVGhlcmVmb3JlLCBLTVNBTiBpcyBjbGVhcmx5IG5vdCBuZWVkZWQgaGVyZS4gVGhlIGNoYW5nZXMgZmFsbCBzcXVhcmVseSBpbnRvIHRoZSAmIzM0O05lZWRzS01TQU49ZmFsc2UmIzM0OyBjYXRlZ29yeS4gU3BlY2lmaWNhbGx5LCB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBoZWxwZXIgdG8gYW5ub3RhdGUgbG9ja2xlc3MgYWNjZXNzIG9mIGEgcHJvcGVybHkgaW5pdGlhbGl6ZWQgZmllbGQsIHdpdGggbm8gY2hhbmNlIG9mIGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIFRoZSBwb3RlbnRpYWwgaXNzdWVzIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgS0FTQU4gb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4KClNvLCBoZXJlJiMzOTtzIG15IHJlYXNvbmluZzogdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgaGVscGVyIGZvciBhIGBkYXRhX3JhY2UoKWAgY2hlY2sgb24gYHZtYS0mZ3Q7YW5vbl92bWFgIHdpdGhpbiBgX192bWZfYW5vbl9wcmVwYXJlKClgLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBubyB1c2VyLXNwYWNlIGNvcGllcywgYW5kIG5vIG5ldyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBkYXRhIHN0cnVjdHVyZXMuIFRoZSBgdm1fYXJlYV9zdHJ1Y3RgIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIGJ5IHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBzbyB0aGVyZSYjMzk7cyBubyB3YXkgdG8gcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBjYXVzZSBpbmZvcm1hdGlvbiBsZWFrcyB2aWEgYHZtYS0mZ3Q7YW5vbl92bWFgLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyAqbm90KiBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgd2FycmFudCBLTVNBTiBmdXp6aW5nLiBXZSYjMzk7cmUgZ29vZCB0byBnby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTM6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGhlbHBlciBmdW5jdGlvbiBgdm1hX2lzX2ZhdWx0ZWQoKWAgdG8gYW5ub3RhdGUgYSBsb2NrbGVzcyByZWFkIG9mIGB2bWEtXHUwMDNlYW5vbl92bWFgIHVzaW5nIGBkYXRhX3JhY2UoKWAgaW4gYF9fdm1mX2Fub25fcHJlcGFyZSgpYC4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RhY2svaGVhcCBidWZmZXJzLCBzdHJ1Y3R1cmUgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMuIFRoZSBgdm1fYXJlYV9zdHJ1Y3RgIGlzIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgYnkgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBBcyB0aGVyZSBpcyBubyByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgbGVha2luZyB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlciBzcGFjZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgaGVscGVyIGZ1bmN0aW9uIGB2bWFfaXNfZmF1bHRlZCgpYCB0byBhbm5vdGF0ZSBhIGxvY2tsZXNzIHJlYWQgb2YgYHZtYS1cdTAwM2Vhbm9uX3ZtYWAgdXNpbmcgYGRhdGFfcmFjZSgpYCBpbiBgX192bWZfYW5vbl9wcmVwYXJlKClgLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdGFjay9oZWFwIGJ1ZmZlcnMsIHN0cnVjdHVyZSBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3Nlcy4gVGhlIGB2bV9hcmVhX3N0cnVjdGAgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCBieSB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIEFzIHRoZXJlIGlzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyIHNwYWNlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDlUMTM6MDQ6MDIuNTkyNDY5NTIxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk4NTAyNDQ3NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX192bWZfYW5vbl9wcmVwYXJlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgaGVscGVyIGZ1bmN0aW9uIGB2bWFfaXNfZmF1bHRlZCgpYCB0byBhbm5vdGF0ZSBhIGxvY2tsZXNzIHJlYWQgb2YgYHZtYS1cXHUwMDNlYW5vbl92bWFgIHVzaW5nIGBkYXRhX3JhY2UoKWAgaW4gYF9fdm1mX2Fub25fcHJlcGFyZSgpYC4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RhY2svaGVhcCBidWZmZXJzLCBzdHJ1Y3R1cmUgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMuIFRoZSBgdm1fYXJlYV9zdHJ1Y3RgIGlzIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgYnkgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBBcyB0aGVyZSBpcyBubyByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgbGVha2luZyB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlciBzcGFjZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGluIG1tL21lbW9yeS5jIGJ5IGludHJvZHVjaW5nIGEgbmV3IGhlbHBlciB2bWFfaXNfZmF1bHRlZCgpIHVzaW5nIGRhdGFfcmFjZSgpIGFuZCB1cGRhdGluZyBfX3ZtZl9hbm9uX3ByZXBhcmUoKS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBmYXVsdCBwcmVwYXJhdGlvbiBwYXRocyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byB2ZXJpZnkgbG9ja2xlc3MgY29uY3VycmVuY3kgaW52YXJpYW50cyBhbmQgbWVtb3J5IG9yZGVyaW5nIGJlaGF2aW9yLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMzowNDowMi41OTI0NzUwOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYxMDM3NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjNmYmRhYjdiN2RhOTA2MDM5ZjY5N2E0N2M2MmM1OTQ2Y2U1MWE5NFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCA5IDEzOjA0OjAxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcXG5pbmRleCA2YjgyODBjZmMxZGJlLi5kODVkNjc5Mjc0MDBiIDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeS5jXFxuKysrIGIvbW0vbWVtb3J5LmNcXG5AQCAtMzgwMCw2ICszODAwLDI1IEBAIHN0YXRpYyBpbmxpbmUgdm1fZmF1bHRfdCB2bWZfY2FuX2NhbGxfZmF1bHQoY29uc3Qgc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuIFxcdHJldHVybiBWTV9GQVVMVF9SRVRSWTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHZtYV9pc19mYXVsdGVkIC0gY2hlY2sgaWYgYSB2bWEgaGFzIGJlZW4gZmF1bHRlZFxcbisgKiBAdm1hOiB0aGUgdm1hIHRvIGNoZWNrXFxuKyAqXFxuKyAqIFRoaXMgaXMgYSBsb2NrbGVzcyBhY2Nlc3MgdGhhdCBtYXkgcmFjZSB3aXRoIF9fYW5vbl92bWFfcHJlcGFyZSgpLlxcbisgKiBUaGUgcmFjZSBpcyBzYWZlIGJlY2F1c2U6XFxuKyAqIC0gVGhlIGZhdWx0IGhhbmRsZXIgZW5zdXJlcyB0aGF0IHRoZSBtYXBwaW5nIG9mIG1lbW9yeSBpcyBvcmRlcmVkLlxcbisgKiAtIElmIHdlIHJlYWQgTlVMTCwgdGhlIGNhbGxlciB3aWxsIHJlLWNoZWNrXFxuKyAqIC0gVGhlIHBhZ2VfdGFibGVfbG9jayBwcm92aWRlcyBBQ1FVSVJFIHNlbWFudGljcyBmb3IgbWVtb3J5IG9yZGVyaW5nXFxuKyAqXFxuKyAqIFJldHVybjogdHJ1ZSBpZiB2bWEtXFx1MDAzZWFub25fdm1hIGlzIG5vbi1OVUxMLCBmYWxzZSBvdGhlcndpc2VcXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfZmF1bHRlZChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4re1xcbitcXHQvKiBMb2NrbGVzcyBjaGVjayAtIHNhZmUgYmVjYXVzZSB3ZSByZS12YWxpZGF0ZSB1bmRlciBwYWdlX3RhYmxlX2xvY2sgKi9cXG4rXFx0cmV0dXJuIGRhdGFfcmFjZSh2bWEtXFx1MDAzZWFub25fdm1hKTtcXG4rfVxcbitcXG4rXFxuIC8qKlxcbiAgKiBfX3ZtZl9hbm9uX3ByZXBhcmUgLSBQcmVwYXJlIHRvIGhhbmRsZSBhbiBhbm9ueW1vdXMgZmF1bHQuXFxuICAqIEB2bWY6IFRoZSB2bV9mYXVsdCBkZXNjcmlwdG9yIHBhc3NlZCBmcm9tIHRoZSBmYXVsdCBoYW5kbGVyLlxcbkBAIC0zODE5LDggKzM4MzgsNyBAQCB2bV9mYXVsdF90IF9fdm1mX2Fub25fcHJlcGFyZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4ge1xcbiBcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi1cXHUwMDNldm1hO1xcbiBcXHR2bV9mYXVsdF90IHJldCA9IDA7XFxuLVxcbi1cXHRpZiAobGlrZWx5KHZtYS1cXHUwMDNlYW5vbl92bWEpKVxcbitcXHRpZiAobGlrZWx5KHZtYV9pc19mYXVsdGVkKHZtYSkpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0aWYgKHZtZi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBGQVVMVF9GTEFHX1ZNQV9MT0NLKSB7XFxuIFxcdFxcdGlmICghbW1hcF9yZWFkX3RyeWxvY2sodm1hLVxcdTAwM2V2bV9tbSkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEzOjA0OjAzLjE1NDIzODU3MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjgzMzAxMDk1MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX192bWZfYW5vbl9wcmVwYXJlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGluIG1tL21lbW9yeS5jIGJ5IGludHJvZHVjaW5nIGEgbmV3IGhlbHBlciB2bWFfaXNfZmF1bHRlZCgpIHVzaW5nIGRhdGFfcmFjZSgpIGFuZCB1cGRhdGluZyBfX3ZtZl9hbm9uX3ByZXBhcmUoKS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBmYXVsdCBwcmVwYXJhdGlvbiBwYXRocyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byB2ZXJpZnkgbG9ja2xlc3MgY29uY3VycmVuY3kgaW52YXJpYW50cyBhbmQgbWVtb3J5IG9yZGVyaW5nIGJlaGF2aW9yLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGIzZmJkYWI3YjdkYTkwNjAzOWY2OTdhNDdjNjJjNTk0NmNlNTFhOTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDEzOjA0OjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggNmI4MjgwY2ZjMWRiZS4uZDg1ZDY3OTI3NDAwYiAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4rKysgYi9tbS9tZW1vcnkuY1xuQEAgLTM4MDAsNiArMzgwMCwyNSBAQCBzdGF0aWMgaW5saW5lIHZtX2ZhdWx0X3Qgdm1mX2Nhbl9jYWxsX2ZhdWx0KGNvbnN0IHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0cmV0dXJuIFZNX0ZBVUxUX1JFVFJZO1xuIH1cbiBcbisvKipcbisgKiB2bWFfaXNfZmF1bHRlZCAtIGNoZWNrIGlmIGEgdm1hIGhhcyBiZWVuIGZhdWx0ZWRcbisgKiBAdm1hOiB0aGUgdm1hIHRvIGNoZWNrXG4rICpcbisgKiBUaGlzIGlzIGEgbG9ja2xlc3MgYWNjZXNzIHRoYXQgbWF5IHJhY2Ugd2l0aCBfX2Fub25fdm1hX3ByZXBhcmUoKS5cbisgKiBUaGUgcmFjZSBpcyBzYWZlIGJlY2F1c2U6XG4rICogLSBUaGUgZmF1bHQgaGFuZGxlciBlbnN1cmVzIHRoYXQgdGhlIG1hcHBpbmcgb2YgbWVtb3J5IGlzIG9yZGVyZWQuXG4rICogLSBJZiB3ZSByZWFkIE5VTEwsIHRoZSBjYWxsZXIgd2lsbCByZS1jaGVja1xuKyAqIC0gVGhlIHBhZ2VfdGFibGVfbG9jayBwcm92aWRlcyBBQ1FVSVJFIHNlbWFudGljcyBmb3IgbWVtb3J5IG9yZGVyaW5nXG4rICpcbisgKiBSZXR1cm46IHRydWUgaWYgdm1hLVx1MDAzZWFub25fdm1hIGlzIG5vbi1OVUxMLCBmYWxzZSBvdGhlcndpc2VcbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2wgdm1hX2lzX2ZhdWx0ZWQoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4re1xuK1x0LyogTG9ja2xlc3MgY2hlY2sgLSBzYWZlIGJlY2F1c2Ugd2UgcmUtdmFsaWRhdGUgdW5kZXIgcGFnZV90YWJsZV9sb2NrICovXG4rXHRyZXR1cm4gZGF0YV9yYWNlKHZtYS1cdTAwM2Vhbm9uX3ZtYSk7XG4rfVxuK1xuK1xuIC8qKlxuICAqIF9fdm1mX2Fub25fcHJlcGFyZSAtIFByZXBhcmUgdG8gaGFuZGxlIGFuIGFub255bW91cyBmYXVsdC5cbiAgKiBAdm1mOiBUaGUgdm1fZmF1bHQgZGVzY3JpcHRvciBwYXNzZWQgZnJvbSB0aGUgZmF1bHQgaGFuZGxlci5cbkBAIC0zODE5LDggKzM4MzgsNyBAQCB2bV9mYXVsdF90IF9fdm1mX2Fub25fcHJlcGFyZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiB7XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi1cdTAwM2V2bWE7XG4gXHR2bV9mYXVsdF90IHJldCA9IDA7XG4tXG4tXHRpZiAobGlrZWx5KHZtYS1cdTAwM2Vhbm9uX3ZtYSkpXG4rXHRpZiAobGlrZWx5KHZtYV9pc19mYXVsdGVkKHZtYSkpKVxuIFx0XHRyZXR1cm4gMDtcbiBcdGlmICh2bWYtXHUwMDNlZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfVk1BX0xPQ0spIHtcbiBcdFx0aWYgKCFtbWFwX3JlYWRfdHJ5bG9jayh2bWEtXHUwMDNldm1fbW0pKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTM6MDQ6MDMuMTU0MjQwODIxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjEzMzk4NTkyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoOiBgbW0vbWVtb3J5LmNgIExpbmUgMzgwMCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IGRpc3NlY3QgdGhpcyBhbmQgZW5zdXJlIEkgZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGNhcmVmdWxseSByZXZpZXcgYm90aCB0aGUgcGF0Y2ggaXRzZWxmIGFuZCBhbnkgYWNjb21wYW55aW5nIGluc3RydWN0aW9ucyBvciBkb2N1bWVudGF0aW9uLiBUaGUgdGFyZ2V0IGZpbGUgaXMgYG1tL21lbW9yeS5jYCwgd2hpY2ggYWx3YXlzIHdhcnJhbnRzIGNsb3NlIGF0dGVudGlvbiBnaXZlbiBpdHMgY3JpdGljYWwgcm9sZS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgZ2V0IG15IGJlYXJpbmdzIHVzaW5nIGByZWFkLWZpbGVgIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IHNlY3Rpb24gb2YgYG1tL21lbW9yeS5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDM4MDAuIFRoaXMgc2hvdWxkIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBjb250ZXh0IHRvIGFzc2VzcyB0aGUgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE5NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTM6MDQ6MDkuMjg4MjI4ODY2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE0NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbW9yeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM3OTAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM3OTA6XFx0ICogdm1fb3BzIHRoYXQgaGF2ZSBhIC1cXHUwMDNlbWFwX3BhZ2VzIGhhdmUgYmVlbiBhdWRpdGVkIGFuZCBkb24ndCBuZWVkXFxuMzc5MTpcXHQgKiB0aGUgbW1hcF9sb2NrIHRvIGJlIGhlbGQuXFxuMzc5MjpcXHQgKi9cXG4zNzkzOlxcdHN0YXRpYyBpbmxpbmUgdm1fZmF1bHRfdCB2bWZfY2FuX2NhbGxfZmF1bHQoY29uc3Qgc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuMzc5NDpcXHR7XFxuMzc5NTpcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi1cXHUwMDNldm1hO1xcbjM3OTY6XFx0XFxuMzc5NzpcXHRcXHRpZiAodm1hLVxcdTAwM2V2bV9vcHMtXFx1MDAzZW1hcF9wYWdlcyB8fCAhKHZtZi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBGQVVMVF9GTEFHX1ZNQV9MT0NLKSlcXG4zNzk4OlxcdFxcdFxcdHJldHVybiAwO1xcbjM3OTk6XFx0XFx0dm1hX2VuZF9yZWFkKHZtYSk7XFxuMzgwMDpcXHRcXHRyZXR1cm4gVk1fRkFVTFRfUkVUUlk7XFxuMzgwMTpcXHR9XFxuMzgwMjpcXHRcXG4zODAzOlxcdC8qKlxcbjM4MDQ6XFx0ICogdm1hX2lzX2ZhdWx0ZWQgLSBjaGVjayBpZiBhIHZtYSBoYXMgYmVlbiBmYXVsdGVkXFxuMzgwNTpcXHQgKiBAdm1hOiB0aGUgdm1hIHRvIGNoZWNrXFxuMzgwNjpcXHQgKlxcbjM4MDc6XFx0ICogVGhpcyBpcyBhIGxvY2tsZXNzIGFjY2VzcyB0aGF0IG1heSByYWNlIHdpdGggX19hbm9uX3ZtYV9wcmVwYXJlKCkuXFxuMzgwODpcXHQgKiBUaGUgcmFjZSBpcyBzYWZlIGJlY2F1c2U6XFxuMzgwOTpcXHQgKiAtIFRoZSBmYXVsdCBoYW5kbGVyIGVuc3VyZXMgdGhhdCB0aGUgbWFwcGluZyBvZiBtZW1vcnkgaXMgb3JkZXJlZC5cXG4zODEwOlxcdCAqIC0gSWYgd2UgcmVhZCBOVUxMLCB0aGUgY2FsbGVyIHdpbGwgcmUtY2hlY2tcXG4zODExOlxcdCAqIC0gVGhlIHBhZ2VfdGFibGVfbG9jayBwcm92aWRlcyBBQ1FVSVJFIHNlbWFudGljcyBmb3IgbWVtb3J5IG9yZGVyaW5nXFxuMzgxMjpcXHQgKlxcbjM4MTM6XFx0ICogUmV0dXJuOiB0cnVlIGlmIHZtYS1cXHUwMDNlYW5vbl92bWEgaXMgbm9uLU5VTEwsIGZhbHNlIG90aGVyd2lzZVxcbjM4MTQ6XFx0ICovXFxuMzgxNTpcXHRzdGF0aWMgaW5saW5lIGJvb2wgdm1hX2lzX2ZhdWx0ZWQoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuMzgxNjpcXHR7XFxuMzgxNzpcXHRcXHQvKiBMb2NrbGVzcyBjaGVjayAtIHNhZmUgYmVjYXVzZSB3ZSByZS12YWxpZGF0ZSB1bmRlciBwYWdlX3RhYmxlX2xvY2sgKi9cXG4zODE4OlxcdFxcdHJldHVybiBkYXRhX3JhY2Uodm1hLVxcdTAwM2Vhbm9uX3ZtYSk7XFxuMzgxOTpcXHR9XFxuMzgyMDpcXHRcXG4zODIxOlxcdFxcbjM4MjI6XFx0LyoqXFxuMzgyMzpcXHQgKiBfX3ZtZl9hbm9uX3ByZXBhcmUgLSBQcmVwYXJlIHRvIGhhbmRsZSBhbiBhbm9ueW1vdXMgZmF1bHQuXFxuMzgyNDpcXHQgKiBAdm1mOiBUaGUgdm1fZmF1bHQgZGVzY3JpcHRvciBwYXNzZWQgZnJvbSB0aGUgZmF1bHQgaGFuZGxlci5cXG4zODI1OlxcdCAqXFxuMzgyNjpcXHQgKiBXaGVuIHByZXBhcmluZyB0byBpbnNlcnQgYW4gYW5vbnltb3VzIHBhZ2UgaW50byBhIFZNQSBmcm9tIGFcXG4zODI3OlxcdCAqIGZhdWx0IGhhbmRsZXIsIGNhbGwgdGhpcyBmdW5jdGlvbiByYXRoZXIgdGhhbiBhbm9uX3ZtYV9wcmVwYXJlKCkuXFxuMzgyODpcXHQgKiBJZiB0aGlzIHZtYSBkb2VzIG5vdCBhbHJlYWR5IGhhdmUgYW4gYXNzb2NpYXRlZCBhbm9uX3ZtYSBhbmQgd2UgYXJlXFxuMzgyOTpcXHQgKiBvbmx5IHByb3RlY3RlZCBieSB0aGUgcGVyLVZNQSBsb2NrLCB0aGUgY2FsbGVyIG11c3QgcmV0cnkgd2l0aCB0aGVcXG4zODMwOlxcdCAqIG1tYXBfbG9jayBoZWxkLiAgX19hbm9uX3ZtYV9wcmVwYXJlKCkgd2lsbCBsb29rIGF0IGFkamFjZW50IFZNQXMgdG9cXG4zODMxOlxcdCAqIGRldGVybWluZSBpZiB0aGlzIFZNQSBjYW4gc2hhcmUgaXRzIGFub25fdm1hLCBhbmQgdGhhdCdzIG5vdCBzYWZlIHRvXFxuMzgzMjpcXHQgKiBkbyB3aXRoIG9ubHkgdGhlIHBlci1WTUEgbG9jayBoZWxkIGZvciB0aGlzIFZNQS5cXG4zODMzOlxcdCAqXFxuMzgzNDpcXHQgKiBSZXR1cm46IDAgaWYgZmF1bHQgaGFuZGxpbmcgY2FuIHByb2NlZWQuICBBbnkgb3RoZXIgdmFsdWUgc2hvdWxkIGJlXFxuMzgzNTpcXHQgKiByZXR1cm5lZCB0byB0aGUgY2FsbGVyLlxcbjM4MzY6XFx0ICovXFxuMzgzNzpcXHR2bV9mYXVsdF90IF9fdm1mX2Fub25fcHJlcGFyZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4zODM4OlxcdHtcXG4zODM5OlxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mLVxcdTAwM2V2bWE7XFxuMzg0MDpcXHRcXHR2bV9mYXVsdF90IHJldCA9IDA7XFxuMzg0MTpcXHRcXHRpZiAobGlrZWx5KHZtYV9pc19mYXVsdGVkKHZtYSkpKVxcbjM4NDI6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMzg0MzpcXHRcXHRpZiAodm1mLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZBVUxUX0ZMQUdfVk1BX0xPQ0spIHtcXG4zODQ0OlxcdFxcdFxcdGlmICghbW1hcF9yZWFkX3RyeWxvY2sodm1hLVxcdTAwM2V2bV9tbSkpXFxuMzg0NTpcXHRcXHRcXHRcXHRyZXR1cm4gVk1fRkFVTFRfUkVUUlk7XFxuMzg0NjpcXHRcXHR9XFxuMzg0NzpcXHRcXHRpZiAoX19hbm9uX3ZtYV9wcmVwYXJlKHZtYSkpXFxuMzg0ODpcXHRcXHRcXHRyZXQgPSBWTV9GQVVMVF9PT007XFxuMzg0OTpcXHRcXHRpZiAodm1mLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZBVUxUX0ZMQUdfVk1BX0xPQ0spXFxuMzg1MDpcXHRcXHRcXHRtbWFwX3JlYWRfdW5sb2NrKHZtYS1cXHUwMDNldm1fbW0pO1xcbjM4NTE6XFx0XFx0cmV0dXJuIHJldDtcXG4zODUyOlxcdH1cXG4zODUzOlxcdFxcbjM4NTQ6XFx0LypcXG4zODU1OlxcdCAqIEhhbmRsZSB0aGUgY2FzZSBvZiBhIHBhZ2Ugd2hpY2ggd2UgYWN0dWFsbHkgbmVlZCB0byBjb3B5IHRvIGEgbmV3IHBhZ2UsXFxuMzg1NjpcXHQgKiBlaXRoZXIgZHVlIHRvIENPVyBvciB1bnNoYXJpbmcuXFxuMzg1NzpcXHQgKlxcbjM4NTg6XFx0ICogQ2FsbGVkIHdpdGggZWl0aGVyIHRoZSBWTUEgbG9jayBvciB0aGUgbW1hcF9sb2NrIGhlbGQgKHNlZSBGQVVMVF9GTEFHX1ZNQV9MT0NLKVxcbjM4NTk6XFx0ICogYW5kIHRoZSBvbGQgcGFnZSByZWZlcmVuY2VkLCBidXQgd2l0aG91dCB0aGUgcHRsIGhlbGQuXFxuMzg2MDpcXHQgKlxcbjM4NjE6XFx0ICogSGlnaCBsZXZlbCBsb2dpYyBmbG93OlxcbjM4NjI6XFx0ICpcXG4zODYzOlxcdCAqIC0gQWxsb2NhdGUgYSBwYWdlLCBjb3B5IHRoZSBjb250ZW50IG9mIHRoZSBvbGQgcGFnZSB0byB0aGUgbmV3IG9uZS5cXG4zODY0OlxcdCAqIC0gSGFuZGxlIGJvb2sga2VlcGluZyBhbmQgYWNjb3VudGluZyAtIGNncm91cHMsIG1tdS1ub3RpZmllcnMsIGV0Yy5cXG4zODY1OlxcdCAqIC0gVGFrZSB0aGUgUFRMLiBJZiB0aGUgcHRlIGNoYW5nZWQsIGJhaWwgb3V0IGFuZCByZWxlYXNlIHRoZSBhbGxvY2F0ZWQgcGFnZVxcbjM4NjY6XFx0ICogLSBJZiB0aGUgcHRlIGlzIHN0aWxsIHRoZSB3YXkgd2UgcmVtZW1iZXIgaXQsIHVwZGF0ZSB0aGUgcGFnZSB0YWJsZSBhbmQgYWxsXFxuMzg2NzpcXHQgKiAgIHJlbGV2YW50IHJlZmVyZW5jZXMuIFRoaXMgaW5jbHVkZXMgZHJvcHBpbmcgdGhlIHJlZmVyZW5jZSB0aGUgcGFnZS10YWJsZVxcbjM4Njg6XFx0ICogICBoZWxkIHRvIHRoZSBvbGQgcGFnZSwgYXMgd2VsbCBhcyB1cGRhdGluZyB0aGUgcm1hcC5cXG4zODY5OlxcdCAqIC0gSW4gYW55IGNhc2UsIHVubG9jayB0aGUgUFRMIGFuZCBkcm9wIHRoZSByZWZlcmVuY2Ugd2UgdG9vayB0byB0aGUgb2xkIHBhZ2UuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEzOjA0OjA5LjI4ODY0NjQzNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc3OTY1NzE1NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQcm9wb3NlZCBQYXRjaDogQSBNZW1vcnkgTWFuYWdlbWVudCBQZXJzcGVjdGl2ZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGlzIGluIGBtbS9tZW1vcnkuY2AsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIG15IGF0dGVudGlvbiDigJMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBpcyBhbHdheXMgYSBjcml0aWNhbCBhcmVhLiBJdCBpbnRyb2R1Y2VzIGB2bWFfaXNfZmF1bHRlZCh2bWEpYCwgd2hpY2ggd3JhcHMgYSBgZGF0YV9yYWNlYCBjaGVjayBvbiBgdm1hLVx1MDAzZWFub25fdm1hYC4gVGhhdCdzIHRvIHN1cHByZXNzIEtDU0FOIHJlcG9ydHMsIG9yIGRvY3VtZW50IHRoZSBkYXRhIHJhY2Ugb24gdGhlIGxvY2tsZXNzIHJlYWQgb2YgYHZtYS1cdTAwM2Vhbm9uX3ZtYWAsIGFuZCByZXBsYWNlcyBhbiBgaWYgKGxpa2VseSh2bWEtXHUwMDNlYW5vbl92bWEpKWAgY2hlY2suXG5cbkZpcnN0LCAqaXMqIHRoaXMgcmVhbGx5IGNvcmUgbW0/IFllcywgYG1tL21lbW9yeS5jYCwgY29uZmlybWVkLiBOb3csIGxldCBtZSBjaGVjayB0aGUgXCJXb3J0aEZ1enppbmdcIiBndWlkZWxpbmVzLiBSaWdodCwgdGhlIGdvYWwgaXMgdG8gZmluZCBjcmFzaGVzIGFuZCBidWdzLCBlc3BlY2lhbGx5IGluIGNvcmUgc3Vic3lzdGVtcyBsaWtlIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGlzIHBhdGNoIGRlZmluaXRlbHkgZmFsbHMgdW5kZXIgdGhhdCBzY29wZSwgZXNwZWNpYWxseSBhcyBpdCB0b3VjaGVzIG9uIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLiBXZSBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0aGlzIGNoYW5nZSBpbXBhY3RzIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGFsZ29yaXRobXMuXG5cbk5vdywgd2hhdCBpcyB0aGlzIGB2bWFfaXNfZmF1bHRlZGAgZG9pbmc/IEl0J3MgYSBzdGF0aWMgaW5saW5lIGhlbHBlci4gVGhlIGltcG9ydGFudCBwYXJ0IGlzIHRoYXQgYF9fdm1mX2Fub25fcHJlcGFyZWAgaXMgY2FsbGVkIGluIHJlbGF0aW9uIHRvIGFub255bW91cyBwYWdlIGZhdWx0cy4gT2theSwgbGV0J3MgY2lyY2xlIGJhY2sgdG8gdGhlIEZvY3VzU3ltYm9scyBndWlkYW5jZS4gUmlnaHQsIHRoZSBmdXp6aW5nIGRvY3VtZW50YXRpb24gdGVsbHMgbWUgdG8gYXZvaWQgdWJpcXVpdG91cyBsaWZlY3ljbGUgZnVuY3Rpb25zIGxpa2UgZ2VuZXJhbCBhbGxvY2F0b3JzLCBkZWFsbG9jYXRvcnMsIG9yIHBhZ2UgZmF1bHQgaGFuZGxlcnMuICpBdm9pZCogdGhvc2UhIEluc3RlYWQsIHRhcmdldCB0aGUgKnNwZWNpZmljIGZlYXR1cmUgbG9naWMqLiBIbW0sIGFuZCB0aGlzIGd1aWRhbmNlIGlzIGltcG9ydGFudDogc3RhdGljIGlubGluZXMgaW4gaGVhZGVycyBsYWNrIGRpc3RpbmN0IHN5bWJvbHMuIEkgbmVlZCB0byBmb2N1cyBvbiBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljICpjYWxsZXIqIGZ1bmN0aW9ucy5cblxuU28sIEkgbmVlZCB0byBmaW5kIHRoZSBub24tc3RhdGljIGZ1bmN0aW9uIG1vZGlmaWVkLCBhbmQgdGhhdCBpcyBgX192bWZfYW5vbl9wcmVwYXJlYCEgVGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHdoZXJlIGl0J3MgY2FsbGVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSBhbmQgaG93IHRvIGJlc3QgZ3VpZGUgdGhlIGZ1enplci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg0MCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEzOjA0OjE3LjA4NTIyMDM2MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzUyMTg3NzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fdm1mX2Fub25fcHJlcGFyZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdldGxiLmM9NTQyMz1zdGF0aWMgdm1fZmF1bHRfdCBodWdldGxiX3dwKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vaHVnZXRsYi5jLTU1NjAtXFx0ICovXFxubW0vaHVnZXRsYi5jOjU1NjE6XFx0cmV0ID0gX192bWZfYW5vbl9wcmVwYXJlKHZtZik7XFxubW0vaHVnZXRsYi5jLTU1NjItXFx0aWYgKHVubGlrZWx5KHJldCkpXFxuLS1cXG5tbS9odWdldGxiLmM9NTY5NT1zdGF0aWMgdm1fZmF1bHRfdCBodWdldGxiX25vX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9odWdldGxiLmMtNTc1OS1cXHRcXHRpZiAoISh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fTUFZU0hBUkUpKSB7XFxubW0vaHVnZXRsYi5jOjU3NjA6XFx0XFx0XFx0cmV0ID0gX192bWZfYW5vbl9wcmVwYXJlKHZtZik7XFxubW0vaHVnZXRsYi5jLTU3NjEtXFx0XFx0XFx0aWYgKHVubGlrZWx5KHJldCkpXFxuLS1cXG5tbS9odWdldGxiLmMtNTg5OS1cXHQvKlxcbm1tL2h1Z2V0bGIuYzo1OTAwOlxcdCAqIFdlIG11c3QgY2hlY2sgdG8gcmVsZWFzZSB0aGUgcGVyLVZNQSBsb2NrLiBfX3ZtZl9hbm9uX3ByZXBhcmUoKSBpc1xcbm1tL2h1Z2V0bGIuYy01OTAxLVxcdCAqIHRoZSBvbmx5IHdheSByZXQgY2FuIGJlIHNldCB0byBWTV9GQVVMVF9SRVRSWS5cXG4tLVxcbm1tL2h1Z2V0bGIuYz01OTQ1PXZtX2ZhdWx0X3QgaHVnZXRsYl9mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtNjExMS1cXHQvKlxcbm1tL2h1Z2V0bGIuYzo2MTEyOlxcdCAqIFdlIG11c3QgY2hlY2sgdG8gcmVsZWFzZSB0aGUgcGVyLVZNQSBsb2NrLiBfX3ZtZl9hbm9uX3ByZXBhcmUoKSBpblxcbm1tL2h1Z2V0bGIuYy02MTEzLVxcdCAqIGh1Z2V0bGJfd3AoKSBpcyB0aGUgb25seSB3YXkgcmV0IGNhbiBiZSBzZXQgdG8gVk1fRkFVTFRfUkVUUlkuXFxuLS1cXG5tbS9pbnRlcm5hbC5oPTQ4Mj1zdGF0aWMgaW5saW5lIHZvaWQgd2FrZV90aHJvdHRsZV9pc29sYXRlZChwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vaW50ZXJuYWwuaC00OTAtXFxubW0vaW50ZXJuYWwuaDo0OTE6dm1fZmF1bHRfdCBfX3ZtZl9hbm9uX3ByZXBhcmUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpO1xcbm1tL2ludGVybmFsLmgtNDkyLXN0YXRpYyBpbmxpbmUgdm1fZmF1bHRfdCB2bWZfYW5vbl9wcmVwYXJlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbm1tL2ludGVybmFsLmgtNDkzLXtcXG5tbS9pbnRlcm5hbC5oOjQ5NDpcXHR2bV9mYXVsdF90IHJldCA9IF9fdm1mX2Fub25fcHJlcGFyZSh2bWYpO1xcbm1tL2ludGVybmFsLmgtNDk1LVxcbi0tXFxubW0vbWVtb3J5LmM9MzgxNT1zdGF0aWMgaW5saW5lIGJvb2wgdm1hX2lzX2ZhdWx0ZWQoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9tZW1vcnkuYy0zODIyLS8qKlxcbm1tL21lbW9yeS5jOjM4MjM6ICogX192bWZfYW5vbl9wcmVwYXJlIC0gUHJlcGFyZSB0byBoYW5kbGUgYW4gYW5vbnltb3VzIGZhdWx0Llxcbm1tL21lbW9yeS5jLTM4MjQtICogQHZtZjogVGhlIHZtX2ZhdWx0IGRlc2NyaXB0b3IgcGFzc2VkIGZyb20gdGhlIGZhdWx0IGhhbmRsZXIuXFxuLS1cXG5tbS9tZW1vcnkuYy0zODM2LSAqL1xcbm1tL21lbW9yeS5jOjM4Mzc6dm1fZmF1bHRfdCBfX3ZtZl9hbm9uX3ByZXBhcmUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxubW0vbWVtb3J5LmMtMzgzOC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEzOjA0OjE4LjgzNzQxNDY1MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MTUzMDE0MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgdm1mX2Fub25fcHJlcGFyZWAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYF9fdm1mX2Fub25fcHJlcGFyZWAuIFJpZ2h0LCBzbyBpdCdzIGRlZmluZWQgaW4gYG1tL21lbW9yeS5jYCBhbmQgZGVjbGFyZWQgaW4gYG1tL2ludGVybmFsLmhgLiBUaGF0IG1ha2VzIHNlbnNlOyBgbW0vYCBpcyB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdHVmZi4gTm93LCBJIG5lZWQgdG8ga25vdyBob3cgaXQncyAqdXNlZCouIFRoZSBiZXN0IHdheSB0byBkbyB0aGF0IGlzIHRvIGNoZWNrIHdoZXJlIGl0J3MgY2FsbGVkLiBUaW1lIGZvciBhIHF1aWNrIGBncmVwYCBzZWFyY2ggZm9yIGB2bWZfYW5vbl9wcmVwYXJlYC4gTGV0J3Mgc2VlIHdoYXQgdHVybnMgdXAuIEhvcGVmdWxseSwgdGhhdCB3aWxsIGdpdmUgbWUgc29tZSBjb250ZXh0IGFyb3VuZCB0aGUgaW50ZW50IGFuZCBmdW5jdGlvbiBvZiB0aGlzIHByZXBhcmF0aW9uIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjU3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTM6MDQ6MjAuNzUyNzE4MzQ5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NzU5OTcyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1mX2Fub25fcHJlcGFyZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTE1MTk9dm1fZmF1bHRfdCBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTUyNi1cXHRcXHRyZXR1cm4gVk1fRkFVTFRfRkFMTEJBQ0s7XFxubW0vaHVnZV9tZW1vcnkuYzoxNTI3OlxcdHJldCA9IHZtZl9hbm9uX3ByZXBhcmUodm1mKTtcXG5tbS9odWdlX21lbW9yeS5jLTE1MjgtXFx0aWYgKHJldClcXG4tLVxcbm1tL2h1Z2V0bGIuYz01NDIzPXN0YXRpYyB2bV9mYXVsdF90IGh1Z2V0bGJfd3Aoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9odWdldGxiLmMtNTU2MC1cXHQgKi9cXG5tbS9odWdldGxiLmM6NTU2MTpcXHRyZXQgPSBfX3ZtZl9hbm9uX3ByZXBhcmUodm1mKTtcXG5tbS9odWdldGxiLmMtNTU2Mi1cXHRpZiAodW5saWtlbHkocmV0KSlcXG4tLVxcbm1tL2h1Z2V0bGIuYz01Njk1PXN0YXRpYyB2bV9mYXVsdF90IGh1Z2V0bGJfbm9fcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbm1tL2h1Z2V0bGIuYy01NzU5LVxcdFxcdGlmICghKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9NQVlTSEFSRSkpIHtcXG5tbS9odWdldGxiLmM6NTc2MDpcXHRcXHRcXHRyZXQgPSBfX3ZtZl9hbm9uX3ByZXBhcmUodm1mKTtcXG5tbS9odWdldGxiLmMtNTc2MS1cXHRcXHRcXHRpZiAodW5saWtlbHkocmV0KSlcXG4tLVxcbm1tL2h1Z2V0bGIuYy01ODk5LVxcdC8qXFxubW0vaHVnZXRsYi5jOjU5MDA6XFx0ICogV2UgbXVzdCBjaGVjayB0byByZWxlYXNlIHRoZSBwZXItVk1BIGxvY2suIF9fdm1mX2Fub25fcHJlcGFyZSgpIGlzXFxubW0vaHVnZXRsYi5jLTU5MDEtXFx0ICogdGhlIG9ubHkgd2F5IHJldCBjYW4gYmUgc2V0IHRvIFZNX0ZBVUxUX1JFVFJZLlxcbi0tXFxubW0vaHVnZXRsYi5jPTU5NDU9dm1fZmF1bHRfdCBodWdldGxiX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02MTExLVxcdC8qXFxubW0vaHVnZXRsYi5jOjYxMTI6XFx0ICogV2UgbXVzdCBjaGVjayB0byByZWxlYXNlIHRoZSBwZXItVk1BIGxvY2suIF9fdm1mX2Fub25fcHJlcGFyZSgpIGluXFxubW0vaHVnZXRsYi5jLTYxMTMtXFx0ICogaHVnZXRsYl93cCgpIGlzIHRoZSBvbmx5IHdheSByZXQgY2FuIGJlIHNldCB0byBWTV9GQVVMVF9SRVRSWS5cXG4tLVxcbm1tL2ludGVybmFsLmg9NDgyPXN0YXRpYyBpbmxpbmUgdm9pZCB3YWtlX3Rocm90dGxlX2lzb2xhdGVkKHBnX2RhdGFfdCAqcGdkYXQpXFxuLS1cXG5tbS9pbnRlcm5hbC5oLTQ5MC1cXG5tbS9pbnRlcm5hbC5oOjQ5MTp2bV9mYXVsdF90IF9fdm1mX2Fub25fcHJlcGFyZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XFxubW0vaW50ZXJuYWwuaDo0OTI6c3RhdGljIGlubGluZSB2bV9mYXVsdF90IHZtZl9hbm9uX3ByZXBhcmUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxubW0vaW50ZXJuYWwuaC00OTMte1xcbm1tL2ludGVybmFsLmg6NDk0OlxcdHZtX2ZhdWx0X3QgcmV0ID0gX192bWZfYW5vbl9wcmVwYXJlKHZtZik7XFxubW0vaW50ZXJuYWwuaC00OTUtXFxuLS1cXG5tbS9tZW1vcnkuYz0zODE1PXN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfZmF1bHRlZChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL21lbW9yeS5jLTM4MjItLyoqXFxubW0vbWVtb3J5LmM6MzgyMzogKiBfX3ZtZl9hbm9uX3ByZXBhcmUgLSBQcmVwYXJlIHRvIGhhbmRsZSBhbiBhbm9ueW1vdXMgZmF1bHQuXFxubW0vbWVtb3J5LmMtMzgyNC0gKiBAdm1mOiBUaGUgdm1fZmF1bHQgZGVzY3JpcHRvciBwYXNzZWQgZnJvbSB0aGUgZmF1bHQgaGFuZGxlci5cXG4tLVxcbm1tL21lbW9yeS5jLTM4MzYtICovXFxubW0vbWVtb3J5LmM6MzgzNzp2bV9mYXVsdF90IF9fdm1mX2Fub25fcHJlcGFyZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG5tbS9tZW1vcnkuYy0zODM4LXtcXG4tLVxcbm1tL21lbW9yeS5jPTM4NzE9c3RhdGljIHZtX2ZhdWx0X3Qgd3BfcGFnZV9jb3B5KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtMzg4Ny1cXHRcXHRvbGRfZm9saW8gPSBwYWdlX2ZvbGlvKHZtZi1cXHUwMDNlcGFnZSk7XFxubW0vbWVtb3J5LmM6Mzg4ODpcXHRyZXQgPSB2bWZfYW5vbl9wcmVwYXJlKHZtZik7XFxubW0vbWVtb3J5LmMtMzg4OS1cXHRpZiAodW5saWtlbHkocmV0KSlcXG4tLVxcbm1tL21lbW9yeS5jPTUzMDU9c3RhdGljIHZtX2ZhdWx0X3QgZG9fYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy01MzU1LVxcdC8qIEFsbG9jYXRlIG91ciBvd24gcHJpdmF0ZSBwYWdlLiAqL1xcbm1tL21lbW9yeS5jOjUzNTY6XFx0cmV0ID0gdm1mX2Fub25fcHJlcGFyZSh2bWYpO1xcbm1tL21lbW9yeS5jLTUzNTctXFx0aWYgKHJldClcXG4tLVxcbm1tL21lbW9yeS5jPTU4OTA9c3RhdGljIHZtX2ZhdWx0X3QgZG9fY293X2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNTg5Ny1cXHRpZiAoIXJldClcXG5tbS9tZW1vcnkuYzo1ODk4OlxcdFxcdHJldCA9IHZtZl9hbm9uX3ByZXBhcmUodm1mKTtcXG5tbS9tZW1vcnkuYy01ODk5LVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEzOjA0OjIyLjUyODcyMTI0OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYwNjY2Mjc1NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCB3YXJyYW50cyBmdXp6aW5nIGJhc2VkIG9uIFdvcnRoRnV6emluZyBjcml0ZXJpYS4gVGhpcyBwYXRjaCBtb2RpZmllcyBgbW0vbWVtb3J5LmNgLCBzcGVjaWZpY2FsbHkgYF9fdm1mX2Fub25fcHJlcGFyZWAuIEl0IGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gY2FsbCBgdm1hX2lzX2ZhdWx0ZWRgIHdoaWNoIHNlZW1zIHRvIGJlIGEgc3RhdGljIGlubGluZSBmdW5jdGlvbi4gQmVjYXVzZSBpdCdzIGEgbW9kaWZpY2F0aW9uIHRvIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKGBtbS9gKSwgV29ydGhGdXp6aW5nIGlzIGRlZmluaXRpdmVseSB0cnVlLCBJJ2QgZmxhZyB0aGlzIGZvciBmdXp6aW5nLlxuXG5OZXh0LCBJIG5lZWQgdG8gZXZhbHVhdGUgRm9jdXNTeW1ib2xzLiBUaGUgcXVlc3Rpb24gbm93IGlzIHdoZXRoZXIgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGlzIGEgc3VpdGFibGUgdGFyZ2V0LiBJIG5lZWQgdG8gYXZvaWQgdWJpcXVpdG91cyBsaWZlY3ljbGUgaG90LXBhdGhzLiAgSW5pdGlhbGx5LCBJIGNvbnNpZGVyZWQgaWYgYF9fdm1mX2Fub25fcHJlcGFyZWAgaXMgYSBjb21tb25seSBleGVjdXRlZCBmdW5jdGlvbi4gQnV0IHdhaXQsIGBfX3ZtZl9hbm9uX3ByZXBhcmVgIGlzIGNhbGxlZCBpbiB0aGUgcHJlcGFyYXRpb24gdG8gaGFuZGxlIGFub255bW91cyBmYXVsdHMuIEZ1cnRoZXIgaW52ZXN0aWdhdGlvbiByZXZlYWxzIHRoYXQgYF9fdm1mX2Fub25fcHJlcGFyZWAgaXMgYSBub24tc3RhdGljIHN5bWJvbC4gU2luY2UgYHZtYV9pc19mYXVsdGVkYCBpcyBhIHN0YXRpYyBpbmxpbmUsIGl0J3MgY29tcGlsZWQgaW50byBgX192bWZfYW5vbl9wcmVwYXJlYC4gVGhlcmVmb3JlLCBgX192bWZfYW5vbl9wcmVwYXJlYCBpcyB0aGUgZXhhY3QgZnVuY3Rpb24gd2hlcmUgdGhlIGNvZGUgaXMgY29tcGlsZWQgaW50bywgSSBoYXZlIHRoZSBjb3JyZWN0IGZ1bmN0aW9uIHN5bWJvbC4gWWVzLCBgX192bWZfYW5vbl9wcmVwYXJlYCBpcyB0aGUgcmlnaHQgZm9jdXMgc3ltYm9sLlxuXG5GaW5hbGx5LCByZWdhcmRpbmcgRW5hYmxlQ29uZmlncywgdGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBzbyBhbnkgc3RhbmRhcmQga2VybmVsIGNvbmZpZ3VyYXRpb24gd2l0aCBNTVUgc3VwcG9ydCBzaG91bGQgYmUgc3VmZmljaWVudC4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmxvY2tzIChgI2lmZGVmYCkgdGhhdCBtaWdodCBpbXBhY3QgdGhlIGNvZGUgYXJvdW5kIHRoaXMgc2VjdGlvbiwgYnV0IGl0IHNlZW1zIHVubGlrZWx5IGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZS4gVGhpcyBjaGFuZ2UgbG9va3Mgc3RyYWlnaHRmb3J3YXJkOyBzdGFuZGFyZCBrZXJuZWwgY29uZmlncyBzaG91bGQgYXBwbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwODEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEzOjA0OjI4LjU5NTM1MjE1NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjg3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtb3J5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzc4MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzc4MDpcXHRcXHRlbnRyeSA9IHB0ZV9ta3lvdW5nKHZtZi1cXHUwMDNlb3JpZ19wdGUpO1xcbjM3ODE6XFx0XFx0ZW50cnkgPSBtYXliZV9ta3dyaXRlKHB0ZV9ta2RpcnR5KGVudHJ5KSwgdm1hKTtcXG4zNzgyOlxcdFxcdGlmIChwdGVwX3NldF9hY2Nlc3NfZmxhZ3Modm1hLCB2bWYtXFx1MDAzZWFkZHJlc3MsIHZtZi1cXHUwMDNlcHRlLCBlbnRyeSwgMSkpXFxuMzc4MzpcXHRcXHRcXHR1cGRhdGVfbW11X2NhY2hlX3JhbmdlKHZtZiwgdm1hLCB2bWYtXFx1MDAzZWFkZHJlc3MsIHZtZi1cXHUwMDNlcHRlLCAxKTtcXG4zNzg0OlxcdFxcdHB0ZV91bm1hcF91bmxvY2sodm1mLVxcdTAwM2VwdGUsIHZtZi1cXHUwMDNlcHRsKTtcXG4zNzg1OlxcdFxcdGNvdW50X3ZtX2V2ZW50KFBHUkVVU0UpO1xcbjM3ODY6XFx0fVxcbjM3ODc6XFx0XFxuMzc4ODpcXHQvKlxcbjM3ODk6XFx0ICogV2UgY291bGQgYWRkIGEgYml0ZmxhZyBzb21ld2hlcmUsIGJ1dCBmb3Igbm93LCB3ZSBrbm93IHRoYXQgYWxsXFxuMzc5MDpcXHQgKiB2bV9vcHMgdGhhdCBoYXZlIGEgLVxcdTAwM2VtYXBfcGFnZXMgaGF2ZSBiZWVuIGF1ZGl0ZWQgYW5kIGRvbid0IG5lZWRcXG4zNzkxOlxcdCAqIHRoZSBtbWFwX2xvY2sgdG8gYmUgaGVsZC5cXG4zNzkyOlxcdCAqL1xcbjM3OTM6XFx0c3RhdGljIGlubGluZSB2bV9mYXVsdF90IHZtZl9jYW5fY2FsbF9mYXVsdChjb25zdCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4zNzk0OlxcdHtcXG4zNzk1OlxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mLVxcdTAwM2V2bWE7XFxuMzc5NjpcXHRcXG4zNzk3OlxcdFxcdGlmICh2bWEtXFx1MDAzZXZtX29wcy1cXHUwMDNlbWFwX3BhZ2VzIHx8ICEodm1mLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZBVUxUX0ZMQUdfVk1BX0xPQ0spKVxcbjM3OTg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMzc5OTpcXHRcXHR2bWFfZW5kX3JlYWQodm1hKTtcXG4zODAwOlxcdFxcdHJldHVybiBWTV9GQVVMVF9SRVRSWTtcXG4zODAxOlxcdH1cXG4zODAyOlxcdFxcbjM4MDM6XFx0LyoqXFxuMzgwNDpcXHQgKiB2bWFfaXNfZmF1bHRlZCAtIGNoZWNrIGlmIGEgdm1hIGhhcyBiZWVuIGZhdWx0ZWRcXG4zODA1OlxcdCAqIEB2bWE6IHRoZSB2bWEgdG8gY2hlY2tcXG4zODA2OlxcdCAqXFxuMzgwNzpcXHQgKiBUaGlzIGlzIGEgbG9ja2xlc3MgYWNjZXNzIHRoYXQgbWF5IHJhY2Ugd2l0aCBfX2Fub25fdm1hX3ByZXBhcmUoKS5cXG4zODA4OlxcdCAqIFRoZSByYWNlIGlzIHNhZmUgYmVjYXVzZTpcXG4zODA5OlxcdCAqIC0gVGhlIGZhdWx0IGhhbmRsZXIgZW5zdXJlcyB0aGF0IHRoZSBtYXBwaW5nIG9mIG1lbW9yeSBpcyBvcmRlcmVkLlxcbjM4MTA6XFx0ICogLSBJZiB3ZSByZWFkIE5VTEwsIHRoZSBjYWxsZXIgd2lsbCByZS1jaGVja1xcbjM4MTE6XFx0ICogLSBUaGUgcGFnZV90YWJsZV9sb2NrIHByb3ZpZGVzIEFDUVVJUkUgc2VtYW50aWNzIGZvciBtZW1vcnkgb3JkZXJpbmdcXG4zODEyOlxcdCAqXFxuMzgxMzpcXHQgKiBSZXR1cm46IHRydWUgaWYgdm1hLVxcdTAwM2Vhbm9uX3ZtYSBpcyBub24tTlVMTCwgZmFsc2Ugb3RoZXJ3aXNlXFxuMzgxNDpcXHQgKi9cXG4zODE1OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfZmF1bHRlZChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4zODE2OlxcdHtcXG4zODE3OlxcdFxcdC8qIExvY2tsZXNzIGNoZWNrIC0gc2FmZSBiZWNhdXNlIHdlIHJlLXZhbGlkYXRlIHVuZGVyIHBhZ2VfdGFibGVfbG9jayAqL1xcbjM4MTg6XFx0XFx0cmV0dXJuIGRhdGFfcmFjZSh2bWEtXFx1MDAzZWFub25fdm1hKTtcXG4zODE5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTM6MDQ6MjguNTk1NjI1MjA1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4ODg2OTI4NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgZm9yIFNldHRpbmcgRnV6emluZyBQYXJhbWV0ZXJzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uLCBhbmQgdGhlIGltbWVkaWF0ZSBvYnNlcnZhdGlvbiBpcyB0aGUgY29tcGxldGUgYWJzZW5jZSBvZiBgI2lmZGVmYCBndWFyZHMuIFRoYXQncyBhIGdvb2Qgc2lnbiwgYW5kIHRoZSBNTVUgYmVpbmcgZGVmYXVsdCBmb3IgYW1kNjQgaXMgYWxzbyBzdGFuZGFyZCBiZWhhdmlvciwgc28gbm90aGluZyBqdW1wcyBvdXQgdGhlcmUuXG5cbk5vdywgbGV0J3MgdmVyaWZ5IGlmIGBFbmFibGVDb25maWdzYCBzaG91bGQgaW5kZWVkIGJlIGFuIGVtcHR5IGxpc3QsIGBbXWAuIFllcCwgdGhhdCdzIGNvcnJlY3QgZm9yIHRoZSBzdGFuZGFyZCBjb3JlIGtlcm5lbCBmdW5jdGlvbmFsaXR5IHdlJ3JlIHRhcmdldGluZy4gTW92aW5nIG9uLi4uXG5cbk5vdywgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgYEZvY3VzU3ltYm9sc2AgZW50cnkuIEkgbmVlZCB0byBtYWtlICphYnNvbHV0ZWx5KiBzdXJlIEkgaGF2ZSB0aGUgcmlnaHQgc3ltYm9sLiBPa2F5LCBgX192bWZfYW5vbl9wcmVwYXJlYCBpcyB0aGUgbm9uLXN0YXRpYyBzeW1ib2wgaW4gYG1tL21lbW9yeS5jYCB0aGF0ICpleGFjdGx5KiBjb250YWlucyB0aGUgY2hhbmdlIEknbSBhZnRlci4gVGhhdCdzIGl0IVxuXG5BbHJpZ2h0LCB0aW1lIHRvIGVuc3VyZSBJIGhhdmUgdGhlIHJpZ2h0IGZvcm1hdCBmb3IgYHNldC1yZXN1bHRzYC4gSnVzdCB0byBiZSBjbGVhcjpcbiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXWAgLSBlbXB0eSBsaXN0LCBjb3JlIGZ1bmN0aW9uYWxpdHkuXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBbXCJfX3ZtZl9hbm9uX3ByZXBhcmVcIl1gIC0gdGhhdCBzcGVjaWZpYyBzeW1ib2wsIG5vdGhpbmcgZWxzZS5cbiogICBgUmVhc29uaW5nYDogQ29uY2lzZSBleHBsYW5hdGlvbiwgb2YgY291cnNlLlxuKiAgIGBXb3J0aEZ1enppbmdgOiBgdHJ1ZWAgLSBBYnNvbHV0ZWx5IVxuXG5QZXJmZWN0LiBJJ20gc2F0aXNmaWVkLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzYyLCJPdXRwdXRUb2tlbnMiOjEwNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEzOjA0OjMxLjQ4NDMyMTM5NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX192bWZfYW5vbl9wcmVwYXJlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGluIG1tL21lbW9yeS5jIGJ5IGludHJvZHVjaW5nIGEgbmV3IGhlbHBlciB2bWFfaXNfZmF1bHRlZCgpIHVzaW5nIGRhdGFfcmFjZSgpIGFuZCB1cGRhdGluZyBfX3ZtZl9hbm9uX3ByZXBhcmUoKS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBmYXVsdCBwcmVwYXJhdGlvbiBwYXRocyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byB2ZXJpZnkgbG9ja2xlc3MgY29uY3VycmVuY3kgaW52YXJpYW50cyBhbmQgbWVtb3J5IG9yZGVyaW5nIGJlaGF2aW9yLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fdm1mX2Fub25fcHJlcGFyZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbiBtbS9tZW1vcnkuYyBieSBpbnRyb2R1Y2luZyBhIG5ldyBoZWxwZXIgdm1hX2lzX2ZhdWx0ZWQoKSB1c2luZyBkYXRhX3JhY2UoKSBhbmQgdXBkYXRpbmcgX192bWZfYW5vbl9wcmVwYXJlKCkuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgZmF1bHQgcHJlcGFyYXRpb24gcGF0aHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gdmVyaWZ5IGxvY2tsZXNzIGNvbmN1cnJlbmN5IGludmFyaWFudHMgYW5kIG1lbW9yeSBvcmRlcmluZyBiZWhhdmlvci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTM6MDQ6MzEuNDg0MzQ5OTg1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk1ODM1NDYyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEzOjA0OjMxLjQ4NDc5MjEzNVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEwOTU3OTA4MDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgaGVscGVyIGZ1bmN0aW9uIGB2bWFfaXNfZmF1bHRlZCgpYCB0byBhbm5vdGF0ZSBhIGxvY2tsZXNzIHJlYWQgb2YgYHZtYS1cXHUwMDNlYW5vbl92bWFgIHVzaW5nIGBkYXRhX3JhY2UoKWAgaW4gYF9fdm1mX2Fub25fcHJlcGFyZSgpYC4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RhY2svaGVhcCBidWZmZXJzLCBzdHJ1Y3R1cmUgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMuIFRoZSBgdm1fYXJlYV9zdHJ1Y3RgIGlzIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgYnkgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBBcyB0aGVyZSBpcyBubyByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgbGVha2luZyB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlciBzcGFjZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjNmYmRhYjdiN2RhOTA2MDM5ZjY5N2E0N2M2MmM1OTQ2Y2U1MWE5NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTM6MDQ6MDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCA2YjgyODBjZmMxZGJlLi5kODVkNjc5Mjc0MDBiIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbisrKyBiL21tL21lbW9yeS5jXG5AQCAtMzgwMCw2ICszODAwLDI1IEBAIHN0YXRpYyBpbmxpbmUgdm1fZmF1bHRfdCB2bWZfY2FuX2NhbGxfZmF1bHQoY29uc3Qgc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRyZXR1cm4gVk1fRkFVTFRfUkVUUlk7XG4gfVxuIFxuKy8qKlxuKyAqIHZtYV9pc19mYXVsdGVkIC0gY2hlY2sgaWYgYSB2bWEgaGFzIGJlZW4gZmF1bHRlZFxuKyAqIEB2bWE6IHRoZSB2bWEgdG8gY2hlY2tcbisgKlxuKyAqIFRoaXMgaXMgYSBsb2NrbGVzcyBhY2Nlc3MgdGhhdCBtYXkgcmFjZSB3aXRoIF9fYW5vbl92bWFfcHJlcGFyZSgpLlxuKyAqIFRoZSByYWNlIGlzIHNhZmUgYmVjYXVzZTpcbisgKiAtIFRoZSBmYXVsdCBoYW5kbGVyIGVuc3VyZXMgdGhhdCB0aGUgbWFwcGluZyBvZiBtZW1vcnkgaXMgb3JkZXJlZC5cbisgKiAtIElmIHdlIHJlYWQgTlVMTCwgdGhlIGNhbGxlciB3aWxsIHJlLWNoZWNrXG4rICogLSBUaGUgcGFnZV90YWJsZV9sb2NrIHByb3ZpZGVzIEFDUVVJUkUgc2VtYW50aWNzIGZvciBtZW1vcnkgb3JkZXJpbmdcbisgKlxuKyAqIFJldHVybjogdHJ1ZSBpZiB2bWEtXHUwMDNlYW5vbl92bWEgaXMgbm9uLU5VTEwsIGZhbHNlIG90aGVyd2lzZVxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfZmF1bHRlZChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbit7XG4rXHQvKiBMb2NrbGVzcyBjaGVjayAtIHNhZmUgYmVjYXVzZSB3ZSByZS12YWxpZGF0ZSB1bmRlciBwYWdlX3RhYmxlX2xvY2sgKi9cbitcdHJldHVybiBkYXRhX3JhY2Uodm1hLVx1MDAzZWFub25fdm1hKTtcbit9XG4rXG4rXG4gLyoqXG4gICogX192bWZfYW5vbl9wcmVwYXJlIC0gUHJlcGFyZSB0byBoYW5kbGUgYW4gYW5vbnltb3VzIGZhdWx0LlxuICAqIEB2bWY6IFRoZSB2bV9mYXVsdCBkZXNjcmlwdG9yIHBhc3NlZCBmcm9tIHRoZSBmYXVsdCBoYW5kbGVyLlxuQEAgLTM4MTksOCArMzgzOCw3IEBAIHZtX2ZhdWx0X3QgX192bWZfYW5vbl9wcmVwYXJlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIHtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mLVx1MDAzZXZtYTtcbiBcdHZtX2ZhdWx0X3QgcmV0ID0gMDtcbi1cbi1cdGlmIChsaWtlbHkodm1hLVx1MDAzZWFub25fdm1hKSlcbitcdGlmIChsaWtlbHkodm1hX2lzX2ZhdWx0ZWQodm1hKSkpXG4gXHRcdHJldHVybiAwO1xuIFx0aWYgKHZtZi1cdTAwM2VmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19WTUFfTE9DSykge1xuIFx0XHRpZiAoIW1tYXBfcmVhZF90cnlsb2NrKHZtYS1cdTAwM2V2bV9tbSkpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMzowNDozMS40ODQ3OTM5MDVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTkyMzk1OTA5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggd2l0aGluIGBtbS9tZW1vcnkuY2AuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGNlbnRlcmVkIGFyb3VuZCBgdm1hX2lzX2ZhdWx0ZWRgIGFuZCBob3cgaXQncyB1c2VkIGluIHRoZSBmYXVsdCBoYW5kbGluZyBwYXRoLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzIHRvIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzLCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbnQgYW5kIGl0cyBpbXBsaWNhdGlvbnMuXG5cbkZpcnN0LCBJIHNlZSBhIG5ldyBpbmxpbmUgZnVuY3Rpb24sIGB2bWFfaXNfZmF1bHRlZGAuIEl0IGFwcGVhcnMgdG8gYmUgYSBsb2NrbGVzcyBjaGVjayB0byBkZXRlcm1pbmUgaWYgYSBWTUEgKFZpcnR1YWwgTWVtb3J5IEFyZWEpIGhhcyBhbHJlYWR5IGJlZW4gZmF1bHRlZC4gVGhlIGNvbW1lbnRzIGFyZSBjcml0aWNhbCBoZXJlIOKAkyB0aGV5IGhpZ2hsaWdodCB0aGUgcG90ZW50aWFsIGRhdGEgcmFjZSB3aXRoIGBfX2Fub25fdm1hX3ByZXBhcmUoKWAgYW5kLCBpbXBvcnRhbnRseSwgd2h5IGl0J3MgY29uc2lkZXJlZCBzYWZlLiBUaGUgZXhwbGFuYXRpb24gYWJvdXQgbWVtb3J5IG9yZGVyaW5nIGVuZm9yY2VkIGJ5IHRoZSBmYXVsdCBoYW5kbGVyIGFuZCB0aGUgdXNlIG9mIGBwYWdlX3RhYmxlX2xvY2tgIGZvciBhY3F1aXJlIHNlbWFudGljcyBpcyB3aGF0IEkgd291bGQgZXhwZWN0IGluIGEgbG93LWxldmVsIG1lbW9yeSBtYW5hZ2VtZW50IGNvbnRleHQuIEl0IGlzIGludGVyZXN0aW5nIHRoZXkgYXJlIHVzaW5nIGBkYXRhX3JhY2VgIGhlcmUsIEkgd2lsbCBoYXZlIHRvIGludmVzdGlnYXRlIHdoZXJlIHRoYXQgbWFjcm8gaXMgZGVmaW5lZC5cblxuRXNzZW50aWFsbHksIHRoZXkncmUgb3B0aW1pemluZyBieSBhdm9pZGluZyBhIGxvY2sgaW4gdGhlIGNvbW1vbiBjYXNlLCByZWx5aW5nIG9uIHJlLXZhbGlkYXRpb24gaWYgdGhleSByZWFkIGEgc3RhbGUgdmFsdWUuIFRoaXMgbWFrZXMgc2Vuc2UgZnJvbSBhIHBlcmZvcm1hbmNlIHBlcnNwZWN0aXZlIOKAkyBtaW5pbWl6aW5nIGxvY2sgY29udGVudGlvbiBpcyBhbHdheXMgYSBnb29kIGdvYWwuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB3aGVyZSBpdCdzICp1c2VkKi4gVGhlIGNoYW5nZSBpbiBgX192bWZfYW5vbl9wcmVwYXJlYCBpcyB0aGUga2V5LiBUaGUgcGF0Y2ggcmVwbGFjZXMgdGhlIGRpcmVjdCBjaGVjayBgdm1hLVx1MDAzZWFub25fdm1hYCB3aXRoIGEgY2FsbCB0byBvdXIgbmV3IGZ1bmN0aW9uIGB2bWFfaXNfZmF1bHRlZGAuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgbG9ja2xlc3MgY2hlY2sgaW4gYHZtYV9pc19mYXVsdGVkYCBpcyBub3cgdGhlIHByZWZlcnJlZCBtZXRob2Qgb2YgZGV0ZWN0aW5nIGlmIGEgZmF1bHQgaGFzIGFscmVhZHkgb2NjdXJyZWQuIFRoaXMgY2hhbmdlIGltcGxpZXMgYSBwZXJmb3JtYW5jZSBnYWluLCBidXQgSSBuZWVkIHRvIGFuYWx5emUgaG93IG9mdGVuIHRoaXMgY29kZSBwYXRoIGlzIGhpdCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QuIEkgYWxzbyB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgbGlrZWx5IGNvbmRpdGlvbiBpcyB0cnVseSBsaWtlbHkuXG5cbkknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgX192bWZfYW5vbl9wcmVwYXJlYCB0byBzZWUgaWYgdGhlIGFzc3VtcHRpb25zIGhvbGQgdXAgaW4gcmVhbC13b3JsZCBzY2VuYXJpb3MuIEkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGlzIHBhdGNoIGhhcyBwcm9wZXIgcmVncmVzc2lvbiB0ZXN0cyBhbmQgaXMgcHJvcGVybHkgZG9jdW1lbnRlZC4gSSB3aWxsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uIGlzc3VlcyByZWxhdGVkIHRvIHRoZSBsb2NrbGVzcyBhY2Nlc3MgcGF0dGVybi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQwNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEzOjA0OjM3LjQwODc1Njk4NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDgwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtb3J5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzgwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzgwMDpcXHRcXHRyZXR1cm4gVk1fRkFVTFRfUkVUUlk7XFxuMzgwMTpcXHR9XFxuMzgwMjpcXHRcXG4zODAzOlxcdC8qKlxcbjM4MDQ6XFx0ICogdm1hX2lzX2ZhdWx0ZWQgLSBjaGVjayBpZiBhIHZtYSBoYXMgYmVlbiBmYXVsdGVkXFxuMzgwNTpcXHQgKiBAdm1hOiB0aGUgdm1hIHRvIGNoZWNrXFxuMzgwNjpcXHQgKlxcbjM4MDc6XFx0ICogVGhpcyBpcyBhIGxvY2tsZXNzIGFjY2VzcyB0aGF0IG1heSByYWNlIHdpdGggX19hbm9uX3ZtYV9wcmVwYXJlKCkuXFxuMzgwODpcXHQgKiBUaGUgcmFjZSBpcyBzYWZlIGJlY2F1c2U6XFxuMzgwOTpcXHQgKiAtIFRoZSBmYXVsdCBoYW5kbGVyIGVuc3VyZXMgdGhhdCB0aGUgbWFwcGluZyBvZiBtZW1vcnkgaXMgb3JkZXJlZC5cXG4zODEwOlxcdCAqIC0gSWYgd2UgcmVhZCBOVUxMLCB0aGUgY2FsbGVyIHdpbGwgcmUtY2hlY2tcXG4zODExOlxcdCAqIC0gVGhlIHBhZ2VfdGFibGVfbG9jayBwcm92aWRlcyBBQ1FVSVJFIHNlbWFudGljcyBmb3IgbWVtb3J5IG9yZGVyaW5nXFxuMzgxMjpcXHQgKlxcbjM4MTM6XFx0ICogUmV0dXJuOiB0cnVlIGlmIHZtYS1cXHUwMDNlYW5vbl92bWEgaXMgbm9uLU5VTEwsIGZhbHNlIG90aGVyd2lzZVxcbjM4MTQ6XFx0ICovXFxuMzgxNTpcXHRzdGF0aWMgaW5saW5lIGJvb2wgdm1hX2lzX2ZhdWx0ZWQoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuMzgxNjpcXHR7XFxuMzgxNzpcXHRcXHQvKiBMb2NrbGVzcyBjaGVjayAtIHNhZmUgYmVjYXVzZSB3ZSByZS12YWxpZGF0ZSB1bmRlciBwYWdlX3RhYmxlX2xvY2sgKi9cXG4zODE4OlxcdFxcdHJldHVybiBkYXRhX3JhY2Uodm1hLVxcdTAwM2Vhbm9uX3ZtYSk7XFxuMzgxOTpcXHR9XFxuMzgyMDpcXHRcXG4zODIxOlxcdFxcbjM4MjI6XFx0LyoqXFxuMzgyMzpcXHQgKiBfX3ZtZl9hbm9uX3ByZXBhcmUgLSBQcmVwYXJlIHRvIGhhbmRsZSBhbiBhbm9ueW1vdXMgZmF1bHQuXFxuMzgyNDpcXHQgKiBAdm1mOiBUaGUgdm1fZmF1bHQgZGVzY3JpcHRvciBwYXNzZWQgZnJvbSB0aGUgZmF1bHQgaGFuZGxlci5cXG4zODI1OlxcdCAqXFxuMzgyNjpcXHQgKiBXaGVuIHByZXBhcmluZyB0byBpbnNlcnQgYW4gYW5vbnltb3VzIHBhZ2UgaW50byBhIFZNQSBmcm9tIGFcXG4zODI3OlxcdCAqIGZhdWx0IGhhbmRsZXIsIGNhbGwgdGhpcyBmdW5jdGlvbiByYXRoZXIgdGhhbiBhbm9uX3ZtYV9wcmVwYXJlKCkuXFxuMzgyODpcXHQgKiBJZiB0aGlzIHZtYSBkb2VzIG5vdCBhbHJlYWR5IGhhdmUgYW4gYXNzb2NpYXRlZCBhbm9uX3ZtYSBhbmQgd2UgYXJlXFxuMzgyOTpcXHQgKiBvbmx5IHByb3RlY3RlZCBieSB0aGUgcGVyLVZNQSBsb2NrLCB0aGUgY2FsbGVyIG11c3QgcmV0cnkgd2l0aCB0aGVcXG4zODMwOlxcdCAqIG1tYXBfbG9jayBoZWxkLiAgX19hbm9uX3ZtYV9wcmVwYXJlKCkgd2lsbCBsb29rIGF0IGFkamFjZW50IFZNQXMgdG9cXG4zODMxOlxcdCAqIGRldGVybWluZSBpZiB0aGlzIFZNQSBjYW4gc2hhcmUgaXRzIGFub25fdm1hLCBhbmQgdGhhdCdzIG5vdCBzYWZlIHRvXFxuMzgzMjpcXHQgKiBkbyB3aXRoIG9ubHkgdGhlIHBlci1WTUEgbG9jayBoZWxkIGZvciB0aGlzIFZNQS5cXG4zODMzOlxcdCAqXFxuMzgzNDpcXHQgKiBSZXR1cm46IDAgaWYgZmF1bHQgaGFuZGxpbmcgY2FuIHByb2NlZWQuICBBbnkgb3RoZXIgdmFsdWUgc2hvdWxkIGJlXFxuMzgzNTpcXHQgKiByZXR1cm5lZCB0byB0aGUgY2FsbGVyLlxcbjM4MzY6XFx0ICovXFxuMzgzNzpcXHR2bV9mYXVsdF90IF9fdm1mX2Fub25fcHJlcGFyZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4zODM4OlxcdHtcXG4zODM5OlxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mLVxcdTAwM2V2bWE7XFxuMzg0MDpcXHRcXHR2bV9mYXVsdF90IHJldCA9IDA7XFxuMzg0MTpcXHRcXHRpZiAobGlrZWx5KHZtYV9pc19mYXVsdGVkKHZtYSkpKVxcbjM4NDI6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMzg0MzpcXHRcXHRpZiAodm1mLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZBVUxUX0ZMQUdfVk1BX0xPQ0spIHtcXG4zODQ0OlxcdFxcdFxcdGlmICghbW1hcF9yZWFkX3RyeWxvY2sodm1hLVxcdTAwM2V2bV9tbSkpXFxuMzg0NTpcXHRcXHRcXHRcXHRyZXR1cm4gVk1fRkFVTFRfUkVUUlk7XFxuMzg0NjpcXHRcXHR9XFxuMzg0NzpcXHRcXHRpZiAoX19hbm9uX3ZtYV9wcmVwYXJlKHZtYSkpXFxuMzg0ODpcXHRcXHRcXHRyZXQgPSBWTV9GQVVMVF9PT007XFxuMzg0OTpcXHRcXHRpZiAodm1mLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZBVUxUX0ZMQUdfVk1BX0xPQ0spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEzOjA0OjM3LjQwOTA2Nzc5NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDMzNjExMDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IFRoaXMgUGF0Y2ggaXMgU2FmZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IGFwcGVhcnMgdG8gYmUgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHJlZmFjdG9yaW5nLCBhZGRpbmcgYSBoZWxwZXIgZnVuY3Rpb24sIGB2bWFfaXNfZmF1bHRlZCgpYCwgdGhhdCBlbmNhcHN1bGF0ZXMgdGhlIGBkYXRhX3JhY2Uodm1hLVx1MDAzZWFub25fdm1hKWAgY2hlY2suIFRoZSBwcmltYXJ5IGludGVudCBzZWVtcyB0byBiZSBjbGFyaXR5IG9yIEtDU0FOIGFubm90YXRpb24uIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IEtNU0FOIGNvbmNlcm5zP1xuXG5JbW1lZGlhdGVseSwgSSdtIGNoZWNraW5nIGZvciB0aGUgdXN1YWwgc3VzcGVjdHMuIE5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm8gbW9kaWZpY2F0aW9ucyB0byB1c2VyLXNwYWNlIGNvcGllcywgbm8gbmV3IGFsbG9jYXRpb25zLiBJIGRvbid0IHNlZSBhbnkgb2J2aW91cyBuZXcgZGF0YSByYWNlcyBpbnRyb2R1Y2VkLCBiZXlvbmQgdGhpcyBsb2NrbGVzcyBhY2Nlc3Mgd2hpY2ggaXMgYmVpbmcgYW5ub3RhdGVkLiBgdm1hLVx1MDAzZWFub25fdm1hYCBpcyBwYXJ0IG9mIHRoZSBgc3RydWN0IHZtX2FyZWFfc3RydWN0YCwgYW5kIEkga25vdyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIGhhbmRsZXMgdGhlIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIG9mIHRoZXNlIFZNQXMuIFNvLCB0aGUgcG9pbnRlciBpcyBwcm9wZXJseSBpbml0aWFsaXplZCBhdCBhbGxvY2F0aW9uLlxuXG5Ob3csIGxldCBtZSBwdXQgb24gbXkgS01TQU4gaGF0IGFuZCBnbyB0aHJvdWdoIHRoZSBjcml0ZXJpYS4gVGhpcyBwYXRjaCBkb2Vzbid0OlxuXG4xLiAgVG91Y2ggYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSB3aGVyZSB1bmluaXRpYWxpemVkIGRhdGEgY291bGQgbGVhay5cbjIuICBJbnRyb2R1Y2UgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cbjMuICBBbGxvY2F0ZSBvciBpbml0aWFsaXplIGFueSBjb21wbGV4IHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy5cbjQuICBNb2RpZnkgYm91bmRzIGNoZWNrcyBvciBsZW5ndGhzIGluIGEgd2F5IHRoYXQgYWxsb3dzIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIHBhcnRzIG9mIGJ1ZmZlcnMuXG5cblRoZXJlZm9yZSwgS01TQU4gaXMgY2xlYXJseSBub3QgbmVlZGVkIGhlcmUuIFRoZSBjaGFuZ2VzIGZhbGwgc3F1YXJlbHkgaW50byB0aGUgXCJOZWVkc0tNU0FOPWZhbHNlXCIgY2F0ZWdvcnkuIFNwZWNpZmljYWxseSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgaGVscGVyIHRvIGFubm90YXRlIGxvY2tsZXNzIGFjY2VzcyBvZiBhIHByb3Blcmx5IGluaXRpYWxpemVkIGZpZWxkLCB3aXRoIG5vIGNoYW5jZSBvZiBpbnRyb2R1Y2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBUaGUgcG90ZW50aWFsIGlzc3VlcyBhcmUgYWxyZWFkeSBjb3ZlcmVkIGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuXG5cblNvLCBoZXJlJ3MgbXkgcmVhc29uaW5nOiB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBoZWxwZXIgZm9yIGEgYGRhdGFfcmFjZSgpYCBjaGVjayBvbiBgdm1hLVx1MDAzZWFub25fdm1hYCB3aXRoaW4gYF9fdm1mX2Fub25fcHJlcGFyZSgpYC4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gdXNlci1zcGFjZSBjb3BpZXMsIGFuZCBubyBuZXcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3IgZGF0YSBzdHJ1Y3R1cmVzLiBUaGUgYHZtX2FyZWFfc3RydWN0YCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCBieSB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgc28gdGhlcmUncyBubyB3YXkgdG8gcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBjYXVzZSBpbmZvcm1hdGlvbiBsZWFrcyB2aWEgYHZtYS1cdTAwM2Vhbm9uX3ZtYWAuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzICpub3QqIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCB3YXJyYW50IEtNU0FOIGZ1enppbmcuIFdlJ3JlIGdvb2QgdG8gZ28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyMjAsIk91dHB1dFRva2VucyI6MTQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTM6MDQ6NDIuNDQyNjgyMDQ3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgaGVscGVyIGZ1bmN0aW9uIGB2bWFfaXNfZmF1bHRlZCgpYCB0byBhbm5vdGF0ZSBhIGxvY2tsZXNzIHJlYWQgb2YgYHZtYS1cXHUwMDNlYW5vbl92bWFgIHVzaW5nIGBkYXRhX3JhY2UoKWAgaW4gYF9fdm1mX2Fub25fcHJlcGFyZSgpYC4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RhY2svaGVhcCBidWZmZXJzLCBzdHJ1Y3R1cmUgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMuIFRoZSBgdm1fYXJlYV9zdHJ1Y3RgIGlzIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgYnkgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBBcyB0aGVyZSBpcyBubyByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgbGVha2luZyB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlciBzcGFjZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGhlbHBlciBmdW5jdGlvbiBgdm1hX2lzX2ZhdWx0ZWQoKWAgdG8gYW5ub3RhdGUgYSBsb2NrbGVzcyByZWFkIG9mIGB2bWEtXFx1MDAzZWFub25fdm1hYCB1c2luZyBgZGF0YV9yYWNlKClgIGluIGBfX3ZtZl9hbm9uX3ByZXBhcmUoKWAuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0YWNrL2hlYXAgYnVmZmVycywgc3RydWN0dXJlIGNvcGllcyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzLiBUaGUgYHZtX2FyZWFfc3RydWN0YCBpcyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkIGJ5IHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gQXMgdGhlcmUgaXMgbm8gcmlzayBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGxlYWtpbmcgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowcnmvs[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-09 12:41:07 +0000 UTC FinishedAt: 2026-09-09 13:04:43 +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": "8eae39cd0adf28ba81a46090b10484cf402c0ac8", "config_name": "upstream-apparmor-kasan.config", "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": "8eae39cd0adf28ba81a46090b10484cf402c0ac8", "config_name": "upstream-apparmor-kasan.config", "series_id": "3207b9bb-29fd-49e0-921b-d6ec1b7a1784" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__vmf_anon_prepare" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X192bWZfYW5vbl9wcmVwYXJlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGhlbHBlciBmdW5jdGlvbiBgdm1hX2lzX2ZhdWx0ZWQoKWAgdG8gYW5ub3RhdGUgYSBsb2NrbGVzcyByZWFkIG9mIGB2bWEtXHUwMDNlYW5vbl92bWFgIHVzaW5nIGBkYXRhX3JhY2UoKWAgaW4gYF9fdm1mX2Fub25fcHJlcGFyZSgpYC4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RhY2svaGVhcCBidWZmZXJzLCBzdHJ1Y3R1cmUgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMuIFRoZSBgdm1fYXJlYV9zdHJ1Y3RgIGlzIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgYnkgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBBcyB0aGVyZSBpcyBubyByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgbGVha2luZyB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlciBzcGFjZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbiBtbS9tZW1vcnkuYyBieSBpbnRyb2R1Y2luZyBhIG5ldyBoZWxwZXIgdm1hX2lzX2ZhdWx0ZWQoKSB1c2luZyBkYXRhX3JhY2UoKSBhbmQgdXBkYXRpbmcgX192bWZfYW5vbl9wcmVwYXJlKCkuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgZmF1bHQgcHJlcGFyYXRpb24gcGF0aHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gdmVyaWZ5IGxvY2tsZXNzIGNvbmN1cnJlbmN5IGludmFyaWFudHMgYW5kIG1lbW9yeSBvcmRlcmluZyBiZWhhdmlvci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMzowNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGIzZmJkYWI3YjdkYTkwNjAzOWY2OTdhNDdjNjJjNTk0NmNlNTFhOTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDEzOjA0OjAxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IDZiODI4MGNmYzFkYmUuLmQ4NWQ2NzkyNzQwMGIgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmNcbkBAIC0zODAwLDYgJiM0MzszODAwLDI1IEBAIHN0YXRpYyBpbmxpbmUgdm1fZmF1bHRfdCB2bWZfY2FuX2NhbGxfZmF1bHQoY29uc3Qgc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRyZXR1cm4gVk1fRkFVTFRfUkVUUlk7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogdm1hX2lzX2ZhdWx0ZWQgLSBjaGVjayBpZiBhIHZtYSBoYXMgYmVlbiBmYXVsdGVkXG4mIzQzOyAqIEB2bWE6IHRoZSB2bWEgdG8gY2hlY2tcbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBpcyBhIGxvY2tsZXNzIGFjY2VzcyB0aGF0IG1heSByYWNlIHdpdGggX19hbm9uX3ZtYV9wcmVwYXJlKCkuXG4mIzQzOyAqIFRoZSByYWNlIGlzIHNhZmUgYmVjYXVzZTpcbiYjNDM7ICogLSBUaGUgZmF1bHQgaGFuZGxlciBlbnN1cmVzIHRoYXQgdGhlIG1hcHBpbmcgb2YgbWVtb3J5IGlzIG9yZGVyZWQuXG4mIzQzOyAqIC0gSWYgd2UgcmVhZCBOVUxMLCB0aGUgY2FsbGVyIHdpbGwgcmUtY2hlY2tcbiYjNDM7ICogLSBUaGUgcGFnZV90YWJsZV9sb2NrIHByb3ZpZGVzIEFDUVVJUkUgc2VtYW50aWNzIGZvciBtZW1vcnkgb3JkZXJpbmdcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIHZtYS1cdTAwM2Vhbm9uX3ZtYSBpcyBub24tTlVMTCwgZmFsc2Ugb3RoZXJ3aXNlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgdm1hX2lzX2ZhdWx0ZWQoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4mIzQzO3tcbiYjNDM7XHQvKiBMb2NrbGVzcyBjaGVjayAtIHNhZmUgYmVjYXVzZSB3ZSByZS12YWxpZGF0ZSB1bmRlciBwYWdlX3RhYmxlX2xvY2sgKi9cbiYjNDM7XHRyZXR1cm4gZGF0YV9yYWNlKHZtYS1cdTAwM2Vhbm9uX3ZtYSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1xuIC8qKlxuICAqIF9fdm1mX2Fub25fcHJlcGFyZSAtIFByZXBhcmUgdG8gaGFuZGxlIGFuIGFub255bW91cyBmYXVsdC5cbiAgKiBAdm1mOiBUaGUgdm1fZmF1bHQgZGVzY3JpcHRvciBwYXNzZWQgZnJvbSB0aGUgZmF1bHQgaGFuZGxlci5cbkBAIC0zODE5LDggJiM0MzszODM4LDcgQEAgdm1fZmF1bHRfdCBfX3ZtZl9hbm9uX3ByZXBhcmUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4ge1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYtXHUwMDNldm1hO1xuIFx0dm1fZmF1bHRfdCByZXQgPSAwO1xuLVxuLVx0aWYgKGxpa2VseSh2bWEtXHUwMDNlYW5vbl92bWEpKVxuJiM0MztcdGlmIChsaWtlbHkodm1hX2lzX2ZhdWx0ZWQodm1hKSkpXG4gXHRcdHJldHVybiAwO1xuIFx0aWYgKHZtZi1cdTAwM2VmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19WTUFfTE9DSykge1xuIFx0XHRpZiAoIW1tYXBfcmVhZF90cnlsb2NrKHZtYS1cdTAwM2V2bV9tbSkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTM6MDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3ZtZl9hbm9uX3ByZXBhcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGluIG1tL21lbW9yeS5jIGJ5IGludHJvZHVjaW5nIGEgbmV3IGhlbHBlciB2bWFfaXNfZmF1bHRlZCgpIHVzaW5nIGRhdGFfcmFjZSgpIGFuZCB1cGRhdGluZyBfX3ZtZl9hbm9uX3ByZXBhcmUoKS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBmYXVsdCBwcmVwYXJhdGlvbiBwYXRocyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byB2ZXJpZnkgbG9ja2xlc3MgY29uY3VycmVuY3kgaW52YXJpYW50cyBhbmQgbWVtb3J5IG9yZGVyaW5nIGJlaGF2aW9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjNmYmRhYjdiN2RhOTA2MDM5ZjY5N2E0N2M2MmM1OTQ2Y2U1MWE5NApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMTM6MDQ6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IDZiODI4MGNmYzFkYmUuLmQ4NWQ2NzkyNzQwMGIgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jCkBAIC0zODAwLDYgJiM0MzszODAwLDI1IEBAIHN0YXRpYyBpbmxpbmUgdm1fZmF1bHRfdCB2bWZfY2FuX2NhbGxfZmF1bHQoY29uc3Qgc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiAJcmV0dXJuIFZNX0ZBVUxUX1JFVFJZOwogfQogCiYjNDM7LyoqCiYjNDM7ICogdm1hX2lzX2ZhdWx0ZWQgLSBjaGVjayBpZiBhIHZtYSBoYXMgYmVlbiBmYXVsdGVkCiYjNDM7ICogQHZtYTogdGhlIHZtYSB0byBjaGVjawomIzQzOyAqCiYjNDM7ICogVGhpcyBpcyBhIGxvY2tsZXNzIGFjY2VzcyB0aGF0IG1heSByYWNlIHdpdGggX19hbm9uX3ZtYV9wcmVwYXJlKCkuCiYjNDM7ICogVGhlIHJhY2UgaXMgc2FmZSBiZWNhdXNlOgomIzQzOyAqIC0gVGhlIGZhdWx0IGhhbmRsZXIgZW5zdXJlcyB0aGF0IHRoZSBtYXBwaW5nIG9mIG1lbW9yeSBpcyBvcmRlcmVkLgomIzQzOyAqIC0gSWYgd2UgcmVhZCBOVUxMLCB0aGUgY2FsbGVyIHdpbGwgcmUtY2hlY2sKJiM0MzsgKiAtIFRoZSBwYWdlX3RhYmxlX2xvY2sgcHJvdmlkZXMgQUNRVUlSRSBzZW1hbnRpY3MgZm9yIG1lbW9yeSBvcmRlcmluZwomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIHZtYS0mZ3Q7YW5vbl92bWEgaXMgbm9uLU5VTEwsIGZhbHNlIG90aGVyd2lzZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfZmF1bHRlZChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKJiM0Mzt7CiYjNDM7CS8qIExvY2tsZXNzIGNoZWNrIC0gc2FmZSBiZWNhdXNlIHdlIHJlLXZhbGlkYXRlIHVuZGVyIHBhZ2VfdGFibGVfbG9jayAqLwomIzQzOwlyZXR1cm4gZGF0YV9yYWNlKHZtYS0mZ3Q7YW5vbl92bWEpOwomIzQzO30KJiM0MzsKJiM0MzsKIC8qKgogICogX192bWZfYW5vbl9wcmVwYXJlIC0gUHJlcGFyZSB0byBoYW5kbGUgYW4gYW5vbnltb3VzIGZhdWx0LgogICogQHZtZjogVGhlIHZtX2ZhdWx0IGRlc2NyaXB0b3IgcGFzc2VkIGZyb20gdGhlIGZhdWx0IGhhbmRsZXIuCkBAIC0zODE5LDggJiM0MzszODM4LDcgQEAgdm1fZmF1bHRfdCBfX3ZtZl9hbm9uX3ByZXBhcmUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiB7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYtJmd0O3ZtYTsKIAl2bV9mYXVsdF90IHJldCA9IDA7Ci0KLQlpZiAobGlrZWx5KHZtYS0mZ3Q7YW5vbl92bWEpKQomIzQzOwlpZiAobGlrZWx5KHZtYV9pc19mYXVsdGVkKHZtYSkpKQogCQlyZXR1cm4gMDsKIAlpZiAodm1mLSZndDtmbGFncyAmYW1wOyBGQVVMVF9GTEFHX1ZNQV9MT0NLKSB7CiAJCWlmICghbW1hcF9yZWFkX3RyeWxvY2sodm1hLSZndDt2bV9tbSkpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxOTQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBgbW0vbWVtb3J5LmNgIExpbmUgMzgwMCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEkgbmVlZCB0byBtZXRob2RpY2FsbHkgZGlzc2VjdCB0aGlzIGFuZCBlbnN1cmUgSSBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuIE15IGZpcnN0IHN0ZXAgaXMgdG8gY2FyZWZ1bGx5IHJldmlldyBib3RoIHRoZSBwYXRjaCBpdHNlbGYgYW5kIGFueSBhY2NvbXBhbnlpbmcgaW5zdHJ1Y3Rpb25zIG9yIGRvY3VtZW50YXRpb24uIFRoZSB0YXJnZXQgZmlsZSBpcyBgbW0vbWVtb3J5LmNgLCB3aGljaCBhbHdheXMgd2FycmFudHMgY2xvc2UgYXR0ZW50aW9uIGdpdmVuIGl0cyBjcml0aWNhbCByb2xlLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZ2V0IG15IGJlYXJpbmdzIHVzaW5nIGByZWFkLWZpbGVgIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IHNlY3Rpb24gb2YgYG1tL21lbW9yeS5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDM4MDAuIFRoaXMgc2hvdWxkIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBjb250ZXh0IHRvIGFzc2VzcyB0aGUgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbW9yeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzc5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNzkwOlx0ICogdm1fb3BzIHRoYXQgaGF2ZSBhIC1cdTAwM2VtYXBfcGFnZXMgaGF2ZSBiZWVuIGF1ZGl0ZWQgYW5kIGRvbiYjMzk7dCBuZWVkXG4zNzkxOlx0ICogdGhlIG1tYXBfbG9jayB0byBiZSBoZWxkLlxuMzc5MjpcdCAqL1xuMzc5MzpcdHN0YXRpYyBpbmxpbmUgdm1fZmF1bHRfdCB2bWZfY2FuX2NhbGxfZmF1bHQoY29uc3Qgc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4zNzk0Olx0e1xuMzc5NTpcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYtXHUwMDNldm1hO1xuMzc5NjpcdFxuMzc5NzpcdFx0aWYgKHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlbWFwX3BhZ2VzIHx8ICEodm1mLVx1MDAzZWZsYWdzIFx1MDAyNiBGQVVMVF9GTEFHX1ZNQV9MT0NLKSlcbjM3OTg6XHRcdFx0cmV0dXJuIDA7XG4zNzk5Olx0XHR2bWFfZW5kX3JlYWQodm1hKTtcbjM4MDA6XHRcdHJldHVybiBWTV9GQVVMVF9SRVRSWTtcbjM4MDE6XHR9XG4zODAyOlx0XG4zODAzOlx0LyoqXG4zODA0Olx0ICogdm1hX2lzX2ZhdWx0ZWQgLSBjaGVjayBpZiBhIHZtYSBoYXMgYmVlbiBmYXVsdGVkXG4zODA1Olx0ICogQHZtYTogdGhlIHZtYSB0byBjaGVja1xuMzgwNjpcdCAqXG4zODA3Olx0ICogVGhpcyBpcyBhIGxvY2tsZXNzIGFjY2VzcyB0aGF0IG1heSByYWNlIHdpdGggX19hbm9uX3ZtYV9wcmVwYXJlKCkuXG4zODA4Olx0ICogVGhlIHJhY2UgaXMgc2FmZSBiZWNhdXNlOlxuMzgwOTpcdCAqIC0gVGhlIGZhdWx0IGhhbmRsZXIgZW5zdXJlcyB0aGF0IHRoZSBtYXBwaW5nIG9mIG1lbW9yeSBpcyBvcmRlcmVkLlxuMzgxMDpcdCAqIC0gSWYgd2UgcmVhZCBOVUxMLCB0aGUgY2FsbGVyIHdpbGwgcmUtY2hlY2tcbjM4MTE6XHQgKiAtIFRoZSBwYWdlX3RhYmxlX2xvY2sgcHJvdmlkZXMgQUNRVUlSRSBzZW1hbnRpY3MgZm9yIG1lbW9yeSBvcmRlcmluZ1xuMzgxMjpcdCAqXG4zODEzOlx0ICogUmV0dXJuOiB0cnVlIGlmIHZtYS1cdTAwM2Vhbm9uX3ZtYSBpcyBub24tTlVMTCwgZmFsc2Ugb3RoZXJ3aXNlXG4zODE0Olx0ICovXG4zODE1Olx0c3RhdGljIGlubGluZSBib29sIHZtYV9pc19mYXVsdGVkKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuMzgxNjpcdHtcbjM4MTc6XHRcdC8qIExvY2tsZXNzIGNoZWNrIC0gc2FmZSBiZWNhdXNlIHdlIHJlLXZhbGlkYXRlIHVuZGVyIHBhZ2VfdGFibGVfbG9jayAqL1xuMzgxODpcdFx0cmV0dXJuIGRhdGFfcmFjZSh2bWEtXHUwMDNlYW5vbl92bWEpO1xuMzgxOTpcdH1cbjM4MjA6XHRcbjM4MjE6XHRcbjM4MjI6XHQvKipcbjM4MjM6XHQgKiBfX3ZtZl9hbm9uX3ByZXBhcmUgLSBQcmVwYXJlIHRvIGhhbmRsZSBhbiBhbm9ueW1vdXMgZmF1bHQuXG4zODI0Olx0ICogQHZtZjogVGhlIHZtX2ZhdWx0IGRlc2NyaXB0b3IgcGFzc2VkIGZyb20gdGhlIGZhdWx0IGhhbmRsZXIuXG4zODI1Olx0ICpcbjM4MjY6XHQgKiBXaGVuIHByZXBhcmluZyB0byBpbnNlcnQgYW4gYW5vbnltb3VzIHBhZ2UgaW50byBhIFZNQSBmcm9tIGFcbjM4Mjc6XHQgKiBmYXVsdCBoYW5kbGVyLCBjYWxsIHRoaXMgZnVuY3Rpb24gcmF0aGVyIHRoYW4gYW5vbl92bWFfcHJlcGFyZSgpLlxuMzgyODpcdCAqIElmIHRoaXMgdm1hIGRvZXMgbm90IGFscmVhZHkgaGF2ZSBhbiBhc3NvY2lhdGVkIGFub25fdm1hIGFuZCB3ZSBhcmVcbjM4Mjk6XHQgKiBvbmx5IHByb3RlY3RlZCBieSB0aGUgcGVyLVZNQSBsb2NrLCB0aGUgY2FsbGVyIG11c3QgcmV0cnkgd2l0aCB0aGVcbjM4MzA6XHQgKiBtbWFwX2xvY2sgaGVsZC4gIF9fYW5vbl92bWFfcHJlcGFyZSgpIHdpbGwgbG9vayBhdCBhZGphY2VudCBWTUFzIHRvXG4zODMxOlx0ICogZGV0ZXJtaW5lIGlmIHRoaXMgVk1BIGNhbiBzaGFyZSBpdHMgYW5vbl92bWEsIGFuZCB0aGF0JiMzOTtzIG5vdCBzYWZlIHRvXG4zODMyOlx0ICogZG8gd2l0aCBvbmx5IHRoZSBwZXItVk1BIGxvY2sgaGVsZCBmb3IgdGhpcyBWTUEuXG4zODMzOlx0ICpcbjM4MzQ6XHQgKiBSZXR1cm46IDAgaWYgZmF1bHQgaGFuZGxpbmcgY2FuIHByb2NlZWQuICBBbnkgb3RoZXIgdmFsdWUgc2hvdWxkIGJlXG4zODM1Olx0ICogcmV0dXJuZWQgdG8gdGhlIGNhbGxlci5cbjM4MzY6XHQgKi9cbjM4Mzc6XHR2bV9mYXVsdF90IF9fdm1mX2Fub25fcHJlcGFyZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbjM4Mzg6XHR7XG4zODM5Olx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi1cdTAwM2V2bWE7XG4zODQwOlx0XHR2bV9mYXVsdF90IHJldCA9IDA7XG4zODQxOlx0XHRpZiAobGlrZWx5KHZtYV9pc19mYXVsdGVkKHZtYSkpKVxuMzg0MjpcdFx0XHRyZXR1cm4gMDtcbjM4NDM6XHRcdGlmICh2bWYtXHUwMDNlZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfVk1BX0xPQ0spIHtcbjM4NDQ6XHRcdFx0aWYgKCFtbWFwX3JlYWRfdHJ5bG9jayh2bWEtXHUwMDNldm1fbW0pKVxuMzg0NTpcdFx0XHRcdHJldHVybiBWTV9GQVVMVF9SRVRSWTtcbjM4NDY6XHRcdH1cbjM4NDc6XHRcdGlmIChfX2Fub25fdm1hX3ByZXBhcmUodm1hKSlcbjM4NDg6XHRcdFx0cmV0ID0gVk1fRkFVTFRfT09NO1xuMzg0OTpcdFx0aWYgKHZtZi1cdTAwM2VmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19WTUFfTE9DSylcbjM4NTA6XHRcdFx0bW1hcF9yZWFkX3VubG9jayh2bWEtXHUwMDNldm1fbW0pO1xuMzg1MTpcdFx0cmV0dXJuIHJldDtcbjM4NTI6XHR9XG4zODUzOlx0XG4zODU0Olx0LypcbjM4NTU6XHQgKiBIYW5kbGUgdGhlIGNhc2Ugb2YgYSBwYWdlIHdoaWNoIHdlIGFjdHVhbGx5IG5lZWQgdG8gY29weSB0byBhIG5ldyBwYWdlLFxuMzg1NjpcdCAqIGVpdGhlciBkdWUgdG8gQ09XIG9yIHVuc2hhcmluZy5cbjM4NTc6XHQgKlxuMzg1ODpcdCAqIENhbGxlZCB3aXRoIGVpdGhlciB0aGUgVk1BIGxvY2sgb3IgdGhlIG1tYXBfbG9jayBoZWxkIChzZWUgRkFVTFRfRkxBR19WTUFfTE9DSylcbjM4NTk6XHQgKiBhbmQgdGhlIG9sZCBwYWdlIHJlZmVyZW5jZWQsIGJ1dCB3aXRob3V0IHRoZSBwdGwgaGVsZC5cbjM4NjA6XHQgKlxuMzg2MTpcdCAqIEhpZ2ggbGV2ZWwgbG9naWMgZmxvdzpcbjM4NjI6XHQgKlxuMzg2MzpcdCAqIC0gQWxsb2NhdGUgYSBwYWdlLCBjb3B5IHRoZSBjb250ZW50IG9mIHRoZSBvbGQgcGFnZSB0byB0aGUgbmV3IG9uZS5cbjM4NjQ6XHQgKiAtIEhhbmRsZSBib29rIGtlZXBpbmcgYW5kIGFjY291bnRpbmcgLSBjZ3JvdXBzLCBtbXUtbm90aWZpZXJzLCBldGMuXG4zODY1Olx0ICogLSBUYWtlIHRoZSBQVEwuIElmIHRoZSBwdGUgY2hhbmdlZCwgYmFpbCBvdXQgYW5kIHJlbGVhc2UgdGhlIGFsbG9jYXRlZCBwYWdlXG4zODY2Olx0ICogLSBJZiB0aGUgcHRlIGlzIHN0aWxsIHRoZSB3YXkgd2UgcmVtZW1iZXIgaXQsIHVwZGF0ZSB0aGUgcGFnZSB0YWJsZSBhbmQgYWxsXG4zODY3Olx0ICogICByZWxldmFudCByZWZlcmVuY2VzLiBUaGlzIGluY2x1ZGVzIGRyb3BwaW5nIHRoZSByZWZlcmVuY2UgdGhlIHBhZ2UtdGFibGVcbjM4Njg6XHQgKiAgIGhlbGQgdG8gdGhlIG9sZCBwYWdlLCBhcyB3ZWxsIGFzIHVwZGF0aW5nIHRoZSBybWFwLlxuMzg2OTpcdCAqIC0gSW4gYW55IGNhc2UsIHVubG9jayB0aGUgUFRMIGFuZCBkcm9wIHRoZSByZWZlcmVuY2Ugd2UgdG9vayB0byB0aGUgb2xkIHBhZ2UuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg0MAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDYwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFByb3Bvc2VkIFBhdGNoOiBBIE1lbW9yeSBNYW5hZ2VtZW50IFBlcnNwZWN0aXZlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBpcyBpbiBgbW0vbWVtb3J5LmNgLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBteSBhdHRlbnRpb24g4oCTIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgaXMgYWx3YXlzIGEgY3JpdGljYWwgYXJlYS4gSXQgaW50cm9kdWNlcyBgdm1hX2lzX2ZhdWx0ZWQodm1hKWAsIHdoaWNoIHdyYXBzIGEgYGRhdGFfcmFjZWAgY2hlY2sgb24gYHZtYS0mZ3Q7YW5vbl92bWFgLiBUaGF0JiMzOTtzIHRvIHN1cHByZXNzIEtDU0FOIHJlcG9ydHMsIG9yIGRvY3VtZW50IHRoZSBkYXRhIHJhY2Ugb24gdGhlIGxvY2tsZXNzIHJlYWQgb2YgYHZtYS0mZ3Q7YW5vbl92bWFgLCBhbmQgcmVwbGFjZXMgYW4gYGlmIChsaWtlbHkodm1hLSZndDthbm9uX3ZtYSkpYCBjaGVjay4KCkZpcnN0LCAqaXMqIHRoaXMgcmVhbGx5IGNvcmUgbW0/IFllcywgYG1tL21lbW9yeS5jYCwgY29uZmlybWVkLiBOb3csIGxldCBtZSBjaGVjayB0aGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBndWlkZWxpbmVzLiBSaWdodCwgdGhlIGdvYWwgaXMgdG8gZmluZCBjcmFzaGVzIGFuZCBidWdzLCBlc3BlY2lhbGx5IGluIGNvcmUgc3Vic3lzdGVtcyBsaWtlIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGlzIHBhdGNoIGRlZmluaXRlbHkgZmFsbHMgdW5kZXIgdGhhdCBzY29wZSwgZXNwZWNpYWxseSBhcyBpdCB0b3VjaGVzIG9uIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLiBXZSBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0aGlzIGNoYW5nZSBpbXBhY3RzIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGFsZ29yaXRobXMuCgpOb3csIHdoYXQgaXMgdGhpcyBgdm1hX2lzX2ZhdWx0ZWRgIGRvaW5nPyBJdCYjMzk7cyBhIHN0YXRpYyBpbmxpbmUgaGVscGVyLiBUaGUgaW1wb3J0YW50IHBhcnQgaXMgdGhhdCBgX192bWZfYW5vbl9wcmVwYXJlYCBpcyBjYWxsZWQgaW4gcmVsYXRpb24gdG8gYW5vbnltb3VzIHBhZ2UgZmF1bHRzLiBPa2F5LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgdG8gdGhlIEZvY3VzU3ltYm9scyBndWlkYW5jZS4gUmlnaHQsIHRoZSBmdXp6aW5nIGRvY3VtZW50YXRpb24gdGVsbHMgbWUgdG8gYXZvaWQgdWJpcXVpdG91cyBsaWZlY3ljbGUgZnVuY3Rpb25zIGxpa2UgZ2VuZXJhbCBhbGxvY2F0b3JzLCBkZWFsbG9jYXRvcnMsIG9yIHBhZ2UgZmF1bHQgaGFuZGxlcnMuICpBdm9pZCogdGhvc2UhIEluc3RlYWQsIHRhcmdldCB0aGUgKnNwZWNpZmljIGZlYXR1cmUgbG9naWMqLiBIbW0sIGFuZCB0aGlzIGd1aWRhbmNlIGlzIGltcG9ydGFudDogc3RhdGljIGlubGluZXMgaW4gaGVhZGVycyBsYWNrIGRpc3RpbmN0IHN5bWJvbHMuIEkgbmVlZCB0byBmb2N1cyBvbiBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljICpjYWxsZXIqIGZ1bmN0aW9ucy4KClNvLCBJIG5lZWQgdG8gZmluZCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbiBtb2RpZmllZCwgYW5kIHRoYXQgaXMgYF9fdm1mX2Fub25fcHJlcGFyZWAhIFRoZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB3aGVyZSBpdCYjMzk7cyBjYWxsZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIGFuZCBob3cgdG8gYmVzdCBndWlkZSB0aGUgZnV6emVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fdm1mX2Fub25fcHJlcGFyZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiLmM9NTQyMz1zdGF0aWMgdm1fZmF1bHRfdCBodWdldGxiX3dwKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL2h1Z2V0bGIuYy01NTYwLVx0ICovXG5tbS9odWdldGxiLmM6NTU2MTpcdHJldCA9IF9fdm1mX2Fub25fcHJlcGFyZSh2bWYpO1xubW0vaHVnZXRsYi5jLTU1NjItXHRpZiAodW5saWtlbHkocmV0KSlcbi0tXG5tbS9odWdldGxiLmM9NTY5NT1zdGF0aWMgdm1fZmF1bHRfdCBodWdldGxiX25vX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxubW0vaHVnZXRsYi5jLTU3NTktXHRcdGlmICghKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTUFZU0hBUkUpKSB7XG5tbS9odWdldGxiLmM6NTc2MDpcdFx0XHRyZXQgPSBfX3ZtZl9hbm9uX3ByZXBhcmUodm1mKTtcbm1tL2h1Z2V0bGIuYy01NzYxLVx0XHRcdGlmICh1bmxpa2VseShyZXQpKVxuLS1cbm1tL2h1Z2V0bGIuYy01ODk5LVx0Lypcbm1tL2h1Z2V0bGIuYzo1OTAwOlx0ICogV2UgbXVzdCBjaGVjayB0byByZWxlYXNlIHRoZSBwZXItVk1BIGxvY2suIF9fdm1mX2Fub25fcHJlcGFyZSgpIGlzXG5tbS9odWdldGxiLmMtNTkwMS1cdCAqIHRoZSBvbmx5IHdheSByZXQgY2FuIGJlIHNldCB0byBWTV9GQVVMVF9SRVRSWS5cbi0tXG5tbS9odWdldGxiLmM9NTk0NT12bV9mYXVsdF90IGh1Z2V0bGJfZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy02MTExLVx0Lypcbm1tL2h1Z2V0bGIuYzo2MTEyOlx0ICogV2UgbXVzdCBjaGVjayB0byByZWxlYXNlIHRoZSBwZXItVk1BIGxvY2suIF9fdm1mX2Fub25fcHJlcGFyZSgpIGluXG5tbS9odWdldGxiLmMtNjExMy1cdCAqIGh1Z2V0bGJfd3AoKSBpcyB0aGUgb25seSB3YXkgcmV0IGNhbiBiZSBzZXQgdG8gVk1fRkFVTFRfUkVUUlkuXG4tLVxubW0vaW50ZXJuYWwuaD00ODI9c3RhdGljIGlubGluZSB2b2lkIHdha2VfdGhyb3R0bGVfaXNvbGF0ZWQocGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS9pbnRlcm5hbC5oLTQ5MC1cbm1tL2ludGVybmFsLmg6NDkxOnZtX2ZhdWx0X3QgX192bWZfYW5vbl9wcmVwYXJlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKTtcbm1tL2ludGVybmFsLmgtNDkyLXN0YXRpYyBpbmxpbmUgdm1fZmF1bHRfdCB2bWZfYW5vbl9wcmVwYXJlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxubW0vaW50ZXJuYWwuaC00OTMte1xubW0vaW50ZXJuYWwuaDo0OTQ6XHR2bV9mYXVsdF90IHJldCA9IF9fdm1mX2Fub25fcHJlcGFyZSh2bWYpO1xubW0vaW50ZXJuYWwuaC00OTUtXG4tLVxubW0vbWVtb3J5LmM9MzgxNT1zdGF0aWMgaW5saW5lIGJvb2wgdm1hX2lzX2ZhdWx0ZWQoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vbWVtb3J5LmMtMzgyMi0vKipcbm1tL21lbW9yeS5jOjM4MjM6ICogX192bWZfYW5vbl9wcmVwYXJlIC0gUHJlcGFyZSB0byBoYW5kbGUgYW4gYW5vbnltb3VzIGZhdWx0LlxubW0vbWVtb3J5LmMtMzgyNC0gKiBAdm1mOiBUaGUgdm1fZmF1bHQgZGVzY3JpcHRvciBwYXNzZWQgZnJvbSB0aGUgZmF1bHQgaGFuZGxlci5cbi0tXG5tbS9tZW1vcnkuYy0zODM2LSAqL1xubW0vbWVtb3J5LmM6MzgzNzp2bV9mYXVsdF90IF9fdm1mX2Fub25fcHJlcGFyZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbm1tL21lbW9yeS5jLTM4Mzgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2NTcKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGB2bWZfYW5vbl9wcmVwYXJlYCBGdW5jdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBfX3ZtZl9hbm9uX3ByZXBhcmVgLiBSaWdodCwgc28gaXQmIzM5O3MgZGVmaW5lZCBpbiBgbW0vbWVtb3J5LmNgIGFuZCBkZWNsYXJlZCBpbiBgbW0vaW50ZXJuYWwuaGAuIFRoYXQgbWFrZXMgc2Vuc2U7IGBtbS9gIGlzIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN0dWZmLiBOb3csIEkgbmVlZCB0byBrbm93IGhvdyBpdCYjMzk7cyAqdXNlZCouIFRoZSBiZXN0IHdheSB0byBkbyB0aGF0IGlzIHRvIGNoZWNrIHdoZXJlIGl0JiMzOTtzIGNhbGxlZC4gVGltZSBmb3IgYSBxdWljayBgZ3JlcGAgc2VhcmNoIGZvciBgdm1mX2Fub25fcHJlcGFyZWAuIExldCYjMzk7cyBzZWUgd2hhdCB0dXJucyB1cC4gSG9wZWZ1bGx5LCB0aGF0IHdpbGwgZ2l2ZSBtZSBzb21lIGNvbnRleHQgYXJvdW5kIHRoZSBpbnRlbnQgYW5kIGZ1bmN0aW9uIG9mIHRoaXMgcHJlcGFyYXRpb24gZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTM6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1mX2Fub25fcHJlcGFyZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTE1MTk9dm1fZmF1bHRfdCBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE1MjYtXHRcdHJldHVybiBWTV9GQVVMVF9GQUxMQkFDSztcbm1tL2h1Z2VfbWVtb3J5LmM6MTUyNzpcdHJldCA9IHZtZl9hbm9uX3ByZXBhcmUodm1mKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMTUyOC1cdGlmIChyZXQpXG4tLVxubW0vaHVnZXRsYi5jPTU0MjM9c3RhdGljIHZtX2ZhdWx0X3QgaHVnZXRsYl93cChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9odWdldGxiLmMtNTU2MC1cdCAqL1xubW0vaHVnZXRsYi5jOjU1NjE6XHRyZXQgPSBfX3ZtZl9hbm9uX3ByZXBhcmUodm1mKTtcbm1tL2h1Z2V0bGIuYy01NTYyLVx0aWYgKHVubGlrZWx5KHJldCkpXG4tLVxubW0vaHVnZXRsYi5jPTU2OTU9c3RhdGljIHZtX2ZhdWx0X3QgaHVnZXRsYl9ub19wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL2h1Z2V0bGIuYy01NzU5LVx0XHRpZiAoISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX01BWVNIQVJFKSkge1xubW0vaHVnZXRsYi5jOjU3NjA6XHRcdFx0cmV0ID0gX192bWZfYW5vbl9wcmVwYXJlKHZtZik7XG5tbS9odWdldGxiLmMtNTc2MS1cdFx0XHRpZiAodW5saWtlbHkocmV0KSlcbi0tXG5tbS9odWdldGxiLmMtNTg5OS1cdC8qXG5tbS9odWdldGxiLmM6NTkwMDpcdCAqIFdlIG11c3QgY2hlY2sgdG8gcmVsZWFzZSB0aGUgcGVyLVZNQSBsb2NrLiBfX3ZtZl9hbm9uX3ByZXBhcmUoKSBpc1xubW0vaHVnZXRsYi5jLTU5MDEtXHQgKiB0aGUgb25seSB3YXkgcmV0IGNhbiBiZSBzZXQgdG8gVk1fRkFVTFRfUkVUUlkuXG4tLVxubW0vaHVnZXRsYi5jPTU5NDU9dm1fZmF1bHRfdCBodWdldGxiX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtNjExMS1cdC8qXG5tbS9odWdldGxiLmM6NjExMjpcdCAqIFdlIG11c3QgY2hlY2sgdG8gcmVsZWFzZSB0aGUgcGVyLVZNQSBsb2NrLiBfX3ZtZl9hbm9uX3ByZXBhcmUoKSBpblxubW0vaHVnZXRsYi5jLTYxMTMtXHQgKiBodWdldGxiX3dwKCkgaXMgdGhlIG9ubHkgd2F5IHJldCBjYW4gYmUgc2V0IHRvIFZNX0ZBVUxUX1JFVFJZLlxuLS1cbm1tL2ludGVybmFsLmg9NDgyPXN0YXRpYyBpbmxpbmUgdm9pZCB3YWtlX3Rocm90dGxlX2lzb2xhdGVkKHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vaW50ZXJuYWwuaC00OTAtXG5tbS9pbnRlcm5hbC5oOjQ5MTp2bV9mYXVsdF90IF9fdm1mX2Fub25fcHJlcGFyZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XG5tbS9pbnRlcm5hbC5oOjQ5MjpzdGF0aWMgaW5saW5lIHZtX2ZhdWx0X3Qgdm1mX2Fub25fcHJlcGFyZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbm1tL2ludGVybmFsLmgtNDkzLXtcbm1tL2ludGVybmFsLmg6NDk0Olx0dm1fZmF1bHRfdCByZXQgPSBfX3ZtZl9hbm9uX3ByZXBhcmUodm1mKTtcbm1tL2ludGVybmFsLmgtNDk1LVxuLS1cbm1tL21lbW9yeS5jPTM4MTU9c3RhdGljIGlubGluZSBib29sIHZtYV9pc19mYXVsdGVkKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL21lbW9yeS5jLTM4MjItLyoqXG5tbS9tZW1vcnkuYzozODIzOiAqIF9fdm1mX2Fub25fcHJlcGFyZSAtIFByZXBhcmUgdG8gaGFuZGxlIGFuIGFub255bW91cyBmYXVsdC5cbm1tL21lbW9yeS5jLTM4MjQtICogQHZtZjogVGhlIHZtX2ZhdWx0IGRlc2NyaXB0b3IgcGFzc2VkIGZyb20gdGhlIGZhdWx0IGhhbmRsZXIuXG4tLVxubW0vbWVtb3J5LmMtMzgzNi0gKi9cbm1tL21lbW9yeS5jOjM4Mzc6dm1fZmF1bHRfdCBfX3ZtZl9hbm9uX3ByZXBhcmUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG5tbS9tZW1vcnkuYy0zODM4LXtcbi0tXG5tbS9tZW1vcnkuYz0zODcxPXN0YXRpYyB2bV9mYXVsdF90IHdwX3BhZ2VfY29weShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy0zODg3LVx0XHRvbGRfZm9saW8gPSBwYWdlX2ZvbGlvKHZtZi1cdTAwM2VwYWdlKTtcbm1tL21lbW9yeS5jOjM4ODg6XHRyZXQgPSB2bWZfYW5vbl9wcmVwYXJlKHZtZik7XG5tbS9tZW1vcnkuYy0zODg5LVx0aWYgKHVubGlrZWx5KHJldCkpXG4tLVxubW0vbWVtb3J5LmM9NTMwNT1zdGF0aWMgdm1fZmF1bHRfdCBkb19hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy01MzU1LVx0LyogQWxsb2NhdGUgb3VyIG93biBwcml2YXRlIHBhZ2UuICovXG5tbS9tZW1vcnkuYzo1MzU2Olx0cmV0ID0gdm1mX2Fub25fcHJlcGFyZSh2bWYpO1xubW0vbWVtb3J5LmMtNTM1Ny1cdGlmIChyZXQpXG4tLVxubW0vbWVtb3J5LmM9NTg5MD1zdGF0aWMgdm1fZmF1bHRfdCBkb19jb3dfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNTg5Ny1cdGlmICghcmV0KVxubW0vbWVtb3J5LmM6NTg5ODpcdFx0cmV0ID0gdm1mX2Fub25fcHJlcGFyZSh2bWYpO1xubW0vbWVtb3J5LmMtNTg5OS1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA4MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE1NTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHdhcnJhbnRzIGZ1enppbmcgYmFzZWQgb24gV29ydGhGdXp6aW5nIGNyaXRlcmlhLiBUaGlzIHBhdGNoIG1vZGlmaWVzIGBtbS9tZW1vcnkuY2AsIHNwZWNpZmljYWxseSBgX192bWZfYW5vbl9wcmVwYXJlYC4gSXQgaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBjYWxsIGB2bWFfaXNfZmF1bHRlZGAgd2hpY2ggc2VlbXMgdG8gYmUgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uLiBCZWNhdXNlIGl0JiMzOTtzIGEgbW9kaWZpY2F0aW9uIHRvIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKGBtbS9gKSwgV29ydGhGdXp6aW5nIGlzIGRlZmluaXRpdmVseSB0cnVlLCBJJiMzOTtkIGZsYWcgdGhpcyBmb3IgZnV6emluZy4KCk5leHQsIEkgbmVlZCB0byBldmFsdWF0ZSBGb2N1c1N5bWJvbHMuIFRoZSBxdWVzdGlvbiBub3cgaXMgd2hldGhlciB0aGUgbW9kaWZpZWQgZnVuY3Rpb24gaXMgYSBzdWl0YWJsZSB0YXJnZXQuIEkgbmVlZCB0byBhdm9pZCB1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aHMuICBJbml0aWFsbHksIEkgY29uc2lkZXJlZCBpZiBgX192bWZfYW5vbl9wcmVwYXJlYCBpcyBhIGNvbW1vbmx5IGV4ZWN1dGVkIGZ1bmN0aW9uLiBCdXQgd2FpdCwgYF9fdm1mX2Fub25fcHJlcGFyZWAgaXMgY2FsbGVkIGluIHRoZSBwcmVwYXJhdGlvbiB0byBoYW5kbGUgYW5vbnltb3VzIGZhdWx0cy4gRnVydGhlciBpbnZlc3RpZ2F0aW9uIHJldmVhbHMgdGhhdCBgX192bWZfYW5vbl9wcmVwYXJlYCBpcyBhIG5vbi1zdGF0aWMgc3ltYm9sLiBTaW5jZSBgdm1hX2lzX2ZhdWx0ZWRgIGlzIGEgc3RhdGljIGlubGluZSwgaXQmIzM5O3MgY29tcGlsZWQgaW50byBgX192bWZfYW5vbl9wcmVwYXJlYC4gVGhlcmVmb3JlLCBgX192bWZfYW5vbl9wcmVwYXJlYCBpcyB0aGUgZXhhY3QgZnVuY3Rpb24gd2hlcmUgdGhlIGNvZGUgaXMgY29tcGlsZWQgaW50bywgSSBoYXZlIHRoZSBjb3JyZWN0IGZ1bmN0aW9uIHN5bWJvbC4gWWVzLCBgX192bWZfYW5vbl9wcmVwYXJlYCBpcyB0aGUgcmlnaHQgZm9jdXMgc3ltYm9sLgoKRmluYWxseSwgcmVnYXJkaW5nIEVuYWJsZUNvbmZpZ3MsIHRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgc28gYW55IHN0YW5kYXJkIGtlcm5lbCBjb25maWd1cmF0aW9uIHdpdGggTU1VIHN1cHBvcnQgc2hvdWxkIGJlIHN1ZmZpY2llbnQuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmxvY2tzIChgI2lmZGVmYCkgdGhhdCBtaWdodCBpbXBhY3QgdGhlIGNvZGUgYXJvdW5kIHRoaXMgc2VjdGlvbiwgYnV0IGl0IHNlZW1zIHVubGlrZWx5IGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZS4gVGhpcyBjaGFuZ2UgbG9va3Mgc3RyYWlnaHRmb3J3YXJkOyBzdGFuZGFyZCBrZXJuZWwgY29uZmlncyBzaG91bGQgYXBwbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNzgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM3ODA6XHRcdGVudHJ5ID0gcHRlX21reW91bmcodm1mLVx1MDAzZW9yaWdfcHRlKTtcbjM3ODE6XHRcdGVudHJ5ID0gbWF5YmVfbWt3cml0ZShwdGVfbWtkaXJ0eShlbnRyeSksIHZtYSk7XG4zNzgyOlx0XHRpZiAocHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHZtYSwgdm1mLVx1MDAzZWFkZHJlc3MsIHZtZi1cdTAwM2VwdGUsIGVudHJ5LCAxKSlcbjM3ODM6XHRcdFx0dXBkYXRlX21tdV9jYWNoZV9yYW5nZSh2bWYsIHZtYSwgdm1mLVx1MDAzZWFkZHJlc3MsIHZtZi1cdTAwM2VwdGUsIDEpO1xuMzc4NDpcdFx0cHRlX3VubWFwX3VubG9jayh2bWYtXHUwMDNlcHRlLCB2bWYtXHUwMDNlcHRsKTtcbjM3ODU6XHRcdGNvdW50X3ZtX2V2ZW50KFBHUkVVU0UpO1xuMzc4NjpcdH1cbjM3ODc6XHRcbjM3ODg6XHQvKlxuMzc4OTpcdCAqIFdlIGNvdWxkIGFkZCBhIGJpdGZsYWcgc29tZXdoZXJlLCBidXQgZm9yIG5vdywgd2Uga25vdyB0aGF0IGFsbFxuMzc5MDpcdCAqIHZtX29wcyB0aGF0IGhhdmUgYSAtXHUwMDNlbWFwX3BhZ2VzIGhhdmUgYmVlbiBhdWRpdGVkIGFuZCBkb24mIzM5O3QgbmVlZFxuMzc5MTpcdCAqIHRoZSBtbWFwX2xvY2sgdG8gYmUgaGVsZC5cbjM3OTI6XHQgKi9cbjM3OTM6XHRzdGF0aWMgaW5saW5lIHZtX2ZhdWx0X3Qgdm1mX2Nhbl9jYWxsX2ZhdWx0KGNvbnN0IHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuMzc5NDpcdHtcbjM3OTU6XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mLVx1MDAzZXZtYTtcbjM3OTY6XHRcbjM3OTc6XHRcdGlmICh2bWEtXHUwMDNldm1fb3BzLVx1MDAzZW1hcF9wYWdlcyB8fCAhKHZtZi1cdTAwM2VmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19WTUFfTE9DSykpXG4zNzk4Olx0XHRcdHJldHVybiAwO1xuMzc5OTpcdFx0dm1hX2VuZF9yZWFkKHZtYSk7XG4zODAwOlx0XHRyZXR1cm4gVk1fRkFVTFRfUkVUUlk7XG4zODAxOlx0fVxuMzgwMjpcdFxuMzgwMzpcdC8qKlxuMzgwNDpcdCAqIHZtYV9pc19mYXVsdGVkIC0gY2hlY2sgaWYgYSB2bWEgaGFzIGJlZW4gZmF1bHRlZFxuMzgwNTpcdCAqIEB2bWE6IHRoZSB2bWEgdG8gY2hlY2tcbjM4MDY6XHQgKlxuMzgwNzpcdCAqIFRoaXMgaXMgYSBsb2NrbGVzcyBhY2Nlc3MgdGhhdCBtYXkgcmFjZSB3aXRoIF9fYW5vbl92bWFfcHJlcGFyZSgpLlxuMzgwODpcdCAqIFRoZSByYWNlIGlzIHNhZmUgYmVjYXVzZTpcbjM4MDk6XHQgKiAtIFRoZSBmYXVsdCBoYW5kbGVyIGVuc3VyZXMgdGhhdCB0aGUgbWFwcGluZyBvZiBtZW1vcnkgaXMgb3JkZXJlZC5cbjM4MTA6XHQgKiAtIElmIHdlIHJlYWQgTlVMTCwgdGhlIGNhbGxlciB3aWxsIHJlLWNoZWNrXG4zODExOlx0ICogLSBUaGUgcGFnZV90YWJsZV9sb2NrIHByb3ZpZGVzIEFDUVVJUkUgc2VtYW50aWNzIGZvciBtZW1vcnkgb3JkZXJpbmdcbjM4MTI6XHQgKlxuMzgxMzpcdCAqIFJldHVybjogdHJ1ZSBpZiB2bWEtXHUwMDNlYW5vbl92bWEgaXMgbm9uLU5VTEwsIGZhbHNlIG90aGVyd2lzZVxuMzgxNDpcdCAqL1xuMzgxNTpcdHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfZmF1bHRlZChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbjM4MTY6XHR7XG4zODE3Olx0XHQvKiBMb2NrbGVzcyBjaGVjayAtIHNhZmUgYmVjYXVzZSB3ZSByZS12YWxpZGF0ZSB1bmRlciBwYWdlX3RhYmxlX2xvY2sgKi9cbjM4MTg6XHRcdHJldHVybiBkYXRhX3JhY2Uodm1hLVx1MDAzZWFub25fdm1hKTtcbjM4MTk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzYyCgkJCQkJCQlvdXRwdXQ6IDEwNAoJCQkJCQkJdGhvdWdodHM6IDE1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBmb3IgU2V0dGluZyBGdXp6aW5nIFBhcmFtZXRlcnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29uZmlndXJhdGlvbiwgYW5kIHRoZSBpbW1lZGlhdGUgb2JzZXJ2YXRpb24gaXMgdGhlIGNvbXBsZXRlIGFic2VuY2Ugb2YgYCNpZmRlZmAgZ3VhcmRzLiBUaGF0JiMzOTtzIGEgZ29vZCBzaWduLCBhbmQgdGhlIE1NVSBiZWluZyBkZWZhdWx0IGZvciBhbWQ2NCBpcyBhbHNvIHN0YW5kYXJkIGJlaGF2aW9yLCBzbyBub3RoaW5nIGp1bXBzIG91dCB0aGVyZS4KCk5vdywgbGV0JiMzOTtzIHZlcmlmeSBpZiBgRW5hYmxlQ29uZmlnc2Agc2hvdWxkIGluZGVlZCBiZSBhbiBlbXB0eSBsaXN0LCBgW11gLiBZZXAsIHRoYXQmIzM5O3MgY29ycmVjdCBmb3IgdGhlIHN0YW5kYXJkIGNvcmUga2VybmVsIGZ1bmN0aW9uYWxpdHkgd2UmIzM5O3JlIHRhcmdldGluZy4gTW92aW5nIG9uLi4uCgpOb3csIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGBGb2N1c1N5bWJvbHNgIGVudHJ5LiBJIG5lZWQgdG8gbWFrZSAqYWJzb2x1dGVseSogc3VyZSBJIGhhdmUgdGhlIHJpZ2h0IHN5bWJvbC4gT2theSwgYF9fdm1mX2Fub25fcHJlcGFyZWAgaXMgdGhlIG5vbi1zdGF0aWMgc3ltYm9sIGluIGBtbS9tZW1vcnkuY2AgdGhhdCAqZXhhY3RseSogY29udGFpbnMgdGhlIGNoYW5nZSBJJiMzOTttIGFmdGVyLiBUaGF0JiMzOTtzIGl0IQoKQWxyaWdodCwgdGltZSB0byBlbnN1cmUgSSBoYXZlIHRoZSByaWdodCBmb3JtYXQgZm9yIGBzZXQtcmVzdWx0c2AuIEp1c3QgdG8gYmUgY2xlYXI6CiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXWAgLSBlbXB0eSBsaXN0LCBjb3JlIGZ1bmN0aW9uYWxpdHkuCiogICBgRm9jdXNTeW1ib2xzYDogYFsmIzM0O19fdm1mX2Fub25fcHJlcGFyZSYjMzQ7XWAgLSB0aGF0IHNwZWNpZmljIHN5bWJvbCwgbm90aGluZyBlbHNlLgoqICAgYFJlYXNvbmluZ2A6IENvbmNpc2UgZXhwbGFuYXRpb24sIG9mIGNvdXJzZS4KKiAgIGBXb3J0aEZ1enppbmdgOiBgdHJ1ZWAgLSBBYnNvbHV0ZWx5IQoKUGVyZmVjdC4gSSYjMzk7bSBzYXRpc2ZpZWQuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3ZtZl9hbm9uX3ByZXBhcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGluIG1tL21lbW9yeS5jIGJ5IGludHJvZHVjaW5nIGEgbmV3IGhlbHBlciB2bWFfaXNfZmF1bHRlZCgpIHVzaW5nIGRhdGFfcmFjZSgpIGFuZCB1cGRhdGluZyBfX3ZtZl9hbm9uX3ByZXBhcmUoKS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBmYXVsdCBwcmVwYXJhdGlvbiBwYXRocyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byB2ZXJpZnkgbG9ja2xlc3MgY29uY3VycmVuY3kgaW52YXJpYW50cyBhbmQgbWVtb3J5IG9yZGVyaW5nIGJlaGF2aW9yLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fdm1mX2Fub25fcHJlcGFyZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaW4gbW0vbWVtb3J5LmMgYnkgaW50cm9kdWNpbmcgYSBuZXcgaGVscGVyIHZtYV9pc19mYXVsdGVkKCkgdXNpbmcgZGF0YV9yYWNlKCkgYW5kIHVwZGF0aW5nIF9fdm1mX2Fub25fcHJlcGFyZSgpLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIGZhdWx0IHByZXBhcmF0aW9uIHBhdGhzIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIHZlcmlmeSBsb2NrbGVzcyBjb25jdXJyZW5jeSBpbnZhcmlhbnRzIGFuZCBtZW1vcnkgb3JkZXJpbmcgYmVoYXZpb3IuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTM6MDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgaGVscGVyIGZ1bmN0aW9uIGB2bWFfaXNfZmF1bHRlZCgpYCB0byBhbm5vdGF0ZSBhIGxvY2tsZXNzIHJlYWQgb2YgYHZtYS1cdTAwM2Vhbm9uX3ZtYWAgdXNpbmcgYGRhdGFfcmFjZSgpYCBpbiBgX192bWZfYW5vbl9wcmVwYXJlKClgLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdGFjay9oZWFwIGJ1ZmZlcnMsIHN0cnVjdHVyZSBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3Nlcy4gVGhlIGB2bV9hcmVhX3N0cnVjdGAgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCBieSB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIEFzIHRoZXJlIGlzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyIHNwYWNlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGIzZmJkYWI3YjdkYTkwNjAzOWY2OTdhNDdjNjJjNTk0NmNlNTFhOTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDEzOjA0OjAxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCA2YjgyODBjZmMxZGJlLi5kODVkNjc5Mjc0MDBiIDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuYwpAQCAtMzgwMCw2ICYjNDM7MzgwMCwyNSBAQCBzdGF0aWMgaW5saW5lIHZtX2ZhdWx0X3Qgdm1mX2Nhbl9jYWxsX2ZhdWx0KGNvbnN0IHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCXJldHVybiBWTV9GQVVMVF9SRVRSWTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHZtYV9pc19mYXVsdGVkIC0gY2hlY2sgaWYgYSB2bWEgaGFzIGJlZW4gZmF1bHRlZAomIzQzOyAqIEB2bWE6IHRoZSB2bWEgdG8gY2hlY2sKJiM0MzsgKgomIzQzOyAqIFRoaXMgaXMgYSBsb2NrbGVzcyBhY2Nlc3MgdGhhdCBtYXkgcmFjZSB3aXRoIF9fYW5vbl92bWFfcHJlcGFyZSgpLgomIzQzOyAqIFRoZSByYWNlIGlzIHNhZmUgYmVjYXVzZToKJiM0MzsgKiAtIFRoZSBmYXVsdCBoYW5kbGVyIGVuc3VyZXMgdGhhdCB0aGUgbWFwcGluZyBvZiBtZW1vcnkgaXMgb3JkZXJlZC4KJiM0MzsgKiAtIElmIHdlIHJlYWQgTlVMTCwgdGhlIGNhbGxlciB3aWxsIHJlLWNoZWNrCiYjNDM7ICogLSBUaGUgcGFnZV90YWJsZV9sb2NrIHByb3ZpZGVzIEFDUVVJUkUgc2VtYW50aWNzIGZvciBtZW1vcnkgb3JkZXJpbmcKJiM0MzsgKgomIzQzOyAqIFJldHVybjogdHJ1ZSBpZiB2bWEtJmd0O2Fub25fdm1hIGlzIG5vbi1OVUxMLCBmYWxzZSBvdGhlcndpc2UKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgdm1hX2lzX2ZhdWx0ZWQoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiYjNDM7ewomIzQzOwkvKiBMb2NrbGVzcyBjaGVjayAtIHNhZmUgYmVjYXVzZSB3ZSByZS12YWxpZGF0ZSB1bmRlciBwYWdlX3RhYmxlX2xvY2sgKi8KJiM0MzsJcmV0dXJuIGRhdGFfcmFjZSh2bWEtJmd0O2Fub25fdm1hKTsKJiM0Mzt9CiYjNDM7CiYjNDM7CiAvKioKICAqIF9fdm1mX2Fub25fcHJlcGFyZSAtIFByZXBhcmUgdG8gaGFuZGxlIGFuIGFub255bW91cyBmYXVsdC4KICAqIEB2bWY6IFRoZSB2bV9mYXVsdCBkZXNjcmlwdG9yIHBhc3NlZCBmcm9tIHRoZSBmYXVsdCBoYW5kbGVyLgpAQCAtMzgxOSw4ICYjNDM7MzgzOCw3IEBAIHZtX2ZhdWx0X3QgX192bWZfYW5vbl9wcmVwYXJlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogewogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mLSZndDt2bWE7CiAJdm1fZmF1bHRfdCByZXQgPSAwOwotCi0JaWYgKGxpa2VseSh2bWEtJmd0O2Fub25fdm1hKSkKJiM0MzsJaWYgKGxpa2VseSh2bWFfaXNfZmF1bHRlZCh2bWEpKSkKIAkJcmV0dXJuIDA7CiAJaWYgKHZtZi0mZ3Q7ZmxhZ3MgJmFtcDsgRkFVTFRfRkxBR19WTUFfTE9DSykgewogCQlpZiAoIW1tYXBfcmVhZF90cnlsb2NrKHZtYS0mZ3Q7dm1fbW0pKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQwNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB3aXRoaW4gYG1tL21lbW9yeS5jYC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgY2VudGVyZWQgYXJvdW5kIGB2bWFfaXNfZmF1bHRlZGAgYW5kIGhvdyBpdCYjMzk7cyB1c2VkIGluIHRoZSBmYXVsdCBoYW5kbGluZyBwYXRoLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzIHRvIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzLCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbnQgYW5kIGl0cyBpbXBsaWNhdGlvbnMuCgpGaXJzdCwgSSBzZWUgYSBuZXcgaW5saW5lIGZ1bmN0aW9uLCBgdm1hX2lzX2ZhdWx0ZWRgLiBJdCBhcHBlYXJzIHRvIGJlIGEgbG9ja2xlc3MgY2hlY2sgdG8gZGV0ZXJtaW5lIGlmIGEgVk1BIChWaXJ0dWFsIE1lbW9yeSBBcmVhKSBoYXMgYWxyZWFkeSBiZWVuIGZhdWx0ZWQuIFRoZSBjb21tZW50cyBhcmUgY3JpdGljYWwgaGVyZSDigJMgdGhleSBoaWdobGlnaHQgdGhlIHBvdGVudGlhbCBkYXRhIHJhY2Ugd2l0aCBgX19hbm9uX3ZtYV9wcmVwYXJlKClgIGFuZCwgaW1wb3J0YW50bHksIHdoeSBpdCYjMzk7cyBjb25zaWRlcmVkIHNhZmUuIFRoZSBleHBsYW5hdGlvbiBhYm91dCBtZW1vcnkgb3JkZXJpbmcgZW5mb3JjZWQgYnkgdGhlIGZhdWx0IGhhbmRsZXIgYW5kIHRoZSB1c2Ugb2YgYHBhZ2VfdGFibGVfbG9ja2AgZm9yIGFjcXVpcmUgc2VtYW50aWNzIGlzIHdoYXQgSSB3b3VsZCBleHBlY3QgaW4gYSBsb3ctbGV2ZWwgbWVtb3J5IG1hbmFnZW1lbnQgY29udGV4dC4gSXQgaXMgaW50ZXJlc3RpbmcgdGhleSBhcmUgdXNpbmcgYGRhdGFfcmFjZWAgaGVyZSwgSSB3aWxsIGhhdmUgdG8gaW52ZXN0aWdhdGUgd2hlcmUgdGhhdCBtYWNybyBpcyBkZWZpbmVkLgoKRXNzZW50aWFsbHksIHRoZXkmIzM5O3JlIG9wdGltaXppbmcgYnkgYXZvaWRpbmcgYSBsb2NrIGluIHRoZSBjb21tb24gY2FzZSwgcmVseWluZyBvbiByZS12YWxpZGF0aW9uIGlmIHRoZXkgcmVhZCBhIHN0YWxlIHZhbHVlLiBUaGlzIG1ha2VzIHNlbnNlIGZyb20gYSBwZXJmb3JtYW5jZSBwZXJzcGVjdGl2ZSDigJMgbWluaW1pemluZyBsb2NrIGNvbnRlbnRpb24gaXMgYWx3YXlzIGEgZ29vZCBnb2FsLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB3aGVyZSBpdCYjMzk7cyAqdXNlZCouIFRoZSBjaGFuZ2UgaW4gYF9fdm1mX2Fub25fcHJlcGFyZWAgaXMgdGhlIGtleS4gVGhlIHBhdGNoIHJlcGxhY2VzIHRoZSBkaXJlY3QgY2hlY2sgYHZtYS0mZ3Q7YW5vbl92bWFgIHdpdGggYSBjYWxsIHRvIG91ciBuZXcgZnVuY3Rpb24gYHZtYV9pc19mYXVsdGVkYC4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBsb2NrbGVzcyBjaGVjayBpbiBgdm1hX2lzX2ZhdWx0ZWRgIGlzIG5vdyB0aGUgcHJlZmVycmVkIG1ldGhvZCBvZiBkZXRlY3RpbmcgaWYgYSBmYXVsdCBoYXMgYWxyZWFkeSBvY2N1cnJlZC4gVGhpcyBjaGFuZ2UgaW1wbGllcyBhIHBlcmZvcm1hbmNlIGdhaW4sIGJ1dCBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgb2Z0ZW4gdGhpcyBjb2RlIHBhdGggaXMgaGl0IHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGFjdC4gSSBhbHNvIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBsaWtlbHkgY29uZGl0aW9uIGlzIHRydWx5IGxpa2VseS4KCkkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYF9fdm1mX2Fub25fcHJlcGFyZWAgdG8gc2VlIGlmIHRoZSBhc3N1bXB0aW9ucyBob2xkIHVwIGluIHJlYWwtd29ybGQgc2NlbmFyaW9zLiBJIGFsc28gbmVlZCB0byB2ZXJpZnkgdGhpcyBwYXRjaCBoYXMgcHJvcGVyIHJlZ3Jlc3Npb24gdGVzdHMgYW5kIGlzIHByb3Blcmx5IGRvY3VtZW50ZWQuIEkgd2lsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgcmVsYXRlZCB0byB0aGUgbG9ja2xlc3MgYWNjZXNzIHBhdHRlcm4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM4MDA6XHRcdHJldHVybiBWTV9GQVVMVF9SRVRSWTtcbjM4MDE6XHR9XG4zODAyOlx0XG4zODAzOlx0LyoqXG4zODA0Olx0ICogdm1hX2lzX2ZhdWx0ZWQgLSBjaGVjayBpZiBhIHZtYSBoYXMgYmVlbiBmYXVsdGVkXG4zODA1Olx0ICogQHZtYTogdGhlIHZtYSB0byBjaGVja1xuMzgwNjpcdCAqXG4zODA3Olx0ICogVGhpcyBpcyBhIGxvY2tsZXNzIGFjY2VzcyB0aGF0IG1heSByYWNlIHdpdGggX19hbm9uX3ZtYV9wcmVwYXJlKCkuXG4zODA4Olx0ICogVGhlIHJhY2UgaXMgc2FmZSBiZWNhdXNlOlxuMzgwOTpcdCAqIC0gVGhlIGZhdWx0IGhhbmRsZXIgZW5zdXJlcyB0aGF0IHRoZSBtYXBwaW5nIG9mIG1lbW9yeSBpcyBvcmRlcmVkLlxuMzgxMDpcdCAqIC0gSWYgd2UgcmVhZCBOVUxMLCB0aGUgY2FsbGVyIHdpbGwgcmUtY2hlY2tcbjM4MTE6XHQgKiAtIFRoZSBwYWdlX3RhYmxlX2xvY2sgcHJvdmlkZXMgQUNRVUlSRSBzZW1hbnRpY3MgZm9yIG1lbW9yeSBvcmRlcmluZ1xuMzgxMjpcdCAqXG4zODEzOlx0ICogUmV0dXJuOiB0cnVlIGlmIHZtYS1cdTAwM2Vhbm9uX3ZtYSBpcyBub24tTlVMTCwgZmFsc2Ugb3RoZXJ3aXNlXG4zODE0Olx0ICovXG4zODE1Olx0c3RhdGljIGlubGluZSBib29sIHZtYV9pc19mYXVsdGVkKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuMzgxNjpcdHtcbjM4MTc6XHRcdC8qIExvY2tsZXNzIGNoZWNrIC0gc2FmZSBiZWNhdXNlIHdlIHJlLXZhbGlkYXRlIHVuZGVyIHBhZ2VfdGFibGVfbG9jayAqL1xuMzgxODpcdFx0cmV0dXJuIGRhdGFfcmFjZSh2bWEtXHUwMDNlYW5vbl92bWEpO1xuMzgxOTpcdH1cbjM4MjA6XHRcbjM4MjE6XHRcbjM4MjI6XHQvKipcbjM4MjM6XHQgKiBfX3ZtZl9hbm9uX3ByZXBhcmUgLSBQcmVwYXJlIHRvIGhhbmRsZSBhbiBhbm9ueW1vdXMgZmF1bHQuXG4zODI0Olx0ICogQHZtZjogVGhlIHZtX2ZhdWx0IGRlc2NyaXB0b3IgcGFzc2VkIGZyb20gdGhlIGZhdWx0IGhhbmRsZXIuXG4zODI1Olx0ICpcbjM4MjY6XHQgKiBXaGVuIHByZXBhcmluZyB0byBpbnNlcnQgYW4gYW5vbnltb3VzIHBhZ2UgaW50byBhIFZNQSBmcm9tIGFcbjM4Mjc6XHQgKiBmYXVsdCBoYW5kbGVyLCBjYWxsIHRoaXMgZnVuY3Rpb24gcmF0aGVyIHRoYW4gYW5vbl92bWFfcHJlcGFyZSgpLlxuMzgyODpcdCAqIElmIHRoaXMgdm1hIGRvZXMgbm90IGFscmVhZHkgaGF2ZSBhbiBhc3NvY2lhdGVkIGFub25fdm1hIGFuZCB3ZSBhcmVcbjM4Mjk6XHQgKiBvbmx5IHByb3RlY3RlZCBieSB0aGUgcGVyLVZNQSBsb2NrLCB0aGUgY2FsbGVyIG11c3QgcmV0cnkgd2l0aCB0aGVcbjM4MzA6XHQgKiBtbWFwX2xvY2sgaGVsZC4gIF9fYW5vbl92bWFfcHJlcGFyZSgpIHdpbGwgbG9vayBhdCBhZGphY2VudCBWTUFzIHRvXG4zODMxOlx0ICogZGV0ZXJtaW5lIGlmIHRoaXMgVk1BIGNhbiBzaGFyZSBpdHMgYW5vbl92bWEsIGFuZCB0aGF0JiMzOTtzIG5vdCBzYWZlIHRvXG4zODMyOlx0ICogZG8gd2l0aCBvbmx5IHRoZSBwZXItVk1BIGxvY2sgaGVsZCBmb3IgdGhpcyBWTUEuXG4zODMzOlx0ICpcbjM4MzQ6XHQgKiBSZXR1cm46IDAgaWYgZmF1bHQgaGFuZGxpbmcgY2FuIHByb2NlZWQuICBBbnkgb3RoZXIgdmFsdWUgc2hvdWxkIGJlXG4zODM1Olx0ICogcmV0dXJuZWQgdG8gdGhlIGNhbGxlci5cbjM4MzY6XHQgKi9cbjM4Mzc6XHR2bV9mYXVsdF90IF9fdm1mX2Fub25fcHJlcGFyZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbjM4Mzg6XHR7XG4zODM5Olx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi1cdTAwM2V2bWE7XG4zODQwOlx0XHR2bV9mYXVsdF90IHJldCA9IDA7XG4zODQxOlx0XHRpZiAobGlrZWx5KHZtYV9pc19mYXVsdGVkKHZtYSkpKVxuMzg0MjpcdFx0XHRyZXR1cm4gMDtcbjM4NDM6XHRcdGlmICh2bWYtXHUwMDNlZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfVk1BX0xPQ0spIHtcbjM4NDQ6XHRcdFx0aWYgKCFtbWFwX3JlYWRfdHJ5bG9jayh2bWEtXHUwMDNldm1fbW0pKVxuMzg0NTpcdFx0XHRcdHJldHVybiBWTV9GQVVMVF9SRVRSWTtcbjM4NDY6XHRcdH1cbjM4NDc6XHRcdGlmIChfX2Fub25fdm1hX3ByZXBhcmUodm1hKSlcbjM4NDg6XHRcdFx0cmV0ID0gVk1fRkFVTFRfT09NO1xuMzg0OTpcdFx0aWYgKHZtZi1cdTAwM2VmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19WTUFfTE9DSylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIyMAoJCQkJCQkJb3V0cHV0OiAxNDkKCQkJCQkJCXRob3VnaHRzOiA1OTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogVGhpcyBQYXRjaCBpcyBTYWZlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgYXBwZWFycyB0byBiZSBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgcmVmYWN0b3JpbmcsIGFkZGluZyBhIGhlbHBlciBmdW5jdGlvbiwgYHZtYV9pc19mYXVsdGVkKClgLCB0aGF0IGVuY2Fwc3VsYXRlcyB0aGUgYGRhdGFfcmFjZSh2bWEtJmd0O2Fub25fdm1hKWAgY2hlY2suIFRoZSBwcmltYXJ5IGludGVudCBzZWVtcyB0byBiZSBjbGFyaXR5IG9yIEtDU0FOIGFubm90YXRpb24uIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IEtNU0FOIGNvbmNlcm5zPwoKSW1tZWRpYXRlbHksIEkmIzM5O20gY2hlY2tpbmcgZm9yIHRoZSB1c3VhbCBzdXNwZWN0cy4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBubyBtb2RpZmljYXRpb25zIHRvIHVzZXItc3BhY2UgY29waWVzLCBubyBuZXcgYWxsb2NhdGlvbnMuIEkgZG9uJiMzOTt0IHNlZSBhbnkgb2J2aW91cyBuZXcgZGF0YSByYWNlcyBpbnRyb2R1Y2VkLCBiZXlvbmQgdGhpcyBsb2NrbGVzcyBhY2Nlc3Mgd2hpY2ggaXMgYmVpbmcgYW5ub3RhdGVkLiBgdm1hLSZndDthbm9uX3ZtYWAgaXMgcGFydCBvZiB0aGUgYHN0cnVjdCB2bV9hcmVhX3N0cnVjdGAsIGFuZCBJIGtub3cgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBoYW5kbGVzIHRoZSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBvZiB0aGVzZSBWTUFzLiBTbywgdGhlIHBvaW50ZXIgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYXQgYWxsb2NhdGlvbi4KCk5vdywgbGV0IG1lIHB1dCBvbiBteSBLTVNBTiBoYXQgYW5kIGdvIHRocm91Z2ggdGhlIGNyaXRlcmlhLiBUaGlzIHBhdGNoIGRvZXNuJiMzOTt0OgoKMS4gIFRvdWNoIGFueSBrZXJuZWwgc3RydWN0dXJlcyBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgdW5pbml0aWFsaXplZCBkYXRhIGNvdWxkIGxlYWsuCjIuICBJbnRyb2R1Y2UgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4KMy4gIEFsbG9jYXRlIG9yIGluaXRpYWxpemUgYW55IGNvbXBsZXggc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLgo0LiAgTW9kaWZ5IGJvdW5kcyBjaGVja3Mgb3IgbGVuZ3RocyBpbiBhIHdheSB0aGF0IGFsbG93cyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBwYXJ0cyBvZiBidWZmZXJzLgoKVGhlcmVmb3JlLCBLTVNBTiBpcyBjbGVhcmx5IG5vdCBuZWVkZWQgaGVyZS4gVGhlIGNoYW5nZXMgZmFsbCBzcXVhcmVseSBpbnRvIHRoZSAmIzM0O05lZWRzS01TQU49ZmFsc2UmIzM0OyBjYXRlZ29yeS4gU3BlY2lmaWNhbGx5LCB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBoZWxwZXIgdG8gYW5ub3RhdGUgbG9ja2xlc3MgYWNjZXNzIG9mIGEgcHJvcGVybHkgaW5pdGlhbGl6ZWQgZmllbGQsIHdpdGggbm8gY2hhbmNlIG9mIGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIFRoZSBwb3RlbnRpYWwgaXNzdWVzIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgS0FTQU4gb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4KClNvLCBoZXJlJiMzOTtzIG15IHJlYXNvbmluZzogdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgaGVscGVyIGZvciBhIGBkYXRhX3JhY2UoKWAgY2hlY2sgb24gYHZtYS0mZ3Q7YW5vbl92bWFgIHdpdGhpbiBgX192bWZfYW5vbl9wcmVwYXJlKClgLiBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBubyB1c2VyLXNwYWNlIGNvcGllcywgYW5kIG5vIG5ldyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBkYXRhIHN0cnVjdHVyZXMuIFRoZSBgdm1fYXJlYV9zdHJ1Y3RgIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIGJ5IHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBzbyB0aGVyZSYjMzk7cyBubyB3YXkgdG8gcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBjYXVzZSBpbmZvcm1hdGlvbiBsZWFrcyB2aWEgYHZtYS0mZ3Q7YW5vbl92bWFgLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyAqbm90KiBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgd2FycmFudCBLTVNBTiBmdXp6aW5nLiBXZSYjMzk7cmUgZ29vZCB0byBnby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTM6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGhlbHBlciBmdW5jdGlvbiBgdm1hX2lzX2ZhdWx0ZWQoKWAgdG8gYW5ub3RhdGUgYSBsb2NrbGVzcyByZWFkIG9mIGB2bWEtXHUwMDNlYW5vbl92bWFgIHVzaW5nIGBkYXRhX3JhY2UoKWAgaW4gYF9fdm1mX2Fub25fcHJlcGFyZSgpYC4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RhY2svaGVhcCBidWZmZXJzLCBzdHJ1Y3R1cmUgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMuIFRoZSBgdm1fYXJlYV9zdHJ1Y3RgIGlzIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgYnkgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBBcyB0aGVyZSBpcyBubyByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgbGVha2luZyB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlciBzcGFjZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgaGVscGVyIGZ1bmN0aW9uIGB2bWFfaXNfZmF1bHRlZCgpYCB0byBhbm5vdGF0ZSBhIGxvY2tsZXNzIHJlYWQgb2YgYHZtYS1cdTAwM2Vhbm9uX3ZtYWAgdXNpbmcgYGRhdGFfcmFjZSgpYCBpbiBgX192bWZfYW5vbl9wcmVwYXJlKClgLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdGFjay9oZWFwIGJ1ZmZlcnMsIHN0cnVjdHVyZSBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3Nlcy4gVGhlIGB2bV9hcmVhX3N0cnVjdGAgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCBieSB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIEFzIHRoZXJlIGlzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyIHNwYWNlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDlUMTM6MDQ6MDIuNTkyNDY5NTIxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk4NTAyNDQ3NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX192bWZfYW5vbl9wcmVwYXJlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgaGVscGVyIGZ1bmN0aW9uIGB2bWFfaXNfZmF1bHRlZCgpYCB0byBhbm5vdGF0ZSBhIGxvY2tsZXNzIHJlYWQgb2YgYHZtYS1cXHUwMDNlYW5vbl92bWFgIHVzaW5nIGBkYXRhX3JhY2UoKWAgaW4gYF9fdm1mX2Fub25fcHJlcGFyZSgpYC4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RhY2svaGVhcCBidWZmZXJzLCBzdHJ1Y3R1cmUgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMuIFRoZSBgdm1fYXJlYV9zdHJ1Y3RgIGlzIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgYnkgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBBcyB0aGVyZSBpcyBubyByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgbGVha2luZyB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlciBzcGFjZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGluIG1tL21lbW9yeS5jIGJ5IGludHJvZHVjaW5nIGEgbmV3IGhlbHBlciB2bWFfaXNfZmF1bHRlZCgpIHVzaW5nIGRhdGFfcmFjZSgpIGFuZCB1cGRhdGluZyBfX3ZtZl9hbm9uX3ByZXBhcmUoKS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBmYXVsdCBwcmVwYXJhdGlvbiBwYXRocyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byB2ZXJpZnkgbG9ja2xlc3MgY29uY3VycmVuY3kgaW52YXJpYW50cyBhbmQgbWVtb3J5IG9yZGVyaW5nIGJlaGF2aW9yLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMzowNDowMi41OTI0NzUwOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYxMDM3NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjNmYmRhYjdiN2RhOTA2MDM5ZjY5N2E0N2M2MmM1OTQ2Y2U1MWE5NFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCA5IDEzOjA0OjAxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcXG5pbmRleCA2YjgyODBjZmMxZGJlLi5kODVkNjc5Mjc0MDBiIDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeS5jXFxuKysrIGIvbW0vbWVtb3J5LmNcXG5AQCAtMzgwMCw2ICszODAwLDI1IEBAIHN0YXRpYyBpbmxpbmUgdm1fZmF1bHRfdCB2bWZfY2FuX2NhbGxfZmF1bHQoY29uc3Qgc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuIFxcdHJldHVybiBWTV9GQVVMVF9SRVRSWTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHZtYV9pc19mYXVsdGVkIC0gY2hlY2sgaWYgYSB2bWEgaGFzIGJlZW4gZmF1bHRlZFxcbisgKiBAdm1hOiB0aGUgdm1hIHRvIGNoZWNrXFxuKyAqXFxuKyAqIFRoaXMgaXMgYSBsb2NrbGVzcyBhY2Nlc3MgdGhhdCBtYXkgcmFjZSB3aXRoIF9fYW5vbl92bWFfcHJlcGFyZSgpLlxcbisgKiBUaGUgcmFjZSBpcyBzYWZlIGJlY2F1c2U6XFxuKyAqIC0gVGhlIGZhdWx0IGhhbmRsZXIgZW5zdXJlcyB0aGF0IHRoZSBtYXBwaW5nIG9mIG1lbW9yeSBpcyBvcmRlcmVkLlxcbisgKiAtIElmIHdlIHJlYWQgTlVMTCwgdGhlIGNhbGxlciB3aWxsIHJlLWNoZWNrXFxuKyAqIC0gVGhlIHBhZ2VfdGFibGVfbG9jayBwcm92aWRlcyBBQ1FVSVJFIHNlbWFudGljcyBmb3IgbWVtb3J5IG9yZGVyaW5nXFxuKyAqXFxuKyAqIFJldHVybjogdHJ1ZSBpZiB2bWEtXFx1MDAzZWFub25fdm1hIGlzIG5vbi1OVUxMLCBmYWxzZSBvdGhlcndpc2VcXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfZmF1bHRlZChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4re1xcbitcXHQvKiBMb2NrbGVzcyBjaGVjayAtIHNhZmUgYmVjYXVzZSB3ZSByZS12YWxpZGF0ZSB1bmRlciBwYWdlX3RhYmxlX2xvY2sgKi9cXG4rXFx0cmV0dXJuIGRhdGFfcmFjZSh2bWEtXFx1MDAzZWFub25fdm1hKTtcXG4rfVxcbitcXG4rXFxuIC8qKlxcbiAgKiBfX3ZtZl9hbm9uX3ByZXBhcmUgLSBQcmVwYXJlIHRvIGhhbmRsZSBhbiBhbm9ueW1vdXMgZmF1bHQuXFxuICAqIEB2bWY6IFRoZSB2bV9mYXVsdCBkZXNjcmlwdG9yIHBhc3NlZCBmcm9tIHRoZSBmYXVsdCBoYW5kbGVyLlxcbkBAIC0zODE5LDggKzM4MzgsNyBAQCB2bV9mYXVsdF90IF9fdm1mX2Fub25fcHJlcGFyZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4ge1xcbiBcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi1cXHUwMDNldm1hO1xcbiBcXHR2bV9mYXVsdF90IHJldCA9IDA7XFxuLVxcbi1cXHRpZiAobGlrZWx5KHZtYS1cXHUwMDNlYW5vbl92bWEpKVxcbitcXHRpZiAobGlrZWx5KHZtYV9pc19mYXVsdGVkKHZtYSkpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0aWYgKHZtZi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBGQVVMVF9GTEFHX1ZNQV9MT0NLKSB7XFxuIFxcdFxcdGlmICghbW1hcF9yZWFkX3RyeWxvY2sodm1hLVxcdTAwM2V2bV9tbSkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEzOjA0OjAzLjE1NDIzODU3MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjgzMzAxMDk1MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX192bWZfYW5vbl9wcmVwYXJlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGluIG1tL21lbW9yeS5jIGJ5IGludHJvZHVjaW5nIGEgbmV3IGhlbHBlciB2bWFfaXNfZmF1bHRlZCgpIHVzaW5nIGRhdGFfcmFjZSgpIGFuZCB1cGRhdGluZyBfX3ZtZl9hbm9uX3ByZXBhcmUoKS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBmYXVsdCBwcmVwYXJhdGlvbiBwYXRocyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byB2ZXJpZnkgbG9ja2xlc3MgY29uY3VycmVuY3kgaW52YXJpYW50cyBhbmQgbWVtb3J5IG9yZGVyaW5nIGJlaGF2aW9yLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGIzZmJkYWI3YjdkYTkwNjAzOWY2OTdhNDdjNjJjNTk0NmNlNTFhOTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDEzOjA0OjAxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggNmI4MjgwY2ZjMWRiZS4uZDg1ZDY3OTI3NDAwYiAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4rKysgYi9tbS9tZW1vcnkuY1xuQEAgLTM4MDAsNiArMzgwMCwyNSBAQCBzdGF0aWMgaW5saW5lIHZtX2ZhdWx0X3Qgdm1mX2Nhbl9jYWxsX2ZhdWx0KGNvbnN0IHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIFx0cmV0dXJuIFZNX0ZBVUxUX1JFVFJZO1xuIH1cbiBcbisvKipcbisgKiB2bWFfaXNfZmF1bHRlZCAtIGNoZWNrIGlmIGEgdm1hIGhhcyBiZWVuIGZhdWx0ZWRcbisgKiBAdm1hOiB0aGUgdm1hIHRvIGNoZWNrXG4rICpcbisgKiBUaGlzIGlzIGEgbG9ja2xlc3MgYWNjZXNzIHRoYXQgbWF5IHJhY2Ugd2l0aCBfX2Fub25fdm1hX3ByZXBhcmUoKS5cbisgKiBUaGUgcmFjZSBpcyBzYWZlIGJlY2F1c2U6XG4rICogLSBUaGUgZmF1bHQgaGFuZGxlciBlbnN1cmVzIHRoYXQgdGhlIG1hcHBpbmcgb2YgbWVtb3J5IGlzIG9yZGVyZWQuXG4rICogLSBJZiB3ZSByZWFkIE5VTEwsIHRoZSBjYWxsZXIgd2lsbCByZS1jaGVja1xuKyAqIC0gVGhlIHBhZ2VfdGFibGVfbG9jayBwcm92aWRlcyBBQ1FVSVJFIHNlbWFudGljcyBmb3IgbWVtb3J5IG9yZGVyaW5nXG4rICpcbisgKiBSZXR1cm46IHRydWUgaWYgdm1hLVx1MDAzZWFub25fdm1hIGlzIG5vbi1OVUxMLCBmYWxzZSBvdGhlcndpc2VcbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2wgdm1hX2lzX2ZhdWx0ZWQoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4re1xuK1x0LyogTG9ja2xlc3MgY2hlY2sgLSBzYWZlIGJlY2F1c2Ugd2UgcmUtdmFsaWRhdGUgdW5kZXIgcGFnZV90YWJsZV9sb2NrICovXG4rXHRyZXR1cm4gZGF0YV9yYWNlKHZtYS1cdTAwM2Vhbm9uX3ZtYSk7XG4rfVxuK1xuK1xuIC8qKlxuICAqIF9fdm1mX2Fub25fcHJlcGFyZSAtIFByZXBhcmUgdG8gaGFuZGxlIGFuIGFub255bW91cyBmYXVsdC5cbiAgKiBAdm1mOiBUaGUgdm1fZmF1bHQgZGVzY3JpcHRvciBwYXNzZWQgZnJvbSB0aGUgZmF1bHQgaGFuZGxlci5cbkBAIC0zODE5LDggKzM4MzgsNyBAQCB2bV9mYXVsdF90IF9fdm1mX2Fub25fcHJlcGFyZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiB7XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi1cdTAwM2V2bWE7XG4gXHR2bV9mYXVsdF90IHJldCA9IDA7XG4tXG4tXHRpZiAobGlrZWx5KHZtYS1cdTAwM2Vhbm9uX3ZtYSkpXG4rXHRpZiAobGlrZWx5KHZtYV9pc19mYXVsdGVkKHZtYSkpKVxuIFx0XHRyZXR1cm4gMDtcbiBcdGlmICh2bWYtXHUwMDNlZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfVk1BX0xPQ0spIHtcbiBcdFx0aWYgKCFtbWFwX3JlYWRfdHJ5bG9jayh2bWEtXHUwMDNldm1fbW0pKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTM6MDQ6MDMuMTU0MjQwODIxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjEzMzk4NTkyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoOiBgbW0vbWVtb3J5LmNgIExpbmUgMzgwMCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IGRpc3NlY3QgdGhpcyBhbmQgZW5zdXJlIEkgZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGNhcmVmdWxseSByZXZpZXcgYm90aCB0aGUgcGF0Y2ggaXRzZWxmIGFuZCBhbnkgYWNjb21wYW55aW5nIGluc3RydWN0aW9ucyBvciBkb2N1bWVudGF0aW9uLiBUaGUgdGFyZ2V0IGZpbGUgaXMgYG1tL21lbW9yeS5jYCwgd2hpY2ggYWx3YXlzIHdhcnJhbnRzIGNsb3NlIGF0dGVudGlvbiBnaXZlbiBpdHMgY3JpdGljYWwgcm9sZS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgZ2V0IG15IGJlYXJpbmdzIHVzaW5nIGByZWFkLWZpbGVgIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IHNlY3Rpb24gb2YgYG1tL21lbW9yeS5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDM4MDAuIFRoaXMgc2hvdWxkIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBjb250ZXh0IHRvIGFzc2VzcyB0aGUgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE5NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTM6MDQ6MDkuMjg4MjI4ODY2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE0NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbW9yeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM3OTAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM3OTA6XFx0ICogdm1fb3BzIHRoYXQgaGF2ZSBhIC1cXHUwMDNlbWFwX3BhZ2VzIGhhdmUgYmVlbiBhdWRpdGVkIGFuZCBkb24ndCBuZWVkXFxuMzc5MTpcXHQgKiB0aGUgbW1hcF9sb2NrIHRvIGJlIGhlbGQuXFxuMzc5MjpcXHQgKi9cXG4zNzkzOlxcdHN0YXRpYyBpbmxpbmUgdm1fZmF1bHRfdCB2bWZfY2FuX2NhbGxfZmF1bHQoY29uc3Qgc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuMzc5NDpcXHR7XFxuMzc5NTpcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi1cXHUwMDNldm1hO1xcbjM3OTY6XFx0XFxuMzc5NzpcXHRcXHRpZiAodm1hLVxcdTAwM2V2bV9vcHMtXFx1MDAzZW1hcF9wYWdlcyB8fCAhKHZtZi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBGQVVMVF9GTEFHX1ZNQV9MT0NLKSlcXG4zNzk4OlxcdFxcdFxcdHJldHVybiAwO1xcbjM3OTk6XFx0XFx0dm1hX2VuZF9yZWFkKHZtYSk7XFxuMzgwMDpcXHRcXHRyZXR1cm4gVk1fRkFVTFRfUkVUUlk7XFxuMzgwMTpcXHR9XFxuMzgwMjpcXHRcXG4zODAzOlxcdC8qKlxcbjM4MDQ6XFx0ICogdm1hX2lzX2ZhdWx0ZWQgLSBjaGVjayBpZiBhIHZtYSBoYXMgYmVlbiBmYXVsdGVkXFxuMzgwNTpcXHQgKiBAdm1hOiB0aGUgdm1hIHRvIGNoZWNrXFxuMzgwNjpcXHQgKlxcbjM4MDc6XFx0ICogVGhpcyBpcyBhIGxvY2tsZXNzIGFjY2VzcyB0aGF0IG1heSByYWNlIHdpdGggX19hbm9uX3ZtYV9wcmVwYXJlKCkuXFxuMzgwODpcXHQgKiBUaGUgcmFjZSBpcyBzYWZlIGJlY2F1c2U6XFxuMzgwOTpcXHQgKiAtIFRoZSBmYXVsdCBoYW5kbGVyIGVuc3VyZXMgdGhhdCB0aGUgbWFwcGluZyBvZiBtZW1vcnkgaXMgb3JkZXJlZC5cXG4zODEwOlxcdCAqIC0gSWYgd2UgcmVhZCBOVUxMLCB0aGUgY2FsbGVyIHdpbGwgcmUtY2hlY2tcXG4zODExOlxcdCAqIC0gVGhlIHBhZ2VfdGFibGVfbG9jayBwcm92aWRlcyBBQ1FVSVJFIHNlbWFudGljcyBmb3IgbWVtb3J5IG9yZGVyaW5nXFxuMzgxMjpcXHQgKlxcbjM4MTM6XFx0ICogUmV0dXJuOiB0cnVlIGlmIHZtYS1cXHUwMDNlYW5vbl92bWEgaXMgbm9uLU5VTEwsIGZhbHNlIG90aGVyd2lzZVxcbjM4MTQ6XFx0ICovXFxuMzgxNTpcXHRzdGF0aWMgaW5saW5lIGJvb2wgdm1hX2lzX2ZhdWx0ZWQoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuMzgxNjpcXHR7XFxuMzgxNzpcXHRcXHQvKiBMb2NrbGVzcyBjaGVjayAtIHNhZmUgYmVjYXVzZSB3ZSByZS12YWxpZGF0ZSB1bmRlciBwYWdlX3RhYmxlX2xvY2sgKi9cXG4zODE4OlxcdFxcdHJldHVybiBkYXRhX3JhY2Uodm1hLVxcdTAwM2Vhbm9uX3ZtYSk7XFxuMzgxOTpcXHR9XFxuMzgyMDpcXHRcXG4zODIxOlxcdFxcbjM4MjI6XFx0LyoqXFxuMzgyMzpcXHQgKiBfX3ZtZl9hbm9uX3ByZXBhcmUgLSBQcmVwYXJlIHRvIGhhbmRsZSBhbiBhbm9ueW1vdXMgZmF1bHQuXFxuMzgyNDpcXHQgKiBAdm1mOiBUaGUgdm1fZmF1bHQgZGVzY3JpcHRvciBwYXNzZWQgZnJvbSB0aGUgZmF1bHQgaGFuZGxlci5cXG4zODI1OlxcdCAqXFxuMzgyNjpcXHQgKiBXaGVuIHByZXBhcmluZyB0byBpbnNlcnQgYW4gYW5vbnltb3VzIHBhZ2UgaW50byBhIFZNQSBmcm9tIGFcXG4zODI3OlxcdCAqIGZhdWx0IGhhbmRsZXIsIGNhbGwgdGhpcyBmdW5jdGlvbiByYXRoZXIgdGhhbiBhbm9uX3ZtYV9wcmVwYXJlKCkuXFxuMzgyODpcXHQgKiBJZiB0aGlzIHZtYSBkb2VzIG5vdCBhbHJlYWR5IGhhdmUgYW4gYXNzb2NpYXRlZCBhbm9uX3ZtYSBhbmQgd2UgYXJlXFxuMzgyOTpcXHQgKiBvbmx5IHByb3RlY3RlZCBieSB0aGUgcGVyLVZNQSBsb2NrLCB0aGUgY2FsbGVyIG11c3QgcmV0cnkgd2l0aCB0aGVcXG4zODMwOlxcdCAqIG1tYXBfbG9jayBoZWxkLiAgX19hbm9uX3ZtYV9wcmVwYXJlKCkgd2lsbCBsb29rIGF0IGFkamFjZW50IFZNQXMgdG9cXG4zODMxOlxcdCAqIGRldGVybWluZSBpZiB0aGlzIFZNQSBjYW4gc2hhcmUgaXRzIGFub25fdm1hLCBhbmQgdGhhdCdzIG5vdCBzYWZlIHRvXFxuMzgzMjpcXHQgKiBkbyB3aXRoIG9ubHkgdGhlIHBlci1WTUEgbG9jayBoZWxkIGZvciB0aGlzIFZNQS5cXG4zODMzOlxcdCAqXFxuMzgzNDpcXHQgKiBSZXR1cm46IDAgaWYgZmF1bHQgaGFuZGxpbmcgY2FuIHByb2NlZWQuICBBbnkgb3RoZXIgdmFsdWUgc2hvdWxkIGJlXFxuMzgzNTpcXHQgKiByZXR1cm5lZCB0byB0aGUgY2FsbGVyLlxcbjM4MzY6XFx0ICovXFxuMzgzNzpcXHR2bV9mYXVsdF90IF9fdm1mX2Fub25fcHJlcGFyZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4zODM4OlxcdHtcXG4zODM5OlxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mLVxcdTAwM2V2bWE7XFxuMzg0MDpcXHRcXHR2bV9mYXVsdF90IHJldCA9IDA7XFxuMzg0MTpcXHRcXHRpZiAobGlrZWx5KHZtYV9pc19mYXVsdGVkKHZtYSkpKVxcbjM4NDI6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMzg0MzpcXHRcXHRpZiAodm1mLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZBVUxUX0ZMQUdfVk1BX0xPQ0spIHtcXG4zODQ0OlxcdFxcdFxcdGlmICghbW1hcF9yZWFkX3RyeWxvY2sodm1hLVxcdTAwM2V2bV9tbSkpXFxuMzg0NTpcXHRcXHRcXHRcXHRyZXR1cm4gVk1fRkFVTFRfUkVUUlk7XFxuMzg0NjpcXHRcXHR9XFxuMzg0NzpcXHRcXHRpZiAoX19hbm9uX3ZtYV9wcmVwYXJlKHZtYSkpXFxuMzg0ODpcXHRcXHRcXHRyZXQgPSBWTV9GQVVMVF9PT007XFxuMzg0OTpcXHRcXHRpZiAodm1mLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZBVUxUX0ZMQUdfVk1BX0xPQ0spXFxuMzg1MDpcXHRcXHRcXHRtbWFwX3JlYWRfdW5sb2NrKHZtYS1cXHUwMDNldm1fbW0pO1xcbjM4NTE6XFx0XFx0cmV0dXJuIHJldDtcXG4zODUyOlxcdH1cXG4zODUzOlxcdFxcbjM4NTQ6XFx0LypcXG4zODU1OlxcdCAqIEhhbmRsZSB0aGUgY2FzZSBvZiBhIHBhZ2Ugd2hpY2ggd2UgYWN0dWFsbHkgbmVlZCB0byBjb3B5IHRvIGEgbmV3IHBhZ2UsXFxuMzg1NjpcXHQgKiBlaXRoZXIgZHVlIHRvIENPVyBvciB1bnNoYXJpbmcuXFxuMzg1NzpcXHQgKlxcbjM4NTg6XFx0ICogQ2FsbGVkIHdpdGggZWl0aGVyIHRoZSBWTUEgbG9jayBvciB0aGUgbW1hcF9sb2NrIGhlbGQgKHNlZSBGQVVMVF9GTEFHX1ZNQV9MT0NLKVxcbjM4NTk6XFx0ICogYW5kIHRoZSBvbGQgcGFnZSByZWZlcmVuY2VkLCBidXQgd2l0aG91dCB0aGUgcHRsIGhlbGQuXFxuMzg2MDpcXHQgKlxcbjM4NjE6XFx0ICogSGlnaCBsZXZlbCBsb2dpYyBmbG93OlxcbjM4NjI6XFx0ICpcXG4zODYzOlxcdCAqIC0gQWxsb2NhdGUgYSBwYWdlLCBjb3B5IHRoZSBjb250ZW50IG9mIHRoZSBvbGQgcGFnZSB0byB0aGUgbmV3IG9uZS5cXG4zODY0OlxcdCAqIC0gSGFuZGxlIGJvb2sga2VlcGluZyBhbmQgYWNjb3VudGluZyAtIGNncm91cHMsIG1tdS1ub3RpZmllcnMsIGV0Yy5cXG4zODY1OlxcdCAqIC0gVGFrZSB0aGUgUFRMLiBJZiB0aGUgcHRlIGNoYW5nZWQsIGJhaWwgb3V0IGFuZCByZWxlYXNlIHRoZSBhbGxvY2F0ZWQgcGFnZVxcbjM4NjY6XFx0ICogLSBJZiB0aGUgcHRlIGlzIHN0aWxsIHRoZSB3YXkgd2UgcmVtZW1iZXIgaXQsIHVwZGF0ZSB0aGUgcGFnZSB0YWJsZSBhbmQgYWxsXFxuMzg2NzpcXHQgKiAgIHJlbGV2YW50IHJlZmVyZW5jZXMuIFRoaXMgaW5jbHVkZXMgZHJvcHBpbmcgdGhlIHJlZmVyZW5jZSB0aGUgcGFnZS10YWJsZVxcbjM4Njg6XFx0ICogICBoZWxkIHRvIHRoZSBvbGQgcGFnZSwgYXMgd2VsbCBhcyB1cGRhdGluZyB0aGUgcm1hcC5cXG4zODY5OlxcdCAqIC0gSW4gYW55IGNhc2UsIHVubG9jayB0aGUgUFRMIGFuZCBkcm9wIHRoZSByZWZlcmVuY2Ugd2UgdG9vayB0byB0aGUgb2xkIHBhZ2UuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEzOjA0OjA5LjI4ODY0NjQzNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc3OTY1NzE1NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQcm9wb3NlZCBQYXRjaDogQSBNZW1vcnkgTWFuYWdlbWVudCBQZXJzcGVjdGl2ZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGlzIGluIGBtbS9tZW1vcnkuY2AsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIG15IGF0dGVudGlvbiDigJMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBpcyBhbHdheXMgYSBjcml0aWNhbCBhcmVhLiBJdCBpbnRyb2R1Y2VzIGB2bWFfaXNfZmF1bHRlZCh2bWEpYCwgd2hpY2ggd3JhcHMgYSBgZGF0YV9yYWNlYCBjaGVjayBvbiBgdm1hLVx1MDAzZWFub25fdm1hYC4gVGhhdCdzIHRvIHN1cHByZXNzIEtDU0FOIHJlcG9ydHMsIG9yIGRvY3VtZW50IHRoZSBkYXRhIHJhY2Ugb24gdGhlIGxvY2tsZXNzIHJlYWQgb2YgYHZtYS1cdTAwM2Vhbm9uX3ZtYWAsIGFuZCByZXBsYWNlcyBhbiBgaWYgKGxpa2VseSh2bWEtXHUwMDNlYW5vbl92bWEpKWAgY2hlY2suXG5cbkZpcnN0LCAqaXMqIHRoaXMgcmVhbGx5IGNvcmUgbW0/IFllcywgYG1tL21lbW9yeS5jYCwgY29uZmlybWVkLiBOb3csIGxldCBtZSBjaGVjayB0aGUgXCJXb3J0aEZ1enppbmdcIiBndWlkZWxpbmVzLiBSaWdodCwgdGhlIGdvYWwgaXMgdG8gZmluZCBjcmFzaGVzIGFuZCBidWdzLCBlc3BlY2lhbGx5IGluIGNvcmUgc3Vic3lzdGVtcyBsaWtlIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGlzIHBhdGNoIGRlZmluaXRlbHkgZmFsbHMgdW5kZXIgdGhhdCBzY29wZSwgZXNwZWNpYWxseSBhcyBpdCB0b3VjaGVzIG9uIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLiBXZSBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0aGlzIGNoYW5nZSBpbXBhY3RzIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGFsZ29yaXRobXMuXG5cbk5vdywgd2hhdCBpcyB0aGlzIGB2bWFfaXNfZmF1bHRlZGAgZG9pbmc/IEl0J3MgYSBzdGF0aWMgaW5saW5lIGhlbHBlci4gVGhlIGltcG9ydGFudCBwYXJ0IGlzIHRoYXQgYF9fdm1mX2Fub25fcHJlcGFyZWAgaXMgY2FsbGVkIGluIHJlbGF0aW9uIHRvIGFub255bW91cyBwYWdlIGZhdWx0cy4gT2theSwgbGV0J3MgY2lyY2xlIGJhY2sgdG8gdGhlIEZvY3VzU3ltYm9scyBndWlkYW5jZS4gUmlnaHQsIHRoZSBmdXp6aW5nIGRvY3VtZW50YXRpb24gdGVsbHMgbWUgdG8gYXZvaWQgdWJpcXVpdG91cyBsaWZlY3ljbGUgZnVuY3Rpb25zIGxpa2UgZ2VuZXJhbCBhbGxvY2F0b3JzLCBkZWFsbG9jYXRvcnMsIG9yIHBhZ2UgZmF1bHQgaGFuZGxlcnMuICpBdm9pZCogdGhvc2UhIEluc3RlYWQsIHRhcmdldCB0aGUgKnNwZWNpZmljIGZlYXR1cmUgbG9naWMqLiBIbW0sIGFuZCB0aGlzIGd1aWRhbmNlIGlzIGltcG9ydGFudDogc3RhdGljIGlubGluZXMgaW4gaGVhZGVycyBsYWNrIGRpc3RpbmN0IHN5bWJvbHMuIEkgbmVlZCB0byBmb2N1cyBvbiBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljICpjYWxsZXIqIGZ1bmN0aW9ucy5cblxuU28sIEkgbmVlZCB0byBmaW5kIHRoZSBub24tc3RhdGljIGZ1bmN0aW9uIG1vZGlmaWVkLCBhbmQgdGhhdCBpcyBgX192bWZfYW5vbl9wcmVwYXJlYCEgVGhlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHdoZXJlIGl0J3MgY2FsbGVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSBhbmQgaG93IHRvIGJlc3QgZ3VpZGUgdGhlIGZ1enplci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg0MCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEzOjA0OjE3LjA4NTIyMDM2MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzUyMTg3NzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fdm1mX2Fub25fcHJlcGFyZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdldGxiLmM9NTQyMz1zdGF0aWMgdm1fZmF1bHRfdCBodWdldGxiX3dwKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vaHVnZXRsYi5jLTU1NjAtXFx0ICovXFxubW0vaHVnZXRsYi5jOjU1NjE6XFx0cmV0ID0gX192bWZfYW5vbl9wcmVwYXJlKHZtZik7XFxubW0vaHVnZXRsYi5jLTU1NjItXFx0aWYgKHVubGlrZWx5KHJldCkpXFxuLS1cXG5tbS9odWdldGxiLmM9NTY5NT1zdGF0aWMgdm1fZmF1bHRfdCBodWdldGxiX25vX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9odWdldGxiLmMtNTc1OS1cXHRcXHRpZiAoISh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fTUFZU0hBUkUpKSB7XFxubW0vaHVnZXRsYi5jOjU3NjA6XFx0XFx0XFx0cmV0ID0gX192bWZfYW5vbl9wcmVwYXJlKHZtZik7XFxubW0vaHVnZXRsYi5jLTU3NjEtXFx0XFx0XFx0aWYgKHVubGlrZWx5KHJldCkpXFxuLS1cXG5tbS9odWdldGxiLmMtNTg5OS1cXHQvKlxcbm1tL2h1Z2V0bGIuYzo1OTAwOlxcdCAqIFdlIG11c3QgY2hlY2sgdG8gcmVsZWFzZSB0aGUgcGVyLVZNQSBsb2NrLiBfX3ZtZl9hbm9uX3ByZXBhcmUoKSBpc1xcbm1tL2h1Z2V0bGIuYy01OTAxLVxcdCAqIHRoZSBvbmx5IHdheSByZXQgY2FuIGJlIHNldCB0byBWTV9GQVVMVF9SRVRSWS5cXG4tLVxcbm1tL2h1Z2V0bGIuYz01OTQ1PXZtX2ZhdWx0X3QgaHVnZXRsYl9mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtNjExMS1cXHQvKlxcbm1tL2h1Z2V0bGIuYzo2MTEyOlxcdCAqIFdlIG11c3QgY2hlY2sgdG8gcmVsZWFzZSB0aGUgcGVyLVZNQSBsb2NrLiBfX3ZtZl9hbm9uX3ByZXBhcmUoKSBpblxcbm1tL2h1Z2V0bGIuYy02MTEzLVxcdCAqIGh1Z2V0bGJfd3AoKSBpcyB0aGUgb25seSB3YXkgcmV0IGNhbiBiZSBzZXQgdG8gVk1fRkFVTFRfUkVUUlkuXFxuLS1cXG5tbS9pbnRlcm5hbC5oPTQ4Mj1zdGF0aWMgaW5saW5lIHZvaWQgd2FrZV90aHJvdHRsZV9pc29sYXRlZChwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vaW50ZXJuYWwuaC00OTAtXFxubW0vaW50ZXJuYWwuaDo0OTE6dm1fZmF1bHRfdCBfX3ZtZl9hbm9uX3ByZXBhcmUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpO1xcbm1tL2ludGVybmFsLmgtNDkyLXN0YXRpYyBpbmxpbmUgdm1fZmF1bHRfdCB2bWZfYW5vbl9wcmVwYXJlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbm1tL2ludGVybmFsLmgtNDkzLXtcXG5tbS9pbnRlcm5hbC5oOjQ5NDpcXHR2bV9mYXVsdF90IHJldCA9IF9fdm1mX2Fub25fcHJlcGFyZSh2bWYpO1xcbm1tL2ludGVybmFsLmgtNDk1LVxcbi0tXFxubW0vbWVtb3J5LmM9MzgxNT1zdGF0aWMgaW5saW5lIGJvb2wgdm1hX2lzX2ZhdWx0ZWQoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9tZW1vcnkuYy0zODIyLS8qKlxcbm1tL21lbW9yeS5jOjM4MjM6ICogX192bWZfYW5vbl9wcmVwYXJlIC0gUHJlcGFyZSB0byBoYW5kbGUgYW4gYW5vbnltb3VzIGZhdWx0Llxcbm1tL21lbW9yeS5jLTM4MjQtICogQHZtZjogVGhlIHZtX2ZhdWx0IGRlc2NyaXB0b3IgcGFzc2VkIGZyb20gdGhlIGZhdWx0IGhhbmRsZXIuXFxuLS1cXG5tbS9tZW1vcnkuYy0zODM2LSAqL1xcbm1tL21lbW9yeS5jOjM4Mzc6dm1fZmF1bHRfdCBfX3ZtZl9hbm9uX3ByZXBhcmUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxubW0vbWVtb3J5LmMtMzgzOC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEzOjA0OjE4LjgzNzQxNDY1MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MTUzMDE0MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgdm1mX2Fub25fcHJlcGFyZWAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYF9fdm1mX2Fub25fcHJlcGFyZWAuIFJpZ2h0LCBzbyBpdCdzIGRlZmluZWQgaW4gYG1tL21lbW9yeS5jYCBhbmQgZGVjbGFyZWQgaW4gYG1tL2ludGVybmFsLmhgLiBUaGF0IG1ha2VzIHNlbnNlOyBgbW0vYCBpcyB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdHVmZi4gTm93LCBJIG5lZWQgdG8ga25vdyBob3cgaXQncyAqdXNlZCouIFRoZSBiZXN0IHdheSB0byBkbyB0aGF0IGlzIHRvIGNoZWNrIHdoZXJlIGl0J3MgY2FsbGVkLiBUaW1lIGZvciBhIHF1aWNrIGBncmVwYCBzZWFyY2ggZm9yIGB2bWZfYW5vbl9wcmVwYXJlYC4gTGV0J3Mgc2VlIHdoYXQgdHVybnMgdXAuIEhvcGVmdWxseSwgdGhhdCB3aWxsIGdpdmUgbWUgc29tZSBjb250ZXh0IGFyb3VuZCB0aGUgaW50ZW50IGFuZCBmdW5jdGlvbiBvZiB0aGlzIHByZXBhcmF0aW9uIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjU3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTM6MDQ6MjAuNzUyNzE4MzQ5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NzU5OTcyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1mX2Fub25fcHJlcGFyZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTE1MTk9dm1fZmF1bHRfdCBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTUyNi1cXHRcXHRyZXR1cm4gVk1fRkFVTFRfRkFMTEJBQ0s7XFxubW0vaHVnZV9tZW1vcnkuYzoxNTI3OlxcdHJldCA9IHZtZl9hbm9uX3ByZXBhcmUodm1mKTtcXG5tbS9odWdlX21lbW9yeS5jLTE1MjgtXFx0aWYgKHJldClcXG4tLVxcbm1tL2h1Z2V0bGIuYz01NDIzPXN0YXRpYyB2bV9mYXVsdF90IGh1Z2V0bGJfd3Aoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9odWdldGxiLmMtNTU2MC1cXHQgKi9cXG5tbS9odWdldGxiLmM6NTU2MTpcXHRyZXQgPSBfX3ZtZl9hbm9uX3ByZXBhcmUodm1mKTtcXG5tbS9odWdldGxiLmMtNTU2Mi1cXHRpZiAodW5saWtlbHkocmV0KSlcXG4tLVxcbm1tL2h1Z2V0bGIuYz01Njk1PXN0YXRpYyB2bV9mYXVsdF90IGh1Z2V0bGJfbm9fcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbm1tL2h1Z2V0bGIuYy01NzU5LVxcdFxcdGlmICghKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9NQVlTSEFSRSkpIHtcXG5tbS9odWdldGxiLmM6NTc2MDpcXHRcXHRcXHRyZXQgPSBfX3ZtZl9hbm9uX3ByZXBhcmUodm1mKTtcXG5tbS9odWdldGxiLmMtNTc2MS1cXHRcXHRcXHRpZiAodW5saWtlbHkocmV0KSlcXG4tLVxcbm1tL2h1Z2V0bGIuYy01ODk5LVxcdC8qXFxubW0vaHVnZXRsYi5jOjU5MDA6XFx0ICogV2UgbXVzdCBjaGVjayB0byByZWxlYXNlIHRoZSBwZXItVk1BIGxvY2suIF9fdm1mX2Fub25fcHJlcGFyZSgpIGlzXFxubW0vaHVnZXRsYi5jLTU5MDEtXFx0ICogdGhlIG9ubHkgd2F5IHJldCBjYW4gYmUgc2V0IHRvIFZNX0ZBVUxUX1JFVFJZLlxcbi0tXFxubW0vaHVnZXRsYi5jPTU5NDU9dm1fZmF1bHRfdCBodWdldGxiX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02MTExLVxcdC8qXFxubW0vaHVnZXRsYi5jOjYxMTI6XFx0ICogV2UgbXVzdCBjaGVjayB0byByZWxlYXNlIHRoZSBwZXItVk1BIGxvY2suIF9fdm1mX2Fub25fcHJlcGFyZSgpIGluXFxubW0vaHVnZXRsYi5jLTYxMTMtXFx0ICogaHVnZXRsYl93cCgpIGlzIHRoZSBvbmx5IHdheSByZXQgY2FuIGJlIHNldCB0byBWTV9GQVVMVF9SRVRSWS5cXG4tLVxcbm1tL2ludGVybmFsLmg9NDgyPXN0YXRpYyBpbmxpbmUgdm9pZCB3YWtlX3Rocm90dGxlX2lzb2xhdGVkKHBnX2RhdGFfdCAqcGdkYXQpXFxuLS1cXG5tbS9pbnRlcm5hbC5oLTQ5MC1cXG5tbS9pbnRlcm5hbC5oOjQ5MTp2bV9mYXVsdF90IF9fdm1mX2Fub25fcHJlcGFyZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7XFxubW0vaW50ZXJuYWwuaDo0OTI6c3RhdGljIGlubGluZSB2bV9mYXVsdF90IHZtZl9hbm9uX3ByZXBhcmUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxubW0vaW50ZXJuYWwuaC00OTMte1xcbm1tL2ludGVybmFsLmg6NDk0OlxcdHZtX2ZhdWx0X3QgcmV0ID0gX192bWZfYW5vbl9wcmVwYXJlKHZtZik7XFxubW0vaW50ZXJuYWwuaC00OTUtXFxuLS1cXG5tbS9tZW1vcnkuYz0zODE1PXN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfZmF1bHRlZChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL21lbW9yeS5jLTM4MjItLyoqXFxubW0vbWVtb3J5LmM6MzgyMzogKiBfX3ZtZl9hbm9uX3ByZXBhcmUgLSBQcmVwYXJlIHRvIGhhbmRsZSBhbiBhbm9ueW1vdXMgZmF1bHQuXFxubW0vbWVtb3J5LmMtMzgyNC0gKiBAdm1mOiBUaGUgdm1fZmF1bHQgZGVzY3JpcHRvciBwYXNzZWQgZnJvbSB0aGUgZmF1bHQgaGFuZGxlci5cXG4tLVxcbm1tL21lbW9yeS5jLTM4MzYtICovXFxubW0vbWVtb3J5LmM6MzgzNzp2bV9mYXVsdF90IF9fdm1mX2Fub25fcHJlcGFyZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG5tbS9tZW1vcnkuYy0zODM4LXtcXG4tLVxcbm1tL21lbW9yeS5jPTM4NzE9c3RhdGljIHZtX2ZhdWx0X3Qgd3BfcGFnZV9jb3B5KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtMzg4Ny1cXHRcXHRvbGRfZm9saW8gPSBwYWdlX2ZvbGlvKHZtZi1cXHUwMDNlcGFnZSk7XFxubW0vbWVtb3J5LmM6Mzg4ODpcXHRyZXQgPSB2bWZfYW5vbl9wcmVwYXJlKHZtZik7XFxubW0vbWVtb3J5LmMtMzg4OS1cXHRpZiAodW5saWtlbHkocmV0KSlcXG4tLVxcbm1tL21lbW9yeS5jPTUzMDU9c3RhdGljIHZtX2ZhdWx0X3QgZG9fYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy01MzU1LVxcdC8qIEFsbG9jYXRlIG91ciBvd24gcHJpdmF0ZSBwYWdlLiAqL1xcbm1tL21lbW9yeS5jOjUzNTY6XFx0cmV0ID0gdm1mX2Fub25fcHJlcGFyZSh2bWYpO1xcbm1tL21lbW9yeS5jLTUzNTctXFx0aWYgKHJldClcXG4tLVxcbm1tL21lbW9yeS5jPTU4OTA9c3RhdGljIHZtX2ZhdWx0X3QgZG9fY293X2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNTg5Ny1cXHRpZiAoIXJldClcXG5tbS9tZW1vcnkuYzo1ODk4OlxcdFxcdHJldCA9IHZtZl9hbm9uX3ByZXBhcmUodm1mKTtcXG5tbS9tZW1vcnkuYy01ODk5LVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEzOjA0OjIyLjUyODcyMTI0OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYwNjY2Mjc1NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCB3YXJyYW50cyBmdXp6aW5nIGJhc2VkIG9uIFdvcnRoRnV6emluZyBjcml0ZXJpYS4gVGhpcyBwYXRjaCBtb2RpZmllcyBgbW0vbWVtb3J5LmNgLCBzcGVjaWZpY2FsbHkgYF9fdm1mX2Fub25fcHJlcGFyZWAuIEl0IGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gY2FsbCBgdm1hX2lzX2ZhdWx0ZWRgIHdoaWNoIHNlZW1zIHRvIGJlIGEgc3RhdGljIGlubGluZSBmdW5jdGlvbi4gQmVjYXVzZSBpdCdzIGEgbW9kaWZpY2F0aW9uIHRvIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKGBtbS9gKSwgV29ydGhGdXp6aW5nIGlzIGRlZmluaXRpdmVseSB0cnVlLCBJJ2QgZmxhZyB0aGlzIGZvciBmdXp6aW5nLlxuXG5OZXh0LCBJIG5lZWQgdG8gZXZhbHVhdGUgRm9jdXNTeW1ib2xzLiBUaGUgcXVlc3Rpb24gbm93IGlzIHdoZXRoZXIgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGlzIGEgc3VpdGFibGUgdGFyZ2V0LiBJIG5lZWQgdG8gYXZvaWQgdWJpcXVpdG91cyBsaWZlY3ljbGUgaG90LXBhdGhzLiAgSW5pdGlhbGx5LCBJIGNvbnNpZGVyZWQgaWYgYF9fdm1mX2Fub25fcHJlcGFyZWAgaXMgYSBjb21tb25seSBleGVjdXRlZCBmdW5jdGlvbi4gQnV0IHdhaXQsIGBfX3ZtZl9hbm9uX3ByZXBhcmVgIGlzIGNhbGxlZCBpbiB0aGUgcHJlcGFyYXRpb24gdG8gaGFuZGxlIGFub255bW91cyBmYXVsdHMuIEZ1cnRoZXIgaW52ZXN0aWdhdGlvbiByZXZlYWxzIHRoYXQgYF9fdm1mX2Fub25fcHJlcGFyZWAgaXMgYSBub24tc3RhdGljIHN5bWJvbC4gU2luY2UgYHZtYV9pc19mYXVsdGVkYCBpcyBhIHN0YXRpYyBpbmxpbmUsIGl0J3MgY29tcGlsZWQgaW50byBgX192bWZfYW5vbl9wcmVwYXJlYC4gVGhlcmVmb3JlLCBgX192bWZfYW5vbl9wcmVwYXJlYCBpcyB0aGUgZXhhY3QgZnVuY3Rpb24gd2hlcmUgdGhlIGNvZGUgaXMgY29tcGlsZWQgaW50bywgSSBoYXZlIHRoZSBjb3JyZWN0IGZ1bmN0aW9uIHN5bWJvbC4gWWVzLCBgX192bWZfYW5vbl9wcmVwYXJlYCBpcyB0aGUgcmlnaHQgZm9jdXMgc3ltYm9sLlxuXG5GaW5hbGx5LCByZWdhcmRpbmcgRW5hYmxlQ29uZmlncywgdGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBzbyBhbnkgc3RhbmRhcmQga2VybmVsIGNvbmZpZ3VyYXRpb24gd2l0aCBNTVUgc3VwcG9ydCBzaG91bGQgYmUgc3VmZmljaWVudC4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmxvY2tzIChgI2lmZGVmYCkgdGhhdCBtaWdodCBpbXBhY3QgdGhlIGNvZGUgYXJvdW5kIHRoaXMgc2VjdGlvbiwgYnV0IGl0IHNlZW1zIHVubGlrZWx5IGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZS4gVGhpcyBjaGFuZ2UgbG9va3Mgc3RyYWlnaHRmb3J3YXJkOyBzdGFuZGFyZCBrZXJuZWwgY29uZmlncyBzaG91bGQgYXBwbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwODEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEzOjA0OjI4LjU5NTM1MjE1NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjg3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtb3J5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzc4MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzc4MDpcXHRcXHRlbnRyeSA9IHB0ZV9ta3lvdW5nKHZtZi1cXHUwMDNlb3JpZ19wdGUpO1xcbjM3ODE6XFx0XFx0ZW50cnkgPSBtYXliZV9ta3dyaXRlKHB0ZV9ta2RpcnR5KGVudHJ5KSwgdm1hKTtcXG4zNzgyOlxcdFxcdGlmIChwdGVwX3NldF9hY2Nlc3NfZmxhZ3Modm1hLCB2bWYtXFx1MDAzZWFkZHJlc3MsIHZtZi1cXHUwMDNlcHRlLCBlbnRyeSwgMSkpXFxuMzc4MzpcXHRcXHRcXHR1cGRhdGVfbW11X2NhY2hlX3JhbmdlKHZtZiwgdm1hLCB2bWYtXFx1MDAzZWFkZHJlc3MsIHZtZi1cXHUwMDNlcHRlLCAxKTtcXG4zNzg0OlxcdFxcdHB0ZV91bm1hcF91bmxvY2sodm1mLVxcdTAwM2VwdGUsIHZtZi1cXHUwMDNlcHRsKTtcXG4zNzg1OlxcdFxcdGNvdW50X3ZtX2V2ZW50KFBHUkVVU0UpO1xcbjM3ODY6XFx0fVxcbjM3ODc6XFx0XFxuMzc4ODpcXHQvKlxcbjM3ODk6XFx0ICogV2UgY291bGQgYWRkIGEgYml0ZmxhZyBzb21ld2hlcmUsIGJ1dCBmb3Igbm93LCB3ZSBrbm93IHRoYXQgYWxsXFxuMzc5MDpcXHQgKiB2bV9vcHMgdGhhdCBoYXZlIGEgLVxcdTAwM2VtYXBfcGFnZXMgaGF2ZSBiZWVuIGF1ZGl0ZWQgYW5kIGRvbid0IG5lZWRcXG4zNzkxOlxcdCAqIHRoZSBtbWFwX2xvY2sgdG8gYmUgaGVsZC5cXG4zNzkyOlxcdCAqL1xcbjM3OTM6XFx0c3RhdGljIGlubGluZSB2bV9mYXVsdF90IHZtZl9jYW5fY2FsbF9mYXVsdChjb25zdCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4zNzk0OlxcdHtcXG4zNzk1OlxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mLVxcdTAwM2V2bWE7XFxuMzc5NjpcXHRcXG4zNzk3OlxcdFxcdGlmICh2bWEtXFx1MDAzZXZtX29wcy1cXHUwMDNlbWFwX3BhZ2VzIHx8ICEodm1mLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZBVUxUX0ZMQUdfVk1BX0xPQ0spKVxcbjM3OTg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMzc5OTpcXHRcXHR2bWFfZW5kX3JlYWQodm1hKTtcXG4zODAwOlxcdFxcdHJldHVybiBWTV9GQVVMVF9SRVRSWTtcXG4zODAxOlxcdH1cXG4zODAyOlxcdFxcbjM4MDM6XFx0LyoqXFxuMzgwNDpcXHQgKiB2bWFfaXNfZmF1bHRlZCAtIGNoZWNrIGlmIGEgdm1hIGhhcyBiZWVuIGZhdWx0ZWRcXG4zODA1OlxcdCAqIEB2bWE6IHRoZSB2bWEgdG8gY2hlY2tcXG4zODA2OlxcdCAqXFxuMzgwNzpcXHQgKiBUaGlzIGlzIGEgbG9ja2xlc3MgYWNjZXNzIHRoYXQgbWF5IHJhY2Ugd2l0aCBfX2Fub25fdm1hX3ByZXBhcmUoKS5cXG4zODA4OlxcdCAqIFRoZSByYWNlIGlzIHNhZmUgYmVjYXVzZTpcXG4zODA5OlxcdCAqIC0gVGhlIGZhdWx0IGhhbmRsZXIgZW5zdXJlcyB0aGF0IHRoZSBtYXBwaW5nIG9mIG1lbW9yeSBpcyBvcmRlcmVkLlxcbjM4MTA6XFx0ICogLSBJZiB3ZSByZWFkIE5VTEwsIHRoZSBjYWxsZXIgd2lsbCByZS1jaGVja1xcbjM4MTE6XFx0ICogLSBUaGUgcGFnZV90YWJsZV9sb2NrIHByb3ZpZGVzIEFDUVVJUkUgc2VtYW50aWNzIGZvciBtZW1vcnkgb3JkZXJpbmdcXG4zODEyOlxcdCAqXFxuMzgxMzpcXHQgKiBSZXR1cm46IHRydWUgaWYgdm1hLVxcdTAwM2Vhbm9uX3ZtYSBpcyBub24tTlVMTCwgZmFsc2Ugb3RoZXJ3aXNlXFxuMzgxNDpcXHQgKi9cXG4zODE1OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfZmF1bHRlZChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4zODE2OlxcdHtcXG4zODE3OlxcdFxcdC8qIExvY2tsZXNzIGNoZWNrIC0gc2FmZSBiZWNhdXNlIHdlIHJlLXZhbGlkYXRlIHVuZGVyIHBhZ2VfdGFibGVfbG9jayAqL1xcbjM4MTg6XFx0XFx0cmV0dXJuIGRhdGFfcmFjZSh2bWEtXFx1MDAzZWFub25fdm1hKTtcXG4zODE5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTM6MDQ6MjguNTk1NjI1MjA1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4ODg2OTI4NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgZm9yIFNldHRpbmcgRnV6emluZyBQYXJhbWV0ZXJzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uLCBhbmQgdGhlIGltbWVkaWF0ZSBvYnNlcnZhdGlvbiBpcyB0aGUgY29tcGxldGUgYWJzZW5jZSBvZiBgI2lmZGVmYCBndWFyZHMuIFRoYXQncyBhIGdvb2Qgc2lnbiwgYW5kIHRoZSBNTVUgYmVpbmcgZGVmYXVsdCBmb3IgYW1kNjQgaXMgYWxzbyBzdGFuZGFyZCBiZWhhdmlvciwgc28gbm90aGluZyBqdW1wcyBvdXQgdGhlcmUuXG5cbk5vdywgbGV0J3MgdmVyaWZ5IGlmIGBFbmFibGVDb25maWdzYCBzaG91bGQgaW5kZWVkIGJlIGFuIGVtcHR5IGxpc3QsIGBbXWAuIFllcCwgdGhhdCdzIGNvcnJlY3QgZm9yIHRoZSBzdGFuZGFyZCBjb3JlIGtlcm5lbCBmdW5jdGlvbmFsaXR5IHdlJ3JlIHRhcmdldGluZy4gTW92aW5nIG9uLi4uXG5cbk5vdywgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgYEZvY3VzU3ltYm9sc2AgZW50cnkuIEkgbmVlZCB0byBtYWtlICphYnNvbHV0ZWx5KiBzdXJlIEkgaGF2ZSB0aGUgcmlnaHQgc3ltYm9sLiBPa2F5LCBgX192bWZfYW5vbl9wcmVwYXJlYCBpcyB0aGUgbm9uLXN0YXRpYyBzeW1ib2wgaW4gYG1tL21lbW9yeS5jYCB0aGF0ICpleGFjdGx5KiBjb250YWlucyB0aGUgY2hhbmdlIEknbSBhZnRlci4gVGhhdCdzIGl0IVxuXG5BbHJpZ2h0LCB0aW1lIHRvIGVuc3VyZSBJIGhhdmUgdGhlIHJpZ2h0IGZvcm1hdCBmb3IgYHNldC1yZXN1bHRzYC4gSnVzdCB0byBiZSBjbGVhcjpcbiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXWAgLSBlbXB0eSBsaXN0LCBjb3JlIGZ1bmN0aW9uYWxpdHkuXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBbXCJfX3ZtZl9hbm9uX3ByZXBhcmVcIl1gIC0gdGhhdCBzcGVjaWZpYyBzeW1ib2wsIG5vdGhpbmcgZWxzZS5cbiogICBgUmVhc29uaW5nYDogQ29uY2lzZSBleHBsYW5hdGlvbiwgb2YgY291cnNlLlxuKiAgIGBXb3J0aEZ1enppbmdgOiBgdHJ1ZWAgLSBBYnNvbHV0ZWx5IVxuXG5QZXJmZWN0LiBJJ20gc2F0aXNmaWVkLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzYyLCJPdXRwdXRUb2tlbnMiOjEwNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEzOjA0OjMxLjQ4NDMyMTM5NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX192bWZfYW5vbl9wcmVwYXJlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGluIG1tL21lbW9yeS5jIGJ5IGludHJvZHVjaW5nIGEgbmV3IGhlbHBlciB2bWFfaXNfZmF1bHRlZCgpIHVzaW5nIGRhdGFfcmFjZSgpIGFuZCB1cGRhdGluZyBfX3ZtZl9hbm9uX3ByZXBhcmUoKS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBmYXVsdCBwcmVwYXJhdGlvbiBwYXRocyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byB2ZXJpZnkgbG9ja2xlc3MgY29uY3VycmVuY3kgaW52YXJpYW50cyBhbmQgbWVtb3J5IG9yZGVyaW5nIGJlaGF2aW9yLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fdm1mX2Fub25fcHJlcGFyZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbiBtbS9tZW1vcnkuYyBieSBpbnRyb2R1Y2luZyBhIG5ldyBoZWxwZXIgdm1hX2lzX2ZhdWx0ZWQoKSB1c2luZyBkYXRhX3JhY2UoKSBhbmQgdXBkYXRpbmcgX192bWZfYW5vbl9wcmVwYXJlKCkuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgZmF1bHQgcHJlcGFyYXRpb24gcGF0aHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gdmVyaWZ5IGxvY2tsZXNzIGNvbmN1cnJlbmN5IGludmFyaWFudHMgYW5kIG1lbW9yeSBvcmRlcmluZyBiZWhhdmlvci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTM6MDQ6MzEuNDg0MzQ5OTg1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk1ODM1NDYyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEzOjA0OjMxLjQ4NDc5MjEzNVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEwOTU3OTA4MDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgaGVscGVyIGZ1bmN0aW9uIGB2bWFfaXNfZmF1bHRlZCgpYCB0byBhbm5vdGF0ZSBhIGxvY2tsZXNzIHJlYWQgb2YgYHZtYS1cXHUwMDNlYW5vbl92bWFgIHVzaW5nIGBkYXRhX3JhY2UoKWAgaW4gYF9fdm1mX2Fub25fcHJlcGFyZSgpYC4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RhY2svaGVhcCBidWZmZXJzLCBzdHJ1Y3R1cmUgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMuIFRoZSBgdm1fYXJlYV9zdHJ1Y3RgIGlzIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgYnkgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBBcyB0aGVyZSBpcyBubyByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgbGVha2luZyB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlciBzcGFjZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjNmYmRhYjdiN2RhOTA2MDM5ZjY5N2E0N2M2MmM1OTQ2Y2U1MWE5NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTM6MDQ6MDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCA2YjgyODBjZmMxZGJlLi5kODVkNjc5Mjc0MDBiIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbisrKyBiL21tL21lbW9yeS5jXG5AQCAtMzgwMCw2ICszODAwLDI1IEBAIHN0YXRpYyBpbmxpbmUgdm1fZmF1bHRfdCB2bWZfY2FuX2NhbGxfZmF1bHQoY29uc3Qgc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXHRyZXR1cm4gVk1fRkFVTFRfUkVUUlk7XG4gfVxuIFxuKy8qKlxuKyAqIHZtYV9pc19mYXVsdGVkIC0gY2hlY2sgaWYgYSB2bWEgaGFzIGJlZW4gZmF1bHRlZFxuKyAqIEB2bWE6IHRoZSB2bWEgdG8gY2hlY2tcbisgKlxuKyAqIFRoaXMgaXMgYSBsb2NrbGVzcyBhY2Nlc3MgdGhhdCBtYXkgcmFjZSB3aXRoIF9fYW5vbl92bWFfcHJlcGFyZSgpLlxuKyAqIFRoZSByYWNlIGlzIHNhZmUgYmVjYXVzZTpcbisgKiAtIFRoZSBmYXVsdCBoYW5kbGVyIGVuc3VyZXMgdGhhdCB0aGUgbWFwcGluZyBvZiBtZW1vcnkgaXMgb3JkZXJlZC5cbisgKiAtIElmIHdlIHJlYWQgTlVMTCwgdGhlIGNhbGxlciB3aWxsIHJlLWNoZWNrXG4rICogLSBUaGUgcGFnZV90YWJsZV9sb2NrIHByb3ZpZGVzIEFDUVVJUkUgc2VtYW50aWNzIGZvciBtZW1vcnkgb3JkZXJpbmdcbisgKlxuKyAqIFJldHVybjogdHJ1ZSBpZiB2bWEtXHUwMDNlYW5vbl92bWEgaXMgbm9uLU5VTEwsIGZhbHNlIG90aGVyd2lzZVxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfZmF1bHRlZChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbit7XG4rXHQvKiBMb2NrbGVzcyBjaGVjayAtIHNhZmUgYmVjYXVzZSB3ZSByZS12YWxpZGF0ZSB1bmRlciBwYWdlX3RhYmxlX2xvY2sgKi9cbitcdHJldHVybiBkYXRhX3JhY2Uodm1hLVx1MDAzZWFub25fdm1hKTtcbit9XG4rXG4rXG4gLyoqXG4gICogX192bWZfYW5vbl9wcmVwYXJlIC0gUHJlcGFyZSB0byBoYW5kbGUgYW4gYW5vbnltb3VzIGZhdWx0LlxuICAqIEB2bWY6IFRoZSB2bV9mYXVsdCBkZXNjcmlwdG9yIHBhc3NlZCBmcm9tIHRoZSBmYXVsdCBoYW5kbGVyLlxuQEAgLTM4MTksOCArMzgzOCw3IEBAIHZtX2ZhdWx0X3QgX192bWZfYW5vbl9wcmVwYXJlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuIHtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mLVx1MDAzZXZtYTtcbiBcdHZtX2ZhdWx0X3QgcmV0ID0gMDtcbi1cbi1cdGlmIChsaWtlbHkodm1hLVx1MDAzZWFub25fdm1hKSlcbitcdGlmIChsaWtlbHkodm1hX2lzX2ZhdWx0ZWQodm1hKSkpXG4gXHRcdHJldHVybiAwO1xuIFx0aWYgKHZtZi1cdTAwM2VmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19WTUFfTE9DSykge1xuIFx0XHRpZiAoIW1tYXBfcmVhZF90cnlsb2NrKHZtYS1cdTAwM2V2bV9tbSkpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMzowNDozMS40ODQ3OTM5MDVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTkyMzk1OTA5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggd2l0aGluIGBtbS9tZW1vcnkuY2AuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGNlbnRlcmVkIGFyb3VuZCBgdm1hX2lzX2ZhdWx0ZWRgIGFuZCBob3cgaXQncyB1c2VkIGluIHRoZSBmYXVsdCBoYW5kbGluZyBwYXRoLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzIHRvIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzLCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbnQgYW5kIGl0cyBpbXBsaWNhdGlvbnMuXG5cbkZpcnN0LCBJIHNlZSBhIG5ldyBpbmxpbmUgZnVuY3Rpb24sIGB2bWFfaXNfZmF1bHRlZGAuIEl0IGFwcGVhcnMgdG8gYmUgYSBsb2NrbGVzcyBjaGVjayB0byBkZXRlcm1pbmUgaWYgYSBWTUEgKFZpcnR1YWwgTWVtb3J5IEFyZWEpIGhhcyBhbHJlYWR5IGJlZW4gZmF1bHRlZC4gVGhlIGNvbW1lbnRzIGFyZSBjcml0aWNhbCBoZXJlIOKAkyB0aGV5IGhpZ2hsaWdodCB0aGUgcG90ZW50aWFsIGRhdGEgcmFjZSB3aXRoIGBfX2Fub25fdm1hX3ByZXBhcmUoKWAgYW5kLCBpbXBvcnRhbnRseSwgd2h5IGl0J3MgY29uc2lkZXJlZCBzYWZlLiBUaGUgZXhwbGFuYXRpb24gYWJvdXQgbWVtb3J5IG9yZGVyaW5nIGVuZm9yY2VkIGJ5IHRoZSBmYXVsdCBoYW5kbGVyIGFuZCB0aGUgdXNlIG9mIGBwYWdlX3RhYmxlX2xvY2tgIGZvciBhY3F1aXJlIHNlbWFudGljcyBpcyB3aGF0IEkgd291bGQgZXhwZWN0IGluIGEgbG93LWxldmVsIG1lbW9yeSBtYW5hZ2VtZW50IGNvbnRleHQuIEl0IGlzIGludGVyZXN0aW5nIHRoZXkgYXJlIHVzaW5nIGBkYXRhX3JhY2VgIGhlcmUsIEkgd2lsbCBoYXZlIHRvIGludmVzdGlnYXRlIHdoZXJlIHRoYXQgbWFjcm8gaXMgZGVmaW5lZC5cblxuRXNzZW50aWFsbHksIHRoZXkncmUgb3B0aW1pemluZyBieSBhdm9pZGluZyBhIGxvY2sgaW4gdGhlIGNvbW1vbiBjYXNlLCByZWx5aW5nIG9uIHJlLXZhbGlkYXRpb24gaWYgdGhleSByZWFkIGEgc3RhbGUgdmFsdWUuIFRoaXMgbWFrZXMgc2Vuc2UgZnJvbSBhIHBlcmZvcm1hbmNlIHBlcnNwZWN0aXZlIOKAkyBtaW5pbWl6aW5nIGxvY2sgY29udGVudGlvbiBpcyBhbHdheXMgYSBnb29kIGdvYWwuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB3aGVyZSBpdCdzICp1c2VkKi4gVGhlIGNoYW5nZSBpbiBgX192bWZfYW5vbl9wcmVwYXJlYCBpcyB0aGUga2V5LiBUaGUgcGF0Y2ggcmVwbGFjZXMgdGhlIGRpcmVjdCBjaGVjayBgdm1hLVx1MDAzZWFub25fdm1hYCB3aXRoIGEgY2FsbCB0byBvdXIgbmV3IGZ1bmN0aW9uIGB2bWFfaXNfZmF1bHRlZGAuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgbG9ja2xlc3MgY2hlY2sgaW4gYHZtYV9pc19mYXVsdGVkYCBpcyBub3cgdGhlIHByZWZlcnJlZCBtZXRob2Qgb2YgZGV0ZWN0aW5nIGlmIGEgZmF1bHQgaGFzIGFscmVhZHkgb2NjdXJyZWQuIFRoaXMgY2hhbmdlIGltcGxpZXMgYSBwZXJmb3JtYW5jZSBnYWluLCBidXQgSSBuZWVkIHRvIGFuYWx5emUgaG93IG9mdGVuIHRoaXMgY29kZSBwYXRoIGlzIGhpdCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QuIEkgYWxzbyB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgbGlrZWx5IGNvbmRpdGlvbiBpcyB0cnVseSBsaWtlbHkuXG5cbkknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgX192bWZfYW5vbl9wcmVwYXJlYCB0byBzZWUgaWYgdGhlIGFzc3VtcHRpb25zIGhvbGQgdXAgaW4gcmVhbC13b3JsZCBzY2VuYXJpb3MuIEkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGlzIHBhdGNoIGhhcyBwcm9wZXIgcmVncmVzc2lvbiB0ZXN0cyBhbmQgaXMgcHJvcGVybHkgZG9jdW1lbnRlZC4gSSB3aWxsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uIGlzc3VlcyByZWxhdGVkIHRvIHRoZSBsb2NrbGVzcyBhY2Nlc3MgcGF0dGVybi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQwNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEzOjA0OjM3LjQwODc1Njk4NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDgwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtb3J5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzgwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzgwMDpcXHRcXHRyZXR1cm4gVk1fRkFVTFRfUkVUUlk7XFxuMzgwMTpcXHR9XFxuMzgwMjpcXHRcXG4zODAzOlxcdC8qKlxcbjM4MDQ6XFx0ICogdm1hX2lzX2ZhdWx0ZWQgLSBjaGVjayBpZiBhIHZtYSBoYXMgYmVlbiBmYXVsdGVkXFxuMzgwNTpcXHQgKiBAdm1hOiB0aGUgdm1hIHRvIGNoZWNrXFxuMzgwNjpcXHQgKlxcbjM4MDc6XFx0ICogVGhpcyBpcyBhIGxvY2tsZXNzIGFjY2VzcyB0aGF0IG1heSByYWNlIHdpdGggX19hbm9uX3ZtYV9wcmVwYXJlKCkuXFxuMzgwODpcXHQgKiBUaGUgcmFjZSBpcyBzYWZlIGJlY2F1c2U6XFxuMzgwOTpcXHQgKiAtIFRoZSBmYXVsdCBoYW5kbGVyIGVuc3VyZXMgdGhhdCB0aGUgbWFwcGluZyBvZiBtZW1vcnkgaXMgb3JkZXJlZC5cXG4zODEwOlxcdCAqIC0gSWYgd2UgcmVhZCBOVUxMLCB0aGUgY2FsbGVyIHdpbGwgcmUtY2hlY2tcXG4zODExOlxcdCAqIC0gVGhlIHBhZ2VfdGFibGVfbG9jayBwcm92aWRlcyBBQ1FVSVJFIHNlbWFudGljcyBmb3IgbWVtb3J5IG9yZGVyaW5nXFxuMzgxMjpcXHQgKlxcbjM4MTM6XFx0ICogUmV0dXJuOiB0cnVlIGlmIHZtYS1cXHUwMDNlYW5vbl92bWEgaXMgbm9uLU5VTEwsIGZhbHNlIG90aGVyd2lzZVxcbjM4MTQ6XFx0ICovXFxuMzgxNTpcXHRzdGF0aWMgaW5saW5lIGJvb2wgdm1hX2lzX2ZhdWx0ZWQoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuMzgxNjpcXHR7XFxuMzgxNzpcXHRcXHQvKiBMb2NrbGVzcyBjaGVjayAtIHNhZmUgYmVjYXVzZSB3ZSByZS12YWxpZGF0ZSB1bmRlciBwYWdlX3RhYmxlX2xvY2sgKi9cXG4zODE4OlxcdFxcdHJldHVybiBkYXRhX3JhY2Uodm1hLVxcdTAwM2Vhbm9uX3ZtYSk7XFxuMzgxOTpcXHR9XFxuMzgyMDpcXHRcXG4zODIxOlxcdFxcbjM4MjI6XFx0LyoqXFxuMzgyMzpcXHQgKiBfX3ZtZl9hbm9uX3ByZXBhcmUgLSBQcmVwYXJlIHRvIGhhbmRsZSBhbiBhbm9ueW1vdXMgZmF1bHQuXFxuMzgyNDpcXHQgKiBAdm1mOiBUaGUgdm1fZmF1bHQgZGVzY3JpcHRvciBwYXNzZWQgZnJvbSB0aGUgZmF1bHQgaGFuZGxlci5cXG4zODI1OlxcdCAqXFxuMzgyNjpcXHQgKiBXaGVuIHByZXBhcmluZyB0byBpbnNlcnQgYW4gYW5vbnltb3VzIHBhZ2UgaW50byBhIFZNQSBmcm9tIGFcXG4zODI3OlxcdCAqIGZhdWx0IGhhbmRsZXIsIGNhbGwgdGhpcyBmdW5jdGlvbiByYXRoZXIgdGhhbiBhbm9uX3ZtYV9wcmVwYXJlKCkuXFxuMzgyODpcXHQgKiBJZiB0aGlzIHZtYSBkb2VzIG5vdCBhbHJlYWR5IGhhdmUgYW4gYXNzb2NpYXRlZCBhbm9uX3ZtYSBhbmQgd2UgYXJlXFxuMzgyOTpcXHQgKiBvbmx5IHByb3RlY3RlZCBieSB0aGUgcGVyLVZNQSBsb2NrLCB0aGUgY2FsbGVyIG11c3QgcmV0cnkgd2l0aCB0aGVcXG4zODMwOlxcdCAqIG1tYXBfbG9jayBoZWxkLiAgX19hbm9uX3ZtYV9wcmVwYXJlKCkgd2lsbCBsb29rIGF0IGFkamFjZW50IFZNQXMgdG9cXG4zODMxOlxcdCAqIGRldGVybWluZSBpZiB0aGlzIFZNQSBjYW4gc2hhcmUgaXRzIGFub25fdm1hLCBhbmQgdGhhdCdzIG5vdCBzYWZlIHRvXFxuMzgzMjpcXHQgKiBkbyB3aXRoIG9ubHkgdGhlIHBlci1WTUEgbG9jayBoZWxkIGZvciB0aGlzIFZNQS5cXG4zODMzOlxcdCAqXFxuMzgzNDpcXHQgKiBSZXR1cm46IDAgaWYgZmF1bHQgaGFuZGxpbmcgY2FuIHByb2NlZWQuICBBbnkgb3RoZXIgdmFsdWUgc2hvdWxkIGJlXFxuMzgzNTpcXHQgKiByZXR1cm5lZCB0byB0aGUgY2FsbGVyLlxcbjM4MzY6XFx0ICovXFxuMzgzNzpcXHR2bV9mYXVsdF90IF9fdm1mX2Fub25fcHJlcGFyZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4zODM4OlxcdHtcXG4zODM5OlxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mLVxcdTAwM2V2bWE7XFxuMzg0MDpcXHRcXHR2bV9mYXVsdF90IHJldCA9IDA7XFxuMzg0MTpcXHRcXHRpZiAobGlrZWx5KHZtYV9pc19mYXVsdGVkKHZtYSkpKVxcbjM4NDI6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMzg0MzpcXHRcXHRpZiAodm1mLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZBVUxUX0ZMQUdfVk1BX0xPQ0spIHtcXG4zODQ0OlxcdFxcdFxcdGlmICghbW1hcF9yZWFkX3RyeWxvY2sodm1hLVxcdTAwM2V2bV9tbSkpXFxuMzg0NTpcXHRcXHRcXHRcXHRyZXR1cm4gVk1fRkFVTFRfUkVUUlk7XFxuMzg0NjpcXHRcXHR9XFxuMzg0NzpcXHRcXHRpZiAoX19hbm9uX3ZtYV9wcmVwYXJlKHZtYSkpXFxuMzg0ODpcXHRcXHRcXHRyZXQgPSBWTV9GQVVMVF9PT007XFxuMzg0OTpcXHRcXHRpZiAodm1mLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZBVUxUX0ZMQUdfVk1BX0xPQ0spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEzOjA0OjM3LjQwOTA2Nzc5NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDMzNjExMDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IFRoaXMgUGF0Y2ggaXMgU2FmZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IGFwcGVhcnMgdG8gYmUgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHJlZmFjdG9yaW5nLCBhZGRpbmcgYSBoZWxwZXIgZnVuY3Rpb24sIGB2bWFfaXNfZmF1bHRlZCgpYCwgdGhhdCBlbmNhcHN1bGF0ZXMgdGhlIGBkYXRhX3JhY2Uodm1hLVx1MDAzZWFub25fdm1hKWAgY2hlY2suIFRoZSBwcmltYXJ5IGludGVudCBzZWVtcyB0byBiZSBjbGFyaXR5IG9yIEtDU0FOIGFubm90YXRpb24uIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IEtNU0FOIGNvbmNlcm5zP1xuXG5JbW1lZGlhdGVseSwgSSdtIGNoZWNraW5nIGZvciB0aGUgdXN1YWwgc3VzcGVjdHMuIE5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm8gbW9kaWZpY2F0aW9ucyB0byB1c2VyLXNwYWNlIGNvcGllcywgbm8gbmV3IGFsbG9jYXRpb25zLiBJIGRvbid0IHNlZSBhbnkgb2J2aW91cyBuZXcgZGF0YSByYWNlcyBpbnRyb2R1Y2VkLCBiZXlvbmQgdGhpcyBsb2NrbGVzcyBhY2Nlc3Mgd2hpY2ggaXMgYmVpbmcgYW5ub3RhdGVkLiBgdm1hLVx1MDAzZWFub25fdm1hYCBpcyBwYXJ0IG9mIHRoZSBgc3RydWN0IHZtX2FyZWFfc3RydWN0YCwgYW5kIEkga25vdyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIGhhbmRsZXMgdGhlIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIG9mIHRoZXNlIFZNQXMuIFNvLCB0aGUgcG9pbnRlciBpcyBwcm9wZXJseSBpbml0aWFsaXplZCBhdCBhbGxvY2F0aW9uLlxuXG5Ob3csIGxldCBtZSBwdXQgb24gbXkgS01TQU4gaGF0IGFuZCBnbyB0aHJvdWdoIHRoZSBjcml0ZXJpYS4gVGhpcyBwYXRjaCBkb2Vzbid0OlxuXG4xLiAgVG91Y2ggYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSB3aGVyZSB1bmluaXRpYWxpemVkIGRhdGEgY291bGQgbGVhay5cbjIuICBJbnRyb2R1Y2UgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cbjMuICBBbGxvY2F0ZSBvciBpbml0aWFsaXplIGFueSBjb21wbGV4IHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy5cbjQuICBNb2RpZnkgYm91bmRzIGNoZWNrcyBvciBsZW5ndGhzIGluIGEgd2F5IHRoYXQgYWxsb3dzIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIHBhcnRzIG9mIGJ1ZmZlcnMuXG5cblRoZXJlZm9yZSwgS01TQU4gaXMgY2xlYXJseSBub3QgbmVlZGVkIGhlcmUuIFRoZSBjaGFuZ2VzIGZhbGwgc3F1YXJlbHkgaW50byB0aGUgXCJOZWVkc0tNU0FOPWZhbHNlXCIgY2F0ZWdvcnkuIFNwZWNpZmljYWxseSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgaGVscGVyIHRvIGFubm90YXRlIGxvY2tsZXNzIGFjY2VzcyBvZiBhIHByb3Blcmx5IGluaXRpYWxpemVkIGZpZWxkLCB3aXRoIG5vIGNoYW5jZSBvZiBpbnRyb2R1Y2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBUaGUgcG90ZW50aWFsIGlzc3VlcyBhcmUgYWxyZWFkeSBjb3ZlcmVkIGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuXG5cblNvLCBoZXJlJ3MgbXkgcmVhc29uaW5nOiB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBoZWxwZXIgZm9yIGEgYGRhdGFfcmFjZSgpYCBjaGVjayBvbiBgdm1hLVx1MDAzZWFub25fdm1hYCB3aXRoaW4gYF9fdm1mX2Fub25fcHJlcGFyZSgpYC4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gdXNlci1zcGFjZSBjb3BpZXMsIGFuZCBubyBuZXcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3IgZGF0YSBzdHJ1Y3R1cmVzLiBUaGUgYHZtX2FyZWFfc3RydWN0YCBpcyBwcm9wZXJseSBpbml0aWFsaXplZCBieSB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgc28gdGhlcmUncyBubyB3YXkgdG8gcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBjYXVzZSBpbmZvcm1hdGlvbiBsZWFrcyB2aWEgYHZtYS1cdTAwM2Vhbm9uX3ZtYWAuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzICpub3QqIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCB3YXJyYW50IEtNU0FOIGZ1enppbmcuIFdlJ3JlIGdvb2QgdG8gZ28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyMjAsIk91dHB1dFRva2VucyI6MTQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTM6MDQ6NDIuNDQyNjgyMDQ3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgaGVscGVyIGZ1bmN0aW9uIGB2bWFfaXNfZmF1bHRlZCgpYCB0byBhbm5vdGF0ZSBhIGxvY2tsZXNzIHJlYWQgb2YgYHZtYS1cXHUwMDNlYW5vbl92bWFgIHVzaW5nIGBkYXRhX3JhY2UoKWAgaW4gYF9fdm1mX2Fub25fcHJlcGFyZSgpYC4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RhY2svaGVhcCBidWZmZXJzLCBzdHJ1Y3R1cmUgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMuIFRoZSBgdm1fYXJlYV9zdHJ1Y3RgIGlzIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgYnkgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBBcyB0aGVyZSBpcyBubyByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgbGVha2luZyB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlciBzcGFjZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGhlbHBlciBmdW5jdGlvbiBgdm1hX2lzX2ZhdWx0ZWQoKWAgdG8gYW5ub3RhdGUgYSBsb2NrbGVzcyByZWFkIG9mIGB2bWEtXFx1MDAzZWFub25fdm1hYCB1c2luZyBgZGF0YV9yYWNlKClgIGluIGBfX3ZtZl9hbm9uX3ByZXBhcmUoKWAuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0YWNrL2hlYXAgYnVmZmVycywgc3RydWN0dXJlIGNvcGllcyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzLiBUaGUgYHZtX2FyZWFfc3RydWN0YCBpcyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkIGJ5IHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gQXMgdGhlcmUgaXMgbm8gcmlzayBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGxlYWtpbmcgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowcnmvs[1] Phase: Succeeded StartedAt: 2026-09-09 13:04:53 +0000 UTC FinishedAt: 2026-09-09 13:04:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmvs[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-09 13:04:53 +0000 UTC FinishedAt: 2026-09-09 13:04:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmvs[2] Phase: Succeeded StartedAt: 2026-09-09 13:04:53 +0000 UTC FinishedAt: 2026-09-09 16:55:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","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":["__vmf_anon_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","series_id":"3207b9bb-29fd-49e0-921b-d6ec1b7a1784","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-09 13:04:53 +0000 UTC FinishedAt: 2026-09-09 16:55:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","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":["__vmf_anon_prepare"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","series_id":"3207b9bb-29fd-49e0-921b-d6ec1b7a1784","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-workflowcnmvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","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":["__vmf_anon_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","series_id":"3207b9bb-29fd-49e0-921b-d6ec1b7a1784","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-09 13:04:53 +0000 UTC FinishedAt: 2026-09-09 13:05:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","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":["__vmf_anon_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","series_id":"3207b9bb-29fd-49e0-921b-d6ec1b7a1784","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-09 13:04:53 +0000 UTC FinishedAt: 2026-09-09 13:04:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","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-workflowcnmvs/series-workflowcnmvs-convert-artifact-952320213/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcnmvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","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":["__vmf_anon_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","series_id":"3207b9bb-29fd-49e0-921b-d6ec1b7a1784","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-09 13:05:03 +0000 UTC FinishedAt: 2026-09-09 13:26:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","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":["__vmf_anon_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","series_id":"3207b9bb-29fd-49e0-921b-d6ec1b7a1784","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-09 13:05:03 +0000 UTC FinishedAt: 2026-09-09 13:26:31 +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:*4b8c4bfd-a927-47b9-8581-e750a86bc614,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-workflowcnmvs/series-workflowcnmvs-convert-artifact-952320213/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": "60f15aac-bf7a-45fa-b1cb-87a3e2a23eb0", "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-workflowcnmvs/series-workflowcnmvs-build-action-46066491/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcnmvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","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":["__vmf_anon_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","series_id":"3207b9bb-29fd-49e0-921b-d6ec1b7a1784","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-09 13:05:03 +0000 UTC FinishedAt: 2026-09-09 13:25:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*4b8c4bfd-a927-47b9-8581-e750a86bc614,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-workflowcnmvs/series-workflowcnmvs-convert-artifact-952320213/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": "60f15aac-bf7a-45fa-b1cb-87a3e2a23eb0", "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-workflowcnmvs/series-workflowcnmvs-build-action-46066491/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcnmvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","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":["__vmf_anon_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","series_id":"3207b9bb-29fd-49e0-921b-d6ec1b7a1784","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-09 13:26:31 +0000 UTC FinishedAt: 2026-09-09 13:26:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","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":["__vmf_anon_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","series_id":"3207b9bb-29fd-49e0-921b-d6ec1b7a1784","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-09 13:26:31 +0000 UTC FinishedAt: 2026-09-09 13:26:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","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":["__vmf_anon_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","series_id":"3207b9bb-29fd-49e0-921b-d6ec1b7a1784","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-09 13:26:31 +0000 UTC FinishedAt: 2026-09-09 13:26:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","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":["__vmf_anon_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","series_id":"3207b9bb-29fd-49e0-921b-d6ec1b7a1784","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-09 13:26:31 +0000 UTC FinishedAt: 2026-09-09 13:26:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","series_id":"3207b9bb-29fd-49e0-921b-d6ec1b7a1784","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-workflowcnmvs/series-workflowcnmvs-convert-artifact-2434155184/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcnmvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","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":["__vmf_anon_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","series_id":"3207b9bb-29fd-49e0-921b-d6ec1b7a1784","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-09 13:26:41 +0000 UTC FinishedAt: 2026-09-09 13:28:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","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":["__vmf_anon_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","series_id":"3207b9bb-29fd-49e0-921b-d6ec1b7a1784","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-09 13:26:41 +0000 UTC FinishedAt: 2026-09-09 13:28:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*60f15aac-bf7a-45fa-b1cb-87a3e2a23eb0,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-workflowcnmvs/series-workflowcnmvs-build-action-46066491/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-workflowcnmvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","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":["__vmf_anon_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","series_id":"3207b9bb-29fd-49e0-921b-d6ec1b7a1784","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-09 13:28:45 +0000 UTC FinishedAt: 2026-09-09 13:28:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","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":["__vmf_anon_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","series_id":"3207b9bb-29fd-49e0-921b-d6ec1b7a1784","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-09 13:28:45 +0000 UTC FinishedAt: 2026-09-09 13:28:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","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":["__vmf_anon_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","series_id":"3207b9bb-29fd-49e0-921b-d6ec1b7a1784","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-09 13:28:45 +0000 UTC FinishedAt: 2026-09-09 13:49:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","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":["__vmf_anon_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","series_id":"3207b9bb-29fd-49e0-921b-d6ec1b7a1784","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-09 13:28:45 +0000 UTC FinishedAt: 2026-09-09 13:49:51 +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:*4b8c4bfd-a927-47b9-8581-e750a86bc614,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-workflowcnmvs/series-workflowcnmvs-convert-artifact-2434155184/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": "b46023b7-5dc7-4238-adf7-554dda24f680", "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-workflowcnmvs/series-workflowcnmvs-build-action-3699121324/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcnmvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","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":["__vmf_anon_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","series_id":"3207b9bb-29fd-49e0-921b-d6ec1b7a1784","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-09 13:28:45 +0000 UTC FinishedAt: 2026-09-09 13:49:31 +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:*4b8c4bfd-a927-47b9-8581-e750a86bc614,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-workflowcnmvs/series-workflowcnmvs-convert-artifact-2434155184/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": "b46023b7-5dc7-4238-adf7-554dda24f680", "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-workflowcnmvs/series-workflowcnmvs-build-action-3699121324/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcnmvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","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":["__vmf_anon_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","series_id":"3207b9bb-29fd-49e0-921b-d6ec1b7a1784","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-09 13:49:51 +0000 UTC FinishedAt: 2026-09-09 13:49:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","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":["__vmf_anon_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","series_id":"3207b9bb-29fd-49e0-921b-d6ec1b7a1784","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-09 13:49:51 +0000 UTC FinishedAt: 2026-09-09 13:49:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","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":["__vmf_anon_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","series_id":"3207b9bb-29fd-49e0-921b-d6ec1b7a1784","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-09 13:49:51 +0000 UTC FinishedAt: 2026-09-09 13:52:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","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":["__vmf_anon_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","series_id":"3207b9bb-29fd-49e0-921b-d6ec1b7a1784","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-09 13:49:51 +0000 UTC FinishedAt: 2026-09-09 13:51:56 +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:*b46023b7-5dc7-4238-adf7-554dda24f680,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-workflowcnmvs/series-workflowcnmvs-build-action-3699121324/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-workflowcnmvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","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":["__vmf_anon_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","series_id":"3207b9bb-29fd-49e0-921b-d6ec1b7a1784","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-09 13:52:05 +0000 UTC FinishedAt: 2026-09-09 16:55:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","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":["__vmf_anon_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","series_id":"3207b9bb-29fd-49e0-921b-d6ec1b7a1784","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-09 13:52:05 +0000 UTC FinishedAt: 2026-09-09 16:55:01 +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":["__vmf_anon_prepare"],"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:*60f15aac-bf7a-45fa-b1cb-87a3e2a23eb0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b46023b7-5dc7-4238-adf7-554dda24f680,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-workflowcnmvs/series-workflowcnmvs-build-action-46066491/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-workflowcnmvs/series-workflowcnmvs-build-action-3699121324/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowcnmvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","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":["__vmf_anon_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","series_id":"3207b9bb-29fd-49e0-921b-d6ec1b7a1784","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-09 13:52:05 +0000 UTC FinishedAt: 2026-09-09 13:52:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","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":["__vmf_anon_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","series_id":"3207b9bb-29fd-49e0-921b-d6ec1b7a1784","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-09 13:52:05 +0000 UTC FinishedAt: 2026-09-09 13:52:09 +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":["__vmf_anon_prepare"],"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-workflowcnmvs/series-workflowcnmvs-convert-artifact-3250908969/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcnmvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","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":["__vmf_anon_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","series_id":"3207b9bb-29fd-49e0-921b-d6ec1b7a1784","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-09 13:52:05 +0000 UTC FinishedAt: 2026-09-09 13:52:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","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":["__vmf_anon_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","series_id":"3207b9bb-29fd-49e0-921b-d6ec1b7a1784","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-09 13:52:05 +0000 UTC FinishedAt: 2026-09-09 13:52:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","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":["__vmf_anon_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","series_id":"3207b9bb-29fd-49e0-921b-d6ec1b7a1784","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-09 13:52:05 +0000 UTC FinishedAt: 2026-09-09 13:52:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","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":["__vmf_anon_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","series_id":"3207b9bb-29fd-49e0-921b-d6ec1b7a1784","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-09 13:52:15 +0000 UTC FinishedAt: 2026-09-09 16:55:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmvs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","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":["__vmf_anon_prepare"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8eae39cd0adf28ba81a46090b10484cf402c0ac8","config_name":"upstream-apparmor-kasan.config","series_id":"3207b9bb-29fd-49e0-921b-d6ec1b7a1784","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-09 13:52:15 +0000 UTC FinishedAt: 2026-09-09 16:54:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*60f15aac-bf7a-45fa-b1cb-87a3e2a23eb0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b46023b7-5dc7-4238-adf7-554dda24f680,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-workflowcnmvs/series-workflowcnmvs-build-action-46066491/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-workflowcnmvs/series-workflowcnmvs-build-action-3699121324/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-workflowcnmvs/series-workflowcnmvs-convert-artifact-3250908969/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,}